<?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>28130</bug_id>
          
          <creation_ts>2009-08-09 07:14:38 -0700</creation_ts>
          <short_desc>[Haiku] Adding Image-specific files to WebCore.</short_desc>
          <delta_ts>2009-08-18 16:47:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Maxime Simon">simon.maxime</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>leavengood</cc>
    
    <cc>pkasting</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>138501</commentid>
    <comment_count>0</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-09 07:14:38 -0700</bug_when>
    <thetext>Here is a patch to add these six files which are specific to images (or related):
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp
WebCore/platform/graphics/haiku/IconHaiku.cpp
WebCore/platform/graphics/haiku/ImageBufferData.h
WebCore/platform/graphics/haiku/ImageBufferHaiku.cpp
WebCore/platform/graphics/haiku/ImageHaiku.cpp
WebCore/platform/graphics/haiku/ImageSourceHaiku.cpp

Regards,
Maxime</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138502</commentid>
    <comment_count>1</comment_count>
      <attachid>34420</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-09 07:22:01 -0700</bug_when>
    <thetext>Created attachment 34420
Patch to add six image-specific files to WebCore/platform/graphics/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138522</commentid>
    <comment_count>2</comment_count>
      <attachid>34420</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-09 08:29:00 -0700</bug_when>
    <thetext>Comment on attachment 34420
Patch to add six image-specific files to WebCore/platform/graphics/.

Please split these out.  GraphicsContext and the ImageSource stuff really need their own changes, they&apos;re complicated. :)  Also, I made comments about parts of this patch in the previous bug which were not addressed by this posting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138990</commentid>
    <comment_count>3</comment_count>
      <attachid>34566</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-11 09:34:05 -0700</bug_when>
    <thetext>Created attachment 34566
Patch to add four image-specific files to WebCore/platform/graphics/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138992</commentid>
    <comment_count>4</comment_count>
      <attachid>34568</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-11 09:43:24 -0700</bug_when>
    <thetext>Created attachment 34568
Patch to add GraphicsContext to WebCore/platform/graphics/haiku.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139005</commentid>
    <comment_count>5</comment_count>
      <attachid>34570</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-11 09:59:18 -0700</bug_when>
    <thetext>Created attachment 34570
Patch to add ImageSource to WebCore/platform/graphics/haiku.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139392</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 10:24:24 -0700</bug_when>
    <thetext>Peter is our Image* guy these days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139395</commentid>
    <comment_count>7</comment_count>
      <attachid>34568</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 10:25:51 -0700</bug_when>
    <thetext>Comment on attachment 34568
Patch to add GraphicsContext to WebCore/platform/graphics/haiku.

Looks OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139396</commentid>
    <comment_count>8</comment_count>
      <attachid>34566</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 10:28:14 -0700</bug_when>
    <thetext>Comment on attachment 34566
Patch to add four image-specific files to WebCore/platform/graphics/.

It seems this is not needed:
Icon::Icon()
 35 {
 36     notImplemented();
 37 }

Please remove it from both Icon.h and from Icon.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139400</commentid>
    <comment_count>9</comment_count>
      <attachid>34570</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-12 10:31:04 -0700</bug_when>
    <thetext>Comment on attachment 34570
Patch to add ImageSource to WebCore/platform/graphics/haiku.

&gt; diff --git a/WebCore/platform/graphics/haiku/ImageSourceHaiku.cpp b/WebCore/platform/graphics/haiku/ImageSourceHaiku.cpp
&gt; new file mode 100644
&gt; index 0000000..ee2184c
&gt; --- /dev/null
&gt; +++ b/WebCore/platform/graphics/haiku/ImageSourceHaiku.cpp
&gt; @@ -0,0 +1,222 @@&gt; +// FIXME: Should use the Haiku translator API.

As of yesterday, there&apos;s a cross-platform ImageSource.cpp in platform/graphics.  It looks at a glance like you could just build with this file (except for one item I note below) instead of adding an ImageSourceHaiku.cpp.

&gt; +ImageDecoder* createDecoder(const Vector&lt;char&gt;&amp; data)
&gt; +{
&gt; +
&gt; +    // JPEG
&gt; +    // FIXME: Add JPEG support.

You&apos;re using the cross-platform decoders for all other filetypes.  Is there something wrong with the cross-platform JPEG decoder that prevents you from even instantiating it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139428</commentid>
    <comment_count>10</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-12 11:04:51 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; +ImageDecoder* createDecoder(const Vector&lt;char&gt;&amp; data)
&gt; &gt; +{
&gt; &gt; +
&gt; &gt; +    // JPEG
&gt; &gt; +    // FIXME: Add JPEG support.
&gt; 
&gt; You&apos;re using the cross-platform decoders for all other filetypes.  Is there
&gt; something wrong with the cross-platform JPEG decoder that prevents you from
&gt; even instantiating it?

Indeed, in the default Haiku distribution libjpeg isn&apos;t available.
Of course we could add it as dependency, but the basic way to handle ImageDecoder in Haiku is to use BTranslators. And we intended to use it for all the other filetypes as well. I may have to discuss it with Ryan.

Regards,
Maxime</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139440</commentid>
    <comment_count>11</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-12 11:21:52 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; &gt; +ImageDecoder* createDecoder(const Vector&lt;char&gt;&amp; data)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +
&gt; &gt; &gt; +    // JPEG
&gt; &gt; &gt; +    // FIXME: Add JPEG support.
&gt; &gt; 
&gt; &gt; You&apos;re using the cross-platform decoders for all other filetypes.  Is there
&gt; &gt; something wrong with the cross-platform JPEG decoder that prevents you from
&gt; &gt; even instantiating it?
&gt; 
&gt; Indeed, in the default Haiku distribution libjpeg isn&apos;t available.
&gt; Of course we could add it as dependency, but the basic way to handle
&gt; ImageDecoder in Haiku is to use BTranslators. And we intended to use it for all
&gt; the other filetypes as well. I may have to discuss it with Ryan.

I see.  Well, if you want to land the patch in the sort of state it&apos;s in now, we could either #if !PLATFORM(HAIKU) (or whatever the appropriate switch is) that block, or add some sort of ENABLE flag (which I am less in favor of).

If you want to use a completely different mechanism (I have no idea what BTranslators are :D), we can design for that once you&apos;ve got code that would work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139450</commentid>
    <comment_count>12</comment_count>
    <who name="Ryan Leavengood">leavengood</who>
    <bug_when>2009-08-12 11:35:22 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; 
&gt; I see.  Well, if you want to land the patch in the sort of state it&apos;s in now,
&gt; we could either #if !PLATFORM(HAIKU) (or whatever the appropriate switch is)
&gt; that block, or add some sort of ENABLE flag (which I am less in favor of).

Maxime let&apos;s just revert to using their ImageDecoder for now, and we can try using translators later.
 
&gt; If you want to use a completely different mechanism (I have no idea what
&gt; BTranslators are :D), we can design for that once you&apos;ve got code that would
&gt; work.

Maybe you really don&apos;t care, but:

Translators are a pretty interesting idea from BeOS (that has been copied in Haiku) which allow file formats to be converted to a common base format to facilitate all kinds of conversions. It is sort of like translating languages into a base language to translate between them (though it works a lot better for binary data than human languages.) The main use at the moment is for images, so that all the image translators can convert to and from a basic bitmap, which allows conversions from PNG to JPG, JPG to GIF, RAW to PNG, etc.

It is a pretty cool idea and of course we want to make use of such nice Haiku-only technologies in our WebKit port to make it truly native. The end result of this should be that our WebKit port would be able to render any images we have a translator for, without having to modify or recompile WebKit itself.

We can come back to this later when we have something better working. Your willingness to adapt WebKit to help us is very much appreciated!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139459</commentid>
    <comment_count>13</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-12 11:54:32 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Translators are a pretty interesting idea from BeOS (that has been copied in
&gt; Haiku) which allow file formats to be converted to a common base format to
&gt; facilitate all kinds of conversions. It is sort of like translating languages
&gt; into a base language to translate between them (though it works a lot better
&gt; for binary data than human languages.) The main use at the moment is for
&gt; images, so that all the image translators can convert to and from a basic
&gt; bitmap, which allows conversions from PNG to JPG, JPG to GIF, RAW to PNG, etc.
&gt; 
&gt; It is a pretty cool idea and of course we want to make use of such nice
&gt; Haiku-only technologies in our WebKit port to make it truly native. The end
&gt; result of this should be that our WebKit port would be able to render any
&gt; images we have a translator for, without having to modify or recompile WebKit
&gt; itself.

Beware of the potential cost of that, if fitting it into WebCore involves e.g. copying an image&apos;s data, or doing more than one conversion.  Decoding images has to be really, really fast in a web browser :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139474</commentid>
    <comment_count>14</comment_count>
    <who name="Ryan Leavengood">leavengood</who>
    <bug_when>2009-08-12 12:34:12 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; 
&gt; Beware of the potential cost of that, if fitting it into WebCore involves e.g.
&gt; copying an image&apos;s data, or doing more than one conversion.  Decoding images
&gt; has to be really, really fast in a web browser :)

Good point. There might be some overhead in using the translator system but hopefully not too much. We can do some benchmarks to be sure, but even if using the translators is a bit slower it might still be worth it. At least it shouldn&apos;t affect other ports ;)

One other issue is that the translator system does not yet (and may never) support animated images. So for GIFs (and other future animated image formats, MNG, APNG, etc) we would have to fallback to using the WebKit decoders. But I&apos;m tempted to try to fix that in Haiku...it is just tricky since translators are for any kind of data not just images.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139478</commentid>
    <comment_count>15</comment_count>
    <who name="Ryan Leavengood">leavengood</who>
    <bug_when>2009-08-12 12:37:04 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; 
&gt; Beware of the potential cost of that, if fitting it into WebCore involves e.g.
&gt; copying an image&apos;s data, or doing more than one conversion.  Decoding images
&gt; has to be really, really fast in a web browser :)

