<?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>75564</bug_id>
          
          <creation_ts>2012-01-04 12:52:36 -0800</creation_ts>
          <short_desc>ConvolverNode should not incur processing latency</short_desc>
          <delta_ts>2012-03-21 11:17:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Audio</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>
          
          <blocked>80255</blocked>
    
    <blocked>80256</blocked>
    
    <blocked>81806</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Rogers">crogers</reporter>
          <assigned_to name="Chris Rogers">crogers</assigned_to>
          <cc>crogers</cc>
    
    <cc>jer.noble</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xingnan.wang</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>529685</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-04 12:52:36 -0800</bug_when>
    <thetext>Currently the ConvolverNode in the Web Audio API incurs a 128 sample-frame processing latency.
This corresponds to around 3ms at a 44.1KHz sample-rate.  For many/most applications this small latency is
not noticeable because the impulse response is often set to a &quot;room-effect&quot; which itself involves substantial
amounts of delays/reflections/diffusion.  However, for some technical uses of convolution (e.g. linear-phase
crossover filters) this extra delay becomes problematic.

The current implementation uses FFTs everywhere.  To achieve zero latency, the leading portion of the
impulse response can be handled with &quot;direct&quot; convolution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564855</commentid>
    <comment_count>1</comment_count>
      <attachid>128848</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-24 21:18:57 -0800</bug_when>
    <thetext>Created attachment 128848
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566140</commentid>
    <comment_count>2</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-27 17:05:00 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=128848) [details]
&gt; Patch

Provide a fix for the latency issue of ConvolverNode. Please review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566221</commentid>
    <comment_count>3</comment_count>
      <attachid>128848</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-27 18:11:05 -0800</bug_when>
    <thetext>Comment on attachment 128848
Patch

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

Great patch!  I&apos;m surprised somebody has gotten to this so quickly.

&gt; Source/WebCore/WebCore.gypi:2865
&gt; +            &apos;platform/audio/DirectConvolver.h&apos;,

You&apos;ll also need to add these files to the GTK makefile:
WebCore/GNUmakefile.list.am

and to the &quot;mac&quot; port build file (do you have a Macintosh with Xcode?  If not I can help you with that part of the patch):
WebCore/WebCore.xcodeproj

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:2
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.

2010 -&gt; 2012

You may wish to use Intel&apos;s version of the copyright file...

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:43
&gt; +DirectConvolver::DirectConvolver(size_t convolveSize)

Could we instead pass in &quot;kernelSize&quot;

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:45
&gt; +    , m_inputBuffer(convolveSize)

And then initialize these two as (2 * kernelSize)

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:46
&gt; +    , m_lastOverlapBuffer(convolveSize / 2)

and this one as &quot;kernelSize&quot;

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:51
&gt; +{

Could you please add an ASSERT (and early return if fail) checking for framesToProcess matching the correct size according to your comment in the header file:
// Only support convolveSize = 2 * framesToProcess

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:52
&gt; +    int kernelSize = convolveKernel-&gt;size();

Should add ASSERT that (kernelSize == m_kernelSize) (assuming we change the constructor as I recommend above)

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:54
&gt; +    int halfSize = m_convolveSize / 2;

I think we can get rid of this variable &quot;halfSize&quot; and simply use kernelSize

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:60
&gt; +    // kernelSize must equal to halfSize here.

Can get rid of this check if we add something similar above as I recommend

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:61
&gt; +    // FIXME: Better solution is needed for variable kernelSize.

can remove FIXME if you simply use kernelSize (and get rid of halfSize)

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:70
&gt; +    for (int i = 0; i &lt; halfSize; i++) {

Could you do some basic scalar optimization here?  For example loop unrolling similar in style to SincResampler.cpp

                if (n == 32) {
                    CONVOLVE_ONE_SAMPLE // 1
                    CONVOLVE_ONE_SAMPLE // 2
                    CONVOLVE_ONE_SAMPLE // 3
                    CONVOLVE_ONE_SAMPLE // 4
                ...

Don&apos;t worry about SSE -- for that can add a FIXME

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:85
&gt; +    for (int i = 0; i &lt; halfSize; i++) {

Same comment as above about basic scalar optimization -- loop unrolling

&gt; Source/WebCore/platform/audio/DirectConvolver.h:2
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.

Same comment about copyright header as before

&gt; Source/WebCore/platform/audio/DirectConvolver.h:39
&gt; +    DirectConvolver(size_t convolveSize);

I recommend you pass in &quot;kernelSize&quot; as I mention in the .cpp file

&gt; Source/WebCore/platform/audio/DirectConvolver.h:45
&gt; +    size_t convolveSize() const { return m_convolveSize; }

I&apos;d change this method to &quot;kernelSize()&quot;

&gt; Source/WebCore/platform/audio/DirectConvolver.h:48
&gt; +    size_t m_convolveSize;

m_kernelSize</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566474</commentid>
    <comment_count>4</comment_count>
      <attachid>129211</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-28 00:52:25 -0800</bug_when>
    <thetext>Created attachment 129211
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566494</commentid>
    <comment_count>5</comment_count>
      <attachid>128848</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-28 01:24:50 -0800</bug_when>
    <thetext>Comment on attachment 128848
Patch

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

&gt;&gt; Source/WebCore/WebCore.gypi:2865
&gt;&gt; +            &apos;platform/audio/DirectConvolver.h&apos;,
&gt; 
&gt; You&apos;ll also need to add these files to the GTK makefile:
&gt; WebCore/GNUmakefile.list.am
&gt; 
&gt; and to the &quot;mac&quot; port build file (do you have a Macintosh with Xcode?  If not I can help you with that part of the patch):
&gt; WebCore/WebCore.xcodeproj

Add files to WebCore/GNUmakefile.list.am.

I don`t have Macintosh now, maybe I will get one in one or two months.
So it`s very nice if you can help add the mac part, thank you.

&gt;&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:2
&gt;&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; 
&gt; 2010 -&gt; 2012
&gt; 
&gt; You may wish to use Intel&apos;s version of the copyright file...

Done.

&gt;&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:43
&gt;&gt; +DirectConvolver::DirectConvolver(size_t convolveSize)
&gt; 
&gt; Could we instead pass in &quot;kernelSize&quot;

Done.

&gt;&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:45
&gt;&gt; +    , m_inputBuffer(convolveSize)
&gt; 
&gt; And then initialize these two as (2 * kernelSize)

Done.

&gt;&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:46
&gt;&gt; +    , m_lastOverlapBuffer(convolveSize / 2)
&gt; 
&gt; and this one as &quot;kernelSize&quot;

Done.

&gt;&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:51
&gt;&gt; +{
&gt; 
&gt; Could you please add an ASSERT (and early return if fail) checking for framesToProcess matching the correct size according to your comment in the header file:
&gt; // Only support convolveSize = 2 * framesToProcess

Done.

&gt;&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:60
&gt;&gt; +    // kernelSize must equal to halfSize here.
&gt; 
&gt; Can get rid of this check if we add something similar above as I recommend

Done.

&gt;&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:70
&gt;&gt; +    for (int i = 0; i &lt; halfSize; i++) {
&gt; 
&gt; Could you do some basic scalar optimization here?  For example loop unrolling similar in style to SincResampler.cpp
&gt; 
&gt;                 if (n == 32) {
&gt;                     CONVOLVE_ONE_SAMPLE // 1
&gt;                     CONVOLVE_ONE_SAMPLE // 2
&gt;                     CONVOLVE_ONE_SAMPLE // 3
&gt;                     CONVOLVE_ONE_SAMPLE // 4
&gt;                 ...
&gt; 
&gt; Don&apos;t worry about SSE -- for that can add a FIXME

Added FIXME about SSE optimization.
Also added FIXME about IPP optimization.

&gt;&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:85
&gt;&gt; +    for (int i = 0; i &lt; halfSize; i++) {
&gt; 
&gt; Same comment as above about basic scalar optimization -- loop unrolling

Done.

&gt;&gt; Source/WebCore/platform/audio/DirectConvolver.h:2
&gt;&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; 
&gt; Same comment about copyright header as before

Done.

&gt;&gt; Source/WebCore/platform/audio/DirectConvolver.h:39
&gt;&gt; +    DirectConvolver(size_t convolveSize);
&gt; 
&gt; I recommend you pass in &quot;kernelSize&quot; as I mention in the .cpp file

Done.

&gt;&gt; Source/WebCore/platform/audio/DirectConvolver.h:45
&gt;&gt; +    size_t convolveSize() const { return m_convolveSize; }
&gt; 
&gt; I&apos;d change this method to &quot;kernelSize()&quot;

Done.

&gt;&gt; Source/WebCore/platform/audio/DirectConvolver.h:48
&gt;&gt; +    size_t m_convolveSize;
&gt; 
&gt; m_kernelSize

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566508</commentid>
    <comment_count>6</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-28 01:54:08 -0800</bug_when>
    <thetext>Chris,

I have a question about the performance test.
It seems that there is not any benchmark for the web audio(maybe there is but I didn`t find it), but it`s truly needed a way to measure the improvement or optimization of web audio. For some simple scenarios(like SSE optimization of the vector-math) it may be enough to count the functions` executing time. But for more complicated scenarios(like measure the convolution effect) we may need some test cases or typical app examples to measure the cpu usage, memory consuming, the latency or other aspects, right?
And I want to know how do you do the performance test? Whether some methods or cases could be shared?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568071</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-29 16:18:53 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Chris,
&gt; 
&gt; I have a question about the performance test.
&gt; It seems that there is not any benchmark for the web audio(maybe there is but I didn`t find it), but it`s truly needed a way to measure the improvement or optimization of web audio. For some simple scenarios(like SSE optimization of the vector-math) it may be enough to count the functions` executing time. But for more complicated scenarios(like measure the convolution effect) we may need some test cases or typical app examples to measure the cpu usage, memory consuming, the latency or other aspects, right?
&gt; And I want to know how do you do the performance test? Whether some methods or cases could be shared?

Xingnan, that is a very good question.  I think the best thing we could do is add some extra powers to the layout test tool (DumpRenderTree) so that it is able to measure the total time spent in rendering in an OfflineAudioContext (please see the while() loop in OfflineAudioDestinationNode::render())
There are people in the chromium project who are now looking into high-resolution timers:
Mac OS X: mach_absolute_time() 
Windows: QueryPerformanceCounter()???
Linux: ??? 

Currently (as far as I know) WebKit doesn&apos;t have proper high-resolution timers as an abstraction...

If we did,  we can measure the start time and end time of rendering in a specific test.  I&apos;m not quite sure how easy it would be to add these tests as part of the automated testing system, since these tests run on a wide variety of hardware and operating systems.  Some of the testing bots even run in virtual machines!!
But, still we could have the tests available to be run manually by real humans to help test these types of performance improvements (given a specific machine with specific exact hardware)...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568104</commentid>
    <comment_count>8</comment_count>
      <attachid>129211</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-29 16:55:42 -0800</bug_when>
    <thetext>Comment on attachment 129211
Patch

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

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:79
&gt; +#define FIRST_HALF_CONVOLVE_ONE_SAMPLE          \

The macros and loops are &quot;inside-out&quot;

I think you&apos;re going to have to reverse these macros so that there is no loop 81:82 inside here, but instead there&apos;s a loop (to generate each destination sample).
Something like this:

for (size_t i = 0; i &lt; framesToProcess; ++i) {
   sum = 0;
   CONVOLVE_ONE_SAMPLE;
   CONVOLVE_ONE_SAMPLE;
   CONVOLVE_ONE_SAMPLE;
   CONVOLVE_ONE_SAMPLE;
   // ....

   *destP++ = sum;
}

Please see SincResampler for the general idea.

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:243
&gt; +#define SECOND_HALF_CONVOLVE_ONE_SAMPLE                                  \

ditto: see above comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568361</commentid>
    <comment_count>9</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-29 22:46:06 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; Chris,
&gt; &gt; 
&gt; &gt; I have a question about the performance test.
&gt; &gt; It seems that there is not any benchmark for the web audio(maybe there is but I didn`t find it), but it`s truly needed a way to measure the improvement or optimization of web audio. For some simple scenarios(like SSE optimization of the vector-math) it may be enough to count the functions` executing time. But for more complicated scenarios(like measure the convolution effect) we may need some test cases or typical app examples to measure the cpu usage, memory consuming, the latency or other aspects, right?
&gt; &gt; And I want to know how do you do the performance test? Whether some methods or cases could be shared?
&gt; 
&gt; Xingnan, that is a very good question.  I think the best thing we could do is add some extra powers to the layout test tool (DumpRenderTree) so that it is able to measure the total time spent in rendering in an OfflineAudioContext (please see the while() loop in OfflineAudioDestinationNode::render())
&gt; There are people in the chromium project who are now looking into high-resolution timers:
&gt; Mac OS X: mach_absolute_time() 
&gt; Windows: QueryPerformanceCounter()???
&gt; Linux: ??? 
&gt; 
&gt; Currently (as far as I know) WebKit doesn&apos;t have proper high-resolution timers as an abstraction...
&gt; 
&gt; If we did,  we can measure the start time and end time of rendering in a specific test.  I&apos;m not quite sure how easy it would be to add these tests as part of the automated testing system, since these tests run on a wide variety of hardware and operating systems.  Some of the testing bots even run in virtual machines!!
&gt; But, still we could have the tests available to be run manually by real humans to help test these types of performance improvements (given a specific machine with specific exact hardware)...

Chris, great thanks for your answer and it`s really helpful for my performance test. Hope such tests could be in layout test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568362</commentid>
    <comment_count>10</comment_count>
      <attachid>129211</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-29 22:54:08 -0800</bug_when>
    <thetext>Comment on attachment 129211
Patch

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

&gt;&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:79
&gt;&gt; +#define FIRST_HALF_CONVOLVE_ONE_SAMPLE          \
&gt; 
&gt; The macros and loops are &quot;inside-out&quot;
&gt; 
&gt; I think you&apos;re going to have to reverse these macros so that there is no loop 81:82 inside here, but instead there&apos;s a loop (to generate each destination sample).
&gt; Something like this:
&gt; 
&gt; for (size_t i = 0; i &lt; framesToProcess; ++i) {
&gt;    sum = 0;
&gt;    CONVOLVE_ONE_SAMPLE;
&gt;    CONVOLVE_ONE_SAMPLE;
&gt;    CONVOLVE_ONE_SAMPLE;
&gt;    CONVOLVE_ONE_SAMPLE;
&gt;    // ....
&gt; 
&gt;    *destP++ = sum;
&gt; }
&gt; 
&gt; Please see SincResampler for the general idea.

It seems the case here is a little different from in SincResampler.
If we want to unroll the inner loop, it must have a fixed loop count. But In DirectConvolver the loop count is variable with i. I`m not sure whether we can unroll here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568373</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-29 23:19:48 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 129211 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129211&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:79
&gt; &gt;&gt; +#define FIRST_HALF_CONVOLVE_ONE_SAMPLE          \
&gt; &gt; 
&gt; &gt; The macros and loops are &quot;inside-out&quot;
&gt; &gt; 
&gt; &gt; I think you&apos;re going to have to reverse these macros so that there is no loop 81:82 inside here, but instead there&apos;s a loop (to generate each destination sample).
&gt; &gt; Something like this:
&gt; &gt; 
&gt; &gt; for (size_t i = 0; i &lt; framesToProcess; ++i) {
&gt; &gt;    sum = 0;
&gt; &gt;    CONVOLVE_ONE_SAMPLE;
&gt; &gt;    CONVOLVE_ONE_SAMPLE;
&gt; &gt;    CONVOLVE_ONE_SAMPLE;
&gt; &gt;    CONVOLVE_ONE_SAMPLE;
&gt; &gt;    // ....
&gt; &gt; 
&gt; &gt;    *destP++ = sum;
&gt; &gt; }
&gt; &gt; 
&gt; &gt; Please see SincResampler for the general idea.
&gt; 
&gt; It seems the case here is a little different from in SincResampler.
&gt; If we want to unroll the inner loop, it must have a fixed loop count. But In DirectConvolver the loop count is variable with i. I`m not sure whether we can unroll here?

I&apos;m quite sure it can be done.  Look at SincResampler where specific cases are hard-coded:

if (n == 32) {
   ...
} else if (n == 64) {
   ...
} else {
}

I believe the case we specially want to optimize is 128.  Generally, the kernelSize and the framesToProcess will often both be 128, so should be easy to special-case that.

Actually, in a way, the SincResampler code is just a more complex version of how the DirectConvolver could be coded.  If you look at how the CONVOLVE_ONE_SAMPLE macro is defined in SincResampler it actually has to accumulate two sums (sum1, sum2) then later it effectively performs a linear interpolation between these two.  But DirectConvolver can have a similar macro accumulating just a single sum...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568432</commentid>
    <comment_count>12</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-01 00:24:08 -0800</bug_when>
    <thetext>Chris,
Here I get another question about SincResampler.
Does the current the layout tests cover the SincResampler?
I am now investigating whether the IPP can be used to optimize the SincResampler, also do you think it`s valuable to do such optimization or whether the SincResampler is hot enough and needs this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568433</commentid>
    <comment_count>13</comment_count>
      <attachid>129211</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-01 00:25:16 -0800</bug_when>
    <thetext>Comment on attachment 129211
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:79
&gt;&gt;&gt;&gt; +#define FIRST_HALF_CONVOLVE_ONE_SAMPLE          \
&gt;&gt;&gt; 
&gt;&gt;&gt; The macros and loops are &quot;inside-out&quot;
&gt;&gt;&gt; 
&gt;&gt;&gt; I think you&apos;re going to have to reverse these macros so that there is no loop 81:82 inside here, but instead there&apos;s a loop (to generate each destination sample).
&gt;&gt;&gt; Something like this:
&gt;&gt;&gt; 
&gt;&gt;&gt; for (size_t i = 0; i &lt; framesToProcess; ++i) {
&gt;&gt;&gt;    sum = 0;
&gt;&gt;&gt;    CONVOLVE_ONE_SAMPLE;
&gt;&gt;&gt;    CONVOLVE_ONE_SAMPLE;
&gt;&gt;&gt;    CONVOLVE_ONE_SAMPLE;
&gt;&gt;&gt;    CONVOLVE_ONE_SAMPLE;
&gt;&gt;&gt;    // ....
&gt;&gt;&gt; 
&gt;&gt;&gt;    *destP++ = sum;
&gt;&gt;&gt; }
&gt;&gt;&gt; 
&gt;&gt;&gt; Please see SincResampler for the general idea.
&gt;&gt; 
&gt;&gt; It seems the case here is a little different from in SincResampler.
&gt;&gt; If we want to unroll the inner loop, it must have a fixed loop count. But In DirectConvolver the loop count is variable with i. I`m not sure whether we can unroll here?
&gt; 
&gt; I&apos;m quite sure it can be done.  Look at SincResampler where specific cases are hard-coded:
&gt; 
&gt; if (n == 32) {
&gt;    ...
&gt; } else if (n == 64) {
&gt;    ...
&gt; } else {
&gt; }
&gt; 
&gt; I believe the case we specially want to optimize is 128.  Generally, the kernelSize and the framesToProcess will often both be 128, so should be easy to special-case that.
&gt; 
&gt; Actually, in a way, the SincResampler code is just a more complex version of how the DirectConvolver could be coded.  If you look at how the CONVOLVE_ONE_SAMPLE macro is defined in SincResampler it actually has to accumulate two sums (sum1, sum2) then later it effectively performs a linear interpolation between these two.  But DirectConvolver can have a similar macro accumulating just a single sum...

In the DirectConvolver the convolution is
while (i &lt; kernelSize) {
    for (size_t j = 0; j &lt;= i; j++)
        sum += inputP[i - j] * kernelP[j];  
}
And from my understanding, it could use the unrolling like in SincResampler, only when it`s the follow format:
while (i &lt; kernelSize) {
    for (size_t j = 0; j &lt; kernelSize; j++)//unroll here when kernekSize is 128, not j&lt;=i because i is variable in the while loop
        sum += inputP[i - j] * kernelP[j];  // Here use macro instead
}
But here I exclude the &quot; sum += inputP[i - j] * kernelP[j];&quot; when j&gt;i&amp;&amp;j&lt;kernelSize, because they are all zeros. 
So if we include the &quot; sum += inputP[i - j] * kernelP[j];&quot; when j&gt;i&amp;&amp;j&lt;kernelSize and unroll the loop, I am doubt about that it will get faster than not do that.
Maybe what I understand is wrong, if that correct me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568821</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-01 12:33:21 -0800</bug_when>
    <thetext>Hi Xingnan, think about the buffering in a *different* way than you currently are.  In the following algorithm there will not be a 1st and 2nd half of convolving as in your current code, but the m_inputBuffer will be split into two halves.

Consider this (simplified for kernelSize==128 and framesToProcess==128)

Keep m_inputBuffer (which is of size 256 and zero-initialized)
m_lastOverlapBuffer is not needed and can be removed from the code.

Then follow these steps:

1) memcpy() 128 input frames to 2nd half of m_inputBuffer
2) Perform convolution of 128 output frames (each frame requiring 128 multiply-add instructions) placing results in the destination buffer.  These 128 multiply-add instructions correspond to 128 consecutive calls of the CONVOLVE_ONE_SAMPLE macro
3) memcpy() the 128 input frames (or 2nd half of m_inputBuffer which is the same) to the 1st half of m_inputBuffer
4) return from function

The steps 1-4 will be performed each time process() is called

Note that in step (2) there will always be 128 multiply-add operations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569105</commentid>
    <comment_count>15</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-01 17:39:45 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Hi Xingnan, think about the buffering in a *different* way than you currently are.  In the following algorithm there will not be a 1st and 2nd half of convolving as in your current code, but the m_inputBuffer will be split into two halves.
&gt; 
&gt; Consider this (simplified for kernelSize==128 and framesToProcess==128)
&gt; 
&gt; Keep m_inputBuffer (which is of size 256 and zero-initialized)
&gt; m_lastOverlapBuffer is not needed and can be removed from the code.
&gt; 
&gt; Then follow these steps:
&gt; 
&gt; 1) memcpy() 128 input frames to 2nd half of m_inputBuffer
&gt; 2) Perform convolution of 128 output frames (each frame requiring 128 multiply-add instructions) placing results in the destination buffer.  These 128 multiply-add instructions correspond to 128 consecutive calls of the CONVOLVE_ONE_SAMPLE macro
&gt; 3) memcpy() the 128 input frames (or 2nd half of m_inputBuffer which is the same) to the 1st half of m_inputBuffer
&gt; 4) return from function
&gt; 
&gt; The steps 1-4 will be performed each time process() is called
&gt; 
&gt; Note that in step (2) there will always be 128 multiply-add operations

Got it, thank you Chris.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569318</commentid>
    <comment_count>16</comment_count>
      <attachid>129828</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-01 23:22:15 -0800</bug_when>
    <thetext>Created attachment 129828
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569320</commentid>
    <comment_count>17</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-01 23:24:50 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Created an attachment (id=129828) [details]
&gt; Patch

Updated the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569344</commentid>
    <comment_count>18</comment_count>
      <attachid>129828</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-02 00:03:18 -0800</bug_when>
    <thetext>Comment on attachment 129828
Patch

Attachment 129828 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/11769811</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570340</commentid>
    <comment_count>19</comment_count>
      <attachid>129828</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-04 18:32:33 -0800</bug_when>
    <thetext>Comment on attachment 129828
Patch

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

Overall, this is looking really good!  As you&apos;ll see in the comments below, I think we should support smaller kernel sizes (such as 32,64) and should consider using 32 by default.  In order to do this, the MinFFTSize needs to be adjusted (to twice kernelSize) from its current value:
const size_t MinFFTSize = 256;

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:44
&gt; +    : m_kernelSize(kernelSize)

Looking at this a little more closely, do we even need to pass the kernel size here?  The reason I ask is because we don&apos;t really use the
m_kernelSize variable except to check that it&apos;s equal to convolveKernel-&gt;size().

I think it would be more useful to pass in &quot;inputBlockSize&quot; instead (which would normally be 128 and equal to the value &quot;framesToProcess&quot; passed into process()
and initialize a member variable called &quot;m_inputBlockSize&quot; and get rid of m_kernelSize

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:45
&gt; +    , m_inputBuffer(kernelSize * 2)

Then this would be m_inputBuffer(inputBlockSize * 2)

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:49
&gt; +void DirectConvolver::process(AudioFloatArray* convolveKernel, const float* sourceP, float* destP, size_t framesToProcess)

I would change the name slightly:

convolveKernel -&gt; convolutionKernel

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:51
&gt; +

nit: please remove extra blank line

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:52
&gt; +    // FIXME: Optimize for IPP, reverb function in ipp library can be used here.

Please also add a FIXME to use the &quot;conv()&quot; function in Accelerate.framework for Darwin (Apple)

Ideally, you could write a bug for each of these FIXMEs and include the bug URLs here.

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:56
&gt; +    if (framesToProcess != m_kernelSize)

We should change these checks to check against &quot;m_inputBlockSize&quot; instead of &quot;m_kernelSize&quot;

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:59
&gt; +    size_t kernelSize = convolveKernel-&gt;size();

This line can be moved up above line 54 and use this variable instead of &quot;m_kernelSize&quot;

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:61
&gt; +    // kernelSize must euqal to m_kernelSize

spelling nit: &quot;euqal&quot; -&gt; &quot;equal&quot;

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:64
&gt; +        return;

We can remove these checks, but instead check that (kernelSize &lt;= m_inputBlockSize)

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:68
&gt; +    float* inputP = m_inputBuffer.data() + m_kernelSize;

m_kernelSize -&gt; m_inputBlockSize    (or framesToProcess which should be the same)

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:81
&gt; +            j++;

nit: should use four spaces indentation

I suspect this macro can be further optimized to avoid pipeline stalls, etc. for the scalar case.  We should add FIXME here.
One possibility for further optimization might be to maintain 4 separate sums: sum1, sum2, sum3, sum4
and change the macro to CONVOLVE_FOUR_SAMPLES
But let&apos;s not worry about that right now - FIXME is fine.

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:89
&gt; +        if (kernelSize == 128) {

I highly recommend adding the kernelSize == 64 and kernelSize == 32 here too:

if (kernelSize == 32) {
else if (kernelSize == 64) {
else if (kernelSize == 128) {
}

The reason is because I&apos;m worried that changing ReverbConvolver to do the DirectConvolver with kernelSize==128 may be too inefficient especially on slow machines (we lose performance compared with FFT)
So it would be great to handle the smaller sizes (32,64) and then pick the 32 size in ReverbConvolver

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:231
&gt; +            while (i &lt; kernelSize) {

shouldn&apos;t this be:   j &lt; kernelSize

&gt; Source/WebCore/platform/audio/ReverbConvolver.cpp:110
&gt; +            stage = adoptPtr(new ReverbConvolverStage(response, totalResponseLength, reverbTotalLatency, stageOffset, stageSize, fftSize, renderPhase, renderSliceSize, &amp;m_accumulationBuffer, true));

Instead of duplicating this line twice:
stage = adoptPtr(new ReverbConvolverStage(response, totalResponseLength, reverbTotalLatency, stageOffset, stageSize, fftSize, renderPhase, renderSliceSize, &amp;m_accumulationBuffer));

Please initialize &quot;stage&quot; on a single line, passing in (stageOffset==0) as the final argument
Or, even better, create a local &quot;bool useDirectConvolver = (stageOffset==0);&quot; and pass in useDirectConvolver
so that the code is easier to understand

&gt; Source/WebCore/platform/audio/ReverbConvolverStage.cpp:60
&gt; +        m_FFTconvolver = adoptPtr(new FFTConvolver(fftSize));

I know this is a bit strange, but to be consistent with the naming of &quot;m_fftKernel&quot; we should call this member variable &quot;m_fftConvolver&quot;

&gt; Source/WebCore/platform/audio/ReverbConvolverStage.cpp:64
&gt; +        m_directConvolver = adoptPtr(new DirectConvolver(stageLength));

stageLength -&gt; renderSliceSize

if the changes are made to the DirectConvolver constructor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570342</commentid>
    <comment_count>20</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-04 18:34:57 -0800</bug_when>
    <thetext>Please also note that if we reduce MinFFTSize, then FFTConvolver::process() will need to be adjusted to handle framesToProcess &gt; fftSize/2 (see FIXME inside that method)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570531</commentid>
    <comment_count>21</comment_count>
      <attachid>130083</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-05 02:21:37 -0800</bug_when>
    <thetext>Created attachment 130083
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570534</commentid>
    <comment_count>22</comment_count>
      <attachid>129828</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-05 02:26:26 -0800</bug_when>
    <thetext>Comment on attachment 129828
Patch

Update the patch as your comments, thanks.
View in context: https://bugs.webkit.org/attachment.cgi?id=129828&amp;action=review

&gt;&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:89
&gt;&gt; +        if (kernelSize == 128) {
&gt; 
&gt; I highly recommend adding the kernelSize == 64 and kernelSize == 32 here too:
&gt; 
&gt; if (kernelSize == 32) {
&gt; else if (kernelSize == 64) {
&gt; else if (kernelSize == 128) {
&gt; }
&gt; 
&gt; The reason is because I&apos;m worried that changing ReverbConvolver to do the DirectConvolver with kernelSize==128 may be too inefficient especially on slow machines (we lose performance compared with FFT)
&gt; So it would be great to handle the smaller sizes (32,64) and then pick the 32 size in ReverbConvolver

One question: whether the FFT performance is still better than direct way here when kernelSize is small like 32?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570535</commentid>
    <comment_count>23</comment_count>
      <attachid>130083</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-05 02:28:00 -0800</bug_when>
    <thetext>Comment on attachment 130083
Patch

Attachment 130083 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/11802897</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570770</commentid>
    <comment_count>24</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-05 09:23:09 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 129828 [details])
&gt; Update the patch as your comments, thanks.
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129828&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:89
&gt; &gt;&gt; +        if (kernelSize == 128) {
&gt; &gt; 
&gt; &gt; I highly recommend adding the kernelSize == 64 and kernelSize == 32 here too:
&gt; &gt; 
&gt; &gt; if (kernelSize == 32) {
&gt; &gt; else if (kernelSize == 64) {
&gt; &gt; else if (kernelSize == 128) {
&gt; &gt; }
&gt; &gt; 
&gt; &gt; The reason is because I&apos;m worried that changing ReverbConvolver to do the DirectConvolver with kernelSize==128 may be too inefficient especially on slow machines (we lose performance compared with FFT)
&gt; &gt; So it would be great to handle the smaller sizes (32,64) and then pick the 32 size in ReverbConvolver
&gt; 
&gt; One question: whether the FFT performance is still better than direct way here when kernelSize is small like 32?

Good question, is this something you can measure so we can know how to tune?  Just remember that in order to test kernelSize&lt;128 you&apos;ll need to add a loop inside FFTConvolver::process() since the FFT size will be small (see FIXME in that function)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576596</commentid>
    <comment_count>25</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-12 15:14:35 -0700</bug_when>
    <thetext>I&apos;ve tested this on a 2-year old Mac desktop machine (2.26 GHz Quad-Core Intel Xeon) and the current direct convolution (kernelSize==128) takes about 20 microseconds (compared with ~ 5 microseconds) for FFTConvolver version.  So, on this machine with a stereo impulse response this is about an extra 1% CPU load.  But a slower machine (ARM, etc.) would have a worse CPU hit.

Ideally, we&apos;d move down to kernelSize==64 or 32 since I&apos;m pretty sure we&apos;ll get better performance.  Xingnan, would you mind finishing that last part (fixing FFTConvolver::process() to handle smaller processing sizes...) so we can switch to 32??

Jer, it should be fairly trivial to call into the vecLib.framework conv() function here which should be super-optimized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576924</commentid>
    <comment_count>26</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-12 19:29:20 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; I&apos;ve tested this on a 2-year old Mac desktop machine (2.26 GHz Quad-Core Intel Xeon) and the current direct convolution (kernelSize==128) takes about 20 microseconds (compared with ~ 5 microseconds) for FFTConvolver version.  So, on this machine with a stereo impulse response this is about an extra 1% CPU load.  But a slower machine (ARM, etc.) would have a worse CPU hit.
&gt; 
&gt; Ideally, we&apos;d move down to kernelSize==64 or 32 since I&apos;m pretty sure we&apos;ll get better performance.  Xingnan, would you mind finishing that last part (fixing FFTConvolver::process() to handle smaller processing sizes...) so we can switch to 32??
&gt; 
Of cause not, I would like to handle this. Should it be filed another bug?
I have a question that does the first convolverStage( or first several stages) is the key part to impact the performance?  As the left stages have increasing fft size, they still process with large kernelSize. 
&gt; Jer, it should be fairly trivial to call into the vecLib.framework conv() function here which should be super-optimized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576981</commentid>
    <comment_count>27</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-12 20:55:19 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; I&apos;ve tested this on a 2-year old Mac desktop machine (2.26 GHz Quad-Core Intel Xeon) and the current direct convolution (kernelSize==128) takes about 20 microseconds (compared with ~ 5 microseconds) for FFTConvolver version.  So, on this machine with a stereo impulse response this is about an extra 1% CPU load.  But a slower machine (ARM, etc.) would have a worse CPU hit.
&gt; &gt; 
&gt; &gt; Ideally, we&apos;d move down to kernelSize==64 or 32 since I&apos;m pretty sure we&apos;ll get better performance.  Xingnan, would you mind finishing that last part (fixing FFTConvolver::process() to handle smaller processing sizes...) so we can switch to 32??
&gt; &gt; 
&gt; Of cause not, I would like to handle this. Should it be filed another bug?
&gt; I have a question that does the first convolverStage( or first several stages) is the key part to impact the performance?  As the left stages have increasing fft size, they still process with large kernelSize. 

I think we should handle the smaller size in this patch, since it&apos;s a performance regression.  It&apos;s true that the tail of the impulse response has the large FFTs, but much of that happens in a different thread, so doesn&apos;t influence the real-time audio thread&apos;s performance (on a multi-core machine).  Even if it&apos;s a fraction of the overall CPU load, we should still make a best effort to minimize the impact of the performance regression.  It&apos;s pretty easy to make the changes to FFTConvolver to divide the processing up into smaller pieces (probably 5-10 lines of code).  I can explain more about that if you&apos;re not clear how to do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577113</commentid>
    <comment_count>28</comment_count>
      <attachid>131559</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-13 00:00:20 -0700</bug_when>
    <thetext>Created attachment 131559
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577117</commentid>
    <comment_count>29</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-13 00:05:49 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; Created an attachment (id=131559) [details]
&gt; Patch

Update the patch, 
(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; &gt; (In reply to comment #25)
&gt; &gt; &gt; I&apos;ve tested this on a 2-year old Mac desktop machine (2.26 GHz Quad-Core Intel Xeon) and the current direct convolution (kernelSize==128) takes about 20 microseconds (compared with ~ 5 microseconds) for FFTConvolver version.  So, on this machine with a stereo impulse response this is about an extra 1% CPU load.  But a slower machine (ARM, etc.) would have a worse CPU hit.
&gt; &gt; &gt; 
&gt; &gt; &gt; Ideally, we&apos;d move down to kernelSize==64 or 32 since I&apos;m pretty sure we&apos;ll get better performance.  Xingnan, would you mind finishing that last part (fixing FFTConvolver::process() to handle smaller processing sizes...) so we can switch to 32??
&gt; &gt; &gt; 
&gt; &gt; Of cause not, I would like to handle this. Should it be filed another bug?
&gt; &gt; I have a question that does the first convolverStage( or first several stages) is the key part to impact the performance?  As the left stages have increasing fft size, they still process with large kernelSize. 
&gt; 
&gt; I think we should handle the smaller size in this patch, since it&apos;s a performance regression.  It&apos;s true that the tail of the impulse response has the large FFTs, but much of that happens in a different thread, so doesn&apos;t influence the real-time audio thread&apos;s performance (on a multi-core machine).  Even if it&apos;s a fraction of the overall CPU load, we should still make a best effort to minimize the impact of the performance regression.  It&apos;s pretty easy to make the changes to FFTConvolver to divide the processing up into smaller pieces (probably 5-10 lines of code).  I can explain more about that if you&apos;re not clear how to do that.

Chris, thanks your answer, I updated the patch, to add the 32&amp;64 kernelSize support in FFTConvolver as my understanding, please review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577128</commentid>
    <comment_count>30</comment_count>
      <attachid>131559</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-13 00:35:01 -0700</bug_when>
    <thetext>Comment on attachment 131559
Patch

Attachment 131559 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/11947387</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577867</commentid>
    <comment_count>31</comment_count>
      <attachid>131559</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-13 15:12:22 -0700</bug_when>
    <thetext>Comment on attachment 131559
Patch

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

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:51
&gt; +    // FIXME: Optimize for IPP, reverb function in ipp library can be used here.

nit: you use &quot;IPP&quot; then &quot;ipp&quot; later in the sentence.

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:76
&gt; +    // Copy samples to 2nd half of input buffer

nit: period at end of sentence

&gt; Source/WebCore/platform/audio/DirectConvolver.cpp:81
&gt; +            sum += inputP[i - j] * kernelP[j];  \

nit: indentation should be 4 spaces

&gt; Source/WebCore/platform/audio/FFTConvolver.cpp:82
&gt; +        size_t kernelSize = fftKernel-&gt;fftSize() / 2;

I&apos;m not sure why you define a separate kernelSize variable as compared with halfSize above -- they should always be the same, so we might as well just use the existing &quot;halfSize&quot;

&gt; Source/WebCore/platform/audio/FFTConvolver.cpp:84
&gt; +        for (size_t i = 0; i &lt; halfSize; i += kernelSize) {

I believe you&apos;ll need to move this for() loop higher up in this function - probably all the way very near the top of this function and then simply change &quot;framesToProcess&quot; -&gt; &quot;halfSize&quot; in the 5 places it&apos;s used.

size_t numberOfDivisions = halfSize &lt;= framesToProcess ? (framesToProcess / halfSize) : 1;
for (size_t i = 0; i &lt; numberOfDivisions; ++i, sourceP += halfSize, destP += halfSize) {

And we also need to have an ASSERT that framesToProcess is an exact multiple of halfSize (or if halfSize &gt; framesToProcess then halfSize is a multiple of framesToProcess)

That should make the change pretty simple...

&gt; Source/WebCore/platform/audio/ReverbConvolver.cpp:86
&gt;  

Please change MinFFTSize to 64 from 256 in order to make sure DirectConvolver has kernelSize==32</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578172</commentid>
    <comment_count>32</comment_count>
      <attachid>131789</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-13 22:42:24 -0700</bug_when>
    <thetext>Created attachment 131789
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578176</commentid>
    <comment_count>33</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-13 22:52:24 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 131559 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131559&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/audio/DirectConvolver.cpp:51
&gt; &gt; +    // FIXME: Optimize for IPP, reverb function in ipp library can be used here.
&gt; 
&gt; nit: you use &quot;IPP&quot; then &quot;ipp&quot; later in the sentence.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/DirectConvolver.cpp:76
&gt; &gt; +    // Copy samples to 2nd half of input buffer
&gt; 
&gt; nit: period at end of sentence
&gt; 
&gt; &gt; Source/WebCore/platform/audio/DirectConvolver.cpp:81
&gt; &gt; +            sum += inputP[i - j] * kernelP[j];  \
&gt; 
&gt; nit: indentation should be 4 spaces
&gt; 
&gt; &gt; Source/WebCore/platform/audio/FFTConvolver.cpp:82
&gt; &gt; +        size_t kernelSize = fftKernel-&gt;fftSize() / 2;
&gt; 
&gt; I&apos;m not sure why you define a separate kernelSize variable as compared with halfSize above -- they should always be the same, so we might as well just use the existing &quot;halfSize&quot;
&gt; 
&gt; &gt; Source/WebCore/platform/audio/FFTConvolver.cpp:84
&gt; &gt; +        for (size_t i = 0; i &lt; halfSize; i += kernelSize) {
&gt; 
&gt; I believe you&apos;ll need to move this for() loop higher up in this function - probably all the way very near the top of this function and then simply change &quot;framesToProcess&quot; -&gt; &quot;halfSize&quot; in the 5 places it&apos;s used.
&gt; 
It seems we cannot simply change &quot;framesToProcess&quot; to &quot;halfSize&quot;, there will be a problem when &quot;halfSize&quot; &gt; &quot;framesToProcess&quot;. So I use a &quot;divisionSize = numberOfDivisions == 1 ? framesToProcess : halfSize;&quot; instead.
Patch is updated as your other comments.
&gt; size_t numberOfDivisions = halfSize &lt;= framesToProcess ? (framesToProcess / halfSize) : 1;
&gt; for (size_t i = 0; i &lt; numberOfDivisions; ++i, sourceP += halfSize, destP += halfSize) {
&gt; 
&gt; And we also need to have an ASSERT that framesToProcess is an exact multiple of halfSize (or if halfSize &gt; framesToProcess then halfSize is a multiple of framesToProcess)
&gt; 
&gt; That should make the change pretty simple...
&gt; 
&gt; &gt; Source/WebCore/platform/audio/ReverbConvolver.cpp:86
&gt; &gt;  
&gt; 
&gt; Please change MinFFTSize to 64 from 256 in order to make sure DirectConvolver has kernelSize==32</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579767</commentid>
    <comment_count>34</comment_count>
      <attachid>131789</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-15 14:55:48 -0700</bug_when>
    <thetext>Comment on attachment 131789
Patch

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

Xingnan, this looks almost perfect.  I have a few comments below.  Also, please adjust the FIXME comment in FFTConvolver.h since the buffering is more flexible now.  I&apos;m applying the patch and testing with it now.  Assuming all is good, I can handle the last detail of adding the new files to the mac-port .xcodeproj build file.

&gt; Source/WebCore/GNUmakefile.list.am:5471
&gt; +	Source/WebCore/platform/audio/DirectConvolver.h \

Please put in alphabetical order

&gt; Source/WebCore/WebCore.gypi:3041
&gt; +            &apos;platform/audio/DirectConvolver.h&apos;,

Please put in alphabetical order

&gt; Source/WebCore/platform/audio/FFTConvolver.cpp:52
&gt;      // FIXME: make so framesToProcess is not required to fit evenly into fftSize/2

We can change this comment now since framesToProcess may now be larger than (fftSize/2).  Probably best to simply remove this comment since you&apos;ve added a different comment on line 56.

&gt; Source/WebCore/platform/audio/ReverbConvolver.cpp:-88
&gt; -    size_t reverbTotalLatency = m_minFFTSize / 2;

Might as well have comment here saying that total latency is zero because we&apos;re using direct-convolution in the leading portion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579989</commentid>
    <comment_count>35</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-15 18:12:59 -0700</bug_when>
    <thetext>Xingnan, I&apos;ve applied the patch and played with different values for MinFFTSize.  I&apos;ve found that a value of 128 gives the best performance in my testing, so please update MinFFTSize=128</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580077</commentid>
    <comment_count>36</comment_count>
      <attachid>132185</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-15 20:45:42 -0700</bug_when>
    <thetext>Created attachment 132185
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580082</commentid>
    <comment_count>37</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-15 20:49:52 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; (From update of attachment 131789 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131789&amp;action=review
&gt; 
&gt; Xingnan, this looks almost perfect.  I have a few comments below.  Also, please adjust the FIXME comment in FFTConvolver.h since the buffering is more flexible now.  I&apos;m applying the patch and testing with it now.  Assuming all is good, I can handle the last detail of adding the new files to the mac-port .xcodeproj build file.
Thanks Chris, updated the patch as your comments and changed MinFFTSize to 128.
&gt; 
&gt; &gt; Source/WebCore/GNUmakefile.list.am:5471
&gt; &gt; +	Source/WebCore/platform/audio/DirectConvolver.h \
&gt; 
&gt; Please put in alphabetical order
&gt; 
&gt; &gt; Source/WebCore/WebCore.gypi:3041
&gt; &gt; +            &apos;platform/audio/DirectConvolver.h&apos;,
&gt; 
&gt; Please put in alphabetical order
&gt; 
&gt; &gt; Source/WebCore/platform/audio/FFTConvolver.cpp:52
&gt; &gt;      // FIXME: make so framesToProcess is not required to fit evenly into fftSize/2
&gt; 
&gt; We can change this comment now since framesToProcess may now be larger than (fftSize/2).  Probably best to simply remove this comment since you&apos;ve added a different comment on line 56.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/ReverbConvolver.cpp:-88
&gt; &gt; -    size_t reverbTotalLatency = m_minFFTSize / 2;
&gt; 
&gt; Might as well have comment here saying that total latency is zero because we&apos;re using direct-convolution in the leading portion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580107</commentid>
    <comment_count>38</comment_count>
      <attachid>132185</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-15 21:21:50 -0700</bug_when>
    <thetext>Comment on attachment 132185
Patch

Attachment 132185 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/11962038</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581562</commentid>
    <comment_count>39</comment_count>
      <attachid>132521</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-18 19:10:53 -0700</bug_when>
    <thetext>Created attachment 132521
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581563</commentid>
    <comment_count>40</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-18 19:11:58 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; Created an attachment (id=132521) [details]
&gt; Patch

Hi Chris, updated the &quot;mac&quot; part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582106</commentid>
    <comment_count>41</comment_count>
      <attachid>132521</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-19 13:11:13 -0700</bug_when>
    <thetext>Comment on attachment 132521
Patch

Thanks Xingnan, looks good...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582127</commentid>
    <comment_count>42</comment_count>
      <attachid>132521</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-19 13:20:03 -0700</bug_when>
    <thetext>Comment on attachment 132521
Patch

Clearing flags on attachment: 132521

Committed r111227: &lt;http://trac.webkit.org/changeset/111227&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582128</commentid>
    <comment_count>43</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-19 13:20:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128848</attachid>
            <date>2012-02-24 21:18:57 -0800</date>
            <delta_ts>2012-02-28 01:24:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75564-20120225132141.patch</filename>
            <type>text/plain</type>
            <size>21360</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4ODg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWVhMDVhM2EwMDM4NThl
M2UwZTI4NzBkOWIzZmM0ODljMjUxMzhiZi4uYTlmNGJmOThhM2MxMjc5NTU3MmNiYzc3Zjc1YjEx
MDUyYmRhNTI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAyLTI0ICBYaW5n
bmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIENvbnZvbHZlck5v
ZGUgc2hvdWxkIG5vdCBpbmN1ciBwcm9jZXNzaW5nIGxhdGVuY3kKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTY0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBEaXJlY3RDb252b2x2ZXIgaW5z
dGVhZCBvZiBGRlRDb252b2x2ZXIgZm9yIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSBsZWFkaW5nIHBv
cnRpb24gb2YgaW1wdWxzZSByZXNwb25zZS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0Q29udm9sdmVyOjpEaXJlY3RD
b252b2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0Q29udm9sdmVyOjpwcm9jZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdENvbnZvbHZlcjo6cmVzZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoRGlyZWN0Q29udm9sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdENv
bnZvbHZlcjo6Y29udm9sdmVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmJD
b252b2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpSZXZlcmJD
b252b2x2ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJldmVyYkNvbnZvbHZlclN0YWdlOjpSZXZlcmJDb252b2x2ZXJTdGFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXJTdGFnZTo6cHJvY2Vzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXJTdGFnZTo6cmVzZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFJldmVyYkNvbnZvbHZlclN0YWdlKToKKwogMjAxMi0wMi0yNCAgVGllbi1SZW4g
Q2hlbiAgPHRyY2hlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSZXBsYWNl
IFJlZlB0ciB3aXRoIE93blB0ciBmb3IgQ0NMYXllckltcGwgdHJlZSBzdHJ1Y3R1cmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCA1MzZmZTNlM2NjNjdiOGI5YmFlMDBjZTg4Y2I5ODNhZTc3MWIyNzMzLi5h
ODk5YzQxZDRkMDRhZDYwMDk1Y2YyYWUwNDQ0YWFmZTQ1ODE1NmRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC0yODYxLDYgKzI4NjEsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0VxdWFs
UG93ZXJQYW5uZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vRkZUQ29udm9sdmVy
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vRkZUQ29udm9sdmVyLmgnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9hdWRpby9GRlRGcmFtZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0ZG
VEZyYW1lLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lU3R1Yi5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29udm9s
dmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNzJhNGQ3OTY5Nzk5YTg0OGMyNWVkZWIxNTVkNDZjMDFhMDdjMzk0ZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENv
bnZvbHZlci5jcHAKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiRGlyZWN0Q29udm9sdmVyLmgiCisKKyNp
bmNsdWRlICJWZWN0b3JNYXRoLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBWZWN0b3JNYXRoOworICAgIAorRGlyZWN0Q29u
dm9sdmVyOjpEaXJlY3RDb252b2x2ZXIoc2l6ZV90IGNvbnZvbHZlU2l6ZSkKKyAgICA6IG1fY29u
dm9sdmVTaXplKGNvbnZvbHZlU2l6ZSkKKyAgICAsIG1faW5wdXRCdWZmZXIoY29udm9sdmVTaXpl
KQorICAgICwgbV9sYXN0T3ZlcmxhcEJ1ZmZlcihjb252b2x2ZVNpemUgLyAyKQoreworfQorCit2
b2lkIERpcmVjdENvbnZvbHZlcjo6cHJvY2VzcyhBdWRpb0Zsb2F0QXJyYXkqIGNvbnZvbHZlS2Vy
bmVsLCBjb25zdCBmbG9hdCogc291cmNlUCwgZmxvYXQqIGRlc3RQLCBzaXplX3QgZnJhbWVzVG9Q
cm9jZXNzKQoreworICAgIGludCBrZXJuZWxTaXplID0gY29udm9sdmVLZXJuZWwtPnNpemUoKTsK
KyAgICBmbG9hdCoga2VybmVsUCA9IGNvbnZvbHZlS2VybmVsLT5kYXRhKCk7CisgICAgaW50IGhh
bGZTaXplID0gbV9jb252b2x2ZVNpemUgLyAyOworCisgICAgLy8gQ29weSBzYW1wbGVzIHRvIGlu
cHV0IGJ1ZmZlcgorICAgIGZsb2F0KiBpbnB1dFAgPSBtX2lucHV0QnVmZmVyLmRhdGEoKTsKKwor
ICAgIC8vIFNhbml0eSBjaGVjaworICAgIC8vIGtlcm5lbFNpemUgbXVzdCBlcXVhbCB0byBoYWxm
U2l6ZSBoZXJlLgorICAgIC8vIEZJWE1FOiBCZXR0ZXIgc29sdXRpb24gaXMgbmVlZGVkIGZvciB2
YXJpYWJsZSBrZXJuZWxTaXplLgorICAgIGJvb2wgaXNDb3B5R29vZCA9IGtlcm5lbFAgJiYgKGtl
cm5lbFNpemUgPT0gaGFsZlNpemUpICYmIHNvdXJjZVAgJiYgaW5wdXRQOworICAgIEFTU0VSVChp
c0NvcHlHb29kKTsKKyAgICBpZiAoIWlzQ29weUdvb2QpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBtZW1jcHkoaW5wdXRQLCBzb3VyY2VQLCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9j
ZXNzKTsKKworICAgIC8vIDFzdCBoYWxmIG9mIGNvbnZvbHZpbmcKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGhhbGZTaXplOyBpKyspIHsKKyAgICAgICAgLy8gU2V0IHRvIHplcm8gYmVmb3JlIHN1
bS4KKyAgICAgICAgZGVzdFBbaV0gPSAwOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8PSBp
OyBqKyspIHsKKyAgICAgICAgICAgIC8vIERvIGNvbnZvbHV0aW9uLgorICAgICAgICAgICAgZGVz
dFBbaV0gKz0gaW5wdXRQW2kgLSBqXSAqIGtlcm5lbFBbal07CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmbG9hdCogb3ZlcmxhcEJ1ZmZlclAgPSBtX2xhc3RPdmVybGFwQnVmZmVyLmRhdGEoKTsK
KworICAgIC8vIE92ZXJsYXAtYWRkIHdpdGggMm5kIGhhbGYgb2YgbGFzdCBwcm9jZXNzaW5nLgor
ICAgIHZhZGQoZGVzdFAsIDEsIG92ZXJsYXBCdWZmZXJQLCAxLCBkZXN0UCwgMSwgZnJhbWVzVG9Q
cm9jZXNzKTsKKworICAgIC8vIDJuZCBoYWxmIG9mIGNvbnZvbHZpbmcKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGhhbGZTaXplOyBpKyspIHsKKyAgICAgICAgLy8gU2V0IHRvIHplcm8gYmVmb3Jl
IHN1bS4KKyAgICAgICAgb3ZlcmxhcEJ1ZmZlclBbaV0gPSAwOworICAgICAgICBmb3IgKGludCBq
ID0gaSArIGhhbGZTaXplLCBrID0gMDsgayA8IGhhbGZTaXplOyAtLWosICsraykgeworICAgICAg
ICAgICAgLy8gRG8gY29udm9sdXRpb24uCisgICAgICAgICAgICBvdmVybGFwQnVmZmVyUFtpXSAr
PSBpbnB1dFBbal0gKiBrZXJuZWxQW2tdOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIERp
cmVjdENvbnZvbHZlcjo6cmVzZXQoKQoreworICAgIG1faW5wdXRCdWZmZXIuemVybygpOworICAg
IG1fbGFzdE92ZXJsYXBCdWZmZXIuemVybygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29udm9sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MWY4ZGY5MmFmMWEzYTUz
ZmMxNzVjYzMwYTQwMmMxNGUyNjkxN2UxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29udm9sdmVyLmgKQEAgLTAsMCArMSw1OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgRGlyZWN0Q29udm9sdmVyX2gKKyNkZWZpbmUgRGlyZWN0Q29udm9sdmVyX2gKKworI2lu
Y2x1ZGUgIkF1ZGlvQXJyYXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEaXJl
Y3RDb252b2x2ZXIgeworcHVibGljOgorICAgIC8vIE9ubHkgc3VwcG9ydCBjb252b2x2ZVNpemUg
PSAyICogZnJhbWVzVG9Qcm9jZXNzLgorICAgIERpcmVjdENvbnZvbHZlcihzaXplX3QgY29udm9s
dmVTaXplKTsKKworICAgIHZvaWQgcHJvY2VzcyhBdWRpb0Zsb2F0QXJyYXkqIGNvbnZvbHZlS2Vy
bmVsLCBjb25zdCBmbG9hdCogc291cmNlUCwgZmxvYXQqIGRlc3RQLCBzaXplX3QgZnJhbWVzVG9Q
cm9jZXNzKTsKKworICAgIHZvaWQgcmVzZXQoKTsKKworICAgIHNpemVfdCBjb252b2x2ZVNpemUo
KSBjb25zdCB7IHJldHVybiBtX2NvbnZvbHZlU2l6ZTsgfQorCitwcml2YXRlOgorICAgIHNpemVf
dCBtX2NvbnZvbHZlU2l6ZTsKKworICAgIEF1ZGlvRmxvYXRBcnJheSBtX2lucHV0QnVmZmVyOwor
CisgICAgLy8gU2F2ZXMgdGhlIDJuZCBoYWxmIG9mIHRoZSBjb252b2x2aW5nIGJ1ZmZlciwgc28g
d2UgY2FuIGRvIGFuIG92ZXJsYXAtYWRkIHdpdGggdGhlIDFzdCBoYWxmIG9mIHRoZSBuZXh0IG9u
ZQorICAgIEF1ZGlvRmxvYXRBcnJheSBtX2xhc3RPdmVybGFwQnVmZmVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRGlyZWN0Q29udm9sdmVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwCmluZGV4IGM2
YWI1NGU4ZWY3YTc5MThmYjQ5NDZlNzMyMWI2NjlhZDRmNjUwNDEuLjIwMjc2MDRiZDE4OGY0Yjdh
N2JmNTkwMmEyMzNjNWFkMzdmNWViNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcApAQCAtODQsOCArODQsNyBAQCBSZXZlcmJDb252
b2x2ZXI6OlJldmVyYkNvbnZvbHZlcihBdWRpb0NoYW5uZWwqIGltcHVsc2VSZXNwb25zZSwgc2l6
ZV90IHJlbmRlclNsaQogICAgIGNvbnN0IGZsb2F0KiByZXNwb25zZSA9IGltcHVsc2VSZXNwb25z
ZS0+ZGF0YSgpOwogICAgIHNpemVfdCB0b3RhbFJlc3BvbnNlTGVuZ3RoID0gaW1wdWxzZVJlc3Bv
bnNlLT5sZW5ndGgoKTsKIAotICAgIC8vIEJlY2F1c2Ugd2UncmUgbm90IHVzaW5nIGRpcmVjdC1j
b252b2x1dGlvbiBpbiB0aGUgbGVhZGluZyBwb3J0aW9uLCB0aGUgcmV2ZXJiIGhhcyBhbiBvdmVy
YWxsIGxhdGVuY3kgb2YgaGFsZiB0aGUgZmlyc3Qtc3RhZ2UgRkZUIHNpemUKLSAgICBzaXplX3Qg
cmV2ZXJiVG90YWxMYXRlbmN5ID0gbV9taW5GRlRTaXplIC8gMjsKKyAgICBzaXplX3QgcmV2ZXJi
VG90YWxMYXRlbmN5ID0gMDsKIAogICAgIHNpemVfdCBzdGFnZU9mZnNldCA9IDA7CiAgICAgaW50
IGkgPSAwOwpAQCAtMTAxLDcgKzEwMCwxNCBAQCBSZXZlcmJDb252b2x2ZXI6OlJldmVyYkNvbnZv
bHZlcihBdWRpb0NoYW5uZWwqIGltcHVsc2VSZXNwb25zZSwgc2l6ZV90IHJlbmRlclNsaQogICAg
ICAgICAvLyBUaGlzICJzdGFnZ2VycyIgdGhlIHRpbWUgd2hlbiBlYWNoIEZGVCBoYXBwZW5zIHNv
IHRoZXkgZG9uJ3QgYWxsIGhhcHBlbiBhdCB0aGUgc2FtZSB0aW1lCiAgICAgICAgIGludCByZW5k
ZXJQaGFzZSA9IGNvbnZvbHZlclJlbmRlclBoYXNlICsgaSAqIHJlbmRlclNsaWNlU2l6ZTsKIAot
ICAgICAgICBPd25QdHI8UmV2ZXJiQ29udm9sdmVyU3RhZ2U+IHN0YWdlID0gYWRvcHRQdHIobmV3
IFJldmVyYkNvbnZvbHZlclN0YWdlKHJlc3BvbnNlLCB0b3RhbFJlc3BvbnNlTGVuZ3RoLCByZXZl
cmJUb3RhbExhdGVuY3ksIHN0YWdlT2Zmc2V0LCBzdGFnZVNpemUsIGZmdFNpemUsIHJlbmRlclBo
YXNlLCByZW5kZXJTbGljZVNpemUsICZtX2FjY3VtdWxhdGlvbkJ1ZmZlcikpOworICAgICAgICBP
d25QdHI8UmV2ZXJiQ29udm9sdmVyU3RhZ2U+IHN0YWdlOworICAgICAgICBpZiAoc3RhZ2VPZmZz
ZXQpIHsKKyAgICAgICAgICAgIHN0YWdlID0gYWRvcHRQdHIobmV3IFJldmVyYkNvbnZvbHZlclN0
YWdlKHJlc3BvbnNlLCB0b3RhbFJlc3BvbnNlTGVuZ3RoLCByZXZlcmJUb3RhbExhdGVuY3ksIHN0
YWdlT2Zmc2V0LCBzdGFnZVNpemUsIGZmdFNpemUsIHJlbmRlclBoYXNlLCByZW5kZXJTbGljZVNp
emUsICZtX2FjY3VtdWxhdGlvbkJ1ZmZlcikpOworCisgICAgICAgICAgICAvLyBGaWd1cmUgb3V0
IG5leHQgRkZUIHNpemUKKyAgICAgICAgICAgIGZmdFNpemUgKj0gMjsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBzdGFnZSA9IGFkb3B0UHRyKG5ldyBSZXZlcmJDb252b2x2ZXJTdGFnZShy
ZXNwb25zZSwgdG90YWxSZXNwb25zZUxlbmd0aCwgcmV2ZXJiVG90YWxMYXRlbmN5LCBzdGFnZU9m
ZnNldCwgc3RhZ2VTaXplLCBmZnRTaXplLCByZW5kZXJQaGFzZSwgcmVuZGVyU2xpY2VTaXplLCAm
bV9hY2N1bXVsYXRpb25CdWZmZXIsIHRydWUpKTsKIAogICAgICAgICBib29sIGlzQmFja2dyb3Vu
ZFN0YWdlID0gZmFsc2U7CiAKQEAgLTExNCw4ICsxMjAsNiBAQCBSZXZlcmJDb252b2x2ZXI6OlJl
dmVyYkNvbnZvbHZlcihBdWRpb0NoYW5uZWwqIGltcHVsc2VSZXNwb25zZSwgc2l6ZV90IHJlbmRl
clNsaQogICAgICAgICBzdGFnZU9mZnNldCArPSBzdGFnZVNpemU7CiAgICAgICAgICsraTsKIAot
ICAgICAgICAvLyBGaWd1cmUgb3V0IG5leHQgRkZUIHNpemUKLSAgICAgICAgZmZ0U2l6ZSAqPSAy
OwogICAgICAgICBpZiAoaGFzUmVhbHRpbWVDb25zdHJhaW50ICYmICFpc0JhY2tncm91bmRTdGFn
ZSAmJiBmZnRTaXplID4gbV9tYXhSZWFsdGltZUZGVFNpemUpCiAgICAgICAgICAgICBmZnRTaXpl
ID0gbV9tYXhSZWFsdGltZUZGVFNpemU7CiAgICAgICAgIGlmIChmZnRTaXplID4gbV9tYXhGRlRT
aXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29u
dm9sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIu
aAppbmRleCAzNzBiODcyMDY0ODI5ZTFjY2UyOWI2ZWQyNTcxMjZjOTBmNTY4YmRlLi4zMTJlYWI1
OGUwMTc3ZDBiMjEyMzUyNzEzMDBhM2ZjNzg3MjBiMWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaApAQCAtMzAsNiArMzAsNyBAQAogI2Rl
ZmluZSBSZXZlcmJDb252b2x2ZXJfaAogCiAjaW5jbHVkZSAiQXVkaW9BcnJheS5oIgorI2luY2x1
ZGUgIkRpcmVjdENvbnZvbHZlci5oIgogI2luY2x1ZGUgIkZGVENvbnZvbHZlci5oIgogI2luY2x1
ZGUgIlJldmVyYkFjY3VtdWxhdGlvbkJ1ZmZlci5oIgogI2luY2x1ZGUgIlJldmVyYkNvbnZvbHZl
clN0YWdlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZl
cmJDb252b2x2ZXJTdGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZl
cmJDb252b2x2ZXJTdGFnZS5jcHAKaW5kZXggNTNiYjY1MDA4MzEwNjQ3MTkxZTAwYTlkYjk1OWEw
M2RhOWZmZWEyZS4uMjkyZThkMzRkYzdiNzQ2ODIzNDcxNzI0MzU1ZDdiNjliMmJkNWEwOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyU3Rh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZl
clN0YWdlLmNwcApAQCAtNDQsMTggKzQ0LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBWZWN0b3JNYXRoOwogCiBSZXZlcmJDb252b2x2ZXJTdGFnZTo6UmV2ZXJiQ29u
dm9sdmVyU3RhZ2UoY29uc3QgZmxvYXQqIGltcHVsc2VSZXNwb25zZSwgc2l6ZV90IHJlc3BvbnNl
TGVuZ3RoLCBzaXplX3QgcmV2ZXJiVG90YWxMYXRlbmN5LCBzaXplX3Qgc3RhZ2VPZmZzZXQsIHNp
emVfdCBzdGFnZUxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgZmZ0U2l6ZSwgc2l6ZV90IHJlbmRlclBoYXNlLCBzaXplX3QgcmVuZGVyU2xp
Y2VTaXplLCBSZXZlcmJBY2N1bXVsYXRpb25CdWZmZXIqIGFjY3VtdWxhdGlvbkJ1ZmZlcikKLSAg
ICA6IG1fZmZ0S2VybmVsKGZmdFNpemUpCi0gICAgLCBtX2FjY3VtdWxhdGlvbkJ1ZmZlcihhY2N1
bXVsYXRpb25CdWZmZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IGZmdFNpemUsIHNpemVfdCByZW5kZXJQaGFzZSwgc2l6ZV90IHJlbmRlclNsaWNl
U2l6ZSwgUmV2ZXJiQWNjdW11bGF0aW9uQnVmZmVyKiBhY2N1bXVsYXRpb25CdWZmZXIsIGJvb2wg
ZGlyZWN0TW9kZSkKKyAgICA6IG1fYWNjdW11bGF0aW9uQnVmZmVyKGFjY3VtdWxhdGlvbkJ1ZmZl
cikKICAgICAsIG1fYWNjdW11bGF0aW9uUmVhZEluZGV4KDApCiAgICAgLCBtX2lucHV0UmVhZElu
ZGV4KDApCiAgICAgLCBtX2ltcHVsc2VSZXNwb25zZUxlbmd0aChyZXNwb25zZUxlbmd0aCkKKyAg
ICAsIG1fZGlyZWN0TW9kZShkaXJlY3RNb2RlKQogewogICAgIEFTU0VSVChpbXB1bHNlUmVzcG9u
c2UpOwogICAgIEFTU0VSVChhY2N1bXVsYXRpb25CdWZmZXIpOwotICAgIAotICAgIG1fZmZ0S2Vy
bmVsLmRvUGFkZGVkRkZUKGltcHVsc2VSZXNwb25zZSArIHN0YWdlT2Zmc2V0LCBzdGFnZUxlbmd0
aCk7Ci0gICAgbV9jb252b2x2ZXIgPSBhZG9wdFB0cihuZXcgRkZUQ29udm9sdmVyKGZmdFNpemUp
KTsKKworICAgIGlmICghbV9kaXJlY3RNb2RlKSB7CisgICAgICAgIG1fZmZ0S2VybmVsID0gYWRv
cHRQdHIobmV3IEZGVEZyYW1lKGZmdFNpemUpKTsKKyAgICAgICAgbV9mZnRLZXJuZWwtPmRvUGFk
ZGVkRkZUKGltcHVsc2VSZXNwb25zZSArIHN0YWdlT2Zmc2V0LCBzdGFnZUxlbmd0aCk7CisgICAg
ICAgIG1fRkZUY29udm9sdmVyID0gYWRvcHRQdHIobmV3IEZGVENvbnZvbHZlcihmZnRTaXplKSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9kaXJlY3RLZXJuZWwgPSBhZG9wdFB0cihuZXcgQXVk
aW9GbG9hdEFycmF5KHN0YWdlTGVuZ3RoKSk7CisgICAgICAgIG1fZGlyZWN0S2VybmVsLT5jb3B5
VG9SYW5nZShpbXB1bHNlUmVzcG9uc2UgKyBzdGFnZU9mZnNldCwgMCwgc3RhZ2VMZW5ndGgpOwor
ICAgICAgICBtX2RpcmVjdENvbnZvbHZlciA9IGFkb3B0UHRyKG5ldyBEaXJlY3RDb252b2x2ZXIo
ZmZ0U2l6ZSkpOworICAgIH0KICAgICBtX3RlbXBvcmFyeUJ1ZmZlci5hbGxvY2F0ZShyZW5kZXJT
bGljZVNpemUpOwogCiAgICAgLy8gVGhlIGNvbnZvbHV0aW9uIHN0YWdlIGF0IG9mZnNldCBzdGFn
ZU9mZnNldCBuZWVkcyB0byBoYXZlIGEgY29ycmVzcG9uZGluZyBkZWxheSB0byBjYW5jZWwgb3V0
IHRoZSBvZmZzZXQuCkBAIC0xMzMsNyArMTQwLDEwIEBAIHZvaWQgUmV2ZXJiQ29udm9sdmVyU3Rh
Z2U6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykK
ICAgICAgICAgLy8gTm93LCBydW4gdGhlIGNvbnZvbHV0aW9uIChpbnRvIHRoZSBkZWxheSBidWZm
ZXIpLgogICAgICAgICAvLyBBbiBleHBlbnNpdmUgRkZUIHdpbGwgaGFwcGVuIGV2ZXJ5IGZmdFNp
emUgLyAyIGZyYW1lcy4KICAgICAgICAgLy8gV2UgcHJvY2VzcyBpbi1wbGFjZSBoZXJlLi4uCi0g
ICAgICAgIG1fY29udm9sdmVyLT5wcm9jZXNzKCZtX2ZmdEtlcm5lbCwgcHJlRGVsYXllZFNvdXJj
ZSwgdGVtcG9yYXJ5QnVmZmVyLCBmcmFtZXNUb1Byb2Nlc3MpOworICAgICAgICBpZiAoIW1fZGly
ZWN0TW9kZSkKKyAgICAgICAgICAgIG1fRkZUY29udm9sdmVyLT5wcm9jZXNzKG1fZmZ0S2VybmVs
LmdldCgpLCBwcmVEZWxheWVkU291cmNlLCB0ZW1wb3JhcnlCdWZmZXIsIGZyYW1lc1RvUHJvY2Vz
cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZGlyZWN0Q29udm9sdmVyLT5wcm9jZXNz
KG1fZGlyZWN0S2VybmVsLmdldCgpLCBwcmVEZWxheWVkU291cmNlLCB0ZW1wb3JhcnlCdWZmZXIs
IGZyYW1lc1RvUHJvY2Vzcyk7CiAKICAgICAgICAgLy8gTm93IGFjY3VtdWxhdGUgaW50byByZXZl
cmIncyBhY2N1bXVsYXRpb24gYnVmZmVyLgogICAgICAgICBtX2FjY3VtdWxhdGlvbkJ1ZmZlci0+
YWNjdW11bGF0ZSh0ZW1wb3JhcnlCdWZmZXIsIGZyYW1lc1RvUHJvY2VzcywgJm1fYWNjdW11bGF0
aW9uUmVhZEluZGV4LCBtX3Bvc3REZWxheUxlbmd0aCk7CkBAIC0xNTQsNyArMTY0LDEwIEBAIHZv
aWQgUmV2ZXJiQ29udm9sdmVyU3RhZ2U6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgc2l6
ZV90IGZyYW1lc1RvUHJvY2VzcykKIAogdm9pZCBSZXZlcmJDb252b2x2ZXJTdGFnZTo6cmVzZXQo
KQogewotICAgIG1fY29udm9sdmVyLT5yZXNldCgpOworICAgIGlmICghbV9kaXJlY3RNb2RlKQor
ICAgICAgICBtX0ZGVGNvbnZvbHZlci0+cmVzZXQoKTsKKyAgICBlbHNlCisgICAgICAgIG1fZGly
ZWN0Q29udm9sdmVyLT5yZXNldCgpOwogICAgIG1fcHJlRGVsYXlCdWZmZXIuemVybygpOwogICAg
IG1fYWNjdW11bGF0aW9uUmVhZEluZGV4ID0gMDsKICAgICBtX2lucHV0UmVhZEluZGV4ID0gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZl
clN0YWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXJT
dGFnZS5oCmluZGV4IDk4MTFiYzYwMzIxNjc2NDYwMGM5Y2IxNzI1MTdkZWYxNThhMzZkYzguLjYz
ZDk0ODNkN2M1ZGVhZjIzMDZjNzA2MmViNWM2NTJlYWFjNDg5MTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyU3RhZ2UuaApAQCAtMzgs
NiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBSZXZlcmJBY2N1bXVsYXRpb25C
dWZmZXI7CiBjbGFzcyBSZXZlcmJDb252b2x2ZXI7CiBjbGFzcyBGRlRDb252b2x2ZXI7CitjbGFz
cyBEaXJlY3RDb252b2x2ZXI7CiAgICAgCiAvLyBBIFJldmVyYkNvbnZvbHZlclN0YWdlIHJlcHJl
c2VudHMgdGhlIGNvbnZvbHV0aW9uIGFzc29jaWF0ZWQgd2l0aCBhIHN1Yi1zZWN0aW9uIG9mIGEg
bGFyZ2UgaW1wdWxzZSByZXNwb25zZS4KIC8vIEl0IGluY29ycG9yYXRlcyBhIGRlbGF5IGxpbmUg
dG8gYWNjb3VudCBmb3IgdGhlIG9mZnNldCBvZiB0aGUgc3ViLXNlY3Rpb24gd2l0aGluIHRoZSBs
YXJnZXIgaW1wdWxzZSByZXNwb25zZS4KQEAgLTQ1LDggKzQ2LDcgQEAgY2xhc3MgUmV2ZXJiQ29u
dm9sdmVyU3RhZ2UgewogcHVibGljOgogICAgIC8vIHJlbmRlclBoYXNlIGlzIHVzZWZ1bCB0byBr
bm93IHNvIHRoYXQgd2UgY2FuIG1hbmlwdWxhdGUgdGhlIHByZSB2ZXJzdXMgcG9zdCBkZWxheSBz
byB0aGF0IHN0YWdlcyB3aWxsIHBlcmZvcm0KICAgICAvLyB0aGVpciBoZWF2eSB3b3JrIChGRlQg
cHJvY2Vzc2luZykgb24gZGlmZmVyZW50IHNsaWNlcyB0byBiYWxhbmNlIHRoZSBsb2FkIGluIGEg
cmVhbC10aW1lIHRocmVhZC4KLSAgICBSZXZlcmJDb252b2x2ZXJTdGFnZShjb25zdCBmbG9hdCog
aW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVzcG9uc2VMZW5ndGgsIHNpemVfdCByZXZlcmJUb3Rh
bExhdGVuY3ksIHNpemVfdCBzdGFnZU9mZnNldCwgc2l6ZV90IHN0YWdlTGVuZ3RoLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBmZnRTaXplLCBzaXplX3QgcmVuZGVyUGhhc2UsIHNp
emVfdCByZW5kZXJTbGljZVNpemUsIFJldmVyYkFjY3VtdWxhdGlvbkJ1ZmZlciogYWNjdW11bGF0
aW9uQnVmZmVyKTsKKyAgICBSZXZlcmJDb252b2x2ZXJTdGFnZShjb25zdCBmbG9hdCogaW1wdWxz
ZVJlc3BvbnNlLCBzaXplX3QgcmVzcG9uc2VMZW5ndGgsIHNpemVfdCByZXZlcmJUb3RhbExhdGVu
Y3ksIHNpemVfdCBzdGFnZU9mZnNldCwgc2l6ZV90IHN0YWdlTGVuZ3RoLCBzaXplX3QgZmZ0U2l6
ZSwgc2l6ZV90IHJlbmRlclBoYXNlLCBzaXplX3QgcmVuZGVyU2xpY2VTaXplLCBSZXZlcmJBY2N1
bXVsYXRpb25CdWZmZXIqLCBib29sIGRpcmVjdE1vZGUgPSBmYWxzZSk7CiAKICAgICAvLyBXQVJO
SU5HOiBmcmFtZXNUb1Byb2Nlc3MgbXVzdCBiZSBzdWNoIHRoYXQgaXQgZXZlbmx5IGRpdmlkZXMg
dGhlIGRlbGF5IGJ1ZmZlciBzaXplIChzdGFnZV9vZmZzZXQpLgogICAgIHZvaWQgcHJvY2Vzcyhj
b25zdCBmbG9hdCogc291cmNlLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKQEAgLTU5LDggKzU5
LDggQEAgcHVibGljOgogICAgIGludCBpbnB1dFJlYWRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5wdXRSZWFkSW5kZXg7IH0KIAogcHJpdmF0ZToKLSAgICBGRlRGcmFtZSBtX2ZmdEtlcm5lbDsK
LSAgICBPd25QdHI8RkZUQ29udm9sdmVyPiBtX2NvbnZvbHZlcjsKKyAgICBPd25QdHI8RkZURnJh
bWU+IG1fZmZ0S2VybmVsOworICAgIE93blB0cjxGRlRDb252b2x2ZXI+IG1fRkZUY29udm9sdmVy
OwogCiAgICAgQXVkaW9GbG9hdEFycmF5IG1fcHJlRGVsYXlCdWZmZXI7CiAKQEAgLTc2LDYgKzc2
LDEwIEBAIHByaXZhdGU6CiAgICAgQXVkaW9GbG9hdEFycmF5IG1fdGVtcG9yYXJ5QnVmZmVyOwog
CiAgICAgc2l6ZV90IG1faW1wdWxzZVJlc3BvbnNlTGVuZ3RoOworCisgICAgYm9vbCBtX2RpcmVj
dE1vZGU7CisgICAgT3duUHRyPEF1ZGlvRmxvYXRBcnJheT4gbV9kaXJlY3RLZXJuZWw7CisgICAg
T3duUHRyPERpcmVjdENvbnZvbHZlcj4gbV9kaXJlY3RDb252b2x2ZXI7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYzgyNjUzMjkzOTM0YTUwODQzNGU5YmM2ZjIwM2Y2ODMx
YmRhYWE2Mi4uYjJmODA5NDI3Njk1MmVlY2E5NjEwNmVmYzFmOGUwMzllNzkxMDYwZiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE5IEBACisyMDEyLTAyLTI0ICBYaW5nbmFuIFdhbmcgIDx4aW5nbmFuLndhbmdA
aW50ZWwuY29tPgorCisgICAgICAgIENvbnZvbHZlck5vZGUgc2hvdWxkIG5vdCBpbmN1ciBwcm9j
ZXNzaW5nIGxhdGVuY3kKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc1NTY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTm8gbmVlZCB0byBjaGVjayB0aGUgaW5pdGlhbCBzaWxlbnQgcGFydCBiZWNhdXNlIHRo
ZSBsYXRlbmN5IGlzc3VlIG9mIENvbnZvbHZlck5vZGUgaXMgZml4ZWQuCisKKyAgICAgICAgKiB3
ZWJhdWRpby9jb252b2x1dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdl
YmF1ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzOgorICAgICAgICAoY2hlY2tU
cmlhbmd1bGFyUHVsc2UpOgorICAgICAgICAoY2hlY2tUYWlsMSk6CisgICAgICAgIChjaGVja0Nv
bnZvbHZlZFJlc3VsdC5yZXR1cm4udmFyKToKKyAgICAgICAgKGNoZWNrQ29udm9sdmVkUmVzdWx0
KToKKwogMjAxMi0wMi0yNCAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJlbmFtZSBtaXNwZWxsZWQgZXhwZWN0YXRpb24gZmlsZXMuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlvbi1tb25vLW1vbm8tZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLWV4
cGVjdGVkLnR4dAppbmRleCA4NzA1ZjY2MWMzYTI4NmM0ODU3MzZjYTQ1YTQ0Mzc1M2E1NmE3MzVh
Li4zYWUyYTA0ODY2ODlkNjVjNGVmNmQ2MDM0YjY5NWM3ZDZlYTAyMjFlIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8tbW9uby1leHBlY3RlZC50
eHQKQEAgLTIsNyArMiw2IEBAIFRlc3RzIENvbnZvbHZlck5vZGUgcHJvY2Vzc2luZyBhIG1vbm8g
Y2hhbm5lbCB3aXRoIG1vbm8gaW1wdWxzZSByZXNwb25zZS4KIAogT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgogCi1QQVNTIEluaXRpYWwgbGF0ZW5jeSBvZiBjb252b2x2ZXIgaXMgc2lsZW50Lgog
UEFTUyBUcmlhbmd1bGFyIHBvcnRpb24gb2YgY29udm9sdXRpb24gaXMgY29ycmVjdC4KIFBBU1Mg
Rmlyc3QgcGFydCBvZiB0YWlsIG9mIGNvbnZvbHV0aW9uIGlzIHN1ZmZpY2llbnRseSBzbWFsbC4K
IFBBU1MgUmVuZGVyZWQgc2lnbmFsIGFmdGVyIHRhaWwgb2YgY29udm9sdXRpb24gaXMgc2lsZW50
LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9u
LXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvY29udm9sdXRpb24t
dGVzdGluZy5qcwppbmRleCBkN2VmOGVhNTFhOTdhMzEzOGY3ZDhmOTcwMmYzMjQ2YzFlYzkzMDY3
Li5jMmNhYmExMDYwMWEyMWU4ZTcwYmNmMGQ2ZTQ3MjRkYzY1MjQxMzc5IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvY29udm9sdXRpb24tdGVzdGluZy5qcworKysg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvY29udm9sdXRpb24tdGVzdGluZy5qcwpA
QCAtNCwxMSArNCw2IEBAIHZhciByZW5kZXJMZW5ndGhTZWNvbmRzID0gODsKIHZhciBwdWxzZUxl
bmd0aFNlY29uZHMgPSAxOwogdmFyIHB1bHNlTGVuZ3RoRnJhbWVzID0gcHVsc2VMZW5ndGhTZWNv
bmRzICogc2FtcGxlUmF0ZTsKIAotLy8gVGhlIGNvbnZvbHZlciBoYXMgYSBsYXRlbmN5IG9mIDEy
OCBzYW1wbGVzIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4KLS8vIFdlIG5lZWQgdG8gdGFrZSB0aGlz
IGludG8gYWNjb3VudCB3aGVuIHZlcmlmeWluZyB0aGUgb3V0cHV0IG9mIHRoZQotLy8gY29udm9s
dmVyLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTY0Lgot
dmFyIGNvbnZvbHZlRGVsYXlTYW1wbGVzID0gMTI4OwotCiBmdW5jdGlvbiBjcmVhdGVTcXVhcmVQ
dWxzZUJ1ZmZlcihjb250ZXh0LCBzYW1wbGVGcmFtZUxlbmd0aCkgewogICAgIHZhciBhdWRpb0J1
ZmZlciA9IGNvbnRleHQuY3JlYXRlQnVmZmVyKDEsIHNhbXBsZUZyYW1lTGVuZ3RoLCBjb250ZXh0
LnNhbXBsZVJhdGUpOwogCkBAIC00MSwyNyArMzYsNiBAQCBmdW5jdGlvbiBjcmVhdGVUcmlhbmds
ZVB1bHNlQnVmZmVyKGNvbnRleHQsIHNhbXBsZUZyYW1lTGVuZ3RoKSB7CiAgICAgcmV0dXJuIGF1
ZGlvQnVmZmVyOwogfQogCi0vLyBWZXJpZnkgdGhhdCB0aGUgaW5pdGlhbCBsYXRlbmN5IG9mIHRo
ZSBjb252b2x2ZXIgaXMgZXhhY3RseSB6ZXJvLgotLy8gUmV0dXJuIHRydWUgaWYgc28uCi1mdW5j
dGlvbiBjaGVja0xhdGVuY3koZGF0YSkgewotICAgIHZhciBpc1plcm8gPSB0cnVlOwotCi0gICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBjb252b2x2ZURlbGF5U2FtcGxlczsgKytpKSB7Ci0gICAgICAg
IGlmIChkYXRhW2ldICE9IDApIHsKLSAgICAgICAgICAgIGlzWmVybyA9IGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaXNaZXJvKSB7Ci0gICAg
ICAgIHRlc3RQYXNzZWQoIkluaXRpYWwgbGF0ZW5jeSBvZiBjb252b2x2ZXIgaXMgc2lsZW50LiIp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIkluaXRpYWwgbGF0ZW5jeSBvZiBj
b252b2x2ZXIgaXMgbm90IHNpbGVudC4iKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaXNaZXJvOwot
fQotCiBmdW5jdGlvbiBsb2cxMCh4KSB7CiAgIHJldHVybiBNYXRoLmxvZyh4KS9NYXRoLkxOMTA7
CiB9CkBAIC03OSw3ICs1Myw3IEBAIGZ1bmN0aW9uIGNoZWNrVHJpYW5ndWxhclB1bHNlKHJlbmRl
cmVkLCByZWZlcmVuY2UpIHsKICAgICB2YXIgbWF4RGVsdGFJbmRleCA9IDA7CiAKICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHJlZmVyZW5jZS5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgZGlm
ZiA9IHJlbmRlcmVkW2kgKyBjb252b2x2ZURlbGF5U2FtcGxlc10gLSByZWZlcmVuY2VbaV07Cisg
ICAgICAgIHZhciBkaWZmID0gcmVuZGVyZWRbaV0gLSByZWZlcmVuY2VbaV07CiAgICAgICAgIHZh
ciB4ID0gTWF0aC5hYnMoZGlmZik7CiAgICAgICAgIGlmICh4ID4gbWF4RGVsdGEpIHsKICAgICAg
ICAgICAgIG1heERlbHRhID0geDsKQEAgLTExMSw3ICs4NSw3IEBAIGZ1bmN0aW9uIGNoZWNrVGFp
bDEoZGF0YSwgcmVmZXJlbmNlLCBicmVha3BvaW50KSB7CiAgICAgdmFyIGlzWmVybyA9IHRydWU7
CiAgICAgdmFyIHRhaWwxTWF4ID0gMDsKIAotICAgIGZvciAodmFyIGkgPSByZWZlcmVuY2UubGVu
Z3RoICsgY29udm9sdmVEZWxheVNhbXBsZXM7IGkgPCByZWZlcmVuY2UubGVuZ3RoICsgYnJlYWtw
b2ludDsgKytpKSB7CisgICAgZm9yICh2YXIgaSA9IHJlZmVyZW5jZS5sZW5ndGg7IGkgPCByZWZl
cmVuY2UubGVuZ3RoICsgYnJlYWtwb2ludDsgKytpKSB7CiAgICAgICAgIHZhciBtYWcgPSBNYXRo
LmFicyhkYXRhW2ldKTsKICAgICAgICAgaWYgKG1hZyA+IHRhaWwxTWF4KSB7CiAgICAgICAgICAg
ICB0YWlsMU1heCA9IG1hZzsKQEAgLTE3MywxMSArMTQ3LDYgQEAgZnVuY3Rpb24gY2hlY2tDb252
b2x2ZWRSZXN1bHQodHJpYW5nbGVQdWxzZSkgewogICAgIAogICAgICAgICB2YXIgc3VjY2VzcyA9
IHRydWU7CiAgICAgCi0gICAgICAgIC8vIFZlcmlmeSB0aGUgaW5pdGlhbCBwYXJ0IGlzIGV4YWN0
bHkgemVybyBiZWNhdXNlIG9mIHRoZQotICAgICAgICAvLyBsYXRlbmN5IGluIHRoZSBjb252b2x2
ZXIuCi0KLSAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgY2hlY2tMYXRlbmN5KHJlbmRlcmVk
RGF0YSk7Ci0KICAgICAgICAgLy8gVmVyaWZ5IHRoZSB0cmlhbmd1bGFyIHB1bHNlIGlzIGFjdHVh
bGx5IHRyaWFuZ3VsYXIuCiAKICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgY2hlY2tUcmlh
bmd1bGFyUHVsc2UocmVuZGVyZWREYXRhLCByZWZlcmVuY2VEYXRhKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129211</attachid>
            <date>2012-02-28 00:52:25 -0800</date>
            <delta_ts>2012-03-01 23:22:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75564-20120228165513.patch</filename>
            <type>text/plain</type>
            <size>34861</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MDg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTRjY2M0YzJhOTU5YjM1
MWFhMWIyYzU5OGRlYWRhOWVkMDIyM2U1Yy4uM2NmMTFiNmJlZGQyZjE2ZWE5YjQ4NGE1YmMxNmFm
ZWE4YzhmM2ZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAyLTI4ICBYaW5n
bmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIENvbnZvbHZlck5v
ZGUgc2hvdWxkIG5vdCBpbmN1ciBwcm9jZXNzaW5nIGxhdGVuY3kKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTY0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBEaXJlY3RDb252b2x2ZXIgaW5z
dGVhZCBvZiBGRlRDb252b2x2ZXIgZm9yIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSBsZWFkaW5nIHBv
cnRpb24gb2YgaW1wdWxzZSByZXNwb25zZS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0Q29udm9sdmVyOjpEaXJlY3RD
b252b2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0Q29udm9sdmVyOjpwcm9jZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdENvbnZvbHZlcjo6cmVzZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoRGlyZWN0Q29udm9sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdENv
bnZvbHZlcjo6Y29udm9sdmVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmJD
b252b2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpSZXZlcmJD
b252b2x2ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJldmVyYkNvbnZvbHZlclN0YWdlOjpSZXZlcmJDb252b2x2ZXJTdGFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXJTdGFnZTo6cHJvY2Vzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXJTdGFnZTo6cmVzZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFJldmVyYkNvbnZvbHZlclN0YWdlKToKKwogMjAxMi0wMi0yOCAgTm9lbCBHb3Jk
b24gIDxub2VsLmdvcmRvbkBnbWFpbC5jb20+CiAKICAgICAgICAgRml4IGNvbW1lbnQgYWJvdXQg
UkdCIHN3aXp6bGUgZGVjb2RpbmcgYW5kIEFkb2JlIHRyYW5zZm9ybT0wIGltYWdlcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggOWFkYTQ0ZDFkYjAzODhhM2QwNGZjOWE1Mzk5OGE1
YWY5Y2UxMWY2Yy4uN2IxYTFkMTA3OGFhZWVlOTNlNGQ1NzUyYTExNDQ4NDI4NDE5NDdkZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC01NDQ5LDYgKzU0NDksOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0VxdWFsUG93ZXJQ
YW5uZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZUQ29udm9sdmVyLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZUQ29udm9sdmVyLmggXAorCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0ZGVEZyYW1lLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZG
VEZyYW1lU3R1Yi5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDQ4NmFjNDY0MTJhYzg0Njc4MDgz
ODA5NWVhYTc0MzgyMDJlOWY4ZDUuLjU3MDJhNDIwY2E1YjNiNGM3MTM2MmFhZjhlZGYxYzUxYjQ4
NzQ4ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI4ODMsNiArMjg4Myw4IEBACiAgICAgICAgICAg
ICAncGxhdGZvcm0vYXVkaW8vRXF1YWxQb3dlclBhbm5lci5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9hdWRpby9GRlRDb252b2x2ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRp
by9GRlRDb252b2x2ZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29u
dm9sdmVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29udm9sdmVy
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vYXVkaW8vRkZURnJhbWUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
YXVkaW8vRkZURnJhbWVTdHViLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vRGlyZWN0Q29udm9sdmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjdlMmI0NjNkMGVhODEwM2M0
OTZlOWViNjI3YmNlMzg3OTFlYjVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29udm9sdmVyLmNwcApAQCAtMCwwICsxLDQxMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkRp
cmVjdENvbnZvbHZlci5oIgorCisjaW5jbHVkZSAiVmVjdG9yTWF0aC5oIgorCisjaW5jbHVkZSA8
c3RkaW8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgVmVjdG9y
TWF0aDsKKyAgICAKK0RpcmVjdENvbnZvbHZlcjo6RGlyZWN0Q29udm9sdmVyKHNpemVfdCBrZXJu
ZWxTaXplKQorICAgIDogbV9rZXJuZWxTaXplKGtlcm5lbFNpemUpCisgICAgLCBtX2lucHV0QnVm
ZmVyKGtlcm5lbFNpemUgKiAyKQorICAgICwgbV9sYXN0T3ZlcmxhcEJ1ZmZlcihrZXJuZWxTaXpl
KQoreworfQorCit2b2lkIERpcmVjdENvbnZvbHZlcjo6cHJvY2VzcyhBdWRpb0Zsb2F0QXJyYXkq
IGNvbnZvbHZlS2VybmVsLCBjb25zdCBmbG9hdCogc291cmNlUCwgZmxvYXQqIGRlc3RQLCBzaXpl
X3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBmb3IgSVBQLCBy
ZXZlcmIgZnVuY3Rpb24gaW4gaXBwIGxpYnJhcnkgY2FuIGJlIHVzZWQgaGVyZS4KKworICAgIC8v
IE9ubHkgc3VwcG9ydCBmcmFtZXNUb1Byb2Nlc3MgPT0gbV9rZXJuZWxTaXplCisgICAgQVNTRVJU
KGZyYW1lc1RvUHJvY2VzcyA9PSBtX2tlcm5lbFNpemUpOworICAgIGlmIChmcmFtZXNUb1Byb2Nl
c3MgIT0gbV9rZXJuZWxTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3Qga2VybmVs
U2l6ZSA9IGNvbnZvbHZlS2VybmVsLT5zaXplKCk7CisKKyAgICAvLyBrZXJuZWxTaXplIG11c3Qg
ZXVxYWwgdG8gbV9rZXJuZWxTaXplCisgICAgQVNTRVJUKGtlcm5lbFNpemUgPT0gbV9rZXJuZWxT
aXplKTsKKyAgICBpZiAoa2VybmVsU2l6ZSAhPSBtX2tlcm5lbFNpemUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGZsb2F0KiBrZXJuZWxQID0gY29udm9sdmVLZXJuZWwtPmRhdGEoKTsKKworICAg
IC8vIENvcHkgc2FtcGxlcyB0byBpbnB1dCBidWZmZXIKKyAgICBmbG9hdCogaW5wdXRQID0gbV9p
bnB1dEJ1ZmZlci5kYXRhKCk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2sKKyAgICBib29sIGlzQ29w
eUdvb2QgPSBrZXJuZWxQICYmIHNvdXJjZVAgJiYgaW5wdXRQICYmIGRlc3RQOworICAgIEFTU0VS
VChpc0NvcHlHb29kKTsKKyAgICBpZiAoIWlzQ29weUdvb2QpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBtZW1jcHkoaW5wdXRQLCBzb3VyY2VQLCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Q
cm9jZXNzKTsKKworI2RlZmluZSBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgICAgICAg
ICAgXAorICAgICAgICBzdW0gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8PSBpOyBqKyspICAgICAgICAgXAorICAgICAg
ICAgICAgc3VtICs9IGlucHV0UFtpIC0gal0gKiBrZXJuZWxQW2pdOyAgXAorICAgICAgICBkZXN0
UFtpKytdID0gc3VtOworICAgICAgICAKKyAgICAvLyAxc3QgaGFsZiBvZiBjb252b2x2aW5nCisg
ICAgc2l6ZV90IGkgPSAwOworICAgIGZsb2F0IHN1bSA9IDA7CisKKyAgICAvLyBGSVhNRTogU1NF
IG9wdGltaXphdGlvbiBtYXkgYmUgYXBwbGllZCBoZXJlLgorICAgIGlmIChrZXJuZWxTaXplID09
IDEyOCkgeworICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMQorICAg
ICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMgorICAgICAgICBGSVJTVF9I
QUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMworICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZF
X09ORV9TQU1QTEUgLy8gNAorICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gNQorICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gNgorICAgICAg
ICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gNworICAgICAgICBGSVJTVF9IQUxG
X0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gOAorICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09O
RV9TQU1QTEUgLy8gOQorICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8g
MTAKKworICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTEKKyAgICAg
ICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDEyCisgICAgICAgIEZJUlNUX0hB
TEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMworICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZF
X09ORV9TQU1QTEUgLy8gMTQKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExF
IC8vIDE1CisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNgorICAg
ICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTcKKyAgICAgICAgRklSU1Rf
SEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDE4CisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyAxOQorICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gMjAKKworICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjEK
KyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDIyCisgICAgICAgIEZJ
UlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyMworICAgICAgICBGSVJTVF9IQUxGX0NP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMjQKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVf
U0FNUExFIC8vIDI1CisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAy
NgorICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjcKKyAgICAgICAg
RklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDI4CisgICAgICAgIEZJUlNUX0hBTEZf
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyAyOQorICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09O
RV9TQU1QTEUgLy8gMzAKKworICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gMzEKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDMyCisgICAg
ICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzMworICAgICAgICBGSVJTVF9I
QUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzQKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xW
RV9PTkVfU0FNUExFIC8vIDM1CisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyAzNgorICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzcKKyAg
ICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDM4CisgICAgICAgIEZJUlNU
X0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzOQorICAgICAgICBGSVJTVF9IQUxGX0NPTlZP
TFZFX09ORV9TQU1QTEUgLy8gNDAKKworICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9T
QU1QTEUgLy8gNDEKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDQy
CisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0MworICAgICAgICBG
SVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDQKKyAgICAgICAgRklSU1RfSEFMRl9D
T05WT0xWRV9PTkVfU0FNUExFIC8vIDQ1CisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyA0NgorICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8g
NDcKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ4CisgICAgICAg
IEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0OQorICAgICAgICBGSVJTVF9IQUxG
X0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTAKKworICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZF
X09ORV9TQU1QTEUgLy8gNTEKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExF
IC8vIDUyCisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1MworICAg
ICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTQKKyAgICAgICAgRklSU1Rf
SEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDU1CisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyA1NgorICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gNTcKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDU4Cisg
ICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1OQorICAgICAgICBGSVJT
VF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjAKKworICAgICAgICBGSVJTVF9IQUxGX0NP
TlZPTFZFX09ORV9TQU1QTEUgLy8gNjEKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVf
U0FNUExFIC8vIDYyCisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA2
MworICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjQKKyAgICAgICAg
RklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDY1CisgICAgICAgIEZJUlNUX0hBTEZf
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyA2NgorICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09O
RV9TQU1QTEUgLy8gNjcKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8v
IDY4CisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA2OQorICAgICAg
ICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gNzAKKworICAgICAgICBGSVJTVF9I
QUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gNzEKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xW
RV9PTkVfU0FNUExFIC8vIDcyCisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyA3MworICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gNzQKKyAg
ICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDc1CisgICAgICAgIEZJUlNU
X0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3NgorICAgICAgICBGSVJTVF9IQUxGX0NPTlZP
TFZFX09ORV9TQU1QTEUgLy8gNzcKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FN
UExFIC8vIDc4CisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3OQor
ICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gODAKKworICAgICAgICBG
SVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gODEKKyAgICAgICAgRklSU1RfSEFMRl9D
T05WT0xWRV9PTkVfU0FNUExFIC8vIDgyCisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyA4MworICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8g
ODQKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDg1CisgICAgICAg
IEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA4NgorICAgICAgICBGSVJTVF9IQUxG
X0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gODcKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9P
TkVfU0FNUExFIC8vIDg4CisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyA4OQorICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTAKKworICAg
ICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTEKKyAgICAgICAgRklSU1Rf
SEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDkyCisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyA5MworICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gOTQKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDk1Cisg
ICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA5NgorICAgICAgICBGSVJT
VF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTcKKyAgICAgICAgRklSU1RfSEFMRl9DT05W
T0xWRV9PTkVfU0FNUExFIC8vIDk4CisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyA5OQorICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTAw
CisKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDEwMQorICAgICAg
ICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTAyCisgICAgICAgIEZJUlNUX0hB
TEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMDMKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xW
RV9PTkVfU0FNUExFIC8vIDEwNAorICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gMTA1CisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMDYK
KyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDEwNworICAgICAgICBG
SVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTA4CisgICAgICAgIEZJUlNUX0hBTEZf
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMDkKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9P
TkVfU0FNUExFIC8vIDExMAorCisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyAxMTEKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDExMgor
ICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTEzCisgICAgICAgIEZJ
UlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMTQKKyAgICAgICAgRklSU1RfSEFMRl9D
T05WT0xWRV9PTkVfU0FNUExFIC8vIDExNQorICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09O
RV9TQU1QTEUgLy8gMTE2CisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAxMTcKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDExOAorICAg
ICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTE5CisgICAgICAgIEZJUlNU
X0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMjAKKworICAgICAgICBGSVJTVF9IQUxGX0NP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMTIxCisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyAxMjIKKyAgICAgICAgRklSU1RfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8v
IDEyMworICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTI0CisgICAg
ICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMjUKKyAgICAgICAgRklSU1Rf
SEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDEyNgorICAgICAgICBGSVJTVF9IQUxGX0NPTlZP
TFZFX09ORV9TQU1QTEUgLy8gMTI3CisgICAgICAgIEZJUlNUX0hBTEZfQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyAxMjgKKyAgICB9IGVsc2UgeworICAgICAgICB3aGlsZSAoaSA8IGtlcm5lbFNpemUp
IHsKKyAgICAgICAgICAgIC8vIE5vbi1vcHRpbWl6ZWQgdXNpbmcgYWN0dWFsIHdoaWxlIGxvb3Au
CisgICAgICAgICAgICBGSVJTVF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZsb2F0KiBvdmVybGFwQnVmZmVyUCA9IG1fbGFzdE92ZXJsYXBCdWZmZXIu
ZGF0YSgpOworCisgICAgLy8gT3ZlcmxhcC1hZGQgd2l0aCAybmQgaGFsZiBvZiBsYXN0IHByb2Nl
c3NpbmcuCisgICAgdmFkZChkZXN0UCwgMSwgb3ZlcmxhcEJ1ZmZlclAsIDEsIGRlc3RQLCAxLCBm
cmFtZXNUb1Byb2Nlc3MpOworCisjZGVmaW5lIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1Q
TEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzdW0gPSAwOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyBrZXJuZWxTaXplLCBrID0gMDsgayA8IGtlcm5l
bFNpemU7IC0taiwgKytrKSBcCisgICAgICAgICAgICBzdW0gKz0gaW5wdXRQW2pdICoga2VybmVs
UFtrXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBvdmVybGFwQnVm
ZmVyUFtpKytdID0gc3VtOworCisgICAgLy8gMm5kIGhhbGYgb2YgY29udm9sdmluZworICAgIGkg
PSAwOworCisgICAgLy8gRklYTUU6IFNTRSBvcHRpbWl6YXRpb24gbWF5IGJlIGFwcGxpZWQgaGVy
ZS4KKyAgICBpZiAoa2VybmVsU2l6ZSA9PSAxMjgpIHsKKyAgICAgICAgU0VDT05EX0hBTEZfQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyAxCisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9T
QU1QTEUgLy8gMgorICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDMK
KyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0CisgICAgICAgIFNF
Q09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gNQorICAgICAgICBTRUNPTkRfSEFMRl9D
T05WT0xWRV9PTkVfU0FNUExFIC8vIDYKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyA3CisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8g
OAorICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDkKKyAgICAgICAg
U0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMAorCisgICAgICAgIFNFQ09ORF9I
QUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTEKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyAxMgorICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FN
UExFIC8vIDEzCisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTQK
KyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNQorICAgICAgICBT
RUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDE2CisgICAgICAgIFNFQ09ORF9IQUxG
X0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTcKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVf
T05FX1NBTVBMRSAvLyAxOAorICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExF
IC8vIDE5CisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjAKKwor
ICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDIxCisgICAgICAgIFNF
Q09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjIKKyAgICAgICAgU0VDT05EX0hBTEZf
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyAyMworICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9P
TkVfU0FNUExFIC8vIDI0CisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gMjUKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyNgorICAg
ICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDI3CisgICAgICAgIFNFQ09O
RF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjgKKyAgICAgICAgU0VDT05EX0hBTEZfQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyAyOQorICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVf
U0FNUExFIC8vIDMwCisKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAzMQorICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDMyCisgICAg
ICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzMKKyAgICAgICAgU0VDT05E
X0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzNAorICAgICAgICBTRUNPTkRfSEFMRl9DT05W
T0xWRV9PTkVfU0FNUExFIC8vIDM1CisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9T
QU1QTEUgLy8gMzYKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAz
NworICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDM4CisgICAgICAg
IFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzkKKyAgICAgICAgU0VDT05EX0hB
TEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0MAorCisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZP
TFZFX09ORV9TQU1QTEUgLy8gNDEKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyA0MgorICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDQz
CisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDQKKyAgICAgICAg
U0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0NQorICAgICAgICBTRUNPTkRfSEFM
Rl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ2CisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZF
X09ORV9TQU1QTEUgLy8gNDcKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyA0OAorICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ5Cisg
ICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTAKKworICAgICAgICBT
RUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDUxCisgICAgICAgIFNFQ09ORF9IQUxG
X0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTIKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVf
T05FX1NBTVBMRSAvLyA1MworICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExF
IC8vIDU0CisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTUKKyAg
ICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1NgorICAgICAgICBTRUNP
TkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDU3CisgICAgICAgIFNFQ09ORF9IQUxGX0NP
TlZPTFZFX09ORV9TQU1QTEUgLy8gNTgKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyA1OQorICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8v
IDYwCisKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA2MQorICAg
ICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDYyCisgICAgICAgIFNFQ09O
RF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjMKKyAgICAgICAgU0VDT05EX0hBTEZfQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyA2NAorICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVf
U0FNUExFIC8vIDY1CisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8g
NjYKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA2NworICAgICAg
ICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDY4CisgICAgICAgIFNFQ09ORF9I
QUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjkKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyA3MAorCisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9T
QU1QTEUgLy8gNzEKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3
MgorICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDczCisgICAgICAg
IFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gNzQKKyAgICAgICAgU0VDT05EX0hB
TEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3NQorICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xW
RV9PTkVfU0FNUExFIC8vIDc2CisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gNzcKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3OAor
ICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDc5CisgICAgICAgIFNF
Q09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gODAKKworICAgICAgICBTRUNPTkRfSEFM
Rl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDgxCisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZF
X09ORV9TQU1QTEUgLy8gODIKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyA4MworICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDg0Cisg
ICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gODUKKyAgICAgICAgU0VD
T05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA4NgorICAgICAgICBTRUNPTkRfSEFMRl9D
T05WT0xWRV9PTkVfU0FNUExFIC8vIDg3CisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09O
RV9TQU1QTEUgLy8gODgKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyA4OQorICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDkwCisKKyAg
ICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA5MQorICAgICAgICBTRUNP
TkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDkyCisgICAgICAgIFNFQ09ORF9IQUxGX0NP
TlZPTFZFX09ORV9TQU1QTEUgLy8gOTMKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyA5NAorICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8v
IDk1CisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTYKKyAgICAg
ICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA5NworICAgICAgICBTRUNPTkRf
SEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDk4CisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZP
TFZFX09ORV9TQU1QTEUgLy8gOTkKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyAxMDAKKworICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8v
IDEwMQorICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDEwMgorICAg
ICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDEwMworICAgICAgICBTRUNP
TkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDEwNAorICAgICAgICBTRUNPTkRfSEFMRl9D
T05WT0xWRV9PTkVfU0FNUExFIC8vIDEwNQorICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9P
TkVfU0FNUExFIC8vIDEwNgorICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExF
IC8vIDEwNworICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDEwOAor
ICAgICAgICBTRUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDEwOQorICAgICAgICBT
RUNPTkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFIC8vIDExMAorCisgICAgICAgIFNFQ09ORF9I
QUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTExCisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZP
TFZFX09ORV9TQU1QTEUgLy8gMTEyCisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9T
QU1QTEUgLy8gMTEzCisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8g
MTE0CisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTE1CisgICAg
ICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTE2CisgICAgICAgIFNFQ09O
RF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTE3CisgICAgICAgIFNFQ09ORF9IQUxGX0NP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMTE4CisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09O
RV9TQU1QTEUgLy8gMTE5CisgICAgICAgIFNFQ09ORF9IQUxGX0NPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gMTIwCisKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMjEK
KyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMjIKKyAgICAgICAg
U0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMjMKKyAgICAgICAgU0VDT05EX0hB
TEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMjQKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyAxMjUKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyAxMjYKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAx
MjcKKyAgICAgICAgU0VDT05EX0hBTEZfQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMjgKKyAgICB9
IGVsc2UgeworICAgICAgICB3aGlsZSAoaSA8IGtlcm5lbFNpemUpIHsKKyAgICAgICAgICAgIC8v
IE5vbi1vcHRpbWl6ZWQgdXNpbmcgYWN0dWFsIHdoaWxlIGxvb3AuCisgICAgICAgICAgICBTRUNP
TkRfSEFMRl9DT05WT0xWRV9PTkVfU0FNUExFCisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
RGlyZWN0Q29udm9sdmVyOjpyZXNldCgpCit7CisgICAgbV9pbnB1dEJ1ZmZlci56ZXJvKCk7Cisg
ICAgbV9sYXN0T3ZlcmxhcEJ1ZmZlci56ZXJvKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhNzBjYTU0MGM0Zjk0
NTIzYzE5ZWMzNzBhYmFiNGY1NjBjNjZiMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuaApAQCAtMCwwICsxLDU4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIERpcmVjdENvbnZvbHZlcl9oCisjZGVmaW5lIERpcmVjdENvbnZvbHZlcl9oCisKKyNp
bmNsdWRlICJBdWRpb0FycmF5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGly
ZWN0Q29udm9sdmVyIHsKK3B1YmxpYzoKKyAgICAvLyBPbmx5IHN1cHBvcnQga2VybmVsU2l6ZSA9
IGZyYW1lc1RvUHJvY2Vzcy4KKyAgICBEaXJlY3RDb252b2x2ZXIoc2l6ZV90IGtlcm5lbFNpemUp
OworCisgICAgdm9pZCBwcm9jZXNzKEF1ZGlvRmxvYXRBcnJheSogY29udm9sdmVLZXJuZWwsIGNv
bnN0IGZsb2F0KiBzb3VyY2VQLCBmbG9hdCogZGVzdFAsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3Mp
OworCisgICAgdm9pZCByZXNldCgpOworCisgICAgc2l6ZV90IGtlcm5lbFNpemUoKSBjb25zdCB7
IHJldHVybiBtX2tlcm5lbFNpemU7IH0KKworcHJpdmF0ZToKKyAgICBzaXplX3QgbV9rZXJuZWxT
aXplOworCisgICAgQXVkaW9GbG9hdEFycmF5IG1faW5wdXRCdWZmZXI7CisKKyAgICAvLyBTYXZl
cyB0aGUgMm5kIGhhbGYgb2YgdGhlIGNvbnZvbHZpbmcgYnVmZmVyLCBzbyB3ZSBjYW4gZG8gYW4g
b3ZlcmxhcC1hZGQgd2l0aCB0aGUgMXN0IGhhbGYgb2YgdGhlIG5leHQgb25lCisgICAgQXVkaW9G
bG9hdEFycmF5IG1fbGFzdE92ZXJsYXBCdWZmZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBEaXJlY3RDb252b2x2ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKaW5kZXggYzZhYjU0ZThlZjdhNzkx
OGZiNDk0NmU3MzIxYjY2OWFkNGY2NTA0MS4uMjAyNzYwNGJkMTg4ZjRiN2E3YmY1OTAyYTIzM2M1
YWQzN2Y1ZWI3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2
ZXJiQ29udm9sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZl
cmJDb252b2x2ZXIuY3BwCkBAIC04NCw4ICs4NCw3IEBAIFJldmVyYkNvbnZvbHZlcjo6UmV2ZXJi
Q29udm9sdmVyKEF1ZGlvQ2hhbm5lbCogaW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVuZGVyU2xp
CiAgICAgY29uc3QgZmxvYXQqIHJlc3BvbnNlID0gaW1wdWxzZVJlc3BvbnNlLT5kYXRhKCk7CiAg
ICAgc2l6ZV90IHRvdGFsUmVzcG9uc2VMZW5ndGggPSBpbXB1bHNlUmVzcG9uc2UtPmxlbmd0aCgp
OwogCi0gICAgLy8gQmVjYXVzZSB3ZSdyZSBub3QgdXNpbmcgZGlyZWN0LWNvbnZvbHV0aW9uIGlu
IHRoZSBsZWFkaW5nIHBvcnRpb24sIHRoZSByZXZlcmIgaGFzIGFuIG92ZXJhbGwgbGF0ZW5jeSBv
ZiBoYWxmIHRoZSBmaXJzdC1zdGFnZSBGRlQgc2l6ZQotICAgIHNpemVfdCByZXZlcmJUb3RhbExh
dGVuY3kgPSBtX21pbkZGVFNpemUgLyAyOworICAgIHNpemVfdCByZXZlcmJUb3RhbExhdGVuY3kg
PSAwOwogCiAgICAgc2l6ZV90IHN0YWdlT2Zmc2V0ID0gMDsKICAgICBpbnQgaSA9IDA7CkBAIC0x
MDEsNyArMTAwLDE0IEBAIFJldmVyYkNvbnZvbHZlcjo6UmV2ZXJiQ29udm9sdmVyKEF1ZGlvQ2hh
bm5lbCogaW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVuZGVyU2xpCiAgICAgICAgIC8vIFRoaXMg
InN0YWdnZXJzIiB0aGUgdGltZSB3aGVuIGVhY2ggRkZUIGhhcHBlbnMgc28gdGhleSBkb24ndCBh
bGwgaGFwcGVuIGF0IHRoZSBzYW1lIHRpbWUKICAgICAgICAgaW50IHJlbmRlclBoYXNlID0gY29u
dm9sdmVyUmVuZGVyUGhhc2UgKyBpICogcmVuZGVyU2xpY2VTaXplOwogCi0gICAgICAgIE93blB0
cjxSZXZlcmJDb252b2x2ZXJTdGFnZT4gc3RhZ2UgPSBhZG9wdFB0cihuZXcgUmV2ZXJiQ29udm9s
dmVyU3RhZ2UocmVzcG9uc2UsIHRvdGFsUmVzcG9uc2VMZW5ndGgsIHJldmVyYlRvdGFsTGF0ZW5j
eSwgc3RhZ2VPZmZzZXQsIHN0YWdlU2l6ZSwgZmZ0U2l6ZSwgcmVuZGVyUGhhc2UsIHJlbmRlclNs
aWNlU2l6ZSwgJm1fYWNjdW11bGF0aW9uQnVmZmVyKSk7CisgICAgICAgIE93blB0cjxSZXZlcmJD
b252b2x2ZXJTdGFnZT4gc3RhZ2U7CisgICAgICAgIGlmIChzdGFnZU9mZnNldCkgeworICAgICAg
ICAgICAgc3RhZ2UgPSBhZG9wdFB0cihuZXcgUmV2ZXJiQ29udm9sdmVyU3RhZ2UocmVzcG9uc2Us
IHRvdGFsUmVzcG9uc2VMZW5ndGgsIHJldmVyYlRvdGFsTGF0ZW5jeSwgc3RhZ2VPZmZzZXQsIHN0
YWdlU2l6ZSwgZmZ0U2l6ZSwgcmVuZGVyUGhhc2UsIHJlbmRlclNsaWNlU2l6ZSwgJm1fYWNjdW11
bGF0aW9uQnVmZmVyKSk7CisKKyAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgbmV4dCBGRlQgc2l6
ZQorICAgICAgICAgICAgZmZ0U2l6ZSAqPSAyOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHN0YWdlID0gYWRvcHRQdHIobmV3IFJldmVyYkNvbnZvbHZlclN0YWdlKHJlc3BvbnNlLCB0b3Rh
bFJlc3BvbnNlTGVuZ3RoLCByZXZlcmJUb3RhbExhdGVuY3ksIHN0YWdlT2Zmc2V0LCBzdGFnZVNp
emUsIGZmdFNpemUsIHJlbmRlclBoYXNlLCByZW5kZXJTbGljZVNpemUsICZtX2FjY3VtdWxhdGlv
bkJ1ZmZlciwgdHJ1ZSkpOwogCiAgICAgICAgIGJvb2wgaXNCYWNrZ3JvdW5kU3RhZ2UgPSBmYWxz
ZTsKIApAQCAtMTE0LDggKzEyMCw2IEBAIFJldmVyYkNvbnZvbHZlcjo6UmV2ZXJiQ29udm9sdmVy
KEF1ZGlvQ2hhbm5lbCogaW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVuZGVyU2xpCiAgICAgICAg
IHN0YWdlT2Zmc2V0ICs9IHN0YWdlU2l6ZTsKICAgICAgICAgKytpOwogCi0gICAgICAgIC8vIEZp
Z3VyZSBvdXQgbmV4dCBGRlQgc2l6ZQotICAgICAgICBmZnRTaXplICo9IDI7CiAgICAgICAgIGlm
IChoYXNSZWFsdGltZUNvbnN0cmFpbnQgJiYgIWlzQmFja2dyb3VuZFN0YWdlICYmIGZmdFNpemUg
PiBtX21heFJlYWx0aW1lRkZUU2l6ZSkKICAgICAgICAgICAgIGZmdFNpemUgPSBtX21heFJlYWx0
aW1lRkZUU2l6ZTsKICAgICAgICAgaWYgKGZmdFNpemUgPiBtX21heEZGVFNpemUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oCmluZGV4IDM3MGI4
NzIwNjQ4MjllMWNjZTI5YjZlZDI1NzEyNmM5MGY1NjhiZGUuLjMxMmVhYjU4ZTAxNzdkMGIyMTIz
NTI3MTMwMGEzZmM3ODcyMGIxZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL1JldmVyYkNvbnZvbHZlci5oCkBAIC0zMCw2ICszMCw3IEBACiAjZGVmaW5lIFJldmVyYkNv
bnZvbHZlcl9oCiAKICNpbmNsdWRlICJBdWRpb0FycmF5LmgiCisjaW5jbHVkZSAiRGlyZWN0Q29u
dm9sdmVyLmgiCiAjaW5jbHVkZSAiRkZUQ29udm9sdmVyLmgiCiAjaW5jbHVkZSAiUmV2ZXJiQWNj
dW11bGF0aW9uQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmV2ZXJiQ29udm9sdmVyU3RhZ2UuaCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0
YWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0
YWdlLmNwcAppbmRleCA1M2JiNjUwMDgzMTA2NDcxOTFlMDBhOWRiOTU5YTAzZGE5ZmZlYTJlLi42
ZGJmYzMzNzc5ZmEyNTcyYjZhZGM5MGUyZTM4NGVmNjA0NGJmMTU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXJTdGFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyU3RhZ2UuY3BwCkBA
IC00NCwxOCArNDQsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIFZl
Y3Rvck1hdGg7CiAKIFJldmVyYkNvbnZvbHZlclN0YWdlOjpSZXZlcmJDb252b2x2ZXJTdGFnZShj
b25zdCBmbG9hdCogaW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVzcG9uc2VMZW5ndGgsIHNpemVf
dCByZXZlcmJUb3RhbExhdGVuY3ksIHNpemVfdCBzdGFnZU9mZnNldCwgc2l6ZV90IHN0YWdlTGVu
Z3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBm
ZnRTaXplLCBzaXplX3QgcmVuZGVyUGhhc2UsIHNpemVfdCByZW5kZXJTbGljZVNpemUsIFJldmVy
YkFjY3VtdWxhdGlvbkJ1ZmZlciogYWNjdW11bGF0aW9uQnVmZmVyKQotICAgIDogbV9mZnRLZXJu
ZWwoZmZ0U2l6ZSkKLSAgICAsIG1fYWNjdW11bGF0aW9uQnVmZmVyKGFjY3VtdWxhdGlvbkJ1ZmZl
cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZmZ0
U2l6ZSwgc2l6ZV90IHJlbmRlclBoYXNlLCBzaXplX3QgcmVuZGVyU2xpY2VTaXplLCBSZXZlcmJB
Y2N1bXVsYXRpb25CdWZmZXIqIGFjY3VtdWxhdGlvbkJ1ZmZlciwgYm9vbCBkaXJlY3RNb2RlKQor
ICAgIDogbV9hY2N1bXVsYXRpb25CdWZmZXIoYWNjdW11bGF0aW9uQnVmZmVyKQogICAgICwgbV9h
Y2N1bXVsYXRpb25SZWFkSW5kZXgoMCkKICAgICAsIG1faW5wdXRSZWFkSW5kZXgoMCkKICAgICAs
IG1faW1wdWxzZVJlc3BvbnNlTGVuZ3RoKHJlc3BvbnNlTGVuZ3RoKQorICAgICwgbV9kaXJlY3RN
b2RlKGRpcmVjdE1vZGUpCiB7CiAgICAgQVNTRVJUKGltcHVsc2VSZXNwb25zZSk7CiAgICAgQVNT
RVJUKGFjY3VtdWxhdGlvbkJ1ZmZlcik7Ci0gICAgCi0gICAgbV9mZnRLZXJuZWwuZG9QYWRkZWRG
RlQoaW1wdWxzZVJlc3BvbnNlICsgc3RhZ2VPZmZzZXQsIHN0YWdlTGVuZ3RoKTsKLSAgICBtX2Nv
bnZvbHZlciA9IGFkb3B0UHRyKG5ldyBGRlRDb252b2x2ZXIoZmZ0U2l6ZSkpOworCisgICAgaWYg
KCFtX2RpcmVjdE1vZGUpIHsKKyAgICAgICAgbV9mZnRLZXJuZWwgPSBhZG9wdFB0cihuZXcgRkZU
RnJhbWUoZmZ0U2l6ZSkpOworICAgICAgICBtX2ZmdEtlcm5lbC0+ZG9QYWRkZWRGRlQoaW1wdWxz
ZVJlc3BvbnNlICsgc3RhZ2VPZmZzZXQsIHN0YWdlTGVuZ3RoKTsKKyAgICAgICAgbV9GRlRjb252
b2x2ZXIgPSBhZG9wdFB0cihuZXcgRkZUQ29udm9sdmVyKGZmdFNpemUpKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBtX2RpcmVjdEtlcm5lbCA9IGFkb3B0UHRyKG5ldyBBdWRpb0Zsb2F0QXJyYXko
c3RhZ2VMZW5ndGgpKTsKKyAgICAgICAgbV9kaXJlY3RLZXJuZWwtPmNvcHlUb1JhbmdlKGltcHVs
c2VSZXNwb25zZSArIHN0YWdlT2Zmc2V0LCAwLCBzdGFnZUxlbmd0aCk7CisgICAgICAgIG1fZGly
ZWN0Q29udm9sdmVyID0gYWRvcHRQdHIobmV3IERpcmVjdENvbnZvbHZlcihzdGFnZUxlbmd0aCkp
OworICAgIH0KICAgICBtX3RlbXBvcmFyeUJ1ZmZlci5hbGxvY2F0ZShyZW5kZXJTbGljZVNpemUp
OwogCiAgICAgLy8gVGhlIGNvbnZvbHV0aW9uIHN0YWdlIGF0IG9mZnNldCBzdGFnZU9mZnNldCBu
ZWVkcyB0byBoYXZlIGEgY29ycmVzcG9uZGluZyBkZWxheSB0byBjYW5jZWwgb3V0IHRoZSBvZmZz
ZXQuCkBAIC0xMzMsNyArMTQwLDEwIEBAIHZvaWQgUmV2ZXJiQ29udm9sdmVyU3RhZ2U6OnByb2Nl
c3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICAgICAg
Ly8gTm93LCBydW4gdGhlIGNvbnZvbHV0aW9uIChpbnRvIHRoZSBkZWxheSBidWZmZXIpLgogICAg
ICAgICAvLyBBbiBleHBlbnNpdmUgRkZUIHdpbGwgaGFwcGVuIGV2ZXJ5IGZmdFNpemUgLyAyIGZy
YW1lcy4KICAgICAgICAgLy8gV2UgcHJvY2VzcyBpbi1wbGFjZSBoZXJlLi4uCi0gICAgICAgIG1f
Y29udm9sdmVyLT5wcm9jZXNzKCZtX2ZmdEtlcm5lbCwgcHJlRGVsYXllZFNvdXJjZSwgdGVtcG9y
YXJ5QnVmZmVyLCBmcmFtZXNUb1Byb2Nlc3MpOworICAgICAgICBpZiAoIW1fZGlyZWN0TW9kZSkK
KyAgICAgICAgICAgIG1fRkZUY29udm9sdmVyLT5wcm9jZXNzKG1fZmZ0S2VybmVsLmdldCgpLCBw
cmVEZWxheWVkU291cmNlLCB0ZW1wb3JhcnlCdWZmZXIsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fZGlyZWN0Q29udm9sdmVyLT5wcm9jZXNzKG1fZGlyZWN0
S2VybmVsLmdldCgpLCBwcmVEZWxheWVkU291cmNlLCB0ZW1wb3JhcnlCdWZmZXIsIGZyYW1lc1Rv
UHJvY2Vzcyk7CiAKICAgICAgICAgLy8gTm93IGFjY3VtdWxhdGUgaW50byByZXZlcmIncyBhY2N1
bXVsYXRpb24gYnVmZmVyLgogICAgICAgICBtX2FjY3VtdWxhdGlvbkJ1ZmZlci0+YWNjdW11bGF0
ZSh0ZW1wb3JhcnlCdWZmZXIsIGZyYW1lc1RvUHJvY2VzcywgJm1fYWNjdW11bGF0aW9uUmVhZElu
ZGV4LCBtX3Bvc3REZWxheUxlbmd0aCk7CkBAIC0xNTQsNyArMTY0LDEwIEBAIHZvaWQgUmV2ZXJi
Q29udm9sdmVyU3RhZ2U6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgc2l6ZV90IGZyYW1l
c1RvUHJvY2VzcykKIAogdm9pZCBSZXZlcmJDb252b2x2ZXJTdGFnZTo6cmVzZXQoKQogewotICAg
IG1fY29udm9sdmVyLT5yZXNldCgpOworICAgIGlmICghbV9kaXJlY3RNb2RlKQorICAgICAgICBt
X0ZGVGNvbnZvbHZlci0+cmVzZXQoKTsKKyAgICBlbHNlCisgICAgICAgIG1fZGlyZWN0Q29udm9s
dmVyLT5yZXNldCgpOwogICAgIG1fcHJlRGVsYXlCdWZmZXIuemVybygpOwogICAgIG1fYWNjdW11
bGF0aW9uUmVhZEluZGV4ID0gMDsKICAgICBtX2lucHV0UmVhZEluZGV4ID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXJTdGFnZS5oCmlu
ZGV4IDk4MTFiYzYwMzIxNjc2NDYwMGM5Y2IxNzI1MTdkZWYxNThhMzZkYzguLjYzZDk0ODNkN2M1
ZGVhZjIzMDZjNzA2MmViNWM2NTJlYWFjNDg5MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyU3RhZ2UuaApAQCAtMzgsNiArMzgsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBSZXZlcmJBY2N1bXVsYXRpb25CdWZmZXI7CiBj
bGFzcyBSZXZlcmJDb252b2x2ZXI7CiBjbGFzcyBGRlRDb252b2x2ZXI7CitjbGFzcyBEaXJlY3RD
b252b2x2ZXI7CiAgICAgCiAvLyBBIFJldmVyYkNvbnZvbHZlclN0YWdlIHJlcHJlc2VudHMgdGhl
IGNvbnZvbHV0aW9uIGFzc29jaWF0ZWQgd2l0aCBhIHN1Yi1zZWN0aW9uIG9mIGEgbGFyZ2UgaW1w
dWxzZSByZXNwb25zZS4KIC8vIEl0IGluY29ycG9yYXRlcyBhIGRlbGF5IGxpbmUgdG8gYWNjb3Vu
dCBmb3IgdGhlIG9mZnNldCBvZiB0aGUgc3ViLXNlY3Rpb24gd2l0aGluIHRoZSBsYXJnZXIgaW1w
dWxzZSByZXNwb25zZS4KQEAgLTQ1LDggKzQ2LDcgQEAgY2xhc3MgUmV2ZXJiQ29udm9sdmVyU3Rh
Z2UgewogcHVibGljOgogICAgIC8vIHJlbmRlclBoYXNlIGlzIHVzZWZ1bCB0byBrbm93IHNvIHRo
YXQgd2UgY2FuIG1hbmlwdWxhdGUgdGhlIHByZSB2ZXJzdXMgcG9zdCBkZWxheSBzbyB0aGF0IHN0
YWdlcyB3aWxsIHBlcmZvcm0KICAgICAvLyB0aGVpciBoZWF2eSB3b3JrIChGRlQgcHJvY2Vzc2lu
Zykgb24gZGlmZmVyZW50IHNsaWNlcyB0byBiYWxhbmNlIHRoZSBsb2FkIGluIGEgcmVhbC10aW1l
IHRocmVhZC4KLSAgICBSZXZlcmJDb252b2x2ZXJTdGFnZShjb25zdCBmbG9hdCogaW1wdWxzZVJl
c3BvbnNlLCBzaXplX3QgcmVzcG9uc2VMZW5ndGgsIHNpemVfdCByZXZlcmJUb3RhbExhdGVuY3ks
IHNpemVfdCBzdGFnZU9mZnNldCwgc2l6ZV90IHN0YWdlTGVuZ3RoLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBmZnRTaXplLCBzaXplX3QgcmVuZGVyUGhhc2UsIHNpemVfdCByZW5k
ZXJTbGljZVNpemUsIFJldmVyYkFjY3VtdWxhdGlvbkJ1ZmZlciogYWNjdW11bGF0aW9uQnVmZmVy
KTsKKyAgICBSZXZlcmJDb252b2x2ZXJTdGFnZShjb25zdCBmbG9hdCogaW1wdWxzZVJlc3BvbnNl
LCBzaXplX3QgcmVzcG9uc2VMZW5ndGgsIHNpemVfdCByZXZlcmJUb3RhbExhdGVuY3ksIHNpemVf
dCBzdGFnZU9mZnNldCwgc2l6ZV90IHN0YWdlTGVuZ3RoLCBzaXplX3QgZmZ0U2l6ZSwgc2l6ZV90
IHJlbmRlclBoYXNlLCBzaXplX3QgcmVuZGVyU2xpY2VTaXplLCBSZXZlcmJBY2N1bXVsYXRpb25C
dWZmZXIqLCBib29sIGRpcmVjdE1vZGUgPSBmYWxzZSk7CiAKICAgICAvLyBXQVJOSU5HOiBmcmFt
ZXNUb1Byb2Nlc3MgbXVzdCBiZSBzdWNoIHRoYXQgaXQgZXZlbmx5IGRpdmlkZXMgdGhlIGRlbGF5
IGJ1ZmZlciBzaXplIChzdGFnZV9vZmZzZXQpLgogICAgIHZvaWQgcHJvY2Vzcyhjb25zdCBmbG9h
dCogc291cmNlLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKQEAgLTU5LDggKzU5LDggQEAgcHVi
bGljOgogICAgIGludCBpbnB1dFJlYWRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRSZWFk
SW5kZXg7IH0KIAogcHJpdmF0ZToKLSAgICBGRlRGcmFtZSBtX2ZmdEtlcm5lbDsKLSAgICBPd25Q
dHI8RkZUQ29udm9sdmVyPiBtX2NvbnZvbHZlcjsKKyAgICBPd25QdHI8RkZURnJhbWU+IG1fZmZ0
S2VybmVsOworICAgIE93blB0cjxGRlRDb252b2x2ZXI+IG1fRkZUY29udm9sdmVyOwogCiAgICAg
QXVkaW9GbG9hdEFycmF5IG1fcHJlRGVsYXlCdWZmZXI7CiAKQEAgLTc2LDYgKzc2LDEwIEBAIHBy
aXZhdGU6CiAgICAgQXVkaW9GbG9hdEFycmF5IG1fdGVtcG9yYXJ5QnVmZmVyOwogCiAgICAgc2l6
ZV90IG1faW1wdWxzZVJlc3BvbnNlTGVuZ3RoOworCisgICAgYm9vbCBtX2RpcmVjdE1vZGU7Cisg
ICAgT3duUHRyPEF1ZGlvRmxvYXRBcnJheT4gbV9kaXJlY3RLZXJuZWw7CisgICAgT3duUHRyPERp
cmVjdENvbnZvbHZlcj4gbV9kaXJlY3RDb252b2x2ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggMTE4YWFiM2FiZjM3MjliZjMyNjhlZmMyOTU1MTBmMjM3YTg0N2JkZC4u
MjA5ZDJkOWZiMGViMWI5ZmYwOWNiZTM0MGRkODFmNDhkMTM1ZWVhOSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE5IEBACisyMDEyLTAyLTI4ICBYaW5nbmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29t
PgorCisgICAgICAgIENvbnZvbHZlck5vZGUgc2hvdWxkIG5vdCBpbmN1ciBwcm9jZXNzaW5nIGxh
dGVuY3kKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1
NTY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmVlZCB0byBjaGVjayB0aGUgaW5pdGlhbCBzaWxlbnQgcGFydCBiZWNhdXNlIHRoZSBsYXRlbmN5
IGlzc3VlIG9mIENvbnZvbHZlck5vZGUgaXMgZml4ZWQuCisKKyAgICAgICAgKiB3ZWJhdWRpby9j
b252b2x1dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYmF1ZGlvL3Jl
c291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzOgorICAgICAgICAoY2hlY2tUcmlhbmd1bGFy
UHVsc2UpOgorICAgICAgICAoY2hlY2tUYWlsMSk6CisgICAgICAgIChjaGVja0NvbnZvbHZlZFJl
c3VsdC5yZXR1cm4udmFyKToKKyAgICAgICAgKGNoZWNrQ29udm9sdmVkUmVzdWx0KToKKwogMjAx
Mi0wMi0yOCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgR1RLIGJhc2VsaW5lcyBmb3IgMjIgbmV3IHRlc3RzLgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8tbW9uby1leHBlY3RlZC50
eHQKaW5kZXggODcwNWY2NjFjM2EyODZjNDg1NzM2Y2E0NWE0NDM3NTNhNTZhNzM1YS4uM2FlMmEw
NDg2Njg5ZDY1YzRlZjZkNjAzNGI2OTVjN2Q2ZWEwMjIxZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0CkBAIC0y
LDcgKzIsNiBAQCBUZXN0cyBDb252b2x2ZXJOb2RlIHByb2Nlc3NpbmcgYSBtb25vIGNoYW5uZWwg
d2l0aCBtb25vIGltcHVsc2UgcmVzcG9uc2UuCiAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
IAotUEFTUyBJbml0aWFsIGxhdGVuY3kgb2YgY29udm9sdmVyIGlzIHNpbGVudC4KIFBBU1MgVHJp
YW5ndWxhciBwb3J0aW9uIG9mIGNvbnZvbHV0aW9uIGlzIGNvcnJlY3QuCiBQQVNTIEZpcnN0IHBh
cnQgb2YgdGFpbCBvZiBjb252b2x1dGlvbiBpcyBzdWZmaWNpZW50bHkgc21hbGwuCiBQQVNTIFJl
bmRlcmVkIHNpZ25hbCBhZnRlciB0YWlsIG9mIGNvbnZvbHV0aW9uIGlzIHNpbGVudC4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5n
LmpzIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRlc3Rpbmcu
anMKaW5kZXggZDdlZjhlYTUxYTk3YTMxMzhmN2Q4Zjk3MDJmMzI0NmMxZWM5MzA2Ny4uYzJjYWJh
MTA2MDFhMjFlOGU3MGJjZjBkNmU0NzI0ZGM2NTI0MTM3OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRlc3RpbmcuanMKKysrIGIvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRlc3RpbmcuanMKQEAgLTQsMTEg
KzQsNiBAQCB2YXIgcmVuZGVyTGVuZ3RoU2Vjb25kcyA9IDg7CiB2YXIgcHVsc2VMZW5ndGhTZWNv
bmRzID0gMTsKIHZhciBwdWxzZUxlbmd0aEZyYW1lcyA9IHB1bHNlTGVuZ3RoU2Vjb25kcyAqIHNh
bXBsZVJhdGU7CiAKLS8vIFRoZSBjb252b2x2ZXIgaGFzIGEgbGF0ZW5jeSBvZiAxMjggc2FtcGxl
cyBpbiB0aGUgaW1wbGVtZW50YXRpb24uCi0vLyBXZSBuZWVkIHRvIHRha2UgdGhpcyBpbnRvIGFj
Y291bnQgd2hlbiB2ZXJpZnlpbmcgdGhlIG91dHB1dCBvZiB0aGUKLS8vIGNvbnZvbHZlci4gU2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTU2NC4KLXZhciBjb252
b2x2ZURlbGF5U2FtcGxlcyA9IDEyODsKLQogZnVuY3Rpb24gY3JlYXRlU3F1YXJlUHVsc2VCdWZm
ZXIoY29udGV4dCwgc2FtcGxlRnJhbWVMZW5ndGgpIHsKICAgICB2YXIgYXVkaW9CdWZmZXIgPSBj
b250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCBzYW1wbGVGcmFtZUxlbmd0aCwgY29udGV4dC5zYW1wbGVS
YXRlKTsKIApAQCAtNDEsMjcgKzM2LDYgQEAgZnVuY3Rpb24gY3JlYXRlVHJpYW5nbGVQdWxzZUJ1
ZmZlcihjb250ZXh0LCBzYW1wbGVGcmFtZUxlbmd0aCkgewogICAgIHJldHVybiBhdWRpb0J1ZmZl
cjsKIH0KIAotLy8gVmVyaWZ5IHRoYXQgdGhlIGluaXRpYWwgbGF0ZW5jeSBvZiB0aGUgY29udm9s
dmVyIGlzIGV4YWN0bHkgemVyby4KLS8vIFJldHVybiB0cnVlIGlmIHNvLgotZnVuY3Rpb24gY2hl
Y2tMYXRlbmN5KGRhdGEpIHsKLSAgICB2YXIgaXNaZXJvID0gdHJ1ZTsKLQotICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgY29udm9sdmVEZWxheVNhbXBsZXM7ICsraSkgewotICAgICAgICBpZiAoZGF0
YVtpXSAhPSAwKSB7Ci0gICAgICAgICAgICBpc1plcm8gPSBmYWxzZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGlzWmVybykgewotICAgICAgICB0ZXN0
UGFzc2VkKCJJbml0aWFsIGxhdGVuY3kgb2YgY29udm9sdmVyIGlzIHNpbGVudC4iKTsKLSAgICB9
IGVsc2UgewotICAgICAgICB0ZXN0RmFpbGVkKCJJbml0aWFsIGxhdGVuY3kgb2YgY29udm9sdmVy
IGlzIG5vdCBzaWxlbnQuIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGlzWmVybzsKLX0KLQogZnVu
Y3Rpb24gbG9nMTAoeCkgewogICByZXR1cm4gTWF0aC5sb2coeCkvTWF0aC5MTjEwOwogfQpAQCAt
NzksNyArNTMsNyBAQCBmdW5jdGlvbiBjaGVja1RyaWFuZ3VsYXJQdWxzZShyZW5kZXJlZCwgcmVm
ZXJlbmNlKSB7CiAgICAgdmFyIG1heERlbHRhSW5kZXggPSAwOwogCiAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCByZWZlcmVuY2UubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIGRpZmYgPSByZW5k
ZXJlZFtpICsgY29udm9sdmVEZWxheVNhbXBsZXNdIC0gcmVmZXJlbmNlW2ldOworICAgICAgICB2
YXIgZGlmZiA9IHJlbmRlcmVkW2ldIC0gcmVmZXJlbmNlW2ldOwogICAgICAgICB2YXIgeCA9IE1h
dGguYWJzKGRpZmYpOwogICAgICAgICBpZiAoeCA+IG1heERlbHRhKSB7CiAgICAgICAgICAgICBt
YXhEZWx0YSA9IHg7CkBAIC0xMTEsNyArODUsNyBAQCBmdW5jdGlvbiBjaGVja1RhaWwxKGRhdGEs
IHJlZmVyZW5jZSwgYnJlYWtwb2ludCkgewogICAgIHZhciBpc1plcm8gPSB0cnVlOwogICAgIHZh
ciB0YWlsMU1heCA9IDA7CiAKLSAgICBmb3IgKHZhciBpID0gcmVmZXJlbmNlLmxlbmd0aCArIGNv
bnZvbHZlRGVsYXlTYW1wbGVzOyBpIDwgcmVmZXJlbmNlLmxlbmd0aCArIGJyZWFrcG9pbnQ7ICsr
aSkgeworICAgIGZvciAodmFyIGkgPSByZWZlcmVuY2UubGVuZ3RoOyBpIDwgcmVmZXJlbmNlLmxl
bmd0aCArIGJyZWFrcG9pbnQ7ICsraSkgewogICAgICAgICB2YXIgbWFnID0gTWF0aC5hYnMoZGF0
YVtpXSk7CiAgICAgICAgIGlmIChtYWcgPiB0YWlsMU1heCkgewogICAgICAgICAgICAgdGFpbDFN
YXggPSBtYWc7CkBAIC0xNzMsMTEgKzE0Nyw2IEBAIGZ1bmN0aW9uIGNoZWNrQ29udm9sdmVkUmVz
dWx0KHRyaWFuZ2xlUHVsc2UpIHsKICAgICAKICAgICAgICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOwog
ICAgIAotICAgICAgICAvLyBWZXJpZnkgdGhlIGluaXRpYWwgcGFydCBpcyBleGFjdGx5IHplcm8g
YmVjYXVzZSBvZiB0aGUKLSAgICAgICAgLy8gbGF0ZW5jeSBpbiB0aGUgY29udm9sdmVyLgotCi0g
ICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNoZWNrTGF0ZW5jeShyZW5kZXJlZERhdGEpOwot
CiAgICAgICAgIC8vIFZlcmlmeSB0aGUgdHJpYW5ndWxhciBwdWxzZSBpcyBhY3R1YWxseSB0cmlh
bmd1bGFyLgogCiAgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNoZWNrVHJpYW5ndWxhclB1
bHNlKHJlbmRlcmVkRGF0YSwgcmVmZXJlbmNlRGF0YSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129828</attachid>
            <date>2012-03-01 23:22:15 -0800</date>
            <delta_ts>2012-03-05 02:26:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75564-20120302152507.patch</filename>
            <type>text/plain</type>
            <size>27030</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWVlZTA5NTFkMzdhYjQz
ZDliMWZmYWI4NTU3NWE2ZTYzM2UzZjRiOC4uOWRiYWE1OGY5ODk4ZDQzMWI1MjJkNDg0NjUxMTIz
MDcxNWU2NjU1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAzLTAxICBYaW5n
bmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIENvbnZvbHZlck5v
ZGUgc2hvdWxkIG5vdCBpbmN1ciBwcm9jZXNzaW5nIGxhdGVuY3kKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTY0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBEaXJlY3RDb252b2x2ZXIgaW5z
dGVhZCBvZiBGRlRDb252b2x2ZXIgZm9yIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSBsZWFkaW5nIHBv
cnRpb24gb2YgaW1wdWxzZSByZXNwb25zZS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0Q29udm9sdmVyOjpEaXJlY3RD
b252b2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0Q29udm9sdmVyOjpwcm9jZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdENvbnZvbHZlcjo6cmVzZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoRGlyZWN0Q29udm9sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdENv
bnZvbHZlcjo6Y29udm9sdmVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmJD
b252b2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpSZXZlcmJD
b252b2x2ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJldmVyYkNvbnZvbHZlclN0YWdlOjpSZXZlcmJDb252b2x2ZXJTdGFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXJTdGFnZTo6cHJvY2Vzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXJTdGFnZTo6cmVzZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFJldmVyYkNvbnZvbHZlclN0YWdlKToKKwogMjAxMi0wMy0wMSAgUGFibG8gRmxv
dXJldCAgPHBhYmxvZkBtb3Rvcm9sYS5jb20+CiAKICAgICAgICAgRml4IGNvZGUgZ2VuZXJhdG9y
cyB0byBjb3JyZWN0bHkgZ3VhcmQgaGVhZGVyIGRlY2xhcmF0aW9ucyB0aGF0IGhhdmUgYSBbQ29u
ZGl0aW9uYWxdIGF0dHJpYnV0ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDk1
NmJiM2E5MzUwMzIwMTQ5NjQ1Zjg3MWNlZTQ5NGM0ODhkMTZjZWQuLjIwNGY3YTY5NGZkMjIxMDNh
MzA3Y2VkNjBkNzlhN2M4NjMzYjc0MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpA
QCAtNTQ0OSw2ICs1NDQ5LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0ZGVENvbnZvbHZlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0ZGVENvbnZvbHZlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9E
aXJlY3RDb252b2x2ZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXJl
Y3RDb252b2x2ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWUu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZVN0dWIuY3BwIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCBhMDY5Y2YyYmNkMDc3ZmZlMzM5ZmI3ZDM5Mjg5Y2NiMGJhMDM1ZGUzLi4wMzQwOTAw
MmQyOWI3MGQ4YzAxN2Q3ZjYzNjRmZjNkYTdhMjhjZjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0y
OTYxLDYgKzI5NjEsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0VxdWFsUG93ZXJQ
YW5uZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vRkZUQ29udm9sdmVyLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vRkZUQ29udm9sdmVyLmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9h
dWRpby9GRlRGcmFtZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1l
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lU3R1Yi5jcHAnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29udm9sdmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTdkM2FiYjY0ZTM2NTA2ZDFkNDZkOWI1MmM4MjJmMjVmMWU1MTBmYgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZl
ci5jcHAKQEAgLTAsMCArMSwyNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJEaXJlY3RDb252b2x2ZXIuaCIKKworI2luY2x1ZGUg
IlZlY3Rvck1hdGguaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordXNpbmcgbmFtZXNwYWNlIFZlY3Rvck1hdGg7CisgICAgCitEaXJlY3RDb252b2x2ZXI6
OkRpcmVjdENvbnZvbHZlcihzaXplX3Qga2VybmVsU2l6ZSkKKyAgICA6IG1fa2VybmVsU2l6ZShr
ZXJuZWxTaXplKQorICAgICwgbV9pbnB1dEJ1ZmZlcihrZXJuZWxTaXplICogMikKK3sKK30KKwor
dm9pZCBEaXJlY3RDb252b2x2ZXI6OnByb2Nlc3MoQXVkaW9GbG9hdEFycmF5KiBjb252b2x2ZUtl
cm5lbCwgY29uc3QgZmxvYXQqIHNvdXJjZVAsIGZsb2F0KiBkZXN0UCwgc2l6ZV90IGZyYW1lc1Rv
UHJvY2VzcykKK3sKKworICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBmb3IgSVBQLCByZXZlcmIgZnVu
Y3Rpb24gaW4gaXBwIGxpYnJhcnkgY2FuIGJlIHVzZWQgaGVyZS4KKworICAgIC8vIE9ubHkgc3Vw
cG9ydCBmcmFtZXNUb1Byb2Nlc3MgPT0gbV9rZXJuZWxTaXplCisgICAgQVNTRVJUKGZyYW1lc1Rv
UHJvY2VzcyA9PSBtX2tlcm5lbFNpemUpOworICAgIGlmIChmcmFtZXNUb1Byb2Nlc3MgIT0gbV9r
ZXJuZWxTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3Qga2VybmVsU2l6ZSA9IGNv
bnZvbHZlS2VybmVsLT5zaXplKCk7CisKKyAgICAvLyBrZXJuZWxTaXplIG11c3QgZXVxYWwgdG8g
bV9rZXJuZWxTaXplCisgICAgQVNTRVJUKGtlcm5lbFNpemUgPT0gbV9rZXJuZWxTaXplKTsKKyAg
ICBpZiAoa2VybmVsU2l6ZSAhPSBtX2tlcm5lbFNpemUpCisgICAgICAgIHJldHVybjsKKworICAg
IGZsb2F0KiBrZXJuZWxQID0gY29udm9sdmVLZXJuZWwtPmRhdGEoKTsKKworICAgIGZsb2F0KiBp
bnB1dFAgPSBtX2lucHV0QnVmZmVyLmRhdGEoKSArIG1fa2VybmVsU2l6ZTsKKworICAgIC8vIFNh
bml0eSBjaGVjaworICAgIGJvb2wgaXNDb3B5R29vZCA9IGtlcm5lbFAgJiYgc291cmNlUCAmJiBk
ZXN0UCAmJiBtX2lucHV0QnVmZmVyLmRhdGEoKTsKKyAgICBBU1NFUlQoaXNDb3B5R29vZCk7Cisg
ICAgaWYgKCFpc0NvcHlHb29kKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQ29weSBz
YW1wbGVzIHRvIDJuZCBoYWxmIG9mIGlucHV0IGJ1ZmZlcgorICAgIG1lbWNweShpbnB1dFAsIHNv
dXJjZVAsIHNpemVvZihmbG9hdCkgKiBmcmFtZXNUb1Byb2Nlc3MpOworCisjZGVmaW5lIENPTlZP
TFZFX09ORV9TQU1QTEUgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzdW0gKz0g
aW5wdXRQW2kgLSBqXSAqIGtlcm5lbFBbal07ICBcCisgICAgICAgICAgICBqKys7CisKKyAgICBz
aXplX3QgaSA9IDA7CisgICAgd2hpbGUgKGkgPCBmcmFtZXNUb1Byb2Nlc3MpIHsKKyAgICAgICAg
c2l6ZV90IGogPSAwOworICAgICAgICBmbG9hdCBzdW0gPSAwOworICAgICAgICAKKyAgICAgICAg
Ly8gRklYTUU6IFNTRSBvcHRpbWl6YXRpb24gbWF5IGJlIGFwcGxpZWQgaGVyZS4KKyAgICAgICAg
aWYgKGtlcm5lbFNpemUgPT0gMTI4KSB7CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMgorICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyAzCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDQKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNQorICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyA2CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDcKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOAorICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyA5CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDEwCisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTEKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gMTMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTQKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTUKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gMTYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTcKKyAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTgKKyAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gMTkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjAK
KworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyMQorICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyAyMgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAyMworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyNAorICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyAyNQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyAyNgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyNworICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyOAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyAyOQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzMAorCisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDMxCisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDMyCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDMzCisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDM0CisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDM1CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDM2
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDM3CisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDM4CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDM5CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQwCisKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gNDIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDMKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDQKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gNDUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDYKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDcKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gNDgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDkKKyAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTAKKworICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyA1MQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1
MgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1MworICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyA1NAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyA1NQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1NgorICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyA1NworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyA1OAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1OQorICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA2MAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDYxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDYyCisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDYzCisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDY0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDY1Cisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDY2CisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDY3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDY4
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDY5CisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDcwCisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gNzEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNzIKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNzMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gNzQKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNzUKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNzYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gNzcKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNzgKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNzkKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gODAKKworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA4MQor
ICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA4MgorICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyA4MworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA4
NAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA4NQorICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyA4NgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyA4NworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA4OAorICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyA4OQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyA5MAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDkxCisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDkyCisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDkzCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDk0CisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDk1CisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDk2CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDk3Cisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDk4CisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDk5CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEw
MAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEwMQorICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMDIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gMTAzCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEwNAorICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMDUKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gMTA2CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEwNwor
ICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMDgKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gMTA5CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDExMAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDExMQorICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMTIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gMTEzCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDExNAorICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMTUKKyAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gMTE2CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEx
NworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMTgKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMTE5CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDEyMAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEyMQorICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMjIKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gMTIzCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEyNAor
ICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMjUKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gMTI2CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDEyNworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMjgKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHdoaWxlIChpIDwga2VybmVsU2l6ZSkgeworICAgICAgICAgICAg
ICAgIC8vIE5vbi1vcHRpbWl6ZWQgdXNpbmcgYWN0dWFsIHdoaWxlIGxvb3AuCisgICAgICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGRlc3RQW2krK10gPSBzdW07CisgICAgfQorCisgICAgLy8gQ29weSAybmQgaGFsZiBvZiBp
bnB1dCBidWZmZXIgdG8gMXN0IGhhbGYuCisgICAgbWVtY3B5KG1faW5wdXRCdWZmZXIuZGF0YSgp
LCBpbnB1dFAsIHNpemVvZihmbG9hdCkgKiBmcmFtZXNUb1Byb2Nlc3MpOworfQorCit2b2lkIERp
cmVjdENvbnZvbHZlcjo6cmVzZXQoKQoreworICAgIG1faW5wdXRCdWZmZXIuemVybygpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29udm9sdmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mNDliNWQ2ZDYxYjk2MjY4N2ViZTRkYjUxODljMGJmODQ2ODZmOTJlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29udm9sdmVy
LmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEaXJlY3RDb252b2x2ZXJfaAorI2RlZmluZSBE
aXJlY3RDb252b2x2ZXJfaAorCisjaW5jbHVkZSAiQXVkaW9BcnJheS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIERpcmVjdENvbnZvbHZlciB7CitwdWJsaWM6CisgICAgLy8gT25s
eSBzdXBwb3J0IGtlcm5lbFNpemUgPSBmcmFtZXNUb1Byb2Nlc3MuCisgICAgRGlyZWN0Q29udm9s
dmVyKHNpemVfdCBrZXJuZWxTaXplKTsKKworICAgIHZvaWQgcHJvY2VzcyhBdWRpb0Zsb2F0QXJy
YXkqIGNvbnZvbHZlS2VybmVsLCBjb25zdCBmbG9hdCogc291cmNlUCwgZmxvYXQqIGRlc3RQLCBz
aXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKworICAgIHZvaWQgcmVzZXQoKTsKKworICAgIHNpemVf
dCBrZXJuZWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxTaXplOyB9CisKK3ByaXZhdGU6
CisgICAgc2l6ZV90IG1fa2VybmVsU2l6ZTsKKworICAgIEF1ZGlvRmxvYXRBcnJheSBtX2lucHV0
QnVmZmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRGlyZWN0
Q29udm9sdmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1Jl
dmVyYkNvbnZvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJD
b252b2x2ZXIuY3BwCmluZGV4IGM2YWI1NGU4ZWY3YTc5MThmYjQ5NDZlNzMyMWI2NjlhZDRmNjUw
NDEuLjIwMjc2MDRiZDE4OGY0YjdhN2JmNTkwMmEyMzNjNWFkMzdmNWViNzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcApAQCAtODQs
OCArODQsNyBAQCBSZXZlcmJDb252b2x2ZXI6OlJldmVyYkNvbnZvbHZlcihBdWRpb0NoYW5uZWwq
IGltcHVsc2VSZXNwb25zZSwgc2l6ZV90IHJlbmRlclNsaQogICAgIGNvbnN0IGZsb2F0KiByZXNw
b25zZSA9IGltcHVsc2VSZXNwb25zZS0+ZGF0YSgpOwogICAgIHNpemVfdCB0b3RhbFJlc3BvbnNl
TGVuZ3RoID0gaW1wdWxzZVJlc3BvbnNlLT5sZW5ndGgoKTsKIAotICAgIC8vIEJlY2F1c2Ugd2Un
cmUgbm90IHVzaW5nIGRpcmVjdC1jb252b2x1dGlvbiBpbiB0aGUgbGVhZGluZyBwb3J0aW9uLCB0
aGUgcmV2ZXJiIGhhcyBhbiBvdmVyYWxsIGxhdGVuY3kgb2YgaGFsZiB0aGUgZmlyc3Qtc3RhZ2Ug
RkZUIHNpemUKLSAgICBzaXplX3QgcmV2ZXJiVG90YWxMYXRlbmN5ID0gbV9taW5GRlRTaXplIC8g
MjsKKyAgICBzaXplX3QgcmV2ZXJiVG90YWxMYXRlbmN5ID0gMDsKIAogICAgIHNpemVfdCBzdGFn
ZU9mZnNldCA9IDA7CiAgICAgaW50IGkgPSAwOwpAQCAtMTAxLDcgKzEwMCwxNCBAQCBSZXZlcmJD
b252b2x2ZXI6OlJldmVyYkNvbnZvbHZlcihBdWRpb0NoYW5uZWwqIGltcHVsc2VSZXNwb25zZSwg
c2l6ZV90IHJlbmRlclNsaQogICAgICAgICAvLyBUaGlzICJzdGFnZ2VycyIgdGhlIHRpbWUgd2hl
biBlYWNoIEZGVCBoYXBwZW5zIHNvIHRoZXkgZG9uJ3QgYWxsIGhhcHBlbiBhdCB0aGUgc2FtZSB0
aW1lCiAgICAgICAgIGludCByZW5kZXJQaGFzZSA9IGNvbnZvbHZlclJlbmRlclBoYXNlICsgaSAq
IHJlbmRlclNsaWNlU2l6ZTsKIAotICAgICAgICBPd25QdHI8UmV2ZXJiQ29udm9sdmVyU3RhZ2U+
IHN0YWdlID0gYWRvcHRQdHIobmV3IFJldmVyYkNvbnZvbHZlclN0YWdlKHJlc3BvbnNlLCB0b3Rh
bFJlc3BvbnNlTGVuZ3RoLCByZXZlcmJUb3RhbExhdGVuY3ksIHN0YWdlT2Zmc2V0LCBzdGFnZVNp
emUsIGZmdFNpemUsIHJlbmRlclBoYXNlLCByZW5kZXJTbGljZVNpemUsICZtX2FjY3VtdWxhdGlv
bkJ1ZmZlcikpOworICAgICAgICBPd25QdHI8UmV2ZXJiQ29udm9sdmVyU3RhZ2U+IHN0YWdlOwor
ICAgICAgICBpZiAoc3RhZ2VPZmZzZXQpIHsKKyAgICAgICAgICAgIHN0YWdlID0gYWRvcHRQdHIo
bmV3IFJldmVyYkNvbnZvbHZlclN0YWdlKHJlc3BvbnNlLCB0b3RhbFJlc3BvbnNlTGVuZ3RoLCBy
ZXZlcmJUb3RhbExhdGVuY3ksIHN0YWdlT2Zmc2V0LCBzdGFnZVNpemUsIGZmdFNpemUsIHJlbmRl
clBoYXNlLCByZW5kZXJTbGljZVNpemUsICZtX2FjY3VtdWxhdGlvbkJ1ZmZlcikpOworCisgICAg
ICAgICAgICAvLyBGaWd1cmUgb3V0IG5leHQgRkZUIHNpemUKKyAgICAgICAgICAgIGZmdFNpemUg
Kj0gMjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdGFnZSA9IGFkb3B0UHRyKG5ldyBS
ZXZlcmJDb252b2x2ZXJTdGFnZShyZXNwb25zZSwgdG90YWxSZXNwb25zZUxlbmd0aCwgcmV2ZXJi
VG90YWxMYXRlbmN5LCBzdGFnZU9mZnNldCwgc3RhZ2VTaXplLCBmZnRTaXplLCByZW5kZXJQaGFz
ZSwgcmVuZGVyU2xpY2VTaXplLCAmbV9hY2N1bXVsYXRpb25CdWZmZXIsIHRydWUpKTsKIAogICAg
ICAgICBib29sIGlzQmFja2dyb3VuZFN0YWdlID0gZmFsc2U7CiAKQEAgLTExNCw4ICsxMjAsNiBA
QCBSZXZlcmJDb252b2x2ZXI6OlJldmVyYkNvbnZvbHZlcihBdWRpb0NoYW5uZWwqIGltcHVsc2VS
ZXNwb25zZSwgc2l6ZV90IHJlbmRlclNsaQogICAgICAgICBzdGFnZU9mZnNldCArPSBzdGFnZVNp
emU7CiAgICAgICAgICsraTsKIAotICAgICAgICAvLyBGaWd1cmUgb3V0IG5leHQgRkZUIHNpemUK
LSAgICAgICAgZmZ0U2l6ZSAqPSAyOwogICAgICAgICBpZiAoaGFzUmVhbHRpbWVDb25zdHJhaW50
ICYmICFpc0JhY2tncm91bmRTdGFnZSAmJiBmZnRTaXplID4gbV9tYXhSZWFsdGltZUZGVFNpemUp
CiAgICAgICAgICAgICBmZnRTaXplID0gbV9tYXhSZWFsdGltZUZGVFNpemU7CiAgICAgICAgIGlm
IChmZnRTaXplID4gbV9tYXhGRlRTaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9SZXZlcmJDb252b2x2ZXIuaAppbmRleCAzNzBiODcyMDY0ODI5ZTFjY2UyOWI2ZWQyNTcx
MjZjOTBmNTY4YmRlLi4zMTJlYWI1OGUwMTc3ZDBiMjEyMzUyNzEzMDBhM2ZjNzg3MjBiMWQ5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaApA
QCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBSZXZlcmJDb252b2x2ZXJfaAogCiAjaW5jbHVkZSAi
QXVkaW9BcnJheS5oIgorI2luY2x1ZGUgIkRpcmVjdENvbnZvbHZlci5oIgogI2luY2x1ZGUgIkZG
VENvbnZvbHZlci5oIgogI2luY2x1ZGUgIlJldmVyYkFjY3VtdWxhdGlvbkJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIlJldmVyYkNvbnZvbHZlclN0YWdlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXJTdGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXJTdGFnZS5jcHAKaW5kZXggNTNiYjY1MDA4
MzEwNjQ3MTkxZTAwYTlkYjk1OWEwM2RhOWZmZWEyZS4uNmRiZmMzMzc3OWZhMjU3MmI2YWRjOTBl
MmUzODRlZjYwNDRiZjE1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vUmV2ZXJiQ29udm9sdmVyU3RhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmNwcApAQCAtNDQsMTggKzQ0LDI1IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBWZWN0b3JNYXRoOwogCiBSZXZlcmJDb252
b2x2ZXJTdGFnZTo6UmV2ZXJiQ29udm9sdmVyU3RhZ2UoY29uc3QgZmxvYXQqIGltcHVsc2VSZXNw
b25zZSwgc2l6ZV90IHJlc3BvbnNlTGVuZ3RoLCBzaXplX3QgcmV2ZXJiVG90YWxMYXRlbmN5LCBz
aXplX3Qgc3RhZ2VPZmZzZXQsIHNpemVfdCBzdGFnZUxlbmd0aCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZmZ0U2l6ZSwgc2l6ZV90IHJlbmRlclBo
YXNlLCBzaXplX3QgcmVuZGVyU2xpY2VTaXplLCBSZXZlcmJBY2N1bXVsYXRpb25CdWZmZXIqIGFj
Y3VtdWxhdGlvbkJ1ZmZlcikKLSAgICA6IG1fZmZ0S2VybmVsKGZmdFNpemUpCi0gICAgLCBtX2Fj
Y3VtdWxhdGlvbkJ1ZmZlcihhY2N1bXVsYXRpb25CdWZmZXIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGZmdFNpemUsIHNpemVfdCByZW5kZXJQaGFz
ZSwgc2l6ZV90IHJlbmRlclNsaWNlU2l6ZSwgUmV2ZXJiQWNjdW11bGF0aW9uQnVmZmVyKiBhY2N1
bXVsYXRpb25CdWZmZXIsIGJvb2wgZGlyZWN0TW9kZSkKKyAgICA6IG1fYWNjdW11bGF0aW9uQnVm
ZmVyKGFjY3VtdWxhdGlvbkJ1ZmZlcikKICAgICAsIG1fYWNjdW11bGF0aW9uUmVhZEluZGV4KDAp
CiAgICAgLCBtX2lucHV0UmVhZEluZGV4KDApCiAgICAgLCBtX2ltcHVsc2VSZXNwb25zZUxlbmd0
aChyZXNwb25zZUxlbmd0aCkKKyAgICAsIG1fZGlyZWN0TW9kZShkaXJlY3RNb2RlKQogewogICAg
IEFTU0VSVChpbXB1bHNlUmVzcG9uc2UpOwogICAgIEFTU0VSVChhY2N1bXVsYXRpb25CdWZmZXIp
OwotICAgIAotICAgIG1fZmZ0S2VybmVsLmRvUGFkZGVkRkZUKGltcHVsc2VSZXNwb25zZSArIHN0
YWdlT2Zmc2V0LCBzdGFnZUxlbmd0aCk7Ci0gICAgbV9jb252b2x2ZXIgPSBhZG9wdFB0cihuZXcg
RkZUQ29udm9sdmVyKGZmdFNpemUpKTsKKworICAgIGlmICghbV9kaXJlY3RNb2RlKSB7CisgICAg
ICAgIG1fZmZ0S2VybmVsID0gYWRvcHRQdHIobmV3IEZGVEZyYW1lKGZmdFNpemUpKTsKKyAgICAg
ICAgbV9mZnRLZXJuZWwtPmRvUGFkZGVkRkZUKGltcHVsc2VSZXNwb25zZSArIHN0YWdlT2Zmc2V0
LCBzdGFnZUxlbmd0aCk7CisgICAgICAgIG1fRkZUY29udm9sdmVyID0gYWRvcHRQdHIobmV3IEZG
VENvbnZvbHZlcihmZnRTaXplKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9kaXJlY3RLZXJu
ZWwgPSBhZG9wdFB0cihuZXcgQXVkaW9GbG9hdEFycmF5KHN0YWdlTGVuZ3RoKSk7CisgICAgICAg
IG1fZGlyZWN0S2VybmVsLT5jb3B5VG9SYW5nZShpbXB1bHNlUmVzcG9uc2UgKyBzdGFnZU9mZnNl
dCwgMCwgc3RhZ2VMZW5ndGgpOworICAgICAgICBtX2RpcmVjdENvbnZvbHZlciA9IGFkb3B0UHRy
KG5ldyBEaXJlY3RDb252b2x2ZXIoc3RhZ2VMZW5ndGgpKTsKKyAgICB9CiAgICAgbV90ZW1wb3Jh
cnlCdWZmZXIuYWxsb2NhdGUocmVuZGVyU2xpY2VTaXplKTsKIAogICAgIC8vIFRoZSBjb252b2x1
dGlvbiBzdGFnZSBhdCBvZmZzZXQgc3RhZ2VPZmZzZXQgbmVlZHMgdG8gaGF2ZSBhIGNvcnJlc3Bv
bmRpbmcgZGVsYXkgdG8gY2FuY2VsIG91dCB0aGUgb2Zmc2V0LgpAQCAtMTMzLDcgKzE0MCwxMCBA
QCB2b2lkIFJldmVyYkNvbnZvbHZlclN0YWdlOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2Us
IHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiAgICAgICAgIC8vIE5vdywgcnVuIHRoZSBjb252b2x1
dGlvbiAoaW50byB0aGUgZGVsYXkgYnVmZmVyKS4KICAgICAgICAgLy8gQW4gZXhwZW5zaXZlIEZG
VCB3aWxsIGhhcHBlbiBldmVyeSBmZnRTaXplIC8gMiBmcmFtZXMuCiAgICAgICAgIC8vIFdlIHBy
b2Nlc3MgaW4tcGxhY2UgaGVyZS4uLgotICAgICAgICBtX2NvbnZvbHZlci0+cHJvY2VzcygmbV9m
ZnRLZXJuZWwsIHByZURlbGF5ZWRTb3VyY2UsIHRlbXBvcmFyeUJ1ZmZlciwgZnJhbWVzVG9Qcm9j
ZXNzKTsKKyAgICAgICAgaWYgKCFtX2RpcmVjdE1vZGUpCisgICAgICAgICAgICBtX0ZGVGNvbnZv
bHZlci0+cHJvY2VzcyhtX2ZmdEtlcm5lbC5nZXQoKSwgcHJlRGVsYXllZFNvdXJjZSwgdGVtcG9y
YXJ5QnVmZmVyLCBmcmFtZXNUb1Byb2Nlc3MpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X2RpcmVjdENvbnZvbHZlci0+cHJvY2VzcyhtX2RpcmVjdEtlcm5lbC5nZXQoKSwgcHJlRGVsYXll
ZFNvdXJjZSwgdGVtcG9yYXJ5QnVmZmVyLCBmcmFtZXNUb1Byb2Nlc3MpOwogCiAgICAgICAgIC8v
IE5vdyBhY2N1bXVsYXRlIGludG8gcmV2ZXJiJ3MgYWNjdW11bGF0aW9uIGJ1ZmZlci4KICAgICAg
ICAgbV9hY2N1bXVsYXRpb25CdWZmZXItPmFjY3VtdWxhdGUodGVtcG9yYXJ5QnVmZmVyLCBmcmFt
ZXNUb1Byb2Nlc3MsICZtX2FjY3VtdWxhdGlvblJlYWRJbmRleCwgbV9wb3N0RGVsYXlMZW5ndGgp
OwpAQCAtMTU0LDcgKzE2NCwxMCBAQCB2b2lkIFJldmVyYkNvbnZvbHZlclN0YWdlOjpwcm9jZXNz
KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiAKIHZvaWQgUmV2
ZXJiQ29udm9sdmVyU3RhZ2U6OnJlc2V0KCkKIHsKLSAgICBtX2NvbnZvbHZlci0+cmVzZXQoKTsK
KyAgICBpZiAoIW1fZGlyZWN0TW9kZSkKKyAgICAgICAgbV9GRlRjb252b2x2ZXItPnJlc2V0KCk7
CisgICAgZWxzZQorICAgICAgICBtX2RpcmVjdENvbnZvbHZlci0+cmVzZXQoKTsKICAgICBtX3By
ZURlbGF5QnVmZmVyLnplcm8oKTsKICAgICBtX2FjY3VtdWxhdGlvblJlYWRJbmRleCA9IDA7CiAg
ICAgbV9pbnB1dFJlYWRJbmRleCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXJTdGFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyU3RhZ2UuaAppbmRleCA5ODExYmM2MDMyMTY3NjQ2MDBj
OWNiMTcyNTE3ZGVmMTU4YTM2ZGM4Li42M2Q5NDgzZDdjNWRlYWYyMzA2YzcwNjJlYjVjNjUyZWFh
YzQ4OTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJD
b252b2x2ZXJTdGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVy
YkNvbnZvbHZlclN0YWdlLmgKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgUmV2ZXJiQWNjdW11bGF0aW9uQnVmZmVyOwogY2xhc3MgUmV2ZXJiQ29udm9sdmVyOwog
Y2xhc3MgRkZUQ29udm9sdmVyOworY2xhc3MgRGlyZWN0Q29udm9sdmVyOwogICAgIAogLy8gQSBS
ZXZlcmJDb252b2x2ZXJTdGFnZSByZXByZXNlbnRzIHRoZSBjb252b2x1dGlvbiBhc3NvY2lhdGVk
IHdpdGggYSBzdWItc2VjdGlvbiBvZiBhIGxhcmdlIGltcHVsc2UgcmVzcG9uc2UuCiAvLyBJdCBp
bmNvcnBvcmF0ZXMgYSBkZWxheSBsaW5lIHRvIGFjY291bnQgZm9yIHRoZSBvZmZzZXQgb2YgdGhl
IHN1Yi1zZWN0aW9uIHdpdGhpbiB0aGUgbGFyZ2VyIGltcHVsc2UgcmVzcG9uc2UuCkBAIC00NSw4
ICs0Niw3IEBAIGNsYXNzIFJldmVyYkNvbnZvbHZlclN0YWdlIHsKIHB1YmxpYzoKICAgICAvLyBy
ZW5kZXJQaGFzZSBpcyB1c2VmdWwgdG8ga25vdyBzbyB0aGF0IHdlIGNhbiBtYW5pcHVsYXRlIHRo
ZSBwcmUgdmVyc3VzIHBvc3QgZGVsYXkgc28gdGhhdCBzdGFnZXMgd2lsbCBwZXJmb3JtCiAgICAg
Ly8gdGhlaXIgaGVhdnkgd29yayAoRkZUIHByb2Nlc3NpbmcpIG9uIGRpZmZlcmVudCBzbGljZXMg
dG8gYmFsYW5jZSB0aGUgbG9hZCBpbiBhIHJlYWwtdGltZSB0aHJlYWQuCi0gICAgUmV2ZXJiQ29u
dm9sdmVyU3RhZ2UoY29uc3QgZmxvYXQqIGltcHVsc2VSZXNwb25zZSwgc2l6ZV90IHJlc3BvbnNl
TGVuZ3RoLCBzaXplX3QgcmV2ZXJiVG90YWxMYXRlbmN5LCBzaXplX3Qgc3RhZ2VPZmZzZXQsIHNp
emVfdCBzdGFnZUxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZmZ0U2l6
ZSwgc2l6ZV90IHJlbmRlclBoYXNlLCBzaXplX3QgcmVuZGVyU2xpY2VTaXplLCBSZXZlcmJBY2N1
bXVsYXRpb25CdWZmZXIqIGFjY3VtdWxhdGlvbkJ1ZmZlcik7CisgICAgUmV2ZXJiQ29udm9sdmVy
U3RhZ2UoY29uc3QgZmxvYXQqIGltcHVsc2VSZXNwb25zZSwgc2l6ZV90IHJlc3BvbnNlTGVuZ3Ro
LCBzaXplX3QgcmV2ZXJiVG90YWxMYXRlbmN5LCBzaXplX3Qgc3RhZ2VPZmZzZXQsIHNpemVfdCBz
dGFnZUxlbmd0aCwgc2l6ZV90IGZmdFNpemUsIHNpemVfdCByZW5kZXJQaGFzZSwgc2l6ZV90IHJl
bmRlclNsaWNlU2l6ZSwgUmV2ZXJiQWNjdW11bGF0aW9uQnVmZmVyKiwgYm9vbCBkaXJlY3RNb2Rl
ID0gZmFsc2UpOwogCiAgICAgLy8gV0FSTklORzogZnJhbWVzVG9Qcm9jZXNzIG11c3QgYmUgc3Vj
aCB0aGF0IGl0IGV2ZW5seSBkaXZpZGVzIHRoZSBkZWxheSBidWZmZXIgc2l6ZSAoc3RhZ2Vfb2Zm
c2V0KS4KICAgICB2b2lkIHByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgc2l6ZV90IGZyYW1l
c1RvUHJvY2Vzcyk7CkBAIC01OSw4ICs1OSw4IEBAIHB1YmxpYzoKICAgICBpbnQgaW5wdXRSZWFk
SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2lucHV0UmVhZEluZGV4OyB9CiAKIHByaXZhdGU6Ci0g
ICAgRkZURnJhbWUgbV9mZnRLZXJuZWw7Ci0gICAgT3duUHRyPEZGVENvbnZvbHZlcj4gbV9jb252
b2x2ZXI7CisgICAgT3duUHRyPEZGVEZyYW1lPiBtX2ZmdEtlcm5lbDsKKyAgICBPd25QdHI8RkZU
Q29udm9sdmVyPiBtX0ZGVGNvbnZvbHZlcjsKIAogICAgIEF1ZGlvRmxvYXRBcnJheSBtX3ByZURl
bGF5QnVmZmVyOwogCkBAIC03Niw2ICs3NiwxMCBAQCBwcml2YXRlOgogICAgIEF1ZGlvRmxvYXRB
cnJheSBtX3RlbXBvcmFyeUJ1ZmZlcjsKIAogICAgIHNpemVfdCBtX2ltcHVsc2VSZXNwb25zZUxl
bmd0aDsKKworICAgIGJvb2wgbV9kaXJlY3RNb2RlOworICAgIE93blB0cjxBdWRpb0Zsb2F0QXJy
YXk+IG1fZGlyZWN0S2VybmVsOworICAgIE93blB0cjxEaXJlY3RDb252b2x2ZXI+IG1fZGlyZWN0
Q29udm9sdmVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGNjNDZiMzk0
ZThjYWJiN2E2ZDI4YTY3YTQxM2VjNmFjOGRlZDcxM2MuLjI3YmFjZDgzZWVhOTMzZmViYzE1MDU2
M2I2M2RhZWM0OGYxNDE2OTMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0wMy0wMSAgWGlu
Z25hbiBXYW5nICA8eGluZ25hbi53YW5nQGludGVsLmNvbT4KKworICAgICAgICBDb252b2x2ZXJO
b2RlIHNob3VsZCBub3QgaW5jdXIgcHJvY2Vzc2luZyBsYXRlbmN5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTU2NAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5lZWQgdG8gY2hlY2sgdGhlIGluaXRp
YWwgc2lsZW50IHBhcnQgYmVjYXVzZSB0aGUgbGF0ZW5jeSBpc3N1ZSBvZiBDb252b2x2ZXJOb2Rl
IGlzIGZpeGVkLgorCisgICAgICAgICogd2ViYXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWJhdWRpby9yZXNvdXJjZXMvY29udm9sdXRpb24tdGVz
dGluZy5qczoKKyAgICAgICAgKGNoZWNrVHJpYW5ndWxhclB1bHNlKToKKyAgICAgICAgKGNoZWNr
VGFpbDEpOgorICAgICAgICAoY2hlY2tDb252b2x2ZWRSZXN1bHQucmV0dXJuLnZhcik6CisgICAg
ICAgIChjaGVja0NvbnZvbHZlZFJlc3VsdCk6CisKIDIwMTItMDMtMDEgIERpcmsgUHJhbmtlICA8
ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTW9hciB0aWdodGVuaW5nIG9mIGV4cGVj
dGF0aW9ucyAobWFjIHRoaXMgdGltZSkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRp
by9jb252b2x1dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vY29udm9sdXRpb24tbW9uby1tb25vLWV4cGVjdGVkLnR4dAppbmRleCA4NzA1ZjY2MWMzYTI4
NmM0ODU3MzZjYTQ1YTQ0Mzc1M2E1NmE3MzVhLi4zYWUyYTA0ODY2ODlkNjVjNGVmNmQ2MDM0YjY5
NWM3ZDZlYTAyMjFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlv
bi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZv
bHV0aW9uLW1vbm8tbW9uby1leHBlY3RlZC50eHQKQEAgLTIsNyArMiw2IEBAIFRlc3RzIENvbnZv
bHZlck5vZGUgcHJvY2Vzc2luZyBhIG1vbm8gY2hhbm5lbCB3aXRoIG1vbm8gaW1wdWxzZSByZXNw
b25zZS4KIAogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCi1QQVNTIEluaXRpYWwgbGF0ZW5j
eSBvZiBjb252b2x2ZXIgaXMgc2lsZW50LgogUEFTUyBUcmlhbmd1bGFyIHBvcnRpb24gb2YgY29u
dm9sdXRpb24gaXMgY29ycmVjdC4KIFBBU1MgRmlyc3QgcGFydCBvZiB0YWlsIG9mIGNvbnZvbHV0
aW9uIGlzIHN1ZmZpY2llbnRseSBzbWFsbC4KIFBBU1MgUmVuZGVyZWQgc2lnbmFsIGFmdGVyIHRh
aWwgb2YgY29udm9sdXRpb24gaXMgc2lsZW50LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJh
dWRpby9yZXNvdXJjZXMvY29udm9sdXRpb24tdGVzdGluZy5qcwppbmRleCBkN2VmOGVhNTFhOTdh
MzEzOGY3ZDhmOTcwMmYzMjQ2YzFlYzkzMDY3Li5jMmNhYmExMDYwMWEyMWU4ZTcwYmNmMGQ2ZTQ3
MjRkYzY1MjQxMzc5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMv
Y29udm9sdXRpb24tdGVzdGluZy5qcworKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJj
ZXMvY29udm9sdXRpb24tdGVzdGluZy5qcwpAQCAtNCwxMSArNCw2IEBAIHZhciByZW5kZXJMZW5n
dGhTZWNvbmRzID0gODsKIHZhciBwdWxzZUxlbmd0aFNlY29uZHMgPSAxOwogdmFyIHB1bHNlTGVu
Z3RoRnJhbWVzID0gcHVsc2VMZW5ndGhTZWNvbmRzICogc2FtcGxlUmF0ZTsKIAotLy8gVGhlIGNv
bnZvbHZlciBoYXMgYSBsYXRlbmN5IG9mIDEyOCBzYW1wbGVzIGluIHRoZSBpbXBsZW1lbnRhdGlv
bi4KLS8vIFdlIG5lZWQgdG8gdGFrZSB0aGlzIGludG8gYWNjb3VudCB3aGVuIHZlcmlmeWluZyB0
aGUgb3V0cHV0IG9mIHRoZQotLy8gY29udm9sdmVyLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc1NTY0LgotdmFyIGNvbnZvbHZlRGVsYXlTYW1wbGVzID0gMTI4
OwotCiBmdW5jdGlvbiBjcmVhdGVTcXVhcmVQdWxzZUJ1ZmZlcihjb250ZXh0LCBzYW1wbGVGcmFt
ZUxlbmd0aCkgewogICAgIHZhciBhdWRpb0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlQnVmZmVyKDEs
IHNhbXBsZUZyYW1lTGVuZ3RoLCBjb250ZXh0LnNhbXBsZVJhdGUpOwogCkBAIC00MSwyNyArMzYs
NiBAQCBmdW5jdGlvbiBjcmVhdGVUcmlhbmdsZVB1bHNlQnVmZmVyKGNvbnRleHQsIHNhbXBsZUZy
YW1lTGVuZ3RoKSB7CiAgICAgcmV0dXJuIGF1ZGlvQnVmZmVyOwogfQogCi0vLyBWZXJpZnkgdGhh
dCB0aGUgaW5pdGlhbCBsYXRlbmN5IG9mIHRoZSBjb252b2x2ZXIgaXMgZXhhY3RseSB6ZXJvLgot
Ly8gUmV0dXJuIHRydWUgaWYgc28uCi1mdW5jdGlvbiBjaGVja0xhdGVuY3koZGF0YSkgewotICAg
IHZhciBpc1plcm8gPSB0cnVlOwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb252b2x2ZURl
bGF5U2FtcGxlczsgKytpKSB7Ci0gICAgICAgIGlmIChkYXRhW2ldICE9IDApIHsKLSAgICAgICAg
ICAgIGlzWmVybyA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoaXNaZXJvKSB7Ci0gICAgICAgIHRlc3RQYXNzZWQoIkluaXRpYWwgbGF0ZW5j
eSBvZiBjb252b2x2ZXIgaXMgc2lsZW50LiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRlc3RG
YWlsZWQoIkluaXRpYWwgbGF0ZW5jeSBvZiBjb252b2x2ZXIgaXMgbm90IHNpbGVudC4iKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gaXNaZXJvOwotfQotCiBmdW5jdGlvbiBsb2cxMCh4KSB7CiAgIHJl
dHVybiBNYXRoLmxvZyh4KS9NYXRoLkxOMTA7CiB9CkBAIC03OSw3ICs1Myw3IEBAIGZ1bmN0aW9u
IGNoZWNrVHJpYW5ndWxhclB1bHNlKHJlbmRlcmVkLCByZWZlcmVuY2UpIHsKICAgICB2YXIgbWF4
RGVsdGFJbmRleCA9IDA7CiAKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlZmVyZW5jZS5sZW5n
dGg7ICsraSkgewotICAgICAgICB2YXIgZGlmZiA9IHJlbmRlcmVkW2kgKyBjb252b2x2ZURlbGF5
U2FtcGxlc10gLSByZWZlcmVuY2VbaV07CisgICAgICAgIHZhciBkaWZmID0gcmVuZGVyZWRbaV0g
LSByZWZlcmVuY2VbaV07CiAgICAgICAgIHZhciB4ID0gTWF0aC5hYnMoZGlmZik7CiAgICAgICAg
IGlmICh4ID4gbWF4RGVsdGEpIHsKICAgICAgICAgICAgIG1heERlbHRhID0geDsKQEAgLTExMSw3
ICs4NSw3IEBAIGZ1bmN0aW9uIGNoZWNrVGFpbDEoZGF0YSwgcmVmZXJlbmNlLCBicmVha3BvaW50
KSB7CiAgICAgdmFyIGlzWmVybyA9IHRydWU7CiAgICAgdmFyIHRhaWwxTWF4ID0gMDsKIAotICAg
IGZvciAodmFyIGkgPSByZWZlcmVuY2UubGVuZ3RoICsgY29udm9sdmVEZWxheVNhbXBsZXM7IGkg
PCByZWZlcmVuY2UubGVuZ3RoICsgYnJlYWtwb2ludDsgKytpKSB7CisgICAgZm9yICh2YXIgaSA9
IHJlZmVyZW5jZS5sZW5ndGg7IGkgPCByZWZlcmVuY2UubGVuZ3RoICsgYnJlYWtwb2ludDsgKytp
KSB7CiAgICAgICAgIHZhciBtYWcgPSBNYXRoLmFicyhkYXRhW2ldKTsKICAgICAgICAgaWYgKG1h
ZyA+IHRhaWwxTWF4KSB7CiAgICAgICAgICAgICB0YWlsMU1heCA9IG1hZzsKQEAgLTE3MywxMSAr
MTQ3LDYgQEAgZnVuY3Rpb24gY2hlY2tDb252b2x2ZWRSZXN1bHQodHJpYW5nbGVQdWxzZSkgewog
ICAgIAogICAgICAgICB2YXIgc3VjY2VzcyA9IHRydWU7CiAgICAgCi0gICAgICAgIC8vIFZlcmlm
eSB0aGUgaW5pdGlhbCBwYXJ0IGlzIGV4YWN0bHkgemVybyBiZWNhdXNlIG9mIHRoZQotICAgICAg
ICAvLyBsYXRlbmN5IGluIHRoZSBjb252b2x2ZXIuCi0KLSAgICAgICAgc3VjY2VzcyA9IHN1Y2Nl
c3MgJiYgY2hlY2tMYXRlbmN5KHJlbmRlcmVkRGF0YSk7Ci0KICAgICAgICAgLy8gVmVyaWZ5IHRo
ZSB0cmlhbmd1bGFyIHB1bHNlIGlzIGFjdHVhbGx5IHRyaWFuZ3VsYXIuCiAKICAgICAgICAgc3Vj
Y2VzcyA9IHN1Y2Nlc3MgJiYgY2hlY2tUcmlhbmd1bGFyUHVsc2UocmVuZGVyZWREYXRhLCByZWZl
cmVuY2VEYXRhKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130083</attachid>
            <date>2012-03-05 02:21:37 -0800</date>
            <delta_ts>2012-03-13 00:00:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75564-20120305182433.patch</filename>
            <type>text/plain</type>
            <size>30991</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWVlZTA5NTFkMzdhYjQz
ZDliMWZmYWI4NTU3NWE2ZTYzM2UzZjRiOC4uOWRiYWE1OGY5ODk4ZDQzMWI1MjJkNDg0NjUxMTIz
MDcxNWU2NjU1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAzLTAxICBYaW5n
bmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIENvbnZvbHZlck5v
ZGUgc2hvdWxkIG5vdCBpbmN1ciBwcm9jZXNzaW5nIGxhdGVuY3kKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTY0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBEaXJlY3RDb252b2x2ZXIgaW5z
dGVhZCBvZiBGRlRDb252b2x2ZXIgZm9yIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSBsZWFkaW5nIHBv
cnRpb24gb2YgaW1wdWxzZSByZXNwb25zZS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0Q29udm9sdmVyOjpEaXJlY3RD
b252b2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0Q29udm9sdmVyOjpwcm9jZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdENvbnZvbHZlcjo6cmVzZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoRGlyZWN0Q29udm9sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdENv
bnZvbHZlcjo6Y29udm9sdmVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmJD
b252b2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpSZXZlcmJD
b252b2x2ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJldmVyYkNvbnZvbHZlclN0YWdlOjpSZXZlcmJDb252b2x2ZXJTdGFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXJTdGFnZTo6cHJvY2Vzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXJTdGFnZTo6cmVzZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFJldmVyYkNvbnZvbHZlclN0YWdlKToKKwogMjAxMi0wMy0wMSAgUGFibG8gRmxv
dXJldCAgPHBhYmxvZkBtb3Rvcm9sYS5jb20+CiAKICAgICAgICAgRml4IGNvZGUgZ2VuZXJhdG9y
cyB0byBjb3JyZWN0bHkgZ3VhcmQgaGVhZGVyIGRlY2xhcmF0aW9ucyB0aGF0IGhhdmUgYSBbQ29u
ZGl0aW9uYWxdIGF0dHJpYnV0ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDk1
NmJiM2E5MzUwMzIwMTQ5NjQ1Zjg3MWNlZTQ5NGM0ODhkMTZjZWQuLjIwNGY3YTY5NGZkMjIxMDNh
MzA3Y2VkNjBkNzlhN2M4NjMzYjc0MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpA
QCAtNTQ0OSw2ICs1NDQ5LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0ZGVENvbnZvbHZlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0ZGVENvbnZvbHZlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9E
aXJlY3RDb252b2x2ZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXJl
Y3RDb252b2x2ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWUu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZVN0dWIuY3BwIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCBhMDY5Y2YyYmNkMDc3ZmZlMzM5ZmI3ZDM5Mjg5Y2NiMGJhMDM1ZGUzLi4wMzQwOTAw
MmQyOWI3MGQ4YzAxN2Q3ZjYzNjRmZjNkYTdhMjhjZjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0y
OTYxLDYgKzI5NjEsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0VxdWFsUG93ZXJQ
YW5uZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vRkZUQ29udm9sdmVyLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vRkZUQ29udm9sdmVyLmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9h
dWRpby9GRlRGcmFtZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1l
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lU3R1Yi5jcHAnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29udm9sdmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYzhhMTI3MDVjNGFlN2Q4ZjljOTRkMjFkMDE5MzM0NjU4ZDBiNzNiZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZl
ci5jcHAKQEAgLTAsMCArMSwzNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJEaXJlY3RDb252b2x2ZXIuaCIKKworI2luY2x1ZGUg
IlZlY3Rvck1hdGguaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordXNpbmcgbmFtZXNwYWNlIFZlY3Rvck1hdGg7CisgICAgCitEaXJlY3RDb252b2x2ZXI6
OkRpcmVjdENvbnZvbHZlcihzaXplX3QgaW5wdXRCbG9ja1NpemUpCisgICAgOiBtX2lucHV0Qmxv
Y2tTaXplKGlucHV0QmxvY2tTaXplKQorICAgICwgbV9pbnB1dEJ1ZmZlcihpbnB1dEJsb2NrU2l6
ZSAqIDIpCit7Cit9CisKK3ZvaWQgRGlyZWN0Q29udm9sdmVyOjpwcm9jZXNzKEF1ZGlvRmxvYXRB
cnJheSogY29udm9sdXRpb25LZXJuZWwsIGNvbnN0IGZsb2F0KiBzb3VyY2VQLCBmbG9hdCogZGVz
dFAsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgLy8gRklYTUU6IE9wdGltaXplIGZv
ciBJUFAsIHJldmVyYiBmdW5jdGlvbiBpbiBpcHAgbGlicmFyeSBjYW4gYmUgdXNlZCBoZXJlLgor
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDI1NQorICAg
IC8vIEZJWE1FOiBPcHRpbWl6ZSBmb3IgREFSV0lOLCBjb252KCkgZnVuY3Rpb24gaW4gQWNjZWxl
cmF0ZS5mcmFtZXdvcmsgY2FuIGJlIHVzZWQgaGVyZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODAyNTYKKworICAgIEFTU0VSVChmcmFtZXNUb1Byb2Nl
c3MgPT0gbV9pbnB1dEJsb2NrU2l6ZSk7CisgICAgaWYgKGZyYW1lc1RvUHJvY2VzcyAhPSBtX2lu
cHV0QmxvY2tTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPbmx5IHN1cHBvcnQga2Vy
bmVsU2l6ZSA8PSBtX2lucHV0QmxvY2tTaXplCisgICAgc2l6ZV90IGtlcm5lbFNpemUgPSBjb252
b2x1dGlvbktlcm5lbC0+c2l6ZSgpOworICAgIEFTU0VSVChrZXJuZWxTaXplIDw9IG1faW5wdXRC
bG9ja1NpemUpOworICAgIGlmIChrZXJuZWxTaXplID4gbV9pbnB1dEJsb2NrU2l6ZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZmxvYXQqIGtlcm5lbFAgPSBjb252b2x1dGlvbktlcm5lbC0+ZGF0
YSgpOworCisgICAgZmxvYXQqIGlucHV0UCA9IG1faW5wdXRCdWZmZXIuZGF0YSgpICsgbV9pbnB1
dEJsb2NrU2l6ZTsKKworICAgIC8vIFNhbml0eSBjaGVjaworICAgIGJvb2wgaXNDb3B5R29vZCA9
IGtlcm5lbFAgJiYgc291cmNlUCAmJiBkZXN0UCAmJiBtX2lucHV0QnVmZmVyLmRhdGEoKTsKKyAg
ICBBU1NFUlQoaXNDb3B5R29vZCk7CisgICAgaWYgKCFpc0NvcHlHb29kKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgLy8gQ29weSBzYW1wbGVzIHRvIDJuZCBoYWxmIG9mIGlucHV0IGJ1ZmZl
cgorICAgIG1lbWNweShpbnB1dFAsIHNvdXJjZVAsIHNpemVvZihmbG9hdCkgKiBmcmFtZXNUb1By
b2Nlc3MpOworCisgICAgLy8gRklYTUU6IFRoZSBtYWNybyBjYW4gYmUgZnVydGhlciBvcHRpbWl6
ZWQgdG8gYXZvaWQgcGlwZWxpbmUgc3RhbGxzLiBPbmUgcG9zc2liaWxpdHkgaXMgdG8gbWFpbnRh
aW4gNCBzZXBhcmF0ZSBzdW1zIGFuZCBjaGFuZ2UgdGhlIG1hY3JvIHRvIENPTlZPTFZFX0ZPVVJf
U0FNUExFUy4KKyNkZWZpbmUgQ09OVk9MVkVfT05FX1NBTVBMRSAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIHN1bSArPSBpbnB1dFBbaSAtIGpdICoga2VybmVsUFtqXTsgIFwKKyAg
ICAgICAgICAgIGorKzsKKworICAgIHNpemVfdCBpID0gMDsKKyAgICB3aGlsZSAoaSA8IGZyYW1l
c1RvUHJvY2VzcykgeworICAgICAgICBzaXplX3QgaiA9IDA7CisgICAgICAgIGZsb2F0IHN1bSA9
IDA7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogU1NFIG9wdGltaXphdGlvbiBtYXkgYmUg
YXBwbGllZCBoZXJlLgorICAgICAgICBpZiAoa2VybmVsU2l6ZSA9PSAzMikgeworICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMworICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNgorICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOQorICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDExCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEyCisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEzCisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDE0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE1Cisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE2CisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDE3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE4
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE5CisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDIwCisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gMjEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjIKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gMjQKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjUKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gMjcKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjgKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjkKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gMzAKKworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzMQor
ICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzMgorCisgICAgICAgIH0gZWxzZSBp
ZiAoa2VybmVsU2l6ZSA9PSA2NCkgeworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyA0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gNgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyA3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDgKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gOQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAxMAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDExCisgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEyCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDEzCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE0CisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE1CisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDE2CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE3CisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE4CisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDE5CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIwCisK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjEKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gMjIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8g
MjMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjQKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMjUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gMjYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjcKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gMjkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzAKKworICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzMQorICAgICAgICAgICAgQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyAzMgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzMworICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzNAorICAgICAgICAgICAgQ09OVk9MVkVf
T05FX1NBTVBMRSAvLyAzNQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzNgor
ICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzNworICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyAzOAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAz
OQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0MAorCisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDQxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDQyCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQzCisgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDQ1CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ2CisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDQ4CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ5CisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUwCisKKyAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gNTEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTIK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTMKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gNTQKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8g
NTUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTYKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gNTcKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gNTgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTkKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjAKKworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyA2MQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA2MgorICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA2MworICAgICAgICAgICAgQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyA2NAorCisgICAgICAgIH0gZWxzZSBpZiAoa2VybmVsU2l6ZSA9PSAxMjgpIHsK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMQorICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyAyCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDMK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNAorICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyA1CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDYK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNworICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyA4CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDkK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTAKKworICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyAxMQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAxMgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMworICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyAxNQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNgorICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyAxOAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxOQorICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyMAorCisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDIxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIyCisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIzCisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDI0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI1
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI2CisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDI3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDI4CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI5CisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDMwCisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gMzEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzIKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gMzQKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzUKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzYKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gMzcKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzgKKyAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzkKKyAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gNDAKKworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0
MQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0MgorICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyA0MworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyA0NAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0NQorICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyA0NgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyA0NworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0OAorICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0OQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyA1MAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUxCisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUyCisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDUzCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU0Cisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU1CisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDU2CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU3
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU4CisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDU5CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDYwCisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjEKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gNjMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjQKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gNjYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjcKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjgKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gNjkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNzAKKwor
ICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3MQorICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyA3MgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3
MworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3NAorICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyA3NQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyA3NgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3NworICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyA3OAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyA3OQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA4MAorCisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDgxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDgyCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDgzCisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDg0CisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDg1CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDg2Cisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDg3CisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDg4CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDg5
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDkwCisKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gOTEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gOTIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTMKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTQKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gOTUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTYKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTcKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gOTgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTkKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTAwCisKKyAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gMTAxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEw
MgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMDMKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMTA0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDEwNQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMDYKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTA3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDEwOAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMDkKKyAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTEwCisKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gMTExCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDExMgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMTMKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTE0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDExNQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMTYKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTE3CisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDExOAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMTkK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTIwCisKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMTIxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDEyMgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMjMKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTI0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDEyNQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMjYKKyAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTI3CisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDEyOAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgd2hpbGUg
KGogPCBrZXJuZWxTaXplKSB7CisgICAgICAgICAgICAgICAgLy8gTm9uLW9wdGltaXplZCB1c2lu
ZyBhY3R1YWwgd2hpbGUgbG9vcC4KKyAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGVzdFBbaSsrXSA9IHN1bTsKKyAg
ICB9CisKKyAgICAvLyBDb3B5IDJuZCBoYWxmIG9mIGlucHV0IGJ1ZmZlciB0byAxc3QgaGFsZi4K
KyAgICBtZW1jcHkobV9pbnB1dEJ1ZmZlci5kYXRhKCksIGlucHV0UCwgc2l6ZW9mKGZsb2F0KSAq
IGZyYW1lc1RvUHJvY2Vzcyk7Cit9CisKK3ZvaWQgRGlyZWN0Q29udm9sdmVyOjpyZXNldCgpCit7
CisgICAgbV9pbnB1dEJ1ZmZlci56ZXJvKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzMDljNzUyZDYwODVmNGQ2
YzgzNTkyOTg3ZDE5Y2I1OWZjZmFjNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuaApAQCAtMCwwICsxLDUyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIERpcmVjdENvbnZvbHZlcl9oCisjZGVmaW5lIERpcmVjdENvbnZvbHZlcl9oCisKKyNpbmNs
dWRlICJBdWRpb0FycmF5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGlyZWN0
Q29udm9sdmVyIHsKK3B1YmxpYzoKKyAgICBEaXJlY3RDb252b2x2ZXIoc2l6ZV90IGlucHV0Qmxv
Y2tTaXplKTsKKworICAgIHZvaWQgcHJvY2VzcyhBdWRpb0Zsb2F0QXJyYXkqIGNvbnZvbHV0aW9u
S2VybmVsLCBjb25zdCBmbG9hdCogc291cmNlUCwgZmxvYXQqIGRlc3RQLCBzaXplX3QgZnJhbWVz
VG9Qcm9jZXNzKTsKKworICAgIHZvaWQgcmVzZXQoKTsKKworcHJpdmF0ZToKKyAgICBzaXplX3Qg
bV9pbnB1dEJsb2NrU2l6ZTsKKworICAgIEF1ZGlvRmxvYXRBcnJheSBtX2lucHV0QnVmZmVyOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRGlyZWN0Q29udm9sdmVy
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZv
bHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIu
Y3BwCmluZGV4IGM2YWI1NGU4ZWY3YTc5MThmYjQ5NDZlNzMyMWI2NjlhZDRmNjUwNDEuLjhjOWVk
ODlkNmE5ODZlZTQyMzdhMDJkMTczOTUxMjBkZmQ0MjFiNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcApAQCAtODQsOCArODQsNyBA
QCBSZXZlcmJDb252b2x2ZXI6OlJldmVyYkNvbnZvbHZlcihBdWRpb0NoYW5uZWwqIGltcHVsc2VS
ZXNwb25zZSwgc2l6ZV90IHJlbmRlclNsaQogICAgIGNvbnN0IGZsb2F0KiByZXNwb25zZSA9IGlt
cHVsc2VSZXNwb25zZS0+ZGF0YSgpOwogICAgIHNpemVfdCB0b3RhbFJlc3BvbnNlTGVuZ3RoID0g
aW1wdWxzZVJlc3BvbnNlLT5sZW5ndGgoKTsKIAotICAgIC8vIEJlY2F1c2Ugd2UncmUgbm90IHVz
aW5nIGRpcmVjdC1jb252b2x1dGlvbiBpbiB0aGUgbGVhZGluZyBwb3J0aW9uLCB0aGUgcmV2ZXJi
IGhhcyBhbiBvdmVyYWxsIGxhdGVuY3kgb2YgaGFsZiB0aGUgZmlyc3Qtc3RhZ2UgRkZUIHNpemUK
LSAgICBzaXplX3QgcmV2ZXJiVG90YWxMYXRlbmN5ID0gbV9taW5GRlRTaXplIC8gMjsKKyAgICBz
aXplX3QgcmV2ZXJiVG90YWxMYXRlbmN5ID0gMDsKIAogICAgIHNpemVfdCBzdGFnZU9mZnNldCA9
IDA7CiAgICAgaW50IGkgPSAwOwpAQCAtMTAxLDcgKzEwMCw5IEBAIFJldmVyYkNvbnZvbHZlcjo6
UmV2ZXJiQ29udm9sdmVyKEF1ZGlvQ2hhbm5lbCogaW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVu
ZGVyU2xpCiAgICAgICAgIC8vIFRoaXMgInN0YWdnZXJzIiB0aGUgdGltZSB3aGVuIGVhY2ggRkZU
IGhhcHBlbnMgc28gdGhleSBkb24ndCBhbGwgaGFwcGVuIGF0IHRoZSBzYW1lIHRpbWUKICAgICAg
ICAgaW50IHJlbmRlclBoYXNlID0gY29udm9sdmVyUmVuZGVyUGhhc2UgKyBpICogcmVuZGVyU2xp
Y2VTaXplOwogCi0gICAgICAgIE93blB0cjxSZXZlcmJDb252b2x2ZXJTdGFnZT4gc3RhZ2UgPSBh
ZG9wdFB0cihuZXcgUmV2ZXJiQ29udm9sdmVyU3RhZ2UocmVzcG9uc2UsIHRvdGFsUmVzcG9uc2VM
ZW5ndGgsIHJldmVyYlRvdGFsTGF0ZW5jeSwgc3RhZ2VPZmZzZXQsIHN0YWdlU2l6ZSwgZmZ0U2l6
ZSwgcmVuZGVyUGhhc2UsIHJlbmRlclNsaWNlU2l6ZSwgJm1fYWNjdW11bGF0aW9uQnVmZmVyKSk7
CisgICAgICAgIGJvb2wgdXNlRGlyZWN0Q29udm9sdmVyID0gIXN0YWdlT2Zmc2V0OworCisgICAg
ICAgIE93blB0cjxSZXZlcmJDb252b2x2ZXJTdGFnZT4gc3RhZ2UgPSBhZG9wdFB0cihuZXcgUmV2
ZXJiQ29udm9sdmVyU3RhZ2UocmVzcG9uc2UsIHRvdGFsUmVzcG9uc2VMZW5ndGgsIHJldmVyYlRv
dGFsTGF0ZW5jeSwgc3RhZ2VPZmZzZXQsIHN0YWdlU2l6ZSwgZmZ0U2l6ZSwgcmVuZGVyUGhhc2Us
IHJlbmRlclNsaWNlU2l6ZSwgJm1fYWNjdW11bGF0aW9uQnVmZmVyLCB1c2VEaXJlY3RDb252b2x2
ZXIpKTsKIAogICAgICAgICBib29sIGlzQmFja2dyb3VuZFN0YWdlID0gZmFsc2U7CiAKQEAgLTEx
NCw4ICsxMTUsMTEgQEAgUmV2ZXJiQ29udm9sdmVyOjpSZXZlcmJDb252b2x2ZXIoQXVkaW9DaGFu
bmVsKiBpbXB1bHNlUmVzcG9uc2UsIHNpemVfdCByZW5kZXJTbGkKICAgICAgICAgc3RhZ2VPZmZz
ZXQgKz0gc3RhZ2VTaXplOwogICAgICAgICArK2k7CiAKLSAgICAgICAgLy8gRmlndXJlIG91dCBu
ZXh0IEZGVCBzaXplCi0gICAgICAgIGZmdFNpemUgKj0gMjsKKyAgICAgICAgaWYgKCF1c2VEaXJl
Y3RDb252b2x2ZXIpIHsKKyAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgbmV4dCBGRlQgc2l6ZQor
ICAgICAgICAgICAgZmZ0U2l6ZSAqPSAyOworICAgICAgICB9CisKICAgICAgICAgaWYgKGhhc1Jl
YWx0aW1lQ29uc3RyYWludCAmJiAhaXNCYWNrZ3JvdW5kU3RhZ2UgJiYgZmZ0U2l6ZSA+IG1fbWF4
UmVhbHRpbWVGRlRTaXplKQogICAgICAgICAgICAgZmZ0U2l6ZSA9IG1fbWF4UmVhbHRpbWVGRlRT
aXplOwogICAgICAgICBpZiAoZmZ0U2l6ZSA+IG1fbWF4RkZUU2l6ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmgKaW5kZXggMzcwYjg3MjA2NDgy
OWUxY2NlMjliNmVkMjU3MTI2YzkwZjU2OGJkZS4uMzEyZWFiNThlMDE3N2QwYjIxMjM1MjcxMzAw
YTNmYzc4NzIwYjFkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
UmV2ZXJiQ29udm9sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2
ZXJiQ29udm9sdmVyLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgUmV2ZXJiQ29udm9sdmVy
X2gKIAogI2luY2x1ZGUgIkF1ZGlvQXJyYXkuaCIKKyNpbmNsdWRlICJEaXJlY3RDb252b2x2ZXIu
aCIKICNpbmNsdWRlICJGRlRDb252b2x2ZXIuaCIKICNpbmNsdWRlICJSZXZlcmJBY2N1bXVsYXRp
b25CdWZmZXIuaCIKICNpbmNsdWRlICJSZXZlcmJDb252b2x2ZXJTdGFnZS5oIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyU3RhZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyU3RhZ2UuY3Bw
CmluZGV4IDUzYmI2NTAwODMxMDY0NzE5MWUwMGE5ZGI5NTlhMDNkYTlmZmVhMmUuLmY4MWZiM2Qx
NTZmMWMyY2QyNmIzMjUyODlmN2NjODY2NDliYjZhMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXJTdGFnZS5jcHAKQEAgLTQ0LDE4
ICs0NCwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgVmVjdG9yTWF0
aDsKIAogUmV2ZXJiQ29udm9sdmVyU3RhZ2U6OlJldmVyYkNvbnZvbHZlclN0YWdlKGNvbnN0IGZs
b2F0KiBpbXB1bHNlUmVzcG9uc2UsIHNpemVfdCByZXNwb25zZUxlbmd0aCwgc2l6ZV90IHJldmVy
YlRvdGFsTGF0ZW5jeSwgc2l6ZV90IHN0YWdlT2Zmc2V0LCBzaXplX3Qgc3RhZ2VMZW5ndGgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGZmdFNpemUs
IHNpemVfdCByZW5kZXJQaGFzZSwgc2l6ZV90IHJlbmRlclNsaWNlU2l6ZSwgUmV2ZXJiQWNjdW11
bGF0aW9uQnVmZmVyKiBhY2N1bXVsYXRpb25CdWZmZXIpCi0gICAgOiBtX2ZmdEtlcm5lbChmZnRT
aXplKQotICAgICwgbV9hY2N1bXVsYXRpb25CdWZmZXIoYWNjdW11bGF0aW9uQnVmZmVyKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBmZnRTaXplLCBz
aXplX3QgcmVuZGVyUGhhc2UsIHNpemVfdCByZW5kZXJTbGljZVNpemUsIFJldmVyYkFjY3VtdWxh
dGlvbkJ1ZmZlciogYWNjdW11bGF0aW9uQnVmZmVyLCBib29sIGRpcmVjdE1vZGUpCisgICAgOiBt
X2FjY3VtdWxhdGlvbkJ1ZmZlcihhY2N1bXVsYXRpb25CdWZmZXIpCiAgICAgLCBtX2FjY3VtdWxh
dGlvblJlYWRJbmRleCgwKQogICAgICwgbV9pbnB1dFJlYWRJbmRleCgwKQogICAgICwgbV9pbXB1
bHNlUmVzcG9uc2VMZW5ndGgocmVzcG9uc2VMZW5ndGgpCisgICAgLCBtX2RpcmVjdE1vZGUoZGly
ZWN0TW9kZSkKIHsKICAgICBBU1NFUlQoaW1wdWxzZVJlc3BvbnNlKTsKICAgICBBU1NFUlQoYWNj
dW11bGF0aW9uQnVmZmVyKTsKLSAgICAKLSAgICBtX2ZmdEtlcm5lbC5kb1BhZGRlZEZGVChpbXB1
bHNlUmVzcG9uc2UgKyBzdGFnZU9mZnNldCwgc3RhZ2VMZW5ndGgpOwotICAgIG1fY29udm9sdmVy
ID0gYWRvcHRQdHIobmV3IEZGVENvbnZvbHZlcihmZnRTaXplKSk7CisKKyAgICBpZiAoIW1fZGly
ZWN0TW9kZSkgeworICAgICAgICBtX2ZmdEtlcm5lbCA9IGFkb3B0UHRyKG5ldyBGRlRGcmFtZShm
ZnRTaXplKSk7CisgICAgICAgIG1fZmZ0S2VybmVsLT5kb1BhZGRlZEZGVChpbXB1bHNlUmVzcG9u
c2UgKyBzdGFnZU9mZnNldCwgc3RhZ2VMZW5ndGgpOworICAgICAgICBtX2ZmdENvbnZvbHZlciA9
IGFkb3B0UHRyKG5ldyBGRlRDb252b2x2ZXIoZmZ0U2l6ZSkpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIG1fZGlyZWN0S2VybmVsID0gYWRvcHRQdHIobmV3IEF1ZGlvRmxvYXRBcnJheShyZW5kZXJT
bGljZVNpemUpKTsKKyAgICAgICAgbV9kaXJlY3RLZXJuZWwtPmNvcHlUb1JhbmdlKGltcHVsc2VS
ZXNwb25zZSArIHN0YWdlT2Zmc2V0LCAwLCByZW5kZXJTbGljZVNpemUpOworICAgICAgICBtX2Rp
cmVjdENvbnZvbHZlciA9IGFkb3B0UHRyKG5ldyBEaXJlY3RDb252b2x2ZXIocmVuZGVyU2xpY2VT
aXplKSk7CisgICAgfQogICAgIG1fdGVtcG9yYXJ5QnVmZmVyLmFsbG9jYXRlKHJlbmRlclNsaWNl
U2l6ZSk7CiAKICAgICAvLyBUaGUgY29udm9sdXRpb24gc3RhZ2UgYXQgb2Zmc2V0IHN0YWdlT2Zm
c2V0IG5lZWRzIHRvIGhhdmUgYSBjb3JyZXNwb25kaW5nIGRlbGF5IHRvIGNhbmNlbCBvdXQgdGhl
IG9mZnNldC4KQEAgLTEzMyw3ICsxNDAsMTAgQEAgdm9pZCBSZXZlcmJDb252b2x2ZXJTdGFnZTo6
cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQogICAg
ICAgICAvLyBOb3csIHJ1biB0aGUgY29udm9sdXRpb24gKGludG8gdGhlIGRlbGF5IGJ1ZmZlciku
CiAgICAgICAgIC8vIEFuIGV4cGVuc2l2ZSBGRlQgd2lsbCBoYXBwZW4gZXZlcnkgZmZ0U2l6ZSAv
IDIgZnJhbWVzLgogICAgICAgICAvLyBXZSBwcm9jZXNzIGluLXBsYWNlIGhlcmUuLi4KLSAgICAg
ICAgbV9jb252b2x2ZXItPnByb2Nlc3MoJm1fZmZ0S2VybmVsLCBwcmVEZWxheWVkU291cmNlLCB0
ZW1wb3JhcnlCdWZmZXIsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIGlmICghbV9kaXJlY3RN
b2RlKQorICAgICAgICAgICAgbV9mZnRDb252b2x2ZXItPnByb2Nlc3MobV9mZnRLZXJuZWwuZ2V0
KCksIHByZURlbGF5ZWRTb3VyY2UsIHRlbXBvcmFyeUJ1ZmZlciwgZnJhbWVzVG9Qcm9jZXNzKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9kaXJlY3RDb252b2x2ZXItPnByb2Nlc3MobV9k
aXJlY3RLZXJuZWwuZ2V0KCksIHByZURlbGF5ZWRTb3VyY2UsIHRlbXBvcmFyeUJ1ZmZlciwgZnJh
bWVzVG9Qcm9jZXNzKTsKIAogICAgICAgICAvLyBOb3cgYWNjdW11bGF0ZSBpbnRvIHJldmVyYidz
IGFjY3VtdWxhdGlvbiBidWZmZXIuCiAgICAgICAgIG1fYWNjdW11bGF0aW9uQnVmZmVyLT5hY2N1
bXVsYXRlKHRlbXBvcmFyeUJ1ZmZlciwgZnJhbWVzVG9Qcm9jZXNzLCAmbV9hY2N1bXVsYXRpb25S
ZWFkSW5kZXgsIG1fcG9zdERlbGF5TGVuZ3RoKTsKQEAgLTE1NCw3ICsxNjQsMTAgQEAgdm9pZCBS
ZXZlcmJDb252b2x2ZXJTdGFnZTo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBzaXplX3Qg
ZnJhbWVzVG9Qcm9jZXNzKQogCiB2b2lkIFJldmVyYkNvbnZvbHZlclN0YWdlOjpyZXNldCgpCiB7
Ci0gICAgbV9jb252b2x2ZXItPnJlc2V0KCk7CisgICAgaWYgKCFtX2RpcmVjdE1vZGUpCisgICAg
ICAgIG1fZmZ0Q29udm9sdmVyLT5yZXNldCgpOworICAgIGVsc2UKKyAgICAgICAgbV9kaXJlY3RD
b252b2x2ZXItPnJlc2V0KCk7CiAgICAgbV9wcmVEZWxheUJ1ZmZlci56ZXJvKCk7CiAgICAgbV9h
Y2N1bXVsYXRpb25SZWFkSW5kZXggPSAwOwogICAgIG1faW5wdXRSZWFkSW5kZXggPSAwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyU3Rh
Z2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdl
LmgKaW5kZXggOTgxMWJjNjAzMjE2NzY0NjAwYzljYjE3MjUxN2RlZjE1OGEzNmRjOC4uOWNlOGRj
YWM4Nzg5YjRlZTExNjZlYmI5Y2Q1MGQ3MWExOTgwMWNmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyU3RhZ2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXJTdGFnZS5oCkBAIC0zOCw2ICsz
OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFJldmVyYkFjY3VtdWxhdGlvbkJ1ZmZl
cjsKIGNsYXNzIFJldmVyYkNvbnZvbHZlcjsKIGNsYXNzIEZGVENvbnZvbHZlcjsKK2NsYXNzIERp
cmVjdENvbnZvbHZlcjsKICAgICAKIC8vIEEgUmV2ZXJiQ29udm9sdmVyU3RhZ2UgcmVwcmVzZW50
cyB0aGUgY29udm9sdXRpb24gYXNzb2NpYXRlZCB3aXRoIGEgc3ViLXNlY3Rpb24gb2YgYSBsYXJn
ZSBpbXB1bHNlIHJlc3BvbnNlLgogLy8gSXQgaW5jb3Jwb3JhdGVzIGEgZGVsYXkgbGluZSB0byBh
Y2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBzdWItc2VjdGlvbiB3aXRoaW4gdGhlIGxhcmdl
ciBpbXB1bHNlIHJlc3BvbnNlLgpAQCAtNDUsOCArNDYsNyBAQCBjbGFzcyBSZXZlcmJDb252b2x2
ZXJTdGFnZSB7CiBwdWJsaWM6CiAgICAgLy8gcmVuZGVyUGhhc2UgaXMgdXNlZnVsIHRvIGtub3cg
c28gdGhhdCB3ZSBjYW4gbWFuaXB1bGF0ZSB0aGUgcHJlIHZlcnN1cyBwb3N0IGRlbGF5IHNvIHRo
YXQgc3RhZ2VzIHdpbGwgcGVyZm9ybQogICAgIC8vIHRoZWlyIGhlYXZ5IHdvcmsgKEZGVCBwcm9j
ZXNzaW5nKSBvbiBkaWZmZXJlbnQgc2xpY2VzIHRvIGJhbGFuY2UgdGhlIGxvYWQgaW4gYSByZWFs
LXRpbWUgdGhyZWFkLgotICAgIFJldmVyYkNvbnZvbHZlclN0YWdlKGNvbnN0IGZsb2F0KiBpbXB1
bHNlUmVzcG9uc2UsIHNpemVfdCByZXNwb25zZUxlbmd0aCwgc2l6ZV90IHJldmVyYlRvdGFsTGF0
ZW5jeSwgc2l6ZV90IHN0YWdlT2Zmc2V0LCBzaXplX3Qgc3RhZ2VMZW5ndGgsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IGZmdFNpemUsIHNpemVfdCByZW5kZXJQaGFzZSwgc2l6ZV90
IHJlbmRlclNsaWNlU2l6ZSwgUmV2ZXJiQWNjdW11bGF0aW9uQnVmZmVyKiBhY2N1bXVsYXRpb25C
dWZmZXIpOworICAgIFJldmVyYkNvbnZvbHZlclN0YWdlKGNvbnN0IGZsb2F0KiBpbXB1bHNlUmVz
cG9uc2UsIHNpemVfdCByZXNwb25zZUxlbmd0aCwgc2l6ZV90IHJldmVyYlRvdGFsTGF0ZW5jeSwg
c2l6ZV90IHN0YWdlT2Zmc2V0LCBzaXplX3Qgc3RhZ2VMZW5ndGgsIHNpemVfdCBmZnRTaXplLCBz
aXplX3QgcmVuZGVyUGhhc2UsIHNpemVfdCByZW5kZXJTbGljZVNpemUsIFJldmVyYkFjY3VtdWxh
dGlvbkJ1ZmZlciosIGJvb2wgZGlyZWN0TW9kZSA9IGZhbHNlKTsKIAogICAgIC8vIFdBUk5JTkc6
IGZyYW1lc1RvUHJvY2VzcyBtdXN0IGJlIHN1Y2ggdGhhdCBpdCBldmVubHkgZGl2aWRlcyB0aGUg
ZGVsYXkgYnVmZmVyIHNpemUgKHN0YWdlX29mZnNldCkuCiAgICAgdm9pZCBwcm9jZXNzKGNvbnN0
IGZsb2F0KiBzb3VyY2UsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwpAQCAtNTksOCArNTksOCBA
QCBwdWJsaWM6CiAgICAgaW50IGlucHV0UmVhZEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbnB1
dFJlYWRJbmRleDsgfQogCiBwcml2YXRlOgotICAgIEZGVEZyYW1lIG1fZmZ0S2VybmVsOwotICAg
IE93blB0cjxGRlRDb252b2x2ZXI+IG1fY29udm9sdmVyOworICAgIE93blB0cjxGRlRGcmFtZT4g
bV9mZnRLZXJuZWw7CisgICAgT3duUHRyPEZGVENvbnZvbHZlcj4gbV9mZnRDb252b2x2ZXI7CiAK
ICAgICBBdWRpb0Zsb2F0QXJyYXkgbV9wcmVEZWxheUJ1ZmZlcjsKIApAQCAtNzYsNiArNzYsMTAg
QEAgcHJpdmF0ZToKICAgICBBdWRpb0Zsb2F0QXJyYXkgbV90ZW1wb3JhcnlCdWZmZXI7CiAKICAg
ICBzaXplX3QgbV9pbXB1bHNlUmVzcG9uc2VMZW5ndGg7CisKKyAgICBib29sIG1fZGlyZWN0TW9k
ZTsKKyAgICBPd25QdHI8QXVkaW9GbG9hdEFycmF5PiBtX2RpcmVjdEtlcm5lbDsKKyAgICBPd25Q
dHI8RGlyZWN0Q29udm9sdmVyPiBtX2RpcmVjdENvbnZvbHZlcjsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwppbmRleCBjYzQ2YjM5NGU4Y2FiYjdhNmQyOGE2N2E0MTNlYzZhYzhkZWQ3
MTNjLi4yN2JhY2Q4M2VlYTkzM2ZlYmMxNTA1NjNiNjNkYWVjNDhmMTQxNjkzIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTkgQEAKKzIwMTItMDMtMDEgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRl
bC5jb20+CisKKyAgICAgICAgQ29udm9sdmVyTm9kZSBzaG91bGQgbm90IGluY3VyIHByb2Nlc3Np
bmcgbGF0ZW5jeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzU1NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBuZWVkIHRvIGNoZWNrIHRoZSBpbml0aWFsIHNpbGVudCBwYXJ0IGJlY2F1c2UgdGhlIGxh
dGVuY3kgaXNzdWUgb2YgQ29udm9sdmVyTm9kZSBpcyBmaXhlZC4KKworICAgICAgICAqIHdlYmF1
ZGlvL2NvbnZvbHV0aW9uLW1vbm8tbW9uby1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViYXVk
aW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRlc3RpbmcuanM6CisgICAgICAgIChjaGVja1RyaWFu
Z3VsYXJQdWxzZSk6CisgICAgICAgIChjaGVja1RhaWwxKToKKyAgICAgICAgKGNoZWNrQ29udm9s
dmVkUmVzdWx0LnJldHVybi52YXIpOgorICAgICAgICAoY2hlY2tDb252b2x2ZWRSZXN1bHQpOgor
CiAyMDEyLTAzLTAxICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIE1vYXIgdGlnaHRlbmluZyBvZiBleHBlY3RhdGlvbnMgKG1hYyB0aGlzIHRpbWUpLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8tbW9uby1leHBl
Y3RlZC50eHQKaW5kZXggODcwNWY2NjFjM2EyODZjNDg1NzM2Y2E0NWE0NDM3NTNhNTZhNzM1YS4u
M2FlMmEwNDg2Njg5ZDY1YzRlZjZkNjAzNGI2OTVjN2Q2ZWEwMjIxZSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0
CkBAIC0yLDcgKzIsNiBAQCBUZXN0cyBDb252b2x2ZXJOb2RlIHByb2Nlc3NpbmcgYSBtb25vIGNo
YW5uZWwgd2l0aCBtb25vIGltcHVsc2UgcmVzcG9uc2UuCiAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KIAotUEFTUyBJbml0aWFsIGxhdGVuY3kgb2YgY29udm9sdmVyIGlzIHNpbGVudC4KIFBB
U1MgVHJpYW5ndWxhciBwb3J0aW9uIG9mIGNvbnZvbHV0aW9uIGlzIGNvcnJlY3QuCiBQQVNTIEZp
cnN0IHBhcnQgb2YgdGFpbCBvZiBjb252b2x1dGlvbiBpcyBzdWZmaWNpZW50bHkgc21hbGwuCiBQ
QVNTIFJlbmRlcmVkIHNpZ25hbCBhZnRlciB0YWlsIG9mIGNvbnZvbHV0aW9uIGlzIHNpbGVudC4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10
ZXN0aW5nLmpzIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRl
c3RpbmcuanMKaW5kZXggZDdlZjhlYTUxYTk3YTMxMzhmN2Q4Zjk3MDJmMzI0NmMxZWM5MzA2Ny4u
YzJjYWJhMTA2MDFhMjFlOGU3MGJjZjBkNmU0NzI0ZGM2NTI0MTM3OSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRlc3RpbmcuanMKKysrIGIv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRlc3RpbmcuanMKQEAg
LTQsMTEgKzQsNiBAQCB2YXIgcmVuZGVyTGVuZ3RoU2Vjb25kcyA9IDg7CiB2YXIgcHVsc2VMZW5n
dGhTZWNvbmRzID0gMTsKIHZhciBwdWxzZUxlbmd0aEZyYW1lcyA9IHB1bHNlTGVuZ3RoU2Vjb25k
cyAqIHNhbXBsZVJhdGU7CiAKLS8vIFRoZSBjb252b2x2ZXIgaGFzIGEgbGF0ZW5jeSBvZiAxMjgg
c2FtcGxlcyBpbiB0aGUgaW1wbGVtZW50YXRpb24uCi0vLyBXZSBuZWVkIHRvIHRha2UgdGhpcyBp
bnRvIGFjY291bnQgd2hlbiB2ZXJpZnlpbmcgdGhlIG91dHB1dCBvZiB0aGUKLS8vIGNvbnZvbHZl
ci4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTU2NC4KLXZh
ciBjb252b2x2ZURlbGF5U2FtcGxlcyA9IDEyODsKLQogZnVuY3Rpb24gY3JlYXRlU3F1YXJlUHVs
c2VCdWZmZXIoY29udGV4dCwgc2FtcGxlRnJhbWVMZW5ndGgpIHsKICAgICB2YXIgYXVkaW9CdWZm
ZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCBzYW1wbGVGcmFtZUxlbmd0aCwgY29udGV4dC5z
YW1wbGVSYXRlKTsKIApAQCAtNDEsMjcgKzM2LDYgQEAgZnVuY3Rpb24gY3JlYXRlVHJpYW5nbGVQ
dWxzZUJ1ZmZlcihjb250ZXh0LCBzYW1wbGVGcmFtZUxlbmd0aCkgewogICAgIHJldHVybiBhdWRp
b0J1ZmZlcjsKIH0KIAotLy8gVmVyaWZ5IHRoYXQgdGhlIGluaXRpYWwgbGF0ZW5jeSBvZiB0aGUg
Y29udm9sdmVyIGlzIGV4YWN0bHkgemVyby4KLS8vIFJldHVybiB0cnVlIGlmIHNvLgotZnVuY3Rp
b24gY2hlY2tMYXRlbmN5KGRhdGEpIHsKLSAgICB2YXIgaXNaZXJvID0gdHJ1ZTsKLQotICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgY29udm9sdmVEZWxheVNhbXBsZXM7ICsraSkgewotICAgICAgICBp
ZiAoZGF0YVtpXSAhPSAwKSB7Ci0gICAgICAgICAgICBpc1plcm8gPSBmYWxzZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGlzWmVybykgewotICAgICAg
ICB0ZXN0UGFzc2VkKCJJbml0aWFsIGxhdGVuY3kgb2YgY29udm9sdmVyIGlzIHNpbGVudC4iKTsK
LSAgICB9IGVsc2UgewotICAgICAgICB0ZXN0RmFpbGVkKCJJbml0aWFsIGxhdGVuY3kgb2YgY29u
dm9sdmVyIGlzIG5vdCBzaWxlbnQuIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGlzWmVybzsKLX0K
LQogZnVuY3Rpb24gbG9nMTAoeCkgewogICByZXR1cm4gTWF0aC5sb2coeCkvTWF0aC5MTjEwOwog
fQpAQCAtNzksNyArNTMsNyBAQCBmdW5jdGlvbiBjaGVja1RyaWFuZ3VsYXJQdWxzZShyZW5kZXJl
ZCwgcmVmZXJlbmNlKSB7CiAgICAgdmFyIG1heERlbHRhSW5kZXggPSAwOwogCiAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCByZWZlcmVuY2UubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIGRpZmYg
PSByZW5kZXJlZFtpICsgY29udm9sdmVEZWxheVNhbXBsZXNdIC0gcmVmZXJlbmNlW2ldOworICAg
ICAgICB2YXIgZGlmZiA9IHJlbmRlcmVkW2ldIC0gcmVmZXJlbmNlW2ldOwogICAgICAgICB2YXIg
eCA9IE1hdGguYWJzKGRpZmYpOwogICAgICAgICBpZiAoeCA+IG1heERlbHRhKSB7CiAgICAgICAg
ICAgICBtYXhEZWx0YSA9IHg7CkBAIC0xMTEsNyArODUsNyBAQCBmdW5jdGlvbiBjaGVja1RhaWwx
KGRhdGEsIHJlZmVyZW5jZSwgYnJlYWtwb2ludCkgewogICAgIHZhciBpc1plcm8gPSB0cnVlOwog
ICAgIHZhciB0YWlsMU1heCA9IDA7CiAKLSAgICBmb3IgKHZhciBpID0gcmVmZXJlbmNlLmxlbmd0
aCArIGNvbnZvbHZlRGVsYXlTYW1wbGVzOyBpIDwgcmVmZXJlbmNlLmxlbmd0aCArIGJyZWFrcG9p
bnQ7ICsraSkgeworICAgIGZvciAodmFyIGkgPSByZWZlcmVuY2UubGVuZ3RoOyBpIDwgcmVmZXJl
bmNlLmxlbmd0aCArIGJyZWFrcG9pbnQ7ICsraSkgewogICAgICAgICB2YXIgbWFnID0gTWF0aC5h
YnMoZGF0YVtpXSk7CiAgICAgICAgIGlmIChtYWcgPiB0YWlsMU1heCkgewogICAgICAgICAgICAg
dGFpbDFNYXggPSBtYWc7CkBAIC0xNzMsMTEgKzE0Nyw2IEBAIGZ1bmN0aW9uIGNoZWNrQ29udm9s
dmVkUmVzdWx0KHRyaWFuZ2xlUHVsc2UpIHsKICAgICAKICAgICAgICAgdmFyIHN1Y2Nlc3MgPSB0
cnVlOwogICAgIAotICAgICAgICAvLyBWZXJpZnkgdGhlIGluaXRpYWwgcGFydCBpcyBleGFjdGx5
IHplcm8gYmVjYXVzZSBvZiB0aGUKLSAgICAgICAgLy8gbGF0ZW5jeSBpbiB0aGUgY29udm9sdmVy
LgotCi0gICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNoZWNrTGF0ZW5jeShyZW5kZXJlZERh
dGEpOwotCiAgICAgICAgIC8vIFZlcmlmeSB0aGUgdHJpYW5ndWxhciBwdWxzZSBpcyBhY3R1YWxs
eSB0cmlhbmd1bGFyLgogCiAgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNoZWNrVHJpYW5n
dWxhclB1bHNlKHJlbmRlcmVkRGF0YSwgcmVmZXJlbmNlRGF0YSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131559</attachid>
            <date>2012-03-13 00:00:20 -0700</date>
            <delta_ts>2012-03-13 22:42:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75564-20120313150325.patch</filename>
            <type>text/plain</type>
            <size>33074</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmQwOTE2YmE3MDM0ZmQz
MDhkNGNhNDA1MzM0YTUyZjVhOGVhNzA5MC4uZjMzMzE1ZmE2MDRjYzE5Y2MwZDdlYTYzYWFhNGNi
NWY5ZjRiOWQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAzLTEyICBYaW5n
bmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIENvbnZvbHZlck5v
ZGUgc2hvdWxkIG5vdCBpbmN1ciBwcm9jZXNzaW5nIGxhdGVuY3kKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTY0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBEaXJlY3RDb252b2x2ZXIgaW5z
dGVhZCBvZiBGRlRDb252b2x2ZXIgZm9yIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSBsZWFkaW5nIHBv
cnRpb24gb2YgaW1wdWxzZSByZXNwb25zZS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0Q29udm9sdmVyOjpEaXJlY3RD
b252b2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0Q29udm9sdmVyOjpwcm9jZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdENvbnZvbHZlcjo6cmVzZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoRGlyZWN0Q29udm9sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdENv
bnZvbHZlcjo6Y29udm9sdmVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmJD
b252b2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpSZXZlcmJD
b252b2x2ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJldmVyYkNvbnZvbHZlclN0YWdlOjpSZXZlcmJDb252b2x2ZXJTdGFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXJTdGFnZTo6cHJvY2Vzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXJTdGFnZTo6cmVzZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFJldmVyYkNvbnZvbHZlclN0YWdlKToKKwogMjAxMi0wMy0xMiAgQmVuamFtaW4g
UG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggSW5kZXhlZERCIGJ1
aWxkIHdpdGggSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBhMzQ0NDM2OTU5
N2ViYWQ1ZDc0YTBiZWI3NDFkNTgzN2IwM2U0MDkyLi42OTM1NTVkZWQ2MGRhZDc4ZTk0NDA5MjY0
Yzg0NzFhZmMxZTQzYTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU0Njcs
NiArNTQ2Nyw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vRXF1YWxQb3dlclBhbm5lci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9GRlRDb252b2x2ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9G
RlRDb252b2x2ZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29u
dm9sdmVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29udm9s
dmVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWUuaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWVTdHViLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXgg
YjgxNzFlYzY4NDU0YzdjY2EyNGEzMjFmYTNlNGFjZmZkYTFjNDMyMy4uYjQ3YzlmOGEyMzdmODU2
OGMwYzBlZTViYTMxNWVmZjMzMTFmZDE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzAzNyw2ICsz
MDM3LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0ZGVENvbnZvbHZlci5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0ZGVENvbnZvbHZlci5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9h
dWRpby9EaXJlY3RDb252b2x2ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vRkZU
RnJhbWUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9GRlRGcmFtZS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9GRlRGcmFtZVN0dWIuY3BwJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmM4YTEyNzA1YzRhZTdkOGY5Yzk0ZDIxZDAxOTMzNDY1OGQwYjczYmYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuY3BwCkBA
IC0wLDAgKzEsMzYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FV
RElPKQorCisjaW5jbHVkZSAiRGlyZWN0Q29udm9sdmVyLmgiCisKKyNpbmNsdWRlICJWZWN0b3JN
YXRoLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBWZWN0b3JNYXRoOworICAgIAorRGlyZWN0Q29udm9sdmVyOjpEaXJlY3RD
b252b2x2ZXIoc2l6ZV90IGlucHV0QmxvY2tTaXplKQorICAgIDogbV9pbnB1dEJsb2NrU2l6ZShp
bnB1dEJsb2NrU2l6ZSkKKyAgICAsIG1faW5wdXRCdWZmZXIoaW5wdXRCbG9ja1NpemUgKiAyKQor
eworfQorCit2b2lkIERpcmVjdENvbnZvbHZlcjo6cHJvY2VzcyhBdWRpb0Zsb2F0QXJyYXkqIGNv
bnZvbHV0aW9uS2VybmVsLCBjb25zdCBmbG9hdCogc291cmNlUCwgZmxvYXQqIGRlc3RQLCBzaXpl
X3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBmb3IgSVBQLCBy
ZXZlcmIgZnVuY3Rpb24gaW4gaXBwIGxpYnJhcnkgY2FuIGJlIHVzZWQgaGVyZS4KKyAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODAyNTUKKyAgICAvLyBGSVhN
RTogT3B0aW1pemUgZm9yIERBUldJTiwgY29udigpIGZ1bmN0aW9uIGluIEFjY2VsZXJhdGUuZnJh
bWV3b3JrIGNhbiBiZSB1c2VkIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgwMjU2CisKKyAgICBBU1NFUlQoZnJhbWVzVG9Qcm9jZXNzID09IG1f
aW5wdXRCbG9ja1NpemUpOworICAgIGlmIChmcmFtZXNUb1Byb2Nlc3MgIT0gbV9pbnB1dEJsb2Nr
U2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT25seSBzdXBwb3J0IGtlcm5lbFNpemUg
PD0gbV9pbnB1dEJsb2NrU2l6ZQorICAgIHNpemVfdCBrZXJuZWxTaXplID0gY29udm9sdXRpb25L
ZXJuZWwtPnNpemUoKTsKKyAgICBBU1NFUlQoa2VybmVsU2l6ZSA8PSBtX2lucHV0QmxvY2tTaXpl
KTsKKyAgICBpZiAoa2VybmVsU2l6ZSA+IG1faW5wdXRCbG9ja1NpemUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGZsb2F0KiBrZXJuZWxQID0gY29udm9sdXRpb25LZXJuZWwtPmRhdGEoKTsKKwor
ICAgIGZsb2F0KiBpbnB1dFAgPSBtX2lucHV0QnVmZmVyLmRhdGEoKSArIG1faW5wdXRCbG9ja1Np
emU7CisKKyAgICAvLyBTYW5pdHkgY2hlY2sKKyAgICBib29sIGlzQ29weUdvb2QgPSBrZXJuZWxQ
ICYmIHNvdXJjZVAgJiYgZGVzdFAgJiYgbV9pbnB1dEJ1ZmZlci5kYXRhKCk7CisgICAgQVNTRVJU
KGlzQ29weUdvb2QpOworICAgIGlmICghaXNDb3B5R29vZCkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIC8vIENvcHkgc2FtcGxlcyB0byAybmQgaGFsZiBvZiBpbnB1dCBidWZmZXIKKyAgICBt
ZW1jcHkoaW5wdXRQLCBzb3VyY2VQLCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzKTsK
KworICAgIC8vIEZJWE1FOiBUaGUgbWFjcm8gY2FuIGJlIGZ1cnRoZXIgb3B0aW1pemVkIHRvIGF2
b2lkIHBpcGVsaW5lIHN0YWxscy4gT25lIHBvc3NpYmlsaXR5IGlzIHRvIG1haW50YWluIDQgc2Vw
YXJhdGUgc3VtcyBhbmQgY2hhbmdlIHRoZSBtYWNybyB0byBDT05WT0xWRV9GT1VSX1NBTVBMRVMu
CisjZGVmaW5lIENPTlZPTFZFX09ORV9TQU1QTEUgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICBzdW0gKz0gaW5wdXRQW2kgLSBqXSAqIGtlcm5lbFBbal07ICBcCisgICAgICAgICAg
ICBqKys7CisKKyAgICBzaXplX3QgaSA9IDA7CisgICAgd2hpbGUgKGkgPCBmcmFtZXNUb1Byb2Nl
c3MpIHsKKyAgICAgICAgc2l6ZV90IGogPSAwOworICAgICAgICBmbG9hdCBzdW0gPSAwOworICAg
ICAgICAKKyAgICAgICAgLy8gRklYTUU6IFNTRSBvcHRpbWl6YXRpb24gbWF5IGJlIGFwcGxpZWQg
aGVyZS4KKyAgICAgICAgaWYgKGtlcm5lbFNpemUgPT0gMzIpIHsKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gMQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAy
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDMKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gNAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDYKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gNworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA4
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDkKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gMTAKKworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAxMQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMgorICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyAxNAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNQorICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyAxNworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxOAorICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxOQorICAgICAgICAgICAgQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyAyMAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIxCisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIyCisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDIzCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI0
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI1CisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDI2CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDI3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI4CisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDI5CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDMwCisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzEKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzIKKworICAgICAgICB9IGVsc2UgaWYgKGtlcm5l
bFNpemUgPT0gNjQpIHsKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMQorICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyCisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNAorICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1CisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNworICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA4CisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTAKKwor
ICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMQorICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyAxMgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAx
MworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNAorICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyAxNQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAxNgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNworICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyAxOAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyAxOQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyMAorCisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDIyCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIzCisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI0CisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDI1CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI2Cisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI3CisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDI4CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI5
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDMwCisKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMzEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gMzIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzMKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzQKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gMzUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzYKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzcKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gMzgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzkKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDAKKworICAgICAgICAgICAgQ09OVk9MVkVf
T05FX1NBTVBMRSAvLyA0MQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0Mgor
ICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0MworICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyA0NAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0
NQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0NgorICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyA0NworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyA0OAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0OQorICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyA1MAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDUxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUyCisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUzCisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDU0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU1CisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU2CisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDU3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU4Cisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU5CisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDYwCisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8g
NjEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjIKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gNjMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gNjQKKworICAgICAgICB9IGVsc2UgaWYgKGtlcm5lbFNpemUgPT0gMTI4KSB7CisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gMgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzCisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gNQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA2CisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDcKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gOAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA5CisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEwCisKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gMTEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTIKKyAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTMKKyAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gMTQKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTUK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTYKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gMTcKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8g
MTgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTkKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMjAKKworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyAyMQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyMgorICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyMworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyAyNAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyNQorICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyNgorICAgICAgICAgICAgQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyAyNworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyOAorICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyOQorICAgICAgICAgICAgQ09OVk9MVkVf
T05FX1NBTVBMRSAvLyAzMAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDMx
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDMyCisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDMzCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDM0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDM1CisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDM2CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDM3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDM4CisgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDM5CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDQwCisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDEKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDIKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gNDMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDQKKyAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDUKKyAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gNDYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDcK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDgKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gNDkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8g
NTAKKworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1MQorICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyA1MgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyA1MworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1NAorICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1NQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyA1NgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1NworICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1OAorICAgICAgICAgICAgQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyA1OQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA2MAorCisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDYxCisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDYyCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDYz
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDY0CisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDY1CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDY2CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDY3CisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDY4CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDY5CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDcwCisKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNzEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gNzIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNzMKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNzQKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gNzUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNzYKKyAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNzcKKyAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gNzgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNzkK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gODAKKworICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyA4MQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyA4MgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA4MworICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyA4NAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyA4NQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA4NgorICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA4NworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyA4OAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA4OQorICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA5MAorCisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDkxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDkyCisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDkzCisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDk0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDk1
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDk2CisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDk3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDk4CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDk5CisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDEwMAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDEwMQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMDIKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTAzCisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDEwNAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMDUK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTA2CisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDEwNworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAxMDgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTA5CisgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDExMAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDExMQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMTIKKyAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTEzCisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDExNAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAx
MTUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTE2CisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDExNworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyAxMTgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTE5CisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEyMAorCisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDEyMQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMjIK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTIzCisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDEyNAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAxMjUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTI2CisgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEyNworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyAxMjgKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHdoaWxlIChqIDwga2Vy
bmVsU2l6ZSkgeworICAgICAgICAgICAgICAgIC8vIE5vbi1vcHRpbWl6ZWQgdXNpbmcgYWN0dWFs
IHdoaWxlIGxvb3AuCisgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRlc3RQW2krK10gPSBzdW07CisgICAgfQorCisg
ICAgLy8gQ29weSAybmQgaGFsZiBvZiBpbnB1dCBidWZmZXIgdG8gMXN0IGhhbGYuCisgICAgbWVt
Y3B5KG1faW5wdXRCdWZmZXIuZGF0YSgpLCBpbnB1dFAsIHNpemVvZihmbG9hdCkgKiBmcmFtZXNU
b1Byb2Nlc3MpOworfQorCit2b2lkIERpcmVjdENvbnZvbHZlcjo6cmVzZXQoKQoreworICAgIG1f
aW5wdXRCdWZmZXIuemVybygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vRGlyZWN0Q29udm9sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9EaXJlY3RDb252b2x2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMzA5Yzc1MmQ2MDg1ZjRkNmM4MzU5Mjk4
N2QxOWNiNTlmY2ZhYzQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vRGlyZWN0Q29udm9sdmVyLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEaXJl
Y3RDb252b2x2ZXJfaAorI2RlZmluZSBEaXJlY3RDb252b2x2ZXJfaAorCisjaW5jbHVkZSAiQXVk
aW9BcnJheS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERpcmVjdENvbnZvbHZl
ciB7CitwdWJsaWM6CisgICAgRGlyZWN0Q29udm9sdmVyKHNpemVfdCBpbnB1dEJsb2NrU2l6ZSk7
CisKKyAgICB2b2lkIHByb2Nlc3MoQXVkaW9GbG9hdEFycmF5KiBjb252b2x1dGlvbktlcm5lbCwg
Y29uc3QgZmxvYXQqIHNvdXJjZVAsIGZsb2F0KiBkZXN0UCwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vz
cyk7CisKKyAgICB2b2lkIHJlc2V0KCk7CisKK3ByaXZhdGU6CisgICAgc2l6ZV90IG1faW5wdXRC
bG9ja1NpemU7CisKKyAgICBBdWRpb0Zsb2F0QXJyYXkgbV9pbnB1dEJ1ZmZlcjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIERpcmVjdENvbnZvbHZlcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRDb252b2x2ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZUQ29udm9sdmVyLmNwcAppbmRleCAyMzIx
ZGUwY2YxMTA0NTkwNWRkMTU5OGFhOGU2ZWJhN2JlYzU5OTYzLi45MzY4MjI5YjUwNzg1YzE1MTFh
ZGU5OTMzYWM4ZTk1NTg4OGViMDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9GRlRDb252b2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0ZGVENvbnZvbHZlci5jcHAKQEAgLTc5LDIwICs3OSwyNCBAQCB2b2lkIEZGVENvbnZvbHZl
cjo6cHJvY2VzcyhGRlRGcmFtZSogZmZ0S2VybmVsLCBjb25zdCBmbG9hdCogc291cmNlUCwgZmxv
YXQqIGRlcwogICAgIHNpemVfdCBoYWxmU2l6ZSA9IGZmdFNpemUoKSAvIDI7CiAgICAgaWYgKG1f
cmVhZFdyaXRlSW5kZXggPT0gaGFsZlNpemUpIHsKICAgICAgICAgLy8gVGhlIGlucHV0IGJ1ZmZl
ciBpcyBub3cgZmlsbGVkIChnZXQgZnJlcXVlbmN5LWRvbWFpbiB2ZXJzaW9uKQotICAgICAgICBt
X2ZyYW1lLmRvRkZUKG1faW5wdXRCdWZmZXIuZGF0YSgpKTsKLSAgICAgICAgbV9mcmFtZS5tdWx0
aXBseSgqZmZ0S2VybmVsKTsKLSAgICAgICAgbV9mcmFtZS5kb0ludmVyc2VGRlQobV9vdXRwdXRC
dWZmZXIuZGF0YSgpKTsKLQotICAgICAgICAvLyBPdmVybGFwLWFkZCAxc3QgaGFsZiBmcm9tIHBy
ZXZpb3VzIHRpbWUKLSAgICAgICAgdmFkZChtX291dHB1dEJ1ZmZlci5kYXRhKCksIDEsIG1fbGFz
dE92ZXJsYXBCdWZmZXIuZGF0YSgpLCAxLCBtX291dHB1dEJ1ZmZlci5kYXRhKCksIDEsIGhhbGZT
aXplKTsKLQotICAgICAgICAvLyBGaW5hbGx5LCBzYXZlIDJuZCBoYWxmIG9mIHJlc3VsdAotICAg
ICAgICBib29sIGlzQ29weUdvb2QzID0gbV9vdXRwdXRCdWZmZXIuc2l6ZSgpID09IDIgKiBoYWxm
U2l6ZSAmJiBtX2xhc3RPdmVybGFwQnVmZmVyLnNpemUoKSA9PSBoYWxmU2l6ZTsKLSAgICAgICAg
QVNTRVJUKGlzQ29weUdvb2QzKTsKLSAgICAgICAgaWYgKCFpc0NvcHlHb29kMykKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIG1lbWNweShtX2xhc3RPdmVybGFwQnVmZmVy
LmRhdGEoKSwgbV9vdXRwdXRCdWZmZXIuZGF0YSgpICsgaGFsZlNpemUsIHNpemVvZihmbG9hdCkg
KiBoYWxmU2l6ZSk7CisgICAgICAgIHNpemVfdCBrZXJuZWxTaXplID0gZmZ0S2VybmVsLT5mZnRT
aXplKCkgLyAyOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGFsZlNpemU7IGkg
Kz0ga2VybmVsU2l6ZSkgeworICAgICAgICAgICAgbV9mcmFtZS5kb0ZGVChtX2lucHV0QnVmZmVy
LmRhdGEoKSArIGkpOworICAgICAgICAgICAgbV9mcmFtZS5tdWx0aXBseSgqZmZ0S2VybmVsKTsK
KyAgICAgICAgICAgIG1fZnJhbWUuZG9JbnZlcnNlRkZUKG1fb3V0cHV0QnVmZmVyLmRhdGEoKSAr
IGkpOworCisgICAgICAgICAgICAvLyBPdmVybGFwLWFkZCB0aGUgdGFpbCBwYXJ0IGZyb20gcHJl
dmlvdXMgdGltZQorICAgICAgICAgICAgdmFkZChtX291dHB1dEJ1ZmZlci5kYXRhKCkgKyBpLCAx
LCBtX2xhc3RPdmVybGFwQnVmZmVyLmRhdGEoKSwgMSwgbV9vdXRwdXRCdWZmZXIuZGF0YSgpICsg
aSwgMSwga2VybmVsU2l6ZSk7CisKKyAgICAgICAgICAgIC8vIEZpbmFsbHksIHNhdmUgdGhlIHRh
aWwgb2YgcmVzdWx0CisgICAgICAgICAgICBib29sIGlzQ29weUdvb2QzID0gbV9vdXRwdXRCdWZm
ZXIuc2l6ZSgpID49IGhhbGZTaXplICsga2VybmVsU2l6ZSAmJiBtX2xhc3RPdmVybGFwQnVmZmVy
LnNpemUoKSA+PSBrZXJuZWxTaXplOworICAgICAgICAgICAgQVNTRVJUKGlzQ29weUdvb2QzKTsK
KyAgICAgICAgICAgIGlmICghaXNDb3B5R29vZDMpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICBtZW1jcHkobV9sYXN0T3ZlcmxhcEJ1ZmZlci5kYXRhKCksIG1fb3V0cHV0
QnVmZmVyLmRhdGEoKSArIGkgKyBrZXJuZWxTaXplLCBzaXplb2YoZmxvYXQpICoga2VybmVsU2l6
ZSk7CisgICAgICAgIH0KIAogICAgICAgICAvLyBSZXNldCBpbmRleCBiYWNrIHRvIHN0YXJ0IGZv
ciBuZXh0IHRpbWUKICAgICAgICAgbV9yZWFkV3JpdGVJbmRleCA9IDA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcAppbmRleCA3NDU5ZjNi
ODM1NWI1YzQzMGZjYzRhNjliNGI1YTNhMzk1NDIxNWExLi41YTdjZTVkM2Y5NmExMWQ2N2JjNjNl
MjRhMzk3ZDRlNmQ0OGRmNDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9SZXZlcmJDb252b2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKQEAgLTg0LDggKzg0LDcgQEAgUmV2ZXJiQ29udm9sdmVy
OjpSZXZlcmJDb252b2x2ZXIoQXVkaW9DaGFubmVsKiBpbXB1bHNlUmVzcG9uc2UsIHNpemVfdCBy
ZW5kZXJTbGkKICAgICBjb25zdCBmbG9hdCogcmVzcG9uc2UgPSBpbXB1bHNlUmVzcG9uc2UtPmRh
dGEoKTsKICAgICBzaXplX3QgdG90YWxSZXNwb25zZUxlbmd0aCA9IGltcHVsc2VSZXNwb25zZS0+
bGVuZ3RoKCk7CiAKLSAgICAvLyBCZWNhdXNlIHdlJ3JlIG5vdCB1c2luZyBkaXJlY3QtY29udm9s
dXRpb24gaW4gdGhlIGxlYWRpbmcgcG9ydGlvbiwgdGhlIHJldmVyYiBoYXMgYW4gb3ZlcmFsbCBs
YXRlbmN5IG9mIGhhbGYgdGhlIGZpcnN0LXN0YWdlIEZGVCBzaXplCi0gICAgc2l6ZV90IHJldmVy
YlRvdGFsTGF0ZW5jeSA9IG1fbWluRkZUU2l6ZSAvIDI7CisgICAgc2l6ZV90IHJldmVyYlRvdGFs
TGF0ZW5jeSA9IDA7CiAKICAgICBzaXplX3Qgc3RhZ2VPZmZzZXQgPSAwOwogICAgIGludCBpID0g
MDsKQEAgLTEwMSw3ICsxMDAsOSBAQCBSZXZlcmJDb252b2x2ZXI6OlJldmVyYkNvbnZvbHZlcihB
dWRpb0NoYW5uZWwqIGltcHVsc2VSZXNwb25zZSwgc2l6ZV90IHJlbmRlclNsaQogICAgICAgICAv
LyBUaGlzICJzdGFnZ2VycyIgdGhlIHRpbWUgd2hlbiBlYWNoIEZGVCBoYXBwZW5zIHNvIHRoZXkg
ZG9uJ3QgYWxsIGhhcHBlbiBhdCB0aGUgc2FtZSB0aW1lCiAgICAgICAgIGludCByZW5kZXJQaGFz
ZSA9IGNvbnZvbHZlclJlbmRlclBoYXNlICsgaSAqIHJlbmRlclNsaWNlU2l6ZTsKIAotICAgICAg
ICBPd25QdHI8UmV2ZXJiQ29udm9sdmVyU3RhZ2U+IHN0YWdlID0gYWRvcHRQdHIobmV3IFJldmVy
YkNvbnZvbHZlclN0YWdlKHJlc3BvbnNlLCB0b3RhbFJlc3BvbnNlTGVuZ3RoLCByZXZlcmJUb3Rh
bExhdGVuY3ksIHN0YWdlT2Zmc2V0LCBzdGFnZVNpemUsIGZmdFNpemUsIHJlbmRlclBoYXNlLCBy
ZW5kZXJTbGljZVNpemUsICZtX2FjY3VtdWxhdGlvbkJ1ZmZlcikpOworICAgICAgICBib29sIHVz
ZURpcmVjdENvbnZvbHZlciA9ICFzdGFnZU9mZnNldDsKKworICAgICAgICBPd25QdHI8UmV2ZXJi
Q29udm9sdmVyU3RhZ2U+IHN0YWdlID0gYWRvcHRQdHIobmV3IFJldmVyYkNvbnZvbHZlclN0YWdl
KHJlc3BvbnNlLCB0b3RhbFJlc3BvbnNlTGVuZ3RoLCByZXZlcmJUb3RhbExhdGVuY3ksIHN0YWdl
T2Zmc2V0LCBzdGFnZVNpemUsIGZmdFNpemUsIHJlbmRlclBoYXNlLCByZW5kZXJTbGljZVNpemUs
ICZtX2FjY3VtdWxhdGlvbkJ1ZmZlciwgdXNlRGlyZWN0Q29udm9sdmVyKSk7CiAKICAgICAgICAg
Ym9vbCBpc0JhY2tncm91bmRTdGFnZSA9IGZhbHNlOwogCkBAIC0xMTQsOCArMTE1LDExIEBAIFJl
dmVyYkNvbnZvbHZlcjo6UmV2ZXJiQ29udm9sdmVyKEF1ZGlvQ2hhbm5lbCogaW1wdWxzZVJlc3Bv
bnNlLCBzaXplX3QgcmVuZGVyU2xpCiAgICAgICAgIHN0YWdlT2Zmc2V0ICs9IHN0YWdlU2l6ZTsK
ICAgICAgICAgKytpOwogCi0gICAgICAgIC8vIEZpZ3VyZSBvdXQgbmV4dCBGRlQgc2l6ZQotICAg
ICAgICBmZnRTaXplICo9IDI7CisgICAgICAgIGlmICghdXNlRGlyZWN0Q29udm9sdmVyKSB7Cisg
ICAgICAgICAgICAvLyBGaWd1cmUgb3V0IG5leHQgRkZUIHNpemUKKyAgICAgICAgICAgIGZmdFNp
emUgKj0gMjsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChoYXNSZWFsdGltZUNvbnN0cmFpbnQg
JiYgIWlzQmFja2dyb3VuZFN0YWdlICYmIGZmdFNpemUgPiBtX21heFJlYWx0aW1lRkZUU2l6ZSkK
ICAgICAgICAgICAgIGZmdFNpemUgPSBtX21heFJlYWx0aW1lRkZUU2l6ZTsKICAgICAgICAgaWYg
KGZmdFNpemUgPiBtX21heEZGVFNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL1JldmVyYkNvbnZvbHZlci5oCmluZGV4IGMzZDMwOWZmNTQ1NzQ5MzcxMGI1ZTAwMjRmZjg1
NzE4NzRlNTVkOWYuLmE3ZDY2MTk3NjNkN2MyOGNjMWE0NmZkMDg1NzFhMmE2Mzg2YzZlMzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oCkBA
IC0zMCw2ICszMCw3IEBACiAjZGVmaW5lIFJldmVyYkNvbnZvbHZlcl9oCiAKICNpbmNsdWRlICJB
dWRpb0FycmF5LmgiCisjaW5jbHVkZSAiRGlyZWN0Q29udm9sdmVyLmgiCiAjaW5jbHVkZSAiRkZU
Q29udm9sdmVyLmgiCiAjaW5jbHVkZSAiUmV2ZXJiQWNjdW11bGF0aW9uQnVmZmVyLmgiCiAjaW5j
bHVkZSAiUmV2ZXJiQ29udm9sdmVyU3RhZ2UuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmNwcAppbmRleCA1M2JiNjUwMDgz
MTA2NDcxOTFlMDBhOWRiOTU5YTAzZGE5ZmZlYTJlLi5mODFmYjNkMTU2ZjFjMmNkMjZiMzI1Mjg5
ZjdjYzg2NjQ5YmI2YTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9SZXZlcmJDb252b2x2ZXJTdGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vUmV2ZXJiQ29udm9sdmVyU3RhZ2UuY3BwCkBAIC00NCwxOCArNDQsMjUgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIFZlY3Rvck1hdGg7CiAKIFJldmVyYkNvbnZv
bHZlclN0YWdlOjpSZXZlcmJDb252b2x2ZXJTdGFnZShjb25zdCBmbG9hdCogaW1wdWxzZVJlc3Bv
bnNlLCBzaXplX3QgcmVzcG9uc2VMZW5ndGgsIHNpemVfdCByZXZlcmJUb3RhbExhdGVuY3ksIHNp
emVfdCBzdGFnZU9mZnNldCwgc2l6ZV90IHN0YWdlTGVuZ3RoLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBmZnRTaXplLCBzaXplX3QgcmVuZGVyUGhh
c2UsIHNpemVfdCByZW5kZXJTbGljZVNpemUsIFJldmVyYkFjY3VtdWxhdGlvbkJ1ZmZlciogYWNj
dW11bGF0aW9uQnVmZmVyKQotICAgIDogbV9mZnRLZXJuZWwoZmZ0U2l6ZSkKLSAgICAsIG1fYWNj
dW11bGF0aW9uQnVmZmVyKGFjY3VtdWxhdGlvbkJ1ZmZlcikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZmZ0U2l6ZSwgc2l6ZV90IHJlbmRlclBoYXNl
LCBzaXplX3QgcmVuZGVyU2xpY2VTaXplLCBSZXZlcmJBY2N1bXVsYXRpb25CdWZmZXIqIGFjY3Vt
dWxhdGlvbkJ1ZmZlciwgYm9vbCBkaXJlY3RNb2RlKQorICAgIDogbV9hY2N1bXVsYXRpb25CdWZm
ZXIoYWNjdW11bGF0aW9uQnVmZmVyKQogICAgICwgbV9hY2N1bXVsYXRpb25SZWFkSW5kZXgoMCkK
ICAgICAsIG1faW5wdXRSZWFkSW5kZXgoMCkKICAgICAsIG1faW1wdWxzZVJlc3BvbnNlTGVuZ3Ro
KHJlc3BvbnNlTGVuZ3RoKQorICAgICwgbV9kaXJlY3RNb2RlKGRpcmVjdE1vZGUpCiB7CiAgICAg
QVNTRVJUKGltcHVsc2VSZXNwb25zZSk7CiAgICAgQVNTRVJUKGFjY3VtdWxhdGlvbkJ1ZmZlcik7
Ci0gICAgCi0gICAgbV9mZnRLZXJuZWwuZG9QYWRkZWRGRlQoaW1wdWxzZVJlc3BvbnNlICsgc3Rh
Z2VPZmZzZXQsIHN0YWdlTGVuZ3RoKTsKLSAgICBtX2NvbnZvbHZlciA9IGFkb3B0UHRyKG5ldyBG
RlRDb252b2x2ZXIoZmZ0U2l6ZSkpOworCisgICAgaWYgKCFtX2RpcmVjdE1vZGUpIHsKKyAgICAg
ICAgbV9mZnRLZXJuZWwgPSBhZG9wdFB0cihuZXcgRkZURnJhbWUoZmZ0U2l6ZSkpOworICAgICAg
ICBtX2ZmdEtlcm5lbC0+ZG9QYWRkZWRGRlQoaW1wdWxzZVJlc3BvbnNlICsgc3RhZ2VPZmZzZXQs
IHN0YWdlTGVuZ3RoKTsKKyAgICAgICAgbV9mZnRDb252b2x2ZXIgPSBhZG9wdFB0cihuZXcgRkZU
Q29udm9sdmVyKGZmdFNpemUpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2RpcmVjdEtlcm5l
bCA9IGFkb3B0UHRyKG5ldyBBdWRpb0Zsb2F0QXJyYXkocmVuZGVyU2xpY2VTaXplKSk7CisgICAg
ICAgIG1fZGlyZWN0S2VybmVsLT5jb3B5VG9SYW5nZShpbXB1bHNlUmVzcG9uc2UgKyBzdGFnZU9m
ZnNldCwgMCwgcmVuZGVyU2xpY2VTaXplKTsKKyAgICAgICAgbV9kaXJlY3RDb252b2x2ZXIgPSBh
ZG9wdFB0cihuZXcgRGlyZWN0Q29udm9sdmVyKHJlbmRlclNsaWNlU2l6ZSkpOworICAgIH0KICAg
ICBtX3RlbXBvcmFyeUJ1ZmZlci5hbGxvY2F0ZShyZW5kZXJTbGljZVNpemUpOwogCiAgICAgLy8g
VGhlIGNvbnZvbHV0aW9uIHN0YWdlIGF0IG9mZnNldCBzdGFnZU9mZnNldCBuZWVkcyB0byBoYXZl
IGEgY29ycmVzcG9uZGluZyBkZWxheSB0byBjYW5jZWwgb3V0IHRoZSBvZmZzZXQuCkBAIC0xMzMs
NyArMTQwLDEwIEBAIHZvaWQgUmV2ZXJiQ29udm9sdmVyU3RhZ2U6OnByb2Nlc3MoY29uc3QgZmxv
YXQqIHNvdXJjZSwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICAgICAgLy8gTm93LCBydW4g
dGhlIGNvbnZvbHV0aW9uIChpbnRvIHRoZSBkZWxheSBidWZmZXIpLgogICAgICAgICAvLyBBbiBl
eHBlbnNpdmUgRkZUIHdpbGwgaGFwcGVuIGV2ZXJ5IGZmdFNpemUgLyAyIGZyYW1lcy4KICAgICAg
ICAgLy8gV2UgcHJvY2VzcyBpbi1wbGFjZSBoZXJlLi4uCi0gICAgICAgIG1fY29udm9sdmVyLT5w
cm9jZXNzKCZtX2ZmdEtlcm5lbCwgcHJlRGVsYXllZFNvdXJjZSwgdGVtcG9yYXJ5QnVmZmVyLCBm
cmFtZXNUb1Byb2Nlc3MpOworICAgICAgICBpZiAoIW1fZGlyZWN0TW9kZSkKKyAgICAgICAgICAg
IG1fZmZ0Q29udm9sdmVyLT5wcm9jZXNzKG1fZmZ0S2VybmVsLmdldCgpLCBwcmVEZWxheWVkU291
cmNlLCB0ZW1wb3JhcnlCdWZmZXIsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fZGlyZWN0Q29udm9sdmVyLT5wcm9jZXNzKG1fZGlyZWN0S2VybmVsLmdldCgp
LCBwcmVEZWxheWVkU291cmNlLCB0ZW1wb3JhcnlCdWZmZXIsIGZyYW1lc1RvUHJvY2Vzcyk7CiAK
ICAgICAgICAgLy8gTm93IGFjY3VtdWxhdGUgaW50byByZXZlcmIncyBhY2N1bXVsYXRpb24gYnVm
ZmVyLgogICAgICAgICBtX2FjY3VtdWxhdGlvbkJ1ZmZlci0+YWNjdW11bGF0ZSh0ZW1wb3JhcnlC
dWZmZXIsIGZyYW1lc1RvUHJvY2VzcywgJm1fYWNjdW11bGF0aW9uUmVhZEluZGV4LCBtX3Bvc3RE
ZWxheUxlbmd0aCk7CkBAIC0xNTQsNyArMTY0LDEwIEBAIHZvaWQgUmV2ZXJiQ29udm9sdmVyU3Rh
Z2U6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykK
IAogdm9pZCBSZXZlcmJDb252b2x2ZXJTdGFnZTo6cmVzZXQoKQogewotICAgIG1fY29udm9sdmVy
LT5yZXNldCgpOworICAgIGlmICghbV9kaXJlY3RNb2RlKQorICAgICAgICBtX2ZmdENvbnZvbHZl
ci0+cmVzZXQoKTsKKyAgICBlbHNlCisgICAgICAgIG1fZGlyZWN0Q29udm9sdmVyLT5yZXNldCgp
OwogICAgIG1fcHJlRGVsYXlCdWZmZXIuemVybygpOwogICAgIG1fYWNjdW11bGF0aW9uUmVhZElu
ZGV4ID0gMDsKICAgICBtX2lucHV0UmVhZEluZGV4ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXJTdGFnZS5oCmluZGV4IDk4MTFiYzYw
MzIxNjc2NDYwMGM5Y2IxNzI1MTdkZWYxNThhMzZkYzguLjljZThkY2FjODc4OWI0ZWUxMTY2ZWJi
OWNkNTBkNzFhMTk4MDFjZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vUmV2ZXJiQ29udm9sdmVyU3RhZ2UuaApAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBSZXZlcmJBY2N1bXVsYXRpb25CdWZmZXI7CiBjbGFzcyBSZXZlcmJD
b252b2x2ZXI7CiBjbGFzcyBGRlRDb252b2x2ZXI7CitjbGFzcyBEaXJlY3RDb252b2x2ZXI7CiAg
ICAgCiAvLyBBIFJldmVyYkNvbnZvbHZlclN0YWdlIHJlcHJlc2VudHMgdGhlIGNvbnZvbHV0aW9u
IGFzc29jaWF0ZWQgd2l0aCBhIHN1Yi1zZWN0aW9uIG9mIGEgbGFyZ2UgaW1wdWxzZSByZXNwb25z
ZS4KIC8vIEl0IGluY29ycG9yYXRlcyBhIGRlbGF5IGxpbmUgdG8gYWNjb3VudCBmb3IgdGhlIG9m
ZnNldCBvZiB0aGUgc3ViLXNlY3Rpb24gd2l0aGluIHRoZSBsYXJnZXIgaW1wdWxzZSByZXNwb25z
ZS4KQEAgLTQ1LDggKzQ2LDcgQEAgY2xhc3MgUmV2ZXJiQ29udm9sdmVyU3RhZ2UgewogcHVibGlj
OgogICAgIC8vIHJlbmRlclBoYXNlIGlzIHVzZWZ1bCB0byBrbm93IHNvIHRoYXQgd2UgY2FuIG1h
bmlwdWxhdGUgdGhlIHByZSB2ZXJzdXMgcG9zdCBkZWxheSBzbyB0aGF0IHN0YWdlcyB3aWxsIHBl
cmZvcm0KICAgICAvLyB0aGVpciBoZWF2eSB3b3JrIChGRlQgcHJvY2Vzc2luZykgb24gZGlmZmVy
ZW50IHNsaWNlcyB0byBiYWxhbmNlIHRoZSBsb2FkIGluIGEgcmVhbC10aW1lIHRocmVhZC4KLSAg
ICBSZXZlcmJDb252b2x2ZXJTdGFnZShjb25zdCBmbG9hdCogaW1wdWxzZVJlc3BvbnNlLCBzaXpl
X3QgcmVzcG9uc2VMZW5ndGgsIHNpemVfdCByZXZlcmJUb3RhbExhdGVuY3ksIHNpemVfdCBzdGFn
ZU9mZnNldCwgc2l6ZV90IHN0YWdlTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBmZnRTaXplLCBzaXplX3QgcmVuZGVyUGhhc2UsIHNpemVfdCByZW5kZXJTbGljZVNpemUs
IFJldmVyYkFjY3VtdWxhdGlvbkJ1ZmZlciogYWNjdW11bGF0aW9uQnVmZmVyKTsKKyAgICBSZXZl
cmJDb252b2x2ZXJTdGFnZShjb25zdCBmbG9hdCogaW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVz
cG9uc2VMZW5ndGgsIHNpemVfdCByZXZlcmJUb3RhbExhdGVuY3ksIHNpemVfdCBzdGFnZU9mZnNl
dCwgc2l6ZV90IHN0YWdlTGVuZ3RoLCBzaXplX3QgZmZ0U2l6ZSwgc2l6ZV90IHJlbmRlclBoYXNl
LCBzaXplX3QgcmVuZGVyU2xpY2VTaXplLCBSZXZlcmJBY2N1bXVsYXRpb25CdWZmZXIqLCBib29s
IGRpcmVjdE1vZGUgPSBmYWxzZSk7CiAKICAgICAvLyBXQVJOSU5HOiBmcmFtZXNUb1Byb2Nlc3Mg
bXVzdCBiZSBzdWNoIHRoYXQgaXQgZXZlbmx5IGRpdmlkZXMgdGhlIGRlbGF5IGJ1ZmZlciBzaXpl
IChzdGFnZV9vZmZzZXQpLgogICAgIHZvaWQgcHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBz
aXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKQEAgLTU5LDggKzU5LDggQEAgcHVibGljOgogICAgIGlu
dCBpbnB1dFJlYWRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRSZWFkSW5kZXg7IH0KIAog
cHJpdmF0ZToKLSAgICBGRlRGcmFtZSBtX2ZmdEtlcm5lbDsKLSAgICBPd25QdHI8RkZUQ29udm9s
dmVyPiBtX2NvbnZvbHZlcjsKKyAgICBPd25QdHI8RkZURnJhbWU+IG1fZmZ0S2VybmVsOworICAg
IE93blB0cjxGRlRDb252b2x2ZXI+IG1fZmZ0Q29udm9sdmVyOwogCiAgICAgQXVkaW9GbG9hdEFy
cmF5IG1fcHJlRGVsYXlCdWZmZXI7CiAKQEAgLTc2LDYgKzc2LDEwIEBAIHByaXZhdGU6CiAgICAg
QXVkaW9GbG9hdEFycmF5IG1fdGVtcG9yYXJ5QnVmZmVyOwogCiAgICAgc2l6ZV90IG1faW1wdWxz
ZVJlc3BvbnNlTGVuZ3RoOworCisgICAgYm9vbCBtX2RpcmVjdE1vZGU7CisgICAgT3duUHRyPEF1
ZGlvRmxvYXRBcnJheT4gbV9kaXJlY3RLZXJuZWw7CisgICAgT3duUHRyPERpcmVjdENvbnZvbHZl
cj4gbV9kaXJlY3RDb252b2x2ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggOGM3ODBlOGJjMzUwMDE1NmNiYmQ5NGUzMWMyZjNhNDBkMGI0OGRkYS4uNDZjZWM2ZmNkOWJl
Mjg3YzgzMzg3MWRlY2JmMTNhN2E4MWY4MGVmZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEy
LTAzLTEyICBYaW5nbmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAg
IENvbnZvbHZlck5vZGUgc2hvdWxkIG5vdCBpbmN1ciBwcm9jZXNzaW5nIGxhdGVuY3kKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTY0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmVlZCB0byBjaGVj
ayB0aGUgaW5pdGlhbCBzaWxlbnQgcGFydCBiZWNhdXNlIHRoZSBsYXRlbmN5IGlzc3VlIG9mIENv
bnZvbHZlck5vZGUgaXMgZml4ZWQuCisKKyAgICAgICAgKiB3ZWJhdWRpby9jb252b2x1dGlvbi1t
b25vLW1vbm8tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYmF1ZGlvL3Jlc291cmNlcy9jb252
b2x1dGlvbi10ZXN0aW5nLmpzOgorICAgICAgICAoY2hlY2tUcmlhbmd1bGFyUHVsc2UpOgorICAg
ICAgICAoY2hlY2tUYWlsMSk6CisgICAgICAgIChjaGVja0NvbnZvbHZlZFJlc3VsdC5yZXR1cm4u
dmFyKToKKyAgICAgICAgKGNoZWNrQ29udm9sdmVkUmVzdWx0KToKKwogMjAxMi0wMy0xMiAgU2hl
cmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjExMDUyNC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1
ZGlvL2NvbnZvbHV0aW9uLW1vbm8tbW9uby1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJh
dWRpby9jb252b2x1dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0CmluZGV4IDg3MDVmNjYxYzNh
Mjg2YzQ4NTczNmNhNDVhNDQzNzUzYTU2YTczNWEuLjNhZTJhMDQ4NjY4OWQ2NWM0ZWY2ZDYwMzRi
Njk1YzdkNmVhMDIyMWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0
aW9uLW1vbm8tbW9uby1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY29u
dm9sdXRpb24tbW9uby1tb25vLWV4cGVjdGVkLnR4dApAQCAtMiw3ICsyLDYgQEAgVGVzdHMgQ29u
dm9sdmVyTm9kZSBwcm9jZXNzaW5nIGEgbW9ubyBjaGFubmVsIHdpdGggbW9ubyBpbXB1bHNlIHJl
c3BvbnNlLgogCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKLVBBU1MgSW5pdGlhbCBsYXRl
bmN5IG9mIGNvbnZvbHZlciBpcyBzaWxlbnQuCiBQQVNTIFRyaWFuZ3VsYXIgcG9ydGlvbiBvZiBj
b252b2x1dGlvbiBpcyBjb3JyZWN0LgogUEFTUyBGaXJzdCBwYXJ0IG9mIHRhaWwgb2YgY29udm9s
dXRpb24gaXMgc3VmZmljaWVudGx5IHNtYWxsLgogUEFTUyBSZW5kZXJlZCBzaWduYWwgYWZ0ZXIg
dGFpbCBvZiBjb252b2x1dGlvbiBpcyBzaWxlbnQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJhdWRpby9yZXNvdXJjZXMvY29udm9sdXRpb24tdGVzdGluZy5qcyBiL0xheW91dFRlc3RzL3dl
YmF1ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzCmluZGV4IGQ3ZWY4ZWE1MWE5
N2EzMTM4ZjdkOGY5NzAyZjMyNDZjMWVjOTMwNjcuLmMyY2FiYTEwNjAxYTIxZThlNzBiY2YwZDZl
NDcyNGRjNjUyNDEzNzkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNl
cy9jb252b2x1dGlvbi10ZXN0aW5nLmpzCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291
cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzCkBAIC00LDExICs0LDYgQEAgdmFyIHJlbmRlckxl
bmd0aFNlY29uZHMgPSA4OwogdmFyIHB1bHNlTGVuZ3RoU2Vjb25kcyA9IDE7CiB2YXIgcHVsc2VM
ZW5ndGhGcmFtZXMgPSBwdWxzZUxlbmd0aFNlY29uZHMgKiBzYW1wbGVSYXRlOwogCi0vLyBUaGUg
Y29udm9sdmVyIGhhcyBhIGxhdGVuY3kgb2YgMTI4IHNhbXBsZXMgaW4gdGhlIGltcGxlbWVudGF0
aW9uLgotLy8gV2UgbmVlZCB0byB0YWtlIHRoaXMgaW50byBhY2NvdW50IHdoZW4gdmVyaWZ5aW5n
IHRoZSBvdXRwdXQgb2YgdGhlCi0vLyBjb252b2x2ZXIuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1NjQuCi12YXIgY29udm9sdmVEZWxheVNhbXBsZXMgPSAx
Mjg7Ci0KIGZ1bmN0aW9uIGNyZWF0ZVNxdWFyZVB1bHNlQnVmZmVyKGNvbnRleHQsIHNhbXBsZUZy
YW1lTGVuZ3RoKSB7CiAgICAgdmFyIGF1ZGlvQnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIo
MSwgc2FtcGxlRnJhbWVMZW5ndGgsIGNvbnRleHQuc2FtcGxlUmF0ZSk7CiAKQEAgLTQxLDI3ICsz
Niw2IEBAIGZ1bmN0aW9uIGNyZWF0ZVRyaWFuZ2xlUHVsc2VCdWZmZXIoY29udGV4dCwgc2FtcGxl
RnJhbWVMZW5ndGgpIHsKICAgICByZXR1cm4gYXVkaW9CdWZmZXI7CiB9CiAKLS8vIFZlcmlmeSB0
aGF0IHRoZSBpbml0aWFsIGxhdGVuY3kgb2YgdGhlIGNvbnZvbHZlciBpcyBleGFjdGx5IHplcm8u
Ci0vLyBSZXR1cm4gdHJ1ZSBpZiBzby4KLWZ1bmN0aW9uIGNoZWNrTGF0ZW5jeShkYXRhKSB7Ci0g
ICAgdmFyIGlzWmVybyA9IHRydWU7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnZvbHZl
RGVsYXlTYW1wbGVzOyArK2kpIHsKLSAgICAgICAgaWYgKGRhdGFbaV0gIT0gMCkgewotICAgICAg
ICAgICAgaXNaZXJvID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChpc1plcm8pIHsKLSAgICAgICAgdGVzdFBhc3NlZCgiSW5pdGlhbCBsYXRl
bmN5IG9mIGNvbnZvbHZlciBpcyBzaWxlbnQuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGVz
dEZhaWxlZCgiSW5pdGlhbCBsYXRlbmN5IG9mIGNvbnZvbHZlciBpcyBub3Qgc2lsZW50LiIpOwot
ICAgIH0KLQotICAgIHJldHVybiBpc1plcm87Ci19Ci0KIGZ1bmN0aW9uIGxvZzEwKHgpIHsKICAg
cmV0dXJuIE1hdGgubG9nKHgpL01hdGguTE4xMDsKIH0KQEAgLTc5LDcgKzUzLDcgQEAgZnVuY3Rp
b24gY2hlY2tUcmlhbmd1bGFyUHVsc2UocmVuZGVyZWQsIHJlZmVyZW5jZSkgewogICAgIHZhciBt
YXhEZWx0YUluZGV4ID0gMDsKIAogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVmZXJlbmNlLmxl
bmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBkaWZmID0gcmVuZGVyZWRbaSArIGNvbnZvbHZlRGVs
YXlTYW1wbGVzXSAtIHJlZmVyZW5jZVtpXTsKKyAgICAgICAgdmFyIGRpZmYgPSByZW5kZXJlZFtp
XSAtIHJlZmVyZW5jZVtpXTsKICAgICAgICAgdmFyIHggPSBNYXRoLmFicyhkaWZmKTsKICAgICAg
ICAgaWYgKHggPiBtYXhEZWx0YSkgewogICAgICAgICAgICAgbWF4RGVsdGEgPSB4OwpAQCAtMTEx
LDcgKzg1LDcgQEAgZnVuY3Rpb24gY2hlY2tUYWlsMShkYXRhLCByZWZlcmVuY2UsIGJyZWFrcG9p
bnQpIHsKICAgICB2YXIgaXNaZXJvID0gdHJ1ZTsKICAgICB2YXIgdGFpbDFNYXggPSAwOwogCi0g
ICAgZm9yICh2YXIgaSA9IHJlZmVyZW5jZS5sZW5ndGggKyBjb252b2x2ZURlbGF5U2FtcGxlczsg
aSA8IHJlZmVyZW5jZS5sZW5ndGggKyBicmVha3BvaW50OyArK2kpIHsKKyAgICBmb3IgKHZhciBp
ID0gcmVmZXJlbmNlLmxlbmd0aDsgaSA8IHJlZmVyZW5jZS5sZW5ndGggKyBicmVha3BvaW50OyAr
K2kpIHsKICAgICAgICAgdmFyIG1hZyA9IE1hdGguYWJzKGRhdGFbaV0pOwogICAgICAgICBpZiAo
bWFnID4gdGFpbDFNYXgpIHsKICAgICAgICAgICAgIHRhaWwxTWF4ID0gbWFnOwpAQCAtMTczLDEx
ICsxNDcsNiBAQCBmdW5jdGlvbiBjaGVja0NvbnZvbHZlZFJlc3VsdCh0cmlhbmdsZVB1bHNlKSB7
CiAgICAgCiAgICAgICAgIHZhciBzdWNjZXNzID0gdHJ1ZTsKICAgICAKLSAgICAgICAgLy8gVmVy
aWZ5IHRoZSBpbml0aWFsIHBhcnQgaXMgZXhhY3RseSB6ZXJvIGJlY2F1c2Ugb2YgdGhlCi0gICAg
ICAgIC8vIGxhdGVuY3kgaW4gdGhlIGNvbnZvbHZlci4KLQotICAgICAgICBzdWNjZXNzID0gc3Vj
Y2VzcyAmJiBjaGVja0xhdGVuY3kocmVuZGVyZWREYXRhKTsKLQogICAgICAgICAvLyBWZXJpZnkg
dGhlIHRyaWFuZ3VsYXIgcHVsc2UgaXMgYWN0dWFsbHkgdHJpYW5ndWxhci4KIAogICAgICAgICBz
dWNjZXNzID0gc3VjY2VzcyAmJiBjaGVja1RyaWFuZ3VsYXJQdWxzZShyZW5kZXJlZERhdGEsIHJl
ZmVyZW5jZURhdGEpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131789</attachid>
            <date>2012-03-13 22:42:24 -0700</date>
            <delta_ts>2012-03-15 20:45:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75564-20120314134531.patch</filename>
            <type>text/plain</type>
            <size>36458</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmQwOTE2YmE3MDM0ZmQz
MDhkNGNhNDA1MzM0YTUyZjVhOGVhNzA5MC4uZjMzMzE1ZmE2MDRjYzE5Y2MwZDdlYTYzYWFhNGNi
NWY5ZjRiOWQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAzLTEyICBYaW5n
bmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIENvbnZvbHZlck5v
ZGUgc2hvdWxkIG5vdCBpbmN1ciBwcm9jZXNzaW5nIGxhdGVuY3kKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTY0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBEaXJlY3RDb252b2x2ZXIgaW5z
dGVhZCBvZiBGRlRDb252b2x2ZXIgZm9yIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSBsZWFkaW5nIHBv
cnRpb24gb2YgaW1wdWxzZSByZXNwb25zZS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0Q29udm9sdmVyOjpEaXJlY3RD
b252b2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0Q29udm9sdmVyOjpwcm9jZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdENvbnZvbHZlcjo6cmVzZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoRGlyZWN0Q29udm9sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdENv
bnZvbHZlcjo6Y29udm9sdmVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmJD
b252b2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpSZXZlcmJD
b252b2x2ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJldmVyYkNvbnZvbHZlclN0YWdlOjpSZXZlcmJDb252b2x2ZXJTdGFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXJTdGFnZTo6cHJvY2Vzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXJTdGFnZTo6cmVzZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFJldmVyYkNvbnZvbHZlclN0YWdlKToKKwogMjAxMi0wMy0xMiAgQmVuamFtaW4g
UG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggSW5kZXhlZERCIGJ1
aWxkIHdpdGggSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBhMzQ0NDM2OTU5
N2ViYWQ1ZDc0YTBiZWI3NDFkNTgzN2IwM2U0MDkyLi42OTM1NTVkZWQ2MGRhZDc4ZTk0NDA5MjY0
Yzg0NzFhZmMxZTQzYTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU0Njcs
NiArNTQ2Nyw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vRXF1YWxQb3dlclBhbm5lci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9GRlRDb252b2x2ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9G
RlRDb252b2x2ZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29u
dm9sdmVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29udm9s
dmVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWUuaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWVTdHViLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXgg
YjgxNzFlYzY4NDU0YzdjY2EyNGEzMjFmYTNlNGFjZmZkYTFjNDMyMy4uYjQ3YzlmOGEyMzdmODU2
OGMwYzBlZTViYTMxNWVmZjMzMTFmZDE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzAzNyw2ICsz
MDM3LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0ZGVENvbnZvbHZlci5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0ZGVENvbnZvbHZlci5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9h
dWRpby9EaXJlY3RDb252b2x2ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vRkZU
RnJhbWUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9GRlRGcmFtZS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9GRlRGcmFtZVN0dWIuY3BwJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjM5ZjNlNWMzYjcxMWQzZjMwMmNhYzc3MjA5Yjk1ZjQyNTczMzc3MTYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuY3BwCkBA
IC0wLDAgKzEsMzU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FV
RElPKQorCisjaW5jbHVkZSAiRGlyZWN0Q29udm9sdmVyLmgiCisKKyNpbmNsdWRlICJWZWN0b3JN
YXRoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFZlY3Rvck1h
dGg7CisgICAgCitEaXJlY3RDb252b2x2ZXI6OkRpcmVjdENvbnZvbHZlcihzaXplX3QgaW5wdXRC
bG9ja1NpemUpCisgICAgOiBtX2lucHV0QmxvY2tTaXplKGlucHV0QmxvY2tTaXplKQorICAgICwg
bV9pbnB1dEJ1ZmZlcihpbnB1dEJsb2NrU2l6ZSAqIDIpCit7Cit9CisKK3ZvaWQgRGlyZWN0Q29u
dm9sdmVyOjpwcm9jZXNzKEF1ZGlvRmxvYXRBcnJheSogY29udm9sdXRpb25LZXJuZWwsIGNvbnN0
IGZsb2F0KiBzb3VyY2VQLCBmbG9hdCogZGVzdFAsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7
CisgICAgLy8gRklYTUU6IE9wdGltaXplIGZvciBJUFAsIHJldmVyYiBmdW5jdGlvbiBpbiBJUFAg
bGlicmFyeSBjYW4gYmUgdXNlZCBoZXJlLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04MDI1NQorICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBmb3IgREFSV0lO
LCBjb252KCkgZnVuY3Rpb24gaW4gQWNjZWxlcmF0ZS5mcmFtZXdvcmsgY2FuIGJlIHVzZWQgaGVy
ZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODAyNTYK
KworICAgIEFTU0VSVChmcmFtZXNUb1Byb2Nlc3MgPT0gbV9pbnB1dEJsb2NrU2l6ZSk7CisgICAg
aWYgKGZyYW1lc1RvUHJvY2VzcyAhPSBtX2lucHV0QmxvY2tTaXplKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBPbmx5IHN1cHBvcnQga2VybmVsU2l6ZSA8PSBtX2lucHV0QmxvY2tTaXplCisg
ICAgc2l6ZV90IGtlcm5lbFNpemUgPSBjb252b2x1dGlvbktlcm5lbC0+c2l6ZSgpOworICAgIEFT
U0VSVChrZXJuZWxTaXplIDw9IG1faW5wdXRCbG9ja1NpemUpOworICAgIGlmIChrZXJuZWxTaXpl
ID4gbV9pbnB1dEJsb2NrU2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQqIGtlcm5l
bFAgPSBjb252b2x1dGlvbktlcm5lbC0+ZGF0YSgpOworCisgICAgZmxvYXQqIGlucHV0UCA9IG1f
aW5wdXRCdWZmZXIuZGF0YSgpICsgbV9pbnB1dEJsb2NrU2l6ZTsKKworICAgIC8vIFNhbml0eSBj
aGVjaworICAgIGJvb2wgaXNDb3B5R29vZCA9IGtlcm5lbFAgJiYgc291cmNlUCAmJiBkZXN0UCAm
JiBtX2lucHV0QnVmZmVyLmRhdGEoKTsKKyAgICBBU1NFUlQoaXNDb3B5R29vZCk7CisgICAgaWYg
KCFpc0NvcHlHb29kKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDb3B5IHNhbXBsZXMgdG8g
Mm5kIGhhbGYgb2YgaW5wdXQgYnVmZmVyLgorICAgIG1lbWNweShpbnB1dFAsIHNvdXJjZVAsIHNp
emVvZihmbG9hdCkgKiBmcmFtZXNUb1Byb2Nlc3MpOworCisgICAgLy8gRklYTUU6IFRoZSBtYWNy
byBjYW4gYmUgZnVydGhlciBvcHRpbWl6ZWQgdG8gYXZvaWQgcGlwZWxpbmUgc3RhbGxzLiBPbmUg
cG9zc2liaWxpdHkgaXMgdG8gbWFpbnRhaW4gNCBzZXBhcmF0ZSBzdW1zIGFuZCBjaGFuZ2UgdGhl
IG1hY3JvIHRvIENPTlZPTFZFX0ZPVVJfU0FNUExFUy4KKyNkZWZpbmUgQ09OVk9MVkVfT05FX1NB
TVBMRSAgICAgICAgICAgICBcCisgICAgc3VtICs9IGlucHV0UFtpIC0gal0gKiBrZXJuZWxQW2pd
OyAgXAorICAgIGorKzsKKworICAgIHNpemVfdCBpID0gMDsKKyAgICB3aGlsZSAoaSA8IGZyYW1l
c1RvUHJvY2VzcykgeworICAgICAgICBzaXplX3QgaiA9IDA7CisgICAgICAgIGZsb2F0IHN1bSA9
IDA7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogU1NFIG9wdGltaXphdGlvbiBtYXkgYmUg
YXBwbGllZCBoZXJlLgorICAgICAgICBpZiAoa2VybmVsU2l6ZSA9PSAzMikgeworICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMworICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNgorICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOQorICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDExCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEyCisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEzCisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDE0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE1Cisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE2CisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDE3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE4
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE5CisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDIwCisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gMjEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjIKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gMjQKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjUKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gMjcKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjgKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjkKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gMzAKKworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzMQor
ICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzMgorCisgICAgICAgIH0gZWxzZSBp
ZiAoa2VybmVsU2l6ZSA9PSA2NCkgeworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyA0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gNgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyA3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDgKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gOQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAxMAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDExCisgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEyCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDEzCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE0CisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE1CisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDE2CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE3CisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE4CisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDE5CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIwCisK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjEKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gMjIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8g
MjMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjQKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMjUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gMjYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjcKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gMjkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzAKKworICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzMQorICAgICAgICAgICAgQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyAzMgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzMworICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzNAorICAgICAgICAgICAgQ09OVk9MVkVf
T05FX1NBTVBMRSAvLyAzNQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzNgor
ICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzNworICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyAzOAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAz
OQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0MAorCisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDQxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDQyCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQzCisgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDQ1CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ2CisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDQ4CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ5CisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUwCisKKyAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gNTEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTIK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTMKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gNTQKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8g
NTUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTYKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gNTcKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gNTgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTkKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjAKKworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyA2MQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA2MgorICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA2MworICAgICAgICAgICAgQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyA2NAorCisgICAgICAgIH0gZWxzZSBpZiAoa2VybmVsU2l6ZSA9PSAxMjgpIHsK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMQorICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyAyCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDMK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNAorICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyA1CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDYK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNworICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyA4CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDkK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTAKKworICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyAxMQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAxMgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMworICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyAxNQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNgorICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyAxOAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxOQorICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyMAorCisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDIxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIyCisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIzCisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDI0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI1
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI2CisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDI3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDI4CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI5CisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDMwCisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gMzEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzIKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gMzQKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzUKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzYKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gMzcKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzgKKyAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzkKKyAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gNDAKKworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0
MQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0MgorICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyA0MworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyA0NAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0NQorICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyA0NgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyA0NworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0OAorICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0OQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyA1MAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUxCisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUyCisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDUzCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU0Cisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU1CisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDU2CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU3
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU4CisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDU5CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDYwCisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjEKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gNjMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjQKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gNjYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjcKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjgKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gNjkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNzAKKwor
ICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3MQorICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyA3MgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3
MworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3NAorICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyA3NQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyA3NgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3NworICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyA3OAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyA3OQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA4MAorCisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDgxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDgyCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDgzCisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDg0CisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDg1CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDg2Cisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDg3CisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDg4CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDg5
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDkwCisKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gOTEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gOTIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTMKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTQKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gOTUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTYKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTcKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gOTgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTkKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTAwCisKKyAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gMTAxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEw
MgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMDMKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMTA0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDEwNQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMDYKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTA3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDEwOAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMDkKKyAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTEwCisKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gMTExCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDExMgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMTMKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTE0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDExNQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMTYKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTE3CisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDExOAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMTkK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTIwCisKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMTIxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDEyMgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMjMKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTI0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDEyNQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMjYKKyAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTI3CisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDEyOAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgd2hpbGUg
KGogPCBrZXJuZWxTaXplKSB7CisgICAgICAgICAgICAgICAgLy8gTm9uLW9wdGltaXplZCB1c2lu
ZyBhY3R1YWwgd2hpbGUgbG9vcC4KKyAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGVzdFBbaSsrXSA9IHN1bTsKKyAg
ICB9CisKKyAgICAvLyBDb3B5IDJuZCBoYWxmIG9mIGlucHV0IGJ1ZmZlciB0byAxc3QgaGFsZi4K
KyAgICBtZW1jcHkobV9pbnB1dEJ1ZmZlci5kYXRhKCksIGlucHV0UCwgc2l6ZW9mKGZsb2F0KSAq
IGZyYW1lc1RvUHJvY2Vzcyk7Cit9CisKK3ZvaWQgRGlyZWN0Q29udm9sdmVyOjpyZXNldCgpCit7
CisgICAgbV9pbnB1dEJ1ZmZlci56ZXJvKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzMDljNzUyZDYwODVmNGQ2
YzgzNTkyOTg3ZDE5Y2I1OWZjZmFjNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuaApAQCAtMCwwICsxLDUyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIERpcmVjdENvbnZvbHZlcl9oCisjZGVmaW5lIERpcmVjdENvbnZvbHZlcl9oCisKKyNpbmNs
dWRlICJBdWRpb0FycmF5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGlyZWN0
Q29udm9sdmVyIHsKK3B1YmxpYzoKKyAgICBEaXJlY3RDb252b2x2ZXIoc2l6ZV90IGlucHV0Qmxv
Y2tTaXplKTsKKworICAgIHZvaWQgcHJvY2VzcyhBdWRpb0Zsb2F0QXJyYXkqIGNvbnZvbHV0aW9u
S2VybmVsLCBjb25zdCBmbG9hdCogc291cmNlUCwgZmxvYXQqIGRlc3RQLCBzaXplX3QgZnJhbWVz
VG9Qcm9jZXNzKTsKKworICAgIHZvaWQgcmVzZXQoKTsKKworcHJpdmF0ZToKKyAgICBzaXplX3Qg
bV9pbnB1dEJsb2NrU2l6ZTsKKworICAgIEF1ZGlvRmxvYXRBcnJheSBtX2lucHV0QnVmZmVyOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRGlyZWN0Q29udm9sdmVy
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVENvbnZvbHZl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRDb252b2x2ZXIuY3BwCmlu
ZGV4IDIzMjFkZTBjZjExMDQ1OTA1ZGQxNTk4YWE4ZTZlYmE3YmVjNTk5NjMuLjA3NzQ4MDEyZDVm
YjY5NzZhMjZjZGZmNDJjMGY5YTMwNzZlYzQ0NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0ZGVENvbnZvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vRkZUQ29udm9sdmVyLmNwcApAQCAtNTEsNTEgKzUxLDYzIEBAIHZvaWQgRkZU
Q29udm9sdmVyOjpwcm9jZXNzKEZGVEZyYW1lKiBmZnRLZXJuZWwsIGNvbnN0IGZsb2F0KiBzb3Vy
Y2VQLCBmbG9hdCogZGVzCiB7CiAgICAgLy8gRklYTUU6IG1ha2Ugc28gZnJhbWVzVG9Qcm9jZXNz
IGlzIG5vdCByZXF1aXJlZCB0byBmaXQgZXZlbmx5IGludG8gZmZ0U2l6ZS8yCiAKLSAgICAvLyBD
b3B5IHNhbXBsZXMgdG8gaW5wdXQgYnVmZmVyIChub3RlIGNvbnRyYWludCBhYm92ZSEpCi0gICAg
ZmxvYXQqIGlucHV0UCA9IG1faW5wdXRCdWZmZXIuZGF0YSgpOworICAgIHNpemVfdCBoYWxmU2l6
ZSA9IGZmdFNpemUoKSAvIDI7CiAKLSAgICAvLyBTYW5pdHkgY2hlY2sKLSAgICBib29sIGlzQ29w
eUdvb2QxID0gc291cmNlUCAmJiBpbnB1dFAgJiYgbV9yZWFkV3JpdGVJbmRleCArIGZyYW1lc1Rv
UHJvY2VzcyA8PSBtX2lucHV0QnVmZmVyLnNpemUoKTsKLSAgICBBU1NFUlQoaXNDb3B5R29vZDEp
OwotICAgIGlmICghaXNDb3B5R29vZDEpCisgICAgLy8gZnJhbWVzVG9Qcm9jZXNzIG11c3QgYmUg
YW4gZXhhY3QgbXVsdGlwbGUgb2YgaGFsZlNpemUsCisgICAgLy8gb3IgaGFsZlNpemUgaXMgYSBt
dWx0aXBsZSBvZiBmcmFtZXNUb1Byb2Nlc3Mgd2hlbiBoYWxmU2l6ZSA+IGZyYW1lc1RvUHJvY2Vz
cy4KKyAgICBib29sIGlzR29vZCA9ICEoaGFsZlNpemUgJSBmcmFtZXNUb1Byb2Nlc3MgJiYgZnJh
bWVzVG9Qcm9jZXNzICUgaGFsZlNpemUpOworICAgIEFTU0VSVChpc0dvb2QpOworICAgIGlmICgh
aXNHb29kKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbWVtY3B5KGlucHV0UCArIG1fcmVh
ZFdyaXRlSW5kZXgsIHNvdXJjZVAsIHNpemVvZihmbG9hdCkgKiBmcmFtZXNUb1Byb2Nlc3MpOwog
Ci0gICAgLy8gQ29weSBzYW1wbGVzIGZyb20gb3V0cHV0IGJ1ZmZlcgotICAgIGZsb2F0KiBvdXRw
dXRQID0gbV9vdXRwdXRCdWZmZXIuZGF0YSgpOworICAgIHNpemVfdCBudW1iZXJPZkRpdmlzaW9u
cyA9IGhhbGZTaXplIDw9IGZyYW1lc1RvUHJvY2VzcyA/IChmcmFtZXNUb1Byb2Nlc3MgLyBoYWxm
U2l6ZSkgOiAxOworICAgIHNpemVfdCBkaXZpc2lvblNpemUgPSBudW1iZXJPZkRpdmlzaW9ucyA9
PSAxID8gZnJhbWVzVG9Qcm9jZXNzIDogaGFsZlNpemU7CiAKLSAgICAvLyBTYW5pdHkgY2hlY2sK
LSAgICBib29sIGlzQ29weUdvb2QyID0gZGVzdFAgJiYgb3V0cHV0UCAmJiBtX3JlYWRXcml0ZUlu
ZGV4ICsgZnJhbWVzVG9Qcm9jZXNzIDw9IG1fb3V0cHV0QnVmZmVyLnNpemUoKTsKLSAgICBBU1NF
UlQoaXNDb3B5R29vZDIpOwotICAgIGlmICghaXNDb3B5R29vZDIpCi0gICAgICAgIHJldHVybjsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mRGl2aXNpb25zOyArK2ksIHNvdXJj
ZVAgKz0gZGl2aXNpb25TaXplLCBkZXN0UCArPSBkaXZpc2lvblNpemUpIHsKKyAgICAgICAgLy8g
Q29weSBzYW1wbGVzIHRvIGlucHV0IGJ1ZmZlciAobm90ZSBjb250cmFpbnQgYWJvdmUhKQorICAg
ICAgICBmbG9hdCogaW5wdXRQID0gbV9pbnB1dEJ1ZmZlci5kYXRhKCk7CiAKLSAgICBtZW1jcHko
ZGVzdFAsIG91dHB1dFAgKyBtX3JlYWRXcml0ZUluZGV4LCBzaXplb2YoZmxvYXQpICogZnJhbWVz
VG9Qcm9jZXNzKTsKLSAgICBtX3JlYWRXcml0ZUluZGV4ICs9IGZyYW1lc1RvUHJvY2VzczsKKyAg
ICAgICAgLy8gU2FuaXR5IGNoZWNrCisgICAgICAgIGJvb2wgaXNDb3B5R29vZDEgPSBzb3VyY2VQ
ICYmIGlucHV0UCAmJiBtX3JlYWRXcml0ZUluZGV4ICsgZGl2aXNpb25TaXplIDw9IG1faW5wdXRC
dWZmZXIuc2l6ZSgpOworICAgICAgICBBU1NFUlQoaXNDb3B5R29vZDEpOworICAgICAgICBpZiAo
IWlzQ29weUdvb2QxKQorICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgIG1lbWNweShpbnB1
dFAgKyBtX3JlYWRXcml0ZUluZGV4LCBzb3VyY2VQLCBzaXplb2YoZmxvYXQpICogZGl2aXNpb25T
aXplKTsKIAotICAgIC8vIENoZWNrIGlmIGl0J3MgdGltZSB0byBwZXJmb3JtIHRoZSBuZXh0IEZG
VAotICAgIHNpemVfdCBoYWxmU2l6ZSA9IGZmdFNpemUoKSAvIDI7Ci0gICAgaWYgKG1fcmVhZFdy
aXRlSW5kZXggPT0gaGFsZlNpemUpIHsKLSAgICAgICAgLy8gVGhlIGlucHV0IGJ1ZmZlciBpcyBu
b3cgZmlsbGVkIChnZXQgZnJlcXVlbmN5LWRvbWFpbiB2ZXJzaW9uKQotICAgICAgICBtX2ZyYW1l
LmRvRkZUKG1faW5wdXRCdWZmZXIuZGF0YSgpKTsKLSAgICAgICAgbV9mcmFtZS5tdWx0aXBseSgq
ZmZ0S2VybmVsKTsKLSAgICAgICAgbV9mcmFtZS5kb0ludmVyc2VGRlQobV9vdXRwdXRCdWZmZXIu
ZGF0YSgpKTsKLQotICAgICAgICAvLyBPdmVybGFwLWFkZCAxc3QgaGFsZiBmcm9tIHByZXZpb3Vz
IHRpbWUKLSAgICAgICAgdmFkZChtX291dHB1dEJ1ZmZlci5kYXRhKCksIDEsIG1fbGFzdE92ZXJs
YXBCdWZmZXIuZGF0YSgpLCAxLCBtX291dHB1dEJ1ZmZlci5kYXRhKCksIDEsIGhhbGZTaXplKTsK
LQotICAgICAgICAvLyBGaW5hbGx5LCBzYXZlIDJuZCBoYWxmIG9mIHJlc3VsdAotICAgICAgICBi
b29sIGlzQ29weUdvb2QzID0gbV9vdXRwdXRCdWZmZXIuc2l6ZSgpID09IDIgKiBoYWxmU2l6ZSAm
JiBtX2xhc3RPdmVybGFwQnVmZmVyLnNpemUoKSA9PSBoYWxmU2l6ZTsKLSAgICAgICAgQVNTRVJU
KGlzQ29weUdvb2QzKTsKLSAgICAgICAgaWYgKCFpc0NvcHlHb29kMykKKyAgICAgICAgLy8gQ29w
eSBzYW1wbGVzIGZyb20gb3V0cHV0IGJ1ZmZlcgorICAgICAgICBmbG9hdCogb3V0cHV0UCA9IG1f
b3V0cHV0QnVmZmVyLmRhdGEoKTsKKworICAgICAgICAvLyBTYW5pdHkgY2hlY2sKKyAgICAgICAg
Ym9vbCBpc0NvcHlHb29kMiA9IGRlc3RQICYmIG91dHB1dFAgJiYgbV9yZWFkV3JpdGVJbmRleCAr
IGRpdmlzaW9uU2l6ZSA8PSBtX291dHB1dEJ1ZmZlci5zaXplKCk7CisgICAgICAgIEFTU0VSVChp
c0NvcHlHb29kMik7CisgICAgICAgIGlmICghaXNDb3B5R29vZDIpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIAotICAgICAgICBtZW1jcHkobV9sYXN0T3ZlcmxhcEJ1ZmZlci5kYXRhKCks
IG1fb3V0cHV0QnVmZmVyLmRhdGEoKSArIGhhbGZTaXplLCBzaXplb2YoZmxvYXQpICogaGFsZlNp
emUpOwogCi0gICAgICAgIC8vIFJlc2V0IGluZGV4IGJhY2sgdG8gc3RhcnQgZm9yIG5leHQgdGlt
ZQotICAgICAgICBtX3JlYWRXcml0ZUluZGV4ID0gMDsKKyAgICAgICAgbWVtY3B5KGRlc3RQLCBv
dXRwdXRQICsgbV9yZWFkV3JpdGVJbmRleCwgc2l6ZW9mKGZsb2F0KSAqIGRpdmlzaW9uU2l6ZSk7
CisgICAgICAgIG1fcmVhZFdyaXRlSW5kZXggKz0gZGl2aXNpb25TaXplOworCisgICAgICAgIC8v
IENoZWNrIGlmIGl0J3MgdGltZSB0byBwZXJmb3JtIHRoZSBuZXh0IEZGVAorICAgICAgICBpZiAo
bV9yZWFkV3JpdGVJbmRleCA9PSBoYWxmU2l6ZSkgeworICAgICAgICAgICAgLy8gVGhlIGlucHV0
IGJ1ZmZlciBpcyBub3cgZmlsbGVkIChnZXQgZnJlcXVlbmN5LWRvbWFpbiB2ZXJzaW9uKQorICAg
ICAgICAgICAgbV9mcmFtZS5kb0ZGVChtX2lucHV0QnVmZmVyLmRhdGEoKSk7CisgICAgICAgICAg
ICBtX2ZyYW1lLm11bHRpcGx5KCpmZnRLZXJuZWwpOworICAgICAgICAgICAgbV9mcmFtZS5kb0lu
dmVyc2VGRlQobV9vdXRwdXRCdWZmZXIuZGF0YSgpKTsKKworICAgICAgICAgICAgLy8gT3Zlcmxh
cC1hZGQgMXN0IGhhbGYgZnJvbSBwcmV2aW91cyB0aW1lCisgICAgICAgICAgICB2YWRkKG1fb3V0
cHV0QnVmZmVyLmRhdGEoKSwgMSwgbV9sYXN0T3ZlcmxhcEJ1ZmZlci5kYXRhKCksIDEsIG1fb3V0
cHV0QnVmZmVyLmRhdGEoKSwgMSwgaGFsZlNpemUpOworCisgICAgICAgICAgICAvLyBGaW5hbGx5
LCBzYXZlIDJuZCBoYWxmIG9mIHJlc3VsdAorICAgICAgICAgICAgYm9vbCBpc0NvcHlHb29kMyA9
IG1fb3V0cHV0QnVmZmVyLnNpemUoKSA9PSAyICogaGFsZlNpemUgJiYgbV9sYXN0T3ZlcmxhcEJ1
ZmZlci5zaXplKCkgPT0gaGFsZlNpemU7CisgICAgICAgICAgICBBU1NFUlQoaXNDb3B5R29vZDMp
OworICAgICAgICAgICAgaWYgKCFpc0NvcHlHb29kMykKKyAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgIG1lbWNweShtX2xhc3RPdmVybGFwQnVmZmVyLmRhdGEoKSwgbV9vdXRw
dXRCdWZmZXIuZGF0YSgpICsgaGFsZlNpemUsIHNpemVvZihmbG9hdCkgKiBoYWxmU2l6ZSk7CisK
KyAgICAgICAgICAgIC8vIFJlc2V0IGluZGV4IGJhY2sgdG8gc3RhcnQgZm9yIG5leHQgdGltZQor
ICAgICAgICAgICAgbV9yZWFkV3JpdGVJbmRleCA9IDA7CisgICAgICAgIH0KICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3Bw
CmluZGV4IDc0NTlmM2I4MzU1YjVjNDMwZmNjNGE2OWI0YjVhM2EzOTU0MjE1YTEuLmI2ZDBiODAy
MDMzMjQ4NGMzMGM4M2U3NWI3OTAxZjhhODNiNTY0ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcApAQCAtNTAsNyArNTAsNyBAQCBj
b25zdCBpbnQgSW5wdXRCdWZmZXJTaXplID0gOCAqIDE2Mzg0OwogLy8gdHVuZWQgZm9yIGluZGl2
aWR1YWwgcGxhdGZvcm1zIGlmIHRoaXMgYXNzdW1wdGlvbiBpcyBmb3VuZCB0byBiZSBpbmNvcnJl
Y3QuCiBjb25zdCBzaXplX3QgUmVhbHRpbWVGcmFtZUxpbWl0ID0gODE5MiAgKyA0MDk2OyAvLyB+
Mjc4bXNlYyBAIDQ0LjFLSHoKIAotY29uc3Qgc2l6ZV90IE1pbkZGVFNpemUgPSAyNTY7Citjb25z
dCBzaXplX3QgTWluRkZUU2l6ZSA9IDY0OwogY29uc3Qgc2l6ZV90IE1heFJlYWx0aW1lRkZUU2l6
ZSA9IDIwNDg7CiAKIHN0YXRpYyB2b2lkIGJhY2tncm91bmRUaHJlYWRFbnRyeSh2b2lkKiB0aHJl
YWREYXRhKQpAQCAtODQsOCArODQsNyBAQCBSZXZlcmJDb252b2x2ZXI6OlJldmVyYkNvbnZvbHZl
cihBdWRpb0NoYW5uZWwqIGltcHVsc2VSZXNwb25zZSwgc2l6ZV90IHJlbmRlclNsaQogICAgIGNv
bnN0IGZsb2F0KiByZXNwb25zZSA9IGltcHVsc2VSZXNwb25zZS0+ZGF0YSgpOwogICAgIHNpemVf
dCB0b3RhbFJlc3BvbnNlTGVuZ3RoID0gaW1wdWxzZVJlc3BvbnNlLT5sZW5ndGgoKTsKIAotICAg
IC8vIEJlY2F1c2Ugd2UncmUgbm90IHVzaW5nIGRpcmVjdC1jb252b2x1dGlvbiBpbiB0aGUgbGVh
ZGluZyBwb3J0aW9uLCB0aGUgcmV2ZXJiIGhhcyBhbiBvdmVyYWxsIGxhdGVuY3kgb2YgaGFsZiB0
aGUgZmlyc3Qtc3RhZ2UgRkZUIHNpemUKLSAgICBzaXplX3QgcmV2ZXJiVG90YWxMYXRlbmN5ID0g
bV9taW5GRlRTaXplIC8gMjsKKyAgICBzaXplX3QgcmV2ZXJiVG90YWxMYXRlbmN5ID0gMDsKIAog
ICAgIHNpemVfdCBzdGFnZU9mZnNldCA9IDA7CiAgICAgaW50IGkgPSAwOwpAQCAtMTAxLDcgKzEw
MCw5IEBAIFJldmVyYkNvbnZvbHZlcjo6UmV2ZXJiQ29udm9sdmVyKEF1ZGlvQ2hhbm5lbCogaW1w
dWxzZVJlc3BvbnNlLCBzaXplX3QgcmVuZGVyU2xpCiAgICAgICAgIC8vIFRoaXMgInN0YWdnZXJz
IiB0aGUgdGltZSB3aGVuIGVhY2ggRkZUIGhhcHBlbnMgc28gdGhleSBkb24ndCBhbGwgaGFwcGVu
IGF0IHRoZSBzYW1lIHRpbWUKICAgICAgICAgaW50IHJlbmRlclBoYXNlID0gY29udm9sdmVyUmVu
ZGVyUGhhc2UgKyBpICogcmVuZGVyU2xpY2VTaXplOwogCi0gICAgICAgIE93blB0cjxSZXZlcmJD
b252b2x2ZXJTdGFnZT4gc3RhZ2UgPSBhZG9wdFB0cihuZXcgUmV2ZXJiQ29udm9sdmVyU3RhZ2Uo
cmVzcG9uc2UsIHRvdGFsUmVzcG9uc2VMZW5ndGgsIHJldmVyYlRvdGFsTGF0ZW5jeSwgc3RhZ2VP
ZmZzZXQsIHN0YWdlU2l6ZSwgZmZ0U2l6ZSwgcmVuZGVyUGhhc2UsIHJlbmRlclNsaWNlU2l6ZSwg
Jm1fYWNjdW11bGF0aW9uQnVmZmVyKSk7CisgICAgICAgIGJvb2wgdXNlRGlyZWN0Q29udm9sdmVy
ID0gIXN0YWdlT2Zmc2V0OworCisgICAgICAgIE93blB0cjxSZXZlcmJDb252b2x2ZXJTdGFnZT4g
c3RhZ2UgPSBhZG9wdFB0cihuZXcgUmV2ZXJiQ29udm9sdmVyU3RhZ2UocmVzcG9uc2UsIHRvdGFs
UmVzcG9uc2VMZW5ndGgsIHJldmVyYlRvdGFsTGF0ZW5jeSwgc3RhZ2VPZmZzZXQsIHN0YWdlU2l6
ZSwgZmZ0U2l6ZSwgcmVuZGVyUGhhc2UsIHJlbmRlclNsaWNlU2l6ZSwgJm1fYWNjdW11bGF0aW9u
QnVmZmVyLCB1c2VEaXJlY3RDb252b2x2ZXIpKTsKIAogICAgICAgICBib29sIGlzQmFja2dyb3Vu
ZFN0YWdlID0gZmFsc2U7CiAKQEAgLTExNCw4ICsxMTUsMTEgQEAgUmV2ZXJiQ29udm9sdmVyOjpS
ZXZlcmJDb252b2x2ZXIoQXVkaW9DaGFubmVsKiBpbXB1bHNlUmVzcG9uc2UsIHNpemVfdCByZW5k
ZXJTbGkKICAgICAgICAgc3RhZ2VPZmZzZXQgKz0gc3RhZ2VTaXplOwogICAgICAgICArK2k7CiAK
LSAgICAgICAgLy8gRmlndXJlIG91dCBuZXh0IEZGVCBzaXplCi0gICAgICAgIGZmdFNpemUgKj0g
MjsKKyAgICAgICAgaWYgKCF1c2VEaXJlY3RDb252b2x2ZXIpIHsKKyAgICAgICAgICAgIC8vIEZp
Z3VyZSBvdXQgbmV4dCBGRlQgc2l6ZQorICAgICAgICAgICAgZmZ0U2l6ZSAqPSAyOworICAgICAg
ICB9CisKICAgICAgICAgaWYgKGhhc1JlYWx0aW1lQ29uc3RyYWludCAmJiAhaXNCYWNrZ3JvdW5k
U3RhZ2UgJiYgZmZ0U2l6ZSA+IG1fbWF4UmVhbHRpbWVGRlRTaXplKQogICAgICAgICAgICAgZmZ0
U2l6ZSA9IG1fbWF4UmVhbHRpbWVGRlRTaXplOwogICAgICAgICBpZiAoZmZ0U2l6ZSA+IG1fbWF4
RkZUU2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVy
YkNvbnZvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9s
dmVyLmgKaW5kZXggYzNkMzA5ZmY1NDU3NDkzNzEwYjVlMDAyNGZmODU3MTg3NGU1NWQ5Zi4uYTdk
NjYxOTc2M2Q3YzI4Y2MxYTQ2ZmQwODU3MWEyYTYzODZjNmUzNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmgKQEAgLTMwLDYgKzMwLDcgQEAK
ICNkZWZpbmUgUmV2ZXJiQ29udm9sdmVyX2gKIAogI2luY2x1ZGUgIkF1ZGlvQXJyYXkuaCIKKyNp
bmNsdWRlICJEaXJlY3RDb252b2x2ZXIuaCIKICNpbmNsdWRlICJGRlRDb252b2x2ZXIuaCIKICNp
bmNsdWRlICJSZXZlcmJBY2N1bXVsYXRpb25CdWZmZXIuaCIKICNpbmNsdWRlICJSZXZlcmJDb252
b2x2ZXJTdGFnZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
UmV2ZXJiQ29udm9sdmVyU3RhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
UmV2ZXJiQ29udm9sdmVyU3RhZ2UuY3BwCmluZGV4IDUzYmI2NTAwODMxMDY0NzE5MWUwMGE5ZGI5
NTlhMDNkYTlmZmVhMmUuLjFkMzVlMjlkZmZkMmVlNmVlMTg0YmU1ZDZkYjc0YThmZGU1ODVmZjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZl
clN0YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252
b2x2ZXJTdGFnZS5jcHAKQEAgLTQ0LDE4ICs0NCwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1
c2luZyBuYW1lc3BhY2UgVmVjdG9yTWF0aDsKIAogUmV2ZXJiQ29udm9sdmVyU3RhZ2U6OlJldmVy
YkNvbnZvbHZlclN0YWdlKGNvbnN0IGZsb2F0KiBpbXB1bHNlUmVzcG9uc2UsIHNpemVfdCByZXNw
b25zZUxlbmd0aCwgc2l6ZV90IHJldmVyYlRvdGFsTGF0ZW5jeSwgc2l6ZV90IHN0YWdlT2Zmc2V0
LCBzaXplX3Qgc3RhZ2VMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IGZmdFNpemUsIHNpemVfdCByZW5kZXJQaGFzZSwgc2l6ZV90IHJlbmRl
clNsaWNlU2l6ZSwgUmV2ZXJiQWNjdW11bGF0aW9uQnVmZmVyKiBhY2N1bXVsYXRpb25CdWZmZXIp
Ci0gICAgOiBtX2ZmdEtlcm5lbChmZnRTaXplKQotICAgICwgbV9hY2N1bXVsYXRpb25CdWZmZXIo
YWNjdW11bGF0aW9uQnVmZmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBmZnRTaXplLCBzaXplX3QgcmVuZGVyUGhhc2UsIHNpemVfdCByZW5kZXJT
bGljZVNpemUsIFJldmVyYkFjY3VtdWxhdGlvbkJ1ZmZlciogYWNjdW11bGF0aW9uQnVmZmVyLCBi
b29sIGRpcmVjdE1vZGUpCisgICAgOiBtX2FjY3VtdWxhdGlvbkJ1ZmZlcihhY2N1bXVsYXRpb25C
dWZmZXIpCiAgICAgLCBtX2FjY3VtdWxhdGlvblJlYWRJbmRleCgwKQogICAgICwgbV9pbnB1dFJl
YWRJbmRleCgwKQogICAgICwgbV9pbXB1bHNlUmVzcG9uc2VMZW5ndGgocmVzcG9uc2VMZW5ndGgp
CisgICAgLCBtX2RpcmVjdE1vZGUoZGlyZWN0TW9kZSkKIHsKICAgICBBU1NFUlQoaW1wdWxzZVJl
c3BvbnNlKTsKICAgICBBU1NFUlQoYWNjdW11bGF0aW9uQnVmZmVyKTsKLSAgICAKLSAgICBtX2Zm
dEtlcm5lbC5kb1BhZGRlZEZGVChpbXB1bHNlUmVzcG9uc2UgKyBzdGFnZU9mZnNldCwgc3RhZ2VM
ZW5ndGgpOwotICAgIG1fY29udm9sdmVyID0gYWRvcHRQdHIobmV3IEZGVENvbnZvbHZlcihmZnRT
aXplKSk7CisKKyAgICBpZiAoIW1fZGlyZWN0TW9kZSkgeworICAgICAgICBtX2ZmdEtlcm5lbCA9
IGFkb3B0UHRyKG5ldyBGRlRGcmFtZShmZnRTaXplKSk7CisgICAgICAgIG1fZmZ0S2VybmVsLT5k
b1BhZGRlZEZGVChpbXB1bHNlUmVzcG9uc2UgKyBzdGFnZU9mZnNldCwgc3RhZ2VMZW5ndGgpOwor
ICAgICAgICBtX2ZmdENvbnZvbHZlciA9IGFkb3B0UHRyKG5ldyBGRlRDb252b2x2ZXIoZmZ0U2l6
ZSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZGlyZWN0S2VybmVsID0gYWRvcHRQdHIobmV3
IEF1ZGlvRmxvYXRBcnJheShmZnRTaXplIC8gMikpOworICAgICAgICBtX2RpcmVjdEtlcm5lbC0+
Y29weVRvUmFuZ2UoaW1wdWxzZVJlc3BvbnNlICsgc3RhZ2VPZmZzZXQsIDAsIGZmdFNpemUgLyAy
KTsKKyAgICAgICAgbV9kaXJlY3RDb252b2x2ZXIgPSBhZG9wdFB0cihuZXcgRGlyZWN0Q29udm9s
dmVyKHJlbmRlclNsaWNlU2l6ZSkpOworICAgIH0KICAgICBtX3RlbXBvcmFyeUJ1ZmZlci5hbGxv
Y2F0ZShyZW5kZXJTbGljZVNpemUpOwogCiAgICAgLy8gVGhlIGNvbnZvbHV0aW9uIHN0YWdlIGF0
IG9mZnNldCBzdGFnZU9mZnNldCBuZWVkcyB0byBoYXZlIGEgY29ycmVzcG9uZGluZyBkZWxheSB0
byBjYW5jZWwgb3V0IHRoZSBvZmZzZXQuCkBAIC03OCw3ICs4NSw5IEBAIFJldmVyYkNvbnZvbHZl
clN0YWdlOjpSZXZlcmJDb252b2x2ZXJTdGFnZShjb25zdCBmbG9hdCogaW1wdWxzZVJlc3BvbnNl
LCBzaXplX3QKICAgICBtX3ByZVJlYWRXcml0ZUluZGV4ID0gMDsKICAgICBtX2ZyYW1lc1Byb2Nl
c3NlZCA9IDA7IC8vIHRvdGFsIGZyYW1lcyBwcm9jZXNzZWQgc28gZmFyCiAKLSAgICBtX3ByZURl
bGF5QnVmZmVyLmFsbG9jYXRlKG1fcHJlRGVsYXlMZW5ndGggPCBmZnRTaXplID8gZmZ0U2l6ZSA6
IG1fcHJlRGVsYXlMZW5ndGgpOworICAgIHNpemVfdCBkZWxheUJ1ZmZlclNpemUgPSBtX3ByZURl
bGF5TGVuZ3RoIDwgZmZ0U2l6ZSA/IGZmdFNpemUgOiBtX3ByZURlbGF5TGVuZ3RoOworICAgIGRl
bGF5QnVmZmVyU2l6ZSA9IGRlbGF5QnVmZmVyU2l6ZSA8IHJlbmRlclNsaWNlU2l6ZSA/IHJlbmRl
clNsaWNlU2l6ZSA6IGRlbGF5QnVmZmVyU2l6ZTsKKyAgICBtX3ByZURlbGF5QnVmZmVyLmFsbG9j
YXRlKGRlbGF5QnVmZmVyU2l6ZSk7CiB9CiAKIHZvaWQgUmV2ZXJiQ29udm9sdmVyU3RhZ2U6OnBy
b2Nlc3NJbkJhY2tncm91bmQoUmV2ZXJiQ29udm9sdmVyKiBjb252b2x2ZXIsIHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpCkBAIC0xMzMsNyArMTQyLDEwIEBAIHZvaWQgUmV2ZXJiQ29udm9sdmVyU3Rh
Z2U6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykK
ICAgICAgICAgLy8gTm93LCBydW4gdGhlIGNvbnZvbHV0aW9uIChpbnRvIHRoZSBkZWxheSBidWZm
ZXIpLgogICAgICAgICAvLyBBbiBleHBlbnNpdmUgRkZUIHdpbGwgaGFwcGVuIGV2ZXJ5IGZmdFNp
emUgLyAyIGZyYW1lcy4KICAgICAgICAgLy8gV2UgcHJvY2VzcyBpbi1wbGFjZSBoZXJlLi4uCi0g
ICAgICAgIG1fY29udm9sdmVyLT5wcm9jZXNzKCZtX2ZmdEtlcm5lbCwgcHJlRGVsYXllZFNvdXJj
ZSwgdGVtcG9yYXJ5QnVmZmVyLCBmcmFtZXNUb1Byb2Nlc3MpOworICAgICAgICBpZiAoIW1fZGly
ZWN0TW9kZSkKKyAgICAgICAgICAgIG1fZmZ0Q29udm9sdmVyLT5wcm9jZXNzKG1fZmZ0S2VybmVs
LmdldCgpLCBwcmVEZWxheWVkU291cmNlLCB0ZW1wb3JhcnlCdWZmZXIsIGZyYW1lc1RvUHJvY2Vz
cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZGlyZWN0Q29udm9sdmVyLT5wcm9jZXNz
KG1fZGlyZWN0S2VybmVsLmdldCgpLCBwcmVEZWxheWVkU291cmNlLCB0ZW1wb3JhcnlCdWZmZXIs
IGZyYW1lc1RvUHJvY2Vzcyk7CiAKICAgICAgICAgLy8gTm93IGFjY3VtdWxhdGUgaW50byByZXZl
cmIncyBhY2N1bXVsYXRpb24gYnVmZmVyLgogICAgICAgICBtX2FjY3VtdWxhdGlvbkJ1ZmZlci0+
YWNjdW11bGF0ZSh0ZW1wb3JhcnlCdWZmZXIsIGZyYW1lc1RvUHJvY2VzcywgJm1fYWNjdW11bGF0
aW9uUmVhZEluZGV4LCBtX3Bvc3REZWxheUxlbmd0aCk7CkBAIC0xNTQsNyArMTY2LDEwIEBAIHZv
aWQgUmV2ZXJiQ29udm9sdmVyU3RhZ2U6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgc2l6
ZV90IGZyYW1lc1RvUHJvY2VzcykKIAogdm9pZCBSZXZlcmJDb252b2x2ZXJTdGFnZTo6cmVzZXQo
KQogewotICAgIG1fY29udm9sdmVyLT5yZXNldCgpOworICAgIGlmICghbV9kaXJlY3RNb2RlKQor
ICAgICAgICBtX2ZmdENvbnZvbHZlci0+cmVzZXQoKTsKKyAgICBlbHNlCisgICAgICAgIG1fZGly
ZWN0Q29udm9sdmVyLT5yZXNldCgpOwogICAgIG1fcHJlRGVsYXlCdWZmZXIuemVybygpOwogICAg
IG1fYWNjdW11bGF0aW9uUmVhZEluZGV4ID0gMDsKICAgICBtX2lucHV0UmVhZEluZGV4ID0gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZl
clN0YWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXJT
dGFnZS5oCmluZGV4IDk4MTFiYzYwMzIxNjc2NDYwMGM5Y2IxNzI1MTdkZWYxNThhMzZkYzguLjlj
ZThkY2FjODc4OWI0ZWUxMTY2ZWJiOWNkNTBkNzFhMTk4MDFjZjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyU3RhZ2UuaApAQCAtMzgs
NiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBSZXZlcmJBY2N1bXVsYXRpb25C
dWZmZXI7CiBjbGFzcyBSZXZlcmJDb252b2x2ZXI7CiBjbGFzcyBGRlRDb252b2x2ZXI7CitjbGFz
cyBEaXJlY3RDb252b2x2ZXI7CiAgICAgCiAvLyBBIFJldmVyYkNvbnZvbHZlclN0YWdlIHJlcHJl
c2VudHMgdGhlIGNvbnZvbHV0aW9uIGFzc29jaWF0ZWQgd2l0aCBhIHN1Yi1zZWN0aW9uIG9mIGEg
bGFyZ2UgaW1wdWxzZSByZXNwb25zZS4KIC8vIEl0IGluY29ycG9yYXRlcyBhIGRlbGF5IGxpbmUg
dG8gYWNjb3VudCBmb3IgdGhlIG9mZnNldCBvZiB0aGUgc3ViLXNlY3Rpb24gd2l0aGluIHRoZSBs
YXJnZXIgaW1wdWxzZSByZXNwb25zZS4KQEAgLTQ1LDggKzQ2LDcgQEAgY2xhc3MgUmV2ZXJiQ29u
dm9sdmVyU3RhZ2UgewogcHVibGljOgogICAgIC8vIHJlbmRlclBoYXNlIGlzIHVzZWZ1bCB0byBr
bm93IHNvIHRoYXQgd2UgY2FuIG1hbmlwdWxhdGUgdGhlIHByZSB2ZXJzdXMgcG9zdCBkZWxheSBz
byB0aGF0IHN0YWdlcyB3aWxsIHBlcmZvcm0KICAgICAvLyB0aGVpciBoZWF2eSB3b3JrIChGRlQg
cHJvY2Vzc2luZykgb24gZGlmZmVyZW50IHNsaWNlcyB0byBiYWxhbmNlIHRoZSBsb2FkIGluIGEg
cmVhbC10aW1lIHRocmVhZC4KLSAgICBSZXZlcmJDb252b2x2ZXJTdGFnZShjb25zdCBmbG9hdCog
aW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVzcG9uc2VMZW5ndGgsIHNpemVfdCByZXZlcmJUb3Rh
bExhdGVuY3ksIHNpemVfdCBzdGFnZU9mZnNldCwgc2l6ZV90IHN0YWdlTGVuZ3RoLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBmZnRTaXplLCBzaXplX3QgcmVuZGVyUGhhc2UsIHNp
emVfdCByZW5kZXJTbGljZVNpemUsIFJldmVyYkFjY3VtdWxhdGlvbkJ1ZmZlciogYWNjdW11bGF0
aW9uQnVmZmVyKTsKKyAgICBSZXZlcmJDb252b2x2ZXJTdGFnZShjb25zdCBmbG9hdCogaW1wdWxz
ZVJlc3BvbnNlLCBzaXplX3QgcmVzcG9uc2VMZW5ndGgsIHNpemVfdCByZXZlcmJUb3RhbExhdGVu
Y3ksIHNpemVfdCBzdGFnZU9mZnNldCwgc2l6ZV90IHN0YWdlTGVuZ3RoLCBzaXplX3QgZmZ0U2l6
ZSwgc2l6ZV90IHJlbmRlclBoYXNlLCBzaXplX3QgcmVuZGVyU2xpY2VTaXplLCBSZXZlcmJBY2N1
bXVsYXRpb25CdWZmZXIqLCBib29sIGRpcmVjdE1vZGUgPSBmYWxzZSk7CiAKICAgICAvLyBXQVJO
SU5HOiBmcmFtZXNUb1Byb2Nlc3MgbXVzdCBiZSBzdWNoIHRoYXQgaXQgZXZlbmx5IGRpdmlkZXMg
dGhlIGRlbGF5IGJ1ZmZlciBzaXplIChzdGFnZV9vZmZzZXQpLgogICAgIHZvaWQgcHJvY2Vzcyhj
b25zdCBmbG9hdCogc291cmNlLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKQEAgLTU5LDggKzU5
LDggQEAgcHVibGljOgogICAgIGludCBpbnB1dFJlYWRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5wdXRSZWFkSW5kZXg7IH0KIAogcHJpdmF0ZToKLSAgICBGRlRGcmFtZSBtX2ZmdEtlcm5lbDsK
LSAgICBPd25QdHI8RkZUQ29udm9sdmVyPiBtX2NvbnZvbHZlcjsKKyAgICBPd25QdHI8RkZURnJh
bWU+IG1fZmZ0S2VybmVsOworICAgIE93blB0cjxGRlRDb252b2x2ZXI+IG1fZmZ0Q29udm9sdmVy
OwogCiAgICAgQXVkaW9GbG9hdEFycmF5IG1fcHJlRGVsYXlCdWZmZXI7CiAKQEAgLTc2LDYgKzc2
LDEwIEBAIHByaXZhdGU6CiAgICAgQXVkaW9GbG9hdEFycmF5IG1fdGVtcG9yYXJ5QnVmZmVyOwog
CiAgICAgc2l6ZV90IG1faW1wdWxzZVJlc3BvbnNlTGVuZ3RoOworCisgICAgYm9vbCBtX2RpcmVj
dE1vZGU7CisgICAgT3duUHRyPEF1ZGlvRmxvYXRBcnJheT4gbV9kaXJlY3RLZXJuZWw7CisgICAg
T3duUHRyPERpcmVjdENvbnZvbHZlcj4gbV9kaXJlY3RDb252b2x2ZXI7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOGM3ODBlOGJjMzUwMDE1NmNiYmQ5NGUzMWMyZjNhNDBk
MGI0OGRkYS4uNDZjZWM2ZmNkOWJlMjg3YzgzMzg3MWRlY2JmMTNhN2E4MWY4MGVmZSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE5IEBACisyMDEyLTAzLTEyICBYaW5nbmFuIFdhbmcgIDx4aW5nbmFuLndhbmdA
aW50ZWwuY29tPgorCisgICAgICAgIENvbnZvbHZlck5vZGUgc2hvdWxkIG5vdCBpbmN1ciBwcm9j
ZXNzaW5nIGxhdGVuY3kKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc1NTY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTm8gbmVlZCB0byBjaGVjayB0aGUgaW5pdGlhbCBzaWxlbnQgcGFydCBiZWNhdXNlIHRo
ZSBsYXRlbmN5IGlzc3VlIG9mIENvbnZvbHZlck5vZGUgaXMgZml4ZWQuCisKKyAgICAgICAgKiB3
ZWJhdWRpby9jb252b2x1dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdl
YmF1ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzOgorICAgICAgICAoY2hlY2tU
cmlhbmd1bGFyUHVsc2UpOgorICAgICAgICAoY2hlY2tUYWlsMSk6CisgICAgICAgIChjaGVja0Nv
bnZvbHZlZFJlc3VsdC5yZXR1cm4udmFyKToKKyAgICAgICAgKGNoZWNrQ29udm9sdmVkUmVzdWx0
KToKKwogMjAxMi0wMy0xMiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjExMDUyNC4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8tbW9uby1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQu
dHh0CmluZGV4IDg3MDVmNjYxYzNhMjg2YzQ4NTczNmNhNDVhNDQzNzUzYTU2YTczNWEuLjNhZTJh
MDQ4NjY4OWQ2NWM0ZWY2ZDYwMzRiNjk1YzdkNmVhMDIyMWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8tbW9uby1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLWV4cGVjdGVkLnR4dApAQCAt
Miw3ICsyLDYgQEAgVGVzdHMgQ29udm9sdmVyTm9kZSBwcm9jZXNzaW5nIGEgbW9ubyBjaGFubmVs
IHdpdGggbW9ubyBpbXB1bHNlIHJlc3BvbnNlLgogCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CiAKLVBBU1MgSW5pdGlhbCBsYXRlbmN5IG9mIGNvbnZvbHZlciBpcyBzaWxlbnQuCiBQQVNTIFRy
aWFuZ3VsYXIgcG9ydGlvbiBvZiBjb252b2x1dGlvbiBpcyBjb3JyZWN0LgogUEFTUyBGaXJzdCBw
YXJ0IG9mIHRhaWwgb2YgY29udm9sdXRpb24gaXMgc3VmZmljaWVudGx5IHNtYWxsLgogUEFTUyBS
ZW5kZXJlZCBzaWduYWwgYWZ0ZXIgdGFpbCBvZiBjb252b2x1dGlvbiBpcyBzaWxlbnQuCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvY29udm9sdXRpb24tdGVzdGlu
Zy5qcyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5n
LmpzCmluZGV4IGQ3ZWY4ZWE1MWE5N2EzMTM4ZjdkOGY5NzAyZjMyNDZjMWVjOTMwNjcuLmMyY2Fi
YTEwNjAxYTIxZThlNzBiY2YwZDZlNDcyNGRjNjUyNDEzNzkgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzCisrKyBiL0xheW91
dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzCkBAIC00LDEx
ICs0LDYgQEAgdmFyIHJlbmRlckxlbmd0aFNlY29uZHMgPSA4OwogdmFyIHB1bHNlTGVuZ3RoU2Vj
b25kcyA9IDE7CiB2YXIgcHVsc2VMZW5ndGhGcmFtZXMgPSBwdWxzZUxlbmd0aFNlY29uZHMgKiBz
YW1wbGVSYXRlOwogCi0vLyBUaGUgY29udm9sdmVyIGhhcyBhIGxhdGVuY3kgb2YgMTI4IHNhbXBs
ZXMgaW4gdGhlIGltcGxlbWVudGF0aW9uLgotLy8gV2UgbmVlZCB0byB0YWtlIHRoaXMgaW50byBh
Y2NvdW50IHdoZW4gdmVyaWZ5aW5nIHRoZSBvdXRwdXQgb2YgdGhlCi0vLyBjb252b2x2ZXIuIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1NjQuCi12YXIgY29u
dm9sdmVEZWxheVNhbXBsZXMgPSAxMjg7Ci0KIGZ1bmN0aW9uIGNyZWF0ZVNxdWFyZVB1bHNlQnVm
ZmVyKGNvbnRleHQsIHNhbXBsZUZyYW1lTGVuZ3RoKSB7CiAgICAgdmFyIGF1ZGlvQnVmZmVyID0g
Y29udGV4dC5jcmVhdGVCdWZmZXIoMSwgc2FtcGxlRnJhbWVMZW5ndGgsIGNvbnRleHQuc2FtcGxl
UmF0ZSk7CiAKQEAgLTQxLDI3ICszNiw2IEBAIGZ1bmN0aW9uIGNyZWF0ZVRyaWFuZ2xlUHVsc2VC
dWZmZXIoY29udGV4dCwgc2FtcGxlRnJhbWVMZW5ndGgpIHsKICAgICByZXR1cm4gYXVkaW9CdWZm
ZXI7CiB9CiAKLS8vIFZlcmlmeSB0aGF0IHRoZSBpbml0aWFsIGxhdGVuY3kgb2YgdGhlIGNvbnZv
bHZlciBpcyBleGFjdGx5IHplcm8uCi0vLyBSZXR1cm4gdHJ1ZSBpZiBzby4KLWZ1bmN0aW9uIGNo
ZWNrTGF0ZW5jeShkYXRhKSB7Ci0gICAgdmFyIGlzWmVybyA9IHRydWU7Ci0KLSAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGNvbnZvbHZlRGVsYXlTYW1wbGVzOyArK2kpIHsKLSAgICAgICAgaWYgKGRh
dGFbaV0gIT0gMCkgewotICAgICAgICAgICAgaXNaZXJvID0gZmFsc2U7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChpc1plcm8pIHsKLSAgICAgICAgdGVz
dFBhc3NlZCgiSW5pdGlhbCBsYXRlbmN5IG9mIGNvbnZvbHZlciBpcyBzaWxlbnQuIik7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgdGVzdEZhaWxlZCgiSW5pdGlhbCBsYXRlbmN5IG9mIGNvbnZvbHZl
ciBpcyBub3Qgc2lsZW50LiIpOwotICAgIH0KLQotICAgIHJldHVybiBpc1plcm87Ci19Ci0KIGZ1
bmN0aW9uIGxvZzEwKHgpIHsKICAgcmV0dXJuIE1hdGgubG9nKHgpL01hdGguTE4xMDsKIH0KQEAg
LTc5LDcgKzUzLDcgQEAgZnVuY3Rpb24gY2hlY2tUcmlhbmd1bGFyUHVsc2UocmVuZGVyZWQsIHJl
ZmVyZW5jZSkgewogICAgIHZhciBtYXhEZWx0YUluZGV4ID0gMDsKIAogICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcmVmZXJlbmNlLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBkaWZmID0gcmVu
ZGVyZWRbaSArIGNvbnZvbHZlRGVsYXlTYW1wbGVzXSAtIHJlZmVyZW5jZVtpXTsKKyAgICAgICAg
dmFyIGRpZmYgPSByZW5kZXJlZFtpXSAtIHJlZmVyZW5jZVtpXTsKICAgICAgICAgdmFyIHggPSBN
YXRoLmFicyhkaWZmKTsKICAgICAgICAgaWYgKHggPiBtYXhEZWx0YSkgewogICAgICAgICAgICAg
bWF4RGVsdGEgPSB4OwpAQCAtMTExLDcgKzg1LDcgQEAgZnVuY3Rpb24gY2hlY2tUYWlsMShkYXRh
LCByZWZlcmVuY2UsIGJyZWFrcG9pbnQpIHsKICAgICB2YXIgaXNaZXJvID0gdHJ1ZTsKICAgICB2
YXIgdGFpbDFNYXggPSAwOwogCi0gICAgZm9yICh2YXIgaSA9IHJlZmVyZW5jZS5sZW5ndGggKyBj
b252b2x2ZURlbGF5U2FtcGxlczsgaSA8IHJlZmVyZW5jZS5sZW5ndGggKyBicmVha3BvaW50OyAr
K2kpIHsKKyAgICBmb3IgKHZhciBpID0gcmVmZXJlbmNlLmxlbmd0aDsgaSA8IHJlZmVyZW5jZS5s
ZW5ndGggKyBicmVha3BvaW50OyArK2kpIHsKICAgICAgICAgdmFyIG1hZyA9IE1hdGguYWJzKGRh
dGFbaV0pOwogICAgICAgICBpZiAobWFnID4gdGFpbDFNYXgpIHsKICAgICAgICAgICAgIHRhaWwx
TWF4ID0gbWFnOwpAQCAtMTczLDExICsxNDcsNiBAQCBmdW5jdGlvbiBjaGVja0NvbnZvbHZlZFJl
c3VsdCh0cmlhbmdsZVB1bHNlKSB7CiAgICAgCiAgICAgICAgIHZhciBzdWNjZXNzID0gdHJ1ZTsK
ICAgICAKLSAgICAgICAgLy8gVmVyaWZ5IHRoZSBpbml0aWFsIHBhcnQgaXMgZXhhY3RseSB6ZXJv
IGJlY2F1c2Ugb2YgdGhlCi0gICAgICAgIC8vIGxhdGVuY3kgaW4gdGhlIGNvbnZvbHZlci4KLQot
ICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjaGVja0xhdGVuY3kocmVuZGVyZWREYXRhKTsK
LQogICAgICAgICAvLyBWZXJpZnkgdGhlIHRyaWFuZ3VsYXIgcHVsc2UgaXMgYWN0dWFsbHkgdHJp
YW5ndWxhci4KIAogICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjaGVja1RyaWFuZ3VsYXJQ
dWxzZShyZW5kZXJlZERhdGEsIHJlZmVyZW5jZURhdGEpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132185</attachid>
            <date>2012-03-15 20:45:42 -0700</date>
            <delta_ts>2012-03-18 19:10:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75564-20120316114851.patch</filename>
            <type>text/plain</type>
            <size>36694</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwOTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjQwYTE2Y2RhZDBlMTIy
ODBkNmRhNjcwZGM1NWVkNWI2MTQ3ZWQzZi4uZDBhZDE0ZTViZWVjZTZkYTUyYjUzYzg0OThhM2Jm
YmM4YTJkZjRhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAzLTE1ICBYaW5n
bmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIENvbnZvbHZlck5v
ZGUgc2hvdWxkIG5vdCBpbmN1ciBwcm9jZXNzaW5nIGxhdGVuY3kKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTY0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBEaXJlY3RDb252b2x2ZXIgaW5z
dGVhZCBvZiBGRlRDb252b2x2ZXIgZm9yIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSBsZWFkaW5nIHBv
cnRpb24gb2YgaW1wdWxzZSByZXNwb25zZS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0Q29udm9sdmVyOjpEaXJlY3RD
b252b2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0Q29udm9sdmVyOjpwcm9jZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdENvbnZvbHZlcjo6cmVzZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoRGlyZWN0Q29udm9sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdENv
bnZvbHZlcjo6Y29udm9sdmVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmJD
b252b2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpSZXZlcmJD
b252b2x2ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJldmVyYkNvbnZvbHZlclN0YWdlOjpSZXZlcmJDb252b2x2ZXJTdGFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXJTdGFnZTo6cHJvY2Vzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXJTdGFnZTo6cmVzZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFJldmVyYkNvbnZvbHZlclN0YWdlKToKKwogMjAxMi0wMy0xNSAgRGFuYSBKYW5z
ZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIERlY2lkZSBv
Y2NsdXNpb24gaW4gcGFpbnQgY3VsbGluZyB3aXRoIENDT2NjbHVzaW9uVHJhY2tlcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMDcwYjg3ZWY5N2U2YTBiODhhNDJlODZkOTgxOTdj
ZDkwOTA4NDIzYS4uMjM3ZDM0NGJmZTYxNzk2ZThmYjhhMDhhMTY3N2E2ZTY5ZTE2NjJmYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC01NDY0LDYgKzU0NjQsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0NvbmUuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9Db25lLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0Rlbm9ybWFsRGlzYWJsZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vRGlyZWN0Q29udm9sdmVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vRGlyZWN0Q29udm9sdmVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0Rpc3RhbmNlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRGlzdGFu
Y2UuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29y
LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGNkYmVhYzk5ZDAyNzYzYTUzMTc4ZWIzNzJmMmJhZmE4
YjhiOWE3YzYuLjkxNDBkMTVjY2I1MDE0NmY1NjhlZGQzZTM0ZDhlZWY4Zjk3NDNjNjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTMwMjksNiArMzAyOSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
YXVkaW8vQ29uZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0NvbmUuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vRGVub3JtYWxEaXNhYmxlci5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
YXVkaW8vRGlzdGFuY2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9EaXN0YW5j
ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuY3Bw
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZv
bHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjM5ZjNlNWMzYjcxMWQzZjMwMmNhYzc3MjA5Yjk1ZjQyNTczMzc3MTYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RD
b252b2x2ZXIuY3BwCkBAIC0wLDAgKzEsMzU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEludGVsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiRGlyZWN0Q29udm9sdmVyLmgiCisKKyNp
bmNsdWRlICJWZWN0b3JNYXRoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFt
ZXNwYWNlIFZlY3Rvck1hdGg7CisgICAgCitEaXJlY3RDb252b2x2ZXI6OkRpcmVjdENvbnZvbHZl
cihzaXplX3QgaW5wdXRCbG9ja1NpemUpCisgICAgOiBtX2lucHV0QmxvY2tTaXplKGlucHV0Qmxv
Y2tTaXplKQorICAgICwgbV9pbnB1dEJ1ZmZlcihpbnB1dEJsb2NrU2l6ZSAqIDIpCit7Cit9CisK
K3ZvaWQgRGlyZWN0Q29udm9sdmVyOjpwcm9jZXNzKEF1ZGlvRmxvYXRBcnJheSogY29udm9sdXRp
b25LZXJuZWwsIGNvbnN0IGZsb2F0KiBzb3VyY2VQLCBmbG9hdCogZGVzdFAsIHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpCit7CisgICAgLy8gRklYTUU6IE9wdGltaXplIGZvciBJUFAsIHJldmVyYiBm
dW5jdGlvbiBpbiBJUFAgbGlicmFyeSBjYW4gYmUgdXNlZCBoZXJlLgorICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDI1NQorICAgIC8vIEZJWE1FOiBPcHRp
bWl6ZSBmb3IgREFSV0lOLCBjb252KCkgZnVuY3Rpb24gaW4gQWNjZWxlcmF0ZS5mcmFtZXdvcmsg
Y2FuIGJlIHVzZWQgaGVyZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODAyNTYKKworICAgIEFTU0VSVChmcmFtZXNUb1Byb2Nlc3MgPT0gbV9pbnB1dEJs
b2NrU2l6ZSk7CisgICAgaWYgKGZyYW1lc1RvUHJvY2VzcyAhPSBtX2lucHV0QmxvY2tTaXplKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBPbmx5IHN1cHBvcnQga2VybmVsU2l6ZSA8PSBtX2lu
cHV0QmxvY2tTaXplCisgICAgc2l6ZV90IGtlcm5lbFNpemUgPSBjb252b2x1dGlvbktlcm5lbC0+
c2l6ZSgpOworICAgIEFTU0VSVChrZXJuZWxTaXplIDw9IG1faW5wdXRCbG9ja1NpemUpOworICAg
IGlmIChrZXJuZWxTaXplID4gbV9pbnB1dEJsb2NrU2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZmxvYXQqIGtlcm5lbFAgPSBjb252b2x1dGlvbktlcm5lbC0+ZGF0YSgpOworCisgICAgZmxv
YXQqIGlucHV0UCA9IG1faW5wdXRCdWZmZXIuZGF0YSgpICsgbV9pbnB1dEJsb2NrU2l6ZTsKKwor
ICAgIC8vIFNhbml0eSBjaGVjaworICAgIGJvb2wgaXNDb3B5R29vZCA9IGtlcm5lbFAgJiYgc291
cmNlUCAmJiBkZXN0UCAmJiBtX2lucHV0QnVmZmVyLmRhdGEoKTsKKyAgICBBU1NFUlQoaXNDb3B5
R29vZCk7CisgICAgaWYgKCFpc0NvcHlHb29kKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBD
b3B5IHNhbXBsZXMgdG8gMm5kIGhhbGYgb2YgaW5wdXQgYnVmZmVyLgorICAgIG1lbWNweShpbnB1
dFAsIHNvdXJjZVAsIHNpemVvZihmbG9hdCkgKiBmcmFtZXNUb1Byb2Nlc3MpOworCisgICAgLy8g
RklYTUU6IFRoZSBtYWNybyBjYW4gYmUgZnVydGhlciBvcHRpbWl6ZWQgdG8gYXZvaWQgcGlwZWxp
bmUgc3RhbGxzLiBPbmUgcG9zc2liaWxpdHkgaXMgdG8gbWFpbnRhaW4gNCBzZXBhcmF0ZSBzdW1z
IGFuZCBjaGFuZ2UgdGhlIG1hY3JvIHRvIENPTlZPTFZFX0ZPVVJfU0FNUExFUy4KKyNkZWZpbmUg
Q09OVk9MVkVfT05FX1NBTVBMRSAgICAgICAgICAgICBcCisgICAgc3VtICs9IGlucHV0UFtpIC0g
al0gKiBrZXJuZWxQW2pdOyAgXAorICAgIGorKzsKKworICAgIHNpemVfdCBpID0gMDsKKyAgICB3
aGlsZSAoaSA8IGZyYW1lc1RvUHJvY2VzcykgeworICAgICAgICBzaXplX3QgaiA9IDA7CisgICAg
ICAgIGZsb2F0IHN1bSA9IDA7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogU1NFIG9wdGlt
aXphdGlvbiBtYXkgYmUgYXBwbGllZCBoZXJlLgorICAgICAgICBpZiAoa2VybmVsU2l6ZSA9PSAz
MikgeworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxCisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gMworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0CisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gNgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3CisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gOQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMAorCisgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDExCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDEyCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEzCisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDE1CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE2CisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE3CisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDE4CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE5Cisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIwCisKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gMjEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8g
MjIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjMKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMjQKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gMjUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjYKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjcKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gMjgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjkKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzAKKworICAgICAgICAgICAgQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyAzMQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzMgorCisg
ICAgICAgIH0gZWxzZSBpZiAoa2VybmVsU2l6ZSA9PSA2NCkgeworICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyAxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMworICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyA0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNgorICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyA3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDgK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOQorICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyAxMAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDExCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEyCisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDEzCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDE0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE1CisgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE2CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDE3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE4CisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE5CisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDIwCisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjEKKyAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjIKKyAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gMjMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjQK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjUKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gMjYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8g
MjcKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjgKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMjkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gMzAKKworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzMQorICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzMgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyAzMworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzNAorICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzNQorICAgICAgICAgICAgQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyAzNgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzNworICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzOAorICAgICAgICAgICAgQ09OVk9MVkVf
T05FX1NBTVBMRSAvLyAzOQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0MAor
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQxCisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDQyCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDQzCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ0CisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDQ1CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDQ2CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ3CisgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ4CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDQ5CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUwCisKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTEKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gNTIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTMKKyAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTQKKyAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gNTUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTYK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTcKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gNTgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8g
NTkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjAKKworICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyA2MQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyA2MgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA2MworICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA2NAorCisgICAgICAgIH0gZWxzZSBpZiAoa2VybmVs
U2l6ZSA9PSAxMjgpIHsKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMQorICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyCisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNAorICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1CisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNworICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA4CisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTAKKwor
ICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMQorICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyAxMgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAx
MworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNAorICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyAxNQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAxNgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNworICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyAxOAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyAxOQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyMAorCisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDIyCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIzCisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI0CisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDI1CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI2Cisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI3CisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDI4CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI5
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDMwCisKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMzEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gMzIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzMKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzQKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gMzUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzYKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzcKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gMzgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzkKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDAKKworICAgICAgICAgICAgQ09OVk9MVkVf
T05FX1NBTVBMRSAvLyA0MQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0Mgor
ICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0MworICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyA0NAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0
NQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0NgorICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyA0NworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyA0OAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0OQorICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyA1MAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDUxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUyCisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUzCisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDU0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU1CisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU2CisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDU3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU4Cisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU5CisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDYwCisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8g
NjEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjIKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gNjMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gNjQKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjUKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gNjcKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjgKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gNzAKKworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3MQorICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3MgorICAgICAgICAgICAgQ09OVk9MVkVf
T05FX1NBTVBMRSAvLyA3MworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3NAor
ICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3NQorICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyA3NgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3
NworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3OAorICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyA3OQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyA4MAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDgxCisgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDgyCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDgzCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDg0CisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDg1CisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDg2CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDg3CisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDg4CisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDg5CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDkwCisK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTEKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gOTIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8g
OTMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTQKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gOTUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gOTYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTcKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gOTkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTAwCisKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTAxCisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDEwMgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMDMK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTA0CisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDEwNQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAxMDYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTA3CisgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEwOAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyAxMDkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTEwCisKKyAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTExCisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDExMgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAx
MTMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTE0CisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDExNQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyAxMTYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTE3CisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDExOAorICAgICAgICAgICAgQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyAxMTkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTIwCisK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTIxCisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDEyMgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAxMjMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTI0CisgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEyNQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyAxMjYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTI3CisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEyOAorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgd2hpbGUgKGogPCBrZXJuZWxTaXplKSB7CisgICAgICAgICAgICAgICAgLy8gTm9u
LW9wdGltaXplZCB1c2luZyBhY3R1YWwgd2hpbGUgbG9vcC4KKyAgICAgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGVzdFBb
aSsrXSA9IHN1bTsKKyAgICB9CisKKyAgICAvLyBDb3B5IDJuZCBoYWxmIG9mIGlucHV0IGJ1ZmZl
ciB0byAxc3QgaGFsZi4KKyAgICBtZW1jcHkobV9pbnB1dEJ1ZmZlci5kYXRhKCksIGlucHV0UCwg
c2l6ZW9mKGZsb2F0KSAqIGZyYW1lc1RvUHJvY2Vzcyk7Cit9CisKK3ZvaWQgRGlyZWN0Q29udm9s
dmVyOjpyZXNldCgpCit7CisgICAgbV9pbnB1dEJ1ZmZlci56ZXJvKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMz
MDljNzUyZDYwODVmNGQ2YzgzNTkyOTg3ZDE5Y2I1OWZjZmFjNDMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuaApAQCAtMCww
ICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIERpcmVjdENvbnZvbHZlcl9oCisjZGVmaW5lIERpcmVjdENvbnZv
bHZlcl9oCisKKyNpbmNsdWRlICJBdWRpb0FycmF5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRGlyZWN0Q29udm9sdmVyIHsKK3B1YmxpYzoKKyAgICBEaXJlY3RDb252b2x2ZXIo
c2l6ZV90IGlucHV0QmxvY2tTaXplKTsKKworICAgIHZvaWQgcHJvY2VzcyhBdWRpb0Zsb2F0QXJy
YXkqIGNvbnZvbHV0aW9uS2VybmVsLCBjb25zdCBmbG9hdCogc291cmNlUCwgZmxvYXQqIGRlc3RQ
LCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKworICAgIHZvaWQgcmVzZXQoKTsKKworcHJpdmF0
ZToKKyAgICBzaXplX3QgbV9pbnB1dEJsb2NrU2l6ZTsKKworICAgIEF1ZGlvRmxvYXRBcnJheSBt
X2lucHV0QnVmZmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RGlyZWN0Q29udm9sdmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0ZGVENvbnZvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRD
b252b2x2ZXIuY3BwCmluZGV4IDIzMjFkZTBjZjExMDQ1OTA1ZGQxNTk4YWE4ZTZlYmE3YmVjNTk5
NjMuLmZhMTU4Njk2ZTdhODI4ZWJkZWFmZGNkNzg0MWM5MWE2ODA2MTFiZTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVENvbnZvbHZlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZUQ29udm9sdmVyLmNwcApAQCAtNDksNTMgKzQ5
LDYzIEBAIEZGVENvbnZvbHZlcjo6RkZUQ29udm9sdmVyKHNpemVfdCBmZnRTaXplKQogCiB2b2lk
IEZGVENvbnZvbHZlcjo6cHJvY2VzcyhGRlRGcmFtZSogZmZ0S2VybmVsLCBjb25zdCBmbG9hdCog
c291cmNlUCwgZmxvYXQqIGRlc3RQLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQogewotICAgIC8v
IEZJWE1FOiBtYWtlIHNvIGZyYW1lc1RvUHJvY2VzcyBpcyBub3QgcmVxdWlyZWQgdG8gZml0IGV2
ZW5seSBpbnRvIGZmdFNpemUvMgotCi0gICAgLy8gQ29weSBzYW1wbGVzIHRvIGlucHV0IGJ1ZmZl
ciAobm90ZSBjb250cmFpbnQgYWJvdmUhKQotICAgIGZsb2F0KiBpbnB1dFAgPSBtX2lucHV0QnVm
ZmVyLmRhdGEoKTsKKyAgICBzaXplX3QgaGFsZlNpemUgPSBmZnRTaXplKCkgLyAyOwogCi0gICAg
Ly8gU2FuaXR5IGNoZWNrCi0gICAgYm9vbCBpc0NvcHlHb29kMSA9IHNvdXJjZVAgJiYgaW5wdXRQ
ICYmIG1fcmVhZFdyaXRlSW5kZXggKyBmcmFtZXNUb1Byb2Nlc3MgPD0gbV9pbnB1dEJ1ZmZlci5z
aXplKCk7Ci0gICAgQVNTRVJUKGlzQ29weUdvb2QxKTsKLSAgICBpZiAoIWlzQ29weUdvb2QxKQor
ICAgIC8vIGZyYW1lc1RvUHJvY2VzcyBtdXN0IGJlIGFuIGV4YWN0IG11bHRpcGxlIG9mIGhhbGZT
aXplLAorICAgIC8vIG9yIGhhbGZTaXplIGlzIGEgbXVsdGlwbGUgb2YgZnJhbWVzVG9Qcm9jZXNz
IHdoZW4gaGFsZlNpemUgPiBmcmFtZXNUb1Byb2Nlc3MuCisgICAgYm9vbCBpc0dvb2QgPSAhKGhh
bGZTaXplICUgZnJhbWVzVG9Qcm9jZXNzICYmIGZyYW1lc1RvUHJvY2VzcyAlIGhhbGZTaXplKTsK
KyAgICBBU1NFUlQoaXNHb29kKTsKKyAgICBpZiAoIWlzR29vZCkKICAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIG1lbWNweShpbnB1dFAgKyBtX3JlYWRXcml0ZUluZGV4LCBzb3VyY2VQLCBzaXpl
b2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzKTsKIAotICAgIC8vIENvcHkgc2FtcGxlcyBmcm9t
IG91dHB1dCBidWZmZXIKLSAgICBmbG9hdCogb3V0cHV0UCA9IG1fb3V0cHV0QnVmZmVyLmRhdGEo
KTsKKyAgICBzaXplX3QgbnVtYmVyT2ZEaXZpc2lvbnMgPSBoYWxmU2l6ZSA8PSBmcmFtZXNUb1By
b2Nlc3MgPyAoZnJhbWVzVG9Qcm9jZXNzIC8gaGFsZlNpemUpIDogMTsKKyAgICBzaXplX3QgZGl2
aXNpb25TaXplID0gbnVtYmVyT2ZEaXZpc2lvbnMgPT0gMSA/IGZyYW1lc1RvUHJvY2VzcyA6IGhh
bGZTaXplOwogCi0gICAgLy8gU2FuaXR5IGNoZWNrCi0gICAgYm9vbCBpc0NvcHlHb29kMiA9IGRl
c3RQICYmIG91dHB1dFAgJiYgbV9yZWFkV3JpdGVJbmRleCArIGZyYW1lc1RvUHJvY2VzcyA8PSBt
X291dHB1dEJ1ZmZlci5zaXplKCk7Ci0gICAgQVNTRVJUKGlzQ29weUdvb2QyKTsKLSAgICBpZiAo
IWlzQ29weUdvb2QyKQotICAgICAgICByZXR1cm47CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBudW1iZXJPZkRpdmlzaW9uczsgKytpLCBzb3VyY2VQICs9IGRpdmlzaW9uU2l6ZSwgZGVzdFAg
Kz0gZGl2aXNpb25TaXplKSB7CisgICAgICAgIC8vIENvcHkgc2FtcGxlcyB0byBpbnB1dCBidWZm
ZXIgKG5vdGUgY29udHJhaW50IGFib3ZlISkKKyAgICAgICAgZmxvYXQqIGlucHV0UCA9IG1faW5w
dXRCdWZmZXIuZGF0YSgpOwogCi0gICAgbWVtY3B5KGRlc3RQLCBvdXRwdXRQICsgbV9yZWFkV3Jp
dGVJbmRleCwgc2l6ZW9mKGZsb2F0KSAqIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgbV9yZWFkV3Jp
dGVJbmRleCArPSBmcmFtZXNUb1Byb2Nlc3M7CisgICAgICAgIC8vIFNhbml0eSBjaGVjaworICAg
ICAgICBib29sIGlzQ29weUdvb2QxID0gc291cmNlUCAmJiBpbnB1dFAgJiYgbV9yZWFkV3JpdGVJ
bmRleCArIGRpdmlzaW9uU2l6ZSA8PSBtX2lucHV0QnVmZmVyLnNpemUoKTsKKyAgICAgICAgQVNT
RVJUKGlzQ29weUdvb2QxKTsKKyAgICAgICAgaWYgKCFpc0NvcHlHb29kMSkKKyAgICAgICAgICAg
IHJldHVybjsKIAorICAgICAgICBtZW1jcHkoaW5wdXRQICsgbV9yZWFkV3JpdGVJbmRleCwgc291
cmNlUCwgc2l6ZW9mKGZsb2F0KSAqIGRpdmlzaW9uU2l6ZSk7CiAKLSAgICAvLyBDaGVjayBpZiBp
dCdzIHRpbWUgdG8gcGVyZm9ybSB0aGUgbmV4dCBGRlQKLSAgICBzaXplX3QgaGFsZlNpemUgPSBm
ZnRTaXplKCkgLyAyOwotICAgIGlmIChtX3JlYWRXcml0ZUluZGV4ID09IGhhbGZTaXplKSB7Ci0g
ICAgICAgIC8vIFRoZSBpbnB1dCBidWZmZXIgaXMgbm93IGZpbGxlZCAoZ2V0IGZyZXF1ZW5jeS1k
b21haW4gdmVyc2lvbikKLSAgICAgICAgbV9mcmFtZS5kb0ZGVChtX2lucHV0QnVmZmVyLmRhdGEo
KSk7Ci0gICAgICAgIG1fZnJhbWUubXVsdGlwbHkoKmZmdEtlcm5lbCk7Ci0gICAgICAgIG1fZnJh
bWUuZG9JbnZlcnNlRkZUKG1fb3V0cHV0QnVmZmVyLmRhdGEoKSk7Ci0KLSAgICAgICAgLy8gT3Zl
cmxhcC1hZGQgMXN0IGhhbGYgZnJvbSBwcmV2aW91cyB0aW1lCi0gICAgICAgIHZhZGQobV9vdXRw
dXRCdWZmZXIuZGF0YSgpLCAxLCBtX2xhc3RPdmVybGFwQnVmZmVyLmRhdGEoKSwgMSwgbV9vdXRw
dXRCdWZmZXIuZGF0YSgpLCAxLCBoYWxmU2l6ZSk7Ci0KLSAgICAgICAgLy8gRmluYWxseSwgc2F2
ZSAybmQgaGFsZiBvZiByZXN1bHQKLSAgICAgICAgYm9vbCBpc0NvcHlHb29kMyA9IG1fb3V0cHV0
QnVmZmVyLnNpemUoKSA9PSAyICogaGFsZlNpemUgJiYgbV9sYXN0T3ZlcmxhcEJ1ZmZlci5zaXpl
KCkgPT0gaGFsZlNpemU7Ci0gICAgICAgIEFTU0VSVChpc0NvcHlHb29kMyk7Ci0gICAgICAgIGlm
ICghaXNDb3B5R29vZDMpCisgICAgICAgIC8vIENvcHkgc2FtcGxlcyBmcm9tIG91dHB1dCBidWZm
ZXIKKyAgICAgICAgZmxvYXQqIG91dHB1dFAgPSBtX291dHB1dEJ1ZmZlci5kYXRhKCk7CisKKyAg
ICAgICAgLy8gU2FuaXR5IGNoZWNrCisgICAgICAgIGJvb2wgaXNDb3B5R29vZDIgPSBkZXN0UCAm
JiBvdXRwdXRQICYmIG1fcmVhZFdyaXRlSW5kZXggKyBkaXZpc2lvblNpemUgPD0gbV9vdXRwdXRC
dWZmZXIuc2l6ZSgpOworICAgICAgICBBU1NFUlQoaXNDb3B5R29vZDIpOworICAgICAgICBpZiAo
IWlzQ29weUdvb2QyKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgbWVt
Y3B5KG1fbGFzdE92ZXJsYXBCdWZmZXIuZGF0YSgpLCBtX291dHB1dEJ1ZmZlci5kYXRhKCkgKyBo
YWxmU2l6ZSwgc2l6ZW9mKGZsb2F0KSAqIGhhbGZTaXplKTsKIAotICAgICAgICAvLyBSZXNldCBp
bmRleCBiYWNrIHRvIHN0YXJ0IGZvciBuZXh0IHRpbWUKLSAgICAgICAgbV9yZWFkV3JpdGVJbmRl
eCA9IDA7CisgICAgICAgIG1lbWNweShkZXN0UCwgb3V0cHV0UCArIG1fcmVhZFdyaXRlSW5kZXgs
IHNpemVvZihmbG9hdCkgKiBkaXZpc2lvblNpemUpOworICAgICAgICBtX3JlYWRXcml0ZUluZGV4
ICs9IGRpdmlzaW9uU2l6ZTsKKworICAgICAgICAvLyBDaGVjayBpZiBpdCdzIHRpbWUgdG8gcGVy
Zm9ybSB0aGUgbmV4dCBGRlQKKyAgICAgICAgaWYgKG1fcmVhZFdyaXRlSW5kZXggPT0gaGFsZlNp
emUpIHsKKyAgICAgICAgICAgIC8vIFRoZSBpbnB1dCBidWZmZXIgaXMgbm93IGZpbGxlZCAoZ2V0
IGZyZXF1ZW5jeS1kb21haW4gdmVyc2lvbikKKyAgICAgICAgICAgIG1fZnJhbWUuZG9GRlQobV9p
bnB1dEJ1ZmZlci5kYXRhKCkpOworICAgICAgICAgICAgbV9mcmFtZS5tdWx0aXBseSgqZmZ0S2Vy
bmVsKTsKKyAgICAgICAgICAgIG1fZnJhbWUuZG9JbnZlcnNlRkZUKG1fb3V0cHV0QnVmZmVyLmRh
dGEoKSk7CisKKyAgICAgICAgICAgIC8vIE92ZXJsYXAtYWRkIDFzdCBoYWxmIGZyb20gcHJldmlv
dXMgdGltZQorICAgICAgICAgICAgdmFkZChtX291dHB1dEJ1ZmZlci5kYXRhKCksIDEsIG1fbGFz
dE92ZXJsYXBCdWZmZXIuZGF0YSgpLCAxLCBtX291dHB1dEJ1ZmZlci5kYXRhKCksIDEsIGhhbGZT
aXplKTsKKworICAgICAgICAgICAgLy8gRmluYWxseSwgc2F2ZSAybmQgaGFsZiBvZiByZXN1bHQK
KyAgICAgICAgICAgIGJvb2wgaXNDb3B5R29vZDMgPSBtX291dHB1dEJ1ZmZlci5zaXplKCkgPT0g
MiAqIGhhbGZTaXplICYmIG1fbGFzdE92ZXJsYXBCdWZmZXIuc2l6ZSgpID09IGhhbGZTaXplOwor
ICAgICAgICAgICAgQVNTRVJUKGlzQ29weUdvb2QzKTsKKyAgICAgICAgICAgIGlmICghaXNDb3B5
R29vZDMpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBtZW1jcHkobV9s
YXN0T3ZlcmxhcEJ1ZmZlci5kYXRhKCksIG1fb3V0cHV0QnVmZmVyLmRhdGEoKSArIGhhbGZTaXpl
LCBzaXplb2YoZmxvYXQpICogaGFsZlNpemUpOworCisgICAgICAgICAgICAvLyBSZXNldCBpbmRl
eCBiYWNrIHRvIHN0YXJ0IGZvciBuZXh0IHRpbWUKKyAgICAgICAgICAgIG1fcmVhZFdyaXRlSW5k
ZXggPSAwOworICAgICAgICB9CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcAppbmRleCA3NDU5ZjNiODM1NWI1YzQzMGZj
YzRhNjliNGI1YTNhMzk1NDIxNWExLi4xNWMyNDliM2UyMDUxY2E0ZjY0Y2E0MmVhZmFmMDc2ZmM0
ZWM4NDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJD
b252b2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNv
bnZvbHZlci5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgY29uc3QgaW50IElucHV0QnVmZmVyU2l6ZSA9
IDggKiAxNjM4NDsKIC8vIHR1bmVkIGZvciBpbmRpdmlkdWFsIHBsYXRmb3JtcyBpZiB0aGlzIGFz
c3VtcHRpb24gaXMgZm91bmQgdG8gYmUgaW5jb3JyZWN0LgogY29uc3Qgc2l6ZV90IFJlYWx0aW1l
RnJhbWVMaW1pdCA9IDgxOTIgICsgNDA5NjsgLy8gfjI3OG1zZWMgQCA0NC4xS0h6CiAKLWNvbnN0
IHNpemVfdCBNaW5GRlRTaXplID0gMjU2OworY29uc3Qgc2l6ZV90IE1pbkZGVFNpemUgPSAxMjg7
CiBjb25zdCBzaXplX3QgTWF4UmVhbHRpbWVGRlRTaXplID0gMjA0ODsKIAogc3RhdGljIHZvaWQg
YmFja2dyb3VuZFRocmVhZEVudHJ5KHZvaWQqIHRocmVhZERhdGEpCkBAIC04NCw4ICs4NCw4IEBA
IFJldmVyYkNvbnZvbHZlcjo6UmV2ZXJiQ29udm9sdmVyKEF1ZGlvQ2hhbm5lbCogaW1wdWxzZVJl
c3BvbnNlLCBzaXplX3QgcmVuZGVyU2xpCiAgICAgY29uc3QgZmxvYXQqIHJlc3BvbnNlID0gaW1w
dWxzZVJlc3BvbnNlLT5kYXRhKCk7CiAgICAgc2l6ZV90IHRvdGFsUmVzcG9uc2VMZW5ndGggPSBp
bXB1bHNlUmVzcG9uc2UtPmxlbmd0aCgpOwogCi0gICAgLy8gQmVjYXVzZSB3ZSdyZSBub3QgdXNp
bmcgZGlyZWN0LWNvbnZvbHV0aW9uIGluIHRoZSBsZWFkaW5nIHBvcnRpb24sIHRoZSByZXZlcmIg
aGFzIGFuIG92ZXJhbGwgbGF0ZW5jeSBvZiBoYWxmIHRoZSBmaXJzdC1zdGFnZSBGRlQgc2l6ZQot
ICAgIHNpemVfdCByZXZlcmJUb3RhbExhdGVuY3kgPSBtX21pbkZGVFNpemUgLyAyOworICAgIC8v
IFRoZSB0b3RhbCBsYXRlbmN5IGlzIHplcm8gYmVjYXVzZSB0aGUgZGlyZWN0LWNvbnZvbHV0aW9u
IGlzIHVzZWQgaW4gdGhlIGxlYWRpbmcgcG9ydGlvbi4KKyAgICBzaXplX3QgcmV2ZXJiVG90YWxM
YXRlbmN5ID0gMDsKIAogICAgIHNpemVfdCBzdGFnZU9mZnNldCA9IDA7CiAgICAgaW50IGkgPSAw
OwpAQCAtMTAxLDcgKzEwMSw5IEBAIFJldmVyYkNvbnZvbHZlcjo6UmV2ZXJiQ29udm9sdmVyKEF1
ZGlvQ2hhbm5lbCogaW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVuZGVyU2xpCiAgICAgICAgIC8v
IFRoaXMgInN0YWdnZXJzIiB0aGUgdGltZSB3aGVuIGVhY2ggRkZUIGhhcHBlbnMgc28gdGhleSBk
b24ndCBhbGwgaGFwcGVuIGF0IHRoZSBzYW1lIHRpbWUKICAgICAgICAgaW50IHJlbmRlclBoYXNl
ID0gY29udm9sdmVyUmVuZGVyUGhhc2UgKyBpICogcmVuZGVyU2xpY2VTaXplOwogCi0gICAgICAg
IE93blB0cjxSZXZlcmJDb252b2x2ZXJTdGFnZT4gc3RhZ2UgPSBhZG9wdFB0cihuZXcgUmV2ZXJi
Q29udm9sdmVyU3RhZ2UocmVzcG9uc2UsIHRvdGFsUmVzcG9uc2VMZW5ndGgsIHJldmVyYlRvdGFs
TGF0ZW5jeSwgc3RhZ2VPZmZzZXQsIHN0YWdlU2l6ZSwgZmZ0U2l6ZSwgcmVuZGVyUGhhc2UsIHJl
bmRlclNsaWNlU2l6ZSwgJm1fYWNjdW11bGF0aW9uQnVmZmVyKSk7CisgICAgICAgIGJvb2wgdXNl
RGlyZWN0Q29udm9sdmVyID0gIXN0YWdlT2Zmc2V0OworCisgICAgICAgIE93blB0cjxSZXZlcmJD
b252b2x2ZXJTdGFnZT4gc3RhZ2UgPSBhZG9wdFB0cihuZXcgUmV2ZXJiQ29udm9sdmVyU3RhZ2Uo
cmVzcG9uc2UsIHRvdGFsUmVzcG9uc2VMZW5ndGgsIHJldmVyYlRvdGFsTGF0ZW5jeSwgc3RhZ2VP
ZmZzZXQsIHN0YWdlU2l6ZSwgZmZ0U2l6ZSwgcmVuZGVyUGhhc2UsIHJlbmRlclNsaWNlU2l6ZSwg
Jm1fYWNjdW11bGF0aW9uQnVmZmVyLCB1c2VEaXJlY3RDb252b2x2ZXIpKTsKIAogICAgICAgICBi
b29sIGlzQmFja2dyb3VuZFN0YWdlID0gZmFsc2U7CiAKQEAgLTExNCw4ICsxMTYsMTEgQEAgUmV2
ZXJiQ29udm9sdmVyOjpSZXZlcmJDb252b2x2ZXIoQXVkaW9DaGFubmVsKiBpbXB1bHNlUmVzcG9u
c2UsIHNpemVfdCByZW5kZXJTbGkKICAgICAgICAgc3RhZ2VPZmZzZXQgKz0gc3RhZ2VTaXplOwog
ICAgICAgICArK2k7CiAKLSAgICAgICAgLy8gRmlndXJlIG91dCBuZXh0IEZGVCBzaXplCi0gICAg
ICAgIGZmdFNpemUgKj0gMjsKKyAgICAgICAgaWYgKCF1c2VEaXJlY3RDb252b2x2ZXIpIHsKKyAg
ICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgbmV4dCBGRlQgc2l6ZQorICAgICAgICAgICAgZmZ0U2l6
ZSAqPSAyOworICAgICAgICB9CisKICAgICAgICAgaWYgKGhhc1JlYWx0aW1lQ29uc3RyYWludCAm
JiAhaXNCYWNrZ3JvdW5kU3RhZ2UgJiYgZmZ0U2l6ZSA+IG1fbWF4UmVhbHRpbWVGRlRTaXplKQog
ICAgICAgICAgICAgZmZ0U2l6ZSA9IG1fbWF4UmVhbHRpbWVGRlRTaXplOwogICAgICAgICBpZiAo
ZmZ0U2l6ZSA+IG1fbWF4RkZUU2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vUmV2ZXJiQ29udm9sdmVyLmgKaW5kZXggYzNkMzA5ZmY1NDU3NDkzNzEwYjVlMDAyNGZmODU3
MTg3NGU1NWQ5Zi4uYTdkNjYxOTc2M2Q3YzI4Y2MxYTQ2ZmQwODU3MWEyYTYzODZjNmUzNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmgKQEAg
LTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgUmV2ZXJiQ29udm9sdmVyX2gKIAogI2luY2x1ZGUgIkF1
ZGlvQXJyYXkuaCIKKyNpbmNsdWRlICJEaXJlY3RDb252b2x2ZXIuaCIKICNpbmNsdWRlICJGRlRD
b252b2x2ZXIuaCIKICNpbmNsdWRlICJSZXZlcmJBY2N1bXVsYXRpb25CdWZmZXIuaCIKICNpbmNs
dWRlICJSZXZlcmJDb252b2x2ZXJTdGFnZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyU3RhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyU3RhZ2UuY3BwCmluZGV4IDUzYmI2NTAwODMx
MDY0NzE5MWUwMGE5ZGI5NTlhMDNkYTlmZmVhMmUuLjFkMzVlMjlkZmZkMmVlNmVlMTg0YmU1ZDZk
Yjc0YThmZGU1ODVmZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L1JldmVyYkNvbnZvbHZlclN0YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9SZXZlcmJDb252b2x2ZXJTdGFnZS5jcHAKQEAgLTQ0LDE4ICs0NCwyNSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgVmVjdG9yTWF0aDsKIAogUmV2ZXJiQ29udm9s
dmVyU3RhZ2U6OlJldmVyYkNvbnZvbHZlclN0YWdlKGNvbnN0IGZsb2F0KiBpbXB1bHNlUmVzcG9u
c2UsIHNpemVfdCByZXNwb25zZUxlbmd0aCwgc2l6ZV90IHJldmVyYlRvdGFsTGF0ZW5jeSwgc2l6
ZV90IHN0YWdlT2Zmc2V0LCBzaXplX3Qgc3RhZ2VMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGZmdFNpemUsIHNpemVfdCByZW5kZXJQaGFz
ZSwgc2l6ZV90IHJlbmRlclNsaWNlU2l6ZSwgUmV2ZXJiQWNjdW11bGF0aW9uQnVmZmVyKiBhY2N1
bXVsYXRpb25CdWZmZXIpCi0gICAgOiBtX2ZmdEtlcm5lbChmZnRTaXplKQotICAgICwgbV9hY2N1
bXVsYXRpb25CdWZmZXIoYWNjdW11bGF0aW9uQnVmZmVyKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBmZnRTaXplLCBzaXplX3QgcmVuZGVyUGhhc2Us
IHNpemVfdCByZW5kZXJTbGljZVNpemUsIFJldmVyYkFjY3VtdWxhdGlvbkJ1ZmZlciogYWNjdW11
bGF0aW9uQnVmZmVyLCBib29sIGRpcmVjdE1vZGUpCisgICAgOiBtX2FjY3VtdWxhdGlvbkJ1ZmZl
cihhY2N1bXVsYXRpb25CdWZmZXIpCiAgICAgLCBtX2FjY3VtdWxhdGlvblJlYWRJbmRleCgwKQog
ICAgICwgbV9pbnB1dFJlYWRJbmRleCgwKQogICAgICwgbV9pbXB1bHNlUmVzcG9uc2VMZW5ndGgo
cmVzcG9uc2VMZW5ndGgpCisgICAgLCBtX2RpcmVjdE1vZGUoZGlyZWN0TW9kZSkKIHsKICAgICBB
U1NFUlQoaW1wdWxzZVJlc3BvbnNlKTsKICAgICBBU1NFUlQoYWNjdW11bGF0aW9uQnVmZmVyKTsK
LSAgICAKLSAgICBtX2ZmdEtlcm5lbC5kb1BhZGRlZEZGVChpbXB1bHNlUmVzcG9uc2UgKyBzdGFn
ZU9mZnNldCwgc3RhZ2VMZW5ndGgpOwotICAgIG1fY29udm9sdmVyID0gYWRvcHRQdHIobmV3IEZG
VENvbnZvbHZlcihmZnRTaXplKSk7CisKKyAgICBpZiAoIW1fZGlyZWN0TW9kZSkgeworICAgICAg
ICBtX2ZmdEtlcm5lbCA9IGFkb3B0UHRyKG5ldyBGRlRGcmFtZShmZnRTaXplKSk7CisgICAgICAg
IG1fZmZ0S2VybmVsLT5kb1BhZGRlZEZGVChpbXB1bHNlUmVzcG9uc2UgKyBzdGFnZU9mZnNldCwg
c3RhZ2VMZW5ndGgpOworICAgICAgICBtX2ZmdENvbnZvbHZlciA9IGFkb3B0UHRyKG5ldyBGRlRD
b252b2x2ZXIoZmZ0U2l6ZSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZGlyZWN0S2VybmVs
ID0gYWRvcHRQdHIobmV3IEF1ZGlvRmxvYXRBcnJheShmZnRTaXplIC8gMikpOworICAgICAgICBt
X2RpcmVjdEtlcm5lbC0+Y29weVRvUmFuZ2UoaW1wdWxzZVJlc3BvbnNlICsgc3RhZ2VPZmZzZXQs
IDAsIGZmdFNpemUgLyAyKTsKKyAgICAgICAgbV9kaXJlY3RDb252b2x2ZXIgPSBhZG9wdFB0cihu
ZXcgRGlyZWN0Q29udm9sdmVyKHJlbmRlclNsaWNlU2l6ZSkpOworICAgIH0KICAgICBtX3RlbXBv
cmFyeUJ1ZmZlci5hbGxvY2F0ZShyZW5kZXJTbGljZVNpemUpOwogCiAgICAgLy8gVGhlIGNvbnZv
bHV0aW9uIHN0YWdlIGF0IG9mZnNldCBzdGFnZU9mZnNldCBuZWVkcyB0byBoYXZlIGEgY29ycmVz
cG9uZGluZyBkZWxheSB0byBjYW5jZWwgb3V0IHRoZSBvZmZzZXQuCkBAIC03OCw3ICs4NSw5IEBA
IFJldmVyYkNvbnZvbHZlclN0YWdlOjpSZXZlcmJDb252b2x2ZXJTdGFnZShjb25zdCBmbG9hdCog
aW1wdWxzZVJlc3BvbnNlLCBzaXplX3QKICAgICBtX3ByZVJlYWRXcml0ZUluZGV4ID0gMDsKICAg
ICBtX2ZyYW1lc1Byb2Nlc3NlZCA9IDA7IC8vIHRvdGFsIGZyYW1lcyBwcm9jZXNzZWQgc28gZmFy
CiAKLSAgICBtX3ByZURlbGF5QnVmZmVyLmFsbG9jYXRlKG1fcHJlRGVsYXlMZW5ndGggPCBmZnRT
aXplID8gZmZ0U2l6ZSA6IG1fcHJlRGVsYXlMZW5ndGgpOworICAgIHNpemVfdCBkZWxheUJ1ZmZl
clNpemUgPSBtX3ByZURlbGF5TGVuZ3RoIDwgZmZ0U2l6ZSA/IGZmdFNpemUgOiBtX3ByZURlbGF5
TGVuZ3RoOworICAgIGRlbGF5QnVmZmVyU2l6ZSA9IGRlbGF5QnVmZmVyU2l6ZSA8IHJlbmRlclNs
aWNlU2l6ZSA/IHJlbmRlclNsaWNlU2l6ZSA6IGRlbGF5QnVmZmVyU2l6ZTsKKyAgICBtX3ByZURl
bGF5QnVmZmVyLmFsbG9jYXRlKGRlbGF5QnVmZmVyU2l6ZSk7CiB9CiAKIHZvaWQgUmV2ZXJiQ29u
dm9sdmVyU3RhZ2U6OnByb2Nlc3NJbkJhY2tncm91bmQoUmV2ZXJiQ29udm9sdmVyKiBjb252b2x2
ZXIsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCkBAIC0xMzMsNyArMTQyLDEwIEBAIHZvaWQgUmV2
ZXJiQ29udm9sdmVyU3RhZ2U6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgc2l6ZV90IGZy
YW1lc1RvUHJvY2VzcykKICAgICAgICAgLy8gTm93LCBydW4gdGhlIGNvbnZvbHV0aW9uIChpbnRv
IHRoZSBkZWxheSBidWZmZXIpLgogICAgICAgICAvLyBBbiBleHBlbnNpdmUgRkZUIHdpbGwgaGFw
cGVuIGV2ZXJ5IGZmdFNpemUgLyAyIGZyYW1lcy4KICAgICAgICAgLy8gV2UgcHJvY2VzcyBpbi1w
bGFjZSBoZXJlLi4uCi0gICAgICAgIG1fY29udm9sdmVyLT5wcm9jZXNzKCZtX2ZmdEtlcm5lbCwg
cHJlRGVsYXllZFNvdXJjZSwgdGVtcG9yYXJ5QnVmZmVyLCBmcmFtZXNUb1Byb2Nlc3MpOworICAg
ICAgICBpZiAoIW1fZGlyZWN0TW9kZSkKKyAgICAgICAgICAgIG1fZmZ0Q29udm9sdmVyLT5wcm9j
ZXNzKG1fZmZ0S2VybmVsLmdldCgpLCBwcmVEZWxheWVkU291cmNlLCB0ZW1wb3JhcnlCdWZmZXIs
IGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZGlyZWN0Q29u
dm9sdmVyLT5wcm9jZXNzKG1fZGlyZWN0S2VybmVsLmdldCgpLCBwcmVEZWxheWVkU291cmNlLCB0
ZW1wb3JhcnlCdWZmZXIsIGZyYW1lc1RvUHJvY2Vzcyk7CiAKICAgICAgICAgLy8gTm93IGFjY3Vt
dWxhdGUgaW50byByZXZlcmIncyBhY2N1bXVsYXRpb24gYnVmZmVyLgogICAgICAgICBtX2FjY3Vt
dWxhdGlvbkJ1ZmZlci0+YWNjdW11bGF0ZSh0ZW1wb3JhcnlCdWZmZXIsIGZyYW1lc1RvUHJvY2Vz
cywgJm1fYWNjdW11bGF0aW9uUmVhZEluZGV4LCBtX3Bvc3REZWxheUxlbmd0aCk7CkBAIC0xNTQs
NyArMTY2LDEwIEBAIHZvaWQgUmV2ZXJiQ29udm9sdmVyU3RhZ2U6OnByb2Nlc3MoY29uc3QgZmxv
YXQqIHNvdXJjZSwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKIAogdm9pZCBSZXZlcmJDb252b2x2
ZXJTdGFnZTo6cmVzZXQoKQogewotICAgIG1fY29udm9sdmVyLT5yZXNldCgpOworICAgIGlmICgh
bV9kaXJlY3RNb2RlKQorICAgICAgICBtX2ZmdENvbnZvbHZlci0+cmVzZXQoKTsKKyAgICBlbHNl
CisgICAgICAgIG1fZGlyZWN0Q29udm9sdmVyLT5yZXNldCgpOwogICAgIG1fcHJlRGVsYXlCdWZm
ZXIuemVybygpOwogICAgIG1fYWNjdW11bGF0aW9uUmVhZEluZGV4ID0gMDsKICAgICBtX2lucHV0
UmVhZEluZGV4ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L1JldmVyYkNvbnZvbHZlclN0YWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9S
ZXZlcmJDb252b2x2ZXJTdGFnZS5oCmluZGV4IDk4MTFiYzYwMzIxNjc2NDYwMGM5Y2IxNzI1MTdk
ZWYxNThhMzZkYzguLjljZThkY2FjODc4OWI0ZWUxMTY2ZWJiOWNkNTBkNzFhMTk4MDFjZjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0
YWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVy
U3RhZ2UuaApAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBSZXZl
cmJBY2N1bXVsYXRpb25CdWZmZXI7CiBjbGFzcyBSZXZlcmJDb252b2x2ZXI7CiBjbGFzcyBGRlRD
b252b2x2ZXI7CitjbGFzcyBEaXJlY3RDb252b2x2ZXI7CiAgICAgCiAvLyBBIFJldmVyYkNvbnZv
bHZlclN0YWdlIHJlcHJlc2VudHMgdGhlIGNvbnZvbHV0aW9uIGFzc29jaWF0ZWQgd2l0aCBhIHN1
Yi1zZWN0aW9uIG9mIGEgbGFyZ2UgaW1wdWxzZSByZXNwb25zZS4KIC8vIEl0IGluY29ycG9yYXRl
cyBhIGRlbGF5IGxpbmUgdG8gYWNjb3VudCBmb3IgdGhlIG9mZnNldCBvZiB0aGUgc3ViLXNlY3Rp
b24gd2l0aGluIHRoZSBsYXJnZXIgaW1wdWxzZSByZXNwb25zZS4KQEAgLTQ1LDggKzQ2LDcgQEAg
Y2xhc3MgUmV2ZXJiQ29udm9sdmVyU3RhZ2UgewogcHVibGljOgogICAgIC8vIHJlbmRlclBoYXNl
IGlzIHVzZWZ1bCB0byBrbm93IHNvIHRoYXQgd2UgY2FuIG1hbmlwdWxhdGUgdGhlIHByZSB2ZXJz
dXMgcG9zdCBkZWxheSBzbyB0aGF0IHN0YWdlcyB3aWxsIHBlcmZvcm0KICAgICAvLyB0aGVpciBo
ZWF2eSB3b3JrIChGRlQgcHJvY2Vzc2luZykgb24gZGlmZmVyZW50IHNsaWNlcyB0byBiYWxhbmNl
IHRoZSBsb2FkIGluIGEgcmVhbC10aW1lIHRocmVhZC4KLSAgICBSZXZlcmJDb252b2x2ZXJTdGFn
ZShjb25zdCBmbG9hdCogaW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVzcG9uc2VMZW5ndGgsIHNp
emVfdCByZXZlcmJUb3RhbExhdGVuY3ksIHNpemVfdCBzdGFnZU9mZnNldCwgc2l6ZV90IHN0YWdl
TGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBmZnRTaXplLCBzaXplX3Qg
cmVuZGVyUGhhc2UsIHNpemVfdCByZW5kZXJTbGljZVNpemUsIFJldmVyYkFjY3VtdWxhdGlvbkJ1
ZmZlciogYWNjdW11bGF0aW9uQnVmZmVyKTsKKyAgICBSZXZlcmJDb252b2x2ZXJTdGFnZShjb25z
dCBmbG9hdCogaW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVzcG9uc2VMZW5ndGgsIHNpemVfdCBy
ZXZlcmJUb3RhbExhdGVuY3ksIHNpemVfdCBzdGFnZU9mZnNldCwgc2l6ZV90IHN0YWdlTGVuZ3Ro
LCBzaXplX3QgZmZ0U2l6ZSwgc2l6ZV90IHJlbmRlclBoYXNlLCBzaXplX3QgcmVuZGVyU2xpY2VT
aXplLCBSZXZlcmJBY2N1bXVsYXRpb25CdWZmZXIqLCBib29sIGRpcmVjdE1vZGUgPSBmYWxzZSk7
CiAKICAgICAvLyBXQVJOSU5HOiBmcmFtZXNUb1Byb2Nlc3MgbXVzdCBiZSBzdWNoIHRoYXQgaXQg
ZXZlbmx5IGRpdmlkZXMgdGhlIGRlbGF5IGJ1ZmZlciBzaXplIChzdGFnZV9vZmZzZXQpLgogICAg
IHZvaWQgcHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNz
KTsKQEAgLTU5LDggKzU5LDggQEAgcHVibGljOgogICAgIGludCBpbnB1dFJlYWRJbmRleCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5wdXRSZWFkSW5kZXg7IH0KIAogcHJpdmF0ZToKLSAgICBGRlRGcmFt
ZSBtX2ZmdEtlcm5lbDsKLSAgICBPd25QdHI8RkZUQ29udm9sdmVyPiBtX2NvbnZvbHZlcjsKKyAg
ICBPd25QdHI8RkZURnJhbWU+IG1fZmZ0S2VybmVsOworICAgIE93blB0cjxGRlRDb252b2x2ZXI+
IG1fZmZ0Q29udm9sdmVyOwogCiAgICAgQXVkaW9GbG9hdEFycmF5IG1fcHJlRGVsYXlCdWZmZXI7
CiAKQEAgLTc2LDYgKzc2LDEwIEBAIHByaXZhdGU6CiAgICAgQXVkaW9GbG9hdEFycmF5IG1fdGVt
cG9yYXJ5QnVmZmVyOwogCiAgICAgc2l6ZV90IG1faW1wdWxzZVJlc3BvbnNlTGVuZ3RoOworCisg
ICAgYm9vbCBtX2RpcmVjdE1vZGU7CisgICAgT3duUHRyPEF1ZGlvRmxvYXRBcnJheT4gbV9kaXJl
Y3RLZXJuZWw7CisgICAgT3duUHRyPERpcmVjdENvbnZvbHZlcj4gbV9kaXJlY3RDb252b2x2ZXI7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZjc2Mzc5MmNjODY3MmIyMTIy
MWNlOTdiNmViYzRmMDlmMjYyMGFlZi4uMjI1YzM5MmU0NTIxOThiOWFlOWRiMjhlNDM1ZDRhNTU3
ZDQzYTQyMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAzLTE1ICBYaW5nbmFuIFdhbmcg
IDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIENvbnZvbHZlck5vZGUgc2hvdWxk
IG5vdCBpbmN1ciBwcm9jZXNzaW5nIGxhdGVuY3kKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTm8gbmVlZCB0byBjaGVjayB0aGUgaW5pdGlhbCBzaWxlbnQg
cGFydCBiZWNhdXNlIHRoZSBsYXRlbmN5IGlzc3VlIG9mIENvbnZvbHZlck5vZGUgaXMgZml4ZWQu
CisKKyAgICAgICAgKiB3ZWJhdWRpby9jb252b2x1dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIHdlYmF1ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzOgor
ICAgICAgICAoY2hlY2tUcmlhbmd1bGFyUHVsc2UpOgorICAgICAgICAoY2hlY2tUYWlsMSk6Cisg
ICAgICAgIChjaGVja0NvbnZvbHZlZFJlc3VsdC5yZXR1cm4udmFyKToKKyAgICAgICAgKGNoZWNr
Q29udm9sdmVkUmVzdWx0KToKKwogMjAxMi0wMy0xNSAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFdlYktpdFRlc3RSdW5uZXIgbGF5b3V0VGVzdENvbnRyb2xs
ZXIucGF0aFRvTG9jYWxSZXNvdXJjZSBuZWVkcyB0byBiZSB1cGRhdGVkIHRvIHdvcmsgd2l0aApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8tbW9uby1l
eHBlY3RlZC50eHQKaW5kZXggODcwNWY2NjFjM2EyODZjNDg1NzM2Y2E0NWE0NDM3NTNhNTZhNzM1
YS4uM2FlMmEwNDg2Njg5ZDY1YzRlZjZkNjAzNGI2OTVjN2Q2ZWEwMjIxZSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQu
dHh0CkBAIC0yLDcgKzIsNiBAQCBUZXN0cyBDb252b2x2ZXJOb2RlIHByb2Nlc3NpbmcgYSBtb25v
IGNoYW5uZWwgd2l0aCBtb25vIGltcHVsc2UgcmVzcG9uc2UuCiAKIE9uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KIAotUEFTUyBJbml0aWFsIGxhdGVuY3kgb2YgY29udm9sdmVyIGlzIHNpbGVudC4K
IFBBU1MgVHJpYW5ndWxhciBwb3J0aW9uIG9mIGNvbnZvbHV0aW9uIGlzIGNvcnJlY3QuCiBQQVNT
IEZpcnN0IHBhcnQgb2YgdGFpbCBvZiBjb252b2x1dGlvbiBpcyBzdWZmaWNpZW50bHkgc21hbGwu
CiBQQVNTIFJlbmRlcmVkIHNpZ25hbCBhZnRlciB0YWlsIG9mIGNvbnZvbHV0aW9uIGlzIHNpbGVu
dC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9jb252b2x1dGlv
bi10ZXN0aW5nLmpzIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9u
LXRlc3RpbmcuanMKaW5kZXggZDdlZjhlYTUxYTk3YTMxMzhmN2Q4Zjk3MDJmMzI0NmMxZWM5MzA2
Ny4uYzJjYWJhMTA2MDFhMjFlOGU3MGJjZjBkNmU0NzI0ZGM2NTI0MTM3OSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRlc3RpbmcuanMKKysr
IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRlc3RpbmcuanMK
QEAgLTQsMTEgKzQsNiBAQCB2YXIgcmVuZGVyTGVuZ3RoU2Vjb25kcyA9IDg7CiB2YXIgcHVsc2VM
ZW5ndGhTZWNvbmRzID0gMTsKIHZhciBwdWxzZUxlbmd0aEZyYW1lcyA9IHB1bHNlTGVuZ3RoU2Vj
b25kcyAqIHNhbXBsZVJhdGU7CiAKLS8vIFRoZSBjb252b2x2ZXIgaGFzIGEgbGF0ZW5jeSBvZiAx
Mjggc2FtcGxlcyBpbiB0aGUgaW1wbGVtZW50YXRpb24uCi0vLyBXZSBuZWVkIHRvIHRha2UgdGhp
cyBpbnRvIGFjY291bnQgd2hlbiB2ZXJpZnlpbmcgdGhlIG91dHB1dCBvZiB0aGUKLS8vIGNvbnZv
bHZlci4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTU2NC4K
LXZhciBjb252b2x2ZURlbGF5U2FtcGxlcyA9IDEyODsKLQogZnVuY3Rpb24gY3JlYXRlU3F1YXJl
UHVsc2VCdWZmZXIoY29udGV4dCwgc2FtcGxlRnJhbWVMZW5ndGgpIHsKICAgICB2YXIgYXVkaW9C
dWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCBzYW1wbGVGcmFtZUxlbmd0aCwgY29udGV4
dC5zYW1wbGVSYXRlKTsKIApAQCAtNDEsMjcgKzM2LDYgQEAgZnVuY3Rpb24gY3JlYXRlVHJpYW5n
bGVQdWxzZUJ1ZmZlcihjb250ZXh0LCBzYW1wbGVGcmFtZUxlbmd0aCkgewogICAgIHJldHVybiBh
dWRpb0J1ZmZlcjsKIH0KIAotLy8gVmVyaWZ5IHRoYXQgdGhlIGluaXRpYWwgbGF0ZW5jeSBvZiB0
aGUgY29udm9sdmVyIGlzIGV4YWN0bHkgemVyby4KLS8vIFJldHVybiB0cnVlIGlmIHNvLgotZnVu
Y3Rpb24gY2hlY2tMYXRlbmN5KGRhdGEpIHsKLSAgICB2YXIgaXNaZXJvID0gdHJ1ZTsKLQotICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgY29udm9sdmVEZWxheVNhbXBsZXM7ICsraSkgewotICAgICAg
ICBpZiAoZGF0YVtpXSAhPSAwKSB7Ci0gICAgICAgICAgICBpc1plcm8gPSBmYWxzZTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGlzWmVybykgewotICAg
ICAgICB0ZXN0UGFzc2VkKCJJbml0aWFsIGxhdGVuY3kgb2YgY29udm9sdmVyIGlzIHNpbGVudC4i
KTsKLSAgICB9IGVsc2UgewotICAgICAgICB0ZXN0RmFpbGVkKCJJbml0aWFsIGxhdGVuY3kgb2Yg
Y29udm9sdmVyIGlzIG5vdCBzaWxlbnQuIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGlzWmVybzsK
LX0KLQogZnVuY3Rpb24gbG9nMTAoeCkgewogICByZXR1cm4gTWF0aC5sb2coeCkvTWF0aC5MTjEw
OwogfQpAQCAtNzksNyArNTMsNyBAQCBmdW5jdGlvbiBjaGVja1RyaWFuZ3VsYXJQdWxzZShyZW5k
ZXJlZCwgcmVmZXJlbmNlKSB7CiAgICAgdmFyIG1heERlbHRhSW5kZXggPSAwOwogCiAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCByZWZlcmVuY2UubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIGRp
ZmYgPSByZW5kZXJlZFtpICsgY29udm9sdmVEZWxheVNhbXBsZXNdIC0gcmVmZXJlbmNlW2ldOwor
ICAgICAgICB2YXIgZGlmZiA9IHJlbmRlcmVkW2ldIC0gcmVmZXJlbmNlW2ldOwogICAgICAgICB2
YXIgeCA9IE1hdGguYWJzKGRpZmYpOwogICAgICAgICBpZiAoeCA+IG1heERlbHRhKSB7CiAgICAg
ICAgICAgICBtYXhEZWx0YSA9IHg7CkBAIC0xMTEsNyArODUsNyBAQCBmdW5jdGlvbiBjaGVja1Rh
aWwxKGRhdGEsIHJlZmVyZW5jZSwgYnJlYWtwb2ludCkgewogICAgIHZhciBpc1plcm8gPSB0cnVl
OwogICAgIHZhciB0YWlsMU1heCA9IDA7CiAKLSAgICBmb3IgKHZhciBpID0gcmVmZXJlbmNlLmxl
bmd0aCArIGNvbnZvbHZlRGVsYXlTYW1wbGVzOyBpIDwgcmVmZXJlbmNlLmxlbmd0aCArIGJyZWFr
cG9pbnQ7ICsraSkgeworICAgIGZvciAodmFyIGkgPSByZWZlcmVuY2UubGVuZ3RoOyBpIDwgcmVm
ZXJlbmNlLmxlbmd0aCArIGJyZWFrcG9pbnQ7ICsraSkgewogICAgICAgICB2YXIgbWFnID0gTWF0
aC5hYnMoZGF0YVtpXSk7CiAgICAgICAgIGlmIChtYWcgPiB0YWlsMU1heCkgewogICAgICAgICAg
ICAgdGFpbDFNYXggPSBtYWc7CkBAIC0xNzMsMTEgKzE0Nyw2IEBAIGZ1bmN0aW9uIGNoZWNrQ29u
dm9sdmVkUmVzdWx0KHRyaWFuZ2xlUHVsc2UpIHsKICAgICAKICAgICAgICAgdmFyIHN1Y2Nlc3Mg
PSB0cnVlOwogICAgIAotICAgICAgICAvLyBWZXJpZnkgdGhlIGluaXRpYWwgcGFydCBpcyBleGFj
dGx5IHplcm8gYmVjYXVzZSBvZiB0aGUKLSAgICAgICAgLy8gbGF0ZW5jeSBpbiB0aGUgY29udm9s
dmVyLgotCi0gICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNoZWNrTGF0ZW5jeShyZW5kZXJl
ZERhdGEpOwotCiAgICAgICAgIC8vIFZlcmlmeSB0aGUgdHJpYW5ndWxhciBwdWxzZSBpcyBhY3R1
YWxseSB0cmlhbmd1bGFyLgogCiAgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNoZWNrVHJp
YW5ndWxhclB1bHNlKHJlbmRlcmVkRGF0YSwgcmVmZXJlbmNlRGF0YSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132521</attachid>
            <date>2012-03-18 19:10:53 -0700</date>
            <delta_ts>2012-03-19 13:20:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75564-20120319101405.patch</filename>
            <type>text/plain</type>
            <size>41480</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjhkZDhjOThhNDJkYjZi
Zjc5M2Q0OTgxNWIzMDMxYjE3OWY5Yjk4Mi4uZDViMjQ2OTRiOWU5YzIwYTNmYmM1ZjQ4YjYwZjYy
NmNjMTJlZDc0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAzLTE4ICBYaW5n
bmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIENvbnZvbHZlck5v
ZGUgc2hvdWxkIG5vdCBpbmN1ciBwcm9jZXNzaW5nIGxhdGVuY3kKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTY0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBEaXJlY3RDb252b2x2ZXIgaW5z
dGVhZCBvZiBGRlRDb252b2x2ZXIgZm9yIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSBsZWFkaW5nIHBv
cnRpb24gb2YgaW1wdWxzZSByZXNwb25zZS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0Q29udm9sdmVyOjpEaXJlY3RD
b252b2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0Q29udm9sdmVyOjpwcm9jZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdENvbnZvbHZlcjo6cmVzZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoRGlyZWN0Q29udm9sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdENv
bnZvbHZlcjo6Y29udm9sdmVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmJD
b252b2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpSZXZlcmJD
b252b2x2ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJldmVyYkNvbnZvbHZlclN0YWdlOjpSZXZlcmJDb252b2x2ZXJTdGFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXJTdGFnZTo6cHJvY2Vzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXJTdGFnZTo6cmVzZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFJldmVyYkNvbnZvbHZlclN0YWdlKToKKwogMjAxMi0wMy0xOCAgRGFuYSBKYW5z
ZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIERvbid0IG9j
Y2x1ZGUgb24gbWFpbi10aHJlYWQgYmVoaW5kIGxheWVycy9zdXJmYWNlcyB3aXRoIGltcGwtdGhy
ZWFkIGFuaW1hdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGJjYjAyOWQw
MWEyYjYxZDI4YWY1NzQ5MTczOGFiNDg4ZDQxMGE3ZjcuLjNmOTBiMDE1MWQ0YjdkZWM0YmQxMzM4
ZDg5OTcxMWM1NTEzODhjYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNTQ3
OCw2ICs1NDc4LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9Db25lLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQ29u
ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EZW5vcm1hbERpc2FibGVyLmgg
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5jcHAgXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXN0YW5jZS5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0Rpc3RhbmNlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAwNmJmOWYwNzBi
Zjg2ZjdkZWI0ZjA3YTQyMGYzYWNmZTliYmEyZTk2Li45MTY1NjJiOGM5MjYyODUzMTI5MmU1ZjIx
MzA2NjllMGMzMjQ1Y2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zMDQ5LDYgKzMwNDksOCBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0NvbmUuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9hdWRpby9Db25lLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0Rlbm9ybWFs
RGlzYWJsZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29udm9sdmVy
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vRGlyZWN0Q29udm9sdmVyLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0Rpc3RhbmNlLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vYXVkaW8vRGlzdGFuY2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8v
RHluYW1pY3NDb21wcmVzc29yLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmViY2VhNGY0ZTZiMWEzYjAxNjFhOTFkZGNk
M2QyMzE1MDRmODE2NS4uZWYzNGFkYzg0MjEwODczMGE5Nzc2NWU1ZDg1NTUxNzg4MjFiMzBmNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNjI4OSw2ICs2Mjg5LDggQEAKIAkJRkRBM0U5NUExMzRBNDlFRjAwOEQ0QjVBIC8qIE9m
ZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkRBM0U5NTYxMzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRp
b0NvbXBsZXRpb25FdmVudC5oICovOyB9OwogCQlGREEzRTk1QjEzNEE0OUVGMDA4RDRCNUEgLyog
T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQTNFOTU3MTM0QTQ5RUYwMDhENEI1QSAvKiBPZmZsaW5l
QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwICovOyB9OwogCQlGREEzRTk1QzEzNEE0OUVGMDA4RDRC
NUEgLyogT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREEzRTk1ODEzNEE0OUVGMDA4RDRCNUEgLyogT2Zm
bGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmggKi87IH07CisJCUZEQUYxOTk4MTUxM0QxMzEwMDhE
QjBDMyAvKiBEaXJlY3RDb252b2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkRBRjE5OTYxNTEzRDEzMTAwOERCMEMzIC8qIERpcmVjdENvbnZv
bHZlci5jcHAgKi87IH07CisJCUZEQUYxOTk5MTUxM0QxMzEwMDhEQjBDMyAvKiBEaXJlY3RDb252
b2x2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZE
QUYxOTk3MTUxM0QxMzEwMDhEQjBDMyAvKiBEaXJlY3RDb252b2x2ZXIuaCAqLzsgfTsKIAkJRkRC
MTcwMDUxNEEyQkFCMjAwQTJCNUQ5IC8qIE11bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREIxNzAwMzE0QTJCQUIy
MDBBMkI1RDkgLyogTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcCAqLzsgfTsKIAkJRkRCMTcwMDYx
NEEyQkFCMjAwQTJCNUQ5IC8qIE11bHRpQ2hhbm5lbFJlc2FtcGxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRCMTcwMDQxNEEyQkFCMjAwQTJCNUQ5
IC8qIE11bHRpQ2hhbm5lbFJlc2FtcGxlci5oICovOyB9OwogCQlGREM1NEYwNDEzOTlCMERBMDA4
RDkxMTcgLyogQmlxdWFkRmlsdGVyTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGREM1NEYwMTEzOTlCMERBMDA4RDkxMTcgLyogQmlxdWFkRmls
dGVyTm9kZS5jcHAgKi87IH07CkBAIC0xMzQ0OCw2ICsxMzQ1MCw4IEBACiAJCUZEQTNFOTU3MTM0
QTQ5RUYwMDhENEI1QSAvKiBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2Rl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkRBM0U5NTgxMzRBNDlFRjAwOEQ0
QjVBIC8qIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkRBM0U5NUQxMzRBNDlGRjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRp
b0NvbXBsZXRpb25FdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gT2ZmbGluZUF1ZGlv
Q29tcGxldGlvbkV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkRBRjE5
OTYxNTEzRDEzMTAwOERCMEMzIC8qIERpcmVjdENvbnZvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RDb252b2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGREFGMTk5NzE1MTNEMTMxMDA4REIwQzMgLyogRGlyZWN0Q29udm9s
dmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdENvbnZvbHZlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREIxNzAwMzE0QTJCQUIyMDBBMkI1RDkg
LyogTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE11bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZEQjE3MDA0MTRBMkJBQjIwMEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBs
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTXVsdGlDaGFubmVsUmVzYW1w
bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEQzU0RjAxMTM5OUIwREEwMDhE
OTExNyAvKiBCaXF1YWRGaWx0ZXJOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEJpcXVhZEZpbHRlck5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjEyODgsNiArMjEyOTIsOCBAQAogCQkJCUZEMzE2MDU4MTJCMDI2RjcwMEMxQTM1OSAv
KiBDb25lLmNwcCAqLywKIAkJCQlGRDMxNjA1OTEyQjAyNkY3MDBDMUEzNTkgLyogQ29uZS5oICov
LAogCQkJCUZEMTY2MEE0MTM3ODdDNkQwMDFGRkE3QiAvKiBEZW5vcm1hbERpc2FibGVyLmggKi8s
CisJCQkJRkRBRjE5OTYxNTEzRDEzMTAwOERCMEMzIC8qIERpcmVjdENvbnZvbHZlci5jcHAgKi8s
CisJCQkJRkRBRjE5OTcxNTEzRDEzMTAwOERCMEMzIC8qIERpcmVjdENvbnZvbHZlci5oICovLAog
CQkJCUZEMzE2MDVBMTJCMDI2RjcwMEMxQTM1OSAvKiBEaXN0YW5jZS5jcHAgKi8sCiAJCQkJRkQz
MTYwNUIxMkIwMjZGNzAwQzFBMzU5IC8qIERpc3RhbmNlLmggKi8sCiAJCQkJRkQ2RUQyQzUxMzZC
OEU2NjAwM0NGMDcyIC8qIER5bmFtaWNzQ29tcHJlc3Nvci5jcHAgKi8sCkBAIC0yMTc4OSw2ICsy
MTc5NSw3IEBACiAJCQkJNTkzMDlBMTMxMUY0QUU2QTAwMjUwNjAzIC8qIERldmljZU9yaWVudGF0
aW9uQ2xpZW50TW9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTlBOEYxRDYxMUE2OTUxMzAwMUFD
MzRBIC8qIERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTlBODVFQTQxMTlENjhFQzAwREVGMUVGIC8qIERldmljZU9yaWVudGF0aW9uRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZEQUYxOTk5MTUxM0QxMzEwMDhEQjBDMyAvKiBEaXJlY3RDb252b2x2
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg5ODc4NTUzMTIyQ0EwNjQwMDNBQUJEQSAvKiBEaXJl
Y3RvcnlFbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODkzQzQ4MDExMjQ4QkQzQTAwMkIzRDg2
IC8qIERpcmVjdG9yeUVudHJ5U3luYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODk4Nzg1NTUxMjJD
QTA2NDAwM0FBQkRBIC8qIERpcmVjdG9yeVJlYWRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTIy
OCw2ICsyNTIzNSw3IEBACiAJCQkJNTkzMDlBMTExMUY0QUU1ODAwMjUwNjAzIC8qIERldmljZU9y
aWVudGF0aW9uQ2xpZW50TW9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1OUE4RjFENDExQTY5
NTA4MDAxQUMzNEEgLyogRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTU5QTg1RUEyMTE5RDY4RDkwMERFRjFFRiAvKiBEZXZpY2VPcmllbnRhdGlvbkV2
ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZEQUYxOTk4MTUxM0QxMzEwMDhEQjBDMyAvKiBE
aXJlY3RDb252b2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODk4Nzg1NTIxMjJDQTA2NDAw
M0FBQkRBIC8qIERpcmVjdG9yeUVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg5M0M0ODAw
MTI0OEJEM0EwMDJCM0Q4NiAvKiBEaXJlY3RvcnlFbnRyeVN5bmMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODk4Nzg1NTQxMjJDQTA2NDAwM0FBQkRBIC8qIERpcmVjdG9yeVJlYWRlci5jcHAgaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Rp
cmVjdENvbnZvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RD
b252b2x2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM5ZjNlNWMzYjcxMWQzZjMwMmNhYzc3MjA5Yjk1ZjQy
NTczMzc3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9EaXJlY3RDb252b2x2ZXIuY3BwCkBAIC0wLDAgKzEsMzU4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEludGVsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiRGlyZWN0Q29udm9sdmVy
LmgiCisKKyNpbmNsdWRlICJWZWN0b3JNYXRoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dXNpbmcgbmFtZXNwYWNlIFZlY3Rvck1hdGg7CisgICAgCitEaXJlY3RDb252b2x2ZXI6OkRpcmVj
dENvbnZvbHZlcihzaXplX3QgaW5wdXRCbG9ja1NpemUpCisgICAgOiBtX2lucHV0QmxvY2tTaXpl
KGlucHV0QmxvY2tTaXplKQorICAgICwgbV9pbnB1dEJ1ZmZlcihpbnB1dEJsb2NrU2l6ZSAqIDIp
Cit7Cit9CisKK3ZvaWQgRGlyZWN0Q29udm9sdmVyOjpwcm9jZXNzKEF1ZGlvRmxvYXRBcnJheSog
Y29udm9sdXRpb25LZXJuZWwsIGNvbnN0IGZsb2F0KiBzb3VyY2VQLCBmbG9hdCogZGVzdFAsIHNp
emVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgLy8gRklYTUU6IE9wdGltaXplIGZvciBJUFAs
IHJldmVyYiBmdW5jdGlvbiBpbiBJUFAgbGlicmFyeSBjYW4gYmUgdXNlZCBoZXJlLgorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDI1NQorICAgIC8vIEZJ
WE1FOiBPcHRpbWl6ZSBmb3IgREFSV0lOLCBjb252KCkgZnVuY3Rpb24gaW4gQWNjZWxlcmF0ZS5m
cmFtZXdvcmsgY2FuIGJlIHVzZWQgaGVyZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODAyNTYKKworICAgIEFTU0VSVChmcmFtZXNUb1Byb2Nlc3MgPT0g
bV9pbnB1dEJsb2NrU2l6ZSk7CisgICAgaWYgKGZyYW1lc1RvUHJvY2VzcyAhPSBtX2lucHV0Qmxv
Y2tTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPbmx5IHN1cHBvcnQga2VybmVsU2l6
ZSA8PSBtX2lucHV0QmxvY2tTaXplCisgICAgc2l6ZV90IGtlcm5lbFNpemUgPSBjb252b2x1dGlv
bktlcm5lbC0+c2l6ZSgpOworICAgIEFTU0VSVChrZXJuZWxTaXplIDw9IG1faW5wdXRCbG9ja1Np
emUpOworICAgIGlmIChrZXJuZWxTaXplID4gbV9pbnB1dEJsb2NrU2l6ZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgZmxvYXQqIGtlcm5lbFAgPSBjb252b2x1dGlvbktlcm5lbC0+ZGF0YSgpOwor
CisgICAgZmxvYXQqIGlucHV0UCA9IG1faW5wdXRCdWZmZXIuZGF0YSgpICsgbV9pbnB1dEJsb2Nr
U2l6ZTsKKworICAgIC8vIFNhbml0eSBjaGVjaworICAgIGJvb2wgaXNDb3B5R29vZCA9IGtlcm5l
bFAgJiYgc291cmNlUCAmJiBkZXN0UCAmJiBtX2lucHV0QnVmZmVyLmRhdGEoKTsKKyAgICBBU1NF
UlQoaXNDb3B5R29vZCk7CisgICAgaWYgKCFpc0NvcHlHb29kKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBDb3B5IHNhbXBsZXMgdG8gMm5kIGhhbGYgb2YgaW5wdXQgYnVmZmVyLgorICAgIG1l
bWNweShpbnB1dFAsIHNvdXJjZVAsIHNpemVvZihmbG9hdCkgKiBmcmFtZXNUb1Byb2Nlc3MpOwor
CisgICAgLy8gRklYTUU6IFRoZSBtYWNybyBjYW4gYmUgZnVydGhlciBvcHRpbWl6ZWQgdG8gYXZv
aWQgcGlwZWxpbmUgc3RhbGxzLiBPbmUgcG9zc2liaWxpdHkgaXMgdG8gbWFpbnRhaW4gNCBzZXBh
cmF0ZSBzdW1zIGFuZCBjaGFuZ2UgdGhlIG1hY3JvIHRvIENPTlZPTFZFX0ZPVVJfU0FNUExFUy4K
KyNkZWZpbmUgQ09OVk9MVkVfT05FX1NBTVBMRSAgICAgICAgICAgICBcCisgICAgc3VtICs9IGlu
cHV0UFtpIC0gal0gKiBrZXJuZWxQW2pdOyAgXAorICAgIGorKzsKKworICAgIHNpemVfdCBpID0g
MDsKKyAgICB3aGlsZSAoaSA8IGZyYW1lc1RvUHJvY2VzcykgeworICAgICAgICBzaXplX3QgaiA9
IDA7CisgICAgICAgIGZsb2F0IHN1bSA9IDA7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTog
U1NFIG9wdGltaXphdGlvbiBtYXkgYmUgYXBwbGllZCBoZXJlLgorICAgICAgICBpZiAoa2VybmVs
U2l6ZSA9PSAzMikgeworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxCisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gMworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0CisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gNgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3CisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDgKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gOQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMAorCisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDExCisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDEyCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEz
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE0CisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDE1CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDE2CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE3CisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDE4CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDE5CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIwCisKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gMjIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjMKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjQKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gMjUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjYKKyAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjcKKyAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gMjgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjkK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzAKKworICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyAzMQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAzMgorCisgICAgICAgIH0gZWxzZSBpZiAoa2VybmVsU2l6ZSA9PSA2NCkgeworICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMworICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNgorICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOQorICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDExCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEyCisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEzCisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDE0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE1Cisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE2CisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDE3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE4
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE5CisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDIwCisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gMjEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjIKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gMjQKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjUKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gMjcKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjgKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjkKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gMzAKKworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzMQor
ICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzMgorICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyAzMworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAz
NAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzNQorICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyAzNgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAzNworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzOAorICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyAzOQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyA0MAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQxCisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQyCisgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDQzCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ0CisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ1CisgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDQ2CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ3Cisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ4CisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDQ5CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUw
CisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTEKKyAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gNTIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gNTMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTQKKyAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gNTYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTcKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gNTkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjAKKworICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA2MQorICAgICAgICAgICAgQ09OVk9MVkVf
T05FX1NBTVBMRSAvLyA2MgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA2Mwor
ICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA2NAorCisgICAgICAgIH0gZWxzZSBp
ZiAoa2VybmVsU2l6ZSA9PSAxMjgpIHsKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gMQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyCisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gNAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1CisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gNworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA4CisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gMTAKKworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMQorICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyAxMworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNAorICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNQorICAgICAgICAgICAgQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyAxNgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNworICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxOAorICAgICAgICAgICAgQ09OVk9MVkVf
T05FX1NBTVBMRSAvLyAxOQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyMAor
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIxCisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDIyCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDIzCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI0CisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDI1CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDI2CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI3CisgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI4CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDI5CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDMwCisKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzEKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gMzIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzMKKyAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzQKKyAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gMzUKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzYK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzcKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gMzgKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8g
MzkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDAKKworICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyA0MQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyA0MgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0MworICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0NAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyA0NQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0NgorICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0NworICAgICAgICAgICAgQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyA0OAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0OQorICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1MAorCisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDUxCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUy
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUzCisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDU0CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDU1CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU2CisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDU3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDU4CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU5CisgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDYwCisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gNjEKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjIKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjMKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gNjQKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjUKKyAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjYKKyAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gNjcKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjgK
KyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjkKKyAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gNzAKKworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyA3MQorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3MgorICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyA3MworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyA3NAorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3NQorICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3NgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyA3NworICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3OAorICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA3OQorICAgICAgICAgICAgQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyA4MAorCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDgxCisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDgyCisgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDgzCisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDg0
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDg1CisgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDg2CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDg3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDg4CisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDg5CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDkwCisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTEKKyAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTIKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gOTMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTQKKyAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTUKKyAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gOTYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTcKKyAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOTgKKyAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gOTkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTAw
CisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTAxCisgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDEwMgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyAxMDMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTA0CisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEwNQorICAgICAgICAgICAgQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyAxMDYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTA3Cisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEwOAorICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyAxMDkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8g
MTEwCisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTExCisgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDExMgorICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyAxMTMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTE0CisgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDExNQorICAgICAgICAgICAgQ09OVk9MVkVf
T05FX1NBTVBMRSAvLyAxMTYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTE3
CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDExOAorICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyAxMTkKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gMTIwCisKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTIxCisgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEyMgorICAgICAgICAgICAgQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyAxMjMKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTI0Cisg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEyNQorICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyAxMjYKKyAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8g
MTI3CisgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEyOAorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgd2hpbGUgKGogPCBrZXJuZWxTaXplKSB7CisgICAgICAgICAgICAg
ICAgLy8gTm9uLW9wdGltaXplZCB1c2luZyBhY3R1YWwgd2hpbGUgbG9vcC4KKyAgICAgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZGVzdFBbaSsrXSA9IHN1bTsKKyAgICB9CisKKyAgICAvLyBDb3B5IDJuZCBoYWxmIG9mIGlu
cHV0IGJ1ZmZlciB0byAxc3QgaGFsZi4KKyAgICBtZW1jcHkobV9pbnB1dEJ1ZmZlci5kYXRhKCks
IGlucHV0UCwgc2l6ZW9mKGZsb2F0KSAqIGZyYW1lc1RvUHJvY2Vzcyk7Cit9CisKK3ZvaWQgRGly
ZWN0Q29udm9sdmVyOjpyZXNldCgpCit7CisgICAgbV9pbnB1dEJ1ZmZlci56ZXJvKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0RpcmVjdENvbnZvbHZlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjMzMDljNzUyZDYwODVmNGQ2YzgzNTkyOTg3ZDE5Y2I1OWZjZmFjNDMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXJlY3RDb252b2x2ZXIu
aApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERpcmVjdENvbnZvbHZlcl9oCisjZGVmaW5lIERp
cmVjdENvbnZvbHZlcl9oCisKKyNpbmNsdWRlICJBdWRpb0FycmF5LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRGlyZWN0Q29udm9sdmVyIHsKK3B1YmxpYzoKKyAgICBEaXJlY3RD
b252b2x2ZXIoc2l6ZV90IGlucHV0QmxvY2tTaXplKTsKKworICAgIHZvaWQgcHJvY2VzcyhBdWRp
b0Zsb2F0QXJyYXkqIGNvbnZvbHV0aW9uS2VybmVsLCBjb25zdCBmbG9hdCogc291cmNlUCwgZmxv
YXQqIGRlc3RQLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKworICAgIHZvaWQgcmVzZXQoKTsK
KworcHJpdmF0ZToKKyAgICBzaXplX3QgbV9pbnB1dEJsb2NrU2l6ZTsKKworICAgIEF1ZGlvRmxv
YXRBcnJheSBtX2lucHV0QnVmZmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRGlyZWN0Q29udm9sdmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0ZGVENvbnZvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9GRlRDb252b2x2ZXIuY3BwCmluZGV4IDIzMjFkZTBjZjExMDQ1OTA1ZGQxNTk4YWE4ZTZl
YmE3YmVjNTk5NjMuLmZhMTU4Njk2ZTdhODI4ZWJkZWFmZGNkNzg0MWM5MWE2ODA2MTFiZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVENvbnZvbHZlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZUQ29udm9sdmVyLmNwcApAQCAt
NDksNTMgKzQ5LDYzIEBAIEZGVENvbnZvbHZlcjo6RkZUQ29udm9sdmVyKHNpemVfdCBmZnRTaXpl
KQogCiB2b2lkIEZGVENvbnZvbHZlcjo6cHJvY2VzcyhGRlRGcmFtZSogZmZ0S2VybmVsLCBjb25z
dCBmbG9hdCogc291cmNlUCwgZmxvYXQqIGRlc3RQLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQog
ewotICAgIC8vIEZJWE1FOiBtYWtlIHNvIGZyYW1lc1RvUHJvY2VzcyBpcyBub3QgcmVxdWlyZWQg
dG8gZml0IGV2ZW5seSBpbnRvIGZmdFNpemUvMgotCi0gICAgLy8gQ29weSBzYW1wbGVzIHRvIGlu
cHV0IGJ1ZmZlciAobm90ZSBjb250cmFpbnQgYWJvdmUhKQotICAgIGZsb2F0KiBpbnB1dFAgPSBt
X2lucHV0QnVmZmVyLmRhdGEoKTsKKyAgICBzaXplX3QgaGFsZlNpemUgPSBmZnRTaXplKCkgLyAy
OwogCi0gICAgLy8gU2FuaXR5IGNoZWNrCi0gICAgYm9vbCBpc0NvcHlHb29kMSA9IHNvdXJjZVAg
JiYgaW5wdXRQICYmIG1fcmVhZFdyaXRlSW5kZXggKyBmcmFtZXNUb1Byb2Nlc3MgPD0gbV9pbnB1
dEJ1ZmZlci5zaXplKCk7Ci0gICAgQVNTRVJUKGlzQ29weUdvb2QxKTsKLSAgICBpZiAoIWlzQ29w
eUdvb2QxKQorICAgIC8vIGZyYW1lc1RvUHJvY2VzcyBtdXN0IGJlIGFuIGV4YWN0IG11bHRpcGxl
IG9mIGhhbGZTaXplLAorICAgIC8vIG9yIGhhbGZTaXplIGlzIGEgbXVsdGlwbGUgb2YgZnJhbWVz
VG9Qcm9jZXNzIHdoZW4gaGFsZlNpemUgPiBmcmFtZXNUb1Byb2Nlc3MuCisgICAgYm9vbCBpc0dv
b2QgPSAhKGhhbGZTaXplICUgZnJhbWVzVG9Qcm9jZXNzICYmIGZyYW1lc1RvUHJvY2VzcyAlIGhh
bGZTaXplKTsKKyAgICBBU1NFUlQoaXNHb29kKTsKKyAgICBpZiAoIWlzR29vZCkKICAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIG1lbWNweShpbnB1dFAgKyBtX3JlYWRXcml0ZUluZGV4LCBzb3Vy
Y2VQLCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzKTsKIAotICAgIC8vIENvcHkgc2Ft
cGxlcyBmcm9tIG91dHB1dCBidWZmZXIKLSAgICBmbG9hdCogb3V0cHV0UCA9IG1fb3V0cHV0QnVm
ZmVyLmRhdGEoKTsKKyAgICBzaXplX3QgbnVtYmVyT2ZEaXZpc2lvbnMgPSBoYWxmU2l6ZSA8PSBm
cmFtZXNUb1Byb2Nlc3MgPyAoZnJhbWVzVG9Qcm9jZXNzIC8gaGFsZlNpemUpIDogMTsKKyAgICBz
aXplX3QgZGl2aXNpb25TaXplID0gbnVtYmVyT2ZEaXZpc2lvbnMgPT0gMSA/IGZyYW1lc1RvUHJv
Y2VzcyA6IGhhbGZTaXplOwogCi0gICAgLy8gU2FuaXR5IGNoZWNrCi0gICAgYm9vbCBpc0NvcHlH
b29kMiA9IGRlc3RQICYmIG91dHB1dFAgJiYgbV9yZWFkV3JpdGVJbmRleCArIGZyYW1lc1RvUHJv
Y2VzcyA8PSBtX291dHB1dEJ1ZmZlci5zaXplKCk7Ci0gICAgQVNTRVJUKGlzQ29weUdvb2QyKTsK
LSAgICBpZiAoIWlzQ29weUdvb2QyKQotICAgICAgICByZXR1cm47CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZkRpdmlzaW9uczsgKytpLCBzb3VyY2VQICs9IGRpdmlzaW9uU2l6
ZSwgZGVzdFAgKz0gZGl2aXNpb25TaXplKSB7CisgICAgICAgIC8vIENvcHkgc2FtcGxlcyB0byBp
bnB1dCBidWZmZXIgKG5vdGUgY29udHJhaW50IGFib3ZlISkKKyAgICAgICAgZmxvYXQqIGlucHV0
UCA9IG1faW5wdXRCdWZmZXIuZGF0YSgpOwogCi0gICAgbWVtY3B5KGRlc3RQLCBvdXRwdXRQICsg
bV9yZWFkV3JpdGVJbmRleCwgc2l6ZW9mKGZsb2F0KSAqIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAg
bV9yZWFkV3JpdGVJbmRleCArPSBmcmFtZXNUb1Byb2Nlc3M7CisgICAgICAgIC8vIFNhbml0eSBj
aGVjaworICAgICAgICBib29sIGlzQ29weUdvb2QxID0gc291cmNlUCAmJiBpbnB1dFAgJiYgbV9y
ZWFkV3JpdGVJbmRleCArIGRpdmlzaW9uU2l6ZSA8PSBtX2lucHV0QnVmZmVyLnNpemUoKTsKKyAg
ICAgICAgQVNTRVJUKGlzQ29weUdvb2QxKTsKKyAgICAgICAgaWYgKCFpc0NvcHlHb29kMSkKKyAg
ICAgICAgICAgIHJldHVybjsKIAorICAgICAgICBtZW1jcHkoaW5wdXRQICsgbV9yZWFkV3JpdGVJ
bmRleCwgc291cmNlUCwgc2l6ZW9mKGZsb2F0KSAqIGRpdmlzaW9uU2l6ZSk7CiAKLSAgICAvLyBD
aGVjayBpZiBpdCdzIHRpbWUgdG8gcGVyZm9ybSB0aGUgbmV4dCBGRlQKLSAgICBzaXplX3QgaGFs
ZlNpemUgPSBmZnRTaXplKCkgLyAyOwotICAgIGlmIChtX3JlYWRXcml0ZUluZGV4ID09IGhhbGZT
aXplKSB7Ci0gICAgICAgIC8vIFRoZSBpbnB1dCBidWZmZXIgaXMgbm93IGZpbGxlZCAoZ2V0IGZy
ZXF1ZW5jeS1kb21haW4gdmVyc2lvbikKLSAgICAgICAgbV9mcmFtZS5kb0ZGVChtX2lucHV0QnVm
ZmVyLmRhdGEoKSk7Ci0gICAgICAgIG1fZnJhbWUubXVsdGlwbHkoKmZmdEtlcm5lbCk7Ci0gICAg
ICAgIG1fZnJhbWUuZG9JbnZlcnNlRkZUKG1fb3V0cHV0QnVmZmVyLmRhdGEoKSk7Ci0KLSAgICAg
ICAgLy8gT3ZlcmxhcC1hZGQgMXN0IGhhbGYgZnJvbSBwcmV2aW91cyB0aW1lCi0gICAgICAgIHZh
ZGQobV9vdXRwdXRCdWZmZXIuZGF0YSgpLCAxLCBtX2xhc3RPdmVybGFwQnVmZmVyLmRhdGEoKSwg
MSwgbV9vdXRwdXRCdWZmZXIuZGF0YSgpLCAxLCBoYWxmU2l6ZSk7Ci0KLSAgICAgICAgLy8gRmlu
YWxseSwgc2F2ZSAybmQgaGFsZiBvZiByZXN1bHQKLSAgICAgICAgYm9vbCBpc0NvcHlHb29kMyA9
IG1fb3V0cHV0QnVmZmVyLnNpemUoKSA9PSAyICogaGFsZlNpemUgJiYgbV9sYXN0T3ZlcmxhcEJ1
ZmZlci5zaXplKCkgPT0gaGFsZlNpemU7Ci0gICAgICAgIEFTU0VSVChpc0NvcHlHb29kMyk7Ci0g
ICAgICAgIGlmICghaXNDb3B5R29vZDMpCisgICAgICAgIC8vIENvcHkgc2FtcGxlcyBmcm9tIG91
dHB1dCBidWZmZXIKKyAgICAgICAgZmxvYXQqIG91dHB1dFAgPSBtX291dHB1dEJ1ZmZlci5kYXRh
KCk7CisKKyAgICAgICAgLy8gU2FuaXR5IGNoZWNrCisgICAgICAgIGJvb2wgaXNDb3B5R29vZDIg
PSBkZXN0UCAmJiBvdXRwdXRQICYmIG1fcmVhZFdyaXRlSW5kZXggKyBkaXZpc2lvblNpemUgPD0g
bV9vdXRwdXRCdWZmZXIuc2l6ZSgpOworICAgICAgICBBU1NFUlQoaXNDb3B5R29vZDIpOworICAg
ICAgICBpZiAoIWlzQ29weUdvb2QyKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAg
ICAgICAgbWVtY3B5KG1fbGFzdE92ZXJsYXBCdWZmZXIuZGF0YSgpLCBtX291dHB1dEJ1ZmZlci5k
YXRhKCkgKyBoYWxmU2l6ZSwgc2l6ZW9mKGZsb2F0KSAqIGhhbGZTaXplKTsKIAotICAgICAgICAv
LyBSZXNldCBpbmRleCBiYWNrIHRvIHN0YXJ0IGZvciBuZXh0IHRpbWUKLSAgICAgICAgbV9yZWFk
V3JpdGVJbmRleCA9IDA7CisgICAgICAgIG1lbWNweShkZXN0UCwgb3V0cHV0UCArIG1fcmVhZFdy
aXRlSW5kZXgsIHNpemVvZihmbG9hdCkgKiBkaXZpc2lvblNpemUpOworICAgICAgICBtX3JlYWRX
cml0ZUluZGV4ICs9IGRpdmlzaW9uU2l6ZTsKKworICAgICAgICAvLyBDaGVjayBpZiBpdCdzIHRp
bWUgdG8gcGVyZm9ybSB0aGUgbmV4dCBGRlQKKyAgICAgICAgaWYgKG1fcmVhZFdyaXRlSW5kZXgg
PT0gaGFsZlNpemUpIHsKKyAgICAgICAgICAgIC8vIFRoZSBpbnB1dCBidWZmZXIgaXMgbm93IGZp
bGxlZCAoZ2V0IGZyZXF1ZW5jeS1kb21haW4gdmVyc2lvbikKKyAgICAgICAgICAgIG1fZnJhbWUu
ZG9GRlQobV9pbnB1dEJ1ZmZlci5kYXRhKCkpOworICAgICAgICAgICAgbV9mcmFtZS5tdWx0aXBs
eSgqZmZ0S2VybmVsKTsKKyAgICAgICAgICAgIG1fZnJhbWUuZG9JbnZlcnNlRkZUKG1fb3V0cHV0
QnVmZmVyLmRhdGEoKSk7CisKKyAgICAgICAgICAgIC8vIE92ZXJsYXAtYWRkIDFzdCBoYWxmIGZy
b20gcHJldmlvdXMgdGltZQorICAgICAgICAgICAgdmFkZChtX291dHB1dEJ1ZmZlci5kYXRhKCks
IDEsIG1fbGFzdE92ZXJsYXBCdWZmZXIuZGF0YSgpLCAxLCBtX291dHB1dEJ1ZmZlci5kYXRhKCks
IDEsIGhhbGZTaXplKTsKKworICAgICAgICAgICAgLy8gRmluYWxseSwgc2F2ZSAybmQgaGFsZiBv
ZiByZXN1bHQKKyAgICAgICAgICAgIGJvb2wgaXNDb3B5R29vZDMgPSBtX291dHB1dEJ1ZmZlci5z
aXplKCkgPT0gMiAqIGhhbGZTaXplICYmIG1fbGFzdE92ZXJsYXBCdWZmZXIuc2l6ZSgpID09IGhh
bGZTaXplOworICAgICAgICAgICAgQVNTRVJUKGlzQ29weUdvb2QzKTsKKyAgICAgICAgICAgIGlm
ICghaXNDb3B5R29vZDMpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBt
ZW1jcHkobV9sYXN0T3ZlcmxhcEJ1ZmZlci5kYXRhKCksIG1fb3V0cHV0QnVmZmVyLmRhdGEoKSAr
IGhhbGZTaXplLCBzaXplb2YoZmxvYXQpICogaGFsZlNpemUpOworCisgICAgICAgICAgICAvLyBS
ZXNldCBpbmRleCBiYWNrIHRvIHN0YXJ0IGZvciBuZXh0IHRpbWUKKyAgICAgICAgICAgIG1fcmVh
ZFdyaXRlSW5kZXggPSAwOworICAgICAgICB9CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcAppbmRleCA3NDU5ZjNiODM1
NWI1YzQzMGZjYzRhNjliNGI1YTNhMzk1NDIxNWExLi4xNWMyNDliM2UyMDUxY2E0ZjY0Y2E0MmVh
ZmFmMDc2ZmM0ZWM4NDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9SZXZlcmJDb252b2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L1JldmVyYkNvbnZvbHZlci5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgY29uc3QgaW50IElucHV0QnVm
ZmVyU2l6ZSA9IDggKiAxNjM4NDsKIC8vIHR1bmVkIGZvciBpbmRpdmlkdWFsIHBsYXRmb3JtcyBp
ZiB0aGlzIGFzc3VtcHRpb24gaXMgZm91bmQgdG8gYmUgaW5jb3JyZWN0LgogY29uc3Qgc2l6ZV90
IFJlYWx0aW1lRnJhbWVMaW1pdCA9IDgxOTIgICsgNDA5NjsgLy8gfjI3OG1zZWMgQCA0NC4xS0h6
CiAKLWNvbnN0IHNpemVfdCBNaW5GRlRTaXplID0gMjU2OworY29uc3Qgc2l6ZV90IE1pbkZGVFNp
emUgPSAxMjg7CiBjb25zdCBzaXplX3QgTWF4UmVhbHRpbWVGRlRTaXplID0gMjA0ODsKIAogc3Rh
dGljIHZvaWQgYmFja2dyb3VuZFRocmVhZEVudHJ5KHZvaWQqIHRocmVhZERhdGEpCkBAIC04NCw4
ICs4NCw4IEBAIFJldmVyYkNvbnZvbHZlcjo6UmV2ZXJiQ29udm9sdmVyKEF1ZGlvQ2hhbm5lbCog
aW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVuZGVyU2xpCiAgICAgY29uc3QgZmxvYXQqIHJlc3Bv
bnNlID0gaW1wdWxzZVJlc3BvbnNlLT5kYXRhKCk7CiAgICAgc2l6ZV90IHRvdGFsUmVzcG9uc2VM
ZW5ndGggPSBpbXB1bHNlUmVzcG9uc2UtPmxlbmd0aCgpOwogCi0gICAgLy8gQmVjYXVzZSB3ZSdy
ZSBub3QgdXNpbmcgZGlyZWN0LWNvbnZvbHV0aW9uIGluIHRoZSBsZWFkaW5nIHBvcnRpb24sIHRo
ZSByZXZlcmIgaGFzIGFuIG92ZXJhbGwgbGF0ZW5jeSBvZiBoYWxmIHRoZSBmaXJzdC1zdGFnZSBG
RlQgc2l6ZQotICAgIHNpemVfdCByZXZlcmJUb3RhbExhdGVuY3kgPSBtX21pbkZGVFNpemUgLyAy
OworICAgIC8vIFRoZSB0b3RhbCBsYXRlbmN5IGlzIHplcm8gYmVjYXVzZSB0aGUgZGlyZWN0LWNv
bnZvbHV0aW9uIGlzIHVzZWQgaW4gdGhlIGxlYWRpbmcgcG9ydGlvbi4KKyAgICBzaXplX3QgcmV2
ZXJiVG90YWxMYXRlbmN5ID0gMDsKIAogICAgIHNpemVfdCBzdGFnZU9mZnNldCA9IDA7CiAgICAg
aW50IGkgPSAwOwpAQCAtMTAxLDcgKzEwMSw5IEBAIFJldmVyYkNvbnZvbHZlcjo6UmV2ZXJiQ29u
dm9sdmVyKEF1ZGlvQ2hhbm5lbCogaW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVuZGVyU2xpCiAg
ICAgICAgIC8vIFRoaXMgInN0YWdnZXJzIiB0aGUgdGltZSB3aGVuIGVhY2ggRkZUIGhhcHBlbnMg
c28gdGhleSBkb24ndCBhbGwgaGFwcGVuIGF0IHRoZSBzYW1lIHRpbWUKICAgICAgICAgaW50IHJl
bmRlclBoYXNlID0gY29udm9sdmVyUmVuZGVyUGhhc2UgKyBpICogcmVuZGVyU2xpY2VTaXplOwog
Ci0gICAgICAgIE93blB0cjxSZXZlcmJDb252b2x2ZXJTdGFnZT4gc3RhZ2UgPSBhZG9wdFB0cihu
ZXcgUmV2ZXJiQ29udm9sdmVyU3RhZ2UocmVzcG9uc2UsIHRvdGFsUmVzcG9uc2VMZW5ndGgsIHJl
dmVyYlRvdGFsTGF0ZW5jeSwgc3RhZ2VPZmZzZXQsIHN0YWdlU2l6ZSwgZmZ0U2l6ZSwgcmVuZGVy
UGhhc2UsIHJlbmRlclNsaWNlU2l6ZSwgJm1fYWNjdW11bGF0aW9uQnVmZmVyKSk7CisgICAgICAg
IGJvb2wgdXNlRGlyZWN0Q29udm9sdmVyID0gIXN0YWdlT2Zmc2V0OworCisgICAgICAgIE93blB0
cjxSZXZlcmJDb252b2x2ZXJTdGFnZT4gc3RhZ2UgPSBhZG9wdFB0cihuZXcgUmV2ZXJiQ29udm9s
dmVyU3RhZ2UocmVzcG9uc2UsIHRvdGFsUmVzcG9uc2VMZW5ndGgsIHJldmVyYlRvdGFsTGF0ZW5j
eSwgc3RhZ2VPZmZzZXQsIHN0YWdlU2l6ZSwgZmZ0U2l6ZSwgcmVuZGVyUGhhc2UsIHJlbmRlclNs
aWNlU2l6ZSwgJm1fYWNjdW11bGF0aW9uQnVmZmVyLCB1c2VEaXJlY3RDb252b2x2ZXIpKTsKIAog
ICAgICAgICBib29sIGlzQmFja2dyb3VuZFN0YWdlID0gZmFsc2U7CiAKQEAgLTExNCw4ICsxMTYs
MTEgQEAgUmV2ZXJiQ29udm9sdmVyOjpSZXZlcmJDb252b2x2ZXIoQXVkaW9DaGFubmVsKiBpbXB1
bHNlUmVzcG9uc2UsIHNpemVfdCByZW5kZXJTbGkKICAgICAgICAgc3RhZ2VPZmZzZXQgKz0gc3Rh
Z2VTaXplOwogICAgICAgICArK2k7CiAKLSAgICAgICAgLy8gRmlndXJlIG91dCBuZXh0IEZGVCBz
aXplCi0gICAgICAgIGZmdFNpemUgKj0gMjsKKyAgICAgICAgaWYgKCF1c2VEaXJlY3RDb252b2x2
ZXIpIHsKKyAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgbmV4dCBGRlQgc2l6ZQorICAgICAgICAg
ICAgZmZ0U2l6ZSAqPSAyOworICAgICAgICB9CisKICAgICAgICAgaWYgKGhhc1JlYWx0aW1lQ29u
c3RyYWludCAmJiAhaXNCYWNrZ3JvdW5kU3RhZ2UgJiYgZmZ0U2l6ZSA+IG1fbWF4UmVhbHRpbWVG
RlRTaXplKQogICAgICAgICAgICAgZmZ0U2l6ZSA9IG1fbWF4UmVhbHRpbWVGRlRTaXplOwogICAg
ICAgICBpZiAoZmZ0U2l6ZSA+IG1fbWF4RkZUU2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmgKaW5kZXggYzNkMzA5ZmY1NDU3NDkzNzEwYjVl
MDAyNGZmODU3MTg3NGU1NWQ5Zi4uYTdkNjYxOTc2M2Q3YzI4Y2MxYTQ2ZmQwODU3MWEyYTYzODZj
NmUzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29u
dm9sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9s
dmVyLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgUmV2ZXJiQ29udm9sdmVyX2gKIAogI2lu
Y2x1ZGUgIkF1ZGlvQXJyYXkuaCIKKyNpbmNsdWRlICJEaXJlY3RDb252b2x2ZXIuaCIKICNpbmNs
dWRlICJGRlRDb252b2x2ZXIuaCIKICNpbmNsdWRlICJSZXZlcmJBY2N1bXVsYXRpb25CdWZmZXIu
aCIKICNpbmNsdWRlICJSZXZlcmJDb252b2x2ZXJTdGFnZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyU3RhZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyU3RhZ2UuY3BwCmluZGV4IDUz
YmI2NTAwODMxMDY0NzE5MWUwMGE5ZGI5NTlhMDNkYTlmZmVhMmUuLjFkMzVlMjlkZmZkMmVlNmVl
MTg0YmU1ZDZkYjc0YThmZGU1ODVmZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXJTdGFnZS5jcHAKQEAgLTQ0LDE4ICs0NCwyNSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgVmVjdG9yTWF0aDsKIAogUmV2
ZXJiQ29udm9sdmVyU3RhZ2U6OlJldmVyYkNvbnZvbHZlclN0YWdlKGNvbnN0IGZsb2F0KiBpbXB1
bHNlUmVzcG9uc2UsIHNpemVfdCByZXNwb25zZUxlbmd0aCwgc2l6ZV90IHJldmVyYlRvdGFsTGF0
ZW5jeSwgc2l6ZV90IHN0YWdlT2Zmc2V0LCBzaXplX3Qgc3RhZ2VMZW5ndGgsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGZmdFNpemUsIHNpemVfdCBy
ZW5kZXJQaGFzZSwgc2l6ZV90IHJlbmRlclNsaWNlU2l6ZSwgUmV2ZXJiQWNjdW11bGF0aW9uQnVm
ZmVyKiBhY2N1bXVsYXRpb25CdWZmZXIpCi0gICAgOiBtX2ZmdEtlcm5lbChmZnRTaXplKQotICAg
ICwgbV9hY2N1bXVsYXRpb25CdWZmZXIoYWNjdW11bGF0aW9uQnVmZmVyKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBmZnRTaXplLCBzaXplX3QgcmVu
ZGVyUGhhc2UsIHNpemVfdCByZW5kZXJTbGljZVNpemUsIFJldmVyYkFjY3VtdWxhdGlvbkJ1ZmZl
ciogYWNjdW11bGF0aW9uQnVmZmVyLCBib29sIGRpcmVjdE1vZGUpCisgICAgOiBtX2FjY3VtdWxh
dGlvbkJ1ZmZlcihhY2N1bXVsYXRpb25CdWZmZXIpCiAgICAgLCBtX2FjY3VtdWxhdGlvblJlYWRJ
bmRleCgwKQogICAgICwgbV9pbnB1dFJlYWRJbmRleCgwKQogICAgICwgbV9pbXB1bHNlUmVzcG9u
c2VMZW5ndGgocmVzcG9uc2VMZW5ndGgpCisgICAgLCBtX2RpcmVjdE1vZGUoZGlyZWN0TW9kZSkK
IHsKICAgICBBU1NFUlQoaW1wdWxzZVJlc3BvbnNlKTsKICAgICBBU1NFUlQoYWNjdW11bGF0aW9u
QnVmZmVyKTsKLSAgICAKLSAgICBtX2ZmdEtlcm5lbC5kb1BhZGRlZEZGVChpbXB1bHNlUmVzcG9u
c2UgKyBzdGFnZU9mZnNldCwgc3RhZ2VMZW5ndGgpOwotICAgIG1fY29udm9sdmVyID0gYWRvcHRQ
dHIobmV3IEZGVENvbnZvbHZlcihmZnRTaXplKSk7CisKKyAgICBpZiAoIW1fZGlyZWN0TW9kZSkg
eworICAgICAgICBtX2ZmdEtlcm5lbCA9IGFkb3B0UHRyKG5ldyBGRlRGcmFtZShmZnRTaXplKSk7
CisgICAgICAgIG1fZmZ0S2VybmVsLT5kb1BhZGRlZEZGVChpbXB1bHNlUmVzcG9uc2UgKyBzdGFn
ZU9mZnNldCwgc3RhZ2VMZW5ndGgpOworICAgICAgICBtX2ZmdENvbnZvbHZlciA9IGFkb3B0UHRy
KG5ldyBGRlRDb252b2x2ZXIoZmZ0U2l6ZSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZGly
ZWN0S2VybmVsID0gYWRvcHRQdHIobmV3IEF1ZGlvRmxvYXRBcnJheShmZnRTaXplIC8gMikpOwor
ICAgICAgICBtX2RpcmVjdEtlcm5lbC0+Y29weVRvUmFuZ2UoaW1wdWxzZVJlc3BvbnNlICsgc3Rh
Z2VPZmZzZXQsIDAsIGZmdFNpemUgLyAyKTsKKyAgICAgICAgbV9kaXJlY3RDb252b2x2ZXIgPSBh
ZG9wdFB0cihuZXcgRGlyZWN0Q29udm9sdmVyKHJlbmRlclNsaWNlU2l6ZSkpOworICAgIH0KICAg
ICBtX3RlbXBvcmFyeUJ1ZmZlci5hbGxvY2F0ZShyZW5kZXJTbGljZVNpemUpOwogCiAgICAgLy8g
VGhlIGNvbnZvbHV0aW9uIHN0YWdlIGF0IG9mZnNldCBzdGFnZU9mZnNldCBuZWVkcyB0byBoYXZl
IGEgY29ycmVzcG9uZGluZyBkZWxheSB0byBjYW5jZWwgb3V0IHRoZSBvZmZzZXQuCkBAIC03OCw3
ICs4NSw5IEBAIFJldmVyYkNvbnZvbHZlclN0YWdlOjpSZXZlcmJDb252b2x2ZXJTdGFnZShjb25z
dCBmbG9hdCogaW1wdWxzZVJlc3BvbnNlLCBzaXplX3QKICAgICBtX3ByZVJlYWRXcml0ZUluZGV4
ID0gMDsKICAgICBtX2ZyYW1lc1Byb2Nlc3NlZCA9IDA7IC8vIHRvdGFsIGZyYW1lcyBwcm9jZXNz
ZWQgc28gZmFyCiAKLSAgICBtX3ByZURlbGF5QnVmZmVyLmFsbG9jYXRlKG1fcHJlRGVsYXlMZW5n
dGggPCBmZnRTaXplID8gZmZ0U2l6ZSA6IG1fcHJlRGVsYXlMZW5ndGgpOworICAgIHNpemVfdCBk
ZWxheUJ1ZmZlclNpemUgPSBtX3ByZURlbGF5TGVuZ3RoIDwgZmZ0U2l6ZSA/IGZmdFNpemUgOiBt
X3ByZURlbGF5TGVuZ3RoOworICAgIGRlbGF5QnVmZmVyU2l6ZSA9IGRlbGF5QnVmZmVyU2l6ZSA8
IHJlbmRlclNsaWNlU2l6ZSA/IHJlbmRlclNsaWNlU2l6ZSA6IGRlbGF5QnVmZmVyU2l6ZTsKKyAg
ICBtX3ByZURlbGF5QnVmZmVyLmFsbG9jYXRlKGRlbGF5QnVmZmVyU2l6ZSk7CiB9CiAKIHZvaWQg
UmV2ZXJiQ29udm9sdmVyU3RhZ2U6OnByb2Nlc3NJbkJhY2tncm91bmQoUmV2ZXJiQ29udm9sdmVy
KiBjb252b2x2ZXIsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCkBAIC0xMzMsNyArMTQyLDEwIEBA
IHZvaWQgUmV2ZXJiQ29udm9sdmVyU3RhZ2U6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwg
c2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICAgICAgLy8gTm93LCBydW4gdGhlIGNvbnZvbHV0
aW9uIChpbnRvIHRoZSBkZWxheSBidWZmZXIpLgogICAgICAgICAvLyBBbiBleHBlbnNpdmUgRkZU
IHdpbGwgaGFwcGVuIGV2ZXJ5IGZmdFNpemUgLyAyIGZyYW1lcy4KICAgICAgICAgLy8gV2UgcHJv
Y2VzcyBpbi1wbGFjZSBoZXJlLi4uCi0gICAgICAgIG1fY29udm9sdmVyLT5wcm9jZXNzKCZtX2Zm
dEtlcm5lbCwgcHJlRGVsYXllZFNvdXJjZSwgdGVtcG9yYXJ5QnVmZmVyLCBmcmFtZXNUb1Byb2Nl
c3MpOworICAgICAgICBpZiAoIW1fZGlyZWN0TW9kZSkKKyAgICAgICAgICAgIG1fZmZ0Q29udm9s
dmVyLT5wcm9jZXNzKG1fZmZ0S2VybmVsLmdldCgpLCBwcmVEZWxheWVkU291cmNlLCB0ZW1wb3Jh
cnlCdWZmZXIsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
ZGlyZWN0Q29udm9sdmVyLT5wcm9jZXNzKG1fZGlyZWN0S2VybmVsLmdldCgpLCBwcmVEZWxheWVk
U291cmNlLCB0ZW1wb3JhcnlCdWZmZXIsIGZyYW1lc1RvUHJvY2Vzcyk7CiAKICAgICAgICAgLy8g
Tm93IGFjY3VtdWxhdGUgaW50byByZXZlcmIncyBhY2N1bXVsYXRpb24gYnVmZmVyLgogICAgICAg
ICBtX2FjY3VtdWxhdGlvbkJ1ZmZlci0+YWNjdW11bGF0ZSh0ZW1wb3JhcnlCdWZmZXIsIGZyYW1l
c1RvUHJvY2VzcywgJm1fYWNjdW11bGF0aW9uUmVhZEluZGV4LCBtX3Bvc3REZWxheUxlbmd0aCk7
CkBAIC0xNTQsNyArMTY2LDEwIEBAIHZvaWQgUmV2ZXJiQ29udm9sdmVyU3RhZ2U6OnByb2Nlc3Mo
Y29uc3QgZmxvYXQqIHNvdXJjZSwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKIAogdm9pZCBSZXZl
cmJDb252b2x2ZXJTdGFnZTo6cmVzZXQoKQogewotICAgIG1fY29udm9sdmVyLT5yZXNldCgpOwor
ICAgIGlmICghbV9kaXJlY3RNb2RlKQorICAgICAgICBtX2ZmdENvbnZvbHZlci0+cmVzZXQoKTsK
KyAgICBlbHNlCisgICAgICAgIG1fZGlyZWN0Q29udm9sdmVyLT5yZXNldCgpOwogICAgIG1fcHJl
RGVsYXlCdWZmZXIuemVybygpOwogICAgIG1fYWNjdW11bGF0aW9uUmVhZEluZGV4ID0gMDsKICAg
ICBtX2lucHV0UmVhZEluZGV4ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlclN0YWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9SZXZlcmJDb252b2x2ZXJTdGFnZS5oCmluZGV4IDk4MTFiYzYwMzIxNjc2NDYwMGM5
Y2IxNzI1MTdkZWYxNThhMzZkYzguLjljZThkY2FjODc4OWI0ZWUxMTY2ZWJiOWNkNTBkNzFhMTk4
MDFjZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNv
bnZvbHZlclN0YWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJi
Q29udm9sdmVyU3RhZ2UuaApAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBSZXZlcmJBY2N1bXVsYXRpb25CdWZmZXI7CiBjbGFzcyBSZXZlcmJDb252b2x2ZXI7CiBj
bGFzcyBGRlRDb252b2x2ZXI7CitjbGFzcyBEaXJlY3RDb252b2x2ZXI7CiAgICAgCiAvLyBBIFJl
dmVyYkNvbnZvbHZlclN0YWdlIHJlcHJlc2VudHMgdGhlIGNvbnZvbHV0aW9uIGFzc29jaWF0ZWQg
d2l0aCBhIHN1Yi1zZWN0aW9uIG9mIGEgbGFyZ2UgaW1wdWxzZSByZXNwb25zZS4KIC8vIEl0IGlu
Y29ycG9yYXRlcyBhIGRlbGF5IGxpbmUgdG8gYWNjb3VudCBmb3IgdGhlIG9mZnNldCBvZiB0aGUg
c3ViLXNlY3Rpb24gd2l0aGluIHRoZSBsYXJnZXIgaW1wdWxzZSByZXNwb25zZS4KQEAgLTQ1LDgg
KzQ2LDcgQEAgY2xhc3MgUmV2ZXJiQ29udm9sdmVyU3RhZ2UgewogcHVibGljOgogICAgIC8vIHJl
bmRlclBoYXNlIGlzIHVzZWZ1bCB0byBrbm93IHNvIHRoYXQgd2UgY2FuIG1hbmlwdWxhdGUgdGhl
IHByZSB2ZXJzdXMgcG9zdCBkZWxheSBzbyB0aGF0IHN0YWdlcyB3aWxsIHBlcmZvcm0KICAgICAv
LyB0aGVpciBoZWF2eSB3b3JrIChGRlQgcHJvY2Vzc2luZykgb24gZGlmZmVyZW50IHNsaWNlcyB0
byBiYWxhbmNlIHRoZSBsb2FkIGluIGEgcmVhbC10aW1lIHRocmVhZC4KLSAgICBSZXZlcmJDb252
b2x2ZXJTdGFnZShjb25zdCBmbG9hdCogaW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVzcG9uc2VM
ZW5ndGgsIHNpemVfdCByZXZlcmJUb3RhbExhdGVuY3ksIHNpemVfdCBzdGFnZU9mZnNldCwgc2l6
ZV90IHN0YWdlTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBmZnRTaXpl
LCBzaXplX3QgcmVuZGVyUGhhc2UsIHNpemVfdCByZW5kZXJTbGljZVNpemUsIFJldmVyYkFjY3Vt
dWxhdGlvbkJ1ZmZlciogYWNjdW11bGF0aW9uQnVmZmVyKTsKKyAgICBSZXZlcmJDb252b2x2ZXJT
dGFnZShjb25zdCBmbG9hdCogaW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVzcG9uc2VMZW5ndGgs
IHNpemVfdCByZXZlcmJUb3RhbExhdGVuY3ksIHNpemVfdCBzdGFnZU9mZnNldCwgc2l6ZV90IHN0
YWdlTGVuZ3RoLCBzaXplX3QgZmZ0U2l6ZSwgc2l6ZV90IHJlbmRlclBoYXNlLCBzaXplX3QgcmVu
ZGVyU2xpY2VTaXplLCBSZXZlcmJBY2N1bXVsYXRpb25CdWZmZXIqLCBib29sIGRpcmVjdE1vZGUg
PSBmYWxzZSk7CiAKICAgICAvLyBXQVJOSU5HOiBmcmFtZXNUb1Byb2Nlc3MgbXVzdCBiZSBzdWNo
IHRoYXQgaXQgZXZlbmx5IGRpdmlkZXMgdGhlIGRlbGF5IGJ1ZmZlciBzaXplIChzdGFnZV9vZmZz
ZXQpLgogICAgIHZvaWQgcHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBzaXplX3QgZnJhbWVz
VG9Qcm9jZXNzKTsKQEAgLTU5LDggKzU5LDggQEAgcHVibGljOgogICAgIGludCBpbnB1dFJlYWRJ
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRSZWFkSW5kZXg7IH0KIAogcHJpdmF0ZToKLSAg
ICBGRlRGcmFtZSBtX2ZmdEtlcm5lbDsKLSAgICBPd25QdHI8RkZUQ29udm9sdmVyPiBtX2NvbnZv
bHZlcjsKKyAgICBPd25QdHI8RkZURnJhbWU+IG1fZmZ0S2VybmVsOworICAgIE93blB0cjxGRlRD
b252b2x2ZXI+IG1fZmZ0Q29udm9sdmVyOwogCiAgICAgQXVkaW9GbG9hdEFycmF5IG1fcHJlRGVs
YXlCdWZmZXI7CiAKQEAgLTc2LDYgKzc2LDEwIEBAIHByaXZhdGU6CiAgICAgQXVkaW9GbG9hdEFy
cmF5IG1fdGVtcG9yYXJ5QnVmZmVyOwogCiAgICAgc2l6ZV90IG1faW1wdWxzZVJlc3BvbnNlTGVu
Z3RoOworCisgICAgYm9vbCBtX2RpcmVjdE1vZGU7CisgICAgT3duUHRyPEF1ZGlvRmxvYXRBcnJh
eT4gbV9kaXJlY3RLZXJuZWw7CisgICAgT3duUHRyPERpcmVjdENvbnZvbHZlcj4gbV9kaXJlY3RD
b252b2x2ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTE3NGJiNjI5
NTI2ODQwZGIxMjg3N2M0Njk3MjVmM2ZmMjdkNGFjMS4uY2VlNWRkYjk3YzAyOGI3OWExNDBiYmFh
MWZhOWFkMDA4YTEyZmUzYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAzLTE4ICBYaW5n
bmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIENvbnZvbHZlck5v
ZGUgc2hvdWxkIG5vdCBpbmN1ciBwcm9jZXNzaW5nIGxhdGVuY3kKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTY0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmVlZCB0byBjaGVjayB0aGUgaW5pdGlh
bCBzaWxlbnQgcGFydCBiZWNhdXNlIHRoZSBsYXRlbmN5IGlzc3VlIG9mIENvbnZvbHZlck5vZGUg
aXMgZml4ZWQuCisKKyAgICAgICAgKiB3ZWJhdWRpby9jb252b2x1dGlvbi1tb25vLW1vbm8tZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIHdlYmF1ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0
aW5nLmpzOgorICAgICAgICAoY2hlY2tUcmlhbmd1bGFyUHVsc2UpOgorICAgICAgICAoY2hlY2tU
YWlsMSk6CisgICAgICAgIChjaGVja0NvbnZvbHZlZFJlc3VsdC5yZXR1cm4udmFyKToKKyAgICAg
ICAgKGNoZWNrQ29udm9sdmVkUmVzdWx0KToKKwogMjAxMi0wMy0xOCAgRGF2aWQgUmV2ZW1hbiAg
PHJldmVtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEludmFsaWRhdGlvbiBpc3N1ZSB3aGVu
IGNyZWF0aW5nIGJhY2tpbmcgbGF5ZXIgZm9yIGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudC4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8tbW9uby1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlvbi1tb25vLW1vbm8tZXhw
ZWN0ZWQudHh0CmluZGV4IDg3MDVmNjYxYzNhMjg2YzQ4NTczNmNhNDVhNDQzNzUzYTU2YTczNWEu
LjNhZTJhMDQ4NjY4OWQ2NWM0ZWY2ZDYwMzRiNjk1YzdkNmVhMDIyMWUgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8tbW9uby1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLWV4cGVjdGVkLnR4
dApAQCAtMiw3ICsyLDYgQEAgVGVzdHMgQ29udm9sdmVyTm9kZSBwcm9jZXNzaW5nIGEgbW9ubyBj
aGFubmVsIHdpdGggbW9ubyBpbXB1bHNlIHJlc3BvbnNlLgogCiBPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCiAKLVBBU1MgSW5pdGlhbCBsYXRlbmN5IG9mIGNvbnZvbHZlciBpcyBzaWxlbnQuCiBQ
QVNTIFRyaWFuZ3VsYXIgcG9ydGlvbiBvZiBjb252b2x1dGlvbiBpcyBjb3JyZWN0LgogUEFTUyBG
aXJzdCBwYXJ0IG9mIHRhaWwgb2YgY29udm9sdXRpb24gaXMgc3VmZmljaWVudGx5IHNtYWxsLgog
UEFTUyBSZW5kZXJlZCBzaWduYWwgYWZ0ZXIgdGFpbCBvZiBjb252b2x1dGlvbiBpcyBzaWxlbnQu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvY29udm9sdXRpb24t
dGVzdGluZy5qcyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10
ZXN0aW5nLmpzCmluZGV4IGQ3ZWY4ZWE1MWE5N2EzMTM4ZjdkOGY5NzAyZjMyNDZjMWVjOTMwNjcu
LmMyY2FiYTEwNjAxYTIxZThlNzBiY2YwZDZlNDcyNGRjNjUyNDEzNzkgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzCisrKyBi
L0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzCkBA
IC00LDExICs0LDYgQEAgdmFyIHJlbmRlckxlbmd0aFNlY29uZHMgPSA4OwogdmFyIHB1bHNlTGVu
Z3RoU2Vjb25kcyA9IDE7CiB2YXIgcHVsc2VMZW5ndGhGcmFtZXMgPSBwdWxzZUxlbmd0aFNlY29u
ZHMgKiBzYW1wbGVSYXRlOwogCi0vLyBUaGUgY29udm9sdmVyIGhhcyBhIGxhdGVuY3kgb2YgMTI4
IHNhbXBsZXMgaW4gdGhlIGltcGxlbWVudGF0aW9uLgotLy8gV2UgbmVlZCB0byB0YWtlIHRoaXMg
aW50byBhY2NvdW50IHdoZW4gdmVyaWZ5aW5nIHRoZSBvdXRwdXQgb2YgdGhlCi0vLyBjb252b2x2
ZXIuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1NjQuCi12
YXIgY29udm9sdmVEZWxheVNhbXBsZXMgPSAxMjg7Ci0KIGZ1bmN0aW9uIGNyZWF0ZVNxdWFyZVB1
bHNlQnVmZmVyKGNvbnRleHQsIHNhbXBsZUZyYW1lTGVuZ3RoKSB7CiAgICAgdmFyIGF1ZGlvQnVm
ZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgc2FtcGxlRnJhbWVMZW5ndGgsIGNvbnRleHQu
c2FtcGxlUmF0ZSk7CiAKQEAgLTQxLDI3ICszNiw2IEBAIGZ1bmN0aW9uIGNyZWF0ZVRyaWFuZ2xl
UHVsc2VCdWZmZXIoY29udGV4dCwgc2FtcGxlRnJhbWVMZW5ndGgpIHsKICAgICByZXR1cm4gYXVk
aW9CdWZmZXI7CiB9CiAKLS8vIFZlcmlmeSB0aGF0IHRoZSBpbml0aWFsIGxhdGVuY3kgb2YgdGhl
IGNvbnZvbHZlciBpcyBleGFjdGx5IHplcm8uCi0vLyBSZXR1cm4gdHJ1ZSBpZiBzby4KLWZ1bmN0
aW9uIGNoZWNrTGF0ZW5jeShkYXRhKSB7Ci0gICAgdmFyIGlzWmVybyA9IHRydWU7Ci0KLSAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGNvbnZvbHZlRGVsYXlTYW1wbGVzOyArK2kpIHsKLSAgICAgICAg
aWYgKGRhdGFbaV0gIT0gMCkgewotICAgICAgICAgICAgaXNaZXJvID0gZmFsc2U7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChpc1plcm8pIHsKLSAgICAg
ICAgdGVzdFBhc3NlZCgiSW5pdGlhbCBsYXRlbmN5IG9mIGNvbnZvbHZlciBpcyBzaWxlbnQuIik7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGVzdEZhaWxlZCgiSW5pdGlhbCBsYXRlbmN5IG9mIGNv
bnZvbHZlciBpcyBub3Qgc2lsZW50LiIpOwotICAgIH0KLQotICAgIHJldHVybiBpc1plcm87Ci19
Ci0KIGZ1bmN0aW9uIGxvZzEwKHgpIHsKICAgcmV0dXJuIE1hdGgubG9nKHgpL01hdGguTE4xMDsK
IH0KQEAgLTc5LDcgKzUzLDcgQEAgZnVuY3Rpb24gY2hlY2tUcmlhbmd1bGFyUHVsc2UocmVuZGVy
ZWQsIHJlZmVyZW5jZSkgewogICAgIHZhciBtYXhEZWx0YUluZGV4ID0gMDsKIAogICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcmVmZXJlbmNlLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBkaWZm
ID0gcmVuZGVyZWRbaSArIGNvbnZvbHZlRGVsYXlTYW1wbGVzXSAtIHJlZmVyZW5jZVtpXTsKKyAg
ICAgICAgdmFyIGRpZmYgPSByZW5kZXJlZFtpXSAtIHJlZmVyZW5jZVtpXTsKICAgICAgICAgdmFy
IHggPSBNYXRoLmFicyhkaWZmKTsKICAgICAgICAgaWYgKHggPiBtYXhEZWx0YSkgewogICAgICAg
ICAgICAgbWF4RGVsdGEgPSB4OwpAQCAtMTExLDcgKzg1LDcgQEAgZnVuY3Rpb24gY2hlY2tUYWls
MShkYXRhLCByZWZlcmVuY2UsIGJyZWFrcG9pbnQpIHsKICAgICB2YXIgaXNaZXJvID0gdHJ1ZTsK
ICAgICB2YXIgdGFpbDFNYXggPSAwOwogCi0gICAgZm9yICh2YXIgaSA9IHJlZmVyZW5jZS5sZW5n
dGggKyBjb252b2x2ZURlbGF5U2FtcGxlczsgaSA8IHJlZmVyZW5jZS5sZW5ndGggKyBicmVha3Bv
aW50OyArK2kpIHsKKyAgICBmb3IgKHZhciBpID0gcmVmZXJlbmNlLmxlbmd0aDsgaSA8IHJlZmVy
ZW5jZS5sZW5ndGggKyBicmVha3BvaW50OyArK2kpIHsKICAgICAgICAgdmFyIG1hZyA9IE1hdGgu
YWJzKGRhdGFbaV0pOwogICAgICAgICBpZiAobWFnID4gdGFpbDFNYXgpIHsKICAgICAgICAgICAg
IHRhaWwxTWF4ID0gbWFnOwpAQCAtMTczLDExICsxNDcsNiBAQCBmdW5jdGlvbiBjaGVja0NvbnZv
bHZlZFJlc3VsdCh0cmlhbmdsZVB1bHNlKSB7CiAgICAgCiAgICAgICAgIHZhciBzdWNjZXNzID0g
dHJ1ZTsKICAgICAKLSAgICAgICAgLy8gVmVyaWZ5IHRoZSBpbml0aWFsIHBhcnQgaXMgZXhhY3Rs
eSB6ZXJvIGJlY2F1c2Ugb2YgdGhlCi0gICAgICAgIC8vIGxhdGVuY3kgaW4gdGhlIGNvbnZvbHZl
ci4KLQotICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjaGVja0xhdGVuY3kocmVuZGVyZWRE
YXRhKTsKLQogICAgICAgICAvLyBWZXJpZnkgdGhlIHRyaWFuZ3VsYXIgcHVsc2UgaXMgYWN0dWFs
bHkgdHJpYW5ndWxhci4KIAogICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjaGVja1RyaWFu
Z3VsYXJQdWxzZShyZW5kZXJlZERhdGEsIHJlZmVyZW5jZURhdGEpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>