<?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>79876</bug_id>
          
          <creation_ts>2012-02-28 22:51:13 -0800</creation_ts>
          <short_desc>[BlackBerry] Upstream WebGL related files from platform/graphics</short_desc>
          <delta_ts>2012-03-08 08:54:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>73119</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Robin Cao">robin.webkit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>arvid2.nilsson</cc>
    
    <cc>charles.wei</cc>
    
    <cc>leo.yang</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>567399</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Cao">robin.webkit</who>
    <bug_when>2012-02-28 22:51:13 -0800</bug_when>
    <thetext>WebGL related files from platform/graphics:
    DrawingBufferBlackBerry.cpp
    GraphicsContext3DBlackBerry.cpp
    WebGLLayerWebKitThread.cpp
    WebGLLayerWebKitThread.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568636</commentid>
    <comment_count>1</comment_count>
      <attachid>129701</attachid>
    <who name="Robin Cao">robin.webkit</who>
    <bug_when>2012-03-01 07:04:32 -0800</bug_when>
    <thetext>Created attachment 129701
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570920</commentid>
    <comment_count>2</comment_count>
      <attachid>129701</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-03-05 12:00:40 -0800</bug_when>
    <thetext>Comment on attachment 129701
patch

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

Looks good, some more cleanup can be done.

&gt; Source/WebCore/platform/graphics/blackberry/DrawingBufferBlackBerry.cpp:66
&gt; +// FIXME: The last two params are ignored for the BlackBerry platform. Is this still true?

FIXME: fix comment. Last two params?

&gt; Source/WebCore/platform/graphics/blackberry/DrawingBufferBlackBerry.cpp:113
&gt; +        return false;

I&apos;d add an empty line here.

&gt; Source/WebCore/platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:36
&gt; +#include &quot;ChromeClientBlackBerry.h&quot;

Both chrome includes do not seem used? In general check all includes.

&gt; Source/WebCore/platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:70
&gt; +    m_context = BlackBerry::Platform::Graphics::createWebGLContext();

Could move into initializer list above as well.

&gt; Source/WebCore/platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:154
&gt; +    return m_texture;

All above one-liners are candidates for inlining in the header.

&gt; Source/WebCore/platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:173
&gt; +            unsigned char *destRow = tempPixels + (imageWidth * 4 * (imageHeight-y-1));

Watch spacing -&gt; (imageHeight-y-1)

&gt; Source/WebCore/platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:207
&gt; +}

Could be put in header as well.

&gt; Source/WebCore/platform/graphics/blackberry/WebGLLayerWebKitThread.cpp:32
&gt; +    , m_needsDisplay(0)

Huh?

&gt; Source/WebCore/platform/graphics/blackberry/WebGLLayerWebKitThread.cpp:58
&gt; +    // while we are drawing into it

Can be made one line, with a period at end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573544</commentid>
    <comment_count>3</comment_count>
    <who name="Robin Cao">robin.webkit</who>
    <bug_when>2012-03-07 20:31:27 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 129701 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129701&amp;action=review
&gt; 
&gt; Looks good, some more cleanup can be done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/blackberry/DrawingBufferBlackBerry.cpp:66
&gt; &gt; +// FIXME: The last two params are ignored for the BlackBerry platform. Is this still true?
&gt; 
&gt; FIXME: fix comment. Last two params?
&gt; 

This comment seems irrelevant now, removed.

&gt; &gt; Source/WebCore/platform/graphics/blackberry/DrawingBufferBlackBerry.cpp:113
&gt; &gt; +        return false;
&gt; 
&gt; I&apos;d add an empty line here.
&gt; 
Fixed.

&gt; &gt; Source/WebCore/platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:36
&gt; &gt; +#include &quot;ChromeClientBlackBerry.h&quot;
&gt; 
&gt; Both chrome includes do not seem used? In general check all includes.
&gt; 
All unnecessary includes are removed now.
 
&gt; &gt; Source/WebCore/platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:70
&gt; &gt; +    m_context = BlackBerry::Platform::Graphics::createWebGLContext();
&gt; 
&gt; Could move into initializer list above as well.
&gt; 
Fixed.

&gt; &gt; Source/WebCore/platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:154
&gt; &gt; +    return m_texture;
&gt; 
&gt; All above one-liners are candidates for inlining in the header.
&gt; 
All these functions are in cross platform header. We share the code with chromium there. We can consider inlining these functions when upstreaming the cross platform code.

&gt; &gt; Source/WebCore/platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:173
&gt; &gt; +            unsigned char *destRow = tempPixels + (imageWidth * 4 * (imageHeight-y-1));
&gt; 
&gt; Watch spacing -&gt; (imageHeight-y-1)
&gt; 
Good catch, fixed.

&gt; &gt; Source/WebCore/platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:207
&gt; &gt; +}
&gt; 
&gt; Could be put in header as well.
&gt; 
Also cross platform header, we share the code with other ports.

&gt; &gt; Source/WebCore/platform/graphics/blackberry/WebGLLayerWebKitThread.cpp:32
&gt; &gt; +    , m_needsDisplay(0)
&gt; 
&gt; Huh?
&gt; 
m_needsDisplay(0) -&gt; m_needsDisplay(false)

I guess this is what you mean?

&gt; &gt; Source/WebCore/platform/graphics/blackberry/WebGLLayerWebKitThread.cpp:58
&gt; &gt; +    // while we are drawing into it
&gt; 
&gt; Can be made one line, with a period at end.
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573649</commentid>
    <comment_count>4</comment_count>
      <attachid>130779</attachid>
    <who name="Robin Cao">robin.webkit</who>
    <bug_when>2012-03-07 23:21:16 -0800</bug_when>
    <thetext>Created attachment 130779
patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573808</commentid>
    <comment_count>5</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-03-08 07:02:00 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 129701 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129701&amp;action=review
&gt; &gt; &gt; Source/WebCore/platform/graphics/blackberry/WebGLLayerWebKitThread.cpp:32
&gt; &gt; &gt; +    , m_needsDisplay(0)
&gt; &gt; 
&gt; &gt; Huh?
&gt; &gt; 
&gt; m_needsDisplay(0) -&gt; m_needsDisplay(false)
&gt; 
&gt; I guess this is what you mean?

Exactly :) I&apos;ll review again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573810</commentid>
    <comment_count>6</comment_count>
      <attachid>130779</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-03-08 07:05:40 -0800</bug_when>
    <thetext>Comment on attachment 130779