Actually this has made me wonder: have you guys ever considered moving image loading and decoding into another thread? Maybe that would add unnecessary complexity and locking issues but at first glance it seems like something that would benefit from parallelism (multiple cores and all being common these days.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139485</commentid>
    <comment_count>16</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-12 12:52:01 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Actually this has made me wonder: have you guys ever considered moving image
&gt; loading and decoding into another thread? Maybe that would add unnecessary
&gt; complexity and locking issues but at first glance it seems like something that
&gt; would benefit from parallelism (multiple cores and all being common these
&gt; days.)

Not sure it&apos;d be a big win since image decoding only happens on-demand, when the image is actually going to be drawn onscreen.  Maybe for lots of images that are all visible at once.  I haven&apos;t given it a lot of thought.  Consider asking dhyatt on IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139529</commentid>
    <comment_count>17</comment_count>
      <attachid>34568</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 14:02:35 -0700</bug_when>
    <thetext>Comment on attachment 34568
Patch to add GraphicsContext to WebCore/platform/graphics/haiku.

Clearing flags on attachment: 34568

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	A	WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp
Committed r47147
	M	WebCore/ChangeLog
	A	WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp
r47147 = 898556fb5c9912a0b53f789ad3e50e439ce26999 (trunk)
No changes between current HEAD and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk
http://trac.webkit.org/changeset/47147</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139530</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 14:02:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139545</commentid>
    <comment_count>19</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 14:19:14 -0700</bug_when>
    <thetext>Sorry for the early closure.  We just hit bug 28230.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139752</commentid>
    <comment_count>20</comment_count>
      <attachid>34720</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-13 01:45:42 -0700</bug_when>
    <thetext>Created attachment 34720
Adding four image-specific files to WebCore.


---
 6 files changed, 386 insertions(+), 2 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139760</commentid>
    <comment_count>21</comment_count>
      <attachid>34570</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-13 02:20:43 -0700</bug_when>
    <thetext>Comment on attachment 34570
Patch to add ImageSource to WebCore/platform/graphics/haiku.

I marked this patch as obsolete, we will use ImageSource.cpp instead.
Tough I will post a new bug with a patch as the Haiku port doesn&apos;t support JPEG for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141276</commentid>
    <comment_count>22</comment_count>
      <attachid>34720</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-18 15:12:12 -0700</bug_when>
    <thetext>Comment on attachment 34720
Adding four image-specific files to WebCore.

Looks OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141319</commentid>
    <comment_count>23</comment_count>
      <attachid>34720</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-18 16:47:46 -0700</bug_when>
    <thetext>Comment on attachment 34720
Adding four image-specific files to WebCore.

Clearing flags on attachment: 34720

Committed r47463: &lt;http://trac.webkit.org/changeset/47463&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141320</commentid>
    <comment_count>24</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-18 16:47:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34420</attachid>
            <date>2009-08-09 07:22:01 -0700</date>
            <delta_ts>2009-08-11 09:34:05 -0700</delta_ts>
            <desc>Patch to add six image-specific files to WebCore/platform/graphics/.</desc>
            <filename>Adding-six-image-specific-files-to-WebCore.patch</filename>
            <type>text/plain</type>
            <size>38045</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSAyMDJiMTM1ZGZjZWQyNGE2OWI2YWI2MmZkYjY0OTdjNjA4ZDRmZmYxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFN1biwgOSBBdWcgMjAwOSAxNjoxNzo1NCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGluZyBzaXggaW1hZ2Utc3BlY2lmaWMgZmlsZXMgdG8gV2ViQ29yZS4KCi0tLQogV2ViQ29yZS9D
aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTA3ICsrKysKIC4u
Li9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAgICAgICAgIHwgIDU0MCAr
KysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JY29u
SGFpa3UuY3BwICAgICAgfCAgIDYyICsrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9JbWFnZUJ1ZmZlckRhdGEuaCAgfCAgIDQzICsrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAgICB8ICAgODYgKysrCiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwICAgICB8ICAxNjEgKysrKysrCiAuLi4vcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VTb3VyY2VIYWlrdS5jcHAgICB8ICAyMjYgKysrKysrKysK
IDcgZmlsZXMgY2hhbmdlZCwgMTIyNSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3ND
b250ZXh0SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9JY29uSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckRhdGEuaAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFp
a3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9JbWFnZVNvdXJjZUhhaWt1LmNwcAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzFiYTA0OC4uYmMzOTk5OCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTAgQEAK
KzIwMDktMDgtMDkgIE1heGltZSBTaW1vbiAgPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0hhaWt1XSBBZGRp
bmcgc2l4IGltYWdlLXNwZWNpZmljIGZpbGVzIHRvIFdlYkNvcmU6CisgICAgICAgIEdyYXBoaWNz
Q29udGV4dEhhaWt1LmNwcCwgSWNvbkhhaWt1LmNwcCwgSW1hZ2VCdWZmZXJEYXRhLmgsCisgICAg
ICAgIEltYWdlQnVmZmVySGFpa3UuY3BwLCBJbWFnZUhhaWt1LmNwcCBhbmQgSW1hZ2VTb3VyY2VI
YWlrdS5jcHAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI4MTMwCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRl
eHRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3Jh
cGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6fkdyYXBo
aWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9y
bVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRm
b3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0NvbnZleFBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3Vu
ZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YmVnaW5QYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVK
b2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6b3Jp
Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cm90YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0RWxsaXBzZUluUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RDbGlwKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRm9udCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRIYWlrdVN0cm9rZVN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tu
ZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxs
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3Jt
U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
aGFkb3cpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ljb25IYWlrdS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6SWNvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJY29uOjp+SWNvbik6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpjcmVhdGVJY29uRm9yRmls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SWNvbjo6cGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0ltYWdlQnVmZmVyRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6On5J
bWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29s
b3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhcik6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmluaXRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmdldEJpdG1hcCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VTb3VyY2VIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6
SW1hZ2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6On5JbWFnZVNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y2xlYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OmluaXRpYWxpemVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
U291cmNlOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmaWxlbmFt
ZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxh
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0
ZUZyYW1lQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVJc0Nv
bXBsZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVEdXJh
dGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxw
aGFBdEluZGV4KToKKwogMjAwOS0wOC0wOCAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI3NDhkNAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0
SGFpa3UuY3BwCkBAIC0wLDAgKzEsNTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5
YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNp
bmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRlICJQZW4uaCIKKyNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgPEdyYXBoaWNzRGVmcy5oPgorI2lu
Y2x1ZGUgPFJlZ2lvbi5oPgorI2luY2x1ZGUgPFZpZXcuaD4KKyNpbmNsdWRlIDxXaW5kb3cuaD4K
KyNpbmNsdWRlIDxzdGRpby5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlIHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUoQlZpZXcqIHZpZXcpOworICAgIH5HcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUoKTsKKworICAgIEJWaWV3KiBtX3ZpZXc7Cit9OworCitHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShCVmlldyog
dmlldykKKyAgICA6IG1fdmlldyh2aWV3KQoreworfQorCitHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKQoreworfQorCitHcmFw
aGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCkKKyAgICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKKyAg
ICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNvbnRleHQpKQor
eworICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIWNvbnRleHQpOworfQorCitHcmFwaGljc0NvbnRl
eHQ6On5HcmFwaGljc0NvbnRleHQoKQoreworICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2
YXRlKG1fY29tbW9uKTsKKyAgICBkZWxldGUgbV9kYXRhOworfQorCitQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCogR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAoreworICAg
IHJldHVybiBtX2RhdGEtPm1fdmlldzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQ
bGF0Zm9ybVN0YXRlKCkKK3sKKyAgICBtX2RhdGEtPm1fdmlldy0+UHVzaFN0YXRlKCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgpCit7CisgICAgbV9k
YXRhLT5tX3ZpZXctPlBvcFN0YXRlKCk7Cit9CisKKy8vIERyYXdzIGEgZmlsbGVkIHJlY3Rhbmds
ZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPm1fdmlldy0+RmlsbFJlY3QocmVjdCk7CisgICAg
aWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpCisgICAgICAgIG1fZGF0YS0+bV92aWV3LT5T
dHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7Cit9CisKKy8vIFRoaXMgaXMg
b25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZShjb25zdCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9pbnQyKQoreworICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzdHJv
a2VTdHlsZSgpID09IE5vU3Ryb2tlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPm1f
dmlldy0+U3Ryb2tlTGluZShwb2ludDEsIHBvaW50MiwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsK
K30KKworLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJj
bGVzIHVzZWQgaW4gbGlzdHMuCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2RhdGEtPm1fdmlldy0+RmlsbEVsbGlwc2UocmVjdCk7CisgICAg
aWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpCisgICAgICAgIG1fZGF0YS0+bV92aWV3LT5T
dHJva2VFbGxpcHNlKHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHN0YXJ0QW5n
bGUsIGludCBhbmdsZVNwYW4pCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5tX3ZpZXctPlN0cm9rZUFyYyhyZWN0LCBzdGFydEFu
Z2xlLCBhbmdsZVNwYW4sIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IHBvaW50c0xlbmd0
aCwgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIHNob3VsZEFudGlhbGlhcykKK3sKKyAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBCUG9pbnQg
YlBvaW50c1twb2ludHNMZW5ndGhdOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9pbnRz
TGVuZ3RoOyBpKyspCisgICAgICAgIGJQb2ludHNbaV0gPSBwb2ludHNbaV07CisKKyAgICBtX2Rh
dGEtPm1fdmlldy0+RmlsbFBvbHlnb24oYlBvaW50cywgcG9pbnRzTGVuZ3RoKTsKKyAgICBpZiAo
c3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkKKyAgICAgICAgLy8gU3Ryb2tlIHdpdGggbG93IGNv
bG9yCisgICAgICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VQb2x5Z29uKGJQb2ludHMsIHBvaW50
c0xlbmd0aCwgdHJ1ZSwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHJnYl9jb2xvciBvbGRDb2xvciA9IG1fZGF0YS0+bV92aWV3LT5IaWdoQ29sb3IoKTsKKyAg
ICBtX2RhdGEtPm1fdmlldy0+U2V0SGlnaENvbG9yKGNvbG9yKTsKKyAgICBtX2RhdGEtPm1fdmll
dy0+RmlsbFJlY3QocmVjdCk7CisgICAgbV9kYXRhLT5tX3ZpZXctPlNldEhpZ2hDb2xvcihvbGRD
b2xvcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0
LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNv
bG9yLmFscGhhKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgLy8gRklYTUU6IEEgc2ltcGxlIGltcGxlbWVudGF0aW9uIGNvdWxkIGp1c3QgdXNlIEZpbGxS
b3VuZFJlY3QgaWYgYWxsCisgICAgLy8gdGhlIHNpemVzIGFyZSB0aGUgc2FtZSwgb3IgZXZlbiBp
ZiB0aGV5IGFyZSBub3QuIE90aGVyd2lzZSBzZXZlcmFsCisgICAgLy8gRmlsbFJlY3QgYW5kIEZp
bGxBcmMgY2FsbHMgYXJlIG5lZWRlZC4KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQ
YXRoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6YmVnaW5QYXRoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBCUmVnaW9uIHJlZ2lvbihyZWN0KTsKKyAgICAvLyBGSVhNRTogSXMgdGhpcyBjb3JyZWN0
PworICAgIC8vIHN5bGxhYmxlIGFkZHM6CisgICAgLy8gY1JlY3QgKz0gbV9kYXRhLT5wKCktPkdl
dFNjcm9sbE9mZnNldCgpOyB0byB0aGUgcmVjdCBiZWZvcmUKKyAgICAvLyBjcmVhdGluZyB0aGUg
cmVnaW9uLgorICAgIG1fZGF0YS0+bV92aWV3LT5Db25zdHJhaW5DbGlwcGluZ1JlZ2lvbigmcmVn
aW9uKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgQ29s
b3ImIGNvbG9yKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMgPSBmb2N1c1JpbmdSZWN0cygp
OworICAgIHVuc2lnbmVkIHJlY3RDb3VudCA9IHJlY3RzLnNpemUoKTsKKworICAgIC8vIEZJWE1F
OiBtYXliZSB3ZSBzaG91bGQgaW1wbGVtZW50IHRoaXMgd2l0aCBCU2hhcGU/CisKKyAgICBpZiAo
cmVjdHMuc2l6ZSgpID4gMSkgeworICAgICAgICBCUmVnaW9uICAgIHJlZ2lvbjsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCByZWN0Q291bnQ7ICsraSkKKyAgICAgICAgICAgIHJlZ2lvbi5J
bmNsdWRlKEJSZWN0KHJlY3RzW2ldKSk7CisKKyAgICAgICAgbV9kYXRhLT5tX3ZpZXctPlNldEhp
Z2hDb2xvcihjb2xvcik7CisgICAgICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VSZWN0KHJlZ2lv
bi5GcmFtZSgpLCBCX01JWEVEX0NPTE9SUyk7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEludFBvaW50JiBvcmlnaW4sIGludCB3aWR0aCwg
Ym9vbCBwcmludGluZykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBJbnRQb2ludCBlbmRQb2ludCA9IG9yaWdpbiArIEludFNpemUod2lkdGgs
IDApOworICAgIGRyYXdMaW5lKG9yaWdpbiwgZW5kUG9pbnQpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihjb25zdCBJbnRQb2lu
dCYsIGludCB3aWR0aCwgYm9vbCBncmFtbWFyKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0Zsb2F0
UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNp
dHkpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5z
cGFyZW5jeUxheWVyKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGZsb2F0IHdpZHRoKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGZsb2F0IG9sZFNpemUgPSBtX2RhdGEtPm1fdmlldy0+UGVuU2l6ZSgpOwor
ICAgIG1fZGF0YS0+bV92aWV3LT5TZXRQZW5TaXplKHdpZHRoKTsKKyAgICBtX2RhdGEtPm1fdmll
dy0+U3Ryb2tlUmVjdChyZWN0LCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOworICAgIG1fZGF0YS0+
bV92aWV3LT5TZXRQZW5TaXplKG9sZFNpemUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FwX21vZGUgbW9kZSA9IEJfQlVUVF9DQVA7Cisg
ICAgc3dpdGNoIChsaW5lQ2FwKSB7CisgICAgY2FzZSBSb3VuZENhcDoKKyAgICAgICAgbW9kZSA9
IEJfUk9VTkRfQ0FQOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNxdWFyZUNhcDoKKyAgICAg
ICAgbW9kZSA9IEJfU1FVQVJFX0NBUDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCdXR0Q2Fw
OgorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fZGF0YS0+bV92
aWV3LT5TZXRMaW5lTW9kZShtb2RlLCBtX2RhdGEtPm1fdmlldy0+TGluZUpvaW5Nb2RlKCksIG1f
ZGF0YS0+bV92aWV3LT5MaW5lTWl0ZXJMaW1pdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQoreworICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGpvaW5fbW9kZSBtb2RlID0gQl9NSVRF
Ul9KT0lOOworICAgIHN3aXRjaCAobGluZUpvaW4pIHsKKyAgICBjYXNlIFJvdW5kSm9pbjoKKyAg
ICAgICAgbW9kZSA9IEJfUk9VTkRfSk9JTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCZXZl
bEpvaW46CisgICAgICAgIG1vZGUgPSBCX0JFVkVMX0pPSU47CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgTWl0ZXJKb2luOgorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIG1fZGF0YS0+bV92aWV3LT5TZXRMaW5lTW9kZShtX2RhdGEtPm1fdmlldy0+TGluZUNhcE1v
ZGUoKSwgbW9kZSwgbV9kYXRhLT5tX3ZpZXctPkxpbmVNaXRlckxpbWl0KCkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKK3sKKyAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPm1fdmll
dy0+U2V0TGluZU1vZGUobV9kYXRhLT5tX3ZpZXctPkxpbmVDYXBNb2RlKCksIG1fZGF0YS0+bV92
aWV3LT5MaW5lSm9pbk1vZGUoKSwgbGltaXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0QWxwaGEoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQor
eworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRy
YXdpbmdfbW9kZSBtb2RlID0gQl9PUF9DT1BZOworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNl
IENvbXBvc2l0ZUNsZWFyOgorICAgIGNhc2UgQ29tcG9zaXRlQ29weToKKyAgICAgICAgLy8gVXNl
IHRoZSBkZWZhdWx0IGFib3ZlCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlU291
cmNlT3ZlcjoKKyAgICAgICAgbW9kZSA9IEJfT1BfT1ZFUjsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9w
ZXJhdGlvbjogVW5zdXBwb3J0ZWQgY29tcG9zaXRlIG9wZXJhdGlvbiAlc1xuIiwKKyAgICAgICAg
ICAgICAgICBjb21wb3NpdGVPcGVyYXRvck5hbWUob3ApLnV0ZjgoKS5kYXRhKCkpOworICAgIH0K
KyAgICBtX2RhdGEtPm1fdmlldy0+U2V0RHJhd2luZ01vZGUobW9kZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5tX3ZpZXctPkNvbnN0
cmFpbkNsaXBwaW5nUmVnaW9uKHBhdGgucGxhdGZvcm1QYXRoKCkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBJbWFnZUJ1ZmZlciopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
VHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkK
K3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitJbnRQb2ludCBHcmFwaGljc0NvbnRleHQ6Om9yaWdpbigp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW50UG9pbnQoMCwgMCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgcmFkaWFucykKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXpl
JiBzaXplKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlw
T3V0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBPdXRFbGxpcHNlSW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRl
ZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QsIGludCB0aGlja25lc3MpCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSkKK3sKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgS1VSTCYgbGluaywgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtRm9udChjb25zdCBGb250JiBmb250KQoreworICAgIG1fZGF0YS0+
bV92aWV3LT5TZXRGb250KGZvbnQucHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkuZm9udCgp
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29u
c3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fZGF0YS0+bV92aWV3LT5TZXRIaWdoQ29sb3IoY29sb3IpOworfQor
CitwYXR0ZXJuIEdyYXBoaWNzQ29udGV4dDo6Z2V0SGFpa3VTdHJva2VTdHlsZSgpCit7CisgICAg
c3dpdGNoIChzdHJva2VTdHlsZSgpKSB7CisgICAgY2FzZSBTb2xpZFN0cm9rZToKKyAgICAgICAg
cmV0dXJuIEJfU09MSURfSElHSDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEb3R0ZWRTdHJv
a2U6CisgICAgICAgIHJldHVybiBCX01JWEVEX0NPTE9SUzsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBEYXNoZWRTdHJva2U6CisgICAgICAgIC8vIEZJWE1FOiB1c2UgYSBiZXR0ZXIgZGFzaGVk
IHN0cm9rZSEKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgcmV0dXJuIEJfTUlY
RURfQ09MT1JTOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
Ql9TT0xJRF9MT1c7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoY29uc3QgU3Ryb2tlU3R5bGUmIHN0cm9rZVN0
eWxlKQoreworICAgIC8vIEZJWE1FOiBzZWUgZ2V0SGFpa3VTdHJva2VTdHlsZS4KKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJv
a2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+bV92aWV3LT5TZXRQZW5TaXplKHRo
aWNrbmVzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xv
cihjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5tX3ZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TaGFkb3coSW50U2l6ZSBjb25zdCYsIGludCwgQ29sb3IgY29uc3QmKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmQ4Y2NlOGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhaWt1L0ljb25IYWlrdS5jcHAKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29t
PgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJY29uLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSWNvbjo6SWNvbigpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworSWNvbjo6fkljb24oKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK1Bhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGUo
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiAwOworfQorCitQYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0ltYWdlQnVmZmVyRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9J
bWFnZUJ1ZmZlckRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTc4
YzM0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9J
bWFnZUJ1ZmZlckRhdGEuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhX2gKKyNkZWZpbmUg
SW1hZ2VCdWZmZXJEYXRhX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgSW50
U2l6ZTsKKworICAgIGNsYXNzIEltYWdlQnVmZmVyRGF0YSB7CisgICAgcHVibGljOgorICAgICAg
ICBJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpOworICAgIH07CisKK30gIC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gSW1hZ2VCdWZmZXJEYXRhX2gKKwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYyYjNlYQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAK
QEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24g
PHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNv
bnN0IEludFNpemUmKQoreworfQorCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50
U2l6ZSYsIEltYWdlQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIGJvb2wmIHN1Y2Nlc3MpCisg
ICAgOiBtX2RhdGEoSW50U2l6ZSgpKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3Vj
Y2VzcyA9IGZhbHNlOworfQorCitJbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkKK3sKK30KKwor
R3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxJbWFnZURhdGE+
IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYpIGNvbnN0Cit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6
cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIEltYWdlQnVmZmVyOjp0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBTdHJpbmcoKTsKK30KKworSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZSgpIGNvbnN0
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+JiBs
b29rVXBUYWJsZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
SW1hZ2VIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFp
a3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMmFmMWEKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFpa3Uu
Y3BwCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVl
bGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4g
PHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1
c21hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxl
YXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFuZHJlYSBBbnphbmkg
PGFuZHJlYS5hbnphbmlAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisKKyNpbmNsdWRl
ICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgPEFwcGxpY2F0aW9uLmg+CisjaW5jbHVkZSA8Qml0
bWFwLmg+CisjaW5jbHVkZSA8Vmlldy5oPgorCisjaW5jbHVkZSA8bWF0aC5oPgorCisKKy8vIFRo
aXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0CitWZWN0b3I8Y2hhcj4gbG9h
ZFJlc291cmNlSW50b0FycmF5KGNvbnN0IGNoYXIqKTsKKworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2Jvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCit7CisgICAgaWYg
KGNsZWFyTWV0YWRhdGEpCisgICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7CisKKyAgICBp
ZiAobV9mcmFtZSkgeworICAgICAgICAvLyBGSVhNRTogTm90IHN1cmUgd2h5IGJlX2FwcCBpcyBj
aGVja2VkCisgICAgICAgIGlmIChiZV9hcHApCisgICAgICAgICAgICBkZWxldGUgbV9mcmFtZTsK
KyAgICAgICAgbV9mcmFtZSA9IDA7CisgICAgICAgIG1fZHVyYXRpb24gPSAwLjBmOworICAgICAg
ICBtX2hhc0FscGhhID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitXVEY6OlBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlOjpsb2FkUGxh
dGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIFZlY3RvcjxjaGFyPiBhcnJh
eSA9IGxvYWRSZXNvdXJjZUludG9BcnJheShuYW1lKTsKKyAgICBXVEY6OlBhc3NSZWZQdHI8Qml0
bWFwSW1hZ2U+IGltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGFycmF5LmRhdGEoKSwgYXJy
YXkuc2l6ZSgpKTsKKyAgICBpbWFnZS0+c2V0RGF0YShidWZmZXIsIHRydWUpOworICAgIHJldHVy
biBpbWFnZTsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6aW5pdFBsYXRmb3JtRGF0YSgpCit7Cit9
CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQoreworfQorCisv
LyBEcmF3aW5nIFJvdXRpbmVzCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb21w
b3NpdGVPcGVyYXRvciBvcCkKK3sKKyAgICBzdGFydEFuaW1hdGlvbigpOworCisgICAgQkJpdG1h
cCogaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghaW1hZ2Ug
fHwgIWltYWdlLT5Jc1ZhbGlkKCkpIC8vIElmIHRoZSBpbWFnZSBoYXNuJ3QgZnVsbHkgbG9hZGVk
LgorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsK
KyAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRzdCwgc29saWRDb2xvcigpLCBvcCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjdHh0LT5zYXZlKCk7CisKKyAgICBjdHh0
LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOworCisgICAgQlJlY3Qgc3JjUmVjdChzcmMpOwor
ICAgIEJSZWN0IGRzdFJlY3QoZHN0KTsKKworICAgIC8vIFRlc3QgdXNpbmcgZXhhbXBsZSBzaXRl
IGF0CisgICAgLy8gaHR0cDovL3d3dy5tZXllcndlYi5jb20vZXJpYy9jc3MvZWRnZS9jb21wbGV4
c3BpcmFsL2RlbW8uaHRtbAorICAgIGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5TZXREcmF3aW5n
TW9kZShCX09QX0FMUEhBKTsKKyAgICBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+RHJhd0JpdG1h
cChpbWFnZSwgc3JjUmVjdCAmIGltYWdlLT5Cb3VuZHMoKSwgZHN0UmVjdCk7CisKKyAgICBjdHh0
LT5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50LCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0KQoreworICAgIC8v
IEZJWE1FOiBmaW5pc2ggdGhpcyB0byBzdXBwb3J0IGFsc28gcGhhc2VkIHBvc2l0aW9uIChzcmNQ
b2ludCkKKworICAgIEJCaXRtYXAqIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KTsKKyAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+SXNWYWxpZCgpKSAvLyBJZiB0aGUgaW1hZ2Ug
aGFzbid0IGZ1bGx5IGxvYWRlZC4KKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgY3VycmVu
dFcgPSAwOworICAgIGZsb2F0IGN1cnJlbnRIID0gMDsKKworICAgIGNvbnRleHQtPnNhdmUoKTsK
KworICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5TZXREcmF3aW5nTW9kZShCX09QX0FM
UEhBKTsKKworICAgIGNvbnRleHQtPmNsaXAoZW5jbG9zaW5nSW50UmVjdChkc3RSZWN0KSk7CisK
KyAgICB3aGlsZSAoY3VycmVudFcgPCBkc3RSZWN0LndpZHRoKCkpIHsKKyAgICAgICAgd2hpbGUg
KGN1cnJlbnRIIDwgZHN0UmVjdC5oZWlnaHQoKSkgeworICAgICAgICAgICAgY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPkRyYXdCaXRtYXAoaW1hZ2UsIEJQb2ludChkc3RSZWN0LngoKSArIGN1
cnJlbnRXLCBkc3RSZWN0LnkoKSArIGN1cnJlbnRIKSk7CisgICAgICAgICAgICBjdXJyZW50SCAr
PSB0aWxlUmVjdC5oZWlnaHQoKTsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50VyArPSB0aWxl
UmVjdC53aWR0aCgpOworICAgICAgICBjdXJyZW50SCA9IDA7CisgICAgfQorICAgIGNvbnRleHQt
PnJlc3RvcmUoKTsKKworICAgIHN0YXJ0QW5pbWF0aW9uKCk7Cit9CisKK3ZvaWQgQml0bWFwSW1h
Z2U6OmNoZWNrRm9yU29saWRDb2xvcigpCit7CisgICAgLy8gRklYTUU6IG5lZWQgdG8gY2hlY2sg
dGhlIFJHQkEzMiBidWZmZXIgdG8gc2VlIGlmIGl0IGlzIDF4MS4KKyAgICBtX2lzU29saWRDb2xv
ciA9IGZhbHNlOworICAgIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IgPSB0cnVlOworfQorCitCQml0
bWFwKiBCaXRtYXBJbWFnZTo6Z2V0Qml0bWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3Rf
Y2FzdDxCaXRtYXBJbWFnZSo+KHRoaXMpLT5mcmFtZUF0SW5kZXgoMCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9JbWFnZVNvdXJjZUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvSW1hZ2VTb3VyY2VIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNjZmODQ4NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvSW1hZ2VTb3VyY2VIYWlrdS5jcHAKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQW5kcmVhIEFuemFuaSAgIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNv
bT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorCisjaW5jbHVkZSAiQk1QSW1hZ2VEZWNvZGVy
LmgiCisjaW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiSUNPSW1hZ2VEZWNv
ZGVyLmgiCisvLyNpbmNsdWRlICJKUEVHSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiUE5HSW1h
Z2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiVHJhbnNs
YXRvckRlY29kZXIuaCIKKyNpbmNsdWRlICJYQk1JbWFnZURlY29kZXIuaCIKKworI2luY2x1ZGUg
PEJpdG1hcC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHVzZSB0aGUgSGFpa3UgdHJhbnNsYXRvciBBUEkKK0ltYWdlRGVjb2RlciogY3JlYXRlRGVj
b2Rlcihjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7CisgICAgLy8gV2UgbmVlZCBhdCBsZWFz
dCA0IGJ5dGVzIHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGltYWdlIHdlJ3JlIGRlYWxpbmcg
d2l0aC4KKyAgICBpbnQgbGVuZ3RoID0gZGF0YS5zaXplKCk7CisgICAgaWYgKGxlbmd0aCA8IDQp
CisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgdW5zaWduZWQgY2hhciogdUNvbnRlbnRz
ID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWRhdGEuZGF0YSgpOworICAgIGNvbnN0IGNoYXIqIGNv
bnRlbnRzID0gZGF0YS5kYXRhKCk7CisKKyAgICAvLyBHSUZzIGJlZ2luIHdpdGggR0lGOCg3IG9y
IDkpLgorICAgIGlmIChzdHJuY21wKGNvbnRlbnRzLCAiR0lGOCIsIDQpID09IDApCisgICAgICAg
IHJldHVybiBuZXcgR0lGSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAvLyBUZXN0IGZvciBQTkcuCisg
ICAgaWYgKHVDb250ZW50c1swXT09MHg4OSAmJgorICAgICAgICB1Q29udGVudHNbMV09PTB4NTAg
JiYKKyAgICAgICAgdUNvbnRlbnRzWzJdPT0weDRFICYmCisgICAgICAgIHVDb250ZW50c1szXT09
MHg0NykKKyAgICAgICAgcmV0dXJuIG5ldyBQTkdJbWFnZURlY29kZXIoKTsKKworICAgIC8vIEpQ
RUcKKyAgICAvL2lmICh1Q29udGVudHNbMF09PTB4RkYgJiYKKyAgICAvLyAgICB1Q29udGVudHNb
MV09PTB4RDggJiYKKyAgICAvLyAgICB1Q29udGVudHNbMl09PTB4RkYpCisgICAgLy8gICAgcmV0
dXJuIG5ldyBKUEVHSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAvLyBCTVAKKyAgICBpZiAoc3RybmNt
cChjb250ZW50cywgIkJNIiwgMikgPT0gMCkKKyAgICAgICAgcmV0dXJuIG5ldyBCTVBJbWFnZURl
Y29kZXIoKTsKKworICAgIC8vIElDT3MgYWx3YXlzIGJlZ2luIHdpdGggYSAyLWJ5dGUgMCBmb2xs
b3dlZCBieSBhIDItYnl0ZSAxLgorICAgIC8vIENVUnMgYmVnaW4gd2l0aCAyLWJ5dGUgMCBmb2xs
b3dlZCBieSAyLWJ5dGUgMi4KKyAgICBpZiAoIW1lbWNtcChjb250ZW50cywgIlwwMDBcMDAwXDAw
MVwwMDAiLCA0KSB8fAorICAgICAgICAhbWVtY21wKGNvbnRlbnRzLCAiXDAwMFwwMDBcMDAyXDAw
MCIsIDQpKQorICAgICAgICByZXR1cm4gbmV3IElDT0ltYWdlRGVjb2RlcigpOworCisgICAgLy8g
WEJNcyByZXF1aXJlIDggYnl0ZXMgb2YgaW5mby4KKyAgICBpZiAobGVuZ3RoID49IDggJiYgc3Ry
bmNtcChjb250ZW50cywgIiNkZWZpbmUgIiwgOCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIG5ldyBY
Qk1JbWFnZURlY29kZXIoKTsKKworICAgIC8vIEdpdmUgdXAuIFdlIGRvbid0IGtub3cgd2hhdCB0
aGUgaGVjayB0aGlzIGlzLgorICAgIHJldHVybiAwOworfQorCitJbWFnZVNvdXJjZTo6SW1hZ2VT
b3VyY2UoKQorICAgIDogbV9kZWNvZGVyKDApCit7Cit9CisKK0ltYWdlU291cmNlOjp+SW1hZ2VT
b3VyY2UoKQoreworICAgIGNsZWFyKHRydWUpOworfQorCit2b2lkIEltYWdlU291cmNlOjpjbGVh
cihib29sIGRlc3Ryb3lBbGwsIHNpemVfdCBjbGVhckJlZm9yZUZyYW1lLCBTaGFyZWRCdWZmZXIq
IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIGlmICghZGVzdHJveUFsbCkgewor
ICAgICAgICBpZiAobV9kZWNvZGVyKQorICAgICAgICAgICAgbV9kZWNvZGVyLT5jbGVhckZyYW1l
QnVmZmVyQ2FjaGUoY2xlYXJCZWZvcmVGcmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBkZWxldGUgbV9kZWNvZGVyOworICAgIG1fZGVjb2RlciA9IDA7CisgICAgaWYgKGRhdGEp
CisgICAgICAgIHNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKworYm9vbCBJbWFn
ZVNvdXJjZTo6aW5pdGlhbGl6ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RlY29kZXI7Cit9
CisKK3ZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFs
bERhdGFSZWNlaXZlZCkKK3sKKyAgICAvLyBNYWtlIHRoZSBkZWNvZGVyIGJ5IHNuaWZmaW5nIHRo
ZSBieXRlcy4KKyAgICAvLyBUaGlzIG1ldGhvZCB3aWxsIGV4YW1pbmUgdGhlIGRhdGEgYW5kIGlu
c3RhbnRpYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBhcHByb3ByaWF0ZSBkZWNvZGVyIHBsdWdpbi4K
KyAgICAvLyBJZiBpbnN1ZmZpY2llbnQgYnl0ZXMgYXJlIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUg
dGhlIGltYWdlIHR5cGUsIG5vIGRlY29kZXIgcGx1Z2luIHdpbGwgYmUKKyAgICAvLyBtYWRlLgor
ICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICBtX2RlY29kZXIgPSBjcmVhdGVEZWNvZGVyKGRh
dGEtPmJ1ZmZlcigpKTsKKworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2RlY29kZXItPnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKworU3Ry
aW5nIEltYWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Cit7CisgICAgaWYgKCFt
X2RlY29kZXIpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiBtX2RlY29k
ZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCk7Cit9CisKK2Jvb2wgSW1hZ2VTb3VyY2U6OmlzU2l6ZUF2
YWlsYWJsZSgpCit7CisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBtX2RlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpOworfQorCitJbnRTaXpl
IEltYWdlU291cmNlOjpzaXplKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAg
ICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIHJldHVybiBtX2RlY29kZXItPnNpemUoKTsKK30K
KworSW50U2l6ZSBJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHNpemUoKTsKK30KKworaW50IEltYWdlU291cmNlOjpyZXBldGl0aW9uQ291
bnQoKQoreworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gY0FuaW1hdGlvbk5v
bmU7CisKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKTsKK30KKworc2l6
ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWNv
ZGVyID8gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCkgOiAwOworfQorCitOYXRpdmVJbWFnZVB0ciBJ
bWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAo
IWluaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFtX2RlY29kZXIp
CisgICAgICAgIHJldHVybiAwOworCisgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29k
ZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVy
LT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIGJ1ZmZlci0+YXNOZXdOYXRpdmVJbWFnZSgpOworfQorCitib29sIElt
YWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBp
ZiAoIW1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUkdCQTMyQnVmZmVy
KiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgcmV0
dXJuIGJ1ZmZlciAmJiBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21w
bGV0ZTsKK30KKworZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVf
dCBpbmRleCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGlu
ZGV4KTsKKyAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZl
cjo6RnJhbWVFbXB0eSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYnVmZmVyLT5k
dXJhdGlvbigpIC8gMTAwMC4wZjsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVIYXNBbHBo
YUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmICghZnJhbWVJc0NvbXBsZXRlQXRJbmRl
eChpbmRleCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIG1fZGVjb2Rlci0+
ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KS0+aGFzQWxwaGEoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCi0tIAoxLjYuMy4yCgo=
</data>
<flag name="review"
          id="18598"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34566</attachid>
            <date>2009-08-11 09:34:05 -0700</date>
            <delta_ts>2009-08-13 01:46:02 -0700</delta_ts>
            <desc>Patch to add four image-specific files to WebCore/platform/graphics/.</desc>
            <filename>Adding-four-image-specific-files-to-WebCore.patch</filename>
            <type>text/plain</type>
            <size>14159</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBmM2I4ZWRlOTc5MGFiNjZjNTQ5Zjg1ZmVhNGZkYjFhYzU2MjE3N2NkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgMTEgQXVnIDIwMDkgMTg6Mjg6MTUgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRpbmcgZm91ciBpbWFnZS1zcGVjaWZpYyBmaWxlcyB0byBXZWJDb3JlLgoKLS0tCiBXZWJDb3Jl
L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzUgKysrKysK
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcCAgICAgIHwgICA2
MiArKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckRh
dGEuaCAgfCAgIDQzICsrKysrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVm
ZmVySGFpa3UuY3BwICAgfCAgIDg2ICsrKysrKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwICAgICB8ICAxNTIgKysrKysrKysrKysrKysrKysrKysK
IDUgZmlsZXMgY2hhbmdlZCwgMzc4IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVh
dGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JY29uSGFpa3Uu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9J
bWFnZUJ1ZmZlckRhdGEuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwCgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmMDI1NWMzLi44MDYx
MTI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDM4IEBACisyMDA5LTA4LTExICBNYXhpbWUgU2ltb24gIDxzaW1vbi5tYXhp
bWVAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtIYWlrdV0gQWRkaW5nIGZvdXIgaW1hZ2Utc3BlY2lmaWMgZmlsZXMgdG8gV2ViQ29y
ZToKKyAgICAgICAgSWNvbkhhaWt1LmNwcCwgSW1hZ2VCdWZmZXJEYXRhLmgsIEltYWdlQnVmZmVy
SGFpa3UuY3BwLCBJbWFnZUhhaWt1LmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjgxMzAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0ljb25IYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6SWNvbik6
CisgICAgICAgIChXZWJDb3JlOjpJY29uOjp+SWNvbik6CisgICAgICAgIChXZWJDb3JlOjpJY29u
OjpjcmVhdGVJY29uRm9yRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpjcmVhdGVJY29u
Rm9yRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGFpbnQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6aW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBs
YXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvSW1hZ2VIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRh
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2Up
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmluaXRQbGF0Zm9ybURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjaGVja0Zv
clNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmdldEJCaXRtYXAp
OgorCiAyMDA5LTA4LTExICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKGJ1aWxkIGZpeCkuCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ljb25IYWlrdS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ljb25IYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZDhjY2U4YgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcApAQCAtMCwwICsxLDYyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5j
b20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24s
IE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkljb24uaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJY29uOjpJY29uKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitJY29uOjp+SWNvbigpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworUGFzc1JlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9yRmls
ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvSW1hZ2VCdWZmZXJEYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ltYWdlQnVmZmVyRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5
NzhjMzQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ltYWdlQnVmZmVyRGF0YS5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbWFnZUJ1ZmZlckRhdGFfaAorI2RlZmlu
ZSBJbWFnZUJ1ZmZlckRhdGFfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBJ
bnRTaXplOworCisgICAgY2xhc3MgSW1hZ2VCdWZmZXJEYXRhIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIEltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJik7CisgICAgfTsKKworfSAgLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmICAvLyBJbWFnZUJ1ZmZlckRhdGFfaAorCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjJiM2VhCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNw
cApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1v
biA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEo
Y29uc3QgSW50U2l6ZSYpCit7Cit9CisKK0ltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJ
bnRTaXplJiwgSW1hZ2VDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwgYm9vbCYgc3VjY2VzcykK
KyAgICA6IG1fZGF0YShJbnRTaXplKCkpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBz
dWNjZXNzID0gZmFsc2U7Cit9CisKK0ltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKQoreworfQor
CitHcmFwaGljc0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitQYXNzUmVmUHRyPEltYWdlRGF0
YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3QKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEltYWdlQnVmZmVy
OjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50
JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRv
RGF0YVVSTChjb25zdCBTdHJpbmcmKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIFN0cmluZygpOworfQorCitJbWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIElt
YWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4m
IGxvb2tVcFRhYmxlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9JbWFnZUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VI
YWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIzZDZhYgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlr
dS5jcHAKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBN
dWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNp
biA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxo
YXVzbWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8
bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5kcmVhIEFuemFu
aSA8YW5kcmVhLmFuemFuaUBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKworI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPEFwcGxpY2F0aW9uLmg+CisjaW5jbHVkZSA8Qml0
bWFwLmg+CisjaW5jbHVkZSA8Vmlldy5oPgorCisKKy8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVz
b3VyY2VzIGZyb20gV2ViS2l0CitWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNv
bnN0IGNoYXIqKTsKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRnJhbWVEYXRhOjpj
bGVhcihib29sIGNsZWFyTWV0YWRhdGEpCit7CisgICAgaWYgKGNsZWFyTWV0YWRhdGEpCisgICAg
ICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7CisKKyAgICBpZiAobV9mcmFtZSkgeworICAgICAg
ICBkZWxldGUgbV9mcmFtZTsKKyAgICAgICAgbV9mcmFtZSA9IDA7CisgICAgICAgIG1fZHVyYXRp
b24gPSAwLjBmOworICAgICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitXVEY6OlBhc3NSZWZQdHI8SW1h
Z2U+IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKQoreworICAg
IFZlY3RvcjxjaGFyPiBhcnJheSA9IGxvYWRSZXNvdXJjZUludG9BcnJheShuYW1lKTsKKyAgICBX
VEY6OlBhc3NSZWZQdHI8Qml0bWFwSW1hZ2U+IGltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKKyAgICBpbWFnZS0+c2V0RGF0YShidWZmZXIs
IHRydWUpOworCisgICAgcmV0dXJuIGltYWdlOworfQorCit2b2lkIEJpdG1hcEltYWdlOjppbml0
UGxhdGZvcm1EYXRhKCkKK3sKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRm
b3JtRGF0YSgpCit7Cit9CisKKy8vIERyYXdpbmcgUm91dGluZXMKK3ZvaWQgQml0bWFwSW1hZ2U6
OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmMsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIHN0YXJ0QW5pbWF0
aW9uKCk7CisKKyAgICBCQml0bWFwKiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CisgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPklzVmFsaWQoKSkgLy8gSWYgdGhlIGltYWdl
IGhhc24ndCBmdWxseSBsb2FkZWQuCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtYXlGaWxs
V2l0aFNvbGlkQ29sb3IoKSkgeworICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZHN0
LCBzb2xpZENvbG9yKCksIG9wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGN0eHQt
PnNhdmUoKTsKKyAgICBjdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOworCisgICAgQlJl
Y3Qgc3JjUmVjdChzcmMpOworICAgIEJSZWN0IGRzdFJlY3QoZHN0KTsKKworICAgIC8vIFRlc3Qg
dXNpbmcgZXhhbXBsZSBzaXRlIGF0CisgICAgLy8gaHR0cDovL3d3dy5tZXllcndlYi5jb20vZXJp
Yy9jc3MvZWRnZS9jb21wbGV4c3BpcmFsL2RlbW8uaHRtbAorICAgIGN0eHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5TZXREcmF3aW5nTW9kZShCX09QX0FMUEhBKTsKKyAgICBjdHh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+RHJhd0JpdG1hcChpbWFnZSwgc3JjUmVjdCAmIGltYWdlLT5Cb3VuZHMoKSwgZHN0
UmVjdCk7CisgICAgY3R4dC0+cmVzdG9yZSgpOworfQorCit2b2lkIEltYWdlOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBzcmNQb2ludCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCkKK3sKKyAgICAvLyBGSVhNRTogZmluaXNoIHRoaXMgdG8gc3VwcG9ydCBhbHNvIHBoYXNl
ZCBwb3NpdGlvbiAoc3JjUG9pbnQpCisgICAgc3RhcnRBbmltYXRpb24oKTsKKworICAgIEJCaXRt
YXAqIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIWltYWdl
IHx8ICFpbWFnZS0+SXNWYWxpZCgpKSAvLyBJZiB0aGUgaW1hZ2UgaGFzbid0IGZ1bGx5IGxvYWRl
ZC4KKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgY3VycmVudFdpZHRoID0gMDsKKyAgICBm
bG9hdCBjdXJyZW50SGVpZ2h0ID0gMDsKKworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+U2V0RHJhd2luZ01vZGUoQl9PUF9BTFBIQSk7CisgICAg
Y29udGV4dC0+Y2xpcChlbmNsb3NpbmdJbnRSZWN0KGRzdFJlY3QpKTsKKworICAgIHdoaWxlIChj
dXJyZW50V2lkdGggPCBkc3RSZWN0LndpZHRoKCkpIHsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRI
ZWlnaHQgPCBkc3RSZWN0LmhlaWdodCgpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+RHJhd0JpdG1hcChpbWFnZSwgQlBvaW50KGRzdFJlY3QueCgpICsgY3VycmVu
dFdpZHRoLCBkc3RSZWN0LnkoKSArIGN1cnJlbnRIZWlnaHQpKTsKKyAgICAgICAgICAgIGN1cnJl
bnRIZWlnaHQgKz0gdGlsZVJlY3QuaGVpZ2h0KCk7CisgICAgICAgIH0KKyAgICAgICAgY3VycmVu
dFdpZHRoICs9IHRpbGVSZWN0LndpZHRoKCk7CisgICAgICAgIGN1cnJlbnRIZWlnaHQgPSAwOwor
ICAgIH0KKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmNo
ZWNrRm9yU29saWRDb2xvcigpCit7CisgICAgLy8gRklYTUU6IG5lZWQgdG8gY2hlY2sgdGhlIFJH
QkEzMiBidWZmZXIgdG8gc2VlIGlmIGl0IGlzIDF4MS4KKyAgICBtX2lzU29saWRDb2xvciA9IGZh
bHNlOworICAgIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IgPSB0cnVlOworfQorCitCQml0bWFwKiBC
aXRtYXBJbWFnZTo6Z2V0QkJpdG1hcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
Qml0bWFwSW1hZ2UqPih0aGlzKS0+ZnJhbWVBdEluZGV4KDApOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKLS0gCjEuNi40Cgo=
</data>
<flag name="review"
          id="18721"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34568</attachid>
            <date>2009-08-11 09:43:24 -0700</date>
            <delta_ts>2009-08-12 14:02:34 -0700</delta_ts>
            <desc>Patch to add GraphicsContext to WebCore/platform/graphics/haiku.</desc>
            <filename>Adding-GraphicsContext-to-WebCore-platform-graphics-.patch</filename>
            <type>text/plain</type>
            <size>16968</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA5ZDMyYTFiNTllOGIxNDg0Y2ZhMzA3MzI4NTczYzJhYjY2NjZjODk2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgMTEgQXVnIDIwMDkgMTg6NDI6MTIgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRpbmcgR3JhcGhpY3NDb250ZXh0IHRvIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uu
CgotLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICA2MiArKysKIC4uLi9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAg
ICAgICAgIHwgIDUzNiArKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA1OTgg
aW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAoKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjAyNTVj
My4uOTdlMTQzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw2NSBAQAorMjAwOS0wOC0xMSAgTWF4aW1lIFNpbW9uICA8c2lt
b24ubWF4aW1lQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbSGFpa3VdIEFkZGluZyBHcmFwaGljc0NvbnRleHQgdG8gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI4MTMwCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnBsYXRmb3JtQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YmVnaW5Q
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEFs
cGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6b3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0RWxsaXBzZUluUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RDbGlw
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9y
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRm9u
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tl
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRIYWlrdVN0cm9r
ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
dHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtU3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1GaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpjbGVhclBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1TaGFkb3cpOgorCiAyMDA5LTA4LTExICBTaW1vbiBIYXVzbWFubiAgPHNp
bW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKGJ1
aWxkIGZpeCkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dy
YXBoaWNzQ29udGV4dEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
R3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmQ3ODVlZjQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcApAQCAtMCwwICsxLDUzNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29t
PgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgor
I2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnREYXRh
LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisjaW5j
bHVkZSAiUGVuLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRl
IDxHcmFwaGljc0RlZnMuaD4KKyNpbmNsdWRlIDxSZWdpb24uaD4KKyNpbmNsdWRlIDxWaWV3Lmg+
CisjaW5jbHVkZSA8V2luZG93Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSB7CitwdWJs
aWM6CisgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKEJWaWV3KiB2aWV3KTsKKyAg
ICB+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCk7CisKKyAgICBCVmlldyogbV92aWV3
OworfTsKKworR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGUoQlZpZXcqIHZpZXcpCisgICAgOiBtX3ZpZXcodmlldykKK3sKK30KKwor
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKCkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCisgICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGlj
c0NvbnRleHRQcml2YXRlKCkpCisgICAgLCBtX2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZShjb250ZXh0KSkKK3sKKyAgICBzZXRQYWludGluZ0Rpc2FibGVkKCFjb250ZXh0
KTsKK30KKworR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKK3sKKyAgICBkZXN0
cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2NvbW1vbik7CisgICAgZGVsZXRlIG1fZGF0YTsK
K30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1D
b250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLT5tX3ZpZXc7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCit7CisgICAgbV9kYXRhLT5tX3Zp
ZXctPlB1c2hTdGF0ZSgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRm
b3JtU3RhdGUoKQoreworICAgIG1fZGF0YS0+bV92aWV3LT5Qb3BTdGF0ZSgpOworfQorCisvLyBE
cmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5tX3ZpZXct
PkZpbGxSZWN0KHJlY3QpOworICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKQorICAg
ICAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlUmVjdChyZWN0LCBnZXRIYWlrdVN0cm9rZVN0eWxl
KCkpOworfQorCisvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMuCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmIHBvaW50MSwgY29uc3QgSW50
UG9pbnQmIHBvaW50MikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9kYXRhLT5tX3ZpZXctPlN0cm9rZUxpbmUocG9pbnQxLCBwb2ludDIsIGdl
dEhhaWt1U3Ryb2tlU3R5bGUoKSk7Cit9CisKKy8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgdXNlZCB0
byBkcmF3IHRoZSBsaXR0bGUgY2lyY2xlcyB1c2VkIGluIGxpc3RzLgordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5tX3ZpZXctPkZp
bGxFbGxpcHNlKHJlY3QpOworICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKQorICAg
ICAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlRWxsaXBzZShyZWN0LCBnZXRIYWlrdVN0cm9rZVN0
eWxlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0IEludFJl
Y3QmIHJlY3QsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcGFuKQoreworICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+bV92aWV3LT5T
dHJva2VBcmMocmVjdCwgc3RhcnRBbmdsZSwgYW5nbGVTcGFuLCBnZXRIYWlrdVN0cm9rZVN0eWxl
KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5
Z29uKHNpemVfdCBwb2ludHNMZW5ndGgsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBz
aG91bGRBbnRpYWxpYXMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQlBvaW50IGJQb2ludHNbcG9pbnRzTGVuZ3RoXTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHBvaW50c0xlbmd0aDsgaSsrKQorICAgICAgICBiUG9pbnRzW2ldID0g
cG9pbnRzW2ldOworCisgICAgbV9kYXRhLT5tX3ZpZXctPkZpbGxQb2x5Z29uKGJQb2ludHMsIHBv
aW50c0xlbmd0aCk7CisgICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpCisgICAgICAg
IC8vIFN0cm9rZSB3aXRoIGxvdyBjb2xvcgorICAgICAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tl
UG9seWdvbihiUG9pbnRzLCBwb2ludHNMZW5ndGgsIHRydWUsIGdldEhhaWt1U3Ryb2tlU3R5bGUo
KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICByZ2JfY29sb3Igb2xkQ29sb3IgPSBtX2RhdGEtPm1f
dmlldy0+SGlnaENvbG9yKCk7CisgICAgbV9kYXRhLT5tX3ZpZXctPlNldEhpZ2hDb2xvcihjb2xv
cik7CisgICAgbV9kYXRhLT5tX3ZpZXctPkZpbGxSZWN0KHJlY3QpOworICAgIG1fZGF0YS0+bV92
aWV3LT5TZXRIaWdoQ29sb3Iob2xkQ29sb3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
b3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBj
b25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3Qg
SW50U2l6ZSYgYm90dG9tUmlnaHQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpIHx8ICFjb2xvci5hbHBoYSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIEZJWE1FOiBBIHNpbXBsZSBpbXBsZW1lbnRhdGlv
biBjb3VsZCBqdXN0IHVzZSBGaWxsUm91bmRSZWN0IGlmIGFsbAorICAgIC8vIHRoZSBzaXplcyBh
cmUgdGhlIHNhbWUsIG9yIGV2ZW4gaWYgdGhleSBhcmUgbm90LiBPdGhlcndpc2Ugc2V2ZXJhbAor
ICAgIC8vIEZpbGxSZWN0IGFuZCBGaWxsQXJjIGNhbGxzIGFyZSBuZWVkZWQuCit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGF0aCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZFBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQlJlZ2lvbiByZWdpb24ocmVjdCk7CisgICAgbV9k
YXRhLT5tX3ZpZXctPkNvbnN0cmFpbkNsaXBwaW5nUmVnaW9uKCZyZWdpb24pOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBDb2xvciYgY29sb3IpCit7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3Qg
VmVjdG9yPEludFJlY3Q+JiByZWN0cyA9IGZvY3VzUmluZ1JlY3RzKCk7CisgICAgdW5zaWduZWQg
cmVjdENvdW50ID0gcmVjdHMuc2l6ZSgpOworCisgICAgLy8gRklYTUU6IG1heWJlIHdlIHNob3Vs
ZCBpbXBsZW1lbnQgdGhpcyB3aXRoIEJTaGFwZT8KKworICAgIGlmIChyZWN0cy5zaXplKCkgPiAx
KSB7CisgICAgICAgIEJSZWdpb24gICAgcmVnaW9uOworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHJlY3RDb3VudDsgKytpKQorICAgICAgICAgICAgcmVnaW9uLkluY2x1ZGUoQlJlY3QocmVj
dHNbaV0pKTsKKworICAgICAgICBtX2RhdGEtPm1fdmlldy0+U2V0SGlnaENvbG9yKGNvbG9yKTsK
KyAgICAgICAgbV9kYXRhLT5tX3ZpZXctPlN0cm9rZVJlY3QocmVnaW9uLkZyYW1lKCksIEJfTUlY
RURfQ09MT1JTKTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZv
clRleHQoY29uc3QgSW50UG9pbnQmIG9yaWdpbiwgaW50IHdpZHRoLCBib29sIHByaW50aW5nKQor
eworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIElu
dFBvaW50IGVuZFBvaW50ID0gb3JpZ2luICsgSW50U2l6ZSh3aWR0aCwgMCk7CisgICAgZHJhd0xp
bmUob3JpZ2luLCBlbmRQb2ludCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZUZvck1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGNvbnN0IEludFBvaW50JiwgaW50IHdpZHRoLCBi
b29sIGdyYW1tYXIpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworRmxvYXRSZWN0IEdyYXBoaWNzQ29u
dGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gcmVjdDsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQor
eworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCit7
CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxv
YXQgb2xkU2l6ZSA9IG1fZGF0YS0+bV92aWV3LT5QZW5TaXplKCk7CisgICAgbV9kYXRhLT5tX3Zp
ZXctPlNldFBlblNpemUod2lkdGgpOworICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VSZWN0KHJl
Y3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAgbV9kYXRhLT5tX3ZpZXctPlNldFBlblNp
emUob2xkU2l6ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVD
YXAgbGluZUNhcCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBjYXBfbW9kZSBtb2RlID0gQl9CVVRUX0NBUDsKKyAgICBzd2l0Y2ggKGxpbmVD
YXApIHsKKyAgICBjYXNlIFJvdW5kQ2FwOgorICAgICAgICBtb2RlID0gQl9ST1VORF9DQVA7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU3F1YXJlQ2FwOgorICAgICAgICBtb2RlID0gQl9TUVVB
UkVfQ0FQOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJ1dHRDYXA6CisgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9kYXRhLT5tX3ZpZXctPlNldExpbmVNb2Rl
KG1vZGUsIG1fZGF0YS0+bV92aWV3LT5MaW5lSm9pbk1vZGUoKSwgbV9kYXRhLT5tX3ZpZXctPkxp
bmVNaXRlckxpbWl0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4o
TGluZUpvaW4gbGluZUpvaW4pCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgam9pbl9tb2RlIG1vZGUgPSBCX01JVEVSX0pPSU47CisgICAgc3dp
dGNoIChsaW5lSm9pbikgeworICAgIGNhc2UgUm91bmRKb2luOgorICAgICAgICBtb2RlID0gQl9S
T1VORF9KT0lOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJldmVsSm9pbjoKKyAgICAgICAg
bW9kZSA9IEJfQkVWRUxfSk9JTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNaXRlckpvaW46
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9kYXRhLT5tX3Zp
ZXctPlNldExpbmVNb2RlKG1fZGF0YS0+bV92aWV3LT5MaW5lQ2FwTW9kZSgpLCBtb2RlLCBtX2Rh
dGEtPm1fdmlldy0+TGluZU1pdGVyTGltaXQoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+bV92aWV3LT5TZXRMaW5lTW9kZSht
X2RhdGEtPm1fdmlldy0+TGluZUNhcE1vZGUoKSwgbV9kYXRhLT5tX3ZpZXctPkxpbmVKb2luTW9k
ZSgpLCBsaW1pdCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYShmbG9hdCBv
cGFjaXR5KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRD
b21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZHJhd2luZ19tb2RlIG1vZGUg
PSBCX09QX0NPUFk7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgQ29tcG9zaXRlQ2xlYXI6
CisgICAgY2FzZSBDb21wb3NpdGVDb3B5OgorICAgICAgICAvLyBVc2UgdGhlIGRlZmF1bHQgYWJv
dmUKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdmVyOgorICAgICAg
ICBtb2RlID0gQl9PUF9PVkVSOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uOiBVbnN1cHBv
cnRlZCBjb21wb3NpdGUgb3BlcmF0aW9uICVzXG4iLAorICAgICAgICAgICAgICAgIGNvbXBvc2l0
ZU9wZXJhdG9yTmFtZShvcCkudXRmOCgpLmRhdGEoKSk7CisgICAgfQorICAgIG1fZGF0YS0+bV92
aWV3LT5TZXREcmF3aW5nTW9kZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXAoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPm1fdmlldy0+Q29uc3RyYWluQ2xpcHBpbmdSZWdp
b24ocGF0aC5wbGF0Zm9ybVBhdGgoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlw
T3V0KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdl
QnVmZmVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQoreworICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK0ludFBvaW50IEdyYXBoaWNzQ29udGV4dDo6b3JpZ2luKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRQb2ludCgwLCAwKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnJvdGF0ZShmbG9hdCByYWRpYW5zKQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit7CisgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgSW50UmVj
dCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cE91dEVsbGlwc2VJblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoY29uc3Qg
SW50UmVjdCYgcmVjdCwgaW50IHRoaWNrbmVzcykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0pCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKGJvb2wgZW5hYmxlKQoreworICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KElu
dGVycG9sYXRpb25RdWFsaXR5KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJM
Rm9yUmVjdChjb25zdCBLVVJMJiBsaW5rLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1Gb250KGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgbV9kYXRhLT5tX3ZpZXctPlNldEZvbnQo
Zm9udC5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5mb250KCkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3Ip
Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9kYXRhLT5tX3ZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7Cit9CisKK3BhdHRlcm4gR3JhcGhp
Y3NDb250ZXh0OjpnZXRIYWlrdVN0cm9rZVN0eWxlKCkKK3sKKyAgICBzd2l0Y2ggKHN0cm9rZVN0
eWxlKCkpIHsKKyAgICBjYXNlIFNvbGlkU3Ryb2tlOgorICAgICAgICByZXR1cm4gQl9TT0xJRF9I
SUdIOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERvdHRlZFN0cm9rZToKKyAgICAgICAgcmV0
dXJuIEJfTUlYRURfQ09MT1JTOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERhc2hlZFN0cm9r
ZToKKyAgICAgICAgLy8gRklYTUU6IHVzZSBhIGJldHRlciBkYXNoZWQgc3Ryb2tlIQorICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICByZXR1cm4gQl9NSVhFRF9DT0xPUlM7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBCX1NPTElEX0xPVzsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TdHJva2VTdHlsZShjb25zdCBTdHJva2VTdHlsZSYgc3Ryb2tlU3R5bGUpCit7CisgICAgLy8g
RklYTUU6IHNlZSBnZXRIYWlrdVN0cm9rZVN0eWxlLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9h
dCB0aGlja25lc3MpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9kYXRhLT5tX3ZpZXctPlNldFBlblNpemUodGhpY2tuZXNzKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2RhdGEtPm1fdmlldy0+U2V0SGlnaENvbG9yKGNvbG9yKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3coKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhJbnRTaXpl
IGNvbnN0JiwgaW50LCBDb2xvciBjb25zdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCi0tIAoxLjYuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34570</attachid>
            <date>2009-08-11 09:59:18 -0700</date>
            <delta_ts>2009-08-13 02:20:42 -0700</delta_ts>
            <desc>Patch to add ImageSource to WebCore/platform/graphics/haiku.</desc>
            <filename>Adding-ImageSource-to-WebCore-platform-graphics-haik.patch</filename>
            <type>text/plain</type>
            <size>8210</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA0NWJlNDg3MWQ3N2JlMzY3MWE0YjJmZjM3ZDA2NDJlM2JlYzgzMWY2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgMTEgQXVnIDIwMDkgMTg6NTM6MTcgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRpbmcgSW1hZ2VTb3VyY2UgdG8gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS4KCi0t
LQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
IDI1ICsrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3Bw
ICAgfCAgMjIyICsrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDI0NyBpbnNl
cnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VTb3VyY2VIYWlrdS5jcHAKCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGYwMjU1YzMuLmEyNGRm
YzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjggQEAKKzIwMDktMDgtMTEgIE1heGltZSBTaW1vbiAgPHNpbW9uLm1heGlt
ZUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgW0hhaWt1XSBBZGRpbmcgSW1hZ2VTb3VyY2UgdG8gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTI4MTMwCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZVNvdXJj
ZUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWNvZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpJbWFnZVNvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6fkltYWdlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
U291cmNlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6aW5pdGlhbGl6
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VTb3VyY2U6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lU2l6
ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgpOgorCiAyMDA5LTA4LTExICBT
aW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKGJ1aWxkIGZpeCkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9JbWFnZVNvdXJjZUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5lZTIxODRjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9JbWFnZVNvdXJjZUhhaWt1LmNwcApAQCAtMCwwICsxLDIyMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWls
LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEgQW56YW5pICAgPGFuZHJlYS5hbnph
bmlAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCisKKyNpbmNsdWRlICJCTVBJ
bWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJHSUZJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJ
Q09JbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJQTkdJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJUcmFuc2xhdG9yRGVjb2Rlci5oIgorI2luY2x1
ZGUgIlhCTUltYWdlRGVjb2Rlci5oIgorCisjaW5jbHVkZSA8Qml0bWFwLmg+CisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogU2hvdWxkIHVzZSB0aGUgSGFpa3UgdHJhbnNsYXRv
ciBBUEkuCitJbWFnZURlY29kZXIqIGNyZWF0ZURlY29kZXIoY29uc3QgVmVjdG9yPGNoYXI+JiBk
YXRhKQoreworICAgIC8vIFdlIG5lZWQgYXQgbGVhc3QgNCBieXRlcyB0byBmaWd1cmUgb3V0IHdo
YXQga2luZCBvZiBpbWFnZSB3ZSdyZSBkZWFsaW5nIHdpdGguCisgICAgaW50IGxlbmd0aCA9IGRh
dGEuc2l6ZSgpOworICAgIGlmIChsZW5ndGggPCA0KQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIHVDb250ZW50cyA9IChjb25zdCB1bnNpZ25lZCBjaGFyKilk
YXRhLmRhdGEoKTsKKyAgICBjb25zdCBjaGFyKiBjb250ZW50cyA9IGRhdGEuZGF0YSgpOworCisg
ICAgLy8gR0lGcyBiZWdpbiB3aXRoIEdJRjgoNyBvciA5KS4KKyAgICBpZiAoIXN0cm5jbXAoY29u
dGVudHMsICJHSUY4IiwgNCkpCisgICAgICAgIHJldHVybiBuZXcgR0lGSW1hZ2VEZWNvZGVyKCk7
CisKKyAgICAvLyBUZXN0IGZvciBQTkcuCisgICAgaWYgKHVDb250ZW50c1swXSA9PSAweDg5Cisg
ICAgICAgICYmIHVDb250ZW50c1sxXSA9PSAweDUwCisgICAgICAgICYmIHVDb250ZW50c1syXSA9
PSAweDRFCisgICAgICAgICYmIHVDb250ZW50c1szXSA9PSAweDQ3KQorICAgICAgICByZXR1cm4g
bmV3IFBOR0ltYWdlRGVjb2RlcigpOworCisgICAgLy8gSlBFRworICAgIC8vIEZJWE1FOiBBZGQg
SlBFRyBzdXBwb3J0LgorCisgICAgLy8gQk1QCisgICAgaWYgKCFzdHJuY21wKGNvbnRlbnRzLCAi
Qk0iLCAyKSkKKyAgICAgICAgcmV0dXJuIG5ldyBCTVBJbWFnZURlY29kZXIoKTsKKworICAgIC8v
IElDT3MgYWx3YXlzIGJlZ2luIHdpdGggYSAyLWJ5dGUgMCBmb2xsb3dlZCBieSBhIDItYnl0ZSAx
LgorICAgIC8vIENVUnMgYmVnaW4gd2l0aCAyLWJ5dGUgMCBmb2xsb3dlZCBieSAyLWJ5dGUgMi4K
KyAgICBpZiAoIW1lbWNtcChjb250ZW50cywgIlwwMDBcMDAwXDAwMVwwMDAiLCA0KQorICAgICAg
ICB8fCAhbWVtY21wKGNvbnRlbnRzLCAiXDAwMFwwMDBcMDAyXDAwMCIsIDQpKQorICAgICAgICBy
ZXR1cm4gbmV3IElDT0ltYWdlRGVjb2RlcigpOworCisgICAgLy8gWEJNcyByZXF1aXJlIDggYnl0
ZXMgb2YgaW5mby4KKyAgICBpZiAobGVuZ3RoID49IDggJiYgIXN0cm5jbXAoY29udGVudHMsICIj
ZGVmaW5lICIsIDgpKQorICAgICAgICByZXR1cm4gbmV3IFhCTUltYWdlRGVjb2RlcigpOworCisg
ICAgLy8gR2l2ZSB1cC4gV2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBoZWNrIHRoaXMgaXMuCisgICAg
cmV0dXJuIDA7Cit9CisKK0ltYWdlU291cmNlOjpJbWFnZVNvdXJjZSgpCisgICAgOiBtX2RlY29k
ZXIoMCkKK3sKK30KKworSW1hZ2VTb3VyY2U6On5JbWFnZVNvdXJjZSgpCit7CisgICAgY2xlYXIo
dHJ1ZSk7Cit9CisKK3ZvaWQgSW1hZ2VTb3VyY2U6OmNsZWFyKGJvb2wgZGVzdHJveUFsbCwgc2l6
ZV90IGNsZWFyQmVmb3JlRnJhbWUsIFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVj
ZWl2ZWQpCit7CisgICAgaWYgKCFkZXN0cm95QWxsKSB7CisgICAgICAgIGlmIChtX2RlY29kZXIp
CisgICAgICAgICAgICBtX2RlY29kZXItPmNsZWFyRnJhbWVCdWZmZXJDYWNoZShjbGVhckJlZm9y
ZUZyYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRlbGV0ZSBtX2RlY29kZXI7
CisgICAgbV9kZWNvZGVyID0gMDsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgc2V0RGF0YShkYXRh
LCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCitib29sIEltYWdlU291cmNlOjppbml0aWFsaXplZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVjb2RlcjsKK30KKwordm9pZCBJbWFnZVNvdXJjZTo6
c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAg
IC8vIE1ha2UgdGhlIGRlY29kZXIgYnkgc25pZmZpbmcgdGhlIGJ5dGVzLgorICAgIC8vIFRoaXMg
bWV0aG9kIHdpbGwgZXhhbWluZSB0aGUgZGF0YSBhbmQgaW5zdGFudGlhdGUgYW4gaW5zdGFuY2Ug
b2YgdGhlIGFwcHJvcHJpYXRlIGRlY29kZXIgcGx1Z2luLgorICAgIC8vIElmIGluc3VmZmljaWVu
dCBieXRlcyBhcmUgYXZhaWxhYmxlIHRvIGRldGVybWluZSB0aGUgaW1hZ2UgdHlwZSwgbm8gZGVj
b2RlciBwbHVnaW4gd2lsbCBiZQorICAgIC8vIG1hZGUuCisgICAgaWYgKCFtX2RlY29kZXIpCisg
ICAgICAgIG1fZGVjb2RlciA9IGNyZWF0ZURlY29kZXIoZGF0YS0+YnVmZmVyKCkpOworCisgICAg
aWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGVjb2Rlci0+c2V0RGF0
YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCitTdHJpbmcgSW1hZ2VTb3VyY2U6OmZpbGVu
YW1lRXh0ZW5zaW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIG1fZGVjb2Rlci0+ZmlsZW5hbWVFeHRlbnNpb24o
KTsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxlKCkKK3sKKyAgICBpZiAo
IW1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fZGVjb2Rl
ci0+aXNTaXplQXZhaWxhYmxlKCk7Cit9CisKK0ludFNpemUgSW1hZ2VTb3VyY2U6OnNpemUoKSBj
b25zdAoreworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwor
CisgICAgcmV0dXJuIG1fZGVjb2Rlci0+c2l6ZSgpOworfQorCitJbnRTaXplIEltYWdlU291cmNl
OjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2l6ZSgpOwor
fQorCitpbnQgSW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCgpCit7CisgICAgaWYgKCFtX2Rl
Y29kZXIpCisgICAgICAgIHJldHVybiBjQW5pbWF0aW9uTm9uZTsKKworICAgIHJldHVybiBtX2Rl
Y29kZXItPnJlcGV0aXRpb25Db3VudCgpOworfQorCitzaXplX3QgSW1hZ2VTb3VyY2U6OmZyYW1l
Q291bnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RlY29kZXIgPyBtX2RlY29kZXItPmZyYW1l
Q291bnQoKSA6IDA7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFt
ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4
KGluZGV4KTsKKyAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1
ZmZlcjo6RnJhbWVFbXB0eSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYnVmZmVy
LT5hc05ld05hdGl2ZUltYWdlKCk7Cit9CisKK2Jvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21w
bGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+
ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICByZXR1cm4gYnVmZmVyICYmIGJ1ZmZlci0+
c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlOworfQorCitmbG9hdCBJbWFn
ZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmICgh
bV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVy
ID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIGlmICghYnVmZmVy
IHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBidWZmZXItPmR1cmF0aW9uKCkgLyAxMDAwLjBmOwor
fQorCitib29sIEltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgp
Cit7CisgICAgaWYgKCFmcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4KSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5k
ZXgpLT5oYXNBbHBoYSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKLS0gCjEuNi40
Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34720</attachid>
            <date>2009-08-13 01:45:42 -0700</date>
            <delta_ts>2009-08-18 16:47:46 -0700</delta_ts>
            <desc>Adding four image-specific files to WebCore.</desc>
            <filename>bug-28130-20090813104540.patch</filename>
            <type>text/plain</type>
            <size>13995</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NThlZjMzZC4uMDkzYzM5MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAwOS0wOC0xMyAgTWF4aW1lIFNpbW9u
ICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbSGFpa3VdIEFkZGluZyBmb3VyIGltYWdlLXNwZWNpZmljIGZp
bGVzIHRvIFdlYkNvcmU6CisgICAgICAgIEljb25IYWlrdS5jcHAsIEltYWdlQnVmZmVyRGF0YS5o
LCBJbWFnZUJ1ZmZlckhhaWt1LmNwcCwgSW1hZ2VIYWlrdS5jcHAKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MTMwCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JY29uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSWNv
bkhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJY29uOjp+SWNvbik6CisgICAg
ICAgIChXZWJDb3JlOjpJY29uOjpjcmVhdGVJY29uRm9yRmlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGFp
bnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5o
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhh
aWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OkltYWdl
QnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6aW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJh
bnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1h
Z2VIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhcik6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmluaXRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQ
YXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmdldEJCaXRtYXApOgorCiAyMDA5
LTA4LTEyICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrMDJAZ21haWwuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSWNvbi5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKaW5k
ZXggODY1MDEzMC4uNDQ0YzY3YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JY29uLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKQEAgLTc4LDgg
Kzc4LDYgQEAgcHJpdmF0ZToKICNlbGlmIFBMQVRGT1JNKENIUk9NSVVNKQogICAgIEljb24oY29u
c3QgUGxhdGZvcm1JY29uJik7CiAgICAgUGxhdGZvcm1JY29uIG1faWNvbjsKLSNlbGlmIFBMQVRG
T1JNKEhBSUtVKQotICAgIEljb24oKTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmRjY2FjNGEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ljb25IYWlrdS5jcHAKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
Y29uLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSWNvbjo6fkljb24oKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK1Bhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZv
ckZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiAwOworfQorCitQYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JG
aWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9JbWFnZUJ1ZmZlckRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mOTc4YzM0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9JbWFnZUJ1ZmZlckRhdGEuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhX2gKKyNk
ZWZpbmUgSW1hZ2VCdWZmZXJEYXRhX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xh
c3MgSW50U2l6ZTsKKworICAgIGNsYXNzIEltYWdlQnVmZmVyRGF0YSB7CisgICAgcHVibGljOgor
ICAgICAgICBJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpOworICAgIH07CisKK30gIC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gSW1hZ2VCdWZmZXJEYXRhX2gKKwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc2Yzk2OAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlr
dS5jcHAKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUg
U2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJE
YXRhKGNvbnN0IEludFNpemUmKQoreworfQorCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29u
c3QgSW50U2l6ZSYsIEltYWdlQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIGJvb2wmIHN1Y2Nl
c3MpCisgICAgOiBtX2RhdGEoSW50U2l6ZSgpKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgc3VjY2VzcyA9IGZhbHNlOworfQorCitJbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkKK3sK
K30KKworR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Cit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxJbWFn
ZURhdGE+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVj
dCYgcmVjdCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOwor
fQorCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJ
bWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEltYWdlQnVmZmVyOjpwdXRVbm11bHRpcGxp
ZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEq
IHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXI6
OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitJbWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkg
Y29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lk
IEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGlu
dD4mIGxvb2tVcFRhYmxlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9JbWFnZUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1h
Z2VIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIzZDZhYgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VI
YWlrdS5jcHAKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGly
ayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBS
dXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5u
IDxoYXVzbWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29v
ZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5kcmVhIEFu
emFuaSA8YW5kcmVhLmFuemFuaUBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKworI2lu
Y2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPEFwcGxpY2F0aW9uLmg+CisjaW5jbHVkZSA8
Qml0bWFwLmg+CisjaW5jbHVkZSA8Vmlldy5oPgorCisKKy8vIFRoaXMgZnVuY3Rpb24gbG9hZHMg
cmVzb3VyY2VzIGZyb20gV2ViS2l0CitWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5
KGNvbnN0IGNoYXIqKTsKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRnJhbWVEYXRh
OjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCit7CisgICAgaWYgKGNsZWFyTWV0YWRhdGEpCisg
ICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7CisKKyAgICBpZiAobV9mcmFtZSkgeworICAg
ICAgICBkZWxldGUgbV9mcmFtZTsKKyAgICAgICAgbV9mcmFtZSA9IDA7CisgICAgICAgIG1fZHVy
YXRpb24gPSAwLjBmOworICAgICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitXVEY6OlBhc3NSZWZQdHI8
SW1hZ2U+IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKQorewor
ICAgIFZlY3RvcjxjaGFyPiBhcnJheSA9IGxvYWRSZXNvdXJjZUludG9BcnJheShuYW1lKTsKKyAg
ICBXVEY6OlBhc3NSZWZQdHI8Qml0bWFwSW1hZ2U+IGltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKKyAgICBpbWFnZS0+c2V0RGF0YShidWZm
ZXIsIHRydWUpOworCisgICAgcmV0dXJuIGltYWdlOworfQorCit2b2lkIEJpdG1hcEltYWdlOjpp
bml0UGxhdGZvcm1EYXRhKCkKK3sKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBs
YXRmb3JtRGF0YSgpCit7Cit9CisKKy8vIERyYXdpbmcgUm91dGluZXMKK3ZvaWQgQml0bWFwSW1h
Z2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmMsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIHN0YXJ0QW5p
bWF0aW9uKCk7CisKKyAgICBCQml0bWFwKiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CisgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPklzVmFsaWQoKSkgLy8gSWYgdGhlIGlt
YWdlIGhhc24ndCBmdWxseSBsb2FkZWQuCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtYXlG
aWxsV2l0aFNvbGlkQ29sb3IoKSkgeworICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwg
ZHN0LCBzb2xpZENvbG9yKCksIG9wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGN0
eHQtPnNhdmUoKTsKKyAgICBjdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOworCisgICAg
QlJlY3Qgc3JjUmVjdChzcmMpOworICAgIEJSZWN0IGRzdFJlY3QoZHN0KTsKKworICAgIC8vIFRl
c3QgdXNpbmcgZXhhbXBsZSBzaXRlIGF0CisgICAgLy8gaHR0cDovL3d3dy5tZXllcndlYi5jb20v
ZXJpYy9jc3MvZWRnZS9jb21wbGV4c3BpcmFsL2RlbW8uaHRtbAorICAgIGN0eHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5TZXREcmF3aW5nTW9kZShCX09QX0FMUEhBKTsKKyAgICBjdHh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+RHJhd0JpdG1hcChpbWFnZSwgc3JjUmVjdCAmIGltYWdlLT5Cb3VuZHMoKSwg
ZHN0UmVjdCk7CisgICAgY3R4dC0+cmVzdG9yZSgpOworfQorCit2b2lkIEltYWdlOjpkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBzcmNQb2ludCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCkKK3sKKyAgICAvLyBGSVhNRTogZmluaXNoIHRoaXMgdG8gc3VwcG9ydCBhbHNvIHBo
YXNlZCBwb3NpdGlvbiAoc3JjUG9pbnQpCisgICAgc3RhcnRBbmltYXRpb24oKTsKKworICAgIEJC
aXRtYXAqIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIWlt
YWdlIHx8ICFpbWFnZS0+SXNWYWxpZCgpKSAvLyBJZiB0aGUgaW1hZ2UgaGFzbid0IGZ1bGx5IGxv
YWRlZC4KKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgY3VycmVudFcgPSAwOworICAgIGZs
b2F0IGN1cnJlbnRIID0gMDsKKworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+U2V0RHJhd2luZ01vZGUoQl9PUF9BTFBIQSk7CisgICAgY29udGV4
dC0+Y2xpcChlbmNsb3NpbmdJbnRSZWN0KGRzdFJlY3QpKTsKKworICAgIHdoaWxlIChjdXJyZW50
VyA8IGRzdFJlY3Qud2lkdGgoKSkgeworICAgICAgICB3aGlsZSAoY3VycmVudEggPCBkc3RSZWN0
LmhlaWdodCgpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+RHJh
d0JpdG1hcChpbWFnZSwgQlBvaW50KGRzdFJlY3QueCgpICsgY3VycmVudFcsIGRzdFJlY3QueSgp
ICsgY3VycmVudEgpKTsKKyAgICAgICAgICAgIGN1cnJlbnRIICs9IHRpbGVSZWN0LmhlaWdodCgp
OworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRXICs9IHRpbGVSZWN0LndpZHRoKCk7CisgICAg
ICAgIGN1cnJlbnRIID0gMDsKKyAgICB9CisgICAgY29udGV4dC0+cmVzdG9yZSgpOworfQorCit2
b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQoreworICAgIC8vIEZJWE1FOiBu
ZWVkIHRvIGNoZWNrIHRoZSBSR0JBMzIgYnVmZmVyIHRvIHNlZSBpZiBpdCBpcyAxeDEuCisgICAg
bV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKKyAgICBtX2NoZWNrZWRGb3JTb2xpZENvbG9yID0gdHJ1
ZTsKK30KKworQkJpdG1hcCogQml0bWFwSW1hZ2U6OmdldEJCaXRtYXAoKSBjb25zdAoreworICAg
IHJldHVybiBjb25zdF9jYXN0PEJpdG1hcEltYWdlKj4odGhpcyktPmZyYW1lQXRJbmRleCgwKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
</data>

          </attachment>
      

    </bug>

</bugzilla>