<?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>46299</bug_id>
          
          <creation_ts>2010-09-22 13:31:24 -0700</creation_ts>
          <short_desc>Add HRTFPanner files</short_desc>
          <delta_ts>2010-10-08 19:30:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>0</everconfirmed>
          <reporter name="Chris Rogers">crogers</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jamesr</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kbr</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>283205</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-22 13:31:24 -0700</bug_when>
    <thetext>Add HRTFPanner files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283206</commentid>
    <comment_count>1</comment_count>
      <attachid>68431</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-22 13:32:58 -0700</bug_when>
    <thetext>Created attachment 68431
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283207</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-22 13:33:59 -0700</bug_when>
    <thetext>Spatialized panning algorithm.  See more details in the audio specification:
http://chromium.googlecode.com/svn/trunk/samples/audio/specification/specification.html#Spatialization-section</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284835</commentid>
    <comment_count>3</comment_count>
      <attachid>68786</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-24 16:26:50 -0700</bug_when>
    <thetext>Created attachment 68786
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284836</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-24 16:28:01 -0700</bug_when>
    <thetext>Uploaded new patch to address small change in HRTFDatabaseLoader API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285770</commentid>
    <comment_count>5</comment_count>
      <attachid>68967</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-27 14:57:55 -0700</bug_when>
    <thetext>Created attachment 68967
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285967</commentid>
    <comment_count>6</comment_count>
      <attachid>69002</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-27 17:53:03 -0700</bug_when>
    <thetext>Created attachment 69002
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285970</commentid>
    <comment_count>7</comment_count>
      <attachid>69002</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-27 17:57:58 -0700</bug_when>
    <thetext>Comment on attachment 69002
Patch

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

&gt; WebCore/platform/audio/HRTFPanner.cpp:47
&gt; +const double HRTFPanner::MaxDelayTime = 0.012; // 12ms

why 12?

add the unit to the name - looks like it&apos;s seconds here so perhaps MaxDelayTimeSeconds

&gt; WebCore/platform/audio/HRTFPanner.cpp:170
&gt; +        // If we have a stereo input, implement a strange kind of panning with left source processed by left HRTF, and right source by right HRTF.

Should it be an error at a higher level to connect a stereo input to this sort of node?  That is an odd sounding pan.

&gt; WebCore/platform/audio/HRTFPanner.h:43
&gt; +    HRTFPanner(double sampleRate)

one-arg constructor needs to be explicit

could the constructor definition be moved to the .cpp? I&apos;m a little concerned about inlining the c&apos;tor for FFTConvolver and DelayDSPKernel without know how big they are

please declare a virtual d&apos;tor and define it in the .cpp

&gt; WebCore/platform/audio/HRTFPanner.h:71
&gt; +    // For de-zippering
&gt; +    bool m_isFirstRender;
&gt; +    int m_azimuthIndex;

What&apos;s de-zippering?

Comments should be sentences</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286567</commentid>
    <comment_count>8</comment_count>
      <attachid>69117</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-28 15:14:13 -0700</bug_when>
    <thetext>Created attachment 69117
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286571</commentid>
    <comment_count>9</comment_count>
      <attachid>69002</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-28 15:20:51 -0700</bug_when>
    <thetext>Comment on attachment 69002
Patch

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

&gt;&gt; WebCore/platform/audio/HRTFPanner.cpp:47
&gt;&gt; +const double HRTFPanner::MaxDelayTime = 0.012; // 12ms
&gt; 
&gt; why 12?
&gt; 
&gt; add the unit to the name - looks like it&apos;s seconds here so perhaps MaxDelayTimeSeconds

FIXED: I actually measured the largest delay time in all the HRTFKernels and picked a good round value higher than this.  I added a comment here.

&gt;&gt; WebCore/platform/audio/HRTFPanner.cpp:170
&gt;&gt; +        // If we have a stereo input, implement a strange kind of panning with left source processed by left HRTF, and right source by right HRTF.
&gt; 
&gt; Should it be an error at a higher level to connect a stereo input to this sort of node?  That is an odd sounding pan.

No, I don&apos;t think so.  Although it is more unusual than panning a mono source, it is expected to be able to pan a stereo source to stereo as well, and it results in a reasonable effect.

&gt;&gt; WebCore/platform/audio/HRTFPanner.h:43
&gt;&gt; +    HRTFPanner(double sampleRate)
&gt; 
&gt; one-arg constructor needs to be explicit
&gt; 
&gt; could the constructor definition be moved to the .cpp? I&apos;m a little concerned about inlining the c&apos;tor for FFTConvolver and DelayDSPKernel without know how big they are
&gt; 
&gt; please declare a virtual d&apos;tor and define it in the .cpp

FIXED: I don&apos;t think the virtual destructor is necessary since it&apos;s empty and will be implicitly generated, but I added it anyway.

&gt;&gt; WebCore/platform/audio/HRTFPanner.h:71
&gt;&gt; +    int m_azimuthIndex;
&gt; 
&gt; What&apos;s de-zippering?
&gt; 
&gt; Comments should be sentences

FIXED</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286611</commentid>
    <comment_count>10</comment_count>
      <attachid>69117</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-28 16:15:22 -0700</bug_when>
    <thetext>Comment on attachment 69117
Patch

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

Nearly there, few more small things.  Where is DelayDSPKernel defined? I don&apos;t see it in my tree.

&gt; WebCore/platform/audio/HRTFPanner.cpp:117
&gt; +    // IRCAM HRTF azimuths which we&apos;re loading are reversed from the panner&apos;s notion...

Still not technically a sentence.  If this is normalization for the way our data files are formatted, why is it being done here?

&gt; WebCore/platform/audio/HRTFPanner.cpp:121
&gt; +    if (azimuth &lt; 0)
&gt; +        azimuth += 360.0; // make positive

Not a sentence.  Why is this needed?

&gt; WebCore/platform/audio/HRTFPanner.cpp:141
&gt; +    bool isAzimuthGood = azimuth &gt;= 0.0 &amp;&amp; azimuth &lt;= 360.0;
&gt; +    ASSERT(isAzimuthGood);
&gt; +    if (!isAzimuthGood) {
&gt; +        outputBus-&gt;zero();
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    int numberOfAzimuths = database-&gt;numberOfAzimuths();
&gt; +    const double angleBetweenAzimuths = 360.0 / numberOfAzimuths;
&gt; +
&gt; +    // Calculate the azimuth index and the blend (0 -&gt; 1) for interpolation.
&gt; +    double desiredAzimuthIndexF = azimuth / angleBetweenAzimuths;
&gt; +    int desiredAzimuthIndex = static_cast&lt;int&gt;(desiredAzimuthIndexF);
&gt; +    double azimuthBlend = desiredAzimuthIndexF - static_cast&lt;double&gt;(desiredAzimuthIndex);
&gt; +    
&gt; +    // We don&apos;t immediately start using this azimuth index, but instead approach this index from the last index we rendered at.
&gt; +    // This minimizes the clicks and graininess for moving sources which occur otherwise.
&gt; +    desiredAzimuthIndex = max(0, desiredAzimuthIndex);
&gt; +    desiredAzimuthIndex = min(numberOfAzimuths - 1, desiredAzimuthIndex);

We don&apos;t typically use suffixes like F for floating point values in WebKit.  This segment feels like it should be in a helper function (since this function is a bit on the long side).  Are the min/max needed given that we&apos;ve already checked that azimuth is in the range [0.0,360.0] ?

&gt; WebCore/platform/audio/HRTFPanner.cpp:174
&gt; +        // Get the HRTFKernels and interpolated delays.
&gt; +    

nit: don&apos;t need the extra newline here

&gt; WebCore/platform/audio/HRTFPanner.cpp:198
&gt; +        // Normally, we&apos;ll just be dealing with mono sources.
&gt; +        // If we have a stereo input, implement a strange kind of panning with left source processed by left HRTF, and right source by right HRTF.
&gt; +        AudioChannel* channelL = inputBus-&gt;channelByType(AudioBus::ChannelLeft);
&gt; +        AudioChannel* channelR = numInputChannels &gt; 1 ? inputBus-&gt;channelByType(AudioBus::ChannelRight) : 0;
&gt; +
&gt; +        // Get source and destination pointers.
&gt; +        float* sourceL = channelL-&gt;data();
&gt; +        float* sourceR = numInputChannels &gt; 1 ? channelR-&gt;data() : sourceL;
&gt; +        float* destinationL = outputBus-&gt;channelByType(AudioBus::ChannelLeft)-&gt;data();
&gt; +        float* destinationR = outputBus-&gt;channelByType(AudioBus::ChannelRight)-&gt;data();

Should some of this be outside the loop?

&gt; WebCore/platform/audio/HRTFPanner.h:32
&gt; +#include &quot;DelayProcessor.h&quot;

I don&apos;t see this header in my checkout.  Does it define DelayDSPKernel?  Should you include DelayDSPKernel.h directly (once it exists)?

&gt; WebCore/platform/audio/HRTFPanner.h:39
&gt; +class FFTFrame;
&gt; +class HRTFDatabase;

This forward declarations aren&apos;t needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286672</commentid>
    <comment_count>11</comment_count>
      <attachid>69145</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-28 17:47:10 -0700</bug_when>
    <thetext>Created attachment 69145
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286674</commentid>
    <comment_count>12</comment_count>
      <attachid>69117</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-28 17:58:55 -0700</bug_when>
    <thetext>Comment on attachment 69117
Patch

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

&gt;&gt; WebCore/platform/audio/HRTFPanner.cpp:117
&gt;&gt; +    // IRCAM HRTF azimuths which we&apos;re loading are reversed from the panner&apos;s notion...
&gt; 
&gt; Still not technically a sentence.  If this is normalization for the way our data files are formatted, why is it being done here?

I can suggest two ways to attack this problem and I&apos;ll leave it up to you:
1) improve the comment with a FIXME to re-bake the HRTF data files with the azimuths not reversed.  We have to re-bake the files anyway for the file-size reduction, bass boost, and maybe other things.
2) remove this code from here, but do the reversal in HRTFElevation and add a similar comment as proposed in (1) there.

&gt;&gt; WebCore/platform/audio/HRTFPanner.cpp:121
&gt;&gt; +        azimuth += 360.0; // make positive
&gt; 
&gt; Not a sentence.  Why is this needed?

I improved the comment.

&gt;&gt; WebCore/platform/audio/HRTFPanner.cpp:141
&gt;&gt; +    desiredAzimuthIndex = min(numberOfAzimuths - 1, desiredAzimuthIndex);
&gt; 
&gt; We don&apos;t typically use suffixes like F for floating point values in WebKit.  This segment feels like it should be in a helper function (since this function is a bit on the long side).  Are the min/max needed given that we&apos;ve already checked that azimuth is in the range [0.0,360.0] ?

I created a new method called calculateDesiredAzimuthIndexAndBlend().
I renamed desiredAzimuthIndexF to desiredAzimuthIndexFloat
I&apos;d rather still do the min/max check since this is now moved into a separate method and is not inefficient.

&gt;&gt; WebCore/platform/audio/HRTFPanner.cpp:174
&gt;&gt; +    
&gt; 
&gt; nit: don&apos;t need the extra newline here

FIXED

&gt;&gt; WebCore/platform/audio/HRTFPanner.cpp:198
&gt;&gt; +        float* destinationR = outputBus-&gt;channelByType(AudioBus::ChannelRight)-&gt;data();
&gt; 
&gt; Should some of this be outside the loop?

FIXED

&gt;&gt; WebCore/platform/audio/HRTFPanner.h:32
&gt;&gt; +#include &quot;DelayProcessor.h&quot;
&gt; 
&gt; I don&apos;t see this header in my checkout.  Does it define DelayDSPKernel?  Should you include DelayDSPKernel.h directly (once it exists)?

I changed the code to include the header file directly.
It is not yet landed in trunk, but you can view the interface here:
https://svn.webkit.org/repository/webkit/branches/audio/WebCore/webaudio/DelayDSPKernel.h
The DelayDSPKernel implementation is not yet ready for code review, but the interface used by HRTFPanner is simple.

&gt;&gt; WebCore/platform/audio/HRTFPanner.h:39
&gt;&gt; +class HRTFDatabase;
&gt; 
&gt; This forward declarations aren&apos;t needed.

FIXED</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286676</commentid>
    <comment_count>13</comment_count>
      <attachid>69146</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-28 18:00:30 -0700</bug_when>
    <thetext>Created attachment 69146
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291964</commentid>
    <comment_count>14</comment_count>
      <attachid>69146</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-10-08 16:57:24 -0700</bug_when>
    <thetext>Comment on attachment 69146
Patch

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

Sorry I took so long to get back to this.  Code looks good, R- just for the license headers

&gt; WebCore/platform/audio/HRTFPanner.cpp:15
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + *
&gt; + * 1.  Redistributions of source code must retain the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer.
&gt; + * 2.  Redistributions in binary form must reproduce the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer in the
&gt; + *     documentation and/or other materials provided with the distribution.
&gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; + *     its contributors may be used to endorse or promote products derived
&gt; + *     from this software without specific prior written permission.

wrong license header

&gt; WebCore/platform/audio/HRTFPanner.h:15
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + *
&gt; + * 1.  Redistributions of source code must retain the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer.
&gt; + * 2.  Redistributions in binary form must reproduce the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer in the
&gt; + *     documentation and/or other materials provided with the distribution.
&gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; + *     its contributors may be used to endorse or promote products derived
&gt; + *     from this software without specific prior written permission.

wrong license header

&gt; WebCore/platform/audio/HRTFPanner.h:57
&gt; +    static const double MaxDelayTimeSeconds;

nit: better to put this in .cpp and not mention it at all in the header since it&apos;s logically file static</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291974</commentid>
    <comment_count>15</comment_count>
      <attachid>70321</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-10-08 17:11:56 -0700</bug_when>
    <thetext>Created attachment 70321
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291975</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-10-08 17:12:46 -0700</bug_when>
    <thetext>Thanks James, I updated the LICENSE and made the constant local to the file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291991</commentid>
    <comment_count>17</comment_count>
      <attachid>70321</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-10-08 17:58:58 -0700</bug_when>
    <thetext>Comment on attachment 70321
Patch

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292025</commentid>
    <comment_count>18</comment_count>
      <attachid>70321</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-08 19:30:37 -0700</bug_when>
    <thetext>Comment on attachment 70321
Patch

Clearing flags on attachment: 70321

Committed r69440: &lt;http://trac.webkit.org/changeset/69440&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292026</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-08 19:30:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68431</attachid>
            <date>2010-09-22 13:32:58 -0700</date>
            <delta_ts>2010-09-24 16:26:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46299-20100922133257.patch</filename>
            <type>text/plain</type>
            <size>13065</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODA3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTAtMDktMjIgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgSFJURlBhbm5lciBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDYyOTkKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgYXVkaW8gQVBJ
IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRG
UGFubmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIUlRGUGFubmVyOjpmZnRTaXpl
Rm9yU2FtcGxlUmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIUlRGUGFubmVyOjpyZXNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjp3cmFwRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6SFJURlBh
bm5lcjo6cGFuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SFJURlBhbm5lcjo6SFJURlBhbm5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpIUlRGUGFubmVyOjpmZnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZQYW5u
ZXI6OnNhbXBsZVJhdGUpOgorCiAyMDEwLTA5LTIyICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9IUlRGUGFubmVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVk
ZSAiSFJURlBhbm5lci5oIgorCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJGRlRD
b252b2x2ZXIuaCIKKyNpbmNsdWRlICJIUlRGRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJIUlRGRGF0
YWJhc2VMb2FkZXIuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8bWF0aC5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKyAKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY29uc3QgZG91YmxlIEhSVEZQYW5uZXI6Ok1heERlbGF5VGltZSA9
IDAuMDEyOyAvLyAxMm1zCisKK3NpemVfdCBIUlRGUGFubmVyOjpmZnRTaXplRm9yU2FtcGxlUmF0
ZShkb3VibGUgc2FtcGxlUmF0ZSkKK3sKKyAgICAvLyBUaGUgSFJURiBpbXB1bHNlIHJlc3BvbnNl
cyAobG9hZGVkIGFzIGF1ZGlvIHJlc291cmNlcykgYXJlIDUxMiBzYW1wbGUtZnJhbWVzIEA0NC4x
S0h6LgorICAgIC8vIEN1cnJlbnRseSwgd2UgdHJ1bmNhdGUgdGhlIGltcHVsc2UgcmVzcG9uc2Vz
IHRvIGhhbGYgdGhpcyBzaXplLCBidXQgYW4gRkZULXNpemUgb2YgdHdpY2UgaW1wdWxzZSByZXNw
b25zZSBzaXplIGlzIG5lZWRlZCAoZm9yIGNvbnZvbHV0aW9uKS4KKyAgICAvLyBTbyBmb3Igc2Ft
cGxlIHJhdGVzIGFyb3VuZCA0NC4xS0h6IGFuIEZGVCBzaXplIG9mIDUxMiBpcyBnb29kLiAgV2Ug
ZG91YmxlIHRoYXQgc2l6ZSBmb3IgaGlnaGVyIHNhbXBsZSByYXRlcy4KKyAgICBBU1NFUlQoc2Ft
cGxlUmF0ZSA+PSA0NDEwMCAmJiBzYW1wbGVSYXRlIDw9IDk2MDAwLjApOworICAgIHJldHVybiAo
c2FtcGxlUmF0ZSA8PSA0ODAwMC4wKSA/IDUxMiA6IDEwMjQ7Cit9CisKK3ZvaWQgSFJURlBhbm5l
cjo6cmVzZXQoKQoreworICAgIG1faXNGaXJzdFJlbmRlciA9IHRydWU7CisgICAgbV9jb252b2x2
ZXJMLnJlc2V0KCk7CisgICAgbV9jb252b2x2ZXJSLnJlc2V0KCk7CisgICAgbV9kZWxheUxpbmVM
LnJlc2V0KCk7CisgICAgbV9kZWxheUxpbmVSLnJlc2V0KCk7Cit9CisKK3N0YXRpYyBib29sIHdy
YXBEaXN0YW5jZShpbnQgaSwgaW50IGosIGludCBsZW5ndGgpCit7CisgICAgaW50IGRpcmVjdERp
c3RhbmNlID0gYWJzKGkgLSBqKTsKKyAgICBpbnQgaW5kaXJlY3REaXN0YW5jZSA9IGxlbmd0aCAt
IGRpcmVjdERpc3RhbmNlOworCisgICAgcmV0dXJuIGluZGlyZWN0RGlzdGFuY2UgPCBkaXJlY3RE
aXN0YW5jZTsKK30KKwordm9pZCBIUlRGUGFubmVyOjpwYW4oZG91YmxlIGRlc2lyZWRBemltdXRo
LCBkb3VibGUgZWxldmF0aW9uLCBBdWRpb0J1cyogaW5wdXRCdXMsIEF1ZGlvQnVzKiBvdXRwdXRC
dXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgdW5zaWduZWQgbnVtSW5wdXRDaGFu
bmVscyA9IGlucHV0QnVzID8gaW5wdXRCdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA6IDA7CisKKyAg
ICBib29sIGlzSW5wdXRHb29kID0gaW5wdXRCdXMgJiYgIG51bUlucHV0Q2hhbm5lbHMgPj0gMSAm
JiBudW1JbnB1dENoYW5uZWxzIDw9IDI7CisgICAgQVNTRVJUKGlzSW5wdXRHb29kKTsKKworICAg
IGJvb2wgaXNPdXRwdXRHb29kID0gb3V0cHV0QnVzICYmIG91dHB1dEJ1cy0+bnVtYmVyT2ZDaGFu
bmVscygpID09IDIgJiYgZnJhbWVzVG9Qcm9jZXNzIDw9IG91dHB1dEJ1cy0+bGVuZ3RoKCk7Cisg
ICAgQVNTRVJUKGlzT3V0cHV0R29vZCk7CisKKyAgICBpZiAoIWlzSW5wdXRHb29kIHx8ICFpc091
dHB1dEdvb2QpIHsKKyAgICAgICAgaWYgKG91dHB1dEJ1cykKKyAgICAgICAgICAgIG91dHB1dEJ1
cy0+emVybygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPEhSVEZEYXRh
YmFzZT4gZGF0YWJhc2UgPSBocnRmRGF0YWJhc2VMb2FkZXIoKS0+ZGF0YWJhc2UoKTsKKyAgICAK
KyAgICBBU1NFUlQoZGF0YWJhc2UuZ2V0KCkpOworICAgIGlmICghZGF0YWJhc2UuZ2V0KCkpIHsK
KyAgICAgICAgaWYgKG91dHB1dEJ1cykKKyAgICAgICAgICAgIG91dHB1dEJ1cy0+emVybygpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSVJDQU0gSFJURiBhemltdXRocyB3aGlj
aCB3ZSdyZSBsb2FkaW5nIGFyZSByZXZlcnNlZCBmcm9tIHRoZSBwYW5uZXIncyBub3Rpb24uLi4K
KyAgICBkb3VibGUgYXppbXV0aCA9IC1kZXNpcmVkQXppbXV0aDsKKworICAgIGlmIChhemltdXRo
IDwgMCkKKyAgICAgICAgYXppbXV0aCArPSAzNjAuMDsgLy8gbWFrZSBwb3NpdGl2ZQorICAgIAor
ICAgIGJvb2wgaXNBemltdXRoR29vZCA9IGF6aW11dGggPj0gMC4wICYmIGF6aW11dGggPD0gMzYw
LjA7CisgICAgQVNTRVJUKGlzQXppbXV0aEdvb2QpOworICAgIGlmICghaXNBemltdXRoR29vZCkg
eworICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGludCBudW1iZXJPZkF6aW11dGhzID0gZGF0YWJhc2UtPm51bWJlck9mQXppbXV0aHMoKTsK
KyAgICBjb25zdCBkb3VibGUgYW5nbGVCZXR3ZWVuQXppbXV0aHMgPSAzNjAuMCAvIG51bWJlck9m
QXppbXV0aHM7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGF6aW11dGggaW5kZXggYW5kIHRoZSBi
bGVuZCAoMCAtPiAxKSBmb3IgaW50ZXJwb2xhdGlvbi4KKyAgICBkb3VibGUgZGVzaXJlZEF6aW11
dGhJbmRleEYgPSBhemltdXRoIC8gYW5nbGVCZXR3ZWVuQXppbXV0aHM7CisgICAgaW50IGRlc2ly
ZWRBemltdXRoSW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KGRlc2lyZWRBemltdXRoSW5kZXhGKTsK
KyAgICBkb3VibGUgYXppbXV0aEJsZW5kID0gZGVzaXJlZEF6aW11dGhJbmRleEYgLSBzdGF0aWNf
Y2FzdDxkb3VibGU+KGRlc2lyZWRBemltdXRoSW5kZXgpOworICAgIAorICAgIC8vIFdlIGRvbid0
IGltbWVkaWF0ZWx5IHN0YXJ0IHVzaW5nIHRoaXMgYXppbXV0aCBpbmRleCwgYnV0IGluc3RlYWQg
YXBwcm9hY2ggdGhpcyBpbmRleCBmcm9tIHRoZSBsYXN0IGluZGV4IHdlIHJlbmRlcmVkIGF0Lgor
ICAgIC8vIFRoaXMgbWluaW1pemVzIHRoZSBjbGlja3MgYW5kIGdyYWluaW5lc3MgZm9yIG1vdmlu
ZyBzb3VyY2VzIHdoaWNoIG9jY3VyIG90aGVyd2lzZS4KKyAgICBkZXNpcmVkQXppbXV0aEluZGV4
ID0gbWF4KDAsIGRlc2lyZWRBemltdXRoSW5kZXgpOworICAgIGRlc2lyZWRBemltdXRoSW5kZXgg
PSBtaW4obnVtYmVyT2ZBemltdXRocyAtIDEsIGRlc2lyZWRBemltdXRoSW5kZXgpOworCisgICAg
Ly8gVGhpcyBhbGdvcml0aG0gY3VycmVudGx5IHJlcXVpcmVzIHRoYXQgd2UgcHJvY2VzcyBpbiBw
b3dlci1vZi10d28gc2l6ZSBjaHVua3MgYXQgbGVhc3QgMTI4LgorICAgIEFTU0VSVCgxVUwgPDwg
c3RhdGljX2Nhc3Q8aW50Pihsb2cyKGZyYW1lc1RvUHJvY2VzcykpID09IGZyYW1lc1RvUHJvY2Vz
cyk7CisgICAgQVNTRVJUKGZyYW1lc1RvUHJvY2VzcyA+PSAxMjgpOworICAgIAorICAgIGNvbnN0
IHVuc2lnbmVkIGZyYW1lc1BlclNlZ21lbnQgPSAxMjg7CisgICAgY29uc3QgdW5zaWduZWQgbnVt
YmVyT2ZTZWdtZW50cyA9IGZyYW1lc1RvUHJvY2VzcyAvIGZyYW1lc1BlclNlZ21lbnQ7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIHNlZ21lbnQgPSAwOyBzZWdtZW50IDwgbnVtYmVyT2ZTZWdtZW50czsg
KytzZWdtZW50KSB7CisgICAgICAgIGlmIChtX2lzRmlyc3RSZW5kZXIpIHsKKyAgICAgICAgICAg
IC8vIFNuYXAgZXhhY3RseSB0byBkZXNpcmVkIHBvc2l0aW9uIChmaXJzdCB0aW1lIGFuZCBhZnRl
ciByZXNldCgpKS4KKyAgICAgICAgICAgIG1fYXppbXV0aEluZGV4ID0gZGVzaXJlZEF6aW11dGhJ
bmRleDsKKyAgICAgICAgICAgIG1faXNGaXJzdFJlbmRlciA9IGZhbHNlOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gRWFjaCBzZWdtZW50IHJlbmRlcnMgd2l0aCBhbiBhemltdXRo
IGluZGV4IGNsb3NlciBieSBvbmUgdG8gdGhlIGRlc2lyZWQgYXppbXV0aCBpbmRleC4KKyAgICAg
ICAgICAgIC8vIEJlY2F1c2UgaW50ZXItYXVyYWwgdGltZSBkZWxheSBpcyBtb3N0bHkgYSBmYWN0
b3Igb2YgYXppbXV0aCBhbmQgdGhlIGRlbGF5IGlzIHdoZXJlIHRoZSBjbGlja3MgYW5kIGdyYWlu
aW5lc3MgY29tZSBmcm9tLAorICAgICAgICAgICAgLy8gd2UgZG9uJ3QgYm90aGVyIHNtb290aGlu
ZyB0aGUgZWxldmF0aW9ucy4KKyAgICAgICAgICAgIGJvb2wgd3JhcCA9IHdyYXBEaXN0YW5jZSht
X2F6aW11dGhJbmRleCwgZGVzaXJlZEF6aW11dGhJbmRleCwgbnVtYmVyT2ZBemltdXRocyk7Cisg
ICAgICAgICAgICBpZiAod3JhcCkgeworICAgICAgICAgICAgICAgIGlmIChtX2F6aW11dGhJbmRl
eCA8IGRlc2lyZWRBemltdXRoSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIG1fYXppbXV0aElu
ZGV4ID0gKG1fYXppbXV0aEluZGV4IC0gMSArIG51bWJlck9mQXppbXV0aHMpICUgbnVtYmVyT2ZB
emltdXRoczsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChtX2F6aW11dGhJbmRleCA+IGRlc2ly
ZWRBemltdXRoSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIG1fYXppbXV0aEluZGV4ID0gKG1f
YXppbXV0aEluZGV4ICsgMSkgJSBudW1iZXJPZkF6aW11dGhzOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpZiAobV9hemltdXRoSW5kZXggPCBkZXNpcmVkQXppbXV0aElu
ZGV4KQorICAgICAgICAgICAgICAgICAgICBtX2F6aW11dGhJbmRleCA9IChtX2F6aW11dGhJbmRl
eCArIDEpICUgbnVtYmVyT2ZBemltdXRoczsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChtX2F6
aW11dGhJbmRleCA+IGRlc2lyZWRBemltdXRoSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIG1f
YXppbXV0aEluZGV4ID0gKG1fYXppbXV0aEluZGV4IC0gMSArIG51bWJlck9mQXppbXV0aHMpICUg
bnVtYmVyT2ZBemltdXRoczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgLy8gR2V0IHRoZSBIUlRGS2VybmVscyBhbmQgaW50ZXJwb2xhdGVkIGRlbGF5cy4KKyAg
ICAgICAgdW5zaWduZWQgZWxldmF0aW9uSW5kZXggPSBkYXRhYmFzZS0+aW5kZXhGcm9tRWxldmF0
aW9uQW5nbGUoZWxldmF0aW9uKTsKKyAgICAKKyAgICAgICAgSFJURktlcm5lbCoga2VybmVsTDsK
KyAgICAgICAgSFJURktlcm5lbCoga2VybmVsUjsKKyAgICAgICAgZG91YmxlIGZyYW1lRGVsYXlM
OworICAgICAgICBkb3VibGUgZnJhbWVEZWxheVI7CisgICAgICAgIGRhdGFiYXNlLT5nZXRLZXJu
ZWxzRnJvbUF6aW11dGhFbGV2YXRpb24oYXppbXV0aEJsZW5kLCBtX2F6aW11dGhJbmRleCwgZWxl
dmF0aW9uSW5kZXgsIGtlcm5lbEwsIGtlcm5lbFIsIGZyYW1lRGVsYXlMLCBmcmFtZURlbGF5Uik7
CisKKyAgICAgICAgQVNTRVJUKGtlcm5lbEwgJiYga2VybmVsUik7CisgICAgICAgIGlmICgha2Vy
bmVsTCB8fCAha2VybmVsUikgeworICAgICAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5vcm1hbGx5
LCB3ZSdsbCBqdXN0IGJlIGRlYWxpbmcgd2l0aCBtb25vIHNvdXJjZXMuCisgICAgICAgIC8vIElm
IHdlIGhhdmUgYSBzdGVyZW8gaW5wdXQsIGltcGxlbWVudCBhIHN0cmFuZ2Uga2luZCBvZiBwYW5u
aW5nIHdpdGggbGVmdCBzb3VyY2UgcHJvY2Vzc2VkIGJ5IGxlZnQgSFJURiwgYW5kIHJpZ2h0IHNv
dXJjZSBieSByaWdodCBIUlRGLgorICAgICAgICBBdWRpb0NoYW5uZWwqIGNoYW5uZWxMID0gaW5w
dXRCdXMtPmNoYW5uZWxCeVR5cGUoQXVkaW9CdXM6OkNoYW5uZWxMZWZ0KTsKKyAgICAgICAgQXVk
aW9DaGFubmVsKiBjaGFubmVsUiA9IG51bUlucHV0Q2hhbm5lbHMgPiAxID8gaW5wdXRCdXMtPmNo
YW5uZWxCeVR5cGUoQXVkaW9CdXM6OkNoYW5uZWxSaWdodCkgOiAwOworCisgICAgICAgIC8vIEdl
dCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvaW50ZXJzLgorICAgICAgICBmbG9hdCogc291cmNl
TCA9IGNoYW5uZWxMLT5kYXRhKCk7CisgICAgICAgIGZsb2F0KiBzb3VyY2VSID0gbnVtSW5wdXRD
aGFubmVscyA+IDEgPyBjaGFubmVsUi0+ZGF0YSgpIDogc291cmNlTDsKKyAgICAgICAgZmxvYXQq
IGRlc3RpbmF0aW9uTCA9IG91dHB1dEJ1cy0+Y2hhbm5lbEJ5VHlwZShBdWRpb0J1czo6Q2hhbm5l
bExlZnQpLT5kYXRhKCk7CisgICAgICAgIGZsb2F0KiBkZXN0aW5hdGlvblIgPSBvdXRwdXRCdXMt
PmNoYW5uZWxCeVR5cGUoQXVkaW9CdXM6OkNoYW5uZWxSaWdodCktPmRhdGEoKTsKKyAgICAKKyAg
ICAgICAgLy8gT2Zmc2V0IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcG9pbnRlcnMgZm9yIHRoZSBj
dXJyZW50IHNlZ21lbnQuCisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHNlZ21lbnQgKiBmcmFt
ZXNQZXJTZWdtZW50OworICAgICAgICBzb3VyY2VMICs9IG9mZnNldDsKKyAgICAgICAgc291cmNl
UiArPSBvZmZzZXQ7CisgICAgICAgIGRlc3RpbmF0aW9uTCArPSBvZmZzZXQ7CisgICAgICAgIGRl
c3RpbmF0aW9uUiArPSBvZmZzZXQ7CisKKyAgICAgICAgLy8gRmlyc3QgcnVuIHRocm91Z2ggZGVs
YXkgbGluZXMgZm9yIGludGVyLWF1cmFsIHRpbWUgZGlmZmVyZW5jZS4KKyAgICAgICAgbV9kZWxh
eUxpbmVMLnNldERlbGF5RnJhbWVzKGZyYW1lRGVsYXlMKTsKKyAgICAgICAgbV9kZWxheUxpbmVS
LnNldERlbGF5RnJhbWVzKGZyYW1lRGVsYXlSKTsKKyAgICAgICAgbV9kZWxheUxpbmVMLnByb2Nl
c3Moc291cmNlTCwgZGVzdGluYXRpb25MLCBmcmFtZXNQZXJTZWdtZW50KTsKKyAgICAgICAgbV9k
ZWxheUxpbmVSLnByb2Nlc3Moc291cmNlUiwgZGVzdGluYXRpb25SLCBmcmFtZXNQZXJTZWdtZW50
KTsKKworICAgICAgICAvLyBOb3cgZG8gdGhlIGNvbnZvbHV0aW9ucyBpbi1wbGFjZS4KKyAgICAg
ICAgbV9jb252b2x2ZXJMLnByb2Nlc3Moa2VybmVsTC0+ZmZ0RnJhbWUoKSwgZGVzdGluYXRpb25M
LCBkZXN0aW5hdGlvbkwsIGZyYW1lc1BlclNlZ21lbnQpOworICAgICAgICBtX2NvbnZvbHZlclIu
cHJvY2VzcyhrZXJuZWxSLT5mZnRGcmFtZSgpLCBkZXN0aW5hdGlvblIsIGRlc3RpbmF0aW9uUiwg
ZnJhbWVzUGVyU2VnbWVudCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9IUlRGUGFubmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRG
UGFubmVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5u
ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSFJURlBhbm5lcl9o
CisjZGVmaW5lIEhSVEZQYW5uZXJfaAorCisjaW5jbHVkZSAiRGVsYXlQcm9jZXNzb3IuaCIKKyNp
bmNsdWRlICJGRlRDb252b2x2ZXIuaCIKKyNpbmNsdWRlICJQYW5uZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBGRlRGcmFtZTsKK2NsYXNzIEhSVEZEYXRhYmFzZTsKKworY2xh
c3MgSFJURlBhbm5lciA6IHB1YmxpYyBQYW5uZXIgeworcHVibGljOgorICAgIEhSVEZQYW5uZXIo
ZG91YmxlIHNhbXBsZVJhdGUpCisgICAgICAgIDogUGFubmVyKFBhbm5pbmdNb2RlbEhSVEYpCisg
ICAgICAgICwgbV9zYW1wbGVSYXRlKHNhbXBsZVJhdGUpCisgICAgICAgICwgbV9pc0ZpcnN0UmVu
ZGVyKHRydWUpCisgICAgICAgICwgbV9hemltdXRoSW5kZXgoMCkKKyAgICAgICAgLCBtX2NvbnZv
bHZlckwoZmZ0U2l6ZUZvclNhbXBsZVJhdGUoc2FtcGxlUmF0ZSkpCisgICAgICAgICwgbV9jb252
b2x2ZXJSKGZmdFNpemVGb3JTYW1wbGVSYXRlKHNhbXBsZVJhdGUpKQorICAgICAgICAsIG1fZGVs
YXlMaW5lTChNYXhEZWxheVRpbWUsIHNhbXBsZVJhdGUpCisgICAgICAgICwgbV9kZWxheUxpbmVS
KE1heERlbGF5VGltZSwgc2FtcGxlUmF0ZSkKKyAgICB7IAorICAgIH0KKworICAgIC8vIFBhbm5l
cgorICAgIHZpcnR1YWwgdm9pZCBwYW4oZG91YmxlIGF6aW11dGgsIGRvdWJsZSBlbGV2YXRpb24s
IEF1ZGlvQnVzKiBpbnB1dEJ1cywgQXVkaW9CdXMqIG91dHB1dEJ1cywgc2l6ZV90IGZyYW1lc1Rv
UHJvY2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHJlc2V0KCk7CisKKyAgICBzaXplX3QgZmZ0U2l6
ZSgpIHsgcmV0dXJuIGZmdFNpemVGb3JTYW1wbGVSYXRlKG1fc2FtcGxlUmF0ZSk7IH0KKyAgICBz
dGF0aWMgc2l6ZV90IGZmdFNpemVGb3JTYW1wbGVSYXRlKGRvdWJsZSBzYW1wbGVSYXRlKTsKKwor
ICAgIGRvdWJsZSBzYW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9Cisg
ICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBkb3VibGUgTWF4RGVsYXlUaW1lOworCisg
ICAgZG91YmxlIG1fc2FtcGxlUmF0ZTsKKyAgICAKKyAgICAvLyBGb3IgZGUtemlwcGVyaW5nCisg
ICAgYm9vbCBtX2lzRmlyc3RSZW5kZXI7CisgICAgaW50IG1fYXppbXV0aEluZGV4OworCisgICAg
RkZUQ29udm9sdmVyIG1fY29udm9sdmVyTDsKKyAgICBGRlRDb252b2x2ZXIgbV9jb252b2x2ZXJS
OworICAgIERlbGF5RFNQS2VybmVsIG1fZGVsYXlMaW5lTDsKKyAgICBEZWxheURTUEtlcm5lbCBt
X2RlbGF5TGluZVI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBI
UlRGUGFubmVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68786</attachid>
            <date>2010-09-24 16:26:50 -0700</date>
            <delta_ts>2010-09-27 14:57:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46299-20100924162649.patch</filename>
            <type>text/plain</type>
            <size>13028</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODMxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTAtMDktMjQgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgSFJURlBhbm5lciBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDYyOTkKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgYXVkaW8gQVBJ
IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRG
UGFubmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIUlRGUGFubmVyOjpmZnRTaXpl
Rm9yU2FtcGxlUmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIUlRGUGFubmVyOjpyZXNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjp3cmFwRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6SFJURlBh
bm5lcjo6cGFuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SFJURlBhbm5lcjo6SFJURlBhbm5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpIUlRGUGFubmVyOjpmZnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZQYW5u
ZXI6OnNhbXBsZVJhdGUpOgorCiAyMDEwLTA5LTI0ICBQYXdlbCBIYWpkYW4gIDxwaGFqZGFuLmpy
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEdW1pdHJ1IERhbmlsaXVjLgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElP
KQorCisjaW5jbHVkZSAiSFJURlBhbm5lci5oIgorCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKyNp
bmNsdWRlICJGRlRDb252b2x2ZXIuaCIKKyNpbmNsdWRlICJIUlRGRGF0YWJhc2UuaCIKKyNpbmNs
dWRlICJIUlRGRGF0YWJhc2VMb2FkZXIuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVk
ZSA8bWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0
ZDsKKyAKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgZG91YmxlIEhSVEZQYW5uZXI6Ok1h
eERlbGF5VGltZSA9IDAuMDEyOyAvLyAxMm1zCisKK3NpemVfdCBIUlRGUGFubmVyOjpmZnRTaXpl
Rm9yU2FtcGxlUmF0ZShkb3VibGUgc2FtcGxlUmF0ZSkKK3sKKyAgICAvLyBUaGUgSFJURiBpbXB1
bHNlIHJlc3BvbnNlcyAobG9hZGVkIGFzIGF1ZGlvIHJlc291cmNlcykgYXJlIDUxMiBzYW1wbGUt
ZnJhbWVzIEA0NC4xS0h6LgorICAgIC8vIEN1cnJlbnRseSwgd2UgdHJ1bmNhdGUgdGhlIGltcHVs
c2UgcmVzcG9uc2VzIHRvIGhhbGYgdGhpcyBzaXplLCBidXQgYW4gRkZULXNpemUgb2YgdHdpY2Ug
aW1wdWxzZSByZXNwb25zZSBzaXplIGlzIG5lZWRlZCAoZm9yIGNvbnZvbHV0aW9uKS4KKyAgICAv
LyBTbyBmb3Igc2FtcGxlIHJhdGVzIGFyb3VuZCA0NC4xS0h6IGFuIEZGVCBzaXplIG9mIDUxMiBp
cyBnb29kLiAgV2UgZG91YmxlIHRoYXQgc2l6ZSBmb3IgaGlnaGVyIHNhbXBsZSByYXRlcy4KKyAg
ICBBU1NFUlQoc2FtcGxlUmF0ZSA+PSA0NDEwMCAmJiBzYW1wbGVSYXRlIDw9IDk2MDAwLjApOwor
ICAgIHJldHVybiAoc2FtcGxlUmF0ZSA8PSA0ODAwMC4wKSA/IDUxMiA6IDEwMjQ7Cit9CisKK3Zv
aWQgSFJURlBhbm5lcjo6cmVzZXQoKQoreworICAgIG1faXNGaXJzdFJlbmRlciA9IHRydWU7Cisg
ICAgbV9jb252b2x2ZXJMLnJlc2V0KCk7CisgICAgbV9jb252b2x2ZXJSLnJlc2V0KCk7CisgICAg
bV9kZWxheUxpbmVMLnJlc2V0KCk7CisgICAgbV9kZWxheUxpbmVSLnJlc2V0KCk7Cit9CisKK3N0
YXRpYyBib29sIHdyYXBEaXN0YW5jZShpbnQgaSwgaW50IGosIGludCBsZW5ndGgpCit7CisgICAg
aW50IGRpcmVjdERpc3RhbmNlID0gYWJzKGkgLSBqKTsKKyAgICBpbnQgaW5kaXJlY3REaXN0YW5j
ZSA9IGxlbmd0aCAtIGRpcmVjdERpc3RhbmNlOworCisgICAgcmV0dXJuIGluZGlyZWN0RGlzdGFu
Y2UgPCBkaXJlY3REaXN0YW5jZTsKK30KKwordm9pZCBIUlRGUGFubmVyOjpwYW4oZG91YmxlIGRl
c2lyZWRBemltdXRoLCBkb3VibGUgZWxldmF0aW9uLCBBdWRpb0J1cyogaW5wdXRCdXMsIEF1ZGlv
QnVzKiBvdXRwdXRCdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgdW5zaWduZWQg
bnVtSW5wdXRDaGFubmVscyA9IGlucHV0QnVzID8gaW5wdXRCdXMtPm51bWJlck9mQ2hhbm5lbHMo
KSA6IDA7CisKKyAgICBib29sIGlzSW5wdXRHb29kID0gaW5wdXRCdXMgJiYgIG51bUlucHV0Q2hh
bm5lbHMgPj0gMSAmJiBudW1JbnB1dENoYW5uZWxzIDw9IDI7CisgICAgQVNTRVJUKGlzSW5wdXRH
b29kKTsKKworICAgIGJvb2wgaXNPdXRwdXRHb29kID0gb3V0cHV0QnVzICYmIG91dHB1dEJ1cy0+
bnVtYmVyT2ZDaGFubmVscygpID09IDIgJiYgZnJhbWVzVG9Qcm9jZXNzIDw9IG91dHB1dEJ1cy0+
bGVuZ3RoKCk7CisgICAgQVNTRVJUKGlzT3V0cHV0R29vZCk7CisKKyAgICBpZiAoIWlzSW5wdXRH
b29kIHx8ICFpc091dHB1dEdvb2QpIHsKKyAgICAgICAgaWYgKG91dHB1dEJ1cykKKyAgICAgICAg
ICAgIG91dHB1dEJ1cy0+emVybygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSFJU
RkRhdGFiYXNlKiBkYXRhYmFzZSA9IGhydGZEYXRhYmFzZUxvYWRlcigpLT5kYXRhYmFzZSgpOyAg
ICAKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworICAgIGlmICghZGF0YWJhc2UpIHsKKyAgICAgICAg
b3V0cHV0QnVzLT56ZXJvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJUkNB
TSBIUlRGIGF6aW11dGhzIHdoaWNoIHdlJ3JlIGxvYWRpbmcgYXJlIHJldmVyc2VkIGZyb20gdGhl
IHBhbm5lcidzIG5vdGlvbi4uLgorICAgIGRvdWJsZSBhemltdXRoID0gLWRlc2lyZWRBemltdXRo
OworCisgICAgaWYgKGF6aW11dGggPCAwKQorICAgICAgICBhemltdXRoICs9IDM2MC4wOyAvLyBt
YWtlIHBvc2l0aXZlCisgICAgCisgICAgYm9vbCBpc0F6aW11dGhHb29kID0gYXppbXV0aCA+PSAw
LjAgJiYgYXppbXV0aCA8PSAzNjAuMDsKKyAgICBBU1NFUlQoaXNBemltdXRoR29vZCk7CisgICAg
aWYgKCFpc0F6aW11dGhHb29kKSB7CisgICAgICAgIG91dHB1dEJ1cy0+emVybygpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaW50IG51bWJlck9mQXppbXV0aHMgPSBkYXRhYmFzZS0+
bnVtYmVyT2ZBemltdXRocygpOworICAgIGNvbnN0IGRvdWJsZSBhbmdsZUJldHdlZW5BemltdXRo
cyA9IDM2MC4wIC8gbnVtYmVyT2ZBemltdXRoczsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgYXpp
bXV0aCBpbmRleCBhbmQgdGhlIGJsZW5kICgwIC0+IDEpIGZvciBpbnRlcnBvbGF0aW9uLgorICAg
IGRvdWJsZSBkZXNpcmVkQXppbXV0aEluZGV4RiA9IGF6aW11dGggLyBhbmdsZUJldHdlZW5Bemlt
dXRoczsKKyAgICBpbnQgZGVzaXJlZEF6aW11dGhJbmRleCA9IHN0YXRpY19jYXN0PGludD4oZGVz
aXJlZEF6aW11dGhJbmRleEYpOworICAgIGRvdWJsZSBhemltdXRoQmxlbmQgPSBkZXNpcmVkQXpp
bXV0aEluZGV4RiAtIHN0YXRpY19jYXN0PGRvdWJsZT4oZGVzaXJlZEF6aW11dGhJbmRleCk7Cisg
ICAgCisgICAgLy8gV2UgZG9uJ3QgaW1tZWRpYXRlbHkgc3RhcnQgdXNpbmcgdGhpcyBhemltdXRo
IGluZGV4LCBidXQgaW5zdGVhZCBhcHByb2FjaCB0aGlzIGluZGV4IGZyb20gdGhlIGxhc3QgaW5k
ZXggd2UgcmVuZGVyZWQgYXQuCisgICAgLy8gVGhpcyBtaW5pbWl6ZXMgdGhlIGNsaWNrcyBhbmQg
Z3JhaW5pbmVzcyBmb3IgbW92aW5nIHNvdXJjZXMgd2hpY2ggb2NjdXIgb3RoZXJ3aXNlLgorICAg
IGRlc2lyZWRBemltdXRoSW5kZXggPSBtYXgoMCwgZGVzaXJlZEF6aW11dGhJbmRleCk7CisgICAg
ZGVzaXJlZEF6aW11dGhJbmRleCA9IG1pbihudW1iZXJPZkF6aW11dGhzIC0gMSwgZGVzaXJlZEF6
aW11dGhJbmRleCk7CisKKyAgICAvLyBUaGlzIGFsZ29yaXRobSBjdXJyZW50bHkgcmVxdWlyZXMg
dGhhdCB3ZSBwcm9jZXNzIGluIHBvd2VyLW9mLXR3byBzaXplIGNodW5rcyBhdCBsZWFzdCAxMjgu
CisgICAgQVNTRVJUKDFVTCA8PCBzdGF0aWNfY2FzdDxpbnQ+KGxvZzIoZnJhbWVzVG9Qcm9jZXNz
KSkgPT0gZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBBU1NFUlQoZnJhbWVzVG9Qcm9jZXNzID49IDEy
OCk7CisgICAgCisgICAgY29uc3QgdW5zaWduZWQgZnJhbWVzUGVyU2VnbWVudCA9IDEyODsKKyAg
ICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlNlZ21lbnRzID0gZnJhbWVzVG9Qcm9jZXNzIC8gZnJh
bWVzUGVyU2VnbWVudDsKKworICAgIGZvciAodW5zaWduZWQgc2VnbWVudCA9IDA7IHNlZ21lbnQg
PCBudW1iZXJPZlNlZ21lbnRzOyArK3NlZ21lbnQpIHsKKyAgICAgICAgaWYgKG1faXNGaXJzdFJl
bmRlcikgeworICAgICAgICAgICAgLy8gU25hcCBleGFjdGx5IHRvIGRlc2lyZWQgcG9zaXRpb24g
KGZpcnN0IHRpbWUgYW5kIGFmdGVyIHJlc2V0KCkpLgorICAgICAgICAgICAgbV9hemltdXRoSW5k
ZXggPSBkZXNpcmVkQXppbXV0aEluZGV4OworICAgICAgICAgICAgbV9pc0ZpcnN0UmVuZGVyID0g
ZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBFYWNoIHNlZ21lbnQgcmVu
ZGVycyB3aXRoIGFuIGF6aW11dGggaW5kZXggY2xvc2VyIGJ5IG9uZSB0byB0aGUgZGVzaXJlZCBh
emltdXRoIGluZGV4LgorICAgICAgICAgICAgLy8gQmVjYXVzZSBpbnRlci1hdXJhbCB0aW1lIGRl
bGF5IGlzIG1vc3RseSBhIGZhY3RvciBvZiBhemltdXRoIGFuZCB0aGUgZGVsYXkgaXMgd2hlcmUg
dGhlIGNsaWNrcyBhbmQgZ3JhaW5pbmVzcyBjb21lIGZyb20sCisgICAgICAgICAgICAvLyB3ZSBk
b24ndCBib3RoZXIgc21vb3RoaW5nIHRoZSBlbGV2YXRpb25zLgorICAgICAgICAgICAgYm9vbCB3
cmFwID0gd3JhcERpc3RhbmNlKG1fYXppbXV0aEluZGV4LCBkZXNpcmVkQXppbXV0aEluZGV4LCBu
dW1iZXJPZkF6aW11dGhzKTsKKyAgICAgICAgICAgIGlmICh3cmFwKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG1fYXppbXV0aEluZGV4IDwgZGVzaXJlZEF6aW11dGhJbmRleCkKKyAgICAgICAgICAg
ICAgICAgICAgbV9hemltdXRoSW5kZXggPSAobV9hemltdXRoSW5kZXggLSAxICsgbnVtYmVyT2ZB
emltdXRocykgJSBudW1iZXJPZkF6aW11dGhzOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1f
YXppbXV0aEluZGV4ID4gZGVzaXJlZEF6aW11dGhJbmRleCkKKyAgICAgICAgICAgICAgICAgICAg
bV9hemltdXRoSW5kZXggPSAobV9hemltdXRoSW5kZXggKyAxKSAlIG51bWJlck9mQXppbXV0aHM7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChtX2F6aW11dGhJbmRl
eCA8IGRlc2lyZWRBemltdXRoSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIG1fYXppbXV0aElu
ZGV4ID0gKG1fYXppbXV0aEluZGV4ICsgMSkgJSBudW1iZXJPZkF6aW11dGhzOworICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKG1fYXppbXV0aEluZGV4ID4gZGVzaXJlZEF6aW11dGhJbmRleCkKKyAg
ICAgICAgICAgICAgICAgICAgbV9hemltdXRoSW5kZXggPSAobV9hemltdXRoSW5kZXggLSAxICsg
bnVtYmVyT2ZBemltdXRocykgJSBudW1iZXJPZkF6aW11dGhzOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBHZXQgdGhlIEhSVEZLZXJuZWxzIGFuZCBpbnRl
cnBvbGF0ZWQgZGVsYXlzLgorICAgICAgICB1bnNpZ25lZCBlbGV2YXRpb25JbmRleCA9IGRhdGFi
YXNlLT5pbmRleEZyb21FbGV2YXRpb25BbmdsZShlbGV2YXRpb24pOworICAgIAorICAgICAgICBI
UlRGS2VybmVsKiBrZXJuZWxMOworICAgICAgICBIUlRGS2VybmVsKiBrZXJuZWxSOworICAgICAg
ICBkb3VibGUgZnJhbWVEZWxheUw7CisgICAgICAgIGRvdWJsZSBmcmFtZURlbGF5UjsKKyAgICAg
ICAgZGF0YWJhc2UtPmdldEtlcm5lbHNGcm9tQXppbXV0aEVsZXZhdGlvbihhemltdXRoQmxlbmQs
IG1fYXppbXV0aEluZGV4LCBlbGV2YXRpb25JbmRleCwga2VybmVsTCwga2VybmVsUiwgZnJhbWVE
ZWxheUwsIGZyYW1lRGVsYXlSKTsKKworICAgICAgICBBU1NFUlQoa2VybmVsTCAmJiBrZXJuZWxS
KTsKKyAgICAgICAgaWYgKCFrZXJuZWxMIHx8ICFrZXJuZWxSKSB7CisgICAgICAgICAgICBvdXRw
dXRCdXMtPnplcm8oKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gTm9ybWFsbHksIHdlJ2xsIGp1c3QgYmUgZGVhbGluZyB3aXRoIG1vbm8gc291
cmNlcy4KKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHN0ZXJlbyBpbnB1dCwgaW1wbGVtZW50IGEg
c3RyYW5nZSBraW5kIG9mIHBhbm5pbmcgd2l0aCBsZWZ0IHNvdXJjZSBwcm9jZXNzZWQgYnkgbGVm
dCBIUlRGLCBhbmQgcmlnaHQgc291cmNlIGJ5IHJpZ2h0IEhSVEYuCisgICAgICAgIEF1ZGlvQ2hh
bm5lbCogY2hhbm5lbEwgPSBpbnB1dEJ1cy0+Y2hhbm5lbEJ5VHlwZShBdWRpb0J1czo6Q2hhbm5l
bExlZnQpOworICAgICAgICBBdWRpb0NoYW5uZWwqIGNoYW5uZWxSID0gbnVtSW5wdXRDaGFubmVs
cyA+IDEgPyBpbnB1dEJ1cy0+Y2hhbm5lbEJ5VHlwZShBdWRpb0J1czo6Q2hhbm5lbFJpZ2h0KSA6
IDA7CisKKyAgICAgICAgLy8gR2V0IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcG9pbnRlcnMuCisg
ICAgICAgIGZsb2F0KiBzb3VyY2VMID0gY2hhbm5lbEwtPmRhdGEoKTsKKyAgICAgICAgZmxvYXQq
IHNvdXJjZVIgPSBudW1JbnB1dENoYW5uZWxzID4gMSA/IGNoYW5uZWxSLT5kYXRhKCkgOiBzb3Vy
Y2VMOworICAgICAgICBmbG9hdCogZGVzdGluYXRpb25MID0gb3V0cHV0QnVzLT5jaGFubmVsQnlU
eXBlKEF1ZGlvQnVzOjpDaGFubmVsTGVmdCktPmRhdGEoKTsKKyAgICAgICAgZmxvYXQqIGRlc3Rp
bmF0aW9uUiA9IG91dHB1dEJ1cy0+Y2hhbm5lbEJ5VHlwZShBdWRpb0J1czo6Q2hhbm5lbFJpZ2h0
KS0+ZGF0YSgpOworICAgIAorICAgICAgICAvLyBPZmZzZXQgc291cmNlIGFuZCBkZXN0aW5hdGlv
biBwb2ludGVycyBmb3IgdGhlIGN1cnJlbnQgc2VnbWVudC4KKyAgICAgICAgdW5zaWduZWQgb2Zm
c2V0ID0gc2VnbWVudCAqIGZyYW1lc1BlclNlZ21lbnQ7CisgICAgICAgIHNvdXJjZUwgKz0gb2Zm
c2V0OworICAgICAgICBzb3VyY2VSICs9IG9mZnNldDsKKyAgICAgICAgZGVzdGluYXRpb25MICs9
IG9mZnNldDsKKyAgICAgICAgZGVzdGluYXRpb25SICs9IG9mZnNldDsKKworICAgICAgICAvLyBG
aXJzdCBydW4gdGhyb3VnaCBkZWxheSBsaW5lcyBmb3IgaW50ZXItYXVyYWwgdGltZSBkaWZmZXJl
bmNlLgorICAgICAgICBtX2RlbGF5TGluZUwuc2V0RGVsYXlGcmFtZXMoZnJhbWVEZWxheUwpOwor
ICAgICAgICBtX2RlbGF5TGluZVIuc2V0RGVsYXlGcmFtZXMoZnJhbWVEZWxheVIpOworICAgICAg
ICBtX2RlbGF5TGluZUwucHJvY2Vzcyhzb3VyY2VMLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1BlclNl
Z21lbnQpOworICAgICAgICBtX2RlbGF5TGluZVIucHJvY2Vzcyhzb3VyY2VSLCBkZXN0aW5hdGlv
blIsIGZyYW1lc1BlclNlZ21lbnQpOworCisgICAgICAgIC8vIE5vdyBkbyB0aGUgY29udm9sdXRp
b25zIGluLXBsYWNlLgorICAgICAgICBtX2NvbnZvbHZlckwucHJvY2VzcyhrZXJuZWxMLT5mZnRG
cmFtZSgpLCBkZXN0aW5hdGlvbkwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzUGVyU2VnbWVudCk7Cisg
ICAgICAgIG1fY29udm9sdmVyUi5wcm9jZXNzKGtlcm5lbFItPmZmdEZyYW1lKCksIGRlc3RpbmF0
aW9uUiwgZGVzdGluYXRpb25SLCBmcmFtZXNQZXJTZWdtZW50KTsKKyAgICB9Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vSFJURlBhbm5lci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBIUlRGUGFubmVyX2gKKyNkZWZpbmUgSFJURlBhbm5lcl9oCisKKyNpbmNsdWRlICJE
ZWxheVByb2Nlc3Nvci5oIgorI2luY2x1ZGUgIkZGVENvbnZvbHZlci5oIgorI2luY2x1ZGUgIlBh
bm5lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZGVEZyYW1lOworY2xhc3Mg
SFJURkRhdGFiYXNlOworCitjbGFzcyBIUlRGUGFubmVyIDogcHVibGljIFBhbm5lciB7CitwdWJs
aWM6CisgICAgSFJURlBhbm5lcihkb3VibGUgc2FtcGxlUmF0ZSkKKyAgICAgICAgOiBQYW5uZXIo
UGFubmluZ01vZGVsSFJURikKKyAgICAgICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKKyAg
ICAgICAgLCBtX2lzRmlyc3RSZW5kZXIodHJ1ZSkKKyAgICAgICAgLCBtX2F6aW11dGhJbmRleCgw
KQorICAgICAgICAsIG1fY29udm9sdmVyTChmZnRTaXplRm9yU2FtcGxlUmF0ZShzYW1wbGVSYXRl
KSkKKyAgICAgICAgLCBtX2NvbnZvbHZlclIoZmZ0U2l6ZUZvclNhbXBsZVJhdGUoc2FtcGxlUmF0
ZSkpCisgICAgICAgICwgbV9kZWxheUxpbmVMKE1heERlbGF5VGltZSwgc2FtcGxlUmF0ZSkKKyAg
ICAgICAgLCBtX2RlbGF5TGluZVIoTWF4RGVsYXlUaW1lLCBzYW1wbGVSYXRlKQorICAgIHsgCisg
ICAgfQorCisgICAgLy8gUGFubmVyCisgICAgdmlydHVhbCB2b2lkIHBhbihkb3VibGUgYXppbXV0
aCwgZG91YmxlIGVsZXZhdGlvbiwgQXVkaW9CdXMqIGlucHV0QnVzLCBBdWRpb0J1cyogb3V0cHV0
QnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsK
KworICAgIHNpemVfdCBmZnRTaXplKCkgeyByZXR1cm4gZmZ0U2l6ZUZvclNhbXBsZVJhdGUobV9z
YW1wbGVSYXRlKTsgfQorICAgIHN0YXRpYyBzaXplX3QgZmZ0U2l6ZUZvclNhbXBsZVJhdGUoZG91
YmxlIHNhbXBsZVJhdGUpOworCisgICAgZG91YmxlIHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVy
biBtX3NhbXBsZVJhdGU7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGRvdWJs
ZSBNYXhEZWxheVRpbWU7CisKKyAgICBkb3VibGUgbV9zYW1wbGVSYXRlOworICAgIAorICAgIC8v
IEZvciBkZS16aXBwZXJpbmcKKyAgICBib29sIG1faXNGaXJzdFJlbmRlcjsKKyAgICBpbnQgbV9h
emltdXRoSW5kZXg7CisKKyAgICBGRlRDb252b2x2ZXIgbV9jb252b2x2ZXJMOworICAgIEZGVENv
bnZvbHZlciBtX2NvbnZvbHZlclI7CisgICAgRGVsYXlEU1BLZXJuZWwgbV9kZWxheUxpbmVMOwor
ICAgIERlbGF5RFNQS2VybmVsIG1fZGVsYXlMaW5lUjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEhSVEZQYW5uZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68967</attachid>
            <date>2010-09-27 14:57:55 -0700</date>
            <delta_ts>2010-09-27 17:53:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46299-20100927145754.patch</filename>
            <type>text/plain</type>
            <size>13015</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODQyNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTAtMDktMjcgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgSFJURlBhbm5lciBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDYyOTkKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgYXVkaW8gQVBJ
IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRG
UGFubmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIUlRGUGFubmVyOjpmZnRTaXpl
Rm9yU2FtcGxlUmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIUlRGUGFubmVyOjpyZXNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjp3cmFwRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6SFJURlBh
bm5lcjo6cGFuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SFJURlBhbm5lcjo6SFJURlBhbm5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpIUlRGUGFubmVyOjpmZnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZQYW5u
ZXI6OnNhbXBsZVJhdGUpOgorCiAyMDEwLTA5LTE0ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9IUlRGUGFubmVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVk
ZSAiSFJURlBhbm5lci5oIgorCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJGRlRD
b252b2x2ZXIuaCIKKyNpbmNsdWRlICJIUlRGRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJIUlRGRGF0
YWJhc2VMb2FkZXIuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8bWF0aC5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKyAKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY29uc3QgZG91YmxlIEhSVEZQYW5uZXI6Ok1heERlbGF5VGltZSA9
IDAuMDEyOyAvLyAxMm1zCisKK3NpemVfdCBIUlRGUGFubmVyOjpmZnRTaXplRm9yU2FtcGxlUmF0
ZShkb3VibGUgc2FtcGxlUmF0ZSkKK3sKKyAgICAvLyBUaGUgSFJURiBpbXB1bHNlIHJlc3BvbnNl
cyAobG9hZGVkIGFzIGF1ZGlvIHJlc291cmNlcykgYXJlIDUxMiBzYW1wbGUtZnJhbWVzIEA0NC4x
S0h6LgorICAgIC8vIEN1cnJlbnRseSwgd2UgdHJ1bmNhdGUgdGhlIGltcHVsc2UgcmVzcG9uc2Vz
IHRvIGhhbGYgdGhpcyBzaXplLCBidXQgYW4gRkZULXNpemUgb2YgdHdpY2UgaW1wdWxzZSByZXNw
b25zZSBzaXplIGlzIG5lZWRlZCAoZm9yIGNvbnZvbHV0aW9uKS4KKyAgICAvLyBTbyBmb3Igc2Ft
cGxlIHJhdGVzIGFyb3VuZCA0NC4xS0h6IGFuIEZGVCBzaXplIG9mIDUxMiBpcyBnb29kLiAgV2Ug
ZG91YmxlIHRoYXQgc2l6ZSBmb3IgaGlnaGVyIHNhbXBsZSByYXRlcy4KKyAgICBBU1NFUlQoc2Ft
cGxlUmF0ZSA+PSA0NDEwMCAmJiBzYW1wbGVSYXRlIDw9IDk2MDAwLjApOworICAgIHJldHVybiAo
c2FtcGxlUmF0ZSA8PSA0ODAwMC4wKSA/IDUxMiA6IDEwMjQ7Cit9CisKK3ZvaWQgSFJURlBhbm5l
cjo6cmVzZXQoKQoreworICAgIG1faXNGaXJzdFJlbmRlciA9IHRydWU7CisgICAgbV9jb252b2x2
ZXJMLnJlc2V0KCk7CisgICAgbV9jb252b2x2ZXJSLnJlc2V0KCk7CisgICAgbV9kZWxheUxpbmVM
LnJlc2V0KCk7CisgICAgbV9kZWxheUxpbmVSLnJlc2V0KCk7Cit9CisKK3N0YXRpYyBib29sIHdy
YXBEaXN0YW5jZShpbnQgaSwgaW50IGosIGludCBsZW5ndGgpCit7CisgICAgaW50IGRpcmVjdERp
c3RhbmNlID0gYWJzKGkgLSBqKTsKKyAgICBpbnQgaW5kaXJlY3REaXN0YW5jZSA9IGxlbmd0aCAt
IGRpcmVjdERpc3RhbmNlOworCisgICAgcmV0dXJuIGluZGlyZWN0RGlzdGFuY2UgPCBkaXJlY3RE
aXN0YW5jZTsKK30KKwordm9pZCBIUlRGUGFubmVyOjpwYW4oZG91YmxlIGRlc2lyZWRBemltdXRo
LCBkb3VibGUgZWxldmF0aW9uLCBBdWRpb0J1cyogaW5wdXRCdXMsIEF1ZGlvQnVzKiBvdXRwdXRC
dXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgdW5zaWduZWQgbnVtSW5wdXRDaGFu
bmVscyA9IGlucHV0QnVzID8gaW5wdXRCdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA6IDA7CisKKyAg
ICBib29sIGlzSW5wdXRHb29kID0gaW5wdXRCdXMgJiYgIG51bUlucHV0Q2hhbm5lbHMgPj0gMSAm
JiBudW1JbnB1dENoYW5uZWxzIDw9IDI7CisgICAgQVNTRVJUKGlzSW5wdXRHb29kKTsKKworICAg
IGJvb2wgaXNPdXRwdXRHb29kID0gb3V0cHV0QnVzICYmIG91dHB1dEJ1cy0+bnVtYmVyT2ZDaGFu
bmVscygpID09IDIgJiYgZnJhbWVzVG9Qcm9jZXNzIDw9IG91dHB1dEJ1cy0+bGVuZ3RoKCk7Cisg
ICAgQVNTRVJUKGlzT3V0cHV0R29vZCk7CisKKyAgICBpZiAoIWlzSW5wdXRHb29kIHx8ICFpc091
dHB1dEdvb2QpIHsKKyAgICAgICAgaWYgKG91dHB1dEJ1cykKKyAgICAgICAgICAgIG91dHB1dEJ1
cy0+emVybygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhpcyBjb2RlIG9u
bHkgcnVucyBhcyBsb25nIGFzIHRoZSBjb250ZXh0IGlzIGFsaXZlIGFuZCBhZnRlciBkYXRhYmFz
ZSBoYXMgYmVlbiBsb2FkZWQuCisgICAgSFJURkRhdGFiYXNlKiBkYXRhYmFzZSA9IGRlZmF1bHRI
UlRGRGF0YWJhc2UoKTsgICAgCisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKyAgICBpZiAoIWRhdGFi
YXNlKSB7CisgICAgICAgIG91dHB1dEJ1cy0+emVybygpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gSVJDQU0gSFJURiBhemltdXRocyB3aGljaCB3ZSdyZSBsb2FkaW5nIGFyZSBy
ZXZlcnNlZCBmcm9tIHRoZSBwYW5uZXIncyBub3Rpb24uLi4KKyAgICBkb3VibGUgYXppbXV0aCA9
IC1kZXNpcmVkQXppbXV0aDsKKworICAgIGlmIChhemltdXRoIDwgMCkKKyAgICAgICAgYXppbXV0
aCArPSAzNjAuMDsgLy8gbWFrZSBwb3NpdGl2ZQorICAgIAorICAgIGJvb2wgaXNBemltdXRoR29v
ZCA9IGF6aW11dGggPj0gMC4wICYmIGF6aW11dGggPD0gMzYwLjA7CisgICAgQVNTRVJUKGlzQXpp
bXV0aEdvb2QpOworICAgIGlmICghaXNBemltdXRoR29vZCkgeworICAgICAgICBvdXRwdXRCdXMt
Pnplcm8oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBudW1iZXJPZkF6aW11
dGhzID0gZGF0YWJhc2UtPm51bWJlck9mQXppbXV0aHMoKTsKKyAgICBjb25zdCBkb3VibGUgYW5n
bGVCZXR3ZWVuQXppbXV0aHMgPSAzNjAuMCAvIG51bWJlck9mQXppbXV0aHM7CisKKyAgICAvLyBD
YWxjdWxhdGUgdGhlIGF6aW11dGggaW5kZXggYW5kIHRoZSBibGVuZCAoMCAtPiAxKSBmb3IgaW50
ZXJwb2xhdGlvbi4KKyAgICBkb3VibGUgZGVzaXJlZEF6aW11dGhJbmRleEYgPSBhemltdXRoIC8g
YW5nbGVCZXR3ZWVuQXppbXV0aHM7CisgICAgaW50IGRlc2lyZWRBemltdXRoSW5kZXggPSBzdGF0
aWNfY2FzdDxpbnQ+KGRlc2lyZWRBemltdXRoSW5kZXhGKTsKKyAgICBkb3VibGUgYXppbXV0aEJs
ZW5kID0gZGVzaXJlZEF6aW11dGhJbmRleEYgLSBzdGF0aWNfY2FzdDxkb3VibGU+KGRlc2lyZWRB
emltdXRoSW5kZXgpOworICAgIAorICAgIC8vIFdlIGRvbid0IGltbWVkaWF0ZWx5IHN0YXJ0IHVz
aW5nIHRoaXMgYXppbXV0aCBpbmRleCwgYnV0IGluc3RlYWQgYXBwcm9hY2ggdGhpcyBpbmRleCBm
cm9tIHRoZSBsYXN0IGluZGV4IHdlIHJlbmRlcmVkIGF0LgorICAgIC8vIFRoaXMgbWluaW1pemVz
IHRoZSBjbGlja3MgYW5kIGdyYWluaW5lc3MgZm9yIG1vdmluZyBzb3VyY2VzIHdoaWNoIG9jY3Vy
IG90aGVyd2lzZS4KKyAgICBkZXNpcmVkQXppbXV0aEluZGV4ID0gbWF4KDAsIGRlc2lyZWRBemlt
dXRoSW5kZXgpOworICAgIGRlc2lyZWRBemltdXRoSW5kZXggPSBtaW4obnVtYmVyT2ZBemltdXRo
cyAtIDEsIGRlc2lyZWRBemltdXRoSW5kZXgpOworCisgICAgLy8gVGhpcyBhbGdvcml0aG0gY3Vy
cmVudGx5IHJlcXVpcmVzIHRoYXQgd2UgcHJvY2VzcyBpbiBwb3dlci1vZi10d28gc2l6ZSBjaHVu
a3MgYXQgbGVhc3QgMTI4LgorICAgIEFTU0VSVCgxVUwgPDwgc3RhdGljX2Nhc3Q8aW50Pihsb2cy
KGZyYW1lc1RvUHJvY2VzcykpID09IGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgQVNTRVJUKGZyYW1l
c1RvUHJvY2VzcyA+PSAxMjgpOworICAgIAorICAgIGNvbnN0IHVuc2lnbmVkIGZyYW1lc1BlclNl
Z21lbnQgPSAxMjg7CisgICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZTZWdtZW50cyA9IGZyYW1l
c1RvUHJvY2VzcyAvIGZyYW1lc1BlclNlZ21lbnQ7CisKKyAgICBmb3IgKHVuc2lnbmVkIHNlZ21l
bnQgPSAwOyBzZWdtZW50IDwgbnVtYmVyT2ZTZWdtZW50czsgKytzZWdtZW50KSB7CisgICAgICAg
IGlmIChtX2lzRmlyc3RSZW5kZXIpIHsKKyAgICAgICAgICAgIC8vIFNuYXAgZXhhY3RseSB0byBk
ZXNpcmVkIHBvc2l0aW9uIChmaXJzdCB0aW1lIGFuZCBhZnRlciByZXNldCgpKS4KKyAgICAgICAg
ICAgIG1fYXppbXV0aEluZGV4ID0gZGVzaXJlZEF6aW11dGhJbmRleDsKKyAgICAgICAgICAgIG1f
aXNGaXJzdFJlbmRlciA9IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
RWFjaCBzZWdtZW50IHJlbmRlcnMgd2l0aCBhbiBhemltdXRoIGluZGV4IGNsb3NlciBieSBvbmUg
dG8gdGhlIGRlc2lyZWQgYXppbXV0aCBpbmRleC4KKyAgICAgICAgICAgIC8vIEJlY2F1c2UgaW50
ZXItYXVyYWwgdGltZSBkZWxheSBpcyBtb3N0bHkgYSBmYWN0b3Igb2YgYXppbXV0aCBhbmQgdGhl
IGRlbGF5IGlzIHdoZXJlIHRoZSBjbGlja3MgYW5kIGdyYWluaW5lc3MgY29tZSBmcm9tLAorICAg
ICAgICAgICAgLy8gd2UgZG9uJ3QgYm90aGVyIHNtb290aGluZyB0aGUgZWxldmF0aW9ucy4KKyAg
ICAgICAgICAgIGJvb2wgd3JhcCA9IHdyYXBEaXN0YW5jZShtX2F6aW11dGhJbmRleCwgZGVzaXJl
ZEF6aW11dGhJbmRleCwgbnVtYmVyT2ZBemltdXRocyk7CisgICAgICAgICAgICBpZiAod3JhcCkg
eworICAgICAgICAgICAgICAgIGlmIChtX2F6aW11dGhJbmRleCA8IGRlc2lyZWRBemltdXRoSW5k
ZXgpCisgICAgICAgICAgICAgICAgICAgIG1fYXppbXV0aEluZGV4ID0gKG1fYXppbXV0aEluZGV4
IC0gMSArIG51bWJlck9mQXppbXV0aHMpICUgbnVtYmVyT2ZBemltdXRoczsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChtX2F6aW11dGhJbmRleCA+IGRlc2lyZWRBemltdXRoSW5kZXgpCisgICAg
ICAgICAgICAgICAgICAgIG1fYXppbXV0aEluZGV4ID0gKG1fYXppbXV0aEluZGV4ICsgMSkgJSBu
dW1iZXJPZkF6aW11dGhzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBp
ZiAobV9hemltdXRoSW5kZXggPCBkZXNpcmVkQXppbXV0aEluZGV4KQorICAgICAgICAgICAgICAg
ICAgICBtX2F6aW11dGhJbmRleCA9IChtX2F6aW11dGhJbmRleCArIDEpICUgbnVtYmVyT2ZBemlt
dXRoczsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChtX2F6aW11dGhJbmRleCA+IGRlc2lyZWRB
emltdXRoSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIG1fYXppbXV0aEluZGV4ID0gKG1fYXpp
bXV0aEluZGV4IC0gMSArIG51bWJlck9mQXppbXV0aHMpICUgbnVtYmVyT2ZBemltdXRoczsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gR2V0IHRoZSBIUlRG
S2VybmVscyBhbmQgaW50ZXJwb2xhdGVkIGRlbGF5cy4KKyAgICAKKyAgICAgICAgSFJURktlcm5l
bCoga2VybmVsTDsKKyAgICAgICAgSFJURktlcm5lbCoga2VybmVsUjsKKyAgICAgICAgZG91Ymxl
IGZyYW1lRGVsYXlMOworICAgICAgICBkb3VibGUgZnJhbWVEZWxheVI7CisgICAgICAgIGRhdGFi
YXNlLT5nZXRLZXJuZWxzRnJvbUF6aW11dGhFbGV2YXRpb24oYXppbXV0aEJsZW5kLCBtX2F6aW11
dGhJbmRleCwgZWxldmF0aW9uLCBrZXJuZWxMLCBrZXJuZWxSLCBmcmFtZURlbGF5TCwgZnJhbWVE
ZWxheVIpOworCisgICAgICAgIEFTU0VSVChrZXJuZWxMICYmIGtlcm5lbFIpOworICAgICAgICBp
ZiAoIWtlcm5lbEwgfHwgIWtlcm5lbFIpIHsKKyAgICAgICAgICAgIG91dHB1dEJ1cy0+emVybygp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBO
b3JtYWxseSwgd2UnbGwganVzdCBiZSBkZWFsaW5nIHdpdGggbW9ubyBzb3VyY2VzLgorICAgICAg
ICAvLyBJZiB3ZSBoYXZlIGEgc3RlcmVvIGlucHV0LCBpbXBsZW1lbnQgYSBzdHJhbmdlIGtpbmQg
b2YgcGFubmluZyB3aXRoIGxlZnQgc291cmNlIHByb2Nlc3NlZCBieSBsZWZ0IEhSVEYsIGFuZCBy
aWdodCBzb3VyY2UgYnkgcmlnaHQgSFJURi4KKyAgICAgICAgQXVkaW9DaGFubmVsKiBjaGFubmVs
TCA9IGlucHV0QnVzLT5jaGFubmVsQnlUeXBlKEF1ZGlvQnVzOjpDaGFubmVsTGVmdCk7CisgICAg
ICAgIEF1ZGlvQ2hhbm5lbCogY2hhbm5lbFIgPSBudW1JbnB1dENoYW5uZWxzID4gMSA/IGlucHV0
QnVzLT5jaGFubmVsQnlUeXBlKEF1ZGlvQnVzOjpDaGFubmVsUmlnaHQpIDogMDsKKworICAgICAg
ICAvLyBHZXQgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBwb2ludGVycy4KKyAgICAgICAgZmxvYXQq
IHNvdXJjZUwgPSBjaGFubmVsTC0+ZGF0YSgpOworICAgICAgICBmbG9hdCogc291cmNlUiA9IG51
bUlucHV0Q2hhbm5lbHMgPiAxID8gY2hhbm5lbFItPmRhdGEoKSA6IHNvdXJjZUw7CisgICAgICAg
IGZsb2F0KiBkZXN0aW5hdGlvbkwgPSBvdXRwdXRCdXMtPmNoYW5uZWxCeVR5cGUoQXVkaW9CdXM6
OkNoYW5uZWxMZWZ0KS0+ZGF0YSgpOworICAgICAgICBmbG9hdCogZGVzdGluYXRpb25SID0gb3V0
cHV0QnVzLT5jaGFubmVsQnlUeXBlKEF1ZGlvQnVzOjpDaGFubmVsUmlnaHQpLT5kYXRhKCk7Cisg
ICAgCisgICAgICAgIC8vIE9mZnNldCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvaW50ZXJzIGZv
ciB0aGUgY3VycmVudCBzZWdtZW50LgorICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBzZWdtZW50
ICogZnJhbWVzUGVyU2VnbWVudDsKKyAgICAgICAgc291cmNlTCArPSBvZmZzZXQ7CisgICAgICAg
IHNvdXJjZVIgKz0gb2Zmc2V0OworICAgICAgICBkZXN0aW5hdGlvbkwgKz0gb2Zmc2V0OworICAg
ICAgICBkZXN0aW5hdGlvblIgKz0gb2Zmc2V0OworCisgICAgICAgIC8vIEZpcnN0IHJ1biB0aHJv
dWdoIGRlbGF5IGxpbmVzIGZvciBpbnRlci1hdXJhbCB0aW1lIGRpZmZlcmVuY2UuCisgICAgICAg
IG1fZGVsYXlMaW5lTC5zZXREZWxheUZyYW1lcyhmcmFtZURlbGF5TCk7CisgICAgICAgIG1fZGVs
YXlMaW5lUi5zZXREZWxheUZyYW1lcyhmcmFtZURlbGF5Uik7CisgICAgICAgIG1fZGVsYXlMaW5l
TC5wcm9jZXNzKHNvdXJjZUwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzUGVyU2VnbWVudCk7CisgICAg
ICAgIG1fZGVsYXlMaW5lUi5wcm9jZXNzKHNvdXJjZVIsIGRlc3RpbmF0aW9uUiwgZnJhbWVzUGVy
U2VnbWVudCk7CisKKyAgICAgICAgLy8gTm93IGRvIHRoZSBjb252b2x1dGlvbnMgaW4tcGxhY2Uu
CisgICAgICAgIG1fY29udm9sdmVyTC5wcm9jZXNzKGtlcm5lbEwtPmZmdEZyYW1lKCksIGRlc3Rp
bmF0aW9uTCwgZGVzdGluYXRpb25MLCBmcmFtZXNQZXJTZWdtZW50KTsKKyAgICAgICAgbV9jb252
b2x2ZXJSLnByb2Nlc3Moa2VybmVsUi0+ZmZ0RnJhbWUoKSwgZGVzdGluYXRpb25SLCBkZXN0aW5h
dGlvblIsIGZyYW1lc1BlclNlZ21lbnQpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vSFJURlBhbm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vSFJURlBhbm5lci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9I
UlRGUGFubmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEhSVEZQ
YW5uZXJfaAorI2RlZmluZSBIUlRGUGFubmVyX2gKKworI2luY2x1ZGUgIkRlbGF5UHJvY2Vzc29y
LmgiCisjaW5jbHVkZSAiRkZUQ29udm9sdmVyLmgiCisjaW5jbHVkZSAiUGFubmVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRkZURnJhbWU7CitjbGFzcyBIUlRGRGF0YWJhc2U7
CisKK2NsYXNzIEhSVEZQYW5uZXIgOiBwdWJsaWMgUGFubmVyIHsKK3B1YmxpYzoKKyAgICBIUlRG
UGFubmVyKGRvdWJsZSBzYW1wbGVSYXRlKQorICAgICAgICA6IFBhbm5lcihQYW5uaW5nTW9kZWxI
UlRGKQorICAgICAgICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQorICAgICAgICAsIG1faXNG
aXJzdFJlbmRlcih0cnVlKQorICAgICAgICAsIG1fYXppbXV0aEluZGV4KDApCisgICAgICAgICwg
bV9jb252b2x2ZXJMKGZmdFNpemVGb3JTYW1wbGVSYXRlKHNhbXBsZVJhdGUpKQorICAgICAgICAs
IG1fY29udm9sdmVyUihmZnRTaXplRm9yU2FtcGxlUmF0ZShzYW1wbGVSYXRlKSkKKyAgICAgICAg
LCBtX2RlbGF5TGluZUwoTWF4RGVsYXlUaW1lLCBzYW1wbGVSYXRlKQorICAgICAgICAsIG1fZGVs
YXlMaW5lUihNYXhEZWxheVRpbWUsIHNhbXBsZVJhdGUpCisgICAgeyAKKyAgICB9CisKKyAgICAv
LyBQYW5uZXIKKyAgICB2aXJ0dWFsIHZvaWQgcGFuKGRvdWJsZSBhemltdXRoLCBkb3VibGUgZWxl
dmF0aW9uLCBBdWRpb0J1cyogaW5wdXRCdXMsIEF1ZGlvQnVzKiBvdXRwdXRCdXMsIHNpemVfdCBm
cmFtZXNUb1Byb2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOworCisgICAgc2l6ZV90
IGZmdFNpemUoKSB7IHJldHVybiBmZnRTaXplRm9yU2FtcGxlUmF0ZShtX3NhbXBsZVJhdGUpOyB9
CisgICAgc3RhdGljIHNpemVfdCBmZnRTaXplRm9yU2FtcGxlUmF0ZShkb3VibGUgc2FtcGxlUmF0
ZSk7CisKKyAgICBkb3VibGUgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0
ZTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIE1heERlbGF5VGlt
ZTsKKworICAgIGRvdWJsZSBtX3NhbXBsZVJhdGU7CisgICAgCisgICAgLy8gRm9yIGRlLXppcHBl
cmluZworICAgIGJvb2wgbV9pc0ZpcnN0UmVuZGVyOworICAgIGludCBtX2F6aW11dGhJbmRleDsK
KworICAgIEZGVENvbnZvbHZlciBtX2NvbnZvbHZlckw7CisgICAgRkZUQ29udm9sdmVyIG1fY29u
dm9sdmVyUjsKKyAgICBEZWxheURTUEtlcm5lbCBtX2RlbGF5TGluZUw7CisgICAgRGVsYXlEU1BL
ZXJuZWwgbV9kZWxheUxpbmVSOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gSFJURlBhbm5lcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69002</attachid>
            <date>2010-09-27 17:53:03 -0700</date>
            <delta_ts>2010-09-28 15:20:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46299-20100927175302.patch</filename>
            <type>text/plain</type>
            <size>13039</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODQ2MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTAtMDktMjcgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgSFJURlBhbm5lciBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDYyOTkKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgYXVkaW8gQVBJ
IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRG
UGFubmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIUlRGUGFubmVyOjpmZnRTaXpl
Rm9yU2FtcGxlUmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIUlRGUGFubmVyOjpyZXNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjp3cmFwRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6SFJURlBh
bm5lcjo6cGFuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SFJURlBhbm5lcjo6SFJURlBhbm5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpIUlRGUGFubmVyOjpmZnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZQYW5u
ZXI6OnNhbXBsZVJhdGUpOgorCiAyMDEwLTA5LTI3ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFj
aEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmV0aCBEYWtpbi4KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURlBhbm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vSFJURlBhbm5lci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2lu
Y2x1ZGUgIkhSVEZQYW5uZXIuaCIKKworI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5jbHVkZSAi
RkZUQ29udm9sdmVyLmgiCisjaW5jbHVkZSAiSFJURkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSFJU
RkRhdGFiYXNlTG9hZGVyLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPG1hdGgu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisgCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGRvdWJsZSBIUlRGUGFubmVyOjpNYXhEZWxheVRp
bWUgPSAwLjAxMjsgLy8gMTJtcworCitzaXplX3QgSFJURlBhbm5lcjo6ZmZ0U2l6ZUZvclNhbXBs
ZVJhdGUoZG91YmxlIHNhbXBsZVJhdGUpCit7CisgICAgLy8gVGhlIEhSVEYgaW1wdWxzZSByZXNw
b25zZXMgKGxvYWRlZCBhcyBhdWRpbyByZXNvdXJjZXMpIGFyZSA1MTIgc2FtcGxlLWZyYW1lcyBA
NDQuMUtIei4KKyAgICAvLyBDdXJyZW50bHksIHdlIHRydW5jYXRlIHRoZSBpbXB1bHNlIHJlc3Bv
bnNlcyB0byBoYWxmIHRoaXMgc2l6ZSwgYnV0IGFuIEZGVC1zaXplIG9mIHR3aWNlIGltcHVsc2Ug
cmVzcG9uc2Ugc2l6ZSBpcyBuZWVkZWQgKGZvciBjb252b2x1dGlvbikuCisgICAgLy8gU28gZm9y
IHNhbXBsZSByYXRlcyBhcm91bmQgNDQuMUtIeiBhbiBGRlQgc2l6ZSBvZiA1MTIgaXMgZ29vZC4g
IFdlIGRvdWJsZSB0aGF0IHNpemUgZm9yIGhpZ2hlciBzYW1wbGUgcmF0ZXMuCisgICAgQVNTRVJU
KHNhbXBsZVJhdGUgPj0gNDQxMDAgJiYgc2FtcGxlUmF0ZSA8PSA5NjAwMC4wKTsKKyAgICByZXR1
cm4gKHNhbXBsZVJhdGUgPD0gNDgwMDAuMCkgPyA1MTIgOiAxMDI0OworfQorCit2b2lkIEhSVEZQ
YW5uZXI6OnJlc2V0KCkKK3sKKyAgICBtX2lzRmlyc3RSZW5kZXIgPSB0cnVlOworICAgIG1fY29u
dm9sdmVyTC5yZXNldCgpOworICAgIG1fY29udm9sdmVyUi5yZXNldCgpOworICAgIG1fZGVsYXlM
aW5lTC5yZXNldCgpOworICAgIG1fZGVsYXlMaW5lUi5yZXNldCgpOworfQorCitzdGF0aWMgYm9v
bCB3cmFwRGlzdGFuY2UoaW50IGksIGludCBqLCBpbnQgbGVuZ3RoKQoreworICAgIGludCBkaXJl
Y3REaXN0YW5jZSA9IGFicyhpIC0gaik7CisgICAgaW50IGluZGlyZWN0RGlzdGFuY2UgPSBsZW5n
dGggLSBkaXJlY3REaXN0YW5jZTsKKworICAgIHJldHVybiBpbmRpcmVjdERpc3RhbmNlIDwgZGly
ZWN0RGlzdGFuY2U7Cit9CisKK3ZvaWQgSFJURlBhbm5lcjo6cGFuKGRvdWJsZSBkZXNpcmVkQXpp
bXV0aCwgZG91YmxlIGVsZXZhdGlvbiwgQXVkaW9CdXMqIGlucHV0QnVzLCBBdWRpb0J1cyogb3V0
cHV0QnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIHVuc2lnbmVkIG51bUlucHV0
Q2hhbm5lbHMgPSBpbnB1dEJ1cyA/IGlucHV0QnVzLT5udW1iZXJPZkNoYW5uZWxzKCkgOiAwOwor
CisgICAgYm9vbCBpc0lucHV0R29vZCA9IGlucHV0QnVzICYmICBudW1JbnB1dENoYW5uZWxzID49
IDEgJiYgbnVtSW5wdXRDaGFubmVscyA8PSAyOworICAgIEFTU0VSVChpc0lucHV0R29vZCk7CisK
KyAgICBib29sIGlzT3V0cHV0R29vZCA9IG91dHB1dEJ1cyAmJiBvdXRwdXRCdXMtPm51bWJlck9m
Q2hhbm5lbHMoKSA9PSAyICYmIGZyYW1lc1RvUHJvY2VzcyA8PSBvdXRwdXRCdXMtPmxlbmd0aCgp
OworICAgIEFTU0VSVChpc091dHB1dEdvb2QpOworCisgICAgaWYgKCFpc0lucHV0R29vZCB8fCAh
aXNPdXRwdXRHb29kKSB7CisgICAgICAgIGlmIChvdXRwdXRCdXMpCisgICAgICAgICAgICBvdXRw
dXRCdXMtPnplcm8oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoaXMgY29k
ZSBvbmx5IHJ1bnMgYXMgbG9uZyBhcyB0aGUgY29udGV4dCBpcyBhbGl2ZSBhbmQgYWZ0ZXIgZGF0
YWJhc2UgaGFzIGJlZW4gbG9hZGVkLgorICAgIEhSVEZEYXRhYmFzZSogZGF0YWJhc2UgPSBIUlRG
RGF0YWJhc2VMb2FkZXI6OmRlZmF1bHRIUlRGRGF0YWJhc2UoKTsgICAgCisgICAgQVNTRVJUKGRh
dGFiYXNlKTsKKyAgICBpZiAoIWRhdGFiYXNlKSB7CisgICAgICAgIG91dHB1dEJ1cy0+emVybygp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSVJDQU0gSFJURiBhemltdXRocyB3
aGljaCB3ZSdyZSBsb2FkaW5nIGFyZSByZXZlcnNlZCBmcm9tIHRoZSBwYW5uZXIncyBub3Rpb24u
Li4KKyAgICBkb3VibGUgYXppbXV0aCA9IC1kZXNpcmVkQXppbXV0aDsKKworICAgIGlmIChhemlt
dXRoIDwgMCkKKyAgICAgICAgYXppbXV0aCArPSAzNjAuMDsgLy8gbWFrZSBwb3NpdGl2ZQorICAg
IAorICAgIGJvb2wgaXNBemltdXRoR29vZCA9IGF6aW11dGggPj0gMC4wICYmIGF6aW11dGggPD0g
MzYwLjA7CisgICAgQVNTRVJUKGlzQXppbXV0aEdvb2QpOworICAgIGlmICghaXNBemltdXRoR29v
ZCkgeworICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGludCBudW1iZXJPZkF6aW11dGhzID0gZGF0YWJhc2UtPm51bWJlck9mQXppbXV0aHMo
KTsKKyAgICBjb25zdCBkb3VibGUgYW5nbGVCZXR3ZWVuQXppbXV0aHMgPSAzNjAuMCAvIG51bWJl
ck9mQXppbXV0aHM7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGF6aW11dGggaW5kZXggYW5kIHRo
ZSBibGVuZCAoMCAtPiAxKSBmb3IgaW50ZXJwb2xhdGlvbi4KKyAgICBkb3VibGUgZGVzaXJlZEF6
aW11dGhJbmRleEYgPSBhemltdXRoIC8gYW5nbGVCZXR3ZWVuQXppbXV0aHM7CisgICAgaW50IGRl
c2lyZWRBemltdXRoSW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KGRlc2lyZWRBemltdXRoSW5kZXhG
KTsKKyAgICBkb3VibGUgYXppbXV0aEJsZW5kID0gZGVzaXJlZEF6aW11dGhJbmRleEYgLSBzdGF0
aWNfY2FzdDxkb3VibGU+KGRlc2lyZWRBemltdXRoSW5kZXgpOworICAgIAorICAgIC8vIFdlIGRv
bid0IGltbWVkaWF0ZWx5IHN0YXJ0IHVzaW5nIHRoaXMgYXppbXV0aCBpbmRleCwgYnV0IGluc3Rl
YWQgYXBwcm9hY2ggdGhpcyBpbmRleCBmcm9tIHRoZSBsYXN0IGluZGV4IHdlIHJlbmRlcmVkIGF0
LgorICAgIC8vIFRoaXMgbWluaW1pemVzIHRoZSBjbGlja3MgYW5kIGdyYWluaW5lc3MgZm9yIG1v
dmluZyBzb3VyY2VzIHdoaWNoIG9jY3VyIG90aGVyd2lzZS4KKyAgICBkZXNpcmVkQXppbXV0aElu
ZGV4ID0gbWF4KDAsIGRlc2lyZWRBemltdXRoSW5kZXgpOworICAgIGRlc2lyZWRBemltdXRoSW5k
ZXggPSBtaW4obnVtYmVyT2ZBemltdXRocyAtIDEsIGRlc2lyZWRBemltdXRoSW5kZXgpOworCisg
ICAgLy8gVGhpcyBhbGdvcml0aG0gY3VycmVudGx5IHJlcXVpcmVzIHRoYXQgd2UgcHJvY2VzcyBp
biBwb3dlci1vZi10d28gc2l6ZSBjaHVua3MgYXQgbGVhc3QgMTI4LgorICAgIEFTU0VSVCgxVUwg
PDwgc3RhdGljX2Nhc3Q8aW50Pihsb2cyKGZyYW1lc1RvUHJvY2VzcykpID09IGZyYW1lc1RvUHJv
Y2Vzcyk7CisgICAgQVNTRVJUKGZyYW1lc1RvUHJvY2VzcyA+PSAxMjgpOworICAgIAorICAgIGNv
bnN0IHVuc2lnbmVkIGZyYW1lc1BlclNlZ21lbnQgPSAxMjg7CisgICAgY29uc3QgdW5zaWduZWQg
bnVtYmVyT2ZTZWdtZW50cyA9IGZyYW1lc1RvUHJvY2VzcyAvIGZyYW1lc1BlclNlZ21lbnQ7CisK
KyAgICBmb3IgKHVuc2lnbmVkIHNlZ21lbnQgPSAwOyBzZWdtZW50IDwgbnVtYmVyT2ZTZWdtZW50
czsgKytzZWdtZW50KSB7CisgICAgICAgIGlmIChtX2lzRmlyc3RSZW5kZXIpIHsKKyAgICAgICAg
ICAgIC8vIFNuYXAgZXhhY3RseSB0byBkZXNpcmVkIHBvc2l0aW9uIChmaXJzdCB0aW1lIGFuZCBh
ZnRlciByZXNldCgpKS4KKyAgICAgICAgICAgIG1fYXppbXV0aEluZGV4ID0gZGVzaXJlZEF6aW11
dGhJbmRleDsKKyAgICAgICAgICAgIG1faXNGaXJzdFJlbmRlciA9IGZhbHNlOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gRWFjaCBzZWdtZW50IHJlbmRlcnMgd2l0aCBhbiBhemlt
dXRoIGluZGV4IGNsb3NlciBieSBvbmUgdG8gdGhlIGRlc2lyZWQgYXppbXV0aCBpbmRleC4KKyAg
ICAgICAgICAgIC8vIEJlY2F1c2UgaW50ZXItYXVyYWwgdGltZSBkZWxheSBpcyBtb3N0bHkgYSBm
YWN0b3Igb2YgYXppbXV0aCBhbmQgdGhlIGRlbGF5IGlzIHdoZXJlIHRoZSBjbGlja3MgYW5kIGdy
YWluaW5lc3MgY29tZSBmcm9tLAorICAgICAgICAgICAgLy8gd2UgZG9uJ3QgYm90aGVyIHNtb290
aGluZyB0aGUgZWxldmF0aW9ucy4KKyAgICAgICAgICAgIGJvb2wgd3JhcCA9IHdyYXBEaXN0YW5j
ZShtX2F6aW11dGhJbmRleCwgZGVzaXJlZEF6aW11dGhJbmRleCwgbnVtYmVyT2ZBemltdXRocyk7
CisgICAgICAgICAgICBpZiAod3JhcCkgeworICAgICAgICAgICAgICAgIGlmIChtX2F6aW11dGhJ
bmRleCA8IGRlc2lyZWRBemltdXRoSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIG1fYXppbXV0
aEluZGV4ID0gKG1fYXppbXV0aEluZGV4IC0gMSArIG51bWJlck9mQXppbXV0aHMpICUgbnVtYmVy
T2ZBemltdXRoczsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChtX2F6aW11dGhJbmRleCA+IGRl
c2lyZWRBemltdXRoSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIG1fYXppbXV0aEluZGV4ID0g
KG1fYXppbXV0aEluZGV4ICsgMSkgJSBudW1iZXJPZkF6aW11dGhzOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobV9hemltdXRoSW5kZXggPCBkZXNpcmVkQXppbXV0
aEluZGV4KQorICAgICAgICAgICAgICAgICAgICBtX2F6aW11dGhJbmRleCA9IChtX2F6aW11dGhJ
bmRleCArIDEpICUgbnVtYmVyT2ZBemltdXRoczsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICht
X2F6aW11dGhJbmRleCA+IGRlc2lyZWRBemltdXRoSW5kZXgpCisgICAgICAgICAgICAgICAgICAg
IG1fYXppbXV0aEluZGV4ID0gKG1fYXppbXV0aEluZGV4IC0gMSArIG51bWJlck9mQXppbXV0aHMp
ICUgbnVtYmVyT2ZBemltdXRoczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gR2V0IHRoZSBIUlRGS2VybmVscyBhbmQgaW50ZXJwb2xhdGVkIGRlbGF5cy4K
KyAgICAKKyAgICAgICAgSFJURktlcm5lbCoga2VybmVsTDsKKyAgICAgICAgSFJURktlcm5lbCog
a2VybmVsUjsKKyAgICAgICAgZG91YmxlIGZyYW1lRGVsYXlMOworICAgICAgICBkb3VibGUgZnJh
bWVEZWxheVI7CisgICAgICAgIGRhdGFiYXNlLT5nZXRLZXJuZWxzRnJvbUF6aW11dGhFbGV2YXRp
b24oYXppbXV0aEJsZW5kLCBtX2F6aW11dGhJbmRleCwgZWxldmF0aW9uLCBrZXJuZWxMLCBrZXJu
ZWxSLCBmcmFtZURlbGF5TCwgZnJhbWVEZWxheVIpOworCisgICAgICAgIEFTU0VSVChrZXJuZWxM
ICYmIGtlcm5lbFIpOworICAgICAgICBpZiAoIWtlcm5lbEwgfHwgIWtlcm5lbFIpIHsKKyAgICAg
ICAgICAgIG91dHB1dEJ1cy0+emVybygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBOb3JtYWxseSwgd2UnbGwganVzdCBiZSBkZWFsaW5nIHdp
dGggbW9ubyBzb3VyY2VzLgorICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgc3RlcmVvIGlucHV0LCBp
bXBsZW1lbnQgYSBzdHJhbmdlIGtpbmQgb2YgcGFubmluZyB3aXRoIGxlZnQgc291cmNlIHByb2Nl
c3NlZCBieSBsZWZ0IEhSVEYsIGFuZCByaWdodCBzb3VyY2UgYnkgcmlnaHQgSFJURi4KKyAgICAg
ICAgQXVkaW9DaGFubmVsKiBjaGFubmVsTCA9IGlucHV0QnVzLT5jaGFubmVsQnlUeXBlKEF1ZGlv
QnVzOjpDaGFubmVsTGVmdCk7CisgICAgICAgIEF1ZGlvQ2hhbm5lbCogY2hhbm5lbFIgPSBudW1J
bnB1dENoYW5uZWxzID4gMSA/IGlucHV0QnVzLT5jaGFubmVsQnlUeXBlKEF1ZGlvQnVzOjpDaGFu
bmVsUmlnaHQpIDogMDsKKworICAgICAgICAvLyBHZXQgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBw
b2ludGVycy4KKyAgICAgICAgZmxvYXQqIHNvdXJjZUwgPSBjaGFubmVsTC0+ZGF0YSgpOworICAg
ICAgICBmbG9hdCogc291cmNlUiA9IG51bUlucHV0Q2hhbm5lbHMgPiAxID8gY2hhbm5lbFItPmRh
dGEoKSA6IHNvdXJjZUw7CisgICAgICAgIGZsb2F0KiBkZXN0aW5hdGlvbkwgPSBvdXRwdXRCdXMt
PmNoYW5uZWxCeVR5cGUoQXVkaW9CdXM6OkNoYW5uZWxMZWZ0KS0+ZGF0YSgpOworICAgICAgICBm
bG9hdCogZGVzdGluYXRpb25SID0gb3V0cHV0QnVzLT5jaGFubmVsQnlUeXBlKEF1ZGlvQnVzOjpD
aGFubmVsUmlnaHQpLT5kYXRhKCk7CisgICAgCisgICAgICAgIC8vIE9mZnNldCBzb3VyY2UgYW5k
IGRlc3RpbmF0aW9uIHBvaW50ZXJzIGZvciB0aGUgY3VycmVudCBzZWdtZW50LgorICAgICAgICB1
bnNpZ25lZCBvZmZzZXQgPSBzZWdtZW50ICogZnJhbWVzUGVyU2VnbWVudDsKKyAgICAgICAgc291
cmNlTCArPSBvZmZzZXQ7CisgICAgICAgIHNvdXJjZVIgKz0gb2Zmc2V0OworICAgICAgICBkZXN0
aW5hdGlvbkwgKz0gb2Zmc2V0OworICAgICAgICBkZXN0aW5hdGlvblIgKz0gb2Zmc2V0OworCisg
ICAgICAgIC8vIEZpcnN0IHJ1biB0aHJvdWdoIGRlbGF5IGxpbmVzIGZvciBpbnRlci1hdXJhbCB0
aW1lIGRpZmZlcmVuY2UuCisgICAgICAgIG1fZGVsYXlMaW5lTC5zZXREZWxheUZyYW1lcyhmcmFt
ZURlbGF5TCk7CisgICAgICAgIG1fZGVsYXlMaW5lUi5zZXREZWxheUZyYW1lcyhmcmFtZURlbGF5
Uik7CisgICAgICAgIG1fZGVsYXlMaW5lTC5wcm9jZXNzKHNvdXJjZUwsIGRlc3RpbmF0aW9uTCwg
ZnJhbWVzUGVyU2VnbWVudCk7CisgICAgICAgIG1fZGVsYXlMaW5lUi5wcm9jZXNzKHNvdXJjZVIs
IGRlc3RpbmF0aW9uUiwgZnJhbWVzUGVyU2VnbWVudCk7CisKKyAgICAgICAgLy8gTm93IGRvIHRo
ZSBjb252b2x1dGlvbnMgaW4tcGxhY2UuCisgICAgICAgIG1fY29udm9sdmVyTC5wcm9jZXNzKGtl
cm5lbEwtPmZmdEZyYW1lKCksIGRlc3RpbmF0aW9uTCwgZGVzdGluYXRpb25MLCBmcmFtZXNQZXJT
ZWdtZW50KTsKKyAgICAgICAgbV9jb252b2x2ZXJSLnByb2Nlc3Moa2VybmVsUi0+ZmZ0RnJhbWUo
KSwgZGVzdGluYXRpb25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1BlclNlZ21lbnQpOworICAgIH0K
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJ
TykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURlBhbm5lci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURlBhbm5lci5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEhSVEZQYW5uZXJfaAorI2RlZmluZSBIUlRGUGFubmVyX2gKKwor
I2luY2x1ZGUgIkRlbGF5UHJvY2Vzc29yLmgiCisjaW5jbHVkZSAiRkZUQ29udm9sdmVyLmgiCisj
aW5jbHVkZSAiUGFubmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRkZURnJh
bWU7CitjbGFzcyBIUlRGRGF0YWJhc2U7CisKK2NsYXNzIEhSVEZQYW5uZXIgOiBwdWJsaWMgUGFu
bmVyIHsKK3B1YmxpYzoKKyAgICBIUlRGUGFubmVyKGRvdWJsZSBzYW1wbGVSYXRlKQorICAgICAg
ICA6IFBhbm5lcihQYW5uaW5nTW9kZWxIUlRGKQorICAgICAgICAsIG1fc2FtcGxlUmF0ZShzYW1w
bGVSYXRlKQorICAgICAgICAsIG1faXNGaXJzdFJlbmRlcih0cnVlKQorICAgICAgICAsIG1fYXpp
bXV0aEluZGV4KDApCisgICAgICAgICwgbV9jb252b2x2ZXJMKGZmdFNpemVGb3JTYW1wbGVSYXRl
KHNhbXBsZVJhdGUpKQorICAgICAgICAsIG1fY29udm9sdmVyUihmZnRTaXplRm9yU2FtcGxlUmF0
ZShzYW1wbGVSYXRlKSkKKyAgICAgICAgLCBtX2RlbGF5TGluZUwoTWF4RGVsYXlUaW1lLCBzYW1w
bGVSYXRlKQorICAgICAgICAsIG1fZGVsYXlMaW5lUihNYXhEZWxheVRpbWUsIHNhbXBsZVJhdGUp
CisgICAgeyAKKyAgICB9CisKKyAgICAvLyBQYW5uZXIKKyAgICB2aXJ0dWFsIHZvaWQgcGFuKGRv
dWJsZSBhemltdXRoLCBkb3VibGUgZWxldmF0aW9uLCBBdWRpb0J1cyogaW5wdXRCdXMsIEF1ZGlv
QnVzKiBvdXRwdXRCdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOworICAgIHZpcnR1YWwgdm9p
ZCByZXNldCgpOworCisgICAgc2l6ZV90IGZmdFNpemUoKSB7IHJldHVybiBmZnRTaXplRm9yU2Ft
cGxlUmF0ZShtX3NhbXBsZVJhdGUpOyB9CisgICAgc3RhdGljIHNpemVfdCBmZnRTaXplRm9yU2Ft
cGxlUmF0ZShkb3VibGUgc2FtcGxlUmF0ZSk7CisKKyAgICBkb3VibGUgc2FtcGxlUmF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMg
Y29uc3QgZG91YmxlIE1heERlbGF5VGltZTsKKworICAgIGRvdWJsZSBtX3NhbXBsZVJhdGU7Cisg
ICAgCisgICAgLy8gRm9yIGRlLXppcHBlcmluZworICAgIGJvb2wgbV9pc0ZpcnN0UmVuZGVyOwor
ICAgIGludCBtX2F6aW11dGhJbmRleDsKKworICAgIEZGVENvbnZvbHZlciBtX2NvbnZvbHZlckw7
CisgICAgRkZUQ29udm9sdmVyIG1fY29udm9sdmVyUjsKKyAgICBEZWxheURTUEtlcm5lbCBtX2Rl
bGF5TGluZUw7CisgICAgRGVsYXlEU1BLZXJuZWwgbV9kZWxheUxpbmVSOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSFJURlBhbm5lcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69117</attachid>
            <date>2010-09-28 15:14:13 -0700</date>
            <delta_ts>2010-09-28 17:58:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46299-20100928151412.patch</filename>
            <type>text/plain</type>
            <size>13708</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODU2NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTAtMDktMjggIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgSFJURlBhbm5lciBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDYyOTkKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgYXVkaW8gQVBJ
IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRG
UGFubmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIUlRGUGFubmVyOjpIUlRGUGFu
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZQYW5uZXI6On5IUlRGUGFubmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhSVEZQYW5uZXI6OmZmdFNpemVGb3JTYW1wbGVSYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkhSVEZQYW5uZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OndyYXBEaXN0
YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpIUlRGUGFubmVyOjpwYW4pOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIUlRG
UGFubmVyOjpmZnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZQYW5uZXI6OnNhbXBsZVJh
dGUpOgorCiAyMDEwLTA5LTI3ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vSFJURlBhbm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9IUlRGUGFubmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vSFJURlBhbm5lci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkhSVEZQ
YW5uZXIuaCIKKworI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5jbHVkZSAiRkZUQ29udm9sdmVy
LmgiCisjaW5jbHVkZSAiSFJURkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSFJURkRhdGFiYXNlTG9h
ZGVyLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisgCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKy8vIFRoZSB2YWx1ZSBvZiAyIG1pbGxpc2Vjb25kcyBpcyBsYXJnZXIgdGhhbiB0
aGUgbGFyZ2VzdCBkZWxheSB3aGljaCBleGlzdHMgaW4gYW55IEhSVEZLZXJuZWwgZnJvbSB0aGUg
ZGVmYXVsdCBIUlRGRGF0YWJhc2UgKDAuMDEzNiBzZWNvbmRzKS4KKy8vIFdlIEFTU0VSVCB0aGUg
ZGVsYXkgdmFsdWVzIHVzZWQgaW4gcHJvY2VzcygpIHdpdGggdGhpcyB2YWx1ZS4KK2NvbnN0IGRv
dWJsZSBIUlRGUGFubmVyOjpNYXhEZWxheVRpbWVTZWNvbmRzID0gMC4wMDI7CisKK0hSVEZQYW5u
ZXI6OkhSVEZQYW5uZXIoZG91YmxlIHNhbXBsZVJhdGUpCisgICAgOiBQYW5uZXIoUGFubmluZ01v
ZGVsSFJURikKKyAgICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQorICAgICwgbV9pc0ZpcnN0
UmVuZGVyKHRydWUpCisgICAgLCBtX2F6aW11dGhJbmRleCgwKQorICAgICwgbV9jb252b2x2ZXJM
KGZmdFNpemVGb3JTYW1wbGVSYXRlKHNhbXBsZVJhdGUpKQorICAgICwgbV9jb252b2x2ZXJSKGZm
dFNpemVGb3JTYW1wbGVSYXRlKHNhbXBsZVJhdGUpKQorICAgICwgbV9kZWxheUxpbmVMKE1heERl
bGF5VGltZVNlY29uZHMsIHNhbXBsZVJhdGUpCisgICAgLCBtX2RlbGF5TGluZVIoTWF4RGVsYXlU
aW1lU2Vjb25kcywgc2FtcGxlUmF0ZSkKK3sgCit9CisKK0hSVEZQYW5uZXI6On5IUlRGUGFubmVy
KCkKK3sKK30KKworc2l6ZV90IEhSVEZQYW5uZXI6OmZmdFNpemVGb3JTYW1wbGVSYXRlKGRvdWJs
ZSBzYW1wbGVSYXRlKQoreworICAgIC8vIFRoZSBIUlRGIGltcHVsc2UgcmVzcG9uc2VzIChsb2Fk
ZWQgYXMgYXVkaW8gcmVzb3VyY2VzKSBhcmUgNTEyIHNhbXBsZS1mcmFtZXMgQDQ0LjFLSHouCisg
ICAgLy8gQ3VycmVudGx5LCB3ZSB0cnVuY2F0ZSB0aGUgaW1wdWxzZSByZXNwb25zZXMgdG8gaGFs
ZiB0aGlzIHNpemUsIGJ1dCBhbiBGRlQtc2l6ZSBvZiB0d2ljZSBpbXB1bHNlIHJlc3BvbnNlIHNp
emUgaXMgbmVlZGVkIChmb3IgY29udm9sdXRpb24pLgorICAgIC8vIFNvIGZvciBzYW1wbGUgcmF0
ZXMgYXJvdW5kIDQ0LjFLSHogYW4gRkZUIHNpemUgb2YgNTEyIGlzIGdvb2QuICBXZSBkb3VibGUg
dGhhdCBzaXplIGZvciBoaWdoZXIgc2FtcGxlIHJhdGVzLgorICAgIEFTU0VSVChzYW1wbGVSYXRl
ID49IDQ0MTAwICYmIHNhbXBsZVJhdGUgPD0gOTYwMDAuMCk7CisgICAgcmV0dXJuIChzYW1wbGVS
YXRlIDw9IDQ4MDAwLjApID8gNTEyIDogMTAyNDsKK30KKwordm9pZCBIUlRGUGFubmVyOjpyZXNl
dCgpCit7CisgICAgbV9pc0ZpcnN0UmVuZGVyID0gdHJ1ZTsKKyAgICBtX2NvbnZvbHZlckwucmVz
ZXQoKTsKKyAgICBtX2NvbnZvbHZlclIucmVzZXQoKTsKKyAgICBtX2RlbGF5TGluZUwucmVzZXQo
KTsKKyAgICBtX2RlbGF5TGluZVIucmVzZXQoKTsKK30KKworc3RhdGljIGJvb2wgd3JhcERpc3Rh
bmNlKGludCBpLCBpbnQgaiwgaW50IGxlbmd0aCkKK3sKKyAgICBpbnQgZGlyZWN0RGlzdGFuY2Ug
PSBhYnMoaSAtIGopOworICAgIGludCBpbmRpcmVjdERpc3RhbmNlID0gbGVuZ3RoIC0gZGlyZWN0
RGlzdGFuY2U7CisKKyAgICByZXR1cm4gaW5kaXJlY3REaXN0YW5jZSA8IGRpcmVjdERpc3RhbmNl
OworfQorCit2b2lkIEhSVEZQYW5uZXI6OnBhbihkb3VibGUgZGVzaXJlZEF6aW11dGgsIGRvdWJs
ZSBlbGV2YXRpb24sIEF1ZGlvQnVzKiBpbnB1dEJ1cywgQXVkaW9CdXMqIG91dHB1dEJ1cywgc2l6
ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICB1bnNpZ25lZCBudW1JbnB1dENoYW5uZWxzID0g
aW5wdXRCdXMgPyBpbnB1dEJ1cy0+bnVtYmVyT2ZDaGFubmVscygpIDogMDsKKworICAgIGJvb2wg
aXNJbnB1dEdvb2QgPSBpbnB1dEJ1cyAmJiAgbnVtSW5wdXRDaGFubmVscyA+PSAxICYmIG51bUlu
cHV0Q2hhbm5lbHMgPD0gMjsKKyAgICBBU1NFUlQoaXNJbnB1dEdvb2QpOworCisgICAgYm9vbCBp
c091dHB1dEdvb2QgPSBvdXRwdXRCdXMgJiYgb3V0cHV0QnVzLT5udW1iZXJPZkNoYW5uZWxzKCkg
PT0gMiAmJiBmcmFtZXNUb1Byb2Nlc3MgPD0gb3V0cHV0QnVzLT5sZW5ndGgoKTsKKyAgICBBU1NF
UlQoaXNPdXRwdXRHb29kKTsKKworICAgIGlmICghaXNJbnB1dEdvb2QgfHwgIWlzT3V0cHV0R29v
ZCkgeworICAgICAgICBpZiAob3V0cHV0QnVzKQorICAgICAgICAgICAgb3V0cHV0QnVzLT56ZXJv
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNvZGUgb25seSBydW5z
IGFzIGxvbmcgYXMgdGhlIGNvbnRleHQgaXMgYWxpdmUgYW5kIGFmdGVyIGRhdGFiYXNlIGhhcyBi
ZWVuIGxvYWRlZC4KKyAgICBIUlRGRGF0YWJhc2UqIGRhdGFiYXNlID0gSFJURkRhdGFiYXNlTG9h
ZGVyOjpkZWZhdWx0SFJURkRhdGFiYXNlKCk7ICAgIAorICAgIEFTU0VSVChkYXRhYmFzZSk7Cisg
ICAgaWYgKCFkYXRhYmFzZSkgeworICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIElSQ0FNIEhSVEYgYXppbXV0aHMgd2hpY2ggd2UncmUg
bG9hZGluZyBhcmUgcmV2ZXJzZWQgZnJvbSB0aGUgcGFubmVyJ3Mgbm90aW9uLi4uCisgICAgZG91
YmxlIGF6aW11dGggPSAtZGVzaXJlZEF6aW11dGg7CisKKyAgICBpZiAoYXppbXV0aCA8IDApCisg
ICAgICAgIGF6aW11dGggKz0gMzYwLjA7IC8vIG1ha2UgcG9zaXRpdmUKKyAgICAKKyAgICBib29s
IGlzQXppbXV0aEdvb2QgPSBhemltdXRoID49IDAuMCAmJiBhemltdXRoIDw9IDM2MC4wOworICAg
IEFTU0VSVChpc0F6aW11dGhHb29kKTsKKyAgICBpZiAoIWlzQXppbXV0aEdvb2QpIHsKKyAgICAg
ICAgb3V0cHV0QnVzLT56ZXJvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQg
bnVtYmVyT2ZBemltdXRocyA9IGRhdGFiYXNlLT5udW1iZXJPZkF6aW11dGhzKCk7CisgICAgY29u
c3QgZG91YmxlIGFuZ2xlQmV0d2VlbkF6aW11dGhzID0gMzYwLjAgLyBudW1iZXJPZkF6aW11dGhz
OworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBhemltdXRoIGluZGV4IGFuZCB0aGUgYmxlbmQgKDAg
LT4gMSkgZm9yIGludGVycG9sYXRpb24uCisgICAgZG91YmxlIGRlc2lyZWRBemltdXRoSW5kZXhG
ID0gYXppbXV0aCAvIGFuZ2xlQmV0d2VlbkF6aW11dGhzOworICAgIGludCBkZXNpcmVkQXppbXV0
aEluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihkZXNpcmVkQXppbXV0aEluZGV4Rik7CisgICAgZG91
YmxlIGF6aW11dGhCbGVuZCA9IGRlc2lyZWRBemltdXRoSW5kZXhGIC0gc3RhdGljX2Nhc3Q8ZG91
YmxlPihkZXNpcmVkQXppbXV0aEluZGV4KTsKKyAgICAKKyAgICAvLyBXZSBkb24ndCBpbW1lZGlh
dGVseSBzdGFydCB1c2luZyB0aGlzIGF6aW11dGggaW5kZXgsIGJ1dCBpbnN0ZWFkIGFwcHJvYWNo
IHRoaXMgaW5kZXggZnJvbSB0aGUgbGFzdCBpbmRleCB3ZSByZW5kZXJlZCBhdC4KKyAgICAvLyBU
aGlzIG1pbmltaXplcyB0aGUgY2xpY2tzIGFuZCBncmFpbmluZXNzIGZvciBtb3Zpbmcgc291cmNl
cyB3aGljaCBvY2N1ciBvdGhlcndpc2UuCisgICAgZGVzaXJlZEF6aW11dGhJbmRleCA9IG1heCgw
LCBkZXNpcmVkQXppbXV0aEluZGV4KTsKKyAgICBkZXNpcmVkQXppbXV0aEluZGV4ID0gbWluKG51
bWJlck9mQXppbXV0aHMgLSAxLCBkZXNpcmVkQXppbXV0aEluZGV4KTsKKworICAgIC8vIFRoaXMg
YWxnb3JpdGhtIGN1cnJlbnRseSByZXF1aXJlcyB0aGF0IHdlIHByb2Nlc3MgaW4gcG93ZXItb2Yt
dHdvIHNpemUgY2h1bmtzIGF0IGxlYXN0IDEyOC4KKyAgICBBU1NFUlQoMVVMIDw8IHN0YXRpY19j
YXN0PGludD4obG9nMihmcmFtZXNUb1Byb2Nlc3MpKSA9PSBmcmFtZXNUb1Byb2Nlc3MpOworICAg
IEFTU0VSVChmcmFtZXNUb1Byb2Nlc3MgPj0gMTI4KTsKKyAgICAKKyAgICBjb25zdCB1bnNpZ25l
ZCBmcmFtZXNQZXJTZWdtZW50ID0gMTI4OworICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mU2Vn
bWVudHMgPSBmcmFtZXNUb1Byb2Nlc3MgLyBmcmFtZXNQZXJTZWdtZW50OworCisgICAgZm9yICh1
bnNpZ25lZCBzZWdtZW50ID0gMDsgc2VnbWVudCA8IG51bWJlck9mU2VnbWVudHM7ICsrc2VnbWVu
dCkgeworICAgICAgICBpZiAobV9pc0ZpcnN0UmVuZGVyKSB7CisgICAgICAgICAgICAvLyBTbmFw
IGV4YWN0bHkgdG8gZGVzaXJlZCBwb3NpdGlvbiAoZmlyc3QgdGltZSBhbmQgYWZ0ZXIgcmVzZXQo
KSkuCisgICAgICAgICAgICBtX2F6aW11dGhJbmRleCA9IGRlc2lyZWRBemltdXRoSW5kZXg7Cisg
ICAgICAgICAgICBtX2lzRmlyc3RSZW5kZXIgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIEVhY2ggc2VnbWVudCByZW5kZXJzIHdpdGggYW4gYXppbXV0aCBpbmRleCBj
bG9zZXIgYnkgb25lIHRvIHRoZSBkZXNpcmVkIGF6aW11dGggaW5kZXguCisgICAgICAgICAgICAv
LyBCZWNhdXNlIGludGVyLWF1cmFsIHRpbWUgZGVsYXkgaXMgbW9zdGx5IGEgZmFjdG9yIG9mIGF6
aW11dGggYW5kIHRoZSBkZWxheSBpcyB3aGVyZSB0aGUgY2xpY2tzIGFuZCBncmFpbmluZXNzIGNv
bWUgZnJvbSwKKyAgICAgICAgICAgIC8vIHdlIGRvbid0IGJvdGhlciBzbW9vdGhpbmcgdGhlIGVs
ZXZhdGlvbnMuCisgICAgICAgICAgICBib29sIHdyYXAgPSB3cmFwRGlzdGFuY2UobV9hemltdXRo
SW5kZXgsIGRlc2lyZWRBemltdXRoSW5kZXgsIG51bWJlck9mQXppbXV0aHMpOworICAgICAgICAg
ICAgaWYgKHdyYXApIHsKKyAgICAgICAgICAgICAgICBpZiAobV9hemltdXRoSW5kZXggPCBkZXNp
cmVkQXppbXV0aEluZGV4KQorICAgICAgICAgICAgICAgICAgICBtX2F6aW11dGhJbmRleCA9ICht
X2F6aW11dGhJbmRleCAtIDEgKyBudW1iZXJPZkF6aW11dGhzKSAlIG51bWJlck9mQXppbXV0aHM7
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobV9hemltdXRoSW5kZXggPiBkZXNpcmVkQXppbXV0
aEluZGV4KQorICAgICAgICAgICAgICAgICAgICBtX2F6aW11dGhJbmRleCA9IChtX2F6aW11dGhJ
bmRleCArIDEpICUgbnVtYmVyT2ZBemltdXRoczsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgaWYgKG1fYXppbXV0aEluZGV4IDwgZGVzaXJlZEF6aW11dGhJbmRleCkKKyAg
ICAgICAgICAgICAgICAgICAgbV9hemltdXRoSW5kZXggPSAobV9hemltdXRoSW5kZXggKyAxKSAl
IG51bWJlck9mQXppbXV0aHM7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobV9hemltdXRoSW5k
ZXggPiBkZXNpcmVkQXppbXV0aEluZGV4KQorICAgICAgICAgICAgICAgICAgICBtX2F6aW11dGhJ
bmRleCA9IChtX2F6aW11dGhJbmRleCAtIDEgKyBudW1iZXJPZkF6aW11dGhzKSAlIG51bWJlck9m
QXppbXV0aHM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IEdldCB0aGUgSFJURktlcm5lbHMgYW5kIGludGVycG9sYXRlZCBkZWxheXMuCisgICAgCisgICAg
ICAgIEhSVEZLZXJuZWwqIGtlcm5lbEw7CisgICAgICAgIEhSVEZLZXJuZWwqIGtlcm5lbFI7Cisg
ICAgICAgIGRvdWJsZSBmcmFtZURlbGF5TDsKKyAgICAgICAgZG91YmxlIGZyYW1lRGVsYXlSOwor
ICAgICAgICBkYXRhYmFzZS0+Z2V0S2VybmVsc0Zyb21BemltdXRoRWxldmF0aW9uKGF6aW11dGhC
bGVuZCwgbV9hemltdXRoSW5kZXgsIGVsZXZhdGlvbiwga2VybmVsTCwga2VybmVsUiwgZnJhbWVE
ZWxheUwsIGZyYW1lRGVsYXlSKTsKKworICAgICAgICBBU1NFUlQoa2VybmVsTCAmJiBrZXJuZWxS
KTsKKyAgICAgICAgaWYgKCFrZXJuZWxMIHx8ICFrZXJuZWxSKSB7CisgICAgICAgICAgICBvdXRw
dXRCdXMtPnplcm8oKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgQVNTRVJUKGZyYW1lRGVsYXlMIC8gc2FtcGxlUmF0ZSgpIDwgTWF4RGVsYXlUaW1l
U2Vjb25kcyAmJiBmcmFtZURlbGF5UiAvIHNhbXBsZVJhdGUoKSA8IE1heERlbGF5VGltZVNlY29u
ZHMpOworICAgICAgICAKKyAgICAgICAgLy8gTm9ybWFsbHksIHdlJ2xsIGp1c3QgYmUgZGVhbGlu
ZyB3aXRoIG1vbm8gc291cmNlcy4KKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHN0ZXJlbyBpbnB1
dCwgaW1wbGVtZW50IGEgc3RyYW5nZSBraW5kIG9mIHBhbm5pbmcgd2l0aCBsZWZ0IHNvdXJjZSBw
cm9jZXNzZWQgYnkgbGVmdCBIUlRGLCBhbmQgcmlnaHQgc291cmNlIGJ5IHJpZ2h0IEhSVEYuCisg
ICAgICAgIEF1ZGlvQ2hhbm5lbCogY2hhbm5lbEwgPSBpbnB1dEJ1cy0+Y2hhbm5lbEJ5VHlwZShB
dWRpb0J1czo6Q2hhbm5lbExlZnQpOworICAgICAgICBBdWRpb0NoYW5uZWwqIGNoYW5uZWxSID0g
bnVtSW5wdXRDaGFubmVscyA+IDEgPyBpbnB1dEJ1cy0+Y2hhbm5lbEJ5VHlwZShBdWRpb0J1czo6
Q2hhbm5lbFJpZ2h0KSA6IDA7CisKKyAgICAgICAgLy8gR2V0IHNvdXJjZSBhbmQgZGVzdGluYXRp
b24gcG9pbnRlcnMuCisgICAgICAgIGZsb2F0KiBzb3VyY2VMID0gY2hhbm5lbEwtPmRhdGEoKTsK
KyAgICAgICAgZmxvYXQqIHNvdXJjZVIgPSBudW1JbnB1dENoYW5uZWxzID4gMSA/IGNoYW5uZWxS
LT5kYXRhKCkgOiBzb3VyY2VMOworICAgICAgICBmbG9hdCogZGVzdGluYXRpb25MID0gb3V0cHV0
QnVzLT5jaGFubmVsQnlUeXBlKEF1ZGlvQnVzOjpDaGFubmVsTGVmdCktPmRhdGEoKTsKKyAgICAg
ICAgZmxvYXQqIGRlc3RpbmF0aW9uUiA9IG91dHB1dEJ1cy0+Y2hhbm5lbEJ5VHlwZShBdWRpb0J1
czo6Q2hhbm5lbFJpZ2h0KS0+ZGF0YSgpOworICAgIAorICAgICAgICAvLyBPZmZzZXQgc291cmNl
IGFuZCBkZXN0aW5hdGlvbiBwb2ludGVycyBmb3IgdGhlIGN1cnJlbnQgc2VnbWVudC4KKyAgICAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gc2VnbWVudCAqIGZyYW1lc1BlclNlZ21lbnQ7CisgICAgICAg
IHNvdXJjZUwgKz0gb2Zmc2V0OworICAgICAgICBzb3VyY2VSICs9IG9mZnNldDsKKyAgICAgICAg
ZGVzdGluYXRpb25MICs9IG9mZnNldDsKKyAgICAgICAgZGVzdGluYXRpb25SICs9IG9mZnNldDsK
KworICAgICAgICAvLyBGaXJzdCBydW4gdGhyb3VnaCBkZWxheSBsaW5lcyBmb3IgaW50ZXItYXVy
YWwgdGltZSBkaWZmZXJlbmNlLgorICAgICAgICBtX2RlbGF5TGluZUwuc2V0RGVsYXlGcmFtZXMo
ZnJhbWVEZWxheUwpOworICAgICAgICBtX2RlbGF5TGluZVIuc2V0RGVsYXlGcmFtZXMoZnJhbWVE
ZWxheVIpOworICAgICAgICBtX2RlbGF5TGluZUwucHJvY2Vzcyhzb3VyY2VMLCBkZXN0aW5hdGlv
bkwsIGZyYW1lc1BlclNlZ21lbnQpOworICAgICAgICBtX2RlbGF5TGluZVIucHJvY2Vzcyhzb3Vy
Y2VSLCBkZXN0aW5hdGlvblIsIGZyYW1lc1BlclNlZ21lbnQpOworCisgICAgICAgIC8vIE5vdyBk
byB0aGUgY29udm9sdXRpb25zIGluLXBsYWNlLgorICAgICAgICBtX2NvbnZvbHZlckwucHJvY2Vz
cyhrZXJuZWxMLT5mZnRGcmFtZSgpLCBkZXN0aW5hdGlvbkwsIGRlc3RpbmF0aW9uTCwgZnJhbWVz
UGVyU2VnbWVudCk7CisgICAgICAgIG1fY29udm9sdmVyUi5wcm9jZXNzKGtlcm5lbFItPmZmdEZy
YW1lKCksIGRlc3RpbmF0aW9uUiwgZGVzdGluYXRpb25SLCBmcmFtZXNQZXJTZWdtZW50KTsKKyAg
ICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJf
QVVESU8pCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURlBhbm5lci5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBIUlRGUGFubmVyX2gKKyNkZWZpbmUgSFJURlBhbm5lcl9o
CisKKyNpbmNsdWRlICJEZWxheVByb2Nlc3Nvci5oIgorI2luY2x1ZGUgIkZGVENvbnZvbHZlci5o
IgorI2luY2x1ZGUgIlBhbm5lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZG
VEZyYW1lOworY2xhc3MgSFJURkRhdGFiYXNlOworCitjbGFzcyBIUlRGUGFubmVyIDogcHVibGlj
IFBhbm5lciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSFJURlBhbm5lcihkb3VibGUgc2FtcGxl
UmF0ZSk7CisgICAgdmlydHVhbCB+SFJURlBhbm5lcigpOworCisgICAgLy8gUGFubmVyCisgICAg
dmlydHVhbCB2b2lkIHBhbihkb3VibGUgYXppbXV0aCwgZG91YmxlIGVsZXZhdGlvbiwgQXVkaW9C
dXMqIGlucHV0QnVzLCBBdWRpb0J1cyogb3V0cHV0QnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNz
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKKworICAgIHNpemVfdCBmZnRTaXplKCkgeyBy
ZXR1cm4gZmZ0U2l6ZUZvclNhbXBsZVJhdGUobV9zYW1wbGVSYXRlKTsgfQorICAgIHN0YXRpYyBz
aXplX3QgZmZ0U2l6ZUZvclNhbXBsZVJhdGUoZG91YmxlIHNhbXBsZVJhdGUpOworCisgICAgZG91
YmxlIHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBNYXhEZWxheVRpbWVTZWNvbmRzOworCisg
ICAgZG91YmxlIG1fc2FtcGxlUmF0ZTsKKyAgICAKKyAgICAvLyBtX2lzRmlyc3RSZW5kZXIgYW5k
IG1fYXppbXV0aEluZGV4IGFyZSB1c2VkIHRvIGF2b2lkIGhhcnNobHkgY2hhbmdpbmcgZnJvbSBy
ZW5kZXJpbmcgYXQgb25lIGF6aW11dGggYW5nbGUgdG8gYW5vdGhlciBhbmdsZSB2ZXJ5IGZhciBh
d2F5LgorICAgIC8vIENoYW5naW5nIHRoZSBhemltdXRoIGdyYWR1YWxseSBwcm9kdWNlcyBhIHNt
b290aGVyIHNvdW5kLgorICAgIGJvb2wgbV9pc0ZpcnN0UmVuZGVyOworICAgIGludCBtX2F6aW11
dGhJbmRleDsKKworICAgIEZGVENvbnZvbHZlciBtX2NvbnZvbHZlckw7CisgICAgRkZUQ29udm9s
dmVyIG1fY29udm9sdmVyUjsKKyAgICBEZWxheURTUEtlcm5lbCBtX2RlbGF5TGluZUw7CisgICAg
RGVsYXlEU1BLZXJuZWwgbV9kZWxheUxpbmVSOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gSFJURlBhbm5lcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69145</attachid>
            <date>2010-09-28 17:47:10 -0700</date>
            <delta_ts>2010-09-28 18:00:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46299-20100928174709.patch</filename>
            <type>text/plain</type>
            <size>14734</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODYxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTAtMDktMjggIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgSFJURlBhbm5lciBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDYyOTkKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgYXVkaW8gQVBJ
IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRG
UGFubmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIUlRGUGFubmVyOjpIUlRGUGFu
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZQYW5uZXI6On5IUlRGUGFubmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhSVEZQYW5uZXI6OmZmdFNpemVGb3JTYW1wbGVSYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkhSVEZQYW5uZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OndyYXBEaXN0
YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpIUlRGUGFubmVyOjpjYWxjdWxhdGVEZXNpcmVkQXpp
bXV0aEluZGV4QW5kQmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SFJURlBhbm5lcjo6cGFuKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SFJURlBhbm5lcjo6ZmZ0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpIUlRGUGFu
bmVyOjpzYW1wbGVSYXRlKToKKwogMjAxMC0wOS0yOCAgTWFyYy1BbnRvaW5lIFJ1ZWwgIDxtYXJ1
ZWxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURlBhbm5lci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDIzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisK
KyNpbmNsdWRlICJIUlRGUGFubmVyLmgiCisKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2luY2x1
ZGUgIkZGVENvbnZvbHZlci5oIgorI2luY2x1ZGUgIkhSVEZEYXRhYmFzZS5oIgorI2luY2x1ZGUg
IkhSVEZEYXRhYmFzZUxvYWRlci5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxt
YXRoLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOwor
IAorbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGUgdmFsdWUgb2YgMiBtaWxsaXNlY29uZHMg
aXMgbGFyZ2VyIHRoYW4gdGhlIGxhcmdlc3QgZGVsYXkgd2hpY2ggZXhpc3RzIGluIGFueSBIUlRG
S2VybmVsIGZyb20gdGhlIGRlZmF1bHQgSFJURkRhdGFiYXNlICgwLjAxMzYgc2Vjb25kcykuCisv
LyBXZSBBU1NFUlQgdGhlIGRlbGF5IHZhbHVlcyB1c2VkIGluIHByb2Nlc3MoKSB3aXRoIHRoaXMg
dmFsdWUuCitjb25zdCBkb3VibGUgSFJURlBhbm5lcjo6TWF4RGVsYXlUaW1lU2Vjb25kcyA9IDAu
MDAyOworCitIUlRGUGFubmVyOjpIUlRGUGFubmVyKGRvdWJsZSBzYW1wbGVSYXRlKQorICAgIDog
UGFubmVyKFBhbm5pbmdNb2RlbEhSVEYpCisgICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkK
KyAgICAsIG1faXNGaXJzdFJlbmRlcih0cnVlKQorICAgICwgbV9hemltdXRoSW5kZXgoMCkKKyAg
ICAsIG1fY29udm9sdmVyTChmZnRTaXplRm9yU2FtcGxlUmF0ZShzYW1wbGVSYXRlKSkKKyAgICAs
IG1fY29udm9sdmVyUihmZnRTaXplRm9yU2FtcGxlUmF0ZShzYW1wbGVSYXRlKSkKKyAgICAsIG1f
ZGVsYXlMaW5lTChNYXhEZWxheVRpbWVTZWNvbmRzLCBzYW1wbGVSYXRlKQorICAgICwgbV9kZWxh
eUxpbmVSKE1heERlbGF5VGltZVNlY29uZHMsIHNhbXBsZVJhdGUpCit7IAorfQorCitIUlRGUGFu
bmVyOjp+SFJURlBhbm5lcigpCit7Cit9CisKK3NpemVfdCBIUlRGUGFubmVyOjpmZnRTaXplRm9y
U2FtcGxlUmF0ZShkb3VibGUgc2FtcGxlUmF0ZSkKK3sKKyAgICAvLyBUaGUgSFJURiBpbXB1bHNl
IHJlc3BvbnNlcyAobG9hZGVkIGFzIGF1ZGlvIHJlc291cmNlcykgYXJlIDUxMiBzYW1wbGUtZnJh
bWVzIEA0NC4xS0h6LgorICAgIC8vIEN1cnJlbnRseSwgd2UgdHJ1bmNhdGUgdGhlIGltcHVsc2Ug
cmVzcG9uc2VzIHRvIGhhbGYgdGhpcyBzaXplLCBidXQgYW4gRkZULXNpemUgb2YgdHdpY2UgaW1w
dWxzZSByZXNwb25zZSBzaXplIGlzIG5lZWRlZCAoZm9yIGNvbnZvbHV0aW9uKS4KKyAgICAvLyBT
byBmb3Igc2FtcGxlIHJhdGVzIGFyb3VuZCA0NC4xS0h6IGFuIEZGVCBzaXplIG9mIDUxMiBpcyBn
b29kLiAgV2UgZG91YmxlIHRoYXQgc2l6ZSBmb3IgaGlnaGVyIHNhbXBsZSByYXRlcy4KKyAgICBB
U1NFUlQoc2FtcGxlUmF0ZSA+PSA0NDEwMCAmJiBzYW1wbGVSYXRlIDw9IDk2MDAwLjApOworICAg
IHJldHVybiAoc2FtcGxlUmF0ZSA8PSA0ODAwMC4wKSA/IDUxMiA6IDEwMjQ7Cit9CisKK3ZvaWQg
SFJURlBhbm5lcjo6cmVzZXQoKQoreworICAgIG1faXNGaXJzdFJlbmRlciA9IHRydWU7CisgICAg
bV9jb252b2x2ZXJMLnJlc2V0KCk7CisgICAgbV9jb252b2x2ZXJSLnJlc2V0KCk7CisgICAgbV9k
ZWxheUxpbmVMLnJlc2V0KCk7CisgICAgbV9kZWxheUxpbmVSLnJlc2V0KCk7Cit9CisKK3N0YXRp
YyBib29sIHdyYXBEaXN0YW5jZShpbnQgaSwgaW50IGosIGludCBsZW5ndGgpCit7CisgICAgaW50
IGRpcmVjdERpc3RhbmNlID0gYWJzKGkgLSBqKTsKKyAgICBpbnQgaW5kaXJlY3REaXN0YW5jZSA9
IGxlbmd0aCAtIGRpcmVjdERpc3RhbmNlOworCisgICAgcmV0dXJuIGluZGlyZWN0RGlzdGFuY2Ug
PCBkaXJlY3REaXN0YW5jZTsKK30KKworaW50IEhSVEZQYW5uZXI6OmNhbGN1bGF0ZURlc2lyZWRB
emltdXRoSW5kZXhBbmRCbGVuZChkb3VibGUgYXppbXV0aCwgZG91YmxlJiBhemltdXRoQmxlbmQp
Cit7CisgICAgLy8gQ29udmVydCB0aGUgYXppbXV0aCBhbmdsZSBmcm9tIHRoZSByYW5nZSAtMTgw
IC0+ICsxODAgaW50byB0aGUgcmFuZ2UgMCAtPiAzNjAuCisgICAgLy8gVGhlIGF6aW11dGggaW5k
ZXggbWF5IHRoZW4gYmUgY2FsY3VsYXRlZCBmcm9tIHRoaXMgcG9zaXRpdmUgdmFsdWUuCisgICAg
aWYgKGF6aW11dGggPCAwKQorICAgICAgICBhemltdXRoICs9IDM2MC4wOworICAgIAorICAgIEhS
VEZEYXRhYmFzZSogZGF0YWJhc2UgPSBIUlRGRGF0YWJhc2VMb2FkZXI6OmRlZmF1bHRIUlRGRGF0
YWJhc2UoKTsgICAgCisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKyAgICAKKyAgICBpbnQgbnVtYmVy
T2ZBemltdXRocyA9IGRhdGFiYXNlLT5udW1iZXJPZkF6aW11dGhzKCk7CisgICAgY29uc3QgZG91
YmxlIGFuZ2xlQmV0d2VlbkF6aW11dGhzID0gMzYwLjAgLyBudW1iZXJPZkF6aW11dGhzOworCisg
ICAgLy8gQ2FsY3VsYXRlIHRoZSBhemltdXRoIGluZGV4IGFuZCB0aGUgYmxlbmQgKDAgLT4gMSkg
Zm9yIGludGVycG9sYXRpb24uCisgICAgZG91YmxlIGRlc2lyZWRBemltdXRoSW5kZXhGID0gYXpp
bXV0aCAvIGFuZ2xlQmV0d2VlbkF6aW11dGhzOworICAgIGludCBkZXNpcmVkQXppbXV0aEluZGV4
ID0gc3RhdGljX2Nhc3Q8aW50PihkZXNpcmVkQXppbXV0aEluZGV4Rik7CisgICAgYXppbXV0aEJs
ZW5kID0gZGVzaXJlZEF6aW11dGhJbmRleEYgLSBzdGF0aWNfY2FzdDxkb3VibGU+KGRlc2lyZWRB
emltdXRoSW5kZXgpOworICAgIAorICAgIC8vIFdlIGRvbid0IGltbWVkaWF0ZWx5IHN0YXJ0IHVz
aW5nIHRoaXMgYXppbXV0aCBpbmRleCwgYnV0IGluc3RlYWQgYXBwcm9hY2ggdGhpcyBpbmRleCBm
cm9tIHRoZSBsYXN0IGluZGV4IHdlIHJlbmRlcmVkIGF0LgorICAgIC8vIFRoaXMgbWluaW1pemVz
IHRoZSBjbGlja3MgYW5kIGdyYWluaW5lc3MgZm9yIG1vdmluZyBzb3VyY2VzIHdoaWNoIG9jY3Vy
IG90aGVyd2lzZS4KKyAgICBkZXNpcmVkQXppbXV0aEluZGV4ID0gbWF4KDAsIGRlc2lyZWRBemlt
dXRoSW5kZXgpOworICAgIGRlc2lyZWRBemltdXRoSW5kZXggPSBtaW4obnVtYmVyT2ZBemltdXRo
cyAtIDEsIGRlc2lyZWRBemltdXRoSW5kZXgpOworICAgIHJldHVybiBkZXNpcmVkQXppbXV0aElu
ZGV4OworfQorCit2b2lkIEhSVEZQYW5uZXI6OnBhbihkb3VibGUgZGVzaXJlZEF6aW11dGgsIGRv
dWJsZSBlbGV2YXRpb24sIEF1ZGlvQnVzKiBpbnB1dEJ1cywgQXVkaW9CdXMqIG91dHB1dEJ1cywg
c2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICB1bnNpZ25lZCBudW1JbnB1dENoYW5uZWxz
ID0gaW5wdXRCdXMgPyBpbnB1dEJ1cy0+bnVtYmVyT2ZDaGFubmVscygpIDogMDsKKworICAgIGJv
b2wgaXNJbnB1dEdvb2QgPSBpbnB1dEJ1cyAmJiAgbnVtSW5wdXRDaGFubmVscyA+PSAxICYmIG51
bUlucHV0Q2hhbm5lbHMgPD0gMjsKKyAgICBBU1NFUlQoaXNJbnB1dEdvb2QpOworCisgICAgYm9v
bCBpc091dHB1dEdvb2QgPSBvdXRwdXRCdXMgJiYgb3V0cHV0QnVzLT5udW1iZXJPZkNoYW5uZWxz
KCkgPT0gMiAmJiBmcmFtZXNUb1Byb2Nlc3MgPD0gb3V0cHV0QnVzLT5sZW5ndGgoKTsKKyAgICBB
U1NFUlQoaXNPdXRwdXRHb29kKTsKKworICAgIGlmICghaXNJbnB1dEdvb2QgfHwgIWlzT3V0cHV0
R29vZCkgeworICAgICAgICBpZiAob3V0cHV0QnVzKQorICAgICAgICAgICAgb3V0cHV0QnVzLT56
ZXJvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNvZGUgb25seSBy
dW5zIGFzIGxvbmcgYXMgdGhlIGNvbnRleHQgaXMgYWxpdmUgYW5kIGFmdGVyIGRhdGFiYXNlIGhh
cyBiZWVuIGxvYWRlZC4KKyAgICBIUlRGRGF0YWJhc2UqIGRhdGFiYXNlID0gSFJURkRhdGFiYXNl
TG9hZGVyOjpkZWZhdWx0SFJURkRhdGFiYXNlKCk7ICAgIAorICAgIEFTU0VSVChkYXRhYmFzZSk7
CisgICAgaWYgKCFkYXRhYmFzZSkgeworICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIElSQ0FNIEhSVEYgYXppbXV0aHMgdmFsdWVzIGZy
b20gdGhlIGxvYWRlZCBkYXRhYmFzZSBpcyByZXZlcnNlZCBmcm9tIHRoZSBwYW5uZXIncyBub3Rp
b24gb2YgYXppbXV0aC4KKyAgICBkb3VibGUgYXppbXV0aCA9IC1kZXNpcmVkQXppbXV0aDsKKwor
ICAgIGJvb2wgaXNBemltdXRoR29vZCA9IGF6aW11dGggPj0gLTE4MC4wICYmIGF6aW11dGggPD0g
MTgwLjA7CisgICAgQVNTRVJUKGlzQXppbXV0aEdvb2QpOworICAgIGlmICghaXNBemltdXRoR29v
ZCkgeworICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIE5vcm1hbGx5LCB3ZSdsbCBqdXN0IGJlIGRlYWxpbmcgd2l0aCBtb25vIHNvdXJj
ZXMuCisgICAgLy8gSWYgd2UgaGF2ZSBhIHN0ZXJlbyBpbnB1dCwgaW1wbGVtZW50IHN0ZXJlbyBw
YW5uaW5nIHdpdGggbGVmdCBzb3VyY2UgcHJvY2Vzc2VkIGJ5IGxlZnQgSFJURiwgYW5kIHJpZ2h0
IHNvdXJjZSBieSByaWdodCBIUlRGLgorICAgIEF1ZGlvQ2hhbm5lbCogaW5wdXRDaGFubmVsTCA9
IGlucHV0QnVzLT5jaGFubmVsQnlUeXBlKEF1ZGlvQnVzOjpDaGFubmVsTGVmdCk7CisgICAgQXVk
aW9DaGFubmVsKiBpbnB1dENoYW5uZWxSID0gbnVtSW5wdXRDaGFubmVscyA+IDEgPyBpbnB1dEJ1
cy0+Y2hhbm5lbEJ5VHlwZShBdWRpb0J1czo6Q2hhbm5lbFJpZ2h0KSA6IDA7CisKKyAgICAvLyBH
ZXQgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBwb2ludGVycy4KKyAgICBmbG9hdCogc291cmNlTCA9
IGlucHV0Q2hhbm5lbEwtPmRhdGEoKTsKKyAgICBmbG9hdCogc291cmNlUiA9IG51bUlucHV0Q2hh
bm5lbHMgPiAxID8gaW5wdXRDaGFubmVsUi0+ZGF0YSgpIDogc291cmNlTDsKKyAgICBmbG9hdCog
ZGVzdGluYXRpb25MID0gb3V0cHV0QnVzLT5jaGFubmVsQnlUeXBlKEF1ZGlvQnVzOjpDaGFubmVs
TGVmdCktPmRhdGEoKTsKKyAgICBmbG9hdCogZGVzdGluYXRpb25SID0gb3V0cHV0QnVzLT5jaGFu
bmVsQnlUeXBlKEF1ZGlvQnVzOjpDaGFubmVsUmlnaHQpLT5kYXRhKCk7CisKKyAgICBkb3VibGUg
YXppbXV0aEJsZW5kOworICAgIGludCBkZXNpcmVkQXppbXV0aEluZGV4ID0gY2FsY3VsYXRlRGVz
aXJlZEF6aW11dGhJbmRleEFuZEJsZW5kKGF6aW11dGgsIGF6aW11dGhCbGVuZCk7CisKKyAgICAv
LyBUaGlzIGFsZ29yaXRobSBjdXJyZW50bHkgcmVxdWlyZXMgdGhhdCB3ZSBwcm9jZXNzIGluIHBv
d2VyLW9mLXR3byBzaXplIGNodW5rcyBhdCBsZWFzdCAxMjguCisgICAgQVNTRVJUKDFVTCA8PCBz
dGF0aWNfY2FzdDxpbnQ+KGxvZzIoZnJhbWVzVG9Qcm9jZXNzKSkgPT0gZnJhbWVzVG9Qcm9jZXNz
KTsKKyAgICBBU1NFUlQoZnJhbWVzVG9Qcm9jZXNzID49IDEyOCk7CisgICAgCisgICAgY29uc3Qg
dW5zaWduZWQgZnJhbWVzUGVyU2VnbWVudCA9IDEyODsKKyAgICBjb25zdCB1bnNpZ25lZCBudW1i
ZXJPZlNlZ21lbnRzID0gZnJhbWVzVG9Qcm9jZXNzIC8gZnJhbWVzUGVyU2VnbWVudDsKKworICAg
IGZvciAodW5zaWduZWQgc2VnbWVudCA9IDA7IHNlZ21lbnQgPCBudW1iZXJPZlNlZ21lbnRzOyAr
K3NlZ21lbnQpIHsKKyAgICAgICAgaWYgKG1faXNGaXJzdFJlbmRlcikgeworICAgICAgICAgICAg
Ly8gU25hcCBleGFjdGx5IHRvIGRlc2lyZWQgcG9zaXRpb24gKGZpcnN0IHRpbWUgYW5kIGFmdGVy
IHJlc2V0KCkpLgorICAgICAgICAgICAgbV9hemltdXRoSW5kZXggPSBkZXNpcmVkQXppbXV0aElu
ZGV4OworICAgICAgICAgICAgbV9pc0ZpcnN0UmVuZGVyID0gZmFsc2U7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBFYWNoIHNlZ21lbnQgcmVuZGVycyB3aXRoIGFuIGF6aW11dGgg
aW5kZXggY2xvc2VyIGJ5IG9uZSB0byB0aGUgZGVzaXJlZCBhemltdXRoIGluZGV4LgorICAgICAg
ICAgICAgLy8gQmVjYXVzZSBpbnRlci1hdXJhbCB0aW1lIGRlbGF5IGlzIG1vc3RseSBhIGZhY3Rv
ciBvZiBhemltdXRoIGFuZCB0aGUgZGVsYXkgaXMgd2hlcmUgdGhlIGNsaWNrcyBhbmQgZ3JhaW5p
bmVzcyBjb21lIGZyb20sCisgICAgICAgICAgICAvLyB3ZSBkb24ndCBib3RoZXIgc21vb3RoaW5n
IHRoZSBlbGV2YXRpb25zLgorICAgICAgICAgICAgaW50IG51bWJlck9mQXppbXV0aHMgPSBkYXRh
YmFzZS0+bnVtYmVyT2ZBemltdXRocygpOworICAgICAgICAgICAgYm9vbCB3cmFwID0gd3JhcERp
c3RhbmNlKG1fYXppbXV0aEluZGV4LCBkZXNpcmVkQXppbXV0aEluZGV4LCBudW1iZXJPZkF6aW11
dGhzKTsKKyAgICAgICAgICAgIGlmICh3cmFwKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fYXpp
bXV0aEluZGV4IDwgZGVzaXJlZEF6aW11dGhJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgbV9h
emltdXRoSW5kZXggPSAobV9hemltdXRoSW5kZXggLSAxICsgbnVtYmVyT2ZBemltdXRocykgJSBu
dW1iZXJPZkF6aW11dGhzOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1fYXppbXV0aEluZGV4
ID4gZGVzaXJlZEF6aW11dGhJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgbV9hemltdXRoSW5k
ZXggPSAobV9hemltdXRoSW5kZXggKyAxKSAlIG51bWJlck9mQXppbXV0aHM7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChtX2F6aW11dGhJbmRleCA8IGRlc2lyZWRB
emltdXRoSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIG1fYXppbXV0aEluZGV4ID0gKG1fYXpp
bXV0aEluZGV4ICsgMSkgJSBudW1iZXJPZkF6aW11dGhzOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKG1fYXppbXV0aEluZGV4ID4gZGVzaXJlZEF6aW11dGhJbmRleCkKKyAgICAgICAgICAgICAg
ICAgICAgbV9hemltdXRoSW5kZXggPSAobV9hemltdXRoSW5kZXggLSAxICsgbnVtYmVyT2ZBemlt
dXRocykgJSBudW1iZXJPZkF6aW11dGhzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAvLyBHZXQgdGhlIEhSVEZLZXJuZWxzIGFuZCBpbnRlcnBvbGF0ZWQgZGVs
YXlzLiAgICAKKyAgICAgICAgSFJURktlcm5lbCoga2VybmVsTDsKKyAgICAgICAgSFJURktlcm5l
bCoga2VybmVsUjsKKyAgICAgICAgZG91YmxlIGZyYW1lRGVsYXlMOworICAgICAgICBkb3VibGUg
ZnJhbWVEZWxheVI7CisgICAgICAgIGRhdGFiYXNlLT5nZXRLZXJuZWxzRnJvbUF6aW11dGhFbGV2
YXRpb24oYXppbXV0aEJsZW5kLCBtX2F6aW11dGhJbmRleCwgZWxldmF0aW9uLCBrZXJuZWxMLCBr
ZXJuZWxSLCBmcmFtZURlbGF5TCwgZnJhbWVEZWxheVIpOworCisgICAgICAgIEFTU0VSVChrZXJu
ZWxMICYmIGtlcm5lbFIpOworICAgICAgICBpZiAoIWtlcm5lbEwgfHwgIWtlcm5lbFIpIHsKKyAg
ICAgICAgICAgIG91dHB1dEJ1cy0+emVybygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQoZnJhbWVEZWxheUwgLyBzYW1wbGVSYXRlKCkg
PCBNYXhEZWxheVRpbWVTZWNvbmRzICYmIGZyYW1lRGVsYXlSIC8gc2FtcGxlUmF0ZSgpIDwgTWF4
RGVsYXlUaW1lU2Vjb25kcyk7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRo
ZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvaW50ZXJzIGZvciB0aGUgY3VycmVudCBzZWdtZW50
LgorICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBzZWdtZW50ICogZnJhbWVzUGVyU2VnbWVudDsK
KyAgICAgICAgZmxvYXQqIHNlZ21lbnRTb3VyY2VMID0gc291cmNlTCArIG9mZnNldDsKKyAgICAg
ICAgZmxvYXQqIHNlZ21lbnRTb3VyY2VSID0gc291cmNlUiArIG9mZnNldDsKKyAgICAgICAgZmxv
YXQqIHNlZ21lbnREZXN0aW5hdGlvbkwgPSBkZXN0aW5hdGlvbkwgKyBvZmZzZXQ7CisgICAgICAg
IGZsb2F0KiBzZWdtZW50RGVzdGluYXRpb25SID0gZGVzdGluYXRpb25SICsgb2Zmc2V0OworCisg
ICAgICAgIC8vIEZpcnN0IHJ1biB0aHJvdWdoIGRlbGF5IGxpbmVzIGZvciBpbnRlci1hdXJhbCB0
aW1lIGRpZmZlcmVuY2UuCisgICAgICAgIG1fZGVsYXlMaW5lTC5zZXREZWxheUZyYW1lcyhmcmFt
ZURlbGF5TCk7CisgICAgICAgIG1fZGVsYXlMaW5lUi5zZXREZWxheUZyYW1lcyhmcmFtZURlbGF5
Uik7CisgICAgICAgIG1fZGVsYXlMaW5lTC5wcm9jZXNzKHNlZ21lbnRTb3VyY2VMLCBzZWdtZW50
RGVzdGluYXRpb25MLCBmcmFtZXNQZXJTZWdtZW50KTsKKyAgICAgICAgbV9kZWxheUxpbmVSLnBy
b2Nlc3Moc2VnbWVudFNvdXJjZVIsIHNlZ21lbnREZXN0aW5hdGlvblIsIGZyYW1lc1BlclNlZ21l
bnQpOworCisgICAgICAgIC8vIE5vdyBkbyB0aGUgY29udm9sdXRpb25zIGluLXBsYWNlLgorICAg
ICAgICBtX2NvbnZvbHZlckwucHJvY2VzcyhrZXJuZWxMLT5mZnRGcmFtZSgpLCBzZWdtZW50RGVz
dGluYXRpb25MLCBzZWdtZW50RGVzdGluYXRpb25MLCBmcmFtZXNQZXJTZWdtZW50KTsKKyAgICAg
ICAgbV9jb252b2x2ZXJSLnByb2Nlc3Moa2VybmVsUi0+ZmZ0RnJhbWUoKSwgc2VnbWVudERlc3Rp
bmF0aW9uUiwgc2VnbWVudERlc3RpbmF0aW9uUiwgZnJhbWVzUGVyU2VnbWVudCk7CisgICAgfQor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElP
KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgSFJURlBhbm5lcl9oCisjZGVmaW5lIEhSVEZQYW5uZXJfaAorCisj
aW5jbHVkZSAiRGVsYXlEU1BLZXJuZWwuaCIKKyNpbmNsdWRlICJGRlRDb252b2x2ZXIuaCIKKyNp
bmNsdWRlICJQYW5uZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIUlRGUGFu
bmVyIDogcHVibGljIFBhbm5lciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSFJURlBhbm5lcihk
b3VibGUgc2FtcGxlUmF0ZSk7CisgICAgdmlydHVhbCB+SFJURlBhbm5lcigpOworCisgICAgLy8g
UGFubmVyCisgICAgdmlydHVhbCB2b2lkIHBhbihkb3VibGUgYXppbXV0aCwgZG91YmxlIGVsZXZh
dGlvbiwgQXVkaW9CdXMqIGlucHV0QnVzLCBBdWRpb0J1cyogb3V0cHV0QnVzLCBzaXplX3QgZnJh
bWVzVG9Qcm9jZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKKworICAgIHNpemVfdCBm
ZnRTaXplKCkgeyByZXR1cm4gZmZ0U2l6ZUZvclNhbXBsZVJhdGUobV9zYW1wbGVSYXRlKTsgfQor
ICAgIHN0YXRpYyBzaXplX3QgZmZ0U2l6ZUZvclNhbXBsZVJhdGUoZG91YmxlIHNhbXBsZVJhdGUp
OworCisgICAgZG91YmxlIHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgLy8gR2l2ZW4gYW4gYXppbXV0aCBhbmdsZSBpbiB0aGUg
cmFuZ2UgLTE4MCAtPiArMTgwLCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGF6aW11dGggaW5k
ZXggZm9yIHRoZSBkYXRhYmFzZSwKKyAgICAvLyBhbmQgYXppbXV0aEJsZW5kIHdoaWNoIGlzIGFu
IGludGVycG9sYXRpb24gdmFsdWUgZnJvbSAwIC0+IDEuCisgICAgaW50IGNhbGN1bGF0ZURlc2ly
ZWRBemltdXRoSW5kZXhBbmRCbGVuZChkb3VibGUgYXppbXV0aCwgZG91YmxlJiBhemltdXRoQmxl
bmQpOworCisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBNYXhEZWxheVRpbWVTZWNvbmRzOworCisg
ICAgZG91YmxlIG1fc2FtcGxlUmF0ZTsKKyAgICAKKyAgICAvLyBtX2lzRmlyc3RSZW5kZXIgYW5k
IG1fYXppbXV0aEluZGV4IGFyZSB1c2VkIHRvIGF2b2lkIGhhcnNobHkgY2hhbmdpbmcgZnJvbSBy
ZW5kZXJpbmcgYXQgb25lIGF6aW11dGggYW5nbGUgdG8gYW5vdGhlciBhbmdsZSB2ZXJ5IGZhciBh
d2F5LgorICAgIC8vIENoYW5naW5nIHRoZSBhemltdXRoIGdyYWR1YWxseSBwcm9kdWNlcyBhIHNt
b290aGVyIHNvdW5kLgorICAgIGJvb2wgbV9pc0ZpcnN0UmVuZGVyOworICAgIGludCBtX2F6aW11
dGhJbmRleDsKKworICAgIEZGVENvbnZvbHZlciBtX2NvbnZvbHZlckw7CisgICAgRkZUQ29udm9s
dmVyIG1fY29udm9sdmVyUjsKKyAgICBEZWxheURTUEtlcm5lbCBtX2RlbGF5TGluZUw7CisgICAg
RGVsYXlEU1BLZXJuZWwgbV9kZWxheUxpbmVSOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gSFJURlBhbm5lcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69146</attachid>
            <date>2010-09-28 18:00:30 -0700</date>
            <delta_ts>2010-10-08 17:11:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46299-20100928180029.patch</filename>
            <type>text/plain</type>
            <size>14746</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODYxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTAtMDktMjggIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgSFJURlBhbm5lciBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDYyOTkKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgYXVkaW8gQVBJ
IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRG
UGFubmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIUlRGUGFubmVyOjpIUlRGUGFu
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZQYW5uZXI6On5IUlRGUGFubmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhSVEZQYW5uZXI6OmZmdFNpemVGb3JTYW1wbGVSYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkhSVEZQYW5uZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OndyYXBEaXN0
YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpIUlRGUGFubmVyOjpjYWxjdWxhdGVEZXNpcmVkQXpp
bXV0aEluZGV4QW5kQmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SFJURlBhbm5lcjo6cGFuKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SFJURlBhbm5lcjo6ZmZ0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpIUlRGUGFu
bmVyOjpzYW1wbGVSYXRlKToKKwogMjAxMC0wOS0yOCAgTWFyYy1BbnRvaW5lIFJ1ZWwgIDxtYXJ1
ZWxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURlBhbm5lci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDIzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisK
KyNpbmNsdWRlICJIUlRGUGFubmVyLmgiCisKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2luY2x1
ZGUgIkZGVENvbnZvbHZlci5oIgorI2luY2x1ZGUgIkhSVEZEYXRhYmFzZS5oIgorI2luY2x1ZGUg
IkhSVEZEYXRhYmFzZUxvYWRlci5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxt
YXRoLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOwor
IAorbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGUgdmFsdWUgb2YgMiBtaWxsaXNlY29uZHMg
aXMgbGFyZ2VyIHRoYW4gdGhlIGxhcmdlc3QgZGVsYXkgd2hpY2ggZXhpc3RzIGluIGFueSBIUlRG
S2VybmVsIGZyb20gdGhlIGRlZmF1bHQgSFJURkRhdGFiYXNlICgwLjAxMzYgc2Vjb25kcykuCisv
LyBXZSBBU1NFUlQgdGhlIGRlbGF5IHZhbHVlcyB1c2VkIGluIHByb2Nlc3MoKSB3aXRoIHRoaXMg
dmFsdWUuCitjb25zdCBkb3VibGUgSFJURlBhbm5lcjo6TWF4RGVsYXlUaW1lU2Vjb25kcyA9IDAu
MDAyOworCitIUlRGUGFubmVyOjpIUlRGUGFubmVyKGRvdWJsZSBzYW1wbGVSYXRlKQorICAgIDog
UGFubmVyKFBhbm5pbmdNb2RlbEhSVEYpCisgICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkK
KyAgICAsIG1faXNGaXJzdFJlbmRlcih0cnVlKQorICAgICwgbV9hemltdXRoSW5kZXgoMCkKKyAg
ICAsIG1fY29udm9sdmVyTChmZnRTaXplRm9yU2FtcGxlUmF0ZShzYW1wbGVSYXRlKSkKKyAgICAs
IG1fY29udm9sdmVyUihmZnRTaXplRm9yU2FtcGxlUmF0ZShzYW1wbGVSYXRlKSkKKyAgICAsIG1f
ZGVsYXlMaW5lTChNYXhEZWxheVRpbWVTZWNvbmRzLCBzYW1wbGVSYXRlKQorICAgICwgbV9kZWxh
eUxpbmVSKE1heERlbGF5VGltZVNlY29uZHMsIHNhbXBsZVJhdGUpCit7IAorfQorCitIUlRGUGFu
bmVyOjp+SFJURlBhbm5lcigpCit7Cit9CisKK3NpemVfdCBIUlRGUGFubmVyOjpmZnRTaXplRm9y
U2FtcGxlUmF0ZShkb3VibGUgc2FtcGxlUmF0ZSkKK3sKKyAgICAvLyBUaGUgSFJURiBpbXB1bHNl
IHJlc3BvbnNlcyAobG9hZGVkIGFzIGF1ZGlvIHJlc291cmNlcykgYXJlIDUxMiBzYW1wbGUtZnJh
bWVzIEA0NC4xS0h6LgorICAgIC8vIEN1cnJlbnRseSwgd2UgdHJ1bmNhdGUgdGhlIGltcHVsc2Ug
cmVzcG9uc2VzIHRvIGhhbGYgdGhpcyBzaXplLCBidXQgYW4gRkZULXNpemUgb2YgdHdpY2UgaW1w
dWxzZSByZXNwb25zZSBzaXplIGlzIG5lZWRlZCAoZm9yIGNvbnZvbHV0aW9uKS4KKyAgICAvLyBT
byBmb3Igc2FtcGxlIHJhdGVzIGFyb3VuZCA0NC4xS0h6IGFuIEZGVCBzaXplIG9mIDUxMiBpcyBn
b29kLiAgV2UgZG91YmxlIHRoYXQgc2l6ZSBmb3IgaGlnaGVyIHNhbXBsZSByYXRlcy4KKyAgICBB
U1NFUlQoc2FtcGxlUmF0ZSA+PSA0NDEwMCAmJiBzYW1wbGVSYXRlIDw9IDk2MDAwLjApOworICAg
IHJldHVybiAoc2FtcGxlUmF0ZSA8PSA0ODAwMC4wKSA/IDUxMiA6IDEwMjQ7Cit9CisKK3ZvaWQg
SFJURlBhbm5lcjo6cmVzZXQoKQoreworICAgIG1faXNGaXJzdFJlbmRlciA9IHRydWU7CisgICAg
bV9jb252b2x2ZXJMLnJlc2V0KCk7CisgICAgbV9jb252b2x2ZXJSLnJlc2V0KCk7CisgICAgbV9k
ZWxheUxpbmVMLnJlc2V0KCk7CisgICAgbV9kZWxheUxpbmVSLnJlc2V0KCk7Cit9CisKK3N0YXRp
YyBib29sIHdyYXBEaXN0YW5jZShpbnQgaSwgaW50IGosIGludCBsZW5ndGgpCit7CisgICAgaW50
IGRpcmVjdERpc3RhbmNlID0gYWJzKGkgLSBqKTsKKyAgICBpbnQgaW5kaXJlY3REaXN0YW5jZSA9
IGxlbmd0aCAtIGRpcmVjdERpc3RhbmNlOworCisgICAgcmV0dXJuIGluZGlyZWN0RGlzdGFuY2Ug
PCBkaXJlY3REaXN0YW5jZTsKK30KKworaW50IEhSVEZQYW5uZXI6OmNhbGN1bGF0ZURlc2lyZWRB
emltdXRoSW5kZXhBbmRCbGVuZChkb3VibGUgYXppbXV0aCwgZG91YmxlJiBhemltdXRoQmxlbmQp
Cit7CisgICAgLy8gQ29udmVydCB0aGUgYXppbXV0aCBhbmdsZSBmcm9tIHRoZSByYW5nZSAtMTgw
IC0+ICsxODAgaW50byB0aGUgcmFuZ2UgMCAtPiAzNjAuCisgICAgLy8gVGhlIGF6aW11dGggaW5k
ZXggbWF5IHRoZW4gYmUgY2FsY3VsYXRlZCBmcm9tIHRoaXMgcG9zaXRpdmUgdmFsdWUuCisgICAg
aWYgKGF6aW11dGggPCAwKQorICAgICAgICBhemltdXRoICs9IDM2MC4wOworICAgIAorICAgIEhS
VEZEYXRhYmFzZSogZGF0YWJhc2UgPSBIUlRGRGF0YWJhc2VMb2FkZXI6OmRlZmF1bHRIUlRGRGF0
YWJhc2UoKTsgICAgCisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKyAgICAKKyAgICBpbnQgbnVtYmVy
T2ZBemltdXRocyA9IGRhdGFiYXNlLT5udW1iZXJPZkF6aW11dGhzKCk7CisgICAgY29uc3QgZG91
YmxlIGFuZ2xlQmV0d2VlbkF6aW11dGhzID0gMzYwLjAgLyBudW1iZXJPZkF6aW11dGhzOworCisg
ICAgLy8gQ2FsY3VsYXRlIHRoZSBhemltdXRoIGluZGV4IGFuZCB0aGUgYmxlbmQgKDAgLT4gMSkg
Zm9yIGludGVycG9sYXRpb24uCisgICAgZG91YmxlIGRlc2lyZWRBemltdXRoSW5kZXhGbG9hdCA9
IGF6aW11dGggLyBhbmdsZUJldHdlZW5BemltdXRoczsKKyAgICBpbnQgZGVzaXJlZEF6aW11dGhJ
bmRleCA9IHN0YXRpY19jYXN0PGludD4oZGVzaXJlZEF6aW11dGhJbmRleEZsb2F0KTsKKyAgICBh
emltdXRoQmxlbmQgPSBkZXNpcmVkQXppbXV0aEluZGV4RmxvYXQgLSBzdGF0aWNfY2FzdDxkb3Vi
bGU+KGRlc2lyZWRBemltdXRoSW5kZXgpOworICAgIAorICAgIC8vIFdlIGRvbid0IGltbWVkaWF0
ZWx5IHN0YXJ0IHVzaW5nIHRoaXMgYXppbXV0aCBpbmRleCwgYnV0IGluc3RlYWQgYXBwcm9hY2gg
dGhpcyBpbmRleCBmcm9tIHRoZSBsYXN0IGluZGV4IHdlIHJlbmRlcmVkIGF0LgorICAgIC8vIFRo
aXMgbWluaW1pemVzIHRoZSBjbGlja3MgYW5kIGdyYWluaW5lc3MgZm9yIG1vdmluZyBzb3VyY2Vz
IHdoaWNoIG9jY3VyIG90aGVyd2lzZS4KKyAgICBkZXNpcmVkQXppbXV0aEluZGV4ID0gbWF4KDAs
IGRlc2lyZWRBemltdXRoSW5kZXgpOworICAgIGRlc2lyZWRBemltdXRoSW5kZXggPSBtaW4obnVt
YmVyT2ZBemltdXRocyAtIDEsIGRlc2lyZWRBemltdXRoSW5kZXgpOworICAgIHJldHVybiBkZXNp
cmVkQXppbXV0aEluZGV4OworfQorCit2b2lkIEhSVEZQYW5uZXI6OnBhbihkb3VibGUgZGVzaXJl
ZEF6aW11dGgsIGRvdWJsZSBlbGV2YXRpb24sIEF1ZGlvQnVzKiBpbnB1dEJ1cywgQXVkaW9CdXMq
IG91dHB1dEJ1cywgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICB1bnNpZ25lZCBudW1J
bnB1dENoYW5uZWxzID0gaW5wdXRCdXMgPyBpbnB1dEJ1cy0+bnVtYmVyT2ZDaGFubmVscygpIDog
MDsKKworICAgIGJvb2wgaXNJbnB1dEdvb2QgPSBpbnB1dEJ1cyAmJiAgbnVtSW5wdXRDaGFubmVs
cyA+PSAxICYmIG51bUlucHV0Q2hhbm5lbHMgPD0gMjsKKyAgICBBU1NFUlQoaXNJbnB1dEdvb2Qp
OworCisgICAgYm9vbCBpc091dHB1dEdvb2QgPSBvdXRwdXRCdXMgJiYgb3V0cHV0QnVzLT5udW1i
ZXJPZkNoYW5uZWxzKCkgPT0gMiAmJiBmcmFtZXNUb1Byb2Nlc3MgPD0gb3V0cHV0QnVzLT5sZW5n
dGgoKTsKKyAgICBBU1NFUlQoaXNPdXRwdXRHb29kKTsKKworICAgIGlmICghaXNJbnB1dEdvb2Qg
fHwgIWlzT3V0cHV0R29vZCkgeworICAgICAgICBpZiAob3V0cHV0QnVzKQorICAgICAgICAgICAg
b3V0cHV0QnVzLT56ZXJvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGlz
IGNvZGUgb25seSBydW5zIGFzIGxvbmcgYXMgdGhlIGNvbnRleHQgaXMgYWxpdmUgYW5kIGFmdGVy
IGRhdGFiYXNlIGhhcyBiZWVuIGxvYWRlZC4KKyAgICBIUlRGRGF0YWJhc2UqIGRhdGFiYXNlID0g
SFJURkRhdGFiYXNlTG9hZGVyOjpkZWZhdWx0SFJURkRhdGFiYXNlKCk7ICAgIAorICAgIEFTU0VS
VChkYXRhYmFzZSk7CisgICAgaWYgKCFkYXRhYmFzZSkgeworICAgICAgICBvdXRwdXRCdXMtPnpl
cm8oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIElSQ0FNIEhSVEYgYXppbXV0
aHMgdmFsdWVzIGZyb20gdGhlIGxvYWRlZCBkYXRhYmFzZSBpcyByZXZlcnNlZCBmcm9tIHRoZSBw
YW5uZXIncyBub3Rpb24gb2YgYXppbXV0aC4KKyAgICBkb3VibGUgYXppbXV0aCA9IC1kZXNpcmVk
QXppbXV0aDsKKworICAgIGJvb2wgaXNBemltdXRoR29vZCA9IGF6aW11dGggPj0gLTE4MC4wICYm
IGF6aW11dGggPD0gMTgwLjA7CisgICAgQVNTRVJUKGlzQXppbXV0aEdvb2QpOworICAgIGlmICgh
aXNBemltdXRoR29vZCkgeworICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIE5vcm1hbGx5LCB3ZSdsbCBqdXN0IGJlIGRlYWxpbmcgd2l0
aCBtb25vIHNvdXJjZXMuCisgICAgLy8gSWYgd2UgaGF2ZSBhIHN0ZXJlbyBpbnB1dCwgaW1wbGVt
ZW50IHN0ZXJlbyBwYW5uaW5nIHdpdGggbGVmdCBzb3VyY2UgcHJvY2Vzc2VkIGJ5IGxlZnQgSFJU
RiwgYW5kIHJpZ2h0IHNvdXJjZSBieSByaWdodCBIUlRGLgorICAgIEF1ZGlvQ2hhbm5lbCogaW5w
dXRDaGFubmVsTCA9IGlucHV0QnVzLT5jaGFubmVsQnlUeXBlKEF1ZGlvQnVzOjpDaGFubmVsTGVm
dCk7CisgICAgQXVkaW9DaGFubmVsKiBpbnB1dENoYW5uZWxSID0gbnVtSW5wdXRDaGFubmVscyA+
IDEgPyBpbnB1dEJ1cy0+Y2hhbm5lbEJ5VHlwZShBdWRpb0J1czo6Q2hhbm5lbFJpZ2h0KSA6IDA7
CisKKyAgICAvLyBHZXQgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBwb2ludGVycy4KKyAgICBmbG9h
dCogc291cmNlTCA9IGlucHV0Q2hhbm5lbEwtPmRhdGEoKTsKKyAgICBmbG9hdCogc291cmNlUiA9
IG51bUlucHV0Q2hhbm5lbHMgPiAxID8gaW5wdXRDaGFubmVsUi0+ZGF0YSgpIDogc291cmNlTDsK
KyAgICBmbG9hdCogZGVzdGluYXRpb25MID0gb3V0cHV0QnVzLT5jaGFubmVsQnlUeXBlKEF1ZGlv
QnVzOjpDaGFubmVsTGVmdCktPmRhdGEoKTsKKyAgICBmbG9hdCogZGVzdGluYXRpb25SID0gb3V0
cHV0QnVzLT5jaGFubmVsQnlUeXBlKEF1ZGlvQnVzOjpDaGFubmVsUmlnaHQpLT5kYXRhKCk7CisK
KyAgICBkb3VibGUgYXppbXV0aEJsZW5kOworICAgIGludCBkZXNpcmVkQXppbXV0aEluZGV4ID0g
Y2FsY3VsYXRlRGVzaXJlZEF6aW11dGhJbmRleEFuZEJsZW5kKGF6aW11dGgsIGF6aW11dGhCbGVu
ZCk7CisKKyAgICAvLyBUaGlzIGFsZ29yaXRobSBjdXJyZW50bHkgcmVxdWlyZXMgdGhhdCB3ZSBw
cm9jZXNzIGluIHBvd2VyLW9mLXR3byBzaXplIGNodW5rcyBhdCBsZWFzdCAxMjguCisgICAgQVNT
RVJUKDFVTCA8PCBzdGF0aWNfY2FzdDxpbnQ+KGxvZzIoZnJhbWVzVG9Qcm9jZXNzKSkgPT0gZnJh
bWVzVG9Qcm9jZXNzKTsKKyAgICBBU1NFUlQoZnJhbWVzVG9Qcm9jZXNzID49IDEyOCk7CisgICAg
CisgICAgY29uc3QgdW5zaWduZWQgZnJhbWVzUGVyU2VnbWVudCA9IDEyODsKKyAgICBjb25zdCB1
bnNpZ25lZCBudW1iZXJPZlNlZ21lbnRzID0gZnJhbWVzVG9Qcm9jZXNzIC8gZnJhbWVzUGVyU2Vn
bWVudDsKKworICAgIGZvciAodW5zaWduZWQgc2VnbWVudCA9IDA7IHNlZ21lbnQgPCBudW1iZXJP
ZlNlZ21lbnRzOyArK3NlZ21lbnQpIHsKKyAgICAgICAgaWYgKG1faXNGaXJzdFJlbmRlcikgewor
ICAgICAgICAgICAgLy8gU25hcCBleGFjdGx5IHRvIGRlc2lyZWQgcG9zaXRpb24gKGZpcnN0IHRp
bWUgYW5kIGFmdGVyIHJlc2V0KCkpLgorICAgICAgICAgICAgbV9hemltdXRoSW5kZXggPSBkZXNp
cmVkQXppbXV0aEluZGV4OworICAgICAgICAgICAgbV9pc0ZpcnN0UmVuZGVyID0gZmFsc2U7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBFYWNoIHNlZ21lbnQgcmVuZGVycyB3aXRo
IGFuIGF6aW11dGggaW5kZXggY2xvc2VyIGJ5IG9uZSB0byB0aGUgZGVzaXJlZCBhemltdXRoIGlu
ZGV4LgorICAgICAgICAgICAgLy8gQmVjYXVzZSBpbnRlci1hdXJhbCB0aW1lIGRlbGF5IGlzIG1v
c3RseSBhIGZhY3RvciBvZiBhemltdXRoIGFuZCB0aGUgZGVsYXkgaXMgd2hlcmUgdGhlIGNsaWNr
cyBhbmQgZ3JhaW5pbmVzcyBjb21lIGZyb20sCisgICAgICAgICAgICAvLyB3ZSBkb24ndCBib3Ro
ZXIgc21vb3RoaW5nIHRoZSBlbGV2YXRpb25zLgorICAgICAgICAgICAgaW50IG51bWJlck9mQXpp
bXV0aHMgPSBkYXRhYmFzZS0+bnVtYmVyT2ZBemltdXRocygpOworICAgICAgICAgICAgYm9vbCB3
cmFwID0gd3JhcERpc3RhbmNlKG1fYXppbXV0aEluZGV4LCBkZXNpcmVkQXppbXV0aEluZGV4LCBu
dW1iZXJPZkF6aW11dGhzKTsKKyAgICAgICAgICAgIGlmICh3cmFwKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG1fYXppbXV0aEluZGV4IDwgZGVzaXJlZEF6aW11dGhJbmRleCkKKyAgICAgICAgICAg
ICAgICAgICAgbV9hemltdXRoSW5kZXggPSAobV9hemltdXRoSW5kZXggLSAxICsgbnVtYmVyT2ZB
emltdXRocykgJSBudW1iZXJPZkF6aW11dGhzOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1f
YXppbXV0aEluZGV4ID4gZGVzaXJlZEF6aW11dGhJbmRleCkKKyAgICAgICAgICAgICAgICAgICAg
bV9hemltdXRoSW5kZXggPSAobV9hemltdXRoSW5kZXggKyAxKSAlIG51bWJlck9mQXppbXV0aHM7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChtX2F6aW11dGhJbmRl
eCA8IGRlc2lyZWRBemltdXRoSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIG1fYXppbXV0aElu
ZGV4ID0gKG1fYXppbXV0aEluZGV4ICsgMSkgJSBudW1iZXJPZkF6aW11dGhzOworICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKG1fYXppbXV0aEluZGV4ID4gZGVzaXJlZEF6aW11dGhJbmRleCkKKyAg
ICAgICAgICAgICAgICAgICAgbV9hemltdXRoSW5kZXggPSAobV9hemltdXRoSW5kZXggLSAxICsg
bnVtYmVyT2ZBemltdXRocykgJSBudW1iZXJPZkF6aW11dGhzOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBHZXQgdGhlIEhSVEZLZXJuZWxzIGFuZCBpbnRl
cnBvbGF0ZWQgZGVsYXlzLiAgICAKKyAgICAgICAgSFJURktlcm5lbCoga2VybmVsTDsKKyAgICAg
ICAgSFJURktlcm5lbCoga2VybmVsUjsKKyAgICAgICAgZG91YmxlIGZyYW1lRGVsYXlMOworICAg
ICAgICBkb3VibGUgZnJhbWVEZWxheVI7CisgICAgICAgIGRhdGFiYXNlLT5nZXRLZXJuZWxzRnJv
bUF6aW11dGhFbGV2YXRpb24oYXppbXV0aEJsZW5kLCBtX2F6aW11dGhJbmRleCwgZWxldmF0aW9u
LCBrZXJuZWxMLCBrZXJuZWxSLCBmcmFtZURlbGF5TCwgZnJhbWVEZWxheVIpOworCisgICAgICAg
IEFTU0VSVChrZXJuZWxMICYmIGtlcm5lbFIpOworICAgICAgICBpZiAoIWtlcm5lbEwgfHwgIWtl
cm5lbFIpIHsKKyAgICAgICAgICAgIG91dHB1dEJ1cy0+emVybygpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQoZnJhbWVEZWxheUwgLyBz
YW1wbGVSYXRlKCkgPCBNYXhEZWxheVRpbWVTZWNvbmRzICYmIGZyYW1lRGVsYXlSIC8gc2FtcGxl
UmF0ZSgpIDwgTWF4RGVsYXlUaW1lU2Vjb25kcyk7CisgICAgICAgICAgICAKKyAgICAgICAgLy8g
Q2FsY3VsYXRlIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvaW50ZXJzIGZvciB0aGUgY3Vy
cmVudCBzZWdtZW50LgorICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBzZWdtZW50ICogZnJhbWVz
UGVyU2VnbWVudDsKKyAgICAgICAgZmxvYXQqIHNlZ21lbnRTb3VyY2VMID0gc291cmNlTCArIG9m
ZnNldDsKKyAgICAgICAgZmxvYXQqIHNlZ21lbnRTb3VyY2VSID0gc291cmNlUiArIG9mZnNldDsK
KyAgICAgICAgZmxvYXQqIHNlZ21lbnREZXN0aW5hdGlvbkwgPSBkZXN0aW5hdGlvbkwgKyBvZmZz
ZXQ7CisgICAgICAgIGZsb2F0KiBzZWdtZW50RGVzdGluYXRpb25SID0gZGVzdGluYXRpb25SICsg
b2Zmc2V0OworCisgICAgICAgIC8vIEZpcnN0IHJ1biB0aHJvdWdoIGRlbGF5IGxpbmVzIGZvciBp
bnRlci1hdXJhbCB0aW1lIGRpZmZlcmVuY2UuCisgICAgICAgIG1fZGVsYXlMaW5lTC5zZXREZWxh
eUZyYW1lcyhmcmFtZURlbGF5TCk7CisgICAgICAgIG1fZGVsYXlMaW5lUi5zZXREZWxheUZyYW1l
cyhmcmFtZURlbGF5Uik7CisgICAgICAgIG1fZGVsYXlMaW5lTC5wcm9jZXNzKHNlZ21lbnRTb3Vy
Y2VMLCBzZWdtZW50RGVzdGluYXRpb25MLCBmcmFtZXNQZXJTZWdtZW50KTsKKyAgICAgICAgbV9k
ZWxheUxpbmVSLnByb2Nlc3Moc2VnbWVudFNvdXJjZVIsIHNlZ21lbnREZXN0aW5hdGlvblIsIGZy
YW1lc1BlclNlZ21lbnQpOworCisgICAgICAgIC8vIE5vdyBkbyB0aGUgY29udm9sdXRpb25zIGlu
LXBsYWNlLgorICAgICAgICBtX2NvbnZvbHZlckwucHJvY2VzcyhrZXJuZWxMLT5mZnRGcmFtZSgp
LCBzZWdtZW50RGVzdGluYXRpb25MLCBzZWdtZW50RGVzdGluYXRpb25MLCBmcmFtZXNQZXJTZWdt
ZW50KTsKKyAgICAgICAgbV9jb252b2x2ZXJSLnByb2Nlc3Moa2VybmVsUi0+ZmZ0RnJhbWUoKSwg
c2VnbWVudERlc3RpbmF0aW9uUiwgc2VnbWVudERlc3RpbmF0aW9uUiwgZnJhbWVzUGVyU2VnbWVu
dCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCX0FVRElPKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSFJURlBhbm5lcl9oCisjZGVmaW5lIEhSVEZQ
YW5uZXJfaAorCisjaW5jbHVkZSAiRGVsYXlEU1BLZXJuZWwuaCIKKyNpbmNsdWRlICJGRlRDb252
b2x2ZXIuaCIKKyNpbmNsdWRlICJQYW5uZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBIUlRGUGFubmVyIDogcHVibGljIFBhbm5lciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
SFJURlBhbm5lcihkb3VibGUgc2FtcGxlUmF0ZSk7CisgICAgdmlydHVhbCB+SFJURlBhbm5lcigp
OworCisgICAgLy8gUGFubmVyCisgICAgdmlydHVhbCB2b2lkIHBhbihkb3VibGUgYXppbXV0aCwg
ZG91YmxlIGVsZXZhdGlvbiwgQXVkaW9CdXMqIGlucHV0QnVzLCBBdWRpb0J1cyogb3V0cHV0QnVz
LCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKKwor
ICAgIHNpemVfdCBmZnRTaXplKCkgeyByZXR1cm4gZmZ0U2l6ZUZvclNhbXBsZVJhdGUobV9zYW1w
bGVSYXRlKTsgfQorICAgIHN0YXRpYyBzaXplX3QgZmZ0U2l6ZUZvclNhbXBsZVJhdGUoZG91Ymxl
IHNhbXBsZVJhdGUpOworCisgICAgZG91YmxlIHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBt
X3NhbXBsZVJhdGU7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgLy8gR2l2ZW4gYW4gYXppbXV0aCBh
bmdsZSBpbiB0aGUgcmFuZ2UgLTE4MCAtPiArMTgwLCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5n
IGF6aW11dGggaW5kZXggZm9yIHRoZSBkYXRhYmFzZSwKKyAgICAvLyBhbmQgYXppbXV0aEJsZW5k
IHdoaWNoIGlzIGFuIGludGVycG9sYXRpb24gdmFsdWUgZnJvbSAwIC0+IDEuCisgICAgaW50IGNh
bGN1bGF0ZURlc2lyZWRBemltdXRoSW5kZXhBbmRCbGVuZChkb3VibGUgYXppbXV0aCwgZG91Ymxl
JiBhemltdXRoQmxlbmQpOworCisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBNYXhEZWxheVRpbWVT
ZWNvbmRzOworCisgICAgZG91YmxlIG1fc2FtcGxlUmF0ZTsKKyAgICAKKyAgICAvLyBtX2lzRmly
c3RSZW5kZXIgYW5kIG1fYXppbXV0aEluZGV4IGFyZSB1c2VkIHRvIGF2b2lkIGhhcnNobHkgY2hh
bmdpbmcgZnJvbSByZW5kZXJpbmcgYXQgb25lIGF6aW11dGggYW5nbGUgdG8gYW5vdGhlciBhbmds
ZSB2ZXJ5IGZhciBhd2F5LgorICAgIC8vIENoYW5naW5nIHRoZSBhemltdXRoIGdyYWR1YWxseSBw
cm9kdWNlcyBhIHNtb290aGVyIHNvdW5kLgorICAgIGJvb2wgbV9pc0ZpcnN0UmVuZGVyOworICAg
IGludCBtX2F6aW11dGhJbmRleDsKKworICAgIEZGVENvbnZvbHZlciBtX2NvbnZvbHZlckw7Cisg
ICAgRkZUQ29udm9sdmVyIG1fY29udm9sdmVyUjsKKyAgICBEZWxheURTUEtlcm5lbCBtX2RlbGF5
TGluZUw7CisgICAgRGVsYXlEU1BLZXJuZWwgbV9kZWxheUxpbmVSOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSFJURlBhbm5lcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70321</attachid>
            <date>2010-10-08 17:11:56 -0700</date>
            <delta_ts>2010-10-08 19:30:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46299-20101008171155.patch</filename>
            <type>text/plain</type>
            <size>14252</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTQzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTAtMTAtMDggIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgSFJURlBhbm5lciBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDYyOTkKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgYXVkaW8gQVBJ
IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRG
UGFubmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIUlRGUGFubmVyOjpIUlRGUGFu
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZQYW5uZXI6On5IUlRGUGFubmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhSVEZQYW5uZXI6OmZmdFNpemVGb3JTYW1wbGVSYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkhSVEZQYW5uZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OndyYXBEaXN0
YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpIUlRGUGFubmVyOjpjYWxjdWxhdGVEZXNpcmVkQXpp
bXV0aEluZGV4QW5kQmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SFJURlBhbm5lcjo6cGFuKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SFJURlBhbm5lcjo6ZmZ0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpIUlRGUGFu
bmVyOjpzYW1wbGVSYXRlKToKKwogMjAxMC0xMC0wOCAgTWloYWkgUGFycGFyaXRhICA8bWloYWlw
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZQYW5uZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
MjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VC
X0FVRElPKQorCisjaW5jbHVkZSAiSFJURlBhbm5lci5oIgorCisjaW5jbHVkZSAiQXVkaW9CdXMu
aCIKKyNpbmNsdWRlICJGRlRDb252b2x2ZXIuaCIKKyNpbmNsdWRlICJIUlRGRGF0YWJhc2UuaCIK
KyNpbmNsdWRlICJIUlRGRGF0YWJhc2VMb2FkZXIuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+Cisj
aW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwordXNpbmcgbmFtZXNw
YWNlIHN0ZDsKKyAKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhlIHZhbHVlIG9mIDIgbWls
bGlzZWNvbmRzIGlzIGxhcmdlciB0aGFuIHRoZSBsYXJnZXN0IGRlbGF5IHdoaWNoIGV4aXN0cyBp
biBhbnkgSFJURktlcm5lbCBmcm9tIHRoZSBkZWZhdWx0IEhSVEZEYXRhYmFzZSAoMC4wMTM2IHNl
Y29uZHMpLgorLy8gV2UgQVNTRVJUIHRoZSBkZWxheSB2YWx1ZXMgdXNlZCBpbiBwcm9jZXNzKCkg
d2l0aCB0aGlzIHZhbHVlLgorY29uc3QgZG91YmxlIE1heERlbGF5VGltZVNlY29uZHMgPSAwLjAw
MjsKKworSFJURlBhbm5lcjo6SFJURlBhbm5lcihkb3VibGUgc2FtcGxlUmF0ZSkKKyAgICA6IFBh
bm5lcihQYW5uaW5nTW9kZWxIUlRGKQorICAgICwgbV9zYW1wbGVSYXRlKHNhbXBsZVJhdGUpCisg
ICAgLCBtX2lzRmlyc3RSZW5kZXIodHJ1ZSkKKyAgICAsIG1fYXppbXV0aEluZGV4KDApCisgICAg
LCBtX2NvbnZvbHZlckwoZmZ0U2l6ZUZvclNhbXBsZVJhdGUoc2FtcGxlUmF0ZSkpCisgICAgLCBt
X2NvbnZvbHZlclIoZmZ0U2l6ZUZvclNhbXBsZVJhdGUoc2FtcGxlUmF0ZSkpCisgICAgLCBtX2Rl
bGF5TGluZUwoTWF4RGVsYXlUaW1lU2Vjb25kcywgc2FtcGxlUmF0ZSkKKyAgICAsIG1fZGVsYXlM
aW5lUihNYXhEZWxheVRpbWVTZWNvbmRzLCBzYW1wbGVSYXRlKQoreyAKK30KKworSFJURlBhbm5l
cjo6fkhSVEZQYW5uZXIoKQoreworfQorCitzaXplX3QgSFJURlBhbm5lcjo6ZmZ0U2l6ZUZvclNh
bXBsZVJhdGUoZG91YmxlIHNhbXBsZVJhdGUpCit7CisgICAgLy8gVGhlIEhSVEYgaW1wdWxzZSBy
ZXNwb25zZXMgKGxvYWRlZCBhcyBhdWRpbyByZXNvdXJjZXMpIGFyZSA1MTIgc2FtcGxlLWZyYW1l
cyBANDQuMUtIei4KKyAgICAvLyBDdXJyZW50bHksIHdlIHRydW5jYXRlIHRoZSBpbXB1bHNlIHJl
c3BvbnNlcyB0byBoYWxmIHRoaXMgc2l6ZSwgYnV0IGFuIEZGVC1zaXplIG9mIHR3aWNlIGltcHVs
c2UgcmVzcG9uc2Ugc2l6ZSBpcyBuZWVkZWQgKGZvciBjb252b2x1dGlvbikuCisgICAgLy8gU28g
Zm9yIHNhbXBsZSByYXRlcyBhcm91bmQgNDQuMUtIeiBhbiBGRlQgc2l6ZSBvZiA1MTIgaXMgZ29v
ZC4gIFdlIGRvdWJsZSB0aGF0IHNpemUgZm9yIGhpZ2hlciBzYW1wbGUgcmF0ZXMuCisgICAgQVNT
RVJUKHNhbXBsZVJhdGUgPj0gNDQxMDAgJiYgc2FtcGxlUmF0ZSA8PSA5NjAwMC4wKTsKKyAgICBy
ZXR1cm4gKHNhbXBsZVJhdGUgPD0gNDgwMDAuMCkgPyA1MTIgOiAxMDI0OworfQorCit2b2lkIEhS
VEZQYW5uZXI6OnJlc2V0KCkKK3sKKyAgICBtX2lzRmlyc3RSZW5kZXIgPSB0cnVlOworICAgIG1f
Y29udm9sdmVyTC5yZXNldCgpOworICAgIG1fY29udm9sdmVyUi5yZXNldCgpOworICAgIG1fZGVs
YXlMaW5lTC5yZXNldCgpOworICAgIG1fZGVsYXlMaW5lUi5yZXNldCgpOworfQorCitzdGF0aWMg
Ym9vbCB3cmFwRGlzdGFuY2UoaW50IGksIGludCBqLCBpbnQgbGVuZ3RoKQoreworICAgIGludCBk
aXJlY3REaXN0YW5jZSA9IGFicyhpIC0gaik7CisgICAgaW50IGluZGlyZWN0RGlzdGFuY2UgPSBs
ZW5ndGggLSBkaXJlY3REaXN0YW5jZTsKKworICAgIHJldHVybiBpbmRpcmVjdERpc3RhbmNlIDwg
ZGlyZWN0RGlzdGFuY2U7Cit9CisKK2ludCBIUlRGUGFubmVyOjpjYWxjdWxhdGVEZXNpcmVkQXpp
bXV0aEluZGV4QW5kQmxlbmQoZG91YmxlIGF6aW11dGgsIGRvdWJsZSYgYXppbXV0aEJsZW5kKQor
eworICAgIC8vIENvbnZlcnQgdGhlIGF6aW11dGggYW5nbGUgZnJvbSB0aGUgcmFuZ2UgLTE4MCAt
PiArMTgwIGludG8gdGhlIHJhbmdlIDAgLT4gMzYwLgorICAgIC8vIFRoZSBhemltdXRoIGluZGV4
IG1heSB0aGVuIGJlIGNhbGN1bGF0ZWQgZnJvbSB0aGlzIHBvc2l0aXZlIHZhbHVlLgorICAgIGlm
IChhemltdXRoIDwgMCkKKyAgICAgICAgYXppbXV0aCArPSAzNjAuMDsKKyAgICAKKyAgICBIUlRG
RGF0YWJhc2UqIGRhdGFiYXNlID0gSFJURkRhdGFiYXNlTG9hZGVyOjpkZWZhdWx0SFJURkRhdGFi
YXNlKCk7ICAgIAorICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAgCisgICAgaW50IG51bWJlck9m
QXppbXV0aHMgPSBkYXRhYmFzZS0+bnVtYmVyT2ZBemltdXRocygpOworICAgIGNvbnN0IGRvdWJs
ZSBhbmdsZUJldHdlZW5BemltdXRocyA9IDM2MC4wIC8gbnVtYmVyT2ZBemltdXRoczsKKworICAg
IC8vIENhbGN1bGF0ZSB0aGUgYXppbXV0aCBpbmRleCBhbmQgdGhlIGJsZW5kICgwIC0+IDEpIGZv
ciBpbnRlcnBvbGF0aW9uLgorICAgIGRvdWJsZSBkZXNpcmVkQXppbXV0aEluZGV4RmxvYXQgPSBh
emltdXRoIC8gYW5nbGVCZXR3ZWVuQXppbXV0aHM7CisgICAgaW50IGRlc2lyZWRBemltdXRoSW5k
ZXggPSBzdGF0aWNfY2FzdDxpbnQ+KGRlc2lyZWRBemltdXRoSW5kZXhGbG9hdCk7CisgICAgYXpp
bXV0aEJsZW5kID0gZGVzaXJlZEF6aW11dGhJbmRleEZsb2F0IC0gc3RhdGljX2Nhc3Q8ZG91Ymxl
PihkZXNpcmVkQXppbXV0aEluZGV4KTsKKyAgICAKKyAgICAvLyBXZSBkb24ndCBpbW1lZGlhdGVs
eSBzdGFydCB1c2luZyB0aGlzIGF6aW11dGggaW5kZXgsIGJ1dCBpbnN0ZWFkIGFwcHJvYWNoIHRo
aXMgaW5kZXggZnJvbSB0aGUgbGFzdCBpbmRleCB3ZSByZW5kZXJlZCBhdC4KKyAgICAvLyBUaGlz
IG1pbmltaXplcyB0aGUgY2xpY2tzIGFuZCBncmFpbmluZXNzIGZvciBtb3Zpbmcgc291cmNlcyB3
aGljaCBvY2N1ciBvdGhlcndpc2UuCisgICAgZGVzaXJlZEF6aW11dGhJbmRleCA9IG1heCgwLCBk
ZXNpcmVkQXppbXV0aEluZGV4KTsKKyAgICBkZXNpcmVkQXppbXV0aEluZGV4ID0gbWluKG51bWJl
ck9mQXppbXV0aHMgLSAxLCBkZXNpcmVkQXppbXV0aEluZGV4KTsKKyAgICByZXR1cm4gZGVzaXJl
ZEF6aW11dGhJbmRleDsKK30KKwordm9pZCBIUlRGUGFubmVyOjpwYW4oZG91YmxlIGRlc2lyZWRB
emltdXRoLCBkb3VibGUgZWxldmF0aW9uLCBBdWRpb0J1cyogaW5wdXRCdXMsIEF1ZGlvQnVzKiBv
dXRwdXRCdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgdW5zaWduZWQgbnVtSW5w
dXRDaGFubmVscyA9IGlucHV0QnVzID8gaW5wdXRCdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA6IDA7
CisKKyAgICBib29sIGlzSW5wdXRHb29kID0gaW5wdXRCdXMgJiYgIG51bUlucHV0Q2hhbm5lbHMg
Pj0gMSAmJiBudW1JbnB1dENoYW5uZWxzIDw9IDI7CisgICAgQVNTRVJUKGlzSW5wdXRHb29kKTsK
KworICAgIGJvb2wgaXNPdXRwdXRHb29kID0gb3V0cHV0QnVzICYmIG91dHB1dEJ1cy0+bnVtYmVy
T2ZDaGFubmVscygpID09IDIgJiYgZnJhbWVzVG9Qcm9jZXNzIDw9IG91dHB1dEJ1cy0+bGVuZ3Ro
KCk7CisgICAgQVNTRVJUKGlzT3V0cHV0R29vZCk7CisKKyAgICBpZiAoIWlzSW5wdXRHb29kIHx8
ICFpc091dHB1dEdvb2QpIHsKKyAgICAgICAgaWYgKG91dHB1dEJ1cykKKyAgICAgICAgICAgIG91
dHB1dEJ1cy0+emVybygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhpcyBj
b2RlIG9ubHkgcnVucyBhcyBsb25nIGFzIHRoZSBjb250ZXh0IGlzIGFsaXZlIGFuZCBhZnRlciBk
YXRhYmFzZSBoYXMgYmVlbiBsb2FkZWQuCisgICAgSFJURkRhdGFiYXNlKiBkYXRhYmFzZSA9IEhS
VEZEYXRhYmFzZUxvYWRlcjo6ZGVmYXVsdEhSVEZEYXRhYmFzZSgpOyAgICAKKyAgICBBU1NFUlQo
ZGF0YWJhc2UpOworICAgIGlmICghZGF0YWJhc2UpIHsKKyAgICAgICAgb3V0cHV0QnVzLT56ZXJv
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJUkNBTSBIUlRGIGF6aW11dGhz
IHZhbHVlcyBmcm9tIHRoZSBsb2FkZWQgZGF0YWJhc2UgaXMgcmV2ZXJzZWQgZnJvbSB0aGUgcGFu
bmVyJ3Mgbm90aW9uIG9mIGF6aW11dGguCisgICAgZG91YmxlIGF6aW11dGggPSAtZGVzaXJlZEF6
aW11dGg7CisKKyAgICBib29sIGlzQXppbXV0aEdvb2QgPSBhemltdXRoID49IC0xODAuMCAmJiBh
emltdXRoIDw9IDE4MC4wOworICAgIEFTU0VSVChpc0F6aW11dGhHb29kKTsKKyAgICBpZiAoIWlz
QXppbXV0aEdvb2QpIHsKKyAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBOb3JtYWxseSwgd2UnbGwganVzdCBiZSBkZWFsaW5nIHdpdGgg
bW9ubyBzb3VyY2VzLgorICAgIC8vIElmIHdlIGhhdmUgYSBzdGVyZW8gaW5wdXQsIGltcGxlbWVu
dCBzdGVyZW8gcGFubmluZyB3aXRoIGxlZnQgc291cmNlIHByb2Nlc3NlZCBieSBsZWZ0IEhSVEYs
IGFuZCByaWdodCBzb3VyY2UgYnkgcmlnaHQgSFJURi4KKyAgICBBdWRpb0NoYW5uZWwqIGlucHV0
Q2hhbm5lbEwgPSBpbnB1dEJ1cy0+Y2hhbm5lbEJ5VHlwZShBdWRpb0J1czo6Q2hhbm5lbExlZnQp
OworICAgIEF1ZGlvQ2hhbm5lbCogaW5wdXRDaGFubmVsUiA9IG51bUlucHV0Q2hhbm5lbHMgPiAx
ID8gaW5wdXRCdXMtPmNoYW5uZWxCeVR5cGUoQXVkaW9CdXM6OkNoYW5uZWxSaWdodCkgOiAwOwor
CisgICAgLy8gR2V0IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcG9pbnRlcnMuCisgICAgZmxvYXQq
IHNvdXJjZUwgPSBpbnB1dENoYW5uZWxMLT5kYXRhKCk7CisgICAgZmxvYXQqIHNvdXJjZVIgPSBu
dW1JbnB1dENoYW5uZWxzID4gMSA/IGlucHV0Q2hhbm5lbFItPmRhdGEoKSA6IHNvdXJjZUw7Cisg
ICAgZmxvYXQqIGRlc3RpbmF0aW9uTCA9IG91dHB1dEJ1cy0+Y2hhbm5lbEJ5VHlwZShBdWRpb0J1
czo6Q2hhbm5lbExlZnQpLT5kYXRhKCk7CisgICAgZmxvYXQqIGRlc3RpbmF0aW9uUiA9IG91dHB1
dEJ1cy0+Y2hhbm5lbEJ5VHlwZShBdWRpb0J1czo6Q2hhbm5lbFJpZ2h0KS0+ZGF0YSgpOworCisg
ICAgZG91YmxlIGF6aW11dGhCbGVuZDsKKyAgICBpbnQgZGVzaXJlZEF6aW11dGhJbmRleCA9IGNh
bGN1bGF0ZURlc2lyZWRBemltdXRoSW5kZXhBbmRCbGVuZChhemltdXRoLCBhemltdXRoQmxlbmQp
OworCisgICAgLy8gVGhpcyBhbGdvcml0aG0gY3VycmVudGx5IHJlcXVpcmVzIHRoYXQgd2UgcHJv
Y2VzcyBpbiBwb3dlci1vZi10d28gc2l6ZSBjaHVua3MgYXQgbGVhc3QgMTI4LgorICAgIEFTU0VS
VCgxVUwgPDwgc3RhdGljX2Nhc3Q8aW50Pihsb2cyKGZyYW1lc1RvUHJvY2VzcykpID09IGZyYW1l
c1RvUHJvY2Vzcyk7CisgICAgQVNTRVJUKGZyYW1lc1RvUHJvY2VzcyA+PSAxMjgpOworICAgIAor
ICAgIGNvbnN0IHVuc2lnbmVkIGZyYW1lc1BlclNlZ21lbnQgPSAxMjg7CisgICAgY29uc3QgdW5z
aWduZWQgbnVtYmVyT2ZTZWdtZW50cyA9IGZyYW1lc1RvUHJvY2VzcyAvIGZyYW1lc1BlclNlZ21l
bnQ7CisKKyAgICBmb3IgKHVuc2lnbmVkIHNlZ21lbnQgPSAwOyBzZWdtZW50IDwgbnVtYmVyT2ZT
ZWdtZW50czsgKytzZWdtZW50KSB7CisgICAgICAgIGlmIChtX2lzRmlyc3RSZW5kZXIpIHsKKyAg
ICAgICAgICAgIC8vIFNuYXAgZXhhY3RseSB0byBkZXNpcmVkIHBvc2l0aW9uIChmaXJzdCB0aW1l
IGFuZCBhZnRlciByZXNldCgpKS4KKyAgICAgICAgICAgIG1fYXppbXV0aEluZGV4ID0gZGVzaXJl
ZEF6aW11dGhJbmRleDsKKyAgICAgICAgICAgIG1faXNGaXJzdFJlbmRlciA9IGZhbHNlOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRWFjaCBzZWdtZW50IHJlbmRlcnMgd2l0aCBh
biBhemltdXRoIGluZGV4IGNsb3NlciBieSBvbmUgdG8gdGhlIGRlc2lyZWQgYXppbXV0aCBpbmRl
eC4KKyAgICAgICAgICAgIC8vIEJlY2F1c2UgaW50ZXItYXVyYWwgdGltZSBkZWxheSBpcyBtb3N0
bHkgYSBmYWN0b3Igb2YgYXppbXV0aCBhbmQgdGhlIGRlbGF5IGlzIHdoZXJlIHRoZSBjbGlja3Mg
YW5kIGdyYWluaW5lc3MgY29tZSBmcm9tLAorICAgICAgICAgICAgLy8gd2UgZG9uJ3QgYm90aGVy
IHNtb290aGluZyB0aGUgZWxldmF0aW9ucy4KKyAgICAgICAgICAgIGludCBudW1iZXJPZkF6aW11
dGhzID0gZGF0YWJhc2UtPm51bWJlck9mQXppbXV0aHMoKTsKKyAgICAgICAgICAgIGJvb2wgd3Jh
cCA9IHdyYXBEaXN0YW5jZShtX2F6aW11dGhJbmRleCwgZGVzaXJlZEF6aW11dGhJbmRleCwgbnVt
YmVyT2ZBemltdXRocyk7CisgICAgICAgICAgICBpZiAod3JhcCkgeworICAgICAgICAgICAgICAg
IGlmIChtX2F6aW11dGhJbmRleCA8IGRlc2lyZWRBemltdXRoSW5kZXgpCisgICAgICAgICAgICAg
ICAgICAgIG1fYXppbXV0aEluZGV4ID0gKG1fYXppbXV0aEluZGV4IC0gMSArIG51bWJlck9mQXpp
bXV0aHMpICUgbnVtYmVyT2ZBemltdXRoczsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChtX2F6
aW11dGhJbmRleCA+IGRlc2lyZWRBemltdXRoSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIG1f
YXppbXV0aEluZGV4ID0gKG1fYXppbXV0aEluZGV4ICsgMSkgJSBudW1iZXJPZkF6aW11dGhzOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobV9hemltdXRoSW5kZXgg
PCBkZXNpcmVkQXppbXV0aEluZGV4KQorICAgICAgICAgICAgICAgICAgICBtX2F6aW11dGhJbmRl
eCA9IChtX2F6aW11dGhJbmRleCArIDEpICUgbnVtYmVyT2ZBemltdXRoczsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChtX2F6aW11dGhJbmRleCA+IGRlc2lyZWRBemltdXRoSW5kZXgpCisgICAg
ICAgICAgICAgICAgICAgIG1fYXppbXV0aEluZGV4ID0gKG1fYXppbXV0aEluZGV4IC0gMSArIG51
bWJlck9mQXppbXV0aHMpICUgbnVtYmVyT2ZBemltdXRoczsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gR2V0IHRoZSBIUlRGS2VybmVscyBhbmQgaW50ZXJw
b2xhdGVkIGRlbGF5cy4gICAgCisgICAgICAgIEhSVEZLZXJuZWwqIGtlcm5lbEw7CisgICAgICAg
IEhSVEZLZXJuZWwqIGtlcm5lbFI7CisgICAgICAgIGRvdWJsZSBmcmFtZURlbGF5TDsKKyAgICAg
ICAgZG91YmxlIGZyYW1lRGVsYXlSOworICAgICAgICBkYXRhYmFzZS0+Z2V0S2VybmVsc0Zyb21B
emltdXRoRWxldmF0aW9uKGF6aW11dGhCbGVuZCwgbV9hemltdXRoSW5kZXgsIGVsZXZhdGlvbiwg
a2VybmVsTCwga2VybmVsUiwgZnJhbWVEZWxheUwsIGZyYW1lRGVsYXlSKTsKKworICAgICAgICBB
U1NFUlQoa2VybmVsTCAmJiBrZXJuZWxSKTsKKyAgICAgICAgaWYgKCFrZXJuZWxMIHx8ICFrZXJu
ZWxSKSB7CisgICAgICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKGZyYW1lRGVsYXlMIC8gc2Ft
cGxlUmF0ZSgpIDwgTWF4RGVsYXlUaW1lU2Vjb25kcyAmJiBmcmFtZURlbGF5UiAvIHNhbXBsZVJh
dGUoKSA8IE1heERlbGF5VGltZVNlY29uZHMpOworICAgICAgICAgICAgCisgICAgICAgIC8vIENh
bGN1bGF0ZSB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBwb2ludGVycyBmb3IgdGhlIGN1cnJl
bnQgc2VnbWVudC4KKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gc2VnbWVudCAqIGZyYW1lc1Bl
clNlZ21lbnQ7CisgICAgICAgIGZsb2F0KiBzZWdtZW50U291cmNlTCA9IHNvdXJjZUwgKyBvZmZz
ZXQ7CisgICAgICAgIGZsb2F0KiBzZWdtZW50U291cmNlUiA9IHNvdXJjZVIgKyBvZmZzZXQ7Cisg
ICAgICAgIGZsb2F0KiBzZWdtZW50RGVzdGluYXRpb25MID0gZGVzdGluYXRpb25MICsgb2Zmc2V0
OworICAgICAgICBmbG9hdCogc2VnbWVudERlc3RpbmF0aW9uUiA9IGRlc3RpbmF0aW9uUiArIG9m
ZnNldDsKKworICAgICAgICAvLyBGaXJzdCBydW4gdGhyb3VnaCBkZWxheSBsaW5lcyBmb3IgaW50
ZXItYXVyYWwgdGltZSBkaWZmZXJlbmNlLgorICAgICAgICBtX2RlbGF5TGluZUwuc2V0RGVsYXlG
cmFtZXMoZnJhbWVEZWxheUwpOworICAgICAgICBtX2RlbGF5TGluZVIuc2V0RGVsYXlGcmFtZXMo
ZnJhbWVEZWxheVIpOworICAgICAgICBtX2RlbGF5TGluZUwucHJvY2VzcyhzZWdtZW50U291cmNl
TCwgc2VnbWVudERlc3RpbmF0aW9uTCwgZnJhbWVzUGVyU2VnbWVudCk7CisgICAgICAgIG1fZGVs
YXlMaW5lUi5wcm9jZXNzKHNlZ21lbnRTb3VyY2VSLCBzZWdtZW50RGVzdGluYXRpb25SLCBmcmFt
ZXNQZXJTZWdtZW50KTsKKworICAgICAgICAvLyBOb3cgZG8gdGhlIGNvbnZvbHV0aW9ucyBpbi1w
bGFjZS4KKyAgICAgICAgbV9jb252b2x2ZXJMLnByb2Nlc3Moa2VybmVsTC0+ZmZ0RnJhbWUoKSwg
c2VnbWVudERlc3RpbmF0aW9uTCwgc2VnbWVudERlc3RpbmF0aW9uTCwgZnJhbWVzUGVyU2VnbWVu
dCk7CisgICAgICAgIG1fY29udm9sdmVyUi5wcm9jZXNzKGtlcm5lbFItPmZmdEZyYW1lKCksIHNl
Z21lbnREZXN0aW5hdGlvblIsIHNlZ21lbnREZXN0aW5hdGlvblIsIGZyYW1lc1BlclNlZ21lbnQp
OworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQl9BVURJTykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURlBhbm5lci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURlBhbm5lci5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGUGFubmVyLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEhSVEZQYW5uZXJfaAorI2Rl
ZmluZSBIUlRGUGFubmVyX2gKKworI2luY2x1ZGUgIkRlbGF5RFNQS2VybmVsLmgiCisjaW5jbHVk
ZSAiRkZUQ29udm9sdmVyLmgiCisjaW5jbHVkZSAiUGFubmVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgSFJURlBhbm5lciA6IHB1YmxpYyBQYW5uZXIgeworcHVibGljOgorICAg
IGV4cGxpY2l0IEhSVEZQYW5uZXIoZG91YmxlIHNhbXBsZVJhdGUpOworICAgIHZpcnR1YWwgfkhS
VEZQYW5uZXIoKTsKKworICAgIC8vIFBhbm5lcgorICAgIHZpcnR1YWwgdm9pZCBwYW4oZG91Ymxl
IGF6aW11dGgsIGRvdWJsZSBlbGV2YXRpb24sIEF1ZGlvQnVzKiBpbnB1dEJ1cywgQXVkaW9CdXMq
IG91dHB1dEJ1cywgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHJl
c2V0KCk7CisKKyAgICBzaXplX3QgZmZ0U2l6ZSgpIHsgcmV0dXJuIGZmdFNpemVGb3JTYW1wbGVS
YXRlKG1fc2FtcGxlUmF0ZSk7IH0KKyAgICBzdGF0aWMgc2l6ZV90IGZmdFNpemVGb3JTYW1wbGVS
YXRlKGRvdWJsZSBzYW1wbGVSYXRlKTsKKworICAgIGRvdWJsZSBzYW1wbGVSYXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9CisgICAgCitwcml2YXRlOgorICAgIC8vIEdpdmVuIGFu
IGF6aW11dGggYW5nbGUgaW4gdGhlIHJhbmdlIC0xODAgLT4gKzE4MCwgcmV0dXJucyB0aGUgY29y
cmVzcG9uZGluZyBhemltdXRoIGluZGV4IGZvciB0aGUgZGF0YWJhc2UsCisgICAgLy8gYW5kIGF6
aW11dGhCbGVuZCB3aGljaCBpcyBhbiBpbnRlcnBvbGF0aW9uIHZhbHVlIGZyb20gMCAtPiAxLgor
ICAgIGludCBjYWxjdWxhdGVEZXNpcmVkQXppbXV0aEluZGV4QW5kQmxlbmQoZG91YmxlIGF6aW11
dGgsIGRvdWJsZSYgYXppbXV0aEJsZW5kKTsKKworICAgIGRvdWJsZSBtX3NhbXBsZVJhdGU7Cisg
ICAgCisgICAgLy8gbV9pc0ZpcnN0UmVuZGVyIGFuZCBtX2F6aW11dGhJbmRleCBhcmUgdXNlZCB0
byBhdm9pZCBoYXJzaGx5IGNoYW5naW5nIGZyb20gcmVuZGVyaW5nIGF0IG9uZSBhemltdXRoIGFu
Z2xlIHRvIGFub3RoZXIgYW5nbGUgdmVyeSBmYXIgYXdheS4KKyAgICAvLyBDaGFuZ2luZyB0aGUg
YXppbXV0aCBncmFkdWFsbHkgcHJvZHVjZXMgYSBzbW9vdGhlciBzb3VuZC4KKyAgICBib29sIG1f
aXNGaXJzdFJlbmRlcjsKKyAgICBpbnQgbV9hemltdXRoSW5kZXg7CisKKyAgICBGRlRDb252b2x2
ZXIgbV9jb252b2x2ZXJMOworICAgIEZGVENvbnZvbHZlciBtX2NvbnZvbHZlclI7CisgICAgRGVs
YXlEU1BLZXJuZWwgbV9kZWxheUxpbmVMOworICAgIERlbGF5RFNQS2VybmVsIG1fZGVsYXlMaW5l
UjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEhSVEZQYW5uZXJf
aAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>