<?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>57409</bug_id>
          
          <creation_ts>2011-03-29 17:41:56 -0700</creation_ts>
          <short_desc>[WinCairo] Implement Missing drawWindowsBitmap</short_desc>
          <delta_ts>2011-03-31 20:11:01 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>aroben</cc>
    
    <cc>buildbot</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>375931</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-03-29 17:41:56 -0700</bug_when>
    <thetext>When playing with the ENABLE(VIDEO) options, I realized there was a missing GraphicsContext method needed for the WinCairo port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375937</commentid>
    <comment_count>1</comment_count>
      <attachid>87444</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-03-29 17:45:26 -0700</bug_when>
    <thetext>Created attachment 87444
Implementation of missing drawWindowsBitmap for WinCairo port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376613</commentid>
    <comment_count>2</comment_count>
      <attachid>87444</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-30 13:10:49 -0700</bug_when>
    <thetext>Comment on attachment 87444
Implementation of missing drawWindowsBitmap for WinCairo port.

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

It seems like this code and the code in GraphicsContext::releaseWindowsContext are almost identical. Is it possible to refactor it out into a helper function?

&gt; Source/WebCore/platform/graphics/win/GraphicsContextCairoWin.cpp:160
&gt; +                                            CAIRO_FORMAT_ARGB32,
&gt; +                                            image-&gt;size().width(),
&gt; +                                            image-&gt;size().height(),
&gt; +                                            image-&gt;bytesPerRow());
&gt; +

