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

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>115705</bug_id>
          
          <creation_ts>2013-05-06 20:29:01 -0700</creation_ts>
          <short_desc>Implement a probe mechanism for JIT generated code</short_desc>
          <delta_ts>2013-05-16 10:55:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>885577</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-05-06 20:29:01 -0700</bug_when>
    <thetext>It would be useful if we can embed a call to a C function (almost) anywhere in JIT generated code so that we can:
1. do printf debugging from JIT generated code
2. set breakpoints in JIT generated code using gdb

The probe should save all CPU state (mainly registers) on entry and restore them on exit.  Apart from taking up some space, the insertion of the probe should effectively be invisible to the JIT generated code around it.  That said, the requirement of non-interference only applies to the probe mechanism itself.  The ProbeFunction that is called back by the probe can do whatever it wants as needed.  We only try to guarantee that the probe mechanism itself does not introduce any unexpected side-effects.

Note: The current implementation only supports X86  and X86_64.  Support for other CPU can be added later.  Also, the current probe mechanism only preserves general purpose registers and floating point registers.  It does not preserve condition code / status / FLAGS registers yet.  as a result, the user should not insert probes in between JIT instructions that has a dependency on condition codes between them.  For the most part, this limitation does not prevent the probe mechanism from being useful in many ways. 

Here&apos;s an example of a dump of a X86_64 ProbeContext captured from a probe inserted in the DFG Phantom node:

   ProbeContext 0x7fff52f3d8e0 {
     probeFunction: 0x10d0d8df0
     arg1: 0x10dd4821b 4526998043
     arg2: 0x0 0
     jitStackFrame: 0x7fff52f3da20
     cpu: {
       eax: 0x00000001130ad850   4614445136
       ecx: 0x0000000112f7fd70   4613209456
       edx: 0x0000000000000002   2
       ebx: 0x000000000000000a   10
       esp: 0x00007fff52f3da20   140734585100832
       ebp: 0x00007fff52f3dac0   140734585100992
       esi: 0x0000000000000004   4
       edi: 0x000000000000010b   267
       r8: 0x00007fff52f3d224   140734585098788
       r9: 0x00007fff52f3d300   140734585099008
       r10: 0x000000006aef1ba1   1794055073
       r11: 0x0000000000000000   0
       r12: 0x0000000000000200   512
       r13: 0x0000000112ad0128   4608295208
       r14: 0xffff000000000000   -281474976710656
       r15: 0xffff000000000002   -281474976710654
       eip: 0x00004fca4be01873   87730274965619
       xmm0: 00000000 00000000 408f4000 447a0000            0       1000
       xmm1: 00000000 00000000 408f4000 00000000            0       1000
       xmm2: 00000000 00000000 40919c08 7ec61929            0    1127.01
       xmm3: 41d00000 00000000 3ff00007 b803b946   1.07374e+09    1.00001
       xmm4: 00000000 00000000 40380628 cbd1244a            0    24.0241
       xmm5: 81d8b849 368b4800 007f87ab 4481d0be   -9.22806e-300 2.80626e-306
       xmm6: 87ab4481 e0b94900 8b4d0000 7f87ab44   -1.00809e-271 -3.09024e-254
       xmm7: 00007f87 ab4481e8 ba49098b 4d00007f   6.92782e-310 -6.3203e-28
     }
   }

Patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>885581</commentid>
    <comment_count>1</comment_count>
      <attachid>200869</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-05-06 21:03:36 -0700</bug_when>
    <thetext>Created attachment 200869
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>885788</commentid>
    <comment_count>2</comment_count>
      <attachid>200869</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-05-07 09:34:16 -0700</bug_when>
    <thetext>Comment on attachment 200869
the patch.

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

I think that the space allocated for saving registers in the cpu struct is overly complex.  I suggest that you directly layout the registers using properly aligned C/C++ types and let the compile do the work.  For example, the xmm registers can have the type of __m128 which will be aligned. Further, I would then use offset_of() to get the offset within the cpu register save structure instead of just using it in a COMPILE_ASSERT.  i.e. PROBE_CPU_EAX_OFFSET becomes offsetof(struct ASMProbeContext, cpu.eax).  This should eliminate much of the FOR_EACH_ and the COMPILE_ASSERTs.

&gt; Source/JavaScriptCore/assembler/ASMProbeContext.h:63
&gt; +    struct {
&gt; +        #define DECLARE_REGISTER(_type, _regName) \
&gt; +            _type _regName;
&gt; +        FOR_EACH_CPU_REGISTER(DECLARE_REGISTER)
&gt; +        #undef DECLARE_REGISTER
&gt; +    } cpu;

I&apos;d prefer if there was a CPUState struct defined in each MacroAssembler and the used here.

&gt; Source/JavaScriptCore/assembler/MacroAssembler.cpp:107
&gt; +    // Pack the space to allocate so that the stack pointer will remain
&gt; +    // 32 byte aligned.
&gt; +    const int packedCPUContextSize = WTF_PACK(sizeof(ASMProbeContext), 5);

Why do we need 32 byte alignment?

&gt; Source/JavaScriptCore/assembler/MacroAssembler.cpp:115
&gt; +    // Save the original sp as the farme pointer:

Typo &quot;frame&quot;

&gt; Source/JavaScriptCore/assembler/X86Assembler.h:81
&gt; +    struct XMMRegisterValue {
&gt; +        uint32_t u0;
&gt; +        uint32_t u1;
&gt; +        uint32_t u2;
&gt; +        uint32_t u3;
&gt; +    };

Use __m128 instead.

&gt; Source/JavaScriptCore/assembler/X86Assembler.h:88
&gt; +    // We pad some space after the GPRegs storage because we want the FPRegs
&gt; +    // storage to start on a 16 byte (128 bit) alignment.
&gt; +    #define FOR_EACH_CPU_REGISTER(V) \
&gt; +        FOR_EACH_CPU_GPREGISTER(V) \
&gt; +        FOR_EACH_CPU_PADDING(V) \
&gt; +        FOR_EACH_CPU_FPREGISTER(V)

Use compiler types that are already padded to eliminate explicit padding.

&gt; Source/JavaScriptCore/jit/JITStubs.cpp:95
&gt; +#define PROBE_PROBE_FUNCTION_OFFSET (0 * PTR_SIZE)
&gt; +#define PROBE_ARG1_OFFSET (1 * PTR_SIZE)
&gt; +#define PROBE_ARG2_OFFSET (2 * PTR_SIZE)
&gt; +#define PROBE_JIT_STACK_FRAME_OFFSET (3 * PTR_SIZE)

Use offset_of() for these.

&gt; Source/JavaScriptCore/jit/JITStubs.cpp:104
&gt; +#define PROBE_CPU_EAX_OFFSET (4 * PTR_SIZE)
&gt; +#define PROBE_CPU_ECX_OFFSET (5 * PTR_SIZE)
&gt; +#define PROBE_CPU_EDX_OFFSET (6 * PTR_SIZE)
&gt; +#define PROBE_CPU_EBX_OFFSET (7 * PTR_SIZE)
&gt; +#define PROBE_CPU_ESP_OFFSET (8 * PTR_SIZE)
&gt; +#define PROBE_CPU_EBP_OFFSET (9 * PTR_SIZE)
&gt; +#define PROBE_CPU_ESI_OFFSET (10 * PTR_SIZE)
&gt; +#define PROBE_CPU_EDI_OFFSET (11 * PTR_SIZE)

Ditto

&gt; Source/JavaScriptCore/jit/JITStubs.cpp:122
&gt; +#define PROBE_CPU_R8_OFFSET (12 * PTR_SIZE)
&gt; +#define PROBE_CPU_R9_OFFSET (13 * PTR_SIZE)
&gt; +#define PROBE_CPU_R10_OFFSET (14 * PTR_SIZE)
&gt; +#define PROBE_CPU_R11_OFFSET (15 * PTR_SIZE)
&gt; +#define PROBE_CPU_R12_OFFSET (16 * PTR_SIZE)
&gt; +#define PROBE_CPU_R13_OFFSET (17 * PTR_SIZE)
&gt; +#define PROBE_CPU_R14_OFFSET (18 * PTR_SIZE)
&gt; +#define PROBE_CPU_R15_OFFSET (19 * PTR_SIZE)
&gt; +#define PROBE_CPU_EIP_OFFSET (20 * PTR_SIZE)
&gt; +#define PROBE_FIRST_XMM_OFFSET (22 * PTR_SIZE) // After padding.

Ditto

&gt; Source/JavaScriptCore/jit/JITStubs.cpp:134
&gt; +#define PROBE_CPU_XMM0_OFFSET (PROBE_FIRST_XMM_OFFSET + (0 * XMM_SIZE))
&gt; +#define PROBE_CPU_XMM1_OFFSET (PROBE_FIRST_XMM_OFFSET + (1 * XMM_SIZE))
&gt; +#define PROBE_CPU_XMM2_OFFSET (PROBE_FIRST_XMM_OFFSET + (2 * XMM_SIZE))
&gt; +#define PROBE_CPU_XMM3_OFFSET (PROBE_FIRST_XMM_OFFSET + (3 * XMM_SIZE))
&gt; +#define PROBE_CPU_XMM4_OFFSET (PROBE_FIRST_XMM_OFFSET + (4 * XMM_SIZE))
&gt; +#define PROBE_CPU_XMM5_OFFSET (PROBE_FIRST_XMM_OFFSET + (5 * XMM_SIZE))
&gt; +#define PROBE_CPU_XMM6_OFFSET (PROBE_FIRST_XMM_OFFSET + (6 * XMM_SIZE))
&gt; +#define PROBE_CPU_XMM7_OFFSET (PROBE_FIRST_XMM_OFFSET + (7 * XMM_SIZE))

Ditto

&gt; Source/WTF/wtf/Alignment.h:55
&gt; +    // That means maskBots is 0s followed by N 1s (as expected). We can use

Type *maskBits*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886071</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-05-07 18:04:43 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 200869 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=200869&amp;action=review
&gt; 
&gt; I think that the space allocated for saving registers in the cpu struct is overly complex.  I suggest that you directly layout the registers using properly aligned C/C++ types and let the compile do the work.  For example, the xmm registers can have the type of __m128 which will be aligned. Further, I would then use offset_of() to get the offset within the cpu register save structure instead of just using it in a COMPILE_ASSERT.  i.e. PROBE_CPU_EAX_OFFSET becomes offsetof(struct ASMProbeContext, cpu.eax).  This should eliminate much of the FOR_EACH_ and the COMPILE_ASSERTs.

Done.  But as discussed offline, I can&apos;t define the PROBE_..._OFFSET #defines as offsetof() expressions.  The C preprocessor does not evaluate the expression into a number before pasting it into the inline asm as a string.  Hence, we&apos;ll have to stick with the COMPILE_ASSERTs to verify that the PROBE_..._OFFSETs are valid.

&gt; &gt; Source/JavaScriptCore/assembler/ASMProbeContext.h:63
&gt; &gt; +    struct {
&gt; &gt; +        #define DECLARE_REGISTER(_type, _regName) \
&gt; &gt; +            _type _regName;
&gt; &gt; +        FOR_EACH_CPU_REGISTER(DECLARE_REGISTER)
&gt; &gt; +        #undef DECLARE_REGISTER
&gt; &gt; +    } cpu;
&gt; 
&gt; I&apos;d prefer if there was a CPUState struct defined in each MacroAssembler and the used here.

Done.  I also moved the ProbeContext back into the MacroAssembler as an inner struct.  I was going between these 2 implementations, but I think having it as an inner class more clearly communicates its relationship to the MacroAssembler::probe() function.

&gt; &gt; Source/JavaScriptCore/assembler/MacroAssembler.cpp:107
&gt; &gt; +    // Pack the space to allocate so that the stack pointer will remain
&gt; &gt; +    // 32 byte aligned.
&gt; &gt; +    const int packedCPUContextSize = WTF_PACK(sizeof(ASMProbeContext), 5);
&gt; 
&gt; Why do we need 32 byte alignment?

AMD64 ABI spec says that if anyone passes __m256 values on the stack, then it needs to be 32 byte aligned.  Otherwise, it needs to be 16 byte aligned.  I&apos;m being conservative.  Accordingly, I adjusted a stack bump in ctiMasmProbeTrampoline to keep this 32 byte alignment.

&gt; &gt; Source/JavaScriptCore/assembler/MacroAssembler.cpp:115
&gt; &gt; +    // Save the original sp as the farme pointer:
&gt; 
&gt; Typo &quot;frame&quot;

Fixed.

&gt; &gt; Source/WTF/wtf/Alignment.h:55
&gt; &gt; +    // That means maskBots is 0s followed by N 1s (as expected). We can use
&gt; 
&gt; Type *maskBits*

Fixed.

New patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886079</commentid>
    <comment_count>4</comment_count>
      <attachid>201009</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-05-07 18:15:06 -0700</bug_when>
    <thetext>Created attachment 201009
new and improved after addressing Michael&apos;s feedback.

Also made the ProbeContext::dump() format a little prettier.  Here&apos;s a sample of the new dump:

   ProbeContext 0x7fff531db8e0 {
     probeFunction: 0x10cc62320
     arg1: 0x10daa921b 4524249627
     arg2: 0x0 0
     jitStackFrame: 0x7fff531dba20
     cpu: {
        eax: 0x0000000112e8d850   4612216912
        ecx: 0x0000000112d5fd70   4610981232
        edx: 0x0000000000000002   2
        ebx: 0x000000000000000a   10
        esp: 0x00007fff531dba20   140734587845152
        ebp: 0x00007fff531dbac0   140734587845312
        esi: 0x0000000000000004   4
        edi: 0x000000000000010b   267
         r8: 0x00007fff531db224   140734587843108
         r9: 0x00007fff531db300   140734587843328
        r10: 0x000000006aef1ba1   1794055073
        r11: 0x0000000000000000   0
        r12: 0x0000000000000200   512
        r13: 0x00000001128b0128   4606066984
        r14: 0xffff000000000000   -281474976710656
        r15: 0xffff000000000002   -281474976710654
        eip: 0x0000368a34401873   59967210002547
       xmm0: 0x0000000000000000 0x408f4000447a0000              0         1000
       xmm1: 0x0000000000000000 0x408f400000000000              0         1000
       xmm2: 0x0000000000000000 0x40919c087ec61929              0      1127.01
       xmm3: 0x41d0000000000000 0x3ff00007b803b946    1.07374e+09      1.00001
       xmm4: 0x0000000000000000 0x40380628cbd1244a              0      24.0241
       xmm5: 0xeea8b849368b4800 0x007f9e5964eea0be   -1.14375e+225 2.81414e-306
       xmm6: 0x9e5964eeb0b94900 0x8b4d00007f9e5964   -1.76392e-162 -3.09024e-254
       xmm7: 0x00007f9e5964eeb8 0xba49098b4d00007f   6.93263e-310  -6.3203e-28
     }
   }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886470</commentid>
    <comment_count>5</comment_count>
      <attachid>201009</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-05-08 14:19:36 -0700</bug_when>
    <thetext>Comment on attachment 201009
new and improved after addressing Michael&apos;s feedback.

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

r+ with comments.

&gt; Source/JavaScriptCore/ChangeLog:16
&gt; +        the duration that the ProbeFunction is executing. It will be popped of

typo at end of line *off*

&gt; Source/JavaScriptCore/ChangeLog:25
&gt; +        This changeset only implements the probe mechanism for X86, and X86_64.

Eliminate comma after X86

&gt; Source/JavaScriptCore/jit/JITStubs.cpp:243
&gt; +    &quot;popl %eax&quot; &quot;\n&quot;

Instead of popping and then pushing later, why don&apos;t we just read the return pc?  Or is there a reason that we want to clear the pc off the stack?

&gt; Source/JavaScriptCore/jit/JITStubs.cpp:554
&gt; +    &quot;popq %rax&quot; &quot;\n&quot;

Same question as above.

&gt; Source/WTF/wtf/Alignment.h:47
&gt; +//    WTF_PACK(0, 3); // yields 0.
&gt; +//    WTF_PACK(5, 3); // yields 8.
&gt; +//    WTF_PACK(8, 3); // yields 8.
&gt; +//    WTF_PACK(23, 3); // yields 24 i.e. 3 x 8.
&gt; +//    WTF_PACK(24, 3); // yields 24.
&gt; +//
&gt; +//    // Pack to 16 bytes i.e. 4 bits of alignment.
&gt; +//    WTF_PACK(0, 4); // yields 0.
&gt; +//    WTF_PACK(5, 4); // yields 16.
&gt; +//    WTF_PACK(8, 4); // yields 16.
&gt; +//    WTF_PACK(23, 4); // yields 32 i.e. 2 x 16.
&gt; +//    WTF_PACK(24, 4); // yields 32.

Do we need all of these examples?

&gt; Source/WTF/wtf/Alignment.h:96
&gt; +    // Note that in binary, alignSize is always a 1 followed by N 0s.
&gt; +    // That means maskBits is 0s followed by N 1s (as expected). We can use
&gt; +    // this mask to mask off the low bits of a given size to produce the
&gt; +    // nearest multiple of alignSize below that size:
&gt; +    //
&gt; +    //   roundDown(size) { return size &amp; maskBits; }
&gt; +    //
&gt; +    // If roundDown(size) yields the aligned size below size, then
&gt; +    // roundDown(size + alignSize) should yield the aligned size above size.
&gt; +    // We can use this to implement our roundUp() functionality except that
&gt; +    // it doesn&apos;t work in one case:
&gt; +    //
&gt; +    //   If size was already sligned to begin with, then
&gt; +    //   roundDown(size + alignSize) will produce (size + alignSize). For
&gt; +    //   roundUp(size), we want it to produce size instead.
&gt; +    //
&gt; +    // To remedy this, instead of adding alignSize, we add (alignSize - 1).
&gt; +    // We&apos;ll call this value maxPadSize. Coincidently, this is the same value
&gt; +    // as maskBits. Hence,
&gt; +    //
&gt; +    //   If size was already aligned to begin with, then
&gt; +    //   roundDown(size + maxPadSize) will produce size as expected.
&gt; +    //
&gt; +    //   If size is not aligned, then size &gt; roundDown(size).
&gt; +    //   Let deltaSize = size - roundDown(size). Hence,
&gt; +    //     roundDown(size + maxPadSize)
&gt; +    //     ==&gt; roundDown(roundDown(size) + deltaSize + maxPadSize)
&gt; +    //     ==&gt; roundDown(size) + roundDown(deltaSize + maxPadSize)
&gt; +    //
&gt; +    //     But since maxPadSize = alignSize - 1, then
&gt; +    //       ((deltaSize + maxPadsize) &gt; alignSize) since
&gt; +    //       deltaSize &gt; 1 by definition.
&gt; +    //
&gt; +    //     Let remainderSize = (deltaSize + maxPadsize) - alignSize.
&gt; +    //     Note: We&apos;re guaranteed that remainderSize &lt; alignSize.
&gt; +    //
&gt; +    //     Hence, (alignSize + remainderSize) == (deltaSize + maxPadsize).
&gt; +    //     So, continuing the breakdown of roundDown(size + maxPadSize) ...
&gt; +    //
&gt; +    //     ==&gt; roundDown(size) + roundDown(alignSize + remainderSize)
&gt; +    //     ==&gt; roundDown(size) + roundDown(alignSize) + roundDown(remainderSize)
&gt; +    //     ==&gt; roundDown(size) + alignSize + 0
&gt; +    //     ==&gt; roundUp(size) when size if not aligned.

Seems like a long comment.  Rounding up to the next power of2 shouldn&apos;t require near this many comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889556</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-05-15 15:22:12 -0700</bug_when>
    <thetext>I have new offline feedback that will improve the patch.  I will upload a new patch shortly.