patch v2

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573847</commentid>
    <comment_count>7</comment_count>
      <attachid>130779</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-08 08:18:09 -0800</bug_when>
    <thetext>Comment on attachment 130779
patch v2

Rejecting attachment 130779 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
Kit/chromium/third_party/yasm/source/patched-yasm --revision 124103 --non-interactive --force --accept theirs-conflict --ignore-externals&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
48&gt;At revision 124103.

________ running &apos;/usr/bin/python tools/clang/scripts/update.py --mac-only&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/11869018</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573854</commentid>
    <comment_count>8</comment_count>
      <attachid>130779</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-03-08 08:39:32 -0800</bug_when>
    <thetext>Comment on attachment 130779
patch v2

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573866</commentid>
    <comment_count>9</comment_count>
      <attachid>130779</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-08 08:53:55 -0800</bug_when>
    <thetext>Comment on attachment 130779
patch v2

Clearing flags on attachment: 130779

Committed r110171: &lt;http://trac.webkit.org/changeset/110171&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573867</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-08 08:54:00 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129701</attachid>
            <date>2012-03-01 07:04:32 -0800</date>
            <delta_ts>2012-03-07 23:21:01 -0800</delta_ts>
            <desc>patch</desc>
            <filename>bug-79876-20120301230427.patch</filename>
            <type>text/plain</type>
            <size>20635</size>
            <attacher name="Robin Cao">robin.webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmJjMWIzZmZmMjZjZTY2
ZjM1YTA0YzgyNThiZThlMzZjMWQyYWM3OS4uNTA5NjdmM2U2MGNhY2Y4OWE3ODk5YWQxMGE4YmZj
MmUxZGVmZThiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTAzLTAxICBSb2Jp
biBDYW8gIDxyb2Jpbi5jYW9AdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFtCbGFja0Jl
cnJ5XSBVcHN0cmVhbSBXZWJHTCByZWxhdGVkIGZpbGVzIGZyb20gcGxhdGZvcm0vZ3JhcGhpY3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5ODc2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5pdGlhbCB1
cHN0cmVhbSwgbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9EcmF3aW5nQnVmZmVyQmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChEcmF3aW5nQnVmZmVySW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6Z2VuZXJhdGVDb2xvclRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZl
cjo6RHJhd2luZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjp+RHJh
d2luZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9Q
bGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnJlc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0Jl
cnJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnBhaW50c0ludG9DYW52YXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMk5QT1RTdHJpY3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRUb0NhbnZhcyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9XZWJHTExheWVyV2ViS2l0
VGhyZWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMTGF5ZXJXZWJLaXRUaHJlYWQ6OldlYkdMTGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xMYXllcldlYktpdFRocmVhZDo6fldlYkdMTGF5ZXJXZWJLaXRUaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllcldlYktpdFRocmVhZDo6c2V0TmVlZHNE
aXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0
ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L1dlYkdMTGF5ZXJXZWJLaXRUaHJlYWQuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkdMTGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xMYXllcldlYktpdFRocmVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldFdlYkdMQ29udGV4dCk6CisKIDIwMTItMDItMjkgIEph
c29uIExpdSAgPGphc29uLmxpdUB0b3JjaG1vYmlsZS5jb20uY24+CiAKICAgICAgICAgW0JsYWNr
QmVycnldTWFrZSBhYm91dDpjYWNoZSBmZWF0dXJlIGF2YWlsYWJsZSBpbiByZWxlYXNlIHZlcnNp
b24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0RyYXdpbmdCdWZmZXJCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvRHJhd2luZ0J1ZmZlckJsYWNrQmVycnkuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmU2MDQ3NDgwMzYyMzA4Y2UwNmFmY2ZhZTJlNTM2YWJjODRkMjk4MjYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0RyYXdp
bmdCdWZmZXJCbGFja0JlcnJ5LmNwcApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgorCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKyNpbmNsdWRlICJMYXllcldlYktpdFRocmVhZC5oIgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RydWN0IERyYXdpbmdCdWZmZXJJbnRlcm5hbCB7CisgICAgdW5z
aWduZWQgb2Zmc2NyZWVuQ29sb3JUZXh0dXJlOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKyAgICBSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IHBsYXRmb3JtTGF5ZXI7CisjZW5k
aWYKK307CisKK3N0YXRpYyB1bnNpZ25lZCBnZW5lcmF0ZUNvbG9yVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICB1bnNpZ25lZCBv
ZmZzY3JlZW5Db2xvclRleHR1cmUgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgaWYg
KCFvZmZzY3JlZW5Db2xvclRleHR1cmUpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9mZnNjcmVlbkNv
bG9yVGV4dHVyZSk7CisgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01J
Tl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKTsKKyAgICBjb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAg
ICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFN
UF9UT19FREdFKTsKKyAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIDApOworICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FU
VEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2Zmc2NyZWVuQ29sb3JU
ZXh0dXJlLCAwKTsKKyAgICByZXR1cm4gb2Zmc2NyZWVuQ29sb3JUZXh0dXJlOworfQorCisvLyBG
SVhNRTogVGhlIGxhc3QgdHdvIHBhcmFtcyBhcmUgaWdub3JlZCBmb3IgdGhlIEJsYWNrQmVycnkg
cGxhdGZvcm0uIElzIHRoaXMgc3RpbGwgdHJ1ZT8KK0RyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCisgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9mYm8oY29u
dGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKSkKK3sKKyAgICBtX2ludGVybmFsID0gYWRvcHRQdHIo
bmV3IERyYXdpbmdCdWZmZXJJbnRlcm5hbCk7CisKKyAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgbV9pbnRlcm5h
bC0+b2Zmc2NyZWVuQ29sb3JUZXh0dXJlID0gZ2VuZXJhdGVDb2xvclRleHR1cmUoY29udGV4dCwg
c2l6ZSk7Cit9CisKK0RyYXdpbmdCdWZmZXI6On5EcmF3aW5nQnVmZmVyKCkKK3sKKyAgICBpZiAo
IW1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgbV9jb250
ZXh0LT5kZWxldGVUZXh0dXJlKG1faW50ZXJuYWwtPm9mZnNjcmVlbkNvbG9yVGV4dHVyZSk7CisK
KyAgICBjbGVhcigpOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9p
ZCBEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0Zm9ybUxheWVyKCkKK3sKKyAgICBpZiAoIW1f
Y29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2FsbGJhY2spCisgICAgICAg
IG1fY2FsbGJhY2stPndpbGxQdWJsaXNoKCk7CisgICAgLy8gRklYTUU6IFdlIGRvIHRoZSBjb3B5
IGluIHRoZSBjYW52YXMnIChjaGlsZCkgY29udGV4dCBzbyB0aGF0IGl0IGV4ZWN1dGVzIGluIHRo
ZSBjb3JyZWN0IG9yZGVyIHJlbGF0aXZlIHRvCisgICAgLy8gb3RoZXIgY29tbWFuZHMgaW4gdGhl
IGNoaWxkIGNvbnRleHQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBwYXJlbnQgdGV4dHVyZSBhbHdh
eXMgY29udGFpbnMgYSBjb21wbGV0ZQorICAgIC8vIGZyYW1lIGFuZCBub3Qgc29tZSBpbnRlcm1l
ZGlhdGUgcmVzdWx0LiBIb3dldmVyLCB0aGVyZSBpcyBubyBzeW5jaHJvbml6YXRpb24gdG8gZW5z
dXJlIHRoYXQgdGhpcyBjb3B5CisgICAgLy8gaGFwcGVucyBiZWZvcmUgdGhlIGNvbXBvc2l0b3Ig
ZHJhd3MuIFRoaXMgbWVhbnMgd2UgbWlnaHQgZHJhdyBzdGFsZSBmcmFtZXMgc29tZXRpbWVzLiBJ
ZGVhbGx5IHRoaXMKKyAgICAvLyB3b3VsZCBpbnNlcnQgYSBmZW5jZSBpbnRvIHRoZSBjaGlsZCBj
b21tYW5kIHN0cmVhbSB0aGF0IHRoZSBjb21wb3NpdG9yIGNvdWxkIHdhaXQgZm9yLgorICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9jb250ZXh0LT5mbHVzaCgpOwor
fQorI2VuZGlmCisKK2Jvb2wgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYgbmV3
U2l6ZSkKK3sKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKG1fc2l6ZSA9PSBuZXdTaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9z
aXplID0gbmV3U2l6ZTsKKworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIG1faW50ZXJuYWwtPm9mZnNjcmVlbkNvbG9yVGV4dHVyZSk7Cisg
ICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQo
KSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCAwKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorUGxhdGZvcm1MYXllciogRHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1MYXll
cigpCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPnBsYXRmb3JtTGF5ZXIuZ2V0KCk7Cit9Cisj
ZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVy
cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFw
aGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxMjI0ZDQ4M2M1OWI0YTc3
ODE3ODRmZTJhNzNkZjFiZjhjNmNmNGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJy
eS5jcHAKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAy
MDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1
ZGUgIkJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmgiCisjaW5jbHVkZSAiQ2hyb21lLmgiCisj
aW5jbHVkZSAiQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMz
RE9wZW5HTC5oIgorI2luY2x1ZGUgIldlYkdMTGF5ZXJXZWJLaXRUaHJlYWQuaCIKKworI2luY2x1
ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzLmg+CisjaW5jbHVkZSA8QmxhY2tCZXJyeVBs
YXRmb3JtV2luZG93Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShBdHRyaWJ1dGVzIGF0dHJp
YnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIFJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQorewor
ICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCByZW5k
ZXJpbmcgZGlyZWN0bHkgdG8gYSB3aW5kb3cuCisgICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRl
ckRpcmVjdGx5VG9Ib3N0V2luZG93KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cmlicywgaG9zdFdpbmRvdywgZmFsc2Up
KTsKK30KKworR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sIHJl
bmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQorICAgIDogbV9jdXJyZW50V2lkdGgoMCkKKyAgICAs
IG1fY3VycmVudEhlaWdodCgwKQorICAgICwgbV9ob3N0V2luZG93KGhvc3RXaW5kb3cpCisgICAg
LCBtX2V4dGVuc2lvbnMoYWRvcHRQdHIobmV3IEV4dGVuc2lvbnMzRE9wZW5HTCh0aGlzKSkpCisg
ICAgLCBtX2F0dHJzKGF0dHJzKQorICAgICwgbV90ZXh0dXJlKDApCisgICAgLCBtX2ZibygwKQor
ICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fYm91bmRGQk8oMCkKKyAgICAs
IG1fYWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkKKyAgICAsIG1fYm91bmRUZXh0dXJlMCgwKQor
ICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQorICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNp
bEJ1ZmZlcigwKQorICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCit7CisgICAgbV9j
b250ZXh0ID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpjcmVhdGVXZWJHTENvbnRl
eHQoKTsKKworICAgIGlmICghcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpIHsKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgIG1fY29tcG9zaXRpbmdMYXllciA9IFdl
YkdMTGF5ZXJXZWJLaXRUaHJlYWQ6OmNyZWF0ZSgpOworI2VuZGlmCisgICAgICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworCisgICAgICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4
dGVuc2lvbnMoKTsKKyAgICAgICAgaWYgKCFleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfSU1HX211
bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpKQorICAgICAgICAgICAgbV9hdHRycy5hbnRp
YWxpYXMgPSBmYWxzZTsKKworICAgICAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBp
bnRvLgorICAgICAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgICAgICA6OmdsVGV4
UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVB
Uik7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
TUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgICAgICA6
OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xB
TVBfVE9fRURHRSk7CisgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsK
KworICAgICAgICAvLyBDcmVhdGUgYW4gRkJPLgorICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJz
KDEsICZtX2Zibyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIs
IG1fZmJvKTsKKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQor
ICAgICAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVy
KTsKKyAgICAgICAgbV9ib3VuZEZCTyA9IG1fZmJvOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorICAgICAgICBzdGF0aWNfY2FzdDxXZWJHTExheWVyV2ViS2l0VGhyZWFkKj4o
bV9jb21wb3NpdGluZ0xheWVyLmdldCgpKS0+c2V0V2ViR0xDb250ZXh0KHRoaXMpOworI2VuZGlm
CisgICAgfQorCisgICAgLy8gRklYTUU6IElmIEdyYXBoaWNzQ29udGV4dDNEIGlzIGNyZWF0ZWQg
d2l0aCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyA9PSB0cnVlLAorICAgIC8vIG1ha2VDb250
ZXh0Q3VycmVudCgpIHdpbGwgbWFrZSB0aGUgc2hhcmVkIGNvbnRleHQgY3VycmVudC4KKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGVuYWJs
ZSBHTF9WRVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFIHdpdGggR0wgRVMyPyBTZWUgUFIgIzEyMDE0
MS4KKworICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOworfQorCitHcmFwaGljc0NvbnRl
eHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKK3sKKyAgICBpZiAobV90ZXh0dXJlKSB7CisgICAg
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwg
Jm1fdGV4dHVyZSk7CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0
aCkKKyAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNp
bEJ1ZmZlcik7CisgICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKKyAg
ICB9CisKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmRlc3Ryb3lXZWJHTENv
bnRleHQobV9jb250ZXh0KTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRzSW50
b0NhbnZhc0J1ZmZlcigpIGNvbnN0Cit7CisgICAgLy8gU2VlIFBSICMxMjAxNDEuCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVu
dCgpCit7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjp1c2VXZWJHTENvbnRl
eHQobV9jb250ZXh0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJOUE9UU3RyaWN0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNFcnJvckdlbmVy
YXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUo
KSBjb25zdAoreworICAgIHJldHVybiBtX3RleHR1cmU7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCitQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZv
cm1MYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29tcG9zaXRpbmdMYXllci5nZXQoKTsK
K30KKyNlbmRpZgorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0
IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQgaW1hZ2VXaWR0aCwgaW50IGltYWdlSGVp
Z2h0LCBpbnQgY2FudmFzV2lkdGgsIGludCBjYW52YXNIZWlnaHQsCisgICAgICAgR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBib29sIGZsaXBZKQoreworICAgIC8vIFJlb3JkZXIgcGl4ZWxzIGlu
dG8gQkdSQSBmb3JtYXQuCisgICAgdW5zaWduZWQgY2hhciogdGVtcFBpeGVscyA9IG5ldyB1bnNp
Z25lZCBjaGFyW2ltYWdlV2lkdGggKiBpbWFnZUhlaWdodCAqIDRdOworCisgICAgaWYgKGZsaXBZ
KSB7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2VIZWlnaHQ7IHkrKykgeworICAg
ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjUm93ID0gaW1hZ2VQaXhlbHMgKyAoaW1h
Z2VXaWR0aCAqIDQgKiB5KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3RSb3cgPSB0
ZW1wUGl4ZWxzICsgKGltYWdlV2lkdGggKiA0ICogKGltYWdlSGVpZ2h0LXktMSkpOworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbWFnZVdpZHRoICogNDsgaSArPSA0KSB7CisgICAg
ICAgICAgICAgICAgZGVzdFJvd1tpICsgMF0gPSBzcmNSb3dbaSArIDJdOworICAgICAgICAgICAg
ICAgIGRlc3RSb3dbaSArIDFdID0gc3JjUm93W2kgKyAxXTsKKyAgICAgICAgICAgICAgICBkZXN0
Um93W2kgKyAyXSA9IHNyY1Jvd1tpICsgMF07CisgICAgICAgICAgICAgICAgZGVzdFJvd1tpICsg
M10gPSBzcmNSb3dbaSArIDNdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbWFnZVdpZHRoICogaW1hZ2VIZWlnaHQg
KiA0OyBpICs9IDQpIHsKKyAgICAgICAgICAgIHRlbXBQaXhlbHNbaSArIDBdID0gaW1hZ2VQaXhl
bHNbaSArIDJdOworICAgICAgICAgICAgdGVtcFBpeGVsc1tpICsgMV0gPSBpbWFnZVBpeGVsc1tp
ICsgMV07CisgICAgICAgICAgICB0ZW1wUGl4ZWxzW2kgKyAyXSA9IGltYWdlUGl4ZWxzW2kgKyAw
XTsKKyAgICAgICAgICAgIHRlbXBQaXhlbHNbaSArIDNdID0gaW1hZ2VQaXhlbHNbaSArIDNdOwor
ICAgICAgICB9CisgICAgfQorCisgICAgU2tCaXRtYXAgY2FudmFzQml0bWFwOworCisgICAgY2Fu
dmFzQml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIGNhbnZhc1dp
ZHRoLCBjYW52YXNIZWlnaHQpOworICAgIGNhbnZhc0JpdG1hcC5hbGxvY1BpeGVscygwLCAwKTsK
KyAgICBib29sIHJjID0gY2FudmFzQml0bWFwLmNvcHlQaXhlbHNGcm9tKHN0YXRpY19jYXN0PHZv
aWQqPihjb25zdF9jYXN0PHVuc2lnbmVkIGNoYXIqPih0ZW1wUGl4ZWxzKSksIGltYWdlV2lkdGgg
KiBpbWFnZUhlaWdodCAqIDQpOworICAgIGRlbGV0ZSBbXSB0ZW1wUGl4ZWxzOworCisgICAgRmxv
YXRSZWN0IHNyYygwLCAwLCBjYW52YXNXaWR0aCwgY2FudmFzSGVpZ2h0KTsKKyAgICBGbG9hdFJl
Y3QgZHN0KDAsIDAsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTsKKworICAgIFJlZlB0cjxCaXRt
YXBJbWFnZVNpbmdsZUZyYW1lU2tpYT4gYml0bWFwSW1hZ2UgPSBCaXRtYXBJbWFnZVNpbmdsZUZy
YW1lU2tpYTo6Y3JlYXRlKGNhbnZhc0JpdG1hcCwgZmFsc2UpOworICAgIGlmIChyYykKKyAgICAg
ICAgY29udGV4dC0+ZHJhd0ltYWdlKGJpdG1hcEltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBkc3QsIHNyYywgQ29tcG9zaXRlQ29weSwgZmFsc2UpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKFBhc3NPd25QdHI8Q29udGV4dExvc3RD
YWxsYmFjaz4pCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9XZWJHTExheWVyV2ViS2l0VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvV2ViR0xMYXllcldlYktpdFRocmVhZC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2JkM2I3OTQzYWRiNWY3MmVjMDdjNzc3YTU5MTA3YTg0MzE4YjZlYwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvV2ViR0xMYXllcldlYktpdFRocmVhZC5jcHAKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViR0xMYXllcldlYktpdFRocmVhZC5oIgorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitXZWJHTExheWVyV2ViS2l0VGhyZWFkOjpXZWJHTExheWVyV2ViS2l0VGhyZWFkKCkK
KyAgICA6IExheWVyV2ViS2l0VGhyZWFkKFdlYkdMTGF5ZXIsIDApCisgICAgLCBtX3dlYkdMQ29u
dGV4dCgwKQorICAgICwgbV9uZWVkc0Rpc3BsYXkoMCkKK3sKKyAgICBzZXRMYXllclByb2dyYW1T
aGFkZXIoTGF5ZXJQcm9ncmFtU2hhZGVyUkdCQSk7Cit9CisKK1dlYkdMTGF5ZXJXZWJLaXRUaHJl
YWQ6On5XZWJHTExheWVyV2ViS2l0VGhyZWFkKCkKK3sKKyAgICBpZiAobV9mcm9udEJ1ZmZlckxv
Y2spCisgICAgICAgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveShtX2Zyb250QnVmZmVyTG9jayk7Cit9
CisKK3ZvaWQgV2ViR0xMYXllcldlYktpdFRocmVhZDo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAg
ICBtX25lZWRzRGlzcGxheSA9IHRydWU7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwordm9p
ZCBXZWJHTExheWVyV2ViS2l0VGhyZWFkOjp1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZCgp
Cit7CisgICAgLy8gRklYTUU6IERvZXMgV2ViR0xMYXllciBhbHdheXMgbmVlZCBkaXNwbGF5PyBP
ciBjYW4gd2UganVzdCByZXR1cm4gaW1tZWRpYXRlbHkgaWYgKCFtX25lZWRzRGlzcGxheSk/Cisg
ICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKKworICAgIGlmICghbV9mcm9udEJ1ZmZlckxvY2sp
CisgICAgICAgIGNyZWF0ZUZyb250QnVmZmVyTG9jaygpOworCisgICAgLy8gTG9jayBjb3BpZWQg
R0wgdGV4dHVyZSBzbyB0aGF0IHRoZSBVSSB0aHJlYWQgd29uJ3QgYWNjZXNzIGl0CisgICAgLy8g
d2hpbGUgd2UgYXJlIGRyYXdpbmcgaW50byBpdAorICAgIHB0aHJlYWRfbXV0ZXhfbG9jayhtX2Zy
b250QnVmZmVyTG9jayk7CisgICAgbV93ZWJHTENvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7Cisg
ICAgcHRocmVhZF9tdXRleF91bmxvY2sobV9mcm9udEJ1ZmZlckxvY2spOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
ICYmIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvV2ViR0xMYXllcldlYktpdFRocmVhZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9XZWJHTExheWVyV2ViS2l0VGhyZWFkLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNmJjYjQ4NjU4ODY3YmQyMGNhZGM3ZjNhZWFlYzc2YWYwMGQxNDYwOQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvV2ViR0xMYXllcldlYktpdFRocmVhZC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBXZWJHTExh
eWVyV2ViS2l0VGhyZWFkX2gKKyNkZWZpbmUgV2ViR0xMYXllcldlYktpdFRocmVhZF9oCisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVOQUJMRShXRUJHTCkKKworI2luY2x1
ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
R3JhcGhpY3NDb250ZXh0M0Q7CisKK2NsYXNzIFdlYkdMTGF5ZXJXZWJLaXRUaHJlYWQgOiBwdWJs
aWMgTGF5ZXJXZWJLaXRUaHJlYWQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YkdMTGF5ZXJXZWJLaXRUaHJlYWQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFdlYkdMTGF5ZXJXZWJLaXRUaHJlYWQoKSk7CisgICAgfQorCisgICAgdmlydHVh
bCB+V2ViR0xMYXllcldlYktpdFRocmVhZCgpOworCisgICAgdm9pZCBzZXRXZWJHTENvbnRleHQo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpIHsgbV93ZWJHTENvbnRleHQgPSBjb250ZXh0OyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CisKK3Byb3RlY3RlZDoKKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoKTsKKworcHJpdmF0
ZToKKyAgICBXZWJHTExheWVyV2ViS2l0VGhyZWFkKCk7CisKKyAgICBHcmFwaGljc0NvbnRleHQz
RCogbV93ZWJHTENvbnRleHQ7CisgICAgYm9vbCBtX25lZWRzRGlzcGxheTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykgJiYgRU5BQkxFKFdFQkdMKQorCisjZW5kaWYgLy8gV2ViR0xMYXllcldlYktpdFRocmVhZF9o
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130779</attachid>
            <date>2012-03-07 23:21:16 -0800</date>
            <delta_ts>2012-03-08 08:53:55 -0800</delta_ts>
            <desc>patch v2</desc>
            <filename>bug-79876-20120308152117.patch</filename>
            <type>text/plain</type>
            <size>20482</size>
            <attacher name="Robin Cao">robin.webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2IwYjAwOTYxMjJjMTY3