Please line these up with the opening (.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextCairoWin.cpp:166
&gt; +    cairo_scale(m_data-&gt;cr, 1.0, -1.0);

This should just be:

cairo_scale(m_data-&gt;cr, 1, -1);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376676</commentid>
    <comment_count>3</comment_count>
      <attachid>87617</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-03-30 14:31:47 -0700</bug_when>
    <thetext>Created attachment 87617
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376823</commentid>
    <comment_count>4</comment_count>
      <attachid>87646</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-03-30 17:47:41 -0700</bug_when>
    <thetext>Created attachment 87646
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376838</commentid>
    <comment_count>5</comment_count>
      <attachid>87646</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-03-30 18:24:48 -0700</bug_when>
    <thetext>Comment on attachment 87646
Patch

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

&gt; Source/WebCore/platform/graphics/GraphicsContext.h:460
&gt; +            IntSize size() const { return m_bitmapBits.size(); }

Should be a const IntSize&amp;.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextWin.cpp:91
&gt; +GraphicsContext::WindowsBitmap::WindowsBitmap(HDC hdc, GraphicsContext::WindowsBitmap::FromActiveBitmapType)
&gt; +    : m_hdc(hdc)
&gt; +{
&gt; +    m_bitmap = static_cast&lt;HBITMAP&gt;(GetCurrentObject(hdc, OBJ_BITMAP));
&gt; +    m_bitmapBits.initializeFromHBitmap(m_bitmap);
&gt; +}

This will still result in the HDC and HBITMAP being destroyed when the WindowsBitmap is destroyed. That seems undesirable and wrong.

&gt; Source/WebCore/platform/win/WindowsDIB.cpp:31
&gt; +WindowsDIB::WindowsDIB(const HBITMAP&amp; bitmap)

No need for the const&amp;. HBITMAP is just a pointer.

Seems like this class should be in platform/graphics/win.

&gt; Source/WebCore/platform/win/WindowsDIB.cpp:46
&gt; +void WindowsDIB::initializeFromHBitmap(const HBITMAP&amp; bitmap)
&gt; +{
&gt; +    BITMAP bmpInfo;
&gt; +    GetObject(bitmap, sizeof(bmpInfo), &amp;bmpInfo);
&gt; +
&gt; +    m_bitmapBuffer = reinterpret_cast&lt;UInt8*&gt;(bmpInfo.bmBits);
&gt; +    m_bitmapBufferLength = bmpInfo.bmWidthBytes * bmpInfo.bmHeight;
&gt; +    m_size = IntSize(bmpInfo.bmWidth, bmpInfo.bmHeight);
&gt; +    m_bytesPerRow = bmpInfo.bmWidthBytes;
&gt; +    m_bitsPerPixel = bmpInfo.bmBitsPixel;
&gt; +}

Why not just do this in the constructor?

No need for the const&amp;. HBITMAP is just a pointer.

&gt; Source/WebCore/platform/win/WindowsDIB.h:54
&gt; +        IntSize size() const { return m_size; }

Should be a const IntSize&amp;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376876</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-03-30 19:37:24 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; Source/WebCore/platform/graphics/win/GraphicsContextWin.cpp:91
&gt; &gt; +GraphicsContext::WindowsBitmap::WindowsBitmap(HDC hdc, GraphicsContext::WindowsBitmap::FromActiveBitmapType)
&gt; &gt; +    : m_hdc(hdc)
&gt; &gt; +{
&gt; &gt; +    m_bitmap = static_cast&lt;HBITMAP&gt;(GetCurrentObject(hdc, OBJ_BITMAP));
&gt; &gt; +    m_bitmapBits.initializeFromHBitmap(m_bitmap);
&gt; &gt; +}
&gt; 
&gt; This will still result in the HDC and HBITMAP being destroyed when the WindowsBitmap is destroyed. That seems undesirable and wrong.

I thought that was the desired function of the existing WindowsBitmap inner class, since that was how it was originally designed.

If the change you suggest is made, we&apos;ll have to manually destroy the HDC and HBITMAP context when the WindowsBitmap goes out of scope to retain the same behavior as the current WebKit implementation.  I assumed this object was created to help avoid this manual cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376882</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-03-30 19:43:12 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; &gt; Source/WebCore/platform/graphics/win/GraphicsContextWin.cpp:91
&gt; &gt; &gt; +GraphicsContext::WindowsBitmap::WindowsBitmap(HDC hdc, GraphicsContext::WindowsBitmap::FromActiveBitmapType)
&gt; &gt; &gt; +    : m_hdc(hdc)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    m_bitmap = static_cast&lt;HBITMAP&gt;(GetCurrentObject(hdc, OBJ_BITMAP));
&gt; &gt; &gt; +    m_bitmapBits.initializeFromHBitmap(m_bitmap);
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; This will still result in the HDC and HBITMAP being destroyed when the WindowsBitmap is destroyed. That seems undesirable and wrong.
&gt; 
&gt; I thought that was the desired function of the existing WindowsBitmap inner class, since that was how it was originally designed.
&gt; 
&gt; If the change you suggest is made, we&apos;ll have to manually destroy the HDC and HBITMAP context when the WindowsBitmap goes out of scope to retain the same behavior as the current WebKit implementation.  I assumed this object was created to help avoid this manual cleanup.

I see. I&apos;d suggest making the current code use OwnPtr to hold the HDC and HBITMAP, and then use your new WindowsDIB class instead of WindowsBitmap. You can leave WindowsBitmap untouched in that case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376884</commentid>
    <comment_count>8</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-03-30 19:45:15 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I see. I&apos;d suggest making the current code use OwnPtr to hold the HDC and HBITMAP, and then use your new WindowsDIB class instead of WindowsBitmap. You can leave WindowsBitmap untouched in that case.

Okay -- I&apos;ll give that a shot tomorrow!

Thanks for all the helpful reviews.  :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377286</commentid>
    <comment_count>9</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-03-31 10:18:51 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; +void WindowsDIB::initializeFromHBitmap(const HBITMAP&amp; bitmap)
&gt; &gt; +{
&gt; &gt; +    BITMAP bmpInfo;
&gt; &gt; +    GetObject(bitmap, sizeof(bmpInfo), &amp;bmpInfo);
&gt; &gt; +
&gt; &gt; +    m_bitmapBuffer = reinterpret_cast&lt;UInt8*&gt;(bmpInfo.bmBits);
&gt; &gt; +    m_bitmapBufferLength = bmpInfo.bmWidthBytes * bmpInfo.bmHeight;
&gt; &gt; +    m_size = IntSize(bmpInfo.bmWidth, bmpInfo.bmHeight);
&gt; &gt; +    m_bytesPerRow = bmpInfo.bmWidthBytes;
&gt; &gt; +    m_bitsPerPixel = bmpInfo.bmBitsPixel;
&gt; &gt; +}
&gt; 
&gt; Why not just do this in the constructor?

I don&apos;t have an HBITMAP during construction of the overall WindowsBitmap, so I default construct an empty object, then populate it using the &quot;initializeFromHBitmap&quot; later on.  If that wasn&apos;t the case, this could all be moved into the constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377335</commentid>
    <comment_count>10</comment_count>
      <attachid>87767</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-03-31 11:02:52 -0700</bug_when>
    <thetext>Created attachment 87767
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377340</commentid>
    <comment_count>11</comment_count>
      <attachid>87769</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-03-31 11:06:15 -0700</bug_when>
    <thetext>Created attachment 87769
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377366</commentid>
    <comment_count>12</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-31 11:54:24 -0700</bug_when>
    <thetext>Attachment 87769 did not build on win:
Build output: http://queues.webkit.org/results/8311403</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377371</commentid>
    <comment_count>13</comment_count>
      <attachid>87775</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-03-31 12:09:14 -0700</bug_when>
    <thetext>Created attachment 87775
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377426</commentid>
    <comment_count>14</comment_count>
      <attachid>87775</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-03-31 14:03:00 -0700</bug_when>
    <thetext>Comment on attachment 87775
Patch

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

It seems buggy that releaseWindowsContext doesn&apos;t select the HDC&apos;s original bitmap back into it before calling ::DeleteDC. That&apos;s not a new problem, though.

This is looking good. Let&apos;s do one more pass to nail down the last few things.

&gt; Source/WebCore/platform/graphics/GraphicsContext.h:447
&gt; +

I don&apos;t think this extra line is needed.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextCGWin.cpp:101
&gt; +    OwnPtr&lt;HBITMAP&gt; bitmap(static_cast&lt;HBITMAP&gt;(GetCurrentObject(hdc, OBJ_BITMAP)));

The more modern way of writing this is to use assignment and adoptPtr.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextCairoWin.cpp:99
&gt; +static void drawBitmapToContext(GraphicsContextPlatformPrivate* context, const WindowsDIB&amp; windowsDIB, double tx, double ty)

tx/ty would be better as an IntSize or FloatSize. (I think only ints are passed in?)

&gt; Source/WebCore/platform/graphics/win/GraphicsContextCairoWin.cpp:137
&gt; +    OwnPtr&lt;HBITMAP&gt; bitmap(static_cast&lt;HBITMAP&gt;(GetCurrentObject(hdc, OBJ_BITMAP)));

Same comment here about adoptPtr.

&gt; Source/WebCore/platform/graphics/win/WindowsDIB.h:39
&gt; +class WindowsDIB {

Since this class doesn&apos;t hold onto the DIB itself, maybe a name like DIBData or DIBPixelData would be better.

&gt; Source/WebCore/platform/graphics/win/WindowsDIB.h:48
&gt; +        WindowsDIB(HBITMAP);

This should be marked explicit.

&gt; Source/WebCore/platform/graphics/win/WindowsDIB.h:50
&gt; +        void initializeFromHBitmap(const HBITMAP&amp;);

No need for the const&amp;. I think &quot;FromHBitmap&quot; could be removed, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377463</commentid>
    <comment_count>15</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-03-31 14:40:47 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 87775 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=87775&amp;action=review
&gt; 
&gt; It seems buggy that releaseWindowsContext doesn&apos;t select the HDC&apos;s original bitmap back into it before calling ::DeleteDC. That&apos;s not a new problem, though.

Wouldn&apos;t we have to cache the original bitmap someplace?  Or is there a stock bitmap we can reselect?  Either way, I&apos;d prefer to do that as a separate issue to avoid breaking something unexpected.

&gt; &gt; Source/WebCore/platform/graphics/win/GraphicsContextCairoWin.cpp:99
&gt; &gt; +static void drawBitmapToContext(GraphicsContextPlatformPrivate* context, const WindowsDIB&amp; windowsDIB, double tx, double ty)
&gt; 
&gt; tx/ty would be better as an IntSize or FloatSize. (I think only ints are passed in?)

These are x,y coordinates to translate to.  I could use an IntPoint, which might be clearer.

Cairo expects to deal with doubles for these two values, so it seemed easier just to take the arguments as doubles, even though the original values are integers as you point out.

I&apos;ll switch to an IntPoint for the argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377483</commentid>
    <comment_count>16</comment_count>
      <attachid>87795</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-03-31 15:14:14 -0700</bug_when>
    <thetext>Created attachment 87795
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377503</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-03-31 15:40:27 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (From update of attachment 87775 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=87775&amp;action=review
&gt; &gt; 
&gt; &gt; It seems buggy that releaseWindowsContext doesn&apos;t select the HDC&apos;s original bitmap back into it before calling ::DeleteDC. That&apos;s not a new problem, though.
&gt; 
&gt; Wouldn&apos;t we have to cache the original bitmap someplace?  Or is there a stock bitmap we can reselect?  Either way, I&apos;d prefer to do that as a separate issue to avoid breaking something unexpected.

Yes, we&apos;d have to cache the original bitmap. And yes, this should not be done as part of this patch.

&gt; &gt; &gt; Source/WebCore/platform/graphics/win/GraphicsContextCairoWin.cpp:99
&gt; &gt; &gt; +static void drawBitmapToContext(GraphicsContextPlatformPrivate* context, const WindowsDIB&amp; windowsDIB, double tx, double ty)
&gt; &gt; 
&gt; &gt; tx/ty would be better as an IntSize or FloatSize. (I think only ints are passed in?)
&gt; 
&gt; These are x,y coordinates to translate to.  I could use an IntPoint, which might be clearer.

Usually translation is talked about as being a translation by a certain distance, not a translation to a certain point (though the two are of course equivalent). So I&apos;d still argue that IntSize is better than IntPoint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377504</commentid>
    <comment_count>18</comment_count>
      <attachid>87795</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-03-31 15:42:36 -0700</bug_when>
    <thetext>Comment on attachment 87795
Patch

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

&gt; Source/WebCore/platform/graphics/win/GraphicsContextWin.cpp:71
&gt; +    UInt8* storage = 0;

You could make this a void* to avoid the cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377507</commentid>
    <comment_count>19</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-03-31 15:47:25 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; &gt; These are x,y coordinates to translate to.  I could use an IntPoint, which might be clearer.
&gt; 
&gt; Usually translation is talked about as being a translation by a certain distance, not a translation to a certain point (though the two are of course equivalent). So I&apos;d still argue that IntSize is better than IntPoint.

Ok.  IntSize it is!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377620</commentid>
    <comment_count>20</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-03-31 20:11:01 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/82640</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87444</attachid>
            <date>2011-03-29 17:45:26 -0700</date>
            <delta_ts>2011-03-30 14:31:45 -0700</delta_ts>
            <desc>Implementation of missing drawWindowsBitmap for WinCairo port.</desc>
            <filename>wincairo_drawbitmap.patch</filename>
            <type>text/plain</type>
            <size>2289</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyMzcwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDMtMjkgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NzQwOQorICAgICAgICBbV2luQ2Fpcm9dIEltcGxlbWVudCBtaXNzaW5nIGRyYXdXaW5k
b3dzQml0bWFwIG1ldGhvZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHRDYWlyb1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdXaW5kb3dzQml0bWFwKToKKwogMjAxMS0wMy0yOSAgQW5kZXJzIENhcmxzc29uICA8
YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBidWlsZC4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dENhaXJvV2luLmNwcAkocmV2aXNpb24gODIzMTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDgsNiArMTQ4LDM0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxl
YXNlV2luZG93c0NvbnQKICAgICBjYWlyb19yZXN0b3JlKG1fZGF0YS0+Y3IpOwogfQogCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1dpbmRvd3NCaXRtYXAoV2luZG93c0JpdG1hcCogaW1hZ2Us
IGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICAvLyBOZWVkIHRvIG1ha2UgYSBjYWlyb19z
dXJmYWNlX3Qgb3V0IG9mIHRoZSBiaXRtYXAncyBwaXhlbCBidWZmZXIgYW5kIHRoZW4gZHJhdwor
ICAgIC8vIGl0IGludG8gb3VyIGNvbnRleHQuCisgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZVN1
cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShpbWFnZS0+YnVmZmVy
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBSVJPX0ZP
Uk1BVF9BUkdCMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGltYWdlLT5zaXplKCkud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UtPmJ5dGVzUGVyUm93KCkpOworCisgICAgLy8g
U2NhbGUgdGhlIHRhcmdldCBzdXJmYWNlIHRvIHRoZSBuZXcgaW1hZ2Ugc2l6ZSwgYW5kIGZsaXAg
aXQKKyAgICAvLyBzbyB0aGF0IHdoZW4gd2Ugc2V0IHRoZSBzcmNJbWFnZSBhcyB0aGUgc3VyZmFj
ZSBpdCB3aWxsIGRyYXcKKyAgICAvLyByaWdodC1zaWRlLXVwLgorICAgIGNhaXJvX3NhdmUobV9k
YXRhLT5jcik7CisgICAgY2Fpcm9fdHJhbnNsYXRlKG1fZGF0YS0+Y3IsIHBvaW50LngoKSwgaW1h
Z2UtPnNpemUoKS5oZWlnaHQoKSArIHBvaW50LnkoKSk7CisgICAgY2Fpcm9fc2NhbGUobV9kYXRh
LT5jciwgMS4wLCAtMS4wKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UobV9kYXRhLT5j
ciwgaW1hZ2VTdXJmYWNlLCAwLCAwKTsKKworICAgIGlmIChtX2RhdGEtPmxheWVycy5zaXplKCkp
CisgICAgICAgIGNhaXJvX3BhaW50X3dpdGhfYWxwaGEobV9kYXRhLT5jciwgbV9kYXRhLT5sYXll
cnMubGFzdCgpKTsKKyAgICBlbHNlCisgICAgICAgIGNhaXJvX3BhaW50KG1fZGF0YS0+Y3IpOwor
ICAgICAKKyAgICAvLyBEZWxldGUgYWxsIG91ciBqdW5rLgorICAgIGNhaXJvX3N1cmZhY2VfZGVz
dHJveShpbWFnZVN1cmZhY2UpOworfQorCisKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlOjpzeW5jQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY3IpCiB7CiAgICAg
aWYgKCFjcikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87617</attachid>
            <date>2011-03-30 14:31:47 -0700</date>
            <delta_ts>2011-03-30 17:47:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57409-20110330143146.patch</filename>
            <type>text/plain</type>
            <size>9130</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNDk5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDMtMzAgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NzQwOQorICAgICAgICBbV2luQ2Fpcm9dIEltcGxlbWVudCBNaXNzaW5nIGRyYXdXaW5k
b3dzQml0bWFwIG1ldGhvZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oOiBBZGQgbmV3IGNvbnZlbmllbmNlIGNvbnN0cnVjdG9yCisgICAgICAgIHRvIHRo
ZSBHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXAgb2JqZWN0LgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpkcmF3Qml0bWFwVG9Db250ZXh0KTogTmV3IGNvbW1vbiBkcmF3aW5nIGltcGxlbWVu
dGF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93
c0NvbnRleHQpOiBNb2RpZmllZCB0byB1c2UKKyAgICAgICAgbmV3IGNvbW1vbiByb3V0aW5lcy4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1dpbmRvd3NCaXRtYXApOgor
ICAgICAgICBuZXcgaW1wbGVtZW50YXRpb24uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KTogTW9kaWZpZWQgdG8gdXNlCisgICAgICAg
IG5ldyBjb21tb24gcm91dGluZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OldpbmRvd3NCaXRtYXA6OldpbmRvd3NCaXRtYXApOiBOZXcKKyAgICAgICAgY29udmVuaWVuY2Ug
Y29uc3RydWN0b3IuCisKIDIwMTEtMDMtMzAgIEVyaWsgQXJ2aWRzc29uICA8YXJ2QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgJKHJldmlzaW9uIDgyNDU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0MywxMCArNDQzLDE0IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRTaG91bGRJbmNsdWRlQ2hpbGRXaW5k
b3dzKGJvb2wpOwogICAgICAgICBib29sIHNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoKSBjb25z
dDsKIAorCiAgICAgICAgIGNsYXNzIFdpbmRvd3NCaXRtYXAgewogICAgICAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoV2luZG93c0JpdG1hcCk7CiAgICAgICAgIHB1YmxpYzoKICAgICAgICAg
ICAgIFdpbmRvd3NCaXRtYXAoSERDLCBJbnRTaXplKTsKKworICAgICAgICAgICAgZW51bSBGcm9t
QWN0aXZlQml0bWFwVHlwZSB7IEZyb21BY3RpdmVCaXRtYXAgfTsKKyAgICAgICAgICAgIFdpbmRv
d3NCaXRtYXAoSERDLCBGcm9tQWN0aXZlQml0bWFwVHlwZSk7CiAgICAgICAgICAgICB+V2luZG93
c0JpdG1hcCgpOwogCiAgICAgICAgICAgICBIREMgaGRjKCkgY29uc3QgeyByZXR1cm4gbV9oZGM7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAkocmV2aXNpb24gODI0NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSwxNiArOTksMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnJlbGVhc2VXaW5kb3dzQ29udAogICAgIGlmIChkc3RSZWN0LmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgSEJJVE1BUCBiaXRtYXAgPSBzdGF0aWNfY2FzdDxIQklUTUFQPihH
ZXRDdXJyZW50T2JqZWN0KGhkYywgT0JKX0JJVE1BUCkpOworICAgIFdpbmRvd3NCaXRtYXAgYml0
bWFwKGhkYywgV2luZG93c0JpdG1hcDo6RnJvbUFjdGl2ZUJpdG1hcCk7CiAKLSAgICAvLyBOZWVk
IHRvIG1ha2UgYSBDR0ltYWdlIG91dCBvZiB0aGUgYml0bWFwJ3MgcGl4ZWwgYnVmZmVyIGFuZCB0
aGVuIGRyYXcKLSAgICAvLyBpdCBpbnRvIG91ciBjb250ZXh0LgotICAgIEJJVE1BUCBpbmZvOwot
ICAgIEdldE9iamVjdChiaXRtYXAsIHNpemVvZihpbmZvKSwgJmluZm8pOwotICAgIEFTU0VSVChp
bmZvLmJtQml0c1BpeGVsID09IDMyKTsKLQotICAgIENHQ29udGV4dFJlZiBiaXRtYXBDb250ZXh0
ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGluZm8uYm1CaXRzLCBpbmZvLmJtV2lkdGgsIGluZm8u
Ym1IZWlnaHQsIDgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mby5ibVdpZHRoQnl0ZXMsIGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKSwg
a0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfAorICAgIENHQ29udGV4dFJlZiBiaXRtYXBDb250
ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGJpdG1hcC5idWZmZXIoKSwgYml0bWFwLnNpemUo
KS53aWR0aCgpLCBiaXRtYXAuc2l6ZSgpLmhlaWdodCgpLCA4LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcC5ieXRlc1BlclJvdygp
LCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
c3VwcG9ydEFscGhhQmxlbmQgPyBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IDoga0NH
SW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpKTsKIAogICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBDR0Jp
dG1hcENvbnRleHRDcmVhdGVJbWFnZShiaXRtYXBDb250ZXh0KTsKQEAgLTExNyw4ICsxMTEsNiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250CiAgICAgLy8gRGVsZXRl
IGFsbCBvdXIganVuay4KICAgICBDR0ltYWdlUmVsZWFzZShpbWFnZSk7CiAgICAgQ0dDb250ZXh0
UmVsZWFzZShiaXRtYXBDb250ZXh0KTsKLSAgICA6OkRlbGV0ZURDKGhkYyk7Ci0gICAgOjpEZWxl
dGVPYmplY3QoYml0bWFwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5kb3dz
Qml0bWFwKFdpbmRvd3NCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fp
cm9XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAJKHJldmlzaW9uIDgyNDU3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsMzMgQEAgc3RhdGljIHZvaWQgc2V0UkdC
QUJpdG1hcEFscGhhKHVuc2lnbmVkCiAgICAgICAgIGJ5dGVzW2kgKyAzXSA9IGxldmVsOwogfQog
CitzdGF0aWMgdm9pZCBkcmF3Qml0bWFwVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZSogY29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwKiBiaXRtYXAs
IGRvdWJsZSB0eCwgZG91YmxlIHR5KQoreworICAgIC8vIE5lZWQgdG8gbWFrZSBhIGNhaXJvX3N1
cmZhY2VfdCBvdXQgb2YgdGhlIGJpdG1hcCdzIHBpeGVsIGJ1ZmZlciBhbmQgdGhlbiBkcmF3Cisg
ICAgLy8gaXQgaW50byBvdXIgY29udGV4dC4KKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2Ug
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShiaXRtYXAtPmJ1ZmZlcigpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwLT5zaXplKCku
d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiaXRtYXAtPnNpemUoKS5oZWlnaHQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
aXRtYXAtPmJ5dGVzUGVyUm93KCkpOworCisgICAgLy8gRmxpcCB0aGUgdGFyZ2V0IHN1cmZhY2Ug
c28gdGhhdCB3aGVuIHdlIHNldCB0aGUgc3JjSW1hZ2UgYXMKKyAgICAvLyB0aGUgc3VyZmFjZSBp
dCB3aWxsIGRyYXcgcmlnaHQtc2lkZS11cC4KKyAgICBjYWlyb19zYXZlKGNvbnRleHQtPmNyKTsK
KyAgICBjYWlyb190cmFuc2xhdGUoY29udGV4dC0+Y3IsIHR4LCB0eSk7CisgICAgY2Fpcm9fc2Nh
bGUoY29udGV4dC0+Y3IsIDEsIC0xKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY29u
dGV4dC0+Y3IsIHN1cmZhY2UsIDAsIDApOworCisgICAgaWYgKGNvbnRleHQtPmxheWVycy5zaXpl
KCkpCisgICAgICAgIGNhaXJvX3BhaW50X3dpdGhfYWxwaGEoY29udGV4dC0+Y3IsIGNvbnRleHQt
PmxheWVycy5sYXN0KCkpOworICAgIGVsc2UKKyAgICAgICAgY2Fpcm9fcGFpbnQoY29udGV4dC0+
Y3IpOworICAgICAKKyAgICAvLyBEZWxldGUgYWxsIG91ciBqdW5rLgorICAgIGNhaXJvX3N1cmZh
Y2VfZGVzdHJveShzdXJmYWNlKTsKKyAgICBjYWlyb19yZXN0b3JlKGNvbnRleHQtPmNyKTsKK30K
Kwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBj
b25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kLCBib29sIG1heUNy
ZWF0ZUJpdG1hcCkKIHsKICAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtYXlDcmVhdGVCaXRtYXAg
JiYgKCFtX2RhdGEtPm1faGRjIHx8IGluVHJhbnNwYXJlbmN5TGF5ZXIoKSk7CkBAIC0xMDcsNDcg
KzEzNCwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250CiAgICAg
aWYgKGRzdFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIQklUTUFQIGJp
dG1hcCA9IHN0YXRpY19jYXN0PEhCSVRNQVA+KEdldEN1cnJlbnRPYmplY3QoaGRjLCBPQkpfQklU
TUFQKSk7Ci0KLSAgICBCSVRNQVAgaW5mbzsKLSAgICBHZXRPYmplY3QoYml0bWFwLCBzaXplb2Yo
aW5mbyksICZpbmZvKTsKLSAgICBBU1NFUlQoaW5mby5ibUJpdHNQaXhlbCA9PSAzMik7CisgICAg
V2luZG93c0JpdG1hcCBiaXRtYXAoaGRjLCBXaW5kb3dzQml0bWFwOjpGcm9tQWN0aXZlQml0bWFw
KTsKIAogICAgIC8vIElmIHRoaXMgY29udGV4dCBkb2VzIG5vdCBzdXBwb3J0IGFscGhhIGJsZW5k
aW5nLCB0aGVuIGl0IG1heSBoYXZlCiAgICAgLy8gYmVlbiBkcmF3biB3aXRoIEdESSBmdW5jdGlv
bnMgd2hpY2ggYWx3YXlzIHNldCB0aGUgYWxwaGEgY2hhbm5lbAogICAgIC8vIHRvIHplcm8uIFdl
IG5lZWQgdG8gbWFudWFsbHkgc2V0IHRoZSBiaXRtYXAgdG8gYmUgZnVsbHkgb3BhcXVlLgotICAg
IHVuc2lnbmVkIGNoYXIqIGJ5dGVzID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
aW5mby5ibUJpdHMpOworICAgIHVuc2lnbmVkIGNoYXIqIGJ5dGVzID0gcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oYml0bWFwLmJ1ZmZlcigpKTsKICAgICBpZiAoIXN1cHBvcnRBbHBo
YUJsZW5kKQotICAgICAgICBzZXRSR0JBQml0bWFwQWxwaGEoYnl0ZXMsIGluZm8uYm1IZWlnaHQg
KiBpbmZvLmJtV2lkdGhCeXRlcywgMjU1KTsKKyAgICAgICAgc2V0UkdCQUJpdG1hcEFscGhhKGJ5
dGVzLCBiaXRtYXAuc2l6ZSgpLmhlaWdodCgpICogYml0bWFwLmJ5dGVzUGVyUm93KCksIDI1NSk7
CiAKLSAgICAvLyBOZWVkIHRvIG1ha2UgYSBjYWlyb19zdXJmYWNlX3Qgb3V0IG9mIHRoZSBiaXRt
YXAncyBwaXhlbCBidWZmZXIgYW5kIHRoZW4gZHJhdwotICAgIC8vIGl0IGludG8gb3VyIGNvbnRl
eHQuCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3Jl
YXRlX2Zvcl9kYXRhKGJ5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmZvLmJtV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluZm8uYm1IZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZm8uYm1XaWR0aEJ5dGVzKTsKLQotICAgIC8vIFNjYWxl
IHRoZSB0YXJnZXQgc3VyZmFjZSB0byB0aGUgbmV3IGltYWdlIHNpemUsIGFuZCBmbGlwIGl0Ci0g
ICAgLy8gc28gdGhhdCB3aGVuIHdlIHNldCB0aGUgc3JjSW1hZ2UgYXMgdGhlIHN1cmZhY2UgaXQg
d2lsbCBkcmF3Ci0gICAgLy8gcmlnaHQtc2lkZS11cC4KLSAgICBjYWlyb19zYXZlKG1fZGF0YS0+
Y3IpOwotICAgIGNhaXJvX3RyYW5zbGF0ZShtX2RhdGEtPmNyLCBkc3RSZWN0LngoKSwgZHN0UmVj
dC5oZWlnaHQoKSArIGRzdFJlY3QueSgpKTsKLSAgICBjYWlyb19zY2FsZShtX2RhdGEtPmNyLCAx
LjAsIC0xLjApOwotICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShtX2RhdGEtPmNyLCBpbWFn
ZSwgMCwgMCk7CisgICAgZHJhd0JpdG1hcFRvQ29udGV4dChtX2RhdGEsICZiaXRtYXAsIGRzdFJl
Y3QueCgpLCBkc3RSZWN0LmhlaWdodCgpICsgZHN0UmVjdC55KCkpOworfQogCi0gICAgaWYgKG1f
ZGF0YS0+bGF5ZXJzLnNpemUoKSkKLSAgICAgICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYShtX2Rh
dGEtPmNyLCBtX2RhdGEtPmxheWVycy5sYXN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgY2Fpcm9f
cGFpbnQobV9kYXRhLT5jcik7Ci0gICAgIAotICAgIC8vIERlbGV0ZSBhbGwgb3VyIGp1bmsuCi0g
ICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGltYWdlKTsKLSAgICA6OkRlbGV0ZURDKGhkYyk7Ci0g
ICAgOjpEZWxldGVPYmplY3QoYml0bWFwKTsKLSAgICBjYWlyb19yZXN0b3JlKG1fZGF0YS0+Y3Ip
Owordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5kb3dzQml0bWFwKFdpbmRvd3NCaXRtYXAq
IGJpdG1hcCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIGRyYXdCaXRtYXBUb0NvbnRl
eHQobV9kYXRhLCBiaXRtYXAsIHBvaW50LngoKSwgYml0bWFwLT5zaXplKCkuaGVpZ2h0KCkgKyBw
b2ludC55KCkpOwogfQogCisKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpz
eW5jQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY3IpCiB7CiAgICAgaWYgKCFjcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCShyZXZpc2lvbiA4MjQ1NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NCw2ICs4NCwyMSBAQCBHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRt
YXA6OldpbmRvd3NCCiAgICAgU2V0R3JhcGhpY3NNb2RlKG1faGRjLCBHTV9BRFZBTkNFRCk7CiB9
CiAKK0dyYXBoaWNzQ29udGV4dDo6V2luZG93c0JpdG1hcDo6V2luZG93c0JpdG1hcChIREMgaGRj
LCBHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6OkZyb21BY3RpdmVCaXRtYXBUeXBlKQor
ICAgIDogbV9oZGMoaGRjKQoreworICAgIG1fYml0bWFwID0gc3RhdGljX2Nhc3Q8SEJJVE1BUD4o
R2V0Q3VycmVudE9iamVjdChoZGMsIE9CSl9CSVRNQVApKTsKKworICAgIEJJVE1BUCBibXBJbmZv
OworICAgIEdldE9iamVjdChtX2JpdG1hcCwgc2l6ZW9mKGJtcEluZm8pLCAmYm1wSW5mbyk7Cisg
ICAgQVNTRVJUKGJtcEluZm8uYm1CaXRzUGl4ZWwgPT0gMzIpOworCisgICAgbV9iaXRtYXBCdWZm
ZXIgPSByZWludGVycHJldF9jYXN0PFVJbnQ4Kj4oYm1wSW5mby5ibUJpdHMpOworICAgIG1fYml0
bWFwQnVmZmVyTGVuZ3RoID0gYm1wSW5mby5ibVdpZHRoQnl0ZXMgKiBibXBJbmZvLmJtSGVpZ2h0
OworICAgIG1fc2l6ZSA9IEludFNpemUoYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0
KTsKKyAgICBtX2J5dGVzUGVyUm93ID0gYm1wSW5mby5ibVdpZHRoQnl0ZXM7Cit9CisKIEdyYXBo
aWNzQ29udGV4dDo6V2luZG93c0JpdG1hcDo6fldpbmRvd3NCaXRtYXAoKQogewogICAgIGlmICgh
bV9iaXRtYXApCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87646</attachid>
            <date>2011-03-30 17:47:41 -0700</date>
            <delta_ts>2011-03-31 11:02:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57409-20110330174740.patch</filename>
            <type>text/plain</type>
            <size>19681</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNTI1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTEtMDMtMzAgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtXaW5DYWlyb10gSW1wbGVtZW50IE1pc3NpbmcgZHJhd1dp
bmRvd3NCaXRtYXAgbWV0aG9kLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTc0MDkKKworICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOiBBZGQgbmV3IFdpbmRvd3NESUIgZmlsZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0Lmg6IEFkZCBuZXcgY29udmVuaWVuY2UgY29uc3RydWN0b3IKKyAg
ICAgICAgdG8gdGhlIEdyYXBoaWNzQ29udGV4dDo6V2luZG93c0JpdG1hcCBvYmplY3QuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6OmJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6OmJ1ZmZlckxl
bmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6
OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFw
OjpieXRlc1BlclJvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OldpbmRv
d3NCaXRtYXA6OmJpdHNQZXJQaXhlbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFdp
dGhIREMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93
c0NvbnRleHQpOiBNb2RpZmllZCB0byB1c2UKKyAgICAgICAgbmV3IGNvbW1vbiByb3V0aW5lcy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0JpdG1hcFRvQ29udGV4dCk6IE5ldyBjb21tb24g
ZHJhd2luZyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KTogTW9kaWZpZWQgdG8gdXNlCisgICAgICAgIG5ldyBj
b21tb24gcm91dGluZXMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdX
aW5kb3dzQml0bWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6V2luZG93
c0JpdG1hcDo6V2luZG93c0JpdG1hcCk6IE5ldworICAgICAgICBjb252ZW5pZW5jZSBjb25zdHJ1
Y3Rvci4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV2luZG93c0RJQi5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2luZG93c0RJQjo6V2luZG93c0RJQik6CisgICAgICAgIChXZWJDb3Jl
OjpXaW5kb3dzRElCOjppbml0aWFsaXplRnJvbUhCaXRtYXApOgorICAgICAgICAqIHBsYXRmb3Jt
L3dpbi9XaW5kb3dzRElCLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2luZG93c0RJQjo6
V2luZG93c0RJQik6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dzRElCOjpidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6V2luZG93c0RJQjo6YnVmZmVyTGVuZ3RoKToKKyAgICAgICAgKFdlYkNv
cmU6OldpbmRvd3NESUI6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6V2luZG93c0RJQjo6Ynl0
ZXNQZXJSb3cpOgorICAgICAgICAoV2ViQ29yZTo6V2luZG93c0RJQjo6Yml0c1BlclBpeGVsKToK
IDIwMTEtMDMtMzAgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA4MjQ1NykKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjU1Miw2ICsyNjU1MiwxNCBAQAogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHdpblxX
aW5kb3dNZXNzYWdlTGlzdGVuZXIuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHdpblxXaW5kb3dzRElCLmNwcCIKKwkJCQkJ
PgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XHdpblxXaW5kb3dzRElCLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CiAJCQk8L0ZpbHRlcj4KIAkJ
CTxGaWx0ZXIKIAkJCQlOYW1lPSJjZiIKQEAgLTYzMTczLDYgKzYzMTgxLDEwIEBACiAJCQkJCT4K
IAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xq
c1xQYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8Rmls
ZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjaGVkdWxlZEFjdGlvbi5jcHAi
CiAJCQkJCT4KIAkJCQkJPEZpbGVDb25maWd1cmF0aW9uCkBAIC02NDAwNCwxMCArNjQwMTYsNiBA
QAogCQkJCQkJLz4KIAkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCQk8L0ZpbGU+Ci0JCQkJ
PEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xQYWdlU2NyaXB0RGVidWdT
ZXJ2ZXIuaCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KIAkJCTwvRmlsdGVyPgogCQkJPEZpbHRlcgog
CQkJCU5hbWU9InNjcmlwdHMiCkBAIC02NjQ2NiwxNSArNjY0NzQsMTUgQEAKIAkJCQk+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3Rv
clByb2ZpbGVyQWdlbnQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3Bl
Y3RvclBhZ2VBZ2VudC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JQYWdlQWdlbnQuY3BwIgorCQkJCVJlbGF0
aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclBhZ2VBZ2VudC5oIgogCQkJCT4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9y
UGFnZUFnZW50LmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShy
ZXZpc2lvbiA4MjQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5MCw3IEBAIHR5cGVkZWYgdm9p
ZCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQor
I2luY2x1ZGUgIldpbmRvd3NESUIuaCIKIHR5cGVkZWYgc3RydWN0IEhEQ19fKiBIREM7CiAjaWYg
IVBMQVRGT1JNKENHKQogLy8gVUludDggaXMgZGVmaW5lZCBpbiBDb3JlRm91bmRhdGlvbi9DRkJh
c2UuaApAQCAtNDQzLDI1ICs0NDQsMjcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIHNldFNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoYm9vbCk7CiAgICAgICAgIGJvb2wgc2hv
dWxkSW5jbHVkZUNoaWxkV2luZG93cygpIGNvbnN0OwogCisKICAgICAgICAgY2xhc3MgV2luZG93
c0JpdG1hcCB7CiAgICAgICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXaW5kb3dzQml0bWFw
KTsKICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgV2luZG93c0JpdG1hcChIREMsIEludFNp
emUpOworCisgICAgICAgICAgICBlbnVtIEZyb21BY3RpdmVCaXRtYXBUeXBlIHsgRnJvbUFjdGl2
ZUJpdG1hcCB9OworICAgICAgICAgICAgV2luZG93c0JpdG1hcChIREMsIEZyb21BY3RpdmVCaXRt
YXBUeXBlKTsKICAgICAgICAgICAgIH5XaW5kb3dzQml0bWFwKCk7CiAKICAgICAgICAgICAgIEhE
QyBoZGMoKSBjb25zdCB7IHJldHVybiBtX2hkYzsgfQotICAgICAgICAgICAgVUludDgqIGJ1ZmZl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwQnVmZmVyOyB9Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2JpdG1hcEJ1ZmZlckxlbmd0aDsgfQot
ICAgICAgICAgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNQZXJS
b3c7IH0KKyAgICAgICAgICAgIFVJbnQ4KiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2JpdG1h
cEJpdHMuYnVmZmVyKCk7IH0KKyAgICAgICAgICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fYml0bWFwQml0cy5idWZmZXJMZW5ndGgoKTsgfQorICAgICAgICAgICAg
SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9iaXRtYXBCaXRzLnNpemUoKTsgfQorICAg
ICAgICAgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCB7IHJldHVybiBtX2JpdG1hcEJp
dHMuYnl0ZXNQZXJSb3coKTsgfQorICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYml0c1BlclBp
eGVsKCkgY29uc3QgeyByZXR1cm4gbV9iaXRtYXBCaXRzLmJpdHNQZXJQaXhlbCgpOyB9CiAKICAg
ICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIEhEQyBtX2hkYzsKICAgICAgICAgICAgIEhCSVRN
QVAgbV9iaXRtYXA7Ci0gICAgICAgICAgICBVSW50OCogbV9iaXRtYXBCdWZmZXI7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBtX2JpdG1hcEJ1ZmZlckxlbmd0aDsKLSAgICAgICAgICAgIEludFNpemUg
bV9zaXplOwotICAgICAgICAgICAgdW5zaWduZWQgbV9ieXRlc1BlclJvdzsKKyAgICAgICAgICAg
IFdpbmRvd3NESUIgbV9iaXRtYXBCaXRzOwogICAgICAgICB9OwogCiAgICAgICAgIFdpbmRvd3NC
aXRtYXAqIGNyZWF0ZVdpbmRvd3NCaXRtYXAoSW50U2l6ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRDR1dpbi5jcHAJKHJldmlzaW9uIDgyNDU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAsMjIgKzQwLDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBDR0NvbnRleHRSZWYg
Q0dDb250ZXh0V2l0aEhEQyhIREMgaGRjLCBib29sIGhhc0FscGhhKQogewogICAgIEhCSVRNQVAg
Yml0bWFwID0gc3RhdGljX2Nhc3Q8SEJJVE1BUD4oR2V0Q3VycmVudE9iamVjdChoZGMsIE9CSl9C
SVRNQVApKTsKLSAgICBCSVRNQVAgaW5mbzsKIAotICAgIEdldE9iamVjdChiaXRtYXAsIHNpemVv
ZihpbmZvKSwgJmluZm8pOworICAgIFdpbmRvd3NESUIgd2luZG93c0RJQihiaXRtYXApOwogCiAg
ICAgLy8gRklYTUU6IFdlIGNhbiBnZXQgaGVyZSBiZWNhdXNlIHdlIGFza2VkIGZvciBhIGJpdG1h
cCB0aGF0IGlzIHRvbyBiaWcKICAgICAvLyB3aGVuIHdlIGhhdmUgYSB0aWxlZCBsYXllciBhbmQg
d2UncmUgY29tcG9zaXRpbmcuIEluIHRoYXQgY2FzZSAKICAgICAvLyBibUJpdHNQaXhlbCB3aWxs
IGJlIDAuIFRoaXMgc2VlbXMgdG8gYmUgYmVuaWduLCBzbyBmb3Igbm93IHdlIHdpbGwKICAgICAv
LyBleGl0IGdyYWNlZnVsbHkgYW5kIGxvb2sgYXQgaXQgbGF0ZXI6CiAgICAgLy8gIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjA0MSAgIAotICAgIC8vIEFTU0VSVChp
bmZvLmJtQml0c1BpeGVsID09IDMyKTsKLSAgICBpZiAoaW5mby5ibUJpdHNQaXhlbCAhPSAzMikK
KyAgICAvLyBBU1NFUlQoYml0bWFwQml0cy5iaXRzUGVyUGl4ZWwoKSA9PSAzMik7CisgICAgaWYg
KHdpbmRvd3NESUIuYml0c1BlclBpeGVsKCkgIT0gMzIpCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8
IChoYXNBbHBoYSA/IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgOiBrQ0dJbWFnZUFs
cGhhTm9uZVNraXBGaXJzdCk7Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBDR0JpdG1hcENv
bnRleHRDcmVhdGUoaW5mby5ibUJpdHMsIGluZm8uYm1XaWR0aCwgaW5mby5ibUhlaWdodCwgOCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmJt
V2lkdGhCeXRlcywgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpLCBiaXRtYXBJbmZvKTsKKyAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZSh3aW5kb3dzRElCLmJ1
ZmZlcigpLCB3aW5kb3dzRElCLnNpemUoKS53aWR0aCgpLCB3aW5kb3dzRElCLnNpemUoKS5oZWln
aHQoKSwgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3aW5kb3dzRElCLmJ5dGVzUGVyUm93KCksIGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKSwgYml0
bWFwSW5mbyk7CiAKICAgICAvLyBGbGlwIGNvb3JkcwogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNU
TShjb250ZXh0LCAwLCBpbmZvLmJtSGVpZ2h0KTsKQEAgLTk5LDE2ICs5OCwxMSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250CiAgICAgaWYgKGRzdFJlY3QuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIQklUTUFQIGJpdG1hcCA9IHN0YXRpY19jYXN0
PEhCSVRNQVA+KEdldEN1cnJlbnRPYmplY3QoaGRjLCBPQkpfQklUTUFQKSk7Ci0KLSAgICAvLyBO
ZWVkIHRvIG1ha2UgYSBDR0ltYWdlIG91dCBvZiB0aGUgYml0bWFwJ3MgcGl4ZWwgYnVmZmVyIGFu
ZCB0aGVuIGRyYXcKLSAgICAvLyBpdCBpbnRvIG91ciBjb250ZXh0LgotICAgIEJJVE1BUCBpbmZv
OwotICAgIEdldE9iamVjdChiaXRtYXAsIHNpemVvZihpbmZvKSwgJmluZm8pOwotICAgIEFTU0VS
VChpbmZvLmJtQml0c1BpeGVsID09IDMyKTsKKyAgICBXaW5kb3dzQml0bWFwIGJpdG1hcChoZGMs
IFdpbmRvd3NCaXRtYXA6OkZyb21BY3RpdmVCaXRtYXApOworICAgIEFTU0VSVChiaXRtYXAuYml0
c1BlclBpeGVsKCkgPT0gMzIpOwogCi0gICAgQ0dDb250ZXh0UmVmIGJpdG1hcENvbnRleHQgPSBD
R0JpdG1hcENvbnRleHRDcmVhdGUoaW5mby5ibUJpdHMsIGluZm8uYm1XaWR0aCwgaW5mby5ibUhl
aWdodCwgOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmZvLmJtV2lkdGhCeXRlcywgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dC
aXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8CisgICAgQ0dDb250ZXh0UmVmIGJpdG1hcENvbnRleHQg
PSBDR0JpdG1hcENvbnRleHRDcmVhdGUoYml0bWFwLmJ1ZmZlcigpLCBiaXRtYXAuc2l6ZSgpLndp
ZHRoKCksIGJpdG1hcC5zaXplKCkuaGVpZ2h0KCksIDgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwLmJ5dGVzUGVyUm93KCksIGRl
dmljZVJHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdXBw
b3J0QWxwaGFCbGVuZCA/IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgOiBrQ0dJbWFn
ZUFscGhhTm9uZVNraXBGaXJzdCkpOwogCiAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IENHQml0bWFw
Q29udGV4dENyZWF0ZUltYWdlKGJpdG1hcENvbnRleHQpOwpAQCAtMTE3LDggKzExMSw2IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnQKICAgICAvLyBEZWxldGUgYWxs
IG91ciBqdW5rLgogICAgIENHSW1hZ2VSZWxlYXNlKGltYWdlKTsKICAgICBDR0NvbnRleHRSZWxl
YXNlKGJpdG1hcENvbnRleHQpOwotICAgIDo6RGVsZXRlREMoaGRjKTsKLSAgICA6OkRlbGV0ZU9i
amVjdChiaXRtYXApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1dpbmRvd3NCaXRt
YXAoV2luZG93c0JpdG1hcCogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBwb2ludCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAkocmV2aXNpb24gODI0NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5NiwzMyBAQCBzdGF0aWMgdm9pZCBzZXRSR0JBQml0
bWFwQWxwaGEodW5zaWduZWQKICAgICAgICAgYnl0ZXNbaSArIDNdID0gbGV2ZWw7CiB9CiAKK3N0
YXRpYyB2b2lkIGRyYXdCaXRtYXBUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXAqIGJpdG1hcCwgZG91
YmxlIHR4LCBkb3VibGUgdHkpCit7CisgICAgLy8gTmVlZCB0byBtYWtlIGEgY2Fpcm9fc3VyZmFj
ZV90IG91dCBvZiB0aGUgYml0bWFwJ3MgcGl4ZWwgYnVmZmVyIGFuZCB0aGVuIGRyYXcKKyAgICAv
LyBpdCBpbnRvIG91ciBjb250ZXh0LgorICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNh
aXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGJpdG1hcC0+YnVmZmVyKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0FJUk9fRk9STUFUX0FSR0IzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAtPnNpemUoKS53aWR0
aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJpdG1hcC0+c2l6ZSgpLmhlaWdodCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1h
cC0+Ynl0ZXNQZXJSb3coKSk7CisKKyAgICAvLyBGbGlwIHRoZSB0YXJnZXQgc3VyZmFjZSBzbyB0
aGF0IHdoZW4gd2Ugc2V0IHRoZSBzcmNJbWFnZSBhcworICAgIC8vIHRoZSBzdXJmYWNlIGl0IHdp
bGwgZHJhdyByaWdodC1zaWRlLXVwLgorICAgIGNhaXJvX3NhdmUoY29udGV4dC0+Y3IpOworICAg
IGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LT5jciwgdHgsIHR5KTsKKyAgICBjYWlyb19zY2FsZShj
b250ZXh0LT5jciwgMSwgLTEpOworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjb250ZXh0
LT5jciwgc3VyZmFjZSwgMCwgMCk7CisKKyAgICBpZiAoY29udGV4dC0+bGF5ZXJzLnNpemUoKSkK
KyAgICAgICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYShjb250ZXh0LT5jciwgY29udGV4dC0+bGF5
ZXJzLmxhc3QoKSk7CisgICAgZWxzZQorICAgICAgICBjYWlyb19wYWludChjb250ZXh0LT5jcik7
CisgICAgIAorICAgIC8vIERlbGV0ZSBhbGwgb3VyIGp1bmsuCisgICAgY2Fpcm9fc3VyZmFjZV9k
ZXN0cm95KHN1cmZhY2UpOworICAgIGNhaXJvX3Jlc3RvcmUoY29udGV4dC0+Y3IpOworfQorCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0
IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQsIGJvb2wgbWF5Q3JlYXRl
Qml0bWFwKQogewogICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9IG1heUNyZWF0ZUJpdG1hcCAmJiAo
IW1fZGF0YS0+bV9oZGMgfHwgaW5UcmFuc3BhcmVuY3lMYXllcigpKTsKQEAgLTEwNyw0NyArMTM0
LDI1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnQKICAgICBpZiAo
ZHN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhCSVRNQVAgYml0bWFw
ID0gc3RhdGljX2Nhc3Q8SEJJVE1BUD4oR2V0Q3VycmVudE9iamVjdChoZGMsIE9CSl9CSVRNQVAp
KTsKLQotICAgIEJJVE1BUCBpbmZvOwotICAgIEdldE9iamVjdChiaXRtYXAsIHNpemVvZihpbmZv
KSwgJmluZm8pOwotICAgIEFTU0VSVChpbmZvLmJtQml0c1BpeGVsID09IDMyKTsKKyAgICBXaW5k
b3dzQml0bWFwIGJpdG1hcChoZGMsIFdpbmRvd3NCaXRtYXA6OkZyb21BY3RpdmVCaXRtYXApOwor
ICAgIEFTU0VSVChiaXRtYXAuYml0c1BlclBpeGVsKCkgPT0gMzIpOwogCiAgICAgLy8gSWYgdGhp
cyBjb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgYWxwaGEgYmxlbmRpbmcsIHRoZW4gaXQgbWF5IGhh
dmUKICAgICAvLyBiZWVuIGRyYXduIHdpdGggR0RJIGZ1bmN0aW9ucyB3aGljaCBhbHdheXMgc2V0
IHRoZSBhbHBoYSBjaGFubmVsCiAgICAgLy8gdG8gemVyby4gV2UgbmVlZCB0byBtYW51YWxseSBz
ZXQgdGhlIGJpdG1hcCB0byBiZSBmdWxseSBvcGFxdWUuCi0gICAgdW5zaWduZWQgY2hhciogYnl0
ZXMgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihpbmZvLmJtQml0cyk7CisgICAg
dW5zaWduZWQgY2hhciogYnl0ZXMgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihi
aXRtYXAuYnVmZmVyKCkpOwogICAgIGlmICghc3VwcG9ydEFscGhhQmxlbmQpCi0gICAgICAgIHNl
dFJHQkFCaXRtYXBBbHBoYShieXRlcywgaW5mby5ibUhlaWdodCAqIGluZm8uYm1XaWR0aEJ5dGVz
LCAyNTUpOworICAgICAgICBzZXRSR0JBQml0bWFwQWxwaGEoYnl0ZXMsIGJpdG1hcC5zaXplKCku
aGVpZ2h0KCkgKiBiaXRtYXAuYnl0ZXNQZXJSb3coKSwgMjU1KTsKIAotICAgIC8vIE5lZWQgdG8g
bWFrZSBhIGNhaXJvX3N1cmZhY2VfdCBvdXQgb2YgdGhlIGJpdG1hcCdzIHBpeGVsIGJ1ZmZlciBh
bmQgdGhlbiBkcmF3Ci0gICAgLy8gaXQgaW50byBvdXIgY29udGV4dC4KLSAgICBjYWlyb19zdXJm
YWNlX3QqIGltYWdlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoYnl0ZXMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBSVJPX0ZPUk1B
VF9BUkdCMzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
Zm8uYm1XaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5mby5ibUhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5mby5ibVdpZHRoQnl0ZXMpOwotCi0gICAgLy8gU2NhbGUgdGhlIHRhcmdldCBzdXJmYWNl
IHRvIHRoZSBuZXcgaW1hZ2Ugc2l6ZSwgYW5kIGZsaXAgaXQKLSAgICAvLyBzbyB0aGF0IHdoZW4g
d2Ugc2V0IHRoZSBzcmNJbWFnZSBhcyB0aGUgc3VyZmFjZSBpdCB3aWxsIGRyYXcKLSAgICAvLyBy
aWdodC1zaWRlLXVwLgotICAgIGNhaXJvX3NhdmUobV9kYXRhLT5jcik7Ci0gICAgY2Fpcm9fdHJh
bnNsYXRlKG1fZGF0YS0+Y3IsIGRzdFJlY3QueCgpLCBkc3RSZWN0LmhlaWdodCgpICsgZHN0UmVj
dC55KCkpOwotICAgIGNhaXJvX3NjYWxlKG1fZGF0YS0+Y3IsIDEuMCwgLTEuMCk7Ci0gICAgY2Fp
cm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fZGF0YS0+Y3IsIGltYWdlLCAwLCAwKTsKKyAgICBkcmF3
Qml0bWFwVG9Db250ZXh0KG1fZGF0YSwgJmJpdG1hcCwgZHN0UmVjdC54KCksIGRzdFJlY3QuaGVp
Z2h0KCkgKyBkc3RSZWN0LnkoKSk7Cit9CiAKLSAgICBpZiAobV9kYXRhLT5sYXllcnMuc2l6ZSgp
KQotICAgICAgICBjYWlyb19wYWludF93aXRoX2FscGhhKG1fZGF0YS0+Y3IsIG1fZGF0YS0+bGF5
ZXJzLmxhc3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBjYWlyb19wYWludChtX2RhdGEtPmNyKTsK
LSAgICAgCi0gICAgLy8gRGVsZXRlIGFsbCBvdXIganVuay4KLSAgICBjYWlyb19zdXJmYWNlX2Rl
c3Ryb3koaW1hZ2UpOwotICAgIDo6RGVsZXRlREMoaGRjKTsKLSAgICA6OkRlbGV0ZU9iamVjdChi
aXRtYXApOwotICAgIGNhaXJvX3Jlc3RvcmUobV9kYXRhLT5jcik7Cit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1dpbmRvd3NCaXRtYXAoV2luZG93c0JpdG1hcCogYml0bWFwLCBjb25zdCBJbnRQ
b2ludCYgcG9pbnQpCit7CisgICAgZHJhd0JpdG1hcFRvQ29udGV4dChtX2RhdGEsIGJpdG1hcCwg
cG9pbnQueCgpLCBiaXRtYXAtPnNpemUoKS5oZWlnaHQoKSArIHBvaW50LnkoKSk7CiB9CiAKKwog
dm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnN5bmNDb250ZXh0KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBjcikKIHsKICAgICBpZiAoIWNyKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dFdpbi5jcHAJKHJldmlzaW9uIDgyNDU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDI1
ICs2NSwzMSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDo6c2hvdWxkSW5jbHVkZUNoaWxkCiAKIEdy
YXBoaWNzQ29udGV4dDo6V2luZG93c0JpdG1hcDo6V2luZG93c0JpdG1hcChIREMgaGRjLCBJbnRT
aXplIHNpemUpCiAgICAgOiBtX2hkYygwKQotICAgICwgbV9zaXplKHNpemUpCiB7Ci0gICAgQml0
bWFwSW5mbyBiaXRtYXBJbmZvID0gQml0bWFwSW5mbzo6Y3JlYXRlKG1fc2l6ZSk7CisgICAgQml0
bWFwSW5mbyBiaXRtYXBJbmZvID0gQml0bWFwSW5mbzo6Y3JlYXRlKHNpemUpOwogCi0gICAgbV9i
aXRtYXAgPSBDcmVhdGVESUJTZWN0aW9uKDAsICZiaXRtYXBJbmZvLCBESUJfUkdCX0NPTE9SUywg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX2JpdG1hcEJ1ZmZlciksIDAsIDApOworICAgIFVJ
bnQ4KiBzdG9yYWdlID0gMDsKKyAgICBtX2JpdG1hcCA9IENyZWF0ZURJQlNlY3Rpb24oMCwgJmJp
dG1hcEluZm8sIERJQl9SR0JfQ09MT1JTLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJnN0b3Jh
Z2UpLCAwLCAwKTsKICAgICBpZiAoIW1fYml0bWFwKQogICAgICAgICByZXR1cm47CiAKICAgICBt
X2hkYyA9IENyZWF0ZUNvbXBhdGlibGVEQyhoZGMpOwogICAgIFNlbGVjdE9iamVjdChtX2hkYywg
bV9iaXRtYXApOwogCi0gICAgQklUTUFQIGJtcEluZm87Ci0gICAgR2V0T2JqZWN0KG1fYml0bWFw
LCBzaXplb2YoYm1wSW5mbyksICZibXBJbmZvKTsKLSAgICBtX2J5dGVzUGVyUm93ID0gYm1wSW5m
by5ibVdpZHRoQnl0ZXM7Ci0gICAgbV9iaXRtYXBCdWZmZXJMZW5ndGggPSBibXBJbmZvLmJtV2lk
dGhCeXRlcyAqIGJtcEluZm8uYm1IZWlnaHQ7CisgICAgbV9iaXRtYXBCaXRzLmluaXRpYWxpemVG
cm9tSEJpdG1hcChtX2JpdG1hcCk7CisKKyAgICBBU1NFUlQoc3RvcmFnZSA9PSBtX2JpdG1hcEJp
dHMuYnVmZmVyKCkpOwogCiAgICAgU2V0R3JhcGhpY3NNb2RlKG1faGRjLCBHTV9BRFZBTkNFRCk7
CiB9CiAKK0dyYXBoaWNzQ29udGV4dDo6V2luZG93c0JpdG1hcDo6V2luZG93c0JpdG1hcChIREMg
aGRjLCBHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6OkZyb21BY3RpdmVCaXRtYXBUeXBl
KQorICAgIDogbV9oZGMoaGRjKQoreworICAgIG1fYml0bWFwID0gc3RhdGljX2Nhc3Q8SEJJVE1B
UD4oR2V0Q3VycmVudE9iamVjdChoZGMsIE9CSl9CSVRNQVApKTsKKyAgICBtX2JpdG1hcEJpdHMu
aW5pdGlhbGl6ZUZyb21IQml0bWFwKG1fYml0bWFwKTsKK30KKwogR3JhcGhpY3NDb250ZXh0OjpX
aW5kb3dzQml0bWFwOjp+V2luZG93c0JpdG1hcCgpCiB7CiAgICAgaWYgKCFtX2JpdG1hcCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaW5kb3dzRElCLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2luZG93c0RJQi5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2luZG93c0RJQi5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQnJlbnQg
RnVsZ2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldpbmRvd3NE
SUIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXaW5kb3dzRElCOjpXaW5kb3dzRElCKGNv
bnN0IEhCSVRNQVAmIGJpdG1hcCkKK3sKKyAgICBpbml0aWFsaXplRnJvbUhCaXRtYXAoYml0bWFw
KTsKK30KKwordm9pZCBXaW5kb3dzRElCOjppbml0aWFsaXplRnJvbUhCaXRtYXAoY29uc3QgSEJJ
VE1BUCYgYml0bWFwKQoreworICAgIEJJVE1BUCBibXBJbmZvOworICAgIEdldE9iamVjdChiaXRt
YXAsIHNpemVvZihibXBJbmZvKSwgJmJtcEluZm8pOworCisgICAgbV9iaXRtYXBCdWZmZXIgPSBy
ZWludGVycHJldF9jYXN0PFVJbnQ4Kj4oYm1wSW5mby5ibUJpdHMpOworICAgIG1fYml0bWFwQnVm
ZmVyTGVuZ3RoID0gYm1wSW5mby5ibVdpZHRoQnl0ZXMgKiBibXBJbmZvLmJtSGVpZ2h0OworICAg
IG1fc2l6ZSA9IEludFNpemUoYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KTsKKyAg
ICBtX2J5dGVzUGVyUm93ID0gYm1wSW5mby5ibVdpZHRoQnl0ZXM7CisgICAgbV9iaXRzUGVyUGl4
ZWwgPSBibXBJbmZvLmJtQml0c1BpeGVsOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2luZG93c0RJQi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaW5kb3dzRElCLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2luZG93c0RJQi5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEJyZW50IEZ1bGdo
YW0gPGJmdWxnaGFtQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgV2luZG93c0RJQl9oCisjZGVmaW5lIFdpbmRvd3NESUJfaAor
CisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2lmICFQTEFU
Rk9STShDRykKKy8vIFVJbnQ4IGlzIGRlZmluZWQgaW4gQ29yZUZvdW5kYXRpb24vQ0ZCYXNlLmgK
K3R5cGVkZWYgdW5zaWduZWQgY2hhciBVSW50ODsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFdpbmRvd3NESUIgeworICAgIHB1YmxpYzoKKyAgICAgICAgV2luZG93c0RJ
QigpCisgICAgICAgICAgICA6IG1fYml0bWFwQnVmZmVyKDApCisgICAgICAgICAgICAsIG1fYml0
bWFwQnVmZmVyTGVuZ3RoKDApCisgICAgICAgICAgICAsIG1fYnl0ZXNQZXJSb3coMCkKKyAgICAg
ICAgICAgICwgbV9iaXRzUGVyUGl4ZWwoMCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IFdpbmRvd3NESUIoY29uc3QgSEJJVE1BUCYpOworCisgICAgICAgIHZvaWQgaW5pdGlhbGl6ZUZy
b21IQml0bWFwKGNvbnN0IEhCSVRNQVAmKTsKKworICAgICAgICBVSW50OCogYnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gbV9iaXRtYXBCdWZmZXI7IH0KKyAgICAgICAgdW5zaWduZWQgYnVmZmVyTGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9iaXRtYXBCdWZmZXJMZW5ndGg7IH0KKyAgICAgICAgSW50
U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgICAgIHVuc2lnbmVkIGJ5
dGVzUGVyUm93KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1BlclJvdzsgfQorICAgICAgICB1bnNp
Z25lZCBzaG9ydCBiaXRzUGVyUGl4ZWwoKSBjb25zdCB7IHJldHVybiBtX2JpdHNQZXJQaXhlbDsg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgVUludDgqIG1fYml0bWFwQnVmZmVyOworICAgICAg
ICB1bnNpZ25lZCBtX2JpdG1hcEJ1ZmZlckxlbmd0aDsKKyAgICAgICAgSW50U2l6ZSBtX3NpemU7
CisgICAgICAgIHVuc2lnbmVkIG1fYnl0ZXNQZXJSb3c7CisgICAgICAgIHVuc2lnbmVkIHNob3J0
IG1fYml0c1BlclBpeGVsOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gV2luZG93c0RJQl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87767</attachid>
            <date>2011-03-31 11:02:52 -0700</date>
            <delta_ts>2011-03-31 11:06:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57409-20110331110251.patch</filename>
            <type>text/plain</type>
            <size>19596</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNTk5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDMtMzEgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtXaW5DYWlyb10gSW1wbGVtZW50IE1pc3NpbmcgZHJhd1dp
bmRvd3NCaXRtYXAgbWV0aG9kLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTc0MDkKKworICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOiBBZGQgbmV3IFdpbmRvd3NESUIgZmlsZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OldpbmRvd3NCaXRtYXA6OmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OldpbmRvd3NCaXRtYXA6OmJ1ZmZlckxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwOjpieXRlc1BlclJvdyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6OmJpdHNQZXJQaXhlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6OndpbmRvd3NESUIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRXaXRoSERDKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KTogTW9kaWZpZWQgdG8g
dXNlCisgICAgICAgIG5ldyBjb21tb24gcm91dGluZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRyYXdCaXRtYXBUb0NvbnRleHQpOiBOZXcgY29tbW9uIGRyYXdpbmcgaW1wbGVtZW50YXRpb24u
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4
dCk6IE1vZGlmaWVkIHRvIHVzZQorICAgICAgICBuZXcgY29tbW9uIHJvdXRpbmVzLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3V2luZG93c0JpdG1hcCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6OldpbmRvd3NCaXRtYXAp
OiBNb2RpZmllZAorICAgICAgICB0byB1c2UgbmV3IFdpbmRvd3NESUIgZGF0YSB0eXBlLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9XaW5kb3dzRElCLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXaW5kb3dzRElCOjpXaW5kb3dzRElCKToKKyAgICAgICAgKFdlYkNvcmU6
OldpbmRvd3NESUI6OmluaXRpYWxpemVGcm9tSEJpdG1hcCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1dpbmRvd3NESUIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaW5k
b3dzRElCOjpXaW5kb3dzRElCKToKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd3NESUI6OmJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dzRElCOjpidWZmZXJMZW5ndGgpOgorICAgICAg
ICAoV2ViQ29yZTo6V2luZG93c0RJQjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dz
RElCOjpieXRlc1BlclJvdyk6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dzRElCOjpiaXRzUGVy
UGl4ZWwpOgorCiAyMDExLTAzLTMxICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gODI1ODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjU3ODYsMTkgKzI1Nzg2LDE5IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXERyYWdEYXRhLmNwcCIKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXERlZmF1bHRMb2NhbGl6YXRpb25TdHJhdGVneS5jcHAiCiAJCQkJ
PgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXERy
YWdEYXRhLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxEZWZhdWx0TG9jYWxpemF0
aW9uU3RyYXRlZ3kuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGxhdGZvcm1cRGVmYXVsdExvY2FsaXphdGlvblN0cmF0ZWd5LmNwcCIKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXERyYWdEYXRhLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cRGVmYXVsdExvY2FsaXph
dGlvblN0cmF0ZWd5LmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxEcmFnRGF0YS5o
IgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCkBAIC0yNzcwOCw2ICsyNzcwOCwxNCBAQAog
CQkJCQkJPgogCQkJCQk8L0ZpbGU+CiAJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXHdpblxXaW5kb3dzRElCLmNwcCIKKwkJCQkJCT4KKwkJCQkJPC9G
aWxlPgorCQkJCQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGlj
c1x3aW5cV2luZG93c0RJQi5oIgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJCTxGaWxlCiAJ
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxXS0NBSW1hZ2VRdWV1
ZS5jcHAiCiAJCQkJCQk+CiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KQEAgLTYzMTkzLDYgKzYz
MjAxLDEwIEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxiaW5kaW5nc1xqc1xQYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaCIKKwkJCQkJPgorCQkJ
CTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNj
aGVkdWxlZEFjdGlvbi5jcHAiCiAJCQkJCT4KIAkJCQkJPEZpbGVDb25maWd1cmF0aW9uCkBAIC02
NDAyNCwxMCArNjQwMzYsNiBAQAogCQkJCQkJLz4KIAkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
IAkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xq
c1xQYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KIAkJCTwvRmls
dGVyPgogCQkJPEZpbHRlcgogCQkJCU5hbWU9InNjcmlwdHMiCkBAIC02NjQ4NiwxNSArNjY0OTQs
MTUgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aW5zcGVjdG9yXEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0i
Li5caW5zcGVjdG9yXEluc3BlY3RvclBhZ2VBZ2VudC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgog
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JQYWdlQWdl
bnQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclBhZ2VBZ2Vu
dC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxp
bnNwZWN0b3JcSW5zcGVjdG9yUGFnZUFnZW50LmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNw
ZWN0b3JcSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJ
PEZpbGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiA4MjU4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5
MCw3IEBAIHR5cGVkZWYgdm9pZCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgIldpbmRvd3NESUIuaCIKIHR5cGVkZWYgc3RydWN0
IEhEQ19fKiBIREM7CiAjaWYgIVBMQVRGT1JNKENHKQogLy8gVUludDggaXMgZGVmaW5lZCBpbiBD
b3JlRm91bmRhdGlvbi9DRkJhc2UuaApAQCAtNDQzLDYgKzQ0NCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdm9pZCBzZXRTaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKGJvb2wpOwog
ICAgICAgICBib29sIHNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoKSBjb25zdDsKIAorCiAgICAg
ICAgIGNsYXNzIFdpbmRvd3NCaXRtYXAgewogICAgICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoV2luZG93c0JpdG1hcCk7CiAgICAgICAgIHB1YmxpYzoKQEAgLTQ1MCwxOCArNDUyLDE3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIH5XaW5kb3dzQml0bWFwKCk7CiAKICAg
ICAgICAgICAgIEhEQyBoZGMoKSBjb25zdCB7IHJldHVybiBtX2hkYzsgfQotICAgICAgICAgICAg
VUludDgqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwQnVmZmVyOyB9Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBidWZmZXJMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2JpdG1hcEJ1ZmZl
ckxlbmd0aDsgfQotICAgICAgICAgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9Ci0gICAgICAgICAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IHsgcmV0dXJu
IG1fYnl0ZXNQZXJSb3c7IH0KKyAgICAgICAgICAgIFVJbnQ4KiBidWZmZXIoKSBjb25zdCB7IHJl
dHVybiBtX3dpbmRvd3NESUIuYnVmZmVyKCk7IH0KKyAgICAgICAgICAgIHVuc2lnbmVkIGJ1ZmZl
ckxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93c0RJQi5idWZmZXJMZW5ndGgoKTsgfQor
ICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93
c0RJQi5zaXplKCk7IH0KKyAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qg
eyByZXR1cm4gbV93aW5kb3dzRElCLmJ5dGVzUGVyUm93KCk7IH0KKyAgICAgICAgICAgIHVuc2ln
bmVkIHNob3J0IGJpdHNQZXJQaXhlbCgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93c0RJQi5iaXRz
UGVyUGl4ZWwoKTsgfQorICAgICAgICAgICAgY29uc3QgV2luZG93c0RJQiYgd2luZG93c0RJQigp
IGNvbnN0IHsgcmV0dXJuIG1fd2luZG93c0RJQjsgfQogCiAgICAgICAgIHByaXZhdGU6CiAgICAg
ICAgICAgICBIREMgbV9oZGM7CiAgICAgICAgICAgICBIQklUTUFQIG1fYml0bWFwOwotICAgICAg
ICAgICAgVUludDgqIG1fYml0bWFwQnVmZmVyOwotICAgICAgICAgICAgdW5zaWduZWQgbV9iaXRt
YXBCdWZmZXJMZW5ndGg7Ci0gICAgICAgICAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIG1fYnl0ZXNQZXJSb3c7CisgICAgICAgICAgICBXaW5kb3dzRElCIG1fd2luZG93
c0RJQjsKICAgICAgICAgfTsKIAogICAgICAgICBXaW5kb3dzQml0bWFwKiBjcmVhdGVXaW5kb3dz
Qml0bWFwKEludFNpemUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCShyZXZpc2lv
biA4MjU4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDIyICs0MCwyMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgQ0dDb250ZXh0UmVmIENHQ29udGV4dFdpdGhIREMoSERD
IGhkYywgYm9vbCBoYXNBbHBoYSkKIHsKICAgICBIQklUTUFQIGJpdG1hcCA9IHN0YXRpY19jYXN0
PEhCSVRNQVA+KEdldEN1cnJlbnRPYmplY3QoaGRjLCBPQkpfQklUTUFQKSk7Ci0gICAgQklUTUFQ
IGluZm87CiAKLSAgICBHZXRPYmplY3QoYml0bWFwLCBzaXplb2YoaW5mbyksICZpbmZvKTsKKyAg
ICBXaW5kb3dzRElCIHdpbmRvd3NESUIoYml0bWFwKTsKIAogICAgIC8vIEZJWE1FOiBXZSBjYW4g
Z2V0IGhlcmUgYmVjYXVzZSB3ZSBhc2tlZCBmb3IgYSBiaXRtYXAgdGhhdCBpcyB0b28gYmlnCiAg
ICAgLy8gd2hlbiB3ZSBoYXZlIGEgdGlsZWQgbGF5ZXIgYW5kIHdlJ3JlIGNvbXBvc2l0aW5nLiBJ
biB0aGF0IGNhc2UgCiAgICAgLy8gYm1CaXRzUGl4ZWwgd2lsbCBiZSAwLiBUaGlzIHNlZW1zIHRv
IGJlIGJlbmlnbiwgc28gZm9yIG5vdyB3ZSB3aWxsCiAgICAgLy8gZXhpdCBncmFjZWZ1bGx5IGFu
ZCBsb29rIGF0IGl0IGxhdGVyOgogICAgIC8vICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTIwNDEgICAKLSAgICAvLyBBU1NFUlQoaW5mby5ibUJpdHNQaXhlbCA9PSAz
Mik7Ci0gICAgaWYgKGluZm8uYm1CaXRzUGl4ZWwgIT0gMzIpCisgICAgLy8gQVNTRVJUKGJpdG1h
cEJpdHMuYml0c1BlclBpeGVsKCkgPT0gMzIpOworICAgIGlmICh3aW5kb3dzRElCLmJpdHNQZXJQ
aXhlbCgpICE9IDMyKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIENHQml0bWFwSW5mbyBiaXRt
YXBJbmZvID0ga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCAoaGFzQWxwaGEgPyBrQ0dJbWFn
ZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IDoga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpOwot
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGluZm8uYm1C
aXRzLCBpbmZvLmJtV2lkdGgsIGluZm8uYm1IZWlnaHQsIDgsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5ibVdpZHRoQnl0ZXMsIGRldmljZVJH
QkNvbG9yU3BhY2VSZWYoKSwgYml0bWFwSW5mbyk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQg
PSBDR0JpdG1hcENvbnRleHRDcmVhdGUod2luZG93c0RJQi5idWZmZXIoKSwgd2luZG93c0RJQi5z
aXplKCkud2lkdGgoKSwgd2luZG93c0RJQi5zaXplKCkuaGVpZ2h0KCksIDgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93c0RJQi5ieXRlc1Bl
clJvdygpLCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksIGJpdG1hcEluZm8pOwogCiAgICAgLy8g
RmxpcCBjb29yZHMKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgaW5mby5i
bUhlaWdodCk7CkBAIC0xMDEsMTQgKzEwMCwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVs
ZWFzZVdpbmRvd3NDb250CiAKICAgICBIQklUTUFQIGJpdG1hcCA9IHN0YXRpY19jYXN0PEhCSVRN
QVA+KEdldEN1cnJlbnRPYmplY3QoaGRjLCBPQkpfQklUTUFQKSk7CiAKLSAgICAvLyBOZWVkIHRv
IG1ha2UgYSBDR0ltYWdlIG91dCBvZiB0aGUgYml0bWFwJ3MgcGl4ZWwgYnVmZmVyIGFuZCB0aGVu
IGRyYXcKLSAgICAvLyBpdCBpbnRvIG91ciBjb250ZXh0LgotICAgIEJJVE1BUCBpbmZvOwotICAg
IEdldE9iamVjdChiaXRtYXAsIHNpemVvZihpbmZvKSwgJmluZm8pOwotICAgIEFTU0VSVChpbmZv
LmJtQml0c1BpeGVsID09IDMyKTsKKyAgICBXaW5kb3dzRElCIHdpbmRvd3NESUIoYml0bWFwKTsK
IAotICAgIENHQ29udGV4dFJlZiBiaXRtYXBDb250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
KGluZm8uYm1CaXRzLCBpbmZvLmJtV2lkdGgsIGluZm8uYm1IZWlnaHQsIDgsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5ibVdpZHRo
Qnl0ZXMsIGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0
bGUgfAorICAgIEFTU0VSVCh3aW5kb3dzRElCLmJpdHNQZXJQaXhlbCgpID09IDMyKTsKKworICAg
IENHQ29udGV4dFJlZiBiaXRtYXBDb250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHdpbmRv
d3NESUIuYnVmZmVyKCksIHdpbmRvd3NESUIuc2l6ZSgpLndpZHRoKCksIHdpbmRvd3NESUIuc2l6
ZSgpLmhlaWdodCgpLCA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpbmRvd3NESUIuYnl0ZXNQZXJSb3coKSwgZGV2aWNlUkdCQ29sb3JT
cGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1cHBvcnRBbHBoYUJsZW5k
ID8ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCA6IGtDR0ltYWdlQWxwaGFOb25lU2tp
cEZpcnN0KSk7CiAKICAgICBDR0ltYWdlUmVmIGltYWdlID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
SW1hZ2UoYml0bWFwQ29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5j
cHAJKHJldmlzaW9uIDgyNTgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNiAr
OTYsMzMgQEAgc3RhdGljIHZvaWQgc2V0UkdCQUJpdG1hcEFscGhhKHVuc2lnbmVkCiAgICAgICAg
IGJ5dGVzW2kgKyAzXSA9IGxldmVsOwogfQogCitzdGF0aWMgdm9pZCBkcmF3Qml0bWFwVG9Db250
ZXh0KEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogY29udGV4dCwgY29uc3QgV2luZG93
c0RJQiYgd2luZG93c0RJQiwgZG91YmxlIHR4LCBkb3VibGUgdHkpCit7CisgICAgLy8gTmVlZCB0
byBtYWtlIGEgY2Fpcm9fc3VyZmFjZV90IG91dCBvZiB0aGUgYml0bWFwJ3MgcGl4ZWwgYnVmZmVy
IGFuZCB0aGVuIGRyYXcKKyAgICAvLyBpdCBpbnRvIG91ciBjb250ZXh0LgorICAgIGNhaXJvX3N1
cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHdp
bmRvd3NESUIuYnVmZmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFUX0FSR0IzMiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aW5kb3dzRElCLnNpemUoKS53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3NESUIuc2l6
ZSgpLmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3NESUIuYnl0ZXNQZXJSb3coKSk7CisKKyAg
ICAvLyBGbGlwIHRoZSB0YXJnZXQgc3VyZmFjZSBzbyB0aGF0IHdoZW4gd2Ugc2V0IHRoZSBzcmNJ
bWFnZSBhcworICAgIC8vIHRoZSBzdXJmYWNlIGl0IHdpbGwgZHJhdyByaWdodC1zaWRlLXVwLgor
ICAgIGNhaXJvX3NhdmUoY29udGV4dC0+Y3IpOworICAgIGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0
LT5jciwgdHgsIHR5KTsKKyAgICBjYWlyb19zY2FsZShjb250ZXh0LT5jciwgMSwgLTEpOworICAg
IGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjb250ZXh0LT5jciwgc3VyZmFjZSwgMCwgMCk7CisK
KyAgICBpZiAoY29udGV4dC0+bGF5ZXJzLnNpemUoKSkKKyAgICAgICAgY2Fpcm9fcGFpbnRfd2l0
aF9hbHBoYShjb250ZXh0LT5jciwgY29udGV4dC0+bGF5ZXJzLmxhc3QoKSk7CisgICAgZWxzZQor
ICAgICAgICBjYWlyb19wYWludChjb250ZXh0LT5jcik7CisgICAgIAorICAgIC8vIERlbGV0ZSBh
bGwgb3VyIGp1bmsuCisgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOworICAgIGNh
aXJvX3Jlc3RvcmUoY29udGV4dC0+Y3IpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVs
ZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wg
c3VwcG9ydEFscGhhQmxlbmQsIGJvb2wgbWF5Q3JlYXRlQml0bWFwKQogewogICAgIGJvb2wgY3Jl
YXRlZEJpdG1hcCA9IG1heUNyZWF0ZUJpdG1hcCAmJiAoIW1fZGF0YS0+bV9oZGMgfHwgaW5UcmFu
c3BhcmVuY3lMYXllcigpKTsKQEAgLTEwOSw0MyArMTM2LDI1IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpyZWxlYXNlV2luZG93c0NvbnQKIAogICAgIEhCSVRNQVAgYml0bWFwID0gc3RhdGljX2Nh
c3Q8SEJJVE1BUD4oR2V0Q3VycmVudE9iamVjdChoZGMsIE9CSl9CSVRNQVApKTsKIAotICAgIEJJ
VE1BUCBpbmZvOwotICAgIEdldE9iamVjdChiaXRtYXAsIHNpemVvZihpbmZvKSwgJmluZm8pOwot
ICAgIEFTU0VSVChpbmZvLmJtQml0c1BpeGVsID09IDMyKTsKKyAgICBXaW5kb3dzRElCIHdpbmRv
d3NESUIoYml0bWFwKTsKKyAgICBBU1NFUlQod2luZG93c0RJQi5iaXRzUGVyUGl4ZWwoKSA9PSAz
Mik7CiAKICAgICAvLyBJZiB0aGlzIGNvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCBhbHBoYSBibGVu
ZGluZywgdGhlbiBpdCBtYXkgaGF2ZQogICAgIC8vIGJlZW4gZHJhd24gd2l0aCBHREkgZnVuY3Rp
b25zIHdoaWNoIGFsd2F5cyBzZXQgdGhlIGFscGhhIGNoYW5uZWwKICAgICAvLyB0byB6ZXJvLiBX
ZSBuZWVkIHRvIG1hbnVhbGx5IHNldCB0aGUgYml0bWFwIHRvIGJlIGZ1bGx5IG9wYXF1ZS4KLSAg
ICB1bnNpZ25lZCBjaGFyKiBieXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+
KGluZm8uYm1CaXRzKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBieXRlcyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgY2hhcio+KHdpbmRvd3NESUIuYnVmZmVyKCkpOwogICAgIGlmICghc3VwcG9y
dEFscGhhQmxlbmQpCi0gICAgICAgIHNldFJHQkFCaXRtYXBBbHBoYShieXRlcywgaW5mby5ibUhl
aWdodCAqIGluZm8uYm1XaWR0aEJ5dGVzLCAyNTUpOworICAgICAgICBzZXRSR0JBQml0bWFwQWxw
aGEoYnl0ZXMsIHdpbmRvd3NESUIuc2l6ZSgpLmhlaWdodCgpICogd2luZG93c0RJQi5ieXRlc1Bl
clJvdygpLCAyNTUpOwogCi0gICAgLy8gTmVlZCB0byBtYWtlIGEgY2Fpcm9fc3VyZmFjZV90IG91
dCBvZiB0aGUgYml0bWFwJ3MgcGl4ZWwgYnVmZmVyIGFuZCB0aGVuIGRyYXcKLSAgICAvLyBpdCBp
bnRvIG91ciBjb250ZXh0LgotICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFUX0FSR0IzMiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5ibVdpZHRoLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmJtSGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmJtV2lkdGhCeXRlcyk7Ci0K
LSAgICAvLyBTY2FsZSB0aGUgdGFyZ2V0IHN1cmZhY2UgdG8gdGhlIG5ldyBpbWFnZSBzaXplLCBh
bmQgZmxpcCBpdAotICAgIC8vIHNvIHRoYXQgd2hlbiB3ZSBzZXQgdGhlIHNyY0ltYWdlIGFzIHRo
ZSBzdXJmYWNlIGl0IHdpbGwgZHJhdwotICAgIC8vIHJpZ2h0LXNpZGUtdXAuCi0gICAgY2Fpcm9f
c2F2ZShtX2RhdGEtPmNyKTsKLSAgICBjYWlyb190cmFuc2xhdGUobV9kYXRhLT5jciwgZHN0UmVj
dC54KCksIGRzdFJlY3QuaGVpZ2h0KCkgKyBkc3RSZWN0LnkoKSk7Ci0gICAgY2Fpcm9fc2NhbGUo
bV9kYXRhLT5jciwgMS4wLCAtMS4wKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UobV9k
YXRhLT5jciwgaW1hZ2UsIDAsIDApOworICAgIGRyYXdCaXRtYXBUb0NvbnRleHQobV9kYXRhLCB3
aW5kb3dzRElCLCBkc3RSZWN0LngoKSwgZHN0UmVjdC5oZWlnaHQoKSArIGRzdFJlY3QueSgpKTsK
IAotICAgIGlmIChtX2RhdGEtPmxheWVycy5zaXplKCkpCi0gICAgICAgIGNhaXJvX3BhaW50X3dp
dGhfYWxwaGEobV9kYXRhLT5jciwgbV9kYXRhLT5sYXllcnMubGFzdCgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhaXJvX3BhaW50KG1fZGF0YS0+Y3IpOwotICAgICAKLSAgICAvLyBEZWxldGUgYWxs
IG91ciBqdW5rLgotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShpbWFnZSk7CiAgICAgOjpEZWxl
dGVEQyhoZGMpOwogICAgIDo6RGVsZXRlT2JqZWN0KGJpdG1hcCk7Ci0gICAgY2Fpcm9fcmVzdG9y
ZShtX2RhdGEtPmNyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5kb3dzQml0
bWFwKFdpbmRvd3NCaXRtYXAqIGJpdG1hcCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAg
IGRyYXdCaXRtYXBUb0NvbnRleHQobV9kYXRhLCBiaXRtYXAtPndpbmRvd3NESUIoKSwgcG9pbnQu
eCgpLCBiaXRtYXAtPnNpemUoKS5oZWlnaHQoKSArIHBvaW50LnkoKSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzeW5jQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCogY3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAkocmV2aXNpb24gODI1ODIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsMjEgKzY1LDIwIEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0OjpzaG91bGRJbmNsdWRlQ2hpbGQKIAogR3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0
bWFwOjpXaW5kb3dzQml0bWFwKEhEQyBoZGMsIEludFNpemUgc2l6ZSkKICAgICA6IG1faGRjKDAp
Ci0gICAgLCBtX3NpemUoc2l6ZSkKIHsKLSAgICBCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBCaXRt
YXBJbmZvOjpjcmVhdGUobV9zaXplKTsKKyAgICBCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBCaXRt
YXBJbmZvOjpjcmVhdGUoc2l6ZSk7CiAKLSAgICBtX2JpdG1hcCA9IENyZWF0ZURJQlNlY3Rpb24o
MCwgJmJpdG1hcEluZm8sIERJQl9SR0JfQ09MT1JTLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4o
Jm1fYml0bWFwQnVmZmVyKSwgMCwgMCk7CisgICAgVUludDgqIHN0b3JhZ2UgPSAwOworICAgIG1f
Yml0bWFwID0gQ3JlYXRlRElCU2VjdGlvbigwLCAmYml0bWFwSW5mbywgRElCX1JHQl9DT0xPUlMs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmc3RvcmFnZSksIDAsIDApOwogICAgIGlmICghbV9i
aXRtYXApCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faGRjID0gQ3JlYXRlQ29tcGF0aWJsZURD
KGhkYyk7CiAgICAgU2VsZWN0T2JqZWN0KG1faGRjLCBtX2JpdG1hcCk7CiAKLSAgICBCSVRNQVAg
Ym1wSW5mbzsKLSAgICBHZXRPYmplY3QobV9iaXRtYXAsIHNpemVvZihibXBJbmZvKSwgJmJtcElu
Zm8pOwotICAgIG1fYnl0ZXNQZXJSb3cgPSBibXBJbmZvLmJtV2lkdGhCeXRlczsKLSAgICBtX2Jp
dG1hcEJ1ZmZlckxlbmd0aCA9IGJtcEluZm8uYm1XaWR0aEJ5dGVzICogYm1wSW5mby5ibUhlaWdo
dDsKKyAgICBtX3dpbmRvd3NESUIuaW5pdGlhbGl6ZUZyb21IQml0bWFwKG1fYml0bWFwKTsKKwor
ICAgIEFTU0VSVChzdG9yYWdlID09IG1fd2luZG93c0RJQi5idWZmZXIoKSk7CiAKICAgICBTZXRH
cmFwaGljc01vZGUobV9oZGMsIEdNX0FEVkFOQ0VEKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XaW5kb3dzRElCLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV2luZG93c0RJQi5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV2luZG93c0RJQi5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQnJlbnQgRnVsZ2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldpbmRvd3NESUIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXaW5kb3dzRElCOjpXaW5k
b3dzRElCKEhCSVRNQVAgYml0bWFwKQoreworICAgIGluaXRpYWxpemVGcm9tSEJpdG1hcChiaXRt
YXApOworfQorCit2b2lkIFdpbmRvd3NESUI6OmluaXRpYWxpemVGcm9tSEJpdG1hcChjb25zdCBI
QklUTUFQJiBiaXRtYXApCit7CisgICAgQklUTUFQIGJtcEluZm87CisgICAgR2V0T2JqZWN0KGJp
dG1hcCwgc2l6ZW9mKGJtcEluZm8pLCAmYm1wSW5mbyk7CisKKyAgICBtX2JpdG1hcEJ1ZmZlciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8VUludDgqPihibXBJbmZvLmJtQml0cyk7CisgICAgbV9iaXRtYXBC
dWZmZXJMZW5ndGggPSBibXBJbmZvLmJtV2lkdGhCeXRlcyAqIGJtcEluZm8uYm1IZWlnaHQ7Cisg
ICAgbV9zaXplID0gSW50U2l6ZShibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpOwor
ICAgIG1fYnl0ZXNQZXJSb3cgPSBibXBJbmZvLmJtV2lkdGhCeXRlczsKKyAgICBtX2JpdHNQZXJQ
aXhlbCA9IGJtcEluZm8uYm1CaXRzUGl4ZWw7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XaW5kb3dzRElCLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dpbmRv
d3NESUIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9XaW5kb3dzRElCLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQnJlbnQgRnVsZ2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXaW5kb3dz
RElCX2gKKyNkZWZpbmUgV2luZG93c0RJQl9oCisKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5j
bHVkZSA8d2luZG93cy5oPgorCisjaWYgIVBMQVRGT1JNKENHKQorLy8gVUludDggaXMgZGVmaW5l
ZCBpbiBDb3JlRm91bmRhdGlvbi9DRkJhc2UuaAordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJbnQ4
OworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2luZG93c0RJQiB7Cisg
ICAgcHVibGljOgorICAgICAgICBXaW5kb3dzRElCKCkKKyAgICAgICAgICAgIDogbV9iaXRtYXBC
dWZmZXIoMCkKKyAgICAgICAgICAgICwgbV9iaXRtYXBCdWZmZXJMZW5ndGgoMCkKKyAgICAgICAg
ICAgICwgbV9ieXRlc1BlclJvdygwKQorICAgICAgICAgICAgLCBtX2JpdHNQZXJQaXhlbCgwKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgV2luZG93c0RJQihIQklUTUFQKTsKKworICAg
ICAgICB2b2lkIGluaXRpYWxpemVGcm9tSEJpdG1hcChjb25zdCBIQklUTUFQJik7CisKKyAgICAg
ICAgVUludDgqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwQnVmZmVyOyB9CisgICAg
ICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwQnVmZmVy
TGVuZ3RoOyB9CisgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NpemU7IH0KKyAgICAgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCB7IHJldHVybiBt
X2J5dGVzUGVyUm93OyB9CisgICAgICAgIHVuc2lnbmVkIHNob3J0IGJpdHNQZXJQaXhlbCgpIGNv
bnN0IHsgcmV0dXJuIG1fYml0c1BlclBpeGVsOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBV
SW50OCogbV9iaXRtYXBCdWZmZXI7CisgICAgICAgIHVuc2lnbmVkIG1fYml0bWFwQnVmZmVyTGVu
Z3RoOworICAgICAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICAgICAgdW5zaWduZWQgbV9ieXRlc1Bl
clJvdzsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgbV9iaXRzUGVyUGl4ZWw7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBXaW5kb3dzRElCX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87769</attachid>
            <date>2011-03-31 11:06:15 -0700</date>
            <delta_ts>2011-03-31 12:09:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57409-20110331110614.patch</filename>
            <type>text/plain</type>
            <size>18064</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNTk5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDMtMzEgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtXaW5DYWlyb10gSW1wbGVtZW50IE1pc3NpbmcgZHJhd1dp
bmRvd3NCaXRtYXAgbWV0aG9kLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTc0MDkKKworICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOiBBZGQgbmV3IFdpbmRvd3NESUIgZmlsZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OldpbmRvd3NCaXRtYXA6OmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OldpbmRvd3NCaXRtYXA6OmJ1ZmZlckxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwOjpieXRlc1BlclJvdyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6OmJpdHNQZXJQaXhlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6OndpbmRvd3NESUIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRXaXRoSERDKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KTogTW9kaWZpZWQgdG8g
dXNlCisgICAgICAgIG5ldyBjb21tb24gcm91dGluZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRyYXdCaXRtYXBUb0NvbnRleHQpOiBOZXcgY29tbW9uIGRyYXdpbmcgaW1wbGVtZW50YXRpb24u
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4
dCk6IE1vZGlmaWVkIHRvIHVzZQorICAgICAgICBuZXcgY29tbW9uIHJvdXRpbmVzLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3V2luZG93c0JpdG1hcCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6OldpbmRvd3NCaXRtYXAp
OiBNb2RpZmllZAorICAgICAgICB0byB1c2UgbmV3IFdpbmRvd3NESUIgZGF0YSB0eXBlLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9XaW5kb3dzRElCLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXaW5kb3dzRElCOjpXaW5kb3dzRElCKToKKyAgICAgICAgKFdlYkNvcmU6
OldpbmRvd3NESUI6OmluaXRpYWxpemVGcm9tSEJpdG1hcCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1dpbmRvd3NESUIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaW5k
b3dzRElCOjpXaW5kb3dzRElCKToKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd3NESUI6OmJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dzRElCOjpidWZmZXJMZW5ndGgpOgorICAgICAg
ICAoV2ViQ29yZTo6V2luZG93c0RJQjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dz
RElCOjpieXRlc1BlclJvdyk6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dzRElCOjpiaXRzUGVy
UGl4ZWwpOgorCiAyMDExLTAzLTMxICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gODI1ODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjc3MDgsNiArMjc3MDgsMTQgQEAKIAkJCQkJCT4KIAkJCQkJPC9GaWxlPgogCQkJCQk8
RmlsZQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cV2luZG93
c0RJQi5jcHAiCisJCQkJCQk+CisJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFdpbmRvd3NESUIuaCIKKwkJCQkJCT4K
KwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1x3aW5cV0tDQUltYWdlUXVldWUuY3BwIgogCQkJCQkJPgogCQkJCQkJPEZpbGVD
b25maWd1cmF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gODI1ODIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
OTAsNiArOTAsNyBAQCB0eXBlZGVmIHZvaWQgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7CiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJXaW5kb3dzRElCLmgiCiB0eXBlZGVm
IHN0cnVjdCBIRENfXyogSERDOwogI2lmICFQTEFURk9STShDRykKIC8vIFVJbnQ4IGlzIGRlZmlu
ZWQgaW4gQ29yZUZvdW5kYXRpb24vQ0ZCYXNlLmgKQEAgLTQ0Myw2ICs0NDQsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0U2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyhi
b29sKTsKICAgICAgICAgYm9vbCBzaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKCkgY29uc3Q7CiAK
KwogICAgICAgICBjbGFzcyBXaW5kb3dzQml0bWFwIHsKICAgICAgICAgICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFdpbmRvd3NCaXRtYXApOwogICAgICAgICBwdWJsaWM6CkBAIC00NTAsMTggKzQ1
MiwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICB+V2luZG93c0JpdG1hcCgp
OwogCiAgICAgICAgICAgICBIREMgaGRjKCkgY29uc3QgeyByZXR1cm4gbV9oZGM7IH0KLSAgICAg
ICAgICAgIFVJbnQ4KiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2JpdG1hcEJ1ZmZlcjsgfQot
ICAgICAgICAgICAgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9iaXRt
YXBCdWZmZXJMZW5ndGg7IH0KLSAgICAgICAgICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQotICAgICAgICAgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCB7
IHJldHVybiBtX2J5dGVzUGVyUm93OyB9CisgICAgICAgICAgICBVSW50OCogYnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gbV93aW5kb3dzRElCLmJ1ZmZlcigpOyB9CisgICAgICAgICAgICB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvd3NESUIuYnVmZmVyTGVuZ3Ro
KCk7IH0KKyAgICAgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3dpbmRvd3NESUIuc2l6ZSgpOyB9CisgICAgICAgICAgICB1bnNpZ25lZCBieXRlc1BlclJvdygp
IGNvbnN0IHsgcmV0dXJuIG1fd2luZG93c0RJQi5ieXRlc1BlclJvdygpOyB9CisgICAgICAgICAg
ICB1bnNpZ25lZCBzaG9ydCBiaXRzUGVyUGl4ZWwoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvd3NE
SUIuYml0c1BlclBpeGVsKCk7IH0KKyAgICAgICAgICAgIGNvbnN0IFdpbmRvd3NESUImIHdpbmRv
d3NESUIoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvd3NESUI7IH0KIAogICAgICAgICBwcml2YXRl
OgogICAgICAgICAgICAgSERDIG1faGRjOwogICAgICAgICAgICAgSEJJVE1BUCBtX2JpdG1hcDsK
LSAgICAgICAgICAgIFVJbnQ4KiBtX2JpdG1hcEJ1ZmZlcjsKLSAgICAgICAgICAgIHVuc2lnbmVk
IG1fYml0bWFwQnVmZmVyTGVuZ3RoOwotICAgICAgICAgICAgSW50U2l6ZSBtX3NpemU7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBtX2J5dGVzUGVyUm93OworICAgICAgICAgICAgV2luZG93c0RJQiBt
X3dpbmRvd3NESUI7CiAgICAgICAgIH07CiAKICAgICAgICAgV2luZG93c0JpdG1hcCogY3JlYXRl
V2luZG93c0JpdG1hcChJbnRTaXplKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAko
cmV2aXNpb24gODI1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwyMiArNDAsMjEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIENHQ29udGV4dFJlZiBDR0NvbnRleHRXaXRo
SERDKEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiB7CiAgICAgSEJJVE1BUCBiaXRtYXAgPSBzdGF0
aWNfY2FzdDxIQklUTUFQPihHZXRDdXJyZW50T2JqZWN0KGhkYywgT0JKX0JJVE1BUCkpOwotICAg
IEJJVE1BUCBpbmZvOwogCi0gICAgR2V0T2JqZWN0KGJpdG1hcCwgc2l6ZW9mKGluZm8pLCAmaW5m
byk7CisgICAgV2luZG93c0RJQiB3aW5kb3dzRElCKGJpdG1hcCk7CiAKICAgICAvLyBGSVhNRTog
V2UgY2FuIGdldCBoZXJlIGJlY2F1c2Ugd2UgYXNrZWQgZm9yIGEgYml0bWFwIHRoYXQgaXMgdG9v
IGJpZwogICAgIC8vIHdoZW4gd2UgaGF2ZSBhIHRpbGVkIGxheWVyIGFuZCB3ZSdyZSBjb21wb3Np
dGluZy4gSW4gdGhhdCBjYXNlIAogICAgIC8vIGJtQml0c1BpeGVsIHdpbGwgYmUgMC4gVGhpcyBz
ZWVtcyB0byBiZSBiZW5pZ24sIHNvIGZvciBub3cgd2Ugd2lsbAogICAgIC8vIGV4aXQgZ3JhY2Vm
dWxseSBhbmQgbG9vayBhdCBpdCBsYXRlcjoKICAgICAvLyAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUyMDQxICAgCi0gICAgLy8gQVNTRVJUKGluZm8uYm1CaXRzUGl4
ZWwgPT0gMzIpOwotICAgIGlmIChpbmZvLmJtQml0c1BpeGVsICE9IDMyKQorICAgIC8vIEFTU0VS
VChiaXRtYXBCaXRzLmJpdHNQZXJQaXhlbCgpID09IDMyKTsKKyAgICBpZiAod2luZG93c0RJQi5i
aXRzUGVyUGl4ZWwoKSAhPSAzMikKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBDR0JpdG1hcElu
Zm8gYml0bWFwSW5mbyA9IGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwgKGhhc0FscGhhID8g
a0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCA6IGtDR0ltYWdlQWxwaGFOb25lU2tpcEZp
cnN0KTsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZShp
bmZvLmJtQml0cywgaW5mby5ibVdpZHRoLCBpbmZvLmJtSGVpZ2h0LCA4LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uYm1XaWR0aEJ5dGVzLCBk
ZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksIGJpdG1hcEluZm8pOworICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHdpbmRvd3NESUIuYnVmZmVyKCksIHdpbmRv
d3NESUIuc2l6ZSgpLndpZHRoKCksIHdpbmRvd3NESUIuc2l6ZSgpLmhlaWdodCgpLCA4LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3NESUIu
Ynl0ZXNQZXJSb3coKSwgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpLCBiaXRtYXBJbmZvKTsKIAog
ICAgIC8vIEZsaXAgY29vcmRzCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAs
IGluZm8uYm1IZWlnaHQpOwpAQCAtMTAxLDE0ICsxMDAsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnJlbGVhc2VXaW5kb3dzQ29udAogCiAgICAgSEJJVE1BUCBiaXRtYXAgPSBzdGF0aWNfY2Fz
dDxIQklUTUFQPihHZXRDdXJyZW50T2JqZWN0KGhkYywgT0JKX0JJVE1BUCkpOwogCi0gICAgLy8g
TmVlZCB0byBtYWtlIGEgQ0dJbWFnZSBvdXQgb2YgdGhlIGJpdG1hcCdzIHBpeGVsIGJ1ZmZlciBh
bmQgdGhlbiBkcmF3Ci0gICAgLy8gaXQgaW50byBvdXIgY29udGV4dC4KLSAgICBCSVRNQVAgaW5m
bzsKLSAgICBHZXRPYmplY3QoYml0bWFwLCBzaXplb2YoaW5mbyksICZpbmZvKTsKLSAgICBBU1NF
UlQoaW5mby5ibUJpdHNQaXhlbCA9PSAzMik7CisgICAgV2luZG93c0RJQiB3aW5kb3dzRElCKGJp
dG1hcCk7CiAKLSAgICBDR0NvbnRleHRSZWYgYml0bWFwQ29udGV4dCA9IENHQml0bWFwQ29udGV4
dENyZWF0ZShpbmZvLmJtQml0cywgaW5mby5ibVdpZHRoLCBpbmZvLmJtSGVpZ2h0LCA4LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8u
Ym1XaWR0aEJ5dGVzLCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRl
cjMyTGl0dGxlIHwKKyAgICBBU1NFUlQod2luZG93c0RJQi5iaXRzUGVyUGl4ZWwoKSA9PSAzMik7
CisKKyAgICBDR0NvbnRleHRSZWYgYml0bWFwQ29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0
ZSh3aW5kb3dzRElCLmJ1ZmZlcigpLCB3aW5kb3dzRElCLnNpemUoKS53aWR0aCgpLCB3aW5kb3dz
RElCLnNpemUoKS5oZWlnaHQoKSwgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dzRElCLmJ5dGVzUGVyUm93KCksIGRldmljZVJH
QkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdXBwb3J0QWxw
aGFCbGVuZCA/IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgOiBrQ0dJbWFnZUFscGhh
Tm9uZVNraXBGaXJzdCkpOwogCiAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IENHQml0bWFwQ29udGV4
dENyZWF0ZUltYWdlKGJpdG1hcENvbnRleHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fp
cm9XaW4uY3BwCShyZXZpc2lvbiA4MjU4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk2LDYgKzk2LDMzIEBAIHN0YXRpYyB2b2lkIHNldFJHQkFCaXRtYXBBbHBoYSh1bnNpZ25lZAog
ICAgICAgICBieXRlc1tpICsgM10gPSBsZXZlbDsKIH0KIAorc3RhdGljIHZvaWQgZHJhd0JpdG1h
cFRvQ29udGV4dChHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGNvbnRleHQsIGNvbnN0
IFdpbmRvd3NESUImIHdpbmRvd3NESUIsIGRvdWJsZSB0eCwgZG91YmxlIHR5KQoreworICAgIC8v
IE5lZWQgdG8gbWFrZSBhIGNhaXJvX3N1cmZhY2VfdCBvdXQgb2YgdGhlIGJpdG1hcCdzIHBpeGVs
IGJ1ZmZlciBhbmQgdGhlbiBkcmF3CisgICAgLy8gaXQgaW50byBvdXIgY29udGV4dC4KKyAgICBj
YWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3Jf
ZGF0YSh3aW5kb3dzRElCLmJ1ZmZlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2luZG93c0RJQi5zaXplKCkud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dz
RElCLnNpemUoKS5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dzRElCLmJ5dGVzUGVyUm93KCkp
OworCisgICAgLy8gRmxpcCB0aGUgdGFyZ2V0IHN1cmZhY2Ugc28gdGhhdCB3aGVuIHdlIHNldCB0
aGUgc3JjSW1hZ2UgYXMKKyAgICAvLyB0aGUgc3VyZmFjZSBpdCB3aWxsIGRyYXcgcmlnaHQtc2lk
ZS11cC4KKyAgICBjYWlyb19zYXZlKGNvbnRleHQtPmNyKTsKKyAgICBjYWlyb190cmFuc2xhdGUo
Y29udGV4dC0+Y3IsIHR4LCB0eSk7CisgICAgY2Fpcm9fc2NhbGUoY29udGV4dC0+Y3IsIDEsIC0x
KTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY29udGV4dC0+Y3IsIHN1cmZhY2UsIDAs
IDApOworCisgICAgaWYgKGNvbnRleHQtPmxheWVycy5zaXplKCkpCisgICAgICAgIGNhaXJvX3Bh
aW50X3dpdGhfYWxwaGEoY29udGV4dC0+Y3IsIGNvbnRleHQtPmxheWVycy5sYXN0KCkpOworICAg
IGVsc2UKKyAgICAgICAgY2Fpcm9fcGFpbnQoY29udGV4dC0+Y3IpOworICAgICAKKyAgICAvLyBE
ZWxldGUgYWxsIG91ciBqdW5rLgorICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsK
KyAgICBjYWlyb19yZXN0b3JlKGNvbnRleHQtPmNyKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0
LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kLCBib29sIG1heUNyZWF0ZUJpdG1hcCkKIHsKICAgICBi
b29sIGNyZWF0ZWRCaXRtYXAgPSBtYXlDcmVhdGVCaXRtYXAgJiYgKCFtX2RhdGEtPm1faGRjIHx8
IGluVHJhbnNwYXJlbmN5TGF5ZXIoKSk7CkBAIC0xMDksNDMgKzEzNiwyNSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250CiAKICAgICBIQklUTUFQIGJpdG1hcCA9IHN0
YXRpY19jYXN0PEhCSVRNQVA+KEdldEN1cnJlbnRPYmplY3QoaGRjLCBPQkpfQklUTUFQKSk7CiAK
LSAgICBCSVRNQVAgaW5mbzsKLSAgICBHZXRPYmplY3QoYml0bWFwLCBzaXplb2YoaW5mbyksICZp
bmZvKTsKLSAgICBBU1NFUlQoaW5mby5ibUJpdHNQaXhlbCA9PSAzMik7CisgICAgV2luZG93c0RJ
QiB3aW5kb3dzRElCKGJpdG1hcCk7CisgICAgQVNTRVJUKHdpbmRvd3NESUIuYml0c1BlclBpeGVs
KCkgPT0gMzIpOwogCiAgICAgLy8gSWYgdGhpcyBjb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgYWxw
aGEgYmxlbmRpbmcsIHRoZW4gaXQgbWF5IGhhdmUKICAgICAvLyBiZWVuIGRyYXduIHdpdGggR0RJ
IGZ1bmN0aW9ucyB3aGljaCBhbHdheXMgc2V0IHRoZSBhbHBoYSBjaGFubmVsCiAgICAgLy8gdG8g
emVyby4gV2UgbmVlZCB0byBtYW51YWxseSBzZXQgdGhlIGJpdG1hcCB0byBiZSBmdWxseSBvcGFx
dWUuCi0gICAgdW5zaWduZWQgY2hhciogYnl0ZXMgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IGNoYXIqPihpbmZvLmJtQml0cyk7CisgICAgdW5zaWduZWQgY2hhciogYnl0ZXMgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPih3aW5kb3dzRElCLmJ1ZmZlcigpKTsKICAgICBpZiAo
IXN1cHBvcnRBbHBoYUJsZW5kKQotICAgICAgICBzZXRSR0JBQml0bWFwQWxwaGEoYnl0ZXMsIGlu
Zm8uYm1IZWlnaHQgKiBpbmZvLmJtV2lkdGhCeXRlcywgMjU1KTsKKyAgICAgICAgc2V0UkdCQUJp
dG1hcEFscGhhKGJ5dGVzLCB3aW5kb3dzRElCLnNpemUoKS5oZWlnaHQoKSAqIHdpbmRvd3NESUIu
Ynl0ZXNQZXJSb3coKSwgMjU1KTsKIAotICAgIC8vIE5lZWQgdG8gbWFrZSBhIGNhaXJvX3N1cmZh
Y2VfdCBvdXQgb2YgdGhlIGJpdG1hcCdzIHBpeGVsIGJ1ZmZlciBhbmQgdGhlbiBkcmF3Ci0gICAg
Ly8gaXQgaW50byBvdXIgY29udGV4dC4KLSAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoYnl0ZXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uYm1XaWR0aCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5ibUhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5ibVdpZHRoQnl0
ZXMpOwotCi0gICAgLy8gU2NhbGUgdGhlIHRhcmdldCBzdXJmYWNlIHRvIHRoZSBuZXcgaW1hZ2Ug
c2l6ZSwgYW5kIGZsaXAgaXQKLSAgICAvLyBzbyB0aGF0IHdoZW4gd2Ugc2V0IHRoZSBzcmNJbWFn
ZSBhcyB0aGUgc3VyZmFjZSBpdCB3aWxsIGRyYXcKLSAgICAvLyByaWdodC1zaWRlLXVwLgotICAg
IGNhaXJvX3NhdmUobV9kYXRhLT5jcik7Ci0gICAgY2Fpcm9fdHJhbnNsYXRlKG1fZGF0YS0+Y3Is
IGRzdFJlY3QueCgpLCBkc3RSZWN0LmhlaWdodCgpICsgZHN0UmVjdC55KCkpOwotICAgIGNhaXJv
X3NjYWxlKG1fZGF0YS0+Y3IsIDEuMCwgLTEuMCk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJm
YWNlKG1fZGF0YS0+Y3IsIGltYWdlLCAwLCAwKTsKKyAgICBkcmF3Qml0bWFwVG9Db250ZXh0KG1f
ZGF0YSwgd2luZG93c0RJQiwgZHN0UmVjdC54KCksIGRzdFJlY3QuaGVpZ2h0KCkgKyBkc3RSZWN0
LnkoKSk7CiAKLSAgICBpZiAobV9kYXRhLT5sYXllcnMuc2l6ZSgpKQotICAgICAgICBjYWlyb19w
YWludF93aXRoX2FscGhhKG1fZGF0YS0+Y3IsIG1fZGF0YS0+bGF5ZXJzLmxhc3QoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBjYWlyb19wYWludChtX2RhdGEtPmNyKTsKLSAgICAgCi0gICAgLy8gRGVs
ZXRlIGFsbCBvdXIganVuay4KLSAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koaW1hZ2UpOwogICAg
IDo6RGVsZXRlREMoaGRjKTsKICAgICA6OkRlbGV0ZU9iamVjdChiaXRtYXApOwotICAgIGNhaXJv
X3Jlc3RvcmUobV9kYXRhLT5jcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3V2lu
ZG93c0JpdG1hcChXaW5kb3dzQml0bWFwKiBiaXRtYXAsIGNvbnN0IEludFBvaW50JiBwb2ludCkK
K3sKKyAgICBkcmF3Qml0bWFwVG9Db250ZXh0KG1fZGF0YSwgYml0bWFwLT53aW5kb3dzRElCKCks
IHBvaW50LngoKSwgYml0bWFwLT5zaXplKCkuaGVpZ2h0KCkgKyBwb2ludC55KCkpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c3luY0NvbnRleHQoUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQqIGNyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAJKHJldmlzaW9u
IDgyNTgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDIxICs2NSwyMCBAQCBib29sIEdy
YXBoaWNzQ29udGV4dDo6c2hvdWxkSW5jbHVkZUNoaWxkCiAKIEdyYXBoaWNzQ29udGV4dDo6V2lu
ZG93c0JpdG1hcDo6V2luZG93c0JpdG1hcChIREMgaGRjLCBJbnRTaXplIHNpemUpCiAgICAgOiBt
X2hkYygwKQotICAgICwgbV9zaXplKHNpemUpCiB7Ci0gICAgQml0bWFwSW5mbyBiaXRtYXBJbmZv
ID0gQml0bWFwSW5mbzo6Y3JlYXRlKG1fc2l6ZSk7CisgICAgQml0bWFwSW5mbyBiaXRtYXBJbmZv
ID0gQml0bWFwSW5mbzo6Y3JlYXRlKHNpemUpOwogCi0gICAgbV9iaXRtYXAgPSBDcmVhdGVESUJT
ZWN0aW9uKDAsICZiaXRtYXBJbmZvLCBESUJfUkdCX0NPTE9SUywgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KCZtX2JpdG1hcEJ1ZmZlciksIDAsIDApOworICAgIFVJbnQ4KiBzdG9yYWdlID0gMDsK
KyAgICBtX2JpdG1hcCA9IENyZWF0ZURJQlNlY3Rpb24oMCwgJmJpdG1hcEluZm8sIERJQl9SR0Jf
Q09MT1JTLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJnN0b3JhZ2UpLCAwLCAwKTsKICAgICBp
ZiAoIW1fYml0bWFwKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2hkYyA9IENyZWF0ZUNvbXBh
dGlibGVEQyhoZGMpOwogICAgIFNlbGVjdE9iamVjdChtX2hkYywgbV9iaXRtYXApOwogCi0gICAg
QklUTUFQIGJtcEluZm87Ci0gICAgR2V0T2JqZWN0KG1fYml0bWFwLCBzaXplb2YoYm1wSW5mbyks
ICZibXBJbmZvKTsKLSAgICBtX2J5dGVzUGVyUm93ID0gYm1wSW5mby5ibVdpZHRoQnl0ZXM7Ci0g
ICAgbV9iaXRtYXBCdWZmZXJMZW5ndGggPSBibXBJbmZvLmJtV2lkdGhCeXRlcyAqIGJtcEluZm8u
Ym1IZWlnaHQ7CisgICAgbV93aW5kb3dzRElCLmluaXRpYWxpemVGcm9tSEJpdG1hcChtX2JpdG1h
cCk7CisKKyAgICBBU1NFUlQoc3RvcmFnZSA9PSBtX3dpbmRvd3NESUIuYnVmZmVyKCkpOwogCiAg
ICAgU2V0R3JhcGhpY3NNb2RlKG1faGRjLCBHTV9BRFZBTkNFRCk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV2luZG93c0RJQi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dpbmRvd3NESUIuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dpbmRv
d3NESUIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEJyZW50IEZ1bGdoYW0gPGJmdWxnaGFtQHdlYmtpdC5vcmc+CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXaW5kb3dzRElCLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2luZG93c0RJ
Qjo6V2luZG93c0RJQihIQklUTUFQIGJpdG1hcCkKK3sKKyAgICBpbml0aWFsaXplRnJvbUhCaXRt
YXAoYml0bWFwKTsKK30KKwordm9pZCBXaW5kb3dzRElCOjppbml0aWFsaXplRnJvbUhCaXRtYXAo
Y29uc3QgSEJJVE1BUCYgYml0bWFwKQoreworICAgIEJJVE1BUCBibXBJbmZvOworICAgIEdldE9i
amVjdChiaXRtYXAsIHNpemVvZihibXBJbmZvKSwgJmJtcEluZm8pOworCisgICAgbV9iaXRtYXBC
dWZmZXIgPSByZWludGVycHJldF9jYXN0PFVJbnQ4Kj4oYm1wSW5mby5ibUJpdHMpOworICAgIG1f
Yml0bWFwQnVmZmVyTGVuZ3RoID0gYm1wSW5mby5ibVdpZHRoQnl0ZXMgKiBibXBJbmZvLmJtSGVp
Z2h0OworICAgIG1fc2l6ZSA9IEludFNpemUoYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVp
Z2h0KTsKKyAgICBtX2J5dGVzUGVyUm93ID0gYm1wSW5mby5ibVdpZHRoQnl0ZXM7CisgICAgbV9i
aXRzUGVyUGl4ZWwgPSBibXBJbmZvLmJtQml0c1BpeGVsOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV2luZG93
c0RJQi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9XaW5kb3dzRElCLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vV2luZG93c0RJQi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEJyZW50IEZ1bGdoYW0gPGJmdWxnaGFtQHdlYmtpdC5v
cmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V2luZG93c0RJQl9oCisjZGVmaW5lIFdpbmRvd3NESUJfaAorCisjaW5jbHVkZSAiSW50U2l6ZS5o
IgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2lmICFQTEFURk9STShDRykKKy8vIFVJbnQ4IGlz
IGRlZmluZWQgaW4gQ29yZUZvdW5kYXRpb24vQ0ZCYXNlLmgKK3R5cGVkZWYgdW5zaWduZWQgY2hh
ciBVSW50ODsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdpbmRvd3NE
SUIgeworICAgIHB1YmxpYzoKKyAgICAgICAgV2luZG93c0RJQigpCisgICAgICAgICAgICA6IG1f
Yml0bWFwQnVmZmVyKDApCisgICAgICAgICAgICAsIG1fYml0bWFwQnVmZmVyTGVuZ3RoKDApCisg
ICAgICAgICAgICAsIG1fYnl0ZXNQZXJSb3coMCkKKyAgICAgICAgICAgICwgbV9iaXRzUGVyUGl4
ZWwoMCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIFdpbmRvd3NESUIoSEJJVE1BUCk7
CisKKyAgICAgICAgdm9pZCBpbml0aWFsaXplRnJvbUhCaXRtYXAoY29uc3QgSEJJVE1BUCYpOwor
CisgICAgICAgIFVJbnQ4KiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2JpdG1hcEJ1ZmZlcjsg
fQorICAgICAgICB1bnNpZ25lZCBidWZmZXJMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2JpdG1h
cEJ1ZmZlckxlbmd0aDsgfQorICAgICAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplOyB9CisgICAgICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3QgeyBy
ZXR1cm4gbV9ieXRlc1BlclJvdzsgfQorICAgICAgICB1bnNpZ25lZCBzaG9ydCBiaXRzUGVyUGl4
ZWwoKSBjb25zdCB7IHJldHVybiBtX2JpdHNQZXJQaXhlbDsgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgVUludDgqIG1fYml0bWFwQnVmZmVyOworICAgICAgICB1bnNpZ25lZCBtX2JpdG1hcEJ1
ZmZlckxlbmd0aDsKKyAgICAgICAgSW50U2l6ZSBtX3NpemU7CisgICAgICAgIHVuc2lnbmVkIG1f
Ynl0ZXNQZXJSb3c7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IG1fYml0c1BlclBpeGVsOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2luZG93c0RJQl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87775</attachid>
            <date>2011-03-31 12:09:14 -0700</date>
            <delta_ts>2011-03-31 15:14:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57409-20110331120912.patch</filename>
            <type>text/plain</type>
            <size>18792</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNTk5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDMtMzEgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtXaW5DYWlyb10gSW1wbGVtZW50IE1pc3NpbmcgZHJhd1dp
bmRvd3NCaXRtYXAgbWV0aG9kLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTc0MDkKKworICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOiBBZGQgbmV3IFdpbmRvd3NESUIgZmlsZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OldpbmRvd3NCaXRtYXA6OmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OldpbmRvd3NCaXRtYXA6OmJ1ZmZlckxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwOjpieXRlc1BlclJvdyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6OmJpdHNQZXJQaXhlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6OndpbmRvd3NESUIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRXaXRoSERDKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KTogTW9kaWZpZWQgdG8g
dXNlCisgICAgICAgIG5ldyBjb21tb24gcm91dGluZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRyYXdCaXRtYXBUb0NvbnRleHQpOiBOZXcgY29tbW9uIGRyYXdpbmcgaW1wbGVtZW50YXRpb24u
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4
dCk6IE1vZGlmaWVkIHRvIHVzZQorICAgICAgICBuZXcgY29tbW9uIHJvdXRpbmVzLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3V2luZG93c0JpdG1hcCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6OldpbmRvd3NCaXRtYXAp
OiBNb2RpZmllZAorICAgICAgICB0byB1c2UgbmV3IFdpbmRvd3NESUIgZGF0YSB0eXBlLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9XaW5kb3dzRElCLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXaW5kb3dzRElCOjpXaW5kb3dzRElCKToKKyAgICAgICAgKFdlYkNvcmU6
OldpbmRvd3NESUI6OmluaXRpYWxpemVGcm9tSEJpdG1hcCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1dpbmRvd3NESUIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaW5k
b3dzRElCOjpXaW5kb3dzRElCKToKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd3NESUI6OmJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dzRElCOjpidWZmZXJMZW5ndGgpOgorICAgICAg
ICAoV2ViQ29yZTo6V2luZG93c0RJQjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dz
RElCOjpieXRlc1BlclJvdyk6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dzRElCOjpiaXRzUGVy
UGl4ZWwpOgorCiAyMDExLTAzLTMxICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gODI1ODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjc3MDgsNiArMjc3MDgsMTQgQEAKIAkJCQkJCT4KIAkJCQkJPC9GaWxlPgogCQkJCQk8
RmlsZQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cV2luZG93
c0RJQi5jcHAiCisJCQkJCQk+CisJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFdpbmRvd3NESUIuaCIKKwkJCQkJCT4K
KwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1x3aW5cV0tDQUltYWdlUXVldWUuY3BwIgogCQkJCQkJPgogCQkJCQkJPEZpbGVD
b25maWd1cmF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gODI1ODIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
OTAsNiArOTAsNyBAQCB0eXBlZGVmIHZvaWQgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7CiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJXaW5kb3dzRElCLmgiCiB0eXBlZGVm
IHN0cnVjdCBIRENfXyogSERDOwogI2lmICFQTEFURk9STShDRykKIC8vIFVJbnQ4IGlzIGRlZmlu
ZWQgaW4gQ29yZUZvdW5kYXRpb24vQ0ZCYXNlLmgKQEAgLTQ0Myw2ICs0NDQsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0U2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyhi
b29sKTsKICAgICAgICAgYm9vbCBzaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKCkgY29uc3Q7CiAK
KwogICAgICAgICBjbGFzcyBXaW5kb3dzQml0bWFwIHsKICAgICAgICAgICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFdpbmRvd3NCaXRtYXApOwogICAgICAgICBwdWJsaWM6CkBAIC00NTAsMTggKzQ1
MiwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICB+V2luZG93c0JpdG1hcCgp
OwogCiAgICAgICAgICAgICBIREMgaGRjKCkgY29uc3QgeyByZXR1cm4gbV9oZGM7IH0KLSAgICAg
ICAgICAgIFVJbnQ4KiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2JpdG1hcEJ1ZmZlcjsgfQot
ICAgICAgICAgICAgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9iaXRt
YXBCdWZmZXJMZW5ndGg7IH0KLSAgICAgICAgICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQotICAgICAgICAgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCB7
IHJldHVybiBtX2J5dGVzUGVyUm93OyB9CisgICAgICAgICAgICBVSW50OCogYnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gbV93aW5kb3dzRElCLmJ1ZmZlcigpOyB9CisgICAgICAgICAgICB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvd3NESUIuYnVmZmVyTGVuZ3Ro
KCk7IH0KKyAgICAgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3dpbmRvd3NESUIuc2l6ZSgpOyB9CisgICAgICAgICAgICB1bnNpZ25lZCBieXRlc1BlclJvdygp
IGNvbnN0IHsgcmV0dXJuIG1fd2luZG93c0RJQi5ieXRlc1BlclJvdygpOyB9CisgICAgICAgICAg
ICB1bnNpZ25lZCBzaG9ydCBiaXRzUGVyUGl4ZWwoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvd3NE
SUIuYml0c1BlclBpeGVsKCk7IH0KKyAgICAgICAgICAgIGNvbnN0IFdpbmRvd3NESUImIHdpbmRv
d3NESUIoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvd3NESUI7IH0KIAogICAgICAgICBwcml2YXRl
OgogICAgICAgICAgICAgSERDIG1faGRjOwogICAgICAgICAgICAgSEJJVE1BUCBtX2JpdG1hcDsK
LSAgICAgICAgICAgIFVJbnQ4KiBtX2JpdG1hcEJ1ZmZlcjsKLSAgICAgICAgICAgIHVuc2lnbmVk
IG1fYml0bWFwQnVmZmVyTGVuZ3RoOwotICAgICAgICAgICAgSW50U2l6ZSBtX3NpemU7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBtX2J5dGVzUGVyUm93OworICAgICAgICAgICAgV2luZG93c0RJQiBt
X3dpbmRvd3NESUI7CiAgICAgICAgIH07CiAKICAgICAgICAgV2luZG93c0JpdG1hcCogY3JlYXRl
V2luZG93c0JpdG1hcChJbnRTaXplKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAko
cmV2aXNpb24gODI1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwyNSArNDAsMjQg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIENHQ29udGV4dFJlZiBDR0NvbnRleHRXaXRo
SERDKEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiB7CiAgICAgSEJJVE1BUCBiaXRtYXAgPSBzdGF0
aWNfY2FzdDxIQklUTUFQPihHZXRDdXJyZW50T2JqZWN0KGhkYywgT0JKX0JJVE1BUCkpOwotICAg
IEJJVE1BUCBpbmZvOwogCi0gICAgR2V0T2JqZWN0KGJpdG1hcCwgc2l6ZW9mKGluZm8pLCAmaW5m
byk7CisgICAgV2luZG93c0RJQiB3aW5kb3dzRElCKGJpdG1hcCk7CiAKICAgICAvLyBGSVhNRTog
V2UgY2FuIGdldCBoZXJlIGJlY2F1c2Ugd2UgYXNrZWQgZm9yIGEgYml0bWFwIHRoYXQgaXMgdG9v
IGJpZwogICAgIC8vIHdoZW4gd2UgaGF2ZSBhIHRpbGVkIGxheWVyIGFuZCB3ZSdyZSBjb21wb3Np
dGluZy4gSW4gdGhhdCBjYXNlIAogICAgIC8vIGJtQml0c1BpeGVsIHdpbGwgYmUgMC4gVGhpcyBz
ZWVtcyB0byBiZSBiZW5pZ24sIHNvIGZvciBub3cgd2Ugd2lsbAogICAgIC8vIGV4aXQgZ3JhY2Vm
dWxseSBhbmQgbG9vayBhdCBpdCBsYXRlcjoKICAgICAvLyAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUyMDQxICAgCi0gICAgLy8gQVNTRVJUKGluZm8uYm1CaXRzUGl4
ZWwgPT0gMzIpOwotICAgIGlmIChpbmZvLmJtQml0c1BpeGVsICE9IDMyKQorICAgIC8vIEFTU0VS
VChiaXRtYXBCaXRzLmJpdHNQZXJQaXhlbCgpID09IDMyKTsKKyAgICBpZiAod2luZG93c0RJQi5i
aXRzUGVyUGl4ZWwoKSAhPSAzMikKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBDR0JpdG1hcElu
Zm8gYml0bWFwSW5mbyA9IGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwgKGhhc0FscGhhID8g
a0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCA6IGtDR0ltYWdlQWxwaGFOb25lU2tpcEZp
cnN0KTsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZShp
bmZvLmJtQml0cywgaW5mby5ibVdpZHRoLCBpbmZvLmJtSGVpZ2h0LCA4LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uYm1XaWR0aEJ5dGVzLCBk
ZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksIGJpdG1hcEluZm8pOworICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHdpbmRvd3NESUIuYnVmZmVyKCksIHdpbmRv
d3NESUIuc2l6ZSgpLndpZHRoKCksIHdpbmRvd3NESUIuc2l6ZSgpLmhlaWdodCgpLCA4LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3NESUIu
Ynl0ZXNQZXJSb3coKSwgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpLCBiaXRtYXBJbmZvKTsKIAog
ICAgIC8vIEZsaXAgY29vcmRzCi0gICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAs
IGluZm8uYm1IZWlnaHQpOworICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCB3
aW5kb3dzRElCLnNpemUoKS5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4
dCwgMSwgLTEpOwogICAgIAogICAgIC8vIFB1dCB0aGUgSERDIEluIGFkdmFuY2VkIG1vZGUgc28g
aXQgd2lsbCBob25vciBhZmZpbmUgdHJhbnNmb3Jtcy4KQEAgLTk5LDE2ICs5OCwxNCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250CiAgICAgaWYgKGRzdFJlY3QuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIQklUTUFQIGJpdG1hcCA9IHN0YXRpY19j
YXN0PEhCSVRNQVA+KEdldEN1cnJlbnRPYmplY3QoaGRjLCBPQkpfQklUTUFQKSk7CisgICAgT3du
UHRyPEhCSVRNQVA+IGJpdG1hcChzdGF0aWNfY2FzdDxIQklUTUFQPihHZXRDdXJyZW50T2JqZWN0
KGhkYywgT0JKX0JJVE1BUCkpKTsKKworICAgIFdpbmRvd3NESUIgd2luZG93c0RJQihiaXRtYXAu
Z2V0KCkpOwogCi0gICAgLy8gTmVlZCB0byBtYWtlIGEgQ0dJbWFnZSBvdXQgb2YgdGhlIGJpdG1h
cCdzIHBpeGVsIGJ1ZmZlciBhbmQgdGhlbiBkcmF3Ci0gICAgLy8gaXQgaW50byBvdXIgY29udGV4
dC4KLSAgICBCSVRNQVAgaW5mbzsKLSAgICBHZXRPYmplY3QoYml0bWFwLCBzaXplb2YoaW5mbyks
ICZpbmZvKTsKLSAgICBBU1NFUlQoaW5mby5ibUJpdHNQaXhlbCA9PSAzMik7CisgICAgQVNTRVJU
KHdpbmRvd3NESUIuYml0c1BlclBpeGVsKCkgPT0gMzIpOwogCi0gICAgQ0dDb250ZXh0UmVmIGJp
dG1hcENvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUoaW5mby5ibUJpdHMsIGluZm8uYm1X
aWR0aCwgaW5mby5ibUhlaWdodCwgOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmJtV2lkdGhCeXRlcywgZGV2aWNlUkdCQ29sb3JT
cGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8CisgICAgQ0dDb250ZXh0UmVm
IGJpdG1hcENvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUod2luZG93c0RJQi5idWZmZXIo
KSwgd2luZG93c0RJQi5zaXplKCkud2lkdGgoKSwgd2luZG93c0RJQi5zaXplKCkuaGVpZ2h0KCks
IDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2luZG93c0RJQi5ieXRlc1BlclJvdygpLCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksIGtD
R0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VwcG9ydEFscGhhQmxlbmQgPyBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZEZpcnN0IDoga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpKTsKIAog
ICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShiaXRtYXBD
b250ZXh0KTsKQEAgLTExOCw3ICsxMTUsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFz
ZVdpbmRvd3NDb250CiAgICAgQ0dJbWFnZVJlbGVhc2UoaW1hZ2UpOwogICAgIENHQ29udGV4dFJl
bGVhc2UoYml0bWFwQ29udGV4dCk7CiAgICAgOjpEZWxldGVEQyhoZGMpOwotICAgIDo6RGVsZXRl
T2JqZWN0KGJpdG1hcCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3V2luZG93c0Jp
dG1hcChXaW5kb3dzQml0bWFwKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJv
V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCShyZXZpc2lvbiA4MjU4MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDMzIEBAIHN0YXRpYyB2b2lkIHNldFJHQkFC
aXRtYXBBbHBoYSh1bnNpZ25lZAogICAgICAgICBieXRlc1tpICsgM10gPSBsZXZlbDsKIH0KIAor
c3RhdGljIHZvaWQgZHJhd0JpdG1hcFRvQ29udGV4dChHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUqIGNvbnRleHQsIGNvbnN0IFdpbmRvd3NESUImIHdpbmRvd3NESUIsIGRvdWJsZSB0eCwg
ZG91YmxlIHR5KQoreworICAgIC8vIE5lZWQgdG8gbWFrZSBhIGNhaXJvX3N1cmZhY2VfdCBvdXQg
b2YgdGhlIGJpdG1hcCdzIHBpeGVsIGJ1ZmZlciBhbmQgdGhlbiBkcmF3CisgICAgLy8gaXQgaW50
byBvdXIgY29udGV4dC4KKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSh3aW5kb3dzRElCLmJ1ZmZlcigpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENBSVJPX0ZPUk1BVF9BUkdCMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93c0RJQi5zaXplKCkud2lkdGgo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3aW5kb3dzRElCLnNpemUoKS5oZWlnaHQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5k
b3dzRElCLmJ5dGVzUGVyUm93KCkpOworCisgICAgLy8gRmxpcCB0aGUgdGFyZ2V0IHN1cmZhY2Ug
c28gdGhhdCB3aGVuIHdlIHNldCB0aGUgc3JjSW1hZ2UgYXMKKyAgICAvLyB0aGUgc3VyZmFjZSBp
dCB3aWxsIGRyYXcgcmlnaHQtc2lkZS11cC4KKyAgICBjYWlyb19zYXZlKGNvbnRleHQtPmNyKTsK
KyAgICBjYWlyb190cmFuc2xhdGUoY29udGV4dC0+Y3IsIHR4LCB0eSk7CisgICAgY2Fpcm9fc2Nh
bGUoY29udGV4dC0+Y3IsIDEsIC0xKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY29u
dGV4dC0+Y3IsIHN1cmZhY2UsIDAsIDApOworCisgICAgaWYgKGNvbnRleHQtPmxheWVycy5zaXpl
KCkpCisgICAgICAgIGNhaXJvX3BhaW50X3dpdGhfYWxwaGEoY29udGV4dC0+Y3IsIGNvbnRleHQt
PmxheWVycy5sYXN0KCkpOworICAgIGVsc2UKKyAgICAgICAgY2Fpcm9fcGFpbnQoY29udGV4dC0+
Y3IpOworICAgICAKKyAgICAvLyBEZWxldGUgYWxsIG91ciBqdW5rLgorICAgIGNhaXJvX3N1cmZh
Y2VfZGVzdHJveShzdXJmYWNlKTsKKyAgICBjYWlyb19yZXN0b3JlKGNvbnRleHQtPmNyKTsKK30K
Kwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBj
b25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kLCBib29sIG1heUNy
ZWF0ZUJpdG1hcCkKIHsKICAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtYXlDcmVhdGVCaXRtYXAg
JiYgKCFtX2RhdGEtPm1faGRjIHx8IGluVHJhbnNwYXJlbmN5TGF5ZXIoKSk7CkBAIC0xMDcsNDUg
KzEzNCwyNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250CiAgICAg
aWYgKGRzdFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIQklUTUFQIGJp
dG1hcCA9IHN0YXRpY19jYXN0PEhCSVRNQVA+KEdldEN1cnJlbnRPYmplY3QoaGRjLCBPQkpfQklU
TUFQKSk7CisgICAgT3duUHRyPEhCSVRNQVA+IGJpdG1hcChzdGF0aWNfY2FzdDxIQklUTUFQPihH
ZXRDdXJyZW50T2JqZWN0KGhkYywgT0JKX0JJVE1BUCkpKTsKIAotICAgIEJJVE1BUCBpbmZvOwot
ICAgIEdldE9iamVjdChiaXRtYXAsIHNpemVvZihpbmZvKSwgJmluZm8pOwotICAgIEFTU0VSVChp
bmZvLmJtQml0c1BpeGVsID09IDMyKTsKKyAgICBXaW5kb3dzRElCIHdpbmRvd3NESUIoYml0bWFw
LmdldCgpKTsKKyAgICBBU1NFUlQod2luZG93c0RJQi5iaXRzUGVyUGl4ZWwoKSA9PSAzMik7CiAK
ICAgICAvLyBJZiB0aGlzIGNvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCBhbHBoYSBibGVuZGluZywg
dGhlbiBpdCBtYXkgaGF2ZQogICAgIC8vIGJlZW4gZHJhd24gd2l0aCBHREkgZnVuY3Rpb25zIHdo
aWNoIGFsd2F5cyBzZXQgdGhlIGFscGhhIGNoYW5uZWwKICAgICAvLyB0byB6ZXJvLiBXZSBuZWVk
IHRvIG1hbnVhbGx5IHNldCB0aGUgYml0bWFwIHRvIGJlIGZ1bGx5IG9wYXF1ZS4KLSAgICB1bnNp
Z25lZCBjaGFyKiBieXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGluZm8u
Ym1CaXRzKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBieXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQgY2hhcio+KHdpbmRvd3NESUIuYnVmZmVyKCkpOwogICAgIGlmICghc3VwcG9ydEFscGhh
QmxlbmQpCi0gICAgICAgIHNldFJHQkFCaXRtYXBBbHBoYShieXRlcywgaW5mby5ibUhlaWdodCAq
IGluZm8uYm1XaWR0aEJ5dGVzLCAyNTUpOworICAgICAgICBzZXRSR0JBQml0bWFwQWxwaGEoYnl0
ZXMsIHdpbmRvd3NESUIuc2l6ZSgpLmhlaWdodCgpICogd2luZG93c0RJQi5ieXRlc1BlclJvdygp
LCAyNTUpOwogCi0gICAgLy8gTmVlZCB0byBtYWtlIGEgY2Fpcm9fc3VyZmFjZV90IG91dCBvZiB0
aGUgYml0bWFwJ3MgcGl4ZWwgYnVmZmVyIGFuZCB0aGVuIGRyYXcKLSAgICAvLyBpdCBpbnRvIG91
ciBjb250ZXh0LgotICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBjYWlyb19pbWFnZV9zdXJm
YWNlX2NyZWF0ZV9mb3JfZGF0YShieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFUX0FSR0IzMiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5ibVdpZHRoLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmJtSGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmJtV2lkdGhCeXRlcyk7Ci0KLSAgICAv
LyBTY2FsZSB0aGUgdGFyZ2V0IHN1cmZhY2UgdG8gdGhlIG5ldyBpbWFnZSBzaXplLCBhbmQgZmxp
cCBpdAotICAgIC8vIHNvIHRoYXQgd2hlbiB3ZSBzZXQgdGhlIHNyY0ltYWdlIGFzIHRoZSBzdXJm
YWNlIGl0IHdpbGwgZHJhdwotICAgIC8vIHJpZ2h0LXNpZGUtdXAuCi0gICAgY2Fpcm9fc2F2ZSht
X2RhdGEtPmNyKTsKLSAgICBjYWlyb190cmFuc2xhdGUobV9kYXRhLT5jciwgZHN0UmVjdC54KCks
IGRzdFJlY3QuaGVpZ2h0KCkgKyBkc3RSZWN0LnkoKSk7Ci0gICAgY2Fpcm9fc2NhbGUobV9kYXRh
LT5jciwgMS4wLCAtMS4wKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UobV9kYXRhLT5j
ciwgaW1hZ2UsIDAsIDApOworICAgIGRyYXdCaXRtYXBUb0NvbnRleHQobV9kYXRhLCB3aW5kb3dz
RElCLCBkc3RSZWN0LngoKSwgZHN0UmVjdC5oZWlnaHQoKSArIGRzdFJlY3QueSgpKTsKIAotICAg
IGlmIChtX2RhdGEtPmxheWVycy5zaXplKCkpCi0gICAgICAgIGNhaXJvX3BhaW50X3dpdGhfYWxw
aGEobV9kYXRhLT5jciwgbV9kYXRhLT5sYXllcnMubGFzdCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGNhaXJvX3BhaW50KG1fZGF0YS0+Y3IpOwotICAgICAKLSAgICAvLyBEZWxldGUgYWxsIG91ciBq
dW5rLgotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShpbWFnZSk7CiAgICAgOjpEZWxldGVEQyho
ZGMpOwotICAgIDo6RGVsZXRlT2JqZWN0KGJpdG1hcCk7Ci0gICAgY2Fpcm9fcmVzdG9yZShtX2Rh
dGEtPmNyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5kb3dzQml0bWFwKFdp
bmRvd3NCaXRtYXAqIGJpdG1hcCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIGRyYXdC
aXRtYXBUb0NvbnRleHQobV9kYXRhLCBiaXRtYXAtPndpbmRvd3NESUIoKSwgcG9pbnQueCgpLCBi
aXRtYXAtPnNpemUoKS5oZWlnaHQoKSArIHBvaW50LnkoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzeW5jQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCogY3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAkocmV2aXNpb24gODI1ODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjUsMjEgKzY1LDIwIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
OjpzaG91bGRJbmNsdWRlQ2hpbGQKIAogR3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwOjpX
aW5kb3dzQml0bWFwKEhEQyBoZGMsIEludFNpemUgc2l6ZSkKICAgICA6IG1faGRjKDApCi0gICAg
LCBtX3NpemUoc2l6ZSkKIHsKLSAgICBCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZv
OjpjcmVhdGUobV9zaXplKTsKKyAgICBCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZv
OjpjcmVhdGUoc2l6ZSk7CiAKLSAgICBtX2JpdG1hcCA9IENyZWF0ZURJQlNlY3Rpb24oMCwgJmJp
dG1hcEluZm8sIERJQl9SR0JfQ09MT1JTLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fYml0
bWFwQnVmZmVyKSwgMCwgMCk7CisgICAgVUludDgqIHN0b3JhZ2UgPSAwOworICAgIG1fYml0bWFw
ID0gQ3JlYXRlRElCU2VjdGlvbigwLCAmYml0bWFwSW5mbywgRElCX1JHQl9DT0xPUlMsIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmc3RvcmFnZSksIDAsIDApOwogICAgIGlmICghbV9iaXRtYXAp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1faGRjID0gQ3JlYXRlQ29tcGF0aWJsZURDKGhkYyk7
CiAgICAgU2VsZWN0T2JqZWN0KG1faGRjLCBtX2JpdG1hcCk7CiAKLSAgICBCSVRNQVAgYm1wSW5m
bzsKLSAgICBHZXRPYmplY3QobV9iaXRtYXAsIHNpemVvZihibXBJbmZvKSwgJmJtcEluZm8pOwot
ICAgIG1fYnl0ZXNQZXJSb3cgPSBibXBJbmZvLmJtV2lkdGhCeXRlczsKLSAgICBtX2JpdG1hcEJ1
ZmZlckxlbmd0aCA9IGJtcEluZm8uYm1XaWR0aEJ5dGVzICogYm1wSW5mby5ibUhlaWdodDsKKyAg
ICBtX3dpbmRvd3NESUIuaW5pdGlhbGl6ZUZyb21IQml0bWFwKG1fYml0bWFwKTsKKworICAgIEFT
U0VSVChzdG9yYWdlID09IG1fd2luZG93c0RJQi5idWZmZXIoKSk7CiAKICAgICBTZXRHcmFwaGlj
c01vZGUobV9oZGMsIEdNX0FEVkFOQ0VEKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9XaW5kb3dzRElCLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV2luZG93c0RJQi5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV2luZG93c0RJQi5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQnJl
bnQgRnVsZ2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldpbmRv
d3NESUIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXaW5kb3dzRElCOjpXaW5kb3dzRElC
KEhCSVRNQVAgYml0bWFwKQoreworICAgIGluaXRpYWxpemVGcm9tSEJpdG1hcChiaXRtYXApOwor
fQorCit2b2lkIFdpbmRvd3NESUI6OmluaXRpYWxpemVGcm9tSEJpdG1hcChjb25zdCBIQklUTUFQ
JiBiaXRtYXApCit7CisgICAgQklUTUFQIGJtcEluZm87CisgICAgR2V0T2JqZWN0KGJpdG1hcCwg
c2l6ZW9mKGJtcEluZm8pLCAmYm1wSW5mbyk7CisKKyAgICBtX2JpdG1hcEJ1ZmZlciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8VUludDgqPihibXBJbmZvLmJtQml0cyk7CisgICAgbV9iaXRtYXBCdWZmZXJM
ZW5ndGggPSBibXBJbmZvLmJtV2lkdGhCeXRlcyAqIGJtcEluZm8uYm1IZWlnaHQ7CisgICAgbV9z
aXplID0gSW50U2l6ZShibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpOworICAgIG1f
Ynl0ZXNQZXJSb3cgPSBibXBJbmZvLmJtV2lkdGhCeXRlczsKKyAgICBtX2JpdHNQZXJQaXhlbCA9
IGJtcEluZm8uYm1CaXRzUGl4ZWw7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XaW5kb3dzRElCLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dpbmRvd3NESUIu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9X
aW5kb3dzRElCLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQnJlbnQgRnVsZ2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXaW5kb3dzRElCX2gK
KyNkZWZpbmUgV2luZG93c0RJQl9oCisKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSA8
d2luZG93cy5oPgorCisjaWYgIVBMQVRGT1JNKENHKQorLy8gVUludDggaXMgZGVmaW5lZCBpbiBD
b3JlRm91bmRhdGlvbi9DRkJhc2UuaAordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJbnQ4OworI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2luZG93c0RJQiB7CisgICAgcHVi
bGljOgorICAgICAgICBXaW5kb3dzRElCKCkKKyAgICAgICAgICAgIDogbV9iaXRtYXBCdWZmZXIo
MCkKKyAgICAgICAgICAgICwgbV9iaXRtYXBCdWZmZXJMZW5ndGgoMCkKKyAgICAgICAgICAgICwg
bV9ieXRlc1BlclJvdygwKQorICAgICAgICAgICAgLCBtX2JpdHNQZXJQaXhlbCgwKQorICAgICAg
ICB7CisgICAgICAgIH0KKyAgICAgICAgV2luZG93c0RJQihIQklUTUFQKTsKKworICAgICAgICB2
b2lkIGluaXRpYWxpemVGcm9tSEJpdG1hcChjb25zdCBIQklUTUFQJik7CisKKyAgICAgICAgVUlu
dDgqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwQnVmZmVyOyB9CisgICAgICAgIHVu
c2lnbmVkIGJ1ZmZlckxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwQnVmZmVyTGVuZ3Ro
OyB9CisgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KKyAgICAgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCB7IHJldHVybiBtX2J5dGVz
UGVyUm93OyB9CisgICAgICAgIHVuc2lnbmVkIHNob3J0IGJpdHNQZXJQaXhlbCgpIGNvbnN0IHsg
cmV0dXJuIG1fYml0c1BlclBpeGVsOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBVSW50OCog
bV9iaXRtYXBCdWZmZXI7CisgICAgICAgIHVuc2lnbmVkIG1fYml0bWFwQnVmZmVyTGVuZ3RoOwor
ICAgICAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICAgICAgdW5zaWduZWQgbV9ieXRlc1BlclJvdzsK
KyAgICAgICAgdW5zaWduZWQgc2hvcnQgbV9iaXRzUGVyUGl4ZWw7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBXaW5kb3dzRElCX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87795</attachid>
            <date>2011-03-31 15:14:14 -0700</date>
            <delta_ts>2011-03-31 15:42:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57409-20110331151413.patch</filename>
            <type>text/plain</type>
            <size>18638</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNTk5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDMtMzEgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtXaW5DYWlyb10gSW1wbGVtZW50IE1pc3NpbmcgZHJhd1dp
bmRvd3NCaXRtYXAgbWV0aG9kLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTc0MDkKKworICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOiBBZGQgbmV3IERJQlBpeGVsRGF0YSBmaWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6V2luZG93c0JpdG1hcDo6YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6V2luZG93c0JpdG1hcDo6YnVmZmVyTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6V2luZG93c0JpdG1hcDo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6OmJ5dGVzUGVyUm93KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6V2luZG93c0JpdG1hcDo6Yml0c1BlclBpeGVsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6V2luZG93c0JpdG1hcDo6d2luZG93c0RJ
Qik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFdpdGhIREMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQpOiBNb2RpZmllZCB0
byB1c2UKKyAgICAgICAgbmV3IGNvbW1vbiByb3V0aW5lcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZHJhd0JpdG1hcFRvQ29udGV4dCk6IE5ldyBjb21tb24gZHJhd2luZyBpbXBsZW1lbnRhdGlv
bi4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250
ZXh0KTogTW9kaWZpZWQgdG8gdXNlCisgICAgICAgIG5ldyBjb21tb24gcm91dGluZXMuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5kb3dzQml0bWFwKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6V2luZG93c0JpdG1hcDo6V2luZG93c0JpdG1h
cCk6IE1vZGlmaWVkCisgICAgICAgIHRvIHVzZSBuZXcgRElCUGl4ZWxEYXRhIGRhdGEgdHlwZS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRElCUGl4ZWxEYXRhLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpESUJQaXhlbERhdGE6OkRJQlBpeGVsRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpESUJQaXhlbERhdGE6OmluaXRpYWxpemUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpE
SUJQaXhlbERhdGE6OkRJQlBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpESUJQaXhlbERh
dGE6OmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpESUJQaXhlbERhdGE6OmJ1ZmZlckxlbmd0
aCk6CisgICAgICAgIChXZWJDb3JlOjpESUJQaXhlbERhdGE6OnNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6RElCUGl4ZWxEYXRhOjpieXRlc1BlclJvdyk6CisgICAgICAgIChXZWJDb3JlOjpESUJQ
aXhlbERhdGE6OmJpdHNQZXJQaXhlbCk6CisKIDIwMTEtMDMtMzEgIFhhbiBMb3BleiAgPHhsb3Bl
ekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZp
c2lvbiA4MjU4MikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcwOCw2ICsyNzcwOCwxNCBAQAogCQkJCQkJPgogCQkJ
CQk8L0ZpbGU+CiAJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXHdpblxESUJQaXhlbERhdGEuY3BwIgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJ
CTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxESUJQ
aXhlbERhdGEuaCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQogCQkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cV0tDQUltYWdlUXVldWUuY3BwIgog
CQkJCQkJPgogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gODI1
ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsNyBAQCB0eXBlZGVmIHZvaWQgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQ7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJE
SUJQaXhlbERhdGEuaCIKIHR5cGVkZWYgc3RydWN0IEhEQ19fKiBIREM7CiAjaWYgIVBMQVRGT1JN
KENHKQogLy8gVUludDggaXMgZGVmaW5lZCBpbiBDb3JlRm91bmRhdGlvbi9DRkJhc2UuaApAQCAt
NDUwLDE4ICs0NTEsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgfldpbmRv
d3NCaXRtYXAoKTsKIAogICAgICAgICAgICAgSERDIGhkYygpIGNvbnN0IHsgcmV0dXJuIG1faGRj
OyB9Ci0gICAgICAgICAgICBVSW50OCogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9iaXRtYXBC
dWZmZXI7IH0KLSAgICAgICAgICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fYml0bWFwQnVmZmVyTGVuZ3RoOyB9Ci0gICAgICAgICAgICBJbnRTaXplIHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93
KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1BlclJvdzsgfQorICAgICAgICAgICAgVUludDgqIGJ1
ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxEYXRhLmJ1ZmZlcigpOyB9CisgICAgICAgICAg
ICB1bnNpZ25lZCBidWZmZXJMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3BpeGVsRGF0YS5idWZm
ZXJMZW5ndGgoKTsgfQorICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcGl4ZWxEYXRhLnNpemUoKTsgfQorICAgICAgICAgICAgdW5zaWduZWQgYnl0ZXNQ
ZXJSb3coKSBjb25zdCB7IHJldHVybiBtX3BpeGVsRGF0YS5ieXRlc1BlclJvdygpOyB9CisgICAg
ICAgICAgICB1bnNpZ25lZCBzaG9ydCBiaXRzUGVyUGl4ZWwoKSBjb25zdCB7IHJldHVybiBtX3Bp
eGVsRGF0YS5iaXRzUGVyUGl4ZWwoKTsgfQorICAgICAgICAgICAgY29uc3QgRElCUGl4ZWxEYXRh
JiB3aW5kb3dzRElCKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbERhdGE7IH0KIAogICAgICAgICBw
cml2YXRlOgogICAgICAgICAgICAgSERDIG1faGRjOwogICAgICAgICAgICAgSEJJVE1BUCBtX2Jp
dG1hcDsKLSAgICAgICAgICAgIFVJbnQ4KiBtX2JpdG1hcEJ1ZmZlcjsKLSAgICAgICAgICAgIHVu
c2lnbmVkIG1fYml0bWFwQnVmZmVyTGVuZ3RoOwotICAgICAgICAgICAgSW50U2l6ZSBtX3NpemU7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX2J5dGVzUGVyUm93OworICAgICAgICAgICAgRElCUGl4
ZWxEYXRhIG1fcGl4ZWxEYXRhOwogICAgICAgICB9OwogCiAgICAgICAgIFdpbmRvd3NCaXRtYXAq
IGNyZWF0ZVdpbmRvd3NCaXRtYXAoSW50U2l6ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRElCUGl4ZWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRElCUGl4ZWxEYXRhLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEJyZW50IEZ1bGdoYW0gPGJmdWxnaGFtQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJESUJQaXhlbERhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitESUJQaXhlbERhdGE6
OkRJQlBpeGVsRGF0YShIQklUTUFQIGJpdG1hcCkKK3sKKyAgICBpbml0aWFsaXplKGJpdG1hcCk7
Cit9CisKK3ZvaWQgRElCUGl4ZWxEYXRhOjppbml0aWFsaXplKEhCSVRNQVAgYml0bWFwKQorewor
ICAgIEJJVE1BUCBibXBJbmZvOworICAgIEdldE9iamVjdChiaXRtYXAsIHNpemVvZihibXBJbmZv
KSwgJmJtcEluZm8pOworCisgICAgbV9iaXRtYXBCdWZmZXIgPSByZWludGVycHJldF9jYXN0PFVJ
bnQ4Kj4oYm1wSW5mby5ibUJpdHMpOworICAgIG1fYml0bWFwQnVmZmVyTGVuZ3RoID0gYm1wSW5m
by5ibVdpZHRoQnl0ZXMgKiBibXBJbmZvLmJtSGVpZ2h0OworICAgIG1fc2l6ZSA9IEludFNpemUo
Ym1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KTsKKyAgICBtX2J5dGVzUGVyUm93ID0g
Ym1wSW5mby5ibVdpZHRoQnl0ZXM7CisgICAgbV9iaXRzUGVyUGl4ZWwgPSBibXBJbmZvLmJtQml0
c1BpeGVsOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRElCUGl4ZWxEYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RJQlBpeGVsRGF0YS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RJQlBpeGVsRGF0
YS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEJyZW50IEZ1bGdoYW0gPGJmdWxnaGFtQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRElCUGl4ZWxEYXRhX2gKKyNkZWZp
bmUgRElCUGl4ZWxEYXRhX2gKKworI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlIDx3aW5k
b3dzLmg+CisKKyNpZiAhUExBVEZPUk0oQ0cpCisvLyBVSW50OCBpcyBkZWZpbmVkIGluIENvcmVG
b3VuZGF0aW9uL0NGQmFzZS5oCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUludDg7CisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBESUJQaXhlbERhdGEgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgRElCUGl4ZWxEYXRhKCkKKyAgICAgICAgICAgIDogbV9iaXRtYXBCdWZmZXIo
MCkKKyAgICAgICAgICAgICwgbV9iaXRtYXBCdWZmZXJMZW5ndGgoMCkKKyAgICAgICAgICAgICwg
bV9ieXRlc1BlclJvdygwKQorICAgICAgICAgICAgLCBtX2JpdHNQZXJQaXhlbCgwKQorICAgICAg
ICB7CisgICAgICAgIH0KKyAgICAgICAgRElCUGl4ZWxEYXRhKEhCSVRNQVApOworCisgICAgICAg
IHZvaWQgaW5pdGlhbGl6ZShIQklUTUFQKTsKKworICAgICAgICBVSW50OCogYnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gbV9iaXRtYXBCdWZmZXI7IH0KKyAgICAgICAgdW5zaWduZWQgYnVmZmVyTGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9iaXRtYXBCdWZmZXJMZW5ndGg7IH0KKyAgICAgICAgY29u
c3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgICAgICB1bnNp
Z25lZCBieXRlc1BlclJvdygpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNQZXJSb3c7IH0KKyAgICAg
ICAgdW5zaWduZWQgc2hvcnQgYml0c1BlclBpeGVsKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzUGVy
UGl4ZWw7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFVJbnQ4KiBtX2JpdG1hcEJ1ZmZlcjsK
KyAgICAgICAgdW5zaWduZWQgbV9iaXRtYXBCdWZmZXJMZW5ndGg7CisgICAgICAgIEludFNpemUg
bV9zaXplOworICAgICAgICB1bnNpZ25lZCBtX2J5dGVzUGVyUm93OworICAgICAgICB1bnNpZ25l
ZCBzaG9ydCBtX2JpdHNQZXJQaXhlbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIERJQlBpeGVsRGF0YV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJ
KHJldmlzaW9uIDgyNTgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMjUgKzQwLDI0
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBDR0NvbnRleHRSZWYgQ0dDb250ZXh0V2l0
aEhEQyhIREMgaGRjLCBib29sIGhhc0FscGhhKQogewogICAgIEhCSVRNQVAgYml0bWFwID0gc3Rh
dGljX2Nhc3Q8SEJJVE1BUD4oR2V0Q3VycmVudE9iamVjdChoZGMsIE9CSl9CSVRNQVApKTsKLSAg
ICBCSVRNQVAgaW5mbzsKIAotICAgIEdldE9iamVjdChiaXRtYXAsIHNpemVvZihpbmZvKSwgJmlu
Zm8pOworICAgIERJQlBpeGVsRGF0YSBwaXhlbERhdGEoYml0bWFwKTsKIAogICAgIC8vIEZJWE1F
OiBXZSBjYW4gZ2V0IGhlcmUgYmVjYXVzZSB3ZSBhc2tlZCBmb3IgYSBiaXRtYXAgdGhhdCBpcyB0
b28gYmlnCiAgICAgLy8gd2hlbiB3ZSBoYXZlIGEgdGlsZWQgbGF5ZXIgYW5kIHdlJ3JlIGNvbXBv
c2l0aW5nLiBJbiB0aGF0IGNhc2UgCiAgICAgLy8gYm1CaXRzUGl4ZWwgd2lsbCBiZSAwLiBUaGlz
IHNlZW1zIHRvIGJlIGJlbmlnbiwgc28gZm9yIG5vdyB3ZSB3aWxsCiAgICAgLy8gZXhpdCBncmFj
ZWZ1bGx5IGFuZCBsb29rIGF0IGl0IGxhdGVyOgogICAgIC8vICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIwNDEgICAKLSAgICAvLyBBU1NFUlQoaW5mby5ibUJpdHNQ
aXhlbCA9PSAzMik7Ci0gICAgaWYgKGluZm8uYm1CaXRzUGl4ZWwgIT0gMzIpCisgICAgLy8gQVNT
RVJUKGJpdG1hcEJpdHMuYml0c1BlclBpeGVsKCkgPT0gMzIpOworICAgIGlmIChwaXhlbERhdGEu
Yml0c1BlclBpeGVsKCkgIT0gMzIpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgQ0dCaXRtYXBJ
bmZvIGJpdG1hcEluZm8gPSBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IChoYXNBbHBoYSA/
IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgOiBrQ0dJbWFnZUFscGhhTm9uZVNraXBG
aXJzdCk7Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUo
aW5mby5ibUJpdHMsIGluZm8uYm1XaWR0aCwgaW5mby5ibUhlaWdodCwgOCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmJtV2lkdGhCeXRlcywg
ZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpLCBiaXRtYXBJbmZvKTsKKyAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbERhdGEuYnVmZmVyKCksIHBpeGVs
RGF0YS5zaXplKCkud2lkdGgoKSwgcGl4ZWxEYXRhLnNpemUoKS5oZWlnaHQoKSwgOCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbERhdGEuYnl0
ZXNQZXJSb3coKSwgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpLCBiaXRtYXBJbmZvKTsKIAogICAg
IC8vIEZsaXAgY29vcmRzCi0gICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIGlu
Zm8uYm1IZWlnaHQpOworICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCBwaXhl
bERhdGEuc2l6ZSgpLmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAx
LCAtMSk7CiAgICAgCiAgICAgLy8gUHV0IHRoZSBIREMgSW4gYWR2YW5jZWQgbW9kZSBzbyBpdCB3
aWxsIGhvbm9yIGFmZmluZSB0cmFuc2Zvcm1zLgpAQCAtOTksMTYgKzk4LDE0IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnQKICAgICBpZiAoZHN0UmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhCSVRNQVAgYml0bWFwID0gc3RhdGljX2Nhc3Q8
SEJJVE1BUD4oR2V0Q3VycmVudE9iamVjdChoZGMsIE9CSl9CSVRNQVApKTsKKyAgICBPd25QdHI8
SEJJVE1BUD4gYml0bWFwID0gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8SEJJVE1BUD4oR2V0Q3VycmVu
dE9iamVjdChoZGMsIE9CSl9CSVRNQVApKSk7CisKKyAgICBESUJQaXhlbERhdGEgcGl4ZWxEYXRh
KGJpdG1hcC5nZXQoKSk7CiAKLSAgICAvLyBOZWVkIHRvIG1ha2UgYSBDR0ltYWdlIG91dCBvZiB0
aGUgYml0bWFwJ3MgcGl4ZWwgYnVmZmVyIGFuZCB0aGVuIGRyYXcKLSAgICAvLyBpdCBpbnRvIG91
ciBjb250ZXh0LgotICAgIEJJVE1BUCBpbmZvOwotICAgIEdldE9iamVjdChiaXRtYXAsIHNpemVv
ZihpbmZvKSwgJmluZm8pOwotICAgIEFTU0VSVChpbmZvLmJtQml0c1BpeGVsID09IDMyKTsKKyAg
ICBBU1NFUlQocGl4ZWxEYXRhLmJpdHNQZXJQaXhlbCgpID09IDMyKTsKIAotICAgIENHQ29udGV4
dFJlZiBiaXRtYXBDb250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGluZm8uYm1CaXRzLCBp
bmZvLmJtV2lkdGgsIGluZm8uYm1IZWlnaHQsIDgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5ibVdpZHRoQnl0ZXMsIGRldmljZVJH
QkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfAorICAgIENHQ29u
dGV4dFJlZiBiaXRtYXBDb250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHBpeGVsRGF0YS5i
dWZmZXIoKSwgcGl4ZWxEYXRhLnNpemUoKS53aWR0aCgpLCBwaXhlbERhdGEuc2l6ZSgpLmhlaWdo
dCgpLCA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBpeGVsRGF0YS5ieXRlc1BlclJvdygpLCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCks
IGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VwcG9ydEFscGhhQmxlbmQgPyBrQ0dJbWFn
ZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IDoga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpKTsK
IAogICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShiaXRt
YXBDb250ZXh0KTsKQEAgLTExOCw3ICsxMTUsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVs
ZWFzZVdpbmRvd3NDb250CiAgICAgQ0dJbWFnZVJlbGVhc2UoaW1hZ2UpOwogICAgIENHQ29udGV4
dFJlbGVhc2UoYml0bWFwQ29udGV4dCk7CiAgICAgOjpEZWxldGVEQyhoZGMpOwotICAgIDo6RGVs
ZXRlT2JqZWN0KGJpdG1hcCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3V2luZG93
c0JpdG1hcChXaW5kb3dzQml0bWFwKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENh
aXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCShyZXZpc2lvbiA4MjU4MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDMzIEBAIHN0YXRpYyB2b2lkIHNldFJH
QkFCaXRtYXBBbHBoYSh1bnNpZ25lZAogICAgICAgICBieXRlc1tpICsgM10gPSBsZXZlbDsKIH0K
IAorc3RhdGljIHZvaWQgZHJhd0JpdG1hcFRvQ29udGV4dChHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUqIGNvbnRleHQsIGNvbnN0IERJQlBpeGVsRGF0YSYgcGl4ZWxEYXRhLCBjb25zdCBJ
bnRQb2ludCYgdHJhbnNsYXRlKQoreworICAgIC8vIE5lZWQgdG8gbWFrZSBhIGNhaXJvX3N1cmZh
Y2VfdCBvdXQgb2YgdGhlIGJpdG1hcCdzIHBpeGVsIGJ1ZmZlciBhbmQgdGhlbiBkcmF3CisgICAg
Ly8gaXQgaW50byBvdXIgY29udGV4dC4KKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBj
YWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShwaXhlbERhdGEuYnVmZmVyKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ0FJUk9fRk9STUFUX0FSR0IzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbERhdGEuc2l6ZSgp
LndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGl4ZWxEYXRhLnNpemUoKS5oZWlnaHQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwaXhlbERhdGEuYnl0ZXNQZXJSb3coKSk7CisKKyAgICAvLyBGbGlwIHRoZSB0YXJnZXQgc3Vy
ZmFjZSBzbyB0aGF0IHdoZW4gd2Ugc2V0IHRoZSBzcmNJbWFnZSBhcworICAgIC8vIHRoZSBzdXJm
YWNlIGl0IHdpbGwgZHJhdyByaWdodC1zaWRlLXVwLgorICAgIGNhaXJvX3NhdmUoY29udGV4dC0+
Y3IpOworICAgIGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LT5jciwgc3RhdGljX2Nhc3Q8ZG91Ymxl
Pih0cmFuc2xhdGUueCgpKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPih0cmFuc2xhdGUueSgpKSk7Cisg
ICAgY2Fpcm9fc2NhbGUoY29udGV4dC0+Y3IsIDEsIC0xKTsKKyAgICBjYWlyb19zZXRfc291cmNl
X3N1cmZhY2UoY29udGV4dC0+Y3IsIHN1cmZhY2UsIDAsIDApOworCisgICAgaWYgKGNvbnRleHQt
PmxheWVycy5zaXplKCkpCisgICAgICAgIGNhaXJvX3BhaW50X3dpdGhfYWxwaGEoY29udGV4dC0+
Y3IsIGNvbnRleHQtPmxheWVycy5sYXN0KCkpOworICAgIGVsc2UKKyAgICAgICAgY2Fpcm9fcGFp
bnQoY29udGV4dC0+Y3IpOworICAgICAKKyAgICAvLyBEZWxldGUgYWxsIG91ciBqdW5rLgorICAg
IGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKKyAgICBjYWlyb19yZXN0b3JlKGNvbnRl
eHQtPmNyKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4
dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5k
LCBib29sIG1heUNyZWF0ZUJpdG1hcCkKIHsKICAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtYXlD
cmVhdGVCaXRtYXAgJiYgKCFtX2RhdGEtPm1faGRjIHx8IGluVHJhbnNwYXJlbmN5TGF5ZXIoKSk7
CkBAIC0xMDcsNDUgKzEzNCwyNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRv
d3NDb250CiAgICAgaWYgKGRzdFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBIQklUTUFQIGJpdG1hcCA9IHN0YXRpY19jYXN0PEhCSVRNQVA+KEdldEN1cnJlbnRPYmplY3Qo
aGRjLCBPQkpfQklUTUFQKSk7CisgICAgT3duUHRyPEhCSVRNQVA+IGJpdG1hcCA9IGFkb3B0UHRy
KHN0YXRpY19jYXN0PEhCSVRNQVA+KEdldEN1cnJlbnRPYmplY3QoaGRjLCBPQkpfQklUTUFQKSkp
OwogCi0gICAgQklUTUFQIGluZm87Ci0gICAgR2V0T2JqZWN0KGJpdG1hcCwgc2l6ZW9mKGluZm8p
LCAmaW5mbyk7Ci0gICAgQVNTRVJUKGluZm8uYm1CaXRzUGl4ZWwgPT0gMzIpOworICAgIERJQlBp
eGVsRGF0YSBwaXhlbERhdGEoYml0bWFwLmdldCgpKTsKKyAgICBBU1NFUlQocGl4ZWxEYXRhLmJp
dHNQZXJQaXhlbCgpID09IDMyKTsKIAogICAgIC8vIElmIHRoaXMgY29udGV4dCBkb2VzIG5vdCBz
dXBwb3J0IGFscGhhIGJsZW5kaW5nLCB0aGVuIGl0IG1heSBoYXZlCiAgICAgLy8gYmVlbiBkcmF3
biB3aXRoIEdESSBmdW5jdGlvbnMgd2hpY2ggYWx3YXlzIHNldCB0aGUgYWxwaGEgY2hhbm5lbAog
ICAgIC8vIHRvIHplcm8uIFdlIG5lZWQgdG8gbWFudWFsbHkgc2V0IHRoZSBiaXRtYXAgdG8gYmUg
ZnVsbHkgb3BhcXVlLgotICAgIHVuc2lnbmVkIGNoYXIqIGJ5dGVzID0gcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oaW5mby5ibUJpdHMpOworICAgIHVuc2lnbmVkIGNoYXIqIGJ5dGVz
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxEYXRhLmJ1ZmZlcigpKTsK
ICAgICBpZiAoIXN1cHBvcnRBbHBoYUJsZW5kKQotICAgICAgICBzZXRSR0JBQml0bWFwQWxwaGEo
Ynl0ZXMsIGluZm8uYm1IZWlnaHQgKiBpbmZvLmJtV2lkdGhCeXRlcywgMjU1KTsKKyAgICAgICAg
c2V0UkdCQUJpdG1hcEFscGhhKGJ5dGVzLCBwaXhlbERhdGEuc2l6ZSgpLmhlaWdodCgpICogcGl4
ZWxEYXRhLmJ5dGVzUGVyUm93KCksIDI1NSk7CiAKLSAgICAvLyBOZWVkIHRvIG1ha2UgYSBjYWly
b19zdXJmYWNlX3Qgb3V0IG9mIHRoZSBiaXRtYXAncyBwaXhlbCBidWZmZXIgYW5kIHRoZW4gZHJh
dwotICAgIC8vIGl0IGludG8gb3VyIGNvbnRleHQuCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFn
ZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGJ5dGVzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmJtV2lkdGgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uYm1IZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uYm1X
aWR0aEJ5dGVzKTsKLQotICAgIC8vIFNjYWxlIHRoZSB0YXJnZXQgc3VyZmFjZSB0byB0aGUgbmV3
IGltYWdlIHNpemUsIGFuZCBmbGlwIGl0Ci0gICAgLy8gc28gdGhhdCB3aGVuIHdlIHNldCB0aGUg
c3JjSW1hZ2UgYXMgdGhlIHN1cmZhY2UgaXQgd2lsbCBkcmF3Ci0gICAgLy8gcmlnaHQtc2lkZS11
cC4KLSAgICBjYWlyb19zYXZlKG1fZGF0YS0+Y3IpOwotICAgIGNhaXJvX3RyYW5zbGF0ZShtX2Rh
dGEtPmNyLCBkc3RSZWN0LngoKSwgZHN0UmVjdC5oZWlnaHQoKSArIGRzdFJlY3QueSgpKTsKLSAg
ICBjYWlyb19zY2FsZShtX2RhdGEtPmNyLCAxLjAsIC0xLjApOwotICAgIGNhaXJvX3NldF9zb3Vy
Y2Vfc3VyZmFjZShtX2RhdGEtPmNyLCBpbWFnZSwgMCwgMCk7CisgICAgZHJhd0JpdG1hcFRvQ29u
dGV4dChtX2RhdGEsIHBpeGVsRGF0YSwgSW50UG9pbnQoZHN0UmVjdC54KCksIGRzdFJlY3QuaGVp
Z2h0KCkgKyBkc3RSZWN0LnkoKSkpOwogCi0gICAgaWYgKG1fZGF0YS0+bGF5ZXJzLnNpemUoKSkK
LSAgICAgICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYShtX2RhdGEtPmNyLCBtX2RhdGEtPmxheWVy
cy5sYXN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgY2Fpcm9fcGFpbnQobV9kYXRhLT5jcik7Ci0g
ICAgIAotICAgIC8vIERlbGV0ZSBhbGwgb3VyIGp1bmsuCi0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0
cm95KGltYWdlKTsKICAgICA6OkRlbGV0ZURDKGhkYyk7Ci0gICAgOjpEZWxldGVPYmplY3QoYml0
bWFwKTsKLSAgICBjYWlyb19yZXN0b3JlKG1fZGF0YS0+Y3IpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1dpbmRvd3NCaXRtYXAoV2luZG93c0JpdG1hcCogYml0bWFwLCBjb25zdCBJ
bnRQb2ludCYgcG9pbnQpCit7CisgICAgZHJhd0JpdG1hcFRvQ29udGV4dChtX2RhdGEsIGJpdG1h
cC0+d2luZG93c0RJQigpLCBJbnRQb2ludChwb2ludC54KCksIGJpdG1hcC0+c2l6ZSgpLmhlaWdo
dCgpICsgcG9pbnQueSgpKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlOjpzeW5jQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY3IpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0V2luLmNwcAkocmV2aXNpb24gODI1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjUsMjEgKzY1LDIwIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0OjpzaG91bGRJbmNsdWRlQ2hp
bGQKIAogR3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwOjpXaW5kb3dzQml0bWFwKEhEQyBo
ZGMsIEludFNpemUgc2l6ZSkKICAgICA6IG1faGRjKDApCi0gICAgLCBtX3NpemUoc2l6ZSkKIHsK
LSAgICBCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUobV9zaXplKTsK
KyAgICBCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUoc2l6ZSk7CiAK
LSAgICBtX2JpdG1hcCA9IENyZWF0ZURJQlNlY3Rpb24oMCwgJmJpdG1hcEluZm8sIERJQl9SR0Jf
Q09MT1JTLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fYml0bWFwQnVmZmVyKSwgMCwgMCk7
CisgICAgVUludDgqIHN0b3JhZ2UgPSAwOworICAgIG1fYml0bWFwID0gQ3JlYXRlRElCU2VjdGlv
bigwLCAmYml0bWFwSW5mbywgRElCX1JHQl9DT0xPUlMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoq
Pigmc3RvcmFnZSksIDAsIDApOwogICAgIGlmICghbV9iaXRtYXApCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1faGRjID0gQ3JlYXRlQ29tcGF0aWJsZURDKGhkYyk7CiAgICAgU2VsZWN0T2JqZWN0
KG1faGRjLCBtX2JpdG1hcCk7CiAKLSAgICBCSVRNQVAgYm1wSW5mbzsKLSAgICBHZXRPYmplY3Qo
bV9iaXRtYXAsIHNpemVvZihibXBJbmZvKSwgJmJtcEluZm8pOwotICAgIG1fYnl0ZXNQZXJSb3cg
PSBibXBJbmZvLmJtV2lkdGhCeXRlczsKLSAgICBtX2JpdG1hcEJ1ZmZlckxlbmd0aCA9IGJtcElu
Zm8uYm1XaWR0aEJ5dGVzICogYm1wSW5mby5ibUhlaWdodDsKKyAgICBtX3BpeGVsRGF0YS5pbml0
aWFsaXplKG1fYml0bWFwKTsKKworICAgIEFTU0VSVChzdG9yYWdlID09IG1fcGl4ZWxEYXRhLmJ1
ZmZlcigpKTsKIAogICAgIFNldEdyYXBoaWNzTW9kZShtX2hkYywgR01fQURWQU5DRUQpOwogfQo=
</data>
<flag name="review"
          id="80243"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>