<?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>77856</bug_id>
          
          <creation_ts>2012-02-05 23:29:13 -0800</creation_ts>
          <short_desc>Have the DynamicsCompressorNode support multi-channel data</short_desc>
          <delta_ts>2012-02-22 16:49:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Raymond">rgbbones</reporter>
          <assigned_to name="Raymond">rgbbones</assigned_to>
          <cc>crogers</cc>
    
    <cc>dglazkov</cc>
    
    <cc>kbr</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>549761</commentid>
    <comment_count>0</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-05 23:29:13 -0800</bug_when>
    <thetext>Hi

Current DynamicsCompressorNode only support mono and stereo audio data. need to add the support for multi channel.

And current DynamicsCompressorNode seems do not handle stereo audio data well. when measure the compressor input level, it take the average of left and right channel data as :

  compressorInput = 0.5f * (undelayedL + undelayedR);

While this is not reasonable. suppose left channel and right channel have the same sin wave but with phase difference of PI, then the compressorInput will always be 0, thus lead to wrong compressor gain.

I think it might be better to have

 compressorInput = 0.5f * (abs(undelayedL) + abs(undelayedR));

while, I still think this is not quite reasonable, since the purpose here is to figure out the common gain for both channel so that the sound won&apos;t shift position, at the same time it should also have each channel be compressed correctly. when we support more channels, say 5.1 channels, if only 1 channel has loud volume, the average of all channel will be very low thus this very channel won&apos;t get compressed correctly.

Thus I think

 compressorInput = max(abs(undelayedL), abs(undelayedR)) might be even better.


I would like to provide a patch to handle multiple channels and have this issue fix at the same time. Any comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549768</commentid>
    <comment_count>1</comment_count>
      <attachid>125583</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-05 23:42:50 -0800</bug_when>
    <thetext>Created attachment 125583
compressor result

This attached img show case a stereo sound with sin wave in left and right channel with a PI phase difference.

up part is wave form before compress, down part is wave form after compress. (with audio route: source-&gt;analyser-&gt;compressor-&gt;analyser2-&gt;destination)

In the image the delay should be introduced by compressorNode&apos;s predalay, while you can see the sin wave get wrongly compressed. ( when left and right channel have the same phase, the output will be perfectly compressed)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549769</commentid>
    <comment_count>2</comment_count>
      <attachid>125584</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-05 23:48:19 -0800</bug_when>
    <thetext>Created attachment 125584
compressor result 2

And if use compressorInput = max(abs(left), abs(right)), the compressed result will be perfectly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550182</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-06 12:13:22 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Created an attachment (id=125584) [details]
&gt; compressor result 2
&gt; 
&gt; And if use compressorInput = max(abs(left), abs(right)), the compressed result will be perfectly.

Hi Raymond, so far I&apos;ve tested:
0.5f * (abs(undelayedL) + abs(undelayedR));

which appears to work well on a variety of real-world source material.  Please give me a little time to test your second approach (using max).  I understand your reasoning, but want to be very careful about how the change translates to real-world source material which I&apos;ve been testing with the algorithm for a long time.  I&apos;ll get back with the results...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550420</commentid>
    <comment_count>4</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-06 16:45:43 -0800</bug_when>
    <thetext>
&gt; Hi Raymond, so far I&apos;ve tested:
&gt; 0.5f * (abs(undelayedL) + abs(undelayedR));
&gt; 
&gt; which appears to work well on a variety of real-world source material.  Please give me a little time to test your second approach (using max).  I understand your reasoning, but want to be very careful about how the change translates to real-world source material which I&apos;ve been testing with the algorithm for a long time.  I&apos;ll get back with the results...

Hi Chris

Great! I only test a sin wave (which is too simple for real world case ) and a few music (which I can only say it sounds to me ok, but I don&apos;t know whether they are typical enough to cover the real world case). If you can verify on your source (which I believe are much more complete and typical) that will be really really wonderful ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551819</commentid>
    <comment_count>5</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-07 22:50:31 -0800</bug_when>
    <thetext>&gt; 
&gt; Hi Raymond, so far I&apos;ve tested:
&gt; 0.5f * (abs(undelayedL) + abs(undelayedR));
&gt; 
&gt; which appears to work well on a variety of real-world source material.  Please give me a little time to test your second approach (using max).  I understand your reasoning, but want to be very careful about how the change translates to real-world source material which I&apos;ve been testing with the algorithm for a long time.  I&apos;ll get back with the results...

Hi Chris

I test the 0.5f * (abs(undelayedL) + abs(undelayedR)) approaching and max approach again today.

With 3 scenario

1: L=sin(t) R=sin(t+PI)
2: L=sin(t) R=sin(t+PI/2)
3: L=sin(t) R=0

the 0.5f * (abs(undelayedL) + abs(undelayedR)) not only works for case 1, but not works for case 2 and case 3.

While the max approach works fine for all these 3 cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551821</commentid>
    <comment_count>6</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-07 22:53:07 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; 
&gt; the 0.5f * (abs(undelayedL) + abs(undelayedR)) not only works for case 1, but not works for case 2 and case 3.
&gt; 

sorry, typo, not only-&gt;only</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552281</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-08 10:45:03 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; 
&gt; &gt; Hi Raymond, so far I&apos;ve tested:
&gt; &gt; 0.5f * (abs(undelayedL) + abs(undelayedR));
&gt; &gt; 
&gt; &gt; which appears to work well on a variety of real-world source material.  Please give me a little time to test your second approach (using max).  I understand your reasoning, but want to be very careful about how the change translates to real-world source material which I&apos;ve been testing with the algorithm for a long time.  I&apos;ll get back with the results...
&gt; 
&gt; Hi Chris
&gt; 
&gt; I test the 0.5f * (abs(undelayedL) + abs(undelayedR)) approaching and max approach again today.
&gt; 
&gt; With 3 scenario
&gt; 
&gt; 1: L=sin(t) R=sin(t+PI)
&gt; 2: L=sin(t) R=sin(t+PI/2)
&gt; 3: L=sin(t) R=0
&gt; 
&gt; the 0.5f * (abs(undelayedL) + abs(undelayedR)) not only works for case 1, but not works for case 2 and case 3.
&gt; 
&gt; While the max approach works fine for all these 3 cases.

Hi Raymond, I&apos;ve had a chance to test the max approach on a variety of source material and it seems to work well.  So, this seems fine to me.  I think it should be safe to land, but I will continue listening carefully as the changes go in...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552668</commentid>
    <comment_count>8</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-08 17:21:36 -0800</bug_when>
    <thetext>(In reply to comment #7)

&gt; Hi Raymond, I&apos;ve had a chance to test the max approach on a variety of source material and it seems to work well.  So, this seems fine to me.  I think it should be safe to land, but I will continue listening carefully as the changes go in...

Hi Chris

Thanks, then I will upload a patch to support have the DynamicsCompressorNode to support multi-channel and have the compressorInput caculation changes applied together. btw, Can you take look on Bug https://bugs.webkit.org/show_bug.cgi?id=78057 ? It&apos;s a simple quick fix on preDealy time in DynamicsCompressorNode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552757</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-08 19:04:11 -0800</bug_when>
    <thetext>Thanks Raymond.  By the way I&apos;m also working in this code right now, but I don&apos;t think it will interfere with your changes.  I&apos;m working on adding the threshold, ratio, and knee parameters to adjust the static compression curve.  I have a comment mentioning at least &quot;threshold&quot; here:
https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#DynamicsCompressorNode-section</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552761</commentid>
    <comment_count>10</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-08 19:10:54 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Thanks Raymond.  By the way I&apos;m also working in this code right now, but I don&apos;t think it will interfere with your changes.  I&apos;m working on adding the threshold, ratio, and knee parameters to adjust the static compression curve.  I have a comment mentioning at least &quot;threshold&quot; here:
&gt; https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#DynamicsCompressorNode-section

Hi chris, cool!

The patch I am uploading involve changes in DynamicsCompressorNode, DynamicsCompressor and DynamicsCompressorKernel. These changes are brought due to the fact that after enabling multi channel support these code will works within the scope of AudioBasicProcessorNode. So I rebase the class to it. If it conflict with your changes, I will rebase the code after your commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552763</commentid>
    <comment_count>11</comment_count>
      <attachid>126223</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-08 19:19:11 -0800</bug_when>
    <thetext>Created attachment 126223
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552813</commentid>
    <comment_count>12</comment_count>
      <attachid>126233</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-08 20:47:25 -0800</bug_when>
    <thetext>Created attachment 126233
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552816</commentid>
    <comment_count>13</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-08 20:49:27 -0800</bug_when>
    <thetext>patch updated to rebase on the latest code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552835</commentid>
    <comment_count>14</comment_count>
      <attachid>126233</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-08 21:37:33 -0800</bug_when>
    <thetext>Comment on attachment 126233
Patch

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

Some very early comments here - I&apos;ve just glanced at the patch, but have some concerns about the common case of mixed mono and stereo sources killing filter state in the ZeroPole filters.

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:45
&gt; +    , m_numberOfChannels(0)

Maybe we start off with a default value of 2 for stereo, and then try to keep processing at stereo even if only mono channels are feeding it?  Often, the compressor is used right at the output stage.
I&apos;m wondering what happens in the case of a mixed set of mono and stereo sources (notes being played non-overlapping but frequently) if setNumberOfChannels() is frequently called for values 1 and 2.
The ZeroPole filter &quot;packs&quot; are going to be continually re-built, destroying any filter state in them.  It would be great to avoid &quot;thrashing&quot; them...

&gt; Source/WebCore/platform/audio/DynamicsCompressor.h:96
&gt; +    } ZeroPoleFileterPack4;

spelling nit: ZeroPoleFileterPack4 -&gt; ZeroPoleFilterPack4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552836</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-08 21:38:44 -0800</bug_when>
    <thetext>Also, please look into mac build failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552851</commentid>
    <comment_count>16</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-08 22:00:07 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 126233 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126233&amp;action=review
&gt; 
&gt; Some very early comments here - I&apos;ve just glanced at the patch, but have some concerns about the common case of mixed mono and stereo sources killing filter state in the ZeroPole filters.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:45
&gt; &gt; +    , m_numberOfChannels(0)
&gt; 
&gt; Maybe we start off with a default value of 2 for stereo, and then try to keep processing at stereo even if only mono channels are feeding it?  Often, the compressor is used right at the output stage.
&gt; I&apos;m wondering what happens in the case of a mixed set of mono and stereo sources (notes being played non-overlapping but frequently) if setNumberOfChannels() is frequently called for values 1 and 2.
&gt; The ZeroPole filter &quot;packs&quot; are going to be continually re-built, destroying any filter state in them.  It would be great to avoid &quot;thrashing&quot; them...
&gt; 

Hi Chris,
Very true! we need to reserve the filter state at our best. And I am wondering, maybe, only in the case that when channels count shrink, we need to reserve the remained channels&apos; filter state. e.g.

stereo-&gt;mono, we just remove the extra one instead of rebuilt all of them or reserve both channel untouched. For any way, when a notes is added back later, and changes mono-&gt;stereo, the right channel&apos;s filter&apos;s state is useless, since they are totally different audio.

In the way, we can handle not only stereo&lt;-&gt;mono switching, but also apply to other 5.1 &lt;-&gt; stereo switching etc.

Any comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552864</commentid>
    <comment_count>17</comment_count>
      <attachid>126233</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-08 22:16:32 -0800</bug_when>
    <thetext>Comment on attachment 126233
Patch

Attachment 126233 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11447072</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552871</commentid>
    <comment_count>18</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-08 22:31:53 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #14)
&gt; &gt; (From update of attachment 126233 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126233&amp;action=review
&gt; &gt; 
&gt; &gt; Some very early comments here - I&apos;ve just glanced at the patch, but have some concerns about the common case of mixed mono and stereo sources killing filter state in the ZeroPole filters.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:45
&gt; &gt; &gt; +    , m_numberOfChannels(0)
&gt; &gt; 
&gt; &gt; Maybe we start off with a default value of 2 for stereo, and then try to keep processing at stereo even if only mono channels are feeding it?  Often, the compressor is used right at the output stage.
&gt; &gt; I&apos;m wondering what happens in the case of a mixed set of mono and stereo sources (notes being played non-overlapping but frequently) if setNumberOfChannels() is frequently called for values 1 and 2.
&gt; &gt; The ZeroPole filter &quot;packs&quot; are going to be continually re-built, destroying any filter state in them.  It would be great to avoid &quot;thrashing&quot; them...
&gt; &gt; 
&gt; 
&gt; Hi Chris,
&gt; Very true! we need to reserve the filter state at our best. And I am wondering, maybe, only in the case that when channels count shrink, we need to reserve the remained channels&apos; filter state. e.g.
&gt; 
&gt; stereo-&gt;mono, we just remove the extra one instead of rebuilt all of them or reserve both channel untouched. For any way, when a notes is added back later, and changes mono-&gt;stereo, the right channel&apos;s filter&apos;s state is useless, since they are totally different audio.

That&apos;s not really the way it works, the right-channel filter state technically needs to maintain continuity.  Remember that the time between these transitions from 2 -&gt; 1 -&gt; 2 could be very very small, happening in rapid succession.

&gt; 
&gt; In the way, we can handle not only stereo&lt;-&gt;mono switching, but also apply to other 5.1 &lt;-&gt; stereo switching etc.
&gt; 
&gt; Any comments?

I know you might not like this idea at first, but I propose that the compressor number-of-channels remain fixed at 2 by default, so that if there&apos;s a mixture of mono and stereo notes feeding it (or a combination of mono and stereo coming and going), then it always up-mixes to stereo to avoid the filter thrash.  Then if it&apos;s desired to have the compressor output 6 channels (6.1, etc.) then we can add a way to configure the output channels explicitly (in JavaScript API).  We&apos;re already going to have to have such an API anyway for the ConvolverNode, because its output number-of-channels and matrixing is so interlinked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552875</commentid>
    <comment_count>19</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-08 22:43:31 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; 
&gt; I know you might not like this idea at first, but I propose that the compressor number-of-channels remain fixed at 2 by default, so that if there&apos;s a mixture of mono and stereo notes feeding it (or a combination of mono and stereo coming and going), then it always up-mixes to stereo to avoid the filter thrash.  Then if it&apos;s desired to have the compressor output 6 channels (6.1, etc.) then we can add a way to configure the output channels explicitly (in JavaScript API).  We&apos;re already going to have to have such an API anyway for the ConvolverNode, because its output number-of-channels and matrixing is so interlinked.

OK, Sounds reasonable. I will update the patch later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553648</commentid>
    <comment_count>20</comment_count>
      <attachid>126413</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-09 17:45:22 -0800</bug_when>
    <thetext>Created attachment 126413
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553652</commentid>
    <comment_count>21</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-09 17:53:41 -0800</bug_when>
    <thetext>(In reply to comment #14)

Hi Chris
Patch updated according to your comments.


&gt; 
&gt; Some very early comments here - I&apos;ve just glanced at the patch, but have some concerns about the common case of mixed mono and stereo sources killing filter state in the ZeroPole filters.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:45
&gt; &gt; +    , m_numberOfChannels(0)
&gt; 
&gt; Maybe we start off with a default value of 2 for stereo, and then try to keep processing at stereo even if only mono channels are feeding it?  Often, the compressor is used right at the output stage.

Current patch add the multi-channel support in DynamicsCompressorKernel(full support) and DynamicsCompressor(partly support by switch/case). While limit the channel number to 2 by default in DynamicsCompressorNode. Thus we can easily extend its capability to support other channel layout and at the same time keep the current solution friendly to mono&lt;-&gt;stereo switching case.

&gt; 
&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressor.h:96
&gt; &gt; +    } ZeroPoleFileterPack4;
&gt; 
&gt; spelling nit: ZeroPoleFileterPack4 -&gt; ZeroPoleFilterPack4

Fixed.

And, The mac build issue is due to parameter mis-matching ( unsinged and size_t ) , since DynamicsCompressor no longer subclass from AudioProcessor, this issue is also addressed.

Please take a review again. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553754</commentid>
    <comment_count>22</comment_count>
      <attachid>126413</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-09 19:45:44 -0800</bug_when>
    <thetext>Comment on attachment 126413
Patch

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

Raymond, I&apos;ve added a few comments -- I&apos;ll try to do a more complete review tomorrow, but seems to be basically good

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:114
&gt; +

nit: extra blank lines

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:131
&gt; +    typedef const float* constFloatPtr;

not sure if the typedef is worth it

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:147
&gt; +        ASSERT_NOT_REACHED();

I think we need to be safer here and call destinationBus-&gt;zero() then return early to handle the release build...

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:200
&gt; +    constFloatPtr* inplaceSourceChannels = (constFloatPtr*)destinationChannels;

WebKit style: we can&apos;t have a &quot;normal&quot; C style cast -- but looking closer at this, do we even need a cast?  Normally, it should be OK to pass a non-const pointer to a const pointer argument?

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:281
&gt; +                for (unsigned i = 0; i &lt; numberOfChannels; ++i) {

Any idea what kind of performance penalty (if any) there is for having these inner-loops versus the old code?  Hopefully not too much :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553862</commentid>
    <comment_count>23</comment_count>
      <attachid>126460</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-09 23:06:11 -0800</bug_when>
    <thetext>Created attachment 126460
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553880</commentid>
    <comment_count>24</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-09 23:31:44 -0800</bug_when>
    <thetext>(In reply to comment #22)

Hi Chris

Patch updated according to your comments.

&gt; 
&gt; Raymond, I&apos;ve added a few comments -- I&apos;ll try to do a more complete review tomorrow, but seems to be basically good
&gt; 

Thanks! 

&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:114
&gt; &gt; +
&gt; 
&gt; nit: extra blank lines
&gt; 

Fixed.

&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:131
&gt; &gt; +    typedef const float* constFloatPtr;
&gt; 
&gt; not sure if the typedef is worth it
&gt;

Just try to make the code more readable, but you are right, const float** is also ok. Fixed.
 
&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:147
&gt; &gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; I think we need to be safer here and call destinationBus-&gt;zero() then return early to handle the release build...

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:200
&gt; &gt; +    constFloatPtr* inplaceSourceChannels = (constFloatPtr*)destinationChannels;
&gt; 
&gt; WebKit style: we can&apos;t have a &quot;normal&quot; C style cast -- but looking closer at this, do we even need a cast?  Normally, it should be OK to pass a non-const pointer to a const pointer argument?
&gt; 

Hmm, if it is float * -&gt; const float *, or float** -&gt; float const**, it can be converted implicitly. While from float** p -&gt; const float** p, it can&apos;t, since it&apos;s not p itself need to be cast, but *p need to be cast.

I also tried static_cast and reinterpret_cast here, neither is working. only the C style cast works here.

But, you are right, we should avoid using the C style cast, and even it is working, now I doubt that is it really correct. So I changed the code to assign the value manually to solve this issue.

&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:281
&gt; &gt; +                for (unsigned i = 0; i &lt; numberOfChannels; ++i) {
&gt; 
&gt; Any idea what kind of performance penalty (if any) there is for having these inner-loops versus the old code?  Hopefully not too much :)

I guess it should be ok? Since these calculation itself need to be done anyway, and the loop index overhead is very little ( I am not sure is there any other overhead versus the old code other then that we need to increase the index?) , and also compare to other part of the inner loop code, it is a relative small part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556790</commentid>
    <comment_count>25</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-14 17:10:40 -0800</bug_when>
    <thetext>Hi Chris

Anything else I need to fix on this patch? ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556880</commentid>
    <comment_count>26</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-14 19:35:00 -0800</bug_when>
    <thetext>Hi Raymond, sorry I&apos;ve been late on reviewing this patch.  I&apos;ve been very busy!
I&apos;ll try my best to have a look tomorrow</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558553</commentid>
    <comment_count>27</comment_count>
      <attachid>126460</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-16 14:49:13 -0800</bug_when>
    <thetext>Comment on attachment 126460
Patch

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

Looking good overall!

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests required.

I would just remove this line

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:103
&gt; +        ZeroPole* preFilter = &amp;(m_preFilterPacks[i]-&gt;filters[stageIndex]);

This is just a detail, but I think it&apos;s slightly more elegant to make &quot;preFilter&quot; a reference instead of pointer:

ZeroPole&amp; preFilter = m_preFilterPacks[i]-&gt;filters[stageIndex];

It&apos;s a little less ugly looking

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:110
&gt; +        ZeroPole* postFilter = &amp;(m_postFilterPacks[i]-&gt;filters[stageIndex]);

see above comment about reference instead of pointer

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:126
&gt; +    unsigned numberOfChannels = destinationBus-&gt;numberOfChannels();

Maybe for naming consistency, call this &quot;numberOfDestinationChannels&quot;

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:127
&gt; +    unsigned numberOfSourceChannels = destinationBus-&gt;numberOfChannels();

Wait, shouldn&apos;t this be:

sourceBus-&gt;numberOfChannels()

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:134
&gt; +        sourceChannels[0] = sourceBus-&gt;channel(0)-&gt;data();

What if numberOfSourceChannels (assuming this means sourceBus-&gt;numberOfChannels()) equals 0?

Maybe we need to detect this and exit early (zeroing the destinationBus)

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:138
&gt; +        else

Maybe add simple comment here explaining that in the case of mono input and stereo output, we simply copy the mono channel

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:-183
&gt; -                         destinationR,

I read your comment about troubles casting related to inplaceSourceChannels.
If we do keep this code (using temporary inplaceSourceChannels) at least can we add a comment here (with FIXME) to suggest looking at a more elegant solution than copying into a temporary buffer like this.
I have a feeling there must be a better way (one solution is to just remove the &quot;const&quot; in the DynamicsCompressorKernel::process() method)

&gt; Source/WebCore/platform/audio/DynamicsCompressor.h:96
&gt;      // Emphasis filters.

Maybe could change the comment to:

// Per-channel emphasis filters.

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:57
&gt; +    , m_numberOfChannels(numberOfChannels)

I think we can get rid of m_numberOfChannels (see comments below in setNumberOfChannelsMethod()

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:63
&gt; +        m_preDelayBuffers.append(adoptPtr(new AudioFloatArray(MaxPreDelayFrames)));

This is duplicated code in setNumberOfChannels().

How about simply calling:
setNumberOfChannels(numberOfChannels);

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:73
&gt; +    m_preDelayBuffers.clear();

This isn&apos;t necessary, the destructor will tear down m_preDelayBuffers automatically

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:78
&gt; +    if (numberOfChannels == m_numberOfChannels)

Can we instead check using m_preDelayBuffers.size()?  This avoids needing to keep track of m_numberOfChannels.

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:106
&gt; +                                       float* destinationBuffers[],

When we call this method, we use the word &quot;channel&quot; instead of &quot;buffer&quot;.  Also, I&apos;d like to avoid confusion with the AudioBuffer class, so
I suggest naming these:

sourceChannels and destinationChannels (both in this file and in the header file)

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:124
&gt; +    ASSERT(m_numberOfChannels == numberOfChannels);

maybe can ASSERT(m_preDelayBuffers.size() == numberOfChannels)

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.h:48
&gt; +                 float* destinationBuffers[],

I think better names would be:

sourceChannels
destinationChannels

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.h:74
&gt; +    unsigned m_numberOfChannels;

Can we get rid of this member variable?  See other comments in setNumberOfChannels() method

&gt; Source/WebCore/webaudio/DynamicsCompressorNode.h:54
&gt; +    enum { DefaultNumberOfOutputChannels = 2 };

Any reason this needs to be an enum in the header file?  Could we move this to the .cpp as a static const:

static const unsigned defaultNumberOfChannels = 2;

near the top of the file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558797</commentid>
    <comment_count>28</comment_count>
      <attachid>127494</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-16 18:48:23 -0800</bug_when>
    <thetext>Created attachment 127494
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558804</commentid>
    <comment_count>29</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-16 19:00:40 -0800</bug_when>
    <thetext>(In reply to comment #27)

Hi Chris
Thanks for your review in great detail!
Patch updated according to your review.

&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        No new tests required.
&gt; 
&gt; I would just remove this line

Removed.

&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:103
&gt; &gt; +        ZeroPole* preFilter = &amp;(m_preFilterPacks[i]-&gt;filters[stageIndex]);
&gt; 
&gt; This is just a detail, but I think it&apos;s slightly more elegant to make &quot;preFilter&quot; a reference instead of pointer:
&gt; 
&gt; ZeroPole&amp; preFilter = m_preFilterPacks[i]-&gt;filters[stageIndex];
&gt; 
&gt; It&apos;s a little less ugly looking
&gt; 

All related Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:126
&gt; &gt; +    unsigned numberOfChannels = destinationBus-&gt;numberOfChannels();
&gt; 
&gt; Maybe for naming consistency, call this &quot;numberOfDestinationChannels&quot;

It&apos;s due to the reason that later this numberOfchannels is used for both source and destination channel loops. I add some comments there to describe it.

&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:127
&gt; &gt; +    unsigned numberOfSourceChannels = destinationBus-&gt;numberOfChannels();
&gt; 
&gt; Wait, shouldn&apos;t this be:
&gt; 
&gt; sourceBus-&gt;numberOfChannels()
&gt; 

Oops, Fixed.

&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:134
&gt; &gt; +        sourceChannels[0] = sourceBus-&gt;channel(0)-&gt;data();
&gt; 
&gt; What if numberOfSourceChannels (assuming this means sourceBus-&gt;numberOfChannels()) equals 0?
&gt; 
&gt; Maybe we need to detect this and exit early (zeroing the destinationBus)

It won&apos;t, the Channels number will never be 0, its mini value will be 1, this is assured by the AudioNodeInput.

&gt; 
&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:138
&gt; &gt; +        else
&gt; 
&gt; Maybe add simple comment here explaining that in the case of mono input and stereo output, we simply copy the mono channel

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:-183
&gt; &gt; -                         destinationR,
&gt; 
&gt; I read your comment about troubles casting related to inplaceSourceChannels.
&gt; If we do keep this code (using temporary inplaceSourceChannels) at least can we add a comment here (with FIXME) to suggest looking at a more elegant solution than copying into a temporary buffer like this.
&gt; I have a feeling there must be a better way (one solution is to just remove the &quot;const&quot; in the DynamicsCompressorKernel::process() method)

Ok, I think to remove the const might be the best way at present. Done.

&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressor.h:96
&gt; &gt;      // Emphasis filters.
&gt; 
&gt; Maybe could change the comment to:
&gt; 
&gt; // Per-channel emphasis filters.

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:57
&gt; &gt; +    , m_numberOfChannels(numberOfChannels)
&gt; 
&gt; I think we can get rid of m_numberOfChannels (see comments below in setNumberOfChannelsMethod()

All related fixed.

&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:73
&gt; &gt; +    m_preDelayBuffers.clear();
&gt; 
&gt; This isn&apos;t necessary, the destructor will tear down m_preDelayBuffers automatically

oops. leave out this one. will update patch again.

&gt; 
&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:106
&gt; &gt; +                                       float* destinationBuffers[],
&gt; 
&gt; When we call this method, we use the word &quot;channel&quot; instead of &quot;buffer&quot;.  Also, I&apos;d like to avoid confusion with the AudioBuffer class, so
&gt; I suggest naming these:
&gt; 
&gt; sourceChannels and destinationChannels (both in this file and in the header file)

Quite right! Fixed.

&gt; 
&gt; &gt; Source/WebCore/webaudio/DynamicsCompressorNode.h:54
&gt; &gt; +    enum { DefaultNumberOfOutputChannels = 2 };
&gt; 
&gt; Any reason this needs to be an enum in the header file?  Could we move this to the .cpp as a static const:
&gt; 
&gt; static const unsigned defaultNumberOfChannels = 2;
&gt; 
&gt; near the top of the file

Oh, this is due to that the DynamicCompressorKernel use this approaching to define many thing like : MaxPreDelayFrames,MaxPreDelayFramesMask etc. I try to keep the same approach.

If you think this should be fixed. I will fix them in another patch later? to find out is there any other more need to be fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558806</commentid>
    <comment_count>30</comment_count>
      <attachid>127496</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-16 19:05:27 -0800</bug_when>
    <thetext>Created attachment 127496
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559614</commentid>
    <comment_count>31</comment_count>
      <attachid>127496</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-17 15:55:30 -0800</bug_when>
    <thetext>Comment on attachment 127496
Patch

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

This looks like it&apos;s almost finished - a few comments:

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:104
&gt; +        // Set pre-filter zero and pole to create an emphasis filter.

nit: I&apos;d move this comment up just before line 103

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:138
&gt; +        sourceChannels[0] = sourceBus-&gt;channel(0)-&gt;data();

I understand your comment that AudioNodeInput assures that sourceBus should have at least one channel, but I don&apos;t think we should trust that and make any assumptions.  We should
still protect and be paranoid about that kind of thing.

So, I still suggest doing both an ASSERT and early return (zeroing destinationBus) if sourceBus has 0 channels.  That should probably be somewhere before the switch statement...

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:148
&gt; +        // FIXME : support other layouts.

I wouldn&apos;t use the word &quot;layout&quot; here, but instead &quot;support other number of channels&quot;

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:-183
&gt; -                         destinationR,

It looks like you accidentally deleted the two lines of comments.

&gt; Source/WebCore/webaudio/DynamicsCompressorNode.h:54
&gt; +    enum { DefaultNumberOfOutputChannels = 2 };

Although the DynamicsCompressorKernel uses the &apos;enum&apos; approach, I think it&apos;s slightly against WebKit style (we don&apos;t have to go fix the DynamicsCompressorKernel stuff now).
But for any new code, we should put this in the .cpp file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559615</commentid>
    <comment_count>32</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-17 15:56:28 -0800</bug_when>
    <thetext>FYI, after this patch is landed, I hope to land this one:
https://bugs.webkit.org/show_bug.cgi?id=78937</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559674</commentid>
    <comment_count>33</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-17 17:40:44 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; FYI, after this patch is landed, I hope to land this one:
&gt; https://bugs.webkit.org/show_bug.cgi?id=78937

Okay, Thanks. I am occupied this weekend. I will update this patch as soon as I return to office next Monday morning, Hope this won&apos;t block your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559689</commentid>
    <comment_count>34</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-17 18:47:45 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #32)
&gt; &gt; FYI, after this patch is landed, I hope to land this one:
&gt; &gt; https://bugs.webkit.org/show_bug.cgi?id=78937
&gt; 
&gt; Okay, Thanks. I am occupied this weekend. I will update this patch as soon as I return to office next Monday morning, Hope this won&apos;t block your patch.

No problem, I&apos;m sure it won&apos;t block the other patch.  Have a good weekend!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559973</commentid>
    <comment_count>35</comment_count>
      <attachid>127747</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-19 18:00:11 -0800</bug_when>
    <thetext>Created attachment 127747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559974</commentid>
    <comment_count>36</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-19 18:04:39 -0800</bug_when>
    <thetext>(In reply to comment #31)

Hi Chris
All fixed and patch updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560352</commentid>
    <comment_count>37</comment_count>
      <attachid>127747</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-20 14:10:07 -0800</bug_when>
    <thetext>Comment on attachment 127747
Patch

Clearing flags on attachment: 127747

Committed r108263: &lt;http://trac.webkit.org/changeset/108263&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560353</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-20 14:10:13 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560435</commentid>
    <comment_count>39</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2012-02-20 16:00:18 -0800</bug_when>
    <thetext>Your change broke Chromium builds on Windows. Please fix this ASAP, otherwise I&apos;m going to roll out this change.

http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Win%20Builder/builds/20684/steps/compile/logs/stdio

1&gt;------ Build started: Project: webcore_platform, Configuration: Release Win32 ------
1&gt;Compiling...
1&gt;DynamicsCompressor.cpp
1&gt;..\platform\audio\DynamicsCompressor.cpp(140) : error C2057: expected constant expression
1&gt;..\platform\audio\DynamicsCompressor.cpp(140) : error C2466: cannot allocate an array of constant size 0
1&gt;..\platform\audio\DynamicsCompressor.cpp(140) : error C2133: &apos;sourceChannels&apos; : unknown size
1&gt;..\platform\audio\DynamicsCompressor.cpp(141) : error C2057: expected constant expression
1&gt;..\platform\audio\DynamicsCompressor.cpp(141) : error C2466: cannot allocate an array of constant size 0
1&gt;..\platform\audio\DynamicsCompressor.cpp(141) : error C2133: &apos;destinationChannels&apos; : unknown size
1&gt;Build log was saved at &quot;file://c:\b\build\slave\webkit-win-latest-rel\build\src\build\Release\obj\webcore_platform\BuildLog.htm&quot;
1&gt;webcore_platform - 6 error(s), 0 warning(s)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560436</commentid>
    <comment_count>40</comment_count>
      <attachid>127747</attachid>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2012-02-20 16:03:55 -0800</bug_when>
    <thetext>Comment on attachment 127747
Patch

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

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:141
&gt; +    const float* sourceChannels[numberOfChannels];
&gt; +    float* destinationChannels[numberOfChannels];

This isn&apos;t valid C++ because numberOfChannnels is not a compile-time constant. (I&apos;m rather surprised some compilers doesn&apos;t get angry about this.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560465</commentid>
    <comment_count>41</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2012-02-20 16:57:07 -0800</bug_when>
    <thetext>Reverted r108263 for reason:

Broke Chromium Windows build.

Committed r108271: &lt;http://trac.webkit.org/changeset/108271&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560467</commentid>
    <comment_count>42</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-20 17:00:52 -0800</bug_when>
    <thetext>(In reply to comment #41)
&gt; Reverted r108263 for reason:
&gt; 
&gt; Broke Chromium Windows build.
&gt; 
&gt; Committed r108271: &lt;http://trac.webkit.org/changeset/108271&gt;

oh, sorry, always working on Linux, Never try windows. Will fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560485</commentid>
    <comment_count>43</comment_count>
      <attachid>127876</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-20 17:42:03 -0800</bug_when>
    <thetext>Created attachment 127876
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560486</commentid>
    <comment_count>44</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-20 17:44:36 -0800</bug_when>
    <thetext>(In reply to comment #40)
&gt; (From update of attachment 127747 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127747&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:141
&gt; &gt; +    const float* sourceChannels[numberOfChannels];
&gt; &gt; +    float* destinationChannels[numberOfChannels];
&gt; 
&gt; This isn&apos;t valid C++ because numberOfChannnels is not a compile-time constant. (I&apos;m rather surprised some compilers doesn&apos;t get angry about this.)

Fixed, Hope this one works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561174</commentid>
    <comment_count>45</comment_count>
      <attachid>127876</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-21 13:22:12 -0800</bug_when>
    <thetext>Comment on attachment 127876
Patch

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

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:141
&gt; +    float** destinationChannels = new float* [numberOfChannels];

Unfortunately it&apos;s very much against WebKit style to use raw &quot;new&quot; and &quot;delete&quot; like this.  Here are two solutions I can think of:

1.  Revert back to the old way using simple local arrays, but define a &quot;maxNumberOfChannels&quot; static constant for this class (and add ASSERTs for this constant here and in setNumberOfChannels()
2.  Use WTF::OwnArrayPtr, then the code would be something like this

OwnArrayPtr&lt;float*&gt; destinationChannels = adoptArrayPtr(new float* [numberOfChannels]);

Using (2) then you don&apos;t have to worry about calling delete [] as you have below, since it automatically does this.  The reason WebKit prefers this is to protect against possible leaks which can happen when using raw &quot;new&quot; and &quot;delete&quot; calls.

If using (2) then it probably would be even better to allocate the &quot;sourceChannels&quot; and &quot;destinationChannels&quot; variables as member variables which are initialized in setNumberOfChannels() to avoid the constant allocs/deallocs...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561665</commentid>
    <comment_count>46</comment_count>
      <attachid>128142</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-21 23:31:33 -0800</bug_when>
    <thetext>Created attachment 128142
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561674</commentid>
    <comment_count>47</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-21 23:42:03 -0800</bug_when>
    <thetext>(In reply to comment #45)

&gt; 2.  Use WTF::OwnArrayPtr, then the code would be something like this
&gt; 
&gt; OwnArrayPtr&lt;float*&gt; destinationChannels = adoptArrayPtr(new float* [numberOfChannels]);
&gt; 
&gt; Using (2) then you don&apos;t have to worry about calling delete [] as you have below, since it automatically does this.  The reason WebKit prefers this is to protect against possible leaks which can happen when using raw &quot;new&quot; and &quot;delete&quot; calls.
&gt; 
&gt; If using (2) then it probably would be even better to allocate the &quot;sourceChannels&quot; and &quot;destinationChannels&quot; variables as member variables which are initialized in setNumberOfChannels() to avoid the constant allocs/deallocs...

Thanks, Chris
Patch updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562220</commentid>
    <comment_count>48</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-22 12:05:32 -0800</bug_when>
    <thetext>Thanks Raymond, looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562268</commentid>
    <comment_count>49</comment_count>
      <attachid>128142</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-22 12:41:14 -0800</bug_when>
    <thetext>Comment on attachment 128142
Patch

Clearing flags on attachment: 128142

Committed r108538: &lt;http://trac.webkit.org/changeset/108538&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562269</commentid>
    <comment_count>50</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-22 12:41:21 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562562</commentid>
    <comment_count>51</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-02-22 16:49:58 -0800</bug_when>
    <thetext>(In reply to comment #48)
&gt; Thanks Raymond, looks good.

Chris, Thanks for spending so much time on review this patch. I learn a lot during patching the patch :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>125583</attachid>
            <date>2012-02-05 23:42:50 -0800</date>
            <delta_ts>2012-02-05 23:42:50 -0800</delta_ts>
            <desc>compressor result</desc>
            <filename>compressor.png</filename>
            <type>image/png</type>
            <size>9454</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">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
Bo000khjVFv0rnbLT+EN5ZBGGqM0lp+ivC06u/3aG5qjsfwI5U1jgkMa0zRadGr7qaWx/AjlTSON
OZ2j0aJT208tjeVHKG8aaczpHI0Wndp+amksP0J500hjQm8Ot5T/mF8sOrV97dI4szmkMafTNFp0
arvapXFmf+mQRhpzNJb/mF+6LHqC3fLPD1GbY3emQxppzNFY/vnlbdHZ7dfe0ByN5R9e3jQmOKQx
U6NFp7af2oSmkcacppHGrS06tf3UJjSNNOY0jTRubdGp7ac2oWmkMadpTHCYoNGiU+sNpbFT00hj
Qlt0art2pl0apzWHNOZ0psZOi15lt/yTA9Um2J3mkEYaczSWf3J5W3R2+7U3NEdj+ceWN40JDmlM
1mjRqe2nNqdppDGnaaTRolPbT21O00hjTtNIo0Wntp/anKaRxpymkUaLTm0/tTlNI405TWOCw1qN
Fp3arnYTmkYOc5pGGvst+pN2yz8zXG2t3YT2htKY017FHI1VP8+is+sNTddY/oHlTWOCQxrzNVp0
avupTWsaacxpGidrtOjU9lOb1jTSmNM0TtZo0antpzataaQxp2mcrNGiU9tPbVrTSGNO05jgsEqj
Rae2q92cppHDnKZxssaui3633fJPa6S2ym5Oe0NpzGmvYo7G53+kRWfXG5rrkEYaczSWf1p552u0
6Oz2U5vZd2gs/6jypjHBIY1dNFp0avupzWwaacxpGmdqtOjU9lOb2TTSmNM0ztRo0antpzazaaQx
p2lMcPi8RotObVe7aU0jhzlN40yNFp3arnbTmkYOc5rGmRp7L/oddss/p6na5+2mtTeUxpz2KuZo
fPKnWnR2vaGJGss/pLxpTHBIYy+NFp3afmqTm0Yac5rGaRotOrX91CY3jTTmNI3TNFp0avupTW4a
acxpGqdptOjU9lOb3DTSmNM0Jjh8UqNFp7ar3cymkcOcpnGaxhUW/Sq75Z+wgNon7Wa2N5TGnPYq
5mh85gdbdHa9oVkay398edOY4JDGjhotOrX91OY3jTTmNI1zNFp0avupzW8aacxpGudotOjU9lOb
3zTSmNM0ztFo0antpza/aaQxp2lMcPiMRos+XW1fu8lNI4c5TeMcjess+hm75T97MbXP2E1ubyiN
OU1jjsa7f7ZFp9YbmuKQRhpzNJb/7PLuqNGiT7fbUW2XflVj+Q8ubxoTHNLYV+P0RS//weXdUW2X
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
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>125584</attachid>
            <date>2012-02-05 23:48:19 -0800</date>
            <delta_ts>2012-02-05 23:48:19 -0800</delta_ts>
            <desc>compressor result 2</desc>
            <filename>compressor2.png</filename>
            <type>image/png</type>
            <size>8543</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">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
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126223</attachid>
            <date>2012-02-08 19:19:11 -0800</date>
            <delta_ts>2012-02-08 20:43:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77856-20120209112352.patch</filename>
            <type>text/plain</type>
            <size>25309</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MTYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjc2NmJmNDk5YjU1NDE2
YTE3OWY4MTU4NWE4ZDg1MTYyZGUwNzI1Mi4uMmI1YzAwMTJhNzUxMDQ5Njc2NjY1OWJkNGMwMjc0
OGE3NDQxODg0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEyLTAyLTA4ICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBIYXZlIHRoZSBEeW5h
bWljc0NvbXByZXNzb3JOb2RlIHN1cHBvcnQgbXVsdGktY2hhbm5lbCBkYXRhCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzg1NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyByZXF1aXJl
ZC4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6OkR5bmFtaWNzQ29tcHJlc3Nvcik6
CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6On5EeW5hbWljc0NvbXByZXNz
b3IpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXBy
ZXNzb3I6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29y
Ojp1bmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yOjpz
ZXRFbXBoYXNpc1N0YWdlUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0Nv
bXByZXNzb3I6OnByb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29y
OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6OnNldE51bWJl
ck9mQ2hhbm5lbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nv
ci5oOgorICAgICAgICAoRHluYW1pY3NDb21wcmVzc29yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHlu
YW1pY3NDb21wcmVzc29yS2VybmVsOjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjp+RHluYW1pY3NDb21wcmVzc29y
S2VybmVsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3ND
b21wcmVzc29yS2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmU6
OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0UHJlRGVsYXlUaW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJD
b3JlOjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnJlc2V0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuaDoKKyAgICAgICAgKER5bmFtaWNzQ29t
cHJlc3Nvcktlcm5lbCk6CisgICAgICAgICogd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9k
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3JOb2RlOjpEeW5hbWlj
c0NvbXByZXNzb3JOb2RlKToKKyAgICAgICAgKiB3ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JO
b2RlLmg6CisgICAgICAgIChEeW5hbWljc0NvbXByZXNzb3JOb2RlKToKKwogMjAxMi0wMi0wOCAg
RGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmNwcAppbmRleCBhNTUyMDU3MDVkOTUx
MGJmMjBkOWRiMzU0ODc5Mzk2NWVlMDJlZTFkLi5jYTA3ODRjZWIzNTY5NGY1YmMxYmJjNjNlY2E1
NjFmZjIwZTk0YTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9E
eW5hbWljc0NvbXByZXNzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0R5bmFtaWNzQ29tcHJlc3Nvci5jcHAKQEAgLTQwLDkgKzQwLDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB1c2luZyBuYW1lc3BhY2UgQXVkaW9VdGlsaXRpZXM7CiAgICAgCi1EeW5hbWljc0Nv
bXByZXNzb3I6OkR5bmFtaWNzQ29tcHJlc3Nvcihib29sIGlzU3RlcmVvLCBmbG9hdCBzYW1wbGVS
YXRlKQotICAgIDogbV9pc1N0ZXJlbyhpc1N0ZXJlbykKLSAgICAsIG1fc2FtcGxlUmF0ZShzYW1w
bGVSYXRlKQorRHluYW1pY3NDb21wcmVzc29yOjpEeW5hbWljc0NvbXByZXNzb3IoZmxvYXQgc2Ft
cGxlUmF0ZSkKKyAgICA6IEF1ZGlvUHJvY2Vzc29yKHNhbXBsZVJhdGUpCisgICAgLCBtX251bWJl
ck9mQ2hhbm5lbHMoMCkKICAgICAsIG1fY29tcHJlc3NvcihzYW1wbGVSYXRlKQogewogICAgIC8v
IFVuaW5pdGlhbGl6ZWQgc3RhdGUgLSBmb3IgcGFyYW1ldGVyIHJlY2FsY3VsYXRpb24uCkBAIC01
Myw2ICs1MywyOSBAQCBEeW5hbWljc0NvbXByZXNzb3I6OkR5bmFtaWNzQ29tcHJlc3Nvcihib29s
IGlzU3RlcmVvLCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIGluaXRpYWxpemVQYXJhbWV0ZXJzKCk7
CiB9CiAKK0R5bmFtaWNzQ29tcHJlc3Nvcjo6fkR5bmFtaWNzQ29tcHJlc3NvcigpCit7CisgICAg
aWYgKGlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgdW5pbml0aWFsaXplKCk7Cit9CisKK3ZvaWQg
RHluYW1pY3NDb21wcmVzc29yOjppbml0aWFsaXplKCkKK3sKKyAgICBpZiAoaXNJbml0aWFsaXpl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbXByZXNzb3Iuc2V0TnVtYmVyT2ZDaGFu
bmVscyhtX251bWJlck9mQ2hhbm5lbHMpOworICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVlOworfQor
Cit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6dW5pbml0aWFsaXplKCkKK3sKKyAgICBpZiAoIWlz
SW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbml0aWFsaXplZCA9IGZh
bHNlOworfQorCiB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6aW5pdGlhbGl6ZVBhcmFtZXRlcnMo
KQogewogICAgIC8vIEluaXRpYWxpemVzIGNvbXByZXNzb3IgdG8gZGVmYXVsdCB2YWx1ZXMuCkBA
IC05MywxOCArMTE2LDIyIEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yOjpzZXRFbXBoYXNpc1N0
YWdlUGFyYW1ldGVycyh1bnNpZ25lZCBzdGFnZUluZGV4LCBmbG9hdCBnCiAgICAgZmxvYXQgcjEg
PSBleHBmKC1mMSAqIHBpRmxvYXQpOwogICAgIGZsb2F0IHIyID0gZXhwZigtZjIgKiBwaUZsb2F0
KTsKIAotICAgIC8vIFNldCBwcmUtZmlsdGVyIHplcm8gYW5kIHBvbGUgdG8gY3JlYXRlIGFuIGVt
cGhhc2lzIGZpbHRlci4KLSAgICBtX3ByZUZpbHRlcltzdGFnZUluZGV4XS5zZXRaZXJvKHIxKTsK
LSAgICBtX3ByZUZpbHRlcltzdGFnZUluZGV4XS5zZXRQb2xlKHIyKTsKLSAgICBtX3ByZUZpbHRl
clJbc3RhZ2VJbmRleF0uc2V0WmVybyhyMSk7Ci0gICAgbV9wcmVGaWx0ZXJSW3N0YWdlSW5kZXhd
LnNldFBvbGUocjIpOwotCi0gICAgLy8gU2V0IHBvc3QtZmlsdGVyIHdpdGggemVybyBhbmQgcG9s
ZSByZXZlcnNlZCB0byBjcmVhdGUgdGhlIGRlLWVtcGhhc2lzIGZpbHRlci4KLSAgICAvLyBJZiB0
aGVyZSB3ZXJlIG5vIGNvbXByZXNzb3Iga2VybmVsIGluIGJldHdlZW4sIHRoZXkgd291bGQgY2Fu
Y2VsIGVhY2ggb3RoZXIgb3V0IChhbGxwYXNzIGZpbHRlcikuCi0gICAgbV9wb3N0RmlsdGVyW3N0
YWdlSW5kZXhdLnNldFplcm8ocjIpOwotICAgIG1fcG9zdEZpbHRlcltzdGFnZUluZGV4XS5zZXRQ
b2xlKHIxKTsKLSAgICBtX3Bvc3RGaWx0ZXJSW3N0YWdlSW5kZXhdLnNldFplcm8ocjIpOwotICAg
IG1fcG9zdEZpbHRlclJbc3RhZ2VJbmRleF0uc2V0UG9sZShyMSk7CisgICAgQVNTRVJUKG1fbnVt
YmVyT2ZDaGFubmVscyA9PSBtX3ByZUZpbHRlclBhY2tzLnNpemUoKSk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9udW1iZXJPZkNoYW5uZWxzOyArK2kpIHsKKyAgICAgICAgWmVy
b1BvbGUqIHByZUZpbHRlciA9ICYobV9wcmVGaWx0ZXJQYWNrc1tpXS0+ZmlsdGVyc1tzdGFnZUlu
ZGV4XSk7CisgICAgICAgIC8vIFNldCBwcmUtZmlsdGVyIHplcm8gYW5kIHBvbGUgdG8gY3JlYXRl
IGFuIGVtcGhhc2lzIGZpbHRlci4KKyAgICAgICAgcHJlRmlsdGVyLT5zZXRaZXJvKHIxKTsKKyAg
ICAgICAgcHJlRmlsdGVyLT5zZXRQb2xlKHIyKTsKKworICAgICAgICAvLyBTZXQgcG9zdC1maWx0
ZXIgd2l0aCB6ZXJvIGFuZCBwb2xlIHJldmVyc2VkIHRvIGNyZWF0ZSB0aGUgZGUtZW1waGFzaXMg
ZmlsdGVyLgorICAgICAgICAvLyBJZiB0aGVyZSB3ZXJlIG5vIGNvbXByZXNzb3Iga2VybmVsIGlu
IGJldHdlZW4sIHRoZXkgd291bGQgY2FuY2VsIGVhY2ggb3RoZXIgb3V0IChhbGxwYXNzIGZpbHRl
cikuCisgICAgICAgIFplcm9Qb2xlKiBwb3N0RmlsdGVyID0gJihtX3Bvc3RGaWx0ZXJQYWNrc1tp
XS0+ZmlsdGVyc1tzdGFnZUluZGV4XSk7CisgICAgICAgIHBvc3RGaWx0ZXItPnNldFplcm8ocjIp
OworICAgICAgICBwb3N0RmlsdGVyLT5zZXRQb2xlKHIxKTsKKyAgICB9CisKKwogfQogCiB2b2lk
IER5bmFtaWNzQ29tcHJlc3Nvcjo6c2V0RW1waGFzaXNQYXJhbWV0ZXJzKGZsb2F0IGdhaW4sIGZs
b2F0IGFuY2hvckZyZXEsIGZsb2F0IGZpbHRlclN0YWdlUmF0aW8pCkBAIC0xMTcsMTggKzE0NCwx
NyBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6c2V0RW1waGFzaXNQYXJhbWV0ZXJzKGZsb2F0
IGdhaW4sIGZsb2F0IGFuY2hvckZyZXEsIGZsbwogCiB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6
cHJvY2Vzcyhjb25zdCBBdWRpb0J1cyogc291cmNlQnVzLCBBdWRpb0J1cyogZGVzdGluYXRpb25C
dXMsIHVuc2lnbmVkIGZyYW1lc1RvUHJvY2VzcykKIHsKLSAgICBjb25zdCBmbG9hdCogc291cmNl
TCA9IHNvdXJjZUJ1cy0+Y2hhbm5lbCgwKS0+ZGF0YSgpOwotICAgIGNvbnN0IGZsb2F0KiBzb3Vy
Y2VSOwotCi0gICAgaWYgKHNvdXJjZUJ1cy0+bnVtYmVyT2ZDaGFubmVscygpID4gMSkKLSAgICAg
ICAgc291cmNlUiA9IHNvdXJjZUJ1cy0+Y2hhbm5lbCgxKS0+ZGF0YSgpOwotICAgIGVsc2UKLSAg
ICAgICAgc291cmNlUiA9IHNvdXJjZUw7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyA9
IHNvdXJjZUJ1cy0+bnVtYmVyT2ZDaGFubmVscygpOworICAgIEFTU0VSVChkZXN0aW5hdGlvbkJ1
cy0+bnVtYmVyT2ZDaGFubmVscygpID09IG51bWJlck9mQ2hhbm5lbHMpOwogCi0gICAgQVNTRVJU
KGRlc3RpbmF0aW9uQnVzLT5udW1iZXJPZkNoYW5uZWxzKCkgPT0gMik7CisgICAgdHlwZWRlZiBj
b25zdCBmbG9hdCogY29uc3RGbG9hdFB0cjsKKyAgICBjb25zdEZsb2F0UHRyIHNvdXJjZUNoYW5u
ZWxzW251bWJlck9mQ2hhbm5lbHNdOworICAgIGZsb2F0KiBkZXN0aW5hdGlvbkNoYW5uZWxzW251
bWJlck9mQ2hhbm5lbHNdOwogCi0gICAgZmxvYXQqIGRlc3RpbmF0aW9uTCA9IGRlc3RpbmF0aW9u
QnVzLT5jaGFubmVsKDApLT5tdXRhYmxlRGF0YSgpOwotICAgIGZsb2F0KiBkZXN0aW5hdGlvblIg
PSBkZXN0aW5hdGlvbkJ1cy0+Y2hhbm5lbCgxKS0+bXV0YWJsZURhdGEoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgIHNvdXJj
ZUNoYW5uZWxzW2ldID0gc291cmNlQnVzLT5jaGFubmVsKGkpLT5kYXRhKCk7CisgICAgICAgIGRl
c3RpbmF0aW9uQ2hhbm5lbHNbaV0gPSBkZXN0aW5hdGlvbkJ1cy0+Y2hhbm5lbChpKS0+bXV0YWJs
ZURhdGEoKTsKKyAgICB9CiAKICAgICBmbG9hdCBmaWx0ZXJTdGFnZUdhaW4gPSBwYXJhbWV0ZXJW
YWx1ZShQYXJhbUZpbHRlclN0YWdlR2Fpbik7CiAgICAgZmxvYXQgZmlsdGVyU3RhZ2VSYXRpbyA9
IHBhcmFtZXRlclZhbHVlKFBhcmFtRmlsdGVyU3RhZ2VSYXRpbyk7CkBAIC0xNDQsMTYgKzE3MCwx
NSBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6cHJvY2Vzcyhjb25zdCBBdWRpb0J1cyogc291
cmNlQnVzLCBBdWRpb0J1cyogZGVzdGluYXRpbwogCiAgICAgLy8gQXBwbHkgcHJlLWVtcGhhc2lz
IGZpbHRlci4KICAgICAvLyBOb3RlIHRoYXQgdGhlIGZpbmFsIHRocmVlIHN0YWdlcyBhcmUgY29t
cHV0ZWQgaW4tcGxhY2UgaW4gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KLSAgICBtX3ByZUZpbHRl
clswXS5wcm9jZXNzKHNvdXJjZUwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAg
ICBtX3ByZUZpbHRlclsxXS5wcm9jZXNzKGRlc3RpbmF0aW9uTCwgZGVzdGluYXRpb25MLCBmcmFt
ZXNUb1Byb2Nlc3MpOwotICAgIG1fcHJlRmlsdGVyWzJdLnByb2Nlc3MoZGVzdGluYXRpb25MLCBk
ZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgbV9wcmVGaWx0ZXJbM10ucHJvY2Vz
cyhkZXN0aW5hdGlvbkwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNzKTsKLQotICAgIGlm
IChpc1N0ZXJlbygpKSB7Ci0gICAgICAgIG1fcHJlRmlsdGVyUlswXS5wcm9jZXNzKHNvdXJjZVIs
IGRlc3RpbmF0aW9uUiwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgbV9wcmVGaWx0ZXJSWzFd
LnByb2Nlc3MoZGVzdGluYXRpb25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0g
ICAgICAgIG1fcHJlRmlsdGVyUlsyXS5wcm9jZXNzKGRlc3RpbmF0aW9uUiwgZGVzdGluYXRpb25S
LCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgICAgICBtX3ByZUZpbHRlclJbM10ucHJvY2VzcyhkZXN0
aW5hdGlvblIsIGRlc3RpbmF0aW9uUiwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgIGNvbnN0IGZs
b2F0KiBzb3VyY2VEYXRhID0gc291cmNlQ2hhbm5lbHNbaV07CisgICAgICAgIGZsb2F0KiBkZXN0
aW5hdGlvbkRhdGEgPSBkZXN0aW5hdGlvbkNoYW5uZWxzW2ldOworICAgICAgICBaZXJvUG9sZSog
cHJlRmlsdGVycyA9IG1fcHJlRmlsdGVyUGFja3NbaV0tPmZpbHRlcnM7CisKKyAgICAgICAgcHJl
RmlsdGVyc1swXS5wcm9jZXNzKHNvdXJjZURhdGEsIGRlc3RpbmF0aW9uRGF0YSwgZnJhbWVzVG9Q
cm9jZXNzKTsKKyAgICAgICAgcHJlRmlsdGVyc1sxXS5wcm9jZXNzKGRlc3RpbmF0aW9uRGF0YSwg
ZGVzdGluYXRpb25EYXRhLCBmcmFtZXNUb1Byb2Nlc3MpOworICAgICAgICBwcmVGaWx0ZXJzWzJd
LnByb2Nlc3MoZGVzdGluYXRpb25EYXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vz
cyk7CisgICAgICAgIHByZUZpbHRlcnNbM10ucHJvY2VzcyhkZXN0aW5hdGlvbkRhdGEsIGRlc3Rp
bmF0aW9uRGF0YSwgZnJhbWVzVG9Qcm9jZXNzKTsKICAgICB9CiAKICAgICBmbG9hdCBkYlRocmVz
aG9sZCA9IHBhcmFtZXRlclZhbHVlKFBhcmFtVGhyZXNob2xkKTsKQEAgLTE3NywxMCArMjAyLDEw
IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yOjpwcm9jZXNzKGNvbnN0IEF1ZGlvQnVzKiBzb3Vy
Y2VCdXMsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvCiAKICAgICAvLyBBcHBseSBjb21wcmVzc2lvbiB0
byB0aGUgcHJlLWZpbHRlcmVkIHNpZ25hbC4KICAgICAvLyBUaGUgcHJvY2Vzc2luZyBpcyBwZXJm
b3JtZWQgaW4gcGxhY2UuCi0gICAgbV9jb21wcmVzc29yLnByb2Nlc3MoZGVzdGluYXRpb25MLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uTCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0aW5hdGlvblIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRp
b25SLAorICAgIGNvbnN0RmxvYXRQdHIqIGlucGxhY2VTb3VyY2VDaGFubmVscyA9IChjb25zdEZs
b2F0UHRyKilkZXN0aW5hdGlvbkNoYW5uZWxzOworICAgIG1fY29tcHJlc3Nvci5wcm9jZXNzKGlu
cGxhY2VTb3VyY2VDaGFubmVscywKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlv
bkNoYW5uZWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mQ2hhbm5lbHMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzVG9Qcm9jZXNzLAogCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGJUaHJlc2hvbGQsCkBAIC0xOTgsMTYgKzIyMywxNCBAQCB2b2lkIER5bmFt
aWNzQ29tcHJlc3Nvcjo6cHJvY2Vzcyhjb25zdCBBdWRpb0J1cyogc291cmNlQnVzLCBBdWRpb0J1
cyogZGVzdGluYXRpbwogICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAKICAgICAvLyBBcHBs
eSBkZS1lbXBoYXNpcyBmaWx0ZXIuCi0gICAgbV9wb3N0RmlsdGVyWzBdLnByb2Nlc3MoZGVzdGlu
YXRpb25MLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgbV9wb3N0RmlsdGVy
WzFdLnByb2Nlc3MoZGVzdGluYXRpb25MLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7
Ci0gICAgbV9wb3N0RmlsdGVyWzJdLnByb2Nlc3MoZGVzdGluYXRpb25MLCBkZXN0aW5hdGlvbkws
IGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgbV9wb3N0RmlsdGVyWzNdLnByb2Nlc3MoZGVzdGluYXRp
b25MLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0KLSAgICBpZiAoaXNTdGVyZW8o
KSkgewotICAgICAgICBtX3Bvc3RGaWx0ZXJSWzBdLnByb2Nlc3MoZGVzdGluYXRpb25SLCBkZXN0
aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgICAgIG1fcG9zdEZpbHRlclJbMV0ucHJv
Y2VzcyhkZXN0aW5hdGlvblIsIGRlc3RpbmF0aW9uUiwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAg
ICAgbV9wb3N0RmlsdGVyUlsyXS5wcm9jZXNzKGRlc3RpbmF0aW9uUiwgZGVzdGluYXRpb25SLCBm
cmFtZXNUb1Byb2Nlc3MpOwotICAgICAgICBtX3Bvc3RGaWx0ZXJSWzNdLnByb2Nlc3MoZGVzdGlu
YXRpb25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgeworICAgICAgICBmbG9hdCogZGVz
dGluYXRpb25EYXRhID0gZGVzdGluYXRpb25DaGFubmVsc1tpXTsKKyAgICAgICAgWmVyb1BvbGUq
IHBvc3RGaWx0ZXJzID0gbV9wb3N0RmlsdGVyUGFja3NbaV0tPmZpbHRlcnM7CisKKyAgICAgICAg
cG9zdEZpbHRlcnNbMF0ucHJvY2VzcyhkZXN0aW5hdGlvbkRhdGEsIGRlc3RpbmF0aW9uRGF0YSwg
ZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICAgICAgcG9zdEZpbHRlcnNbMV0ucHJvY2VzcyhkZXN0aW5h
dGlvbkRhdGEsIGRlc3RpbmF0aW9uRGF0YSwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICAgICAgcG9z
dEZpbHRlcnNbMl0ucHJvY2VzcyhkZXN0aW5hdGlvbkRhdGEsIGRlc3RpbmF0aW9uRGF0YSwgZnJh
bWVzVG9Qcm9jZXNzKTsKKyAgICAgICAgcG9zdEZpbHRlcnNbM10ucHJvY2VzcyhkZXN0aW5hdGlv
bkRhdGEsIGRlc3RpbmF0aW9uRGF0YSwgZnJhbWVzVG9Qcm9jZXNzKTsKICAgICB9CiB9CiAKQEAg
LTIxNywxNiArMjQwLDM0IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yOjpyZXNldCgpCiAgICAg
bV9sYXN0QW5jaG9yID0gLTE7CiAgICAgbV9sYXN0RmlsdGVyU3RhZ2VHYWluID0gLTE7CiAKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICAgIG1fcHJlRmlsdGVy
W2ldLnJlc2V0KCk7Ci0gICAgICAgIG1fcHJlRmlsdGVyUltpXS5yZXNldCgpOwotICAgICAgICBt
X3Bvc3RGaWx0ZXJbaV0ucmVzZXQoKTsKLSAgICAgICAgbV9wb3N0RmlsdGVyUltpXS5yZXNldCgp
OworICAgIGZvciAodW5zaWduZWQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBtX251bWJlck9mQ2hh
bm5lbHM7ICsrY2hhbm5lbCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIHN0YWdlSW5kZXggPSAw
OyBzdGFnZUluZGV4IDwgNDsgKytzdGFnZUluZGV4KSB7CisgICAgICAgICAgICBtX3ByZUZpbHRl
clBhY2tzW2NoYW5uZWxdLT5maWx0ZXJzW3N0YWdlSW5kZXhdLnJlc2V0KCk7CisgICAgICAgICAg
ICBtX3Bvc3RGaWx0ZXJQYWNrc1tjaGFubmVsXS0+ZmlsdGVyc1tzdGFnZUluZGV4XS5yZXNldCgp
OworICAgICAgICB9CiAgICAgfQogCiAgICAgbV9jb21wcmVzc29yLnJlc2V0KCk7CiB9CiAKK3Zv
aWQgRHluYW1pY3NDb21wcmVzc29yOjpzZXROdW1iZXJPZkNoYW5uZWxzKHVuc2lnbmVkIG51bWJl
ck9mQ2hhbm5lbHMpCit7CisgICAgaWYgKG51bWJlck9mQ2hhbm5lbHMgPT0gbV9udW1iZXJPZkNo
YW5uZWxzKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIWlzSW5pdGlhbGl6ZWQoKSk7
CisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkpIHsKKyAgICAgICAgbV9wcmVGaWx0ZXJQYWNrcy5j
bGVhcigpOworICAgICAgICBtX3Bvc3RGaWx0ZXJQYWNrcy5jbGVhcigpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgICAg
ICBtX3ByZUZpbHRlclBhY2tzLmFwcGVuZChhZG9wdFB0cihuZXcgWmVyb1BvbGVGaWxldGVyUGFj
azQoKSkpOworICAgICAgICAgICAgbV9wb3N0RmlsdGVyUGFja3MuYXBwZW5kKGFkb3B0UHRyKG5l
dyBaZXJvUG9sZUZpbGV0ZXJQYWNrNCgpKSk7CisgICAgICAgIH0KKworICAgICAgICBtX251bWJl
ck9mQ2hhbm5lbHMgPSBudW1iZXJPZkNoYW5uZWxzOworICAgIH0KK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmgKaW5kZXggZTAxMTVl
ZTI3M2U0MzBmOWMyOGY1NjRiZmM5Y2M0NGViYzY2YzY5ZS4uNzllMWE3YzRjODk2OTY1ZmIxNjJi
MjI4NjU4Nzc0NGE0Mzg0MDM3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgRHlu
YW1pY3NDb21wcmVzc29yX2gKIAogI2luY2x1ZGUgIkF1ZGlvQXJyYXkuaCIKKyNpbmNsdWRlICJB
dWRpb1Byb2Nlc3Nvci5oIgogI2luY2x1ZGUgIkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oIgog
I2luY2x1ZGUgIlplcm9Qb2xlLmgiCiAKQEAgLTQyLDcgKzQzLDcgQEAgY2xhc3MgQXVkaW9CdXM7
CiAvLyBvZiB0aGUgbG91ZGVzdCBwYXJ0cyBvZiB0aGUgc2lnbmFsIGFuZCByYWlzZXMgdGhlIHZv
bHVtZSBvZiB0aGUgc29mdGVzdCBwYXJ0cywKIC8vIG1ha2luZyB0aGUgc291bmQgcmljaGVyLCBm
dWxsZXIsIGFuZCBtb3JlIGNvbnRyb2xsZWQuCiAKLWNsYXNzIER5bmFtaWNzQ29tcHJlc3NvciB7
CitjbGFzcyBEeW5hbWljc0NvbXByZXNzb3IgOiBwdWJsaWMgQXVkaW9Qcm9jZXNzb3IgewogcHVi
bGljOgogICAgIGVudW0gewogICAgICAgICBQYXJhbVRocmVzaG9sZCwKQEAgLTYyLDM3ICs2Myw0
MSBAQCBwdWJsaWM6CiAgICAgICAgIFBhcmFtTGFzdAogICAgIH07CiAKLSAgICBEeW5hbWljc0Nv
bXByZXNzb3IoYm9vbCBpc1N0ZXJlbywgZmxvYXQgc2FtcGxlUmF0ZSk7CisgICAgRHluYW1pY3ND
b21wcmVzc29yKGZsb2F0IHNhbXBsZVJhdGUpOworICAgIH5EeW5hbWljc0NvbXByZXNzb3IoKTsK
IAotICAgIHZvaWQgcHJvY2Vzcyhjb25zdCBBdWRpb0J1cyogc291cmNlQnVzLCBBdWRpb0J1cyog
ZGVzdGluYXRpb25CdXMsIHVuc2lnbmVkIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgdm9pZCByZXNl
dCgpOworICAgIC8vIEF1ZGlvUHJvY2Vzc29yIG1ldGhvZHMKKyAgICB2aXJ0dWFsIHZvaWQgaW5p
dGlhbGl6ZSgpOworICAgIHZpcnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcHJvY2Vzcyhjb25zdCBBdWRpb0J1cyogc291cmNlQnVzLCBBdWRpb0J1cyogZGVzdGlu
YXRpb25CdXMsIHVuc2lnbmVkIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHJl
c2V0KCk7CisgICAgdmlydHVhbCB2b2lkIHNldE51bWJlck9mQ2hhbm5lbHModW5zaWduZWQpOwog
CiAgICAgZmxvYXQgcGFyYW1ldGVyVmFsdWUodW5zaWduZWQgcGFyYW1ldGVySUQpOwogCi0gICAg
Ym9vbCBpc1N0ZXJlbygpIGNvbnN0IHsgcmV0dXJuIG1faXNTdGVyZW87IH0KLSAgICBmbG9hdCBz
YW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9CiAgICAgZmxvYXQgbnlx
dWlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZSAvIDI7IH0KIAogcHJvdGVjdGVkOgor
ICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZDaGFubmVsczsKKwogICAgIC8vIG1fcGFyYW1ldGVycyBo
b2xkcyB0aGUgdHdlYWthYmxlIGNvbXByZXNzb3IgcGFyYW1ldGVycy4KICAgICAvLyBGSVhNRTog
ZXhwb3NlIHNvbWUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IG9uZXMgKHN1Y2ggYXMgdGhyZXNob2xk
LCBhdHRhY2ssIHJlbGVhc2UpCiAgICAgLy8gYXMgRHluYW1pY3NDb21wcmVzc29yTm9kZSBhdHRy
aWJ1dGVzLgogICAgIGZsb2F0IG1fcGFyYW1ldGVyc1tQYXJhbUxhc3RdOwogICAgIHZvaWQgaW5p
dGlhbGl6ZVBhcmFtZXRlcnMoKTsKIAotICAgIGJvb2wgbV9pc1N0ZXJlbzsKLSAgICBmbG9hdCBt
X3NhbXBsZVJhdGU7Ci0KICAgICAvLyBFbXBoYXNpcyBmaWx0ZXIgY29udHJvbHMuCiAgICAgZmxv
YXQgbV9sYXN0RmlsdGVyU3RhZ2VSYXRpbzsKICAgICBmbG9hdCBtX2xhc3RBbmNob3I7CiAgICAg
ZmxvYXQgbV9sYXN0RmlsdGVyU3RhZ2VHYWluOwogCisgICAgdHlwZWRlZiBzdHJ1Y3QgeworICAg
ICAgICBaZXJvUG9sZSBmaWx0ZXJzWzRdOworICAgIH0gWmVyb1BvbGVGaWxldGVyUGFjazQ7CisK
ICAgICAvLyBFbXBoYXNpcyBmaWx0ZXJzLgotICAgIFplcm9Qb2xlIG1fcHJlRmlsdGVyWzRdOwot
ICAgIFplcm9Qb2xlIG1fcHJlRmlsdGVyUls0XTsKLSAgICBaZXJvUG9sZSBtX3Bvc3RGaWx0ZXJb
NF07Ci0gICAgWmVyb1BvbGUgbV9wb3N0RmlsdGVyUls0XTsKKyAgICBWZWN0b3I8T3duUHRyPFpl
cm9Qb2xlRmlsZXRlclBhY2s0PiA+IG1fcHJlRmlsdGVyUGFja3M7CisgICAgVmVjdG9yPE93blB0
cjxaZXJvUG9sZUZpbGV0ZXJQYWNrND4gPiBtX3Bvc3RGaWx0ZXJQYWNrczsKIAogICAgIHZvaWQg
c2V0RW1waGFzaXNTdGFnZVBhcmFtZXRlcnModW5zaWduZWQgc3RhZ2VJbmRleCwgZmxvYXQgZ2Fp
biwgZmxvYXQgbm9ybWFsaXplZEZyZXF1ZW5jeSAvKiAwIC0+IDEgKi8pOwogICAgIHZvaWQgc2V0
RW1waGFzaXNQYXJhbWV0ZXJzKGZsb2F0IGdhaW4sIGZsb2F0IGFuY2hvckZyZXEsIGZsb2F0IGZp
bHRlclN0YWdlUmF0aW8pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAKaW5kZXggYTdhNGMxMjEyNzUyMDJl
Y2YzYmFiMmUxNWUwNWZjYzRiNGFkYTBmOS4uZjQ3YjA5MTY2Y2NkYjI3MGEyZThmMjY2OTcyOTI0
YTgyZjA0ZDI0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHlu
YW1pY3NDb21wcmVzc29yS2VybmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwCkBAIC01NCw5ICs1NCw4IEBAIHN0YXRp
YyBmbG9hdCBzYXR1cmF0ZShmbG9hdCB4LCBmbG9hdCBrKQogCiBEeW5hbWljc0NvbXByZXNzb3JL
ZXJuZWw6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbChmbG9hdCBzYW1wbGVSYXRlKQogICAgIDog
bV9zYW1wbGVSYXRlKHNhbXBsZVJhdGUpCisgICAgLCBtX251bWJlck9mQ2hhbm5lbHMoMCkKICAg
ICAsIG1fbGFzdFByZURlbGF5RnJhbWVzKERlZmF1bHRQcmVEZWxheUZyYW1lcykKLSAgICAsIG1f
cHJlRGVsYXlCdWZmZXJMKE1heFByZURlbGF5RnJhbWVzKQotICAgICwgbV9wcmVEZWxheUJ1ZmZl
clIoTWF4UHJlRGVsYXlGcmFtZXMpCiAgICAgLCBtX3ByZURlbGF5UmVhZEluZGV4KDApCiAgICAg
LCBtX3ByZURlbGF5V3JpdGVJbmRleChEZWZhdWx0UHJlRGVsYXlGcmFtZXMpCiB7CkBAIC02Niw2
ICs2NSwyMyBAQCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OkR5bmFtaWNzQ29tcHJlc3Nvcktl
cm5lbChmbG9hdCBzYW1wbGVSYXRlKQogICAgIG1fbWV0ZXJpbmdSZWxlYXNlSyA9IGRpc2NyZXRl
VGltZUNvbnN0YW50Rm9yU2FtcGxlUmF0ZShtZXRlcmluZ1JlbGVhc2VUaW1lQ29uc3RhbnQsIHNh
bXBsZVJhdGUpOwogfQogCitEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6On5EeW5hbWljc0NvbXBy
ZXNzb3JLZXJuZWwoKQoreworICAgIG1fcHJlRGVsYXlCdWZmZXJzLmNsZWFyKCk7Cit9CisKK3Zv
aWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKHVuc2lnbmVk
IG51bWJlck9mQ2hhbm5lbHMpCit7CisgICAgaWYgKG51bWJlck9mQ2hhbm5lbHMgPT0gbV9udW1i
ZXJPZkNoYW5uZWxzKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByZURlbGF5QnVmZmVycy5j
bGVhcigpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyAr
K2kpCisgICAgICAgIG1fcHJlRGVsYXlCdWZmZXJzLmFwcGVuZChhZG9wdFB0cihuZXcgQXVkaW9G
bG9hdEFycmF5KE1heFByZURlbGF5RnJhbWVzKSkpOworCisgICAgbV9udW1iZXJPZkNoYW5uZWxz
PSBudW1iZXJPZkNoYW5uZWxzOworfQorCiB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6
c2V0UHJlRGVsYXlUaW1lKGZsb2F0IHByZURlbGF5VGltZSkKIHsKICAgICAvLyBSZS1jb25maWd1
cmUgbG9vay1haGVhZCBzZWN0aW9uIHByZS1kZWxheSBpZiBkZWxheSB0aW1lIGhhcyBjaGFuZ2Vk
LgpAQCAtNzUsMTcgKzkxLDE3IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpzZXRQ
cmVEZWxheVRpbWUoZmxvYXQgcHJlRGVsYXlUaW1lKQogICAgICAgICAKICAgICBpZiAobV9sYXN0
UHJlRGVsYXlGcmFtZXMgIT0gcHJlRGVsYXlGcmFtZXMpIHsKICAgICAgICAgbV9sYXN0UHJlRGVs
YXlGcmFtZXMgPSBwcmVEZWxheUZyYW1lczsKLSAgICAgICAgbV9wcmVEZWxheUJ1ZmZlckwuemVy
bygpOwotICAgICAgICBtX3ByZURlbGF5QnVmZmVyUi56ZXJvKCk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3ByZURlbGF5QnVmZmVycy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIG1fcHJlRGVsYXlCdWZmZXJzW2ldLT56ZXJvKCk7CisKICAgICAgICAgbV9wcmVEZWxheVJl
YWRJbmRleCA9IDA7CiAgICAgICAgIG1fcHJlRGVsYXlXcml0ZUluZGV4ID0gcHJlRGVsYXlGcmFt
ZXM7CiAgICAgfQogfQogCi12b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cHJvY2Vzcyhj
b25zdCBmbG9hdCogc291cmNlTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0KiBkZXN0aW5hdGlvbkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBmbG9hdCogc291cmNlUiwgLyogc3RlcmVvLWxpbmtlZCAqLwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uUiwKK3Zv
aWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2VC
dWZmZXJzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCog
ZGVzdGluYXRpb25CdWZmZXJzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVzVG9Qcm9jZXNzLAogCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBkYlRocmVzaG9sZCwKQEAgLTEwMiw3ICsx
MTgsOCBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9h
dCogc291cmNlTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0
IHJlbGVhc2Vab25lNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQog
ewotICAgIGJvb2wgaXNTdGVyZW8gPSBkZXN0aW5hdGlvblI7CisgICAgQVNTRVJUKG1fbnVtYmVy
T2ZDaGFubmVscyA9PSBudW1iZXJPZkNoYW5uZWxzKTsKKwogICAgIGZsb2F0IHNhbXBsZVJhdGUg
PSB0aGlzLT5zYW1wbGVSYXRlKCk7CiAKICAgICBmbG9hdCBkcnlNaXggPSAxIC0gZWZmZWN0Qmxl
bmQ7CkBAIC0xNjQsNiArMTgxLDcgQEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnBy
b2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZUwsCiAKICAgICBjb25zdCBpbnQgbkRpdmlzaW9ucyA9
IGZyYW1lc1RvUHJvY2VzcyAvIG5EaXZpc2lvbkZyYW1lczsKIAorICAgIHVuc2lnbmVkIGZyYW1l
SW5kZXggPSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkRpdmlzaW9uczsgKytpKSB7CiAg
ICAgICAgIC8vIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogICAgICAgICAvLyBD
YWxjdWxhdGUgZGVzaXJlZCBnYWluCkBAIC0yNDcsOCArMjY1LDYgQEAgdm9pZCBEeW5hbWljc0Nv
bXByZXNzb3JLZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZUwsCiAgICAgICAgIC8v
IH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGZsb2F0KiBkZWxheUJ1ZmZlckwgPSBtX3ByZURlbGF5QnVmZmVyTC5kYXRhKCk7Ci0gICAg
ICAgICAgICBmbG9hdCogZGVsYXlCdWZmZXJSID0gbV9wcmVEZWxheUJ1ZmZlclIuZGF0YSgpOwog
ICAgICAgICAgICAgaW50IHByZURlbGF5UmVhZEluZGV4ID0gbV9wcmVEZWxheVJlYWRJbmRleDsK
ICAgICAgICAgICAgIGludCBwcmVEZWxheVdyaXRlSW5kZXggPSBtX3ByZURlbGF5V3JpdGVJbmRl
eDsKICAgICAgICAgICAgIGZsb2F0IGRldGVjdG9yQXZlcmFnZSA9IG1fZGV0ZWN0b3JBdmVyYWdl
OwpAQCAtMjU2LDMyICsyNzIsMTkgQEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnBy
b2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZUwsCiAKICAgICAgICAgICAgIGludCBsb29wRnJhbWVz
ID0gbkRpdmlzaW9uRnJhbWVzOwogICAgICAgICAgICAgd2hpbGUgKGxvb3BGcmFtZXMtLSkgewot
ICAgICAgICAgICAgICAgIGZsb2F0IGNvbXByZXNzb3JJbnB1dDsKLSAgICAgICAgICAgICAgICBm
bG9hdCBpbnB1dEw7Ci0gICAgICAgICAgICAgICAgZmxvYXQgaW5wdXRSID0gMDsKKyAgICAgICAg
ICAgICAgICBmbG9hdCBjb21wcmVzc29ySW5wdXQgPSAwOwogCiAgICAgICAgICAgICAgICAgLy8g
UHJlZGVsYXkgc2lnbmFsLCBjb21wdXRpbmcgY29tcHJlc3Npb24gYW1vdW50IGZyb20gdW4tZGVs
YXllZCB2ZXJzaW9uLgotICAgICAgICAgICAgICAgIGlmIChpc1N0ZXJlbykgewotICAgICAgICAg
ICAgICAgICAgICBmbG9hdCB1bmRlbGF5ZWRMID0gKnNvdXJjZUwrKzsKLSAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgdW5kZWxheWVkUiA9ICpzb3VyY2VSKys7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgY29tcHJlc3NvcklucHV0ID0gMC41ZiAqICh1bmRlbGF5ZWRMICsgdW5kZWxheWVkUik7Ci0K
LSAgICAgICAgICAgICAgICAgICAgaW5wdXRMID0gZGVsYXlCdWZmZXJMW3ByZURlbGF5UmVhZElu
ZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgaW5wdXRSID0gZGVsYXlCdWZmZXJSW3ByZURlbGF5
UmVhZEluZGV4XTsKLQotICAgICAgICAgICAgICAgICAgICBkZWxheUJ1ZmZlckxbcHJlRGVsYXlX
cml0ZUluZGV4XSA9IHVuZGVsYXllZEw7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGF5QnVmZmVy
UltwcmVEZWxheVdyaXRlSW5kZXhdID0gdW5kZWxheWVkUjsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBjb21wcmVzc29ySW5wdXQgPSAqc291cmNlTCsrOwot
Ci0gICAgICAgICAgICAgICAgICAgIGlucHV0TCA9IGRlbGF5QnVmZmVyTFtwcmVEZWxheVJlYWRJ
bmRleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlbGF5QnVmZmVyTFtwcmVEZWxheVdyaXRlSW5k
ZXhdID0gY29tcHJlc3NvcklucHV0OworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgZmxv
YXQqIGRlbGF5QnVmZmVyID0gbV9wcmVEZWxheUJ1ZmZlcnNbaV0tPmRhdGEoKTsKKyAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgdW5kZWxheWVkU291cmNlID0gc291cmNlQnVmZmVyc1tpXVtmcmFt
ZUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgZGVsYXlCdWZmZXJbcHJlRGVsYXlXcml0ZUlu
ZGV4XSA9IHVuZGVsYXllZFNvdXJjZTsKKworICAgICAgICAgICAgICAgICAgICBmbG9hdCBhYnNV
bmRlbGF5ZWRTb3VyY2UgPSB1bmRlbGF5ZWRTb3VyY2UgPiAwID8gdW5kZWxheWVkU291cmNlIDog
LXVuZGVsYXllZFNvdXJjZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXByZXNzb3JJbnB1
dCA8IGFic1VuZGVsYXllZFNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNz
b3JJbnB1dCA9IGFic1VuZGVsYXllZFNvdXJjZTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICBwcmVEZWxheVJlYWRJbmRleCA9IChwcmVEZWxheVJlYWRJbmRleCArIDEpICYg
TWF4UHJlRGVsYXlGcmFtZXNNYXNrOwotICAgICAgICAgICAgICAgIHByZURlbGF5V3JpdGVJbmRl
eCA9IChwcmVEZWxheVdyaXRlSW5kZXggKyAxKSAmIE1heFByZURlbGF5RnJhbWVzTWFzazsKLQog
ICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBzaGFwZWQgcG93ZXIgb24gdW5kZWxheWVkIGlu
cHV0LgogCiAgICAgICAgICAgICAgICAgZmxvYXQgc2NhbGVkSW5wdXQgPSBjb21wcmVzc29ySW5w
dXQ7CkBAIC0zMzcsMTcgKzM0MCwxNCBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6
cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlTCwKICAgICAgICAgICAgICAgICAgICAgbV9tZXRl
cmluZ0dhaW4gKz0gKGRiUmVhbEdhaW4gLSBtX21ldGVyaW5nR2FpbikgKiBtX21ldGVyaW5nUmVs
ZWFzZUs7CiAKICAgICAgICAgICAgICAgICAvLyBBcHBseSBmaW5hbCBnYWluLgotICAgICAgICAg
ICAgICAgIGlmIChpc1N0ZXJlbykgewotICAgICAgICAgICAgICAgICAgICBmbG9hdCBvdXRwdXRM
ID0gaW5wdXRMOwotICAgICAgICAgICAgICAgICAgICBmbG9hdCBvdXRwdXRSID0gaW5wdXRSOwot
Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dEwgKj0gdG90YWxHYWluOwotICAgICAgICAgICAg
ICAgICAgICBvdXRwdXRSICo9IHRvdGFsR2FpbjsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZsb2F0KiBkZWxheUJ1ZmZlciA9IG1fcHJlRGVsYXlCdWZmZXJzW2ldLT5kYXRhKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uQnVmZmVyc1tpXVtmcmFtZUluZGV4XSA9IGRl
bGF5QnVmZmVyW3ByZURlbGF5UmVhZEluZGV4XSAqIHRvdGFsR2FpbjsKKyAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gb3V0cHV0TDsKLSAg
ICAgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUisrID0gb3V0cHV0UjsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gaW5wdXRM
ICogdG90YWxHYWluOworICAgICAgICAgICAgICAgIGZyYW1lSW5kZXgrKzsKKyAgICAgICAgICAg
ICAgICBwcmVEZWxheVJlYWRJbmRleCA9IChwcmVEZWxheVJlYWRJbmRleCArIDEpICYgTWF4UHJl
RGVsYXlGcmFtZXNNYXNrOworICAgICAgICAgICAgICAgIHByZURlbGF5V3JpdGVJbmRleCA9IChw
cmVEZWxheVdyaXRlSW5kZXggKyAxKSAmIE1heFByZURlbGF5RnJhbWVzTWFzazsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgLy8gTG9jYWxzIGJhY2sgdG8gbWVtYmVyIHZhcmlhYmxlcy4K
QEAgLTM2Niw4ICszNjYsOSBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cmVzZXQo
KQogICAgIG1fbWV0ZXJpbmdHYWluID0gMTsKIAogICAgIC8vIFByZWRlbGF5IHNlY3Rpb24uCi0g
ICAgbV9wcmVEZWxheUJ1ZmZlckwuemVybygpOwotICAgIG1fcHJlRGVsYXlCdWZmZXJSLnplcm8o
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcmVEZWxheUJ1ZmZlcnMuc2l6ZSgp
OyArK2kpCisgICAgICAgIG1fcHJlRGVsYXlCdWZmZXJzW2ldLT56ZXJvKCk7CisKICAgICBtX3By
ZURlbGF5UmVhZEluZGV4ID0gMDsKICAgICBtX3ByZURlbGF5V3JpdGVJbmRleCA9IERlZmF1bHRQ
cmVEZWxheUZyYW1lczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuaAppbmRleCBjZjMxOWIzNzhhZGViNTkwNjI5
NTNkZWFiMDkyZTMzMzljNmY2ODgwLi41OTA0NzllOGY3NjE0ZTk1ODMxNjA0ZDAxN2M0YmIzNjJi
NmZmNjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWlj
c0NvbXByZXNzb3JLZXJuZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9E
eW5hbWljc0NvbXByZXNzb3JLZXJuZWwuaApAQCAtMzEsMTcgKzMxLDIyIEBACiAKICNpbmNsdWRl
ICJBdWRpb0FycmF5LmgiCiAKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEeW5hbWljc0Nv
bXByZXNzb3JLZXJuZWwgewogcHVibGljOgogICAgIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbChm
bG9hdCBzYW1wbGVSYXRlKTsKKyAgICB+RHluYW1pY3NDb21wcmVzc29yS2VybmVsKCk7CisKKyAg
ICB2b2lkIHNldE51bWJlck9mQ2hhbm5lbHModW5zaWduZWQpOwogCiAgICAgLy8gUGVyZm9ybXMg
c3RlcmVvLWxpbmtlZCBjb21wcmVzc2lvbi4KLSAgICB2b2lkIHByb2Nlc3MoY29uc3QgZmxvYXQg
KnNvdXJjZUwsCi0gICAgICAgICAgICAgICAgIGZsb2F0ICpkZXN0aW5hdGlvbkwsCi0gICAgICAg
ICAgICAgICAgIGNvbnN0IGZsb2F0ICpzb3VyY2VSLAotICAgICAgICAgICAgICAgICBmbG9hdCAq
ZGVzdGluYXRpb25SLAorICAgIHZvaWQgcHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlQnVmZmVy
c1tdLAorICAgICAgICAgICAgICAgICBmbG9hdCogZGVzdGluYXRpb25CdWZmZXJzW10sCisgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsCiAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGZyYW1lc1RvUHJvY2VzcywKIAogICAgICAgICAgICAgICAgICBmbG9hdCBkYlRo
cmVzaG9sZCwKQEAgLTY2LDcgKzcxLDggQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgZmxv
YXQgbV9zYW1wbGVSYXRlOwotICAgIAorICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZDaGFubmVsczsK
KwogICAgIGZsb2F0IG1fZGV0ZWN0b3JBdmVyYWdlOwogICAgIGZsb2F0IG1fY29tcHJlc3Nvckdh
aW47CiAKQEAgLTgxLDggKzg3LDcgQEAgcHJvdGVjdGVkOgogICAgIHVuc2lnbmVkIG1fbGFzdFBy
ZURlbGF5RnJhbWVzOwogICAgIHZvaWQgc2V0UHJlRGVsYXlUaW1lKGZsb2F0KTsKIAotICAgIEF1
ZGlvRmxvYXRBcnJheSBtX3ByZURlbGF5QnVmZmVyTDsKLSAgICBBdWRpb0Zsb2F0QXJyYXkgbV9w
cmVEZWxheUJ1ZmZlclI7CisgICAgVmVjdG9yPE93blB0cjxBdWRpb0Zsb2F0QXJyYXk+ID4gbV9w
cmVEZWxheUJ1ZmZlcnM7CiAgICAgaW50IG1fcHJlRGVsYXlSZWFkSW5kZXg7CiAgICAgaW50IG1f
cHJlRGVsYXlXcml0ZUluZGV4OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5
bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwCmluZGV4IGVhOGI1ODkyMjM1NmFhMTM2NTEzMmFlZjMx
ZmFhZjYwM2Y3NDU0MjcuLjY1MWQxYzVjMzcwOGEwYmZlZDM4MDhiN2FiZjg5ZGMxZTQyZWYyOWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUuY3BwCkBAIC0zNiwxNCArMzYsMTAgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRHluYW1p
Y3NDb21wcmVzc29yTm9kZTo6RHluYW1pY3NDb21wcmVzc29yTm9kZShBdWRpb0NvbnRleHQqIGNv
bnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBBdWRpb05vZGUoY29udGV4dCwgc2FtcGxl
UmF0ZSkKKyAgICA6IEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUp
CiB7Ci0gICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7Ci0g
ICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKLSAg
ICAKKyAgICBtX3Byb2Nlc3NvciA9IGFkb3B0UHRyKG5ldyBEeW5hbWljc0NvbXByZXNzb3IoY29u
dGV4dC0+c2FtcGxlUmF0ZSgpKSk7ICAgIAogICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlRHluYW1p
Y3NDb21wcmVzc29yKTsKLSAgICAKLSAgICBpbml0aWFsaXplKCk7CiB9CiAKIER5bmFtaWNzQ29t
cHJlc3Nvck5vZGU6On5EeW5hbWljc0NvbXByZXNzb3JOb2RlKCkKQEAgLTUxLDM3ICs0Nyw2IEBA
IER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6On5EeW5hbWljc0NvbXByZXNzb3JOb2RlKCkKICAgICB1
bmluaXRpYWxpemUoKTsKIH0KIAotdm9pZCBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjpwcm9jZXNz
KHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IG91
dHB1dCgwKS0+YnVzKCk7Ci0gICAgQVNTRVJUKG91dHB1dEJ1cyk7Ci0KLSAgICBtX2R5bmFtaWNz
Q29tcHJlc3Nvci0+cHJvY2VzcyhpbnB1dCgwKS0+YnVzKCksIG91dHB1dEJ1cywgZnJhbWVzVG9Q
cm9jZXNzKTsKLX0KLQotdm9pZCBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjpyZXNldCgpCi17Ci0g
ICAgbV9keW5hbWljc0NvbXByZXNzb3ItPnJlc2V0KCk7Ci19Ci0KLXZvaWQgRHluYW1pY3NDb21w
cmVzc29yTm9kZTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7ICAgIAotICAgIG1f
ZHluYW1pY3NDb21wcmVzc29yID0gYWRvcHRQdHIobmV3IER5bmFtaWNzQ29tcHJlc3Nvcih0cnVl
LCBzYW1wbGVSYXRlKCkpKTsKLX0KLQotdm9pZCBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjp1bmlu
aXRpYWxpemUoKQotewotICAgIGlmICghaXNJbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2R5bmFtaWNzQ29tcHJlc3Nvci5jbGVhcigpOwotICAgIEF1ZGlvTm9kZTo6dW5p
bml0aWFsaXplKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5h
bWljc0NvbXByZXNzb3JOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0Nv
bXByZXNzb3JOb2RlLmgKaW5kZXggZDcxOGFiMzQxY2MwMWUxODhjZjIxMzA1Njc0NjVmMDQ4YmRh
MDVjYi4uM2NkMWNhYWJjZTRjNWUwNjM4YWE5ZDM3YjZmNWM4MjdlNzU1Mzc3MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaApAQCAtMjUs
MTQgKzI1LDE0IEBACiAjaWZuZGVmIER5bmFtaWNzQ29tcHJlc3Nvck5vZGVfaAogI2RlZmluZSBE
eW5hbWljc0NvbXByZXNzb3JOb2RlX2gKIAotI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgorI2luY2x1
ZGUgIkF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIER5bmFtaWNzQ29tcHJlc3NvcjsKICAgICAK
LWNsYXNzIER5bmFtaWNzQ29tcHJlc3Nvck5vZGUgOiBwdWJsaWMgQXVkaW9Ob2RlIHsKK2NsYXNz
IER5bmFtaWNzQ29tcHJlc3Nvck5vZGUgOiBwdWJsaWMgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUg
ewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPER5bmFtaWNzQ29tcHJlc3Nvck5vZGU+
IGNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCiAgICAgewpA
QCAtNDEsMTYgKzQxLDggQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgfkR5bmFtaWNzQ29t
cHJlc3Nvck5vZGUoKTsKICAgICAKLSAgICAvLyBBdWRpb05vZGUKLSAgICB2aXJ0dWFsIHZvaWQg
cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQo
KTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1bmlu
aXRpYWxpemUoKTsKLQogcHJpdmF0ZToKICAgICBEeW5hbWljc0NvbXByZXNzb3JOb2RlKEF1ZGlv
Q29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwotCi0gICAgT3duUHRyPER5bmFtaWNzQ29tcHJl
c3Nvcj4gbV9keW5hbWljc0NvbXByZXNzb3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126233</attachid>
            <date>2012-02-08 20:47:25 -0800</date>
            <delta_ts>2012-02-09 17:19:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77856-20120209125206.patch</filename>
            <type>text/plain</type>
            <size>25391</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MTcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmY1OGFkZGE2OGJiZmZm
ODE4NDdiOGQ2YWI1NTlmYTJmN2ZkMTgyZS4uNjI0MTVhNWRlNzY0MmNmYTIwMmZkMzA3ODViY2Rm
NWI0MGZkNWRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQxIEBACiAyMDEyLTAyLTA4ICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KIAorICAgICAgICBIYXZlIHRoZSBEeW5h
bWljc0NvbXByZXNzb3JOb2RlIHN1cHBvcnQgbXVsdGktY2hhbm5lbCBkYXRhCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzg1NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyByZXF1aXJl
ZC4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6OkR5bmFtaWNzQ29tcHJlc3Nvcik6
CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6On5EeW5hbWljc0NvbXByZXNz
b3IpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXBy
ZXNzb3I6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29y
Ojp1bmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yOjpz
ZXRFbXBoYXNpc1N0YWdlUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0Nv
bXByZXNzb3I6OnByb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29y
OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6OnNldE51bWJl
ck9mQ2hhbm5lbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nv
ci5oOgorICAgICAgICAoRHluYW1pY3NDb21wcmVzc29yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHlu
YW1pY3NDb21wcmVzc29yS2VybmVsOjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjp+RHluYW1pY3NDb21wcmVzc29y
S2VybmVsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3ND
b21wcmVzc29yS2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmU6
OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0UHJlRGVsYXlUaW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJD
b3JlOjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnJlc2V0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuaDoKKyAgICAgICAgKER5bmFtaWNzQ29t
cHJlc3Nvcktlcm5lbCk6CisgICAgICAgICogd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9k
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3JOb2RlOjpEeW5hbWlj
c0NvbXByZXNzb3JOb2RlKToKKyAgICAgICAgKiB3ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JO
b2RlLmg6CisgICAgICAgIChEeW5hbWljc0NvbXByZXNzb3JOb2RlKToKKworMjAxMi0wMi0wOCAg
UmF5bW9uZCBMaXUgIDxyYXltb25kLmxpdUBpbnRlbC5jb20+CisKICAgICAgICAgRml4IHRoZSBj
YWN1bGF0aW9uIG9mIHByZURlbGF5RnJhbWVzIGluIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbAog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzgwNTcKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVz
c29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nv
ci5jcHAKaW5kZXggYTU1MjA1NzA1ZDk1MTBiZjIwZDlkYjM1NDg3OTM5NjVlZTAyZWUxZC4uY2Ew
Nzg0Y2ViMzU2OTRmNWJjMWJiYzYzZWNhNTYxZmYyMGU5NGEyYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuY3BwCkBAIC00MCw5
ICs0MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEF1ZGlvVXRp
bGl0aWVzOwogICAgIAotRHluYW1pY3NDb21wcmVzc29yOjpEeW5hbWljc0NvbXByZXNzb3IoYm9v
bCBpc1N0ZXJlbywgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IG1faXNTdGVyZW8oaXNTdGVyZW8p
Ci0gICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKK0R5bmFtaWNzQ29tcHJlc3Nvcjo6RHlu
YW1pY3NDb21wcmVzc29yKGZsb2F0IHNhbXBsZVJhdGUpCisgICAgOiBBdWRpb1Byb2Nlc3Nvcihz
YW1wbGVSYXRlKQorICAgICwgbV9udW1iZXJPZkNoYW5uZWxzKDApCiAgICAgLCBtX2NvbXByZXNz
b3Ioc2FtcGxlUmF0ZSkKIHsKICAgICAvLyBVbmluaXRpYWxpemVkIHN0YXRlIC0gZm9yIHBhcmFt
ZXRlciByZWNhbGN1bGF0aW9uLgpAQCAtNTMsNiArNTMsMjkgQEAgRHluYW1pY3NDb21wcmVzc29y
OjpEeW5hbWljc0NvbXByZXNzb3IoYm9vbCBpc1N0ZXJlbywgZmxvYXQgc2FtcGxlUmF0ZSkKICAg
ICBpbml0aWFsaXplUGFyYW1ldGVycygpOwogfQogCitEeW5hbWljc0NvbXByZXNzb3I6On5EeW5h
bWljc0NvbXByZXNzb3IoKQoreworICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgICAgIHVu
aW5pdGlhbGl6ZSgpOworfQorCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6aW5pdGlhbGl6ZSgp
Cit7CisgICAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9j
b21wcmVzc29yLnNldE51bWJlck9mQ2hhbm5lbHMobV9udW1iZXJPZkNoYW5uZWxzKTsKKyAgICBt
X2luaXRpYWxpemVkID0gdHJ1ZTsKK30KKwordm9pZCBEeW5hbWljc0NvbXByZXNzb3I6OnVuaW5p
dGlhbGl6ZSgpCit7CisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1faW5pdGlhbGl6ZWQgPSBmYWxzZTsKK30KKwogdm9pZCBEeW5hbWljc0NvbXByZXNz
b3I6OmluaXRpYWxpemVQYXJhbWV0ZXJzKCkKIHsKICAgICAvLyBJbml0aWFsaXplcyBjb21wcmVz
c29yIHRvIGRlZmF1bHQgdmFsdWVzLgpAQCAtOTMsMTggKzExNiwyMiBAQCB2b2lkIER5bmFtaWNz
Q29tcHJlc3Nvcjo6c2V0RW1waGFzaXNTdGFnZVBhcmFtZXRlcnModW5zaWduZWQgc3RhZ2VJbmRl
eCwgZmxvYXQgZwogICAgIGZsb2F0IHIxID0gZXhwZigtZjEgKiBwaUZsb2F0KTsKICAgICBmbG9h
dCByMiA9IGV4cGYoLWYyICogcGlGbG9hdCk7CiAKLSAgICAvLyBTZXQgcHJlLWZpbHRlciB6ZXJv
IGFuZCBwb2xlIHRvIGNyZWF0ZSBhbiBlbXBoYXNpcyBmaWx0ZXIuCi0gICAgbV9wcmVGaWx0ZXJb
c3RhZ2VJbmRleF0uc2V0WmVybyhyMSk7Ci0gICAgbV9wcmVGaWx0ZXJbc3RhZ2VJbmRleF0uc2V0
UG9sZShyMik7Ci0gICAgbV9wcmVGaWx0ZXJSW3N0YWdlSW5kZXhdLnNldFplcm8ocjEpOwotICAg
IG1fcHJlRmlsdGVyUltzdGFnZUluZGV4XS5zZXRQb2xlKHIyKTsKLQotICAgIC8vIFNldCBwb3N0
LWZpbHRlciB3aXRoIHplcm8gYW5kIHBvbGUgcmV2ZXJzZWQgdG8gY3JlYXRlIHRoZSBkZS1lbXBo
YXNpcyBmaWx0ZXIuCi0gICAgLy8gSWYgdGhlcmUgd2VyZSBubyBjb21wcmVzc29yIGtlcm5lbCBp
biBiZXR3ZWVuLCB0aGV5IHdvdWxkIGNhbmNlbCBlYWNoIG90aGVyIG91dCAoYWxscGFzcyBmaWx0
ZXIpLgotICAgIG1fcG9zdEZpbHRlcltzdGFnZUluZGV4XS5zZXRaZXJvKHIyKTsKLSAgICBtX3Bv
c3RGaWx0ZXJbc3RhZ2VJbmRleF0uc2V0UG9sZShyMSk7Ci0gICAgbV9wb3N0RmlsdGVyUltzdGFn
ZUluZGV4XS5zZXRaZXJvKHIyKTsKLSAgICBtX3Bvc3RGaWx0ZXJSW3N0YWdlSW5kZXhdLnNldFBv
bGUocjEpOworICAgIEFTU0VSVChtX251bWJlck9mQ2hhbm5lbHMgPT0gbV9wcmVGaWx0ZXJQYWNr
cy5zaXplKCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtYmVyT2ZDaGFu
bmVsczsgKytpKSB7CisgICAgICAgIFplcm9Qb2xlKiBwcmVGaWx0ZXIgPSAmKG1fcHJlRmlsdGVy
UGFja3NbaV0tPmZpbHRlcnNbc3RhZ2VJbmRleF0pOworICAgICAgICAvLyBTZXQgcHJlLWZpbHRl
ciB6ZXJvIGFuZCBwb2xlIHRvIGNyZWF0ZSBhbiBlbXBoYXNpcyBmaWx0ZXIuCisgICAgICAgIHBy
ZUZpbHRlci0+c2V0WmVybyhyMSk7CisgICAgICAgIHByZUZpbHRlci0+c2V0UG9sZShyMik7CisK
KyAgICAgICAgLy8gU2V0IHBvc3QtZmlsdGVyIHdpdGggemVybyBhbmQgcG9sZSByZXZlcnNlZCB0
byBjcmVhdGUgdGhlIGRlLWVtcGhhc2lzIGZpbHRlci4KKyAgICAgICAgLy8gSWYgdGhlcmUgd2Vy
ZSBubyBjb21wcmVzc29yIGtlcm5lbCBpbiBiZXR3ZWVuLCB0aGV5IHdvdWxkIGNhbmNlbCBlYWNo
IG90aGVyIG91dCAoYWxscGFzcyBmaWx0ZXIpLgorICAgICAgICBaZXJvUG9sZSogcG9zdEZpbHRl
ciA9ICYobV9wb3N0RmlsdGVyUGFja3NbaV0tPmZpbHRlcnNbc3RhZ2VJbmRleF0pOworICAgICAg
ICBwb3N0RmlsdGVyLT5zZXRaZXJvKHIyKTsKKyAgICAgICAgcG9zdEZpbHRlci0+c2V0UG9sZShy
MSk7CisgICAgfQorCisKIH0KIAogdm9pZCBEeW5hbWljc0NvbXByZXNzb3I6OnNldEVtcGhhc2lz
UGFyYW1ldGVycyhmbG9hdCBnYWluLCBmbG9hdCBhbmNob3JGcmVxLCBmbG9hdCBmaWx0ZXJTdGFn
ZVJhdGlvKQpAQCAtMTE3LDE4ICsxNDQsMTcgQEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3I6OnNl
dEVtcGhhc2lzUGFyYW1ldGVycyhmbG9hdCBnYWluLCBmbG9hdCBhbmNob3JGcmVxLCBmbG8KIAog
dm9pZCBEeW5hbWljc0NvbXByZXNzb3I6OnByb2Nlc3MoY29uc3QgQXVkaW9CdXMqIHNvdXJjZUJ1
cywgQXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzLCB1bnNpZ25lZCBmcmFtZXNUb1Byb2Nlc3MpCiB7
Ci0gICAgY29uc3QgZmxvYXQqIHNvdXJjZUwgPSBzb3VyY2VCdXMtPmNoYW5uZWwoMCktPmRhdGEo
KTsKLSAgICBjb25zdCBmbG9hdCogc291cmNlUjsKLQotICAgIGlmIChzb3VyY2VCdXMtPm51bWJl
ck9mQ2hhbm5lbHMoKSA+IDEpCi0gICAgICAgIHNvdXJjZVIgPSBzb3VyY2VCdXMtPmNoYW5uZWwo
MSktPmRhdGEoKTsKLSAgICBlbHNlCi0gICAgICAgIHNvdXJjZVIgPSBzb3VyY2VMOworICAgIHVu
c2lnbmVkIG51bWJlck9mQ2hhbm5lbHMgPSBzb3VyY2VCdXMtPm51bWJlck9mQ2hhbm5lbHMoKTsK
KyAgICBBU1NFUlQoZGVzdGluYXRpb25CdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSBudW1iZXJP
ZkNoYW5uZWxzKTsKIAotICAgIEFTU0VSVChkZXN0aW5hdGlvbkJ1cy0+bnVtYmVyT2ZDaGFubmVs
cygpID09IDIpOworICAgIHR5cGVkZWYgY29uc3QgZmxvYXQqIGNvbnN0RmxvYXRQdHI7CisgICAg
Y29uc3RGbG9hdFB0ciBzb3VyY2VDaGFubmVsc1tudW1iZXJPZkNoYW5uZWxzXTsKKyAgICBmbG9h
dCogZGVzdGluYXRpb25DaGFubmVsc1tudW1iZXJPZkNoYW5uZWxzXTsKIAotICAgIGZsb2F0KiBk
ZXN0aW5hdGlvbkwgPSBkZXN0aW5hdGlvbkJ1cy0+Y2hhbm5lbCgwKS0+bXV0YWJsZURhdGEoKTsK
LSAgICBmbG9hdCogZGVzdGluYXRpb25SID0gZGVzdGluYXRpb25CdXMtPmNoYW5uZWwoMSktPm11
dGFibGVEYXRhKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5l
bHM7ICsraSkgeworICAgICAgICBzb3VyY2VDaGFubmVsc1tpXSA9IHNvdXJjZUJ1cy0+Y2hhbm5l
bChpKS0+ZGF0YSgpOworICAgICAgICBkZXN0aW5hdGlvbkNoYW5uZWxzW2ldID0gZGVzdGluYXRp
b25CdXMtPmNoYW5uZWwoaSktPm11dGFibGVEYXRhKCk7CisgICAgfQogCiAgICAgZmxvYXQgZmls
dGVyU3RhZ2VHYWluID0gcGFyYW1ldGVyVmFsdWUoUGFyYW1GaWx0ZXJTdGFnZUdhaW4pOwogICAg
IGZsb2F0IGZpbHRlclN0YWdlUmF0aW8gPSBwYXJhbWV0ZXJWYWx1ZShQYXJhbUZpbHRlclN0YWdl
UmF0aW8pOwpAQCAtMTQ0LDE2ICsxNzAsMTUgQEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3I6OnBy
b2Nlc3MoY29uc3QgQXVkaW9CdXMqIHNvdXJjZUJ1cywgQXVkaW9CdXMqIGRlc3RpbmF0aW8KIAog
ICAgIC8vIEFwcGx5IHByZS1lbXBoYXNpcyBmaWx0ZXIuCiAgICAgLy8gTm90ZSB0aGF0IHRoZSBm
aW5hbCB0aHJlZSBzdGFnZXMgYXJlIGNvbXB1dGVkIGluLXBsYWNlIGluIHRoZSBkZXN0aW5hdGlv
biBidWZmZXIuCi0gICAgbV9wcmVGaWx0ZXJbMF0ucHJvY2Vzcyhzb3VyY2VMLCBkZXN0aW5hdGlv
bkwsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgbV9wcmVGaWx0ZXJbMV0ucHJvY2VzcyhkZXN0aW5h
dGlvbkwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICBtX3ByZUZpbHRlclsy
XS5wcm9jZXNzKGRlc3RpbmF0aW9uTCwgZGVzdGluYXRpb25MLCBmcmFtZXNUb1Byb2Nlc3MpOwot
ICAgIG1fcHJlRmlsdGVyWzNdLnByb2Nlc3MoZGVzdGluYXRpb25MLCBkZXN0aW5hdGlvbkwsIGZy
YW1lc1RvUHJvY2Vzcyk7Ci0KLSAgICBpZiAoaXNTdGVyZW8oKSkgewotICAgICAgICBtX3ByZUZp
bHRlclJbMF0ucHJvY2Vzcyhzb3VyY2VSLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7
Ci0gICAgICAgIG1fcHJlRmlsdGVyUlsxXS5wcm9jZXNzKGRlc3RpbmF0aW9uUiwgZGVzdGluYXRp
b25SLCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgICAgICBtX3ByZUZpbHRlclJbMl0ucHJvY2Vzcyhk
ZXN0aW5hdGlvblIsIGRlc3RpbmF0aW9uUiwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgbV9w
cmVGaWx0ZXJSWzNdLnByb2Nlc3MoZGVzdGluYXRpb25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1Rv
UHJvY2Vzcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7
ICsraSkgeworICAgICAgICBjb25zdCBmbG9hdCogc291cmNlRGF0YSA9IHNvdXJjZUNoYW5uZWxz
W2ldOworICAgICAgICBmbG9hdCogZGVzdGluYXRpb25EYXRhID0gZGVzdGluYXRpb25DaGFubmVs
c1tpXTsKKyAgICAgICAgWmVyb1BvbGUqIHByZUZpbHRlcnMgPSBtX3ByZUZpbHRlclBhY2tzW2ld
LT5maWx0ZXJzOworCisgICAgICAgIHByZUZpbHRlcnNbMF0ucHJvY2Vzcyhzb3VyY2VEYXRhLCBk
ZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIHByZUZpbHRlcnNbMV0u
cHJvY2VzcyhkZXN0aW5hdGlvbkRhdGEsIGRlc3RpbmF0aW9uRGF0YSwgZnJhbWVzVG9Qcm9jZXNz
KTsKKyAgICAgICAgcHJlRmlsdGVyc1syXS5wcm9jZXNzKGRlc3RpbmF0aW9uRGF0YSwgZGVzdGlu
YXRpb25EYXRhLCBmcmFtZXNUb1Byb2Nlc3MpOworICAgICAgICBwcmVGaWx0ZXJzWzNdLnByb2Nl
c3MoZGVzdGluYXRpb25EYXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vzcyk7CiAg
ICAgfQogCiAgICAgZmxvYXQgZGJUaHJlc2hvbGQgPSBwYXJhbWV0ZXJWYWx1ZShQYXJhbVRocmVz
aG9sZCk7CkBAIC0xNzcsMTAgKzIwMiwxMCBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6cHJv
Y2Vzcyhjb25zdCBBdWRpb0J1cyogc291cmNlQnVzLCBBdWRpb0J1cyogZGVzdGluYXRpbwogCiAg
ICAgLy8gQXBwbHkgY29tcHJlc3Npb24gdG8gdGhlIHByZS1maWx0ZXJlZCBzaWduYWwuCiAgICAg
Ly8gVGhlIHByb2Nlc3NpbmcgaXMgcGVyZm9ybWVkIGluIHBsYWNlLgotICAgIG1fY29tcHJlc3Nv
ci5wcm9jZXNzKGRlc3RpbmF0aW9uTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5h
dGlvbkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25SLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uUiwKKyAgICBjb25zdEZsb2F0UHRyKiBpbnBsYWNl
U291cmNlQ2hhbm5lbHMgPSAoY29uc3RGbG9hdFB0ciopZGVzdGluYXRpb25DaGFubmVsczsKKyAg
ICBtX2NvbXByZXNzb3IucHJvY2VzcyhpbnBsYWNlU291cmNlQ2hhbm5lbHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdGluYXRpb25DaGFubmVscywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBudW1iZXJPZkNoYW5uZWxzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1Rv
UHJvY2VzcywKIAogICAgICAgICAgICAgICAgICAgICAgICAgIGRiVGhyZXNob2xkLApAQCAtMTk4
LDE2ICsyMjMsMTQgQEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3I6OnByb2Nlc3MoY29uc3QgQXVk
aW9CdXMqIHNvdXJjZUJ1cywgQXVkaW9CdXMqIGRlc3RpbmF0aW8KICAgICAgICAgICAgICAgICAg
ICAgICAgICApOwogCiAgICAgLy8gQXBwbHkgZGUtZW1waGFzaXMgZmlsdGVyLgotICAgIG1fcG9z
dEZpbHRlclswXS5wcm9jZXNzKGRlc3RpbmF0aW9uTCwgZGVzdGluYXRpb25MLCBmcmFtZXNUb1By
b2Nlc3MpOwotICAgIG1fcG9zdEZpbHRlclsxXS5wcm9jZXNzKGRlc3RpbmF0aW9uTCwgZGVzdGlu
YXRpb25MLCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIG1fcG9zdEZpbHRlclsyXS5wcm9jZXNzKGRl
c3RpbmF0aW9uTCwgZGVzdGluYXRpb25MLCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIG1fcG9zdEZp
bHRlclszXS5wcm9jZXNzKGRlc3RpbmF0aW9uTCwgZGVzdGluYXRpb25MLCBmcmFtZXNUb1Byb2Nl
c3MpOwotCi0gICAgaWYgKGlzU3RlcmVvKCkpIHsKLSAgICAgICAgbV9wb3N0RmlsdGVyUlswXS5w
cm9jZXNzKGRlc3RpbmF0aW9uUiwgZGVzdGluYXRpb25SLCBmcmFtZXNUb1Byb2Nlc3MpOwotICAg
ICAgICBtX3Bvc3RGaWx0ZXJSWzFdLnByb2Nlc3MoZGVzdGluYXRpb25SLCBkZXN0aW5hdGlvblIs
IGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgICAgIG1fcG9zdEZpbHRlclJbMl0ucHJvY2VzcyhkZXN0
aW5hdGlvblIsIGRlc3RpbmF0aW9uUiwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgbV9wb3N0
RmlsdGVyUlszXS5wcm9jZXNzKGRlc3RpbmF0aW9uUiwgZGVzdGluYXRpb25SLCBmcmFtZXNUb1By
b2Nlc3MpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyAr
K2kpIHsKKyAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uRGF0YSA9IGRlc3RpbmF0aW9uQ2hhbm5l
bHNbaV07CisgICAgICAgIFplcm9Qb2xlKiBwb3N0RmlsdGVycyA9IG1fcG9zdEZpbHRlclBhY2tz
W2ldLT5maWx0ZXJzOworCisgICAgICAgIHBvc3RGaWx0ZXJzWzBdLnByb2Nlc3MoZGVzdGluYXRp
b25EYXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIHBvc3RG
aWx0ZXJzWzFdLnByb2Nlc3MoZGVzdGluYXRpb25EYXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1l
c1RvUHJvY2Vzcyk7CisgICAgICAgIHBvc3RGaWx0ZXJzWzJdLnByb2Nlc3MoZGVzdGluYXRpb25E
YXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIHBvc3RGaWx0
ZXJzWzNdLnByb2Nlc3MoZGVzdGluYXRpb25EYXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1Rv
UHJvY2Vzcyk7CiAgICAgfQogfQogCkBAIC0yMTcsMTYgKzI0MCwzNCBAQCB2b2lkIER5bmFtaWNz
Q29tcHJlc3Nvcjo6cmVzZXQoKQogICAgIG1fbGFzdEFuY2hvciA9IC0xOwogICAgIG1fbGFzdEZp
bHRlclN0YWdlR2FpbiA9IC0xOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDQ7ICsr
aSkgewotICAgICAgICBtX3ByZUZpbHRlcltpXS5yZXNldCgpOwotICAgICAgICBtX3ByZUZpbHRl
clJbaV0ucmVzZXQoKTsKLSAgICAgICAgbV9wb3N0RmlsdGVyW2ldLnJlc2V0KCk7Ci0gICAgICAg
IG1fcG9zdEZpbHRlclJbaV0ucmVzZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWwgPSAw
OyBjaGFubmVsIDwgbV9udW1iZXJPZkNoYW5uZWxzOyArK2NoYW5uZWwpIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBzdGFnZUluZGV4ID0gMDsgc3RhZ2VJbmRleCA8IDQ7ICsrc3RhZ2VJbmRleCkg
eworICAgICAgICAgICAgbV9wcmVGaWx0ZXJQYWNrc1tjaGFubmVsXS0+ZmlsdGVyc1tzdGFnZUlu
ZGV4XS5yZXNldCgpOworICAgICAgICAgICAgbV9wb3N0RmlsdGVyUGFja3NbY2hhbm5lbF0tPmZp
bHRlcnNbc3RhZ2VJbmRleF0ucmVzZXQoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIG1fY29t
cHJlc3Nvci5yZXNldCgpOwogfQogCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6c2V0TnVtYmVy
T2ZDaGFubmVscyh1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKQoreworICAgIGlmIChudW1iZXJP
ZkNoYW5uZWxzID09IG1fbnVtYmVyT2ZDaGFubmVscykKKyAgICAgICAgcmV0dXJuOworCisgICAg
QVNTRVJUKCFpc0luaXRpYWxpemVkKCkpOworICAgIGlmICghaXNJbml0aWFsaXplZCgpKSB7Cisg
ICAgICAgIG1fcHJlRmlsdGVyUGFja3MuY2xlYXIoKTsKKyAgICAgICAgbV9wb3N0RmlsdGVyUGFj
a3MuY2xlYXIoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hh
bm5lbHM7ICsraSkgeworICAgICAgICAgICAgbV9wcmVGaWx0ZXJQYWNrcy5hcHBlbmQoYWRvcHRQ
dHIobmV3IFplcm9Qb2xlRmlsZXRlclBhY2s0KCkpKTsKKyAgICAgICAgICAgIG1fcG9zdEZpbHRl
clBhY2tzLmFwcGVuZChhZG9wdFB0cihuZXcgWmVyb1BvbGVGaWxldGVyUGFjazQoKSkpOworICAg
ICAgICB9CisKKyAgICAgICAgbV9udW1iZXJPZkNoYW5uZWxzID0gbnVtYmVyT2ZDaGFubmVsczsK
KyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShX
RUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5h
bWljc0NvbXByZXNzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNz
Q29tcHJlc3Nvci5oCmluZGV4IGUwMTE1ZWUyNzNlNDMwZjljMjhmNTY0YmZjOWNjNDRlYmM2NmM2
OWUuLjc5ZTFhN2M0Yzg5Njk2NWZiMTYyYjIyODY1ODc3NDRhNDM4NDAzNzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5oCkBAIC0z
MCw2ICszMCw3IEBACiAjZGVmaW5lIER5bmFtaWNzQ29tcHJlc3Nvcl9oCiAKICNpbmNsdWRlICJB
dWRpb0FycmF5LmgiCisjaW5jbHVkZSAiQXVkaW9Qcm9jZXNzb3IuaCIKICNpbmNsdWRlICJEeW5h
bWljc0NvbXByZXNzb3JLZXJuZWwuaCIKICNpbmNsdWRlICJaZXJvUG9sZS5oIgogCkBAIC00Miw3
ICs0Myw3IEBAIGNsYXNzIEF1ZGlvQnVzOwogLy8gb2YgdGhlIGxvdWRlc3QgcGFydHMgb2YgdGhl
IHNpZ25hbCBhbmQgcmFpc2VzIHRoZSB2b2x1bWUgb2YgdGhlIHNvZnRlc3QgcGFydHMsCiAvLyBt
YWtpbmcgdGhlIHNvdW5kIHJpY2hlciwgZnVsbGVyLCBhbmQgbW9yZSBjb250cm9sbGVkLgogCi1j
bGFzcyBEeW5hbWljc0NvbXByZXNzb3IgeworY2xhc3MgRHluYW1pY3NDb21wcmVzc29yIDogcHVi
bGljIEF1ZGlvUHJvY2Vzc29yIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgUGFyYW1U
aHJlc2hvbGQsCkBAIC02MiwzNyArNjMsNDEgQEAgcHVibGljOgogICAgICAgICBQYXJhbUxhc3QK
ICAgICB9OwogCi0gICAgRHluYW1pY3NDb21wcmVzc29yKGJvb2wgaXNTdGVyZW8sIGZsb2F0IHNh
bXBsZVJhdGUpOworICAgIER5bmFtaWNzQ29tcHJlc3NvcihmbG9hdCBzYW1wbGVSYXRlKTsKKyAg
ICB+RHluYW1pY3NDb21wcmVzc29yKCk7CiAKLSAgICB2b2lkIHByb2Nlc3MoY29uc3QgQXVkaW9C
dXMqIHNvdXJjZUJ1cywgQXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzLCB1bnNpZ25lZCBmcmFtZXNU
b1Byb2Nlc3MpOwotICAgIHZvaWQgcmVzZXQoKTsKKyAgICAvLyBBdWRpb1Byb2Nlc3NvciBtZXRo
b2RzCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5p
bml0aWFsaXplKCk7CisgICAgdmlydHVhbCB2b2lkIHByb2Nlc3MoY29uc3QgQXVkaW9CdXMqIHNv
dXJjZUJ1cywgQXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzLCB1bnNpZ25lZCBmcmFtZXNUb1Byb2Nl
c3MpOworICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXROdW1i
ZXJPZkNoYW5uZWxzKHVuc2lnbmVkKTsKIAogICAgIGZsb2F0IHBhcmFtZXRlclZhbHVlKHVuc2ln
bmVkIHBhcmFtZXRlcklEKTsKIAotICAgIGJvb2wgaXNTdGVyZW8oKSBjb25zdCB7IHJldHVybiBt
X2lzU3RlcmVvOyB9Ci0gICAgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Ft
cGxlUmF0ZTsgfQogICAgIGZsb2F0IG55cXVpc3QoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJh
dGUgLyAyOyB9CiAKIHByb3RlY3RlZDoKKyAgICB1bnNpZ25lZCBtX251bWJlck9mQ2hhbm5lbHM7
CisKICAgICAvLyBtX3BhcmFtZXRlcnMgaG9sZHMgdGhlIHR3ZWFrYWJsZSBjb21wcmVzc29yIHBh
cmFtZXRlcnMuCiAgICAgLy8gRklYTUU6IGV4cG9zZSBzb21lIG9mIHRoZSBtb3N0IGltcG9ydGFu
dCBvbmVzIChzdWNoIGFzIHRocmVzaG9sZCwgYXR0YWNrLCByZWxlYXNlKQogICAgIC8vIGFzIER5
bmFtaWNzQ29tcHJlc3Nvck5vZGUgYXR0cmlidXRlcy4KICAgICBmbG9hdCBtX3BhcmFtZXRlcnNb
UGFyYW1MYXN0XTsKICAgICB2b2lkIGluaXRpYWxpemVQYXJhbWV0ZXJzKCk7CiAKLSAgICBib29s
IG1faXNTdGVyZW87Ci0gICAgZmxvYXQgbV9zYW1wbGVSYXRlOwotCiAgICAgLy8gRW1waGFzaXMg
ZmlsdGVyIGNvbnRyb2xzLgogICAgIGZsb2F0IG1fbGFzdEZpbHRlclN0YWdlUmF0aW87CiAgICAg
ZmxvYXQgbV9sYXN0QW5jaG9yOwogICAgIGZsb2F0IG1fbGFzdEZpbHRlclN0YWdlR2FpbjsKIAor
ICAgIHR5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgWmVyb1BvbGUgZmlsdGVyc1s0XTsKKyAgICB9
IFplcm9Qb2xlRmlsZXRlclBhY2s0OworCiAgICAgLy8gRW1waGFzaXMgZmlsdGVycy4KLSAgICBa
ZXJvUG9sZSBtX3ByZUZpbHRlcls0XTsKLSAgICBaZXJvUG9sZSBtX3ByZUZpbHRlclJbNF07Ci0g
ICAgWmVyb1BvbGUgbV9wb3N0RmlsdGVyWzRdOwotICAgIFplcm9Qb2xlIG1fcG9zdEZpbHRlclJb
NF07CisgICAgVmVjdG9yPE93blB0cjxaZXJvUG9sZUZpbGV0ZXJQYWNrND4gPiBtX3ByZUZpbHRl
clBhY2tzOworICAgIFZlY3RvcjxPd25QdHI8WmVyb1BvbGVGaWxldGVyUGFjazQ+ID4gbV9wb3N0
RmlsdGVyUGFja3M7CiAKICAgICB2b2lkIHNldEVtcGhhc2lzU3RhZ2VQYXJhbWV0ZXJzKHVuc2ln
bmVkIHN0YWdlSW5kZXgsIGZsb2F0IGdhaW4sIGZsb2F0IG5vcm1hbGl6ZWRGcmVxdWVuY3kgLyog
MCAtPiAxICovKTsKICAgICB2b2lkIHNldEVtcGhhc2lzUGFyYW1ldGVycyhmbG9hdCBnYWluLCBm
bG9hdCBhbmNob3JGcmVxLCBmbG9hdCBmaWx0ZXJTdGFnZVJhdGlvKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwu
Y3BwCmluZGV4IGEzMjJhMzMwMjU5NjBjODljYjZiZTA2YzI1Yjg3NzM3NmRhOWUzNmMuLmJkNWMw
ZjBiZWYwNjljMDNjNTViMzVkOTJhMTEzZDQ3MDlkM2MyMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNw
cApAQCAtNTQsOSArNTQsOCBAQCBzdGF0aWMgZmxvYXQgc2F0dXJhdGUoZmxvYXQgeCwgZmxvYXQg
aykKIAogRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwo
ZmxvYXQgc2FtcGxlUmF0ZSkKICAgICA6IG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQorICAgICwg
bV9udW1iZXJPZkNoYW5uZWxzKDApCiAgICAgLCBtX2xhc3RQcmVEZWxheUZyYW1lcyhEZWZhdWx0
UHJlRGVsYXlGcmFtZXMpCi0gICAgLCBtX3ByZURlbGF5QnVmZmVyTChNYXhQcmVEZWxheUZyYW1l
cykKLSAgICAsIG1fcHJlRGVsYXlCdWZmZXJSKE1heFByZURlbGF5RnJhbWVzKQogICAgICwgbV9w
cmVEZWxheVJlYWRJbmRleCgwKQogICAgICwgbV9wcmVEZWxheVdyaXRlSW5kZXgoRGVmYXVsdFBy
ZURlbGF5RnJhbWVzKQogewpAQCAtNjYsNiArNjUsMjMgQEAgRHluYW1pY3NDb21wcmVzc29yS2Vy
bmVsOjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwoZmxvYXQgc2FtcGxlUmF0ZSkKICAgICBtX21l
dGVyaW5nUmVsZWFzZUsgPSBkaXNjcmV0ZVRpbWVDb25zdGFudEZvclNhbXBsZVJhdGUobWV0ZXJp
bmdSZWxlYXNlVGltZUNvbnN0YW50LCBzYW1wbGVSYXRlKTsKIH0KIAorRHluYW1pY3NDb21wcmVz
c29yS2VybmVsOjp+RHluYW1pY3NDb21wcmVzc29yS2VybmVsKCkKK3sKKyAgICBtX3ByZURlbGF5
QnVmZmVycy5jbGVhcigpOworfQorCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0
TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKQoreworICAgIGlmIChu
dW1iZXJPZkNoYW5uZWxzID09IG1fbnVtYmVyT2ZDaGFubmVscykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9wcmVEZWxheUJ1ZmZlcnMuY2xlYXIoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKQorICAgICAgICBtX3ByZURlbGF5QnVmZmVycy5h
cHBlbmQoYWRvcHRQdHIobmV3IEF1ZGlvRmxvYXRBcnJheShNYXhQcmVEZWxheUZyYW1lcykpKTsK
KworICAgIG1fbnVtYmVyT2ZDaGFubmVscz0gbnVtYmVyT2ZDaGFubmVsczsKK30KKwogdm9pZCBE
eW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnNldFByZURlbGF5VGltZShmbG9hdCBwcmVEZWxheVRp
bWUpCiB7CiAgICAgLy8gUmUtY29uZmlndXJlIGxvb2stYWhlYWQgc2VjdGlvbiBwcmUtZGVsYXkg
aWYgZGVsYXkgdGltZSBoYXMgY2hhbmdlZC4KQEAgLTc1LDE3ICs5MSwxNyBAQCB2b2lkIER5bmFt
aWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0UHJlRGVsYXlUaW1lKGZsb2F0IHByZURlbGF5VGltZSkK
ICAgICAgICAgCiAgICAgaWYgKG1fbGFzdFByZURlbGF5RnJhbWVzICE9IHByZURlbGF5RnJhbWVz
KSB7CiAgICAgICAgIG1fbGFzdFByZURlbGF5RnJhbWVzID0gcHJlRGVsYXlGcmFtZXM7Ci0gICAg
ICAgIG1fcHJlRGVsYXlCdWZmZXJMLnplcm8oKTsKLSAgICAgICAgbV9wcmVEZWxheUJ1ZmZlclIu
emVybygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcmVEZWxheUJ1ZmZl
cnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX3ByZURlbGF5QnVmZmVyc1tpXS0+emVybygp
OworCiAgICAgICAgIG1fcHJlRGVsYXlSZWFkSW5kZXggPSAwOwogICAgICAgICBtX3ByZURlbGF5
V3JpdGVJbmRleCA9IHByZURlbGF5RnJhbWVzOwogICAgIH0KIH0KIAotdm9pZCBEeW5hbWljc0Nv
bXByZXNzb3JLZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZUwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogZGVzdGluYXRpb25MLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIHNvdXJjZVIsIC8q
IHN0ZXJlby1saW5rZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZsb2F0KiBkZXN0aW5hdGlvblIsCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cHJv
Y2Vzcyhjb25zdCBmbG9hdCogc291cmNlQnVmZmVyc1tdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uQnVmZmVyc1tdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lc1Rv
UHJvY2VzcywKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQg
ZGJUaHJlc2hvbGQsCkBAIC0xMDIsNyArMTE4LDggQEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3JL
ZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZUwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCByZWxlYXNlWm9uZTQKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICkKIHsKLSAgICBib29sIGlzU3RlcmVvID0gZGVzdGluYXRp
b25SOworICAgIEFTU0VSVChtX251bWJlck9mQ2hhbm5lbHMgPT0gbnVtYmVyT2ZDaGFubmVscyk7
CisKICAgICBmbG9hdCBzYW1wbGVSYXRlID0gdGhpcy0+c2FtcGxlUmF0ZSgpOwogCiAgICAgZmxv
YXQgZHJ5TWl4ID0gMSAtIGVmZmVjdEJsZW5kOwpAQCAtMTY0LDYgKzE4MSw3IEBAIHZvaWQgRHlu
YW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2VMLAogCiAg
ICAgY29uc3QgaW50IG5EaXZpc2lvbnMgPSBmcmFtZXNUb1Byb2Nlc3MgLyBuRGl2aXNpb25GcmFt
ZXM7CiAKKyAgICB1bnNpZ25lZCBmcmFtZUluZGV4ID0gMDsKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG5EaXZpc2lvbnM7ICsraSkgewogICAgICAgICAvLyB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn4KICAgICAgICAgLy8gQ2FsY3VsYXRlIGRlc2lyZWQgZ2FpbgpAQCAtMjQ3LDgg
KzI2NSw2IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKGNvbnN0IGZs
b2F0KiBzb3VyY2VMLAogICAgICAgICAvLyB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn4KIAogICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdCogZGVsYXlCdWZmZXJMID0gbV9wcmVE
ZWxheUJ1ZmZlckwuZGF0YSgpOwotICAgICAgICAgICAgZmxvYXQqIGRlbGF5QnVmZmVyUiA9IG1f
cHJlRGVsYXlCdWZmZXJSLmRhdGEoKTsKICAgICAgICAgICAgIGludCBwcmVEZWxheVJlYWRJbmRl
eCA9IG1fcHJlRGVsYXlSZWFkSW5kZXg7CiAgICAgICAgICAgICBpbnQgcHJlRGVsYXlXcml0ZUlu
ZGV4ID0gbV9wcmVEZWxheVdyaXRlSW5kZXg7CiAgICAgICAgICAgICBmbG9hdCBkZXRlY3RvckF2
ZXJhZ2UgPSBtX2RldGVjdG9yQXZlcmFnZTsKQEAgLTI1NiwzMiArMjcyLDE5IEBAIHZvaWQgRHlu
YW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2VMLAogCiAg
ICAgICAgICAgICBpbnQgbG9vcEZyYW1lcyA9IG5EaXZpc2lvbkZyYW1lczsKICAgICAgICAgICAg
IHdoaWxlIChsb29wRnJhbWVzLS0pIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb21wcmVzc29y
SW5wdXQ7Ci0gICAgICAgICAgICAgICAgZmxvYXQgaW5wdXRMOwotICAgICAgICAgICAgICAgIGZs
b2F0IGlucHV0UiA9IDA7CisgICAgICAgICAgICAgICAgZmxvYXQgY29tcHJlc3NvcklucHV0ID0g
MDsKIAogICAgICAgICAgICAgICAgIC8vIFByZWRlbGF5IHNpZ25hbCwgY29tcHV0aW5nIGNvbXBy
ZXNzaW9uIGFtb3VudCBmcm9tIHVuLWRlbGF5ZWQgdmVyc2lvbi4KLSAgICAgICAgICAgICAgICBp
ZiAoaXNTdGVyZW8pIHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgdW5kZWxheWVkTCA9ICpz
b3VyY2VMKys7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IHVuZGVsYXllZFIgPSAqc291cmNl
UisrOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb3JJbnB1dCA9IDAuNWYgKiAodW5k
ZWxheWVkTCArIHVuZGVsYXllZFIpOwotCi0gICAgICAgICAgICAgICAgICAgIGlucHV0TCA9IGRl
bGF5QnVmZmVyTFtwcmVEZWxheVJlYWRJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgIGlucHV0
UiA9IGRlbGF5QnVmZmVyUltwcmVEZWxheVJlYWRJbmRleF07Ci0KLSAgICAgICAgICAgICAgICAg
ICAgZGVsYXlCdWZmZXJMW3ByZURlbGF5V3JpdGVJbmRleF0gPSB1bmRlbGF5ZWRMOwotICAgICAg
ICAgICAgICAgICAgICBkZWxheUJ1ZmZlclJbcHJlRGVsYXlXcml0ZUluZGV4XSA9IHVuZGVsYXll
ZFI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcHJl
c3NvcklucHV0ID0gKnNvdXJjZUwrKzsKLQotICAgICAgICAgICAgICAgICAgICBpbnB1dEwgPSBk
ZWxheUJ1ZmZlckxbcHJlRGVsYXlSZWFkSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICBkZWxh
eUJ1ZmZlckxbcHJlRGVsYXlXcml0ZUluZGV4XSA9IGNvbXByZXNzb3JJbnB1dDsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBkZWxheUJ1ZmZlciA9IG1fcHJlRGVsYXlCdWZm
ZXJzW2ldLT5kYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IHVuZGVsYXllZFNvdXJj
ZSA9IHNvdXJjZUJ1ZmZlcnNbaV1bZnJhbWVJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGRl
bGF5QnVmZmVyW3ByZURlbGF5V3JpdGVJbmRleF0gPSB1bmRlbGF5ZWRTb3VyY2U7CisKKyAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgYWJzVW5kZWxheWVkU291cmNlID0gdW5kZWxheWVkU291cmNl
ID4gMCA/IHVuZGVsYXllZFNvdXJjZSA6IC11bmRlbGF5ZWRTb3VyY2U7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChjb21wcmVzc29ySW5wdXQgPCBhYnNVbmRlbGF5ZWRTb3VyY2UpCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb21wcmVzc29ySW5wdXQgPSBhYnNVbmRlbGF5ZWRTb3VyY2U7CiAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgcHJlRGVsYXlSZWFkSW5kZXggPSAo
cHJlRGVsYXlSZWFkSW5kZXggKyAxKSAmIE1heFByZURlbGF5RnJhbWVzTWFzazsKLSAgICAgICAg
ICAgICAgICBwcmVEZWxheVdyaXRlSW5kZXggPSAocHJlRGVsYXlXcml0ZUluZGV4ICsgMSkgJiBN
YXhQcmVEZWxheUZyYW1lc01hc2s7Ci0KICAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgc2hh
cGVkIHBvd2VyIG9uIHVuZGVsYXllZCBpbnB1dC4KIAogICAgICAgICAgICAgICAgIGZsb2F0IHNj
YWxlZElucHV0ID0gY29tcHJlc3NvcklucHV0OwpAQCAtMzM3LDE3ICszNDAsMTQgQEAgdm9pZCBE
eW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZUwsCiAg
ICAgICAgICAgICAgICAgICAgIG1fbWV0ZXJpbmdHYWluICs9IChkYlJlYWxHYWluIC0gbV9tZXRl
cmluZ0dhaW4pICogbV9tZXRlcmluZ1JlbGVhc2VLOwogCiAgICAgICAgICAgICAgICAgLy8gQXBw
bHkgZmluYWwgZ2Fpbi4KLSAgICAgICAgICAgICAgICBpZiAoaXNTdGVyZW8pIHsKLSAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgb3V0cHV0TCA9IGlucHV0TDsKLSAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgb3V0cHV0UiA9IGlucHV0UjsKLQotICAgICAgICAgICAgICAgICAgICBvdXRwdXRMICo9
IHRvdGFsR2FpbjsKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0UiAqPSB0b3RhbEdhaW47Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7
ICsraSkgeworICAgICAgICAgICAgICAgICAgICBmbG9hdCogZGVsYXlCdWZmZXIgPSBtX3ByZURl
bGF5QnVmZmVyc1tpXS0+ZGF0YSgpOworICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkJ1
ZmZlcnNbaV1bZnJhbWVJbmRleF0gPSBkZWxheUJ1ZmZlcltwcmVEZWxheVJlYWRJbmRleF0gKiB0
b3RhbEdhaW47CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICpkZXN0
aW5hdGlvbkwrKyA9IG91dHB1dEw7Ci0gICAgICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblIr
KyA9IG91dHB1dFI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICpkZXN0aW5hdGlvbkwrKyA9IGlucHV0TCAqIHRvdGFsR2FpbjsKKyAgICAgICAgICAgICAgICBm
cmFtZUluZGV4Kys7CisgICAgICAgICAgICAgICAgcHJlRGVsYXlSZWFkSW5kZXggPSAocHJlRGVs
YXlSZWFkSW5kZXggKyAxKSAmIE1heFByZURlbGF5RnJhbWVzTWFzazsKKyAgICAgICAgICAgICAg
ICBwcmVEZWxheVdyaXRlSW5kZXggPSAocHJlRGVsYXlXcml0ZUluZGV4ICsgMSkgJiBNYXhQcmVE
ZWxheUZyYW1lc01hc2s7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIExvY2FscyBi
YWNrIHRvIG1lbWJlciB2YXJpYWJsZXMuCkBAIC0zNjYsOCArMzY2LDkgQEAgdm9pZCBEeW5hbWlj
c0NvbXByZXNzb3JLZXJuZWw6OnJlc2V0KCkKICAgICBtX21ldGVyaW5nR2FpbiA9IDE7CiAKICAg
ICAvLyBQcmVkZWxheSBzZWN0aW9uLgotICAgIG1fcHJlRGVsYXlCdWZmZXJMLnplcm8oKTsKLSAg
ICBtX3ByZURlbGF5QnVmZmVyUi56ZXJvKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fcHJlRGVsYXlCdWZmZXJzLnNpemUoKTsgKytpKQorICAgICAgICBtX3ByZURlbGF5QnVmZmVy
c1tpXS0+emVybygpOworCiAgICAgbV9wcmVEZWxheVJlYWRJbmRleCA9IDA7CiAgICAgbV9wcmVE
ZWxheVdyaXRlSW5kZXggPSBEZWZhdWx0UHJlRGVsYXlGcmFtZXM7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmgK
aW5kZXggY2YzMTliMzc4YWRlYjU5MDYyOTUzZGVhYjA5MmUzMzM5YzZmNjg4MC4uNTkwNDc5ZThm
NzYxNGU5NTgzMTYwNGQwMTdjNGJiMzYyYjZmZjYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmgKQEAgLTMx
LDE3ICszMSwyMiBAQAogCiAjaW5jbHVkZSAiQXVkaW9BcnJheS5oIgogCisjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgRHluYW1pY3NDb21wcmVzc29yS2VybmVsIHsKIHB1YmxpYzoKICAgICBE
eW5hbWljc0NvbXByZXNzb3JLZXJuZWwoZmxvYXQgc2FtcGxlUmF0ZSk7CisgICAgfkR5bmFtaWNz
Q29tcHJlc3Nvcktlcm5lbCgpOworCisgICAgdm9pZCBzZXROdW1iZXJPZkNoYW5uZWxzKHVuc2ln
bmVkKTsKIAogICAgIC8vIFBlcmZvcm1zIHN0ZXJlby1saW5rZWQgY29tcHJlc3Npb24uCi0gICAg
dm9pZCBwcm9jZXNzKGNvbnN0IGZsb2F0ICpzb3VyY2VMLAotICAgICAgICAgICAgICAgICBmbG9h
dCAqZGVzdGluYXRpb25MLAotICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCAqc291cmNlUiwK
LSAgICAgICAgICAgICAgICAgZmxvYXQgKmRlc3RpbmF0aW9uUiwKKyAgICB2b2lkIHByb2Nlc3Mo
Y29uc3QgZmxvYXQqIHNvdXJjZUJ1ZmZlcnNbXSwKKyAgICAgICAgICAgICAgICAgZmxvYXQqIGRl
c3RpbmF0aW9uQnVmZmVyc1tdLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNo
YW5uZWxzLAogICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZXNUb1Byb2Nlc3MsCiAKICAg
ICAgICAgICAgICAgICAgZmxvYXQgZGJUaHJlc2hvbGQsCkBAIC02Niw3ICs3MSw4IEBAIHB1Ymxp
YzoKIAogcHJvdGVjdGVkOgogICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKLSAgICAKKyAgICB1bnNp
Z25lZCBtX251bWJlck9mQ2hhbm5lbHM7CisKICAgICBmbG9hdCBtX2RldGVjdG9yQXZlcmFnZTsK
ICAgICBmbG9hdCBtX2NvbXByZXNzb3JHYWluOwogCkBAIC04MSw4ICs4Nyw3IEBAIHByb3RlY3Rl
ZDoKICAgICB1bnNpZ25lZCBtX2xhc3RQcmVEZWxheUZyYW1lczsKICAgICB2b2lkIHNldFByZURl
bGF5VGltZShmbG9hdCk7CiAKLSAgICBBdWRpb0Zsb2F0QXJyYXkgbV9wcmVEZWxheUJ1ZmZlckw7
Ci0gICAgQXVkaW9GbG9hdEFycmF5IG1fcHJlRGVsYXlCdWZmZXJSOworICAgIFZlY3RvcjxPd25Q
dHI8QXVkaW9GbG9hdEFycmF5PiA+IG1fcHJlRGVsYXlCdWZmZXJzOwogICAgIGludCBtX3ByZURl
bGF5UmVhZEluZGV4OwogICAgIGludCBtX3ByZURlbGF5V3JpdGVJbmRleDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcAppbmRleCBl
YThiNTg5MjIzNTZhYTEzNjUxMzJhZWYzMWZhYWY2MDNmNzQ1NDI3Li42NTFkMWM1YzM3MDhhMGJm
ZWQzODA4YjdhYmY4OWRjMWU0MmVmMjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcApAQCAtMzYsMTQgKzM2LDEwIEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OkR5bmFtaWNzQ29tcHJl
c3Nvck5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIDog
QXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCisgICAgOiBBdWRpb0Jhc2ljUHJvY2Vzc29y
Tm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQogewotICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBB
dWRpb05vZGVJbnB1dCh0aGlzKSkpOwotICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9O
b2RlT3V0cHV0KHRoaXMsIDIpKSk7Ci0gICAgCisgICAgbV9wcm9jZXNzb3IgPSBhZG9wdFB0cihu
ZXcgRHluYW1pY3NDb21wcmVzc29yKGNvbnRleHQtPnNhbXBsZVJhdGUoKSkpOyAgICAKICAgICBz
ZXROb2RlVHlwZShOb2RlVHlwZUR5bmFtaWNzQ29tcHJlc3Nvcik7Ci0gICAgCi0gICAgaW5pdGlh
bGl6ZSgpOwogfQogCiBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjp+RHluYW1pY3NDb21wcmVzc29y
Tm9kZSgpCkBAIC01MSwzNyArNDcsNiBAQCBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjp+RHluYW1p
Y3NDb21wcmVzc29yTm9kZSgpCiAgICAgdW5pbml0aWFsaXplKCk7CiB9CiAKLXZvaWQgRHluYW1p
Y3NDb21wcmVzc29yTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAg
IEF1ZGlvQnVzKiBvdXRwdXRCdXMgPSBvdXRwdXQoMCktPmJ1cygpOwotICAgIEFTU0VSVChvdXRw
dXRCdXMpOwotCi0gICAgbV9keW5hbWljc0NvbXByZXNzb3ItPnByb2Nlc3MoaW5wdXQoMCktPmJ1
cygpLCBvdXRwdXRCdXMsIGZyYW1lc1RvUHJvY2Vzcyk7Ci19Ci0KLXZvaWQgRHluYW1pY3NDb21w
cmVzc29yTm9kZTo6cmVzZXQoKQotewotICAgIG1fZHluYW1pY3NDb21wcmVzc29yLT5yZXNldCgp
OwotfQotCi12b2lkIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OmluaXRpYWxpemUoKQotewotICAg
IGlmIChpc0luaXRpYWxpemVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEF1ZGlvTm9kZTo6
aW5pdGlhbGl6ZSgpOyAgICAKLSAgICBtX2R5bmFtaWNzQ29tcHJlc3NvciA9IGFkb3B0UHRyKG5l
dyBEeW5hbWljc0NvbXByZXNzb3IodHJ1ZSwgc2FtcGxlUmF0ZSgpKSk7Ci19Ci0KLXZvaWQgRHlu
YW1pY3NDb21wcmVzc29yTm9kZTo6dW5pbml0aWFsaXplKCkKLXsKLSAgICBpZiAoIWlzSW5pdGlh
bGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9keW5hbWljc0NvbXByZXNzb3IuY2xl
YXIoKTsKLSAgICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgpOwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5oIGIvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5oCmluZGV4IGQ3MThhYjM0MWNj
MDFlMTg4Y2YyMTMwNTY3NDY1ZjA0OGJkYTA1Y2IuLjNjZDFjYWFiY2U0YzVlMDYzOGFhOWQzN2I2
ZjVjODI3ZTc1NTM3NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFt
aWNzQ29tcHJlc3Nvck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWlj
c0NvbXByZXNzb3JOb2RlLmgKQEAgLTI1LDE0ICsyNSwxNCBAQAogI2lmbmRlZiBEeW5hbWljc0Nv
bXByZXNzb3JOb2RlX2gKICNkZWZpbmUgRHluYW1pY3NDb21wcmVzc29yTm9kZV9oCiAKLSNpbmNs
dWRlICJBdWRpb05vZGUuaCIKKyNpbmNsdWRlICJBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oIgog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBE
eW5hbWljc0NvbXByZXNzb3I7CiAgICAgCi1jbGFzcyBEeW5hbWljc0NvbXByZXNzb3JOb2RlIDog
cHVibGljIEF1ZGlvTm9kZSB7CitjbGFzcyBEeW5hbWljc0NvbXByZXNzb3JOb2RlIDogcHVibGlj
IEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxEeW5hbWljc0NvbXByZXNzb3JOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBm
bG9hdCBzYW1wbGVSYXRlKQogICAgIHsKQEAgLTQxLDE2ICs0MSw4IEBAIHB1YmxpYzoKICAgICAK
ICAgICB2aXJ0dWFsIH5EeW5hbWljc0NvbXByZXNzb3JOb2RlKCk7CiAgICAgCi0gICAgLy8gQXVk
aW9Ob2RlCi0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7
Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUo
KTsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pbml0aWFsaXplKCk7Ci0KIHByaXZhdGU6CiAgICAgRHlu
YW1pY3NDb21wcmVzc29yTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKLQot
ICAgIE93blB0cjxEeW5hbWljc0NvbXByZXNzb3I+IG1fZHluYW1pY3NDb21wcmVzc29yOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126413</attachid>
            <date>2012-02-09 17:45:22 -0800</date>
            <delta_ts>2012-02-09 23:09:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77856-20120210094956.patch</filename>
            <type>text/plain</type>
            <size>23662</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3Mjk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzkyNDIwZWUwNTUyZWIw
YzVkYmEzMWRmNGE2MTc0ZGQ4NDZlM2E0Yi4uMjZlMjk0MDkxY2RlMjJmZGJkZmEwMjFmZWZhOGNk
N2QyMDlhMmUzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTAyLTA5ICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBIYXZlIHRoZSBEeW5h
bWljc0NvbXByZXNzb3JOb2RlIHN1cHBvcnQgbXVsdGktY2hhbm5lbCBkYXRhCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzg1NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyByZXF1aXJl
ZC4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6OkR5bmFtaWNzQ29tcHJlc3Nvcik6
CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6OnNldEVtcGhhc2lzU3RhZ2VQ
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcjo6cHJvY2Vz
cyk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6OnJlc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcjo6c2V0TnVtYmVyT2ZDaGFubmVscyk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXBy
ZXNzb3IuaDoKKyAgICAgICAgKER5bmFtaWNzQ29tcHJlc3Nvcik6CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6fkR5bmFtaWNzQ29tcHJl
c3Nvcktlcm5lbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFt
aWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0TnVtYmVyT2ZDaGFubmVscyk6CisgICAgICAgIChXZWJD
b3JlOjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnNldFByZURlbGF5VGltZSk6CisgICAgICAg
IChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnByb2Nlc3MpOgorICAgICAgICAo
V2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpyZXNldCk6CisgICAgICAgICogcGxh
dGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmg6CisgICAgICAgIChEeW5hbWlj
c0NvbXByZXNzb3JLZXJuZWwpOgorICAgICAgICAqIHdlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nv
ck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yTm9kZTo6RHlu
YW1pY3NDb21wcmVzc29yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNz
b3JOb2RlOjppbml0aWFsaXplKToKKyAgICAgICAgKiB3ZWJhdWRpby9EeW5hbWljc0NvbXByZXNz
b3JOb2RlLmg6CisgICAgICAgIChEeW5hbWljc0NvbXByZXNzb3JOb2RlKToKKwogMjAxMi0wMi0w
OSAgSm9obiBCYXRlcyAgPGpiYXRlc0Bnb29nbGUuY29tPgogCiAgICAgICAgIFtDaHJvbWl1bV0g
QWRkIGNocm9taXVtLXN0eWxlIHRyYWNpbmcgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5jcHAKaW5kZXggYTU1MjA1NzA1
ZDk1MTBiZjIwZDlkYjM1NDg3OTM5NjVlZTAyZWUxZC4uNmFlYjYyOWJlYWVhY2ZlNjRiNGRkZjEx
MjAyMmYwM2VlYjRlODAxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vRHluYW1pY3NDb21wcmVzc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9EeW5hbWljc0NvbXByZXNzb3IuY3BwCkBAIC00MCwxNiArNDAsMjAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgQXVkaW9VdGlsaXRpZXM7CiAgICAgCi1EeW5h
bWljc0NvbXByZXNzb3I6OkR5bmFtaWNzQ29tcHJlc3Nvcihib29sIGlzU3RlcmVvLCBmbG9hdCBz
YW1wbGVSYXRlKQotICAgIDogbV9pc1N0ZXJlbyhpc1N0ZXJlbykKLSAgICAsIG1fc2FtcGxlUmF0
ZShzYW1wbGVSYXRlKQotICAgICwgbV9jb21wcmVzc29yKHNhbXBsZVJhdGUpCitEeW5hbWljc0Nv
bXByZXNzb3I6OkR5bmFtaWNzQ29tcHJlc3NvcihmbG9hdCBzYW1wbGVSYXRlLCB1bnNpZ25lZCBu
dW1iZXJPZkNoYW5uZWxzKQorICAgIDogbV9udW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5l
bHMpCisgICAgLCBtX2NvbXByZXNzb3Ioc2FtcGxlUmF0ZSwgbnVtYmVyT2ZDaGFubmVscykKIHsK
ICAgICAvLyBVbmluaXRpYWxpemVkIHN0YXRlIC0gZm9yIHBhcmFtZXRlciByZWNhbGN1bGF0aW9u
LgogICAgIG1fbGFzdEZpbHRlclN0YWdlUmF0aW8gPSAtMTsKICAgICBtX2xhc3RBbmNob3IgPSAt
MTsKICAgICBtX2xhc3RGaWx0ZXJTdGFnZUdhaW4gPSAtMTsKIAorICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpIHsKKyAgICAgICAgbV9wcmVGaWx0ZXJQ
YWNrcy5hcHBlbmQoYWRvcHRQdHIobmV3IFplcm9Qb2xlRmlsdGVyUGFjazQoKSkpOworICAgICAg
ICBtX3Bvc3RGaWx0ZXJQYWNrcy5hcHBlbmQoYWRvcHRQdHIobmV3IFplcm9Qb2xlRmlsdGVyUGFj
azQoKSkpOworICAgIH0KKwogICAgIGluaXRpYWxpemVQYXJhbWV0ZXJzKCk7CiB9CiAKQEAgLTkz
LDE4ICs5NywyMiBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6c2V0RW1waGFzaXNTdGFnZVBh
cmFtZXRlcnModW5zaWduZWQgc3RhZ2VJbmRleCwgZmxvYXQgZwogICAgIGZsb2F0IHIxID0gZXhw
ZigtZjEgKiBwaUZsb2F0KTsKICAgICBmbG9hdCByMiA9IGV4cGYoLWYyICogcGlGbG9hdCk7CiAK
LSAgICAvLyBTZXQgcHJlLWZpbHRlciB6ZXJvIGFuZCBwb2xlIHRvIGNyZWF0ZSBhbiBlbXBoYXNp
cyBmaWx0ZXIuCi0gICAgbV9wcmVGaWx0ZXJbc3RhZ2VJbmRleF0uc2V0WmVybyhyMSk7Ci0gICAg
bV9wcmVGaWx0ZXJbc3RhZ2VJbmRleF0uc2V0UG9sZShyMik7Ci0gICAgbV9wcmVGaWx0ZXJSW3N0
YWdlSW5kZXhdLnNldFplcm8ocjEpOwotICAgIG1fcHJlRmlsdGVyUltzdGFnZUluZGV4XS5zZXRQ
b2xlKHIyKTsKLQotICAgIC8vIFNldCBwb3N0LWZpbHRlciB3aXRoIHplcm8gYW5kIHBvbGUgcmV2
ZXJzZWQgdG8gY3JlYXRlIHRoZSBkZS1lbXBoYXNpcyBmaWx0ZXIuCi0gICAgLy8gSWYgdGhlcmUg
d2VyZSBubyBjb21wcmVzc29yIGtlcm5lbCBpbiBiZXR3ZWVuLCB0aGV5IHdvdWxkIGNhbmNlbCBl
YWNoIG90aGVyIG91dCAoYWxscGFzcyBmaWx0ZXIpLgotICAgIG1fcG9zdEZpbHRlcltzdGFnZUlu
ZGV4XS5zZXRaZXJvKHIyKTsKLSAgICBtX3Bvc3RGaWx0ZXJbc3RhZ2VJbmRleF0uc2V0UG9sZShy
MSk7Ci0gICAgbV9wb3N0RmlsdGVyUltzdGFnZUluZGV4XS5zZXRaZXJvKHIyKTsKLSAgICBtX3Bv
c3RGaWx0ZXJSW3N0YWdlSW5kZXhdLnNldFBvbGUocjEpOworICAgIEFTU0VSVChtX251bWJlck9m
Q2hhbm5lbHMgPT0gbV9wcmVGaWx0ZXJQYWNrcy5zaXplKCkpOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgIFplcm9Qb2xl
KiBwcmVGaWx0ZXIgPSAmKG1fcHJlRmlsdGVyUGFja3NbaV0tPmZpbHRlcnNbc3RhZ2VJbmRleF0p
OworICAgICAgICAvLyBTZXQgcHJlLWZpbHRlciB6ZXJvIGFuZCBwb2xlIHRvIGNyZWF0ZSBhbiBl
bXBoYXNpcyBmaWx0ZXIuCisgICAgICAgIHByZUZpbHRlci0+c2V0WmVybyhyMSk7CisgICAgICAg
IHByZUZpbHRlci0+c2V0UG9sZShyMik7CisKKyAgICAgICAgLy8gU2V0IHBvc3QtZmlsdGVyIHdp
dGggemVybyBhbmQgcG9sZSByZXZlcnNlZCB0byBjcmVhdGUgdGhlIGRlLWVtcGhhc2lzIGZpbHRl
ci4KKyAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBubyBjb21wcmVzc29yIGtlcm5lbCBpbiBiZXR3
ZWVuLCB0aGV5IHdvdWxkIGNhbmNlbCBlYWNoIG90aGVyIG91dCAoYWxscGFzcyBmaWx0ZXIpLgor
ICAgICAgICBaZXJvUG9sZSogcG9zdEZpbHRlciA9ICYobV9wb3N0RmlsdGVyUGFja3NbaV0tPmZp
bHRlcnNbc3RhZ2VJbmRleF0pOworICAgICAgICBwb3N0RmlsdGVyLT5zZXRaZXJvKHIyKTsKKyAg
ICAgICAgcG9zdEZpbHRlci0+c2V0UG9sZShyMSk7CisgICAgfQorCisKIH0KIAogdm9pZCBEeW5h
bWljc0NvbXByZXNzb3I6OnNldEVtcGhhc2lzUGFyYW1ldGVycyhmbG9hdCBnYWluLCBmbG9hdCBh
bmNob3JGcmVxLCBmbG9hdCBmaWx0ZXJTdGFnZVJhdGlvKQpAQCAtMTE3LDE4ICsxMjUsMzEgQEAg
dm9pZCBEeW5hbWljc0NvbXByZXNzb3I6OnNldEVtcGhhc2lzUGFyYW1ldGVycyhmbG9hdCBnYWlu
LCBmbG9hdCBhbmNob3JGcmVxLCBmbG8KIAogdm9pZCBEeW5hbWljc0NvbXByZXNzb3I6OnByb2Nl
c3MoY29uc3QgQXVkaW9CdXMqIHNvdXJjZUJ1cywgQXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzLCB1
bnNpZ25lZCBmcmFtZXNUb1Byb2Nlc3MpCiB7Ci0gICAgY29uc3QgZmxvYXQqIHNvdXJjZUwgPSBz
b3VyY2VCdXMtPmNoYW5uZWwoMCktPmRhdGEoKTsKLSAgICBjb25zdCBmbG9hdCogc291cmNlUjsK
LQotICAgIGlmIChzb3VyY2VCdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA+IDEpCi0gICAgICAgIHNv
dXJjZVIgPSBzb3VyY2VCdXMtPmNoYW5uZWwoMSktPmRhdGEoKTsKLSAgICBlbHNlCi0gICAgICAg
IHNvdXJjZVIgPSBzb3VyY2VMOwotCi0gICAgQVNTRVJUKGRlc3RpbmF0aW9uQnVzLT5udW1iZXJP
ZkNoYW5uZWxzKCkgPT0gMik7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyA9IGRlc3Rp
bmF0aW9uQnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZTb3Vy
Y2VDaGFubmVscyA9IGRlc3RpbmF0aW9uQnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7CisKKyAgICB0
eXBlZGVmIGNvbnN0IGZsb2F0KiBjb25zdEZsb2F0UHRyOworICAgIGNvbnN0RmxvYXRQdHIgc291
cmNlQ2hhbm5lbHNbbnVtYmVyT2ZDaGFubmVsc107CisgICAgZmxvYXQqIGRlc3RpbmF0aW9uQ2hh
bm5lbHNbbnVtYmVyT2ZDaGFubmVsc107CisKKyAgICBzd2l0Y2ggKG51bWJlck9mQ2hhbm5lbHMp
IHsKKyAgICBjYXNlIDI6IC8vIHN0ZXJlbworICAgICAgICBzb3VyY2VDaGFubmVsc1swXSA9IHNv
dXJjZUJ1cy0+Y2hhbm5lbCgwKS0+ZGF0YSgpOworCisgICAgICAgIGlmIChudW1iZXJPZlNvdXJj
ZUNoYW5uZWxzID4gMSkKKyAgICAgICAgICAgIHNvdXJjZUNoYW5uZWxzWzFdID0gc291cmNlQnVz
LT5jaGFubmVsKDEpLT5kYXRhKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNvdXJjZUNo
YW5uZWxzWzFdID0gc291cmNlQ2hhbm5lbHNbMF07CisKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgLy8gRklYTUUgOiBzdXBwb3J0IG90aGVyIGxheW91dHMKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIAotICAgIGZsb2F0
KiBkZXN0aW5hdGlvbkwgPSBkZXN0aW5hdGlvbkJ1cy0+Y2hhbm5lbCgwKS0+bXV0YWJsZURhdGEo
KTsKLSAgICBmbG9hdCogZGVzdGluYXRpb25SID0gZGVzdGluYXRpb25CdXMtPmNoYW5uZWwoMSkt
Pm11dGFibGVEYXRhKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hh
bm5lbHM7ICsraSkKKyAgICAgICAgZGVzdGluYXRpb25DaGFubmVsc1tpXSA9IGRlc3RpbmF0aW9u
QnVzLT5jaGFubmVsKGkpLT5tdXRhYmxlRGF0YSgpOwogCiAgICAgZmxvYXQgZmlsdGVyU3RhZ2VH
YWluID0gcGFyYW1ldGVyVmFsdWUoUGFyYW1GaWx0ZXJTdGFnZUdhaW4pOwogICAgIGZsb2F0IGZp
bHRlclN0YWdlUmF0aW8gPSBwYXJhbWV0ZXJWYWx1ZShQYXJhbUZpbHRlclN0YWdlUmF0aW8pOwpA
QCAtMTQ0LDE2ICsxNjUsMTUgQEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3I6OnByb2Nlc3MoY29u
c3QgQXVkaW9CdXMqIHNvdXJjZUJ1cywgQXVkaW9CdXMqIGRlc3RpbmF0aW8KIAogICAgIC8vIEFw
cGx5IHByZS1lbXBoYXNpcyBmaWx0ZXIuCiAgICAgLy8gTm90ZSB0aGF0IHRoZSBmaW5hbCB0aHJl
ZSBzdGFnZXMgYXJlIGNvbXB1dGVkIGluLXBsYWNlIGluIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIu
Ci0gICAgbV9wcmVGaWx0ZXJbMF0ucHJvY2Vzcyhzb3VyY2VMLCBkZXN0aW5hdGlvbkwsIGZyYW1l
c1RvUHJvY2Vzcyk7Ci0gICAgbV9wcmVGaWx0ZXJbMV0ucHJvY2VzcyhkZXN0aW5hdGlvbkwsIGRl
c3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICBtX3ByZUZpbHRlclsyXS5wcm9jZXNz
KGRlc3RpbmF0aW9uTCwgZGVzdGluYXRpb25MLCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIG1fcHJl
RmlsdGVyWzNdLnByb2Nlc3MoZGVzdGluYXRpb25MLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJv
Y2Vzcyk7Ci0KLSAgICBpZiAoaXNTdGVyZW8oKSkgewotICAgICAgICBtX3ByZUZpbHRlclJbMF0u
cHJvY2Vzcyhzb3VyY2VSLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgICAg
IG1fcHJlRmlsdGVyUlsxXS5wcm9jZXNzKGRlc3RpbmF0aW9uUiwgZGVzdGluYXRpb25SLCBmcmFt
ZXNUb1Byb2Nlc3MpOwotICAgICAgICBtX3ByZUZpbHRlclJbMl0ucHJvY2VzcyhkZXN0aW5hdGlv
blIsIGRlc3RpbmF0aW9uUiwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgbV9wcmVGaWx0ZXJS
WzNdLnByb2Nlc3MoZGVzdGluYXRpb25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgewor
ICAgICAgICBjb25zdCBmbG9hdCogc291cmNlRGF0YSA9IHNvdXJjZUNoYW5uZWxzW2ldOworICAg
ICAgICBmbG9hdCogZGVzdGluYXRpb25EYXRhID0gZGVzdGluYXRpb25DaGFubmVsc1tpXTsKKyAg
ICAgICAgWmVyb1BvbGUqIHByZUZpbHRlcnMgPSBtX3ByZUZpbHRlclBhY2tzW2ldLT5maWx0ZXJz
OworCisgICAgICAgIHByZUZpbHRlcnNbMF0ucHJvY2Vzcyhzb3VyY2VEYXRhLCBkZXN0aW5hdGlv
bkRhdGEsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIHByZUZpbHRlcnNbMV0ucHJvY2Vzcyhk
ZXN0aW5hdGlvbkRhdGEsIGRlc3RpbmF0aW9uRGF0YSwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICAg
ICAgcHJlRmlsdGVyc1syXS5wcm9jZXNzKGRlc3RpbmF0aW9uRGF0YSwgZGVzdGluYXRpb25EYXRh
LCBmcmFtZXNUb1Byb2Nlc3MpOworICAgICAgICBwcmVGaWx0ZXJzWzNdLnByb2Nlc3MoZGVzdGlu
YXRpb25EYXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vzcyk7CiAgICAgfQogCiAg
ICAgZmxvYXQgZGJUaHJlc2hvbGQgPSBwYXJhbWV0ZXJWYWx1ZShQYXJhbVRocmVzaG9sZCk7CkBA
IC0xNzcsMTAgKzE5NywxMCBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6cHJvY2Vzcyhjb25z
dCBBdWRpb0J1cyogc291cmNlQnVzLCBBdWRpb0J1cyogZGVzdGluYXRpbwogCiAgICAgLy8gQXBw
bHkgY29tcHJlc3Npb24gdG8gdGhlIHByZS1maWx0ZXJlZCBzaWduYWwuCiAgICAgLy8gVGhlIHBy
b2Nlc3NpbmcgaXMgcGVyZm9ybWVkIGluIHBsYWNlLgotICAgIG1fY29tcHJlc3Nvci5wcm9jZXNz
KGRlc3RpbmF0aW9uTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkwsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25SLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RpbmF0aW9uUiwKKyAgICBjb25zdEZsb2F0UHRyKiBpbnBsYWNlU291cmNlQ2hh
bm5lbHMgPSAoY29uc3RGbG9hdFB0ciopZGVzdGluYXRpb25DaGFubmVsczsKKyAgICBtX2NvbXBy
ZXNzb3IucHJvY2VzcyhpbnBsYWNlU291cmNlQ2hhbm5lbHMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdGluYXRpb25DaGFubmVscywKKyAgICAgICAgICAgICAgICAgICAgICAgICBudW1i
ZXJPZkNoYW5uZWxzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1RvUHJvY2VzcywK
IAogICAgICAgICAgICAgICAgICAgICAgICAgIGRiVGhyZXNob2xkLApAQCAtMTk4LDE2ICsyMTgs
MTQgQEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3I6OnByb2Nlc3MoY29uc3QgQXVkaW9CdXMqIHNv
dXJjZUJ1cywgQXVkaW9CdXMqIGRlc3RpbmF0aW8KICAgICAgICAgICAgICAgICAgICAgICAgICAp
OwogCiAgICAgLy8gQXBwbHkgZGUtZW1waGFzaXMgZmlsdGVyLgotICAgIG1fcG9zdEZpbHRlclsw
XS5wcm9jZXNzKGRlc3RpbmF0aW9uTCwgZGVzdGluYXRpb25MLCBmcmFtZXNUb1Byb2Nlc3MpOwot
ICAgIG1fcG9zdEZpbHRlclsxXS5wcm9jZXNzKGRlc3RpbmF0aW9uTCwgZGVzdGluYXRpb25MLCBm
cmFtZXNUb1Byb2Nlc3MpOwotICAgIG1fcG9zdEZpbHRlclsyXS5wcm9jZXNzKGRlc3RpbmF0aW9u
TCwgZGVzdGluYXRpb25MLCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIG1fcG9zdEZpbHRlclszXS5w
cm9jZXNzKGRlc3RpbmF0aW9uTCwgZGVzdGluYXRpb25MLCBmcmFtZXNUb1Byb2Nlc3MpOwotCi0g
ICAgaWYgKGlzU3RlcmVvKCkpIHsKLSAgICAgICAgbV9wb3N0RmlsdGVyUlswXS5wcm9jZXNzKGRl
c3RpbmF0aW9uUiwgZGVzdGluYXRpb25SLCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgICAgICBtX3Bv
c3RGaWx0ZXJSWzFdLnByb2Nlc3MoZGVzdGluYXRpb25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1Rv
UHJvY2Vzcyk7Ci0gICAgICAgIG1fcG9zdEZpbHRlclJbMl0ucHJvY2VzcyhkZXN0aW5hdGlvblIs
IGRlc3RpbmF0aW9uUiwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgbV9wb3N0RmlsdGVyUlsz
XS5wcm9jZXNzKGRlc3RpbmF0aW9uUiwgZGVzdGluYXRpb25SLCBmcmFtZXNUb1Byb2Nlc3MpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpIHsKKyAg
ICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uRGF0YSA9IGRlc3RpbmF0aW9uQ2hhbm5lbHNbaV07Cisg
ICAgICAgIFplcm9Qb2xlKiBwb3N0RmlsdGVycyA9IG1fcG9zdEZpbHRlclBhY2tzW2ldLT5maWx0
ZXJzOworCisgICAgICAgIHBvc3RGaWx0ZXJzWzBdLnByb2Nlc3MoZGVzdGluYXRpb25EYXRhLCBk
ZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIHBvc3RGaWx0ZXJzWzFd
LnByb2Nlc3MoZGVzdGluYXRpb25EYXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vz
cyk7CisgICAgICAgIHBvc3RGaWx0ZXJzWzJdLnByb2Nlc3MoZGVzdGluYXRpb25EYXRhLCBkZXN0
aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIHBvc3RGaWx0ZXJzWzNdLnBy
b2Nlc3MoZGVzdGluYXRpb25EYXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vzcyk7
CiAgICAgfQogfQogCkBAIC0yMTcsMTYgKzIzNSwzMiBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nv
cjo6cmVzZXQoKQogICAgIG1fbGFzdEFuY2hvciA9IC0xOwogICAgIG1fbGFzdEZpbHRlclN0YWdl
R2FpbiA9IC0xOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDQ7ICsraSkgewotICAg
ICAgICBtX3ByZUZpbHRlcltpXS5yZXNldCgpOwotICAgICAgICBtX3ByZUZpbHRlclJbaV0ucmVz
ZXQoKTsKLSAgICAgICAgbV9wb3N0RmlsdGVyW2ldLnJlc2V0KCk7Ci0gICAgICAgIG1fcG9zdEZp
bHRlclJbaV0ucmVzZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWwgPSAwOyBjaGFubmVs
IDwgbV9udW1iZXJPZkNoYW5uZWxzOyArK2NoYW5uZWwpIHsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBzdGFnZUluZGV4ID0gMDsgc3RhZ2VJbmRleCA8IDQ7ICsrc3RhZ2VJbmRleCkgeworICAgICAg
ICAgICAgbV9wcmVGaWx0ZXJQYWNrc1tjaGFubmVsXS0+ZmlsdGVyc1tzdGFnZUluZGV4XS5yZXNl
dCgpOworICAgICAgICAgICAgbV9wb3N0RmlsdGVyUGFja3NbY2hhbm5lbF0tPmZpbHRlcnNbc3Rh
Z2VJbmRleF0ucmVzZXQoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIG1fY29tcHJlc3Nvci5y
ZXNldCgpOwogfQogCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6c2V0TnVtYmVyT2ZDaGFubmVs
cyh1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKQoreworICAgIGlmIChtX3ByZUZpbHRlclBhY2tz
LnNpemUoKSA9PSBudW1iZXJPZkNoYW5uZWxzKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3By
ZUZpbHRlclBhY2tzLmNsZWFyKCk7CisgICAgbV9wb3N0RmlsdGVyUGFja3MuY2xlYXIoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAg
ICAgIG1fcHJlRmlsdGVyUGFja3MuYXBwZW5kKGFkb3B0UHRyKG5ldyBaZXJvUG9sZUZpbHRlclBh
Y2s0KCkpKTsKKyAgICAgICAgbV9wb3N0RmlsdGVyUGFja3MuYXBwZW5kKGFkb3B0UHRyKG5ldyBa
ZXJvUG9sZUZpbHRlclBhY2s0KCkpKTsKKyAgICB9CisKKyAgICBtX2NvbXByZXNzb3Iuc2V0TnVt
YmVyT2ZDaGFubmVscyhudW1iZXJPZkNoYW5uZWxzKTsKKyAgICBtX251bWJlck9mQ2hhbm5lbHMg
PSBudW1iZXJPZkNoYW5uZWxzOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9EeW5hbWljc0NvbXByZXNzb3IuaAppbmRleCBlMDExNWVlMjczZTQzMGY5YzI4ZjU2NGJm
YzljYzQ0ZWJjNjZjNjllLi41YmY1MzM4NTI1ZWZlNDcxYjVmYWMzOTAxZWQ3Y2FjYjQ2YTU5YzIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXBy
ZXNzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXBy
ZXNzb3IuaApAQCAtNjIsMjUgKzYyLDI2IEBAIHB1YmxpYzoKICAgICAgICAgUGFyYW1MYXN0CiAg
ICAgfTsKIAotICAgIER5bmFtaWNzQ29tcHJlc3Nvcihib29sIGlzU3RlcmVvLCBmbG9hdCBzYW1w
bGVSYXRlKTsKKyAgICBEeW5hbWljc0NvbXByZXNzb3IoZmxvYXQgc2FtcGxlUmF0ZSwgdW5zaWdu
ZWQgbnVtYmVyT2ZDaGFubmVscyk7CiAKICAgICB2b2lkIHByb2Nlc3MoY29uc3QgQXVkaW9CdXMq
IHNvdXJjZUJ1cywgQXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzLCB1bnNpZ25lZCBmcmFtZXNUb1By
b2Nlc3MpOwogICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIHNldE51bWJlck9mQ2hhbm5lbHMo
dW5zaWduZWQpOwogCiAgICAgZmxvYXQgcGFyYW1ldGVyVmFsdWUodW5zaWduZWQgcGFyYW1ldGVy
SUQpOwogCi0gICAgYm9vbCBpc1N0ZXJlbygpIGNvbnN0IHsgcmV0dXJuIG1faXNTdGVyZW87IH0K
ICAgICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9CiAg
ICAgZmxvYXQgbnlxdWlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZSAvIDI7IH0KIAog
cHJvdGVjdGVkOgorICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZDaGFubmVsczsKKwogICAgIC8vIG1f
cGFyYW1ldGVycyBob2xkcyB0aGUgdHdlYWthYmxlIGNvbXByZXNzb3IgcGFyYW1ldGVycy4KICAg
ICAvLyBGSVhNRTogZXhwb3NlIHNvbWUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IG9uZXMgKHN1Y2gg
YXMgdGhyZXNob2xkLCBhdHRhY2ssIHJlbGVhc2UpCiAgICAgLy8gYXMgRHluYW1pY3NDb21wcmVz
c29yTm9kZSBhdHRyaWJ1dGVzLgogICAgIGZsb2F0IG1fcGFyYW1ldGVyc1tQYXJhbUxhc3RdOwog
ICAgIHZvaWQgaW5pdGlhbGl6ZVBhcmFtZXRlcnMoKTsKIAotICAgIGJvb2wgbV9pc1N0ZXJlbzsK
ICAgICBmbG9hdCBtX3NhbXBsZVJhdGU7CiAKICAgICAvLyBFbXBoYXNpcyBmaWx0ZXIgY29udHJv
bHMuCkBAIC04OCwxMSArODksMTMgQEAgcHJvdGVjdGVkOgogICAgIGZsb2F0IG1fbGFzdEFuY2hv
cjsKICAgICBmbG9hdCBtX2xhc3RGaWx0ZXJTdGFnZUdhaW47CiAKKyAgICB0eXBlZGVmIHN0cnVj
dCB7CisgICAgICAgIFplcm9Qb2xlIGZpbHRlcnNbNF07CisgICAgfSBaZXJvUG9sZUZpbHRlclBh
Y2s0OworCiAgICAgLy8gRW1waGFzaXMgZmlsdGVycy4KLSAgICBaZXJvUG9sZSBtX3ByZUZpbHRl
cls0XTsKLSAgICBaZXJvUG9sZSBtX3ByZUZpbHRlclJbNF07Ci0gICAgWmVyb1BvbGUgbV9wb3N0
RmlsdGVyWzRdOwotICAgIFplcm9Qb2xlIG1fcG9zdEZpbHRlclJbNF07CisgICAgVmVjdG9yPE93
blB0cjxaZXJvUG9sZUZpbHRlclBhY2s0PiA+IG1fcHJlRmlsdGVyUGFja3M7CisgICAgVmVjdG9y
PE93blB0cjxaZXJvUG9sZUZpbHRlclBhY2s0PiA+IG1fcG9zdEZpbHRlclBhY2tzOwogCiAgICAg
dm9pZCBzZXRFbXBoYXNpc1N0YWdlUGFyYW1ldGVycyh1bnNpZ25lZCBzdGFnZUluZGV4LCBmbG9h
dCBnYWluLCBmbG9hdCBub3JtYWxpemVkRnJlcXVlbmN5IC8qIDAgLT4gMSAqLyk7CiAgICAgdm9p
ZCBzZXRFbXBoYXNpc1BhcmFtZXRlcnMoZmxvYXQgZ2FpbiwgZmxvYXQgYW5jaG9yRnJlcSwgZmxv
YXQgZmlsdGVyU3RhZ2VSYXRpbyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcAppbmRleCBhMzIyYTMzMDI1
OTYwYzg5Y2I2YmUwNmMyNWI4NzczNzZkYTllMzZjLi5hZDRhZDY1NDNiMThiYmQ2M2FmZTdlMGQ3
Mjc1ZTRlZGRlMGNjYzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAKQEAgLTUyLDIwICs1MiwzOSBA
QCBzdGF0aWMgZmxvYXQgc2F0dXJhdGUoZmxvYXQgeCwgZmxvYXQgaykKICAgICByZXR1cm4gMSAt
IGV4cCgtayAqIHgpOwogfQogCi1EeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OkR5bmFtaWNzQ29t
cHJlc3Nvcktlcm5lbChmbG9hdCBzYW1wbGVSYXRlKQorRHluYW1pY3NDb21wcmVzc29yS2VybmVs
OjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwoZmxvYXQgc2FtcGxlUmF0ZSwgdW5zaWduZWQgbnVt
YmVyT2ZDaGFubmVscykKICAgICA6IG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQorICAgICwgbV9u
dW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5lbHMpCiAgICAgLCBtX2xhc3RQcmVEZWxheUZy
YW1lcyhEZWZhdWx0UHJlRGVsYXlGcmFtZXMpCi0gICAgLCBtX3ByZURlbGF5QnVmZmVyTChNYXhQ
cmVEZWxheUZyYW1lcykKLSAgICAsIG1fcHJlRGVsYXlCdWZmZXJSKE1heFByZURlbGF5RnJhbWVz
KQogICAgICwgbV9wcmVEZWxheVJlYWRJbmRleCgwKQogICAgICwgbV9wcmVEZWxheVdyaXRlSW5k
ZXgoRGVmYXVsdFByZURlbGF5RnJhbWVzKQogeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1iZXJPZkNoYW5uZWxzOyArK2kpCisgICAgICAgIG1fcHJlRGVsYXlCdWZmZXJzLmFwcGVu
ZChhZG9wdFB0cihuZXcgQXVkaW9GbG9hdEFycmF5KE1heFByZURlbGF5RnJhbWVzKSkpOworCiAg
ICAgLy8gSW5pdGlhbGl6ZXMgbW9zdCBtZW1iZXIgdmFyaWFibGVzCiAgICAgcmVzZXQoKTsKICAg
ICAKICAgICBtX21ldGVyaW5nUmVsZWFzZUsgPSBkaXNjcmV0ZVRpbWVDb25zdGFudEZvclNhbXBs
ZVJhdGUobWV0ZXJpbmdSZWxlYXNlVGltZUNvbnN0YW50LCBzYW1wbGVSYXRlKTsKIH0KIAorRHlu
YW1pY3NDb21wcmVzc29yS2VybmVsOjp+RHluYW1pY3NDb21wcmVzc29yS2VybmVsKCkKK3sKKyAg
ICBtX3ByZURlbGF5QnVmZmVycy5jbGVhcigpOworfQorCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nv
cktlcm5lbDo6c2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKQor
eworICAgIGlmIChudW1iZXJPZkNoYW5uZWxzID09IG1fbnVtYmVyT2ZDaGFubmVscykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9wcmVEZWxheUJ1ZmZlcnMuY2xlYXIoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKQorICAgICAgICBtX3ByZURl
bGF5QnVmZmVycy5hcHBlbmQoYWRvcHRQdHIobmV3IEF1ZGlvRmxvYXRBcnJheShNYXhQcmVEZWxh
eUZyYW1lcykpKTsKKworICAgIG1fbnVtYmVyT2ZDaGFubmVscz0gbnVtYmVyT2ZDaGFubmVsczsK
K30KKwogdm9pZCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnNldFByZURlbGF5VGltZShmbG9h
dCBwcmVEZWxheVRpbWUpCiB7CiAgICAgLy8gUmUtY29uZmlndXJlIGxvb2stYWhlYWQgc2VjdGlv
biBwcmUtZGVsYXkgaWYgZGVsYXkgdGltZSBoYXMgY2hhbmdlZC4KQEAgLTc1LDE3ICs5NCwxNyBA
QCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0UHJlRGVsYXlUaW1lKGZsb2F0IHBy
ZURlbGF5VGltZSkKICAgICAgICAgCiAgICAgaWYgKG1fbGFzdFByZURlbGF5RnJhbWVzICE9IHBy
ZURlbGF5RnJhbWVzKSB7CiAgICAgICAgIG1fbGFzdFByZURlbGF5RnJhbWVzID0gcHJlRGVsYXlG
cmFtZXM7Ci0gICAgICAgIG1fcHJlRGVsYXlCdWZmZXJMLnplcm8oKTsKLSAgICAgICAgbV9wcmVE
ZWxheUJ1ZmZlclIuemVybygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9w
cmVEZWxheUJ1ZmZlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX3ByZURlbGF5QnVmZmVy
c1tpXS0+emVybygpOworCiAgICAgICAgIG1fcHJlRGVsYXlSZWFkSW5kZXggPSAwOwogICAgICAg
ICBtX3ByZURlbGF5V3JpdGVJbmRleCA9IHByZURlbGF5RnJhbWVzOwogICAgIH0KIH0KIAotdm9p
ZCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZUws
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogZGVzdGluYXRp
b25MLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQq
IHNvdXJjZVIsIC8qIHN0ZXJlby1saW5rZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0KiBkZXN0aW5hdGlvblIsCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nv
cktlcm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlQnVmZmVyc1tdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uQnVmZmVyc1td
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVy
T2ZDaGFubmVscywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGZyYW1lc1RvUHJvY2VzcywKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgZGJUaHJlc2hvbGQsCkBAIC0xMDIsNyArMTIxLDggQEAgdm9pZCBEeW5hbWlj
c0NvbXByZXNzb3JLZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZUwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCByZWxlYXNlWm9uZTQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKIHsKLSAgICBib29sIGlzU3RlcmVv
ID0gZGVzdGluYXRpb25SOworICAgIEFTU0VSVChtX251bWJlck9mQ2hhbm5lbHMgPT0gbnVtYmVy
T2ZDaGFubmVscyk7CisKICAgICBmbG9hdCBzYW1wbGVSYXRlID0gdGhpcy0+c2FtcGxlUmF0ZSgp
OwogCiAgICAgZmxvYXQgZHJ5TWl4ID0gMSAtIGVmZmVjdEJsZW5kOwpAQCAtMTY0LDYgKzE4NCw3
IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBz
b3VyY2VMLAogCiAgICAgY29uc3QgaW50IG5EaXZpc2lvbnMgPSBmcmFtZXNUb1Byb2Nlc3MgLyBu
RGl2aXNpb25GcmFtZXM7CiAKKyAgICB1bnNpZ25lZCBmcmFtZUluZGV4ID0gMDsKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG5EaXZpc2lvbnM7ICsraSkgewogICAgICAgICAvLyB+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KICAgICAgICAgLy8gQ2FsY3VsYXRlIGRlc2lyZWQgZ2Fp
bgpAQCAtMjQ3LDggKzI2OCw2IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9j
ZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2VMLAogICAgICAgICAvLyB+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn4KIAogICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdCogZGVsYXlCdWZm
ZXJMID0gbV9wcmVEZWxheUJ1ZmZlckwuZGF0YSgpOwotICAgICAgICAgICAgZmxvYXQqIGRlbGF5
QnVmZmVyUiA9IG1fcHJlRGVsYXlCdWZmZXJSLmRhdGEoKTsKICAgICAgICAgICAgIGludCBwcmVE
ZWxheVJlYWRJbmRleCA9IG1fcHJlRGVsYXlSZWFkSW5kZXg7CiAgICAgICAgICAgICBpbnQgcHJl
RGVsYXlXcml0ZUluZGV4ID0gbV9wcmVEZWxheVdyaXRlSW5kZXg7CiAgICAgICAgICAgICBmbG9h
dCBkZXRlY3RvckF2ZXJhZ2UgPSBtX2RldGVjdG9yQXZlcmFnZTsKQEAgLTI1NiwzMiArMjc1LDE5
IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBz
b3VyY2VMLAogCiAgICAgICAgICAgICBpbnQgbG9vcEZyYW1lcyA9IG5EaXZpc2lvbkZyYW1lczsK
ICAgICAgICAgICAgIHdoaWxlIChsb29wRnJhbWVzLS0pIHsKLSAgICAgICAgICAgICAgICBmbG9h
dCBjb21wcmVzc29ySW5wdXQ7Ci0gICAgICAgICAgICAgICAgZmxvYXQgaW5wdXRMOwotICAgICAg
ICAgICAgICAgIGZsb2F0IGlucHV0UiA9IDA7CisgICAgICAgICAgICAgICAgZmxvYXQgY29tcHJl
c3NvcklucHV0ID0gMDsKIAogICAgICAgICAgICAgICAgIC8vIFByZWRlbGF5IHNpZ25hbCwgY29t
cHV0aW5nIGNvbXByZXNzaW9uIGFtb3VudCBmcm9tIHVuLWRlbGF5ZWQgdmVyc2lvbi4KLSAgICAg
ICAgICAgICAgICBpZiAoaXNTdGVyZW8pIHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgdW5k
ZWxheWVkTCA9ICpzb3VyY2VMKys7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IHVuZGVsYXll
ZFIgPSAqc291cmNlUisrOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb3JJbnB1dCA9
IDAuNWYgKiAodW5kZWxheWVkTCArIHVuZGVsYXllZFIpOwotCi0gICAgICAgICAgICAgICAgICAg
IGlucHV0TCA9IGRlbGF5QnVmZmVyTFtwcmVEZWxheVJlYWRJbmRleF07Ci0gICAgICAgICAgICAg
ICAgICAgIGlucHV0UiA9IGRlbGF5QnVmZmVyUltwcmVEZWxheVJlYWRJbmRleF07Ci0KLSAgICAg
ICAgICAgICAgICAgICAgZGVsYXlCdWZmZXJMW3ByZURlbGF5V3JpdGVJbmRleF0gPSB1bmRlbGF5
ZWRMOwotICAgICAgICAgICAgICAgICAgICBkZWxheUJ1ZmZlclJbcHJlRGVsYXlXcml0ZUluZGV4
XSA9IHVuZGVsYXllZFI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29tcHJlc3NvcklucHV0ID0gKnNvdXJjZUwrKzsKLQotICAgICAgICAgICAgICAgICAg
ICBpbnB1dEwgPSBkZWxheUJ1ZmZlckxbcHJlRGVsYXlSZWFkSW5kZXhdOwotICAgICAgICAgICAg
ICAgICAgICBkZWxheUJ1ZmZlckxbcHJlRGVsYXlXcml0ZUluZGV4XSA9IGNvbXByZXNzb3JJbnB1
dDsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFu
bmVsczsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBkZWxheUJ1ZmZlciA9IG1f
cHJlRGVsYXlCdWZmZXJzW2ldLT5kYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IHVu
ZGVsYXllZFNvdXJjZSA9IHNvdXJjZUJ1ZmZlcnNbaV1bZnJhbWVJbmRleF07CisgICAgICAgICAg
ICAgICAgICAgIGRlbGF5QnVmZmVyW3ByZURlbGF5V3JpdGVJbmRleF0gPSB1bmRlbGF5ZWRTb3Vy
Y2U7CisKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgYWJzVW5kZWxheWVkU291cmNlID0gdW5k
ZWxheWVkU291cmNlID4gMCA/IHVuZGVsYXllZFNvdXJjZSA6IC11bmRlbGF5ZWRTb3VyY2U7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChjb21wcmVzc29ySW5wdXQgPCBhYnNVbmRlbGF5ZWRTb3Vy
Y2UpCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc29ySW5wdXQgPSBhYnNVbmRlbGF5
ZWRTb3VyY2U7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgcHJlRGVsYXlS
ZWFkSW5kZXggPSAocHJlRGVsYXlSZWFkSW5kZXggKyAxKSAmIE1heFByZURlbGF5RnJhbWVzTWFz
azsKLSAgICAgICAgICAgICAgICBwcmVEZWxheVdyaXRlSW5kZXggPSAocHJlRGVsYXlXcml0ZUlu
ZGV4ICsgMSkgJiBNYXhQcmVEZWxheUZyYW1lc01hc2s7Ci0KICAgICAgICAgICAgICAgICAvLyBD
YWxjdWxhdGUgc2hhcGVkIHBvd2VyIG9uIHVuZGVsYXllZCBpbnB1dC4KIAogICAgICAgICAgICAg
ICAgIGZsb2F0IHNjYWxlZElucHV0ID0gY29tcHJlc3NvcklucHV0OwpAQCAtMzM3LDE3ICszNDMs
MTQgQEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQq
IHNvdXJjZUwsCiAgICAgICAgICAgICAgICAgICAgIG1fbWV0ZXJpbmdHYWluICs9IChkYlJlYWxH
YWluIC0gbV9tZXRlcmluZ0dhaW4pICogbV9tZXRlcmluZ1JlbGVhc2VLOwogCiAgICAgICAgICAg
ICAgICAgLy8gQXBwbHkgZmluYWwgZ2Fpbi4KLSAgICAgICAgICAgICAgICBpZiAoaXNTdGVyZW8p
IHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3V0cHV0TCA9IGlucHV0TDsKLSAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgb3V0cHV0UiA9IGlucHV0UjsKLQotICAgICAgICAgICAgICAgICAg
ICBvdXRwdXRMICo9IHRvdGFsR2FpbjsKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0UiAqPSB0
b3RhbEdhaW47CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJl
ck9mQ2hhbm5lbHM7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBmbG9hdCogZGVsYXlCdWZm
ZXIgPSBtX3ByZURlbGF5QnVmZmVyc1tpXS0+ZGF0YSgpOworICAgICAgICAgICAgICAgICAgICBk
ZXN0aW5hdGlvbkJ1ZmZlcnNbaV1bZnJhbWVJbmRleF0gPSBkZWxheUJ1ZmZlcltwcmVEZWxheVJl
YWRJbmRleF0gKiB0b3RhbEdhaW47CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IG91dHB1dEw7Ci0gICAgICAgICAgICAgICAgICAgICpk
ZXN0aW5hdGlvblIrKyA9IG91dHB1dFI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IGlucHV0TCAqIHRvdGFsR2FpbjsKKyAgICAg
ICAgICAgICAgICBmcmFtZUluZGV4Kys7CisgICAgICAgICAgICAgICAgcHJlRGVsYXlSZWFkSW5k
ZXggPSAocHJlRGVsYXlSZWFkSW5kZXggKyAxKSAmIE1heFByZURlbGF5RnJhbWVzTWFzazsKKyAg
ICAgICAgICAgICAgICBwcmVEZWxheVdyaXRlSW5kZXggPSAocHJlRGVsYXlXcml0ZUluZGV4ICsg
MSkgJiBNYXhQcmVEZWxheUZyYW1lc01hc2s7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IC8vIExvY2FscyBiYWNrIHRvIG1lbWJlciB2YXJpYWJsZXMuCkBAIC0zNjYsOCArMzY5LDkgQEAg
dm9pZCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnJlc2V0KCkKICAgICBtX21ldGVyaW5nR2Fp
biA9IDE7CiAKICAgICAvLyBQcmVkZWxheSBzZWN0aW9uLgotICAgIG1fcHJlRGVsYXlCdWZmZXJM
Lnplcm8oKTsKLSAgICBtX3ByZURlbGF5QnVmZmVyUi56ZXJvKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fcHJlRGVsYXlCdWZmZXJzLnNpemUoKTsgKytpKQorICAgICAgICBtX3By
ZURlbGF5QnVmZmVyc1tpXS0+emVybygpOworCiAgICAgbV9wcmVEZWxheVJlYWRJbmRleCA9IDA7
CiAgICAgbV9wcmVEZWxheVdyaXRlSW5kZXggPSBEZWZhdWx0UHJlRGVsYXlGcmFtZXM7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nv
cktlcm5lbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVz
c29yS2VybmVsLmgKaW5kZXggY2YzMTliMzc4YWRlYjU5MDYyOTUzZGVhYjA5MmUzMzM5YzZmNjg4
MC4uMmJjY2ZmNGVhMWJlNzFlY2UwOTVmN2YwNjIzNDgyYzBlN2QxOTIzNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2Vy
bmVsLmgKQEAgLTMxLDE3ICszMSwyMiBAQAogCiAjaW5jbHVkZSAiQXVkaW9BcnJheS5oIgogCisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRHluYW1pY3NDb21wcmVzc29yS2VybmVsIHsKIHB1
YmxpYzoKLSAgICBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwoZmxvYXQgc2FtcGxlUmF0ZSk7Cisg
ICAgRHluYW1pY3NDb21wcmVzc29yS2VybmVsKGZsb2F0IHNhbXBsZVJhdGUsIHVuc2lnbmVkIG51
bWJlck9mQ2hhbm5lbHMpOworICAgIH5EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwoKTsKKworICAg
IHZvaWQgc2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCk7CiAKICAgICAvLyBQZXJmb3JtcyBz
dGVyZW8tbGlua2VkIGNvbXByZXNzaW9uLgotICAgIHZvaWQgcHJvY2Vzcyhjb25zdCBmbG9hdCAq
c291cmNlTCwKLSAgICAgICAgICAgICAgICAgZmxvYXQgKmRlc3RpbmF0aW9uTCwKLSAgICAgICAg
ICAgICAgICAgY29uc3QgZmxvYXQgKnNvdXJjZVIsCi0gICAgICAgICAgICAgICAgIGZsb2F0ICpk
ZXN0aW5hdGlvblIsCisgICAgdm9pZCBwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2VCdWZmZXJz
W10sCisgICAgICAgICAgICAgICAgIGZsb2F0KiBkZXN0aW5hdGlvbkJ1ZmZlcnNbXSwKKyAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywKICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgZnJhbWVzVG9Qcm9jZXNzLAogCiAgICAgICAgICAgICAgICAgIGZsb2F0IGRiVGhy
ZXNob2xkLApAQCAtNjYsNyArNzEsOCBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBmbG9h
dCBtX3NhbXBsZVJhdGU7Ci0gICAgCisgICAgdW5zaWduZWQgbV9udW1iZXJPZkNoYW5uZWxzOwor
CiAgICAgZmxvYXQgbV9kZXRlY3RvckF2ZXJhZ2U7CiAgICAgZmxvYXQgbV9jb21wcmVzc29yR2Fp
bjsKIApAQCAtODEsOCArODcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdW5zaWduZWQgbV9sYXN0UHJl
RGVsYXlGcmFtZXM7CiAgICAgdm9pZCBzZXRQcmVEZWxheVRpbWUoZmxvYXQpOwogCi0gICAgQXVk
aW9GbG9hdEFycmF5IG1fcHJlRGVsYXlCdWZmZXJMOwotICAgIEF1ZGlvRmxvYXRBcnJheSBtX3By
ZURlbGF5QnVmZmVyUjsKKyAgICBWZWN0b3I8T3duUHRyPEF1ZGlvRmxvYXRBcnJheT4gPiBtX3By
ZURlbGF5QnVmZmVyczsKICAgICBpbnQgbV9wcmVEZWxheVJlYWRJbmRleDsKICAgICBpbnQgbV9w
cmVEZWxheVdyaXRlSW5kZXg7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHlu
YW1pY3NDb21wcmVzc29yTm9kZS5jcHAKaW5kZXggZWE4YjU4OTIyMzU2YWExMzY1MTMyYWVmMzFm
YWFmNjAzZjc0NTQyNy4uMTNmN2M4MjM1NDU0OTE4OTBmNmI3ZGRmOTRhNDk0ZDFhOTU5OGQxZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9k
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9k
ZS5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgRHluYW1pY3NDb21wcmVzc29yTm9kZTo6RHluYW1pY3ND
b21wcmVzc29yTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXAKICAgICA6IEF1
ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQogewogICAgIGFkZElucHV0KGFkb3B0UHRyKG5l
dyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOwotICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVk
aW9Ob2RlT3V0cHV0KHRoaXMsIDIpKSk7CisgICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRp
b05vZGVPdXRwdXQodGhpcywgRGVmYXVsdE51bWJlck9mT3V0cHV0Q2hhbm5lbHMpKSk7CiAgICAg
CiAgICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVEeW5hbWljc0NvbXByZXNzb3IpOwogICAgIApAQCAt
NzAsNyArNzAsNyBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OmluaXRpYWxpemUoKQog
ICAgICAgICByZXR1cm47CiAKICAgICBBdWRpb05vZGU6OmluaXRpYWxpemUoKTsgICAgCi0gICAg
bV9keW5hbWljc0NvbXByZXNzb3IgPSBhZG9wdFB0cihuZXcgRHluYW1pY3NDb21wcmVzc29yKHRy
dWUsIHNhbXBsZVJhdGUoKSkpOworICAgIG1fZHluYW1pY3NDb21wcmVzc29yID0gYWRvcHRQdHIo
bmV3IER5bmFtaWNzQ29tcHJlc3NvcihzYW1wbGVSYXRlKCksIERlZmF1bHROdW1iZXJPZk91dHB1
dENoYW5uZWxzKSk7CiB9CiAKIHZvaWQgRHluYW1pY3NDb21wcmVzc29yTm9kZTo6dW5pbml0aWFs
aXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJl
c3Nvck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUuaAppbmRleCBkNzE4YWIzNDFjYzAxZTE4OGNmMjEzMDU2NzQ2NWYwNDhiZGEwNWNiLi5mMjVm
YWM1NGU5MDEwNDA1OGUwN2UzMzgzYjRlZGNmMzc4NTBiYTUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5oCkBAIC01MCw2ICs1MCw5IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRHluYW1pY3NDb21wcmVzc29yTm9kZShBdWRpb0NvbnRl
eHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKIAorICAgIC8vIFNldCBvdXRwdXQgdG8gc3RlcmVvIGJ5
IGRlZmF1bHQuCisgICAgZW51bSB7IERlZmF1bHROdW1iZXJPZk91dHB1dENoYW5uZWxzID0gMiB9
OworCiAgICAgT3duUHRyPER5bmFtaWNzQ29tcHJlc3Nvcj4gbV9keW5hbWljc0NvbXByZXNzb3I7
CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126460</attachid>
            <date>2012-02-09 23:06:11 -0800</date>
            <delta_ts>2012-02-16 18:49:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77856-20120210151052.patch</filename>
            <type>text/plain</type>
            <size>23744</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3Mjk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzkyNDIwZWUwNTUyZWIw
YzVkYmEzMWRmNGE2MTc0ZGQ4NDZlM2E0Yi4uMjZlMjk0MDkxY2RlMjJmZGJkZmEwMjFmZWZhOGNk
N2QyMDlhMmUzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTAyLTA5ICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBIYXZlIHRoZSBEeW5h
bWljc0NvbXByZXNzb3JOb2RlIHN1cHBvcnQgbXVsdGktY2hhbm5lbCBkYXRhCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzg1NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyByZXF1aXJl
ZC4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6OkR5bmFtaWNzQ29tcHJlc3Nvcik6
CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6OnNldEVtcGhhc2lzU3RhZ2VQ
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcjo6cHJvY2Vz
cyk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6OnJlc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcjo6c2V0TnVtYmVyT2ZDaGFubmVscyk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXBy
ZXNzb3IuaDoKKyAgICAgICAgKER5bmFtaWNzQ29tcHJlc3Nvcik6CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6fkR5bmFtaWNzQ29tcHJl
c3Nvcktlcm5lbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFt
aWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0TnVtYmVyT2ZDaGFubmVscyk6CisgICAgICAgIChXZWJD
b3JlOjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnNldFByZURlbGF5VGltZSk6CisgICAgICAg
IChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnByb2Nlc3MpOgorICAgICAgICAo
V2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpyZXNldCk6CisgICAgICAgICogcGxh
dGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmg6CisgICAgICAgIChEeW5hbWlj
c0NvbXByZXNzb3JLZXJuZWwpOgorICAgICAgICAqIHdlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nv
ck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yTm9kZTo6RHlu
YW1pY3NDb21wcmVzc29yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNz
b3JOb2RlOjppbml0aWFsaXplKToKKyAgICAgICAgKiB3ZWJhdWRpby9EeW5hbWljc0NvbXByZXNz
b3JOb2RlLmg6CisgICAgICAgIChEeW5hbWljc0NvbXByZXNzb3JOb2RlKToKKwogMjAxMi0wMi0w
OSAgSm9obiBCYXRlcyAgPGpiYXRlc0Bnb29nbGUuY29tPgogCiAgICAgICAgIFtDaHJvbWl1bV0g
QWRkIGNocm9taXVtLXN0eWxlIHRyYWNpbmcgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5jcHAKaW5kZXggYTU1MjA1NzA1
ZDk1MTBiZjIwZDlkYjM1NDg3OTM5NjVlZTAyZWUxZC4uMDMyODQzNDcyZWE3MjA2YTI3YjY0ODI1
YzAzODM5ZTExYmE1MzIwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vRHluYW1pY3NDb21wcmVzc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9EeW5hbWljc0NvbXByZXNzb3IuY3BwCkBAIC00MCwxNiArNDAsMjAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgQXVkaW9VdGlsaXRpZXM7CiAgICAgCi1EeW5h
bWljc0NvbXByZXNzb3I6OkR5bmFtaWNzQ29tcHJlc3Nvcihib29sIGlzU3RlcmVvLCBmbG9hdCBz
YW1wbGVSYXRlKQotICAgIDogbV9pc1N0ZXJlbyhpc1N0ZXJlbykKLSAgICAsIG1fc2FtcGxlUmF0
ZShzYW1wbGVSYXRlKQotICAgICwgbV9jb21wcmVzc29yKHNhbXBsZVJhdGUpCitEeW5hbWljc0Nv
bXByZXNzb3I6OkR5bmFtaWNzQ29tcHJlc3NvcihmbG9hdCBzYW1wbGVSYXRlLCB1bnNpZ25lZCBu
dW1iZXJPZkNoYW5uZWxzKQorICAgIDogbV9udW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5l
bHMpCisgICAgLCBtX2NvbXByZXNzb3Ioc2FtcGxlUmF0ZSwgbnVtYmVyT2ZDaGFubmVscykKIHsK
ICAgICAvLyBVbmluaXRpYWxpemVkIHN0YXRlIC0gZm9yIHBhcmFtZXRlciByZWNhbGN1bGF0aW9u
LgogICAgIG1fbGFzdEZpbHRlclN0YWdlUmF0aW8gPSAtMTsKICAgICBtX2xhc3RBbmNob3IgPSAt
MTsKICAgICBtX2xhc3RGaWx0ZXJTdGFnZUdhaW4gPSAtMTsKIAorICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpIHsKKyAgICAgICAgbV9wcmVGaWx0ZXJQ
YWNrcy5hcHBlbmQoYWRvcHRQdHIobmV3IFplcm9Qb2xlRmlsdGVyUGFjazQoKSkpOworICAgICAg
ICBtX3Bvc3RGaWx0ZXJQYWNrcy5hcHBlbmQoYWRvcHRQdHIobmV3IFplcm9Qb2xlRmlsdGVyUGFj
azQoKSkpOworICAgIH0KKwogICAgIGluaXRpYWxpemVQYXJhbWV0ZXJzKCk7CiB9CiAKQEAgLTkz
LDE4ICs5NywyMCBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6c2V0RW1waGFzaXNTdGFnZVBh
cmFtZXRlcnModW5zaWduZWQgc3RhZ2VJbmRleCwgZmxvYXQgZwogICAgIGZsb2F0IHIxID0gZXhw
ZigtZjEgKiBwaUZsb2F0KTsKICAgICBmbG9hdCByMiA9IGV4cGYoLWYyICogcGlGbG9hdCk7CiAK
LSAgICAvLyBTZXQgcHJlLWZpbHRlciB6ZXJvIGFuZCBwb2xlIHRvIGNyZWF0ZSBhbiBlbXBoYXNp
cyBmaWx0ZXIuCi0gICAgbV9wcmVGaWx0ZXJbc3RhZ2VJbmRleF0uc2V0WmVybyhyMSk7Ci0gICAg
bV9wcmVGaWx0ZXJbc3RhZ2VJbmRleF0uc2V0UG9sZShyMik7Ci0gICAgbV9wcmVGaWx0ZXJSW3N0
YWdlSW5kZXhdLnNldFplcm8ocjEpOwotICAgIG1fcHJlRmlsdGVyUltzdGFnZUluZGV4XS5zZXRQ
b2xlKHIyKTsKLQotICAgIC8vIFNldCBwb3N0LWZpbHRlciB3aXRoIHplcm8gYW5kIHBvbGUgcmV2
ZXJzZWQgdG8gY3JlYXRlIHRoZSBkZS1lbXBoYXNpcyBmaWx0ZXIuCi0gICAgLy8gSWYgdGhlcmUg
d2VyZSBubyBjb21wcmVzc29yIGtlcm5lbCBpbiBiZXR3ZWVuLCB0aGV5IHdvdWxkIGNhbmNlbCBl
YWNoIG90aGVyIG91dCAoYWxscGFzcyBmaWx0ZXIpLgotICAgIG1fcG9zdEZpbHRlcltzdGFnZUlu
ZGV4XS5zZXRaZXJvKHIyKTsKLSAgICBtX3Bvc3RGaWx0ZXJbc3RhZ2VJbmRleF0uc2V0UG9sZShy
MSk7Ci0gICAgbV9wb3N0RmlsdGVyUltzdGFnZUluZGV4XS5zZXRaZXJvKHIyKTsKLSAgICBtX3Bv
c3RGaWx0ZXJSW3N0YWdlSW5kZXhdLnNldFBvbGUocjEpOworICAgIEFTU0VSVChtX251bWJlck9m
Q2hhbm5lbHMgPT0gbV9wcmVGaWx0ZXJQYWNrcy5zaXplKCkpOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgIFplcm9Qb2xl
KiBwcmVGaWx0ZXIgPSAmKG1fcHJlRmlsdGVyUGFja3NbaV0tPmZpbHRlcnNbc3RhZ2VJbmRleF0p
OworICAgICAgICAvLyBTZXQgcHJlLWZpbHRlciB6ZXJvIGFuZCBwb2xlIHRvIGNyZWF0ZSBhbiBl
bXBoYXNpcyBmaWx0ZXIuCisgICAgICAgIHByZUZpbHRlci0+c2V0WmVybyhyMSk7CisgICAgICAg
IHByZUZpbHRlci0+c2V0UG9sZShyMik7CisKKyAgICAgICAgLy8gU2V0IHBvc3QtZmlsdGVyIHdp
dGggemVybyBhbmQgcG9sZSByZXZlcnNlZCB0byBjcmVhdGUgdGhlIGRlLWVtcGhhc2lzIGZpbHRl
ci4KKyAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBubyBjb21wcmVzc29yIGtlcm5lbCBpbiBiZXR3
ZWVuLCB0aGV5IHdvdWxkIGNhbmNlbCBlYWNoIG90aGVyIG91dCAoYWxscGFzcyBmaWx0ZXIpLgor
ICAgICAgICBaZXJvUG9sZSogcG9zdEZpbHRlciA9ICYobV9wb3N0RmlsdGVyUGFja3NbaV0tPmZp
bHRlcnNbc3RhZ2VJbmRleF0pOworICAgICAgICBwb3N0RmlsdGVyLT5zZXRaZXJvKHIyKTsKKyAg
ICAgICAgcG9zdEZpbHRlci0+c2V0UG9sZShyMSk7CisgICAgfQogfQogCiB2b2lkIER5bmFtaWNz
Q29tcHJlc3Nvcjo6c2V0RW1waGFzaXNQYXJhbWV0ZXJzKGZsb2F0IGdhaW4sIGZsb2F0IGFuY2hv
ckZyZXEsIGZsb2F0IGZpbHRlclN0YWdlUmF0aW8pCkBAIC0xMTcsMTggKzEyMywzMSBAQCB2b2lk
IER5bmFtaWNzQ29tcHJlc3Nvcjo6c2V0RW1waGFzaXNQYXJhbWV0ZXJzKGZsb2F0IGdhaW4sIGZs
b2F0IGFuY2hvckZyZXEsIGZsbwogCiB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6cHJvY2Vzcyhj
b25zdCBBdWRpb0J1cyogc291cmNlQnVzLCBBdWRpb0J1cyogZGVzdGluYXRpb25CdXMsIHVuc2ln
bmVkIGZyYW1lc1RvUHJvY2VzcykKIHsKLSAgICBjb25zdCBmbG9hdCogc291cmNlTCA9IHNvdXJj
ZUJ1cy0+Y2hhbm5lbCgwKS0+ZGF0YSgpOwotICAgIGNvbnN0IGZsb2F0KiBzb3VyY2VSOwotCi0g
ICAgaWYgKHNvdXJjZUJ1cy0+bnVtYmVyT2ZDaGFubmVscygpID4gMSkKLSAgICAgICAgc291cmNl
UiA9IHNvdXJjZUJ1cy0+Y2hhbm5lbCgxKS0+ZGF0YSgpOwotICAgIGVsc2UKLSAgICAgICAgc291
cmNlUiA9IHNvdXJjZUw7Ci0KLSAgICBBU1NFUlQoZGVzdGluYXRpb25CdXMtPm51bWJlck9mQ2hh
bm5lbHMoKSA9PSAyKTsKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gZGVzdGluYXRp
b25CdXMtPm51bWJlck9mQ2hhbm5lbHMoKTsKKyAgICB1bnNpZ25lZCBudW1iZXJPZlNvdXJjZUNo
YW5uZWxzID0gZGVzdGluYXRpb25CdXMtPm51bWJlck9mQ2hhbm5lbHMoKTsKKworICAgIGNvbnN0
IGZsb2F0KiBzb3VyY2VDaGFubmVsc1tudW1iZXJPZkNoYW5uZWxzXTsKKyAgICBmbG9hdCogZGVz
dGluYXRpb25DaGFubmVsc1tudW1iZXJPZkNoYW5uZWxzXTsKKworICAgIHN3aXRjaCAobnVtYmVy
T2ZDaGFubmVscykgeworICAgIGNhc2UgMjogLy8gc3RlcmVvCisgICAgICAgIHNvdXJjZUNoYW5u
ZWxzWzBdID0gc291cmNlQnVzLT5jaGFubmVsKDApLT5kYXRhKCk7CisKKyAgICAgICAgaWYgKG51
bWJlck9mU291cmNlQ2hhbm5lbHMgPiAxKQorICAgICAgICAgICAgc291cmNlQ2hhbm5lbHNbMV0g
PSBzb3VyY2VCdXMtPmNoYW5uZWwoMSktPmRhdGEoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc291cmNlQ2hhbm5lbHNbMV0gPSBzb3VyY2VDaGFubmVsc1swXTsKKworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGSVhNRSA6IHN1cHBvcnQgb3RoZXIgbGF5b3V0
cy4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGRlc3RpbmF0aW9uQnVz
LT56ZXJvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBmbG9hdCogZGVzdGluYXRp
b25MID0gZGVzdGluYXRpb25CdXMtPmNoYW5uZWwoMCktPm11dGFibGVEYXRhKCk7Ci0gICAgZmxv
YXQqIGRlc3RpbmF0aW9uUiA9IGRlc3RpbmF0aW9uQnVzLT5jaGFubmVsKDEpLT5tdXRhYmxlRGF0
YSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kp
CisgICAgICAgIGRlc3RpbmF0aW9uQ2hhbm5lbHNbaV0gPSBkZXN0aW5hdGlvbkJ1cy0+Y2hhbm5l
bChpKS0+bXV0YWJsZURhdGEoKTsKIAogICAgIGZsb2F0IGZpbHRlclN0YWdlR2FpbiA9IHBhcmFt
ZXRlclZhbHVlKFBhcmFtRmlsdGVyU3RhZ2VHYWluKTsKICAgICBmbG9hdCBmaWx0ZXJTdGFnZVJh
dGlvID0gcGFyYW1ldGVyVmFsdWUoUGFyYW1GaWx0ZXJTdGFnZVJhdGlvKTsKQEAgLTE0NCwxNiAr
MTYzLDE1IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yOjpwcm9jZXNzKGNvbnN0IEF1ZGlvQnVz
KiBzb3VyY2VCdXMsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvCiAKICAgICAvLyBBcHBseSBwcmUtZW1w
aGFzaXMgZmlsdGVyLgogICAgIC8vIE5vdGUgdGhhdCB0aGUgZmluYWwgdGhyZWUgc3RhZ2VzIGFy
ZSBjb21wdXRlZCBpbi1wbGFjZSBpbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgotICAgIG1fcHJl
RmlsdGVyWzBdLnByb2Nlc3Moc291cmNlTCwgZGVzdGluYXRpb25MLCBmcmFtZXNUb1Byb2Nlc3Mp
OwotICAgIG1fcHJlRmlsdGVyWzFdLnByb2Nlc3MoZGVzdGluYXRpb25MLCBkZXN0aW5hdGlvbkws
IGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgbV9wcmVGaWx0ZXJbMl0ucHJvY2VzcyhkZXN0aW5hdGlv
bkwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICBtX3ByZUZpbHRlclszXS5w
cm9jZXNzKGRlc3RpbmF0aW9uTCwgZGVzdGluYXRpb25MLCBmcmFtZXNUb1Byb2Nlc3MpOwotCi0g
ICAgaWYgKGlzU3RlcmVvKCkpIHsKLSAgICAgICAgbV9wcmVGaWx0ZXJSWzBdLnByb2Nlc3Moc291
cmNlUiwgZGVzdGluYXRpb25SLCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgICAgICBtX3ByZUZpbHRl
clJbMV0ucHJvY2VzcyhkZXN0aW5hdGlvblIsIGRlc3RpbmF0aW9uUiwgZnJhbWVzVG9Qcm9jZXNz
KTsKLSAgICAgICAgbV9wcmVGaWx0ZXJSWzJdLnByb2Nlc3MoZGVzdGluYXRpb25SLCBkZXN0aW5h
dGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgICAgIG1fcHJlRmlsdGVyUlszXS5wcm9jZXNz
KGRlc3RpbmF0aW9uUiwgZGVzdGluYXRpb25SLCBmcmFtZXNUb1Byb2Nlc3MpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpIHsKKyAgICAgICAgY29u
c3QgZmxvYXQqIHNvdXJjZURhdGEgPSBzb3VyY2VDaGFubmVsc1tpXTsKKyAgICAgICAgZmxvYXQq
IGRlc3RpbmF0aW9uRGF0YSA9IGRlc3RpbmF0aW9uQ2hhbm5lbHNbaV07CisgICAgICAgIFplcm9Q
b2xlKiBwcmVGaWx0ZXJzID0gbV9wcmVGaWx0ZXJQYWNrc1tpXS0+ZmlsdGVyczsKKworICAgICAg
ICBwcmVGaWx0ZXJzWzBdLnByb2Nlc3Moc291cmNlRGF0YSwgZGVzdGluYXRpb25EYXRhLCBmcmFt
ZXNUb1Byb2Nlc3MpOworICAgICAgICBwcmVGaWx0ZXJzWzFdLnByb2Nlc3MoZGVzdGluYXRpb25E
YXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIHByZUZpbHRl
cnNbMl0ucHJvY2VzcyhkZXN0aW5hdGlvbkRhdGEsIGRlc3RpbmF0aW9uRGF0YSwgZnJhbWVzVG9Q
cm9jZXNzKTsKKyAgICAgICAgcHJlRmlsdGVyc1szXS5wcm9jZXNzKGRlc3RpbmF0aW9uRGF0YSwg
ZGVzdGluYXRpb25EYXRhLCBmcmFtZXNUb1Byb2Nlc3MpOwogICAgIH0KIAogICAgIGZsb2F0IGRi
VGhyZXNob2xkID0gcGFyYW1ldGVyVmFsdWUoUGFyYW1UaHJlc2hvbGQpOwpAQCAtMTc3LDEwICsx
OTUsMTMgQEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3I6OnByb2Nlc3MoY29uc3QgQXVkaW9CdXMq
IHNvdXJjZUJ1cywgQXVkaW9CdXMqIGRlc3RpbmF0aW8KIAogICAgIC8vIEFwcGx5IGNvbXByZXNz
aW9uIHRvIHRoZSBwcmUtZmlsdGVyZWQgc2lnbmFsLgogICAgIC8vIFRoZSBwcm9jZXNzaW5nIGlz
IHBlcmZvcm1lZCBpbiBwbGFjZS4KLSAgICBtX2NvbXByZXNzb3IucHJvY2VzcyhkZXN0aW5hdGlv
bkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25MLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RpbmF0aW9uUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0
aW5hdGlvblIsCisgICAgY29uc3QgZmxvYXQqIGlucGxhY2VTb3VyY2VDaGFubmVsc1tudW1iZXJP
ZkNoYW5uZWxzXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVs
czsgKytpKQorICAgICAgICBpbnBsYWNlU291cmNlQ2hhbm5lbHNbaV0gPSBkZXN0aW5hdGlvbkNo
YW5uZWxzW2ldOworCisgICAgbV9jb21wcmVzc29yLnByb2Nlc3MoaW5wbGFjZVNvdXJjZUNoYW5u
ZWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uQ2hhbm5lbHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZDaGFubmVscywKICAgICAgICAgICAgICAgICAg
ICAgICAgICBmcmFtZXNUb1Byb2Nlc3MsCiAKICAgICAgICAgICAgICAgICAgICAgICAgICBkYlRo
cmVzaG9sZCwKQEAgLTE5OCwxNiArMjE5LDE0IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yOjpw
cm9jZXNzKGNvbnN0IEF1ZGlvQnVzKiBzb3VyY2VCdXMsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKIAogICAgIC8vIEFwcGx5IGRlLWVtcGhhc2lzIGZp
bHRlci4KLSAgICBtX3Bvc3RGaWx0ZXJbMF0ucHJvY2VzcyhkZXN0aW5hdGlvbkwsIGRlc3RpbmF0
aW9uTCwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICBtX3Bvc3RGaWx0ZXJbMV0ucHJvY2VzcyhkZXN0
aW5hdGlvbkwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICBtX3Bvc3RGaWx0
ZXJbMl0ucHJvY2VzcyhkZXN0aW5hdGlvbkwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNz
KTsKLSAgICBtX3Bvc3RGaWx0ZXJbM10ucHJvY2VzcyhkZXN0aW5hdGlvbkwsIGRlc3RpbmF0aW9u
TCwgZnJhbWVzVG9Qcm9jZXNzKTsKLQotICAgIGlmIChpc1N0ZXJlbygpKSB7Ci0gICAgICAgIG1f
cG9zdEZpbHRlclJbMF0ucHJvY2VzcyhkZXN0aW5hdGlvblIsIGRlc3RpbmF0aW9uUiwgZnJhbWVz
VG9Qcm9jZXNzKTsKLSAgICAgICAgbV9wb3N0RmlsdGVyUlsxXS5wcm9jZXNzKGRlc3RpbmF0aW9u
UiwgZGVzdGluYXRpb25SLCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgICAgICBtX3Bvc3RGaWx0ZXJS
WzJdLnByb2Nlc3MoZGVzdGluYXRpb25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7
Ci0gICAgICAgIG1fcG9zdEZpbHRlclJbM10ucHJvY2VzcyhkZXN0aW5hdGlvblIsIGRlc3RpbmF0
aW9uUiwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
YmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgIGZsb2F0KiBkZXN0aW5hdGlvbkRhdGEgPSBk
ZXN0aW5hdGlvbkNoYW5uZWxzW2ldOworICAgICAgICBaZXJvUG9sZSogcG9zdEZpbHRlcnMgPSBt
X3Bvc3RGaWx0ZXJQYWNrc1tpXS0+ZmlsdGVyczsKKworICAgICAgICBwb3N0RmlsdGVyc1swXS5w
cm9jZXNzKGRlc3RpbmF0aW9uRGF0YSwgZGVzdGluYXRpb25EYXRhLCBmcmFtZXNUb1Byb2Nlc3Mp
OworICAgICAgICBwb3N0RmlsdGVyc1sxXS5wcm9jZXNzKGRlc3RpbmF0aW9uRGF0YSwgZGVzdGlu
YXRpb25EYXRhLCBmcmFtZXNUb1Byb2Nlc3MpOworICAgICAgICBwb3N0RmlsdGVyc1syXS5wcm9j
ZXNzKGRlc3RpbmF0aW9uRGF0YSwgZGVzdGluYXRpb25EYXRhLCBmcmFtZXNUb1Byb2Nlc3MpOwor
ICAgICAgICBwb3N0RmlsdGVyc1szXS5wcm9jZXNzKGRlc3RpbmF0aW9uRGF0YSwgZGVzdGluYXRp
b25EYXRhLCBmcmFtZXNUb1Byb2Nlc3MpOwogICAgIH0KIH0KIApAQCAtMjE3LDE2ICsyMzYsMzIg
QEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3I6OnJlc2V0KCkKICAgICBtX2xhc3RBbmNob3IgPSAt
MTsKICAgICBtX2xhc3RGaWx0ZXJTdGFnZUdhaW4gPSAtMTsKIAotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCA0OyArK2kpIHsKLSAgICAgICAgbV9wcmVGaWx0ZXJbaV0ucmVzZXQoKTsKLSAg
ICAgICAgbV9wcmVGaWx0ZXJSW2ldLnJlc2V0KCk7Ci0gICAgICAgIG1fcG9zdEZpbHRlcltpXS5y
ZXNldCgpOwotICAgICAgICBtX3Bvc3RGaWx0ZXJSW2ldLnJlc2V0KCk7CisgICAgZm9yICh1bnNp
Z25lZCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IG1fbnVtYmVyT2ZDaGFubmVsczsgKytjaGFubmVs
KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgc3RhZ2VJbmRleCA9IDA7IHN0YWdlSW5kZXggPCA0
OyArK3N0YWdlSW5kZXgpIHsKKyAgICAgICAgICAgIG1fcHJlRmlsdGVyUGFja3NbY2hhbm5lbF0t
PmZpbHRlcnNbc3RhZ2VJbmRleF0ucmVzZXQoKTsKKyAgICAgICAgICAgIG1fcG9zdEZpbHRlclBh
Y2tzW2NoYW5uZWxdLT5maWx0ZXJzW3N0YWdlSW5kZXhdLnJlc2V0KCk7CisgICAgICAgIH0KICAg
ICB9CiAKICAgICBtX2NvbXByZXNzb3IucmVzZXQoKTsKIH0KIAordm9pZCBEeW5hbWljc0NvbXBy
ZXNzb3I6OnNldE51bWJlck9mQ2hhbm5lbHModW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscykKK3sK
KyAgICBpZiAobV9wcmVGaWx0ZXJQYWNrcy5zaXplKCkgPT0gbnVtYmVyT2ZDaGFubmVscykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9wcmVGaWx0ZXJQYWNrcy5jbGVhcigpOworICAgIG1fcG9z
dEZpbHRlclBhY2tzLmNsZWFyKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJl
ck9mQ2hhbm5lbHM7ICsraSkgeworICAgICAgICBtX3ByZUZpbHRlclBhY2tzLmFwcGVuZChhZG9w
dFB0cihuZXcgWmVyb1BvbGVGaWx0ZXJQYWNrNCgpKSk7CisgICAgICAgIG1fcG9zdEZpbHRlclBh
Y2tzLmFwcGVuZChhZG9wdFB0cihuZXcgWmVyb1BvbGVGaWx0ZXJQYWNrNCgpKSk7CisgICAgfQor
CisgICAgbV9jb21wcmVzc29yLnNldE51bWJlck9mQ2hhbm5lbHMobnVtYmVyT2ZDaGFubmVscyk7
CisgICAgbV9udW1iZXJPZkNoYW5uZWxzID0gbnVtYmVyT2ZDaGFubmVsczsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmgKaW5kZXgg
ZTAxMTVlZTI3M2U0MzBmOWMyOGY1NjRiZmM5Y2M0NGViYzY2YzY5ZS4uNWJmNTMzODUyNWVmZTQ3
MWI1ZmFjMzkwMWVkN2NhY2I0NmE1OWMyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmgKQEAgLTYyLDI1ICs2MiwyNiBAQCBwdWJs
aWM6CiAgICAgICAgIFBhcmFtTGFzdAogICAgIH07CiAKLSAgICBEeW5hbWljc0NvbXByZXNzb3Io
Ym9vbCBpc1N0ZXJlbywgZmxvYXQgc2FtcGxlUmF0ZSk7CisgICAgRHluYW1pY3NDb21wcmVzc29y
KGZsb2F0IHNhbXBsZVJhdGUsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpOwogCiAgICAgdm9p
ZCBwcm9jZXNzKGNvbnN0IEF1ZGlvQnVzKiBzb3VyY2VCdXMsIEF1ZGlvQnVzKiBkZXN0aW5hdGlv
bkJ1cywgdW5zaWduZWQgZnJhbWVzVG9Qcm9jZXNzKTsKICAgICB2b2lkIHJlc2V0KCk7CisgICAg
dm9pZCBzZXROdW1iZXJPZkNoYW5uZWxzKHVuc2lnbmVkKTsKIAogICAgIGZsb2F0IHBhcmFtZXRl
clZhbHVlKHVuc2lnbmVkIHBhcmFtZXRlcklEKTsKIAotICAgIGJvb2wgaXNTdGVyZW8oKSBjb25z
dCB7IHJldHVybiBtX2lzU3RlcmVvOyB9CiAgICAgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2FtcGxlUmF0ZTsgfQogICAgIGZsb2F0IG55cXVpc3QoKSBjb25zdCB7IHJldHVy
biBtX3NhbXBsZVJhdGUgLyAyOyB9CiAKIHByb3RlY3RlZDoKKyAgICB1bnNpZ25lZCBtX251bWJl
ck9mQ2hhbm5lbHM7CisKICAgICAvLyBtX3BhcmFtZXRlcnMgaG9sZHMgdGhlIHR3ZWFrYWJsZSBj
b21wcmVzc29yIHBhcmFtZXRlcnMuCiAgICAgLy8gRklYTUU6IGV4cG9zZSBzb21lIG9mIHRoZSBt
b3N0IGltcG9ydGFudCBvbmVzIChzdWNoIGFzIHRocmVzaG9sZCwgYXR0YWNrLCByZWxlYXNlKQog
ICAgIC8vIGFzIER5bmFtaWNzQ29tcHJlc3Nvck5vZGUgYXR0cmlidXRlcy4KICAgICBmbG9hdCBt
X3BhcmFtZXRlcnNbUGFyYW1MYXN0XTsKICAgICB2b2lkIGluaXRpYWxpemVQYXJhbWV0ZXJzKCk7
CiAKLSAgICBib29sIG1faXNTdGVyZW87CiAgICAgZmxvYXQgbV9zYW1wbGVSYXRlOwogCiAgICAg
Ly8gRW1waGFzaXMgZmlsdGVyIGNvbnRyb2xzLgpAQCAtODgsMTEgKzg5LDEzIEBAIHByb3RlY3Rl
ZDoKICAgICBmbG9hdCBtX2xhc3RBbmNob3I7CiAgICAgZmxvYXQgbV9sYXN0RmlsdGVyU3RhZ2VH
YWluOwogCisgICAgdHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBaZXJvUG9sZSBmaWx0ZXJzWzRd
OworICAgIH0gWmVyb1BvbGVGaWx0ZXJQYWNrNDsKKwogICAgIC8vIEVtcGhhc2lzIGZpbHRlcnMu
Ci0gICAgWmVyb1BvbGUgbV9wcmVGaWx0ZXJbNF07Ci0gICAgWmVyb1BvbGUgbV9wcmVGaWx0ZXJS
WzRdOwotICAgIFplcm9Qb2xlIG1fcG9zdEZpbHRlcls0XTsKLSAgICBaZXJvUG9sZSBtX3Bvc3RG
aWx0ZXJSWzRdOworICAgIFZlY3RvcjxPd25QdHI8WmVyb1BvbGVGaWx0ZXJQYWNrND4gPiBtX3By
ZUZpbHRlclBhY2tzOworICAgIFZlY3RvcjxPd25QdHI8WmVyb1BvbGVGaWx0ZXJQYWNrND4gPiBt
X3Bvc3RGaWx0ZXJQYWNrczsKIAogICAgIHZvaWQgc2V0RW1waGFzaXNTdGFnZVBhcmFtZXRlcnMo
dW5zaWduZWQgc3RhZ2VJbmRleCwgZmxvYXQgZ2FpbiwgZmxvYXQgbm9ybWFsaXplZEZyZXF1ZW5j
eSAvKiAwIC0+IDEgKi8pOwogICAgIHZvaWQgc2V0RW1waGFzaXNQYXJhbWV0ZXJzKGZsb2F0IGdh
aW4sIGZsb2F0IGFuY2hvckZyZXEsIGZsb2F0IGZpbHRlclN0YWdlUmF0aW8pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktl
cm5lbC5jcHAKaW5kZXggYTMyMmEzMzAyNTk2MGM4OWNiNmJlMDZjMjViODc3Mzc2ZGE5ZTM2Yy4u
YWQ0YWQ2NTQzYjE4YmJkNjNhZmU3ZTBkNzI3NWU0ZWRkZTBjY2MxMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJu
ZWwuY3BwCkBAIC01MiwyMCArNTIsMzkgQEAgc3RhdGljIGZsb2F0IHNhdHVyYXRlKGZsb2F0IHgs
IGZsb2F0IGspCiAgICAgcmV0dXJuIDEgLSBleHAoLWsgKiB4KTsKIH0KIAotRHluYW1pY3NDb21w
cmVzc29yS2VybmVsOjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwoZmxvYXQgc2FtcGxlUmF0ZSkK
K0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsKGZsb2F0
IHNhbXBsZVJhdGUsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpCiAgICAgOiBtX3NhbXBsZVJh
dGUoc2FtcGxlUmF0ZSkKKyAgICAsIG1fbnVtYmVyT2ZDaGFubmVscyhudW1iZXJPZkNoYW5uZWxz
KQogICAgICwgbV9sYXN0UHJlRGVsYXlGcmFtZXMoRGVmYXVsdFByZURlbGF5RnJhbWVzKQotICAg
ICwgbV9wcmVEZWxheUJ1ZmZlckwoTWF4UHJlRGVsYXlGcmFtZXMpCi0gICAgLCBtX3ByZURlbGF5
QnVmZmVyUihNYXhQcmVEZWxheUZyYW1lcykKICAgICAsIG1fcHJlRGVsYXlSZWFkSW5kZXgoMCkK
ICAgICAsIG1fcHJlRGVsYXlXcml0ZUluZGV4KERlZmF1bHRQcmVEZWxheUZyYW1lcykKIHsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKQorICAgICAg
ICBtX3ByZURlbGF5QnVmZmVycy5hcHBlbmQoYWRvcHRQdHIobmV3IEF1ZGlvRmxvYXRBcnJheShN
YXhQcmVEZWxheUZyYW1lcykpKTsKKwogICAgIC8vIEluaXRpYWxpemVzIG1vc3QgbWVtYmVyIHZh
cmlhYmxlcwogICAgIHJlc2V0KCk7CiAgICAgCiAgICAgbV9tZXRlcmluZ1JlbGVhc2VLID0gZGlz
Y3JldGVUaW1lQ29uc3RhbnRGb3JTYW1wbGVSYXRlKG1ldGVyaW5nUmVsZWFzZVRpbWVDb25zdGFu
dCwgc2FtcGxlUmF0ZSk7CiB9CiAKK0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6fkR5bmFtaWNz
Q29tcHJlc3Nvcktlcm5lbCgpCit7CisgICAgbV9wcmVEZWxheUJ1ZmZlcnMuY2xlYXIoKTsKK30K
Kwordm9pZCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnNldE51bWJlck9mQ2hhbm5lbHModW5z
aWduZWQgbnVtYmVyT2ZDaGFubmVscykKK3sKKyAgICBpZiAobnVtYmVyT2ZDaGFubmVscyA9PSBt
X251bWJlck9mQ2hhbm5lbHMpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJlRGVsYXlCdWZm
ZXJzLmNsZWFyKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5l
bHM7ICsraSkKKyAgICAgICAgbV9wcmVEZWxheUJ1ZmZlcnMuYXBwZW5kKGFkb3B0UHRyKG5ldyBB
dWRpb0Zsb2F0QXJyYXkoTWF4UHJlRGVsYXlGcmFtZXMpKSk7CisKKyAgICBtX251bWJlck9mQ2hh
bm5lbHM9IG51bWJlck9mQ2hhbm5lbHM7Cit9CisKIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2Vy
bmVsOjpzZXRQcmVEZWxheVRpbWUoZmxvYXQgcHJlRGVsYXlUaW1lKQogewogICAgIC8vIFJlLWNv
bmZpZ3VyZSBsb29rLWFoZWFkIHNlY3Rpb24gcHJlLWRlbGF5IGlmIGRlbGF5IHRpbWUgaGFzIGNo
YW5nZWQuCkBAIC03NSwxNyArOTQsMTcgQEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6
OnNldFByZURlbGF5VGltZShmbG9hdCBwcmVEZWxheVRpbWUpCiAgICAgICAgIAogICAgIGlmICht
X2xhc3RQcmVEZWxheUZyYW1lcyAhPSBwcmVEZWxheUZyYW1lcykgewogICAgICAgICBtX2xhc3RQ
cmVEZWxheUZyYW1lcyA9IHByZURlbGF5RnJhbWVzOwotICAgICAgICBtX3ByZURlbGF5QnVmZmVy
TC56ZXJvKCk7Ci0gICAgICAgIG1fcHJlRGVsYXlCdWZmZXJSLnplcm8oKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJlRGVsYXlCdWZmZXJzLnNpemUoKTsgKytpKQorICAg
ICAgICAgICAgbV9wcmVEZWxheUJ1ZmZlcnNbaV0tPnplcm8oKTsKKwogICAgICAgICBtX3ByZURl
bGF5UmVhZEluZGV4ID0gMDsKICAgICAgICAgbV9wcmVEZWxheVdyaXRlSW5kZXggPSBwcmVEZWxh
eUZyYW1lczsKICAgICB9CiB9CiAKLXZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9j
ZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2VMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBzb3VyY2VSLCAvKiBzdGVyZW8tbGlua2VkICovCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogZGVzdGluYXRpb25S
LAordm9pZCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNv
dXJjZUJ1ZmZlcnNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs
b2F0KiBkZXN0aW5hdGlvbkJ1ZmZlcnNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZXNUb1Byb2Nlc3MsCiAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGRiVGhyZXNob2xkLApAQCAtMTAy
LDcgKzEyMSw4IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKGNvbnN0
IGZsb2F0KiBzb3VyY2VMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgcmVsZWFzZVpvbmU0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICApCiB7Ci0gICAgYm9vbCBpc1N0ZXJlbyA9IGRlc3RpbmF0aW9uUjsKKyAgICBBU1NFUlQobV9u
dW1iZXJPZkNoYW5uZWxzID09IG51bWJlck9mQ2hhbm5lbHMpOworCiAgICAgZmxvYXQgc2FtcGxl
UmF0ZSA9IHRoaXMtPnNhbXBsZVJhdGUoKTsKIAogICAgIGZsb2F0IGRyeU1peCA9IDEgLSBlZmZl
Y3RCbGVuZDsKQEAgLTE2NCw2ICsxODQsNyBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5l
bDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlTCwKIAogICAgIGNvbnN0IGludCBuRGl2aXNp
b25zID0gZnJhbWVzVG9Qcm9jZXNzIC8gbkRpdmlzaW9uRnJhbWVzOwogCisgICAgdW5zaWduZWQg
ZnJhbWVJbmRleCA9IDA7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuRGl2aXNpb25zOyArK2kp
IHsKICAgICAgICAgLy8gfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAgICAgICAg
IC8vIENhbGN1bGF0ZSBkZXNpcmVkIGdhaW4KQEAgLTI0Nyw4ICsyNjgsNiBAQCB2b2lkIER5bmFt
aWNzQ29tcHJlc3Nvcktlcm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlTCwKICAgICAg
ICAgLy8gfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKICAgICAgICAgewotICAg
ICAgICAgICAgZmxvYXQqIGRlbGF5QnVmZmVyTCA9IG1fcHJlRGVsYXlCdWZmZXJMLmRhdGEoKTsK
LSAgICAgICAgICAgIGZsb2F0KiBkZWxheUJ1ZmZlclIgPSBtX3ByZURlbGF5QnVmZmVyUi5kYXRh
KCk7CiAgICAgICAgICAgICBpbnQgcHJlRGVsYXlSZWFkSW5kZXggPSBtX3ByZURlbGF5UmVhZElu
ZGV4OwogICAgICAgICAgICAgaW50IHByZURlbGF5V3JpdGVJbmRleCA9IG1fcHJlRGVsYXlXcml0
ZUluZGV4OwogICAgICAgICAgICAgZmxvYXQgZGV0ZWN0b3JBdmVyYWdlID0gbV9kZXRlY3RvckF2
ZXJhZ2U7CkBAIC0yNTYsMzIgKzI3NSwxOSBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5l
bDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlTCwKIAogICAgICAgICAgICAgaW50IGxvb3BG
cmFtZXMgPSBuRGl2aXNpb25GcmFtZXM7CiAgICAgICAgICAgICB3aGlsZSAobG9vcEZyYW1lcy0t
KSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29tcHJlc3NvcklucHV0OwotICAgICAgICAgICAg
ICAgIGZsb2F0IGlucHV0TDsKLSAgICAgICAgICAgICAgICBmbG9hdCBpbnB1dFIgPSAwOworICAg
ICAgICAgICAgICAgIGZsb2F0IGNvbXByZXNzb3JJbnB1dCA9IDA7CiAKICAgICAgICAgICAgICAg
ICAvLyBQcmVkZWxheSBzaWduYWwsIGNvbXB1dGluZyBjb21wcmVzc2lvbiBhbW91bnQgZnJvbSB1
bi1kZWxheWVkIHZlcnNpb24uCi0gICAgICAgICAgICAgICAgaWYgKGlzU3RlcmVvKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGZsb2F0IHVuZGVsYXllZEwgPSAqc291cmNlTCsrOwotICAgICAgICAg
ICAgICAgICAgICBmbG9hdCB1bmRlbGF5ZWRSID0gKnNvdXJjZVIrKzsKLQotICAgICAgICAgICAg
ICAgICAgICBjb21wcmVzc29ySW5wdXQgPSAwLjVmICogKHVuZGVsYXllZEwgKyB1bmRlbGF5ZWRS
KTsKLQotICAgICAgICAgICAgICAgICAgICBpbnB1dEwgPSBkZWxheUJ1ZmZlckxbcHJlRGVsYXlS
ZWFkSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICBpbnB1dFIgPSBkZWxheUJ1ZmZlclJbcHJl
RGVsYXlSZWFkSW5kZXhdOwotCi0gICAgICAgICAgICAgICAgICAgIGRlbGF5QnVmZmVyTFtwcmVE
ZWxheVdyaXRlSW5kZXhdID0gdW5kZWxheWVkTDsKLSAgICAgICAgICAgICAgICAgICAgZGVsYXlC
dWZmZXJSW3ByZURlbGF5V3JpdGVJbmRleF0gPSB1bmRlbGF5ZWRSOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb3JJbnB1dCA9ICpzb3VyY2VM
Kys7Ci0KLSAgICAgICAgICAgICAgICAgICAgaW5wdXRMID0gZGVsYXlCdWZmZXJMW3ByZURlbGF5
UmVhZEluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVsYXlCdWZmZXJMW3ByZURlbGF5V3Jp
dGVJbmRleF0gPSBjb21wcmVzc29ySW5wdXQ7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgeworICAgICAgICAgICAgICAgICAg
ICBmbG9hdCogZGVsYXlCdWZmZXIgPSBtX3ByZURlbGF5QnVmZmVyc1tpXS0+ZGF0YSgpOworICAg
ICAgICAgICAgICAgICAgICBmbG9hdCB1bmRlbGF5ZWRTb3VyY2UgPSBzb3VyY2VCdWZmZXJzW2ld
W2ZyYW1lSW5kZXhdOworICAgICAgICAgICAgICAgICAgICBkZWxheUJ1ZmZlcltwcmVEZWxheVdy
aXRlSW5kZXhdID0gdW5kZWxheWVkU291cmNlOworCisgICAgICAgICAgICAgICAgICAgIGZsb2F0
IGFic1VuZGVsYXllZFNvdXJjZSA9IHVuZGVsYXllZFNvdXJjZSA+IDAgPyB1bmRlbGF5ZWRTb3Vy
Y2UgOiAtdW5kZWxheWVkU291cmNlOworICAgICAgICAgICAgICAgICAgICBpZiAoY29tcHJlc3Nv
cklucHV0IDwgYWJzVW5kZWxheWVkU291cmNlKQorICAgICAgICAgICAgICAgICAgICAgICAgY29t
cHJlc3NvcklucHV0ID0gYWJzVW5kZWxheWVkU291cmNlOwogICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIHByZURlbGF5UmVhZEluZGV4ID0gKHByZURlbGF5UmVhZEluZGV4ICsg
MSkgJiBNYXhQcmVEZWxheUZyYW1lc01hc2s7Ci0gICAgICAgICAgICAgICAgcHJlRGVsYXlXcml0
ZUluZGV4ID0gKHByZURlbGF5V3JpdGVJbmRleCArIDEpICYgTWF4UHJlRGVsYXlGcmFtZXNNYXNr
OwotCiAgICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHNoYXBlZCBwb3dlciBvbiB1bmRlbGF5
ZWQgaW5wdXQuCiAKICAgICAgICAgICAgICAgICBmbG9hdCBzY2FsZWRJbnB1dCA9IGNvbXByZXNz
b3JJbnB1dDsKQEAgLTMzNywxNyArMzQzLDE0IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2Vy
bmVsOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2VMLAogICAgICAgICAgICAgICAgICAgICBt
X21ldGVyaW5nR2FpbiArPSAoZGJSZWFsR2FpbiAtIG1fbWV0ZXJpbmdHYWluKSAqIG1fbWV0ZXJp
bmdSZWxlYXNlSzsKIAogICAgICAgICAgICAgICAgIC8vIEFwcGx5IGZpbmFsIGdhaW4uCi0gICAg
ICAgICAgICAgICAgaWYgKGlzU3RlcmVvKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IG91
dHB1dEwgPSBpbnB1dEw7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IG91dHB1dFIgPSBpbnB1
dFI7Ci0KLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0TCAqPSB0b3RhbEdhaW47Ci0gICAgICAg
ICAgICAgICAgICAgIG91dHB1dFIgKj0gdG90YWxHYWluOworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZmxvYXQqIGRlbGF5QnVmZmVyID0gbV9wcmVEZWxheUJ1ZmZlcnNbaV0tPmRhdGEo
KTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25CdWZmZXJzW2ldW2ZyYW1lSW5kZXhd
ID0gZGVsYXlCdWZmZXJbcHJlRGVsYXlSZWFkSW5kZXhdICogdG90YWxHYWluOworICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25MKysgPSBvdXRwdXRM
OwotICAgICAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25SKysgPSBvdXRwdXRSOwotICAgICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25MKysgPSBp
bnB1dEwgKiB0b3RhbEdhaW47CisgICAgICAgICAgICAgICAgZnJhbWVJbmRleCsrOworICAgICAg
ICAgICAgICAgIHByZURlbGF5UmVhZEluZGV4ID0gKHByZURlbGF5UmVhZEluZGV4ICsgMSkgJiBN
YXhQcmVEZWxheUZyYW1lc01hc2s7CisgICAgICAgICAgICAgICAgcHJlRGVsYXlXcml0ZUluZGV4
ID0gKHByZURlbGF5V3JpdGVJbmRleCArIDEpICYgTWF4UHJlRGVsYXlGcmFtZXNNYXNrOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBMb2NhbHMgYmFjayB0byBtZW1iZXIgdmFyaWFi
bGVzLgpAQCAtMzY2LDggKzM2OSw5IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpy
ZXNldCgpCiAgICAgbV9tZXRlcmluZ0dhaW4gPSAxOwogCiAgICAgLy8gUHJlZGVsYXkgc2VjdGlv
bi4KLSAgICBtX3ByZURlbGF5QnVmZmVyTC56ZXJvKCk7Ci0gICAgbV9wcmVEZWxheUJ1ZmZlclIu
emVybygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ByZURlbGF5QnVmZmVycy5z
aXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVEZWxheUJ1ZmZlcnNbaV0tPnplcm8oKTsKKwogICAg
IG1fcHJlRGVsYXlSZWFkSW5kZXggPSAwOwogICAgIG1fcHJlRGVsYXlXcml0ZUluZGV4ID0gRGVm
YXVsdFByZURlbGF5RnJhbWVzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oCmluZGV4IGNmMzE5YjM3OGFkZWI1
OTA2Mjk1M2RlYWIwOTJlMzMzOWM2ZjY4ODAuLjJiY2NmZjRlYTFiZTcxZWNlMDk1ZjdmMDYyMzQ4
MmMwZTdkMTkyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5
bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oCkBAIC0zMSwxNyArMzEsMjIgQEAKIAogI2lu
Y2x1ZGUgIkF1ZGlvQXJyYXkuaCIKIAorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIER5bmFt
aWNzQ29tcHJlc3Nvcktlcm5lbCB7CiBwdWJsaWM6Ci0gICAgRHluYW1pY3NDb21wcmVzc29yS2Vy
bmVsKGZsb2F0IHNhbXBsZVJhdGUpOworICAgIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbChmbG9h
dCBzYW1wbGVSYXRlLCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKTsKKyAgICB+RHluYW1pY3ND
b21wcmVzc29yS2VybmVsKCk7CisKKyAgICB2b2lkIHNldE51bWJlck9mQ2hhbm5lbHModW5zaWdu
ZWQpOwogCiAgICAgLy8gUGVyZm9ybXMgc3RlcmVvLWxpbmtlZCBjb21wcmVzc2lvbi4KLSAgICB2
b2lkIHByb2Nlc3MoY29uc3QgZmxvYXQgKnNvdXJjZUwsCi0gICAgICAgICAgICAgICAgIGZsb2F0
ICpkZXN0aW5hdGlvbkwsCi0gICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0ICpzb3VyY2VSLAot
ICAgICAgICAgICAgICAgICBmbG9hdCAqZGVzdGluYXRpb25SLAorICAgIHZvaWQgcHJvY2Vzcyhj
b25zdCBmbG9hdCogc291cmNlQnVmZmVyc1tdLAorICAgICAgICAgICAgICAgICBmbG9hdCogZGVz
dGluYXRpb25CdWZmZXJzW10sCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ2hh
bm5lbHMsCiAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lc1RvUHJvY2VzcywKIAogICAg
ICAgICAgICAgICAgICBmbG9hdCBkYlRocmVzaG9sZCwKQEAgLTY2LDcgKzcxLDggQEAgcHVibGlj
OgogCiBwcm90ZWN0ZWQ6CiAgICAgZmxvYXQgbV9zYW1wbGVSYXRlOwotICAgIAorICAgIHVuc2ln
bmVkIG1fbnVtYmVyT2ZDaGFubmVsczsKKwogICAgIGZsb2F0IG1fZGV0ZWN0b3JBdmVyYWdlOwog
ICAgIGZsb2F0IG1fY29tcHJlc3NvckdhaW47CiAKQEAgLTgxLDggKzg3LDcgQEAgcHJvdGVjdGVk
OgogICAgIHVuc2lnbmVkIG1fbGFzdFByZURlbGF5RnJhbWVzOwogICAgIHZvaWQgc2V0UHJlRGVs
YXlUaW1lKGZsb2F0KTsKIAotICAgIEF1ZGlvRmxvYXRBcnJheSBtX3ByZURlbGF5QnVmZmVyTDsK
LSAgICBBdWRpb0Zsb2F0QXJyYXkgbV9wcmVEZWxheUJ1ZmZlclI7CisgICAgVmVjdG9yPE93blB0
cjxBdWRpb0Zsb2F0QXJyYXk+ID4gbV9wcmVEZWxheUJ1ZmZlcnM7CiAgICAgaW50IG1fcHJlRGVs
YXlSZWFkSW5kZXg7CiAgICAgaW50IG1fcHJlRGVsYXlXcml0ZUluZGV4OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwCmluZGV4IGVh
OGI1ODkyMjM1NmFhMTM2NTEzMmFlZjMxZmFhZjYwM2Y3NDU0MjcuLjEzZjdjODIzNTQ1NDkxODkw
ZjZiN2RkZjk0YTQ5NGQxYTk1OThkMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwCkBAIC0zOSw3ICszOSw3IEBAIER5bmFtaWNz
Q29tcHJlc3Nvck5vZGU6OkR5bmFtaWNzQ29tcHJlc3Nvck5vZGUoQXVkaW9Db250ZXh0KiBjb250
ZXh0LCBmbG9hdCBzYW1wCiAgICAgOiBBdWRpb05vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKIHsK
ICAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlSW5wdXQodGhpcykpKTsKLSAgICBh
ZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCAyKSkpOworICAgIGFk
ZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIERlZmF1bHROdW1iZXJP
Zk91dHB1dENoYW5uZWxzKSkpOwogICAgIAogICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlRHluYW1p
Y3NDb21wcmVzc29yKTsKICAgICAKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBEeW5hbWljc0NvbXBy
ZXNzb3JOb2RlOjppbml0aWFsaXplKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQXVkaW9Ob2Rl
Ojppbml0aWFsaXplKCk7ICAgIAotICAgIG1fZHluYW1pY3NDb21wcmVzc29yID0gYWRvcHRQdHIo
bmV3IER5bmFtaWNzQ29tcHJlc3Nvcih0cnVlLCBzYW1wbGVSYXRlKCkpKTsKKyAgICBtX2R5bmFt
aWNzQ29tcHJlc3NvciA9IGFkb3B0UHRyKG5ldyBEeW5hbWljc0NvbXByZXNzb3Ioc2FtcGxlUmF0
ZSgpLCBEZWZhdWx0TnVtYmVyT2ZPdXRwdXRDaGFubmVscykpOwogfQogCiB2b2lkIER5bmFtaWNz
Q29tcHJlc3Nvck5vZGU6OnVuaW5pdGlhbGl6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmgKaW5kZXggZDcxOGFiMzQxY2MwMWUxODhjZjIx
MzA1Njc0NjVmMDQ4YmRhMDVjYi4uZjI1ZmFjNTRlOTAxMDQwNThlMDdlMzM4M2I0ZWRjZjM3ODUw
YmE1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVz
c29yTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nv
ck5vZGUuaApAQCAtNTAsNiArNTAsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIER5bmFtaWNz
Q29tcHJlc3Nvck5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7CiAKKyAgICAv
LyBTZXQgb3V0cHV0IHRvIHN0ZXJlbyBieSBkZWZhdWx0LgorICAgIGVudW0geyBEZWZhdWx0TnVt
YmVyT2ZPdXRwdXRDaGFubmVscyA9IDIgfTsKKwogICAgIE93blB0cjxEeW5hbWljc0NvbXByZXNz
b3I+IG1fZHluYW1pY3NDb21wcmVzc29yOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127494</attachid>
            <date>2012-02-16 18:48:23 -0800</date>
            <delta_ts>2012-02-16 19:02:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77856-20120217105311.patch</filename>
            <type>text/plain</type>
            <size>23933</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MDAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWNhMmEyZmQ3ZWQxZDBi
MTA0NGQyOTg2ZTVjNjY4MTllMjZkMDhhNi4uYWJiNGYyNzRjYzQ1MDVlNGQxOWQ4NmQ3YWMxY2Q1
ZTQwZDlkOTA5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTAyLTE2ICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBIYXZlIHRoZSBEeW5h
bWljc0NvbXByZXNzb3JOb2RlIHN1cHBvcnQgbXVsdGktY2hhbm5lbCBkYXRhCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzg1NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRHlu
YW1pY3NDb21wcmVzc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nv
cjo6RHluYW1pY3NDb21wcmVzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJl
c3Nvcjo6c2V0RW1waGFzaXNTdGFnZVBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RHlu
YW1pY3NDb21wcmVzc29yOjpwcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29t
cHJlc3Nvcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yOjpz
ZXROdW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5oOgorICAgICAgICAoRHluYW1pY3NDb21wcmVz
c29yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpEeW5hbWlj
c0NvbXByZXNzb3JLZXJuZWwpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29y
S2VybmVsOjp+RHluYW1pY3NDb21wcmVzc29yS2VybmVsKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpzZXROdW1iZXJPZkNo
YW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0
UHJlRGVsYXlUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5l
bDo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6
OnJlc2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJu
ZWwuaDoKKyAgICAgICAgKER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbCk6CisgICAgICAgICogd2Vi
YXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEeW5h
bWljc0NvbXByZXNzb3JOb2RlOjpEeW5hbWljc0NvbXByZXNzb3JOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OmluaXRpYWxpemUpOgorICAgICAgICAqIHdl
YmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaDoKKyAgICAgICAgKER5bmFtaWNzQ29tcHJl
c3Nvck5vZGUpOgorCiAyMDEyLTAyLTE2ICBDcmlzIE5lY2thciAgPGNkbkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgVmVyeSBsYXJnZSBzdHJpbmdzIGNvdWxkIGNhdXNlIHRoZSBuZXcgcXVvdGVk
IHN0cmluZyB0byB3cmFwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vRHluYW1pY3NDb21wcmVzc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0R5bmFtaWNzQ29tcHJlc3Nvci5jcHAKaW5kZXggYTU1MjA1NzA1ZDk1MTBiZjIwZDlkYjM1NDg3
OTM5NjVlZTAyZWUxZC4uYjEwOTI2ZDcyOGNhOWVjNzUxMjBjYjZiMTIyNjFiNjc4NGVjNTU1YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVz
c29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXBy
ZXNzb3IuY3BwCkBAIC00MCwxNiArNDAsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgQXVkaW9VdGlsaXRpZXM7CiAgICAgCi1EeW5hbWljc0NvbXByZXNzb3I6OkR5
bmFtaWNzQ29tcHJlc3Nvcihib29sIGlzU3RlcmVvLCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIDog
bV9pc1N0ZXJlbyhpc1N0ZXJlbykKLSAgICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQotICAg
ICwgbV9jb21wcmVzc29yKHNhbXBsZVJhdGUpCitEeW5hbWljc0NvbXByZXNzb3I6OkR5bmFtaWNz
Q29tcHJlc3NvcihmbG9hdCBzYW1wbGVSYXRlLCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKQor
ICAgIDogbV9udW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5lbHMpCisgICAgLCBtX2NvbXBy
ZXNzb3Ioc2FtcGxlUmF0ZSwgbnVtYmVyT2ZDaGFubmVscykKIHsKICAgICAvLyBVbmluaXRpYWxp
emVkIHN0YXRlIC0gZm9yIHBhcmFtZXRlciByZWNhbGN1bGF0aW9uLgogICAgIG1fbGFzdEZpbHRl
clN0YWdlUmF0aW8gPSAtMTsKICAgICBtX2xhc3RBbmNob3IgPSAtMTsKICAgICBtX2xhc3RGaWx0
ZXJTdGFnZUdhaW4gPSAtMTsKIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJP
ZkNoYW5uZWxzOyArK2kpIHsKKyAgICAgICAgbV9wcmVGaWx0ZXJQYWNrcy5hcHBlbmQoYWRvcHRQ
dHIobmV3IFplcm9Qb2xlRmlsdGVyUGFjazQoKSkpOworICAgICAgICBtX3Bvc3RGaWx0ZXJQYWNr
cy5hcHBlbmQoYWRvcHRQdHIobmV3IFplcm9Qb2xlRmlsdGVyUGFjazQoKSkpOworICAgIH0KKwog
ICAgIGluaXRpYWxpemVQYXJhbWV0ZXJzKCk7CiB9CiAKQEAgLTkzLDE4ICs5NywyMCBAQCB2b2lk
IER5bmFtaWNzQ29tcHJlc3Nvcjo6c2V0RW1waGFzaXNTdGFnZVBhcmFtZXRlcnModW5zaWduZWQg
c3RhZ2VJbmRleCwgZmxvYXQgZwogICAgIGZsb2F0IHIxID0gZXhwZigtZjEgKiBwaUZsb2F0KTsK
ICAgICBmbG9hdCByMiA9IGV4cGYoLWYyICogcGlGbG9hdCk7CiAKLSAgICAvLyBTZXQgcHJlLWZp
bHRlciB6ZXJvIGFuZCBwb2xlIHRvIGNyZWF0ZSBhbiBlbXBoYXNpcyBmaWx0ZXIuCi0gICAgbV9w
cmVGaWx0ZXJbc3RhZ2VJbmRleF0uc2V0WmVybyhyMSk7Ci0gICAgbV9wcmVGaWx0ZXJbc3RhZ2VJ
bmRleF0uc2V0UG9sZShyMik7Ci0gICAgbV9wcmVGaWx0ZXJSW3N0YWdlSW5kZXhdLnNldFplcm8o
cjEpOwotICAgIG1fcHJlRmlsdGVyUltzdGFnZUluZGV4XS5zZXRQb2xlKHIyKTsKLQotICAgIC8v
IFNldCBwb3N0LWZpbHRlciB3aXRoIHplcm8gYW5kIHBvbGUgcmV2ZXJzZWQgdG8gY3JlYXRlIHRo
ZSBkZS1lbXBoYXNpcyBmaWx0ZXIuCi0gICAgLy8gSWYgdGhlcmUgd2VyZSBubyBjb21wcmVzc29y
IGtlcm5lbCBpbiBiZXR3ZWVuLCB0aGV5IHdvdWxkIGNhbmNlbCBlYWNoIG90aGVyIG91dCAoYWxs
cGFzcyBmaWx0ZXIpLgotICAgIG1fcG9zdEZpbHRlcltzdGFnZUluZGV4XS5zZXRaZXJvKHIyKTsK
LSAgICBtX3Bvc3RGaWx0ZXJbc3RhZ2VJbmRleF0uc2V0UG9sZShyMSk7Ci0gICAgbV9wb3N0Rmls
dGVyUltzdGFnZUluZGV4XS5zZXRaZXJvKHIyKTsKLSAgICBtX3Bvc3RGaWx0ZXJSW3N0YWdlSW5k
ZXhdLnNldFBvbGUocjEpOworICAgIEFTU0VSVChtX251bWJlck9mQ2hhbm5lbHMgPT0gbV9wcmVG
aWx0ZXJQYWNrcy5zaXplKCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVt
YmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgIFplcm9Qb2xlJiBwcmVGaWx0ZXIgPSBtX3By
ZUZpbHRlclBhY2tzW2ldLT5maWx0ZXJzW3N0YWdlSW5kZXhdOworICAgICAgICAvLyBTZXQgcHJl
LWZpbHRlciB6ZXJvIGFuZCBwb2xlIHRvIGNyZWF0ZSBhbiBlbXBoYXNpcyBmaWx0ZXIuCisgICAg
ICAgIHByZUZpbHRlci5zZXRaZXJvKHIxKTsKKyAgICAgICAgcHJlRmlsdGVyLnNldFBvbGUocjIp
OworCisgICAgICAgIC8vIFNldCBwb3N0LWZpbHRlciB3aXRoIHplcm8gYW5kIHBvbGUgcmV2ZXJz
ZWQgdG8gY3JlYXRlIHRoZSBkZS1lbXBoYXNpcyBmaWx0ZXIuCisgICAgICAgIC8vIElmIHRoZXJl
IHdlcmUgbm8gY29tcHJlc3NvciBrZXJuZWwgaW4gYmV0d2VlbiwgdGhleSB3b3VsZCBjYW5jZWwg
ZWFjaCBvdGhlciBvdXQgKGFsbHBhc3MgZmlsdGVyKS4KKyAgICAgICAgWmVyb1BvbGUmIHBvc3RG
aWx0ZXIgPSBtX3Bvc3RGaWx0ZXJQYWNrc1tpXS0+ZmlsdGVyc1tzdGFnZUluZGV4XTsKKyAgICAg
ICAgcG9zdEZpbHRlci5zZXRaZXJvKHIyKTsKKyAgICAgICAgcG9zdEZpbHRlci5zZXRQb2xlKHIx
KTsKKyAgICB9CiB9CiAKIHZvaWQgRHluYW1pY3NDb21wcmVzc29yOjpzZXRFbXBoYXNpc1BhcmFt
ZXRlcnMoZmxvYXQgZ2FpbiwgZmxvYXQgYW5jaG9yRnJlcSwgZmxvYXQgZmlsdGVyU3RhZ2VSYXRp
bykKQEAgLTExNywxOCArMTIzLDM2IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yOjpzZXRFbXBo
YXNpc1BhcmFtZXRlcnMoZmxvYXQgZ2FpbiwgZmxvYXQgYW5jaG9yRnJlcSwgZmxvCiAKIHZvaWQg
RHluYW1pY3NDb21wcmVzc29yOjpwcm9jZXNzKGNvbnN0IEF1ZGlvQnVzKiBzb3VyY2VCdXMsIEF1
ZGlvQnVzKiBkZXN0aW5hdGlvbkJ1cywgdW5zaWduZWQgZnJhbWVzVG9Qcm9jZXNzKQogewotICAg
IGNvbnN0IGZsb2F0KiBzb3VyY2VMID0gc291cmNlQnVzLT5jaGFubmVsKDApLT5kYXRhKCk7Ci0g
ICAgY29uc3QgZmxvYXQqIHNvdXJjZVI7Ci0KLSAgICBpZiAoc291cmNlQnVzLT5udW1iZXJPZkNo
YW5uZWxzKCkgPiAxKQotICAgICAgICBzb3VyY2VSID0gc291cmNlQnVzLT5jaGFubmVsKDEpLT5k
YXRhKCk7Ci0gICAgZWxzZQotICAgICAgICBzb3VyY2VSID0gc291cmNlTDsKLQotICAgIEFTU0VS
VChkZXN0aW5hdGlvbkJ1cy0+bnVtYmVyT2ZDaGFubmVscygpID09IDIpOworICAgIC8vIFRob3Vn
aCBudW1iZXJPZkNoYW5uZWxzIGlzIHJldHJpdmVkIGZyb20gZGVzdGluYXRpb25CdXMsIHdlIHN0
aWxsIG5hbWUgaXQgbnVtYmVyT2ZDaGFubmVscyBpbnN0ZWFkIG9mIG51bWJlck9mRGVzdGluYXRp
b25DaGFubmVscy4KKyAgICAvLyBJdCdzIGJlY2F1c2Ugd2UgaW50ZXJuYWxseSBtYXRjaCBzb3Vy
Y2VDaGFubmVscydzIHNpemUgdG8gZGVzdGluYXRpb25CdXMgYnkgY2hhbm5lbCB1cC9kb3duIG1p
eC4gVGh1cyB3ZSBuZWVkIG51bWJlck9mQ2hhbm5lbHMKKyAgICAvLyB0byBkbyB0aGUgbG9vcCB3
b3JrIGZvciBib3RoIHNvdXJjZUNoYW5uZWxzIGFuZCBkZXN0aW5hdGlvbkNoYW5uZWxzLgorCisg
ICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyA9IGRlc3RpbmF0aW9uQnVzLT5udW1iZXJPZkNo
YW5uZWxzKCk7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZTb3VyY2VDaGFubmVscyA9IHNvdXJjZUJ1
cy0+bnVtYmVyT2ZDaGFubmVscygpOworCisgICAgY29uc3QgZmxvYXQqIHNvdXJjZUNoYW5uZWxz
W251bWJlck9mQ2hhbm5lbHNdOworICAgIGZsb2F0KiBkZXN0aW5hdGlvbkNoYW5uZWxzW251bWJl
ck9mQ2hhbm5lbHNdOworCisgICAgc3dpdGNoIChudW1iZXJPZkNoYW5uZWxzKSB7CisgICAgY2Fz
ZSAyOiAvLyBzdGVyZW8KKyAgICAgICAgc291cmNlQ2hhbm5lbHNbMF0gPSBzb3VyY2VCdXMtPmNo
YW5uZWwoMCktPmRhdGEoKTsKKworICAgICAgICBpZiAobnVtYmVyT2ZTb3VyY2VDaGFubmVscyA+
IDEpCisgICAgICAgICAgICBzb3VyY2VDaGFubmVsc1sxXSA9IHNvdXJjZUJ1cy0+Y2hhbm5lbCgx
KS0+ZGF0YSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAvLyBTaW1wbHkgZHVwbGljYXRl
IG1vbm8gY2hhbm5lbCBpbnB1dCBkYXRhIHRvIHJpZ2h0IGNoYW5uZWwgZm9yIHN0ZXJlbyBwcm9j
ZXNzaW5nLgorICAgICAgICAgICAgc291cmNlQ2hhbm5lbHNbMV0gPSBzb3VyY2VDaGFubmVsc1sw
XTsKKworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGSVhNRSA6IHN1
cHBvcnQgb3RoZXIgbGF5b3V0cy4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGRlc3RpbmF0aW9uQnVzLT56ZXJvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAg
ICBmbG9hdCogZGVzdGluYXRpb25MID0gZGVzdGluYXRpb25CdXMtPmNoYW5uZWwoMCktPm11dGFi
bGVEYXRhKCk7Ci0gICAgZmxvYXQqIGRlc3RpbmF0aW9uUiA9IGRlc3RpbmF0aW9uQnVzLT5jaGFu
bmVsKDEpLT5tdXRhYmxlRGF0YSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1i
ZXJPZkNoYW5uZWxzOyArK2kpCisgICAgICAgIGRlc3RpbmF0aW9uQ2hhbm5lbHNbaV0gPSBkZXN0
aW5hdGlvbkJ1cy0+Y2hhbm5lbChpKS0+bXV0YWJsZURhdGEoKTsKIAogICAgIGZsb2F0IGZpbHRl
clN0YWdlR2FpbiA9IHBhcmFtZXRlclZhbHVlKFBhcmFtRmlsdGVyU3RhZ2VHYWluKTsKICAgICBm
bG9hdCBmaWx0ZXJTdGFnZVJhdGlvID0gcGFyYW1ldGVyVmFsdWUoUGFyYW1GaWx0ZXJTdGFnZVJh
dGlvKTsKQEAgLTE0NCwxNiArMTY4LDE1IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yOjpwcm9j
ZXNzKGNvbnN0IEF1ZGlvQnVzKiBzb3VyY2VCdXMsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvCiAKICAg
ICAvLyBBcHBseSBwcmUtZW1waGFzaXMgZmlsdGVyLgogICAgIC8vIE5vdGUgdGhhdCB0aGUgZmlu
YWwgdGhyZWUgc3RhZ2VzIGFyZSBjb21wdXRlZCBpbi1wbGFjZSBpbiB0aGUgZGVzdGluYXRpb24g
YnVmZmVyLgotICAgIG1fcHJlRmlsdGVyWzBdLnByb2Nlc3Moc291cmNlTCwgZGVzdGluYXRpb25M
LCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIG1fcHJlRmlsdGVyWzFdLnByb2Nlc3MoZGVzdGluYXRp
b25MLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgbV9wcmVGaWx0ZXJbMl0u
cHJvY2VzcyhkZXN0aW5hdGlvbkwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAg
ICBtX3ByZUZpbHRlclszXS5wcm9jZXNzKGRlc3RpbmF0aW9uTCwgZGVzdGluYXRpb25MLCBmcmFt
ZXNUb1Byb2Nlc3MpOwotCi0gICAgaWYgKGlzU3RlcmVvKCkpIHsKLSAgICAgICAgbV9wcmVGaWx0
ZXJSWzBdLnByb2Nlc3Moc291cmNlUiwgZGVzdGluYXRpb25SLCBmcmFtZXNUb1Byb2Nlc3MpOwot
ICAgICAgICBtX3ByZUZpbHRlclJbMV0ucHJvY2VzcyhkZXN0aW5hdGlvblIsIGRlc3RpbmF0aW9u
UiwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgbV9wcmVGaWx0ZXJSWzJdLnByb2Nlc3MoZGVz
dGluYXRpb25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgICAgIG1fcHJl
RmlsdGVyUlszXS5wcm9jZXNzKGRlc3RpbmF0aW9uUiwgZGVzdGluYXRpb25SLCBmcmFtZXNUb1By
b2Nlc3MpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyAr
K2kpIHsKKyAgICAgICAgY29uc3QgZmxvYXQqIHNvdXJjZURhdGEgPSBzb3VyY2VDaGFubmVsc1tp
XTsKKyAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uRGF0YSA9IGRlc3RpbmF0aW9uQ2hhbm5lbHNb
aV07CisgICAgICAgIFplcm9Qb2xlKiBwcmVGaWx0ZXJzID0gbV9wcmVGaWx0ZXJQYWNrc1tpXS0+
ZmlsdGVyczsKKworICAgICAgICBwcmVGaWx0ZXJzWzBdLnByb2Nlc3Moc291cmNlRGF0YSwgZGVz
dGluYXRpb25EYXRhLCBmcmFtZXNUb1Byb2Nlc3MpOworICAgICAgICBwcmVGaWx0ZXJzWzFdLnBy
b2Nlc3MoZGVzdGluYXRpb25EYXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vzcyk7
CisgICAgICAgIHByZUZpbHRlcnNbMl0ucHJvY2VzcyhkZXN0aW5hdGlvbkRhdGEsIGRlc3RpbmF0
aW9uRGF0YSwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICAgICAgcHJlRmlsdGVyc1szXS5wcm9jZXNz
KGRlc3RpbmF0aW9uRGF0YSwgZGVzdGluYXRpb25EYXRhLCBmcmFtZXNUb1Byb2Nlc3MpOwogICAg
IH0KIAogICAgIGZsb2F0IGRiVGhyZXNob2xkID0gcGFyYW1ldGVyVmFsdWUoUGFyYW1UaHJlc2hv
bGQpOwpAQCAtMTc1LDEyICsxOTgsOSBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6cHJvY2Vz
cyhjb25zdCBBdWRpb0J1cyogc291cmNlQnVzLCBBdWRpb0J1cyogZGVzdGluYXRpbwogICAgIGZs
b2F0IHJlbGVhc2Vab25lMyA9IHBhcmFtZXRlclZhbHVlKFBhcmFtUmVsZWFzZVpvbmUzKTsKICAg
ICBmbG9hdCByZWxlYXNlWm9uZTQgPSBwYXJhbWV0ZXJWYWx1ZShQYXJhbVJlbGVhc2Vab25lNCk7
CiAKLSAgICAvLyBBcHBseSBjb21wcmVzc2lvbiB0byB0aGUgcHJlLWZpbHRlcmVkIHNpZ25hbC4K
LSAgICAvLyBUaGUgcHJvY2Vzc2luZyBpcyBwZXJmb3JtZWQgaW4gcGxhY2UuCi0gICAgbV9jb21w
cmVzc29yLnByb2Nlc3MoZGVzdGluYXRpb25MLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RpbmF0aW9uTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25SLAorICAgIG1fY29tcHJlc3Nvci5wcm9j
ZXNzKGRlc3RpbmF0aW9uQ2hhbm5lbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGlu
YXRpb25DaGFubmVscywKKyAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkNoYW5uZWxz
LAogICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1RvUHJvY2VzcywKIAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGRiVGhyZXNob2xkLApAQCAtMTk4LDE2ICsyMTgsMTQgQEAgdm9pZCBE
eW5hbWljc0NvbXByZXNzb3I6OnByb2Nlc3MoY29uc3QgQXVkaW9CdXMqIHNvdXJjZUJ1cywgQXVk
aW9CdXMqIGRlc3RpbmF0aW8KICAgICAgICAgICAgICAgICAgICAgICAgICApOwogCiAgICAgLy8g
QXBwbHkgZGUtZW1waGFzaXMgZmlsdGVyLgotICAgIG1fcG9zdEZpbHRlclswXS5wcm9jZXNzKGRl
c3RpbmF0aW9uTCwgZGVzdGluYXRpb25MLCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIG1fcG9zdEZp
bHRlclsxXS5wcm9jZXNzKGRlc3RpbmF0aW9uTCwgZGVzdGluYXRpb25MLCBmcmFtZXNUb1Byb2Nl
c3MpOwotICAgIG1fcG9zdEZpbHRlclsyXS5wcm9jZXNzKGRlc3RpbmF0aW9uTCwgZGVzdGluYXRp
b25MLCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIG1fcG9zdEZpbHRlclszXS5wcm9jZXNzKGRlc3Rp
bmF0aW9uTCwgZGVzdGluYXRpb25MLCBmcmFtZXNUb1Byb2Nlc3MpOwotCi0gICAgaWYgKGlzU3Rl
cmVvKCkpIHsKLSAgICAgICAgbV9wb3N0RmlsdGVyUlswXS5wcm9jZXNzKGRlc3RpbmF0aW9uUiwg
ZGVzdGluYXRpb25SLCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgICAgICBtX3Bvc3RGaWx0ZXJSWzFd
LnByb2Nlc3MoZGVzdGluYXRpb25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0g
ICAgICAgIG1fcG9zdEZpbHRlclJbMl0ucHJvY2VzcyhkZXN0aW5hdGlvblIsIGRlc3RpbmF0aW9u
UiwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgbV9wb3N0RmlsdGVyUlszXS5wcm9jZXNzKGRl
c3RpbmF0aW9uUiwgZGVzdGluYXRpb25SLCBmcmFtZXNUb1Byb2Nlc3MpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpIHsKKyAgICAgICAgZmxvYXQq
IGRlc3RpbmF0aW9uRGF0YSA9IGRlc3RpbmF0aW9uQ2hhbm5lbHNbaV07CisgICAgICAgIFplcm9Q
b2xlKiBwb3N0RmlsdGVycyA9IG1fcG9zdEZpbHRlclBhY2tzW2ldLT5maWx0ZXJzOworCisgICAg
ICAgIHBvc3RGaWx0ZXJzWzBdLnByb2Nlc3MoZGVzdGluYXRpb25EYXRhLCBkZXN0aW5hdGlvbkRh
dGEsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIHBvc3RGaWx0ZXJzWzFdLnByb2Nlc3MoZGVz
dGluYXRpb25EYXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAg
IHBvc3RGaWx0ZXJzWzJdLnByb2Nlc3MoZGVzdGluYXRpb25EYXRhLCBkZXN0aW5hdGlvbkRhdGEs
IGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIHBvc3RGaWx0ZXJzWzNdLnByb2Nlc3MoZGVzdGlu
YXRpb25EYXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vzcyk7CiAgICAgfQogfQog
CkBAIC0yMTcsMTYgKzIzNSwzMiBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6cmVzZXQoKQog
ICAgIG1fbGFzdEFuY2hvciA9IC0xOwogICAgIG1fbGFzdEZpbHRlclN0YWdlR2FpbiA9IC0xOwog
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDQ7ICsraSkgewotICAgICAgICBtX3ByZUZp
bHRlcltpXS5yZXNldCgpOwotICAgICAgICBtX3ByZUZpbHRlclJbaV0ucmVzZXQoKTsKLSAgICAg
ICAgbV9wb3N0RmlsdGVyW2ldLnJlc2V0KCk7Ci0gICAgICAgIG1fcG9zdEZpbHRlclJbaV0ucmVz
ZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgbV9udW1iZXJP
ZkNoYW5uZWxzOyArK2NoYW5uZWwpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBzdGFnZUluZGV4
ID0gMDsgc3RhZ2VJbmRleCA8IDQ7ICsrc3RhZ2VJbmRleCkgeworICAgICAgICAgICAgbV9wcmVG
aWx0ZXJQYWNrc1tjaGFubmVsXS0+ZmlsdGVyc1tzdGFnZUluZGV4XS5yZXNldCgpOworICAgICAg
ICAgICAgbV9wb3N0RmlsdGVyUGFja3NbY2hhbm5lbF0tPmZpbHRlcnNbc3RhZ2VJbmRleF0ucmVz
ZXQoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIG1fY29tcHJlc3Nvci5yZXNldCgpOwogfQog
Cit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6c2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCBu
dW1iZXJPZkNoYW5uZWxzKQoreworICAgIGlmIChtX3ByZUZpbHRlclBhY2tzLnNpemUoKSA9PSBu
dW1iZXJPZkNoYW5uZWxzKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByZUZpbHRlclBhY2tz
LmNsZWFyKCk7CisgICAgbV9wb3N0RmlsdGVyUGFja3MuY2xlYXIoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgIG1fcHJlRmls
dGVyUGFja3MuYXBwZW5kKGFkb3B0UHRyKG5ldyBaZXJvUG9sZUZpbHRlclBhY2s0KCkpKTsKKyAg
ICAgICAgbV9wb3N0RmlsdGVyUGFja3MuYXBwZW5kKGFkb3B0UHRyKG5ldyBaZXJvUG9sZUZpbHRl
clBhY2s0KCkpKTsKKyAgICB9CisKKyAgICBtX2NvbXByZXNzb3Iuc2V0TnVtYmVyT2ZDaGFubmVs
cyhudW1iZXJPZkNoYW5uZWxzKTsKKyAgICBtX251bWJlck9mQ2hhbm5lbHMgPSBudW1iZXJPZkNo
YW5uZWxzOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
V0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHlu
YW1pY3NDb21wcmVzc29yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWlj
c0NvbXByZXNzb3IuaAppbmRleCBlMDExNWVlMjczZTQzMGY5YzI4ZjU2NGJmYzljYzQ0ZWJjNjZj
NjllLi43ZTFiYjlkMmZhOGZmZTEzNTM3MzlmZjJkZjdhODc4YzlkMWRmZGI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuaApAQCAt
NjIsMjUgKzYyLDI2IEBAIHB1YmxpYzoKICAgICAgICAgUGFyYW1MYXN0CiAgICAgfTsKIAotICAg
IER5bmFtaWNzQ29tcHJlc3Nvcihib29sIGlzU3RlcmVvLCBmbG9hdCBzYW1wbGVSYXRlKTsKKyAg
ICBEeW5hbWljc0NvbXByZXNzb3IoZmxvYXQgc2FtcGxlUmF0ZSwgdW5zaWduZWQgbnVtYmVyT2ZD
aGFubmVscyk7CiAKICAgICB2b2lkIHByb2Nlc3MoY29uc3QgQXVkaW9CdXMqIHNvdXJjZUJ1cywg
QXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzLCB1bnNpZ25lZCBmcmFtZXNUb1Byb2Nlc3MpOwogICAg
IHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIHNldE51bWJlck9mQ2hhbm5lbHModW5zaWduZWQpOwog
CiAgICAgZmxvYXQgcGFyYW1ldGVyVmFsdWUodW5zaWduZWQgcGFyYW1ldGVySUQpOwogCi0gICAg
Ym9vbCBpc1N0ZXJlbygpIGNvbnN0IHsgcmV0dXJuIG1faXNTdGVyZW87IH0KICAgICBmbG9hdCBz
YW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9CiAgICAgZmxvYXQgbnlx
dWlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZSAvIDI7IH0KIAogcHJvdGVjdGVkOgor
ICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZDaGFubmVsczsKKwogICAgIC8vIG1fcGFyYW1ldGVycyBo
b2xkcyB0aGUgdHdlYWthYmxlIGNvbXByZXNzb3IgcGFyYW1ldGVycy4KICAgICAvLyBGSVhNRTog
ZXhwb3NlIHNvbWUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IG9uZXMgKHN1Y2ggYXMgdGhyZXNob2xk
LCBhdHRhY2ssIHJlbGVhc2UpCiAgICAgLy8gYXMgRHluYW1pY3NDb21wcmVzc29yTm9kZSBhdHRy
aWJ1dGVzLgogICAgIGZsb2F0IG1fcGFyYW1ldGVyc1tQYXJhbUxhc3RdOwogICAgIHZvaWQgaW5p
dGlhbGl6ZVBhcmFtZXRlcnMoKTsKIAotICAgIGJvb2wgbV9pc1N0ZXJlbzsKICAgICBmbG9hdCBt
X3NhbXBsZVJhdGU7CiAKICAgICAvLyBFbXBoYXNpcyBmaWx0ZXIgY29udHJvbHMuCkBAIC04OCwx
MSArODksMTMgQEAgcHJvdGVjdGVkOgogICAgIGZsb2F0IG1fbGFzdEFuY2hvcjsKICAgICBmbG9h
dCBtX2xhc3RGaWx0ZXJTdGFnZUdhaW47CiAKLSAgICAvLyBFbXBoYXNpcyBmaWx0ZXJzLgotICAg
IFplcm9Qb2xlIG1fcHJlRmlsdGVyWzRdOwotICAgIFplcm9Qb2xlIG1fcHJlRmlsdGVyUls0XTsK
LSAgICBaZXJvUG9sZSBtX3Bvc3RGaWx0ZXJbNF07Ci0gICAgWmVyb1BvbGUgbV9wb3N0RmlsdGVy
Uls0XTsKKyAgICB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIFplcm9Qb2xlIGZpbHRlcnNbNF07
CisgICAgfSBaZXJvUG9sZUZpbHRlclBhY2s0OworCisgICAgLy8gUGVyLWNoYW5uZWwgZW1waGFz
aXMgZmlsdGVycy4KKyAgICBWZWN0b3I8T3duUHRyPFplcm9Qb2xlRmlsdGVyUGFjazQ+ID4gbV9w
cmVGaWx0ZXJQYWNrczsKKyAgICBWZWN0b3I8T3duUHRyPFplcm9Qb2xlRmlsdGVyUGFjazQ+ID4g
bV9wb3N0RmlsdGVyUGFja3M7CiAKICAgICB2b2lkIHNldEVtcGhhc2lzU3RhZ2VQYXJhbWV0ZXJz
KHVuc2lnbmVkIHN0YWdlSW5kZXgsIGZsb2F0IGdhaW4sIGZsb2F0IG5vcm1hbGl6ZWRGcmVxdWVu
Y3kgLyogMCAtPiAxICovKTsKICAgICB2b2lkIHNldEVtcGhhc2lzUGFyYW1ldGVycyhmbG9hdCBn
YWluLCBmbG9hdCBhbmNob3JGcmVxLCBmbG9hdCBmaWx0ZXJTdGFnZVJhdGlvKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5l
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JL
ZXJuZWwuY3BwCmluZGV4IGEzMjJhMzMwMjU5NjBjODljYjZiZTA2YzI1Yjg3NzM3NmRhOWUzNmMu
LjYxZjljMGQ1YzQyNzVjMTdhNWZhYzk4M2ZlNmMzMTVmNmVjOTZmMzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2Vy
bmVsLmNwcApAQCAtNTIsMjAgKzUyLDM1IEBAIHN0YXRpYyBmbG9hdCBzYXR1cmF0ZShmbG9hdCB4
LCBmbG9hdCBrKQogICAgIHJldHVybiAxIC0gZXhwKC1rICogeCk7CiB9CiAKLUR5bmFtaWNzQ29t
cHJlc3Nvcktlcm5lbDo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsKGZsb2F0IHNhbXBsZVJhdGUp
CitEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbChmbG9h
dCBzYW1wbGVSYXRlLCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKQogICAgIDogbV9zYW1wbGVS
YXRlKHNhbXBsZVJhdGUpCiAgICAgLCBtX2xhc3RQcmVEZWxheUZyYW1lcyhEZWZhdWx0UHJlRGVs
YXlGcmFtZXMpCi0gICAgLCBtX3ByZURlbGF5QnVmZmVyTChNYXhQcmVEZWxheUZyYW1lcykKLSAg
ICAsIG1fcHJlRGVsYXlCdWZmZXJSKE1heFByZURlbGF5RnJhbWVzKQogICAgICwgbV9wcmVEZWxh
eVJlYWRJbmRleCgwKQogICAgICwgbV9wcmVEZWxheVdyaXRlSW5kZXgoRGVmYXVsdFByZURlbGF5
RnJhbWVzKQogeworICAgIHNldE51bWJlck9mQ2hhbm5lbHMobnVtYmVyT2ZDaGFubmVscyk7CisK
ICAgICAvLyBJbml0aWFsaXplcyBtb3N0IG1lbWJlciB2YXJpYWJsZXMKICAgICByZXNldCgpOwog
ICAgIAogICAgIG1fbWV0ZXJpbmdSZWxlYXNlSyA9IGRpc2NyZXRlVGltZUNvbnN0YW50Rm9yU2Ft
cGxlUmF0ZShtZXRlcmluZ1JlbGVhc2VUaW1lQ29uc3RhbnQsIHNhbXBsZVJhdGUpOwogfQogCitE
eW5hbWljc0NvbXByZXNzb3JLZXJuZWw6On5EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwoKQorewor
ICAgIG1fcHJlRGVsYXlCdWZmZXJzLmNsZWFyKCk7Cit9CisKK3ZvaWQgRHluYW1pY3NDb21wcmVz
c29yS2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMp
Cit7CisgICAgaWYgKG1fcHJlRGVsYXlCdWZmZXJzLnNpemUoKSA9PSBudW1iZXJPZkNoYW5uZWxz
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByZURlbGF5QnVmZmVycy5jbGVhcigpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpCisgICAgICAg
IG1fcHJlRGVsYXlCdWZmZXJzLmFwcGVuZChhZG9wdFB0cihuZXcgQXVkaW9GbG9hdEFycmF5KE1h
eFByZURlbGF5RnJhbWVzKSkpOworfQorCiB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6
c2V0UHJlRGVsYXlUaW1lKGZsb2F0IHByZURlbGF5VGltZSkKIHsKICAgICAvLyBSZS1jb25maWd1
cmUgbG9vay1haGVhZCBzZWN0aW9uIHByZS1kZWxheSBpZiBkZWxheSB0aW1lIGhhcyBjaGFuZ2Vk
LgpAQCAtNzUsMTcgKzkwLDE3IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpzZXRQ
cmVEZWxheVRpbWUoZmxvYXQgcHJlRGVsYXlUaW1lKQogICAgICAgICAKICAgICBpZiAobV9sYXN0
UHJlRGVsYXlGcmFtZXMgIT0gcHJlRGVsYXlGcmFtZXMpIHsKICAgICAgICAgbV9sYXN0UHJlRGVs
YXlGcmFtZXMgPSBwcmVEZWxheUZyYW1lczsKLSAgICAgICAgbV9wcmVEZWxheUJ1ZmZlckwuemVy
bygpOwotICAgICAgICBtX3ByZURlbGF5QnVmZmVyUi56ZXJvKCk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3ByZURlbGF5QnVmZmVycy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIG1fcHJlRGVsYXlCdWZmZXJzW2ldLT56ZXJvKCk7CisKICAgICAgICAgbV9wcmVEZWxheVJl
YWRJbmRleCA9IDA7CiAgICAgICAgIG1fcHJlRGVsYXlXcml0ZUluZGV4ID0gcHJlRGVsYXlGcmFt
ZXM7CiAgICAgfQogfQogCi12b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cHJvY2Vzcyhj
b25zdCBmbG9hdCogc291cmNlTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0KiBkZXN0aW5hdGlvbkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBmbG9hdCogc291cmNlUiwgLyogc3RlcmVvLWxpbmtlZCAqLwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uUiwKK3Zv
aWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKGZsb2F0KiBzb3VyY2VDaGFubmVs
c1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIGRlc3Rp
bmF0aW9uQ2hhbm5lbHNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBmcmFtZXNUb1Byb2Nlc3MsCiAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGRiVGhyZXNob2xkLApAQCAtMTAyLDcgKzExNyw4
IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBz
b3VyY2VMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcmVs
ZWFzZVpvbmU0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiB7Ci0g
ICAgYm9vbCBpc1N0ZXJlbyA9IGRlc3RpbmF0aW9uUjsKKyAgICBBU1NFUlQobV9wcmVEZWxheUJ1
ZmZlcnMuc2l6ZSgpID09IG51bWJlck9mQ2hhbm5lbHMpOworCiAgICAgZmxvYXQgc2FtcGxlUmF0
ZSA9IHRoaXMtPnNhbXBsZVJhdGUoKTsKIAogICAgIGZsb2F0IGRyeU1peCA9IDEgLSBlZmZlY3RC
bGVuZDsKQEAgLTE2NCw2ICsxODAsNyBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6
cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlTCwKIAogICAgIGNvbnN0IGludCBuRGl2aXNpb25z
ID0gZnJhbWVzVG9Qcm9jZXNzIC8gbkRpdmlzaW9uRnJhbWVzOwogCisgICAgdW5zaWduZWQgZnJh
bWVJbmRleCA9IDA7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuRGl2aXNpb25zOyArK2kpIHsK
ICAgICAgICAgLy8gfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAgICAgICAgIC8v
IENhbGN1bGF0ZSBkZXNpcmVkIGdhaW4KQEAgLTI0Nyw4ICsyNjQsNiBAQCB2b2lkIER5bmFtaWNz
Q29tcHJlc3Nvcktlcm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlTCwKICAgICAgICAg
Ly8gfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKICAgICAgICAgewotICAgICAg
ICAgICAgZmxvYXQqIGRlbGF5QnVmZmVyTCA9IG1fcHJlRGVsYXlCdWZmZXJMLmRhdGEoKTsKLSAg
ICAgICAgICAgIGZsb2F0KiBkZWxheUJ1ZmZlclIgPSBtX3ByZURlbGF5QnVmZmVyUi5kYXRhKCk7
CiAgICAgICAgICAgICBpbnQgcHJlRGVsYXlSZWFkSW5kZXggPSBtX3ByZURlbGF5UmVhZEluZGV4
OwogICAgICAgICAgICAgaW50IHByZURlbGF5V3JpdGVJbmRleCA9IG1fcHJlRGVsYXlXcml0ZUlu
ZGV4OwogICAgICAgICAgICAgZmxvYXQgZGV0ZWN0b3JBdmVyYWdlID0gbV9kZXRlY3RvckF2ZXJh
Z2U7CkBAIC0yNTYsMzIgKzI3MSwxOSBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6
cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlTCwKIAogICAgICAgICAgICAgaW50IGxvb3BGcmFt
ZXMgPSBuRGl2aXNpb25GcmFtZXM7CiAgICAgICAgICAgICB3aGlsZSAobG9vcEZyYW1lcy0tKSB7
Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29tcHJlc3NvcklucHV0OwotICAgICAgICAgICAgICAg
IGZsb2F0IGlucHV0TDsKLSAgICAgICAgICAgICAgICBmbG9hdCBpbnB1dFIgPSAwOworICAgICAg
ICAgICAgICAgIGZsb2F0IGNvbXByZXNzb3JJbnB1dCA9IDA7CiAKICAgICAgICAgICAgICAgICAv
LyBQcmVkZWxheSBzaWduYWwsIGNvbXB1dGluZyBjb21wcmVzc2lvbiBhbW91bnQgZnJvbSB1bi1k
ZWxheWVkIHZlcnNpb24uCi0gICAgICAgICAgICAgICAgaWYgKGlzU3RlcmVvKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGZsb2F0IHVuZGVsYXllZEwgPSAqc291cmNlTCsrOwotICAgICAgICAgICAg
ICAgICAgICBmbG9hdCB1bmRlbGF5ZWRSID0gKnNvdXJjZVIrKzsKLQotICAgICAgICAgICAgICAg
ICAgICBjb21wcmVzc29ySW5wdXQgPSAwLjVmICogKHVuZGVsYXllZEwgKyB1bmRlbGF5ZWRSKTsK
LQotICAgICAgICAgICAgICAgICAgICBpbnB1dEwgPSBkZWxheUJ1ZmZlckxbcHJlRGVsYXlSZWFk
SW5kZXhdOwotICAgICAgICAgICAgICAgICAgICBpbnB1dFIgPSBkZWxheUJ1ZmZlclJbcHJlRGVs
YXlSZWFkSW5kZXhdOwotCi0gICAgICAgICAgICAgICAgICAgIGRlbGF5QnVmZmVyTFtwcmVEZWxh
eVdyaXRlSW5kZXhdID0gdW5kZWxheWVkTDsKLSAgICAgICAgICAgICAgICAgICAgZGVsYXlCdWZm
ZXJSW3ByZURlbGF5V3JpdGVJbmRleF0gPSB1bmRlbGF5ZWRSOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb3JJbnB1dCA9ICpzb3VyY2VMKys7
Ci0KLSAgICAgICAgICAgICAgICAgICAgaW5wdXRMID0gZGVsYXlCdWZmZXJMW3ByZURlbGF5UmVh
ZEluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVsYXlCdWZmZXJMW3ByZURlbGF5V3JpdGVJ
bmRleF0gPSBjb21wcmVzc29ySW5wdXQ7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBm
bG9hdCogZGVsYXlCdWZmZXIgPSBtX3ByZURlbGF5QnVmZmVyc1tpXS0+ZGF0YSgpOworICAgICAg
ICAgICAgICAgICAgICBmbG9hdCB1bmRlbGF5ZWRTb3VyY2UgPSBzb3VyY2VDaGFubmVsc1tpXVtm
cmFtZUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgZGVsYXlCdWZmZXJbcHJlRGVsYXlXcml0
ZUluZGV4XSA9IHVuZGVsYXllZFNvdXJjZTsKKworICAgICAgICAgICAgICAgICAgICBmbG9hdCBh
YnNVbmRlbGF5ZWRTb3VyY2UgPSB1bmRlbGF5ZWRTb3VyY2UgPiAwID8gdW5kZWxheWVkU291cmNl
IDogLXVuZGVsYXllZFNvdXJjZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXByZXNzb3JJ
bnB1dCA8IGFic1VuZGVsYXllZFNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBy
ZXNzb3JJbnB1dCA9IGFic1VuZGVsYXllZFNvdXJjZTsKICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBwcmVEZWxheVJlYWRJbmRleCA9IChwcmVEZWxheVJlYWRJbmRleCArIDEp
ICYgTWF4UHJlRGVsYXlGcmFtZXNNYXNrOwotICAgICAgICAgICAgICAgIHByZURlbGF5V3JpdGVJ
bmRleCA9IChwcmVEZWxheVdyaXRlSW5kZXggKyAxKSAmIE1heFByZURlbGF5RnJhbWVzTWFzazsK
LQogICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBzaGFwZWQgcG93ZXIgb24gdW5kZWxheWVk
IGlucHV0LgogCiAgICAgICAgICAgICAgICAgZmxvYXQgc2NhbGVkSW5wdXQgPSBjb21wcmVzc29y
SW5wdXQ7CkBAIC0zMzcsMTcgKzMzOSwxNCBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5l
bDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlTCwKICAgICAgICAgICAgICAgICAgICAgbV9t
ZXRlcmluZ0dhaW4gKz0gKGRiUmVhbEdhaW4gLSBtX21ldGVyaW5nR2FpbikgKiBtX21ldGVyaW5n
UmVsZWFzZUs7CiAKICAgICAgICAgICAgICAgICAvLyBBcHBseSBmaW5hbCBnYWluLgotICAgICAg
ICAgICAgICAgIGlmIChpc1N0ZXJlbykgewotICAgICAgICAgICAgICAgICAgICBmbG9hdCBvdXRw
dXRMID0gaW5wdXRMOwotICAgICAgICAgICAgICAgICAgICBmbG9hdCBvdXRwdXRSID0gaW5wdXRS
OwotCi0gICAgICAgICAgICAgICAgICAgIG91dHB1dEwgKj0gdG90YWxHYWluOwotICAgICAgICAg
ICAgICAgICAgICBvdXRwdXRSICo9IHRvdGFsR2FpbjsKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZsb2F0KiBkZWxheUJ1ZmZlciA9IG1fcHJlRGVsYXlCdWZmZXJzW2ldLT5kYXRhKCk7
CisgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uQ2hhbm5lbHNbaV1bZnJhbWVJbmRleF0g
PSBkZWxheUJ1ZmZlcltwcmVEZWxheVJlYWRJbmRleF0gKiB0b3RhbEdhaW47CisgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IG91dHB1dEw7
Ci0gICAgICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblIrKyA9IG91dHB1dFI7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IGlu
cHV0TCAqIHRvdGFsR2FpbjsKKyAgICAgICAgICAgICAgICBmcmFtZUluZGV4Kys7CisgICAgICAg
ICAgICAgICAgcHJlRGVsYXlSZWFkSW5kZXggPSAocHJlRGVsYXlSZWFkSW5kZXggKyAxKSAmIE1h
eFByZURlbGF5RnJhbWVzTWFzazsKKyAgICAgICAgICAgICAgICBwcmVEZWxheVdyaXRlSW5kZXgg
PSAocHJlRGVsYXlXcml0ZUluZGV4ICsgMSkgJiBNYXhQcmVEZWxheUZyYW1lc01hc2s7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIExvY2FscyBiYWNrIHRvIG1lbWJlciB2YXJpYWJs
ZXMuCkBAIC0zNjYsOCArMzY1LDkgQEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnJl
c2V0KCkKICAgICBtX21ldGVyaW5nR2FpbiA9IDE7CiAKICAgICAvLyBQcmVkZWxheSBzZWN0aW9u
LgotICAgIG1fcHJlRGVsYXlCdWZmZXJMLnplcm8oKTsKLSAgICBtX3ByZURlbGF5QnVmZmVyUi56
ZXJvKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJlRGVsYXlCdWZmZXJzLnNp
emUoKTsgKytpKQorICAgICAgICBtX3ByZURlbGF5QnVmZmVyc1tpXS0+emVybygpOworCiAgICAg
bV9wcmVEZWxheVJlYWRJbmRleCA9IDA7CiAgICAgbV9wcmVEZWxheVdyaXRlSW5kZXggPSBEZWZh
dWx0UHJlRGVsYXlGcmFtZXM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmgKaW5kZXggY2YzMTliMzc4YWRlYjU5
MDYyOTUzZGVhYjA5MmUzMzM5YzZmNjg4MC4uZjczOGRhOWMyOGIxZjZkZjAyNjRkZWM0NzYzMjMw
ODc2NjYxZjU1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHlu
YW1pY3NDb21wcmVzc29yS2VybmVsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmgKQEAgLTMxLDE3ICszMSwyMiBAQAogCiAjaW5j
bHVkZSAiQXVkaW9BcnJheS5oIgogCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRHluYW1p
Y3NDb21wcmVzc29yS2VybmVsIHsKIHB1YmxpYzoKLSAgICBEeW5hbWljc0NvbXByZXNzb3JLZXJu
ZWwoZmxvYXQgc2FtcGxlUmF0ZSk7CisgICAgRHluYW1pY3NDb21wcmVzc29yS2VybmVsKGZsb2F0
IHNhbXBsZVJhdGUsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpOworICAgIH5EeW5hbWljc0Nv
bXByZXNzb3JLZXJuZWwoKTsKKworICAgIHZvaWQgc2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25l
ZCk7CiAKICAgICAvLyBQZXJmb3JtcyBzdGVyZW8tbGlua2VkIGNvbXByZXNzaW9uLgotICAgIHZv
aWQgcHJvY2Vzcyhjb25zdCBmbG9hdCAqc291cmNlTCwKLSAgICAgICAgICAgICAgICAgZmxvYXQg
KmRlc3RpbmF0aW9uTCwKLSAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgKnNvdXJjZVIsCi0g
ICAgICAgICAgICAgICAgIGZsb2F0ICpkZXN0aW5hdGlvblIsCisgICAgdm9pZCBwcm9jZXNzKGZs
b2F0KiBzb3VyY2VDaGFubmVsc1tdLAorICAgICAgICAgICAgICAgICBmbG9hdCogZGVzdGluYXRp
b25DaGFubmVsc1tdLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxz
LAogICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZXNUb1Byb2Nlc3MsCiAKICAgICAgICAg
ICAgICAgICAgZmxvYXQgZGJUaHJlc2hvbGQsCkBAIC02Niw3ICs3MSw3IEBAIHB1YmxpYzoKIAog
cHJvdGVjdGVkOgogICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKLSAgICAKKwogICAgIGZsb2F0IG1f
ZGV0ZWN0b3JBdmVyYWdlOwogICAgIGZsb2F0IG1fY29tcHJlc3NvckdhaW47CiAKQEAgLTgxLDgg
Kzg2LDcgQEAgcHJvdGVjdGVkOgogICAgIHVuc2lnbmVkIG1fbGFzdFByZURlbGF5RnJhbWVzOwog
ICAgIHZvaWQgc2V0UHJlRGVsYXlUaW1lKGZsb2F0KTsKIAotICAgIEF1ZGlvRmxvYXRBcnJheSBt
X3ByZURlbGF5QnVmZmVyTDsKLSAgICBBdWRpb0Zsb2F0QXJyYXkgbV9wcmVEZWxheUJ1ZmZlclI7
CisgICAgVmVjdG9yPE93blB0cjxBdWRpb0Zsb2F0QXJyYXk+ID4gbV9wcmVEZWxheUJ1ZmZlcnM7
CiAgICAgaW50IG1fcHJlRGVsYXlSZWFkSW5kZXg7CiAgICAgaW50IG1fcHJlRGVsYXlXcml0ZUlu
ZGV4OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXBy
ZXNzb3JOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nv
ck5vZGUuY3BwCmluZGV4IGVhOGI1ODkyMjM1NmFhMTM2NTEzMmFlZjMxZmFhZjYwM2Y3NDU0Mjcu
LjEzZjdjODIzNTQ1NDkxODkwZjZiN2RkZjk0YTQ5NGQxYTk1OThkMWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwCkBAIC0zOSw3
ICszOSw3IEBAIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OkR5bmFtaWNzQ29tcHJlc3Nvck5vZGUo
QXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wCiAgICAgOiBBdWRpb05vZGUoY29udGV4
dCwgc2FtcGxlUmF0ZSkKIHsKICAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlSW5w
dXQodGhpcykpKTsKLSAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0
aGlzLCAyKSkpOworICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRo
aXMsIERlZmF1bHROdW1iZXJPZk91dHB1dENoYW5uZWxzKSkpOwogICAgIAogICAgIHNldE5vZGVU
eXBlKE5vZGVUeXBlRHluYW1pY3NDb21wcmVzc29yKTsKICAgICAKQEAgLTcwLDcgKzcwLDcgQEAg
dm9pZCBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjppbml0aWFsaXplKCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7ICAgIAotICAgIG1fZHluYW1pY3NDb21w
cmVzc29yID0gYWRvcHRQdHIobmV3IER5bmFtaWNzQ29tcHJlc3Nvcih0cnVlLCBzYW1wbGVSYXRl
KCkpKTsKKyAgICBtX2R5bmFtaWNzQ29tcHJlc3NvciA9IGFkb3B0UHRyKG5ldyBEeW5hbWljc0Nv
bXByZXNzb3Ioc2FtcGxlUmF0ZSgpLCBEZWZhdWx0TnVtYmVyT2ZPdXRwdXRDaGFubmVscykpOwog
fQogCiB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OnVuaW5pdGlhbGl6ZSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmggYi9T
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmgKaW5kZXggZDcx
OGFiMzQxY2MwMWUxODhjZjIxMzA1Njc0NjVmMDQ4YmRhMDVjYi4uZjI1ZmFjNTRlOTAxMDQwNThl
MDdlMzM4M2I0ZWRjZjM3ODUwYmE1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaApAQCAtNTAsNiArNTAsOSBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIER5bmFtaWNzQ29tcHJlc3Nvck5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2Ft
cGxlUmF0ZSk7CiAKKyAgICAvLyBTZXQgb3V0cHV0IHRvIHN0ZXJlbyBieSBkZWZhdWx0LgorICAg
IGVudW0geyBEZWZhdWx0TnVtYmVyT2ZPdXRwdXRDaGFubmVscyA9IDIgfTsKKwogICAgIE93blB0
cjxEeW5hbWljc0NvbXByZXNzb3I+IG1fZHluYW1pY3NDb21wcmVzc29yOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127496</attachid>
            <date>2012-02-16 19:05:27 -0800</date>
            <delta_ts>2012-02-19 17:58:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77856-20120217111016.patch</filename>
            <type>text/plain</type>
            <size>23731</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MDAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWNhMmEyZmQ3ZWQxZDBi
MTA0NGQyOTg2ZTVjNjY4MTllMjZkMDhhNi4uYmU0NzBlM2NhODE1MjI3NzM2NmRmZjc1MDg4MDgx
ZGY5YzRjM2I4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTAyLTE2ICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBIYXZlIHRoZSBEeW5h
bWljc0NvbXByZXNzb3JOb2RlIHN1cHBvcnQgbXVsdGktY2hhbm5lbCBkYXRhCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzg1NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRHlu
YW1pY3NDb21wcmVzc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nv
cjo6RHluYW1pY3NDb21wcmVzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJl
c3Nvcjo6c2V0RW1waGFzaXNTdGFnZVBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RHlu
YW1pY3NDb21wcmVzc29yOjpwcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29t
cHJlc3Nvcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yOjpz
ZXROdW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5oOgorICAgICAgICAoRHluYW1pY3NDb21wcmVz
c29yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpEeW5hbWlj
c0NvbXByZXNzb3JLZXJuZWwpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29y
S2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpzZXRQcmVEZWxheVRpbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cmVzZXQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oOgorICAgICAgICAo
RHluYW1pY3NDb21wcmVzc29yS2VybmVsKToKKyAgICAgICAgKiB3ZWJhdWRpby9EeW5hbWljc0Nv
bXByZXNzb3JOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvck5v
ZGU6OkR5bmFtaWNzQ29tcHJlc3Nvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3ND
b21wcmVzc29yTm9kZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogd2ViYXVkaW8vRHluYW1pY3ND
b21wcmVzc29yTm9kZS5oOgorICAgICAgICAoRHluYW1pY3NDb21wcmVzc29yTm9kZSk6CisKIDIw
MTItMDItMTYgIENyaXMgTmVja2FyICA8Y2RuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBWZXJ5
IGxhcmdlIHN0cmluZ3MgY291bGQgY2F1c2UgdGhlIG5ldyBxdW90ZWQgc3RyaW5nIHRvIHdyYXAu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXBy
ZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVz
c29yLmNwcAppbmRleCBhNTUyMDU3MDVkOTUxMGJmMjBkOWRiMzU0ODc5Mzk2NWVlMDJlZTFkLi5i
MTA5MjZkNzI4Y2E5ZWM3NTEyMGNiNmIxMjI2MWI2Nzg0ZWM1NTVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5jcHAKQEAgLTQw
LDE2ICs0MCwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBBdWRp
b1V0aWxpdGllczsKICAgICAKLUR5bmFtaWNzQ29tcHJlc3Nvcjo6RHluYW1pY3NDb21wcmVzc29y
KGJvb2wgaXNTdGVyZW8sIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBtX2lzU3RlcmVvKGlzU3Rl
cmVvKQotICAgICwgbV9zYW1wbGVSYXRlKHNhbXBsZVJhdGUpCi0gICAgLCBtX2NvbXByZXNzb3Io
c2FtcGxlUmF0ZSkKK0R5bmFtaWNzQ29tcHJlc3Nvcjo6RHluYW1pY3NDb21wcmVzc29yKGZsb2F0
IHNhbXBsZVJhdGUsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpCisgICAgOiBtX251bWJlck9m
Q2hhbm5lbHMobnVtYmVyT2ZDaGFubmVscykKKyAgICAsIG1fY29tcHJlc3NvcihzYW1wbGVSYXRl
LCBudW1iZXJPZkNoYW5uZWxzKQogewogICAgIC8vIFVuaW5pdGlhbGl6ZWQgc3RhdGUgLSBmb3Ig
cGFyYW1ldGVyIHJlY2FsY3VsYXRpb24uCiAgICAgbV9sYXN0RmlsdGVyU3RhZ2VSYXRpbyA9IC0x
OwogICAgIG1fbGFzdEFuY2hvciA9IC0xOwogICAgIG1fbGFzdEZpbHRlclN0YWdlR2FpbiA9IC0x
OwogCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkg
eworICAgICAgICBtX3ByZUZpbHRlclBhY2tzLmFwcGVuZChhZG9wdFB0cihuZXcgWmVyb1BvbGVG
aWx0ZXJQYWNrNCgpKSk7CisgICAgICAgIG1fcG9zdEZpbHRlclBhY2tzLmFwcGVuZChhZG9wdFB0
cihuZXcgWmVyb1BvbGVGaWx0ZXJQYWNrNCgpKSk7CisgICAgfQorCiAgICAgaW5pdGlhbGl6ZVBh
cmFtZXRlcnMoKTsKIH0KIApAQCAtOTMsMTggKzk3LDIwIEBAIHZvaWQgRHluYW1pY3NDb21wcmVz
c29yOjpzZXRFbXBoYXNpc1N0YWdlUGFyYW1ldGVycyh1bnNpZ25lZCBzdGFnZUluZGV4LCBmbG9h
dCBnCiAgICAgZmxvYXQgcjEgPSBleHBmKC1mMSAqIHBpRmxvYXQpOwogICAgIGZsb2F0IHIyID0g
ZXhwZigtZjIgKiBwaUZsb2F0KTsKIAotICAgIC8vIFNldCBwcmUtZmlsdGVyIHplcm8gYW5kIHBv
bGUgdG8gY3JlYXRlIGFuIGVtcGhhc2lzIGZpbHRlci4KLSAgICBtX3ByZUZpbHRlcltzdGFnZUlu
ZGV4XS5zZXRaZXJvKHIxKTsKLSAgICBtX3ByZUZpbHRlcltzdGFnZUluZGV4XS5zZXRQb2xlKHIy
KTsKLSAgICBtX3ByZUZpbHRlclJbc3RhZ2VJbmRleF0uc2V0WmVybyhyMSk7Ci0gICAgbV9wcmVG
aWx0ZXJSW3N0YWdlSW5kZXhdLnNldFBvbGUocjIpOwotCi0gICAgLy8gU2V0IHBvc3QtZmlsdGVy
IHdpdGggemVybyBhbmQgcG9sZSByZXZlcnNlZCB0byBjcmVhdGUgdGhlIGRlLWVtcGhhc2lzIGZp
bHRlci4KLSAgICAvLyBJZiB0aGVyZSB3ZXJlIG5vIGNvbXByZXNzb3Iga2VybmVsIGluIGJldHdl
ZW4sIHRoZXkgd291bGQgY2FuY2VsIGVhY2ggb3RoZXIgb3V0IChhbGxwYXNzIGZpbHRlcikuCi0g
ICAgbV9wb3N0RmlsdGVyW3N0YWdlSW5kZXhdLnNldFplcm8ocjIpOwotICAgIG1fcG9zdEZpbHRl
cltzdGFnZUluZGV4XS5zZXRQb2xlKHIxKTsKLSAgICBtX3Bvc3RGaWx0ZXJSW3N0YWdlSW5kZXhd
LnNldFplcm8ocjIpOwotICAgIG1fcG9zdEZpbHRlclJbc3RhZ2VJbmRleF0uc2V0UG9sZShyMSk7
CisgICAgQVNTRVJUKG1fbnVtYmVyT2ZDaGFubmVscyA9PSBtX3ByZUZpbHRlclBhY2tzLnNpemUo
KSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9udW1iZXJPZkNoYW5uZWxzOyAr
K2kpIHsKKyAgICAgICAgWmVyb1BvbGUmIHByZUZpbHRlciA9IG1fcHJlRmlsdGVyUGFja3NbaV0t
PmZpbHRlcnNbc3RhZ2VJbmRleF07CisgICAgICAgIC8vIFNldCBwcmUtZmlsdGVyIHplcm8gYW5k
IHBvbGUgdG8gY3JlYXRlIGFuIGVtcGhhc2lzIGZpbHRlci4KKyAgICAgICAgcHJlRmlsdGVyLnNl
dFplcm8ocjEpOworICAgICAgICBwcmVGaWx0ZXIuc2V0UG9sZShyMik7CisKKyAgICAgICAgLy8g
U2V0IHBvc3QtZmlsdGVyIHdpdGggemVybyBhbmQgcG9sZSByZXZlcnNlZCB0byBjcmVhdGUgdGhl
IGRlLWVtcGhhc2lzIGZpbHRlci4KKyAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBubyBjb21wcmVz
c29yIGtlcm5lbCBpbiBiZXR3ZWVuLCB0aGV5IHdvdWxkIGNhbmNlbCBlYWNoIG90aGVyIG91dCAo
YWxscGFzcyBmaWx0ZXIpLgorICAgICAgICBaZXJvUG9sZSYgcG9zdEZpbHRlciA9IG1fcG9zdEZp
bHRlclBhY2tzW2ldLT5maWx0ZXJzW3N0YWdlSW5kZXhdOworICAgICAgICBwb3N0RmlsdGVyLnNl
dFplcm8ocjIpOworICAgICAgICBwb3N0RmlsdGVyLnNldFBvbGUocjEpOworICAgIH0KIH0KIAog
dm9pZCBEeW5hbWljc0NvbXByZXNzb3I6OnNldEVtcGhhc2lzUGFyYW1ldGVycyhmbG9hdCBnYWlu
LCBmbG9hdCBhbmNob3JGcmVxLCBmbG9hdCBmaWx0ZXJTdGFnZVJhdGlvKQpAQCAtMTE3LDE4ICsx
MjMsMzYgQEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3I6OnNldEVtcGhhc2lzUGFyYW1ldGVycyhm
bG9hdCBnYWluLCBmbG9hdCBhbmNob3JGcmVxLCBmbG8KIAogdm9pZCBEeW5hbWljc0NvbXByZXNz
b3I6OnByb2Nlc3MoY29uc3QgQXVkaW9CdXMqIHNvdXJjZUJ1cywgQXVkaW9CdXMqIGRlc3RpbmF0
aW9uQnVzLCB1bnNpZ25lZCBmcmFtZXNUb1Byb2Nlc3MpCiB7Ci0gICAgY29uc3QgZmxvYXQqIHNv
dXJjZUwgPSBzb3VyY2VCdXMtPmNoYW5uZWwoMCktPmRhdGEoKTsKLSAgICBjb25zdCBmbG9hdCog
c291cmNlUjsKLQotICAgIGlmIChzb3VyY2VCdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA+IDEpCi0g
ICAgICAgIHNvdXJjZVIgPSBzb3VyY2VCdXMtPmNoYW5uZWwoMSktPmRhdGEoKTsKLSAgICBlbHNl
Ci0gICAgICAgIHNvdXJjZVIgPSBzb3VyY2VMOwotCi0gICAgQVNTRVJUKGRlc3RpbmF0aW9uQnVz
LT5udW1iZXJPZkNoYW5uZWxzKCkgPT0gMik7CisgICAgLy8gVGhvdWdoIG51bWJlck9mQ2hhbm5l
bHMgaXMgcmV0cml2ZWQgZnJvbSBkZXN0aW5hdGlvbkJ1cywgd2Ugc3RpbGwgbmFtZSBpdCBudW1i
ZXJPZkNoYW5uZWxzIGluc3RlYWQgb2YgbnVtYmVyT2ZEZXN0aW5hdGlvbkNoYW5uZWxzLgorICAg
IC8vIEl0J3MgYmVjYXVzZSB3ZSBpbnRlcm5hbGx5IG1hdGNoIHNvdXJjZUNoYW5uZWxzJ3Mgc2l6
ZSB0byBkZXN0aW5hdGlvbkJ1cyBieSBjaGFubmVsIHVwL2Rvd24gbWl4LiBUaHVzIHdlIG5lZWQg
bnVtYmVyT2ZDaGFubmVscworICAgIC8vIHRvIGRvIHRoZSBsb29wIHdvcmsgZm9yIGJvdGggc291
cmNlQ2hhbm5lbHMgYW5kIGRlc3RpbmF0aW9uQ2hhbm5lbHMuCisKKyAgICB1bnNpZ25lZCBudW1i
ZXJPZkNoYW5uZWxzID0gZGVzdGluYXRpb25CdXMtPm51bWJlck9mQ2hhbm5lbHMoKTsKKyAgICB1
bnNpZ25lZCBudW1iZXJPZlNvdXJjZUNoYW5uZWxzID0gc291cmNlQnVzLT5udW1iZXJPZkNoYW5u
ZWxzKCk7CisKKyAgICBjb25zdCBmbG9hdCogc291cmNlQ2hhbm5lbHNbbnVtYmVyT2ZDaGFubmVs
c107CisgICAgZmxvYXQqIGRlc3RpbmF0aW9uQ2hhbm5lbHNbbnVtYmVyT2ZDaGFubmVsc107CisK
KyAgICBzd2l0Y2ggKG51bWJlck9mQ2hhbm5lbHMpIHsKKyAgICBjYXNlIDI6IC8vIHN0ZXJlbwor
ICAgICAgICBzb3VyY2VDaGFubmVsc1swXSA9IHNvdXJjZUJ1cy0+Y2hhbm5lbCgwKS0+ZGF0YSgp
OworCisgICAgICAgIGlmIChudW1iZXJPZlNvdXJjZUNoYW5uZWxzID4gMSkKKyAgICAgICAgICAg
IHNvdXJjZUNoYW5uZWxzWzFdID0gc291cmNlQnVzLT5jaGFubmVsKDEpLT5kYXRhKCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIC8vIFNpbXBseSBkdXBsaWNhdGUgbW9ubyBjaGFubmVsIGlu
cHV0IGRhdGEgdG8gcmlnaHQgY2hhbm5lbCBmb3Igc3RlcmVvIHByb2Nlc3NpbmcuCisgICAgICAg
ICAgICBzb3VyY2VDaGFubmVsc1sxXSA9IHNvdXJjZUNoYW5uZWxzWzBdOworCisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIEZJWE1FIDogc3VwcG9ydCBvdGhlciBsYXlv
dXRzLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgZGVzdGluYXRpb25C
dXMtPnplcm8oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGZsb2F0KiBkZXN0aW5h
dGlvbkwgPSBkZXN0aW5hdGlvbkJ1cy0+Y2hhbm5lbCgwKS0+bXV0YWJsZURhdGEoKTsKLSAgICBm
bG9hdCogZGVzdGluYXRpb25SID0gZGVzdGluYXRpb25CdXMtPmNoYW5uZWwoMSktPm11dGFibGVE
YXRhKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsr
aSkKKyAgICAgICAgZGVzdGluYXRpb25DaGFubmVsc1tpXSA9IGRlc3RpbmF0aW9uQnVzLT5jaGFu
bmVsKGkpLT5tdXRhYmxlRGF0YSgpOwogCiAgICAgZmxvYXQgZmlsdGVyU3RhZ2VHYWluID0gcGFy
YW1ldGVyVmFsdWUoUGFyYW1GaWx0ZXJTdGFnZUdhaW4pOwogICAgIGZsb2F0IGZpbHRlclN0YWdl
UmF0aW8gPSBwYXJhbWV0ZXJWYWx1ZShQYXJhbUZpbHRlclN0YWdlUmF0aW8pOwpAQCAtMTQ0LDE2
ICsxNjgsMTUgQEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3I6OnByb2Nlc3MoY29uc3QgQXVkaW9C
dXMqIHNvdXJjZUJ1cywgQXVkaW9CdXMqIGRlc3RpbmF0aW8KIAogICAgIC8vIEFwcGx5IHByZS1l
bXBoYXNpcyBmaWx0ZXIuCiAgICAgLy8gTm90ZSB0aGF0IHRoZSBmaW5hbCB0aHJlZSBzdGFnZXMg
YXJlIGNvbXB1dGVkIGluLXBsYWNlIGluIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCi0gICAgbV9w
cmVGaWx0ZXJbMF0ucHJvY2Vzcyhzb3VyY2VMLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vz
cyk7Ci0gICAgbV9wcmVGaWx0ZXJbMV0ucHJvY2VzcyhkZXN0aW5hdGlvbkwsIGRlc3RpbmF0aW9u
TCwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICBtX3ByZUZpbHRlclsyXS5wcm9jZXNzKGRlc3RpbmF0
aW9uTCwgZGVzdGluYXRpb25MLCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIG1fcHJlRmlsdGVyWzNd
LnByb2Nlc3MoZGVzdGluYXRpb25MLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0K
LSAgICBpZiAoaXNTdGVyZW8oKSkgewotICAgICAgICBtX3ByZUZpbHRlclJbMF0ucHJvY2Vzcyhz
b3VyY2VSLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgICAgIG1fcHJlRmls
dGVyUlsxXS5wcm9jZXNzKGRlc3RpbmF0aW9uUiwgZGVzdGluYXRpb25SLCBmcmFtZXNUb1Byb2Nl
c3MpOwotICAgICAgICBtX3ByZUZpbHRlclJbMl0ucHJvY2VzcyhkZXN0aW5hdGlvblIsIGRlc3Rp
bmF0aW9uUiwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgbV9wcmVGaWx0ZXJSWzNdLnByb2Nl
c3MoZGVzdGluYXRpb25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgeworICAgICAgICBj
b25zdCBmbG9hdCogc291cmNlRGF0YSA9IHNvdXJjZUNoYW5uZWxzW2ldOworICAgICAgICBmbG9h
dCogZGVzdGluYXRpb25EYXRhID0gZGVzdGluYXRpb25DaGFubmVsc1tpXTsKKyAgICAgICAgWmVy
b1BvbGUqIHByZUZpbHRlcnMgPSBtX3ByZUZpbHRlclBhY2tzW2ldLT5maWx0ZXJzOworCisgICAg
ICAgIHByZUZpbHRlcnNbMF0ucHJvY2Vzcyhzb3VyY2VEYXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZy
YW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIHByZUZpbHRlcnNbMV0ucHJvY2VzcyhkZXN0aW5hdGlv
bkRhdGEsIGRlc3RpbmF0aW9uRGF0YSwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICAgICAgcHJlRmls
dGVyc1syXS5wcm9jZXNzKGRlc3RpbmF0aW9uRGF0YSwgZGVzdGluYXRpb25EYXRhLCBmcmFtZXNU
b1Byb2Nlc3MpOworICAgICAgICBwcmVGaWx0ZXJzWzNdLnByb2Nlc3MoZGVzdGluYXRpb25EYXRh
LCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vzcyk7CiAgICAgfQogCiAgICAgZmxvYXQg
ZGJUaHJlc2hvbGQgPSBwYXJhbWV0ZXJWYWx1ZShQYXJhbVRocmVzaG9sZCk7CkBAIC0xNzUsMTIg
KzE5OCw5IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yOjpwcm9jZXNzKGNvbnN0IEF1ZGlvQnVz
KiBzb3VyY2VCdXMsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvCiAgICAgZmxvYXQgcmVsZWFzZVpvbmUz
ID0gcGFyYW1ldGVyVmFsdWUoUGFyYW1SZWxlYXNlWm9uZTMpOwogICAgIGZsb2F0IHJlbGVhc2Va
b25lNCA9IHBhcmFtZXRlclZhbHVlKFBhcmFtUmVsZWFzZVpvbmU0KTsKIAotICAgIC8vIEFwcGx5
IGNvbXByZXNzaW9uIHRvIHRoZSBwcmUtZmlsdGVyZWQgc2lnbmFsLgotICAgIC8vIFRoZSBwcm9j
ZXNzaW5nIGlzIHBlcmZvcm1lZCBpbiBwbGFjZS4KLSAgICBtX2NvbXByZXNzb3IucHJvY2Vzcyhk
ZXN0aW5hdGlvbkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25MLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uUiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0aW5hdGlvblIsCisgICAgbV9jb21wcmVzc29yLnByb2Nlc3MoZGVzdGluYXRpb25D
aGFubmVscywKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkNoYW5uZWxzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mQ2hhbm5lbHMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnJhbWVzVG9Qcm9jZXNzLAogCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGJUaHJlc2hvbGQsCkBAIC0xOTgsMTYgKzIxOCwxNCBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nv
cjo6cHJvY2Vzcyhjb25zdCBBdWRpb0J1cyogc291cmNlQnVzLCBBdWRpb0J1cyogZGVzdGluYXRp
bwogICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAKICAgICAvLyBBcHBseSBkZS1lbXBoYXNp
cyBmaWx0ZXIuCi0gICAgbV9wb3N0RmlsdGVyWzBdLnByb2Nlc3MoZGVzdGluYXRpb25MLCBkZXN0
aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgbV9wb3N0RmlsdGVyWzFdLnByb2Nlc3Mo
ZGVzdGluYXRpb25MLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgbV9wb3N0
RmlsdGVyWzJdLnByb2Nlc3MoZGVzdGluYXRpb25MLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJv
Y2Vzcyk7Ci0gICAgbV9wb3N0RmlsdGVyWzNdLnByb2Nlc3MoZGVzdGluYXRpb25MLCBkZXN0aW5h
dGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0KLSAgICBpZiAoaXNTdGVyZW8oKSkgewotICAgICAg
ICBtX3Bvc3RGaWx0ZXJSWzBdLnByb2Nlc3MoZGVzdGluYXRpb25SLCBkZXN0aW5hdGlvblIsIGZy
YW1lc1RvUHJvY2Vzcyk7Ci0gICAgICAgIG1fcG9zdEZpbHRlclJbMV0ucHJvY2VzcyhkZXN0aW5h
dGlvblIsIGRlc3RpbmF0aW9uUiwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgbV9wb3N0Rmls
dGVyUlsyXS5wcm9jZXNzKGRlc3RpbmF0aW9uUiwgZGVzdGluYXRpb25SLCBmcmFtZXNUb1Byb2Nl
c3MpOwotICAgICAgICBtX3Bvc3RGaWx0ZXJSWzNdLnByb2Nlc3MoZGVzdGluYXRpb25SLCBkZXN0
aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgeworICAgICAgICBmbG9hdCogZGVzdGluYXRpb25EYXRh
ID0gZGVzdGluYXRpb25DaGFubmVsc1tpXTsKKyAgICAgICAgWmVyb1BvbGUqIHBvc3RGaWx0ZXJz
ID0gbV9wb3N0RmlsdGVyUGFja3NbaV0tPmZpbHRlcnM7CisKKyAgICAgICAgcG9zdEZpbHRlcnNb
MF0ucHJvY2VzcyhkZXN0aW5hdGlvbkRhdGEsIGRlc3RpbmF0aW9uRGF0YSwgZnJhbWVzVG9Qcm9j
ZXNzKTsKKyAgICAgICAgcG9zdEZpbHRlcnNbMV0ucHJvY2VzcyhkZXN0aW5hdGlvbkRhdGEsIGRl
c3RpbmF0aW9uRGF0YSwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICAgICAgcG9zdEZpbHRlcnNbMl0u
cHJvY2VzcyhkZXN0aW5hdGlvbkRhdGEsIGRlc3RpbmF0aW9uRGF0YSwgZnJhbWVzVG9Qcm9jZXNz
KTsKKyAgICAgICAgcG9zdEZpbHRlcnNbM10ucHJvY2VzcyhkZXN0aW5hdGlvbkRhdGEsIGRlc3Rp
bmF0aW9uRGF0YSwgZnJhbWVzVG9Qcm9jZXNzKTsKICAgICB9CiB9CiAKQEAgLTIxNywxNiArMjM1
LDMyIEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yOjpyZXNldCgpCiAgICAgbV9sYXN0QW5jaG9y
ID0gLTE7CiAgICAgbV9sYXN0RmlsdGVyU3RhZ2VHYWluID0gLTE7CiAKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICAgIG1fcHJlRmlsdGVyW2ldLnJlc2V0KCk7
Ci0gICAgICAgIG1fcHJlRmlsdGVyUltpXS5yZXNldCgpOwotICAgICAgICBtX3Bvc3RGaWx0ZXJb
aV0ucmVzZXQoKTsKLSAgICAgICAgbV9wb3N0RmlsdGVyUltpXS5yZXNldCgpOworICAgIGZvciAo
dW5zaWduZWQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBtX251bWJlck9mQ2hhbm5lbHM7ICsrY2hh
bm5lbCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIHN0YWdlSW5kZXggPSAwOyBzdGFnZUluZGV4
IDwgNDsgKytzdGFnZUluZGV4KSB7CisgICAgICAgICAgICBtX3ByZUZpbHRlclBhY2tzW2NoYW5u
ZWxdLT5maWx0ZXJzW3N0YWdlSW5kZXhdLnJlc2V0KCk7CisgICAgICAgICAgICBtX3Bvc3RGaWx0
ZXJQYWNrc1tjaGFubmVsXS0+ZmlsdGVyc1tzdGFnZUluZGV4XS5yZXNldCgpOworICAgICAgICB9
CiAgICAgfQogCiAgICAgbV9jb21wcmVzc29yLnJlc2V0KCk7CiB9CiAKK3ZvaWQgRHluYW1pY3ND
b21wcmVzc29yOjpzZXROdW1iZXJPZkNoYW5uZWxzKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMp
Cit7CisgICAgaWYgKG1fcHJlRmlsdGVyUGFja3Muc2l6ZSgpID09IG51bWJlck9mQ2hhbm5lbHMp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJlRmlsdGVyUGFja3MuY2xlYXIoKTsKKyAgICBt
X3Bvc3RGaWx0ZXJQYWNrcy5jbGVhcigpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZkNoYW5uZWxzOyArK2kpIHsKKyAgICAgICAgbV9wcmVGaWx0ZXJQYWNrcy5hcHBlbmQo
YWRvcHRQdHIobmV3IFplcm9Qb2xlRmlsdGVyUGFjazQoKSkpOworICAgICAgICBtX3Bvc3RGaWx0
ZXJQYWNrcy5hcHBlbmQoYWRvcHRQdHIobmV3IFplcm9Qb2xlRmlsdGVyUGFjazQoKSkpOworICAg
IH0KKworICAgIG1fY29tcHJlc3Nvci5zZXROdW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5l
bHMpOworICAgIG1fbnVtYmVyT2ZDaGFubmVscyA9IG51bWJlck9mQ2hhbm5lbHM7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5oCmlu
ZGV4IGUwMTE1ZWUyNzNlNDMwZjljMjhmNTY0YmZjOWNjNDRlYmM2NmM2OWUuLjdlMWJiOWQyZmE4
ZmZlMTM1MzczOWZmMmRmN2E4NzhjOWQxZGZkYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5oCkBAIC02MiwyNSArNjIsMjYgQEAg
cHVibGljOgogICAgICAgICBQYXJhbUxhc3QKICAgICB9OwogCi0gICAgRHluYW1pY3NDb21wcmVz
c29yKGJvb2wgaXNTdGVyZW8sIGZsb2F0IHNhbXBsZVJhdGUpOworICAgIER5bmFtaWNzQ29tcHJl
c3NvcihmbG9hdCBzYW1wbGVSYXRlLCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKTsKIAogICAg
IHZvaWQgcHJvY2Vzcyhjb25zdCBBdWRpb0J1cyogc291cmNlQnVzLCBBdWRpb0J1cyogZGVzdGlu
YXRpb25CdXMsIHVuc2lnbmVkIGZyYW1lc1RvUHJvY2Vzcyk7CiAgICAgdm9pZCByZXNldCgpOwor
ICAgIHZvaWQgc2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCk7CiAKICAgICBmbG9hdCBwYXJh
bWV0ZXJWYWx1ZSh1bnNpZ25lZCBwYXJhbWV0ZXJJRCk7CiAKLSAgICBib29sIGlzU3RlcmVvKCkg
Y29uc3QgeyByZXR1cm4gbV9pc1N0ZXJlbzsgfQogICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25z
dCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KICAgICBmbG9hdCBueXF1aXN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zYW1wbGVSYXRlIC8gMjsgfQogCiBwcm90ZWN0ZWQ6CisgICAgdW5zaWduZWQgbV9u
dW1iZXJPZkNoYW5uZWxzOworCiAgICAgLy8gbV9wYXJhbWV0ZXJzIGhvbGRzIHRoZSB0d2Vha2Fi
bGUgY29tcHJlc3NvciBwYXJhbWV0ZXJzLgogICAgIC8vIEZJWE1FOiBleHBvc2Ugc29tZSBvZiB0
aGUgbW9zdCBpbXBvcnRhbnQgb25lcyAoc3VjaCBhcyB0aHJlc2hvbGQsIGF0dGFjaywgcmVsZWFz
ZSkKICAgICAvLyBhcyBEeW5hbWljc0NvbXByZXNzb3JOb2RlIGF0dHJpYnV0ZXMuCiAgICAgZmxv
YXQgbV9wYXJhbWV0ZXJzW1BhcmFtTGFzdF07CiAgICAgdm9pZCBpbml0aWFsaXplUGFyYW1ldGVy
cygpOwogCi0gICAgYm9vbCBtX2lzU3RlcmVvOwogICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKIAog
ICAgIC8vIEVtcGhhc2lzIGZpbHRlciBjb250cm9scy4KQEAgLTg4LDExICs4OSwxMyBAQCBwcm90
ZWN0ZWQ6CiAgICAgZmxvYXQgbV9sYXN0QW5jaG9yOwogICAgIGZsb2F0IG1fbGFzdEZpbHRlclN0
YWdlR2FpbjsKIAotICAgIC8vIEVtcGhhc2lzIGZpbHRlcnMuCi0gICAgWmVyb1BvbGUgbV9wcmVG
aWx0ZXJbNF07Ci0gICAgWmVyb1BvbGUgbV9wcmVGaWx0ZXJSWzRdOwotICAgIFplcm9Qb2xlIG1f
cG9zdEZpbHRlcls0XTsKLSAgICBaZXJvUG9sZSBtX3Bvc3RGaWx0ZXJSWzRdOworICAgIHR5cGVk
ZWYgc3RydWN0IHsKKyAgICAgICAgWmVyb1BvbGUgZmlsdGVyc1s0XTsKKyAgICB9IFplcm9Qb2xl
RmlsdGVyUGFjazQ7CisKKyAgICAvLyBQZXItY2hhbm5lbCBlbXBoYXNpcyBmaWx0ZXJzLgorICAg
IFZlY3RvcjxPd25QdHI8WmVyb1BvbGVGaWx0ZXJQYWNrND4gPiBtX3ByZUZpbHRlclBhY2tzOwor
ICAgIFZlY3RvcjxPd25QdHI8WmVyb1BvbGVGaWx0ZXJQYWNrND4gPiBtX3Bvc3RGaWx0ZXJQYWNr
czsKIAogICAgIHZvaWQgc2V0RW1waGFzaXNTdGFnZVBhcmFtZXRlcnModW5zaWduZWQgc3RhZ2VJ
bmRleCwgZmxvYXQgZ2FpbiwgZmxvYXQgbm9ybWFsaXplZEZyZXF1ZW5jeSAvKiAwIC0+IDEgKi8p
OwogICAgIHZvaWQgc2V0RW1waGFzaXNQYXJhbWV0ZXJzKGZsb2F0IGdhaW4sIGZsb2F0IGFuY2hv
ckZyZXEsIGZsb2F0IGZpbHRlclN0YWdlUmF0aW8pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAKaW5kZXgg
YTMyMmEzMzAyNTk2MGM4OWNiNmJlMDZjMjViODc3Mzc2ZGE5ZTM2Yy4uM2U5NDNkMTIwNzU3YWE3
ZTlmZjE2ZWI1NDUwN2JjYWQ1NWM0MzhiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwCkBAIC01Miwy
MCArNTIsMzAgQEAgc3RhdGljIGZsb2F0IHNhdHVyYXRlKGZsb2F0IHgsIGZsb2F0IGspCiAgICAg
cmV0dXJuIDEgLSBleHAoLWsgKiB4KTsKIH0KIAotRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpE
eW5hbWljc0NvbXByZXNzb3JLZXJuZWwoZmxvYXQgc2FtcGxlUmF0ZSkKK0R5bmFtaWNzQ29tcHJl
c3Nvcktlcm5lbDo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsKGZsb2F0IHNhbXBsZVJhdGUsIHVu
c2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpCiAgICAgOiBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkK
ICAgICAsIG1fbGFzdFByZURlbGF5RnJhbWVzKERlZmF1bHRQcmVEZWxheUZyYW1lcykKLSAgICAs
IG1fcHJlRGVsYXlCdWZmZXJMKE1heFByZURlbGF5RnJhbWVzKQotICAgICwgbV9wcmVEZWxheUJ1
ZmZlclIoTWF4UHJlRGVsYXlGcmFtZXMpCiAgICAgLCBtX3ByZURlbGF5UmVhZEluZGV4KDApCiAg
ICAgLCBtX3ByZURlbGF5V3JpdGVJbmRleChEZWZhdWx0UHJlRGVsYXlGcmFtZXMpCiB7CisgICAg
c2V0TnVtYmVyT2ZDaGFubmVscyhudW1iZXJPZkNoYW5uZWxzKTsKKwogICAgIC8vIEluaXRpYWxp
emVzIG1vc3QgbWVtYmVyIHZhcmlhYmxlcwogICAgIHJlc2V0KCk7CiAgICAgCiAgICAgbV9tZXRl
cmluZ1JlbGVhc2VLID0gZGlzY3JldGVUaW1lQ29uc3RhbnRGb3JTYW1wbGVSYXRlKG1ldGVyaW5n
UmVsZWFzZVRpbWVDb25zdGFudCwgc2FtcGxlUmF0ZSk7CiB9CiAKK3ZvaWQgRHluYW1pY3NDb21w
cmVzc29yS2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5l
bHMpCit7CisgICAgaWYgKG1fcHJlRGVsYXlCdWZmZXJzLnNpemUoKSA9PSBudW1iZXJPZkNoYW5u
ZWxzKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByZURlbGF5QnVmZmVycy5jbGVhcigpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpCisgICAg
ICAgIG1fcHJlRGVsYXlCdWZmZXJzLmFwcGVuZChhZG9wdFB0cihuZXcgQXVkaW9GbG9hdEFycmF5
KE1heFByZURlbGF5RnJhbWVzKSkpOworfQorCiB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5l
bDo6c2V0UHJlRGVsYXlUaW1lKGZsb2F0IHByZURlbGF5VGltZSkKIHsKICAgICAvLyBSZS1jb25m
aWd1cmUgbG9vay1haGVhZCBzZWN0aW9uIHByZS1kZWxheSBpZiBkZWxheSB0aW1lIGhhcyBjaGFu
Z2VkLgpAQCAtNzUsMTcgKzg1LDE3IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpz
ZXRQcmVEZWxheVRpbWUoZmxvYXQgcHJlRGVsYXlUaW1lKQogICAgICAgICAKICAgICBpZiAobV9s
YXN0UHJlRGVsYXlGcmFtZXMgIT0gcHJlRGVsYXlGcmFtZXMpIHsKICAgICAgICAgbV9sYXN0UHJl
RGVsYXlGcmFtZXMgPSBwcmVEZWxheUZyYW1lczsKLSAgICAgICAgbV9wcmVEZWxheUJ1ZmZlckwu
emVybygpOwotICAgICAgICBtX3ByZURlbGF5QnVmZmVyUi56ZXJvKCk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3ByZURlbGF5QnVmZmVycy5zaXplKCk7ICsraSkKKyAgICAg
ICAgICAgIG1fcHJlRGVsYXlCdWZmZXJzW2ldLT56ZXJvKCk7CisKICAgICAgICAgbV9wcmVEZWxh
eVJlYWRJbmRleCA9IDA7CiAgICAgICAgIG1fcHJlRGVsYXlXcml0ZUluZGV4ID0gcHJlRGVsYXlG
cmFtZXM7CiAgICAgfQogfQogCi12b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cHJvY2Vz
cyhjb25zdCBmbG9hdCogc291cmNlTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0KiBkZXN0aW5hdGlvbkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBmbG9hdCogc291cmNlUiwgLyogc3RlcmVvLWxpbmtlZCAqLwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uUiwK
K3ZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKGZsb2F0KiBzb3VyY2VDaGFu
bmVsc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIGRl
c3RpbmF0aW9uQ2hhbm5lbHNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZXNUb1Byb2Nlc3MsCiAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGRiVGhyZXNob2xkLApAQCAtMTAyLDcgKzEx
Miw4IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKGNvbnN0IGZsb2F0
KiBzb3VyY2VMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQg
cmVsZWFzZVpvbmU0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiB7
Ci0gICAgYm9vbCBpc1N0ZXJlbyA9IGRlc3RpbmF0aW9uUjsKKyAgICBBU1NFUlQobV9wcmVEZWxh
eUJ1ZmZlcnMuc2l6ZSgpID09IG51bWJlck9mQ2hhbm5lbHMpOworCiAgICAgZmxvYXQgc2FtcGxl
UmF0ZSA9IHRoaXMtPnNhbXBsZVJhdGUoKTsKIAogICAgIGZsb2F0IGRyeU1peCA9IDEgLSBlZmZl
Y3RCbGVuZDsKQEAgLTE2NCw2ICsxNzUsNyBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5l
bDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlTCwKIAogICAgIGNvbnN0IGludCBuRGl2aXNp
b25zID0gZnJhbWVzVG9Qcm9jZXNzIC8gbkRpdmlzaW9uRnJhbWVzOwogCisgICAgdW5zaWduZWQg
ZnJhbWVJbmRleCA9IDA7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuRGl2aXNpb25zOyArK2kp
IHsKICAgICAgICAgLy8gfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAgICAgICAg
IC8vIENhbGN1bGF0ZSBkZXNpcmVkIGdhaW4KQEAgLTI0Nyw4ICsyNTksNiBAQCB2b2lkIER5bmFt
aWNzQ29tcHJlc3Nvcktlcm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlTCwKICAgICAg
ICAgLy8gfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKICAgICAgICAgewotICAg
ICAgICAgICAgZmxvYXQqIGRlbGF5QnVmZmVyTCA9IG1fcHJlRGVsYXlCdWZmZXJMLmRhdGEoKTsK
LSAgICAgICAgICAgIGZsb2F0KiBkZWxheUJ1ZmZlclIgPSBtX3ByZURlbGF5QnVmZmVyUi5kYXRh
KCk7CiAgICAgICAgICAgICBpbnQgcHJlRGVsYXlSZWFkSW5kZXggPSBtX3ByZURlbGF5UmVhZElu
ZGV4OwogICAgICAgICAgICAgaW50IHByZURlbGF5V3JpdGVJbmRleCA9IG1fcHJlRGVsYXlXcml0
ZUluZGV4OwogICAgICAgICAgICAgZmxvYXQgZGV0ZWN0b3JBdmVyYWdlID0gbV9kZXRlY3RvckF2
ZXJhZ2U7CkBAIC0yNTYsMzIgKzI2NiwxOSBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5l
bDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlTCwKIAogICAgICAgICAgICAgaW50IGxvb3BG
cmFtZXMgPSBuRGl2aXNpb25GcmFtZXM7CiAgICAgICAgICAgICB3aGlsZSAobG9vcEZyYW1lcy0t
KSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29tcHJlc3NvcklucHV0OwotICAgICAgICAgICAg
ICAgIGZsb2F0IGlucHV0TDsKLSAgICAgICAgICAgICAgICBmbG9hdCBpbnB1dFIgPSAwOworICAg
ICAgICAgICAgICAgIGZsb2F0IGNvbXByZXNzb3JJbnB1dCA9IDA7CiAKICAgICAgICAgICAgICAg
ICAvLyBQcmVkZWxheSBzaWduYWwsIGNvbXB1dGluZyBjb21wcmVzc2lvbiBhbW91bnQgZnJvbSB1
bi1kZWxheWVkIHZlcnNpb24uCi0gICAgICAgICAgICAgICAgaWYgKGlzU3RlcmVvKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGZsb2F0IHVuZGVsYXllZEwgPSAqc291cmNlTCsrOwotICAgICAgICAg
ICAgICAgICAgICBmbG9hdCB1bmRlbGF5ZWRSID0gKnNvdXJjZVIrKzsKLQotICAgICAgICAgICAg
ICAgICAgICBjb21wcmVzc29ySW5wdXQgPSAwLjVmICogKHVuZGVsYXllZEwgKyB1bmRlbGF5ZWRS
KTsKLQotICAgICAgICAgICAgICAgICAgICBpbnB1dEwgPSBkZWxheUJ1ZmZlckxbcHJlRGVsYXlS
ZWFkSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICBpbnB1dFIgPSBkZWxheUJ1ZmZlclJbcHJl
RGVsYXlSZWFkSW5kZXhdOwotCi0gICAgICAgICAgICAgICAgICAgIGRlbGF5QnVmZmVyTFtwcmVE
ZWxheVdyaXRlSW5kZXhdID0gdW5kZWxheWVkTDsKLSAgICAgICAgICAgICAgICAgICAgZGVsYXlC
dWZmZXJSW3ByZURlbGF5V3JpdGVJbmRleF0gPSB1bmRlbGF5ZWRSOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb3JJbnB1dCA9ICpzb3VyY2VM
Kys7Ci0KLSAgICAgICAgICAgICAgICAgICAgaW5wdXRMID0gZGVsYXlCdWZmZXJMW3ByZURlbGF5
UmVhZEluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVsYXlCdWZmZXJMW3ByZURlbGF5V3Jp
dGVJbmRleF0gPSBjb21wcmVzc29ySW5wdXQ7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgeworICAgICAgICAgICAgICAgICAg
ICBmbG9hdCogZGVsYXlCdWZmZXIgPSBtX3ByZURlbGF5QnVmZmVyc1tpXS0+ZGF0YSgpOworICAg
ICAgICAgICAgICAgICAgICBmbG9hdCB1bmRlbGF5ZWRTb3VyY2UgPSBzb3VyY2VDaGFubmVsc1tp
XVtmcmFtZUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgZGVsYXlCdWZmZXJbcHJlRGVsYXlX
cml0ZUluZGV4XSA9IHVuZGVsYXllZFNvdXJjZTsKKworICAgICAgICAgICAgICAgICAgICBmbG9h
dCBhYnNVbmRlbGF5ZWRTb3VyY2UgPSB1bmRlbGF5ZWRTb3VyY2UgPiAwID8gdW5kZWxheWVkU291
cmNlIDogLXVuZGVsYXllZFNvdXJjZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXByZXNz
b3JJbnB1dCA8IGFic1VuZGVsYXllZFNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXByZXNzb3JJbnB1dCA9IGFic1VuZGVsYXllZFNvdXJjZTsKICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBwcmVEZWxheVJlYWRJbmRleCA9IChwcmVEZWxheVJlYWRJbmRleCAr
IDEpICYgTWF4UHJlRGVsYXlGcmFtZXNNYXNrOwotICAgICAgICAgICAgICAgIHByZURlbGF5V3Jp
dGVJbmRleCA9IChwcmVEZWxheVdyaXRlSW5kZXggKyAxKSAmIE1heFByZURlbGF5RnJhbWVzTWFz
azsKLQogICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBzaGFwZWQgcG93ZXIgb24gdW5kZWxh
eWVkIGlucHV0LgogCiAgICAgICAgICAgICAgICAgZmxvYXQgc2NhbGVkSW5wdXQgPSBjb21wcmVz
c29ySW5wdXQ7CkBAIC0zMzcsMTcgKzMzNCwxNCBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktl
cm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlTCwKICAgICAgICAgICAgICAgICAgICAg
bV9tZXRlcmluZ0dhaW4gKz0gKGRiUmVhbEdhaW4gLSBtX21ldGVyaW5nR2FpbikgKiBtX21ldGVy
aW5nUmVsZWFzZUs7CiAKICAgICAgICAgICAgICAgICAvLyBBcHBseSBmaW5hbCBnYWluLgotICAg
ICAgICAgICAgICAgIGlmIChpc1N0ZXJlbykgewotICAgICAgICAgICAgICAgICAgICBmbG9hdCBv
dXRwdXRMID0gaW5wdXRMOwotICAgICAgICAgICAgICAgICAgICBmbG9hdCBvdXRwdXRSID0gaW5w
dXRSOwotCi0gICAgICAgICAgICAgICAgICAgIG91dHB1dEwgKj0gdG90YWxHYWluOwotICAgICAg
ICAgICAgICAgICAgICBvdXRwdXRSICo9IHRvdGFsR2FpbjsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZsb2F0KiBkZWxheUJ1ZmZlciA9IG1fcHJlRGVsYXlCdWZmZXJzW2ldLT5kYXRh
KCk7CisgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uQ2hhbm5lbHNbaV1bZnJhbWVJbmRl
eF0gPSBkZWxheUJ1ZmZlcltwcmVEZWxheVJlYWRJbmRleF0gKiB0b3RhbEdhaW47CisgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IG91dHB1
dEw7Ci0gICAgICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblIrKyA9IG91dHB1dFI7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9
IGlucHV0TCAqIHRvdGFsR2FpbjsKKyAgICAgICAgICAgICAgICBmcmFtZUluZGV4Kys7CisgICAg
ICAgICAgICAgICAgcHJlRGVsYXlSZWFkSW5kZXggPSAocHJlRGVsYXlSZWFkSW5kZXggKyAxKSAm
IE1heFByZURlbGF5RnJhbWVzTWFzazsKKyAgICAgICAgICAgICAgICBwcmVEZWxheVdyaXRlSW5k
ZXggPSAocHJlRGVsYXlXcml0ZUluZGV4ICsgMSkgJiBNYXhQcmVEZWxheUZyYW1lc01hc2s7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIExvY2FscyBiYWNrIHRvIG1lbWJlciB2YXJp
YWJsZXMuCkBAIC0zNjYsOCArMzYwLDkgQEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6
OnJlc2V0KCkKICAgICBtX21ldGVyaW5nR2FpbiA9IDE7CiAKICAgICAvLyBQcmVkZWxheSBzZWN0
aW9uLgotICAgIG1fcHJlRGVsYXlCdWZmZXJMLnplcm8oKTsKLSAgICBtX3ByZURlbGF5QnVmZmVy
Ui56ZXJvKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJlRGVsYXlCdWZmZXJz
LnNpemUoKTsgKytpKQorICAgICAgICBtX3ByZURlbGF5QnVmZmVyc1tpXS0+emVybygpOworCiAg
ICAgbV9wcmVEZWxheVJlYWRJbmRleCA9IDA7CiAgICAgbV9wcmVEZWxheVdyaXRlSW5kZXggPSBE
ZWZhdWx0UHJlRGVsYXlGcmFtZXM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmgKaW5kZXggY2YzMTliMzc4YWRl
YjU5MDYyOTUzZGVhYjA5MmUzMzM5YzZmNjg4MC4uZGE4ZTRjOGJlZTljNWQxNzlhODg0NDA3MDVl
MjJjM2Y2MTk5ZGEyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
RHluYW1pY3NDb21wcmVzc29yS2VybmVsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmgKQEAgLTMxLDE3ICszMSwyMSBAQAogCiAj
aW5jbHVkZSAiQXVkaW9BcnJheS5oIgogCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRHlu
YW1pY3NDb21wcmVzc29yS2VybmVsIHsKIHB1YmxpYzoKLSAgICBEeW5hbWljc0NvbXByZXNzb3JL
ZXJuZWwoZmxvYXQgc2FtcGxlUmF0ZSk7CisgICAgRHluYW1pY3NDb21wcmVzc29yS2VybmVsKGZs
b2F0IHNhbXBsZVJhdGUsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpOworCisgICAgdm9pZCBz
ZXROdW1iZXJPZkNoYW5uZWxzKHVuc2lnbmVkKTsKIAogICAgIC8vIFBlcmZvcm1zIHN0ZXJlby1s
aW5rZWQgY29tcHJlc3Npb24uCi0gICAgdm9pZCBwcm9jZXNzKGNvbnN0IGZsb2F0ICpzb3VyY2VM
LAotICAgICAgICAgICAgICAgICBmbG9hdCAqZGVzdGluYXRpb25MLAotICAgICAgICAgICAgICAg
ICBjb25zdCBmbG9hdCAqc291cmNlUiwKLSAgICAgICAgICAgICAgICAgZmxvYXQgKmRlc3RpbmF0
aW9uUiwKKyAgICB2b2lkIHByb2Nlc3MoZmxvYXQqIHNvdXJjZUNoYW5uZWxzW10sCisgICAgICAg
ICAgICAgICAgIGZsb2F0KiBkZXN0aW5hdGlvbkNoYW5uZWxzW10sCisgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsCiAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZy
YW1lc1RvUHJvY2VzcywKIAogICAgICAgICAgICAgICAgICBmbG9hdCBkYlRocmVzaG9sZCwKQEAg
LTY2LDcgKzcwLDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgZmxvYXQgbV9zYW1wbGVS
YXRlOwotICAgIAorCiAgICAgZmxvYXQgbV9kZXRlY3RvckF2ZXJhZ2U7CiAgICAgZmxvYXQgbV9j
b21wcmVzc29yR2FpbjsKIApAQCAtODEsOCArODUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdW5zaWdu
ZWQgbV9sYXN0UHJlRGVsYXlGcmFtZXM7CiAgICAgdm9pZCBzZXRQcmVEZWxheVRpbWUoZmxvYXQp
OwogCi0gICAgQXVkaW9GbG9hdEFycmF5IG1fcHJlRGVsYXlCdWZmZXJMOwotICAgIEF1ZGlvRmxv
YXRBcnJheSBtX3ByZURlbGF5QnVmZmVyUjsKKyAgICBWZWN0b3I8T3duUHRyPEF1ZGlvRmxvYXRB
cnJheT4gPiBtX3ByZURlbGF5QnVmZmVyczsKICAgICBpbnQgbV9wcmVEZWxheVJlYWRJbmRleDsK
ICAgICBpbnQgbV9wcmVEZWxheVdyaXRlSW5kZXg7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAKaW5kZXggZWE4YjU4OTIyMzU2YWEx
MzY1MTMyYWVmMzFmYWFmNjAzZjc0NTQyNy4uMTNmN2M4MjM1NDU0OTE4OTBmNmI3ZGRmOTRhNDk0
ZDFhOTU5OGQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3ND
b21wcmVzc29yTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3ND
b21wcmVzc29yTm9kZS5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgRHluYW1pY3NDb21wcmVzc29yTm9k
ZTo6RHluYW1pY3NDb21wcmVzc29yTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNh
bXAKICAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQogewogICAgIGFkZElucHV0
KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOwotICAgIGFkZE91dHB1dChhZG9w
dFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDIpKSk7CisgICAgYWRkT3V0cHV0KGFkb3B0
UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgRGVmYXVsdE51bWJlck9mT3V0cHV0Q2hhbm5l
bHMpKSk7CiAgICAgCiAgICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVEeW5hbWljc0NvbXByZXNzb3Ip
OwogICAgIApAQCAtNzAsNyArNzAsNyBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6Omlu
aXRpYWxpemUoKQogICAgICAgICByZXR1cm47CiAKICAgICBBdWRpb05vZGU6OmluaXRpYWxpemUo
KTsgICAgCi0gICAgbV9keW5hbWljc0NvbXByZXNzb3IgPSBhZG9wdFB0cihuZXcgRHluYW1pY3ND
b21wcmVzc29yKHRydWUsIHNhbXBsZVJhdGUoKSkpOworICAgIG1fZHluYW1pY3NDb21wcmVzc29y
ID0gYWRvcHRQdHIobmV3IER5bmFtaWNzQ29tcHJlc3NvcihzYW1wbGVSYXRlKCksIERlZmF1bHRO
dW1iZXJPZk91dHB1dENoYW5uZWxzKSk7CiB9CiAKIHZvaWQgRHluYW1pY3NDb21wcmVzc29yTm9k
ZTo6dW5pbml0aWFsaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5
bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNz
Q29tcHJlc3Nvck5vZGUuaAppbmRleCBkNzE4YWIzNDFjYzAxZTE4OGNmMjEzMDU2NzQ2NWYwNDhi
ZGEwNWNiLi5mMjVmYWM1NGU5MDEwNDA1OGUwN2UzMzgzYjRlZGNmMzc4NTBiYTUzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5oCkBAIC01
MCw2ICs1MCw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRHluYW1pY3NDb21wcmVzc29yTm9k
ZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKIAorICAgIC8vIFNldCBvdXRwdXQg
dG8gc3RlcmVvIGJ5IGRlZmF1bHQuCisgICAgZW51bSB7IERlZmF1bHROdW1iZXJPZk91dHB1dENo
YW5uZWxzID0gMiB9OworCiAgICAgT3duUHRyPER5bmFtaWNzQ29tcHJlc3Nvcj4gbV9keW5hbWlj
c0NvbXByZXNzb3I7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127747</attachid>
            <date>2012-02-19 18:00:11 -0800</date>
            <delta_ts>2012-02-20 17:40:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77856-20120220100501.patch</filename>
            <type>text/plain</type>
            <size>23331</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDA0OTJkZTBmYWE1MTQ1
ZGM0ZTAwMjM0YTk5MjI2NTYzOGMxYmM4Yi4uYjIxZTUyNjQ0OTNjYzRjN2NlY2Y4ZTZkMzM1OGEz
NjIyNTQ5NDQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTAyLTE5ICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBIYXZlIHRoZSBEeW5h
bWljc0NvbXByZXNzb3JOb2RlIHN1cHBvcnQgbXVsdGktY2hhbm5lbCBkYXRhCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzg1NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRHlu
YW1pY3NDb21wcmVzc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nv
cjo6RHluYW1pY3NDb21wcmVzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJl
c3Nvcjo6c2V0RW1waGFzaXNTdGFnZVBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RHlu
YW1pY3NDb21wcmVzc29yOjpwcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29t
cHJlc3Nvcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yOjpz
ZXROdW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5oOgorICAgICAgICAoRHluYW1pY3NDb21wcmVz
c29yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpEeW5hbWlj
c0NvbXByZXNzb3JLZXJuZWwpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29y
S2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpzZXRQcmVEZWxheVRpbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cmVzZXQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oOgorICAgICAgICAo
RHluYW1pY3NDb21wcmVzc29yS2VybmVsKToKKyAgICAgICAgKiB3ZWJhdWRpby9EeW5hbWljc0Nv
bXByZXNzb3JOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvck5v
ZGU6OkR5bmFtaWNzQ29tcHJlc3Nvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3ND
b21wcmVzc29yTm9kZTo6aW5pdGlhbGl6ZSk6CisKIDIwMTItMDItMTkgIEphbWVzIFJvYmluc29u
ICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNb3ZlIHN0dWIgaW1wbGVtZW50YXRp
b25zIG9mIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIGZ1bmN0aW9ucyBpbnRvIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTm9uZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0R5bmFtaWNzQ29tcHJlc3Nvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9E
eW5hbWljc0NvbXByZXNzb3IuY3BwCmluZGV4IGE1NTIwNTcwNWQ5NTEwYmYyMGQ5ZGIzNTQ4Nzkz
OTY1ZWUwMmVlMWQuLjE3OTRiNzgxZDAxZjM3YmUwZDVhYTBiZWE2MWFjZjc1MjlmNjllNzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVz
c29yLmNwcApAQCAtNDAsMTYgKzQwLDIwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcg
bmFtZXNwYWNlIEF1ZGlvVXRpbGl0aWVzOwogICAgIAotRHluYW1pY3NDb21wcmVzc29yOjpEeW5h
bWljc0NvbXByZXNzb3IoYm9vbCBpc1N0ZXJlbywgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IG1f
aXNTdGVyZW8oaXNTdGVyZW8pCi0gICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKLSAgICAs
IG1fY29tcHJlc3NvcihzYW1wbGVSYXRlKQorRHluYW1pY3NDb21wcmVzc29yOjpEeW5hbWljc0Nv
bXByZXNzb3IoZmxvYXQgc2FtcGxlUmF0ZSwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscykKKyAg
ICA6IG1fbnVtYmVyT2ZDaGFubmVscyhudW1iZXJPZkNoYW5uZWxzKQorICAgICwgbV9jb21wcmVz
c29yKHNhbXBsZVJhdGUsIG51bWJlck9mQ2hhbm5lbHMpCiB7CiAgICAgLy8gVW5pbml0aWFsaXpl
ZCBzdGF0ZSAtIGZvciBwYXJhbWV0ZXIgcmVjYWxjdWxhdGlvbi4KICAgICBtX2xhc3RGaWx0ZXJT
dGFnZVJhdGlvID0gLTE7CiAgICAgbV9sYXN0QW5jaG9yID0gLTE7CiAgICAgbV9sYXN0RmlsdGVy
U3RhZ2VHYWluID0gLTE7CiAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZD
aGFubmVsczsgKytpKSB7CisgICAgICAgIG1fcHJlRmlsdGVyUGFja3MuYXBwZW5kKGFkb3B0UHRy
KG5ldyBaZXJvUG9sZUZpbHRlclBhY2s0KCkpKTsKKyAgICAgICAgbV9wb3N0RmlsdGVyUGFja3Mu
YXBwZW5kKGFkb3B0UHRyKG5ldyBaZXJvUG9sZUZpbHRlclBhY2s0KCkpKTsKKyAgICB9CisKICAg
ICBpbml0aWFsaXplUGFyYW1ldGVycygpOwogfQogCkBAIC05MywxOCArOTcsMjAgQEAgdm9pZCBE
eW5hbWljc0NvbXByZXNzb3I6OnNldEVtcGhhc2lzU3RhZ2VQYXJhbWV0ZXJzKHVuc2lnbmVkIHN0
YWdlSW5kZXgsIGZsb2F0IGcKICAgICBmbG9hdCByMSA9IGV4cGYoLWYxICogcGlGbG9hdCk7CiAg
ICAgZmxvYXQgcjIgPSBleHBmKC1mMiAqIHBpRmxvYXQpOwogCi0gICAgLy8gU2V0IHByZS1maWx0
ZXIgemVybyBhbmQgcG9sZSB0byBjcmVhdGUgYW4gZW1waGFzaXMgZmlsdGVyLgotICAgIG1fcHJl
RmlsdGVyW3N0YWdlSW5kZXhdLnNldFplcm8ocjEpOwotICAgIG1fcHJlRmlsdGVyW3N0YWdlSW5k
ZXhdLnNldFBvbGUocjIpOwotICAgIG1fcHJlRmlsdGVyUltzdGFnZUluZGV4XS5zZXRaZXJvKHIx
KTsKLSAgICBtX3ByZUZpbHRlclJbc3RhZ2VJbmRleF0uc2V0UG9sZShyMik7Ci0KLSAgICAvLyBT
ZXQgcG9zdC1maWx0ZXIgd2l0aCB6ZXJvIGFuZCBwb2xlIHJldmVyc2VkIHRvIGNyZWF0ZSB0aGUg
ZGUtZW1waGFzaXMgZmlsdGVyLgotICAgIC8vIElmIHRoZXJlIHdlcmUgbm8gY29tcHJlc3NvciBr
ZXJuZWwgaW4gYmV0d2VlbiwgdGhleSB3b3VsZCBjYW5jZWwgZWFjaCBvdGhlciBvdXQgKGFsbHBh
c3MgZmlsdGVyKS4KLSAgICBtX3Bvc3RGaWx0ZXJbc3RhZ2VJbmRleF0uc2V0WmVybyhyMik7Ci0g
ICAgbV9wb3N0RmlsdGVyW3N0YWdlSW5kZXhdLnNldFBvbGUocjEpOwotICAgIG1fcG9zdEZpbHRl
clJbc3RhZ2VJbmRleF0uc2V0WmVybyhyMik7Ci0gICAgbV9wb3N0RmlsdGVyUltzdGFnZUluZGV4
XS5zZXRQb2xlKHIxKTsKKyAgICBBU1NFUlQobV9udW1iZXJPZkNoYW5uZWxzID09IG1fcHJlRmls
dGVyUGFja3Muc2l6ZSgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX251bWJl
ck9mQ2hhbm5lbHM7ICsraSkgeworICAgICAgICAvLyBTZXQgcHJlLWZpbHRlciB6ZXJvIGFuZCBw
b2xlIHRvIGNyZWF0ZSBhbiBlbXBoYXNpcyBmaWx0ZXIuCisgICAgICAgIFplcm9Qb2xlJiBwcmVG
aWx0ZXIgPSBtX3ByZUZpbHRlclBhY2tzW2ldLT5maWx0ZXJzW3N0YWdlSW5kZXhdOworICAgICAg
ICBwcmVGaWx0ZXIuc2V0WmVybyhyMSk7CisgICAgICAgIHByZUZpbHRlci5zZXRQb2xlKHIyKTsK
KworICAgICAgICAvLyBTZXQgcG9zdC1maWx0ZXIgd2l0aCB6ZXJvIGFuZCBwb2xlIHJldmVyc2Vk
IHRvIGNyZWF0ZSB0aGUgZGUtZW1waGFzaXMgZmlsdGVyLgorICAgICAgICAvLyBJZiB0aGVyZSB3
ZXJlIG5vIGNvbXByZXNzb3Iga2VybmVsIGluIGJldHdlZW4sIHRoZXkgd291bGQgY2FuY2VsIGVh
Y2ggb3RoZXIgb3V0IChhbGxwYXNzIGZpbHRlcikuCisgICAgICAgIFplcm9Qb2xlJiBwb3N0Rmls
dGVyID0gbV9wb3N0RmlsdGVyUGFja3NbaV0tPmZpbHRlcnNbc3RhZ2VJbmRleF07CisgICAgICAg
IHBvc3RGaWx0ZXIuc2V0WmVybyhyMik7CisgICAgICAgIHBvc3RGaWx0ZXIuc2V0UG9sZShyMSk7
CisgICAgfQogfQogCiB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6c2V0RW1waGFzaXNQYXJhbWV0
ZXJzKGZsb2F0IGdhaW4sIGZsb2F0IGFuY2hvckZyZXEsIGZsb2F0IGZpbHRlclN0YWdlUmF0aW8p
CkBAIC0xMTcsMTggKzEyMyw0MyBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6c2V0RW1waGFz
aXNQYXJhbWV0ZXJzKGZsb2F0IGdhaW4sIGZsb2F0IGFuY2hvckZyZXEsIGZsbwogCiB2b2lkIER5
bmFtaWNzQ29tcHJlc3Nvcjo6cHJvY2Vzcyhjb25zdCBBdWRpb0J1cyogc291cmNlQnVzLCBBdWRp
b0J1cyogZGVzdGluYXRpb25CdXMsIHVuc2lnbmVkIGZyYW1lc1RvUHJvY2VzcykKIHsKLSAgICBj
b25zdCBmbG9hdCogc291cmNlTCA9IHNvdXJjZUJ1cy0+Y2hhbm5lbCgwKS0+ZGF0YSgpOwotICAg
IGNvbnN0IGZsb2F0KiBzb3VyY2VSOworICAgIC8vIFRob3VnaCBudW1iZXJPZkNoYW5uZWxzIGlz
IHJldHJpdmVkIGZyb20gZGVzdGluYXRpb25CdXMsIHdlIHN0aWxsIG5hbWUgaXQgbnVtYmVyT2ZD
aGFubmVscyBpbnN0ZWFkIG9mIG51bWJlck9mRGVzdGluYXRpb25DaGFubmVscy4KKyAgICAvLyBJ
dCdzIGJlY2F1c2Ugd2UgaW50ZXJuYWxseSBtYXRjaCBzb3VyY2VDaGFubmVscydzIHNpemUgdG8g
ZGVzdGluYXRpb25CdXMgYnkgY2hhbm5lbCB1cC9kb3duIG1peC4gVGh1cyB3ZSBuZWVkIG51bWJl
ck9mQ2hhbm5lbHMKKyAgICAvLyB0byBkbyB0aGUgbG9vcCB3b3JrIGZvciBib3RoIHNvdXJjZUNo
YW5uZWxzIGFuZCBkZXN0aW5hdGlvbkNoYW5uZWxzLgorCisgICAgdW5zaWduZWQgbnVtYmVyT2ZD
aGFubmVscyA9IGRlc3RpbmF0aW9uQnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7CisgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZTb3VyY2VDaGFubmVscyA9IHNvdXJjZUJ1cy0+bnVtYmVyT2ZDaGFubmVscygp
OworCisgICAgQVNTRVJUKG51bWJlck9mU291cmNlQ2hhbm5lbHMpOwogCi0gICAgaWYgKHNvdXJj
ZUJ1cy0+bnVtYmVyT2ZDaGFubmVscygpID4gMSkKLSAgICAgICAgc291cmNlUiA9IHNvdXJjZUJ1
cy0+Y2hhbm5lbCgxKS0+ZGF0YSgpOwotICAgIGVsc2UKLSAgICAgICAgc291cmNlUiA9IHNvdXJj
ZUw7CisgICAgaWYgKCFudW1iZXJPZlNvdXJjZUNoYW5uZWxzKSB7CisgICAgICAgIGRlc3RpbmF0
aW9uQnVzLT56ZXJvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBBU1NFUlQoZGVz
dGluYXRpb25CdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSAyKTsKKyAgICBjb25zdCBmbG9hdCog
c291cmNlQ2hhbm5lbHNbbnVtYmVyT2ZDaGFubmVsc107CisgICAgZmxvYXQqIGRlc3RpbmF0aW9u
Q2hhbm5lbHNbbnVtYmVyT2ZDaGFubmVsc107CisKKyAgICBzd2l0Y2ggKG51bWJlck9mQ2hhbm5l
bHMpIHsKKyAgICBjYXNlIDI6IC8vIHN0ZXJlbworICAgICAgICBzb3VyY2VDaGFubmVsc1swXSA9
IHNvdXJjZUJ1cy0+Y2hhbm5lbCgwKS0+ZGF0YSgpOworCisgICAgICAgIGlmIChudW1iZXJPZlNv
dXJjZUNoYW5uZWxzID4gMSkKKyAgICAgICAgICAgIHNvdXJjZUNoYW5uZWxzWzFdID0gc291cmNl
QnVzLT5jaGFubmVsKDEpLT5kYXRhKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8vIFNp
bXBseSBkdXBsaWNhdGUgbW9ubyBjaGFubmVsIGlucHV0IGRhdGEgdG8gcmlnaHQgY2hhbm5lbCBm
b3Igc3RlcmVvIHByb2Nlc3NpbmcuCisgICAgICAgICAgICBzb3VyY2VDaGFubmVsc1sxXSA9IHNv
dXJjZUNoYW5uZWxzWzBdOworCisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IC8vIEZJWE1FIDogc3VwcG9ydCBvdGhlciBudW1iZXIgb2YgY2hhbm5lbHMuCisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBkZXN0aW5hdGlvbkJ1cy0+emVybygpOworICAg
ICAgICByZXR1cm47CisgICAgfQogCi0gICAgZmxvYXQqIGRlc3RpbmF0aW9uTCA9IGRlc3RpbmF0
aW9uQnVzLT5jaGFubmVsKDApLT5tdXRhYmxlRGF0YSgpOwotICAgIGZsb2F0KiBkZXN0aW5hdGlv
blIgPSBkZXN0aW5hdGlvbkJ1cy0+Y2hhbm5lbCgxKS0+bXV0YWJsZURhdGEoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKQorICAgICAgICBkZXN0
aW5hdGlvbkNoYW5uZWxzW2ldID0gZGVzdGluYXRpb25CdXMtPmNoYW5uZWwoaSktPm11dGFibGVE
YXRhKCk7CiAKICAgICBmbG9hdCBmaWx0ZXJTdGFnZUdhaW4gPSBwYXJhbWV0ZXJWYWx1ZShQYXJh
bUZpbHRlclN0YWdlR2Fpbik7CiAgICAgZmxvYXQgZmlsdGVyU3RhZ2VSYXRpbyA9IHBhcmFtZXRl
clZhbHVlKFBhcmFtRmlsdGVyU3RhZ2VSYXRpbyk7CkBAIC0xNDQsMTYgKzE3NSwxNSBAQCB2b2lk
IER5bmFtaWNzQ29tcHJlc3Nvcjo6cHJvY2Vzcyhjb25zdCBBdWRpb0J1cyogc291cmNlQnVzLCBB
dWRpb0J1cyogZGVzdGluYXRpbwogCiAgICAgLy8gQXBwbHkgcHJlLWVtcGhhc2lzIGZpbHRlci4K
ICAgICAvLyBOb3RlIHRoYXQgdGhlIGZpbmFsIHRocmVlIHN0YWdlcyBhcmUgY29tcHV0ZWQgaW4t
cGxhY2UgaW4gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KLSAgICBtX3ByZUZpbHRlclswXS5wcm9j
ZXNzKHNvdXJjZUwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICBtX3ByZUZp
bHRlclsxXS5wcm9jZXNzKGRlc3RpbmF0aW9uTCwgZGVzdGluYXRpb25MLCBmcmFtZXNUb1Byb2Nl
c3MpOwotICAgIG1fcHJlRmlsdGVyWzJdLnByb2Nlc3MoZGVzdGluYXRpb25MLCBkZXN0aW5hdGlv
bkwsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgbV9wcmVGaWx0ZXJbM10ucHJvY2VzcyhkZXN0aW5h
dGlvbkwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNzKTsKLQotICAgIGlmIChpc1N0ZXJl
bygpKSB7Ci0gICAgICAgIG1fcHJlRmlsdGVyUlswXS5wcm9jZXNzKHNvdXJjZVIsIGRlc3RpbmF0
aW9uUiwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgbV9wcmVGaWx0ZXJSWzFdLnByb2Nlc3Mo
ZGVzdGluYXRpb25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgICAgIG1f
cHJlRmlsdGVyUlsyXS5wcm9jZXNzKGRlc3RpbmF0aW9uUiwgZGVzdGluYXRpb25SLCBmcmFtZXNU
b1Byb2Nlc3MpOwotICAgICAgICBtX3ByZUZpbHRlclJbM10ucHJvY2VzcyhkZXN0aW5hdGlvblIs
IGRlc3RpbmF0aW9uUiwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgIGNvbnN0IGZsb2F0KiBzb3Vy
Y2VEYXRhID0gc291cmNlQ2hhbm5lbHNbaV07CisgICAgICAgIGZsb2F0KiBkZXN0aW5hdGlvbkRh
dGEgPSBkZXN0aW5hdGlvbkNoYW5uZWxzW2ldOworICAgICAgICBaZXJvUG9sZSogcHJlRmlsdGVy
cyA9IG1fcHJlRmlsdGVyUGFja3NbaV0tPmZpbHRlcnM7CisKKyAgICAgICAgcHJlRmlsdGVyc1sw
XS5wcm9jZXNzKHNvdXJjZURhdGEsIGRlc3RpbmF0aW9uRGF0YSwgZnJhbWVzVG9Qcm9jZXNzKTsK
KyAgICAgICAgcHJlRmlsdGVyc1sxXS5wcm9jZXNzKGRlc3RpbmF0aW9uRGF0YSwgZGVzdGluYXRp
b25EYXRhLCBmcmFtZXNUb1Byb2Nlc3MpOworICAgICAgICBwcmVGaWx0ZXJzWzJdLnByb2Nlc3Mo
ZGVzdGluYXRpb25EYXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAg
ICAgIHByZUZpbHRlcnNbM10ucHJvY2VzcyhkZXN0aW5hdGlvbkRhdGEsIGRlc3RpbmF0aW9uRGF0
YSwgZnJhbWVzVG9Qcm9jZXNzKTsKICAgICB9CiAKICAgICBmbG9hdCBkYlRocmVzaG9sZCA9IHBh
cmFtZXRlclZhbHVlKFBhcmFtVGhyZXNob2xkKTsKQEAgLTE3NywxMCArMjA3LDkgQEAgdm9pZCBE
eW5hbWljc0NvbXByZXNzb3I6OnByb2Nlc3MoY29uc3QgQXVkaW9CdXMqIHNvdXJjZUJ1cywgQXVk
aW9CdXMqIGRlc3RpbmF0aW8KIAogICAgIC8vIEFwcGx5IGNvbXByZXNzaW9uIHRvIHRoZSBwcmUt
ZmlsdGVyZWQgc2lnbmFsLgogICAgIC8vIFRoZSBwcm9jZXNzaW5nIGlzIHBlcmZvcm1lZCBpbiBw
bGFjZS4KLSAgICBtX2NvbXByZXNzb3IucHJvY2VzcyhkZXN0aW5hdGlvbkwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdGluYXRpb25MLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RpbmF0aW9uUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblIsCisgICAg
bV9jb21wcmVzc29yLnByb2Nlc3MoZGVzdGluYXRpb25DaGFubmVscywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0aW5hdGlvbkNoYW5uZWxzLAorICAgICAgICAgICAgICAgICAgICAgICAg
IG51bWJlck9mQ2hhbm5lbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzVG9Qcm9j
ZXNzLAogCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGJUaHJlc2hvbGQsCkBAIC0xOTgsMTYg
KzIyNywxNCBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6cHJvY2Vzcyhjb25zdCBBdWRpb0J1
cyogc291cmNlQnVzLCBBdWRpb0J1cyogZGVzdGluYXRpbwogICAgICAgICAgICAgICAgICAgICAg
ICAgICk7CiAKICAgICAvLyBBcHBseSBkZS1lbXBoYXNpcyBmaWx0ZXIuCi0gICAgbV9wb3N0Rmls
dGVyWzBdLnByb2Nlc3MoZGVzdGluYXRpb25MLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vz
cyk7Ci0gICAgbV9wb3N0RmlsdGVyWzFdLnByb2Nlc3MoZGVzdGluYXRpb25MLCBkZXN0aW5hdGlv
bkwsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgbV9wb3N0RmlsdGVyWzJdLnByb2Nlc3MoZGVzdGlu
YXRpb25MLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgbV9wb3N0RmlsdGVy
WzNdLnByb2Nlc3MoZGVzdGluYXRpb25MLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7
Ci0KLSAgICBpZiAoaXNTdGVyZW8oKSkgewotICAgICAgICBtX3Bvc3RGaWx0ZXJSWzBdLnByb2Nl
c3MoZGVzdGluYXRpb25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgICAg
IG1fcG9zdEZpbHRlclJbMV0ucHJvY2VzcyhkZXN0aW5hdGlvblIsIGRlc3RpbmF0aW9uUiwgZnJh
bWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgbV9wb3N0RmlsdGVyUlsyXS5wcm9jZXNzKGRlc3RpbmF0
aW9uUiwgZGVzdGluYXRpb25SLCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgICAgICBtX3Bvc3RGaWx0
ZXJSWzNdLnByb2Nlc3MoZGVzdGluYXRpb25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vz
cyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkg
eworICAgICAgICBmbG9hdCogZGVzdGluYXRpb25EYXRhID0gZGVzdGluYXRpb25DaGFubmVsc1tp
XTsKKyAgICAgICAgWmVyb1BvbGUqIHBvc3RGaWx0ZXJzID0gbV9wb3N0RmlsdGVyUGFja3NbaV0t
PmZpbHRlcnM7CisKKyAgICAgICAgcG9zdEZpbHRlcnNbMF0ucHJvY2VzcyhkZXN0aW5hdGlvbkRh
dGEsIGRlc3RpbmF0aW9uRGF0YSwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICAgICAgcG9zdEZpbHRl
cnNbMV0ucHJvY2VzcyhkZXN0aW5hdGlvbkRhdGEsIGRlc3RpbmF0aW9uRGF0YSwgZnJhbWVzVG9Q
cm9jZXNzKTsKKyAgICAgICAgcG9zdEZpbHRlcnNbMl0ucHJvY2VzcyhkZXN0aW5hdGlvbkRhdGEs
IGRlc3RpbmF0aW9uRGF0YSwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICAgICAgcG9zdEZpbHRlcnNb
M10ucHJvY2VzcyhkZXN0aW5hdGlvbkRhdGEsIGRlc3RpbmF0aW9uRGF0YSwgZnJhbWVzVG9Qcm9j
ZXNzKTsKICAgICB9CiB9CiAKQEAgLTIxNywxNiArMjQ0LDMyIEBAIHZvaWQgRHluYW1pY3NDb21w
cmVzc29yOjpyZXNldCgpCiAgICAgbV9sYXN0QW5jaG9yID0gLTE7CiAgICAgbV9sYXN0RmlsdGVy
U3RhZ2VHYWluID0gLTE7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNDsgKytpKSB7
Ci0gICAgICAgIG1fcHJlRmlsdGVyW2ldLnJlc2V0KCk7Ci0gICAgICAgIG1fcHJlRmlsdGVyUltp
XS5yZXNldCgpOwotICAgICAgICBtX3Bvc3RGaWx0ZXJbaV0ucmVzZXQoKTsKLSAgICAgICAgbV9w
b3N0RmlsdGVyUltpXS5yZXNldCgpOworICAgIGZvciAodW5zaWduZWQgY2hhbm5lbCA9IDA7IGNo
YW5uZWwgPCBtX251bWJlck9mQ2hhbm5lbHM7ICsrY2hhbm5lbCkgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIHN0YWdlSW5kZXggPSAwOyBzdGFnZUluZGV4IDwgNDsgKytzdGFnZUluZGV4KSB7Cisg
ICAgICAgICAgICBtX3ByZUZpbHRlclBhY2tzW2NoYW5uZWxdLT5maWx0ZXJzW3N0YWdlSW5kZXhd
LnJlc2V0KCk7CisgICAgICAgICAgICBtX3Bvc3RGaWx0ZXJQYWNrc1tjaGFubmVsXS0+ZmlsdGVy
c1tzdGFnZUluZGV4XS5yZXNldCgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgbV9jb21wcmVz
c29yLnJlc2V0KCk7CiB9CiAKK3ZvaWQgRHluYW1pY3NDb21wcmVzc29yOjpzZXROdW1iZXJPZkNo
YW5uZWxzKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpCit7CisgICAgaWYgKG1fcHJlRmlsdGVy
UGFja3Muc2l6ZSgpID09IG51bWJlck9mQ2hhbm5lbHMpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fcHJlRmlsdGVyUGFja3MuY2xlYXIoKTsKKyAgICBtX3Bvc3RGaWx0ZXJQYWNrcy5jbGVhcigp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpIHsK
KyAgICAgICAgbV9wcmVGaWx0ZXJQYWNrcy5hcHBlbmQoYWRvcHRQdHIobmV3IFplcm9Qb2xlRmls
dGVyUGFjazQoKSkpOworICAgICAgICBtX3Bvc3RGaWx0ZXJQYWNrcy5hcHBlbmQoYWRvcHRQdHIo
bmV3IFplcm9Qb2xlRmlsdGVyUGFjazQoKSkpOworICAgIH0KKworICAgIG1fY29tcHJlc3Nvci5z
ZXROdW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5lbHMpOworICAgIG1fbnVtYmVyT2ZDaGFu
bmVscyA9IG51bWJlck9mQ2hhbm5lbHM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5oCmluZGV4IGUwMTE1ZWUyNzNlNDMwZjljMjhm
NTY0YmZjOWNjNDRlYmM2NmM2OWUuLjdlMWJiOWQyZmE4ZmZlMTM1MzczOWZmMmRmN2E4NzhjOWQx
ZGZkYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNz
Q29tcHJlc3Nvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNz
Q29tcHJlc3Nvci5oCkBAIC02MiwyNSArNjIsMjYgQEAgcHVibGljOgogICAgICAgICBQYXJhbUxh
c3QKICAgICB9OwogCi0gICAgRHluYW1pY3NDb21wcmVzc29yKGJvb2wgaXNTdGVyZW8sIGZsb2F0
IHNhbXBsZVJhdGUpOworICAgIER5bmFtaWNzQ29tcHJlc3NvcihmbG9hdCBzYW1wbGVSYXRlLCB1
bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKTsKIAogICAgIHZvaWQgcHJvY2Vzcyhjb25zdCBBdWRp
b0J1cyogc291cmNlQnVzLCBBdWRpb0J1cyogZGVzdGluYXRpb25CdXMsIHVuc2lnbmVkIGZyYW1l
c1RvUHJvY2Vzcyk7CiAgICAgdm9pZCByZXNldCgpOworICAgIHZvaWQgc2V0TnVtYmVyT2ZDaGFu
bmVscyh1bnNpZ25lZCk7CiAKICAgICBmbG9hdCBwYXJhbWV0ZXJWYWx1ZSh1bnNpZ25lZCBwYXJh
bWV0ZXJJRCk7CiAKLSAgICBib29sIGlzU3RlcmVvKCkgY29uc3QgeyByZXR1cm4gbV9pc1N0ZXJl
bzsgfQogICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7
IH0KICAgICBmbG9hdCBueXF1aXN0KCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVSYXRlIC8gMjsg
fQogCiBwcm90ZWN0ZWQ6CisgICAgdW5zaWduZWQgbV9udW1iZXJPZkNoYW5uZWxzOworCiAgICAg
Ly8gbV9wYXJhbWV0ZXJzIGhvbGRzIHRoZSB0d2Vha2FibGUgY29tcHJlc3NvciBwYXJhbWV0ZXJz
LgogICAgIC8vIEZJWE1FOiBleHBvc2Ugc29tZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgb25lcyAo
c3VjaCBhcyB0aHJlc2hvbGQsIGF0dGFjaywgcmVsZWFzZSkKICAgICAvLyBhcyBEeW5hbWljc0Nv
bXByZXNzb3JOb2RlIGF0dHJpYnV0ZXMuCiAgICAgZmxvYXQgbV9wYXJhbWV0ZXJzW1BhcmFtTGFz
dF07CiAgICAgdm9pZCBpbml0aWFsaXplUGFyYW1ldGVycygpOwogCi0gICAgYm9vbCBtX2lzU3Rl
cmVvOwogICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKIAogICAgIC8vIEVtcGhhc2lzIGZpbHRlciBj
b250cm9scy4KQEAgLTg4LDExICs4OSwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgZmxvYXQgbV9sYXN0
QW5jaG9yOwogICAgIGZsb2F0IG1fbGFzdEZpbHRlclN0YWdlR2FpbjsKIAotICAgIC8vIEVtcGhh
c2lzIGZpbHRlcnMuCi0gICAgWmVyb1BvbGUgbV9wcmVGaWx0ZXJbNF07Ci0gICAgWmVyb1BvbGUg
bV9wcmVGaWx0ZXJSWzRdOwotICAgIFplcm9Qb2xlIG1fcG9zdEZpbHRlcls0XTsKLSAgICBaZXJv
UG9sZSBtX3Bvc3RGaWx0ZXJSWzRdOworICAgIHR5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgWmVy
b1BvbGUgZmlsdGVyc1s0XTsKKyAgICB9IFplcm9Qb2xlRmlsdGVyUGFjazQ7CisKKyAgICAvLyBQ
ZXItY2hhbm5lbCBlbXBoYXNpcyBmaWx0ZXJzLgorICAgIFZlY3RvcjxPd25QdHI8WmVyb1BvbGVG
aWx0ZXJQYWNrND4gPiBtX3ByZUZpbHRlclBhY2tzOworICAgIFZlY3RvcjxPd25QdHI8WmVyb1Bv
bGVGaWx0ZXJQYWNrND4gPiBtX3Bvc3RGaWx0ZXJQYWNrczsKIAogICAgIHZvaWQgc2V0RW1waGFz
aXNTdGFnZVBhcmFtZXRlcnModW5zaWduZWQgc3RhZ2VJbmRleCwgZmxvYXQgZ2FpbiwgZmxvYXQg
bm9ybWFsaXplZEZyZXF1ZW5jeSAvKiAwIC0+IDEgKi8pOwogICAgIHZvaWQgc2V0RW1waGFzaXNQ
YXJhbWV0ZXJzKGZsb2F0IGdhaW4sIGZsb2F0IGFuY2hvckZyZXEsIGZsb2F0IGZpbHRlclN0YWdl
UmF0aW8pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1p
Y3NDb21wcmVzc29yS2VybmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5
bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAKaW5kZXggYTMyMmEzMzAyNTk2MGM4OWNiNmJlMDZj
MjViODc3Mzc2ZGE5ZTM2Yy4uM2U5NDNkMTIwNzU3YWE3ZTlmZjE2ZWI1NDUwN2JjYWQ1NWM0Mzhi
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21w
cmVzc29yS2VybmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5h
bWljc0NvbXByZXNzb3JLZXJuZWwuY3BwCkBAIC01MiwyMCArNTIsMzAgQEAgc3RhdGljIGZsb2F0
IHNhdHVyYXRlKGZsb2F0IHgsIGZsb2F0IGspCiAgICAgcmV0dXJuIDEgLSBleHAoLWsgKiB4KTsK
IH0KIAotRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwo
ZmxvYXQgc2FtcGxlUmF0ZSkKK0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6RHluYW1pY3NDb21w
cmVzc29yS2VybmVsKGZsb2F0IHNhbXBsZVJhdGUsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMp
CiAgICAgOiBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKICAgICAsIG1fbGFzdFByZURlbGF5RnJh
bWVzKERlZmF1bHRQcmVEZWxheUZyYW1lcykKLSAgICAsIG1fcHJlRGVsYXlCdWZmZXJMKE1heFBy
ZURlbGF5RnJhbWVzKQotICAgICwgbV9wcmVEZWxheUJ1ZmZlclIoTWF4UHJlRGVsYXlGcmFtZXMp
CiAgICAgLCBtX3ByZURlbGF5UmVhZEluZGV4KDApCiAgICAgLCBtX3ByZURlbGF5V3JpdGVJbmRl
eChEZWZhdWx0UHJlRGVsYXlGcmFtZXMpCiB7CisgICAgc2V0TnVtYmVyT2ZDaGFubmVscyhudW1i
ZXJPZkNoYW5uZWxzKTsKKwogICAgIC8vIEluaXRpYWxpemVzIG1vc3QgbWVtYmVyIHZhcmlhYmxl
cwogICAgIHJlc2V0KCk7CiAgICAgCiAgICAgbV9tZXRlcmluZ1JlbGVhc2VLID0gZGlzY3JldGVU
aW1lQ29uc3RhbnRGb3JTYW1wbGVSYXRlKG1ldGVyaW5nUmVsZWFzZVRpbWVDb25zdGFudCwgc2Ft
cGxlUmF0ZSk7CiB9CiAKK3ZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpzZXROdW1iZXJP
ZkNoYW5uZWxzKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpCit7CisgICAgaWYgKG1fcHJlRGVs
YXlCdWZmZXJzLnNpemUoKSA9PSBudW1iZXJPZkNoYW5uZWxzKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3ByZURlbGF5QnVmZmVycy5jbGVhcigpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpCisgICAgICAgIG1fcHJlRGVsYXlCdWZmZXJzLmFw
cGVuZChhZG9wdFB0cihuZXcgQXVkaW9GbG9hdEFycmF5KE1heFByZURlbGF5RnJhbWVzKSkpOwor
fQorCiB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0UHJlRGVsYXlUaW1lKGZsb2F0
IHByZURlbGF5VGltZSkKIHsKICAgICAvLyBSZS1jb25maWd1cmUgbG9vay1haGVhZCBzZWN0aW9u
IHByZS1kZWxheSBpZiBkZWxheSB0aW1lIGhhcyBjaGFuZ2VkLgpAQCAtNzUsMTcgKzg1LDE3IEBA
IHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpzZXRQcmVEZWxheVRpbWUoZmxvYXQgcHJl
RGVsYXlUaW1lKQogICAgICAgICAKICAgICBpZiAobV9sYXN0UHJlRGVsYXlGcmFtZXMgIT0gcHJl
RGVsYXlGcmFtZXMpIHsKICAgICAgICAgbV9sYXN0UHJlRGVsYXlGcmFtZXMgPSBwcmVEZWxheUZy
YW1lczsKLSAgICAgICAgbV9wcmVEZWxheUJ1ZmZlckwuemVybygpOwotICAgICAgICBtX3ByZURl
bGF5QnVmZmVyUi56ZXJvKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3By
ZURlbGF5QnVmZmVycy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fcHJlRGVsYXlCdWZmZXJz
W2ldLT56ZXJvKCk7CisKICAgICAgICAgbV9wcmVEZWxheVJlYWRJbmRleCA9IDA7CiAgICAgICAg
IG1fcHJlRGVsYXlXcml0ZUluZGV4ID0gcHJlRGVsYXlGcmFtZXM7CiAgICAgfQogfQogCi12b2lk
IER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlTCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBkZXN0aW5hdGlv
bkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCog
c291cmNlUiwgLyogc3RlcmVvLWxpbmtlZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uUiwKK3ZvaWQgRHluYW1pY3NDb21wcmVzc29y
S2VybmVsOjpwcm9jZXNzKGZsb2F0KiBzb3VyY2VDaGFubmVsc1tdLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uQ2hhbm5lbHNbXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ2hh
bm5lbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBm
cmFtZXNUb1Byb2Nlc3MsCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZsb2F0IGRiVGhyZXNob2xkLApAQCAtMTAyLDcgKzExMiw4IEBAIHZvaWQgRHluYW1pY3NDb21w
cmVzc29yS2VybmVsOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2VMLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcmVsZWFzZVpvbmU0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiB7Ci0gICAgYm9vbCBpc1N0ZXJlbyA9IGRl
c3RpbmF0aW9uUjsKKyAgICBBU1NFUlQobV9wcmVEZWxheUJ1ZmZlcnMuc2l6ZSgpID09IG51bWJl
ck9mQ2hhbm5lbHMpOworCiAgICAgZmxvYXQgc2FtcGxlUmF0ZSA9IHRoaXMtPnNhbXBsZVJhdGUo
KTsKIAogICAgIGZsb2F0IGRyeU1peCA9IDEgLSBlZmZlY3RCbGVuZDsKQEAgLTE2NCw2ICsxNzUs
NyBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9hdCog
c291cmNlTCwKIAogICAgIGNvbnN0IGludCBuRGl2aXNpb25zID0gZnJhbWVzVG9Qcm9jZXNzIC8g
bkRpdmlzaW9uRnJhbWVzOwogCisgICAgdW5zaWduZWQgZnJhbWVJbmRleCA9IDA7CiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBuRGl2aXNpb25zOyArK2kpIHsKICAgICAgICAgLy8gfn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAgICAgICAgIC8vIENhbGN1bGF0ZSBkZXNpcmVkIGdh
aW4KQEAgLTI0Nyw4ICsyNTksNiBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cHJv
Y2Vzcyhjb25zdCBmbG9hdCogc291cmNlTCwKICAgICAgICAgLy8gfn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+CiAKICAgICAgICAgewotICAgICAgICAgICAgZmxvYXQqIGRlbGF5QnVm
ZmVyTCA9IG1fcHJlRGVsYXlCdWZmZXJMLmRhdGEoKTsKLSAgICAgICAgICAgIGZsb2F0KiBkZWxh
eUJ1ZmZlclIgPSBtX3ByZURlbGF5QnVmZmVyUi5kYXRhKCk7CiAgICAgICAgICAgICBpbnQgcHJl
RGVsYXlSZWFkSW5kZXggPSBtX3ByZURlbGF5UmVhZEluZGV4OwogICAgICAgICAgICAgaW50IHBy
ZURlbGF5V3JpdGVJbmRleCA9IG1fcHJlRGVsYXlXcml0ZUluZGV4OwogICAgICAgICAgICAgZmxv
YXQgZGV0ZWN0b3JBdmVyYWdlID0gbV9kZXRlY3RvckF2ZXJhZ2U7CkBAIC0yNTYsMzIgKzI2Niwx
OSBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9hdCog
c291cmNlTCwKIAogICAgICAgICAgICAgaW50IGxvb3BGcmFtZXMgPSBuRGl2aXNpb25GcmFtZXM7
CiAgICAgICAgICAgICB3aGlsZSAobG9vcEZyYW1lcy0tKSB7Ci0gICAgICAgICAgICAgICAgZmxv
YXQgY29tcHJlc3NvcklucHV0OwotICAgICAgICAgICAgICAgIGZsb2F0IGlucHV0TDsKLSAgICAg
ICAgICAgICAgICBmbG9hdCBpbnB1dFIgPSAwOworICAgICAgICAgICAgICAgIGZsb2F0IGNvbXBy
ZXNzb3JJbnB1dCA9IDA7CiAKICAgICAgICAgICAgICAgICAvLyBQcmVkZWxheSBzaWduYWwsIGNv
bXB1dGluZyBjb21wcmVzc2lvbiBhbW91bnQgZnJvbSB1bi1kZWxheWVkIHZlcnNpb24uCi0gICAg
ICAgICAgICAgICAgaWYgKGlzU3RlcmVvKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IHVu
ZGVsYXllZEwgPSAqc291cmNlTCsrOwotICAgICAgICAgICAgICAgICAgICBmbG9hdCB1bmRlbGF5
ZWRSID0gKnNvdXJjZVIrKzsKLQotICAgICAgICAgICAgICAgICAgICBjb21wcmVzc29ySW5wdXQg
PSAwLjVmICogKHVuZGVsYXllZEwgKyB1bmRlbGF5ZWRSKTsKLQotICAgICAgICAgICAgICAgICAg
ICBpbnB1dEwgPSBkZWxheUJ1ZmZlckxbcHJlRGVsYXlSZWFkSW5kZXhdOwotICAgICAgICAgICAg
ICAgICAgICBpbnB1dFIgPSBkZWxheUJ1ZmZlclJbcHJlRGVsYXlSZWFkSW5kZXhdOwotCi0gICAg
ICAgICAgICAgICAgICAgIGRlbGF5QnVmZmVyTFtwcmVEZWxheVdyaXRlSW5kZXhdID0gdW5kZWxh
eWVkTDsKLSAgICAgICAgICAgICAgICAgICAgZGVsYXlCdWZmZXJSW3ByZURlbGF5V3JpdGVJbmRl
eF0gPSB1bmRlbGF5ZWRSOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbXByZXNzb3JJbnB1dCA9ICpzb3VyY2VMKys7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaW5wdXRMID0gZGVsYXlCdWZmZXJMW3ByZURlbGF5UmVhZEluZGV4XTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVsYXlCdWZmZXJMW3ByZURlbGF5V3JpdGVJbmRleF0gPSBjb21wcmVzc29ySW5w
dXQ7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hh
bm5lbHM7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBmbG9hdCogZGVsYXlCdWZmZXIgPSBt
X3ByZURlbGF5QnVmZmVyc1tpXS0+ZGF0YSgpOworICAgICAgICAgICAgICAgICAgICBmbG9hdCB1
bmRlbGF5ZWRTb3VyY2UgPSBzb3VyY2VDaGFubmVsc1tpXVtmcmFtZUluZGV4XTsKKyAgICAgICAg
ICAgICAgICAgICAgZGVsYXlCdWZmZXJbcHJlRGVsYXlXcml0ZUluZGV4XSA9IHVuZGVsYXllZFNv
dXJjZTsKKworICAgICAgICAgICAgICAgICAgICBmbG9hdCBhYnNVbmRlbGF5ZWRTb3VyY2UgPSB1
bmRlbGF5ZWRTb3VyY2UgPiAwID8gdW5kZWxheWVkU291cmNlIDogLXVuZGVsYXllZFNvdXJjZTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXByZXNzb3JJbnB1dCA8IGFic1VuZGVsYXllZFNv
dXJjZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb3JJbnB1dCA9IGFic1VuZGVs
YXllZFNvdXJjZTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBwcmVEZWxh
eVJlYWRJbmRleCA9IChwcmVEZWxheVJlYWRJbmRleCArIDEpICYgTWF4UHJlRGVsYXlGcmFtZXNN
YXNrOwotICAgICAgICAgICAgICAgIHByZURlbGF5V3JpdGVJbmRleCA9IChwcmVEZWxheVdyaXRl
SW5kZXggKyAxKSAmIE1heFByZURlbGF5RnJhbWVzTWFzazsKLQogICAgICAgICAgICAgICAgIC8v
IENhbGN1bGF0ZSBzaGFwZWQgcG93ZXIgb24gdW5kZWxheWVkIGlucHV0LgogCiAgICAgICAgICAg
ICAgICAgZmxvYXQgc2NhbGVkSW5wdXQgPSBjb21wcmVzc29ySW5wdXQ7CkBAIC0zMzcsMTcgKzMz
NCwxNCBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9h
dCogc291cmNlTCwKICAgICAgICAgICAgICAgICAgICAgbV9tZXRlcmluZ0dhaW4gKz0gKGRiUmVh
bEdhaW4gLSBtX21ldGVyaW5nR2FpbikgKiBtX21ldGVyaW5nUmVsZWFzZUs7CiAKICAgICAgICAg
ICAgICAgICAvLyBBcHBseSBmaW5hbCBnYWluLgotICAgICAgICAgICAgICAgIGlmIChpc1N0ZXJl
bykgewotICAgICAgICAgICAgICAgICAgICBmbG9hdCBvdXRwdXRMID0gaW5wdXRMOwotICAgICAg
ICAgICAgICAgICAgICBmbG9hdCBvdXRwdXRSID0gaW5wdXRSOwotCi0gICAgICAgICAgICAgICAg
ICAgIG91dHB1dEwgKj0gdG90YWxHYWluOwotICAgICAgICAgICAgICAgICAgICBvdXRwdXRSICo9
IHRvdGFsR2FpbjsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
YmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBkZWxheUJ1
ZmZlciA9IG1fcHJlRGVsYXlCdWZmZXJzW2ldLT5kYXRhKCk7CisgICAgICAgICAgICAgICAgICAg
IGRlc3RpbmF0aW9uQ2hhbm5lbHNbaV1bZnJhbWVJbmRleF0gPSBkZWxheUJ1ZmZlcltwcmVEZWxh
eVJlYWRJbmRleF0gKiB0b3RhbEdhaW47CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IG91dHB1dEw7Ci0gICAgICAgICAgICAgICAgICAg
ICpkZXN0aW5hdGlvblIrKyA9IG91dHB1dFI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IGlucHV0TCAqIHRvdGFsR2FpbjsKKyAg
ICAgICAgICAgICAgICBmcmFtZUluZGV4Kys7CisgICAgICAgICAgICAgICAgcHJlRGVsYXlSZWFk
SW5kZXggPSAocHJlRGVsYXlSZWFkSW5kZXggKyAxKSAmIE1heFByZURlbGF5RnJhbWVzTWFzazsK
KyAgICAgICAgICAgICAgICBwcmVEZWxheVdyaXRlSW5kZXggPSAocHJlRGVsYXlXcml0ZUluZGV4
ICsgMSkgJiBNYXhQcmVEZWxheUZyYW1lc01hc2s7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIC8vIExvY2FscyBiYWNrIHRvIG1lbWJlciB2YXJpYWJsZXMuCkBAIC0zNjYsOCArMzYwLDkg
QEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnJlc2V0KCkKICAgICBtX21ldGVyaW5n
R2FpbiA9IDE7CiAKICAgICAvLyBQcmVkZWxheSBzZWN0aW9uLgotICAgIG1fcHJlRGVsYXlCdWZm
ZXJMLnplcm8oKTsKLSAgICBtX3ByZURlbGF5QnVmZmVyUi56ZXJvKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fcHJlRGVsYXlCdWZmZXJzLnNpemUoKTsgKytpKQorICAgICAgICBt
X3ByZURlbGF5QnVmZmVyc1tpXS0+emVybygpOworCiAgICAgbV9wcmVEZWxheVJlYWRJbmRleCA9
IDA7CiAgICAgbV9wcmVEZWxheVdyaXRlSW5kZXggPSBEZWZhdWx0UHJlRGVsYXlGcmFtZXM7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJl
c3Nvcktlcm5lbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21w
cmVzc29yS2VybmVsLmgKaW5kZXggY2YzMTliMzc4YWRlYjU5MDYyOTUzZGVhYjA5MmUzMzM5YzZm
Njg4MC4uZGE4ZTRjOGJlZTljNWQxNzlhODg0NDA3MDVlMjJjM2Y2MTk5ZGEyZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29y
S2VybmVsLmgKQEAgLTMxLDE3ICszMSwyMSBAQAogCiAjaW5jbHVkZSAiQXVkaW9BcnJheS5oIgog
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRHluYW1pY3NDb21wcmVzc29yS2VybmVsIHsK
IHB1YmxpYzoKLSAgICBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwoZmxvYXQgc2FtcGxlUmF0ZSk7
CisgICAgRHluYW1pY3NDb21wcmVzc29yS2VybmVsKGZsb2F0IHNhbXBsZVJhdGUsIHVuc2lnbmVk
IG51bWJlck9mQ2hhbm5lbHMpOworCisgICAgdm9pZCBzZXROdW1iZXJPZkNoYW5uZWxzKHVuc2ln
bmVkKTsKIAogICAgIC8vIFBlcmZvcm1zIHN0ZXJlby1saW5rZWQgY29tcHJlc3Npb24uCi0gICAg
dm9pZCBwcm9jZXNzKGNvbnN0IGZsb2F0ICpzb3VyY2VMLAotICAgICAgICAgICAgICAgICBmbG9h
dCAqZGVzdGluYXRpb25MLAotICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCAqc291cmNlUiwK
LSAgICAgICAgICAgICAgICAgZmxvYXQgKmRlc3RpbmF0aW9uUiwKKyAgICB2b2lkIHByb2Nlc3Mo
ZmxvYXQqIHNvdXJjZUNoYW5uZWxzW10sCisgICAgICAgICAgICAgICAgIGZsb2F0KiBkZXN0aW5h
dGlvbkNoYW5uZWxzW10sCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5l
bHMsCiAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lc1RvUHJvY2VzcywKIAogICAgICAg
ICAgICAgICAgICBmbG9hdCBkYlRocmVzaG9sZCwKQEAgLTY2LDcgKzcwLDcgQEAgcHVibGljOgog
CiBwcm90ZWN0ZWQ6CiAgICAgZmxvYXQgbV9zYW1wbGVSYXRlOwotICAgIAorCiAgICAgZmxvYXQg
bV9kZXRlY3RvckF2ZXJhZ2U7CiAgICAgZmxvYXQgbV9jb21wcmVzc29yR2FpbjsKIApAQCAtODEs
OCArODUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdW5zaWduZWQgbV9sYXN0UHJlRGVsYXlGcmFtZXM7
CiAgICAgdm9pZCBzZXRQcmVEZWxheVRpbWUoZmxvYXQpOwogCi0gICAgQXVkaW9GbG9hdEFycmF5
IG1fcHJlRGVsYXlCdWZmZXJMOwotICAgIEF1ZGlvRmxvYXRBcnJheSBtX3ByZURlbGF5QnVmZmVy
UjsKKyAgICBWZWN0b3I8T3duUHRyPEF1ZGlvRmxvYXRBcnJheT4gPiBtX3ByZURlbGF5QnVmZmVy
czsKICAgICBpbnQgbV9wcmVEZWxheVJlYWRJbmRleDsKICAgICBpbnQgbV9wcmVEZWxheVdyaXRl
SW5kZXg7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29t
cHJlc3Nvck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVz
c29yTm9kZS5jcHAKaW5kZXggZWE4YjU4OTIyMzU2YWExMzY1MTMyYWVmMzFmYWFmNjAzZjc0NTQy
Ny4uMjYzNzU1NTk1Y2UzZDhlNTk5ODdmZDgwMmJhNzkyOWE4OTU4NjNmZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAKQEAgLTMz
LDEzICszMywxNiBAQAogI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgogI2luY2x1ZGUgIkR5
bmFtaWNzQ29tcHJlc3Nvci5oIgogCisvLyBTZXQgb3V0cHV0IHRvIHN0ZXJlbyBieSBkZWZhdWx0
Lgorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHROdW1iZXJPZk91dHB1dENoYW5uZWxzID0g
MjsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjpEeW5h
bWljc0NvbXByZXNzb3JOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0
ZSkKICAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQogewogICAgIGFkZElucHV0
KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOwotICAgIGFkZE91dHB1dChhZG9w
dFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDIpKSk7CisgICAgYWRkT3V0cHV0KGFkb3B0
UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgZGVmYXVsdE51bWJlck9mT3V0cHV0Q2hhbm5l
bHMpKSk7CiAgICAgCiAgICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVEeW5hbWljc0NvbXByZXNzb3Ip
OwogICAgIApAQCAtNzAsNyArNzMsNyBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6Omlu
aXRpYWxpemUoKQogICAgICAgICByZXR1cm47CiAKICAgICBBdWRpb05vZGU6OmluaXRpYWxpemUo
KTsgICAgCi0gICAgbV9keW5hbWljc0NvbXByZXNzb3IgPSBhZG9wdFB0cihuZXcgRHluYW1pY3ND
b21wcmVzc29yKHRydWUsIHNhbXBsZVJhdGUoKSkpOworICAgIG1fZHluYW1pY3NDb21wcmVzc29y
ID0gYWRvcHRQdHIobmV3IER5bmFtaWNzQ29tcHJlc3NvcihzYW1wbGVSYXRlKCksIGRlZmF1bHRO
dW1iZXJPZk91dHB1dENoYW5uZWxzKSk7CiB9CiAKIHZvaWQgRHluYW1pY3NDb21wcmVzc29yTm9k
ZTo6dW5pbml0aWFsaXplKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127876</attachid>
            <date>2012-02-20 17:42:03 -0800</date>
            <delta_ts>2012-02-21 23:25:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77856-20120221094655.patch</filename>
            <type>text/plain</type>
            <size>23482</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTE4NmYxNTI0YjNhM2Zk
M2U4MzI4MjE0NjVjN2QyODU1MTE3ZjE0NC4uZjMzYmUwMjM1ZDEwMDk0NmI1ZDc3MGUyMjFjNzI5
ZmZhMmNlMTA3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTAyLTIwICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBIYXZlIHRoZSBEeW5h
bWljc0NvbXByZXNzb3JOb2RlIHN1cHBvcnQgbXVsdGktY2hhbm5lbCBkYXRhCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzg1NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRHlu
YW1pY3NDb21wcmVzc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nv
cjo6RHluYW1pY3NDb21wcmVzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJl
c3Nvcjo6c2V0RW1waGFzaXNTdGFnZVBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RHlu
YW1pY3NDb21wcmVzc29yOjpwcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29t
cHJlc3Nvcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yOjpz
ZXROdW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5oOgorICAgICAgICAoRHluYW1pY3NDb21wcmVz
c29yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpEeW5hbWlj
c0NvbXByZXNzb3JLZXJuZWwpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29y
S2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpzZXRQcmVEZWxheVRpbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cmVzZXQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oOgorICAgICAgICAo
RHluYW1pY3NDb21wcmVzc29yS2VybmVsKToKKyAgICAgICAgKiB3ZWJhdWRpby9EeW5hbWljc0Nv
bXByZXNzb3JOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvck5v
ZGU6OkR5bmFtaWNzQ29tcHJlc3Nvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3ND
b21wcmVzc29yTm9kZTo6aW5pdGlhbGl6ZSk6CisKIDIwMTItMDItMjAgIFl1dGEgS2l0YW11cmEg
IDx5dXRha0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjEwODI2My4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFt
aWNzQ29tcHJlc3Nvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWlj
c0NvbXByZXNzb3IuY3BwCmluZGV4IGE1NTIwNTcwNWQ5NTEwYmYyMGQ5ZGIzNTQ4NzkzOTY1ZWUw
MmVlMWQuLjQ1Njg0MDdiMjRlYzAwMDFlOThiMDc4ODAwZjhhOGNmYWNlM2JlN2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmNw
cApAQCAtNDAsMTYgKzQwLDIwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEF1ZGlvVXRpbGl0aWVzOwogICAgIAotRHluYW1pY3NDb21wcmVzc29yOjpEeW5hbWljc0Nv
bXByZXNzb3IoYm9vbCBpc1N0ZXJlbywgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IG1faXNTdGVy
ZW8oaXNTdGVyZW8pCi0gICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKLSAgICAsIG1fY29t
cHJlc3NvcihzYW1wbGVSYXRlKQorRHluYW1pY3NDb21wcmVzc29yOjpEeW5hbWljc0NvbXByZXNz
b3IoZmxvYXQgc2FtcGxlUmF0ZSwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscykKKyAgICA6IG1f
bnVtYmVyT2ZDaGFubmVscyhudW1iZXJPZkNoYW5uZWxzKQorICAgICwgbV9jb21wcmVzc29yKHNh
bXBsZVJhdGUsIG51bWJlck9mQ2hhbm5lbHMpCiB7CiAgICAgLy8gVW5pbml0aWFsaXplZCBzdGF0
ZSAtIGZvciBwYXJhbWV0ZXIgcmVjYWxjdWxhdGlvbi4KICAgICBtX2xhc3RGaWx0ZXJTdGFnZVJh
dGlvID0gLTE7CiAgICAgbV9sYXN0QW5jaG9yID0gLTE7CiAgICAgbV9sYXN0RmlsdGVyU3RhZ2VH
YWluID0gLTE7CiAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVs
czsgKytpKSB7CisgICAgICAgIG1fcHJlRmlsdGVyUGFja3MuYXBwZW5kKGFkb3B0UHRyKG5ldyBa
ZXJvUG9sZUZpbHRlclBhY2s0KCkpKTsKKyAgICAgICAgbV9wb3N0RmlsdGVyUGFja3MuYXBwZW5k
KGFkb3B0UHRyKG5ldyBaZXJvUG9sZUZpbHRlclBhY2s0KCkpKTsKKyAgICB9CisKICAgICBpbml0
aWFsaXplUGFyYW1ldGVycygpOwogfQogCkBAIC05MywxOCArOTcsMjAgQEAgdm9pZCBEeW5hbWlj
c0NvbXByZXNzb3I6OnNldEVtcGhhc2lzU3RhZ2VQYXJhbWV0ZXJzKHVuc2lnbmVkIHN0YWdlSW5k
ZXgsIGZsb2F0IGcKICAgICBmbG9hdCByMSA9IGV4cGYoLWYxICogcGlGbG9hdCk7CiAgICAgZmxv
YXQgcjIgPSBleHBmKC1mMiAqIHBpRmxvYXQpOwogCi0gICAgLy8gU2V0IHByZS1maWx0ZXIgemVy
byBhbmQgcG9sZSB0byBjcmVhdGUgYW4gZW1waGFzaXMgZmlsdGVyLgotICAgIG1fcHJlRmlsdGVy
W3N0YWdlSW5kZXhdLnNldFplcm8ocjEpOwotICAgIG1fcHJlRmlsdGVyW3N0YWdlSW5kZXhdLnNl
dFBvbGUocjIpOwotICAgIG1fcHJlRmlsdGVyUltzdGFnZUluZGV4XS5zZXRaZXJvKHIxKTsKLSAg
ICBtX3ByZUZpbHRlclJbc3RhZ2VJbmRleF0uc2V0UG9sZShyMik7Ci0KLSAgICAvLyBTZXQgcG9z
dC1maWx0ZXIgd2l0aCB6ZXJvIGFuZCBwb2xlIHJldmVyc2VkIHRvIGNyZWF0ZSB0aGUgZGUtZW1w
aGFzaXMgZmlsdGVyLgotICAgIC8vIElmIHRoZXJlIHdlcmUgbm8gY29tcHJlc3NvciBrZXJuZWwg
aW4gYmV0d2VlbiwgdGhleSB3b3VsZCBjYW5jZWwgZWFjaCBvdGhlciBvdXQgKGFsbHBhc3MgZmls
dGVyKS4KLSAgICBtX3Bvc3RGaWx0ZXJbc3RhZ2VJbmRleF0uc2V0WmVybyhyMik7Ci0gICAgbV9w
b3N0RmlsdGVyW3N0YWdlSW5kZXhdLnNldFBvbGUocjEpOwotICAgIG1fcG9zdEZpbHRlclJbc3Rh
Z2VJbmRleF0uc2V0WmVybyhyMik7Ci0gICAgbV9wb3N0RmlsdGVyUltzdGFnZUluZGV4XS5zZXRQ
b2xlKHIxKTsKKyAgICBBU1NFUlQobV9udW1iZXJPZkNoYW5uZWxzID09IG1fcHJlRmlsdGVyUGFj
a3Muc2l6ZSgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX251bWJlck9mQ2hh
bm5lbHM7ICsraSkgeworICAgICAgICAvLyBTZXQgcHJlLWZpbHRlciB6ZXJvIGFuZCBwb2xlIHRv
IGNyZWF0ZSBhbiBlbXBoYXNpcyBmaWx0ZXIuCisgICAgICAgIFplcm9Qb2xlJiBwcmVGaWx0ZXIg
PSBtX3ByZUZpbHRlclBhY2tzW2ldLT5maWx0ZXJzW3N0YWdlSW5kZXhdOworICAgICAgICBwcmVG
aWx0ZXIuc2V0WmVybyhyMSk7CisgICAgICAgIHByZUZpbHRlci5zZXRQb2xlKHIyKTsKKworICAg
ICAgICAvLyBTZXQgcG9zdC1maWx0ZXIgd2l0aCB6ZXJvIGFuZCBwb2xlIHJldmVyc2VkIHRvIGNy
ZWF0ZSB0aGUgZGUtZW1waGFzaXMgZmlsdGVyLgorICAgICAgICAvLyBJZiB0aGVyZSB3ZXJlIG5v
IGNvbXByZXNzb3Iga2VybmVsIGluIGJldHdlZW4sIHRoZXkgd291bGQgY2FuY2VsIGVhY2ggb3Ro
ZXIgb3V0IChhbGxwYXNzIGZpbHRlcikuCisgICAgICAgIFplcm9Qb2xlJiBwb3N0RmlsdGVyID0g
bV9wb3N0RmlsdGVyUGFja3NbaV0tPmZpbHRlcnNbc3RhZ2VJbmRleF07CisgICAgICAgIHBvc3RG
aWx0ZXIuc2V0WmVybyhyMik7CisgICAgICAgIHBvc3RGaWx0ZXIuc2V0UG9sZShyMSk7CisgICAg
fQogfQogCiB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6c2V0RW1waGFzaXNQYXJhbWV0ZXJzKGZs
b2F0IGdhaW4sIGZsb2F0IGFuY2hvckZyZXEsIGZsb2F0IGZpbHRlclN0YWdlUmF0aW8pCkBAIC0x
MTcsMTggKzEyMyw0NSBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6c2V0RW1waGFzaXNQYXJh
bWV0ZXJzKGZsb2F0IGdhaW4sIGZsb2F0IGFuY2hvckZyZXEsIGZsbwogCiB2b2lkIER5bmFtaWNz
Q29tcHJlc3Nvcjo6cHJvY2Vzcyhjb25zdCBBdWRpb0J1cyogc291cmNlQnVzLCBBdWRpb0J1cyog
ZGVzdGluYXRpb25CdXMsIHVuc2lnbmVkIGZyYW1lc1RvUHJvY2VzcykKIHsKLSAgICBjb25zdCBm
bG9hdCogc291cmNlTCA9IHNvdXJjZUJ1cy0+Y2hhbm5lbCgwKS0+ZGF0YSgpOwotICAgIGNvbnN0
IGZsb2F0KiBzb3VyY2VSOworICAgIC8vIFRob3VnaCBudW1iZXJPZkNoYW5uZWxzIGlzIHJldHJp
dmVkIGZyb20gZGVzdGluYXRpb25CdXMsIHdlIHN0aWxsIG5hbWUgaXQgbnVtYmVyT2ZDaGFubmVs
cyBpbnN0ZWFkIG9mIG51bWJlck9mRGVzdGluYXRpb25DaGFubmVscy4KKyAgICAvLyBJdCdzIGJl
Y2F1c2Ugd2UgaW50ZXJuYWxseSBtYXRjaCBzb3VyY2VDaGFubmVscydzIHNpemUgdG8gZGVzdGlu
YXRpb25CdXMgYnkgY2hhbm5lbCB1cC9kb3duIG1peC4gVGh1cyB3ZSBuZWVkIG51bWJlck9mQ2hh
bm5lbHMKKyAgICAvLyB0byBkbyB0aGUgbG9vcCB3b3JrIGZvciBib3RoIHNvdXJjZUNoYW5uZWxz
IGFuZCBkZXN0aW5hdGlvbkNoYW5uZWxzLgorCisgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVs
cyA9IGRlc3RpbmF0aW9uQnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7CisgICAgdW5zaWduZWQgbnVt
YmVyT2ZTb3VyY2VDaGFubmVscyA9IHNvdXJjZUJ1cy0+bnVtYmVyT2ZDaGFubmVscygpOwogCi0g
ICAgaWYgKHNvdXJjZUJ1cy0+bnVtYmVyT2ZDaGFubmVscygpID4gMSkKLSAgICAgICAgc291cmNl
UiA9IHNvdXJjZUJ1cy0+Y2hhbm5lbCgxKS0+ZGF0YSgpOwotICAgIGVsc2UKLSAgICAgICAgc291
cmNlUiA9IHNvdXJjZUw7CisgICAgQVNTRVJUKG51bWJlck9mU291cmNlQ2hhbm5lbHMpOwogCi0g
ICAgQVNTRVJUKGRlc3RpbmF0aW9uQnVzLT5udW1iZXJPZkNoYW5uZWxzKCkgPT0gMik7CisgICAg
aWYgKCFudW1iZXJPZlNvdXJjZUNoYW5uZWxzKSB7CisgICAgICAgIGRlc3RpbmF0aW9uQnVzLT56
ZXJvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBmbG9hdCogZGVzdGluYXRpb25M
ID0gZGVzdGluYXRpb25CdXMtPmNoYW5uZWwoMCktPm11dGFibGVEYXRhKCk7Ci0gICAgZmxvYXQq
IGRlc3RpbmF0aW9uUiA9IGRlc3RpbmF0aW9uQnVzLT5jaGFubmVsKDEpLT5tdXRhYmxlRGF0YSgp
OworICAgIGNvbnN0IGZsb2F0Kiogc291cmNlQ2hhbm5lbHMgPSBuZXcgY29uc3QgZmxvYXQqIFtu
dW1iZXJPZkNoYW5uZWxzXTsKKyAgICBmbG9hdCoqIGRlc3RpbmF0aW9uQ2hhbm5lbHMgPSBuZXcg
ZmxvYXQqIFtudW1iZXJPZkNoYW5uZWxzXTsKKworICAgIHN3aXRjaCAobnVtYmVyT2ZDaGFubmVs
cykgeworICAgIGNhc2UgMjogLy8gc3RlcmVvCisgICAgICAgIHNvdXJjZUNoYW5uZWxzWzBdID0g
c291cmNlQnVzLT5jaGFubmVsKDApLT5kYXRhKCk7CisKKyAgICAgICAgaWYgKG51bWJlck9mU291
cmNlQ2hhbm5lbHMgPiAxKQorICAgICAgICAgICAgc291cmNlQ2hhbm5lbHNbMV0gPSBzb3VyY2VC
dXMtPmNoYW5uZWwoMSktPmRhdGEoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgLy8gU2lt
cGx5IGR1cGxpY2F0ZSBtb25vIGNoYW5uZWwgaW5wdXQgZGF0YSB0byByaWdodCBjaGFubmVsIGZv
ciBzdGVyZW8gcHJvY2Vzc2luZy4KKyAgICAgICAgICAgIHNvdXJjZUNoYW5uZWxzWzFdID0gc291
cmNlQ2hhbm5lbHNbMF07CisKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
Ly8gRklYTUUgOiBzdXBwb3J0IG90aGVyIG51bWJlciBvZiBjaGFubmVscy4KKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGRlc3RpbmF0aW9uQnVzLT56ZXJvKCk7CisgICAg
ICAgIGRlbGV0ZSBbXSBzb3VyY2VDaGFubmVsczsKKyAgICAgICAgZGVsZXRlIFtdIGRlc3RpbmF0
aW9uQ2hhbm5lbHM7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKQorICAgICAgICBkZXN0aW5hdGlvbkNo
YW5uZWxzW2ldID0gZGVzdGluYXRpb25CdXMtPmNoYW5uZWwoaSktPm11dGFibGVEYXRhKCk7CiAK
ICAgICBmbG9hdCBmaWx0ZXJTdGFnZUdhaW4gPSBwYXJhbWV0ZXJWYWx1ZShQYXJhbUZpbHRlclN0
YWdlR2Fpbik7CiAgICAgZmxvYXQgZmlsdGVyU3RhZ2VSYXRpbyA9IHBhcmFtZXRlclZhbHVlKFBh
cmFtRmlsdGVyU3RhZ2VSYXRpbyk7CkBAIC0xNDQsMTYgKzE3NywxNSBAQCB2b2lkIER5bmFtaWNz
Q29tcHJlc3Nvcjo6cHJvY2Vzcyhjb25zdCBBdWRpb0J1cyogc291cmNlQnVzLCBBdWRpb0J1cyog
ZGVzdGluYXRpbwogCiAgICAgLy8gQXBwbHkgcHJlLWVtcGhhc2lzIGZpbHRlci4KICAgICAvLyBO
b3RlIHRoYXQgdGhlIGZpbmFsIHRocmVlIHN0YWdlcyBhcmUgY29tcHV0ZWQgaW4tcGxhY2UgaW4g
dGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KLSAgICBtX3ByZUZpbHRlclswXS5wcm9jZXNzKHNvdXJj
ZUwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICBtX3ByZUZpbHRlclsxXS5w
cm9jZXNzKGRlc3RpbmF0aW9uTCwgZGVzdGluYXRpb25MLCBmcmFtZXNUb1Byb2Nlc3MpOwotICAg
IG1fcHJlRmlsdGVyWzJdLnByb2Nlc3MoZGVzdGluYXRpb25MLCBkZXN0aW5hdGlvbkwsIGZyYW1l
c1RvUHJvY2Vzcyk7Ci0gICAgbV9wcmVGaWx0ZXJbM10ucHJvY2VzcyhkZXN0aW5hdGlvbkwsIGRl
c3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNzKTsKLQotICAgIGlmIChpc1N0ZXJlbygpKSB7Ci0g
ICAgICAgIG1fcHJlRmlsdGVyUlswXS5wcm9jZXNzKHNvdXJjZVIsIGRlc3RpbmF0aW9uUiwgZnJh
bWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgbV9wcmVGaWx0ZXJSWzFdLnByb2Nlc3MoZGVzdGluYXRp
b25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgICAgIG1fcHJlRmlsdGVy
UlsyXS5wcm9jZXNzKGRlc3RpbmF0aW9uUiwgZGVzdGluYXRpb25SLCBmcmFtZXNUb1Byb2Nlc3Mp
OwotICAgICAgICBtX3ByZUZpbHRlclJbM10ucHJvY2VzcyhkZXN0aW5hdGlvblIsIGRlc3RpbmF0
aW9uUiwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
YmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgIGNvbnN0IGZsb2F0KiBzb3VyY2VEYXRhID0g
c291cmNlQ2hhbm5lbHNbaV07CisgICAgICAgIGZsb2F0KiBkZXN0aW5hdGlvbkRhdGEgPSBkZXN0
aW5hdGlvbkNoYW5uZWxzW2ldOworICAgICAgICBaZXJvUG9sZSogcHJlRmlsdGVycyA9IG1fcHJl
RmlsdGVyUGFja3NbaV0tPmZpbHRlcnM7CisKKyAgICAgICAgcHJlRmlsdGVyc1swXS5wcm9jZXNz
KHNvdXJjZURhdGEsIGRlc3RpbmF0aW9uRGF0YSwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICAgICAg
cHJlRmlsdGVyc1sxXS5wcm9jZXNzKGRlc3RpbmF0aW9uRGF0YSwgZGVzdGluYXRpb25EYXRhLCBm
cmFtZXNUb1Byb2Nlc3MpOworICAgICAgICBwcmVGaWx0ZXJzWzJdLnByb2Nlc3MoZGVzdGluYXRp
b25EYXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIHByZUZp
bHRlcnNbM10ucHJvY2VzcyhkZXN0aW5hdGlvbkRhdGEsIGRlc3RpbmF0aW9uRGF0YSwgZnJhbWVz
VG9Qcm9jZXNzKTsKICAgICB9CiAKICAgICBmbG9hdCBkYlRocmVzaG9sZCA9IHBhcmFtZXRlclZh
bHVlKFBhcmFtVGhyZXNob2xkKTsKQEAgLTE3NywxMCArMjA5LDkgQEAgdm9pZCBEeW5hbWljc0Nv
bXByZXNzb3I6OnByb2Nlc3MoY29uc3QgQXVkaW9CdXMqIHNvdXJjZUJ1cywgQXVkaW9CdXMqIGRl
c3RpbmF0aW8KIAogICAgIC8vIEFwcGx5IGNvbXByZXNzaW9uIHRvIHRoZSBwcmUtZmlsdGVyZWQg
c2lnbmFsLgogICAgIC8vIFRoZSBwcm9jZXNzaW5nIGlzIHBlcmZvcm1lZCBpbiBwbGFjZS4KLSAg
ICBtX2NvbXByZXNzb3IucHJvY2VzcyhkZXN0aW5hdGlvbkwsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdGluYXRpb25MLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9u
UiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblIsCisgICAgbV9jb21wcmVz
c29yLnByb2Nlc3MoZGVzdGluYXRpb25DaGFubmVscywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0aW5hdGlvbkNoYW5uZWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9m
Q2hhbm5lbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzVG9Qcm9jZXNzLAogCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGJUaHJlc2hvbGQsCkBAIC0xOTgsMTcgKzIyOSwxOCBA
QCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6cHJvY2Vzcyhjb25zdCBBdWRpb0J1cyogc291cmNl
QnVzLCBBdWRpb0J1cyogZGVzdGluYXRpbwogICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAK
ICAgICAvLyBBcHBseSBkZS1lbXBoYXNpcyBmaWx0ZXIuCi0gICAgbV9wb3N0RmlsdGVyWzBdLnBy
b2Nlc3MoZGVzdGluYXRpb25MLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAg
bV9wb3N0RmlsdGVyWzFdLnByb2Nlc3MoZGVzdGluYXRpb25MLCBkZXN0aW5hdGlvbkwsIGZyYW1l
c1RvUHJvY2Vzcyk7Ci0gICAgbV9wb3N0RmlsdGVyWzJdLnByb2Nlc3MoZGVzdGluYXRpb25MLCBk
ZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgbV9wb3N0RmlsdGVyWzNdLnByb2Nl
c3MoZGVzdGluYXRpb25MLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0KLSAgICBp
ZiAoaXNTdGVyZW8oKSkgewotICAgICAgICBtX3Bvc3RGaWx0ZXJSWzBdLnByb2Nlc3MoZGVzdGlu
YXRpb25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgICAgIG1fcG9zdEZp
bHRlclJbMV0ucHJvY2VzcyhkZXN0aW5hdGlvblIsIGRlc3RpbmF0aW9uUiwgZnJhbWVzVG9Qcm9j
ZXNzKTsKLSAgICAgICAgbV9wb3N0RmlsdGVyUlsyXS5wcm9jZXNzKGRlc3RpbmF0aW9uUiwgZGVz
dGluYXRpb25SLCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgICAgICBtX3Bvc3RGaWx0ZXJSWzNdLnBy
b2Nlc3MoZGVzdGluYXRpb25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgeworICAgICAg
ICBmbG9hdCogZGVzdGluYXRpb25EYXRhID0gZGVzdGluYXRpb25DaGFubmVsc1tpXTsKKyAgICAg
ICAgWmVyb1BvbGUqIHBvc3RGaWx0ZXJzID0gbV9wb3N0RmlsdGVyUGFja3NbaV0tPmZpbHRlcnM7
CisKKyAgICAgICAgcG9zdEZpbHRlcnNbMF0ucHJvY2VzcyhkZXN0aW5hdGlvbkRhdGEsIGRlc3Rp
bmF0aW9uRGF0YSwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICAgICAgcG9zdEZpbHRlcnNbMV0ucHJv
Y2VzcyhkZXN0aW5hdGlvbkRhdGEsIGRlc3RpbmF0aW9uRGF0YSwgZnJhbWVzVG9Qcm9jZXNzKTsK
KyAgICAgICAgcG9zdEZpbHRlcnNbMl0ucHJvY2VzcyhkZXN0aW5hdGlvbkRhdGEsIGRlc3RpbmF0
aW9uRGF0YSwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICAgICAgcG9zdEZpbHRlcnNbM10ucHJvY2Vz
cyhkZXN0aW5hdGlvbkRhdGEsIGRlc3RpbmF0aW9uRGF0YSwgZnJhbWVzVG9Qcm9jZXNzKTsKICAg
ICB9CisKKyAgICBkZWxldGUgW10gc291cmNlQ2hhbm5lbHM7CisgICAgZGVsZXRlIFtdIGRlc3Rp
bmF0aW9uQ2hhbm5lbHM7CiB9CiAKIHZvaWQgRHluYW1pY3NDb21wcmVzc29yOjpyZXNldCgpCkBA
IC0yMTcsMTYgKzI0OSwzMiBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6cmVzZXQoKQogICAg
IG1fbGFzdEFuY2hvciA9IC0xOwogICAgIG1fbGFzdEZpbHRlclN0YWdlR2FpbiA9IC0xOwogCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDQ7ICsraSkgewotICAgICAgICBtX3ByZUZpbHRl
cltpXS5yZXNldCgpOwotICAgICAgICBtX3ByZUZpbHRlclJbaV0ucmVzZXQoKTsKLSAgICAgICAg
bV9wb3N0RmlsdGVyW2ldLnJlc2V0KCk7Ci0gICAgICAgIG1fcG9zdEZpbHRlclJbaV0ucmVzZXQo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgbV9udW1iZXJPZkNo
YW5uZWxzOyArK2NoYW5uZWwpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBzdGFnZUluZGV4ID0g
MDsgc3RhZ2VJbmRleCA8IDQ7ICsrc3RhZ2VJbmRleCkgeworICAgICAgICAgICAgbV9wcmVGaWx0
ZXJQYWNrc1tjaGFubmVsXS0+ZmlsdGVyc1tzdGFnZUluZGV4XS5yZXNldCgpOworICAgICAgICAg
ICAgbV9wb3N0RmlsdGVyUGFja3NbY2hhbm5lbF0tPmZpbHRlcnNbc3RhZ2VJbmRleF0ucmVzZXQo
KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIG1fY29tcHJlc3Nvci5yZXNldCgpOwogfQogCit2
b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6c2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCBudW1i
ZXJPZkNoYW5uZWxzKQoreworICAgIGlmIChtX3ByZUZpbHRlclBhY2tzLnNpemUoKSA9PSBudW1i
ZXJPZkNoYW5uZWxzKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByZUZpbHRlclBhY2tzLmNs
ZWFyKCk7CisgICAgbV9wb3N0RmlsdGVyUGFja3MuY2xlYXIoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgIG1fcHJlRmlsdGVy
UGFja3MuYXBwZW5kKGFkb3B0UHRyKG5ldyBaZXJvUG9sZUZpbHRlclBhY2s0KCkpKTsKKyAgICAg
ICAgbV9wb3N0RmlsdGVyUGFja3MuYXBwZW5kKGFkb3B0UHRyKG5ldyBaZXJvUG9sZUZpbHRlclBh
Y2s0KCkpKTsKKyAgICB9CisKKyAgICBtX2NvbXByZXNzb3Iuc2V0TnVtYmVyT2ZDaGFubmVscyhu
dW1iZXJPZkNoYW5uZWxzKTsKKyAgICBtX251bWJlck9mQ2hhbm5lbHMgPSBudW1iZXJPZkNoYW5u
ZWxzOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VC
X0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1p
Y3NDb21wcmVzc29yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0Nv
bXByZXNzb3IuaAppbmRleCBlMDExNWVlMjczZTQzMGY5YzI4ZjU2NGJmYzljYzQ0ZWJjNjZjNjll
Li43ZTFiYjlkMmZhOGZmZTEzNTM3MzlmZjJkZjdhODc4YzlkMWRmZGI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuaApAQCAtNjIs
MjUgKzYyLDI2IEBAIHB1YmxpYzoKICAgICAgICAgUGFyYW1MYXN0CiAgICAgfTsKIAotICAgIER5
bmFtaWNzQ29tcHJlc3Nvcihib29sIGlzU3RlcmVvLCBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICBE
eW5hbWljc0NvbXByZXNzb3IoZmxvYXQgc2FtcGxlUmF0ZSwgdW5zaWduZWQgbnVtYmVyT2ZDaGFu
bmVscyk7CiAKICAgICB2b2lkIHByb2Nlc3MoY29uc3QgQXVkaW9CdXMqIHNvdXJjZUJ1cywgQXVk
aW9CdXMqIGRlc3RpbmF0aW9uQnVzLCB1bnNpZ25lZCBmcmFtZXNUb1Byb2Nlc3MpOwogICAgIHZv
aWQgcmVzZXQoKTsKKyAgICB2b2lkIHNldE51bWJlck9mQ2hhbm5lbHModW5zaWduZWQpOwogCiAg
ICAgZmxvYXQgcGFyYW1ldGVyVmFsdWUodW5zaWduZWQgcGFyYW1ldGVySUQpOwogCi0gICAgYm9v
bCBpc1N0ZXJlbygpIGNvbnN0IHsgcmV0dXJuIG1faXNTdGVyZW87IH0KICAgICBmbG9hdCBzYW1w
bGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9CiAgICAgZmxvYXQgbnlxdWlz
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZSAvIDI7IH0KIAogcHJvdGVjdGVkOgorICAg
IHVuc2lnbmVkIG1fbnVtYmVyT2ZDaGFubmVsczsKKwogICAgIC8vIG1fcGFyYW1ldGVycyBob2xk
cyB0aGUgdHdlYWthYmxlIGNvbXByZXNzb3IgcGFyYW1ldGVycy4KICAgICAvLyBGSVhNRTogZXhw
b3NlIHNvbWUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IG9uZXMgKHN1Y2ggYXMgdGhyZXNob2xkLCBh
dHRhY2ssIHJlbGVhc2UpCiAgICAgLy8gYXMgRHluYW1pY3NDb21wcmVzc29yTm9kZSBhdHRyaWJ1
dGVzLgogICAgIGZsb2F0IG1fcGFyYW1ldGVyc1tQYXJhbUxhc3RdOwogICAgIHZvaWQgaW5pdGlh
bGl6ZVBhcmFtZXRlcnMoKTsKIAotICAgIGJvb2wgbV9pc1N0ZXJlbzsKICAgICBmbG9hdCBtX3Nh
bXBsZVJhdGU7CiAKICAgICAvLyBFbXBoYXNpcyBmaWx0ZXIgY29udHJvbHMuCkBAIC04OCwxMSAr
ODksMTMgQEAgcHJvdGVjdGVkOgogICAgIGZsb2F0IG1fbGFzdEFuY2hvcjsKICAgICBmbG9hdCBt
X2xhc3RGaWx0ZXJTdGFnZUdhaW47CiAKLSAgICAvLyBFbXBoYXNpcyBmaWx0ZXJzLgotICAgIFpl
cm9Qb2xlIG1fcHJlRmlsdGVyWzRdOwotICAgIFplcm9Qb2xlIG1fcHJlRmlsdGVyUls0XTsKLSAg
ICBaZXJvUG9sZSBtX3Bvc3RGaWx0ZXJbNF07Ci0gICAgWmVyb1BvbGUgbV9wb3N0RmlsdGVyUls0
XTsKKyAgICB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIFplcm9Qb2xlIGZpbHRlcnNbNF07Cisg
ICAgfSBaZXJvUG9sZUZpbHRlclBhY2s0OworCisgICAgLy8gUGVyLWNoYW5uZWwgZW1waGFzaXMg
ZmlsdGVycy4KKyAgICBWZWN0b3I8T3duUHRyPFplcm9Qb2xlRmlsdGVyUGFjazQ+ID4gbV9wcmVG
aWx0ZXJQYWNrczsKKyAgICBWZWN0b3I8T3duUHRyPFplcm9Qb2xlRmlsdGVyUGFjazQ+ID4gbV9w
b3N0RmlsdGVyUGFja3M7CiAKICAgICB2b2lkIHNldEVtcGhhc2lzU3RhZ2VQYXJhbWV0ZXJzKHVu
c2lnbmVkIHN0YWdlSW5kZXgsIGZsb2F0IGdhaW4sIGZsb2F0IG5vcm1hbGl6ZWRGcmVxdWVuY3kg
LyogMCAtPiAxICovKTsKICAgICB2b2lkIHNldEVtcGhhc2lzUGFyYW1ldGVycyhmbG9hdCBnYWlu
LCBmbG9hdCBhbmNob3JGcmVxLCBmbG9hdCBmaWx0ZXJTdGFnZVJhdGlvKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJu
ZWwuY3BwCmluZGV4IGEzMjJhMzMwMjU5NjBjODljYjZiZTA2YzI1Yjg3NzM3NmRhOWUzNmMuLjNl
OTQzZDEyMDc1N2FhN2U5ZmYxNmViNTQ1MDdiY2FkNTVjNDM4YjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVs
LmNwcApAQCAtNTIsMjAgKzUyLDMwIEBAIHN0YXRpYyBmbG9hdCBzYXR1cmF0ZShmbG9hdCB4LCBm
bG9hdCBrKQogICAgIHJldHVybiAxIC0gZXhwKC1rICogeCk7CiB9CiAKLUR5bmFtaWNzQ29tcHJl
c3Nvcktlcm5lbDo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsKGZsb2F0IHNhbXBsZVJhdGUpCitE
eW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbChmbG9hdCBz
YW1wbGVSYXRlLCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKQogICAgIDogbV9zYW1wbGVSYXRl
KHNhbXBsZVJhdGUpCiAgICAgLCBtX2xhc3RQcmVEZWxheUZyYW1lcyhEZWZhdWx0UHJlRGVsYXlG
cmFtZXMpCi0gICAgLCBtX3ByZURlbGF5QnVmZmVyTChNYXhQcmVEZWxheUZyYW1lcykKLSAgICAs
IG1fcHJlRGVsYXlCdWZmZXJSKE1heFByZURlbGF5RnJhbWVzKQogICAgICwgbV9wcmVEZWxheVJl
YWRJbmRleCgwKQogICAgICwgbV9wcmVEZWxheVdyaXRlSW5kZXgoRGVmYXVsdFByZURlbGF5RnJh
bWVzKQogeworICAgIHNldE51bWJlck9mQ2hhbm5lbHMobnVtYmVyT2ZDaGFubmVscyk7CisKICAg
ICAvLyBJbml0aWFsaXplcyBtb3N0IG1lbWJlciB2YXJpYWJsZXMKICAgICByZXNldCgpOwogICAg
IAogICAgIG1fbWV0ZXJpbmdSZWxlYXNlSyA9IGRpc2NyZXRlVGltZUNvbnN0YW50Rm9yU2FtcGxl
UmF0ZShtZXRlcmluZ1JlbGVhc2VUaW1lQ29uc3RhbnQsIHNhbXBsZVJhdGUpOwogfQogCit2b2lk
IER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCBu
dW1iZXJPZkNoYW5uZWxzKQoreworICAgIGlmIChtX3ByZURlbGF5QnVmZmVycy5zaXplKCkgPT0g
bnVtYmVyT2ZDaGFubmVscykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wcmVEZWxheUJ1ZmZl
cnMuY2xlYXIoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVs
czsgKytpKQorICAgICAgICBtX3ByZURlbGF5QnVmZmVycy5hcHBlbmQoYWRvcHRQdHIobmV3IEF1
ZGlvRmxvYXRBcnJheShNYXhQcmVEZWxheUZyYW1lcykpKTsKK30KKwogdm9pZCBEeW5hbWljc0Nv
bXByZXNzb3JLZXJuZWw6OnNldFByZURlbGF5VGltZShmbG9hdCBwcmVEZWxheVRpbWUpCiB7CiAg
ICAgLy8gUmUtY29uZmlndXJlIGxvb2stYWhlYWQgc2VjdGlvbiBwcmUtZGVsYXkgaWYgZGVsYXkg
dGltZSBoYXMgY2hhbmdlZC4KQEAgLTc1LDE3ICs4NSwxNyBAQCB2b2lkIER5bmFtaWNzQ29tcHJl
c3Nvcktlcm5lbDo6c2V0UHJlRGVsYXlUaW1lKGZsb2F0IHByZURlbGF5VGltZSkKICAgICAgICAg
CiAgICAgaWYgKG1fbGFzdFByZURlbGF5RnJhbWVzICE9IHByZURlbGF5RnJhbWVzKSB7CiAgICAg
ICAgIG1fbGFzdFByZURlbGF5RnJhbWVzID0gcHJlRGVsYXlGcmFtZXM7Ci0gICAgICAgIG1fcHJl
RGVsYXlCdWZmZXJMLnplcm8oKTsKLSAgICAgICAgbV9wcmVEZWxheUJ1ZmZlclIuemVybygpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcmVEZWxheUJ1ZmZlcnMuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICBtX3ByZURlbGF5QnVmZmVyc1tpXS0+emVybygpOworCiAgICAg
ICAgIG1fcHJlRGVsYXlSZWFkSW5kZXggPSAwOwogICAgICAgICBtX3ByZURlbGF5V3JpdGVJbmRl
eCA9IHByZURlbGF5RnJhbWVzOwogICAgIH0KIH0KIAotdm9pZCBEeW5hbWljc0NvbXByZXNzb3JL
ZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZUwsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCogZGVzdGluYXRpb25MLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIHNvdXJjZVIsIC8qIHN0ZXJlby1s
aW5rZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBk
ZXN0aW5hdGlvblIsCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cHJvY2VzcyhmbG9h
dCogc291cmNlQ2hhbm5lbHNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0KiBkZXN0aW5hdGlvbkNoYW5uZWxzW10sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVzVG9Qcm9jZXNzLAogCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBkYlRocmVzaG9sZCwK
QEAgLTEwMiw3ICsxMTIsOCBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cHJvY2Vz
cyhjb25zdCBmbG9hdCogc291cmNlTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IHJlbGVhc2Vab25lNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKQogewotICAgIGJvb2wgaXNTdGVyZW8gPSBkZXN0aW5hdGlvblI7CisgICAgQVNT
RVJUKG1fcHJlRGVsYXlCdWZmZXJzLnNpemUoKSA9PSBudW1iZXJPZkNoYW5uZWxzKTsKKwogICAg
IGZsb2F0IHNhbXBsZVJhdGUgPSB0aGlzLT5zYW1wbGVSYXRlKCk7CiAKICAgICBmbG9hdCBkcnlN
aXggPSAxIC0gZWZmZWN0QmxlbmQ7CkBAIC0xNjQsNiArMTc1LDcgQEAgdm9pZCBEeW5hbWljc0Nv
bXByZXNzb3JLZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZUwsCiAKICAgICBjb25z
dCBpbnQgbkRpdmlzaW9ucyA9IGZyYW1lc1RvUHJvY2VzcyAvIG5EaXZpc2lvbkZyYW1lczsKIAor
ICAgIHVuc2lnbmVkIGZyYW1lSW5kZXggPSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkRp
dmlzaW9uczsgKytpKSB7CiAgICAgICAgIC8vIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fgogICAgICAgICAvLyBDYWxjdWxhdGUgZGVzaXJlZCBnYWluCkBAIC0yNDcsOCArMjU5LDYg
QEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNv
dXJjZUwsCiAgICAgICAgIC8vIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0KiBkZWxheUJ1ZmZlckwgPSBtX3ByZURlbGF5QnVm
ZmVyTC5kYXRhKCk7Ci0gICAgICAgICAgICBmbG9hdCogZGVsYXlCdWZmZXJSID0gbV9wcmVEZWxh
eUJ1ZmZlclIuZGF0YSgpOwogICAgICAgICAgICAgaW50IHByZURlbGF5UmVhZEluZGV4ID0gbV9w
cmVEZWxheVJlYWRJbmRleDsKICAgICAgICAgICAgIGludCBwcmVEZWxheVdyaXRlSW5kZXggPSBt
X3ByZURlbGF5V3JpdGVJbmRleDsKICAgICAgICAgICAgIGZsb2F0IGRldGVjdG9yQXZlcmFnZSA9
IG1fZGV0ZWN0b3JBdmVyYWdlOwpAQCAtMjU2LDMyICsyNjYsMTkgQEAgdm9pZCBEeW5hbWljc0Nv
bXByZXNzb3JLZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZUwsCiAKICAgICAgICAg
ICAgIGludCBsb29wRnJhbWVzID0gbkRpdmlzaW9uRnJhbWVzOwogICAgICAgICAgICAgd2hpbGUg
KGxvb3BGcmFtZXMtLSkgewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbXByZXNzb3JJbnB1dDsK
LSAgICAgICAgICAgICAgICBmbG9hdCBpbnB1dEw7Ci0gICAgICAgICAgICAgICAgZmxvYXQgaW5w
dXRSID0gMDsKKyAgICAgICAgICAgICAgICBmbG9hdCBjb21wcmVzc29ySW5wdXQgPSAwOwogCiAg
ICAgICAgICAgICAgICAgLy8gUHJlZGVsYXkgc2lnbmFsLCBjb21wdXRpbmcgY29tcHJlc3Npb24g
YW1vdW50IGZyb20gdW4tZGVsYXllZCB2ZXJzaW9uLgotICAgICAgICAgICAgICAgIGlmIChpc1N0
ZXJlbykgewotICAgICAgICAgICAgICAgICAgICBmbG9hdCB1bmRlbGF5ZWRMID0gKnNvdXJjZUwr
KzsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgdW5kZWxheWVkUiA9ICpzb3VyY2VSKys7Ci0K
LSAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NvcklucHV0ID0gMC41ZiAqICh1bmRlbGF5ZWRM
ICsgdW5kZWxheWVkUik7Ci0KLSAgICAgICAgICAgICAgICAgICAgaW5wdXRMID0gZGVsYXlCdWZm
ZXJMW3ByZURlbGF5UmVhZEluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgaW5wdXRSID0gZGVs
YXlCdWZmZXJSW3ByZURlbGF5UmVhZEluZGV4XTsKLQotICAgICAgICAgICAgICAgICAgICBkZWxh
eUJ1ZmZlckxbcHJlRGVsYXlXcml0ZUluZGV4XSA9IHVuZGVsYXllZEw7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlbGF5QnVmZmVyUltwcmVEZWxheVdyaXRlSW5kZXhdID0gdW5kZWxheWVkUjsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjb21wcmVzc29ySW5w
dXQgPSAqc291cmNlTCsrOwotCi0gICAgICAgICAgICAgICAgICAgIGlucHV0TCA9IGRlbGF5QnVm
ZmVyTFtwcmVEZWxheVJlYWRJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlbGF5QnVmZmVy
TFtwcmVEZWxheVdyaXRlSW5kZXhdID0gY29tcHJlc3NvcklucHV0OworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZmxvYXQqIGRlbGF5QnVmZmVyID0gbV9wcmVEZWxheUJ1ZmZlcnNbaV0t
PmRhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgdW5kZWxheWVkU291cmNlID0gc291
cmNlQ2hhbm5lbHNbaV1bZnJhbWVJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGRlbGF5QnVm
ZmVyW3ByZURlbGF5V3JpdGVJbmRleF0gPSB1bmRlbGF5ZWRTb3VyY2U7CisKKyAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgYWJzVW5kZWxheWVkU291cmNlID0gdW5kZWxheWVkU291cmNlID4gMCA/
IHVuZGVsYXllZFNvdXJjZSA6IC11bmRlbGF5ZWRTb3VyY2U7CisgICAgICAgICAgICAgICAgICAg
IGlmIChjb21wcmVzc29ySW5wdXQgPCBhYnNVbmRlbGF5ZWRTb3VyY2UpCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb21wcmVzc29ySW5wdXQgPSBhYnNVbmRlbGF5ZWRTb3VyY2U7CiAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgcHJlRGVsYXlSZWFkSW5kZXggPSAocHJlRGVs
YXlSZWFkSW5kZXggKyAxKSAmIE1heFByZURlbGF5RnJhbWVzTWFzazsKLSAgICAgICAgICAgICAg
ICBwcmVEZWxheVdyaXRlSW5kZXggPSAocHJlRGVsYXlXcml0ZUluZGV4ICsgMSkgJiBNYXhQcmVE
ZWxheUZyYW1lc01hc2s7Ci0KICAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgc2hhcGVkIHBv
d2VyIG9uIHVuZGVsYXllZCBpbnB1dC4KIAogICAgICAgICAgICAgICAgIGZsb2F0IHNjYWxlZElu
cHV0ID0gY29tcHJlc3NvcklucHV0OwpAQCAtMzM3LDE3ICszMzQsMTQgQEAgdm9pZCBEeW5hbWlj
c0NvbXByZXNzb3JLZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZUwsCiAgICAgICAg
ICAgICAgICAgICAgIG1fbWV0ZXJpbmdHYWluICs9IChkYlJlYWxHYWluIC0gbV9tZXRlcmluZ0dh
aW4pICogbV9tZXRlcmluZ1JlbGVhc2VLOwogCiAgICAgICAgICAgICAgICAgLy8gQXBwbHkgZmlu
YWwgZ2Fpbi4KLSAgICAgICAgICAgICAgICBpZiAoaXNTdGVyZW8pIHsKLSAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgb3V0cHV0TCA9IGlucHV0TDsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQg
b3V0cHV0UiA9IGlucHV0UjsKLQotICAgICAgICAgICAgICAgICAgICBvdXRwdXRMICo9IHRvdGFs
R2FpbjsKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0UiAqPSB0b3RhbEdhaW47CisgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkg
eworICAgICAgICAgICAgICAgICAgICBmbG9hdCogZGVsYXlCdWZmZXIgPSBtX3ByZURlbGF5QnVm
ZmVyc1tpXS0+ZGF0YSgpOworICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkNoYW5uZWxz
W2ldW2ZyYW1lSW5kZXhdID0gZGVsYXlCdWZmZXJbcHJlRGVsYXlSZWFkSW5kZXhdICogdG90YWxH
YWluOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAqZGVzdGluYXRp
b25MKysgPSBvdXRwdXRMOwotICAgICAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25SKysgPSBv
dXRwdXRSOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAqZGVz
dGluYXRpb25MKysgPSBpbnB1dEwgKiB0b3RhbEdhaW47CisgICAgICAgICAgICAgICAgZnJhbWVJ
bmRleCsrOworICAgICAgICAgICAgICAgIHByZURlbGF5UmVhZEluZGV4ID0gKHByZURlbGF5UmVh
ZEluZGV4ICsgMSkgJiBNYXhQcmVEZWxheUZyYW1lc01hc2s7CisgICAgICAgICAgICAgICAgcHJl
RGVsYXlXcml0ZUluZGV4ID0gKHByZURlbGF5V3JpdGVJbmRleCArIDEpICYgTWF4UHJlRGVsYXlG
cmFtZXNNYXNrOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBMb2NhbHMgYmFjayB0
byBtZW1iZXIgdmFyaWFibGVzLgpAQCAtMzY2LDggKzM2MCw5IEBAIHZvaWQgRHluYW1pY3NDb21w
cmVzc29yS2VybmVsOjpyZXNldCgpCiAgICAgbV9tZXRlcmluZ0dhaW4gPSAxOwogCiAgICAgLy8g
UHJlZGVsYXkgc2VjdGlvbi4KLSAgICBtX3ByZURlbGF5QnVmZmVyTC56ZXJvKCk7Ci0gICAgbV9w
cmVEZWxheUJ1ZmZlclIuemVybygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3By
ZURlbGF5QnVmZmVycy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wcmVEZWxheUJ1ZmZlcnNbaV0t
Pnplcm8oKTsKKwogICAgIG1fcHJlRGVsYXlSZWFkSW5kZXggPSAwOwogICAgIG1fcHJlRGVsYXlX
cml0ZUluZGV4ID0gRGVmYXVsdFByZURlbGF5RnJhbWVzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oCmluZGV4
IGNmMzE5YjM3OGFkZWI1OTA2Mjk1M2RlYWIwOTJlMzMzOWM2ZjY4ODAuLmRhOGU0YzhiZWU5YzVk
MTc5YTg4NDQwNzA1ZTIyYzNmNjE5OWRhMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oCkBAIC0zMSwxNyAr
MzEsMjEgQEAKIAogI2luY2x1ZGUgIkF1ZGlvQXJyYXkuaCIKIAorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbCB7CiBwdWJsaWM6Ci0gICAgRHluYW1p
Y3NDb21wcmVzc29yS2VybmVsKGZsb2F0IHNhbXBsZVJhdGUpOworICAgIER5bmFtaWNzQ29tcHJl
c3Nvcktlcm5lbChmbG9hdCBzYW1wbGVSYXRlLCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKTsK
KworICAgIHZvaWQgc2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCk7CiAKICAgICAvLyBQZXJm
b3JtcyBzdGVyZW8tbGlua2VkIGNvbXByZXNzaW9uLgotICAgIHZvaWQgcHJvY2Vzcyhjb25zdCBm
bG9hdCAqc291cmNlTCwKLSAgICAgICAgICAgICAgICAgZmxvYXQgKmRlc3RpbmF0aW9uTCwKLSAg
ICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgKnNvdXJjZVIsCi0gICAgICAgICAgICAgICAgIGZs
b2F0ICpkZXN0aW5hdGlvblIsCisgICAgdm9pZCBwcm9jZXNzKGZsb2F0KiBzb3VyY2VDaGFubmVs
c1tdLAorICAgICAgICAgICAgICAgICBmbG9hdCogZGVzdGluYXRpb25DaGFubmVsc1tdLAorICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLAogICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBmcmFtZXNUb1Byb2Nlc3MsCiAKICAgICAgICAgICAgICAgICAgZmxvYXQgZGJU
aHJlc2hvbGQsCkBAIC02Niw3ICs3MCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIGZs
b2F0IG1fc2FtcGxlUmF0ZTsKLSAgICAKKwogICAgIGZsb2F0IG1fZGV0ZWN0b3JBdmVyYWdlOwog
ICAgIGZsb2F0IG1fY29tcHJlc3NvckdhaW47CiAKQEAgLTgxLDggKzg1LDcgQEAgcHJvdGVjdGVk
OgogICAgIHVuc2lnbmVkIG1fbGFzdFByZURlbGF5RnJhbWVzOwogICAgIHZvaWQgc2V0UHJlRGVs
YXlUaW1lKGZsb2F0KTsKIAotICAgIEF1ZGlvRmxvYXRBcnJheSBtX3ByZURlbGF5QnVmZmVyTDsK
LSAgICBBdWRpb0Zsb2F0QXJyYXkgbV9wcmVEZWxheUJ1ZmZlclI7CisgICAgVmVjdG9yPE93blB0
cjxBdWRpb0Zsb2F0QXJyYXk+ID4gbV9wcmVEZWxheUJ1ZmZlcnM7CiAgICAgaW50IG1fcHJlRGVs
YXlSZWFkSW5kZXg7CiAgICAgaW50IG1fcHJlRGVsYXlXcml0ZUluZGV4OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwCmluZGV4IGVh
OGI1ODkyMjM1NmFhMTM2NTEzMmFlZjMxZmFhZjYwM2Y3NDU0MjcuLjI2Mzc1NTU5NWNlM2Q4ZTU5
OTg3ZmQ4MDJiYTc5MjlhODk1ODYzZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwCkBAIC0zMywxMyArMzMsMTYgQEAKICNpbmNs
dWRlICJBdWRpb05vZGVPdXRwdXQuaCIKICNpbmNsdWRlICJEeW5hbWljc0NvbXByZXNzb3IuaCIK
IAorLy8gU2V0IG91dHB1dCB0byBzdGVyZW8gYnkgZGVmYXVsdC4KK3N0YXRpYyBjb25zdCB1bnNp
Z25lZCBkZWZhdWx0TnVtYmVyT2ZPdXRwdXRDaGFubmVscyA9IDI7CisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogRHluYW1pY3NDb21wcmVzc29yTm9kZTo6RHluYW1pY3NDb21wcmVzc29yTm9kZShB
dWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCiAgICAgOiBBdWRpb05vZGUo
Y29udGV4dCwgc2FtcGxlUmF0ZSkKIHsKICAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcgQXVkaW9O
b2RlSW5wdXQodGhpcykpKTsKLSAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91
dHB1dCh0aGlzLCAyKSkpOworICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0
cHV0KHRoaXMsIGRlZmF1bHROdW1iZXJPZk91dHB1dENoYW5uZWxzKSkpOwogICAgIAogICAgIHNl
dE5vZGVUeXBlKE5vZGVUeXBlRHluYW1pY3NDb21wcmVzc29yKTsKICAgICAKQEAgLTcwLDcgKzcz
LDcgQEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjppbml0aWFsaXplKCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7ICAgIAotICAgIG1fZHluYW1p
Y3NDb21wcmVzc29yID0gYWRvcHRQdHIobmV3IER5bmFtaWNzQ29tcHJlc3Nvcih0cnVlLCBzYW1w
bGVSYXRlKCkpKTsKKyAgICBtX2R5bmFtaWNzQ29tcHJlc3NvciA9IGFkb3B0UHRyKG5ldyBEeW5h
bWljc0NvbXByZXNzb3Ioc2FtcGxlUmF0ZSgpLCBkZWZhdWx0TnVtYmVyT2ZPdXRwdXRDaGFubmVs
cykpOwogfQogCiB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OnVuaW5pdGlhbGl6ZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128142</attachid>
            <date>2012-02-21 23:31:33 -0800</date>
            <delta_ts>2012-02-22 12:41:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77856-20120222153625.patch</filename>
            <type>text/plain</type>
            <size>23543</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDBjNjA5OWI4Yzg5NGM1
NjFjOGM1NmI4Zjg0Y2E3ODNhZTEzOTRlYy4uZDQ0MDg0NDI3ZDAyOTJiZTg4MDI5OGVmN2EzNmVk
MTgyODkzNDcyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTAyLTIxICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBIYXZlIHRoZSBEeW5h
bWljc0NvbXByZXNzb3JOb2RlIHN1cHBvcnQgbXVsdGktY2hhbm5lbCBkYXRhCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzg1NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRHlu
YW1pY3NDb21wcmVzc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nv
cjo6RHluYW1pY3NDb21wcmVzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJl
c3Nvcjo6c2V0RW1waGFzaXNTdGFnZVBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RHlu
YW1pY3NDb21wcmVzc29yOjpwcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29t
cHJlc3Nvcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yOjpz
ZXROdW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5oOgorICAgICAgICAoRHluYW1pY3NDb21wcmVz
c29yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpEeW5hbWlj
c0NvbXByZXNzb3JLZXJuZWwpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29y
S2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpzZXRQcmVEZWxheVRpbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cmVzZXQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oOgorICAgICAgICAo
RHluYW1pY3NDb21wcmVzc29yS2VybmVsKToKKyAgICAgICAgKiB3ZWJhdWRpby9EeW5hbWljc0Nv
bXByZXNzb3JOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvck5v
ZGU6OkR5bmFtaWNzQ29tcHJlc3Nvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3ND
b21wcmVzc29yTm9kZTo6aW5pdGlhbGl6ZSk6CisKIDIwMTItMDItMjEgIEFsZXhhbmRyZSBFbGlh
cyAgPGFlbGlhc0Bnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQWRkIHRocmVlIHNt
YWxsIHpvb20gZ2VzdHVyZSBmZWF0dXJlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5jcHAKaW5kZXggYTU1MjA1NzA1ZDk1MTBiZjIw
ZDlkYjM1NDg3OTM5NjVlZTAyZWUxZC4uZDBmMjdiMDVmMzA5YjgxYzEyNTcyN2Y5NWVmNDcxMDI0
Y2IyZDI0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1p
Y3NDb21wcmVzc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5h
bWljc0NvbXByZXNzb3IuY3BwCkBAIC00MCwxNiArNDAsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB1c2luZyBuYW1lc3BhY2UgQXVkaW9VdGlsaXRpZXM7CiAgICAgCi1EeW5hbWljc0NvbXBy
ZXNzb3I6OkR5bmFtaWNzQ29tcHJlc3Nvcihib29sIGlzU3RlcmVvLCBmbG9hdCBzYW1wbGVSYXRl
KQotICAgIDogbV9pc1N0ZXJlbyhpc1N0ZXJlbykKLSAgICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVS
YXRlKQotICAgICwgbV9jb21wcmVzc29yKHNhbXBsZVJhdGUpCitEeW5hbWljc0NvbXByZXNzb3I6
OkR5bmFtaWNzQ29tcHJlc3NvcihmbG9hdCBzYW1wbGVSYXRlLCB1bnNpZ25lZCBudW1iZXJPZkNo
YW5uZWxzKQorICAgIDogbV9udW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5lbHMpCisgICAg
LCBtX2NvbXByZXNzb3Ioc2FtcGxlUmF0ZSwgbnVtYmVyT2ZDaGFubmVscykKIHsKICAgICAvLyBV
bmluaXRpYWxpemVkIHN0YXRlIC0gZm9yIHBhcmFtZXRlciByZWNhbGN1bGF0aW9uLgogICAgIG1f
bGFzdEZpbHRlclN0YWdlUmF0aW8gPSAtMTsKICAgICBtX2xhc3RBbmNob3IgPSAtMTsKICAgICBt
X2xhc3RGaWx0ZXJTdGFnZUdhaW4gPSAtMTsKIAorICAgIHNldE51bWJlck9mQ2hhbm5lbHMobnVt
YmVyT2ZDaGFubmVscyk7CiAgICAgaW5pdGlhbGl6ZVBhcmFtZXRlcnMoKTsKIH0KIApAQCAtOTMs
MTggKzkzLDIwIEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yOjpzZXRFbXBoYXNpc1N0YWdlUGFy
YW1ldGVycyh1bnNpZ25lZCBzdGFnZUluZGV4LCBmbG9hdCBnCiAgICAgZmxvYXQgcjEgPSBleHBm
KC1mMSAqIHBpRmxvYXQpOwogICAgIGZsb2F0IHIyID0gZXhwZigtZjIgKiBwaUZsb2F0KTsKIAot
ICAgIC8vIFNldCBwcmUtZmlsdGVyIHplcm8gYW5kIHBvbGUgdG8gY3JlYXRlIGFuIGVtcGhhc2lz
IGZpbHRlci4KLSAgICBtX3ByZUZpbHRlcltzdGFnZUluZGV4XS5zZXRaZXJvKHIxKTsKLSAgICBt
X3ByZUZpbHRlcltzdGFnZUluZGV4XS5zZXRQb2xlKHIyKTsKLSAgICBtX3ByZUZpbHRlclJbc3Rh
Z2VJbmRleF0uc2V0WmVybyhyMSk7Ci0gICAgbV9wcmVGaWx0ZXJSW3N0YWdlSW5kZXhdLnNldFBv
bGUocjIpOwotCi0gICAgLy8gU2V0IHBvc3QtZmlsdGVyIHdpdGggemVybyBhbmQgcG9sZSByZXZl
cnNlZCB0byBjcmVhdGUgdGhlIGRlLWVtcGhhc2lzIGZpbHRlci4KLSAgICAvLyBJZiB0aGVyZSB3
ZXJlIG5vIGNvbXByZXNzb3Iga2VybmVsIGluIGJldHdlZW4sIHRoZXkgd291bGQgY2FuY2VsIGVh
Y2ggb3RoZXIgb3V0IChhbGxwYXNzIGZpbHRlcikuCi0gICAgbV9wb3N0RmlsdGVyW3N0YWdlSW5k
ZXhdLnNldFplcm8ocjIpOwotICAgIG1fcG9zdEZpbHRlcltzdGFnZUluZGV4XS5zZXRQb2xlKHIx
KTsKLSAgICBtX3Bvc3RGaWx0ZXJSW3N0YWdlSW5kZXhdLnNldFplcm8ocjIpOwotICAgIG1fcG9z
dEZpbHRlclJbc3RhZ2VJbmRleF0uc2V0UG9sZShyMSk7CisgICAgQVNTRVJUKG1fbnVtYmVyT2ZD
aGFubmVscyA9PSBtX3ByZUZpbHRlclBhY2tzLnNpemUoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9udW1iZXJPZkNoYW5uZWxzOyArK2kpIHsKKyAgICAgICAgLy8gU2V0IHBy
ZS1maWx0ZXIgemVybyBhbmQgcG9sZSB0byBjcmVhdGUgYW4gZW1waGFzaXMgZmlsdGVyLgorICAg
ICAgICBaZXJvUG9sZSYgcHJlRmlsdGVyID0gbV9wcmVGaWx0ZXJQYWNrc1tpXS0+ZmlsdGVyc1tz
dGFnZUluZGV4XTsKKyAgICAgICAgcHJlRmlsdGVyLnNldFplcm8ocjEpOworICAgICAgICBwcmVG
aWx0ZXIuc2V0UG9sZShyMik7CisKKyAgICAgICAgLy8gU2V0IHBvc3QtZmlsdGVyIHdpdGggemVy
byBhbmQgcG9sZSByZXZlcnNlZCB0byBjcmVhdGUgdGhlIGRlLWVtcGhhc2lzIGZpbHRlci4KKyAg
ICAgICAgLy8gSWYgdGhlcmUgd2VyZSBubyBjb21wcmVzc29yIGtlcm5lbCBpbiBiZXR3ZWVuLCB0
aGV5IHdvdWxkIGNhbmNlbCBlYWNoIG90aGVyIG91dCAoYWxscGFzcyBmaWx0ZXIpLgorICAgICAg
ICBaZXJvUG9sZSYgcG9zdEZpbHRlciA9IG1fcG9zdEZpbHRlclBhY2tzW2ldLT5maWx0ZXJzW3N0
YWdlSW5kZXhdOworICAgICAgICBwb3N0RmlsdGVyLnNldFplcm8ocjIpOworICAgICAgICBwb3N0
RmlsdGVyLnNldFBvbGUocjEpOworICAgIH0KIH0KIAogdm9pZCBEeW5hbWljc0NvbXByZXNzb3I6
OnNldEVtcGhhc2lzUGFyYW1ldGVycyhmbG9hdCBnYWluLCBmbG9hdCBhbmNob3JGcmVxLCBmbG9h
dCBmaWx0ZXJTdGFnZVJhdGlvKQpAQCAtMTE3LDE4ICsxMTksNDAgQEAgdm9pZCBEeW5hbWljc0Nv
bXByZXNzb3I6OnNldEVtcGhhc2lzUGFyYW1ldGVycyhmbG9hdCBnYWluLCBmbG9hdCBhbmNob3JG
cmVxLCBmbG8KIAogdm9pZCBEeW5hbWljc0NvbXByZXNzb3I6OnByb2Nlc3MoY29uc3QgQXVkaW9C
dXMqIHNvdXJjZUJ1cywgQXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzLCB1bnNpZ25lZCBmcmFtZXNU
b1Byb2Nlc3MpCiB7Ci0gICAgY29uc3QgZmxvYXQqIHNvdXJjZUwgPSBzb3VyY2VCdXMtPmNoYW5u
ZWwoMCktPmRhdGEoKTsKLSAgICBjb25zdCBmbG9hdCogc291cmNlUjsKKyAgICAvLyBUaG91Z2gg
bnVtYmVyT2ZDaGFubmVscyBpcyByZXRyaXZlZCBmcm9tIGRlc3RpbmF0aW9uQnVzLCB3ZSBzdGls
bCBuYW1lIGl0IG51bWJlck9mQ2hhbm5lbHMgaW5zdGVhZCBvZiBudW1iZXJPZkRlc3RpbmF0aW9u
Q2hhbm5lbHMuCisgICAgLy8gSXQncyBiZWNhdXNlIHdlIGludGVybmFsbHkgbWF0Y2ggc291cmNl
Q2hhbm5lbHMncyBzaXplIHRvIGRlc3RpbmF0aW9uQnVzIGJ5IGNoYW5uZWwgdXAvZG93biBtaXgu
IFRodXMgd2UgbmVlZCBudW1iZXJPZkNoYW5uZWxzCisgICAgLy8gdG8gZG8gdGhlIGxvb3Agd29y
ayBmb3IgYm90aCBtX3NvdXJjZUNoYW5uZWxzIGFuZCBtX2Rlc3RpbmF0aW9uQ2hhbm5lbHMuCisK
KyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gZGVzdGluYXRpb25CdXMtPm51bWJlck9m
Q2hhbm5lbHMoKTsKKyAgICB1bnNpZ25lZCBudW1iZXJPZlNvdXJjZUNoYW5uZWxzID0gc291cmNl
QnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7CiAKLSAgICBpZiAoc291cmNlQnVzLT5udW1iZXJPZkNo
YW5uZWxzKCkgPiAxKQotICAgICAgICBzb3VyY2VSID0gc291cmNlQnVzLT5jaGFubmVsKDEpLT5k
YXRhKCk7Ci0gICAgZWxzZQotICAgICAgICBzb3VyY2VSID0gc291cmNlTDsKKyAgICBBU1NFUlQo
bnVtYmVyT2ZDaGFubmVscyA9PSBtX251bWJlck9mQ2hhbm5lbHMgJiYgbnVtYmVyT2ZTb3VyY2VD
aGFubmVscyk7CiAKLSAgICBBU1NFUlQoZGVzdGluYXRpb25CdXMtPm51bWJlck9mQ2hhbm5lbHMo
KSA9PSAyKTsKKyAgICBpZiAobnVtYmVyT2ZDaGFubmVscyAhPSBtX251bWJlck9mQ2hhbm5lbHMg
fHwgIW51bWJlck9mU291cmNlQ2hhbm5lbHMpIHsKKyAgICAgICAgZGVzdGluYXRpb25CdXMtPnpl
cm8oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN3aXRjaCAobnVtYmVyT2ZDaGFu
bmVscykgeworICAgIGNhc2UgMjogLy8gc3RlcmVvCisgICAgICAgIG1fc291cmNlQ2hhbm5lbHNb
MF0gPSBzb3VyY2VCdXMtPmNoYW5uZWwoMCktPmRhdGEoKTsKKworICAgICAgICBpZiAobnVtYmVy
T2ZTb3VyY2VDaGFubmVscyA+IDEpCisgICAgICAgICAgICBtX3NvdXJjZUNoYW5uZWxzWzFdID0g
c291cmNlQnVzLT5jaGFubmVsKDEpLT5kYXRhKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IC8vIFNpbXBseSBkdXBsaWNhdGUgbW9ubyBjaGFubmVsIGlucHV0IGRhdGEgdG8gcmlnaHQgY2hh
bm5lbCBmb3Igc3RlcmVvIHByb2Nlc3NpbmcuCisgICAgICAgICAgICBtX3NvdXJjZUNoYW5uZWxz
WzFdID0gbV9zb3VyY2VDaGFubmVsc1swXTsKKworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICAvLyBGSVhNRSA6IHN1cHBvcnQgb3RoZXIgbnVtYmVyIG9mIGNoYW5uZWxzLgor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgZGVzdGluYXRpb25CdXMtPnpl
cm8oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGZsb2F0KiBkZXN0aW5hdGlvbkwg
PSBkZXN0aW5hdGlvbkJ1cy0+Y2hhbm5lbCgwKS0+bXV0YWJsZURhdGEoKTsKLSAgICBmbG9hdCog
ZGVzdGluYXRpb25SID0gZGVzdGluYXRpb25CdXMtPmNoYW5uZWwoMSktPm11dGFibGVEYXRhKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkKKyAg
ICAgICAgbV9kZXN0aW5hdGlvbkNoYW5uZWxzW2ldID0gZGVzdGluYXRpb25CdXMtPmNoYW5uZWwo
aSktPm11dGFibGVEYXRhKCk7CiAKICAgICBmbG9hdCBmaWx0ZXJTdGFnZUdhaW4gPSBwYXJhbWV0
ZXJWYWx1ZShQYXJhbUZpbHRlclN0YWdlR2Fpbik7CiAgICAgZmxvYXQgZmlsdGVyU3RhZ2VSYXRp
byA9IHBhcmFtZXRlclZhbHVlKFBhcmFtRmlsdGVyU3RhZ2VSYXRpbyk7CkBAIC0xNDQsMTYgKzE2
OCwxNSBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6cHJvY2Vzcyhjb25zdCBBdWRpb0J1cyog
c291cmNlQnVzLCBBdWRpb0J1cyogZGVzdGluYXRpbwogCiAgICAgLy8gQXBwbHkgcHJlLWVtcGhh
c2lzIGZpbHRlci4KICAgICAvLyBOb3RlIHRoYXQgdGhlIGZpbmFsIHRocmVlIHN0YWdlcyBhcmUg
Y29tcHV0ZWQgaW4tcGxhY2UgaW4gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KLSAgICBtX3ByZUZp
bHRlclswXS5wcm9jZXNzKHNvdXJjZUwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNzKTsK
LSAgICBtX3ByZUZpbHRlclsxXS5wcm9jZXNzKGRlc3RpbmF0aW9uTCwgZGVzdGluYXRpb25MLCBm
cmFtZXNUb1Byb2Nlc3MpOwotICAgIG1fcHJlRmlsdGVyWzJdLnByb2Nlc3MoZGVzdGluYXRpb25M
LCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgbV9wcmVGaWx0ZXJbM10ucHJv
Y2VzcyhkZXN0aW5hdGlvbkwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNzKTsKLQotICAg
IGlmIChpc1N0ZXJlbygpKSB7Ci0gICAgICAgIG1fcHJlRmlsdGVyUlswXS5wcm9jZXNzKHNvdXJj
ZVIsIGRlc3RpbmF0aW9uUiwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgbV9wcmVGaWx0ZXJS
WzFdLnByb2Nlc3MoZGVzdGluYXRpb25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7
Ci0gICAgICAgIG1fcHJlRmlsdGVyUlsyXS5wcm9jZXNzKGRlc3RpbmF0aW9uUiwgZGVzdGluYXRp
b25SLCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgICAgICBtX3ByZUZpbHRlclJbM10ucHJvY2Vzcyhk
ZXN0aW5hdGlvblIsIGRlc3RpbmF0aW9uUiwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgIGNvbnN0
IGZsb2F0KiBzb3VyY2VEYXRhID0gbV9zb3VyY2VDaGFubmVsc1tpXTsKKyAgICAgICAgZmxvYXQq
IGRlc3RpbmF0aW9uRGF0YSA9IG1fZGVzdGluYXRpb25DaGFubmVsc1tpXTsKKyAgICAgICAgWmVy
b1BvbGUqIHByZUZpbHRlcnMgPSBtX3ByZUZpbHRlclBhY2tzW2ldLT5maWx0ZXJzOworCisgICAg
ICAgIHByZUZpbHRlcnNbMF0ucHJvY2Vzcyhzb3VyY2VEYXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZy
YW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIHByZUZpbHRlcnNbMV0ucHJvY2VzcyhkZXN0aW5hdGlv
bkRhdGEsIGRlc3RpbmF0aW9uRGF0YSwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICAgICAgcHJlRmls
dGVyc1syXS5wcm9jZXNzKGRlc3RpbmF0aW9uRGF0YSwgZGVzdGluYXRpb25EYXRhLCBmcmFtZXNU
b1Byb2Nlc3MpOworICAgICAgICBwcmVGaWx0ZXJzWzNdLnByb2Nlc3MoZGVzdGluYXRpb25EYXRh
LCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vzcyk7CiAgICAgfQogCiAgICAgZmxvYXQg
ZGJUaHJlc2hvbGQgPSBwYXJhbWV0ZXJWYWx1ZShQYXJhbVRocmVzaG9sZCk7CkBAIC0xNzcsMTAg
KzIwMCw5IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yOjpwcm9jZXNzKGNvbnN0IEF1ZGlvQnVz
KiBzb3VyY2VCdXMsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvCiAKICAgICAvLyBBcHBseSBjb21wcmVz
c2lvbiB0byB0aGUgcHJlLWZpbHRlcmVkIHNpZ25hbC4KICAgICAvLyBUaGUgcHJvY2Vzc2luZyBp
cyBwZXJmb3JtZWQgaW4gcGxhY2UuCi0gICAgbV9jb21wcmVzc29yLnByb2Nlc3MoZGVzdGluYXRp
b25MLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uTCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0aW5hdGlvblIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dGluYXRpb25SLAorICAgIG1fY29tcHJlc3Nvci5wcm9jZXNzKG1fZGVzdGluYXRpb25DaGFubmVs
cy5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtX2Rlc3RpbmF0aW9uQ2hhbm5lbHMu
Z2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZDaGFubmVscywKICAgICAg
ICAgICAgICAgICAgICAgICAgICBmcmFtZXNUb1Byb2Nlc3MsCiAKICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYlRocmVzaG9sZCwKQEAgLTE5OCwxNiArMjIwLDE0IEBAIHZvaWQgRHluYW1pY3ND
b21wcmVzc29yOjpwcm9jZXNzKGNvbnN0IEF1ZGlvQnVzKiBzb3VyY2VCdXMsIEF1ZGlvQnVzKiBk
ZXN0aW5hdGlvCiAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKIAogICAgIC8vIEFwcGx5IGRl
LWVtcGhhc2lzIGZpbHRlci4KLSAgICBtX3Bvc3RGaWx0ZXJbMF0ucHJvY2VzcyhkZXN0aW5hdGlv
bkwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICBtX3Bvc3RGaWx0ZXJbMV0u
cHJvY2VzcyhkZXN0aW5hdGlvbkwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAg
ICBtX3Bvc3RGaWx0ZXJbMl0ucHJvY2VzcyhkZXN0aW5hdGlvbkwsIGRlc3RpbmF0aW9uTCwgZnJh
bWVzVG9Qcm9jZXNzKTsKLSAgICBtX3Bvc3RGaWx0ZXJbM10ucHJvY2VzcyhkZXN0aW5hdGlvbkws
IGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNzKTsKLQotICAgIGlmIChpc1N0ZXJlbygpKSB7
Ci0gICAgICAgIG1fcG9zdEZpbHRlclJbMF0ucHJvY2VzcyhkZXN0aW5hdGlvblIsIGRlc3RpbmF0
aW9uUiwgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgbV9wb3N0RmlsdGVyUlsxXS5wcm9jZXNz
KGRlc3RpbmF0aW9uUiwgZGVzdGluYXRpb25SLCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgICAgICBt
X3Bvc3RGaWx0ZXJSWzJdLnByb2Nlc3MoZGVzdGluYXRpb25SLCBkZXN0aW5hdGlvblIsIGZyYW1l
c1RvUHJvY2Vzcyk7Ci0gICAgICAgIG1fcG9zdEZpbHRlclJbM10ucHJvY2VzcyhkZXN0aW5hdGlv
blIsIGRlc3RpbmF0aW9uUiwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgIGZsb2F0KiBkZXN0aW5h
dGlvbkRhdGEgPSBtX2Rlc3RpbmF0aW9uQ2hhbm5lbHNbaV07CisgICAgICAgIFplcm9Qb2xlKiBw
b3N0RmlsdGVycyA9IG1fcG9zdEZpbHRlclBhY2tzW2ldLT5maWx0ZXJzOworCisgICAgICAgIHBv
c3RGaWx0ZXJzWzBdLnByb2Nlc3MoZGVzdGluYXRpb25EYXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZy
YW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIHBvc3RGaWx0ZXJzWzFdLnByb2Nlc3MoZGVzdGluYXRp
b25EYXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIHBvc3RG
aWx0ZXJzWzJdLnByb2Nlc3MoZGVzdGluYXRpb25EYXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1l
c1RvUHJvY2Vzcyk7CisgICAgICAgIHBvc3RGaWx0ZXJzWzNdLnByb2Nlc3MoZGVzdGluYXRpb25E
YXRhLCBkZXN0aW5hdGlvbkRhdGEsIGZyYW1lc1RvUHJvY2Vzcyk7CiAgICAgfQogfQogCkBAIC0y
MTcsMTYgKzIzNywzNSBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6cmVzZXQoKQogICAgIG1f
bGFzdEFuY2hvciA9IC0xOwogICAgIG1fbGFzdEZpbHRlclN0YWdlR2FpbiA9IC0xOwogCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDQ7ICsraSkgewotICAgICAgICBtX3ByZUZpbHRlcltp
XS5yZXNldCgpOwotICAgICAgICBtX3ByZUZpbHRlclJbaV0ucmVzZXQoKTsKLSAgICAgICAgbV9w
b3N0RmlsdGVyW2ldLnJlc2V0KCk7Ci0gICAgICAgIG1fcG9zdEZpbHRlclJbaV0ucmVzZXQoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgbV9udW1iZXJPZkNoYW5u
ZWxzOyArK2NoYW5uZWwpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBzdGFnZUluZGV4ID0gMDsg
c3RhZ2VJbmRleCA8IDQ7ICsrc3RhZ2VJbmRleCkgeworICAgICAgICAgICAgbV9wcmVGaWx0ZXJQ
YWNrc1tjaGFubmVsXS0+ZmlsdGVyc1tzdGFnZUluZGV4XS5yZXNldCgpOworICAgICAgICAgICAg
bV9wb3N0RmlsdGVyUGFja3NbY2hhbm5lbF0tPmZpbHRlcnNbc3RhZ2VJbmRleF0ucmVzZXQoKTsK
KyAgICAgICAgfQogICAgIH0KIAogICAgIG1fY29tcHJlc3Nvci5yZXNldCgpOwogfQogCit2b2lk
IER5bmFtaWNzQ29tcHJlc3Nvcjo6c2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCBudW1iZXJP
ZkNoYW5uZWxzKQoreworICAgIGlmIChtX3ByZUZpbHRlclBhY2tzLnNpemUoKSA9PSBudW1iZXJP
ZkNoYW5uZWxzKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByZUZpbHRlclBhY2tzLmNsZWFy
KCk7CisgICAgbV9wb3N0RmlsdGVyUGFja3MuY2xlYXIoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgIG1fcHJlRmlsdGVyUGFj
a3MuYXBwZW5kKGFkb3B0UHRyKG5ldyBaZXJvUG9sZUZpbHRlclBhY2s0KCkpKTsKKyAgICAgICAg
bV9wb3N0RmlsdGVyUGFja3MuYXBwZW5kKGFkb3B0UHRyKG5ldyBaZXJvUG9sZUZpbHRlclBhY2s0
KCkpKTsKKyAgICB9CisKKyAgICBtX3NvdXJjZUNoYW5uZWxzID0gYWRvcHRBcnJheVB0cihuZXcg
Y29uc3QgZmxvYXQqIFtudW1iZXJPZkNoYW5uZWxzXSk7CisgICAgbV9kZXN0aW5hdGlvbkNoYW5u
ZWxzID0gYWRvcHRBcnJheVB0cihuZXcgZmxvYXQqIFtudW1iZXJPZkNoYW5uZWxzXSk7CisKKyAg
ICBtX2NvbXByZXNzb3Iuc2V0TnVtYmVyT2ZDaGFubmVscyhudW1iZXJPZkNoYW5uZWxzKTsKKyAg
ICBtX251bWJlck9mQ2hhbm5lbHMgPSBudW1iZXJPZkNoYW5uZWxzOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuaAppbmRleCBlMDEx
NWVlMjczZTQzMGY5YzI4ZjU2NGJmYzljYzQ0ZWJjNjZjNjllLi5kOTQ5ZjMwNjg5ZjBhODVmNzVl
M2MwMzEzNzlkODZkNTc3ZWRlOTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuaApAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUg
IkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oIgogI2luY2x1ZGUgIlplcm9Qb2xlLmgiCiAKKyNp
bmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBBdWRpb0J1czsKQEAgLTYyLDI1ICs2NCwyNiBAQCBwdWJsaWM6CiAgICAgICAgIFBhcmFtTGFz
dAogICAgIH07CiAKLSAgICBEeW5hbWljc0NvbXByZXNzb3IoYm9vbCBpc1N0ZXJlbywgZmxvYXQg
c2FtcGxlUmF0ZSk7CisgICAgRHluYW1pY3NDb21wcmVzc29yKGZsb2F0IHNhbXBsZVJhdGUsIHVu
c2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpOwogCiAgICAgdm9pZCBwcm9jZXNzKGNvbnN0IEF1ZGlv
QnVzKiBzb3VyY2VCdXMsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvbkJ1cywgdW5zaWduZWQgZnJhbWVz
VG9Qcm9jZXNzKTsKICAgICB2b2lkIHJlc2V0KCk7CisgICAgdm9pZCBzZXROdW1iZXJPZkNoYW5u
ZWxzKHVuc2lnbmVkKTsKIAogICAgIGZsb2F0IHBhcmFtZXRlclZhbHVlKHVuc2lnbmVkIHBhcmFt
ZXRlcklEKTsKIAotICAgIGJvb2wgaXNTdGVyZW8oKSBjb25zdCB7IHJldHVybiBtX2lzU3RlcmVv
OyB9CiAgICAgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsg
fQogICAgIGZsb2F0IG55cXVpc3QoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGUgLyAyOyB9
CiAKIHByb3RlY3RlZDoKKyAgICB1bnNpZ25lZCBtX251bWJlck9mQ2hhbm5lbHM7CisKICAgICAv
LyBtX3BhcmFtZXRlcnMgaG9sZHMgdGhlIHR3ZWFrYWJsZSBjb21wcmVzc29yIHBhcmFtZXRlcnMu
CiAgICAgLy8gRklYTUU6IGV4cG9zZSBzb21lIG9mIHRoZSBtb3N0IGltcG9ydGFudCBvbmVzIChz
dWNoIGFzIHRocmVzaG9sZCwgYXR0YWNrLCByZWxlYXNlKQogICAgIC8vIGFzIER5bmFtaWNzQ29t
cHJlc3Nvck5vZGUgYXR0cmlidXRlcy4KICAgICBmbG9hdCBtX3BhcmFtZXRlcnNbUGFyYW1MYXN0
XTsKICAgICB2b2lkIGluaXRpYWxpemVQYXJhbWV0ZXJzKCk7CiAKLSAgICBib29sIG1faXNTdGVy
ZW87CiAgICAgZmxvYXQgbV9zYW1wbGVSYXRlOwogCiAgICAgLy8gRW1waGFzaXMgZmlsdGVyIGNv
bnRyb2xzLgpAQCAtODgsMTEgKzkxLDE2IEBAIHByb3RlY3RlZDoKICAgICBmbG9hdCBtX2xhc3RB
bmNob3I7CiAgICAgZmxvYXQgbV9sYXN0RmlsdGVyU3RhZ2VHYWluOwogCi0gICAgLy8gRW1waGFz
aXMgZmlsdGVycy4KLSAgICBaZXJvUG9sZSBtX3ByZUZpbHRlcls0XTsKLSAgICBaZXJvUG9sZSBt
X3ByZUZpbHRlclJbNF07Ci0gICAgWmVyb1BvbGUgbV9wb3N0RmlsdGVyWzRdOwotICAgIFplcm9Q
b2xlIG1fcG9zdEZpbHRlclJbNF07CisgICAgdHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBaZXJv
UG9sZSBmaWx0ZXJzWzRdOworICAgIH0gWmVyb1BvbGVGaWx0ZXJQYWNrNDsKKworICAgIC8vIFBl
ci1jaGFubmVsIGVtcGhhc2lzIGZpbHRlcnMuCisgICAgVmVjdG9yPE93blB0cjxaZXJvUG9sZUZp
bHRlclBhY2s0PiA+IG1fcHJlRmlsdGVyUGFja3M7CisgICAgVmVjdG9yPE93blB0cjxaZXJvUG9s
ZUZpbHRlclBhY2s0PiA+IG1fcG9zdEZpbHRlclBhY2tzOworCisgICAgT3duQXJyYXlQdHI8Y29u
c3QgZmxvYXQqPiBtX3NvdXJjZUNoYW5uZWxzOworICAgIE93bkFycmF5UHRyPGZsb2F0Kj4gbV9k
ZXN0aW5hdGlvbkNoYW5uZWxzOwogCiAgICAgdm9pZCBzZXRFbXBoYXNpc1N0YWdlUGFyYW1ldGVy
cyh1bnNpZ25lZCBzdGFnZUluZGV4LCBmbG9hdCBnYWluLCBmbG9hdCBub3JtYWxpemVkRnJlcXVl
bmN5IC8qIDAgLT4gMSAqLyk7CiAgICAgdm9pZCBzZXRFbXBoYXNpc1BhcmFtZXRlcnMoZmxvYXQg
Z2FpbiwgZmxvYXQgYW5jaG9yRnJlcSwgZmxvYXQgZmlsdGVyU3RhZ2VSYXRpbyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJu
ZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29y
S2VybmVsLmNwcAppbmRleCBhMzIyYTMzMDI1OTYwYzg5Y2I2YmUwNmMyNWI4NzczNzZkYTllMzZj
Li4zZTk0M2QxMjA3NTdhYTdlOWZmMTZlYjU0NTA3YmNhZDU1YzQzOGIxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktl
cm5lbC5jcHAKQEAgLTUyLDIwICs1MiwzMCBAQCBzdGF0aWMgZmxvYXQgc2F0dXJhdGUoZmxvYXQg
eCwgZmxvYXQgaykKICAgICByZXR1cm4gMSAtIGV4cCgtayAqIHgpOwogfQogCi1EeW5hbWljc0Nv
bXByZXNzb3JLZXJuZWw6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbChmbG9hdCBzYW1wbGVSYXRl
KQorRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwoZmxv
YXQgc2FtcGxlUmF0ZSwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscykKICAgICA6IG1fc2FtcGxl
UmF0ZShzYW1wbGVSYXRlKQogICAgICwgbV9sYXN0UHJlRGVsYXlGcmFtZXMoRGVmYXVsdFByZURl
bGF5RnJhbWVzKQotICAgICwgbV9wcmVEZWxheUJ1ZmZlckwoTWF4UHJlRGVsYXlGcmFtZXMpCi0g
ICAgLCBtX3ByZURlbGF5QnVmZmVyUihNYXhQcmVEZWxheUZyYW1lcykKICAgICAsIG1fcHJlRGVs
YXlSZWFkSW5kZXgoMCkKICAgICAsIG1fcHJlRGVsYXlXcml0ZUluZGV4KERlZmF1bHRQcmVEZWxh
eUZyYW1lcykKIHsKKyAgICBzZXROdW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5lbHMpOwor
CiAgICAgLy8gSW5pdGlhbGl6ZXMgbW9zdCBtZW1iZXIgdmFyaWFibGVzCiAgICAgcmVzZXQoKTsK
ICAgICAKICAgICBtX21ldGVyaW5nUmVsZWFzZUsgPSBkaXNjcmV0ZVRpbWVDb25zdGFudEZvclNh
bXBsZVJhdGUobWV0ZXJpbmdSZWxlYXNlVGltZUNvbnN0YW50LCBzYW1wbGVSYXRlKTsKIH0KIAor
dm9pZCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnNldE51bWJlck9mQ2hhbm5lbHModW5zaWdu
ZWQgbnVtYmVyT2ZDaGFubmVscykKK3sKKyAgICBpZiAobV9wcmVEZWxheUJ1ZmZlcnMuc2l6ZSgp
ID09IG51bWJlck9mQ2hhbm5lbHMpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJlRGVsYXlC
dWZmZXJzLmNsZWFyKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hh
bm5lbHM7ICsraSkKKyAgICAgICAgbV9wcmVEZWxheUJ1ZmZlcnMuYXBwZW5kKGFkb3B0UHRyKG5l
dyBBdWRpb0Zsb2F0QXJyYXkoTWF4UHJlRGVsYXlGcmFtZXMpKSk7Cit9CisKIHZvaWQgRHluYW1p
Y3NDb21wcmVzc29yS2VybmVsOjpzZXRQcmVEZWxheVRpbWUoZmxvYXQgcHJlRGVsYXlUaW1lKQog
ewogICAgIC8vIFJlLWNvbmZpZ3VyZSBsb29rLWFoZWFkIHNlY3Rpb24gcHJlLWRlbGF5IGlmIGRl
bGF5IHRpbWUgaGFzIGNoYW5nZWQuCkBAIC03NSwxNyArODUsMTcgQEAgdm9pZCBEeW5hbWljc0Nv
bXByZXNzb3JLZXJuZWw6OnNldFByZURlbGF5VGltZShmbG9hdCBwcmVEZWxheVRpbWUpCiAgICAg
ICAgIAogICAgIGlmIChtX2xhc3RQcmVEZWxheUZyYW1lcyAhPSBwcmVEZWxheUZyYW1lcykgewog
ICAgICAgICBtX2xhc3RQcmVEZWxheUZyYW1lcyA9IHByZURlbGF5RnJhbWVzOwotICAgICAgICBt
X3ByZURlbGF5QnVmZmVyTC56ZXJvKCk7Ci0gICAgICAgIG1fcHJlRGVsYXlCdWZmZXJSLnplcm8o
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJlRGVsYXlCdWZmZXJzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgbV9wcmVEZWxheUJ1ZmZlcnNbaV0tPnplcm8oKTsKKwog
ICAgICAgICBtX3ByZURlbGF5UmVhZEluZGV4ID0gMDsKICAgICAgICAgbV9wcmVEZWxheVdyaXRl
SW5kZXggPSBwcmVEZWxheUZyYW1lczsKICAgICB9CiB9CiAKLXZvaWQgRHluYW1pY3NDb21wcmVz
c29yS2VybmVsOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2VMLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uTCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBzb3VyY2VSLCAvKiBzdGVy
ZW8tbGlua2VkICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9h
dCogZGVzdGluYXRpb25SLAordm9pZCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnByb2Nlc3Mo
ZmxvYXQqIHNvdXJjZUNoYW5uZWxzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbG9hdCogZGVzdGluYXRpb25DaGFubmVsc1tdLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lc1RvUHJvY2VzcywK
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZGJUaHJlc2hv
bGQsCkBAIC0xMDIsNyArMTEyLDggQEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnBy
b2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZUwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCByZWxlYXNlWm9uZTQKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICkKIHsKLSAgICBib29sIGlzU3RlcmVvID0gZGVzdGluYXRpb25SOworICAg
IEFTU0VSVChtX3ByZURlbGF5QnVmZmVycy5zaXplKCkgPT0gbnVtYmVyT2ZDaGFubmVscyk7CisK
ICAgICBmbG9hdCBzYW1wbGVSYXRlID0gdGhpcy0+c2FtcGxlUmF0ZSgpOwogCiAgICAgZmxvYXQg
ZHJ5TWl4ID0gMSAtIGVmZmVjdEJsZW5kOwpAQCAtMTY0LDYgKzE3NSw3IEBAIHZvaWQgRHluYW1p
Y3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2VMLAogCiAgICAg
Y29uc3QgaW50IG5EaXZpc2lvbnMgPSBmcmFtZXNUb1Byb2Nlc3MgLyBuRGl2aXNpb25GcmFtZXM7
CiAKKyAgICB1bnNpZ25lZCBmcmFtZUluZGV4ID0gMDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG5EaXZpc2lvbnM7ICsraSkgewogICAgICAgICAvLyB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn4KICAgICAgICAgLy8gQ2FsY3VsYXRlIGRlc2lyZWQgZ2FpbgpAQCAtMjQ3LDggKzI1
OSw2IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKGNvbnN0IGZsb2F0
KiBzb3VyY2VMLAogICAgICAgICAvLyB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4K
IAogICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdCogZGVsYXlCdWZmZXJMID0gbV9wcmVEZWxh
eUJ1ZmZlckwuZGF0YSgpOwotICAgICAgICAgICAgZmxvYXQqIGRlbGF5QnVmZmVyUiA9IG1fcHJl
RGVsYXlCdWZmZXJSLmRhdGEoKTsKICAgICAgICAgICAgIGludCBwcmVEZWxheVJlYWRJbmRleCA9
IG1fcHJlRGVsYXlSZWFkSW5kZXg7CiAgICAgICAgICAgICBpbnQgcHJlRGVsYXlXcml0ZUluZGV4
ID0gbV9wcmVEZWxheVdyaXRlSW5kZXg7CiAgICAgICAgICAgICBmbG9hdCBkZXRlY3RvckF2ZXJh
Z2UgPSBtX2RldGVjdG9yQXZlcmFnZTsKQEAgLTI1NiwzMiArMjY2LDE5IEBAIHZvaWQgRHluYW1p
Y3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2VMLAogCiAgICAg
ICAgICAgICBpbnQgbG9vcEZyYW1lcyA9IG5EaXZpc2lvbkZyYW1lczsKICAgICAgICAgICAgIHdo
aWxlIChsb29wRnJhbWVzLS0pIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb21wcmVzc29ySW5w
dXQ7Ci0gICAgICAgICAgICAgICAgZmxvYXQgaW5wdXRMOwotICAgICAgICAgICAgICAgIGZsb2F0
IGlucHV0UiA9IDA7CisgICAgICAgICAgICAgICAgZmxvYXQgY29tcHJlc3NvcklucHV0ID0gMDsK
IAogICAgICAgICAgICAgICAgIC8vIFByZWRlbGF5IHNpZ25hbCwgY29tcHV0aW5nIGNvbXByZXNz
aW9uIGFtb3VudCBmcm9tIHVuLWRlbGF5ZWQgdmVyc2lvbi4KLSAgICAgICAgICAgICAgICBpZiAo
aXNTdGVyZW8pIHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgdW5kZWxheWVkTCA9ICpzb3Vy
Y2VMKys7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IHVuZGVsYXllZFIgPSAqc291cmNlUisr
OwotCi0gICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb3JJbnB1dCA9IDAuNWYgKiAodW5kZWxh
eWVkTCArIHVuZGVsYXllZFIpOwotCi0gICAgICAgICAgICAgICAgICAgIGlucHV0TCA9IGRlbGF5
QnVmZmVyTFtwcmVEZWxheVJlYWRJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgIGlucHV0UiA9
IGRlbGF5QnVmZmVyUltwcmVEZWxheVJlYWRJbmRleF07Ci0KLSAgICAgICAgICAgICAgICAgICAg
ZGVsYXlCdWZmZXJMW3ByZURlbGF5V3JpdGVJbmRleF0gPSB1bmRlbGF5ZWRMOwotICAgICAgICAg
ICAgICAgICAgICBkZWxheUJ1ZmZlclJbcHJlRGVsYXlXcml0ZUluZGV4XSA9IHVuZGVsYXllZFI7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Nv
cklucHV0ID0gKnNvdXJjZUwrKzsKLQotICAgICAgICAgICAgICAgICAgICBpbnB1dEwgPSBkZWxh
eUJ1ZmZlckxbcHJlRGVsYXlSZWFkSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICBkZWxheUJ1
ZmZlckxbcHJlRGVsYXlXcml0ZUluZGV4XSA9IGNvbXByZXNzb3JJbnB1dDsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZsb2F0KiBkZWxheUJ1ZmZlciA9IG1fcHJlRGVsYXlCdWZmZXJz
W2ldLT5kYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IHVuZGVsYXllZFNvdXJjZSA9
IHNvdXJjZUNoYW5uZWxzW2ldW2ZyYW1lSW5kZXhdOworICAgICAgICAgICAgICAgICAgICBkZWxh
eUJ1ZmZlcltwcmVEZWxheVdyaXRlSW5kZXhdID0gdW5kZWxheWVkU291cmNlOworCisgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IGFic1VuZGVsYXllZFNvdXJjZSA9IHVuZGVsYXllZFNvdXJjZSA+
IDAgPyB1bmRlbGF5ZWRTb3VyY2UgOiAtdW5kZWxheWVkU291cmNlOworICAgICAgICAgICAgICAg
ICAgICBpZiAoY29tcHJlc3NvcklucHV0IDwgYWJzVW5kZWxheWVkU291cmNlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgY29tcHJlc3NvcklucHV0ID0gYWJzVW5kZWxheWVkU291cmNlOwogICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHByZURlbGF5UmVhZEluZGV4ID0gKHBy
ZURlbGF5UmVhZEluZGV4ICsgMSkgJiBNYXhQcmVEZWxheUZyYW1lc01hc2s7Ci0gICAgICAgICAg
ICAgICAgcHJlRGVsYXlXcml0ZUluZGV4ID0gKHByZURlbGF5V3JpdGVJbmRleCArIDEpICYgTWF4
UHJlRGVsYXlGcmFtZXNNYXNrOwotCiAgICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHNoYXBl
ZCBwb3dlciBvbiB1bmRlbGF5ZWQgaW5wdXQuCiAKICAgICAgICAgICAgICAgICBmbG9hdCBzY2Fs
ZWRJbnB1dCA9IGNvbXByZXNzb3JJbnB1dDsKQEAgLTMzNywxNyArMzM0LDE0IEBAIHZvaWQgRHlu
YW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2VMLAogICAg
ICAgICAgICAgICAgICAgICBtX21ldGVyaW5nR2FpbiArPSAoZGJSZWFsR2FpbiAtIG1fbWV0ZXJp
bmdHYWluKSAqIG1fbWV0ZXJpbmdSZWxlYXNlSzsKIAogICAgICAgICAgICAgICAgIC8vIEFwcGx5
IGZpbmFsIGdhaW4uCi0gICAgICAgICAgICAgICAgaWYgKGlzU3RlcmVvKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGZsb2F0IG91dHB1dEwgPSBpbnB1dEw7Ci0gICAgICAgICAgICAgICAgICAgIGZs
b2F0IG91dHB1dFIgPSBpbnB1dFI7Ci0KLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0TCAqPSB0
b3RhbEdhaW47Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dFIgKj0gdG90YWxHYWluOworICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQqIGRlbGF5QnVmZmVyID0gbV9wcmVEZWxh
eUJ1ZmZlcnNbaV0tPmRhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25DaGFu
bmVsc1tpXVtmcmFtZUluZGV4XSA9IGRlbGF5QnVmZmVyW3ByZURlbGF5UmVhZEluZGV4XSAqIHRv
dGFsR2FpbjsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgKmRlc3Rp
bmF0aW9uTCsrID0gb3V0cHV0TDsKLSAgICAgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUisr
ID0gb3V0cHV0UjsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
KmRlc3RpbmF0aW9uTCsrID0gaW5wdXRMICogdG90YWxHYWluOworICAgICAgICAgICAgICAgIGZy
YW1lSW5kZXgrKzsKKyAgICAgICAgICAgICAgICBwcmVEZWxheVJlYWRJbmRleCA9IChwcmVEZWxh
eVJlYWRJbmRleCArIDEpICYgTWF4UHJlRGVsYXlGcmFtZXNNYXNrOworICAgICAgICAgICAgICAg
IHByZURlbGF5V3JpdGVJbmRleCA9IChwcmVEZWxheVdyaXRlSW5kZXggKyAxKSAmIE1heFByZURl
bGF5RnJhbWVzTWFzazsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gTG9jYWxzIGJh
Y2sgdG8gbWVtYmVyIHZhcmlhYmxlcy4KQEAgLTM2Niw4ICszNjAsOSBAQCB2b2lkIER5bmFtaWNz
Q29tcHJlc3Nvcktlcm5lbDo6cmVzZXQoKQogICAgIG1fbWV0ZXJpbmdHYWluID0gMTsKIAogICAg
IC8vIFByZWRlbGF5IHNlY3Rpb24uCi0gICAgbV9wcmVEZWxheUJ1ZmZlckwuemVybygpOwotICAg
IG1fcHJlRGVsYXlCdWZmZXJSLnplcm8oKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9wcmVEZWxheUJ1ZmZlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJlRGVsYXlCdWZmZXJz
W2ldLT56ZXJvKCk7CisKICAgICBtX3ByZURlbGF5UmVhZEluZGV4ID0gMDsKICAgICBtX3ByZURl
bGF5V3JpdGVJbmRleCA9IERlZmF1bHRQcmVEZWxheUZyYW1lczsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuaApp
bmRleCBjZjMxOWIzNzhhZGViNTkwNjI5NTNkZWFiMDkyZTMzMzljNmY2ODgwLi5kYThlNGM4YmVl
OWM1ZDE3OWE4ODQ0MDcwNWUyMmMzZjYxOTlkYTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuaApAQCAtMzEs
MTcgKzMxLDIxIEBACiAKICNpbmNsdWRlICJBdWRpb0FycmF5LmgiCiAKKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwgewogcHVibGljOgotICAgIER5
bmFtaWNzQ29tcHJlc3Nvcktlcm5lbChmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICBEeW5hbWljc0Nv
bXByZXNzb3JLZXJuZWwoZmxvYXQgc2FtcGxlUmF0ZSwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVs
cyk7CisKKyAgICB2b2lkIHNldE51bWJlck9mQ2hhbm5lbHModW5zaWduZWQpOwogCiAgICAgLy8g
UGVyZm9ybXMgc3RlcmVvLWxpbmtlZCBjb21wcmVzc2lvbi4KLSAgICB2b2lkIHByb2Nlc3MoY29u
c3QgZmxvYXQgKnNvdXJjZUwsCi0gICAgICAgICAgICAgICAgIGZsb2F0ICpkZXN0aW5hdGlvbkws
Ci0gICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0ICpzb3VyY2VSLAotICAgICAgICAgICAgICAg
ICBmbG9hdCAqZGVzdGluYXRpb25SLAorICAgIHZvaWQgcHJvY2VzcyhmbG9hdCogc291cmNlQ2hh
bm5lbHNbXSwKKyAgICAgICAgICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uQ2hhbm5lbHNbXSwK
KyAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywKICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgZnJhbWVzVG9Qcm9jZXNzLAogCiAgICAgICAgICAgICAgICAgIGZsb2F0
IGRiVGhyZXNob2xkLApAQCAtNjYsNyArNzAsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAg
ICBmbG9hdCBtX3NhbXBsZVJhdGU7Ci0gICAgCisKICAgICBmbG9hdCBtX2RldGVjdG9yQXZlcmFn
ZTsKICAgICBmbG9hdCBtX2NvbXByZXNzb3JHYWluOwogCkBAIC04MSw4ICs4NSw3IEBAIHByb3Rl
Y3RlZDoKICAgICB1bnNpZ25lZCBtX2xhc3RQcmVEZWxheUZyYW1lczsKICAgICB2b2lkIHNldFBy
ZURlbGF5VGltZShmbG9hdCk7CiAKLSAgICBBdWRpb0Zsb2F0QXJyYXkgbV9wcmVEZWxheUJ1ZmZl
ckw7Ci0gICAgQXVkaW9GbG9hdEFycmF5IG1fcHJlRGVsYXlCdWZmZXJSOworICAgIFZlY3RvcjxP
d25QdHI8QXVkaW9GbG9hdEFycmF5PiA+IG1fcHJlRGVsYXlCdWZmZXJzOwogICAgIGludCBtX3By
ZURlbGF5UmVhZEluZGV4OwogICAgIGludCBtX3ByZURlbGF5V3JpdGVJbmRleDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcAppbmRl
eCBlYThiNTg5MjIzNTZhYTEzNjUxMzJhZWYzMWZhYWY2MDNmNzQ1NDI3Li4yNjM3NTU1OTVjZTNk
OGU1OTk4N2ZkODAyYmE3OTI5YTg5NTg2M2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcApAQCAtMzMsMTMgKzMzLDE2IEBACiAj
aW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCiAjaW5jbHVkZSAiRHluYW1pY3NDb21wcmVzc29y
LmgiCiAKKy8vIFNldCBvdXRwdXQgdG8gc3RlcmVvIGJ5IGRlZmF1bHQuCitzdGF0aWMgY29uc3Qg
dW5zaWduZWQgZGVmYXVsdE51bWJlck9mT3V0cHV0Q2hhbm5lbHMgPSAyOworCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OkR5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIDogQXVkaW9O
b2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCiB7CiAgICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1
ZGlvTm9kZUlucHV0KHRoaXMpKSk7Ci0gICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05v
ZGVPdXRwdXQodGhpcywgMikpKTsKKyAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9k
ZU91dHB1dCh0aGlzLCBkZWZhdWx0TnVtYmVyT2ZPdXRwdXRDaGFubmVscykpKTsKICAgICAKICAg
ICBzZXROb2RlVHlwZShOb2RlVHlwZUR5bmFtaWNzQ29tcHJlc3Nvcik7CiAgICAgCkBAIC03MCw3
ICs3Myw3IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yTm9kZTo6aW5pdGlhbGl6ZSgpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEF1ZGlvTm9kZTo6aW5pdGlhbGl6ZSgpOyAgICAKLSAgICBtX2R5
bmFtaWNzQ29tcHJlc3NvciA9IGFkb3B0UHRyKG5ldyBEeW5hbWljc0NvbXByZXNzb3IodHJ1ZSwg
c2FtcGxlUmF0ZSgpKSk7CisgICAgbV9keW5hbWljc0NvbXByZXNzb3IgPSBhZG9wdFB0cihuZXcg
RHluYW1pY3NDb21wcmVzc29yKHNhbXBsZVJhdGUoKSwgZGVmYXVsdE51bWJlck9mT3V0cHV0Q2hh
bm5lbHMpKTsKIH0KIAogdm9pZCBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjp1bmluaXRpYWxpemUo
KQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>