<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.kde.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.6"
          urlbase="https://bugs.kde.org/"
          
          maintainer="sysadmin@kde.org"
>

    <bug>
          <bug_id>216837</bug_id>
          
          <creation_ts>2009-11-30 17:56:01 +0000</creation_ts>
          <short_desc>drd/tests/pth_cond_destroy_busy fails on OS X</short_desc>
          <delta_ts>2026-03-12 12:34:25 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>6</classification_id>
          <classification>Developer tools</classification>
          <product>valgrind</product>
          <component>vex</component>
          <version>3.5 SVN</version>
          <rep_platform>Unlisted Binaries</rep_platform>
          <op_sys>macOS</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>NOR</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Potapenko">glider</reporter>
          <assigned_to name="Paul Floyd">pjfloyd</assigned_to>
          <cc>bart.vanassche+kde</cc>
    
    <cc>bdheller</cc>
    
    <cc>dmaclach</cc>
    
    <cc>gparker</cc>
    
    <cc>halilsen</cc>
    
    <cc>johan.walles</cc>
    
    <cc>konstantin.s.serebryany</cc>
    
    <cc>n.nethercote</cc>
    
    <cc>pjfloyd</cc>
    
    <cc>rhyskidd</cc>
    
    <cc>timurrrr</cc>
          
          <cf_commitlink></cf_commitlink>
          <cf_versionfixedin></cf_versionfixedin>
          <cf_sentryurl></cf_sentryurl>
          <votes>51</votes>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>871286</commentid>
    <comment_count>0</comment_count>
      <attachid>38721</attachid>
    <who name="Alexander Potapenko">glider</who>
    <bug_when>2009-11-30 17:56:01 +0000</bug_when>
    <thetext>Created attachment 38721
A reproducer of the VEX threading instrumentation problem on Mac OS

(My uname -a says:
Darwin mcgrind 9.7.0 Darwin Kernel Version 9.7.0: Tue Mar 31 22:52:17 PDT 2009; root:xnu-1228.12.14~1/RELEASE_I386 i386)

To reproduce the problem, compile the attached source file using:
  g++ worker_vex_test.mm   -framework Foundation

and run Helgrind and/or DRD with the runtime assertions enabled on the resulting binary (see worker_vex_test.{helgrind,drd}.log for my logs).

For some reason both tools end up trying to operate with an uninitialized thread, i.e. either VG_(running_tid) returns an incorrect result or the thread creation is instrumented incorrectly.

The reproducer is quite large (it&apos;s a part of the Chromium source code, taken from www.chromium.org). I&apos;m working on a smaller one. There is a number of Chromium tests that hit the same issue, but they&apos;re far more complicated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>871287</commentid>
    <comment_count>1</comment_count>
      <attachid>38722</attachid>
    <who name="Alexander Potapenko">glider</who>
    <bug_when>2009-11-30 17:57:41 +0000</bug_when>
    <thetext>Created attachment 38722
The log of running Helgrind on the supplied program.

The Helgrind log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>871291</commentid>
    <comment_count>2</comment_count>
      <attachid>38723</attachid>
    <who name="Alexander Potapenko">glider</who>
    <bug_when>2009-11-30 18:03:00 +0000</bug_when>
    <thetext>Created attachment 38723
The log of running DRD -v on the supplied program.

Note the &quot;drd_pre_thread_create&quot;, &quot;drd_post_thread_create&quot; and &quot;leaving drd_post_thread_create&quot; lines in the log. I&apos;ve patched DRD a little so that it prints &quot;drd_pre_thread_create&quot; and &quot;drd_post_thread_create&quot; entering the corresponding functions and &quot;leaving drd_post_thread_create&quot; leaving leaving drd_post_thread_create(). This change does not affect DRD&apos;s functionality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>871293</commentid>
    <comment_count>3</comment_count>
      <attachid>38724</attachid>
    <who name="Alexander Potapenko">glider</who>
    <bug_when>2009-11-30 18:04:13 +0000</bug_when>
    <thetext>Created attachment 38724
The log of running Helgrind -v on the supplied program.

(replaced the previous Helgrind log with a more verbose one)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>871784</commentid>
    <comment_count>4</comment_count>
      <attachid>38744</attachid>
    <who name="Alexander Potapenko">glider</who>
    <bug_when>2009-12-01 17:15:55 +0000</bug_when>
    <thetext>Created attachment 38744
A smaller reproducer -- (only 1400 lines instead of 9k)

Added a smaller and more readable reproducer.
If someone can verify that the bug is reproducible for him, I&apos;d appreciate that.
Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>873449</commentid>
    <comment_count>5</comment_count>
    <who name="Konstantin Serebryany">konstantin.s.serebryany</who>
    <bug_when>2009-12-04 18:00:31 +0000</bug_when>
    <thetext>This also affects ThreadSanitizer in the same way</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876638</commentid>
    <comment_count>6</comment_count>
      <attachid>38949</attachid>
    <who name="Alexander Potapenko">glider</who>
    <bug_when>2009-12-09 18:21:11 +0000</bug_when>
    <thetext>Created attachment 38949
A 72-line reproducer exploiting NSOperationQueue

Another reproducer that uses only NSOperationQueue.

Build: $ g++ nsop.mm -o nsop -framework Foundation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>885500</commentid>
    <comment_count>7</comment_count>
      <attachid>39290</attachid>
    <who name="Alexander Potapenko">glider</who>
    <bug_when>2009-12-23 16:55:15 +0000</bug_when>
    <thetext>Created attachment 39290
A small attachment that uses only NSOperationQueue



The attached code exploits NSOperationQueue from the Foundation
library. To build it, just run:

 $ g++ nsop.mm -o nsop -framework Foundation

If I run ./nsop natively, I get something like:
 2009-12-09 19:58:33.021 nsop[64614:10b] *** _NSAutoreleaseNoPool():
Object 0x106580 of class __NSFastEnumerationEnumerator autoreleased
with no pool in place - just leaking
 Stack: (0x92a01f0f 0x9290e442 0x929a41d2 0x929a4597)
 2009-12-09 19:58:33.022 nsop[64614:10b] *** _NSAutoreleaseNoPool():
Object 0x10c490 of class NSCFSet autoreleased with no pool in place -
just leaking
 Stack: (0x92a01f0f 0x9290e442 0x92926e63 0x92926b3c 0x929267b8
0x92926493 0x92926242 0x92925e3e 0x929a420f 0x929a4597)
 2009-12-09 19:58:33.022 nsop[64614:10b] *** _NSAutoreleaseNoPool():
Object 0x10ce40 of class NSCFSet autoreleased with no pool in place -
just leaking
 Stack: (0x92a01f0f 0x9290e442 0x92926e63 0x92926b3c 0x929267b8
0x92926493 0x92926242 0x92925e3e 0x929a420f 0x929a4597)
 Printer::Print()
 BYE
 Task::Run()

But neither DRD nor Helgrind cannot cope with this binary:

 $ inst/bin/valgrind  --tool=drd  /Users/glider/src/worker_vex_test/nsop 2&gt;&amp;1
 ==68403== drd, a thread error detector
 ...
 --68403-- /Users/glider/src/worker_vex_test/nsop:
 --68403-- dSYM directory is missing; consider using --dsymutil=yes
 2009-12-09 20:02:14.368 nsop[68403:50b] *** _NSAutoreleaseNoPool():
Object 0x1cb4d40 of class __NSFastEnumerationEnumerator autoreleased
with no pool in place - just leaking
 Stack: (0x4d1f0f 0x3de442 0x4741d2 0x474597)
 2009-12-09 20:02:14.617 nsop[68403:50b] *** _NSAutoreleaseNoPool():
Object 0x1cbcff0 of class NSCFSet autoreleased with no pool in place -
just leaking
 Stack: (0x4d1f0f 0x3de442 0x3f6e63 0x3f6b3c 0x3f67b8 0x3f6493
0x3f6242 0x3f5e3e 0x47420f 0x474597)
 2009-12-09 20:02:14.659 nsop[68403:50b] *** _NSAutoreleaseNoPool():
Object 0x1cc12e0 of class NSCFSet autoreleased with no pool in place -
just leaking
 Stack: (0x4d1f0f 0x3de442 0x3f6e63 0x3f6b3c 0x3f67b8 0x3f6493
0x3f6242 0x3f5e3e 0x47420f 0x474597)

 drd: drd_thread.c:584 (vgDrd_thread_set_vg_running_tid): Assertion
&apos;vg_tid != VG_INVALID_THREADID&apos; failed.
 ==68403==    at 0xF009DCBD: ???
 ==68403==    by 0xF009DF71: ???
 ...

 sched status:
   running_tid=0

 Thread 1: status = VgTs_WaitSys
 ==68403==    at 0x7DDC62: ioctl (in /usr/lib/libSystem.B.dylib)
 ==68403==    by 0x7EB00A: __smakebuf (in /usr/lib/libSystem.B.dylib)
 ==68403==    by 0x7EAF0C: __swsetup (in /usr/lib/libSystem.B.dylib)
 ==68403==    by 0x7BAF8D: __sfvwrite (in /usr/lib/libSystem.B.dylib)
 ==68403==    by 0x82618F: puts (in /usr/lib/libSystem.B.dylib)
 ==68403==    by 0x1D0E: Printer::Print() (in
/Users/glider/src/worker_vex_test/nsop)
 ==68403==    by 0x1BAD: main (in /Users/glider/src/worker_vex_test/nsop)

 Thread 2: status = VgTs_Init
 ==68403==    at 0x81E2A4: start_wqthread (in /usr/lib/libSystem.B.dylib)


Looks like Valgrind tries to execute code in a previously unknown
thread without calling the pre_thread_ll_create method for this
thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903416</commentid>
    <comment_count>8</comment_count>
    <who name="Julian Seward">jseward</who>
    <bug_when>2010-01-22 13:59:33 +0000</bug_when>
    <thetext>
&gt; Looks like Valgrind tries to execute code in a previously unknown
&gt; thread without calling the pre_thread_ll_create method for this
&gt; thread.

Yes.  So this has something to do with the wqthread_hijack nastyness,
which is a MacOS-specific thread creation intercept hook.  I&apos;ll take
a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926807</commentid>
    <comment_count>9</comment_count>
    <who name="Julian Seward">jseward</who>
    <bug_when>2010-03-01 18:48:40 +0000</bug_when>
    <thetext>I can reproduce it with the most recent test case, yes.

The patch below stops Helgrind asserting, by sending it the
thread_ll_create event to tell it the thread has come into existence.
DRD still asserts, for reasons which I&apos;m not sure about.  I think it&apos;s
something to do with the thread_first_insn event, which DRD listens
for but Helgrind ignores.  Bart, can you have a look?

Note however that this is still way wrong, as per comments in the
patch, because we need to know the parent thread, but we don&apos;t.  Maybe
GregP knows a way figure out what the parent thread is here.


Index: coregrind/m_syswrap/syswrap-x86-darwin.c
===================================================================
--- coregrind/m_syswrap/syswrap-x86-darwin.c    (revision 11058)
+++ coregrind/m_syswrap/syswrap-x86-darwin.c    (working copy)
@@ -420,6 +420,16 @@
       vex = &amp;tst-&gt;arch.vex;
       allocstack(tst-&gt;tid);
       LibVEX_GuestX86_initialise(vex);
+      /* Tell threading tools the new thread exists.  FIXME: we need
+         to know the identity (tid) of the parent thread, in order
+         that threading tools can make a dependency edge from it to
+         this thread.  But we don&apos;t know what the parent thread is.
+         Hence pass 1 (the root thread).  This is completely wrong in
+         general, and could cause large numbers of false races to be
+         reported.  In fact, it&apos;s positively dangerous; we don&apos;t even
+         know if thread 1 is still alive, and the thread checkers are
+         likely to assert if it isn&apos;t. */
+      VG_TRACK(pre_thread_ll_create, 1/*BOGUS*/, tst-&gt;tid);
    }

    // Set thread&apos;s registers
@@ -461,8 +471,12 @@
       tst-&gt;client_stack_highest_word = stack+stacksize;
       tst-&gt;client_stack_szB = stacksize;

-      // GrP fixme scheduler lock?!
-
+      // tell the tool that we are at a point after the new thread
+      // has its registers set up (so we can take a stack snapshot),
+      // but before it has executed any instructions (or, really,
+      // before it has done any memory references).
+      VG_TRACK(pre_thread_first_insn, tst-&gt;tid);
+
       // pthread structure
       ML_(notify_core_and_tool_of_mmap)(
             stack+stacksize, pthread_structsize,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926855</commentid>
    <comment_count>10</comment_count>
    <who name="Bart Van Assche">bart.vanassche+kde</who>
    <bug_when>2010-03-01 20:43:27 +0000</bug_when>
    <thetext>(In reply to comment #9)
&gt; I can reproduce it with the most recent test case, yes.
&gt; 
&gt; The patch below stops Helgrind asserting, by sending it the
&gt; thread_ll_create event to tell it the thread has come into existence.
&gt; DRD still asserts, for reasons which I&apos;m not sure about.  I think it&apos;s
&gt; something to do with the thread_first_insn event, which DRD listens
&gt; for but Helgrind ignores.  Bart, can you have a look?

As you can see below, DRD sometimes reports an assertion failure for at least the test program that uses only NSOperationQueue. The reported assertion failure means that one of the following Valgrind client requests has been invoked by the Valgrind core with VG_(get_running_tid)() == VG_INVALID_THREADID, which is an inconsistency in the Valgrind core:
* post_mem_write
* new_mmap
* new_mem_startup
* new_mem_stack_signal

$ ./vg-in-place --tool=drd --read-var-info=yes --trace-fork-join=yes ~/valgrind-bug-216837/NSOperationQueueOnly
==19250== drd, a thread error detector
==19250== Copyright (C) 2006-2009, and GNU GPL&apos;d, by Bart Van Assche.
==19250== Using Valgrind-3.6.0.SVN and LibVEX; rerun with -h for copyright info
==19250== Command: /Users/bart/valgrind-bug-216837/NSOperationQueueOnly
==19250==
--19250-- drd_pre_thread_create creator = 0, created = 1
--19250-- drd_post_thread_create created = 1
2010-03-01 11:34:54.771 NSOperationQueueOnly[19250:50b] *** _NSAutoreleaseNoPool(): Object 0x1bf92d0 of class __NSFastEnumerationEnumerator autoreleased with no pool in place - just leaking
Stack: (0x4ce12f 0x3daec2 0x470512 0x4708d7)
2010-03-01 11:34:55.048 NSOperationQueueOnly[19250:50b] *** _NSAutoreleaseNoPool(): Object 0x1c01400 of class NSCFSet autoreleased with no pool in place - just leaking
Stack: (0x4ce12f 0x3daec2 0x3f35b3 0x3f328c 0x3f2f08 0x3f2be3 0x3f2992 0x3f258e 0x47054f 0x4708d7)
2010-03-01 11:34:55.103 NSOperationQueueOnly[19250:50b] *** _NSAutoreleaseNoPool(): Object 0x1c05a40 of class NSCFSet autoreleased with no pool in place - just leaking
Stack: (0x4ce12f 0x3daec2 0x3f35b3 0x3f328c 0x3f2f08 0x3f2be3 0x3f2992 0x3f258e 0x47054f 0x4708d7)
--19250-- drd_pre_thread_create creator = 1, created = 2
--19250-- drd_post_thread_create created = 2

drd: drd_thread.c:584 (vgDrd_thread_set_vg_running_tid): Assertion &apos;vg_tid != VG_INVALID_THREADID&apos; failed.
==19250==    at 0xF009E0D5: ???
==19250==    by 0xF009E298: ???
==19250==    by 0xF008B985: ???
==19250==    by 0xF00940D8: ???
==19250==    by 0xF0125F7A: ???

sched status:
  running_tid=0

Thread 1: status = VgTs_WaitSys
==19250==    at 0x7D73E2: ioctl (in /usr/lib/libSystem.B.dylib)
==19250==    by 0x7E5386: __smakebuf (in /usr/lib/libSystem.B.dylib)
==19250==    by 0x7E5288: __swsetup (in /usr/lib/libSystem.B.dylib)
==19250==    by 0x7B46ED: __sfvwrite (in /usr/lib/libSystem.B.dylib)
==19250==    by 0x820510: puts (in /usr/lib/libSystem.B.dylib)
==19250==    by 0x1D2E: Printer::Print() (NSOperationQueueOnly.mm:7)
==19250==    by 0x1CB7: main (NSOperationQueueOnly.mm:68)

Thread 2: status = VgTs_Init
==19250==    at 0x8185D8: start_wqthread (in /usr/lib/libSystem.B.dylib)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927110</commentid>
    <comment_count>11</comment_count>
    <who name="Alexander Potapenko">glider</who>
    <bug_when>2010-03-02 11:29:02 +0000</bug_when>
    <thetext>&gt; Note however that this is still way wrong, as per comments in the
&gt; patch, because we need to know the parent thread, but we don&apos;t.  Maybe
&gt; GregP knows a way figure out what the parent thread is here.
&gt; 

A possible solution would be to track each workqueue in the threading tool itself and keep the list of the parent threads of the tasks put into the queue (I&apos;m assuming workqueues are real queues, aren&apos;t they?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927250</commentid>
    <comment_count>12</comment_count>
    <who name="Alexander Potapenko">glider</who>
    <bug_when>2010-03-02 17:47:25 +0000</bug_when>
    <thetext>I&apos;ve experimented with several tasks posted into the same workqueue.
Looks like they can be executed in a random order (not necessarily the creation order).

Also, workq_ops doesn&apos;t have any parameter respecting the NSOperationQueue object that was used to post the task, i.e. IIUC all the tasks end up in a same global queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927274</commentid>
    <comment_count>13</comment_count>
    <who name="Alexander Potapenko">glider</who>
    <bug_when>2010-03-02 18:49:40 +0000</bug_when>
    <thetext>I&apos;ve also modified nsop.mm to generate ten tasks on two workqueues, queue1 and queue2. Each of the tasks printed its ID (even for queue1, odd for queue2) and got the following log running ThreadSanitizer with the --trace-syscalls=yes flag (grepped for &quot;workq_\|Task&quot;):

SYSCALL[73641,1](unix:367) workq_open()[sync] --&gt; Success(0x16f:0x0) 
SYSCALL[73641,1](unix:368) workq_ops( 1(QUEUE_ADD), 0x21a50000, 0 )TID: 1
SYSCALL[73641,1](unix:368) workq_ops( 1(QUEUE_ADD), 0x21a50018, 0 )TID: 1
SYSCALL[73641,1](unix:368) workq_ops( 1(QUEUE_ADD), 0x21a50030, 0 )TID: 1
SYSCALL[73641,1](unix:368) workq_ops( 1(QUEUE_ADD), 0x21a50048, 0 )TID: 1
SYSCALL[73641,1](unix:368) workq_ops( 1(QUEUE_ADD), 0x21a50060, 0 )TID: 1
SYSCALL[73641,1](unix:368) workq_ops( 1(QUEUE_ADD), 0x21a50078, 0 )TID: 1
SYSCALL[73641,1](unix:368) workq_ops( 1(QUEUE_ADD), 0x21a50090, 0 )TID: 1
SYSCALL[73641,1](unix:368) workq_ops( 1(QUEUE_ADD), 0x21a500a8, 0 )TID: 1
SYSCALL[73641,1](unix:368) workq_ops( 1(QUEUE_ADD), 0x21a500c0, 0 )TID: 1
SYSCALL[73641,1](unix:368) workq_ops( 1(QUEUE_ADD), 0x21a500d8, 0 )TID: 1
SYSCALL[73641,2](unix:368) workq_ops( 2(QUEUE_REMOVE), 0x21a50000, 0 )TID: 2
SYSCALL[73641,2](unix:368) workq_ops( 4(THREAD_RETURN), 0x0, 0 )TID: 2
SYSCALL[73641,5](unix:368) workq_ops( 2(QUEUE_REMOVE), 0x21a50018, 0 )TID: 5
SYSCALL[73641,5](unix:368) workq_ops( 4(THREAD_RETURN), 0x0, 0 )TID: 5
SYSCALL[73641,4](unix:368) workq_ops( 2(QUEUE_REMOVE), 0x21a50078, 0 )TID: 4
SYSCALL[73641,4](unix:368) workq_ops( 4(THREAD_RETURN), 0x0, 0 )TID: 4
SYSCALL[73641,6](unix:368) workq_ops( 2(QUEUE_REMOVE), 0x21a50060, 0 )TID: 6
SYSCALL[73641,6](unix:368) workq_ops( 4(THREAD_RETURN), 0x0, 0 )TID: 6
SYSCALL[73641,3](unix:368) workq_ops( 2(QUEUE_REMOVE), 0x21a50048, 0 )TID: 3
SYSCALL[73641,3](unix:368) workq_ops( 4(THREAD_RETURN), 0x0, 0 )TID: 3
SYSCALL[73641,7](unix:368) workq_ops( 2(QUEUE_REMOVE), 0x21a50030, 0 )TID: 7
SYSCALL[73641,7](unix:368) workq_ops( 4(THREAD_RETURN), 0x0, 0 )TID: 7
SYSCALL[73641,8](unix:368) workq_ops( 2(QUEUE_REMOVE), 0x21a50090, 0 )TID: 8
SYSCALL[73641,8](unix:368) workq_ops( 4(THREAD_RETURN), 0x0, 0 )TID: 8
SYSCALL[73641,2](unix:368) workq_ops() starting new workqueue item
SYSCALL[73641,2](unix:368) workq_ops( 2(QUEUE_REMOVE), 0x21a500a8, 0 )TID: 2
SYSCALL[73641,2](unix:368) workq_ops( 4(THREAD_RETURN), 0x0, 0 )TID: 2
SYSCALL[73641,10](unix:368) workq_ops( 2(QUEUE_REMOVE), 0x21a500c0, 0 )TID: 10
SYSCALL[73641,10](unix:368) workq_ops( 4(THREAD_RETURN), 0x0, 0 )TID: 10
SYSCALL[73641,9](unix:368) workq_ops( 2(QUEUE_REMOVE), 0x21a500d8, 0 )TID: 9
SYSCALL[73641,9](unix:368) workq_ops( 4(THREAD_RETURN), 0x0, 0 )TID: 9
Inside Task::Run(), id=0
Inside Task::Run(), id=1
Inside Task::Run(), id=5
Inside Task::Run(), id=4
Inside Task::Run(), id=3
Inside Task::Run(), id=2
Inside Task::Run(), id=6
Inside Task::Run(), id=7
Inside Task::Run(), id=8
Inside Task::Run(), id=9

That is, keeping a list of shadow pthread_workitem_t&apos;s used in workq_ops we are able to track the parent ID within Valgrind and pass it to the clients after the thread starts execution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927283</commentid>
    <comment_count>14</comment_count>
    <who name="Julian Seward">jseward</who>
    <bug_when>2010-03-02 19:04:21 +0000</bug_when>
    <thetext>(In reply to comment #13)
&gt; That is, keeping a list of shadow pthread_workitem_t&apos;s used in
&gt; workq_ops we are able to track the parent ID within Valgrind and
&gt; pass it to the clients after the thread starts execution.

Do you mean, it should in theory be possible, or do you have a
patch that does this now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927549</commentid>
    <comment_count>15</comment_count>
    <who name="Alexander Potapenko">glider</who>
    <bug_when>2010-03-03 10:16:52 +0000</bug_when>
    <thetext>I&apos;ll try making a patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928197</commentid>
    <comment_count>16</comment_count>
    <who name="Alexander Potapenko">glider</who>
    <bug_when>2010-03-04 11:37:47 +0000</bug_when>
    <thetext>The patch below adds the track_pre_wqthread_ll_create function to the tooliface (it also includes your patch). This was enough for me to (probably) add the support for wqthreads in ThreadSanitizer.

To handle wqthreads properly, a tool doesn&apos;t need to know the parent TID of the worker thread. Instead, it should draw a happens-before arc between the place where the task is put into the queue (this is &quot;workq_ops(1, workitem)&quot;) and the place where the task actually starts (surprisingly, this is not &quot;workq_ops(2, workitem)&quot;, that&apos;s why we have to introduce a call to track_pre_wqthread_ll_create into wqthread_hijack). So the tool should intercept workq_ops in order to place SIGNAL(workitem) and define the track_pre_wqthread_ll_create handler to place WAIT(workitem).

I&apos;ve got a concern about where actually to put the VG_TRACK(pre_wqthread_ll_create) call inside wqthread_hijack, but the current place looks good.
Also, the name &quot;pre_wqthread_ll_create&quot; was picked randomly and doesn&apos;t reflect its purpose well. Maybe something like &quot;pre_workqueue_task_start&quot; is better.


Index: include/pub_tool_tooliface.h
===================================================================
--- include/pub_tool_tooliface.h	(revision 11055)
+++ include/pub_tool_tooliface.h	(working copy)
@@ -656,6 +656,7 @@
       ll_exit (in the child&apos;s context)
 */
 void VG_(track_pre_thread_ll_create) (void(*f)(ThreadId tid, ThreadId child));
+void VG_(track_pre_wqthread_ll_create) (void(*f)(ThreadId tid, Addr workitem));
 void VG_(track_pre_thread_first_insn)(void(*f)(ThreadId tid));
 void VG_(track_pre_thread_ll_exit)   (void(*f)(ThreadId tid));
 
Index: coregrind/m_tooliface.c
===================================================================
--- coregrind/m_tooliface.c	(revision 11055)
+++ coregrind/m_tooliface.c	(working copy)
@@ -408,6 +408,7 @@
 DEF0(track_stop_client_code,      ThreadId, ULong)
 
 DEF0(track_pre_thread_ll_create,  ThreadId, ThreadId)
+DEF0(track_pre_wqthread_ll_create, ThreadId, Addr)
 DEF0(track_pre_thread_first_insn, ThreadId)
 DEF0(track_pre_thread_ll_exit,    ThreadId)
 
Index: coregrind/pub_core_tooliface.h
===================================================================
--- coregrind/pub_core_tooliface.h	(revision 11055)
+++ coregrind/pub_core_tooliface.h	(working copy)
@@ -226,6 +226,7 @@
    void (*track_stop_client_code) (ThreadId, ULong);
 
    void (*track_pre_thread_ll_create)(ThreadId, ThreadId);
+   void (*track_pre_wqthread_ll_create)(ThreadId, Addr);
    void (*track_pre_thread_first_insn)(ThreadId);
    void (*track_pre_thread_ll_exit)  (ThreadId);
Index: coregrind/m_syswrap/syswrap-x86-darwin.c
===================================================================
--- coregrind/m_syswrap/syswrap-x86-darwin.c	(revision 11055)
+++ coregrind/m_syswrap/syswrap-x86-darwin.c	(working copy)
@@ -400,7 +400,6 @@
       set the mask correctly when we finally get there. */
    VG_(sigfillset)(&amp;blockall);
    VG_(sigprocmask)(VKI_SIG_SETMASK, &amp;blockall, NULL);
-
    if (reuse) {
       // This thread already exists; we&apos;re merely re-entering 
       // after leaving via workq_ops(WQOPS_THREAD_RETURN). 
@@ -420,6 +419,16 @@
       vex = &amp;tst-&gt;arch.vex;
       allocstack(tst-&gt;tid);
       LibVEX_GuestX86_initialise(vex);
+      /* Tell threading tools the new thread exists.  FIXME: we need
+         to know the identity (tid) of the parent thread, in order
+         that threading tools can make a dependency edge from it to
+         this thread.  But we don&apos;t know what the parent thread is.
+         Hence pass 1 (the root thread).  This is completely wrong in
+         general, and could cause large numbers of false races to be
+         reported.  In fact, it&apos;s positively dangerous; we don&apos;t even
+         know if thread 1 is still alive, and the thread checkers are
+         likely to assert if it isn&apos;t. */
+      VG_TRACK(pre_thread_ll_create, 1/*BOGUS*/, tst-&gt;tid);
    }
         
    // Set thread&apos;s registers
@@ -437,6 +446,7 @@
    stacksize = 512*1024;  // wq stacks are always DEFAULT_STACK_SIZE
    stack = VG_PGROUNDUP(sp) - stacksize;
 
+   VG_TRACK(pre_wqthread_ll_create, tst-&gt;tid, workitem);
    if (reuse) {
        // Continue V&apos;s thread back in the scheduler. 
        // The client thread is of course in another location entirely.
@@ -461,7 +471,11 @@
       tst-&gt;client_stack_highest_word = stack+stacksize;
       tst-&gt;client_stack_szB = stacksize;
 
-      // GrP fixme scheduler lock?!
+      // tell the tool that we are at a point after the new thread
+      // has its registers set up (so we can take a stack snapshot),
+      // but before it has executed any instructions (or, really,
+      // before it has done any memory references).
+      VG_TRACK(pre_thread_first_insn, tst-&gt;tid);
       
       // pthread structure
       ML_(notify_core_and_tool_of_mmap)(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941664</commentid>
    <comment_count>17</comment_count>
    <who name="Bart Van Assche">bart.vanassche+kde</who>
    <bug_when>2010-03-28 19:29:14 +0000</bug_when>
    <thetext>*** Bug 232493 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992876</commentid>
    <comment_count>18</comment_count>
    <who name="Julian Seward">jseward</who>
    <bug_when>2010-07-22 11:20:22 +0000</bug_when>
    <thetext>(In reply to comment #16)
&gt; The patch below adds the track_pre_wqthread_ll_create function to the tooliface
&gt; (it also includes your patch). This was enough for me to (probably) add the
&gt; support for wqthreads in ThreadSanitizer.

Alexander, what is the status of this patch now?  Now that you have
(I assume) used it for a few months, is it still correct?  Or do you
have a revised/modified version?

&gt; (it also includes your patch)

Is this necessary?  As per the comments in my patch ..

&gt; +      /* Tell threading tools the new thread exists.  FIXME: we need
&gt; +         to know the identity (tid) of the parent thread, in order
&gt; +         that threading tools can make a dependency edge from it to
&gt; +         this thread.  But we don&apos;t know what the parent thread is.
&gt; +         Hence pass 1 (the root thread).  This is completely wrong in
&gt; +         general, and could cause large numbers of false races to be
&gt; +         reported.  In fact, it&apos;s positively dangerous; we don&apos;t even
&gt; +         know if thread 1 is still alive, and the thread checkers are
&gt; +         likely to assert if it isn&apos;t. */
&gt; +      VG_TRACK(pre_thread_ll_create, 1/*BOGUS*/, tst-&gt;tid);
&gt;     }

.. it is completely incorrect, it just (sometimes) stops hg crashing,
so I don&apos;t want to commit your patch with this kludge in it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993258</commentid>
    <comment_count>19</comment_count>
    <who name="Alexander Potapenko">glider</who>
    <bug_when>2010-07-23 09:16:35 +0000</bug_when>
    <thetext>&gt; Alexander, what is the status of this patch now?  Now that you have
&gt; (I assume) used it for a few months, is it still correct?  Or do you
&gt; have a revised/modified version?
Yes, we&apos;re using this interface function in ThreadSanitizer, and it is still correct.
&gt; 
&gt; Is this necessary?  As per the comments in my patch ..
&gt; .. it is completely incorrect, it just (sometimes) stops hg crashing,
&gt; so I don&apos;t want to commit your patch with this kludge in it.

Well, as long as we don&apos;t mind hg crashing, I can remove this from the patch (I can make up the new one in a couple of days, as I&apos;ve got restricted internet access now). In fact we don&apos;t use this path in ThreadSanitizer anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>995396</commentid>
    <comment_count>20</comment_count>
      <attachid>49583</attachid>
    <who name="Alexander Potapenko">glider</who>
    <bug_when>2010-07-28 15:35:18 +0000</bug_when>
    <thetext>Created attachment 49583
A patch that adds the workq_task_start trackable event.

To handle workqueue tasks correctly the clients must:
 -- intercept workq_ops(1 /* QUEUE_ADD */, workitem, _) to handle the task creation
 -- define VG_(track_workq_task_start) to handle the start of the task execution. The handler receives the worker thread ID and the workitem address
 -- draw a happens-before arc between these events</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1094172</commentid>
    <comment_count>21</comment_count>
    <who name="Bart Van Assche">bart.vanassche+kde</who>
    <bug_when>2011-03-06 18:55:51 +0000</bug_when>
    <thetext>*** Bug 244677 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475184</commentid>
    <comment_count>22</comment_count>
    <who name="Rhys Kidd">rhyskidd</who>
    <bug_when>2014-10-08 09:44:29 +0000</bug_when>
    <thetext>An even smaller reproducing testcase can be found with the following Valgrind test on Mac OX 10.9 (darwin13):

$ perl tests/vg_regtest helgrind/tests/pth_cond_destroy_busy

drd: ./drd_thread.c:675 (void vgDrd_thread_set_vg_running_tid(const ThreadId)): Assertion &apos;vg_tid != VG_INVALID_THREADID&apos; failed.
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475189</commentid>
    <comment_count>23</comment_count>
    <who name="Rhys Kidd">rhyskidd</who>
    <bug_when>2014-10-08 09:55:21 +0000</bug_when>
    <thetext>Sorry, that should be:

$ perl tests/vg_regtest drd/tests/pth_cond_destroy_busy 
drd: ./drd_thread.c:675 (void vgDrd_thread_set_vg_running_tid(const ThreadId)): Assertion &apos;vg_tid != VG_INVALID_THREADID&apos; failed. 
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1532305</commentid>
    <comment_count>24</comment_count>
    <who name="Rhys Kidd">rhyskidd</who>
    <bug_when>2015-07-19 07:22:09 +0000</bug_when>
    <thetext>As of r15417 the related helgrind/tests/pth_cond_destroy_busy test is not run on Darwin, so remove as a blocker to BZ#344416.

However, this underlying test still fails and exposes a problem which should be fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610867</commentid>
    <comment_count>25</comment_count>
    <who name="Halil Sen">halilsen</who>
    <bug_when>2016-07-27 13:18:50 +0000</bug_when>
    <thetext>Is there any plans to fix this bug? A simple single thread &quot;hello world&quot; application produces the following output on osx 10.11 with valgrind 3.11

valgrind --tool=drd ./bin/Debug/app

==73482== drd, a thread error detector
==73482== Copyright (C) 2006-2015, and GNU GPL&apos;d, by Bart Van Assche.
==73482== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==73482== Command: ./bin/Debug/app
==73482== 

drd: ./drd_thread.c:749 (void vgDrd_thread_set_vg_running_tid(const ThreadId)): Assertion &apos;vg_tid != VG_INVALID_THREADID&apos; failed.

host stacktrace:
==73482==    at 0x23802846E: ???
==73482==    by 0x23802888C: ???
==73482==    by 0x23802886A: ???
==73482==    by 0x23800CC52: ???
==73482==    by 0x2380150FF: ???
==73482==    by 0x2380311D5: ???
==73482==    by 0x23802F250: ???
==73482==    by 0x23802F193: ???

sched status:
  running_tid=0

Thread 1: status = VgTs_Init (lwpid 0)
Segmentation fault: 11</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613036</commentid>
    <comment_count>26</comment_count>
    <who name="Rhys Kidd">rhyskidd</who>
    <bug_when>2016-08-10 06:50:56 +0000</bug_when>
    <thetext>It just comes down to having sufficient time.
Put another way, I&apos;d always be happy to review patches from others...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2478093</commentid>
    <comment_count>27</comment_count>
    <who name="Paul Floyd">pjfloyd</who>
    <bug_when>2025-12-19 10:38:39 +0000</bug_when>
    <thetext>Time to check this again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2478116</commentid>
    <comment_count>28</comment_count>
    <who name="Paul Floyd">pjfloyd</who>
    <bug_when>2025-12-19 12:49:22 +0000</bug_when>
    <thetext>Still hanging on 10.15.

With --tool=none, 2 threads stuck in syscalls

(lldb) thread list
Process 462 stopped
* thread #1: tid = 0x0f89, 0x00000002580c6543 none-amd64-darwin`vgModuleLocal_do_syscall_for_client_unix_WRK + 90, stop reason = signal SIGSTOP
  thread #2: tid = 0x0fb2, 0x00000002580c6543 none-amd64-darwin`vgModuleLocal_do_syscall_for_client_unix_WRK + 90

With --trace-syscalls=yes

SYSCALL[479,1](unix:305) psynch_cvwait(BOGUS) --&gt; [async] ... 
SYSCALL[479,2](unix:372) __thread_selfid ()[sync] --&gt; Success(0x0:0x12a1) 
SYSCALL[479,2](unix:304) psynch_cvsignal(BOGUS)[sync] --&gt; Success(0x0:0x101) 
SYSCALL[479,2](unix:305) psynch_cvwait(BOGUS) --&gt; [async] ... 
SYSCALL[479,1](unix:305) ... [async] --&gt; Success(0x0:0x0) 
SYSCALL[479,1](unix:397) sys_write ( 2, 0x104915590, 52 ) --&gt; [async] ... 
First pthread_cond_destroy() call returned success.
SYSCALL[479,1](unix:397) ... [async] --&gt; Success(0x0:0x34) 
SYSCALL[479,1](unix:515) ulock_wait(operation:UL_UNFAIR_LOCK (flags: 0x1020000), addr:0x70000333f034, value:3075, timeout:0) --&gt; [async] ... 

So it looks like thread 2 is blocked here

SYSCALL[479,2](unix:305) psynch_cvwait(BOGUS) --&gt; [async] ... 

and thread 1 blocked here

SYSCALL[479,1](unix:515) ulock_wait(operation:UL_UNFAIR_LOCK (flags: 0x1020000), addr:0x70000333f034, value:3075, timeout:0) --&gt; [async] ... 

Need to get gdb working if poss because I can&apos;t get lldb to make calls (like call and print with gdb so that I can get the guest callstacks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2478922</commentid>
    <comment_count>29</comment_count>
    <who name="Paul Floyd">pjfloyd</who>
    <bug_when>2025-12-23 08:17:46 +0000</bug_when>
    <thetext>I&apos;ve tried updating the patch provided (for x86 and amd64).

macOS 10.13 amd64 still hangs in the nsop example. Doesn&apos;t look related though

(lldb) thr sel 2
* thread #2, stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
    frame #0: 0x00000002580717b9 memcheck-amd64-darwin`do_syscall_unix_WRK + 41
memcheck-amd64-darwin`do_syscall_unix_WRK:
-&gt;  0x2580717b9 &lt;+41&gt;: movq   %rdx, (%rcx)
    0x2580717bc &lt;+44&gt;: retq   

memcheck-amd64-darwin`do_syscall_mach_WRK:
    0x2580717bd &lt;+0&gt;:  movq   %rcx, %r10
    0x2580717c0 &lt;+3&gt;:  movq   0x18(%rsp), %rax
(lldb) bt
* thread #2, stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
  * frame #0: 0x00000002580717b9 memcheck-amd64-darwin`do_syscall_unix_WRK + 41

10.13 is a pain to work with. MacPorts gdb is broken and I can&apos;t get a guest stack with lldb.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2478924</commentid>
    <comment_count>30</comment_count>
      <attachid>187893</attachid>
    <who name="Paul Floyd">pjfloyd</who>
    <bug_when>2025-12-23 08:34:55 +0000</bug_when>
    <thetext>Created attachment 187893
Updated patch

Patch for x86 and amd64, put the &quot;pub&quot; bits in #if VGO_darwin blocks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2502776</commentid>
    <comment_count>31</comment_count>
      <attachid>49583</attachid>
    <who name="Paul Floyd">pjfloyd</who>
    <bug_when>2026-03-12 12:34:25 +0000</bug_when>
    <thetext>Comment on attachment 49583
A patch that adds the workq_task_start trackable event.

Unless I&apos;m missing something I don&apos;t see the DRD callback function + registration in this patch.

I&apos;ll test again the VG_TRACK(pre_thread_first_insn, tst-&gt;tid); calls.

Without the DRD callbacks I can&apos;t do much with the rest od this patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>38721</attachid>
            <date>2009-11-30 17:56:01 +0000</date>
            <delta_ts>2009-12-01 17:15:55 +0000</delta_ts>
            <desc>A reproducer of the VEX threading instrumentation problem on Mac OS</desc>
            <filename>worker_vex_test.mm</filename>
            <type>text/plain</type>
            <size>302810</size>
            <attacher name="Alexander Potapenko">glider</attacher>
            
              <data encoding="base64">LyogVGhlIGZvbGxvd2luZyBjb2RlIHdhcyB0YWtlbiBmcm9tIGNocm9taXVtLm9yZyBhbmQgc2hv
dWxkIGJlIHVzZWQgZm9yCiAqIHRlc3RpbmcgcHVycG9zZXMgb25seS4gVGhlIG1lYW5zIG9mIHVz
aW5nIHRoaXMgY29kZSBhcmUgZ292ZXJuZWQgYnkgdGhlCiAqIGxpY2Vuc2UgbG9jYXRlZCBhdCBo
dHRwOi8vc3JjLmNocm9taXVtLm9yZy92aWV3dmMvY2hyb21lL3RydW5rL3NyYy9MSUNFTlNFLgog
Ki8KI2luY2x1ZGUgPHN0ZGFyZy5oPgojaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgojaW5jbHVkZSA8
QXZhaWxhYmlsaXR5TWFjcm9zLmg+CiNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRkRhdGUuaD4K
I2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGVGltZVpvbmUuaD4KI2luY2x1ZGUgPG1hY2gvbWFj
aF90aW1lLmg+CiNpbmNsdWRlIDxtYWNoL21hY2guaD4KI2luY2x1ZGUgPHN5cy90aW1lLmg+CiNp
bmNsdWRlIDx0aW1lLmg+CiNpbmNsdWRlIDxsaW1pdHMuaD4gICAgICAgICAvLyBTbyB3ZSBjYW4g
c2V0IHRoZSBib3VuZHMgb2Ygb3VyIHR5cGVzCiNpbmNsdWRlIDxzdGRkZWYuaD4gICAgICAgICAv
LyBGb3Igc2l6ZV90CiNpbmNsdWRlIDxzdHJpbmcuaD4gICAgICAgICAvLyBmb3IgbWVtY3B5CiNp
bmNsdWRlIDxpb3Nmd2Q+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRl
IDxlcnJuby5oPgojaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KI2luY2x1ZGUgPGxp
Ymtlcm4vT1NBdG9taWMuaD4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGNzdHJpbmc+CiNp
bmNsdWRlIDxzc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8c3RhY2s+CiNpbmNs
dWRlIDxxdWV1ZT4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGxpbWl0cz4KI2luY2x1
ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGxpc3Q+CgojaW5jbHVkZSA8YXNzZXJ0Lmg+CiNpbmNsdWRl
IDxzdGRsaWIuaD4KI2luY2x1ZGUgPGNzdGRkZWY+CgojaW5jbHVkZSA8ZXhlY2luZm8uaD4KCiNp
bmNsdWRlIDxzdGRpbnQuaD4gICAgICAgICAvLyBGb3IgaW50cHRyX3QuCiNpbmNsdWRlIDxwdGhy
ZWFkLmg+CgojaWZuZGVmIEJBU0VfVFVQTEVfSF9fCiNkZWZpbmUgQkFTRV9UVVBMRV9IX18KCi8v
IFRyYWl0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vCi8vIEEgc2ltcGxlIHRyYWl0cyBjbGFzcyBmb3IgdHVw
bGUgYXJndW1lbnRzLgovLwovLyBWYWx1ZVR5cGU6IHRoZSBiYXJlLCBub25yZWYgdmVyc2lvbiBv
ZiBhIHR5cGUgKHNhbWUgYXMgdGhlIHR5cGUgZm9yIG5vbnJlZnMpLgovLyBSZWZUeXBlOiB0aGUg
cmVmIHZlcnNpb24gb2YgYSB0eXBlIChzYW1lIGFzIHRoZSB0eXBlIGZvciByZWZzKS4KLy8gUGFy
YW1UeXBlOiB3aGF0IHR5cGUgdG8gcGFzcyB0byBmdW5jdGlvbnMgKHJlZnMgc2hvdWxkIG5vdCBi
ZSBjb25zdGlmaWVkKS4KCnRlbXBsYXRlIDxjbGFzcyBQPgpzdHJ1Y3QgVHVwbGVUcmFpdHMgewog
IHR5cGVkZWYgUCBWYWx1ZVR5cGU7CiAgdHlwZWRlZiBQJiBSZWZUeXBlOwogIHR5cGVkZWYgY29u
c3QgUCYgUGFyYW1UeXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFA+CnN0cnVjdCBUdXBsZVRyYWl0
czxQJj4gewogIHR5cGVkZWYgUCBWYWx1ZVR5cGU7CiAgdHlwZWRlZiBQJiBSZWZUeXBlOwogIHR5
cGVkZWYgUCYgUGFyYW1UeXBlOwp9OwoKLy8gVHVwbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8KLy8gVGhp
cyBzZXQgb2YgY2xhc3NlcyBpcyB1c2VmdWwgZm9yIGJ1bmRsaW5nIDAgb3IgbW9yZSBoZXRlcm9n
ZW5lb3VzIGRhdGEgdHlwZXMKLy8gaW50byBhIHNpbmdsZSB2YXJpYWJsZS4gIFRoZSBhZHZhbnRh
Z2Ugb2YgdGhpcyBpcyB0aGF0IGl0IGdyZWF0bHkgc2ltcGxpZmllcwovLyBmdW5jdGlvbiBvYmpl
Y3RzIHRoYXQgbmVlZCB0byB0YWtlIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgcGFyYW1ldGVyczsg
c2VlCi8vIFJ1bm5hYmxlTWV0aG9kIGFuZCBJUEM6Ok1lc3NhZ2VXaXRoVHVwbGUuCi8vCi8vIFR1
cGxlMCBpcyBzdXBwbGllZCB0byBhY3QgYXMgYSAndm9pZCcgdHlwZS4gIEl0IGNhbiBiZSB1c2Vk
LCBmb3IgZXhhbXBsZSwKLy8gd2hlbiBkaXNwYXRjaGluZyB0byBhIGZ1bmN0aW9uIHRoYXQgYWNj
ZXB0cyBubyBhcmd1bWVudHMgKHNlZSB0aGUKLy8gRGlzcGF0Y2hlcnMgYmVsb3cpLgovLyBUdXBs
ZTE8QT4gaXMgcmFyZWx5IHVzZWZ1bC4gIE9uZSBzdWNoIHVzZSBpcyB3aGVuIEEgaXMgbm9uLWNv
bnN0IHJlZiB0aGF0IHlvdQovLyB3YW50IGZpbGxlZCBieSB0aGUgZGlzcGF0Y2hlZSwgYW5kIHRo
ZSB0dXBsZSBpcyBtZXJlbHkgYSBjb250YWluZXIgZm9yIHRoYXQKLy8gb3V0cHV0IChhICJ0aWVy
IikuICBTZWUgTWFrZVJlZlR1cGxlIGFuZCBpdHMgdXNhZ2VzLgoKc3RydWN0IFR1cGxlMCB7CiAg
dHlwZWRlZiBUdXBsZTAgVmFsdWVUdXBsZTsKICB0eXBlZGVmIFR1cGxlMCBSZWZUdXBsZTsKICB0
eXBlZGVmIFR1cGxlMCBQYXJhbVR1cGxlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIEE+CnN0cnVjdCBU
dXBsZTEgewogcHVibGljOgogIHR5cGVkZWYgQSBUeXBlQTsKICB0eXBlZGVmIFR1cGxlMTx0eXBl
bmFtZSBUdXBsZVRyYWl0czxBPjo6VmFsdWVUeXBlPiBWYWx1ZVR1cGxlOwogIHR5cGVkZWYgVHVw
bGUxPHR5cGVuYW1lIFR1cGxlVHJhaXRzPEE+OjpSZWZUeXBlPiBSZWZUdXBsZTsKICB0eXBlZGVm
IFR1cGxlMTx0eXBlbmFtZSBUdXBsZVRyYWl0czxBPjo6UGFyYW1UeXBlPiBQYXJhbVR1cGxlOwoK
ICBUdXBsZTEoKSB7fQogIGV4cGxpY2l0IFR1cGxlMSh0eXBlbmFtZSBUdXBsZVRyYWl0czxBPjo6
UGFyYW1UeXBlIGEpIDogYShhKSB7fQoKICBBIGE7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQSwgY2xh
c3MgQj4Kc3RydWN0IFR1cGxlMiB7CiBwdWJsaWM6CiAgdHlwZWRlZiBBIFR5cGVBOwogIHR5cGVk
ZWYgQiBUeXBlQjsKICB0eXBlZGVmIFR1cGxlMjx0eXBlbmFtZSBUdXBsZVRyYWl0czxBPjo6VmFs
dWVUeXBlLAogICAgICAgICAgICAgICAgIHR5cGVuYW1lIFR1cGxlVHJhaXRzPEI+OjpWYWx1ZVR5
cGU+IFZhbHVlVHVwbGU7CiAgdHlwZWRlZiBUdXBsZTI8dHlwZW5hbWUgVHVwbGVUcmFpdHM8QT46
OlJlZlR5cGUsCiAgICAgICAgICAgICAgICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8Qj46OlJlZlR5
cGU+IFJlZlR1cGxlOwogIHR5cGVkZWYgVHVwbGUyPHR5cGVuYW1lIFR1cGxlVHJhaXRzPEE+OjpQ
YXJhbVR5cGUsCiAgICAgICAgICAgICAgICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8Qj46OlBhcmFt
VHlwZT4gUGFyYW1UdXBsZTsKCiAgVHVwbGUyKCkge30KICBUdXBsZTIodHlwZW5hbWUgVHVwbGVU
cmFpdHM8QT46OlBhcmFtVHlwZSBhLAogICAgICAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxCPjo6
UGFyYW1UeXBlIGIpCiAgICAgIDogYShhKSwgYihiKSB7CiAgfQoKICBBIGE7CiAgQiBiOwp9OwoK
dGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIEM+CnN0cnVjdCBUdXBsZTMgewogcHVi
bGljOgogIHR5cGVkZWYgQSBUeXBlQTsKICB0eXBlZGVmIEIgVHlwZUI7CiAgdHlwZWRlZiBDIFR5
cGVDOwogIHR5cGVkZWYgVHVwbGUzPHR5cGVuYW1lIFR1cGxlVHJhaXRzPEE+OjpWYWx1ZVR5cGUs
CiAgICAgICAgICAgICAgICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8Qj46OlZhbHVlVHlwZSwKICAg
ICAgICAgICAgICAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxDPjo6VmFsdWVUeXBlPiBWYWx1ZVR1
cGxlOwogIHR5cGVkZWYgVHVwbGUzPHR5cGVuYW1lIFR1cGxlVHJhaXRzPEE+OjpSZWZUeXBlLAog
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIFR1cGxlVHJhaXRzPEI+OjpSZWZUeXBlLAogICAgICAg
ICAgICAgICAgIHR5cGVuYW1lIFR1cGxlVHJhaXRzPEM+OjpSZWZUeXBlPiBSZWZUdXBsZTsKICB0
eXBlZGVmIFR1cGxlMzx0eXBlbmFtZSBUdXBsZVRyYWl0czxBPjo6UGFyYW1UeXBlLAogICAgICAg
ICAgICAgICAgIHR5cGVuYW1lIFR1cGxlVHJhaXRzPEI+OjpQYXJhbVR5cGUsCiAgICAgICAgICAg
ICAgICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8Qz46OlBhcmFtVHlwZT4gUGFyYW1UdXBsZTsKCiAg
VHVwbGUzKCkge30KICBUdXBsZTModHlwZW5hbWUgVHVwbGVUcmFpdHM8QT46OlBhcmFtVHlwZSBh
LAogICAgICAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxCPjo6UGFyYW1UeXBlIGIsCiAgICAgICAg
IHR5cGVuYW1lIFR1cGxlVHJhaXRzPEM+OjpQYXJhbVR5cGUgYykKICAgICAgOiBhKGEpLCBiKGIp
LCBjKGMpewogIH0KCiAgQSBhOwogIEIgYjsKICBDIGM7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQSwg
Y2xhc3MgQiwgY2xhc3MgQywgY2xhc3MgRD4Kc3RydWN0IFR1cGxlNCB7CiBwdWJsaWM6CiAgdHlw
ZWRlZiBBIFR5cGVBOwogIHR5cGVkZWYgQiBUeXBlQjsKICB0eXBlZGVmIEMgVHlwZUM7CiAgdHlw
ZWRlZiBEIFR5cGVEOwogIHR5cGVkZWYgVHVwbGU0PHR5cGVuYW1lIFR1cGxlVHJhaXRzPEE+OjpW
YWx1ZVR5cGUsCiAgICAgICAgICAgICAgICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8Qj46OlZhbHVl
VHlwZSwKICAgICAgICAgICAgICAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxDPjo6VmFsdWVUeXBl
LAogICAgICAgICAgICAgICAgIHR5cGVuYW1lIFR1cGxlVHJhaXRzPEQ+OjpWYWx1ZVR5cGU+IFZh
bHVlVHVwbGU7CiAgdHlwZWRlZiBUdXBsZTQ8dHlwZW5hbWUgVHVwbGVUcmFpdHM8QT46OlJlZlR5
cGUsCiAgICAgICAgICAgICAgICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8Qj46OlJlZlR5cGUsCiAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8Qz46OlJlZlR5cGUsCiAgICAgICAg
ICAgICAgICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8RD46OlJlZlR5cGU+IFJlZlR1cGxlOwogIHR5
cGVkZWYgVHVwbGU0PHR5cGVuYW1lIFR1cGxlVHJhaXRzPEE+OjpQYXJhbVR5cGUsCiAgICAgICAg
ICAgICAgICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8Qj46OlBhcmFtVHlwZSwKICAgICAgICAgICAg
ICAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxDPjo6UGFyYW1UeXBlLAogICAgICAgICAgICAgICAg
IHR5cGVuYW1lIFR1cGxlVHJhaXRzPEQ+OjpQYXJhbVR5cGU+IFBhcmFtVHVwbGU7CgogIFR1cGxl
NCgpIHt9CiAgVHVwbGU0KHR5cGVuYW1lIFR1cGxlVHJhaXRzPEE+OjpQYXJhbVR5cGUgYSwKICAg
ICAgICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8Qj46OlBhcmFtVHlwZSBiLAogICAgICAgICB0eXBl
bmFtZSBUdXBsZVRyYWl0czxDPjo6UGFyYW1UeXBlIGMsCiAgICAgICAgIHR5cGVuYW1lIFR1cGxl
VHJhaXRzPEQ+OjpQYXJhbVR5cGUgZCkKICAgICAgOiBhKGEpLCBiKGIpLCBjKGMpLCBkKGQpIHsK
ICB9CgogIEEgYTsKICBCIGI7CiAgQyBjOwogIEQgZDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBBLCBj
bGFzcyBCLCBjbGFzcyBDLCBjbGFzcyBELCBjbGFzcyBFPgpzdHJ1Y3QgVHVwbGU1IHsKcHVibGlj
OgogIHR5cGVkZWYgQSBUeXBlQTsKICB0eXBlZGVmIEIgVHlwZUI7CiAgdHlwZWRlZiBDIFR5cGVD
OwogIHR5cGVkZWYgRCBUeXBlRDsKICB0eXBlZGVmIEUgVHlwZUU7CiAgdHlwZWRlZiBUdXBsZTU8
dHlwZW5hbWUgVHVwbGVUcmFpdHM8QT46OlZhbHVlVHlwZSwKICAgIHR5cGVuYW1lIFR1cGxlVHJh
aXRzPEI+OjpWYWx1ZVR5cGUsCiAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxDPjo6VmFsdWVUeXBl
LAogICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8RD46OlZhbHVlVHlwZSwKICAgIHR5cGVuYW1lIFR1
cGxlVHJhaXRzPEU+OjpWYWx1ZVR5cGU+IFZhbHVlVHVwbGU7CiAgdHlwZWRlZiBUdXBsZTU8dHlw
ZW5hbWUgVHVwbGVUcmFpdHM8QT46OlJlZlR5cGUsCiAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxC
Pjo6UmVmVHlwZSwKICAgIHR5cGVuYW1lIFR1cGxlVHJhaXRzPEM+OjpSZWZUeXBlLAogICAgdHlw
ZW5hbWUgVHVwbGVUcmFpdHM8RD46OlJlZlR5cGUsCiAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxF
Pjo6UmVmVHlwZT4gUmVmVHVwbGU7CiAgdHlwZWRlZiBUdXBsZTU8dHlwZW5hbWUgVHVwbGVUcmFp
dHM8QT46OlBhcmFtVHlwZSwKICAgIHR5cGVuYW1lIFR1cGxlVHJhaXRzPEI+OjpQYXJhbVR5cGUs
CiAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxDPjo6UGFyYW1UeXBlLAogICAgdHlwZW5hbWUgVHVw
bGVUcmFpdHM8RD46OlBhcmFtVHlwZSwKICAgIHR5cGVuYW1lIFR1cGxlVHJhaXRzPEU+OjpQYXJh
bVR5cGU+IFBhcmFtVHVwbGU7CgogIFR1cGxlNSgpIHt9CiAgVHVwbGU1KHR5cGVuYW1lIFR1cGxl
VHJhaXRzPEE+OjpQYXJhbVR5cGUgYSwKICAgIHR5cGVuYW1lIFR1cGxlVHJhaXRzPEI+OjpQYXJh
bVR5cGUgYiwKICAgIHR5cGVuYW1lIFR1cGxlVHJhaXRzPEM+OjpQYXJhbVR5cGUgYywKICAgIHR5
cGVuYW1lIFR1cGxlVHJhaXRzPEQ+OjpQYXJhbVR5cGUgZCwKICAgIHR5cGVuYW1lIFR1cGxlVHJh
aXRzPEU+OjpQYXJhbVR5cGUgZSkKICAgIDogYShhKSwgYihiKSwgYyhjKSwgZChkKSwgZShlKSB7
CiAgfQoKICBBIGE7CiAgQiBiOwogIEMgYzsKICBEIGQ7CiAgRSBlOwp9OwoKdGVtcGxhdGUgPGNs
YXNzIEEsIGNsYXNzIEIsIGNsYXNzIEMsIGNsYXNzIEQsIGNsYXNzIEUsIGNsYXNzIEY+CnN0cnVj
dCBUdXBsZTYgewpwdWJsaWM6CiAgdHlwZWRlZiBBIFR5cGVBOwogIHR5cGVkZWYgQiBUeXBlQjsK
ICB0eXBlZGVmIEMgVHlwZUM7CiAgdHlwZWRlZiBEIFR5cGVEOwogIHR5cGVkZWYgRSBUeXBlRTsK
ICB0eXBlZGVmIEYgVHlwZUY7CiAgdHlwZWRlZiBUdXBsZTY8dHlwZW5hbWUgVHVwbGVUcmFpdHM8
QT46OlZhbHVlVHlwZSwKICAgIHR5cGVuYW1lIFR1cGxlVHJhaXRzPEI+OjpWYWx1ZVR5cGUsCiAg
ICB0eXBlbmFtZSBUdXBsZVRyYWl0czxDPjo6VmFsdWVUeXBlLAogICAgdHlwZW5hbWUgVHVwbGVU
cmFpdHM8RD46OlZhbHVlVHlwZSwKICAgIHR5cGVuYW1lIFR1cGxlVHJhaXRzPEU+OjpWYWx1ZVR5
cGUsCiAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxGPjo6VmFsdWVUeXBlPiBWYWx1ZVR1cGxlOwog
IHR5cGVkZWYgVHVwbGU2PHR5cGVuYW1lIFR1cGxlVHJhaXRzPEE+OjpSZWZUeXBlLAogICAgdHlw
ZW5hbWUgVHVwbGVUcmFpdHM8Qj46OlJlZlR5cGUsCiAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxD
Pjo6UmVmVHlwZSwKICAgIHR5cGVuYW1lIFR1cGxlVHJhaXRzPEQ+OjpSZWZUeXBlLAogICAgdHlw
ZW5hbWUgVHVwbGVUcmFpdHM8RT46OlJlZlR5cGUsCiAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxG
Pjo6UmVmVHlwZT4gUmVmVHVwbGU7CiAgdHlwZWRlZiBUdXBsZTY8dHlwZW5hbWUgVHVwbGVUcmFp
dHM8QT46OlBhcmFtVHlwZSwKICAgIHR5cGVuYW1lIFR1cGxlVHJhaXRzPEI+OjpQYXJhbVR5cGUs
CiAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxDPjo6UGFyYW1UeXBlLAogICAgdHlwZW5hbWUgVHVw
bGVUcmFpdHM8RD46OlBhcmFtVHlwZSwKICAgIHR5cGVuYW1lIFR1cGxlVHJhaXRzPEU+OjpQYXJh
bVR5cGUsCiAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxGPjo6UGFyYW1UeXBlPiBQYXJhbVR1cGxl
OwoKICBUdXBsZTYoKSB7fQogIFR1cGxlNih0eXBlbmFtZSBUdXBsZVRyYWl0czxBPjo6UGFyYW1U
eXBlIGEsCiAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxCPjo6UGFyYW1UeXBlIGIsCiAgICB0eXBl
bmFtZSBUdXBsZVRyYWl0czxDPjo6UGFyYW1UeXBlIGMsCiAgICB0eXBlbmFtZSBUdXBsZVRyYWl0
czxEPjo6UGFyYW1UeXBlIGQsCiAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxFPjo6UGFyYW1UeXBl
IGUsCiAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxGPjo6UGFyYW1UeXBlIGYpCiAgICA6IGEoYSks
IGIoYiksIGMoYyksIGQoZCksIGUoZSksIGYoZikgewogIH0KCiAgQSBhOwogIEIgYjsKICBDIGM7
CiAgRCBkOwogIEUgZTsKICBGIGY7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQSwgY2xhc3MgQiwgY2xh
c3MgQywgY2xhc3MgRCwgY2xhc3MgRSwgY2xhc3MgRiwgY2xhc3MgRz4Kc3RydWN0IFR1cGxlNyB7
CnB1YmxpYzoKICB0eXBlZGVmIEEgVHlwZUE7CiAgdHlwZWRlZiBCIFR5cGVCOwogIHR5cGVkZWYg
QyBUeXBlQzsKICB0eXBlZGVmIEQgVHlwZUQ7CiAgdHlwZWRlZiBFIFR5cGVFOwogIHR5cGVkZWYg
RiBUeXBlRjsKICB0eXBlZGVmIEcgVHlwZUc7CiAgdHlwZWRlZiBUdXBsZTc8dHlwZW5hbWUgVHVw
bGVUcmFpdHM8QT46OlZhbHVlVHlwZSwKICAgIHR5cGVuYW1lIFR1cGxlVHJhaXRzPEI+OjpWYWx1
ZVR5cGUsCiAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxDPjo6VmFsdWVUeXBlLAogICAgdHlwZW5h
bWUgVHVwbGVUcmFpdHM8RD46OlZhbHVlVHlwZSwKICAgIHR5cGVuYW1lIFR1cGxlVHJhaXRzPEU+
OjpWYWx1ZVR5cGUsCiAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxGPjo6VmFsdWVUeXBlLAogICAg
dHlwZW5hbWUgVHVwbGVUcmFpdHM8Rz46OlZhbHVlVHlwZT4gVmFsdWVUdXBsZTsKICB0eXBlZGVm
IFR1cGxlNzx0eXBlbmFtZSBUdXBsZVRyYWl0czxBPjo6UmVmVHlwZSwKICAgIHR5cGVuYW1lIFR1
cGxlVHJhaXRzPEI+OjpSZWZUeXBlLAogICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8Qz46OlJlZlR5
cGUsCiAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxEPjo6UmVmVHlwZSwKICAgIHR5cGVuYW1lIFR1
cGxlVHJhaXRzPEU+OjpSZWZUeXBlLAogICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8Rj46OlJlZlR5
cGUsCiAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxHPjo6UmVmVHlwZT4gUmVmVHVwbGU7CiAgdHlw
ZWRlZiBUdXBsZTc8dHlwZW5hbWUgVHVwbGVUcmFpdHM8QT46OlBhcmFtVHlwZSwKICAgIHR5cGVu
YW1lIFR1cGxlVHJhaXRzPEI+OjpQYXJhbVR5cGUsCiAgICB0eXBlbmFtZSBUdXBsZVRyYWl0czxD
Pjo6UGFyYW1UeXBlLAogICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8RD46OlBhcmFtVHlwZSwKICAg
IHR5cGVuYW1lIFR1cGxlVHJhaXRzPEU+OjpQYXJhbVR5cGUsCiAgICB0eXBlbmFtZSBUdXBsZVRy
YWl0czxGPjo6UGFyYW1UeXBlLAogICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8Rz46OlBhcmFtVHlw
ZT4gUGFyYW1UdXBsZTsKCiAgVHVwbGU3KCkge30KICBUdXBsZTcodHlwZW5hbWUgVHVwbGVUcmFp
dHM8QT46OlBhcmFtVHlwZSBhLAogICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8Qj46OlBhcmFtVHlw
ZSBiLAogICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8Qz46OlBhcmFtVHlwZSBjLAogICAgdHlwZW5h
bWUgVHVwbGVUcmFpdHM8RD46OlBhcmFtVHlwZSBkLAogICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8
RT46OlBhcmFtVHlwZSBlLAogICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8Rj46OlBhcmFtVHlwZSBm
LAogICAgdHlwZW5hbWUgVHVwbGVUcmFpdHM8Rz46OlBhcmFtVHlwZSBnKQogICAgOiBhKGEpLCBi
KGIpLCBjKGMpLCBkKGQpLCBlKGUpLCBmKGYpLCBnKGcpIHsKICB9CgogIEEgYTsKICBCIGI7CiAg
QyBjOwogIEQgZDsKICBFIGU7CiAgRiBmOwogIEcgZzsKfTsKCi8vIFR1cGxlIGNyZWF0b3JzIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLy8KLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgY29uc3RydWN0aW5nIHR1cGxlcyB3aGlsZSBp
bmZlcnJpbmcgdGhlIHRlbXBsYXRlCi8vIGFyZ3VtZW50IHR5cGVzLgoKaW5saW5lIFR1cGxlMCBN
YWtlVHVwbGUoKSB7CiAgcmV0dXJuIFR1cGxlMCgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQT4KaW5s
aW5lIFR1cGxlMTxBPiBNYWtlVHVwbGUoY29uc3QgQSYgYSkgewogIHJldHVybiBUdXBsZTE8QT4o
YSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBCPgppbmxpbmUgVHVwbGUyPEEsIEI+IE1h
a2VUdXBsZShjb25zdCBBJiBhLCBjb25zdCBCJiBiKSB7CiAgcmV0dXJuIFR1cGxlMjxBLCBCPihh
LCBiKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIEM+CmlubGluZSBUdXBs
ZTM8QSwgQiwgQz4gTWFrZVR1cGxlKGNvbnN0IEEmIGEsIGNvbnN0IEImIGIsIGNvbnN0IEMmIGMp
IHsKICByZXR1cm4gVHVwbGUzPEEsIEIsIEM+KGEsIGIsIGMpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
QSwgY2xhc3MgQiwgY2xhc3MgQywgY2xhc3MgRD4KaW5saW5lIFR1cGxlNDxBLCBCLCBDLCBEPiBN
YWtlVHVwbGUoY29uc3QgQSYgYSwgY29uc3QgQiYgYiwgY29uc3QgQyYgYywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRCYgZCkgewogIHJldHVybiBUdXBsZTQ8QSwg
QiwgQywgRD4oYSwgYiwgYywgZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBCLCBjbGFz
cyBDLCBjbGFzcyBELCBjbGFzcyBFPgppbmxpbmUgVHVwbGU1PEEsIEIsIEMsIEQsIEU+IE1ha2VU
dXBsZShjb25zdCBBJiBhLCBjb25zdCBCJiBiLCBjb25zdCBDJiBjLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEJiBkLCBjb25zdCBFJiBlKSB7CiAgcmV0dXJu
IFR1cGxlNTxBLCBCLCBDLCBELCBFPihhLCBiLCBjLCBkLCBlKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IEEsIGNsYXNzIEIsIGNsYXNzIEMsIGNsYXNzIEQsIGNsYXNzIEUsIGNsYXNzIEY+CmlubGluZSBU
dXBsZTY8QSwgQiwgQywgRCwgRSwgRj4gTWFrZVR1cGxlKGNvbnN0IEEmIGEsIGNvbnN0IEImIGIs
IGNvbnN0IEMmIGMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEQmIGQsIGNvbnN0IEUmIGUsIGNvbnN0IEYmIGYpIHsKICByZXR1cm4gVHVwbGU2PEEsIEIs
IEMsIEQsIEUsIEY+KGEsIGIsIGMsIGQsIGUsIGYpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQSwgY2xh
c3MgQiwgY2xhc3MgQywgY2xhc3MgRCwgY2xhc3MgRSwgY2xhc3MgRiwgY2xhc3MgRz4KaW5saW5l
IFR1cGxlNzxBLCBCLCBDLCBELCBFLCBGLCBHPiBNYWtlVHVwbGUoY29uc3QgQSYgYSwgY29uc3Qg
QiYgYiwgY29uc3QgQyYgYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRCYgZCwgY29uc3QgRSYgZSwgY29uc3QgRiYgZiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRyYgZykgewogIHJldHVybiBUdXBs
ZTc8QSwgQiwgQywgRCwgRSwgRiwgRz4oYSwgYiwgYywgZCwgZSwgZiwgZyk7Cn0KCi8vIFRoZSBm
b2xsb3dpbmcgc2V0IG9mIGhlbHBlcnMgbWFrZSB3aGF0IEJvb3N0IHJlZmVycyB0byBhcyAiVGll
cnMiIC0gYSB0dXBsZQovLyBvZiByZWZlcmVuY2VzLgoKdGVtcGxhdGUgPGNsYXNzIEE+CmlubGlu
ZSBUdXBsZTE8QSY+IE1ha2VSZWZUdXBsZShBJiBhKSB7CiAgcmV0dXJuIFR1cGxlMTxBJj4oYSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBCPgppbmxpbmUgVHVwbGUyPEEmLCBCJj4gTWFr
ZVJlZlR1cGxlKEEmIGEsIEImIGIpIHsKICByZXR1cm4gVHVwbGUyPEEmLCBCJj4oYSwgYik7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBDPgppbmxpbmUgVHVwbGUzPEEmLCBC
JiwgQyY+IE1ha2VSZWZUdXBsZShBJiBhLCBCJiBiLCBDJiBjKSB7CiAgcmV0dXJuIFR1cGxlMzxB
JiwgQiYsIEMmPihhLCBiLCBjKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNz
IEMsIGNsYXNzIEQ+CmlubGluZSBUdXBsZTQ8QSYsIEImLCBDJiwgRCY+IE1ha2VSZWZUdXBsZShB
JiBhLCBCJiBiLCBDJiBjLCBEJiBkKSB7CiAgcmV0dXJuIFR1cGxlNDxBJiwgQiYsIEMmLCBEJj4o
YSwgYiwgYywgZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBDLCBjbGFz
cyBELCBjbGFzcyBFPgppbmxpbmUgVHVwbGU1PEEmLCBCJiwgQyYsIEQmLCBFJj4gTWFrZVJlZlR1
cGxlKEEmIGEsIEImIGIsIEMmIGMsIEQmIGQsIEUmIGUpIHsKICByZXR1cm4gVHVwbGU1PEEmLCBC
JiwgQyYsIEQmLCBFJj4oYSwgYiwgYywgZCwgZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBLCBjbGFz
cyBCLCBjbGFzcyBDLCBjbGFzcyBELCBjbGFzcyBFLCBjbGFzcyBGPgppbmxpbmUgVHVwbGU2PEEm
LCBCJiwgQyYsIEQmLCBFJiwgRiY+IE1ha2VSZWZUdXBsZShBJiBhLCBCJiBiLCBDJiBjLCBEJiBk
LCBFJiBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGJiBmKSB7CiAgcmV0dXJuIFR1cGxlNjxBJiwgQiYsIEMmLCBEJiwgRSYsIEYmPihhLCBiLCBj
LCBkLCBlLCBmKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIEMsIGNsYXNz
IEQsIGNsYXNzIEUsIGNsYXNzIEYsIGNsYXNzIEc+CmlubGluZSBUdXBsZTc8QSYsIEImLCBDJiwg
RCYsIEUmLCBGJiwgRyY+IE1ha2VSZWZUdXBsZShBJiBhLCBCJiBiLCBDJiBjLCBEJiBkLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRSYgZSwg
RiYgZiwgRyYgZykgewogIHJldHVybiBUdXBsZTc8QSYsIEImLCBDJiwgRCYsIEUmLCBGJiwgRyY+
KGEsIGIsIGMsIGQsIGUsIGYsIGcpOwp9CgovLyBEaXNwYXRjaGVycyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vCi8vIEhl
bHBlciBmdW5jdGlvbnMgdGhhdCBjYWxsIHRoZSBnaXZlbiBtZXRob2Qgb24gYW4gb2JqZWN0LCB3
aXRoIHRoZSB1bnBhY2tlZAovLyB0dXBsZSBhcmd1bWVudHMuICBOb3RpY2UgdGhhdCB0aGV5IGFs
bCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBhcmd1bWVudHMsCi8vIHNvIHlvdSBuZWVkIG9ubHkg
d3JpdGU6Ci8vICAgRGlzcGF0Y2hUb01ldGhvZChvYmplY3QsICZPYmplY3Q6Om1ldGhvZCwgYXJn
cyk7Ci8vIFRoaXMgaXMgdmVyeSB1c2VmdWwgZm9yIHRlbXBsYXRlZCBkaXNwYXRjaGVycywgc2lu
Y2UgdGhleSBkb24ndCBuZWVkIHRvIGtub3cKLy8gd2hhdCB0eXBlIHxhcmdzfCBpcy4KCi8vIE5v
bi1TdGF0aWMgRGlzcGF0Y2hlcnMgd2l0aCBubyBvdXQgcGFyYW1zLgoKdGVtcGxhdGUgPGNsYXNz
IE9ialQsIGNsYXNzIE1ldGhvZD4KaW5saW5lIHZvaWQgRGlzcGF0Y2hUb01ldGhvZChPYmpUKiBv
YmosIE1ldGhvZCBtZXRob2QsIGNvbnN0IFR1cGxlMCYgYXJnKSB7CiAgKG9iai0+Km1ldGhvZCko
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIE9ialQsIGNsYXNzIE1ldGhvZCwgY2xhc3MgQT4KaW5saW5l
IHZvaWQgRGlzcGF0Y2hUb01ldGhvZChPYmpUKiBvYmosIE1ldGhvZCBtZXRob2QsIGNvbnN0IEEm
IGFyZykgewogIChvYmotPiptZXRob2QpKGFyZyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBPYmpULCBj
bGFzcyBNZXRob2QsIGNsYXNzIEE+CmlubGluZSB2b2lkIERpc3BhdGNoVG9NZXRob2QoT2JqVCog
b2JqLCBNZXRob2QgbWV0aG9kLCBjb25zdCBUdXBsZTE8QT4mIGFyZykgewogIChvYmotPiptZXRo
b2QpKGFyZy5hKTsKfQoKdGVtcGxhdGU8Y2xhc3MgT2JqVCwgY2xhc3MgTWV0aG9kLCBjbGFzcyBB
LCBjbGFzcyBCPgppbmxpbmUgdm9pZCBEaXNwYXRjaFRvTWV0aG9kKE9ialQqIG9iaiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBNZXRob2QgbWV0aG9kLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFR1cGxlMjxBLCBCPiYgYXJnKSB7CiAgKG9iai0+Km1ldGhvZCkoYXJn
LmEsIGFyZy5iKTsKfQoKdGVtcGxhdGU8Y2xhc3MgT2JqVCwgY2xhc3MgTWV0aG9kLCBjbGFzcyBB
LCBjbGFzcyBCLCBjbGFzcyBDPgppbmxpbmUgdm9pZCBEaXNwYXRjaFRvTWV0aG9kKE9ialQqIG9i
aiwgTWV0aG9kIG1ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUdXBs
ZTM8QSwgQiwgQz4mIGFyZykgewogIChvYmotPiptZXRob2QpKGFyZy5hLCBhcmcuYiwgYXJnLmMp
Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBPYmpULCBjbGFzcyBNZXRob2QsIGNsYXNzIEEsIGNsYXNzIEIs
IGNsYXNzIEMsIGNsYXNzIEQ+CmlubGluZSB2b2lkIERpc3BhdGNoVG9NZXRob2QoT2JqVCogb2Jq
LCBNZXRob2QgbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFR1cGxl
NDxBLCBCLCBDLCBEPiYgYXJnKSB7CiAgKG9iai0+Km1ldGhvZCkoYXJnLmEsIGFyZy5iLCBhcmcu
YywgYXJnLmQpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBPYmpULCBjbGFzcyBNZXRob2QsIGNsYXNzIEEs
IGNsYXNzIEIsIGNsYXNzIEMsIGNsYXNzIEQsIGNsYXNzIEU+CmlubGluZSB2b2lkIERpc3BhdGNo
VG9NZXRob2QoT2JqVCogb2JqLCBNZXRob2QgbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFR1cGxlNTxBLCBCLCBDLCBELCBFPiYgYXJnKSB7CiAgKG9iai0+Km1ldGhv
ZCkoYXJnLmEsIGFyZy5iLCBhcmcuYywgYXJnLmQsIGFyZy5lKTsKfQoKdGVtcGxhdGU8Y2xhc3Mg
T2JqVCwgY2xhc3MgTWV0aG9kLCBjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBDLCBjbGFzcyBELCBj
bGFzcyBFLAogICAgICAgICBjbGFzcyBGPgppbmxpbmUgdm9pZCBEaXNwYXRjaFRvTWV0aG9kKE9i
alQqIG9iaiwgTWV0aG9kIG1ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUdXBsZTY8QSwgQiwgQywgRCwgRSwgRj4mIGFyZykgewogIChvYmotPiptZXRob2QpKGFyZy5h
LCBhcmcuYiwgYXJnLmMsIGFyZy5kLCBhcmcuZSwgYXJnLmYpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBP
YmpULCBjbGFzcyBNZXRob2QsIGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIEMsIGNsYXNzIEQsIGNs
YXNzIEUsCiAgICAgICAgIGNsYXNzIEYsIGNsYXNzIEc+CmlubGluZSB2b2lkIERpc3BhdGNoVG9N
ZXRob2QoT2JqVCogb2JqLCBNZXRob2QgbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFR1cGxlNzxBLCBCLCBDLCBELCBFLCBGLCBHPiYgYXJnKSB7CiAgKG9iai0+Km1l
dGhvZCkoYXJnLmEsIGFyZy5iLCBhcmcuYywgYXJnLmQsIGFyZy5lLCBhcmcuZiwgYXJnLmcpOwp9
CgovLyBTdGF0aWMgRGlzcGF0Y2hlcnMgd2l0aCBubyBvdXQgcGFyYW1zLgoKdGVtcGxhdGUgPGNs
YXNzIEZ1bmN0aW9uPgppbmxpbmUgdm9pZCBEaXNwYXRjaFRvRnVuY3Rpb24oRnVuY3Rpb24gZnVu
Y3Rpb24sIGNvbnN0IFR1cGxlMCYgYXJnKSB7CiAgKCpmdW5jdGlvbikoKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIEZ1bmN0aW9uLCBjbGFzcyBBPgppbmxpbmUgdm9pZCBEaXNwYXRjaFRvRnVuY3Rpb24o
RnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IEEmIGFyZykgewogICgqZnVuY3Rpb24pKGFyZyk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBGdW5jdGlvbiwgY2xhc3MgQT4KaW5saW5lIHZvaWQgRGlzcGF0Y2hU
b0Z1bmN0aW9uKEZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCBUdXBsZTE8QT4mIGFyZykgewogICgq
ZnVuY3Rpb24pKGFyZy5hKTsKfQoKdGVtcGxhdGU8Y2xhc3MgRnVuY3Rpb24sIGNsYXNzIEEsIGNs
YXNzIEI+CmlubGluZSB2b2lkIERpc3BhdGNoVG9GdW5jdGlvbihGdW5jdGlvbiBmdW5jdGlvbiwg
Y29uc3QgVHVwbGUyPEEsIEI+JiBhcmcpIHsKICAoKmZ1bmN0aW9uKShhcmcuYSwgYXJnLmIpOwp9
Cgp0ZW1wbGF0ZTxjbGFzcyBGdW5jdGlvbiwgY2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgQz4KaW5s
aW5lIHZvaWQgRGlzcGF0Y2hUb0Z1bmN0aW9uKEZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCBUdXBs
ZTM8QSwgQiwgQz4mIGFyZykgewogICgqZnVuY3Rpb24pKGFyZy5hLCBhcmcuYiwgYXJnLmMpOwp9
Cgp0ZW1wbGF0ZTxjbGFzcyBGdW5jdGlvbiwgY2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgQywgY2xh
c3MgRD4KaW5saW5lIHZvaWQgRGlzcGF0Y2hUb0Z1bmN0aW9uKEZ1bmN0aW9uIGZ1bmN0aW9uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHVwbGU0PEEsIEIsIEMsIEQ+JiBh
cmcpIHsKICAoKmZ1bmN0aW9uKShhcmcuYSwgYXJnLmIsIGFyZy5jLCBhcmcuZCk7Cn0KCnRlbXBs
YXRlPGNsYXNzIEZ1bmN0aW9uLCBjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBDLCBjbGFzcyBELCBj
bGFzcyBFPgppbmxpbmUgdm9pZCBEaXNwYXRjaFRvRnVuY3Rpb24oRnVuY3Rpb24gZnVuY3Rpb24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUdXBsZTU8QSwgQiwgQywgRCwg
RT4mIGFyZykgewogICgqZnVuY3Rpb24pKGFyZy5hLCBhcmcuYiwgYXJnLmMsIGFyZy5kLCBhcmcu
ZSk7Cn0KCnRlbXBsYXRlPGNsYXNzIEZ1bmN0aW9uLCBjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBD
LCBjbGFzcyBELCBjbGFzcyBFLCBjbGFzcyBGPgppbmxpbmUgdm9pZCBEaXNwYXRjaFRvRnVuY3Rp
b24oRnVuY3Rpb24gZnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUdXBsZTY8QSwgQiwgQywgRCwgRSwgRj4mIGFyZykgewogICgqZnVuY3Rpb24pKGFyZy5hLCBh
cmcuYiwgYXJnLmMsIGFyZy5kLCBhcmcuZSwgYXJnLmYpOwp9CgovLyBEaXNwYXRjaGVycyB3aXRo
IDAgb3V0IHBhcmFtIChhcyBhIFR1cGxlMCkuCgp0ZW1wbGF0ZSA8Y2xhc3MgT2JqVCwgY2xhc3Mg
TWV0aG9kPgppbmxpbmUgdm9pZCBEaXNwYXRjaFRvTWV0aG9kKE9ialQqIG9iaiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNZXRob2QgbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFR1cGxlMCYgYXJnLCBUdXBsZTAqKSB7CiAgKG9iai0+Km1ldGhvZCkoKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIE9ialQsIGNsYXNzIE1ldGhvZCwgY2xhc3MgQT4KaW5saW5lIHZv
aWQgRGlzcGF0Y2hUb01ldGhvZChPYmpUKiBvYmosIE1ldGhvZCBtZXRob2QsIGNvbnN0IEEmIGFy
ZywgVHVwbGUwKikgewogIChvYmotPiptZXRob2QpKGFyZyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBP
YmpULCBjbGFzcyBNZXRob2QsIGNsYXNzIEE+CmlubGluZSB2b2lkIERpc3BhdGNoVG9NZXRob2Qo
T2JqVCogb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ldGhvZCBtZXRob2QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHVwbGUxPEE+JiBhcmcsIFR1cGxlMCop
IHsKICAob2JqLT4qbWV0aG9kKShhcmcuYSk7Cn0KCnRlbXBsYXRlPGNsYXNzIE9ialQsIGNsYXNz
IE1ldGhvZCwgY2xhc3MgQSwgY2xhc3MgQj4KaW5saW5lIHZvaWQgRGlzcGF0Y2hUb01ldGhvZChP
YmpUKiBvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0aG9kIG1ldGhvZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUdXBsZTI8QSwgQj4mIGFyZywgVHVwbGUw
KikgewogIChvYmotPiptZXRob2QpKGFyZy5hLCBhcmcuYik7Cn0KCnRlbXBsYXRlPGNsYXNzIE9i
alQsIGNsYXNzIE1ldGhvZCwgY2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgQz4KaW5saW5lIHZvaWQg
RGlzcGF0Y2hUb01ldGhvZChPYmpUKiBvYmosIE1ldGhvZCBtZXRob2QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVHVwbGUzPEEsIEIsIEM+JiBhcmcsIFR1cGxlMCopIHsKICAo
b2JqLT4qbWV0aG9kKShhcmcuYSwgYXJnLmIsIGFyZy5jKTsKfQoKdGVtcGxhdGU8Y2xhc3MgT2Jq
VCwgY2xhc3MgTWV0aG9kLCBjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBDLCBjbGFzcyBEPgppbmxp
bmUgdm9pZCBEaXNwYXRjaFRvTWV0aG9kKE9ialQqIG9iaiwgTWV0aG9kIG1ldGhvZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUdXBsZTQ8QSwgQiwgQywgRD4mIGFyZywgVHVw
bGUwKikgewogIChvYmotPiptZXRob2QpKGFyZy5hLCBhcmcuYiwgYXJnLmMsIGFyZy5kKTsKfQoK
dGVtcGxhdGU8Y2xhc3MgT2JqVCwgY2xhc3MgTWV0aG9kLCBjbGFzcyBBLCBjbGFzcyBCLCBjbGFz
cyBDLCBjbGFzcyBELCBjbGFzcyBFPgppbmxpbmUgdm9pZCBEaXNwYXRjaFRvTWV0aG9kKE9ialQq
IG9iaiwgTWV0aG9kIG1ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
dXBsZTU8QSwgQiwgQywgRCwgRT4mIGFyZywgVHVwbGUwKikgewogIChvYmotPiptZXRob2QpKGFy
Zy5hLCBhcmcuYiwgYXJnLmMsIGFyZy5kLCBhcmcuZSk7Cn0KCnRlbXBsYXRlPGNsYXNzIE9ialQs
IGNsYXNzIE1ldGhvZCwgY2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgQywgY2xhc3MgRCwgY2xhc3Mg
RSwKICAgICAgICAgY2xhc3MgRj4KaW5saW5lIHZvaWQgRGlzcGF0Y2hUb01ldGhvZChPYmpUKiBv
YmosIE1ldGhvZCBtZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHVw
bGU2PEEsIEIsIEMsIEQsIEUsIEY+JiBhcmcsIFR1cGxlMCopIHsKICAob2JqLT4qbWV0aG9kKShh
cmcuYSwgYXJnLmIsIGFyZy5jLCBhcmcuZCwgYXJnLmUsIGFyZy5mKTsKfQoKLy8gRGlzcGF0Y2hl
cnMgd2l0aCAxIG91dCBwYXJhbS4KCnRlbXBsYXRlPGNsYXNzIE9ialQsIGNsYXNzIE1ldGhvZCwK
ICAgICAgICAgY2xhc3MgT3V0QT4KaW5saW5lIHZvaWQgRGlzcGF0Y2hUb01ldGhvZChPYmpUKiBv
YmosIE1ldGhvZCBtZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHVw
bGUwJiBpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUdXBsZTE8T3V0QT4qIG91dCkg
ewogIChvYmotPiptZXRob2QpKCZvdXQtPmEpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBPYmpULCBjbGFz
cyBNZXRob2QsIGNsYXNzIEluQSwKICAgICAgICAgY2xhc3MgT3V0QT4KaW5saW5lIHZvaWQgRGlz
cGF0Y2hUb01ldGhvZChPYmpUKiBvYmosIE1ldGhvZCBtZXRob2QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSW5BJiBpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
dXBsZTE8T3V0QT4qIG91dCkgewogIChvYmotPiptZXRob2QpKGluLCAmb3V0LT5hKTsKfQoKdGVt
cGxhdGU8Y2xhc3MgT2JqVCwgY2xhc3MgTWV0aG9kLCBjbGFzcyBJbkEsCiAgICAgICAgIGNsYXNz
IE91dEE+CmlubGluZSB2b2lkIERpc3BhdGNoVG9NZXRob2QoT2JqVCogb2JqLCBNZXRob2QgbWV0
aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFR1cGxlMTxJbkE+JiBpbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUdXBsZTE8T3V0QT4qIG91dCkgewogIChvYmot
PiptZXRob2QpKGluLmEsICZvdXQtPmEpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBPYmpULCBjbGFzcyBN
ZXRob2QsIGNsYXNzIEluQSwgY2xhc3MgSW5CLAogICAgICAgICBjbGFzcyBPdXRBPgppbmxpbmUg
dm9pZCBEaXNwYXRjaFRvTWV0aG9kKE9ialQqIG9iaiwgTWV0aG9kIG1ldGhvZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUdXBsZTI8SW5BLCBJbkI+JiBpbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUdXBsZTE8T3V0QT4qIG91dCkgewogIChvYmotPiptZXRob2Qp
KGluLmEsIGluLmIsICZvdXQtPmEpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBPYmpULCBjbGFzcyBNZXRo
b2QsIGNsYXNzIEluQSwgY2xhc3MgSW5CLCBjbGFzcyBJbkMsCiAgICAgICAgIGNsYXNzIE91dEE+
CmlubGluZSB2b2lkIERpc3BhdGNoVG9NZXRob2QoT2JqVCogb2JqLCBNZXRob2QgbWV0aG9kLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFR1cGxlMzxJbkEsIEluQiwgSW5DPiYg
aW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHVwbGUxPE91dEE+KiBvdXQpIHsKICAo
b2JqLT4qbWV0aG9kKShpbi5hLCBpbi5iLCBpbi5jLCAmb3V0LT5hKTsKfQoKdGVtcGxhdGU8Y2xh
c3MgT2JqVCwgY2xhc3MgTWV0aG9kLCBjbGFzcyBJbkEsIGNsYXNzIEluQiwgY2xhc3MgSW5DLCBj
bGFzcyBJbkQsCiAgICAgICAgIGNsYXNzIE91dEE+CmlubGluZSB2b2lkIERpc3BhdGNoVG9NZXRo
b2QoT2JqVCogb2JqLCBNZXRob2QgbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFR1cGxlNDxJbkEsIEluQiwgSW5DLCBJbkQ+JiBpbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUdXBsZTE8T3V0QT4qIG91dCkgewogIChvYmotPiptZXRob2QpKGluLmEsIGlu
LmIsIGluLmMsIGluLmQsICZvdXQtPmEpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBPYmpULCBjbGFzcyBN
ZXRob2QsCiAgICAgICAgIGNsYXNzIEluQSwgY2xhc3MgSW5CLCBjbGFzcyBJbkMsIGNsYXNzIElu
RCwgY2xhc3MgSW5FLAogICAgICAgICBjbGFzcyBPdXRBPgppbmxpbmUgdm9pZCBEaXNwYXRjaFRv
TWV0aG9kKE9ialQqIG9iaiwgTWV0aG9kIG1ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUdXBsZTU8SW5BLCBJbkIsIEluQywgSW5ELCBJbkU+JiBpbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUdXBsZTE8T3V0QT4qIG91dCkgewogIChvYmotPiptZXRob2Qp
KGluLmEsIGluLmIsIGluLmMsIGluLmQsIGluLmUsICZvdXQtPmEpOwp9Cgp0ZW1wbGF0ZTxjbGFz
cyBPYmpULCBjbGFzcyBNZXRob2QsCiAgICAgICAgIGNsYXNzIEluQSwgY2xhc3MgSW5CLCBjbGFz
cyBJbkMsIGNsYXNzIEluRCwgY2xhc3MgSW5FLCBjbGFzcyBJbkYsCiAgICAgICAgIGNsYXNzIE91
dEE+CmlubGluZSB2b2lkIERpc3BhdGNoVG9NZXRob2QoT2JqVCogb2JqLCBNZXRob2QgbWV0aG9k
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFR1cGxlNjxJbkEsIEluQiwgSW5D
LCBJbkQsIEluRSwgSW5GPiYgaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHVwbGUx
PE91dEE+KiBvdXQpIHsKICAob2JqLT4qbWV0aG9kKShpbi5hLCBpbi5iLCBpbi5jLCBpbi5kLCBp
bi5lLCBpbi5mLCAmb3V0LT5hKTsKfQoKLy8gRGlzcGF0Y2hlcnMgd2l0aCAyIG91dCBwYXJhbXMu
Cgp0ZW1wbGF0ZTxjbGFzcyBPYmpULCBjbGFzcyBNZXRob2QsCiAgICAgICAgIGNsYXNzIE91dEEs
IGNsYXNzIE91dEI+CmlubGluZSB2b2lkIERpc3BhdGNoVG9NZXRob2QoT2JqVCogb2JqLCBNZXRo
b2QgbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFR1cGxlMCYgaW4s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHVwbGUyPE91dEEsIE91dEI+KiBvdXQpIHsK
ICAob2JqLT4qbWV0aG9kKSgmb3V0LT5hLCAmb3V0LT5iKTsKfQoKdGVtcGxhdGU8Y2xhc3MgT2Jq
VCwgY2xhc3MgTWV0aG9kLCBjbGFzcyBJbkEsCiAgICAgICAgIGNsYXNzIE91dEEsIGNsYXNzIE91
dEI+CmlubGluZSB2b2lkIERpc3BhdGNoVG9NZXRob2QoT2JqVCogb2JqLCBNZXRob2QgbWV0aG9k
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluQSYgaW4sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVHVwbGUyPE91dEEsIE91dEI+KiBvdXQpIHsKICAob2JqLT4qbWV0
aG9kKShpbiwgJm91dC0+YSwgJm91dC0+Yik7Cn0KCnRlbXBsYXRlPGNsYXNzIE9ialQsIGNsYXNz
IE1ldGhvZCwgY2xhc3MgSW5BLAogICAgICAgICBjbGFzcyBPdXRBLCBjbGFzcyBPdXRCPgppbmxp
bmUgdm9pZCBEaXNwYXRjaFRvTWV0aG9kKE9ialQqIG9iaiwgTWV0aG9kIG1ldGhvZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUdXBsZTE8SW5BPiYgaW4sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVHVwbGUyPE91dEEsIE91dEI+KiBvdXQpIHsKICAob2JqLT4qbWV0
aG9kKShpbi5hLCAmb3V0LT5hLCAmb3V0LT5iKTsKfQoKdGVtcGxhdGU8Y2xhc3MgT2JqVCwgY2xh
c3MgTWV0aG9kLCBjbGFzcyBJbkEsIGNsYXNzIEluQiwKICAgICAgICAgY2xhc3MgT3V0QSwgY2xh
c3MgT3V0Qj4KaW5saW5lIHZvaWQgRGlzcGF0Y2hUb01ldGhvZChPYmpUKiBvYmosIE1ldGhvZCBt
ZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHVwbGUyPEluQSwgSW5C
PiYgaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHVwbGUyPE91dEEsIE91dEI+KiBv
dXQpIHsKICAob2JqLT4qbWV0aG9kKShpbi5hLCBpbi5iLCAmb3V0LT5hLCAmb3V0LT5iKTsKfQoK
dGVtcGxhdGU8Y2xhc3MgT2JqVCwgY2xhc3MgTWV0aG9kLCBjbGFzcyBJbkEsIGNsYXNzIEluQiwg
Y2xhc3MgSW5DLAogICAgICAgICBjbGFzcyBPdXRBLCBjbGFzcyBPdXRCPgppbmxpbmUgdm9pZCBE
aXNwYXRjaFRvTWV0aG9kKE9ialQqIG9iaiwgTWV0aG9kIG1ldGhvZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUdXBsZTM8SW5BLCBJbkIsIEluQz4mIGluLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFR1cGxlMjxPdXRBLCBPdXRCPiogb3V0KSB7CiAgKG9iai0+Km1l
dGhvZCkoaW4uYSwgaW4uYiwgaW4uYywgJm91dC0+YSwgJm91dC0+Yik7Cn0KCnRlbXBsYXRlPGNs
YXNzIE9ialQsIGNsYXNzIE1ldGhvZCwgY2xhc3MgSW5BLCBjbGFzcyBJbkIsIGNsYXNzIEluQywg
Y2xhc3MgSW5ELAogICAgICAgICBjbGFzcyBPdXRBLCBjbGFzcyBPdXRCPgppbmxpbmUgdm9pZCBE
aXNwYXRjaFRvTWV0aG9kKE9ialQqIG9iaiwgTWV0aG9kIG1ldGhvZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUdXBsZTQ8SW5BLCBJbkIsIEluQywgSW5EPiYgaW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVHVwbGUyPE91dEEsIE91dEI+KiBvdXQpIHsKICAob2Jq
LT4qbWV0aG9kKShpbi5hLCBpbi5iLCBpbi5jLCBpbi5kLCAmb3V0LT5hLCAmb3V0LT5iKTsKfQoK
dGVtcGxhdGU8Y2xhc3MgT2JqVCwgY2xhc3MgTWV0aG9kLAogICAgICAgICBjbGFzcyBJbkEsIGNs
YXNzIEluQiwgY2xhc3MgSW5DLCBjbGFzcyBJbkQsIGNsYXNzIEluRSwKICAgICAgICAgY2xhc3Mg
T3V0QSwgY2xhc3MgT3V0Qj4KaW5saW5lIHZvaWQgRGlzcGF0Y2hUb01ldGhvZChPYmpUKiBvYmos
IE1ldGhvZCBtZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHVwbGU1
PEluQSwgSW5CLCBJbkMsIEluRCwgSW5FPiYgaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVHVwbGUyPE91dEEsIE91dEI+KiBvdXQpIHsKICAob2JqLT4qbWV0aG9kKShpbi5hLCBpbi5i
LCBpbi5jLCBpbi5kLCBpbi5lLCAmb3V0LT5hLCAmb3V0LT5iKTsKfQoKdGVtcGxhdGU8Y2xhc3Mg
T2JqVCwgY2xhc3MgTWV0aG9kLAogICAgICAgICBjbGFzcyBJbkEsIGNsYXNzIEluQiwgY2xhc3Mg
SW5DLCBjbGFzcyBJbkQsIGNsYXNzIEluRSwgY2xhc3MgSW5GLAogICAgICAgICBjbGFzcyBPdXRB
LCBjbGFzcyBPdXRCPgppbmxpbmUgdm9pZCBEaXNwYXRjaFRvTWV0aG9kKE9ialQqIG9iaiwgTWV0
aG9kIG1ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUdXBsZTY8SW5B
LCBJbkIsIEluQywgSW5ELCBJbkUsIEluRj4mIGluLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFR1cGxlMjxPdXRBLCBPdXRCPiogb3V0KSB7CiAgKG9iai0+Km1ldGhvZCkoaW4uYSwgaW4u
YiwgaW4uYywgaW4uZCwgaW4uZSwgaW4uZiwgJm91dC0+YSwgJm91dC0+Yik7Cn0KCi8vIERpc3Bh
dGNoZXJzIHdpdGggMyBvdXQgcGFyYW1zLgoKdGVtcGxhdGU8Y2xhc3MgT2JqVCwgY2xhc3MgTWV0
aG9kLAogICAgICAgICBjbGFzcyBPdXRBLCBjbGFzcyBPdXRCLCBjbGFzcyBPdXRDPgppbmxpbmUg
dm9pZCBEaXNwYXRjaFRvTWV0aG9kKE9ialQqIG9iaiwgTWV0aG9kIG1ldGhvZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUdXBsZTAmIGluLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFR1cGxlMzxPdXRBLCBPdXRCLCBPdXRDPiogb3V0KSB7CiAgKG9iai0+Km1ldGhv
ZCkoJm91dC0+YSwgJm91dC0+YiwgJm91dC0+Yyk7Cn0KCnRlbXBsYXRlPGNsYXNzIE9ialQsIGNs
YXNzIE1ldGhvZCwgY2xhc3MgSW5BLAogICAgICAgICBjbGFzcyBPdXRBLCBjbGFzcyBPdXRCLCBj
bGFzcyBPdXRDPgppbmxpbmUgdm9pZCBEaXNwYXRjaFRvTWV0aG9kKE9ialQqIG9iaiwgTWV0aG9k
IG1ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbkEmIGluLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFR1cGxlMzxPdXRBLCBPdXRCLCBPdXRDPiogb3V0KSB7
CiAgKG9iai0+Km1ldGhvZCkoaW4sICZvdXQtPmEsICZvdXQtPmIsICZvdXQtPmMpOwp9Cgp0ZW1w
bGF0ZTxjbGFzcyBPYmpULCBjbGFzcyBNZXRob2QsIGNsYXNzIEluQSwKICAgICAgICAgY2xhc3Mg
T3V0QSwgY2xhc3MgT3V0QiwgY2xhc3MgT3V0Qz4KaW5saW5lIHZvaWQgRGlzcGF0Y2hUb01ldGhv
ZChPYmpUKiBvYmosIE1ldGhvZCBtZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVHVwbGUxPEluQT4mIGluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR1cGxl
MzxPdXRBLCBPdXRCLCBPdXRDPiogb3V0KSB7CiAgKG9iai0+Km1ldGhvZCkoaW4uYSwgJm91dC0+
YSwgJm91dC0+YiwgJm91dC0+Yyk7Cn0KCnRlbXBsYXRlPGNsYXNzIE9ialQsIGNsYXNzIE1ldGhv
ZCwgY2xhc3MgSW5BLCBjbGFzcyBJbkIsCiAgICAgICAgIGNsYXNzIE91dEEsIGNsYXNzIE91dEIs
IGNsYXNzIE91dEM+CmlubGluZSB2b2lkIERpc3BhdGNoVG9NZXRob2QoT2JqVCogb2JqLCBNZXRo
b2QgbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFR1cGxlMjxJbkEs
IEluQj4mIGluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR1cGxlMzxPdXRBLCBPdXRC
LCBPdXRDPiogb3V0KSB7CiAgKG9iai0+Km1ldGhvZCkoaW4uYSwgaW4uYiwgJm91dC0+YSwgJm91
dC0+YiwgJm91dC0+Yyk7Cn0KCnRlbXBsYXRlPGNsYXNzIE9ialQsIGNsYXNzIE1ldGhvZCwgY2xh
c3MgSW5BLCBjbGFzcyBJbkIsIGNsYXNzIEluQywKICAgICAgICAgY2xhc3MgT3V0QSwgY2xhc3Mg
T3V0QiwgY2xhc3MgT3V0Qz4KaW5saW5lIHZvaWQgRGlzcGF0Y2hUb01ldGhvZChPYmpUKiBvYmos
IE1ldGhvZCBtZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHVwbGUz
PEluQSwgSW5CLCBJbkM+JiBpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUdXBsZTM8
T3V0QSwgT3V0QiwgT3V0Qz4qIG91dCkgewogIChvYmotPiptZXRob2QpKGluLmEsIGluLmIsIGlu
LmMsICZvdXQtPmEsICZvdXQtPmIsICZvdXQtPmMpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBPYmpULCBj
bGFzcyBNZXRob2QsIGNsYXNzIEluQSwgY2xhc3MgSW5CLCBjbGFzcyBJbkMsIGNsYXNzIEluRCwK
ICAgICAgICAgY2xhc3MgT3V0QSwgY2xhc3MgT3V0QiwgY2xhc3MgT3V0Qz4KaW5saW5lIHZvaWQg
RGlzcGF0Y2hUb01ldGhvZChPYmpUKiBvYmosIE1ldGhvZCBtZXRob2QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVHVwbGU0PEluQSwgSW5CLCBJbkMsIEluRD4mIGluLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFR1cGxlMzxPdXRBLCBPdXRCLCBPdXRDPiogb3V0KSB7
CiAgKG9iai0+Km1ldGhvZCkoaW4uYSwgaW4uYiwgaW4uYywgaW4uZCwgJm91dC0+YSwgJm91dC0+
YiwgJm91dC0+Yyk7Cn0KCnRlbXBsYXRlPGNsYXNzIE9ialQsIGNsYXNzIE1ldGhvZCwKICAgICAg
ICAgY2xhc3MgSW5BLCBjbGFzcyBJbkIsIGNsYXNzIEluQywgY2xhc3MgSW5ELCBjbGFzcyBJbkUs
CiAgICAgICAgIGNsYXNzIE91dEEsIGNsYXNzIE91dEIsIGNsYXNzIE91dEM+CmlubGluZSB2b2lk
IERpc3BhdGNoVG9NZXRob2QoT2JqVCogb2JqLCBNZXRob2QgbWV0aG9kLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFR1cGxlNTxJbkEsIEluQiwgSW5DLCBJbkQsIEluRT4mIGlu
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR1cGxlMzxPdXRBLCBPdXRCLCBPdXRDPiog
b3V0KSB7CiAgKG9iai0+Km1ldGhvZCkoaW4uYSwgaW4uYiwgaW4uYywgaW4uZCwgaW4uZSwgJm91
dC0+YSwgJm91dC0+YiwgJm91dC0+Yyk7Cn0KCnRlbXBsYXRlPGNsYXNzIE9ialQsIGNsYXNzIE1l
dGhvZCwKICAgICAgICAgY2xhc3MgSW5BLCBjbGFzcyBJbkIsIGNsYXNzIEluQywgY2xhc3MgSW5E
LCBjbGFzcyBJbkUsIGNsYXNzIEluRiwKICAgICAgICAgY2xhc3MgT3V0QSwgY2xhc3MgT3V0Qiwg
Y2xhc3MgT3V0Qz4KaW5saW5lIHZvaWQgRGlzcGF0Y2hUb01ldGhvZChPYmpUKiBvYmosIE1ldGhv
ZCBtZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHVwbGU2PEluQSwg
SW5CLCBJbkMsIEluRCwgSW5FLCBJbkY+JiBpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUdXBsZTM8T3V0QSwgT3V0QiwgT3V0Qz4qIG91dCkgewogIChvYmotPiptZXRob2QpKGluLmEs
IGluLmIsIGluLmMsIGluLmQsIGluLmUsIGluLmYsICZvdXQtPmEsICZvdXQtPmIsICZvdXQtPmMp
Owp9CgovLyBEaXNwYXRjaGVycyB3aXRoIDQgb3V0IHBhcmFtcy4KCnRlbXBsYXRlPGNsYXNzIE9i
alQsIGNsYXNzIE1ldGhvZCwKICAgICAgICAgY2xhc3MgT3V0QSwgY2xhc3MgT3V0QiwgY2xhc3Mg
T3V0QywgY2xhc3MgT3V0RD4KaW5saW5lIHZvaWQgRGlzcGF0Y2hUb01ldGhvZChPYmpUKiBvYmos
IE1ldGhvZCBtZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHVwbGUw
JiBpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUdXBsZTQ8T3V0QSwgT3V0QiwgT3V0
QywgT3V0RD4qIG91dCkgewogIChvYmotPiptZXRob2QpKCZvdXQtPmEsICZvdXQtPmIsICZvdXQt
PmMsICZvdXQtPmQpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBPYmpULCBjbGFzcyBNZXRob2QsIGNsYXNz
IEluQSwKICAgICAgICAgY2xhc3MgT3V0QSwgY2xhc3MgT3V0QiwgY2xhc3MgT3V0QywgY2xhc3Mg
T3V0RD4KaW5saW5lIHZvaWQgRGlzcGF0Y2hUb01ldGhvZChPYmpUKiBvYmosIE1ldGhvZCBtZXRo
b2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5BJiBpbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUdXBsZTQ8T3V0QSwgT3V0QiwgT3V0QywgT3V0RD4qIG91dCkg
ewogIChvYmotPiptZXRob2QpKGluLCAmb3V0LT5hLCAmb3V0LT5iLCAmb3V0LT5jLCAmb3V0LT5k
KTsKfQoKdGVtcGxhdGU8Y2xhc3MgT2JqVCwgY2xhc3MgTWV0aG9kLCBjbGFzcyBJbkEsCiAgICAg
ICAgIGNsYXNzIE91dEEsIGNsYXNzIE91dEIsIGNsYXNzIE91dEMsIGNsYXNzIE91dEQ+CmlubGlu
ZSB2b2lkIERpc3BhdGNoVG9NZXRob2QoT2JqVCogb2JqLCBNZXRob2QgbWV0aG9kLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFR1cGxlMTxJbkE+JiBpbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUdXBsZTQ8T3V0QSwgT3V0QiwgT3V0QywgT3V0RD4qIG91dCkgewog
IChvYmotPiptZXRob2QpKGluLmEsICZvdXQtPmEsICZvdXQtPmIsICZvdXQtPmMsICZvdXQtPmQp
Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBPYmpULCBjbGFzcyBNZXRob2QsIGNsYXNzIEluQSwgY2xhc3Mg
SW5CLAogICAgICAgICBjbGFzcyBPdXRBLCBjbGFzcyBPdXRCLCBjbGFzcyBPdXRDLCBjbGFzcyBP
dXREPgppbmxpbmUgdm9pZCBEaXNwYXRjaFRvTWV0aG9kKE9ialQqIG9iaiwgTWV0aG9kIG1ldGhv
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUdXBsZTI8SW5BLCBJbkI+JiBp
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUdXBsZTQ8T3V0QSwgT3V0QiwgT3V0Qywg
T3V0RD4qIG91dCkgewogIChvYmotPiptZXRob2QpKGluLmEsIGluLmIsICZvdXQtPmEsICZvdXQt
PmIsICZvdXQtPmMsICZvdXQtPmQpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBPYmpULCBjbGFzcyBNZXRo
b2QsIGNsYXNzIEluQSwgY2xhc3MgSW5CLCBjbGFzcyBJbkMsCiAgICAgICAgIGNsYXNzIE91dEEs
IGNsYXNzIE91dEIsIGNsYXNzIE91dEMsIGNsYXNzIE91dEQ+CmlubGluZSB2b2lkIERpc3BhdGNo
VG9NZXRob2QoT2JqVCogb2JqLCBNZXRob2QgbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFR1cGxlMzxJbkEsIEluQiwgSW5DPiYgaW4sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVHVwbGU0PE91dEEsIE91dEIsIE91dEMsIE91dEQ+KiBvdXQpIHsKICAob2Jq
LT4qbWV0aG9kKShpbi5hLCBpbi5iLCBpbi5jLCAmb3V0LT5hLCAmb3V0LT5iLCAmb3V0LT5jLCAm
b3V0LT5kKTsKfQoKdGVtcGxhdGU8Y2xhc3MgT2JqVCwgY2xhc3MgTWV0aG9kLCBjbGFzcyBJbkEs
IGNsYXNzIEluQiwgY2xhc3MgSW5DLCBjbGFzcyBJbkQsCiAgICAgICAgIGNsYXNzIE91dEEsIGNs
YXNzIE91dEIsIGNsYXNzIE91dEMsIGNsYXNzIE91dEQ+CmlubGluZSB2b2lkIERpc3BhdGNoVG9N
ZXRob2QoT2JqVCogb2JqLCBNZXRob2QgbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFR1cGxlNDxJbkEsIEluQiwgSW5DLCBJbkQ+JiBpbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUdXBsZTQ8T3V0QSwgT3V0QiwgT3V0QywgT3V0RD4qIG91dCkgewogIChv
YmotPiptZXRob2QpKGluLmEsIGluLmIsIGluLmMsIGluLmQsICZvdXQtPmEsICZvdXQtPmIsICZv
dXQtPmMsICZvdXQtPmQpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBPYmpULCBjbGFzcyBNZXRob2QsCiAg
ICAgICAgIGNsYXNzIEluQSwgY2xhc3MgSW5CLCBjbGFzcyBJbkMsIGNsYXNzIEluRCwgY2xhc3Mg
SW5FLAogICAgICAgICBjbGFzcyBPdXRBLCBjbGFzcyBPdXRCLCBjbGFzcyBPdXRDLCBjbGFzcyBP
dXREPgppbmxpbmUgdm9pZCBEaXNwYXRjaFRvTWV0aG9kKE9ialQqIG9iaiwgTWV0aG9kIG1ldGhv
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUdXBsZTU8SW5BLCBJbkIsIElu
QywgSW5ELCBJbkU+JiBpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUdXBsZTQ8T3V0
QSwgT3V0QiwgT3V0QywgT3V0RD4qIG91dCkgewogIChvYmotPiptZXRob2QpKGluLmEsIGluLmIs
IGluLmMsIGluLmQsIGluLmUsCiAgICAgICAgICAgICAgICAgJm91dC0+YSwgJm91dC0+YiwgJm91
dC0+YywgJm91dC0+ZCk7Cn0KCnRlbXBsYXRlPGNsYXNzIE9ialQsIGNsYXNzIE1ldGhvZCwKICAg
ICAgICAgY2xhc3MgSW5BLCBjbGFzcyBJbkIsIGNsYXNzIEluQywgY2xhc3MgSW5ELCBjbGFzcyBJ
bkUsIGNsYXNzIEluRiwKICAgICAgICAgY2xhc3MgT3V0QSwgY2xhc3MgT3V0QiwgY2xhc3MgT3V0
QywgY2xhc3MgT3V0RD4KaW5saW5lIHZvaWQgRGlzcGF0Y2hUb01ldGhvZChPYmpUKiBvYmosIE1l
dGhvZCBtZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHVwbGU2PElu
QSwgSW5CLCBJbkMsIEluRCwgSW5FLCBJbkY+JiBpbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUdXBsZTQ8T3V0QSwgT3V0QiwgT3V0QywgT3V0RD4qIG91dCkgewogIChvYmotPiptZXRo
b2QpKGluLmEsIGluLmIsIGluLmMsIGluLmQsIGluLmUsIGluLmYsCiAgICAgICAgICAgICAgICAg
Jm91dC0+YSwgJm91dC0+YiwgJm91dC0+YywgJm91dC0+ZCk7Cn0KCi8vIERpc3BhdGNoZXJzIHdp
dGggNSBvdXQgcGFyYW1zLgoKdGVtcGxhdGU8Y2xhc3MgT2JqVCwgY2xhc3MgTWV0aG9kLAogICAg
ICAgICBjbGFzcyBPdXRBLCBjbGFzcyBPdXRCLCBjbGFzcyBPdXRDLCBjbGFzcyBPdXRELCBjbGFz
cyBPdXRFPgppbmxpbmUgdm9pZCBEaXNwYXRjaFRvTWV0aG9kKE9ialQqIG9iaiwgTWV0aG9kIG1l
dGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUdXBsZTAmIGluLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFR1cGxlNTxPdXRBLCBPdXRCLCBPdXRDLCBPdXRELCBP
dXRFPiogb3V0KSB7CiAgKG9iai0+Km1ldGhvZCkoJm91dC0+YSwgJm91dC0+YiwgJm91dC0+Yywg
Jm91dC0+ZCwgJm91dC0+ZSk7Cn0KCnRlbXBsYXRlPGNsYXNzIE9ialQsIGNsYXNzIE1ldGhvZCwg
Y2xhc3MgSW5BLAogICAgICAgICBjbGFzcyBPdXRBLCBjbGFzcyBPdXRCLCBjbGFzcyBPdXRDLCBj
bGFzcyBPdXRELCBjbGFzcyBPdXRFPgppbmxpbmUgdm9pZCBEaXNwYXRjaFRvTWV0aG9kKE9ialQq
IG9iaiwgTWV0aG9kIG1ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
bkEmIGluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR1cGxlNTxPdXRBLCBPdXRCLCBP
dXRDLCBPdXRELCBPdXRFPiogb3V0KSB7CiAgKG9iai0+Km1ldGhvZCkoaW4sICZvdXQtPmEsICZv
dXQtPmIsICZvdXQtPmMsICZvdXQtPmQsICZvdXQtPmUpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBPYmpU
LCBjbGFzcyBNZXRob2QsIGNsYXNzIEluQSwKICAgICAgICAgY2xhc3MgT3V0QSwgY2xhc3MgT3V0
QiwgY2xhc3MgT3V0QywgY2xhc3MgT3V0RCwgY2xhc3MgT3V0RT4KaW5saW5lIHZvaWQgRGlzcGF0
Y2hUb01ldGhvZChPYmpUKiBvYmosIE1ldGhvZCBtZXRob2QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVHVwbGUxPEluQT4mIGluLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFR1cGxlNTxPdXRBLCBPdXRCLCBPdXRDLCBPdXRELCBPdXRFPiogb3V0KSB7CiAgKG9iai0+
Km1ldGhvZCkoaW4uYSwgJm91dC0+YSwgJm91dC0+YiwgJm91dC0+YywgJm91dC0+ZCwgJm91dC0+
ZSk7Cn0KCnRlbXBsYXRlPGNsYXNzIE9ialQsIGNsYXNzIE1ldGhvZCwgY2xhc3MgSW5BLCBjbGFz
cyBJbkIsCiAgICAgICAgIGNsYXNzIE91dEEsIGNsYXNzIE91dEIsIGNsYXNzIE91dEMsIGNsYXNz
IE91dEQsIGNsYXNzIE91dEU+CmlubGluZSB2b2lkIERpc3BhdGNoVG9NZXRob2QoT2JqVCogb2Jq
LCBNZXRob2QgbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFR1cGxl
MjxJbkEsIEluQj4mIGluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR1cGxlNTxPdXRB
LCBPdXRCLCBPdXRDLCBPdXRELCBPdXRFPiogb3V0KSB7CiAgKG9iai0+Km1ldGhvZCkoaW4uYSwg
aW4uYiwgJm91dC0+YSwgJm91dC0+YiwgJm91dC0+YywgJm91dC0+ZCwgJm91dC0+ZSk7Cn0KCnRl
bXBsYXRlPGNsYXNzIE9ialQsIGNsYXNzIE1ldGhvZCwgY2xhc3MgSW5BLCBjbGFzcyBJbkIsIGNs
YXNzIEluQywKICAgICAgICAgY2xhc3MgT3V0QSwgY2xhc3MgT3V0QiwgY2xhc3MgT3V0QywgY2xh
c3MgT3V0RCwgY2xhc3MgT3V0RT4KaW5saW5lIHZvaWQgRGlzcGF0Y2hUb01ldGhvZChPYmpUKiBv
YmosIE1ldGhvZCBtZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHVw
bGUzPEluQSwgSW5CLCBJbkM+JiBpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUdXBs
ZTU8T3V0QSwgT3V0QiwgT3V0QywgT3V0RCwgT3V0RT4qIG91dCkgewogIChvYmotPiptZXRob2Qp
KGluLmEsIGluLmIsIGluLmMsICZvdXQtPmEsICZvdXQtPmIsICZvdXQtPmMsICZvdXQtPmQsICZv
dXQtPmUpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBPYmpULCBjbGFzcyBNZXRob2QsIGNsYXNzIEluQSwg
Y2xhc3MgSW5CLCBjbGFzcyBJbkMsIGNsYXNzIEluRCwKICAgICAgICAgY2xhc3MgT3V0QSwgY2xh
c3MgT3V0QiwgY2xhc3MgT3V0QywgY2xhc3MgT3V0RCwgY2xhc3MgT3V0RT4KaW5saW5lIHZvaWQg
RGlzcGF0Y2hUb01ldGhvZChPYmpUKiBvYmosIE1ldGhvZCBtZXRob2QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVHVwbGU0PEluQSwgSW5CLCBJbkMsIEluRD4mIGluLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFR1cGxlNTxPdXRBLCBPdXRCLCBPdXRDLCBPdXRELCBP
dXRFPiogb3V0KSB7CiAgKG9iai0+Km1ldGhvZCkoaW4uYSwgaW4uYiwgaW4uYywgaW4uZCwgJm91
dC0+YSwgJm91dC0+YiwgJm91dC0+YywgJm91dC0+ZCwKICAgICAgICAgICAgICAgICAmb3V0LT5l
KTsKfQoKdGVtcGxhdGU8Y2xhc3MgT2JqVCwgY2xhc3MgTWV0aG9kLAogICAgICAgICBjbGFzcyBJ
bkEsIGNsYXNzIEluQiwgY2xhc3MgSW5DLCBjbGFzcyBJbkQsIGNsYXNzIEluRSwKICAgICAgICAg
Y2xhc3MgT3V0QSwgY2xhc3MgT3V0QiwgY2xhc3MgT3V0QywgY2xhc3MgT3V0RCwgY2xhc3MgT3V0
RT4KaW5saW5lIHZvaWQgRGlzcGF0Y2hUb01ldGhvZChPYmpUKiBvYmosIE1ldGhvZCBtZXRob2Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHVwbGU1PEluQSwgSW5CLCBJbkMs
IEluRCwgSW5FPiYgaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHVwbGU1PE91dEEs
IE91dEIsIE91dEMsIE91dEQsIE91dEU+KiBvdXQpIHsKICAob2JqLT4qbWV0aG9kKShpbi5hLCBp
bi5iLCBpbi5jLCBpbi5kLCBpbi5lLAogICAgICAgICAgICAgICAgICZvdXQtPmEsICZvdXQtPmIs
ICZvdXQtPmMsICZvdXQtPmQsICZvdXQtPmUpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBPYmpULCBjbGFz
cyBNZXRob2QsCiAgICAgICAgIGNsYXNzIEluQSwgY2xhc3MgSW5CLCBjbGFzcyBJbkMsIGNsYXNz
IEluRCwgY2xhc3MgSW5FLCBjbGFzcyBJbkYsCiAgICAgICAgIGNsYXNzIE91dEEsIGNsYXNzIE91
dEIsIGNsYXNzIE91dEMsIGNsYXNzIE91dEQsIGNsYXNzIE91dEU+CmlubGluZSB2b2lkIERpc3Bh
dGNoVG9NZXRob2QoT2JqVCogb2JqLCBNZXRob2QgbWV0aG9kLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFR1cGxlNjxJbkEsIEluQiwgSW5DLCBJbkQsIEluRSwgSW5GPiYgaW4s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHVwbGU1PE91dEEsIE91dEIsIE91dEMsIE91
dEQsIE91dEU+KiBvdXQpIHsKICAob2JqLT4qbWV0aG9kKShpbi5hLCBpbi5iLCBpbi5jLCBpbi5k
LCBpbi5lLCBpbi5mLAogICAgICAgICAgICAgICAgICZvdXQtPmEsICZvdXQtPmIsICZvdXQtPmMs
ICZvdXQtPmQsICZvdXQtPmUpOwp9CgojZW5kaWYgIC8vIEJBU0VfVFVQTEVfSF9fCgojaWZuZGVm
IEJVSUxEX0JVSUxEX0NPTkZJR19IXwojZGVmaW5lIEJVSUxEX0JVSUxEX0NPTkZJR19IXwoKLy8g
QSBzZXQgb2YgbWFjcm9zIHRvIHVzZSBmb3IgcGxhdGZvcm0gZGV0ZWN0aW9uLgojaWYgZGVmaW5l
ZChfX0FQUExFX18pCiNkZWZpbmUgT1NfTUFDT1NYIDEKI2VsaWYgZGVmaW5lZChfX2xpbnV4X18p
CiNkZWZpbmUgT1NfTElOVVggMQovLyBVc2UgVE9PTEtJVF9HVEsgb24gbGludXggaWYgVE9PTEtJ
VF9WSUVXUyBpc24ndCBkZWZpbmVkLgojaWYgIWRlZmluZWQoVE9PTEtJVF9WSUVXUykKI2RlZmlu
ZSBUT09MS0lUX0dUSwojZW5kaWYKI2VsaWYgZGVmaW5lZChfV0lOMzIpCiNlbGlmIGRlZmluZWQo
X19GcmVlQlNEX18pCiNkZWZpbmUgT1NfRlJFRUJTRCAxCiNkZWZpbmUgVE9PTEtJVF9HVEsKI2Vs
c2UKI2Vycm9yIFBsZWFzZSBhZGQgc3VwcG9ydCBmb3IgeW91ciBwbGF0Zm9ybSBpbiBidWlsZC9i
dWlsZF9jb25maWcuaAojZW5kaWYKCi8vIEZvciBhY2Nlc3MgdG8gc3RhbmRhcmQgUE9TSVhpc2gg
ZmVhdHVyZXMsIHVzZSBPU19QT1NJWCBpbnN0ZWFkIG9mIGEKLy8gbW9yZSBzcGVjaWZpYyBtYWNy
by4KI2lmIGRlZmluZWQoT1NfTUFDT1NYKSB8fCBkZWZpbmVkKE9TX0xJTlVYKSB8fCBkZWZpbmVk
KE9TX0ZSRUVCU0QpCiNkZWZpbmUgT1NfUE9TSVggMQojZW5kaWYKCi8vIFVzZSBiYXNlOjpEYXRh
UGFjayBmb3IgbmFtZS92YWx1ZSBwYWlycy4KI2lmIGRlZmluZWQoT1NfTUFDT1NYKSB8fCBkZWZp
bmVkKE9TX0xJTlVYKSB8fCBkZWZpbmVkKE9TX0ZSRUVCU0QpCiNkZWZpbmUgVVNFX0JBU0VfREFU
QV9QQUNLIDEKI2VuZGlmCgovLyBVc2UgTlNTIGZvciBjcnlwdG8uCiNpZiBkZWZpbmVkKE9TX0xJ
TlVYKSB8fCBkZWZpbmVkKE9TX0ZSRUVCU0QpCiNkZWZpbmUgVVNFX05TUyAxCiNlbmRpZgoKLy8g
VXNlIFgxMSAoYW5kIGhlbmNlIEdUSy9HREspCiNpZiBkZWZpbmVkKE9TX0xJTlVYKSB8fCBkZWZp
bmVkKE9TX0ZSRUVCU0QpCiNkZWZpbmUgVVNFX1gxMSAxCiNlbmRpZgoKLy8gQ29tcGlsZXIgZGV0
ZWN0aW9uLgojaWYgZGVmaW5lZChfX0dOVUNfXykKI2RlZmluZSBDT01QSUxFUl9HQ0MgMQojZWxp
ZiBkZWZpbmVkKF9NU0NfVkVSKQojZGVmaW5lIENPTVBJTEVSX01TVkMgMQojZWxzZQojZXJyb3Ig
UGxlYXNlIGFkZCBzdXBwb3J0IGZvciB5b3VyIGNvbXBpbGVyIGluIGJ1aWxkL2J1aWxkX2NvbmZp
Zy5oCiNlbmRpZgoKLy8gUHJvY2Vzc29yIGFyY2hpdGVjdHVyZSBkZXRlY3Rpb24uICBGb3IgbW9y
ZSBpbmZvIG9uIHdoYXQncyBkZWZpbmVkLCBzZWU6Ci8vICAgaHR0cDovL21zZG4ubWljcm9zb2Z0
LmNvbS9lbi11cy9saWJyYXJ5L2IwMDg0a2F5LmFzcHgKLy8gICBodHRwOi8vd3d3LmFnbmVyLm9y
Zy9vcHRpbWl6ZS9jYWxsaW5nX2NvbnZlbnRpb25zLnBkZgovLyAgIG9yIHdpdGggZ2NjLCBydW46
ICJlY2hvIHwgZ2NjIC1FIC1kTSAtIgojaWYgZGVmaW5lZChfTV9YNjQpIHx8IGRlZmluZWQoX194
ODZfNjRfXykKI2RlZmluZSBBUkNIX0NQVV9YODZfRkFNSUxZIDEKI2RlZmluZSBBUkNIX0NQVV9Y
ODZfNjQgMQojZGVmaW5lIEFSQ0hfQ1BVXzY0X0JJVFMgMQojZWxpZiBkZWZpbmVkKF9NX0lYODYp
IHx8IGRlZmluZWQoX19pMzg2X18pCiNkZWZpbmUgQVJDSF9DUFVfWDg2X0ZBTUlMWSAxCiNkZWZp
bmUgQVJDSF9DUFVfWDg2IDEKI2RlZmluZSBBUkNIX0NQVV8zMl9CSVRTIDEKI2VsaWYgZGVmaW5l
ZChfX0FSTUVMX18pCiNkZWZpbmUgQVJDSF9DUFVfQVJNX0ZBTUlMWSAxCiNkZWZpbmUgQVJDSF9D
UFVfQVJNRUwgMQojZGVmaW5lIEFSQ0hfQ1BVXzMyX0JJVFMgMQojZGVmaW5lIFdDSEFSX1RfSVNf
VU5TSUdORUQgMQojZWxzZQojZXJyb3IgUGxlYXNlIGFkZCBzdXBwb3J0IGZvciB5b3VyIGFyY2hp
dGVjdHVyZSBpbiBidWlsZC9idWlsZF9jb25maWcuaAojZW5kaWYKCi8vIFR5cGUgZGV0ZWN0aW9u
IGZvciB3Y2hhcl90LgojaWYgZGVmaW5lZChPU19QT1NJWCkgJiYgZGVmaW5lZChDT01QSUxFUl9H
Q0MpICYmIFwKICAgIGRlZmluZWQoX19XQ0hBUl9NQVhfXykgJiYgXAogICAgKF9fV0NIQVJfTUFY
X18gPT0gMHg3ZmZmZmZmZiB8fCBfX1dDSEFSX01BWF9fID09IDB4ZmZmZmZmZmYpCiNkZWZpbmUg
V0NIQVJfVF9JU19VVEYzMgojZWxpZiBkZWZpbmVkKE9TX1BPU0lYKSAmJiBkZWZpbmVkKENPTVBJ
TEVSX0dDQykgJiYgXAogICAgZGVmaW5lZChfX1dDSEFSX01BWF9fKSAmJiBcCiAgICAoX19XQ0hB
Ul9NQVhfXyA9PSAweDdmZmYgfHwgX19XQ0hBUl9NQVhfXyA9PSAweGZmZmYpCi8vIE9uIFBvc2l4
LCB3ZSdsbCBkZXRlY3Qgc2hvcnQgd2NoYXJfdCwgYnV0IHByb2plY3RzIGFyZW4ndCBndWFyYW50
ZWVkIHRvCi8vIGNvbXBpbGUgaW4gdGhpcyBtb2RlIChpbiBwYXJ0aWN1bGFyLCBDaHJvbWUgZG9l
c24ndCkuIFRoaXMgaXMgaW50ZW5kZWQgZm9yCi8vIG90aGVyIHByb2plY3RzIHVzaW5nIGJhc2Ug
d2hvIG1hbmFnZSB0aGVpciBvd24gZGVwZW5kZW5jaWVzIGFuZCBtYWtlIHN1cmUKLy8gc2hvcnQg
d2NoYXIgd29ya3MgZm9yIHRoZW0uCiNkZWZpbmUgV0NIQVJfVF9JU19VVEYxNgojZWxzZQojZXJy
b3IgUGxlYXNlIGFkZCBzdXBwb3J0IGZvciB5b3VyIGNvbXBpbGVyIGluIGJ1aWxkL2J1aWxkX2Nv
bmZpZy5oCiNlbmRpZgoKI2VuZGlmICAvLyBCVUlMRF9CVUlMRF9DT05GSUdfSF8KCiNpZm5kZWYg
QkFTRV9QT1JUX0hfCiNkZWZpbmUgQkFTRV9QT1JUX0hfCgoKI2lmZGVmIENPTVBJTEVSX01TVkMK
I2RlZmluZSBHR19MT05HTE9ORyh4KSB4IyNJNjQKI2RlZmluZSBHR19VTE9OR0xPTkcoeCkgeCMj
VUk2NAojZWxzZQojZGVmaW5lIEdHX0xPTkdMT05HKHgpIHgjI0xMCiNkZWZpbmUgR0dfVUxPTkdM
T05HKHgpIHgjI1VMTAojZW5kaWYKCi8vIFBlciBDOTkgNy44LjE0LCBkZWZpbmUgX19TVERDX0NP
TlNUQU5UX01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIDxzdGRpbnQuaD4KLy8gdG8gZ2V0IHRoZSBJ
TlRuX0MgYW5kIFVJTlRuX0MgbWFjcm9zIGZvciBpbnRlZ2VyIGNvbnN0YW50cy4gIEl0J3MgZGlm
ZmljdWx0Ci8vIHRvIGd1YXJhbnRlZSBhbnkgc3BlY2lmaWMgb3JkZXJpbmcgb2YgaGVhZGVycywg
c28gaXQncyBkaWZmaWN1bHQgdG8KLy8gZ3VhcmFudGVlIHRoYXQgdGhlIElOVG5fQyBtYWNyb3Mg
Y2FuIGJlIGRlZmluZWQgYnkgaW5jbHVkaW5nIDxzdGRpbnQuaD4gYXQKLy8gYW55IHNwZWNpZmlj
IHBvaW50LiAgUHJvdmlkZSBHR19JTlRuX0MgbWFjcm9zIGluc3RlYWQuCgojZGVmaW5lIEdHX0lO
VDhfQyh4KSAgICAoeCkKI2RlZmluZSBHR19JTlQxNl9DKHgpICAgKHgpCiNkZWZpbmUgR0dfSU5U
MzJfQyh4KSAgICh4KQojZGVmaW5lIEdHX0lOVDY0X0MoeCkgICBHR19MT05HTE9ORyh4KQoKI2Rl
ZmluZSBHR19VSU5UOF9DKHgpICAgKHggIyMgVSkKI2RlZmluZSBHR19VSU5UMTZfQyh4KSAgKHgg
IyMgVSkKI2RlZmluZSBHR19VSU5UMzJfQyh4KSAgKHggIyMgVSkKI2RlZmluZSBHR19VSU5UNjRf
Qyh4KSAgR0dfVUxPTkdMT05HKHgpCgovLyBJdCdzIHBvc3NpYmxlIGZvciBmdW5jdGlvbnMgdGhh
dCB1c2UgYSB2YV9saXN0LCBzdWNoIGFzIFN0cmluZ1ByaW50ZiwgdG8KLy8gaW52YWxpZGF0ZSB0
aGUgZGF0YSBpbiBpdCB1cG9uIHVzZS4gIFRoZSBmaXggaXMgdG8gbWFrZSBhIGNvcHkgb2YgdGhl
Ci8vIHN0cnVjdHVyZSBiZWZvcmUgdXNpbmcgaXQgYW5kIHVzZSB0aGF0IGNvcHkgaW5zdGVhZC4g
IHZhX2NvcHkgaXMgcHJvdmlkZWQKLy8gZm9yIHRoaXMgcHVycG9zZS4gIE1TVkMgZG9lcyBub3Qg
cHJvdmlkZSB2YV9jb3B5LCBzbyBkZWZpbmUgYW4KLy8gaW1wbGVtZW50YXRpb24gaGVyZS4gIEl0
IGlzIG5vdCBndWFyYW50ZWVkIHRoYXQgYXNzaWdubWVudCBpcyBhIGNvcHksIHNvIHRoZQovLyBT
dHJpbmdVdGlsLlZhcmlhYmxlQXJnc0Z1bmMgdW5pdCB0ZXN0IHRlc3RzIHRoaXMgY2FwYWJpbGl0
eS4KI2lmIGRlZmluZWQoQ09NUElMRVJfR0NDKQojZGVmaW5lIEdHX1ZBX0NPUFkoYSwgYikgKHZh
X2NvcHkoYSwgYikpCiNlbGlmIGRlZmluZWQoQ09NUElMRVJfTVNWQykKI2RlZmluZSBHR19WQV9D
T1BZKGEsIGIpIChhID0gYikKI2VuZGlmCgovLyBEZWZpbmUgYW4gT1MtbmV1dHJhbCB3cmFwcGVy
IGZvciBzaGFyZWQgbGlicmFyeSBlbnRyeSBwb2ludHMKI2RlZmluZSBBUElfQ0FMTAoKI2VuZGlm
ICAvLyBCQVNFX1BPUlRfSF8KCiNpZm5kZWYgQkFTRV9CQVNJQ1RZUEVTX0hfCiNkZWZpbmUgQkFT
RV9CQVNJQ1RZUEVTX0hfCgp0eXBlZGVmIHNpZ25lZCBjaGFyICAgICAgICAgc2NoYXI7CnR5cGVk
ZWYgc2lnbmVkIGNoYXIgICAgICAgICBpbnQ4Owp0eXBlZGVmIHNob3J0ICAgICAgICAgICAgICAg
aW50MTY7Ci8vIFRPRE8obWJlbHNoZSkgUmVtb3ZlIHRoZXNlIHR5cGUgZ3VhcmRzLiAgVGhlc2Ug
YXJlCi8vICAgICAgICAgICAgICAgdGVtcG9yYXJ5IHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG5w
YXBpLmguCiNpZm5kZWYgX0lOVDMyCiNkZWZpbmUgX0lOVDMyCnR5cGVkZWYgaW50ICAgICAgICAg
ICAgICAgICBpbnQzMjsKI2VuZGlmCgovLyBUaGUgTlNQUiBzeXN0ZW0gaGVhZGVycyBkZWZpbmUg
NjQtYml0IGFzIHxsb25nfCB3aGVuIHBvc3NpYmxlLiAgSW4gb3JkZXIgdG8KLy8gbm90IGhhdmUg
dHlwZWRlZiBtaXNtYXRjaGVzLCB3ZSBkbyB0aGUgc2FtZSBvbiBMUDY0LgojaWYgX19MUDY0X18K
dHlwZWRlZiBsb25nICAgICAgICAgICAgICAgIGludDY0OwojZWxzZQp0eXBlZGVmIGxvbmcgbG9u
ZyAgICAgICAgICAgaW50NjQ7CiNlbmRpZgoKLy8gTk9URTogdW5zaWduZWQgdHlwZXMgYXJlIERB
TkdFUk9VUyBpbiBsb29wcyBhbmQgb3RoZXIgYXJpdGhtZXRpY2FsCi8vIHBsYWNlcy4gIFVzZSB0
aGUgc2lnbmVkIHR5cGVzIHVubGVzcyB5b3VyIHZhcmlhYmxlIHJlcHJlc2VudHMgYSBiaXQKLy8g
cGF0dGVybiAoZWcgYSBoYXNoIHZhbHVlKSBvciB5b3UgcmVhbGx5IG5lZWQgdGhlIGV4dHJhIGJp
dC4gIERvIE5PVAovLyB1c2UgJ3Vuc2lnbmVkJyB0byBleHByZXNzICJ0aGlzIHZhbHVlIHNob3Vs
ZCBhbHdheXMgYmUgcG9zaXRpdmUiOwovLyB1c2UgYXNzZXJ0aW9ucyBmb3IgdGhpcy4KCnR5cGVk
ZWYgdW5zaWduZWQgY2hhciAgICAgIHVpbnQ4Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICB1
aW50MTY7Ci8vIFRPRE8obWJlbHNoZSkgUmVtb3ZlIHRoZXNlIHR5cGUgZ3VhcmRzLiAgVGhlc2Ug
YXJlCi8vICAgICAgICAgICAgICAgdGVtcG9yYXJ5IHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG5w
YXBpLmguCiNpZm5kZWYgX1VJTlQzMgojZGVmaW5lIF9VSU5UMzIKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgICAgICAgdWludDMyOwojZW5kaWYKCi8vIFNlZSB0aGUgY29tbWVudCBhYm92ZSBhYm91dCBO
U1BSIGFuZCA2NC1iaXQuCiNpZiBfX0xQNjRfXwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludDY0
OwojZWxzZQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1aW50NjQ7CiNlbmRpZgoKLy8gQSB0
eXBlIHRvIHJlcHJlc2VudCBhIFVuaWNvZGUgY29kZS1wb2ludCB2YWx1ZS4gQXMgb2YgVW5pY29k
ZSA0LjAsCi8vIHN1Y2ggdmFsdWVzIHJlcXVpcmUgdXAgdG8gMjEgYml0cy4KLy8gKEZvciB0eXBl
LWNoZWNraW5nIG9uIHBvaW50ZXJzLCBtYWtlIHRoaXMgZXhwbGljaXRseSBzaWduZWQsCi8vIGFu
ZCBpdCBzaG91bGQgYWx3YXlzIGJlIHRoZSBzaWduZWQgdmVyc2lvbiBvZiB3aGF0ZXZlciBpbnQz
MiBpcy4pCnR5cGVkZWYgc2lnbmVkIGludCAgICAgICAgIGNoYXIzMjsKCmNvbnN0IHVpbnQ4ICBr
dWludDhtYXggID0gKCggdWludDgpIDB4RkYpOwpjb25zdCB1aW50MTYga3VpbnQxNm1heCA9ICgo
dWludDE2KSAweEZGRkYpOwpjb25zdCB1aW50MzIga3VpbnQzMm1heCA9ICgodWludDMyKSAweEZG
RkZGRkZGKTsKY29uc3QgdWludDY0IGt1aW50NjRtYXggPSAoKHVpbnQ2NCkgR0dfTE9OR0xPTkco
MHhGRkZGRkZGRkZGRkZGRkZGKSk7CmNvbnN0ICBpbnQ4ICBraW50OG1pbiAgID0gKCggIGludDgp
IDB4ODApOwpjb25zdCAgaW50OCAga2ludDhtYXggICA9ICgoICBpbnQ4KSAweDdGKTsKY29uc3Qg
IGludDE2IGtpbnQxNm1pbiAgPSAoKCBpbnQxNikgMHg4MDAwKTsKY29uc3QgIGludDE2IGtpbnQx
Nm1heCAgPSAoKCBpbnQxNikgMHg3RkZGKTsKY29uc3QgIGludDMyIGtpbnQzMm1pbiAgPSAoKCBp
bnQzMikgMHg4MDAwMDAwMCk7CmNvbnN0ICBpbnQzMiBraW50MzJtYXggID0gKCggaW50MzIpIDB4
N0ZGRkZGRkYpOwpjb25zdCAgaW50NjQga2ludDY0bWluICA9ICgoIGludDY0KSBHR19MT05HTE9O
RygweDgwMDAwMDAwMDAwMDAwMDApKTsKY29uc3QgIGludDY0IGtpbnQ2NG1heCAgPSAoKCBpbnQ2
NCkgR0dfTE9OR0xPTkcoMHg3RkZGRkZGRkZGRkZGRkZGKSk7CgovLyBBIG1hY3JvIHRvIGRpc2Fs
bG93IHRoZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zCi8vIFRoaXMg
c2hvdWxkIGJlIHVzZWQgaW4gdGhlIHByaXZhdGU6IGRlY2xhcmF0aW9ucyBmb3IgYSBjbGFzcwoj
ZGVmaW5lIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUeXBlTmFtZSkgXAogIFR5cGVOYW1lKGNv
bnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgXAogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5
cGVOYW1lJikKCi8vIEFuIG9sZGVyLCBkZXByZWNhdGVkLCBwb2xpdGljYWxseSBpbmNvcnJlY3Qg
bmFtZSBmb3IgdGhlIGFib3ZlLgojZGVmaW5lIERJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFR5
cGVOYW1lKSBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpCgovLyBBIG1hY3JvIHRv
IGRpc2FsbG93IGFsbCB0aGUgaW1wbGljaXQgY29uc3RydWN0b3JzLCBuYW1lbHkgdGhlCi8vIGRl
ZmF1bHQgY29uc3RydWN0b3IsIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPSBmdW5jdGlv
bnMuCi8vCi8vIFRoaXMgc2hvdWxkIGJlIHVzZWQgaW4gdGhlIHByaXZhdGU6IGRlY2xhcmF0aW9u
cyBmb3IgYSBjbGFzcwovLyB0aGF0IHdhbnRzIHRvIHByZXZlbnQgYW55b25lIGZyb20gaW5zdGFu
dGlhdGluZyBpdC4gVGhpcyBpcwovLyBlc3BlY2lhbGx5IHVzZWZ1bCBmb3IgY2xhc3NlcyBjb250
YWluaW5nIG9ubHkgc3RhdGljIG1ldGhvZHMuCiNkZWZpbmUgRElTQUxMT1dfSU1QTElDSVRfQ09O
U1RSVUNUT1JTKFR5cGVOYW1lKSBcCiAgVHlwZU5hbWUoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVOYW1lKQoKLy8g
VGhlIGFycmF5c2l6ZShhcnIpIG1hY3JvIHJldHVybnMgdGhlICMgb2YgZWxlbWVudHMgaW4gYW4g
YXJyYXkgYXJyLgovLyBUaGUgZXhwcmVzc2lvbiBpcyBhIGNvbXBpbGUtdGltZSBjb25zdGFudCwg
YW5kIHRoZXJlZm9yZSBjYW4gYmUKLy8gdXNlZCBpbiBkZWZpbmluZyBuZXcgYXJyYXlzLCBmb3Ig
ZXhhbXBsZS4gIElmIHlvdSB1c2UgYXJyYXlzaXplIG9uCi8vIGEgcG9pbnRlciBieSBtaXN0YWtl
LCB5b3Ugd2lsbCBnZXQgYSBjb21waWxlLXRpbWUgZXJyb3IuCi8vCi8vIE9uZSBjYXZlYXQgaXMg
dGhhdCBhcnJheXNpemUoKSBkb2Vzbid0IGFjY2VwdCBhbnkgYXJyYXkgb2YgYW4KLy8gYW5vbnlt
b3VzIHR5cGUgb3IgYSB0eXBlIGRlZmluZWQgaW5zaWRlIGEgZnVuY3Rpb24uICBJbiB0aGVzZSBy
YXJlCi8vIGNhc2VzLCB5b3UgaGF2ZSB0byB1c2UgdGhlIHVuc2FmZSBBUlJBWVNJWkVfVU5TQUZF
KCkgbWFjcm8gYmVsb3cuICBUaGlzIGlzCi8vIGR1ZSB0byBhIGxpbWl0YXRpb24gaW4gQysrJ3Mg
dGVtcGxhdGUgc3lzdGVtLiAgVGhlIGxpbWl0YXRpb24gbWlnaHQKLy8gZXZlbnR1YWxseSBiZSBy
ZW1vdmVkLCBidXQgaXQgaGFzbid0IGhhcHBlbmVkIHlldC4KCi8vIFRoaXMgdGVtcGxhdGUgZnVu
Y3Rpb24gZGVjbGFyYXRpb24gaXMgdXNlZCBpbiBkZWZpbmluZyBhcnJheXNpemUuCi8vIE5vdGUg
dGhhdCB0aGUgZnVuY3Rpb24gZG9lc24ndCBuZWVkIGFuIGltcGxlbWVudGF0aW9uLCBhcyB3ZSBv
bmx5Ci8vIHVzZSBpdHMgdHlwZS4KdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgpjaGFy
ICgmQXJyYXlTaXplSGVscGVyKFQgKCZhcnJheSlbTl0pKVtOXTsKCi8vIFRoYXQgZ2NjIHdhbnRz
IGJvdGggb2YgdGhlc2UgcHJvdG90eXBlcyBzZWVtcyBteXN0ZXJpb3VzLiBWQywgZm9yCi8vIGl0
cyBwYXJ0LCBjYW4ndCBkZWNpZGUgd2hpY2ggdG8gdXNlIChhbm90aGVyIG15c3RlcnkpLiBNYXRj
aGluZyBvZgovLyB0ZW1wbGF0ZSBvdmVybG9hZHM6IHRoZSBmaW5hbCBmcm9udGllci4KdGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgpjaGFyICgmQXJyYXlTaXplSGVscGVyKGNvbnN0IFQg
KCZhcnJheSlbTl0pKVtOXTsKCiNkZWZpbmUgYXJyYXlzaXplKGFycmF5KSAoc2l6ZW9mKEFycmF5
U2l6ZUhlbHBlcihhcnJheSkpKQoKLy8gQVJSQVlTSVpFX1VOU0FGRSBwZXJmb3JtcyBlc3NlbnRp
YWxseSB0aGUgc2FtZSBjYWxjdWxhdGlvbiBhcyBhcnJheXNpemUsCi8vIGJ1dCBjYW4gYmUgdXNl
ZCBvbiBhbm9ueW1vdXMgdHlwZXMgb3IgdHlwZXMgZGVmaW5lZCBpbnNpZGUKLy8gZnVuY3Rpb25z
LiAgSXQncyBsZXNzIHNhZmUgdGhhbiBhcnJheXNpemUgYXMgaXQgYWNjZXB0cyBzb21lCi8vIChh
bHRob3VnaCBub3QgYWxsKSBwb2ludGVycy4gIFRoZXJlZm9yZSwgeW91IHNob3VsZCB1c2UgYXJy
YXlzaXplCi8vIHdoZW5ldmVyIHBvc3NpYmxlLgovLwovLyBUaGUgZXhwcmVzc2lvbiBBUlJBWVNJ
WkVfVU5TQUZFKGEpIGlzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50IG9mIHR5cGUKLy8gc2l6ZV90
LgovLwovLyBBUlJBWVNJWkVfVU5TQUZFIGNhdGNoZXMgYSBmZXcgdHlwZSBlcnJvcnMuICBJZiB5
b3Ugc2VlIGEgY29tcGlsZXIgZXJyb3IKLy8KLy8gICAid2FybmluZzogZGl2aXNpb24gYnkgemVy
byBpbiAuLi4iCi8vCi8vIHdoZW4gdXNpbmcgQVJSQVlTSVpFX1VOU0FGRSwgeW91IGFyZSAod3Jv
bmdmdWxseSkgZ2l2aW5nIGl0IGEgcG9pbnRlci4KLy8gWW91IHNob3VsZCBvbmx5IHVzZSBBUlJB
WVNJWkVfVU5TQUZFIG9uIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFycmF5cy4KLy8KLy8gVGhlIGZv
bGxvd2luZyBjb21tZW50cyBhcmUgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIGFuZCBj
YW4KLy8gYmUgaWdub3JlZCBieSB0aGUgdXNlcnMuCi8vCi8vIEFSUkFZU0laRV9VTlNBRkUoYXJy
KSB3b3JrcyBieSBpbnNwZWN0aW5nIHNpemVvZihhcnIpICh0aGUgIyBvZiBieXRlcyBpbgovLyB0
aGUgYXJyYXkpIGFuZCBzaXplb2YoKihhcnIpKSAodGhlICMgb2YgYnl0ZXMgaW4gb25lIGFycmF5
Ci8vIGVsZW1lbnQpLiAgSWYgdGhlIGZvcm1lciBpcyBkaXZpc2libGUgYnkgdGhlIGxhdHRlciwg
cGVyaGFwcyBhcnIgaXMKLy8gaW5kZWVkIGFuIGFycmF5LCBpbiB3aGljaCBjYXNlIHRoZSBkaXZp
c2lvbiByZXN1bHQgaXMgdGhlICMgb2YKLy8gZWxlbWVudHMgaW4gdGhlIGFycmF5LiAgT3RoZXJ3
aXNlLCBhcnIgY2Fubm90IHBvc3NpYmx5IGJlIGFuIGFycmF5LAovLyBhbmQgd2UgZ2VuZXJhdGUg
YSBjb21waWxlciBlcnJvciB0byBwcmV2ZW50IHRoZSBjb2RlIGZyb20KLy8gY29tcGlsaW5nLgov
LwovLyBTaW5jZSB0aGUgc2l6ZSBvZiBib29sIGlzIGltcGxlbWVudGF0aW9uLWRlZmluZWQsIHdl
IG5lZWQgdG8gY2FzdAovLyAhKHNpemVvZihhKSAmIHNpemVvZigqKGEpKSkgdG8gc2l6ZV90IGlu
IG9yZGVyIHRvIGVuc3VyZSB0aGUgZmluYWwKLy8gcmVzdWx0IGhhcyB0eXBlIHNpemVfdC4KLy8K
Ly8gVGhpcyBtYWNybyBpcyBub3QgcGVyZmVjdCBhcyBpdCB3cm9uZ2Z1bGx5IGFjY2VwdHMgY2Vy
dGFpbgovLyBwb2ludGVycywgbmFtZWx5IHdoZXJlIHRoZSBwb2ludGVyIHNpemUgaXMgZGl2aXNp
YmxlIGJ5IHRoZSBwb2ludGVlCi8vIHNpemUuICBTaW5jZSBhbGwgb3VyIGNvZGUgaGFzIHRvIGdv
IHRocm91Z2ggYSAzMi1iaXQgY29tcGlsZXIsCi8vIHdoZXJlIGEgcG9pbnRlciBpcyA0IGJ5dGVz
LCB0aGlzIG1lYW5zIGFsbCBwb2ludGVycyB0byBhIHR5cGUgd2hvc2UKLy8gc2l6ZSBpcyAzIG9y
IGdyZWF0ZXIgdGhhbiA0IHdpbGwgYmUgKHJpZ2h0ZW91c2x5KSByZWplY3RlZC4KCiNkZWZpbmUg
QVJSQVlTSVpFX1VOU0FGRShhKSBcCiAgKChzaXplb2YoYSkgLyBzaXplb2YoKihhKSkpIC8gXAog
ICBzdGF0aWNfY2FzdDxzaXplX3Q+KCEoc2l6ZW9mKGEpICUgc2l6ZW9mKCooYSkpKSkpCgoKLy8g
VXNlIGltcGxpY2l0X2Nhc3QgYXMgYSBzYWZlIHZlcnNpb24gb2Ygc3RhdGljX2Nhc3Qgb3IgY29u
c3RfY2FzdAovLyBmb3IgdXBjYXN0aW5nIGluIHRoZSB0eXBlIGhpZXJhcmNoeSAoaS5lLiBjYXN0
aW5nIGEgcG9pbnRlciB0byBGb28KLy8gdG8gYSBwb2ludGVyIHRvIFN1cGVyY2xhc3NPZkZvbyBv
ciBjYXN0aW5nIGEgcG9pbnRlciB0byBGb28gdG8KLy8gYSBjb25zdCBwb2ludGVyIHRvIEZvbyku
Ci8vIFdoZW4geW91IHVzZSBpbXBsaWNpdF9jYXN0LCB0aGUgY29tcGlsZXIgY2hlY2tzIHRoYXQg
dGhlIGNhc3QgaXMgc2FmZS4KLy8gU3VjaCBleHBsaWNpdCBpbXBsaWNpdF9jYXN0cyBhcmUgbmVj
ZXNzYXJ5IGluIHN1cnByaXNpbmdseSBtYW55Ci8vIHNpdHVhdGlvbnMgd2hlcmUgQysrIGRlbWFu
ZHMgYW4gZXhhY3QgdHlwZSBtYXRjaCBpbnN0ZWFkIG9mIGFuCi8vIGFyZ3VtZW50IHR5cGUgY29u
dmVydGFibGUgdG8gYSB0YXJnZXQgdHlwZS4KLy8KLy8gVGhlIEZyb20gdHlwZSBjYW4gYmUgaW5m
ZXJyZWQsIHNvIHRoZSBwcmVmZXJyZWQgc3ludGF4IGZvciB1c2luZwovLyBpbXBsaWNpdF9jYXN0
IGlzIHRoZSBzYW1lIGFzIGZvciBzdGF0aWNfY2FzdCBldGMuOgovLwovLyAgIGltcGxpY2l0X2Nh
c3Q8VG9UeXBlPihleHByKQovLwovLyBpbXBsaWNpdF9jYXN0IHdvdWxkIGhhdmUgYmVlbiBwYXJ0
IG9mIHRoZSBDKysgc3RhbmRhcmQgbGlicmFyeSwKLy8gYnV0IHRoZSBwcm9wb3NhbCB3YXMgc3Vi
bWl0dGVkIHRvbyBsYXRlLiAgSXQgd2lsbCBwcm9iYWJseSBtYWtlCi8vIGl0cyB3YXkgaW50byB0
aGUgbGFuZ3VhZ2UgaW4gdGhlIGZ1dHVyZS4KdGVtcGxhdGU8dHlwZW5hbWUgVG8sIHR5cGVuYW1l
IEZyb20+CmlubGluZSBUbyBpbXBsaWNpdF9jYXN0KEZyb20gY29uc3QgJmYpIHsKICByZXR1cm4g
ZjsKfQoKLy8gVGhlIENPTVBJTEVfQVNTRVJUIG1hY3JvIGNhbiBiZSB1c2VkIHRvIHZlcmlmeSB0
aGF0IGEgY29tcGlsZSB0aW1lCi8vIGV4cHJlc3Npb24gaXMgdHJ1ZS4gRm9yIGV4YW1wbGUsIHlv
dSBjb3VsZCB1c2UgaXQgdG8gdmVyaWZ5IHRoZQovLyBzaXplIG9mIGEgc3RhdGljIGFycmF5Ogov
LwovLyAgIENPTVBJTEVfQVNTRVJUKEFSUkFZU0laRV9VTlNBRkUoY29udGVudF90eXBlX25hbWVz
KSA9PSBDT05URU5UX05VTV9UWVBFUywKLy8gICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGVf
bmFtZXNfaW5jb3JyZWN0X3NpemUpOwovLwovLyBvciB0byBtYWtlIHN1cmUgYSBzdHJ1Y3QgaXMg
c21hbGxlciB0aGFuIGEgY2VydGFpbiBzaXplOgovLwovLyAgIENPTVBJTEVfQVNTRVJUKHNpemVv
Zihmb28pIDwgMTI4LCBmb29fdG9vX2xhcmdlKTsKLy8KLy8gVGhlIHNlY29uZCBhcmd1bWVudCB0
byB0aGUgbWFjcm8gaXMgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlLiBJZgovLyB0aGUgZXhwcmVz
c2lvbiBpcyBmYWxzZSwgbW9zdCBjb21waWxlcnMgd2lsbCBpc3N1ZSBhIHdhcm5pbmcvZXJyb3IK
Ly8gY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUuCgp0ZW1wbGF0ZSA8Ym9vbD4K
c3RydWN0IENvbXBpbGVBc3NlcnQgewp9OwoKI3VuZGVmIENPTVBJTEVfQVNTRVJUCiNkZWZpbmUg
Q09NUElMRV9BU1NFUlQoZXhwciwgbXNnKSBcCiAgdHlwZWRlZiBDb21waWxlQXNzZXJ0PChib29s
KGV4cHIpKT4gbXNnW2Jvb2woZXhwcikgPyAxIDogLTFdCgovLyBJbXBsZW1lbnRhdGlvbiBkZXRh
aWxzIG9mIENPTVBJTEVfQVNTRVJUOgovLwovLyAtIENPTVBJTEVfQVNTRVJUIHdvcmtzIGJ5IGRl
ZmluaW5nIGFuIGFycmF5IHR5cGUgdGhhdCBoYXMgLTEKLy8gICBlbGVtZW50cyAoYW5kIHRodXMg
aXMgaW52YWxpZCkgd2hlbiB0aGUgZXhwcmVzc2lvbiBpcyBmYWxzZS4KLy8KLy8gLSBUaGUgc2lt
cGxlciBkZWZpbml0aW9uCi8vCi8vICAgICAjZGVmaW5lIENPTVBJTEVfQVNTRVJUKGV4cHIsIG1z
ZykgdHlwZWRlZiBjaGFyIG1zZ1soZXhwcikgPyAxIDogLTFdCi8vCi8vICAgZG9lcyBub3Qgd29y
aywgYXMgZ2NjIHN1cHBvcnRzIHZhcmlhYmxlLWxlbmd0aCBhcnJheXMgd2hvc2Ugc2l6ZXMKLy8g
ICBhcmUgZGV0ZXJtaW5lZCBhdCBydW4tdGltZSAodGhpcyBpcyBnY2MncyBleHRlbnNpb24gYW5k
IG5vdCBwYXJ0Ci8vICAgb2YgdGhlIEMrKyBzdGFuZGFyZCkuICBBcyBhIHJlc3VsdCwgZ2NjIGZh
aWxzIHRvIHJlamVjdCB0aGUKLy8gICBmb2xsb3dpbmcgY29kZSB3aXRoIHRoZSBzaW1wbGUgZGVm
aW5pdGlvbjoKLy8KLy8gICAgIGludCBmb287Ci8vICAgICBDT01QSUxFX0FTU0VSVChmb28sIG1z
Zyk7IC8vIG5vdCBzdXBwb3NlZCB0byBjb21waWxlIGFzIGZvbyBpcwovLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBub3QgYSBjb21waWxlLXRpbWUgY29uc3RhbnQuCi8vCi8vIC0g
QnkgdXNpbmcgdGhlIHR5cGUgQ29tcGlsZUFzc2VydDwoYm9vbChleHByKSk+LCB3ZSBlbnN1cmVz
IHRoYXQKLy8gICBleHByIGlzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50LiAgKFRlbXBsYXRlIGFy
Z3VtZW50cyBtdXN0IGJlCi8vICAgZGV0ZXJtaW5lZCBhdCBjb21waWxlLXRpbWUuKQovLwovLyAt
IFRoZSBvdXR0ZXIgcGFyZW50aGVzZXMgaW4gQ29tcGlsZUFzc2VydDwoYm9vbChleHByKSk+IGFy
ZSBuZWNlc3NhcnkKLy8gICB0byB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiBnY2MgMy40LjQgYW5kIDQu
MC4xLiAgSWYgd2UgaGFkIHdyaXR0ZW4KLy8KLy8gICAgIENvbXBpbGVBc3NlcnQ8Ym9vbChleHBy
KT4KLy8KLy8gICBpbnN0ZWFkLCB0aGVzZSBjb21waWxlcnMgd2lsbCByZWZ1c2UgdG8gY29tcGls
ZQovLwovLyAgICAgQ09NUElMRV9BU1NFUlQoNSA+IDAsIHNvbWVfbWVzc2FnZSk7Ci8vCi8vICAg
KFRoZXkgc2VlbSB0byB0aGluayB0aGUgIj4iIGluICI1ID4gMCIgbWFya3MgdGhlIGVuZCBvZiB0
aGUKLy8gICB0ZW1wbGF0ZSBhcmd1bWVudCBsaXN0LikKLy8KLy8gLSBUaGUgYXJyYXkgc2l6ZSBp
cyAoYm9vbChleHByKSA/IDEgOiAtMSksIGluc3RlYWQgb2Ygc2ltcGx5Ci8vCi8vICAgICAoKGV4
cHIpID8gMSA6IC0xKS4KLy8KLy8gICBUaGlzIGlzIHRvIGF2b2lkIHJ1bm5pbmcgaW50byBhIGJ1
ZyBpbiBNUyBWQyA3LjEsIHdoaWNoCi8vICAgY2F1c2VzICgoMC4wKSA/IDEgOiAtMSkgdG8gaW5j
b3JyZWN0bHkgZXZhbHVhdGUgdG8gMS4KCgovLyBNZXRhdGFnSWQgcmVmZXJzIHRvIG1ldGF0YWct
aWQgdGhhdCB3ZSBhc3NpZ24gdG8KLy8gZWFjaCBtZXRhdGFnIDxuYW1lLCB2YWx1ZT4gcGFpci4u
CnR5cGVkZWYgdWludDMyIE1ldGF0YWdJZDsKCi8vIEFyZ3VtZW50IHR5cGUgdXNlZCBpbiBpbnRl
cmZhY2VzIHRoYXQgY2FuIG9wdGlvbmFsbHkgdGFrZSBvd25lcnNoaXAKLy8gb2YgYSBwYXNzZWQg
aW4gYXJndW1lbnQuICBJZiBUQUtFX09XTkVSU0hJUCBpcyBwYXNzZWQsIHRoZSBjYWxsZWQKLy8g
b2JqZWN0IHRha2VzIG93bmVyc2hpcCBvZiB0aGUgYXJndW1lbnQuICBPdGhlcndpc2UgaXQgZG9l
cyBub3QuCmVudW0gT3duZXJzaGlwIHsKICBET19OT1RfVEFLRV9PV05FUlNISVAsCiAgVEFLRV9P
V05FUlNISVAKfTsKCi8vIGJpdF9jYXN0PERlc3QsU291cmNlPiBpcyBhIHRlbXBsYXRlIGZ1bmN0
aW9uIHRoYXQgaW1wbGVtZW50cyB0aGUKLy8gZXF1aXZhbGVudCBvZiAiKnJlaW50ZXJwcmV0X2Nh
c3Q8RGVzdCo+KCZzb3VyY2UpIi4gIFdlIG5lZWQgdGhpcyBpbgovLyB2ZXJ5IGxvdy1sZXZlbCBm
dW5jdGlvbnMgbGlrZSB0aGUgcHJvdG9idWYgbGlicmFyeSBhbmQgZmFzdCBtYXRoCi8vIHN1cHBv
cnQuCi8vCi8vICAgZmxvYXQgZiA9IDMuMTQxNTkyNjUzNTg5Nzk7Ci8vICAgaW50IGkgPSBiaXRf
Y2FzdDxpbnQzMj4oZik7Ci8vICAgLy8gaSA9IDB4NDA0OTBmZGIKLy8KLy8gVGhlIGNsYXNzaWNh
bCBhZGRyZXNzLWNhc3RpbmcgbWV0aG9kIGlzOgovLwovLyAgIC8vIFdST05HCi8vICAgZmxvYXQg
ZiA9IDMuMTQxNTkyNjUzNTg5Nzk7ICAgICAgICAgICAgLy8gV1JPTkcKLy8gICBpbnQgaSA9ICog
cmVpbnRlcnByZXRfY2FzdDxpbnQqPigmZik7ICAvLyBXUk9ORwovLwovLyBUaGUgYWRkcmVzcy1j
YXN0aW5nIG1ldGhvZCBhY3R1YWxseSBwcm9kdWNlcyB1bmRlZmluZWQgYmVoYXZpb3IKLy8gYWNj
b3JkaW5nIHRvIElTTyBDKysgc3BlY2lmaWNhdGlvbiBzZWN0aW9uIDMuMTAgLTE1IC0uICBSb3Vn
aGx5LCB0aGlzCi8vIHNlY3Rpb24gc2F5czogaWYgYW4gb2JqZWN0IGluIG1lbW9yeSBoYXMgb25l
IHR5cGUsIGFuZCBhIHByb2dyYW0KLy8gYWNjZXNzZXMgaXQgd2l0aCBhIGRpZmZlcmVudCB0eXBl
LCB0aGVuIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkCi8vIGJlaGF2aW9yIGZvciBtb3N0IHZhbHVl
cyBvZiAiZGlmZmVyZW50IHR5cGUiLgovLwovLyBUaGlzIGlzIHRydWUgZm9yIGFueSBjYXN0IHN5
bnRheCwgZWl0aGVyICooaW50KikmZiBvcgovLyAqcmVpbnRlcnByZXRfY2FzdDxpbnQqPigmZiku
ICBBbmQgaXQgaXMgcGFydGljdWxhcmx5IHRydWUgZm9yCi8vIGNvbnZlcnNpb25zIGJldHdlZWVu
IGludGVncmFsIGx2YWx1ZXMgYW5kIGZsb2F0aW5nLXBvaW50IGx2YWx1ZXMuCi8vCi8vIFRoZSBw
dXJwb3NlIG9mIDMuMTAgLTE1LSBpcyB0byBhbGxvdyBvcHRpbWl6aW5nIGNvbXBpbGVycyB0byBh
c3N1bWUKLy8gdGhhdCBleHByZXNzaW9ucyB3aXRoIGRpZmZlcmVudCB0eXBlcyByZWZlciB0byBk
aWZmZXJlbnQgbWVtb3J5LiAgZ2NjCi8vIDQuMC4xIGhhcyBhbiBvcHRpbWl6ZXIgdGhhdCB0YWtl
cyBhZHZhbnRhZ2Ugb2YgdGhpcy4gIFNvIGEKLy8gbm9uLWNvbmZvcm1pbmcgcHJvZ3JhbSBxdWll
dGx5IHByb2R1Y2VzIHdpbGRseSBpbmNvcnJlY3Qgb3V0cHV0LgovLwovLyBUaGUgcHJvYmxlbSBp
cyBub3QgdGhlIHVzZSBvZiByZWludGVycHJldF9jYXN0LiAgVGhlIHByb2JsZW0gaXMgdHlwZQov
LyBwdW5uaW5nOiBob2xkaW5nIGFuIG9iamVjdCBpbiBtZW1vcnkgb2Ygb25lIHR5cGUgYW5kIHJl
YWRpbmcgaXRzIGJpdHMKLy8gYmFjayB1c2luZyBhIGRpZmZlcmVudCB0eXBlLgovLwovLyBUaGUg
QysrIHN0YW5kYXJkIGlzIG1vcmUgc3VidGxlIGFuZCBjb21wbGV4IHRoYW4gdGhpcywgYnV0IHRo
YXQKLy8gaXMgdGhlIGJhc2ljIGlkZWEuCi8vCi8vIEFueXdheXMgLi4uCi8vCi8vIGJpdF9jYXN0
PD4gY2FsbHMgbWVtY3B5KCkgd2hpY2ggaXMgYmxlc3NlZCBieSB0aGUgc3RhbmRhcmQsCi8vIGVz
cGVjaWFsbHkgYnkgdGhlIGV4YW1wbGUgaW4gc2VjdGlvbiAzLjkgLiAgQWxzbywgb2YgY291cnNl
LAovLyBiaXRfY2FzdDw+IHdyYXBzIHVwIHRoZSBuYXN0eSBsb2dpYyBpbiBvbmUgcGxhY2UuCi8v
Ci8vIEZvcnR1bmF0ZWx5IG1lbWNweSgpIGlzIHZlcnkgZmFzdC4gIEluIG9wdGltaXplZCBtb2Rl
LCB3aXRoIGEKLy8gY29uc3RhbnQgc2l6ZSwgZ2NjIDIuOTUuMywgZ2NjIDQuMC4xLCBhbmQgbXN2
YyA3LjEgcHJvZHVjZSBpbmxpbmUKLy8gY29kZSB3aXRoIHRoZSBtaW5pbWFsIGFtb3VudCBvZiBk
YXRhIG1vdmVtZW50LiAgT24gYSAzMi1iaXQgc3lzdGVtLAovLyBtZW1jcHkoZCxzLDQpIGNvbXBp
bGVzIHRvIG9uZSBsb2FkIGFuZCBvbmUgc3RvcmUsIGFuZCBtZW1jcHkoZCxzLDgpCi8vIGNvbXBp
bGVzIHRvIHR3byBsb2FkcyBhbmQgdHdvIHN0b3Jlcy4KLy8KLy8gSSB0ZXN0ZWQgdGhpcyBjb2Rl
IHdpdGggZ2NjIDIuOTUuMywgZ2NjIDQuMC4xLCBpY2MgOC4xLCBhbmQgbXN2YyA3LjEuCi8vCi8v
IFdBUk5JTkc6IGlmIERlc3Qgb3IgU291cmNlIGlzIGEgbm9uLVBPRCB0eXBlLCB0aGUgcmVzdWx0
IG9mIHRoZSBtZW1jcHkKLy8gaXMgbGlrZWx5IHRvIHN1cnByaXNlIHlvdS4KCnRlbXBsYXRlIDxj
bGFzcyBEZXN0LCBjbGFzcyBTb3VyY2U+CmlubGluZSBEZXN0IGJpdF9jYXN0KGNvbnN0IFNvdXJj
ZSYgc291cmNlKSB7CiAgLy8gQ29tcGlsZSB0aW1lIGFzc2VydGlvbjogc2l6ZW9mKERlc3QpID09
IHNpemVvZihTb3VyY2UpCiAgLy8gQSBjb21waWxlIGVycm9yIGhlcmUgbWVhbnMgeW91ciBEZXN0
IGFuZCBTb3VyY2UgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMuCiAgdHlwZWRlZiBjaGFyIFZlcmlmeVNp
emVzQXJlRXF1YWwgW3NpemVvZihEZXN0KSA9PSBzaXplb2YoU291cmNlKSA/IDEgOiAtMV07Cgog
IERlc3QgZGVzdDsKICBtZW1jcHkoJmRlc3QsICZzb3VyY2UsIHNpemVvZihkZXN0KSk7CiAgcmV0
dXJuIGRlc3Q7Cn0KCi8vIFRoZSBmb2xsb3dpbmcgZW51bSBzaG91bGQgYmUgdXNlZCBvbmx5IGFz
IGEgY29uc3RydWN0b3IgYXJndW1lbnQgdG8gaW5kaWNhdGUKLy8gdGhhdCB0aGUgdmFyaWFibGUg
aGFzIHN0YXRpYyBzdG9yYWdlIGNsYXNzLCBhbmQgdGhhdCB0aGUgY29uc3RydWN0b3Igc2hvdWxk
Ci8vIGRvIG5vdGhpbmcgdG8gaXRzIHN0YXRlLiAgSXQgaW5kaWNhdGVzIHRvIHRoZSByZWFkZXIg
dGhhdCBpdCBpcyBsZWdhbCB0bwovLyBkZWNsYXJlIGEgc3RhdGljIGluc3RhbmNlIG9mIHRoZSBj
bGFzcywgcHJvdmlkZWQgdGhlIGNvbnN0cnVjdG9yIGlzIGdpdmVuCi8vIHRoZSBiYXNlOjpMSU5L
RVJfSU5JVElBTElaRUQgYXJndW1lbnQuICBOb3JtYWxseSwgaXQgaXMgdW5zYWZlIHRvIGRlY2xh
cmUgYQovLyBzdGF0aWMgdmFyaWFibGUgdGhhdCBoYXMgYSBjb25zdHJ1Y3RvciBvciBhIGRlc3Ry
dWN0b3IgYmVjYXVzZSBpbnZvY2F0aW9uCi8vIG9yZGVyIGlzIHVuZGVmaW5lZC4gIEhvd2V2ZXIs
IElGIHRoZSB0eXBlIGNhbiBiZSBpbml0aWFsaXplZCBieSBmaWxsaW5nIHdpdGgKLy8gemVyb2Vz
ICh3aGljaCB0aGUgbG9hZGVyIGRvZXMgZm9yIHN0YXRpYyB2YXJpYWJsZXMpLCBBTkQgdGhlIGRl
c3RydWN0b3IgYWxzbwovLyBkb2VzIG5vdGhpbmcgdG8gdGhlIHN0b3JhZ2UsIEFORCB0aGVyZSBh
cmUgbm8gdmlydHVhbCBtZXRob2RzLCB0aGVuIGEKLy8gY29uc3RydWN0b3IgZGVjbGFyZWQgYXMK
Ly8gICAgICAgZXhwbGljaXQgTXlDbGFzcyhiYXNlOjpMaW5rZXJJbml0aWFsaXplZCB4KSB7fQov
LyBhbmQgaW52b2tlZCBhcwovLyAgICAgICBzdGF0aWMgTXlDbGFzcyBteV92YXJpYWJsZV9uYW1l
KGJhc2U6OkxJTktFUl9JTklUSUFMSVpFRCk7Cm5hbWVzcGFjZSBiYXNlIHsKZW51bSBMaW5rZXJJ
bml0aWFsaXplZCB7IExJTktFUl9JTklUSUFMSVpFRCB9Owp9ICAvLyBiYXNlCgoKI2VuZGlmICAv
LyBCQVNFX0JBU0lDVFlQRVNfSF8KCiNpZm5kZWYgQkFTRV9QTEFURk9STV9USFJFQURfSF8KI2Rl
ZmluZSBCQVNFX1BMQVRGT1JNX1RIUkVBRF9IXwoKCi8vIFBsYXRmb3JtVGhyZWFkSGFuZGxlIHNo
b3VsZCBub3QgYmUgYXNzdW1lZCB0byBiZSBhIG51bWVyaWMgdHlwZSwgc2luY2UgdGhlCi8vIHN0
YW5kYXJkIGludGVuZHMgdG8gYWxsb3cgcHRocmVhZF90IHRvIGJlIGEgc3RydWN0dXJlLiAgVGhp
cyBtZWFucyB5b3UKLy8gc2hvdWxkIG5vdCBpbml0aWFsaXplIGl0IHRvIGEgdmFsdWUsIGxpa2Ug
MC4gIElmIGl0J3MgYSBtZW1iZXIgdmFyaWFibGUsIHRoZQovLyBjb25zdHJ1Y3RvciBjYW4gc2Fm
ZWx5ICJ2YWx1ZSBpbml0aWFsaXplIiB1c2luZyAoKSBpbiB0aGUgaW5pdGlhbGl6ZXIgbGlzdC4K
dHlwZWRlZiBwdGhyZWFkX3QgUGxhdGZvcm1UaHJlYWRIYW5kbGU7CmNvbnN0IFBsYXRmb3JtVGhy
ZWFkSGFuZGxlIGtOdWxsVGhyZWFkSGFuZGxlID0gMDsKdHlwZWRlZiBtYWNoX3BvcnRfdCBQbGF0
Zm9ybVRocmVhZElkOwoKLy8gQSBuYW1lc3BhY2UgZm9yIGxvdy1sZXZlbCB0aHJlYWQgZnVuY3Rp
b25zLgpjbGFzcyBQbGF0Zm9ybVRocmVhZCB7CiBwdWJsaWM6CiAgLy8gR2V0cyB0aGUgY3VycmVu
dCB0aHJlYWQgaWQsIHdoaWNoIG1heSBiZSB1c2VmdWwgZm9yIGxvZ2dpbmcgcHVycG9zZXMuCiAg
c3RhdGljIFBsYXRmb3JtVGhyZWFkSWQgQ3VycmVudElkKCk7CgogIC8vIFlpZWxkIHRoZSBjdXJy
ZW50IHRocmVhZCBzbyBhbm90aGVyIHRocmVhZCBjYW4gYmUgc2NoZWR1bGVkLgogIHN0YXRpYyB2
b2lkIFlpZWxkQ3VycmVudFRocmVhZCgpIHsKICBzY2hlZF95aWVsZCgpOwp9CgoKCiAgLy8gU2xl
ZXBzIGZvciB0aGUgc3BlY2lmaWVkIGR1cmF0aW9uICh1bml0cyBhcmUgbWlsbGlzZWNvbmRzKS4K
ICBzdGF0aWMgdm9pZCBTbGVlcChpbnQgZHVyYXRpb25fbXMpOwoKICAvLyBTZXRzIHRoZSB0aHJl
YWQgbmFtZSB2aXNpYmxlIHRvIGEgZGVidWdnZXIuICBUaGlzIGhhcyBubyBlZmZlY3Qgb3RoZXJ3
aXNlLgogIHN0YXRpYyB2b2lkIFNldE5hbWUoY29uc3QgY2hhciogbmFtZSk7CgogIC8vIEltcGxl
bWVudCB0aGlzIGludGVyZmFjZSB0byBydW4gY29kZSBvbiBhIGJhY2tncm91bmQgdGhyZWFkLiAg
WW91cgogIC8vIFRocmVhZE1haW4gbWV0aG9kIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBuZXdseSBj
cmVhdGVkIHRocmVhZC4KICBjbGFzcyBEZWxlZ2F0ZSB7CiAgIHB1YmxpYzoKICAgIHZpcnR1YWwg
fkRlbGVnYXRlKCkge30KICAgIHZpcnR1YWwgdm9pZCBUaHJlYWRNYWluKCkgPSAwOwogIH07Cgog
IC8vIENyZWF0ZXMgYSBuZXcgdGhyZWFkLiAgVGhlIHxzdGFja19zaXplfCBwYXJhbWV0ZXIgY2Fu
IGJlIDAgdG8gaW5kaWNhdGUKICAvLyB0aGF0IHRoZSBkZWZhdWx0IHN0YWNrIHNpemUgc2hvdWxk
IGJlIHVzZWQuICBVcG9uIHN1Y2Nlc3MsCiAgLy8gfCp0aHJlYWRfaGFuZGxlfCB3aWxsIGJlIGFz
c2lnbmVkIGEgaGFuZGxlIHRvIHRoZSBuZXdseSBjcmVhdGVkIHRocmVhZCwKICAvLyBhbmQgfGRl
bGVnYXRlfCdzIFRocmVhZE1haW4gbWV0aG9kIHdpbGwgYmUgZXhlY3V0ZWQgb24gdGhlIG5ld2x5
IGNyZWF0ZWQKICAvLyB0aHJlYWQuCiAgLy8gTk9URTogV2hlbiB5b3UgYXJlIGRvbmUgd2l0aCB0
aGUgdGhyZWFkIGhhbmRsZSwgeW91IG11c3QgY2FsbCBKb2luIHRvCiAgLy8gcmVsZWFzZSBzeXN0
ZW0gcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGhyZWFkLiAgWW91IG11c3QgZW5zdXJl
IHRoYXQKICAvLyB0aGUgRGVsZWdhdGUgb2JqZWN0IG91dGxpdmVzIHRoZSB0aHJlYWQuCiAgc3Rh
dGljIGJvb2wgQ3JlYXRlKHNpemVfdCBzdGFja19zaXplLCBEZWxlZ2F0ZSogZGVsZWdhdGUsCiAg
ICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtVGhyZWFkSGFuZGxlKiB0aHJlYWRfaGFuZGxlKTsK
CiAgLy8gQ3JlYXRlTm9uSm9pbmFibGUoKSBkb2VzIHRoZSBzYW1lIHRoaW5nIGFzIENyZWF0ZSgp
IGV4Y2VwdCB0aGUgdGhyZWFkCiAgLy8gY2Fubm90IGJlIEpvaW4oKSdkLiAgVGhlcmVmb3JlLCBp
dCBhbHNvIGRvZXMgbm90IG91dHB1dCBhCiAgLy8gUGxhdGZvcm1UaHJlYWRIYW5kbGUuCiAgc3Rh
dGljIGJvb2wgQ3JlYXRlTm9uSm9pbmFibGUoc2l6ZV90IHN0YWNrX3NpemUsIERlbGVnYXRlKiBk
ZWxlZ2F0ZSk7CgogIC8vIEpvaW5zIHdpdGggYSB0aHJlYWQgY3JlYXRlZCB2aWEgdGhlIENyZWF0
ZSBmdW5jdGlvbi4gIFRoaXMgZnVuY3Rpb24gYmxvY2tzCiAgLy8gdGhlIGNhbGxlciB1bnRpbCB0
aGUgZGVzaWduYXRlZCB0aHJlYWQgZXhpdHMuICBUaGlzIHdpbGwgaW52YWxpZGF0ZQogIC8vIHx0
aHJlYWRfaGFuZGxlfC4KICBzdGF0aWMgdm9pZCBKb2luKFBsYXRmb3JtVGhyZWFkSGFuZGxlIHRo
cmVhZF9oYW5kbGUpOwoKIHByaXZhdGU6CiAgRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JT
KFBsYXRmb3JtVGhyZWFkKTsKfTsKCiNlbmRpZiAgLy8gQkFTRV9QTEFURk9STV9USFJFQURfSF8K
CiNpZm5kZWYgQkFTRV9MT0NLX0lNUExfSF8KI2RlZmluZSBCQVNFX0xPQ0tfSU1QTF9IXwoKLy8g
VGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtLXNwZWNpZmljIHNw
aW4tbG9jayBtZWNoYW5pc20KLy8gdXNlZCBmb3IgdGhlIExvY2sgY2xhc3MuICBNb3N0IHVzZXJz
IHNob3VsZCBub3QgdXNlIExvY2tJbXBsIGRpcmVjdGx5LCBidXQKLy8gc2hvdWxkIGluc3RlYWQg
dXNlIExvY2suCmNsYXNzIExvY2tJbXBsIHsKIHB1YmxpYzoKICB0eXBlZGVmIHB0aHJlYWRfbXV0
ZXhfdCBPU0xvY2tUeXBlOwoKTG9ja0ltcGwoKSB7CiNpZm5kZWYgTkRFQlVHCiAgLy8gSW4gZGVi
dWcsIHNldHVwIGF0dHJpYnV0ZXMgZm9yIGxvY2sgZXJyb3IgY2hlY2tpbmcuCiAgcHRocmVhZF9t
dXRleGF0dHJfdCBtdGE7CiAgaW50IHJ2ID0gcHRocmVhZF9tdXRleGF0dHJfaW5pdCgmbXRhKTsK
ICAvL0RDSEVDS19FUShydiwgMCk7CiAgcnYgPSBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZt
dGEsIFBUSFJFQURfTVVURVhfRVJST1JDSEVDSyk7CiAgLy9EQ0hFQ0tfRVEocnYsIDApOwogIHJ2
ID0gcHRocmVhZF9tdXRleF9pbml0KCZvc19sb2NrXywgJm10YSk7CiAgLy9EQ0hFQ0tfRVEocnYs
IDApOwogIC8vcnYgPSBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KCZtdGEpOwogIC8vRENIRUNL
X0VRKHJ2LCAwKTsKI2Vsc2UKICAvLyBJbiByZWxlYXNlLCBnbyB3aXRoIHRoZSBkZWZhdWx0IGxv
Y2sgYXR0cmlidXRlcy4KICBwdGhyZWFkX211dGV4X2luaXQoJm9zX2xvY2tfLCBOVUxMKTsKI2Vu
ZGlmCn0KCn5Mb2NrSW1wbCgpIHsKICBpbnQgcnYgPSBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJm9z
X2xvY2tfKTsKICAvL0RDSEVDS19FUShydiwgMCk7Cn0KCiAgLy8gSWYgdGhlIGxvY2sgaXMgbm90
IGhlbGQsIHRha2UgaXQgYW5kIHJldHVybiB0cnVlLiAgSWYgdGhlIGxvY2sgaXMgYWxyZWFkeQog
IC8vIGhlbGQgYnkgc29tZXRoaW5nIGVsc2UsIGltbWVkaWF0ZWx5IHJldHVybiBmYWxzZS4KICBi
b29sIFRyeSgpOwoKICAvLyBUYWtlIHRoZSBsb2NrLCBibG9ja2luZyB1bnRpbCBpdCBpcyBhdmFp
bGFibGUgaWYgbmVjZXNzYXJ5Lgp2b2lkIExvY2soKSB7CiAgaW50IHJ2ID0gcHRocmVhZF9tdXRl
eF9sb2NrKCZvc19sb2NrXyk7CiAgLy9EQ0hFQ0tfRVEocnYsIDApOwp9CgoKICAvLyBSZWxlYXNl
IHRoZSBsb2NrLiAgVGhpcyBtdXN0IG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBsb2NrJ3MgaG9sZGVy
OiBhZnRlcgogIC8vIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvIFRyeSwgb3IgYSBjYWxsIHRvIExvY2su
CnZvaWQgVW5sb2NrKCkgewogIGludCBydiA9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZvc19sb2Nr
Xyk7CiAgLy9EQ0hFQ0tfRVEocnYsIDApOwp9CiAgLy8gRGVidWctb25seSBtZXRob2QgdGhhdCB3
aWxsIERDSEVDSygpIGlmIHRoZSBsb2NrIGlzIG5vdCBhY3F1aXJlZCBieSB0aGUKICAvLyBjdXJy
ZW50IHRocmVhZC4gIEluIG5vbi1kZWJ1ZyBidWlsZHMsIG5vIGNoZWNrIGlzIHBlcmZvcm1lZC4K
ICAvLyBCZWNhdXNlIGxpbnV4IGFuZCBtYWMgY29uZGl0aW9uIHZhcmlhYmxlcyBtb2RpZnkgdGhl
IHVuZGVybHluaW5nIGxvY2sKICAvLyB0aHJvdWdoIHRoZSBvc19sb2NrKCkgbWV0aG9kLCBydW50
aW1lIGFzc2VydGlvbnMgY2FuIG5vdCBiZSBkb25lIG9uIHRob3NlCiAgLy8gYnVpbGRzLgogIHZv
aWQgQXNzZXJ0QWNxdWlyZWQoKSBjb25zdCB7fQoKICAvLyBSZXR1cm4gdGhlIG5hdGl2ZSB1bmRl
cmx5aW5nIGxvY2suICBOb3Qgc3VwcG9ydGVkIGZvciBXaW5kb3dzIGJ1aWxkcy4KICAvLyBUT0RP
KGF3YWxrZXIpOiByZWZhY3RvciBsb2NrIGFuZCBjb25kaXRpb24gdmFyaWFibGVzIHNvIHRoYXQg
dGhpcyBpcwogIC8vIHVubmVjZXNzYXJ5LgogIE9TTG9ja1R5cGUqIG9zX2xvY2soKSB7IHJldHVy
biAmb3NfbG9ja187IH0KCiBwcml2YXRlOgogIE9TTG9ja1R5cGUgb3NfbG9ja187CgogIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihMb2NrSW1wbCk7Cn07CgoKI2VuZGlmICAvLyBCQVNFX0xPQ0tf
SU1QTF9IXwoKCiNpZm5kZWYgQkFTRV9ERUJVR19VVElMX0hfCiNkZWZpbmUgQkFTRV9ERUJVR19V
VElMX0hfCgovLyBBIHN0YWNrdHJhY2UgY2FuIGJlIGhlbHBmdWwgaW4gZGVidWdnaW5nLiBGb3Ig
ZXhhbXBsZSwgeW91IGNhbiBpbmNsdWRlIGEKLy8gc3RhY2t0cmFjZSBtZW1iZXIgaW4gYSBvYmpl
Y3QgKHByb2JhYmx5IGFyb3VuZCAjaWZuZGVmIE5ERUJVRykgc28gdGhhdCB5b3UKLy8gY2FuIGxh
dGVyIHNlZSB3aGVyZSB0aGUgZ2l2ZW4gb2JqZWN0IHdhcyBjcmVhdGVkIGZyb20uCmNsYXNzIFN0
YWNrVHJhY2UgewogcHVibGljOgogIC8vIENyZWF0ZXMgYSBzdGFja3RyYWNlIGZyb20gdGhlIGN1
cnJlbnQgbG9jYXRpb24KICBTdGFja1RyYWNlKCk7CgogIC8vIE5vdGUgdGhhdCB0aGUgZGVmYXVs
dCBjb3B5IGNvbnN0cnVjdG9yIGFuZCBhc3NpZ25tZW50IGNvbnN0cnVjdG9ycwogIC8vIGFyZSBP
Sy4KCiAgLy8gR2V0cyBhbiBhcnJheSBvZiBpbnN0cnVjdGlvbiBwb2ludGVyIHZhbHVlcy4KICAv
LyAgIGNvdW50OiAob3V0cHV0KSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSByZXR1cm5l
ZCBhcnJheQogIGNvbnN0IHZvaWQgKmNvbnN0ICpBZGRyZXNzZXMoc2l6ZV90KiBjb3VudCk7CiAg
Ly8gUHJpbnRzIGEgYmFja3RyYWNlIHRvIHN0ZGVycgogIHZvaWQgUHJpbnRCYWNrdHJhY2UoKTsK
CiAgLy8gUmVzb2x2ZXMgYmFja3RyYWNlIHRvIHN5bWJvbHMgYW5kIHdyaXRlIHRvIHN0cmVhbS4K
ICB2b2lkIE91dHB1dFRvU3RyZWFtKHN0ZDo6b3N0cmVhbSogb3MpOwoKIHByaXZhdGU6CiAgLy8g
RnJvbSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvYmIyMDQ2MzMuYXNw
eCwKICAvLyB0aGUgc3VtIG9mIEZyYW1lc1RvU2tpcCBhbmQgRnJhbWVzVG9DYXB0dXJlIG11c3Qg
YmUgbGVzcyB0aGFuIDYzLAogIC8vIHNvIHNldCBpdCB0byA2Mi4gRXZlbiBpZiBvbiBQT1NJWCBp
dCBjb3VsZCBiZSBhIGxhcmdlciB2YWx1ZSwgaXQgdXN1YWxseQogIC8vIGRvZXNuJ3QgZ2l2ZSBt
dWNoIG1vcmUgaW5mb3JtYXRpb24uCiAgc3RhdGljIGNvbnN0IGludCBNQVhfVFJBQ0VTID0gNjI7
CiAgdm9pZCogdHJhY2VfW01BWF9UUkFDRVNdOwogIGludCBjb3VudF87Cn07CgpTdGFja1RyYWNl
OjpTdGFja1RyYWNlKCkgewojaWYgZGVmaW5lZChPU19NQUNPU1gpICYmIE1BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEIDwgTUFDX09TX1hfVkVSU0lPTl8xMF81CiAgaWYgKGJhY2t0cmFjZSA9
PSBOVUxMKSB7CiAgICBjb3VudF8gPSAwOwogICAgcmV0dXJuOwogIH0KI2VuZGlmCiAgLy8gVGhv
dWdoIHRoZSBiYWNrdHJhY2UgQVBJIG1hbiBwYWdlIGRvZXMgbm90IGxpc3QgYW55IHBvc3NpYmxl
IG5lZ2F0aXZlCiAgLy8gcmV0dXJuIHZhbHVlcywgd2UgdGFrZSBubyBjaGFuY2UuCiAgY291bnRf
ID0gc3RkOjptYXgoYmFja3RyYWNlKHRyYWNlXywgYXJyYXlzaXplKHRyYWNlXykpLCAwKTsKfQoK
Cgp2b2lkIFN0YWNrVHJhY2U6Ok91dHB1dFRvU3RyZWFtKHN0ZDo6b3N0cmVhbSogb3MpIHsgCiAg
LyogVE9ETyhnbGlkZXIpOgojaWYgZGVmaW5lZChPU19NQUNPU1gpICYmIE1BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEIDwgTUFDX09TX1hfVkVSU0lPTl8xMF81CiAgaWYgKGJhY2t0cmFjZV9z
eW1ib2xzID09IE5VTEwpCiAgICByZXR1cm47CiNlbmRpZgogIHNjb3BlZF9wdHJfbWFsbG9jPGNo
YXIqPiB0cmFjZV9zeW1ib2xzKGJhY2t0cmFjZV9zeW1ib2xzKHRyYWNlXywgY291bnRfKSk7Cgog
IC8vIElmIHdlIGNhbid0IHJldHJpZXZlIHRoZSBzeW1ib2xzLCBwcmludCBhbiBlcnJvciBhbmQg
anVzdCBkdW1wIHRoZSByYXcKICAvLyBhZGRyZXNzZXMuCiAgaWYgKHRyYWNlX3N5bWJvbHMuZ2V0
KCkgPT0gTlVMTCkgewogICAgKCpvcykgPDwgIlVuYWJsZSBnZXQgc3ltYm9scyBmb3IgYmFja3Ry
YWNlICgiIDw8IHNhZmVfc3RyZXJyb3IoZXJybm8pCiAgICAgICAgICA8PCAiKS4gRHVtcGluZyBy
YXcgYWRkcmVzc2VzIGluIHRyYWNlOlxuIjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnRf
OyArK2kpIHsKICAgICAgKCpvcykgPDwgIlx0IiA8PCB0cmFjZV9baV0gPDwgIlxuIjsKICAgIH0K
ICB9IGVsc2UgewogICAgKCpvcykgPDwgIkJhY2t0cmFjZTpcbiI7CiAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50XzsgKytpKSB7CiAgICAgIHN0ZDo6c3RyaW5nIHRyYWNlX3N5bWJvbCh0cmFj
ZV9zeW1ib2xzLmdldCgpW2ldKTsKICAgICAgRGVtYW5nbGVTeW1ib2xzKCZ0cmFjZV9zeW1ib2wp
OwogICAgICAoKm9zKSA8PCAiXHQiIDw8IHRyYWNlX3N5bWJvbCA8PCAiXG4iOwogICAgfQogIH0g
Ki8KfQoKY2xhc3MgRGVidWdVdGlsIHsKIHB1YmxpYzoKICAvLyBTdGFydHMgdGhlIHJlZ2lzdGVy
ZWQgc3lzdGVtLXdpZGUgSklUIGRlYnVnZ2VyIHRvIGF0dGFjaCBpdCB0byBzcGVjaWZpZWQKICAv
LyBwcm9jZXNzLgogIHN0YXRpYyBib29sIFNwYXduRGVidWdnZXJPblByb2Nlc3ModW5zaWduZWQg
cHJvY2Vzc19pZCk7CgogIC8vIFdhaXRzIHdhaXRfc2Vjb25kcyBzZWNvbmRzIGZvciBhIGRlYnVn
Z2VyIHRvIGF0dGFjaCB0byB0aGUgY3VycmVudCBwcm9jZXNzLgogIC8vIFdoZW4gc2lsZW50IGlz
IGZhbHNlLCBhbiBleGNlcHRpb24gaXMgdGhyb3duIHdoZW4gYSBkZWJ1Z2dlciBpcyBkZXRlY3Rl
ZC4KICBzdGF0aWMgYm9vbCBXYWl0Rm9yRGVidWdnZXIoaW50IHdhaXRfc2Vjb25kcywgYm9vbCBz
aWxlbnQpOwoKICAvLyBBcmUgd2UgcnVubmluZyB1bmRlciBhIGRlYnVnZ2VyPwogIC8vIE9uIE9T
IFgsIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbSBkb2Vzbid0IHdvcmsgd2hlbiB0aGUgc2FuZGJv
eCBpcyBlbmFibGVkLgogIC8vIFRvIGdldCBhcm91bmQgdGhpcywgdGhpcyBmdW5jdGlvbiBjYWNo
ZXMgaXRzIHZhbHVlLgogIC8vIFdBUk5JTkc6IEJlY2F1c2Ugb2YgdGhpcywgb24gT1MgWCwgYSBj
YWxsIE1VU1QgYmUgbWFkZSB0byB0aGlzIGZ1bmN0aW9uCiAgLy8gQkVGT1JFIHRoZSBzYW5kYm94
IGlzIGVuYWJsZWQuCi8vIEJhc2VkIG9uIEFwcGxlJ3MgcmVjb21tZW5kZWQgbWV0aG9kIGFzIGRl
c2NyaWJlZCBpbgovLyBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9xYS9xYTIwMDQvcWExMzYx
Lmh0bWwKIHN0YXRpYyBib29sIEJlaW5nRGVidWdnZWQoKSB7CiAgLy8gSWYgdGhlIHByb2Nlc3Mg
aXMgc2FuZGJveGVkIHRoZW4gd2UgY2FuJ3QgdXNlIHRoZSBzeXNjdGwsIHNvIGNhY2hlIHRoZQog
IC8vIHZhbHVlLgogIHN0YXRpYyBib29sIGlzX3NldCA9IGZhbHNlOwogIHN0YXRpYyBib29sIGJl
aW5nX2RlYnVnZ2VkID0gZmFsc2U7CgogIGlmIChpc19zZXQpIHsKICAgIHJldHVybiBiZWluZ19k
ZWJ1Z2dlZDsKICB9CgogIC8vIEluaXRpYWxpemUgbWliLCB3aGljaCB0ZWxscyBzeXNjdGwgd2hh
dCBpbmZvIHdlIHdhbnQuICBJbiB0aGlzIGNhc2UsCiAgLy8gd2UncmUgbG9va2luZyBmb3IgaW5m
b3JtYXRpb24gYWJvdXQgYSBzcGVjaWZpYyBwcm9jZXNzIElELgogIGludCBtaWJbXSA9IHsKICAg
IENUTF9LRVJOLAogICAgS0VSTl9QUk9DLAogICAgS0VSTl9QUk9DX1BJRCwKICAgIGdldHBpZCgp
CiAgfTsKCiAgLy8gQ2F1dGlvbjogc3RydWN0IGtpbmZvX3Byb2MgaXMgbWFya2VkIF9fQVBQTEVf
QVBJX1VOU1RBQkxFLiAgVGhlIHNvdXJjZSBhbmQKICAvLyBiaW5hcnkgaW50ZXJmYWNlcyBtYXkg
Y2hhbmdlLgogIHN0cnVjdCBraW5mb19wcm9jIGluZm87CiAgc2l6ZV90IGluZm9fc2l6ZSA9IHNp
emVvZihpbmZvKTsKCiAgaW50IHN5c2N0bF9yZXN1bHQgPSBzeXNjdGwobWliLCBhcnJheXNpemUo
bWliKSwgJmluZm8sICZpbmZvX3NpemUsIE5VTEwsIDApOwogIC8vRENIRUNLKHN5c2N0bF9yZXN1
bHQgPT0gMCk7CiAgaWYgKHN5c2N0bF9yZXN1bHQgIT0gMCkgewogICAgaXNfc2V0ID0gdHJ1ZTsK
ICAgIGJlaW5nX2RlYnVnZ2VkID0gZmFsc2U7CiAgICByZXR1cm4gYmVpbmdfZGVidWdnZWQ7CiAg
fQoKICAvLyBUaGlzIHByb2Nlc3MgaXMgYmVpbmcgZGVidWdnZWQgaWYgdGhlIFBfVFJBQ0VEIGZs
YWcgaXMgc2V0LgogIGlzX3NldCA9IHRydWU7CiAgYmVpbmdfZGVidWdnZWQgPSAoaW5mby5rcF9w
cm9jLnBfZmxhZyAmIFBfVFJBQ0VEKSAhPSAwOwogIHJldHVybiBiZWluZ19kZWJ1Z2dlZDsKfQoK
ICAvLyBCcmVhayBpbnRvIHRoZSBkZWJ1Z2dlciwgYXNzdW1lcyBhIGRlYnVnZ2VyIGlzIHByZXNl
bnQuCi8vIHN0YXRpYwpzdGF0aWMgdm9pZCBCcmVha0RlYnVnZ2VyKCkgewojaWYgZGVmaW5lZChB
UkNIX0NQVV9BUk1fRkFNSUxZKQogIGFzbSgiYmtwdCAwIik7CiNlbHNlCiAgYXNtKCJpbnQzIik7
CiNlbmRpZgp9CgojaWYgZGVmaW5lZChPU19NQUNPU1gpCiAgLy8gT24gTWFjIE9TIFgsIGl0IGNh
biB0YWtlIGEgcmVhbGx5IGxvbmcgdGltZSBmb3IgdGhlIE9TIGNyYXNoIGhhbmRsZXIgdG8KICAv
LyBwcm9jZXNzIGEgQ2hyb21lIGNyYXNoIHdoZW4gZGVidWdnaW5nIHN5bWJvbHMgYXJlIGF2YWls
YWJsZS4gIFRoaXMKICAvLyB0cmFuc2xhdGVzIGludG8gYSBsb25nIHdhaXQgdW50aWwgdGhlIHBy
b2Nlc3MgYWN0dWFsbHkgZGllcy4gIFRoaXMgY2FsbAogIC8vIGRpc2FibGVzIEFwcGxlIENyYXNo
IFJlcG9ydGVyIGVudGlyZWx5LgogIHN0YXRpYyB2b2lkIERpc2FibGVPU0NyYXNoRHVtcHMoKTsK
I2VuZGlmICAvLyBkZWZpbmVkKE9TX01BQ09TWCkKfTsKCiNlbmRpZiAgLy8gQkFTRV9ERUJVR19V
VElMX0hfCgojaWZuZGVmIEJBU0VfTE9HR0lOR19IXwojZGVmaW5lIEJBU0VfTE9HR0lOR19IXwoK
Ci8vCi8vIE9wdGlvbmFsIG1lc3NhZ2UgY2FwYWJpbGl0aWVzCi8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi8vIEFzc2VydGlvbiBmYWlsZWQgbWVzc2FnZXMgYW5kIGZhdGFsIGVycm9y
cyBhcmUgZGlzcGxheWVkIGluIGEgZGlhbG9nIGJveAovLyBiZWZvcmUgdGhlIGFwcGxpY2F0aW9u
IGV4aXRzLiBIb3dldmVyLCBydW5uaW5nIHRoaXMgVUkgY3JlYXRlcyBhIG1lc3NhZ2UKLy8gbG9v
cCwgd2hpY2ggY2F1c2VzIGFwcGxpY2F0aW9uIG1lc3NhZ2VzIHRvIGJlIHByb2Nlc3NlZCBhbmQg
cG90ZW50aWFsbHkKLy8gZGlzcGF0Y2hlZCB0byBleGlzdGluZyBhcHBsaWNhdGlvbiB3aW5kb3dz
LiBTaW5jZSB0aGUgYXBwbGljYXRpb24gaXMgaW4gYQovLyBiYWQgc3RhdGUgd2hlbiB0aGlzIGFz
c2VydGlvbiBkaWFsb2cgaXMgZGlzcGxheWVkLCB0aGVzZSBtZXNzYWdlcyBtYXkgbm90Ci8vIGdl
dCBwcm9jZXNzZWQgYW5kIGhhbmcgdGhlIGRpYWxvZywgb3IgdGhlIGFwcGxpY2F0aW9uIG1pZ2h0
IGdvIGNyYXp5LgovLwovLyBUaGVyZWZvcmUsIGl0IGNhbiBiZSBiZW5lZmljaWFsIHRvIGRpc3Bs
YXkgdGhlIGVycm9yIGRpYWxvZyBpbiBhIHNlcGFyYXRlCi8vIHByb2Nlc3MgZnJvbSB0aGUgbWFp
biBhcHBsaWNhdGlvbi4gV2hlbiB0aGUgbG9nZ2luZyBzeXN0ZW0gbmVlZHMgdG8gZGlzcGxheQov
LyBhIGZhdGFsIGVycm9yIGRpYWxvZyBib3gsIGl0IHdpbGwgbG9vayBmb3IgYSBwcm9ncmFtIGNh
bGxlZAovLyAiRGVidWdNZXNzYWdlLmV4ZSIgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBh
cHBsaWNhdGlvbiBleGVjdXRhYmxlLiBJdAovLyB3aWxsIHJ1biB0aGlzIGFwcGxpY2F0aW9uIHdp
dGggdGhlIG1lc3NhZ2UgYXMgdGhlIGNvbW1hbmQgbGluZSwgYW5kIHdpbGwKLy8gbm90IGluY2x1
ZGUgdGhlIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIGFzIGlzIHRyYWRpdGlvbmFsIGZvciBlYXNp
ZXIKLy8gcGFyc2luZy4KLy8KLy8gVGhlIGNvZGUgZm9yIERlYnVnTWVzc2FnZS5leGUgaXMgb25s
eSBvbmUgbGluZS4gSW4gV2luTWFpbiwgZG86Ci8vICAgTWVzc2FnZUJveChOVUxMLCBHZXRDb21t
YW5kTGluZVcoKSwgTCJGYXRhbCBFcnJvciIsIDApOwovLwovLyBJZiBEZWJ1Z01lc3NhZ2UuZXhl
IGlzIG5vdCBmb3VuZCwgdGhlIGxvZ2dpbmcgY29kZSB3aWxsIHVzZSBhIG5vcm1hbAovLyBNZXNz
YWdlQm94LCBwb3RlbnRpYWxseSBjYXVzaW5nIHRoZSBwcm9ibGVtcyBkaXNjdXNzZWQgYWJvdmUu
CgoKLy8gSW5zdHJ1Y3Rpb25zCi8vIC0tLS0tLS0tLS0tLQovLwovLyBNYWtlIGEgYnVuY2ggb2Yg
bWFjcm9zIGZvciBsb2dnaW5nLiAgVGhlIHdheSB0byBsb2cgdGhpbmdzIGlzIHRvIHN0cmVhbQov
LyB0aGluZ3MgdG8gTE9HKDxhIHBhcnRpY3VsYXIgc2V2ZXJpdHkgbGV2ZWw+KS4gIEUuZy4sCi8v
Ci8vICAgTE9HKElORk8pIDw8ICJGb3VuZCAiIDw8IG51bV9jb29raWVzIDw8ICIgY29va2llcyI7
Ci8vCi8vIFlvdSBjYW4gYWxzbyBkbyBjb25kaXRpb25hbCBsb2dnaW5nOgovLwovLyAgIExPR19J
RihJTkZPLCBudW1fY29va2llcyA+IDEwKSA8PCAiR290IGxvdHMgb2YgY29va2llcyI7Ci8vCi8v
IFRoZSBhYm92ZSB3aWxsIGNhdXNlIGxvZyBtZXNzYWdlcyB0byBiZSBvdXRwdXQgb24gdGhlIDFz
dCwgMTF0aCwgMjFzdCwgLi4uCi8vIHRpbWVzIGl0IGlzIGV4ZWN1dGVkLiAgTm90ZSB0aGF0IHRo
ZSBzcGVjaWFsIENPVU5URVIgdmFsdWUgaXMgdXNlZCB0bwovLyBpZGVudGlmeSB3aGljaCByZXBl
dGl0aW9uIGlzIGhhcHBlbmluZy4KLy8KLy8gVGhlIENIRUNLKGNvbmRpdGlvbikgbWFjcm8gaXMg
YWN0aXZlIGluIGJvdGggZGVidWcgYW5kIHJlbGVhc2UgYnVpbGRzIGFuZAovLyBlZmZlY3RpdmVs
eSBwZXJmb3JtcyBhIExPRyhGQVRBTCkgd2hpY2ggdGVybWluYXRlcyB0aGUgcHJvY2VzcyBhbmQK
Ly8gZ2VuZXJhdGVzIGEgY3Jhc2hkdW1wIHVubGVzcyBhIGRlYnVnZ2VyIGlzIGF0dGFjaGVkLgov
LwovLyBUaGVyZSBhcmUgYWxzbyAiZGVidWcgbW9kZSIgbG9nZ2luZyBtYWNyb3MgbGlrZSB0aGUg
b25lcyBhYm92ZToKLy8KLy8gICBETE9HKElORk8pIDw8ICJGb3VuZCBjb29raWVzIjsKLy8KLy8g
ICBETE9HX0lGKElORk8sIG51bV9jb29raWVzID4gMTApIDw8ICJHb3QgbG90cyBvZiBjb29raWVz
IjsKLy8KLy8gQWxsICJkZWJ1ZyBtb2RlIiBsb2dnaW5nIGlzIGNvbXBpbGVkIGF3YXkgdG8gbm90
aGluZyBmb3Igbm9uLWRlYnVnIG1vZGUKLy8gY29tcGlsZXMuICBMT0dfSUYgYW5kIGRldmVsb3Bt
ZW50IGZsYWdzIGFsc28gd29yayB3ZWxsIHRvZ2V0aGVyCi8vIGJlY2F1c2UgdGhlIGNvZGUgY2Fu
IGJlIGNvbXBpbGVkIGF3YXkgc29tZXRpbWVzLgovLwovLyBXZSBhbHNvIGhhdmUKLy8KLy8gICBM
T0dfQVNTRVJUKGFzc2VydGlvbik7Ci8vICAgRExPR19BU1NFUlQoYXNzZXJ0aW9uKTsKLy8KLy8g
d2hpY2ggaXMgc3ludGFjdGljIHN1Z2FyIGZvciB7LER9TE9HX0lGKEZBVEFMLCBhc3NlcnQgZmFp
bHMpIDw8IGFzc2VydGlvbjsKLy8KLy8gV2UgYWxzbyBvdmVycmlkZSB0aGUgc3RhbmRhcmQgJ2Fz
c2VydCcgdG8gdXNlICdETE9HX0FTU0VSVCcuCi8vCi8vIExhc3RseSwgdGhlcmUgaXM6Ci8vCi8v
ICAgUExPRyhFUlJPUikgPDwgIkNvdWxkbid0IGRvIGZvbyI7Ci8vICAgUExPR19JRihFUlJPUiwg
Y29uZCkgPDwgIkNvdWxkbid0IGRvIGZvbyI7Ci8vICAgUENIRUNLKGNvbmRpdGlvbikgPDwgIkNv
dWxkbid0IGRvIGZvbyI7Ci8vCi8vIHdoaWNoIGFwcGVuZCB0aGUgbGFzdCBzeXN0ZW0gZXJyb3Ig
dG8gdGhlIG1lc3NhZ2UgaW4gc3RyaW5nIGZvcm0gKHRha2VuIGZyb20KLy8gR2V0TGFzdEVycm9y
KCkgb24gV2luZG93cyBhbmQgZXJybm8gb24gUE9TSVgpLgovLwovLyBUaGUgc3VwcG9ydGVkIHNl
dmVyaXR5IGxldmVscyBmb3IgbWFjcm9zIHRoYXQgYWxsb3cgeW91IHRvIHNwZWNpZnkgb25lCi8v
IGFyZSAoaW4gaW5jcmVhc2luZyBvcmRlciBvZiBzZXZlcml0eSkgSU5GTywgV0FSTklORywgRVJS
T1IsIEVSUk9SX1JFUE9SVCwKLy8gYW5kIEZBVEFMLgovLwovLyBWZXJ5IGltcG9ydGFudDogbG9n
Z2luZyBhIG1lc3NhZ2UgYXQgdGhlIEZBVEFMIHNldmVyaXR5IGxldmVsIGNhdXNlcwovLyB0aGUg
cHJvZ3JhbSB0byB0ZXJtaW5hdGUgKGFmdGVyIHRoZSBtZXNzYWdlIGlzIGxvZ2dlZCkuCi8vCi8v
IE5vdGUgdGhlIHNwZWNpYWwgc2V2ZXJpdHkgb2YgRVJST1JfUkVQT1JUIG9ubHkgYXZhaWxhYmxl
L3JlbGV2YW50IGluIG5vcm1hbAovLyBtb2RlLCB3aGljaCBkaXNwbGF5cyBlcnJvciBkaWFsb2cg
d2l0aG91dCB0ZXJtaW5hdGluZyB0aGUgcHJvZ3JhbS4gVGhlcmUgaXMKLy8gbm8gZXJyb3IgZGlh
bG9nIGZvciBzZXZlcml0eSBFUlJPUiBvciBiZWxvdyBpbiBub3JtYWwgbW9kZS4KLy8KLy8gVGhl
cmUgaXMgYWxzbyB0aGUgc3BlY2lhbCBzZXZlcml0eSBvZiBERkFUQUwsIHdoaWNoIGxvZ3MgRkFU
QUwgaW4KLy8gZGVidWcgbW9kZSwgRVJST1JfUkVQT1JUIGluIG5vcm1hbCBtb2RlLgoKbmFtZXNw
YWNlIGxvZ2dpbmcgewoKLy8gV2hlcmUgdG8gcmVjb3JkIGxvZ2dpbmcgb3V0cHV0PyBBIGZsYXQg
ZmlsZSBhbmQvb3Igc3lzdGVtIGRlYnVnIGxvZyB2aWEKLy8gT3V0cHV0RGVidWdTdHJpbmcuIERl
ZmF1bHRzIG9uIFdpbmRvd3MgdG8gTE9HX09OTFlfVE9fRklMRSwgYW5kIG9uCi8vIFBPU0lYIHRv
IExPR19PTkxZX1RPX1NZU1RFTV9ERUJVR19MT0cgKGFrYSBzdGRlcnIpLgplbnVtIExvZ2dpbmdE
ZXN0aW5hdGlvbiB7IExPR19OT05FLAogICAgICAgICAgICAgICAgICAgICAgICAgIExPR19PTkxZ
X1RPX0ZJTEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgTE9HX09OTFlfVE9fU1lTVEVNX0RF
QlVHX0xPRywKICAgICAgICAgICAgICAgICAgICAgICAgICBMT0dfVE9fQk9USF9GSUxFX0FORF9T
WVNURU1fREVCVUdfTE9HIH07CgovLyBJbmRpY2F0ZXMgdGhhdCB0aGUgbG9nIGZpbGUgc2hvdWxk
IGJlIGxvY2tlZCB3aGVuIGJlaW5nIHdyaXR0ZW4gdG8uCi8vIE9mdGVuLCB0aGVyZSBpcyBubyBs
b2NraW5nLCB3aGljaCBpcyBmaW5lIGZvciBhIHNpbmdsZSB0aHJlYWRlZCBwcm9ncmFtLgovLyBJ
ZiBsb2dnaW5nIGlzIGJlaW5nIGRvbmUgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIG9yIHRoZXJlIGNh
biBiZSBtb3JlIHRoYW4KLy8gb25lIHByb2Nlc3MgZG9pbmcgdGhlIGxvZ2dpbmcsIHRoZSBmaWxl
IHNob3VsZCBiZSBsb2NrZWQgZHVyaW5nIHdyaXRlcyB0bwovLyBtYWtlIGVhY2ggbG9nIG91dHV0
IGF0b21pYy4gT3RoZXIgd3JpdGVycyB3aWxsIGJsb2NrLgovLwovLyBBbGwgcHJvY2Vzc2VzIHdy
aXRpbmcgdG8gdGhlIGxvZyBmaWxlIG11c3QgaGF2ZSB0aGVpciBsb2NraW5nIHNldCBmb3IgaXQg
dG8KLy8gd29yayBwcm9wZXJseS4gRGVmYXVsdHMgdG8gRE9OVF9MT0NLX0xPR19GSUxFLgplbnVt
IExvZ0xvY2tpbmdTdGF0ZSB7IExPQ0tfTE9HX0ZJTEUsIERPTlRfTE9DS19MT0dfRklMRSB9OwoK
Ly8gT24gc3RhcnR1cCwgc2hvdWxkIHdlIGRlbGV0ZSBvciBhcHBlbmQgdG8gYW4gZXhpc3Rpbmcg
bG9nIGZpbGUgKGlmIGFueSk/Ci8vIERlZmF1bHRzIHRvIEFQUEVORF9UT19PTERfTE9HX0ZJTEUu
CmVudW0gT2xkRmlsZURlbGV0aW9uU3RhdGUgeyBERUxFVEVfT0xEX0xPR19GSUxFLCBBUFBFTkRf
VE9fT0xEX0xPR19GSUxFIH07CgovLyBTZXRzIHRoZSBsb2cgZmlsZSBuYW1lIGFuZCBvdGhlciBn
bG9iYWwgbG9nZ2luZyBzdGF0ZS4gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uCi8vIGlzIHJlY29tbWVu
ZGVkLCBhbmQgaXMgbm9ybWFsbHkgZG9uZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGFwcGxpY2F0aW9u
IGluaXQuCi8vIElmIHlvdSBkb24ndCBjYWxsIGl0LCBhbGwgdGhlIGZsYWdzIHdpbGwgYmUgaW5p
dGlhbGl6ZWQgdG8gdGhlaXIgZGVmYXVsdAovLyB2YWx1ZXMsIGFuZCB0aGVyZSBpcyBhIHJhY2Ug
Y29uZGl0aW9uIHRoYXQgbWF5IGxlYWsgYSBjcml0aWNhbCBzZWN0aW9uCi8vIG9iamVjdCBpZiB0
d28gdGhyZWFkcyB0cnkgdG8gZG8gdGhlIGZpcnN0IGxvZyBhdCB0aGUgc2FtZSB0aW1lLgovLyBT
ZWUgdGhlIGRlZmluaXRpb24gb2YgdGhlIGVudW1zIGFib3ZlIGZvciBkZXNjcmlwdGlvbnMgYW5k
IGRlZmF1bHQgdmFsdWVzLgovLwovLyBUaGUgZGVmYXVsdCBsb2cgZmlsZSBpcyBpbml0aWFsaXpl
ZCB0byAiZGVidWcubG9nIiBpbiB0aGUgYXBwbGljYXRpb24KLy8gZGlyZWN0b3J5LiBZb3UgcHJv
YmFibHkgZG9uJ3Qgd2FudCB0aGlzLCBlc3BlY2lhbGx5IHNpbmNlIHRoZSBwcm9ncmFtCi8vIGRp
cmVjdG9yeSBtYXkgbm90IGJlIHdyaXRhYmxlIG9uIGFuIGVuZHVzZXIncyBzeXN0ZW0uCi8vIFRP
RE8oYXZpKTogZG8gd2Ugd2FudCB0byBkbyBhIHVuaWZpY2F0aW9uIG9mIGNoYXJhY3RlciB0eXBl
cyBoZXJlPwp2b2lkIEluaXRMb2dnaW5nKGNvbnN0IGNoYXIqIGxvZ19maWxlLCBMb2dnaW5nRGVz
dGluYXRpb24gbG9nZ2luZ19kZXN0LAogICAgICAgICAgICAgICAgIExvZ0xvY2tpbmdTdGF0ZSBs
b2NrX2xvZywgT2xkRmlsZURlbGV0aW9uU3RhdGUgZGVsZXRlX29sZCk7CgovLyBTZXRzIHRoZSBs
b2cgbGV2ZWwuIEFueXRoaW5nIGF0IG9yIGFib3ZlIHRoaXMgbGV2ZWwgd2lsbCBiZSB3cml0dGVu
IHRvIHRoZQovLyBsb2cgZmlsZS9kaXNwbGF5ZWQgdG8gdGhlIHVzZXIgKGlmIGFwcGxpY2FibGUp
LiBBbnl0aGluZyBiZWxvdyB0aGlzIGxldmVsCi8vIHdpbGwgYmUgc2lsZW50bHkgaWdub3JlZC4g
VGhlIGxvZyBsZXZlbCBkZWZhdWx0cyB0byAwIChldmVyeXRoaW5nIGlzIGxvZ2dlZCkKLy8gaWYg
dGhpcyBmdW5jdGlvbiBpcyBub3QgY2FsbGVkLgp2b2lkIFNldE1pbkxvZ0xldmVsKGludCBsZXZl
bCk7CgovLyBHZXRzIHRoZSBjdXJyZW50IGxvZyBsZXZlbC4KaW50IEdldE1pbkxvZ0xldmVsKCk7
CgojaWYgZGVmaW5lZChPU19MSU5VWCkKLy8gR2V0IHRoZSBmaWxlIGRlc2NyaXB0b3IgdXNlZCBm
b3IgbG9nZ2luZy4KLy8gUmV0dXJucyAtMSBpZiBub25lIG9wZW4uCi8vIE5lZWRlZCBieSBaeWdv
dGVNYW5hZ2VyLgppbnQgR2V0TG9nZ2luZ0ZpbGVEZXNjcmlwdG9yKCk7CiNlbmRpZgoKLy8gU2V0
cyB0aGUgbG9nIGZpbHRlciBwcmVmaXguICBBbnkgbG9nIG1lc3NhZ2UgYmVsb3cgTE9HX0VSUk9S
IHNldmVyaXR5IHRoYXQKLy8gZG9lc24ndCBzdGFydCB3aXRoIHRoaXMgcHJlZml4IHdpdGggYmUg
c2lsZW50bHkgaWdub3JlZC4gIFRoZSBmaWx0ZXIgZGVmYXVsdHMKLy8gdG8gTlVMTCAoZXZlcnl0
aGluZyBpcyBsb2dnZWQpIGlmIHRoaXMgZnVuY3Rpb24gaXMgbm90IGNhbGxlZC4gIE1lc3NhZ2Vz
Ci8vIHdpdGggc2V2ZXJpdHkgb2YgTE9HX0VSUk9SIG9yIGhpZ2hlciB3aWxsIG5vdCBiZSBmaWx0
ZXJlZC4Kdm9pZCBTZXRMb2dGaWx0ZXJQcmVmaXgoY29uc3QgY2hhciogZmlsdGVyKTsKCi8vIFNl
dHMgdGhlIGNvbW1vbiBpdGVtcyB5b3Ugd2FudCB0byBiZSBwcmVwZW5kZWQgdG8gZWFjaCBsb2cg
bWVzc2FnZS4KLy8gcHJvY2VzcyBhbmQgdGhyZWFkIElEcyBkZWZhdWx0IHRvIG9mZiwgdGhlIHRp
bWVzdGFtcCBkZWZhdWx0cyB0byBvbi4KLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBub3QgY2FsbGVk
LCBsb2dnaW5nIGRlZmF1bHRzIHRvIHdyaXRpbmcgdGhlIHRpbWVzdGFtcAovLyBvbmx5Lgp2b2lk
IFNldExvZ0l0ZW1zKGJvb2wgZW5hYmxlX3Byb2Nlc3NfaWQsIGJvb2wgZW5hYmxlX3RocmVhZF9p
ZCwKICAgICAgICAgICAgICAgICBib29sIGVuYWJsZV90aW1lc3RhbXAsIGJvb2wgZW5hYmxlX3Rp
Y2tjb3VudCk7CgovLyBTZXRzIHRoZSBMb2cgQXNzZXJ0IEhhbmRsZXIgdGhhdCB3aWxsIGJlIHVz
ZWQgdG8gbm90aWZ5IG9mIGNoZWNrIGZhaWx1cmVzLgovLyBUaGUgZGVmYXVsdCBoYW5kbGVyIHNo
b3dzIGEgZGlhbG9nIGJveCBhbmQgdGhlbiB0ZXJtaW5hdGUgdGhlIHByb2Nlc3MsCi8vIGhvd2V2
ZXIgY2xpZW50cyBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gb3ZlcnJpZGUgd2l0aCB0aGVpciBv
d24gaGFuZGxpbmcKLy8gKGUuZy4gYSBzaWxlbnQgb25lIGZvciBVbml0IFRlc3RzKQp0eXBlZGVm
IHZvaWQgKCpMb2dBc3NlcnRIYW5kbGVyRnVuY3Rpb24pKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIp
Owp2b2lkIFNldExvZ0Fzc2VydEhhbmRsZXIoTG9nQXNzZXJ0SGFuZGxlckZ1bmN0aW9uIGhhbmRs
ZXIpOwovLyBTZXRzIHRoZSBMb2cgUmVwb3J0IEhhbmRsZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8g
bm90aWZ5IG9mIGNoZWNrIGZhaWx1cmVzCi8vIGluIG5vbi1kZWJ1ZyBtb2RlLiBUaGUgZGVmYXVs
dCBoYW5kbGVyIHNob3dzIGEgZGlhbG9nIGJveCBhbmQgY29udGludWVzCi8vIHRoZSBleGVjdXRp
b24sIGhvd2V2ZXIgY2xpZW50cyBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gb3ZlcnJpZGUgd2l0
aCB0aGVpcgovLyBvd24gaGFuZGxpbmcuCnR5cGVkZWYgdm9pZCAoKkxvZ1JlcG9ydEhhbmRsZXJG
dW5jdGlvbikoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cik7CnZvaWQgU2V0TG9nUmVwb3J0SGFuZGxl
cihMb2dSZXBvcnRIYW5kbGVyRnVuY3Rpb24gaGFuZGxlcik7CgovLyBTZXRzIHRoZSBMb2cgTWVz
c2FnZSBIYW5kbGVyIHRoYXQgZ2V0cyBwYXNzZWQgZXZlcnkgbG9nIG1lc3NhZ2UgYmVmb3JlCi8v
IGl0J3Mgc2VudCB0byBvdGhlciBsb2cgZGVzdGluYXRpb25zIChpZiBhbnkpLgovLyBSZXR1cm5z
IHRydWUgdG8gc2lnbmFsIHRoYXQgaXQgaGFuZGxlZCB0aGUgbWVzc2FnZSBhbmQgdGhlIG1lc3Nh
Z2UKLy8gc2hvdWxkIG5vdCBiZSBzZW50IHRvIG90aGVyIGxvZyBkZXN0aW5hdGlvbnMuCnR5cGVk
ZWYgYm9vbCAoKkxvZ01lc3NhZ2VIYW5kbGVyRnVuY3Rpb24pKGludCBzZXZlcml0eSwgY29uc3Qg
c3RkOjpzdHJpbmcmIHN0cik7CnZvaWQgU2V0TG9nTWVzc2FnZUhhbmRsZXIoTG9nTWVzc2FnZUhh
bmRsZXJGdW5jdGlvbiBoYW5kbGVyKTsKCnR5cGVkZWYgaW50IExvZ1NldmVyaXR5Owpjb25zdCBM
b2dTZXZlcml0eSBMT0dfSU5GTyA9IDA7CmNvbnN0IExvZ1NldmVyaXR5IExPR19XQVJOSU5HID0g
MTsKY29uc3QgTG9nU2V2ZXJpdHkgTE9HX0VSUk9SID0gMjsKY29uc3QgTG9nU2V2ZXJpdHkgTE9H
X0VSUk9SX1JFUE9SVCA9IDM7CmNvbnN0IExvZ1NldmVyaXR5IExPR19GQVRBTCA9IDQ7CmNvbnN0
IExvZ1NldmVyaXR5IExPR19OVU1fU0VWRVJJVElFUyA9IDU7CgovLyBMT0dfREZBVEFMX0xFVkVM
IGlzIExPR19GQVRBTCBpbiBkZWJ1ZyBtb2RlLCBFUlJPUl9SRVBPUlQgaW4gbm9ybWFsIG1vZGUK
I2lmZGVmIE5ERUJVRwpjb25zdCBMb2dTZXZlcml0eSBMT0dfREZBVEFMX0xFVkVMID0gTE9HX0VS
Uk9SX1JFUE9SVDsKI2Vsc2UKY29uc3QgTG9nU2V2ZXJpdHkgTE9HX0RGQVRBTF9MRVZFTCA9IExP
R19GQVRBTDsKI2VuZGlmCgovLyBBIGZldyBkZWZpbml0aW9ucyBvZiBtYWNyb3MgdGhhdCBkb24n
dCBnZW5lcmF0ZSBtdWNoIGNvZGUuIFRoZXNlIGFyZSB1c2VkCi8vIGJ5IExPRygpIGFuZCBMT0df
SUYsIGV0Yy4gU2luY2UgdGhlc2UgYXJlIHVzZWQgYWxsIG92ZXIgb3VyIGNvZGUsIGl0J3MKLy8g
YmV0dGVyIHRvIGhhdmUgY29tcGFjdCBjb2RlIGZvciB0aGVzZSBvcGVyYXRpb25zLgojZGVmaW5l
IENPTVBBQ1RfR09PR0xFX0xPR19FWF9JTkZPKENsYXNzTmFtZSwgLi4uKSBcCiAgbG9nZ2luZzo6
Q2xhc3NOYW1lKF9fRklMRV9fLCBfX0xJTkVfXywgbG9nZ2luZzo6TE9HX0lORk8gLCAjI19fVkFf
QVJHU19fKQojZGVmaW5lIENPTVBBQ1RfR09PR0xFX0xPR19FWF9XQVJOSU5HKENsYXNzTmFtZSwg
Li4uKSBcCiAgbG9nZ2luZzo6Q2xhc3NOYW1lKF9fRklMRV9fLCBfX0xJTkVfXywgbG9nZ2luZzo6
TE9HX1dBUk5JTkcgLCAjI19fVkFfQVJHU19fKQojZGVmaW5lIENPTVBBQ1RfR09PR0xFX0xPR19F
WF9FUlJPUihDbGFzc05hbWUsIC4uLikgXAogIGxvZ2dpbmc6OkNsYXNzTmFtZShfX0ZJTEVfXywg
X19MSU5FX18sIGxvZ2dpbmc6OkxPR19FUlJPUiAsICMjX19WQV9BUkdTX18pCiNkZWZpbmUgQ09N
UEFDVF9HT09HTEVfTE9HX0VYX0VSUk9SX1JFUE9SVChDbGFzc05hbWUsIC4uLikgXAogIGxvZ2dp
bmc6OkNsYXNzTmFtZShfX0ZJTEVfXywgX19MSU5FX18sIFwKICAgICAgICAgICAgICAgICAgICAg
bG9nZ2luZzo6TE9HX0VSUk9SX1JFUE9SVCAsICMjX19WQV9BUkdTX18pCiNkZWZpbmUgQ09NUEFD
VF9HT09HTEVfTE9HX0VYX0ZBVEFMKENsYXNzTmFtZSwgLi4uKSBcCiAgbG9nZ2luZzo6Q2xhc3NO
YW1lKF9fRklMRV9fLCBfX0xJTkVfXywgbG9nZ2luZzo6TE9HX0ZBVEFMICwgIyNfX1ZBX0FSR1Nf
XykKI2RlZmluZSBDT01QQUNUX0dPT0dMRV9MT0dfRVhfREZBVEFMKENsYXNzTmFtZSwgLi4uKSBc
CiAgbG9nZ2luZzo6Q2xhc3NOYW1lKF9fRklMRV9fLCBfX0xJTkVfXywgXAogICAgICAgICAgICAg
ICAgICAgICBsb2dnaW5nOjpMT0dfREZBVEFMX0xFVkVMICwgIyNfX1ZBX0FSR1NfXykKCiNkZWZp
bmUgQ09NUEFDVF9HT09HTEVfTE9HX0lORk8gXAogIENPTVBBQ1RfR09PR0xFX0xPR19FWF9JTkZP
KExvZ01lc3NhZ2UpCiNkZWZpbmUgQ09NUEFDVF9HT09HTEVfTE9HX1dBUk5JTkcgXAogIENPTVBB
Q1RfR09PR0xFX0xPR19FWF9XQVJOSU5HKExvZ01lc3NhZ2UpCiNkZWZpbmUgQ09NUEFDVF9HT09H
TEVfTE9HX0VSUk9SIFwKICBDT01QQUNUX0dPT0dMRV9MT0dfRVhfRVJST1IoTG9nTWVzc2FnZSkK
I2RlZmluZSBDT01QQUNUX0dPT0dMRV9MT0dfRVJST1JfUkVQT1JUIFwKICBDT01QQUNUX0dPT0dM
RV9MT0dfRVhfRVJST1JfUkVQT1JUKExvZ01lc3NhZ2UpCiNkZWZpbmUgQ09NUEFDVF9HT09HTEVf
TE9HX0ZBVEFMIFwKICBDT01QQUNUX0dPT0dMRV9MT0dfRVhfRkFUQUwoTG9nTWVzc2FnZSkKI2Rl
ZmluZSBDT01QQUNUX0dPT0dMRV9MT0dfREZBVEFMIFwKICBDT01QQUNUX0dPT0dMRV9MT0dfRVhf
REZBVEFMKExvZ01lc3NhZ2UpCgovLyB3aW5nZGkuaCBkZWZpbmVzIEVSUk9SIHRvIGJlIDAuIFdo
ZW4gd2UgY2FsbCBMT0coRVJST1IpLCBpdCBnZXRzCi8vIHN1YnN0aXR1dGVkIHdpdGggMCwgYW5k
IGl0IGV4cGFuZHMgdG8gQ09NUEFDVF9HT09HTEVfTE9HXzAuIFRvIGFsbG93IHVzCi8vIHRvIGtl
ZXAgdXNpbmcgdGhpcyBzeW50YXgsIHdlIGRlZmluZSB0aGlzIG1hY3JvIHRvIGRvIHRoZSBzYW1l
IHRoaW5nCi8vIGFzIENPTVBBQ1RfR09PR0xFX0xPR19FUlJPUiwgYW5kIGFsc28gZGVmaW5lIEVS
Uk9SIHRoZSBzYW1lIHdheSB0aGF0Ci8vIHRoZSBXaW5kb3dzIFNESyBkb2VzIGZvciBjb25zaXN0
ZW5jeS4KI2RlZmluZSBFUlJPUiAwCiNkZWZpbmUgQ09NUEFDVF9HT09HTEVfTE9HX0VYXzAoQ2xh
c3NOYW1lLCAuLi4pIFwKICBDT01QQUNUX0dPT0dMRV9MT0dfRVhfRVJST1IoQ2xhc3NOYW1lICwg
IyNfX1ZBX0FSR1NfXykKI2RlZmluZSBDT01QQUNUX0dPT0dMRV9MT0dfMCBDT01QQUNUX0dPT0dM
RV9MT0dfRVJST1IKCi8vIFdlIHVzZSB0aGUgcHJlcHJvY2Vzc29yJ3MgbWVyZ2luZyBvcGVyYXRv
ciwgIiMjIiwgc28gdGhhdCwgZS5nLiwKLy8gTE9HKElORk8pIGJlY29tZXMgdGhlIHRva2VuIENP
TVBBQ1RfR09PR0xFX0xPR19JTkZPLiAgVGhlcmUncyBzb21lIGZ1bm55Ci8vIHN1YnRsZSBkaWZm
ZXJlbmNlIGJldHdlZW4gb3N0cmVhbSBtZW1iZXIgc3RyZWFtaW5nIGZ1bmN0aW9ucyAoZS5nLiwK
Ly8gb3N0cmVhbTo6b3BlcmF0b3I8PChpbnQpIGFuZCBvc3RyZWFtIG5vbi1tZW1iZXIgc3RyZWFt
aW5nIGZ1bmN0aW9ucwovLyAoZS5nLiwgOjpvcGVyYXRvcjw8KG9zdHJlYW0mLCBzdHJpbmcmKTog
aXQgdHVybnMgb3V0IHRoYXQgaXQncwovLyBpbXBvc3NpYmxlIHRvIHN0cmVhbSBzb21ldGhpbmcg
bGlrZSBhIHN0cmluZyBkaXJlY3RseSB0byBhbiB1bm5hbWVkCi8vIG9zdHJlYW0uIFdlIGVtcGxv
eSBhIG5lYXQgaGFjayBieSBjYWxsaW5nIHRoZSBzdHJlYW0oKSBtZW1iZXIKLy8gZnVuY3Rpb24g
b2YgTG9nTWVzc2FnZSB3aGljaCBzZWVtcyB0byBhdm9pZCB0aGUgcHJvYmxlbS4KCiNkZWZpbmUg
TE9HKHNldmVyaXR5KSBDT01QQUNUX0dPT0dMRV9MT0dfICMjIHNldmVyaXR5LnN0cmVhbSgpCiNk
ZWZpbmUgU1lTTE9HKHNldmVyaXR5KSBMT0coc2V2ZXJpdHkpCgojZGVmaW5lIExPR19JRihzZXZl
cml0eSwgY29uZGl0aW9uKSBcCiAgIShjb25kaXRpb24pID8gKHZvaWQpIDAgOiBsb2dnaW5nOjpM
b2dNZXNzYWdlVm9pZGlmeSgpICYgTE9HKHNldmVyaXR5KQojZGVmaW5lIFNZU0xPR19JRihzZXZl
cml0eSwgY29uZGl0aW9uKSBMT0dfSUYoc2V2ZXJpdHksIGNvbmRpdGlvbikKCiNkZWZpbmUgTE9H
X0FTU0VSVChjb25kaXRpb24pICBcCiAgTE9HX0lGKEZBVEFMLCAhKGNvbmRpdGlvbikpIDw8ICJB
c3NlcnQgZmFpbGVkOiAiICNjb25kaXRpb24gIi4gIgojZGVmaW5lIFNZU0xPR19BU1NFUlQoY29u
ZGl0aW9uKSBcCiAgU1lTTE9HX0lGKEZBVEFMLCAhKGNvbmRpdGlvbikpIDw8ICJBc3NlcnQgZmFp
bGVkOiAiICNjb25kaXRpb24gIi4gIgoKI2RlZmluZSBMT0dfRVJSTk8oc2V2ZXJpdHkpIFwKICBD
T01QQUNUX0dPT0dMRV9MT0dfRVhfICMjIHNldmVyaXR5KEVycm5vTG9nTWVzc2FnZSwgXAogICAg
ICA6OmxvZ2dpbmc6OkdldExhc3RTeXN0ZW1FcnJvckNvZGUoKSkuc3RyZWFtKCkKLy8gUExPRyBp
cyB0aGUgdXN1YWwgZXJyb3IgbG9nZ2luZyBtYWNybyBmb3IgZWFjaCBwbGF0Zm9ybS4KI2RlZmlu
ZSBQTE9HKHNldmVyaXR5KSBMT0dfRVJSTk8oc2V2ZXJpdHkpCi8vIFRPRE8odHNjaG1lbGNoZXIp
OiBTaG91bGQgd2UgYWRkIE9TU3RhdHVzIGxvZ2dpbmcgZm9yIE1hYz8KCiNkZWZpbmUgUExPR19J
RihzZXZlcml0eSwgY29uZGl0aW9uKSBcCiAgIShjb25kaXRpb24pID8gKHZvaWQpIDAgOiBsb2dn
aW5nOjpMb2dNZXNzYWdlVm9pZGlmeSgpICYgUExPRyhzZXZlcml0eSkKCi8vIENIRUNLIGRpZXMg
d2l0aCBhIGZhdGFsIGVycm9yIGlmIGNvbmRpdGlvbiBpcyBub3QgdHJ1ZS4gIEl0IGlzICpub3Qq
Ci8vIGNvbnRyb2xsZWQgYnkgTkRFQlVHLCBzbyB0aGUgY2hlY2sgd2lsbCBiZSBleGVjdXRlZCBy
ZWdhcmRsZXNzIG9mCi8vIGNvbXBpbGF0aW9uIG1vZGUuCiNkZWZpbmUgQ0hFQ0soY29uZGl0aW9u
KSBcCiAgTE9HX0lGKEZBVEFMLCAhKGNvbmRpdGlvbikpIDw8ICJDaGVjayBmYWlsZWQ6ICIgI2Nv
bmRpdGlvbiAiLiAiCgojZGVmaW5lIFBDSEVDSyhjb25kaXRpb24pIFwKICBQTE9HX0lGKEZBVEFM
LCAhKGNvbmRpdGlvbikpIDw8ICJDaGVjayBmYWlsZWQ6ICIgI2NvbmRpdGlvbiAiLiAiCgovLyBB
IGNvbnRhaW5lciBmb3IgYSBzdHJpbmcgcG9pbnRlciB3aGljaCBjYW4gYmUgZXZhbHVhdGVkIHRv
IGEgYm9vbCAtCi8vIHRydWUgaWZmIHRoZSBwb2ludGVyIGlzIE5VTEwuCnN0cnVjdCBDaGVja09w
U3RyaW5nIHsKICBDaGVja09wU3RyaW5nKHN0ZDo6c3RyaW5nKiBzdHIpIDogc3RyXyhzdHIpIHsg
fQogIC8vIE5vIGRlc3RydWN0b3I6IGlmIHN0cl8gaXMgbm9uLU5VTEwsIHdlJ3JlIGFib3V0IHRv
IExPRyhGQVRBTCksCiAgLy8gc28gdGhlcmUncyBubyBwb2ludCBpbiBjbGVhbmluZyB1cCBzdHJf
LgogIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBzdHJfICE9IE5VTEw7IH0KICBzdGQ6
OnN0cmluZyogc3RyXzsKfTsKCi8vIEJ1aWxkIHRoZSBlcnJvciBtZXNzYWdlIHN0cmluZy4gIFRo
aXMgaXMgc2VwYXJhdGUgZnJvbSB0aGUgIkltcGwiCi8vIGZ1bmN0aW9uIHRlbXBsYXRlIGJlY2F1
c2UgaXQgaXMgbm90IHBlcmZvcm1hbmNlIGNyaXRpY2FsIGFuZCBzbyBjYW4KLy8gYmUgb3V0IG9m
IGxpbmUsIHdoaWxlIHRoZSAiSW1wbCIgY29kZSBzaG91bGQgYmUgaW5saW5lLgp0ZW1wbGF0ZTxj
bGFzcyB0MSwgY2xhc3MgdDI+CnN0ZDo6c3RyaW5nKiBNYWtlQ2hlY2tPcFN0cmluZyhjb25zdCB0
MSYgdjEsIGNvbnN0IHQyJiB2MiwgY29uc3QgY2hhciogbmFtZXMpIHsKICBzdGQ6Om9zdHJpbmdz
dHJlYW0gc3M7CiAgc3MgPDwgbmFtZXMgPDwgIiAoIiA8PCB2MSA8PCAiIHZzLiAiIDw8IHYyIDw8
ICIpIjsKICBzdGQ6OnN0cmluZyogbXNnID0gbmV3IHN0ZDo6c3RyaW5nKHNzLnN0cigpKTsKICBy
ZXR1cm4gbXNnOwp9CgpleHRlcm4gc3RkOjpzdHJpbmcqIE1ha2VDaGVja09wU3RyaW5nSW50SW50
KGludCB2MSwgaW50IHYyLCBjb25zdCBjaGFyKiBuYW1lcyk7Cgp0ZW1wbGF0ZTxpbnQsIGludD4K
c3RkOjpzdHJpbmcqIE1ha2VDaGVja09wU3RyaW5nKGNvbnN0IGludCYgdjEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQmIHYyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogbmFtZXMpIHsKICByZXR1cm4gTWFrZUNoZWNrT3BTdHJpbmdJ
bnRJbnQodjEsIHYyLCBuYW1lcyk7Cn0KCi8vIFBsdXMgc29tZSBkZWJ1Zy1sb2dnaW5nIG1hY3Jv
cyB0aGF0IGdldCBjb21waWxlZCB0byBub3RoaW5nIGZvciBwcm9kdWN0aW9uCi8vCi8vIERFQlVH
X01PREUgaXMgZm9yIHVzZXMgbGlrZQovLyAgIGlmIChERUJVR19NT0RFKSBmb28uQ2hlY2tUaGF0
Rm9vKCk7Ci8vIGluc3RlYWQgb2YKLy8gICAjaWZuZGVmIE5ERUJVRwovLyAgICAgZm9vLkNoZWNr
VGhhdEZvbygpOwovLyAgICNlbmRpZgoKLy8gaHR0cDovL2NyYnVnLmNvbS8xNjUxMiBpcyBvcGVu
IGZvciBhIHJlYWwgZml4IGZvciB0aGlzLiAgRm9yIG5vdywgV2luZG93cwovLyB1c2VzIE9GRklD
SUFMX0JVSUxEIGFuZCBvdGhlciBwbGF0Zm9ybXMgdXNlIHRoZSBicmFuZGluZyBmbGFnIHdoZW4g
TkRFQlVHIGlzCi8vIGRlZmluZWQuCiNpZiAgICAoZGVmaW5lZChOREVCVUcpICYmIGRlZmluZWQo
R09PR0xFX0NIUk9NRV9CVUlMRCkpCi8vIEluIG9yZGVyIHRvIGhhdmUgb3B0aW1pemVkIGNvZGUg
Zm9yIG9mZmljaWFsIGJ1aWxkcywgcmVtb3ZlIERMT0dzIGFuZAovLyBEQ0hFQ0tzLgojZGVmaW5l
IE9NSVRfRExPR19BTkRfRENIRUNLIDEKI2VuZGlmCgojaWZkZWYgT01JVF9ETE9HX0FORF9EQ0hF
Q0sKCiNkZWZpbmUgRExPRyhzZXZlcml0eSkgXAogIHRydWUgPyAodm9pZCkgMCA6IGxvZ2dpbmc6
OkxvZ01lc3NhZ2VWb2lkaWZ5KCkgJiBMT0coc2V2ZXJpdHkpCgojZGVmaW5lIERMT0dfSUYoc2V2
ZXJpdHksIGNvbmRpdGlvbikgXAogIHRydWUgPyAodm9pZCkgMCA6IGxvZ2dpbmc6OkxvZ01lc3Nh
Z2VWb2lkaWZ5KCkgJiBMT0coc2V2ZXJpdHkpCgojZGVmaW5lIERMT0dfQVNTRVJUKGNvbmRpdGlv
bikgXAogIHRydWUgPyAodm9pZCkgMCA6IExPR19BU1NFUlQoY29uZGl0aW9uKQoKCmVudW0geyBE
RUJVR19NT0RFID0gMCB9OwoKLy8gVGhpcyBtYWNybyBjYW4gYmUgZm9sbG93ZWQgYnkgYSBzZXF1
ZW5jZSBvZiBzdHJlYW0gcGFyYW1ldGVycyBpbgovLyBub24tZGVidWcgbW9kZS4gVGhlIERDSEVD
SyBhbmQgZnJpZW5kcyBtYWNyb3MgdXNlIHRoaXMgc28gdGhhdAovLyB0aGUgZXhwYW5kZWQgZXhw
cmVzc2lvbiBEQ0hFQ0soZm9vKSA8PCAiYXNkZiIgaXMgc3RpbGwgc3ludGFjdGljYWxseQovLyB2
YWxpZCwgZXZlbiB0aG91Z2ggdGhlIGV4cHJlc3Npb24gd2lsbCBnZXQgb3B0aW1pemVkIGF3YXku
Ci8vIEluIG9yZGVyIHRvIGF2b2lkIHZhcmlhYmxlIHVudXNlZCB3YXJuaW5ncyBmb3IgY29kZSB0
aGF0IG9ubHkgdXNlcyBhCi8vIHZhcmlhYmxlIGluIGEgQ0hFQ0ssIHdlIG1ha2Ugc3VyZSB0byB1
c2UgdGhlIG1hY3JvIGFyZ3VtZW50cy4KI2RlZmluZSBOREVCVUdfRUFUX1NUUkVBTV9QQVJBTUVU
RVJTIFwKICBsb2dnaW5nOjpMb2dNZXNzYWdlKF9fRklMRV9fLCBfX0xJTkVfXykuc3RyZWFtKCkK
CiNkZWZpbmUgRENIRUNLKGNvbmRpdGlvbikgXAogIHdoaWxlIChmYWxzZSAmJiAoY29uZGl0aW9u
KSkgTkRFQlVHX0VBVF9TVFJFQU1fUEFSQU1FVEVSUwoKCiNkZWZpbmUgRENIRUNLX0VRKHZhbDEs
IHZhbDIpIFwKICB3aGlsZSAoZmFsc2UgJiYgKHZhbDEpID09ICh2YWwyKSkgTkRFQlVHX0VBVF9T
VFJFQU1fUEFSQU1FVEVSUwoKI2RlZmluZSBEQ0hFQ0tfTkUodmFsMSwgdmFsMikgXAogIHdoaWxl
IChmYWxzZSAmJiAodmFsMSkgPT0gKHZhbDIpKSBOREVCVUdfRUFUX1NUUkVBTV9QQVJBTUVURVJT
CgojZGVmaW5lIERDSEVDS19MRSh2YWwxLCB2YWwyKSBcCiAgd2hpbGUgKGZhbHNlICYmICh2YWwx
KSA9PSAodmFsMikpIE5ERUJVR19FQVRfU1RSRUFNX1BBUkFNRVRFUlMKCiNkZWZpbmUgRENIRUNL
X0xUKHZhbDEsIHZhbDIpIFwKICB3aGlsZSAoZmFsc2UgJiYgKHZhbDEpID09ICh2YWwyKSkgTkRF
QlVHX0VBVF9TVFJFQU1fUEFSQU1FVEVSUwoKI2RlZmluZSBEQ0hFQ0tfR0UodmFsMSwgdmFsMikg
XAogIHdoaWxlIChmYWxzZSAmJiAodmFsMSkgPT0gKHZhbDIpKSBOREVCVUdfRUFUX1NUUkVBTV9Q
QVJBTUVURVJTCgojZGVmaW5lIERDSEVDS19HVCh2YWwxLCB2YWwyKSBcCiAgd2hpbGUgKGZhbHNl
ICYmICh2YWwxKSA9PSAodmFsMikpIE5ERUJVR19FQVRfU1RSRUFNX1BBUkFNRVRFUlMKCiNkZWZp
bmUgRENIRUNLX1NUUkVRKHN0cjEsIHN0cjIpIFwKICB3aGlsZSAoZmFsc2UgJiYgKHN0cjEpID09
IChzdHIyKSkgTkRFQlVHX0VBVF9TVFJFQU1fUEFSQU1FVEVSUwoKI2RlZmluZSBEQ0hFQ0tfU1RS
Q0FTRUVRKHN0cjEsIHN0cjIpIFwKICB3aGlsZSAoZmFsc2UgJiYgKHN0cjEpID09IChzdHIyKSkg
TkRFQlVHX0VBVF9TVFJFQU1fUEFSQU1FVEVSUwoKI2RlZmluZSBEQ0hFQ0tfU1RSTkUoc3RyMSwg
c3RyMikgXAogIHdoaWxlIChmYWxzZSAmJiAoc3RyMSkgPT0gKHN0cjIpKSBOREVCVUdfRUFUX1NU
UkVBTV9QQVJBTUVURVJTCgojZGVmaW5lIERDSEVDS19TVFJDQVNFTkUoc3RyMSwgc3RyMikgXAog
IHdoaWxlIChmYWxzZSAmJiAoc3RyMSkgPT0gKHN0cjIpKSBOREVCVUdfRUFUX1NUUkVBTV9QQVJB
TUVURVJTCgojZWxzZSAgLy8gT01JVF9ETE9HX0FORF9EQ0hFQ0sKCiNpZm5kZWYgTkRFQlVHCi8v
IE9uIGEgcmVndWxhciBkZWJ1ZyBidWlsZCwgd2Ugd2FudCB0byBoYXZlIERDSEVDS1MgYW5kIERM
T0dTIGVuYWJsZWQuCgojZGVmaW5lIERMT0coc2V2ZXJpdHkpIExPRyhzZXZlcml0eSkKI2RlZmlu
ZSBETE9HX0lGKHNldmVyaXR5LCBjb25kaXRpb24pIExPR19JRihzZXZlcml0eSwgY29uZGl0aW9u
KQojZGVmaW5lIERMT0dfQVNTRVJUKGNvbmRpdGlvbikgTE9HX0FTU0VSVChjb25kaXRpb24pCgov
LyBkZWJ1Zy1vbmx5IGNoZWNraW5nLiAgbm90IGV4ZWN1dGVkIGluIE5ERUJVRyBtb2RlLgplbnVt
IHsgREVCVUdfTU9ERSA9IDEgfTsKI2RlZmluZSBEQ0hFQ0soY29uZGl0aW9uKSBcCiAgTE9HX0lG
KEZBVEFMLCAhKGNvbmRpdGlvbikpIDw8ICJDaGVjayBmYWlsZWQ6ICIgI2NvbmRpdGlvbiAiLiAi
CgovLyBIZWxwZXIgbWFjcm8gZm9yIGJpbmFyeSBvcGVyYXRvcnMuCi8vIERvbid0IHVzZSB0aGlz
IG1hY3JvIGRpcmVjdGx5IGluIHlvdXIgY29kZSwgdXNlIERDSEVDS19FUSBldCBhbCBiZWxvdy4K
I2RlZmluZSBEQ0hFQ0tfT1AobmFtZSwgb3AsIHZhbDEsIHZhbDIpICBcCiAgaWYgKGxvZ2dpbmc6
OkNoZWNrT3BTdHJpbmcgX3Jlc3VsdCA9IFwKICAgICAgbG9nZ2luZzo6Q2hlY2sjI25hbWUjI0lt
cGwoKHZhbDEpLCAodmFsMiksICN2YWwxICIgIiAjb3AgIiAiICN2YWwyKSkgXAogICAgbG9nZ2lu
Zzo6TG9nTWVzc2FnZShfX0ZJTEVfXywgX19MSU5FX18sIF9yZXN1bHQpLnN0cmVhbSgpCgovLyBI
ZWxwZXIgZnVuY3Rpb25zIGZvciBzdHJpbmcgY29tcGFyaXNvbnMuCi8vIFRvIGF2b2lkIGJsb2F0
LCB0aGUgZGVmaW5pdGlvbnMgYXJlIGluIGxvZ2dpbmcuY2MuCiNkZWZpbmUgREVDTEFSRV9EQ0hF
Q0tfU1RST1BfSU1QTChmdW5jLCBleHBlY3RlZCkgXAogIHN0ZDo6c3RyaW5nKiBDaGVjayMjZnVu
YyMjZXhwZWN0ZWQjI0ltcGwoY29uc3QgY2hhciogczEsIFwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHMyLCBcCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lcyk7CkRFQ0xBUkVfRENI
RUNLX1NUUk9QX0lNUEwoc3RyY21wLCB0cnVlKQpERUNMQVJFX0RDSEVDS19TVFJPUF9JTVBMKHN0
cmNtcCwgZmFsc2UpCkRFQ0xBUkVfRENIRUNLX1NUUk9QX0lNUEwoX3N0cmljbXAsIHRydWUpCkRF
Q0xBUkVfRENIRUNLX1NUUk9QX0lNUEwoX3N0cmljbXAsIGZhbHNlKQojdW5kZWYgREVDTEFSRV9E
Q0hFQ0tfU1RST1BfSU1QTAoKLy8gSGVscGVyIG1hY3JvIGZvciBzdHJpbmcgY29tcGFyaXNvbnMu
Ci8vIERvbid0IHVzZSB0aGlzIG1hY3JvIGRpcmVjdGx5IGluIHlvdXIgY29kZSwgdXNlIENIRUNL
X1NUUkVRIGV0IGFsIGJlbG93LgojZGVmaW5lIERDSEVDS19TVFJPUChmdW5jLCBvcCwgZXhwZWN0
ZWQsIHMxLCBzMikgXAogIHdoaWxlIChDaGVja09wU3RyaW5nIF9yZXN1bHQgPSBcCiAgICAgIGxv
Z2dpbmc6OkNoZWNrIyNmdW5jIyNleHBlY3RlZCMjSW1wbCgoczEpLCAoczIpLCBcCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjczEgIiAiICNvcCAiICIgI3MyKSkg
XAogICAgTE9HKEZBVEFMKSA8PCAqX3Jlc3VsdC5zdHJfCgovLyBTdHJpbmcgKGNoYXIqKSBlcXVh
bGl0eS9pbmVxdWFsaXR5IGNoZWNrcy4KLy8gQ0FTRSB2ZXJzaW9ucyBhcmUgY2FzZS1pbnNlbnNp
dGl2ZS4KLy8KLy8gTm90ZSB0aGF0ICJzMSIgYW5kICJzMiIgbWF5IGJlIHRlbXBvcmFyeSBzdHJp
bmdzIHdoaWNoIGFyZSBkZXN0cm95ZWQKLy8gYnkgdGhlIGNvbXBpbGVyIGF0IHRoZSBlbmQgb2Yg
dGhlIGN1cnJlbnQgImZ1bGwgZXhwcmVzc2lvbiIKLy8gKGUuZy4gRENIRUNLX1NUUkVRKEZvbygp
LmNfc3RyKCksIEJhcigpLmNfc3RyKCkpKS4KCiNkZWZpbmUgRENIRUNLX1NUUkVRKHMxLCBzMikg
RENIRUNLX1NUUk9QKHN0cmNtcCwgPT0sIHRydWUsIHMxLCBzMikKI2RlZmluZSBEQ0hFQ0tfU1RS
TkUoczEsIHMyKSBEQ0hFQ0tfU1RST1Aoc3RyY21wLCAhPSwgZmFsc2UsIHMxLCBzMikKI2RlZmlu
ZSBEQ0hFQ0tfU1RSQ0FTRUVRKHMxLCBzMikgRENIRUNLX1NUUk9QKF9zdHJpY21wLCA9PSwgdHJ1
ZSwgczEsIHMyKQojZGVmaW5lIERDSEVDS19TVFJDQVNFTkUoczEsIHMyKSBEQ0hFQ0tfU1RST1Ao
X3N0cmljbXAsICE9LCBmYWxzZSwgczEsIHMyKQoKI2RlZmluZSBEQ0hFQ0tfSU5ERVgoSSxBKSBE
Q0hFQ0soSSA8IChzaXplb2YoQSkvc2l6ZW9mKEFbMF0pKSkKI2RlZmluZSBEQ0hFQ0tfQk9VTkQo
QixBKSBEQ0hFQ0soQiA8PSAoc2l6ZW9mKEEpL3NpemVvZihBWzBdKSkpCgojZWxzZSAgLy8gTkRF
QlVHCi8vIE9uIGEgcmVndWxhciByZWxlYXNlIGJ1aWxkIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBl
bmFibGUgRENIRUNLUyB0aHJvdWdoIHRoZQovLyBjb21tYW5kIGxpbmUuCiNkZWZpbmUgRExPRyhz
ZXZlcml0eSkgXAogIHRydWUgPyAodm9pZCkgMCA6IGxvZ2dpbmc6OkxvZ01lc3NhZ2VWb2lkaWZ5
KCkgJiBMT0coc2V2ZXJpdHkpCgojZGVmaW5lIERMT0dfSUYoc2V2ZXJpdHksIGNvbmRpdGlvbikg
XAogIHRydWUgPyAodm9pZCkgMCA6IGxvZ2dpbmc6OkxvZ01lc3NhZ2VWb2lkaWZ5KCkgJiBMT0co
c2V2ZXJpdHkpCgojZGVmaW5lIERMT0dfQVNTRVJUKGNvbmRpdGlvbikgXAogIHRydWUgPyAodm9p
ZCkgMCA6IExPR19BU1NFUlQoY29uZGl0aW9uKQoKCmVudW0geyBERUJVR19NT0RFID0gMCB9OwoK
Ly8gVGhpcyBtYWNybyBjYW4gYmUgZm9sbG93ZWQgYnkgYSBzZXF1ZW5jZSBvZiBzdHJlYW0gcGFy
YW1ldGVycyBpbgovLyBub24tZGVidWcgbW9kZS4gVGhlIERDSEVDSyBhbmQgZnJpZW5kcyBtYWNy
b3MgdXNlIHRoaXMgc28gdGhhdAovLyB0aGUgZXhwYW5kZWQgZXhwcmVzc2lvbiBEQ0hFQ0soZm9v
KSA8PCAiYXNkZiIgaXMgc3RpbGwgc3ludGFjdGljYWxseQovLyB2YWxpZCwgZXZlbiB0aG91Z2gg
dGhlIGV4cHJlc3Npb24gd2lsbCBnZXQgb3B0aW1pemVkIGF3YXkuCiNkZWZpbmUgTkRFQlVHX0VB
VF9TVFJFQU1fUEFSQU1FVEVSUyBcCiAgbG9nZ2luZzo6TG9nTWVzc2FnZShfX0ZJTEVfXywgX19M
SU5FX18pLnN0cmVhbSgpCgovLyBTZXQgdG8gdHJ1ZSBpbiBJbml0TG9nZ2luZyB3aGVuIHdlIHdh
bnQgdG8gZW5hYmxlIHRoZSBkY2hlY2tzIGluIHJlbGVhc2UuCmV4dGVybiBib29sIGdfZW5hYmxl
X2RjaGVjazsKI2RlZmluZSBEQ0hFQ0soY29uZGl0aW9uKSBcCiAgICAhbG9nZ2luZzo6Z19lbmFi
bGVfZGNoZWNrID8gdm9pZCAoMCkgOiBcCiAgICAgICAgTE9HX0lGKEVSUk9SX1JFUE9SVCwgIShj
b25kaXRpb24pKSA8PCAiQ2hlY2sgZmFpbGVkOiAiICNjb25kaXRpb24gIi4gIgoKLy8gSGVscGVy
IG1hY3JvIGZvciBiaW5hcnkgb3BlcmF0b3JzLgovLyBEb24ndCB1c2UgdGhpcyBtYWNybyBkaXJl
Y3RseSBpbiB5b3VyIGNvZGUsIHVzZSBEQ0hFQ0tfRVEgZXQgYWwgYmVsb3cuCiNkZWZpbmUgRENI
RUNLX09QKG5hbWUsIG9wLCB2YWwxLCB2YWwyKSAgXAogIGlmIChsb2dnaW5nOjpnX2VuYWJsZV9k
Y2hlY2spIFwKICAgIGlmIChsb2dnaW5nOjpDaGVja09wU3RyaW5nIF9yZXN1bHQgPSBcCiAgICAg
ICAgbG9nZ2luZzo6Q2hlY2sjI25hbWUjI0ltcGwoKHZhbDEpLCAodmFsMiksICN2YWwxICIgIiAj
b3AgIiAiICN2YWwyKSkgXAogICAgICBsb2dnaW5nOjpMb2dNZXNzYWdlKF9fRklMRV9fLCBfX0xJ
TkVfXywgbG9nZ2luZzo6TE9HX0VSUk9SX1JFUE9SVCwgXAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9yZXN1bHQpLnN0cmVhbSgpCgojZGVmaW5lIERDSEVDS19TVFJFUShzdHIxLCBzdHIyKSBc
CiAgd2hpbGUgKGZhbHNlKSBOREVCVUdfRUFUX1NUUkVBTV9QQVJBTUVURVJTCgojZGVmaW5lIERD
SEVDS19TVFJDQVNFRVEoc3RyMSwgc3RyMikgXAogIHdoaWxlIChmYWxzZSkgTkRFQlVHX0VBVF9T
VFJFQU1fUEFSQU1FVEVSUwoKI2RlZmluZSBEQ0hFQ0tfU1RSTkUoc3RyMSwgc3RyMikgXAogIHdo
aWxlIChmYWxzZSkgTkRFQlVHX0VBVF9TVFJFQU1fUEFSQU1FVEVSUwoKI2RlZmluZSBEQ0hFQ0tf
U1RSQ0FTRU5FKHN0cjEsIHN0cjIpIFwKICB3aGlsZSAoZmFsc2UpIE5ERUJVR19FQVRfU1RSRUFN
X1BBUkFNRVRFUlMKCiNlbmRpZiAgLy8gTkRFQlVHCgovLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBE
Q0hFQ0tfT1AgbWFjcm8uCi8vIFRoZSAoaW50LCBpbnQpIHNwZWNpYWxpemF0aW9uIHdvcmtzIGFy
b3VuZCB0aGUgaXNzdWUgdGhhdCB0aGUgY29tcGlsZXIKLy8gd2lsbCBub3QgaW5zdGFudGlhdGUg
dGhlIHRlbXBsYXRlIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIG9uIHZhbHVlcyBvZgovLyB1bm5h
bWVkIGVudW0gdHlwZSAtIHNlZSBjb21tZW50IGJlbG93LgojZGVmaW5lIERFRklORV9EQ0hFQ0tf
T1BfSU1QTChuYW1lLCBvcCkgXAogIHRlbXBsYXRlIDxjbGFzcyB0MSwgY2xhc3MgdDI+IFwKICBp
bmxpbmUgc3RkOjpzdHJpbmcqIENoZWNrIyNuYW1lIyNJbXBsKGNvbnN0IHQxJiB2MSwgY29uc3Qg
dDImIHYyLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBuYW1lcykgeyBcCiAgICBpZiAodjEgb3AgdjIpIHJldHVybiBOVUxMOyBcCiAgICBlbHNl
IHJldHVybiBNYWtlQ2hlY2tPcFN0cmluZyh2MSwgdjIsIG5hbWVzKTsgXAogIH0gXAogIGlubGlu
ZSBzdGQ6OnN0cmluZyogQ2hlY2sjI25hbWUjI0ltcGwoaW50IHYxLCBpbnQgdjIsIGNvbnN0IGNo
YXIqIG5hbWVzKSB7IFwKICAgIGlmICh2MSBvcCB2MikgcmV0dXJuIE5VTEw7IFwKICAgIGVsc2Ug
cmV0dXJuIE1ha2VDaGVja09wU3RyaW5nKHYxLCB2MiwgbmFtZXMpOyBcCiAgfQpERUZJTkVfRENI
RUNLX09QX0lNUEwoRVEsID09KQpERUZJTkVfRENIRUNLX09QX0lNUEwoTkUsICE9KQpERUZJTkVf
RENIRUNLX09QX0lNUEwoTEUsIDw9KQpERUZJTkVfRENIRUNLX09QX0lNUEwoTFQsIDwgKQpERUZJ
TkVfRENIRUNLX09QX0lNUEwoR0UsID49KQpERUZJTkVfRENIRUNLX09QX0lNUEwoR1QsID4gKQoj
dW5kZWYgREVGSU5FX0RDSEVDS19PUF9JTVBMCgovLyBFcXVhbGl0eS9JbmVxdWFsaXR5IGNoZWNr
cyAtIGNvbXBhcmUgdHdvIHZhbHVlcywgYW5kIGxvZyBhIExPR19GQVRBTCBtZXNzYWdlCi8vIGlu
Y2x1ZGluZyB0aGUgdHdvIHZhbHVlcyB3aGVuIHRoZSByZXN1bHQgaXMgbm90IGFzIGV4cGVjdGVk
LiAgVGhlIHZhbHVlcwovLyBtdXN0IGhhdmUgb3BlcmF0b3I8PChvc3RyZWFtLCAuLi4pIGRlZmlu
ZWQuCi8vCi8vIFlvdSBtYXkgYXBwZW5kIHRvIHRoZSBlcnJvciBtZXNzYWdlIGxpa2Ugc286Ci8v
ICAgRENIRUNLX05FKDEsIDIpIDw8ICI6IFRoZSB3b3JsZCBtdXN0IGJlIGVuZGluZyEiOwovLwov
LyBXZSBhcmUgdmVyeSBjYXJlZnVsIHRvIGVuc3VyZSB0aGF0IGVhY2ggYXJndW1lbnQgaXMgZXZh
bHVhdGVkIGV4YWN0bHkKLy8gb25jZSwgYW5kIHRoYXQgYW55dGhpbmcgd2hpY2ggaXMgbGVnYWwg
dG8gcGFzcyBhcyBhIGZ1bmN0aW9uIGFyZ3VtZW50IGlzCi8vIGxlZ2FsIGhlcmUuICBJbiBwYXJ0
aWN1bGFyLCB0aGUgYXJndW1lbnRzIG1heSBiZSB0ZW1wb3JhcnkgZXhwcmVzc2lvbnMKLy8gd2hp
Y2ggd2lsbCBlbmQgdXAgYmVpbmcgZGVzdHJveWVkIGF0IHRoZSBlbmQgb2YgdGhlIGFwcGFyZW50
IHN0YXRlbWVudCwKLy8gZm9yIGV4YW1wbGU6Ci8vICAgRENIRUNLX0VRKHN0cmluZygiYWJjIilb
MV0sICdiJyk7Ci8vCi8vIFdBUk5JTkc6IFRoZXNlIG1heSBub3QgY29tcGlsZSBjb3JyZWN0bHkg
aWYgb25lIG9mIHRoZSBhcmd1bWVudHMgaXMgYSBwb2ludGVyCi8vIGFuZCB0aGUgb3RoZXIgaXMg
TlVMTC4gVG8gd29yayBhcm91bmQgdGhpcywgc2ltcGx5IHN0YXRpY19jYXN0IE5VTEwgdG8gdGhl
Ci8vIHR5cGUgb2YgdGhlIGRlc2lyZWQgcG9pbnRlci4KCiNkZWZpbmUgRENIRUNLX0VRKHZhbDEs
IHZhbDIpIERDSEVDS19PUChFUSwgPT0sIHZhbDEsIHZhbDIpCiNkZWZpbmUgRENIRUNLX05FKHZh
bDEsIHZhbDIpIERDSEVDS19PUChORSwgIT0sIHZhbDEsIHZhbDIpCiNkZWZpbmUgRENIRUNLX0xF
KHZhbDEsIHZhbDIpIERDSEVDS19PUChMRSwgPD0sIHZhbDEsIHZhbDIpCiNkZWZpbmUgRENIRUNL
X0xUKHZhbDEsIHZhbDIpIERDSEVDS19PUChMVCwgPCAsIHZhbDEsIHZhbDIpCiNkZWZpbmUgRENI
RUNLX0dFKHZhbDEsIHZhbDIpIERDSEVDS19PUChHRSwgPj0sIHZhbDEsIHZhbDIpCiNkZWZpbmUg
RENIRUNLX0dUKHZhbDEsIHZhbDIpIERDSEVDS19PUChHVCwgPiAsIHZhbDEsIHZhbDIpCgojZW5k
aWYgIC8vIE9NSVRfRExPR19BTkRfRENIRUNLCiN1bmRlZiBPTUlUX0RMT0dfQU5EX0RDSEVDSwoK
I2RlZmluZSBOT1RSRUFDSEVEKCkgRENIRUNLKGZhbHNlKQoKLy8gUmVkZWZpbmUgdGhlIHN0YW5k
YXJkIGFzc2VydCB0byB1c2Ugb3VyIG5pY2UgbG9nIGZpbGVzCiN1bmRlZiBhc3NlcnQKI2RlZmlu
ZSBhc3NlcnQoeCkgRExPR19BU1NFUlQoeCkKCi8vIFRoaXMgY2xhc3MgbW9yZSBvciBsZXNzIHJl
cHJlc2VudHMgYSBwYXJ0aWN1bGFyIGxvZyBtZXNzYWdlLiAgWW91Ci8vIGNyZWF0ZSBhbiBpbnN0
YW5jZSBvZiBMb2dNZXNzYWdlIGFuZCB0aGVuIHN0cmVhbSBzdHVmZiB0byBpdC4KLy8gV2hlbiB5
b3UgZmluaXNoIHN0cmVhbWluZyB0byBpdCwgfkxvZ01lc3NhZ2UgaXMgY2FsbGVkIGFuZCB0aGUK
Ly8gZnVsbCBtZXNzYWdlIGdldHMgc3RyZWFtZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGRlc3RpbmF0
aW9uLgovLwovLyBZb3Ugc2hvdWxkbid0IGFjdHVhbGx5IHVzZSBMb2dNZXNzYWdlJ3MgY29uc3Ry
dWN0b3IgdG8gbG9nIHRoaW5ncywKLy8gdGhvdWdoLiAgWW91IHNob3VsZCB1c2UgdGhlIExPRygp
IG1hY3JvIChhbmQgdmFyaWFudHMgdGhlcmVvZikKLy8gYWJvdmUuCgovLyBGb3IgTE9HX0VSUk9S
IGFuZCBhYm92ZSwgYWx3YXlzIHByaW50IHRvIHN0ZGVyci4KY29uc3QgaW50IGtBbHdheXNQcmlu
dEVycm9yTGV2ZWwgPSBMT0dfRVJST1I7CgoKTG9nZ2luZ0Rlc3RpbmF0aW9uIGxvZ2dpbmdfZGVz
dGluYXRpb24gPSBMT0dfT05MWV9UT19TWVNURU1fREVCVUdfTE9HOwoKY29uc3QgY2hhciogY29u
c3QgbG9nX3NldmVyaXR5X25hbWVzW0xPR19OVU1fU0VWRVJJVElFU10gPSB7CiAgIklORk8iLCAi
V0FSTklORyIsICJFUlJPUiIsICJFUlJPUl9SRVBPUlQiLCAiRkFUQUwiIH07CgppbnQgbWluX2xv
Z19sZXZlbCA9IDA7CgpMb2dNZXNzYWdlSGFuZGxlckZ1bmN0aW9uIGxvZ19tZXNzYWdlX2hhbmRs
ZXIgPSBOVUxMOwpMb2dBc3NlcnRIYW5kbGVyRnVuY3Rpb24gbG9nX2Fzc2VydF9oYW5kbGVyID0g
TlVMTDsKTG9nUmVwb3J0SGFuZGxlckZ1bmN0aW9uIGxvZ19yZXBvcnRfaGFuZGxlciA9IE5VTEw7
CmNvbnN0IGludCBrTWF4RmlsdGVyZWRMb2dMZXZlbCA9IExPR19XQVJOSU5HOwpzdGQ6OnN0cmlu
ZyogbG9nX2ZpbHRlcl9wcmVmaXg7CgojZGVmaW5lIE1BWF9QQVRIIFBBVEhfTUFYCnR5cGVkZWYg
RklMRSogRmlsZUhhbmRsZTsKdHlwZWRlZiBwdGhyZWFkX211dGV4X3QqIE11dGV4SGFuZGxlOwoK
CnR5cGVkZWYgY2hhciBQYXRoQ2hhcjsKdHlwZWRlZiBzdGQ6OnN0cmluZyBQYXRoU3RyaW5nOwpQ
YXRoU3RyaW5nKiBsb2dfZmlsZV9uYW1lID0gTlVMTDsKCi8vIHRoaXMgZmlsZSBpcyBsYXppbHkg
b3BlbmVkIGFuZCB0aGUgaGFuZGxlIG1heSBiZSBOVUxMCkZpbGVIYW5kbGUgbG9nX2ZpbGUgPSBO
VUxMOwovLyB3aGF0IHNob3VsZCBiZSBwcmVwZW5kZWQgdG8gZWFjaCBtZXNzYWdlPwpib29sIGxv
Z19wcm9jZXNzX2lkID0gZmFsc2U7CmJvb2wgbG9nX3RocmVhZF9pZCA9IGZhbHNlOwpib29sIGxv
Z190aW1lc3RhbXAgPSB0cnVlOwpib29sIGxvZ190aWNrY291bnQgPSBmYWxzZTsKCnN0YXRpYyBM
b2NrSW1wbCogbG9nX2xvY2sgPSBOVUxMOwpMb2dMb2NraW5nU3RhdGUgbG9ja19sb2dfZmlsZSA9
IExPQ0tfTE9HX0ZJTEU7Cgpib29sIEluaXRpYWxpemVMb2dGaWxlSGFuZGxlKCkgewogIGlmIChs
b2dfZmlsZSkKICAgIHJldHVybiB0cnVlOwoKICBpZiAoIWxvZ19maWxlX25hbWUpIHsKICAgIC8v
IE5vYm9keSBoYXMgY2FsbGVkIEluaXRMb2dnaW5nIHRvIHNwZWNpZnkgYSBkZWJ1ZyBsb2cgZmls
ZSwgc28gaGVyZSB3ZQogICAgLy8gaW5pdGlhbGl6ZSB0aGUgbG9nIGZpbGUgbmFtZSB0byBhIGRl
ZmF1bHQuCiAgICAvLyBPbiBvdGhlciBwbGF0Zm9ybXMgd2UganVzdCB1c2UgdGhlIGN1cnJlbnQg
ZGlyZWN0b3J5LgogICAgbG9nX2ZpbGVfbmFtZSA9IG5ldyBzdGQ6OnN0cmluZygiZGVidWcubG9n
Iik7CiAgfQoKICBpZiAobG9nZ2luZ19kZXN0aW5hdGlvbiA9PSBMT0dfT05MWV9UT19GSUxFIHx8
CiAgICAgIGxvZ2dpbmdfZGVzdGluYXRpb24gPT0gTE9HX1RPX0JPVEhfRklMRV9BTkRfU1lTVEVN
X0RFQlVHX0xPRykgewogICAgbG9nX2ZpbGUgPSBmb3Blbihsb2dfZmlsZV9uYW1lLT5jX3N0cigp
LCAiYSIpOwogICAgaWYgKGxvZ19maWxlID09IE5VTEwpCiAgICAgIHJldHVybiBmYWxzZTsKICB9
CgogIHJldHVybiB0cnVlOwp9CgpwdGhyZWFkX211dGV4X3QgbG9nX211dGV4ID0gUFRIUkVBRF9N
VVRFWF9JTklUSUFMSVpFUjsKCmludDMyIEN1cnJlbnRQcm9jZXNzSWQoKSB7CiAgcmV0dXJuIGdl
dHBpZCgpOwp9CgppbnQzMiBDdXJyZW50VGhyZWFkSWQoKSB7CiAgcmV0dXJuIG1hY2hfdGhyZWFk
X3NlbGYoKTsKfQoKdWludDY0IFRpY2tDb3VudCgpIHsKICByZXR1cm4gbWFjaF9hYnNvbHV0ZV90
aW1lKCk7Cn0KCnZvaWQgRGlzcGxheURlYnVnTWVzc2FnZShjb25zdCBzdGQ6OnN0cmluZyYgc3Ry
KSB7CiAgaWYgKHN0ci5lbXB0eSgpKQogICAgcmV0dXJuOwoKICBmcHJpbnRmKHN0ZGVyciwgIiVz
XG4iLCBzdHIuY19zdHIoKSk7Cn0KCmNsYXNzIExvZ01lc3NhZ2UgewogcHVibGljOgpMb2dNZXNz
YWdlKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBMb2dTZXZlcml0eSBzZXZlcml0eSwKICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgY3RyKQogICAgOiBzZXZlcml0eV8oc2V2ZXJpdHkpIHsK
ICBJbml0KGZpbGUsIGxpbmUpOwp9CgpMb2dNZXNzYWdlKGNvbnN0IGNoYXIqIGZpbGUsIGludCBs
aW5lLCBjb25zdCBDaGVja09wU3RyaW5nJiByZXN1bHQpCiAgICA6IHNldmVyaXR5XyhMT0dfRkFU
QUwpIHsKICBJbml0KGZpbGUsIGxpbmUpOwogIHN0cmVhbV8gPDwgIkNoZWNrIGZhaWxlZDogIiA8
PCAoKnJlc3VsdC5zdHJfKTsKfQoKTG9nTWVzc2FnZShjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGlu
ZSwgTG9nU2V2ZXJpdHkgc2V2ZXJpdHksCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2hl
Y2tPcFN0cmluZyYgcmVzdWx0KQogICAgOiBzZXZlcml0eV8oc2V2ZXJpdHkpIHsKICBJbml0KGZp
bGUsIGxpbmUpOwogIHN0cmVhbV8gPDwgIkNoZWNrIGZhaWxlZDogIiA8PCAoKnJlc3VsdC5zdHJf
KTsKfQoKTG9nTWVzc2FnZShjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSkKICAgICA6IHNldmVy
aXR5XyhMT0dfSU5GTykgewogIEluaXQoZmlsZSwgbGluZSk7Cn0KCkxvZ01lc3NhZ2UoY29uc3Qg
Y2hhciogZmlsZSwgaW50IGxpbmUsIExvZ1NldmVyaXR5IHNldmVyaXR5KQogICAgOiBzZXZlcml0
eV8oc2V2ZXJpdHkpIHsKICBJbml0KGZpbGUsIGxpbmUpOwp9CgoKfkxvZ01lc3NhZ2UoKSB7CiAg
Ly8gVE9ETyhicmV0dHcpIG1vZGlmeSB0aGUgbWFjcm9zIHNvIHRoYXQgbm90aGluZyBpcyBleGVj
dXRlZCB3aGVuIHRoZSBsb2cKICAvLyBsZXZlbCBpcyB0b28gaGlnaC4KICBpZiAoc2V2ZXJpdHlf
IDwgbWluX2xvZ19sZXZlbCkKICAgIHJldHVybjsKCiAgc3RkOjpzdHJpbmcgc3RyX25ld2xpbmUo
c3RyZWFtXy5zdHIoKSk7CiAgc3RyX25ld2xpbmUuYXBwZW5kKCJcbiIpOwogIC8vIEdpdmUgYW55
IGxvZyBtZXNzYWdlIGhhbmRsZXIgZmlyc3QgZGlicyBvbiB0aGUgbWVzc2FnZS4KICBpZiAobG9n
X21lc3NhZ2VfaGFuZGxlciAmJiBsb2dfbWVzc2FnZV9oYW5kbGVyKHNldmVyaXR5Xywgc3RyX25l
d2xpbmUpKQogICAgcmV0dXJuOwoKICBpZiAobG9nX2ZpbHRlcl9wcmVmaXggJiYgc2V2ZXJpdHlf
IDw9IGtNYXhGaWx0ZXJlZExvZ0xldmVsICYmCiAgICAgIHN0cl9uZXdsaW5lLmNvbXBhcmUobWVz
c2FnZV9zdGFydF8sIGxvZ19maWx0ZXJfcHJlZml4LT5zaXplKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9nX2ZpbHRlcl9wcmVmaXgtPmRhdGEoKSkgIT0gMCkgewogICAgcmV0dXJuOwog
IH0KCiAgaWYgKGxvZ2dpbmdfZGVzdGluYXRpb24gPT0gTE9HX09OTFlfVE9fU1lTVEVNX0RFQlVH
X0xPRyB8fAogICAgICBsb2dnaW5nX2Rlc3RpbmF0aW9uID09IExPR19UT19CT1RIX0ZJTEVfQU5E
X1NZU1RFTV9ERUJVR19MT0cpIHsKICAgIC8vIFRPRE8oZXJpa2theSk6IHRoaXMgaW50ZXJmZXJl
cyB3aXRoIHRoZSBsYXlvdXQgdGVzdHMgc2luY2UgaXQgZ3JhYnMKICAgIC8vIHN0ZGVyciBhbmQg
c3Rkb3V0IGFuZCBkaWZmcyB0aGVtIGFnYWluc3Qga25vd24gZGF0YS4gT3VyIGluZm8gYW5kIHdh
cm4KICAgIC8vIGxvZ3MgYWRkIG5vaXNlIHRvIHRoYXQuICBJZGVhbGx5LCB0aGUgbGF5b3V0IHRl
c3RzIHdvdWxkIHNldCB0aGUgbG9nCiAgICAvLyBsZXZlbCB0byBpZ25vcmUgYW55dGhpbmcgYmVs
b3cgZXJyb3IuICBXaGVuIHRoYXQgaGFwcGVucywgd2Ugc2hvdWxkCiAgICAvLyB0YWtlIHRoaXMg
ZnByaW50ZiBvdXQgb2YgdGhlICNlbHNlIHNvIHRoYXQgV2luZG93cyB1c2VycyBjYW4gYmVuZWZp
dAogICAgLy8gZnJvbSB0aGUgb3V0cHV0IHdoZW4gcnVubmluZyB0ZXN0cyBmcm9tIHRoZSBjb21t
YW5kLWxpbmUuICBJbiB0aGUKICAgIC8vIG1lYW50aW1lLCB3ZSBsZWF2ZSB0aGlzIGluIGZvciBN
YWMgYW5kIExpbnV4LCBidXQgdW50aWwgdGhpcyBpcyBmaXhlZAogICAgLy8gdGhleSB3b24ndCBi
ZSBhYmxlIHRvIHBhc3MgYW55IGxheW91dCB0ZXN0cyB0aGF0IGhhdmUgaW5mbyBvciB3YXJuIGxv
Z3MuCiAgICAvLyBTZWUgaHR0cDovL2IvMTM0MzY0NwogICAgZnByaW50ZihzdGRlcnIsICIlcyIs
IHN0cl9uZXdsaW5lLmNfc3RyKCkpOwogIH0gZWxzZSBpZiAoc2V2ZXJpdHlfID49IGtBbHdheXNQ
cmludEVycm9yTGV2ZWwpIHsKICAgIC8vIFdoZW4gd2UncmUgb25seSBvdXRwdXR0aW5nIHRvIGEg
bG9nIGZpbGUsIGFib3ZlIGEgY2VydGFpbiBsb2cgbGV2ZWwsIHdlCiAgICAvLyBzaG91bGQgc3Rp
bGwgb3V0cHV0IHRvIHN0ZGVyciBzbyB0aGF0IHdlIGNhbiBiZXR0ZXIgZGV0ZWN0IGFuZCBkaWFn
bm9zZQogICAgLy8gcHJvYmxlbXMgd2l0aCB1bml0IHRlc3RzLCBlc3BlY2lhbGx5IG9uIHRoZSBi
dWlsZGJvdHMuCiAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwgc3RyX25ld2xpbmUuY19zdHIoKSk7
CiAgfQoKICAvLyB3cml0ZSB0byBsb2cgZmlsZQogIGlmIChsb2dnaW5nX2Rlc3RpbmF0aW9uICE9
IExPR19OT05FICYmCiAgICAgIGxvZ2dpbmdfZGVzdGluYXRpb24gIT0gTE9HX09OTFlfVE9fU1lT
VEVNX0RFQlVHX0xPRyAmJgogICAgICBJbml0aWFsaXplTG9nRmlsZUhhbmRsZSgpKSB7CiAgICAv
LyBXZSBjYW4gaGF2ZSBtdWx0aXBsZSB0aHJlYWRzIGFuZC9vciBwcm9jZXNzZXMsIHNvIHRyeSB0
byBwcmV2ZW50IHRoZW0KICAgIC8vIGZyb20gY2xvYmJlcmluZyBlYWNoIG90aGVyJ3Mgd3JpdGVz
LgogICAgaWYgKGxvY2tfbG9nX2ZpbGUgPT0gTE9DS19MT0dfRklMRSkgewogICAgICAvLyBFbnN1
cmUgdGhhdCB0aGUgbXV0ZXggaXMgaW5pdGlhbGl6ZWQgaW4gY2FzZSB0aGUgY2xpZW50IGFwcCBk
aWQgbm90CiAgICAgIC8vIGNhbGwgSW5pdExvZ2dpbmcuIFRoaXMgaXMgbm90IHRocmVhZCBzYWZl
LiBTZWUgYmVsb3cuCgogICAgICBwdGhyZWFkX211dGV4X2xvY2soJmxvZ19tdXRleCk7CiAgICB9
IGVsc2UgewogICAgICAvLyB1c2UgdGhlIGxvY2sKICAgICAgaWYgKCFsb2dfbG9jaykgewogICAg
ICAgIC8vIFRoZSBjbGllbnQgYXBwIGRpZCBub3QgY2FsbCBJbml0TG9nZ2luZywgYW5kIHNvIHRo
ZSBsb2NrIGhhcyBub3QKICAgICAgICAvLyBiZWVuIGNyZWF0ZWQuIFdlIGRvIHRoaXMgb24gZGVt
YW5kLCBidXQgaWYgdHdvIHRocmVhZHMgdHJ5IHRvIGRvCiAgICAgICAgLy8gdGhpcyBhdCB0aGUg
c2FtZSB0aW1lLCB0aGVyZSB3aWxsIGJlIGEgcmFjZSBjb25kaXRpb24gdG8gY3JlYXRlCiAgICAg
ICAgLy8gdGhlIGxvY2suIFRoaXMgaXMgd2h5IEluaXRMb2dnaW5nIHNob3VsZCBiZSBjYWxsZWQg
ZnJvbSB0aGUgbWFpbgogICAgICAgIC8vIHRocmVhZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGV4ZWN1
dGlvbi4KICAgICAgICBsb2dfbG9jayA9IG5ldyBMb2NrSW1wbCgpOwogICAgICB9CiAgICAgIGxv
Z19sb2NrLT5Mb2NrKCk7CiAgICB9CgogICAgZnByaW50Zihsb2dfZmlsZSwgIiVzIiwgc3RyX25l
d2xpbmUuY19zdHIoKSk7CgogICAgaWYgKGxvY2tfbG9nX2ZpbGUgPT0gTE9DS19MT0dfRklMRSkg
ewogICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmbG9nX211dGV4KTsKICAgIH0gZWxzZSB7CiAg
ICAgIGxvZ19sb2NrLT5VbmxvY2soKTsKICAgIH0KICB9CgogIGlmIChzZXZlcml0eV8gPT0gTE9H
X0ZBVEFMKSB7CiAgICAvLyBkaXNwbGF5IGEgbWVzc2FnZSBvciBicmVhayBpbnRvIHRoZSBkZWJ1
Z2dlciBvbiBhIGZhdGFsIGVycm9yCiAgICBpZiAoRGVidWdVdGlsOjpCZWluZ0RlYnVnZ2VkKCkp
IHsKICAgICAgRGVidWdVdGlsOjpCcmVha0RlYnVnZ2VyKCk7CiAgICB9IGVsc2UgewojaWZuZGVm
IE5ERUJVRwogICAgICAvLyBEdW1wIGEgc3RhY2sgdHJhY2Ugb24gYSBmYXRhbC4KICAgICAgU3Rh
Y2tUcmFjZSB0cmFjZTsKICAgICAgc3RyZWFtXyA8PCAiXG4iOyAgLy8gTmV3bGluZSB0byBzZXBh
cmF0ZSBmcm9tIGxvZyBtZXNzYWdlLgogICAgICB0cmFjZS5PdXRwdXRUb1N0cmVhbSgmc3RyZWFt
Xyk7CiNlbmRpZgoKICAgICAgaWYgKGxvZ19hc3NlcnRfaGFuZGxlcikgewogICAgICAgIC8vIG1h
a2UgYSBjb3B5IG9mIHRoZSBzdHJpbmcgZm9yIHRoZSBoYW5kbGVyIG91dCBvZiBwYXJhbm9pYQog
ICAgICAgIGxvZ19hc3NlcnRfaGFuZGxlcihzdGQ6OnN0cmluZyhzdHJlYW1fLnN0cigpKSk7CiAg
ICAgIH0gZWxzZSB7CiAgICAgICAgLy8gRG9uJ3QgdXNlIHRoZSBzdHJpbmcgd2l0aCB0aGUgbmV3
bGluZSwgZ2V0IGEgZnJlc2ggdmVyc2lvbiB0byBzZW5kIHRvCiAgICAgICAgLy8gdGhlIGRlYnVn
IG1lc3NhZ2UgcHJvY2Vzcy4gV2UgYWxzbyBkb24ndCBkaXNwbGF5IGFzc2VydGlvbnMgdG8gdGhl
CiAgICAgICAgLy8gdXNlciBpbiByZWxlYXNlIG1vZGUuIFRoZSBlbmR1c2VyIGNhbid0IGRvIGFu
eXRoaW5nIHdpdGggdGhpcwogICAgICAgIC8vIGluZm9ybWF0aW9uLCBhbmQgZGlzcGxheWluZyBt
ZXNzYWdlIGJveGVzIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzCiAgICAgICAgLy8gaG9zZWQgY2Fu
IGNhdXNlIGFkZGl0aW9uYWwgcHJvYmxlbXMuCiNpZm5kZWYgTkRFQlVHCiAgICAgICAgRGlzcGxh
eURlYnVnTWVzc2FnZShzdHJlYW1fLnN0cigpKTsKI2VuZGlmCiAgICAgICAgLy8gQ3Jhc2ggdGhl
IHByb2Nlc3MgdG8gZ2VuZXJhdGUgYSBkdW1wLgogICAgICAgIERlYnVnVXRpbDo6QnJlYWtEZWJ1
Z2dlcigpOwogICAgICB9CiAgICB9CiAgfSBlbHNlIGlmIChzZXZlcml0eV8gPT0gTE9HX0VSUk9S
X1JFUE9SVCkgewogICAgLy8gV2UgYXJlIGhlcmUgb25seSBpZiB0aGUgdXNlciBydW5zIHdpdGgg
LS1lbmFibGUtZGNoZWNrIGluIHJlbGVhc2UgbW9kZS4KICAgIGlmIChsb2dfcmVwb3J0X2hhbmRs
ZXIpIHsKICAgICAgbG9nX3JlcG9ydF9oYW5kbGVyKHN0ZDo6c3RyaW5nKHN0cmVhbV8uc3RyKCkp
KTsKICAgIH0gZWxzZSB7CiAgICAgIERpc3BsYXlEZWJ1Z01lc3NhZ2Uoc3RyZWFtXy5zdHIoKSk7
CiAgICB9CiAgfQp9CiAgc3RkOjpvc3RyZWFtJiBzdHJlYW0oKSB7IHJldHVybiBzdHJlYW1fOyB9
CgogcHJpdmF0ZToKLy8gd3JpdGVzIHRoZSBjb21tb24gaGVhZGVyIGluZm8gdG8gdGhlIHN0cmVh
bQp2b2lkIEluaXQoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUpIHsKICAvLyBsb2cgb25seSB0
aGUgZmlsZW5hbWUKICBjb25zdCBjaGFyKiBsYXN0X3NsYXNoID0gc3RycmNocihmaWxlLCAnXFwn
KTsKICBpZiAobGFzdF9zbGFzaCkKICAgIGZpbGUgPSBsYXN0X3NsYXNoICsgMTsKCiAgLy8gVE9E
TyhkYXJpbik6IEl0IG1pZ2h0IGJlIG5pY2UgaWYgdGhlIGNvbHVtbnMgd2VyZSBmaXhlZCB3aWR0
aC4KCiAgc3RyZWFtXyA8PCAgJ1snOwogIGlmIChsb2dfcHJvY2Vzc19pZCkKICAgIHN0cmVhbV8g
PDwgQ3VycmVudFByb2Nlc3NJZCgpIDw8ICc6JzsKICBpZiAobG9nX3RocmVhZF9pZCkKICAgIHN0
cmVhbV8gPDwgQ3VycmVudFRocmVhZElkKCkgPDwgJzonOwogIGlmIChsb2dfdGltZXN0YW1wKSB7
CiAgICB0aW1lX3QgdCA9IHRpbWUoTlVMTCk7CiAgICBzdHJ1Y3QgdG0gbG9jYWxfdGltZSA9IHsw
fTsKI2lmIF9NU0NfVkVSID49IDE0MDAKICAgIGxvY2FsdGltZV9zKCZsb2NhbF90aW1lLCAmdCk7
CiNlbHNlCiAgICBsb2NhbHRpbWVfcigmdCwgJmxvY2FsX3RpbWUpOwojZW5kaWYKICAgIHN0cnVj
dCB0bSogdG1fdGltZSA9ICZsb2NhbF90aW1lOwovKiAgICAKICAgICAgVE9ETyhnbGlkZXIpOgog
ICAgc3RyZWFtXyA8PCBzdGQ6OnNldGZpbGwoJzAnKQogICAgICAgICAgICA8PCBzdGQ6OnNldHco
MikgPDwgMSArIHRtX3RpbWUtPnRtX21vbgogICAgICAgICAgICA8PCBzdGQ6OnNldHcoMikgPDwg
dG1fdGltZS0+dG1fbWRheQogICAgICAgICAgICA8PCAnLycKICAgICAgICAgICAgPDwgc3RkOjpz
ZXR3KDIpIDw8IHRtX3RpbWUtPnRtX2hvdXIKICAgICAgICAgICAgPDwgc3RkOjpzZXR3KDIpIDw8
IHRtX3RpbWUtPnRtX21pbgogICAgICAgICAgICA8PCBzdGQ6OnNldHcoMikgPDwgdG1fdGltZS0+
dG1fc2VjCiAgICAgICAgICAgIDw8ICc6JzsqLwogIH0KICBpZiAobG9nX3RpY2tjb3VudCkKICAg
IHN0cmVhbV8gPDwgVGlja0NvdW50KCkgPDwgJzonOwogIHN0cmVhbV8gPDwgbG9nX3NldmVyaXR5
X25hbWVzW3NldmVyaXR5X10gPDwgIjoiIDw8IGZpbGUgPDwKICAgICAgICAgICAgICIoIiA8PCBs
aW5lIDw8ICIpXSAiOwoKICBtZXNzYWdlX3N0YXJ0XyA9IHN0cmVhbV8udGVsbHAoKTsKfQoKCgog
IExvZ1NldmVyaXR5IHNldmVyaXR5XzsKICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtXzsKICBz
aXplX3QgbWVzc2FnZV9zdGFydF87ICAvLyBPZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRoZSBtZXNz
YWdlIChwYXN0IHByZWZpeAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluZm8pLgoKICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oTG9nTWVzc2FnZSk7Cn07CgovLyBBIG5vbi1tYWNybyBp
bnRlcmZhY2UgdG8gdGhlIGxvZyBmYWNpbGl0eTsgKHVzZWZ1bAovLyB3aGVuIHRoZSBsb2dnaW5n
IGxldmVsIGlzIG5vdCBhIGNvbXBpbGUtdGltZSBjb25zdGFudCkuCmlubGluZSB2b2lkIExvZ0F0
TGV2ZWwoaW50IGNvbnN0IGxvZ19sZXZlbCwgc3RkOjpzdHJpbmcgY29uc3QgJm1zZykgewogIExv
Z01lc3NhZ2UoX19GSUxFX18sIF9fTElORV9fLCBsb2dfbGV2ZWwpLnN0cmVhbSgpIDw8IG1zZzsK
fQoKLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGV4cGxpY2l0bHkgaWdub3JlIHZhbHVlcyBpbiB0
aGUgY29uZGl0aW9uYWwKLy8gbG9nZ2luZyBtYWNyb3MuICBUaGlzIGF2b2lkcyBjb21waWxlciB3
YXJuaW5ncyBsaWtlICJ2YWx1ZSBjb21wdXRlZAovLyBpcyBub3QgdXNlZCIgYW5kICJzdGF0ZW1l
bnQgaGFzIG5vIGVmZmVjdCIuCmNsYXNzIExvZ01lc3NhZ2VWb2lkaWZ5IHsKIHB1YmxpYzoKICBM
b2dNZXNzYWdlVm9pZGlmeSgpIHsgfQogIC8vIFRoaXMgaGFzIHRvIGJlIGFuIG9wZXJhdG9yIHdp
dGggYSBwcmVjZWRlbmNlIGxvd2VyIHRoYW4gPDwgYnV0CiAgLy8gaGlnaGVyIHRoYW4gPzoKICB2
b2lkIG9wZXJhdG9yJihzdGQ6Om9zdHJlYW0mKSB7IH0KfTsKCnR5cGVkZWYgaW50IFN5c3RlbUVy
cm9yQ29kZTsKCi8vIEFsaWFzIGZvciA6OkdldExhc3RFcnJvcigpIG9uIFdpbmRvd3MgYW5kIGVy
cm5vIG9uIFBPU0lYLiBBdm9pZHMgaGF2aW5nIHRvCi8vIHB1bGwgaW4gd2luZG93cy5oIGp1c3Qg
Zm9yIEdldExhc3RFcnJvcigpIGFuZCBEV09SRC4KU3lzdGVtRXJyb3JDb2RlIEdldExhc3RTeXN0
ZW1FcnJvckNvZGUoKTsKCi8vIEFwcGVuZHMgYSBmb3JtYXR0ZWQgc3lzdGVtIG1lc3NhZ2Ugb2Yg
dGhlIGVycm5vIHR5cGUKY2xhc3MgRXJybm9Mb2dNZXNzYWdlIHsKIHB1YmxpYzoKICBFcnJub0xv
Z01lc3NhZ2UoY29uc3QgY2hhciogZmlsZSwKICAgICAgICAgICAgICAgICAgaW50IGxpbmUsCiAg
ICAgICAgICAgICAgICAgIExvZ1NldmVyaXR5IHNldmVyaXR5LAogICAgICAgICAgICAgICAgICBT
eXN0ZW1FcnJvckNvZGUgZXJyKTsKCiAgc3RkOjpvc3RyZWFtJiBzdHJlYW0oKSB7IHJldHVybiBs
b2dfbWVzc2FnZV8uc3RyZWFtKCk7IH0KCiAgLy8gQXBwZW5kcyB0aGUgZXJyb3IgbWVzc2FnZSBi
ZWZvcmUgZGVzdHJ1Y3RpbmcgdGhlIGVuY2Fwc3VsYXRlZCBjbGFzcy4KICB+RXJybm9Mb2dNZXNz
YWdlKCk7CgogcHJpdmF0ZToKICBTeXN0ZW1FcnJvckNvZGUgZXJyXzsKICBMb2dNZXNzYWdlIGxv
Z19tZXNzYWdlXzsKCiAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEVycm5vTG9nTWVzc2FnZSk7
Cn07CgovLyBDbG9zZXMgdGhlIGxvZyBmaWxlIGV4cGxpY2l0bHkgaWYgb3Blbi4KLy8gTk9URTog
U2luY2UgdGhlIGxvZyBmaWxlIGlzIG9wZW5lZCBhcyBuZWNlc3NhcnkgYnkgdGhlIGFjdGlvbiBv
ZiBsb2dnaW5nCi8vICAgICAgIHN0YXRlbWVudHMsIHRoZXJlJ3Mgbm8gZ3VhcmFudGVlIHRoYXQg
aXQgd2lsbCBzdGF5IGNsb3NlZAovLyAgICAgICBhZnRlciB0aGlzIGNhbGwuCnZvaWQgQ2xvc2VM
b2dGaWxlKCk7Cgp9ICAvLyBuYW1lc3BhY2UgbG9nZ2luZwoKLy8gVGhlc2UgZnVuY3Rpb25zIGFy
ZSBwcm92aWRlZCBhcyBhIGNvbnZlbmllbmNlIGZvciBsb2dnaW5nLCB3aGljaCBpcyB3aGVyZSB3
ZQovLyB1c2Ugc3RyZWFtcyAoaXQgaXMgYWdhaW5zdCBHb29nbGUgc3R5bGUgdG8gdXNlIHN0cmVh
bXMgaW4gb3RoZXIgcGxhY2VzKS4gSXQKLy8gaXMgZGVzaWduZWQgdG8gYWxsb3cgeW91IHRvIGVt
aXQgbm9uLUFTQ0lJIFVuaWNvZGUgc3RyaW5ncyB0byB0aGUgbG9nIGZpbGUsCi8vIHdoaWNoIGlz
IG5vcm1hbGx5IEFTQ0lJLiBJdCBpcyByZWxhdGl2ZWx5IHNsb3csIHNvIHRyeSBub3QgdG8gdXNl
IGl0IGZvcgovLyBjb21tb24gY2FzZXMuIE5vbi1BU0NJSSBjaGFyYWN0ZXJzIHdpbGwgYmUgY29u
dmVydGVkIHRvIFVURi04IGJ5IHRoZXNlCi8vIG9wZXJhdG9ycy4Kc3RkOjpvc3RyZWFtJiBvcGVy
YXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCB3Y2hhcl90KiB3c3RyKTsKaW5saW5lIHN0
ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3Qgc3RkOjp3c3Ry
aW5nJiB3c3RyKSB7CiAgcmV0dXJuIG91dCA8PCB3c3RyLmNfc3RyKCk7Cn0KCi8vIFRoZSBOT1RJ
TVBMRU1FTlRFRCgpIG1hY3JvIGFubm90YXRlcyBjb2RlcGF0aHMgd2hpY2ggaGF2ZQovLyBub3Qg
YmVlbiBpbXBsZW1lbnRlZCB5ZXQuCi8vCi8vIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1h
Y3JvIGlzIGNvbnRyb2xsZWQgYnkgTk9USU1QTEVNRU5URURfUE9MSUNZOgovLyAgIDAgLS0gRG8g
bm90aGluZyAoc3RyaXBwZWQgYnkgY29tcGlsZXIpCi8vICAgMSAtLSBXYXJuIGF0IGNvbXBpbGUg
dGltZQovLyAgIDIgLS0gRmFpbCBhdCBjb21waWxlIHRpbWUKLy8gICAzIC0tIEZhaWwgYXQgcnVu
dGltZSAoRENIRUNLKQovLyAgIDQgLS0gW2RlZmF1bHRdIExPRyhFUlJPUikgYXQgcnVudGltZQov
LyAgIDUgLS0gTE9HKEVSUk9SKSBhdCBydW50aW1lLCBvbmx5IG9uY2UgcGVyIGNhbGwtc2l0ZQoK
I2lmbmRlZiBOT1RJTVBMRU1FTlRFRF9QT0xJQ1kKLy8gU2VsZWN0IGRlZmF1bHQgcG9saWN5OiBM
T0coRVJST1IpCiNkZWZpbmUgTk9USU1QTEVNRU5URURfUE9MSUNZIDQKI2VuZGlmCgojaWYgZGVm
aW5lZChDT01QSUxFUl9HQ0MpCi8vIE9uIExpbnV4LCB3aXRoIEdDQywgd2UgY2FuIHVzZSBfX1BS
RVRUWV9GVU5DVElPTl9fIHRvIGdldCB0aGUgZGVtYW5nbGVkIG5hbWUKLy8gb2YgdGhlIGN1cnJl
bnQgZnVuY3Rpb24gaW4gdGhlIE5PVElNUExFTUVOVEVEIG1lc3NhZ2UuCiNkZWZpbmUgTk9USU1Q
TEVNRU5URURfTVNHICJOb3QgaW1wbGVtZW50ZWQgcmVhY2hlZCBpbiAiIDw8IF9fUFJFVFRZX0ZV
TkNUSU9OX18KI2Vsc2UKI2RlZmluZSBOT1RJTVBMRU1FTlRFRF9NU0cgIk5PVCBJTVBMRU1FTlRF
RCIKI2VuZGlmCgojaWYgTk9USU1QTEVNRU5URURfUE9MSUNZID09IDAKI2RlZmluZSBOT1RJTVBM
RU1FTlRFRCgpIDsKI2VsaWYgTk9USU1QTEVNRU5URURfUE9MSUNZID09IDEKLy8gVE9ETywgZmln
dXJlIG91dCBob3cgdG8gZ2VuZXJhdGUgYSB3YXJuaW5nCiNkZWZpbmUgTk9USU1QTEVNRU5URUQo
KSBDT01QSUxFX0FTU0VSVChmYWxzZSwgTk9UX0lNUExFTUVOVEVEKQojZWxpZiBOT1RJTVBMRU1F
TlRFRF9QT0xJQ1kgPT0gMgojZGVmaW5lIE5PVElNUExFTUVOVEVEKCkgQ09NUElMRV9BU1NFUlQo
ZmFsc2UsIE5PVF9JTVBMRU1FTlRFRCkKI2VsaWYgTk9USU1QTEVNRU5URURfUE9MSUNZID09IDMK
I2RlZmluZSBOT1RJTVBMRU1FTlRFRCgpIE5PVFJFQUNIRUQoKQojZWxpZiBOT1RJTVBMRU1FTlRF
RF9QT0xJQ1kgPT0gNAojZGVmaW5lIE5PVElNUExFTUVOVEVEKCkgTE9HKEVSUk9SKSA8PCBOT1RJ
TVBMRU1FTlRFRF9NU0cKI2VsaWYgTk9USU1QTEVNRU5URURfUE9MSUNZID09IDUKI2RlZmluZSBO
T1RJTVBMRU1FTlRFRCgpIGRvIHtcCiAgc3RhdGljIGludCBjb3VudCA9IDA7XAogIExPR19JRihF
UlJPUiwgMCA9PSBjb3VudCsrKSA8PCBOT1RJTVBMRU1FTlRFRF9NU0c7XAp9IHdoaWxlKDApCiNl
bmRpZgoKI2VuZGlmICAvLyBCQVNFX0xPR0dJTkdfSF8KCiNpZm5kZWYgQkFTRV9USU1FX0hfCiNk
ZWZpbmUgQkFTRV9USU1FX0hfCgoKCi8vLy8vLy8vLy9DT0RFCgoKbmFtZXNwYWNlIGJhc2UgewoK
Y2xhc3MgVGltZTsKY2xhc3MgVGltZVRpY2tzOwoKLy8gVGhpcyB1bml0IHRlc3QgZG9lcyBhIGxv
dCBvZiBtYW51YWwgdGltZSBtYW5pcHVsYXRpb24uCmNsYXNzIFBhZ2VMb2FkVHJhY2tlclVuaXRU
ZXN0OwoKLy8gVGltZURlbHRhIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKY2xhc3MgVGltZURlbHRhIHsKIHB1YmxpYzoK
ICBUaW1lRGVsdGEoKSA6IGRlbHRhXygwKSB7CiAgfQoKICAvLyBDb252ZXJ0cyB1bml0cyBvZiB0
aW1lIHRvIFRpbWVEZWx0YXMuCiAgc3RhdGljIFRpbWVEZWx0YSBGcm9tRGF5cyhpbnQ2NCBkYXlz
KTsKICBzdGF0aWMgVGltZURlbHRhIEZyb21Ib3VycyhpbnQ2NCBob3Vycyk7CiAgc3RhdGljIFRp
bWVEZWx0YSBGcm9tTWludXRlcyhpbnQ2NCBtaW51dGVzKTsKICBzdGF0aWMgVGltZURlbHRhIEZy
b21TZWNvbmRzKGludDY0IHNlY3MpOwogIHN0YXRpYyBUaW1lRGVsdGEgRnJvbU1pbGxpc2Vjb25k
cyhpbnQ2NCBtcyk7CiAgc3RhdGljIFRpbWVEZWx0YSBGcm9tTWljcm9zZWNvbmRzKGludDY0IHVz
KTsKCiAgLy8gUmV0dXJucyB0aGUgaW50ZXJuYWwgbnVtZXJpYyB2YWx1ZSBvZiB0aGUgVGltZURl
bHRhIG9iamVjdC4gUGxlYXNlIGRvbid0CiAgLy8gdXNlIHRoaXMgYW5kIGRvIGFyaXRobWV0aWMg
b24gaXQsIGFzIGl0IGlzIG1vcmUgZXJyb3IgcHJvbmUgdGhhbiB1c2luZyB0aGUKICAvLyBwcm92
aWRlZCBvcGVyYXRvcnMuCiAgaW50NjQgVG9JbnRlcm5hbFZhbHVlKCkgY29uc3QgewogICAgcmV0
dXJuIGRlbHRhXzsKICB9CgogIC8vIFJldHVybnMgdGhlIHRpbWUgZGVsdGEgaW4gc29tZSB1bml0
LiBUaGUgRiB2ZXJzaW9ucyByZXR1cm4gYSBmbG9hdGluZwogIC8vIHBvaW50IHZhbHVlLCB0aGUg
InJlZ3VsYXIiIHZlcnNpb25zIHJldHVybiBhIHJvdW5kZWQtZG93biB2YWx1ZS4KICAvLwogIC8v
IEluTWlsbGlzZWNvbmRzUm91bmRlZFVwKCkgaW5zdGVhZCByZXR1cm5zIGFuIGludGVnZXIgdGhh
dCBpcyByb3VuZGVkIHVwCiAgLy8gdG8gdGhlIG5leHQgZnVsbCBtaWxsaXNlY29uZC4KICBpbnQg
SW5EYXlzKCkgY29uc3Q7CiAgaW50IEluSG91cnMoKSBjb25zdDsKICBpbnQgSW5NaW51dGVzKCkg
Y29uc3Q7CiAgZG91YmxlIEluU2Vjb25kc0YoKSBjb25zdDsKICBpbnQ2NCBJblNlY29uZHMoKSBj
b25zdDsKICBkb3VibGUgSW5NaWxsaXNlY29uZHNGKCkgY29uc3Q7CiAgaW50NjQgSW5NaWxsaXNl
Y29uZHMoKSBjb25zdDsKCiAgaW50NjQgSW5NaWxsaXNlY29uZHNSb3VuZGVkVXAoKSBjb25zdDsK
ICBpbnQ2NCBJbk1pY3Jvc2Vjb25kcygpIGNvbnN0IHsKICByZXR1cm4gZGVsdGFfOwp9CgoKICBU
aW1lRGVsdGEmIG9wZXJhdG9yPShUaW1lRGVsdGEgb3RoZXIpIHsKICAgIGRlbHRhXyA9IG90aGVy
LmRlbHRhXzsKICAgIHJldHVybiAqdGhpczsKICB9CgogIC8vIENvbXB1dGF0aW9ucyB3aXRoIG90
aGVyIGRlbHRhcy4KICBUaW1lRGVsdGEgb3BlcmF0b3IrKFRpbWVEZWx0YSBvdGhlcikgY29uc3Qg
ewogICAgcmV0dXJuIFRpbWVEZWx0YShkZWx0YV8gKyBvdGhlci5kZWx0YV8pOwogIH0KICBUaW1l
RGVsdGEgb3BlcmF0b3ItKFRpbWVEZWx0YSBvdGhlcikgY29uc3QgewogICAgcmV0dXJuIFRpbWVE
ZWx0YShkZWx0YV8gLSBvdGhlci5kZWx0YV8pOwogIH0KCiAgVGltZURlbHRhJiBvcGVyYXRvcis9
KFRpbWVEZWx0YSBvdGhlcikgewogICAgZGVsdGFfICs9IG90aGVyLmRlbHRhXzsKICAgIHJldHVy
biAqdGhpczsKICB9CiAgVGltZURlbHRhJiBvcGVyYXRvci09KFRpbWVEZWx0YSBvdGhlcikgewog
ICAgZGVsdGFfIC09IG90aGVyLmRlbHRhXzsKICAgIHJldHVybiAqdGhpczsKICB9CiAgVGltZURl
bHRhIG9wZXJhdG9yLSgpIGNvbnN0IHsKICAgIHJldHVybiBUaW1lRGVsdGEoLWRlbHRhXyk7CiAg
fQoKICAvLyBDb21wdXRhdGlvbnMgd2l0aCBpbnRzLCBub3RlIHRoYXQgd2Ugb25seSBhbGxvdyBt
dWx0aXBsaWNhdGl2ZSBvcGVyYXRpb25zCiAgLy8gd2l0aCBpbnRzLCBhbmQgYWRkaXRpdmUgb3Bl
cmF0aW9ucyB3aXRoIG90aGVyIGRlbHRhcy4KICBUaW1lRGVsdGEgb3BlcmF0b3IqKGludDY0IGEp
IGNvbnN0IHsKICAgIHJldHVybiBUaW1lRGVsdGEoZGVsdGFfICogYSk7CiAgfQogIFRpbWVEZWx0
YSBvcGVyYXRvci8oaW50NjQgYSkgY29uc3QgewogICAgcmV0dXJuIFRpbWVEZWx0YShkZWx0YV8g
LyBhKTsKICB9CiAgVGltZURlbHRhJiBvcGVyYXRvcio9KGludDY0IGEpIHsKICAgIGRlbHRhXyAq
PSBhOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBUaW1lRGVsdGEmIG9wZXJhdG9yLz0oaW50NjQg
YSkgewogICAgZGVsdGFfIC89IGE7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGludDY0IG9wZXJh
dG9yLyhUaW1lRGVsdGEgYSkgY29uc3QgewogICAgcmV0dXJuIGRlbHRhXyAvIGEuZGVsdGFfOwog
IH0KCiAgLy8gRGVmaW5lZCBiZWxvdyBiZWNhdXNlIGl0IGRlcGVuZHMgb24gdGhlIGRlZmluaXRp
b24gb2YgdGhlIG90aGVyIGNsYXNzZXMuCiAgVGltZSBvcGVyYXRvcisoVGltZSB0KSBjb25zdDsK
ICBUaW1lVGlja3Mgb3BlcmF0b3IrKFRpbWVUaWNrcyB0KSBjb25zdDsKCiAgLy8gQ29tcGFyaXNv
biBvcGVyYXRvcnMuCiAgYm9vbCBvcGVyYXRvcj09KFRpbWVEZWx0YSBvdGhlcikgY29uc3Qgewog
ICAgcmV0dXJuIGRlbHRhXyA9PSBvdGhlci5kZWx0YV87CiAgfQogIGJvb2wgb3BlcmF0b3IhPShU
aW1lRGVsdGEgb3RoZXIpIGNvbnN0IHsKICAgIHJldHVybiBkZWx0YV8gIT0gb3RoZXIuZGVsdGFf
OwogIH0KICBib29sIG9wZXJhdG9yPChUaW1lRGVsdGEgb3RoZXIpIGNvbnN0IHsKICAgIHJldHVy
biBkZWx0YV8gPCBvdGhlci5kZWx0YV87CiAgfQogIGJvb2wgb3BlcmF0b3I8PShUaW1lRGVsdGEg
b3RoZXIpIGNvbnN0IHsKICAgIHJldHVybiBkZWx0YV8gPD0gb3RoZXIuZGVsdGFfOwogIH0KICBi
b29sIG9wZXJhdG9yPihUaW1lRGVsdGEgb3RoZXIpIGNvbnN0IHsKICAgIHJldHVybiBkZWx0YV8g
PiBvdGhlci5kZWx0YV87CiAgfQogIGJvb2wgb3BlcmF0b3I+PShUaW1lRGVsdGEgb3RoZXIpIGNv
bnN0IHsKICAgIHJldHVybiBkZWx0YV8gPj0gb3RoZXIuZGVsdGFfOwogIH0KCiBwcml2YXRlOgog
IGZyaWVuZCBjbGFzcyBUaW1lOwogIGZyaWVuZCBjbGFzcyBUaW1lVGlja3M7CiAgZnJpZW5kIFRp
bWVEZWx0YSBvcGVyYXRvciooaW50NjQgYSwgVGltZURlbHRhIHRkKTsKCiAgLy8gQ29uc3RydWN0
cyBhIGRlbHRhIGdpdmVuIHRoZSBkdXJhdGlvbiBpbiBtaWNyb3NlY29uZHMuIFRoaXMgaXMgcHJp
dmF0ZQogIC8vIHRvIGF2b2lkIGNvbmZ1c2lvbiBieSBjYWxsZXJzIHdpdGggYW4gaW50ZWdlciBj
b25zdHJ1Y3Rvci4gVXNlCiAgLy8gRnJvbVNlY29uZHMsIEZyb21NaWxsaXNlY29uZHMsIGV0Yy4g
aW5zdGVhZC4KICBleHBsaWNpdCBUaW1lRGVsdGEoaW50NjQgZGVsdGFfdXMpIDogZGVsdGFfKGRl
bHRhX3VzKSB7CiAgfQoKICAvLyBEZWx0YSBpbiBtaWNyb3NlY29uZHMuCiAgaW50NjQgZGVsdGFf
Owp9OwoKaW5saW5lIFRpbWVEZWx0YSBvcGVyYXRvciooaW50NjQgYSwgVGltZURlbHRhIHRkKSB7
CiAgcmV0dXJuIFRpbWVEZWx0YShhICogdGQuZGVsdGFfKTsKfQoKLy8gVGltZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQoKLy8gUmVwcmVzZW50cyBhIHdhbGwgY2xvY2sgdGltZS4KY2xhc3MgVGltZSB7CiBwdWJs
aWM6CiAgc3RhdGljIGNvbnN0IGludDY0IGtNaWxsaXNlY29uZHNQZXJTZWNvbmQgPSAxMDAwOwog
IHN0YXRpYyBjb25zdCBpbnQ2NCBrTWljcm9zZWNvbmRzUGVyTWlsbGlzZWNvbmQgPSAxMDAwOwog
IHN0YXRpYyBjb25zdCBpbnQ2NCBrTWljcm9zZWNvbmRzUGVyU2Vjb25kID0ga01pY3Jvc2Vjb25k
c1Blck1pbGxpc2Vjb25kICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGtNaWxsaXNlY29uZHNQZXJTZWNvbmQ7CiAgc3RhdGljIGNvbnN0IGludDY0IGtNaWNy
b3NlY29uZHNQZXJNaW51dGUgPSBrTWljcm9zZWNvbmRzUGVyU2Vjb25kICogNjA7CiAgc3RhdGlj
IGNvbnN0IGludDY0IGtNaWNyb3NlY29uZHNQZXJIb3VyID0ga01pY3Jvc2Vjb25kc1Blck1pbnV0
ZSAqIDYwOwogIHN0YXRpYyBjb25zdCBpbnQ2NCBrTWljcm9zZWNvbmRzUGVyRGF5ID0ga01pY3Jv
c2Vjb25kc1BlckhvdXIgKiAyNDsKICBzdGF0aWMgY29uc3QgaW50NjQga01pY3Jvc2Vjb25kc1Bl
cldlZWsgPSBrTWljcm9zZWNvbmRzUGVyRGF5ICogNzsKICBzdGF0aWMgY29uc3QgaW50NjQga05h
bm9zZWNvbmRzUGVyTWljcm9zZWNvbmQgPSAxMDAwOwogIHN0YXRpYyBjb25zdCBpbnQ2NCBrTmFu
b3NlY29uZHNQZXJTZWNvbmQgPSBrTmFub3NlY29uZHNQZXJNaWNyb3NlY29uZCAqCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtNaWNyb3NlY29uZHNQZXJTZWNv
bmQ7CgogIC8vIE9uIE1hYyAmIExpbnV4LCB0aGlzIHZhbHVlIGlzIHRoZSBkZWx0YSBmcm9tIHRo
ZSBXaW5kb3dzIGVwb2NoIG9mIDE2MDEgdG8KICAvLyB0aGUgUG9zaXggZGVsdGEgb2YgMTk3MC4g
VGhpcyBpcyB1c2VkIGZvciBtaWdyYXRpbmcgYmV0d2VlbiB0aGUgb2xkCiAgLy8gMTk3MC1iYXNl
ZCBlcG9jaHMgdG8gdGhlIG5ldyAxNjAxLWJhc2VkIG9uZXMuIEl0IHNob3VsZCBiZSByZW1vdmVk
IGZyb20KICAvLyB0aGlzIGdsb2JhbCBoZWFkZXIgYW5kIHB1dCBpbiB0aGUgcGxhdGZvcm0tc3Bl
Y2lmaWMgb25lcyB3aGVuIHdlIHJlbW92ZSB0aGUKICAvLyBtaWdyYXRpb24gY29kZS4Kc3RhdGlj
IGNvbnN0IGludDY0IGtXaW5kb3dzRXBvY2hEZWx0YVNlY29uZHMgPSBHR19JTlQ2NF9DKDExNjQ0
NDczNjAwKTsKc3RhdGljIGNvbnN0IGludDY0IGtXaW5kb3dzRXBvY2hEZWx0YU1pbGxpc2Vjb25k
cyA9CiAgICBrV2luZG93c0Vwb2NoRGVsdGFTZWNvbmRzICoga01pbGxpc2Vjb25kc1BlclNlY29u
ZDsKCiBzdGF0aWMKY29uc3QgaW50NjQga1dpbmRvd3NFcG9jaERlbHRhTWljcm9zZWNvbmRzID0K
ICAgIGtXaW5kb3dzRXBvY2hEZWx0YVNlY29uZHMgKiBrTWljcm9zZWNvbmRzUGVyU2Vjb25kOwoK
Ly8gU29tZSBmdW5jdGlvbnMgaW4gdGltZS5jYyB1c2UgdGltZV90IGRpcmVjdGx5LCBzbyB3ZSBw
cm92aWRlIGFuIG9mZnNldAovLyB0byBjb252ZXJ0IGZyb20gdGltZV90IChVbml4IGVwb2NoKSBh
bmQgaW50ZXJuYWwgKFdpbmRvd3MgZXBvY2gpLgogc3RhdGljCmNvbnN0IGludDY0IGtUaW1lVFRv
TWljcm9zZWNvbmRzT2Zmc2V0ID0ga1dpbmRvd3NFcG9jaERlbHRhTWljcm9zZWNvbmRzOwoKICAv
LyBSZXByZXNlbnRzIGFuIGV4cGxvZGVkIHRpbWUgdGhhdCBjYW4gYmUgZm9ybWF0dGVkIG5pY2Vs
eS4gVGhpcyBpcyBraW5kIG9mCiAgLy8gbGlrZSB0aGUgV2luMzIgU1lTVEVNVElNRSBzdHJ1Y3R1
cmUgb3IgdGhlIFVuaXggInN0cnVjdCB0bSIgd2l0aCBhIGZldwogIC8vIGFkZGl0aW9ucyBhbmQg
Y2hhbmdlcyB0byBwcmV2ZW50IGVycm9ycy4KICBzdHJ1Y3QgRXhwbG9kZWQgewogICAgaW50IHll
YXI7ICAgICAgICAgIC8vIEZvdXIgZGlnaXQgeWVhciAiMjAwNyIKICAgIGludCBtb250aDsgICAg
ICAgICAvLyAxLWJhc2VkIG1vbnRoICh2YWx1ZXMgMSA9IEphbnVhcnksIGV0Yy4pCiAgICBpbnQg
ZGF5X29mX3dlZWs7ICAgLy8gMC1iYXNlZCBkYXkgb2Ygd2VlayAoMCA9IFN1bmRheSwgZXRjLikK
ICAgIGludCBkYXlfb2ZfbW9udGg7ICAvLyAxLWJhc2VkIGRheSBvZiBtb250aCAoMS0zMSkKICAg
IGludCBob3VyOyAgICAgICAgICAvLyBIb3VyIHdpdGhpbiB0aGUgY3VycmVudCBkYXkgKDAtMjMp
CiAgICBpbnQgbWludXRlOyAgICAgICAgLy8gTWludXRlIHdpdGhpbiB0aGUgY3VycmVudCBob3Vy
ICgwLTU5KQogICAgaW50IHNlY29uZDsgICAgICAgIC8vIFNlY29uZCB3aXRoaW4gdGhlIGN1cnJl
bnQgbWludXRlICgwLTU5IHBsdXMgbGVhcAogICAgICAgICAgICAgICAgICAgICAgIC8vICAgc2Vj
b25kcyB3aGljaCBtYXkgdGFrZSBpdCB1cCB0byA2MCkuCiAgICBpbnQgbWlsbGlzZWNvbmQ7ICAg
Ly8gTWlsbGlzZWNvbmRzIHdpdGhpbiB0aGUgY3VycmVudCBzZWNvbmQgKDAtOTk5KQogIH07Cgog
IC8vIENvbnRhaW5zIHRoZSBOVUxMIHRpbWUuIFVzZSBUaW1lOjpOb3coKSB0byBnZXQgdGhlIGN1
cnJlbnQgdGltZS4KICBleHBsaWNpdCBUaW1lKCkgOiB1c18oMCkgewogIH0KCiAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSB0aW1lIG9iamVjdCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuCiAgYm9v
bCBpc19udWxsKCkgY29uc3QgewogICAgcmV0dXJuIHVzXyA9PSAwOwogIH0KCiAgLy8gUmV0dXJu
cyB0aGUgY3VycmVudCB0aW1lLiBXYXRjaCBvdXQsIHRoZSBzeXN0ZW0gbWlnaHQgYWRqdXN0IGl0
cyBjbG9jawogIC8vIGluIHdoaWNoIGNhc2UgdGltZSB3aWxsIGFjdHVhbGx5IGdvIGJhY2t3YXJk
cy4gV2UgZG9uJ3QgZ3VhcmFudGVlIHRoYXQKICAvLyB0aW1lcyBhcmUgaW5jcmVhc2luZywgb3Ig
dGhhdCB0d28gY2FsbHMgdG8gTm93KCkgd29uJ3QgYmUgdGhlIHNhbWUuCiAgc3RhdGljIFRpbWUg
Tm93KCk7CgogIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgdGltZS4gU2FtZSBhcyBOb3coKSBleGNl
cHQgdGhhdCB0aGlzIGZ1bmN0aW9uIGFsd2F5cwogIC8vIHVzZXMgc3lzdGVtIHRpbWUgc28gdGhh
dCB0aGVyZSBhcmUgbm8gZGlzY3JlcGFuY2llcyBiZXR3ZWVuIHRoZSByZXR1cm5lZAogIC8vIHRp
bWUgYW5kIHN5c3RlbSB0aW1lIGV2ZW4gb24gdmlydHVhbCBlbnZpcm9ubWVudHMgaW5jbHVkaW5n
IG91ciB0ZXN0IGJvdC4KICAvLyBGb3IgdGltaW5nIHNlbnNpdGl2ZSB1bml0dGVzdHMsIHRoaXMg
ZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQuCiAgc3RhdGljIFRpbWUgTm93RnJvbVN5c3RlbVRpbWUo
KTsKCiAgLy8gQ29udmVydHMgdG8vZnJvbSB0aW1lX3QgaW4gVVRDIGFuZCBhIFRpbWUgY2xhc3Mu
CiAgLy8gVE9ETyhicmV0dHcpIHRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgb25jZSBldmVyeWJvZHkg
c3RhcnRzIHVzaW5nIHRoZSB8VGltZXwKICAvLyBjbGFzcy4KICBzdGF0aWMgVGltZSBGcm9tVGlt
ZVQodGltZV90IHR0KTsKICB0aW1lX3QgVG9UaW1lVCgpIGNvbnN0OwoKICAvLyBDb252ZXJ0cyB0
aW1lIHRvL2Zyb20gYSBkb3VibGUgd2hpY2ggaXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNl
IGVwb2NoCiAgLy8gKEphbiAxLCAxOTcwKS4gIFdlYmtpdCB1c2VzIHRoaXMgZm9ybWF0IHRvIHJl
cHJlc2VudCB0aW1lLgogIHN0YXRpYyBUaW1lIEZyb21Eb3VibGVUKGRvdWJsZSBkdCk7CiAgZG91
YmxlIFRvRG91YmxlVCgpIGNvbnN0OwoKICAvLyBDb252ZXJ0cyBhbiBleHBsb2RlZCBzdHJ1Y3R1
cmUgcmVwcmVzZW50aW5nIGVpdGhlciB0aGUgbG9jYWwgdGltZSBvciBVVEMKICAvLyBpbnRvIGEg
VGltZSBjbGFzcy4KICBzdGF0aWMgVGltZSBGcm9tVVRDRXhwbG9kZWQoY29uc3QgRXhwbG9kZWQm
IGV4cGxvZGVkKSB7CiAgICByZXR1cm4gRnJvbUV4cGxvZGVkKGZhbHNlLCBleHBsb2RlZCk7CiAg
fQogIHN0YXRpYyBUaW1lIEZyb21Mb2NhbEV4cGxvZGVkKGNvbnN0IEV4cGxvZGVkJiBleHBsb2Rl
ZCkgewogICAgcmV0dXJuIEZyb21FeHBsb2RlZCh0cnVlLCBleHBsb2RlZCk7CiAgfQoKICAvLyBD
b252ZXJ0cyBhbiBpbnRlZ2VyIHZhbHVlIHJlcHJlc2VudGluZyBUaW1lIHRvIGEgY2xhc3MuIFRo
aXMgaXMgdXNlZAogIC8vIHdoZW4gZGVzZXJpYWxpemluZyBhIHxUaW1lfCBzdHJ1Y3R1cmUsIHVz
aW5nIGEgdmFsdWUga25vd24gdG8gYmUKICAvLyBjb21wYXRpYmxlLiBJdCBpcyBub3QgcHJvdmlk
ZWQgYXMgYSBjb25zdHJ1Y3RvciBiZWNhdXNlIHRoZSBpbnRlZ2VyIHR5cGUKICAvLyBtYXkgYmUg
dW5jbGVhciBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBhIGNhbGxlci4KICBzdGF0aWMgVGltZSBG
cm9tSW50ZXJuYWxWYWx1ZShpbnQ2NCB1cykgewogICAgcmV0dXJuIFRpbWUodXMpOwogIH0KCiAg
Ly8gQ29udmVydHMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGltZSB0byBhIFRpbWUgb2Jq
ZWN0LgogIC8vIEFuIGV4YW1wbGUgb2YgYSB0aW1lIHN0cmluZyB3aGljaCBpcyBjb252ZXJ0ZWQg
aXMgYXMgYmVsb3c6LQogIC8vICJUdWUsIDE1IE5vdiAxOTk0IDEyOjQ1OjI2IEdNVCIuIElmIHRo
ZSB0aW1lem9uZSBpcyBub3Qgc3BlY2lmaWVkCiAgLy8gaW4gdGhlIGlucHV0IHN0cmluZywgd2Ug
YXNzdW1lIGxvY2FsIHRpbWUuCiAgLy8gVE9ETyhpeWVuZ2FyKSBNb3ZlIHRoZSBGcm9tU3RyaW5n
L0Zyb21UaW1lVC9Ub1RpbWVUL0Zyb21GaWxlVGltZSB0bwogIC8vIGEgbmV3IHRpbWUgY29udmVy
dGVyIGNsYXNzLgogIHN0YXRpYyBib29sIEZyb21TdHJpbmcoY29uc3Qgd2NoYXJfdCogdGltZV9z
dHJpbmcsIFRpbWUqIHBhcnNlZF90aW1lKTsKCiAgLy8gRm9yIHNlcmlhbGl6aW5nLCB1c2UgRnJv
bUludGVybmFsVmFsdWUgdG8gcmVjb25zdGl0dXRlLiBQbGVhc2UgZG9uJ3QgdXNlCiAgLy8gdGhp
cyBhbmQgZG8gYXJpdGhtZXRpYyBvbiBpdCwgYXMgaXQgaXMgbW9yZSBlcnJvciBwcm9uZSB0aGFu
IHVzaW5nIHRoZQogIC8vIHByb3ZpZGVkIG9wZXJhdG9ycy4KICBpbnQ2NCBUb0ludGVybmFsVmFs
dWUoKSBjb25zdCB7CiAgICByZXR1cm4gdXNfOwogIH0KCiAgLy8gRmlsbHMgdGhlIGdpdmVuIGV4
cGxvZGVkIHN0cnVjdHVyZSB3aXRoIGVpdGhlciB0aGUgbG9jYWwgdGltZSBvciBVVEMgZnJvbQog
IC8vIHRoaXMgdGltZSBzdHJ1Y3R1cmUgKGNvbnRhaW5pbmcgVVRDKS4KICB2b2lkIFVUQ0V4cGxv
ZGUoRXhwbG9kZWQqIGV4cGxvZGVkKSBjb25zdCB7CiAgICByZXR1cm4gRXhwbG9kZShmYWxzZSwg
ZXhwbG9kZWQpOwogIH0KICB2b2lkIExvY2FsRXhwbG9kZShFeHBsb2RlZCogZXhwbG9kZWQpIGNv
bnN0IHsKICAgIHJldHVybiBFeHBsb2RlKHRydWUsIGV4cGxvZGVkKTsKICB9CgogIC8vIFJvdW5k
cyB0aGlzIHRpbWUgZG93biB0byB0aGUgbmVhcmVzdCBkYXkgaW4gbG9jYWwgdGltZS4gSXQgd2ls
bCByZXByZXNlbnQKICAvLyBtaWRuaWdodCBvbiB0aGF0IGRheS4KICBUaW1lIExvY2FsTWlkbmln
aHQoKSBjb25zdDsKCiAgVGltZSYgb3BlcmF0b3I9KFRpbWUgb3RoZXIpIHsKICAgIHVzXyA9IG90
aGVyLnVzXzsKICAgIHJldHVybiAqdGhpczsKICB9CgogIC8vIENvbXB1dGUgdGhlIGRpZmZlcmVu
Y2UgYmV0d2VlbiB0d28gdGltZXMuCiAgVGltZURlbHRhIG9wZXJhdG9yLShUaW1lIG90aGVyKSBj
b25zdCB7CiAgICByZXR1cm4gVGltZURlbHRhKHVzXyAtIG90aGVyLnVzXyk7CiAgfQoKICAvLyBN
b2RpZnkgYnkgc29tZSB0aW1lIGRlbHRhLgogIFRpbWUmIG9wZXJhdG9yKz0oVGltZURlbHRhIGRl
bHRhKSB7CiAgICB1c18gKz0gZGVsdGEuZGVsdGFfOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBU
aW1lJiBvcGVyYXRvci09KFRpbWVEZWx0YSBkZWx0YSkgewogICAgdXNfIC09IGRlbHRhLmRlbHRh
XzsKICAgIHJldHVybiAqdGhpczsKICB9CgogIC8vIFJldHVybiBhIG5ldyB0aW1lIG1vZGlmaWVk
IGJ5IHNvbWUgZGVsdGEuCiAgVGltZSBvcGVyYXRvcisoVGltZURlbHRhIGRlbHRhKSBjb25zdCB7
CiAgICByZXR1cm4gVGltZSh1c18gKyBkZWx0YS5kZWx0YV8pOwogIH0KICBUaW1lIG9wZXJhdG9y
LShUaW1lRGVsdGEgZGVsdGEpIGNvbnN0IHsKICAgIHJldHVybiBUaW1lKHVzXyAtIGRlbHRhLmRl
bHRhXyk7CiAgfQoKICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycwogIGJvb2wgb3BlcmF0b3I9PShU
aW1lIG90aGVyKSBjb25zdCB7CiAgICByZXR1cm4gdXNfID09IG90aGVyLnVzXzsKICB9CiAgYm9v
bCBvcGVyYXRvciE9KFRpbWUgb3RoZXIpIGNvbnN0IHsKICAgIHJldHVybiB1c18gIT0gb3RoZXIu
dXNfOwogIH0KICBib29sIG9wZXJhdG9yPChUaW1lIG90aGVyKSBjb25zdCB7CiAgICByZXR1cm4g
dXNfIDwgb3RoZXIudXNfOwogIH0KICBib29sIG9wZXJhdG9yPD0oVGltZSBvdGhlcikgY29uc3Qg
ewogICAgcmV0dXJuIHVzXyA8PSBvdGhlci51c187CiAgfQogIGJvb2wgb3BlcmF0b3I+KFRpbWUg
b3RoZXIpIGNvbnN0IHsKICAgIHJldHVybiB1c18gPiBvdGhlci51c187CiAgfQogIGJvb2wgb3Bl
cmF0b3I+PShUaW1lIG90aGVyKSBjb25zdCB7CiAgICByZXR1cm4gdXNfID49IG90aGVyLnVzXzsK
ICB9CgogcHJpdmF0ZToKICBmcmllbmQgY2xhc3MgVGltZURlbHRhOwoKICAvLyBFeHBsb2RlcyB0
aGUgZ2l2ZW4gdGltZSB0byBlaXRoZXIgbG9jYWwgdGltZSB8aXNfbG9jYWwgPSB0cnVlfCBvciBV
VEMKICAvLyB8aXNfbG9jYWwgPSBmYWxzZXwuCiAgdm9pZCBFeHBsb2RlKGJvb2wgaXNfbG9jYWws
IEV4cGxvZGVkKiBleHBsb2RlZCkgY29uc3Q7CgogIC8vIFVuZXhwbG9kZXMgYSBnaXZlbiB0aW1l
IGFzc3VtaW5nIHRoZSBzb3VyY2UgaXMgZWl0aGVyIGxvY2FsIHRpbWUKICAvLyB8aXNfbG9jYWwg
PSB0cnVlfCBvciBVVEMgfGlzX2xvY2FsID0gZmFsc2V8LgogIHN0YXRpYyBUaW1lIEZyb21FeHBs
b2RlZChib29sIGlzX2xvY2FsLCBjb25zdCBFeHBsb2RlZCYgZXhwbG9kZWQpOwoKICBleHBsaWNp
dCBUaW1lKGludDY0IHVzKSA6IHVzXyh1cykgewogIH0KCiAgLy8gVGhlIHJlcHJlc2VudGF0aW9u
IG9mIEphbiAxLCAxOTcwIFVUQyBpbiBtaWNyb3NlY29uZHMgc2luY2UgdGhlCiAgLy8gcGxhdGZv
cm0tZGVwZW5kZW50IGVwb2NoLgogIC8vc3RhdGljIGNvbnN0IGludDY0IGtUaW1lVFRvTWljcm9z
ZWNvbmRzT2Zmc2V0OwoKICAvLyBUaW1lIGluIG1pY3Jvc2Vjb25kcyBpbiBVVEMuCiAgaW50NjQg
dXNfOwp9OwoKLy8gc3RhdGljClRpbWUgVGltZTo6Tm93KCkgewogIENGQWJzb2x1dGVUaW1lIG5v
dyA9CiAgICAgIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsga0NGQWJzb2x1dGVUaW1lSW50
ZXJ2YWxTaW5jZTE5NzA7CiAgcmV0dXJuIFRpbWUoc3RhdGljX2Nhc3Q8aW50NjQ+KG5vdyAqIGtN
aWNyb3NlY29uZHNQZXJTZWNvbmQpICsKICAgICAga1dpbmRvd3NFcG9jaERlbHRhTWljcm9zZWNv
bmRzKTsKfQoKaW50NjQgVGltZURlbHRhOjpJbk1pbGxpc2Vjb25kcygpIGNvbnN0IHsKICByZXR1
cm4gZGVsdGFfIC8gVGltZTo6a01pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kOwp9CgoKCmlubGlu
ZSBUaW1lIFRpbWVEZWx0YTo6b3BlcmF0b3IrKFRpbWUgdCkgY29uc3QgewogIHJldHVybiBUaW1l
KHQudXNfICsgZGVsdGFfKTsKfQoKLy8gSW5saW5lIHRoZSBUaW1lRGVsdGEgZmFjdG9yeSBtZXRo
b2RzLCBmb3IgZmFzdCBUaW1lRGVsdGEgY29uc3RydWN0aW9uLgoKLy8gc3RhdGljCmlubGluZSBU
aW1lRGVsdGEgVGltZURlbHRhOjpGcm9tRGF5cyhpbnQ2NCBkYXlzKSB7CiAgcmV0dXJuIFRpbWVE
ZWx0YShkYXlzICogVGltZTo6a01pY3Jvc2Vjb25kc1BlckRheSk7Cn0KCi8vIHN0YXRpYwppbmxp
bmUgVGltZURlbHRhIFRpbWVEZWx0YTo6RnJvbUhvdXJzKGludDY0IGhvdXJzKSB7CiAgcmV0dXJu
IFRpbWVEZWx0YShob3VycyAqIFRpbWU6OmtNaWNyb3NlY29uZHNQZXJIb3VyKTsKfQoKLy8gc3Rh
dGljCmlubGluZSBUaW1lRGVsdGEgVGltZURlbHRhOjpGcm9tTWludXRlcyhpbnQ2NCBtaW51dGVz
KSB7CiAgcmV0dXJuIFRpbWVEZWx0YShtaW51dGVzICogVGltZTo6a01pY3Jvc2Vjb25kc1Blck1p
bnV0ZSk7Cn0KCi8vIHN0YXRpYwppbmxpbmUgVGltZURlbHRhIFRpbWVEZWx0YTo6RnJvbVNlY29u
ZHMoaW50NjQgc2VjcykgewogIHJldHVybiBUaW1lRGVsdGEoc2VjcyAqIFRpbWU6OmtNaWNyb3Nl
Y29uZHNQZXJTZWNvbmQpOwp9CgovLyBzdGF0aWMKaW5saW5lIFRpbWVEZWx0YSBUaW1lRGVsdGE6
OkZyb21NaWxsaXNlY29uZHMoaW50NjQgbXMpIHsKICByZXR1cm4gVGltZURlbHRhKG1zICogVGlt
ZTo6a01pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kKTsKfQoKLy8gc3RhdGljCmlubGluZSBUaW1l
RGVsdGEgVGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKGludDY0IHVzKSB7CiAgcmV0dXJuIFRp
bWVEZWx0YSh1cyk7Cn0KCi8vIFRpbWVUaWNrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmNsYXNzIFRpbWVUaWNrcyB7
CiBwdWJsaWM6CiAgVGltZVRpY2tzKCkgOiB0aWNrc18oMCkgewogIH0KCiAgLy8gUGxhdGZvcm0t
ZGVwZW5kZW50IHRpY2sgY291bnQgcmVwcmVzZW50aW5nICJyaWdodCBub3cuIgogIC8vIFRoZSBy
ZXNvbHV0aW9uIG9mIHRoaXMgY2xvY2sgaXMgfjEtMTVtcy4gIFJlc29sdXRpb24gdmFyaWVzIGRl
cGVuZGluZwogIC8vIG9uIGhhcmR3YXJlL29wZXJhdGluZyBzeXN0ZW0gY29uZmlndXJhdGlvbi4K
ICBzdGF0aWMgVGltZVRpY2tzIE5vdygpOwoKICAvLyBSZXR1cm5zIGEgcGxhdGZvcm0tZGVwZW5k
ZW50IGhpZ2gtcmVzb2x1dGlvbiB0aWNrIGNvdW50LiBJbXBsZW1lbnRhdGlvbgogIC8vIGlzIGhh
cmR3YXJlIGRlcGVuZGVudCBhbmQgbWF5IG9yIG1heSBub3QgcmV0dXJuIHN1Yi1taWxsaXNlY29u
ZAogIC8vIHJlc29sdXRpb24uICBUSElTIENBTEwgSVMgR0VORVJBTExZIE1VQ0ggTU9SRSBFWFBF
TlNJVkUgVEhBTiBOb3coKSBBTkQKICAvLyBTSE9VTEQgT05MWSBCRSBVU0VEIFdIRU4gSVQgSVMg
UkVBTExZIE5FRURFRC4KICBzdGF0aWMgVGltZVRpY2tzIEhpZ2hSZXNOb3coKTsKCiAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoaXMgb2JqZWN0IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4KICBib29s
IGlzX251bGwoKSBjb25zdCB7CiAgICByZXR1cm4gdGlja3NfID09IDA7CiAgfQoKICAvLyBSZXR1
cm5zIHRoZSBpbnRlcm5hbCBudW1lcmljIHZhbHVlIG9mIHRoZSBUaW1lVGlja3Mgb2JqZWN0Lgog
IGludDY0IFRvSW50ZXJuYWxWYWx1ZSgpIGNvbnN0IHsKICAgIHJldHVybiB0aWNrc187CiAgfQoK
ICBUaW1lVGlja3MmIG9wZXJhdG9yPShUaW1lVGlja3Mgb3RoZXIpIHsKICAgIHRpY2tzXyA9IG90
aGVyLnRpY2tzXzsKICAgIHJldHVybiAqdGhpczsKICB9CgogIC8vIENvbXB1dGUgdGhlIGRpZmZl
cmVuY2UgYmV0d2VlbiB0d28gdGltZXMuCiAgVGltZURlbHRhIG9wZXJhdG9yLShUaW1lVGlja3Mg
b3RoZXIpIGNvbnN0IHsKICAgIHJldHVybiBUaW1lRGVsdGEodGlja3NfIC0gb3RoZXIudGlja3Nf
KTsKICB9CgogIC8vIE1vZGlmeSBieSBzb21lIHRpbWUgZGVsdGEuCiAgVGltZVRpY2tzJiBvcGVy
YXRvcis9KFRpbWVEZWx0YSBkZWx0YSkgewogICAgdGlja3NfICs9IGRlbHRhLmRlbHRhXzsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgVGltZVRpY2tzJiBvcGVyYXRvci09KFRpbWVEZWx0YSBkZWx0
YSkgewogICAgdGlja3NfIC09IGRlbHRhLmRlbHRhXzsKICAgIHJldHVybiAqdGhpczsKICB9Cgog
IC8vIFJldHVybiBhIG5ldyBUaW1lVGlja3MgbW9kaWZpZWQgYnkgc29tZSBkZWx0YS4KICBUaW1l
VGlja3Mgb3BlcmF0b3IrKFRpbWVEZWx0YSBkZWx0YSkgY29uc3QgewogICAgcmV0dXJuIFRpbWVU
aWNrcyh0aWNrc18gKyBkZWx0YS5kZWx0YV8pOwogIH0KICBUaW1lVGlja3Mgb3BlcmF0b3ItKFRp
bWVEZWx0YSBkZWx0YSkgY29uc3QgewogICAgcmV0dXJuIFRpbWVUaWNrcyh0aWNrc18gLSBkZWx0
YS5kZWx0YV8pOwogIH0KCiAgLy8gQ29tcGFyaXNvbiBvcGVyYXRvcnMKICBib29sIG9wZXJhdG9y
PT0oVGltZVRpY2tzIG90aGVyKSBjb25zdCB7CiAgICByZXR1cm4gdGlja3NfID09IG90aGVyLnRp
Y2tzXzsKICB9CiAgYm9vbCBvcGVyYXRvciE9KFRpbWVUaWNrcyBvdGhlcikgY29uc3QgewogICAg
cmV0dXJuIHRpY2tzXyAhPSBvdGhlci50aWNrc187CiAgfQogIGJvb2wgb3BlcmF0b3I8KFRpbWVU
aWNrcyBvdGhlcikgY29uc3QgewogICAgcmV0dXJuIHRpY2tzXyA8IG90aGVyLnRpY2tzXzsKICB9
CiAgYm9vbCBvcGVyYXRvcjw9KFRpbWVUaWNrcyBvdGhlcikgY29uc3QgewogICAgcmV0dXJuIHRp
Y2tzXyA8PSBvdGhlci50aWNrc187CiAgfQogIGJvb2wgb3BlcmF0b3I+KFRpbWVUaWNrcyBvdGhl
cikgY29uc3QgewogICAgcmV0dXJuIHRpY2tzXyA+IG90aGVyLnRpY2tzXzsKICB9CiAgYm9vbCBv
cGVyYXRvcj49KFRpbWVUaWNrcyBvdGhlcikgY29uc3QgewogICAgcmV0dXJuIHRpY2tzXyA+PSBv
dGhlci50aWNrc187CiAgfQoKIHByb3RlY3RlZDoKICBmcmllbmQgY2xhc3MgVGltZURlbHRhOwog
IGZyaWVuZCBjbGFzcyBQYWdlTG9hZFRyYWNrZXJVbml0VGVzdDsKCiAgLy8gUGxlYXNlIHVzZSBO
b3coKSB0byBjcmVhdGUgYSBuZXcgb2JqZWN0LiBUaGlzIGlzIGZvciBpbnRlcm5hbCB1c2UKICAv
LyBhbmQgdGVzdGluZy4gVGlja3MgaXMgaW4gbWljcm9zZWNvbmRzLgogIGV4cGxpY2l0IFRpbWVU
aWNrcyhpbnQ2NCB0aWNrcykgOiB0aWNrc18odGlja3MpIHsKICB9CgogIC8vIFRpY2sgY291bnQg
aW4gbWljcm9zZWNvbmRzLgogIGludDY0IHRpY2tzXzsKCn07CgppbmxpbmUgVGltZVRpY2tzIFRp
bWVEZWx0YTo6b3BlcmF0b3IrKFRpbWVUaWNrcyB0KSBjb25zdCB7CiAgcmV0dXJuIFRpbWVUaWNr
cyh0LnRpY2tzXyArIGRlbHRhXyk7Cn0KCn0gIC8vIG5hbWVzcGFjZSBiYXNlCgojZW5kaWYgIC8v
IEJBU0VfVElNRV9IXwoKI2lmbmRlZiBCQVNFX0xPQ0tfSF8KI2RlZmluZSBCQVNFX0xPQ0tfSF8K
Ci8vIEEgY29udmVuaWVudCB3cmFwcGVyIGZvciBhbiBPUyBzcGVjaWZpYyBjcml0aWNhbCBzZWN0
aW9uLgoKY2xhc3MgTG9jayB7CiBwdWJsaWM6CiAgTG9jaygpIDogbG9ja18oKSB7fQogIH5Mb2Nr
KCkge30KICB2b2lkIEFjcXVpcmUoKSB7IGxvY2tfLkxvY2soKTsgfQogIHZvaWQgUmVsZWFzZSgp
IHsgbG9ja18uVW5sb2NrKCk7IH0KICAvLyBJZiB0aGUgbG9jayBpcyBub3QgaGVsZCwgdGFrZSBp
dCBhbmQgcmV0dXJuIHRydWUuIElmIHRoZSBsb2NrIGlzIGFscmVhZHkKICAvLyBoZWxkIGJ5IGFu
b3RoZXIgdGhyZWFkLCBpbW1lZGlhdGVseSByZXR1cm4gZmFsc2UuCiAgYm9vbCBUcnkoKSB7IHJl
dHVybiBsb2NrXy5UcnkoKTsgfQoKICAvLyBJbiBkZWJ1ZyBidWlsZHMgdGhpcyBtZXRob2QgY2hl
Y2tzIHRoYXQgdGhlIGxvY2sgaGFzIGJlZW4gYWNxdWlyZWQgYnkgdGhlCiAgLy8gY2FsbGluZyB0
aHJlYWQuICBJZiB0aGUgbG9jayBoYXMgbm90IGJlZW4gYWNxdWlyZWQsIHRoZW4gdGhlIG1ldGhv
ZAogIC8vIHdpbGwgRENIRUNLKCkuICBJbiBub24tZGVidWcgYnVpbGRzLCB0aGUgTG9ja0ltcGwn
cyBpbXBsZW1lbnRhdGlvbiBvZgogIC8vIEFzc2VydEFjcXVpcmVkKCkgaXMgYW4gZW1wdHkgaW5s
aW5lIG1ldGhvZC4KICB2b2lkIEFzc2VydEFjcXVpcmVkKCkgY29uc3QgeyByZXR1cm4gbG9ja18u
QXNzZXJ0QWNxdWlyZWQoKTsgfQoKICAvLyBSZXR1cm4gdGhlIHVuZGVybHlpbmcgbG9jayBpbXBs
ZW1lbnRhdGlvbi4KICAvLyBUT0RPKGF3YWxrZXIpOiByZWZhY3RvciBsb2NrIGFuZCBjb25kaXRp
b24gdmFyaWFibGVzIHNvIHRoYXQgdGhpcyBpcwogIC8vIHVubmVjZXNzYXJ5LgogIExvY2tJbXBs
KiBsb2NrX2ltcGwoKSB7IHJldHVybiAmbG9ja187IH0KCiBwcml2YXRlOgogIExvY2tJbXBsIGxv
Y2tfOyAgLy8gUGxhdGZvcm0gc3BlY2lmaWMgdW5kZXJseWluZyBsb2NrIGltcGxlbWVudGF0aW9u
LgoKICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oTG9jayk7Cn07CgovLyBBIGhlbHBlciBjbGFz
cyB0aGF0IGFjcXVpcmVzIHRoZSBnaXZlbiBMb2NrIHdoaWxlIHRoZSBBdXRvTG9jayBpcyBpbiBz
Y29wZS4KY2xhc3MgQXV0b0xvY2sgewogcHVibGljOgogIGV4cGxpY2l0IEF1dG9Mb2NrKExvY2sm
IGxvY2spIDogbG9ja18obG9jaykgewogICAgbG9ja18uQWNxdWlyZSgpOwogIH0KCiAgfkF1dG9M
b2NrKCkgewogICAgbG9ja18uQXNzZXJ0QWNxdWlyZWQoKTsKICAgIGxvY2tfLlJlbGVhc2UoKTsK
ICB9CgogcHJpdmF0ZToKICBMb2NrJiBsb2NrXzsKICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
QXV0b0xvY2spOwp9OwoKLy8gQXV0b1VubG9jayBpcyBhIGhlbHBlciB0aGF0IHdpbGwgUmVsZWFz
ZSgpIHRoZSB8bG9ja3wgYXJndW1lbnQgaW4gdGhlCi8vIGNvbnN0cnVjdG9yLCBhbmQgcmUtQWNx
dWlyZSgpIGl0IGluIHRoZSBkZXN0cnVjdG9yLgpjbGFzcyBBdXRvVW5sb2NrIHsKIHB1YmxpYzoK
ICBleHBsaWNpdCBBdXRvVW5sb2NrKExvY2smIGxvY2spIDogbG9ja18obG9jaykgewogICAgLy8g
V2UgcmVxdWlyZSBvdXIgY2FsbGVyIHRvIGhhdmUgdGhlIGxvY2suCiAgICBsb2NrXy5Bc3NlcnRB
Y3F1aXJlZCgpOwogICAgbG9ja18uUmVsZWFzZSgpOwogIH0KCiAgfkF1dG9VbmxvY2soKSB7CiAg
ICBsb2NrXy5BY3F1aXJlKCk7CiAgfQoKIHByaXZhdGU6CiAgTG9jayYgbG9ja187CiAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKEF1dG9VbmxvY2spOwp9OwoKI2VuZGlmICAvLyBCQVNFX0xPQ0tf
SF8KCiNpZm5kZWYgQkFTRV9USFJFQURfTE9DQUxfU1RPUkFHRV9IXwojZGVmaW5lIEJBU0VfVEhS
RUFEX0xPQ0FMX1NUT1JBR0VfSF8KCi8vIFdyYXBwZXIgZm9yIHRocmVhZCBsb2NhbCBzdG9yYWdl
LiAgVGhpcyBjbGFzcyBkb2Vzbid0IGRvIG11Y2ggZXhjZXB0IHByb3ZpZGUKLy8gYW4gQVBJIGZv
ciBwb3J0YWJpbGl0eS4KY2xhc3MgVGhyZWFkTG9jYWxTdG9yYWdlIHsKIHB1YmxpYzoKCiAgLy8g
UHJvdG90eXBlIGZvciB0aGUgVExTIGRlc3RydWN0b3IgZnVuY3Rpb24sIHdoaWNoIGNhbiBiZSBv
cHRpb25hbGx5IHVzZWQgdG8KICAvLyBjbGVhbnVwIHRocmVhZCBsb2NhbCBzdG9yYWdlIG9uIHRo
cmVhZCBleGl0LiAgJ3ZhbHVlJyBpcyB0aGUgZGF0YSB0aGF0IGlzCiAgLy8gc3RvcmVkIGluIHRo
cmVhZCBsb2NhbCBzdG9yYWdlLgogIHR5cGVkZWYgdm9pZCAoKlRMU0Rlc3RydWN0b3JGdW5jKSh2
b2lkKiB2YWx1ZSk7CgogIC8vIEEga2V5IHJlcHJlc2VudGluZyBvbmUgdmFsdWUgc3RvcmVkIGlu
IFRMUy4KICBjbGFzcyBTbG90IHsKICAgcHVibGljOgogICAgU2xvdChUTFNEZXN0cnVjdG9yRnVu
YyBkZXN0cnVjdG9yID0gTlVMTCk7CgogICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgYmUg
dXNlZCBmb3Igc3RhdGljcy4KICAgIC8vIEl0IHJldHVybnMgYW4gdW5pbml0aWFsaXplZCBTbG90
LgogICAgZXhwbGljaXQgU2xvdChiYXNlOjpMaW5rZXJJbml0aWFsaXplZCB4KSB7fQoKICAgIC8v
IFNldCB1cCB0aGUgVExTIHNsb3QuICBDYWxsZWQgYnkgdGhlIGNvbnN0cnVjdG9yLgogICAgLy8g
J2Rlc3RydWN0b3InIGlzIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRvIHBlcmZvcm0gcGVyLXRo
cmVhZCBjbGVhbnVwIG9mCiAgICAvLyB0aGlzIG9iamVjdC4gIElmIHNldCB0byBOVUxMLCBubyBj
bGVhbnVwIGlzIGRvbmUgZm9yIHRoaXMgVExTIHNsb3QuCiAgICAvLyBSZXR1cm5zIGZhbHNlIG9u
IGVycm9yLgogICAgYm9vbCBJbml0aWFsaXplKFRMU0Rlc3RydWN0b3JGdW5jIGRlc3RydWN0b3Ip
OwoKICAgIC8vIEZyZWUgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBUTFMgJ3Nsb3QnLgogICAgLy8g
SWYgYSBkZXN0cnVjdG9yIHdhcyBzZXQgZm9yIHRoaXMgc2xvdCwgcmVtb3ZlcwogICAgLy8gdGhl
IGRlc3RydWN0b3Igc28gdGhhdCByZW1haW5pbmcgdGhyZWFkcyBleGl0aW5nCiAgICAvLyB3aWxs
IG5vdCBmcmVlIGRhdGEuCiAgICB2b2lkIEZyZWUoKTsKCiAgICAvLyBHZXQgdGhlIHRocmVhZC1s
b2NhbCB2YWx1ZSBzdG9yZWQgaW4gc2xvdCAnc2xvdCcuCiAgICAvLyBWYWx1ZXMgYXJlIGd1YXJh
bnRlZWQgdG8gaW5pdGlhbGx5IGJlIHplcm8uCiAgICB2b2lkKiBHZXQoKSBjb25zdCB7CiAgRENI
RUNLKGluaXRpYWxpemVkXyk7CiAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMoa2V5Xyk7Cn0K
CiAgICAvLyBTZXQgdGhlIHRocmVhZC1sb2NhbCB2YWx1ZSBzdG9yZWQgaW4gc2xvdCAnc2xvdCcg
dG8KICAgIC8vIHZhbHVlICd2YWx1ZScuCiAgICB2b2lkIFNldCh2b2lkKiB2YWx1ZSkgewogIERD
SEVDSyhpbml0aWFsaXplZF8pOwogIGludCBlcnJvciA9IHB0aHJlYWRfc2V0c3BlY2lmaWMoa2V5
XywgdmFsdWUpOwogIGlmIChlcnJvcikKICAgIE5PVFJFQUNIRUQoKTsKfQogICAgYm9vbCBpbml0
aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIGluaXRpYWxpemVkXzsgfQoKICAgcHJpdmF0ZToKICAg
IC8vIFRoZSBpbnRlcm5hbHMgb2YgdGhpcyBzdHJ1Y3Qgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcHJp
dmF0ZS4KICAgIGJvb2wgaW5pdGlhbGl6ZWRfOwogICAgcHRocmVhZF9rZXlfdCBrZXlfOwoKICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTbG90KTsKICB9OwoKICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oVGhyZWFkTG9jYWxTdG9yYWdlKTsKfTsKCi8vIFRlbXBvcmFyeSBiYWNrd2FyZHMt
Y29tcGF0aWJsZSBuYW1lLgovLyBUT0RPKGV2YW5tKTogcmVwbGFjZSBhbGwgdXNhZ2Ugb2YgVExT
U2xvdC4KdHlwZWRlZiBUaHJlYWRMb2NhbFN0b3JhZ2U6OlNsb3QgVExTU2xvdDsKCiNlbmRpZiAg
Ly8gQkFTRV9USFJFQURfTE9DQUxfU1RPUkFHRV9IXwoKI2lmbmRlZiBCQVNFX1RSQUNLRURfSF8K
I2RlZmluZSBCQVNFX1RSQUNLRURfSF8KCgojaWZuZGVmIE5ERUJVRwojaWZuZGVmIFRSQUNLX0FM
TF9UQVNLX09CSkVDVFMKI2RlZmluZSBUUkFDS19BTExfVEFTS19PQkpFQ1RTCiNlbmRpZiAgIC8v
IFRSQUNLX0FMTF9UQVNLX09CSkVDVFMKI2VuZGlmICAvLyBOREVCVUcKCm5hbWVzcGFjZSB0cmFj
a2VkX29iamVjdHMgewoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gTG9jYXRpb24gcHJvdmlk
ZXMgYmFzaWMgaW5mbyB3aGVyZSBvZiBhbiBvYmplY3Qgd2FzIGNvbnN0cnVjdGVkLCBvciB3YXMK
Ly8gc2lnbmlmaWNhbnRseSBicm91Z2h0IHRvIGxpZmUuCgpjbGFzcyBMb2NhdGlvbiB7CiBwdWJs
aWM6CiAgLy8gQ29uc3RydWN0b3Igc2hvdWxkIGJlIGNhbGxlZCB3aXRoIGEgbG9uZy1saXZlZCBj
aGFyKiwgc3VjaCBhcyBfX0ZJTEVfXy4KICAvLyBJdCBhc3N1bWVzIHRoZSBwcm92aWRlZCB2YWx1
ZSB3aWxsIHBlcnNpc3QgYXMgYSBnbG9iYWwgY29uc3RhbnQsIGFuZCBpdAogIC8vIHdpbGwgbm90
IG1ha2UgYSBjb3B5IG9mIGl0LgogIExvY2F0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uX25hbWUs
IGNvbnN0IGNoYXIqIGZpbGVfbmFtZSwgaW50IGxpbmVfbnVtYmVyKQogICAgICA6IGZ1bmN0aW9u
X25hbWVfKGZ1bmN0aW9uX25hbWUpLAogICAgICAgIGZpbGVfbmFtZV8oZmlsZV9uYW1lKSwKICAg
ICAgICBsaW5lX251bWJlcl8obGluZV9udW1iZXIpIHsgfQoKICAvLyBQcm92aWRlIGEgZGVmYXVs
dCBjb25zdHJ1Y3RvciBmb3IgZWFzeSBvZiBkZWJ1Z2dpbmcuCiAgTG9jYXRpb24oKQogICAgICA6
IGZ1bmN0aW9uX25hbWVfKCJVbmtub3duIiksCiAgICAgICAgZmlsZV9uYW1lXygiVW5rbm93biIp
LAogICAgICAgIGxpbmVfbnVtYmVyXygtMSkgeyB9CgogIC8vIENvbXBhcmlzb24gb3BlcmF0b3Ig
Zm9yIGluc2VydGlvbiBpbnRvIGEgc3RkOjptYXA8PiBoYXNoIHRhYmxlcy4KICAvLyBBbGwgd2Ug
bmVlZCBpcyAqc29tZSogKGFueSkgaGFzaGluZyBkaXN0aW5jdGlvbi4gIFN0cmluZ3Mgc2hvdWxk
IGFscmVhZHkKICAvLyBiZSB1bmlxdWUsIHNvIHdlIGRvbid0IGJvdGhlciB3aXRoIHN0cmNtcCBv
ciBzdWNoLgogIC8vIFVzZSBsaW5lIG51bWJlciBhcyB0aGUgcHJpbWFyeSBrZXkgKGJlY2F1c2Ug
aXQgaXMgZmFzdCwgYW5kIHVzdWFsbHkgZ2V0cyB1cwogIC8vIGEgZGlmZmVyZW5jZSksIGFuZCB0
aGVuIHBvaW50ZXJzIGFzIHNlY29uZGFyeSBrZXlzIChqdXN0IHRvIGdldCBzb21lCiAgLy8gZGlz
dGluY3Rpb25zKS4KICBib29sIG9wZXJhdG9yIDwgKGNvbnN0IExvY2F0aW9uJiBvdGhlcikgY29u
c3QgewogICAgaWYgKGxpbmVfbnVtYmVyXyAhPSBvdGhlci5saW5lX251bWJlcl8pCiAgICAgIHJl
dHVybiBsaW5lX251bWJlcl8gPCBvdGhlci5saW5lX251bWJlcl87CiAgICBpZiAoZmlsZV9uYW1l
XyAhPSBvdGhlci5maWxlX25hbWVfKQogICAgICByZXR1cm4gZmlsZV9uYW1lXyA8IG90aGVyLmZp
bGVfbmFtZV87CiAgICByZXR1cm4gZnVuY3Rpb25fbmFtZV8gPCBvdGhlci5mdW5jdGlvbl9uYW1l
XzsKICB9CgogIGNvbnN0IGNoYXIqIGZ1bmN0aW9uX25hbWUoKSBjb25zdCB7IHJldHVybiBmdW5j
dGlvbl9uYW1lXzsgfQogIGNvbnN0IGNoYXIqIGZpbGVfbmFtZSgpICAgICBjb25zdCB7IHJldHVy
biBmaWxlX25hbWVfOyB9CiAgaW50IGxpbmVfbnVtYmVyKCkgICAgICAgICAgIGNvbnN0IHsgcmV0
dXJuIGxpbmVfbnVtYmVyXzsgfQoKICB2b2lkIFdyaXRlKGJvb2wgZGlzcGxheV9maWxlbmFtZSwg
Ym9vbCBkaXNwbGF5X2Z1bmN0aW9uX25hbWUsCiAgICAgICAgICAgICBzdGQ6OnN0cmluZyogb3V0
cHV0KSBjb25zdDsKCiAgLy8gV3JpdGUgZnVuY3Rpb25fbmFtZV8gaW4gSFRNTCB3aXRoICc8JyBh
bmQgJz4nIHByb3Blcmx5IGVuY29kZWQuCiAgdm9pZCBXcml0ZUZ1bmN0aW9uTmFtZShzdGQ6OnN0
cmluZyogb3V0cHV0KSBjb25zdDsKCiBwcml2YXRlOgogIGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0
aW9uX25hbWVfOwogIGNvbnN0IGNoYXIqIGNvbnN0IGZpbGVfbmFtZV87CiAgY29uc3QgaW50IGxp
bmVfbnVtYmVyXzsKfTsKCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBEZWZpbmUgYSBtYWNy
byB0byByZWNvcmQgdGhlIGN1cnJlbnQgc291cmNlIGxvY2F0aW9uLgoKI2RlZmluZSBGUk9NX0hF
UkUgdHJhY2tlZF9vYmplY3RzOjpMb2NhdGlvbihfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBfX0xJ
TkVfXykKCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCmNsYXNzIEJpcnRoczsKdXNpbmcgYmFz
ZTo6VGltZTsKCmNsYXNzIFRyYWNrZWQgewogcHVibGljOgogIFRyYWNrZWQoKTsKICB2aXJ0dWFs
IH5UcmFja2VkKCk7CgogIC8vIFVzZWQgdG8gcmVjb3JkIHRoZSBGUk9NX0hFUkUgbG9jYXRpb24g
b2YgYSBjYWxsZXIuCiAgdm9pZCBTZXRCaXJ0aFBsYWNlKGNvbnN0IExvY2F0aW9uJiBmcm9tX2hl
cmUpOwoKICAvLyBXaGVuIGEgdGFzayBzaXRzIGFyb3VuZCBhIGxvbmcgdGltZSwgc3VjaCBhcyBp
biBhIHRpbWVyLCBvciBvYmplY3Qgd2F0Y2hlciwKICAvLyB0aGlzIG1ldGhvZCBzaG91bGQgYmUg
Y2FsbGVkIHdoZW4gdGhlIHRhc2sgYmVjb21lcyBhY3RpdmUsIGFuZCBpdHMKICAvLyBzaWduaWZp
Y2FudCBsaWZldGltZSBiZWdpbnMgKGFuZCBpdHMgd2FpdGluZyB0byBiZSB3b2tlbiB1cCBoYXMg
cGFzc2VkKS4KICB2b2lkIFJlc2V0QmlydGhUaW1lKCk7CgogIGJvb2wgTWlzc2luZ0JpcnRocGxh
Y2UoKSBjb25zdDsKCiBwcml2YXRlOgojaWZkZWYgVFJBQ0tfQUxMX1RBU0tfT0JKRUNUUwoKICAv
LyBQb2ludGVyIHRvIGluc3RhbmNlIHdlcmUgY291bnRzIG9mIG9iamVjdHMgd2l0aCB0aGUgc2Ft
ZSBiaXJ0aCBsb2NhdGlvbgogIC8vIChvbiB0aGUgc2FtZSB0aHJlYWQpIGFyZSBzdG9yZWQuCiAg
QmlydGhzKiB0cmFja2VkX2JpcnRoc187CiAgLy8gVGhlIHRpbWUgdGhpcyBvYmplY3Qgd2FzIGNv
bnN0cnVjdGVkLiAgSWYgaXRzIGxpZmUgY29uc2lzdGVkIG9mIGEgbG9uZwogIC8vIHdhaXRpbmcg
cGVyaW9kLCBhbmQgdGhlbiBpdCBiZWNhbWUgYWN0aXZlLCB0aGVuIHRoaXMgdmFsdWUgaXMgZ2Vu
ZXJhbGx5CiAgLy8gcmVzZXQgYmVmb3JlIHRoZSBvYmplY3QgYmVnaW5zIGl0IGFjdGl2ZSBsaWZl
LgogIGJhc2U6OlRpbWUgdHJhY2tlZF9iaXJ0aF90aW1lXzsKCiNlbmRpZiAgLy8gVFJBQ0tfQUxM
X1RBU0tfT0JKRUNUUwoKICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHJhY2tlZCk7Cn07CgoK
fSAgLy8gbmFtZXNwYWNlIHRyYWNrZWRfb2JqZWN0cwoKI2VuZGlmICAvLyBCQVNFX1RSQUNLRURf
SF8KCiNpZm5kZWYgQkFTRV9UUkFDS0VEX09CSkVDVFNfSF8KI2RlZmluZSBCQVNFX1RSQUNLRURf
T0JKRUNUU19IXwoKY2xhc3MgTWVzc2FnZUxvb3A7CgpuYW1lc3BhY2UgdHJhY2tlZF9vYmplY3Rz
IHsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIEZvciBhIHNwZWNpZmljIHRocmVhZCwgYW5k
IGEgc3BlY2lmaWMgYmlydGggcGxhY2UsIHRoZSBjb2xsZWN0aW9uIG9mIGFsbAovLyBkZWF0aCBp
bmZvICh3aXRoIHRhbGxpZXMgZm9yIGVhY2ggZGVhdGggdGhyZWFkLCB0byBwcmV2ZW50IGFjY2Vz
cyBjb25mbGljdHMpLgpjbGFzcyBUaHJlYWREYXRhOwpjbGFzcyBCaXJ0aE9uVGhyZWFkIHsKIHB1
YmxpYzoKICBleHBsaWNpdCBCaXJ0aE9uVGhyZWFkKGNvbnN0IExvY2F0aW9uJiBsb2NhdGlvbik7
CgogIGNvbnN0IExvY2F0aW9uIGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbG9jYXRpb25fOyB9
CiAgY29uc3QgVGhyZWFkRGF0YSogYmlydGhfdGhyZWFkKCkgY29uc3QgeyByZXR1cm4gYmlydGhf
dGhyZWFkXzsgfQoKIHByaXZhdGU6CiAgLy8gRmlsZS9saW5lbm8gb2YgYmlydGguICBUaGlzIGRl
ZmluZXMgdGhlIGVzc2VuY2Ugb2YgdGhlIHR5cGUsIGFzIHRoZSBjb250ZXh0CiAgLy8gb2YgdGhl
IGJpcnRoIChjb25zdHJ1Y3Rpb24pIG9mdGVuIHRlbGwgd2hhdCB0aGUgaXRlbSBpcyBmb3IuICBU
aGlzIGZpZWxkCiAgLy8gaXMgY29uc3QsIGFuZCBoZW5jZSBzYWZlIHRvIGFjY2VzcyBmcm9tIGFu
eSB0aHJlYWQuCiAgY29uc3QgTG9jYXRpb24gbG9jYXRpb25fOwoKICAvLyBUaGUgdGhyZWFkIHRo
YXQgcmVjb3JkcyBiaXJ0aHMgaW50byB0aGlzIG9iamVjdC4gIE9ubHkgdGhpcyB0aHJlYWQgaXMK
ICAvLyBhbGxvd2VkIHRvIGFjY2VzcyBiaXJ0aF9jb3VudF8gKHdoaWNoIGNoYW5nZXMgb3ZlciB0
aW1lKS4KICBjb25zdCBUaHJlYWREYXRhKiBiaXJ0aF90aHJlYWRfOyAgLy8gVGhlIHRocmVhZCB0
aGlzIGJpcnRoIHRvb2sgcGxhY2Ugb24uCgogIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCaXJ0
aE9uVGhyZWFkKTsKfTsKCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBBIGNsYXNzIGZvciBh
Y2N1bXVsYXRpbmcgY291bnRzIG9mIGJpcnRocyAod2l0aG91dCBib3RoZXJpbmcgd2l0aCBhIG1h
cDw+KS4KCmNsYXNzIEJpcnRoczogcHVibGljIEJpcnRoT25UaHJlYWQgewogcHVibGljOgogIGV4
cGxpY2l0IEJpcnRocyhjb25zdCBMb2NhdGlvbiYgbG9jYXRpb24pOwoKICBpbnQgYmlydGhfY291
bnQoKSBjb25zdCB7IHJldHVybiBiaXJ0aF9jb3VudF87IH0KCiAgLy8gV2hlbiB3ZSBoYXZlIGEg
YmlydGggd2UgdXBkYXRlIHRoZSBjb3VudCBmb3IgdGhpcyBCaXJoUExhY2UuCiAgdm9pZCBSZWNv
cmRCaXJ0aCgpIHsgKytiaXJ0aF9jb3VudF87IH0KCiAgLy8gV2hlbiBhIGJpcnRocGxhY2UgaXMg
Y2hhbmdlZCAodXBkYXRlZCksIHdlIG5lZWQgdG8gZGVjcmVtZW50IHRoZSBjb3VudGVyCiAgLy8g
Zm9yIHRoZSBvbGQgaW5zdGFuY2UuCiAgdm9pZCBGb3JnZXRCaXJ0aCgpIHsgLS1iaXJ0aF9jb3Vu
dF87IH0gIC8vIFdlIGNvcnJlY3RlZCBhIGJpcnRoIHBsYWNlLgoKIHByaXZhdGU6CiAgLy8gVGhl
IG51bWJlciBvZiBiaXJ0aHMgb24gdGhpcyB0aHJlYWQgZm9yIG91ciBsb2NhdGlvbl8uCiAgaW50
IGJpcnRoX2NvdW50XzsKCiAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEJpcnRocyk7Cn07CgpC
aXJ0aHM6OkJpcnRocyhjb25zdCBMb2NhdGlvbiYgbG9jYXRpb24pCiAgICA6IEJpcnRoT25UaHJl
YWQobG9jYXRpb24pLAogICAgICBiaXJ0aF9jb3VudF8oMCkgeyB9CgoKCi8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi8vIEJhc2ljIGluZm8gc3VtbWFyaXppbmcgbXVsdGlwbGUgZGVzdHJ1Y3Rpb25z
IG9mIGFuIG9iamVjdCB3aXRoIGEgc2luZ2xlCi8vIGJpcnRocGxhY2UgKGZpeGVkIExvY2F0aW9u
KS4gIFVzZWQgYm90aCBvbiBzcGVjaWZpYyB0aHJlYWRzLCBhbmQgYWxzbyB1c2VkCi8vIGluIHNu
YXBzaG90cyB3aGVuIGludGVncmF0aW5nIGFzc2VtYmxlZCBkYXRhLgoKY2xhc3MgRGVhdGhEYXRh
IHsKIHB1YmxpYzoKICAvLyBEZWZhdWx0IGluaXRpYWxpemVyLgogIERlYXRoRGF0YSgpIDogY291
bnRfKDApLCBzcXVhcmVfZHVyYXRpb25fKDApIHt9CgogIC8vIFdoZW4gZGVhdGhzIGhhdmUgbm90
IHlldCB0YWtlbiBwbGFjZSwgYW5kIHdlIGdhdGhlciBkYXRhIGZyb20gYWxsIHRoZQogIC8vIHRo
cmVhZHMsIHdlIGNyZWF0ZSBEZWF0aERhdGEgc3RhdHMgdGhhdCB0YWxseSB0aGUgbnVtYmVyIG9m
IGJpcnRocyB3aXRob3V0CiAgLy8gYSBjb3Jyb3Nwb25kaW5nIGRlYXRoLgogIGV4cGxpY2l0IERl
YXRoRGF0YShpbnQgY291bnQpIDogY291bnRfKGNvdW50KSwgc3F1YXJlX2R1cmF0aW9uXygwKSB7
fQoKICB2b2lkIFJlY29yZERlYXRoKGNvbnN0IGJhc2U6OlRpbWVEZWx0YSYgZHVyYXRpb24pIHsK
ICArK2NvdW50XzsKICBsaWZlX2R1cmF0aW9uXyArPSBkdXJhdGlvbjsKICBpbnQ2NCBtaWxsaXNl
Y29uZHMgPSBkdXJhdGlvbi5Jbk1pbGxpc2Vjb25kcygpOwogIHNxdWFyZV9kdXJhdGlvbl8gKz0g
bWlsbGlzZWNvbmRzICogbWlsbGlzZWNvbmRzOwp9CiAgLy8gTWV0cmljcyBhY2Nlc3NvcnMuCiAg
aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gY291bnRfOyB9CiAgYmFzZTo6VGltZURlbHRhIGxp
ZmVfZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBsaWZlX2R1cmF0aW9uXzsgfQogIGludDY0IHNx
dWFyZV9kdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHNxdWFyZV9kdXJhdGlvbl87IH0KICBpbnQg
QXZlcmFnZU1zRHVyYXRpb24oKSBjb25zdDsKICBkb3VibGUgU3RhbmRhcmREZXZpYXRpb24oKSBj
b25zdDsKCiAgLy8gQWNjdW11bGF0ZSBtZXRyaWNzIGZyb20gb3RoZXIgaW50byB0aGlzLgogIHZv
aWQgQWRkRGVhdGhEYXRhKGNvbnN0IERlYXRoRGF0YSYgb3RoZXIpOwoKICAvLyBTaW1wbGUgcHJp
bnQgb2YgaW50ZXJuYWwgc3RhdGUuCiAgdm9pZCBXcml0ZShzdGQ6OnN0cmluZyogb3V0cHV0KSBj
b25zdDsKCiAgdm9pZCBDbGVhcigpOwoKIHByaXZhdGU6CiAgaW50IGNvdW50XzsgICAgICAgICAg
ICAgICAgLy8gTnVtYmVyIG9mIGRlc3RydWN0aW9ucy4KICBiYXNlOjpUaW1lRGVsdGEgbGlmZV9k
dXJhdGlvbl87ICAgIC8vIFN1bSBvZiBhbGwgbGlmZXRpbWUgZHVyYXRpb25zLgogIGludDY0IHNx
dWFyZV9kdXJhdGlvbl87ICAvLyBTdW0gb2Ygc3F1YXJlcyBpbiBtaWxsaXNlY29uZHMuCn07Cgov
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBBIHRlbXBvcmFyeSBjb2xsZWN0aW9uIG9mIGRhdGEg
dGhhdCBjYW4gYmUgc29ydGVkIGFuZCBzdW1tYXJpemVkLiAgSXQgaXMKLy8gZ2F0aGVyZWQgKGNh
cmVmdWxseSkgZnJvbSBtYW55IHRocmVhZHMuICBJbnN0YW5jZXMgYXJlIGhlbGQgaW4gYXJyYXlz
IGFuZAovLyBwcm9jZXNzZWQsIGZpbHRlcmVkLCBhbmQgcmVuZGVyZWQuCi8vIFRoZSBzb3VyY2Ug
b2YgdGhpcyBkYXRhIHdhcyBjb2xsZWN0ZWQgb24gbWFueSB0aHJlYWRzLCBhbmQgaXMgYXN5bmNo
cm9ub3VzbHkKLy8gY2hhbmdpbmcuICBUaGUgZGF0YSBpbiB0aGlzIGluc3RhbmNlIGlzIG5vdCBh
c3luY2hyb25vdXNseSBjaGFuZ2luZy4KCmNsYXNzIFNuYXBzaG90IHsKIHB1YmxpYzoKICAvLyBX
aGVuIHNuYXBzaG90dGluZyBhIGZ1bGwgbGlmZSBjeWNsZSBzZXQgKGJpcnRoLXRvLWRlYXRoKSwg
dXNlIHRoaXM6CiAgU25hcHNob3QoY29uc3QgQmlydGhPblRocmVhZCYgYmlydGhfb25fdGhyZWFk
LCBjb25zdCBUaHJlYWREYXRhJiBkZWF0aF90aHJlYWQsCiAgICAgICAgICAgY29uc3QgRGVhdGhE
YXRhJiBkZWF0aF9kYXRhKTsKCiAgLy8gV2hlbiBzbmFwc2hvdHRpbmcgYSBiaXJ0aCwgd2l0aCBu
byBkZWF0aCB5ZXQsIHVzZSB0aGlzOgogIFNuYXBzaG90KGNvbnN0IEJpcnRoT25UaHJlYWQmIGJp
cnRoX29uX3RocmVhZCwgaW50IGNvdW50KTsKCgogIGNvbnN0IFRocmVhZERhdGEqIGJpcnRoX3Ro
cmVhZCgpIGNvbnN0IHsgcmV0dXJuIGJpcnRoXy0+YmlydGhfdGhyZWFkKCk7IH0KICBjb25zdCBM
b2NhdGlvbiBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGJpcnRoXy0+bG9jYXRpb24oKTsgfQog
IGNvbnN0IEJpcnRoT25UaHJlYWQmIGJpcnRoKCkgY29uc3QgeyByZXR1cm4gKmJpcnRoXzsgfQog
IGNvbnN0IFRocmVhZERhdGEqIGRlYXRoX3RocmVhZCgpIGNvbnN0IHtyZXR1cm4gZGVhdGhfdGhy
ZWFkXzsgfQogIGNvbnN0IERlYXRoRGF0YSYgZGVhdGhfZGF0YSgpIGNvbnN0IHsgcmV0dXJuIGRl
YXRoX2RhdGFfOyB9CiAgY29uc3Qgc3RkOjpzdHJpbmcgRGVhdGhUaHJlYWROYW1lKCkgY29uc3Q7
CgogIGludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIGRlYXRoX2RhdGFfLmNvdW50KCk7IH0KICBi
YXNlOjpUaW1lRGVsdGEgbGlmZV9kdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGRlYXRoX2RhdGFf
LmxpZmVfZHVyYXRpb24oKTsgfQogIGludDY0IHNxdWFyZV9kdXJhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIGRlYXRoX2RhdGFfLnNxdWFyZV9kdXJhdGlvbigpOyB9CiAgaW50IEF2ZXJhZ2VNc0R1cmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gZGVhdGhfZGF0YV8uQXZlcmFnZU1zRHVyYXRpb24oKTsgfQoK
ICB2b2lkIFdyaXRlKHN0ZDo6c3RyaW5nKiBvdXRwdXQpIGNvbnN0OwoKICB2b2lkIEFkZChjb25z
dCBTbmFwc2hvdCYgb3RoZXIpOwoKIHByaXZhdGU6CiAgY29uc3QgQmlydGhPblRocmVhZCogYmly
dGhfOyAgLy8gSW5jbHVkZXMgTG9jYXRpb24gYW5kIGJpcnRoX3RocmVhZC4KICBjb25zdCBUaHJl
YWREYXRhKiBkZWF0aF90aHJlYWRfOwogIERlYXRoRGF0YSBkZWF0aF9kYXRhXzsKfTsKLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLy8gRGF0YUNvbGxlY3RvciBpcyBhIGNvbnRhaW5lciBjbGFzcyBm
b3IgU25hcHNob3QgYW5kIEJpcnRoT25UaHJlYWQgY291bnQKLy8gaXRlbXMuICBJdCBwcm90ZWN0
cyB0aGUgZ2F0aGVyaW5nIHVuZGVyIGxvY2tzLCBzbyB0aGF0IGl0IGNvdWxkIGJlIGNhbGxlZCB2
aWEKLy8gUG9zdHRhc2sgb24gYW55IHRocmVhZHMsIHN1Y2ggYXMgYWxsIHRoZSB0YXJnZXQgdGhy
ZWFkcyBpbiBwYXJhbGxlbC4KCmNsYXNzIERhdGFDb2xsZWN0b3IgewogcHVibGljOgogIHR5cGVk
ZWYgc3RkOjp2ZWN0b3I8U25hcHNob3Q+IENvbGxlY3Rpb247CgogIC8vIENvbnN0cnVjdCB3aXRo
IGEgbGlzdCBvZiBob3cgbWFueSB0aHJlYWRzIHNob3VsZCBjb250cmlidXRlLiAgVGhpcyBoZWxw
cyB1cwogIC8vIGRldGVybWluZSAoaW4gdGhlIGFzeW5jIGNhc2UpIHdoZW4gd2UgYXJlIGRvbmUg
d2l0aCBhbGwgY29udHJpYnV0aW9ucy4KICBEYXRhQ29sbGVjdG9yKCk7CgogIC8vIEFkZCBhbGwg
c3RhdHMgZnJvbSB0aGUgaW5kaWNhdGVkIHRocmVhZCBpbnRvIG91ciBhcnJheXMuICBUaGlzIGZ1
bmN0aW9uIGlzCiAgLy8gbXV0ZXggcHJvdGVjdGVkLCBhbmQgKmNvdWxkKiBiZSBjYWxsZWQgZnJv
bSBhbnkgdGhyZWFkcyAoYWx0aG91Z2ggY3VycmVudAogIC8vIGltcGxlbWVudGF0aW9uIHNlcmlh
bGl6ZWQgY2FsbHMgdG8gQXBwZW5kKS4KICB2b2lkIEFwcGVuZChjb25zdCBUaHJlYWREYXRhJiB0
aHJlYWRfZGF0YSk7CgogIC8vIEFmdGVyIHRoZSBhY2N1bXVsYXRpb24gcGhhc2UsIHRoZSBmb2xs
b3dpbmcgYWNjZXNzIGlzIHRvIHByb2Nlc3MgZGF0YS4KICBDb2xsZWN0aW9uKiBjb2xsZWN0aW9u
KCk7CgogIC8vIEFmdGVyIGNvbGxlY3Rpb24gb2YgZGVhdGggZGF0YSBpcyBjb21wbGV0ZSwgd2Ug
Y2FuIGFkZCBlbnRyaWVzIGZvciBhbGwgdGhlCiAgLy8gcmVtYWluaW5nIGxpdmluZyBvYmplY3Rz
LgogIHZvaWQgQWRkTGlzdE9mTGl2aW5nT2JqZWN0cygpOwoKIHByaXZhdGU6CiAgLy8gVGhpcyBp
bnN0YW5jZSBtYXkgYmUgcHJvdmlkZWQgdG8gc2V2ZXJhbCB0aHJlYWRzIHRvIGNvbnRyaWJ1dGUg
ZGF0YS4gIFRoZQogIC8vIGZvbGxvd2luZyBjb3VudGVyIHRyYWNrcyBob3cgbWFueSBtb3JlIHRo
cmVhZHMgd2lsbCBjb250cmlidXRlLiAgV2hlbiBpdCBpcwogIC8vIHplcm8sIHRoZW4gYWxsIGFz
eW5jaHJvbm91cyBjb250cmlidXRpb25zIGFyZSBjb21wbGV0ZSwgYW5kIGxvY2tlZCBhY2Nlc3MK
ICAvLyBpcyBubyBsb25nZXIgbmVlZGVkLgogIGludCBjb3VudF9vZl9jb250cmlidXRpbmdfdGhy
ZWFkc187CgogIC8vIFRoZSBhcnJheSB0aGF0IHdlIGNvbGxlY3QgZGF0YSBpbnRvLgogIENvbGxl
Y3Rpb24gY29sbGVjdGlvbl87CgogIC8vIFRoZSB0b3RhbCBudW1iZXIgb2YgYmlydGhzIHJlY29y
ZGVkIGF0IGVhY2ggbG9jYXRpb24gZm9yIHdoaWNoIHdlIGhhdmUgbm90CiAgLy8gc2VlbiBhIGRl
YXRoIGNvdW50LgogIHR5cGVkZWYgc3RkOjptYXA8Y29uc3QgQmlydGhPblRocmVhZCosIGludD4g
QmlydGhDb3VudDsKICBCaXJ0aENvdW50IGdsb2JhbF9iaXJ0aF9jb3VudF87CgogIExvY2sgYWNj
dW11bGF0aW9uX2xvY2tfOyAgLy8gUHJvdGVjdHMgYWNjZXNzIGR1cmluZyBhY2N1bXVsYXRpb24g
cGhhc2UuCgogIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEYXRhQ29sbGVjdG9yKTsKfTsKCi8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIEFnZ3JlZ2F0aW9uIGNvbnRhaW5zIHN1bW1hcmllcyAo
dG90YWxzIGFuZCBzdWJ0b3RhbHMpIG9mIGdyb3VwcyBvZiBTbmFwc2hvdAovLyBpbnN0YW5jZXMg
dG8gcHJvdmlkZSBwcmludGluZyBvZiB0aGVzZSBjb2xsZWN0aW9ucyBvbiBhIHNpbmdsZSBsaW5l
LgoKY2xhc3MgQWdncmVnYXRpb246IHB1YmxpYyBEZWF0aERhdGEgewogcHVibGljOgogIEFnZ3Jl
Z2F0aW9uKCkgOiBiaXJ0aF9jb3VudF8oMCkge30KCiAgdm9pZCBBZGREZWF0aFNuYXBzaG90KGNv
bnN0IFNuYXBzaG90JiBzbmFwc2hvdCk7CiAgdm9pZCBBZGRCaXJ0aHMoY29uc3QgQmlydGhzJiBi
aXJ0aHMpOwogIHZvaWQgQWRkQmlydGgoY29uc3QgQmlydGhPblRocmVhZCYgYmlydGgpOwogIHZv
aWQgQWRkQmlydGhQbGFjZShjb25zdCBMb2NhdGlvbiYgbG9jYXRpb24pOwogIHZvaWQgV3JpdGUo
c3RkOjpzdHJpbmcqIG91dHB1dCkgY29uc3Q7CiAgdm9pZCBDbGVhcigpOwoKIHByaXZhdGU6CiAg
aW50IGJpcnRoX2NvdW50XzsKICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgaW50PiBiaXJ0aF9maWxl
c187CiAgc3RkOjptYXA8TG9jYXRpb24sIGludD4gbG9jYXRpb25zXzsKICBzdGQ6Om1hcDxjb25z
dCBUaHJlYWREYXRhKiwgaW50PiBiaXJ0aF90aHJlYWRzXzsKICBEZWF0aERhdGEgZGVhdGhfZGF0
YV87CiAgc3RkOjptYXA8Y29uc3QgVGhyZWFkRGF0YSosIGludD4gZGVhdGhfdGhyZWFkc187Cgog
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihBZ2dyZWdhdGlvbik7Cn07CgovLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQovLyBDb21wYXJhdG9yIGRvZXMgdGhlIGNvbXBhcmlzb24gb2YgU25hcHNob3Qg
aW5zdGFuY2VzLiAgSXQgaXMKLy8gdXNlZCB0byBvcmRlciB0aGUgaW5zdGFuY2VzIGluIGEgdmVj
dG9yLiAgSXQgb3JkZXJzIHRoZW0gaW50byBncm91cHMgKGZvcgovLyBhZ2dyZWdhdGlvbiksIGFu
ZCBjYW4gYWxzbyBvcmRlciBpbnN0YW5jZXMgd2l0aGluIHRoZSBncm91cHMgKGZvciBkZXRhaWxl
ZAovLyByZW5kZXJpbmcgb2YgdGhlIGluc3RhbmNlcykuCgpjbGFzcyBDb21wYXJhdG9yIHsKIHB1
YmxpYzoKICBlbnVtIFNlbGVjdG9yIHsKICAgIE5JTCA9IDAsCiAgICBCSVJUSF9USFJFQUQgPSAx
LAogICAgREVBVEhfVEhSRUFEID0gMiwKICAgIEJJUlRIX0ZJTEUgPSA0LAogICAgQklSVEhfRlVO
Q1RJT04gPSA4LAogICAgQklSVEhfTElORSA9IDE2LAogICAgQ09VTlQgPSAzMiwKICAgIEFWRVJB
R0VfRFVSQVRJT04gPSA2NCwKICAgIFRPVEFMX0RVUkFUSU9OID0gMTI4LAogIH07CgogIGV4cGxp
Y2l0IENvbXBhcmF0b3IoKTsKCiAgLy8gUmVzZXQgdGhlIGNvbXBhcmF0b3IgdG8gYSBOSUwgc2Vs
ZWN0b3IuICBSZXNldCgpIGFuZCByZWN1cnNpdmVseSBkZWxldGUgYW55CiAgLy8gdGllYnJlYWtl
cl8gZW50cmllcy4gIE5PVEU6IFdlIGNhbid0IHVzZSBhIHN0YW5kYXJkIGRlc3RydWN0b3IsIGJl
Y2F1c2UKICAvLyB0aGUgc29ydCBhbGdvcml0aG0gbWFrZXMgY29waWVzIG9mIHRoaXMgb2JqZWN0
LCBhbmQgdGhlbiBkZWxldGVzIHRoZW0sCiAgLy8gd2hpY2ggd291bGQgY2F1c2UgcHJvYmxlbXMg
KGVpdGhlciB3ZSdkIG1ha2UgZXhwZW5zaXZlIGRlZXAgY29waWVzLCBvciB3ZSdkCiAgLy8gZG8g
bW9yZSB0aG5hIG9uZSBkZWxldGUgb24gYSB0aWVicmVha2VyXy4KICB2b2lkIENsZWFyKCk7Cgog
IC8vIFRoZSBsZXNzKCkgb3BlcmF0b3IgZm9yIHNvcnRpbmcgdGhlIGFycmF5IHZpYSBzdGQ6OnNv
cnQoKS4KICBib29sIG9wZXJhdG9yKCkoY29uc3QgU25hcHNob3QmIGxlZnQsIGNvbnN0IFNuYXBz
aG90JiByaWdodCkgY29uc3Q7CgogIHZvaWQgU29ydChEYXRhQ29sbGVjdG9yOjpDb2xsZWN0aW9u
KiBjb2xsZWN0aW9uKSBjb25zdDsKCiAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBpdGVtcyBhcmUg
c29ydCBlcXVpdmFsZW50cyAoc2hvdWxkIGJlIGFnZ3JlZ2F0ZWQpLgogIGJvb2wgRXF1aXZhbGVu
dChjb25zdCBTbmFwc2hvdCYgbGVmdCwgY29uc3QgU25hcHNob3QmIHJpZ2h0KSBjb25zdDsKCiAg
Ly8gQ2hlY2sgdG8gc2VlIGlmIGFsbCByZXF1aXJlZCBmaWVsZHMgYXJlIHByZXNlbnQgaW4gdGhl
IGdpdmVuIHNhbXBsZS4KICBib29sIEFjY2VwdGFibGUoY29uc3QgU25hcHNob3QmIHNhbXBsZSkg
Y29uc3Q7CgogIC8vIEEgY29tcGFyYXRvciBjYW4gYmUgcmVmaW5lZCBieSBzcGVjaWZ5aW5nIHdo
YXQgdG8gZG8gaWYgdGhlIHNlbGVjdGVkIGJhc2lzCiAgLy8gZm9yIGNvbXBhcmlzb24gaXMgaW5z
dWZmaWNpZW50IHRvIGVzdGFibGlzaCBhbiBvcmRlcmluZy4gIFRoaXMgY2FsbCBhZGRzCiAgLy8g
dGhlIGluZGljYXRlZCBhdHRyaWJ1dGUgYXMgdGhlIG5ldyAibGVhc3Qgc2lnbmlmaWNhbnQiIGJh
c2lzIG9mIGNvbXBhcmlzb24uCiAgdm9pZCBTZXRUaWVicmVha2VyKFNlbGVjdG9yIHNlbGVjdG9y
LCBjb25zdCBzdGQ6OnN0cmluZyYgcmVxdWlyZWQpOwoKICAvLyBJbmRpY2F0ZSBpZiB0aGlzIGlu
c3RhbmNlIGlzIHNldCB1cCB0byBzb3J0IGJ5IHRoZSBnaXZlbiBTZWxlY3RvciwgdGhlcmVieQog
IC8vIHB1dHRpbmcgdGhhdCBpbmZvcm1hdGlvbiBpbiB0aGUgU29ydEdyb3VwaW5nLCBzbyBpdCBp
cyBub3QgbmVlZGVkIGluIGVhY2gKICAvLyBwcmludGVkIGxpbmUuCiAgYm9vbCBJc0dyb3VwZWRC
eShTZWxlY3RvciBzZWxlY3RvcikgY29uc3Q7CgogIC8vIFVzaW5nIHRoZSB0aWVicmVha2VycyBh
cyBzZXQgYWJvdmUsIHdlIG1vc3RseSBnZXQgYW4gb3JkZXJpbmcsIHdoaWNoCiAgLy8gZXF1aXZh
bGVudCBncm91cHMuICBJZiB0aG9zZSBncm91cHMgYXJlIGRpc3BsYXllZCAocmF0aGVyIHRoYW4g
anVzdCBiZWluZwogIC8vIGFnZ3JlZ2F0ZWQsIHRoZW4gdGhlIGZvbGxvd2luZyBpcyB1c2VkIHRv
IG9yZGVyIHRoZW0gKHdpdGhpbiB0aGUgZ3JvdXApLgogIHZvaWQgU2V0U3ViZ3JvdXBUaWVicmVh
a2VyKFNlbGVjdG9yIHNlbGVjdG9yKTsKCiAgLy8gVHJhbnNsYXRlIGEga2V5d29yZCBhbmQgcmVz
dHJpY3Rpb24gaW4gVVJMIHBhdGggdG8gYSBzZWxlY3RvciBmb3Igc29ydGluZy4KICB2b2lkIFBh
cnNlS2V5cGhyYXNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfcGhyYXNlKTsKCiAgLy8gUGFyc2Ug
YSBxdWVyeSBpbiBhbiBhYm91dDpvYmplY3RzIFVSTCB0byBkZWNpZGUgb24gc29ydCBvcmRlcmlu
Zy4KICBib29sIFBhcnNlUXVlcnkoY29uc3Qgc3RkOjpzdHJpbmcmIHF1ZXJ5KTsKCiAgLy8gT3V0
cHV0IGEgaGVhZGVyIGxpbmUgdGhhdCBjYW4gYmUgdXNlZCB0byBpbmRpY2F0ZWQgd2hhdCBpdGVt
cyB3aWxsIGJlCiAgLy8gY29sbGVjdGVkIGluIHRoZSBncm91cC4gIEl0IGxpc3RzIGFsbCAocG90
ZW50aWFsbHkpIHRlc3RlZCBhdHRyaWJ1dGVzIGFuZAogIC8vIHRoZWlyIHZhbHVlcyAoaW4gdGhl
IHNhbXBsZSBpdGVtKS4KICBib29sIFdyaXRlU29ydEdyb3VwaW5nKGNvbnN0IFNuYXBzaG90JiBz
YW1wbGUsIHN0ZDo6c3RyaW5nKiBvdXRwdXQpIGNvbnN0OwoKICAvLyBPdXRwdXQgYSBzYW1wbGUs
IHdpdGggU29ydEdyb3VwIGRldGFpbHMgbm90IGRpc3BsYXllZC4KICB2b2lkIFdyaXRlU25hcHNo
b3QoY29uc3QgU25hcHNob3QmIHNhbXBsZSwgc3RkOjpzdHJpbmcqIG91dHB1dCkgY29uc3Q7Cgog
cHJpdmF0ZToKICAvLyBUaGUgc2VsZWN0b3IgZGlyZWN0cyB0aGlzIGluc3RhbmNlIHRvIGNvbXBh
cmUgYmFzZWQgb24gdGhlIHNwZWNpZmllZAogIC8vIG1lbWJlcnMgb2YgdGhlIHRlc3RlZCBlbGVt
ZW50cy4KICBlbnVtIFNlbGVjdG9yIHNlbGVjdG9yXzsKCiAgLy8gRm9yIGZpbHRlcmluZyBpbnRv
IGFjY2VwdGFibGUgYW5kIHVuYWNjZXB0YWJsZSBzbmFwc2hvdCBpbnN0YW5jZSwgdGhlCiAgLy8g
Zm9sbG93aW5nIGlzIHJlcXVpcmVkIHRvIGJlIGEgc3Vic3RyaW5nIG9mIHRoZSBzZWxlY3Rvcl8g
ZmllbGQuCiAgc3RkOjpzdHJpbmcgcmVxdWlyZWRfOwoKICAvLyBJZiB0aGlzIGluc3RhbmNlIGNh
bid0IGRlY2lkZSBvbiBhbiBvcmRlcmluZywgd2UgY2FuIGNvbnN1bHQgYSB0aWUtYnJlYWtlcgog
IC8vIHdoaWNoIG1heSBoYXZlIGEgZGlmZmVyZW50IGJhc2lzIG9mIGNvbXBhcmlzb24uCiAgQ29t
cGFyYXRvciogdGllYnJlYWtlcl87CgogIC8vIFdlIG9yIHRvZ2V0aGVyIGFsbCB0aGUgc2VsZWN0
b3JzIHdlIHNvcnQgb24gKG5vdCBjb3VudGluZyBzdWItZ3JvdXAKICAvLyBzZWxlY3RvcnMpLCBz
byB0aGF0IHdlIGNhbiB0ZWxsIGlmIHdlJ3ZlIGRlY2lkZWQgdG8gZ3JvdXAgb24gYW55IGdpdmVu
CiAgLy8gY3JpdGVyaWEuCiAgaW50IGNvbWJpbmVkX3NlbGVjdG9yc187CgogIC8vIFNvbWUgdGll
YnJlYWtycyBhcmUgZm9yIHN1Ymdyb3VwIG9yZGVyaW5nLCBhbmQgbm90IGZvciBiYXNpYyBvcmRl
cmluZyAoaW4KICAvLyBwcmVwYXJhdGlvbiBmb3IgYWdncmVnYXRpb24pLiAgVGhlIHN1Ymdyb3Vw
IHRpZWJyZWFrZXJzIGFyZSBub3QgY29uc3VsdGVkCiAgLy8gd2hlbiBkZWNpZGluZyBpZiB0d28g
aXRlbXMgYXJlIGluIGVxdWl2YWxlbnQgZ3JvdXBzLiAgVGhpcyBmbGFnIHRlbGxzIHVzCiAgLy8g
dG8gaWdub3JlIHRoZSB0aWVicmVha2VyIHdoZW4gZG9pbmcgRXF1aXZhbGVudCgpIHRlc3Rpbmcu
CiAgYm9vbCB1c2VfdGllYnJlYWtlcl9mb3Jfc29ydF9vbmx5XzsKfTsKCgovLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQovLyBGb3IgZWFjaCB0aHJlYWQsIHdlIGhhdmUgYSBUaHJlYWREYXRhIHRoYXQg
c3RvcmVzIGFsbCB0cmFja2luZyBpbmZvIGdlbmVyYXRlZAovLyBvbiB0aGlzIHRocmVhZC4gIFRo
aXMgcHJldmVudHMgdGhlIG5lZWQgZm9yIGxvY2tpbmcgYXMgZGF0YSBhY2N1bXVsYXRlcy4KCmNs
YXNzIFRocmVhZERhdGEgewogcHVibGljOgogIHR5cGVkZWYgc3RkOjptYXA8TG9jYXRpb24sIEJp
cnRocyo+IEJpcnRoTWFwOwogIHR5cGVkZWYgc3RkOjptYXA8Y29uc3QgQmlydGhzKiwgRGVhdGhE
YXRhPiBEZWF0aE1hcDsKCiAgVGhyZWFkRGF0YSgpOwoKICAvLyBVc2luZyBUaHJlYWQgTG9jYWwg
U3RvcmUsIGZpbmQgdGhlIGN1cnJlbnQgaW5zdGFuY2UgZm9yIGNvbGxlY3RpbmcgZGF0YS4KICAv
LyBJZiBhbiBpbnN0YW5jZSBkb2VzIG5vdCBleGlzdCwgY29uc3RydWN0IG9uZSAoYW5kIHJlbWVt
YmVyIGl0IGZvciB1c2Ugb24KICAvLyB0aGlzIHRocmVhZC4KICAvLyBJZiBzaHV0ZG93biBoYXMg
YWxyZWFkeSBzdGFydGVkLCBhbmQgd2UgZG9uJ3QgeWV0IGhhdmUgYW4gaW5zdGFuY2UsIHRoZW4K
ICAvLyByZXR1cm4gbnVsbC4Kc3RhdGljIFRocmVhZERhdGEqIGN1cnJlbnQoKSB7CiAgaWYgKCF0
bHNfaW5kZXhfLmluaXRpYWxpemVkKCkpCiAgICByZXR1cm4gTlVMTDsKCiAgVGhyZWFkRGF0YSog
cmVnaXN0cnkgPSBzdGF0aWNfY2FzdDxUaHJlYWREYXRhKj4odGxzX2luZGV4Xy5HZXQoKSk7CiAg
aWYgKCFyZWdpc3RyeSkgewogICAgLy8gV2UgaGF2ZSB0byBjcmVhdGUgYSBuZXcgcmVnaXN0cnkg
Zm9yIFRocmVhZERhdGEuCiAgICBib29sIHRvb19sYXRlX3RvX2NyZWF0ZSA9IGZhbHNlOwogICAg
ewogICAgICByZWdpc3RyeSA9IG5ldyBUaHJlYWREYXRhOwogICAgICBBdXRvTG9jayBsb2NrKGxp
c3RfbG9ja18pOwogICAgICAvLyBVc2UgbG9jayB0byBpbnN1cmUgd2UgaGF2ZSBtb3N0IHJlY2Vu
dCBzdGF0dXMuCiAgICAgIGlmICghSXNBY3RpdmUoKSkgewogICAgICAgIHRvb19sYXRlX3RvX2Ny
ZWF0ZSA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVXNlIGxvY2sgdG8gaW5zZXJ0
IGludG8gbGlzdC4KICAgICAgICByZWdpc3RyeS0+bmV4dF8gPSBmaXJzdF87CiAgICAgICAgZmly
c3RfID0gcmVnaXN0cnk7CiAgICAgIH0KICAgIH0gIC8vIFJlbGVhc2UgbG9jay4KICAgIGlmICh0
b29fbGF0ZV90b19jcmVhdGUpIHsKICAgICAgZGVsZXRlIHJlZ2lzdHJ5OwogICAgICByZWdpc3Ry
eSA9IE5VTEw7CiAgICB9IGVsc2UgewogICAgICB0bHNfaW5kZXhfLlNldChyZWdpc3RyeSk7CiAg
ICB9CiAgfQogIHJldHVybiByZWdpc3RyeTsKfQoKCiAgLy8gRm9yIGEgZ2l2ZW4gYWJvdXQ6b2Jq
ZWN0cyBVUkwsIGRldmVsb3AgcmVzdWx0aW5nIEhUTUwsIGFuZCBhcHBlbmQgdG8KICAvLyBvdXRw
dXQuCiAgc3RhdGljIHZvaWQgV3JpdGVIVE1MKGNvbnN0IHN0ZDo6c3RyaW5nJiBxdWVyeSwgc3Rk
OjpzdHJpbmcqIG91dHB1dCk7CgogIC8vIEZvciBhIGdpdmVuIGFjY3VtdWxhdGVkIGFycmF5IG9m
IHJlc3VsdHMsIHVzZSB0aGUgY29tcGFyYXRvciB0byBzb3J0IGFuZAogIC8vIHN1YnRvdGFsLCB3
cml0aW5nIHRoZSByZXN1bHRzIHRvIHRoZSBvdXRwdXQuCiAgc3RhdGljIHZvaWQgV3JpdGVIVE1M
VG90YWxBbmRTdWJ0b3RhbHMoCiAgICAgIGNvbnN0IERhdGFDb2xsZWN0b3I6OkNvbGxlY3Rpb24m
IG1hdGNoX2FycmF5LAogICAgICBjb25zdCBDb21wYXJhdG9yJiBjb21wYXJhdG9yLCBzdGQ6OnN0
cmluZyogb3V0cHV0KTsKCiAgLy8gSW4gdGhpcyB0aHJlYWQncyBkYXRhLCBmaW5kIGEgcGxhY2Ug
dG8gcmVjb3JkIGEgbmV3IGJpcnRoLgogIEJpcnRocyogRmluZExpZmV0aW1lKGNvbnN0IExvY2F0
aW9uJiBsb2NhdGlvbik7CgogIC8vIEZpbmQgYSBwbGFjZSB0byByZWNvcmQgYSBkZWF0aCBvbiB0
aGlzIHRocmVhZC4KICB2b2lkIFRhbGx5QURlYXRoKGNvbnN0IEJpcnRocyYgbGlmZXRpbWVzLCBj
b25zdCBiYXNlOjpUaW1lRGVsdGEmIGR1cmF0aW9uKTsKCiAgLy8gKFRocmVhZCBzYWZlKSBHZXQg
c3RhcnQgb2YgbGlzdCBvZiBpbnN0YW5jZXMuCiAgc3RhdGljIFRocmVhZERhdGEqIGZpcnN0KCk7
CiAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBudWxsIHRlcm1pbmF0ZWQgbGlzdCBvZiBpbnN0YW5j
ZXMuCiAgVGhyZWFkRGF0YSogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG5leHRfOyB9CgogIE1lc3Nh
Z2VMb29wKiBtZXNzYWdlX2xvb3AoKSBjb25zdCB7IHJldHVybiBtZXNzYWdlX2xvb3BfOyB9CiAg
Y29uc3Qgc3RkOjpzdHJpbmcgVGhyZWFkTmFtZSgpIGNvbnN0OwoKICAvLyBVc2luZyBvdXIgbG9j
aywgbWFrZSBhIGNvcHkgb2YgdGhlIHNwZWNpZmllZCBtYXBzLiAgVGhlc2UgY2FsbHMgbWF5IGFy
cml2ZQogIC8vIGZyb20gbm9uLWxvY2FsIHRocmVhZHMuCiAgdm9pZCBTbmFwc2hvdEJpcnRoTWFw
KEJpcnRoTWFwICpvdXRwdXQpIGNvbnN0OwogIHZvaWQgU25hcHNob3REZWF0aE1hcChEZWF0aE1h
cCAqb3V0cHV0KSBjb25zdDsKCiAgc3RhdGljIHZvaWQgUnVuT25BbGxUaHJlYWRzKHZvaWQgKCpG
dW5jKSgpKTsKCiAgLy8gU2V0IGludGVybmFsIHN0YXR1c18gdG8gZWl0aGVyIGJlY29tZSBBQ1RJ
VkUsIG9yIGxhdGVyLCB0byBiZSBTSFVURE9XTiwKICAvLyBiYXNlZCBvbiBhcmd1bWVudCBiZWlu
ZyB0cnVlIG9yIGZhbHNlIHJlc3BlY3RpdmVseS4KICAvLyBJRiB0cmFja2luZyBpcyBub3QgY29t
cGlsZWQgaW4sIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gZmFsc2UuCiAgc3RhdGljIGJvb2wg
U3RhcnRUcmFja2luZyhib29sIHN0YXR1cyk7CiAgc3RhdGljIGJvb2wgSXNBY3RpdmUoKSB7CiAg
cmV0dXJuIChzdGF0dXNfKSA9PSBBQ1RJVkU7Cn0KCiAgLy8gV0FSTklORzogT05MWSBjYWxsIHRo
aXMgZnVuY3Rpb24gd2hlbiB5b3UgYXJlIHJ1bm5pbmcgc2luZ2xlIHRocmVhZGVkCiAgLy8gKGFn
YWluKSBhbmQgYWxsIG1lc3NhZ2UgbG9vcHMgYW5kIHRocmVhZHMgaGF2ZSB0ZXJtaW5hdGVkLiAg
VW50aWwgdGhhdAogIC8vIHBvaW50IHNvbWUgdGhyZWFkcyBtYXkgc3RpbGwgYXR0ZW1wdCB0byB3
cml0ZSBpbnRvIG91ciBkYXRhIHN0cnVjdHVyZXMuCiAgLy8gRGVsZXRlIHJlY3Vyc2l2ZWx5IGFs
bCBkYXRhIHN0cnVjdHVyZXMsIHN0YXJ0aW5nIHdpdGggdGhlIGxpc3Qgb2YKICAvLyBUaHJlYWRE
YXRhIGluc3RhbmNlcy4KICBzdGF0aWMgdm9pZCBTaHV0ZG93blNpbmdsZVRocmVhZGVkQ2xlYW51
cCgpOwoKIHByaXZhdGU6CiAgLy8gQ3VycmVudCBhbGxvd2FibGUgc3RhdGVzIG9mIHRoZSB0cmFj
a2luZyBzeXN0ZW0uICBUaGUgc3RhdGVzIGFsd2F5cwogIC8vIHByb2NlZWQgdG93YXJkcyBTSFVU
RE9XTiwgYW5kIG5ldmVyIGdvIGJhY2t3YXJkcy4KICBlbnVtIFN0YXR1cyB7CiAgICBVTklOSVRJ
QUxJWkVELAogICAgQUNUSVZFLAogICAgU0hVVERPV04sCiAgfTsKCiAgLy8gQSBjbGFzcyB1c2Vk
IHRvIGNvdW50IGRvd24gd2hpY2ggaXMgYWNjZXNzZWQgYnkgc2V2ZXJhbCB0aHJlYWRzLiAgVGhp
cyBpcwogIC8vIHVzZWQgdG8gbWFrZSBzdXJlIFJ1bk9uQWxsVGhyZWFkcygpIGFjdHVhbGx5IHJ1
bnMgYSB0YXNrIG9uIHRoZSBleHBlY3RlZAogIC8vIGNvdW50IG9mIHRocmVhZHMuCiAgY2xhc3Mg
VGhyZWFkU2FmZURvd25Db3VudGVyIHsKICAgcHVibGljOgogICAgLy8gQ29uc3RydWN0b3Igc2V0
cyB0aGUgY291bnQsIG9uY2UgYW5kIGZvciBhbGwuCiAgICBleHBsaWNpdCBUaHJlYWRTYWZlRG93
bkNvdW50ZXIoc2l6ZV90IGNvdW50KTsKCiAgICAvLyBEZWNyZW1lbnQgdGhlIGNvdW50LCBhbmQg
cmV0dXJuIHRydWUgaWYgd2UgaGl0IHplcm8uICBBbHNvIGRlbGV0ZSB0aGlzCiAgICAvLyBpbnN0
YW5jZSBhdXRvbWF0aWNhbGx5IHdoZW4gd2UgaGl0IHplcm8uCiAgICBib29sIExhc3RDYWxsZXIo
KTsKCiAgIHByaXZhdGU6CiAgICBzaXplX3QgcmVtYWluaW5nX2NvdW50XzsKICAgIExvY2sgbG9j
a187ICAvLyBwcm90ZWN0IGFjY2VzcyB0byByZW1haW5pbmdfY291bnRfLgogIH07CgogIC8vIEVh
Y2ggcmVnaXN0ZXJlZCB0aHJlYWQgaXMgY2FsbGVkIHRvIHNldCBzdGF0dXNfIHRvIFNIVVRET1dO
LgogIC8vIFRoaXMgaXMgZG9uZSByZWR1bmRhbnRseSBvbiBldmVyeSByZWdpc3RlcmVkIHRocmVh
ZCBiZWNhdXNlIGl0IGlzIG5vdAogIC8vIHByb3RlY3RlZCBieSBhIG11dGV4LiAgUnVubmluZyBv
biBhbGwgdGhyZWFkcyBndWFyYW50ZWVzIHdlIGdldCB0aGUKICAvLyBub3RpZmljYXRpb24gaW50
byB0aGUgbWVtb3J5IGNhY2hlIG9mIGFsbCBwb3NzaWJsZSB0aHJlYWRzLgogIHN0YXRpYyB2b2lk
IFNodXRkb3duRGlzYWJsaW5nRnVydGhlclRyYWNraW5nKCk7CgogIC8vIFdlIHVzZSB0aHJlYWQg
bG9jYWwgc3RvcmUgdG8gaWRlbnRpZnkgd2hpY2ggVGhyZWFkRGF0YSB0byBpbnRlcmFjdCB3aXRo
LgogIHN0YXRpYyBUTFNTbG90IHRsc19pbmRleF8gOwoKICAvLyBMaW5rIHRvIHRoZSBtb3N0IHJl
Y2VudGx5IGNyZWF0ZWQgaW5zdGFuY2UgKHN0YXJ0cyBhIG51bGwgdGVybWluYXRlZCBsaXN0KS4K
ICBzdGF0aWMgVGhyZWFkRGF0YSogZmlyc3RfOwogIC8vIFByb3RlY3Rpb24gZm9yIGFjY2VzcyB0
byBmaXJzdF8uCiAgc3RhdGljIExvY2sgbGlzdF9sb2NrXzsKCgogIC8vIFdlIHNldCBzdGF0dXNf
IHRvIFNIVVRET1dOIHdoZW4gd2Ugc2h1dCBkb3duIHRoZSB0cmFja2luZyBzZXJ2aWNlLiBUaGlz
CiAgLy8gc2V0dGluZyBpcyByZWR1bmRhbnRseSBlc3RhYmxpc2hlZCBieSBhbGwgcGFydGljaXBh
dGluZwogIC8vIHRocmVhZHMgc28gdGhhdCB3ZSBhcmUgKmd1YXJhbnRlZWQqICh3aXRob3V0IGxv
Y2tpbmcpIHRoYXQgYWxsIHRocmVhZHMKICAvLyBjYW4gInNlZSIgdGhlIHN0YXR1cyBhbmQgYXZv
aWQgYWRkaXRpb25hbCBjYWxscyBpbnRvIHRoZSAgc2VydmljZS4KICBzdGF0aWMgU3RhdHVzIHN0
YXR1c187CgogIC8vIExpbmsgdG8gbmV4dCBpbnN0YW5jZSAobnVsbCB0ZXJtaW5hdGVkIGxpc3Qp
LiBVc2VkIHRvIGdsb2JhbGx5IHRyYWNrIGFsbAogIC8vIHJlZ2lzdGVyZWQgaW5zdGFuY2VzIChj
b3JyZXNwb25kcyB0byBhbGwgcmVnaXN0ZXJlZCB0aHJlYWRzIHdoZXJlIHdlIGtlZXAKICAvLyBk
YXRhKS4KICBUaHJlYWREYXRhKiBuZXh0XzsKCiAgLy8gVGhlIG1lc3NhZ2UgbG9vcCB3aGVyZSB0
YXNrcyBuZWVkaW5nIHRvIGFjY2VzcyB0aGlzIGluc3RhbmNlJ3MgcHJpdmF0ZSBkYXRhCiAgLy8g
c2hvdWxkIGJlIGRpcmVjdGVkLiAgU2luY2Ugc29tZSB0aHJlYWRzIGhhdmUgbm8gbWVzc2FnZSBs
b29wLCBzb21lCiAgLy8gaW5zdGFuY2VzIGhhdmUgZGF0YSB0aGF0IGNhbid0IGJlIChzYWZlbHkp
IG1vZGlmaWVkIGV4dGVybmFsbHkuCiAgTWVzc2FnZUxvb3AqIG1lc3NhZ2VfbG9vcF87CgogIC8v
IEEgbWFwIHVzZWQgb24gZWFjaCB0aHJlYWQgdG8ga2VlcCB0cmFjayBvZiBCaXJ0aHMgb24gdGhp
cyB0aHJlYWQuCiAgLy8gVGhpcyBtYXAgc2hvdWxkIG9ubHkgYmUgYWNjZXNzZWQgb24gdGhlIHRo
cmVhZCBpdCB3YXMgY29uc3RydWN0ZWQgb24uCiAgLy8gV2hlbiBhIHNuYXBzaG90IGlzIG5lZWRl
ZCwgdGhpcyBzdHJ1Y3R1cmUgY2FuIGJlIGxvY2tlZCBpbiBwbGFjZSBmb3IgdGhlCiAgLy8gZHVy
YXRpb24gb2YgdGhlIHNuYXBzaG90dGluZyBhY3Rpdml0eS4KICBCaXJ0aE1hcCBiaXJ0aF9tYXBf
OwoKICAvLyBTaW1pbGFyIHRvIGJpcnRoX21hcF8sIHRoaXMgcmVjb3JkcyBpbmZvcm1hdGlvbnMg
YWJvdXQgZGVhdGggb2YgdHJhY2tlZAogIC8vIGluc3RhbmNlcyAoaS5lLiwgd2hlbiBhIHRyYWNr
ZWQgaW5zdGFuY2Ugd2FzIGRlc3Ryb3llZCBvbiB0aGlzIHRocmVhZCkuCiAgRGVhdGhNYXAgZGVh
dGhfbWFwXzsKCiAgLy8gTG9jayB0byBwcm90ZWN0ICpzb21lKiBhY2Nlc3MgdG8gQmlydGhNYXAg
YW5kIERlYXRoTWFwLiAgV2Ugb25seSB1c2UKICAvLyBsb2NraW5nIHByb3RlY3Rpb24gd2hlbiB3
ZSBhcmUgZ3Jvd2luZyB0aGUgbWFwcywgb3IgdXNpbmcgYW4gaXRlcmF0b3IuICBXZQogIC8vIG9u
bHkgZG8gd3JpdGVzIHRvIG1lbWJlcnMgZnJvbSB0aGlzIHRocmVhZCwgc28gdGhlIHVwZGF0ZXMg
b2YgdmFsdWVzIGFyZQogIC8vIGF0b21pYy4gIEZvbGtzIGNhbiByZWFkIGZyb20gb3RoZXIgdGhy
ZWFkcywgYW5kIGdldCAodmlhIHJhY2VzKSBuZXcgb3Igb2xkCiAgLy8gZGF0YSwgYnV0IHRoYXQg
aXMgY29uc2lkZXJlZCBhY2NlcHRhYmxlIGVycm9ycyAobWlzLWluZm9ybWF0aW9uKS4KICBMb2Nr
IGxvY2tfOwoKICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGhyZWFkRGF0YSk7Cn07CgovLyBz
dGF0aWMKVGhyZWFkRGF0YSogVGhyZWFkRGF0YTo6Zmlyc3RfID0gTlVMTDsKLy8gc3RhdGljCkxv
Y2sgVGhyZWFkRGF0YTo6bGlzdF9sb2NrXzsKCgovLyBzdGF0aWMKVGhyZWFkRGF0YTo6U3RhdHVz
IFRocmVhZERhdGE6OnN0YXR1c18gPSBUaHJlYWREYXRhOjpVTklOSVRJQUxJWkVEOwovLyBBIFRM
UyBzbG90IHRvIHRoZSBUcmFja1JlZ2lzdHJ5IGZvciB0aGUgY3VycmVudCB0aHJlYWQuCi8vIHN0
YXRpYwpUTFNTbG90IFRocmVhZERhdGE6OnRsc19pbmRleF8oYmFzZTo6TElOS0VSX0lOSVRJQUxJ
WkVEKTsKCgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gUHJvdmlkZSBzaW1wbGUgd2F5IHRv
IHRvIHN0YXJ0IGdsb2JhbCB0cmFja2luZywgYW5kIHRvIHRlYXIgZG93biB0cmFja2luZwovLyB3
aGVuIGRvbmUuICBOb3RlIHRoYXQgY29uc3RydWN0aW9uIGFuZCBkZXN0cnVjdGlvbiBvZiB0aGlz
IG9iamVjdCBtdXN0IGJlCi8vIGRvbmUgd2hlbiBydW5uaW5nIGluIHNpbmdsZSB0aHJlYWRlZCBt
b2RlIChiZWZvcmUgc3Bhd25pbmcgYSBsb3Qgb2YgdGhyZWFkcwovLyBmb3IgY29uc3RydWN0aW9u
LCBhbmQgYWZ0ZXIgc2h1dHRpbmcgZG93biBhbGwgdGhlIHRocmVhZHMgZm9yIGRlc3RydWN0aW9u
KS4KCmNsYXNzIEF1dG9UcmFja2luZyB7CiBwdWJsaWM6CiAgQXV0b1RyYWNraW5nKCkgeyBUaHJl
YWREYXRhOjpTdGFydFRyYWNraW5nKHRydWUpOyB9CgogIH5BdXRvVHJhY2tpbmcoKSB7CiNpZm5k
ZWYgTkRFQlVHICAvLyBEb24ndCBjYWxsIHRoZXNlIGluIGEgUmVsZWFzZSBidWlsZDogdGhleSBq
dXN0IHdhc3RlIHRpbWUuCiAgICAvLyBUaGUgZm9sbG93aW5nIHNob3VsZCBPTkxZIGJlIGNhbGxl
ZCB3aGVuIGluIHNpbmdsZSB0aHJlYWRlZCBtb2RlLiBJdCBpcwogICAgLy8gdW5zYWZlIHRvIGRv
IHRoaXMgY2xlYW51cCBpZiBvdGhlciB0aHJlYWRzIGFyZSBzdGlsbCBhY3RpdmUuCiAgICAvLyBJ
dCBpcyBhbHNvIHZlcnkgdW5uZWNlc3NhcnksIHNvIEknbSBvbmx5IGRvaW5nIHRoaXMgaW4gZGVi
dWcgdG8gc2F0aXNmeQogICAgLy8gcHVyaWZ5IChpZiB3ZSBuZWVkIHRvISkuCiAgICBUaHJlYWRE
YXRhOjpTaHV0ZG93blNpbmdsZVRocmVhZGVkQ2xlYW51cCgpOwojZW5kaWYKICB9CgogcHJpdmF0
ZToKICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQXV0b1RyYWNraW5nKTsKfTsKCgp9ICAvLyBu
YW1lc3BhY2UgdHJhY2tlZF9vYmplY3RzCgojZW5kaWYgIC8vIEJBU0VfVFJBQ0tFRF9PQkpFQ1RT
X0hfCgojaWZuZGVmIEJBU0VfQVRPTUlDT1BTX0hfCiNkZWZpbmUgQkFTRV9BVE9NSUNPUFNfSF8K
Cm5hbWVzcGFjZSBiYXNlIHsKbmFtZXNwYWNlIHN1YnRsZSB7CgovLyBCdWcgMTMwODk5MS4gIFdl
IG5lZWQgdGhpcyBmb3IgL1dwNjQsIHRvIG1hcmsgaXQgc2FmZSBmb3IgQXRvbWljV29yZCBjYXN0
aW5nLgp0eXBlZGVmIGludDMyIEF0b21pYzMyOwojaWZkZWYgQVJDSF9DUFVfNjRfQklUUwovLyBX
ZSBuZWVkIHRvIGJlIGFibGUgdG8gZ28gYmV0d2VlbiBBdG9taWM2NCBhbmQgQXRvbWljV29yZCBp
bXBsaWNpdGx5LiAgVGhpcwovLyBtZWFucyBBdG9taWM2NCBhbmQgQXRvbWljV29yZCBzaG91bGQg
YmUgdGhlIHNhbWUgdHlwZSBvbiA2NC1iaXQuCnR5cGVkZWYgaW50cHRyX3QgQXRvbWljNjQ7CiNl
bmRpZgoKLy8gVXNlIEF0b21pY1dvcmQgZm9yIGEgbWFjaGluZS1zaXplZCBwb2ludGVyLiAgSXQg
d2lsbCB1c2UgdGhlIEF0b21pYzMyIG9yCi8vIEF0b21pYzY0IHJvdXRpbmVzIGJlbG93LCBkZXBl
bmRpbmcgb24geW91ciBhcmNoaXRlY3R1cmUuCnR5cGVkZWYgaW50cHRyX3QgQXRvbWljV29yZDsK
Ci8vIEF0b21pY2FsbHkgZXhlY3V0ZToKLy8gICAgICByZXN1bHQgPSAqcHRyOwovLyAgICAgIGlm
ICgqcHRyID09IG9sZF92YWx1ZSkKLy8gICAgICAgICpwdHIgPSBuZXdfdmFsdWU7Ci8vICAgICAg
cmV0dXJuIHJlc3VsdDsKLy8KLy8gSS5lLiwgcmVwbGFjZSAiKnB0ciIgd2l0aCAibmV3X3ZhbHVl
IiBpZiAiKnB0ciIgdXNlZCB0byBiZSAib2xkX3ZhbHVlIi4KLy8gQWx3YXlzIHJldHVybiB0aGUg
b2xkIHZhbHVlIG9mICIqcHRyIgovLwovLyBUaGlzIHJvdXRpbmUgaW1wbGllcyBubyBtZW1vcnkg
YmFycmllcnMuCkF0b21pYzMyIE5vQmFycmllcl9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9t
aWMzMiogcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgb2xk
X3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgbmV3X3Zh
bHVlKTsKCi8vIEF0b21pY2FsbHkgc3RvcmUgbmV3X3ZhbHVlIGludG8gKnB0ciwgcmV0dXJuaW5n
IHRoZSBwcmV2aW91cyB2YWx1ZSBoZWxkIGluCi8vICpwdHIuICBUaGlzIHJvdXRpbmUgaW1wbGll
cyBubyBtZW1vcnkgYmFycmllcnMuCkF0b21pYzMyIE5vQmFycmllcl9BdG9taWNFeGNoYW5nZSh2
b2xhdGlsZSBBdG9taWMzMiogcHRyLCBBdG9taWMzMiBuZXdfdmFsdWUpOwoKLy8gQXRvbWljYWxs
eSBpbmNyZW1lbnQgKnB0ciBieSAiaW5jcmVtZW50Ii4gIFJldHVybnMgdGhlIG5ldyB2YWx1ZSBv
ZgovLyAqcHRyIHdpdGggdGhlIGluY3JlbWVudCBhcHBsaWVkLiAgVGhpcyByb3V0aW5lIGltcGxp
ZXMgbm8gbWVtb3J5IGJhcnJpZXJzLgpBdG9taWMzMiBOb0JhcnJpZXJfQXRvbWljSW5jcmVtZW50
KHZvbGF0aWxlIEF0b21pYzMyKiBwdHIsIEF0b21pYzMyIGluY3JlbWVudCk7CgpBdG9taWMzMiBC
YXJyaWVyX0F0b21pY0luY3JlbWVudCh2b2xhdGlsZSBBdG9taWMzMiogcHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBpbmNyZW1lbnQpOwoKLy8gVGhlc2UgZm9s
bG93aW5nIGxvd2VyLWxldmVsIG9wZXJhdGlvbnMgYXJlIHR5cGljYWxseSB1c2VmdWwgb25seSB0
byBwZW9wbGUKLy8gaW1wbGVtZW50aW5nIGhpZ2hlci1sZXZlbCBzeW5jaHJvbml6YXRpb24gb3Bl
cmF0aW9ucyBsaWtlIHNwaW5sb2NrcywKLy8gbXV0ZXhlcywgYW5kIGNvbmRpdGlvbi12YXJpYWJs
ZXMuICBUaGV5IGNvbWJpbmUgQ29tcGFyZUFuZFN3YXAoKSwgYSBsb2FkLCBvcgovLyBhIHN0b3Jl
IHdpdGggYXBwcm9wcmlhdGUgbWVtb3J5LW9yZGVyaW5nIGluc3RydWN0aW9ucy4gICJBY3F1aXJl
IiBvcGVyYXRpb25zCi8vIGVuc3VyZSB0aGF0IG5vIGxhdGVyIG1lbW9yeSBhY2Nlc3MgY2FuIGJl
IHJlb3JkZXJlZCBhaGVhZCBvZiB0aGUgb3BlcmF0aW9uLgovLyAiUmVsZWFzZSIgb3BlcmF0aW9u
cyBlbnN1cmUgdGhhdCBubyBwcmV2aW91cyBtZW1vcnkgYWNjZXNzIGNhbiBiZSByZW9yZGVyZWQK
Ly8gYWZ0ZXIgdGhlIG9wZXJhdGlvbi4gICJCYXJyaWVyIiBvcGVyYXRpb25zIGhhdmUgYm90aCAi
QWNxdWlyZSIgYW5kICJSZWxlYXNlIgovLyBzZW1hbnRpY3MuICAgQSBNZW1vcnlCYXJyaWVyKCkg
aGFzICJCYXJyaWVyIiBzZW1hbnRpY3MsIGJ1dCBkb2VzIG5vIG1lbW9yeQovLyBhY2Nlc3MuCkF0
b21pYzMyIEFjcXVpcmVfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBvbGRfdmFsdWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgbmV3X3ZhbHVlKTsKQXRvbWljMzIgUmVs
ZWFzZV9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWMzMiogcHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIG9sZF92YWx1ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBdG9taWMzMiBuZXdfdmFsdWUpOwoKdm9pZCBNZW1vcnlCYXJyaWVyKCk7
CnZvaWQgTm9CYXJyaWVyX1N0b3JlKHZvbGF0aWxlIEF0b21pYzMyKiBwdHIsIEF0b21pYzMyIHZh
bHVlKTsKdm9pZCBBY3F1aXJlX1N0b3JlKHZvbGF0aWxlIEF0b21pYzMyKiBwdHIsIEF0b21pYzMy
IHZhbHVlKTsKdm9pZCBSZWxlYXNlX1N0b3JlKHZvbGF0aWxlIEF0b21pYzMyKiBwdHIsIEF0b21p
YzMyIHZhbHVlKTsKCkF0b21pYzMyIE5vQmFycmllcl9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21p
YzMyKiBwdHIpOwpBdG9taWMzMiBBY3F1aXJlX0xvYWQodm9sYXRpbGUgY29uc3QgQXRvbWljMzIq
IHB0cik7CkF0b21pYzMyIFJlbGVhc2VfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWMzMiogcHRy
KTsKCi8vIDY0LWJpdCBhdG9taWMgb3BlcmF0aW9ucyAob25seSBhdmFpbGFibGUgb24gNjQtYml0
IHByb2Nlc3NvcnMpLgojaWZkZWYgQVJDSF9DUFVfNjRfQklUUwpBdG9taWM2NCBOb0JhcnJpZXJf
Q29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEF0b21pYzY0IG9sZF92YWx1ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEF0b21pYzY0IG5ld192YWx1ZSk7CkF0b21pYzY0IE5vQmFycmllcl9BdG9t
aWNFeGNoYW5nZSh2b2xhdGlsZSBBdG9taWM2NCogcHRyLCBBdG9taWM2NCBuZXdfdmFsdWUpOwpB
dG9taWM2NCBOb0JhcnJpZXJfQXRvbWljSW5jcmVtZW50KHZvbGF0aWxlIEF0b21pYzY0KiBwdHIs
IEF0b21pYzY0IGluY3JlbWVudCk7CkF0b21pYzY0IEJhcnJpZXJfQXRvbWljSW5jcmVtZW50KHZv
bGF0aWxlIEF0b21pYzY0KiBwdHIsIEF0b21pYzY0IGluY3JlbWVudCk7CgpBdG9taWM2NCBBY3F1
aXJlX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIEF0b21pYzY0KiBwdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXRvbWljNjQgb2xkX3ZhbHVlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEF0b21pYzY0IG5ld192YWx1ZSk7CkF0b21pYzY0IFJlbGVhc2VfQ29tcGFy
ZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBdG9taWM2NCBvbGRfdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXRvbWljNjQgbmV3X3ZhbHVlKTsKdm9pZCBOb0JhcnJpZXJfU3RvcmUodm9sYXRpbGUgQXRv
bWljNjQqIHB0ciwgQXRvbWljNjQgdmFsdWUpOwp2b2lkIEFjcXVpcmVfU3RvcmUodm9sYXRpbGUg
QXRvbWljNjQqIHB0ciwgQXRvbWljNjQgdmFsdWUpOwp2b2lkIFJlbGVhc2VfU3RvcmUodm9sYXRp
bGUgQXRvbWljNjQqIHB0ciwgQXRvbWljNjQgdmFsdWUpOwpBdG9taWM2NCBOb0JhcnJpZXJfTG9h
ZCh2b2xhdGlsZSBjb25zdCBBdG9taWM2NCogcHRyKTsKQXRvbWljNjQgQWNxdWlyZV9Mb2FkKHZv
bGF0aWxlIGNvbnN0IEF0b21pYzY0KiBwdHIpOwpBdG9taWM2NCBSZWxlYXNlX0xvYWQodm9sYXRp
bGUgY29uc3QgQXRvbWljNjQqIHB0cik7CiNlbmRpZiAgLy8gQVJDSF9DUFVfNjRfQklUUwoKfSAg
Ly8gbmFtZXNwYWNlIGJhc2U6OnN1YnRsZQp9ICAvLyBuYW1lc3BhY2UgYmFzZQoKLy8gSW5jbHVk
ZSBvdXIgcGxhdGZvcm0gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uCgojaWZuZGVmIEJBU0VfQVRP
TUlDT1BTX0lOVEVSTkFMU19YODZfTUFDT1NYX0hfCiNkZWZpbmUgQkFTRV9BVE9NSUNPUFNfSU5U
RVJOQUxTX1g4Nl9NQUNPU1hfSF8KCgpuYW1lc3BhY2UgYmFzZSB7Cm5hbWVzcGFjZSBzdWJ0bGUg
ewoKaW5saW5lIEF0b21pYzMyIE5vQmFycmllcl9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9t
aWMzMiAqcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21p
YzMyIG9sZF92YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
dG9taWMzMiBuZXdfdmFsdWUpIHsKICBBdG9taWMzMiBwcmV2X3ZhbHVlOwogIGRvIHsKICAgIGlm
IChPU0F0b21pY0NvbXBhcmVBbmRTd2FwMzIob2xkX3ZhbHVlLCBuZXdfdmFsdWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8QXRvbWljMzIqPihwdHIpKSkgewog
ICAgICByZXR1cm4gb2xkX3ZhbHVlOwogICAgfQogICAgcHJldl92YWx1ZSA9ICpwdHI7CiAgfSB3
aGlsZSAocHJldl92YWx1ZSA9PSBvbGRfdmFsdWUpOwogIHJldHVybiBwcmV2X3ZhbHVlOwp9Cgpp
bmxpbmUgQXRvbWljMzIgTm9CYXJyaWVyX0F0b21pY0V4Y2hhbmdlKHZvbGF0aWxlIEF0b21pYzMy
ICpwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIg
bmV3X3ZhbHVlKSB7CiAgQXRvbWljMzIgb2xkX3ZhbHVlOwogIGRvIHsKICAgIG9sZF92YWx1ZSA9
ICpwdHI7CiAgfSB3aGlsZSAoIU9TQXRvbWljQ29tcGFyZUFuZFN3YXAzMihvbGRfdmFsdWUsIG5l
d192YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8
QXRvbWljMzIqPihwdHIpKSk7CiAgcmV0dXJuIG9sZF92YWx1ZTsKfQoKaW5saW5lIEF0b21pYzMy
IE5vQmFycmllcl9BdG9taWNJbmNyZW1lbnQodm9sYXRpbGUgQXRvbWljMzIgKnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgaW5jcmVtZW50KSB7
CiAgcmV0dXJuIE9TQXRvbWljQWRkMzIoaW5jcmVtZW50LCBjb25zdF9jYXN0PEF0b21pYzMyKj4o
cHRyKSk7Cn0KCmlubGluZSBBdG9taWMzMiBCYXJyaWVyX0F0b21pY0luY3JlbWVudCh2b2xhdGls
ZSBBdG9taWMzMiAqcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBdG9taWMzMiBpbmNyZW1lbnQpIHsKICByZXR1cm4gT1NBdG9taWNBZGQzMkJhcnJpZXIoaW5j
cmVtZW50LCBjb25zdF9jYXN0PEF0b21pYzMyKj4ocHRyKSk7Cn0KCmlubGluZSB2b2lkIE1lbW9y
eUJhcnJpZXIoKSB7CiAgT1NNZW1vcnlCYXJyaWVyKCk7Cn0KCmlubGluZSBBdG9taWMzMiBBY3F1
aXJlX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIEF0b21pYzMyICpwdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIG9sZF92YWx1ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgbmV3X3ZhbHVlKSB7CiAgQXRvbWlj
MzIgcHJldl92YWx1ZTsKICBkbyB7CiAgICBpZiAoT1NBdG9taWNDb21wYXJlQW5kU3dhcDMyQmFy
cmllcihvbGRfdmFsdWUsIG5ld192YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0X2Nhc3Q8QXRvbWljMzIqPihwdHIpKSkgewogICAgICByZXR1cm4gb2xk
X3ZhbHVlOwogICAgfQogICAgcHJldl92YWx1ZSA9ICpwdHI7CiAgfSB3aGlsZSAocHJldl92YWx1
ZSA9PSBvbGRfdmFsdWUpOwogIHJldHVybiBwcmV2X3ZhbHVlOwp9CgppbmxpbmUgQXRvbWljMzIg
UmVsZWFzZV9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWMzMiAqcHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBvbGRfdmFsdWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIG5ld192YWx1ZSkgewogIHJl
dHVybiBBY3F1aXJlX0NvbXBhcmVBbmRTd2FwKHB0ciwgb2xkX3ZhbHVlLCBuZXdfdmFsdWUpOwp9
CgppbmxpbmUgdm9pZCBOb0JhcnJpZXJfU3RvcmUodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwgQXRv
bWljMzIgdmFsdWUpIHsKICAqcHRyID0gdmFsdWU7Cn0KCmlubGluZSB2b2lkIEFjcXVpcmVfU3Rv
cmUodm9sYXRpbGUgQXRvbWljMzIgKnB0ciwgQXRvbWljMzIgdmFsdWUpIHsKICAqcHRyID0gdmFs
dWU7CiAgTWVtb3J5QmFycmllcigpOwp9CgppbmxpbmUgdm9pZCBSZWxlYXNlX1N0b3JlKHZvbGF0
aWxlIEF0b21pYzMyICpwdHIsIEF0b21pYzMyIHZhbHVlKSB7CiAgTWVtb3J5QmFycmllcigpOwog
ICpwdHIgPSB2YWx1ZTsKfQoKaW5saW5lIEF0b21pYzMyIE5vQmFycmllcl9Mb2FkKHZvbGF0aWxl
IGNvbnN0IEF0b21pYzMyKiBwdHIpIHsKICByZXR1cm4gKnB0cjsKfQoKaW5saW5lIEF0b21pYzMy
IEFjcXVpcmVfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWMzMiAqcHRyKSB7CiAgQXRvbWljMzIg
dmFsdWUgPSAqcHRyOwogIE1lbW9yeUJhcnJpZXIoKTsKICByZXR1cm4gdmFsdWU7Cn0KCmlubGlu
ZSBBdG9taWMzMiBSZWxlYXNlX0xvYWQodm9sYXRpbGUgY29uc3QgQXRvbWljMzIgKnB0cikgewog
IE1lbW9yeUJhcnJpZXIoKTsKICByZXR1cm4gKnB0cjsKfQoKI2lmZGVmIF9fTFA2NF9fCgovLyA2
NC1iaXQgaW1wbGVtZW50YXRpb24gb24gNjQtYml0IHBsYXRmb3JtCgppbmxpbmUgQXRvbWljNjQg
Tm9CYXJyaWVyX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIEF0b21pYzY0ICpwdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljNjQgb2xkX3ZhbHVlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG5ld192YWx1ZSkg
ewogIEF0b21pYzY0IHByZXZfdmFsdWU7CiAgZG8gewogICAgaWYgKE9TQXRvbWljQ29tcGFyZUFu
ZFN3YXA2NChvbGRfdmFsdWUsIG5ld192YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3RfY2FzdDxBdG9taWM2NCo+KHB0cikpKSB7CiAgICAgIHJldHVybiBvbGRfdmFs
dWU7CiAgICB9CiAgICBwcmV2X3ZhbHVlID0gKnB0cjsKICB9IHdoaWxlIChwcmV2X3ZhbHVlID09
IG9sZF92YWx1ZSk7CiAgcmV0dXJuIHByZXZfdmFsdWU7Cn0KCmlubGluZSBBdG9taWM2NCBOb0Jh
cnJpZXJfQXRvbWljRXhjaGFuZ2Uodm9sYXRpbGUgQXRvbWljNjQgKnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWM2NCBuZXdfdmFsdWUpIHsKICBBdG9t
aWM2NCBvbGRfdmFsdWU7CiAgZG8gewogICAgb2xkX3ZhbHVlID0gKnB0cjsKICB9IHdoaWxlICgh
T1NBdG9taWNDb21wYXJlQW5kU3dhcDY0KG9sZF92YWx1ZSwgbmV3X3ZhbHVlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDxBdG9taWM2NCo+KHB0cikpKTsK
ICByZXR1cm4gb2xkX3ZhbHVlOwp9CgppbmxpbmUgQXRvbWljNjQgTm9CYXJyaWVyX0F0b21pY0lu
Y3JlbWVudCh2b2xhdGlsZSBBdG9taWM2NCAqcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBdG9taWM2NCBpbmNyZW1lbnQpIHsKICByZXR1cm4gT1NBdG9taWNB
ZGQ2NChpbmNyZW1lbnQsIGNvbnN0X2Nhc3Q8QXRvbWljNjQqPihwdHIpKTsKfQoKaW5saW5lIEF0
b21pYzY0IEJhcnJpZXJfQXRvbWljSW5jcmVtZW50KHZvbGF0aWxlIEF0b21pYzY0ICpwdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWM2NCBpbmNyZW1lbnQp
IHsKICByZXR1cm4gT1NBdG9taWNBZGQ2NEJhcnJpZXIoaW5jcmVtZW50LCBjb25zdF9jYXN0PEF0
b21pYzY0Kj4ocHRyKSk7Cn0KCmlubGluZSBBdG9taWM2NCBBY3F1aXJlX0NvbXBhcmVBbmRTd2Fw
KHZvbGF0aWxlIEF0b21pYzY0ICpwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEF0b21pYzY0IG9sZF92YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXRvbWljNjQgbmV3X3ZhbHVlKSB7CiAgQXRvbWljNjQgcHJldl92YWx1ZTsKICBk
byB7CiAgICBpZiAoT1NBdG9taWNDb21wYXJlQW5kU3dhcDY0QmFycmllcihvbGRfdmFsdWUsIG5l
d192YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nh
c3Q8QXRvbWljNjQqPihwdHIpKSkgewogICAgICByZXR1cm4gb2xkX3ZhbHVlOwogICAgfQogICAg
cHJldl92YWx1ZSA9ICpwdHI7CiAgfSB3aGlsZSAocHJldl92YWx1ZSA9PSBvbGRfdmFsdWUpOwog
IHJldHVybiBwcmV2X3ZhbHVlOwp9CgppbmxpbmUgQXRvbWljNjQgUmVsZWFzZV9Db21wYXJlQW5k
U3dhcCh2b2xhdGlsZSBBdG9taWM2NCAqcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBdG9taWM2NCBvbGRfdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEF0b21pYzY0IG5ld192YWx1ZSkgewogIC8vIFRoZSBsaWIga2VybiBpbnRl
cmZhY2UgZG9lcyBub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbgogIC8vIEFjcXVpcmUgYW5kIFJlbGVh
c2UgbWVtb3J5IGJhcnJpZXJzOyB0aGV5IGFyZSBlcXVpdmFsZW50LgogIHJldHVybiBBY3F1aXJl
X0NvbXBhcmVBbmRTd2FwKHB0ciwgb2xkX3ZhbHVlLCBuZXdfdmFsdWUpOwp9CgppbmxpbmUgdm9p
ZCBOb0JhcnJpZXJfU3RvcmUodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwgQXRvbWljNjQgdmFsdWUp
IHsKICAqcHRyID0gdmFsdWU7Cn0KCmlubGluZSB2b2lkIEFjcXVpcmVfU3RvcmUodm9sYXRpbGUg
QXRvbWljNjQgKnB0ciwgQXRvbWljNjQgdmFsdWUpIHsKICAqcHRyID0gdmFsdWU7CiAgTWVtb3J5
QmFycmllcigpOwp9CgppbmxpbmUgdm9pZCBSZWxlYXNlX1N0b3JlKHZvbGF0aWxlIEF0b21pYzY0
ICpwdHIsIEF0b21pYzY0IHZhbHVlKSB7CiAgTWVtb3J5QmFycmllcigpOwogICpwdHIgPSB2YWx1
ZTsKfQoKaW5saW5lIEF0b21pYzY0IE5vQmFycmllcl9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21p
YzY0KiBwdHIpIHsKICByZXR1cm4gKnB0cjsKfQoKaW5saW5lIEF0b21pYzY0IEFjcXVpcmVfTG9h
ZCh2b2xhdGlsZSBjb25zdCBBdG9taWM2NCAqcHRyKSB7CiAgQXRvbWljNjQgdmFsdWUgPSAqcHRy
OwogIE1lbW9yeUJhcnJpZXIoKTsKICByZXR1cm4gdmFsdWU7Cn0KCmlubGluZSBBdG9taWM2NCBS
ZWxlYXNlX0xvYWQodm9sYXRpbGUgY29uc3QgQXRvbWljNjQgKnB0cikgewogIE1lbW9yeUJhcnJp
ZXIoKTsKICByZXR1cm4gKnB0cjsKfQoKI2VuZGlmICAvLyBkZWZpbmVkKF9fTFA2NF9fKQoKLy8g
TWFjT1MgdXNlcyBsb25nIGZvciBpbnRwdHJfdCwgQXRvbWljV29yZCBhbmQgQXRvbWljMzIgYXJl
IGFsd2F5cyBkaWZmZXJlbnQKLy8gb24gdGhlIE1hYywgZXZlbiB3aGVuIHRoZXkgYXJlIHRoZSBz
YW1lIHNpemUuICBXZSBuZWVkIHRvIGV4cGxpY2l0bHkgY2FzdAovLyBmcm9tIEF0b21pY1dvcmQg
dG8gQXRvbWljMzIvNjQgdG8gaW1wbGVtZW50IHRoZSBBdG9taWNXb3JkIGludGVyZmFjZS4KI2lm
ZGVmIF9fTFA2NF9fCiNkZWZpbmUgQXRvbWljV29yZENhc3RUeXBlIEF0b21pYzY0CiNlbHNlCiNk
ZWZpbmUgQXRvbWljV29yZENhc3RUeXBlIEF0b21pYzMyCiNlbmRpZgoKaW5saW5lIEF0b21pY1dv
cmQgTm9CYXJyaWVyX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIEF0b21pY1dvcmQqIHB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pY1dvcmQgb2xkX3Zh
bHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljV29y
ZCBuZXdfdmFsdWUpIHsKICByZXR1cm4gTm9CYXJyaWVyX0NvbXBhcmVBbmRTd2FwKAogICAgICBy
ZWludGVycHJldF9jYXN0PHZvbGF0aWxlIEF0b21pY1dvcmRDYXN0VHlwZSo+KHB0ciksCiAgICAg
IG9sZF92YWx1ZSwgbmV3X3ZhbHVlKTsKfQoKaW5saW5lIEF0b21pY1dvcmQgTm9CYXJyaWVyX0F0
b21pY0V4Y2hhbmdlKHZvbGF0aWxlIEF0b21pY1dvcmQqIHB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pY1dvcmQgbmV3X3ZhbHVlKSB7CiAgcmV0dXJu
IE5vQmFycmllcl9BdG9taWNFeGNoYW5nZSgKICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2xhdGls
ZSBBdG9taWNXb3JkQ2FzdFR5cGUqPihwdHIpLCBuZXdfdmFsdWUpOwp9CgppbmxpbmUgQXRvbWlj
V29yZCBOb0JhcnJpZXJfQXRvbWljSW5jcmVtZW50KHZvbGF0aWxlIEF0b21pY1dvcmQqIHB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWNXb3JkIGlu
Y3JlbWVudCkgewogIHJldHVybiBOb0JhcnJpZXJfQXRvbWljSW5jcmVtZW50KAogICAgICByZWlu
dGVycHJldF9jYXN0PHZvbGF0aWxlIEF0b21pY1dvcmRDYXN0VHlwZSo+KHB0ciksIGluY3JlbWVu
dCk7Cn0KCmlubGluZSBBdG9taWNXb3JkIEJhcnJpZXJfQXRvbWljSW5jcmVtZW50KHZvbGF0aWxl
IEF0b21pY1dvcmQqIHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXRvbWljV29yZCBpbmNyZW1lbnQpIHsKICByZXR1cm4gQmFycmllcl9BdG9taWNJbmNyZW1l
bnQoCiAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9sYXRpbGUgQXRvbWljV29yZENhc3RUeXBlKj4o
cHRyKSwgaW5jcmVtZW50KTsKfQoKaW5saW5lIEF0b21pY1dvcmQgQWNxdWlyZV9Db21wYXJlQW5k
U3dhcCh2b2xhdGlsZSBBdG9taWNXb3JkKiBwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXRvbWljV29yZCBvbGRfdmFsdWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXRvbWljV29yZCBuZXdfdmFsdWUpIHsKICByZXR1cm4gYmFz
ZTo6c3VidGxlOjpBY3F1aXJlX0NvbXBhcmVBbmRTd2FwKAogICAgICByZWludGVycHJldF9jYXN0
PHZvbGF0aWxlIEF0b21pY1dvcmRDYXN0VHlwZSo+KHB0ciksCiAgICAgIG9sZF92YWx1ZSwgbmV3
X3ZhbHVlKTsKfQoKaW5saW5lIEF0b21pY1dvcmQgUmVsZWFzZV9Db21wYXJlQW5kU3dhcCh2b2xh
dGlsZSBBdG9taWNXb3JkKiBwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXRvbWljV29yZCBvbGRfdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXRvbWljV29yZCBuZXdfdmFsdWUpIHsKICByZXR1cm4gYmFzZTo6c3VidGxl
OjpSZWxlYXNlX0NvbXBhcmVBbmRTd2FwKAogICAgICByZWludGVycHJldF9jYXN0PHZvbGF0aWxl
IEF0b21pY1dvcmRDYXN0VHlwZSo+KHB0ciksCiAgICAgIG9sZF92YWx1ZSwgbmV3X3ZhbHVlKTsK
fQoKaW5saW5lIHZvaWQgTm9CYXJyaWVyX1N0b3JlKHZvbGF0aWxlIEF0b21pY1dvcmQgKnB0ciwg
QXRvbWljV29yZCB2YWx1ZSkgewogIE5vQmFycmllcl9TdG9yZSgKICAgICAgcmVpbnRlcnByZXRf
Y2FzdDx2b2xhdGlsZSBBdG9taWNXb3JkQ2FzdFR5cGUqPihwdHIpLCB2YWx1ZSk7Cn0KCmlubGlu
ZSB2b2lkIEFjcXVpcmVfU3RvcmUodm9sYXRpbGUgQXRvbWljV29yZCogcHRyLCBBdG9taWNXb3Jk
IHZhbHVlKSB7CiAgcmV0dXJuIGJhc2U6OnN1YnRsZTo6QWNxdWlyZV9TdG9yZSgKICAgICAgcmVp
bnRlcnByZXRfY2FzdDx2b2xhdGlsZSBBdG9taWNXb3JkQ2FzdFR5cGUqPihwdHIpLCB2YWx1ZSk7
Cn0KCmlubGluZSB2b2lkIFJlbGVhc2VfU3RvcmUodm9sYXRpbGUgQXRvbWljV29yZCogcHRyLCBB
dG9taWNXb3JkIHZhbHVlKSB7CiAgcmV0dXJuIGJhc2U6OnN1YnRsZTo6UmVsZWFzZV9TdG9yZSgK
ICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2xhdGlsZSBBdG9taWNXb3JkQ2FzdFR5cGUqPihwdHIp
LCB2YWx1ZSk7Cn0KCmlubGluZSBBdG9taWNXb3JkIE5vQmFycmllcl9Mb2FkKHZvbGF0aWxlIGNv
bnN0IEF0b21pY1dvcmQgKnB0cikgewogIHJldHVybiBOb0JhcnJpZXJfTG9hZCgKICAgICAgcmVp
bnRlcnByZXRfY2FzdDx2b2xhdGlsZSBjb25zdCBBdG9taWNXb3JkQ2FzdFR5cGUqPihwdHIpKTsK
fQoKaW5saW5lIEF0b21pY1dvcmQgQWNxdWlyZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pY1dv
cmQqIHB0cikgewogIHJldHVybiBiYXNlOjpzdWJ0bGU6OkFjcXVpcmVfTG9hZCgKICAgICAgcmVp
bnRlcnByZXRfY2FzdDx2b2xhdGlsZSBjb25zdCBBdG9taWNXb3JkQ2FzdFR5cGUqPihwdHIpKTsK
fQoKaW5saW5lIEF0b21pY1dvcmQgUmVsZWFzZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pY1dv
cmQqIHB0cikgewogIHJldHVybiBiYXNlOjpzdWJ0bGU6OlJlbGVhc2VfTG9hZCgKICAgICAgcmVp
bnRlcnByZXRfY2FzdDx2b2xhdGlsZSBjb25zdCBBdG9taWNXb3JkQ2FzdFR5cGUqPihwdHIpKTsK
fQoKI3VuZGVmIEF0b21pY1dvcmRDYXN0VHlwZQoKfSAgIC8vIG5hbWVzcGFjZSBiYXNlOjpzdWJ0
bGUKfSAgIC8vIG5hbWVzcGFjZSBiYXNlCgojZW5kaWYgIC8vIEJBU0VfQVRPTUlDT1BTX0lOVEVS
TkFMU19YODZfTUFDT1NYX0hfCgojZW5kaWYgIC8vIEJBU0VfQVRPTUlDT1BTX0hfCgojaWZuZGVm
IEJBU0VfQVRPTUlDX1JFRl9DT1VOVF9IXwojZGVmaW5lIEJBU0VfQVRPTUlDX1JFRl9DT1VOVF9I
XwoKbmFtZXNwYWNlIGJhc2UgewoKdHlwZWRlZiBzdWJ0bGU6OkF0b21pYzMyIEF0b21pY1JlZkNv
dW50OwoKLy8gSW5jcmVtZW50IGEgcmVmZXJlbmNlIGNvdW50IGJ5ICJpbmNyZW1lbnQiLCB3aGlj
aCBtdXN0IGV4Y2VlZCAwLgppbmxpbmUgdm9pZCBBdG9taWNSZWZDb3VudEluY04odm9sYXRpbGUg
QXRvbWljUmVmQ291bnQgKnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21p
Y1JlZkNvdW50IGluY3JlbWVudCkgewogIHN1YnRsZTo6Tm9CYXJyaWVyX0F0b21pY0luY3JlbWVu
dChwdHIsIGluY3JlbWVudCk7Cn0KCi8vIERlY3JlbWVudCBhIHJlZmVyZW5jZSBjb3VudCBieSAi
ZGVjcmVtZW50Iiwgd2hpY2ggbXVzdCBleGNlZWQgMCwKLy8gYW5kIHJldHVybiB3aGV0aGVyIHRo
ZSByZXN1bHQgaXMgbm9uLXplcm8uCi8vIEluc2VydCBiYXJyaWVycyB0byBlbnN1cmUgdGhhdCBz
dGF0ZSB3cml0dGVuIGJlZm9yZSB0aGUgcmVmZXJlbmNlIGNvdW50Ci8vIGJlY2FtZSB6ZXJvIHdp
bGwgYmUgdmlzaWJsZSB0byBhIHRocmVhZCB0aGF0IGhhcyBqdXN0IG1hZGUgdGhlIGNvdW50IHpl
cm8uCmlubGluZSBib29sIEF0b21pY1JlZkNvdW50RGVjTih2b2xhdGlsZSBBdG9taWNSZWZDb3Vu
dCAqcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljUmVmQ291bnQgZGVj
cmVtZW50KSB7CiAgLy9BTk5PVEFURV9IQVBQRU5TX0JFRk9SRShwdHIpOwogIGJvb2wgcmVzID0g
KHN1YnRsZTo6QmFycmllcl9BdG9taWNJbmNyZW1lbnQocHRyLCAtZGVjcmVtZW50KSAhPSAwKTsK
ICBpZiAoIXJlcykgewogICAgLy9BTk5PVEFURV9IQVBQRU5TX0FGVEVSKHB0cik7CiAgfQogIHJl
dHVybiByZXM7Cn0KCi8vIEluY3JlbWVudCBhIHJlZmVyZW5jZSBjb3VudCBieSAxLgppbmxpbmUg
dm9pZCBBdG9taWNSZWZDb3VudEluYyh2b2xhdGlsZSBBdG9taWNSZWZDb3VudCAqcHRyKSB7CiAg
YmFzZTo6QXRvbWljUmVmQ291bnRJbmNOKHB0ciwgMSk7Cn0KCi8vIERlY3JlbWVudCBhIHJlZmVy
ZW5jZSBjb3VudCBieSAxIGFuZCByZXR1cm4gd2hldGhlciB0aGUgcmVzdWx0IGlzIG5vbi16ZXJv
LgovLyBJbnNlcnQgYmFycmllcnMgdG8gZW5zdXJlIHRoYXQgc3RhdGUgd3JpdHRlbiBiZWZvcmUg
dGhlIHJlZmVyZW5jZSBjb3VudAovLyBiZWNhbWUgemVybyB3aWxsIGJlIHZpc2libGUgdG8gYSB0
aHJlYWQgdGhhdCBoYXMganVzdCBtYWRlIHRoZSBjb3VudCB6ZXJvLgppbmxpbmUgYm9vbCBBdG9t
aWNSZWZDb3VudERlYyh2b2xhdGlsZSBBdG9taWNSZWZDb3VudCAqcHRyKSB7CiAgcmV0dXJuIGJh
c2U6OkF0b21pY1JlZkNvdW50RGVjTihwdHIsIDEpOwp9CgovLyBSZXR1cm4gd2hldGhlciB0aGUg
cmVmZXJlbmNlIGNvdW50IGlzIG9uZS4gIElmIHRoZSByZWZlcmVuY2UgY291bnQgaXMgdXNlZAov
LyBpbiB0aGUgY29udmVudGlvbmFsIHdheSwgYSByZWZyZXJlbmNlIGNvdW50IG9mIDEgaW1wbGll
cyB0aGF0IHRoZSBjdXJyZW50Ci8vIHRocmVhZCBvd25zIHRoZSByZWZlcmVuY2UgYW5kIG5vIG90
aGVyIHRocmVhZCBzaGFyZXMgaXQuICBUaGlzIGNhbGwgcGVyZm9ybXMKLy8gdGhlIHRlc3QgZm9y
IGEgcmVmZXJlbmNlIGNvdW50IG9mIG9uZSwgYW5kIHBlcmZvcm1zIHRoZSBtZW1vcnkgYmFycmll
cgovLyBuZWVkZWQgZm9yIHRoZSBvd25pbmcgdGhyZWFkIHRvIGFjdCBvbiB0aGUgb2JqZWN0LCBr
bm93aW5nIHRoYXQgaXQgaGFzCi8vIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIG9iamVjdC4KaW5s
aW5lIGJvb2wgQXRvbWljUmVmQ291bnRJc09uZSh2b2xhdGlsZSBBdG9taWNSZWZDb3VudCAqcHRy
KSB7CiAgYm9vbCByZXMgPSAoc3VidGxlOjpBY3F1aXJlX0xvYWQocHRyKSA9PSAxKTsKICBpZiAo
cmVzKSB7CiAgICAvL0FOTk9UQVRFX0hBUFBFTlNfQUZURVIocHRyKTsKICB9CiAgcmV0dXJuIHJl
czsKfQoKLy8gUmV0dXJuIHdoZXRoZXIgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyB6ZXJvLiAgV2l0
aCBjb252ZW50aW9uYWwgb2JqZWN0Ci8vIHJlZmVyZW5jaW5nIGNvdW50aW5nLCB0aGUgb2JqZWN0
IHdpbGwgYmUgZGVzdHJveWVkLCBzbyB0aGUgcmVmZXJlbmNlIGNvdW50Ci8vIHNob3VsZCBuZXZl
ciBiZSB6ZXJvLiAgSGVuY2UgdGhpcyBpcyBnZW5lcmFsbHkgdXNlZCBmb3IgYSBkZWJ1ZyBjaGVj
ay4KaW5saW5lIGJvb2wgQXRvbWljUmVmQ291bnRJc1plcm8odm9sYXRpbGUgQXRvbWljUmVmQ291
bnQgKnB0cikgewogIGJvb2wgcmVzID0gKHN1YnRsZTo6QWNxdWlyZV9Mb2FkKHB0cikgPT0gMCk7
CiAgaWYgKHJlcykgewogICAgLy9BTk5PVEFURV9IQVBQRU5TX0FGVEVSKHB0cik7CiAgfQogIHJl
dHVybiByZXM7Cn0KCn0gIC8vIG5hbWVzcGFjZSBiYXNlCgojZW5kaWYgIC8vIEJBU0VfQVRPTUlD
X1JFRl9DT1VOVF9IXwoKI2lmbmRlZiBCQVNFX1RIUkVBRF9DT0xMSVNJT05fV0FSTkVSX0hfCiNk
ZWZpbmUgQkFTRV9USFJFQURfQ09MTElTSU9OX1dBUk5FUl9IXwoKCi8vIEEgaGVscGVyIGNsYXNz
IGFsb25nc2lkZSBtYWNyb3MgdG8gYmUgdXNlZCB0byB2ZXJpZnkgYXNzdW1wdGlvbnMgYWJvdXQg
dGhyZWFkCi8vIHNhZmV0eSBvZiBhIGNsYXNzLgovLwovLyBFeGFtcGxlOiBRdWV1ZSBpbXBsZW1l
bnRhdGlvbiBub24gdGhyZWFkLXNhZmUgYnV0IHN0aWxsIHVzYWJsZSBpZiBjbGllbnRzCi8vICAg
ICAgICAgIGFyZSBzeW5jaHJvbml6ZWQgc29tZWhvdy4KLy8KLy8gICAgICAgICAgSW4gdGhpcyBj
YXNlIHRoZSBtYWNybyBERkFLRV9TQ09QRURfTE9DSyBoYXMgdG8gYmUKLy8gICAgICAgICAgdXNl
ZCwgaXQgY2hlY2tzIHRoYXQgaWYgYSB0aHJlYWQgaXMgaW5zaWRlIHRoZSBwdXNoL3BvcCB0aGVu
Ci8vICAgICAgICAgIG5vb25lIGVsc2UgaXMgc3RpbGwgaW5zaWRlIHRoZSBwb3AvcHVzaAovLwov
LyBjbGFzcyBOb25UaHJlYWRTYWZlUXVldWUgewovLyAgcHVibGljOgovLyAgIC4uLgovLyAgIHZv
aWQgcHVzaChpbnQpIHsgREZBS0VfU0NPUEVEX0xPQ0socHVzaF9wb3BfKTsgLi4uIH0KLy8gICBp
bnQgcG9wKCkgeyBERkFLRV9TQ09QRURfTE9DSyhwdXNoX3BvcF8pOyAuLi4gfQovLyAgIC4uLgov
LyAgcHJpdmF0ZToKLy8gICBERkFLRV9NVVRFWChwdXNoX3BvcF8pOwovLyB9OwovLwovLwovLyBF
eGFtcGxlOiBRdWV1ZSBpbXBsZW1lbnRhdGlvbiBub24gdGhyZWFkLXNhZmUgYnV0IHN0aWxsIHVz
YWJsZSBpZiBjbGllbnRzCi8vICAgICAgICAgIGFyZSBzeW5jaHJvbml6ZWQgc29tZWhvdywgaXQg
Y2FsbHMgYSBtZXRob2QgdG8gInByb3RlY3QiIGZyb20KLy8gICAgICAgICAgYSAicHJvdGVjdGVk
IiBtZXRob2QKLy8KLy8gICAgICAgICAgSW4gdGhpcyBjYXNlIHRoZSBtYWNybyBERkFLRV9TQ09Q
RURfUkVDVVJTSVZFX0xPQ0sKLy8gICAgICAgICAgaGFzIHRvIGJlIHVzZWQsIGl0IGNoZWNrcyB0
aGF0IGlmIGEgdGhyZWFkIGlzIGluc2lkZSB0aGUgcHVzaC9wb3AKLy8gICAgICAgICAgdGhlbiBu
b29uZSBlbHNlIGlzIHN0aWxsIGluc2lkZSB0aGUgcG9wL3B1c2gKLy8KLy8gY2xhc3MgTm9uVGhy
ZWFkU2FmZVF1ZXVlIHsKLy8gIHB1YmxpYzoKLy8gICB2b2lkIHB1c2goaW50KSB7Ci8vICAgICBE
RkFLRV9TQ09QRURfTE9DSyhwdXNoX3BvcF8pOwovLyAgICAgLi4uCi8vICAgfQovLyAgIGludCBw
b3AoKSB7Ci8vICAgICBERkFLRV9TQ09QRURfUkVDVVJTSVZFX0xPQ0socHVzaF9wb3BfKTsKLy8g
ICAgIGJhcigpOwovLyAgICAgLi4uCi8vICAgfQovLyAgIHZvaWQgYmFyKCkgeyBERkFLRV9TQ09Q
RURfUkVDVVJTSVZFX0xPQ0socHVzaF9wb3BfKTsgLi4uIH0KLy8gICAuLi4KLy8gIHByaXZhdGU6
Ci8vICAgREZBS0VfTVVURVgocHVzaF9wb3BfKTsKLy8gfTsKLy8KLy8KLy8gRXhhbXBsZTogUXVl
dWUgaW1wbGVtZW50YXRpb24gbm90IHVzYWJsZSBldmVuIGlmIGNsaWVudHMgYXJlIHN5bmNocm9u
aXplZCwKLy8gICAgICAgICAgc28gb25seSBvbmUgdGhyZWFkIGluIHRoZSBjbGFzcyBsaWZlIGN5
Y2xlIGNhbiB1c2UgdGhlIHR3byBtZW1iZXJzCi8vICAgICAgICAgIHB1c2gvcG9wLgovLwovLyAg
ICAgICAgICBJbiB0aGlzIGNhc2UgdGhlIG1hY3JvIERGQUtFX1NDT1BFRF9MT0NLX1RIUkVBRF9M
T0NLRUQgcGlucyB0aGUKLy8gICAgICAgICAgc3BlY2lmaWVkCi8vICAgICAgICAgIGNyaXRpY2Fs
IHNlY3Rpb24gdGhlIGZpcnN0IHRpbWUgYSB0aHJlYWQgZW50ZXJzIHB1c2ggb3IgcG9wLCBmcm9t
Ci8vICAgICAgICAgIHRoYXQgdGltZSBvbiBvbmx5IHRoYXQgdGhyZWFkIGlzIGFsbG93ZWQgdG8g
ZXhlY3V0ZSBwdXNoIG9yIHBvcC4KLy8KLy8gY2xhc3MgTm9uVGhyZWFkU2FmZVF1ZXVlIHsKLy8g
IHB1YmxpYzoKLy8gICAuLi4KLy8gICB2b2lkIHB1c2goaW50KSB7IERGQUtFX1NDT1BFRF9MT0NL
X1RIUkVBRF9MT0NLRUQocHVzaF9wb3BfKTsgLi4uIH0KLy8gICBpbnQgcG9wKCkgeyBERkFLRV9T
Q09QRURfTE9DS19USFJFQURfTE9DS0VEKHB1c2hfcG9wXyk7IC4uLiB9Ci8vICAgLi4uCi8vICBw
cml2YXRlOgovLyAgIERGQUtFX01VVEVYKHB1c2hfcG9wXyk7Ci8vIH07Ci8vCi8vCi8vIEV4YW1w
bGU6IENsYXNzIHRoYXQgaGFzIHRvIGJlIGNvbnRydWN0ZWQvZGVzdHJveWVkIG9uIHNhbWUgdGhy
ZWFkLCBpdCBoYXMKLy8gICAgICAgICAgYSAic2hhcmVhYmxlIiBtZXRob2QgKHdpdGggZXh0ZXJu
YWwgc3luY3Jvbml6YXRpb24pIGFuZCBhIG5vdAovLyAgICAgICAgICBzaGFyZWFibGUgbWV0aG9k
IChldmVuIHdpdGggZXh0ZXJuYWwgc3luY2hyb25pemF0aW9uKS4KLy8KLy8gICAgICAgICAgSW4g
dGhpcyBjYXNlIDMgQ3JpdGljYWwgc2VjdGlvbnMgaGF2ZSB0byBiZSBkZWZpbmVkCi8vCi8vIGNs
YXNzIEV4b3RpY0NsYXNzIHsKLy8gIHB1YmxpYzoKLy8gICBFeG90aWNDbGFzcygpIHsgREZBS0Vf
U0NPUEVEX0xPQ0tfVEhSRUFEX0xPQ0tFRChjdG9yX2R0b3JfKTsgLi4uIH0KLy8gICB+RXhvdGlj
Q2xhc3MoKSB7IERGQUtFX1NDT1BFRF9MT0NLX1RIUkVBRF9MT0NLRUQoY3Rvcl9kdG9yXyk7IC4u
LiB9Ci8vCi8vICAgdm9pZCBTaGFyZWFibGUoKSB7IERGQUtFX1NDT1BFRF9MT0NLKHNoYXJlYWJs
ZV9zZWN0aW9uXyk7IC4uLiB9Ci8vICAgdm9pZCBOb3RTaGFyZWFibGUoKSB7IERGQUtFX1NDT1BF
RF9MT0NLX1RIUkVBRF9MT0NLRUQoY3Rvcl9kdG9yXyk7IC4uLiB9Ci8vICAgLi4uCi8vICBwcml2
YXRlOgovLyAgIERGQUtFX01VVEVYKGN0b3JfZHRvcl8pOwovLyAgIERGQUtFX01VVEVYKHNoYXJl
YWJsZV9zZWN0aW9uXyk7Ci8vIH07CgoKI2lmICFkZWZpbmVkKE5ERUJVRykKCi8vIERlZmluZXMg
YSBjbGFzcyBtZW1iZXIgdGhhdCBhY3RzIGxpa2UgYSBtdXRleC4gSXQgaXMgdXNlZCBvbmx5IGFz
IGEKLy8gdmVyaWZpY2F0aW9uIHRvb2wuCiNkZWZpbmUgREZBS0VfTVVURVgob2JqKSBcCiAgICAg
bXV0YWJsZSBiYXNlOjpUaHJlYWRDb2xsaXNpb25XYXJuZXIgb2JqCi8vIEFzc2VydHMgdGhlIGNh
bGwgaXMgbmV2ZXIgY2FsbGVkIHNpbXVsdGFuZW91c2x5IGluIHR3byB0aHJlYWRzLiBVc2VkIGF0
Ci8vIG1lbWJlciBmdW5jdGlvbiBzY29wZS4KI2RlZmluZSBERkFLRV9TQ09QRURfTE9DSyhvYmop
IFwKICAgICBiYXNlOjpUaHJlYWRDb2xsaXNpb25XYXJuZXI6OlNjb3BlZENoZWNrIHNfY2hlY2tf
IyNvYmooJm9iaikKLy8gQXNzZXJ0cyB0aGUgY2FsbCBpcyBuZXZlciBjYWxsZWQgc2ltdWx0YW5l
b3VzbHkgaW4gdHdvIHRocmVhZHMuIFVzZWQgYXQKLy8gbWVtYmVyIGZ1bmN0aW9uIHNjb3BlLiBT
YW1lIGFzIERGQUtFX1NDT1BFRF9MT0NLIGJ1dCBhbGxvd3MgcmVjdXJzaXZlIGxvY2tzLgojZGVm
aW5lIERGQUtFX1NDT1BFRF9SRUNVUlNJVkVfTE9DSyhvYmopIFwKICAgICBiYXNlOjpUaHJlYWRD
b2xsaXNpb25XYXJuZXI6OlNjb3BlZFJlY3Vyc2l2ZUNoZWNrIHNyX2NoZWNrXyMjb2JqKCZvYmop
Ci8vIEFzc2VydHMgdGhlIGNvZGUgaXMgYWx3YXlzIGV4ZWN1dGVkIGluIHRoZSBzYW1lIHRocmVh
ZC4KI2RlZmluZSBERkFLRV9TQ09QRURfTE9DS19USFJFQURfTE9DS0VEKG9iaikgXAogICAgIGJh
c2U6OlRocmVhZENvbGxpc2lvbldhcm5lcjo6Q2hlY2sgY2hlY2tfIyNvYmooJm9iaikKCiNlbHNl
CgojZGVmaW5lIERGQUtFX01VVEVYKG9iaikKI2RlZmluZSBERkFLRV9TQ09QRURfTE9DSyhvYmop
ICgodm9pZCkwKQojZGVmaW5lIERGQUtFX1NDT1BFRF9SRUNVUlNJVkVfTE9DSyhvYmopICgodm9p
ZCkwKQojZGVmaW5lIERGQUtFX1NDT1BFRF9MT0NLX1RIUkVBRF9MT0NLRUQob2JqKSAoKHZvaWQp
MCkKCiNlbmRpZgoKbmFtZXNwYWNlIGJhc2UgewoKLy8gVGhlIGNsYXNzIFRocmVhZENvbGxpc2lv
bldhcm5lciB1c2VzIGFuIEFzc2VydGVyIHRvIG5vdGlmeSB0aGUgY29sbGlzaW9uCi8vIEFzc2Vy
dGVyQmFzZSBpcyB0aGUgaW50ZXJmYWNlcyBhbmQgRENoZWNrQXNzZXJ0ZXIgaXMgdGhlIGRlZmF1
bHQgYXNzZXJ0ZXIKLy8gdXNlZC4gRHVyaW5nIHRoZSB1bml0IHRlc3RzIGlzIHVzZWQgYW5vdGhl
ciBjbGFzcyB0aGF0IGRvZXNuJ3QgIkRDSEVDSyIKLy8gaW4gY2FzZSBvZiBjb2xsaXNpb24gKGNo
ZWNrIHRocmVhZF9jb2xsaXNpb25fd2FybmVyX3VuaXR0ZXN0cy5jYykKc3RydWN0IEFzc2VydGVy
QmFzZSB7CiAgdmlydHVhbCB+QXNzZXJ0ZXJCYXNlKCkge30KICB2aXJ0dWFsIHZvaWQgd2Fybigp
ID0gMDsKfTsKCnN0cnVjdCBEQ2hlY2tBc3NlcnRlciA6IHB1YmxpYyBBc3NlcnRlckJhc2Ugewog
IHZpcnR1YWwgfkRDaGVja0Fzc2VydGVyKCkge30KICB2aXJ0dWFsIHZvaWQgd2FybigpOwp9OwoK
Y2xhc3MgVGhyZWFkQ29sbGlzaW9uV2FybmVyIHsKIHB1YmxpYzoKICAvLyBUaGUgcGFyYW1ldGVy
IGFzc2VydGVyIGlzIHRoZXJlIG9ubHkgZm9yIHRlc3QgcHVycG9zZQogIFRocmVhZENvbGxpc2lv
bldhcm5lcihBc3NlcnRlckJhc2UqIGFzc2VydGVyID0gbmV3IERDaGVja0Fzc2VydGVyKCkpCiAg
ICAgIDogdmFsaWRfdGhyZWFkX2lkXygwKSwKICAgICAgICBjb3VudGVyXygwKSwKICAgICAgICBh
c3NlcnRlcl8oYXNzZXJ0ZXIpIHt9CgogIH5UaHJlYWRDb2xsaXNpb25XYXJuZXIoKSB7CiAgICBk
ZWxldGUgYXNzZXJ0ZXJfOwogIH0KCiAgLy8gVGhpcyBjbGFzcyBpcyBtZWFudCB0byBiZSB1c2Vk
IHRocm91Z2ggdGhlIG1hY3JvCiAgLy8gREZBS0VfU0NPUEVEX0xPQ0tfVEhSRUFEX0xPQ0tFRAog
IC8vIGl0IGRvZXNuJ3QgbGVhdmUgdGhlIGNyaXRpY2FsIHNlY3Rpb24sIGFzIG9wcG9zZWQgdG8g
U2NvcGVkQ2hlY2ssCiAgLy8gYmVjYXVzZSB0aGUgY3JpdGljYWwgc2VjdGlvbiBiZWluZyBwaW5u
ZWQgaXMgYWxsb3dlZCB0byBiZSB1c2VkIG9ubHkKICAvLyBmcm9tIG9uZSB0aHJlYWQKICBjbGFz
cyBDaGVjayB7CiAgIHB1YmxpYzoKICAgIGV4cGxpY2l0IENoZWNrKFRocmVhZENvbGxpc2lvbldh
cm5lciogd2FybmVyKQogICAgICAgIDogd2FybmVyXyh3YXJuZXIpIHsKICAgICAgd2FybmVyXy0+
RW50ZXJTZWxmKCk7CiAgICB9CgogICAgfkNoZWNrKCkge30KCiAgIHByaXZhdGU6CiAgICBUaHJl
YWRDb2xsaXNpb25XYXJuZXIqIHdhcm5lcl87CgogICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KENoZWNrKTsKICB9OwoKICAvLyBUaGlzIGNsYXNzIGlzIG1lYW50IHRvIGJlIHVzZWQgdGhyb3Vn
aCB0aGUgbWFjcm8KICAvLyBERkFLRV9TQ09QRURfTE9DSwogIGNsYXNzIFNjb3BlZENoZWNrIHsK
ICAgcHVibGljOgogICAgZXhwbGljaXQgU2NvcGVkQ2hlY2soVGhyZWFkQ29sbGlzaW9uV2FybmVy
KiB3YXJuZXIpCiAgICAgICAgOiB3YXJuZXJfKHdhcm5lcikgewogICAgICB3YXJuZXJfLT5FbnRl
cigpOwogICAgfQoKICAgIH5TY29wZWRDaGVjaygpIHsKICAgICAgd2FybmVyXy0+TGVhdmUoKTsK
ICAgIH0KCiAgIHByaXZhdGU6CiAgICBUaHJlYWRDb2xsaXNpb25XYXJuZXIqIHdhcm5lcl87Cgog
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNjb3BlZENoZWNrKTsKICB9OwoKICAvLyBUaGlz
IGNsYXNzIGlzIG1lYW50IHRvIGJlIHVzZWQgdGhyb3VnaCB0aGUgbWFjcm8KICAvLyBERkFLRV9T
Q09QRURfUkVDVVJTSVZFX0xPQ0sKICBjbGFzcyBTY29wZWRSZWN1cnNpdmVDaGVjayB7CiAgIHB1
YmxpYzoKICAgIGV4cGxpY2l0IFNjb3BlZFJlY3Vyc2l2ZUNoZWNrKFRocmVhZENvbGxpc2lvbldh
cm5lciogd2FybmVyKQogICAgICAgIDogd2FybmVyXyh3YXJuZXIpIHsKICAgICAgd2FybmVyXy0+
RW50ZXJTZWxmKCk7CiAgICB9CgogICAgflNjb3BlZFJlY3Vyc2l2ZUNoZWNrKCkgewogICAgICB3
YXJuZXJfLT5MZWF2ZSgpOwogICAgfQoKICAgcHJpdmF0ZToKICAgIFRocmVhZENvbGxpc2lvbldh
cm5lciogd2FybmVyXzsKCiAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU2NvcGVkUmVjdXJz
aXZlQ2hlY2spOwogIH07CgogcHJpdmF0ZToKICAvLyBUaGlzIG1ldGhvZCBzdG9yZXMgdGhlIGN1
cnJlbnQgdGhyZWFkIGlkZW50aWZpZXIgYW5kIGRvZXMgYSBEQ0hFQ0sKICAvLyBpZiBhIGFub3Ro
ZXIgdGhyZWFkIGhhcyBhbHJlYWR5IGRvbmUgaXQsIGl0IGlzIHNhZmUgaWYgc2FtZSB0aHJlYWQK
ICAvLyBjYWxscyB0aGlzIG11bHRpcGxlIHRpbWUgKHJlY3Vyc2lvbiBhbGxvd2VkKS4KICB2b2lk
IEVudGVyU2VsZigpOwoKICAvLyBTYW1lIGFzIEVudGVyU2VsZiBidXQgcmVjdXJzaW9uIGlzIG5v
dCBhbGxvd2VkLgogIHZvaWQgRW50ZXIoKTsKCiAgLy8gUmVtb3ZlcyB0aGUgdGhyZWFkX2lkIHN0
b3JlZCBpbiBvcmRlciB0byBhbGxvdyBvdGhlciB0aHJlYWRzIHRvCiAgLy8gY2FsbCBFbnRlclNl
bGYgb3IgRW50ZXIuCiAgdm9pZCBMZWF2ZSgpOwoKICAvLyBUaGlzIHN0b3JlcyB0aGUgdGhyZWFk
IGlkIHRoYXQgaXMgaW5zaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLCBpZiB0aGUKICAvLyB2YWx1
ZSBpcyAwIHRoZW4gbm8gdGhyZWFkIGlzIGluc2lkZS4KICB2b2xhdGlsZSBzdWJ0bGU6OkF0b21p
YzMyIHZhbGlkX3RocmVhZF9pZF87CgogIC8vIENvdW50ZXIgdG8gdHJhY2UgaG93IG1hbnkgdGlt
ZSBhIGNyaXRpY2FsIHNlY3Rpb24gd2FzICJwaW5uZWQiCiAgLy8gKHdoZW4gYWxsb3dlZCkgaW4g
b3JkZXIgdG8gdW5waW4gaXQgd2hlbiBjb3VudGVyXyByZWFjaGVzIDAuCiAgdm9sYXRpbGUgc3Vi
dGxlOjpBdG9taWMzMiBjb3VudGVyXzsKCiAgLy8gSGVyZSBvbmx5IGZvciBjbGFzcyB1bml0IHRl
c3RzIHB1cnBvc2UsIGR1cmluZyB0aGUgdGVzdCBJIG5lZWQgdG8gbm90CiAgLy8gRENIRUNLIGJ1
dCBub3RpZnkgdGhlIGNvbGxpc2lvbiB3aXRoIHNvbWV0aGluZyBlbHNlLgogIEFzc2VydGVyQmFz
ZSogYXNzZXJ0ZXJfOwoKICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGhyZWFkQ29sbGlzaW9u
V2FybmVyKTsKfTsKCn0gIC8vIG5hbWVzcGFjZSBiYXNlCgojZW5kaWYgIC8vIEJBU0VfVEhSRUFE
X0NPTExJU0lPTl9XQVJORVJfSF8KCiNpZm5kZWYgQkFTRV9SRUZfQ09VTlRFRF9IXwojZGVmaW5l
IEJBU0VfUkVGX0NPVU5URURfSF8KCm5hbWVzcGFjZSBiYXNlIHsKCm5hbWVzcGFjZSBzdWJ0bGUg
ewoKY2xhc3MgUmVmQ291bnRlZEJhc2UgewogcHVibGljOgogIHN0YXRpYyBib29sIEltcGxlbWVu
dHNUaHJlYWRTYWZlUmVmZXJlbmNlQ291bnRpbmcoKSB7IHJldHVybiBmYWxzZTsgfQoKICBib29s
IEhhc09uZVJlZigpIGNvbnN0IHsgcmV0dXJuIHJlZl9jb3VudF8gPT0gMTsgfQoKIHByb3RlY3Rl
ZDoKICBSZWZDb3VudGVkQmFzZSgpOwogIH5SZWZDb3VudGVkQmFzZSgpOwoKICB2b2lkIEFkZFJl
ZigpOwoKICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBzaG91bGQgc2VsZi1kZWxldGUu
CiAgYm9vbCBSZWxlYXNlKCk7CgogcHJpdmF0ZToKICBpbnQgcmVmX2NvdW50XzsKI2lmbmRlZiBO
REVCVUcKICBib29sIGluX2R0b3JfOwojZW5kaWYKCiAgREZBS0VfTVVURVgoYWRkX3JlbGVhc2Vf
KTsKCiAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlZkNvdW50ZWRCYXNlKTsKfTsKCmNsYXNz
IFJlZkNvdW50ZWRUaHJlYWRTYWZlQmFzZSB7CiBwdWJsaWM6CiAgc3RhdGljIGJvb2wgSW1wbGVt
ZW50c1RocmVhZFNhZmVSZWZlcmVuY2VDb3VudGluZygpIHsgcmV0dXJuIHRydWU7IH0KCiAgYm9v
bCBIYXNPbmVSZWYoKSBjb25zdDsKCiAgUmVmQ291bnRlZFRocmVhZFNhZmVCYXNlKCk7CiAgflJl
ZkNvdW50ZWRUaHJlYWRTYWZlQmFzZSgpIHsvKiBUT0RPKGdsaWRlcik6IGVtcHR5IHdpdGggTkRF
QlVHICovfTsKCiAgdm9pZCBBZGRSZWYoKTsKICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVj
dCBzaG91bGQgc2VsZi1kZWxldGUuCiAgYm9vbCBSZWxlYXNlKCkgewojaWZuZGVmIE5ERUJVRwog
IERDSEVDSyghaW5fZHRvcl8pOwogIERDSEVDSyghQXRvbWljUmVmQ291bnRJc1plcm8oJnJlZl9j
b3VudF8pKTsKI2VuZGlmCiAgaWYgKCFBdG9taWNSZWZDb3VudERlYygmcmVmX2NvdW50XykpIHsK
I2lmbmRlZiBOREVCVUcKICAgIGluX2R0b3JfID0gdHJ1ZTsKI2VuZGlmCiAgICByZXR1cm4gdHJ1
ZTsKICB9CiAgcmV0dXJuIGZhbHNlOwp9CgoKIHByb3RlY3RlZDoKCiBwcml2YXRlOgogIEF0b21p
Y1JlZkNvdW50IHJlZl9jb3VudF87CiNpZm5kZWYgTkRFQlVHCiAgYm9vbCBpbl9kdG9yXzsKI2Vu
ZGlmCgogIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZWZDb3VudGVkVGhyZWFkU2FmZUJhc2Up
Owp9OwoKUmVmQ291bnRlZFRocmVhZFNhZmVCYXNlOjpSZWZDb3VudGVkVGhyZWFkU2FmZUJhc2Uo
KSA6IHJlZl9jb3VudF8oMCkgewojaWZuZGVmIE5ERUJVRwogIGluX2R0b3JfID0gZmFsc2U7CiNl
bmRpZgp9CgoKdm9pZCBSZWZDb3VudGVkVGhyZWFkU2FmZUJhc2U6OkFkZFJlZigpIHsKI2lmbmRl
ZiBOREVCVUcKICBEQ0hFQ0soIWluX2R0b3JfKTsKI2VuZGlmCiAgQXRvbWljUmVmQ291bnRJbmMo
JnJlZl9jb3VudF8pOwp9CgoKCn0gIC8vIG5hbWVzcGFjZSBzdWJ0bGUKCi8vCi8vIEEgYmFzZSBj
bGFzcyBmb3IgcmVmZXJlbmNlIGNvdW50ZWQgY2xhc3Nlcy4gIE90aGVyd2lzZSwga25vd24gYXMg
YSBjaGVhcAovLyBrbm9jay1vZmYgb2YgV2ViS2l0J3MgUmVmQ291bnRlZDxUPiBjbGFzcy4gIFRv
IHVzZSB0aGlzIGd1eSBqdXN0IGV4dGVuZCB5b3VyCi8vIGNsYXNzIGZyb20gaXQgbGlrZSBzbzoK
Ly8KLy8gICBjbGFzcyBNeUZvbyA6IHB1YmxpYyBiYXNlOjpSZWZDb3VudGVkPE15Rm9vPiB7Ci8v
ICAgIC4uLgovLyAgICBwcml2YXRlOgovLyAgICAgZnJpZW5kIGNsYXNzIGJhc2U6OlJlZkNvdW50
ZWQ8TXlGb28+OwovLyAgICAgfk15Rm9vKCk7Ci8vICAgfTsKLy8KLy8gWW91IHNob3VsZCBhbHdh
eXMgbWFrZSB5b3VyIGRlc3RydWN0b3IgcHJpdmF0ZSwgdG8gYXZvaWQgYW55IGNvZGUgZGVsZXRp
bmcKLy8gdGhlIG9iamVjdCBhY2NpZGVudGx5IHdoaWxlIHRoZXJlIGFyZSByZWZlcmVuY2VzIHRv
IGl0Lgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgUmVmQ291bnRlZCA6IHB1YmxpYyBzdWJ0bGU6
OlJlZkNvdW50ZWRCYXNlIHsKIHB1YmxpYzoKICBSZWZDb3VudGVkKCkgeyB9CiAgflJlZkNvdW50
ZWQoKSB7IH0KCiAgdm9pZCBBZGRSZWYoKSB7CiAgICBzdWJ0bGU6OlJlZkNvdW50ZWRCYXNlOjpB
ZGRSZWYoKTsKICB9CgogIHZvaWQgUmVsZWFzZSgpIHsKICAgIGlmIChzdWJ0bGU6OlJlZkNvdW50
ZWRCYXNlOjpSZWxlYXNlKCkpIHsKICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsK
ICAgIH0KICB9CgogcHJpdmF0ZToKICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVmQ291bnRl
ZDxUPik7Cn07CgovLyBGb3J3YXJkIGRlY2xhcmF0aW9uLgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgdHlw
ZW5hbWUgVHJhaXRzPiBjbGFzcyBSZWZDb3VudGVkVGhyZWFkU2FmZTsKCi8vIERlZmF1bHQgdHJh
aXRzIGZvciBSZWZDb3VudGVkVGhyZWFkU2FmZTxUPi4gIERlbGV0ZXMgdGhlIG9iamVjdCB3aGVu
IGl0cyByZWYKLy8gY291bnQgcmVhY2hlcyAwLiAgT3ZlcmxvYWQgdG8gZGVsZXRlIGl0IG9uIGEg
ZGlmZmVyZW50IHRocmVhZCBldGMuCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnN0cnVjdCBEZWZhdWx0
UmVmQ291bnRlZFRocmVhZFNhZmVUcmFpdHMgewogIHN0YXRpYyB2b2lkIERlc3RydWN0KFQqIHgp
IHsKICAgIC8vIERlbGV0ZSB0aHJvdWdoIFJlZkNvdW50ZWRUaHJlYWRTYWZlIHRvIG1ha2UgY2hp
bGQgY2xhc3NlcyBvbmx5IG5lZWQgdG8gYmUKICAgIC8vIGZyaWVuZCB3aXRoIFJlZkNvdW50ZWRU
aHJlYWRTYWZlIGluc3RlYWQgb2YgdGhpcyBzdHJ1Y3QsIHdoaWNoIGlzIGFuCiAgICAvLyBpbXBs
ZW1lbnRhdGlvbiBkZXRhaWwuCiAgICBSZWZDb3VudGVkVGhyZWFkU2FmZTxULCBEZWZhdWx0UmVm
Q291bnRlZFRocmVhZFNhZmVUcmFpdHM+OjpEZWxldGVJbnRlcm5hbCh4KTsKICB9Cn07CgovLwov
LyBBIHRocmVhZC1zYWZlIHZhcmlhbnQgb2YgUmVmQ291bnRlZDxUPgovLwovLyAgIGNsYXNzIE15
Rm9vIDogcHVibGljIGJhc2U6OlJlZkNvdW50ZWRUaHJlYWRTYWZlPE15Rm9vPiB7Ci8vICAgIC4u
LgovLyAgIH07Ci8vCi8vIElmIHlvdSdyZSB1c2luZyB0aGUgZGVmYXVsdCB0cmFpdCwgdGhlbiB5
b3Ugc2hvdWxkIGFkZCBjb21waWxlIHRpbWUKLy8gYXNzZXJ0cyB0aGF0IG5vIG9uZSBlbHNlIGlz
IGRlbGV0aW5nIHlvdXIgb2JqZWN0LiAgaS5lLgovLyAgICBwcml2YXRlOgovLyAgICAgZnJpZW5k
IGNsYXNzIGJhc2U6OlJlZkNvdW50ZWRUaHJlYWRTYWZlPE15Rm9vPjsKLy8gICAgIH5NeUZvbygp
Owp0ZW1wbGF0ZSA8Y2xhc3MgVCwgdHlwZW5hbWUgVHJhaXRzID0gRGVmYXVsdFJlZkNvdW50ZWRU
aHJlYWRTYWZlVHJhaXRzPFQ+ID4KY2xhc3MgUmVmQ291bnRlZFRocmVhZFNhZmUgOiBwdWJsaWMg
c3VidGxlOjpSZWZDb3VudGVkVGhyZWFkU2FmZUJhc2UgewogcHVibGljOgogIFJlZkNvdW50ZWRU
aHJlYWRTYWZlKCkgeyB9CiAgflJlZkNvdW50ZWRUaHJlYWRTYWZlKCkgeyB9CgogIHZvaWQgQWRk
UmVmKCkgewogICAgc3VidGxlOjpSZWZDb3VudGVkVGhyZWFkU2FmZUJhc2U6OkFkZFJlZigpOwog
IH0KCiAgdm9pZCBSZWxlYXNlKCkgewogICAgaWYgKHN1YnRsZTo6UmVmQ291bnRlZFRocmVhZFNh
ZmVCYXNlOjpSZWxlYXNlKCkpIHsKICAgICAgVHJhaXRzOjpEZXN0cnVjdChzdGF0aWNfY2FzdDxU
Kj4odGhpcykpOwogICAgfQogIH0KCiBwcml2YXRlOgogIGZyaWVuZCBzdHJ1Y3QgRGVmYXVsdFJl
ZkNvdW50ZWRUaHJlYWRTYWZlVHJhaXRzPFQ+OwogIHN0YXRpYyB2b2lkIERlbGV0ZUludGVybmFs
KFQqIHgpIHsgZGVsZXRlIHg7IH0KCiAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlZkNvdW50
ZWRUaHJlYWRTYWZlKTsKfTsKCi8vCi8vIEEgd3JhcHBlciBmb3Igc29tZSBwaWVjZSBvZiBkYXRh
IHNvIHdlIGNhbiBwbGFjZSBvdGhlciB0aGluZ3MgaW4KLy8gc2NvcGVkX3JlZnB0cnM8Pi4KLy8K
dGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgUmVmQ291bnRlZERhdGEgOiBwdWJsaWMgYmFzZTo6
UmVmQ291bnRlZDwgYmFzZTo6UmVmQ291bnRlZERhdGE8VD4gPiB7CiBwdWJsaWM6CiAgUmVmQ291
bnRlZERhdGEoKSA6IGRhdGEoKSB7fQogIFJlZkNvdW50ZWREYXRhKGNvbnN0IFQmIGluX3ZhbHVl
KSA6IGRhdGEoaW5fdmFsdWUpIHt9CgogIFQgZGF0YTsKfTsKCn0gIC8vIG5hbWVzcGFjZSBiYXNl
CgovLwovLyBBIHNtYXJ0IHBvaW50ZXIgY2xhc3MgZm9yIHJlZmVyZW5jZSBjb3VudGVkIG9iamVj
dHMuICBVc2UgdGhpcyBjbGFzcyBpbnN0ZWFkCi8vIG9mIGNhbGxpbmcgQWRkUmVmIGFuZCBSZWxl
YXNlIG1hbnVhbGx5IG9uIGEgcmVmZXJlbmNlIGNvdW50ZWQgb2JqZWN0IHRvCi8vIGF2b2lkIGNv
bW1vbiBtZW1vcnkgbGVha3MgY2F1c2VkIGJ5IGZvcmdldHRpbmcgdG8gUmVsZWFzZSBhbiBvYmpl
Y3QKLy8gcmVmZXJlbmNlLiAgU2FtcGxlIHVzYWdlOgovLwovLyAgIGNsYXNzIE15Rm9vIDogcHVi
bGljIFJlZkNvdW50ZWQ8TXlGb28+IHsKLy8gICAgLi4uCi8vICAgfTsKLy8KLy8gICB2b2lkIHNv
bWVfZnVuY3Rpb24oKSB7Ci8vICAgICBzY29wZWRfcmVmcHRyPE15Rm9vPiBmb28gPSBuZXcgTXlG
b28oKTsKLy8gICAgIGZvby0+TWV0aG9kKHBhcmFtKTsKLy8gICAgIC8vIHxmb298IGlzIHJlbGVh
c2VkIHdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zCi8vICAgfQovLwovLyAgIHZvaWQgc29tZV9v
dGhlcl9mdW5jdGlvbigpIHsKLy8gICAgIHNjb3BlZF9yZWZwdHI8TXlGb28+IGZvbyA9IG5ldyBN
eUZvbygpOwovLyAgICAgLi4uCi8vICAgICBmb28gPSBOVUxMOyAgLy8gZXhwbGljaXRseSByZWxl
YXNlcyB8Zm9vfAovLyAgICAgLi4uCi8vICAgICBpZiAoZm9vKQovLyAgICAgICBmb28tPk1ldGhv
ZChwYXJhbSk7Ci8vICAgfQovLwovLyBUaGUgYWJvdmUgZXhhbXBsZXMgc2hvdyBob3cgc2NvcGVk
X3JlZnB0cjxUPiBhY3RzIGxpa2UgYSBwb2ludGVyIHRvIFQuCi8vIEdpdmVuIHR3byBzY29wZWRf
cmVmcHRyPFQ+IGNsYXNzZXMsIGl0IGlzIGFsc28gcG9zc2libGUgdG8gZXhjaGFuZ2UKLy8gcmVm
ZXJlbmNlcyBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cywgbGlrZSBzbzoKLy8KLy8gICB7Ci8vICAg
ICBzY29wZWRfcmVmcHRyPE15Rm9vPiBhID0gbmV3IE15Rm9vKCk7Ci8vICAgICBzY29wZWRfcmVm
cHRyPE15Rm9vPiBiOwovLwovLyAgICAgYi5zd2FwKGEpOwovLyAgICAgLy8gbm93LCB8YnwgcmVm
ZXJlbmNlcyB0aGUgTXlGb28gb2JqZWN0LCBhbmQgfGF8IHJlZmVyZW5jZXMgTlVMTC4KLy8gICB9
Ci8vCi8vIFRvIG1ha2UgYm90aCB8YXwgYW5kIHxifCBpbiB0aGUgYWJvdmUgZXhhbXBsZSByZWZl
cmVuY2UgdGhlIHNhbWUgTXlGb28KLy8gb2JqZWN0LCBzaW1wbHkgdXNlIHRoZSBhc3NpZ25tZW50
IG9wZXJhdG9yOgovLwovLyAgIHsKLy8gICAgIHNjb3BlZF9yZWZwdHI8TXlGb28+IGEgPSBuZXcg
TXlGb28oKTsKLy8gICAgIHNjb3BlZF9yZWZwdHI8TXlGb28+IGI7Ci8vCi8vICAgICBiID0gYTsK
Ly8gICAgIC8vIG5vdywgfGF8IGFuZCB8YnwgZWFjaCBvd24gYSByZWZlcmVuY2UgdG8gdGhlIHNh
bWUgTXlGb28gb2JqZWN0LgovLyAgIH0KLy8KdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIHNjb3Bl
ZF9yZWZwdHIgewogcHVibGljOgogIHNjb3BlZF9yZWZwdHIoKSA6IHB0cl8oTlVMTCkgewogIH0K
CiAgc2NvcGVkX3JlZnB0cihUKiBwKSA6IHB0cl8ocCkgewogICAgaWYgKHB0cl8pCiAgICAgIHB0
cl8tPkFkZFJlZigpOwogIH0KCiAgc2NvcGVkX3JlZnB0cihjb25zdCBzY29wZWRfcmVmcHRyPFQ+
JiByKSA6IHB0cl8oci5wdHJfKSB7CiAgICBpZiAocHRyXykKICAgICAgcHRyXy0+QWRkUmVmKCk7
CiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KICBzY29wZWRfcmVmcHRyKGNvbnN0IHNjb3Bl
ZF9yZWZwdHI8VT4mIHIpIDogcHRyXyhyLmdldCgpKSB7CiAgICBpZiAocHRyXykKICAgICAgcHRy
Xy0+QWRkUmVmKCk7CiAgfQoKICB+c2NvcGVkX3JlZnB0cigpIHsKICAgIGlmIChwdHJfKQogICAg
ICBwdHJfLT5SZWxlYXNlKCk7CiAgfQoKICBUKiBnZXQoKSBjb25zdCB7IHJldHVybiBwdHJfOyB9
CiAgb3BlcmF0b3IgVCooKSBjb25zdCB7IHJldHVybiBwdHJfOyB9CiAgVCogb3BlcmF0b3ItPigp
IGNvbnN0IHsgcmV0dXJuIHB0cl87IH0KCiAgLy8gUmVsZWFzZSBhIHBvaW50ZXIuCiAgLy8gVGhl
IHJldHVybiB2YWx1ZSBpcyB0aGUgY3VycmVudCBwb2ludGVyIGhlbGQgYnkgdGhpcyBvYmplY3Qu
CiAgLy8gSWYgdGhpcyBvYmplY3QgaG9sZHMgYSBOVUxMIHBvaW50ZXIsIHRoZSByZXR1cm4gdmFs
dWUgaXMgTlVMTC4KICAvLyBBZnRlciB0aGlzIG9wZXJhdGlvbiwgdGhpcyBvYmplY3Qgd2lsbCBo
b2xkIGEgTlVMTCBwb2ludGVyLAogIC8vIGFuZCB3aWxsIG5vdCBvd24gdGhlIG9iamVjdCBhbnkg
bW9yZS4KICBUKiByZWxlYXNlKCkgewogICAgVCogcmV0VmFsID0gcHRyXzsKICAgIHB0cl8gPSBO
VUxMOwogICAgcmV0dXJuIHJldFZhbDsKICB9CgogIHNjb3BlZF9yZWZwdHI8VD4mIG9wZXJhdG9y
PShUKiBwKSB7CiAgICAvLyBBZGRSZWYgZmlyc3Qgc28gdGhhdCBzZWxmIGFzc2lnbm1lbnQgc2hv
dWxkIHdvcmsKICAgIGlmIChwKQogICAgICBwLT5BZGRSZWYoKTsKICAgIGlmIChwdHJfICkKICAg
ICAgcHRyXyAtPlJlbGVhc2UoKTsKICAgIHB0cl8gPSBwOwogICAgcmV0dXJuICp0aGlzOwogIH0K
CiAgc2NvcGVkX3JlZnB0cjxUPiYgb3BlcmF0b3I9KGNvbnN0IHNjb3BlZF9yZWZwdHI8VD4mIHIp
IHsKICAgIHJldHVybiAqdGhpcyA9IHIucHRyXzsKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBV
PgogIHNjb3BlZF9yZWZwdHI8VD4mIG9wZXJhdG9yPShjb25zdCBzY29wZWRfcmVmcHRyPFU+JiBy
KSB7CiAgICByZXR1cm4gKnRoaXMgPSByLmdldCgpOwogIH0KCiAgdm9pZCBzd2FwKFQqKiBwcCkg
ewogICAgVCogcCA9IHB0cl87CiAgICBwdHJfID0gKnBwOwogICAgKnBwID0gcDsKICB9CgogIHZv
aWQgc3dhcChzY29wZWRfcmVmcHRyPFQ+JiByKSB7CiAgICBzd2FwKCZyLnB0cl8pOwogIH0KCiBw
cm90ZWN0ZWQ6CiAgVCogcHRyXzsKfTsKCi8vIEhhbmR5IHV0aWxpdHkgZm9yIGNyZWF0aW5nIGEg
c2NvcGVkX3JlZnB0cjxUPiBvdXQgb2YgYSBUKiBleHBsaWNpdGx5IHdpdGhvdXQKLy8gaGF2aW5n
IHRvIHJldHlwZSBhbGwgdGhlIHRlbXBsYXRlIGFyZ3VtZW50cwp0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4Kc2NvcGVkX3JlZnB0cjxUPiBtYWtlX3Njb3BlZF9yZWZwdHIoVCogdCkgewogIHJldHVybiBz
Y29wZWRfcmVmcHRyPFQ+KHQpOwp9CgojZW5kaWYgIC8vIEJBU0VfUkVGX0NPVU5URURfSF8KCiNp
Zm5kZWYgQkFTRV9OT05fVEhSRUFEX1NBRkVfSF9fCiNkZWZpbmUgQkFTRV9OT05fVEhSRUFEX1NB
RkVfSF9fCgovLyBBIGhlbHBlciBjbGFzcyB1c2VkIHRvIGhlbHAgdmVyaWZ5IHRoYXQgbWV0aG9k
cyBvZiBhIGNsYXNzIGFyZQovLyBjYWxsZWQgZnJvbSB0aGUgc2FtZSB0aHJlYWQuICBPbmUgY2Fu
IGluaGVyaXQgZnJvbSB0aGlzIGNsYXNzIGFuZCB1c2UKLy8gQ2FsbGVkT25WYWxpZFRocmVhZCgp
IHRvIHZlcmlmeS4KLy8KLy8gVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggY2xhc3Nl
cyB0aGF0IGFwcGVhciB0byBiZSB0aHJlYWQgc2FmZSwgYnV0Ci8vIGFyZW4ndC4gIEZvciBleGFt
cGxlLCBhIHNlcnZpY2Ugb3IgYSBzaW5nbGV0b24gbGlrZSB0aGUgcHJlZmVyZW5jZXMgc3lzdGVt
LgovLwovLyBFeGFtcGxlOgovLyBjbGFzcyBNeUNsYXNzIDogcHVibGljIE5vblRocmVhZFNhZmUg
ewovLyAgcHVibGljOgovLyAgIHZvaWQgRm9vKCkgewovLyAgICAgRENIRUNLKENhbGxlZE9uVmFs
aWRUaHJlYWQoKSk7Ci8vICAgICAuLi4gKGRvIHN0dWZmKSAuLi4KLy8gICB9Ci8vIH0KLy8KLy8g
SW4gUmVsZWFzZSBtb2RlLCBDYWxsZWRPblZhbGlkVGhyZWFkIHdpbGwgYWx3YXlzIHJldHVybiB0
cnVlLgovLwojaWZuZGVmIE5ERUJVRwpjbGFzcyBOb25UaHJlYWRTYWZlIHsKIHB1YmxpYzoKICBO
b25UaHJlYWRTYWZlKCk7CiAgfk5vblRocmVhZFNhZmUoKTsKCiAgYm9vbCBDYWxsZWRPblZhbGlk
VGhyZWFkKCkgY29uc3Q7CgogcHJpdmF0ZToKICBQbGF0Zm9ybVRocmVhZElkIHZhbGlkX3RocmVh
ZF9pZF87Cn07CiNlbHNlCi8vIERvIG5vdGhpbmcgaW4gcmVsZWFzZSBtb2RlLgpjbGFzcyBOb25U
aHJlYWRTYWZlIHsKIHB1YmxpYzoKICBOb25UaHJlYWRTYWZlKCkge30KICB+Tm9uVGhyZWFkU2Fm
ZSgpIHt9CgogIGJvb2wgQ2FsbGVkT25WYWxpZFRocmVhZCgpIGNvbnN0IHsKICAgIHJldHVybiB0
cnVlOwogIH0KfTsKI2VuZGlmICAvLyBOREVCVUcKCiNlbmRpZiAgLy8gQkFTRV9OT05fVEhSRUFE
X1NBRkVfSF9fCgoKCiNpZm5kZWYgQkFTRV9XRUFLX1BUUl9IXwojZGVmaW5lIEJBU0VfV0VBS19Q
VFJfSF8KCm5hbWVzcGFjZSBiYXNlIHsKCm5hbWVzcGFjZSBpbnRlcm5hbCB7Ci8vIFRoZXNlIGNs
YXNzZXMgYXJlIHBhcnQgb2YgdGhlIFdlYWtQdHIgaW1wbGVtZW50YXRpb24uCi8vIERPIE5PVCBV
U0UgVEhFU0UgQ0xBU1NFUyBESVJFQ1RMWSBZT1VSU0VMRi4KCmNsYXNzIFdlYWtSZWZlcmVuY2Ug
ewogcHVibGljOgogIGNsYXNzIEZsYWcgOiBwdWJsaWMgUmVmQ291bnRlZDxGbGFnPiwgcHVibGlj
IE5vblRocmVhZFNhZmUgewogICBwdWJsaWM6CiAgICBGbGFnKEZsYWcqKiBoYW5kbGUpIDogaGFu
ZGxlXyhoYW5kbGUpIHsKICAgIH0KCiAgICB+RmxhZygpIHsKICAgICAgaWYgKGhhbmRsZV8pCiAg
ICAgICAgKmhhbmRsZV8gPSBOVUxMOwogICAgfQoKICAgIHZvaWQgQWRkUmVmKCkgewogICAgICBE
Q0hFQ0soQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKICAgICAgUmVmQ291bnRlZDxGbGFnPjo6QWRk
UmVmKCk7CiAgICB9CgogICAgdm9pZCBSZWxlYXNlKCkgewogICAgICBEQ0hFQ0soQ2FsbGVkT25W
YWxpZFRocmVhZCgpKTsKICAgICAgUmVmQ291bnRlZDxGbGFnPjo6UmVsZWFzZSgpOwogICAgfQoK
ICAgIHZvaWQgSW52YWxpZGF0ZSgpIHsgaGFuZGxlXyA9IE5VTEw7IH0KICAgIGJvb2wgaXNfdmFs
aWQoKSBjb25zdCB7IHJldHVybiBoYW5kbGVfICE9IE5VTEw7IH0KCiAgIHByaXZhdGU6CiAgICBG
bGFnKiogaGFuZGxlXzsKICB9OwoKICBXZWFrUmVmZXJlbmNlKCkge30KICBXZWFrUmVmZXJlbmNl
KEZsYWcqIGZsYWcpIDogZmxhZ18oZmxhZykge30KCiAgYm9vbCBpc192YWxpZCgpIGNvbnN0IHsg
cmV0dXJuIGZsYWdfICYmIGZsYWdfLT5pc192YWxpZCgpOyB9CgogcHJpdmF0ZToKICBzY29wZWRf
cmVmcHRyPEZsYWc+IGZsYWdfOwp9OwoKY2xhc3MgV2Vha1JlZmVyZW5jZU93bmVyIHsKIHB1Ymxp
YzoKICBXZWFrUmVmZXJlbmNlT3duZXIoKSA6IGZsYWdfKE5VTEwpIHsKICB9CgogIH5XZWFrUmVm
ZXJlbmNlT3duZXIoKSB7CiAgICBJbnZhbGlkYXRlKCk7CiAgfQoKICBXZWFrUmVmZXJlbmNlIEdl
dFJlZigpIGNvbnN0IHsKICAgIGlmICghZmxhZ18pCiAgICAgIGZsYWdfID0gbmV3IFdlYWtSZWZl
cmVuY2U6OkZsYWcoJmZsYWdfKTsKICAgIHJldHVybiBXZWFrUmVmZXJlbmNlKGZsYWdfKTsKICB9
CgogIGJvb2wgSGFzUmVmcygpIGNvbnN0IHsKICAgIHJldHVybiBmbGFnXyAhPSBOVUxMOwogIH0K
CiAgdm9pZCBJbnZhbGlkYXRlKCkgewogICAgaWYgKGZsYWdfKSB7CiAgICAgIGZsYWdfLT5JbnZh
bGlkYXRlKCk7CiAgICAgIGZsYWdfID0gTlVMTDsKICAgIH0KICB9CgogcHJpdmF0ZToKICBtdXRh
YmxlIFdlYWtSZWZlcmVuY2U6OkZsYWcqIGZsYWdfOwp9OwoKLy8gVGhpcyBjbGFzcyBzaW1wbGlm
aWVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBXZWFrUHRyJ3MgdHlwZSBjb252ZXJzaW9uCi8vIGNv
bnN0cnVjdG9yIGJ5IGF2b2lkaW5nIHRoZSBuZWVkIGZvciBhIHB1YmxpYyBhY2Nlc3NvciBmb3Ig
cmVmXy4gIEEKLy8gV2Vha1B0cjxUPiBjYW5ub3QgYWNjZXNzIHRoZSBwcml2YXRlIG1lbWJlcnMg
b2YgV2Vha1B0cjxVPiwgc28gdGhpcwovLyBiYXNlIGNsYXNzIGdpdmVzIHVzIGEgd2F5IHRvIGFj
Y2VzcyByZWZfIGluIGEgcHJvdGVjdGVkIGZhc2hpb24uCmNsYXNzIFdlYWtQdHJCYXNlIHsKIHB1
YmxpYzoKICBXZWFrUHRyQmFzZSgpIHsKICB9CgogcHJvdGVjdGVkOgogIFdlYWtQdHJCYXNlKGNv
bnN0IFdlYWtSZWZlcmVuY2UmIHJlZikgOiByZWZfKHJlZikgewogIH0KCiAgV2Vha1JlZmVyZW5j
ZSByZWZfOwp9OwoKfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCgp0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gY2xhc3MgU3VwcG9ydHNXZWFrUHRyOwp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2Vh
a1B0ckZhY3Rvcnk7CgovLyBUaGUgV2Vha1B0ciBjbGFzcyBob2xkcyBhIHdlYWsgcmVmZXJlbmNl
IHRvIHxUKnwuCi8vCi8vIFRoaXMgY2xhc3MgaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBsaWtlIGEg
bm9ybWFsIHBvaW50ZXIuICBZb3Ugc2hvdWxkIGFsd2F5cwovLyBudWxsLXRlc3QgYW4gb2JqZWN0
IG9mIHRoaXMgY2xhc3MgYmVmb3JlIHVzaW5nIGl0IG9yIGludm9raW5nIGEgbWV0aG9kIHRoYXQK
Ly8gbWF5IHJlc3VsdCBpbiB0aGUgdW5kZXJseWluZyBvYmplY3QgYmVpbmcgZGVzdHJveWVkLgov
LwovLyBFWEFNUExFOgovLwovLyAgIGNsYXNzIEZvbyB7IC4uLiB9OwovLyAgIFdlYWtQdHI8Rm9v
PiBmb287Ci8vICAgaWYgKGZvbykKLy8gICAgIGZvby0+bWV0aG9kKCk7Ci8vCnRlbXBsYXRlIDx0
eXBlbmFtZSBUPgpjbGFzcyBXZWFrUHRyIDogcHVibGljIGludGVybmFsOjpXZWFrUHRyQmFzZSB7
CiBwdWJsaWM6CiAgV2Vha1B0cigpIDogcHRyXyhOVUxMKSB7CiAgfQoKICAvLyBBbGxvdyBjb252
ZXJzaW9uIGZyb20gVSB0byBUIHByb3ZpZGVkIFUgImlzIGEiIFQuCiAgdGVtcGxhdGUgPHR5cGVu
YW1lIFU+CiAgV2Vha1B0cihjb25zdCBXZWFrUHRyPFU+JiBvdGhlcikgOiBXZWFrUHRyQmFzZShv
dGhlciksIHB0cl8ob3RoZXIuZ2V0KCkpIHsKICB9CgogIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJu
IHJlZl8uaXNfdmFsaWQoKSA/IHB0cl8gOiBOVUxMOyB9CiAgb3BlcmF0b3IgVCooKSBjb25zdCB7
IHJldHVybiBnZXQoKTsgfQoKICBUKiBvcGVyYXRvciooKSBjb25zdCB7CiAgICBEQ0hFQ0soZ2V0
KCkgIT0gTlVMTCk7CiAgICByZXR1cm4gKmdldCgpOwogIH0KICBUKiBvcGVyYXRvci0+KCkgY29u
c3QgewogICAgRENIRUNLKGdldCgpICE9IE5VTEwpOwogICAgcmV0dXJuIGdldCgpOwogIH0KCiAg
dm9pZCByZXNldCgpIHsKICAgIHJlZl8gPSBpbnRlcm5hbDo6V2Vha1JlZmVyZW5jZSgpOwogICAg
cHRyXyA9IE5VTEw7CiAgfQoKIHByaXZhdGU6CiAgZnJpZW5kIGNsYXNzIFN1cHBvcnRzV2Vha1B0
cjxUPjsKICBmcmllbmQgY2xhc3MgV2Vha1B0ckZhY3Rvcnk8VD47CgogIFdlYWtQdHIoY29uc3Qg
aW50ZXJuYWw6OldlYWtSZWZlcmVuY2UmIHJlZiwgVCogcHRyKQogICAgICA6IFdlYWtQdHJCYXNl
KHJlZiksIHB0cl8ocHRyKSB7CiAgfQoKICAvLyBUaGlzIHBvaW50ZXIgaXMgb25seSB2YWxpZCB3
aGVuIHJlZl8uaXNfdmFsaWQoKSBpcyB0cnVlLiAgT3RoZXJ3aXNlLCBpdHMKICAvLyB2YWx1ZSBp
cyB1bmRlZmluZWQgKGFzIG9wcG9zZWQgdG8gTlVMTCkuCiAgVCogcHRyXzsKfTsKCi8vIEEgY2xh
c3MgbWF5IGV4dGVuZCBmcm9tIFN1cHBvcnRzV2Vha1B0ciB0byBleHBvc2Ugd2VhayBwb2ludGVy
cyB0byBpdHNlbGYuCi8vIFRoaXMgaXMgdXNlZnVsIGluIGNhc2VzIHdoZXJlIHlvdSB3YW50IG90
aGVycyB0byBiZSBhYmxlIHRvIGdldCBhIHdlYWsKLy8gcG9pbnRlciB0byB5b3VyIGNsYXNzLiAg
SXQgYWxzbyBoYXMgdGhlIHByb3BlcnR5IHRoYXQgeW91IGRvbid0IG5lZWQgdG8KLy8gaW5pdGlh
bGl6ZSBpdCBmcm9tIHlvdXIgY29uc3RydWN0b3IuCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBT
dXBwb3J0c1dlYWtQdHIgewogcHVibGljOgogIFN1cHBvcnRzV2Vha1B0cigpIHt9CgogIFdlYWtQ
dHI8VD4gQXNXZWFrUHRyKCkgewogICAgcmV0dXJuIFdlYWtQdHI8VD4od2Vha19yZWZlcmVuY2Vf
b3duZXJfLkdldFJlZigpLCBzdGF0aWNfY2FzdDxUKj4odGhpcykpOwogIH0KCiBwcml2YXRlOgog
IGludGVybmFsOjpXZWFrUmVmZXJlbmNlT3duZXIgd2Vha19yZWZlcmVuY2Vfb3duZXJfOwogIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTdXBwb3J0c1dlYWtQdHIpOwp9OwoKLy8gQSBjbGFzcyBt
YXkgYWx0ZXJuYXRpdmVseSBiZSBjb21wb3NlZCBvZiBhIFdlYWtQdHJGYWN0b3J5IGFuZCB0aGVy
ZWJ5Ci8vIGNvbnRyb2wgaG93IGl0IGV4cG9zZXMgd2VhayBwb2ludGVycyB0byBpdHNlbGYuICBU
aGlzIGlzIGhlbHBmdWwgaWYgeW91IG9ubHkKLy8gbmVlZCB3ZWFrIHBvaW50ZXJzIHdpdGhpbiB0
aGUgaW1wbGVtZW50YXRpb24gb2YgYSBjbGFzcy4gIFRoaXMgY2xhc3MgaXMgYWxzbwovLyB1c2Vm
dWwgd2hlbiB3b3JraW5nIHdpdGggcHJpbWl0aXZlIHR5cGVzLiAgRm9yIGV4YW1wbGUsIHlvdSBj
b3VsZCBoYXZlIGEKLy8gV2Vha1B0ckZhY3Rvcnk8Ym9vbD4gdGhhdCBpcyB1c2VkIHRvIHBhc3Mg
YXJvdW5kIGEgd2VhayByZWZlcmVuY2UgdG8gYSBib29sLgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xh
c3MgV2Vha1B0ckZhY3RvcnkgewogcHVibGljOgogIGV4cGxpY2l0IFdlYWtQdHJGYWN0b3J5KFQq
IHB0cikgOiBwdHJfKHB0cikgewogIH0KCiAgV2Vha1B0cjxUPiBHZXRXZWFrUHRyKCkgewogICAg
cmV0dXJuIFdlYWtQdHI8VD4od2Vha19yZWZlcmVuY2Vfb3duZXJfLkdldFJlZigpLCBwdHJfKTsK
ICB9CgogIC8vIENhbGwgdGhpcyBtZXRob2QgdG8gaW52YWxpZGF0ZSBhbGwgZXhpc3Rpbmcgd2Vh
ayBwb2ludGVycy4KICB2b2lkIEludmFsaWRhdGVXZWFrUHRycygpIHsKICAgIHdlYWtfcmVmZXJl
bmNlX293bmVyXy5JbnZhbGlkYXRlKCk7CiAgfQoKICAvLyBDYWxsIHRoaXMgbWV0aG9kIHRvIGRl
dGVybWluZSBpZiBhbnkgd2VhayBwb2ludGVycyBleGlzdC4KICBib29sIEhhc1dlYWtQdHJzKCkg
Y29uc3QgewogICAgcmV0dXJuIHdlYWtfcmVmZXJlbmNlX293bmVyXy5IYXNSZWZzKCk7CiAgfQoK
IHByaXZhdGU6CiAgaW50ZXJuYWw6OldlYWtSZWZlcmVuY2VPd25lciB3ZWFrX3JlZmVyZW5jZV9v
d25lcl87CiAgVCogcHRyXzsKICBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoV2Vha1B0
ckZhY3RvcnkpOwp9OwoKfSAgLy8gbmFtZXNwYWNlIGJhc2UKCiNlbmRpZiAgLy8gQkFTRV9XRUFL
X1BUUl9IXwoKCgoKI2lmbmRlZiBCQVNFX1RBU0tfSF8KI2RlZmluZSBCQVNFX1RBU0tfSF8KCi8v
IFRhc2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vCi8vIEEgdGFzayBpcyBhIGdlbmVyaWMgcnVubmFibGUg
dGhpbmd5LCB1c3VhbGx5IHVzZWQgZm9yIHJ1bm5pbmcgY29kZSBvbiBhCi8vIGRpZmZlcmVudCB0
aHJlYWQgb3IgZm9yIHNjaGVkdWxpbmcgZnV0dXJlIHRhc2tzIG9mZiBvZiB0aGUgbWVzc2FnZSBs
b29wLgoKY2xhc3MgVGFzayA6IHB1YmxpYyB0cmFja2VkX29iamVjdHM6OlRyYWNrZWQgewogcHVi
bGljOgogIFRhc2soKSB7fQogIHZpcnR1YWwgflRhc2soKSB7fQoKICAvLyBUYXNrcyBhcmUgYXV0
b21hdGljYWxseSBkZWxldGVkIGFmdGVyIFJ1biBpcyBjYWxsZWQuCiAgdmlydHVhbCB2b2lkIFJ1
bigpID0gMDsKfTsKCmNsYXNzIENhbmNlbGFibGVUYXNrIDogcHVibGljIFRhc2sgewogcHVibGlj
OgogIC8vIE5vdCBhbGwgdGFza3Mgc3VwcG9ydCBjYW5jZWxsYXRpb24uCiAgdmlydHVhbCB2b2lk
IENhbmNlbCgpID0gMDsKfTsKCi8vIFNjb3BlZCBGYWN0b3JpZXMgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vCi8vIFRoZXNlIHNj
b3BlZCBmYWN0b3J5IG9iamVjdHMgY2FuIGJlIHVzZWQgYnkgbm9uLXJlZmNvdW50ZWQgb2JqZWN0
cyB0byBzYWZlbHkKLy8gcGxhY2UgdGFza3MgaW4gYSBtZXNzYWdlIGxvb3AuICBFYWNoIGZhY3Rv
cnkgZ3VhcmFudGVlcyB0aGF0IHRoZSB0YXNrcyBpdAovLyBwcm9kdWNlcyB3aWxsIG5vdCBydW4g
YWZ0ZXIgdGhlIGZhY3RvcnkgaXMgZGVzdHJveWVkLiAgQ29tbW9ubHksIGZhY3RvcmllcwovLyBh
cmUgZGVjbGFyZWQgYXMgY2xhc3MgbWVtYmVycywgc28gdGhlIGNsYXNzJyB0YXNrcyB3aWxsIGF1
dG9tYXRpY2FsbHkgY2FuY2VsCi8vIHdoZW4gdGhlIGNsYXNzIGluc3RhbmNlIGlzIGRlc3Ryb3ll
ZC4KLy8KLy8gRXhhbXBlIFVzYWdlOgovLwovLyBjbGFzcyBNeUNsYXNzIHsKLy8gIHByaXZhdGU6
Ci8vICAgLy8gVGhpcyBmYWN0b3J5IHdpbGwgYmUgdXNlZCB0byBzY2hlZHVsZSBpbnZvY2F0aW9u
cyBvZiBTb21lTWV0aG9kLgovLyAgIFNjb3BlZFJ1bm5hYmxlTWV0aG9kRmFjdG9yeTxNeUNsYXNz
PiBzb21lX21ldGhvZF9mYWN0b3J5XzsKLy8KLy8gIHB1YmxpYzoKLy8gICAvLyBJdCBpcyBzYWZl
IHRvIHN1cHByZXNzIHdhcm5pbmcgNDM1NSBoZXJlLgovLyAgIE15Q2xhc3MoKSA6IHNvbWVfbWV0
aG9kX2ZhY3RvcnlfKHRoaXMpIHsgfQovLwovLyAgIHZvaWQgU29tZU1ldGhvZCgpIHsKLy8gICAg
IC8vIElmIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgY2FsbGVkIGRpcmVjdGx5LCB5b3UgbWlnaHQg
d2FudCB0byByZXZva2UKLy8gICAgIC8vIGFueSBvdXRzdGFuZGluZyBydW5uYWJsZSBtZXRob2Rz
IHNjaGVkdWxlZCB0byBjYWxsIGl0LiAgSWYgaXQncyBub3QKLy8gICAgIC8vIHJlZmVyZW5jZWQg
b3RoZXIgdGhhbiBieSB0aGUgZmFjdG9yeSwgdGhpcyBpcyB1bm5lY2Vzc2FyeS4KLy8gICAgIHNv
bWVfbWV0aG9kX2ZhY3RvcnlfLlJldm9rZUFsbCgpOwovLyAgICAgLi4uCi8vICAgfQovLwovLyAg
IHZvaWQgU2NoZWR1bGVTb21lTWV0aG9kKCkgewovLyAgICAgLy8gSWYgeW91J2QgbGlrZSB0byBv
bmx5IG9ubHkgaGF2ZSBvbmUgcGVuZGluZyB0YXNrIGF0IGEgdGltZSwgdGVzdCBmb3IKLy8gICAg
IC8vIHxlbXB0eXwgYmVmb3JlIG1hbnVmYWN0dXJpbmcgYW5vdGhlciB0YXNrLgovLyAgICAgaWYg
KCFzb21lX21ldGhvZF9mYWN0b3J5Xy5lbXB0eSgpKQovLyAgICAgICByZXR1cm47Ci8vCi8vICAg
ICAvLyBUaGUgZmFjdG9yaWVzIGFyZSBub3QgdGhyZWFkIHNhZmUsIHNvIGFsd2F5cyBpbnZva2Ug
b24KLy8gICAgIC8vIHxNZXNzYWdlTG9vcDo6Y3VycmVudCgpfC4KLy8gICAgIE1lc3NhZ2VMb29w
OjpjdXJyZW50KCktPlBvc3REZWxheWVkVGFzayhGUk9NX0hFUkUsCi8vICAgICAgICAgc29tZV9t
ZXRob2RfZmFjdG9yeV8uTmV3UnVubmFibGVNZXRob2QoJk15Q2xhc3M6OlNvbWVNZXRob2QpLAov
LyAgICAgICAgIGtTb21lTWV0aG9kRGVsYXlNUyk7Ci8vICAgfQovLyB9OwoKLy8gQSBTY29wZWRS
dW5uYWJsZU1ldGhvZEZhY3RvcnkgY3JlYXRlcyBydW5uYWJsZSBtZXRob2RzIGZvciBhIHNwZWNp
ZmllZAovLyBvYmplY3QuICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGdlbmVyYXRp
bmcgY2FsbGJhY2tzIGZvcgovLyBub24tcmVmZXJlbmNlIGNvdW50ZWQgb2JqZWN0cyB3aGVuIHRo
ZSBmYWN0b3J5IGlzIGEgbWVtYmVyIG9mIHRoZSBvYmplY3QuCnRlbXBsYXRlPGNsYXNzIFQ+CmNs
YXNzIFNjb3BlZFJ1bm5hYmxlTWV0aG9kRmFjdG9yeSB7CiBwdWJsaWM6CiAgZXhwbGljaXQgU2Nv
cGVkUnVubmFibGVNZXRob2RGYWN0b3J5KFQqIG9iamVjdCkgOiB3ZWFrX2ZhY3RvcnlfKG9iamVj
dCkgewogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIE1ldGhvZD4KICBpbmxpbmUgVGFzayogTmV3UnVu
bmFibGVNZXRob2QoTWV0aG9kIG1ldGhvZCkgewogICAgcmV0dXJuIG5ldyBSdW5uYWJsZU1ldGhv
ZDxNZXRob2QsIFR1cGxlMD4oCiAgICAgICAgd2Vha19mYWN0b3J5Xy5HZXRXZWFrUHRyKCksIG1l
dGhvZCwgTWFrZVR1cGxlKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIE1ldGhvZCwgY2xhc3Mg
QT4KICBpbmxpbmUgVGFzayogTmV3UnVubmFibGVNZXRob2QoTWV0aG9kIG1ldGhvZCwgY29uc3Qg
QSYgYSkgewogICAgcmV0dXJuIG5ldyBSdW5uYWJsZU1ldGhvZDxNZXRob2QsIFR1cGxlMTxBPiA+
KAogICAgICAgIHdlYWtfZmFjdG9yeV8uR2V0V2Vha1B0cigpLCBtZXRob2QsIE1ha2VUdXBsZShh
KSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgTWV0aG9kLCBjbGFzcyBBLCBjbGFzcyBCPgogIGlu
bGluZSBUYXNrKiBOZXdSdW5uYWJsZU1ldGhvZChNZXRob2QgbWV0aG9kLCBjb25zdCBBJiBhLCBj
b25zdCBCJiBiKSB7CiAgICByZXR1cm4gbmV3IFJ1bm5hYmxlTWV0aG9kPE1ldGhvZCwgVHVwbGUy
PEEsIEI+ID4oCiAgICAgICAgd2Vha19mYWN0b3J5Xy5HZXRXZWFrUHRyKCksIG1ldGhvZCwgTWFr
ZVR1cGxlKGEsIGIpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBNZXRob2QsIGNsYXNzIEEsIGNs
YXNzIEIsIGNsYXNzIEM+CiAgaW5saW5lIFRhc2sqIE5ld1J1bm5hYmxlTWV0aG9kKE1ldGhvZCBt
ZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEEmIGEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEImIGIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEMmIGMpIHsKICAgIHJldHVybiBuZXcgUnVubmFibGVNZXRo
b2Q8TWV0aG9kLCBUdXBsZTM8QSwgQiwgQz4gPigKICAgICAgICB3ZWFrX2ZhY3RvcnlfLkdldFdl
YWtQdHIoKSwgbWV0aG9kLCBNYWtlVHVwbGUoYSwgYiwgYykpOwogIH0KCiAgdGVtcGxhdGUgPGNs
YXNzIE1ldGhvZCwgY2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgQywgY2xhc3MgRD4KICBpbmxpbmUg
VGFzayogTmV3UnVubmFibGVNZXRob2QoTWV0aG9kIG1ldGhvZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgQSYgYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgQiYgYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQyYg
YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRCYgZCkgewogICAgcmV0
dXJuIG5ldyBSdW5uYWJsZU1ldGhvZDxNZXRob2QsIFR1cGxlNDxBLCBCLCBDLCBEPiA+KAogICAg
ICAgIHdlYWtfZmFjdG9yeV8uR2V0V2Vha1B0cigpLCBtZXRob2QsIE1ha2VUdXBsZShhLCBiLCBj
LCBkKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgTWV0aG9kLCBjbGFzcyBBLCBjbGFzcyBCLCBj
bGFzcyBDLCBjbGFzcyBELCBjbGFzcyBFPgogIGlubGluZSBUYXNrKiBOZXdSdW5uYWJsZU1ldGhv
ZChNZXRob2QgbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBB
JiBhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCJiBiLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDJiBjLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBEJiBkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBFJiBlKSB7CiAgICByZXR1cm4gbmV3IFJ1bm5hYmxlTWV0aG9kPE1ldGhvZCwgVHVw
bGU1PEEsIEIsIEMsIEQsIEU+ID4oCiAgICAgICAgd2Vha19mYWN0b3J5Xy5HZXRXZWFrUHRyKCks
IG1ldGhvZCwgTWFrZVR1cGxlKGEsIGIsIGMsIGQsIGUpKTsKICB9CgogIHZvaWQgUmV2b2tlQWxs
KCkgeyB3ZWFrX2ZhY3RvcnlfLkludmFsaWRhdGVXZWFrUHRycygpOyB9CgogIGJvb2wgZW1wdHko
KSBjb25zdCB7IHJldHVybiAhd2Vha19mYWN0b3J5Xy5IYXNXZWFrUHRycygpOyB9CgogcHJvdGVj
dGVkOgogIHRlbXBsYXRlIDxjbGFzcyBNZXRob2QsIGNsYXNzIFBhcmFtcz4KICBjbGFzcyBSdW5u
YWJsZU1ldGhvZCA6IHB1YmxpYyBUYXNrIHsKICAgcHVibGljOgogICAgUnVubmFibGVNZXRob2Qo
Y29uc3QgYmFzZTo6V2Vha1B0cjxUPiYgb2JqLCBNZXRob2QgbWV0aCwgY29uc3QgUGFyYW1zJiBw
YXJhbXMpCiAgICAgICAgOiBvYmpfKG9iaiksCiAgICAgICAgICBtZXRoXyhtZXRoKSwKICAgICAg
ICAgIHBhcmFtc18ocGFyYW1zKSB7CiAgICB9CgogICAgdmlydHVhbCB2b2lkIFJ1bigpIHsKICAg
ICAgaWYgKG9ial8pCiAgICAgICAgRGlzcGF0Y2hUb01ldGhvZChvYmpfLmdldCgpLCBtZXRoXywg
cGFyYW1zXyk7CiAgICB9CgogICBwcml2YXRlOgogICAgYmFzZTo6V2Vha1B0cjxUPiBvYmpfOwog
ICAgTWV0aG9kIG1ldGhfOwogICAgUGFyYW1zIHBhcmFtc187CgogICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFJ1bm5hYmxlTWV0aG9kKTsKICB9OwoKIHByaXZhdGU6CiAgYmFzZTo6V2Vha1B0
ckZhY3Rvcnk8VD4gd2Vha19mYWN0b3J5XzsKfTsKCi8vIEdlbmVyYWwgdGFzayBpbXBsZW1lbnRh
dGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgov
LyBUYXNrIHRvIGRlbGV0ZSBhbiBvYmplY3QKdGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgRGVsZXRl
VGFzayA6IHB1YmxpYyBDYW5jZWxhYmxlVGFzayB7CiBwdWJsaWM6CiAgZXhwbGljaXQgRGVsZXRl
VGFzayhUKiBvYmopIDogb2JqXyhvYmopIHsKICB9CiAgdmlydHVhbCB2b2lkIFJ1bigpIHsKICAg
IGRlbGV0ZSBvYmpfOwogIH0KICB2aXJ0dWFsIHZvaWQgQ2FuY2VsKCkgewogICAgb2JqXyA9IE5V
TEw7CiAgfQogcHJpdmF0ZToKICBUKiBvYmpfOwp9OwoKLy8gVGFzayB0byBSZWxlYXNlKCkgYW4g
b2JqZWN0CnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIFJlbGVhc2VUYXNrIDogcHVibGljIENhbmNl
bGFibGVUYXNrIHsKIHB1YmxpYzoKICBleHBsaWNpdCBSZWxlYXNlVGFzayhUKiBvYmopIDogb2Jq
XyhvYmopIHsKICB9CiAgdmlydHVhbCB2b2lkIFJ1bigpIHsKICAgIGlmIChvYmpfKQogICAgICBv
YmpfLT5SZWxlYXNlKCk7CiAgfQogIHZpcnR1YWwgdm9pZCBDYW5jZWwoKSB7CiAgICBvYmpfID0g
TlVMTDsKICB9CiBwcml2YXRlOgogIFQqIG9ial87Cn07CgovLyBSdW5uYWJsZU1ldGhvZFRyYWl0
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQovLwovLyBUaGlzIHRyYWl0cy1jbGFzcyBpcyB1c2VkIGJ5IFJ1bm5hYmxlTWV0aG9kIHRvIG1h
bmFnZSB0aGUgbGlmZXRpbWUgb2YgdGhlCi8vIGNhbGxlZSBvYmplY3QuICBCeSBkZWZhdWx0LCBp
dCBpcyBhc3N1bWVkIHRoYXQgdGhlIGNhbGxlZSBzdXBwb3J0cyBBZGRSZWYKLy8gYW5kIFJlbGVh
c2UgbWV0aG9kcy4gIEEgcGFydGljdWxhciBjbGFzcyBjYW4gc3BlY2lhbGl6ZSB0aGlzIHRlbXBs
YXRlIHRvCi8vIGRlZmluZSBvdGhlciBsaWZldGltZSBtYW5hZ2VtZW50LiAgRm9yIGV4YW1wbGUs
IGlmIHRoZSBjYWxsZWUgaXMga25vd24gdG8KLy8gbGl2ZSBsb25nZXIgdGhhbiB0aGUgUnVubmFi
bGVNZXRob2Qgb2JqZWN0LCB0aGVuIGEgUnVubmFibGVNZXRob2RUcmFpdHMKLy8gc3RydWN0IGNv
dWxkIGJlIGRlZmluZWQgd2l0aCBlbXB0eSBSZXRhaW5DYWxsZWUgYW5kIFJlbGVhc2VDYWxsZWUg
bWV0aG9kcy4KCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3QgUnVubmFibGVNZXRob2RUcmFpdHMg
ewogIFJ1bm5hYmxlTWV0aG9kVHJhaXRzKCkgewojaWZuZGVmIE5ERUJVRwogICAgb3JpZ2luX3Ro
cmVhZF9pZF8gPSBQbGF0Zm9ybVRocmVhZDo6Q3VycmVudElkKCk7CiNlbmRpZgogIH0KCiAgflJ1
bm5hYmxlTWV0aG9kVHJhaXRzKCkgewojaWZuZGVmIE5ERUJVRwogICAgLy8gSWYgZGVzdHJveWVk
IG9uIGEgc2VwYXJhdGUgdGhyZWFkLCB0aGVuIHdlIGhhZCBiZXR0ZXIgaGF2ZSBiZWVuIHVzaW5n
CiAgICAvLyB0aHJlYWQtc2FmZSByZWZlcmVuY2UgY291bnRpbmchCiAgICBpZiAob3JpZ2luX3Ro
cmVhZF9pZF8gIT0gUGxhdGZvcm1UaHJlYWQ6OkN1cnJlbnRJZCgpKQogICAgICBEQ0hFQ0soVDo6
SW1wbGVtZW50c1RocmVhZFNhZmVSZWZlcmVuY2VDb3VudGluZygpKTsKI2VuZGlmCiAgfQoKICB2
b2lkIFJldGFpbkNhbGxlZShUKiBvYmopIHsKI2lmbmRlZiBOREVCVUcKICAgIC8vIENhdGNoIE5l
d1J1bm5hYmxlTWV0aG9kIGJlaW5nIGNhbGxlZCBpbiBhbiBvYmplY3QncyBjb25zdHJ1Y3Rvci4g
IFRoaXMKICAgIC8vIGlzbid0IHNhZmUgc2luY2UgdGhlIG1ldGhvZCBjYW4gYmUgaW52b2tlZCBi
ZWZvcmUgdGhlIGNvbnN0cnVjdG9yCiAgICAvLyBjb21wbGV0ZXMsIGNhdXNpbmcgdGhlIG9iamVj
dCB0byBiZSBkZWxldGVkLgogICAgb2JqLT5BZGRSZWYoKTsKICAgIG9iai0+UmVsZWFzZSgpOwoj
ZW5kaWYKICAgIG9iai0+QWRkUmVmKCk7CiAgfQoKICB2b2lkIFJlbGVhc2VDYWxsZWUoVCogb2Jq
KSB7CiAgICBvYmotPlJlbGVhc2UoKTsKICB9CgogcHJpdmF0ZToKI2lmbmRlZiBOREVCVUcKICBQ
bGF0Zm9ybVRocmVhZElkIG9yaWdpbl90aHJlYWRfaWRfOwojZW5kaWYKfTsKCi8vIFJ1bm5hYmxl
TWV0aG9kIGFuZCBSdW5uYWJsZUZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi8vCi8vIFJ1bm5hYmxlIG1ldGhvZHMgYXJlIGEgdHlwZSBvZiB0YXNrIHRo
YXQgY2FsbCBhIGZ1bmN0aW9uIG9uIGFuIG9iamVjdCB3aGVuCi8vIHRoZXkgYXJlIHJ1bi4gV2Ug
aW1wbGVtZW50IGJvdGggYW4gb2JqZWN0IGFuZCBhIHNldCBvZiBOZXdSdW5uYWJsZU1ldGhvZCBh
bmQKLy8gTmV3UnVubmFibGVGdW5jdGlvbiBmdW5jdGlvbnMgZm9yIGNvbnZlbmllbmNlLiBUaGVz
ZSBmdW5jdGlvbnMgYXJlCi8vIG92ZXJsb2FkZWQgYW5kIHdpbGwgaW5mZXIgdGhlIHRlbXBsYXRl
IHR5cGVzLCBzaW1wbGlmeWluZyBjYWxsaW5nIGNvZGUuCi8vCi8vIFRoZSB0ZW1wbGF0ZSBkZWZp
bml0aW9ucyBhbGwgdXNlIHRoZSBmb2xsb3dpbmcgbmFtZXM6Ci8vIFQgICAgICAgICAgICAgICAg
LSB0aGUgY2xhc3MgdHlwZSBvZiB0aGUgb2JqZWN0IHlvdSdyZSBzdXBwbHlpbmcKLy8gICAgICAg
ICAgICAgICAgICAgIHRoaXMgaXMgbm90IG5lZWRlZCBmb3IgdGhlIFN0YXRpYyB2ZXJzaW9uIG9m
IHRoZSBjYWxsCi8vIE1ldGhvZC9GdW5jdGlvbiAgLSB0aGUgc2lnbmF0dXJlIG9mIGEgcG9pbnRl
ciB0byB0aGUgbWV0aG9kIG9yIGZ1bmN0aW9uIHlvdQovLyAgICAgICAgICAgICAgICAgICAgd2Fu
dCB0byBjYWxsCi8vIFBhcmFtICAgICAgICAgICAgLSB0aGUgcGFyYW1ldGVyKHMpIHRvIHRoZSBt
ZXRob2QsIHBvc3NpYmx5IHBhY2tlZCBhcyBhIFR1cGxlCi8vIEEgICAgICAgICAgICAgICAgLSB0
aGUgZmlyc3QgcGFyYW1ldGVyIChpZiBhbnkpIHRvIHRoZSBtZXRob2QKLy8gQiAgICAgICAgICAg
ICAgICAtIHRoZSBzZWNvbmQgcGFyYW1ldGVyIChpZiBhbnkpIHRvIHRoZSBtYXRob2QKLy8KLy8g
UHV0IHRoZXNlIGFsbCB0b2dldGhlciBhbmQgeW91IGdldCBhbiBvYmplY3QgdGhhdCBjYW4gY2Fs
bCBhIG1ldGhvZCB3aG9zZQovLyBzaWduYXR1cmUgaXM6Ci8vICAgUiBUOjpNeUZ1bmN0aW9uKFtB
WywgQl1dKQovLwovLyBVc2FnZToKLy8gUG9zdFRhc2soRlJPTV9IRVJFLCBOZXdSdW5uYWJsZU1l
dGhvZChvYmplY3QsICZPYmplY3Q6Om1ldGhvZFssIGFbLCBiXV0pCi8vIFBvc3RUYXNrKEZST01f
SEVSRSwgTmV3UnVubmFibGVGdW5jdGlvbigmZnVuY3Rpb25bLCBhWywgYl1dKQoKLy8gUnVubmFi
bGVNZXRob2QgYW5kIE5ld1J1bm5hYmxlTWV0aG9kIGltcGxlbWVudGF0aW9uIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBNZXRob2QsIGNsYXNzIFBh
cmFtcz4KY2xhc3MgUnVubmFibGVNZXRob2QgOiBwdWJsaWMgQ2FuY2VsYWJsZVRhc2sgewogcHVi
bGljOgogIFJ1bm5hYmxlTWV0aG9kKFQqIG9iaiwgTWV0aG9kIG1ldGgsIGNvbnN0IFBhcmFtcyYg
cGFyYW1zKQogICAgICA6IG9ial8ob2JqKSwgbWV0aF8obWV0aCksIHBhcmFtc18ocGFyYW1zKSB7
CiAgICB0cmFpdHNfLlJldGFpbkNhbGxlZShvYmpfKTsKICB9CgogIH5SdW5uYWJsZU1ldGhvZCgp
IHsKICAgIFJlbGVhc2VDYWxsZWUoKTsKICB9CgogIHZpcnR1YWwgdm9pZCBSdW4oKSB7CiAgICBp
ZiAob2JqXykKICAgICAgRGlzcGF0Y2hUb01ldGhvZChvYmpfLCBtZXRoXywgcGFyYW1zXyk7CiAg
fQoKICB2aXJ0dWFsIHZvaWQgQ2FuY2VsKCkgewogICAgUmVsZWFzZUNhbGxlZSgpOwogIH0KCiBw
cml2YXRlOgogIHZvaWQgUmVsZWFzZUNhbGxlZSgpIHsKICAgIGlmIChvYmpfKSB7CiAgICAgIHRy
YWl0c18uUmVsZWFzZUNhbGxlZShvYmpfKTsKICAgICAgb2JqXyA9IE5VTEw7CiAgICB9CiAgfQoK
ICBUKiBvYmpfOwogIE1ldGhvZCBtZXRoXzsKICBQYXJhbXMgcGFyYW1zXzsKICBSdW5uYWJsZU1l
dGhvZFRyYWl0czxUPiB0cmFpdHNfOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIE1ldGhv
ZD4KaW5saW5lIENhbmNlbGFibGVUYXNrKiBOZXdSdW5uYWJsZU1ldGhvZChUKiBvYmplY3QsIE1l
dGhvZCBtZXRob2QpIHsKICByZXR1cm4gbmV3IFJ1bm5hYmxlTWV0aG9kPFQsIE1ldGhvZCwgVHVw
bGUwPihvYmplY3QsIG1ldGhvZCwgTWFrZVR1cGxlKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgTWV0aG9kLCBjbGFzcyBBPgppbmxpbmUgQ2FuY2VsYWJsZVRhc2sqIE5ld1J1bm5hYmxl
TWV0aG9kKFQqIG9iamVjdCwgTWV0aG9kIG1ldGhvZCwgY29uc3QgQSYgYSkgewogIHJldHVybiBu
ZXcgUnVubmFibGVNZXRob2Q8VCwgTWV0aG9kLCBUdXBsZTE8QT4gPihvYmplY3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVR1cGxlKGEp
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIE1ldGhvZCwgY2xhc3MgQSwgY2xhc3MgQj4K
aW5saW5lIENhbmNlbGFibGVUYXNrKiBOZXdSdW5uYWJsZU1ldGhvZChUKiBvYmplY3QsIE1ldGhv
ZCBtZXRob2QsCmNvbnN0IEEmIGEsIGNvbnN0IEImIGIpIHsKICByZXR1cm4gbmV3IFJ1bm5hYmxl
TWV0aG9kPFQsIE1ldGhvZCwgVHVwbGUyPEEsIEI+ID4ob2JqZWN0LCBtZXRob2QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VUdXBsZShh
LCBiKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBNZXRob2QsIGNsYXNzIEEsIGNsYXNz
IEIsIGNsYXNzIEM+CmlubGluZSBDYW5jZWxhYmxlVGFzayogTmV3UnVubmFibGVNZXRob2QoVCog
b2JqZWN0LCBNZXRob2QgbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBBJiBhLCBjb25zdCBCJiBiLCBjb25zdCBDJiBjKSB7CiAgcmV0dXJuIG5l
dyBSdW5uYWJsZU1ldGhvZDxULCBNZXRob2QsIFR1cGxlMzxBLCBCLCBDPiA+KG9iamVjdCwgbWV0
aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNYWtlVHVwbGUoYSwgYiwgYykpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgTWV0
aG9kLCBjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBDLCBjbGFzcyBEPgppbmxpbmUgQ2FuY2VsYWJs
ZVRhc2sqIE5ld1J1bm5hYmxlTWV0aG9kKFQqIG9iamVjdCwgTWV0aG9kIG1ldGhvZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQSYgYSwgY29uc3QgQiYg
YiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQyYgYywg
Y29uc3QgRCYgZCkgewogIHJldHVybiBuZXcgUnVubmFibGVNZXRob2Q8VCwgTWV0aG9kLCBUdXBs
ZTQ8QSwgQiwgQywgRD4gPihvYmplY3QsIG1ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVR1cGxlKGEsIGIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjLCBkKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBNZXRob2QsIGNsYXNz
IEEsIGNsYXNzIEIsIGNsYXNzIEMsIGNsYXNzIEQsIGNsYXNzIEU+CmlubGluZSBDYW5jZWxhYmxl
VGFzayogTmV3UnVubmFibGVNZXRob2QoVCogb2JqZWN0LCBNZXRob2QgbWV0aG9kLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBJiBhLCBjb25zdCBCJiBi
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDJiBjLCBj
b25zdCBEJiBkLCBjb25zdCBFJiBlKSB7CiAgcmV0dXJuIG5ldyBSdW5uYWJsZU1ldGhvZDxULAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVHVwbGU1PEEsIEIsIEMsIEQsIEU+ID4ob2JqZWN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVR1cGxlKGEsIGIsIGMsIGQs
IGUpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIE1ldGhvZCwgY2xhc3MgQSwgY2xhc3Mg
QiwgY2xhc3MgQywgY2xhc3MgRCwgY2xhc3MgRSwKICAgICAgICAgIGNsYXNzIEY+CmlubGluZSBD
YW5jZWxhYmxlVGFzayogTmV3UnVubmFibGVNZXRob2QoVCogb2JqZWN0LCBNZXRob2QgbWV0aG9k
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBJiBhLCBj
b25zdCBCJiBiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBDJiBjLCBjb25zdCBEJiBkLCBjb25zdCBFJiBlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGJiBmKSB7CiAgcmV0dXJuIG5ldyBSdW5uYWJsZU1ldGhv
ZDxULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0aG9kLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVHVwbGU2PEEsIEIsIEMsIEQsIEUsIEY+ID4ob2JqZWN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVR1
cGxlKGEsIGIsIGMsIGQsIGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZikpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xh
c3MgTWV0aG9kLCBjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBDLCBjbGFzcyBELCBjbGFzcyBFLAog
ICAgICAgICAgY2xhc3MgRiwgY2xhc3MgRz4KaW5saW5lIENhbmNlbGFibGVUYXNrKiBOZXdSdW5u
YWJsZU1ldGhvZChUKiBvYmplY3QsIE1ldGhvZCBtZXRob2QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQSYgYSwgY29uc3QgQiYgYiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDJiBjLCBjb25zdCBEJiBkLCBjb25z
dCBFJiBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEYm
IGYsIGNvbnN0IEcmIGcpIHsKICByZXR1cm4gbmV3IFJ1bm5hYmxlTWV0aG9kPFQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
dXBsZTc8QSwgQiwgQywgRCwgRSwgRiwgRz4gPihvYmplY3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlVHVwbGUo
YSwgYiwgYywgZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlLCBmLCBnKSk7Cn0KCi8vIFJ1bm5hYmxlRnVuY3Rpb24g
YW5kIE5ld1J1bm5hYmxlRnVuY3Rpb24gaW1wbGVtZW50YXRpb24gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCgp0ZW1wbGF0ZSA8Y2xhc3MgRnVuY3Rpb24sIGNsYXNzIFBhcmFtcz4KY2xhc3MgUnVubmFi
bGVGdW5jdGlvbiA6IHB1YmxpYyBDYW5jZWxhYmxlVGFzayB7CiBwdWJsaWM6CiAgUnVubmFibGVG
dW5jdGlvbihGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgUGFyYW1zJiBwYXJhbXMpCiAgICAgIDog
ZnVuY3Rpb25fKGZ1bmN0aW9uKSwgcGFyYW1zXyhwYXJhbXMpIHsKICB9CgogIH5SdW5uYWJsZUZ1
bmN0aW9uKCkgewogIH0KCiAgdmlydHVhbCB2b2lkIFJ1bigpIHsKICAgIGlmIChmdW5jdGlvbl8p
CiAgICAgIERpc3BhdGNoVG9GdW5jdGlvbihmdW5jdGlvbl8sIHBhcmFtc18pOwogIH0KCiAgdmly
dHVhbCB2b2lkIENhbmNlbCgpIHsKICB9CgogcHJpdmF0ZToKICBGdW5jdGlvbiBmdW5jdGlvbl87
CiAgUGFyYW1zIHBhcmFtc187Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgRnVuY3Rpb24+CmlubGluZSBD
YW5jZWxhYmxlVGFzayogTmV3UnVubmFibGVGdW5jdGlvbihGdW5jdGlvbiBmdW5jdGlvbikgewog
IHJldHVybiBuZXcgUnVubmFibGVGdW5jdGlvbjxGdW5jdGlvbiwgVHVwbGUwPihmdW5jdGlvbiwg
TWFrZVR1cGxlKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRnVuY3Rpb24sIGNsYXNzIEE+CmlubGlu
ZSBDYW5jZWxhYmxlVGFzayogTmV3UnVubmFibGVGdW5jdGlvbihGdW5jdGlvbiBmdW5jdGlvbiwg
Y29uc3QgQSYgYSkgewogIHJldHVybiBuZXcgUnVubmFibGVGdW5jdGlvbjxGdW5jdGlvbiwgVHVw
bGUxPEE+ID4oZnVuY3Rpb24sIE1ha2VUdXBsZShhKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBGdW5j
dGlvbiwgY2xhc3MgQSwgY2xhc3MgQj4KaW5saW5lIENhbmNlbGFibGVUYXNrKiBOZXdSdW5uYWJs
ZUZ1bmN0aW9uKEZ1bmN0aW9uIGZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgQSYgYSwgY29uc3QgQiYgYikgewogIHJldHVybiBuZXcgUnVu
bmFibGVGdW5jdGlvbjxGdW5jdGlvbiwgVHVwbGUyPEEsIEI+ID4oZnVuY3Rpb24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlVHVwbGUo
YSwgYikpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRnVuY3Rpb24sIGNsYXNzIEEsIGNsYXNzIEIsIGNs
YXNzIEM+CmlubGluZSBDYW5jZWxhYmxlVGFzayogTmV3UnVubmFibGVGdW5jdGlvbihGdW5jdGlv
biBmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEEmIGEsIGNvbnN0IEImIGIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBDJiBjKSB7CiAgcmV0dXJuIG5ldyBSdW5uYWJsZUZ1bmN0aW9uPEZ1bmN0
aW9uLCBUdXBsZTM8QSwgQiwgQz4gPihmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VUdXBsZShhLCBiLCBjKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBGdW5jdGlvbiwgY2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgQywgY2xh
c3MgRD4KaW5saW5lIENhbmNlbGFibGVUYXNrKiBOZXdSdW5uYWJsZUZ1bmN0aW9uKEZ1bmN0aW9u
IGZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQSYgYSwgY29uc3QgQiYgYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEMmIGMsIGNvbnN0IEQmIGQpIHsKICByZXR1cm4gbmV3IFJ1bm5hYmxlRnVu
Y3Rpb248RnVuY3Rpb24sIFR1cGxlNDxBLCBCLCBDLCBEPiA+KGZ1bmN0aW9uLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZVR1
cGxlKGEsIGIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYywgZCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRnVuY3Rp
b24sIGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIEMsIGNsYXNzIEQsIGNsYXNzIEU+CmlubGluZSBD
YW5jZWxhYmxlVGFzayogTmV3UnVubmFibGVGdW5jdGlvbihGdW5jdGlvbiBmdW5jdGlvbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEEmIGEsIGNvbnN0
IEImIGIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBD
JiBjLCBjb25zdCBEJiBkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRSYgZSkgewogIHJldHVybiBuZXcgUnVubmFibGVGdW5jdGlvbjxGdW5jdGlvbiwg
VHVwbGU1PEEsIEIsIEMsIEQsIEU+ID4oZnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlVHVwbGUoYSwgYiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjLCBkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUpKTsKfQoKLy8gQ2FsbGJh
Y2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLy8KLy8gQSBDYWxsYmFjayBpcyBsaWtlIGEgVGFzayBidXQgd2l0aCB1
bmJvdW5kIHBhcmFtZXRlcnMuIEl0IGlzIGJhc2ljYWxseSBhbgovLyBvYmplY3Qtb3JpZW50ZWQg
ZnVuY3Rpb24gcG9pbnRlci4KLy8KLy8gQ2FsbGJhY2tzIGFyZSBkZXNpZ25lZCB0byB3b3JrIHdp
dGggVHVwbGVzLiAgQSBzZXQgb2YgaGVscGVyIGZ1bmN0aW9ucyBhbmQKLy8gY2xhc3NlcyBpcyBw
cm92aWRlZCB0byBoaWRlIHRoZSBUdXBsZSBkZXRhaWxzIGZyb20gdGhlIGNvbnN1bWVyLiAgQ2xp
ZW50Ci8vIGNvZGUgd2lsbCBnZW5lcmFsbHkgd29yayB3aXRoIHRoZSBDYWxsYmFja1J1bm5lciBi
YXNlIGNsYXNzLCB3aGljaCBtZXJlbHkKLy8gcHJvdmlkZXMgYSBSdW4gbWV0aG9kIGFuZCBpcyBy
ZXR1cm5lZCBieSB0aGUgTmV3KiBmdW5jdGlvbnMuIFRoaXMgYWxsb3dzCi8vIHVzZXJzIHRvIG5v
dCBjYXJlIHdoaWNoIHR5cGUgb2YgY2xhc3MgaW1wbGVtZW50cyB0aGUgY2FsbGJhY2ssIG9ubHkg
dGhhdCBpdAovLyBoYXMgYSBjZXJ0YWluIG51bWJlciBhbmQgdHlwZSBvZiBhcmd1bWVudHMuCi8v
Ci8vIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGlzIGRvbmUgYnkgQ2FsbGJhY2tJbXBsLCB3
aGljaCBpbmhlcml0cwovLyBDYWxsYmFja1N0b3JhZ2UgdG8gc3RvcmUgdGhlIGRhdGEuIFRoaXMg
YWxsb3dzIHRoZSBzdG9yYWdlIG9mIHRoZSBkYXRhCi8vIChyZXF1aXJpbmcgdGhlIGNsYXNzIHR5
cGUgVCkgdG8gYmUgaGlkZGVuIGZyb20gdXNlcnMsIHdobyB3aWxsIHdhbnQgdG8gY2FsbAovLyB0
aGlzIHJlZ2FyZGxlc3Mgb2YgdGhlIGltcGxlbWVudG9yJ3MgdHlwZSBULgovLwovLyBOb3RlIHRo
YXQgY2FsbGJhY2tzIGN1cnJlbnRseSBoYXZlIG5vIGZhY2lsaXR5IGZvciBjYW5jZWxsaW5nIG9y
IGFiYW5kb25pbmcKLy8gdGhlbS4gV2UgY3VycmVudGx5IGhhbmRsZSB0aGlzIGF0IGEgaGlnaGVy
IGxldmVsIGZvciBjYXNlcyB3aGVyZSB0aGlzIGlzCi8vIG5lY2Vzc2FyeS4gVGhlIHBvaW50ZXIg
aW4gYSBjYWxsYmFjayBtdXN0IHJlbWFpbiB2YWxpZCB1bnRpbCB0aGUgY2FsbGJhY2sKLy8gaXMg
bWFkZS4KLy8KLy8gTGlrZSBUYXNrLCB0aGUgY2FsbGJhY2sgZXhlY3V0b3IgaXMgcmVzcG9uc2li
bGUgZm9yIGRlbGV0aW5nIHRoZSBjYWxsYmFjawovLyBwb2ludGVyIG9uY2UgdGhlIGNhbGxiYWNr
IGhhcyBleGVjdXRlZC4KLy8KLy8gRXhhbXBsZSBjbGllbnQgdXNhZ2U6Ci8vICAgdm9pZCBPYmpl
Y3Q6OkRvU3R1ZmYoaW50LCBzdHJpbmcpOwovLyAgIENhbGxiYWNrMjxpbnQsIHN0cmluZz46OlR5
cGUqIGNhbGxiYWNrID0KLy8gICAgICAgTmV3Q2FsbGJhY2sob2JqLCAmT2JqZWN0OjpEb1N0dWZm
KTsKLy8gICBjYWxsYmFjay0+UnVuKDUsIHN0cmluZygiaGVsbG8iKSk7Ci8vICAgZGVsZXRlIGNh
bGxiYWNrOwovLyBvciwgZXF1aXZhbGVudGx5LCB1c2luZyB0dXBsZXMgZGlyZWN0bHk6Ci8vICAg
Q2FsbGJhY2tSdW5uZXI8VHVwbGUyPGludCwgc3RyaW5nPiA+KiBjYWxsYmFjayA9Ci8vICAgICAg
IE5ld0NhbGxiYWNrKG9iaiwgJk9iamVjdDo6RG9TdHVmZik7Ci8vICAgY2FsbGJhY2stPlJ1bldp
dGhQYXJhbXMoTWFrZVR1cGxlKDUsIHN0cmluZygiaGVsbG8iKSkpOwovLwovLyBUaGVyZSBpcyBh
bHNvIGEgMC1hcmdzIHZlcnNpb24gdGhhdCByZXR1cm5zIGEgdmFsdWUuICBFeGFtcGxlOgovLyAg
IGludCBPYmplY3Q6OkdldE5leHRJbnQoKTsKLy8gICBDYWxsYmFja1dpdGhSZXR1cm5WYWx1ZTxp
bnQ+OjpUeXBlKiBjYWxsYmFjayA9Ci8vICAgICAgIE5ld0NhbGxiYWNrV2l0aFJldHVyblZhbHVl
KG9iaiwgJk9iamVjdDo6R2V0TmV4dEludCk7Ci8vICAgaW50IG5leHRfaW50ID0gY2FsbGJhY2st
PlJ1bigpOwovLyAgIGRlbGV0ZSBjYWxsYmFjazsKCi8vIEJhc2UgZm9yIGFsbCBDYWxsYmFja3Mg
dGhhdCBoYW5kbGVzIHN0b3JhZ2Ugb2YgdGhlIHBvaW50ZXJzLgp0ZW1wbGF0ZSA8Y2xhc3MgVCwg
dHlwZW5hbWUgTWV0aG9kPgpjbGFzcyBDYWxsYmFja1N0b3JhZ2UgewogcHVibGljOgogIENhbGxi
YWNrU3RvcmFnZShUKiBvYmosIE1ldGhvZCBtZXRoKSA6IG9ial8ob2JqKSwgbWV0aF8obWV0aCkg
ewogIH0KCiBwcm90ZWN0ZWQ6CiAgVCogb2JqXzsKICBNZXRob2QgbWV0aF87Cn07CgovLyBJbnRl
cmZhY2UgdGhhdCBpcyBleHBvc2VkIHRvIHRoZSBjb25zdW1lciwgdGhhdCBkb2VzIHRoZSBhY3R1
YWwgY2FsbGluZwovLyBvZiB0aGUgbWV0aG9kLgp0ZW1wbGF0ZSA8dHlwZW5hbWUgUGFyYW1zPgpj
bGFzcyBDYWxsYmFja1J1bm5lciB7CiBwdWJsaWM6CiAgdHlwZWRlZiBQYXJhbXMgVHVwbGVUeXBl
OwoKICB2aXJ0dWFsIH5DYWxsYmFja1J1bm5lcigpIHt9CiAgdmlydHVhbCB2b2lkIFJ1bldpdGhQ
YXJhbXMoY29uc3QgUGFyYW1zJiBwYXJhbXMpID0gMDsKCiAgLy8gQ29udmVuaWVuY2UgZnVuY3Rp
b25zIHNvIGNhbGxlcnMgZG9uJ3QgaGF2ZSB0byBkZWFsIHdpdGggVHVwbGVzLgogIGlubGluZSB2
b2lkIFJ1bigpIHsKICAgIFJ1bldpdGhQYXJhbXMoVHVwbGUwKCkpOwogIH0KCiAgdGVtcGxhdGUg
PHR5cGVuYW1lIEFyZzE+CiAgaW5saW5lIHZvaWQgUnVuKGNvbnN0IEFyZzEmIGEpIHsKICAgIFJ1
bldpdGhQYXJhbXMoUGFyYW1zKGEpKTsKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0
eXBlbmFtZSBBcmcyPgogIGlubGluZSB2b2lkIFJ1bihjb25zdCBBcmcxJiBhLCBjb25zdCBBcmcy
JiBiKSB7CiAgICBSdW5XaXRoUGFyYW1zKFBhcmFtcyhhLCBiKSk7CiAgfQoKICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMz4KICBpbmxpbmUgdm9p
ZCBSdW4oY29uc3QgQXJnMSYgYSwgY29uc3QgQXJnMiYgYiwgY29uc3QgQXJnMyYgYykgewogICAg
UnVuV2l0aFBhcmFtcyhQYXJhbXMoYSwgYiwgYykpOwogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1l
IEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQ+CiAgaW5s
aW5lIHZvaWQgUnVuKGNvbnN0IEFyZzEmIGEsIGNvbnN0IEFyZzImIGIsIGNvbnN0IEFyZzMmIGMs
IGNvbnN0IEFyZzQmIGQpIHsKICAgIFJ1bldpdGhQYXJhbXMoUGFyYW1zKGEsIGIsIGMsIGQpKTsK
ICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBB
cmczLAogICAgICAgICAgICB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1PgogIGlubGluZSB2
b2lkIFJ1bihjb25zdCBBcmcxJiBhLCBjb25zdCBBcmcyJiBiLCBjb25zdCBBcmczJiBjLAogICAg
ICAgICAgICAgICAgICBjb25zdCBBcmc0JiBkLCBjb25zdCBBcmc1JiBlKSB7CiAgICBSdW5XaXRo
UGFyYW1zKFBhcmFtcyhhLCBiLCBjLCBkLCBlKSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIFQs
IHR5cGVuYW1lIE1ldGhvZCwgdHlwZW5hbWUgUGFyYW1zPgpjbGFzcyBDYWxsYmFja0ltcGwgOiBw
dWJsaWMgQ2FsbGJhY2tTdG9yYWdlPFQsIE1ldGhvZD4sCiAgICAgICAgICAgICAgICAgICAgIHB1
YmxpYyBDYWxsYmFja1J1bm5lcjxQYXJhbXM+IHsKIHB1YmxpYzoKICBDYWxsYmFja0ltcGwoVCog
b2JqLCBNZXRob2QgbWV0aCkgOiBDYWxsYmFja1N0b3JhZ2U8VCwgTWV0aG9kPihvYmosIG1ldGgp
IHsKICB9CiAgdmlydHVhbCB2b2lkIFJ1bldpdGhQYXJhbXMoY29uc3QgUGFyYW1zJiBwYXJhbXMp
IHsKICAgIC8vIHVzZSAidGhpcy0+IiB0byBmb3JjZSBDKysgdG8gbG9vayBpbnNpZGUgb3VyIHRl
bXBsYXRpemVkIGJhc2UgY2xhc3M7IHNlZQogICAgLy8gRWZmZWN0aXZlIEMrKywgM3JkIEVkLCBp
dGVtIDQzLCBwMjEwIGZvciBkZXRhaWxzLgogICAgRGlzcGF0Y2hUb01ldGhvZCh0aGlzLT5vYmpf
LCB0aGlzLT5tZXRoXywgcGFyYW1zKTsKICB9Cn07CgovLyAwLWFyZyBpbXBsZW1lbnRhdGlvbgpz
dHJ1Y3QgQ2FsbGJhY2swIHsKICB0eXBlZGVmIENhbGxiYWNrUnVubmVyPFR1cGxlMD4gVHlwZTsK
fTsKCnRlbXBsYXRlIDxjbGFzcyBUPgp0eXBlbmFtZSBDYWxsYmFjazA6OlR5cGUqIE5ld0NhbGxi
YWNrKFQqIG9iamVjdCwgdm9pZCAoVDo6Km1ldGhvZCkoKSkgewogIHJldHVybiBuZXcgQ2FsbGJh
Y2tJbXBsPFQsIHZvaWQgKFQ6OiopKCksIFR1cGxlMCA+KG9iamVjdCwgbWV0aG9kKTsKfQoKLy8g
MS1hcmcgaW1wbGVtZW50YXRpb24KdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzE+CnN0cnVjdCBDYWxs
YmFjazEgewogIHR5cGVkZWYgQ2FsbGJhY2tSdW5uZXI8VHVwbGUxPEFyZzE+ID4gVHlwZTsKfTsK
CnRlbXBsYXRlIDxjbGFzcyBULCB0eXBlbmFtZSBBcmcxPgp0eXBlbmFtZSBDYWxsYmFjazE8QXJn
MT46OlR5cGUqIE5ld0NhbGxiYWNrKFQqIG9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2b2lkIChUOjoqbWV0aG9kKShBcmcxKSkgewogIHJldHVybiBu
ZXcgQ2FsbGJhY2tJbXBsPFQsIHZvaWQgKFQ6OiopKEFyZzEpLCBUdXBsZTE8QXJnMT4gPihvYmpl
Y3QsIG1ldGhvZCk7Cn0KCi8vIDItYXJnIGltcGxlbWVudGF0aW9uCnRlbXBsYXRlIDx0eXBlbmFt
ZSBBcmcxLCB0eXBlbmFtZSBBcmcyPgpzdHJ1Y3QgQ2FsbGJhY2syIHsKICB0eXBlZGVmIENhbGxi
YWNrUnVubmVyPFR1cGxlMjxBcmcxLCBBcmcyPiA+IFR5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMj4KdHlwZW5hbWUgQ2FsbGJhY2syPEFyZzEs
IEFyZzI+OjpUeXBlKiBOZXdDYWxsYmFjaygKICAgIFQqIG9iamVjdCwKICAgIHZvaWQgKFQ6Oipt
ZXRob2QpKEFyZzEsIEFyZzIpKSB7CiAgcmV0dXJuIG5ldyBDYWxsYmFja0ltcGw8VCwgdm9pZCAo
VDo6KikoQXJnMSwgQXJnMiksCiAgICAgIFR1cGxlMjxBcmcxLCBBcmcyPiA+KG9iamVjdCwgbWV0
aG9kKTsKfQoKLy8gMy1hcmcgaW1wbGVtZW50YXRpb24KdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEs
IHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzM+CnN0cnVjdCBDYWxsYmFjazMgewogIHR5cGVk
ZWYgQ2FsbGJhY2tSdW5uZXI8VHVwbGUzPEFyZzEsIEFyZzIsIEFyZzM+ID4gVHlwZTsKfTsKCnRl
bXBsYXRlIDxjbGFzcyBULCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBB
cmczPgp0eXBlbmFtZSBDYWxsYmFjazM8QXJnMSwgQXJnMiwgQXJnMz46OlR5cGUqIE5ld0NhbGxi
YWNrKAogICAgVCogb2JqZWN0LAogICAgdm9pZCAoVDo6Km1ldGhvZCkoQXJnMSwgQXJnMiwgQXJn
MykpIHsKICByZXR1cm4gbmV3IENhbGxiYWNrSW1wbDxULCAgdm9pZCAoVDo6KikoQXJnMSwgQXJn
MiwgQXJnMyksCiAgICAgIFR1cGxlMzxBcmcxLCBBcmcyLCBBcmczPiA+KG9iamVjdCwgbWV0aG9k
KTsKfQoKLy8gNC1hcmcgaW1wbGVtZW50YXRpb24KdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5
cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQ+CnN0cnVjdCBDYWxsYmFj
azQgewogIHR5cGVkZWYgQ2FsbGJhY2tSdW5uZXI8VHVwbGU0PEFyZzEsIEFyZzIsIEFyZzMsIEFy
ZzQ+ID4gVHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBULCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFt
ZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0Pgp0eXBlbmFtZSBDYWxsYmFjazQ8
QXJnMSwgQXJnMiwgQXJnMywgQXJnND46OlR5cGUqIE5ld0NhbGxiYWNrKAogICAgVCogb2JqZWN0
LAogICAgdm9pZCAoVDo6Km1ldGhvZCkoQXJnMSwgQXJnMiwgQXJnMywgQXJnNCkpIHsKICByZXR1
cm4gbmV3IENhbGxiYWNrSW1wbDxULCB2b2lkIChUOjoqKShBcmcxLCBBcmcyLCBBcmczLCBBcmc0
KSwKICAgICAgVHVwbGU0PEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQ+ID4ob2JqZWN0LCBtZXRob2Qp
Owp9CgovLyA1LWFyZyBpbXBsZW1lbnRhdGlvbgp0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlw
ZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywKICAgICAgICAgIHR5cGVuYW1lIEFyZzQsIHR5cGVu
YW1lIEFyZzU+CnN0cnVjdCBDYWxsYmFjazUgewogIHR5cGVkZWYgQ2FsbGJhY2tSdW5uZXI8VHVw
bGU1PEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzU+ID4gVHlwZTsKfTsKCnRlbXBsYXRlIDxj
bGFzcyBULCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLAogICAgICAgICAgdHlwZW5hbWUg
QXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNT4KdHlwZW5hbWUgQ2FsbGJhY2s1PEFy
ZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzU+OjpUeXBlKiBOZXdDYWxsYmFjaygKICAgIFQqIG9i
amVjdCwKICAgIHZvaWQgKFQ6OiptZXRob2QpKEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUp
KSB7CiAgcmV0dXJuIG5ldyBDYWxsYmFja0ltcGw8VCwgdm9pZCAoVDo6KikoQXJnMSwgQXJnMiwg
QXJnMywgQXJnNCwgQXJnNSksCiAgICAgIFR1cGxlNTxBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBB
cmc1PiA+KG9iamVjdCwgbWV0aG9kKTsKfQoKLy8gQW4gVW5ib3VuZE1ldGhvZCBpcyBhIHdyYXBw
ZXIgZm9yIGEgbWV0aG9kIHdoZXJlIHRoZSBhY3R1YWwgb2JqZWN0IGlzCi8vIHByb3ZpZGVkIGF0
IFJ1biBkaXNwYXRjaCB0aW1lLgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgTWV0aG9kLCBjbGFz
cyBQYXJhbXM+CmNsYXNzIFVuYm91bmRNZXRob2QgewogcHVibGljOgogIFVuYm91bmRNZXRob2Qo
TWV0aG9kIG0sIFBhcmFtcyBwKSA6IG1fKG0pLCBwXyhwKSB7fQogIHZvaWQgUnVuKFQqIG9iaikg
Y29uc3QgewogICAgRGlzcGF0Y2hUb01ldGhvZChvYmosIG1fLCBwXyk7CiAgfQogcHJpdmF0ZToK
ICBNZXRob2QgbV87CiAgUGFyYW1zIHBfOwp9OwoKLy8gUmV0dXJuIHZhbHVlIGltcGxlbWVudGF0
aW9uIHdpdGggbm8gYXJncy4KdGVtcGxhdGUgPHR5cGVuYW1lIFJldHVyblZhbHVlPgpzdHJ1Y3Qg
Q2FsbGJhY2tXaXRoUmV0dXJuVmFsdWUgewogIGNsYXNzIFR5cGUgewogICBwdWJsaWM6CiAgICB2
aXJ0dWFsIFJldHVyblZhbHVlIFJ1bigpID0gMDsKICB9Owp9OwoKdGVtcGxhdGUgPGNsYXNzIFQs
IHR5cGVuYW1lIE1ldGhvZCwgdHlwZW5hbWUgUmV0dXJuVmFsdWU+CmNsYXNzIENhbGxiYWNrV2l0
aFJldHVyblZhbHVlSW1wbAogICAgOiBwdWJsaWMgQ2FsbGJhY2tTdG9yYWdlPFQsIE1ldGhvZD4s
CiAgICAgIHB1YmxpYyBDYWxsYmFja1dpdGhSZXR1cm5WYWx1ZTxSZXR1cm5WYWx1ZT46OlR5cGUg
ewogcHVibGljOgogIENhbGxiYWNrV2l0aFJldHVyblZhbHVlSW1wbChUKiBvYmosIE1ldGhvZCBt
ZXRoKQogICAgICA6IENhbGxiYWNrU3RvcmFnZTxULCBNZXRob2Q+KG9iaiwgbWV0aCkge30KCiAg
dmlydHVhbCBSZXR1cm5WYWx1ZSBSdW4oKSB7CiAgICByZXR1cm4gKHRoaXMtPm9ial8tPioodGhp
cy0+bWV0aF8pKSgpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBULCB0eXBlbmFtZSBSZXR1cm5W
YWx1ZT4KdHlwZW5hbWUgQ2FsbGJhY2tXaXRoUmV0dXJuVmFsdWU8UmV0dXJuVmFsdWU+OjpUeXBl
KgpOZXdDYWxsYmFja1dpdGhSZXR1cm5WYWx1ZShUKiBvYmplY3QsIFJldHVyblZhbHVlIChUOjoq
bWV0aG9kKSgpKSB7CiAgcmV0dXJuIG5ldyBDYWxsYmFja1dpdGhSZXR1cm5WYWx1ZUltcGw8VCwg
UmV0dXJuVmFsdWUgKFQ6OiopKCksIFJldHVyblZhbHVlPigKICAgICAgb2JqZWN0LCBtZXRob2Qp
Owp9CgoKI2VuZGlmICAvLyBCQVNFX1RBU0tfSF8KCiNpZm5kZWYgQkFTRV9BVF9FWElUX0hfCiNk
ZWZpbmUgQkFTRV9BVF9FWElUX0hfCgoKbmFtZXNwYWNlIGJhc2UgewoKLy8gVGhpcyBjbGFzcyBw
cm92aWRlcyBhIGZhY2lsaXR5IHNpbWlsYXIgdG8gdGhlIENSVCBhdGV4aXQoKSwgZXhjZXB0IHRo
YXQKLy8gd2UgY29udHJvbCB3aGVuIHRoZSBjYWxsYmFja3MgYXJlIGV4ZWN1dGVkLiBVbmRlciBX
aW5kb3dzIGZvciBhIERMTCB0aGV5Ci8vIGhhcHBlbiBhdCBhIHJlYWxseSBiYWQgdGltZSBhbmQg
dW5kZXIgdGhlIGxvYWRlciBsb2NrLiBUaGlzIGZhY2lsaXR5IGlzCi8vIG1vc3RseSB1c2VkIGJ5
IGJhc2U6OlNpbmdsZXRvbi4KLy8KLy8gVGhlIHVzYWdlIGlzIHNpbXBsZS4gRWFybHkgaW4gdGhl
IG1haW4oKSBvciBXaW5NYWluKCkgc2NvcGUgY3JlYXRlIGFuCi8vIEF0RXhpdE1hbmFnZXIgb2Jq
ZWN0IG9uIHRoZSBzdGFjazoKLy8gaW50IG1haW4oLi4uKSB7Ci8vICAgIGJhc2U6OkF0RXhpdE1h
bmFnZXIgZXhpdF9tYW5hZ2VyOwovLwovLyB9Ci8vIFdoZW4gdGhlIGV4aXRfbWFuYWdlciBvYmpl
Y3QgZ29lcyBvdXQgb2Ygc2NvcGUsIGFsbCB0aGUgcmVnaXN0ZXJlZAovLyBjYWxsYmFja3MgYW5k
IHNpbmdsZXRvbiBkZXN0cnVjdG9ycyB3aWxsIGJlIGNhbGxlZC4KCmNsYXNzIEF0RXhpdE1hbmFn
ZXI7CnN0YXRpYyBBdEV4aXRNYW5hZ2VyKiBnX3RvcF9tYW5hZ2VyID0gTlVMTDsKCmNsYXNzIEF0
RXhpdE1hbmFnZXIgewogcHJvdGVjdGVkOgogIC8vIFRoaXMgY29uc3RydWN0b3Igd2lsbCBhbGxv
dyB0aGlzIGluc3RhbmNlIG9mIEF0RXhpdE1hbmFnZXIgdG8gYmUgY3JlYXRlZAogIC8vIGV2ZW4g
aWYgb25lIGFscmVhZHkgZXhpc3RzLiAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGZvciB0ZXN0
aW5nIQogIC8vIEF0RXhpdE1hbmFnZXJzIGFyZSBrZXB0IG9uIGEgZ2xvYmFsIHN0YWNrLCBhbmQg
aXQgd2lsbCBiZSByZW1vdmVkIGR1cmluZwogIC8vIGRlc3RydWN0aW9uLiAgVGhpcyBhbGxvd3Mg
eW91IHRvIHNoYWRvdyBhbm90aGVyIEF0RXhpdE1hbmFnZXIuCiAgQXRFeGl0TWFuYWdlcihib29s
IHNoYWRvdyk7CgogcHVibGljOgogIHR5cGVkZWYgdm9pZCAoKkF0RXhpdENhbGxiYWNrVHlwZSko
dm9pZCopOwoKICBBdEV4aXRNYW5hZ2VyKCk7CgogIC8vIFRoZSBkdG9yIGNhbGxzIGFsbCB0aGUg
cmVnaXN0ZXJlZCBjYWxsYmFja3MuIERvIG5vdCB0cnkgdG8gcmVnaXN0ZXIgbW9yZQogIC8vIGNh
bGxiYWNrcyBhZnRlciB0aGlzIHBvaW50LgogIH5BdEV4aXRNYW5hZ2VyKCk7CgogIC8vIFJlZ2lz
dGVycyB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhdCBleGl0LiBUaGUgcHJv
dG90eXBlIG9mCiAgLy8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIHZvaWQgZnVuYygpLgogIHN0
YXRpYyB2b2lkIFJlZ2lzdGVyQ2FsbGJhY2soQXRFeGl0Q2FsbGJhY2tUeXBlIGZ1bmMsIHZvaWQq
IHBhcmFtKSB7CiAgaWYgKCFnX3RvcF9tYW5hZ2VyKSB7CiAgICAvL05PVFJFQUNIRUQoKSA8PCAi
VHJpZWQgdG8gUmVnaXN0ZXJDYWxsYmFjayB3aXRob3V0IGFuIEF0RXhpdE1hbmFnZXIiOwogICAg
cmV0dXJuOwogIH0KCiAgRENIRUNLKGZ1bmMpOwoKICBBdXRvTG9jayBsb2NrKGdfdG9wX21hbmFn
ZXItPmxvY2tfKTsKICBnX3RvcF9tYW5hZ2VyLT5zdGFja18ucHVzaChDYWxsYmFja0FuZFBhcmFt
KGZ1bmMsIHBhcmFtKSk7Cn0KCgoKICAvLyBDYWxscyB0aGUgZnVuY3Rpb25zIHJlZ2lzdGVyZWQg
d2l0aCBSZWdpc3RlckNhbGxiYWNrIGluIExJRk8gb3JkZXIuIEl0CiAgLy8gaXMgcG9zc2libGUg
dG8gcmVnaXN0ZXIgbmV3IGNhbGxiYWNrcyBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCiAg
c3RhdGljIHZvaWQgUHJvY2Vzc0NhbGxiYWNrc05vdygpOwoKIHByaXZhdGU6CiAgc3RydWN0IENh
bGxiYWNrQW5kUGFyYW0gewogICAgQ2FsbGJhY2tBbmRQYXJhbShBdEV4aXRDYWxsYmFja1R5cGUg
ZnVuYywgdm9pZCogcGFyYW0pCiAgICAgICAgOiBmdW5jXyhmdW5jKSwgcGFyYW1fKHBhcmFtKSB7
IH0KICAgIEF0RXhpdENhbGxiYWNrVHlwZSBmdW5jXzsKICAgIHZvaWQqIHBhcmFtXzsKICB9OwoK
ICBMb2NrIGxvY2tfOwogIHN0ZDo6c3RhY2s8Q2FsbGJhY2tBbmRQYXJhbT4gc3RhY2tfOwogIEF0
RXhpdE1hbmFnZXIqIG5leHRfbWFuYWdlcl87ICAvLyBTdGFjayBvZiBtYW5hZ2VycyB0byBhbGxv
dyBzaGFkb3dpbmcuCgogIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihBdEV4aXRNYW5hZ2VyKTsK
fTsKCiNpZiBkZWZpbmVkKFVOSVRfVEVTVCkKY2xhc3MgU2hhZG93aW5nQXRFeGl0TWFuYWdlciA6
IHB1YmxpYyBBdEV4aXRNYW5hZ2VyIHsKIHB1YmxpYzoKICBTaGFkb3dpbmdBdEV4aXRNYW5hZ2Vy
KCkgOiBBdEV4aXRNYW5hZ2VyKHRydWUpIHt9Cn07CiNlbmRpZiAgLy8gZGVmaW5lZChVTklUX1RF
U1QpCgp9ICAvLyBuYW1lc3BhY2UgYmFzZQoKI2VuZGlmICAvLyBCQVNFX0FUX0VYSVRfSF8KCiNp
Zm5kZWYgQkFTRV9MQVpZX0lOU1RBTkNFX0hfCiNkZWZpbmUgQkFTRV9MQVpZX0lOU1RBTkNFX0hf
CgpuYW1lc3BhY2UgYmFzZSB7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4Kc3RydWN0IERlZmF1
bHRMYXp5SW5zdGFuY2VUcmFpdHMgewogIHN0YXRpYyB2b2lkIE5ldyh2b2lkKiBpbnN0YW5jZSkg
ewogICAgLy8gVXNlIHBsYWNlbWVudCBuZXcgdG8gaW5pdGlhbGl6ZSBvdXIgaW5zdGFuY2UgaW4g
b3VyIHByZWFsbG9jYXRlZCBzcGFjZS4KICAgIC8vIFRoZSBwYXJlbnRoZXNpcyBpcyB2ZXJ5IGlt
cG9ydGFudCBoZXJlIHRvIGZvcmNlIFBPRCB0eXBlIGluaXRpYWxpemF0aW9uLgogICAgbmV3IChp
bnN0YW5jZSkgVHlwZSgpOwogIH0KICBzdGF0aWMgdm9pZCBEZWxldGUodm9pZCogaW5zdGFuY2Up
IHsKICAgIC8vIEV4cGxpY2l0bHkgY2FsbCB0aGUgZGVzdHJ1Y3Rvci4KICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8VHlwZSo+KGluc3RhbmNlKS0+flR5cGUoKTsKICB9Cn07CgovLyBXZSBwdWxsIG91dCBz
b21lIG9mIHRoZSBmdW5jdGlvbmFsaXR5IGludG8gYSBub24tdGVtcGxhdGVkIGJhc2UsIHNvIHRo
YXQgd2UKLy8gY2FuIGltcGxlbWVudCB0aGUgbW9yZSBjb21wbGljYXRlZCBwaWVjZXMgb3V0IG9m
IGxpbmUgaW4gdGhlIC5jYyBmaWxlLgpjbGFzcyBMYXp5SW5zdGFuY2VIZWxwZXIgewogcHJvdGVj
dGVkOgogIGVudW0gewogICAgU1RBVEVfRU1QVFkgICAgPSAwLAogICAgU1RBVEVfQ1JFQVRJTkcg
PSAxLAogICAgU1RBVEVfQ1JFQVRFRCAgPSAyCiAgfTsKCiAgZXhwbGljaXQgTGF6eUluc3RhbmNl
SGVscGVyKExpbmtlckluaXRpYWxpemVkIHgpIHsgLyogc3RhdGVfIGlzIDAgKi8gfQogIC8vIERl
Y2xhcmluZyBhIGRlc3RydWN0b3IgKGV2ZW4gaWYgaXQncyBlbXB0eSkgd2lsbCBjYXVzZSBNU1ZD
IHRvIHJlZ2lzdGVyIGEKICAvLyBzdGF0aWMgaW5pdGlhbGl6ZXIgdG8gcmVnaXN0ZXIgdGhlIGVt
cHR5IGRlc3RydWN0b3Igd2l0aCBhdGV4aXQoKS4KCiAgLy8gTWFrZSBzdXJlIHRoYXQgaW5zdGFu
Y2UgaXMgY3JlYXRlZCwgY3JlYXRpbmcgb3Igd2FpdGluZyBmb3IgaXQgdG8gYmUKICAvLyBjcmVh
dGVkIGlmIG5lY2Nlc3NhcnkuICBDb25zdHJ1Y3RzIHdpdGggfGN0b3J8IGluIHRoZSBzcGFjZSBw
cm92aWRlZCBieQogIC8vIHxpbnN0YW5jZXwgYW5kIHJlZ2lzdGVycyBkdG9yIGZvciBkZXN0cnVj
dGlvbiBhdCBwcm9ncmFtIGV4aXQuCiAgdm9pZCBFbnN1cmVJbnN0YW5jZSh2b2lkKiBpbnN0YW5j
ZSwgdm9pZCAoKmN0b3IpKHZvaWQqKSwgdm9pZCAoKmR0b3IpKHZvaWQqKSk7CgogIGJhc2U6OnN1
YnRsZTo6QXRvbWljMzIgc3RhdGVfOwoKIHByaXZhdGU6CiAgLy8gUmVzZXRzIHN0YXRlIG9mIHxo
ZWxwZXJ8IHRvIFNUQVRFX0VNUFRZIHNvIHRoYXQgaXQgY2FuIGJlIHJldXNlZC4KICAvLyBOb3Qg
dGhyZWFkIHNhZmUuCiAgc3RhdGljIHZvaWQgUmVzZXRTdGF0ZSh2b2lkKiBoZWxwZXIpIHsKICBy
ZWludGVycHJldF9jYXN0PExhenlJbnN0YW5jZUhlbHBlcio+KGhlbHBlciktPnN0YXRlXyA9IFNU
QVRFX0VNUFRZOwp9CgogIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihMYXp5SW5zdGFuY2VIZWxw
ZXIpOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGUsIHR5cGVuYW1lIFRyYWl0cyA9IERlZmF1
bHRMYXp5SW5zdGFuY2VUcmFpdHM8VHlwZT4gPgpjbGFzcyBMYXp5SW5zdGFuY2UgOiBwdWJsaWMg
TGF6eUluc3RhbmNlSGVscGVyIHsKIHB1YmxpYzoKICBleHBsaWNpdCBMYXp5SW5zdGFuY2UoTGlu
a2VySW5pdGlhbGl6ZWQgeCkgOiBMYXp5SW5zdGFuY2VIZWxwZXIoeCkgeyB9CiAgLy8gRGVjbGFy
aW5nIGEgZGVzdHJ1Y3RvciAoZXZlbiBpZiBpdCdzIGVtcHR5KSB3aWxsIGNhdXNlIE1TVkMgdG8g
cmVnaXN0ZXIgYQogIC8vIHN0YXRpYyBpbml0aWFsaXplciB0byByZWdpc3RlciB0aGUgZW1wdHkg
ZGVzdHJ1Y3RvciB3aXRoIGF0ZXhpdCgpLgoKICBUeXBlJiBHZXQoKSB7CiAgICByZXR1cm4gKlBv
aW50ZXIoKTsKICB9CgogIFR5cGUqIFBvaW50ZXIoKSB7CiAgICBUeXBlKiBpbnN0YW5jZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8VHlwZSo+KCZidWZfKTsKCiAgICAvLyBXZSB3aWxsIGhvcGVmdWxseSBo
YXZlIGZhc3QgYWNjZXNzIHdoZW4gdGhlIGluc3RhbmNlIGlzIGFscmVhZHkgY3JlYXRlZC4KICAg
IGlmIChiYXNlOjpzdWJ0bGU6Ok5vQmFycmllcl9Mb2FkKCZzdGF0ZV8pICE9IFNUQVRFX0NSRUFU
RUQpCiAgICAgIEVuc3VyZUluc3RhbmNlKGluc3RhbmNlLCBUcmFpdHM6Ok5ldywgVHJhaXRzOjpE
ZWxldGUpOwoKICAgIC8vIFRoaXMgYW5ub3RhdGlvbiBoZWxwcyByYWNlIGRldGVjdG9ycyByZWNv
Z25pemUgY29ycmVjdCBsb2NrLWxlc3MKICAgIC8vIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIGRp
ZmZlcmVudCB0aHJlYWRzIGNhbGxpbmcgUG9pbnRlcigpLgogICAgLy8gV2Ugc3VnZ2VzdCBkeW5h
bWljIHJhY2UgZGV0ZWN0aW9uIHRvb2wgdGhhdAogICAgLy8gImN0b3IoaW5zdGFuY2UpIiBpbiBF
bnN1cmVJbnN0YW5jZSguLi4pIGhhcHBlbnMgYmVmb3JlCiAgICAvLyAicmV0dXJuIGluc3RhbmNl
IiBpbiBQb2ludGVyKCkuCiAgICAvLyBTZWUgdGhlIGNvcnJlc3BvbmRpbmcgSEFQUEVOU19CRUZP
UkUgaW4gRW5zdXJlSW5zdGFuY2UoLi4uKS4KICAgIC8vQU5OT1RBVEVfSEFQUEVOU19BRlRFUigm
c3RhdGVfKTsKCiAgICByZXR1cm4gaW5zdGFuY2U7CiAgfQoKIHByaXZhdGU6CiAgaW50OCBidWZf
W3NpemVvZihUeXBlKV07ICAvLyBQcmVhbGxvY2F0ZSB0aGUgc3BhY2UgZm9yIHRoZSBUeXBlIGlu
c3RhbmNlLgoKICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oTGF6eUluc3RhbmNlKTsKfTsKCnZv
aWQgTGF6eUluc3RhbmNlSGVscGVyOjpFbnN1cmVJbnN0YW5jZSh2b2lkKiBpbnN0YW5jZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjdG9yKSh2b2lkKiks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqZHRvcikodm9p
ZCopKSB7CiAgLy8gVHJ5IHRvIGNyZWF0ZSB0aGUgaW5zdGFuY2UsIGlmIHdlJ3JlIHRoZSBmaXJz
dCwgd2lsbCBnbyBmcm9tIEVNUFRZCiAgLy8gdG8gQ1JFQVRJTkcsIG90aGVyd2lzZSB3ZSd2ZSBh
bHJlYWR5IGJlZW4gYmVhdGVuIGhlcmUuCiAgaWYgKGJhc2U6OnN1YnRsZTo6QWNxdWlyZV9Db21w
YXJlQW5kU3dhcCgKICAgICAgICAgICZzdGF0ZV8sIFNUQVRFX0VNUFRZLCBTVEFURV9DUkVBVElO
RykgPT0gU1RBVEVfRU1QVFkpIHsKICAgIC8vIENyZWF0ZWQgdGhlIGluc3RhbmNlIGluIHRoZSBz
cGFjZSBwcm92aWRlZCBieSB8aW5zdGFuY2V8LgogICAgY3RvcihpbnN0YW5jZSk7CgogICAgLy8g
U2VlIHRoZSBjb21tZW50IHRvIHRoZSBjb3JyZXNwb25kaW5nIEhBUFBFTlNfQUZURVIgaW4gUG9p
bnRlcigpLgogICAgLy9BTk5PVEFURV9IQVBQRU5TX0JFRk9SRSgmc3RhdGVfKTsKCiAgICAvLyBJ
bnN0YW5jZSBpcyBjcmVhdGVkLCBnbyBmcm9tIENSRUFUSU5HIHRvIENSRUFURUQuCiAgICBiYXNl
OjpzdWJ0bGU6OlJlbGVhc2VfU3RvcmUoJnN0YXRlXywgU1RBVEVfQ1JFQVRFRCk7CgogICAgLy8g
QWxsb3cgcmV1c2luZyB0aGUgTGF6eUluc3RhbmNlIChyZXNldCBpdCB0byB0aGUgaW5pdGlhbCBz
dGF0ZSkuIFRoaXMKICAgIC8vIG1ha2VzIHBvc3NpYmxlIGNhbGxpbmcgYWxsIEF0RXhpdCBjYWxs
YmFja3MgYmV0d2VlbiB0ZXN0cy4gQXNzdW1lcyB0aGF0CiAgICAvLyBubyBvdGhlciB0aHJlYWRz
IGV4ZWN1dGUgd2hlbiBBdEV4aXQgY2FsbGJhY2tzIGFyZSBwcm9jZXNzZWQuCiAgICBiYXNlOjpB
dEV4aXRNYW5hZ2VyOjpSZWdpc3RlckNhbGxiYWNrKCZMYXp5SW5zdGFuY2VIZWxwZXI6OlJlc2V0
U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMpOwoK
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBsYXppbHkgaW5zdGFudGlhdGVkIG9iamVjdCB3aWxs
IGdldCBkZXN0cm95ZWQgYXQgZXhpdC4KICAgIGJhc2U6OkF0RXhpdE1hbmFnZXI6OlJlZ2lzdGVy
Q2FsbGJhY2soZHRvciwgaW5zdGFuY2UpOwogIH0gZWxzZSB7CiAgICAvLyBJdCdzIGVpdGhlciBp
biB0aGUgcHJvY2VzcyBvZiBiZWluZyBjcmVhdGVkLCBvciBhbHJlYWR5IGNyZWF0ZWQuICBTcGlu
LgogICAgd2hpbGUgKGJhc2U6OnN1YnRsZTo6Tm9CYXJyaWVyX0xvYWQoJnN0YXRlXykgIT0gU1RB
VEVfQ1JFQVRFRCkKICAgICAgUGxhdGZvcm1UaHJlYWQ6OllpZWxkQ3VycmVudFRocmVhZCgpOwog
IH0KfQoKfSAgLy8gbmFtZXNwYWNlIGJhc2UKCiNlbmRpZiAgLy8gQkFTRV9MQVpZX0lOU1RBTkNF
X0hfCgojaWZuZGVmIEJBU0VfVEhSRUFEX0xPQ0FMX0hfCiNkZWZpbmUgQkFTRV9USFJFQURfTE9D
QUxfSF8KCm5hbWVzcGFjZSBiYXNlIHsKCi8vIEhlbHBlciBmdW5jdGlvbnMgdGhhdCBhYnN0cmFj
dCB0aGUgY3Jvc3MtcGxhdGZvcm0gQVBJcy4gIERvIG5vdCB1c2UgZGlyZWN0bHkuCnN0cnVjdCBU
aHJlYWRMb2NhbFBsYXRmb3JtIHsKICB0eXBlZGVmIHB0aHJlYWRfa2V5X3QgU2xvdFR5cGU7Cgog
IHN0YXRpYyB2b2lkIEFsbG9jYXRlU2xvdChTbG90VHlwZSYgc2xvdCkgewogIGludCBlcnJvciA9
IHB0aHJlYWRfa2V5X2NyZWF0ZSgmc2xvdCwgTlVMTCk7CiAgQ0hFQ0soZXJyb3IgPT0gMCk7Cn0K
CgogIHN0YXRpYyB2b2lkIEZyZWVTbG90KFNsb3RUeXBlJiBzbG90KSB7CiAgaW50IGVycm9yID0g
cHRocmVhZF9rZXlfZGVsZXRlKHNsb3QpOwogIERDSEVDSyhlcnJvciA9PSAwKTsKfQoKCiAgc3Rh
dGljIHZvaWQqIEdldFZhbHVlRnJvbVNsb3QoU2xvdFR5cGUmIHNsb3QpIHsKICByZXR1cm4gcHRo
cmVhZF9nZXRzcGVjaWZpYyhzbG90KTsKfQoKCiAgc3RhdGljIHZvaWQgU2V0VmFsdWVJblNsb3Qo
U2xvdFR5cGUmIHNsb3QsIHZvaWQqIHZhbHVlKTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUeXBl
PgpjbGFzcyBUaHJlYWRMb2NhbFBvaW50ZXIgewogcHVibGljOgogIFRocmVhZExvY2FsUG9pbnRl
cigpIDogc2xvdF8oKSB7CiAgICBUaHJlYWRMb2NhbFBsYXRmb3JtOjpBbGxvY2F0ZVNsb3Qoc2xv
dF8pOwogIH0KCiAgflRocmVhZExvY2FsUG9pbnRlcigpIHsKICAgIFRocmVhZExvY2FsUGxhdGZv
cm06OkZyZWVTbG90KHNsb3RfKTsKICB9CgogIFR5cGUqIEdldCgpIHsKICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUeXBlKj4oVGhyZWFkTG9jYWxQbGF0Zm9ybTo6R2V0VmFsdWVGcm9tU2xvdChzbG90
XykpOwogIH0KCiAgdm9pZCBTZXQoVHlwZSogcHRyKSB7CiAgICBUaHJlYWRMb2NhbFBsYXRmb3Jt
OjpTZXRWYWx1ZUluU2xvdChzbG90XywgcHRyKTsKICB9CgogcHJpdmF0ZToKICB0eXBlZGVmIFRo
cmVhZExvY2FsUGxhdGZvcm06OlNsb3RUeXBlIFNsb3RUeXBlOwoKICBTbG90VHlwZSBzbG90XzsK
CiAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRocmVhZExvY2FsUG9pbnRlcjxUeXBlPik7Cn07
CgpjbGFzcyBUaHJlYWRMb2NhbEJvb2xlYW4gewogcHVibGljOgogIFRocmVhZExvY2FsQm9vbGVh
bigpIHsgfQogIH5UaHJlYWRMb2NhbEJvb2xlYW4oKSB7IH0KCiAgYm9vbCBHZXQoKSB7CiAgICBy
ZXR1cm4gdGxwXy5HZXQoKSAhPSBOVUxMOwogIH0KCiAgdm9pZCBTZXQoYm9vbCB2YWwpIHsKICAg
IHRscF8uU2V0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbCA/IDEgOiAwKSk7CiAgfQoKIHBy
aXZhdGU6CiAgVGhyZWFkTG9jYWxQb2ludGVyPHZvaWQ+IHRscF87CgogIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihUaHJlYWRMb2NhbEJvb2xlYW4pOwp9OwoKfSAgLy8gbmFtZXNwYWNlIGJhc2UK
CiNlbmRpZiAgLy8gQkFTRV9USFJFQURfTE9DQUxfSF8KCi8vIEEgbGF6aWx5IGNyZWF0ZWQgdGhy
ZWFkIGxvY2FsIHN0b3JhZ2UgZm9yIHF1aWNrIGFjY2VzcyB0byBhIHRocmVhZCdzIG1lc3NhZ2UK
Ly8gbG9vcCwgaWYgb25lIGV4aXN0cy4gIFRoaXMgc2hvdWxkIGJlIHNhZmUgYW5kIGZyZWUgb2Yg
c3RhdGljIGNvbnN0cnVjdG9ycy4Kc3RhdGljIGJhc2U6OkxhenlJbnN0YW5jZTxiYXNlOjpUaHJl
YWRMb2NhbFBvaW50ZXI8TWVzc2FnZUxvb3A+ID4gbGF6eV90bHNfcHRyKAogICAgYmFzZTo6TElO
S0VSX0lOSVRJQUxJWkVEKTsKCgojaWZuZGVmIEJBU0VfTUVTU0FHRV9QVU1QX0hfCiNkZWZpbmUg
QkFTRV9NRVNTQUdFX1BVTVBfSF8KCm5hbWVzcGFjZSBiYXNlIHsKCmNsYXNzIFRpbWU7CgpjbGFz
cyBNZXNzYWdlUHVtcCA6IHB1YmxpYyBSZWZDb3VudGVkVGhyZWFkU2FmZTxNZXNzYWdlUHVtcD4g
ewogcHVibGljOgogIC8vIFBsZWFzZSBzZWUgdGhlIGNvbW1lbnRzIGFib3ZlIHRoZSBSdW4gbWV0
aG9kIGZvciBhbiBpbGx1c3RyYXRpb24gb2YgaG93CiAgLy8gdGhlc2UgZGVsZWdhdGUgbWV0aG9k
cyBhcmUgdXNlZC4KICBjbGFzcyBEZWxlZ2F0ZSB7CiAgIHB1YmxpYzoKICAgIHZpcnR1YWwgfkRl
bGVnYXRlKCkge30KCiAgICAvLyBDYWxsZWQgZnJvbSB3aXRoaW4gUnVuIGluIHJlc3BvbnNlIHRv
IFNjaGVkdWxlV29yayBvciB3aGVuIHRoZSBtZXNzYWdlCiAgICAvLyBwdW1wIHdvdWxkIG90aGVy
d2lzZSBjYWxsIERvRGVsYXllZFdvcmsuICBSZXR1cm5zIHRydWUgdG8gaW5kaWNhdGUgdGhhdAog
ICAgLy8gd29yayB3YXMgZG9uZS4gIERvRGVsYXllZFdvcmsgd2lsbCBub3QgYmUgY2FsbGVkIGlm
IERvV29yayByZXR1cm5zIHRydWUuCiAgICB2aXJ0dWFsIGJvb2wgRG9Xb3JrKCkgPSAwOwoKICAg
IC8vIENhbGxlZCBmcm9tIHdpdGhpbiBSdW4gaW4gcmVzcG9uc2UgdG8gU2NoZWR1bGVEZWxheWVk
V29yayBvciB3aGVuIHRoZQogICAgLy8gbWVzc2FnZSBwdW1wIHdvdWxkIG90aGVyd2lzZSBzbGVl
cCB3YWl0aW5nIGZvciBtb3JlIHdvcmsuICBSZXR1cm5zIHRydWUKICAgIC8vIHRvIGluZGljYXRl
IHRoYXQgZGVsYXllZCB3b3JrIHdhcyBkb25lLiAgRG9JZGxlV29yayB3aWxsIG5vdCBiZSBjYWxs
ZWQKICAgIC8vIGlmIERvRGVsYXllZFdvcmsgcmV0dXJucyB0cnVlLiAgVXBvbiByZXR1cm4gfG5l
eHRfZGVsYXllZF93b3JrX3RpbWV8CiAgICAvLyBpbmRpY2F0ZXMgdGhlIHRpbWUgd2hlbiBEb0Rl
bGF5ZWRXb3JrIHNob3VsZCBiZSBjYWxsZWQgYWdhaW4uICBJZgogICAgLy8gfG5leHRfZGVsYXll
ZF93b3JrX3RpbWV8IGlzIG51bGwgKHBlciBUaW1lOjppc19udWxsKSwgdGhlbiB0aGUgcXVldWUg
b2YKICAgIC8vIGZ1dHVyZSBkZWxheWVkIHdvcmsgKHRpbWVyIGV2ZW50cykgaXMgY3VycmVudGx5
IGVtcHR5LCBhbmQgbm8gYWRkaXRpb25hbAogICAgLy8gY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiBu
ZWVkIHRvIGJlIHNjaGVkdWxlZC4KICAgIHZpcnR1YWwgYm9vbCBEb0RlbGF5ZWRXb3JrKFRpbWUq
IG5leHRfZGVsYXllZF93b3JrX3RpbWUpID0gMDsKCiAgICAvLyBDYWxsZWQgZnJvbSB3aXRoaW4g
UnVuIGp1c3QgYmVmb3JlIHRoZSBtZXNzYWdlIHB1bXAgZ29lcyB0byBzbGVlcC4KICAgIC8vIFJl
dHVybnMgdHJ1ZSB0byBpbmRpY2F0ZSB0aGF0IGlkbGUgd29yayB3YXMgZG9uZS4KICAgIHZpcnR1
YWwgYm9vbCBEb0lkbGVXb3JrKCkgPSAwOwogIH07CgogIHZpcnR1YWwgfk1lc3NhZ2VQdW1wKCkg
e30KCiAgLy8gVGhlIFJ1biBtZXRob2QgaXMgY2FsbGVkIHRvIGVudGVyIHRoZSBtZXNzYWdlIHB1
bXAncyBydW4gbG9vcC4KICAvLwogIC8vIFdpdGhpbiB0aGUgbWV0aG9kLCB0aGUgbWVzc2FnZSBw
dW1wIGlzIHJlc3BvbnNpYmxlIGZvciBwcm9jZXNzaW5nIG5hdGl2ZQogIC8vIG1lc3NhZ2VzIGFz
IHdlbGwgYXMgZm9yIGdpdmluZyBjeWNsZXMgdG8gdGhlIGRlbGVnYXRlIHBlcmlvZGljYWxseS4g
IFRoZQogIC8vIG1lc3NhZ2UgcHVtcCBzaG91bGQgdGFrZSBjYXJlIHRvIG1peCBkZWxlZ2F0ZSBj
YWxsYmFja3Mgd2l0aCBuYXRpdmUKICAvLyBtZXNzYWdlIHByb2Nlc3Npbmcgc28gbmVpdGhlciB0
eXBlIG9mIGV2ZW50IHN0YXJ2ZXMgdGhlIG90aGVyIG9mIGN5Y2xlcy4KICAvLwogIC8vIFRoZSBh
bmF0b215IG9mIGEgdHlwaWNhbCBydW4gbG9vcDoKICAvLwogIC8vICAgZm9yICg7OykgewogIC8v
ICAgICBib29sIGRpZF93b3JrID0gRG9JbnRlcm5hbFdvcmsoKTsKICAvLyAgICAgaWYgKHNob3Vs
ZF9xdWl0XykKICAvLyAgICAgICBicmVhazsKICAvLwogIC8vICAgICBkaWRfd29yayB8PSBkZWxl
Z2F0ZV8tPkRvV29yaygpOwogIC8vICAgICBpZiAoc2hvdWxkX3F1aXRfKQogIC8vICAgICAgIGJy
ZWFrOwogIC8vCiAgLy8gICAgIGRpZF93b3JrIHw9IGRlbGVnYXRlXy0+RG9EZWxheWVkV29yaygp
OwogIC8vICAgICBpZiAoc2hvdWxkX3F1aXRfKQogIC8vICAgICAgIGJyZWFrOwogIC8vCiAgLy8g
ICAgIGlmIChkaWRfd29yaykKICAvLyAgICAgICBjb250aW51ZTsKICAvLwogIC8vICAgICBkaWRf
d29yayA9IGRlbGVnYXRlXy0+RG9JZGxlV29yaygpOwogIC8vICAgICBpZiAoc2hvdWxkX3F1aXRf
KQogIC8vICAgICAgIGJyZWFrOwogIC8vCiAgLy8gICAgIGlmIChkaWRfd29yaykKICAvLyAgICAg
ICBjb250aW51ZTsKICAvLwogIC8vICAgICBXYWl0Rm9yV29yaygpOwogIC8vICAgfQogIC8vCiAg
Ly8gSGVyZSwgRG9JbnRlcm5hbFdvcmsgaXMgc29tZSBwcml2YXRlIG1ldGhvZCBvZiB0aGUgbWVz
c2FnZSBwdW1wIHRoYXQgaXMKICAvLyByZXNwb25zaWJsZSBmb3IgZGlzcGF0Y2hpbmcgdGhlIG5l
eHQgVUkgbWVzc2FnZSBvciBub3RpZnlpbmcgdGhlIG5leHQgSU8KICAvLyBjb21wbGV0aW9uIChm
b3IgZXhhbXBsZSkuICBXYWl0Rm9yV29yayBpcyBhIHByaXZhdGUgbWV0aG9kIHRoYXQgc2ltcGx5
CiAgLy8gYmxvY2tzIHVudGlsIHRoZXJlIGlzIG1vcmUgd29yayBvZiBhbnkgdHlwZSB0byBkby4K
ICAvLwogIC8vIE5vdGljZSB0aGF0IHRoZSBydW4gbG9vcCBjeWNsZXMgYmV0d2VlbiBjYWxsaW5n
IERvSW50ZXJuYWxXb3JrLCBEb1dvcmssCiAgLy8gYW5kIERvRGVsYXllZFdvcmsgbWV0aG9kcy4g
IFRoaXMgaGVscHMgZW5zdXJlIHRoYXQgbmVpdGhlciB3b3JrIHF1ZXVlCiAgLy8gc3RhcnZlcyB0
aGUgb3RoZXIuICBUaGlzIGlzIGltcG9ydGFudCBmb3IgbWVzc2FnZSBwdW1wcyB0aGF0IGFyZSB1
c2VkIHRvCiAgLy8gZHJpdmUgYW5pbWF0aW9ucywgZm9yIGV4YW1wbGUuCiAgLy8KICAvLyBOb3Rp
Y2UgYWxzbyB0aGF0IGFmdGVyIGVhY2ggY2FsbG91dCB0byBmb3JlaWduIGNvZGUsIHRoZSBydW4g
bG9vcCBjaGVja3MKICAvLyB0byBzZWUgaWYgaXQgc2hvdWxkIHF1aXQuICBUaGUgUXVpdCBtZXRo
b2QgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhpcwogIC8vIGZsYWcuICBObyBmdXJ0aGVy
IHdvcmsgaXMgZG9uZSBvbmNlIHRoZSBxdWl0IGZsYWcgaXMgc2V0LgogIC8vCiAgLy8gTk9URTog
Q2FyZSBtdXN0IGJlIHRha2VuIHRvIGhhbmRsZSBSdW4gYmVpbmcgY2FsbGVkIGFnYWluIGZyb20g
d2l0aGluIGFueQogIC8vIG9mIHRoZSBjYWxsb3V0cyB0byBmb3JlaWduIGNvZGUuICBOYXRpdmUg
bWVzc2FnZSBwdW1wcyBtYXkgYWxzbyBuZWVkIHRvCiAgLy8gZGVhbCB3aXRoIG90aGVyIG5hdGl2
ZSBtZXNzYWdlIHB1bXBzIGJlaW5nIHJ1biBvdXRzaWRlIHRoZWlyIGNvbnRyb2wKICAvLyAoZS5n
LiwgdGhlIE1lc3NhZ2VCb3ggQVBJIG9uIFdpbmRvd3MgcHVtcHMgVUkgbWVzc2FnZXMhKS4gIFRv
IGJlIHNwZWNpZmljLAogIC8vIHRoZSBjYWxsb3V0cyAoRG9Xb3JrIGFuZCBEb0RlbGF5ZWRXb3Jr
KSBNVVNUIHN0aWxsIGJlIHByb3ZpZGVkIGV2ZW4gaW4KICAvLyBuZXN0ZWQgc3ViLWxvb3BzIHRo
YXQgYXJlICJzZWVtaW5nbHkiIG91dHNpZGUgdGhlIGNvbnRyb2wgb2YgdGhpcyBtZXNzYWdlCiAg
Ly8gcHVtcC4gIERvV29yayBpbiBwYXJ0aWN1bGFyIG11c3QgbmV2ZXIgYmUgc3RhcnZlZCBmb3Ig
dGltZSBzbGljZXMgdW5sZXNzCiAgLy8gaXQgcmV0dXJucyBmYWxzZSAobWVhbmluZyBpdCBoYXMg
cnVuIG91dCBvZiB0aGluZ3MgdG8gZG8pLgogIC8vCiAgdmlydHVhbCB2b2lkIFJ1bihEZWxlZ2F0
ZSogZGVsZWdhdGUpID0gMDsKCiAgLy8gUXVpdCBpbW1lZGlhdGVseSBmcm9tIHRoZSBtb3N0IHJl
Y2VudGx5IGVudGVyZWQgcnVuIGxvb3AuICBUaGlzIG1ldGhvZCBtYXkKICAvLyBvbmx5IGJlIHVz
ZWQgb24gdGhlIHRocmVhZCB0aGF0IGNhbGxlZCBSdW4uCiAgdmlydHVhbCB2b2lkIFF1aXQoKSA9
IDA7CgogIC8vIFNjaGVkdWxlIGEgRG9Xb3JrIGNhbGxiYWNrIHRvIGhhcHBlbiByZWFzb25hYmx5
IHNvb24uICBEb2VzIG5vdGhpbmcgaWYgYQogIC8vIERvV29yayBjYWxsYmFjayBpcyBhbHJlYWR5
IHNjaGVkdWxlZC4gIFRoaXMgbWV0aG9kIG1heSBiZSBjYWxsZWQgZnJvbSBhbnkKICAvLyB0aHJl
YWQuICBPbmNlIHRoaXMgY2FsbCBpcyBtYWRlLCBEb1dvcmsgc2hvdWxkIG5vdCBiZSAic3RhcnZl
ZCIgYXQgbGVhc3QKICAvLyB1bnRpbCBpdCByZXR1cm5zIGEgdmFsdWUgb2YgZmFsc2UuCiAgdmly
dHVhbCB2b2lkIFNjaGVkdWxlV29yaygpID0gMDsKCiAgLy8gU2NoZWR1bGUgYSBEb0RlbGF5ZWRX
b3JrIGNhbGxiYWNrIHRvIGhhcHBlbiBhdCB0aGUgc3BlY2lmaWVkIHRpbWUsCiAgLy8gY2FuY2Vs
bGluZyBhbnkgcGVuZGluZyBEb0RlbGF5ZWRXb3JrIGNhbGxiYWNrLiAgVGhpcyBtZXRob2QgbWF5
IG9ubHkgYmUKICAvLyB1c2VkIG9uIHRoZSB0aHJlYWQgdGhhdCBjYWxsZWQgUnVuLgogIHZpcnR1
YWwgdm9pZCBTY2hlZHVsZURlbGF5ZWRXb3JrKGNvbnN0IFRpbWUmIGRlbGF5ZWRfd29ya190aW1l
KSA9IDA7Cn07Cgp9ICAvLyBuYW1lc3BhY2UgYmFzZQoKI2VuZGlmICAvLyBCQVNFX01FU1NBR0Vf
UFVNUF9IXwoKI2lmbmRlZiBCQVNFX0hJU1RPR1JBTV9IXwojZGVmaW5lIEJBU0VfSElTVE9HUkFN
X0hfCgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gUHJvdmlkZSBlYXN5IGdlbmVyYWwgcHVy
cG9zZSBoaXN0b2dyYW0gaW4gYSBtYWNybywganVzdCBsaWtlIHN0YXRzIGNvdW50ZXJzLgovLyBU
aGUgZmlyc3QgZm91ciBtYWNyb3MgdXNlIDUwIGJ1Y2tldHMuCgojZGVmaW5lIEhJU1RPR1JBTV9U
SU1FUyhuYW1lLCBzYW1wbGUpIGRvIHsgXAogICAgc3RhdGljIEhpc3RvZ3JhbSBjb3VudGVyKChu
YW1lKSwgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDEpLCBcCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcygxMCksIDUwKTsg
XAogICAgY291bnRlci5BZGRUaW1lKHNhbXBsZSk7IFwKICB9IHdoaWxlICgwKQoKI2RlZmluZSBI
SVNUT0dSQU1fQ09VTlRTKG5hbWUsIHNhbXBsZSkgZG8geyBcCiAgICBzdGF0aWMgSGlzdG9ncmFt
IGNvdW50ZXIoKG5hbWUpLCAxLCAxMDAwMDAwLCA1MCk7IFwKICAgIGNvdW50ZXIuQWRkKHNhbXBs
ZSk7IFwKICB9IHdoaWxlICgwKQoKI2RlZmluZSBISVNUT0dSQU1fQ09VTlRTXzEwMChuYW1lLCBz
YW1wbGUpIGRvIHsgXAogICAgc3RhdGljIEhpc3RvZ3JhbSBjb3VudGVyKChuYW1lKSwgMSwgMTAw
LCA1MCk7IFwKICAgIGNvdW50ZXIuQWRkKHNhbXBsZSk7IFwKICB9IHdoaWxlICgwKQoKI2RlZmlu
ZSBISVNUT0dSQU1fQ09VTlRTXzEwMDAwKG5hbWUsIHNhbXBsZSkgZG8geyBcCiAgICBzdGF0aWMg
SGlzdG9ncmFtIGNvdW50ZXIoKG5hbWUpLCAxLCAxMDAwMCwgNTApOyBcCiAgICBjb3VudGVyLkFk
ZChzYW1wbGUpOyBcCiAgfSB3aGlsZSAoMCkKCiNkZWZpbmUgSElTVE9HUkFNX0NVU1RPTV9DT1VO
VFMobmFtZSwgc2FtcGxlLCBtaW4sIG1heCwgYnVja2V0X2NvdW50KSBkbyB7IFwKICAgIHN0YXRp
YyBIaXN0b2dyYW0gY291bnRlcigobmFtZSksIG1pbiwgbWF4LCBidWNrZXRfY291bnQpOyBcCiAg
ICBjb3VudGVyLkFkZChzYW1wbGUpOyBcCiAgfSB3aGlsZSAoMCkKCiNkZWZpbmUgSElTVE9HUkFN
X1BFUkNFTlRBR0UobmFtZSwgdW5kZXJfb25lX2h1bmRyZWQpIGRvIHsgXAogICAgc3RhdGljIExp
bmVhckhpc3RvZ3JhbSBjb3VudGVyKChuYW1lKSwgMSwgMTAwLCAxMDEpOyBcCiAgICBjb3VudGVy
LkFkZCh1bmRlcl9vbmVfaHVuZHJlZCk7IFwKICB9IHdoaWxlICgwKQoKLy8gRm9yIGZvbGtzIHRo
YXQgbmVlZCByZWFsIHNwZWNpZmljIHRpbWVzLCB1c2UgdGhpcyB0byBzZWxlY3QgYSBwcmVjaXNl
IHJhbmdlCi8vIG9mIHRpbWVzIHlvdSB3YW50IHBsb3R0ZWQsIGFuZCB0aGUgbnVtYmVyIG9mIGJ1
Y2tldHMgeW91IHdhbnQgdXNlZC4KI2RlZmluZSBISVNUT0dSQU1fQ1VTVE9NX1RJTUVTKG5hbWUs
IHNhbXBsZSwgbWluLCBtYXgsIGJ1Y2tldF9jb3VudCkgZG8geyBcCiAgICBzdGF0aWMgSGlzdG9n
cmFtIGNvdW50ZXIoKG5hbWUpLCBtaW4sIG1heCwgYnVja2V0X2NvdW50KTsgXAogICAgY291bnRl
ci5BZGRUaW1lKHNhbXBsZSk7IFwKICB9IHdoaWxlICgwKQoKLy8gRE8gTk9UIFVTRSBUSElTLiAg
SXQgaXMgYmVpbmcgcGhhc2VkIG91dCwgaW4gZmF2b3Igb2YgSElTVE9HUkFNX0NVU1RPTV9USU1F
Uy4KI2RlZmluZSBISVNUT0dSQU1fQ0xJUFBFRF9USU1FUyhuYW1lLCBzYW1wbGUsIG1pbiwgbWF4
LCBidWNrZXRfY291bnQpIGRvIHsgXAogICAgc3RhdGljIEhpc3RvZ3JhbSBjb3VudGVyKChuYW1l
KSwgbWluLCBtYXgsIGJ1Y2tldF9jb3VudCk7IFwKICAgIGlmICgoc2FtcGxlKSA8IChtYXgpKSBj
b3VudGVyLkFkZFRpbWUoc2FtcGxlKTsgXAogIH0gd2hpbGUgKDApCgovLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQovLyBUaGlzIG1hY3JvIHNldCBpcyBmb3IgYSBoaXN0b2dyYW0gdGhhdCBjYW4gc3Vw
cG9ydCBib3RoIGFkZGl0aW9uIGFuZCByZW1vdmFsCi8vIG9mIHNhbXBsZXMuIEl0IHNob3VsZCBi
ZSB1c2VkIHRvIHJlbmRlciB0aGUgYWNjdW11bGF0ZWQgYXNzZXQgYWxsb2NhdGlvbgovLyBvZiBz
b21lIHNhbXBsZXMuICBGb3IgZXhhbXBsZSwgaXQgY2FuIHNhbXBsZSBtZW1vcnkgYWxsb2NhdGlv
biBzaXplcywgYW5kCi8vIG1lbW9yeSByZWxlYXNlcyAoYXMgbmVnYXRpdmUgc2FtcGxlcykuCi8v
IFRvIHNpbXBsaWZ5IHRoZSBpbnRlcmZhY2UsIG9ubHkgbm9uLXplcm8gdmFsdWVzIGNhbiBiZSBz
YW1wbGVkLCB3aXRoIHBvc2l0aXZlCi8vIG51bWJlcnMgaW5kaWNhdGluZyBhZGRpdGlvbiwgYW5k
IG5lZ2F0aXZlIG51bWJlcnMgaW1wbHlpbmcgZGltdW5pdGlvbgovLyAocmVtb3ZhbCkuCi8vIE5v
dGUgdGhhdCB0aGUgdW5kZXJseWluZyBUaHJlYWRTYWZlSGlzdG9ncmFtKCkgdXNlcyBsb2NraW5n
IHRvIGVuc3VyZSB0aGF0Ci8vIGNvdW50cyBhcmUgcHJlY2lzZSAobm8gY2hhbmNlIG9mIGxvc2lu
ZyBhbiBhZGRpdGlvbiBvciByZW1vdmFsIGV2ZW50LCBkdWUgdG8KLy8gbXVsdGl0aHJlYWQgcmFj
aW5nKS4gVGhpcyBwcmVjaXNpb24gaXMgcmVxdWlyZWQgdG8gcHJldmVudCBtaXNzZWQtY291bnRz
IGZyb20KLy8gcmVzdWx0aW5nIGluIGRyaWZ0LCBhcyB0aGUgY2FsbHMgdG8gUmVtb3ZlKCkgZm9y
IGEgZ2l2ZW4gdmFsdWUgc2hvdWxkIGFsd2F5cwovLyBiZSBlcXVhbCBpbiBudW1iZXIgb3IgZmV3
ZXIgdGhhbiB0aGUgY29ycmVzcG9uZGluZyBjYWxscyB0byBBZGQoKS4KCiNkZWZpbmUgQVNTRVRf
SElTVE9HUkFNX0NPVU5UUyhuYW1lLCBzYW1wbGUpIGRvIHsgXAogICAgc3RhdGljIFRocmVhZFNh
ZmVIaXN0b2dyYW0gY291bnRlcigobmFtZSksIDEsIDEwMDAwMDAsIDUwKTsgXAogICAgaWYgKDAg
PT0gc2FtcGxlKSBicmVhazsgXAogICAgaWYgKHNhbXBsZSA+PSAwKSBcCiAgICAgIGNvdW50ZXIu
QWRkKHNhbXBsZSk7IFwKICAgIGVsc2VcCiAgICAgIGNvdW50ZXIuUmVtb3ZlKC1zYW1wbGUpOyBc
CiAgfSB3aGlsZSAoMCkKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIERlZmluZSBEZWJ1ZyB2
cyBub24tZGVidWcgZmxhdm9ycyBvZiBtYWNyb3MuCiNpZm5kZWYgTkRFQlVHCgojZGVmaW5lIERI
SVNUT0dSQU1fVElNRVMobmFtZSwgc2FtcGxlKSBISVNUT0dSQU1fVElNRVMobmFtZSwgc2FtcGxl
KQojZGVmaW5lIERISVNUT0dSQU1fQ09VTlRTKG5hbWUsIHNhbXBsZSkgSElTVE9HUkFNX0NPVU5U
UyhuYW1lLCBzYW1wbGUpCiNkZWZpbmUgREFTU0VUX0hJU1RPR1JBTV9DT1VOVFMobmFtZSwgc2Ft
cGxlKSBBU1NFVF9ISVNUT0dSQU1fQ09VTlRTKG5hbWUsIFwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlKQoj
ZGVmaW5lIERISVNUT0dSQU1fUEVSQ0VOVEFHRShuYW1lLCB1bmRlcl9vbmVfaHVuZHJlZCkgSElT
VE9HUkFNX1BFUkNFTlRBR0UoXAogICAgbmFtZSwgdW5kZXJfb25lX2h1bmRyZWQpCiNkZWZpbmUg
REhJU1RPR1JBTV9DVVNUT01fVElNRVMobmFtZSwgc2FtcGxlLCBtaW4sIG1heCwgYnVja2V0X2Nv
dW50KSBcCiAgICBISVNUT0dSQU1fQ1VTVE9NX1RJTUVTKG5hbWUsIHNhbXBsZSwgbWluLCBtYXgs
IGJ1Y2tldF9jb3VudCkKI2RlZmluZSBESElTVE9HUkFNX0NMSVBQRURfVElNRVMobmFtZSwgc2Ft
cGxlLCBtaW4sIG1heCwgYnVja2V0X2NvdW50KSBcCiAgICBISVNUT0dSQU1fQ0xJUFBFRF9USU1F
UyhuYW1lLCBzYW1wbGUsIG1pbiwgbWF4LCBidWNrZXRfY291bnQpCiNkZWZpbmUgREhJU1RPR1JB
TV9DVVNUT01fQ09VTlRTKG5hbWUsIHNhbXBsZSwgbWluLCBtYXgsIGJ1Y2tldF9jb3VudCkgXAog
IEhJU1RPR1JBTV9DVVNUT01fQ09VTlRTKG5hbWUsIHNhbXBsZSwgbWluLCBtYXgsIGJ1Y2tldF9j
b3VudCkKCiNlbHNlICAvLyBOREVCVUcKCiNkZWZpbmUgREhJU1RPR1JBTV9USU1FUyhuYW1lLCBz
YW1wbGUpIGRvIHt9IHdoaWxlICgwKQojZGVmaW5lIERISVNUT0dSQU1fQ09VTlRTKG5hbWUsIHNh
bXBsZSkgZG8ge30gd2hpbGUgKDApCiNkZWZpbmUgREFTU0VUX0hJU1RPR1JBTV9DT1VOVFMobmFt
ZSwgc2FtcGxlKSBkbyB7fSB3aGlsZSAoMCkKI2RlZmluZSBESElTVE9HUkFNX1BFUkNFTlRBR0Uo
bmFtZSwgdW5kZXJfb25lX2h1bmRyZWQpIGRvIHt9IHdoaWxlICgwKQojZGVmaW5lIERISVNUT0dS
QU1fQ1VTVE9NX1RJTUVTKG5hbWUsIHNhbXBsZSwgbWluLCBtYXgsIGJ1Y2tldF9jb3VudCkgXAog
ICAgZG8ge30gd2hpbGUgKDApCiNkZWZpbmUgREhJU1RPR1JBTV9DTElQUEVEX1RJTUVTKG5hbWUs
IHNhbXBsZSwgbWluLCBtYXgsIGJ1Y2tldF9jb3VudCkgXAogICAgZG8ge30gd2hpbGUgKDApCiNk
ZWZpbmUgREhJU1RPR1JBTV9DVVNUT01fQ09VTlRTKG5hbWUsIHNhbXBsZSwgbWluLCBtYXgsIGJ1
Y2tldF9jb3VudCkgXAogIGRvIHt9IHdoaWxlICgwKQoKCiNlbmRpZiAgLy8gTkRFQlVHCgovLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQovLyBUaGUgZm9sbG93aW5nIG1hY3JvcyBwcm92aWRlIHR5cGlj
YWwgdXNhZ2Ugc2NlbmFyaW9zIGZvciBjYWxsZXJzIHRoYXQgd2lzaAovLyB0byByZWNvcmQgaGlz
dG9ncmFtIGRhdGEsIGFuZCBoYXZlIHRoZSBkYXRhIHN1Ym1pdHRlZC91cGxvYWRlZCB2aWEgVU1B
LgovLyBOb3QgYWxsIHN5c3RlbXMgc3VwcG9ydCBzdWNoIFVNQSwgYnV0IGlmIHRoZXkgZG8sIHRo
ZSBmb2xsb3dpbmcgbWFjcm9zCi8vIHNob3VsZCB3b3JrIHdpdGggdGhlIHNlcnZpY2UuCgpzdGF0
aWMgY29uc3QgaW50IGtVbWFUYXJnZXRlZEhpc3RvZ3JhbUZsYWcgPSAweDE7CgovLyBUaGlzIGlu
ZGljYXRlcyB0aGUgaGlzdG9ncmFtIGlzIHNoYWRvdyBjb3B5IG9mIHJlbmRlcmVyIGhpc3Ryb2dy
YW0KLy8gY29uc3RydWN0ZWQgYnkgdW5waWNrIG1ldGhvZCBhbmQgdXBkYXRlZCByZWd1bGFybHkg
ZnJvbSByZW5kZXJlciB1cGxvYWQKLy8gb2YgaGlzdG9ncmFtcy4Kc3RhdGljIGNvbnN0IGludCBr
UmVuZGVyZXJIaXN0b2dyYW1GbGFnID0gMSA8PCA0OwoKI2RlZmluZSBVTUFfSElTVE9HUkFNX1RJ
TUVTKG5hbWUsIHNhbXBsZSkgZG8geyBcCiAgICBzdGF0aWMgSGlzdG9ncmFtIGNvdW50ZXIoKG5h
bWUpLCBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMSksIFwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDEwKSwgNTApOyBc
CiAgICBjb3VudGVyLlNldEZsYWdzKGtVbWFUYXJnZXRlZEhpc3RvZ3JhbUZsYWcpOyBcCiAgICBj
b3VudGVyLkFkZFRpbWUoc2FtcGxlKTsgXAogIH0gd2hpbGUgKDApCgojZGVmaW5lIFVNQV9ISVNU
T0dSQU1fTUVESVVNX1RJTUVTKG5hbWUsIHNhbXBsZSkgZG8geyBcCiAgICBzdGF0aWMgSGlzdG9n
cmFtIGNvdW50ZXIoKG5hbWUpLCBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMTAp
LCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlu
dXRlcygzKSwgNTApOyBcCiAgICBjb3VudGVyLlNldEZsYWdzKGtVbWFUYXJnZXRlZEhpc3RvZ3Jh
bUZsYWcpOyBcCiAgICBjb3VudGVyLkFkZFRpbWUoc2FtcGxlKTsgXAogIH0gd2hpbGUgKDApCgov
LyBVc2UgdGhpcyBtYWNybyB3aGVuIHRpbWVzIGNhbiByb3V0aW5lbHkgYmUgbXVjaCBsb25nZXIg
dGhhbiAxMCBzZWNvbmRzLgojZGVmaW5lIFVNQV9ISVNUT0dSQU1fTE9OR19USU1FUyhuYW1lLCBz
YW1wbGUpIGRvIHsgXAogICAgc3RhdGljIEhpc3RvZ3JhbSBjb3VudGVyKChuYW1lKSwgYmFzZTo6
VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDEpLCBcCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tSG91cnMoMSksIDUwKTsgXAogICAgY291bnRlci5T
ZXRGbGFncyhrVW1hVGFyZ2V0ZWRIaXN0b2dyYW1GbGFnKTsgXAogICAgY291bnRlci5BZGRUaW1l
KHNhbXBsZSk7IFwKICB9IHdoaWxlICgwKQoKI2RlZmluZSBVTUFfSElTVE9HUkFNX0NVU1RPTV9U
SU1FUyhuYW1lLCBzYW1wbGUsIG1pbiwgbWF4LCBidWNrZXRfY291bnQpIGRvIHsgXAogICAgc3Rh
dGljIEhpc3RvZ3JhbSBjb3VudGVyKChuYW1lKSwgbWluLCBtYXgsIGJ1Y2tldF9jb3VudCk7IFwK
ICAgIGNvdW50ZXIuU2V0RmxhZ3Moa1VtYVRhcmdldGVkSGlzdG9ncmFtRmxhZyk7IFwKICAgIGNv
dW50ZXIuQWRkVGltZShzYW1wbGUpOyBcCiAgfSB3aGlsZSAoMCkKCiNkZWZpbmUgVU1BX0hJU1RP
R1JBTV9DTElQUEVEX1RJTUVTKG5hbWUsIHNhbXBsZSwgbWluLCBtYXgsIGJ1Y2tldF9jb3VudCkg
ZG8geyBcCiAgICBzdGF0aWMgSGlzdG9ncmFtIGNvdW50ZXIoKG5hbWUpLCBtaW4sIG1heCwgYnVj
a2V0X2NvdW50KTsgXAogICAgY291bnRlci5TZXRGbGFncyhrVW1hVGFyZ2V0ZWRIaXN0b2dyYW1G
bGFnKTsgXAogICAgaWYgKChzYW1wbGUpIDwgKG1heCkpIGNvdW50ZXIuQWRkVGltZShzYW1wbGUp
OyBcCiAgfSB3aGlsZSAoMCkKCiNkZWZpbmUgVU1BX0hJU1RPR1JBTV9DT1VOVFMobmFtZSwgc2Ft
cGxlKSBkbyB7IFwKICAgIHN0YXRpYyBIaXN0b2dyYW0gY291bnRlcigobmFtZSksIDEsIDEwMDAw
MDAsIDUwKTsgXAogICAgY291bnRlci5TZXRGbGFncyhrVW1hVGFyZ2V0ZWRIaXN0b2dyYW1GbGFn
KTsgXAogICAgY291bnRlci5BZGQoc2FtcGxlKTsgXAogIH0gd2hpbGUgKDApCgojZGVmaW5lIFVN
QV9ISVNUT0dSQU1fQ09VTlRTXzEwMChuYW1lLCBzYW1wbGUpIGRvIHsgXAogICAgc3RhdGljIEhp
c3RvZ3JhbSBjb3VudGVyKChuYW1lKSwgMSwgMTAwLCA1MCk7IFwKICAgIGNvdW50ZXIuU2V0Rmxh
Z3Moa1VtYVRhcmdldGVkSGlzdG9ncmFtRmxhZyk7IFwKICAgIGNvdW50ZXIuQWRkKHNhbXBsZSk7
IFwKICB9IHdoaWxlICgwKQoKI2RlZmluZSBVTUFfSElTVE9HUkFNX0NPVU5UU18xMDAwMChuYW1l
LCBzYW1wbGUpIGRvIHsgXAogICAgc3RhdGljIEhpc3RvZ3JhbSBjb3VudGVyKChuYW1lKSwgMSwg
MTAwMDAsIDUwKTsgXAogICAgY291bnRlci5TZXRGbGFncyhrVW1hVGFyZ2V0ZWRIaXN0b2dyYW1G
bGFnKTsgXAogICAgY291bnRlci5BZGQoc2FtcGxlKTsgXAogIH0gd2hpbGUgKDApCgojZGVmaW5l
IFVNQV9ISVNUT0dSQU1fQ1VTVE9NX0NPVU5UUyhuYW1lLCBzYW1wbGUsIG1pbiwgbWF4LCBidWNr
ZXRfY291bnQpIGRvIHsgXAogICAgc3RhdGljIEhpc3RvZ3JhbSBjb3VudGVyKChuYW1lKSwgbWlu
LCBtYXgsIGJ1Y2tldF9jb3VudCk7IFwKICAgIGNvdW50ZXIuU2V0RmxhZ3Moa1VtYVRhcmdldGVk
SGlzdG9ncmFtRmxhZyk7IFwKICAgIGNvdW50ZXIuQWRkKHNhbXBsZSk7IFwKICB9IHdoaWxlICgw
KQoKI2RlZmluZSBVTUFfSElTVE9HUkFNX01FTU9SWV9LQihuYW1lLCBzYW1wbGUpIGRvIHsgXAog
ICAgc3RhdGljIEhpc3RvZ3JhbSBjb3VudGVyKChuYW1lKSwgMTAwMCwgNTAwMDAwLCA1MCk7IFwK
ICAgIGNvdW50ZXIuU2V0RmxhZ3Moa1VtYVRhcmdldGVkSGlzdG9ncmFtRmxhZyk7IFwKICAgIGNv
dW50ZXIuQWRkKHNhbXBsZSk7IFwKICB9IHdoaWxlICgwKQoKI2RlZmluZSBVTUFfSElTVE9HUkFN
X01FTU9SWV9NQihuYW1lLCBzYW1wbGUpIGRvIHsgXAogICAgc3RhdGljIEhpc3RvZ3JhbSBjb3Vu
dGVyKChuYW1lKSwgMSwgMTAwMCwgNTApOyBcCiAgICBjb3VudGVyLlNldEZsYWdzKGtVbWFUYXJn
ZXRlZEhpc3RvZ3JhbUZsYWcpOyBcCiAgICBjb3VudGVyLkFkZChzYW1wbGUpOyBcCiAgfSB3aGls
ZSAoMCkKCiNkZWZpbmUgVU1BX0hJU1RPR1JBTV9QRVJDRU5UQUdFKG5hbWUsIHVuZGVyX29uZV9o
dW5kcmVkKSBkbyB7IFwKICAgIHN0YXRpYyBMaW5lYXJIaXN0b2dyYW0gY291bnRlcigobmFtZSks
IDEsIDEwMCwgMTAxKTsgXAogICAgY291bnRlci5TZXRGbGFncyhrVW1hVGFyZ2V0ZWRIaXN0b2dy
YW1GbGFnKTsgXAogICAgY291bnRlci5BZGQodW5kZXJfb25lX2h1bmRyZWQpOyBcCiAgfSB3aGls
ZSAoMCkKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpjbGFzcyBQaWNrbGU7CgpjbGFzcyBIaXN0
b2dyYW0gewogcHVibGljOgogIHR5cGVkZWYgaW50IFNhbXBsZTsgIC8vIFVzZWQgZm9yIHNhbXBs
ZXMgKGFuZCByYW5nZXMgb2Ygc2FtcGxlcykuCiAgdHlwZWRlZiBpbnQgQ291bnQ7ICAvLyBVc2Vk
IHRvIGNvdW50IHNhbXBsZXMgaW4gYSBidWNrZXQuCiAgc3RhdGljIGNvbnN0IFNhbXBsZSBrU2Ft
cGxlVHlwZV9NQVggPSBJTlRfTUFYOwoKICB0eXBlZGVmIHN0ZDo6dmVjdG9yPENvdW50PiBDb3Vu
dHM7CiAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxTYW1wbGU+IFJhbmdlczsKCiAgc3RhdGljIGNvbnN0
IGludCBrSGV4UmFuZ2VQcmludGluZ0ZsYWc7CgogIGVudW0gQnVja2V0TGF5b3V0IHsKICAgIEVY
UE9ORU5USUFMLAogICAgTElORUFSCiAgfTsKCiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLy8g
U3RhdGlzdGljIHZhbHVlcywgZGV2ZWxvcGVkIG92ZXIgdGhlIGxpZmUgb2YgdGhlIGhpc3RvZ3Jh
bS4KCiAgY2xhc3MgU2FtcGxlU2V0IHsKICAgcHVibGljOgogICAgZXhwbGljaXQgU2FtcGxlU2V0
KCk7CiAgICAvLyBBZGp1c3Qgc2l6ZSBvZiBjb3VudHNfIGZvciB1c2Ugd2l0aCBnaXZlbiBoaXN0
b2dyYW0uCiAgICB2b2lkIFJlc2l6ZShjb25zdCBIaXN0b2dyYW0mIGhpc3RvZ3JhbSk7CiAgICB2
b2lkIENoZWNrU2l6ZShjb25zdCBIaXN0b2dyYW0mIGhpc3RvZ3JhbSkgY29uc3Q7CgogICAgLy8g
QWNjZXNzb3IgZm9yIGhpc3RvZ3JhbSB0byBtYWtlIHJvdXRpbmUgYWRkaXRpb25zLgogICAgdm9p
ZCBBY2N1bXVsYXRlKFNhbXBsZSB2YWx1ZSwgQ291bnQgY291bnQsIHNpemVfdCBpbmRleCk7Cgog
ICAgLy8gQWNjZXNzb3IgbWV0aG9kcy4KICAgIENvdW50IGNvdW50cyhzaXplX3QgaSkgY29uc3Qg
eyByZXR1cm4gY291bnRzX1tpXTsgfQogICAgQ291bnQgVG90YWxDb3VudCgpIGNvbnN0OwogICAg
aW50NjQgc3VtKCkgY29uc3QgeyByZXR1cm4gc3VtXzsgfQogICAgaW50NjQgc3F1YXJlX3N1bSgp
IGNvbnN0IHsgcmV0dXJuIHNxdWFyZV9zdW1fOyB9CgogICAgLy8gQXJpdGhtZXRpYyBtYW5pcHVs
YXRpb24gb2YgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiB0aGUgc2V0LgogICAgdm9pZCBBZGQo
Y29uc3QgU2FtcGxlU2V0JiBvdGhlcik7CiAgICB2b2lkIFN1YnRyYWN0KGNvbnN0IFNhbXBsZVNl
dCYgb3RoZXIpOwoKICAgIGJvb2wgU2VyaWFsaXplKFBpY2tsZSogcGlja2xlKSBjb25zdDsKICAg
IGJvb2wgRGVzZXJpYWxpemUodm9pZCoqIGl0ZXIsIGNvbnN0IFBpY2tsZSYgcGlja2xlKTsKCiAg
IHByb3RlY3RlZDoKICAgIC8vIEFjdHVhbCBoaXN0b2dyYW0gZGF0YSBpcyBzdG9yZWQgaW4gYnVj
a2V0cywgc2hvd2luZyB0aGUgY291bnQgb2YgdmFsdWVzCiAgICAvLyB0aGF0IGZpdCBpbnRvIGVh
Y2ggYnVja2V0LgogICAgQ291bnRzIGNvdW50c187CgogICAgLy8gU2F2ZSBzaW1wbGUgc3RhdHMg
bG9jYWxseS4gIE5vdGUgdGhhdCB0aGlzIE1JR0hUIGdldCBkb25lIGluIGJhc2UgY2xhc3MKICAg
IC8vIHdpdGhvdXQgc2hhcmVkIG1lbW9yeSBhdCBzb21lIHBvaW50LgogICAgaW50NjQgc3VtXzsg
ICAgICAgICAvLyBzdW0gb2Ygc2FtcGxlcy4KICAgIGludDY0IHNxdWFyZV9zdW1fOyAgLy8gc3Vt
IG9mIHNxdWFyZXMgb2Ygc2FtcGxlcy4KICB9OwogIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICBI
aXN0b2dyYW0oY29uc3QgY2hhciogbmFtZSwgU2FtcGxlIG1pbmltdW0sCiAgICAgICAgICAgIFNh
bXBsZSBtYXhpbXVtLCBzaXplX3QgYnVja2V0X2NvdW50KTsKICBIaXN0b2dyYW0oY29uc3QgY2hh
ciogbmFtZSwgYmFzZTo6VGltZURlbHRhIG1pbmltdW0sCiAgICAgICAgICAgIGJhc2U6OlRpbWVE
ZWx0YSBtYXhpbXVtLCBzaXplX3QgYnVja2V0X2NvdW50KTsKICB2aXJ0dWFsIH5IaXN0b2dyYW0o
KTsKCiAgdm9pZCBBZGQoaW50IHZhbHVlKTsKICAvLyBBY2NlcHQgYSBUaW1lRGVsdGEgdG8gaW5j
cmVtZW50LgogIHZvaWQgQWRkVGltZShiYXNlOjpUaW1lRGVsdGEgdGltZSkgewogICAgQWRkKHN0
YXRpY19jYXN0PGludD4odGltZS5Jbk1pbGxpc2Vjb25kcygpKSk7CiAgfQoKICB2b2lkIEFkZFNh
bXBsZVNldChjb25zdCBTYW1wbGVTZXQmIHNhbXBsZSk7CgogIC8vIFRoZSBmb2xsb3dpbmcgbWV0
aG9kcyBwcm92aWRlIGdyYXBoaWNhbCBoaXN0b2dyYW0gZGlzcGxheXMuCiAgdm9pZCBXcml0ZUhU
TUxHcmFwaChzdGQ6OnN0cmluZyogb3V0cHV0KSBjb25zdDsKICB2b2lkIFdyaXRlQXNjaWkoYm9v
bCBncmFwaF9pdCwgY29uc3Qgc3RkOjpzdHJpbmcmIG5ld2xpbmUsCiAgICAgICAgICAgICAgICAg
IHN0ZDo6c3RyaW5nKiBvdXRwdXQpIGNvbnN0OwoKICAvLyBTdXBwb3J0IGdlbmVyaWMgZmxhZ2dp
bmcgb2YgSGlzdG9ncmFtcy4KICAvLyAweDEgQ3VycmVudGx5IHVzZWQgdG8gbWFyayB0aGlzIGhp
c3RvZ3JhbSB0byBiZSByZWNvcmRlZCBieSBVTUEuLgogIC8vIDB4ODAwMCBtZWFucyBwcmludCBy
YW5nZXMgaW4gaGV4LgogIHZvaWQgU2V0RmxhZ3MoaW50IGZsYWdzKSB7IGZsYWdzXyB8PSBmbGFn
czsgfQogIHZvaWQgQ2xlYXJGbGFncyhpbnQgZmxhZ3MpIHsgZmxhZ3NfICY9IH5mbGFnczsgfQog
IGludCBmbGFncygpIGNvbnN0IHsgcmV0dXJuIGZsYWdzXzsgfQoKICB2aXJ0dWFsIEJ1Y2tldExh
eW91dCBoaXN0b2dyYW1fdHlwZSgpIGNvbnN0IHsgcmV0dXJuIEVYUE9ORU5USUFMOyB9CgogIC8v
IENvbnZlbmllbmNlIG1ldGhvZHMgZm9yIHNlcmlhbGl6aW5nL2Rlc2VyaWFsaXppbmcgdGhlIGhp
c3RvZ3JhbXMuCiAgLy8gSGlzdG9ncmFtcyBmcm9tIFJlbmRlcmVyIHByb2Nlc3MgYXJlIHNlcmlh
bGl6ZWQgYW5kIHNlbnQgdG8gdGhlIGJyb3dzZXIuCiAgLy8gQnJvd3NlciBwcm9jZXNzIHJlY29u
c3RydWN0cyB0aGUgaGlzdG9ncmFtIGZyb20gdGhlIHBpY2tsZWQgdmVyc2lvbgogIC8vIGFjY3Vt
dWxhdGVzIHRoZSBicm93c2VyLXNpZGUgc2hhZG93IGNvcHkgb2YgaGlzdG9ncmFtcyAodGhhdCBt
aXJyb3IKICAvLyBoaXN0b2dyYW1zIGNyZWF0ZWQgaW4gdGhlIHJlbmRlcmVyKS4KCiAgLy8gU2Vy
aWFsaXplIHRoZSBnaXZlbiBzbmFwc2hvdCBvZiBhIEhpc3RvZ3JhbSBpbnRvIGEgU3RyaW5nLiBV
c2VzCiAgLy8gUGlja2xlIGNsYXNzIHRvIGZsYXR0ZW4gdGhlIG9iamVjdC4KICBzdGF0aWMgc3Rk
OjpzdHJpbmcgU2VyaWFsaXplSGlzdG9ncmFtSW5mbyhjb25zdCBIaXN0b2dyYW0mIGhpc3RvZ3Jh
bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTYW1w
bGVTZXQmIHNuYXBzaG90KTsKICAvLyBUaGUgZm9sbG93aW5nIG1ldGhvZCBhY2NlcHRzIGEgbGlz
dCBvZiBwaWNrbGVkIGhpc3RvZ3JhbXMgYW5kCiAgLy8gYnVpbGRzIGEgaGlzdG9ncmFtIGFuZCB1
cGRhdGVzIHNoYWRvdyBjb3B5IG9mIGhpc3RvZ3JhbSBkYXRhIGluIHRoZQogIC8vIGJyb3dzZXIg
cHJvY2Vzcy4KICBzdGF0aWMgYm9vbCBEZXNlcmlhbGl6ZUhpc3RvZ3JhbUluZm8oY29uc3Qgc3Rk
OjpzdHJpbmcmIGhpc3RvZ3JhbV9pbmZvKTsKCgogIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIC8v
IEFjY2Vzc29ycyBmb3Igc2VyaWFsaXphdGlvbiBhbmQgdGVzdGluZy4KICAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KICBjb25zdCBzdGQ6OnN0cmluZyBoaXN0b2dyYW1fbmFtZSgpIGNvbnN0IHsgcmV0
dXJuIGhpc3RvZ3JhbV9uYW1lXzsgfQogIFNhbXBsZSBkZWNsYXJlZF9taW4oKSBjb25zdCB7IHJl
dHVybiBkZWNsYXJlZF9taW5fOyB9CiAgU2FtcGxlIGRlY2xhcmVkX21heCgpIGNvbnN0IHsgcmV0
dXJuIGRlY2xhcmVkX21heF87IH0KICB2aXJ0dWFsIFNhbXBsZSByYW5nZXMoc2l6ZV90IGkpIGNv
bnN0IHsgcmV0dXJuIHJhbmdlc19baV07fQogIHZpcnR1YWwgc2l6ZV90IGJ1Y2tldF9jb3VudCgp
IGNvbnN0IHsgcmV0dXJuIGJ1Y2tldF9jb3VudF87IH0KICAvLyBTbmFwc2hvdCB0aGUgY3VycmVu
dCBjb21wbGV0ZSBzZXQgb2Ygc2FtcGxlIGRhdGEuCiAgLy8gT3ZlcnJpZGUgd2l0aCBhdG9taWMv
bG9ja2VkIHNuYXBzaG90IGlmIG5lZWRlZC4KICB2aXJ0dWFsIHZvaWQgU25hcHNob3RTYW1wbGUo
U2FtcGxlU2V0KiBzYW1wbGUpIGNvbnN0OwoKIHByb3RlY3RlZDoKICAvLyBNZXRob2QgdG8gb3Zl
cnJpZGUgdG8gc2tpcCB0aGUgZGlzcGxheSBvZiB0aGUgaSd0aCBidWNrZXQgaWYgaXQncyBlbXB0
eS4KICB2aXJ0dWFsIGJvb2wgUHJpbnRFbXB0eUJ1Y2tldChzaXplX3QgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KCiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLy8gTWV0aG9kcyB0byBv
dmVycmlkZSB0byBjcmVhdGUgaGlzdG9ncmFtIHdpdGggZGlmZmVyZW50IGJ1Y2tldCB3aWR0aHMu
CiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLy8gSW5pdGlhbGl6ZSByYW5nZXNfIG1hcHBpbmcu
CiAgdmlydHVhbCB2b2lkIEluaXRpYWxpemVCdWNrZXRSYW5nZSgpOwogIC8vIEZpbmQgYnVja2V0
IHRvIGluY3JlbWVudCBmb3Igc2FtcGxlIHZhbHVlLgogIHZpcnR1YWwgc2l6ZV90IEJ1Y2tldElu
ZGV4KFNhbXBsZSB2YWx1ZSkgY29uc3Q7CiAgLy8gR2V0IG5vcm1hbGl6ZWQgc2l6ZSwgcmVsYXRp
dmUgdG8gdGhlIHJhbmdlc19baV0uCiAgdmlydHVhbCBkb3VibGUgR2V0QnVja2V0U2l6ZShDb3Vu
dCBjdXJyZW50LCBzaXplX3QgaSkgY29uc3Q7CgogIC8vIFJldHVybiBhIHN0cmluZyBkZXNjcmlw
dGlvbiBvZiB3aGF0IGdvZXMgaW4gYSBnaXZlbiBidWNrZXQuCiAgLy8gTW9zdCBjb21tb25seSB0
aGlzIGlzIHRoZSBudW1lcmljIHZhbHVlLCBidXQgaW4gZGVyaXZlZCBjbGFzc2VzIGl0IG1heQog
IC8vIGJlIGEgbmFtZSAob3Igc3RyaW5nIGRlc2NyaXB0aW9uKSBnaXZlbiB0byB0aGUgYnVja2V0
LgogIHZpcnR1YWwgY29uc3Qgc3RkOjpzdHJpbmcgR2V0QXNjaWlCdWNrZXRSYW5nZShzaXplX3Qg
aXQpIGNvbnN0OwoKICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAvLyBNZXRob2RzIHRvIG92ZXJy
aWRlIHRvIGNyZWF0ZSB0aHJlYWQgc2FmZSBoaXN0b2dyYW0uCiAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAgLy8gVXBkYXRlIGFsbCBvdXIgaW50ZXJuYWwgZGF0YSwgaW5jbHVkaW5nIGhpc3RvZ3Jh
bQogIHZpcnR1YWwgdm9pZCBBY2N1bXVsYXRlKFNhbXBsZSB2YWx1ZSwgQ291bnQgY291bnQsIHNp
emVfdCBpbmRleCk7CgogIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIC8vIEFjY2Vzc29ycyBmb3Ig
ZGVyaXZlZCBjbGFzc2VzLgogIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIHZvaWQgU2V0QnVja2V0
UmFuZ2Uoc2l6ZV90IGksIFNhbXBsZSB2YWx1ZSk7CgogIC8vIFZhbGlkYXRlIHRoYXQgcmFuZ2Vz
XyB3YXMgY3JlYXRlZCBzZW5zaWJseSAodG9wIGFuZCBib3R0b20gcmFuZ2UKICAvLyB2YWx1ZXMg
cmVsYXRlIHByb3Blcmx5IHRvIHRoZSBkZWNsYXJlZF9taW5fIGFuZCBkZWNsYXJlZF9tYXhfKS4u
CiAgYm9vbCBWYWxpZGF0ZUJ1Y2tldFJhbmdlcygpIGNvbnN0OwoKIHByaXZhdGU6CiAgLy8gUG9z
dCBjb25zdHJ1Y3RvciBpbml0aWFsaXphdGlvbi4KICB2b2lkIEluaXRpYWxpemUoKTsKCiAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAgLy8gSGVscGVycyBmb3IgZW1pdHRpbmcgQXNjaWkgZ3JhcGhp
Yy4gIEVhY2ggbWV0aG9kIGFwcGVuZHMgZGF0YSB0byBvdXRwdXQuCgogIC8vIEZpbmQgb3V0IGhv
dyBsYXJnZSB0aGUgKGdyYXBoaWNhbGx5KSB0aGUgbGFyZ2VzdCBidWNrZXQgd2lsbCBhcHBlYXIg
dG8gYmUuCiAgZG91YmxlIEdldFBlYWtCdWNrZXRTaXplKGNvbnN0IFNhbXBsZVNldCYgc25hcHNo
b3QpIGNvbnN0OwoKICAvLyBXcml0ZSBhIGNvbW1vbiBoZWFkZXIgbWVzc2FnZSBkZXNjcmliaW5n
IHRoaXMgaGlzdG9ncmFtLgogIHZvaWQgV3JpdGVBc2NpaUhlYWRlcihjb25zdCBTYW1wbGVTZXQm
IHNuYXBzaG90LAogICAgICAgICAgICAgICAgICAgICAgICBDb3VudCBzYW1wbGVfY291bnQsIHN0
ZDo6c3RyaW5nKiBvdXRwdXQpIGNvbnN0OwoKICAvLyBXcml0ZSBpbmZvcm1hdGlvbiBhYm91dCBw
cmV2aW91cywgY3VycmVudCwgYW5kIG5leHQgYnVja2V0cy4KICAvLyBJbmZvcm1hdGlvbiBzdWNo
IGFzIGN1bXVsYXRpdmUgcGVyY2VudGFnZSwgZXRjLgogIHZvaWQgV3JpdGVBc2NpaUJ1Y2tldENv
bnRleHQoY29uc3QgaW50NjQgcGFzdCwgY29uc3QgQ291bnQgY3VycmVudCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDY0IHJlbWFpbmluZywgY29uc3Qgc2l6ZV90IGks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogb3V0cHV0KSBjb25z
dDsKCiAgLy8gV3JpdGUgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgYnVja2V0IGNvbnRlbnRz
IChyZWxhdGl2ZSB0byBoaXN0b2dyYW0pLgogIC8vIE91dHB1dCBpcyB0aGUgY291bnQgaW4gdGhl
IGJ1Y2tldHMsIGFzIHdlbGwgYXMgdGhlIHBlcmNlbnRhZ2UuCiAgdm9pZCBXcml0ZUFzY2lpQnVj
a2V0VmFsdWUoQ291bnQgY3VycmVudCwgZG91YmxlIHNjYWxlZF9zdW0sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIG91dHB1dCkgY29uc3Q7CgogIC8vIFByb2R1Y2Ug
YWN0dWFsIGdyYXBoIChzZXQgb2YgYmxhbmsgdnMgbm9uIGJsYW5rIGNoYXIncykgZm9yIGEgYnVj
a2V0LgogIHZvaWQgV3JpdGVBc2NpaUJ1Y2tldEdyYXBoKGRvdWJsZSBjdXJyZW50X3NpemUsIGRv
dWJsZSBtYXhfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyog
b3V0cHV0KSBjb25zdDsKCiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLy8gSW52YXJpYW50IHZh
bHVlcyBzZXQgYXQvbmVhciBjb25zdHJ1Y3Rpb24gdGltZQoKICAvLyBBU0NJSSB2ZXJzaW9uIG9m
IG9yaWdpbmFsIG5hbWUgZ2l2ZW4gdG8gdGhlIGNvbnN0cnVjdG9yLiAgQWxsIGlkZW50aWNhbGx5
CiAgLy8gbmFtZWQgaW5zdGFuY2VzIHdpbGwgIGJlIGNvYWxlc2NlZCBjcm9zcy1wcm9qZWN0IFRP
RE8oamFyKS4KICAvLyBJZiBhIHVzZXIgbmVlZHMgb25lIGhpc3RvZ3JhbSBuYW1lIHRvIGJlIGNh
bGxlZCBieSBzZXZlcmFsIHBsYWNlcyBpbiBhCiAgLy8gc2luZ2xlIHByb2Nlc3MsIGEgY2VudHJh
bCBmdW5jdGlvbiBzaG91bGQgYmUgZGVmaW5lZCBieSB0ZWggdXNlciwgd2hpY2gKICAvLyBkZWZp
bnMgdGhlIHNpbmdsZSBkZWNsYXJlZCBpbnN0YW5jZSBvZiB0aGUgbmFtZWQgaGlzdG9ncmFtLgog
IGNvbnN0IHN0ZDo6c3RyaW5nIGhpc3RvZ3JhbV9uYW1lXzsKICBTYW1wbGUgZGVjbGFyZWRfbWlu
XzsgIC8vIExlc3MgdGhhbiB0aGlzIGdvZXMgaW50byBjb3VudHNfWzBdCiAgU2FtcGxlIGRlY2xh
cmVkX21heF87ICAvLyBPdmVyIHRoaXMgZ29lcyBpbnRvIGNvdW50c19bYnVja2V0X2NvdW50XyAt
IDFdLgogIHNpemVfdCBidWNrZXRfY291bnRfOyAgLy8gRGltZW5zaW9uIG9mIGNvdW50c19bXS4K
CiAgLy8gRmxhZyB0aGUgaGlzdG9ncmFtIGZvciByZWNvcmRpbmcgYnkgVU1BIHZpYSBtZXRyaWNf
c2VydmljZXMuaC4KICBpbnQgZmxhZ3NfOwoKICAvLyBGb3IgZWFjaCBpbmRleCwgc2hvdyB0aGUg
bGVhc3QgdmFsdWUgdGhhdCBjYW4gYmUgc3RvcmVkIGluIHRoZQogIC8vIGNvcnJlc3BvbmRpbmcg
YnVja2V0LiBXZSBhbHNvIGFwcGVuZCBvbmUgZXh0cmEgZWxlbWVudCBpbiB0aGlzIGFycmF5LAog
IC8vIGNvbnRhaW5pbmcga1NhbXBsZVR5cGVfTUFYLCB0byBtYWtlIGNhbGN1bGF0aW9ucyBlYXN5
LgogIC8vIFRoZSBkaW1lbnNpb24gb2YgcmFuZ2VzXyBpcyBidWNrZXRfY291bnQgKyAxLgogIFJh
bmdlcyByYW5nZXNfOwoKICAvLyBGaW5hbGx5LCBwcm92aWRlIHRoZSBzdGF0ZSB0aGF0IGNoYW5n
ZXMgd2l0aCB0aGUgYWRkaXRpb24gb2YgZWFjaCBuZXcKICAvLyBzYW1wbGUuCiAgU2FtcGxlU2V0
IHNhbXBsZV87CgogIC8vIEluZGljYXRlIGlmIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLgogIGJv
b2wgcmVnaXN0ZXJlZF87CgogIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihIaXN0b2dyYW0pOwp9
OwoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIExpbmVhckhpc3RvZ3JhbSBpcyBhIG1vcmUg
dHJhZGl0aW9uYWwgaGlzdG9ncmFtLCB3aXRoIGV2ZW5seSBzcGFjZWQKLy8gYnVja2V0cy4KY2xh
c3MgTGluZWFySGlzdG9ncmFtIDogcHVibGljIEhpc3RvZ3JhbSB7CiBwdWJsaWM6CiAgc3RydWN0
IERlc2NyaXB0aW9uUGFpciB7CiAgICBTYW1wbGUgc2FtcGxlOwogICAgY29uc3QgY2hhciogZGVz
Y3JpcHRpb247ICAvLyBOdWxsIG1lYW5zIGVuZCBvZiBhIGxpc3Qgb2YgcGFpcnMuCiAgfTsKICBM
aW5lYXJIaXN0b2dyYW0oY29uc3QgY2hhciogbmFtZSwgU2FtcGxlIG1pbmltdW0sCiAgICAgICAg
ICAgICAgICAgIFNhbXBsZSBtYXhpbXVtLCBzaXplX3QgYnVja2V0X2NvdW50KTsKCiAgTGluZWFy
SGlzdG9ncmFtKGNvbnN0IGNoYXIqIG5hbWUsIGJhc2U6OlRpbWVEZWx0YSBtaW5pbXVtLAogICAg
ICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEgbWF4aW11bSwgc2l6ZV90IGJ1Y2tldF9jb3Vu
dCk7CiAgfkxpbmVhckhpc3RvZ3JhbSgpIHt9CgogIC8vIFN0b3JlIGEgbGlzdCBvZiBudW1iZXIv
dGV4dCB2YWx1ZXMgZm9yIHVzZSBpbiByZW5kZXJpbmcgdGhlIGhpc3RvZ3JhbS4KICAvLyBUaGUg
bGFzdCBlbGVtZW50IGluIHRoZSBhcnJheSBoYXMgYSBudWxsIGluIGl0cyAiZGVzY3JpcHRpb24i
IHNsb3QuCiAgdm9pZCBTZXRSYW5nZURlc2NyaXB0aW9ucyhjb25zdCBEZXNjcmlwdGlvblBhaXIg
ZGVzY3JpcHRpb25zW10pOwoKICB2aXJ0dWFsIEJ1Y2tldExheW91dCBoaXN0b2dyYW1fdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIExJTkVBUjsgfQoKIHByb3RlY3RlZDoKICAvLyBJbml0aWFsaXplIHJh
bmdlc18gbWFwcGluZy4KICB2aXJ0dWFsIHZvaWQgSW5pdGlhbGl6ZUJ1Y2tldFJhbmdlKCk7CiAg
dmlydHVhbCBkb3VibGUgR2V0QnVja2V0U2l6ZShDb3VudCBjdXJyZW50LCBzaXplX3QgaSkgY29u
c3Q7CgogIC8vIElmIHdlIGhhdmUgYSBkZXNjcmlwdGlvbiBmb3IgYSBidWNrZXQsIHRoZW4gcmV0
dXJuIHRoYXQuICBPdGhlcndpc2UKICAvLyBsZXQgcGFyZW50IGNsYXNzIHByb3ZpZGUgYSAobnVt
ZXJpYykgZGVzY3JpcHRpb24uCiAgdmlydHVhbCBjb25zdCBzdGQ6OnN0cmluZyBHZXRBc2NpaUJ1
Y2tldFJhbmdlKHNpemVfdCBpKSBjb25zdDsKCiAgLy8gU2tpcCBwcmludGluZyBvZiBuYW1lIGZv
ciBudW1lcmljIHJhbmdlIGlmIHdlIGhhdmUgYSBuYW1lIChhbmQgaWYgdGhpcyBpcwogIC8vIGFu
IGVtcHR5IGJ1Y2tldCkuCiAgdmlydHVhbCBib29sIFByaW50RW1wdHlCdWNrZXQoc2l6ZV90IGlu
ZGV4KSBjb25zdDsKCiBwcml2YXRlOgogIC8vIEZvciBzb21lIHJhbmdlcywgd2Ugc3RvcmUgYSBw
cmludGFibGUgZGVzY3JpcHRpb24gb2YgYSBidWNrZXQgcmFuZ2UuCiAgLy8gSWYgdGhlcmUgaXMg
bm8gZGVzY2lwdGlvbiwgdGhlbiBHZXRBc2NpaUJ1Y2tldFJhbmdlKCkgdXNlcyBwYXJlbnQgY2xh
c3MKICAvLyB0byBwcm92aWRlIGEgZGVzY3JpcHRpb24uCiAgdHlwZWRlZiBzdGQ6Om1hcDxTYW1w
bGUsIHN0ZDo6c3RyaW5nPiBCdWNrZXREZXNjcmlwdGlvbk1hcDsKICBCdWNrZXREZXNjcmlwdGlv
bk1hcCBidWNrZXRfZGVzY3JpcHRpb25fOwoKICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oTGlu
ZWFySGlzdG9ncmFtKTsKfTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyBCb29sZWFuSGlz
dG9ncmFtIGlzIGEgaGlzdG9ncmFtIGZvciBib29sZWFucy4KY2xhc3MgQm9vbGVhbkhpc3RvZ3Jh
bSA6IHB1YmxpYyBMaW5lYXJIaXN0b2dyYW0gewogcHVibGljOgogIGV4cGxpY2l0IEJvb2xlYW5I
aXN0b2dyYW0oY29uc3QgY2hhciogbmFtZSkKICAgIDogTGluZWFySGlzdG9ncmFtKG5hbWUsIDAs
IDIsIDMpIHsKICB9CgogIHZvaWQgQWRkQm9vbGVhbihib29sIHZhbHVlKSB7IEFkZCh2YWx1ZSA/
IDEgOiAwKTsgfQoKIHByaXZhdGU6CiAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEJvb2xlYW5I
aXN0b2dyYW0pOwp9OwoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gVGhpcyBzZWN0aW9uIHBy
b3ZpZGVzIGltcGxlbWVudGF0aW9uIGZvciBUaHJlYWRTYWZlSGlzdG9ncmFtLgovLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQoKY2xhc3MgVGhyZWFkU2FmZUhpc3RvZ3JhbSA6IHB1YmxpYyBIaXN0b2dy
YW0gewogcHVibGljOgogIFRocmVhZFNhZmVIaXN0b2dyYW0oY29uc3QgY2hhciogbmFtZSwgU2Ft
cGxlIG1pbmltdW0sCiAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUgbWF4aW11bSwgc2l6ZV90
IGJ1Y2tldF9jb3VudCk7CgogIC8vIFByb3ZpZGUgdGhlIGFuYWxvZyB0byBBZGQoKQogIHZvaWQg
UmVtb3ZlKGludCB2YWx1ZSk7CgogcHJvdGVjdGVkOgogIC8vIFByb3ZpZGUgbG9ja2VkIHZlcnNp
b25zIHRvIGdldCBwcmVjaXNlIGNvdW50cy4KICB2aXJ0dWFsIHZvaWQgQWNjdW11bGF0ZShTYW1w
bGUgdmFsdWUsIENvdW50IGNvdW50LCBzaXplX3QgaW5kZXgpOwoKICB2aXJ0dWFsIHZvaWQgU25h
cHNob3RTYW1wbGUoU2FtcGxlU2V0KiBzYW1wbGUpIGNvbnN0OwoKIHByaXZhdGU6CiAgbXV0YWJs
ZSBMb2NrIGxvY2tfOwoKICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGhyZWFkU2FmZUhpc3Rv
Z3JhbSk7Cn07CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBTdGF0aXN0aWNzUmVjb3JkZXIg
aGFuZGxlcyBhbGwgaGlzdG9ncmFtcyBpbiB0aGUgc3lzdGVtLiAgSXQgcHJvdmlkZXMgYQovLyBn
ZW5lcmFsIHBsYWNlIGZvciBoaXN0b2dyYW1zIHRvIHJlZ2lzdGVyLCBhbmQgc3VwcG9ydHMgYSBn
bG9iYWwgQVBJIGZvcgovLyBhY2Nlc3NpbmcgKGkuZS4sIGR1bXBpbmcsIG9yIGdyYXBoaW5nKSB0
aGUgZGF0YSBpbiBhbGwgdGhlIGhpc3RvZ3JhbXMuCgpjbGFzcyBTdGF0aXN0aWNzUmVjb3JkZXIg
ewogcHVibGljOgogIHR5cGVkZWYgc3RkOjp2ZWN0b3I8SGlzdG9ncmFtKj4gSGlzdG9ncmFtczsK
CiAgU3RhdGlzdGljc1JlY29yZGVyKCk7CgogIH5TdGF0aXN0aWNzUmVjb3JkZXIoKTsKCiAgLy8g
RmluZCBvdXQgaWYgaGlzdG9ncmFtcyBjYW4gbm93IGJlIHJlZ2lzdGVyZWQgaW50byBvdXIgbGlz
dC4KICBzdGF0aWMgYm9vbCBXYXNTdGFydGVkKCk7CgogIC8vIFJlZ2lzdGVyLCBvciBhZGQgYSBu
ZXcgaGlzdG9ncmFtIHRvIHRoZSBjb2xsZWN0aW9uIG9mIHN0YXRpc3RpY3MuCiAgLy8gUmV0dXJu
IHRydWUgaWYgcmVnaXN0ZXJlZC4KICBzdGF0aWMgYm9vbCBSZWdpc3RlcihIaXN0b2dyYW0qIGhp
c3RvZ3JhbSk7CiAgLy8gVW5yZWdpc3Rlciwgb3IgcmVtb3ZlLCBhIGhpc3RvZ3JhbSBmcm9tIHRo
ZSBjb2xsZWN0aW9uIG9mIHN0YXRpc3RpY3MuCiAgc3RhdGljIHZvaWQgVW5SZWdpc3RlcihIaXN0
b2dyYW0qIGhpc3RvZ3JhbSk7CgogIC8vIE1ldGhvZHMgZm9yIHByaW50aW5nIGhpc3RvZ3JhbXMu
ICBPbmx5IGhpc3RvZ3JhbXMgd2hpY2ggaGF2ZSBxdWVyeSBhcwogIC8vIGEgc3Vic3RyaW5nIGFy
ZSB3cml0dGVuIHRvIG91dHB1dCAoYW4gZW1wdHkgc3RyaW5nIHdpbGwgcHJvY2VzcyBhbGwKICAv
LyByZWdpc3RlcmVkIGhpc3RvZ3JhbXMpLgogIHN0YXRpYyB2b2lkIFdyaXRlSFRNTEdyYXBoKGNv
bnN0IHN0ZDo6c3RyaW5nJiBxdWVyeSwgc3RkOjpzdHJpbmcqIG91dHB1dCk7CiAgc3RhdGljIHZv
aWQgV3JpdGVHcmFwaChjb25zdCBzdGQ6OnN0cmluZyYgcXVlcnksIHN0ZDo6c3RyaW5nKiBvdXRw
dXQpOwoKICAvLyBNZXRob2QgZm9yIGV4dHJhY3RpbmcgaGlzdG9ncmFtcyB3aGljaCB3ZXJlIG1h
cmtlZCBmb3IgdXNlIGJ5IFVNQS4KICBzdGF0aWMgdm9pZCBHZXRIaXN0b2dyYW1zKEhpc3RvZ3Jh
bXMqIG91dHB1dCk7CgogIC8vIEZpbmQgYSBoaXN0b2dyYW0gYnkgbmFtZS4gIFRoaXMgbWV0aG9k
IGlzIHRocmVhZCBzYWZlLgogIHN0YXRpYyBIaXN0b2dyYW0qIEdldEhpc3RvZ3JhbShjb25zdCBz
dGQ6OnN0cmluZyYgcXVlcnkpOwoKICBzdGF0aWMgdm9pZCBzZXRfZHVtcF9vbl9leGl0KGJvb2wg
ZW5hYmxlKSB7IGR1bXBfb25fZXhpdF8gPSBlbmFibGU7IH0KCiAgLy8gR2V0U25hcHNob3QgY29w
aWVzIHNvbWUgb2YgdGhlIHBvaW50ZXJzIHRvIHJlZ2lzdGVyZWQgaGlzdG9ncmFtcyBpbnRvIHRo
ZQogIC8vIGNhbGxlciBzdXBwbGllZCB2ZWN0b3IgKEhpc3RvZ3JhbXMpLiAgT25seSBoaXN0b2dy
YW1zIHdpdGggbmFtZXMgbWF0Y2hpbmcKICAvLyBxdWVyeSBhcmUgcmV0dXJuZWQuIFRoZSBxdWVy
eSBtdXN0IGJlIGEgc3Vic3RyaW5nIG9mIGhpc3RvZ3JhbSBuYW1lIGZvciBpdHMKICAvLyBwb2lu
dGVyIHRvIGJlIGNvcGllZC4KICBzdGF0aWMgdm9pZCBHZXRTbmFwc2hvdChjb25zdCBzdGQ6OnN0
cmluZyYgcXVlcnksIEhpc3RvZ3JhbXMqIHNuYXBzaG90KTsKCgogcHJpdmF0ZToKICAvLyBXZSBr
ZWVwIGFsbCByZWdpc3RlcmVkIGhpc3RvZ3JhbXMgaW4gYSBtYXAsIGZyb20gbmFtZSB0byBoaXN0
b2dyYW0uCiAgdHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgSGlzdG9ncmFtKj4gSGlzdG9n
cmFtTWFwOwoKICBzdGF0aWMgSGlzdG9ncmFtTWFwKiBoaXN0b2dyYW1zXzsKCiAgLy8gbG9jayBw
cm90ZWN0cyBhY2Nlc3MgdG8gdGhlIGFib3ZlIG1hcC4KICBzdGF0aWMgTG9jayogbG9ja187Cgog
IC8vIER1bXAgYWxsIGtub3duIGhpc3RvZ3JhbXMgdG8gbG9nLgogIHN0YXRpYyBib29sIGR1bXBf
b25fZXhpdF87CgogIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTdGF0aXN0aWNzUmVjb3JkZXIp
Owp9OwoKI2VuZGlmICAvLyBCQVNFX0hJU1RPR1JBTV9IXwoKI2lmbmRlZiBCQVNFX09CU0VSVkVS
X0xJU1RfSF9fCiNkZWZpbmUgQkFTRV9PQlNFUlZFUl9MSVNUX0hfXwoKCi8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLy8KLy8gT1ZFUlZJRVc6Ci8vCi8vICAgQSBjb250YWluZXIgZm9yIGEgbGlzdCBv
ZiBvYnNlcnZlcnMuICBVbmxpa2UgYSBub3JtYWwgU1RMIHZlY3RvciBvciBsaXN0LAovLyAgIHRo
aXMgY29udGFpbmVyIGNhbiBiZSBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uIHdpdGhvdXQgaW52
YWxpZGF0aW5nIHRoZQovLyAgIGl0ZXJhdG9yLiAgU28sIGl0IHNhZmVseSBoYW5kbGVzIHRoZSBj
YXNlIG9mIGFuIG9ic2VydmVyIHJlbW92aW5nIGl0c2VsZgovLyAgIG9yIG90aGVyIG9ic2VydmVy
cyBmcm9tIHRoZSBsaXN0IHdoaWxlIG9ic2VydmVycyBhcmUgYmVpbmcgbm90aWZpZWQuCi8vCi8v
IFRZUElDQUwgVVNBR0U6Ci8vCi8vICAgY2xhc3MgTXlXaWRnZXQgewovLyAgICBwdWJsaWM6Ci8v
ICAgICAuLi4KLy8KLy8gICAgIGNsYXNzIE9ic2VydmVyIHsKLy8gICAgICBwdWJsaWM6Ci8vICAg
ICAgIHZpcnR1YWwgdm9pZCBPbkZvbyhNeVdpZGdldCogdykgPSAwOwovLyAgICAgICB2aXJ0dWFs
IHZvaWQgT25CYXIoTXlXaWRnZXQqIHcsIGludCB4LCBpbnQgeSkgPSAwOwovLyAgICAgfTsKLy8K
Ly8gICAgIHZvaWQgQWRkT2JzZXJ2ZXIoT2JzZXJ2ZXIqIG9icykgewovLyAgICAgICBvYnNlcnZl
cl9saXN0Xy5BZGRPYnNlcnZlcihvYnMpOwovLyAgICAgfQovLwovLyAgICAgdm9pZCBSZW1vdmVP
YnNlcnZlcihPYnNlcnZlciogb2JzKSB7Ci8vICAgICAgIG9ic2VydmVyX2xpc3RfLlJlbW92ZU9i
c2VydmVyKG9icyk7Ci8vICAgICB9Ci8vCi8vICAgICB2b2lkIE5vdGlmeUZvbygpIHsKLy8gICAg
ICAgRk9SX0VBQ0hfT0JTRVJWRVIoT2JzZXJ2ZXIsIG9ic2VydmVyX2xpc3RfLCBPbkZvbyh0aGlz
KSk7Ci8vICAgICB9Ci8vCi8vICAgICB2b2lkIE5vdGlmeUJhcihpbnQgeCwgaW50IHkpIHsKLy8g
ICAgICAgRk9SX0VBQ0hfT0JTRVJWRVIoT2JzZXJ2ZXIsIG9ic2VydmVyX2xpc3RfLCBPbkJhcih0
aGlzLCB4LCB5KSk7Ci8vICAgICB9Ci8vCi8vICAgIHByaXZhdGU6Ci8vICAgICBPYnNlcnZlckxp
c3Q8T2JzZXJ2ZXI+IG9ic2VydmVyX2xpc3RfOwovLyAgIH07Ci8vCi8vCi8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KCnRlbXBsYXRlIDxjbGFzcyBPYnNlcnZlclR5cGUsIGJvb2wgY2hlY2tfZW1wdHkg
PSBmYWxzZT4KY2xhc3MgT2JzZXJ2ZXJMaXN0IHsKIHB1YmxpYzoKICAvLyBFbnVtZXJhdGlvbiBv
ZiB3aGljaCBvYnNlcnZlcnMgYXJlIG5vdGlmaWVkLgogIGVudW0gTm90aWZpY2F0aW9uVHlwZSB7
CiAgICAvLyBTcGVjaWZpZXMgdGhhdCBhbnkgb2JzZXJ2ZXJzIGFkZGVkIGR1cmluZyBub3RpZmlj
YXRpb24gYXJlIG5vdGlmaWVkLgogICAgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCB0eXBlIGlmIG5v
biB0eXBlIGlzIHByb3ZpZGVkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KICAgIE5PVElGWV9BTEwsCgog
ICAgLy8gU3BlY2lmaWVzIHRoYXQgb2JzZXJ2ZXJzIGFkZGVkIHdoaWxlIHNlbmRpbmcgb3V0IG5v
dGlmaWNhdGlvbiBhcmUgbm90CiAgICAvLyBub3RpZmllZC4KICAgIE5PVElGWV9FWElTVElOR19P
TkxZCiAgfTsKCiAgT2JzZXJ2ZXJMaXN0KCkgOiBub3RpZnlfZGVwdGhfKDApLCB0eXBlXyhOT1RJ
RllfQUxMKSB7fQogIE9ic2VydmVyTGlzdChOb3RpZmljYXRpb25UeXBlIHR5cGUpIDogbm90aWZ5
X2RlcHRoXygwKSwgdHlwZV8odHlwZSkge30KICB+T2JzZXJ2ZXJMaXN0KCkgewogICAgLy8gV2hl
biBjaGVja19lbXB0eSBpcyB0cnVlLCBhc3NlcnQgdGhhdCB0aGUgbGlzdCBpcyBlbXB0eSBvbiBk
ZXN0cnVjdGlvbi4KICAgIGlmIChjaGVja19lbXB0eSkgewogICAgICBDb21wYWN0KCk7CiAgICAg
IERDSEVDS19FUShvYnNlcnZlcnNfLnNpemUoKSwgMFUpOwogICAgfQogIH0KCiAgLy8gQWRkIGFu
IG9ic2VydmVyIHRvIHRoZSBsaXN0LgogIHZvaWQgQWRkT2JzZXJ2ZXIoT2JzZXJ2ZXJUeXBlKiBv
YnMpIHsKICAgIERDSEVDSyhmaW5kKG9ic2VydmVyc18uYmVnaW4oKSwgb2JzZXJ2ZXJzXy5lbmQo
KSwgb2JzKSA9PSBvYnNlcnZlcnNfLmVuZCgpKQogICAgICAgIDw8ICJPYnNlcnZlcnMgY2FuIG9u
bHkgYmUgYWRkZWQgb25jZSEiOwogICAgb2JzZXJ2ZXJzXy5wdXNoX2JhY2sob2JzKTsKICB9Cgog
IC8vIFJlbW92ZSBhbiBvYnNlcnZlciBmcm9tIHRoZSBsaXN0LgogIHZvaWQgUmVtb3ZlT2JzZXJ2
ZXIoT2JzZXJ2ZXJUeXBlKiBvYnMpIHsKICAgIHR5cGVuYW1lIExpc3RUeXBlOjppdGVyYXRvciBp
dCA9CiAgICAgIHN0ZDo6ZmluZChvYnNlcnZlcnNfLmJlZ2luKCksIG9ic2VydmVyc18uZW5kKCks
IG9icyk7CiAgICBpZiAoaXQgIT0gb2JzZXJ2ZXJzXy5lbmQoKSkgewogICAgICBpZiAobm90aWZ5
X2RlcHRoXykgewogICAgICAgICppdCA9IDA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb2JzZXJ2
ZXJzXy5lcmFzZShpdCk7CiAgICAgIH0KICAgIH0KICB9CgogIHNpemVfdCBzaXplKCkgY29uc3Qg
ewogICAgcmV0dXJuIG9ic2VydmVyc18uc2l6ZSgpOwogIH0KCiAgT2JzZXJ2ZXJUeXBlKiBHZXRF
bGVtZW50QXQoaW50IGluZGV4KSBjb25zdCB7CiAgICByZXR1cm4gb2JzZXJ2ZXJzX1tpbmRleF07
CiAgfQoKICAvLyBBbiBpdGVyYXRvciBjbGFzcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0
aGUgbGlzdCBvZiBvYnNlcnZlcnMuICBTZWUKICAvLyBhbHNvIHRoZSBGT1JFQUNIX09CU0VSVkVS
IG1hY3JvIGRlZmluZWQgYmVsb3cuCiAgY2xhc3MgSXRlcmF0b3IgewogICBwdWJsaWM6CiAgICBJ
dGVyYXRvcihjb25zdCBPYnNlcnZlckxpc3Q8T2JzZXJ2ZXJUeXBlPiYgbGlzdCkKICAgICAgICA6
IGxpc3RfKGxpc3QpLAogICAgICAgICAgaW5kZXhfKDApLAogICAgICAgICAgbWF4X2luZGV4Xyhs
aXN0LnR5cGVfID09IE5PVElGWV9BTEwgPwogICAgICAgICAgICAgICAgICAgICBzdGQ6Om51bWVy
aWNfbGltaXRzPHNpemVfdD46Om1heCgpIDoKICAgICAgICAgICAgICAgICAgICAgbGlzdC5vYnNl
cnZlcnNfLnNpemUoKSkgewogICAgICArK2xpc3RfLm5vdGlmeV9kZXB0aF87CiAgICB9CgogICAg
fkl0ZXJhdG9yKCkgewogICAgICBpZiAoLS1saXN0Xy5ub3RpZnlfZGVwdGhfID09IDApCiAgICAg
ICAgbGlzdF8uQ29tcGFjdCgpOwogICAgfQoKICAgIE9ic2VydmVyVHlwZSogR2V0TmV4dCgpIHsK
ICAgICAgTGlzdFR5cGUmIG9ic2VydmVycyA9IGxpc3RfLm9ic2VydmVyc187CiAgICAgIC8vIEFk
dmFuY2UgaWYgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyBudWxsCiAgICAgIHNpemVfdCBtYXhfaW5k
ZXggPSBzdGQ6Om1pbihtYXhfaW5kZXhfLCBvYnNlcnZlcnMuc2l6ZSgpKTsKICAgICAgd2hpbGUg
KGluZGV4XyA8IG1heF9pbmRleCAmJiAhb2JzZXJ2ZXJzW2luZGV4X10pCiAgICAgICAgKytpbmRl
eF87CiAgICAgIHJldHVybiBpbmRleF8gPCBtYXhfaW5kZXggPyBvYnNlcnZlcnNbaW5kZXhfKytd
IDogTlVMTDsKICAgIH0KCiAgIHByaXZhdGU6CiAgICBjb25zdCBPYnNlcnZlckxpc3Q8T2JzZXJ2
ZXJUeXBlPiYgbGlzdF87CiAgICBzaXplX3QgaW5kZXhfOwogICAgc2l6ZV90IG1heF9pbmRleF87
CiAgfTsKCiBwcml2YXRlOgogIHR5cGVkZWYgc3RkOjp2ZWN0b3I8T2JzZXJ2ZXJUeXBlKj4gTGlz
dFR5cGU7CgogIHZvaWQgQ29tcGFjdCgpIGNvbnN0IHsKICAgIHR5cGVuYW1lIExpc3RUeXBlOjpp
dGVyYXRvciBpdCA9IG9ic2VydmVyc18uYmVnaW4oKTsKICAgIHdoaWxlIChpdCAhPSBvYnNlcnZl
cnNfLmVuZCgpKSB7CiAgICAgIGlmICgqaXQpIHsKICAgICAgICArK2l0OwogICAgICB9IGVsc2Ug
ewogICAgICAgIGl0ID0gb2JzZXJ2ZXJzXy5lcmFzZShpdCk7CiAgICAgIH0KICAgIH0KICB9Cgog
IC8vIFRoZXNlIGFyZSBtYXJrZWQgbXV0YWJsZSB0byBmYWNpbGl0YXRlIGhhdmluZyBOb3RpZnlB
bGwgYmUgY29uc3QuCiAgbXV0YWJsZSBMaXN0VHlwZSBvYnNlcnZlcnNfOwogIG11dGFibGUgaW50
IG5vdGlmeV9kZXB0aF87CiAgTm90aWZpY2F0aW9uVHlwZSB0eXBlXzsKCiAgZnJpZW5kIGNsYXNz
IE9ic2VydmVyTGlzdDo6SXRlcmF0b3I7CgogIERJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKE9i
c2VydmVyTGlzdCk7Cn07CgojZGVmaW5lIEZPUl9FQUNIX09CU0VSVkVSKE9ic2VydmVyVHlwZSwg
b2JzZXJ2ZXJfbGlzdCwgZnVuYykgIFwKICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBPYnNlcnZlckxpc3Q8T2JzZXJ2ZXJU
eXBlPjo6SXRlcmF0b3IgaXQob2JzZXJ2ZXJfbGlzdCk7ICAgXAogICAgT2JzZXJ2ZXJUeXBlKiBv
YnM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIHdoaWxlICgo
b2JzID0gaXQuR2V0TmV4dCgpKSAhPSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
IG9icy0+ZnVuYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogIH0gd2hpbGUgKDApCgojZW5kaWYgIC8vIEJBU0VfT0JTRVJWRVJfTElTVF9IX18KCiNpZm5k
ZWYgQkFTRV9TQ09QRURfUFRSX0hfCiNkZWZpbmUgQkFTRV9TQ09QRURfUFRSX0hfCgovLyBUaGlz
IGlzIGFuIGltcGxlbWVudGF0aW9uIGRlc2lnbmVkIHRvIG1hdGNoIHRoZSBhbnRpY2lwYXRlZCBm
dXR1cmUgVFIyCi8vIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzY29wZWRfcHRyIGNsYXNzLCBhbmQg
aXRzIGNsb3NlbHktcmVsYXRlZCBicmV0aHJlbiwKLy8gc2NvcGVkX2FycmF5LCBzY29wZWRfcHRy
X21hbGxvYy4KCi8vIEEgc2NvcGVkX3B0cjxUPiBpcyBsaWtlIGEgVCosIGV4Y2VwdCB0aGF0IHRo
ZSBkZXN0cnVjdG9yIG9mIHNjb3BlZF9wdHI8VD4KLy8gYXV0b21hdGljYWxseSBkZWxldGVzIHRo
ZSBwb2ludGVyIGl0IGhvbGRzIChpZiBhbnkpLgovLyBUaGF0IGlzLCBzY29wZWRfcHRyPFQ+IG93
bnMgdGhlIFQgb2JqZWN0IHRoYXQgaXQgcG9pbnRzIHRvLgovLyBMaWtlIGEgVCosIGEgc2NvcGVk
X3B0cjxUPiBtYXkgaG9sZCBlaXRoZXIgTlVMTCBvciBhIHBvaW50ZXIgdG8gYSBUIG9iamVjdC4K
Ly8gQWxzbyBsaWtlIFQqLCBzY29wZWRfcHRyPFQ+IGlzIHRocmVhZC1jb21wYXRpYmxlLCBhbmQg
b25jZSB5b3UKLy8gZGVyZWZlcmVuY2UgaXQsIHlvdSBnZXQgdGhlIHRocmVhZHNhZmV0eSBndWFy
YW50ZWVzIG9mIFQuCi8vCi8vIFRoZSBzaXplIG9mIGEgc2NvcGVkX3B0ciBpcyBzbWFsbDoKLy8g
c2l6ZW9mKHNjb3BlZF9wdHI8Qz4pID09IHNpemVvZihDKikKdGVtcGxhdGUgPGNsYXNzIEM+CmNs
YXNzIHNjb3BlZF9wdHIgewogcHVibGljOgoKICAvLyBUaGUgZWxlbWVudCB0eXBlCiAgdHlwZWRl
ZiBDIGVsZW1lbnRfdHlwZTsKCiAgLy8gQ29uc3RydWN0b3IuICBEZWZhdWx0cyB0byBpbnRpYWxp
emluZyB3aXRoIE5VTEwuCiAgLy8gVGhlcmUgaXMgbm8gd2F5IHRvIGNyZWF0ZSBhbiB1bmluaXRp
YWxpemVkIHNjb3BlZF9wdHIuCiAgLy8gVGhlIGlucHV0IHBhcmFtZXRlciBtdXN0IGJlIGFsbG9j
YXRlZCB3aXRoIG5ldy4KICBleHBsaWNpdCBzY29wZWRfcHRyKEMqIHAgPSBOVUxMKSA6IHB0cl8o
cCkgeyB9CgogIC8vIERlc3RydWN0b3IuICBJZiB0aGVyZSBpcyBhIEMgb2JqZWN0LCBkZWxldGUg
aXQuCiAgLy8gV2UgZG9uJ3QgbmVlZCB0byB0ZXN0IHB0cl8gPT0gTlVMTCBiZWNhdXNlIEMrKyBk
b2VzIHRoYXQgZm9yIHVzLgogIH5zY29wZWRfcHRyKCkgewogICAgZW51bSB7IHR5cGVfbXVzdF9i
ZV9jb21wbGV0ZSA9IHNpemVvZihDKSB9OwogICAgZGVsZXRlIHB0cl87CiAgfQoKICAvLyBSZXNl
dC4gIERlbGV0ZXMgdGhlIGN1cnJlbnQgb3duZWQgb2JqZWN0LCBpZiBhbnkuCiAgLy8gVGhlbiB0
YWtlcyBvd25lcnNoaXAgb2YgYSBuZXcgb2JqZWN0LCBpZiBnaXZlbi4KICAvLyB0aGlzLT5yZXNl
dCh0aGlzLT5nZXQoKSkgd29ya3MuCiAgdm9pZCByZXNldChDKiBwID0gTlVMTCkgewogICAgaWYg
KHAgIT0gcHRyXykgewogICAgICBlbnVtIHsgdHlwZV9tdXN0X2JlX2NvbXBsZXRlID0gc2l6ZW9m
KEMpIH07CiAgICAgIGRlbGV0ZSBwdHJfOwogICAgICBwdHJfID0gcDsKICAgIH0KICB9CgogIC8v
IEFjY2Vzc29ycyB0byBnZXQgdGhlIG93bmVkIG9iamVjdC4KICAvLyBvcGVyYXRvciogYW5kIG9w
ZXJhdG9yLT4gd2lsbCBhc3NlcnQoKSBpZiB0aGVyZSBpcyBubyBjdXJyZW50IG9iamVjdC4KICBD
JiBvcGVyYXRvciooKSBjb25zdCB7CiAgICBhc3NlcnQocHRyXyAhPSBOVUxMKTsKICAgIHJldHVy
biAqcHRyXzsKICB9CiAgQyogb3BlcmF0b3ItPigpIGNvbnN0ICB7CiAgICBhc3NlcnQocHRyXyAh
PSBOVUxMKTsKICAgIHJldHVybiBwdHJfOwogIH0KICBDKiBnZXQoKSBjb25zdCB7IHJldHVybiBw
dHJfOyB9CgogIC8vIENvbXBhcmlzb24gb3BlcmF0b3JzLgogIC8vIFRoZXNlIHJldHVybiB3aGV0
aGVyIHR3byBzY29wZWRfcHRyIHJlZmVyIHRvIHRoZSBzYW1lIG9iamVjdCwgbm90IGp1c3QgdG8K
ICAvLyB0d28gZGlmZmVyZW50IGJ1dCBlcXVhbCBvYmplY3RzLgogIGJvb2wgb3BlcmF0b3I9PShD
KiBwKSBjb25zdCB7IHJldHVybiBwdHJfID09IHA7IH0KICBib29sIG9wZXJhdG9yIT0oQyogcCkg
Y29uc3QgeyByZXR1cm4gcHRyXyAhPSBwOyB9CgogIC8vIFN3YXAgdHdvIHNjb3BlZCBwb2ludGVy
cy4KICB2b2lkIHN3YXAoc2NvcGVkX3B0ciYgcDIpIHsKICAgIEMqIHRtcCA9IHB0cl87CiAgICBw
dHJfID0gcDIucHRyXzsKICAgIHAyLnB0cl8gPSB0bXA7CiAgfQoKICAvLyBSZWxlYXNlIGEgcG9p
bnRlci4KICAvLyBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBjdXJyZW50IHBvaW50ZXIgaGVsZCBi
eSB0aGlzIG9iamVjdC4KICAvLyBJZiB0aGlzIG9iamVjdCBob2xkcyBhIE5VTEwgcG9pbnRlciwg
dGhlIHJldHVybiB2YWx1ZSBpcyBOVUxMLgogIC8vIEFmdGVyIHRoaXMgb3BlcmF0aW9uLCB0aGlz
IG9iamVjdCB3aWxsIGhvbGQgYSBOVUxMIHBvaW50ZXIsCiAgLy8gYW5kIHdpbGwgbm90IG93biB0
aGUgb2JqZWN0IGFueSBtb3JlLgogIEMqIHJlbGVhc2UoKSB7CiAgICBDKiByZXRWYWwgPSBwdHJf
OwogICAgcHRyXyA9IE5VTEw7CiAgICByZXR1cm4gcmV0VmFsOwogIH0KCiBwcml2YXRlOgogIEMq
IHB0cl87CgogIC8vIEZvcmJpZCBjb21wYXJpc29uIG9mIHNjb3BlZF9wdHIgdHlwZXMuICBJZiBD
MiAhPSBDLCBpdCB0b3RhbGx5IGRvZXNuJ3QKICAvLyBtYWtlIHNlbnNlLCBhbmQgaWYgQzIgPT0g
QywgaXQgc3RpbGwgZG9lc24ndCBtYWtlIHNlbnNlIGJlY2F1c2UgeW91IHNob3VsZAogIC8vIG5l
dmVyIGhhdmUgdGhlIHNhbWUgb2JqZWN0IG93bmVkIGJ5IHR3byBkaWZmZXJlbnQgc2NvcGVkX3B0
cnMuCiAgdGVtcGxhdGUgPGNsYXNzIEMyPiBib29sIG9wZXJhdG9yPT0oc2NvcGVkX3B0cjxDMj4g
Y29uc3QmIHAyKSBjb25zdDsKICB0ZW1wbGF0ZSA8Y2xhc3MgQzI+IGJvb2wgb3BlcmF0b3IhPShz
Y29wZWRfcHRyPEMyPiBjb25zdCYgcDIpIGNvbnN0OwoKICAvLyBEaXNhbGxvdyBldmlsIGNvbnN0
cnVjdG9ycwogIHNjb3BlZF9wdHIoY29uc3Qgc2NvcGVkX3B0ciYpOwogIHZvaWQgb3BlcmF0b3I9
KGNvbnN0IHNjb3BlZF9wdHImKTsKfTsKCi8vIEZyZWUgZnVuY3Rpb25zCnRlbXBsYXRlIDxjbGFz
cyBDPgp2b2lkIHN3YXAoc2NvcGVkX3B0cjxDPiYgcDEsIHNjb3BlZF9wdHI8Qz4mIHAyKSB7CiAg
cDEuc3dhcChwMik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDPgpib29sIG9wZXJhdG9yPT0oQyogcDEs
IGNvbnN0IHNjb3BlZF9wdHI8Qz4mIHAyKSB7CiAgcmV0dXJuIHAxID09IHAyLmdldCgpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgQz4KYm9vbCBvcGVyYXRvciE9KEMqIHAxLCBjb25zdCBzY29wZWRfcHRy
PEM+JiBwMikgewogIHJldHVybiBwMSAhPSBwMi5nZXQoKTsKfQoKLy8gc2NvcGVkX2FycmF5PEM+
IGlzIGxpa2Ugc2NvcGVkX3B0cjxDPiwgZXhjZXB0IHRoYXQgdGhlIGNhbGxlciBtdXN0IGFsbG9j
YXRlCi8vIHdpdGggbmV3IFtdIGFuZCB0aGUgZGVzdHJ1Y3RvciBkZWxldGVzIG9iamVjdHMgd2l0
aCBkZWxldGUgW10uCi8vCi8vIEFzIHdpdGggc2NvcGVkX3B0cjxDPiwgYSBzY29wZWRfYXJyYXk8
Qz4gZWl0aGVyIHBvaW50cyB0byBhbiBvYmplY3QKLy8gb3IgaXMgTlVMTC4gIEEgc2NvcGVkX2Fy
cmF5PEM+IG93bnMgdGhlIG9iamVjdCB0aGF0IGl0IHBvaW50cyB0by4KLy8gc2NvcGVkX2FycmF5
PFQ+IGlzIHRocmVhZC1jb21wYXRpYmxlLCBhbmQgb25jZSB5b3UgaW5kZXggaW50byBpdCwKLy8g
dGhlIHJldHVybmVkIG9iamVjdHMgaGF2ZSBvbmx5IHRoZSB0aHJlYWRzYWZldHkgZ3VhcmFudGVl
cyBvZiBULgovLwovLyBTaXplOiBzaXplb2Yoc2NvcGVkX2FycmF5PEM+KSA9PSBzaXplb2YoQyop
CnRlbXBsYXRlIDxjbGFzcyBDPgpjbGFzcyBzY29wZWRfYXJyYXkgewogcHVibGljOgoKICAvLyBU
aGUgZWxlbWVudCB0eXBlCiAgdHlwZWRlZiBDIGVsZW1lbnRfdHlwZTsKCiAgLy8gQ29uc3RydWN0
b3IuICBEZWZhdWx0cyB0byBpbnRpYWxpemluZyB3aXRoIE5VTEwuCiAgLy8gVGhlcmUgaXMgbm8g
d2F5IHRvIGNyZWF0ZSBhbiB1bmluaXRpYWxpemVkIHNjb3BlZF9hcnJheS4KICAvLyBUaGUgaW5w
dXQgcGFyYW1ldGVyIG11c3QgYmUgYWxsb2NhdGVkIHdpdGggbmV3IFtdLgogIGV4cGxpY2l0IHNj
b3BlZF9hcnJheShDKiBwID0gTlVMTCkgOiBhcnJheV8ocCkgeyB9CgogIC8vIERlc3RydWN0b3Iu
ICBJZiB0aGVyZSBpcyBhIEMgb2JqZWN0LCBkZWxldGUgaXQuCiAgLy8gV2UgZG9uJ3QgbmVlZCB0
byB0ZXN0IHB0cl8gPT0gTlVMTCBiZWNhdXNlIEMrKyBkb2VzIHRoYXQgZm9yIHVzLgogIH5zY29w
ZWRfYXJyYXkoKSB7CiAgICBlbnVtIHsgdHlwZV9tdXN0X2JlX2NvbXBsZXRlID0gc2l6ZW9mKEMp
IH07CiAgICBkZWxldGVbXSBhcnJheV87CiAgfQoKICAvLyBSZXNldC4gIERlbGV0ZXMgdGhlIGN1
cnJlbnQgb3duZWQgb2JqZWN0LCBpZiBhbnkuCiAgLy8gVGhlbiB0YWtlcyBvd25lcnNoaXAgb2Yg
YSBuZXcgb2JqZWN0LCBpZiBnaXZlbi4KICAvLyB0aGlzLT5yZXNldCh0aGlzLT5nZXQoKSkgd29y
a3MuCiAgdm9pZCByZXNldChDKiBwID0gTlVMTCkgewogICAgaWYgKHAgIT0gYXJyYXlfKSB7CiAg
ICAgIGVudW0geyB0eXBlX211c3RfYmVfY29tcGxldGUgPSBzaXplb2YoQykgfTsKICAgICAgZGVs
ZXRlW10gYXJyYXlfOwogICAgICBhcnJheV8gPSBwOwogICAgfQogIH0KCiAgLy8gR2V0IG9uZSBl
bGVtZW50IG9mIHRoZSBjdXJyZW50IG9iamVjdC4KICAvLyBXaWxsIGFzc2VydCgpIGlmIHRoZXJl
IGlzIG5vIGN1cnJlbnQgb2JqZWN0LCBvciBpbmRleCBpIGlzIG5lZ2F0aXZlLgogIEMmIG9wZXJh
dG9yW10oc3RkOjpwdHJkaWZmX3QgaSkgY29uc3QgewogICAgYXNzZXJ0KGkgPj0gMCk7CiAgICBh
c3NlcnQoYXJyYXlfICE9IE5VTEwpOwogICAgcmV0dXJuIGFycmF5X1tpXTsKICB9CgogIC8vIEdl
dCBhIHBvaW50ZXIgdG8gdGhlIHplcm90aCBlbGVtZW50IG9mIHRoZSBjdXJyZW50IG9iamVjdC4K
ICAvLyBJZiB0aGVyZSBpcyBubyBjdXJyZW50IG9iamVjdCwgcmV0dXJuIE5VTEwuCiAgQyogZ2V0
KCkgY29uc3QgewogICAgcmV0dXJuIGFycmF5XzsKICB9CgogIC8vIENvbXBhcmlzb24gb3BlcmF0
b3JzLgogIC8vIFRoZXNlIHJldHVybiB3aGV0aGVyIHR3byBzY29wZWRfYXJyYXkgcmVmZXIgdG8g
dGhlIHNhbWUgb2JqZWN0LCBub3QganVzdCB0bwogIC8vIHR3byBkaWZmZXJlbnQgYnV0IGVxdWFs
IG9iamVjdHMuCiAgYm9vbCBvcGVyYXRvcj09KEMqIHApIGNvbnN0IHsgcmV0dXJuIGFycmF5XyA9
PSBwOyB9CiAgYm9vbCBvcGVyYXRvciE9KEMqIHApIGNvbnN0IHsgcmV0dXJuIGFycmF5XyAhPSBw
OyB9CgogIC8vIFN3YXAgdHdvIHNjb3BlZCBhcnJheXMuCiAgdm9pZCBzd2FwKHNjb3BlZF9hcnJh
eSYgcDIpIHsKICAgIEMqIHRtcCA9IGFycmF5XzsKICAgIGFycmF5XyA9IHAyLmFycmF5XzsKICAg
IHAyLmFycmF5XyA9IHRtcDsKICB9CgogIC8vIFJlbGVhc2UgYW4gYXJyYXkuCiAgLy8gVGhlIHJl
dHVybiB2YWx1ZSBpcyB0aGUgY3VycmVudCBwb2ludGVyIGhlbGQgYnkgdGhpcyBvYmplY3QuCiAg
Ly8gSWYgdGhpcyBvYmplY3QgaG9sZHMgYSBOVUxMIHBvaW50ZXIsIHRoZSByZXR1cm4gdmFsdWUg
aXMgTlVMTC4KICAvLyBBZnRlciB0aGlzIG9wZXJhdGlvbiwgdGhpcyBvYmplY3Qgd2lsbCBob2xk
IGEgTlVMTCBwb2ludGVyLAogIC8vIGFuZCB3aWxsIG5vdCBvd24gdGhlIG9iamVjdCBhbnkgbW9y
ZS4KICBDKiByZWxlYXNlKCkgewogICAgQyogcmV0VmFsID0gYXJyYXlfOwogICAgYXJyYXlfID0g
TlVMTDsKICAgIHJldHVybiByZXRWYWw7CiAgfQoKIHByaXZhdGU6CiAgQyogYXJyYXlfOwoKICAv
LyBGb3JiaWQgY29tcGFyaXNvbiBvZiBkaWZmZXJlbnQgc2NvcGVkX2FycmF5IHR5cGVzLgogIHRl
bXBsYXRlIDxjbGFzcyBDMj4gYm9vbCBvcGVyYXRvcj09KHNjb3BlZF9hcnJheTxDMj4gY29uc3Qm
IHAyKSBjb25zdDsKICB0ZW1wbGF0ZSA8Y2xhc3MgQzI+IGJvb2wgb3BlcmF0b3IhPShzY29wZWRf
YXJyYXk8QzI+IGNvbnN0JiBwMikgY29uc3Q7CgogIC8vIERpc2FsbG93IGV2aWwgY29uc3RydWN0
b3JzCiAgc2NvcGVkX2FycmF5KGNvbnN0IHNjb3BlZF9hcnJheSYpOwogIHZvaWQgb3BlcmF0b3I9
KGNvbnN0IHNjb3BlZF9hcnJheSYpOwp9OwoKLy8gRnJlZSBmdW5jdGlvbnMKdGVtcGxhdGUgPGNs
YXNzIEM+CnZvaWQgc3dhcChzY29wZWRfYXJyYXk8Qz4mIHAxLCBzY29wZWRfYXJyYXk8Qz4mIHAy
KSB7CiAgcDEuc3dhcChwMik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDPgpib29sIG9wZXJhdG9yPT0o
QyogcDEsIGNvbnN0IHNjb3BlZF9hcnJheTxDPiYgcDIpIHsKICByZXR1cm4gcDEgPT0gcDIuZ2V0
KCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDPgpib29sIG9wZXJhdG9yIT0oQyogcDEsIGNvbnN0IHNj
b3BlZF9hcnJheTxDPiYgcDIpIHsKICByZXR1cm4gcDEgIT0gcDIuZ2V0KCk7Cn0KCi8vIFRoaXMg
Y2xhc3Mgd3JhcHMgdGhlIGMgbGlicmFyeSBmdW5jdGlvbiBmcmVlKCkgaW4gYSBjbGFzcyB0aGF0
IGNhbiBiZQovLyBwYXNzZWQgYXMgYSB0ZW1wbGF0ZSBhcmd1bWVudCB0byBzY29wZWRfcHRyX21h
bGxvYyBiZWxvdy4KY2xhc3MgU2NvcGVkUHRyTWFsbG9jRnJlZSB7CiBwdWJsaWM6CiAgaW5saW5l
IHZvaWQgb3BlcmF0b3IoKSh2b2lkKiB4KSBjb25zdCB7CiAgICBmcmVlKHgpOwogIH0KfTsKCi8v
IHNjb3BlZF9wdHJfbWFsbG9jPD4gaXMgc2ltaWxhciB0byBzY29wZWRfcHRyPD4sIGJ1dCBpdCBh
Y2NlcHRzIGEKLy8gc2Vjb25kIHRlbXBsYXRlIGFyZ3VtZW50LCB0aGUgZnVuY3RvciB1c2VkIHRv
IGZyZWUgdGhlIG9iamVjdC4KCnRlbXBsYXRlPGNsYXNzIEMsIGNsYXNzIEZyZWVQcm9jID0gU2Nv
cGVkUHRyTWFsbG9jRnJlZT4KY2xhc3Mgc2NvcGVkX3B0cl9tYWxsb2MgewogcHVibGljOgoKICAv
LyBUaGUgZWxlbWVudCB0eXBlCiAgdHlwZWRlZiBDIGVsZW1lbnRfdHlwZTsKCiAgLy8gQ29uc3Ry
dWN0b3IuICBEZWZhdWx0cyB0byBpbnRpYWxpemluZyB3aXRoIE5VTEwuCiAgLy8gVGhlcmUgaXMg
bm8gd2F5IHRvIGNyZWF0ZSBhbiB1bmluaXRpYWxpemVkIHNjb3BlZF9wdHIuCiAgLy8gVGhlIGlu
cHV0IHBhcmFtZXRlciBtdXN0IGJlIGFsbG9jYXRlZCB3aXRoIGFuIGFsbG9jYXRvciB0aGF0IG1h
dGNoZXMgdGhlCiAgLy8gRnJlZSBmdW5jdG9yLiAgRm9yIHRoZSBkZWZhdWx0IEZyZWUgZnVuY3Rv
ciwgdGhpcyBpcyBtYWxsb2MsIGNhbGxvYywgb3IKICAvLyByZWFsbG9jLgogIGV4cGxpY2l0IHNj
b3BlZF9wdHJfbWFsbG9jKEMqIHAgPSBOVUxMKTogcHRyXyhwKSB7fQoKICAvLyBEZXN0cnVjdG9y
LiAgSWYgdGhlcmUgaXMgYSBDIG9iamVjdCwgY2FsbCB0aGUgRnJlZSBmdW5jdG9yLgogIH5zY29w
ZWRfcHRyX21hbGxvYygpIHsKICAgIGZyZWVfKHB0cl8pOwogIH0KCiAgLy8gUmVzZXQuICBDYWxs
cyB0aGUgRnJlZSBmdW5jdG9yIG9uIHRoZSBjdXJyZW50IG93bmVkIG9iamVjdCwgaWYgYW55Lgog
IC8vIFRoZW4gdGFrZXMgb3duZXJzaGlwIG9mIGEgbmV3IG9iamVjdCwgaWYgZ2l2ZW4uCiAgLy8g
dGhpcy0+cmVzZXQodGhpcy0+Z2V0KCkpIHdvcmtzLgogIHZvaWQgcmVzZXQoQyogcCA9IE5VTEwp
IHsKICAgIGlmIChwdHJfICE9IHApIHsKICAgICAgZnJlZV8ocHRyXyk7CiAgICAgIHB0cl8gPSBw
OwogICAgfQogIH0KCiAgLy8gR2V0IHRoZSBjdXJyZW50IG9iamVjdC4KICAvLyBvcGVyYXRvciog
YW5kIG9wZXJhdG9yLT4gd2lsbCBjYXVzZSBhbiBhc3NlcnQoKSBmYWlsdXJlIGlmIHRoZXJlIGlz
CiAgLy8gbm8gY3VycmVudCBvYmplY3QuCiAgQyYgb3BlcmF0b3IqKCkgY29uc3QgewogICAgYXNz
ZXJ0KHB0cl8gIT0gTlVMTCk7CiAgICByZXR1cm4gKnB0cl87CiAgfQoKICBDKiBvcGVyYXRvci0+
KCkgY29uc3QgewogICAgYXNzZXJ0KHB0cl8gIT0gTlVMTCk7CiAgICByZXR1cm4gcHRyXzsKICB9
CgogIEMqIGdldCgpIGNvbnN0IHsKICAgIHJldHVybiBwdHJfOwogIH0KCiAgLy8gQ29tcGFyaXNv
biBvcGVyYXRvcnMuCiAgLy8gVGhlc2UgcmV0dXJuIHdoZXRoZXIgYSBzY29wZWRfcHRyX21hbGxv
YyBhbmQgYSBwbGFpbiBwb2ludGVyIHJlZmVyCiAgLy8gdG8gdGhlIHNhbWUgb2JqZWN0LCBub3Qg
anVzdCB0byB0d28gZGlmZmVyZW50IGJ1dCBlcXVhbCBvYmplY3RzLgogIC8vIEZvciBjb21wYXRp
YmlsaXR5IHd3aXRoIHRoZSBib29zdC1kZXJpdmVkIGltcGxlbWVudGF0aW9uLCB0aGVzZQogIC8v
IHRha2Ugbm9uLWNvbnN0IGFyZ3VtZW50cy4KICBib29sIG9wZXJhdG9yPT0oQyogcCkgY29uc3Qg
ewogICAgcmV0dXJuIHB0cl8gPT0gcDsKICB9CgogIGJvb2wgb3BlcmF0b3IhPShDKiBwKSBjb25z
dCB7CiAgICByZXR1cm4gcHRyXyAhPSBwOwogIH0KCiAgLy8gU3dhcCB0d28gc2NvcGVkIHBvaW50
ZXJzLgogIHZvaWQgc3dhcChzY29wZWRfcHRyX21hbGxvYyAmIGIpIHsKICAgIEMqIHRtcCA9IGIu
cHRyXzsKICAgIGIucHRyXyA9IHB0cl87CiAgICBwdHJfID0gdG1wOwogIH0KCiAgLy8gUmVsZWFz
ZSBhIHBvaW50ZXIuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgY3VycmVudCBwb2ludGVy
IGhlbGQgYnkgdGhpcyBvYmplY3QuCiAgLy8gSWYgdGhpcyBvYmplY3QgaG9sZHMgYSBOVUxMIHBv
aW50ZXIsIHRoZSByZXR1cm4gdmFsdWUgaXMgTlVMTC4KICAvLyBBZnRlciB0aGlzIG9wZXJhdGlv
biwgdGhpcyBvYmplY3Qgd2lsbCBob2xkIGEgTlVMTCBwb2ludGVyLAogIC8vIGFuZCB3aWxsIG5v
dCBvd24gdGhlIG9iamVjdCBhbnkgbW9yZS4KICBDKiByZWxlYXNlKCkgewogICAgQyogdG1wID0g
cHRyXzsKICAgIHB0cl8gPSBOVUxMOwogICAgcmV0dXJuIHRtcDsKICB9CgogcHJpdmF0ZToKICBD
KiBwdHJfOwoKICAvLyBubyByZWFzb24gdG8gdXNlIHRoZXNlOiBlYWNoIHNjb3BlZF9wdHJfbWFs
bG9jIHNob3VsZCBoYXZlIGl0cyBvd24gb2JqZWN0CiAgdGVtcGxhdGUgPGNsYXNzIEMyLCBjbGFz
cyBHUD4KICBib29sIG9wZXJhdG9yPT0oc2NvcGVkX3B0cl9tYWxsb2M8QzIsIEdQPiBjb25zdCYg
cCkgY29uc3Q7CiAgdGVtcGxhdGUgPGNsYXNzIEMyLCBjbGFzcyBHUD4KICBib29sIG9wZXJhdG9y
IT0oc2NvcGVkX3B0cl9tYWxsb2M8QzIsIEdQPiBjb25zdCYgcCkgY29uc3Q7CgogIHN0YXRpYyBG
cmVlUHJvYyBjb25zdCBmcmVlXzsKCiAgLy8gRGlzYWxsb3cgZXZpbCBjb25zdHJ1Y3RvcnMKICBz
Y29wZWRfcHRyX21hbGxvYyhjb25zdCBzY29wZWRfcHRyX21hbGxvYyYpOwogIHZvaWQgb3BlcmF0
b3I9KGNvbnN0IHNjb3BlZF9wdHJfbWFsbG9jJik7Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBDLCBjbGFz
cyBGUD4KRlAgY29uc3Qgc2NvcGVkX3B0cl9tYWxsb2M8QywgRlA+OjpmcmVlXyA9IEZQKCk7Cgp0
ZW1wbGF0ZTxjbGFzcyBDLCBjbGFzcyBGUD4gaW5saW5lCnZvaWQgc3dhcChzY29wZWRfcHRyX21h
bGxvYzxDLCBGUD4mIGEsIHNjb3BlZF9wdHJfbWFsbG9jPEMsIEZQPiYgYikgewogIGEuc3dhcChi
KTsKfQoKdGVtcGxhdGU8Y2xhc3MgQywgY2xhc3MgRlA+IGlubGluZQpib29sIG9wZXJhdG9yPT0o
QyogcCwgY29uc3Qgc2NvcGVkX3B0cl9tYWxsb2M8QywgRlA+JiBiKSB7CiAgcmV0dXJuIHAgPT0g
Yi5nZXQoKTsKfQoKdGVtcGxhdGU8Y2xhc3MgQywgY2xhc3MgRlA+IGlubGluZQpib29sIG9wZXJh
dG9yIT0oQyogcCwgY29uc3Qgc2NvcGVkX3B0cl9tYWxsb2M8QywgRlA+JiBiKSB7CiAgcmV0dXJu
IHAgIT0gYi5nZXQoKTsKfQoKI2VuZGlmICAvLyBCQVNFX1NDT1BFRF9QVFJfSF8KCiNpZm5kZWYg
QkFTRV9NRVNTQUdFX0xPT1BfSF8KI2RlZmluZSBCQVNFX01FU1NBR0VfTE9PUF9IXwoKCiNpZm5k
ZWYgQkFTRV9NRVNTQUdFX1BVTVBfTElCRVZFTlRfSF8KI2RlZmluZSBCQVNFX01FU1NBR0VfUFVN
UF9MSUJFVkVOVF9IXwoKLy8gRGVjbGFyZSBzdHJ1Y3RzIHdlIG5lZWQgZnJvbSBsaWJldmVudC5o
IHJhdGhlciB0aGFuIGluY2x1ZGluZyBpdApzdHJ1Y3QgZXZlbnRfYmFzZTsKc3RydWN0IGV2ZW50
OwoKbmFtZXNwYWNlIGJhc2UgewoKLy8gQ2xhc3MgdG8gbW9uaXRvciBzb2NrZXRzIGFuZCBpc3N1
ZSBjYWxsYmFja3Mgd2hlbiBzb2NrZXRzIGFyZSByZWFkeSBmb3IgSS9PCi8vIFRPRE8oZGtlZ2Vs
KTogYWRkIHN1cHBvcnQgZm9yIGJhY2tncm91bmQgZmlsZSBJTyBzb21laG93CmNsYXNzIE1lc3Nh
Z2VQdW1wTGliZXZlbnQgOiBwdWJsaWMgTWVzc2FnZVB1bXAgewogcHVibGljOgoKICAvLyBPYmpl
Y3QgcmV0dXJuZWQgYnkgV2F0Y2hGaWxlRGVzY3JpcHRvciB0byBtYW5hZ2UgZnVydGhlciB3YXRj
aGluZy4KICBjbGFzcyBGaWxlRGVzY3JpcHRvcldhdGNoZXIgewogICAgcHVibGljOgogICAgIEZp
bGVEZXNjcmlwdG9yV2F0Y2hlcigpOwogICAgIH5GaWxlRGVzY3JpcHRvcldhdGNoZXIoKTsgIC8v
IEltcGxpY2l0bHkgY2FsbHMgU3RvcFdhdGNoaW5nRmlsZURlc2NyaXB0b3IuCgogICAgIC8vIE5P
VEU6IFRoZXNlIG1ldGhvZHMgYXJlbid0IGNhbGxlZCBTdGFydFdhdGNoaW5nKCkvU3RvcFdhdGNo
aW5nKCkgdG8KICAgICAvLyBhdm9pZCBjb25mdXNpb24gd2l0aCB0aGUgd2luMzIgT2JqZWN0V2F0
Y2hlciBjbGFzcy4KCiAgICAgLy8gU3RvcCB3YXRjaGluZyB0aGUgRkQsIGFsd2F5cyBzYWZlIHRv
IGNhbGwuICBOby1vcCBpZiB0aGVyZSdzIG5vdGhpbmcKICAgICAvLyB0byBkby4KICAgICBib29s
IFN0b3BXYXRjaGluZ0ZpbGVEZXNjcmlwdG9yKCk7CgogICAgcHJpdmF0ZToKICAgICAvLyBDYWxs
ZWQgYnkgTWVzc2FnZVB1bXBMaWJldmVudCwgb3duZXJzaGlwIG9mIHxlfCBpcyB0cmFuc2ZlcnJl
ZCB0byB0aGlzCiAgICAgLy8gb2JqZWN0LgogICAgIHZvaWQgSW5pdChldmVudCogZSwgYm9vbCBp
c19wZXJzaXN0ZW50KTsKCiAgICAgLy8gVXNlZCBieSBNZXNzYWdlUHVtcExpYmV2ZW50IHRvIHRh
a2Ugb3duZXJzaGlwIG9mIGV2ZW50Xy4KICAgICBldmVudCAqUmVsZWFzZUV2ZW50KCk7CiAgICAg
ZnJpZW5kIGNsYXNzIE1lc3NhZ2VQdW1wTGliZXZlbnQ7CgogICAgcHJpdmF0ZToKICAgICBib29s
IGlzX3BlcnNpc3RlbnRfOyAgLy8gZmFsc2UgaWYgdGhpcyBldmVudCBpcyBvbmUtc2hvdC4KICAg
ICBldmVudCogZXZlbnRfOwogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGaWxlRGVzY3Jp
cHRvcldhdGNoZXIpOwogIH07CgogIC8vIFVzZWQgd2l0aCBXYXRjaEZpbGVEZXNjcHRvciB0byBh
c3luY2hyb25vdXNseSBtb25pdG9yIHRoZSBJL08gcmVhZGluZXNzIG9mCiAgLy8gYSBGaWxlIERl
c2NyaXB0b3IuCiAgY2xhc3MgV2F0Y2hlciB7CiAgIHB1YmxpYzoKICAgIHZpcnR1YWwgfldhdGNo
ZXIoKSB7fQogICAgLy8gQ2FsbGVkIGZyb20gTWVzc2FnZUxvb3A6OlJ1biB3aGVuIGFuIEZEIGNh
biBiZSByZWFkIGZyb20vd3JpdHRlbiB0bwogICAgLy8gd2l0aG91dCBibG9ja2luZwogICAgdmly
dHVhbCB2b2lkIE9uRmlsZUNhblJlYWRXaXRob3V0QmxvY2tpbmcoaW50IGZkKSA9IDA7CiAgICB2
aXJ0dWFsIHZvaWQgT25GaWxlQ2FuV3JpdGVXaXRob3V0QmxvY2tpbmcoaW50IGZkKSA9IDA7CiAg
fTsKCiAgTWVzc2FnZVB1bXBMaWJldmVudCgpOwogIHZpcnR1YWwgfk1lc3NhZ2VQdW1wTGliZXZl
bnQoKTsKCiAgZW51bSBNb2RlIHsKICAgIFdBVENIX1JFQUQgPSAxIDw8IDAsCiAgICBXQVRDSF9X
UklURSA9IDEgPDwgMSwKICAgIFdBVENIX1JFQURfV1JJVEUgPSBXQVRDSF9SRUFEIHwgV0FUQ0hf
V1JJVEUKICB9OwoKICAvLyBIYXZlIHRoZSBjdXJyZW50IHRocmVhZCdzIG1lc3NhZ2UgbG9vcCB3
YXRjaCBmb3IgYSBhIHNpdHVhdGlvbiBpbiB3aGljaAogIC8vIHJlYWRpbmcvd3JpdGluZyB0byB0
aGUgRkQgY2FuIGJlIHBlcmZvcm1lZCB3aXRob3V0IGJsb2NraW5nLgogIC8vIENhbGxlcnMgbXVz
dCBwcm92aWRlIGEgcHJlYWxsb2NhdGVkIEZpbGVEZXNjcmlwdG9yV2F0Y2hlciBvYmplY3Qgd2hp
Y2gKICAvLyBjYW4gbGF0ZXIgYmUgdXNlZCB0byBtYW5hZ2UgdGhlIGxpZmV0aW1lIG9mIHRoaXMg
ZXZlbnQuCiAgLy8gSWYgYSBGaWxlRGVzY3JpcHRvcldhdGNoZXIgaXMgcGFzc2VkIGluIHdoaWNo
IGlzIGFscmVhZHkgYXR0YWNoZWQgdG8KICAvLyBhbiBldmVudCwgdGhlbiB0aGUgZWZmZWN0IGlz
IGN1bXVsYXRpdmUgaS5lLiBhZnRlciB0aGUgY2FsbCB8Y29udHJvbGxlcnwKICAvLyB3aWxsIHdh
dGNoIGJvdGggdGhlIHByZXZpb3VzIGV2ZW50IGFuZCB0aGUgbmV3IG9uZS4KICAvLyBJZiBhbiBl
cnJvciBvY2N1cnMgd2hpbGUgY2FsbGluZyB0aGlzIG1ldGhvZCBpbiBhIGN1bXVsYXRpdmUgZmFz
aGlvbiwgdGhlCiAgLy8gZXZlbnQgcHJldmlvdXNseSBhdHRhY2hlZCB0byB8Y29udHJvbGxlcnwg
aXMgYWJvcnRlZC4KICAvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KICAvLyBUT0RPKGRrZWdl
bCk6IHN3aXRjaCB0byBlZGdlLXRyaWdnZXJlZCByZWFkaW5lc3Mgbm90aWZpY2F0aW9uCiAgYm9v
bCBXYXRjaEZpbGVEZXNjcmlwdG9yKGludCBmZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBwZXJzaXN0ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlIG1vZGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVEZXNjcmlwdG9yV2F0Y2hlciAqY29udHJvbGxl
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgV2F0Y2hlciAqZGVsZWdhdGUpOwoKICAvLyBN
ZXNzYWdlUHVtcCBtZXRob2RzOgogIHZpcnR1YWwgdm9pZCBSdW4oRGVsZWdhdGUqIGRlbGVnYXRl
KTsKICB2aXJ0dWFsIHZvaWQgUXVpdCgpOwogIHZpcnR1YWwgdm9pZCBTY2hlZHVsZVdvcmsoKTsK
ICB2aXJ0dWFsIHZvaWQgU2NoZWR1bGVEZWxheWVkV29yayhjb25zdCBUaW1lJiBkZWxheWVkX3dv
cmtfdGltZSk7CgogcHJpdmF0ZToKCiAgLy8gUmlza3kgcGFydCBvZiBjb25zdHJ1Y3Rvci4gIFJl
dHVybnMgdHJ1ZSBvbiBzdWNjZXNzLgogIGJvb2wgSW5pdCgpOwoKICAvLyBUaGlzIGZsYWcgaXMg
c2V0IHRvIGZhbHNlIHdoZW4gUnVuIHNob3VsZCByZXR1cm4uCiAgYm9vbCBrZWVwX3J1bm5pbmdf
OwoKICAvLyBUaGlzIGZsYWcgaXMgc2V0IHdoZW4gaW5zaWRlIFJ1bi4KICBib29sIGluX3J1bl87
CgogIC8vIFRoZSB0aW1lIGF0IHdoaWNoIHdlIHNob3VsZCBjYWxsIERvRGVsYXllZFdvcmsuCiAg
VGltZSBkZWxheWVkX3dvcmtfdGltZV87CgogIC8vIExpYmV2ZW50IGRpc3BhdGNoZXIuICBXYXRj
aGVzIGFsbCBzb2NrZXRzIHJlZ2lzdGVyZWQgd2l0aCBpdCwgYW5kIHNlbmRzCiAgLy8gcmVhZGlu
ZXNzIGNhbGxiYWNrcyB3aGVuIGEgc29ja2V0IGlzIHJlYWR5IGZvciBJL08uCiAgZXZlbnRfYmFz
ZSogZXZlbnRfYmFzZV87CgogIC8vIENhbGxlZCBieSBsaWJldmVudCB0byB0ZWxsIHVzIGEgcmVn
aXN0ZXJlZCBGRCBjYW4gYmUgcmVhZC93cml0dGVuIHRvLgogIHN0YXRpYyB2b2lkIE9uTGliZXZl
bnROb3RpZmljYXRpb24oaW50IGZkLCBzaG9ydCBmbGFncywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQqIGNvbnRleHQpOwoKICAvLyBVbml4IHBpcGUgdXNlZCB0byBp
bXBsZW1lbnQgU2NoZWR1bGVXb3JrKCkKICAvLyAuLi4gY2FsbGJhY2s7IGNhbGxlZCBieSBsaWJl
dmVudCBpbnNpZGUgUnVuKCkgd2hlbiBwaXBlIGlzIHJlYWR5IHRvIHJlYWQKICBzdGF0aWMgdm9p
ZCBPbldha2V1cChpbnQgc29ja2V0LCBzaG9ydCBmbGFncywgdm9pZCogY29udGV4dCk7CiAgLy8g
Li4uIHdyaXRlIGVuZDsgU2NoZWR1bGVXb3JrKCkgd3JpdGVzIGEgc2luZ2xlIGJ5dGUgdG8gaXQK
ICBpbnQgd2FrZXVwX3BpcGVfaW5fOwogIC8vIC4uLiByZWFkIGVuZDsgT25XYWtldXAgcmVhZHMg
aXQgYW5kIHRoZW4gYnJlYWtzIFJ1bigpIG91dCBvZiBpdHMgc2xlZXAKICBpbnQgd2FrZXVwX3Bp
cGVfb3V0XzsKICAvLyAuLi4gbGliZXZlbnQgd3JhcHBlciBmb3IgcmVhZCBlbmQKICBldmVudCog
d2FrZXVwX2V2ZW50XzsKCiAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1lc3NhZ2VQdW1wTGli
ZXZlbnQpOwp9OwoKfSAgLy8gbmFtZXNwYWNlIGJhc2UKCiNlbmRpZiAgLy8gQkFTRV9NRVNTQUdF
X1BVTVBfTElCRVZFTlRfSF8KCi8vIEEgTWVzc2FnZUxvb3AgaXMgdXNlZCB0byBwcm9jZXNzIGV2
ZW50cyBmb3IgYSBwYXJ0aWN1bGFyIHRocmVhZC4gIFRoZXJlIGlzCi8vIGF0IG1vc3Qgb25lIE1l
c3NhZ2VMb29wIGluc3RhbmNlIHBlciB0aHJlYWQuCi8vCi8vIEV2ZW50cyBpbmNsdWRlIGF0IGEg
bWluaW11bSBUYXNrIGluc3RhbmNlcyBzdWJtaXR0ZWQgdG8gUG9zdFRhc2sgb3IgdGhvc2UKLy8g
bWFuYWdlZCBieSBUaW1lck1hbmFnZXIuICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgbWVzc2Fn
ZSBwdW1wIHVzZWQgYnkgdGhlCi8vIE1lc3NhZ2VMb29wIG90aGVyIGV2ZW50cyBzdWNoIGFzIFVJ
IG1lc3NhZ2VzIG1heSBiZSBwcm9jZXNzZWQuICBPbiBXaW5kb3dzCi8vIEFQQyBjYWxscyAoYXMg
dGltZSBwZXJtaXRzKSBhbmQgc2lnbmFscyBzZW50IHRvIGEgcmVnaXN0ZXJlZCBzZXQgb2YgSEFO
RExFcwovLyBtYXkgYWxzbyBiZSBwcm9jZXNzZWQuCi8vCi8vIE5PVEU6IFVubGVzcyBvdGhlcndp
c2Ugc3BlY2lmaWVkLCBhIE1lc3NhZ2VMb29wJ3MgbWV0aG9kcyBtYXkgb25seSBiZSBjYWxsZWQK
Ly8gb24gdGhlIHRocmVhZCB3aGVyZSB0aGUgTWVzc2FnZUxvb3AncyBSdW4gbWV0aG9kIGV4ZWN1
dGVzLgovLwovLyBOT1RFOiBNZXNzYWdlTG9vcCBoYXMgdGFzayByZWVudHJhbmN5IHByb3RlY3Rp
b24uICBUaGlzIG1lYW5zIHRoYXQgaWYgYQovLyB0YXNrIGlzIGJlaW5nIHByb2Nlc3NlZCwgYSBz
ZWNvbmQgdGFzayBjYW5ub3Qgc3RhcnQgdW50aWwgdGhlIGZpcnN0IHRhc2sgaXMKLy8gZmluaXNo
ZWQuICBSZWVudHJhbmN5IGNhbiBoYXBwZW4gd2hlbiBwcm9jZXNzaW5nIGEgdGFzaywgYW5kIGFu
IGlubmVyCi8vIG1lc3NhZ2UgcHVtcCBpcyBjcmVhdGVkLiAgVGhhdCBpbm5lciBwdW1wIHRoZW4g
cHJvY2Vzc2VzIG5hdGl2ZSBtZXNzYWdlcwovLyB3aGljaCBjb3VsZCBpbXBsaWNpdGx5IHN0YXJ0
IGFuIGlubmVyIHRhc2suICBJbm5lciBtZXNzYWdlIHB1bXBzIGFyZSBjcmVhdGVkCi8vIHdpdGgg
ZGlhbG9ncyAoRGlhbG9nQm94KSwgY29tbW9uIGRpYWxvZ3MgKEdldE9wZW5GaWxlTmFtZSksIE9M
RSBmdW5jdGlvbnMKLy8gKERvRHJhZ0Ryb3ApLCBwcmludGVyIGZ1bmN0aW9ucyAoU3RhcnREb2Mp
IGFuZCAqbWFueSogb3RoZXJzLgovLwovLyBTYW1wbGUgd29ya2Fyb3VuZCB3aGVuIGlubmVyIHRh
c2sgcHJvY2Vzc2luZyBpcyBuZWVkZWQ6Ci8vICAgYm9vbCBvbGRfc3RhdGUgPSBNZXNzYWdlTG9v
cDo6Y3VycmVudCgpLT5OZXN0YWJsZVRhc2tzQWxsb3dlZCgpOwovLyAgIE1lc3NhZ2VMb29wOjpj
dXJyZW50KCktPlNldE5lc3RhYmxlVGFza3NBbGxvd2VkKHRydWUpOwovLyAgIEhSRVNVTFQgaHIg
PSBEb0RyYWdEcm9wKC4uLik7IC8vIEltcGxpY2l0bHkgcnVucyBhIG1vZGFsIG1lc3NhZ2UgbG9v
cCBoZXJlLgovLyAgIE1lc3NhZ2VMb29wOjpjdXJyZW50KCktPlNldE5lc3RhYmxlVGFza3NBbGxv
d2VkKG9sZF9zdGF0ZSk7Ci8vICAgLy8gUHJvY2VzcyBociAgKHRoZSByZXN1bHQgcmV0dXJuZWQg
YnkgRG9EcmFnRHJvcCgpLgovLwovLyBQbGVhc2UgYmUgU1VSRSB5b3VyIHRhc2sgaXMgcmVlbnRy
YW50IChuZXN0YWJsZSkgYW5kIGFsbCBnbG9iYWwgdmFyaWFibGVzCi8vIGFyZSBzdGFibGUgYW5k
IGFjY2Vzc2libGUgYmVmb3JlIGNhbGxpbmcgU2V0TmVzdGFibGVUYXNrc0FsbG93ZWQodHJ1ZSku
Ci8vCmNsYXNzIE1lc3NhZ2VMb29wIDogcHVibGljIGJhc2U6Ok1lc3NhZ2VQdW1wOjpEZWxlZ2F0
ZSB7CiBwdWJsaWM6CiAgc3RhdGljIHZvaWQgRW5hYmxlSGlzdG9ncmFtbWVyKGJvb2wgZW5hYmxl
X2hpc3RvZ3JhbW1lcik7CgogIC8vIEEgRGVzdHJ1Y3Rpb25PYnNlcnZlciBpcyBub3RpZmllZCB3
aGVuIHRoZSBjdXJyZW50IE1lc3NhZ2VMb29wIGlzIGJlaW5nCiAgLy8gZGVzdHJveWVkLiAgVGhl
c2Ugb2JzZXZlcnMgYXJlIG5vdGlmaWVkIHByaW9yIHRvIE1lc3NhZ2VMb29wOjpjdXJyZW50KCkK
ICAvLyBiZWluZyBjaGFuZ2VkIHRvIHJldHVybiBOVUxMLiAgVGhpcyBnaXZlcyBpbnRlcmVzdGVk
IHBhcnRpZXMgdGhlIGNoYW5jZSB0bwogIC8vIGRvIGZpbmFsIGNsZWFudXAgdGhhdCBkZXBlbmRz
IG9uIHRoZSBNZXNzYWdlTG9vcC4KICAvLwogIC8vIE5PVEU6IEFueSB0YXNrcyBwb3N0ZWQgdG8g
dGhlIE1lc3NhZ2VMb29wIGR1cmluZyB0aGlzIG5vdGlmaWNhdGlvbiB3aWxsCiAgLy8gbm90IGJl
IHJ1bi4gIEluc3RlYWQsIHRoZXkgd2lsbCBiZSBkZWxldGVkLgogIC8vCiAgY2xhc3MgRGVzdHJ1
Y3Rpb25PYnNlcnZlciB7CiAgIHB1YmxpYzoKICAgIHZpcnR1YWwgfkRlc3RydWN0aW9uT2JzZXJ2
ZXIoKSB7fQogICAgdmlydHVhbCB2b2lkIFdpbGxEZXN0cm95Q3VycmVudE1lc3NhZ2VMb29wKCkg
PSAwOwogIH07CgogIC8vIEFkZCBhIERlc3RydWN0aW9uT2JzZXJ2ZXIsIHdoaWNoIHdpbGwgc3Rh
cnQgcmVjZWl2aW5nIG5vdGlmaWNhdGlvbnMKICAvLyBpbW1lZGlhdGVseS4KICB2b2lkIEFkZERl
c3RydWN0aW9uT2JzZXJ2ZXIoRGVzdHJ1Y3Rpb25PYnNlcnZlciogZGVzdHJ1Y3Rpb25fb2JzZXJ2
ZXIpOwoKICAvLyBSZW1vdmUgYSBEZXN0cnVjdGlvbk9ic2VydmVyLiAgSXQgaXMgc2FmZSB0byBj
YWxsIHRoaXMgbWV0aG9kIHdoaWxlIGEKICAvLyBEZXN0cnVjdGlvbk9ic2VydmVyIGlzIHJlY2Vp
dmluZyBhIG5vdGlmaWNhdGlvbiBjYWxsYmFjay4KICB2b2lkIFJlbW92ZURlc3RydWN0aW9uT2Jz
ZXJ2ZXIoRGVzdHJ1Y3Rpb25PYnNlcnZlciogZGVzdHJ1Y3Rpb25fb2JzZXJ2ZXIpOwoKICAvLyBU
aGUgIlBvc3RUYXNrIiBmYW1pbHkgb2YgbWV0aG9kcyBjYWxsIHRoZSB0YXNrJ3MgUnVuIG1ldGhv
ZCBhc3luY2hyb25vdXNseQogIC8vIGZyb20gd2l0aGluIGEgbWVzc2FnZSBsb29wIGF0IHNvbWUg
cG9pbnQgaW4gdGhlIGZ1dHVyZS4KICAvLwogIC8vIFdpdGggdGhlIFBvc3RUYXNrIHZhcmlhbnQs
IHRhc2tzIGFyZSBpbnZva2VkIGluIEZJRk8gb3JkZXIsIGludGVyLW1peGVkCiAgLy8gd2l0aCBu
b3JtYWwgVUkgb3IgSU8gZXZlbnQgcHJvY2Vzc2luZy4gIFdpdGggdGhlIFBvc3REZWxheWVkVGFz
ayB2YXJpYW50LAogIC8vIHRhc2tzIGFyZSBjYWxsZWQgYWZ0ZXIgYXQgbGVhc3QgYXBwcm94aW1h
dGVseSAnZGVsYXlfbXMnIGhhdmUgZWxhcHNlZC4KICAvLwogIC8vIFRoZSBOb25OZXN0YWJsZSB2
YXJpYW50cyB3b3JrIHNpbWlsYXJseSBleGNlcHQgdGhhdCB0aGV5IHByb21pc2UgbmV2ZXIgdG8K
ICAvLyBkaXNwYXRjaCB0aGUgdGFzayBmcm9tIGEgbmVzdGVkIGludm9jYXRpb24gb2YgTWVzc2Fn
ZUxvb3A6OlJ1bi4gIEluc3RlYWQsCiAgLy8gc3VjaCB0YXNrcyBnZXQgZGVmZXJyZWQgdW50aWwg
dGhlIHRvcC1tb3N0IE1lc3NhZ2VMb29wOjpSdW4gaXMgZXhlY3V0aW5nLgogIC8vCiAgLy8gVGhl
IE1lc3NhZ2VMb29wIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgVGFzaywgYW5kIGRlbGV0ZXMgaXQg
YWZ0ZXIgaXQgaGFzCiAgLy8gYmVlbiBSdW4oKS4KICAvLwogIC8vIE5PVEU6IFRoZXNlIG1ldGhv
ZHMgbWF5IGJlIGNhbGxlZCBvbiBhbnkgdGhyZWFkLiAgVGhlIFRhc2sgd2lsbCBiZSBpbnZva2Vk
CiAgLy8gb24gdGhlIHRocmVhZCB0aGF0IGV4ZWN1dGVzIE1lc3NhZ2VMb29wOjpSdW4oKS4KCiAg
dm9pZCBQb3N0VGFzaygKICAgICAgY29uc3QgdHJhY2tlZF9vYmplY3RzOjpMb2NhdGlvbiYgZnJv
bV9oZXJlLCBUYXNrKiB0YXNrKTsKCiAgdm9pZCBQb3N0RGVsYXllZFRhc2soCiAgICAgIGNvbnN0
IHRyYWNrZWRfb2JqZWN0czo6TG9jYXRpb24mIGZyb21faGVyZSwgVGFzayogdGFzaywgaW50NjQg
ZGVsYXlfbXMpOwoKICB2b2lkIFBvc3ROb25OZXN0YWJsZVRhc2soCiAgICAgIGNvbnN0IHRyYWNr
ZWRfb2JqZWN0czo6TG9jYXRpb24mIGZyb21faGVyZSwgVGFzayogdGFzayk7CgogIHZvaWQgUG9z
dE5vbk5lc3RhYmxlRGVsYXllZFRhc2soCiAgICAgIGNvbnN0IHRyYWNrZWRfb2JqZWN0czo6TG9j
YXRpb24mIGZyb21faGVyZSwgVGFzayogdGFzaywgaW50NjQgZGVsYXlfbXMpOwoKICAvLyBBIHZh
cmlhbnQgb24gUG9zdFRhc2sgdGhhdCBkZWxldGVzIHRoZSBnaXZlbiBvYmplY3QuICBUaGlzIGlz
IHVzZWZ1bAogIC8vIGlmIHRoZSBvYmplY3QgbmVlZHMgdG8gbGl2ZSB1bnRpbCB0aGUgbmV4dCBy
dW4gb2YgdGhlIE1lc3NhZ2VMb29wIChmb3IKICAvLyBleGFtcGxlLCBkZWxldGluZyBhIFJlbmRl
clByb2Nlc3NIb3N0IGZyb20gd2l0aGluIGFuIElQQyBjYWxsYmFjayBpcyBub3QKICAvLyBnb29k
KS4KICAvLwogIC8vIE5PVEU6IFRoaXMgbWV0aG9kIG1heSBiZSBjYWxsZWQgb24gYW55IHRocmVh
ZC4gIFRoZSBvYmplY3Qgd2lsbCBiZSBkZWxldGVkCiAgLy8gb24gdGhlIHRocmVhZCB0aGF0IGV4
ZWN1dGVzIE1lc3NhZ2VMb29wOjpSdW4oKS4gIElmIHRoaXMgaXMgbm90IHRoZSBzYW1lCiAgLy8g
YXMgdGhlIHRocmVhZCB0aGF0IGNhbGxzIFBvc3REZWxheWVkVGFzayhGUk9NX0hFUkUsICksIHRo
ZW4gVCBNVVNUIGluaGVyaXQKICAvLyBmcm9tIFJlZkNvdW50ZWRUaHJlYWRTYWZlPFQ+IQogIHRl
bXBsYXRlIDxjbGFzcyBUPgogIHZvaWQgRGVsZXRlU29vbihjb25zdCB0cmFja2VkX29iamVjdHM6
OkxvY2F0aW9uJiBmcm9tX2hlcmUsIFQqIG9iamVjdCkgewogICAgUG9zdE5vbk5lc3RhYmxlVGFz
ayhmcm9tX2hlcmUsIG5ldyBEZWxldGVUYXNrPFQ+KG9iamVjdCkpOwogIH0KCiAgLy8gQSB2YXJp
YW50IG9uIFBvc3RUYXNrIHRoYXQgcmVsZWFzZXMgdGhlIGdpdmVuIHJlZmVyZW5jZSBjb3VudGVk
IG9iamVjdAogIC8vIChieSBjYWxsaW5nIGl0cyBSZWxlYXNlIG1ldGhvZCkuICBUaGlzIGlzIHVz
ZWZ1bCBpZiB0aGUgb2JqZWN0IG5lZWRzIHRvCiAgLy8gbGl2ZSB1bnRpbCB0aGUgbmV4dCBydW4g
b2YgdGhlIE1lc3NhZ2VMb29wLCBvciBpZiB0aGUgb2JqZWN0IG5lZWRzIHRvIGJlCiAgLy8gcmVs
ZWFzZWQgb24gYSBwYXJ0aWN1bGFyIHRocmVhZC4KICAvLwogIC8vIE5PVEU6IFRoaXMgbWV0aG9k
IG1heSBiZSBjYWxsZWQgb24gYW55IHRocmVhZC4gIFRoZSBvYmplY3Qgd2lsbCBiZQogIC8vIHJl
bGVhc2VkIChhbmQgdGh1cyBwb3NzaWJseSBkZWxldGVkKSBvbiB0aGUgdGhyZWFkIHRoYXQgZXhl
Y3V0ZXMKICAvLyBNZXNzYWdlTG9vcDo6UnVuKCkuICBJZiB0aGlzIGlzIG5vdCB0aGUgc2FtZSBh
cyB0aGUgdGhyZWFkIHRoYXQgY2FsbHMKICAvLyBQb3N0RGVsYXllZFRhc2soRlJPTV9IRVJFLCAp
LCB0aGVuIFQgTVVTVCBpbmhlcml0IGZyb20KICAvLyBSZWZDb3VudGVkVGhyZWFkU2FmZTxUPiEK
ICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KICB2b2lkIFJlbGVhc2VTb29uKGNvbnN0IHRyYWNrZWRfb2Jq
ZWN0czo6TG9jYXRpb24mIGZyb21faGVyZSwgVCogb2JqZWN0KSB7CiAgICBQb3N0Tm9uTmVzdGFi
bGVUYXNrKGZyb21faGVyZSwgbmV3IFJlbGVhc2VUYXNrPFQ+KG9iamVjdCkpOwogIH0KCiAgLy8g
UnVuIHRoZSBtZXNzYWdlIGxvb3AuCiAgdm9pZCBSdW4oKTsKCiAgLy8gUHJvY2VzcyBhbGwgcGVu
ZGluZyB0YXNrcywgd2luZG93cyBtZXNzYWdlcywgZXRjLiwgYnV0IGRvbid0IHdhaXQvc2xlZXAu
CiAgLy8gUmV0dXJuIGFzIHNvb24gYXMgYWxsIGl0ZW1zIHRoYXQgY2FuIGJlIHJ1biBhcmUgdGFr
ZW4gY2FyZSBvZi4KICB2b2lkIFJ1bkFsbFBlbmRpbmcoKTsKCiAgLy8gU2lnbmFscyB0aGUgUnVu
IG1ldGhvZCB0byByZXR1cm4gYWZ0ZXIgaXQgaXMgZG9uZSBwcm9jZXNzaW5nIGFsbCBwZW5kaW5n
CiAgLy8gbWVzc2FnZXMuICBUaGlzIG1ldGhvZCBtYXkgb25seSBiZSBjYWxsZWQgb24gdGhlIHNh
bWUgdGhyZWFkIHRoYXQgY2FsbGVkCiAgLy8gUnVuLCBhbmQgUnVuIG11c3Qgc3RpbGwgYmUgb24g
dGhlIGNhbGwgc3RhY2suCiAgLy8KICAvLyBVc2UgUXVpdFRhc2sgaWYgeW91IG5lZWQgdG8gUXVp
dCBhbm90aGVyIHRocmVhZCdzIE1lc3NhZ2VMb29wLCBidXQgbm90ZQogIC8vIHRoYXQgZG9pbmcg
c28gaXMgZmFpcmx5IGRhbmdlcm91cyBpZiB0aGUgdGFyZ2V0IHRocmVhZCBtYWtlcyBuZXN0ZWQg
Y2FsbHMKICAvLyB0byBNZXNzYWdlTG9vcDo6UnVuLiAgVGhlIHByb2JsZW0gYmVpbmcgdGhhdCB5
b3Ugd29uJ3Qga25vdyB3aGljaCBuZXN0ZWQKICAvLyBydW4gbG9vcCB5b3UgYXJlIHF1aXRpbmcs
IHNvIGJlIGNhcmVmdWwhCiAgLy8KICB2b2lkIFF1aXQoKTsKCiAgLy8gSW52b2tlcyBRdWl0IG9u
IHRoZSBjdXJyZW50IE1lc3NhZ2VMb29wIHdoZW4gcnVuLiAgVXNlZnVsIHRvIHNjaGVkdWxlIGFu
CiAgLy8gYXJiaXRyYXJ5IE1lc3NhZ2VMb29wIHRvIFF1aXQuCiAgY2xhc3MgUXVpdFRhc2sgOiBw
dWJsaWMgVGFzayB7CiAgIHB1YmxpYzoKICAgIHZpcnR1YWwgdm9pZCBSdW4oKSB7CiAgICAgIE1l
c3NhZ2VMb29wOjpjdXJyZW50KCktPlF1aXQoKTsKICAgIH0KICB9OwoKICAvLyBBIE1lc3NhZ2VM
b29wIGhhcyBhIHBhcnRpY3VsYXIgdHlwZSwgd2hpY2ggaW5kaWNhdGVzIHRoZSBzZXQgb2YKICAv
LyBhc3luY2hyb25vdXMgZXZlbnRzIGl0IG1heSBwcm9jZXNzIGluIGFkZGl0aW9uIHRvIHRhc2tz
IGFuZCB0aW1lcnMuCiAgLy8KICAvLyBUWVBFX0RFRkFVTFQKICAvLyAgIFRoaXMgdHlwZSBvZiBN
TCBvbmx5IHN1cHBvcnRzIHRhc2tzIGFuZCB0aW1lcnMuCiAgLy8KICAvLyBUWVBFX1VJCiAgLy8g
ICBUaGlzIHR5cGUgb2YgTUwgYWxzbyBzdXBwb3J0cyBuYXRpdmUgVUkgZXZlbnRzIChlLmcuLCBX
aW5kb3dzIG1lc3NhZ2VzKS4KICAvLyAgIFNlZSBhbHNvIE1lc3NhZ2VMb29wRm9yVUkuCiAgLy8K
ICAvLyBUWVBFX0lPCiAgLy8gICBUaGlzIHR5cGUgb2YgTUwgYWxzbyBzdXBwb3J0cyBhc3luY2hy
b25vdXMgSU8uICBTZWUgYWxzbwogIC8vICAgTWVzc2FnZUxvb3BGb3JJTy4KICAvLwogIGVudW0g
VHlwZSB7CiAgICBUWVBFX0RFRkFVTFQsCiAgICBUWVBFX1VJLAogICAgVFlQRV9JTwogIH07Cgog
IC8vIE5vcm1hbGx5LCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGluc3RhbnRpYXRlIGEgTWVzc2Fn
ZUxvb3AuICBJbnN0ZWFkLCBpdAogIC8vIGlzIHR5cGljYWwgdG8gbWFrZSB1c2Ugb2YgdGhlIGN1
cnJlbnQgdGhyZWFkJ3MgTWVzc2FnZUxvb3AgaW5zdGFuY2UuCiAgZXhwbGljaXQgTWVzc2FnZUxv
b3AoVHlwZSB0eXBlID0gVFlQRV9ERUZBVUxUKTsKICB+TWVzc2FnZUxvb3AoKTsKCiAgLy8gUmV0
dXJucyB0aGUgdHlwZSBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgogIFR5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIHR5cGVfOyB9CgogIC8vIE9wdGlvbmFsIGNhbGwgdG8gY29ubmVjdCB0aGUg
dGhyZWFkIG5hbWUgd2l0aCB0aGlzIGxvb3AuCiAgdm9pZCBzZXRfdGhyZWFkX25hbWUoY29uc3Qg
c3RkOjpzdHJpbmcmIHRocmVhZF9uYW1lKSB7CiAgICBEQ0hFQ0sodGhyZWFkX25hbWVfLmVtcHR5
KCkpIDw8ICJTaG91bGQgbm90IHJlbmFtZSB0aGlzIHRocmVhZCEiOwogICAgdGhyZWFkX25hbWVf
ID0gdGhyZWFkX25hbWU7CiAgfQogIGNvbnN0IHN0ZDo6c3RyaW5nJiB0aHJlYWRfbmFtZSgpIGNv
bnN0IHsgcmV0dXJuIHRocmVhZF9uYW1lXzsgfQoKICAvLyBSZXR1cm5zIHRoZSBNZXNzYWdlTG9v
cCBvYmplY3QgZm9yIHRoZSBjdXJyZW50IHRocmVhZCwgb3IgbnVsbCBpZiBub25lLgogIHN0YXRp
YyBNZXNzYWdlTG9vcCogY3VycmVudCgpIHsKICAvLyBUT0RPKGRhcmluKTogc2FkbHksIHdlIGNh
bm5vdCBlbmFibGUgdGhpcyB5ZXQgc2luY2UgcGVvcGxlIGNhbGwgdXMgZXZlbgogIC8vIHdoZW4g
dGhleSBoYXZlIG5vIGludGVudGlvbiBvZiB1c2luZyB1cy4KICAvL0RDSEVDSyhsb29wKSA8PCAi
T3VjaCwgZGlkIHlvdSBmb3JnZXQgdG8gaW5pdGlhbGl6ZSBtZT8iOwogIHJldHVybiBsYXp5X3Rs
c19wdHIuUG9pbnRlcigpLT5HZXQoKTsKfQogIC8vIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHJl
Y3Vyc2l2ZSB0YXNrIHByb2Nlc3NpbmcuIFRoaXMgaGFwcGVucyBpbiB0aGUgY2FzZQogIC8vIG9m
IHJlY3Vyc2l2ZSBtZXNzYWdlIGxvb3BzLiBTb21lIHVud2FudGVkIG1lc3NhZ2UgbG9vcCBtYXkg
b2NjdXJzIHdoZW4KICAvLyB1c2luZyBjb21tb24gY29udHJvbHMgb3IgcHJpbnRlciBmdW5jdGlv
bnMuIEJ5IGRlZmF1bHQsIHJlY3Vyc2l2ZSB0YXNrCiAgLy8gcHJvY2Vzc2luZyBpcyBkaXNhYmxl
ZC4KICAvLwogIC8vIFRoZSBzcGVjaWZpYyBjYXNlIHdoZXJlIHRhc2tzIGdldCBxdWV1ZWQgaXM6
CiAgLy8gLSBUaGUgdGhyZWFkIGlzIHJ1bm5pbmcgYSBtZXNzYWdlIGxvb3AuCiAgLy8gLSBJdCBy
ZWNlaXZlcyBhIHRhc2sgIzEgYW5kIGV4ZWN1dGUgaXQuCiAgLy8gLSBUaGUgdGFzayAjMSBpbXBs
aWNpdGx5IHN0YXJ0IGEgbWVzc2FnZSBsb29wLCBsaWtlIGEgTWVzc2FnZUJveCBpbiB0aGUKICAv
LyAgIHVuaXQgdGVzdC4gVGhpcyBjYW4gYWxzbyBiZSBTdGFydERvYyBvciBHZXRTYXZlRmlsZU5h
bWUuCiAgLy8gLSBUaGUgdGhyZWFkIHJlY2VpdmVzIGEgdGFzayAjMiBiZWZvcmUgb3Igd2hpbGUg
aW4gdGhpcyBzZWNvbmQgbWVzc2FnZQogIC8vICAgbG9vcC4KICAvLyAtIFdpdGggTmVzdGFibGVU
YXNrc0FsbG93ZWQgc2V0IHRvIHRydWUsIHRoZSB0YXNrICMyIHdpbGwgcnVuIHJpZ2h0IGF3YXku
CiAgLy8gICBPdGhlcndpc2UsIGl0IHdpbGwgZ2V0IGV4ZWN1dGVkIHJpZ2h0IGFmdGVyIHRhc2sg
IzEgY29tcGxldGVzIGF0ICJ0aHJlYWQKICAvLyAgIG1lc3NhZ2UgbG9vcCBsZXZlbCIuCiAgdm9p
ZCBTZXROZXN0YWJsZVRhc2tzQWxsb3dlZChib29sIGFsbG93ZWQpOwogIGJvb2wgTmVzdGFibGVU
YXNrc0FsbG93ZWQoKSBjb25zdDsKCiAgLy8gRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgcmVzdG9y
YXRpb24gZHVyaW5nIGFuIGV4Y2VwdGlvbiBvZiB0aGUgdW5oYW5kbGVkCiAgLy8gZXhjZXB0aW9u
IGZpbHRlciB0aGF0IHdhcyBhY3RpdmUgd2hlbiBSdW4oKSB3YXMgY2FsbGVkLiBUaGlzIGNhbiBo
YXBwZW4KICAvLyBpZiBzb21lIHRoaXJkIHBhcnR5IGNvZGUgY2FsbCBTZXRVbmhhbmRsZWRFeGNl
cHRpb25GaWx0ZXIoKSBhbmQgbmV2ZXIKICAvLyByZXN0b3JlcyB0aGUgcHJldmlvdXMgZmlsdGVy
LgogIHZvaWQgc2V0X2V4Y2VwdGlvbl9yZXN0b3JhdGlvbihib29sIHJlc3RvcmUpIHsKICAgIGV4
Y2VwdGlvbl9yZXN0b3JhdGlvbl8gPSByZXN0b3JlOwogIH0KCiAgLy8gUmV0dXJucyB0cnVlIGlm
IHdlIGFyZSBjdXJyZW50bHkgcnVubmluZyBhIG5lc3RlZCBtZXNzYWdlIGxvb3AuCiAgYm9vbCBJ
c05lc3RlZCgpOwoKCiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBwcm90ZWN0ZWQ6CiAgc3RydWN0
IFJ1blN0YXRlIHsKICAgIC8vIFVzZWQgdG8gY291bnQgaG93IG1hbnkgUnVuKCkgaW52b2NhdGlv
bnMgYXJlIG9uIHRoZSBzdGFjay4KICAgIGludCBydW5fZGVwdGg7CgogICAgLy8gVXNlZCB0byBy
ZWNvcmQgdGhhdCBRdWl0KCkgd2FzIGNhbGxlZCwgb3IgdGhhdCB3ZSBzaG91bGQgcXVpdCB0aGUg
cHVtcAogICAgLy8gb25jZSBpdCBiZWNvbWVzIGlkbGUuCiAgICBib29sIHF1aXRfcmVjZWl2ZWQ7
CgogIH07CgogIGNsYXNzIEF1dG9SdW5TdGF0ZSA6IFJ1blN0YXRlIHsKICAgcHVibGljOgogICAg
ZXhwbGljaXQgQXV0b1J1blN0YXRlKE1lc3NhZ2VMb29wKiBsb29wKTsKICAgIH5BdXRvUnVuU3Rh
dGUoKTsKICAgcHJpdmF0ZToKICAgIE1lc3NhZ2VMb29wKiBsb29wXzsKICAgIFJ1blN0YXRlKiBw
cmV2aW91c19zdGF0ZV87CiAgfTsKCiAgLy8gVGhpcyBzdHJ1Y3R1cmUgaXMgY29waWVkIGFyb3Vu
ZCBieSB2YWx1ZS4KICBzdHJ1Y3QgUGVuZGluZ1Rhc2sgewogICAgVGFzayogdGFzazsgICAgICAg
ICAgICAgICAgICAgLy8gVGhlIHRhc2sgdG8gcnVuLgogICAgYmFzZTo6VGltZSBkZWxheWVkX3J1
bl90aW1lOyAgLy8gVGhlIHRpbWUgd2hlbiB0aGUgdGFzayBzaG91bGQgYmUgcnVuLgogICAgaW50
IHNlcXVlbmNlX251bTsgICAgICAgICAgICAgLy8gVXNlZCB0byBmYWNpbGl0YXRlIHNvcnRpbmcg
YnkgcnVuIHRpbWUuCiAgICBib29sIG5lc3RhYmxlOyAgICAgICAgICAgICAgICAvLyBUcnVlIGlm
IE9LIHRvIGRpc3BhdGNoIGZyb20gYSBuZXN0ZWQgbG9vcC4KCiAgICBQZW5kaW5nVGFzayhUYXNr
KiB0YXNrLCBib29sIG5lc3RhYmxlKQogICAgICAgIDogdGFzayh0YXNrKSwgc2VxdWVuY2VfbnVt
KDApLCBuZXN0YWJsZShuZXN0YWJsZSkgewogICAgfQoKICAgIC8vIFVzZWQgdG8gc3VwcG9ydCBz
b3J0aW5nLgogICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgUGVuZGluZ1Rhc2smIG90aGVyKSBjb25z
dDsKICB9OwoKICBjbGFzcyBUYXNrUXVldWUgOiBwdWJsaWMgc3RkOjpxdWV1ZTxQZW5kaW5nVGFz
az4gewogICBwdWJsaWM6CiAgICB2b2lkIFN3YXAoVGFza1F1ZXVlKiBxdWV1ZSkgewogICAgICBj
LnN3YXAocXVldWUtPmMpOyAgLy8gQ2FsbHMgc3RkOjpkZXF1ZTo6c3dhcAogICAgfQogIH07Cgog
IHR5cGVkZWYgc3RkOjpwcmlvcml0eV9xdWV1ZTxQZW5kaW5nVGFzaz4gRGVsYXllZFRhc2tRdWV1
ZTsKCiAgYmFzZTo6TWVzc2FnZVB1bXBMaWJldmVudCogcHVtcF9saWJldmVudCgpIHsKICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxiYXNlOjpNZXNzYWdlUHVtcExpYmV2ZW50Kj4ocHVtcF8uZ2V0KCkp
OwogIH0KCiAgLy8gQSBmdW5jdGlvbiB0byBlbmNhcHN1bGF0ZSBhbGwgdGhlIGV4Y2VwdGlvbiBo
YW5kbGluZyBjYXBhYmlsaXR5IGluIHRoZQogIC8vIHN0YWNrcyBhcm91bmQgdGhlIHJ1bm5pbmcg
b2YgYSBtYWluIG1lc3NhZ2UgbG9vcC4gIEl0IHdpbGwgcnVuIHRoZSBtZXNzYWdlCiAgLy8gbG9v
cCBpbiBhIFNFSCB0cnkgYmxvY2sgb3Igbm90IGRlcGVuZGluZyBvbiB0aGUgc2V0X1NFSF9yZXN0
b3JhdGlvbigpCiAgLy8gZmxhZyBpbnZva2luZyByZXNwZWN0aXZlbHkgUnVuSW50ZXJuYWxJblNF
SEZyYW1lKCkgb3IgUnVuSW50ZXJuYWwoKS4KICB2b2lkIFJ1bkhhbmRsZXIoKTsKCiAgLy8gQSBz
dXJyb3VuZGluZyBzdGFjayBmcmFtZSBhcm91bmQgdGhlIHJ1bm5pbmcgb2YgdGhlIG1lc3NhZ2Ug
bG9vcCB0aGF0CiAgLy8gc3VwcG9ydHMgYWxsIHNhdmluZyBhbmQgcmVzdG9yaW5nIG9mIHN0YXRl
LCBhcyBpcyBuZWVkZWQgZm9yIGFueS9hbGwgKHVnbHkpCiAgLy8gcmVjdXJzaXZlIGNhbGxzLgog
IHZvaWQgUnVuSW50ZXJuYWwoKTsKCiAgLy8gQ2FsbGVkIHRvIHByb2Nlc3MgYW55IGRlbGF5ZWQg
bm9uLW5lc3RhYmxlIHRhc2tzLgogIGJvb2wgUHJvY2Vzc05leHREZWxheWVkTm9uTmVzdGFibGVU
YXNrKCk7CgogIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIC8vIFJ1biBhIHdvcmtfcXVldWVfIHRh
c2sgb3IgbmV3X3Rhc2ssIGFuZCBkZWxldGUgaXQgKGlmIGl0IHdhcyBwcm9jZXNzZWQgYnkKICAv
LyBQb3N0VGFzaykuIElmIHRoZXJlIGFyZSBxdWV1ZWQgdGFza3MsIHRoZSBvbGRlc3Qgb25lIGlz
IGV4ZWN1dGVkIGFuZAogIC8vIG5ld190YXNrIGlzIHF1ZXVlZC4gbmV3X3Rhc2sgaXMgb3B0aW9u
YWwgYW5kIGNhbiBiZSBOVUxMLiBJbiB0aGlzIE5VTEwKICAvLyBjYXNlLCB0aGUgbWV0aG9kIHdp
bGwgcnVuIG9uZSBwZW5kaW5nIHRhc2sgKGlmIGFueSBleGlzdCkuIFJldHVybnMgdHJ1ZSBpZgog
IC8vIGl0IGV4ZWN1dGVzIGEgdGFzay4gIFF1ZXVlZCB0YXNrcyBhY2N1bXVsYXRlIG9ubHkgd2hl
biB0aGVyZSBpcyBhCiAgLy8gbm9uLW5lc3RhYmxlIHRhc2sgY3VycmVudGx5IHByb2Nlc3Npbmcs
IGluIHdoaWNoIGNhc2UgdGhlIG5ld190YXNrIGlzCiAgLy8gYXBwZW5kZWQgdG8gdGhlIGxpc3Qg
d29ya19xdWV1ZV8uICBTdWNoIHJlLWVudHJhbmN5IGdlbmVyYWxseSBoYXBwZW5zIHdoZW4KICAv
LyBhbiB1bnJlcXVlc3RlZCBtZXNzYWdlIHB1bXAgKHR5cGljYWwgb2YgYSBuYXRpdmUgZGlhbG9n
KSBpcyBleGVjdXRpbmcgaW4KICAvLyB0aGUgY29udGV4dCBvZiBhIHRhc2suCiAgYm9vbCBRdWV1
ZU9yUnVuVGFzayhUYXNrKiBuZXdfdGFzayk7CgogIC8vIFJ1bnMgdGhlIHNwZWNpZmllZCB0YXNr
IGFuZCBkZWxldGVzIGl0LgogIHZvaWQgUnVuVGFzayhUYXNrKiB0YXNrKTsKCiAgLy8gQ2FsbHMg
UnVuVGFzayBvciBxdWV1ZXMgdGhlIHBlbmRpbmdfdGFzayBvbiB0aGUgZGVmZXJyZWQgdGFzayBs
aXN0IGlmIGl0CiAgLy8gY2Fubm90IGJlIHJ1biByaWdodCBub3cuICBSZXR1cm5zIHRydWUgaWYg
dGhlIHRhc2sgd2FzIHJ1bi4KICBib29sIERlZmVyT3JSdW5QZW5kaW5nVGFzayhjb25zdCBQZW5k
aW5nVGFzayYgcGVuZGluZ190YXNrKTsKCiAgLy8gQWRkcyB0aGUgcGVuZGluZyB0YXNrIHRvIGRl
bGF5ZWRfd29ya19xdWV1ZV8uCiAgdm9pZCBBZGRUb0RlbGF5ZWRXb3JrUXVldWUoY29uc3QgUGVu
ZGluZ1Rhc2smIHBlbmRpbmdfdGFzayk7CgogIC8vIExvYWQgdGFza3MgZnJvbSB0aGUgaW5jb21p
bmdfcXVldWVfIGludG8gd29ya19xdWV1ZV8gaWYgdGhlIGxhdHRlciBpcwogIC8vIGVtcHR5LiAg
VGhlIGZvcm1lciByZXF1aXJlcyBhIGxvY2sgdG8gYWNjZXNzLCB3aGlsZSB0aGUgbGF0dGVyIGlz
IGRpcmVjdGx5CiAgLy8gYWNjZXNzaWJsZSBvbiB0aGlzIHRocmVhZC4KICB2b2lkIFJlbG9hZFdv
cmtRdWV1ZSgpOwoKICAvLyBEZWxldGUgdGFza3MgdGhhdCBoYXZlbid0IHJ1biB5ZXQgd2l0aG91
dCBydW5uaW5nIHRoZW0uICBVc2VkIGluIHRoZQogIC8vIGRlc3RydWN0b3IgdG8gbWFrZSBzdXJl
IGFsbCB0aGUgdGFzaydzIGRlc3RydWN0b3JzIGdldCBjYWxsZWQuICBSZXR1cm5zCiAgLy8gdHJ1
ZSBpZiBzb21lIHdvcmsgd2FzIGRvbmUuCiAgYm9vbCBEZWxldGVQZW5kaW5nVGFza3MoKTsKCiAg
Ly8gUG9zdCBhIHRhc2sgdG8gb3VyIGluY29tbWluZyBxdWV1ZS4KICB2b2lkIFBvc3RUYXNrX0hl
bHBlcihjb25zdCB0cmFja2VkX29iamVjdHM6OkxvY2F0aW9uJiBmcm9tX2hlcmUsIFRhc2sqIHRh
c2ssCiAgICAgICAgICAgICAgICAgICAgICAgaW50NjQgZGVsYXlfbXMsIGJvb2wgbmVzdGFibGUp
OwoKICAvLyBiYXNlOjpNZXNzYWdlUHVtcDo6RGVsZWdhdGUgbWV0aG9kczoKICB2aXJ0dWFsIGJv
b2wgRG9Xb3JrKCk7CiAgdmlydHVhbCBib29sIERvRGVsYXllZFdvcmsoYmFzZTo6VGltZSogbmV4
dF9kZWxheWVkX3dvcmtfdGltZSk7CiAgdmlydHVhbCBib29sIERvSWRsZVdvcmsoKTsKCiAgLy8g
U3RhcnQgcmVjb3JkaW5nIGhpc3RvZ3JhbSBpbmZvIGFib3V0IGV2ZW50cyBhbmQgYWN0aW9uIElG
IGl0IHdhcyBlbmFibGVkCiAgLy8gYW5kIElGIHRoZSBzdGF0aXN0aWNzIHJlY29yZGVyIGNhbiBh
Y2NlcHQgYSByZWdpc3RyYXRpb24gb2Ygb3VyIGhpc3RvZ3JhbS4KICB2b2lkIFN0YXJ0SGlzdG9n
cmFtbWVyKCk7CgogIC8vIEFkZCBvY2N1cmVuY2Ugb2YgZXZlbnQgdG8gb3VyIGhpc3RvZ3JhbSwg
c28gdGhhdCB3ZSBjYW4gc2VlIHdoYXQgaXMgYmVpbmcKICAvLyBkb25lIGluIGEgc3BlY2lmaWMg
TWVzc2FnZUxvb3AgaW5zdGFuY2UgKGkuZS4sIHNwZWNpZmljIHRocmVhZCkuCiAgLy8gSWYgbWVz
c2FnZV9oaXN0b2dyYW1fIGlzIE5VTEwsIHRoaXMgaXMgYSBuby1vcC4KICB2b2lkIEhpc3RvZ3Jh
bUV2ZW50KGludCBldmVudCk7CgogIHN0YXRpYyBjb25zdCBMaW5lYXJIaXN0b2dyYW06OkRlc2Ny
aXB0aW9uUGFpciBldmVudF9kZXNjcmlwdGlvbnNfW107CiAgc3RhdGljIGJvb2wgZW5hYmxlX2hp
c3RvZ3JhbW1lcl87CgogIFR5cGUgdHlwZV87CgogIC8vIEEgbGlzdCBvZiB0YXNrcyB0aGF0IG5l
ZWQgdG8gYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgaW5zdGFuY2UuICBOb3RlIHRoYXQKICAvLyB0aGlz
IHF1ZXVlIGlzIG9ubHkgYWNjZXNzZWQgKHB1c2gvcG9wKSBieSBvdXIgY3VycmVudCB0aHJlYWQu
CiAgVGFza1F1ZXVlIHdvcmtfcXVldWVfOwoKICAvLyBDb250YWlucyBkZWxheWVkIHRhc2tzLCBz
b3J0ZWQgYnkgdGhlaXIgJ2RlbGF5ZWRfcnVuX3RpbWUnIHByb3BlcnR5LgogIERlbGF5ZWRUYXNr
UXVldWUgZGVsYXllZF93b3JrX3F1ZXVlXzsKCiAgLy8gQSBxdWV1ZSBvZiBub24tbmVzdGFibGUg
dGFza3MgdGhhdCB3ZSBoYWQgdG8gZGVmZXIgYmVjYXVzZSB3aGVuIGl0IGNhbWUKICAvLyB0aW1l
IHRvIGV4ZWN1dGUgdGhlbSB3ZSB3ZXJlIGluIGEgbmVzdGVkIG1lc3NhZ2UgbG9vcC4gIFRoZXkg
d2lsbCBleGVjdXRlCiAgLy8gb25jZSB3ZSdyZSBvdXQgb2YgbmVzdGVkIG1lc3NhZ2UgbG9vcHMu
CiAgVGFza1F1ZXVlIGRlZmVycmVkX25vbl9uZXN0YWJsZV93b3JrX3F1ZXVlXzsKCiAgc2NvcGVk
X3JlZnB0cjxiYXNlOjpNZXNzYWdlUHVtcD4gcHVtcF87CgogIE9ic2VydmVyTGlzdDxEZXN0cnVj
dGlvbk9ic2VydmVyPiBkZXN0cnVjdGlvbl9vYnNlcnZlcnNfOwoKICAvLyBBIHJlY3Vyc2lvbiBi
bG9jayB0aGF0IHByZXZlbnRzIGFjY2lkZW50YWxseSBydW5uaW5nIGFkZGl0b25hbCB0YXNrcyB3
aGVuCiAgLy8gaW5zaWRlciBhIChhY2NpZGVudGFsbHkgaW5kdWNlZD8pIG5lc3RlZCBtZXNzYWdl
IHB1bXAuCiAgYm9vbCBuZXN0YWJsZV90YXNrc19hbGxvd2VkXzsKCiAgYm9vbCBleGNlcHRpb25f
cmVzdG9yYXRpb25fOwoKICBzdGQ6OnN0cmluZyB0aHJlYWRfbmFtZV87CiAgLy8gQSBwcm9maWxp
bmcgaGlzdG9ncmFtIHNob3dpbmcgdGhlIGNvdW50cyBvZiB2YXJpb3VzIG1lc3NhZ2VzIGFuZCBl
dmVudHMuCiAgc2NvcGVkX3B0cjxMaW5lYXJIaXN0b2dyYW0+IG1lc3NhZ2VfaGlzdG9ncmFtXzsK
CiAgLy8gQSBudWxsIHRlcm1pbmF0ZWQgbGlzdCB3aGljaCBjcmVhdGVzIGFuIGluY29taW5nX3F1
ZXVlIG9mIHRhc2tzIHRoYXQgYXJlCiAgLy8gYXF1aXJlZCB1bmRlciBhIG11dGV4IGZvciBwcm9j
ZXNzaW5nIG9uIHRoaXMgaW5zdGFuY2UncyB0aHJlYWQuIFRoZXNlIHRhc2tzCiAgLy8gaGF2ZSBu
b3QgeWV0IGJlZW4gc29ydGVkIG91dCBpbnRvIGl0ZW1zIGZvciBvdXIgd29ya19xdWV1ZV8gdnMg
aXRlbXMgdGhhdAogIC8vIHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgVGltZXJNYW5hZ2VyLgogIFRh
c2tRdWV1ZSBpbmNvbWluZ19xdWV1ZV87CiAgLy8gUHJvdGVjdCBhY2Nlc3MgdG8gaW5jb21pbmdf
cXVldWVfLgogIExvY2sgaW5jb21pbmdfcXVldWVfbG9ja187CgogIFJ1blN0YXRlKiBzdGF0ZV87
CgogIC8vIFRoZSBuZXh0IHNlcXVlbmNlIG51bWJlciB0byB1c2UgZm9yIGRlbGF5ZWQgdGFza3Mu
CiAgaW50IG5leHRfc2VxdWVuY2VfbnVtXzsKCiAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1l
c3NhZ2VMb29wKTsKfTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gTWVzc2FnZUxvb3BGb3JV
SSBleHRlbmRzIE1lc3NhZ2VMb29wIHdpdGggbWV0aG9kcyB0aGF0IGFyZSBwYXJ0aWN1bGFyIHRv
IGEKLy8gTWVzc2FnZUxvb3AgaW5zdGFudGlhdGVkIHdpdGggVFlQRV9VSS4KLy8KLy8gVGhpcyBj
bGFzcyBpcyB0eXBpY2FsbHkgdXNlZCBsaWtlIHNvOgovLyAgIE1lc3NhZ2VMb29wRm9yVUk6OmN1
cnJlbnQoKS0+Li4uY2FsbCBzb21lIG1ldGhvZC4uLgovLwpjbGFzcyBNZXNzYWdlTG9vcEZvclVJ
IDogcHVibGljIE1lc3NhZ2VMb29wIHsKIHB1YmxpYzoKICBNZXNzYWdlTG9vcEZvclVJKCkgOiBN
ZXNzYWdlTG9vcChUWVBFX1VJKSB7CiAgfQoKICAvLyBSZXR1cm5zIHRoZSBNZXNzYWdlTG9vcEZv
clVJIG9mIHRoZSBjdXJyZW50IHRocmVhZC4KICBzdGF0aWMgTWVzc2FnZUxvb3BGb3JVSSogY3Vy
cmVudCgpIHsKICAgIE1lc3NhZ2VMb29wKiBsb29wID0gTWVzc2FnZUxvb3A6OmN1cnJlbnQoKTsK
ICAgIERDSEVDS19FUShNZXNzYWdlTG9vcDo6VFlQRV9VSSwgbG9vcC0+dHlwZSgpKTsKICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxNZXNzYWdlTG9vcEZvclVJKj4obG9vcCk7CiAgfQoKfTsKCi8vIERv
IG5vdCBhZGQgYW55IG1lbWJlciB2YXJpYWJsZXMgdG8gTWVzc2FnZUxvb3BGb3JVSSEgIFRoaXMg
aXMgaW1wb3J0YW50IGIvYwovLyBNZXNzYWdlTG9vcEZvclVJIGlzIG9mdGVuIGFsbG9jYXRlZCB2
aWEgTWVzc2FnZUxvb3AoVFlQRV9VSSkuICBBbnkgZXh0cmEKLy8gZGF0YSB0aGF0IHlvdSBuZWVk
IHNob3VsZCBiZSBzdG9yZWQgb24gdGhlIE1lc3NhZ2VMb29wJ3MgcHVtcF8gaW5zdGFuY2UuCkNP
TVBJTEVfQVNTRVJUKHNpemVvZihNZXNzYWdlTG9vcCkgPT0gc2l6ZW9mKE1lc3NhZ2VMb29wRm9y
VUkpLAogICAgICAgICAgICAgICBNZXNzYWdlTG9vcEZvclVJX3Nob3VsZF9ub3RfaGF2ZV9leHRy
YV9tZW1iZXJfdmFyaWFibGVzKTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gTWVzc2FnZUxv
b3BGb3JJTyBleHRlbmRzIE1lc3NhZ2VMb29wIHdpdGggbWV0aG9kcyB0aGF0IGFyZSBwYXJ0aWN1
bGFyIHRvIGEKLy8gTWVzc2FnZUxvb3AgaW5zdGFudGlhdGVkIHdpdGggVFlQRV9JTy4KLy8KLy8g
VGhpcyBjbGFzcyBpcyB0eXBpY2FsbHkgdXNlZCBsaWtlIHNvOgovLyAgIE1lc3NhZ2VMb29wRm9y
SU86OmN1cnJlbnQoKS0+Li4uY2FsbCBzb21lIG1ldGhvZC4uLgovLwpjbGFzcyBNZXNzYWdlTG9v
cEZvcklPIDogcHVibGljIE1lc3NhZ2VMb29wIHsKIHB1YmxpYzoKICBNZXNzYWdlTG9vcEZvcklP
KCkgOiBNZXNzYWdlTG9vcChUWVBFX0lPKSB7CiAgfQoKICAvLyBSZXR1cm5zIHRoZSBNZXNzYWdl
TG9vcEZvcklPIG9mIHRoZSBjdXJyZW50IHRocmVhZC4KICBzdGF0aWMgTWVzc2FnZUxvb3BGb3JJ
TyogY3VycmVudCgpIHsKICAgIE1lc3NhZ2VMb29wKiBsb29wID0gTWVzc2FnZUxvb3A6OmN1cnJl
bnQoKTsKICAgIERDSEVDS19FUShNZXNzYWdlTG9vcDo6VFlQRV9JTywgbG9vcC0+dHlwZSgpKTsK
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZXNzYWdlTG9vcEZvcklPKj4obG9vcCk7CiAgfQoKICB0
eXBlZGVmIGJhc2U6Ok1lc3NhZ2VQdW1wTGliZXZlbnQ6OldhdGNoZXIgV2F0Y2hlcjsKICB0eXBl
ZGVmIGJhc2U6Ok1lc3NhZ2VQdW1wTGliZXZlbnQ6OkZpbGVEZXNjcmlwdG9yV2F0Y2hlcgogICAg
ICBGaWxlRGVzY3JpcHRvcldhdGNoZXI7CgogIGVudW0gTW9kZSB7CiAgICBXQVRDSF9SRUFEID0g
YmFzZTo6TWVzc2FnZVB1bXBMaWJldmVudDo6V0FUQ0hfUkVBRCwKICAgIFdBVENIX1dSSVRFID0g
YmFzZTo6TWVzc2FnZVB1bXBMaWJldmVudDo6V0FUQ0hfV1JJVEUsCiAgICBXQVRDSF9SRUFEX1dS
SVRFID0gYmFzZTo6TWVzc2FnZVB1bXBMaWJldmVudDo6V0FUQ0hfUkVBRF9XUklURQogIH07Cgog
IC8vIFBsZWFzZSBzZWUgTWVzc2FnZVB1bXBMaWJldmVudCBmb3IgZGVmaW5pdGlvbi4KICBib29s
IFdhdGNoRmlsZURlc2NyaXB0b3IoaW50IGZkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHBlcnNpc3RlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGUgbW9kZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRmlsZURlc2NyaXB0b3JXYXRjaGVyICpjb250cm9sbGVy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBXYXRjaGVyICpkZWxlZ2F0ZSk7Cn07CgovLyBE
byBub3QgYWRkIGFueSBtZW1iZXIgdmFyaWFibGVzIHRvIE1lc3NhZ2VMb29wRm9ySU8hICBUaGlz
IGlzIGltcG9ydGFudCBiL2MKLy8gTWVzc2FnZUxvb3BGb3JJTyBpcyBvZnRlbiBhbGxvY2F0ZWQg
dmlhIE1lc3NhZ2VMb29wKFRZUEVfSU8pLiAgQW55IGV4dHJhCi8vIGRhdGEgdGhhdCB5b3UgbmVl
ZCBzaG91bGQgYmUgc3RvcmVkIG9uIHRoZSBNZXNzYWdlTG9vcCdzIHB1bXBfIGluc3RhbmNlLgpD
T01QSUxFX0FTU0VSVChzaXplb2YoTWVzc2FnZUxvb3ApID09IHNpemVvZihNZXNzYWdlTG9vcEZv
cklPKSwKICAgICAgICAgICAgICAgTWVzc2FnZUxvb3BGb3JJT19zaG91bGRfbm90X2hhdmVfZXh0
cmFfbWVtYmVyX3ZhcmlhYmxlcyk7CgojZW5kaWYgIC8vIEJBU0VfTUVTU0FHRV9MT09QX0hfCgoK
CnVzaW5nIGJhc2U6OlRpbWVEZWx0YTsgCm5hbWVzcGFjZSB0cmFja2VkX29iamVjdHMgewoKQmly
dGhzKiBUaHJlYWREYXRhOjpGaW5kTGlmZXRpbWUoY29uc3QgTG9jYXRpb24mIGxvY2F0aW9uKSB7
CiAgaWYgKCFtZXNzYWdlX2xvb3BfKSAgLy8gSW4gY2FzZSBtZXNzYWdlIGxvb3Agd2Fzbid0IHll
dCBhcm91bmQuLi4KICAgIG1lc3NhZ2VfbG9vcF8gPSBNZXNzYWdlTG9vcDo6Y3VycmVudCgpOyAg
Ly8gRmluZCBpdCBub3cuCgogIEJpcnRoTWFwOjppdGVyYXRvciBpdCA9IGJpcnRoX21hcF8uZmlu
ZChsb2NhdGlvbik7CiAgaWYgKGl0ICE9IGJpcnRoX21hcF8uZW5kKCkpCiAgICByZXR1cm4gaXQt
PnNlY29uZDsKICBCaXJ0aHMqIHRyYWNrZXIgPSBuZXcgQmlydGhzKGxvY2F0aW9uKTsKCiAgLy8g
TG9jayBzaW5jZSB0aGUgbWFwIG1heSBnZXQgcmVsb2NhdGVkIG5vdywgYW5kIG90aGVyIHRocmVh
ZHMgc29tZXRpbWVzCiAgLy8gc25hcHNob3QgaXQgKGJ1dCB0aGV5IGxvY2sgYmVmb3JlIGNvcHlp
bmcgaXQpLgogIEF1dG9Mb2NrIGxvY2sobG9ja18pOwogIGJpcnRoX21hcF9bbG9jYXRpb25dID0g
dHJhY2tlcjsKICByZXR1cm4gdHJhY2tlcjsKfQoKdm9pZCBUaHJlYWREYXRhOjpUYWxseUFEZWF0
aChjb25zdCBCaXJ0aHMmIGxpZmV0aW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUaW1lRGVsdGEmIGR1cmF0aW9uKSB7CiAgaWYgKCFtZXNzYWdlX2xvb3BfKSAgLy8gSW4g
Y2FzZSBtZXNzYWdlIGxvb3Agd2Fzbid0IHlldCBhcm91bmQuLi4KICAgIG1lc3NhZ2VfbG9vcF8g
PSBNZXNzYWdlTG9vcDo6Y3VycmVudCgpOyAgLy8gRmluZCBpdCBub3cuCgogIERlYXRoTWFwOjpp
dGVyYXRvciBpdCA9IGRlYXRoX21hcF8uZmluZCgmbGlmZXRpbWVzKTsKICBpZiAoaXQgIT0gZGVh
dGhfbWFwXy5lbmQoKSkgewogICAgaXQtPnNlY29uZC5SZWNvcmREZWF0aChkdXJhdGlvbik7CiAg
ICByZXR1cm47CiAgfQoKICBBdXRvTG9jayBsb2NrKGxvY2tfKTsgIC8vIExvY2sgc2luY2UgdGhl
IG1hcCBtYXkgZ2V0IHJlbG9jYXRlZCBub3cuCiAgZGVhdGhfbWFwX1smbGlmZXRpbWVzXS5SZWNv
cmREZWF0aChkdXJhdGlvbik7Cn0KCgoKI2lmbmRlZiBUUkFDS19BTExfVEFTS19PQkpFQ1RTClRy
YWNrZWQ6OlRyYWNrZWQoKSB7fQpUcmFja2VkOjp+VHJhY2tlZCgpIHt9CnZvaWQgVHJhY2tlZDo6
U2V0QmlydGhQbGFjZShjb25zdCBMb2NhdGlvbiYgZnJvbV9oZXJlKSB7fQpib29sIFRyYWNrZWQ6
Ok1pc3NpbmdCaXJ0aHBsYWNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0Kdm9pZCBUcmFja2Vk
OjpSZXNldEJpcnRoVGltZSgpIHt9CgojZWxzZQoKVHJhY2tlZDo6VHJhY2tlZCgpIDogdHJhY2tl
ZF9iaXJ0aHNfKE5VTEwpLCB0cmFja2VkX2JpcnRoX3RpbWVfKFRpbWU6Ok5vdygpKSB7CiAgaWYg
KCFUaHJlYWREYXRhOjpJc0FjdGl2ZSgpKQogICAgcmV0dXJuOwogIFNldEJpcnRoUGxhY2UoTG9j
YXRpb24oIk5vRnVuY3Rpb25OYW1lIiwgIk5lZWRUb1NldEJpcnRoUGxhY2UiLCAtMSkpOwp9CgpU
cmFja2VkOjp+VHJhY2tlZCgpIHsKICBpZiAoIVRocmVhZERhdGE6OklzQWN0aXZlKCkgfHwgIXRy
YWNrZWRfYmlydGhzXykKICAgIHJldHVybjsKICBUaHJlYWREYXRhOjpjdXJyZW50KCktPlRhbGx5
QURlYXRoKCp0cmFja2VkX2JpcnRoc18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUaW1lOjpOb3coKSAtIHRyYWNrZWRfYmlydGhfdGltZV8pOwp9Cgp2b2lkIFRyYWNrZWQ6
OlNldEJpcnRoUGxhY2UoY29uc3QgTG9jYXRpb24mIGZyb21faGVyZSkgewogIGlmICghVGhyZWFk
RGF0YTo6SXNBY3RpdmUoKSkKICAgIHJldHVybjsKICBpZiAodHJhY2tlZF9iaXJ0aHNfKQogICAg
dHJhY2tlZF9iaXJ0aHNfLT5Gb3JnZXRCaXJ0aCgpOwogIFRocmVhZERhdGEqIGN1cnJlbnRfdGhy
ZWFkX2RhdGEgPSBUaHJlYWREYXRhOjpjdXJyZW50KCk7CiAgaWYgKCFjdXJyZW50X3RocmVhZF9k
YXRhKQogICAgcmV0dXJuOyAgLy8gU2h1dGRvd24gc3RhcnRlZCwgYW5kIHRoaXMgdGhyZWFkIHdh
c24ndCByZWdpc3RlcmVkLgogIHRyYWNrZWRfYmlydGhzXyA9IGN1cnJlbnRfdGhyZWFkX2RhdGEt
PkZpbmRMaWZldGltZShmcm9tX2hlcmUpOwogIHRyYWNrZWRfYmlydGhzXy0+UmVjb3JkQmlydGgo
KTsKfQoKdm9pZCBUcmFja2VkOjpSZXNldEJpcnRoVGltZSgpIHsKICB0cmFja2VkX2JpcnRoX3Rp
bWVfID0gVGltZTo6Tm93KCk7Cn0KCmJvb2wgVHJhY2tlZDo6TWlzc2luZ0JpcnRocGxhY2UoKSBj
b25zdCB7CiAgcmV0dXJuIC0xID09IHRyYWNrZWRfYmlydGhzXy0+bG9jYXRpb24oKS5saW5lX251
bWJlcigpOwp9CgojZW5kaWYgIC8vIE5ERUJVRwoKfSAgLy8gbmFtZXNwYWNlIHRyYWNrZWRfb2Jq
ZWN0cwoKI2lmbmRlZiBCQVNFX0NPTkRJVElPTl9WQVJJQUJMRV9IXwojZGVmaW5lIEJBU0VfQ09O
RElUSU9OX1ZBUklBQkxFX0hfCgpuYW1lc3BhY2UgYmFzZSB7CiAgY2xhc3MgVGltZURlbHRhOwp9
CnVzaW5nIGJhc2U6OlRpbWU7CgpjbGFzcyBDb25kaXRpb25WYXJpYWJsZSB7CiBwdWJsaWM6CiAg
Ly8gQ29uc3RydWN0IGEgY3YgZm9yIHVzZSB3aXRoIE9OTFkgb25lIHVzZXIgbG9jay4KICBleHBs
aWNpdCBDb25kaXRpb25WYXJpYWJsZShMb2NrKiB1c2VyX2xvY2spOwoKICB+Q29uZGl0aW9uVmFy
aWFibGUoKTsKCiAgLy8gV2FpdCgpIHJlbGVhc2VzIHRoZSBjYWxsZXIncyBjcml0aWNhbCBzZWN0
aW9uIGF0b21pY2FsbHkgYXMgaXQgc3RhcnRzIHRvCiAgLy8gc2xlZXAsIGFuZCB0aGUgcmVhY3F1
aXJlcyBpdCB3aGVuIGl0IGlzIHNpZ25hbGVkLgogIHZvaWQgV2FpdCgpOwogIHZvaWQgVGltZWRX
YWl0KGNvbnN0IGJhc2U6OlRpbWVEZWx0YSYgbWF4X3RpbWUpIHsKICAgIGludDY0IHVzZWNzID0g
bWF4X3RpbWUuSW5NaWNyb3NlY29uZHMoKTsKCiAgLy8gVGhlIHRpbWVvdXQgYXJndW1lbnQgdG8g
cHRocmVhZF9jb25kX3RpbWVkd2FpdCBpcyBpbiBhYnNvbHV0ZSB0aW1lLgogIHN0cnVjdCB0aW1l
dmFsIG5vdzsKICBnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7CgogIHN0cnVjdCB0aW1lc3BlYyBh
YnN0aW1lOwogIGFic3RpbWUudHZfc2VjID0gbm93LnR2X3NlYyArICh1c2VjcyAvIFRpbWU6OmtN
aWNyb3NlY29uZHNQZXJTZWNvbmQpOwogIGFic3RpbWUudHZfbnNlYyA9IChub3cudHZfdXNlYyAr
ICh1c2VjcyAlIFRpbWU6OmtNaWNyb3NlY29uZHNQZXJTZWNvbmQpKSAqCiAgICAgICAgICAgICAg
ICAgICAgVGltZTo6a05hbm9zZWNvbmRzUGVyTWljcm9zZWNvbmQ7CiAgYWJzdGltZS50dl9zZWMg
Kz0gYWJzdGltZS50dl9uc2VjIC8gVGltZTo6a05hbm9zZWNvbmRzUGVyU2Vjb25kOwogIGFic3Rp
bWUudHZfbnNlYyAlPSBUaW1lOjprTmFub3NlY29uZHNQZXJTZWNvbmQ7CiAgRENIRUNLKGFic3Rp
bWUudHZfc2VjID49IG5vdy50dl9zZWMpOyAgLy8gT3ZlcmZsb3cgcGFyYW5vaWEKCiAgaW50IHJ2
ID0gcHRocmVhZF9jb25kX3RpbWVkd2FpdCgmY29uZGl0aW9uXywgdXNlcl9tdXRleF8sICZhYnN0
aW1lKTsKICBEQ0hFQ0socnYgPT0gMCB8fCBydiA9PSBFVElNRURPVVQpOwp9CgoKICAvLyBCcm9h
ZGNhc3QoKSByZXZpdmVzIGFsbCB3YWl0aW5nIHRocmVhZHMuCiAgdm9pZCBCcm9hZGNhc3QoKSB7
CiAgaW50IHJ2ID0gcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmY29uZGl0aW9uXyk7CiAgRENIRUNL
KHJ2ID09IDApOwp9CgoKICAvLyBTaWduYWwoKSByZXZpdmVzIG9uZSB3YWl0aW5nIHRocmVhZC4K
ICB2b2lkIFNpZ25hbCgpOwoKIHByaXZhdGU6CiAgcHRocmVhZF9jb25kX3QgY29uZGl0aW9uXzsK
ICBwdGhyZWFkX211dGV4X3QqIHVzZXJfbXV0ZXhfOwoKICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oQ29uZGl0aW9uVmFyaWFibGUpOwp9OwoKQ29uZGl0aW9uVmFyaWFibGU6OkNvbmRpdGlvblZh
cmlhYmxlKExvY2sqIHVzZXJfbG9jaykKICAgIDogdXNlcl9tdXRleF8odXNlcl9sb2NrLT5sb2Nr
X2ltcGwoKS0+b3NfbG9jaygpKSB7CiAgaW50IHJ2ID0gcHRocmVhZF9jb25kX2luaXQoJmNvbmRp
dGlvbl8sIE5VTEwpOwogIERDSEVDSyhydiA9PSAwKTsKfQoKQ29uZGl0aW9uVmFyaWFibGU6On5D
b25kaXRpb25WYXJpYWJsZSgpIHsKICBpbnQgcnYgPSBwdGhyZWFkX2NvbmRfZGVzdHJveSgmY29u
ZGl0aW9uXyk7CiAgRENIRUNLKHJ2ID09IDApOwp9Cgp2b2lkIENvbmRpdGlvblZhcmlhYmxlOjpX
YWl0KCkgewogIGludCBydiA9IHB0aHJlYWRfY29uZF93YWl0KCZjb25kaXRpb25fLCB1c2VyX211
dGV4Xyk7CiAgRENIRUNLKHJ2ID09IDApOwp9CgojZW5kaWYgIC8vIEJBU0VfQ09ORElUSU9OX1ZB
UklBQkxFX0hfCgoKCiNpZm5kZWYgQkFTRV9XQUlUQUJMRV9FVkVOVF9IXwojZGVmaW5lIEJBU0Vf
V0FJVEFCTEVfRVZFTlRfSF8KCm5hbWVzcGFjZSBiYXNlIHsKCi8vIFRoaXMgcmVwbGFjZXMgSU5G
SU5JVEUgZnJvbSBXaW4zMgpzdGF0aWMgY29uc3QgaW50IGtOb1RpbWVvdXQgPSAtMTsKCmNsYXNz
IFRpbWVEZWx0YTsKCi8vIEEgV2FpdGFibGVFdmVudCBjYW4gYmUgYSB1c2VmdWwgdGhyZWFkIHN5
bmNocm9uaXphdGlvbiB0b29sIHdoZW4geW91IHdhbnQgdG8KLy8gYWxsb3cgb25lIHRocmVhZCB0
byB3YWl0IGZvciBhbm90aGVyIHRocmVhZCB0byBmaW5pc2ggc29tZSB3b3JrLiBGb3IKLy8gbm9u
LVdpbmRvd3Mgc3lzdGVtcywgdGhpcyBjYW4gb25seSBiZSB1c2VkIGZyb20gd2l0aGluIGEgc2lu
Z2xlIGFkZHJlc3MKLy8gc3BhY2UuCi8vCi8vIFVzZSBhIFdhaXRhYmxlRXZlbnQgd2hlbiB5b3Ug
d291bGQgb3RoZXJ3aXNlIHVzZSBhIExvY2srQ29uZGl0aW9uVmFyaWFibGUgdG8KLy8gcHJvdGVj
dCBhIHNpbXBsZSBib29sZWFuIHZhbHVlLiAgSG93ZXZlciwgaWYgeW91IGZpbmQgeW91cnNlbGYg
dXNpbmcgYQovLyBXYWl0YWJsZUV2ZW50IGluIGNvbmp1bmN0aW9uIHdpdGggYSBMb2NrIHRvIHdh
aXQgZm9yIGEgbW9yZSBjb21wbGV4IHN0YXRlCi8vIGNoYW5nZSAoZS5nLiwgZm9yIGFuIGl0ZW0g
dG8gYmUgYWRkZWQgdG8gYSBxdWV1ZSksIHRoZW4geW91IHNob3VsZCBwcm9iYWJseQovLyBiZSB1
c2luZyBhIENvbmRpdGlvblZhcmlhYmxlIGluc3RlYWQgb2YgYSBXYWl0YWJsZUV2ZW50LgovLwov
LyBOT1RFOiBPbiBXaW5kb3dzLCB0aGlzIGNsYXNzIHByb3ZpZGVzIGEgc3Vic2V0IG9mIHRoZSBm
dW5jdGlvbmFsaXR5IGFmZm9yZGVkCi8vIGJ5IGEgV2luZG93cyBldmVudCBvYmplY3QuICBUaGlz
IGlzIGludGVudGlvbmFsLiAgSWYgeW91IGFyZSB3cml0aW5nIFdpbmRvd3MKLy8gc3BlY2lmaWMg
Y29kZSBhbmQgeW91IG5lZWQgb3RoZXIgZmVhdHVyZXMgb2YgYSBXaW5kb3dzIGV2ZW50LCB0aGVu
IHlvdSBtaWdodAovLyBiZSBiZXR0ZXIgb2ZmIGp1c3QgdXNpbmcgYW4gV2luZG93cyBldmVudCBk
aXJlY3RseS4KY2xhc3MgV2FpdGFibGVFdmVudCB7CiBwdWJsaWM6CiAgLy8gSWYgbWFudWFsX3Jl
c2V0IGlzIHRydWUsIHRoZW4gdG8gc2V0IHRoZSBldmVudCBzdGF0ZSB0byBub24tc2lnbmFsZWQs
IGEKICAvLyBjb25zdW1lciBtdXN0IGNhbGwgdGhlIFJlc2V0IG1ldGhvZC4gIElmIHRoaXMgcGFy
YW1ldGVyIGlzIGZhbHNlLCB0aGVuIHRoZQogIC8vIHN5c3RlbSBhdXRvbWF0aWNhbGx5IHJlc2V0
cyB0aGUgZXZlbnQgc3RhdGUgdG8gbm9uLXNpZ25hbGVkIGFmdGVyIGEgc2luZ2xlCiAgLy8gd2Fp
dGluZyB0aHJlYWQgaGFzIGJlZW4gcmVsZWFzZWQuCiAgV2FpdGFibGVFdmVudChib29sIG1hbnVh
bF9yZXNldCwgYm9vbCBpbml0aWFsbHlfc2lnbmFsZWQpOwoKICB+V2FpdGFibGVFdmVudCgpOwoK
ICAvLyBQdXQgdGhlIGV2ZW50IGluIHRoZSB1bi1zaWduYWxlZCBzdGF0ZS4KICB2b2lkIFJlc2V0
KCk7CgogIC8vIFB1dCB0aGUgZXZlbnQgaW4gdGhlIHNpZ25hbGVkIHN0YXRlLiAgQ2F1c2luZyBh
bnkgdGhyZWFkIGJsb2NrZWQgb24gV2FpdAogIC8vIHRvIGJlIHdva2VuIHVwLgogIHZvaWQgU2ln
bmFsKCk7CgogIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXZlbnQgaXMgaW4gdGhlIHNpZ25hbGVk
IHN0YXRlLCBlbHNlIGZhbHNlLiAgSWYgdGhpcwogIC8vIGlzIG5vdCBhIG1hbnVhbCByZXNldCBl
dmVudCwgdGhlbiB0aGlzIHRlc3Qgd2lsbCBjYXVzZSBhIHJlc2V0LgogIGJvb2wgSXNTaWduYWxl
ZCgpOwoKICAvLyBXYWl0IGluZGVmaW5pdGVseSBmb3IgdGhlIGV2ZW50IHRvIGJlIHNpZ25hbGVk
LiAgUmV0dXJucyB0cnVlIGlmIHRoZSBldmVudAogIC8vIHdhcyBzaWduYWxlZCwgZWxzZSBmYWxz
ZSBpcyByZXR1cm5lZCB0byBpbmRpY2F0ZSB0aGF0IHdhaXRpbmcgZmFpbGVkLgogIGJvb2wgV2Fp
dCgpOwoKICAvLyBXYWl0IHVwIHVudGlsIG1heF90aW1lIGhhcyBwYXNzZWQgZm9yIHRoZSBldmVu
dCB0byBiZSBzaWduYWxlZC4gIFJldHVybnMKICAvLyB0cnVlIGlmIHRoZSBldmVudCB3YXMgc2ln
bmFsZWQuICBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlLCB0aGVuIGl0CiAgLy8gZG9lcyBu
b3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IG1heF90aW1lIHdhcyBleGNlZWRlZC4KICBib29sIFRp
bWVkV2FpdChjb25zdCBUaW1lRGVsdGEmIG1heF90aW1lKTsKCiAgLy8gV2FpdCwgc3luY2hyb25v
dXNseSwgb24gbXVsdGlwbGUgZXZlbnRzLgogIC8vICAgd2FpdGFibGVzOiBhbiBhcnJheSBvZiBX
YWl0YWJsZUV2ZW50IHBvaW50ZXJzCiAgLy8gICBjb3VudDogdGhlIG51bWJlciBvZiBlbGVtZW50
cyBpbiBAd2FpdGFibGVzCiAgLy8KICAvLyByZXR1cm5zOiB0aGUgaW5kZXggb2YgYSBXYWl0YWJs
ZUV2ZW50IHdoaWNoIGhhcyBiZWVuIHNpZ25hbGVkLgogIC8vCiAgLy8gWW91IE1VU1QgTk9UIGRl
bGV0ZSBhbnkgb2YgdGhlIFdhaXRhYmxlRXZlbnQgb2JqZWN0cyB3aGlsZSB0aGlzIHdhaXQgaXMK
ICAvLyBoYXBwZW5pbmcuCiAgc3RhdGljIHNpemVfdCBXYWl0TWFueShXYWl0YWJsZUV2ZW50Kiog
d2FpdGFibGVzLCBzaXplX3QgY291bnQpOwoKICAvLyBGb3IgYXN5bmNocm9ub3VzIHdhaXRpbmcs
IHNlZSBXYWl0YWJsZUV2ZW50V2F0Y2hlcgoKICAvLyBUaGlzIGlzIGEgcHJpdmF0ZSBoZWxwZXIg
Y2xhc3MuIEl0J3MgaGVyZSBiZWNhdXNlIGl0J3MgdXNlZCBieSBmcmllbmRzIG9mCiAgLy8gdGhp
cyBjbGFzcyAoc3VjaCBhcyBXYWl0YWJsZUV2ZW50V2F0Y2hlcikgdG8gYmUgYWJsZSB0byBlbnF1
ZXVlIGVsZW1lbnRzCiAgLy8gb2YgdGhlIHdhaXQtbGlzdAogIGNsYXNzIFdhaXRlciB7CiAgIHB1
YmxpYzoKICAgIC8vIFNpZ25hbCB0aGUgd2FpdGVyIHRvIHdha2UgdXAuCiAgICAvLwogICAgLy8g
Q29uc2lkZXIgdGhlIGNhc2Ugb2YgYSBXYWl0ZXIgd2hpY2ggaXMgaW4gbXVsdGlwbGUgV2FpdGFi
bGVFdmVudCdzCiAgICAvLyB3YWl0LWxpc3RzLiBFYWNoIFdhaXRhYmxlRXZlbnQgaXMgYXV0b21h
dGljLXJlc2V0IGFuZCB0d28gb2YgdGhlbSBhcmUKICAgIC8vIHNpZ25hbGVkIGF0IHRoZSBzYW1l
IHRpbWUuIE5vdywgZWFjaCB3aWxsIHdha2Ugb25seSB0aGUgZmlyc3Qgd2FpdGVyIGluCiAgICAv
LyB0aGUgd2FrZS1saXN0IGJlZm9yZSByZXNldHRpbmcuIEhvd2V2ZXIsIGlmIHRob3NlIHR3byB3
YWl0ZXJzIGhhcHBlbiB0bwogICAgLy8gYmUgdGhlIHNhbWUgb2JqZWN0IChhcyBjYW4gaGFwcGVu
IGlmIGFub3RoZXIgdGhyZWFkIGRpZG4ndCBoYXZlIGEgY2hhbmNlCiAgICAvLyB0byBkZXF1ZXVl
IHRoZSB3YWl0ZXIgZnJvbSB0aGUgb3RoZXIgd2FpdC1saXN0IGluIHRpbWUpLCB0d28gYXV0by1y
ZXNldHMKICAgIC8vIHdpbGwgaGF2ZSBoYXBwZW5lZCwgYnV0IG9ubHkgb25lIHdhaXRlciBoYXMg
YmVlbiBzaWduYWxlZCEKICAgIC8vCiAgICAvLyBCZWNhdXNlIG9mIHRoaXMsIGEgV2FpdGVyIG1h
eSAicmVqZWN0IiBhIHdha2UgYnkgcmV0dXJuaW5nIGZhbHNlLiBJbgogICAgLy8gdGhpcyBjYXNl
LCB0aGUgYXV0by1yZXNldCBXYWl0YWJsZUV2ZW50IHNob3VsZG4ndCBhY3QgYXMgaWYgYW55dGhp
bmcgaGFzCiAgICAvLyBiZWVuIG5vdGlmaWVkLgogICAgdmlydHVhbCBib29sIEZpcmUoV2FpdGFi
bGVFdmVudCogc2lnbmFsaW5nX2V2ZW50KSA9IDA7CgogICAgLy8gV2FpdGVycyBtYXkgaW1wbGVt
ZW50IHRoaXMgaW4gb3JkZXIgdG8gcHJvdmlkZSBhbiBleHRyYSBjb25kaXRpb24gZm9yCiAgICAv
LyB0d28gV2FpdGVycyB0byBiZSBjb25zaWRlcmVkIGVxdWFsLiBJbiBXYWl0YWJsZUV2ZW50OjpE
ZXF1ZXVlLCBpZiB0aGUKICAgIC8vIHBvaW50ZXJzIG1hdGNoIHRoZW4gdGhpcyBmdW5jdGlvbiBp
cyBjYWxsZWQgYXMgYSBmaW5hbCBjaGVjay4gU2VlIHRoZQogICAgLy8gY29tbWVudHMgaW4gfkhh
bmRsZSBmb3Igd2h5LgogICAgdmlydHVhbCBib29sIENvbXBhcmUodm9pZCogdGFnKSA9IDA7CiAg
fTsKCiBwcml2YXRlOgogIGZyaWVuZCBjbGFzcyBXYWl0YWJsZUV2ZW50V2F0Y2hlcjsKCiAgLy8g
T24gV2luZG93cywgb25lIGNhbiBjbG9zZSBhIEhBTkRMRSB3aGljaCBpcyBjdXJyZW50bHkgYmVp
bmcgd2FpdGVkIG9uLiBUaGUKICAvLyBNU0ROIGRvY3VtZW50YXRpb24gc2F5cyB0aGF0IHRoZSBy
ZXN1bHRpbmcgYmVoYXZpb3VyIGlzICd1bmRlZmluZWQnLCBidXQKICAvLyBpdCBkb2Vzbid0IGNy
YXNoLiBIb3dldmVyLCBpZiB3ZSB3ZXJlIHRvIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBtZW1iZXJz
CiAgLy8gZGlyZWN0bHkgdGhlbiwgb24gUE9TSVgsIG9uZSBjb3VsZG4ndCB1c2UgV2FpdGFibGVF
dmVudFdhdGNoZXIgdG8gd2F0Y2ggYW4KICAvLyBldmVudCB3aGljaCBnZXRzIGRlbGV0ZWQuIFRo
aXMgbWlzbWF0Y2ggaGFzIGJpdHRlbiB1cyBzZXZlcmFsIHRpbWVzIG5vdywKICAvLyBzbyB3ZSBo
YXZlIGEga2VybmVsIG9mIHRoZSBXYWl0YWJsZUV2ZW50LCB3aGljaCBpcyByZWZlcmVuY2UgY291
bnRlZC4KICAvLyBXYWl0YWJsZUV2ZW50V2F0Y2hlcnMgbWF5IHRoZW4gdGFrZSBhIHJlZmVyZW5j
ZSBhbmQgdGh1cyBtYXRjaCB0aGUgV2luZG93cwogIC8vIGJlaGF2aW91ci4KICBzdHJ1Y3QgV2Fp
dGFibGVFdmVudEtlcm5lbCA6CiAgICAgIHB1YmxpYyBSZWZDb3VudGVkVGhyZWFkU2FmZTxXYWl0
YWJsZUV2ZW50S2VybmVsPiB7CiAgIHB1YmxpYzoKICAgIFdhaXRhYmxlRXZlbnRLZXJuZWwoYm9v
bCBtYW51YWxfcmVzZXQsIGJvb2wgaW5pdGlhbGx5X3NpZ25hbGVkKQogICAgICAgIDogbWFudWFs
X3Jlc2V0XyhtYW51YWxfcmVzZXQpLAogICAgICAgICAgc2lnbmFsZWRfKGluaXRpYWxseV9zaWdu
YWxlZCkgewogICAgfQoKICAgIGJvb2wgRGVxdWV1ZShXYWl0ZXIqIHdhaXRlciwgdm9pZCogdGFn
KTsKCiAgICBMb2NrIGxvY2tfOwogICAgY29uc3QgYm9vbCBtYW51YWxfcmVzZXRfOwogICAgYm9v
bCBzaWduYWxlZF87CiAgICBzdGQ6Omxpc3Q8V2FpdGVyKj4gd2FpdGVyc187CiAgfTsKCiAgc2Nv
cGVkX3JlZnB0cjxXYWl0YWJsZUV2ZW50S2VybmVsPiBrZXJuZWxfOwoKICBib29sIFNpZ25hbEFs
bCgpOwogIGJvb2wgU2lnbmFsT25lKCk7CiAgdm9pZCBFbnF1ZXVlKFdhaXRlciogd2FpdGVyKTsK
CiAgLy8gV2hlbiBkZWFsaW5nIHdpdGggYXJyYXlzIG9mIFdhaXRhYmxlRXZlbnQqLCB3ZSB3YW50
IHRvIHNvcnQgYnkgdGhlIGFkZHJlc3MKICAvLyBvZiB0aGUgV2FpdGFibGVFdmVudCBpbiBvcmRl
ciB0byBoYXZlIGEgZ2xvYmFsbHkgY29uc2lzdGVudCBsb2NraW5nIG9yZGVyLgogIC8vIEluIHRo
YXQgY2FzZSB3ZSBrZWVwIHRoZW0sIGluIHNvcnRlZCBvcmRlciwgaW4gYW4gYXJyYXkgb2YgcGFp
cnMgd2hlcmUgdGhlCiAgLy8gc2Vjb25kIGVsZW1lbnQgaXMgdGhlIGluZGV4IG9mIHRoZSBXYWl0
YWJsZUV2ZW50IGluIHRoZSBvcmlnaW5hbCwKICAvLyB1bnNvcnRlZCwgYXJyYXkuCiAgdHlwZWRl
ZiBzdGQ6OnBhaXI8V2FpdGFibGVFdmVudCosIHNpemVfdD4gV2FpdGVyQW5kSW5kZXg7CiAgc3Rh
dGljIHNpemVfdCBFbnF1ZXVlTWFueShXYWl0ZXJBbmRJbmRleCogd2FpdGFibGVzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50LCBXYWl0ZXIqIHdhaXRlcik7CgogIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihXYWl0YWJsZUV2ZW50KTsKfTsKCn0gIC8vIG5hbWVzcGFj
ZSBiYXNlCgpuYW1lc3BhY2UgYmFzZSB7CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBUaGlz
IGlzIGp1c3QgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3Igd2FraW5nIHRoZSB0d28gdHlwZXMg
b2Ygd2FpdGVycwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXYWl0YWJsZUV2ZW50OjpXYWl0YWJs
ZUV2ZW50KGJvb2wgbWFudWFsX3Jlc2V0LCBib29sIGluaXRpYWxseV9zaWduYWxlZCkKICAgIDog
a2VybmVsXyhuZXcgV2FpdGFibGVFdmVudEtlcm5lbChtYW51YWxfcmVzZXQsIGluaXRpYWxseV9z
aWduYWxlZCkpIHsKfQoKV2FpdGFibGVFdmVudDo6fldhaXRhYmxlRXZlbnQoKSB7Cn0KCnZvaWQg
V2FpdGFibGVFdmVudDo6UmVzZXQoKSB7CiAgQXV0b0xvY2sgbG9ja2VkKGtlcm5lbF8tPmxvY2tf
KTsKICBrZXJuZWxfLT5zaWduYWxlZF8gPSBmYWxzZTsKfQoKdm9pZCBXYWl0YWJsZUV2ZW50OjpT
aWduYWwoKSB7CiAgQXV0b0xvY2sgbG9ja2VkKGtlcm5lbF8tPmxvY2tfKTsKCiAgaWYgKGtlcm5l
bF8tPnNpZ25hbGVkXykKICAgIHJldHVybjsKCiAgaWYgKGtlcm5lbF8tPm1hbnVhbF9yZXNldF8p
IHsKICAgIFNpZ25hbEFsbCgpOwogICAga2VybmVsXy0+c2lnbmFsZWRfID0gdHJ1ZTsKICAgIC8v
QU5OT1RBVEVfSEFQUEVOU19CRUZPUkUoJmtlcm5lbF8tPnNpZ25hbGVkXyk7CiAgfSBlbHNlIHsK
ICAgIC8vIEluIHRoZSBjYXNlIG9mIGF1dG8gcmVzZXQsIGlmIG5vIHdhaXRlcnMgd2VyZSB3b2tl
biwgd2UgcmVtYWluCiAgICAvLyBzaWduYWxlZC4KICAgIGlmICghU2lnbmFsT25lKCkpIHsKICAg
ICAga2VybmVsXy0+c2lnbmFsZWRfID0gdHJ1ZTsKICAgICAgLy9BTk5PVEFURV9IQVBQRU5TX0JF
Rk9SRSgma2VybmVsXy0+c2lnbmFsZWRfKTsKICAgIH0KICB9Cn0KCmJvb2wgV2FpdGFibGVFdmVu
dDo6SXNTaWduYWxlZCgpIHsKICBBdXRvTG9jayBsb2NrZWQoa2VybmVsXy0+bG9ja18pOwoKICBj
b25zdCBib29sIHJlc3VsdCA9IGtlcm5lbF8tPnNpZ25hbGVkXzsKICBpZiAocmVzdWx0KSB7CiAg
ICAvL0FOTk9UQVRFX0hBUFBFTlNfQUZURVIoJmtlcm5lbF8tPnNpZ25hbGVkXyk7CiAgICBpZiAo
IWtlcm5lbF8tPm1hbnVhbF9yZXNldF8pCiAgICAgIGtlcm5lbF8tPnNpZ25hbGVkXyA9IGZhbHNl
OwogIH0KICByZXR1cm4gcmVzdWx0Owp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBTeW5j
aHJvbm91cyB3YWl0cwoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gVGhpcyBpcyBhIHN5bmNo
cm9ub3VzIHdhaXRlci4gVGhlIHRocmVhZCBpcyB3YWl0aW5nIG9uIHRoZSBnaXZlbiBjb25kaXRp
b24KLy8gdmFyaWFibGUgYW5kIHRoZSBmaXJlZCBmbGFnIGluIHRoaXMgb2JqZWN0LgovLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQpjbGFzcyBTeW5jV2FpdGVyIDogcHVibGljIFdhaXRhYmxlRXZlbnQ6
OldhaXRlciB7CiBwdWJsaWM6CiAgU3luY1dhaXRlcigpCiAgICAgIDogZmlyZWRfKGZhbHNlKSwK
ICAgICAgICBzaWduYWxpbmdfZXZlbnRfKE5VTEwpLAogICAgICAgIGxvY2tfKCksCiAgICAgICAg
Y3ZfKCZsb2NrXykgewogIH0KCiAgYm9vbCBGaXJlKFdhaXRhYmxlRXZlbnQqIHNpZ25hbGluZ19l
dmVudCkgewogICAgQXV0b0xvY2sgbG9ja2VkKGxvY2tfKTsKCiAgICBpZiAoZmlyZWRfKQogICAg
ICByZXR1cm4gZmFsc2U7CgogICAgZmlyZWRfID0gdHJ1ZTsKICAgIHNpZ25hbGluZ19ldmVudF8g
PSBzaWduYWxpbmdfZXZlbnQ7CgogICAgY3ZfLkJyb2FkY2FzdCgpOwoKICAgIC8vIFVubGlrZSBB
c3luY1dhaXRlciBvYmplY3RzLCBTeW5jV2FpdGVyIG9iamVjdHMgYXJlIHN0YWNrLWFsbG9jYXRl
ZCBvbgogICAgLy8gdGhlIGJsb2NraW5nIHRocmVhZCdzIHN0YWNrLiAgVGhlcmUgaXMgbm8gfGRl
bGV0ZSB0aGlzO3wgaW4gRmlyZS4gIFRoZQogICAgLy8gU3luY1dhaXRlciBvYmplY3QgaXMgZGVz
dHJveWVkIHdoZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUuCgogICAgcmV0dXJuIHRydWU7CiAgfQoK
ICBXYWl0YWJsZUV2ZW50KiBzaWduYWxpbmdfZXZlbnQoKSBjb25zdCB7CiAgICBpZiAoZmlyZWRf
KQogICAgICAvL0FOTk9UQVRFX0hBUFBFTlNfQUZURVIoJmZpcmVkXyk7CiAgICByZXR1cm4gc2ln
bmFsaW5nX2V2ZW50XzsKICB9CgogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIC8vIFRoZXNlIHdh
aXRlcnMgYXJlIGFsd2F5cyBzdGFjayBhbGxvY2F0ZWQgYW5kIGRvbid0IGRlbGV0ZSB0aGVtc2Vs
dmVzLiBUaHVzCiAgLy8gdGhlcmUncyBubyBwcm9ibGVtIGFuZCB0aGUgQUJBIHRhZyBpcyB0aGUg
c2FtZSBhcyB0aGUgb2JqZWN0IHBvaW50ZXIuCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgYm9v
bCBDb21wYXJlKHZvaWQqIHRhZykgewogICAgcmV0dXJuIHRoaXMgPT0gdGFnOwogIH0KCiAgLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAgLy8gQ2FsbGVkIHdpdGggbG9jayBoZWxkLgogIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogIGJvb2wgZmlyZWQoKSBjb25zdCB7CiAgICBpZiAoZmlyZWRfKQogICAg
ICAvL0FOTk9UQVRFX0hBUFBFTlNfQUZURVIoJmZpcmVkXyk7CiAgICByZXR1cm4gZmlyZWRfOwog
IH0KCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLy8gRHVyaW5nIGEgVGltZWRXYWl0LCB3ZSBu
ZWVkIGEgd2F5IHRvIG1ha2Ugc3VyZSB0aGF0IGFuIGF1dG8tcmVzZXQKICAvLyBXYWl0YWJsZUV2
ZW50IGRvZXNuJ3QgdGhpbmsgdGhhdCB0aGlzIGV2ZW50IGhhcyBiZWVuIHNpZ25hbGVkIGJldHdl
ZW4KICAvLyB1bmxvY2tpbmcgaXQgYW5kIHJlbW92aW5nIGl0IGZyb20gdGhlIHdhaXQtbGlzdC4g
Q2FsbGVkIHdpdGggbG9jayBoZWxkLgogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIHZvaWQgRGlz
YWJsZSgpIHsKICAgIGZpcmVkXyA9IHRydWU7CiAgICAvL0FOTk9UQVRFX0hBUFBFTlNfQkVGT1JF
KCZmaXJlZF8pOwogIH0KCiAgTG9jayogbG9jaygpIHsKICAgIHJldHVybiAmbG9ja187CiAgfQoK
ICBDb25kaXRpb25WYXJpYWJsZSogY3YoKSB7CiAgICByZXR1cm4gJmN2XzsKICB9CgogcHJpdmF0
ZToKICBib29sIGZpcmVkXzsKICBXYWl0YWJsZUV2ZW50KiBzaWduYWxpbmdfZXZlbnRfOyAgLy8g
VGhlIFdhaXRhYmxlRXZlbnQgd2hpY2ggd29rZSB1cwogIExvY2sgbG9ja187CiAgQ29uZGl0aW9u
VmFyaWFibGUgY3ZfOwp9OwoKYm9vbCBXYWl0YWJsZUV2ZW50OjpUaW1lZFdhaXQoY29uc3QgVGlt
ZURlbHRhJiBtYXhfdGltZSkgewogIGNvbnN0IFRpbWUgZW5kX3RpbWUoVGltZTo6Tm93KCkgKyBt
YXhfdGltZSk7CiAgY29uc3QgYm9vbCBmaW5pdGVfdGltZSA9IG1heF90aW1lLlRvSW50ZXJuYWxW
YWx1ZSgpID49IDA7CgogIGtlcm5lbF8tPmxvY2tfLkFjcXVpcmUoKTsKICAgIGlmIChrZXJuZWxf
LT5zaWduYWxlZF8pIHsKICAgICAgLy9BTk5PVEFURV9IQVBQRU5TX0FGVEVSKCZrZXJuZWxfLT5z
aWduYWxlZF8pOwogICAgICBpZiAoIWtlcm5lbF8tPm1hbnVhbF9yZXNldF8pIHsKICAgICAgICAv
LyBJbiB0aGlzIGNhc2Ugd2Ugd2VyZSBzaWduYWxlZCB3aGVuIHdlIGhhZCBubyB3YWl0ZXJzLiBO
b3cgdGhhdAogICAgICAgIC8vIHNvbWVvbmUgaGFzIHdhaXRlZCB1cG9uIHVzLCB3ZSBjYW4gYXV0
b21hdGljYWxseSByZXNldC4KICAgICAgICBrZXJuZWxfLT5zaWduYWxlZF8gPSBmYWxzZTsKICAg
ICAgfQoKICAgICAga2VybmVsXy0+bG9ja18uUmVsZWFzZSgpOwogICAgICByZXR1cm4gdHJ1ZTsK
ICAgIH0KCiAgICBTeW5jV2FpdGVyIHN3OwogICAgc3cubG9jaygpLT5BY3F1aXJlKCk7CgogICAg
RW5xdWV1ZSgmc3cpOwogIGtlcm5lbF8tPmxvY2tfLlJlbGVhc2UoKTsKICAvLyBXZSBhcmUgdmlv
bGF0aW5nIGxvY2tpbmcgb3JkZXIgaGVyZSBieSBob2xkaW5nIHRoZSBTeW5jV2FpdGVyIGxvY2sg
YnV0IG5vdAogIC8vIHRoZSBXYWl0YWJsZUV2ZW50IGxvY2suIEhvd2V2ZXIsIHRoaXMgaXMgc2Fm
ZSBiZWNhdXNlIHdlIGRvbid0IGxvY2sgQGxvY2tfCiAgLy8gYWdhaW4gYmVmb3JlIHVubG9ja2lu
ZyBpdC4KCiAgZm9yICg7OykgewogICAgY29uc3QgVGltZSBjdXJyZW50X3RpbWUoVGltZTo6Tm93
KCkpOwoKICAgIGlmIChzdy5maXJlZCgpIHx8IChmaW5pdGVfdGltZSAmJiBjdXJyZW50X3RpbWUg
Pj0gZW5kX3RpbWUpKSB7CiAgICAgIGNvbnN0IGJvb2wgcmV0dXJuX3ZhbHVlID0gc3cuZmlyZWQo
KTsKCiAgICAgIC8vIFdlIGNhbid0IGFjcXVpcmUgQGxvY2tfIGJlZm9yZSByZWxlYXNpbmcgdGhl
IFN5bmNXYWl0ZXIgbG9jayAoYmVjYXVzZQogICAgICAvLyBvZiBsb2NraW5nIG9yZGVyKSwgaG93
ZXZlciwgaW4gYmV0d2VlbiB0aGUgdHdvIGEgc2lnbmFsIGNvdWxkIGJlIGZpcmVkCiAgICAgIC8v
IGFuZCBAc3cgd291bGQgYWNjZXB0IGl0LCBob3dldmVyIHdlIHdpbGwgc3RpbGwgcmV0dXJuIGZh
bHNlLCBzbyB0aGUKICAgICAgLy8gc2lnbmFsIHdvdWxkIGJlIGxvc3Qgb24gYW4gYXV0by1yZXNl
dCBXYWl0YWJsZUV2ZW50LiBUaHVzIHdlIGNhbGwKICAgICAgLy8gRGlzYWJsZSB3aGljaCBtYWtl
cyBzdzo6RmlyZSByZXR1cm4gZmFsc2UuCiAgICAgIHN3LkRpc2FibGUoKTsKICAgICAgc3cubG9j
aygpLT5SZWxlYXNlKCk7CgogICAgICBrZXJuZWxfLT5sb2NrXy5BY3F1aXJlKCk7CiAgICAgICAg
a2VybmVsXy0+RGVxdWV1ZSgmc3csICZzdyk7CiAgICAgIGtlcm5lbF8tPmxvY2tfLlJlbGVhc2Uo
KTsKCiAgICAgIHJldHVybiByZXR1cm5fdmFsdWU7CiAgICB9CgogICAgaWYgKGZpbml0ZV90aW1l
KSB7CiAgICAgIGNvbnN0IFRpbWVEZWx0YSBtYXhfd2FpdChlbmRfdGltZSAtIGN1cnJlbnRfdGlt
ZSk7CiAgICAgIHN3LmN2KCktPlRpbWVkV2FpdChtYXhfd2FpdCk7CiAgICB9IGVsc2UgewogICAg
ICBzdy5jdigpLT5XYWl0KCk7CiAgICB9CiAgfQp9Cgpib29sIFdhaXRhYmxlRXZlbnQ6OldhaXQo
KSB7CiAgcmV0dXJuIFRpbWVkV2FpdChUaW1lRGVsdGE6OkZyb21TZWNvbmRzKC0xKSk7Cn0KCi8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gU3luY2hy
b25vdXMgd2FpdGluZyBvbiBtdWx0aXBsZSBvYmplY3RzLgoKc3RhdGljIGJvb2wgIC8vIFN0cmlj
dFdlYWtPcmRlcmluZwpjbXBfZnN0X2FkZHIoY29uc3Qgc3RkOjpwYWlyPFdhaXRhYmxlRXZlbnQq
LCB1bnNpZ25lZD4gJmEsCiAgICAgICAgICAgICBjb25zdCBzdGQ6OnBhaXI8V2FpdGFibGVFdmVu
dCosIHVuc2lnbmVkPiAmYikgewogIHJldHVybiBhLmZpcnN0IDwgYi5maXJzdDsKfQoKLy8gc3Rh
dGljCnNpemVfdCBXYWl0YWJsZUV2ZW50OjpXYWl0TWFueShXYWl0YWJsZUV2ZW50KiogcmF3X3dh
aXRhYmxlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb3VudCkgewog
IERDSEVDSyhjb3VudCkgPDwgIkNhbm5vdCB3YWl0IG9uIG5vIGV2ZW50cyI7CgogIC8vIFdlIG5l
ZWQgdG8gYWNxdWlyZSB0aGUgbG9ja3MgaW4gYSBnbG9iYWxseSBjb25zaXN0ZW50IG9yZGVyLiBU
aHVzIHdlIHNvcnQKICAvLyB0aGUgYXJyYXkgb2Ygd2FpdGFibGVzIGJ5IGFkZHJlc3MuIFdlIGFj
dHVhbGx5IHNvcnQgYSBwYWlycyBzbyB0aGF0IHdlIGNhbgogIC8vIG1hcCBiYWNrIHRvIHRoZSBv
cmlnaW5hbCBpbmRleCB2YWx1ZXMgbGF0ZXIuCiAgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPFdhaXRh
YmxlRXZlbnQqLCBzaXplX3Q+ID4gd2FpdGFibGVzOwogIHdhaXRhYmxlcy5yZXNlcnZlKGNvdW50
KTsKICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCiAgICB3YWl0YWJsZXMucHVz
aF9iYWNrKHN0ZDo6bWFrZV9wYWlyKHJhd193YWl0YWJsZXNbaV0sIGkpKTsKCiAgRENIRUNLX0VR
KGNvdW50LCB3YWl0YWJsZXMuc2l6ZSgpKTsKCiAgc29ydCh3YWl0YWJsZXMuYmVnaW4oKSwgd2Fp
dGFibGVzLmVuZCgpLCBjbXBfZnN0X2FkZHIpOwoKICAvLyBUaGUgc2V0IG9mIHdhaXRhYmxlcyBt
dXN0IGJlIGRpc3RpbmN0LiBTaW5jZSB3ZSBoYXZlIGp1c3Qgc29ydGVkIGJ5CiAgLy8gYWRkcmVz
cywgd2UgY2FuIGNoZWNrIHRoaXMgY2hlYXBseSBieSBjb21wYXJpbmcgcGFpcnMgb2YgY29uc2Vj
dXRpdmUKICAvLyBlbGVtZW50cy4KICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdhaXRhYmxlcy5z
aXplKCkgLSAxOyArK2kpIHsKICAgIERDSEVDSyh3YWl0YWJsZXNbaV0uZmlyc3QgIT0gd2FpdGFi
bGVzW2krMV0uZmlyc3QpOwogIH0KCiAgU3luY1dhaXRlciBzdzsKCiAgY29uc3Qgc2l6ZV90IHIg
PSBFbnF1ZXVlTWFueSgmd2FpdGFibGVzWzBdLCBjb3VudCwgJnN3KTsKICBpZiAocikgewogICAg
Ly8gT25lIG9mIHRoZSBldmVudHMgaXMgYWxyZWFkeSBzaWduYWxlZC4gVGhlIFN5bmNXYWl0ZXIg
aGFzIG5vdCBiZWVuCiAgICAvLyBlbnF1ZXVlZCBhbnl3aGVyZS4gRW5xdWV1ZU1hbnkgcmV0dXJu
cyB0aGUgY291bnQgb2YgcmVtYWluaW5nIHdhaXRhYmxlcwogICAgLy8gd2hlbiB0aGUgc2lnbmFs
ZWQgb25lIHdhcyBzZWVuLCBzbyB0aGUgaW5kZXggb2YgdGhlIHNpZ25hbGVkIGV2ZW50IGlzCiAg
ICAvLyBAY291bnQgLSBAci4KICAgIHJldHVybiB3YWl0YWJsZXNbY291bnQgLSByXS5zZWNvbmQ7
CiAgfQoKICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBob2xkIHRoZSBsb2NrcyBvbiBhbGwgdGhlIFdh
aXRhYmxlRXZlbnRzIGFuZCB3ZSBoYXZlCiAgLy8gZW5xdWV1ZWQgb3VyIHdhaXRlciBpbiB0aGVt
IGFsbC4KCiAgc3cubG9jaygpLT5BY3F1aXJlKCk7CiAgICAvLyBSZWxlYXNlIHRoZSBXYWl0YWJs
ZUV2ZW50IGxvY2tzIGluIHRoZSByZXZlcnNlIG9yZGVyCiAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKICAgICAgd2FpdGFibGVzW2NvdW50IC0gKDEgKyBpKV0uZmlyc3Qt
Pmtlcm5lbF8tPmxvY2tfLlJlbGVhc2UoKTsKICAgIH0KCiAgICBmb3IgKDs7KSB7CiAgICAgIGlm
IChzdy5maXJlZCgpKQogICAgICAgIGJyZWFrOwoKICAgICAgc3cuY3YoKS0+V2FpdCgpOwogICAg
fQogIHN3LmxvY2soKS0+UmVsZWFzZSgpOwoKICAvLyBUaGUgYWRkcmVzcyBvZiB0aGUgV2FpdGFi
bGVFdmVudCB3aGljaCBmaXJlZCBpcyBzdG9yZWQgaW4gdGhlIFN5bmNXYWl0ZXIuCiAgV2FpdGFi
bGVFdmVudCAqY29uc3Qgc2lnbmFsZWRfZXZlbnQgPSBzdy5zaWduYWxpbmdfZXZlbnQoKTsKICAv
LyBUaGlzIHdpbGwgc3RvcmUgdGhlIGluZGV4IG9mIHRoZSByYXdfd2FpdGFibGVzIHdoaWNoIGZp
cmVkLgogIHNpemVfdCBzaWduYWxlZF9pbmRleCA9IDA7CgogIC8vIFRha2UgdGhlIGxvY2tzIG9m
IGVhY2ggV2FpdGFibGVFdmVudCBpbiB0dXJuIChleGNlcHQgdGhlIHNpZ25hbGVkIG9uZSkgYW5k
CiAgLy8gcmVtb3ZlIG91ciBTeW5jV2FpdGVyIGZyb20gdGhlIHdhaXQtbGlzdAogIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgaWYgKHJhd193YWl0YWJsZXNbaV0gIT0g
c2lnbmFsZWRfZXZlbnQpIHsKICAgICAgcmF3X3dhaXRhYmxlc1tpXS0+a2VybmVsXy0+bG9ja18u
QWNxdWlyZSgpOwogICAgICAgIC8vIFRoZXJlJ3Mgbm8gcG9zc2libGUgQUJBIGlzc3VlIHdpdGgg
dGhlIGFkZHJlc3Mgb2YgdGhlIFN5bmNXYWl0ZXIgaGVyZQogICAgICAgIC8vIGJlY2F1c2UgaXQg
bGl2ZXMgb24gdGhlIHN0YWNrLiBUaHVzIHRoZSB0YWcgdmFsdWUgaXMganVzdCB0aGUgcG9pbnRl
cgogICAgICAgIC8vIHZhbHVlIGFnYWluLgogICAgICAgIHJhd193YWl0YWJsZXNbaV0tPmtlcm5l
bF8tPkRlcXVldWUoJnN3LCAmc3cpOwogICAgICByYXdfd2FpdGFibGVzW2ldLT5rZXJuZWxfLT5s
b2NrXy5SZWxlYXNlKCk7CiAgICB9IGVsc2UgewogICAgICBzaWduYWxlZF9pbmRleCA9IGk7CiAg
ICB9CiAgfQoKICByZXR1cm4gc2lnbmFsZWRfaW5kZXg7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi8vIElmIHJldHVybiB2YWx1ZSA9PSAwOgovLyAgIFRoZSBsb2NrcyBvZiB0aGUgV2FpdGFi
bGVFdmVudHMgaGF2ZSBiZWVuIHRha2VuIGluIG9yZGVyIGFuZCB0aGUgV2FpdGVyIGhhcwovLyAg
IGJlZW4gZW5xdWV1ZWQgaW4gdGhlIHdhaXQtbGlzdCBvZiBlYWNoLiBOb25lIG9mIHRoZSBXYWl0
YWJsZUV2ZW50cyBhcmUKLy8gICBjdXJyZW50bHkgc2lnbmFsZWQKLy8gZWxzZToKLy8gICBOb25l
IG9mIHRoZSBXYWl0YWJsZUV2ZW50IGxvY2tzIGFyZSBoZWxkLiBUaGUgV2FpdGVyIGhhcyBub3Qg
YmVlbiBlbnF1ZXVlZAovLyAgIGluIGFueSBvZiB0aGVtIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlz
IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgV2FpdGFibGVFdmVudAovLyAgIHdoaWNoIHdhcyBzaWdu
YWxlZCwgZnJvbSB0aGUgZW5kIG9mIHRoZSBhcnJheS4KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ly8gc3RhdGljCnNpemVfdCBXYWl0YWJsZUV2ZW50OjpFbnF1ZXVlTWFueQogICAgKHN0ZDo6cGFp
cjxXYWl0YWJsZUV2ZW50Kiwgc2l6ZV90Piogd2FpdGFibGVzLAogICAgIHNpemVfdCBjb3VudCwg
V2FpdGVyKiB3YWl0ZXIpIHsKICBpZiAoIWNvdW50KQogICAgcmV0dXJuIDA7CgogIHdhaXRhYmxl
c1swXS5maXJzdC0+a2VybmVsXy0+bG9ja18uQWNxdWlyZSgpOwogICAgaWYgKHdhaXRhYmxlc1sw
XS5maXJzdC0+a2VybmVsXy0+c2lnbmFsZWRfKSB7CiAgICAgIC8vQU5OT1RBVEVfSEFQUEVOU19B
RlRFUigmd2FpdGFibGVzWzBdLmZpcnN0LT5rZXJuZWxfLT5zaWduYWxlZF8pOwogICAgICBpZiAo
IXdhaXRhYmxlc1swXS5maXJzdC0+a2VybmVsXy0+bWFudWFsX3Jlc2V0XykKICAgICAgICB3YWl0
YWJsZXNbMF0uZmlyc3QtPmtlcm5lbF8tPnNpZ25hbGVkXyA9IGZhbHNlOwogICAgICB3YWl0YWJs
ZXNbMF0uZmlyc3QtPmtlcm5lbF8tPmxvY2tfLlJlbGVhc2UoKTsKICAgICAgcmV0dXJuIGNvdW50
OwogICAgfQoKICAgIGNvbnN0IHNpemVfdCByID0gRW5xdWV1ZU1hbnkod2FpdGFibGVzICsgMSwg
Y291bnQgLSAxLCB3YWl0ZXIpOwogICAgaWYgKHIpIHsKICAgICAgd2FpdGFibGVzWzBdLmZpcnN0
LT5rZXJuZWxfLT5sb2NrXy5SZWxlYXNlKCk7CiAgICB9IGVsc2UgewogICAgICB3YWl0YWJsZXNb
MF0uZmlyc3QtPkVucXVldWUod2FpdGVyKTsKICAgIH0KCiAgICByZXR1cm4gcjsKfQoKLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KCgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBQcml2YXRlIGZ1
bmN0aW9ucy4uLgoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gV2FrZSBhbGwgd2FpdGluZyB3
YWl0ZXJzLiBDYWxsZWQgd2l0aCBsb2NrIGhlbGQuCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmJv
b2wgV2FpdGFibGVFdmVudDo6U2lnbmFsQWxsKCkgewogIGJvb2wgc2lnbmFsZWRfYXRfbGVhc3Rf
b25lID0gZmFsc2U7CgogIC8vIFRPRE8odGltdXJycnIpOiAuLi4uCiAgc3RkOjpsaXN0PFdhaXRl
cio+IHRtcDsKICB0bXAuc3dhcChrZXJuZWxfLT53YWl0ZXJzXyk7CiAga2VybmVsXy0+d2FpdGVy
c18uY2xlYXIoKTsKCiAgZm9yIChzdGQ6Omxpc3Q8V2FpdGVyKj46Oml0ZXJhdG9yIGkgPSB0bXAu
YmVnaW4oKTsgaSAhPSB0bXAuZW5kKCk7ICsraSkgewogICAgLy9BTk5PVEFURV9IQVBQRU5TX0FG
VEVSKCppKTsKICAgIGlmICgoKmkpLT5GaXJlKHRoaXMpKQogICAgICBzaWduYWxlZF9hdF9sZWFz
dF9vbmUgPSB0cnVlOwogIH0KCiAgcmV0dXJuIHNpZ25hbGVkX2F0X2xlYXN0X29uZTsKfQoKLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi8vIFRyeSB0byB3YWtlIGEgc2luZ2xlIHdhaXRlci4gUmV0dXJu
IHRydWUgaWYgb25lIHdhcyB3b2tlbi4gQ2FsbGVkIHdpdGggbG9jawovLyBoZWxkLgovLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KYm9vbCBXYWl0YWJsZUV2ZW50OjpTaWduYWxPbmUoKSB7CiAgZm9yICg7
OykgewogICAgaWYgKGtlcm5lbF8tPndhaXRlcnNfLmVtcHR5KCkpCiAgICAgIHJldHVybiBmYWxz
ZTsKCiAgICAvL0FOTk9UQVRFX0hBUFBFTlNfQUZURVIoKmtlcm5lbF8tPndhaXRlcnNfLmJlZ2lu
KCkpOwogICAgV2FpdGVyKiBmcm9udCA9ICgqa2VybmVsXy0+d2FpdGVyc18uYmVnaW4oKSk7ICAv
LyBUT0RPKHRpbXVycnJyKTogLi4uCiAgICBrZXJuZWxfLT53YWl0ZXJzXy5wb3BfZnJvbnQoKTsK
ICAgIGNvbnN0IGJvb2wgciA9IGZyb250LT5GaXJlKHRoaXMpOwogICAgaWYgKHIpCiAgICAgIHJl
dHVybiB0cnVlOwogIH0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQWRkIGEgd2FpdGVy
IHRvIHRoZSBsaXN0IG9mIHRob3NlIHdhaXRpbmcuIENhbGxlZCB3aXRoIGxvY2sgaGVsZC4KLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0Kdm9pZCBXYWl0YWJsZUV2ZW50OjpFbnF1ZXVlKFdhaXRlciog
d2FpdGVyKSB7CiAga2VybmVsXy0+d2FpdGVyc18ucHVzaF9iYWNrKHdhaXRlcik7CiAgLy9BTk5P
VEFURV9IQVBQRU5TX0JFRk9SRSh3YWl0ZXIpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQov
LyBSZW1vdmUgYSB3YWl0ZXIgZnJvbSB0aGUgbGlzdCBvZiB0aG9zZSB3YWl0aW5nLiBSZXR1cm4g
dHJ1ZSBpZiB0aGUgd2FpdGVyIHdhcwovLyBhY3R1YWxseSByZW1vdmVkLiBDYWxsZWQgd2l0aCBs
b2NrIGhlbGQuCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmJvb2wgV2FpdGFibGVFdmVudDo6V2Fp
dGFibGVFdmVudEtlcm5lbDo6RGVxdWV1ZShXYWl0ZXIqIHdhaXRlciwgdm9pZCogdGFnKSB7CiAg
Zm9yIChzdGQ6Omxpc3Q8V2FpdGVyKj46Oml0ZXJhdG9yCiAgICAgICBpID0gd2FpdGVyc18uYmVn
aW4oKTsgaSAhPSB3YWl0ZXJzXy5lbmQoKTsgKytpKSB7CiAgICAvL0FOTk9UQVRFX0hBUFBFTlNf
QUZURVIoKmkpOwogICAgaWYgKCppID09IHdhaXRlciAmJiAoKmkpLT5Db21wYXJlKHRhZykpIHsK
ICAgICAgd2FpdGVyc18uZXJhc2UoaSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KCiAg
cmV0dXJuIGZhbHNlOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKfSAgLy8gbmFtZXNwYWNl
IGJhc2UKCiNlbmRpZiAgLy8gQkFTRV9XQUlUQUJMRV9FVkVOVF9IXwpuYW1lc3BhY2UgdHJhY2tl
ZF9vYmplY3RzIHsKVGhyZWFkRGF0YTo6VGhyZWFkRGF0YSgpIDogbmV4dF8oTlVMTCksIG1lc3Nh
Z2VfbG9vcF8oTWVzc2FnZUxvb3A6OmN1cnJlbnQoKSkge30KCkJpcnRoT25UaHJlYWQ6OkJpcnRo
T25UaHJlYWQoY29uc3QgTG9jYXRpb24mIGxvY2F0aW9uKQogICAgOiBsb2NhdGlvbl8obG9jYXRp
b24pLAogICAgICBiaXJ0aF90aHJlYWRfKFRocmVhZERhdGE6OmN1cnJlbnQoKSkgeyB9CgoKfQoj
aWZuZGVmIEJBU0VfV09SS0VSX1BPT0xfSF8KI2RlZmluZSBCQVNFX1dPUktFUl9QT09MX0hfCgpj
bGFzcyBUYXNrOwoKLy8gVGhpcyBpcyBhIGZhY2lsaXR5IHRoYXQgcnVucyB0YXNrcyB0aGF0IGRv
bid0IHJlcXVpcmUgYSBzcGVjaWZpYyB0aHJlYWQgb3IKLy8gYSBtZXNzYWdlIGxvb3AuCmNsYXNz
IFdvcmtlclBvb2wgewogcHVibGljOgogIC8vIFRoaXMgZnVuY3Rpb24gcG9zdHMgfHRhc2t8IHRv
IHJ1biBvbiBhIHdvcmtlciB0aHJlYWQuICB8dGFza19pc19zbG93fAogIC8vIHNob3VsZCBiZSB1
c2VkIGZvciB0YXNrcyB0aGF0IHdpbGwgdGFrZSBhIGxvbmcgdGltZSB0byBleGVjdXRlLiAgUmV0
dXJucwogIC8vIGZhbHNlIGlmIHx0YXNrfCBjb3VsZCBub3QgYmUgcG9zdGVkIHRvIGEgd29ya2Vy
IHRocmVhZC4gIFJlZ2FyZGxlc3Mgb2YKICAvLyByZXR1cm4gdmFsdWUsIG93bmVyc2hpcCBvZiB8
dGFza3wgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHdvcmtlciBwb29sLgogIHN0YXRpYyBib29sIFBv
c3RUYXNrKGNvbnN0IHRyYWNrZWRfb2JqZWN0czo6TG9jYXRpb24mIGZyb21faGVyZSwKICAgICAg
ICAgICAgICAgICAgICAgICBUYXNrKiB0YXNrLCBib29sIHRhc2tfaXNfc2xvdyk7Cn07CgojZW5k
aWYgIC8vIEJBU0VfV09SS0VSX1BPT0xfSF8KCiNpZm5kZWYgQkFTRV9XT1JLRVJfUE9PTF9NQUNf
SF8KI2RlZmluZSBCQVNFX1dPUktFUl9QT09MX01BQ19IXwoKLy8gV29ya2VyUG9vbE9iakMgcHJv
dmlkZXMgYW4gT2JqZWN0aXZlLUMgaW50ZXJmYWNlIHRvIHRoZSBzYW1lIFdvcmtlclBvb2wKLy8g
dXNlZCBieSB0aGUgcmVzdCBvZiB0aGUgYXBwbGljYXRpb24uCkBpbnRlcmZhY2UgV29ya2VyUG9v
bE9iakMgOiBOU09iamVjdAoKLy8gUmV0dXJucyB0aGUgdW5kZXJseWluZyBOU09wZXJhdGlvblF1
ZXVlIGJhY2sgZW5kIHRoYXQgV29ya2VyUG9vbDo6UG9zdFRhc2sKLy8gd291bGQgcG9zdCB0YXNr
cyB0by4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gYWRkIE5TT3BlcmF0aW9uIHN1YmNsYXNzZXMKLy8g
ZGlyZWN0bHkgdG8gdGhlIHNhbWUgTlNPcGVyYXRpb25RdWV1ZSwgYnkgY2FsbGluZyAtW05TT3Bl
cmF0aW9uUXVldWUKLy8gYWRkT3BlcmF0aW9uOl0uICBNb3N0IE9iamVjdGl2ZS1DIGNvZGUgd2lz
aGluZyB0byBkaXNwYXRjaCB0YXNrcyB0byB0aGUKLy8gV29ya2VyUG9vbCB3aWxsIGZpbmQgaXQg
aGFuZHkgdG8gYWRkIGFuIG9wZXJhdGlvbiBvZiB0eXBlCi8vIE5TSW52b2NhdGlvbk9wZXJhdGlv
bi4KKyAoTlNPcGVyYXRpb25RdWV1ZSopc2hhcmVkT3BlcmF0aW9uUXVldWU7CgpAZW5kICAvLyBA
aW50ZXJmYWNlIFdvcmtlclBvb2xPYmpDCgojZW5kaWYgIC8vIEJBU0VfV09SS0VSX1BPT0xfTUFD
X0hfCgojaWZuZGVmIEJBU0VfU0lOR0xFVE9OX0hfCiNkZWZpbmUgQkFTRV9TSU5HTEVUT05fSF8K
Ci8vIERlZmF1bHQgdHJhaXRzIGZvciBTaW5nbGV0b248VHlwZT4uIENhbGxzIG9wZXJhdG9yIG5l
dyBhbmQgb3BlcmF0b3IgZGVsZXRlIG9uCi8vIHRoZSBvYmplY3QuIFJlZ2lzdGVycyBhdXRvbWF0
aWMgZGVsZXRpb24gYXQgcHJvY2VzcyBleGl0LgovLyBPdmVybG9hZCBpZiB5b3UgbmVlZCBhcmd1
bWVudHMgb3IgYW5vdGhlciBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbi4KdGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4Kc3RydWN0IERlZmF1bHRTaW5nbGV0b25UcmFpdHMgewogIC8vIEFsbG9jYXRl
cyB0aGUgb2JqZWN0LgogIHN0YXRpYyBUeXBlKiBOZXcoKSB7CiAgICAvLyBUaGUgcGFyZW50aGVz
aXMgaXMgdmVyeSBpbXBvcnRhbnQgaGVyZTsgaXQgZm9yY2VzIFBPRCB0eXBlCiAgICAvLyBpbml0
aWFsaXphdGlvbi4KICAgIHJldHVybiBuZXcgVHlwZSgpOwogIH0KCiAgLy8gRGVzdHJveXMgdGhl
IG9iamVjdC4KICBzdGF0aWMgdm9pZCBEZWxldGUoVHlwZSogeCkgewogICAgZGVsZXRlIHg7CiAg
fQoKICAvLyBTZXQgdG8gdHJ1ZSB0byBhdXRvbWF0aWNhbGx5IHJlZ2lzdGVyIGRlbGV0aW9uIG9m
IHRoZSBvYmplY3Qgb24gcHJvY2VzcwogIC8vIGV4aXQuIFNlZSBiZWxvdyBmb3IgdGhlIHJlcXVp
cmVkIGNhbGwgdGhhdCBtYWtlcyB0aGlzIGhhcHBlbi4KICBzdGF0aWMgY29uc3QgYm9vbCBrUmVn
aXN0ZXJBdEV4aXQgPSB0cnVlOwp9OwoKCi8vIEFsdGVybmF0ZSB0cmFpdHMgZm9yIHVzZSB3aXRo
IHRoZSBTaW5nbGV0b248VHlwZT4uICBJZGVudGljYWwgdG8KLy8gRGVmYXVsdFNpbmdsZXRvblRy
YWl0cyBleGNlcHQgdGhhdCB0aGUgU2luZ2xldG9uIHdpbGwgbm90IGJlIGNsZWFuZWQgdXAKLy8g
YXQgZXhpdC4KdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4Kc3RydWN0IExlYWt5U2luZ2xldG9uVHJh
aXRzIDogcHVibGljIERlZmF1bHRTaW5nbGV0b25UcmFpdHM8VHlwZT4gewogIHN0YXRpYyBjb25z
dCBib29sIGtSZWdpc3RlckF0RXhpdCA9IGZhbHNlOwp9OwoKCi8vIFRoZSBTaW5nbGV0b248VHlw
ZSwgVHJhaXRzLCBEaWZmZXJlbnRpYXRpbmdUeXBlPiBjbGFzcyBtYW5hZ2VzIGEgc2luZ2xlCi8v
IGluc3RhbmNlIG9mIFR5cGUgd2hpY2ggd2lsbCBiZSBjcmVhdGVkIG9uIGZpcnN0IHVzZSBhbmQg
d2lsbCBiZSBkZXN0cm95ZWQgYXQKLy8gbm9ybWFsIHByb2Nlc3MgZXhpdCkuIFRoZSBUcmFpdDo6
RGVsZXRlIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZCBvbgovLyBhYm5vcm1hbCBwcm9jZXNz
IGV4aXQuCi8vCi8vIERpZmZlcmVudGlhdGluZ1R5cGUgaXMgdXNlZCBhcyBhIGtleSB0byBkaWZm
ZXJlbnRpYXRlIHR3byBkaWZmZXJlbnQKLy8gc2luZ2xldG9ucyBoYXZpbmcgdGhlIHNhbWUgbWVt
b3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zIGJ1dCBzZXJ2aW5nIGEKLy8gZGlmZmVyZW50IHB1cnBv
c2UuIFRoaXMgaXMgbWFpbmx5IHVzZWQgZm9yIExvY2tzIHNlcnZpbmcgZGlmZmVyZW50IHB1cnBv
c2VzLgovLwovLyBFeGFtcGxlIHVzYWdlczogKG5vbmUgYXJlIHByZWZlcnJlZCwgdGhleSBhbGwg
cmVzdWx0IGluIHRoZSBzYW1lIGNvZGUpCi8vICAgMS4gRm9vQ2xhc3MqIHB0ciA9IFNpbmdsZXRv
bjxGb29DbGFzcz46OmdldCgpOwovLyAgICAgIHB0ci0+QmFyKCk7Ci8vICAgMi4gU2luZ2xldG9u
PEZvb0NsYXNzPigpLT5CYXIoKTsKLy8gICAzLiBTaW5nbGV0b248Rm9vQ2xhc3M+OjpnZXQoKS0+
QmFyKCk7Ci8vCi8vIFNpbmdsZXRvbjw+IGhhcyBubyBub24tc3RhdGljIG1lbWJlcnMgYW5kIGRv
ZXNuJ3QgbmVlZCB0byBhY3R1YWxseSBiZQovLyBpbnN0YW50aWF0ZWQuIEl0IGRvZXMgbm8gaGFy
bSB0byBpbnN0YW50aWF0ZSBpdCBhbmQgdXNlIGl0IGFzIGEgY2xhc3MgbWVtYmVyCi8vIG9yIGF0
IGdsb2JhbCBsZXZlbCBzaW5jZSBpdCBpcyBhY3RpbmcgYXMgYSBQT0QgdHlwZS4KLy8KLy8gVGhp
cyBjbGFzcyBpcyBpdHNlbGYgdGhyZWFkLXNhZmUuIFRoZSB1bmRlcmx5aW5nIFR5cGUgbXVzdCBv
ZiBjb3Vyc2UgYmUKLy8gdGhyZWFkLXNhZmUgaWYgeW91IHdhbnQgdG8gdXNlIGl0IGNvbmN1cnJl
bnRseS4gVHdvIHBhcmFtZXRlcnMgbWF5IGJlIHR1bmVkCi8vIGRlcGVuZGluZyBvbiB0aGUgdXNl
cidzIHJlcXVpcmVtZW50cy4KLy8KLy8gR2xvc3Nhcnk6Ci8vICAgUkFFID0ga1JlZ2lzdGVyQXRF
eGl0Ci8vCi8vIE9uIGV2ZXJ5IHBsYXRmb3JtLCBpZiBUcmFpdHM6OlJBRSBpcyB0cnVlLCB0aGUg
c2luZ2xldG9uIHdpbGwgYmUgZGVzdHJveWVkIGF0Ci8vIHByb2Nlc3MgZXhpdC4gTW9yZSBwcmVj
aXNlbHkgaXQgdXNlcyBiYXNlOjpBdEV4aXRNYW5hZ2VyIHdoaWNoIHJlcXVpcmVzIGFuCi8vIG9i
amVjdCBvZiB0aGlzIHR5cGUgdG8gYmUgaW5zdGFudGlhdGVkLiBBdEV4aXRNYW5hZ2VyIG1pbWlj
cyB0aGUgc2VtYW50aWNzCi8vIG9mIGF0ZXhpdCgpIHN1Y2ggYXMgTElGTyBvcmRlciBidXQgdW5k
ZXIgV2luZG93cyBpcyBzYWZlciB0byBjYWxsLiBGb3IgbW9yZQovLyBpbmZvcm1hdGlvbiBzZWUg
YXRfZXhpdC5oLgovLwovLyBJZiBUcmFpdHM6OlJBRSBpcyBmYWxzZSwgdGhlIHNpbmdsZXRvbiB3
aWxsIG5vdCBiZSBmcmVlZCBhdCBwcm9jZXNzIGV4aXQsCi8vIHRodXMgdGhlIHNpbmdsZXRvbiB3
aWxsIGJlIGxlYWtlZCBpZiBpdCBpcyBldmVyIGFjY2Vzc2VkLiBUcmFpdHM6OlJBRQovLyBzaG91
bGRuJ3QgYmUgZmFsc2UgdW5sZXNzIGFic29sdXRlbHkgbmVjZXNzYXJ5LiBSZW1lbWJlciB0aGF0
IHRoZSBoZWFwIHdoZXJlCi8vIHRoZSBvYmplY3QgaXMgYWxsb2NhdGVkIG1heSBiZSBkZXN0cm95
ZWQgYnkgdGhlIENSVCBhbnl3YXkuCi8vCi8vIElmIHlvdSB3YW50IHRvIGVuc3VyZSB0aGF0IHlv
dXIgY2xhc3MgY2FuIG9ubHkgZXhpc3QgYXMgYSBzaW5nbGV0b24sIG1ha2UKLy8gaXRzIGNvbnN0
cnVjdG9ycyBwcml2YXRlLCBhbmQgbWFrZSBEZWZhdWx0U2luZ2xldG9uVHJhaXRzPD4gYSBmcmll
bmQ6Ci8vCi8vICAgI2luY2x1ZGUgImJhc2Uvc2luZ2xldG9uLmgiCi8vICAgY2xhc3MgRm9vQ2xh
c3MgewovLyAgICBwdWJsaWM6Ci8vICAgICB2b2lkIEJhcigpIHsgLi4uIH0KLy8gICAgcHJpdmF0
ZToKLy8gICAgIEZvb0NsYXNzKCkgeyAuLi4gfQovLyAgICAgZnJpZW5kIHN0cnVjdCBEZWZhdWx0
U2luZ2xldG9uVHJhaXRzPEZvb0NsYXNzPjsKLy8KLy8gICAgIERJU0FMTE9XX0VWSUxfQ09OU1RS
VUNUT1JTKEZvb0NsYXNzKTsKLy8gICB9OwovLwovLyBDYXZlYXRzOgovLyAoYSkgRXZlcnkgY2Fs
bCB0byBnZXQoKSwgb3BlcmF0b3ItPigpIGFuZCBvcGVyYXRvciooKSBpbmN1cnMgc29tZSBvdmVy
aGVhZAovLyAgICAgKDE2bnMgb24gbXkgUDQvMi44R0h6KSB0byBjaGVjayB3aGV0aGVyIHRoZSBv
YmplY3QgaGFzIGFscmVhZHkgYmVlbgovLyAgICAgaW5pdGlhbGl6ZWQuICBZb3UgbWF5IHdpc2gg
dG8gY2FjaGUgdGhlIHJlc3VsdCBvZiBnZXQoKTsgaXQgd2lsbCBub3QKLy8gICAgIGNoYW5nZS4K
Ly8KLy8gKGIpIFlvdXIgZmFjdG9yeSBmdW5jdGlvbiBtdXN0IG5ldmVyIHRocm93IGFuIGV4Y2Vw
dGlvbi4gVGhpcyBjbGFzcyBpcyBub3QKLy8gICAgIGV4Y2VwdGlvbi1zYWZlLgovLwp0ZW1wbGF0
ZSA8dHlwZW5hbWUgVHlwZSwKICAgICAgICAgIHR5cGVuYW1lIFRyYWl0cyA9IERlZmF1bHRTaW5n
bGV0b25UcmFpdHM8VHlwZT4sCiAgICAgICAgICB0eXBlbmFtZSBEaWZmZXJlbnRpYXRpbmdUeXBl
ID0gVHlwZT4KY2xhc3MgU2luZ2xldG9uIHsKIHB1YmxpYzoKICAvLyBUaGlzIGNsYXNzIGlzIHNh
ZmUgdG8gYmUgY29uc3RydWN0ZWQgYW5kIGNvcHktY29uc3RydWN0ZWQgc2luY2UgaXQgaGFzIG5v
CiAgLy8gbWVtYmVyLgoKICAvLyBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBvbmUgdHJ1ZSBpbnN0
YW5jZSBvZiB0aGUgY2xhc3MuCiAgc3RhdGljIFR5cGUqIGdldCgpIHsKICAgIC8vIE91ciBBdG9t
aWNXb3JkIGRvdWJsZXMgYXMgYSBzcGlubG9jaywgd2hlcmUgYSB2YWx1ZSBvZgogICAgLy8ga0Jl
aW5nQ3JlYXRlZE1hcmtlciBtZWFucyB0aGUgc3BpbmxvY2sgaXMgYmVpbmcgaGVsZCBmb3IgY3Jl
YXRpb24uCiAgICBzdGF0aWMgY29uc3QgYmFzZTo6c3VidGxlOjpBdG9taWNXb3JkIGtCZWluZ0Ny
ZWF0ZWRNYXJrZXIgPSAxOwoKICAgIGJhc2U6OnN1YnRsZTo6QXRvbWljV29yZCB2YWx1ZSA9IGJh
c2U6OnN1YnRsZTo6Tm9CYXJyaWVyX0xvYWQoJmluc3RhbmNlXyk7CiAgICBpZiAodmFsdWUgIT0g
MCAmJiB2YWx1ZSAhPSBrQmVpbmdDcmVhdGVkTWFya2VyKSB7CiAgICAgIC8vIFNlZSB0aGUgY29y
cmVzcG9uZGluZyBIQVBQRU5TX0JFRk9SRSBiZWxvdy4KICAgICAgLy9BTk5PVEFURV9IQVBQRU5T
X0FGVEVSKCZpbnN0YW5jZV8pOwogICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUeXBlKj4o
dmFsdWUpOwogICAgfQoKICAgIC8vIE9iamVjdCBpc24ndCBjcmVhdGVkIHlldCwgbWF5YmUgd2Ug
d2lsbCBnZXQgdG8gY3JlYXRlIGl0LCBsZXQncyB0cnkuLi4KICAgIGlmIChiYXNlOjpzdWJ0bGU6
OkFjcXVpcmVfQ29tcGFyZUFuZFN3YXAoJmluc3RhbmNlXywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAga0JlaW5nQ3JlYXRlZE1hcmtlcikgPT0gMCkgewogICAgICAvLyBpbnN0
YW5jZV8gd2FzIE5VTEwgYW5kIGlzIG5vdyBrQmVpbmdDcmVhdGVkTWFya2VyLiAgT25seSBvbmUg
dGhyZWFkCiAgICAgIC8vIHdpbGwgZXZlciBnZXQgaGVyZS4gIFRocmVhZHMgbWlnaHQgYmUgc3Bp
bm5pbmcgb24gdXMsIGFuZCB0aGV5IHdpbGwKICAgICAgLy8gc3RvcCByaWdodCBhZnRlciB3ZSBk
byB0aGlzIHN0b3JlLgogICAgICBUeXBlKiBuZXd2YWwgPSBUcmFpdHM6Ok5ldygpOwoKICAgICAg
Ly8gVGhpcyBhbm5vdGF0aW9uIGhlbHBzIHJhY2UgZGV0ZWN0b3JzIHJlY29nbml6ZSBjb3JyZWN0
IGxvY2stbGVzcwogICAgICAvLyBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiBkaWZmZXJlbnQgdGhy
ZWFkcyBjYWxsaW5nIGdldCgpLgogICAgICAvLyBTZWUgdGhlIGNvcnJlc3BvbmRpbmcgSEFQUEVO
U19BRlRFUiBiZWxvdyBhbmQgYWJvdmUuCiAgICAgLy9BTk5PVEFURV9IQVBQRU5TX0JFRk9SRSgm
aW5zdGFuY2VfKTsKICAgICAgYmFzZTo6c3VidGxlOjpSZWxlYXNlX1N0b3JlKAogICAgICAgICAg
Jmluc3RhbmNlXywgcmVpbnRlcnByZXRfY2FzdDxiYXNlOjpzdWJ0bGU6OkF0b21pY1dvcmQ+KG5l
d3ZhbCkpOwoKICAgICAgaWYgKFRyYWl0czo6a1JlZ2lzdGVyQXRFeGl0KQogICAgICAgIGJhc2U6
OkF0RXhpdE1hbmFnZXI6OlJlZ2lzdGVyQ2FsbGJhY2soT25FeGl0LCBOVUxMKTsKCiAgICAgIHJl
dHVybiBuZXd2YWw7CiAgICB9CgogICAgLy8gV2UgaGl0IGEgcmFjZS4gIEFub3RoZXIgdGhyZWFk
IGJlYXQgdXMgYW5kIGVpdGhlcjoKICAgIC8vIC0gSGFzIHRoZSBvYmplY3QgaW4gQmVpbmdDcmVh
dGVkIHN0YXRlCiAgICAvLyAtIEFscmVhZHkgaGFzIHRoZSBvYmplY3QgY3JlYXRlZC4uLgogICAg
Ly8gV2Uga25vdyB2YWx1ZSAhPSBOVUxMLiAgSXQgY291bGQgYmUga0JlaW5nQ3JlYXRlZE1hcmtl
ciwgb3IgYSB2YWxpZCBwdHIuCiAgICAvLyBVbmxlc3MgeW91ciBjb25zdHJ1Y3RvciBjYW4gYmUg
dmVyeSB0aW1lIGNvbnN1bWluZywgaXQgaXMgdmVyeSB1bmxpa2VseQogICAgLy8gdG8gaGl0IHRo
aXMgcmFjZS4gIFdoZW4gaXQgZG9lcywgd2UganVzdCBzcGluIGFuZCB5aWVsZCB0aGUgdGhyZWFk
IHVudGlsCiAgICAvLyB0aGUgb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQuCiAgICB3aGlsZSAodHJ1
ZSkgewogICAgICB2YWx1ZSA9IGJhc2U6OnN1YnRsZTo6Tm9CYXJyaWVyX0xvYWQoJmluc3RhbmNl
Xyk7CiAgICAgIGlmICh2YWx1ZSAhPSBrQmVpbmdDcmVhdGVkTWFya2VyKQogICAgICAgIGJyZWFr
OwogICAgICBQbGF0Zm9ybVRocmVhZDo6WWllbGRDdXJyZW50VGhyZWFkKCk7CiAgICB9CgogICAg
Ly8gU2VlIHRoZSBjb3JyZXNwb25kaW5nIEhBUFBFTlNfQkVGT1JFIGFib3ZlLgogICAgLy9BTk5P
VEFURV9IQVBQRU5TX0FGVEVSKCZpbnN0YW5jZV8pOwogICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8VHlwZSo+KHZhbHVlKTsKICB9CgogIC8vIFNob3J0Y3V0cy4KICBUeXBlJiBvcGVyYXRvcioo
KSB7CiAgICByZXR1cm4gKmdldCgpOwogIH0KCiAgVHlwZSogb3BlcmF0b3ItPigpIHsKICAgIHJl
dHVybiBnZXQoKTsKICB9CgogcHJpdmF0ZToKICAvLyBBZGFwdGVyIGZ1bmN0aW9uIGZvciB1c2Ug
d2l0aCBBdEV4aXQoKS4gIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBzaW5nbGUKICAvLyB0aHJlYWRl
ZCwgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgdGFrZSB0aGUgcHJlY2F1dGlvbnMgYW55d2F5LgogIHN0
YXRpYyB2b2lkIE9uRXhpdCh2b2lkKiB1bnVzZWQpIHsKICAgIC8vIEF0RXhpdCBzaG91bGQgb25s
eSBldmVyIGJlIHJlZ2lzdGVyIGFmdGVyIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugd2FzCiAgICAv
LyBjcmVhdGVkLiAgV2Ugc2hvdWxkIG9ubHkgZXZlciBnZXQgaGVyZSB3aXRoIGEgdmFsaWQgaW5z
dGFuY2VfIHBvaW50ZXIuCiAgICBUcmFpdHM6OkRlbGV0ZShyZWludGVycHJldF9jYXN0PFR5cGUq
PigKICAgICAgICBiYXNlOjpzdWJ0bGU6Ok5vQmFycmllcl9BdG9taWNFeGNoYW5nZSgmaW5zdGFu
Y2VfLCAwKSkpOwogIH0KICBzdGF0aWMgYmFzZTo6c3VidGxlOjpBdG9taWNXb3JkIGluc3RhbmNl
XzsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IERpZmZlcmVudGlhdGluZ1R5cGU+CmJhc2U6OnN1YnRsZTo6QXRvbWljV29yZCBTaW5nbGV0b248
VHlwZSwgVHJhaXRzLCBEaWZmZXJlbnRpYXRpbmdUeXBlPjo6CiAgICBpbnN0YW5jZV8gPSAwOwoK
I2VuZGlmICAvLyBCQVNFX1NJTkdMRVRPTl9IXwoKI2lmbmRlZiBCQVNFX1NJTkdMRVRPTl9PQkpD
X0hfCiNkZWZpbmUgQkFTRV9TSU5HTEVUT05fT0JKQ19IXwoKLy8gU2luZ2xldG9uIHRyYWl0cyB1
c2FibGUgdG8gbWFuYWdlIHRyYWRpdGlvbmFsIE9iamVjdGl2ZS1DIG9iamVjdHMsIHdoaWNoCi8v
IGFyZSBpbnN0YW50aWF0ZWQgYnkgc2VuZGluZyB8YWxsb2N8IGFuZCB8aW5pdHwgbWVzc2FnZXMs
IGFuZCBhcmUgZGVhbGxvY2F0ZWQKLy8gaW4gYSBtZW1vcnktbWFuYWdlZCBlbnZpcm9ubWVudCB3
aGVuIHRoZWlyIHJldGFpbiBjb3VudHMgZHJvcCB0byAwIGJ5Ci8vIHNlbmRpbmcgfHJlbGVhc2V8
IG1lc3NhZ2VzLgp0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgpzdHJ1Y3QgRGVmYXVsdFNpbmdsZXRv
bk9iakNUcmFpdHMgOiBwdWJsaWMgRGVmYXVsdFNpbmdsZXRvblRyYWl0czxUeXBlPiB7CiAgc3Rh
dGljIFR5cGUqIE5ldygpIHsKICAgIHJldHVybiBbW1R5cGUgYWxsb2NdIGluaXRdOwogIH0KCiAg
c3RhdGljIHZvaWQgRGVsZXRlKFR5cGUqIG9iamVjdCkgewogICAgW29iamVjdCByZWxlYXNlXTsK
ICB9Cn07CgovLyBFeGFjdGx5IGxpa2UgU2luZ2xldG9uLCBidXQgd2l0aG91dCB0aGUgRGVmYXVs
dFNpbmdsZXRvbk9iakNUcmFpdHMgYXMgdGhlCi8vIGRlZmF1bHQgdHJhaXQgY2xhc3MuICBUaGlz
IG1ha2VzIGl0IHN0cmFpZ2h0Zm9yd2FyZCBmb3IgT2JqZWN0aXZlLUMrKyBjb2RlCi8vIHRvIGhv
bGQgT2JqZWN0aXZlLUMgb2JqZWN0cyBhcyBzaW5nbGV0b25zLgp0ZW1wbGF0ZTx0eXBlbmFtZSBU
eXBlLAogICAgICAgICB0eXBlbmFtZSBUcmFpdHMgPSBEZWZhdWx0U2luZ2xldG9uT2JqQ1RyYWl0
czxUeXBlPiwKICAgICAgICAgdHlwZW5hbWUgRGlmZmVyZW50aWF0aW5nVHlwZSA9IFR5cGU+CmNs
YXNzIFNpbmdsZXRvbk9iakMgOiBwdWJsaWMgU2luZ2xldG9uPFR5cGUsIFRyYWl0cywgRGlmZmVy
ZW50aWF0aW5nVHlwZT4gewp9OwoKI2VuZGlmICAvLyBCQVNFX1NJTkdMRVRPTl9PQkpDX0hfCgoj
aWZuZGVmIEJBU0VfU0NPUEVEX05TQVVUT1JFTEVBU0VfUE9PTF9IXwojZGVmaW5lIEJBU0VfU0NP
UEVEX05TQVVUT1JFTEVBU0VfUE9PTF9IXwoKI2lmIGRlZmluZWQoT1NfTUFDT1NYKQojaWYgZGVm
aW5lZChfX09CSkNfXykKQGNsYXNzIE5TQXV0b3JlbGVhc2VQb29sOwojZWxzZSAgLy8gX19PQkpD
X18KY2xhc3MgTlNBdXRvcmVsZWFzZVBvb2w7CiNlbmRpZiAgLy8gX19PQkpDX18KI2VuZGlmICAv
LyBPU19NQUNPU1gKCm5hbWVzcGFjZSBiYXNlIHsKCi8vIE9uIHRoZSBNYWMsIFNjb3BlZE5TQXV0
b3JlbGVhc2VQb29sIGFsbG9jYXRlcyBhbiBOU0F1dG9yZWxlYXNlUG9vbCB3aGVuCi8vIGluc3Rh
bnRpYXRlZCBhbmQgc2VuZHMgaXQgYSAtZHJhaW4gbWVzc2FnZSB3aGVuIGRlc3Ryb3llZC4gIFRo
aXMgYWxsb3dzIGFuCi8vIGF1dG9yZWxlYXNlIHBvb2wgdG8gYmUgbWFpbnRhaW5lZCBpbiBvcmRp
bmFyeSBDKysgY29kZSB3aXRob3V0IGJyaW5naW5nIGluCi8vIGFueSBkaXJlY3QgT2JqZWN0aXZl
LUMgZGVwZW5kZW5jeS4KLy8KLy8gT24gb3RoZXIgcGxhdGZvcm1zLCBTY29wZWROU0F1dG9yZWxl
YXNlUG9vbCBpcyBhbiBlbXB0eSBvYmplY3Qgd2l0aCBubwovLyBlZmZlY3RzLiAgVGhpcyBhbGxv
d3MgaXQgdG8gYmUgdXNlZCBkaXJlY3RseSBpbiBjcm9zcy1wbGF0Zm9ybSBjb2RlIHdpdGhvdXQK
Ly8gdWdseSAjaWZkZWZzLgpjbGFzcyBTY29wZWROU0F1dG9yZWxlYXNlUG9vbCB7CiBwdWJsaWM6
CiNpZiAhZGVmaW5lZChPU19NQUNPU1gpCiAgU2NvcGVkTlNBdXRvcmVsZWFzZVBvb2woKSB7fQog
IHZvaWQgUmVjeWNsZSgpIHsgfQojZWxzZSAgLy8gT1NfTUFDT1NYCiAgU2NvcGVkTlNBdXRvcmVs
ZWFzZVBvb2woKTsKICB+U2NvcGVkTlNBdXRvcmVsZWFzZVBvb2woKTsKCiAgLy8gQ2xlYXIgb3V0
IHRoZSBwb29sIGluIGNhc2UgaXRzIHBvc2l0aW9uIG9uIHRoZSBzdGFjayBjYXVzZXMgaXQgdG8g
YmUKICAvLyBhbGl2ZSBmb3IgbG9uZyBwZXJpb2RzIG9mIHRpbWUgKHN1Y2ggYXMgdGhlIGVudGly
ZSBsZW5ndGggb2YgdGhlIGFwcCkuCiAgLy8gT25seSB1c2UgdGhlbiB3aGVuIHlvdSdyZSBjZXJ0
YWluIHRoZSBpdGVtcyBjdXJyZW50bHkgaW4gdGhlIHBvb2wgYXJlCiAgLy8gbm8gbG9uZ2VyIG5l
ZWRlZC4KICB2b2lkIFJlY3ljbGUoKTsKIHByaXZhdGU6CiAgTlNBdXRvcmVsZWFzZVBvb2wqIGF1
dG9yZWxlYXNlX3Bvb2xfOwojZW5kaWYgIC8vIE9TX01BQ09TWAoKIHByaXZhdGU6CiAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKFNjb3BlZE5TQXV0b3JlbGVhc2VQb29sKTsKfTsKClNjb3BlZE5T
QXV0b3JlbGVhc2VQb29sOjpTY29wZWROU0F1dG9yZWxlYXNlUG9vbCgpCiAgICA6IGF1dG9yZWxl
YXNlX3Bvb2xfKFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2NdIGluaXRdKSB7CiAgRENIRUNLKGF1
dG9yZWxlYXNlX3Bvb2xfKTsKfQoKU2NvcGVkTlNBdXRvcmVsZWFzZVBvb2w6On5TY29wZWROU0F1
dG9yZWxlYXNlUG9vbCgpIHsKICBbYXV0b3JlbGVhc2VfcG9vbF8gZHJhaW5dOwp9CgovLyBDeWNs
ZSB0aGUgaW50ZXJuYWwgcG9vbCwgYWxsb3dpbmcgZXZlcnl0aGluZyB0aGVyZSB0byBnZXQgY2xl
YW5lZCB1cCBhbmQKLy8gc3RhcnQgYW5ldy4Kdm9pZCBTY29wZWROU0F1dG9yZWxlYXNlUG9vbDo6
UmVjeWNsZSgpIHsKICBbYXV0b3JlbGVhc2VfcG9vbF8gZHJhaW5dOwogIGF1dG9yZWxlYXNlX3Bv
b2xfID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07CiAgRENIRUNLKGF1dG9yZWxl
YXNlX3Bvb2xfKTsKfQoKCgp9ICAvLyBuYW1lc3BhY2UgYmFzZQoKI2VuZGlmICAvLyBCQVNFX1ND
T1BFRF9OU0FVVE9SRUxFQVNFX1BPT0xfSF8KCgoKdXNpbmcgYmFzZTo6V2FpdGFibGVFdmVudDsK
CkBpbXBsZW1lbnRhdGlvbiBXb3JrZXJQb29sT2JqQwoKKyAoTlNPcGVyYXRpb25RdWV1ZSopc2hh
cmVkT3BlcmF0aW9uUXVldWUgewogIHJldHVybiBTaW5nbGV0b25PYmpDPE5TT3BlcmF0aW9uUXVl
dWU+OjpnZXQoKTsKfQoKQGVuZCAgLy8gQGltcGxlbWVudGF0aW9uIFdvcmtlclBvb2xPYmpDCgov
LyBUYXNrT3BlcmF0aW9uIGFkYXB0cyBUYXNrLT5SdW4oKSBmb3IgdXNlIGluIGFuIE5TT3BlcmF0
aW9uUXVldWUuCkBpbnRlcmZhY2UgVGFza09wZXJhdGlvbiA6IE5TT3BlcmF0aW9uIHsKIEBwcml2
YXRlCiAgc2NvcGVkX3B0cjxUYXNrPiB0YXNrXzsKfQoKLy8gUmV0dXJucyBhbiBhdXRvcmVsZWFz
ZWQgaW5zdGFuY2Ugb2YgVGFza09wZXJhdGlvbi4gIFNlZSAtaW5pdFdpdGhUYXNrOiBmb3IKLy8g
ZGV0YWlscy4KKyAoaWQpdGFza09wZXJhdGlvbldpdGhUYXNrOihUYXNrKil0YXNrOwoKLy8gRGVz
aWduYXRlZCBpbml0aWFsaXplci4gIHx0YXNrfCBpcyBhZG9wdGVkIGFzIHRoZSBUYXNrKiB3aG9z
ZSBSdW4gbWV0aG9kCi8vIHRoaXMgb3BlcmF0aW9uIHdpbGwgY2FsbCB3aGVuIGV4ZWN1dGVkLgot
IChpZClpbml0V2l0aFRhc2s6KFRhc2sqKXRhc2s7CgpAZW5kICAvLyBAaW50ZXJmYWNlIFRhc2tP
cGVyYXRpb24KCkBpbXBsZW1lbnRhdGlvbiBUYXNrT3BlcmF0aW9uCgorIChpZCl0YXNrT3BlcmF0
aW9uV2l0aFRhc2s6KFRhc2sqKXRhc2sgewogIHJldHVybiBbW1tUYXNrT3BlcmF0aW9uIGFsbG9j
XSBpbml0V2l0aFRhc2s6dGFza10gYXV0b3JlbGVhc2VdOwp9CgotIChpZClpbml0IHsKICByZXR1
cm4gW3NlbGYgaW5pdFdpdGhUYXNrOk5VTExdOwp9CgotIChpZClpbml0V2l0aFRhc2s6KFRhc2sq
KXRhc2sgewogIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpIHsKICAgIHRhc2tfLnJlc2V0KHRh
c2spOwogIH0KICByZXR1cm4gc2VsZjsKfQoKLSAodm9pZCltYWluIHsKICBEQ0hFQ0sodGFza18u
Z2V0KCkpIDw8ICItW1Rhc2tPcGVyYXRpb24gbWFpbl0gY2FsbGVkIHdpdGggbm8gdGFzayI7CiAg
aWYgKCF0YXNrXy5nZXQoKSkgewogICAgcmV0dXJuOwogIH0KCiAgYmFzZTo6U2NvcGVkTlNBdXRv
cmVsZWFzZVBvb2wgYXV0b3JlbGVhc2VQb29sOwoKICB0YXNrXy0+UnVuKCk7CiAgdGFza18ucmVz
ZXQoTlVMTCk7Cn0KCi0gKHZvaWQpZGVhbGxvYyB7CiAgRENIRUNLKCF0YXNrXy5nZXQoKSkKICAg
ICAgPDwgIi1bVGFza09wZXJhdGlvbiBkZWFsbG9jXSBjYWxsZWQgd2l0aG91dCBydW5uaW5nIHRh
c2siOwoKICBbc3VwZXIgZGVhbGxvY107Cn0KCkBlbmQgIC8vIEBpbXBsZW1lbnRhdGlvbiBUYXNr
T3BlcmF0aW9uCgoKCmJvb2wgV29ya2VyUG9vbDo6UG9zdFRhc2soY29uc3QgdHJhY2tlZF9vYmpl
Y3RzOjpMb2NhdGlvbiYgZnJvbV9oZXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2sq
IHRhc2ssIGJvb2wgdGFza19pc19zbG93KSB7CiAgLy8gSWdub3JlIHx0YXNrX2lzX3Nsb3d8LCBp
dCBkb2Vzbid0IG1hcCBkaXJlY3RseSB0byBhbnkgdHVuYWJsZSBhc3BlY3Qgb2YKICAvLyBhbiBO
U09wZXJhdGlvbi4KCiAgRENIRUNLKHRhc2spIDw8ICJXb3JrZXJQb29sOjpQb3N0VGFzayBjYWxs
ZWQgd2l0aCBubyB0YXNrIjsKICBpZiAoIXRhc2spIHsKICAgIHJldHVybiBmYWxzZTsKICB9Cgog
IHRhc2stPlNldEJpcnRoUGxhY2UoZnJvbV9oZXJlKTsKCiAgTlNPcGVyYXRpb25RdWV1ZSogb3Bl
cmF0aW9uX3F1ZXVlID0gW1dvcmtlclBvb2xPYmpDIHNoYXJlZE9wZXJhdGlvblF1ZXVlXTsKICBb
b3BlcmF0aW9uX3F1ZXVlIGFkZE9wZXJhdGlvbjpbVGFza09wZXJhdGlvbiB0YXNrT3BlcmF0aW9u
V2l0aFRhc2s6dGFza11dOwoKICByZXR1cm4gdHJ1ZTsKfQoKY2xhc3MgUG9zdFRhc2tUZXN0VGFz
ayA6IHB1YmxpYyBUYXNrIHsKIHB1YmxpYzoKICBQb3N0VGFza1Rlc3RUYXNrKFdhaXRhYmxlRXZl
bnQqIGV2ZW50KSA6IGV2ZW50XyhldmVudCkgewogIH0KCiAgdm9pZCBSdW4oKSB7CiAgICBldmVu
dF8tPlNpZ25hbCgpOwogIH0KCiBwcml2YXRlOgogIFdhaXRhYmxlRXZlbnQqIGV2ZW50XzsKfTsK
CnZvaWQgV29ya2VyUG9vbFRlc3RfUG9zdFRhc2soKSB7CiAgV2FpdGFibGVFdmVudCB0ZXN0X2V2
ZW50KGZhbHNlLCBmYWxzZSk7CiAgV2FpdGFibGVFdmVudCBsb25nX3Rlc3RfZXZlbnQoZmFsc2Us
IGZhbHNlKTsKICBib29sIHNpZ25hbGVkOwoKICBXb3JrZXJQb29sOjpQb3N0VGFzayhGUk9NX0hF
UkUsIG5ldyBQb3N0VGFza1Rlc3RUYXNrKCZ0ZXN0X2V2ZW50KSwgZmFsc2UpOwogIFdvcmtlclBv
b2w6OlBvc3RUYXNrKEZST01fSEVSRSwgbmV3IFBvc3RUYXNrVGVzdFRhc2soJmxvbmdfdGVzdF9l
dmVudCksIHRydWUpOwoKICBzaWduYWxlZCA9IHRlc3RfZXZlbnQuV2FpdCgpOwovLyAgRVhQRUNU
X1RSVUUoc2lnbmFsZWQpOwogIHNpZ25hbGVkID0gbG9uZ190ZXN0X2V2ZW50LldhaXQoKTsKLy8g
IEVYUEVDVF9UUlVFKHNpZ25hbGVkKTsKfQoKaW50IG1haW4oKSB7CiAgV29ya2VyUG9vbFRlc3Rf
UG9zdFRhc2soKTsKICByZXR1cm4gMDsKfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>38722</attachid>
            <date>2009-11-30 17:57:41 +0000</date>
            <delta_ts>2009-11-30 18:04:13 +0000</delta_ts>
            <desc>The log of running Helgrind on the supplied program.</desc>
            <filename>worker_vex_test.helgrind.log</filename>
            <type>text/plain</type>
            <size>4023</size>
            <attacher name="Alexander Potapenko">glider</attacher>
            
              <data encoding="base64">PT02Mzc0OD09IEhlbGdyaW5kLCBhIHRocmVhZCBlcnJvciBkZXRlY3Rvcgo9PTYzNzQ4PT0gQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMDksIGFuZCBHTlUgR1BMJ2QsIGJ5IE9wZW5Xb3JrcyBMTFAgZXQg
YWwuCj09NjM3NDg9PSBVc2luZyBWYWxncmluZC0zLjYuMC5TVk4gYW5kIExpYlZFWDsgcmVydW4g
d2l0aCAtaCBmb3IgY29weXJpZ2h0IGluZm8KPT02Mzc0OD09IENvbW1hbmQ6IC9Vc2Vycy9nbGlk
ZXIvc3JjL2Nocm9taXVtL2Nocm9taXVtMi9zcmMvYmFzZS9hLm91dAo9PTYzNzQ4PT0gCi0tNjM3
NDgtLSAvVXNlcnMvZ2xpZGVyL3NyYy9jaHJvbWl1bS9jaHJvbWl1bTIvc3JjL2Jhc2UvYS5vdXQ6
Ci0tNjM3NDgtLSBkU1lNIGRpcmVjdG9yeSBpcyBtaXNzaW5nOyBjb25zaWRlciB1c2luZyAtLWRz
eW11dGlsPXllcwoyMDA5LTExLTMwIDE5OjQ1OjEzLjg3NSBhLm91dFs2Mzc0ODo1MGJdICoqKiBf
TlNBdXRvcmVsZWFzZU5vUG9vbCgpOiBPYmplY3QgMHgxY2RjMTAwIG9mIGNsYXNzIF9fTlNGYXN0
RW51bWVyYXRpb25FbnVtZXJhdG9yIGF1dG9yZWxlYXNlZCB3aXRoIG5vIHBvb2wgaW4gcGxhY2Ug
LSBqdXN0IGxlYWtpbmcKU3RhY2s6ICgweDRkMWYwZiAweDNkZTQ0MiAweDQ3NDFkMiAweDQ3NDU5
NyAweDJjMzggMHgyYWM0IDB4NDAwZCAweDUzYjYgMHg1NGM5IDB4MjgxYSkKMjAwOS0xMS0zMCAx
OTo0NToxNC4xNTMgYS5vdXRbNjM3NDg6NTBiXSAqKiogX05TQXV0b3JlbGVhc2VOb1Bvb2woKTog
T2JqZWN0IDB4MWNmMDJiMCBvZiBjbGFzcyBOU0NGU2V0IGF1dG9yZWxlYXNlZCB3aXRoIG5vIHBv
b2wgaW4gcGxhY2UgLSBqdXN0IGxlYWtpbmcKU3RhY2s6ICgweDRkMWYwZiAweDNkZTQ0MiAweDNm
NmU2MyAweDNmNmIzYyAweDNmNjdiOCAweDNmNjQ5MyAweDNmNjI0MiAweDNmNWUzZSAweDQ3NDIw
ZiAweDQ3NDU5NyAweDJjMzggMHgyYWM0IDB4NDAwZCAweDUzYjYgMHg1NGM5IDB4MjgxYSkKMjAw
OS0xMS0zMCAxOTo0NToxNC4yMTQgYS5vdXRbNjM3NDg6NTBiXSAqKiogX05TQXV0b3JlbGVhc2VO
b1Bvb2woKTogT2JqZWN0IDB4MWNlNGNkMCBvZiBjbGFzcyBOU0NGU2V0IGF1dG9yZWxlYXNlZCB3
aXRoIG5vIHBvb2wgaW4gcGxhY2UgLSBqdXN0IGxlYWtpbmcKU3RhY2s6ICgweDRkMWYwZiAweDNk
ZTQ0MiAweDNmNmU2MyAweDNmNmIzYyAweDNmNjdiOCAweDNmNjQ5MyAweDNmNjI0MiAweDNmNWUz
ZSAweDQ3NDIwZiAweDQ3NDU5NyAweDJjMzggMHgyYWM0IDB4NDAwZCAweDUzYjYgMHg1NGM5IDB4
MjgxYSkKMjAwOS0xMS0zMCAxOTo0NToxNC4yNTcgYS5vdXRbNjM3NDg6NTBiXSAqKiogX05TQXV0
b3JlbGVhc2VOb1Bvb2woKTogT2JqZWN0IDB4MWNjZDA1MCBvZiBjbGFzcyBUYXNrT3BlcmF0aW9u
IGF1dG9yZWxlYXNlZCB3aXRoIG5vIHBvb2wgaW4gcGxhY2UgLSBqdXN0IGxlYWtpbmcKU3RhY2s6
ICgweDRkMWYwZiAweDNkZTQ0MiAweDJhZGEgMHg0MDBkIDB4NTNiNiAweDU0YzkgMHgyODFhKQoK
SGVsZ3JpbmQ6IGhnX21haW4uYzo2MTYgKG1hcF90aHJlYWRzX2xvb2t1cCk6IEFzc2VydGlvbiAn
dGhyJyBmYWlsZWQuCj09NjM3NDg9PSAgICBhdCAweEYwMEEwODBEOiA/Pz8KPT02Mzc0OD09ICAg
IGJ5IDB4RjAwQTBBQzE6ID8/Pwo9PTYzNzQ4PT0gICAgYnkgMHhGMDA4QThFOTogPz8/Cj09NjM3
NDg9PSAgICBieSAweEYwMEZBMDhDOiA/Pz8KPT02Mzc0OD09ICAgIGJ5IDB4RjAwRkI2MTM6ID8/
Pwo9PTYzNzQ4PT0gICAgYnkgMHhGMDEyMjA1RjogPz8/Cj09NjM3NDg9PSAgICBieSAweEYwMTIy
MzcyOiA/Pz8KCnNjaGVkIHN0YXR1czoKICBydW5uaW5nX3RpZD0yCgpUaHJlYWQgMTogc3RhdHVz
ID0gVmdUc19XYWl0U3lzCj09NjM3NDg9PSAgICBhdCAweDdCNTI4NjogbWFjaF9tc2dfdHJhcCAo
aW4gL3Vzci9saWIvbGliU3lzdGVtLkIuZHlsaWIpCj09NjM3NDg9PSAgICBieSAweDdERDc1NDog
X25vdGlmeV9zZXJ2ZXJfcmVnaXN0ZXJfcGxhaW4gKGluIC91c3IvbGliL2xpYlN5c3RlbS5CLmR5
bGliKQo9PTYzNzQ4PT0gICAgYnkgMHg3REQ2NUI6IG5vdGlmeV9yZWdpc3Rlcl9wbGFpbiAoaW4g
L3Vzci9saWIvbGliU3lzdGVtLkIuZHlsaWIpCj09NjM3NDg9PSAgICBieSAweDdFMUQ2QjogX2Fz
bF9ub3RpZnlfb3BlbiAoaW4gL3Vzci9saWIvbGliU3lzdGVtLkIuZHlsaWIpCj09NjM3NDg9PSAg
ICBieSAweDdFMUFBQzogYXNsX29wZW4gKGluIC91c3IvbGliL2xpYlN5c3RlbS5CLmR5bGliKQo9
PTYzNzQ4PT0gICAgYnkgMHhCQ0M0NzM6IF9fQ0ZMb2dDU3RyaW5nIChpbiAvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9Db3JlRm91bmRhdGlvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db3JlRm91
bmRhdGlvbikKPT02Mzc0OD09ICAgIGJ5IDB4QkNDOUVBOiBfQ0ZMb2d2RXggKGluIC9TeXN0ZW0v
TGlicmFyeS9GcmFtZXdvcmtzL0NvcmVGb3VuZGF0aW9uLmZyYW1ld29yay9WZXJzaW9ucy9BL0Nv
cmVGb3VuZGF0aW9uKQo9PTYzNzQ4PT0gICAgYnkgMHg0MDJDNkQ6IE5TTG9ndiAoaW4gL1N5c3Rl
bS9MaWJyYXJ5L0ZyYW1ld29ya3MvRm91bmRhdGlvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQy9Gb3Vu
ZGF0aW9uKQo9PTYzNzQ4PT0gICAgYnkgMHg0NjIxRUE6IE5TTG9nIChpbiAvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1ld29yay9WZXJzaW9ucy9DL0ZvdW5kYXRpb24p
Cj09NjM3NDg9PSAgICBieSAweDREMUYzQTogX05TQXV0b3JlbGVhc2VOb1Bvb2wgKGluIC9TeXN0
ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0ZvdW5kYXRpb24uZnJhbWV3b3JrL1ZlcnNpb25zL0MvRm91
bmRhdGlvbikKPT02Mzc0OD09ICAgIGJ5IDB4M0RFNDQxOiAtW05TT2JqZWN0KE5TT2JqZWN0KSBh
dXRvcmVsZWFzZV0gKGluIC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0ZvdW5kYXRpb24uZnJh
bWV3b3JrL1ZlcnNpb25zL0MvRm91bmRhdGlvbikKPT02Mzc0OD09ICAgIGJ5IDB4MkFEOTogK1tU
YXNrT3BlcmF0aW9uIHRhc2tPcGVyYXRpb25XaXRoVGFzazpdIChpbiAvVXNlcnMvZ2xpZGVyL3Ny
Yy9jaHJvbWl1bS9jaHJvbWl1bTIvc3JjL2Jhc2UvYS5vdXQpCj09NjM3NDg9PSAgICBieSAweDQw
MEM6IFdvcmtlclBvb2w6OlBvc3RUYXNrKHRyYWNrZWRfb2JqZWN0czo6TG9jYXRpb24gY29uc3Qm
LCBUYXNrKiwgYm9vbCkgKGluIC9Vc2Vycy9nbGlkZXIvc3JjL2Nocm9taXVtL2Nocm9taXVtMi9z
cmMvYmFzZS9hLm91dCkKPT02Mzc0OD09ICAgIGJ5IDB4NTQzMjogV29ya2VyUG9vbFRlc3RfUG9z
dFRhc2soKSAoaW4gL1VzZXJzL2dsaWRlci9zcmMvY2hyb21pdW0vY2hyb21pdW0yL3NyYy9iYXNl
L2Eub3V0KQo9PTYzNzQ4PT0gICAgYnkgMHg1NEM4OiBtYWluIChpbiAvVXNlcnMvZ2xpZGVyL3Ny
Yy9jaHJvbWl1bS9jaHJvbWl1bTIvc3JjL2Jhc2UvYS5vdXQpCgpUaHJlYWQgMjogc3RhdHVzID0g
VmdUc19SdW5uYWJsZQo9PTYzNzQ4PT0gICAgYXQgMHg4MUUyQTQ6IHN0YXJ0X3dxdGhyZWFkIChp
biAvdXNyL2xpYi9saWJTeXN0ZW0uQi5keWxpYikKCgpOb3RlOiBzZWUgYWxzbyB0aGUgRkFRIGlu
IHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uLgpJdCBjb250YWlucyB3b3JrYXJvdW5kcyB0byBzZXZl
cmFsIGNvbW1vbiBwcm9ibGVtcy4KSW4gcGFydGljdWxhciwgaWYgVmFsZ3JpbmQgYWJvcnRlZCBv
ciBjcmFzaGVkIGFmdGVyCmlkZW50aWZ5aW5nIHByb2JsZW1zIGluIHlvdXIgcHJvZ3JhbSwgdGhl
cmUncyBhIGdvb2QgY2hhbmNlCnRoYXQgZml4aW5nIHRob3NlIHByb2JsZW1zIHdpbGwgcHJldmVu
dCBWYWxncmluZCBhYm9ydGluZyBvcgpjcmFzaGluZywgZXNwZWNpYWxseSBpZiBpdCBoYXBwZW5l
ZCBpbiBtX21hbGxvY2ZyZWUuYy4KCklmIHRoYXQgZG9lc24ndCBoZWxwLCBwbGVhc2UgcmVwb3J0
IHRoaXMgYnVnIHRvOiB3d3cudmFsZ3JpbmQub3JnCgpJbiB0aGUgYnVnIHJlcG9ydCwgc2VuZCBh
bGwgdGhlIGFib3ZlIHRleHQsIHRoZSB2YWxncmluZAp2ZXJzaW9uLCBhbmQgd2hhdCBPUyBhbmQg
dmVyc2lvbiB5b3UgYXJlIHVzaW5nLiAgVGhhbmtzLgoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>38723</attachid>
            <date>2009-11-30 18:03:00 +0000</date>
            <delta_ts>2009-11-30 18:03:00 +0000</delta_ts>
            <desc>The log of running DRD -v on the supplied program.</desc>
            <filename>worker_vex_test.drd.log</filename>
            <type>text/plain</type>
            <size>11142</size>
            <attacher name="Alexander Potapenko">glider</attacher>
            
              <data encoding="base64">PT02NDE1NT09IGRyZCwgYSB0aHJlYWQgZXJyb3IgZGV0ZWN0b3IKPT02NDE1NT09IENvcHlyaWdo
dCAoQykgMjAwNi0yMDA5LCBhbmQgR05VIEdQTCdkLCBieSBCYXJ0IFZhbiBBc3NjaGUuCj09NjQx
NTU9PSBVc2luZyBWYWxncmluZC0zLjYuMC5TVk4gYW5kIExpYlZFWDsgcmVydW4gd2l0aCAtaCBm
b3IgY29weXJpZ2h0IGluZm8KPT02NDE1NT09IENvbW1hbmQ6IC9Vc2Vycy9nbGlkZXIvc3JjL2No
cm9taXVtL2Nocm9taXVtMi9zcmMvYmFzZS9hLm91dAo9PTY0MTU1PT0gCi0tNjQxNTUtLSBWYWxn
cmluZCBvcHRpb25zOgotLTY0MTU1LS0gICAgLS10b29sPWRyZAotLTY0MTU1LS0gICAgLXYKLS02
NDE1NS0tIENvbnRlbnRzIG9mIC9wcm9jL3ZlcnNpb246Ci0tNjQxNTUtLSAgIGNhbid0IG9wZW4g
L3Byb2MvdmVyc2lvbgotLTY0MTU1LS0gQXJjaCBhbmQgaHdjYXBzOiBYODYsIHg4Ni1zc2UxLXNz
ZTIKLS02NDE1NS0tIFBhZ2Ugc2l6ZXM6IGN1cnJlbnRseSA0MDk2LCBtYXggc3VwcG9ydGVkIDQw
OTYKLS02NDE1NS0tIFZhbGdyaW5kIGxpYnJhcnkgZGlyZWN0b3J5OiAvVXNlcnMvZ2xpZGVyL3Ny
Yy90c2FuLWNocm9taXVtL2FzcGFjZW0tcmVwci92YWxncmluZC9pbnN0L2xpYi92YWxncmluZAot
LTY0MTU1LS0gL1VzZXJzL2dsaWRlci9zcmMvY2hyb21pdW0vY2hyb21pdW0yL3NyYy9iYXNlL2Eu
b3V0ICgweDEwMDApCi0tNjQxNTUtLSAgICByZWFkaW5nIHN5bXMgICBmcm9tIHByaW1hcnkgZmls
ZSAoNTQ0IDIxKQotLTY0MTU1LS0gICAgZFNZTSBkaXJlY3RvcnkgaXMgbWlzc2luZzsgY29uc2lk
ZXIgdXNpbmcgLS1kc3ltdXRpbD15ZXMKLS02NDE1NS0tIC91c3IvbGliL2R5bGQgKDB4OGZlMDAw
MDApCi0tNjQxNTUtLSAgICByZWFkaW5nIHN5bXMgICBmcm9tIHByaW1hcnkgZmlsZSAoMTcgOTgy
KQpkcmRfcHJlX3RocmVhZF9jcmVhdGUKLS02NDE1NS0tIFJlYWRpbmcgc3VwcHJlc3Npb25zIGZp
bGU6IC9Vc2Vycy9nbGlkZXIvc3JjL3RzYW4tY2hyb21pdW0vYXNwYWNlbS1yZXByL3ZhbGdyaW5k
L2luc3QvbGliL3ZhbGdyaW5kL2RlZmF1bHQuc3VwcApkcmRfcG9zdF90aHJlYWRfY3JlYXRlCmxl
YXZpbmcgZHJkX3Bvc3RfdGhyZWFkX2NyZWF0ZQotLTY0MTU1LS0gL1VzZXJzL2dsaWRlci9zcmMv
dHNhbi1jaHJvbWl1bS9hc3BhY2VtLXJlcHIvdmFsZ3JpbmQvaW5zdC9saWIvdmFsZ3JpbmQvdmdw
cmVsb2FkX2NvcmUteDg2LWRhcndpbi5zbyAoMHgyMjAwMCkKLS02NDE1NS0tICAgIHJlYWRpbmcg
c3ltcyAgIGZyb20gcHJpbWFyeSBmaWxlICgzIDYzMykKLS02NDE1NS0tICAgIGRTWU09IC9Vc2Vy
cy9nbGlkZXIvc3JjL3RzYW4tY2hyb21pdW0vYXNwYWNlbS1yZXByL3ZhbGdyaW5kL2luc3QvbGli
L3ZhbGdyaW5kL3ZncHJlbG9hZF9jb3JlLXg4Ni1kYXJ3aW4uc28uZFNZTS9Db250ZW50cy9SZXNv
dXJjZXMvRFdBUkYvdmdwcmVsb2FkX2NvcmUteDg2LWRhcndpbi5zbwotLTY0MTU1LS0gICAgcmVh
ZGluZyBkd2FyZjMgZnJvbSBkc3ltcyBmaWxlCi0tNjQxNTUtLSAvVXNlcnMvZ2xpZGVyL3NyYy90
c2FuLWNocm9taXVtL2FzcGFjZW0tcmVwci92YWxncmluZC9pbnN0L2xpYi92YWxncmluZC92Z3By
ZWxvYWRfZHJkLXg4Ni1kYXJ3aW4uc28gKDB4MmMwMDApCi0tNjQxNTUtLSAgICByZWFkaW5nIHN5
bXMgICBmcm9tIHByaW1hcnkgZmlsZSAoMTc1IDEzODgpCi0tNjQxNTUtLSAgICBkU1lNPSAvVXNl
cnMvZ2xpZGVyL3NyYy90c2FuLWNocm9taXVtL2FzcGFjZW0tcmVwci92YWxncmluZC9pbnN0L2xp
Yi92YWxncmluZC92Z3ByZWxvYWRfZHJkLXg4Ni1kYXJ3aW4uc28uZFNZTS9Db250ZW50cy9SZXNv
dXJjZXMvRFdBUkYvdmdwcmVsb2FkX2RyZC14ODYtZGFyd2luLnNvCi0tNjQxNTUtLSAgICByZWFk
aW5nIGR3YXJmMyBmcm9tIGRzeW1zIGZpbGUKLS02NDE1NS0tIC9TeXN0ZW0vTGlicmFyeS9GcmFt
ZXdvcmtzL0ZvdW5kYXRpb24uZnJhbWV3b3JrL1ZlcnNpb25zL0MvRm91bmRhdGlvbiAoMHgzZGEw
MDApCi0tNjQxNTUtLSAgICByZWFkaW5nIHN5bXMgICBmcm9tIHByaW1hcnkgZmlsZSAoMTM0NiA5
NTQ2KQotLTY0MTU1LS0gL3Vzci9saWIvbGlic3RkYysrLjYuMC40LmR5bGliICgweGFlMDAwKQot
LTY0MTU1LS0gICAgcmVhZGluZyBzeW1zICAgZnJvbSBwcmltYXJ5IGZpbGUgKDMyNzYgMCkKLS02
NDE1NS0tIC91c3IvbGliL2xpYmdjY19zLjEuZHlsaWIgKDB4NDcwMDApCi0tNjQxNTUtLSAgICBy
ZWFkaW5nIHN5bXMgICBmcm9tIHByaW1hcnkgZmlsZSAoODUgMCkKLS02NDE1NS0tIC91c3IvbGli
L2xpYlN5c3RlbS5CLmR5bGliICgweDdiNDAwMCkKLS02NDE1NS0tICAgIHJlYWRpbmcgc3ltcyAg
IGZyb20gcHJpbWFyeSBmaWxlICg0MDM3IDM1MDgpCi0tNjQxNTUtLSAvdXNyL2xpYi9saWJvYmpj
LkEuZHlsaWIgKDB4OWFhMDAwKQotLTY0MTU1LS0gICAgcmVhZGluZyBzeW1zICAgZnJvbSBwcmlt
YXJ5IGZpbGUgKDI0MiA2MzApCi0tNjQxNTUtLSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9D
b3JlRm91bmRhdGlvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db3JlRm91bmRhdGlvbiAoMHhhZmMw
MDApCi0tNjQxNTUtLSAgICByZWFkaW5nIHN5bXMgICBmcm9tIHByaW1hcnkgZmlsZSAoMTY1MyAy
NTczKQotLTY0MTU1LS0gL3Vzci9saWIvbGliaWN1Y29yZS5BLmR5bGliICgweGQyNzAwMCkKLS02
NDE1NS0tICAgIHJlYWRpbmcgc3ltcyAgIGZyb20gcHJpbWFyeSBmaWxlICgzNDgyIDApCi0tNjQx
NTUtLSAvdXNyL2xpYi9saWJ4bWwyLjIuZHlsaWIgKDB4ZWI0MDAwKQotLTY0MTU1LS0gICAgcmVh
ZGluZyBzeW1zICAgZnJvbSBwcmltYXJ5IGZpbGUgKDE1OTkgMCkKLS02NDE1NS0tIC91c3IvbGli
L2xpYnouMS4yLjMuZHlsaWIgKDB4MWY2MDAwKQotLTY0MTU1LS0gICAgcmVhZGluZyBzeW1zICAg
ZnJvbSBwcmltYXJ5IGZpbGUgKDU4IDYzKQotLTY0MTU1LS0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1l
d29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvQ0ZOZXR3
b3JrLmZyYW1ld29yay9WZXJzaW9ucy9BL0NGTmV0d29yayAoMHhmYzIwMDApCi0tNjQxNTUtLSAg
ICByZWFkaW5nIHN5bXMgICBmcm9tIHByaW1hcnkgZmlsZSAoNjA3IDQ4MTUpCi0tNjQxNTUtLSAv
U3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9TeXN0ZW1Db25maWd1cmF0aW9uLmZyYW1ld29yay9W
ZXJzaW9ucy9BL1N5c3RlbUNvbmZpZ3VyYXRpb24gKDB4MjBhMDAwKQotLTY0MTU1LS0gICAgcmVh
ZGluZyBzeW1zICAgZnJvbSBwcmltYXJ5IGZpbGUgKDY2NyA0NTIpCi0tNjQxNTUtLSAvU3lzdGVt
L0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ29y
ZVNlcnZpY2VzICgweDU0MDAwKQotLTY0MTU1LS0gICAgcmVhZGluZyBzeW1zICAgZnJvbSBwcmlt
YXJ5IGZpbGUgKDMwNCA0KQotLTY0MTU1LS0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvU2Vj
dXJpdHkuZnJhbWV3b3JrL1ZlcnNpb25zL0EvU2VjdXJpdHkgKDB4MTBlMjAwMCkKLS02NDE1NS0t
ICAgIHJlYWRpbmcgc3ltcyAgIGZyb20gcHJpbWFyeSBmaWxlICgxMzA0IDExOTg0KQotLTY0MTU1
LS0gL3Vzci9saWIvbGliYXV0by5keWxpYiAoMHgxM2Y5MDAwKQotLTY0MTU1LS0gICAgcmVhZGlu
ZyBzeW1zICAgZnJvbSBwcmltYXJ5IGZpbGUgKDUxIDQ2NikKLS02NDE1NS0tIC91c3IvbGliL3N5
c3RlbS9saWJtYXRoQ29tbW9uLkEuZHlsaWIgKDB4MTVjMDAwKQotLTY0MTU1LS0gICAgcmVhZGlu
ZyBzeW1zICAgZnJvbSBwcmltYXJ5IGZpbGUgKDMyIDMzKQotLTY0MTU1LS0gL3Vzci9saWIvbGli
c3FsaXRlMy4wLmR5bGliICgweDE0MzIwMDApCi0tNjQxNTUtLSAgICByZWFkaW5nIHN5bXMgICBm
cm9tIHByaW1hcnkgZmlsZSAoMTM2IDQ2MSkKLS02NDE1NS0tIC91c3IvbGliL2xpYnJlc29sdi45
LmR5bGliICgweDE0YzYwMDApCi0tNjQxNTUtLSAgICByZWFkaW5nIHN5bXMgICBmcm9tIHByaW1h
cnkgZmlsZSAoMTk1IDEwNSkKLS02NDE1NS0tIC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0Nv
cmVTZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL0NhcmJvbkNvcmUuZnJh
bWV3b3JrL1ZlcnNpb25zL0EvQ2FyYm9uQ29yZSAoMHgxNGVlMDAwKQotLTY0MTU1LS0gICAgcmVh
ZGluZyBzeW1zICAgZnJvbSBwcmltYXJ5IGZpbGUgKDI0MjIgMzg5MSkKLS02NDE1NS0tIC9TeXN0
ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9G
cmFtZXdvcmtzL01ldGFkYXRhLmZyYW1ld29yay9WZXJzaW9ucy9BL01ldGFkYXRhICgweDE4MzIw
MDApCi0tNjQxNTUtLSAgICByZWFkaW5nIHN5bXMgICBmcm9tIHByaW1hcnkgZmlsZSAoNDQ5IDg0
MikKLS02NDE1NS0tIC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFt
ZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL09TU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25z
L0EvT1NTZXJ2aWNlcyAoMHgxODk3MDAwKQotLTY0MTU1LS0gICAgcmVhZGluZyBzeW1zICAgZnJv
bSBwcmltYXJ5IGZpbGUgKDgwNSA0MDQ4KQotLTY0MTU1LS0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1l
d29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvU2VhcmNo
S2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL1NlYXJjaEtpdCAoMHgxOWI2MDAwKQotLTY0MTU1LS0g
ICAgcmVhZGluZyBzeW1zICAgZnJvbSBwcmltYXJ5IGZpbGUgKDMxMSAzMDAyKQotLTY0MTU1LS0g
L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9u
cy9BL0ZyYW1ld29ya3MvQUUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQUUgKDB4MWE3ODAwMCkKLS02
NDE1NS0tICAgIHJlYWRpbmcgc3ltcyAgIGZyb20gcHJpbWFyeSBmaWxlICgxODAgOTIzKQotLTY0
MTU1LS0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9W
ZXJzaW9ucy9BL0ZyYW1ld29ya3MvTGF1bmNoU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0Ev
TGF1bmNoU2VydmljZXMgKDB4MWFiZjAwMCkKLS02NDE1NS0tICAgIHJlYWRpbmcgc3ltcyAgIGZy
b20gcHJpbWFyeSBmaWxlICg2NzYgMjE3MCkKLS02NDE1NS0tIC9TeXN0ZW0vTGlicmFyeS9GcmFt
ZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL0RpY3Rp
b25hcnlTZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9EaWN0aW9uYXJ5U2VydmljZXMgKDB4
MWI5MTAwMCkKLS02NDE1NS0tICAgIHJlYWRpbmcgc3ltcyAgIGZyb20gcHJpbWFyeSBmaWxlICg3
MCA1MjcpCi0tNjQxNTUtLSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JT0tpdC5mcmFtZXdv
cmsvVmVyc2lvbnMvQS9JT0tpdCAoMHgxYmI5MDAwKQotLTY0MTU1LS0gICAgcmVhZGluZyBzeW1z
ICAgZnJvbSBwcmltYXJ5IGZpbGUgKDEwMjAgOTQyKQotLTY0MTU1LS0gL1N5c3RlbS9MaWJyYXJ5
L0ZyYW1ld29ya3MvRGlza0FyYml0cmF0aW9uLmZyYW1ld29yay9WZXJzaW9ucy9BL0Rpc2tBcmJp
dHJhdGlvbiAoMHgyNjAwMDApCi0tNjQxNTUtLSAgICByZWFkaW5nIHN5bXMgICBmcm9tIHByaW1h
cnkgZmlsZSAoMTMyIDE1NykKLS02NDE1NS0tIC91c3IvbGliL2xpYmJzbS5keWxpYiAoMHgxYzZi
MDAwKQotLTY0MTU1LS0gICAgcmVhZGluZyBzeW1zICAgZnJvbSBwcmltYXJ5IGZpbGUgKDk3IDY2
KQotLTY0MTU1LS0gL3Vzci9saWIvbGlieHNsdC4xLmR5bGliICgweDFjNzkwMDApCi0tNjQxNTUt
LSAgICByZWFkaW5nIHN5bXMgICBmcm9tIHByaW1hcnkgZmlsZSAoMjI4IDApCi0tNjQxNTUtLSBS
RURJUjogMHg3YmNiNmMgKHB0aHJlYWRfbXV0ZXhfbG9jaykgcmVkaXJlY3RlZCB0byAweDMxNjkw
IChwdGhyZWFkX211dGV4X2xvY2spCi0tNjQxNTUtLSBSRURJUjogMHg3YmQ4MDQgKGNhbGxvYykg
cmVkaXJlY3RlZCB0byAweDJjZGRiIChjYWxsb2MpCi0tNjQxNTUtLSBSRURJUjogMHg3YjYwMzUg
KG1hbGxvYykgcmVkaXJlY3RlZCB0byAweDJkZTYwIChtYWxsb2MpCi0tNjQxNTUtLSBSRURJUjog
MHg3YzA3YTMgKHB0aHJlYWRfbXV0ZXhfaW5pdCkgcmVkaXJlY3RlZCB0byAweDM0NWYwIChwdGhy
ZWFkX211dGV4X2luaXQpCi0tNjQxNTUtLSBSRURJUjogMHg3YmNlNzUgKHB0aHJlYWRfbXV0ZXhf
dW5sb2NrKSByZWRpcmVjdGVkIHRvIDB4MzFiZjAgKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKQotLTY0
MTU1LS0gUkVESVI6IDB4N2JkZjIwIChzdHJsZW4pIHJlZGlyZWN0ZWQgdG8gMHgzNTUzMCAoc3Ry
bGVuKQotLTY0MTU1LS0gUkVESVI6IDB4N2JlNGU0IChtYWxsb2NfZGVmYXVsdF96b25lKSByZWRp
cmVjdGVkIHRvIDB4MmM4MGMgKG1hbGxvY19kZWZhdWx0X3pvbmUpCi0tNjQxNTUtLSBSRURJUjog
MHg3YjYwODcgKG1hbGxvY196b25lX21hbGxvYykgcmVkaXJlY3RlZCB0byAweDJkZGE5IChtYWxs
b2Nfem9uZV9tYWxsb2MpCi0tNjQxNTUtLSBSRURJUjogMHg3YmQ4NWQgKG1hbGxvY196b25lX2Nh
bGxvYykgcmVkaXJlY3RlZCB0byAweDJjZDExIChtYWxsb2Nfem9uZV9jYWxsb2MpCi0tNjQxNTUt
LSBSRURJUjogMHg3YmIzMjMgKGZyZWUpIHJlZGlyZWN0ZWQgdG8gMHgyZDcyMyAoZnJlZSkKLS02
NDE1NS0tIFJFRElSOiAweDdiZWM1ZiAobWFsbG9jX3pvbmVfZnJvbV9wdHIpIHJlZGlyZWN0ZWQg
dG8gMHgyYzdmYiAobWFsbG9jX3pvbmVfZnJvbV9wdHIpCi0tNjQxNTUtLSBSRURJUjogMHg3YmY4
OTAgKHJlYWxsb2MpIHJlZGlyZWN0ZWQgdG8gMHgyZTAxNyAocmVhbGxvYykKLS02NDE1NS0tIFJF
RElSOiAweDdiZjk5NiAobWFsbG9jX3pvbmVfcmVhbGxvYykgcmVkaXJlY3RlZCB0byAweDJkZjEw
IChtYWxsb2Nfem9uZV9yZWFsbG9jKQotLTY0MTU1LS0gUkVESVI6IDB4N2JiMzk1IChtYWxsb2Nf
em9uZV9mcmVlKSByZWRpcmVjdGVkIHRvIDB4MmQ2OGQgKG1hbGxvY196b25lX2ZyZWUpCi0tNjQx
NTUtLSBSRURJUjogMHg3YzA2YjIgKG1hbGxvY19zaXplKSByZWRpcmVjdGVkIHRvIDB4MmM5YWUg
KG1hbGxvY19zaXplKQotLTY0MTU1LS0gUkVESVI6IDB4N2Q3ODRjIChwdGhyZWFkX29uY2UpIHJl
ZGlyZWN0ZWQgdG8gMHgzMTMxMCAocHRocmVhZF9vbmNlKQotLTY0MTU1LS0gUkVESVI6IDB4N2Q3
YWNmIChwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KSByZWRpcmVjdGVkIHRvIDB4MzI2ZDAgKHB0aHJl
YWRfY29uZF9icm9hZGNhc3QpCi0tNjQxNTUtLSBSRURJUjogMHhmNDU3NCAob3BlcmF0b3IgbmV3
KHVuc2lnbmVkIGxvbmcpKSByZWRpcmVjdGVkIHRvIDB4MmU4ZTUgKG9wZXJhdG9yIG5ldyh1bnNp
Z25lZCBsb25nKSkKLS02NDE1NS0tIFJFRElSOiAweDdlMDNmMyAocHRocmVhZF9jb25kX2luaXQk
VU5JWDIwMDMpIHJlZGlyZWN0ZWQgdG8gMHgyZjZiMCAocHRocmVhZF9jb25kX2luaXQkKikKLS02
NDE1NS0tIFJFRElSOiAweDdlMDA1MyAocHRocmVhZF9tdXRleF9kZXN0cm95KSByZWRpcmVjdGVk
IHRvIDB4MzE0ZDAgKHB0aHJlYWRfbXV0ZXhfZGVzdHJveSkKMjAwOS0xMS0zMCAyMDowMjowOC4x
MDggYS5vdXRbNjQxNTU6NTBiXSAqKiogX05TQXV0b3JlbGVhc2VOb1Bvb2woKTogT2JqZWN0IDB4
MWNkMmU0MCBvZiBjbGFzcyBfX05TRmFzdEVudW1lcmF0aW9uRW51bWVyYXRvciBhdXRvcmVsZWFz
ZWQgd2l0aCBubyBwb29sIGluIHBsYWNlIC0ganVzdCBsZWFraW5nClN0YWNrOiAoMHg0ZDFmMGYg
MHgzZGU0NDIgMHg0NzQxZDIgMHg0NzQ1OTcgMHgyYzM4IDB4MmFjNCAweDQwMGQgMHg1M2I2IDB4
NTRjOSAweDI4MWEpCjIwMDktMTEtMzAgMjA6MDI6MDguMzU1IGEub3V0WzY0MTU1OjUwYl0gKioq
IF9OU0F1dG9yZWxlYXNlTm9Qb29sKCk6IE9iamVjdCAweDFjZGIxMzAgb2YgY2xhc3MgTlNDRlNl
dCBhdXRvcmVsZWFzZWQgd2l0aCBubyBwb29sIGluIHBsYWNlIC0ganVzdCBsZWFraW5nClN0YWNr
OiAoMHg0ZDFmMGYgMHgzZGU0NDIgMHgzZjZlNjMgMHgzZjZiM2MgMHgzZjY3YjggMHgzZjY0OTMg
MHgzZjYyNDIgMHgzZjVlM2UgMHg0NzQyMGYgMHg0NzQ1OTcgMHgyYzM4IDB4MmFjNCAweDQwMGQg
MHg1M2I2IDB4NTRjOSAweDI4MWEpCjIwMDktMTEtMzAgMjA6MDI6MDguMzkzIGEub3V0WzY0MTU1
OjUwYl0gKioqIF9OU0F1dG9yZWxlYXNlTm9Qb29sKCk6IE9iamVjdCAweDFjZGYzODAgb2YgY2xh
c3MgTlNDRlNldCBhdXRvcmVsZWFzZWQgd2l0aCBubyBwb29sIGluIHBsYWNlIC0ganVzdCBsZWFr
aW5nClN0YWNrOiAoMHg0ZDFmMGYgMHgzZGU0NDIgMHgzZjZlNjMgMHgzZjZiM2MgMHgzZjY3Yjgg
MHgzZjY0OTMgMHgzZjYyNDIgMHgzZjVlM2UgMHg0NzQyMGYgMHg0NzQ1OTcgMHgyYzM4IDB4MmFj
NCAweDQwMGQgMHg1M2I2IDB4NTRjOSAweDI4MWEpCjIwMDktMTEtMzAgMjA6MDI6MDguNDIxIGEu
b3V0WzY0MTU1OjUwYl0gKioqIF9OU0F1dG9yZWxlYXNlTm9Qb29sKCk6IE9iamVjdCAweDFjYzg3
ZDAgb2YgY2xhc3MgVGFza09wZXJhdGlvbiBhdXRvcmVsZWFzZWQgd2l0aCBubyBwb29sIGluIHBs
YWNlIC0ganVzdCBsZWFraW5nClN0YWNrOiAoMHg0ZDFmMGYgMHgzZGU0NDIgMHgyYWRhIDB4NDAw
ZCAweDUzYjYgMHg1NGM5IDB4MjgxYSkKCmRyZDogZHJkX3RocmVhZC5jOjU4NCAodmdEcmRfdGhy
ZWFkX3NldF92Z19ydW5uaW5nX3RpZCk6IEFzc2VydGlvbiAndmdfdGlkICE9IFZHX0lOVkFMSURf
VEhSRUFESUQnIGZhaWxlZC4KPT02NDE1NT09ICAgIGF0IDB4RjAwOURDNkQ6ID8/Pwo9PTY0MTU1
PT0gICAgYnkgMHhGMDA5REYyMTogPz8/Cj09NjQxNTU9PSAgICBieSAweEYwMDhCNTg1OiA/Pz8K
PT02NDE1NT09ICAgIGJ5IDB4RjAwOTNEMzg6ID8/Pwo9PTY0MTU1PT0gICAgYnkgMHhGMDEyMkQ4
MzogPz8/CgpzY2hlZCBzdGF0dXM6CiAgcnVubmluZ190aWQ9MAoKVGhyZWFkIDE6IHN0YXR1cyA9
IFZnVHNfV2FpdFN5cwo9PTY0MTU1PT0gICAgYXQgMHg3QjUyODY6IG1hY2hfbXNnX3RyYXAgKGlu
IC91c3IvbGliL2xpYlN5c3RlbS5CLmR5bGliKQo9PTY0MTU1PT0gICAgYnkgMHg3REQ3NTQ6IF9u
b3RpZnlfc2VydmVyX3JlZ2lzdGVyX3BsYWluIChpbiAvdXNyL2xpYi9saWJTeXN0ZW0uQi5keWxp
YikKPT02NDE1NT09ICAgIGJ5IDB4N0RENjVCOiBub3RpZnlfcmVnaXN0ZXJfcGxhaW4gKGluIC91
c3IvbGliL2xpYlN5c3RlbS5CLmR5bGliKQo9PTY0MTU1PT0gICAgYnkgMHg3RTFEMjI6IF9hc2xf
bm90aWZ5X29wZW4gKGluIC91c3IvbGliL2xpYlN5c3RlbS5CLmR5bGliKQo9PTY0MTU1PT0gICAg
YnkgMHg3RTFBQUM6IGFzbF9vcGVuIChpbiAvdXNyL2xpYi9saWJTeXN0ZW0uQi5keWxpYikKPT02
NDE1NT09ICAgIGJ5IDB4QkNDNDczOiBfX0NGTG9nQ1N0cmluZyAoaW4gL1N5c3RlbS9MaWJyYXJ5
L0ZyYW1ld29ya3MvQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ29yZUZvdW5k
YXRpb24pCj09NjQxNTU9PSAgICBieSAweEJDQzlFQTogX0NGTG9ndkV4IChpbiAvU3lzdGVtL0xp
YnJhcnkvRnJhbWV3b3Jrcy9Db3JlRm91bmRhdGlvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db3Jl
Rm91bmRhdGlvbikKPT02NDE1NT09ICAgIGJ5IDB4NDAyQzZEOiBOU0xvZ3YgKGluIC9TeXN0ZW0v
TGlicmFyeS9GcmFtZXdvcmtzL0ZvdW5kYXRpb24uZnJhbWV3b3JrL1ZlcnNpb25zL0MvRm91bmRh
dGlvbikKPT02NDE1NT09ICAgIGJ5IDB4NDYyMUVBOiBOU0xvZyAoaW4gL1N5c3RlbS9MaWJyYXJ5
L0ZyYW1ld29ya3MvRm91bmRhdGlvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQy9Gb3VuZGF0aW9uKQo9
PTY0MTU1PT0gICAgYnkgMHg0RDFGM0E6IF9OU0F1dG9yZWxlYXNlTm9Qb29sIChpbiAvU3lzdGVt
L0xpYnJhcnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1ld29yay9WZXJzaW9ucy9DL0ZvdW5k
YXRpb24pCj09NjQxNTU9PSAgICBieSAweDNERTQ0MTogLVtOU09iamVjdChOU09iamVjdCkgYXV0
b3JlbGVhc2VdIChpbiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1l
d29yay9WZXJzaW9ucy9DL0ZvdW5kYXRpb24pCj09NjQxNTU9PSAgICBieSAweDJBRDk6ICtbVGFz
a09wZXJhdGlvbiB0YXNrT3BlcmF0aW9uV2l0aFRhc2s6XSAoaW4gL1VzZXJzL2dsaWRlci9zcmMv
Y2hyb21pdW0vY2hyb21pdW0yL3NyYy9iYXNlL2Eub3V0KQo9PTY0MTU1PT0gICAgYnkgMHg0MDBD
OiBXb3JrZXJQb29sOjpQb3N0VGFzayh0cmFja2VkX29iamVjdHM6OkxvY2F0aW9uIGNvbnN0Jiwg
VGFzayosIGJvb2wpIChpbiAvVXNlcnMvZ2xpZGVyL3NyYy9jaHJvbWl1bS9jaHJvbWl1bTIvc3Jj
L2Jhc2UvYS5vdXQpCj09NjQxNTU9PSAgICBieSAweDU0MzI6IFdvcmtlclBvb2xUZXN0X1Bvc3RU
YXNrKCkgKGluIC9Vc2Vycy9nbGlkZXIvc3JjL2Nocm9taXVtL2Nocm9taXVtMi9zcmMvYmFzZS9h
Lm91dCkKPT02NDE1NT09ICAgIGJ5IDB4NTRDODogbWFpbiAoaW4gL1VzZXJzL2dsaWRlci9zcmMv
Y2hyb21pdW0vY2hyb21pdW0yL3NyYy9iYXNlL2Eub3V0KQoKVGhyZWFkIDI6IHN0YXR1cyA9IFZn
VHNfSW5pdAo9PTY0MTU1PT0gICAgYXQgMHg4MUUyQTQ6IHN0YXJ0X3dxdGhyZWFkIChpbiAvdXNy
L2xpYi9saWJTeXN0ZW0uQi5keWxpYikKCgpOb3RlOiBzZWUgYWxzbyB0aGUgRkFRIGluIHRoZSBz
b3VyY2UgZGlzdHJpYnV0aW9uLgpJdCBjb250YWlucyB3b3JrYXJvdW5kcyB0byBzZXZlcmFsIGNv
bW1vbiBwcm9ibGVtcy4KSW4gcGFydGljdWxhciwgaWYgVmFsZ3JpbmQgYWJvcnRlZCBvciBjcmFz
aGVkIGFmdGVyCmlkZW50aWZ5aW5nIHByb2JsZW1zIGluIHlvdXIgcHJvZ3JhbSwgdGhlcmUncyBh
IGdvb2QgY2hhbmNlCnRoYXQgZml4aW5nIHRob3NlIHByb2JsZW1zIHdpbGwgcHJldmVudCBWYWxn
cmluZCBhYm9ydGluZyBvcgpjcmFzaGluZywgZXNwZWNpYWxseSBpZiBpdCBoYXBwZW5lZCBpbiBt
X21hbGxvY2ZyZWUuYy4KCklmIHRoYXQgZG9lc24ndCBoZWxwLCBwbGVhc2UgcmVwb3J0IHRoaXMg
YnVnIHRvOiB3d3cudmFsZ3JpbmQub3JnCgpJbiB0aGUgYnVnIHJlcG9ydCwgc2VuZCBhbGwgdGhl
IGFib3ZlIHRleHQsIHRoZSB2YWxncmluZAp2ZXJzaW9uLCBhbmQgd2hhdCBPUyBhbmQgdmVyc2lv
biB5b3UgYXJlIHVzaW5nLiAgVGhhbmtzLgoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>38724</attachid>
            <date>2009-11-30 18:04:13 +0000</date>
            <delta_ts>2009-11-30 18:04:13 +0000</delta_ts>
            <desc>The log of running Helgrind -v on the supplied program.</desc>
            <filename>worker_vex_test.helgrind.log</filename>
            <type>text/plain</type>
            <size>11212</size>
            <attacher name="Alexander Potapenko">glider</attacher>
            
              <data encoding="base64">PT02NDE1Mz09IEhlbGdyaW5kLCBhIHRocmVhZCBlcnJvciBkZXRlY3Rvcgo9PTY0MTUzPT0gQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMDksIGFuZCBHTlUgR1BMJ2QsIGJ5IE9wZW5Xb3JrcyBMTFAgZXQg
YWwuCj09NjQxNTM9PSBVc2luZyBWYWxncmluZC0zLjYuMC5TVk4gYW5kIExpYlZFWDsgcmVydW4g
d2l0aCAtaCBmb3IgY29weXJpZ2h0IGluZm8KPT02NDE1Mz09IENvbW1hbmQ6IC9Vc2Vycy9nbGlk
ZXIvc3JjL2Nocm9taXVtL2Nocm9taXVtMi9zcmMvYmFzZS9hLm91dAo9PTY0MTUzPT0gCi0tNjQx
NTMtLSBWYWxncmluZCBvcHRpb25zOgotLTY0MTUzLS0gICAgLS10b29sPWhlbGdyaW5kCi0tNjQx
NTMtLSAgICAtdgotLTY0MTUzLS0gQ29udGVudHMgb2YgL3Byb2MvdmVyc2lvbjoKLS02NDE1My0t
ICAgY2FuJ3Qgb3BlbiAvcHJvYy92ZXJzaW9uCi0tNjQxNTMtLSBBcmNoIGFuZCBod2NhcHM6IFg4
NiwgeDg2LXNzZTEtc3NlMgotLTY0MTUzLS0gUGFnZSBzaXplczogY3VycmVudGx5IDQwOTYsIG1h
eCBzdXBwb3J0ZWQgNDA5NgotLTY0MTUzLS0gVmFsZ3JpbmQgbGlicmFyeSBkaXJlY3Rvcnk6IC9V
c2Vycy9nbGlkZXIvc3JjL3RzYW4tY2hyb21pdW0vYXNwYWNlbS1yZXByL3ZhbGdyaW5kL2luc3Qv
bGliL3ZhbGdyaW5kCi0tNjQxNTMtLSAvVXNlcnMvZ2xpZGVyL3NyYy9jaHJvbWl1bS9jaHJvbWl1
bTIvc3JjL2Jhc2UvYS5vdXQgKDB4MTAwMCkKLS02NDE1My0tICAgIHJlYWRpbmcgc3ltcyAgIGZy
b20gcHJpbWFyeSBmaWxlICg1NDQgMjEpCi0tNjQxNTMtLSAgICBkU1lNIGRpcmVjdG9yeSBpcyBt
aXNzaW5nOyBjb25zaWRlciB1c2luZyAtLWRzeW11dGlsPXllcwotLTY0MTUzLS0gL3Vzci9saWIv
ZHlsZCAoMHg4ZmUwMDAwMCkKLS02NDE1My0tICAgIHJlYWRpbmcgc3ltcyAgIGZyb20gcHJpbWFy
eSBmaWxlICgxNyA5ODIpCi0tNjQxNTMtLSBSZWFkaW5nIHN1cHByZXNzaW9ucyBmaWxlOiAvVXNl
cnMvZ2xpZGVyL3NyYy90c2FuLWNocm9taXVtL2FzcGFjZW0tcmVwci92YWxncmluZC9pbnN0L2xp
Yi92YWxncmluZC9kZWZhdWx0LnN1cHAKLS02NDE1My0tIC9Vc2Vycy9nbGlkZXIvc3JjL3RzYW4t
Y2hyb21pdW0vYXNwYWNlbS1yZXByL3ZhbGdyaW5kL2luc3QvbGliL3ZhbGdyaW5kL3ZncHJlbG9h
ZF9jb3JlLXg4Ni1kYXJ3aW4uc28gKDB4MjIwMDApCi0tNjQxNTMtLSAgICByZWFkaW5nIHN5bXMg
ICBmcm9tIHByaW1hcnkgZmlsZSAoMyA2MzMpCi0tNjQxNTMtLSAgICBkU1lNPSAvVXNlcnMvZ2xp
ZGVyL3NyYy90c2FuLWNocm9taXVtL2FzcGFjZW0tcmVwci92YWxncmluZC9pbnN0L2xpYi92YWxn
cmluZC92Z3ByZWxvYWRfY29yZS14ODYtZGFyd2luLnNvLmRTWU0vQ29udGVudHMvUmVzb3VyY2Vz
L0RXQVJGL3ZncHJlbG9hZF9jb3JlLXg4Ni1kYXJ3aW4uc28KLS02NDE1My0tICAgIHJlYWRpbmcg
ZHdhcmYzIGZyb20gZHN5bXMgZmlsZQotLTY0MTUzLS0gL1VzZXJzL2dsaWRlci9zcmMvdHNhbi1j
aHJvbWl1bS9hc3BhY2VtLXJlcHIvdmFsZ3JpbmQvaW5zdC9saWIvdmFsZ3JpbmQvdmdwcmVsb2Fk
X2hlbGdyaW5kLXg4Ni1kYXJ3aW4uc28gKDB4MmMwMDApCi0tNjQxNTMtLSAgICByZWFkaW5nIHN5
bXMgICBmcm9tIHByaW1hcnkgZmlsZSAoMTA4IDExMTQpCi0tNjQxNTMtLSAgICBkU1lNPSAvVXNl
cnMvZ2xpZGVyL3NyYy90c2FuLWNocm9taXVtL2FzcGFjZW0tcmVwci92YWxncmluZC9pbnN0L2xp
Yi92YWxncmluZC92Z3ByZWxvYWRfaGVsZ3JpbmQteDg2LWRhcndpbi5zby5kU1lNL0NvbnRlbnRz
L1Jlc291cmNlcy9EV0FSRi92Z3ByZWxvYWRfaGVsZ3JpbmQteDg2LWRhcndpbi5zbwotLTY0MTUz
LS0gICAgcmVhZGluZyBkd2FyZjMgZnJvbSBkc3ltcyBmaWxlCi0tNjQxNTMtLSAvU3lzdGVtL0xp
YnJhcnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1ld29yay9WZXJzaW9ucy9DL0ZvdW5kYXRp
b24gKDB4M2RhMDAwKQotLTY0MTUzLS0gICAgcmVhZGluZyBzeW1zICAgZnJvbSBwcmltYXJ5IGZp
bGUgKDEzNDYgOTU0NikKLS02NDE1My0tIC91c3IvbGliL2xpYnN0ZGMrKy42LjAuNC5keWxpYiAo
MHhhZTAwMCkKLS02NDE1My0tICAgIHJlYWRpbmcgc3ltcyAgIGZyb20gcHJpbWFyeSBmaWxlICgz
Mjc2IDApCi0tNjQxNTMtLSAvdXNyL2xpYi9saWJnY2Nfcy4xLmR5bGliICgweDQxMDAwKQotLTY0
MTUzLS0gICAgcmVhZGluZyBzeW1zICAgZnJvbSBwcmltYXJ5IGZpbGUgKDg1IDApCi0tNjQxNTMt
LSAvdXNyL2xpYi9saWJTeXN0ZW0uQi5keWxpYiAoMHg3YjQwMDApCi0tNjQxNTMtLSAgICByZWFk
aW5nIHN5bXMgICBmcm9tIHByaW1hcnkgZmlsZSAoNDAzNyAzNTA4KQotLTY0MTUzLS0gL3Vzci9s
aWIvbGlib2JqYy5BLmR5bGliICgweDlhYTAwMCkKLS02NDE1My0tICAgIHJlYWRpbmcgc3ltcyAg
IGZyb20gcHJpbWFyeSBmaWxlICgyNDIgNjMwKQotLTY0MTUzLS0gL1N5c3RlbS9MaWJyYXJ5L0Zy
YW1ld29ya3MvQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ29yZUZvdW5kYXRp
b24gKDB4YWZjMDAwKQotLTY0MTUzLS0gICAgcmVhZGluZyBzeW1zICAgZnJvbSBwcmltYXJ5IGZp
bGUgKDE2NTMgMjU3MykKLS02NDE1My0tIC91c3IvbGliL2xpYmljdWNvcmUuQS5keWxpYiAoMHhk
MjcwMDApCi0tNjQxNTMtLSAgICByZWFkaW5nIHN5bXMgICBmcm9tIHByaW1hcnkgZmlsZSAoMzQ4
MiAwKQotLTY0MTUzLS0gL3Vzci9saWIvbGlieG1sMi4yLmR5bGliICgweGViNDAwMCkKLS02NDE1
My0tICAgIHJlYWRpbmcgc3ltcyAgIGZyb20gcHJpbWFyeSBmaWxlICgxNTk5IDApCi0tNjQxNTMt
LSAvdXNyL2xpYi9saWJ6LjEuMi4zLmR5bGliICgweDFmNjAwMCkKLS02NDE1My0tICAgIHJlYWRp
bmcgc3ltcyAgIGZyb20gcHJpbWFyeSBmaWxlICg1OCA2MykKLS02NDE1My0tIC9TeXN0ZW0vTGli
cmFyeS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdv
cmtzL0NGTmV0d29yay5mcmFtZXdvcmsvVmVyc2lvbnMvQS9DRk5ldHdvcmsgKDB4ZmMyMDAwKQot
LTY0MTUzLS0gICAgcmVhZGluZyBzeW1zICAgZnJvbSBwcmltYXJ5IGZpbGUgKDYwNyA0ODE1KQot
LTY0MTUzLS0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvU3lzdGVtQ29uZmlndXJhdGlvbi5m
cmFtZXdvcmsvVmVyc2lvbnMvQS9TeXN0ZW1Db25maWd1cmF0aW9uICgweDIwYTAwMCkKLS02NDE1
My0tICAgIHJlYWRpbmcgc3ltcyAgIGZyb20gcHJpbWFyeSBmaWxlICg2NjcgNDUyKQotLTY0MTUz
LS0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9WZXJz
aW9ucy9BL0NvcmVTZXJ2aWNlcyAoMHg0ZTAwMCkKLS02NDE1My0tICAgIHJlYWRpbmcgc3ltcyAg
IGZyb20gcHJpbWFyeSBmaWxlICgzMDQgNCkKLS02NDE1My0tIC9TeXN0ZW0vTGlicmFyeS9GcmFt
ZXdvcmtzL1NlY3VyaXR5LmZyYW1ld29yay9WZXJzaW9ucy9BL1NlY3VyaXR5ICgweDEwZTIwMDAp
Ci0tNjQxNTMtLSAgICByZWFkaW5nIHN5bXMgICBmcm9tIHByaW1hcnkgZmlsZSAoMTMwNCAxMTk4
NCkKLS02NDE1My0tIC91c3IvbGliL2xpYmF1dG8uZHlsaWIgKDB4MTNmOTAwMCkKLS02NDE1My0t
ICAgIHJlYWRpbmcgc3ltcyAgIGZyb20gcHJpbWFyeSBmaWxlICg1MSA0NjYpCi0tNjQxNTMtLSAv
dXNyL2xpYi9zeXN0ZW0vbGlibWF0aENvbW1vbi5BLmR5bGliICgweDU2MDAwKQotLTY0MTUzLS0g
ICAgcmVhZGluZyBzeW1zICAgZnJvbSBwcmltYXJ5IGZpbGUgKDMyIDMzKQotLTY0MTUzLS0gL3Vz
ci9saWIvbGlic3FsaXRlMy4wLmR5bGliICgweDE0MzIwMDApCi0tNjQxNTMtLSAgICByZWFkaW5n
IHN5bXMgICBmcm9tIHByaW1hcnkgZmlsZSAoMTM2IDQ2MSkKLS02NDE1My0tIC91c3IvbGliL2xp
YnJlc29sdi45LmR5bGliICgweDE0YzYwMDApCi0tNjQxNTMtLSAgICByZWFkaW5nIHN5bXMgICBm
cm9tIHByaW1hcnkgZmlsZSAoMTk1IDEwNSkKLS02NDE1My0tIC9TeXN0ZW0vTGlicmFyeS9GcmFt
ZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL0NhcmJv
bkNvcmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ2FyYm9uQ29yZSAoMHgxNGVlMDAwKQotLTY0MTUz
LS0gICAgcmVhZGluZyBzeW1zICAgZnJvbSBwcmltYXJ5IGZpbGUgKDI0MjIgMzg5MSkKLS02NDE1
My0tIC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvVmVy
c2lvbnMvQS9GcmFtZXdvcmtzL01ldGFkYXRhLmZyYW1ld29yay9WZXJzaW9ucy9BL01ldGFkYXRh
ICgweDE4MzIwMDApCi0tNjQxNTMtLSAgICByZWFkaW5nIHN5bXMgICBmcm9tIHByaW1hcnkgZmls
ZSAoNDQ5IDg0MikKLS02NDE1My0tIC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVTZXJ2
aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL09TU2VydmljZXMuZnJhbWV3b3Jr
L1ZlcnNpb25zL0EvT1NTZXJ2aWNlcyAoMHgxODk3MDAwKQotLTY0MTUzLS0gICAgcmVhZGluZyBz
eW1zICAgZnJvbSBwcmltYXJ5IGZpbGUgKDgwNSA0MDQ4KQotLTY0MTUzLS0gL1N5c3RlbS9MaWJy
YXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29y
a3MvU2VhcmNoS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL1NlYXJjaEtpdCAoMHgxOWI2MDAwKQot
LTY0MTUzLS0gICAgcmVhZGluZyBzeW1zICAgZnJvbSBwcmltYXJ5IGZpbGUgKDMxMSAzMDAyKQot
LTY0MTUzLS0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29y
ay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvQUUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQUUgKDB4MWE3
ODAwMCkKLS02NDE1My0tICAgIHJlYWRpbmcgc3ltcyAgIGZyb20gcHJpbWFyeSBmaWxlICgxODAg
OTIzKQotLTY0MTUzLS0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2VzLmZy
YW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvTGF1bmNoU2VydmljZXMuZnJhbWV3b3JrL1Zl
cnNpb25zL0EvTGF1bmNoU2VydmljZXMgKDB4MWFiZjAwMCkKLS02NDE1My0tICAgIHJlYWRpbmcg
c3ltcyAgIGZyb20gcHJpbWFyeSBmaWxlICg2NzYgMjE3MCkKLS02NDE1My0tIC9TeXN0ZW0vTGli
cmFyeS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdv
cmtzL0RpY3Rpb25hcnlTZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9EaWN0aW9uYXJ5U2Vy
dmljZXMgKDB4MWI5MTAwMCkKLS02NDE1My0tICAgIHJlYWRpbmcgc3ltcyAgIGZyb20gcHJpbWFy
eSBmaWxlICg3MCA1MjcpCi0tNjQxNTMtLSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JT0tp
dC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9JT0tpdCAoMHgxYmI5MDAwKQotLTY0MTUzLS0gICAgcmVh
ZGluZyBzeW1zICAgZnJvbSBwcmltYXJ5IGZpbGUgKDEwMjAgOTQyKQotLTY0MTUzLS0gL1N5c3Rl
bS9MaWJyYXJ5L0ZyYW1ld29ya3MvRGlza0FyYml0cmF0aW9uLmZyYW1ld29yay9WZXJzaW9ucy9B
L0Rpc2tBcmJpdHJhdGlvbiAoMHgyNjAwMDApCi0tNjQxNTMtLSAgICByZWFkaW5nIHN5bXMgICBm
cm9tIHByaW1hcnkgZmlsZSAoMTMyIDE1NykKLS02NDE1My0tIC91c3IvbGliL2xpYmJzbS5keWxp
YiAoMHgxYzZiMDAwKQotLTY0MTUzLS0gICAgcmVhZGluZyBzeW1zICAgZnJvbSBwcmltYXJ5IGZp
bGUgKDk3IDY2KQotLTY0MTUzLS0gL3Vzci9saWIvbGlieHNsdC4xLmR5bGliICgweDFjNzkwMDAp
Ci0tNjQxNTMtLSAgICByZWFkaW5nIHN5bXMgICBmcm9tIHByaW1hcnkgZmlsZSAoMjI4IDApCi0t
NjQxNTMtLSBSRURJUjogMHg3YmIzMDAgKG1lbWNweSkgcmVkaXJlY3RlZCB0byAweDMxMGViICht
ZW1jcHkpCi0tNjQxNTMtLSBSRURJUjogMHg3YmNiNmMgKHB0aHJlYWRfbXV0ZXhfbG9jaykgcmVk
aXJlY3RlZCB0byAweDJmYjNmIChwdGhyZWFkX211dGV4X2xvY2spCi0tNjQxNTMtLSBSRURJUjog
MHg3YmQ4MDQgKGNhbGxvYykgcmVkaXJlY3RlZCB0byAweDJkNTFiIChjYWxsb2MpCi0tNjQxNTMt
LSBSRURJUjogMHg3YjYwMzUgKG1hbGxvYykgcmVkaXJlY3RlZCB0byAweDJlNWEwIChtYWxsb2Mp
Ci0tNjQxNTMtLSBSRURJUjogMHg3YzA3YTMgKHB0aHJlYWRfbXV0ZXhfaW5pdCkgcmVkaXJlY3Rl
ZCB0byAweDMxZGU5IChwdGhyZWFkX211dGV4X2luaXQpCi0tNjQxNTMtLSBSRURJUjogMHg3YmNl
NzUgKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKSByZWRpcmVjdGVkIHRvIDB4MmZlZmEgKHB0aHJlYWRf
bXV0ZXhfdW5sb2NrKQotLTY0MTUzLS0gUkVESVI6IDB4N2JkZjIwIChzdHJsZW4pIHJlZGlyZWN0
ZWQgdG8gMHgzMTA1MiAoc3RybGVuKQotLTY0MTUzLS0gUkVESVI6IDB4N2JkZjcwIChzdHJjbXAp
IHJlZGlyZWN0ZWQgdG8gMHgzMTA5OSAoc3RyY21wKQotLTY0MTUzLS0gUkVESVI6IDB4N2JlNGU0
IChtYWxsb2NfZGVmYXVsdF96b25lKSByZWRpcmVjdGVkIHRvIDB4MmNmNGMgKG1hbGxvY19kZWZh
dWx0X3pvbmUpCi0tNjQxNTMtLSBSRURJUjogMHg3YjYwODcgKG1hbGxvY196b25lX21hbGxvYykg
cmVkaXJlY3RlZCB0byAweDJlNGU5IChtYWxsb2Nfem9uZV9tYWxsb2MpCi0tNjQxNTMtLSBSRURJ
UjogMHg3YmQ4NWQgKG1hbGxvY196b25lX2NhbGxvYykgcmVkaXJlY3RlZCB0byAweDJkNDUxICht
YWxsb2Nfem9uZV9jYWxsb2MpCi0tNjQxNTMtLSBSRURJUjogMHg3YmIzMjMgKGZyZWUpIHJlZGly
ZWN0ZWQgdG8gMHgyZGU2MyAoZnJlZSkKLS02NDE1My0tIFJFRElSOiAweDdiZWM1ZiAobWFsbG9j
X3pvbmVfZnJvbV9wdHIpIHJlZGlyZWN0ZWQgdG8gMHgyY2YzYiAobWFsbG9jX3pvbmVfZnJvbV9w
dHIpCi0tNjQxNTMtLSBSRURJUjogMHg3YmY4OTAgKHJlYWxsb2MpIHJlZGlyZWN0ZWQgdG8gMHgy
ZTc1NyAocmVhbGxvYykKLS02NDE1My0tIFJFRElSOiAweDdiZjk5NiAobWFsbG9jX3pvbmVfcmVh
bGxvYykgcmVkaXJlY3RlZCB0byAweDJlNjUwIChtYWxsb2Nfem9uZV9yZWFsbG9jKQotLTY0MTUz
LS0gUkVESVI6IDB4N2JiMzk1IChtYWxsb2Nfem9uZV9mcmVlKSByZWRpcmVjdGVkIHRvIDB4MmRk
Y2QgKG1hbGxvY196b25lX2ZyZWUpCi0tNjQxNTMtLSBSRURJUjogMHg3YzA2YjIgKG1hbGxvY19z
aXplKSByZWRpcmVjdGVkIHRvIDB4MmQwZWUgKG1hbGxvY19zaXplKQotLTY0MTUzLS0gUkVESVI6
IDB4N2RlMjQxIChzdHJjaHIpIHJlZGlyZWN0ZWQgdG8gMHgzMGZmYSAoc3RyY2hyKQotLTY0MTUz
LS0gUkVESVI6IDB4N2RmODUwIChzdHJjcHkpIHJlZGlyZWN0ZWQgdG8gMHgzMTA3MCAoc3RyY3B5
KQotLTY0MTUzLS0gUkVESVI6IDB4N2Q3YWNmIChwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KSByZWRp
cmVjdGVkIHRvIDB4MzAxMjkgKHB0aHJlYWRfY29uZF9icm9hZGNhc3QpCi0tNjQxNTMtLSBSRURJ
UjogMHhmNDU3NCAob3BlcmF0b3IgbmV3KHVuc2lnbmVkIGxvbmcpKSByZWRpcmVjdGVkIHRvIDB4
MmYwMjUgKG9wZXJhdG9yIG5ldyh1bnNpZ25lZCBsb25nKSkKLS02NDE1My0tIFJFRElSOiAweDdl
MDA1MyAocHRocmVhZF9tdXRleF9kZXN0cm95KSByZWRpcmVjdGVkIHRvIDB4MmZhNDggKHB0aHJl
YWRfbXV0ZXhfZGVzdHJveSkKMjAwOS0xMS0zMCAyMDowMTozNS40NDUgYS5vdXRbNjQxNTM6NTBi
XSAqKiogX05TQXV0b3JlbGVhc2VOb1Bvb2woKTogT2JqZWN0IDB4MWNkYzEwMCBvZiBjbGFzcyBf
X05TRmFzdEVudW1lcmF0aW9uRW51bWVyYXRvciBhdXRvcmVsZWFzZWQgd2l0aCBubyBwb29sIGlu
IHBsYWNlIC0ganVzdCBsZWFraW5nClN0YWNrOiAoMHg0ZDFmMGYgMHgzZGU0NDIgMHg0NzQxZDIg
MHg0NzQ1OTcgMHgyYzM4IDB4MmFjNCAweDQwMGQgMHg1M2I2IDB4NTRjOSAweDI4MWEpCjIwMDkt
MTEtMzAgMjA6MDE6MzUuNzI3IGEub3V0WzY0MTUzOjUwYl0gKioqIF9OU0F1dG9yZWxlYXNlTm9Q
b29sKCk6IE9iamVjdCAweDFjZjAyYjAgb2YgY2xhc3MgTlNDRlNldCBhdXRvcmVsZWFzZWQgd2l0
aCBubyBwb29sIGluIHBsYWNlIC0ganVzdCBsZWFraW5nClN0YWNrOiAoMHg0ZDFmMGYgMHgzZGU0
NDIgMHgzZjZlNjMgMHgzZjZiM2MgMHgzZjY3YjggMHgzZjY0OTMgMHgzZjYyNDIgMHgzZjVlM2Ug
MHg0NzQyMGYgMHg0NzQ1OTcgMHgyYzM4IDB4MmFjNCAweDQwMGQgMHg1M2I2IDB4NTRjOSAweDI4
MWEpCjIwMDktMTEtMzAgMjA6MDE6MzUuNzg4IGEub3V0WzY0MTUzOjUwYl0gKioqIF9OU0F1dG9y
ZWxlYXNlTm9Qb29sKCk6IE9iamVjdCAweDFjZTRjZDAgb2YgY2xhc3MgTlNDRlNldCBhdXRvcmVs
ZWFzZWQgd2l0aCBubyBwb29sIGluIHBsYWNlIC0ganVzdCBsZWFraW5nClN0YWNrOiAoMHg0ZDFm
MGYgMHgzZGU0NDIgMHgzZjZlNjMgMHgzZjZiM2MgMHgzZjY3YjggMHgzZjY0OTMgMHgzZjYyNDIg
MHgzZjVlM2UgMHg0NzQyMGYgMHg0NzQ1OTcgMHgyYzM4IDB4MmFjNCAweDQwMGQgMHg1M2I2IDB4
NTRjOSAweDI4MWEpCjIwMDktMTEtMzAgMjA6MDE6MzUuODMyIGEub3V0WzY0MTUzOjUwYl0gKioq
IF9OU0F1dG9yZWxlYXNlTm9Qb29sKCk6IE9iamVjdCAweDFjY2QwNTAgb2YgY2xhc3MgVGFza09w
ZXJhdGlvbiBhdXRvcmVsZWFzZWQgd2l0aCBubyBwb29sIGluIHBsYWNlIC0ganVzdCBsZWFraW5n
ClN0YWNrOiAoMHg0ZDFmMGYgMHgzZGU0NDIgMHgyYWRhIDB4NDAwZCAweDUzYjYgMHg1NGM5IDB4
MjgxYSkKCkhlbGdyaW5kOiBoZ19tYWluLmM6NjE2IChtYXBfdGhyZWFkc19sb29rdXApOiBBc3Nl
cnRpb24gJ3RocicgZmFpbGVkLgo9PTY0MTUzPT0gICAgYXQgMHhGMDBBMDgwRDogPz8/Cj09NjQx
NTM9PSAgICBieSAweEYwMEEwQUMxOiA/Pz8KPT02NDE1Mz09ICAgIGJ5IDB4RjAwOEE4RTk6ID8/
Pwo9PTY0MTUzPT0gICAgYnkgMHhGMDBGQTA4QzogPz8/Cj09NjQxNTM9PSAgICBieSAweEYwMEZC
NjEzOiA/Pz8KPT02NDE1Mz09ICAgIGJ5IDB4RjAxMjIwNUY6ID8/Pwo9PTY0MTUzPT0gICAgYnkg
MHhGMDEyMjM3MjogPz8/CgpzY2hlZCBzdGF0dXM6CiAgcnVubmluZ190aWQ9MgoKVGhyZWFkIDE6
IHN0YXR1cyA9IFZnVHNfV2FpdFN5cwo9PTY0MTUzPT0gICAgYXQgMHg3QjUyODY6IG1hY2hfbXNn
X3RyYXAgKGluIC91c3IvbGliL2xpYlN5c3RlbS5CLmR5bGliKQo9PTY0MTUzPT0gICAgYnkgMHg3
REQ3NTQ6IF9ub3RpZnlfc2VydmVyX3JlZ2lzdGVyX3BsYWluIChpbiAvdXNyL2xpYi9saWJTeXN0
ZW0uQi5keWxpYikKPT02NDE1Mz09ICAgIGJ5IDB4N0RENjVCOiBub3RpZnlfcmVnaXN0ZXJfcGxh
aW4gKGluIC91c3IvbGliL2xpYlN5c3RlbS5CLmR5bGliKQo9PTY0MTUzPT0gICAgYnkgMHg3RTFE
NkI6IF9hc2xfbm90aWZ5X29wZW4gKGluIC91c3IvbGliL2xpYlN5c3RlbS5CLmR5bGliKQo9PTY0
MTUzPT0gICAgYnkgMHg3RTFBQUM6IGFzbF9vcGVuIChpbiAvdXNyL2xpYi9saWJTeXN0ZW0uQi5k
eWxpYikKPT02NDE1Mz09ICAgIGJ5IDB4QkNDNDczOiBfX0NGTG9nQ1N0cmluZyAoaW4gL1N5c3Rl
bS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrL1ZlcnNpb25zL0Ev
Q29yZUZvdW5kYXRpb24pCj09NjQxNTM9PSAgICBieSAweEJDQzlFQTogX0NGTG9ndkV4IChpbiAv
U3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlRm91bmRhdGlvbi5mcmFtZXdvcmsvVmVyc2lv
bnMvQS9Db3JlRm91bmRhdGlvbikKPT02NDE1Mz09ICAgIGJ5IDB4NDAyQzZEOiBOU0xvZ3YgKGlu
IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0ZvdW5kYXRpb24uZnJhbWV3b3JrL1ZlcnNpb25z
L0MvRm91bmRhdGlvbikKPT02NDE1Mz09ICAgIGJ5IDB4NDYyMUVBOiBOU0xvZyAoaW4gL1N5c3Rl
bS9MaWJyYXJ5L0ZyYW1ld29ya3MvRm91bmRhdGlvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQy9Gb3Vu
ZGF0aW9uKQo9PTY0MTUzPT0gICAgYnkgMHg0RDFGM0E6IF9OU0F1dG9yZWxlYXNlTm9Qb29sIChp
biAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1ld29yay9WZXJzaW9u
cy9DL0ZvdW5kYXRpb24pCj09NjQxNTM9PSAgICBieSAweDNERTQ0MTogLVtOU09iamVjdChOU09i
amVjdCkgYXV0b3JlbGVhc2VdIChpbiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Gb3VuZGF0
aW9uLmZyYW1ld29yay9WZXJzaW9ucy9DL0ZvdW5kYXRpb24pCj09NjQxNTM9PSAgICBieSAweDJB
RDk6ICtbVGFza09wZXJhdGlvbiB0YXNrT3BlcmF0aW9uV2l0aFRhc2s6XSAoaW4gL1VzZXJzL2ds
aWRlci9zcmMvY2hyb21pdW0vY2hyb21pdW0yL3NyYy9iYXNlL2Eub3V0KQo9PTY0MTUzPT0gICAg
YnkgMHg0MDBDOiBXb3JrZXJQb29sOjpQb3N0VGFzayh0cmFja2VkX29iamVjdHM6OkxvY2F0aW9u
IGNvbnN0JiwgVGFzayosIGJvb2wpIChpbiAvVXNlcnMvZ2xpZGVyL3NyYy9jaHJvbWl1bS9jaHJv
bWl1bTIvc3JjL2Jhc2UvYS5vdXQpCj09NjQxNTM9PSAgICBieSAweDU0MzI6IFdvcmtlclBvb2xU
ZXN0X1Bvc3RUYXNrKCkgKGluIC9Vc2Vycy9nbGlkZXIvc3JjL2Nocm9taXVtL2Nocm9taXVtMi9z
cmMvYmFzZS9hLm91dCkKPT02NDE1Mz09ICAgIGJ5IDB4NTRDODogbWFpbiAoaW4gL1VzZXJzL2ds
aWRlci9zcmMvY2hyb21pdW0vY2hyb21pdW0yL3NyYy9iYXNlL2Eub3V0KQoKVGhyZWFkIDI6IHN0
YXR1cyA9IFZnVHNfUnVubmFibGUKPT02NDE1Mz09ICAgIGF0IDB4ODFFMkE0OiBzdGFydF93cXRo
cmVhZCAoaW4gL3Vzci9saWIvbGliU3lzdGVtLkIuZHlsaWIpCgoKTm90ZTogc2VlIGFsc28gdGhl
IEZBUSBpbiB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbi4KSXQgY29udGFpbnMgd29ya2Fyb3VuZHMg
dG8gc2V2ZXJhbCBjb21tb24gcHJvYmxlbXMuCkluIHBhcnRpY3VsYXIsIGlmIFZhbGdyaW5kIGFi
b3J0ZWQgb3IgY3Jhc2hlZCBhZnRlcgppZGVudGlmeWluZyBwcm9ibGVtcyBpbiB5b3VyIHByb2dy
YW0sIHRoZXJlJ3MgYSBnb29kIGNoYW5jZQp0aGF0IGZpeGluZyB0aG9zZSBwcm9ibGVtcyB3aWxs
IHByZXZlbnQgVmFsZ3JpbmQgYWJvcnRpbmcgb3IKY3Jhc2hpbmcsIGVzcGVjaWFsbHkgaWYgaXQg
aGFwcGVuZWQgaW4gbV9tYWxsb2NmcmVlLmMuCgpJZiB0aGF0IGRvZXNuJ3QgaGVscCwgcGxlYXNl
IHJlcG9ydCB0aGlzIGJ1ZyB0bzogd3d3LnZhbGdyaW5kLm9yZwoKSW4gdGhlIGJ1ZyByZXBvcnQs
IHNlbmQgYWxsIHRoZSBhYm92ZSB0ZXh0LCB0aGUgdmFsZ3JpbmQKdmVyc2lvbiwgYW5kIHdoYXQg
T1MgYW5kIHZlcnNpb24geW91IGFyZSB1c2luZy4gIFRoYW5rcy4KCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>38744</attachid>
            <date>2009-12-01 17:15:55 +0000</date>
            <delta_ts>2009-12-01 17:15:55 +0000</delta_ts>
            <desc>A smaller reproducer -- (only 1400 lines instead of 9k)</desc>
            <filename>worker_vex_test.mm</filename>
            <type>text/plain</type>
            <size>38909</size>
            <attacher name="Alexander Potapenko">glider</attacher>
            
              <data encoding="base64">LyogVGhlIGZvbGxvd2luZyBjb2RlIHdhcyB0YWtlbiBmcm9tIGNocm9taXVtLm9yZyBhbmQgc2hv
dWxkIGJlIHVzZWQgZm9yCiAqIHRlc3RpbmcgcHVycG9zZXMgb25seS4gVGhlIG1lYW5zIG9mIHVz
aW5nIHRoaXMgY29kZSBhcmUgZ292ZXJuZWQgYnkgdGhlCiAqIGxpY2Vuc2UgbG9jYXRlZCBhdCBo
dHRwOi8vc3JjLmNocm9taXVtLm9yZy92aWV3dmMvY2hyb21lL3RydW5rL3NyYy9MSUNFTlNFLgog
Ki8KI2luY2x1ZGUgPHN0ZGFyZy5oPgojaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgojaW5jbHVkZSA8
QXZhaWxhYmlsaXR5TWFjcm9zLmg+CiNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRkRhdGUuaD4K
I2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGVGltZVpvbmUuaD4KI2luY2x1ZGUgPG1hY2gvbWFj
aF90aW1lLmg+CiNpbmNsdWRlIDxtYWNoL21hY2guaD4KI2luY2x1ZGUgPHN5cy90aW1lLmg+CiNp
bmNsdWRlIDx0aW1lLmg+CiNpbmNsdWRlIDxsaW1pdHMuaD4gICAgICAgICAvLyBTbyB3ZSBjYW4g
c2V0IHRoZSBib3VuZHMgb2Ygb3VyIHR5cGVzCiNpbmNsdWRlIDxzdGRkZWYuaD4gICAgICAgICAv
LyBGb3Igc2l6ZV90CiNpbmNsdWRlIDxzdHJpbmcuaD4gICAgICAgICAvLyBmb3IgbWVtY3B5CiNp
bmNsdWRlIDxpb3Nmd2Q+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRl
IDxlcnJuby5oPgojaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KI2luY2x1ZGUgPGxp
Ymtlcm4vT1NBdG9taWMuaD4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGNzdHJpbmc+CiNp
bmNsdWRlIDxzc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8c3RhY2s+CiNpbmNs
dWRlIDxxdWV1ZT4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGxpbWl0cz4KI2luY2x1
ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGxpc3Q+CgojaW5jbHVkZSA8YXNzZXJ0Lmg+CiNpbmNsdWRl
IDxzdGRsaWIuaD4KI2luY2x1ZGUgPGNzdGRkZWY+CgojaW5jbHVkZSA8ZXhlY2luZm8uaD4KCiNp
bmNsdWRlIDxzdGRpbnQuaD4gICAgICAgICAvLyBGb3IgaW50cHRyX3QuCiNpbmNsdWRlIDxwdGhy
ZWFkLmg+CgojaWZuZGVmIEJVSUxEX0JVSUxEX0NPTkZJR19IXwojZGVmaW5lIEJVSUxEX0JVSUxE
X0NPTkZJR19IXwoKLy8gQSBzZXQgb2YgbWFjcm9zIHRvIHVzZSBmb3IgcGxhdGZvcm0gZGV0ZWN0
aW9uLgojZGVmaW5lIE9TX01BQ09TWCAxCiNkZWZpbmUgT1NfUE9TSVggMQojdW5kZWYgTkRFQlVH
CiNkZWZpbmUgQ09NUElMRVJfR0NDIDEKCi8vIFByb2Nlc3NvciBhcmNoaXRlY3R1cmUgZGV0ZWN0
aW9uLiAgRm9yIG1vcmUgaW5mbyBvbiB3aGF0J3MgZGVmaW5lZCwgc2VlOgovLyAgIGh0dHA6Ly9t
c2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9iMDA4NGtheS5hc3B4Ci8vICAgaHR0cDov
L3d3dy5hZ25lci5vcmcvb3B0aW1pemUvY2FsbGluZ19jb252ZW50aW9ucy5wZGYKLy8gICBvciB3
aXRoIGdjYywgcnVuOiAiZWNobyB8IGdjYyAtRSAtZE0gLSIKI2lmIGRlZmluZWQoX01fWDY0KSB8
fCBkZWZpbmVkKF9feDg2XzY0X18pCiNkZWZpbmUgQVJDSF9DUFVfNjRfQklUUyAxCiNlbGlmIGRl
ZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChfX2kzODZfXykKI2VsaWYgZGVmaW5lZChfX0FSTUVM
X18pCiNlbHNlCiNlbmRpZgoKI2VuZGlmICAvLyBCVUlMRF9CVUlMRF9DT05GSUdfSF8KCiNkZWZp
bmUgR0dfTE9OR0xPTkcoeCkgeCMjTEwKI2RlZmluZSBHR19JTlQ2NF9DKHgpICAgR0dfTE9OR0xP
TkcoeCkKCiNpZm5kZWYgQkFTRV9CQVNJQ1RZUEVTX0hfCiNkZWZpbmUgQkFTRV9CQVNJQ1RZUEVT
X0hfCgp0eXBlZGVmIHNpZ25lZCBjaGFyICAgICAgICAgaW50ODsKdHlwZWRlZiBpbnQgICAgICAg
ICAgICAgICAgIGludDMyOwoKI2lmIF9fTFA2NF9fCnR5cGVkZWYgbG9uZyAgICAgICAgICAgICAg
ICBpbnQ2NDsKI2Vsc2UKdHlwZWRlZiBsb25nIGxvbmcgICAgICAgICAgIGludDY0OwojZW5kaWYK
Ci8vIEEgbWFjcm8gdG8gZGlzYWxsb3cgdGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9y
PSBmdW5jdGlvbnMKLy8gVGhpcyBzaG91bGQgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFy
YXRpb25zIGZvciBhIGNsYXNzCiNkZWZpbmUgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVO
YW1lKSBcCiAgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUmKTsgICAgICAgICAgICAgICBcCiAgdm9p
ZCBvcGVyYXRvcj0oY29uc3QgVHlwZU5hbWUmKQoKLy8gQSBtYWNybyB0byBkaXNhbGxvdyBhbGwg
dGhlIGltcGxpY2l0IGNvbnN0cnVjdG9ycywgbmFtZWx5IHRoZQovLyBkZWZhdWx0IGNvbnN0cnVj
dG9yLCBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zLgovLwovLyBUaGlz
IHNob3VsZCBiZSB1c2VkIGluIHRoZSBwcml2YXRlOiBkZWNsYXJhdGlvbnMgZm9yIGEgY2xhc3MK
Ly8gdGhhdCB3YW50cyB0byBwcmV2ZW50IGFueW9uZSBmcm9tIGluc3RhbnRpYXRpbmcgaXQuIFRo
aXMgaXMKLy8gZXNwZWNpYWxseSB1c2VmdWwgZm9yIGNsYXNzZXMgY29udGFpbmluZyBvbmx5IHN0
YXRpYyBtZXRob2RzLgojZGVmaW5lIERJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhUeXBl
TmFtZSkgXAogIFR5cGVOYW1lKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUeXBlTmFtZSkKCm5hbWVzcGFjZSBiYXNlIHsK
ZW51bSBMaW5rZXJJbml0aWFsaXplZCB7IExJTktFUl9JTklUSUFMSVpFRCB9Owp9ICAvLyBiYXNl
CgoKI2VuZGlmICAvLyBCQVNFX0JBU0lDVFlQRVNfSF8KCiNpZm5kZWYgQkFTRV9MT0NLX0lNUExf
SF8KI2RlZmluZSBCQVNFX0xPQ0tfSU1QTF9IXwoKLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRo
ZSB1bmRlcmx5aW5nIHBsYXRmb3JtLXNwZWNpZmljIHNwaW4tbG9jayBtZWNoYW5pc20KLy8gdXNl
ZCBmb3IgdGhlIExvY2sgY2xhc3MuICBNb3N0IHVzZXJzIHNob3VsZCBub3QgdXNlIExvY2tJbXBs
IGRpcmVjdGx5LCBidXQKLy8gc2hvdWxkIGluc3RlYWQgdXNlIExvY2suCmNsYXNzIExvY2tJbXBs
IHsKIHB1YmxpYzoKICB0eXBlZGVmIHB0aHJlYWRfbXV0ZXhfdCBPU0xvY2tUeXBlOwoKTG9ja0lt
cGwoKSB7CiAgcHRocmVhZF9tdXRleGF0dHJfdCBtdGE7CiAgaW50IHJ2ID0gcHRocmVhZF9tdXRl
eGF0dHJfaW5pdCgmbXRhKTsKICBydiA9IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJm10YSwg
UFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLKTsKICBydiA9IHB0aHJlYWRfbXV0ZXhfaW5pdCgmb3Nf
bG9ja18sICZtdGEpOwogIC8vcnYgPSBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KCZtdGEpOwp9
Cgp+TG9ja0ltcGwoKSB7CiAgaW50IHJ2ID0gcHRocmVhZF9tdXRleF9kZXN0cm95KCZvc19sb2Nr
Xyk7Cn0KCiAgLy8gSWYgdGhlIGxvY2sgaXMgbm90IGhlbGQsIHRha2UgaXQgYW5kIHJldHVybiB0
cnVlLiAgSWYgdGhlIGxvY2sgaXMgYWxyZWFkeQogIC8vIGhlbGQgYnkgc29tZXRoaW5nIGVsc2Us
IGltbWVkaWF0ZWx5IHJldHVybiBmYWxzZS4KCiAgLy8gVGFrZSB0aGUgbG9jaywgYmxvY2tpbmcg
dW50aWwgaXQgaXMgYXZhaWxhYmxlIGlmIG5lY2Vzc2FyeS4Kdm9pZCBMb2NrKCkgewogIGludCBy
diA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmb3NfbG9ja18pOwp9CgoKICAvLyBSZWxlYXNlIHRoZSBs
b2NrLiAgVGhpcyBtdXN0IG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBsb2NrJ3MgaG9sZGVyOiBhZnRl
cgogIC8vIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvIFRyeSwgb3IgYSBjYWxsIHRvIExvY2suCnZvaWQg
VW5sb2NrKCkgewogIGludCBydiA9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZvc19sb2NrXyk7Cn0K
CiAgT1NMb2NrVHlwZSogb3NfbG9jaygpIHsgcmV0dXJuICZvc19sb2NrXzsgfQoKIHByaXZhdGU6
CiAgT1NMb2NrVHlwZSBvc19sb2NrXzsKCiAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKExvY2tJ
bXBsKTsKfTsKCgojZW5kaWYgIC8vIEJBU0VfTE9DS19JTVBMX0hfCgojaWZuZGVmIEJBU0VfTE9D
S19IXwojZGVmaW5lIEJBU0VfTE9DS19IXwoKY2xhc3MgTG9jayB7CiBwdWJsaWM6CiAgTG9jaygp
IDogbG9ja18oKSB7fQogIH5Mb2NrKCkge30KICB2b2lkIEFjcXVpcmUoKSB7IGxvY2tfLkxvY2so
KTsgfQogIHZvaWQgUmVsZWFzZSgpIHsgbG9ja18uVW5sb2NrKCk7IH0KICAvLyBJZiB0aGUgbG9j
ayBpcyBub3QgaGVsZCwgdGFrZSBpdCBhbmQgcmV0dXJuIHRydWUuIElmIHRoZSBsb2NrIGlzIGFs
cmVhZHkKICAvLyBoZWxkIGJ5IGFub3RoZXIgdGhyZWFkLCBpbW1lZGlhdGVseSByZXR1cm4gZmFs
c2UuCgogIC8vIFJldHVybiB0aGUgdW5kZXJseWluZyBsb2NrIGltcGxlbWVudGF0aW9uLgogIC8v
IFRPRE8oYXdhbGtlcik6IHJlZmFjdG9yIGxvY2sgYW5kIGNvbmRpdGlvbiB2YXJpYWJsZXMgc28g
dGhhdCB0aGlzIGlzCiAgLy8gdW5uZWNlc3NhcnkuCiAgTG9ja0ltcGwqIGxvY2tfaW1wbCgpIHsg
cmV0dXJuICZsb2NrXzsgfQoKIHByaXZhdGU6CiAgTG9ja0ltcGwgbG9ja187ICAvLyBQbGF0Zm9y
bSBzcGVjaWZpYyB1bmRlcmx5aW5nIGxvY2sgaW1wbGVtZW50YXRpb24uCgogIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihMb2NrKTsKfTsKCi8vIEEgaGVscGVyIGNsYXNzIHRoYXQgYWNxdWlyZXMg
dGhlIGdpdmVuIExvY2sgd2hpbGUgdGhlIEF1dG9Mb2NrIGlzIGluIHNjb3BlLgpjbGFzcyBBdXRv
TG9jayB7CiBwdWJsaWM6CiAgZXhwbGljaXQgQXV0b0xvY2soTG9jayYgbG9jaykgOiBsb2NrXyhs
b2NrKSB7CiAgICBsb2NrXy5BY3F1aXJlKCk7CiAgfQoKICB+QXV0b0xvY2soKSB7CiAgICBsb2Nr
Xy5SZWxlYXNlKCk7CiAgfQoKIHByaXZhdGU6CiAgTG9jayYgbG9ja187CiAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKEF1dG9Mb2NrKTsKfTsKCiNlbmRpZiAgLy8gQkFTRV9MT0NLX0hfCgojaWZu
ZGVmIEJBU0VfQVRPTUlDT1BTX0hfCiNkZWZpbmUgQkFTRV9BVE9NSUNPUFNfSF8KCm5hbWVzcGFj
ZSBiYXNlIHsKbmFtZXNwYWNlIHN1YnRsZSB7CgovLyBCdWcgMTMwODk5MS4gIFdlIG5lZWQgdGhp
cyBmb3IgL1dwNjQsIHRvIG1hcmsgaXQgc2FmZSBmb3IgQXRvbWljV29yZCBjYXN0aW5nLgp0eXBl
ZGVmIGludDMyIEF0b21pYzMyOwojaWZkZWYgQVJDSF9DUFVfNjRfQklUUwovLyBXZSBuZWVkIHRv
IGJlIGFibGUgdG8gZ28gYmV0d2VlbiBBdG9taWM2NCBhbmQgQXRvbWljV29yZCBpbXBsaWNpdGx5
LiAgVGhpcwovLyBtZWFucyBBdG9taWM2NCBhbmQgQXRvbWljV29yZCBzaG91bGQgYmUgdGhlIHNh
bWUgdHlwZSBvbiA2NC1iaXQuCnR5cGVkZWYgaW50cHRyX3QgQXRvbWljNjQ7CiNlbmRpZgoKLy8g
VXNlIEF0b21pY1dvcmQgZm9yIGEgbWFjaGluZS1zaXplZCBwb2ludGVyLiAgSXQgd2lsbCB1c2Ug
dGhlIEF0b21pYzMyIG9yCi8vIEF0b21pYzY0IHJvdXRpbmVzIGJlbG93LCBkZXBlbmRpbmcgb24g
eW91ciBhcmNoaXRlY3R1cmUuCnR5cGVkZWYgaW50cHRyX3QgQXRvbWljV29yZDsKCi8vIEF0b21p
Y2FsbHkgZXhlY3V0ZToKLy8gICAgICByZXN1bHQgPSAqcHRyOwovLyAgICAgIGlmICgqcHRyID09
IG9sZF92YWx1ZSkKLy8gICAgICAgICpwdHIgPSBuZXdfdmFsdWU7Ci8vICAgICAgcmV0dXJuIHJl
c3VsdDsKLy8KLy8gSS5lLiwgcmVwbGFjZSAiKnB0ciIgd2l0aCAibmV3X3ZhbHVlIiBpZiAiKnB0
ciIgdXNlZCB0byBiZSAib2xkX3ZhbHVlIi4KLy8gQWx3YXlzIHJldHVybiB0aGUgb2xkIHZhbHVl
IG9mICIqcHRyIgovLwovLyBUaGlzIHJvdXRpbmUgaW1wbGllcyBubyBtZW1vcnkgYmFycmllcnMu
CkF0b21pYzMyIE5vQmFycmllcl9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWMzMiogcHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgb2xkX3ZhbHVlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljMzIgbmV3X3ZhbHVlKTsKCi8v
IEF0b21pY2FsbHkgc3RvcmUgbmV3X3ZhbHVlIGludG8gKnB0ciwgcmV0dXJuaW5nIHRoZSBwcmV2
aW91cyB2YWx1ZSBoZWxkIGluCi8vICpwdHIuICBUaGlzIHJvdXRpbmUgaW1wbGllcyBubyBtZW1v
cnkgYmFycmllcnMuCkF0b21pYzMyIE5vQmFycmllcl9BdG9taWNFeGNoYW5nZSh2b2xhdGlsZSBB
dG9taWMzMiogcHRyLCBBdG9taWMzMiBuZXdfdmFsdWUpOwoKLy8gQXRvbWljYWxseSBpbmNyZW1l
bnQgKnB0ciBieSAiaW5jcmVtZW50Ii4gIFJldHVybnMgdGhlIG5ldyB2YWx1ZSBvZgovLyAqcHRy
IHdpdGggdGhlIGluY3JlbWVudCBhcHBsaWVkLiAgVGhpcyByb3V0aW5lIGltcGxpZXMgbm8gbWVt
b3J5IGJhcnJpZXJzLgpBdG9taWMzMiBOb0JhcnJpZXJfQXRvbWljSW5jcmVtZW50KHZvbGF0aWxl
IEF0b21pYzMyKiBwdHIsIEF0b21pYzMyIGluY3JlbWVudCk7CgpBdG9taWMzMiBCYXJyaWVyX0F0
b21pY0luY3JlbWVudCh2b2xhdGlsZSBBdG9taWMzMiogcHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBdG9taWMzMiBpbmNyZW1lbnQpOwoKLy8gVGhlc2UgZm9sbG93aW5nIGxv
d2VyLWxldmVsIG9wZXJhdGlvbnMgYXJlIHR5cGljYWxseSB1c2VmdWwgb25seSB0byBwZW9wbGUK
Ly8gaW1wbGVtZW50aW5nIGhpZ2hlci1sZXZlbCBzeW5jaHJvbml6YXRpb24gb3BlcmF0aW9ucyBs
aWtlIHNwaW5sb2NrcywKLy8gbXV0ZXhlcywgYW5kIGNvbmRpdGlvbi12YXJpYWJsZXMuICBUaGV5
IGNvbWJpbmUgQ29tcGFyZUFuZFN3YXAoKSwgYSBsb2FkLCBvcgovLyBhIHN0b3JlIHdpdGggYXBw
cm9wcmlhdGUgbWVtb3J5LW9yZGVyaW5nIGluc3RydWN0aW9ucy4gICJBY3F1aXJlIiBvcGVyYXRp
b25zCi8vIGVuc3VyZSB0aGF0IG5vIGxhdGVyIG1lbW9yeSBhY2Nlc3MgY2FuIGJlIHJlb3JkZXJl
ZCBhaGVhZCBvZiB0aGUgb3BlcmF0aW9uLgovLyAiUmVsZWFzZSIgb3BlcmF0aW9ucyBlbnN1cmUg
dGhhdCBubyBwcmV2aW91cyBtZW1vcnkgYWNjZXNzIGNhbiBiZSByZW9yZGVyZWQKLy8gYWZ0ZXIg
dGhlIG9wZXJhdGlvbi4gICJCYXJyaWVyIiBvcGVyYXRpb25zIGhhdmUgYm90aCAiQWNxdWlyZSIg
YW5kICJSZWxlYXNlIgovLyBzZW1hbnRpY3MuICAgQSBNZW1vcnlCYXJyaWVyKCkgaGFzICJCYXJy
aWVyIiBzZW1hbnRpY3MsIGJ1dCBkb2VzIG5vIG1lbW9yeQovLyBhY2Nlc3MuCkF0b21pYzMyIEFj
cXVpcmVfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBvbGRfdmFsdWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXRvbWljMzIgbmV3X3ZhbHVlKTsKCnZvaWQgTWVtb3J5QmFycmllcigp
Owp2b2lkIFJlbGVhc2VfU3RvcmUodm9sYXRpbGUgQXRvbWljMzIqIHB0ciwgQXRvbWljMzIgdmFs
dWUpOwoKQXRvbWljMzIgTm9CYXJyaWVyX0xvYWQodm9sYXRpbGUgY29uc3QgQXRvbWljMzIqIHB0
cik7CkF0b21pYzMyIEFjcXVpcmVfTG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWMzMiogcHRyKTsK
QXRvbWljMzIgUmVsZWFzZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzMyKiBwdHIpOwoKLy8g
NjQtYml0IGF0b21pYyBvcGVyYXRpb25zIChvbmx5IGF2YWlsYWJsZSBvbiA2NC1iaXQgcHJvY2Vz
c29ycykuCiNpZmRlZiBBUkNIX0NQVV82NF9CSVRTCkF0b21pYzY0IE5vQmFycmllcl9Db21wYXJl
QW5kU3dhcCh2b2xhdGlsZSBBdG9taWM2NCogcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXRvbWljNjQgb2xkX3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXRvbWljNjQgbmV3X3ZhbHVlKTsKQXRvbWljNjQgTm9CYXJyaWVyX0F0b21pY0V4Y2hh
bmdlKHZvbGF0aWxlIEF0b21pYzY0KiBwdHIsIEF0b21pYzY0IG5ld192YWx1ZSk7CkF0b21pYzY0
IE5vQmFycmllcl9BdG9taWNJbmNyZW1lbnQodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwgQXRvbWlj
NjQgaW5jcmVtZW50KTsKQXRvbWljNjQgQmFycmllcl9BdG9taWNJbmNyZW1lbnQodm9sYXRpbGUg
QXRvbWljNjQqIHB0ciwgQXRvbWljNjQgaW5jcmVtZW50KTsKCkF0b21pYzY0IEFjcXVpcmVfQ29t
cGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljNjQqIHB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBdG9taWM2NCBvbGRfdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXRvbWljNjQgbmV3X3ZhbHVlKTsKdm9pZCBSZWxlYXNlX1N0b3JlKHZvbGF0aWxlIEF0
b21pYzY0KiBwdHIsIEF0b21pYzY0IHZhbHVlKTsKQXRvbWljNjQgTm9CYXJyaWVyX0xvYWQodm9s
YXRpbGUgY29uc3QgQXRvbWljNjQqIHB0cik7CkF0b21pYzY0IEFjcXVpcmVfTG9hZCh2b2xhdGls
ZSBjb25zdCBBdG9taWM2NCogcHRyKTsKQXRvbWljNjQgUmVsZWFzZV9Mb2FkKHZvbGF0aWxlIGNv
bnN0IEF0b21pYzY0KiBwdHIpOwojZW5kaWYgIC8vIEFSQ0hfQ1BVXzY0X0JJVFMKCn0gIC8vIG5h
bWVzcGFjZSBiYXNlOjpzdWJ0bGUKfSAgLy8gbmFtZXNwYWNlIGJhc2UKCi8vIEluY2x1ZGUgb3Vy
IHBsYXRmb3JtIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLgoKI2lmbmRlZiBCQVNFX0FUT01JQ09Q
U19JTlRFUk5BTFNfWDg2X01BQ09TWF9IXwojZGVmaW5lIEJBU0VfQVRPTUlDT1BTX0lOVEVSTkFM
U19YODZfTUFDT1NYX0hfCgoKbmFtZXNwYWNlIGJhc2UgewpuYW1lc3BhY2Ugc3VidGxlIHsKCmlu
bGluZSBBdG9taWMzMiBOb0JhcnJpZXJfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgQXRvbWljMzIg
KnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBv
bGRfdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWlj
MzIgbmV3X3ZhbHVlKSB7CiAgQXRvbWljMzIgcHJldl92YWx1ZTsKICBkbyB7CiAgICBpZiAoT1NB
dG9taWNDb21wYXJlQW5kU3dhcDMyKG9sZF92YWx1ZSwgbmV3X3ZhbHVlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PEF0b21pYzMyKj4ocHRyKSkpIHsKICAgICAg
cmV0dXJuIG9sZF92YWx1ZTsKICAgIH0KICAgIHByZXZfdmFsdWUgPSAqcHRyOwogIH0gd2hpbGUg
KHByZXZfdmFsdWUgPT0gb2xkX3ZhbHVlKTsKICByZXR1cm4gcHJldl92YWx1ZTsKfQoKaW5saW5l
IEF0b21pYzMyIE5vQmFycmllcl9BdG9taWNFeGNoYW5nZSh2b2xhdGlsZSBBdG9taWMzMiAqcHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIG5ld192
YWx1ZSkgewogIEF0b21pYzMyIG9sZF92YWx1ZTsKICBkbyB7CiAgICBvbGRfdmFsdWUgPSAqcHRy
OwogIH0gd2hpbGUgKCFPU0F0b21pY0NvbXBhcmVBbmRTd2FwMzIob2xkX3ZhbHVlLCBuZXdfdmFs
dWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PEF0b21p
YzMyKj4ocHRyKSkpOwogIHJldHVybiBvbGRfdmFsdWU7Cn0KCmlubGluZSBBdG9taWMzMiBOb0Jh
cnJpZXJfQXRvbWljSW5jcmVtZW50KHZvbGF0aWxlIEF0b21pYzMyICpwdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIGluY3JlbWVudCkgewogIHJl
dHVybiBPU0F0b21pY0FkZDMyKGluY3JlbWVudCwgY29uc3RfY2FzdDxBdG9taWMzMio+KHB0cikp
Owp9CgppbmxpbmUgQXRvbWljMzIgQmFycmllcl9BdG9taWNJbmNyZW1lbnQodm9sYXRpbGUgQXRv
bWljMzIgKnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRv
bWljMzIgaW5jcmVtZW50KSB7CiAgcmV0dXJuIE9TQXRvbWljQWRkMzJCYXJyaWVyKGluY3JlbWVu
dCwgY29uc3RfY2FzdDxBdG9taWMzMio+KHB0cikpOwp9CgppbmxpbmUgdm9pZCBNZW1vcnlCYXJy
aWVyKCkgewogIE9TTWVtb3J5QmFycmllcigpOwp9CgppbmxpbmUgQXRvbWljMzIgQWNxdWlyZV9D
b21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWMzMiAqcHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBdG9taWMzMiBvbGRfdmFsdWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzMyIG5ld192YWx1ZSkgewogIEF0b21pYzMyIHBy
ZXZfdmFsdWU7CiAgZG8gewogICAgaWYgKE9TQXRvbWljQ29tcGFyZUFuZFN3YXAzMkJhcnJpZXIo
b2xkX3ZhbHVlLCBuZXdfdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdF9jYXN0PEF0b21pYzMyKj4ocHRyKSkpIHsKICAgICAgcmV0dXJuIG9sZF92YWx1
ZTsKICAgIH0KICAgIHByZXZfdmFsdWUgPSAqcHRyOwogIH0gd2hpbGUgKHByZXZfdmFsdWUgPT0g
b2xkX3ZhbHVlKTsKICByZXR1cm4gcHJldl92YWx1ZTsKfQoKaW5saW5lIHZvaWQgUmVsZWFzZV9T
dG9yZSh2b2xhdGlsZSBBdG9taWMzMiAqcHRyLCBBdG9taWMzMiB2YWx1ZSkgewogIE1lbW9yeUJh
cnJpZXIoKTsKICAqcHRyID0gdmFsdWU7Cn0KCmlubGluZSBBdG9taWMzMiBOb0JhcnJpZXJfTG9h
ZCh2b2xhdGlsZSBjb25zdCBBdG9taWMzMiogcHRyKSB7CiAgcmV0dXJuICpwdHI7Cn0KCmlubGlu
ZSBBdG9taWMzMiBBY3F1aXJlX0xvYWQodm9sYXRpbGUgY29uc3QgQXRvbWljMzIgKnB0cikgewog
IEF0b21pYzMyIHZhbHVlID0gKnB0cjsKICBNZW1vcnlCYXJyaWVyKCk7CiAgcmV0dXJuIHZhbHVl
Owp9CgppbmxpbmUgQXRvbWljMzIgUmVsZWFzZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IEF0b21pYzMy
ICpwdHIpIHsKICBNZW1vcnlCYXJyaWVyKCk7CiAgcmV0dXJuICpwdHI7Cn0KCiNpZmRlZiBfX0xQ
NjRfXwoKLy8gNjQtYml0IGltcGxlbWVudGF0aW9uIG9uIDY0LWJpdCBwbGF0Zm9ybQoKaW5saW5l
IEF0b21pYzY0IE5vQmFycmllcl9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWM2NCAqcHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG9sZF92
YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWM2NCBu
ZXdfdmFsdWUpIHsKICBBdG9taWM2NCBwcmV2X3ZhbHVlOwogIGRvIHsKICAgIGlmIChPU0F0b21p
Y0NvbXBhcmVBbmRTd2FwNjQob2xkX3ZhbHVlLCBuZXdfdmFsdWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8QXRvbWljNjQqPihwdHIpKSkgewogICAgICByZXR1
cm4gb2xkX3ZhbHVlOwogICAgfQogICAgcHJldl92YWx1ZSA9ICpwdHI7CiAgfSB3aGlsZSAocHJl
dl92YWx1ZSA9PSBvbGRfdmFsdWUpOwogIHJldHVybiBwcmV2X3ZhbHVlOwp9CgppbmxpbmUgQXRv
bWljNjQgTm9CYXJyaWVyX0F0b21pY0V4Y2hhbmdlKHZvbGF0aWxlIEF0b21pYzY0ICpwdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljNjQgbmV3X3ZhbHVl
KSB7CiAgQXRvbWljNjQgb2xkX3ZhbHVlOwogIGRvIHsKICAgIG9sZF92YWx1ZSA9ICpwdHI7CiAg
fSB3aGlsZSAoIU9TQXRvbWljQ29tcGFyZUFuZFN3YXA2NChvbGRfdmFsdWUsIG5ld192YWx1ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8QXRvbWljNjQq
PihwdHIpKSk7CiAgcmV0dXJuIG9sZF92YWx1ZTsKfQoKCgppbmxpbmUgQXRvbWljNjQgQWNxdWly
ZV9Db21wYXJlQW5kU3dhcCh2b2xhdGlsZSBBdG9taWM2NCAqcHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBdG9taWM2NCBvbGRfdmFsdWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pYzY0IG5ld192YWx1ZSkgewogIEF0b21pYzY0
IHByZXZfdmFsdWU7CiAgZG8gewogICAgaWYgKE9TQXRvbWljQ29tcGFyZUFuZFN3YXA2NEJhcnJp
ZXIob2xkX3ZhbHVlLCBuZXdfdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdF9jYXN0PEF0b21pYzY0Kj4ocHRyKSkpIHsKICAgICAgcmV0dXJuIG9sZF92
YWx1ZTsKICAgIH0KICAgIHByZXZfdmFsdWUgPSAqcHRyOwogIH0gd2hpbGUgKHByZXZfdmFsdWUg
PT0gb2xkX3ZhbHVlKTsKICByZXR1cm4gcHJldl92YWx1ZTsKfQoKaW5saW5lIHZvaWQgUmVsZWFz
ZV9TdG9yZSh2b2xhdGlsZSBBdG9taWM2NCAqcHRyLCBBdG9taWM2NCB2YWx1ZSkgewogIE1lbW9y
eUJhcnJpZXIoKTsKICAqcHRyID0gdmFsdWU7Cn0KCmlubGluZSBBdG9taWM2NCBOb0JhcnJpZXJf
TG9hZCh2b2xhdGlsZSBjb25zdCBBdG9taWM2NCogcHRyKSB7CiAgcmV0dXJuICpwdHI7Cn0KCgoK
CiNlbmRpZiAgLy8gZGVmaW5lZChfX0xQNjRfXykKCi8vIE1hY09TIHVzZXMgbG9uZyBmb3IgaW50
cHRyX3QsIEF0b21pY1dvcmQgYW5kIEF0b21pYzMyIGFyZSBhbHdheXMgZGlmZmVyZW50Ci8vIG9u
IHRoZSBNYWMsIGV2ZW4gd2hlbiB0aGV5IGFyZSB0aGUgc2FtZSBzaXplLiAgV2UgbmVlZCB0byBl
eHBsaWNpdGx5IGNhc3QKLy8gZnJvbSBBdG9taWNXb3JkIHRvIEF0b21pYzMyLzY0IHRvIGltcGxl
bWVudCB0aGUgQXRvbWljV29yZCBpbnRlcmZhY2UuCiNpZmRlZiBfX0xQNjRfXwojZGVmaW5lIEF0
b21pY1dvcmRDYXN0VHlwZSBBdG9taWM2NAojZWxzZQojZGVmaW5lIEF0b21pY1dvcmRDYXN0VHlw
ZSBBdG9taWMzMgojZW5kaWYKCmlubGluZSBBdG9taWNXb3JkIE5vQmFycmllcl9Db21wYXJlQW5k
U3dhcCh2b2xhdGlsZSBBdG9taWNXb3JkKiBwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBdG9taWNXb3JkIG9sZF92YWx1ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pY1dvcmQgbmV3X3ZhbHVlKSB7CiAgcmV0dXJu
IE5vQmFycmllcl9Db21wYXJlQW5kU3dhcCgKICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2xhdGls
ZSBBdG9taWNXb3JkQ2FzdFR5cGUqPihwdHIpLAogICAgICBvbGRfdmFsdWUsIG5ld192YWx1ZSk7
Cn0KCmlubGluZSBBdG9taWNXb3JkIE5vQmFycmllcl9BdG9taWNFeGNoYW5nZSh2b2xhdGlsZSBB
dG9taWNXb3JkKiBwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBdG9taWNXb3JkIG5ld192YWx1ZSkgewogIHJldHVybiBOb0JhcnJpZXJfQXRvbWljRXhjaGFu
Z2UoCiAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9sYXRpbGUgQXRvbWljV29yZENhc3RUeXBlKj4o
cHRyKSwgbmV3X3ZhbHVlKTsKfQoKCgoKaW5saW5lIEF0b21pY1dvcmQgQWNxdWlyZV9Db21wYXJl
QW5kU3dhcCh2b2xhdGlsZSBBdG9taWNXb3JkKiBwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXRvbWljV29yZCBvbGRfdmFsdWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljV29yZCBuZXdfdmFsdWUpIHsKICByZXR1cm4g
YmFzZTo6c3VidGxlOjpBY3F1aXJlX0NvbXBhcmVBbmRTd2FwKAogICAgICByZWludGVycHJldF9j
YXN0PHZvbGF0aWxlIEF0b21pY1dvcmRDYXN0VHlwZSo+KHB0ciksCiAgICAgIG9sZF92YWx1ZSwg
bmV3X3ZhbHVlKTsKfQoKaW5saW5lIHZvaWQgUmVsZWFzZV9TdG9yZSh2b2xhdGlsZSBBdG9taWNX
b3JkKiBwdHIsIEF0b21pY1dvcmQgdmFsdWUpIHsKICByZXR1cm4gYmFzZTo6c3VidGxlOjpSZWxl
YXNlX1N0b3JlKAogICAgICByZWludGVycHJldF9jYXN0PHZvbGF0aWxlIEF0b21pY1dvcmRDYXN0
VHlwZSo+KHB0ciksIHZhbHVlKTsKfQoKaW5saW5lIEF0b21pY1dvcmQgTm9CYXJyaWVyX0xvYWQo
dm9sYXRpbGUgY29uc3QgQXRvbWljV29yZCAqcHRyKSB7CiAgcmV0dXJuIE5vQmFycmllcl9Mb2Fk
KAogICAgICByZWludGVycHJldF9jYXN0PHZvbGF0aWxlIGNvbnN0IEF0b21pY1dvcmRDYXN0VHlw
ZSo+KHB0cikpOwp9CgoKI3VuZGVmIEF0b21pY1dvcmRDYXN0VHlwZQoKfSAgIC8vIG5hbWVzcGFj
ZSBiYXNlOjpzdWJ0bGUKfSAgIC8vIG5hbWVzcGFjZSBiYXNlCgojZW5kaWYgIC8vIEJBU0VfQVRP
TUlDT1BTX0lOVEVSTkFMU19YODZfTUFDT1NYX0hfCgojZW5kaWYgIC8vIEJBU0VfQVRPTUlDT1BT
X0hfCgojaWZuZGVmIEJBU0VfQVRPTUlDX1JFRl9DT1VOVF9IXwojZGVmaW5lIEJBU0VfQVRPTUlD
X1JFRl9DT1VOVF9IXwoKbmFtZXNwYWNlIGJhc2UgewoKdHlwZWRlZiBzdWJ0bGU6OkF0b21pYzMy
IEF0b21pY1JlZkNvdW50OwoKLy8gSW5jcmVtZW50IGEgcmVmZXJlbmNlIGNvdW50IGJ5ICJpbmNy
ZW1lbnQiLCB3aGljaCBtdXN0IGV4Y2VlZCAwLgppbmxpbmUgdm9pZCBBdG9taWNSZWZDb3VudElu
Y04odm9sYXRpbGUgQXRvbWljUmVmQ291bnQgKnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEF0b21pY1JlZkNvdW50IGluY3JlbWVudCkgewogIHN1YnRsZTo6Tm9CYXJyaWVyX0F0
b21pY0luY3JlbWVudChwdHIsIGluY3JlbWVudCk7Cn0KCi8vIERlY3JlbWVudCBhIHJlZmVyZW5j
ZSBjb3VudCBieSAiZGVjcmVtZW50Iiwgd2hpY2ggbXVzdCBleGNlZWQgMCwKLy8gYW5kIHJldHVy
biB3aGV0aGVyIHRoZSByZXN1bHQgaXMgbm9uLXplcm8uCi8vIEluc2VydCBiYXJyaWVycyB0byBl
bnN1cmUgdGhhdCBzdGF0ZSB3cml0dGVuIGJlZm9yZSB0aGUgcmVmZXJlbmNlIGNvdW50Ci8vIGJl
Y2FtZSB6ZXJvIHdpbGwgYmUgdmlzaWJsZSB0byBhIHRocmVhZCB0aGF0IGhhcyBqdXN0IG1hZGUg
dGhlIGNvdW50IHplcm8uCmlubGluZSBib29sIEF0b21pY1JlZkNvdW50RGVjTih2b2xhdGlsZSBB
dG9taWNSZWZDb3VudCAqcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWlj
UmVmQ291bnQgZGVjcmVtZW50KSB7CiAgYm9vbCByZXMgPSAoc3VidGxlOjpCYXJyaWVyX0F0b21p
Y0luY3JlbWVudChwdHIsIC1kZWNyZW1lbnQpICE9IDApOwogIGlmICghcmVzKSB7CiAgfQogIHJl
dHVybiByZXM7Cn0KCi8vIEluY3JlbWVudCBhIHJlZmVyZW5jZSBjb3VudCBieSAxLgppbmxpbmUg
dm9pZCBBdG9taWNSZWZDb3VudEluYyh2b2xhdGlsZSBBdG9taWNSZWZDb3VudCAqcHRyKSB7CiAg
YmFzZTo6QXRvbWljUmVmQ291bnRJbmNOKHB0ciwgMSk7Cn0KCi8vIERlY3JlbWVudCBhIHJlZmVy
ZW5jZSBjb3VudCBieSAxIGFuZCByZXR1cm4gd2hldGhlciB0aGUgcmVzdWx0IGlzIG5vbi16ZXJv
LgovLyBJbnNlcnQgYmFycmllcnMgdG8gZW5zdXJlIHRoYXQgc3RhdGUgd3JpdHRlbiBiZWZvcmUg
dGhlIHJlZmVyZW5jZSBjb3VudAovLyBiZWNhbWUgemVybyB3aWxsIGJlIHZpc2libGUgdG8gYSB0
aHJlYWQgdGhhdCBoYXMganVzdCBtYWRlIHRoZSBjb3VudCB6ZXJvLgppbmxpbmUgYm9vbCBBdG9t
aWNSZWZDb3VudERlYyh2b2xhdGlsZSBBdG9taWNSZWZDb3VudCAqcHRyKSB7CiAgcmV0dXJuIGJh
c2U6OkF0b21pY1JlZkNvdW50RGVjTihwdHIsIDEpOwp9Cgp9ICAvLyBuYW1lc3BhY2UgYmFzZQoK
I2VuZGlmICAvLyBCQVNFX0FUT01JQ19SRUZfQ09VTlRfSF8KCiNpZm5kZWYgQkFTRV9SRUZfQ09V
TlRFRF9IXwojZGVmaW5lIEJBU0VfUkVGX0NPVU5URURfSF8KCm5hbWVzcGFjZSBiYXNlIHsKCm5h
bWVzcGFjZSBzdWJ0bGUgewoKY2xhc3MgUmVmQ291bnRlZEJhc2UgewogcHVibGljOgogIHN0YXRp
YyBib29sIEltcGxlbWVudHNUaHJlYWRTYWZlUmVmZXJlbmNlQ291bnRpbmcoKSB7IHJldHVybiBm
YWxzZTsgfQoKIHByb3RlY3RlZDoKICBSZWZDb3VudGVkQmFzZSgpOwogIH5SZWZDb3VudGVkQmFz
ZSgpOwoKICB2b2lkIEFkZFJlZigpOwoKICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBz
aG91bGQgc2VsZi1kZWxldGUuCiAgYm9vbCBSZWxlYXNlKCk7CgogcHJpdmF0ZToKICBpbnQgcmVm
X2NvdW50XzsKICBib29sIGluX2R0b3JfOwoKICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVm
Q291bnRlZEJhc2UpOwp9OwoKY2xhc3MgUmVmQ291bnRlZFRocmVhZFNhZmVCYXNlIHsKIHB1Ymxp
YzoKICBzdGF0aWMgYm9vbCBJbXBsZW1lbnRzVGhyZWFkU2FmZVJlZmVyZW5jZUNvdW50aW5nKCkg
eyByZXR1cm4gdHJ1ZTsgfQoKICBSZWZDb3VudGVkVGhyZWFkU2FmZUJhc2UoKTsKICB+UmVmQ291
bnRlZFRocmVhZFNhZmVCYXNlKCkge307CgogIHZvaWQgQWRkUmVmKCk7CiAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBvYmplY3Qgc2hvdWxkIHNlbGYtZGVsZXRlLgogIGJvb2wgUmVsZWFzZSgpIHsK
ICBpZiAoIUF0b21pY1JlZkNvdW50RGVjKCZyZWZfY291bnRfKSkgewogICAgaW5fZHRvcl8gPSB0
cnVlOwogICAgcmV0dXJuIHRydWU7CiAgfQogIHJldHVybiBmYWxzZTsKfQoKCiBwcm90ZWN0ZWQ6
CgogcHJpdmF0ZToKICBBdG9taWNSZWZDb3VudCByZWZfY291bnRfOwogIGJvb2wgaW5fZHRvcl87
CgogIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZWZDb3VudGVkVGhyZWFkU2FmZUJhc2UpOwp9
OwoKUmVmQ291bnRlZFRocmVhZFNhZmVCYXNlOjpSZWZDb3VudGVkVGhyZWFkU2FmZUJhc2UoKSA6
IHJlZl9jb3VudF8oMCkgewogIGluX2R0b3JfID0gZmFsc2U7Cn0KCgp2b2lkIFJlZkNvdW50ZWRU
aHJlYWRTYWZlQmFzZTo6QWRkUmVmKCkgewogIEF0b21pY1JlZkNvdW50SW5jKCZyZWZfY291bnRf
KTsKfQoKfSAgLy8gbmFtZXNwYWNlIHN1YnRsZQoKLy8KLy8gQSBiYXNlIGNsYXNzIGZvciByZWZl
cmVuY2UgY291bnRlZCBjbGFzc2VzLiAgT3RoZXJ3aXNlLCBrbm93biBhcyBhIGNoZWFwCi8vIGtu
b2NrLW9mZiBvZiBXZWJLaXQncyBSZWZDb3VudGVkPFQ+IGNsYXNzLiAgVG8gdXNlIHRoaXMgZ3V5
IGp1c3QgZXh0ZW5kIHlvdXIKLy8gY2xhc3MgZnJvbSBpdCBsaWtlIHNvOgovLwovLyAgIGNsYXNz
IE15Rm9vIDogcHVibGljIGJhc2U6OlJlZkNvdW50ZWQ8TXlGb28+IHsKLy8gICAgLi4uCi8vICAg
IHByaXZhdGU6Ci8vICAgICBmcmllbmQgY2xhc3MgYmFzZTo6UmVmQ291bnRlZDxNeUZvbz47Ci8v
ICAgICB+TXlGb28oKTsKLy8gICB9OwovLwovLyBZb3Ugc2hvdWxkIGFsd2F5cyBtYWtlIHlvdXIg
ZGVzdHJ1Y3RvciBwcml2YXRlLCB0byBhdm9pZCBhbnkgY29kZSBkZWxldGluZwovLyB0aGUgb2Jq
ZWN0IGFjY2lkZW50bHkgd2hpbGUgdGhlcmUgYXJlIHJlZmVyZW5jZXMgdG8gaXQuCnRlbXBsYXRl
IDxjbGFzcyBUPgpjbGFzcyBSZWZDb3VudGVkIDogcHVibGljIHN1YnRsZTo6UmVmQ291bnRlZEJh
c2UgewogcHVibGljOgogIFJlZkNvdW50ZWQoKSB7IH0KICB+UmVmQ291bnRlZCgpIHsgfQoKICB2
b2lkIEFkZFJlZigpIHsKICAgIHN1YnRsZTo6UmVmQ291bnRlZEJhc2U6OkFkZFJlZigpOwogIH0K
CiAgdm9pZCBSZWxlYXNlKCkgewogICAgaWYgKHN1YnRsZTo6UmVmQ291bnRlZEJhc2U6OlJlbGVh
c2UoKSkgewogICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOwogICAgfQogIH0KCiBw
cml2YXRlOgogIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZWZDb3VudGVkPFQ+KTsKfTsKCi8v
IEZvcndhcmQgZGVjbGFyYXRpb24uCnRlbXBsYXRlIDxjbGFzcyBULCB0eXBlbmFtZSBUcmFpdHM+
IGNsYXNzIFJlZkNvdW50ZWRUaHJlYWRTYWZlOwoKLy8gRGVmYXVsdCB0cmFpdHMgZm9yIFJlZkNv
dW50ZWRUaHJlYWRTYWZlPFQ+LiAgRGVsZXRlcyB0aGUgb2JqZWN0IHdoZW4gaXRzIHJlZgovLyBj
b3VudCByZWFjaGVzIDAuICBPdmVybG9hZCB0byBkZWxldGUgaXQgb24gYSBkaWZmZXJlbnQgdGhy
ZWFkIGV0Yy4KdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IERlZmF1bHRSZWZDb3VudGVkVGhy
ZWFkU2FmZVRyYWl0cyB7CiAgc3RhdGljIHZvaWQgRGVzdHJ1Y3QoVCogeCkgewogICAgLy8gRGVs
ZXRlIHRocm91Z2ggUmVmQ291bnRlZFRocmVhZFNhZmUgdG8gbWFrZSBjaGlsZCBjbGFzc2VzIG9u
bHkgbmVlZCB0byBiZQogICAgLy8gZnJpZW5kIHdpdGggUmVmQ291bnRlZFRocmVhZFNhZmUgaW5z
dGVhZCBvZiB0aGlzIHN0cnVjdCwgd2hpY2ggaXMgYW4KICAgIC8vIGltcGxlbWVudGF0aW9uIGRl
dGFpbC4KICAgIFJlZkNvdW50ZWRUaHJlYWRTYWZlPFQsIERlZmF1bHRSZWZDb3VudGVkVGhyZWFk
U2FmZVRyYWl0cz46OkRlbGV0ZUludGVybmFsKHgpOwogIH0KfTsKCi8vCi8vIEEgdGhyZWFkLXNh
ZmUgdmFyaWFudCBvZiBSZWZDb3VudGVkPFQ+Ci8vCi8vICAgY2xhc3MgTXlGb28gOiBwdWJsaWMg
YmFzZTo6UmVmQ291bnRlZFRocmVhZFNhZmU8TXlGb28+IHsKLy8gICAgLi4uCi8vICAgfTsKLy8K
Ly8gSWYgeW91J3JlIHVzaW5nIHRoZSBkZWZhdWx0IHRyYWl0LCB0aGVuIHlvdSBzaG91bGQgYWRk
IGNvbXBpbGUgdGltZQovLyBhc3NlcnRzIHRoYXQgbm8gb25lIGVsc2UgaXMgZGVsZXRpbmcgeW91
ciBvYmplY3QuICBpLmUuCi8vICAgIHByaXZhdGU6Ci8vICAgICBmcmllbmQgY2xhc3MgYmFzZTo6
UmVmQ291bnRlZFRocmVhZFNhZmU8TXlGb28+OwovLyAgICAgfk15Rm9vKCk7CnRlbXBsYXRlIDxj
bGFzcyBULCB0eXBlbmFtZSBUcmFpdHMgPSBEZWZhdWx0UmVmQ291bnRlZFRocmVhZFNhZmVUcmFp
dHM8VD4gPgpjbGFzcyBSZWZDb3VudGVkVGhyZWFkU2FmZSA6IHB1YmxpYyBzdWJ0bGU6OlJlZkNv
dW50ZWRUaHJlYWRTYWZlQmFzZSB7CiBwdWJsaWM6CiAgUmVmQ291bnRlZFRocmVhZFNhZmUoKSB7
IH0KICB+UmVmQ291bnRlZFRocmVhZFNhZmUoKSB7IH0KCiAgdm9pZCBBZGRSZWYoKSB7CiAgICBz
dWJ0bGU6OlJlZkNvdW50ZWRUaHJlYWRTYWZlQmFzZTo6QWRkUmVmKCk7CiAgfQoKICB2b2lkIFJl
bGVhc2UoKSB7CiAgICBpZiAoc3VidGxlOjpSZWZDb3VudGVkVGhyZWFkU2FmZUJhc2U6OlJlbGVh
c2UoKSkgewogICAgICBUcmFpdHM6OkRlc3RydWN0KHN0YXRpY19jYXN0PFQqPih0aGlzKSk7CiAg
ICB9CiAgfQoKIHByaXZhdGU6CiAgZnJpZW5kIHN0cnVjdCBEZWZhdWx0UmVmQ291bnRlZFRocmVh
ZFNhZmVUcmFpdHM8VD47CiAgc3RhdGljIHZvaWQgRGVsZXRlSW50ZXJuYWwoVCogeCkgeyBkZWxl
dGUgeDsgfQoKICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVmQ291bnRlZFRocmVhZFNhZmUp
Owp9OwoKfSAgLy8gbmFtZXNwYWNlIGJhc2UKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3Mgc2Nv
cGVkX3JlZnB0ciB7CiBwdWJsaWM6CiAgc2NvcGVkX3JlZnB0cigpIDogcHRyXyhOVUxMKSB7CiAg
fQoKICBzY29wZWRfcmVmcHRyKFQqIHApIDogcHRyXyhwKSB7CiAgICBpZiAocHRyXykKICAgICAg
cHRyXy0+QWRkUmVmKCk7CiAgfQoKICBzY29wZWRfcmVmcHRyKGNvbnN0IHNjb3BlZF9yZWZwdHI8
VD4mIHIpIDogcHRyXyhyLnB0cl8pIHsKICAgIGlmIChwdHJfKQogICAgICBwdHJfLT5BZGRSZWYo
KTsKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgogIHNjb3BlZF9yZWZwdHIoY29uc3Qgc2Nv
cGVkX3JlZnB0cjxVPiYgcikgOiBwdHJfKHIuZ2V0KCkpIHsKICAgIGlmIChwdHJfKQogICAgICBw
dHJfLT5BZGRSZWYoKTsKICB9CgogIH5zY29wZWRfcmVmcHRyKCkgewogICAgaWYgKHB0cl8pCiAg
ICAgIHB0cl8tPlJlbGVhc2UoKTsKICB9CgogIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIHB0cl87
IH0KICBvcGVyYXRvciBUKigpIGNvbnN0IHsgcmV0dXJuIHB0cl87IH0KICBUKiBvcGVyYXRvci0+
KCkgY29uc3QgeyByZXR1cm4gcHRyXzsgfQoKICAvLyBSZWxlYXNlIGEgcG9pbnRlci4KICAvLyBU
aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBjdXJyZW50IHBvaW50ZXIgaGVsZCBieSB0aGlzIG9iamVj
dC4KICAvLyBJZiB0aGlzIG9iamVjdCBob2xkcyBhIE5VTEwgcG9pbnRlciwgdGhlIHJldHVybiB2
YWx1ZSBpcyBOVUxMLgogIC8vIEFmdGVyIHRoaXMgb3BlcmF0aW9uLCB0aGlzIG9iamVjdCB3aWxs
IGhvbGQgYSBOVUxMIHBvaW50ZXIsCiAgLy8gYW5kIHdpbGwgbm90IG93biB0aGUgb2JqZWN0IGFu
eSBtb3JlLgogIFQqIHJlbGVhc2UoKSB7CiAgICBUKiByZXRWYWwgPSBwdHJfOwogICAgcHRyXyA9
IE5VTEw7CiAgICByZXR1cm4gcmV0VmFsOwogIH0KCiAgc2NvcGVkX3JlZnB0cjxUPiYgb3BlcmF0
b3I9KFQqIHApIHsKICAgIC8vIEFkZFJlZiBmaXJzdCBzbyB0aGF0IHNlbGYgYXNzaWdubWVudCBz
aG91bGQgd29yawogICAgaWYgKHApCiAgICAgIHAtPkFkZFJlZigpOwogICAgaWYgKHB0cl8gKQog
ICAgICBwdHJfIC0+UmVsZWFzZSgpOwogICAgcHRyXyA9IHA7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQoKICBzY29wZWRfcmVmcHRyPFQ+JiBvcGVyYXRvcj0oY29uc3Qgc2NvcGVkX3JlZnB0cjxUPiYg
cikgewogICAgcmV0dXJuICp0aGlzID0gci5wdHJfOwogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1l
IFU+CiAgc2NvcGVkX3JlZnB0cjxUPiYgb3BlcmF0b3I9KGNvbnN0IHNjb3BlZF9yZWZwdHI8VT4m
IHIpIHsKICAgIHJldHVybiAqdGhpcyA9IHIuZ2V0KCk7CiAgfQoKICB2b2lkIHN3YXAoVCoqIHBw
KSB7CiAgICBUKiBwID0gcHRyXzsKICAgIHB0cl8gPSAqcHA7CiAgICAqcHAgPSBwOwogIH0KCiAg
dm9pZCBzd2FwKHNjb3BlZF9yZWZwdHI8VD4mIHIpIHsKICAgIHN3YXAoJnIucHRyXyk7CiAgfQoK
IHByb3RlY3RlZDoKICBUKiBwdHJfOwp9OwoKI2VuZGlmICAvLyBCQVNFX1JFRl9DT1VOVEVEX0hf
CgojaWZuZGVmIEJBU0VfVEFTS19IXwojZGVmaW5lIEJBU0VfVEFTS19IXwoKY2xhc3MgVGFzayB7
CiBwdWJsaWM6CiAgVGFzaygpIHt9CiAgdmlydHVhbCB+VGFzaygpIHt9CgogIC8vIFRhc2tzIGFy
ZSBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQgYWZ0ZXIgUnVuIGlzIGNhbGxlZC4KICB2aXJ0dWFsIHZv
aWQgUnVuKCkgPSAwOwp9OwoKI2VuZGlmICAvLyBCQVNFX1RBU0tfSF8KCiNpZm5kZWYgQkFTRV9M
QVpZX0lOU1RBTkNFX0hfCiNkZWZpbmUgQkFTRV9MQVpZX0lOU1RBTkNFX0hfCgpuYW1lc3BhY2Ug
YmFzZSB7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4Kc3RydWN0IERlZmF1bHRMYXp5SW5zdGFu
Y2VUcmFpdHMgewogIHN0YXRpYyB2b2lkIE5ldyh2b2lkKiBpbnN0YW5jZSkgewogICAgLy8gVXNl
IHBsYWNlbWVudCBuZXcgdG8gaW5pdGlhbGl6ZSBvdXIgaW5zdGFuY2UgaW4gb3VyIHByZWFsbG9j
YXRlZCBzcGFjZS4KICAgIC8vIFRoZSBwYXJlbnRoZXNpcyBpcyB2ZXJ5IGltcG9ydGFudCBoZXJl
IHRvIGZvcmNlIFBPRCB0eXBlIGluaXRpYWxpemF0aW9uLgogICAgbmV3IChpbnN0YW5jZSkgVHlw
ZSgpOwogIH0KICBzdGF0aWMgdm9pZCBEZWxldGUodm9pZCogaW5zdGFuY2UpIHsKICAgIC8vIEV4
cGxpY2l0bHkgY2FsbCB0aGUgZGVzdHJ1Y3Rvci4KICAgIHJlaW50ZXJwcmV0X2Nhc3Q8VHlwZSo+
KGluc3RhbmNlKS0+flR5cGUoKTsKICB9Cn07CgovLyBXZSBwdWxsIG91dCBzb21lIG9mIHRoZSBm
dW5jdGlvbmFsaXR5IGludG8gYSBub24tdGVtcGxhdGVkIGJhc2UsIHNvIHRoYXQgd2UKLy8gY2Fu
IGltcGxlbWVudCB0aGUgbW9yZSBjb21wbGljYXRlZCBwaWVjZXMgb3V0IG9mIGxpbmUgaW4gdGhl
IC5jYyBmaWxlLgpjbGFzcyBMYXp5SW5zdGFuY2VIZWxwZXIgewogcHJvdGVjdGVkOgogIGVudW0g
ewogICAgU1RBVEVfRU1QVFkgICAgPSAwLAogICAgU1RBVEVfQ1JFQVRJTkcgPSAxLAogICAgU1RB
VEVfQ1JFQVRFRCAgPSAyCiAgfTsKCiAgZXhwbGljaXQgTGF6eUluc3RhbmNlSGVscGVyKExpbmtl
ckluaXRpYWxpemVkIHgpIHsgLyogc3RhdGVfIGlzIDAgKi8gfQogIC8vIERlY2xhcmluZyBhIGRl
c3RydWN0b3IgKGV2ZW4gaWYgaXQncyBlbXB0eSkgd2lsbCBjYXVzZSBNU1ZDIHRvIHJlZ2lzdGVy
IGEKICAvLyBzdGF0aWMgaW5pdGlhbGl6ZXIgdG8gcmVnaXN0ZXIgdGhlIGVtcHR5IGRlc3RydWN0
b3Igd2l0aCBhdGV4aXQoKS4KCiAgLy8gTWFrZSBzdXJlIHRoYXQgaW5zdGFuY2UgaXMgY3JlYXRl
ZCwgY3JlYXRpbmcgb3Igd2FpdGluZyBmb3IgaXQgdG8gYmUKICAvLyBjcmVhdGVkIGlmIG5lY2Nl
c3NhcnkuICBDb25zdHJ1Y3RzIHdpdGggfGN0b3J8IGluIHRoZSBzcGFjZSBwcm92aWRlZCBieQog
IC8vIHxpbnN0YW5jZXwgYW5kIHJlZ2lzdGVycyBkdG9yIGZvciBkZXN0cnVjdGlvbiBhdCBwcm9n
cmFtIGV4aXQuCiAgdm9pZCBFbnN1cmVJbnN0YW5jZSh2b2lkKiBpbnN0YW5jZSwgdm9pZCAoKmN0
b3IpKHZvaWQqKSwgdm9pZCAoKmR0b3IpKHZvaWQqKSk7CgogIGJhc2U6OnN1YnRsZTo6QXRvbWlj
MzIgc3RhdGVfOwoKIHByaXZhdGU6CiAgLy8gUmVzZXRzIHN0YXRlIG9mIHxoZWxwZXJ8IHRvIFNU
QVRFX0VNUFRZIHNvIHRoYXQgaXQgY2FuIGJlIHJldXNlZC4KICAvLyBOb3QgdGhyZWFkIHNhZmUu
CiAgc3RhdGljIHZvaWQgUmVzZXRTdGF0ZSh2b2lkKiBoZWxwZXIpIHsKICByZWludGVycHJldF9j
YXN0PExhenlJbnN0YW5jZUhlbHBlcio+KGhlbHBlciktPnN0YXRlXyA9IFNUQVRFX0VNUFRZOwp9
CgogIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihMYXp5SW5zdGFuY2VIZWxwZXIpOwp9OwoKdGVt
cGxhdGUgPHR5cGVuYW1lIFR5cGUsIHR5cGVuYW1lIFRyYWl0cyA9IERlZmF1bHRMYXp5SW5zdGFu
Y2VUcmFpdHM8VHlwZT4gPgpjbGFzcyBMYXp5SW5zdGFuY2UgOiBwdWJsaWMgTGF6eUluc3RhbmNl
SGVscGVyIHsKIHB1YmxpYzoKICBleHBsaWNpdCBMYXp5SW5zdGFuY2UoTGlua2VySW5pdGlhbGl6
ZWQgeCkgOiBMYXp5SW5zdGFuY2VIZWxwZXIoeCkgeyB9CiAgLy8gRGVjbGFyaW5nIGEgZGVzdHJ1
Y3RvciAoZXZlbiBpZiBpdCdzIGVtcHR5KSB3aWxsIGNhdXNlIE1TVkMgdG8gcmVnaXN0ZXIgYQog
IC8vIHN0YXRpYyBpbml0aWFsaXplciB0byByZWdpc3RlciB0aGUgZW1wdHkgZGVzdHJ1Y3RvciB3
aXRoIGF0ZXhpdCgpLgoKICBUeXBlJiBHZXQoKSB7CiAgICByZXR1cm4gKlBvaW50ZXIoKTsKICB9
CgogIFR5cGUqIFBvaW50ZXIoKSB7CiAgICBUeXBlKiBpbnN0YW5jZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8VHlwZSo+KCZidWZfKTsKCiAgICAvLyBXZSB3aWxsIGhvcGVmdWxseSBoYXZlIGZhc3QgYWNj
ZXNzIHdoZW4gdGhlIGluc3RhbmNlIGlzIGFscmVhZHkgY3JlYXRlZC4KICAgIGlmIChiYXNlOjpz
dWJ0bGU6Ok5vQmFycmllcl9Mb2FkKCZzdGF0ZV8pICE9IFNUQVRFX0NSRUFURUQpCiAgICAgIEVu
c3VyZUluc3RhbmNlKGluc3RhbmNlLCBUcmFpdHM6Ok5ldywgVHJhaXRzOjpEZWxldGUpOwoKICAg
IHJldHVybiBpbnN0YW5jZTsKICB9CgogcHJpdmF0ZToKICBpbnQ4IGJ1Zl9bc2l6ZW9mKFR5cGUp
XTsgIC8vIFByZWFsbG9jYXRlIHRoZSBzcGFjZSBmb3IgdGhlIFR5cGUgaW5zdGFuY2UuCgogIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihMYXp5SW5zdGFuY2UpOwp9OwoKdm9pZCBMYXp5SW5zdGFu
Y2VIZWxwZXI6OkVuc3VyZUluc3RhbmNlKHZvaWQqIGluc3RhbmNlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmN0b3IpKHZvaWQqKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpkdG9yKSh2b2lkKikpIHsKICAvLyBU
cnkgdG8gY3JlYXRlIHRoZSBpbnN0YW5jZSwgaWYgd2UncmUgdGhlIGZpcnN0LCB3aWxsIGdvIGZy
b20gRU1QVFkKICAvLyB0byBDUkVBVElORywgb3RoZXJ3aXNlIHdlJ3ZlIGFscmVhZHkgYmVlbiBi
ZWF0ZW4gaGVyZS4KICBpZiAoYmFzZTo6c3VidGxlOjpBY3F1aXJlX0NvbXBhcmVBbmRTd2FwKAog
ICAgICAgICAgJnN0YXRlXywgU1RBVEVfRU1QVFksIFNUQVRFX0NSRUFUSU5HKSA9PSBTVEFURV9F
TVBUWSkgewogICAgLy8gQ3JlYXRlZCB0aGUgaW5zdGFuY2UgaW4gdGhlIHNwYWNlIHByb3ZpZGVk
IGJ5IHxpbnN0YW5jZXwuCiAgICBjdG9yKGluc3RhbmNlKTsKCiAgICAvLyBJbnN0YW5jZSBpcyBj
cmVhdGVkLCBnbyBmcm9tIENSRUFUSU5HIHRvIENSRUFURUQuCiAgICBiYXNlOjpzdWJ0bGU6OlJl
bGVhc2VfU3RvcmUoJnN0YXRlXywgU1RBVEVfQ1JFQVRFRCk7CgogIH0gZWxzZSB7CiAgICAvLyBJ
dCdzIGVpdGhlciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBjcmVhdGVkLCBvciBhbHJlYWR5IGNy
ZWF0ZWQuICBTcGluLgogICAgd2hpbGUgKGJhc2U6OnN1YnRsZTo6Tm9CYXJyaWVyX0xvYWQoJnN0
YXRlXykgIT0gU1RBVEVfQ1JFQVRFRCkKICAgICAgc2NoZWRfeWllbGQoKTsKICB9Cn0KCn0gIC8v
IG5hbWVzcGFjZSBiYXNlCgojZW5kaWYgIC8vIEJBU0VfTEFaWV9JTlNUQU5DRV9IXwoKI2lmbmRl
ZiBCQVNFX1RIUkVBRF9MT0NBTF9IXwojZGVmaW5lIEJBU0VfVEhSRUFEX0xPQ0FMX0hfCgpuYW1l
c3BhY2UgYmFzZSB7CgovLyBIZWxwZXIgZnVuY3Rpb25zIHRoYXQgYWJzdHJhY3QgdGhlIGNyb3Nz
LXBsYXRmb3JtIEFQSXMuICBEbyBub3QgdXNlIGRpcmVjdGx5LgpzdHJ1Y3QgVGhyZWFkTG9jYWxQ
bGF0Zm9ybSB7CiAgdHlwZWRlZiBwdGhyZWFkX2tleV90IFNsb3RUeXBlOwoKICBzdGF0aWMgdm9p
ZCBBbGxvY2F0ZVNsb3QoU2xvdFR5cGUmIHNsb3QpIHsKICAgIGludCBlcnJvciA9IHB0aHJlYWRf
a2V5X2NyZWF0ZSgmc2xvdCwgTlVMTCk7CiAgfQoKICBzdGF0aWMgdm9pZCBGcmVlU2xvdChTbG90
VHlwZSYgc2xvdCkgewogICAgaW50IGVycm9yID0gcHRocmVhZF9rZXlfZGVsZXRlKHNsb3QpOwog
IH0KCiAgc3RhdGljIHZvaWQqIEdldFZhbHVlRnJvbVNsb3QoU2xvdFR5cGUmIHNsb3QpIHsKICAg
IHJldHVybiBwdGhyZWFkX2dldHNwZWNpZmljKHNsb3QpOwogIH0KfTsKCnRlbXBsYXRlIDx0eXBl
bmFtZSBUeXBlPgpjbGFzcyBUaHJlYWRMb2NhbFBvaW50ZXIgewogcHVibGljOgogIFRocmVhZExv
Y2FsUG9pbnRlcigpIDogc2xvdF8oKSB7CiAgICBUaHJlYWRMb2NhbFBsYXRmb3JtOjpBbGxvY2F0
ZVNsb3Qoc2xvdF8pOwogIH0KCiAgflRocmVhZExvY2FsUG9pbnRlcigpIHsKICAgIFRocmVhZExv
Y2FsUGxhdGZvcm06OkZyZWVTbG90KHNsb3RfKTsKICB9CgogIFR5cGUqIEdldCgpIHsKICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUeXBlKj4oVGhyZWFkTG9jYWxQbGF0Zm9ybTo6R2V0VmFsdWVGcm9t
U2xvdChzbG90XykpOwogIH0KCgogcHJpdmF0ZToKICB0eXBlZGVmIFRocmVhZExvY2FsUGxhdGZv
cm06OlNsb3RUeXBlIFNsb3RUeXBlOwoKICBTbG90VHlwZSBzbG90XzsKCiAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFRocmVhZExvY2FsUG9pbnRlcjxUeXBlPik7Cn07Cgp9ICAvLyBuYW1lc3Bh
Y2UgYmFzZQoKI2VuZGlmICAvLyBCQVNFX1RIUkVBRF9MT0NBTF9IXwoKY2xhc3MgTWVzc2FnZUxv
b3A7Ci8vIEEgbGF6aWx5IGNyZWF0ZWQgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgZm9yIHF1aWNrIGFj
Y2VzcyB0byBhIHRocmVhZCdzIG1lc3NhZ2UKLy8gbG9vcCwgaWYgb25lIGV4aXN0cy4gIFRoaXMg
c2hvdWxkIGJlIHNhZmUgYW5kIGZyZWUgb2Ygc3RhdGljIGNvbnN0cnVjdG9ycy4Kc3RhdGljIGJh
c2U6OkxhenlJbnN0YW5jZTxiYXNlOjpUaHJlYWRMb2NhbFBvaW50ZXI8TWVzc2FnZUxvb3A+ID4g
bGF6eV90bHNfcHRyKAogICAgYmFzZTo6TElOS0VSX0lOSVRJQUxJWkVEKTsKCiNpZm5kZWYgQkFT
RV9TQ09QRURfUFRSX0hfCiNkZWZpbmUgQkFTRV9TQ09QRURfUFRSX0hfCgp0ZW1wbGF0ZSA8Y2xh
c3MgQz4KY2xhc3Mgc2NvcGVkX3B0ciB7CiBwdWJsaWM6CgogIC8vIFRoZSBlbGVtZW50IHR5cGUK
ICB0eXBlZGVmIEMgZWxlbWVudF90eXBlOwoKICAvLyBDb25zdHJ1Y3Rvci4gIERlZmF1bHRzIHRv
IGludGlhbGl6aW5nIHdpdGggTlVMTC4KICAvLyBUaGVyZSBpcyBubyB3YXkgdG8gY3JlYXRlIGFu
IHVuaW5pdGlhbGl6ZWQgc2NvcGVkX3B0ci4KICAvLyBUaGUgaW5wdXQgcGFyYW1ldGVyIG11c3Qg
YmUgYWxsb2NhdGVkIHdpdGggbmV3LgogIGV4cGxpY2l0IHNjb3BlZF9wdHIoQyogcCA9IE5VTEwp
IDogcHRyXyhwKSB7IH0KCiAgLy8gRGVzdHJ1Y3Rvci4gIElmIHRoZXJlIGlzIGEgQyBvYmplY3Qs
IGRlbGV0ZSBpdC4KICAvLyBXZSBkb24ndCBuZWVkIHRvIHRlc3QgcHRyXyA9PSBOVUxMIGJlY2F1
c2UgQysrIGRvZXMgdGhhdCBmb3IgdXMuCiAgfnNjb3BlZF9wdHIoKSB7CiAgICBlbnVtIHsgdHlw
ZV9tdXN0X2JlX2NvbXBsZXRlID0gc2l6ZW9mKEMpIH07CiAgICBkZWxldGUgcHRyXzsKICB9Cgog
IC8vIFJlc2V0LiAgRGVsZXRlcyB0aGUgY3VycmVudCBvd25lZCBvYmplY3QsIGlmIGFueS4KICAv
LyBUaGVuIHRha2VzIG93bmVyc2hpcCBvZiBhIG5ldyBvYmplY3QsIGlmIGdpdmVuLgogIC8vIHRo
aXMtPnJlc2V0KHRoaXMtPmdldCgpKSB3b3Jrcy4KICB2b2lkIHJlc2V0KEMqIHAgPSBOVUxMKSB7
CiAgICBpZiAocCAhPSBwdHJfKSB7CiAgICAgIGVudW0geyB0eXBlX211c3RfYmVfY29tcGxldGUg
PSBzaXplb2YoQykgfTsKICAgICAgZGVsZXRlIHB0cl87CiAgICAgIHB0cl8gPSBwOwogICAgfQog
IH0KCiAgLy8gQWNjZXNzb3JzIHRvIGdldCB0aGUgb3duZWQgb2JqZWN0LgogIC8vIG9wZXJhdG9y
KiBhbmQgb3BlcmF0b3ItPiB3aWxsIGFzc2VydCgpIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgb2Jq
ZWN0LgogIEMmIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIC8vYXNzZXJ0KHB0cl8gIT0gTlVMTCk7
CiAgICByZXR1cm4gKnB0cl87CiAgfQogIEMqIG9wZXJhdG9yLT4oKSBjb25zdCAgewogICAgLy9h
c3NlcnQocHRyXyAhPSBOVUxMKTsKICAgIHJldHVybiBwdHJfOwogIH0KICBDKiBnZXQoKSBjb25z
dCB7IHJldHVybiBwdHJfOyB9CgogcHJpdmF0ZToKICBDKiBwdHJfOwoKICAvLyBGb3JiaWQgY29t
cGFyaXNvbiBvZiBzY29wZWRfcHRyIHR5cGVzLiAgSWYgQzIgIT0gQywgaXQgdG90YWxseSBkb2Vz
bid0CiAgLy8gbWFrZSBzZW5zZSwgYW5kIGlmIEMyID09IEMsIGl0IHN0aWxsIGRvZXNuJ3QgbWFr
ZSBzZW5zZSBiZWNhdXNlIHlvdSBzaG91bGQKICAvLyBuZXZlciBoYXZlIHRoZSBzYW1lIG9iamVj
dCBvd25lZCBieSB0d28gZGlmZmVyZW50IHNjb3BlZF9wdHJzLgogIHRlbXBsYXRlIDxjbGFzcyBD
Mj4gYm9vbCBvcGVyYXRvcj09KHNjb3BlZF9wdHI8QzI+IGNvbnN0JiBwMikgY29uc3Q7CiAgdGVt
cGxhdGUgPGNsYXNzIEMyPiBib29sIG9wZXJhdG9yIT0oc2NvcGVkX3B0cjxDMj4gY29uc3QmIHAy
KSBjb25zdDsKCiAgLy8gRGlzYWxsb3cgZXZpbCBjb25zdHJ1Y3RvcnMKICBzY29wZWRfcHRyKGNv
bnN0IHNjb3BlZF9wdHImKTsKICB2b2lkIG9wZXJhdG9yPShjb25zdCBzY29wZWRfcHRyJik7Cn07
CgojZW5kaWYgIC8vIEJBU0VfU0NPUEVEX1BUUl9IXwoKI2lmbmRlZiBCQVNFX01FU1NBR0VfTE9P
UF9IXwojZGVmaW5lIEJBU0VfTUVTU0FHRV9MT09QX0hfCgpjbGFzcyBNZXNzYWdlTG9vcCAgewog
cHVibGljOgogIHZvaWQgUG9zdFRhc2soVGFzayogdGFzayk7CgogIC8vIFJ1biB0aGUgbWVzc2Fn
ZSBsb29wLgogIHZvaWQgUnVuKCk7CgogIC8vIE5vcm1hbGx5LCBpdCBpcyBub3QgbmVjZXNzYXJ5
IHRvIGluc3RhbnRpYXRlIGEgTWVzc2FnZUxvb3AuICBJbnN0ZWFkLCBpdAogIC8vIGlzIHR5cGlj
YWwgdG8gbWFrZSB1c2Ugb2YgdGhlIGN1cnJlbnQgdGhyZWFkJ3MgTWVzc2FnZUxvb3AgaW5zdGFu
Y2UuCiAgZXhwbGljaXQgTWVzc2FnZUxvb3AoKTsKICB+TWVzc2FnZUxvb3AoKTsKCiAgLy8gUmV0
dXJucyB0aGUgTWVzc2FnZUxvb3Agb2JqZWN0IGZvciB0aGUgY3VycmVudCB0aHJlYWQsIG9yIG51
bGwgaWYgbm9uZS4KICBzdGF0aWMgTWVzc2FnZUxvb3AqIGN1cnJlbnQoKSB7CiAgICByZXR1cm4g
bGF6eV90bHNfcHRyLlBvaW50ZXIoKS0+R2V0KCk7CiAgfQogcHJvdGVjdGVkOgoKICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oTWVzc2FnZUxvb3ApOwp9OwoKI2VuZGlmICAvLyBCQVNFX01FU1NB
R0VfTE9PUF9IXwoKI2lmbmRlZiBCQVNFX0NPTkRJVElPTl9WQVJJQUJMRV9IXwojZGVmaW5lIEJB
U0VfQ09ORElUSU9OX1ZBUklBQkxFX0hfCgpjbGFzcyBDb25kaXRpb25WYXJpYWJsZSB7CiBwdWJs
aWM6CiAgLy8gQ29uc3RydWN0IGEgY3YgZm9yIHVzZSB3aXRoIE9OTFkgb25lIHVzZXIgbG9jay4K
ICBleHBsaWNpdCBDb25kaXRpb25WYXJpYWJsZShMb2NrKiB1c2VyX2xvY2spOwoKICB+Q29uZGl0
aW9uVmFyaWFibGUoKTsKCiAgLy8gV2FpdCgpIHJlbGVhc2VzIHRoZSBjYWxsZXIncyBjcml0aWNh
bCBzZWN0aW9uIGF0b21pY2FsbHkgYXMgaXQgc3RhcnRzIHRvCiAgLy8gc2xlZXAsIGFuZCB0aGUg
cmVhY3F1aXJlcyBpdCB3aGVuIGl0IGlzIHNpZ25hbGVkLgogIHZvaWQgV2FpdCgpOwoKICAvLyBC
cm9hZGNhc3QoKSByZXZpdmVzIGFsbCB3YWl0aW5nIHRocmVhZHMuCiAgdm9pZCBCcm9hZGNhc3Qo
KSB7CiAgaW50IHJ2ID0gcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmY29uZGl0aW9uXyk7Cn0KCiAg
Ly8gU2lnbmFsKCkgcmV2aXZlcyBvbmUgd2FpdGluZyB0aHJlYWQuCiAgdm9pZCBTaWduYWwoKTsK
CiBwcml2YXRlOgogIHB0aHJlYWRfY29uZF90IGNvbmRpdGlvbl87CiAgcHRocmVhZF9tdXRleF90
KiB1c2VyX211dGV4XzsKCiAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKENvbmRpdGlvblZhcmlh
YmxlKTsKfTsKCkNvbmRpdGlvblZhcmlhYmxlOjpDb25kaXRpb25WYXJpYWJsZShMb2NrKiB1c2Vy
X2xvY2spCiAgICA6IHVzZXJfbXV0ZXhfKHVzZXJfbG9jay0+bG9ja19pbXBsKCktPm9zX2xvY2so
KSkgewogIGludCBydiA9IHB0aHJlYWRfY29uZF9pbml0KCZjb25kaXRpb25fLCBOVUxMKTsKfQoK
Q29uZGl0aW9uVmFyaWFibGU6On5Db25kaXRpb25WYXJpYWJsZSgpIHsKICBpbnQgcnYgPSBwdGhy
ZWFkX2NvbmRfZGVzdHJveSgmY29uZGl0aW9uXyk7Cn0KCnZvaWQgQ29uZGl0aW9uVmFyaWFibGU6
OldhaXQoKSB7CiAgaW50IHJ2ID0gcHRocmVhZF9jb25kX3dhaXQoJmNvbmRpdGlvbl8sIHVzZXJf
bXV0ZXhfKTsKfQoKI2VuZGlmICAvLyBCQVNFX0NPTkRJVElPTl9WQVJJQUJMRV9IXwoKCgojaWZu
ZGVmIEJBU0VfV0FJVEFCTEVfRVZFTlRfSF8KI2RlZmluZSBCQVNFX1dBSVRBQkxFX0VWRU5UX0hf
CgpuYW1lc3BhY2UgYmFzZSB7CgpjbGFzcyBXYWl0YWJsZUV2ZW50IHsKIHB1YmxpYzoKICAvLyBJ
ZiBtYW51YWxfcmVzZXQgaXMgdHJ1ZSwgdGhlbiB0byBzZXQgdGhlIGV2ZW50IHN0YXRlIHRvIG5v
bi1zaWduYWxlZCwgYQogIC8vIGNvbnN1bWVyIG11c3QgY2FsbCB0aGUgUmVzZXQgbWV0aG9kLiAg
SWYgdGhpcyBwYXJhbWV0ZXIgaXMgZmFsc2UsIHRoZW4gdGhlCiAgLy8gc3lzdGVtIGF1dG9tYXRp
Y2FsbHkgcmVzZXRzIHRoZSBldmVudCBzdGF0ZSB0byBub24tc2lnbmFsZWQgYWZ0ZXIgYSBzaW5n
bGUKICAvLyB3YWl0aW5nIHRocmVhZCBoYXMgYmVlbiByZWxlYXNlZC4KICBXYWl0YWJsZUV2ZW50
KGJvb2wgbWFudWFsX3Jlc2V0LCBib29sIGluaXRpYWxseV9zaWduYWxlZCk7CgogIH5XYWl0YWJs
ZUV2ZW50KCk7CgogIC8vIFB1dCB0aGUgZXZlbnQgaW4gdGhlIHNpZ25hbGVkIHN0YXRlLiAgQ2F1
c2luZyBhbnkgdGhyZWFkIGJsb2NrZWQgb24gV2FpdAogIC8vIHRvIGJlIHdva2VuIHVwLgogIHZv
aWQgU2lnbmFsKCk7CgogIC8vIFdhaXQgaW5kZWZpbml0ZWx5IGZvciB0aGUgZXZlbnQgdG8gYmUg
c2lnbmFsZWQuICBSZXR1cm5zIHRydWUgaWYgdGhlIGV2ZW50CiAgLy8gd2FzIHNpZ25hbGVkLCBl
bHNlIGZhbHNlIGlzIHJldHVybmVkIHRvIGluZGljYXRlIHRoYXQgd2FpdGluZyBmYWlsZWQuCiAg
Ym9vbCBXYWl0KCk7CgogIC8vIFdhaXQgdXAgdW50aWwgbWF4X3RpbWUgaGFzIHBhc3NlZCBmb3Ig
dGhlIGV2ZW50IHRvIGJlIHNpZ25hbGVkLiAgUmV0dXJucwogIC8vIHRydWUgaWYgdGhlIGV2ZW50
IHdhcyBzaWduYWxlZC4gIElmIHRoaXMgbWV0aG9kIHJldHVybnMgZmFsc2UsIHRoZW4gaXQKICAv
LyBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHRoYXQgbWF4X3RpbWUgd2FzIGV4Y2VlZGVkLgog
IGJvb2wgVGltZWRXYWl0KCk7CgogIGNsYXNzIFdhaXRlciB7CiAgIHB1YmxpYzoKICAgIC8vIFNp
Z25hbCB0aGUgd2FpdGVyIHRvIHdha2UgdXAuCiAgICAvLwogICAgLy8gQ29uc2lkZXIgdGhlIGNh
c2Ugb2YgYSBXYWl0ZXIgd2hpY2ggaXMgaW4gbXVsdGlwbGUgV2FpdGFibGVFdmVudCdzCiAgICAv
LyB3YWl0LWxpc3RzLiBFYWNoIFdhaXRhYmxlRXZlbnQgaXMgYXV0b21hdGljLXJlc2V0IGFuZCB0
d28gb2YgdGhlbSBhcmUKICAgIC8vIHNpZ25hbGVkIGF0IHRoZSBzYW1lIHRpbWUuIE5vdywgZWFj
aCB3aWxsIHdha2Ugb25seSB0aGUgZmlyc3Qgd2FpdGVyIGluCiAgICAvLyB0aGUgd2FrZS1saXN0
IGJlZm9yZSByZXNldHRpbmcuIEhvd2V2ZXIsIGlmIHRob3NlIHR3byB3YWl0ZXJzIGhhcHBlbiB0
bwogICAgLy8gYmUgdGhlIHNhbWUgb2JqZWN0IChhcyBjYW4gaGFwcGVuIGlmIGFub3RoZXIgdGhy
ZWFkIGRpZG4ndCBoYXZlIGEgY2hhbmNlCiAgICAvLyB0byBkZXF1ZXVlIHRoZSB3YWl0ZXIgZnJv
bSB0aGUgb3RoZXIgd2FpdC1saXN0IGluIHRpbWUpLCB0d28gYXV0by1yZXNldHMKICAgIC8vIHdp
bGwgaGF2ZSBoYXBwZW5lZCwgYnV0IG9ubHkgb25lIHdhaXRlciBoYXMgYmVlbiBzaWduYWxlZCEK
ICAgIC8vCiAgICAvLyBCZWNhdXNlIG9mIHRoaXMsIGEgV2FpdGVyIG1heSAicmVqZWN0IiBhIHdh
a2UgYnkgcmV0dXJuaW5nIGZhbHNlLiBJbgogICAgLy8gdGhpcyBjYXNlLCB0aGUgYXV0by1yZXNl
dCBXYWl0YWJsZUV2ZW50IHNob3VsZG4ndCBhY3QgYXMgaWYgYW55dGhpbmcgaGFzCiAgICAvLyBi
ZWVuIG5vdGlmaWVkLgogICAgdmlydHVhbCBib29sIEZpcmUoV2FpdGFibGVFdmVudCogc2lnbmFs
aW5nX2V2ZW50KSA9IDA7CgogICAgLy8gV2FpdGVycyBtYXkgaW1wbGVtZW50IHRoaXMgaW4gb3Jk
ZXIgdG8gcHJvdmlkZSBhbiBleHRyYSBjb25kaXRpb24gZm9yCiAgICAvLyB0d28gV2FpdGVycyB0
byBiZSBjb25zaWRlcmVkIGVxdWFsLiBJbiBXYWl0YWJsZUV2ZW50OjpEZXF1ZXVlLCBpZiB0aGUK
ICAgIC8vIHBvaW50ZXJzIG1hdGNoIHRoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXMgYSBm
aW5hbCBjaGVjay4gU2VlIHRoZQogICAgLy8gY29tbWVudHMgaW4gfkhhbmRsZSBmb3Igd2h5Lgog
ICAgdmlydHVhbCBib29sIENvbXBhcmUodm9pZCogdGFnKSA9IDA7CiAgfTsKCiBwcml2YXRlOgog
IHN0cnVjdCBXYWl0YWJsZUV2ZW50S2VybmVsIDoKICAgICAgcHVibGljIFJlZkNvdW50ZWRUaHJl
YWRTYWZlPFdhaXRhYmxlRXZlbnRLZXJuZWw+IHsKICAgcHVibGljOgogICAgV2FpdGFibGVFdmVu
dEtlcm5lbChib29sIG1hbnVhbF9yZXNldCwgYm9vbCBpbml0aWFsbHlfc2lnbmFsZWQpCiAgICAg
ICAgOiBtYW51YWxfcmVzZXRfKG1hbnVhbF9yZXNldCksCiAgICAgICAgICBzaWduYWxlZF8oaW5p
dGlhbGx5X3NpZ25hbGVkKSB7CiAgICB9CgogICAgYm9vbCBEZXF1ZXVlKFdhaXRlciogd2FpdGVy
LCB2b2lkKiB0YWcpOwoKICAgIExvY2sgbG9ja187CiAgICBjb25zdCBib29sIG1hbnVhbF9yZXNl
dF87CiAgICBib29sIHNpZ25hbGVkXzsKICAgIHN0ZDo6bGlzdDxXYWl0ZXIqPiB3YWl0ZXJzXzsK
ICB9OwoKICBzY29wZWRfcmVmcHRyPFdhaXRhYmxlRXZlbnRLZXJuZWw+IGtlcm5lbF87CgogIGJv
b2wgU2lnbmFsQWxsKCk7CiAgYm9vbCBTaWduYWxPbmUoKTsKICB2b2lkIEVucXVldWUoV2FpdGVy
KiB3YWl0ZXIpOwoKICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oV2FpdGFibGVFdmVudCk7Cn07
Cgp9ICAvLyBuYW1lc3BhY2UgYmFzZQoKbmFtZXNwYWNlIGJhc2UgewoKLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLy8gVGhpcyBpcyBqdXN0IGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIHdha2lu
ZyB0aGUgdHdvIHR5cGVzIG9mIHdhaXRlcnMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2FpdGFi
bGVFdmVudDo6V2FpdGFibGVFdmVudChib29sIG1hbnVhbF9yZXNldCwgYm9vbCBpbml0aWFsbHlf
c2lnbmFsZWQpCiAgICA6IGtlcm5lbF8obmV3IFdhaXRhYmxlRXZlbnRLZXJuZWwobWFudWFsX3Jl
c2V0LCBpbml0aWFsbHlfc2lnbmFsZWQpKSB7Cn0KCldhaXRhYmxlRXZlbnQ6On5XYWl0YWJsZUV2
ZW50KCkgewp9Cgp2b2lkIFdhaXRhYmxlRXZlbnQ6OlNpZ25hbCgpIHsKICBBdXRvTG9jayBsb2Nr
ZWQoa2VybmVsXy0+bG9ja18pOwoKICBpZiAoa2VybmVsXy0+c2lnbmFsZWRfKQogICAgcmV0dXJu
OwoKICBpZiAoa2VybmVsXy0+bWFudWFsX3Jlc2V0XykgewogICAgU2lnbmFsQWxsKCk7CiAgICBr
ZXJuZWxfLT5zaWduYWxlZF8gPSB0cnVlOwogIH0gZWxzZSB7CiAgICAvLyBJbiB0aGUgY2FzZSBv
ZiBhdXRvIHJlc2V0LCBpZiBubyB3YWl0ZXJzIHdlcmUgd29rZW4sIHdlIHJlbWFpbgogICAgLy8g
c2lnbmFsZWQuCiAgICBpZiAoIVNpZ25hbE9uZSgpKSB7CiAgICAgIGtlcm5lbF8tPnNpZ25hbGVk
XyA9IHRydWU7CiAgICB9CiAgfQp9CgpjbGFzcyBTeW5jV2FpdGVyIDogcHVibGljIFdhaXRhYmxl
RXZlbnQ6OldhaXRlciB7CiBwdWJsaWM6CiAgU3luY1dhaXRlcigpCiAgICAgIDogZmlyZWRfKGZh
bHNlKSwKICAgICAgICBzaWduYWxpbmdfZXZlbnRfKE5VTEwpLAogICAgICAgIGxvY2tfKCksCiAg
ICAgICAgY3ZfKCZsb2NrXykgewogIH0KCiAgYm9vbCBGaXJlKFdhaXRhYmxlRXZlbnQqIHNpZ25h
bGluZ19ldmVudCkgewogICAgQXV0b0xvY2sgbG9ja2VkKGxvY2tfKTsKCiAgICBpZiAoZmlyZWRf
KQogICAgICByZXR1cm4gZmFsc2U7CgogICAgZmlyZWRfID0gdHJ1ZTsKICAgIHNpZ25hbGluZ19l
dmVudF8gPSBzaWduYWxpbmdfZXZlbnQ7CgogICAgY3ZfLkJyb2FkY2FzdCgpOwoKICAgIHJldHVy
biB0cnVlOwogIH0KCiAgYm9vbCBDb21wYXJlKHZvaWQqIHRhZykgewogICAgcmV0dXJuIHRoaXMg
PT0gdGFnOwogIH0KCiAgYm9vbCBmaXJlZCgpIGNvbnN0IHsKICAgIGlmIChmaXJlZF8pCiAgICBy
ZXR1cm4gZmlyZWRfOwogIH0KCiAgdm9pZCBEaXNhYmxlKCkgewogICAgZmlyZWRfID0gdHJ1ZTsK
ICB9CgogIExvY2sqIGxvY2soKSB7CiAgICByZXR1cm4gJmxvY2tfOwogIH0KCiAgQ29uZGl0aW9u
VmFyaWFibGUqIGN2KCkgewogICAgcmV0dXJuICZjdl87CiAgfQoKIHByaXZhdGU6CiAgYm9vbCBm
aXJlZF87CiAgV2FpdGFibGVFdmVudCogc2lnbmFsaW5nX2V2ZW50XzsgIC8vIFRoZSBXYWl0YWJs
ZUV2ZW50IHdoaWNoIHdva2UgdXMKICBMb2NrIGxvY2tfOwogIENvbmRpdGlvblZhcmlhYmxlIGN2
XzsKfTsKCmJvb2wgV2FpdGFibGVFdmVudDo6VGltZWRXYWl0KCkgewogIGtlcm5lbF8tPmxvY2tf
LkFjcXVpcmUoKTsKICAgIGlmIChrZXJuZWxfLT5zaWduYWxlZF8pIHsKICAgICAgaWYgKCFrZXJu
ZWxfLT5tYW51YWxfcmVzZXRfKSB7CiAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIHdlcmUgc2ln
bmFsZWQgd2hlbiB3ZSBoYWQgbm8gd2FpdGVycy4gTm93IHRoYXQKICAgICAgICAvLyBzb21lb25l
IGhhcyB3YWl0ZWQgdXBvbiB1cywgd2UgY2FuIGF1dG9tYXRpY2FsbHkgcmVzZXQuCiAgICAgICAg
a2VybmVsXy0+c2lnbmFsZWRfID0gZmFsc2U7CiAgICAgIH0KCiAgICAgIGtlcm5lbF8tPmxvY2tf
LlJlbGVhc2UoKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgU3luY1dhaXRlciBzdzsK
ICAgIHN3LmxvY2soKS0+QWNxdWlyZSgpOwoKICAgIEVucXVldWUoJnN3KTsKICBrZXJuZWxfLT5s
b2NrXy5SZWxlYXNlKCk7CiAgLy8gV2UgYXJlIHZpb2xhdGluZyBsb2NraW5nIG9yZGVyIGhlcmUg
YnkgaG9sZGluZyB0aGUgU3luY1dhaXRlciBsb2NrIGJ1dCBub3QKICAvLyB0aGUgV2FpdGFibGVF
dmVudCBsb2NrLiBIb3dldmVyLCB0aGlzIGlzIHNhZmUgYmVjYXVzZSB3ZSBkb24ndCBsb2NrIEBs
b2NrXwogIC8vIGFnYWluIGJlZm9yZSB1bmxvY2tpbmcgaXQuCgogIGZvciAoOzspIHsKICAgIGlm
IChzdy5maXJlZCgpKSB7CiAgICAgIGNvbnN0IGJvb2wgcmV0dXJuX3ZhbHVlID0gc3cuZmlyZWQo
KTsKCiAgICAgIC8vIFdlIGNhbid0IGFjcXVpcmUgQGxvY2tfIGJlZm9yZSByZWxlYXNpbmcgdGhl
IFN5bmNXYWl0ZXIgbG9jayAoYmVjYXVzZQogICAgICAvLyBvZiBsb2NraW5nIG9yZGVyKSwgaG93
ZXZlciwgaW4gYmV0d2VlbiB0aGUgdHdvIGEgc2lnbmFsIGNvdWxkIGJlIGZpcmVkCiAgICAgIC8v
IGFuZCBAc3cgd291bGQgYWNjZXB0IGl0LCBob3dldmVyIHdlIHdpbGwgc3RpbGwgcmV0dXJuIGZh
bHNlLCBzbyB0aGUKICAgICAgLy8gc2lnbmFsIHdvdWxkIGJlIGxvc3Qgb24gYW4gYXV0by1yZXNl
dCBXYWl0YWJsZUV2ZW50LiBUaHVzIHdlIGNhbGwKICAgICAgLy8gRGlzYWJsZSB3aGljaCBtYWtl
cyBzdzo6RmlyZSByZXR1cm4gZmFsc2UuCiAgICAgIHN3LkRpc2FibGUoKTsKICAgICAgc3cubG9j
aygpLT5SZWxlYXNlKCk7CgogICAgICBrZXJuZWxfLT5sb2NrXy5BY3F1aXJlKCk7CiAgICAgICAg
a2VybmVsXy0+RGVxdWV1ZSgmc3csICZzdyk7CiAgICAgIGtlcm5lbF8tPmxvY2tfLlJlbGVhc2Uo
KTsKCiAgICAgIHJldHVybiByZXR1cm5fdmFsdWU7CiAgICB9CiAgICBzdy5jdigpLT5XYWl0KCk7
CiAgfQp9Cgpib29sIFdhaXRhYmxlRXZlbnQ6OldhaXQoKSB7CiAgcmV0dXJuIFRpbWVkV2FpdCgp
Owp9Cgpib29sIFdhaXRhYmxlRXZlbnQ6OlNpZ25hbEFsbCgpIHsKICBib29sIHNpZ25hbGVkX2F0
X2xlYXN0X29uZSA9IGZhbHNlOwoKICBzdGQ6Omxpc3Q8V2FpdGVyKj4gdG1wOwogIHRtcC5zd2Fw
KGtlcm5lbF8tPndhaXRlcnNfKTsKICBrZXJuZWxfLT53YWl0ZXJzXy5jbGVhcigpOwoKICBmb3Ig
KHN0ZDo6bGlzdDxXYWl0ZXIqPjo6aXRlcmF0b3IgaSA9IHRtcC5iZWdpbigpOyBpICE9IHRtcC5l
bmQoKTsgKytpKSB7CiAgICBpZiAoKCppKS0+RmlyZSh0aGlzKSkKICAgICAgc2lnbmFsZWRfYXRf
bGVhc3Rfb25lID0gdHJ1ZTsKICB9CgogIHJldHVybiBzaWduYWxlZF9hdF9sZWFzdF9vbmU7Cn0K
CmJvb2wgV2FpdGFibGVFdmVudDo6U2lnbmFsT25lKCkgewogIGZvciAoOzspIHsKICAgIGlmIChr
ZXJuZWxfLT53YWl0ZXJzXy5lbXB0eSgpKQogICAgICByZXR1cm4gZmFsc2U7CgogICAgV2FpdGVy
KiBmcm9udCA9ICgqa2VybmVsXy0+d2FpdGVyc18uYmVnaW4oKSk7ICAvLyBUT0RPKHRpbXVycnJy
KTogLi4uCiAgICBrZXJuZWxfLT53YWl0ZXJzXy5wb3BfZnJvbnQoKTsKICAgIGNvbnN0IGJvb2wg
ciA9IGZyb250LT5GaXJlKHRoaXMpOwogICAgaWYgKHIpCiAgICAgIHJldHVybiB0cnVlOwogIH0K
fQoKdm9pZCBXYWl0YWJsZUV2ZW50OjpFbnF1ZXVlKFdhaXRlciogd2FpdGVyKSB7CiAga2VybmVs
Xy0+d2FpdGVyc18ucHVzaF9iYWNrKHdhaXRlcik7Cn0KCmJvb2wgV2FpdGFibGVFdmVudDo6V2Fp
dGFibGVFdmVudEtlcm5lbDo6RGVxdWV1ZShXYWl0ZXIqIHdhaXRlciwgdm9pZCogdGFnKSB7CiAg
Zm9yIChzdGQ6Omxpc3Q8V2FpdGVyKj46Oml0ZXJhdG9yCiAgICAgICBpID0gd2FpdGVyc18uYmVn
aW4oKTsgaSAhPSB3YWl0ZXJzXy5lbmQoKTsgKytpKSB7CiAgICBpZiAoKmkgPT0gd2FpdGVyICYm
ICgqaSktPkNvbXBhcmUodGFnKSkgewogICAgICB3YWl0ZXJzXy5lcmFzZShpKTsKICAgICAgcmV0
dXJuIHRydWU7CiAgICB9CiAgfQoKICByZXR1cm4gZmFsc2U7Cn0KCi8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCgp9ICAvLyBuYW1lc3BhY2UgYmFzZQoKI2VuZGlmICAvLyBCQVNFX1dBSVRBQkxFX0VW
RU5UX0hfCiNpZm5kZWYgQkFTRV9XT1JLRVJfUE9PTF9IXwojZGVmaW5lIEJBU0VfV09SS0VSX1BP
T0xfSF8KCgovLyBUaGlzIGlzIGEgZmFjaWxpdHkgdGhhdCBydW5zIHRhc2tzIHRoYXQgZG9uJ3Qg
cmVxdWlyZSBhIHNwZWNpZmljIHRocmVhZCBvcgovLyBhIG1lc3NhZ2UgbG9vcC4KY2xhc3MgV29y
a2VyUG9vbCB7CiBwdWJsaWM6CiAgc3RhdGljIGJvb2wgUG9zdFRhc2soVGFzayogdGFzaywgTlNP
cGVyYXRpb25RdWV1ZSAqb3BlcmF0aW9uX3F1ZXVlKTsKfTsKCiNlbmRpZiAgLy8gQkFTRV9XT1JL
RVJfUE9PTF9IXwoKCiNpZm5kZWYgQkFTRV9TQ09QRURfTlNBVVRPUkVMRUFTRV9QT09MX0hfCiNk
ZWZpbmUgQkFTRV9TQ09QRURfTlNBVVRPUkVMRUFTRV9QT09MX0hfCgojaWYgZGVmaW5lZChfX09C
SkNfXykKQGNsYXNzIE5TQXV0b3JlbGVhc2VQb29sOwojZWxzZSAgLy8gX19PQkpDX18KY2xhc3Mg
TlNBdXRvcmVsZWFzZVBvb2w7CiNlbmRpZiAgLy8gX19PQkpDX18KCm5hbWVzcGFjZSBiYXNlIHsK
Ci8vIE9uIHRoZSBNYWMsIFNjb3BlZE5TQXV0b3JlbGVhc2VQb29sIGFsbG9jYXRlcyBhbiBOU0F1
dG9yZWxlYXNlUG9vbCB3aGVuCi8vIGluc3RhbnRpYXRlZCBhbmQgc2VuZHMgaXQgYSAtZHJhaW4g
bWVzc2FnZSB3aGVuIGRlc3Ryb3llZC4gIFRoaXMgYWxsb3dzIGFuCi8vIGF1dG9yZWxlYXNlIHBv
b2wgdG8gYmUgbWFpbnRhaW5lZCBpbiBvcmRpbmFyeSBDKysgY29kZSB3aXRob3V0IGJyaW5naW5n
IGluCi8vIGFueSBkaXJlY3QgT2JqZWN0aXZlLUMgZGVwZW5kZW5jeS4KLy8KLy8gT24gb3RoZXIg
cGxhdGZvcm1zLCBTY29wZWROU0F1dG9yZWxlYXNlUG9vbCBpcyBhbiBlbXB0eSBvYmplY3Qgd2l0
aCBubwovLyBlZmZlY3RzLiAgVGhpcyBhbGxvd3MgaXQgdG8gYmUgdXNlZCBkaXJlY3RseSBpbiBj
cm9zcy1wbGF0Zm9ybSBjb2RlIHdpdGhvdXQKLy8gdWdseSAjaWZkZWZzLgpjbGFzcyBTY29wZWRO
U0F1dG9yZWxlYXNlUG9vbCB7CiBwdWJsaWM6CiAgU2NvcGVkTlNBdXRvcmVsZWFzZVBvb2woKTsK
ICB+U2NvcGVkTlNBdXRvcmVsZWFzZVBvb2woKTsKCgogcHJpdmF0ZToKICBOU0F1dG9yZWxlYXNl
UG9vbCogYXV0b3JlbGVhc2VfcG9vbF87CgogcHJpdmF0ZToKICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oU2NvcGVkTlNBdXRvcmVsZWFzZVBvb2wpOwp9OwoKU2NvcGVkTlNBdXRvcmVsZWFzZVBv
b2w6OlNjb3BlZE5TQXV0b3JlbGVhc2VQb29sKCkKICAgIDogYXV0b3JlbGVhc2VfcG9vbF8oW1tO
U0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF0pIHsKfQoKU2NvcGVkTlNBdXRvcmVsZWFzZVBv
b2w6On5TY29wZWROU0F1dG9yZWxlYXNlUG9vbCgpIHsKICBbYXV0b3JlbGVhc2VfcG9vbF8gZHJh
aW5dOwp9Cgp9ICAvLyBuYW1lc3BhY2UgYmFzZQoKI2VuZGlmICAvLyBCQVNFX1NDT1BFRF9OU0FV
VE9SRUxFQVNFX1BPT0xfSF8KCgoKdXNpbmcgYmFzZTo6V2FpdGFibGVFdmVudDsKCi8vIFRhc2tP
cGVyYXRpb24gYWRhcHRzIFRhc2stPlJ1bigpIGZvciB1c2UgaW4gYW4gTlNPcGVyYXRpb25RdWV1
ZS4KQGludGVyZmFjZSBUYXNrT3BlcmF0aW9uIDogTlNPcGVyYXRpb24gewogQHByaXZhdGUKICBz
Y29wZWRfcHRyPFRhc2s+IHRhc2tfOwp9CgovLyBSZXR1cm5zIGFuIGF1dG9yZWxlYXNlZCBpbnN0
YW5jZSBvZiBUYXNrT3BlcmF0aW9uLiAgU2VlIC1pbml0V2l0aFRhc2s6IGZvcgovLyBkZXRhaWxz
LgorIChpZCl0YXNrT3BlcmF0aW9uV2l0aFRhc2s6KFRhc2sqKXRhc2s7CgovLyBEZXNpZ25hdGVk
IGluaXRpYWxpemVyLiAgfHRhc2t8IGlzIGFkb3B0ZWQgYXMgdGhlIFRhc2sqIHdob3NlIFJ1biBt
ZXRob2QKLy8gdGhpcyBvcGVyYXRpb24gd2lsbCBjYWxsIHdoZW4gZXhlY3V0ZWQuCi0gKGlkKWlu
aXRXaXRoVGFzazooVGFzayopdGFzazsKCkBlbmQgIC8vIEBpbnRlcmZhY2UgVGFza09wZXJhdGlv
bgoKQGltcGxlbWVudGF0aW9uIFRhc2tPcGVyYXRpb24KCisgKGlkKXRhc2tPcGVyYXRpb25XaXRo
VGFzazooVGFzayopdGFzayB7CiAgcmV0dXJuIFtbW1Rhc2tPcGVyYXRpb24gYWxsb2NdIGluaXRX
aXRoVGFzazp0YXNrXSBhdXRvcmVsZWFzZV07Cn0KCi0gKGlkKWluaXQgewogIHJldHVybiBbc2Vs
ZiBpbml0V2l0aFRhc2s6TlVMTF07Cn0KCi0gKGlkKWluaXRXaXRoVGFzazooVGFzayopdGFzayB7
CiAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgewogICAgdGFza18ucmVzZXQodGFzayk7CiAg
fQogIHJldHVybiBzZWxmOwp9CgotICh2b2lkKW1haW4gewogIGlmICghdGFza18uZ2V0KCkpIHsK
ICAgIHJldHVybjsKICB9CgogIGJhc2U6OlNjb3BlZE5TQXV0b3JlbGVhc2VQb29sIGF1dG9yZWxl
YXNlUG9vbDsKCiAgdGFza18tPlJ1bigpOwogIHRhc2tfLnJlc2V0KE5VTEwpOwp9CgotICh2b2lk
KWRlYWxsb2MgewogIFtzdXBlciBkZWFsbG9jXTsKfQoKQGVuZCAgLy8gQGltcGxlbWVudGF0aW9u
IFRhc2tPcGVyYXRpb24KCmJvb2wgV29ya2VyUG9vbDo6UG9zdFRhc2soVGFzayogdGFzaywgTlNP
cGVyYXRpb25RdWV1ZSogb3BlcmF0aW9uX3F1ZXVlKSB7CgogIGlmICghdGFzaykgewogICAgcmV0
dXJuIGZhbHNlOwogIH0KCiAgW29wZXJhdGlvbl9xdWV1ZSBhZGRPcGVyYXRpb246W1Rhc2tPcGVy
YXRpb24gdGFza09wZXJhdGlvbldpdGhUYXNrOnRhc2tdXTsKCiAgcmV0dXJuIHRydWU7Cn0KCmNs
YXNzIFBvc3RUYXNrVGVzdFRhc2sgOiBwdWJsaWMgVGFzayB7CiBwdWJsaWM6CiAgUG9zdFRhc2tU
ZXN0VGFzayhXYWl0YWJsZUV2ZW50KiBldmVudCkgOiBldmVudF8oZXZlbnQpIHsKICB9CgogIHZv
aWQgUnVuKCkgewogICAgZXZlbnRfLT5TaWduYWwoKTsKICB9CgogcHJpdmF0ZToKICBXYWl0YWJs
ZUV2ZW50KiBldmVudF87Cn07Cgp2b2lkIFdvcmtlclBvb2xUZXN0X1Bvc3RUYXNrKCkgewogIFdh
aXRhYmxlRXZlbnQgdGVzdF9ldmVudChmYWxzZSwgZmFsc2UpOwogIFdhaXRhYmxlRXZlbnQgbG9u
Z190ZXN0X2V2ZW50KGZhbHNlLCBmYWxzZSk7CiAgYm9vbCBzaWduYWxlZDsKCiAgTlNPcGVyYXRp
b25RdWV1ZSAqcXVldWUgPSBbW05TT3BlcmF0aW9uUXVldWUgYWxsb2NdIGluaXRdOwogIFdvcmtl
clBvb2w6OlBvc3RUYXNrKG5ldyBQb3N0VGFza1Rlc3RUYXNrKCZ0ZXN0X2V2ZW50KSwgcXVldWUp
OwovLyAgV29ya2VyUG9vbDo6UG9zdFRhc2sobmV3IFBvc3RUYXNrVGVzdFRhc2soJmxvbmdfdGVz
dF9ldmVudCksIHF1ZXVlKTsKCiAgc2lnbmFsZWQgPSB0ZXN0X2V2ZW50LldhaXQoKTsKLy8gIHNp
Z25hbGVkID0gbG9uZ190ZXN0X2V2ZW50LldhaXQoKTsKfQoKaW50IG1haW4oKSB7CiAgV29ya2Vy
UG9vbFRlc3RfUG9zdFRhc2soKTsKICByZXR1cm4gMDsKfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>38949</attachid>
            <date>2009-12-09 18:21:11 +0000</date>
            <delta_ts>2009-12-09 18:21:11 +0000</delta_ts>
            <desc>A 72-line reproducer exploiting NSOperationQueue</desc>
            <filename>nsop.mm</filename>
            <type>application/x-freemind</type>
            <size>1142</size>
            <attacher name="Alexander Potapenko">glider</attacher>
            
              <data encoding="base64">I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CgpjbGFzcyBQcmludGVyIHsKIHB1Ymxp
YzoKICBQcmludGVyKCkge30KICB+UHJpbnRlcigpIHt9CiAgdm9pZCBQcmludCgpIHsgcHJpbnRm
KCJQcmludGVyOjpQcmludCgpXG4iKTsgfQp9OwoKY2xhc3MgVGFzayB7CiBwdWJsaWM6CiAgVGFz
aygpICB7fTsKICB2b2lkIFJ1bigpIHsgcHJpbnRmKCJUYXNrOjpSdW4oKVxuIik7IH0KfTsKCkBp
bnRlcmZhY2UgVGFza09wZXJhdGlvbiA6IE5TT3BlcmF0aW9uIHsKIEBwcml2YXRlCiAgVGFzayAq
dGFza187Cn0KCisgKGlkKXRhc2tPcGVyYXRpb25XaXRoVGFzazooVGFzayopdGFzazsKCi0gKGlk
KWluaXRXaXRoVGFzazooVGFzayopdGFzazsKCkBlbmQgIC8vIEBpbnRlcmZhY2UgVGFza09wZXJh
dGlvbgoKQGltcGxlbWVudGF0aW9uIFRhc2tPcGVyYXRpb24KCisgKGlkKXRhc2tPcGVyYXRpb25X
aXRoVGFzazooVGFzayopdGFzayB7CiAgcmV0dXJuIFtbVGFza09wZXJhdGlvbiBhbGxvY10gaW5p
dFdpdGhUYXNrOnRhc2tdOwp9CgotIChpZClpbml0IHsKICByZXR1cm4gW3NlbGYgaW5pdFdpdGhU
YXNrOk5VTExdOwp9CgotIChpZClpbml0V2l0aFRhc2s6KFRhc2sqKXRhc2sgewogIGlmICgoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpIHsKICAgIHRhc2tfID0gdGFzazsKICB9CiAgcmV0dXJuIHNlbGY7
Cn0KCi0gKHZvaWQpbWFpbiB7CiAgaWYgKCF0YXNrXykgewogICAgcmV0dXJuOwogIH0KCiAgdGFz
a18tPlJ1bigpOwogIGRlbGV0ZSB0YXNrXzsKICB0YXNrXyA9IE5VTEw7Cn0KCi0gKHZvaWQpZGVh
bGxvYyB7CiAgaWYgKHRhc2tfKSBkZWxldGUgdGFza187CiAgW3N1cGVyIGRlYWxsb2NdOwp9CgpA
ZW5kICAvLyBAaW1wbGVtZW50YXRpb24gVGFza09wZXJhdGlvbgoKaW50IG1haW4oKSB7CiAgUHJp
bnRlciB0ZXN0X2V2ZW50OwogIFRhc2sgKnRhc2sgPSBuZXcgVGFzaygpOwoKICBOU09wZXJhdGlv
blF1ZXVlICpxdWV1ZSA9IFtbTlNPcGVyYXRpb25RdWV1ZSBhbGxvY10gaW5pdF07CiAgW3F1ZXVl
IGFkZE9wZXJhdGlvbjpbVGFza09wZXJhdGlvbiB0YXNrT3BlcmF0aW9uV2l0aFRhc2s6dGFza11d
OwoKICB0ZXN0X2V2ZW50LlByaW50KCk7CiAgcHJpbnRmKCJCWUVcbiIpOwoKICByZXR1cm4gMDsK
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>39290</attachid>
            <date>2009-12-23 16:55:15 +0000</date>
            <delta_ts>2009-12-23 16:55:15 +0000</delta_ts>
            <desc>A small attachment that uses only NSOperationQueue</desc>
            <filename>nsop.mm</filename>
            <type>text/plain</type>
            <size>1142</size>
            <attacher name="Alexander Potapenko">glider</attacher>
            
              <data encoding="base64">I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CgpjbGFzcyBQcmludGVyIHsKIHB1Ymxp
YzoKICBQcmludGVyKCkge30KICB+UHJpbnRlcigpIHt9CiAgdm9pZCBQcmludCgpIHsgcHJpbnRm
KCJQcmludGVyOjpQcmludCgpXG4iKTsgfQp9OwoKY2xhc3MgVGFzayB7CiBwdWJsaWM6CiAgVGFz
aygpICB7fTsKICB2b2lkIFJ1bigpIHsgcHJpbnRmKCJUYXNrOjpSdW4oKVxuIik7IH0KfTsKCkBp
bnRlcmZhY2UgVGFza09wZXJhdGlvbiA6IE5TT3BlcmF0aW9uIHsKIEBwcml2YXRlCiAgVGFzayAq
dGFza187Cn0KCisgKGlkKXRhc2tPcGVyYXRpb25XaXRoVGFzazooVGFzayopdGFzazsKCi0gKGlk
KWluaXRXaXRoVGFzazooVGFzayopdGFzazsKCkBlbmQgIC8vIEBpbnRlcmZhY2UgVGFza09wZXJh
dGlvbgoKQGltcGxlbWVudGF0aW9uIFRhc2tPcGVyYXRpb24KCisgKGlkKXRhc2tPcGVyYXRpb25X
aXRoVGFzazooVGFzayopdGFzayB7CiAgcmV0dXJuIFtbVGFza09wZXJhdGlvbiBhbGxvY10gaW5p
dFdpdGhUYXNrOnRhc2tdOwp9CgotIChpZClpbml0IHsKICByZXR1cm4gW3NlbGYgaW5pdFdpdGhU
YXNrOk5VTExdOwp9CgotIChpZClpbml0V2l0aFRhc2s6KFRhc2sqKXRhc2sgewogIGlmICgoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpIHsKICAgIHRhc2tfID0gdGFzazsKICB9CiAgcmV0dXJuIHNlbGY7
Cn0KCi0gKHZvaWQpbWFpbiB7CiAgaWYgKCF0YXNrXykgewogICAgcmV0dXJuOwogIH0KCiAgdGFz
a18tPlJ1bigpOwogIGRlbGV0ZSB0YXNrXzsKICB0YXNrXyA9IE5VTEw7Cn0KCi0gKHZvaWQpZGVh
bGxvYyB7CiAgaWYgKHRhc2tfKSBkZWxldGUgdGFza187CiAgW3N1cGVyIGRlYWxsb2NdOwp9CgpA
ZW5kICAvLyBAaW1wbGVtZW50YXRpb24gVGFza09wZXJhdGlvbgoKaW50IG1haW4oKSB7CiAgUHJp
bnRlciB0ZXN0X2V2ZW50OwogIFRhc2sgKnRhc2sgPSBuZXcgVGFzaygpOwoKICBOU09wZXJhdGlv
blF1ZXVlICpxdWV1ZSA9IFtbTlNPcGVyYXRpb25RdWV1ZSBhbGxvY10gaW5pdF07CiAgW3F1ZXVl
IGFkZE9wZXJhdGlvbjpbVGFza09wZXJhdGlvbiB0YXNrT3BlcmF0aW9uV2l0aFRhc2s6dGFza11d
OwoKICB0ZXN0X2V2ZW50LlByaW50KCk7CiAgcHJpbnRmKCJCWUVcbiIpOwoKICByZXR1cm4gMDsK
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49583</attachid>
            <date>2010-07-28 15:35:18 +0000</date>
            <delta_ts>2010-07-28 15:35:18 +0000</delta_ts>
            <desc>A patch that adds the workq_task_start trackable event.</desc>
            <filename>wq-new.patch</filename>
            <type>text/plain</type>
            <size>2617</size>
            <attacher name="Alexander Potapenko">glider</attacher>
            
              <data encoding="base64">SW5kZXg6IGluY2x1ZGUvcHViX3Rvb2xfdG9vbGlmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaW5jbHVk
ZS9wdWJfdG9vbF90b29saWZhY2UuaAkocmV2aXNpb24gMTEwNTUpCisrKyBpbmNsdWRlL3B1Yl90
b29sX3Rvb2xpZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NTYsNiArNjU2LDcgQEAKICAgICAg
IGxsX2V4aXQgKGluIHRoZSBjaGlsZCdzIGNvbnRleHQpCiAqLwogdm9pZCBWR18odHJhY2tfcHJl
X3RocmVhZF9sbF9jcmVhdGUpICh2b2lkKCpmKShUaHJlYWRJZCB0aWQsIFRocmVhZElkIGNoaWxk
KSk7Cit2b2lkIFZHXyh0cmFja193b3JrcV90YXNrX3N0YXJ0KSAodm9pZCgqZikoVGhyZWFkSWQg
dGlkLCBBZGRyIHdvcmtpdGVtKSk7CiB2b2lkIFZHXyh0cmFja19wcmVfdGhyZWFkX2ZpcnN0X2lu
c24pKHZvaWQoKmYpKFRocmVhZElkIHRpZCkpOwogdm9pZCBWR18odHJhY2tfcHJlX3RocmVhZF9s
bF9leGl0KSAgICh2b2lkKCpmKShUaHJlYWRJZCB0aWQpKTsKIApJbmRleDogY29yZWdyaW5kL21f
c3lzd3JhcC9zeXN3cmFwLXg4Ni1kYXJ3aW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQvbV9z
eXN3cmFwL3N5c3dyYXAteDg2LWRhcndpbi5jCShyZXZpc2lvbiAxMTA1NSkKKysrIGNvcmVncmlu
ZC9tX3N5c3dyYXAvc3lzd3JhcC14ODYtZGFyd2luLmMJKHdvcmtpbmcgY29weSkKQEAgLTQzNyw2
ICs0NDYsNyBAQAogICAgc3RhY2tzaXplID0gNTEyKjEwMjQ7ICAvLyB3cSBzdGFja3MgYXJlIGFs
d2F5cyBERUZBVUxUX1NUQUNLX1NJWkUKICAgIHN0YWNrID0gVkdfUEdST1VORFVQKHNwKSAtIHN0
YWNrc2l6ZTsKIAorICAgVkdfVFJBQ0sod29ya3FfdGFza19zdGFydCwgdHN0LT50aWQsIHdvcmtp
dGVtKTsKICAgIGlmIChyZXVzZSkgewogICAgICAgIC8vIENvbnRpbnVlIFYncyB0aHJlYWQgYmFj
ayBpbiB0aGUgc2NoZWR1bGVyLiAKICAgICAgICAvLyBUaGUgY2xpZW50IHRocmVhZCBpcyBvZiBj
b3Vyc2UgaW4gYW5vdGhlciBsb2NhdGlvbiBlbnRpcmVseS4KQEAgLTQ2MSw3ICs0NzEsMTEgQEAK
ICAgICAgIHRzdC0+Y2xpZW50X3N0YWNrX2hpZ2hlc3Rfd29yZCA9IHN0YWNrK3N0YWNrc2l6ZTsK
ICAgICAgIHRzdC0+Y2xpZW50X3N0YWNrX3N6QiA9IHN0YWNrc2l6ZTsKIAotICAgICAgLy8gR3JQ
IGZpeG1lIHNjaGVkdWxlciBsb2NrPyEKKyAgICAgIC8vIHRlbGwgdGhlIHRvb2wgdGhhdCB3ZSBh
cmUgYXQgYSBwb2ludCBhZnRlciB0aGUgbmV3IHRocmVhZAorICAgICAgLy8gaGFzIGl0cyByZWdp
c3RlcnMgc2V0IHVwIChzbyB3ZSBjYW4gdGFrZSBhIHN0YWNrIHNuYXBzaG90KSwKKyAgICAgIC8v
IGJ1dCBiZWZvcmUgaXQgaGFzIGV4ZWN1dGVkIGFueSBpbnN0cnVjdGlvbnMgKG9yLCByZWFsbHks
CisgICAgICAvLyBiZWZvcmUgaXQgaGFzIGRvbmUgYW55IG1lbW9yeSByZWZlcmVuY2VzKS4KKyAg
ICAgIFZHX1RSQUNLKHByZV90aHJlYWRfZmlyc3RfaW5zbiwgdHN0LT50aWQpOwogICAgICAgCiAg
ICAgICAvLyBwdGhyZWFkIHN0cnVjdHVyZQogICAgICAgTUxfKG5vdGlmeV9jb3JlX2FuZF90b29s
X29mX21tYXApKApJbmRleDogY29yZWdyaW5kL3B1Yl9jb3JlX3Rvb2xpZmFjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGNvcmVncmluZC9wdWJfY29yZV90b29saWZhY2UuaAkocmV2aXNpb24gMTEwNTUpCisr
KyBjb3JlZ3JpbmQvcHViX2NvcmVfdG9vbGlmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNiw2
ICsyMjYsNyBAQAogICAgdm9pZCAoKnRyYWNrX3N0b3BfY2xpZW50X2NvZGUpIChUaHJlYWRJZCwg
VUxvbmcpOwogCiAgICB2b2lkICgqdHJhY2tfcHJlX3RocmVhZF9sbF9jcmVhdGUpKFRocmVhZElk
LCBUaHJlYWRJZCk7CisgICB2b2lkICgqdHJhY2tfd29ya3FfdGFza19zdGFydCkoVGhyZWFkSWQs
IEFkZHIpOwogICAgdm9pZCAoKnRyYWNrX3ByZV90aHJlYWRfZmlyc3RfaW5zbikoVGhyZWFkSWQp
OwogICAgdm9pZCAoKnRyYWNrX3ByZV90aHJlYWRfbGxfZXhpdCkgIChUaHJlYWRJZCk7CiAKSW5k
ZXg6IGNvcmVncmluZC9tX3Rvb2xpZmFjZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX3Rv
b2xpZmFjZS5jCShyZXZpc2lvbiAxMTA1NSkKKysrIGNvcmVncmluZC9tX3Rvb2xpZmFjZS5jCSh3
b3JraW5nIGNvcHkpCkBAIC00MDgsNiArNDA4LDcgQEAKIERFRjAodHJhY2tfc3RvcF9jbGllbnRf
Y29kZSwgICAgICBUaHJlYWRJZCwgVUxvbmcpCiAKIERFRjAodHJhY2tfcHJlX3RocmVhZF9sbF9j
cmVhdGUsICBUaHJlYWRJZCwgVGhyZWFkSWQpCitERUYwKHRyYWNrX3dvcmtxX3Rhc2tfc3RhcnQs
IFRocmVhZElkLCBBZGRyKQogREVGMCh0cmFja19wcmVfdGhyZWFkX2ZpcnN0X2luc24sIFRocmVh
ZElkKQogREVGMCh0cmFja19wcmVfdGhyZWFkX2xsX2V4aXQsICAgIFRocmVhZElkKQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187893</attachid>
            <date>2025-12-23 08:34:55 +0000</date>
            <delta_ts>2025-12-23 08:34:55 +0000</delta_ts>
            <desc>Updated patch</desc>
            <filename>bug216837.patch</filename>
            <type>text/plain</type>
            <size>4196</size>
            <attacher name="Paul Floyd">pjfloyd</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2NvcmVncmluZC9tX3N5c3dyYXAvc3lzd3JhcC1hbWQ2NC1kYXJ3aW4uYyBi
L2NvcmVncmluZC9tX3N5c3dyYXAvc3lzd3JhcC1hbWQ2NC1kYXJ3aW4uYwppbmRleCAwMWViZjFi
N2MuLmY2NDA2NjU3MSAxMDA2NDQKLS0tIGEvY29yZWdyaW5kL21fc3lzd3JhcC9zeXN3cmFwLWFt
ZDY0LWRhcndpbi5jCisrKyBiL2NvcmVncmluZC9tX3N5c3dyYXAvc3lzd3JhcC1hbWQ2NC1kYXJ3
aW4uYwpAQCAtNTM4LDYgKzUzOCw3IEBAIHZvaWQgd3F0aHJlYWRfaGlqYWNrKEFkZHIgc2VsZiwg
QWRkciBrcG9ydCwgQWRkciBzdGFja2FkZHIsIEFkZHIgd29ya2l0ZW0sCiAgICBzdGFja3NpemUg
PSA1MTIqMTAyNDsgIC8vIHdxIHN0YWNrcyBhcmUgYWx3YXlzIERFRkFVTFRfU1RBQ0tfU0laRQog
ICAgc3RhY2sgPSBWR19QR1JPVU5EVVAoc3ApIC0gc3RhY2tzaXplOwogCisgICBWR19UUkFDSyh3
b3JrcV90YXNrX3N0YXJ0LCB0c3QtPnRpZCwgd29ya2l0ZW0pOwogICAgaWYgKGlzX3JldXNlKSB7
CiAgICAgICAvLyBDb250aW51ZSBWJ3MgdGhyZWFkIGJhY2sgaW4gdGhlIHNjaGVkdWxlci4gCiAg
ICAgICAvLyBUaGUgY2xpZW50IHRocmVhZCBpcyBvZiBjb3Vyc2UgaW4gYW5vdGhlciBsb2NhdGlv
biBlbnRpcmVseS4KQEAgLTU2Miw4ICs1NjMsMTIgQEAgdm9pZCB3cXRocmVhZF9oaWphY2soQWRk
ciBzZWxmLCBBZGRyIGtwb3J0LCBBZGRyIHN0YWNrYWRkciwgQWRkciB3b3JraXRlbSwKICAgICAg
IHRzdC0+Y2xpZW50X3N0YWNrX2hpZ2hlc3RfYnl0ZSA9IHN0YWNrK3N0YWNrc2l6ZS0xOwogICAg
ICAgdHN0LT5jbGllbnRfc3RhY2tfc3pCID0gc3RhY2tzaXplOwogCi0gICAgICAvLyBHclAgZml4
bWUgc2NoZWR1bGVyIGxvY2s/IQotICAgICAgCisgICAgICAvLyB0ZWxsIHRoZSB0b29sIHRoYXQg
d2UgYXJlIGF0IGEgcG9pbnQgYWZ0ZXIgdGhlIG5ldyB0aHJlYWQKKyAgICAgIC8vIGhhcyBpdHMg
cmVnaXN0ZXJzIHNldCB1cCAoc28gd2UgY2FuIHRha2UgYSBzdGFjayBzbmFwc2hvdCksCisgICAg
ICAvLyBidXQgYmVmb3JlIGl0IGhhcyBleGVjdXRlZCBhbnkgaW5zdHJ1Y3Rpb25zIChvciwgcmVh
bGx5LAorICAgICAgLy8gYmVmb3JlIGl0IGhhcyBkb25lIGFueSBtZW1vcnkgcmVmZXJlbmNlcyku
CisgICAgICBWR19UUkFDSyhwcmVfdGhyZWFkX2ZpcnN0X2luc24sIHRzdC0+dGlkKTsKKwogICAg
ICAgLy8gcHRocmVhZCBzdHJ1Y3R1cmUKICAgICAgIE1MXyhub3RpZnlfY29yZV9hbmRfdG9vbF9v
Zl9tbWFwKSgKICAgICAgICAgICAgIHN0YWNrK3N0YWNrc2l6ZSwgcHRocmVhZF9zdHJ1Y3RzaXpl
LCAKZGlmZiAtLWdpdCBhL2NvcmVncmluZC9tX3N5c3dyYXAvc3lzd3JhcC14ODYtZGFyd2luLmMg
Yi9jb3JlZ3JpbmQvbV9zeXN3cmFwL3N5c3dyYXAteDg2LWRhcndpbi5jCmluZGV4IGEwYmMxYTFl
Ny4uNGRkNzIwNDVmIDEwMDY0NAotLS0gYS9jb3JlZ3JpbmQvbV9zeXN3cmFwL3N5c3dyYXAteDg2
LWRhcndpbi5jCisrKyBiL2NvcmVncmluZC9tX3N5c3dyYXAvc3lzd3JhcC14ODYtZGFyd2luLmMK
QEAgLTQ4Myw2ICs0ODMsNyBAQCB2b2lkIHdxdGhyZWFkX2hpamFjayhBZGRyIHNlbGYsIEFkZHIg
a3BvcnQsIEFkZHIgc3RhY2thZGRyLCBBZGRyIHdvcmtpdGVtLAogICAgc3RhY2tzaXplID0gNTEy
KjEwMjQ7ICAvLyB3cSBzdGFja3MgYXJlIGFsd2F5cyBERUZBVUxUX1NUQUNLX1NJWkUKICAgIHN0
YWNrID0gVkdfUEdST1VORFVQKHNwKSAtIHN0YWNrc2l6ZTsKIAorICAgVkdfVFJBQ0sod29ya3Ff
dGFza19zdGFydCwgdHN0LT50aWQsIHdvcmtpdGVtKTsKICAgIGlmIChpc19yZXVzZSkgewogICAg
ICAgIC8vIENvbnRpbnVlIFYncyB0aHJlYWQgYmFjayBpbiB0aGUgc2NoZWR1bGVyLiAKICAgICAg
ICAvLyBUaGUgY2xpZW50IHRocmVhZCBpcyBvZiBjb3Vyc2UgaW4gYW5vdGhlciBsb2NhdGlvbiBl
bnRpcmVseS4KQEAgLTUwNyw3ICs1MDgsMTEgQEAgdm9pZCB3cXRocmVhZF9oaWphY2soQWRkciBz
ZWxmLCBBZGRyIGtwb3J0LCBBZGRyIHN0YWNrYWRkciwgQWRkciB3b3JraXRlbSwKICAgICAgIHRz
dC0+Y2xpZW50X3N0YWNrX2hpZ2hlc3RfYnl0ZSA9IHN0YWNrK3N0YWNrc2l6ZS0xOwogICAgICAg
dHN0LT5jbGllbnRfc3RhY2tfc3pCID0gc3RhY2tzaXplOwogCi0gICAgICAvLyBHclAgZml4bWUg
c2NoZWR1bGVyIGxvY2s/IQorICAgICAgLy8gdGVsbCB0aGUgdG9vbCB0aGF0IHdlIGFyZSBhdCBh
IHBvaW50IGFmdGVyIHRoZSBuZXcgdGhyZWFkCisgICAgICAvLyBoYXMgaXRzIHJlZ2lzdGVycyBz
ZXQgdXAgKHNvIHdlIGNhbiB0YWtlIGEgc3RhY2sgc25hcHNob3QpLAorICAgICAgLy8gYnV0IGJl
Zm9yZSBpdCBoYXMgZXhlY3V0ZWQgYW55IGluc3RydWN0aW9ucyAob3IsIHJlYWxseSwKKyAgICAg
IC8vIGJlZm9yZSBpdCBoYXMgZG9uZSBhbnkgbWVtb3J5IHJlZmVyZW5jZXMpLgorICAgICAgVkdf
VFJBQ0socHJlX3RocmVhZF9maXJzdF9pbnNuLCB0c3QtPnRpZCk7CiAgICAgICAKICAgICAgIC8v
IHB0aHJlYWQgc3RydWN0dXJlCiAgICAgICBNTF8obm90aWZ5X2NvcmVfYW5kX3Rvb2xfb2ZfbW1h
cCkoCmRpZmYgLS1naXQgYS9jb3JlZ3JpbmQvbV90b29saWZhY2UuYyBiL2NvcmVncmluZC9tX3Rv
b2xpZmFjZS5jCmluZGV4IDEzNjJjZDE0Mi4uODY4NDY4ZTI2IDEwMDY0NAotLS0gYS9jb3JlZ3Jp
bmQvbV90b29saWZhY2UuYworKysgYi9jb3JlZ3JpbmQvbV90b29saWZhY2UuYwpAQCAtNDY5LDYg
KzQ2OSw5IEBAIERFRjAodHJhY2tfc3RhcnRfY2xpZW50X2NvZGUsICAgICBUaHJlYWRJZCwgVUxv
bmcpCiBERUYwKHRyYWNrX3N0b3BfY2xpZW50X2NvZGUsICAgICAgVGhyZWFkSWQsIFVMb25nKQog
CiBERUYwKHRyYWNrX3ByZV90aHJlYWRfbGxfY3JlYXRlLCAgVGhyZWFkSWQsIFRocmVhZElkKQor
I2lmIGRlZmluZWQoVkdPX2RhcndpbikKK0RFRjAodHJhY2tfd29ya3FfdGFza19zdGFydCwgVGhy
ZWFkSWQsIEFkZHIpCisjZW5kaWYKIERFRjAodHJhY2tfcHJlX3RocmVhZF9maXJzdF9pbnNuLCBU
aHJlYWRJZCkKIERFRjAodHJhY2tfcHJlX3RocmVhZF9sbF9leGl0LCAgICBUaHJlYWRJZCkKIApk
aWZmIC0tZ2l0IGEvY29yZWdyaW5kL3B1Yl9jb3JlX3Rvb2xpZmFjZS5oIGIvY29yZWdyaW5kL3B1
Yl9jb3JlX3Rvb2xpZmFjZS5oCmluZGV4IDA2OWU2MDM2MC4uNWJjOTM3Mzk1IDEwMDY0NAotLS0g
YS9jb3JlZ3JpbmQvcHViX2NvcmVfdG9vbGlmYWNlLmgKKysrIGIvY29yZWdyaW5kL3B1Yl9jb3Jl
X3Rvb2xpZmFjZS5oCkBAIC0yNDksNiArMjQ5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgewogICAgdm9p
ZCAoKnRyYWNrX3N0b3BfY2xpZW50X2NvZGUpIChUaHJlYWRJZCwgVUxvbmcpOwogCiAgICB2b2lk
ICgqdHJhY2tfcHJlX3RocmVhZF9sbF9jcmVhdGUpKFRocmVhZElkLCBUaHJlYWRJZCk7CisjaWYg
ZGVmaW5lZChWR09fZGFyd2luKQorICAgdm9pZCAoKnRyYWNrX3dvcmtxX3Rhc2tfc3RhcnQpKFRo
cmVhZElkLCBBZGRyKTsKKyNlbmRpZgogICAgdm9pZCAoKnRyYWNrX3ByZV90aHJlYWRfZmlyc3Rf
aW5zbikoVGhyZWFkSWQpOwogICAgdm9pZCAoKnRyYWNrX3ByZV90aHJlYWRfbGxfZXhpdCkgIChU
aHJlYWRJZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHViX3Rvb2xfdG9vbGlmYWNlLmggYi9p
bmNsdWRlL3B1Yl90b29sX3Rvb2xpZmFjZS5oCmluZGV4IDAxY2VmYTZmMC4uN2M1NzVmZWE1IDEw
MDY0NAotLS0gYS9pbmNsdWRlL3B1Yl90b29sX3Rvb2xpZmFjZS5oCisrKyBiL2luY2x1ZGUvcHVi
X3Rvb2xfdG9vbGlmYWNlLmgKQEAgLTcwNyw2ICs3MDcsOSBAQCB2b2lkIFZHXyh0cmFja19zdG9w
X2NsaWVudF9jb2RlKSgKICAgICAgIGxsX2V4aXQgKGluIHRoZSBjaGlsZCdzIGNvbnRleHQpCiAq
Lwogdm9pZCBWR18odHJhY2tfcHJlX3RocmVhZF9sbF9jcmVhdGUpICh2b2lkKCpmKShUaHJlYWRJ
ZCB0aWQsIFRocmVhZElkIGNoaWxkKSk7CisjaWYgZGVmaW5lZChWR09fZGFyd2luKQordm9pZCBW
R18odHJhY2tfd29ya3FfdGFza19zdGFydCkgKHZvaWQoKmYpKFRocmVhZElkIHRpZCwgQWRkciB3
b3JraXRlbSkpOworI2VuZGlmCiB2b2lkIFZHXyh0cmFja19wcmVfdGhyZWFkX2ZpcnN0X2luc24p
KHZvaWQoKmYpKFRocmVhZElkIHRpZCkpOwogdm9pZCBWR18odHJhY2tfcHJlX3RocmVhZF9sbF9l
eGl0KSAgICh2b2lkKCpmKShUaHJlYWRJZCB0aWQpKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>