(In reply to comment #5)
&gt; &gt; Source/JavaScriptCore/ChangeLog:16
&gt; &gt; +        the duration that the ProbeFunction is executing. It will be popped of
&gt; 
&gt; typo at end of line *off*

Will fix.

&gt; &gt; Source/JavaScriptCore/ChangeLog:25
&gt; &gt; +        This changeset only implements the probe mechanism for X86, and X86_64.
&gt; 
&gt; Eliminate comma after X86

Will fix.
 
&gt; &gt; Source/JavaScriptCore/jit/JITStubs.cpp:243
&gt; &gt; +    &quot;popl %eax&quot; &quot;\n&quot;
&gt; 
&gt; Instead of popping and then pushing later, why don&apos;t we just read the return pc?  Or is there a reason that we want to clear the pc off the stack?

2 reasons:
1. This simplifies how I can get at the ProbeContext pointer (which is the esp after I pop the return address).
2. The user probe function may choose to change the value of the registers in the ProbeContext&apos;s CPUState for debugging / testing purposes.  This includes the return address.  For that reason, I will need to push the potentially new return address anyway.

So, I might as well pop it at the start of the trampoline.

&gt; &gt; Source/WTF/wtf/Alignment.h:47

WTF_PACK() (and wtfPack()) is not needed.  Will switch to using the pre-existing roundUpToMultipleOf() function in StdLibExtras.h.  So, these changes will be backed out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889563</commentid>
    <comment_count>7</comment_count>
      <attachid>201892</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-05-15 15:55:33 -0700</bug_when>
    <thetext>Created attachment 201892
revised patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889593</commentid>
    <comment_count>8</comment_count>
      <attachid>201892</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-05-15 17:32:18 -0700</bug_when>
    <thetext>Comment on attachment 201892
revised patch.

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

r=me

&gt; Source/JavaScriptCore/assembler/MacroAssembler.cpp:108
&gt; +// Specifcally, the saved rsp/esp will point to the stack position after we pop
&gt; +// the ProbeContext frame. The saved rip/eip will point to the address of the

A little clearer as &quot;...stack position before we push…&quot;. The value after we pop is not known until the probe runs.

&gt; Source/JavaScriptCore/assembler/MacroAssembler.cpp:111
&gt; +void MacroAssembler::probe(MacroAssembler::ProbeFunction function, void* arg1, void* arg2)

This should move to MacroAssemblerX86Common. It&apos;s not so nice to put tons of #ifdefs into the shared MacroAssembler.

&gt; Source/JavaScriptCore/assembler/MacroAssembler.cpp:114
&gt; +    #define ProbeContextField(field) Address(esp, offsetof(ProbeContext, field))

The coding style guidelines say this should start with lower case.

&gt; Source/JavaScriptCore/assembler/MacroAssembler.cpp:116
&gt; +    // The X86_64 ABI specifies that the worse case STACK alignment requirement

Typo: should be &quot;stack&quot;.

&gt; Source/JavaScriptCore/assembler/MacroAssembler.cpp:153
&gt; +NO_RETURN_DUE_TO_ASSERT
&gt; +void MacroAssembler::ProbeContext::dumpCPURegisters(const char* indentation)
&gt; +{
&gt; +    UNUSED_PARAM(indentation);
&gt; +    ASSERT_NOT_REACHED();
&gt; +}
&gt; +
&gt; +NO_RETURN_DUE_TO_ASSERT
&gt; +void MacroAssembler::probe(MacroAssembler::ProbeFunction function, void* arg1, void* arg2)
&gt; +{
&gt; +    UNUSED_PARAM(function);
&gt; +    UNUSED_PARAM(arg1);
&gt; +    UNUSED_PARAM(arg2);
&gt; +    ASSERT_NOT_REACHED();
&gt; +}

I don&apos;t think these stubs add anything. Platforms that don&apos;t support probing won&apos;t build when probing is enabled.

&gt; Source/JavaScriptCore/assembler/X86Assembler.h:36
&gt; +#include &lt;xmmintrin.h&gt;

Let&apos;s #if this to avoid build problems.

&gt; Source/JavaScriptCore/jit/JITStubsX86.h:142
&gt; +    // function may have intentionally changed this values for debugging or

Typo: Should be &quot;these values&quot;.

&gt; Source/JavaScriptCore/jit/JITStubsX86.h:143
&gt; +    // &quot;Restore&quot; the register values for returning. Note: the user probe
&gt; +    // function may have intentionally changed this values for debugging or
&gt; +    // testing purposes.

Better to talk about our own API, rather than what other code might do. Something like: &quot;To enable probes to modify register state, we copy all registers out of the ProbeContext before returning.&quot;

&gt; Source/JavaScriptCore/jit/JITStubsX86.h:167
&gt; +    // Restore the return address for the ret below:
&gt; +    &quot;pushl &quot; STRINGIZE_VALUE_OF(PROBE_CPU_EIP_OFFSET) &quot;(%ebp)&quot; &quot;\n&quot;
&gt; +
&gt; +    // Everything&apos;s restored. Lastly, restore the %ebp, and return:
&gt; +    &quot;movl &quot; STRINGIZE_VALUE_OF(PROBE_CPU_EBP_OFFSET) &quot;(%ebp), %ebp&quot; &quot;\n&quot;
&gt; +    &quot;ret&quot; &quot;\n&quot;

These seem like &quot;what&quot; comments.

&gt; Source/JavaScriptCore/jit/JITStubsX86Common.h:41
&gt; +// The following are offsets for MacroAssembler::ProbeContext fields accessed
&gt; +// the ctiMasmProbeTrampoline stub.

Typo: Should be &quot;accessed by the&quot;.

&gt; Source/JavaScriptCore/jit/JITStubsX86_64.h:136
&gt; +    &quot;popq %rax&quot; &quot;\n&quot;
&gt; +    &quot;movq %rax, &quot; STRINGIZE_VALUE_OF(PROBE_CPU_EIP_OFFSET) &quot;(%rsp)&quot; &quot;\n&quot;
&gt; +
&gt; +    &quot;movl %rbx, &quot; STRINGIZE_VALUE_OF(PROBE_CPU_EBX_OFFSET) &quot;(%rsp)&quot; &quot;\n&quot;
&gt; +    &quot;movl %rsp, %rbp&quot; &quot;\n&quot; // Save the ProbeContext*.
&gt; +
&gt; +    &quot;movq %rcx, &quot; STRINGIZE_VALUE_OF(PROBE_CPU_ECX_OFFSET) &quot;(%rbp)&quot; &quot;\n&quot;
&gt; +    &quot;movq %rdx, &quot; STRINGIZE_VALUE_OF(PROBE_CPU_EDX_OFFSET) &quot;(%rbp)&quot; &quot;\n&quot;
&gt; +    &quot;movq %rbx, &quot; STRINGIZE_VALUE_OF(PROBE_CPU_EBX_OFFSET) &quot;(%rbp)&quot; &quot;\n&quot;
&gt; +    &quot;movq %rsi, &quot; STRINGIZE_VALUE_OF(PROBE_CPU_ESI_OFFSET) &quot;(%rbp)&quot; &quot;\n&quot;
&gt; +    &quot;movq %rdi, &quot; STRINGIZE_VALUE_OF(PROBE_CPU_EDI_OFFSET) &quot;(%rbp)&quot; &quot;\n&quot;
&gt; +

This stuff is super hard to read. I think it would be better, in future, for us to move away from this kind of assembly, and more toward the technique used in stringLengthTrampolineGenerator() and similar bits of assembly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889902</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-05-16 10:55:49 -0700</bug_when>
    <thetext>Thanks for the review.  Geoff&apos;s feedback has been applied.  The patch is landed in r150186: &lt;http://trac.webkit.org/changeset/150186&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200869</attachid>
            <date>2013-05-06 21:03:36 -0700</date>
            <delta_ts>2013-05-07 18:15:06 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-115705.patch</filename>
            <type>text/plain</type>
            <size>43274</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ5NjU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBA
CisyMDEzLTA1LTA2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBJ
bXBsZW1lbnQgYSBwcm9iZSBtZWNoYW5pc20gZm9yIEpJVCBnZW5lcmF0ZWQgY29kZS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNTcwNS4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgcHJvYmUgaXMg
aW4gdGhlIGZvcm0gb2YgYSBNYWNyb0Fzc2VtYmxlciBwc2V1ZG8gaW5zdHJ1Y3Rpb24uCisgICAg
ICAgIEl0IHRha2VzIDMgYXJndW1lbnRzOiBhIFByb2JlRnVuY3Rpb24sIGFuZCAyIHZvaWQqIGFy
Z3MuCisgICAgICAgIFdoZW4gaW5zZXJ0ZWQgaW50byB0aGUgSklUIGF0IHNvbWUgY29kZSBnZW5l
cmF0aW9uIHNpdGUsIHRoZSBwcm9iZQorICAgICAgICBwc2V1ZG8gImluc3RydWN0aW9uIiB3aWxs
IGVtaXQgY29kZSB0byBzYXZlIHRoZSBDUFUgcmVnaXN0ZXJzLCBhbmQKKyAgICAgICAgY2FsbCB0
aGUgc3BlY2lmaWVkIFByb2JlRnVuY3Rpb24gd2l0aCBhIEFTTVByb2JlQ29udGV4dCByZWNvcmQg
dGhhdAorICAgICAgICBob2xkcyB0aGUgcHJvYmUgYXJncywgYW5kIGEgZHVtcCBvZiB0aGUgcHJl
c2VydmVkIENQVSByZWd1c3RlcnMuCisKKyAgICAgICAgVGhlIEFTTVByb2JlQ29udGV4dCBpcyBh
bGxvY2F0ZWQgb24gdGhlIEMgc3RhY2sgYW5kIGlzIG9ubHkgdmFsaWQgZm9yCisgICAgICAgIHRo
ZSBkdXJhdGlvbiB0aGF0IHRoZSBQcm9iZUZ1bmN0aW9uIGlzIGV4ZWN1dGluZy4gSXQgd2lsbCBi
ZSBwb3BwZWQgb2YKKyAgICAgICAgdGhlIHN0YWNrIGFmdGVyIHRoZSBQcm9iZUZ1bmN0aW9uIHJl
dHVybnMuCisKKyAgICAgICAgVGhlIHByb2JlIG1lY2hhbmlzbSB3aWxsIGFsc28gcmVzdG9yZSB0
aGUgc2F2ZWQgcmVnaXN0ZXJzIGFmdGVyIHRoZQorICAgICAgICBQcm9iZUZ1bmN0aW9uIHJldHVy
bnMuCisKKyAgICAgICAgVGhlIHByb2JlIG1lY2hhbmlzbSBpcyBidWlsdCBjb25kaXRpb25hbCBv
biBVU0UoQVNNX1BST0JFKSB3aGljaCBpcworICAgICAgICBkZWZpbmVkIGluIGNvbmZpZy5oLiBV
U0UoQVNNX1BST0JFKSB3aWxsIG9mZiBieSBkZWZhdWx0LgorCisgICAgICAgIFRoaXMgY2hhbmdl
c2V0IG9ubHkgaW1wbGVtZW50cyB0aGUgcHJvYmUgbWVjaGFuaXNtIGZvciBYODYsIGFuZCBYODZf
NjQuCisKKwkqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
dmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvajoKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3Nl
bWJsZXIvQVNNUHJvYmVDb250ZXh0Lmg6IEFkZGVkLgorICAgICAgICAoQVNNUHJvYmVDb250ZXh0
KTogdGhlIHByb2JlIGNvbnRleHQgcmVjb3JkLgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlci5jcHA6CisgICAgICAgIChKU0M6OkFTTVByb2JlQ29udGV4dDo6ZHVtcCk6CisgICAg
ICAgIC0gUHJpbnRzIHRoZSBBU01Qcm9iZUNvbnRleHQgdG8gdGhlIERhdGFMb2cuCisgICAgICAg
IChKU0M6OkFTTVByb2JlQ29udGV4dDo6ZHVtcENQVVJlZ2lzdGVycyk6CisgICAgICAgIC0gQ1BV
IHNwZWNpZmljIHJlZ2lzdGVyIGR1bXBlciBjYWxsZWQgYnkgQVNNUHJvYmVDb250ZXh0OjpkdW1w
KCkuCisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpwcm9iZSk6CisgICAgICAgICogYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChNYWNyb0Fzc2VtYmxlcik6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpzaG91bGRCbGluZCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyOjpzdG9yZTMyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVy
Lmg6CisgICAgICAgIChYTU1SZWdpc3RlclZhbHVlKToKKyAgICAgICAgKFg4NlJlZ2lzdGVycyk6
CisgICAgICAgICogY29uZmlnLmg6IEFkZGVkIFdURl9VU0VfQVNNX1BST0JFIGZsYWcuCisgICAg
ICAgICogaml0L0pJVFN0dWJzLgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorCiAyMDEzLTA1
LTA2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYnJva2Vu
IDMyLWJpdCBidWlsZCArIHNvbWUgY2xlYW4gdXAgaW4gSklUU3R1YnMuY3BwLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE0OTY1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNv
cHkpCkBAIC02Nyw2ICs2Nyw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmggXAor
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVNNUHJvYmVDb250ZXh0LmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9jb25maWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvY29uZmln
LmgJKHJldmlzaW9uIDE0OTY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWls
LmNvbT4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCkBAIC03NiwzICs3Niw4IEBACiAjZWxzZQogI2RlZmluZSBTS0lQ
X1NUQVRJQ19DT05TVFJVQ1RPUlNfT05fR0NDIDEKICNlbmRpZgorCisvLyBFbmFibGUgdGhlIGZv
bGxvd2luZyBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIE1hY3JvQXNzZW1ibGVyOjpwcm9iZSgpIGZh
Y2lsaXR5CisvLyB0byBkbyBKSVQgZGVidWdnaW5nLgorI2RlZmluZSBXVEZfVVNFX0FTTV9QUk9C
RSAwCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lvbiAxNDk2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjAxOCw2ICsyMDE4LDEwIEBACiAJCQkJPgogCQkJ
PC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGFzc2VtYmxlclxBU01Q
cm9iZUNvbnRleHQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZl
UGF0aD0iLi5cLi5cYXNzZW1ibGVyXENvZGVMb2NhdGlvbi5oIgogCQkJCT4KIAkJCTwvRmlsZT4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTQ5
NjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDMxLDYgKzQzMSw3IEBACiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcV2ViS2l0QXZhaWxhYmlsaXR5LmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxhc3NlbWJsZXJcQXNzZW1ibGVy
QnVmZmVyLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXEFTTVBy
b2JlQ29udGV4dC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxlclxD
b2RlTG9jYXRpb24uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxhc3NlbWJsZXJc
TGlua0J1ZmZlci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxlclxN
YWNyb0Fzc2VtYmxlci5oIiAvPg0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxNDk2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTMxLDYgKzkzMSw3
IEBACiAJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5QzE1RjA0QTk1MDBE
RjM0MzAgLyogTExJbnRDTG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUZFNEEzMzFGMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRBMzMx
RDE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwICovOyB9OwogCQlGRTRBMzMyMDE1
QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEEzMzFFMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3Bl
Y3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUZFOEVFNEIwMTczOEE3RTgwMEZDOUQwNiAvKiBBU01Qcm9iZUNvbnRleHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOEVFNEFGMTczOEE3RTgwMEZD
OUQwNiAvKiBBU01Qcm9iZUNvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNv
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDI4
N0IxMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24g
Ki8KIApAQCAtMTkzNCw2ICsxOTM1LDcgQEAKIAkJRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8q
IExMSW50Q0xvb3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRDTG9v
cC5oOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTRBMzMxRDE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVk1JbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1JbnNwZWN0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU4RUU0QUYxNzM4QTdFODAwRkM5RDA2IC8qIEFT
TVByb2JlQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBU01Qcm9i
ZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEMjg3QjExNUVDOUE1
NzAwREE4MTYxIC8qIExMSW50T3Bjb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IExMSW50T3Bjb2RlLmg7IHBhdGggPSBsbGludC9MTEludE9wY29kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCkBA
IC0zMDIwLDYgKzMwMjIsNyBAQAogCQkJCTg2RDNCMkMwMTAxNTZCREUwMDI4NjVFNyAvKiBBUk1B
c3NlbWJsZXIuaCAqLywKIAkJCQlBNzRERTFDQjEyMEI4NkQ2MDBENDBENUIgLyogQVJNdjdBc3Nl
bWJsZXIuY3BwICovLAogCQkJCTg2QUREMTQzMEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2Vt
Ymxlci5oICovLAorCQkJCUZFOEVFNEFGMTczOEE3RTgwMEZDOUQwNiAvKiBBU01Qcm9iZUNvbnRl
eHQuaCAqLywKIAkJCQk5Njg4Q0IxMzBFRDEyQjRFMDAxRDY0OUYgLyogQXNzZW1ibGVyQnVmZmVy
LmggKi8sCiAJCQkJODZEM0IyQzExMDE1NkJERTAwMjg2NUU3IC8qIEFzc2VtYmxlckJ1ZmZlcldp
dGhDb25zdGFudFBvb2wuaCAqLywKIAkJCQk4NkUxMTZCMDBGRTc1QUM4MDBCNTEyQkMgLyogQ29k
ZUxvY2F0aW9uLmggKi8sCkBAIC0zMTYyLDYgKzMxNjUsNyBAQAogCQkJCTBGQjdGMzk1MTVFRDhF
NDYwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBE
ODVCMjE3MjM0NTU0MDAzMzgyMTAgLyogQ29kZUJsb2NrTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY2Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkU4RUU0QjAxNzM4QTdFODAwRkM5RDA2IC8qIEFTTVByb2JlQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTcwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5UHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNW
aXJ0dWFsTWFjaGluZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzUyNDBFMTZG
QzhBMDBCMzQ0NjAgLyogQXJyYXlQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVNNUHJvYmVDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BU01Qcm9iZUNvbnRleHQu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVNNUHJv
YmVDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFTTVByb2JlQ29udGV4
dF9oCisjZGVmaW5lIEFTTVByb2JlQ29udGV4dF9oCisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKSAm
JiBVU0UoQVNNX1BST0JFKQorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK3N0cnVjdCBKSVRTdGFja0ZyYW1lOworCisvLyBUaGUgQVNNUHJvYmVDb250
ZXh0IGlzIGFsbG9jYXRlZCBvbiB0aGUgQyBzdGFjayBhbmQgaXMgb25seSB2YWxpZCBmb3IKKy8v
IHRoZSBkdXJhdGlvbiB0aGF0IHRoZSBQcm9iZUZ1bmN0aW9uIGlzIGV4ZWN1dGluZy4gSXQgd2ls
bCBiZSBwb3BwZWQgb2YKKy8vIHRoZSBzdGFjayBhZnRlciB0aGUgUHJvYmVGdW5jdGlvbiByZXR1
cm5zLgorLy8KKy8vIFRoZSBBU01Qcm9iZUNvbnRleHQgaXMgYWxzbyB0aGUgYmFja2luZyBzdG9y
ZSBmb3IgdGhlIHJlZ2lzdGVycyB0aGF0CisvLyB3ZXJlIHNhdmVkIGJlZm9yZSB0aGUgUHJvYmVG
dW5jdGlvbiBpcyBjYWxsZWQuIElmIHRoZSBQcm9iZUZ1bmN0aW9uCisvLyBtb2RpZmllcyB0aGUg
cmVnaXN0ZXIgdmFsdWVzIGluIHRoZSBBU01Qcm9iZUNvbnRleHQsIHRoZSBuZXcgcmVnaXN0ZXIK
Ky8vIHZhbHVlcyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIENQVSByZWdpc3RlcnMgd2hlbiB0aGUg
UHJvYmVGdW5jdGlvbgorLy8gcmV0dXJucy4gQXMgYSByZXN1bHQsIHRoZSBQcm9iZUZ1bmN0aW9u
IGlzIGFibGUgdG8gYWx0ZXIgdGhlIHN0YXRlIG9mCisvLyBDUFUgcmVnaXN0ZXJzIGlmIHNvIGRl
c2lyZWQuCisKK3N0cnVjdCBBU01Qcm9iZUNvbnRleHQgeworICAgIC8vIFByb2JlIGRhdGE6Cisg
ICAgQVNNUHJvYmVGdW5jdGlvbiBwcm9iZUZ1bmN0aW9uOworICAgIHZvaWQqIGFyZzE7CisgICAg
dm9pZCogYXJnMjsKKworICAgIC8vIEpJVCBjb250ZXh0OgorICAgIEpJVFN0YWNrRnJhbWUqIGpp
dFN0YWNrRnJhbWU7CisKKyAgICAvLyBDUFUgY29udGV4dDoKKyAgICBzdHJ1Y3QgeworICAgICAg
ICAjZGVmaW5lIERFQ0xBUkVfUkVHSVNURVIoX3R5cGUsIF9yZWdOYW1lKSBcCisgICAgICAgICAg
ICBfdHlwZSBfcmVnTmFtZTsKKyAgICAgICAgRk9SX0VBQ0hfQ1BVX1JFR0lTVEVSKERFQ0xBUkVf
UkVHSVNURVIpCisgICAgICAgICN1bmRlZiBERUNMQVJFX1JFR0lTVEVSCisgICAgfSBjcHU7CisK
KyAgICAvLyBIZWxwZXIgZnVuY3Rpb25zOgorICAgIHZvaWQgZHVtcChjb25zdCBjaGFyKiBpbmRl
bnRhdGlvbiA9IDApOworCitwcml2YXRlOgorICAgIHZvaWQgZHVtcENQVVJlZ2lzdGVycyhjb25z
dCBjaGFyKiBpbmRlbnRhdGlvbik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEVOQUJMRShBU1NFTUJMRVIpICYmIFVTRShBU01fUFJPQkUpCisKKyNlbmRpZiAvLyBBU01Q
cm9iZUNvbnRleHRfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDE0OTY1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
OCwxMCArMjgsMTI3IEBACiAKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogCisjaWYgVVNFKEFTTV9Q
Uk9CRSkKKyNpbmNsdWRlICJBU01Qcm9iZUNvbnRleHQuaCIKKyNpbmNsdWRlICJKSVRTdHVicy5o
IgorI2VuZGlmCisKIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBkb3VibGUgTWFjcm9Bc3NlbWJs
ZXI6OnR3b1RvVGhlMzIgPSAoZG91YmxlKTB4MTAwMDAwMDAwdWxsOwogCisjaWYgVVNFKEFTTV9Q
Uk9CRSkKKwordm9pZCBBU01Qcm9iZUNvbnRleHQ6OmR1bXAoY29uc3QgY2hhciogaW5kZW50YXRp
b24pCit7CisgICAgaWYgKCFpbmRlbnRhdGlvbikKKyAgICAgICAgaW5kZW50YXRpb24gPSAiIjsK
KworICAgIGRhdGFMb2dGKCIlc1Byb2JlQ29udGV4dCAlcCB7XG4iLCBpbmRlbnRhdGlvbiwgdGhp
cyk7CisgICAgZGF0YUxvZ0YoIiVzICBwcm9iZUZ1bmN0aW9uOiAlcFxuIiwgaW5kZW50YXRpb24s
IHByb2JlRnVuY3Rpb24pOworICAgIGRhdGFMb2dGKCIlcyAgYXJnMTogJXAgJWxsdVxuIiwgaW5k
ZW50YXRpb24sIGFyZzEsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdD4oYXJnMSkpOworICAgIGRh
dGFMb2dGKCIlcyAgYXJnMjogJXAgJWxsdVxuIiwgaW5kZW50YXRpb24sIGFyZzIsIHJlaW50ZXJw
cmV0X2Nhc3Q8aW50NjRfdD4oYXJnMikpOworICAgIGRhdGFMb2dGKCIlcyAgaml0U3RhY2tGcmFt
ZTogJXBcbiIsIGluZGVudGF0aW9uLCBqaXRTdGFja0ZyYW1lKTsKKyAgICBkYXRhTG9nRigiJXMg
IGNwdToge1xuIiwgaW5kZW50YXRpb24pOworCisgICAgZHVtcENQVVJlZ2lzdGVycyhpbmRlbnRh
dGlvbik7CisKKyAgICBkYXRhTG9nRigiJXMgIH1cbiIsIGluZGVudGF0aW9uKTsKKyAgICBkYXRh
TG9nRigiJXN9XG4iLCBpbmRlbnRhdGlvbik7Cit9CisKKyNpZiAoQ1BVKFg4NikgfHwgQ1BVKFg4
Nl82NCkpICYmIENPTVBJTEVSKEdDQykKKwordm9pZCBBU01Qcm9iZUNvbnRleHQ6OmR1bXBDUFVS
ZWdpc3RlcnMoY29uc3QgY2hhciogaW5kZW50YXRpb24pCit7CisjaWYgQ1BVKFg4NikKKyAgICAj
ZGVmaW5lIERVTVBfR1BSRUdJU1RFUihfdHlwZSwgX3JlZ05hbWUpIHsgXAorICAgICAgICBpbnQz
Ml90IHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90PihjcHUuX3JlZ05hbWUpOyBcCisg
ICAgICAgIGRhdGFMb2dGKCIlcyAgICAlczogMHglMDh4ICAgJWRcbiIsIGluZGVudGF0aW9uLCAj
X3JlZ05hbWUsIHZhbHVlLCB2YWx1ZSkgOyBcCisgICAgfQorI2VsaWYgQ1BVKFg4Nl82NCkKKyNk
ZWZpbmUgRFVNUF9HUFJFR0lTVEVSKF90eXBlLCBfcmVnTmFtZSkgeyBcCisgICAgICAgIGludDY0
X3QgdmFsdWUgPSByZWludGVycHJldF9jYXN0PGludDY0X3Q+KGNwdS5fcmVnTmFtZSk7IFwKKyAg
ICAgICAgZGF0YUxvZ0YoIiVzICAgICVzOiAweCUwMTZsbHggICAlbGxkXG4iLCBpbmRlbnRhdGlv
biwgI19yZWdOYW1lLCB2YWx1ZSwgdmFsdWUpIDsgXAorICAgIH0KKyNlbmRpZgorICAgIEZPUl9F
QUNIX0NQVV9HUFJFR0lTVEVSKERVTVBfR1BSRUdJU1RFUikKKyAgICAjdW5kZWYgRFVNUF9HUFJF
R0lTVEVSCisKKyAgICAvLyBXZSB1c2UgbWVtY3B5IGJlbG93IHRvIGF2b2lkIHN0cmljdCBhbGlh
c2luZyBpc3N1ZXMuCisgICAgI2RlZmluZSBEVU1QX0ZQUkVHSVNURVIoX3R5cGUsIF9yZWdOYW1l
KSB7IFwKKyAgICAgICAgdWludDMyX3QgdTAgPSBjcHUuX3JlZ05hbWUudTA7IFwKKyAgICAgICAg
dWludDMyX3QgdTEgPSBjcHUuX3JlZ05hbWUudTE7IFwKKyAgICAgICAgdWludDMyX3QgdTIgPSBj
cHUuX3JlZ05hbWUudTI7IFwKKyAgICAgICAgdWludDMyX3QgdTMgPSBjcHUuX3JlZ05hbWUudTM7
IFwKKyAgICAgICAgZG91YmxlIGRvdWJsZTE7IFwKKyAgICAgICAgZG91YmxlIGRvdWJsZTI7IFwK
KyAgICAgICAgbWVtY3B5KCZkb3VibGUxLCAmY3B1Ll9yZWdOYW1lLnUwLCBzaXplb2YoZG91Ymxl
KSk7IFwKKyAgICAgICAgbWVtY3B5KCZkb3VibGUyLCAmY3B1Ll9yZWdOYW1lLnUyLCBzaXplb2Yo
ZG91YmxlKSk7IFwKKyAgICAgICAgZGF0YUxvZ0YoIiVzICAgICVzOiAlMDh4ICUwOHggJTA4eCAl
MDh4ICAgJTEwZyAlMTBnXG4iLCBcCisgICAgICAgICAgICBpbmRlbnRhdGlvbiwgI19yZWdOYW1l
LCB1MywgdTIsIHUxLCB1MCwgZG91YmxlMiwgZG91YmxlMSk7IFwKKyAgICB9CisgICAgRk9SX0VB
Q0hfQ1BVX0ZQUkVHSVNURVIoRFVNUF9GUFJFR0lTVEVSKQorICAgICN1bmRlZiBEVU1QX0ZQUkVH
SVNURVIKK30KKwordm9pZCBNYWNyb0Fzc2VtYmxlcjo6cHJvYmUoQVNNUHJvYmVGdW5jdGlvbiBm
dW5jdGlvbiwgdm9pZCogYXJnMSwgdm9pZCogYXJnMikKK3sKKyAgICBSZWdpc3RlcklEIHNwID0g
UmVnaXN0ZXJJRDo6ZXNwOworCisgICAgLy8gVGhlIGN0aSB0cmFtcG9saW5lIHdpbGwgdXNlIHRo
ZSBtb3ZkcWEgaW5zdHJ1Y3Rpb24gdGhhdCBleHBlY3RzIHRoZSB4bW0KKyAgICAvLyByZWdpc3Rl
ciBzdG9yYWdlIHRvIGJlIG9uIG1lbW9yeSB0aGF0IGFyZSAxNiBieXRlIGFsaWduZWQuIFdlIGFs
cmVhZHkKKyAgICAvLyBlbnN1cmUgdGhhdCB0aGUgcHJvYmUgY29udGV4dCBpcyAzMiBieXRlIGFs
aWduZWQuIFNvLCB3ZSBjYW4ganVzdCB0ZXN0CisgICAgLy8gdGhlIG9mZnNldCBvZiB0aGUgZmly
c3QgeG1tIHJlZ2lzdGVyIHN0b3JhZ2UgZm9yIDE2IGJ5dGUgYWxpZ25tZW50LgorICAgIEFTU0VS
VCghKG9mZnNldG9mKEFTTVByb2JlQ29udGV4dCwgY3B1LnhtbTApICUgMTYpKTsKKworICAgIC8v
IFBhY2sgdGhlIHNwYWNlIHRvIGFsbG9jYXRlIHNvIHRoYXQgdGhlIHN0YWNrIHBvaW50ZXIgd2ls
bCByZW1haW4KKyAgICAvLyAzMiBieXRlIGFsaWduZWQuCisgICAgY29uc3QgaW50IHBhY2tlZENQ
VUNvbnRleHRTaXplID0gV1RGX1BBQ0soc2l6ZW9mKEFTTVByb2JlQ29udGV4dCksIDUpOworCisg
ICAgLy8gQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBBU01Qcm9iZUNvbnRleHQ6CisgICAgc3ViUHRy
KFRydXN0ZWRJbW0zMihwYWNrZWRDUFVDb250ZXh0U2l6ZSksIHNwKTsKKworICAgIC8vIFNhdmUg
dGhlIGVheCByZWc6CisgICAgc3RvcmVQdHIoUmVnaXN0ZXJJRDo6ZWF4LCBBZGRyZXNzKHNwLCBv
ZmZzZXRvZihBU01Qcm9iZUNvbnRleHQsIGNwdS5lYXgpKSk7CisKKyAgICAvLyBTYXZlIHRoZSBv
cmlnaW5hbCBzcCBhcyB0aGUgZmFybWUgcG9pbnRlcjoKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihw
YWNrZWRDUFVDb250ZXh0U2l6ZSksIFJlZ2lzdGVySUQ6OmVheCk7CisgICAgYWRkUHRyKHNwLCBS
ZWdpc3RlcklEOjplYXgpOworICAgIHN0b3JlUHRyKFJlZ2lzdGVySUQ6OmVheCwgQWRkcmVzcyhz
cCwgb2Zmc2V0b2YoQVNNUHJvYmVDb250ZXh0LCBjcHUuZXNwKSkpOworCisgICAgLy8gU2F2ZSB0
aGUgcHJvYmUgZGF0YToKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGZ1bmN0aW9uKSksCisgICAgICAgIEFkZHJlc3Moc3AsIG9mZnNldG9mKEFTTVBy
b2JlQ29udGV4dCwgcHJvYmVGdW5jdGlvbikpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KGFyZzEpLCBBZGRyZXNzKHNwLCBvZmZzZXRvZihBU01Qcm9iZUNvbnRleHQsIGFyZzEpKSk7Cisg
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihhcmcyKSwgQWRkcmVzcyhzcCwgb2Zmc2V0b2YoQVNN
UHJvYmVDb250ZXh0LCBhcmcyKSkpOworCisgICAgLy8gQ2FsbCB0aGUgcHJvYmUgdHJhbXBvbGlu
ZToKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY3RpQVNN
UHJvYmVUcmFtcG9saW5lKSksIFJlZ2lzdGVySUQ6OmVheCk7CisgICAgY2FsbChSZWdpc3RlcklE
OjplYXgpOworfQorCisjZWxzZSAvLyBOb3QgaW1wbGVtZW50ZWQgQ1BVCisKK05PX1JFVFVSTl9E
VUVfVE9fQVNTRVJUCit2b2lkIEFTTVByb2JlQ29udGV4dDo6ZHVtcENQVVJlZ2lzdGVycyhjb25z
dCBjaGFyKiBpbmRlbnRhdGlvbikKK3sKKyAgICBVTlVTRURfUEFSQU0oaW5kZW50YXRpb24pOwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitOT19SRVRVUk5fRFVFX1RPX0FTU0VSVAor
dm9pZCBNYWNyb0Fzc2VtYmxlcjo6cHJvYmUoQVNNUHJvYmVGdW5jdGlvbiBmdW5jdGlvbiwgdm9p
ZCogYXJnMSwgdm9pZCogYXJnMikKK3sKKyAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb24pOworICAg
IFVOVVNFRF9QQVJBTShhcmcxKTsKKyAgICBVTlVTRURfUEFSQU0oYXJnMik7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKKyNlbmRpZiAvLyBOb3QgaW1wbGVtZW50ZWQgQ1BVCisjZW5k
aWYgLy8gVVNFKEFTTV9QUk9CRSkKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBF
TkFCTEUoQVNTRU1CTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTQ5NjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02NCw2ICs2NCwxMyBAQCB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyU0g0IE1hY3JvQXNz
ZW1ibGVyCiAKIG5hbWVzcGFjZSBKU0MgewogCisKKyNpZiBVU0UoQVNNX1BST0JFKQorc3RydWN0
IEFTTVByb2JlQ29udGV4dDsKK3R5cGVkZWYgdm9pZCAoKkFTTVByb2JlRnVuY3Rpb24pKEFTTVBy
b2JlQ29udGV4dCopOworI2VuZGlmCisKKwogY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMg
TWFjcm9Bc3NlbWJsZXJCYXNlIHsKIHB1YmxpYzoKIApAQCAtNTcxLDcgKzU3OCw5IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckJhc2U6OmJyYW5jaFRlc3Q4
KGNvbmQsIEFkZHJlc3MoYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCksIG1hc2spOwogICAg
IH0KLSNlbHNlCisKKyNlbHNlIC8vICFDUFUoWDg2XzY0KQorCiAgICAgdm9pZCBhZGRQdHIoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGFkZDY0KHNyYywg
ZGVzdCk7CkBAIC0xMDY3LDcgKzEwNzYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdG9yZTY0
KGltbS5hc1RydXN0ZWRJbW02NCgpLCBkZXN0KTsKICAgICB9CiAKLSNlbmRpZgorI2VuZGlmIC8v
IEVOQUJMRShKSVRfQ09OU1RBTlRfQkxJTkRJTkcpCiAKICNlbmRpZiAvLyAhQ1BVKFg4Nl82NCkK
IApAQCAtMTA3OSw3ICsxMDg4LDcgQEAgcHVibGljOgogICAgICAgICAvLyBEZWJ1ZyBhbHdheXMg
YmxpbmQgYWxsIGNvbnN0YW50cywgaWYgb25seSBzbyB3ZSBrbm93CiAgICAgICAgIC8vIGlmIHdl
J3ZlIGJyb2tlbiBibGluZGluZyBkdXJpbmcgcGF0Y2ggZGV2ZWxvcG1lbnQuCiAgICAgICAgIHJl
dHVybiB0cnVlOwotI2Vsc2UKKyNlbHNlIC8vIEVOQUJMRShGT1JDRURfSklUX0JMSU5ESU5HKQog
CiAgICAgICAgIC8vIEZpcnN0IG9mZiB3ZSdsbCBzcGVjaWFsIGNhc2UgY29tbW9uLCAic2FmZSIg
dmFsdWVzIHRvIGF2b2lkIGh1cnRpbmcKICAgICAgICAgLy8gcGVyZm9ybWFuY2UgdG9vIG11Y2gK
QEAgLTExMDAsNyArMTEwOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgICAgICByZXR1cm4gc2hvdWxkQmxpbmRGb3JTcGVjaWZpY0FyY2godmFsdWUpOwotI2Vu
ZGlmCisjZW5kaWYgLy8gRU5BQkxFKEZPUkNFRF9KSVRfQkxJTkRJTkcpCiAgICAgfQogCiAgICAg
c3RydWN0IEJsaW5kZWRJbW0zMiB7CkBAIC0xMjcxLDcgKzEyODAsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBzdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yUG9rZShpbmRleCkpOwogICAgIH0K
LSNlbmRpZgorI2VuZGlmIC8vIENQVShYODZfNjQpCiAgICAgCiAgICAgdm9pZCBzdG9yZTMyKElt
bTMyIGltbSwgQWRkcmVzcyBkZXN0KQogICAgIHsKQEAgLTEyODAsNyArMTI4OSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIEJsaW5kZWRJbW0zMiBibGluZCA9IHhvckJsaW5kQ29uc3RhbnQoaW1t
KTsKICAgICAgICAgICAgIHN0b3JlMzIoYmxpbmQudmFsdWUxLCBkZXN0KTsKICAgICAgICAgICAg
IHhvcjMyKGJsaW5kLnZhbHVlMiwgZGVzdCk7Ci0jZWxzZQorI2Vsc2UgLy8gQ1BVKFg4NikgfHwg
Q1BVKFg4Nl82NCkKICAgICAgICAgICAgIGlmIChSZWdpc3RlcklEIHNjcmF0Y2hSZWdpc3RlciA9
IChSZWdpc3RlcklEKXNjcmF0Y2hSZWdpc3RlckZvckJsaW5kaW5nKCkpIHsKICAgICAgICAgICAg
ICAgICBsb2FkWG9yQmxpbmRlZENvbnN0YW50KHhvckJsaW5kQ29uc3RhbnQoaW1tKSwgc2NyYXRj
aFJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICBzdG9yZTMyKHNjcmF0Y2hSZWdpc3RlciwgZGVz
dCk7CkBAIC0xMjkyLDcgKzEzMDEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIG5v
cCgpOwogICAgICAgICAgICAgICAgIHN0b3JlMzIoaW1tLmFzVHJ1c3RlZEltbTMyKCksIGRlc3Qp
OwogICAgICAgICAgICAgfQotI2VuZGlmCisjZW5kaWYgLy8gQ1BVKFg4NikgfHwgQ1BVKFg4Nl82
NCkKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBzdG9yZTMyKGltbS5hc1RydXN0ZWRJbW0z
MigpLCBkZXN0KTsKICAgICB9CkBAIC0xNDQwLDYgKzE0NDksMTAgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgdXJzaGlmdDMyKHNyYywgdHJ1c3RlZEltbTMyRm9yU2hpZnQoYW1vdW50KSwgZGVz
dCk7CiAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShKSVRfQ09OU1RBTlRfQkxJTkRJTkcpCisKKyNp
ZiBVU0UoQVNNX1BST0JFKQorICAgIHZvaWQgcHJvYmUoQVNNUHJvYmVGdW5jdGlvbiwgdm9pZCog
YXJnMSA9IDAsIHZvaWQqIGFyZzIgPSAwKTsKICNlbmRpZgogfTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiAxNDk2
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MSw2ICs3MSw3MCBAQCBuYW1lc3BhY2UgWDg2UmVn
aXN0ZXJzIHsKICAgICAgICAgeG1tNiwKICAgICAgICAgeG1tNywKICAgICB9IFhNTVJlZ2lzdGVy
SUQ7CisKKyNpZiBVU0UoQVNNX1BST0JFKQorICAgIHN0cnVjdCBYTU1SZWdpc3RlclZhbHVlIHsK
KyAgICAgICAgdWludDMyX3QgdTA7CisgICAgICAgIHVpbnQzMl90IHUxOworICAgICAgICB1aW50
MzJfdCB1MjsKKyAgICAgICAgdWludDMyX3QgdTM7CisgICAgfTsKKworICAgIC8vIFdlIHBhZCBz
b21lIHNwYWNlIGFmdGVyIHRoZSBHUFJlZ3Mgc3RvcmFnZSBiZWNhdXNlIHdlIHdhbnQgdGhlIEZQ
UmVncworICAgIC8vIHN0b3JhZ2UgdG8gc3RhcnQgb24gYSAxNiBieXRlICgxMjggYml0KSBhbGln
bm1lbnQuCisgICAgI2RlZmluZSBGT1JfRUFDSF9DUFVfUkVHSVNURVIoVikgXAorICAgICAgICBG
T1JfRUFDSF9DUFVfR1BSRUdJU1RFUihWKSBcCisgICAgICAgIEZPUl9FQUNIX0NQVV9QQURESU5H
KFYpIFwKKyAgICAgICAgRk9SX0VBQ0hfQ1BVX0ZQUkVHSVNURVIoVikKKworICAgICNkZWZpbmUg
Rk9SX0VBQ0hfQ1BVX0dQUkVHSVNURVIoVikgXAorICAgICAgICBWKHZvaWQqLCBlYXgpIFwKKyAg
ICAgICAgVih2b2lkKiwgZWN4KSBcCisgICAgICAgIFYodm9pZCosIGVkeCkgXAorICAgICAgICBW
KHZvaWQqLCBlYngpIFwKKyAgICAgICAgVih2b2lkKiwgZXNwKSBcCisgICAgICAgIFYodm9pZCos
IGVicCkgXAorICAgICAgICBWKHZvaWQqLCBlc2kpIFwKKyAgICAgICAgVih2b2lkKiwgZWRpKSBc
CisgICAgICAgIEZPUl9FQUNIX1g4Nl82NF9DUFVfR1BSRUdJU1RFUihWKSBcCisgICAgICAgIFYo
dm9pZCosIGVpcCkKKworICAgICNkZWZpbmUgRk9SX0VBQ0hfQ1BVX0ZQUkVHSVNURVIoVikgXAor
ICAgICAgICBWKFg4NlJlZ2lzdGVyczo6WE1NUmVnaXN0ZXJWYWx1ZSwgeG1tMCkgXAorICAgICAg
ICBWKFg4NlJlZ2lzdGVyczo6WE1NUmVnaXN0ZXJWYWx1ZSwgeG1tMSkgXAorICAgICAgICBWKFg4
NlJlZ2lzdGVyczo6WE1NUmVnaXN0ZXJWYWx1ZSwgeG1tMikgXAorICAgICAgICBWKFg4NlJlZ2lz
dGVyczo6WE1NUmVnaXN0ZXJWYWx1ZSwgeG1tMykgXAorICAgICAgICBWKFg4NlJlZ2lzdGVyczo6
WE1NUmVnaXN0ZXJWYWx1ZSwgeG1tNCkgXAorICAgICAgICBWKFg4NlJlZ2lzdGVyczo6WE1NUmVn
aXN0ZXJWYWx1ZSwgeG1tNSkgXAorICAgICAgICBWKFg4NlJlZ2lzdGVyczo6WE1NUmVnaXN0ZXJW
YWx1ZSwgeG1tNikgXAorICAgICAgICBWKFg4NlJlZ2lzdGVyczo6WE1NUmVnaXN0ZXJWYWx1ZSwg
eG1tNykKKworI2lmIENQVShYODYpCisKKyAgICAjZGVmaW5lIEZPUl9FQUNIX0NQVV9QQURESU5H
KFYpIFwKKyAgICAgICAgVih2b2lkKiwgYWxpZ25tZW50UGFkZGluZzEpIFwKKyAgICAgICAgVih2
b2lkKiwgYWxpZ25tZW50UGFkZGluZzIpIFwKKyAgICAgICAgVih2b2lkKiwgYWxpZ25tZW50UGFk
ZGluZzMpCisKKyAgICAjZGVmaW5lIEZPUl9FQUNIX1g4Nl82NF9DUFVfR1BSRUdJU1RFUihWKSAv
LyBOb3RoaW5nIHRvIGFkZC4KKworI2VsaWYgQ1BVKFg4Nl82NCkKKworICAgICNkZWZpbmUgRk9S
X0VBQ0hfQ1BVX1BBRERJTkcoVikgXAorICAgICAgICBWKHZvaWQqLCBhbGlnbm1lbnRQYWRkaW5n
MSkKKworICAgICNkZWZpbmUgRk9SX0VBQ0hfWDg2XzY0X0NQVV9HUFJFR0lTVEVSKFYpIFwKKyAg
ICAgICAgVih2b2lkKiwgcjgpIFwKKyAgICAgICAgVih2b2lkKiwgcjkpIFwKKyAgICAgICAgVih2
b2lkKiwgcjEwKSBcCisgICAgICAgIFYodm9pZCosIHIxMSkgXAorICAgICAgICBWKHZvaWQqLCBy
MTIpIFwKKyAgICAgICAgVih2b2lkKiwgcjEzKSBcCisgICAgICAgIFYodm9pZCosIHIxNCkgXAor
ICAgICAgICBWKHZvaWQqLCByMTUpCisKKyNlbmRpZiAvLyBDUFUoWDg2XzY0KQorI2VuZGlmIC8v
IFVTRShBU01fUFJPQkUpCiB9CiAKIGNsYXNzIFg4NkFzc2VtYmxlciB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTQ5NjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEy
ICszMywxMyBAQAogI2lmIEVOQUJMRShKSVQpCiAjaW5jbHVkZSAiSklUU3R1YnMuaCIKIAotI2lu
Y2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgorI2luY2x1ZGUgIkFTTVByb2JlQ29udGV4dC5oIgog
I2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJD
b2RlUHJvZmlsaW5nLmgiCisjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAi
REZHT1NSRW50cnkuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkhlbHBlcnMuaCIKQEAgLTc3LDYgKzc4LDEwMSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBu
YW1lc3BhY2UgSlNDIHsKIAorI2lmIFVTRShBU01fUFJPQkUpCisKKy8vIFRoZSBmb2xsb3dpbmcg
YXJlIG9mZnNldHMgZm9yIEFTTVByb2JlQ29udGV4dCBmaWVsZHM6CisjaWYgQ1BVKFg4NikgfHwg
Q1BVKFg4Nl82NCkKKworI2lmIENQVShYODYpCisjZGVmaW5lIFBUUl9TSVpFIDQKKyNlbHNlIC8v
IENQVShYODZfNjQpCisjZGVmaW5lIFBUUl9TSVpFIDgKKyNlbmRpZgorCisjZGVmaW5lIFBST0JF
X1BST0JFX0ZVTkNUSU9OX09GRlNFVCAoMCAqIFBUUl9TSVpFKQorI2RlZmluZSBQUk9CRV9BUkcx
X09GRlNFVCAoMSAqIFBUUl9TSVpFKQorI2RlZmluZSBQUk9CRV9BUkcyX09GRlNFVCAoMiAqIFBU
Ul9TSVpFKQorI2RlZmluZSBQUk9CRV9KSVRfU1RBQ0tfRlJBTUVfT0ZGU0VUICgzICogUFRSX1NJ
WkUpCisKKyNkZWZpbmUgUFJPQkVfQ1BVX0VBWF9PRkZTRVQgKDQgKiBQVFJfU0laRSkKKyNkZWZp
bmUgUFJPQkVfQ1BVX0VDWF9PRkZTRVQgKDUgKiBQVFJfU0laRSkKKyNkZWZpbmUgUFJPQkVfQ1BV
X0VEWF9PRkZTRVQgKDYgKiBQVFJfU0laRSkKKyNkZWZpbmUgUFJPQkVfQ1BVX0VCWF9PRkZTRVQg
KDcgKiBQVFJfU0laRSkKKyNkZWZpbmUgUFJPQkVfQ1BVX0VTUF9PRkZTRVQgKDggKiBQVFJfU0la
RSkKKyNkZWZpbmUgUFJPQkVfQ1BVX0VCUF9PRkZTRVQgKDkgKiBQVFJfU0laRSkKKyNkZWZpbmUg
UFJPQkVfQ1BVX0VTSV9PRkZTRVQgKDEwICogUFRSX1NJWkUpCisjZGVmaW5lIFBST0JFX0NQVV9F
RElfT0ZGU0VUICgxMSAqIFBUUl9TSVpFKQorCisjaWYgQ1BVKFg4NikKKworI2RlZmluZSBQUk9C
RV9DUFVfRUlQX09GRlNFVCAoMTIgKiBQVFJfU0laRSkKKyNkZWZpbmUgUFJPQkVfRklSU1RfWE1N
X09GRlNFVCAoMTYgKiBQVFJfU0laRSkgLy8gQWZ0ZXIgcGFkZGluZy4KKworI2Vsc2UgLy8gQ1BV
KFg4Nl82NCkKKworI2RlZmluZSBQUk9CRV9DUFVfUjhfT0ZGU0VUICgxMiAqIFBUUl9TSVpFKQor
I2RlZmluZSBQUk9CRV9DUFVfUjlfT0ZGU0VUICgxMyAqIFBUUl9TSVpFKQorI2RlZmluZSBQUk9C
RV9DUFVfUjEwX09GRlNFVCAoMTQgKiBQVFJfU0laRSkKKyNkZWZpbmUgUFJPQkVfQ1BVX1IxMV9P
RkZTRVQgKDE1ICogUFRSX1NJWkUpCisjZGVmaW5lIFBST0JFX0NQVV9SMTJfT0ZGU0VUICgxNiAq
IFBUUl9TSVpFKQorI2RlZmluZSBQUk9CRV9DUFVfUjEzX09GRlNFVCAoMTcgKiBQVFJfU0laRSkK
KyNkZWZpbmUgUFJPQkVfQ1BVX1IxNF9PRkZTRVQgKDE4ICogUFRSX1NJWkUpCisjZGVmaW5lIFBS
T0JFX0NQVV9SMTVfT0ZGU0VUICgxOSAqIFBUUl9TSVpFKQorI2RlZmluZSBQUk9CRV9DUFVfRUlQ
X09GRlNFVCAoMjAgKiBQVFJfU0laRSkKKyNkZWZpbmUgUFJPQkVfRklSU1RfWE1NX09GRlNFVCAo
MjIgKiBQVFJfU0laRSkgLy8gQWZ0ZXIgcGFkZGluZy4KKworI2VuZGlmIC8vIENQVShYODZfNjQp
CisKKyNkZWZpbmUgWE1NX1NJWkUgMTYKKyNkZWZpbmUgUFJPQkVfQ1BVX1hNTTBfT0ZGU0VUIChQ
Uk9CRV9GSVJTVF9YTU1fT0ZGU0VUICsgKDAgKiBYTU1fU0laRSkpCisjZGVmaW5lIFBST0JFX0NQ
VV9YTU0xX09GRlNFVCAoUFJPQkVfRklSU1RfWE1NX09GRlNFVCArICgxICogWE1NX1NJWkUpKQor
I2RlZmluZSBQUk9CRV9DUFVfWE1NMl9PRkZTRVQgKFBST0JFX0ZJUlNUX1hNTV9PRkZTRVQgKyAo
MiAqIFhNTV9TSVpFKSkKKyNkZWZpbmUgUFJPQkVfQ1BVX1hNTTNfT0ZGU0VUIChQUk9CRV9GSVJT
VF9YTU1fT0ZGU0VUICsgKDMgKiBYTU1fU0laRSkpCisjZGVmaW5lIFBST0JFX0NQVV9YTU00X09G
RlNFVCAoUFJPQkVfRklSU1RfWE1NX09GRlNFVCArICg0ICogWE1NX1NJWkUpKQorI2RlZmluZSBQ
Uk9CRV9DUFVfWE1NNV9PRkZTRVQgKFBST0JFX0ZJUlNUX1hNTV9PRkZTRVQgKyAoNSAqIFhNTV9T
SVpFKSkKKyNkZWZpbmUgUFJPQkVfQ1BVX1hNTTZfT0ZGU0VUIChQUk9CRV9GSVJTVF9YTU1fT0ZG
U0VUICsgKDYgKiBYTU1fU0laRSkpCisjZGVmaW5lIFBST0JFX0NQVV9YTU03X09GRlNFVCAoUFJP
QkVfRklSU1RfWE1NX09GRlNFVCArICg3ICogWE1NX1NJWkUpKQorCisvLyBUaGVzZSBBU1NFUlRz
IHJlbWluZCB5b3UgdGhhdCBpZiB5b3UgY2hhbmdlIHRoZSBsYXlvdXQgb2YgQVNNUHJvYmVDb250
ZXh0LAorLy8geW91IG5lZWQgdG8gY2hhbmdlIGN0aUFTTVByb2JlVHJhbXBvbGluZSBvZmZzZXRz
IGFib3ZlIHRvIG1hdGNoLgorQ09NUElMRV9BU1NFUlQob2Zmc2V0b2Yoc3RydWN0IEFTTVByb2Jl
Q29udGV4dCwgcHJvYmVGdW5jdGlvbikgPT0gUFJPQkVfUFJPQkVfRlVOQ1RJT05fT0ZGU0VULCBB
U01Qcm9iZUNvbnRleHRfcHJvYmVGdW5jdGlvbl9vZmZzZXRfbWF0Y2hlc19jdGlBU01Qcm9iZVRy
YW1wb2xpbmUpOworQ09NUElMRV9BU1NFUlQob2Zmc2V0b2Yoc3RydWN0IEFTTVByb2JlQ29udGV4
dCwgYXJnMSkgPT0gUFJPQkVfQVJHMV9PRkZTRVQsIEFTTVByb2JlQ29udGV4dF9hcmcxX29mZnNl
dF9tYXRjaGVzX2N0aUFTTVByb2JlVHJhbXBvbGluZSk7CitDT01QSUxFX0FTU0VSVChvZmZzZXRv
ZihzdHJ1Y3QgQVNNUHJvYmVDb250ZXh0LCBhcmcyKSA9PSBQUk9CRV9BUkcyX09GRlNFVCwgQVNN
UHJvYmVDb250ZXh0X2FyZzJfb2Zmc2V0X21hdGNoZXNfY3RpQVNNUHJvYmVUcmFtcG9saW5lKTsK
K0NPTVBJTEVfQVNTRVJUKG9mZnNldG9mKHN0cnVjdCBBU01Qcm9iZUNvbnRleHQsIGppdFN0YWNr
RnJhbWUpID09IFBST0JFX0pJVF9TVEFDS19GUkFNRV9PRkZTRVQsIEFTTVByb2JlQ29udGV4dF9q
aXRTdGFja0ZyYW1lX29mZnNldF9tYXRjaGVzX2N0aUFTTVByb2JlVHJhbXBvbGluZSk7CisKK0NP
TVBJTEVfQVNTRVJUKG9mZnNldG9mKHN0cnVjdCBBU01Qcm9iZUNvbnRleHQsIGNwdS5lYXgpID09
IFBST0JFX0NQVV9FQVhfT0ZGU0VULCBBU01Qcm9iZUNvbnRleHRfY3B1X2VheF9vZmZzZXRfbWF0
Y2hlc19jdGlBU01Qcm9iZVRyYW1wb2xpbmUpOworQ09NUElMRV9BU1NFUlQob2Zmc2V0b2Yoc3Ry
dWN0IEFTTVByb2JlQ29udGV4dCwgY3B1LmVjeCkgPT0gUFJPQkVfQ1BVX0VDWF9PRkZTRVQsIEFT
TVByb2JlQ29udGV4dF9jcHVfZWN4X29mZnNldF9tYXRjaGVzX2N0aUFTTVByb2JlVHJhbXBvbGlu
ZSk7CitDT01QSUxFX0FTU0VSVChvZmZzZXRvZihzdHJ1Y3QgQVNNUHJvYmVDb250ZXh0LCBjcHUu
ZWR4KSA9PSBQUk9CRV9DUFVfRURYX09GRlNFVCwgQVNNUHJvYmVDb250ZXh0X2NwdV9lZHhfb2Zm
c2V0X21hdGNoZXNfY3RpQVNNUHJvYmVUcmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJUKG9mZnNl
dG9mKHN0cnVjdCBBU01Qcm9iZUNvbnRleHQsIGNwdS5lYngpID09IFBST0JFX0NQVV9FQlhfT0ZG
U0VULCBBU01Qcm9iZUNvbnRleHRfY3B1X2VieF9vZmZzZXRfbWF0Y2hlc19jdGlBU01Qcm9iZVRy
YW1wb2xpbmUpOworQ09NUElMRV9BU1NFUlQob2Zmc2V0b2Yoc3RydWN0IEFTTVByb2JlQ29udGV4
dCwgY3B1LmVzcCkgPT0gUFJPQkVfQ1BVX0VTUF9PRkZTRVQsIEFTTVByb2JlQ29udGV4dF9jcHVf
ZXNwX29mZnNldF9tYXRjaGVzX2N0aUFTTVByb2JlVHJhbXBvbGluZSk7CitDT01QSUxFX0FTU0VS
VChvZmZzZXRvZihzdHJ1Y3QgQVNNUHJvYmVDb250ZXh0LCBjcHUuZWJwKSA9PSBQUk9CRV9DUFVf
RUJQX09GRlNFVCwgQVNNUHJvYmVDb250ZXh0X2NwdV9lYnBfb2Zmc2V0X21hdGNoZXNfY3RpQVNN
UHJvYmVUcmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJUKG9mZnNldG9mKHN0cnVjdCBBU01Qcm9i
ZUNvbnRleHQsIGNwdS5lc2kpID09IFBST0JFX0NQVV9FU0lfT0ZGU0VULCBBU01Qcm9iZUNvbnRl
eHRfY3B1X2VzaV9vZmZzZXRfbWF0Y2hlc19jdGlBU01Qcm9iZVRyYW1wb2xpbmUpOworQ09NUElM
RV9BU1NFUlQob2Zmc2V0b2Yoc3RydWN0IEFTTVByb2JlQ29udGV4dCwgY3B1LmVkaSkgPT0gUFJP
QkVfQ1BVX0VESV9PRkZTRVQsIEFTTVByb2JlQ29udGV4dF9jcHVfZWRpX29mZnNldF9tYXRjaGVz
X2N0aUFTTVByb2JlVHJhbXBvbGluZSk7CisjaWYgQ1BVKFg4Nl82NCkKK0NPTVBJTEVfQVNTRVJU
KG9mZnNldG9mKHN0cnVjdCBBU01Qcm9iZUNvbnRleHQsIGNwdS5yOCkgPT0gUFJPQkVfQ1BVX1I4
X09GRlNFVCwgQVNNUHJvYmVDb250ZXh0X2NwdV9yOF9vZmZzZXRfbWF0Y2hlc19jdGlBU01Qcm9i
ZVRyYW1wb2xpbmUpOworQ09NUElMRV9BU1NFUlQob2Zmc2V0b2Yoc3RydWN0IEFTTVByb2JlQ29u
dGV4dCwgY3B1LnI5KSA9PSBQUk9CRV9DUFVfUjlfT0ZGU0VULCBBU01Qcm9iZUNvbnRleHRfY3B1
X3I5X29mZnNldF9tYXRjaGVzX2N0aUFTTVByb2JlVHJhbXBvbGluZSk7CitDT01QSUxFX0FTU0VS
VChvZmZzZXRvZihzdHJ1Y3QgQVNNUHJvYmVDb250ZXh0LCBjcHUucjEwKSA9PSBQUk9CRV9DUFVf
UjEwX09GRlNFVCwgQVNNUHJvYmVDb250ZXh0X2NwdV9yMTBfb2Zmc2V0X21hdGNoZXNfY3RpQVNN
UHJvYmVUcmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJUKG9mZnNldG9mKHN0cnVjdCBBU01Qcm9i
ZUNvbnRleHQsIGNwdS5yMTEpID09IFBST0JFX0NQVV9SMTFfT0ZGU0VULCBBU01Qcm9iZUNvbnRl
eHRfY3B1X3IxMV9vZmZzZXRfbWF0Y2hlc19jdGlBU01Qcm9iZVRyYW1wb2xpbmUpOworQ09NUElM
RV9BU1NFUlQob2Zmc2V0b2Yoc3RydWN0IEFTTVByb2JlQ29udGV4dCwgY3B1LnIxMikgPT0gUFJP
QkVfQ1BVX1IxMl9PRkZTRVQsIEFTTVByb2JlQ29udGV4dF9jcHVfcjEyX29mZnNldF9tYXRjaGVz
X2N0aUFTTVByb2JlVHJhbXBvbGluZSk7CitDT01QSUxFX0FTU0VSVChvZmZzZXRvZihzdHJ1Y3Qg
QVNNUHJvYmVDb250ZXh0LCBjcHUucjEzKSA9PSBQUk9CRV9DUFVfUjEzX09GRlNFVCwgQVNNUHJv
YmVDb250ZXh0X2NwdV9yMTNfb2Zmc2V0X21hdGNoZXNfY3RpQVNNUHJvYmVUcmFtcG9saW5lKTsK
K0NPTVBJTEVfQVNTRVJUKG9mZnNldG9mKHN0cnVjdCBBU01Qcm9iZUNvbnRleHQsIGNwdS5yMTQp
ID09IFBST0JFX0NQVV9SMTRfT0ZGU0VULCBBU01Qcm9iZUNvbnRleHRfY3B1X3IxNF9vZmZzZXRf
bWF0Y2hlc19jdGlBU01Qcm9iZVRyYW1wb2xpbmUpOworQ09NUElMRV9BU1NFUlQob2Zmc2V0b2Yo
c3RydWN0IEFTTVByb2JlQ29udGV4dCwgY3B1LnIxNSkgPT0gUFJPQkVfQ1BVX1IxNV9PRkZTRVQs
IEFTTVByb2JlQ29udGV4dF9jcHVfcjE1X29mZnNldF9tYXRjaGVzX2N0aUFTTVByb2JlVHJhbXBv
bGluZSk7CisjZW5kaWYgLy8gQ1BVKFg4Nl82NCkKK0NPTVBJTEVfQVNTRVJUKG9mZnNldG9mKHN0
cnVjdCBBU01Qcm9iZUNvbnRleHQsIGNwdS5laXApID09IFBST0JFX0NQVV9FSVBfT0ZGU0VULCBB
U01Qcm9iZUNvbnRleHRfY3B1X2VpcF9vZmZzZXRfbWF0Y2hlc19jdGlBU01Qcm9iZVRyYW1wb2xp
bmUpOworCitDT01QSUxFX0FTU0VSVChvZmZzZXRvZihzdHJ1Y3QgQVNNUHJvYmVDb250ZXh0LCBj
cHUueG1tMCkgPT0gUFJPQkVfQ1BVX1hNTTBfT0ZGU0VULCBBU01Qcm9iZUNvbnRleHRfY3B1X3ht
bTBfb2Zmc2V0X21hdGNoZXNfY3RpQVNNUHJvYmVUcmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJU
KG9mZnNldG9mKHN0cnVjdCBBU01Qcm9iZUNvbnRleHQsIGNwdS54bW0xKSA9PSBQUk9CRV9DUFVf
WE1NMV9PRkZTRVQsIEFTTVByb2JlQ29udGV4dF9jcHVfeG1tMV9vZmZzZXRfbWF0Y2hlc19jdGlB
U01Qcm9iZVRyYW1wb2xpbmUpOworQ09NUElMRV9BU1NFUlQob2Zmc2V0b2Yoc3RydWN0IEFTTVBy
b2JlQ29udGV4dCwgY3B1LnhtbTIpID09IFBST0JFX0NQVV9YTU0yX09GRlNFVCwgQVNNUHJvYmVD
b250ZXh0X2NwdV94bW0yX29mZnNldF9tYXRjaGVzX2N0aUFTTVByb2JlVHJhbXBvbGluZSk7CitD
T01QSUxFX0FTU0VSVChvZmZzZXRvZihzdHJ1Y3QgQVNNUHJvYmVDb250ZXh0LCBjcHUueG1tMykg
PT0gUFJPQkVfQ1BVX1hNTTNfT0ZGU0VULCBBU01Qcm9iZUNvbnRleHRfY3B1X3htbTNfb2Zmc2V0
X21hdGNoZXNfY3RpQVNNUHJvYmVUcmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJUKG9mZnNldG9m
KHN0cnVjdCBBU01Qcm9iZUNvbnRleHQsIGNwdS54bW00KSA9PSBQUk9CRV9DUFVfWE1NNF9PRkZT
RVQsIEFTTVByb2JlQ29udGV4dF9jcHVfeG1tNF9vZmZzZXRfbWF0Y2hlc19jdGlBU01Qcm9iZVRy
YW1wb2xpbmUpOworQ09NUElMRV9BU1NFUlQob2Zmc2V0b2Yoc3RydWN0IEFTTVByb2JlQ29udGV4
dCwgY3B1LnhtbTUpID09IFBST0JFX0NQVV9YTU01X09GRlNFVCwgQVNNUHJvYmVDb250ZXh0X2Nw
dV94bW01X29mZnNldF9tYXRjaGVzX2N0aUFTTVByb2JlVHJhbXBvbGluZSk7CitDT01QSUxFX0FT
U0VSVChvZmZzZXRvZihzdHJ1Y3QgQVNNUHJvYmVDb250ZXh0LCBjcHUueG1tNikgPT0gUFJPQkVf
Q1BVX1hNTTZfT0ZGU0VULCBBU01Qcm9iZUNvbnRleHRfY3B1X3htbTZfb2Zmc2V0X21hdGNoZXNf
Y3RpQVNNUHJvYmVUcmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJUKG9mZnNldG9mKHN0cnVjdCBB
U01Qcm9iZUNvbnRleHQsIGNwdS54bW03KSA9PSBQUk9CRV9DUFVfWE1NN19PRkZTRVQsIEFTTVBy
b2JlQ29udGV4dF9jcHVfeG1tN19vZmZzZXRfbWF0Y2hlc19jdGlBU01Qcm9iZVRyYW1wb2xpbmUp
OworCisjZW5kaWYgLy8gQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKKyNlbmRpZiAvLyBVU0UoQVNN
X1BST0JFKQorCisKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCiAjaWYgQ09NUElMRVIoR0NDKSAm
JiBDUFUoWDg2KQpAQCAtMTMzLDYgKzIyOSw3MyBAQCBTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dO
b3RDYXVnaHQpICI6IiAiCiAgICAgInJldCIgIlxuIgogKTsKICAgICAKKyNpZiBVU0UoQVNNX1BS
T0JFKQorYXNtICgKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aUFTTVByb2JlVHJhbXBvbGlu
ZSkgIlxuIgorSElERV9TWU1CT0woY3RpQVNNUHJvYmVUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xf
U1RSSU5HKGN0aUFTTVByb2JlVHJhbXBvbGluZSkgIjoiICJcbiIKKyAgICAvLyBTYXZlIHRoZSBQ
QyBvZiBpbnN0cnVjdGlvbiBhZnRlciB0aGUgcHJvYmU6CisgICAgInBvcGwgJWVheCIgIlxuIgor
ICAgICJtb3ZsICVlYXgsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FSVBfT0ZGU0VU
KSAiKCVlc3ApIiAiXG4iCisKKyAgICAvLyBTYXZlIHRoZSByZXN0IG9mIHRoZSBzdGlsbCB1bnNh
dmVkIHJlZ2lzdGVyczoKKyAgICAibW92bCAlZWN4LCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9C
RV9DUFVfRUNYX09GRlNFVCkgIiglZXNwKSIgIlxuIgorICAgICJtb3ZsICVlZHgsICIgU1RSSU5H
SVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FRFhfT0ZGU0VUKSAiKCVlc3ApIiAiXG4iCisgICAgIm1v
dmwgJWVieCwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX0VCWF9PRkZTRVQpICIoJWVz
cCkiICJcbiIKKyAgICAibW92bCAlZWJwLCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVf
RUJQX09GRlNFVCkgIiglZXNwKSIgIlxuIgorICAgICJtb3ZsICVlc2ksICIgU1RSSU5HSVpFX1ZB
TFVFX09GKFBST0JFX0NQVV9FU0lfT0ZGU0VUKSAiKCVlc3ApIiAiXG4iCisgICAgIm1vdmwgJWVk
aSwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX0VESV9PRkZTRVQpICIoJWVzcCkiICJc
biIKKworICAgICJtb3ZkcWEgJXhtbTAsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9Y
TU0wX09GRlNFVCkgIiglZXNwKSIgIlxuIgorICAgICJtb3ZkcWEgJXhtbTEsICIgU1RSSU5HSVpF
X1ZBTFVFX09GKFBST0JFX0NQVV9YTU0xX09GRlNFVCkgIiglZXNwKSIgIlxuIgorICAgICJtb3Zk
cWEgJXhtbTIsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU0yX09GRlNFVCkgIigl
ZXNwKSIgIlxuIgorICAgICJtb3ZkcWEgJXhtbTMsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JF
X0NQVV9YTU0zX09GRlNFVCkgIiglZXNwKSIgIlxuIgorICAgICJtb3ZkcWEgJXhtbTQsICIgU1RS
SU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU00X09GRlNFVCkgIiglZXNwKSIgIlxuIgorICAg
ICJtb3ZkcWEgJXhtbTUsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU01X09GRlNF
VCkgIiglZXNwKSIgIlxuIgorICAgICJtb3ZkcWEgJXhtbTYsICIgU1RSSU5HSVpFX1ZBTFVFX09G
KFBST0JFX0NQVV9YTU02X09GRlNFVCkgIiglZXNwKSIgIlxuIgorICAgICJtb3ZkcWEgJXhtbTcs
ICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU03X09GRlNFVCkgIiglZXNwKSIgIlxu
IgorCisgICAgLy8gRmlsbCBpbiB0aGUgaml0U3RhY2tGcmFtZSBwb2ludGVyOgorICAgICJtb3Zs
ICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FU1BfT0ZGU0VUKSAiKCVlc3ApLCAlZWF4
IiAiXG4iCisgICAgIm1vdmwgJWVheCwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfSklUX1NU
QUNLX0ZSQU1FX09GRlNFVCkgIiglZXNwKSIgIlxuIgorCisgICAgIm1vdmwgJWVzcCwgJWVicCIg
IlxuIiAvLyBTYXZlIHRoZSBBU01Qcm9iZUNvbnRleHQqLgorCisgICAgLy8gUmVzZXJ2ZSBzdGFj
ayBzcGFjZSBmb3IgdGhlIGFyZyB3aGlsZSBtYWludGFpbmluZyByZXF1aXJlZCBzdGFjaworICAg
IC8vIHBvaW50ZXIgYWxpZ25tZW50OgorICAgICJzdWJsICQweDEwLCAlZXNwIiAiXG4iCisKKyAg
ICAvLyBDYWxsIHRoZSBwcm9iZSBwYXNzaW5nIHRoZSBjb250ZXh0IHBvaW50ZXI6CisgICAgIm1v
dmwgJWVicCwgMCglZXNwKSIgIlxuIiAvLyB0aGUgQVNNUHJvYmVDb250ZXh0KiBhcmcuCisgICAg
ImNhbGwgKiIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX1BST0JFX0ZVTkNUSU9OX09GRlNFVCkg
IiglZWJwKSIgIlxuIgorCisgICAgLy8gUmVzdG9yZSB0aGUgcmVnaXN0ZXJzIGV4Y2VwdCBmb3Ig
JWVicDoKKyAgICAibW92bCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRUFYX09GRlNF
VCkgIiglZWJwKSwgJWVheCIgIlxuIgorICAgICJtb3ZsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBS
T0JFX0NQVV9FQ1hfT0ZGU0VUKSAiKCVlYnApLCAlZWN4IiAiXG4iCisgICAgIm1vdmwgIiBTVFJJ
TkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX0VEWF9PRkZTRVQpICIoJWVicCksICVlZHgiICJcbiIK
KyAgICAibW92bCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRUJYX09GRlNFVCkgIigl
ZWJwKSwgJWVieCIgIlxuIgorICAgICJtb3ZsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQ
VV9FU1BfT0ZGU0VUKSAiKCVlYnApLCAlZXNwIiAiXG4iCisgICAgIm1vdmwgIiBTVFJJTkdJWkVf
VkFMVUVfT0YoUFJPQkVfQ1BVX0VTSV9PRkZTRVQpICIoJWVicCksICVlc2kiICJcbiIKKyAgICAi
bW92bCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRURJX09GRlNFVCkgIiglZWJwKSwg
JWVkaSIgIlxuIgorCisgICAgIm1vdmRxYSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVf
WE1NMF9PRkZTRVQpICIoJWVicCksICV4bW0wIiAiXG4iCisgICAgIm1vdmRxYSAiIFNUUklOR0la
RV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NMV9PRkZTRVQpICIoJWVicCksICV4bW0xIiAiXG4iCisg
ICAgIm1vdmRxYSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NMl9PRkZTRVQpICIo
JWVicCksICV4bW0yIiAiXG4iCisgICAgIm1vdmRxYSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9C
RV9DUFVfWE1NM19PRkZTRVQpICIoJWVicCksICV4bW0zIiAiXG4iCisgICAgIm1vdmRxYSAiIFNU
UklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NNF9PRkZTRVQpICIoJWVicCksICV4bW00IiAi
XG4iCisgICAgIm1vdmRxYSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NNV9PRkZT
RVQpICIoJWVicCksICV4bW01IiAiXG4iCisgICAgIm1vdmRxYSAiIFNUUklOR0laRV9WQUxVRV9P
RihQUk9CRV9DUFVfWE1NNl9PRkZTRVQpICIoJWVicCksICV4bW02IiAiXG4iCisgICAgIm1vdmRx
YSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NN19PRkZTRVQpICIoJWVicCksICV4
bW03IiAiXG4iCisKKyAgICAvLyBSZXN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcyBmb3IgdGhlIHJl
dCBiZWxvdzoKKyAgICAicHVzaGwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX0VJUF9P
RkZTRVQpICIoJWVicCkiICJcbiIKKworICAgIC8vIEV2ZXJ5dGhpbmcncyByZXN0b3JlZC4gTm93
IHJlc3RvcmUgdGhlICVlYnAsIGFuZCByZXR1cm46CisgICAgIm1vdmwgIiBTVFJJTkdJWkVfVkFM
VUVfT0YoUFJPQkVfQ1BVX0VCUF9PRkZTRVQpICIoJWVicCksICVlYnAiICJcbiIKKyAgICAicmV0
IiAiXG4iCispOworI2VuZGlmIC8vIFVTRShBU01fUFJPQkUpCisgICAgCiAjZWxpZiAoQ09NUElM
RVIoR0NDKSB8fCBDT01QSUxFUihSVkNUKSkgJiYgQ1BVKEFSTV9USFVNQjIpCiAKICNkZWZpbmUg
VEhVTktfUkVUVVJOX0FERFJFU1NfT0ZGU0VUICAgICAgMHgzOApAQCAtMzc3LDYgKzU0MCw4NyBA
QCBTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQpICI6IiAiCiAgICAgInJldCIgIlxu
IgogKTsKIAorI2lmIFVTRShBU01fUFJPQkUpCithc20gKAorIi5nbG9ibCAiIFNZTUJPTF9TVFJJ
TkcoY3RpQVNNUHJvYmVUcmFtcG9saW5lKSAiXG4iCitISURFX1NZTUJPTChjdGlBU01Qcm9iZVRy
YW1wb2xpbmUpICJcbiIKK1NZTUJPTF9TVFJJTkcoY3RpQVNNUHJvYmVUcmFtcG9saW5lKSAiOiIg
IlxuIgorICAgIC8vIFNhdmUgdGhlIFBDIG9mIGluc3RydWN0aW9uIGFmdGVyIHRoZSBwcm9iZToK
KyAgICAicG9wcSAlcmF4IiAiXG4iCisgICAgIm1vdnEgJXJheCwgIiBTVFJJTkdJWkVfVkFMVUVf
T0YoUFJPQkVfQ1BVX0VJUF9PRkZTRVQpICIoJXJzcCkiICJcbiIKKworICAgIC8vIFNhdmUgdGhl
IHJlc3Qgb2YgdGhlIHN0aWxsIHVuc2F2ZWQgcmVnaXN0ZXJzOgorICAgICJtb3ZxICVyY3gsICIg
U1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FQ1hfT0ZGU0VUKSAiKCVyc3ApIiAiXG4iCisg
ICAgIm1vdnEgJXJkeCwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX0VEWF9PRkZTRVQp
ICIoJXJzcCkiICJcbiIKKyAgICAibW92cSAlcmJ4LCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9C
RV9DUFVfRUJYX09GRlNFVCkgIiglcnNwKSIgIlxuIgorICAgICJtb3ZxICVyYnAsICIgU1RSSU5H
SVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FQlBfT0ZGU0VUKSAiKCVyc3ApIiAiXG4iCisgICAgIm1v
dnEgJXJzaSwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX0VTSV9PRkZTRVQpICIoJXJz
cCkiICJcbiIKKyAgICAibW92cSAlcmRpLCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVf
RURJX09GRlNFVCkgIiglcnNwKSIgIlxuIgorCisgICAgIm1vdnEgJXI4LCAiIFNUUklOR0laRV9W
QUxVRV9PRihQUk9CRV9DUFVfUjhfT0ZGU0VUKSAiKCVyc3ApIiAiXG4iCisgICAgIm1vdnEgJXI5
LCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfUjlfT0ZGU0VUKSAiKCVyc3ApIiAiXG4i
CisgICAgIm1vdnEgJXIxMCwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1IxMF9PRkZT
RVQpICIoJXJzcCkiICJcbiIKKyAgICAibW92cSAlcjExLCAiIFNUUklOR0laRV9WQUxVRV9PRihQ
Uk9CRV9DUFVfUjExX09GRlNFVCkgIiglcnNwKSIgIlxuIgorICAgICJtb3ZxICVyMTIsICIgU1RS
SU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9SMTJfT0ZGU0VUKSAiKCVyc3ApIiAiXG4iCisgICAg
Im1vdnEgJXIxMywgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1IxM19PRkZTRVQpICIo
JXJzcCkiICJcbiIKKyAgICAibW92cSAlcjE0LCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9D
UFVfUjE0X09GRlNFVCkgIiglcnNwKSIgIlxuIgorICAgICJtb3ZxICVyMTUsICIgU1RSSU5HSVpF
X1ZBTFVFX09GKFBST0JFX0NQVV9SMTVfT0ZGU0VUKSAiKCVyc3ApIiAiXG4iCisKKyAgICAibW92
ZHFhICV4bW0wLCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NMF9PRkZTRVQpICIo
JXJzcCkiICJcbiIKKyAgICAibW92ZHFhICV4bW0xLCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9C
RV9DUFVfWE1NMV9PRkZTRVQpICIoJXJzcCkiICJcbiIKKyAgICAibW92ZHFhICV4bW0yLCAiIFNU
UklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NMl9PRkZTRVQpICIoJXJzcCkiICJcbiIKKyAg
ICAibW92ZHFhICV4bW0zLCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NM19PRkZT
RVQpICIoJXJzcCkiICJcbiIKKyAgICAibW92ZHFhICV4bW00LCAiIFNUUklOR0laRV9WQUxVRV9P
RihQUk9CRV9DUFVfWE1NNF9PRkZTRVQpICIoJXJzcCkiICJcbiIKKyAgICAibW92ZHFhICV4bW01
LCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NNV9PRkZTRVQpICIoJXJzcCkiICJc
biIKKyAgICAibW92ZHFhICV4bW02LCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1N
Nl9PRkZTRVQpICIoJXJzcCkiICJcbiIKKyAgICAibW92ZHFhICV4bW03LCAiIFNUUklOR0laRV9W
QUxVRV9PRihQUk9CRV9DUFVfWE1NN19PRkZTRVQpICIoJXJzcCkiICJcbiIKKworICAgIC8vIEZp
bGwgaW4gdGhlIGppdFN0YWNrRnJhbWUgcG9pbnRlcjoKKyAgICAibW92cSAiIFNUUklOR0laRV9W
QUxVRV9PRihQUk9CRV9DUFVfRVNQX09GRlNFVCkgIiglcnNwKSwgJXJheCIgIlxuIgorICAgICJt
b3ZxICVyYXgsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0pJVF9TVEFDS19GUkFNRV9PRkZT
RVQpICIoJXJzcCkiICJcbiIKKworICAgICJtb3ZxICVyc3AsICVyYnAiICJcbiIgLy8gU2F2ZSB0
aGUgQVNNUHJvYmVDb250ZXh0Ki4KKworICAgIC8vIENhbGwgdGhlIHByb2JlIHBhc3NpbmcgdGhl
IGNvbnRleHQgcG9pbnRlcjoKKyAgICAibW92cSAlcmJwLCAlcmRpIiAiXG4iIC8vIHRoZSBBU01Q
cm9iZUNvbnRleHQqIGFyZy4KKyAgICAiY2FsbCAqIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVf
UFJPQkVfRlVOQ1RJT05fT0ZGU0VUKSAiKCVyYnApIiAiXG4iCisKKyAgICAgLy8gUmVzdG9yZSB0
aGUgcmVnaXN0ZXJzIGV4Y2VwdCBmb3IgJXJicDoKKyAgICAibW92cSAiIFNUUklOR0laRV9WQUxV
RV9PRihQUk9CRV9DUFVfRUFYX09GRlNFVCkgIiglcmJwKSwgJXJheCIgIlxuIgorICAgICJtb3Zx
ICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FQ1hfT0ZGU0VUKSAiKCVyYnApLCAlcmN4
IiAiXG4iCisgICAgIm1vdnEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX0VEWF9PRkZT
RVQpICIoJXJicCksICVyZHgiICJcbiIKKyAgICAibW92cSAiIFNUUklOR0laRV9WQUxVRV9PRihQ
Uk9CRV9DUFVfRUJYX09GRlNFVCkgIiglcmJwKSwgJXJieCIgIlxuIgorICAgICJtb3ZxICIgU1RS
SU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FU1BfT0ZGU0VUKSAiKCVyYnApLCAlcnNwIiAiXG4i
CisgICAgIm1vdnEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX0VTSV9PRkZTRVQpICIo
JXJicCksICVyc2kiICJcbiIKKyAgICAibW92cSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9D
UFVfRURJX09GRlNFVCkgIiglcmJwKSwgJXJkaSIgIlxuIgorCisgICAgIm1vdnEgIiBTVFJJTkdJ
WkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1I4X09GRlNFVCkgIiglcmJwKSwgJXI4IiAiXG4iCisgICAg
Im1vdnEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1I5X09GRlNFVCkgIiglcmJwKSwg
JXI5IiAiXG4iCisgICAgIm1vdnEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1IxMF9P
RkZTRVQpICIoJXJicCksICVyMTAiICJcbiIKKyAgICAibW92cSAiIFNUUklOR0laRV9WQUxVRV9P
RihQUk9CRV9DUFVfUjExX09GRlNFVCkgIiglcmJwKSwgJXIxMSIgIlxuIgorICAgICJtb3ZxICIg
U1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9SMTJfT0ZGU0VUKSAiKCVyYnApLCAlcjEyIiAi
XG4iCisgICAgIm1vdnEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1IxM19PRkZTRVQp
ICIoJXJicCksICVyMTMiICJcbiIKKyAgICAibW92cSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9C
RV9DUFVfUjE0X09GRlNFVCkgIiglcmJwKSwgJXIxNCIgIlxuIgorICAgICJtb3ZxICIgU1RSSU5H
SVpFX1ZBTFVFX09GKFBST0JFX0NQVV9SMTVfT0ZGU0VUKSAiKCVyYnApLCAlcjE1IiAiXG4iCisK
KyAgICAibW92ZHFhICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU0wX09GRlNFVCkg
IiglcmJwKSwgJXhtbTAiICJcbiIKKyAgICAibW92ZHFhICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBS
T0JFX0NQVV9YTU0xX09GRlNFVCkgIiglcmJwKSwgJXhtbTEiICJcbiIKKyAgICAibW92ZHFhICIg
U1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU0yX09GRlNFVCkgIiglcmJwKSwgJXhtbTIi
ICJcbiIKKyAgICAibW92ZHFhICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU0zX09G
RlNFVCkgIiglcmJwKSwgJXhtbTMiICJcbiIKKyAgICAibW92ZHFhICIgU1RSSU5HSVpFX1ZBTFVF
X09GKFBST0JFX0NQVV9YTU00X09GRlNFVCkgIiglcmJwKSwgJXhtbTQiICJcbiIKKyAgICAibW92
ZHFhICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU01X09GRlNFVCkgIiglcmJwKSwg
JXhtbTUiICJcbiIKKyAgICAibW92ZHFhICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9Y
TU02X09GRlNFVCkgIiglcmJwKSwgJXhtbTYiICJcbiIKKyAgICAibW92ZHFhICIgU1RSSU5HSVpF
X1ZBTFVFX09GKFBST0JFX0NQVV9YTU03X09GRlNFVCkgIiglcmJwKSwgJXhtbTciICJcbiIKKwor
ICAgICAvLyBSZXN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcyBmb3IgdGhlIHJldCBiZWxvdzoKKyAg
ICAicHVzaHEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX0VJUF9PRkZTRVQpICIoJXJi
cCkiICJcbiIKKworICAgIC8vIEV2ZXJ5dGhpbmcncyByZXN0b3JlZC4gTm93IHJlc3RvcmUgdGhl
ICVyYnAsIGFuZCByZXR1cm46CisgICAgIm1vdnEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVf
Q1BVX0VCUF9PRkZTRVQpICIoJXJicCksICVyYnAiICJcbiIKKyAgICAicmV0IiAiXG4iCispOwor
I2VuZGlmIC8vIFVTRShBU01fUFJPQkUpCisKICNlbGlmIENPTVBJTEVSKE1TVkMpICYmIENQVShY
ODZfNjQpCiAKIC8vIFRoZXNlIEFTU0VSVHMgcmVtaW5kIHlvdSB0aGF0LCBpZiB5b3UgY2hhbmdl
IHRoZSBsYXlvdXQgb2YgSklUU3RhY2tGcmFtZSwgeW91CkBAIC0xMjIyLDYgKzE0NjYsNyBAQCBN
U1ZDX0VORCggICAgRU5EKQogKi8KIAogI2VsaWYgQ1BVKFNINCkKKwogI2RlZmluZSBERUZJTkVf
U1RVQl9GVU5DVElPTihydHlwZSwgb3ApIFwKICAgICBleHRlcm4gIkMiIHsgXAogICAgICAgICBy
dHlwZSBKSVRTdHViVGh1bmtlZF8jI29wKFNUVUJfQVJHU19ERUNMQVJBVElPTik7IFwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9uIDE0OTY1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzE4
LDYgKzMxOCwxMCBAQCBpbmxpbmUgYm9vbCByZXR1cm5BZGRyZXNzSXNJbkN0aVRyYW1wb2xpCiB9
CiAjZW5kaWYKIAorI2lmIFVTRShBU01fUFJPQkUpCitleHRlcm4gIkMiIHZvaWQgY3RpQVNNUHJv
YmVUcmFtcG9saW5lKCk7CisjZW5kaWYKKwogdm9pZCBwZXJmb3JtUGxhdGZvcm1TcGVjaWZpY0pJ
VEFzc2VydGlvbnMoVk0qKTsKIAogZXh0ZXJuICJDIiB7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ5NjU4
KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBA
QAorMjAxMy0wNS0wNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW1wbGVtZW50IGEgcHJvYmUgbWVjaGFuaXNtIGZvciBKSVQgZ2VuZXJhdGVkIGNvZGUuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTU3MDUuCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIHRoZSBX
VEZfUEFDSyhzaXplLCBhbGlnbm1lbnRCaXRzKSBtYWNybyB3aGljaCBwYWNrcyAocm91bmRzIHVw
KQorICAgICAgICBhIGdpdmVuIHNpemUgdG8gYSBtdWx0aXBsZSBvZiB0aGUgYW4gYWxpZ24gc2l6
ZSBjb21wdXRlZCBhcyAyIHRvIHRoZQorICAgICAgICBwb3dlciBvZiB0aGUgYWxpZ25tZW50Qml0
cy4KKworICAgICAgICBJZiBzaXplIGlzIGFscmVhZHkgYW4gZXhhY3QgbXVsdGlwbGUgb2YgdGhl
IGFsaWduIHNpemUsIHRoZW4KKyAgICAgICAgV1RGX1BBQ0soKSB3aWxsIHJldHVybiBzaXplIHVu
Y2hhbmdlZC4KKyAgICAgICAgSWYgc2l6ZSBpcyBub3QgYW4gZXhhY3QgbXVsdGlwbGUgb2YgdGhl
IGFsaWduIHNpemUsIHRoZW4KKyAgICAgICAgV1RGX1BBQ0soKSB3aWxsIHJldHVybiB0aGUgbmV4
dCB2YWx1ZSBncmVhdGVyIHRoYW4gc2l6ZSB0aGF0IGlzIGFuCisgICAgICAgIGV4YWN0IG11bHRp
cGxlIG9mIGFsaWduIHNpemUuCisKKyAgICAgICAgKiB3dGYvQWxpZ25tZW50Lmg6CisgICAgICAg
IChXVEY6Ond0ZlBhY2spOgorCiAyMDEzLTA1LTA2ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBh
cHBsZS5jb20+CiAKICAgICAgICAgQ2hlcnJ5LXBpY2sgbWVyZ2VkIHNvbWUgcGF0Y2hlcyB0byB0
aGUgRlRMIGJyYW5jaC4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0FsaWdubWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0FsaWdubWVudC5oCShyZXZpc2lvbiAxNDk2NTUpCisrKyBT
b3VyY2UvV1RGL3d0Zi9BbGlnbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI4LDYgKzI4LDgyIEBACiAKIG5hbWVzcGFjZSBXVEYgewogCisvLyBXVEZf
UEFDSygpIGNvbXB1dGVzIHRoZSBwYWNrZWQgc2l6ZSBieSByb3VuZGluZyBzaXplSW5CeXRlcyB1
cCB0byB0aGUgbmV4dAorLy8gaW50ZWdlciBtdWx0aXBsZSBvZiB0aGUgcGFjayBzaXplIGFzIGRl
dGVybWluZWQgYnkgdGhlIGJpdHNPZkFsaWdubWVudC4KKy8vIEZvciBleGFtcGxlLAorLy8KKy8v
ICAgIC8vIFBhY2sgdG8gOCBieXRlcyBpLmUuIDMgYml0cyBvZiBhbGlnbm1lbnQuCisvLyAgICBX
VEZfUEFDSygwLCAzKTsgLy8geWllbGRzIDAuCisvLyAgICBXVEZfUEFDSyg1LCAzKTsgLy8geWll
bGRzIDguCisvLyAgICBXVEZfUEFDSyg4LCAzKTsgLy8geWllbGRzIDguCisvLyAgICBXVEZfUEFD
SygyMywgMyk7IC8vIHlpZWxkcyAyNCBpLmUuIDMgeCA4LgorLy8gICAgV1RGX1BBQ0soMjQsIDMp
OyAvLyB5aWVsZHMgMjQuCisvLworLy8gICAgLy8gUGFjayB0byAxNiBieXRlcyBpLmUuIDQgYml0
cyBvZiBhbGlnbm1lbnQuCisvLyAgICBXVEZfUEFDSygwLCA0KTsgLy8geWllbGRzIDAuCisvLyAg
ICBXVEZfUEFDSyg1LCA0KTsgLy8geWllbGRzIDE2LgorLy8gICAgV1RGX1BBQ0soOCwgNCk7IC8v
IHlpZWxkcyAxNi4KKy8vICAgIFdURl9QQUNLKDIzLCA0KTsgLy8geWllbGRzIDMyIGkuZS4gMiB4
IDE2LgorLy8gICAgV1RGX1BBQ0soMjQsIDQpOyAvLyB5aWVsZHMgMzIuCisKK2lubGluZSBzaXpl
X3Qgd3RmUGFjayhzaXplX3Qgc2l6ZUluQnl0ZXMsIHVuc2lnbmVkIGJpdHNPZkFsaWdubWVudCkK
K3sKKyAgICBzaXplX3QgYWxpZ25TaXplID0gMSA8PCBiaXRzT2ZBbGlnbm1lbnQ7CisgICAgc2l6
ZV90IG1hc2tCaXRzID0gYWxpZ25TaXplIC0gMTsKKworICAgIC8vIE5vdGUgdGhhdCBpbiBiaW5h
cnksIGFsaWduU2l6ZSBpcyBhbHdheXMgYSAxIGZvbGxvd2VkIGJ5IE4gMHMuCisgICAgLy8gVGhh
dCBtZWFucyBtYXNrQm90cyBpcyAwcyBmb2xsb3dlZCBieSBOIDFzIChhcyBleHBlY3RlZCkuIFdl
IGNhbiB1c2UKKyAgICAvLyB0aGlzIG1hc2sgdG8gbWFzayBvZmYgdGhlIGxvdyBiaXRzIG9mIGEg
Z2l2ZW4gc2l6ZSB0byBwcm9kdWNlIHRoZQorICAgIC8vIG5lYXJlc3QgbXVsdGlwbGUgb2YgYWxp
Z25TaXplIGJlbG93IHRoYXQgc2l6ZToKKyAgICAvLworICAgIC8vICAgcm91bmREb3duKHNpemUp
IHsgcmV0dXJuIHNpemUgJiBtYXNrQml0czsgfQorICAgIC8vCisgICAgLy8gSWYgcm91bmREb3du
KHNpemUpIHlpZWxkcyB0aGUgYWxpZ25lZCBzaXplIGJlbG93IHNpemUsIHRoZW4KKyAgICAvLyBy
b3VuZERvd24oc2l6ZSArIGFsaWduU2l6ZSkgc2hvdWxkIHlpZWxkIHRoZSBhbGlnbmVkIHNpemUg
YWJvdmUgc2l6ZS4KKyAgICAvLyBXZSBjYW4gdXNlIHRoaXMgdG8gaW1wbGVtZW50IG91ciByb3Vu
ZFVwKCkgZnVuY3Rpb25hbGl0eSBleGNlcHQgdGhhdAorICAgIC8vIGl0IGRvZXNuJ3Qgd29yayBp
biBvbmUgY2FzZToKKyAgICAvLworICAgIC8vICAgSWYgc2l6ZSB3YXMgYWxyZWFkeSBzbGlnbmVk
IHRvIGJlZ2luIHdpdGgsIHRoZW4KKyAgICAvLyAgIHJvdW5kRG93bihzaXplICsgYWxpZ25TaXpl
KSB3aWxsIHByb2R1Y2UgKHNpemUgKyBhbGlnblNpemUpLiBGb3IKKyAgICAvLyAgIHJvdW5kVXAo
c2l6ZSksIHdlIHdhbnQgaXQgdG8gcHJvZHVjZSBzaXplIGluc3RlYWQuCisgICAgLy8KKyAgICAv
LyBUbyByZW1lZHkgdGhpcywgaW5zdGVhZCBvZiBhZGRpbmcgYWxpZ25TaXplLCB3ZSBhZGQgKGFs
aWduU2l6ZSAtIDEpLgorICAgIC8vIFdlJ2xsIGNhbGwgdGhpcyB2YWx1ZSBtYXhQYWRTaXplLiBD
b2luY2lkZW50bHksIHRoaXMgaXMgdGhlIHNhbWUgdmFsdWUKKyAgICAvLyBhcyBtYXNrQml0cy4g
SGVuY2UsCisgICAgLy8KKyAgICAvLyAgIElmIHNpemUgd2FzIGFscmVhZHkgYWxpZ25lZCB0byBi
ZWdpbiB3aXRoLCB0aGVuCisgICAgLy8gICByb3VuZERvd24oc2l6ZSArIG1heFBhZFNpemUpIHdp
bGwgcHJvZHVjZSBzaXplIGFzIGV4cGVjdGVkLgorICAgIC8vCisgICAgLy8gICBJZiBzaXplIGlz
IG5vdCBhbGlnbmVkLCB0aGVuIHNpemUgPiByb3VuZERvd24oc2l6ZSkuCisgICAgLy8gICBMZXQg
ZGVsdGFTaXplID0gc2l6ZSAtIHJvdW5kRG93bihzaXplKS4gSGVuY2UsCisgICAgLy8gICAgIHJv
dW5kRG93bihzaXplICsgbWF4UGFkU2l6ZSkKKyAgICAvLyAgICAgPT0+IHJvdW5kRG93bihyb3Vu
ZERvd24oc2l6ZSkgKyBkZWx0YVNpemUgKyBtYXhQYWRTaXplKQorICAgIC8vICAgICA9PT4gcm91
bmREb3duKHNpemUpICsgcm91bmREb3duKGRlbHRhU2l6ZSArIG1heFBhZFNpemUpCisgICAgLy8K
KyAgICAvLyAgICAgQnV0IHNpbmNlIG1heFBhZFNpemUgPSBhbGlnblNpemUgLSAxLCB0aGVuCisg
ICAgLy8gICAgICAgKChkZWx0YVNpemUgKyBtYXhQYWRzaXplKSA+IGFsaWduU2l6ZSkgc2luY2UK
KyAgICAvLyAgICAgICBkZWx0YVNpemUgPiAxIGJ5IGRlZmluaXRpb24uCisgICAgLy8KKyAgICAv
LyAgICAgTGV0IHJlbWFpbmRlclNpemUgPSAoZGVsdGFTaXplICsgbWF4UGFkc2l6ZSkgLSBhbGln
blNpemUuCisgICAgLy8gICAgIE5vdGU6IFdlJ3JlIGd1YXJhbnRlZWQgdGhhdCByZW1haW5kZXJT
aXplIDwgYWxpZ25TaXplLgorICAgIC8vCisgICAgLy8gICAgIEhlbmNlLCAoYWxpZ25TaXplICsg
cmVtYWluZGVyU2l6ZSkgPT0gKGRlbHRhU2l6ZSArIG1heFBhZHNpemUpLgorICAgIC8vICAgICBT
bywgY29udGludWluZyB0aGUgYnJlYWtkb3duIG9mIHJvdW5kRG93bihzaXplICsgbWF4UGFkU2l6
ZSkgLi4uCisgICAgLy8KKyAgICAvLyAgICAgPT0+IHJvdW5kRG93bihzaXplKSArIHJvdW5kRG93
bihhbGlnblNpemUgKyByZW1haW5kZXJTaXplKQorICAgIC8vICAgICA9PT4gcm91bmREb3duKHNp
emUpICsgcm91bmREb3duKGFsaWduU2l6ZSkgKyByb3VuZERvd24ocmVtYWluZGVyU2l6ZSkKKyAg
ICAvLyAgICAgPT0+IHJvdW5kRG93bihzaXplKSArIGFsaWduU2l6ZSArIDAKKyAgICAvLyAgICAg
PT0+IHJvdW5kVXAoc2l6ZSkgd2hlbiBzaXplIGlmIG5vdCBhbGlnbmVkLgorCisgICAgc2l6ZV90
IG1heFBhZFNpemUgPSBtYXNrQml0czsKKyAgICBzaXplX3QgcGFkZGVkU2l6ZSA9IHNpemVJbkJ5
dGVzICsgbWF4UGFkU2l6ZTsKKyAgICBzaXplX3QgcGFja2VkU2l6ZSA9IHBhZGRlZFNpemUgJiB+
bWFza0JpdHM7CisgICAgcmV0dXJuIHBhY2tlZFNpemU7Cit9CisKKyNkZWZpbmUgV1RGX1BBQ0so
c2l6ZUluQnl0ZXMsIGJpdHNPZkFsaWdubWVudCkgV1RGOjp3dGZQYWNrKHNpemVJbkJ5dGVzLCBi
aXRzT2ZBbGlnbm1lbnQpCisKKwogI2lmIENPTVBJTEVSKEdDQykgfHwgQ09NUElMRVIoTUlOR1cp
IHx8IENPTVBJTEVSKFJWQ1QpIHx8IENPTVBJTEVSKEdDQ0UpIHx8IChDT01QSUxFUihTVU5DQykg
JiYgX19TVU5QUk9fQ0MgPiAweDU5MCkKICAgICAjZGVmaW5lIFdURl9BTElHTl9PRih0eXBlKSBf
X2FsaWdub2ZfXyh0eXBlKQogICAgICNkZWZpbmUgV1RGX0FMSUdORUQodmFyaWFibGVfdHlwZSwg
dmFyaWFibGUsIG4pIHZhcmlhYmxlX3R5cGUgdmFyaWFibGUgX19hdHRyaWJ1dGVfXygoX19hbGln
bmVkX18obikpKQo=
</data>
<flag name="review"
          id="222146"
          type_id="1"
          status="-"
          setter="msaboff"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201009</attachid>
            <date>2013-05-07 18:15:06 -0700</date>
            <delta_ts>2013-05-15 15:55:33 -0700</delta_ts>
            <desc>new and improved after addressing Michael&apos;s feedback.</desc>
            <filename>bug-115705.patch</filename>
            <type>text/plain</type>
            <size>34949</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ5NzAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDEzLTA1LTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBJ
bXBsZW1lbnQgYSBwcm9iZSBtZWNoYW5pc20gZm9yIEpJVCBnZW5lcmF0ZWQgY29kZS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNTcwNS4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgcHJvYmUgaXMg
aW4gdGhlIGZvcm0gb2YgYSBNYWNyb0Fzc2VtYmxlciBwc2V1ZG8gaW5zdHJ1Y3Rpb24uCisgICAg
ICAgIEl0IHRha2VzIDMgYXJndW1lbnRzOiBhIFByb2JlRnVuY3Rpb24sIGFuZCAyIHZvaWQqIGFy
Z3MuCisgICAgICAgIFdoZW4gaW5zZXJ0ZWQgaW50byB0aGUgSklUIGF0IHNvbWUgY29kZSBnZW5l
cmF0aW9uIHNpdGUsIHRoZSBwcm9iZQorICAgICAgICBwc2V1ZG8gImluc3RydWN0aW9uIiB3aWxs
IGVtaXQgY29kZSB0byBzYXZlIHRoZSBDUFUgcmVnaXN0ZXJzLCBhbmQKKyAgICAgICAgY2FsbCB0
aGUgc3BlY2lmaWVkIFByb2JlRnVuY3Rpb24gd2l0aCBhIFByb2JlQ29udGV4dCByZWNvcmQgdGhh
dAorICAgICAgICBob2xkcyB0aGUgcHJvYmUgYXJncywgYW5kIGEgZHVtcCBvZiB0aGUgcHJlc2Vy
dmVkIENQVSByZWd1c3RlcnMuCisKKyAgICAgICAgVGhlIFByb2JlQ29udGV4dCBpcyBhbGxvY2F0
ZWQgb24gdGhlIEMgc3RhY2sgYW5kIGlzIG9ubHkgdmFsaWQgZm9yCisgICAgICAgIHRoZSBkdXJh
dGlvbiB0aGF0IHRoZSBQcm9iZUZ1bmN0aW9uIGlzIGV4ZWN1dGluZy4gSXQgd2lsbCBiZSBwb3Bw
ZWQgb2YKKyAgICAgICAgdGhlIHN0YWNrIGFmdGVyIHRoZSBQcm9iZUZ1bmN0aW9uIHJldHVybnMu
CisKKyAgICAgICAgVGhlIHByb2JlIG1lY2hhbmlzbSB3aWxsIGFsc28gcmVzdG9yZSB0aGUgc2F2
ZWQgcmVnaXN0ZXJzIGFmdGVyIHRoZQorICAgICAgICBQcm9iZUZ1bmN0aW9uIHJldHVybnMuCisK
KyAgICAgICAgVGhlIHByb2JlIG1lY2hhbmlzbSBpcyBidWlsdCBjb25kaXRpb25hbCBvbiBVU0Uo
TUFTTV9QUk9CRSkgd2hpY2ggaXMKKyAgICAgICAgZGVmaW5lZCBpbiBjb25maWcuaC4gVVNFKE1B
U01fUFJPQkUpIHdpbGwgb2ZmIGJ5IGRlZmF1bHQuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzZXQg
b25seSBpbXBsZW1lbnRzIHRoZSBwcm9iZSBtZWNoYW5pc20gZm9yIFg4NiwgYW5kIFg4Nl82NC4K
KworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyOjpQcm9iZUNvbnRleHQ6OmR1bXApOgorICAgICAgICAtIFByaW50cyB0
aGUgUHJvYmVDb250ZXh0IHRvIHRoZSBEYXRhTG9nLgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlcjo6UHJvYmVDb250ZXh0OjpkdW1wQ1BVUmVnaXN0ZXJzKToKKyAgICAgICAgLSBDUFUgc3Bl
Y2lmaWMgcmVnaXN0ZXIgZHVtcGVyIGNhbGxlZCBieSBQcm9iZUNvbnRleHQ6OmR1bXAoKS4KKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnByb2JlKToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKE1hY3JvQXNzZW1ibGVyKToKKyAgICAgICAgKENQ
VVN0YXRlKTogQWRkZWQuCisgICAgICAgIChQcm9iZUNvbnRleHQpOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnNob3VsZEJsaW5kKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXI6OnN0b3JlMzIpOgorICAgICAgICAqIGFzc2VtYmxlci9YODZBc3NlbWJsZXIuaDoK
KyAgICAgICAgKiBjb25maWcuaDogQWRkZWQgV1RGX1VTRV9NQVNNX1BST0JFIGZsYWcuCisgICAg
ICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKwogMjAx
My0wNS0wNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGJy
b2tlbiAzMi1iaXQgYnVpbGQgKyBzb21lIGNsZWFuIHVwIGluIEpJVFN0dWJzLmNwcC4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvY29uZmlnLmgJKHJldmlzaW9uIDE0OTY1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9jb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2Vpbmln
IDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC03NiwzICs3Niw4IEBACiAj
ZWxzZQogI2RlZmluZSBTS0lQX1NUQVRJQ19DT05TVFJVQ1RPUlNfT05fR0NDIDEKICNlbmRpZgor
CisvLyBFbmFibGUgdGhlIGZvbGxvd2luZyBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIE1hY3JvQXNz
ZW1ibGVyOjpwcm9iZSgpIGZhY2lsaXR5CisvLyB0byBkbyBKSVQgZGVidWdnaW5nLgorI2RlZmlu
ZSBXVEZfVVNFX01BU01fUFJPQkUgMAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTQ5NjU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI4LDEwICsyOCwxMTQgQEAKIAogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKKyNp
ZiBVU0UoTUFTTV9QUk9CRSkKKyNpbmNsdWRlICJKSVRTdHVicy5oIgorI2VuZGlmCisKIG5hbWVz
cGFjZSBKU0MgewogCiBjb25zdCBkb3VibGUgTWFjcm9Bc3NlbWJsZXI6OnR3b1RvVGhlMzIgPSAo
ZG91YmxlKTB4MTAwMDAwMDAwdWxsOwogCisjaWYgVVNFKE1BU01fUFJPQkUpCisKK3ZvaWQgTWFj
cm9Bc3NlbWJsZXI6OlByb2JlQ29udGV4dDo6ZHVtcChjb25zdCBjaGFyKiBpbmRlbnRhdGlvbikK
K3sKKyAgICBpZiAoIWluZGVudGF0aW9uKQorICAgICAgICBpbmRlbnRhdGlvbiA9ICIiOworCisg
ICAgZGF0YUxvZ0YoIiVzUHJvYmVDb250ZXh0ICVwIHtcbiIsIGluZGVudGF0aW9uLCB0aGlzKTsK
KyAgICBkYXRhTG9nRigiJXMgIHByb2JlRnVuY3Rpb246ICVwXG4iLCBpbmRlbnRhdGlvbiwgcHJv
YmVGdW5jdGlvbik7CisgICAgZGF0YUxvZ0YoIiVzICBhcmcxOiAlcCAlbGx1XG4iLCBpbmRlbnRh
dGlvbiwgYXJnMSwgcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90PihhcmcxKSk7CisgICAgZGF0YUxv
Z0YoIiVzICBhcmcyOiAlcCAlbGx1XG4iLCBpbmRlbnRhdGlvbiwgYXJnMiwgcmVpbnRlcnByZXRf
Y2FzdDxpbnQ2NF90PihhcmcyKSk7CisgICAgZGF0YUxvZ0YoIiVzICBqaXRTdGFja0ZyYW1lOiAl
cFxuIiwgaW5kZW50YXRpb24sIGppdFN0YWNrRnJhbWUpOworICAgIGRhdGFMb2dGKCIlcyAgY3B1
OiB7XG4iLCBpbmRlbnRhdGlvbik7CisKKyAgICBkdW1wQ1BVUmVnaXN0ZXJzKGluZGVudGF0aW9u
KTsKKworICAgIGRhdGFMb2dGKCIlcyAgfVxuIiwgaW5kZW50YXRpb24pOworICAgIGRhdGFMb2dG
KCIlc31cbiIsIGluZGVudGF0aW9uKTsKK30KKworI2lmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0
KSkgJiYgQ09NUElMRVIoR0NDKQorCit2b2lkIE1hY3JvQXNzZW1ibGVyOjpQcm9iZUNvbnRleHQ6
OmR1bXBDUFVSZWdpc3RlcnMoY29uc3QgY2hhciogaW5kZW50YXRpb24pCit7CisjaWYgQ1BVKFg4
NikKKyAgICAjZGVmaW5lIERVTVBfR1BSRUdJU1RFUihfdHlwZSwgX3JlZ05hbWUpIHsgXAorICAg
ICAgICBpbnQzMl90IHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90PihjcHUuX3JlZ05h
bWUpOyBcCisgICAgICAgIGRhdGFMb2dGKCIlcyAgICAlNHM6IDB4JTA4eCAgICVkXG4iLCBpbmRl
bnRhdGlvbiwgI19yZWdOYW1lLCB2YWx1ZSwgdmFsdWUpIDsgXAorICAgIH0KKyNlbGlmIENQVShY
ODZfNjQpCisgICAgI2RlZmluZSBEVU1QX0dQUkVHSVNURVIoX3R5cGUsIF9yZWdOYW1lKSB7IFwK
KyAgICAgICAgaW50NjRfdCB2YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdD4oY3B1Ll9y
ZWdOYW1lKTsgXAorICAgICAgICBkYXRhTG9nRigiJXMgICAgJTRzOiAweCUwMTZsbHggICAlbGxk
XG4iLCBpbmRlbnRhdGlvbiwgI19yZWdOYW1lLCB2YWx1ZSwgdmFsdWUpIDsgXAorICAgIH0KKyNl
bmRpZgorICAgIEZPUl9FQUNIX0NQVV9HUFJFR0lTVEVSKERVTVBfR1BSRUdJU1RFUikKKyAgICAj
dW5kZWYgRFVNUF9HUFJFR0lTVEVSCisKKyAgICAjZGVmaW5lIERVTVBfRlBSRUdJU1RFUihfdHlw
ZSwgX3JlZ05hbWUpIHsgXAorICAgICAgICB1aW50MzJfdCogdSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPigmY3B1Ll9yZWdOYW1lKTsgXAorICAgICAgICBkb3VibGUqIGQgPSByZWludGVy
cHJldF9jYXN0PGRvdWJsZSo+KCZjcHUuX3JlZ05hbWUpOyBcCisgICAgICAgIGRhdGFMb2dGKCIl
cyAgICAlczogMHglMDh4JTA4eCAweCUwOHglMDh4ICAgJTEyZyAlMTJnXG4iLCBcCisgICAgICAg
ICAgICBpbmRlbnRhdGlvbiwgI19yZWdOYW1lLCB1WzNdLCB1WzJdLCB1WzFdLCB1WzBdLCBkWzFd
LCBkWzBdKTsgXAorICAgIH0KKyAgICBGT1JfRUFDSF9DUFVfRlBSRUdJU1RFUihEVU1QX0ZQUkVH
SVNURVIpCisgICAgI3VuZGVmIERVTVBfRlBSRUdJU1RFUgorfQorCit2b2lkIE1hY3JvQXNzZW1i
bGVyOjpwcm9iZShNYWNyb0Fzc2VtYmxlcjo6UHJvYmVGdW5jdGlvbiBmdW5jdGlvbiwgdm9pZCog
YXJnMSwgdm9pZCogYXJnMikKK3sKKyAgICBSZWdpc3RlcklEIHNwID0gUmVnaXN0ZXJJRDo6ZXNw
OworCisgICAgLy8gUGFjayB0aGUgc3BhY2UgdG8gYWxsb2NhdGUgc28gdGhhdCB0aGUgc3RhY2sg
cG9pbnRlciB3aWxsIHJlbWFpbiAzMiBieXRlCisgICAgLy8gYWxpZ25lZCAoY29uc2VydmF0aXZl
bHksIGluIGNhc2Ugc29tZSBjb2RlIHVzZXMgX19tMjU2KS4gU2VlIHRoZSBBTUQ2NAorICAgIC8v
IEFCSSBzcGVjIGZvciBkZXRhaWxzLgorICAgIGNvbnN0IGludCBwYWNrZWRDUFVDb250ZXh0U2l6
ZSA9IFdURl9QQUNLKHNpemVvZihQcm9iZUNvbnRleHQpLCA1KTsKKworICAgIC8vIEFsbG9jYXRl
IHNwYWNlIGZvciB0aGUgUHJvYmVDb250ZXh0OgorICAgIHN1YlB0cihUcnVzdGVkSW1tMzIocGFj
a2VkQ1BVQ29udGV4dFNpemUpLCBzcCk7CisKKyAgICAvLyBTYXZlIHRoZSBlYXggcmVnOgorICAg
IHN0b3JlUHRyKFJlZ2lzdGVySUQ6OmVheCwgQWRkcmVzcyhzcCwgb2Zmc2V0b2YoUHJvYmVDb250
ZXh0LCBjcHUuZWF4KSkpOworCisgICAgLy8gU2F2ZSB0aGUgb3JpZ2luYWwgc3A6CisgICAgbW92
ZShUcnVzdGVkSW1tMzIocGFja2VkQ1BVQ29udGV4dFNpemUpLCBSZWdpc3RlcklEOjplYXgpOwor
ICAgIGFkZFB0cihzcCwgUmVnaXN0ZXJJRDo6ZWF4KTsKKyAgICBzdG9yZVB0cihSZWdpc3RlcklE
OjplYXgsIEFkZHJlc3Moc3AsIG9mZnNldG9mKFByb2JlQ29udGV4dCwgY3B1LmVzcCkpKTsKKwor
ICAgIC8vIFNhdmUgdGhlIHByb2JlIGRhdGE6CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihy
ZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbikpLAorICAgICAgICBBZGRyZXNzKHNwLCBv
ZmZzZXRvZihQcm9iZUNvbnRleHQsIHByb2JlRnVuY3Rpb24pKSk7CisgICAgc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cihhcmcxKSwgQWRkcmVzcyhzcCwgb2Zmc2V0b2YoUHJvYmVDb250ZXh0LCBhcmcx
KSkpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoYXJnMiksIEFkZHJlc3Moc3AsIG9mZnNl
dG9mKFByb2JlQ29udGV4dCwgYXJnMikpKTsKKworICAgIC8vIENhbGwgdGhlIHByb2JlIHRyYW1w
b2xpbmU6CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGN0
aU1hc21Qcm9iZVRyYW1wb2xpbmUpKSwgUmVnaXN0ZXJJRDo6ZWF4KTsKKyAgICBjYWxsKFJlZ2lz
dGVySUQ6OmVheCk7Cit9CisKKyNlbHNlIC8vIE5vdCBpbXBsZW1lbnRlZCBDUFUKKworTk9fUkVU
VVJOX0RVRV9UT19BU1NFUlQKK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OlByb2JlQ29udGV4dDo6ZHVt
cENQVVJlZ2lzdGVycyhjb25zdCBjaGFyKiBpbmRlbnRhdGlvbikKK3sKKyAgICBVTlVTRURfUEFS
QU0oaW5kZW50YXRpb24pOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitOT19SRVRV
Uk5fRFVFX1RPX0FTU0VSVAordm9pZCBNYWNyb0Fzc2VtYmxlcjo6cHJvYmUoTWFjcm9Bc3NlbWJs
ZXI6OlByb2JlRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGFyZzEsIHZvaWQqIGFyZzIpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oYXJnMSk7CisgICAg
VU5VU0VEX1BBUkFNKGFyZzIpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCisjZW5k
aWYgLy8gTm90IGltcGxlbWVudGVkIENQVQorI2VuZGlmIC8vIFVTRShNQVNNX1BST0JFKQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCShy
ZXZpc2lvbiAxNDk2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDYgKzY0LDggQEAgdHlw
ZWRlZiBNYWNyb0Fzc2VtYmxlclNINCBNYWNyb0Fzc2VtYmxlcgogCiBuYW1lc3BhY2UgSlNDIHsK
IAorc3RydWN0IEpJVFN0YWNrRnJhbWU7CisKIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGlj
IE1hY3JvQXNzZW1ibGVyQmFzZSB7CiBwdWJsaWM6CiAKQEAgLTg5LDYgKzkxLDM4IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgdHdvVG9UaGUzMjsgLy8gVGhpcyBpcyBzdXBl
ciB1c2VmdWwgZm9yIHNvbWUgZG91YmxlIGNvZGUuCiAKKyNpZiBVU0UoTUFTTV9QUk9CRSkKKyAg
ICBzdHJ1Y3QgQ1BVU3RhdGUgeworICAgICAgICAjZGVmaW5lIERFQ0xBUkVfUkVHSVNURVIoX3R5
cGUsIF9yZWdOYW1lKSBcCisgICAgICAgICAgICBfdHlwZSBfcmVnTmFtZTsKKyAgICAgICAgRk9S
X0VBQ0hfQ1BVX1JFR0lTVEVSKERFQ0xBUkVfUkVHSVNURVIpCisgICAgICAgICN1bmRlZiBERUNM
QVJFX1JFR0lTVEVSCisgICAgfTsKKworICAgIHN0cnVjdCBQcm9iZUNvbnRleHQ7CisgICAgdHlw
ZWRlZiB2b2lkICgqUHJvYmVGdW5jdGlvbikoc3RydWN0IFByb2JlQ29udGV4dCopOworCisgICAg
c3RydWN0IFByb2JlQ29udGV4dCB7CisgICAgICAgIFByb2JlRnVuY3Rpb24gcHJvYmVGdW5jdGlv
bjsKKyAgICAgICAgdm9pZCogYXJnMTsKKyAgICAgICAgdm9pZCogYXJnMjsKKyAgICAgICAgSklU
U3RhY2tGcmFtZSogaml0U3RhY2tGcmFtZTsKKyAgICAgICAgQ1BVU3RhdGUgY3B1OworCisgICAg
ICAgIHZvaWQgZHVtcChjb25zdCBjaGFyKiBpbmRlbnRhdGlvbiA9IDApOworICAgIHByaXZhdGU6
CisgICAgICAgIHZvaWQgZHVtcENQVVJlZ2lzdGVycyhjb25zdCBjaGFyKiBpbmRlbnRhdGlvbik7
CisgICAgfTsKKworICAgIC8vIFRoZSBwcm9iZSBmdW5jdGlvbiBzaG91bGQgcHJlc2VydmUgdGhl
IENQVVN0YXRlIChlLmcuIHJlZ2lzdGVycykgYXMgaWYKKyAgICAvLyB0aGUgcHJvYmUgd2FzIG5v
dCBpbnNlcnRlZC4gVGhlIGRlZmF1bHQgc3RhdGUgb2YgQ1BVIHJlZ2lzdGVycyBjYXB0dXJlZAor
ICAgIC8vIGluIHRoZSBQcm9iZUNvbnRleHQgc2hvdWxkIGJlIHRoZSBzdGF0ZSB0aGF0IHRoZXkg
YXJlIGV4cGVjdGVkIHRvIGJlCisgICAgLy8gYmVmb3JlIHRoZSBpbnN0cnVjdGlvbiBhZnRlciB0
aGUgcHJvYmUgaXMgZXhlY3V0ZWQuIEZvciBleGFtcGxlLCB0aGUKKyAgICAvLyBzYXZlZCBQQyBy
ZWdpc3RlciB3aWxsIHBvaW50IHRvIHRoZSBpbnN0cnVjdGlvbiBsb2NhdGVkIGltbWVkaWF0ZWx5
CisgICAgLy8gYWZ0ZXIgdGhlIHByb2JlLgorICAgIHZvaWQgcHJvYmUoUHJvYmVGdW5jdGlvbiwg
dm9pZCogYXJnMSA9IDAsIHZvaWQqIGFyZzIgPSAwKTsKKyNlbmRpZiAvLyBVU0UoTUFTTV9QUk9C
RSkKKwogICAgIC8vIFV0aWxpdGllcyB1c2VkIGJ5IHRoZSBERkcgSklULgogI2lmIEVOQUJMRShE
RkdfSklUKQogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6aW52ZXJ0OwpAQCAtNTcxLDcg
KzYwNSw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckJh
c2U6OmJyYW5jaFRlc3Q4KGNvbmQsIEFkZHJlc3MoYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNl
dCksIG1hc2spOwogICAgIH0KLSNlbHNlCisKKyNlbHNlIC8vICFDUFUoWDg2XzY0KQorCiAgICAg
dm9pZCBhZGRQdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAg
ICAgIGFkZDY0KHNyYywgZGVzdCk7CkBAIC0xMDY3LDcgKzExMDMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBzdG9yZTY0KGltbS5hc1RydXN0ZWRJbW02NCgpLCBkZXN0KTsKICAgICB9CiAKLSNl
bmRpZgorI2VuZGlmIC8vIEVOQUJMRShKSVRfQ09OU1RBTlRfQkxJTkRJTkcpCiAKICNlbmRpZiAv
LyAhQ1BVKFg4Nl82NCkKIApAQCAtMTA3OSw3ICsxMTE1LDcgQEAgcHVibGljOgogICAgICAgICAv
LyBEZWJ1ZyBhbHdheXMgYmxpbmQgYWxsIGNvbnN0YW50cywgaWYgb25seSBzbyB3ZSBrbm93CiAg
ICAgICAgIC8vIGlmIHdlJ3ZlIGJyb2tlbiBibGluZGluZyBkdXJpbmcgcGF0Y2ggZGV2ZWxvcG1l
bnQuCiAgICAgICAgIHJldHVybiB0cnVlOwotI2Vsc2UKKyNlbHNlIC8vIEVOQUJMRShGT1JDRURf
SklUX0JMSU5ESU5HKQogCiAgICAgICAgIC8vIEZpcnN0IG9mZiB3ZSdsbCBzcGVjaWFsIGNhc2Ug
Y29tbW9uLCAic2FmZSIgdmFsdWVzIHRvIGF2b2lkIGh1cnRpbmcKICAgICAgICAgLy8gcGVyZm9y
bWFuY2UgdG9vIG11Y2gKQEAgLTExMDAsNyArMTEzNiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICAgICByZXR1cm4gc2hvdWxkQmxpbmRGb3JTcGVjaWZpY0Fy
Y2godmFsdWUpOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKEZPUkNFRF9KSVRfQkxJTkRJTkcp
CiAgICAgfQogCiAgICAgc3RydWN0IEJsaW5kZWRJbW0zMiB7CkBAIC0xMjcxLDcgKzEzMDcsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBzdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yUG9rZShp
bmRleCkpOwogICAgIH0KLSNlbmRpZgorI2VuZGlmIC8vIENQVShYODZfNjQpCiAgICAgCiAgICAg
dm9pZCBzdG9yZTMyKEltbTMyIGltbSwgQWRkcmVzcyBkZXN0KQogICAgIHsKQEAgLTEyODAsNyAr
MTMxNiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEJsaW5kZWRJbW0zMiBibGluZCA9IHhvckJs
aW5kQ29uc3RhbnQoaW1tKTsKICAgICAgICAgICAgIHN0b3JlMzIoYmxpbmQudmFsdWUxLCBkZXN0
KTsKICAgICAgICAgICAgIHhvcjMyKGJsaW5kLnZhbHVlMiwgZGVzdCk7Ci0jZWxzZQorI2Vsc2Ug
Ly8gQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKICAgICAgICAgICAgIGlmIChSZWdpc3RlcklEIHNj
cmF0Y2hSZWdpc3RlciA9IChSZWdpc3RlcklEKXNjcmF0Y2hSZWdpc3RlckZvckJsaW5kaW5nKCkp
IHsKICAgICAgICAgICAgICAgICBsb2FkWG9yQmxpbmRlZENvbnN0YW50KHhvckJsaW5kQ29uc3Rh
bnQoaW1tKSwgc2NyYXRjaFJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICBzdG9yZTMyKHNjcmF0
Y2hSZWdpc3RlciwgZGVzdCk7CkBAIC0xMjkyLDcgKzEzMjgsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIG5vcCgpOwogICAgICAgICAgICAgICAgIHN0b3JlMzIoaW1tLmFzVHJ1c3Rl
ZEltbTMyKCksIGRlc3QpOwogICAgICAgICAgICAgfQotI2VuZGlmCisjZW5kaWYgLy8gQ1BVKFg4
NikgfHwgQ1BVKFg4Nl82NCkKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBzdG9yZTMyKGlt
bS5hc1RydXN0ZWRJbW0zMigpLCBkZXN0KTsKICAgICB9CkBAIC0xNDQwLDcgKzE0NzYsNyBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICB1cnNoaWZ0MzIoc3JjLCB0cnVzdGVkSW1tMzJGb3JTaGlm
dChhbW91bnQpLCBkZXN0KTsKICAgICB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoSklUX0NP
TlNUQU5UX0JMSU5ESU5HKQogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE0
OTY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxzdGRp
bnQuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKyNpbmNsdWRlIDx4bW1pbnRyaW4uaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTcxLDYg
KzcyLDQ4IEBAIG5hbWVzcGFjZSBYODZSZWdpc3RlcnMgewogICAgICAgICB4bW02LAogICAgICAg
ICB4bW03LAogICAgIH0gWE1NUmVnaXN0ZXJJRDsKKworI2lmIFVTRShNQVNNX1BST0JFKQorICAg
ICNkZWZpbmUgRk9SX0VBQ0hfQ1BVX1JFR0lTVEVSKFYpIFwKKyAgICAgICAgRk9SX0VBQ0hfQ1BV
X0dQUkVHSVNURVIoVikgXAorICAgICAgICBGT1JfRUFDSF9DUFVfRlBSRUdJU1RFUihWKQorCisg
ICAgI2RlZmluZSBGT1JfRUFDSF9DUFVfR1BSRUdJU1RFUihWKSBcCisgICAgICAgIFYodm9pZCos
IGVheCkgXAorICAgICAgICBWKHZvaWQqLCBlY3gpIFwKKyAgICAgICAgVih2b2lkKiwgZWR4KSBc
CisgICAgICAgIFYodm9pZCosIGVieCkgXAorICAgICAgICBWKHZvaWQqLCBlc3ApIFwKKyAgICAg
ICAgVih2b2lkKiwgZWJwKSBcCisgICAgICAgIFYodm9pZCosIGVzaSkgXAorICAgICAgICBWKHZv
aWQqLCBlZGkpIFwKKyAgICAgICAgRk9SX0VBQ0hfWDg2XzY0X0NQVV9HUFJFR0lTVEVSKFYpIFwK
KyAgICAgICAgVih2b2lkKiwgZWlwKQorCisgICAgI2RlZmluZSBGT1JfRUFDSF9DUFVfRlBSRUdJ
U1RFUihWKSBcCisgICAgICAgIFYoX19tMTI4LCB4bW0wKSBcCisgICAgICAgIFYoX19tMTI4LCB4
bW0xKSBcCisgICAgICAgIFYoX19tMTI4LCB4bW0yKSBcCisgICAgICAgIFYoX19tMTI4LCB4bW0z
KSBcCisgICAgICAgIFYoX19tMTI4LCB4bW00KSBcCisgICAgICAgIFYoX19tMTI4LCB4bW01KSBc
CisgICAgICAgIFYoX19tMTI4LCB4bW02KSBcCisgICAgICAgIFYoX19tMTI4LCB4bW03KQorCisj
aWYgQ1BVKFg4NikKKyAgICAjZGVmaW5lIEZPUl9FQUNIX1g4Nl82NF9DUFVfR1BSRUdJU1RFUihW
KSAvLyBOb3RoaW5nIHRvIGFkZC4KKyNlbGlmIENQVShYODZfNjQpCisgICAgI2RlZmluZSBGT1Jf
RUFDSF9YODZfNjRfQ1BVX0dQUkVHSVNURVIoVikgXAorICAgICAgICBWKHZvaWQqLCByOCkgXAor
ICAgICAgICBWKHZvaWQqLCByOSkgXAorICAgICAgICBWKHZvaWQqLCByMTApIFwKKyAgICAgICAg
Vih2b2lkKiwgcjExKSBcCisgICAgICAgIFYodm9pZCosIHIxMikgXAorICAgICAgICBWKHZvaWQq
LCByMTMpIFwKKyAgICAgICAgVih2b2lkKiwgcjE0KSBcCisgICAgICAgIFYodm9pZCosIHIxNSkK
KyNlbmRpZiAvLyBDUFUoWDg2XzY0KQorI2VuZGlmIC8vIFVTRShNQVNNX1BST0JFKQogfQogCiBj
bGFzcyBYODZBc3NlbWJsZXIgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5jcHAJKHJldmlzaW9uIDE0OTY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTIgQEAKICNpZiBFTkFCTEUo
SklUKQogI2luY2x1ZGUgIkpJVFN0dWJzLmgiCiAKLSNpbmNsdWRlICJDb21tb25TbG93UGF0aHMu
aCIKICNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgi
CiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiQ29kZVByb2ZpbGluZy5oIgorI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1
ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJFeGNl
cHRpb25IZWxwZXJzLmgiCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIK
ICNpbmNsdWRlICJKU1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxlZ2FjeVByb2ZpbGVyLmgiCisj
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJOYW1lSW5zdGFuY2UuaCIKICNp
bmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5o
IgpAQCAtNzcsNiArNzgsMTA2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBK
U0MgewogCisjaWYgVVNFKE1BU01fUFJPQkUpCisKKy8vIFRoZSBmb2xsb3dpbmcgYXJlIG9mZnNl
dHMgZm9yIE1hY3JvQXNzZW1ibGVyOjpQcm9iZUNvbnRleHQgZmllbGRzOgorI2lmIENQVShYODYp
IHx8IENQVShYODZfNjQpCisKKyNpZiBDUFUoWDg2KQorI2RlZmluZSBQVFJfU0laRSA0CisjZWxz
ZSAvLyBDUFUoWDg2XzY0KQorI2RlZmluZSBQVFJfU0laRSA4CisjZW5kaWYKKworI2RlZmluZSBQ
Uk9CRV9QUk9CRV9GVU5DVElPTl9PRkZTRVQgKDAgKiBQVFJfU0laRSkKKyNkZWZpbmUgUFJPQkVf
QVJHMV9PRkZTRVQgKDEgKiBQVFJfU0laRSkKKyNkZWZpbmUgUFJPQkVfQVJHMl9PRkZTRVQgKDIg
KiBQVFJfU0laRSkKKyNkZWZpbmUgUFJPQkVfSklUX1NUQUNLX0ZSQU1FX09GRlNFVCAoMyAqIFBU
Ul9TSVpFKQorCisjZGVmaW5lIFBST0JFX0NQVV9FQVhfT0ZGU0VUICg0ICogUFRSX1NJWkUpCisj
ZGVmaW5lIFBST0JFX0NQVV9FQ1hfT0ZGU0VUICg1ICogUFRSX1NJWkUpCisjZGVmaW5lIFBST0JF
X0NQVV9FRFhfT0ZGU0VUICg2ICogUFRSX1NJWkUpCisjZGVmaW5lIFBST0JFX0NQVV9FQlhfT0ZG
U0VUICg3ICogUFRSX1NJWkUpCisjZGVmaW5lIFBST0JFX0NQVV9FU1BfT0ZGU0VUICg4ICogUFRS
X1NJWkUpCisjZGVmaW5lIFBST0JFX0NQVV9FQlBfT0ZGU0VUICg5ICogUFRSX1NJWkUpCisjZGVm
aW5lIFBST0JFX0NQVV9FU0lfT0ZGU0VUICgxMCAqIFBUUl9TSVpFKQorI2RlZmluZSBQUk9CRV9D
UFVfRURJX09GRlNFVCAoMTEgKiBQVFJfU0laRSkKKworI2lmIENQVShYODYpCisKKyNkZWZpbmUg
UFJPQkVfQ1BVX0VJUF9PRkZTRVQgKDEyICogUFRSX1NJWkUpCisjZGVmaW5lIFBST0JFX0ZJUlNU
X1hNTV9PRkZTRVQgKDE2ICogUFRSX1NJWkUpIC8vIEFmdGVyIHBhZGRpbmcuCisKKyNlbHNlIC8v
IENQVShYODZfNjQpCisKKyNkZWZpbmUgUFJPQkVfQ1BVX1I4X09GRlNFVCAoMTIgKiBQVFJfU0la
RSkKKyNkZWZpbmUgUFJPQkVfQ1BVX1I5X09GRlNFVCAoMTMgKiBQVFJfU0laRSkKKyNkZWZpbmUg
UFJPQkVfQ1BVX1IxMF9PRkZTRVQgKDE0ICogUFRSX1NJWkUpCisjZGVmaW5lIFBST0JFX0NQVV9S
MTFfT0ZGU0VUICgxNSAqIFBUUl9TSVpFKQorI2RlZmluZSBQUk9CRV9DUFVfUjEyX09GRlNFVCAo
MTYgKiBQVFJfU0laRSkKKyNkZWZpbmUgUFJPQkVfQ1BVX1IxM19PRkZTRVQgKDE3ICogUFRSX1NJ
WkUpCisjZGVmaW5lIFBST0JFX0NQVV9SMTRfT0ZGU0VUICgxOCAqIFBUUl9TSVpFKQorI2RlZmlu
ZSBQUk9CRV9DUFVfUjE1X09GRlNFVCAoMTkgKiBQVFJfU0laRSkKKyNkZWZpbmUgUFJPQkVfQ1BV
X0VJUF9PRkZTRVQgKDIwICogUFRSX1NJWkUpCisjZGVmaW5lIFBST0JFX0ZJUlNUX1hNTV9PRkZT
RVQgKDIyICogUFRSX1NJWkUpIC8vIEFmdGVyIHBhZGRpbmcuCisKKyNlbmRpZiAvLyBDUFUoWDg2
XzY0KQorCisjZGVmaW5lIFhNTV9TSVpFIDE2CisjZGVmaW5lIFBST0JFX0NQVV9YTU0wX09GRlNF
VCAoUFJPQkVfRklSU1RfWE1NX09GRlNFVCArICgwICogWE1NX1NJWkUpKQorI2RlZmluZSBQUk9C
RV9DUFVfWE1NMV9PRkZTRVQgKFBST0JFX0ZJUlNUX1hNTV9PRkZTRVQgKyAoMSAqIFhNTV9TSVpF
KSkKKyNkZWZpbmUgUFJPQkVfQ1BVX1hNTTJfT0ZGU0VUIChQUk9CRV9GSVJTVF9YTU1fT0ZGU0VU
ICsgKDIgKiBYTU1fU0laRSkpCisjZGVmaW5lIFBST0JFX0NQVV9YTU0zX09GRlNFVCAoUFJPQkVf
RklSU1RfWE1NX09GRlNFVCArICgzICogWE1NX1NJWkUpKQorI2RlZmluZSBQUk9CRV9DUFVfWE1N
NF9PRkZTRVQgKFBST0JFX0ZJUlNUX1hNTV9PRkZTRVQgKyAoNCAqIFhNTV9TSVpFKSkKKyNkZWZp
bmUgUFJPQkVfQ1BVX1hNTTVfT0ZGU0VUIChQUk9CRV9GSVJTVF9YTU1fT0ZGU0VUICsgKDUgKiBY
TU1fU0laRSkpCisjZGVmaW5lIFBST0JFX0NQVV9YTU02X09GRlNFVCAoUFJPQkVfRklSU1RfWE1N
X09GRlNFVCArICg2ICogWE1NX1NJWkUpKQorI2RlZmluZSBQUk9CRV9DUFVfWE1NN19PRkZTRVQg
KFBST0JFX0ZJUlNUX1hNTV9PRkZTRVQgKyAoNyAqIFhNTV9TSVpFKSkKKworLy8gVGhlc2UgQVNT
RVJUcyByZW1pbmQgeW91IHRoYXQgaWYgeW91IGNoYW5nZSB0aGUgbGF5b3V0IG9mIFByb2JlQ29u
dGV4dCwKKy8vIHlvdSBuZWVkIHRvIGNoYW5nZSBjdGlNYXNtUHJvYmVUcmFtcG9saW5lIG9mZnNl
dHMgYWJvdmUgdG8gbWF0Y2guCisjZGVmaW5lIFBST0JFX09GRlNFVE9GKHgpIG9mZnNldG9mKHN0
cnVjdCBNYWNyb0Fzc2VtYmxlcjo6UHJvYmVDb250ZXh0LCB4KQorQ09NUElMRV9BU1NFUlQoUFJP
QkVfT0ZGU0VUT0YocHJvYmVGdW5jdGlvbikgPT0gUFJPQkVfUFJPQkVfRlVOQ1RJT05fT0ZGU0VU
LCBQcm9iZUNvbnRleHRfcHJvYmVGdW5jdGlvbl9vZmZzZXRfbWF0Y2hlc19jdGlNYXNtUHJvYmVU
cmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGFyZzEpID09IFBST0JF
X0FSRzFfT0ZGU0VULCBQcm9iZUNvbnRleHRfYXJnMV9vZmZzZXRfbWF0Y2hlc19jdGlNYXNtUHJv
YmVUcmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGFyZzIpID09IFBS
T0JFX0FSRzJfT0ZGU0VULCBQcm9iZUNvbnRleHRfYXJnMl9vZmZzZXRfbWF0Y2hlc19jdGlNYXNt
UHJvYmVUcmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGppdFN0YWNr
RnJhbWUpID09IFBST0JFX0pJVF9TVEFDS19GUkFNRV9PRkZTRVQsIFByb2JlQ29udGV4dF9qaXRT
dGFja0ZyYW1lX29mZnNldF9tYXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1wb2xpbmUpOworCitDT01Q
SUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihjcHUuZWF4KSA9PSBQUk9CRV9DUFVfRUFYX09GRlNF
VCwgUHJvYmVDb250ZXh0X2NwdV9lYXhfb2Zmc2V0X21hdGNoZXNfY3RpTWFzbVByb2JlVHJhbXBv
bGluZSk7CitDT01QSUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihjcHUuZWN4KSA9PSBQUk9CRV9D
UFVfRUNYX09GRlNFVCwgUHJvYmVDb250ZXh0X2NwdV9lY3hfb2Zmc2V0X21hdGNoZXNfY3RpTWFz
bVByb2JlVHJhbXBvbGluZSk7CitDT01QSUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihjcHUuZWR4
KSA9PSBQUk9CRV9DUFVfRURYX09GRlNFVCwgUHJvYmVDb250ZXh0X2NwdV9lZHhfb2Zmc2V0X21h
dGNoZXNfY3RpTWFzbVByb2JlVHJhbXBvbGluZSk7CitDT01QSUxFX0FTU0VSVChQUk9CRV9PRkZT
RVRPRihjcHUuZWJ4KSA9PSBQUk9CRV9DUFVfRUJYX09GRlNFVCwgUHJvYmVDb250ZXh0X2NwdV9l
Ynhfb2Zmc2V0X21hdGNoZXNfY3RpTWFzbVByb2JlVHJhbXBvbGluZSk7CitDT01QSUxFX0FTU0VS
VChQUk9CRV9PRkZTRVRPRihjcHUuZXNwKSA9PSBQUk9CRV9DUFVfRVNQX09GRlNFVCwgUHJvYmVD
b250ZXh0X2NwdV9lc3Bfb2Zmc2V0X21hdGNoZXNfY3RpTWFzbVByb2JlVHJhbXBvbGluZSk7CitD
T01QSUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihjcHUuZWJwKSA9PSBQUk9CRV9DUFVfRUJQX09G
RlNFVCwgUHJvYmVDb250ZXh0X2NwdV9lYnBfb2Zmc2V0X21hdGNoZXNfY3RpTWFzbVByb2JlVHJh
bXBvbGluZSk7CitDT01QSUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihjcHUuZXNpKSA9PSBQUk9C
RV9DUFVfRVNJX09GRlNFVCwgUHJvYmVDb250ZXh0X2NwdV9lc2lfb2Zmc2V0X21hdGNoZXNfY3Rp
TWFzbVByb2JlVHJhbXBvbGluZSk7CitDT01QSUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihjcHUu
ZWRpKSA9PSBQUk9CRV9DUFVfRURJX09GRlNFVCwgUHJvYmVDb250ZXh0X2NwdV9lZGlfb2Zmc2V0
X21hdGNoZXNfY3RpTWFzbVByb2JlVHJhbXBvbGluZSk7CisjaWYgQ1BVKFg4Nl82NCkKK0NPTVBJ
TEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS5yOCkgPT0gUFJPQkVfQ1BVX1I4X09GRlNFVCwg
UHJvYmVDb250ZXh0X2NwdV9yOF9vZmZzZXRfbWF0Y2hlc19jdGlNYXNtUHJvYmVUcmFtcG9saW5l
KTsKK0NPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS5yOSkgPT0gUFJPQkVfQ1BVX1I5
X09GRlNFVCwgUHJvYmVDb250ZXh0X2NwdV9yOV9vZmZzZXRfbWF0Y2hlc19jdGlNYXNtUHJvYmVU
cmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS5yMTApID09IFBS
T0JFX0NQVV9SMTBfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X3IxMF9vZmZzZXRfbWF0Y2hlc19j
dGlNYXNtUHJvYmVUcmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNw
dS5yMTEpID09IFBST0JFX0NQVV9SMTFfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X3IxMV9vZmZz
ZXRfbWF0Y2hlc19jdGlNYXNtUHJvYmVUcmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJUKFBST0JF
X09GRlNFVE9GKGNwdS5yMTIpID09IFBST0JFX0NQVV9SMTJfT0ZGU0VULCBQcm9iZUNvbnRleHRf
Y3B1X3IxMl9vZmZzZXRfbWF0Y2hlc19jdGlNYXNtUHJvYmVUcmFtcG9saW5lKTsKK0NPTVBJTEVf
QVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS5yMTMpID09IFBST0JFX0NQVV9SMTNfT0ZGU0VULCBQ
cm9iZUNvbnRleHRfY3B1X3IxM19vZmZzZXRfbWF0Y2hlc19jdGlNYXNtUHJvYmVUcmFtcG9saW5l
KTsKK0NPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS5yMTQpID09IFBST0JFX0NQVV9S
MTRfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X3IxNF9vZmZzZXRfbWF0Y2hlc19jdGlNYXNtUHJv
YmVUcmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS5yMTUpID09
IFBST0JFX0NQVV9SMTVfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X3IxNV9vZmZzZXRfbWF0Y2hl
c19jdGlNYXNtUHJvYmVUcmFtcG9saW5lKTsKKyNlbmRpZiAvLyBDUFUoWDg2XzY0KQorQ09NUElM
RV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0YoY3B1LmVpcCkgPT0gUFJPQkVfQ1BVX0VJUF9PRkZTRVQs
IFByb2JlQ29udGV4dF9jcHVfZWlwX29mZnNldF9tYXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1wb2xp
bmUpOworCitDT01QSUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihjcHUueG1tMCkgPT0gUFJPQkVf
Q1BVX1hNTTBfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X3htbTBfb2Zmc2V0X21hdGNoZXNfY3Rp
TWFzbVByb2JlVHJhbXBvbGluZSk7CitDT01QSUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihjcHUu
eG1tMSkgPT0gUFJPQkVfQ1BVX1hNTTFfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X3htbTFfb2Zm
c2V0X21hdGNoZXNfY3RpTWFzbVByb2JlVHJhbXBvbGluZSk7CitDT01QSUxFX0FTU0VSVChQUk9C
RV9PRkZTRVRPRihjcHUueG1tMikgPT0gUFJPQkVfQ1BVX1hNTTJfT0ZGU0VULCBQcm9iZUNvbnRl
eHRfY3B1X3htbTJfb2Zmc2V0X21hdGNoZXNfY3RpTWFzbVByb2JlVHJhbXBvbGluZSk7CitDT01Q
SUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihjcHUueG1tMykgPT0gUFJPQkVfQ1BVX1hNTTNfT0ZG
U0VULCBQcm9iZUNvbnRleHRfY3B1X3htbTNfb2Zmc2V0X21hdGNoZXNfY3RpTWFzbVByb2JlVHJh
bXBvbGluZSk7CitDT01QSUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihjcHUueG1tNCkgPT0gUFJP
QkVfQ1BVX1hNTTRfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X3htbTRfb2Zmc2V0X21hdGNoZXNf
Y3RpTWFzbVByb2JlVHJhbXBvbGluZSk7CitDT01QSUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihj
cHUueG1tNSkgPT0gUFJPQkVfQ1BVX1hNTTVfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X3htbTVf
b2Zmc2V0X21hdGNoZXNfY3RpTWFzbVByb2JlVHJhbXBvbGluZSk7CitDT01QSUxFX0FTU0VSVChQ
Uk9CRV9PRkZTRVRPRihjcHUueG1tNikgPT0gUFJPQkVfQ1BVX1hNTTZfT0ZGU0VULCBQcm9iZUNv
bnRleHRfY3B1X3htbTZfb2Zmc2V0X21hdGNoZXNfY3RpTWFzbVByb2JlVHJhbXBvbGluZSk7CitD
T01QSUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihjcHUueG1tNykgPT0gUFJPQkVfQ1BVX1hNTTdf
T0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X3htbTdfb2Zmc2V0X21hdGNoZXNfY3RpTWFzbVByb2Jl
VHJhbXBvbGluZSk7CisKKy8vIEFsc28gZG91YmxlIGNoZWNrIHRoYXQgdGhlIHhtbSByZWdpc3Rl
cnMgYXJlIDE2IGJ5dGUgKDEyOC1iaXQpIGFsaWduZWQgYXMKKy8vIHJlcXVpcmVkIGJ5IHRoZSBt
b3ZkcWEgaW5zdHJ1Y3Rpb24gdXNlZCBpbiB0aGUgdHJhbXBvbGluZS4KK0NPTVBJTEVfQVNTRVJU
KCEoUFJPQkVfT0ZGU0VUT0YoY3B1LnhtbTApICUgMTYpLCBQcm9iZUNvbnRleHRfeG1tMF9vZmZz
ZXRfbm90X2FsaWduZWRfcHJvcGVybHkpOworI3VuZGVmIFBST0JFX09GRlNFVE9GCisjZW5kaWYg
Ly8gQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKKyNlbmRpZiAvLyBVU0UoTUFTTV9QUk9CRSkKKwor
CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAogI2lmIENPTVBJTEVSKEdDQykgJiYgQ1BVKFg4NikK
QEAgLTEzMyw2ICsyMzQsNzMgQEAgU1lNQk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAi
OiIgIgogICAgICJyZXQiICJcbiIKICk7CiAgICAgCisjaWYgVVNFKE1BU01fUFJPQkUpCithc20g
KAorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpTWFzbVByb2JlVHJhbXBvbGluZSkgIlxuIgor
SElERV9TWU1CT0woY3RpTWFzbVByb2JlVHJhbXBvbGluZSkgIlxuIgorU1lNQk9MX1NUUklORyhj
dGlNYXNtUHJvYmVUcmFtcG9saW5lKSAiOiIgIlxuIgorICAgIC8vIFNhdmUgdGhlIFBDIG9mIGlu
c3RydWN0aW9uIGFmdGVyIHRoZSBwcm9iZToKKyAgICAicG9wbCAlZWF4IiAiXG4iCisgICAgIm1v
dmwgJWVheCwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX0VJUF9PRkZTRVQpICIoJWVz
cCkiICJcbiIKKworICAgIC8vIFNhdmUgdGhlIHJlc3Qgb2YgdGhlIHN0aWxsIHVuc2F2ZWQgcmVn
aXN0ZXJzOgorICAgICJtb3ZsICVlY3gsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9F
Q1hfT0ZGU0VUKSAiKCVlc3ApIiAiXG4iCisgICAgIm1vdmwgJWVkeCwgIiBTVFJJTkdJWkVfVkFM
VUVfT0YoUFJPQkVfQ1BVX0VEWF9PRkZTRVQpICIoJWVzcCkiICJcbiIKKyAgICAibW92bCAlZWJ4
LCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRUJYX09GRlNFVCkgIiglZXNwKSIgIlxu
IgorICAgICJtb3ZsICVlYnAsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FQlBfT0ZG
U0VUKSAiKCVlc3ApIiAiXG4iCisgICAgIm1vdmwgJWVzaSwgIiBTVFJJTkdJWkVfVkFMVUVfT0Yo
UFJPQkVfQ1BVX0VTSV9PRkZTRVQpICIoJWVzcCkiICJcbiIKKyAgICAibW92bCAlZWRpLCAiIFNU
UklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRURJX09GRlNFVCkgIiglZXNwKSIgIlxuIgorCisg
ICAgIm1vdmRxYSAleG1tMCwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTBfT0ZG
U0VUKSAiKCVlc3ApIiAiXG4iCisgICAgIm1vdmRxYSAleG1tMSwgIiBTVFJJTkdJWkVfVkFMVUVf
T0YoUFJPQkVfQ1BVX1hNTTFfT0ZGU0VUKSAiKCVlc3ApIiAiXG4iCisgICAgIm1vdmRxYSAleG1t
MiwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTJfT0ZGU0VUKSAiKCVlc3ApIiAi
XG4iCisgICAgIm1vdmRxYSAleG1tMywgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hN
TTNfT0ZGU0VUKSAiKCVlc3ApIiAiXG4iCisgICAgIm1vdmRxYSAleG1tNCwgIiBTVFJJTkdJWkVf
VkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTRfT0ZGU0VUKSAiKCVlc3ApIiAiXG4iCisgICAgIm1vdmRx
YSAleG1tNSwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTVfT0ZGU0VUKSAiKCVl
c3ApIiAiXG4iCisgICAgIm1vdmRxYSAleG1tNiwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVf
Q1BVX1hNTTZfT0ZGU0VUKSAiKCVlc3ApIiAiXG4iCisgICAgIm1vdmRxYSAleG1tNywgIiBTVFJJ
TkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTdfT0ZGU0VUKSAiKCVlc3ApIiAiXG4iCisKKyAg
ICAvLyBGaWxsIGluIHRoZSBqaXRTdGFja0ZyYW1lIHBvaW50ZXI6CisgICAgIm1vdmwgIiBTVFJJ
TkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX0VTUF9PRkZTRVQpICIoJWVzcCksICVlYXgiICJcbiIK
KyAgICAibW92bCAlZWF4LCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9KSVRfU1RBQ0tfRlJB
TUVfT0ZGU0VUKSAiKCVlc3ApIiAiXG4iCisKKyAgICAibW92bCAlZXNwLCAlZWJwIiAiXG4iIC8v
IFNhdmUgdGhlIFByb2JlQ29udGV4dCouCisKKyAgICAvLyBSZXNlcnZlIHN0YWNrIHNwYWNlIGZv
ciB0aGUgYXJnIHdoaWxlIG1haW50YWluaW5nIHRoZSByZXF1aXJlZCBzdGFjaworICAgIC8vIHBv
aW50ZXIgMzIgYnl0ZSBhbGlnbm1lbnQ6CisgICAgInN1YmwgJDB4MjAsICVlc3AiICJcbiIKKwor
ICAgIC8vIENhbGwgdGhlIHByb2JlIHBhc3NpbmcgdGhlIGNvbnRleHQgcG9pbnRlcjoKKyAgICAi
bW92bCAlZWJwLCAwKCVlc3ApIiAiXG4iIC8vIHRoZSBQcm9iZUNvbnRleHQqIGFyZy4KKyAgICAi
Y2FsbCAqIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfUFJPQkVfRlVOQ1RJT05fT0ZGU0VUKSAi
KCVlYnApIiAiXG4iCisKKyAgICAvLyBSZXN0b3JlIHRoZSByZWdpc3RlcnMgZXhjZXB0IGZvciAl
ZWJwOgorICAgICJtb3ZsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FQVhfT0ZGU0VU
KSAiKCVlYnApLCAlZWF4IiAiXG4iCisgICAgIm1vdmwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJP
QkVfQ1BVX0VDWF9PRkZTRVQpICIoJWVicCksICVlY3giICJcbiIKKyAgICAibW92bCAiIFNUUklO
R0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRURYX09GRlNFVCkgIiglZWJwKSwgJWVkeCIgIlxuIgor
ICAgICJtb3ZsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FQlhfT0ZGU0VUKSAiKCVl
YnApLCAlZWJ4IiAiXG4iCisgICAgIm1vdmwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BV
X0VTUF9PRkZTRVQpICIoJWVicCksICVlc3AiICJcbiIKKyAgICAibW92bCAiIFNUUklOR0laRV9W
QUxVRV9PRihQUk9CRV9DUFVfRVNJX09GRlNFVCkgIiglZWJwKSwgJWVzaSIgIlxuIgorICAgICJt
b3ZsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FRElfT0ZGU0VUKSAiKCVlYnApLCAl
ZWRpIiAiXG4iCisKKyAgICAibW92ZHFhICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9Y
TU0wX09GRlNFVCkgIiglZWJwKSwgJXhtbTAiICJcbiIKKyAgICAibW92ZHFhICIgU1RSSU5HSVpF
X1ZBTFVFX09GKFBST0JFX0NQVV9YTU0xX09GRlNFVCkgIiglZWJwKSwgJXhtbTEiICJcbiIKKyAg
ICAibW92ZHFhICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU0yX09GRlNFVCkgIigl
ZWJwKSwgJXhtbTIiICJcbiIKKyAgICAibW92ZHFhICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JF
X0NQVV9YTU0zX09GRlNFVCkgIiglZWJwKSwgJXhtbTMiICJcbiIKKyAgICAibW92ZHFhICIgU1RS
SU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU00X09GRlNFVCkgIiglZWJwKSwgJXhtbTQiICJc
biIKKyAgICAibW92ZHFhICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU01X09GRlNF
VCkgIiglZWJwKSwgJXhtbTUiICJcbiIKKyAgICAibW92ZHFhICIgU1RSSU5HSVpFX1ZBTFVFX09G
KFBST0JFX0NQVV9YTU02X09GRlNFVCkgIiglZWJwKSwgJXhtbTYiICJcbiIKKyAgICAibW92ZHFh
ICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU03X09GRlNFVCkgIiglZWJwKSwgJXht
bTciICJcbiIKKworICAgIC8vIFJlc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzIGZvciB0aGUgcmV0
IGJlbG93OgorICAgICJwdXNobCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRUlQX09G
RlNFVCkgIiglZWJwKSIgIlxuIgorCisgICAgLy8gRXZlcnl0aGluZydzIHJlc3RvcmVkLiBOb3cg
cmVzdG9yZSB0aGUgJWVicCwgYW5kIHJldHVybjoKKyAgICAibW92bCAiIFNUUklOR0laRV9WQUxV
RV9PRihQUk9CRV9DUFVfRUJQX09GRlNFVCkgIiglZWJwKSwgJWVicCIgIlxuIgorICAgICJyZXQi
ICJcbiIKKyk7CisjZW5kaWYgLy8gVVNFKE1BU01fUFJPQkUpCisgICAgCiAjZWxpZiAoQ09NUElM
RVIoR0NDKSB8fCBDT01QSUxFUihSVkNUKSkgJiYgQ1BVKEFSTV9USFVNQjIpCiAKICNkZWZpbmUg
VEhVTktfUkVUVVJOX0FERFJFU1NfT0ZGU0VUICAgICAgMHgzOApAQCAtMzc3LDYgKzU0NSw4NyBA
QCBTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQpICI6IiAiCiAgICAgInJldCIgIlxu
IgogKTsKIAorI2lmIFVTRShNQVNNX1BST0JFKQorYXNtICgKKyIuZ2xvYmwgIiBTWU1CT0xfU1RS
SU5HKGN0aU1hc21Qcm9iZVRyYW1wb2xpbmUpICJcbiIKK0hJREVfU1lNQk9MKGN0aU1hc21Qcm9i
ZVRyYW1wb2xpbmUpICJcbiIKK1NZTUJPTF9TVFJJTkcoY3RpTWFzbVByb2JlVHJhbXBvbGluZSkg
IjoiICJcbiIKKyAgICAvLyBTYXZlIHRoZSBQQyBvZiBpbnN0cnVjdGlvbiBhZnRlciB0aGUgcHJv
YmU6CisgICAgInBvcHEgJXJheCIgIlxuIgorICAgICJtb3ZxICVyYXgsICIgU1RSSU5HSVpFX1ZB
TFVFX09GKFBST0JFX0NQVV9FSVBfT0ZGU0VUKSAiKCVyc3ApIiAiXG4iCisKKyAgICAvLyBTYXZl
IHRoZSByZXN0IG9mIHRoZSBzdGlsbCB1bnNhdmVkIHJlZ2lzdGVyczoKKyAgICAibW92cSAlcmN4
LCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRUNYX09GRlNFVCkgIiglcnNwKSIgIlxu
IgorICAgICJtb3ZxICVyZHgsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FRFhfT0ZG
U0VUKSAiKCVyc3ApIiAiXG4iCisgICAgIm1vdnEgJXJieCwgIiBTVFJJTkdJWkVfVkFMVUVfT0Yo
UFJPQkVfQ1BVX0VCWF9PRkZTRVQpICIoJXJzcCkiICJcbiIKKyAgICAibW92cSAlcmJwLCAiIFNU
UklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRUJQX09GRlNFVCkgIiglcnNwKSIgIlxuIgorICAg
ICJtb3ZxICVyc2ksICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FU0lfT0ZGU0VUKSAi
KCVyc3ApIiAiXG4iCisgICAgIm1vdnEgJXJkaSwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVf
Q1BVX0VESV9PRkZTRVQpICIoJXJzcCkiICJcbiIKKworICAgICJtb3ZxICVyOCwgIiBTVFJJTkdJ
WkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1I4X09GRlNFVCkgIiglcnNwKSIgIlxuIgorICAgICJtb3Zx
ICVyOSwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1I5X09GRlNFVCkgIiglcnNwKSIg
IlxuIgorICAgICJtb3ZxICVyMTAsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9SMTBf
T0ZGU0VUKSAiKCVyc3ApIiAiXG4iCisgICAgIm1vdnEgJXIxMSwgIiBTVFJJTkdJWkVfVkFMVUVf
T0YoUFJPQkVfQ1BVX1IxMV9PRkZTRVQpICIoJXJzcCkiICJcbiIKKyAgICAibW92cSAlcjEyLCAi
IFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfUjEyX09GRlNFVCkgIiglcnNwKSIgIlxuIgor
ICAgICJtb3ZxICVyMTMsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9SMTNfT0ZGU0VU
KSAiKCVyc3ApIiAiXG4iCisgICAgIm1vdnEgJXIxNCwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJP
QkVfQ1BVX1IxNF9PRkZTRVQpICIoJXJzcCkiICJcbiIKKyAgICAibW92cSAlcjE1LCAiIFNUUklO
R0laRV9WQUxVRV9PRihQUk9CRV9DUFVfUjE1X09GRlNFVCkgIiglcnNwKSIgIlxuIgorCisgICAg
Im1vdmRxYSAleG1tMCwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTBfT0ZGU0VU
KSAiKCVyc3ApIiAiXG4iCisgICAgIm1vdmRxYSAleG1tMSwgIiBTVFJJTkdJWkVfVkFMVUVfT0Yo
UFJPQkVfQ1BVX1hNTTFfT0ZGU0VUKSAiKCVyc3ApIiAiXG4iCisgICAgIm1vdmRxYSAleG1tMiwg
IiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTJfT0ZGU0VUKSAiKCVyc3ApIiAiXG4i
CisgICAgIm1vdmRxYSAleG1tMywgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTNf
T0ZGU0VUKSAiKCVyc3ApIiAiXG4iCisgICAgIm1vdmRxYSAleG1tNCwgIiBTVFJJTkdJWkVfVkFM
VUVfT0YoUFJPQkVfQ1BVX1hNTTRfT0ZGU0VUKSAiKCVyc3ApIiAiXG4iCisgICAgIm1vdmRxYSAl
eG1tNSwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTVfT0ZGU0VUKSAiKCVyc3Ap
IiAiXG4iCisgICAgIm1vdmRxYSAleG1tNiwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BV
X1hNTTZfT0ZGU0VUKSAiKCVyc3ApIiAiXG4iCisgICAgIm1vdmRxYSAleG1tNywgIiBTVFJJTkdJ
WkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTdfT0ZGU0VUKSAiKCVyc3ApIiAiXG4iCisKKyAgICAv
LyBGaWxsIGluIHRoZSBqaXRTdGFja0ZyYW1lIHBvaW50ZXI6CisgICAgIm1vdnEgIiBTVFJJTkdJ
WkVfVkFMVUVfT0YoUFJPQkVfQ1BVX0VTUF9PRkZTRVQpICIoJXJzcCksICVyYXgiICJcbiIKKyAg
ICAibW92cSAlcmF4LCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9KSVRfU1RBQ0tfRlJBTUVf
T0ZGU0VUKSAiKCVyc3ApIiAiXG4iCisKKyAgICAibW92cSAlcnNwLCAlcmJwIiAiXG4iIC8vIFNh
dmUgdGhlIFByb2JlQ29udGV4dCouCisKKyAgICAvLyBDYWxsIHRoZSBwcm9iZSBwYXNzaW5nIHRo
ZSBjb250ZXh0IHBvaW50ZXI6CisgICAgIm1vdnEgJXJicCwgJXJkaSIgIlxuIiAvLyB0aGUgUHJv
YmVDb250ZXh0KiBhcmcuCisgICAgImNhbGwgKiIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX1BS
T0JFX0ZVTkNUSU9OX09GRlNFVCkgIiglcmJwKSIgIlxuIgorCisgICAgIC8vIFJlc3RvcmUgdGhl
IHJlZ2lzdGVycyBleGNlcHQgZm9yICVyYnA6CisgICAgIm1vdnEgIiBTVFJJTkdJWkVfVkFMVUVf
T0YoUFJPQkVfQ1BVX0VBWF9PRkZTRVQpICIoJXJicCksICVyYXgiICJcbiIKKyAgICAibW92cSAi
IFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRUNYX09GRlNFVCkgIiglcmJwKSwgJXJjeCIg
IlxuIgorICAgICJtb3ZxICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FRFhfT0ZGU0VU
KSAiKCVyYnApLCAlcmR4IiAiXG4iCisgICAgIm1vdnEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJP
QkVfQ1BVX0VCWF9PRkZTRVQpICIoJXJicCksICVyYngiICJcbiIKKyAgICAibW92cSAiIFNUUklO
R0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRVNQX09GRlNFVCkgIiglcmJwKSwgJXJzcCIgIlxuIgor
ICAgICJtb3ZxICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FU0lfT0ZGU0VUKSAiKCVy
YnApLCAlcnNpIiAiXG4iCisgICAgIm1vdnEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BV
X0VESV9PRkZTRVQpICIoJXJicCksICVyZGkiICJcbiIKKworICAgICJtb3ZxICIgU1RSSU5HSVpF
X1ZBTFVFX09GKFBST0JFX0NQVV9SOF9PRkZTRVQpICIoJXJicCksICVyOCIgIlxuIgorICAgICJt
b3ZxICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9SOV9PRkZTRVQpICIoJXJicCksICVy
OSIgIlxuIgorICAgICJtb3ZxICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9SMTBfT0ZG
U0VUKSAiKCVyYnApLCAlcjEwIiAiXG4iCisgICAgIm1vdnEgIiBTVFJJTkdJWkVfVkFMVUVfT0Yo
UFJPQkVfQ1BVX1IxMV9PRkZTRVQpICIoJXJicCksICVyMTEiICJcbiIKKyAgICAibW92cSAiIFNU
UklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfUjEyX09GRlNFVCkgIiglcmJwKSwgJXIxMiIgIlxu
IgorICAgICJtb3ZxICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9SMTNfT0ZGU0VUKSAi
KCVyYnApLCAlcjEzIiAiXG4iCisgICAgIm1vdnEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVf
Q1BVX1IxNF9PRkZTRVQpICIoJXJicCksICVyMTQiICJcbiIKKyAgICAibW92cSAiIFNUUklOR0la
RV9WQUxVRV9PRihQUk9CRV9DUFVfUjE1X09GRlNFVCkgIiglcmJwKSwgJXIxNSIgIlxuIgorCisg
ICAgIm1vdmRxYSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NMF9PRkZTRVQpICIo
JXJicCksICV4bW0wIiAiXG4iCisgICAgIm1vdmRxYSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9C
RV9DUFVfWE1NMV9PRkZTRVQpICIoJXJicCksICV4bW0xIiAiXG4iCisgICAgIm1vdmRxYSAiIFNU
UklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NMl9PRkZTRVQpICIoJXJicCksICV4bW0yIiAi
XG4iCisgICAgIm1vdmRxYSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NM19PRkZT
RVQpICIoJXJicCksICV4bW0zIiAiXG4iCisgICAgIm1vdmRxYSAiIFNUUklOR0laRV9WQUxVRV9P
RihQUk9CRV9DUFVfWE1NNF9PRkZTRVQpICIoJXJicCksICV4bW00IiAiXG4iCisgICAgIm1vdmRx
YSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NNV9PRkZTRVQpICIoJXJicCksICV4
bW01IiAiXG4iCisgICAgIm1vdmRxYSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1N
Nl9PRkZTRVQpICIoJXJicCksICV4bW02IiAiXG4iCisgICAgIm1vdmRxYSAiIFNUUklOR0laRV9W
QUxVRV9PRihQUk9CRV9DUFVfWE1NN19PRkZTRVQpICIoJXJicCksICV4bW03IiAiXG4iCisKKyAg
ICAgLy8gUmVzdG9yZSB0aGUgcmV0dXJuIGFkZHJlc3MgZm9yIHRoZSByZXQgYmVsb3c6CisgICAg
InB1c2hxICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FSVBfT0ZGU0VUKSAiKCVyYnAp
IiAiXG4iCisKKyAgICAvLyBFdmVyeXRoaW5nJ3MgcmVzdG9yZWQuIE5vdyByZXN0b3JlIHRoZSAl
cmJwLCBhbmQgcmV0dXJuOgorICAgICJtb3ZxICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQ
VV9FQlBfT0ZGU0VUKSAiKCVyYnApLCAlcmJwIiAiXG4iCisgICAgInJldCIgIlxuIgorKTsKKyNl
bmRpZiAvLyBVU0UoTUFTTV9QUk9CRSkKKwogI2VsaWYgQ09NUElMRVIoTVNWQykgJiYgQ1BVKFg4
Nl82NCkKIAogLy8gVGhlc2UgQVNTRVJUcyByZW1pbmQgeW91IHRoYXQsIGlmIHlvdSBjaGFuZ2Ug
dGhlIGxheW91dCBvZiBKSVRTdGFja0ZyYW1lLCB5b3UKQEAgLTEyMjIsNiArMTQ3MSw3IEBAIE1T
VkNfRU5EKCAgICBFTkQpCiAqLwogCiAjZWxpZiBDUFUoU0g0KQorCiAjZGVmaW5lIERFRklORV9T
VFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkgXAogICAgIGV4dGVybiAiQyIgeyBcCiAgICAgICAgIHJ0
eXBlIEpJVFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTQ5NjU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTgs
NiArMzE4LDEwIEBAIGlubGluZSBib29sIHJldHVybkFkZHJlc3NJc0luQ3RpVHJhbXBvbGkKIH0K
ICNlbmRpZgogCisjaWYgVVNFKE1BU01fUFJPQkUpCitleHRlcm4gIkMiIHZvaWQgY3RpTWFzbVBy
b2JlVHJhbXBvbGluZSgpOworI2VuZGlmCisKIHZvaWQgcGVyZm9ybVBsYXRmb3JtU3BlY2lmaWNK
SVRBc3NlcnRpb25zKFZNKik7CiAKIGV4dGVybiAiQyIgewpJbmRleDogU291cmNlL1dURi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0OTcw
MCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMg
QEAKKzIwMTMtMDUtMDcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAg
IEltcGxlbWVudCBhIHByb2JlIG1lY2hhbmlzbSBmb3IgSklUIGdlbmVyYXRlZCBjb2RlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1NzA1LgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyB0aGUg
V1RGX1BBQ0soc2l6ZSwgYWxpZ25tZW50Qml0cykgbWFjcm8gd2hpY2ggcGFja3MgKHJvdW5kcyB1
cCkKKyAgICAgICAgYSBnaXZlbiBzaXplIHRvIGEgbXVsdGlwbGUgb2YgdGhlIGFuIGFsaWduIHNp
emUgY29tcHV0ZWQgYXMgMiB0byB0aGUKKyAgICAgICAgcG93ZXIgb2YgdGhlIGFsaWdubWVudEJp
dHMuCisKKyAgICAgICAgSWYgc2l6ZSBpcyBhbHJlYWR5IGFuIGV4YWN0IG11bHRpcGxlIG9mIHRo
ZSBhbGlnbiBzaXplLCB0aGVuCisgICAgICAgIFdURl9QQUNLKCkgd2lsbCByZXR1cm4gc2l6ZSB1
bmNoYW5nZWQuCisgICAgICAgIElmIHNpemUgaXMgbm90IGFuIGV4YWN0IG11bHRpcGxlIG9mIHRo
ZSBhbGlnbiBzaXplLCB0aGVuCisgICAgICAgIFdURl9QQUNLKCkgd2lsbCByZXR1cm4gdGhlIG5l
eHQgdmFsdWUgZ3JlYXRlciB0aGFuIHNpemUgdGhhdCBpcyBhbgorICAgICAgICBleGFjdCBtdWx0
aXBsZSBvZiBhbGlnbiBzaXplLgorCisgICAgICAgICogd3RmL0FsaWdubWVudC5oOgorICAgICAg
ICAoV1RGOjp3dGZQYWNrKToKKwogMjAxMy0wNS0wNiAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5A
YXBwbGUuY29tPgogCiAgICAgICAgIENoZXJyeS1waWNrIG1lcmdlZCBzb21lIHBhdGNoZXMgdG8g
dGhlIEZUTCBicmFuY2guCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BbGlnbm1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BbGlnbm1lbnQuaAkocmV2aXNpb24gMTQ5NjU1KQorKysg
U291cmNlL1dURi93dGYvQWxpZ25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yOCw2ICsyOCw4MiBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAorLy8gV1RG
X1BBQ0soKSBjb21wdXRlcyB0aGUgcGFja2VkIHNpemUgYnkgcm91bmRpbmcgc2l6ZUluQnl0ZXMg
dXAgdG8gdGhlIG5leHQKKy8vIGludGVnZXIgbXVsdGlwbGUgb2YgdGhlIHBhY2sgc2l6ZSBhcyBk
ZXRlcm1pbmVkIGJ5IHRoZSBiaXRzT2ZBbGlnbm1lbnQuCisvLyBGb3IgZXhhbXBsZSwKKy8vCisv
LyAgICAvLyBQYWNrIHRvIDggYnl0ZXMgaS5lLiAzIGJpdHMgb2YgYWxpZ25tZW50LgorLy8gICAg
V1RGX1BBQ0soMCwgMyk7IC8vIHlpZWxkcyAwLgorLy8gICAgV1RGX1BBQ0soNSwgMyk7IC8vIHlp
ZWxkcyA4LgorLy8gICAgV1RGX1BBQ0soOCwgMyk7IC8vIHlpZWxkcyA4LgorLy8gICAgV1RGX1BB
Q0soMjMsIDMpOyAvLyB5aWVsZHMgMjQgaS5lLiAzIHggOC4KKy8vICAgIFdURl9QQUNLKDI0LCAz
KTsgLy8geWllbGRzIDI0LgorLy8KKy8vICAgIC8vIFBhY2sgdG8gMTYgYnl0ZXMgaS5lLiA0IGJp
dHMgb2YgYWxpZ25tZW50LgorLy8gICAgV1RGX1BBQ0soMCwgNCk7IC8vIHlpZWxkcyAwLgorLy8g
ICAgV1RGX1BBQ0soNSwgNCk7IC8vIHlpZWxkcyAxNi4KKy8vICAgIFdURl9QQUNLKDgsIDQpOyAv
LyB5aWVsZHMgMTYuCisvLyAgICBXVEZfUEFDSygyMywgNCk7IC8vIHlpZWxkcyAzMiBpLmUuIDIg
eCAxNi4KKy8vICAgIFdURl9QQUNLKDI0LCA0KTsgLy8geWllbGRzIDMyLgorCitpbmxpbmUgc2l6
ZV90IHd0ZlBhY2soc2l6ZV90IHNpemVJbkJ5dGVzLCB1bnNpZ25lZCBiaXRzT2ZBbGlnbm1lbnQp
Cit7CisgICAgc2l6ZV90IGFsaWduU2l6ZSA9IDEgPDwgYml0c09mQWxpZ25tZW50OworICAgIHNp
emVfdCBtYXNrQml0cyA9IGFsaWduU2l6ZSAtIDE7CisKKyAgICAvLyBOb3RlIHRoYXQgaW4gYmlu
YXJ5LCBhbGlnblNpemUgaXMgYWx3YXlzIGEgMSBmb2xsb3dlZCBieSBOIDBzLgorICAgIC8vIFRo
YXQgbWVhbnMgbWFza0JpdHMgaXMgMHMgZm9sbG93ZWQgYnkgTiAxcyAoYXMgZXhwZWN0ZWQpLiBX
ZSBjYW4gdXNlCisgICAgLy8gdGhpcyBtYXNrIHRvIG1hc2sgb2ZmIHRoZSBsb3cgYml0cyBvZiBh
IGdpdmVuIHNpemUgdG8gcHJvZHVjZSB0aGUKKyAgICAvLyBuZWFyZXN0IG11bHRpcGxlIG9mIGFs
aWduU2l6ZSBiZWxvdyB0aGF0IHNpemU6CisgICAgLy8KKyAgICAvLyAgIHJvdW5kRG93bihzaXpl
KSB7IHJldHVybiBzaXplICYgbWFza0JpdHM7IH0KKyAgICAvLworICAgIC8vIElmIHJvdW5kRG93
bihzaXplKSB5aWVsZHMgdGhlIGFsaWduZWQgc2l6ZSBiZWxvdyBzaXplLCB0aGVuCisgICAgLy8g
cm91bmREb3duKHNpemUgKyBhbGlnblNpemUpIHNob3VsZCB5aWVsZCB0aGUgYWxpZ25lZCBzaXpl
IGFib3ZlIHNpemUuCisgICAgLy8gV2UgY2FuIHVzZSB0aGlzIHRvIGltcGxlbWVudCBvdXIgcm91
bmRVcCgpIGZ1bmN0aW9uYWxpdHkgZXhjZXB0IHRoYXQKKyAgICAvLyBpdCBkb2Vzbid0IHdvcmsg
aW4gb25lIGNhc2U6CisgICAgLy8KKyAgICAvLyAgIElmIHNpemUgd2FzIGFscmVhZHkgc2xpZ25l
ZCB0byBiZWdpbiB3aXRoLCB0aGVuCisgICAgLy8gICByb3VuZERvd24oc2l6ZSArIGFsaWduU2l6
ZSkgd2lsbCBwcm9kdWNlIChzaXplICsgYWxpZ25TaXplKS4gRm9yCisgICAgLy8gICByb3VuZFVw
KHNpemUpLCB3ZSB3YW50IGl0IHRvIHByb2R1Y2Ugc2l6ZSBpbnN0ZWFkLgorICAgIC8vCisgICAg
Ly8gVG8gcmVtZWR5IHRoaXMsIGluc3RlYWQgb2YgYWRkaW5nIGFsaWduU2l6ZSwgd2UgYWRkIChh
bGlnblNpemUgLSAxKS4KKyAgICAvLyBXZSdsbCBjYWxsIHRoaXMgdmFsdWUgbWF4UGFkU2l6ZS4g
Q29pbmNpZGVudGx5LCB0aGlzIGlzIHRoZSBzYW1lIHZhbHVlCisgICAgLy8gYXMgbWFza0JpdHMu
IEhlbmNlLAorICAgIC8vCisgICAgLy8gICBJZiBzaXplIHdhcyBhbHJlYWR5IGFsaWduZWQgdG8g
YmVnaW4gd2l0aCwgdGhlbgorICAgIC8vICAgcm91bmREb3duKHNpemUgKyBtYXhQYWRTaXplKSB3
aWxsIHByb2R1Y2Ugc2l6ZSBhcyBleHBlY3RlZC4KKyAgICAvLworICAgIC8vICAgSWYgc2l6ZSBp
cyBub3QgYWxpZ25lZCwgdGhlbiBzaXplID4gcm91bmREb3duKHNpemUpLgorICAgIC8vICAgTGV0
IGRlbHRhU2l6ZSA9IHNpemUgLSByb3VuZERvd24oc2l6ZSkuIEhlbmNlLAorICAgIC8vICAgICBy
b3VuZERvd24oc2l6ZSArIG1heFBhZFNpemUpCisgICAgLy8gICAgID09PiByb3VuZERvd24ocm91
bmREb3duKHNpemUpICsgZGVsdGFTaXplICsgbWF4UGFkU2l6ZSkKKyAgICAvLyAgICAgPT0+IHJv
dW5kRG93bihzaXplKSArIHJvdW5kRG93bihkZWx0YVNpemUgKyBtYXhQYWRTaXplKQorICAgIC8v
CisgICAgLy8gICAgIEJ1dCBzaW5jZSBtYXhQYWRTaXplID0gYWxpZ25TaXplIC0gMSwgdGhlbgor
ICAgIC8vICAgICAgICgoZGVsdGFTaXplICsgbWF4UGFkc2l6ZSkgPiBhbGlnblNpemUpIHNpbmNl
CisgICAgLy8gICAgICAgZGVsdGFTaXplID4gMSBieSBkZWZpbml0aW9uLgorICAgIC8vCisgICAg
Ly8gICAgIExldCByZW1haW5kZXJTaXplID0gKGRlbHRhU2l6ZSArIG1heFBhZHNpemUpIC0gYWxp
Z25TaXplLgorICAgIC8vICAgICBOb3RlOiBXZSdyZSBndWFyYW50ZWVkIHRoYXQgcmVtYWluZGVy
U2l6ZSA8IGFsaWduU2l6ZS4KKyAgICAvLworICAgIC8vICAgICBIZW5jZSwgKGFsaWduU2l6ZSAr
IHJlbWFpbmRlclNpemUpID09IChkZWx0YVNpemUgKyBtYXhQYWRzaXplKS4KKyAgICAvLyAgICAg
U28sIGNvbnRpbnVpbmcgdGhlIGJyZWFrZG93biBvZiByb3VuZERvd24oc2l6ZSArIG1heFBhZFNp
emUpIC4uLgorICAgIC8vCisgICAgLy8gICAgID09PiByb3VuZERvd24oc2l6ZSkgKyByb3VuZERv
d24oYWxpZ25TaXplICsgcmVtYWluZGVyU2l6ZSkKKyAgICAvLyAgICAgPT0+IHJvdW5kRG93bihz
aXplKSArIHJvdW5kRG93bihhbGlnblNpemUpICsgcm91bmREb3duKHJlbWFpbmRlclNpemUpCisg
ICAgLy8gICAgID09PiByb3VuZERvd24oc2l6ZSkgKyBhbGlnblNpemUgKyAwCisgICAgLy8gICAg
ID09PiByb3VuZFVwKHNpemUpIHdoZW4gc2l6ZSBpZiBub3QgYWxpZ25lZC4KKworICAgIHNpemVf
dCBtYXhQYWRTaXplID0gbWFza0JpdHM7CisgICAgc2l6ZV90IHBhZGRlZFNpemUgPSBzaXplSW5C
eXRlcyArIG1heFBhZFNpemU7CisgICAgc2l6ZV90IHBhY2tlZFNpemUgPSBwYWRkZWRTaXplICYg
fm1hc2tCaXRzOworICAgIHJldHVybiBwYWNrZWRTaXplOworfQorCisjZGVmaW5lIFdURl9QQUNL
KHNpemVJbkJ5dGVzLCBiaXRzT2ZBbGlnbm1lbnQpIFdURjo6d3RmUGFjayhzaXplSW5CeXRlcywg
Yml0c09mQWxpZ25tZW50KQorCisKICNpZiBDT01QSUxFUihHQ0MpIHx8IENPTVBJTEVSKE1JTkdX
KSB8fCBDT01QSUxFUihSVkNUKSB8fCBDT01QSUxFUihHQ0NFKSB8fCAoQ09NUElMRVIoU1VOQ0Mp
ICYmIF9fU1VOUFJPX0NDID4gMHg1OTApCiAgICAgI2RlZmluZSBXVEZfQUxJR05fT0YodHlwZSkg
X19hbGlnbm9mX18odHlwZSkKICAgICAjZGVmaW5lIFdURl9BTElHTkVEKHZhcmlhYmxlX3R5cGUs
IHZhcmlhYmxlLCBuKSB2YXJpYWJsZV90eXBlIHZhcmlhYmxlIF9fYXR0cmlidXRlX18oKF9fYWxp
Z25lZF9fKG4pKSkKQEAgLTY1LDYgKzE0MSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHsKICAg
ICAgICAgcmV0dXJuICEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBvaW50ZXIpICYgbWFz
ayk7CiAgICAgfQotfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIFdURl9BbGln
bm1lbnRfaAo=
</data>
<flag name="review"
          id="222336"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201892</attachid>
            <date>2013-05-15 15:55:33 -0700</date>
            <delta_ts>2013-05-15 17:32:17 -0700</delta_ts>
            <desc>revised patch.</desc>
            <filename>bug-115705.patch</filename>
            <type>text/plain</type>
            <size>39109</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwMTUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBA
CisyMDEzLTA1LTE1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBJ
bXBsZW1lbnQgYSBwcm9iZSBtZWNoYW5pc20gZm9yIEpJVCBnZW5lcmF0ZWQgY29kZS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNTcwNS4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgcHJvYmUgaXMg
aW4gdGhlIGZvcm0gb2YgYSBNYWNyb0Fzc2VtYmxlciBwc2V1ZG8gaW5zdHJ1Y3Rpb24uCisgICAg
ICAgIEl0IHRha2VzIDMgYXJndW1lbnRzOiBhIFByb2JlRnVuY3Rpb24sIGFuZCAyIHZvaWQqIGFy
Z3MuCisKKyAgICAgICAgV2hlbiBpbnNlcnRlZCBpbnRvIHRoZSBKSVQgYXQgc29tZSBjb2RlIGdl
bmVyYXRpb24gc2l0ZSwgdGhlIHByb2JlCisgICAgICAgIHBzZXVkbyAiaW5zdHJ1Y3Rpb24iIHdp
bGwgZW1pdCBhIG1pbmltYWwgYW1vdW50IG9mIGNvZGUgdG8gc2F2ZSB0aGUKKyAgICAgICAgc3Rh
Y2sgcG9pbnRlciwgMSAob3IgbW9yZSkgc2NyYXRjaCByZWdpc3RlcihzKSwgYW5kIHRoZSBwcm9i
ZQorICAgICAgICBhcmd1bWVudHMgaW50byBhIFByb2JlQ29udGV4dCByZWNvcmQgb24gdGhlIHN0
YWNrLiBUaGUgZW1pdHRlZCBjb2RlCisgICAgICAgIHdpbGwgdGhlbiBjYWxsIGEgcHJvYmUgdHJh
bXBvbGluZSB0byBkbyB0aGUgcmVzdCBvZiB0aGUgd29yaywgd2hpY2gKKyAgICAgICAgY29uc2lz
dHMgb2Y6CisgICAgICAgIDEuIHNhdmluZyB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycyBpbnRvIHRo
ZSBQcm9iZUNvbnRleHQuCisgICAgICAgIDIuIGNhbGxpbmcgdGhlIFByb2JlRnVuY3Rpb24sIGFu
ZCBwYXNzaW5nIGl0IHRoZSBQcm9iZUNvbnRleHQgcG9pbnRlci4KKyAgICAgICAgMy4gcmVzdG9y
aW5nIHRoZSByZWdpc3RlcnMgZnJvbSB0aGUgUHJvYmVDb250ZXh0IGFmdGVyIHRoZSBQcm9iZUZ1
bmN0aW9uCisgICAgICAgICAgIHJldHVybnMsIGFuZCB0aGVuIHJldHVybmluZyB0byB0aGUgSklU
IGdlbmVyYXRlZCBjb2RlLgorCisgICAgICAgIFRoZSBQcm9iZUNvbnRleHQgaXMgc3RhY2sgYWxs
b2NhdGVkIGFuZCBpcyBvbmx5IHZhbGlkIGZvciB0aGUgZHVyYXRpb24KKyAgICAgICAgdGhhdCB0
aGUgUHJvYmVGdW5jdGlvbiBpcyBleGVjdXRpbmcuCisKKyAgICAgICAgSWYgdGhlIHVzZXIgc3Vw
cGxpZWQgUHJvYmVGdW5jdGlvbiBhbHRlcnMgdGhlIHJlZ2lzdGVyIHZhbHVlcyBpbiB0aGUKKyAg
ICAgICAgUHJvYmVDb250ZXh0LCB0aGUgbmV3IHZhbHVlcyB3aWxsIGJlIGluc3RhbGxlZCBpbnRv
IHRoZSByZWdpc3RlcnMgdXBvbgorICAgICAgICByZXR1cm5pbmcgZnJvbSB0aGUgcHJvYmUuIFRo
aXMgY2FuIGJlIHVzZWZ1bCBmb3Igc29tZSBkZWJ1Z2dpbmcgb3IKKyAgICAgICAgdGVzdGluZyBw
dXJwb3Nlcy4KKworICAgICAgICBUaGUgcHJvYmUgbWVjaGFuaXNtIGlzIGJ1aWx0IGNvbmRpdGlv
bmFsIG9uIFVTRShNQVNNX1BST0JFKSB3aGljaCBpcworICAgICAgICBkZWZpbmVkIGluIGNvbmZp
Zy5oLiBVU0UoTUFTTV9QUk9CRSkgd2lsbCBvZmYgYnkgZGVmYXVsdC4KKworICAgICAgICBUaGlz
IGNoYW5nZXNldCBvbmx5IGltcGxlbWVudHMgdGhlIHByb2JlIG1lY2hhbmlzbSBmb3IgWDg2IGFu
ZCBYODZfNjQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5jcHA6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpQcm9iZUNvbnRleHQ6OmR1bXAp
OgorICAgICAgICAtIFByaW50cyB0aGUgUHJvYmVDb250ZXh0IHRvIHRoZSBEYXRhTG9nLgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UHJvYmVDb250ZXh0OjpkdW1wQ1BVUmVnaXN0ZXJz
KToKKyAgICAgICAgLSBDUFUgc3BlY2lmaWMgcmVnaXN0ZXIgZHVtcGVyIGNhbGxlZCBieSBQcm9i
ZUNvbnRleHQ6OmR1bXAoKS4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnByb2JlKToK
KyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKE1hY3JvQXNz
ZW1ibGVyKToKKyAgICAgICAgKENQVVN0YXRlKTogQWRkZWQuCisgICAgICAgIChQcm9iZUNvbnRl
eHQpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnNob3VsZEJsaW5kKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnN0b3JlMzIpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9YODZBc3NlbWJsZXIuaDoKKyAgICAgICAgKiBjb25maWcuaDogQWRkZWQgV1RGX1VTRV9N
QVNNX1BST0JFIGZsYWcuCisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKiBq
aXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnNYODYuaDoKKyAgICAgICAgKiBq
aXQvSklUU3R1YnNYODZDb21tb24uaDogQWRkZWQuCisgICAgICAgICogaml0L0pJVFN0dWJzWDg2
XzY0Lmg6CisKIDIwMTMtMDUtMTUgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIEZpeCBmb3IgYnJva2VuIDMyLWJpdCBidWlsZCBpbiBTcGVjdWxhdGl2ZUpJVDo6Y2hl
Y2tBcnJheSgpLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaAkocmV2aXNpb24gMTUwMTUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAg
LTc2LDMgKzc2LDggQEAKICNlbHNlCiAjZGVmaW5lIFNLSVBfU1RBVElDX0NPTlNUUlVDVE9SU19P
Tl9HQ0MgMQogI2VuZGlmCisKKy8vIEVuYWJsZSB0aGUgZm9sbG93aW5nIGlmIHlvdSB3YW50IHRv
IHVzZSB0aGUgTWFjcm9Bc3NlbWJsZXI6OnByb2JlKCkgZmFjaWxpdHkKKy8vIHRvIGRvIEpJVCBk
ZWJ1Z2dpbmcuCisjZGVmaW5lIFdURl9VU0VfTUFTTV9QUk9CRSAwCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShy
ZXZpc2lvbiAxNTAxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjI0NSw2ICsyMjQ1LDEwIEBACiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxqaXRcSklU
U3R1YnNYODYuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5caml0XEpJVFN0dWJzWDg2Q29tbW9uLmgiCisJCQkJPgorCQkJPC9GaWxlPgogICAg
ICAgICAgICAgPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGppdFxKSVRUaHVua3MuY3Bw
IgogCQkJCT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2
aXNpb24gMTUwMTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTcwLDYgKzU3
MCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUU3R1YnMuaCIgLz4NCiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUU3R1YnNYODYuaCIgLz4NCiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUU3R1YnNYODZfNjQuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUU3R1YnNYODZDb21tb24uaCIgLz4NCiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUVGh1bmtzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caml0XEpJVFdyaXRlQmFycmllci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGppdFxKU0ludGVyZmFjZUpJVC5oIiAvPg0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAxNTAxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
OTQ4LDYgKzk0OCw3IEBACiAJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29w
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5
QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNEEzMzFGMTVCRDJFMDcwMDZGNTRGMyAvKiBW
TUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTRBMzMxRDE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwICovOyB9Owog
CQlGRTRBMzMyMDE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEEzMzFFMTVCRDJFMDcwMDZGNTRG
MyAvKiBWTUluc3BlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUZFOTQwMzIyMTc0NDQyNTkwMDQ3Q0Y2RSAvKiBKSVRTdHVic1g4NkNvbW1v
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5NDAz
MjExNzQ0NDI1OTAwNDdDRjZFIC8qIEpJVFN0dWJzWDg2Q29tbW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVEMjg3QjIxNUVDOUE1NzAwREE4
MTYxIC8qIExMSW50T3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRUQyODdCMTE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUY2ODM1RTE3
NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNBUk0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRjY4MzVBMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVi
c0FSTS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUZFRjY4MzVGMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTXY3LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUY2ODM1QjE3NDM0M0NDMDBBMzJF
MjUgLyogSklUU3R1YnNBUk12Ny5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xOTcyLDYgKzE5NzMsNyBAQAogCQlGRTIwQ0U5QzE1RjA0QTk1MDBE
RjM0MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBM
TEludENMb29wLmg7IHBhdGggPSBsbGludC9MTEludENMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFNEEzMzFEMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWTUluc3BlY3Rvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNEEzMzFFMTVCRDJFMDcwMDZGNTRGMyAvKiBW
TUluc3BlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTUluc3BlY3Rv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTk0MDMyMTE3NDQ0MjU5MDA0N0NG
NkUgLyogSklUU3R1YnNYODZDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSklUU3R1YnNYODZDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVE
Mjg3QjExNUVDOUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2RlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IExMSW50T3Bjb2RlLmg7IHBhdGggPSBsbGludC9MTEludE9wY29kZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUY2ODM1QTE3NDM0M0NDMDBBMzJFMjUg
LyogSklUU3R1YnNBUk0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1
YnNBUk0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVGNjgzNUIxNzQzNDNDQzAw
QTMyRTI1IC8qIEpJVFN0dWJzQVJNdjcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSklUU3R1YnNBUk12Ny5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjMwMyw2
ICsyMzA1LDcgQEAKIAkJCQlGRUY2ODM1QjE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNBUk12
Ny5oICovLAogCQkJCUZFRjY4MzVDMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic1g4Nl82NC5o
ICovLAogCQkJCUZFRjY4MzVEMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic1g4Ni5oICovLAor
CQkJCUZFOTQwMzIxMTc0NDQyNTkwMDQ3Q0Y2RSAvKiBKSVRTdHVic1g4NkNvbW1vbi5oICovLAog
CQkJCTBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3BwICovLAogCQkJCTBG
NUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAqLywKIAkJCQlBNzZGNTRBMjEz
QjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi8sCkBAIC0zMjI5LDYgKzMyMzIs
NyBAQAogCQkJCUZFRjY4MzVGMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTXY3LmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRUY2ODM2MDE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNYODZf
NjQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRjY4MzVFMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRT
dHVic0FSTS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU5NDAzMjIxNzQ0NDI1OTAwNDdDRjZFIC8q
IEpJVFN0dWJzWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUY2ODM2MTE3NDM0M0ND
MDBBMzJFMjUgLyogSklUU3R1YnNYODYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjFEMTY3
QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNTI0MEUxNkZDOEEwMEIzNDQ2MCAvKiBBcnJheVByb3RvdHlwZS5sdXQuaCBp
biBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDE1MDE1MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
OCwxMCArMjgsMTMzIEBACiAKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogCisjaWYgVVNFKE1BU01f
UFJPQkUpCisjaW5jbHVkZSAiSklUU3R1YnMuaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IGRvdWJsZSBNYWNyb0Fzc2Vt
Ymxlcjo6dHdvVG9UaGUzMiA9IChkb3VibGUpMHgxMDAwMDAwMDB1bGw7CiAKKyNpZiBVU0UoTUFT
TV9QUk9CRSkKKwordm9pZCBNYWNyb0Fzc2VtYmxlcjo6UHJvYmVDb250ZXh0OjpkdW1wKGNvbnN0
IGNoYXIqIGluZGVudGF0aW9uKQoreworICAgIGlmICghaW5kZW50YXRpb24pCisgICAgICAgIGlu
ZGVudGF0aW9uID0gIiI7CisKKyAgICBkYXRhTG9nRigiJXNQcm9iZUNvbnRleHQgJXAge1xuIiwg
aW5kZW50YXRpb24sIHRoaXMpOworICAgIGRhdGFMb2dGKCIlcyAgcHJvYmVGdW5jdGlvbjogJXBc
biIsIGluZGVudGF0aW9uLCBwcm9iZUZ1bmN0aW9uKTsKKyAgICBkYXRhTG9nRigiJXMgIGFyZzE6
ICVwICVsbHVcbiIsIGluZGVudGF0aW9uLCBhcmcxLCByZWludGVycHJldF9jYXN0PGludDY0X3Q+
KGFyZzEpKTsKKyAgICBkYXRhTG9nRigiJXMgIGFyZzI6ICVwICVsbHVcbiIsIGluZGVudGF0aW9u
LCBhcmcyLCByZWludGVycHJldF9jYXN0PGludDY0X3Q+KGFyZzIpKTsKKyAgICBkYXRhTG9nRigi
JXMgIGppdFN0YWNrRnJhbWU6ICVwXG4iLCBpbmRlbnRhdGlvbiwgaml0U3RhY2tGcmFtZSk7Cisg
ICAgZGF0YUxvZ0YoIiVzICBjcHU6IHtcbiIsIGluZGVudGF0aW9uKTsKKworICAgIGR1bXBDUFVS
ZWdpc3RlcnMoaW5kZW50YXRpb24pOworCisgICAgZGF0YUxvZ0YoIiVzICB9XG4iLCBpbmRlbnRh
dGlvbik7CisgICAgZGF0YUxvZ0YoIiVzfVxuIiwgaW5kZW50YXRpb24pOworfQorCisjaWYgKENQ
VShYODYpIHx8IENQVShYODZfNjQpKSAmJiBDT01QSUxFUihHQ0MpCisKK3ZvaWQgTWFjcm9Bc3Nl
bWJsZXI6OlByb2JlQ29udGV4dDo6ZHVtcENQVVJlZ2lzdGVycyhjb25zdCBjaGFyKiBpbmRlbnRh
dGlvbikKK3sKKyNpZiBDUFUoWDg2KQorICAgICNkZWZpbmUgRFVNUF9HUFJFR0lTVEVSKF90eXBl
LCBfcmVnTmFtZSkgeyBcCisgICAgICAgIGludDMyX3QgdmFsdWUgPSByZWludGVycHJldF9jYXN0
PGludDMyX3Q+KGNwdS5fcmVnTmFtZSk7IFwKKyAgICAgICAgZGF0YUxvZ0YoIiVzICAgICU0czog
MHglMDh4ICAgJWRcbiIsIGluZGVudGF0aW9uLCAjX3JlZ05hbWUsIHZhbHVlLCB2YWx1ZSkgOyBc
CisgICAgfQorI2VsaWYgQ1BVKFg4Nl82NCkKKyAgICAjZGVmaW5lIERVTVBfR1BSRUdJU1RFUihf
dHlwZSwgX3JlZ05hbWUpIHsgXAorICAgICAgICBpbnQ2NF90IHZhbHVlID0gcmVpbnRlcnByZXRf
Y2FzdDxpbnQ2NF90PihjcHUuX3JlZ05hbWUpOyBcCisgICAgICAgIGRhdGFMb2dGKCIlcyAgICAl
NHM6IDB4JTAxNmxseCAgICVsbGRcbiIsIGluZGVudGF0aW9uLCAjX3JlZ05hbWUsIHZhbHVlLCB2
YWx1ZSkgOyBcCisgICAgfQorI2VuZGlmCisgICAgRk9SX0VBQ0hfQ1BVX0dQUkVHSVNURVIoRFVN
UF9HUFJFR0lTVEVSKQorICAgICN1bmRlZiBEVU1QX0dQUkVHSVNURVIKKworICAgICNkZWZpbmUg
RFVNUF9GUFJFR0lTVEVSKF90eXBlLCBfcmVnTmFtZSkgeyBcCisgICAgICAgIHVpbnQzMl90KiB1
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KCZjcHUuX3JlZ05hbWUpOyBcCisgICAgICAg
IGRvdWJsZSogZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZG91YmxlKj4oJmNwdS5fcmVnTmFtZSk7IFwK
KyAgICAgICAgZGF0YUxvZ0YoIiVzICAgICVzOiAweCUwOHglMDh4IDB4JTA4eCUwOHggICAlMTJn
ICUxMmdcbiIsIFwKKyAgICAgICAgICAgIGluZGVudGF0aW9uLCAjX3JlZ05hbWUsIHVbM10sIHVb
Ml0sIHVbMV0sIHVbMF0sIGRbMV0sIGRbMF0pOyBcCisgICAgfQorICAgIEZPUl9FQUNIX0NQVV9G
UFJFR0lTVEVSKERVTVBfRlBSRUdJU1RFUikKKyAgICAjdW5kZWYgRFVNUF9GUFJFR0lTVEVSCit9
CisKKy8vIFdlIHdhbnQgdG8ga2VlcCB0aGUgc2l6ZSBvZiB0aGUgZW1pdHRlZCBwcm9iZSBpbnZv
Y2F0aW9uIGNvZGUgYXMgY29tcGFjdCBhcworLy8gcG9zc2libGUgdG8gbWluaW1pemUgdGhlIHBl
cnR1cmJhdGlvbiB0byB0aGUgSklUIGdlbmVyYXRlZCBjb2RlLiBIb3dldmVyLAorLy8gd2UgYWxz
byBuZWVkIHRvIHByZXNlcnZlIHRoZSBDUFUgcmVnaXN0ZXJzIGFuZCBzZXQgdXAgdGhlIFByb2Jl
Q29udGV4dCB0byBiZQorLy8gcGFzc2VkIHRvIHRoZSB1c2VyIHByb2JlIGZ1bmN0aW9uLgorLy8K
Ky8vIEhlbmNlLCB3ZSBkbyBvbmx5IHRoZSBtaW5pbXVtIGhlcmUgdG8gcHJlc2VydmUgdGhlIHJh
eCAodG8gYmUgdXNlZCBhcyBhCisvLyBzY3JhdGNoIHJlZ2lzdGVyKSBhbmQgcnNwIHJlZ2lzdGVy
LCBhbmQgcGFzcyB0aGUgcHJvYmUgYXJndW1lbnRzLiBXZSdsbCBsZXQKKy8vIHRoZSBjdGlNYXNt
UHJvYmVUcmFtcG9saW5lIGhhbmRsZSB0aGUgcmVzdCBvZiB0aGUgcHJvYmUgaW52b2NhdGlvbiB3
b3JrCisvLyBpLmUuIHNhdmluZyB0aGUgQ1BVU3RhdGUgKGFuZCBzZXR0aW5nIHVwIHRoZSBQcm9i
ZUNvbnRleHQpLCBjYWxsaW5nIHRoZSB1c2VyCisvLyBwcm9iZSBmdW5jdGlvbiwgYW5kIHJlc3Rv
cmluZyB0aGUgQ1BVU3RhdGUgYmVmb3JlIHJldHVybmluZyB0byBKSVQgZ2VuZXJhdGVkCisvLyBj
b2RlLgorLy8KKy8vIFdoYXQgdmFsdWVzIGFyZSBpbiB0aGUgc2F2ZWQgcmVnaXN0ZXJzPworLy8g
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIENvbmNlcHR1YWxseSwg
dGhlIHNhdmVkIHJlZ2lzdGVycyBzaG91bGQgY29udGFpbiB2YWx1ZXMgYXMgaWYgdGhlIHByb2Jl
CisvLyBpcyBub3QgcHJlc2VudCBpbiB0aGUgSklUIGdlbmVyYXRlZCBjb2RlLiBIZW5jZSwgdGhl
eSBzaG91bGQgY29udGFpbiB2YWx1ZXMKKy8vIHRoYXQgYXJlIGV4cGVjdGVkIGF0IHRoZSBzdGFy
dCBvZiB0aGUgaW5zdHJ1Y3Rpb24gaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZQorLy8gcHJvYmUu
CisvLworLy8gU3BlY2lmY2FsbHksIHRoZSBzYXZlZCByc3AvZXNwIHdpbGwgcG9pbnQgdG8gdGhl
IHN0YWNrIHBvc2l0aW9uIGFmdGVyIHdlIHBvcAorLy8gdGhlIFByb2JlQ29udGV4dCBmcmFtZS4g
VGhlIHNhdmVkIHJpcC9laXAgd2lsbCBwb2ludCB0byB0aGUgYWRkcmVzcyBvZiB0aGUKKy8vIGlu
c3RydWN0aW9uIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgcHJvYmUuIAorCit2b2lkIE1hY3Jv
QXNzZW1ibGVyOjpwcm9iZShNYWNyb0Fzc2VtYmxlcjo6UHJvYmVGdW5jdGlvbiBmdW5jdGlvbiwg
dm9pZCogYXJnMSwgdm9pZCogYXJnMikKK3sKKyAgICBSZWdpc3RlcklEIGVzcCA9IFJlZ2lzdGVy
SUQ6OmVzcDsKKyAgICAjZGVmaW5lIFByb2JlQ29udGV4dEZpZWxkKGZpZWxkKSBBZGRyZXNzKGVz
cCwgb2Zmc2V0b2YoUHJvYmVDb250ZXh0LCBmaWVsZCkpCisKKyAgICAvLyBUaGUgWDg2XzY0IEFC
SSBzcGVjaWZpZXMgdGhhdCB0aGUgd29yc2UgY2FzZSBTVEFDSyBhbGlnbm1lbnQgcmVxdWlyZW1l
bnQKKyAgICAvLyBpcyAzMiBieXRlcy4KKyAgICBjb25zdCBpbnQgcHJvYmVGcmFtZVNpemUgPSBy
b3VuZFVwVG9NdWx0aXBsZU9mKHNpemVvZihQcm9iZUNvbnRleHQpLCAzMik7CisgICAgc3ViUHRy
KFRydXN0ZWRJbW0zMihwcm9iZUZyYW1lU2l6ZSksIGVzcCk7CisKKyAgICBzdG9yZVB0cihSZWdp
c3RlcklEOjplYXgsIFByb2JlQ29udGV4dEZpZWxkKGNwdS5lYXgpKTsKKworICAgIG1vdmUoVHJ1
c3RlZEltbTMyKHByb2JlRnJhbWVTaXplKSwgUmVnaXN0ZXJJRDo6ZWF4KTsKKyAgICBhZGRQdHIo
c3AsIFJlZ2lzdGVySUQ6OmVheCk7CisgICAgc3RvcmVQdHIoUmVnaXN0ZXJJRDo6ZWF4LCBQcm9i
ZUNvbnRleHRGaWVsZChjcHUuZXNwKSk7CisKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uKSksIFByb2JlQ29udGV4dEZpZWxkKHByb2Jl
RnVuY3Rpb24pKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGFyZzEpLCBQcm9iZUNvbnRl
eHRGaWVsZChhcmcxKSk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihhcmcyKSwgUHJvYmVD
b250ZXh0RmllbGQoYXJnMikpOworCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGN0aU1hc21Qcm9iZVRyYW1wb2xpbmUpKSwgUmVnaXN0ZXJJRDo6ZWF4KTsK
KyAgICBjYWxsKFJlZ2lzdGVySUQ6OmVheCk7CisKKyAgICAjdW5kZWYgUHJvYmVDb250ZXh0Rmll
bGQKK30KKworI2Vsc2UgLy8gTm90IGltcGxlbWVudGVkIENQVQorCitOT19SRVRVUk5fRFVFX1RP
X0FTU0VSVAordm9pZCBNYWNyb0Fzc2VtYmxlcjo6UHJvYmVDb250ZXh0OjpkdW1wQ1BVUmVnaXN0
ZXJzKGNvbnN0IGNoYXIqIGluZGVudGF0aW9uKQoreworICAgIFVOVVNFRF9QQVJBTShpbmRlbnRh
dGlvbik7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK05PX1JFVFVSTl9EVUVfVE9f
QVNTRVJUCit2b2lkIE1hY3JvQXNzZW1ibGVyOjpwcm9iZShNYWNyb0Fzc2VtYmxlcjo6UHJvYmVG
dW5jdGlvbiBmdW5jdGlvbiwgdm9pZCogYXJnMSwgdm9pZCogYXJnMikKK3sKKyAgICBVTlVTRURf
UEFSQU0oZnVuY3Rpb24pOworICAgIFVOVVNFRF9QQVJBTShhcmcxKTsKKyAgICBVTlVTRURfUEFS
QU0oYXJnMik7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKKyNlbmRpZiAvLyBOb3Qg
aW1wbGVtZW50ZWQgQ1BVCisjZW5kaWYgLy8gVVNFKE1BU01fUFJPQkUpCisKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE1
MDE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNiArNjQsOCBAQCB0eXBlZGVmIE1hY3Jv
QXNzZW1ibGVyU0g0IE1hY3JvQXNzZW1ibGVyCiAKIG5hbWVzcGFjZSBKU0MgewogCitzdHJ1Y3Qg
SklUU3RhY2tGcmFtZTsKKwogY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3Nl
bWJsZXJCYXNlIHsKIHB1YmxpYzoKIApAQCAtODksNiArOTEsNDUgQEAgcHVibGljOgogCiAgICAg
c3RhdGljIGNvbnN0IGRvdWJsZSB0d29Ub1RoZTMyOyAvLyBUaGlzIGlzIHN1cGVyIHVzZWZ1bCBm
b3Igc29tZSBkb3VibGUgY29kZS4KIAorI2lmIFVTRShNQVNNX1BST0JFKQorICAgIHN0cnVjdCBD
UFVTdGF0ZSB7CisgICAgICAgICNkZWZpbmUgREVDTEFSRV9SRUdJU1RFUihfdHlwZSwgX3JlZ05h
bWUpIFwKKyAgICAgICAgICAgIF90eXBlIF9yZWdOYW1lOworICAgICAgICBGT1JfRUFDSF9DUFVf
UkVHSVNURVIoREVDTEFSRV9SRUdJU1RFUikKKyAgICAgICAgI3VuZGVmIERFQ0xBUkVfUkVHSVNU
RVIKKyAgICB9OworCisgICAgc3RydWN0IFByb2JlQ29udGV4dDsKKyAgICB0eXBlZGVmIHZvaWQg
KCpQcm9iZUZ1bmN0aW9uKShzdHJ1Y3QgUHJvYmVDb250ZXh0Kik7CisKKyAgICBzdHJ1Y3QgUHJv
YmVDb250ZXh0IHsKKyAgICAgICAgUHJvYmVGdW5jdGlvbiBwcm9iZUZ1bmN0aW9uOworICAgICAg
ICB2b2lkKiBhcmcxOworICAgICAgICB2b2lkKiBhcmcyOworICAgICAgICBKSVRTdGFja0ZyYW1l
KiBqaXRTdGFja0ZyYW1lOworICAgICAgICBDUFVTdGF0ZSBjcHU7CisKKyAgICAgICAgdm9pZCBk
dW1wKGNvbnN0IGNoYXIqIGluZGVudGF0aW9uID0gMCk7CisgICAgcHJpdmF0ZToKKyAgICAgICAg
dm9pZCBkdW1wQ1BVUmVnaXN0ZXJzKGNvbnN0IGNoYXIqIGluZGVudGF0aW9uKTsKKyAgICB9Owor
CisgICAgLy8gVGhpcyBmdW5jdGlvbiBlbWl0cyBjb2RlIHRvIHByZXNlcnZlIHRoZSBDUFVTdGF0
ZSAoZS5nLiByZWdpc3RlcnMpLAorICAgIC8vIGNhbGwgYSB1c2VyIHN1cHBsaWVkIHByb2JlIGZ1
bmN0aW9uLCBhbmQgcmVzdG9yZSB0aGUgQ1BVU3RhdGUgYmVmb3JlCisgICAgLy8gY29udGludWlu
ZyB3aXRoIG90aGVyIEpJVCBnZW5lcmF0ZWQgY29kZS4KKyAgICAvLworICAgIC8vIFRoZSB1c2Vy
IHN1cHBsaWVkIHByb2JlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggYSBzaW5nbGUgcG9p
bnRlciB0bworICAgIC8vIGEgUHJvYmVDb250ZXh0IHN0cnVjdCAoZGVmaW5lZCBhYm92ZSkgd2hp
Y2ggY29udGFpbnMsIGFtb25nIG90aGVyIHRoaW5ncywKKyAgICAvLyB0aGUgcHJlc2VydmVkIENQ
VVN0YXRlLiBUaGlzIGFsbG93cyB0aGUgdXNlciBwcm9iZSBmdW5jdGlvbiB0byBpbnNwZWN0Cisg
ICAgLy8gdGhlIENQVVN0YXRlIGF0IHRoYXQgcG9pbnQgaW4gdGhlIEpJVCBnZW5lcmF0ZWQgY29k
ZS4KKyAgICAvLworICAgIC8vIFRoZSBQcm9iZUNvbnRleHQgaXMgc3RhY2sgYWxsb2NhdGVkIGFu
ZCBpcyBvbmx5IHZhbGlkIGZvciB0aGUgZHVyYXRpb24KKyAgICAvLyBvZiB0aGUgY2FsbCB0byB0
aGUgdXNlciBwcm9iZSBmdW5jdGlvbi4KKworICAgIHZvaWQgcHJvYmUoUHJvYmVGdW5jdGlvbiwg
dm9pZCogYXJnMSA9IDAsIHZvaWQqIGFyZzIgPSAwKTsKKworI2VuZGlmIC8vIFVTRShNQVNNX1BS
T0JFKQorCiAgICAgLy8gVXRpbGl0aWVzIHVzZWQgYnkgdGhlIERGRyBKSVQuCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjppbnZlcnQ7CkBAIC01NzEs
NyArNjEyLDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
QmFzZTo6YnJhbmNoVGVzdDgoY29uZCwgQWRkcmVzcyhhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zm
c2V0KSwgbWFzayk7CiAgICAgfQotI2Vsc2UKKworI2Vsc2UgLy8gIUNQVShYODZfNjQpCisKICAg
ICB2b2lkIGFkZFB0cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAg
ICAgICAgYWRkNjQoc3JjLCBkZXN0KTsKQEAgLTEwNjcsNyArMTExMCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHN0b3JlNjQoaW1tLmFzVHJ1c3RlZEltbTY0KCksIGRlc3QpOwogICAgIH0KIAot
I2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKEpJVF9DT05TVEFOVF9CTElORElORykKIAogI2VuZGlm
IC8vICFDUFUoWDg2XzY0KQogCkBAIC0xMDc5LDcgKzExMjIsNyBAQCBwdWJsaWM6CiAgICAgICAg
IC8vIERlYnVnIGFsd2F5cyBibGluZCBhbGwgY29uc3RhbnRzLCBpZiBvbmx5IHNvIHdlIGtub3cK
ICAgICAgICAgLy8gaWYgd2UndmUgYnJva2VuIGJsaW5kaW5nIGR1cmluZyBwYXRjaCBkZXZlbG9w
bWVudC4KICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZWxzZQorI2Vsc2UgLy8gRU5BQkxFKEZPUkNF
RF9KSVRfQkxJTkRJTkcpCiAKICAgICAgICAgLy8gRmlyc3Qgb2ZmIHdlJ2xsIHNwZWNpYWwgY2Fz
ZSBjb21tb24sICJzYWZlIiB2YWx1ZXMgdG8gYXZvaWQgaHVydGluZwogICAgICAgICAvLyBwZXJm
b3JtYW5jZSB0b28gbXVjaApAQCAtMTEwMCw3ICsxMTQzLDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHJldHVybiBzaG91bGRCbGluZEZvclNwZWNpZmlj
QXJjaCh2YWx1ZSk7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoRk9SQ0VEX0pJVF9CTElORElO
RykKICAgICB9CiAKICAgICBzdHJ1Y3QgQmxpbmRlZEltbTMyIHsKQEAgLTEyNzEsNyArMTMxNCw3
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3JQb2tl
KGluZGV4KSk7CiAgICAgfQotI2VuZGlmCisjZW5kaWYgLy8gQ1BVKFg4Nl82NCkKICAgICAKICAg
ICB2b2lkIHN0b3JlMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGRlc3QpCiAgICAgewpAQCAtMTI4MCw3
ICsxMzIzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgQmxpbmRlZEltbTMyIGJsaW5kID0geG9y
QmxpbmRDb25zdGFudChpbW0pOwogICAgICAgICAgICAgc3RvcmUzMihibGluZC52YWx1ZTEsIGRl
c3QpOwogICAgICAgICAgICAgeG9yMzIoYmxpbmQudmFsdWUyLCBkZXN0KTsKLSNlbHNlCisjZWxz
ZSAvLyBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQogICAgICAgICAgICAgaWYgKFJlZ2lzdGVySUQg
c2NyYXRjaFJlZ2lzdGVyID0gKFJlZ2lzdGVySUQpc2NyYXRjaFJlZ2lzdGVyRm9yQmxpbmRpbmco
KSkgewogICAgICAgICAgICAgICAgIGxvYWRYb3JCbGluZGVkQ29uc3RhbnQoeG9yQmxpbmRDb25z
dGFudChpbW0pLCBzY3JhdGNoUmVnaXN0ZXIpOwogICAgICAgICAgICAgICAgIHN0b3JlMzIoc2Ny
YXRjaFJlZ2lzdGVyLCBkZXN0KTsKQEAgLTEyOTIsNyArMTMzNSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgbm9wKCk7CiAgICAgICAgICAgICAgICAgc3RvcmUzMihpbW0uYXNUcnVz
dGVkSW1tMzIoKSwgZGVzdCk7CiAgICAgICAgICAgICB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBDUFUo
WDg2KSB8fCBDUFUoWDg2XzY0KQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHN0b3JlMzIo
aW1tLmFzVHJ1c3RlZEltbTMyKCksIGRlc3QpOwogICAgIH0KQEAgLTE0NDAsNyArMTQ4Myw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHVyc2hpZnQzMihzcmMsIHRydXN0ZWRJbW0zMkZvclNo
aWZ0KGFtb3VudCksIGRlc3QpOwogICAgIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShKSVRf
Q09OU1RBTlRfQkxJTkRJTkcpCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24g
MTUwMTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPHN0
ZGludC5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHhtbWludHJpbi5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNzEs
NiArNzIsNDggQEAgbmFtZXNwYWNlIFg4NlJlZ2lzdGVycyB7CiAgICAgICAgIHhtbTYsCiAgICAg
ICAgIHhtbTcsCiAgICAgfSBYTU1SZWdpc3RlcklEOworCisjaWYgVVNFKE1BU01fUFJPQkUpCisg
ICAgI2RlZmluZSBGT1JfRUFDSF9DUFVfUkVHSVNURVIoVikgXAorICAgICAgICBGT1JfRUFDSF9D
UFVfR1BSRUdJU1RFUihWKSBcCisgICAgICAgIEZPUl9FQUNIX0NQVV9GUFJFR0lTVEVSKFYpCisK
KyAgICAjZGVmaW5lIEZPUl9FQUNIX0NQVV9HUFJFR0lTVEVSKFYpIFwKKyAgICAgICAgVih2b2lk
KiwgZWF4KSBcCisgICAgICAgIFYodm9pZCosIGVjeCkgXAorICAgICAgICBWKHZvaWQqLCBlZHgp
IFwKKyAgICAgICAgVih2b2lkKiwgZWJ4KSBcCisgICAgICAgIFYodm9pZCosIGVzcCkgXAorICAg
ICAgICBWKHZvaWQqLCBlYnApIFwKKyAgICAgICAgVih2b2lkKiwgZXNpKSBcCisgICAgICAgIFYo
dm9pZCosIGVkaSkgXAorICAgICAgICBGT1JfRUFDSF9YODZfNjRfQ1BVX0dQUkVHSVNURVIoVikg
XAorICAgICAgICBWKHZvaWQqLCBlaXApCisKKyAgICAjZGVmaW5lIEZPUl9FQUNIX0NQVV9GUFJF
R0lTVEVSKFYpIFwKKyAgICAgICAgVihfX20xMjgsIHhtbTApIFwKKyAgICAgICAgVihfX20xMjgs
IHhtbTEpIFwKKyAgICAgICAgVihfX20xMjgsIHhtbTIpIFwKKyAgICAgICAgVihfX20xMjgsIHht
bTMpIFwKKyAgICAgICAgVihfX20xMjgsIHhtbTQpIFwKKyAgICAgICAgVihfX20xMjgsIHhtbTUp
IFwKKyAgICAgICAgVihfX20xMjgsIHhtbTYpIFwKKyAgICAgICAgVihfX20xMjgsIHhtbTcpCisK
KyNpZiBDUFUoWDg2KQorICAgICNkZWZpbmUgRk9SX0VBQ0hfWDg2XzY0X0NQVV9HUFJFR0lTVEVS
KFYpIC8vIE5vdGhpbmcgdG8gYWRkLgorI2VsaWYgQ1BVKFg4Nl82NCkKKyAgICAjZGVmaW5lIEZP
Ul9FQUNIX1g4Nl82NF9DUFVfR1BSRUdJU1RFUihWKSBcCisgICAgICAgIFYodm9pZCosIHI4KSBc
CisgICAgICAgIFYodm9pZCosIHI5KSBcCisgICAgICAgIFYodm9pZCosIHIxMCkgXAorICAgICAg
ICBWKHZvaWQqLCByMTEpIFwKKyAgICAgICAgVih2b2lkKiwgcjEyKSBcCisgICAgICAgIFYodm9p
ZCosIHIxMykgXAorICAgICAgICBWKHZvaWQqLCByMTQpIFwKKyAgICAgICAgVih2b2lkKiwgcjE1
KQorI2VuZGlmIC8vIENQVShYODZfNjQpCisjZW5kaWYgLy8gVVNFKE1BU01fUFJPQkUpCiB9CiAK
IGNsYXNzIFg4NkFzc2VtYmxlciB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAkocmV2aXNpb24gMTUwMTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxMiBAQAogI2lmIEVOQUJM
RShKSVQpCiAjaW5jbHVkZSAiSklUU3R1YnMuaCIKIAotI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRo
cy5oIgogI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJDb2RlUHJvZmlsaW5nLmgiCisjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5j
bHVkZSAiREZHT1NSRW50cnkuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkV4
Y2VwdGlvbkhlbHBlcnMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJ
KHJldmlzaW9uIDE1MDE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzE4LDYgKzMxOCwxMCBAQCBpbmxpbmUgYm9vbCByZXR1cm5B
ZGRyZXNzSXNJbkN0aVRyYW1wb2xpCiB9CiAjZW5kaWYKIAorI2lmIFVTRShNQVNNX1BST0JFKQor
ZXh0ZXJuICJDIiB2b2lkIGN0aU1hc21Qcm9iZVRyYW1wb2xpbmUoKTsKKyNlbmRpZgorCiB2b2lk
IHBlcmZvcm1QbGF0Zm9ybVNwZWNpZmljSklUQXNzZXJ0aW9ucyhWTSopOwogCiBleHRlcm4gIkMi
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnNYODYuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzWDg2LmgJKHJldmlzaW9u
IDE1MDE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnNYODYuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQAogI2lmbmRlZiBKSVRTdHVic1g4Nl9oCiAjZGVm
aW5lIEpJVFN0dWJzWDg2X2gKIAorI2luY2x1ZGUgIkpJVFN0dWJzWDg2Q29tbW9uLmgiCisKICNp
ZiAhQ1BVKFg4NikKICNlcnJvciAiSklUU3R1YnNYODYuaCBzaG91bGQgb25seSBiZSAjaW5jbHVk
ZWQgaWYgQ1BVKFg4NikiCiAjZW5kaWYKQEAgLTk1LDYgKzk3LDc3IEBAIFNZTUJPTF9TVFJJTkco
Y3RpT3BUaHJvd05vdENhdWdodCkgIjoiICIKICAgICAicmV0IiAiXG4iCiApOwogCisjaWYgVVNF
KE1BU01fUFJPQkUpCithc20gKAorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpTWFzbVByb2Jl
VHJhbXBvbGluZSkgIlxuIgorSElERV9TWU1CT0woY3RpTWFzbVByb2JlVHJhbXBvbGluZSkgIlxu
IgorU1lNQk9MX1NUUklORyhjdGlNYXNtUHJvYmVUcmFtcG9saW5lKSAiOiIgIlxuIgorCisgICAg
Ly8gTWFjcm9Bc3NlbWJsZXI6OnByb2JlKCkgaGFzIGFscmVhZHkgZ2VuZXJhdGVkIGNvZGUgdG8g
c2F2ZS9zdG9yZSB0aGUKKyAgICAvLyB2YWx1ZXMgZm9yIGVheCBhbmQgZXNwIGluIHRoZSBQcm9i
ZUNvbnRleHQuIFNhdmUvc3RvcmUgdGhlIHJlbWFpbmluZworICAgIC8vIHJlZ2lzdGVycyBoZXJl
LgorCisgICAgInBvcGwgJWVheCIgIlxuIgorICAgICJtb3ZsICVlYXgsICIgU1RSSU5HSVpFX1ZB
TFVFX09GKFBST0JFX0NQVV9FSVBfT0ZGU0VUKSAiKCVlc3ApIiAiXG4iCisKKyAgICAibW92bCAl
ZWJ4LCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRUJYX09GRlNFVCkgIiglZXNwKSIg
IlxuIgorICAgICJtb3ZsICVlc3AsICVlYnAiICJcbiIgLy8gU2F2ZSB0aGUgUHJvYmVDb250ZXh0
Ki4KKworICAgICJtb3ZsICVlY3gsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FQ1hf
T0ZGU0VUKSAiKCVlYnApIiAiXG4iCisgICAgIm1vdmwgJWVkeCwgIiBTVFJJTkdJWkVfVkFMVUVf
T0YoUFJPQkVfQ1BVX0VEWF9PRkZTRVQpICIoJWVicCkiICJcbiIKKyAgICAibW92bCAlZWJ4LCAi
IFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRUJYX09GRlNFVCkgIiglZWJwKSIgIlxuIgor
ICAgICJtb3ZsICVlc2ksICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FU0lfT0ZGU0VU
KSAiKCVlYnApIiAiXG4iCisgICAgIm1vdmwgJWVkaSwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJP
QkVfQ1BVX0VESV9PRkZTRVQpICIoJWVicCkiICJcbiIKKworICAgICJtb3ZkcWEgJXhtbTAsICIg
U1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU0wX09GRlNFVCkgIiglZWJwKSIgIlxuIgor
ICAgICJtb3ZkcWEgJXhtbTEsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU0xX09G
RlNFVCkgIiglZWJwKSIgIlxuIgorICAgICJtb3ZkcWEgJXhtbTIsICIgU1RSSU5HSVpFX1ZBTFVF
X09GKFBST0JFX0NQVV9YTU0yX09GRlNFVCkgIiglZWJwKSIgIlxuIgorICAgICJtb3ZkcWEgJXht
bTMsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU0zX09GRlNFVCkgIiglZWJwKSIg
IlxuIgorICAgICJtb3ZkcWEgJXhtbTQsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9Y
TU00X09GRlNFVCkgIiglZWJwKSIgIlxuIgorICAgICJtb3ZkcWEgJXhtbTUsICIgU1RSSU5HSVpF
X1ZBTFVFX09GKFBST0JFX0NQVV9YTU01X09GRlNFVCkgIiglZWJwKSIgIlxuIgorICAgICJtb3Zk
cWEgJXhtbTYsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU02X09GRlNFVCkgIigl
ZWJwKSIgIlxuIgorICAgICJtb3ZkcWEgJXhtbTcsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JF
X0NQVV9YTU03X09GRlNFVCkgIiglZWJwKSIgIlxuIgorCisgICAgIm1vdmwgIiBTVFJJTkdJWkVf
VkFMVUVfT0YoUFJPQkVfQ1BVX0VTUF9PRkZTRVQpICIoJWVicCksICVlYXgiICJcbiIKKyAgICAi
bW92bCAlZWF4LCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9KSVRfU1RBQ0tfRlJBTUVfT0ZG
U0VUKSAiKCVlYnApIiAiXG4iCisKKyAgICAvLyBSZXNlcnZlIHN0YWNrIHNwYWNlIGZvciB0aGUg
YXJnIHdoaWxlIG1haW50YWluaW5nIHRoZSByZXF1aXJlZCBzdGFjaworICAgIC8vIHBvaW50ZXIg
MzIgYnl0ZSBhbGlnbm1lbnQ6CisgICAgInN1YmwgJDB4MjAsICVlc3AiICJcbiIKKyAgICAibW92
bCAlZWJwLCAwKCVlc3ApIiAiXG4iIC8vIHRoZSBQcm9iZUNvbnRleHQqIGFyZy4KKworICAgICJj
YWxsICoiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9QUk9CRV9GVU5DVElPTl9PRkZTRVQpICIo
JWVicCkiICJcbiIKKworICAgIC8vICJSZXN0b3JlIiB0aGUgcmVnaXN0ZXIgdmFsdWVzIGZvciBy
ZXR1cm5pbmcuIE5vdGU6IHRoZSB1c2VyIHByb2JlCisgICAgLy8gZnVuY3Rpb24gbWF5IGhhdmUg
aW50ZW50aW9uYWxseSBjaGFuZ2VkIHRoaXMgdmFsdWVzIGZvciBkZWJ1Z2dpbmcgb3IKKyAgICAv
LyB0ZXN0aW5nIHB1cnBvc2VzLgorCisgICAgIm1vdmwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJP
QkVfQ1BVX0VBWF9PRkZTRVQpICIoJWVicCksICVlYXgiICJcbiIKKyAgICAibW92bCAiIFNUUklO
R0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRUNYX09GRlNFVCkgIiglZWJwKSwgJWVjeCIgIlxuIgor
ICAgICJtb3ZsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FRFhfT0ZGU0VUKSAiKCVl
YnApLCAlZWR4IiAiXG4iCisgICAgIm1vdmwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BV
X0VCWF9PRkZTRVQpICIoJWVicCksICVlYngiICJcbiIKKyAgICAibW92bCAiIFNUUklOR0laRV9W
QUxVRV9PRihQUk9CRV9DUFVfRVNQX09GRlNFVCkgIiglZWJwKSwgJWVzcCIgIlxuIgorICAgICJt
b3ZsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FU0lfT0ZGU0VUKSAiKCVlYnApLCAl
ZXNpIiAiXG4iCisgICAgIm1vdmwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX0VESV9P
RkZTRVQpICIoJWVicCksICVlZGkiICJcbiIKKworICAgICJtb3ZkcWEgIiBTVFJJTkdJWkVfVkFM
VUVfT0YoUFJPQkVfQ1BVX1hNTTBfT0ZGU0VUKSAiKCVlYnApLCAleG1tMCIgIlxuIgorICAgICJt
b3ZkcWEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTFfT0ZGU0VUKSAiKCVlYnAp
LCAleG1tMSIgIlxuIgorICAgICJtb3ZkcWEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BV
X1hNTTJfT0ZGU0VUKSAiKCVlYnApLCAleG1tMiIgIlxuIgorICAgICJtb3ZkcWEgIiBTVFJJTkdJ
WkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTNfT0ZGU0VUKSAiKCVlYnApLCAleG1tMyIgIlxuIgor
ICAgICJtb3ZkcWEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTRfT0ZGU0VUKSAi
KCVlYnApLCAleG1tNCIgIlxuIgorICAgICJtb3ZkcWEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJP
QkVfQ1BVX1hNTTVfT0ZGU0VUKSAiKCVlYnApLCAleG1tNSIgIlxuIgorICAgICJtb3ZkcWEgIiBT
VFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTZfT0ZGU0VUKSAiKCVlYnApLCAleG1tNiIg
IlxuIgorICAgICJtb3ZkcWEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTdfT0ZG
U0VUKSAiKCVlYnApLCAleG1tNyIgIlxuIgorCisgICAgLy8gUmVzdG9yZSB0aGUgcmV0dXJuIGFk
ZHJlc3MgZm9yIHRoZSByZXQgYmVsb3c6CisgICAgInB1c2hsICIgU1RSSU5HSVpFX1ZBTFVFX09G
KFBST0JFX0NQVV9FSVBfT0ZGU0VUKSAiKCVlYnApIiAiXG4iCisKKyAgICAvLyBFdmVyeXRoaW5n
J3MgcmVzdG9yZWQuIExhc3RseSwgcmVzdG9yZSB0aGUgJWVicCwgYW5kIHJldHVybjoKKyAgICAi
bW92bCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRUJQX09GRlNFVCkgIiglZWJwKSwg
JWVicCIgIlxuIgorICAgICJyZXQiICJcbiIKKyk7CisjZW5kaWYgLy8gVVNFKE1BU01fUFJPQkUp
CisKICNlbmRpZiAvLyBDT01QSUxFUihHQ0MpCiAKICNpZiBDT01QSUxFUihNU1ZDKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVic1g4NkNvbW1vbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnNYODZDb21tb24uaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnNYODZDb21tb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpJVFN0dWJzWDg2Q29tbW9uX2gKKyNkZWZp
bmUgSklUU3R1YnNYODZDb21tb25faAorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKwor
I2lmICFDUFUoWDg2KSAmJiAhQ1BVKFg4Nl82NCkKKyNlcnJvciAiSklUU3R1YnNYODZDb21tb24u
aCBzaG91bGQgb25seSBiZSAjaW5jbHVkZWQgaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkiCisj
ZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBDT01QSUxFUihHQ0MpCisKKyNpZiBVU0Uo
TUFTTV9QUk9CRSkKKy8vIFRoZSBmb2xsb3dpbmcgYXJlIG9mZnNldHMgZm9yIE1hY3JvQXNzZW1i
bGVyOjpQcm9iZUNvbnRleHQgZmllbGRzIGFjY2Vzc2VkCisvLyB0aGUgY3RpTWFzbVByb2JlVHJh
bXBvbGluZSBzdHViLgorCisjaWYgQ1BVKFg4NikKKyNkZWZpbmUgUFRSX1NJWkUgNAorI2Vsc2Ug
Ly8gQ1BVKFg4Nl82NCkKKyNkZWZpbmUgUFRSX1NJWkUgOAorI2VuZGlmCisKKyNkZWZpbmUgUFJP
QkVfUFJPQkVfRlVOQ1RJT05fT0ZGU0VUICgwICogUFRSX1NJWkUpCisjZGVmaW5lIFBST0JFX0FS
RzFfT0ZGU0VUICgxICogUFRSX1NJWkUpCisjZGVmaW5lIFBST0JFX0FSRzJfT0ZGU0VUICgyICog
UFRSX1NJWkUpCisjZGVmaW5lIFBST0JFX0pJVF9TVEFDS19GUkFNRV9PRkZTRVQgKDMgKiBQVFJf
U0laRSkKKworI2RlZmluZSBQUk9CRV9DUFVfRUFYX09GRlNFVCAoNCAqIFBUUl9TSVpFKQorI2Rl
ZmluZSBQUk9CRV9DUFVfRUNYX09GRlNFVCAoNSAqIFBUUl9TSVpFKQorI2RlZmluZSBQUk9CRV9D
UFVfRURYX09GRlNFVCAoNiAqIFBUUl9TSVpFKQorI2RlZmluZSBQUk9CRV9DUFVfRUJYX09GRlNF
VCAoNyAqIFBUUl9TSVpFKQorI2RlZmluZSBQUk9CRV9DUFVfRVNQX09GRlNFVCAoOCAqIFBUUl9T
SVpFKQorI2RlZmluZSBQUk9CRV9DUFVfRUJQX09GRlNFVCAoOSAqIFBUUl9TSVpFKQorI2RlZmlu
ZSBQUk9CRV9DUFVfRVNJX09GRlNFVCAoMTAgKiBQVFJfU0laRSkKKyNkZWZpbmUgUFJPQkVfQ1BV
X0VESV9PRkZTRVQgKDExICogUFRSX1NJWkUpCisKKyNpZiBDUFUoWDg2KQorI2RlZmluZSBQUk9C
RV9DUFVfRUlQX09GRlNFVCAoMTIgKiBQVFJfU0laRSkKKyNkZWZpbmUgUFJPQkVfRklSU1RfWE1N
X09GRlNFVCAoMTYgKiBQVFJfU0laRSkgLy8gQWZ0ZXIgcGFkZGluZy4KKyNlbHNlIC8vIENQVShY
ODZfNjQpCisjZGVmaW5lIFBST0JFX0NQVV9SOF9PRkZTRVQgKDEyICogUFRSX1NJWkUpCisjZGVm
aW5lIFBST0JFX0NQVV9SOV9PRkZTRVQgKDEzICogUFRSX1NJWkUpCisjZGVmaW5lIFBST0JFX0NQ
VV9SMTBfT0ZGU0VUICgxNCAqIFBUUl9TSVpFKQorI2RlZmluZSBQUk9CRV9DUFVfUjExX09GRlNF
VCAoMTUgKiBQVFJfU0laRSkKKyNkZWZpbmUgUFJPQkVfQ1BVX1IxMl9PRkZTRVQgKDE2ICogUFRS
X1NJWkUpCisjZGVmaW5lIFBST0JFX0NQVV9SMTNfT0ZGU0VUICgxNyAqIFBUUl9TSVpFKQorI2Rl
ZmluZSBQUk9CRV9DUFVfUjE0X09GRlNFVCAoMTggKiBQVFJfU0laRSkKKyNkZWZpbmUgUFJPQkVf
Q1BVX1IxNV9PRkZTRVQgKDE5ICogUFRSX1NJWkUpCisjZGVmaW5lIFBST0JFX0NQVV9FSVBfT0ZG
U0VUICgyMCAqIFBUUl9TSVpFKQorI2RlZmluZSBQUk9CRV9GSVJTVF9YTU1fT0ZGU0VUICgyMiAq
IFBUUl9TSVpFKSAvLyBBZnRlciBwYWRkaW5nLgorI2VuZGlmIC8vIENQVShYODZfNjQpCisKKyNk
ZWZpbmUgWE1NX1NJWkUgMTYKKyNkZWZpbmUgUFJPQkVfQ1BVX1hNTTBfT0ZGU0VUIChQUk9CRV9G
SVJTVF9YTU1fT0ZGU0VUICsgKDAgKiBYTU1fU0laRSkpCisjZGVmaW5lIFBST0JFX0NQVV9YTU0x
X09GRlNFVCAoUFJPQkVfRklSU1RfWE1NX09GRlNFVCArICgxICogWE1NX1NJWkUpKQorI2RlZmlu
ZSBQUk9CRV9DUFVfWE1NMl9PRkZTRVQgKFBST0JFX0ZJUlNUX1hNTV9PRkZTRVQgKyAoMiAqIFhN
TV9TSVpFKSkKKyNkZWZpbmUgUFJPQkVfQ1BVX1hNTTNfT0ZGU0VUIChQUk9CRV9GSVJTVF9YTU1f
T0ZGU0VUICsgKDMgKiBYTU1fU0laRSkpCisjZGVmaW5lIFBST0JFX0NQVV9YTU00X09GRlNFVCAo
UFJPQkVfRklSU1RfWE1NX09GRlNFVCArICg0ICogWE1NX1NJWkUpKQorI2RlZmluZSBQUk9CRV9D
UFVfWE1NNV9PRkZTRVQgKFBST0JFX0ZJUlNUX1hNTV9PRkZTRVQgKyAoNSAqIFhNTV9TSVpFKSkK
KyNkZWZpbmUgUFJPQkVfQ1BVX1hNTTZfT0ZGU0VUIChQUk9CRV9GSVJTVF9YTU1fT0ZGU0VUICsg
KDYgKiBYTU1fU0laRSkpCisjZGVmaW5lIFBST0JFX0NQVV9YTU03X09GRlNFVCAoUFJPQkVfRklS
U1RfWE1NX09GRlNFVCArICg3ICogWE1NX1NJWkUpKQorCisKKy8vIFRoZXNlIEFTU0VSVHMgcmVt
aW5kIHlvdSB0aGF0IGlmIHlvdSBjaGFuZ2UgdGhlIGxheW91dCBvZiBQcm9iZUNvbnRleHQsCisv
LyB5b3UgbmVlZCB0byBjaGFuZ2UgY3RpTWFzbVByb2JlVHJhbXBvbGluZSBvZmZzZXRzIGFib3Zl
IHRvIG1hdGNoLgorI2RlZmluZSBQUk9CRV9PRkZTRVRPRih4KSBvZmZzZXRvZihzdHJ1Y3QgTWFj
cm9Bc3NlbWJsZXI6OlByb2JlQ29udGV4dCwgeCkKK0NPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNF
VE9GKHByb2JlRnVuY3Rpb24pID09IFBST0JFX1BST0JFX0ZVTkNUSU9OX09GRlNFVCwgUHJvYmVD
b250ZXh0X3Byb2JlRnVuY3Rpb25fb2Zmc2V0X21hdGNoZXNfY3RpTWFzbVByb2JlVHJhbXBvbGlu
ZSk7CitDT01QSUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihhcmcxKSA9PSBQUk9CRV9BUkcxX09G
RlNFVCwgUHJvYmVDb250ZXh0X2FyZzFfb2Zmc2V0X21hdGNoZXNfY3RpTWFzbVByb2JlVHJhbXBv
bGluZSk7CitDT01QSUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihhcmcyKSA9PSBQUk9CRV9BUkcy
X09GRlNFVCwgUHJvYmVDb250ZXh0X2FyZzJfb2Zmc2V0X21hdGNoZXNfY3RpTWFzbVByb2JlVHJh
bXBvbGluZSk7CitDT01QSUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihqaXRTdGFja0ZyYW1lKSA9
PSBQUk9CRV9KSVRfU1RBQ0tfRlJBTUVfT0ZGU0VULCBQcm9iZUNvbnRleHRfaml0U3RhY2tGcmFt
ZV9vZmZzZXRfbWF0Y2hlc19jdGlNYXNtUHJvYmVUcmFtcG9saW5lKTsKKworQ09NUElMRV9BU1NF
UlQoUFJPQkVfT0ZGU0VUT0YoY3B1LmVheCkgPT0gUFJPQkVfQ1BVX0VBWF9PRkZTRVQsIFByb2Jl
Q29udGV4dF9jcHVfZWF4X29mZnNldF9tYXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1wb2xpbmUpOwor
Q09NUElMRV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0YoY3B1LmVjeCkgPT0gUFJPQkVfQ1BVX0VDWF9P
RkZTRVQsIFByb2JlQ29udGV4dF9jcHVfZWN4X29mZnNldF9tYXRjaGVzX2N0aU1hc21Qcm9iZVRy
YW1wb2xpbmUpOworQ09NUElMRV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0YoY3B1LmVkeCkgPT0gUFJP
QkVfQ1BVX0VEWF9PRkZTRVQsIFByb2JlQ29udGV4dF9jcHVfZWR4X29mZnNldF9tYXRjaGVzX2N0
aU1hc21Qcm9iZVRyYW1wb2xpbmUpOworQ09NUElMRV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0YoY3B1
LmVieCkgPT0gUFJPQkVfQ1BVX0VCWF9PRkZTRVQsIFByb2JlQ29udGV4dF9jcHVfZWJ4X29mZnNl
dF9tYXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1wb2xpbmUpOworQ09NUElMRV9BU1NFUlQoUFJPQkVf
T0ZGU0VUT0YoY3B1LmVzcCkgPT0gUFJPQkVfQ1BVX0VTUF9PRkZTRVQsIFByb2JlQ29udGV4dF9j
cHVfZXNwX29mZnNldF9tYXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1wb2xpbmUpOworQ09NUElMRV9B
U1NFUlQoUFJPQkVfT0ZGU0VUT0YoY3B1LmVicCkgPT0gUFJPQkVfQ1BVX0VCUF9PRkZTRVQsIFBy
b2JlQ29udGV4dF9jcHVfZWJwX29mZnNldF9tYXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1wb2xpbmUp
OworQ09NUElMRV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0YoY3B1LmVzaSkgPT0gUFJPQkVfQ1BVX0VT
SV9PRkZTRVQsIFByb2JlQ29udGV4dF9jcHVfZXNpX29mZnNldF9tYXRjaGVzX2N0aU1hc21Qcm9i
ZVRyYW1wb2xpbmUpOworQ09NUElMRV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0YoY3B1LmVkaSkgPT0g
UFJPQkVfQ1BVX0VESV9PRkZTRVQsIFByb2JlQ29udGV4dF9jcHVfZWRpX29mZnNldF9tYXRjaGVz
X2N0aU1hc21Qcm9iZVRyYW1wb2xpbmUpOworCisjaWYgQ1BVKFg4Nl82NCkKK0NPTVBJTEVfQVNT
RVJUKFBST0JFX09GRlNFVE9GKGNwdS5yOCkgPT0gUFJPQkVfQ1BVX1I4X09GRlNFVCwgUHJvYmVD
b250ZXh0X2NwdV9yOF9vZmZzZXRfbWF0Y2hlc19jdGlNYXNtUHJvYmVUcmFtcG9saW5lKTsKK0NP
TVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS5yOSkgPT0gUFJPQkVfQ1BVX1I5X09GRlNF
VCwgUHJvYmVDb250ZXh0X2NwdV9yOV9vZmZzZXRfbWF0Y2hlc19jdGlNYXNtUHJvYmVUcmFtcG9s
aW5lKTsKK0NPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS5yMTApID09IFBST0JFX0NQ
VV9SMTBfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X3IxMF9vZmZzZXRfbWF0Y2hlc19jdGlNYXNt
UHJvYmVUcmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS5yMTEp
ID09IFBST0JFX0NQVV9SMTFfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X3IxMV9vZmZzZXRfbWF0
Y2hlc19jdGlNYXNtUHJvYmVUcmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNF
VE9GKGNwdS5yMTIpID09IFBST0JFX0NQVV9SMTJfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X3Ix
Ml9vZmZzZXRfbWF0Y2hlc19jdGlNYXNtUHJvYmVUcmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJU
KFBST0JFX09GRlNFVE9GKGNwdS5yMTMpID09IFBST0JFX0NQVV9SMTNfT0ZGU0VULCBQcm9iZUNv
bnRleHRfY3B1X3IxM19vZmZzZXRfbWF0Y2hlc19jdGlNYXNtUHJvYmVUcmFtcG9saW5lKTsKK0NP
TVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS5yMTQpID09IFBST0JFX0NQVV9SMTRfT0ZG
U0VULCBQcm9iZUNvbnRleHRfY3B1X3IxNF9vZmZzZXRfbWF0Y2hlc19jdGlNYXNtUHJvYmVUcmFt
cG9saW5lKTsKK0NPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS5yMTUpID09IFBST0JF
X0NQVV9SMTVfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X3IxNV9vZmZzZXRfbWF0Y2hlc19jdGlN
YXNtUHJvYmVUcmFtcG9saW5lKTsKKyNlbmRpZiAvLyBDUFUoWDg2XzY0KQorCitDT01QSUxFX0FT
U0VSVChQUk9CRV9PRkZTRVRPRihjcHUuZWlwKSA9PSBQUk9CRV9DUFVfRUlQX09GRlNFVCwgUHJv
YmVDb250ZXh0X2NwdV9laXBfb2Zmc2V0X21hdGNoZXNfY3RpTWFzbVByb2JlVHJhbXBvbGluZSk7
CisKK0NPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS54bW0wKSA9PSBQUk9CRV9DUFVf
WE1NMF9PRkZTRVQsIFByb2JlQ29udGV4dF9jcHVfeG1tMF9vZmZzZXRfbWF0Y2hlc19jdGlNYXNt
UHJvYmVUcmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS54bW0x
KSA9PSBQUk9CRV9DUFVfWE1NMV9PRkZTRVQsIFByb2JlQ29udGV4dF9jcHVfeG1tMV9vZmZzZXRf
bWF0Y2hlc19jdGlNYXNtUHJvYmVUcmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJUKFBST0JFX09G
RlNFVE9GKGNwdS54bW0yKSA9PSBQUk9CRV9DUFVfWE1NMl9PRkZTRVQsIFByb2JlQ29udGV4dF9j
cHVfeG1tMl9vZmZzZXRfbWF0Y2hlc19jdGlNYXNtUHJvYmVUcmFtcG9saW5lKTsKK0NPTVBJTEVf
QVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS54bW0zKSA9PSBQUk9CRV9DUFVfWE1NM19PRkZTRVQs
IFByb2JlQ29udGV4dF9jcHVfeG1tM19vZmZzZXRfbWF0Y2hlc19jdGlNYXNtUHJvYmVUcmFtcG9s
aW5lKTsKK0NPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS54bW00KSA9PSBQUk9CRV9D
UFVfWE1NNF9PRkZTRVQsIFByb2JlQ29udGV4dF9jcHVfeG1tNF9vZmZzZXRfbWF0Y2hlc19jdGlN
YXNtUHJvYmVUcmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS54
bW01KSA9PSBQUk9CRV9DUFVfWE1NNV9PRkZTRVQsIFByb2JlQ29udGV4dF9jcHVfeG1tNV9vZmZz
ZXRfbWF0Y2hlc19jdGlNYXNtUHJvYmVUcmFtcG9saW5lKTsKK0NPTVBJTEVfQVNTRVJUKFBST0JF
X09GRlNFVE9GKGNwdS54bW02KSA9PSBQUk9CRV9DUFVfWE1NNl9PRkZTRVQsIFByb2JlQ29udGV4
dF9jcHVfeG1tNl9vZmZzZXRfbWF0Y2hlc19jdGlNYXNtUHJvYmVUcmFtcG9saW5lKTsKK0NPTVBJ
TEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS54bW03KSA9PSBQUk9CRV9DUFVfWE1NN19PRkZT
RVQsIFByb2JlQ29udGV4dF9jcHVfeG1tN19vZmZzZXRfbWF0Y2hlc19jdGlNYXNtUHJvYmVUcmFt
cG9saW5lKTsKKworLy8gQWxzbyBkb3VibGUgY2hlY2sgdGhhdCB0aGUgeG1tIHJlZ2lzdGVycyBh
cmUgMTYgYnl0ZSAoMTI4LWJpdCkgYWxpZ25lZCBhcworLy8gcmVxdWlyZWQgYnkgdGhlIG1vdmRx
YSBpbnN0cnVjdGlvbiB1c2VkIGluIHRoZSB0cmFtcG9saW5lLgorQ09NUElMRV9BU1NFUlQoIShQ
Uk9CRV9PRkZTRVRPRihjcHUueG1tMCkgJSAxNiksIFByb2JlQ29udGV4dF94bW0wX29mZnNldF9u
b3RfYWxpZ25lZF9wcm9wZXJseSk7CisjdW5kZWYgUFJPQkVfT0ZGU0VUT0YKKworI2VuZGlmIC8v
IFVTRShNQVNNX1BST0JFKQorCisjZW5kaWYgLy8gQ09NUElMRVIoR0NDKQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEpJVFN0dWJzWDg2Q29tbW9uCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzWDg2XzY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVic1g4Nl82NC5oCShyZXZpc2lvbiAxNTAxNTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzWDg2XzY0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDggQEAKICNpZm5kZWYgSklUU3R1YnNYODZfNjRfaAogI2RlZmluZSBKSVRT
dHVic1g4Nl82NF9oCiAKKyNpbmNsdWRlICJKSVRTdHVic1g4NkNvbW1vbi5oIgorCiAjaWYgIUNQ
VShYODZfNjQpCiAjZXJyb3IgIkpJVFN0dWJzWDg2XzY0Lmggc2hvdWxkIG9ubHkgYmUgI2luY2x1
ZGVkIGlmIENQVShYODZfNjQpIgogI2VuZGlmCkBAIC0xMTAsNiArMTEyLDkxIEBAIFNZTUJPTF9T
VFJJTkcoY3RpT3BUaHJvd05vdENhdWdodCkgIjoiICIKICAgICAicmV0IiAiXG4iCiApOwogCisj
aWYgVVNFKE1BU01fUFJPQkUpCithc20gKAorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpTWFz
bVByb2JlVHJhbXBvbGluZSkgIlxuIgorSElERV9TWU1CT0woY3RpTWFzbVByb2JlVHJhbXBvbGlu
ZSkgIlxuIgorU1lNQk9MX1NUUklORyhjdGlNYXNtUHJvYmVUcmFtcG9saW5lKSAiOiIgIlxuIgor
CisgICAgLy8gTWFjcm9Bc3NlbWJsZXI6OnByb2JlKCkgaGFzIGFscmVhZHkgZ2VuZXJhdGVkIGNv
ZGUgdG8gc2F2ZS9zdG9yZSB0aGUKKyAgICAvLyB2YWx1ZXMgZm9yIHJheCBhbmQgcnNwIGluIHRo
ZSBQcm9iZUNvbnRleHQuIFNhdmUvc3RvcmUgdGhlIHJlbWFpbmluZworICAgIC8vIHJlZ2lzdGVy
cyBoZXJlLgorCisgICAgInBvcHEgJXJheCIgIlxuIgorICAgICJtb3ZxICVyYXgsICIgU1RSSU5H
SVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FSVBfT0ZGU0VUKSAiKCVyc3ApIiAiXG4iCisKKyAgICAi
bW92bCAlcmJ4LCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRUJYX09GRlNFVCkgIigl
cnNwKSIgIlxuIgorICAgICJtb3ZsICVyc3AsICVyYnAiICJcbiIgLy8gU2F2ZSB0aGUgUHJvYmVD
b250ZXh0Ki4KKworICAgICJtb3ZxICVyY3gsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQ
VV9FQ1hfT0ZGU0VUKSAiKCVyYnApIiAiXG4iCisgICAgIm1vdnEgJXJkeCwgIiBTVFJJTkdJWkVf
VkFMVUVfT0YoUFJPQkVfQ1BVX0VEWF9PRkZTRVQpICIoJXJicCkiICJcbiIKKyAgICAibW92cSAl
cmJ4LCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRUJYX09GRlNFVCkgIiglcmJwKSIg
IlxuIgorICAgICJtb3ZxICVyc2ksICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FU0lf
T0ZGU0VUKSAiKCVyYnApIiAiXG4iCisgICAgIm1vdnEgJXJkaSwgIiBTVFJJTkdJWkVfVkFMVUVf
T0YoUFJPQkVfQ1BVX0VESV9PRkZTRVQpICIoJXJicCkiICJcbiIKKworICAgICJtb3ZxICVyOCwg
IiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1I4X09GRlNFVCkgIiglcmJwKSIgIlxuIgor
ICAgICJtb3ZxICVyOSwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1I5X09GRlNFVCkg
IiglcmJwKSIgIlxuIgorICAgICJtb3ZxICVyMTAsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JF
X0NQVV9SMTBfT0ZGU0VUKSAiKCVyYnApIiAiXG4iCisgICAgIm1vdnEgJXIxMSwgIiBTVFJJTkdJ
WkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1IxMV9PRkZTRVQpICIoJXJicCkiICJcbiIKKyAgICAibW92
cSAlcjEyLCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfUjEyX09GRlNFVCkgIiglcmJw
KSIgIlxuIgorICAgICJtb3ZxICVyMTMsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9S
MTNfT0ZGU0VUKSAiKCVyYnApIiAiXG4iCisgICAgIm1vdnEgJXIxNCwgIiBTVFJJTkdJWkVfVkFM
VUVfT0YoUFJPQkVfQ1BVX1IxNF9PRkZTRVQpICIoJXJicCkiICJcbiIKKyAgICAibW92cSAlcjE1
LCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfUjE1X09GRlNFVCkgIiglcmJwKSIgIlxu
IgorCisgICAgIm1vdmRxYSAleG1tMCwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hN
TTBfT0ZGU0VUKSAiKCVyYnApIiAiXG4iCisgICAgIm1vdmRxYSAleG1tMSwgIiBTVFJJTkdJWkVf
VkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTFfT0ZGU0VUKSAiKCVyYnApIiAiXG4iCisgICAgIm1vdmRx
YSAleG1tMiwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTJfT0ZGU0VUKSAiKCVy
YnApIiAiXG4iCisgICAgIm1vdmRxYSAleG1tMywgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVf
Q1BVX1hNTTNfT0ZGU0VUKSAiKCVyYnApIiAiXG4iCisgICAgIm1vdmRxYSAleG1tNCwgIiBTVFJJ
TkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTRfT0ZGU0VUKSAiKCVyYnApIiAiXG4iCisgICAg
Im1vdmRxYSAleG1tNSwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTVfT0ZGU0VU
KSAiKCVyYnApIiAiXG4iCisgICAgIm1vdmRxYSAleG1tNiwgIiBTVFJJTkdJWkVfVkFMVUVfT0Yo
UFJPQkVfQ1BVX1hNTTZfT0ZGU0VUKSAiKCVyYnApIiAiXG4iCisgICAgIm1vdmRxYSAleG1tNywg
IiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTdfT0ZGU0VUKSAiKCVyYnApIiAiXG4i
CisKKyAgICAibW92cSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRVNQX09GRlNFVCkg
IiglcmJwKSwgJXJheCIgIlxuIgorICAgICJtb3ZxICVyYXgsICIgU1RSSU5HSVpFX1ZBTFVFX09G
KFBST0JFX0pJVF9TVEFDS19GUkFNRV9PRkZTRVQpICIoJXJicCkiICJcbiIKKworICAgICJtb3Zx
ICVyYnAsICVyZGkiICJcbiIgLy8gdGhlIFByb2JlQ29udGV4dCogYXJnLgorICAgICJjYWxsICoi
IFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9QUk9CRV9GVU5DVElPTl9PRkZTRVQpICIoJXJicCki
ICJcbiIKKworICAgIC8vICJSZXN0b3JlIiB0aGUgcmVnaXN0ZXIgdmFsdWVzIGZvciByZXR1cm5p
bmcuIE5vdGU6IHRoZSB1c2VyIHByb2JlCisgICAgLy8gZnVuY3Rpb24gbWF5IGhhdmUgaW50ZW50
aW9uYWxseSBjaGFuZ2VkIHRoaXMgdmFsdWVzIGZvciBkZWJ1Z2dpbmcgb3IKKyAgICAvLyB0ZXN0
aW5nIHB1cnBvc2VzLgorCisgICAgIm1vdnEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BV
X0VBWF9PRkZTRVQpICIoJXJicCksICVyYXgiICJcbiIKKyAgICAibW92cSAiIFNUUklOR0laRV9W
QUxVRV9PRihQUk9CRV9DUFVfRUNYX09GRlNFVCkgIiglcmJwKSwgJXJjeCIgIlxuIgorICAgICJt
b3ZxICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FRFhfT0ZGU0VUKSAiKCVyYnApLCAl
cmR4IiAiXG4iCisgICAgIm1vdnEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX0VCWF9P
RkZTRVQpICIoJXJicCksICVyYngiICJcbiIKKyAgICAibW92cSAiIFNUUklOR0laRV9WQUxVRV9P
RihQUk9CRV9DUFVfRVNQX09GRlNFVCkgIiglcmJwKSwgJXJzcCIgIlxuIgorICAgICJtb3ZxICIg
U1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FU0lfT0ZGU0VUKSAiKCVyYnApLCAlcnNpIiAi
XG4iCisgICAgIm1vdnEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX0VESV9PRkZTRVQp
ICIoJXJicCksICVyZGkiICJcbiIKKworICAgICJtb3ZxICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBS
T0JFX0NQVV9SOF9PRkZTRVQpICIoJXJicCksICVyOCIgIlxuIgorICAgICJtb3ZxICIgU1RSSU5H
SVpFX1ZBTFVFX09GKFBST0JFX0NQVV9SOV9PRkZTRVQpICIoJXJicCksICVyOSIgIlxuIgorICAg
ICJtb3ZxICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9SMTBfT0ZGU0VUKSAiKCVyYnAp
LCAlcjEwIiAiXG4iCisgICAgIm1vdnEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1Ix
MV9PRkZTRVQpICIoJXJicCksICVyMTEiICJcbiIKKyAgICAibW92cSAiIFNUUklOR0laRV9WQUxV
RV9PRihQUk9CRV9DUFVfUjEyX09GRlNFVCkgIiglcmJwKSwgJXIxMiIgIlxuIgorICAgICJtb3Zx
ICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9SMTNfT0ZGU0VUKSAiKCVyYnApLCAlcjEz
IiAiXG4iCisgICAgIm1vdnEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1IxNF9PRkZT
RVQpICIoJXJicCksICVyMTQiICJcbiIKKyAgICAibW92cSAiIFNUUklOR0laRV9WQUxVRV9PRihQ
Uk9CRV9DUFVfUjE1X09GRlNFVCkgIiglcmJwKSwgJXIxNSIgIlxuIgorCisgICAgIm1vdmRxYSAi
IFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NMF9PRkZTRVQpICIoJXJicCksICV4bW0w
IiAiXG4iCisgICAgIm1vdmRxYSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NMV9P
RkZTRVQpICIoJXJicCksICV4bW0xIiAiXG4iCisgICAgIm1vdmRxYSAiIFNUUklOR0laRV9WQUxV
RV9PRihQUk9CRV9DUFVfWE1NMl9PRkZTRVQpICIoJXJicCksICV4bW0yIiAiXG4iCisgICAgIm1v
dmRxYSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NM19PRkZTRVQpICIoJXJicCks
ICV4bW0zIiAiXG4iCisgICAgIm1vdmRxYSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVf
WE1NNF9PRkZTRVQpICIoJXJicCksICV4bW00IiAiXG4iCisgICAgIm1vdmRxYSAiIFNUUklOR0la
RV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NNV9PRkZTRVQpICIoJXJicCksICV4bW01IiAiXG4iCisg
ICAgIm1vdmRxYSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NNl9PRkZTRVQpICIo
JXJicCksICV4bW02IiAiXG4iCisgICAgIm1vdmRxYSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9C
RV9DUFVfWE1NN19PRkZTRVQpICIoJXJicCksICV4bW03IiAiXG4iCisKKyAgICAvLyBSZXN0b3Jl
IHRoZSByZXR1cm4gYWRkcmVzcyBmb3IgdGhlIHJldCBiZWxvdzoKKyAgICAicHVzaHEgIiBTVFJJ
TkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX0VJUF9PRkZTRVQpICIoJXJicCkiICJcbiIKKworICAg
IC8vIEV2ZXJ5dGhpbmcncyByZXN0b3JlZC4gTGFzdGx5LCByZXN0b3JlIHRoZSAlcmJwLCBhbmQg
cmV0dXJuOgorICAgICJtb3ZxICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9FQlBfT0ZG
U0VUKSAiKCVyYnApLCAlcmJwIiAiXG4iCisgICAgInJldCIgIlxuIgorKTsKKyNlbmRpZiAvLyBV
U0UoTUFTTV9QUk9CRSkKKwogI2VuZGlmIC8vIENPTVBJTEVSKEdDQykKIAogI2lmIENPTVBJTEVS
KE1TVkMpCg==
</data>
<flag name="review"
          id="223270"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>