<?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>37117</bug_id>
          
          <creation_ts>2010-04-05 15:29:41 -0700</creation_ts>
          <short_desc>Add platform-independent JPEG/PNG image encoders</short_desc>
          <delta_ts>2010-09-16 07:55:38 -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>All</rep_platform>
          <op_sys>All</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>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yong Li">yong.li.webkit</reporter>
          <assigned_to name="Yong Li">yong.li.webkit</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>jpetsovits</cc>
    
    <cc>manyoso</cc>
    
    <cc>staikos</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>208740</commentid>
    <comment_count>0</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-04-05 15:29:41 -0700</bug_when>
    <thetext>1. Add platform-independent JPEG/PNG image encoders

2. Implement toDataURL for ImageBufferOpenVG with platform-independent code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209057</commentid>
    <comment_count>1</comment_count>
      <attachid>52642</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-04-06 08:34:13 -0700</bug_when>
    <thetext>Created attachment 52642
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209060</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-06 08:38:45 -0700</bug_when>
    <thetext>Attachment 52642 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/image-encoders/PNGImageEncoder.h:21:  #ifndef header guard has wrong style, please use: PNGImageEncoder_h  [build/header_guard] [5]
WebCore/platform/image-encoders/PNGImageEncoder.h:27:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebCore/platform/image-encoders/PNGImageEncoder.cpp:50:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/platform/image-encoders/PNGImageEncoder.cpp:129:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/image-encoders/JPEGImageEncoder.h:22:  #ifndef header guard has wrong style, please use: JPEGImageEncoder_h  [build/header_guard] [5]
WebCore/platform/image-encoders/JPEGImageEncoder.h:28:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebCore/platform/image-encoders/JPEGImageEncoder.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/image-encoders/JPEGImageEncoder.cpp:34:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/platform/image-encoders/JPEGImageEncoder.cpp:47:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/platform/image-encoders/JPEGImageEncoder.cpp:83:  Declaration has space between type name and * in JPEGCompressErrorMgr *err  [whitespace/declaration] [3]
Total errors found: 10 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209076</commentid>
    <comment_count>3</comment_count>
      <attachid>52646</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-04-06 09:34:02 -0700</bug_when>
    <thetext>Created attachment 52646
fix style errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209078</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-06 09:39:18 -0700</bug_when>
    <thetext>Attachment 52646 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/image-encoders/JPEGImageEncoder.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209087</commentid>
    <comment_count>5</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-04-06 09:57:27 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Attachment 52646 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
&gt; WebCore/platform/image-encoders/JPEGImageEncoder.cpp:28:  Alphabetical sorting
&gt; problem.  [build/include_order] [4]
&gt; Total errors found: 1 in 5 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

this style error is a must. we cannot avoid this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240459</commentid>
    <comment_count>6</comment_count>
      <attachid>52646</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-20 10:15:58 -0700</bug_when>
    <thetext>Comment on attachment 52646
fix style errors

This code is nutty, but I think the image decoder libraries force you into some of this nuttiness.  Some nits below.  Please get pkasting to give your revised patch an informal review.

WebCore/platform/image-encoders/JPEGImageEncoder.cpp:39
 +          jpeg_destination_mgr* base = this;
Woah, crazy.  Is this what we&apos;re supposed to do here?

WebCore/platform/image-encoders/JPEGImageEncoder.cpp:50
 +          // Zero memory
I like the static cast trick you did above.  Can we do that here?  In principle, we can get in trouble with this code if we add virtual functions to this class.

WebCore/platform/image-encoders/JPEGImageEncoder.cpp:61
 +      dest-&gt;next_output_byte  = reinterpret_cast&lt;JOCTET*&gt;(dest-&gt;m_buffer.data());
We don&apos;t usually align the = sign.  We just have once space.

WebCore/platform/image-encoders/JPEGImageEncoder.cpp:59
 +      JPEGDestinationManager* dest = (JPEGDestinationManager*)compressData-&gt;dest;
Please use a C++ style cast like you do below.

WebCore/platform/image-encoders/JPEGImageEncoder.cpp:83
 +      longjmp(err-&gt;m_setjmpBuffer, -1);
Crazy!

WebCore/platform/image-encoders/JPEGImageEncoder.cpp:88
 +      struct jpeg_compress_struct compressData= { 0 };
Missing space before =

WebCore/platform/image-encoders/JPEGImageEncoder.cpp:109
 +      Vector&lt;JSAMPLE, 600 * 3&gt; rowBuffer;
No space around *

WebCore/platform/image-encoders/JPEGImageEncoder.cpp:108
 +      // rowBuffer must be defined here so that its destructor is always called even when &quot;setjmp&quot; catches an error.
setjmp/longjmp are insane, especially when mixed with C++ constructs.

WebCore/platform/image-encoders/JPEGImageEncoder.h:21
 +  
Extra blank line here.

WebCore/platform/image-encoders/PNGImageEncoder.cpp:51
 +      Vector&lt;char&gt;* m_out;
Why is this called m_out but the corresponding variable for JPEG is called m_dump?

WebCore/platform/image-encoders/PNGImageEncoder.cpp:62
 +      memcpy(&amp;(*state-&gt;m_out)[oldSize], data, size);
&amp;(*state-&gt;m_out)[oldSize] is too hard to understand.  Please use temporary variables to explain what this insanity does.

WebCore/platform/image-encoders/PNGImageEncoder.cpp:87
 +      png_struct* pngPtr = png_create_write_struct(PNG_LIBPNG_VER_STRING,
We usually put these sorts of things on one line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242052</commentid>
    <comment_count>7</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-06-23 13:23:59 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 52646 [details])
&gt; This code is nutty, but I think the image decoder libraries force you into some of this nuttiness.  Some nits below.  Please get pkasting to give your revised patch an informal review.
&gt; 
&gt; WebCore/platform/image-encoders/JPEGImageEncoder.cpp:39
&gt;  +          jpeg_destination_mgr* base = this;
&gt; Woah, crazy.  Is this what we&apos;re supposed to do here?
&gt; 
&gt; WebCore/platform/image-encoders/JPEGImageEncoder.cpp:50
&gt;  +          // Zero memory
&gt; I like the static cast trick you did above.  Can we do that here?  In principle, we can get in trouble with this code if we add virtual functions to this class.

This doesn&apos;t need a static cast because it casts from child class to the parent class. Implicit cast is safer than static cast in most cases. No matter we add virtual functions to the class or add another parent class, &quot;base&quot; is always pointing to a good jpeg_destination_mgr object.
 
&gt; WebCore/platform/image-encoders/JPEGImageEncoder.cpp:83
&gt;  +      longjmp(err-&gt;m_setjmpBuffer, -1);
&gt; Crazy!

:) Yes it is. I don&apos;t like it either. But it&apos;s the way to handle libjpeg error. JPEG decoder also uses this. 

&gt; WebCore/platform/image-encoders/JPEGImageEncoder.cpp:109
&gt;  +      Vector&lt;JSAMPLE, 600 * 3&gt; rowBuffer;
&gt; No space around *

Are you sure? I don&apos;t think check-webkit-style will accept 600*3 with no spaces.

Thanks a lot for reviewing! I&apos;ll update the patch according to your suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242053</commentid>
    <comment_count>8</comment_count>
      <attachid>59557</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-06-23 13:24:29 -0700</bug_when>
    <thetext>Created attachment 59557
Updated again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242054</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-23 13:29:12 -0700</bug_when>
    <thetext>Attachment 59557 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/platform/image-encoders/JPEGImageEncoder.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242635</commentid>
    <comment_count>10</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-06-24 13:09:14 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Attachment 59557 [details] did not pass style-queue:
&gt; Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
&gt; WebCore/platform/image-encoders/JPEGImageEncoder.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
&gt; Total errors found: 1 in 5 files
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

we cannot avoid this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279644</commentid>
    <comment_count>11</comment_count>
      <attachid>59557</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2010-09-15 11:54:20 -0700</bug_when>
    <thetext>Comment on attachment 59557
Updated again

Will need a retest since it&apos;s so old.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280015</commentid>
    <comment_count>12</comment_count>
      <attachid>59557</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-16 04:48:03 -0700</bug_when>
    <thetext>Comment on attachment 59557
Updated again

Clearing flags on attachment: 59557

Committed r67606: &lt;http://trac.webkit.org/changeset/67606&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280016</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-16 04:48:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52642</attachid>
            <date>2010-04-06 08:34:13 -0700</date>
            <delta_ts>2010-04-06 09:34:02 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>image_encoders.patch</filename>
            <type>text/plain</type>
            <size>13901</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWNkMzliMS4uM2Q1N2Y2NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wNC0wNiAgWW9uZyBMaSAgPHlv
bGlAcmltLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcxMTcKKworICAg
ICAgICBBZGQgcGxhdGZvcm0taW5kZXBlbmRlbnQgSlBFRy9QTkcgaW1hZ2UgZW5jb2RlcnMgdGhh
dAorICAgICAgICB3b3JrIHdpdGggYmlnIGVuZGlhbiBSR0JBIHNvdXJjZSBkYXRhLgorCisgICAg
ICAgIFRoZXJlJ3Mgbm8gbGF5b3V0IHRlc3QgYmVjYXVzZSB0aGlzIHBhdGNoIGRvZXMndCBtYWtl
CisgICAgICAgIGFueSBwb3J0IHN0YXJ0IHVzaW5nIHRoZSBlbmNvZGVycy4KKworICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmg6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWVuY29kZXJzL1BOR0ltYWdlRW5jb2Rlci5jcHA6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWVuY29kZXJzL1BOR0ltYWdlRW5jb2Rl
ci5oOiBBZGRlZC4KKwogMjAxMC0wNC0wNiAgTWF0dGlhcyBOaXNzbGVyICA8bW5pc3NsZXJAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjZjZWRjCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmNw
cApAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2Jp
bGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAwOS0yMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKUEVHSW1hZ2VFbmNvZGVyLmgi
CisKKyNpbmNsdWRlICJJbnRTaXplLmgiCisvLyBGSVhNRToganBlZ2xpYi5oIHJlcXVpcmVzIHN0
ZGlvLmggdG8gYmUgaW5jbHVkZWQgZmlyc3QgZm9yIEZJTEUKKyNpbmNsdWRlIDxzdGRpby5oPgor
I2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlIDxzZXRqbXAuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBKUEVHRGVzdGluYXRpb25NYW5hZ2VyIDogcHVibGljIGpwZWdfZGVz
dGluYXRpb25fbWdyCit7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSlBFR0Rlc3RpbmF0aW9uTWFu
YWdlcihWZWN0b3I8Y2hhcj4mIHRvRHVtcCkKKyAgICAgICAgOiBtX2R1bXAodG9EdW1wKQorICAg
IHsKKyAgICAgICAgLy8gWmVybyBiYXNlIGNsYXNzIG1lbW9yeQorICAgICAgICBtZW1zZXQodGhp
cywgMCwgc2l6ZW9mKGpwZWdfZGVzdGluYXRpb25fbWdyKSk7CisgICAgfQorICAgIFZlY3Rvcjxj
aGFyPiBtX2J1ZmZlcjsKKyAgICBWZWN0b3I8Y2hhcj4mIG1fZHVtcDsKK307CisKK2NsYXNzIEpQ
RUdDb21wcmVzc0Vycm9yTWdyIDogcHVibGljIGpwZWdfZXJyb3JfbWdyCit7CitwdWJsaWM6Cisg
ICAgSlBFR0NvbXByZXNzRXJyb3JNZ3IoKQorICAgIHsKKyAgICAgICAgLy8gWmVybyBtZW1vcnkK
KyAgICAgICAgbWVtc2V0KHRoaXMsIDAsIHNpemVvZihKUEVHQ29tcHJlc3NFcnJvck1ncikpOwor
ICAgIH0KKworICAgIGptcF9idWYgbV9zZXRqbXBCdWZmZXI7Cit9OworCit2b2lkIGpwZWdJbml0
aWFsaXplRGVzdGluYXRpb24oal9jb21wcmVzc19wdHIgY29tcHJlc3NEYXRhKQoreworICAgIEpQ
RUdEZXN0aW5hdGlvbk1hbmFnZXIqIGRlc3QgPSAoSlBFR0Rlc3RpbmF0aW9uTWFuYWdlciopY29t
cHJlc3NEYXRhLT5kZXN0OworICAgIGRlc3QtPm1fYnVmZmVyLnJlc2l6ZSg0MDk2KTsKKyAgICBk
ZXN0LT5uZXh0X291dHB1dF9ieXRlICA9IHJlaW50ZXJwcmV0X2Nhc3Q8Sk9DVEVUKj4oZGVzdC0+
bV9idWZmZXIuZGF0YSgpKTsKKyAgICBkZXN0LT5mcmVlX2luX2J1ZmZlciAgICA9IGRlc3QtPm1f
YnVmZmVyLnNpemUoKTsKK30KKworYm9vbGVhbiBqcGVnRW1wdHlPdXRwdXRCdWZmZXIoal9jb21w
cmVzc19wdHIgY29tcHJlc3NEYXRhKQoreworICAgIEpQRUdEZXN0aW5hdGlvbk1hbmFnZXIqIGRl
c3QgPSBzdGF0aWNfY2FzdDxKUEVHRGVzdGluYXRpb25NYW5hZ2VyKj4oY29tcHJlc3NEYXRhLT5k
ZXN0KTsKKyAgICBkZXN0LT5tX2R1bXAuYXBwZW5kKGRlc3QtPm1fYnVmZmVyLmRhdGEoKSwgZGVz
dC0+bV9idWZmZXIuc2l6ZSgpIC0gZGVzdC0+ZnJlZV9pbl9idWZmZXIpOworICAgIGRlc3QtPm5l
eHRfb3V0cHV0X2J5dGUgID0gcmVpbnRlcnByZXRfY2FzdDxKT0NURVQqPihkZXN0LT5tX2J1ZmZl
ci5kYXRhKCkpOworICAgIGRlc3QtPmZyZWVfaW5fYnVmZmVyICAgID0gZGVzdC0+bV9idWZmZXIu
c2l6ZSgpOworICAgIHJldHVybiBUUlVFOworfQorCit2b2lkIGpwZWdUZXJtaW5hdGVEZXN0aW5h
dGlvbihqX2NvbXByZXNzX3B0ciBjb21wcmVzc0RhdGEpCit7CisgICAgSlBFR0Rlc3RpbmF0aW9u
TWFuYWdlciogZGVzdCA9IHN0YXRpY19jYXN0PEpQRUdEZXN0aW5hdGlvbk1hbmFnZXIqPihjb21w
cmVzc0RhdGEtPmRlc3QpOworICAgIGRlc3QtPm1fZHVtcC5hcHBlbmQoZGVzdC0+bV9idWZmZXIu
ZGF0YSgpLCBkZXN0LT5tX2J1ZmZlci5zaXplKCkgLSBkZXN0LT5mcmVlX2luX2J1ZmZlcik7Cit9
CisKK3ZvaWQganBlZ0Vycm9yRXhpdChqX2NvbW1vbl9wdHIgY29tcHJlc3NEYXRhKQoreworICAg
IEpQRUdDb21wcmVzc0Vycm9yTWdyICplcnIgPSBzdGF0aWNfY2FzdDxKUEVHQ29tcHJlc3NFcnJv
ck1ncio+KGNvbXByZXNzRGF0YS0+ZXJyKTsKKyAgICBsb25nam1wKGVyci0+bV9zZXRqbXBCdWZm
ZXIsIC0xKTsKK30KKworYm9vbCBjb21wcmVzc1JHQkFCaWdFbmRpYW5Ub0pQRUcodW5zaWduZWQg
Y2hhciogcmdiYUJpZ0VuZGlhbkRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIFZlY3RvcjxjaGFy
PiYganBlZ0RhdGEpCit7CisgICAgc3RydWN0IGpwZWdfY29tcHJlc3Nfc3RydWN0IGNvbXByZXNz
RGF0YT0geyAwIH07CisgICAgSlBFR0NvbXByZXNzRXJyb3JNZ3IgZXJyOworICAgIGNvbXByZXNz
RGF0YS5lcnIgPSBqcGVnX3N0ZF9lcnJvcigmZXJyKTsKKyAgICBlcnIuZXJyb3JfZXhpdCA9IGpw
ZWdFcnJvckV4aXQ7CisKKyAgICBqcGVnX2NyZWF0ZV9jb21wcmVzcygmY29tcHJlc3NEYXRhKTsK
KworICAgIEpQRUdEZXN0aW5hdGlvbk1hbmFnZXIgZGVzdChqcGVnRGF0YSk7CisgICAgY29tcHJl
c3NEYXRhLmRlc3QgPSAmZGVzdDsKKyAgICBkZXN0LmluaXRfZGVzdGluYXRpb24gPSBqcGVnSW5p
dGlhbGl6ZURlc3RpbmF0aW9uOworICAgIGRlc3QuZW1wdHlfb3V0cHV0X2J1ZmZlciA9IGpwZWdF
bXB0eU91dHB1dEJ1ZmZlcjsKKyAgICBkZXN0LnRlcm1fZGVzdGluYXRpb24gPSBqcGVnVGVybWlu
YXRlRGVzdGluYXRpb247CisKKyAgICBjb21wcmVzc0RhdGEuaW1hZ2Vfd2lkdGggPSBzaXplLndp
ZHRoKCk7CisgICAgY29tcHJlc3NEYXRhLmltYWdlX2hlaWdodCA9IHNpemUuaGVpZ2h0KCk7Cisg
ICAgY29tcHJlc3NEYXRhLmlucHV0X2NvbXBvbmVudHMgPSAzOworICAgIGNvbXByZXNzRGF0YS5p
bl9jb2xvcl9zcGFjZSA9IEpDU19SR0I7CisgICAganBlZ19zZXRfZGVmYXVsdHMoJmNvbXByZXNz
RGF0YSk7CisgICAganBlZ19zZXRfcXVhbGl0eSgmY29tcHJlc3NEYXRhLCA2NSwgRkFMU0UpOwor
CisgICAgLy8gcm93QnVmZmVyIG11c3QgYmUgZGVmaW5lZCBoZXJlIHNvIHRoYXQgaXRzIGRlc3Ry
dWN0b3IgaXMgYWx3YXlzIGNhbGxlZCBldmVuIHdoZW4gInNldGptcCIgY2F0Y2hlcyBhbiBlcnJv
ci4KKyAgICBWZWN0b3I8SlNBTVBMRSwgNjAwICogMz4gcm93QnVmZmVyOworCisgICAgaWYgKHNl
dGptcChlcnIubV9zZXRqbXBCdWZmZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBq
cGVnX3N0YXJ0X2NvbXByZXNzKCZjb21wcmVzc0RhdGEsIFRSVUUpOworICAgIHJvd0J1ZmZlci5y
ZXNpemUoY29tcHJlc3NEYXRhLmltYWdlX3dpZHRoICogMyk7CisKKyAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBwaXhlbCA9IHJnYmFCaWdFbmRpYW5EYXRhOworICAgIGNvbnN0IHVuc2lnbmVkIGNo
YXIqIHBpeGVsRW5kID0gcGl4ZWwgKyBjb21wcmVzc0RhdGEuaW1hZ2Vfd2lkdGggKiBjb21wcmVz
c0RhdGEuaW1hZ2VfaGVpZ2h0ICogNDsKKyAgICB3aGlsZSAocGl4ZWwgPCBwaXhlbEVuZCkgewor
ICAgICAgICBKU0FNUExFKiBvdXRwdXQgPSByb3dCdWZmZXIuZGF0YSgpOworICAgICAgICBmb3Ig
KGNvbnN0IHVuc2lnbmVkIGNoYXIqIHJvd0VuZCA9IHBpeGVsICsgY29tcHJlc3NEYXRhLmltYWdl
X3dpZHRoICogNDsgcGl4ZWwgPCByb3dFbmQ7KSB7CisgICAgICAgICAgICAqb3V0cHV0KysgPSBz
dGF0aWNfY2FzdDxKU0FNUExFPigqcGl4ZWwrKyAmIDB4RkYpOyAvLyByZWQKKyAgICAgICAgICAg
ICpvdXRwdXQrKyA9IHN0YXRpY19jYXN0PEpTQU1QTEU+KCpwaXhlbCsrICYgMHhGRik7IC8vIGdy
ZWVuCisgICAgICAgICAgICAqb3V0cHV0KysgPSBzdGF0aWNfY2FzdDxKU0FNUExFPigqcGl4ZWwr
KyAmIDB4RkYpOyAvLyBibHVlCisgICAgICAgICAgICArK3BpeGVsOyAvLyBza2lwIGFscGhhCisg
ICAgICAgIH0KKyAgICAgICAgb3V0cHV0ID0gcm93QnVmZmVyLmRhdGEoKTsKKyAgICAgICAganBl
Z193cml0ZV9zY2FubGluZXMoJmNvbXByZXNzRGF0YSwgJm91dHB1dCwgMSk7CisgICAgfQorCisg
ICAganBlZ19maW5pc2hfY29tcHJlc3MoJmNvbXByZXNzRGF0YSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvSlBF
R0ltYWdlRW5jb2Rlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9KUEVHSW1h
Z2VFbmNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q0NTM3Zgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvSlBFR0lt
YWdlRW5jb2Rlci5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
VG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworCisjaWZuZGVmIEpQRUdfRU5DT0RFUl9ICisjZGVmaW5lIEpQRUdfRU5D
T0RFUl9ICisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KyAgICBjbGFzcyBJbnRTaXplOworICAgIGJvb2wgY29tcHJlc3NSR0JBQmlnRW5kaWFuVG9KUEVH
KHVuc2lnbmVkIGNoYXIqIHJnYmFCaWdFbmRpYW5EYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBW
ZWN0b3I8Y2hhcj4mIGpwZWdEYXRhKTsKK30KKworI2VuZGlmIC8vIEpQRUdfRU5DT0RFUl9ICmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL1BOR0ltYWdlRW5jb2Rl
ci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL1BOR0ltYWdlRW5jb2Rlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYyZmU5ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvUE5HSW1hZ2VFbmNvZGVy
LmNwcApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA5LCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA5IFRv
cmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBOR0ltYWdlRW5jb2Rlci5oIgorCisjaW5jbHVk
ZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgInBuZy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBFbmNvZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8g
VGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlIGlzIGJhc2VkIG9uIG5zUE5HRW5jb2Rlci5jcHAgaW4g
TW96aWxsYQorLy8gKENvcHlyaWdodCAyMDA1IEdvb2dsZSBJbmMuKQorCisvLyBQYXNzZWQgYXJv
dW5kIGFzIHRoZSBpb19wdHIgaW4gdGhlIHBuZyBzdHJ1Y3RzIHNvIG91ciBjYWxsYmFja3Mga25v
dyB3aGVyZQorLy8gdG8gd3JpdGUgZGF0YS4KK3N0cnVjdCBQTkdFbmNvZGVyU3RhdGUKK3sKKyAg
ICBQTkdFbmNvZGVyU3RhdGUoVmVjdG9yPGNoYXI+KiBvKSA6IG1fb3V0KG8pIHt9CisgICAgVmVj
dG9yPGNoYXI+KiBtX291dDsKK307CisKKy8vIENhbGxlZCBieSBsaWJwbmcgdG8gZmx1c2ggaXRz
IGludGVybmFsIGJ1ZmZlciB0byBvdXJzLgordm9pZCBlbmNvZGVyV3JpdGVDYWxsYmFjayhwbmdf
c3RydWN0cCBwbmcsIHBuZ19ieXRlcCBkYXRhLCBwbmdfc2l6ZV90IHNpemUpCit7CisgICAgUE5H
RW5jb2RlclN0YXRlKiBzdGF0ZSA9IHN0YXRpY19jYXN0PFBOR0VuY29kZXJTdGF0ZSo+KHBuZ19n
ZXRfaW9fcHRyKHBuZykpOworICAgIEFTU0VSVChzdGF0ZS0+bV9vdXQpOworCisgICAgc2l6ZV90
IG9sZFNpemUgPSBzdGF0ZS0+bV9vdXQtPnNpemUoKTsKKyAgICBzdGF0ZS0+bV9vdXQtPnJlc2l6
ZShvbGRTaXplICsgc2l6ZSk7CisgICAgbWVtY3B5KCYoKnN0YXRlLT5tX291dClbb2xkU2l6ZV0s
IGRhdGEsIHNpemUpOworfQorCisvLyBBdXRvbWF0aWNhbGx5IGRlc3Ryb3lzIHRoZSBnaXZlbiB3
cml0ZSBzdHJ1Y3RzIG9uIGRlc3RydWN0aW9uIHRvIG1ha2UKKy8vIGNsZWFudXAgYW5kIGVycm9y
IGhhbmRsaW5nIGNvZGUgY2xlYW5lci4KK2NsYXNzIFBOR1dyaXRlU3RydWN0RGVzdHJveWVyIHsK
K3B1YmxpYzoKKyAgICBQTkdXcml0ZVN0cnVjdERlc3Ryb3llcihwbmdfc3RydWN0KiogcHMsIHBu
Z19pbmZvKiogcGkpCisgICAgICAgIDogbV9wbmdTdHJ1Y3QocHMpCisgICAgICAgICwgbV9wbmdJ
bmZvKHBpKQorICAgIHsKKyAgICB9CisKKyAgICB+UE5HV3JpdGVTdHJ1Y3REZXN0cm95ZXIoKQor
ICAgIHsKKyAgICAgICAgcG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0KG1fcG5nU3RydWN0LCBtX3Bu
Z0luZm8pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBwbmdfc3RydWN0KiogbV9wbmdTdHJ1Y3Q7
CisgICAgcG5nX2luZm8qKiBtX3BuZ0luZm87Cit9OworCitib29sIGNvbXByZXNzUkdCQUJpZ0Vu
ZGlhblRvUE5HKHVuc2lnbmVkIGNoYXIqIHJnYmFCaWdFbmRpYW5EYXRhLCBjb25zdCBJbnRTaXpl
JiBzaXplLCBWZWN0b3I8Y2hhcj4mIHBuZ0RhdGEpCit7CisgICAgcG5nX3N0cnVjdCogcG5nUHRy
ID0gcG5nX2NyZWF0ZV93cml0ZV9zdHJ1Y3QoUE5HX0xJQlBOR19WRVJfU1RSSU5HLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ192b2lkcF9OVUxM
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19l
cnJvcl9wdHJfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwbmdfZXJyb3JfcHRyX05VTEwpOworICAgIGlmICghcG5nUHRyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBwbmdfaW5mbyogaW5mb1B0ciA9IHBuZ19jcmVhdGVfaW5mb19z
dHJ1Y3QocG5nUHRyKTsKKyAgICBpZiAoIWluZm9QdHIpIHsKKyAgICAgICAgcG5nX2Rlc3Ryb3lf
d3JpdGVfc3RydWN0KCZwbmdQdHIsIDApOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIFBOR1dyaXRlU3RydWN0RGVzdHJveWVyIGRlc3Ryb3llcigmcG5nUHRyLCAmaW5mb1B0cik7
CisKKyAgICAvLyBUaGUgZGVzdHJveWVyIHdpbGwgZW5zdXJlIHRoYXQgdGhlIHN0cnVjdHVyZXMg
YXJlIGNsZWFuZWQgdXAgaW4gdGhpcworICAgIC8vIGNhc2UsIGV2ZW4gdGhvdWdoIHdlIG1heSBn
ZXQgaGVyZSBhcyBhIGp1bXAgZnJvbSByYW5kb20gcGFydHMgb2YgdGhlCisgICAgLy8gUE5HIGxp
YnJhcnkgY2FsbGVkIGJlbG93LgorICAgIGlmIChzZXRqbXAocG5nX2ptcGJ1ZihwbmdQdHIpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gU2V0IG91ciBjYWxsYmFjayBmb3IgbGli
cG5nIHRvIGdpdmUgdXMgdGhlIGRhdGEuCisgICAgUE5HRW5jb2RlclN0YXRlIHN0YXRlKCZwbmdE
YXRhKTsKKyAgICBwbmdfc2V0X3dyaXRlX2ZuKHBuZ1B0ciwgJnN0YXRlLCBlbmNvZGVyV3JpdGVD
YWxsYmFjaywgMCk7CisKKyAgICBpbnQgcG5nT3V0cHV0Q29sb3JUeXBlID0gUE5HX0NPTE9SX1RZ
UEVfUkdCX0FMUEhBOworCisgICAgcG5nX3NldF9JSERSKHBuZ1B0ciwgaW5mb1B0ciwgc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpLCA4LCBwbmdPdXRwdXRDb2xvclR5cGUsCisgICAgICAgICAg
ICAgICAgIFBOR19JTlRFUkxBQ0VfTk9ORSwgUE5HX0NPTVBSRVNTSU9OX1RZUEVfREVGQVVMVCwK
KyAgICAgICAgICAgICAgICAgUE5HX0ZJTFRFUl9UWVBFX0RFRkFVTFQpOworICAgIHBuZ193cml0
ZV9pbmZvKHBuZ1B0ciwgaW5mb1B0cik7CisKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdyA9IHNp
emUud2lkdGgoKSAqIDQ7CisgICAgZm9yICh1bnNpZ25lZCB5ID0gMDsgeSA8IHNpemUuaGVpZ2h0
KCk7ICsreSkgeworICAgICAgICBwbmdfd3JpdGVfcm93KHBuZ1B0ciwgcmdiYUJpZ0VuZGlhbkRh
dGEpOworICAgICAgICByZ2JhQmlnRW5kaWFuRGF0YSArPSBieXRlc1BlclJvdzsKKyAgICB9CisK
KyAgICBwbmdfd3JpdGVfZW5kKHBuZ1B0ciwgaW5mb1B0cik7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWVuY29kZXJzL1BOR0ltYWdlRW5jb2Rlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1lbmNvZGVycy9QTkdJbWFnZUVuY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44NTVmN2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1lbmNvZGVycy9QTkdJbWFnZUVuY29kZXIuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgorICogIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAwOS0yMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFBOR19FTkNPREVSX0gKKyNkZWZpbmUgUE5HX0VOQ09E
RVJfSAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgY2xhc3MgSW50U2l6ZTsKKyAgICBib29sIGNvbXByZXNzUkdCQUJpZ0VuZGlhblRvUE5HKHVu
c2lnbmVkIGNoYXIqIHJnYmFCaWdFbmRpYW5EYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBWZWN0
b3I8Y2hhcj4mIHBuZ0RhdGEpOworfQorCisjZW5kaWYgLy8gUE5HX0VOQ09ERVJfSAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52646</attachid>
            <date>2010-04-06 09:34:02 -0700</date>
            <delta_ts>2010-06-23 13:24:29 -0700</delta_ts>
            <desc>fix style errors</desc>
            <filename>image_encoders.patch</filename>
            <type>text/plain</type>
            <size>14007</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWNkMzliMS4uM2Q1N2Y2NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wNC0wNiAgWW9uZyBMaSAgPHlv
bGlAcmltLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcxMTcKKworICAg
ICAgICBBZGQgcGxhdGZvcm0taW5kZXBlbmRlbnQgSlBFRy9QTkcgaW1hZ2UgZW5jb2RlcnMgdGhh
dAorICAgICAgICB3b3JrIHdpdGggYmlnIGVuZGlhbiBSR0JBIHNvdXJjZSBkYXRhLgorCisgICAg
ICAgIFRoZXJlJ3Mgbm8gbGF5b3V0IHRlc3QgYmVjYXVzZSB0aGlzIHBhdGNoIGRvZXMndCBtYWtl
CisgICAgICAgIGFueSBwb3J0IHN0YXJ0IHVzaW5nIHRoZSBlbmNvZGVycy4KKworICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmg6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWVuY29kZXJzL1BOR0ltYWdlRW5jb2Rlci5jcHA6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWVuY29kZXJzL1BOR0ltYWdlRW5jb2Rl
ci5oOiBBZGRlZC4KKwogMjAxMC0wNC0wNiAgTWF0dGlhcyBOaXNzbGVyICA8bW5pc3NsZXJAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTQ4YjAzCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmNw
cApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2Jp
bGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAwOS0yMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKUEVHSW1hZ2VFbmNvZGVyLmgi
CisKKyNpbmNsdWRlICJJbnRTaXplLmgiCisvLyBGSVhNRToganBlZ2xpYi5oIHJlcXVpcmVzIHN0
ZGlvLmggdG8gYmUgaW5jbHVkZWQgZmlyc3QgZm9yIEZJTEUKKyNpbmNsdWRlIDxzdGRpby5oPgor
I2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlIDxzZXRqbXAuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBKUEVHRGVzdGluYXRpb25NYW5hZ2VyIDogcHVibGljIGpwZWdfZGVz
dGluYXRpb25fbWdyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBKUEVHRGVzdGluYXRpb25NYW5h
Z2VyKFZlY3RvcjxjaGFyPiYgdG9EdW1wKQorICAgICAgICA6IG1fZHVtcCh0b0R1bXApCisgICAg
eworICAgICAgICAvLyBaZXJvIGJhc2UgY2xhc3MgbWVtb3J5LgorICAgICAgICBqcGVnX2Rlc3Rp
bmF0aW9uX21nciogYmFzZSA9IHRoaXM7CisgICAgICAgIG1lbXNldChiYXNlLCAwLCBzaXplb2Yo
anBlZ19kZXN0aW5hdGlvbl9tZ3IpKTsKKyAgICB9CisgICAgVmVjdG9yPGNoYXI+IG1fYnVmZmVy
OworICAgIFZlY3RvcjxjaGFyPiYgbV9kdW1wOworfTsKKworY2xhc3MgSlBFR0NvbXByZXNzRXJy
b3JNZ3IgOiBwdWJsaWMganBlZ19lcnJvcl9tZ3IgeworcHVibGljOgorICAgIEpQRUdDb21wcmVz
c0Vycm9yTWdyKCkKKyAgICB7CisgICAgICAgIC8vIFplcm8gbWVtb3J5CisgICAgICAgIG1lbXNl
dCh0aGlzLCAwLCBzaXplb2YoSlBFR0NvbXByZXNzRXJyb3JNZ3IpKTsKKyAgICB9CisKKyAgICBq
bXBfYnVmIG1fc2V0am1wQnVmZmVyOworfTsKKworc3RhdGljIHZvaWQganBlZ0luaXRpYWxpemVE
ZXN0aW5hdGlvbihqX2NvbXByZXNzX3B0ciBjb21wcmVzc0RhdGEpCit7CisgICAgSlBFR0Rlc3Rp
bmF0aW9uTWFuYWdlciogZGVzdCA9IChKUEVHRGVzdGluYXRpb25NYW5hZ2VyKiljb21wcmVzc0Rh
dGEtPmRlc3Q7CisgICAgZGVzdC0+bV9idWZmZXIucmVzaXplKDQwOTYpOworICAgIGRlc3QtPm5l
eHRfb3V0cHV0X2J5dGUgID0gcmVpbnRlcnByZXRfY2FzdDxKT0NURVQqPihkZXN0LT5tX2J1ZmZl
ci5kYXRhKCkpOworICAgIGRlc3QtPmZyZWVfaW5fYnVmZmVyICAgID0gZGVzdC0+bV9idWZmZXIu
c2l6ZSgpOworfQorCitzdGF0aWMgYm9vbGVhbiBqcGVnRW1wdHlPdXRwdXRCdWZmZXIoal9jb21w
cmVzc19wdHIgY29tcHJlc3NEYXRhKQoreworICAgIEpQRUdEZXN0aW5hdGlvbk1hbmFnZXIqIGRl
c3QgPSBzdGF0aWNfY2FzdDxKUEVHRGVzdGluYXRpb25NYW5hZ2VyKj4oY29tcHJlc3NEYXRhLT5k
ZXN0KTsKKyAgICBkZXN0LT5tX2R1bXAuYXBwZW5kKGRlc3QtPm1fYnVmZmVyLmRhdGEoKSwgZGVz
dC0+bV9idWZmZXIuc2l6ZSgpIC0gZGVzdC0+ZnJlZV9pbl9idWZmZXIpOworICAgIGRlc3QtPm5l
eHRfb3V0cHV0X2J5dGUgID0gcmVpbnRlcnByZXRfY2FzdDxKT0NURVQqPihkZXN0LT5tX2J1ZmZl
ci5kYXRhKCkpOworICAgIGRlc3QtPmZyZWVfaW5fYnVmZmVyICAgID0gZGVzdC0+bV9idWZmZXIu
c2l6ZSgpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBqcGVnVGVybWluYXRl
RGVzdGluYXRpb24oal9jb21wcmVzc19wdHIgY29tcHJlc3NEYXRhKQoreworICAgIEpQRUdEZXN0
aW5hdGlvbk1hbmFnZXIqIGRlc3QgPSBzdGF0aWNfY2FzdDxKUEVHRGVzdGluYXRpb25NYW5hZ2Vy
Kj4oY29tcHJlc3NEYXRhLT5kZXN0KTsKKyAgICBkZXN0LT5tX2R1bXAuYXBwZW5kKGRlc3QtPm1f
YnVmZmVyLmRhdGEoKSwgZGVzdC0+bV9idWZmZXIuc2l6ZSgpIC0gZGVzdC0+ZnJlZV9pbl9idWZm
ZXIpOworfQorCitzdGF0aWMgdm9pZCBqcGVnRXJyb3JFeGl0KGpfY29tbW9uX3B0ciBjb21wcmVz
c0RhdGEpCit7CisgICAgSlBFR0NvbXByZXNzRXJyb3JNZ3IqIGVyciA9IHN0YXRpY19jYXN0PEpQ
RUdDb21wcmVzc0Vycm9yTWdyKj4oY29tcHJlc3NEYXRhLT5lcnIpOworICAgIGxvbmdqbXAoZXJy
LT5tX3NldGptcEJ1ZmZlciwgLTEpOworfQorCitib29sIGNvbXByZXNzUkdCQUJpZ0VuZGlhblRv
SlBFRyh1bnNpZ25lZCBjaGFyKiByZ2JhQmlnRW5kaWFuRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgVmVjdG9yPGNoYXI+JiBqcGVnRGF0YSkKK3sKKyAgICBzdHJ1Y3QganBlZ19jb21wcmVzc19z
dHJ1Y3QgY29tcHJlc3NEYXRhPSB7IDAgfTsKKyAgICBKUEVHQ29tcHJlc3NFcnJvck1nciBlcnI7
CisgICAgY29tcHJlc3NEYXRhLmVyciA9IGpwZWdfc3RkX2Vycm9yKCZlcnIpOworICAgIGVyci5l
cnJvcl9leGl0ID0ganBlZ0Vycm9yRXhpdDsKKworICAgIGpwZWdfY3JlYXRlX2NvbXByZXNzKCZj
b21wcmVzc0RhdGEpOworCisgICAgSlBFR0Rlc3RpbmF0aW9uTWFuYWdlciBkZXN0KGpwZWdEYXRh
KTsKKyAgICBjb21wcmVzc0RhdGEuZGVzdCA9ICZkZXN0OworICAgIGRlc3QuaW5pdF9kZXN0aW5h
dGlvbiA9IGpwZWdJbml0aWFsaXplRGVzdGluYXRpb247CisgICAgZGVzdC5lbXB0eV9vdXRwdXRf
YnVmZmVyID0ganBlZ0VtcHR5T3V0cHV0QnVmZmVyOworICAgIGRlc3QudGVybV9kZXN0aW5hdGlv
biA9IGpwZWdUZXJtaW5hdGVEZXN0aW5hdGlvbjsKKworICAgIGNvbXByZXNzRGF0YS5pbWFnZV93
aWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICBjb21wcmVzc0RhdGEuaW1hZ2VfaGVpZ2h0ID0gc2l6
ZS5oZWlnaHQoKTsKKyAgICBjb21wcmVzc0RhdGEuaW5wdXRfY29tcG9uZW50cyA9IDM7CisgICAg
Y29tcHJlc3NEYXRhLmluX2NvbG9yX3NwYWNlID0gSkNTX1JHQjsKKyAgICBqcGVnX3NldF9kZWZh
dWx0cygmY29tcHJlc3NEYXRhKTsKKyAgICBqcGVnX3NldF9xdWFsaXR5KCZjb21wcmVzc0RhdGEs
IDY1LCBGQUxTRSk7CisKKyAgICAvLyByb3dCdWZmZXIgbXVzdCBiZSBkZWZpbmVkIGhlcmUgc28g
dGhhdCBpdHMgZGVzdHJ1Y3RvciBpcyBhbHdheXMgY2FsbGVkIGV2ZW4gd2hlbiAic2V0am1wIiBj
YXRjaGVzIGFuIGVycm9yLgorICAgIFZlY3RvcjxKU0FNUExFLCA2MDAgKiAzPiByb3dCdWZmZXI7
CisKKyAgICBpZiAoc2V0am1wKGVyci5tX3NldGptcEJ1ZmZlcikpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGpwZWdfc3RhcnRfY29tcHJlc3MoJmNvbXByZXNzRGF0YSwgVFJVRSk7Cisg
ICAgcm93QnVmZmVyLnJlc2l6ZShjb21wcmVzc0RhdGEuaW1hZ2Vfd2lkdGggKiAzKTsKKworICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIHBpeGVsID0gcmdiYUJpZ0VuZGlhbkRhdGE7CisgICAgY29u
c3QgdW5zaWduZWQgY2hhciogcGl4ZWxFbmQgPSBwaXhlbCArIGNvbXByZXNzRGF0YS5pbWFnZV93
aWR0aCAqIGNvbXByZXNzRGF0YS5pbWFnZV9oZWlnaHQgKiA0OworICAgIHdoaWxlIChwaXhlbCA8
IHBpeGVsRW5kKSB7CisgICAgICAgIEpTQU1QTEUqIG91dHB1dCA9IHJvd0J1ZmZlci5kYXRhKCk7
CisgICAgICAgIGZvciAoY29uc3QgdW5zaWduZWQgY2hhciogcm93RW5kID0gcGl4ZWwgKyBjb21w
cmVzc0RhdGEuaW1hZ2Vfd2lkdGggKiA0OyBwaXhlbCA8IHJvd0VuZDspIHsKKyAgICAgICAgICAg
ICpvdXRwdXQrKyA9IHN0YXRpY19jYXN0PEpTQU1QTEU+KCpwaXhlbCsrICYgMHhGRik7IC8vIHJl
ZAorICAgICAgICAgICAgKm91dHB1dCsrID0gc3RhdGljX2Nhc3Q8SlNBTVBMRT4oKnBpeGVsKysg
JiAweEZGKTsgLy8gZ3JlZW4KKyAgICAgICAgICAgICpvdXRwdXQrKyA9IHN0YXRpY19jYXN0PEpT
QU1QTEU+KCpwaXhlbCsrICYgMHhGRik7IC8vIGJsdWUKKyAgICAgICAgICAgICsrcGl4ZWw7IC8v
IHNraXAgYWxwaGEKKyAgICAgICAgfQorICAgICAgICBvdXRwdXQgPSByb3dCdWZmZXIuZGF0YSgp
OworICAgICAgICBqcGVnX3dyaXRlX3NjYW5saW5lcygmY29tcHJlc3NEYXRhLCAmb3V0cHV0LCAx
KTsKKyAgICB9CisKKyAgICBqcGVnX2ZpbmlzaF9jb21wcmVzcygmY29tcHJlc3NEYXRhKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmggYi9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjllNmFlCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmgKQEAgLTAsMCAr
MSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAwOS0yMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisKKyNpZm5k
ZWYgSlBFR0ltYWdlRW5jb2Rlcl9oCisjZGVmaW5lIEpQRUdJbWFnZUVuY29kZXJfaAorCisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEludFNp
emU7Citib29sIGNvbXByZXNzUkdCQUJpZ0VuZGlhblRvSlBFRyh1bnNpZ25lZCBjaGFyKiByZ2Jh
QmlnRW5kaWFuRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgVmVjdG9yPGNoYXI+JiBqcGVnRGF0
YSk7CisKK30KKworI2VuZGlmIC8vIEpQRUdJbWFnZUVuY29kZXJfaApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9QTkdJbWFnZUVuY29kZXIuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9QTkdJbWFnZUVuY29kZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3N2UxYWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL1BOR0ltYWdlRW5jb2Rlci5jcHAKQEAgLTAsMCAr
MSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBUb3JjaCBNb2JpbGUsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAwOS0yMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJQTkdJbWFnZUVuY29kZXIuaCIKKworI2luY2x1ZGUgIkludFNpemUuaCIK
KyNpbmNsdWRlICJwbmcuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworLy8gRW5jb2RlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKy8vIFRoaXMgc2VjdGlvbiBv
ZiB0aGUgY29kZSBpcyBiYXNlZCBvbiBuc1BOR0VuY29kZXIuY3BwIGluIE1vemlsbGEKKy8vIChD
b3B5cmlnaHQgMjAwNSBHb29nbGUgSW5jLikKKworLy8gUGFzc2VkIGFyb3VuZCBhcyB0aGUgaW9f
cHRyIGluIHRoZSBwbmcgc3RydWN0cyBzbyBvdXIgY2FsbGJhY2tzIGtub3cgd2hlcmUKKy8vIHRv
IHdyaXRlIGRhdGEuCitzdHJ1Y3QgUE5HRW5jb2RlclN0YXRlIHsKKyAgICBQTkdFbmNvZGVyU3Rh
dGUoVmVjdG9yPGNoYXI+KiBvKSA6IG1fb3V0KG8pIHt9CisgICAgVmVjdG9yPGNoYXI+KiBtX291
dDsKK307CisKKy8vIENhbGxlZCBieSBsaWJwbmcgdG8gZmx1c2ggaXRzIGludGVybmFsIGJ1ZmZl
ciB0byBvdXJzLgordm9pZCBlbmNvZGVyV3JpdGVDYWxsYmFjayhwbmdfc3RydWN0cCBwbmcsIHBu
Z19ieXRlcCBkYXRhLCBwbmdfc2l6ZV90IHNpemUpCit7CisgICAgUE5HRW5jb2RlclN0YXRlKiBz
dGF0ZSA9IHN0YXRpY19jYXN0PFBOR0VuY29kZXJTdGF0ZSo+KHBuZ19nZXRfaW9fcHRyKHBuZykp
OworICAgIEFTU0VSVChzdGF0ZS0+bV9vdXQpOworCisgICAgc2l6ZV90IG9sZFNpemUgPSBzdGF0
ZS0+bV9vdXQtPnNpemUoKTsKKyAgICBzdGF0ZS0+bV9vdXQtPnJlc2l6ZShvbGRTaXplICsgc2l6
ZSk7CisgICAgbWVtY3B5KCYoKnN0YXRlLT5tX291dClbb2xkU2l6ZV0sIGRhdGEsIHNpemUpOwor
fQorCisvLyBBdXRvbWF0aWNhbGx5IGRlc3Ryb3lzIHRoZSBnaXZlbiB3cml0ZSBzdHJ1Y3RzIG9u
IGRlc3RydWN0aW9uIHRvIG1ha2UKKy8vIGNsZWFudXAgYW5kIGVycm9yIGhhbmRsaW5nIGNvZGUg
Y2xlYW5lci4KK2NsYXNzIFBOR1dyaXRlU3RydWN0RGVzdHJveWVyIHsKK3B1YmxpYzoKKyAgICBQ
TkdXcml0ZVN0cnVjdERlc3Ryb3llcihwbmdfc3RydWN0KiogcHMsIHBuZ19pbmZvKiogcGkpCisg
ICAgICAgIDogbV9wbmdTdHJ1Y3QocHMpCisgICAgICAgICwgbV9wbmdJbmZvKHBpKQorICAgIHsK
KyAgICB9CisKKyAgICB+UE5HV3JpdGVTdHJ1Y3REZXN0cm95ZXIoKQorICAgIHsKKyAgICAgICAg
cG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0KG1fcG5nU3RydWN0LCBtX3BuZ0luZm8pOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBwbmdfc3RydWN0KiogbV9wbmdTdHJ1Y3Q7CisgICAgcG5nX2luZm8q
KiBtX3BuZ0luZm87Cit9OworCitib29sIGNvbXByZXNzUkdCQUJpZ0VuZGlhblRvUE5HKHVuc2ln
bmVkIGNoYXIqIHJnYmFCaWdFbmRpYW5EYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBWZWN0b3I8
Y2hhcj4mIHBuZ0RhdGEpCit7CisgICAgcG5nX3N0cnVjdCogcG5nUHRyID0gcG5nX2NyZWF0ZV93
cml0ZV9zdHJ1Y3QoUE5HX0xJQlBOR19WRVJfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ192b2lkcF9OVUxMLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19lcnJvcl9wdHJfTlVMTCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfZXJy
b3JfcHRyX05VTEwpOworICAgIGlmICghcG5nUHRyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBwbmdfaW5mbyogaW5mb1B0ciA9IHBuZ19jcmVhdGVfaW5mb19zdHJ1Y3QocG5nUHRyKTsK
KyAgICBpZiAoIWluZm9QdHIpIHsKKyAgICAgICAgcG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0KCZw
bmdQdHIsIDApOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIFBOR1dyaXRlU3Ry
dWN0RGVzdHJveWVyIGRlc3Ryb3llcigmcG5nUHRyLCAmaW5mb1B0cik7CisKKyAgICAvLyBUaGUg
ZGVzdHJveWVyIHdpbGwgZW5zdXJlIHRoYXQgdGhlIHN0cnVjdHVyZXMgYXJlIGNsZWFuZWQgdXAg
aW4gdGhpcworICAgIC8vIGNhc2UsIGV2ZW4gdGhvdWdoIHdlIG1heSBnZXQgaGVyZSBhcyBhIGp1
bXAgZnJvbSByYW5kb20gcGFydHMgb2YgdGhlCisgICAgLy8gUE5HIGxpYnJhcnkgY2FsbGVkIGJl
bG93LgorICAgIGlmIChzZXRqbXAocG5nX2ptcGJ1ZihwbmdQdHIpKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gU2V0IG91ciBjYWxsYmFjayBmb3IgbGlicG5nIHRvIGdpdmUgdXMg
dGhlIGRhdGEuCisgICAgUE5HRW5jb2RlclN0YXRlIHN0YXRlKCZwbmdEYXRhKTsKKyAgICBwbmdf
c2V0X3dyaXRlX2ZuKHBuZ1B0ciwgJnN0YXRlLCBlbmNvZGVyV3JpdGVDYWxsYmFjaywgMCk7CisK
KyAgICBpbnQgcG5nT3V0cHV0Q29sb3JUeXBlID0gUE5HX0NPTE9SX1RZUEVfUkdCX0FMUEhBOwor
CisgICAgcG5nX3NldF9JSERSKHBuZ1B0ciwgaW5mb1B0ciwgc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpLCA4LCBwbmdPdXRwdXRDb2xvclR5cGUsCisgICAgICAgICAgICAgICAgIFBOR19JTlRF
UkxBQ0VfTk9ORSwgUE5HX0NPTVBSRVNTSU9OX1RZUEVfREVGQVVMVCwKKyAgICAgICAgICAgICAg
ICAgUE5HX0ZJTFRFUl9UWVBFX0RFRkFVTFQpOworICAgIHBuZ193cml0ZV9pbmZvKHBuZ1B0ciwg
aW5mb1B0cik7CisKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdyA9IHNpemUud2lkdGgoKSAqIDQ7
CisgICAgZm9yICh1bnNpZ25lZCB5ID0gMDsgeSA8IHNpemUuaGVpZ2h0KCk7ICsreSkgeworICAg
ICAgICBwbmdfd3JpdGVfcm93KHBuZ1B0ciwgcmdiYUJpZ0VuZGlhbkRhdGEpOworICAgICAgICBy
Z2JhQmlnRW5kaWFuRGF0YSArPSBieXRlc1BlclJvdzsKKyAgICB9CisKKyAgICBwbmdfd3JpdGVf
ZW5kKHBuZ1B0ciwgaW5mb1B0cik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMv
UE5HSW1hZ2VFbmNvZGVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL1BOR0lt
YWdlRW5jb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDkwODYK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL1BOR0lt
YWdlRW5jb2Rlci5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3
LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgUE5HSW1hZ2VFbmNvZGVyX2gKKyNkZWZpbmUgUE5HSW1hZ2VFbmNvZGVyX2gKKwor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
bnRTaXplOworYm9vbCBjb21wcmVzc1JHQkFCaWdFbmRpYW5Ub1BORyh1bnNpZ25lZCBjaGFyKiBy
Z2JhQmlnRW5kaWFuRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgVmVjdG9yPGNoYXI+JiBwbmdE
YXRhKTsKKworfQorCisjZW5kaWYgLy8gUE5HSW1hZ2VFbmNvZGVyX2gK
</data>
<flag name="review"
          id="36173"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59557</attachid>
            <date>2010-06-23 13:24:29 -0700</date>
            <delta_ts>2010-09-16 04:48:03 -0700</delta_ts>
            <desc>Updated again</desc>
            <filename>37117.patch</filename>
            <type>text/plain</type>
            <size>13909</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MjIxMTk3Zi4uYzQ5NzczYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wNC0wNiAgWW9uZyBMaSAgPHlv
bGlAcmltLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcxMTcKKworICAg
ICAgICBBZGQgcGxhdGZvcm0taW5kZXBlbmRlbnQgSlBFRy9QTkcgaW1hZ2UgZW5jb2RlcnMgdGhh
dAorICAgICAgICB3b3JrIHdpdGggYmlnIGVuZGlhbiBSR0JBIHNvdXJjZSBkYXRhLgorCisgICAg
ICAgIFRoZXJlJ3Mgbm8gbGF5b3V0IHRlc3QgYmVjYXVzZSB0aGlzIHBhdGNoIGRvZXMndCBtYWtl
CisgICAgICAgIGFueSBwb3J0IHN0YXJ0IHVzaW5nIHRoZSBlbmNvZGVycy4KKworICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmg6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWVuY29kZXJzL1BOR0ltYWdlRW5jb2Rlci5jcHA6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWVuY29kZXJzL1BOR0ltYWdlRW5jb2Rl
ci5oOiBBZGRlZC4KKwogMjAxMC0wNi0xOSAgS3dhbmcgWXVsIFNlbyAgPHNreXVsQGNvbXBhbnkx
MDAubmV0PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcwN2FhOAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKQEAg
LTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlBFR0ltYWdlRW5jb2Rlci5oIgorCisj
aW5jbHVkZSAiSW50U2l6ZS5oIgorLy8gRklYTUU6IGpwZWdsaWIuaCByZXF1aXJlcyBzdGRpby5o
IHRvIGJlIGluY2x1ZGVkIGZpcnN0IGZvciBGSUxFCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSA8c2V0am1wLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgSlBFR0Rlc3RpbmF0aW9uTWFuYWdlciA6IHB1YmxpYyBqcGVnX2Rlc3RpbmF0
aW9uX21nciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSlBFR0Rlc3RpbmF0aW9uTWFuYWdlcihW
ZWN0b3I8Y2hhcj4mIHRvRHVtcCkKKyAgICAgICAgOiBtX2R1bXAodG9EdW1wKQorICAgIHsKKyAg
ICAgICAgLy8gWmVybyBiYXNlIGNsYXNzIG1lbW9yeS4KKyAgICAgICAganBlZ19kZXN0aW5hdGlv
bl9tZ3IqIGJhc2UgPSB0aGlzOworICAgICAgICBtZW1zZXQoYmFzZSwgMCwgc2l6ZW9mKGpwZWdf
ZGVzdGluYXRpb25fbWdyKSk7CisgICAgfQorICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKKyAg
ICBWZWN0b3I8Y2hhcj4mIG1fZHVtcDsKK307CisKK2NsYXNzIEpQRUdDb21wcmVzc0Vycm9yTWdy
IDogcHVibGljIGpwZWdfZXJyb3JfbWdyIHsKK3B1YmxpYzoKKyAgICBKUEVHQ29tcHJlc3NFcnJv
ck1ncigpCisgICAgeworICAgICAgICAvLyBaZXJvIG1lbW9yeQorICAgICAgICBtZW1zZXQodGhp
cywgMCwgc2l6ZW9mKEpQRUdDb21wcmVzc0Vycm9yTWdyKSk7CisgICAgfQorCisgICAgam1wX2J1
ZiBtX3NldGptcEJ1ZmZlcjsKK307CisKK3N0YXRpYyB2b2lkIGpwZWdJbml0aWFsaXplRGVzdGlu
YXRpb24oal9jb21wcmVzc19wdHIgY29tcHJlc3NEYXRhKQoreworICAgIEpQRUdEZXN0aW5hdGlv
bk1hbmFnZXIqIGRlc3QgPSBzdGF0aWNfY2FzdDxKUEVHRGVzdGluYXRpb25NYW5hZ2VyKj4oY29t
cHJlc3NEYXRhLT5kZXN0KTsKKyAgICBkZXN0LT5tX2J1ZmZlci5yZXNpemUoNDA5Nik7CisgICAg
ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Sk9DVEVUKj4oZGVzdC0+
bV9idWZmZXIuZGF0YSgpKTsKKyAgICBkZXN0LT5mcmVlX2luX2J1ZmZlciA9IGRlc3QtPm1fYnVm
ZmVyLnNpemUoKTsKK30KKworc3RhdGljIGJvb2xlYW4ganBlZ0VtcHR5T3V0cHV0QnVmZmVyKGpf
Y29tcHJlc3NfcHRyIGNvbXByZXNzRGF0YSkKK3sKKyAgICBKUEVHRGVzdGluYXRpb25NYW5hZ2Vy
KiBkZXN0ID0gc3RhdGljX2Nhc3Q8SlBFR0Rlc3RpbmF0aW9uTWFuYWdlcio+KGNvbXByZXNzRGF0
YS0+ZGVzdCk7CisgICAgZGVzdC0+bV9kdW1wLmFwcGVuZChkZXN0LT5tX2J1ZmZlci5kYXRhKCks
IGRlc3QtPm1fYnVmZmVyLnNpemUoKSAtIGRlc3QtPmZyZWVfaW5fYnVmZmVyKTsKKyAgICBkZXN0
LT5uZXh0X291dHB1dF9ieXRlICA9IHJlaW50ZXJwcmV0X2Nhc3Q8Sk9DVEVUKj4oZGVzdC0+bV9i
dWZmZXIuZGF0YSgpKTsKKyAgICBkZXN0LT5mcmVlX2luX2J1ZmZlciAgICA9IGRlc3QtPm1fYnVm
ZmVyLnNpemUoKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQganBlZ1Rlcm1p
bmF0ZURlc3RpbmF0aW9uKGpfY29tcHJlc3NfcHRyIGNvbXByZXNzRGF0YSkKK3sKKyAgICBKUEVH
RGVzdGluYXRpb25NYW5hZ2VyKiBkZXN0ID0gc3RhdGljX2Nhc3Q8SlBFR0Rlc3RpbmF0aW9uTWFu
YWdlcio+KGNvbXByZXNzRGF0YS0+ZGVzdCk7CisgICAgZGVzdC0+bV9kdW1wLmFwcGVuZChkZXN0
LT5tX2J1ZmZlci5kYXRhKCksIGRlc3QtPm1fYnVmZmVyLnNpemUoKSAtIGRlc3QtPmZyZWVfaW5f
YnVmZmVyKTsKK30KKworc3RhdGljIHZvaWQganBlZ0Vycm9yRXhpdChqX2NvbW1vbl9wdHIgY29t
cHJlc3NEYXRhKQoreworICAgIEpQRUdDb21wcmVzc0Vycm9yTWdyKiBlcnIgPSBzdGF0aWNfY2Fz
dDxKUEVHQ29tcHJlc3NFcnJvck1ncio+KGNvbXByZXNzRGF0YS0+ZXJyKTsKKyAgICBsb25nam1w
KGVyci0+bV9zZXRqbXBCdWZmZXIsIC0xKTsKK30KKworYm9vbCBjb21wcmVzc1JHQkFCaWdFbmRp
YW5Ub0pQRUcodW5zaWduZWQgY2hhciogcmdiYUJpZ0VuZGlhbkRhdGEsIGNvbnN0IEludFNpemUm
IHNpemUsIFZlY3RvcjxjaGFyPiYganBlZ0RhdGEpCit7CisgICAgc3RydWN0IGpwZWdfY29tcHJl
c3Nfc3RydWN0IGNvbXByZXNzRGF0YSA9IHsgMCB9OworICAgIEpQRUdDb21wcmVzc0Vycm9yTWdy
IGVycjsKKyAgICBjb21wcmVzc0RhdGEuZXJyID0ganBlZ19zdGRfZXJyb3IoJmVycik7CisgICAg
ZXJyLmVycm9yX2V4aXQgPSBqcGVnRXJyb3JFeGl0OworCisgICAganBlZ19jcmVhdGVfY29tcHJl
c3MoJmNvbXByZXNzRGF0YSk7CisKKyAgICBKUEVHRGVzdGluYXRpb25NYW5hZ2VyIGRlc3QoanBl
Z0RhdGEpOworICAgIGNvbXByZXNzRGF0YS5kZXN0ID0gJmRlc3Q7CisgICAgZGVzdC5pbml0X2Rl
c3RpbmF0aW9uID0ganBlZ0luaXRpYWxpemVEZXN0aW5hdGlvbjsKKyAgICBkZXN0LmVtcHR5X291
dHB1dF9idWZmZXIgPSBqcGVnRW1wdHlPdXRwdXRCdWZmZXI7CisgICAgZGVzdC50ZXJtX2Rlc3Rp
bmF0aW9uID0ganBlZ1Rlcm1pbmF0ZURlc3RpbmF0aW9uOworCisgICAgY29tcHJlc3NEYXRhLmlt
YWdlX3dpZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGNvbXByZXNzRGF0YS5pbWFnZV9oZWlnaHQg
PSBzaXplLmhlaWdodCgpOworICAgIGNvbXByZXNzRGF0YS5pbnB1dF9jb21wb25lbnRzID0gMzsK
KyAgICBjb21wcmVzc0RhdGEuaW5fY29sb3Jfc3BhY2UgPSBKQ1NfUkdCOworICAgIGpwZWdfc2V0
X2RlZmF1bHRzKCZjb21wcmVzc0RhdGEpOworICAgIGpwZWdfc2V0X3F1YWxpdHkoJmNvbXByZXNz
RGF0YSwgNjUsIEZBTFNFKTsKKworICAgIC8vIHJvd0J1ZmZlciBtdXN0IGJlIGRlZmluZWQgaGVy
ZSBzbyB0aGF0IGl0cyBkZXN0cnVjdG9yIGlzIGFsd2F5cyBjYWxsZWQgZXZlbiB3aGVuICJzZXRq
bXAiIGNhdGNoZXMgYW4gZXJyb3IuCisgICAgVmVjdG9yPEpTQU1QTEUsIDYwMCAqIDM+IHJvd0J1
ZmZlcjsKKworICAgIGlmIChzZXRqbXAoZXJyLm1fc2V0am1wQnVmZmVyKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAganBlZ19zdGFydF9jb21wcmVzcygmY29tcHJlc3NEYXRhLCBUUlVF
KTsKKyAgICByb3dCdWZmZXIucmVzaXplKGNvbXByZXNzRGF0YS5pbWFnZV93aWR0aCAqIDMpOwor
CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogcGl4ZWwgPSByZ2JhQmlnRW5kaWFuRGF0YTsKKyAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwaXhlbEVuZCA9IHBpeGVsICsgY29tcHJlc3NEYXRhLmlt
YWdlX3dpZHRoICogY29tcHJlc3NEYXRhLmltYWdlX2hlaWdodCAqIDQ7CisgICAgd2hpbGUgKHBp
eGVsIDwgcGl4ZWxFbmQpIHsKKyAgICAgICAgSlNBTVBMRSogb3V0cHV0ID0gcm93QnVmZmVyLmRh
dGEoKTsKKyAgICAgICAgZm9yIChjb25zdCB1bnNpZ25lZCBjaGFyKiByb3dFbmQgPSBwaXhlbCAr
IGNvbXByZXNzRGF0YS5pbWFnZV93aWR0aCAqIDQ7IHBpeGVsIDwgcm93RW5kOykgeworICAgICAg
ICAgICAgKm91dHB1dCsrID0gc3RhdGljX2Nhc3Q8SlNBTVBMRT4oKnBpeGVsKysgJiAweEZGKTsg
Ly8gcmVkCisgICAgICAgICAgICAqb3V0cHV0KysgPSBzdGF0aWNfY2FzdDxKU0FNUExFPigqcGl4
ZWwrKyAmIDB4RkYpOyAvLyBncmVlbgorICAgICAgICAgICAgKm91dHB1dCsrID0gc3RhdGljX2Nh
c3Q8SlNBTVBMRT4oKnBpeGVsKysgJiAweEZGKTsgLy8gYmx1ZQorICAgICAgICAgICAgKytwaXhl
bDsgLy8gc2tpcCBhbHBoYQorICAgICAgICB9CisgICAgICAgIG91dHB1dCA9IHJvd0J1ZmZlci5k
YXRhKCk7CisgICAgICAgIGpwZWdfd3JpdGVfc2NhbmxpbmVzKCZjb21wcmVzc0RhdGEsICZvdXRw
dXQsIDEpOworICAgIH0KKworICAgIGpwZWdfZmluaXNoX2NvbXByZXNzKCZjb21wcmVzc0RhdGEp
OworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNzNjNGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuaApAQCAt
MCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgSlBFR0ltYWdlRW5jb2Rlcl9oCisjZGVmaW5lIEpQRUdJbWFnZUVuY29kZXJfaAorCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElu
dFNpemU7Citib29sIGNvbXByZXNzUkdCQUJpZ0VuZGlhblRvSlBFRyh1bnNpZ25lZCBjaGFyKiBy
Z2JhQmlnRW5kaWFuRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgVmVjdG9yPGNoYXI+JiBqcGVn
RGF0YSk7CisKK30KKworI2VuZGlmIC8vIEpQRUdJbWFnZUVuY29kZXJfaApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9QTkdJbWFnZUVuY29kZXIuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9QTkdJbWFnZUVuY29kZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OGQzNTEKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL1BOR0ltYWdlRW5jb2Rlci5jcHAKQEAgLTAs
MCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBUb3JjaCBNb2JpbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAwOS0yMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJQTkdJbWFnZUVuY29kZXIuaCIKKworI2luY2x1ZGUgIkludFNpemUu
aCIKKyNpbmNsdWRlICJwbmcuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworLy8gRW5jb2RlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKy8vIFRoaXMgc2VjdGlv
biBvZiB0aGUgY29kZSBpcyBiYXNlZCBvbiBuc1BOR0VuY29kZXIuY3BwIGluIE1vemlsbGEKKy8v
IChDb3B5cmlnaHQgMjAwNSBHb29nbGUgSW5jLikKKworLy8gUGFzc2VkIGFyb3VuZCBhcyB0aGUg
aW9fcHRyIGluIHRoZSBwbmcgc3RydWN0cyBzbyBvdXIgY2FsbGJhY2tzIGtub3cgd2hlcmUKKy8v
IHRvIHdyaXRlIGRhdGEuCitzdHJ1Y3QgUE5HRW5jb2RlclN0YXRlIHsKKyAgICBQTkdFbmNvZGVy
U3RhdGUoVmVjdG9yPGNoYXI+KiBvKSA6IG1fZHVtcChvKSB7fQorICAgIFZlY3RvcjxjaGFyPiog
bV9kdW1wOworfTsKKworLy8gQ2FsbGVkIGJ5IGxpYnBuZyB0byBmbHVzaCBpdHMgaW50ZXJuYWwg
YnVmZmVyIHRvIG91cnMuCit2b2lkIGVuY29kZXJXcml0ZUNhbGxiYWNrKHBuZ19zdHJ1Y3RwIHBu
ZywgcG5nX2J5dGVwIGRhdGEsIHBuZ19zaXplX3Qgc2l6ZSkKK3sKKyAgICBQTkdFbmNvZGVyU3Rh
dGUqIHN0YXRlID0gc3RhdGljX2Nhc3Q8UE5HRW5jb2RlclN0YXRlKj4ocG5nX2dldF9pb19wdHIo
cG5nKSk7CisgICAgQVNTRVJUKHN0YXRlLT5tX2R1bXApOworCisgICAgc2l6ZV90IG9sZFNpemUg
PSBzdGF0ZS0+bV9kdW1wLT5zaXplKCk7CisgICAgc3RhdGUtPm1fZHVtcC0+cmVzaXplKG9sZFNp
emUgKyBzaXplKTsKKyAgICBjaGFyKiBkZXN0aW5hdGlvbiA9IHN0YXRlLT5tX2R1bXAtPmRhdGEo
KSArIG9sZFNpemU7CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBkYXRhLCBzaXplKTsKK30KKwor
Ly8gQXV0b21hdGljYWxseSBkZXN0cm95cyB0aGUgZ2l2ZW4gd3JpdGUgc3RydWN0cyBvbiBkZXN0
cnVjdGlvbiB0byBtYWtlCisvLyBjbGVhbnVwIGFuZCBlcnJvciBoYW5kbGluZyBjb2RlIGNsZWFu
ZXIuCitjbGFzcyBQTkdXcml0ZVN0cnVjdERlc3Ryb3llciB7CitwdWJsaWM6CisgICAgUE5HV3Jp
dGVTdHJ1Y3REZXN0cm95ZXIocG5nX3N0cnVjdCoqIHBzLCBwbmdfaW5mbyoqIHBpKQorICAgICAg
ICA6IG1fcG5nU3RydWN0KHBzKQorICAgICAgICAsIG1fcG5nSW5mbyhwaSkKKyAgICB7CisgICAg
fQorCisgICAgflBOR1dyaXRlU3RydWN0RGVzdHJveWVyKCkKKyAgICB7CisgICAgICAgIHBuZ19k
ZXN0cm95X3dyaXRlX3N0cnVjdChtX3BuZ1N0cnVjdCwgbV9wbmdJbmZvKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgcG5nX3N0cnVjdCoqIG1fcG5nU3RydWN0OworICAgIHBuZ19pbmZvKiogbV9w
bmdJbmZvOworfTsKKworYm9vbCBjb21wcmVzc1JHQkFCaWdFbmRpYW5Ub1BORyh1bnNpZ25lZCBj
aGFyKiByZ2JhQmlnRW5kaWFuRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgVmVjdG9yPGNoYXI+
JiBwbmdEYXRhKQoreworICAgIHBuZ19zdHJ1Y3QqIHBuZ1B0ciA9IHBuZ19jcmVhdGVfd3JpdGVf
c3RydWN0KFBOR19MSUJQTkdfVkVSX1NUUklORywgcG5nX3ZvaWRwX05VTEwsIHBuZ19lcnJvcl9w
dHJfTlVMTCwgcG5nX2Vycm9yX3B0cl9OVUxMKTsKKyAgICBpZiAoIXBuZ1B0cikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcG5nX2luZm8qIGluZm9QdHIgPSBwbmdfY3JlYXRlX2luZm9f
c3RydWN0KHBuZ1B0cik7CisgICAgaWYgKCFpbmZvUHRyKSB7CisgICAgICAgIHBuZ19kZXN0cm95
X3dyaXRlX3N0cnVjdCgmcG5nUHRyLCAwKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBQTkdXcml0ZVN0cnVjdERlc3Ryb3llciBkZXN0cm95ZXIoJnBuZ1B0ciwgJmluZm9QdHIp
OworCisgICAgLy8gVGhlIGRlc3Ryb3llciB3aWxsIGVuc3VyZSB0aGF0IHRoZSBzdHJ1Y3R1cmVz
IGFyZSBjbGVhbmVkIHVwIGluIHRoaXMKKyAgICAvLyBjYXNlLCBldmVuIHRob3VnaCB3ZSBtYXkg
Z2V0IGhlcmUgYXMgYSBqdW1wIGZyb20gcmFuZG9tIHBhcnRzIG9mIHRoZQorICAgIC8vIFBORyBs
aWJyYXJ5IGNhbGxlZCBiZWxvdy4KKyAgICBpZiAoc2V0am1wKHBuZ19qbXBidWYocG5nUHRyKSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFNldCBvdXIgY2FsbGJhY2sgZm9yIGxp
YnBuZyB0byBnaXZlIHVzIHRoZSBkYXRhLgorICAgIFBOR0VuY29kZXJTdGF0ZSBzdGF0ZSgmcG5n
RGF0YSk7CisgICAgcG5nX3NldF93cml0ZV9mbihwbmdQdHIsICZzdGF0ZSwgZW5jb2RlcldyaXRl
Q2FsbGJhY2ssIDApOworCisgICAgaW50IHBuZ091dHB1dENvbG9yVHlwZSA9IFBOR19DT0xPUl9U
WVBFX1JHQl9BTFBIQTsKKworICAgIHBuZ19zZXRfSUhEUihwbmdQdHIsIGluZm9QdHIsIHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgOCwgcG5nT3V0cHV0Q29sb3JUeXBlLAorICAgICAgICAg
ICAgICAgICBQTkdfSU5URVJMQUNFX05PTkUsIFBOR19DT01QUkVTU0lPTl9UWVBFX0RFRkFVTFQs
CisgICAgICAgICAgICAgICAgIFBOR19GSUxURVJfVFlQRV9ERUZBVUxUKTsKKyAgICBwbmdfd3Jp
dGVfaW5mbyhwbmdQdHIsIGluZm9QdHIpOworCisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3cgPSBz
aXplLndpZHRoKCkgKiA0OworICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCBzaXplLmhlaWdo
dCgpOyArK3kpIHsKKyAgICAgICAgcG5nX3dyaXRlX3JvdyhwbmdQdHIsIHJnYmFCaWdFbmRpYW5E
YXRhKTsKKyAgICAgICAgcmdiYUJpZ0VuZGlhbkRhdGEgKz0gYnl0ZXNQZXJSb3c7CisgICAgfQor
CisgICAgcG5nX3dyaXRlX2VuZChwbmdQdHIsIGluZm9QdHIpOworICAgIHJldHVybiB0cnVlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWVuY29kZXJzL1BOR0ltYWdlRW5jb2Rlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1lbmNvZGVycy9QTkdJbWFnZUVuY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4wYzA5MDg2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1lbmNvZGVycy9QTkdJbWFnZUVuY29kZXIuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgorICogIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAwOS0yMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFBOR0ltYWdlRW5jb2Rlcl9oCisjZGVmaW5lIFBOR0lt
YWdlRW5jb2Rlcl9oCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgSW50U2l6ZTsKK2Jvb2wgY29tcHJlc3NSR0JBQmlnRW5kaWFuVG9QTkco
dW5zaWduZWQgY2hhciogcmdiYUJpZ0VuZGlhbkRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIFZl
Y3RvcjxjaGFyPiYgcG5nRGF0YSk7CisKK30KKworI2VuZGlmIC8vIFBOR0ltYWdlRW5jb2Rlcl9o
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>