OThjMTAwYzg5OTZiNTI0MDNmZjVhYjFhMC4uZDA2MTlhYjJmZWQ4NDNiNTFkZWExYWI3MTMxOWNm
MzY1MDU4NDA1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTAzLTA3ICBSb2Jp
biBDYW8gIDxyb2Jpbi5jYW9AdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFtCbGFja0Jl
cnJ5XSBVcHN0cmVhbSBXZWJHTCByZWxhdGVkIGZpbGVzIGZyb20gcGxhdGZvcm0vZ3JhcGhpY3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5ODc2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5pdGlhbCB1
cHN0cmVhbSwgbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9EcmF3aW5nQnVmZmVyQmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChEcmF3aW5nQnVmZmVySW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6Z2VuZXJhdGVDb2xvclRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZl
cjo6RHJhd2luZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjp+RHJh
d2luZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9Q
bGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnJlc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0Jl
cnJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnBhaW50c0ludG9DYW52YXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMk5QT1RTdHJpY3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRUb0NhbnZhcyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9XZWJHTExheWVyV2ViS2l0
VGhyZWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMTGF5ZXJXZWJLaXRUaHJlYWQ6OldlYkdMTGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xMYXllcldlYktpdFRocmVhZDo6fldlYkdMTGF5ZXJXZWJLaXRUaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllcldlYktpdFRocmVhZDo6c2V0TmVlZHNE
aXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0
ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L1dlYkdMTGF5ZXJXZWJLaXRUaHJlYWQuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkdMTGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xMYXllcldlYktpdFRocmVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldFdlYkdMQ29udGV4dCk6CisKIDIwMTItMDMtMDcgIEFt
aSBGaXNjaG1hbiAgPGZpc2NobWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1d
IEFsbG93IENDTGF5ZXJUcmVlSG9zdDo6Y29udGV4dCgpIHRvIGJlIGNhbGxlZCBldmVuIHdpdGgg
dGhlIHRocmVhZGVkIGNvbXBvc2l0b3IgZW5hYmxlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRHJhd2luZ0J1ZmZlckJsYWNrQmVycnku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9EcmF3aW5n
QnVmZmVyQmxhY2tCZXJyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzUzMTA4YzAwYTExZDc2MGM1MTIyNmVl
OWQ3NWQ4ZTJlNTdiYWIyZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRHJhd2luZ0J1ZmZlckJsYWNrQmVycnkuY3BwCkBAIC0w
LDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgIkxheWVyV2Vi
S2l0VGhyZWFkLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgRHJh
d2luZ0J1ZmZlckludGVybmFsIHsKKyAgICB1bnNpZ25lZCBvZmZzY3JlZW5Db2xvclRleHR1cmU7
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIFJlZlB0cjxMYXllcldlYktp
dFRocmVhZD4gcGxhdGZvcm1MYXllcjsKKyNlbmRpZgorfTsKKworc3RhdGljIHVuc2lnbmVkIGdl
bmVyYXRlQ29sb3JUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRT
aXplJiBzaXplKQoreworICAgIHVuc2lnbmVkIG9mZnNjcmVlbkNvbG9yVGV4dHVyZSA9IGNvbnRl
eHQtPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBpZiAoIW9mZnNjcmVlbkNvbG9yVGV4dHVyZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgb2Zmc2NyZWVuQ29sb3JUZXh0dXJlKTsKKyAgICBjb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVCk7Cisg
ICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
Ok5FQVJFU1QpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3ND
b250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dS
QVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQtPnRl
eEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7CisgICAgY29u
dGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBvZmZzY3JlZW5Db2xvclRleHR1cmUsIDApOworICAgIHJldHVybiBvZmZz
Y3JlZW5Db2xvclRleHR1cmU7Cit9CisKK0RyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCisgICAgOiBtX2Nv
bnRleHQoY29udGV4dCkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9mYm8oY29udGV4dC0+
Y3JlYXRlRnJhbWVidWZmZXIoKSkKK3sKKyAgICBtX2ludGVybmFsID0gYWRvcHRQdHIobmV3IERy
YXdpbmdCdWZmZXJJbnRlcm5hbCk7CisKKyAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgbV9pbnRlcm5hbC0+b2Zm
c2NyZWVuQ29sb3JUZXh0dXJlID0gZ2VuZXJhdGVDb2xvclRleHR1cmUoY29udGV4dCwgc2l6ZSk7
Cit9CisKK0RyYXdpbmdCdWZmZXI6On5EcmF3aW5nQnVmZmVyKCkKK3sKKyAgICBpZiAoIW1fY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgbV9jb250ZXh0LT5k
ZWxldGVUZXh0dXJlKG1faW50ZXJuYWwtPm9mZnNjcmVlbkNvbG9yVGV4dHVyZSk7CisKKyAgICBj
bGVhcigpOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBEcmF3
aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0Zm9ybUxheWVyKCkKK3sKKyAgICBpZiAoIW1fY29udGV4
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2FsbGJhY2spCisgICAgICAgIG1fY2Fs
bGJhY2stPndpbGxQdWJsaXNoKCk7CisKKyAgICAvLyBGSVhNRTogV2UgZG8gdGhlIGNvcHkgaW4g
dGhlIGNhbnZhcycgKGNoaWxkKSBjb250ZXh0IHNvIHRoYXQgaXQgZXhlY3V0ZXMgaW4gdGhlIGNv
cnJlY3Qgb3JkZXIgcmVsYXRpdmUgdG8KKyAgICAvLyBvdGhlciBjb21tYW5kcyBpbiB0aGUgY2hp
bGQgY29udGV4dC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHBhcmVudCB0ZXh0dXJlIGFsd2F5cyBj
b250YWlucyBhIGNvbXBsZXRlCisgICAgLy8gZnJhbWUgYW5kIG5vdCBzb21lIGludGVybWVkaWF0
ZSByZXN1bHQuIEhvd2V2ZXIsIHRoZXJlIGlzIG5vIHN5bmNocm9uaXphdGlvbiB0byBlbnN1cmUg
dGhhdCB0aGlzIGNvcHkKKyAgICAvLyBoYXBwZW5zIGJlZm9yZSB0aGUgY29tcG9zaXRvciBkcmF3
cy4gVGhpcyBtZWFucyB3ZSBtaWdodCBkcmF3IHN0YWxlIGZyYW1lcyBzb21ldGltZXMuIElkZWFs
bHkgdGhpcworICAgIC8vIHdvdWxkIGluc2VydCBhIGZlbmNlIGludG8gdGhlIGNoaWxkIGNvbW1h
bmQgc3RyZWFtIHRoYXQgdGhlIGNvbXBvc2l0b3IgY291bGQgd2FpdCBmb3IuCisgICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2NvbnRleHQtPmZsdXNoKCk7Cit9Cisj
ZW5kaWYKKworYm9vbCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXplJiBuZXdTaXpl
KQoreworICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAobV9zaXplID09IG5ld1NpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fc2l6
ZSA9IG5ld1NpemU7CisKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBtX2ludGVybmFsLT5vZmZzY3JlZW5Db2xvclRleHR1cmUpOworICAg
IG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCks
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSwgMCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKK1BsYXRmb3JtTGF5ZXIqIERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5ZXIo
KQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5wbGF0Zm9ybUxheWVyLmdldCgpOworfQorI2Vu
ZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhp
Y3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NmE1ODVlMDRlNDlhMzRiODhl
OGYzNDc0Y2EwMWFkNjFmZTE3ZWZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnku
Y3BwCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAx
MiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNr
aWEuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTExheWVyV2ViS2l0VGhyZWFkLmgiCisKKyNpbmNs
dWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1Bhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVh
dGUoQXR0cmlidXRlcyBhdHRyaWJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBSZW5kZXJTdHls
ZSByZW5kZXJTdHlsZSkKK3sKKyAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgY3Vy
cmVudGx5IHN1cHBvcnQgcmVuZGVyaW5nIGRpcmVjdGx5IHRvIGEgd2luZG93LgorICAgIGlmIChy
ZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJpYnMs
IGhvc3RXaW5kb3csIGZhbHNlKSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0Nv
bnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKKyAgICA6IG1fY3Vy
cmVudFdpZHRoKDApCisgICAgLCBtX2N1cnJlbnRIZWlnaHQoMCkKKyAgICAsIG1faG9zdFdpbmRv
dyhob3N0V2luZG93KQorICAgICwgbV9jb250ZXh0KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6Y3JlYXRlV2ViR0xDb250ZXh0KCkpCisgICAgLCBtX2V4dGVuc2lvbnMoYWRvcHRQdHIo
bmV3IEV4dGVuc2lvbnMzRE9wZW5HTCh0aGlzKSkpCisgICAgLCBtX2F0dHJzKGF0dHJzKQorICAg
ICwgbV90ZXh0dXJlKDApCisgICAgLCBtX2ZibygwKQorICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZm
ZXIoMCkKKyAgICAsIG1fYm91bmRGQk8oMCkKKyAgICAsIG1fYWN0aXZlVGV4dHVyZShHTF9URVhU
VVJFMCkKKyAgICAsIG1fYm91bmRUZXh0dXJlMCgwKQorICAgICwgbV9tdWx0aXNhbXBsZUZCTygw
KQorICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQorICAgICwgbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKDApCit7CisgICAgaWYgKCFyZW5kZXJEaXJlY3RseVRvSG9zdFdp
bmRvdykgeworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAgICAgbV9jb21w
b3NpdGluZ0xheWVyID0gV2ViR0xMYXllcldlYktpdFRocmVhZDo6Y3JlYXRlKCk7CisjZW5kaWYK
KyAgICAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICAgICAgRXh0ZW5zaW9uczNEKiBl
eHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOworICAgICAgICBpZiAoIWV4dGVuc2lvbnMtPnN1
cHBvcnRzKCJHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIikpCisgICAgICAg
ICAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOworCisgICAgICAgIC8vIENyZWF0ZSBhIHRl
eHR1cmUgdG8gcmVuZGVyIGludG8uCisgICAgICAgIDo6Z2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0
dXJlKTsKKyAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7
CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgICAgICA6OmdsVGV4
UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9f
RURHRSk7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIDApOworCisgICAgICAgIC8vIENyZWF0ZSBhbiBGQk8uCisgICAgICAgIDo6
Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
cihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8
IG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9k
ZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBtX2JvdW5kRkJPID0gbV9mYm87CisKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgIHN0YXRpY19jYXN0PFdlYkdMTGF5
ZXJXZWJLaXRUaHJlYWQqPihtX2NvbXBvc2l0aW5nTGF5ZXIuZ2V0KCkpLT5zZXRXZWJHTENvbnRl
eHQodGhpcyk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBGSVhNRTogSWYgR3JhcGhpY3NDb250
ZXh0M0QgaXMgY3JlYXRlZCB3aXRoIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93ID09IHRydWUs
CisgICAgLy8gbWFrZUNvbnRleHRDdXJyZW50KCkgd2lsbCBtYWtlIHRoZSBzaGFyZWQgY29udGV4
dCBjdXJyZW50LgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgLy8gRklYTUU6IERv
IHdlIG5lZWQgdG8gZW5hYmxlIEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUgd2l0aCBHTCBF
UzI/IFNlZSBQUiAjMTIwMTQxLgorCisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Cit9
CisKK0dyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQoreworICAgIGlmICht
X3RleHR1cmUpIHsKKyAgICAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgICAgIDo6Z2xE
ZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNp
bCB8fCBtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMo
MSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVy
cygxLCAmbV9mYm8pOworICAgIH0KKworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGlj
czo6ZGVzdHJveVdlYkdMQ29udGV4dChtX2NvbnRleHQpOworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKK3sKKyAgICAvLyBTZWUgUFIg
IzEyMDE0MS4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
bWFrZUNvbnRleHRDdXJyZW50KCkKK3sKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhp
Y3M6OnVzZVdlYkdMQ29udGV4dChtX2NvbnRleHQpOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMk5QT1RTdHJp
Y3QoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoaWNzQ29udGV4
dDNEOjppc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6
OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGV4dHVyZTsKK30KKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK1BsYXRmb3JtTGF5ZXIqIEdyYXBoaWNz
Q29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb21wb3Np
dGluZ0xheWVyLmdldCgpOworfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBh
aW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGludCBpbWFnZVdp
ZHRoLCBpbnQgaW1hZ2VIZWlnaHQsIGludCBjYW52YXNXaWR0aCwgaW50IGNhbnZhc0hlaWdodCwK
KyAgICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGJvb2wgZmxpcFkpCit7CisgICAgLy8g
UmVvcmRlciBwaXhlbHMgaW50byBCR1JBIGZvcm1hdC4KKyAgICB1bnNpZ25lZCBjaGFyKiB0ZW1w
UGl4ZWxzID0gbmV3IHVuc2lnbmVkIGNoYXJbaW1hZ2VXaWR0aCAqIGltYWdlSGVpZ2h0ICogNF07
CisKKyAgICBpZiAoZmxpcFkpIHsKKyAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBpbWFnZUhl
aWdodDsgeSsrKSB7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmNSb3cgPSBp
bWFnZVBpeGVscyArIChpbWFnZVdpZHRoICogNCAqIHkpOworICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciAqZGVzdFJvdyA9IHRlbXBQaXhlbHMgKyAoaW1hZ2VXaWR0aCAqIDQgKiAoaW1hZ2VIZWln
aHQgLSB5IC0gMSkpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbWFnZVdpZHRo
ICogNDsgaSArPSA0KSB7CisgICAgICAgICAgICAgICAgZGVzdFJvd1tpICsgMF0gPSBzcmNSb3db
aSArIDJdOworICAgICAgICAgICAgICAgIGRlc3RSb3dbaSArIDFdID0gc3JjUm93W2kgKyAxXTsK
KyAgICAgICAgICAgICAgICBkZXN0Um93W2kgKyAyXSA9IHNyY1Jvd1tpICsgMF07CisgICAgICAg
ICAgICAgICAgZGVzdFJvd1tpICsgM10gPSBzcmNSb3dbaSArIDNdOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbWFn
ZVdpZHRoICogaW1hZ2VIZWlnaHQgKiA0OyBpICs9IDQpIHsKKyAgICAgICAgICAgIHRlbXBQaXhl
bHNbaSArIDBdID0gaW1hZ2VQaXhlbHNbaSArIDJdOworICAgICAgICAgICAgdGVtcFBpeGVsc1tp
ICsgMV0gPSBpbWFnZVBpeGVsc1tpICsgMV07CisgICAgICAgICAgICB0ZW1wUGl4ZWxzW2kgKyAy
XSA9IGltYWdlUGl4ZWxzW2kgKyAwXTsKKyAgICAgICAgICAgIHRlbXBQaXhlbHNbaSArIDNdID0g
aW1hZ2VQaXhlbHNbaSArIDNdOworICAgICAgICB9CisgICAgfQorCisgICAgU2tCaXRtYXAgY2Fu
dmFzQml0bWFwOworCisgICAgY2FudmFzQml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0Jf
ODg4OF9Db25maWcsIGNhbnZhc1dpZHRoLCBjYW52YXNIZWlnaHQpOworICAgIGNhbnZhc0JpdG1h
cC5hbGxvY1BpeGVscygwLCAwKTsKKyAgICBib29sIHJjID0gY2FudmFzQml0bWFwLmNvcHlQaXhl
bHNGcm9tKHN0YXRpY19jYXN0PHZvaWQqPihjb25zdF9jYXN0PHVuc2lnbmVkIGNoYXIqPih0ZW1w
UGl4ZWxzKSksIGltYWdlV2lkdGggKiBpbWFnZUhlaWdodCAqIDQpOworICAgIGRlbGV0ZSBbXSB0
ZW1wUGl4ZWxzOworCisgICAgRmxvYXRSZWN0IHNyYygwLCAwLCBjYW52YXNXaWR0aCwgY2FudmFz
SGVpZ2h0KTsKKyAgICBGbG9hdFJlY3QgZHN0KDAsIDAsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0
KTsKKworICAgIFJlZlB0cjxCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYT4gYml0bWFwSW1hZ2Ug
PSBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3JlYXRlKGNhbnZhc0JpdG1hcCwgZmFsc2Up
OworICAgIGlmIChyYykKKyAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGJpdG1hcEltYWdlLmdl
dCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkc3QsIHNyYywgQ29tcG9zaXRlQ29weSwgZmFsc2Up
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKFBh
c3NPd25QdHI8Q29udGV4dExvc3RDYWxsYmFjaz4pCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9XZWJHTExheWVyV2ViS2l0VGhyZWFk
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvV2ViR0xM
YXllcldlYktpdFRocmVhZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTI2ZjVmZmVlMjAxYzA5MDI0OTAwZGMw
YWFhOTY0NTRlMzk4MzYyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvV2ViR0xMYXllcldlYktpdFRocmVhZC5jcHAKQEAgLTAs
MCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR0xMYXllcldlYktpdFRo
cmVhZC5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoV0VC
R0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgPHB0aHJlYWQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXZWJHTExheWVyV2ViS2l0VGhyZWFkOjpXZWJH
TExheWVyV2ViS2l0VGhyZWFkKCkKKyAgICA6IExheWVyV2ViS2l0VGhyZWFkKFdlYkdMTGF5ZXIs
IDApCisgICAgLCBtX3dlYkdMQ29udGV4dCgwKQorICAgICwgbV9uZWVkc0Rpc3BsYXkoZmFsc2Up
Cit7CisgICAgc2V0TGF5ZXJQcm9ncmFtU2hhZGVyKExheWVyUHJvZ3JhbVNoYWRlclJHQkEpOwor
fQorCitXZWJHTExheWVyV2ViS2l0VGhyZWFkOjp+V2ViR0xMYXllcldlYktpdFRocmVhZCgpCit7
CisgICAgaWYgKG1fZnJvbnRCdWZmZXJMb2NrKQorICAgICAgICBwdGhyZWFkX211dGV4X2Rlc3Ry
b3kobV9mcm9udEJ1ZmZlckxvY2spOworfQorCit2b2lkIFdlYkdMTGF5ZXJXZWJLaXRUaHJlYWQ6
OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9uZWVkc0Rpc3BsYXkgPSB0cnVlOworICAgIHNl
dE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgV2ViR0xMYXllcldlYktpdFRocmVhZDo6dXBkYXRl
VGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoKQoreworICAgIC8vIEZJWE1FOiBEb2VzIFdlYkdMTGF5
ZXIgYWx3YXlzIG5lZWQgZGlzcGxheT8gT3IgY2FuIHdlIGp1c3QgcmV0dXJuIGltbWVkaWF0ZWx5
IGlmICghbV9uZWVkc0Rpc3BsYXkpPworICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CisKKyAg
ICBpZiAoIW1fZnJvbnRCdWZmZXJMb2NrKQorICAgICAgICBjcmVhdGVGcm9udEJ1ZmZlckxvY2so
KTsKKworICAgIC8vIExvY2sgY29waWVkIEdMIHRleHR1cmUgc28gdGhhdCB0aGUgVUkgdGhyZWFk
IHdvbid0IGFjY2VzcyBpdCB3aGlsZSB3ZSBhcmUgZHJhd2luZyBpbnRvIGl0LgorICAgIHB0aHJl
YWRfbXV0ZXhfbG9jayhtX2Zyb250QnVmZmVyTG9jayk7CisgICAgbV93ZWJHTENvbnRleHQtPnBy
ZXBhcmVUZXh0dXJlKCk7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2sobV9mcm9udEJ1ZmZlckxv
Y2spOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpICYmIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvV2ViR0xMYXllcldlYktpdFRocmVh
ZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9XZWJHTExh
eWVyV2ViS2l0VGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJjYjQ4NjU4ODY3YmQyMGNhZGM3ZjNhZWFl
Yzc2YWYwMGQxNDYwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvV2ViR0xMYXllcldlYktpdFRocmVhZC5oCkBAIC0wLDAgKzEs
NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI2lmbmRlZiBXZWJHTExheWVyV2ViS2l0VGhyZWFkX2gKKyNkZWZpbmUgV2ViR0xMYXllcldl
YktpdFRocmVhZF9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVOQUJM
RShXRUJHTCkKKworI2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CisKK2NsYXNzIFdlYkdMTGF5ZXJX
ZWJLaXRUaHJlYWQgOiBwdWJsaWMgTGF5ZXJXZWJLaXRUaHJlYWQgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFdlYkdMTGF5ZXJXZWJLaXRUaHJlYWQ+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMTGF5ZXJXZWJLaXRUaHJlYWQoKSk7Cisg
ICAgfQorCisgICAgdmlydHVhbCB+V2ViR0xMYXllcldlYktpdFRocmVhZCgpOworCisgICAgdm9p
ZCBzZXRXZWJHTENvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpIHsgbV93ZWJHTENv
bnRleHQgPSBjb250ZXh0OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7
CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZO
ZWVkZWQoKTsKKworcHJpdmF0ZToKKyAgICBXZWJHTExheWVyV2ViS2l0VGhyZWFkKCk7CisKKyAg
ICBHcmFwaGljc0NvbnRleHQzRCogbV93ZWJHTENvbnRleHQ7CisgICAgYm9vbCBtX25lZWRzRGlz
cGxheTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxFKFdFQkdMKQorCisjZW5kaWYgLy8gV2ViR0xM
YXllcldlYktpdFRocmVhZF9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>