<?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>27965</bug_id>
          
          <creation_ts>2009-08-03 17:17:33 -0700</creation_ts>
          <short_desc>ImageSourceFoo.cpp contains lots of Copy+Paste code and should be refactored</short_desc>
          <delta_ts>2012-11-20 00:30:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>26467</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Treat">manyoso</reporter>
          <assigned_to name="Peter Kasting">pkasting</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>kevino</cc>
    
    <cc>kmccullough</cc>
    
    <cc>noel.gordon</cc>
    
    <cc>thakis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>136857</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-08-03 17:17:33 -0700</bug_when>
    <thetext>This first patch is an attempt to combine and refactor two files that are largely a result of copy+paste code.  The files in question are ImageSourceCairo.cpp and ImageSourceSkia.cpp.  A later patch will attempt to merge the third such file, ImageSourceWx.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136859</commentid>
    <comment_count>1</comment_count>
      <attachid>34027</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-08-03 17:21:36 -0700</bug_when>
    <thetext>Created attachment 34027
Patch to merge ImageSourceCairo.cpp and ImageSourceSkia.cpp

Some notes:

1) Please read the ChangeLog in the patch carefully for a detailed list of the changes.
2) I am not able to build either Skia or Cairo as I&apos;m not set up for it, however I&apos;ve been very careful in the refactoring and gone through it line-by-line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136868</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-08-03 17:41:04 -0700</bug_when>
    <thetext>Seems pkasting and I have clashed with efforts.  Assigning to him to deal with...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136869</commentid>
    <comment_count>3</comment_count>
      <attachid>34027</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-08-03 17:41:34 -0700</bug_when>
    <thetext>Comment on attachment 34027
Patch to merge ImageSourceCairo.cpp and ImageSourceSkia.cpp

Obsoleted by pkasting&apos;s next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139074</commentid>
    <comment_count>4</comment_count>
      <attachid>34586</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-11 13:10:18 -0700</bug_when>
    <thetext>Created attachment 34586
Move ImageSourceCairo.cpp to ImageSource.cpp

This moves ImageSourceCairo.cpp to ImageSource.cpp.

There are a couple questionable bits here:

* I have excluded ImageSource.cpp from the WebKit Windows CG builds, like the old ImageSourceCairo.cpp was.  Perhaps instead I should have included it but put a &quot;!PLATFORM(CG)&quot; atop it?  It seems uncommon to exclude &quot;cross-platform&quot; files from the Windows CG build...

* I removed &quot;#include &lt;cairo.h&gt;&quot;.  The only potential use is for the NativeImagePtr return type from createFrameAtIndex().  Since this is being returned directly from another function, I don&apos;t think the compiler actually needs the underlying type here.  At least for Skia this type of change compiles (I tried removing &quot;#include SkBitmap.h&quot; from ImageSourceSkia.cpp and building); I&apos;d like to be able to test whether it works on Cairo too.  If so, it means we can avoid pulling in any platform-specific headers, which would be great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139077</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-08-11 13:22:47 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=34586) [details]
&gt; Move ImageSourceCairo.cpp to ImageSource.cpp
&gt; 
&gt; This moves ImageSourceCairo.cpp to ImageSource.cpp.
&gt; 
&gt; There are a couple questionable bits here:
&gt; 
&gt; * I have excluded ImageSource.cpp from the WebKit Windows CG builds, like the
&gt; old ImageSourceCairo.cpp was.  Perhaps instead I should have included it but
&gt; put a &quot;!PLATFORM(CG)&quot; atop it?  It seems uncommon to exclude &quot;cross-platform&quot;
&gt; files from the Windows CG build...

ImageSource.cpp is no more or less cross-platform than the image-decoders I would think.  If Windows CG doesn&apos;t build with image-decoders why would it build with this ImageSource.cpp?

&gt; * I removed &quot;#include &lt;cairo.h&gt;&quot;.  The only potential use is for the
&gt; NativeImagePtr return type from createFrameAtIndex().  Since this is being
&gt; returned directly from another function, I don&apos;t think the compiler actually
&gt; needs the underlying type here.  At least for Skia this type of change compiles
&gt; (I tried removing &quot;#include SkBitmap.h&quot; from ImageSourceSkia.cpp and building);
&gt; I&apos;d like to be able to test whether it works on Cairo too.  If so, it means we
&gt; can avoid pulling in any platform-specific headers, which would be great.

Ok.  Why did you keep the &apos;PLATFORM(CAIRO)&apos; call?  Because you added to Skia build, but haven&apos;t unforked it yet?

Also, it seems the patch is weirdly formatted.  The hunk to remove cairo is not included in the rest of it.  How&apos;d that happen?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139084</commentid>
    <comment_count>6</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-11 13:50:46 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; * I have excluded ImageSource.cpp from the WebKit Windows CG builds, like the
&gt; &gt; old ImageSourceCairo.cpp was.
&gt; 
&gt; ImageSource.cpp is no more or less cross-platform than the image-decoders I
&gt; would think.  If Windows CG doesn&apos;t build with image-decoders why would it
&gt; build with this ImageSource.cpp?

Fair enough.  I&apos;ll leave it the way I&apos;ve done it here, then.

&gt; Why did you keep the &apos;PLATFORM(CAIRO)&apos; call?  Because you added to Skia
&gt; build, but haven&apos;t unforked it yet?

Precisely.  The WebCore.gypi file that the Chromium build uses contains all the files for all the ports, so I had to update it, but if I removed this guard I&apos;d have gotten double symbols.  I&apos;m trying to decide whether when merging Skia in I should remove this, change to !PLATFORM(CG), or change to PLATFORM(CAIRO) || PLATFORM(SKIA).  If I did the last one, I&apos;d change to one of the first two once everything was merged.

&gt; Also, it seems the patch is weirdly formatted.  The hunk to remove cairo is not
&gt; included in the rest of it.  How&apos;d that happen?

That was the output of svn-create-patch.  I think it purposefully splits a &quot;move with modifications&quot; into two pieces, the &quot;add/delete&quot; and &quot;modify&quot; parts, for ease of reviewing.  Or else it has some bug on my machine.  I don&apos;t know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139086</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-08-11 14:02:34 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; * I have excluded ImageSource.cpp from the WebKit Windows CG builds, like the
&gt; &gt; &gt; old ImageSourceCairo.cpp was.
&gt; &gt; 
&gt; &gt; ImageSource.cpp is no more or less cross-platform than the image-decoders I
&gt; &gt; would think.  If Windows CG doesn&apos;t build with image-decoders why would it
&gt; &gt; build with this ImageSource.cpp?
&gt; 
&gt; Fair enough.  I&apos;ll leave it the way I&apos;ve done it here, then.
&gt; 
&gt; &gt; Why did you keep the &apos;PLATFORM(CAIRO)&apos; call?  Because you added to Skia
&gt; &gt; build, but haven&apos;t unforked it yet?
&gt; 
&gt; Precisely.  The WebCore.gypi file that the Chromium build uses contains all the
&gt; files for all the ports, so I had to update it, but if I removed this guard I&apos;d
&gt; have gotten double symbols.  I&apos;m trying to decide whether when merging Skia in
&gt; I should remove this, change to !PLATFORM(CG), or change to PLATFORM(CAIRO) ||
&gt; PLATFORM(SKIA).  If I did the last one, I&apos;d change to one of the first two once
&gt; everything was merged.

I think you should remove all checks for PLATFORM... if a port doesn&apos;t use the file, they don&apos;t add it to their build.  Again, just like image-decoders :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139087</commentid>
    <comment_count>8</comment_count>
      <attachid>34586</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-08-11 14:03:18 -0700</bug_when>
    <thetext>Comment on attachment 34586
Move ImageSourceCairo.cpp to ImageSource.cpp

Please watch the buildbots...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139158</commentid>
    <comment_count>9</comment_count>
      <attachid>34586</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-11 16:20:31 -0700</bug_when>
    <thetext>Comment on attachment 34586
Move ImageSourceCairo.cpp to ImageSource.cpp

Landed in r47073, clearing flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139188</commentid>
    <comment_count>10</comment_count>
      <attachid>34625</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-11 17:56:49 -0700</bug_when>
    <thetext>Created attachment 34625
Merge in ImageSourceSkia.cpp

Merge in ImageSourceSkia.cpp.

There are only a few issues of note:

* As with Cairo, Skia doesn&apos;t really need the &quot;#include SkBitmap.h&quot; it had, so I didn&apos;t port that over.

* Didn&apos;t bother adding the Skia check for if the decoder had failed before calling setData(), since every decode but XBM already checks that, and XBM is going away soon.

* Expanded the Cairo rejection of 0-height files to include 0-width and negative-dimension files as well.  I am told these aren&apos;t valid for any popular image formats anyway, and at least the BMP/ICO decoders I wrote already reject them.  Even though Skia didn&apos;t have this, it seemed like a safe and appropriate thing to do.

* Didn&apos;t bother porting over the Skia check for ImageDecoder::supportsAlpha() in frameHasAlphaAtIndex().  Only the JPEG decoder returns false in that function, and if the frame is complete none of the pixels should have alpha anyway.  Once all the copies of this file are merged together I&apos;m just going to delete that function because no one else ever cares.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139199</commentid>
    <comment_count>11</comment_count>
      <attachid>34625</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-08-11 18:26:44 -0700</bug_when>
    <thetext>Comment on attachment 34625
Merge in ImageSourceSkia.cpp

&gt; -
&gt; -    return m_decoder-&gt;frameBufferAtIndex(index)-&gt;hasAlpha();
&gt; +    // When a frame has not finished decoding, always mark it as having alpha.
&gt; +    // Ports that check the result of this function to determine their
&gt; +    // compositing op need this in order to not draw the undecoded portion as
&gt; +    // black.
&gt; +    // TODO: Perhaps we should ensure that each individual decoder returns true
&gt; +    // in this case.
&gt; +  return frameIsCompleteAtIndex(index) ?
&gt; +      m_decoder-&gt;frameBufferAtIndex(index)-&gt;hasAlpha() : true;

Looks like an indentation problem.  Otherwise looks good!  r+ and you can fix indentation on landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139202</commentid>
    <comment_count>12</comment_count>
      <attachid>34625</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-11 18:31:20 -0700</bug_when>
    <thetext>Comment on attachment 34625
Merge in ImageSourceSkia.cpp

Landed in r47081, clearing flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139204</commentid>
    <comment_count>13</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-11 18:47:34 -0700</bug_when>
    <thetext>CCing kmccullough as I want him to notice the Wx patch I&apos;m going to post, in case I screw something up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139205</commentid>
    <comment_count>14</comment_count>
      <attachid>34632</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-11 18:55:33 -0700</bug_when>
    <thetext>Created attachment 34632
Merge in ImageSourceWx.cpp 

After reviewing the functions in ImageSourceWx.cpp, I believe everything in ImageSource.cpp is suitable, and no changes are needed; so I&apos;m simply deleting ImageSourceWx.cpp and updating the Bakefiles.

I remember that Wx was going to move away from Bakefiles, but there are no other checked-in files which reference ImageSourceWx.cpp besides the ones I&apos;ve modified, so I assume either that hasn&apos;t happened yet or it&apos;s still private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139206</commentid>
    <comment_count>15</comment_count>
      <attachid>34632</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-08-11 19:01:56 -0700</bug_when>
    <thetext>Comment on attachment 34632
Merge in ImageSourceWx.cpp 

I think the approach is sound, but indentation problems prevent r+.  Looks like ImageSourceFoo* is close to complete unforking though :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139405</commentid>
    <comment_count>16</comment_count>
      <attachid>34672</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-12 10:34:52 -0700</bug_when>
    <thetext>Created attachment 34672
Merge in ImageSourceWx.cpp 

Fixed the modified indentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139430</commentid>
    <comment_count>17</comment_count>
      <attachid>34672</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 11:07:54 -0700</bug_when>
    <thetext>Comment on attachment 34672
Merge in ImageSourceWx.cpp 

Looks fine to me.  Kevin, please scream if there is something wrong about this from a wx perspective.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139446</commentid>
    <comment_count>18</comment_count>
      <attachid>34672</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-12 11:29:54 -0700</bug_when>
    <thetext>Comment on attachment 34672
Merge in ImageSourceWx.cpp 

Landed in r47127, clearing flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139458</commentid>
    <comment_count>19</comment_count>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2009-08-12 11:52:38 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 34672 [details])
&gt; Looks fine to me.  Kevin, please scream if there is something wrong about this
&gt; from a wx perspective.

Looks fine to me, although the Bakefile build is completely broken right now thanks to a nasty hardcoded string character limit in Bakefile, so I&apos;m not sure there&apos;s much point really in updating it. It&apos;s not a big deal either way, just a heads up for future patches that might touch wx. I&apos;d like to remove those files to avoid confusion but I need that last waf patch landed first... ;-)

BTW, I don&apos;t know why wx sources are in WebCore.gypi? I suppose you&apos;re free to try maintaining it if you want, but I won&apos;t be supporting / using it myself. The generated project files weren&apos;t the draw I thought they would be; in fact, the read only nature of them became frustrating to contributors. It *looked* like they could just work in the IDE, which was the big draw, but then they discovered that they couldn&apos;t make any changes to it. Worse, in XCode, even swapping the wx build you used would require a project regeneration step. I even had a MSVC user petitioning me to allow a hand-maintained project file in the tree. They even agreed to maintain it, just so they could make changes in the IDE.

Also, one big reason I chose waf was so that I don&apos;t have to  make changes to the build every time a source file is added / moved / removed. For wx/waf this patch would have just been the ChangeLog entry and the removed ImageSourceWx.cpp. :) I still have to add new dirs manually, unfortunately, but I&apos;ll see if I can hack something up to auto-determine those as well soon. Shared maintenance is better than maintaining something yourself, but having the computer do the work of figuring out what needs built for you is even better IMHO. ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139461</commentid>
    <comment_count>20</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-12 11:56:56 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; BTW, I don&apos;t know why wx sources are in WebCore.gypi?

WebCore.gypi contains all the sources in the entire tree, I believe.  You&apos;d have to ask dglazkov about why; I suspect to make it as easy as possible for people touching the tree to maintain it (no need to worry about whether or not to add a file).

I just do my best to try not to break things...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139462</commentid>
    <comment_count>21</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-12 11:58:51 -0700</bug_when>
    <thetext>
&gt; BTW, I don&apos;t know why wx sources are in WebCore.gypi? I suppose you&apos;re free to
&gt; try maintaining it if you want, but I won&apos;t be supporting / using it myself.

The idea is that you don&apos;t have to worry about whether to add files or not to WebCore.gypi. The rule is &quot;always add&quot;.

&gt; The generated project files weren&apos;t the draw I thought they would be; in fact,
&gt; the read only nature of them became frustrating to contributors. It *looked*
&gt; like they could just work in the IDE, which was the big draw, but then they
&gt; discovered that they couldn&apos;t make any changes to it. Worse, in XCode, even
&gt; swapping the wx build you used would require a project regeneration step. I
&gt; even had a MSVC user petitioning me to allow a hand-maintained project file in
&gt; the tree. They even agreed to maintain it, just so they could make changes in
&gt; the IDE.

Not sure why it&apos;s not working well for you guys. gyp has been a huge time-saver for us, and we all use XCode and MSVC generated projects for everyday use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139549</commentid>
    <comment_count>22</comment_count>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2009-08-12 14:23:11 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt; BTW, I don&apos;t know why wx sources are in WebCore.gypi? I suppose you&apos;re free to
&gt; &gt; try maintaining it if you want, but I won&apos;t be supporting / using it myself.
&gt; 
&gt; The idea is that you don&apos;t have to worry about whether to add files or not to
&gt; WebCore.gypi. The rule is &quot;always add&quot;.

Ah, I see. Kinda like what I&apos;m doing with waf, except that I don&apos;t have an explicit file list anywhere.

&gt; &gt; The generated project files weren&apos;t the draw I thought they would be; in fact,
&gt; &gt; the read only nature of them became frustrating to contributors. It *looked*
&gt; &gt; like they could just work in the IDE, which was the big draw, but then they
&gt; &gt; discovered that they couldn&apos;t make any changes to it. Worse, in XCode, even
&gt; &gt; swapping the wx build you used would require a project regeneration step. I
&gt; &gt; even had a MSVC user petitioning me to allow a hand-maintained project file in
&gt; &gt; the tree. They even agreed to maintain it, just so they could make changes in
&gt; &gt; the IDE.
&gt; 
&gt; Not sure why it&apos;s not working well for you guys. gyp has been a huge time-saver
&gt; for us, and we all use XCode and MSVC generated projects for everyday use.

Well, in that respect, waf is a huge time-saver too and so is Bakefile, so obviously no tool has a monopoly on being better than manually maintaining several different project files. ;) Currently, I mostly just have to maintain the list of project directories, and with any luck, soon I won&apos;t even need to do that. 

Basically, for wx hardly anyone was really using the IDE projects that were being generated for wxWebKit, and those that did tended not to be happy with them being read-only, so for me it raised the logical question of why I had chosen an automatic project generator for my build tool. ;) And honestly, now that I&apos;ve moved away from that, I&apos;m much happier with waf. I never have to think about how to make things like Python bindings generation, disabling optional build steps if deps are missing, etc., work within several different IDEs, many of which are black boxes that I can&apos;t debug or extend. I can now do a lot of &quot;on the fly configuration&quot; that I couldn&apos;t do with the IDE project files, and the users like that too because the build system is smarter about letting them know what might be wrong when their config is off. The way waf works just feels like a natural fit for this sort of build process to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143248</commentid>
    <comment_count>23</comment_count>
      <attachid>38702</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-27 17:08:43 -0700</bug_when>
    <thetext>Created attachment 38702
Move createDecoder() onto ImageDecoder

This is prep for factoring common code out of ImageSourceQt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143267</commentid>
    <comment_count>24</comment_count>
      <attachid>38702</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-27 18:06:38 -0700</bug_when>
    <thetext>Comment on attachment 38702
Move createDecoder() onto ImageDecoder

What about Haiku?  Don&apos;t they turn off JPEG support?  Seems we might need some sort of JPEGDecoder::supported() call for the various image decoders if we&apos;re gonna share this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143403</commentid>
    <comment_count>25</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-28 10:40:59 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 38702 [details])
&gt; What about Haiku?  Don&apos;t they turn off JPEG support?

According to bug 28252 comment 8, Haiku is working on native libjpeg support and isn&apos;t going to add an exclusion for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143411</commentid>
    <comment_count>26</comment_count>
      <attachid>38702</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-28 11:09:02 -0700</bug_when>
    <thetext>Comment on attachment 38702
Move createDecoder() onto ImageDecoder

Landed in r47868, clearing flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143423</commentid>
    <comment_count>27</comment_count>
      <attachid>38745</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-28 11:47:22 -0700</bug_when>
    <thetext>Created attachment 38745
Remove most of ImageSourceQt.cpp

I think it might be possible (eventually) to remove the rest of ImageSourceQt by defining suitable abstractions on ImageDecoder, but that&apos;s something to ponder separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143566</commentid>
    <comment_count>28</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-08-30 19:58:12 -0700</bug_when>
    <thetext>Hi there,

I wonder how all your image source/decoder changes relate to https://bugs.webkit.org/show_bug.cgi?id=27538 . Maybe you can give some input on the patches there. At least it would be nice to know if the other patches are still valid.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143784</commentid>
    <comment_count>29</comment_count>
      <attachid>38745</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-01 00:35:24 -0700</bug_when>
    <thetext>Comment on attachment 38745
Remove most of ImageSourceQt.cpp

Assuming this doesn&apos;t hose Qt, LGTM.  Setting cq-.  Since you&apos;re a committer you&apos;re welcome to change it to cq+ if you&apos;d rather have the bot land it for you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143900</commentid>
    <comment_count>30</comment_count>
      <attachid>38745</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-09-01 08:33:21 -0700</bug_when>
    <thetext>Comment on attachment 38745
Remove most of ImageSourceQt.cpp

I&apos;ll watch the tree when the bot commits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143905</commentid>
    <comment_count>31</comment_count>
      <attachid>38745</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-01 08:44:12 -0700</bug_when>
    <thetext>Comment on attachment 38745
Remove most of ImageSourceQt.cpp

Rejecting patch 38745 from commit-queue.  This patch will require manual commit.

[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--quiet&apos;, &apos;--exit-after-n-failures=1&apos;] failed with exit code 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143906</commentid>
    <comment_count>32</comment_count>
      <attachid>38745</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-09-01 08:51:30 -0700</bug_when>
    <thetext>Comment on attachment 38745
Remove most of ImageSourceQt.cpp

Landed in r47935, clearing flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143915</commentid>
    <comment_count>33</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-09-01 09:21:28 -0700</bug_when>
    <thetext>QT build fixes landed in r47936, r47938 and r47939.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144029</commentid>
    <comment_count>34</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-01 16:14:28 -0700</bug_when>
    <thetext>Sorry.  Layout test got left around from a previously failed patch:
svg/dom/smil-methods.svg -&gt; failed

This type of error is tracked by bug 28603.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771530</commentid>
    <comment_count>35</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-19 22:35:23 -0800</bug_when>
    <thetext>Should this bug be closed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771549</commentid>
    <comment_count>36</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2012-11-19 23:04:20 -0800</bug_when>
    <thetext>Not unless the files have been cleaned up more since I last touched them, or I would have closed the bug.  Unless I royally screwed up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771604</commentid>
    <comment_count>37</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-19 23:49:44 -0800</bug_when>
    <thetext>% find . | grep ImageSource
./Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp
./Source/WebCore/platform/graphics/cg/ImageSourceCG.h
./Source/WebCore/platform/graphics/cg/ImageSourceCGMac.mm
./Source/WebCore/platform/graphics/cg/ImageSourceCGWin.cpp
./Source/WebCore/platform/graphics/ImageSource.cpp
./Source/WebCore/platform/graphics/ImageSource.h

These ImageSourceFoo.cpp no longer exist.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771642</commentid>
    <comment_count>38</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2012-11-20 00:30:59 -0800</bug_when>
    <thetext>Looks like the last bits of ImageSourceQt.cpp were cleaned up in r49185.  Let&apos;s go ahead and close, then.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34027</attachid>
            <date>2009-08-03 17:21:36 -0700</date>
            <delta_ts>2009-08-03 17:41:34 -0700</delta_ts>
            <desc>Patch to merge ImageSourceCairo.cpp and ImageSourceSkia.cpp</desc>
            <filename>27965.patch</filename>
            <type>text/plain</type>
            <size>34222</size>
            <attacher name="Adam Treat">manyoso</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODE4M2YyYy4uZjUxNmU2ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MiBAQAorMjAwOS0wOC0wMyAgQWRhbSBUcmVhdCAg
PGFkYW0udHJlYXRAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgYW4gYXR0ZW1wdCB0byBjb21iaW5l
IGFuZCByZWZhY3RvciB0d28gZmlsZXMgdGhhdCBhcmUgbGFyZ2VseSBhCisgICAgICAgIHJlc3Vs
dCBvZiBjb3B5K3Bhc3RlIGNvZGUuICBUaGUgZmlsZXMgaW4gcXVlc3Rpb24gYXJlIEltYWdlU291
cmNlQ2Fpcm8uY3BwIGFuZAorICAgICAgICBJbWFnZVNvdXJjZVNraWEuY3BwLiAgQSBsYXRlciBw
YXRjaCB3aWxsIGF0dGVtcHQgdG8gbWVyZ2UgdGhlIHRoaXJkIHN1Y2ggZmlsZSwKKyAgICAgICAg
SW1hZ2VTb3VyY2VXeC5jcHAuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI3OTY1CisKKyAgICAgICAgT25lIGNvbXBsaWNhdGlvbiBvZiB0aGlzIHBh
dGNoIGlzIHRoZSBkaWZmZXJlbnQgbGljZW5zZSBnaXZlbiBpbiBJbWFnZVNvdXJjZVNraWEuY3Bw
LgorICAgICAgICBUaGlzIGZpbGUgaXMgdW5kb3VidGVkbHkgYSBjb3B5IG9mIEltYWdlU291cmNl
Q2Fpcm8uY3BwLCBidXQgQXBwbGUncyBjb3B5cmlnaHQgd2FzCisgICAgICAgIHJlbW92ZWQgYW5k
IEdvb2dsZSdzIGluc2VydGVkLiAgQXMgYmVzdCBJIGNhbiB0ZWxsLCBJbWFnZVNvdXJjZUNhaXJv
IGNhbWUgZmlyc3Qgc28gaXQncworICAgICAgICBDb3B5cmlnaHQgaXMgcHJlc2VydmVkIHdpdGgg
R29vZ2xlIGJlY29taW5nIGFuIGFkZGl0aW9uYWwgY29weXJpZ2h0IGhvbGRlci4KKworICAgICAg
ICBUaGUgY2hhbmdlcyBvZiBjb25zZXF1ZW5jZSBmcm9tIEltYWdlU291cmNlQ2Fpcm8uY3BwIGFy
ZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgMSkgQWRkaXRpb24gb2YgMjAwNyB0byBBcHBsZSdz
IGNvcHlyaWdodCBjbGF1c2UuCisgICAgICAgICAgICAyKSBBZGRpdGlvbiBvZiBHb29nbGUgYXMg
YSBjb3B5cmlnaHQgaG9sZGVyLgorICAgICAgICAgICAgMykgUmVtb3ZhbCBvZiB1bm5lY2Vzc2Fy
eSBQTEFURk9STShDQUlSTykgcHJlcHJvY2Vzc29yIGd1YXJkCisgICAgICAgICAgICA0KSA6OnNl
dERhdGEgcmV0dXJucyBlYXJseSBpZiB0aGUgbV9kZWNvZGVyLT5mYWlsZWQoKSAodGhpcyB3YXMg
dGFrZW4gZnJvbSBJbWFnZVNvdXJjZVNraWEgYW5kIHNlZW1zIGNvcnJlY3QpCisgICAgICAgICAg
ICA1KSA6OmZyYW1lQ291bnQgcmV0dXJucyAwIGlmIHRoZSBtX2RlY29kZXItPmZhaWxlZCgpICh0
aGlzIHdhcyB0YWtlbiBmcm9tIEltYWdlU291cmNlU2tpYSBhbmQgc2VlbXMgY29ycmVjdCkKKyAg
ICAgICAgICAgIDYpIFJlbW92YWwgb2YgcmVkdW5kYW50IGNoZWNrIGZvciBOVUxMIGRlY29kZXIg
aW4gOjpjcmVhdGVGcmFtZUF0SW5kZXgKKyAgICAgICAgICAgIDcpIFJlbW92YWwgb2YgbmVlZGxl
c3MgQ2Fpcm8gc3BlY2lmaWMgY29tbWVudAorICAgICAgICAgICAgOCkgTW9yZSByb2J1c3QgdmVy
c2lvbiBvZiA6OmZyYW1lSGFzQWxwaGFBdEluZGV4ICh0aGlzIHdhcyB0YWtlbiBmcm9tIEltYWdl
U291cmNlU2tpYSBhbmQgc2VlbXMgY29ycmVjdCkKKworICAgICAgICBUaGUgY2hhbmdlcyBvZiBj
b25zZXF1ZW5jZSBmcm9tIEltYWdlU291cmNlU2tpYSBhcmUgYXMgZm9sbG93czoKKyAgICAgICAg
ICAgIDEpIFJlc3RvcmF0aW9uIG9mIEFwcGxlJ3MgY29weXJpZ2h0CisgICAgICAgICAgICAyKSBM
aWNlbnNlIHdhcyBjaGFuZ2VkIHRvIHJlZmxlY3QgQXBwbGUncyBvcmlnaW5hbCBjb3B5cmlnaHQK
KyAgICAgICAgICAgIDMpIFNvbWUgd2hpdGVzcGFjZSBhbmQgc3R5bGUgY2xlYW51cHMgKG9yZGVy
IG9mIGluY2x1ZGVzIGlzIG5vdyBhbHBoYWJldGljYWwuLi4pCisgICAgICAgICAgICA0KSBSZW1v
dmFsIG9mIHVubmVjZXNzYXJ5IGNvbW1lbnQgZnJvbSA6OmZyYW1lU2l6ZUF0SW5kZXgKKyAgICAg
ICAgICAgIDUpIFJlZmFjdG9yaW5nIG9mIDo6ZnJhbWVDb3VudCB0byBtYWtlIHRoZSBjb2RlIG1v
cmUgY2xlYXIKKyAgICAgICAgICAgIDYpIFJlZmFjdG9yaW5nIG9mIDo6ZmlsZW5hbWVFeHRlbnNp
b24gZm9yIGJldHRlciByZWFkYWJpbGl0eQorICAgICAgICAgICAgNykgUmVtb3ZhbCBvZiB1bm5l
Y2Vzc2FyeSBTa2lhIHNwZWNpZmljIGNvbW1lbnQgaW4gOjpjcmVhdGVGcmFtZUF0SW5kZXgKKyAg
ICAgICAgICAgIDgpIDo6Y3JlYXRlRnJhbWVBdEluZGV4IG5vdyByZXR1cm5zIDAgaWYgdGhlIHNp
emUoKS5oZWlnaHQoKSBvZiB0aGUgZnJhbWUgaXMgMCAodGhpcyB3YXMgdGFrZW4gZnJvbSBJbWFn
ZVNvdXJjZUNhaXJvIGFuZCBzZWVtcyBjb3JyZWN0KQorICAgICAgICAgICAgOSkgOjpmcmFtZUhh
c0FscGhhQXRJbmRleCBub3cgcmV0dXJucyB0cnVlIGlmIHRoZSBmcmFtZSBoYXNuJ3QgY29tcGxl
dGVkIGRlY29kaW5nICh0aGlzIHdhcyB0YWtlbiBmcm9tIEltYWdlU291cmNlQ2Fpcm8gYW5kIHNl
ZW1zIGNvcnJlY3QpCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlY29kZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291
cmNlOjp+SW1hZ2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0aWFsaXplZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVNvdXJjZVNraWE6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZp
bGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppc1NpemVB
dmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVNvdXJjZTo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6
Y3JlYXRlRnJhbWVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFt
ZUlzQ29tcGxldGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFt
ZUR1cmF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVI
YXNBbHBoYUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNl
Lmg6CisKIDIwMDktMDctMzAgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBmM2M0ZmEzLi42NDA3
MDJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KQEAgLTE0NTcsNiArMTQ1Nyw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VP
YnNlcnZlci5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBc
CiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oIFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50UmVjdC5jcHAgXApAQCAtMTg0OCw3ICsxODQ5LDYgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9
IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3Bw
IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YS5oIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwIFwKLQlXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlU291cmNlQ2Fpcm8uY3BwIFwKIAlXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAgXAogCVdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcCBcCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDBk
YWRlMzEuLmY0NmNkODcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNzM3LDcgKzE3MzcsNiBAQAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGEuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAnLAotICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlU291cmNlQ2Fpcm8uY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcCcs
CkBAIC0xOTAxLDggKzE5MDAsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlU291cmNlU2tpYS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VTb3VyY2VTa2lhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW50UG9pbnRTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbnRSZWN0U2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcCcsCkBAIC0yMDQ3LDYgKzIwNDQsNyBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlT2JzZXJ2ZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjQ4Y2Y5ODcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlU291cmNlLmNwcApAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xsYWJvcmEuY28udWs+Cisg
KiBDb3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCisKKyNp
bmNsdWRlICJCTVBJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJHSUZJbWFnZURlY29kZXIuaCIK
KyNpbmNsdWRlICJJQ09JbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJKUEVHSW1hZ2VEZWNvZGVy
LmgiCisjaW5jbHVkZSAiUE5HSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiWEJNSW1hZ2VEZWNv
ZGVyLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKKyNpZiBQTEFURk9STShDQUlSTykK
KyNpbmNsdWRlIDxjYWlyby5oPgorI2VsaWYgUExBVEZPUk0oU0tJQSkKKyNpbmNsdWRlICJTa0Jp
dG1hcC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFBMQVRGT1JNKFNL
SUEpCitJbWFnZURlY29kZXIqIGNyZWF0ZURlY29kZXIoY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRh
LCBjb25zdCBJbnRTaXplJiBwcmVmZXJyZWRJY29uU2l6ZSkKKyNlbHNlCitJbWFnZURlY29kZXIq
IGNyZWF0ZURlY29kZXIoY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhKQorI2VuZGlmCit7CisgICAg
Ly8gV2UgbmVlZCBhdCBsZWFzdCA0IGJ5dGVzIHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGlt
YWdlIHdlJ3JlIGRlYWxpbmcgd2l0aC4KKyAgICBpbnQgbGVuZ3RoID0gZGF0YS5zaXplKCk7Cisg
ICAgaWYgKGxlbmd0aCA8IDQpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgdW5zaWdu
ZWQgY2hhciogdUNvbnRlbnRzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWRhdGEuZGF0YSgpOwor
ICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRzID0gZGF0YS5kYXRhKCk7CisKKyAgICAvLyBHSUZzIGJl
Z2luIHdpdGggR0lGOCg3IG9yIDkpLgorICAgIGlmIChzdHJuY21wKGNvbnRlbnRzLCAiR0lGOCIs
IDQpID09IDApCisgICAgICAgIHJldHVybiBuZXcgR0lGSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAv
LyBUZXN0IGZvciBQTkcuCisgICAgaWYgKHVDb250ZW50c1swXT09MHg4OSAmJgorICAgICAgICB1
Q29udGVudHNbMV09PTB4NTAgJiYKKyAgICAgICAgdUNvbnRlbnRzWzJdPT0weDRFICYmCisgICAg
ICAgIHVDb250ZW50c1szXT09MHg0NykKKyAgICAgICAgcmV0dXJuIG5ldyBQTkdJbWFnZURlY29k
ZXIoKTsKKworICAgIC8vIEpQRUcKKyAgICBpZiAodUNvbnRlbnRzWzBdPT0weEZGICYmCisgICAg
ICAgIHVDb250ZW50c1sxXT09MHhEOCAmJgorICAgICAgICB1Q29udGVudHNbMl09PTB4RkYpCisg
ICAgICAgIHJldHVybiBuZXcgSlBFR0ltYWdlRGVjb2RlcigpOworCisgICAgLy8gQk1QCisgICAg
aWYgKHN0cm5jbXAoY29udGVudHMsICJCTSIsIDIpID09IDApCisgICAgICAgIHJldHVybiBuZXcg
Qk1QSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAvLyBJQ09zIGFsd2F5cyBiZWdpbiB3aXRoIGEgMi1i
eXRlIDAgZm9sbG93ZWQgYnkgYSAyLWJ5dGUgMS4KKyAgICAvLyBDVVJzIGJlZ2luIHdpdGggMi1i
eXRlIDAgZm9sbG93ZWQgYnkgMi1ieXRlIDIuCisgICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJc
MDAwXDAwMFwwMDFcMDAwIiwgNCkgfHwKKyAgICAgICAgIW1lbWNtcChjb250ZW50cywgIlwwMDBc
MDAwXDAwMlwwMDAiLCA0KSkKKyNpZiBQTEFURk9STShTS0lBKQorICAgICAgICByZXR1cm4gbmV3
IElDT0ltYWdlRGVjb2RlcihwcmVmZXJyZWRJY29uU2l6ZSk7CisjZWxzZQorICAgICAgICByZXR1
cm4gbmV3IElDT0ltYWdlRGVjb2RlcihJbnRTaXplKCkpOworI2VuZGlmCisKKyAgICAvLyBYQk1z
IHJlcXVpcmUgOCBieXRlcyBvZiBpbmZvLgorICAgIGlmIChsZW5ndGggPj0gOCAmJiBzdHJuY21w
KGNvbnRlbnRzLCAiI2RlZmluZSAiLCA4KSA9PSAwKQorICAgICAgICByZXR1cm4gbmV3IFhCTUlt
YWdlRGVjb2RlcigpOworCisgICAgLy8gR2l2ZSB1cC4gV2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBo
ZWNrIHRoaXMgaXMuCisgICAgcmV0dXJuIDA7Cit9CisKK0ltYWdlU291cmNlOjpJbWFnZVNvdXJj
ZSgpCisgICAgOiBtX2RlY29kZXIoMCkKK3sKK30KKworSW1hZ2VTb3VyY2U6On5JbWFnZVNvdXJj
ZSgpCit7CisgICAgY2xlYXIodHJ1ZSk7Cit9CisKK3ZvaWQgSW1hZ2VTb3VyY2U6OmNsZWFyKGJv
b2wgZGVzdHJveUFsbCwgc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUsIFNoYXJlZEJ1ZmZlciogZGF0
YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgaWYgKCFkZXN0cm95QWxsKSB7CisgICAg
ICAgIGlmIChtX2RlY29kZXIpCisgICAgICAgICAgICBtX2RlY29kZXItPmNsZWFyRnJhbWVCdWZm
ZXJDYWNoZShjbGVhckJlZm9yZUZyYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGRlbGV0ZSBtX2RlY29kZXI7CisgICAgbV9kZWNvZGVyID0gMDsKKyAgICBpZiAoZGF0YSkKKyAg
ICAgICAgc2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCitib29sIEltYWdlU291
cmNlOjppbml0aWFsaXplZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVjb2RlcjsKK30KKwor
dm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKQoreworICAgIC8vIE1ha2UgdGhlIGRlY29kZXIgYnkgc25pZmZpbmcgdGhlIGJ5
dGVzLgorICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgZXhhbWluZSB0aGUgZGF0YSBhbmQgaW5zdGFu
dGlhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGFwcHJvcHJpYXRlIGRlY29kZXIgcGx1Z2luLgorICAg
IC8vIElmIGluc3VmZmljaWVudCBieXRlcyBhcmUgYXZhaWxhYmxlIHRvIGRldGVybWluZSB0aGUg
aW1hZ2UgdHlwZSwgbm8gZGVjb2RlciBwbHVnaW4gd2lsbCBiZQorICAgIC8vIG1hZGUuCisgICAg
aWYgKCFtX2RlY29kZXIpCisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICAgICAgbV9kZWNvZGVyID0g
Y3JlYXRlRGVjb2RlcihkYXRhLT5idWZmZXIoKSwgSW50U2l6ZSgpKTsKKyNlbHNlCisgICAgICAg
IG1fZGVjb2RlciA9IGNyZWF0ZURlY29kZXIoZGF0YS0+YnVmZmVyKCkpOworI2VuZGlmCisKKyAg
ICAvLyBDcmVhdGVEZWNvZGVyIHdpbGwgcmV0dXJuIE5VTEwgaWYgdGhlIGRlY29kZXIgY291bGQg
bm90IGJlIGNyZWF0ZWQuIFBsdXMsCisgICAgLy8gd2Ugc2hvdWxkIG5vdCBzZW5kIG1vcmUgZGF0
YSB0byBhIGRlY29kZXIgd2hpY2ggaGFzIGFscmVhZHkgZGVjaWRlZCBpdAorICAgIC8vIGhhcyBm
YWlsZWQuCisgICAgaWYgKCFtX2RlY29kZXIgfHwgbV9kZWNvZGVyLT5mYWlsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9kZWNvZGVyLT5zZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZl
ZCk7Cit9CisKKyNpZiBQTEFURk9STShTS0lBKQordm9pZCBJbWFnZVNvdXJjZVNraWE6OnNldERh
dGEoU2hhcmVkQnVmZmVyKiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBhbGxEYXRhUmVjZWl2ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
bnRTaXplJiBwcmVmZXJyZWRJY29uU2l6ZSkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAg
ICAgbV9kZWNvZGVyID0gY3JlYXRlRGVjb2RlcihkYXRhLT5idWZmZXIoKSwgcHJlZmVycmVkSWNv
blNpemUpOworCisgICAgSW1hZ2VTb3VyY2U6OnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVk
KTsKK30KKyNlbmRpZgorCisKK1N0cmluZyBJbWFnZVNvdXJjZTo6ZmlsZW5hbWVFeHRlbnNpb24o
KSBjb25zdAoreworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigpOworfQorCitib29s
IEltYWdlU291cmNlOjppc1NpemVBdmFpbGFibGUoKQoreworICAgIGlmICghbV9kZWNvZGVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5pc1NpemVBdmFp
bGFibGUoKTsKK30KKworSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAg
aWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICByZXR1cm4g
bV9kZWNvZGVyLT5zaXplKCk7Cit9CisKK0ludFNpemUgSW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0
SW5kZXgoc2l6ZV90KSBjb25zdAoreworICAgIHJldHVybiBzaXplKCk7Cit9CisKK2ludCBJbWFn
ZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAg
ICAgcmV0dXJuIGNBbmltYXRpb25Ob25lOworCisgICAgcmV0dXJuIG1fZGVjb2Rlci0+cmVwZXRp
dGlvbkNvdW50KCk7Cit9CisKK3NpemVfdCBJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2RlY29kZXIgfHwgbV9kZWNvZGVyLT5mYWlsZWQoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCk7Cit9CisKK05h
dGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4
KQoreworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJHQkEz
MkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwor
ICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFt
ZUVtcHR5KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIElmIHdlIGhhdmUgYSB6ZXJvIGhl
aWdodCBpbWFnZSwganVzdCBwcmV0ZW5kIHdlIGRvbid0IGhhdmUgZW5vdWdoIGRhdGEgeWV0Lgor
ICAgIGlmICghc2l6ZSgpLmhlaWdodCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biBidWZmZXItPmFzTmV3TmF0aXZlSW1hZ2UoKTsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6ZnJh
bWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKCFtX2RlY29kZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9k
ZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIHJldHVybiBidWZmZXIgJiYg
YnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGU7Cit9CisKK2Zs
b2F0IEltYWdlU291cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCit7Cisg
ICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgUkdCQTMyQnVmZmVy
KiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgaWYg
KCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gTWFueSBhbm5veWluZyBhZHMgc3BlY2lmeSBh
IDAgZHVyYXRpb24gdG8gbWFrZSBhbiBpbWFnZSBmbGFzaCBhcyBxdWlja2x5CisgICAgLy8gYXMg
cG9zc2libGUuICBXZSBmb2xsb3cgV2luSUUncyBiZWhhdmlvciBhbmQgdXNlIGEgZHVyYXRpb24g
b2YgMTAwIG1zCisgICAgLy8gZm9yIGFueSBmcmFtZXMgdGhhdCBzcGVjaWZ5IGEgZHVyYXRpb24g
b2YgPD0gNTAgbXMuICBTZWUKKyAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ0MTM+IG9yIFJhZGFyIDQwNTEzODkgZm9yCisgICAgLy8gbW9yZS4KKyAgICBj
b25zdCBmbG9hdCBkdXJhdGlvbiA9IGJ1ZmZlci0+ZHVyYXRpb24oKSAvIDEwMDAuMGY7CisgICAg
cmV0dXJuIChkdXJhdGlvbiA8IDAuMDUxZikgPyAwLjEwMGYgOiBkdXJhdGlvbjsKK30KKworYm9v
bCBJbWFnZVNvdXJjZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAg
IC8vIFdoZW4gYSBmcmFtZSBoYXMgbm90IGZpbmlzaGVkIGRlY29kaW5nLCBhbHdheXMgbWFyayBp
dCBhcyBoYXZpbmcgYWxwaGEsCisgICAgLy8gc28gd2UgZG9uJ3QgZ2V0IGEgYmxhY2sgYmFja2dy
b3VuZCBmb3IgdGhlIHVuZGVjb2RlZCBzZWN0aW9ucy4KKyAgICAvLyBUT0RPOiBBIGJldHRlciBz
b2x1dGlvbiBpcyBwcm9iYWJseSB0byBoYXZlIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlcidzCisgICAg
Ly8gaGFzQWxwaGEoKSByZXR1cm4gdHJ1ZSBpbiB0aGVzZSBjYXNlcywgc2luY2UgaXQgaXMsIGlu
IGZhY3QsIHRlY2huaWNhbGx5CisgICAgLy8gdHJ1ZS4KKyAgICBpZiAoIWZyYW1lSXNDb21wbGV0
ZUF0SW5kZXgoaW5kZXgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghbV9kZWNv
ZGVyIHx8ICFtX2RlY29kZXItPnN1cHBvcnRzQWxwaGEoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJ
bmRleChpbmRleCk7CisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JB
MzJCdWZmZXI6OkZyYW1lRW1wdHkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biBidWZmZXItPmhhc0FscGhhKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuaAppbmRleCA3MjRmODgxLi41MDc1NDBmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oCkBAIC0xMjQsNiArMTI0LDI3IEBAIHB1YmxpYzoKICAgICBib29s
IGluaXRpYWxpemVkKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBk
YXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICAvLyBG
SVhNRTogVGhpcyBjbGFzcyBpcyBhIGhhY2sgdG8gc3VwcG9ydCBDaHJvbWl1bSdzIElDTyBkZWNv
ZGVyCisgICAgLy8gQ3VycmVudGx5IG91ciBJQ08gZGVjb2RlciBkZWNvZGVzIGFsbCBkYXRhIGR1
cmluZyBzZXREYXRhKCkgaW5zdGVhZCBvZgorICAgIC8vIGJlaW5nIGxhenkuICBJbiBhZGRpdGlv
biwgaXQgb25seSBkZWNvZGVzIG9uZSBmcmFtZSAoY2xvc2VzdCB0byB0aGUgc2l6ZQorICAgIC8v
IHBhc3NlZCB0byB0aGUgZGVjb2RlciBkdXJpbmcgY3JlYXRlRGVjb2RlciwgY2FsbGVkIGZyb20g
c2V0RGF0YSkgYW5kCisgICAgLy8gZGlzY2FyZHMgYWxsIG90aGVyIGRhdGEgaW4gdGhlIGZpbGUu
CisgICAgLy8KKyAgICAvLyBUbyBmaXggdGhpcyB3aWxsIHJlcXVpcmUgZml4aW5nIHRoZSBJQ08g
ZGVjb2RlciB0byBiZSBsYXp5LCBvciB0byBkZWNvZGUKKyAgICAvLyBhbGwgZnJhbWVzLiAgQXBw
bGUncyBkZWNvZGVycyAoSW1hZ2VJTykgZGVjb2RlIGFsbCBmcmFtZXMsIGFuZCByZXR1cm4KKyAg
ICAvLyB0aGVtIGFsbCBzb3J0ZWQgaW4gZGVjcmVhc2luZyBzaXplLiAgV2ViQ29yZSBhbHdheXMg
ZHJhd3MgdGhlIGZpcnN0IGZyYW1lLgorICAgIC8vCisgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwt
cHVycG9zZSByb3V0aW5lIGZvciB0aGUgZmF2aWNvbiBkZWNvZGVyLCB3aGljaCBpcyB1c2VkCisg
ICAgLy8gdG8gc3BlY2lmeSBhIHBhcnRpY3VsYXIgaWNvbiBzaXplIGZvciB0aGUgSUNPSW1hZ2VE
ZWNvZGVyIHRvIHByZWZlcgorICAgIC8vIGRlY29kaW5nLiAgTm90ZSB0aGF0IG5vdCBhbGwgZmF2
aWNvbnMgYXJlIElDT3MsIHNvIHRoaXMgd29uJ3QKKyAgICAvLyBuZWNlc3NhcmlseSBkbyBhbnl0
aGluZyBkaWZmZXJlbnRseSB0aGFuIEltYWdlU291cmNlOjpzZXREYXRhKCkuCisgICAgLy8KKyAg
ICAvLyBQYXNzaW5nIGFuIGVtcHR5IEludFNpemUgZm9yIHxwcmVmZXJyZWRJY29uU2l6ZXwgaGVy
ZSBpcyBleGFjdGx5CisgICAgLy8gZXF1aXZhbGVudCB0byBqdXN0IGNhbGxpbmcgSW1hZ2VTb3Vy
Y2U6OnNldERhdGEoKS4gIFNlZSBhbHNvIGNvbW1lbnRzIGluCisgICAgLy8gSUNPSW1hZ2VEZWNv
ZGVyLmNwcC4KKyAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERh
dGFSZWNlaXZlZCwgY29uc3QgSW50U2l6ZSYgcHJlZmVycmVkSWNvblNpemUpOworI2VuZGlmCiAg
ICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Q7CiAKICAgICBib29sIGlzU2l6ZUF2
YWlsYWJsZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZVNvdXJjZUNhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VTb3VyY2VDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMTZkZWEu
LjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZVNvdXJj
ZUNhaXJvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxhYm9yYS5jby51
az4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIK
LQotI2lmIFBMQVRGT1JNKENBSVJPKQotCi0jaW5jbHVkZSAiQk1QSW1hZ2VEZWNvZGVyLmgiCi0j
aW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiSUNPSW1hZ2VEZWNvZGVyLmgi
Ci0jaW5jbHVkZSAiSlBFR0ltYWdlRGVjb2Rlci5oIgotI2luY2x1ZGUgIlBOR0ltYWdlRGVjb2Rl
ci5oIgotI2luY2x1ZGUgIlhCTUltYWdlRGVjb2Rlci5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW1hZ2VE
ZWNvZGVyKiBjcmVhdGVEZWNvZGVyKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkKLXsKLSAgICAv
LyBXZSBuZWVkIGF0IGxlYXN0IDQgYnl0ZXMgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgaW1h
Z2Ugd2UncmUgZGVhbGluZyB3aXRoLgotICAgIGludCBsZW5ndGggPSBkYXRhLnNpemUoKTsKLSAg
ICBpZiAobGVuZ3RoIDwgNCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiB1Q29udGVudHMgPSAoY29uc3QgdW5zaWduZWQgY2hhciopZGF0YS5kYXRhKCk7Ci0g
ICAgY29uc3QgY2hhciogY29udGVudHMgPSBkYXRhLmRhdGEoKTsKLQotICAgIC8vIEdJRnMgYmVn
aW4gd2l0aCBHSUY4KDcgb3IgOSkuCi0gICAgaWYgKHN0cm5jbXAoY29udGVudHMsICJHSUY4Iiwg
NCkgPT0gMCkKLSAgICAgICAgcmV0dXJuIG5ldyBHSUZJbWFnZURlY29kZXIoKTsKLQotICAgIC8v
IFRlc3QgZm9yIFBORy4KLSAgICBpZiAodUNvbnRlbnRzWzBdPT0weDg5ICYmCi0gICAgICAgIHVD
b250ZW50c1sxXT09MHg1MCAmJgotICAgICAgICB1Q29udGVudHNbMl09PTB4NEUgJiYKLSAgICAg
ICAgdUNvbnRlbnRzWzNdPT0weDQ3KQotICAgICAgICByZXR1cm4gbmV3IFBOR0ltYWdlRGVjb2Rl
cigpOwotCi0gICAgLy8gSlBFRwotICAgIGlmICh1Q29udGVudHNbMF09PTB4RkYgJiYKLSAgICAg
ICAgdUNvbnRlbnRzWzFdPT0weEQ4ICYmCi0gICAgICAgIHVDb250ZW50c1syXT09MHhGRikKLSAg
ICAgICAgcmV0dXJuIG5ldyBKUEVHSW1hZ2VEZWNvZGVyKCk7Ci0KLSAgICAvLyBCTVAKLSAgICBp
ZiAoc3RybmNtcChjb250ZW50cywgIkJNIiwgMikgPT0gMCkKLSAgICAgICAgcmV0dXJuIG5ldyBC
TVBJbWFnZURlY29kZXIoKTsKLQotICAgIC8vIElDT3MgYWx3YXlzIGJlZ2luIHdpdGggYSAyLWJ5
dGUgMCBmb2xsb3dlZCBieSBhIDItYnl0ZSAxLgotICAgIC8vIENVUnMgYmVnaW4gd2l0aCAyLWJ5
dGUgMCBmb2xsb3dlZCBieSAyLWJ5dGUgMi4KLSAgICBpZiAoIW1lbWNtcChjb250ZW50cywgIlww
MDBcMDAwXDAwMVwwMDAiLCA0KSB8fAotICAgICAgICAhbWVtY21wKGNvbnRlbnRzLCAiXDAwMFww
MDBcMDAyXDAwMCIsIDQpKQotICAgICAgICByZXR1cm4gbmV3IElDT0ltYWdlRGVjb2RlcihJbnRT
aXplKCkpOwotCi0gICAgLy8gWEJNcyByZXF1aXJlIDggYnl0ZXMgb2YgaW5mby4KLSAgICBpZiAo
bGVuZ3RoID49IDggJiYgc3RybmNtcChjb250ZW50cywgIiNkZWZpbmUgIiwgOCkgPT0gMCkKLSAg
ICAgICAgcmV0dXJuIG5ldyBYQk1JbWFnZURlY29kZXIoKTsKLQotICAgIC8vIEdpdmUgdXAuIFdl
IGRvbid0IGtub3cgd2hhdCB0aGUgaGVjayB0aGlzIGlzLgotICAgIHJldHVybiAwOwotfQotCi1J
bWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoKQotICAgIDogbV9kZWNvZGVyKDApCi17Ci19Ci0KLUlt
YWdlU291cmNlOjp+SW1hZ2VTb3VyY2UoKQotewotICAgIGNsZWFyKHRydWUpOwotfQotCi12b2lk
IEltYWdlU291cmNlOjpjbGVhcihib29sIGRlc3Ryb3lBbGwsIHNpemVfdCBjbGVhckJlZm9yZUZy
YW1lLCBTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQotewotICAgIGlm
ICghZGVzdHJveUFsbCkgewotICAgICAgICBpZiAobV9kZWNvZGVyKQotICAgICAgICAgICAgbV9k
ZWNvZGVyLT5jbGVhckZyYW1lQnVmZmVyQ2FjaGUoY2xlYXJCZWZvcmVGcmFtZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBkZWxldGUgbV9kZWNvZGVyOwotICAgIG1fZGVjb2RlciA9
IDA7Ci0gICAgaWYgKGRhdGEpCi0gICAgICAgIHNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVk
KTsKLX0KLQotYm9vbCBJbWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2RlY29kZXI7Ci19Ci0KLXZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVm
ZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSAgICAvLyBNYWtlIHRoZSBkZWNv
ZGVyIGJ5IHNuaWZmaW5nIHRoZSBieXRlcy4KLSAgICAvLyBUaGlzIG1ldGhvZCB3aWxsIGV4YW1p
bmUgdGhlIGRhdGEgYW5kIGluc3RhbnRpYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBhcHByb3ByaWF0
ZSBkZWNvZGVyIHBsdWdpbi4KLSAgICAvLyBJZiBpbnN1ZmZpY2llbnQgYnl0ZXMgYXJlIGF2YWls
YWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5cGUsIG5vIGRlY29kZXIgcGx1Z2luIHdpbGwg
YmUKLSAgICAvLyBtYWRlLgotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICBtX2RlY29kZXIg
PSBjcmVhdGVEZWNvZGVyKGRhdGEtPmJ1ZmZlcigpKTsKLQotICAgIGlmICghbV9kZWNvZGVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RlY29kZXItPnNldERhdGEoZGF0YSwgYWxsRGF0YVJl
Y2VpdmVkKTsKLX0KLQotU3RyaW5nIEltYWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQot
ICAgIHJldHVybiBtX2RlY29kZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCk7Ci19Ci0KLWJvb2wgSW1h
Z2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSgpCi17Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX2RlY29kZXItPmlzU2l6ZUF2YWlsYWJs
ZSgpOwotfQotCi1JbnRTaXplIEltYWdlU291cmNlOjpzaXplKCkgY29uc3QKLXsKLSAgICBpZiAo
IW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIHJldHVybiBtX2Rl
Y29kZXItPnNpemUoKTsKLX0KLQotSW50U2l6ZSBJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRl
eChzaXplX3QpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNpemUoKTsKLX0KLQotaW50IEltYWdlU291
cmNlOjpyZXBldGl0aW9uQ291bnQoKQotewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICBy
ZXR1cm4gY0FuaW1hdGlvbk5vbmU7Ci0KLSAgICByZXR1cm4gbV9kZWNvZGVyLT5yZXBldGl0aW9u
Q291bnQoKTsKLX0KLQotc2l6ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCkgOiAwOwotfQot
Ci1OYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KHNpemVfdCBp
bmRleCkKLXsKLSAgICBpZiAoIWluaXRpYWxpemVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUkdCQTMyQnVmZmVy
KiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7Ci0gICAgaWYg
KCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gQ2Fpcm8gZG9lcyBub3QgbGlrZSB6ZXJvIGhl
aWdodCBpbWFnZXMuCi0gICAgLy8gSWYgd2UgaGF2ZSBhIHplcm8gaGVpZ2h0IGltYWdlLCBqdXN0
IHByZXRlbmQgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggZGF0YSB5ZXQuCi0gICAgaWYgKCFzaXplKCku
aGVpZ2h0KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGJ1ZmZlci0+YXNOZXdO
YXRpdmVJbWFnZSgpOwotfQotCi1ib29sIEltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdElu
ZGV4KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVm
ZmVyQXRJbmRleChpbmRleCk7Ci0gICAgcmV0dXJuIGJ1ZmZlciAmJiBidWZmZXItPnN0YXR1cygp
ID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZTsKLX0KLQotZmxvYXQgSW1hZ2VTb3VyY2U6
OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoIW1fZGVjb2Rl
cikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVj
b2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKLSAgICBpZiAoIWJ1ZmZlciB8fCBidWZm
ZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICAvLyBNYW55IGFubm95aW5nIGFkcyBzcGVjaWZ5IGEgMCBkdXJhdGlvbiB0byBt
YWtlIGFuIGltYWdlIGZsYXNoIGFzIHF1aWNrbHkKLSAgICAvLyBhcyBwb3NzaWJsZS4gIFdlIGZv
bGxvdyBXaW5JRSdzIGJlaGF2aW9yIGFuZCB1c2UgYSBkdXJhdGlvbiBvZiAxMDAgbXMKLSAgICAv
LyBmb3IgYW55IGZyYW1lcyB0aGF0IHNwZWNpZnkgYSBkdXJhdGlvbiBvZiA8PSA1MCBtcy4gIFNl
ZQotICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQxMz4g
b3IgUmFkYXIgNDA1MTM4OSBmb3IKLSAgICAvLyBtb3JlLgotICAgIGNvbnN0IGZsb2F0IGR1cmF0
aW9uID0gYnVmZmVyLT5kdXJhdGlvbigpIC8gMTAwMC4wZjsKLSAgICByZXR1cm4gKGR1cmF0aW9u
IDwgMC4wNTFmKSA/IDAuMTAwZiA6IGR1cmF0aW9uOwotfQotCi1ib29sIEltYWdlU291cmNlOjpm
cmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpCi17Ci0gICAgLy8gV2hlbiBhIGZyYW1l
IGhhcyBub3QgZmluaXNoZWQgZGVjb2RpbmcsIGFsd2F5cyBtYXJrIGl0IGFzIGhhdmluZyBhbHBo
YSwKLSAgICAvLyBzbyB3ZSBkb24ndCBnZXQgYSBibGFjayBiYWNrZ3JvdW5kIGZvciB0aGUgdW5k
ZWNvZGVkIHNlY3Rpb25zLgotICAgIC8vIFRPRE86IEEgYmV0dGVyIHNvbHV0aW9uIGlzIHByb2Jh
Ymx5IHRvIGhhdmUgdGhlIHVuZGVybHlpbmcgYnVmZmVyJ3MKLSAgICAvLyBoYXNBbHBoYSgpIHJl
dHVybiB0cnVlIGluIHRoZXNlIGNhc2VzLCBzaW5jZSBpdCBpcywgaW4gZmFjdCwgdGVjaG5pY2Fs
bHkKLSAgICAvLyB0cnVlLgotICAgIGlmICghZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIG1fZGVjb2Rlci0+ZnJhbWVCdWZm
ZXJBdEluZGV4KGluZGV4KS0+aGFzQWxwaGEoKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gUExBVEZP
Uk0oQ0FJUk8pCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1h
Z2VTb3VyY2VTa2lhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNv
dXJjZVNraWEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjk3N2ViLi4wMDAw
MDAwCi0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNvdXJjZVNraWEu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiSW1hZ2VTb3VyY2VTa2lhLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCi0KLSNpbmNsdWRlICJHSUZJbWFnZURlY29kZXIuaCIKLSNpbmNsdWRlICJJQ09JbWFnZURl
Y29kZXIuaCIKLSNpbmNsdWRlICJKUEVHSW1hZ2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiUE5HSW1h
Z2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiQk1QSW1hZ2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiWEJN
SW1hZ2VEZWNvZGVyLmgiCi0KLSNpbmNsdWRlICJTa0JpdG1hcC5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLUltYWdlRGVjb2RlciogY3JlYXRlRGVjb2Rlcihjb25zdCBWZWN0b3I8Y2hhcj4m
IGRhdGEsIGNvbnN0IEludFNpemUmIHByZWZlcnJlZEljb25TaXplKQotewotICAgIC8vIFdlIG5l
ZWQgYXQgbGVhc3QgNCBieXRlcyB0byBmaWd1cmUgb3V0IHdoYXQga2luZCBvZiBpbWFnZSB3ZSdy
ZSBkZWFsaW5nIHdpdGguCi0gICAgaW50IGxlbmd0aCA9IGRhdGEuc2l6ZSgpOwotICAgIGlmIChs
ZW5ndGggPCA0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIq
IHVDb250ZW50cyA9IChjb25zdCB1bnNpZ25lZCBjaGFyKilkYXRhLmRhdGEoKTsKLSAgICBjb25z
dCBjaGFyKiBjb250ZW50cyA9IGRhdGEuZGF0YSgpOwotCi0gICAgLy8gR0lGcyBiZWdpbiB3aXRo
IEdJRjgoNyBvciA5KS4KLSAgICBpZiAoc3RybmNtcChjb250ZW50cywgIkdJRjgiLCA0KSA9PSAw
KQotICAgICAgICByZXR1cm4gbmV3IEdJRkltYWdlRGVjb2RlcigpOwotCi0gICAgLy8gVGVzdCBm
b3IgUE5HLgotICAgIGlmICh1Q29udGVudHNbMF09PTB4ODkgJiYKLSAgICAgICAgdUNvbnRlbnRz
WzFdPT0weDUwICYmCi0gICAgICAgIHVDb250ZW50c1syXT09MHg0RSAmJgotICAgICAgICB1Q29u
dGVudHNbM109PTB4NDcpCi0gICAgICAgIHJldHVybiBuZXcgUE5HSW1hZ2VEZWNvZGVyKCk7Ci0K
LSAgICAvLyBKUEVHCi0gICAgaWYgKHVDb250ZW50c1swXT09MHhGRiAmJgotICAgICAgICB1Q29u
dGVudHNbMV09PTB4RDggJiYKLSAgICAgICAgdUNvbnRlbnRzWzJdPT0weEZGKQotICAgICAgICBy
ZXR1cm4gbmV3IEpQRUdJbWFnZURlY29kZXIoKTsKLQotICAgIC8vIEJNUAotICAgIGlmIChzdHJu
Y21wKGNvbnRlbnRzLCAiQk0iLCAyKSA9PSAwKQotICAgICAgICByZXR1cm4gbmV3IEJNUEltYWdl
RGVjb2RlcigpOwotCi0gICAgLy8gSUNPcyBhbHdheXMgYmVnaW4gd2l0aCBhIDItYnl0ZSAwIGZv
bGxvd2VkIGJ5IGEgMi1ieXRlIDEuCi0gICAgLy8gQ1VScyBiZWdpbiB3aXRoIDItYnl0ZSAwIGZv
bGxvd2VkIGJ5IDItYnl0ZSAyLgotICAgIGlmICghbWVtY21wKGNvbnRlbnRzLCAiXDAwMFwwMDBc
MDAxXDAwMCIsIDQpIHx8Ci0gICAgICAgICFtZW1jbXAoY29udGVudHMsICJcMDAwXDAwMFwwMDJc
MDAwIiwgNCkpCi0gICAgICAgIHJldHVybiBuZXcgSUNPSW1hZ2VEZWNvZGVyKHByZWZlcnJlZElj
b25TaXplKTsKLSAgIAotICAgIC8vIFhCTXMgcmVxdWlyZSA4IGJ5dGVzIG9mIGluZm8uCi0gICAg
aWYgKGxlbmd0aCA+PSA4ICYmIHN0cm5jbXAoY29udGVudHMsICIjZGVmaW5lICIsIDgpID09IDAp
Ci0gICAgICAgIHJldHVybiBuZXcgWEJNSW1hZ2VEZWNvZGVyKCk7Ci0KLSAgICAvLyBHaXZlIHVw
LiBXZSBkb24ndCBrbm93IHdoYXQgdGhlIGhlY2sgdGhpcyBpcy4KLSAgICByZXR1cm4gMDsKLX0K
LQotSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKCkKLSAgICA6IG1fZGVjb2RlcigwKQote30KLQot
SW1hZ2VTb3VyY2U6On5JbWFnZVNvdXJjZSgpCi17Ci0gICAgY2xlYXIodHJ1ZSk7Ci19Ci0KLXZv
aWQgSW1hZ2VTb3VyY2U6OmNsZWFyKGJvb2wgZGVzdHJveUFsbCwgc2l6ZV90IGNsZWFyQmVmb3Jl
RnJhbWUsIFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAg
aWYgKCFkZXN0cm95QWxsKSB7Ci0gICAgICAgIGlmIChtX2RlY29kZXIpCi0gICAgICAgICAgICBt
X2RlY29kZXItPmNsZWFyRnJhbWVCdWZmZXJDYWNoZShjbGVhckJlZm9yZUZyYW1lKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRlbGV0ZSBtX2RlY29kZXI7Ci0gICAgbV9kZWNvZGVy
ID0gMDsKLSAgICBpZiAoZGF0YSkKLSAgICAgICAgc2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2
ZWQpOwotfQotCi1ib29sIEltYWdlU291cmNlOjppbml0aWFsaXplZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fZGVjb2RlcjsKLX0KLQotdm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRC
dWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQotewotICAgIC8vIE1ha2UgdGhlIGRl
Y29kZXIgYnkgc25pZmZpbmcgdGhlIGJ5dGVzLgotICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgZXhh
bWluZSB0aGUgZGF0YSBhbmQgaW5zdGFudGlhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGFwcHJvcHJp
YXRlIGRlY29kZXIgcGx1Z2luLgotICAgIC8vIElmIGluc3VmZmljaWVudCBieXRlcyBhcmUgYXZh
aWxhYmxlIHRvIGRldGVybWluZSB0aGUgaW1hZ2UgdHlwZSwgbm8gZGVjb2RlciBwbHVnaW4gd2ls
bCBiZQotICAgIC8vIG1hZGUuCi0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIG1fZGVjb2Rl
ciA9IGNyZWF0ZURlY29kZXIoZGF0YS0+YnVmZmVyKCksIEludFNpemUoKSk7Ci0KLSAgICAvLyBD
cmVhdGVEZWNvZGVyIHdpbGwgcmV0dXJuIE5VTEwgaWYgdGhlIGRlY29kZXIgY291bGQgbm90IGJl
IGNyZWF0ZWQuIFBsdXMsCi0gICAgLy8gd2Ugc2hvdWxkIG5vdCBzZW5kIG1vcmUgZGF0YSB0byBh
IGRlY29kZXIgd2hpY2ggaGFzIGFscmVhZHkgZGVjaWRlZCBpdAotICAgIC8vIGhhcyBmYWlsZWQu
Ci0gICAgaWYgKCFtX2RlY29kZXIgfHwgbV9kZWNvZGVyLT5mYWlsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIG1fZGVjb2Rlci0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwotfQot
Ci1ib29sIEltYWdlU291cmNlOjppc1NpemVBdmFpbGFibGUoKQotewotICAgIGlmICghbV9kZWNv
ZGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbV9kZWNvZGVyLT5pc1Np
emVBdmFpbGFibGUoKTsKLX0KLQotSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZSgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBy
ZXR1cm4gbV9kZWNvZGVyLT5zaXplKCk7Ci19Ci0KLUludFNpemUgSW1hZ2VTb3VyY2U6OmZyYW1l
U2l6ZUF0SW5kZXgoc2l6ZV90KSBjb25zdAotewotICAgIC8vIFRPRE8oYnJldHR3KSBkbyB3ZSBu
ZWVkIGFueXRoaW5nIGhlcmU/Ci0gICAgcmV0dXJuIHNpemUoKTsKLX0KLQotaW50IEltYWdlU291
cmNlOjpyZXBldGl0aW9uQ291bnQoKQotewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICBy
ZXR1cm4gY0FuaW1hdGlvbk5vbmU7Ci0KLSAgICByZXR1cm4gbV9kZWNvZGVyLT5yZXBldGl0aW9u
Q291bnQoKTsKLX0KLQotc2l6ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50KCkgY29uc3QKLXsK
LSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fZGVj
b2Rlci0+ZmFpbGVkKCkgPyAwIDogbV9kZWNvZGVyLT5mcmFtZUNvdW50KCk7Ci19Ci0KLU5hdGl2
ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4KQot
ewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIE5vdGUg
dGhhdCB0aGUgYnVmZmVyIGNhbiBoYXZlIE5VTEwgYnl0ZXMgZXZlbiB3aGVuIGl0IGlzIG1hcmtl
ZCBhcwotICAgIC8vIG5vbi1lbXB0eS4gSXQgc2VlbXMgIkZyYW1lRW1wdHkiIGlzIG9ubHkgc2V0
IGJlZm9yZSB0aGUgZnJhbWUgaGFzIGJlZW4KLSAgICAvLyBpbml0aWFsaXplZC4gSWYgaXQgaXMg
ZGVjb2RlZCBhbmQgaXQgaGFwcGVucyB0byBiZSBlbXB0eSwgaXQgd2lsbCBiZQotICAgIC8vIG1h
cmtlZCBhcyAiRnJhbWVDb21wbGV0ZSIgYnV0IHdpbGwgc3RpbGwgaGF2ZSBOVUxMIGJ5dGVzLgot
ICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgo
aW5kZXgpOwotICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVm
ZmVyOjpGcmFtZUVtcHR5KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIENvcHkgdGhlIGJp
dG1hcC4gIFRoZSBwaXhlbCBkYXRhIGlzIHJlZmNvdW50ZWQgaW50ZXJuYWxseSBieSBTa0JpdG1h
cCwgc28KLSAgICAvLyB0aGlzIGRvZXNuJ3QgY29zdCBtdWNoLiAgCi0gICAgcmV0dXJuIGJ1ZmZl
ci0+YXNOZXdOYXRpdmVJbWFnZSgpOwotfQotCi1ib29sIEltYWdlU291cmNlOjpmcmFtZUlzQ29t
cGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXIt
PmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7Ci0gICAgcmV0dXJuIGJ1ZmZlciAmJiBidWZmZXIt
PnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZTsKLX0KLQotZmxvYXQgSW1h
Z2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAo
IW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZl
ciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKLSAgICBpZiAoIWJ1ZmZl
ciB8fCBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBNYW55IGFubm95aW5nIGFkcyBzcGVjaWZ5IGEgMCBkdXJh
dGlvbiB0byBtYWtlIGFuIGltYWdlIGZsYXNoIGFzIHF1aWNrbHkKLSAgICAvLyBhcyBwb3NzaWJs
ZS4gIFdlIGZvbGxvdyBXaW5JRSdzIGJlaGF2aW9yIGFuZCB1c2UgYSBkdXJhdGlvbiBvZiAxMDAg
bXMKLSAgICAvLyBmb3IgYW55IGZyYW1lcyB0aGF0IHNwZWNpZnkgYSBkdXJhdGlvbiBvZiA8PSA1
MCBtcy4gIFNlZQotICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDQxMz4gb3IgUmFkYXIgNDA1MTM4OSBmb3IKLSAgICAvLyBtb3JlLgotICAgIGNvbnN0IGZs
b2F0IGR1cmF0aW9uID0gYnVmZmVyLT5kdXJhdGlvbigpIC8gMTAwMC4wZjsKLSAgICByZXR1cm4g
KGR1cmF0aW9uIDwgMC4wNTFmKSA/IDAuMTAwZiA6IGR1cmF0aW9uOwotfQotCi1ib29sIEltYWdl
U291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpCi17Ci0gICAgaWYgKCFt
X2RlY29kZXIgfHwgIW1fZGVjb2Rlci0+c3VwcG9ydHNBbHBoYSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZm
ZXJBdEluZGV4KGluZGV4KTsKLSAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09
IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cmV0dXJuIGJ1ZmZlci0+aGFzQWxwaGEoKTsKLX0KLQotdm9pZCBJbWFnZVNvdXJjZVNraWE6OnNl
dERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbnRTaXplJiBwcmVmZXJyZWRJY29uU2l6ZSkKLXsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAg
ICAgICAgbV9kZWNvZGVyID0gY3JlYXRlRGVjb2RlcihkYXRhLT5idWZmZXIoKSwgcHJlZmVycmVk
SWNvblNpemUpOwotCi0gICAgSW1hZ2VTb3VyY2U6OnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2Vp
dmVkKTsKLX0KLQotU3RyaW5nIEltYWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fZGVjb2RlciA/IG1fZGVjb2Rlci0+ZmlsZW5hbWVFeHRlbnNpb24o
KSA6IFN0cmluZygpOwotfQotCi19CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VTb3VyY2VTa2lhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvSW1hZ2VTb3VyY2VTa2lhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYjRh
OTUuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU291
cmNlU2tpYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoYykgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiSW1h
Z2VTb3VyY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbWFnZVNvdXJjZVNr
aWEgOiBwdWJsaWMgSW1hZ2VTb3VyY2UgewotcHVibGljOgotICAgIC8vIEZJWE1FOiBUaGlzIGNs
YXNzIGlzIGEgaGFjayB0byBzdXBwb3J0IENocm9taXVtJ3MgSUNPIGRlY29kZXIKLSAgICAvLyBD
dXJyZW50bHkgb3VyIElDTyBkZWNvZGVyIGRlY29kZXMgYWxsIGRhdGEgZHVyaW5nIHNldERhdGEo
KSBpbnN0ZWFkIG9mCi0gICAgLy8gYmVpbmcgbGF6eS4gIEluIGFkZGl0aW9uLCBpdCBvbmx5IGRl
Y29kZXMgb25lIGZyYW1lIChjbG9zZXN0IHRvIHRoZSBzaXplCi0gICAgLy8gcGFzc2VkIHRvIHRo
ZSBkZWNvZGVyIGR1cmluZyBjcmVhdGVEZWNvZGVyLCBjYWxsZWQgZnJvbSBzZXREYXRhKSBhbmQK
LSAgICAvLyBkaXNjYXJkcyBhbGwgb3RoZXIgZGF0YSBpbiB0aGUgZmlsZS4KLSAgICAvLwotICAg
IC8vIFRvIGZpeCB0aGlzIHdpbGwgcmVxdWlyZSBmaXhpbmcgdGhlIElDTyBkZWNvZGVyIHRvIGJl
IGxhenksIG9yIHRvIGRlY29kZQotICAgIC8vIGFsbCBmcmFtZXMuICBBcHBsZSdzIGRlY29kZXJz
IChJbWFnZUlPKSBkZWNvZGUgYWxsIGZyYW1lcywgYW5kIHJldHVybgotICAgIC8vIHRoZW0gYWxs
IHNvcnRlZCBpbiBkZWNyZWFzaW5nIHNpemUuICBXZWJDb3JlIGFsd2F5cyBkcmF3cyB0aGUgZmly
c3QgZnJhbWUuCi0gICAgLy8KLSAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbC1wdXJwb3NlIHJvdXRp
bmUgZm9yIHRoZSBmYXZpY29uIGRlY29kZXIsIHdoaWNoIGlzIHVzZWQKLSAgICAvLyB0byBzcGVj
aWZ5IGEgcGFydGljdWxhciBpY29uIHNpemUgZm9yIHRoZSBJQ09JbWFnZURlY29kZXIgdG8gcHJl
ZmVyCi0gICAgLy8gZGVjb2RpbmcuICBOb3RlIHRoYXQgbm90IGFsbCBmYXZpY29ucyBhcmUgSUNP
cywgc28gdGhpcyB3b24ndAotICAgIC8vIG5lY2Vzc2FyaWx5IGRvIGFueXRoaW5nIGRpZmZlcmVu
dGx5IHRoYW4gSW1hZ2VTb3VyY2U6OnNldERhdGEoKS4KLSAgICAvLwotICAgIC8vIFBhc3Npbmcg
YW4gZW1wdHkgSW50U2l6ZSBmb3IgfHByZWZlcnJlZEljb25TaXplfCBoZXJlIGlzIGV4YWN0bHkK
LSAgICAvLyBlcXVpdmFsZW50IHRvIGp1c3QgY2FsbGluZyBJbWFnZVNvdXJjZTo6c2V0RGF0YSgp
LiAgU2VlIGFsc28gY29tbWVudHMgaW4KLSAgICAvLyBJQ09JbWFnZURlY29kZXIuY3BwLgotICAg
IHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsCi0gICAgICAgICAgICAgICAgIGJvb2wg
YWxsRGF0YVJlY2VpdmVkLAotICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBwcmVmZXJy
ZWRJY29uU2l6ZSk7Ci19OwotCi19Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34586</attachid>
            <date>2009-08-11 13:10:18 -0700</date>
            <delta_ts>2009-08-11 16:20:30 -0700</delta_ts>
            <desc>Move ImageSourceCairo.cpp to ImageSource.cpp</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19946</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQ3MDQ4KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNyBAQAorMjAwOS0wOC0xMSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3OTY1CisgICAgICAg
IE1vdmUgY2Fpcm8vSW1hZ2VTb3VyY2VDYWlyby5jcHAgdG8gSW1hZ2VTb3VyY2UuY3BwIGluIHBy
ZXBhcmF0aW9uIGZvcgorICAgICAgICBtZXJnaW5nIG1vc3Qgb2YgdGhlIG90aGVyIEltYWdlU291
cmNlKi5jcHAgZmlsZXMgd2l0aCBpdC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6IENvcGll
ZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VTb3VyY2VDYWlyby5j
cHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VTb3VyY2VDYWlyby5j
cHA6IFJlbW92ZWQuCisKIDIwMDktMDgtMTEgIE5pa29sYXMgWmltbWVybWFubiAgPG5pa29sYXMu
emltbWVybWFubkB0b3JjaG1vYmlsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2Vvcmdl
IFN0YWlrb3MuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDcwNDQpCisrKyBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDY2LDYgKzE0NjYsNyBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggXAogCVdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmggXAogCVdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAgXApAQCAtMTg1Nyw3ICsxODU4LDYgQEAg
d2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyRGF0YS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQ2Fpcm8uY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlU291
cmNlQ2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWly
by5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJp
eENhaXJvLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQ0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA0NzA0NCkKKysrIFdlYkNvcmUvV2ViQ29y
ZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQ4LDcgKzE3NDgsNiBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGEuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAnLAotICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlU291cmNlQ2Fpcm8uY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNw
cCcsCkBAIC0yMDYwLDYgKzIwNTksNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2Jz
ZXJ2ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UmVjdC5oJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CShyZXZpc2lvbiA0NzA0NCkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTE4Mzg5LDYgKzE4Mzg5LDM0IEBACiAJCQkJCT4NCiAJCQkJ
PC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xJbWFnZVNvdXJjZS5jcHAiDQorCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24N
CisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQkJRXhjbHVkZWRG
cm9tQnVpbGQ9InRydWUiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQor
CQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJEZWJ1Z19JbnRlcm5hbHxXaW4z
MiINCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCQk+DQorCQkJCQkJPFRv
b2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkvPg0KKwkJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xJbWFnZVNvdXJjZS5oIg0KIAkJCQkJPg0KIAkJ
CQk8L0ZpbGU+DQpAQCAtMTk1NjQsMzQgKzE5NTkyLDYgQEAKIAkJCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fpcm9cSW1hZ2VTb3VyY2VDYWlyby5jcHAiDQotCQkJCQkJ
Pg0KLQkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIN
Ci0JCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQkJCT4NCi0JCQkJCQkJPFRv
b2wNCi0JCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCS8+DQotCQkJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQkJ
TmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQot
CQkJCQkJCT4NCi0JCQkJCQkJPFRvb2wNCi0JCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
DQotCQkJCQkJCS8+DQotCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24NCi0JCQkJCQkJTmFtZT0iRGVidWdfSW50ZXJuYWx8V2luMzIiDQotCQkJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJCQk+DQotCQkJCQkJCTxUb29sDQotCQkJ
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQkvPg0KLQkJCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+DQotCQkJCQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fpcm9cUGF0aENhaXJvLmNwcCINCiAJCQkJCQk+
DQogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQpJbmRleDogV2ViQ29yZVxwbGF0Zm9ybVxncmFw
aGljc1xJbWFnZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZVxwbGF0Zm9ybVxncmFw
aGljc1xJbWFnZVNvdXJjZS5jcHAJKHJldmlzaW9uIDQ3MDQ0KQkoZnJvbSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlU291cmNlQ2Fpcm8uY3BwOjQ3MDQ0KQorKysgV2ViQ29y
ZVxwbGF0Zm9ybVxncmFwaGljc1xJbWFnZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMzkgQEAKKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9r
ZXIgPGFscC50b2tlckBjb2xsYWJvcmEuY28udWs+DQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMNCisgKiBhcmUgbWV0Og0KKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0DQorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZDQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVINCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IN
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwNCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sDQorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SDQorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQ0KKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICov
DQorDQorI2luY2x1ZGUgImNvbmZpZy5oIg0KKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIg0KKw0K
KyNpZiBQTEFURk9STShDQUlSTykNCisNCisjaW5jbHVkZSAiQk1QSW1hZ2VEZWNvZGVyLmgiDQor
I2luY2x1ZGUgIkdJRkltYWdlRGVjb2Rlci5oIg0KKyNpbmNsdWRlICJJQ09JbWFnZURlY29kZXIu
aCINCisjaW5jbHVkZSAiSlBFR0ltYWdlRGVjb2Rlci5oIg0KKyNpbmNsdWRlICJQTkdJbWFnZURl
Y29kZXIuaCINCisjaW5jbHVkZSAiWEJNSW1hZ2VEZWNvZGVyLmgiDQorI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIg0KKyNpbmNsdWRlIDxjYWlyby5oPg0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsN
CisNCitJbWFnZURlY29kZXIqIGNyZWF0ZURlY29kZXIoY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRh
KQ0KK3sNCisgICAgLy8gV2UgbmVlZCBhdCBsZWFzdCA0IGJ5dGVzIHRvIGZpZ3VyZSBvdXQgd2hh
dCBraW5kIG9mIGltYWdlIHdlJ3JlIGRlYWxpbmcgd2l0aC4NCisgICAgaW50IGxlbmd0aCA9IGRh
dGEuc2l6ZSgpOw0KKyAgICBpZiAobGVuZ3RoIDwgNCkNCisgICAgICAgIHJldHVybiAwOw0KKw0K
KyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiB1Q29udGVudHMgPSAoY29uc3QgdW5zaWduZWQgY2hh
ciopZGF0YS5kYXRhKCk7DQorICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRzID0gZGF0YS5kYXRhKCk7
DQorDQorICAgIC8vIEdJRnMgYmVnaW4gd2l0aCBHSUY4KDcgb3IgOSkuDQorICAgIGlmIChzdHJu
Y21wKGNvbnRlbnRzLCAiR0lGOCIsIDQpID09IDApDQorICAgICAgICByZXR1cm4gbmV3IEdJRklt
YWdlRGVjb2RlcigpOw0KKw0KKyAgICAvLyBUZXN0IGZvciBQTkcuDQorICAgIGlmICh1Q29udGVu
dHNbMF09PTB4ODkgJiYNCisgICAgICAgIHVDb250ZW50c1sxXT09MHg1MCAmJg0KKyAgICAgICAg
dUNvbnRlbnRzWzJdPT0weDRFICYmDQorICAgICAgICB1Q29udGVudHNbM109PTB4NDcpDQorICAg
ICAgICByZXR1cm4gbmV3IFBOR0ltYWdlRGVjb2RlcigpOw0KKw0KKyAgICAvLyBKUEVHDQorICAg
IGlmICh1Q29udGVudHNbMF09PTB4RkYgJiYNCisgICAgICAgIHVDb250ZW50c1sxXT09MHhEOCAm
Jg0KKyAgICAgICAgdUNvbnRlbnRzWzJdPT0weEZGKQ0KKyAgICAgICAgcmV0dXJuIG5ldyBKUEVH
SW1hZ2VEZWNvZGVyKCk7DQorDQorICAgIC8vIEJNUA0KKyAgICBpZiAoc3RybmNtcChjb250ZW50
cywgIkJNIiwgMikgPT0gMCkNCisgICAgICAgIHJldHVybiBuZXcgQk1QSW1hZ2VEZWNvZGVyKCk7
DQorDQorICAgIC8vIElDT3MgYWx3YXlzIGJlZ2luIHdpdGggYSAyLWJ5dGUgMCBmb2xsb3dlZCBi
eSBhIDItYnl0ZSAxLg0KKyAgICAvLyBDVVJzIGJlZ2luIHdpdGggMi1ieXRlIDAgZm9sbG93ZWQg
YnkgMi1ieXRlIDIuDQorICAgIGlmICghbWVtY21wKGNvbnRlbnRzLCAiXDAwMFwwMDBcMDAxXDAw
MCIsIDQpIHx8DQorICAgICAgICAhbWVtY21wKGNvbnRlbnRzLCAiXDAwMFwwMDBcMDAyXDAwMCIs
IDQpKQ0KKyAgICAgICAgcmV0dXJuIG5ldyBJQ09JbWFnZURlY29kZXIoKTsNCisNCisgICAgLy8g
WEJNcyByZXF1aXJlIDggYnl0ZXMgb2YgaW5mby4NCisgICAgaWYgKGxlbmd0aCA+PSA4ICYmIHN0
cm5jbXAoY29udGVudHMsICIjZGVmaW5lICIsIDgpID09IDApDQorICAgICAgICByZXR1cm4gbmV3
IFhCTUltYWdlRGVjb2RlcigpOw0KKw0KKyAgICAvLyBHaXZlIHVwLiBXZSBkb24ndCBrbm93IHdo
YXQgdGhlIGhlY2sgdGhpcyBpcy4NCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KK0ltYWdlU291cmNl
OjpJbWFnZVNvdXJjZSgpDQorICAgIDogbV9kZWNvZGVyKDApDQorew0KK30NCisNCitJbWFnZVNv
dXJjZTo6fkltYWdlU291cmNlKCkNCit7DQorICAgIGNsZWFyKHRydWUpOw0KK30NCisNCit2b2lk
IEltYWdlU291cmNlOjpjbGVhcihib29sIGRlc3Ryb3lBbGwsIHNpemVfdCBjbGVhckJlZm9yZUZy
YW1lLCBTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQ0KK3sNCisgICAg
aWYgKCFkZXN0cm95QWxsKSB7DQorICAgICAgICBpZiAobV9kZWNvZGVyKQ0KKyAgICAgICAgICAg
IG1fZGVjb2Rlci0+Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKGNsZWFyQmVmb3JlRnJhbWUpOw0KKyAg
ICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIGRlbGV0ZSBtX2RlY29kZXI7DQorICAgIG1f
ZGVjb2RlciA9IDA7DQorICAgIGlmIChkYXRhKQ0KKyAgICAgICAgc2V0RGF0YShkYXRhLCBhbGxE
YXRhUmVjZWl2ZWQpOw0KK30NCisNCitib29sIEltYWdlU291cmNlOjppbml0aWFsaXplZCgpIGNv
bnN0DQorew0KKyAgICByZXR1cm4gbV9kZWNvZGVyOw0KK30NCisNCit2b2lkIEltYWdlU291cmNl
OjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpDQorew0K
KyAgICAvLyBNYWtlIHRoZSBkZWNvZGVyIGJ5IHNuaWZmaW5nIHRoZSBieXRlcy4NCisgICAgLy8g
VGhpcyBtZXRob2Qgd2lsbCBleGFtaW5lIHRoZSBkYXRhIGFuZCBpbnN0YW50aWF0ZSBhbiBpbnN0
YW5jZSBvZiB0aGUgYXBwcm9wcmlhdGUgZGVjb2RlciBwbHVnaW4uDQorICAgIC8vIElmIGluc3Vm
ZmljaWVudCBieXRlcyBhcmUgYXZhaWxhYmxlIHRvIGRldGVybWluZSB0aGUgaW1hZ2UgdHlwZSwg
bm8gZGVjb2RlciBwbHVnaW4gd2lsbCBiZQ0KKyAgICAvLyBtYWRlLg0KKyAgICBpZiAoIW1fZGVj
b2RlcikNCisgICAgICAgIG1fZGVjb2RlciA9IGNyZWF0ZURlY29kZXIoZGF0YS0+YnVmZmVyKCkp
Ow0KKw0KKyAgICBpZiAoIW1fZGVjb2RlcikNCisgICAgICAgIHJldHVybjsNCisNCisgICAgbV9k
ZWNvZGVyLT5zZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7DQorfQ0KKw0KK1N0cmluZyBJ
bWFnZVNvdXJjZTo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdA0KK3sNCisgICAgaWYgKCFtX2Rl
Y29kZXIpDQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7DQorDQorICAgIHJldHVybiBtX2RlY29k
ZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCk7DQorfQ0KKw0KK2Jvb2wgSW1hZ2VTb3VyY2U6OmlzU2l6
ZUF2YWlsYWJsZSgpDQorew0KKyAgICBpZiAoIW1fZGVjb2RlcikNCisgICAgICAgIHJldHVybiBm
YWxzZTsNCisNCisgICAgcmV0dXJuIG1fZGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCk7DQorfQ0K
Kw0KK0ludFNpemUgSW1hZ2VTb3VyY2U6OnNpemUoKSBjb25zdA0KK3sNCisgICAgaWYgKCFtX2Rl
Y29kZXIpDQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOw0KKw0KKyAgICByZXR1cm4gbV9kZWNv
ZGVyLT5zaXplKCk7DQorfQ0KKw0KK0ludFNpemUgSW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5k
ZXgoc2l6ZV90IGluZGV4KSBjb25zdA0KK3sNCisgICAgaWYgKCFtX2RlY29kZXIpDQorICAgICAg
ICByZXR1cm4gSW50U2l6ZSgpOw0KKw0KKyAgICByZXR1cm4gbV9kZWNvZGVyLT5mcmFtZVNpemVB
dEluZGV4KGluZGV4KTsNCit9DQorDQoraW50IEltYWdlU291cmNlOjpyZXBldGl0aW9uQ291bnQo
KQ0KK3sNCisgICAgaWYgKCFtX2RlY29kZXIpDQorICAgICAgICByZXR1cm4gY0FuaW1hdGlvbk5v
bmU7DQorDQorICAgIHJldHVybiBtX2RlY29kZXItPnJlcGV0aXRpb25Db3VudCgpOw0KK30NCisN
CitzaXplX3QgSW1hZ2VTb3VyY2U6OmZyYW1lQ291bnQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJu
IG1fZGVjb2RlciA/IG1fZGVjb2Rlci0+ZnJhbWVDb3VudCgpIDogMDsNCit9DQorDQorTmF0aXZl
SW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpDQor
ew0KKyAgICBpZiAoIWluaXRpYWxpemVkKCkpDQorICAgICAgICByZXR1cm4gMDsNCisNCisgICAg
aWYgKCFtX2RlY29kZXIpDQorICAgICAgICByZXR1cm4gMDsNCisNCisgICAgUkdCQTMyQnVmZmVy
KiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7DQorICAgIGlm
ICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5
KQ0KKyAgICAgICAgcmV0dXJuIDA7DQorDQorICAgIC8vIENhaXJvIGRvZXMgbm90IGxpa2UgemVy
byBoZWlnaHQgaW1hZ2VzLg0KKyAgICAvLyBJZiB3ZSBoYXZlIGEgemVybyBoZWlnaHQgaW1hZ2Us
IGp1c3QgcHJldGVuZCB3ZSBkb24ndCBoYXZlIGVub3VnaCBkYXRhIHlldC4NCisgICAgaWYgKCFz
aXplKCkuaGVpZ2h0KCkpDQorICAgICAgICByZXR1cm4gMDsNCisNCisgICAgcmV0dXJuIGJ1ZmZl
ci0+YXNOZXdOYXRpdmVJbWFnZSgpOw0KK30NCisNCitib29sIEltYWdlU291cmNlOjpmcmFtZUlz
Q29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkNCit7DQorICAgIGlmICghbV9kZWNvZGVyKQ0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKw0KKyAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1f
ZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsNCisgICAgcmV0dXJuIGJ1ZmZlciAm
JiBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZTsNCit9DQor
DQorZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkN
Cit7DQorICAgIGlmICghbV9kZWNvZGVyKQ0KKyAgICAgICAgcmV0dXJuIDA7DQorDQorICAgIFJH
QkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgp
Ow0KKyAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6
RnJhbWVFbXB0eSkNCisgICAgICAgIHJldHVybiAwOw0KKw0KKyAgICAvLyBNYW55IGFubm95aW5n
IGFkcyBzcGVjaWZ5IGEgMCBkdXJhdGlvbiB0byBtYWtlIGFuIGltYWdlIGZsYXNoIGFzIHF1aWNr
bHkNCisgICAgLy8gYXMgcG9zc2libGUuICBXZSBmb2xsb3cgV2luSUUncyBiZWhhdmlvciBhbmQg
dXNlIGEgZHVyYXRpb24gb2YgMTAwIG1zDQorICAgIC8vIGZvciBhbnkgZnJhbWVzIHRoYXQgc3Bl
Y2lmeSBhIGR1cmF0aW9uIG9mIDw9IDUwIG1zLiAgU2VlDQorICAgIC8vIDxodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQxMz4gb3IgUmFkYXIgNDA1MTM4OSBmb3INCisg
ICAgLy8gbW9yZS4NCisgICAgY29uc3QgZmxvYXQgZHVyYXRpb24gPSBidWZmZXItPmR1cmF0aW9u
KCkgLyAxMDAwLjBmOw0KKyAgICByZXR1cm4gKGR1cmF0aW9uIDwgMC4wNTFmKSA/IDAuMTAwZiA6
IGR1cmF0aW9uOw0KK30NCisNCitib29sIEltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRl
eChzaXplX3QgaW5kZXgpDQorew0KKyAgICAvLyBXaGVuIGEgZnJhbWUgaGFzIG5vdCBmaW5pc2hl
ZCBkZWNvZGluZywgYWx3YXlzIG1hcmsgaXQgYXMgaGF2aW5nIGFscGhhLA0KKyAgICAvLyBzbyB3
ZSBkb24ndCBnZXQgYSBibGFjayBiYWNrZ3JvdW5kIGZvciB0aGUgdW5kZWNvZGVkIHNlY3Rpb25z
Lg0KKyAgICAvLyBUT0RPOiBBIGJldHRlciBzb2x1dGlvbiBpcyBwcm9iYWJseSB0byBoYXZlIHRo
ZSB1bmRlcmx5aW5nIGJ1ZmZlcidzDQorICAgIC8vIGhhc0FscGhhKCkgcmV0dXJuIHRydWUgaW4g
dGhlc2UgY2FzZXMsIHNpbmNlIGl0IGlzLCBpbiBmYWN0LCB0ZWNobmljYWxseQ0KKyAgICAvLyB0
cnVlLg0KKyAgICBpZiAoIWZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpKQ0KKyAgICAgICAg
cmV0dXJuIHRydWU7DQorDQorICAgIHJldHVybiBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRl
eChpbmRleCktPmhhc0FscGhhKCk7DQorfQ0KKw0KK30NCisNCisjZW5kaWYgLy8gUExBVEZPUk0o
Q0FJUk8pDQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNw
cAkocmV2aXNpb24gNDcwNDQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIlBOR0lt
YWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlhCTUltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPGNhaXJvLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZVNvdXJjZUNhaXJv
LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VTb3VyY2VDYWlyby5jcHAJKHJldmlzaW9uIDQ3MDQ0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZVNvdXJjZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwy
MzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIg
PGFscC50b2tlckBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkltYWdlU291cmNlLmgiCi0KLSNpZiBQTEFURk9STShDQUlSTykKLQotI2luY2x1
ZGUgIkJNUEltYWdlRGVjb2Rlci5oIgotI2luY2x1ZGUgIkdJRkltYWdlRGVjb2Rlci5oIgotI2lu
Y2x1ZGUgIklDT0ltYWdlRGVjb2Rlci5oIgotI2luY2x1ZGUgIkpQRUdJbWFnZURlY29kZXIuaCIK
LSNpbmNsdWRlICJQTkdJbWFnZURlY29kZXIuaCIKLSNpbmNsdWRlICJYQk1JbWFnZURlY29kZXIu
aCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDxjYWlyby5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUltYWdlRGVjb2RlciogY3JlYXRlRGVjb2Rlcihjb25zdCBWZWN0
b3I8Y2hhcj4mIGRhdGEpCi17Ci0gICAgLy8gV2UgbmVlZCBhdCBsZWFzdCA0IGJ5dGVzIHRvIGZp
Z3VyZSBvdXQgd2hhdCBraW5kIG9mIGltYWdlIHdlJ3JlIGRlYWxpbmcgd2l0aC4KLSAgICBpbnQg
bGVuZ3RoID0gZGF0YS5zaXplKCk7Ci0gICAgaWYgKGxlbmd0aCA8IDQpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgY29uc3QgdW5zaWduZWQgY2hhciogdUNvbnRlbnRzID0gKGNvbnN0IHVuc2ln
bmVkIGNoYXIqKWRhdGEuZGF0YSgpOwotICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRzID0gZGF0YS5k
YXRhKCk7Ci0KLSAgICAvLyBHSUZzIGJlZ2luIHdpdGggR0lGOCg3IG9yIDkpLgotICAgIGlmIChz
dHJuY21wKGNvbnRlbnRzLCAiR0lGOCIsIDQpID09IDApCi0gICAgICAgIHJldHVybiBuZXcgR0lG
SW1hZ2VEZWNvZGVyKCk7Ci0KLSAgICAvLyBUZXN0IGZvciBQTkcuCi0gICAgaWYgKHVDb250ZW50
c1swXT09MHg4OSAmJgotICAgICAgICB1Q29udGVudHNbMV09PTB4NTAgJiYKLSAgICAgICAgdUNv
bnRlbnRzWzJdPT0weDRFICYmCi0gICAgICAgIHVDb250ZW50c1szXT09MHg0NykKLSAgICAgICAg
cmV0dXJuIG5ldyBQTkdJbWFnZURlY29kZXIoKTsKLQotICAgIC8vIEpQRUcKLSAgICBpZiAodUNv
bnRlbnRzWzBdPT0weEZGICYmCi0gICAgICAgIHVDb250ZW50c1sxXT09MHhEOCAmJgotICAgICAg
ICB1Q29udGVudHNbMl09PTB4RkYpCi0gICAgICAgIHJldHVybiBuZXcgSlBFR0ltYWdlRGVjb2Rl
cigpOwotCi0gICAgLy8gQk1QCi0gICAgaWYgKHN0cm5jbXAoY29udGVudHMsICJCTSIsIDIpID09
IDApCi0gICAgICAgIHJldHVybiBuZXcgQk1QSW1hZ2VEZWNvZGVyKCk7Ci0KLSAgICAvLyBJQ09z
IGFsd2F5cyBiZWdpbiB3aXRoIGEgMi1ieXRlIDAgZm9sbG93ZWQgYnkgYSAyLWJ5dGUgMS4KLSAg
ICAvLyBDVVJzIGJlZ2luIHdpdGggMi1ieXRlIDAgZm9sbG93ZWQgYnkgMi1ieXRlIDIuCi0gICAg
aWYgKCFtZW1jbXAoY29udGVudHMsICJcMDAwXDAwMFwwMDFcMDAwIiwgNCkgfHwKLSAgICAgICAg
IW1lbWNtcChjb250ZW50cywgIlwwMDBcMDAwXDAwMlwwMDAiLCA0KSkKLSAgICAgICAgcmV0dXJu
IG5ldyBJQ09JbWFnZURlY29kZXIoKTsKLQotICAgIC8vIFhCTXMgcmVxdWlyZSA4IGJ5dGVzIG9m
IGluZm8uCi0gICAgaWYgKGxlbmd0aCA+PSA4ICYmIHN0cm5jbXAoY29udGVudHMsICIjZGVmaW5l
ICIsIDgpID09IDApCi0gICAgICAgIHJldHVybiBuZXcgWEJNSW1hZ2VEZWNvZGVyKCk7Ci0KLSAg
ICAvLyBHaXZlIHVwLiBXZSBkb24ndCBrbm93IHdoYXQgdGhlIGhlY2sgdGhpcyBpcy4KLSAgICBy
ZXR1cm4gMDsKLX0KLQotSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKCkKLSAgICA6IG1fZGVjb2Rl
cigwKQotewotfQotCi1JbWFnZVNvdXJjZTo6fkltYWdlU291cmNlKCkKLXsKLSAgICBjbGVhcih0
cnVlKTsKLX0KLQotdm9pZCBJbWFnZVNvdXJjZTo6Y2xlYXIoYm9vbCBkZXN0cm95QWxsLCBzaXpl
X3QgY2xlYXJCZWZvcmVGcmFtZSwgU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNl
aXZlZCkKLXsKLSAgICBpZiAoIWRlc3Ryb3lBbGwpIHsKLSAgICAgICAgaWYgKG1fZGVjb2RlcikK
LSAgICAgICAgICAgIG1fZGVjb2Rlci0+Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKGNsZWFyQmVmb3Jl
RnJhbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZGVsZXRlIG1fZGVjb2RlcjsK
LSAgICBtX2RlY29kZXIgPSAwOwotICAgIGlmIChkYXRhKQotICAgICAgICBzZXREYXRhKGRhdGEs
IGFsbERhdGFSZWNlaXZlZCk7Ci19Ci0KLWJvb2wgSW1hZ2VTb3VyY2U6OmluaXRpYWxpemVkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWNvZGVyOwotfQotCi12b2lkIEltYWdlU291cmNlOjpz
ZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAg
Ly8gTWFrZSB0aGUgZGVjb2RlciBieSBzbmlmZmluZyB0aGUgYnl0ZXMuCi0gICAgLy8gVGhpcyBt
ZXRob2Qgd2lsbCBleGFtaW5lIHRoZSBkYXRhIGFuZCBpbnN0YW50aWF0ZSBhbiBpbnN0YW5jZSBv
ZiB0aGUgYXBwcm9wcmlhdGUgZGVjb2RlciBwbHVnaW4uCi0gICAgLy8gSWYgaW5zdWZmaWNpZW50
IGJ5dGVzIGFyZSBhdmFpbGFibGUgdG8gZGV0ZXJtaW5lIHRoZSBpbWFnZSB0eXBlLCBubyBkZWNv
ZGVyIHBsdWdpbiB3aWxsIGJlCi0gICAgLy8gbWFkZS4KLSAgICBpZiAoIW1fZGVjb2RlcikKLSAg
ICAgICAgbV9kZWNvZGVyID0gY3JlYXRlRGVjb2RlcihkYXRhLT5idWZmZXIoKSk7Ci0KLSAgICBp
ZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kZWNvZGVyLT5zZXREYXRh
KGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Ci19Ci0KLVN0cmluZyBJbWFnZVNvdXJjZTo6ZmlsZW5h
bWVFeHRlbnNpb24oKSBjb25zdAotewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gbV9kZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigp
OwotfQotCi1ib29sIEltYWdlU291cmNlOjppc1NpemVBdmFpbGFibGUoKQotewotICAgIGlmICgh
bV9kZWNvZGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbV9kZWNvZGVy
LT5pc1NpemVBdmFpbGFibGUoKTsKLX0KLQotSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZSgpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0K
LSAgICByZXR1cm4gbV9kZWNvZGVyLT5zaXplKCk7Ci19Ci0KLUludFNpemUgSW1hZ2VTb3VyY2U6
OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAotewotICAgIGlmICghbV9kZWNv
ZGVyKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGVjb2Rlci0+
ZnJhbWVTaXplQXRJbmRleChpbmRleCk7Ci19Ci0KLWludCBJbWFnZVNvdXJjZTo6cmVwZXRpdGlv
bkNvdW50KCkKLXsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIGNBbmltYXRp
b25Ob25lOwotCi0gICAgcmV0dXJuIG1fZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCk7Ci19Ci0K
LXNpemVfdCBJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
ZGVjb2RlciA/IG1fZGVjb2Rlci0+ZnJhbWVDb3VudCgpIDogMDsKLX0KLQotTmF0aXZlSW1hZ2VQ
dHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpCi17Ci0gICAg
aWYgKCFpbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghbV9kZWNv
ZGVyKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9k
ZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwotICAgIGlmICghYnVmZmVyIHx8IGJ1
ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIC8vIENhaXJvIGRvZXMgbm90IGxpa2UgemVybyBoZWlnaHQgaW1hZ2VzLgot
ICAgIC8vIElmIHdlIGhhdmUgYSB6ZXJvIGhlaWdodCBpbWFnZSwganVzdCBwcmV0ZW5kIHdlIGRv
bid0IGhhdmUgZW5vdWdoIGRhdGEgeWV0LgotICAgIGlmICghc2l6ZSgpLmhlaWdodCgpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBidWZmZXItPmFzTmV3TmF0aXZlSW1hZ2UoKTsK
LX0KLQotYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5k
ZXgpCi17Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5k
ZXgpOwotICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZm
ZXI6OkZyYW1lQ29tcGxldGU7Ci19Ci0KLWZsb2F0IEltYWdlU291cmNlOjpmcmFtZUR1cmF0aW9u
QXRJbmRleChzaXplX3QgaW5kZXgpCi17Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVm
ZmVyQXRJbmRleChpbmRleCk7Ci0gICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9
PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8g
TWFueSBhbm5veWluZyBhZHMgc3BlY2lmeSBhIDAgZHVyYXRpb24gdG8gbWFrZSBhbiBpbWFnZSBm
bGFzaCBhcyBxdWlja2x5Ci0gICAgLy8gYXMgcG9zc2libGUuICBXZSBmb2xsb3cgV2luSUUncyBi
ZWhhdmlvciBhbmQgdXNlIGEgZHVyYXRpb24gb2YgMTAwIG1zCi0gICAgLy8gZm9yIGFueSBmcmFt
ZXMgdGhhdCBzcGVjaWZ5IGEgZHVyYXRpb24gb2YgPD0gNTAgbXMuICBTZWUKLSAgICAvLyA8aHR0
cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MTM+IG9yIFJhZGFyIDQwNTEz
ODkgZm9yCi0gICAgLy8gbW9yZS4KLSAgICBjb25zdCBmbG9hdCBkdXJhdGlvbiA9IGJ1ZmZlci0+
ZHVyYXRpb24oKSAvIDEwMDAuMGY7Ci0gICAgcmV0dXJuIChkdXJhdGlvbiA8IDAuMDUxZikgPyAw
LjEwMGYgOiBkdXJhdGlvbjsKLX0KLQotYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVIYXNBbHBoYUF0
SW5kZXgoc2l6ZV90IGluZGV4KQotewotICAgIC8vIFdoZW4gYSBmcmFtZSBoYXMgbm90IGZpbmlz
aGVkIGRlY29kaW5nLCBhbHdheXMgbWFyayBpdCBhcyBoYXZpbmcgYWxwaGEsCi0gICAgLy8gc28g
d2UgZG9uJ3QgZ2V0IGEgYmxhY2sgYmFja2dyb3VuZCBmb3IgdGhlIHVuZGVjb2RlZCBzZWN0aW9u
cy4KLSAgICAvLyBUT0RPOiBBIGJldHRlciBzb2x1dGlvbiBpcyBwcm9iYWJseSB0byBoYXZlIHRo
ZSB1bmRlcmx5aW5nIGJ1ZmZlcidzCi0gICAgLy8gaGFzQWxwaGEoKSByZXR1cm4gdHJ1ZSBpbiB0
aGVzZSBjYXNlcywgc2luY2UgaXQgaXMsIGluIGZhY3QsIHRlY2huaWNhbGx5Ci0gICAgLy8gdHJ1
ZS4KLSAgICBpZiAoIWZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIHJldHVybiBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRl
eCktPmhhc0FscGhhKCk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKENBSVJPKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34625</attachid>
            <date>2009-08-11 17:56:49 -0700</date>
            <delta_ts>2009-08-11 18:31:19 -0700</delta_ts>
            <desc>Merge in ImageSourceSkia.cpp</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>12608</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQ3MDc1KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOCBAQAorMjAwOS0wOC0xMSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3OTY1CisgICAgICAg
IE1lcmdlIHNraWEvSW1hZ2VTb3VyY2VTa2lhLmNwcCBpbnRvIEltYWdlU291cmNlLmNwcC4KKwor
ICAgICAgICAqIFdlYkNvcmUuZ3lwaTogUmVtb3ZlIGRlbGV0ZWQgZmlsZSwgcGx1cyBhIGZpbGUg
dGhhdCB3YXMgZGVsZXRlZCBhIHdoaWxlIGJhY2suCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERh
dGEpOiBVc2Ugc2xpZ2h0bHkgc2hvcnRlciBzeW50YXguCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVNvdXJjZTo6ZmlsZW5hbWVFeHRlbnNpb24pOiBVc2Ugc2hvcnRlciBzeW50YXguCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KTogUmVtb3ZlIHJlZHVu
ZGFudCBjYWxsLCBjbGFyaWZ5IGNvbW1lbnRzLCByZWplY3QgYWxsIGVtcHR5IGltYWdlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6IENsYXJp
ZnkgY29tbWVudHMsIHVzZSBzaG9ydGVyIHN5bnRheC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ltYWdlU291cmNlU2tpYS5jcHA6IFJlbW92ZWQuCisKIDIwMDktMDgtMTEgIFBl
dGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEFkYW0gVHJlYXQuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQ0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA0NzA3MykKKysrIFdlYkNvcmUvV2ViQ29y
ZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0xOTExLDggKzE5MTEsNiBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwJywKLSAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU291cmNlU2tpYS5jcHAnLAotICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTb3VyY2VTa2lhLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW50UG9pbnRTa2lhLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbnRSZWN0U2tpYS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcCcsCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCShyZXZpc2lvbiA0NzA3
MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
NyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xsYWJvcmEuY28udWs+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDggKzI4LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJJbWFnZVNvdXJjZS5oIgogCi0jaWYgUExBVEZPUk0oQ0FJUk8pCi0KICNpbmNsdWRl
ICJCTVBJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlICJHSUZJbWFnZURlY29kZXIuaCIKICNpbmNs
dWRlICJJQ09JbWFnZURlY29kZXIuaCIKQEAgLTEyMiwxOCArMTIxLDEzIEBAIHZvaWQgSW1hZ2VT
b3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiAKICAgICBpZiAoIW1fZGVjb2RlcikKICAgICAg
ICAgbV9kZWNvZGVyID0gY3JlYXRlRGVjb2RlcihkYXRhLT5idWZmZXIoKSk7CiAKLSAgICBpZiAo
IW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kZWNvZGVyLT5zZXREYXRhKGRh
dGEsIGFsbERhdGFSZWNlaXZlZCk7CisgICAgaWYgKG1fZGVjb2RlcikKKyAgICAgICAgbV9kZWNv
ZGVyLT5zZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiB9CiAKIFN0cmluZyBJbWFnZVNv
dXJjZTo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAogewotICAgIGlmICghbV9kZWNvZGVyKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gbV9kZWNvZGVyLT5maWxlbmFt
ZUV4dGVuc2lvbigpOworICAgIHJldHVybiBtX2RlY29kZXIgPyBtX2RlY29kZXItPmZpbGVuYW1l
RXh0ZW5zaW9uKCkgOiBTdHJpbmcoKTsKIH0KIAogYm9vbCBJbWFnZVNvdXJjZTo6aXNTaXplQXZh
aWxhYmxlKCkKQEAgLTE3NSw5ICsxNjksNiBAQCBzaXplX3QgSW1hZ2VTb3VyY2U6OmZyYW1lQ291
bnQoKSBjb25zdAogCiBOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdElu
ZGV4KHNpemVfdCBpbmRleCkKIHsKLSAgICBpZiAoIWluaXRpYWxpemVkKCkpCi0gICAgICAgIHJl
dHVybiAwOwotCiAgICAgaWYgKCFtX2RlY29kZXIpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0x
ODUsMTEgKzE3NiwxMyBAQCBOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVB
CiAgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZy
YW1lRW1wdHkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgLy8gQ2Fpcm8gZG9lcyBub3QgbGlr
ZSB6ZXJvIGhlaWdodCBpbWFnZXMuCi0gICAgLy8gSWYgd2UgaGF2ZSBhIHplcm8gaGVpZ2h0IGlt
YWdlLCBqdXN0IHByZXRlbmQgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggZGF0YSB5ZXQuCi0gICAgaWYg
KCFzaXplKCkuaGVpZ2h0KCkpCisgICAgLy8gWmVyby1oZWlnaHQgaW1hZ2VzIGNhbiBjYXVzZSBw
cm9ibGVtcyBmb3Igc29tZSBwb3J0cy4gIElmIHdlIGhhdmUgYW4KKyAgICAvLyBlbXB0eSBpbWFn
ZSBkaW1lbnNpb24sIGp1c3QgYmFpbC4KKyAgICBpZiAoc2l6ZSgpLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKKyAgICAvLyBSZXR1cm4gdGhlIGJ1ZmZlciBjb250ZW50cyBhcyBhIG5h
dGl2ZSBpbWFnZS4gIEZvciBzb21lIHBvcnRzLCB0aGUgZGF0YQorICAgIC8vIGlzIGFscmVhZHkg
aW4gYSBuYXRpdmUgY29udGFpbmVyLCBhbmQgdGhpcyBqdXN0IGluY3JlbWVudHMgaXRzIHJlZmNv
dW50LgogICAgIHJldHVybiBidWZmZXItPmFzTmV3TmF0aXZlSW1hZ2UoKTsKIH0KIApAQCAtMjIy
LDE3ICsyMTUsMTQgQEAgZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KAog
CiBib29sIEltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpCiB7
Ci0gICAgLy8gV2hlbiBhIGZyYW1lIGhhcyBub3QgZmluaXNoZWQgZGVjb2RpbmcsIGFsd2F5cyBt
YXJrIGl0IGFzIGhhdmluZyBhbHBoYSwKLSAgICAvLyBzbyB3ZSBkb24ndCBnZXQgYSBibGFjayBi
YWNrZ3JvdW5kIGZvciB0aGUgdW5kZWNvZGVkIHNlY3Rpb25zLgotICAgIC8vIFRPRE86IEEgYmV0
dGVyIHNvbHV0aW9uIGlzIHByb2JhYmx5IHRvIGhhdmUgdGhlIHVuZGVybHlpbmcgYnVmZmVyJ3MK
LSAgICAvLyBoYXNBbHBoYSgpIHJldHVybiB0cnVlIGluIHRoZXNlIGNhc2VzLCBzaW5jZSBpdCBp
cywgaW4gZmFjdCwgdGVjaG5pY2FsbHkKLSAgICAvLyB0cnVlLgotICAgIGlmICghZnJhbWVJc0Nv
bXBsZXRlQXRJbmRleChpbmRleCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJu
IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KS0+aGFzQWxwaGEoKTsKKyAgICAv
LyBXaGVuIGEgZnJhbWUgaGFzIG5vdCBmaW5pc2hlZCBkZWNvZGluZywgYWx3YXlzIG1hcmsgaXQg
YXMgaGF2aW5nIGFscGhhLgorICAgIC8vIFBvcnRzIHRoYXQgY2hlY2sgdGhlIHJlc3VsdCBvZiB0
aGlzIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGVpcgorICAgIC8vIGNvbXBvc2l0aW5nIG9wIG5l
ZWQgdGhpcyBpbiBvcmRlciB0byBub3QgZHJhdyB0aGUgdW5kZWNvZGVkIHBvcnRpb24gYXMKKyAg
ICAvLyBibGFjay4KKyAgICAvLyBUT0RPOiBQZXJoYXBzIHdlIHNob3VsZCBlbnN1cmUgdGhhdCBl
YWNoIGluZGl2aWR1YWwgZGVjb2RlciByZXR1cm5zIHRydWUKKyAgICAvLyBpbiB0aGlzIGNhc2Uu
CisgIHJldHVybiBmcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4KSA/CisgICAgICBtX2RlY29k
ZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCktPmhhc0FscGhhKCkgOiB0cnVlOwogfQogCiB9
Ci0KLSNlbmRpZiAvLyBQTEFURk9STShDQUlSTykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9JbWFnZVNvdXJjZVNraWEuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU291cmNlU2tpYS5jcHAJKHJldmlzaW9uIDQ3MDcy
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU291cmNlU2tpYS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMjM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLQot
I2luY2x1ZGUgIkdJRkltYWdlRGVjb2Rlci5oIgotI2luY2x1ZGUgIklDT0ltYWdlRGVjb2Rlci5o
IgotI2luY2x1ZGUgIkpQRUdJbWFnZURlY29kZXIuaCIKLSNpbmNsdWRlICJQTkdJbWFnZURlY29k
ZXIuaCIKLSNpbmNsdWRlICJCTVBJbWFnZURlY29kZXIuaCIKLSNpbmNsdWRlICJYQk1JbWFnZURl
Y29kZXIuaCIKLQotI2luY2x1ZGUgIlNrQml0bWFwLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotSW1hZ2VEZWNvZGVyKiBjcmVhdGVEZWNvZGVyKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkK
LXsKLSAgICAvLyBXZSBuZWVkIGF0IGxlYXN0IDQgYnl0ZXMgdG8gZmlndXJlIG91dCB3aGF0IGtp
bmQgb2YgaW1hZ2Ugd2UncmUgZGVhbGluZyB3aXRoLgotICAgIGludCBsZW5ndGggPSBkYXRhLnNp
emUoKTsKLSAgICBpZiAobGVuZ3RoIDwgNCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjb25z
dCB1bnNpZ25lZCBjaGFyKiB1Q29udGVudHMgPSAoY29uc3QgdW5zaWduZWQgY2hhciopZGF0YS5k
YXRhKCk7Ci0gICAgY29uc3QgY2hhciogY29udGVudHMgPSBkYXRhLmRhdGEoKTsKLQotICAgIC8v
IEdJRnMgYmVnaW4gd2l0aCBHSUY4KDcgb3IgOSkuCi0gICAgaWYgKHN0cm5jbXAoY29udGVudHMs
ICJHSUY4IiwgNCkgPT0gMCkKLSAgICAgICAgcmV0dXJuIG5ldyBHSUZJbWFnZURlY29kZXIoKTsK
LQotICAgIC8vIFRlc3QgZm9yIFBORy4KLSAgICBpZiAodUNvbnRlbnRzWzBdPT0weDg5ICYmCi0g
ICAgICAgIHVDb250ZW50c1sxXT09MHg1MCAmJgotICAgICAgICB1Q29udGVudHNbMl09PTB4NEUg
JiYKLSAgICAgICAgdUNvbnRlbnRzWzNdPT0weDQ3KQotICAgICAgICByZXR1cm4gbmV3IFBOR0lt
YWdlRGVjb2RlcigpOwotCi0gICAgLy8gSlBFRwotICAgIGlmICh1Q29udGVudHNbMF09PTB4RkYg
JiYKLSAgICAgICAgdUNvbnRlbnRzWzFdPT0weEQ4ICYmCi0gICAgICAgIHVDb250ZW50c1syXT09
MHhGRikKLSAgICAgICAgcmV0dXJuIG5ldyBKUEVHSW1hZ2VEZWNvZGVyKCk7Ci0KLSAgICAvLyBC
TVAKLSAgICBpZiAoc3RybmNtcChjb250ZW50cywgIkJNIiwgMikgPT0gMCkKLSAgICAgICAgcmV0
dXJuIG5ldyBCTVBJbWFnZURlY29kZXIoKTsKLQotICAgIC8vIElDT3MgYWx3YXlzIGJlZ2luIHdp
dGggYSAyLWJ5dGUgMCBmb2xsb3dlZCBieSBhIDItYnl0ZSAxLgotICAgIC8vIENVUnMgYmVnaW4g
d2l0aCAyLWJ5dGUgMCBmb2xsb3dlZCBieSAyLWJ5dGUgMi4KLSAgICBpZiAoIW1lbWNtcChjb250
ZW50cywgIlwwMDBcMDAwXDAwMVwwMDAiLCA0KSB8fAotICAgICAgICAhbWVtY21wKGNvbnRlbnRz
LCAiXDAwMFwwMDBcMDAyXDAwMCIsIDQpKQotICAgICAgICByZXR1cm4gbmV3IElDT0ltYWdlRGVj
b2RlcigpOwotICAgCi0gICAgLy8gWEJNcyByZXF1aXJlIDggYnl0ZXMgb2YgaW5mby4KLSAgICBp
ZiAobGVuZ3RoID49IDggJiYgc3RybmNtcChjb250ZW50cywgIiNkZWZpbmUgIiwgOCkgPT0gMCkK
LSAgICAgICAgcmV0dXJuIG5ldyBYQk1JbWFnZURlY29kZXIoKTsKLQotICAgIC8vIEdpdmUgdXAu
IFdlIGRvbid0IGtub3cgd2hhdCB0aGUgaGVjayB0aGlzIGlzLgotICAgIHJldHVybiAwOwotfQot
Ci1JbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoKQotICAgIDogbV9kZWNvZGVyKDApCi17fQotCi1J
bWFnZVNvdXJjZTo6fkltYWdlU291cmNlKCkKLXsKLSAgICBjbGVhcih0cnVlKTsKLX0KLQotdm9p
ZCBJbWFnZVNvdXJjZTo6Y2xlYXIoYm9vbCBkZXN0cm95QWxsLCBzaXplX3QgY2xlYXJCZWZvcmVG
cmFtZSwgU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSAgICBp
ZiAoIWRlc3Ryb3lBbGwpIHsKLSAgICAgICAgaWYgKG1fZGVjb2RlcikKLSAgICAgICAgICAgIG1f
ZGVjb2Rlci0+Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKGNsZWFyQmVmb3JlRnJhbWUpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgZGVsZXRlIG1fZGVjb2RlcjsKLSAgICBtX2RlY29kZXIg
PSAwOwotICAgIGlmIChkYXRhKQotICAgICAgICBzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZl
ZCk7Ci19Ci0KLWJvb2wgSW1hZ2VTb3VyY2U6OmluaXRpYWxpemVkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9kZWNvZGVyOwotfQotCi12b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1
ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAgLy8gTWFrZSB0aGUgZGVj
b2RlciBieSBzbmlmZmluZyB0aGUgYnl0ZXMuCi0gICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBleGFt
aW5lIHRoZSBkYXRhIGFuZCBpbnN0YW50aWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgYXBwcm9wcmlh
dGUgZGVjb2RlciBwbHVnaW4uCi0gICAgLy8gSWYgaW5zdWZmaWNpZW50IGJ5dGVzIGFyZSBhdmFp
bGFibGUgdG8gZGV0ZXJtaW5lIHRoZSBpbWFnZSB0eXBlLCBubyBkZWNvZGVyIHBsdWdpbiB3aWxs
IGJlCi0gICAgLy8gbWFkZS4KLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgbV9kZWNvZGVy
ID0gY3JlYXRlRGVjb2RlcihkYXRhLT5idWZmZXIoKSk7Ci0KLSAgICAvLyBDcmVhdGVEZWNvZGVy
IHdpbGwgcmV0dXJuIE5VTEwgaWYgdGhlIGRlY29kZXIgY291bGQgbm90IGJlIGNyZWF0ZWQuIFBs
dXMsCi0gICAgLy8gd2Ugc2hvdWxkIG5vdCBzZW5kIG1vcmUgZGF0YSB0byBhIGRlY29kZXIgd2hp
Y2ggaGFzIGFscmVhZHkgZGVjaWRlZCBpdAotICAgIC8vIGhhcyBmYWlsZWQuCi0gICAgaWYgKCFt
X2RlY29kZXIgfHwgbV9kZWNvZGVyLT5mYWlsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
ZGVjb2Rlci0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwotfQotCi1ib29sIEltYWdl
U291cmNlOjppc1NpemVBdmFpbGFibGUoKQotewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbV9kZWNvZGVyLT5pc1NpemVBdmFpbGFibGUo
KTsKLX0KLQotSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2RlY29kZXIpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kZWNv
ZGVyLT5zaXplKCk7Ci19Ci0KLUludFNpemUgSW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgo
c2l6ZV90IGluZGV4KSBjb25zdAotewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1
cm4gSW50U2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGVjb2Rlci0+ZnJhbWVTaXplQXRJbmRleChp
bmRleCk7Ci19Ci0KLWludCBJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KCkKLXsKLSAgICBp
ZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIGNBbmltYXRpb25Ob25lOwotCi0gICAgcmV0
dXJuIG1fZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCk7Ci19Ci0KLXNpemVfdCBJbWFnZVNvdXJj
ZTo6ZnJhbWVDb3VudCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBtX2RlY29kZXItPmZhaWxlZCgpID8gMCA6IG1fZGVjb2Rlci0+
ZnJhbWVDb3VudCgpOwotfQotCi1OYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJh
bWVBdEluZGV4KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICAvLyBOb3RlIHRoYXQgdGhlIGJ1ZmZlciBjYW4gaGF2ZSBOVUxMIGJ5
dGVzIGV2ZW4gd2hlbiBpdCBpcyBtYXJrZWQgYXMKLSAgICAvLyBub24tZW1wdHkuIEl0IHNlZW1z
ICJGcmFtZUVtcHR5IiBpcyBvbmx5IHNldCBiZWZvcmUgdGhlIGZyYW1lIGhhcyBiZWVuCi0gICAg
Ly8gaW5pdGlhbGl6ZWQuIElmIGl0IGlzIGRlY29kZWQgYW5kIGl0IGhhcHBlbnMgdG8gYmUgZW1w
dHksIGl0IHdpbGwgYmUKLSAgICAvLyBtYXJrZWQgYXMgIkZyYW1lQ29tcGxldGUiIGJ1dCB3aWxs
IHN0aWxsIGhhdmUgTlVMTCBieXRlcy4KLSAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVj
b2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKLSAgICBpZiAoIWJ1ZmZlciB8fCBidWZm
ZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICAvLyBDb3B5IHRoZSBiaXRtYXAuICBUaGUgcGl4ZWwgZGF0YSBpcyByZWZjb3Vu
dGVkIGludGVybmFsbHkgYnkgU2tCaXRtYXAsIHNvCi0gICAgLy8gdGhpcyBkb2Vzbid0IGNvc3Qg
bXVjaC4gIAotICAgIHJldHVybiBidWZmZXItPmFzTmV3TmF0aXZlSW1hZ2UoKTsKLX0KLQotYm9v
bCBJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCi17Ci0g
ICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJHQkEzMkJ1
ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwotICAg
IHJldHVybiBidWZmZXIgJiYgYnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1l
Q29tcGxldGU7Ci19Ci0KLWZsb2F0IEltYWdlU291cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChz
aXplX3QgaW5kZXgpCi17Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRl
eChpbmRleCk7Ci0gICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJC
dWZmZXI6OkZyYW1lRW1wdHkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gTWFueSBhbm5v
eWluZyBhZHMgc3BlY2lmeSBhIDAgZHVyYXRpb24gdG8gbWFrZSBhbiBpbWFnZSBmbGFzaCBhcyBx
dWlja2x5Ci0gICAgLy8gYXMgcG9zc2libGUuICBXZSBmb2xsb3cgV2luSUUncyBiZWhhdmlvciBh
bmQgdXNlIGEgZHVyYXRpb24gb2YgMTAwIG1zCi0gICAgLy8gZm9yIGFueSBmcmFtZXMgdGhhdCBz
cGVjaWZ5IGEgZHVyYXRpb24gb2YgPD0gNTAgbXMuICBTZWUKLSAgICAvLyA8aHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MTM+IG9yIFJhZGFyIDQwNTEzODkgZm9yCi0g
ICAgLy8gbW9yZS4KLSAgICBjb25zdCBmbG9hdCBkdXJhdGlvbiA9IGJ1ZmZlci0+ZHVyYXRpb24o
KSAvIDEwMDAuMGY7Ci0gICAgcmV0dXJuIChkdXJhdGlvbiA8IDAuMDUxZikgPyAwLjEwMGYgOiBk
dXJhdGlvbjsKLX0KLQotYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6
ZV90IGluZGV4KQotewotICAgIGlmICghbV9kZWNvZGVyIHx8ICFtX2RlY29kZXItPnN1cHBvcnRz
QWxwaGEoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUkdCQTMyQnVmZmVyKiBidWZm
ZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7Ci0gICAgaWYgKCFidWZm
ZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBidWZmZXItPmhhc0FscGhhKCk7Ci19Ci0K
LVN0cmluZyBJbWFnZVNvdXJjZTo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAotewotICAgIHJl
dHVybiBtX2RlY29kZXIgPyBtX2RlY29kZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCkgOiBTdHJpbmco
KTsKLX0KLQotfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34632</attachid>
            <date>2009-08-11 18:55:33 -0700</date>
            <delta_ts>2009-08-12 10:34:52 -0700</delta_ts>
            <desc>Merge in ImageSourceWx.cpp </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>17158</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQ3MDgxKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNiBAQAorMjAwOS0wOC0xMSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3OTY1CisgICAgICAg
IE1lcmdlIHd4L0ltYWdlU291cmNlV3guY3BwIGludG8gSW1hZ2VTb3VyY2UuY3BwLiAgTm8gY2hh
bmdlcyB0bworICAgICAgICBJbWFnZVNvdXJjZS5jcHAgd2VyZSBuZWVkZWQsIHNvIHRoaXMganVz
dCBkZWxldGVzIEltYWdlU291cmNlV3guY3BwLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgor
ICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93eC9JbWFnZVNvdXJjZVd4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJjb3JlLXd4LmJr
bDoKKwogMjAwOS0wOC0xMSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBUcmVhdC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5n
eXBpDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDQ3MDgx
KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE5OTMsNyArMTk5
Myw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0
V3guY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlckRh
dGEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5j
cHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlU291cmNlV3guY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW50UG9pbnRXeC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ludFJlY3RXeC5jcHAnLApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlU291cmNlcy5ia2wNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL1dlYkNvcmVTb3VyY2Vz
LmJrbAkocmV2aXNpb24gNDcwODApCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkod29y
a2luZyBjb3B5KQpAQCAtNzY5LDEwMyArNzY5LDEwNCBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhl
IGxpc3Qgb2YgZmlsZXMgbmVlCiAgICAgPC9zZXQ+CiAKICAgICA8c2V0IGFwcGVuZD0iMSIgdmFy
PSJXRUJDT1JFX1NPVVJDRVNfUExBVEZPUk0iPgotICAgICAgICBwbGF0Zm9ybS9BcmVuYS5jcHAK
LSAgICAgICAgcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbi5jcHAKLSAgICAgICAgcGxhdGZv
cm0vYW5pbWF0aW9uL0FuaW1hdGlvbkxpc3QuY3BwCi0gICAgICAgIHBsYXRmb3JtL3RleHQvQXRv
bWljU3RyaW5nLmNwcAotICAgICAgICBwbGF0Zm9ybS90ZXh0L0Jhc2U2NC5jcHAKLSAgICAgICAg
cGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKLSAgICAgICAgcGxhdGZvcm0vdGV4dC9DU3Ry
aW5nLmNwcAotICAgICAgICBwbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAKLSAgICAgICAgcGxhdGZv
cm0vQ29udGV4dE1lbnUuY3BwCi0gICAgICAgIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNw
cAotICAgICAgICBwbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdEltcGwuY3BwCi0gICAgICAgIHBs
YXRmb3JtL0RyYWdJbWFnZS5jcHAKLSAgICAgICAgcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwCi0g
ICAgICAgIHBsYXRmb3JtL0dlb2xvY2F0aW9uU2VydmljZS5jcHAKLSAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250
LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnREYXRhLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
b250RGVzY3JpcHRpb24uY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFj
a0xpc3QuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuY3BwCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAKLSAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0dseXBoV2lkdGhNYXAuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZv
bnREYXRhLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKLSAgICAgICAgcGxh
dGZvcm0vS1VSTC5jcHAKLSAgICAgICAgcGxhdGZvcm0vTGVuZ3RoLmNwcAotICAgICAgICBwbGF0
Zm9ybS9MaW5rSGFzaC5jcHAKLSAgICAgICAgcGxhdGZvcm0vTG9nZ2luZy5jcHAKLSAgICAgICAg
cGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKLSAgICAgICAgcGxhdGZvcm0vdGV4dC9SZWd1
bGFyRXhwcmVzc2lvbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAotICAgICAg
ICBwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAKLSAgICAgICAgcGxhdGZvcm0v
U2Nyb2xsVmlldy5jcHAKLSAgICAgICAgcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3Bw
Ci0gICAgICAgIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKLSAgICAgICAgcGxhdGZvcm0vdGV4
dC9TdHJpbmcuY3BwCi0gICAgICAgIHBsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKLSAg
ICAgICAgcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAotICAgICAgICBwbGF0Zm9ybS90ZXh0
L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAotICAgICAgICBwbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Yy5jcHAKLSAgICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCi0gICAgICAgIHBs
YXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcAotICAgICAgICBwbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY1VURjE2LmNwcAotICAgICAgICBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZp
bmVkLmNwcAotICAgICAgICBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAKLSAgICAgICAg
cGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAKLSAgICAgICAgcGxhdGZv
cm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKLSAgICAgICAgcGxhdGZvcm0vdGV4dC9U
ZXh0U3RyZWFtLmNwcAotICAgICAgICBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcAotICAg
ICAgICBwbGF0Zm9ybS9UaHJlYWRUaW1lcnMuY3BwCi0gICAgICAgIHBsYXRmb3JtL1RpbWVyLmNw
cAotICAgICAgICBwbGF0Zm9ybS9XaWRnZXQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAKLSAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRRdWFkLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCi0g
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9JbnRSZWN0LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcAotICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuY3BwCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Bl
bi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlv
bk1hdHJpeC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhU
cmFuc2Zvcm1PcGVyYXRpb24uY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3RyYW5zZm9ybXMvUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNw
cAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFu
c2Zvcm1PcGVyYXRpb24uY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
VHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCi0gICAgICAgIHBsYXRmb3JtL25l
dHdvcmsvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmNwcAotICAgICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL0NyZWRlbnRpYWwuY3BwCi0gICAgICAgIHBsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRl
ck1hcC5jcHAKLSAgICAgICAgcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHAKLSAgICAg
ICAgcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKLSAgICAgICAgcGxhdGZvcm0vbmV0d29y
ay9Gb3JtRGF0YUJ1aWxkZXIuY3BwCi0gICAgICAgIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0
YXRlTm90aWZpZXIuY3BwCi0gICAgICAgIHBsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNwYWNl
LmNwcAotICAgICAgICBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlRXJyb3JCYXNlLmNwcAotICAg
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAotICAgICAgICBwbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCi0gICAgICAgIHBsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCi0gICAgICAgIHBsYXRmb3JtL3NxbC9TUUxpdGVB
dXRob3JpemVyLmNwcAotICAgICAgICBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCi0g
ICAgICAgIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCi0gICAgICAgIHBsYXRmb3Jt
L3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vc3FsL1NRTFZhbHVl
LmNwcAorICAgICAgcGxhdGZvcm0vQXJlbmEuY3BwCisgICAgICBwbGF0Zm9ybS9hbmltYXRpb24v
QW5pbWF0aW9uLmNwcAorICAgICAgcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbkxpc3QuY3Bw
CisgICAgICBwbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5jcHAKKyAgICAgIHBsYXRmb3JtL3Rl
eHQvQmFzZTY0LmNwcAorICAgICAgcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKKyAgICAg
IHBsYXRmb3JtL3RleHQvQ1N0cmluZy5jcHAKKyAgICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmNw
cAorICAgICAgcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCisgICAgICBwbGF0Zm9ybS9Dcm9zc1Ro
cmVhZENvcGllci5jcHAKKyAgICAgIHBsYXRmb3JtL0RlcHJlY2F0ZWRQdHJMaXN0SW1wbC5jcHAK
KyAgICAgIHBsYXRmb3JtL0RyYWdJbWFnZS5jcHAKKyAgICAgIHBsYXRmb3JtL0ZpbGVDaG9vc2Vy
LmNwcAorICAgICAgcGxhdGZvcm0vR2VvbG9jYXRpb25TZXJ2aWNlLmNwcAorICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcAorICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5jcHAKKyAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKKyAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnREYXRhLmNwcAorICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERl
c2NyaXB0aW9uLmNwcAorICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlzdC5j
cHAKKyAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuY3BwCisgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCisgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HbHlw
aFBhZ2VUcmVlTm9kZS5jcHAKKyAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAu
Y3BwCisgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAKKyAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAorICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKKyAgICAgIHBsYXRmb3JtL0tVUkwuY3BwCisgICAgICBw
bGF0Zm9ybS9MZW5ndGguY3BwCisgICAgICBwbGF0Zm9ybS9MaW5rSGFzaC5jcHAKKyAgICAgIHBs
YXRmb3JtL0xvZ2dpbmcuY3BwCisgICAgICBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAor
ICAgICAgcGxhdGZvcm0vdGV4dC9SZWd1bGFyRXhwcmVzc2lvbi5jcHAKKyAgICAgIHBsYXRmb3Jt
L1Njcm9sbGJhci5jcHAKKyAgICAgIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNw
cAorICAgICAgcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKKyAgICAgIHBsYXRmb3JtL3RleHQvU2Vn
bWVudGVkU3RyaW5nLmNwcAorICAgICAgcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAorICAgICAg
cGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCisgICAgICBwbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxk
ZXIuY3BwCisgICAgICBwbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCisgICAgICBwbGF0Zm9y
bS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAorICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWMuY3BwCisgICAgICBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAKKyAgICAgIHBs
YXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcAorICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNVVEYxNi5jcHAKKyAgICAgIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQu
Y3BwCisgICAgICBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAKKyAgICAgIHBsYXRmb3Jt
L3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwCisgICAgICBwbGF0Zm9ybS90ZXh0L1Rl
eHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAorICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmNw
cAorICAgICAgcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAKKyAgICAgIHBsYXRmb3JtL1Ro
cmVhZFRpbWVycy5jcHAKKyAgICAgIHBsYXRmb3JtL1RpbWVyLmNwcAorICAgICAgcGxhdGZvcm0v
V2lkZ2V0LmNwcAorICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKKyAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UG9pbnQuY3BwCisgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwCisgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCisgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFNpemUuY3BwCisgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5j
cHAKKyAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAorICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NUeXBlcy5jcHAKKyAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAorICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCisgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9JbnRSZWN0LmNwcAorICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKKyAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAKKyAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1BhdHRlcm4uY3BwCisgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QZW4uY3BwCisgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAor
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRp
b24uY3BwCisgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNm
b3JtT3BlcmF0aW9uLmNwcAorICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJz
cGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKKyAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAorICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKKyAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5jcHAKKyAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAKKyAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uLmNwcAorICAgICAgcGxhdGZvcm0vbmV0d29yay9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJh
c2UuY3BwCisgICAgICBwbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWwuY3BwCisgICAgICBwbGF0
Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwCisgICAgICBwbGF0Zm9ybS9uZXR3b3JrL0hU
VFBQYXJzZXJzLmNwcAorICAgICAgcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKKyAgICAg
IHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcAorICAgICAgcGxhdGZvcm0vbmV0
d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5jcHAKKyAgICAgIHBsYXRmb3JtL25ldHdvcmsvUHJv
dGVjdGlvblNwYWNlLmNwcAorICAgICAgcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUVycm9yQmFz
ZS5jcHAKKyAgICAgIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCisgICAgICBw
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCisgICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAorICAgICAgcGxhdGZvcm0vc3FsL1NRTGl0
ZUF1dGhvcml6ZXIuY3BwCisgICAgICBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCisg
ICAgICBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAorICAgICAgcGxhdGZvcm0vc3Fs
L1NRTGl0ZVRyYW5zYWN0aW9uLmNwcAorICAgICAgcGxhdGZvcm0vc3FsL1NRTFZhbHVlLmNwcAog
ICAgIDwvc2V0PgogCiAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX1BM
VUdJTlMiPgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVNvdXJjZVd4
LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VT
b3VyY2VXeC5jcHAJKHJldmlzaW9uIDQ3MDgwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93eC9JbWFnZVNvdXJjZVd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMjYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBDb21wdXRlciwgS2V2aW4gT2xs
aXZpZXIuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKLQotI2luY2x1ZGUgIkJNUEltYWdlRGVjb2Rlci5o
IgotI2luY2x1ZGUgIkdJRkltYWdlRGVjb2Rlci5oIgotI2luY2x1ZGUgIklDT0ltYWdlRGVjb2Rl
ci5oIgotI2luY2x1ZGUgIkpQRUdJbWFnZURlY29kZXIuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgotI2luY2x1ZGUgIlBOR0ltYWdlRGVjb2Rlci5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgotI2luY2x1ZGUgIlhCTUltYWdlRGVjb2Rlci5oIgotCi0jaW5jbHVkZSA8d3gvZGVm
cy5oPgotI2luY2x1ZGUgPHd4L2JpdG1hcC5oPgotI2lmIFVTRShXWEdDKQotI2luY2x1ZGUgPHd4
L2dyYXBoaWNzLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx3eC9pbWFnZS5oPgotI2luY2x1ZGUgPHd4
L3Jhd2JtcC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUltYWdlRGVjb2RlciogY3JlYXRl
RGVjb2Rlcihjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEpCi17Ci0gICAgLy8gV2UgbmVlZCBhdCBs
ZWFzdCA0IGJ5dGVzIHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGltYWdlIHdlJ3JlIGRlYWxp
bmcgd2l0aC4KLSAgICBpbnQgbGVuZ3RoID0gZGF0YS5zaXplKCk7Ci0gICAgaWYgKGxlbmd0aCA8
IDQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgY29uc3QgdW5zaWduZWQgY2hhciogdUNvbnRl
bnRzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWRhdGEuZGF0YSgpOwotICAgIGNvbnN0IGNoYXIq
IGNvbnRlbnRzID0gZGF0YS5kYXRhKCk7Ci0KLSAgICAvLyBHSUZzIGJlZ2luIHdpdGggR0lGOCg3
IG9yIDkpLgotICAgIGlmIChzdHJuY21wKGNvbnRlbnRzLCAiR0lGOCIsIDQpID09IDApCi0gICAg
ICAgIHJldHVybiBuZXcgR0lGSW1hZ2VEZWNvZGVyKCk7Ci0KLSAgICAvLyBUZXN0IGZvciBQTkcu
Ci0gICAgaWYgKHVDb250ZW50c1swXT09MHg4OSAmJgotICAgICAgICB1Q29udGVudHNbMV09PTB4
NTAgJiYKLSAgICAgICAgdUNvbnRlbnRzWzJdPT0weDRFICYmCi0gICAgICAgIHVDb250ZW50c1sz
XT09MHg0NykKLSAgICAgICAgcmV0dXJuIG5ldyBQTkdJbWFnZURlY29kZXIoKTsKLQotICAgIC8v
IEpQRUcKLSAgICBpZiAodUNvbnRlbnRzWzBdPT0weEZGICYmCi0gICAgICAgIHVDb250ZW50c1sx
XT09MHhEOCAmJgotICAgICAgICB1Q29udGVudHNbMl09PTB4RkYpCi0gICAgICAgIHJldHVybiBu
ZXcgSlBFR0ltYWdlRGVjb2RlcigpOwotCi0gICAgLy8gQk1QCi0gICAgaWYgKHN0cm5jbXAoY29u
dGVudHMsICJCTSIsIDIpID09IDApCi0gICAgICAgIHJldHVybiBuZXcgQk1QSW1hZ2VEZWNvZGVy
KCk7Ci0KLSAgICAvLyBJQ09zIGFsd2F5cyBiZWdpbiB3aXRoIGEgMi1ieXRlIDAgZm9sbG93ZWQg
YnkgYSAyLWJ5dGUgMS4KLSAgICAvLyBDVVJzIGJlZ2luIHdpdGggMi1ieXRlIDAgZm9sbG93ZWQg
YnkgMi1ieXRlIDIuCi0gICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJcMDAwXDAwMFwwMDFcMDAw
IiwgNCkgfHwKLSAgICAgICAgIW1lbWNtcChjb250ZW50cywgIlwwMDBcMDAwXDAwMlwwMDAiLCA0
KSkKLSAgICAgICAgcmV0dXJuIG5ldyBJQ09JbWFnZURlY29kZXIoKTsKLSAgIAotICAgIC8vIFhC
TXMgcmVxdWlyZSA4IGJ5dGVzIG9mIGluZm8uCi0gICAgaWYgKGxlbmd0aCA+PSA4ICYmIHN0cm5j
bXAoY29udGVudHMsICIjZGVmaW5lICIsIDgpID09IDApCi0gICAgICAgIHJldHVybiBuZXcgWEJN
SW1hZ2VEZWNvZGVyKCk7Ci0KLSAgICAvLyBHaXZlIHVwLiBXZSBkb24ndCBrbm93IHdoYXQgdGhl
IGhlY2sgdGhpcyBpcy4KLSAgICByZXR1cm4gMDsKLX0KLQotSW1hZ2VTb3VyY2U6OkltYWdlU291
cmNlKCkKLSAgOiBtX2RlY29kZXIoMCkKLXt9Ci0KLUltYWdlU291cmNlOjp+SW1hZ2VTb3VyY2Uo
KQotewotICAgIGNsZWFyKHRydWUpOwotfQotCi1ib29sIEltYWdlU291cmNlOjppbml0aWFsaXpl
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVjb2RlcjsKLX0KLQotdm9pZCBJbWFnZVNvdXJj
ZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQotewot
ICAgIC8vIE1ha2UgdGhlIGRlY29kZXIgYnkgc25pZmZpbmcgdGhlIGJ5dGVzLgotICAgIC8vIFRo
aXMgbWV0aG9kIHdpbGwgZXhhbWluZSB0aGUgZGF0YSBhbmQgaW5zdGFudGlhdGUgYW4gaW5zdGFu
Y2Ugb2YgdGhlIGFwcHJvcHJpYXRlIGRlY29kZXIgcGx1Z2luLgotICAgIC8vIElmIGluc3VmZmlj
aWVudCBieXRlcyBhcmUgYXZhaWxhYmxlIHRvIGRldGVybWluZSB0aGUgaW1hZ2UgdHlwZSwgbm8g
ZGVjb2RlciBwbHVnaW4gd2lsbCBiZQotICAgIC8vIG1hZGUuCi0gICAgaWYgKG1fZGVjb2RlcikK
LSAgICAgICAgZGVsZXRlIG1fZGVjb2RlcjsKLSAgICBtX2RlY29kZXIgPSBjcmVhdGVEZWNvZGVy
KCpkYXRhKTsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fZGVj
b2Rlci0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwotfQotCi1ib29sIEltYWdlU291
cmNlOjppc1NpemVBdmFpbGFibGUoKQotewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbV9kZWNvZGVyLT5pc1NpemVBdmFpbGFibGUoKTsK
LX0KLQotSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rl
Y29kZXIpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kZWNvZGVy
LT5zaXplKCk7Ci19Ci0KLUludFNpemUgSW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6
ZV90IGluZGV4KSBjb25zdAotewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1cm4g
SW50U2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGVjb2Rlci0+ZnJhbWVTaXplQXRJbmRleChpbmRl
eCk7Ci19Ci0KLWludCBJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KCkKLXsKLSAgICBpZiAo
IW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIGNBbmltYXRpb25Ob25lOwotCi0gICAgcmV0dXJu
IG1fZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCk7Ci19Ci0KLVN0cmluZyBJbWFnZVNvdXJjZTo6
ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIFN0cmluZygpOwotfQotCi1zaXplX3QgSW1hZ2VTb3VyY2U6OmZyYW1lQ291bnQoKSBj
b25zdAotewotICAgIHJldHVybiBtX2RlY29kZXIgPyBtX2RlY29kZXItPmZyYW1lQ291bnQoKSA6
IDA7Ci19Ci0KLWJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90
IGluZGV4KQotewotICAgIC8vIEZJWE1FOiBzaG91bGQgd2UgYmUgdGVzdGluZyB0aGUgUkdCQTMy
QnVmZmVyJ3Mgc3RhdHVzIGFzIHdlbGw/Ci0gICAgcmV0dXJuIChtX2RlY29kZXIgJiYgbV9kZWNv
ZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpICE9IDApOwotfQotCi12b2lkIEltYWdlU291
cmNlOjpjbGVhcihib29sIGRlc3Ryb3lBbGwsIHNpemVfdCBjbGVhckJlZm9yZUZyYW1lLCBTaGFy
ZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQotewotICAgIGlmICghZGVzdHJv
eUFsbCkgewotICAgICAgICBpZiAobV9kZWNvZGVyKQotICAgICAgICAgICAgbV9kZWNvZGVyLT5j
bGVhckZyYW1lQnVmZmVyQ2FjaGUoY2xlYXJCZWZvcmVGcmFtZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBkZWxldGUgbV9kZWNvZGVyOwotICAgIG1fZGVjb2RlciA9IDA7Ci0gICAg
aWYgKGRhdGEpCi0gICAgICAgIHNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKLX0KLQot
TmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QgaW5k
ZXgpCi17Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUkdC
QTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7
Ci0gICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZy
YW1lRW1wdHkpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBidWZmZXItPmFz
TmV3TmF0aXZlSW1hZ2UoKTsKLX0KLQotZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25B
dEluZGV4KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZm
ZXJBdEluZGV4KGluZGV4KTsKLSAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09
IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmbG9h
dCBkdXJhdGlvbiA9IGJ1ZmZlci0+ZHVyYXRpb24oKSAvIDEwMDAuMGY7Ci0KLSAgICAvLyBGb2xs
b3cgb3RoZXIgcG9ydHMgKGFuZCBXaW5JRSdzKSBiZWhhdmlvciB0byBzbG93IGFubm95aW5nIGFk
cyB0aGF0Ci0gICAgLy8gc3BlY2lmeSBhIDAgZHVyYXRpb24uCi0gICAgaWYgKGR1cmF0aW9uIDwg
MC4wNTFmKQotICAgICAgICByZXR1cm4gMC4xMDBmOwotICAgIHJldHVybiBkdXJhdGlvbjsKLX0K
LQotYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KQot
ewotICAgIGlmICghbV9kZWNvZGVyIHx8ICFtX2RlY29kZXItPnN1cHBvcnRzQWxwaGEoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29k
ZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7Ci0gICAgaWYgKCFidWZmZXIgfHwgYnVmZmVy
LT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiBidWZmZXItPmhhc0FscGhhKCk7Ci19Ci0KLX0KSW5kZXg6IFdl
YkNvcmUvd2ViY29yZS13eC5ia2wNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3dlYmNvcmUtd3gu
YmtsCShyZXZpc2lvbiA0NzA4MCkKKysrIFdlYkNvcmUvd2ViY29yZS13eC5ia2wJKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDcgKzU4LDYgQEAgd3hXZWJDb3JlIHBvcnQgQmFrZWZpbGUgcHJvamVjdCBm
aWxlLgogICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYWRpZW50V3guY3BwCiAgICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCiAgICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAKLSAgICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy93eC9JbWFnZVNvdXJjZVd4LmNwcAogICAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3d4L0ltYWdlV3guY3BwCiAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW50
UG9pbnRXeC5jcHAKICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93eC9JbnRSZWN0V3guY3Bw
Cg==
</data>
<flag name="review"
          id="18782"
          type_id="1"
          status="-"
          setter="manyoso"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34672</attachid>
            <date>2009-08-12 10:34:52 -0700</date>
            <delta_ts>2009-08-12 11:29:54 -0700</delta_ts>
            <desc>Merge in ImageSourceWx.cpp </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>9083</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQ3MDgxKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNiBAQAorMjAwOS0wOC0xMSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3OTY1CisgICAgICAg
IE1lcmdlIHd4L0ltYWdlU291cmNlV3guY3BwIGludG8gSW1hZ2VTb3VyY2UuY3BwLiAgTm8gY2hh
bmdlcyB0bworICAgICAgICBJbWFnZVNvdXJjZS5jcHAgd2VyZSBuZWVkZWQsIHNvIHRoaXMganVz
dCBkZWxldGVzIEltYWdlU291cmNlV3guY3BwLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgor
ICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93eC9JbWFnZVNvdXJjZVd4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJjb3JlLXd4LmJr
bDoKKwogMjAwOS0wOC0xMSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBUcmVhdC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5n
eXBpDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDQ3MDgx
KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE5OTMsNyArMTk5
Myw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0
V3guY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlckRh
dGEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5j
cHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlU291cmNlV3guY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW50UG9pbnRXeC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ludFJlY3RXeC5jcHAnLApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlU291cmNlcy5ia2wNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL1dlYkNvcmVTb3VyY2Vz
LmJrbAkocmV2aXNpb24gNDcwODApCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkod29y
a2luZyBjb3B5KQpAQCAtODM1LDYgKzgzNSw3IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlz
dCBvZiBmaWxlcyBuZWUKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvSW1hZ2VTb3VyY2VXeC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3d4L0ltYWdlU291cmNlV3guY3BwCShyZXZpc2lvbiA0NzA4MCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VTb3VyY2VXeC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMjI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
Q29tcHV0ZXIsIEtldmluIE9sbGl2aWVyLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCi0KLSNpbmNsdWRl
ICJCTVBJbWFnZURlY29kZXIuaCIKLSNpbmNsdWRlICJHSUZJbWFnZURlY29kZXIuaCIKLSNpbmNs
dWRlICJJQ09JbWFnZURlY29kZXIuaCIKLSNpbmNsdWRlICJKUEVHSW1hZ2VEZWNvZGVyLmgiCi0j
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQTkdJbWFnZURlY29kZXIuaCIK
LSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJYQk1JbWFnZURlY29kZXIuaCIK
LQotI2luY2x1ZGUgPHd4L2RlZnMuaD4KLSNpbmNsdWRlIDx3eC9iaXRtYXAuaD4KLSNpZiBVU0Uo
V1hHQykKLSNpbmNsdWRlIDx3eC9ncmFwaGljcy5oPgotI2VuZGlmCi0jaW5jbHVkZSA8d3gvaW1h
Z2UuaD4KLSNpbmNsdWRlIDx3eC9yYXdibXAuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1J
bWFnZURlY29kZXIqIGNyZWF0ZURlY29kZXIoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhKQotewot
ICAgIC8vIFdlIG5lZWQgYXQgbGVhc3QgNCBieXRlcyB0byBmaWd1cmUgb3V0IHdoYXQga2luZCBv
ZiBpbWFnZSB3ZSdyZSBkZWFsaW5nIHdpdGguCi0gICAgaW50IGxlbmd0aCA9IGRhdGEuc2l6ZSgp
OwotICAgIGlmIChsZW5ndGggPCA0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIHVDb250ZW50cyA9IChjb25zdCB1bnNpZ25lZCBjaGFyKilkYXRhLmRhdGEo
KTsKLSAgICBjb25zdCBjaGFyKiBjb250ZW50cyA9IGRhdGEuZGF0YSgpOwotCi0gICAgLy8gR0lG
cyBiZWdpbiB3aXRoIEdJRjgoNyBvciA5KS4KLSAgICBpZiAoc3RybmNtcChjb250ZW50cywgIkdJ
RjgiLCA0KSA9PSAwKQotICAgICAgICByZXR1cm4gbmV3IEdJRkltYWdlRGVjb2RlcigpOwotCi0g
ICAgLy8gVGVzdCBmb3IgUE5HLgotICAgIGlmICh1Q29udGVudHNbMF09PTB4ODkgJiYKLSAgICAg
ICAgdUNvbnRlbnRzWzFdPT0weDUwICYmCi0gICAgICAgIHVDb250ZW50c1syXT09MHg0RSAmJgot
ICAgICAgICB1Q29udGVudHNbM109PTB4NDcpCi0gICAgICAgIHJldHVybiBuZXcgUE5HSW1hZ2VE
ZWNvZGVyKCk7Ci0KLSAgICAvLyBKUEVHCi0gICAgaWYgKHVDb250ZW50c1swXT09MHhGRiAmJgot
ICAgICAgICB1Q29udGVudHNbMV09PTB4RDggJiYKLSAgICAgICAgdUNvbnRlbnRzWzJdPT0weEZG
KQotICAgICAgICByZXR1cm4gbmV3IEpQRUdJbWFnZURlY29kZXIoKTsKLQotICAgIC8vIEJNUAot
ICAgIGlmIChzdHJuY21wKGNvbnRlbnRzLCAiQk0iLCAyKSA9PSAwKQotICAgICAgICByZXR1cm4g
bmV3IEJNUEltYWdlRGVjb2RlcigpOwotCi0gICAgLy8gSUNPcyBhbHdheXMgYmVnaW4gd2l0aCBh
IDItYnl0ZSAwIGZvbGxvd2VkIGJ5IGEgMi1ieXRlIDEuCi0gICAgLy8gQ1VScyBiZWdpbiB3aXRo
IDItYnl0ZSAwIGZvbGxvd2VkIGJ5IDItYnl0ZSAyLgotICAgIGlmICghbWVtY21wKGNvbnRlbnRz
LCAiXDAwMFwwMDBcMDAxXDAwMCIsIDQpIHx8Ci0gICAgICAgICFtZW1jbXAoY29udGVudHMsICJc
MDAwXDAwMFwwMDJcMDAwIiwgNCkpCi0gICAgICAgIHJldHVybiBuZXcgSUNPSW1hZ2VEZWNvZGVy
KCk7Ci0gICAKLSAgICAvLyBYQk1zIHJlcXVpcmUgOCBieXRlcyBvZiBpbmZvLgotICAgIGlmIChs
ZW5ndGggPj0gOCAmJiBzdHJuY21wKGNvbnRlbnRzLCAiI2RlZmluZSAiLCA4KSA9PSAwKQotICAg
ICAgICByZXR1cm4gbmV3IFhCTUltYWdlRGVjb2RlcigpOwotCi0gICAgLy8gR2l2ZSB1cC4gV2Ug
ZG9uJ3Qga25vdyB3aGF0IHRoZSBoZWNrIHRoaXMgaXMuCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUlt
YWdlU291cmNlOjpJbWFnZVNvdXJjZSgpCi0gIDogbV9kZWNvZGVyKDApCi17fQotCi1JbWFnZVNv
dXJjZTo6fkltYWdlU291cmNlKCkKLXsKLSAgICBjbGVhcih0cnVlKTsKLX0KLQotYm9vbCBJbWFn
ZVNvdXJjZTo6aW5pdGlhbGl6ZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2RlY29kZXI7Ci19
Ci0KLXZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFs
bERhdGFSZWNlaXZlZCkKLXsKLSAgICAvLyBNYWtlIHRoZSBkZWNvZGVyIGJ5IHNuaWZmaW5nIHRo
ZSBieXRlcy4KLSAgICAvLyBUaGlzIG1ldGhvZCB3aWxsIGV4YW1pbmUgdGhlIGRhdGEgYW5kIGlu
c3RhbnRpYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBhcHByb3ByaWF0ZSBkZWNvZGVyIHBsdWdpbi4K
LSAgICAvLyBJZiBpbnN1ZmZpY2llbnQgYnl0ZXMgYXJlIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUg
dGhlIGltYWdlIHR5cGUsIG5vIGRlY29kZXIgcGx1Z2luIHdpbGwgYmUKLSAgICAvLyBtYWRlLgot
ICAgIGlmIChtX2RlY29kZXIpCi0gICAgICAgIGRlbGV0ZSBtX2RlY29kZXI7Ci0gICAgbV9kZWNv
ZGVyID0gY3JlYXRlRGVjb2RlcigqZGF0YSk7Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2RlY29kZXItPnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsK
LX0KLQotYm9vbCBJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxlKCkKLXsKLSAgICBpZiAoIW1f
ZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1fZGVjb2Rlci0+
aXNTaXplQXZhaWxhYmxlKCk7Ci19Ci0KLUludFNpemUgSW1hZ2VTb3VyY2U6OnNpemUoKSBjb25z
dAotewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0g
ICAgcmV0dXJuIG1fZGVjb2Rlci0+c2l6ZSgpOwotfQotCi1JbnRTaXplIEltYWdlU291cmNlOjpm
cmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVjb2Rl
cikKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIHJldHVybiBtX2RlY29kZXItPmZy
YW1lU2l6ZUF0SW5kZXgoaW5kZXgpOwotfQotCi1pbnQgSW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25D
b3VudCgpCi17Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJldHVybiBjQW5pbWF0aW9u
Tm9uZTsKLQotICAgIHJldHVybiBtX2RlY29kZXItPnJlcGV0aXRpb25Db3VudCgpOwotfQotCi1T
dHJpbmcgSW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotc2l6ZV90IEltYWdlU291
cmNlOjpmcmFtZUNvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNv
ZGVyLT5mcmFtZUNvdW50KCkgOiAwOwotfQotCi1ib29sIEltYWdlU291cmNlOjpmcmFtZUlzQ29t
cGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKLXsKLSAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGJl
IHRlc3RpbmcgdGhlIFJHQkEzMkJ1ZmZlcidzIHN0YXR1cyBhcyB3ZWxsPwotICAgIHJldHVybiAo
bV9kZWNvZGVyICYmIG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KSAhPSAwKTsK
LX0KLQotdm9pZCBJbWFnZVNvdXJjZTo6Y2xlYXIoYm9vbCBkZXN0cm95QWxsLCBzaXplX3QgY2xl
YXJCZWZvcmVGcmFtZSwgU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkK
LXsKLSAgICBpZiAoIWRlc3Ryb3lBbGwpIHsKLSAgICAgICAgaWYgKG1fZGVjb2RlcikKLSAgICAg
ICAgICAgIG1fZGVjb2Rlci0+Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKGNsZWFyQmVmb3JlRnJhbWUp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZGVsZXRlIG1fZGVjb2RlcjsKLSAgICBt
X2RlY29kZXIgPSAwOwotICAgIGlmIChkYXRhKQotICAgICAgICBzZXREYXRhKGRhdGEsIGFsbERh
dGFSZWNlaXZlZCk7Ci19Ci0KLU5hdGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFt
ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQotewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1
ZmZlckF0SW5kZXgoaW5kZXgpOwotICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkg
PT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAg
ICByZXR1cm4gYnVmZmVyLT5hc05ld05hdGl2ZUltYWdlKCk7Ci19Ci0KLWZsb2F0IEltYWdlU291
cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCi17Ci0gICAgaWYgKCFtX2Rl
Y29kZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBt
X2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7Ci0gICAgaWYgKCFidWZmZXIgfHwg
YnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgZmxvYXQgZHVyYXRpb24gPSBidWZmZXItPmR1cmF0aW9uKCkgLyAxMDAw
LjBmOwotCi0gICAgLy8gRm9sbG93IG90aGVyIHBvcnRzIChhbmQgV2luSUUncykgYmVoYXZpb3Ig
dG8gc2xvdyBhbm5veWluZyBhZHMgdGhhdAotICAgIC8vIHNwZWNpZnkgYSAwIGR1cmF0aW9uLgot
ICAgIGlmIChkdXJhdGlvbiA8IDAuMDUxZikKLSAgICAgICAgcmV0dXJuIDAuMTAwZjsKLSAgICBy
ZXR1cm4gZHVyYXRpb247Ci19Ci0KLWJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdElu
ZGV4KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoIW1fZGVjb2RlciB8fCAhbV9kZWNvZGVyLT5z
dXBwb3J0c0FscGhhKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJHQkEzMkJ1ZmZl
ciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwotICAgIGlm
ICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gYnVmZmVyLT5oYXNBbHBoYSgp
OwotfQotCi19CkluZGV4OiBXZWJDb3JlL3dlYmNvcmUtd3guYmtsDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
V2ViQ29yZS93ZWJjb3JlLXd4LmJrbAkocmV2aXNpb24gNDcwODApCisrKyBXZWJDb3JlL3dlYmNv
cmUtd3guYmtsCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBAIHd4V2ViQ29yZSBwb3J0
IEJha2VmaWxlIHByb2plY3QgZmlsZS4KICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93eC9H
cmFkaWVudFd4LmNwcAogICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29u
dGV4dFd4LmNwcAogICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3gu
Y3BwCi0gICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VTb3VyY2VXeC5jcHAKICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcAogICAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3d4L0ludFBvaW50V3guY3BwCiAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvSW50UmVjdFd4LmNwcAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38702</attachid>
            <date>2009-08-27 17:08:43 -0700</date>
            <delta_ts>2009-08-28 11:09:02 -0700</delta_ts>
            <desc>Move createDecoder() onto ImageDecoder</desc>
            <filename>patch2</filename>
            <type>text/plain</type>
            <size>9472</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQ3ODQzKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyMiBAQAorMjAwOS0wOC0yNyAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3OTY1CisgICAgICAg
IE1vdmUgSW1hZ2VEZWNvZGVyIGNyZWF0aW9uIGZ1bmN0aW9uIHRvIGEgZmFjdG9yeSBmdW5jdGlv
biBvbgorICAgICAgICBJbWFnZURlY29kZXIuICBUaGlzIGlzIGFyZ3VhYmx5IHdoZXJlIGl0IG1h
a2VzIHRoZSBtb3N0IHNlbnNlIGFueXdheSwKKyAgICAgICAgYW5kIGl0IHdpbGwgKHNvb24pIGFs
bG93IEltYWdlU291cmNlUXQuY3BwIHRvIGhhdmUgb25lIGxlc3MgZGVkaWNhdGVkCisgICAgICAg
IGZ1bmN0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9JbWFnZURlY29kZXJRdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3F0L0ltYWdlU291cmNlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OnNldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rl
ci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6
CisKIDIwMDktMDgtMjcgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHJldmlzaW9uIDQ3ODQwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEzICsy
OSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKIAot
I2luY2x1ZGUgIkJNUEltYWdlRGVjb2Rlci5oIgotI2luY2x1ZGUgIkdJRkltYWdlRGVjb2Rlci5o
IgotI2luY2x1ZGUgIklDT0ltYWdlRGVjb2Rlci5oIgotI2luY2x1ZGUgIkpQRUdJbWFnZURlY29k
ZXIuaCIKLSNpbmNsdWRlICJQTkdJbWFnZURlY29kZXIuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKLSNpbmNsdWRlICJYQk1JbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZURlY29k
ZXIuaCIKIAogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiAjaWZuZGVm
IElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElOR19NQVhfTlVNQkVSX09GX1BJWEVMUwpAQCAtNDUs
NTEgKzM5LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbWFnZURlY29kZXIqIGNyZWF0
ZURlY29kZXIoY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhKQotewotICAgIC8vIFdlIG5lZWQgYXQg
bGVhc3QgNCBieXRlcyB0byBmaWd1cmUgb3V0IHdoYXQga2luZCBvZiBpbWFnZSB3ZSdyZSBkZWFs
aW5nIHdpdGguCi0gICAgaW50IGxlbmd0aCA9IGRhdGEuc2l6ZSgpOwotICAgIGlmIChsZW5ndGgg
PCA0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHVDb250
ZW50cyA9IChjb25zdCB1bnNpZ25lZCBjaGFyKilkYXRhLmRhdGEoKTsKLSAgICBjb25zdCBjaGFy
KiBjb250ZW50cyA9IGRhdGEuZGF0YSgpOwotCi0gICAgLy8gR0lGcyBiZWdpbiB3aXRoIEdJRjgo
NyBvciA5KS4KLSAgICBpZiAoc3RybmNtcChjb250ZW50cywgIkdJRjgiLCA0KSA9PSAwKQotICAg
ICAgICByZXR1cm4gbmV3IEdJRkltYWdlRGVjb2RlcigpOwotCi0gICAgLy8gVGVzdCBmb3IgUE5H
LgotICAgIGlmICh1Q29udGVudHNbMF09PTB4ODkgJiYKLSAgICAgICAgdUNvbnRlbnRzWzFdPT0w
eDUwICYmCi0gICAgICAgIHVDb250ZW50c1syXT09MHg0RSAmJgotICAgICAgICB1Q29udGVudHNb
M109PTB4NDcpCi0gICAgICAgIHJldHVybiBuZXcgUE5HSW1hZ2VEZWNvZGVyKCk7Ci0KLSAgICAv
LyBKUEVHCi0gICAgaWYgKHVDb250ZW50c1swXT09MHhGRiAmJgotICAgICAgICB1Q29udGVudHNb
MV09PTB4RDggJiYKLSAgICAgICAgdUNvbnRlbnRzWzJdPT0weEZGKQotICAgICAgICByZXR1cm4g
bmV3IEpQRUdJbWFnZURlY29kZXIoKTsKLQotICAgIC8vIEJNUAotICAgIGlmIChzdHJuY21wKGNv
bnRlbnRzLCAiQk0iLCAyKSA9PSAwKQotICAgICAgICByZXR1cm4gbmV3IEJNUEltYWdlRGVjb2Rl
cigpOwotCi0gICAgLy8gSUNPcyBhbHdheXMgYmVnaW4gd2l0aCBhIDItYnl0ZSAwIGZvbGxvd2Vk
IGJ5IGEgMi1ieXRlIDEuCi0gICAgLy8gQ1VScyBiZWdpbiB3aXRoIDItYnl0ZSAwIGZvbGxvd2Vk
IGJ5IDItYnl0ZSAyLgotICAgIGlmICghbWVtY21wKGNvbnRlbnRzLCAiXDAwMFwwMDBcMDAxXDAw
MCIsIDQpIHx8Ci0gICAgICAgICFtZW1jbXAoY29udGVudHMsICJcMDAwXDAwMFwwMDJcMDAwIiwg
NCkpCi0gICAgICAgIHJldHVybiBuZXcgSUNPSW1hZ2VEZWNvZGVyKCk7Ci0KLSAgICAvLyBYQk1z
IHJlcXVpcmUgOCBieXRlcyBvZiBpbmZvLgotICAgIGlmIChsZW5ndGggPj0gOCAmJiBzdHJuY21w
KGNvbnRlbnRzLCAiI2RlZmluZSAiLCA4KSA9PSAwKQotICAgICAgICByZXR1cm4gbmV3IFhCTUlt
YWdlRGVjb2RlcigpOwotCi0gICAgLy8gR2l2ZSB1cC4gV2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBo
ZWNrIHRoaXMgaXMuCi0gICAgcmV0dXJuIDA7Ci19Ci0KIEltYWdlU291cmNlOjpJbWFnZVNvdXJj
ZSgpCiAgICAgOiBtX2RlY29kZXIoMCkKIHsKQEAgLTEyNiw3ICs3NSw3IEBAIHZvaWQgSW1hZ2VT
b3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiAKICAgICAvLyBJZiBpbnN1ZmZpY2llbnQgYnl0
ZXMgYXJlIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5cGUsIG5vIGRlY29kZXIg
cGx1Z2luIHdpbGwgYmUKICAgICAvLyBtYWRlLgogICAgIGlmICghbV9kZWNvZGVyKSB7Ci0gICAg
ICAgIG1fZGVjb2RlciA9IGNyZWF0ZURlY29kZXIoZGF0YS0+YnVmZmVyKCkpOworICAgICAgICBt
X2RlY29kZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFnZVNvdXJjZVB0cj4oSW1hZ2VEZWNvZGVy
OjpjcmVhdGUoKmRhdGEpKTsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5H
KQogICAgICAgICBpZiAobV9kZWNvZGVyKQogICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRNYXhO
dW1QaXhlbHMoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HX01BWF9OVU1CRVJfT0ZfUElYRUxT
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuY3Bw
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZURlY29k
ZXJRdC5jcHAJKHJldmlzaW9uIDQ3ODM5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9JbWFnZURlY29kZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDI1IEBAIG5h
bWVzcGFjZSB7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKworICBJbWFnZURlY29kZXIqIElt
YWdlRGVjb2Rlcjo6Y3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSkKK3sKKyAgICAvLyBX
ZSBuZWVkIGF0IGxlYXN0IDQgYnl0ZXMgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgaW1hZ2Ug
d2UncmUgZGVhbGluZyB3aXRoLgorICAgIGlmIChkYXRhLnNpemUoKSA8IDQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgUUJ5dGVBcnJheSBieXRlcyA9IFFCeXRlQXJyYXk6OmZyb21SYXdEYXRh
KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgUUJ1ZmZlciBidWZmZXIoJmJ5dGVzKTsK
KyAgICBpZiAoIWJ1ZmZlci5vcGVuKFFCdWZmZXI6OlJlYWRPbmx5KSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBRU3RyaW5nIGltYWdlRm9ybWF0ID0gUVN0cmluZzo6ZnJvbUxhdGluMShRSW1h
Z2VSZWFkZXI6OmltYWdlRm9ybWF0KCZidWZmZXIpLnRvTG93ZXIoKSk7CisgICAgaWYgKGltYWdl
Rm9ybWF0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7IC8vIEltYWdlIGZvcm1hdCBub3Qg
c3VwcG9ydGVkCisKKyAgICByZXR1cm4gbmV3IEltYWdlRGVjb2RlclF0KGltYWdlRm9ybWF0KTsK
K30KKwogSW1hZ2VEZWNvZGVyUXQ6OkltYWdlRGF0YTo6SW1hZ2VEYXRhKGNvbnN0IFFJbWFnZSYg
aW1hZ2UsIEltYWdlU3RhdGUgaW1hZ2VTdGF0ZSwgaW50IGR1cmF0aW9uKSA6CiAgICAgbV9pbWFn
ZShpbWFnZSksIG1faW1hZ2VTdGF0ZShpbWFnZVN0YXRlKSwgbV9kdXJhdGlvbihkdXJhdGlvbikK
IHsKQEAgLTE3OCwyNCArMTk3LDYgQEAgSW1hZ2VEZWNvZGVyUXQ6OlJlYWRDb250ZXh0OjpJbmNy
ZW1lbnRhbAogICAgIHJldHVybiBJbmNyZW1lbnRhbFJlYWRDb21wbGV0ZTsKIH0KIAotSW1hZ2VE
ZWNvZGVyUXQqIEltYWdlRGVjb2RlclF0OjpjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRh
KQotewotICAgIC8vIFdlIG5lZWQgYXQgbGVhc3QgNCBieXRlcyB0byBmaWd1cmUgb3V0IHdoYXQg
a2luZCBvZiBpbWFnZSB3ZSdyZSBkZWFsaW5nIHdpdGguCi0gICAgaWYgKGRhdGEuc2l6ZSgpIDwg
NCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBRQnl0ZUFycmF5IGJ5dGVzID0gUUJ5dGVBcnJh
eTo6ZnJvbVJhd0RhdGEoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKLSAgICBRQnVmZmVyIGJ1
ZmZlcigmYnl0ZXMpOwotICAgIGlmICghYnVmZmVyLm9wZW4oUUJ1ZmZlcjo6UmVhZE9ubHkpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIFFTdHJpbmcgaW1hZ2VGb3JtYXQgPSBRU3RyaW5nOjpm
cm9tTGF0aW4xKFFJbWFnZVJlYWRlcjo6aW1hZ2VGb3JtYXQoJmJ1ZmZlcikudG9Mb3dlcigpKTsK
LSAgICBpZiAoaW1hZ2VGb3JtYXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsgLy8gSW1h
Z2UgZm9ybWF0IG5vdCBzdXBwb3J0ZWQKLQotICAgIHJldHVybiBuZXcgSW1hZ2VEZWNvZGVyUXQo
aW1hZ2VGb3JtYXQpOwotfQotCiBJbWFnZURlY29kZXJRdDo6SW1hZ2VEZWNvZGVyUXQoY29uc3Qg
UVN0cmluZyAmaW1hZ2VGb3JtYXQpCiAgICAgOiBtX2hhc0FscGhhQ2hhbm5lbChmYWxzZSkKICAg
ICAsIG1faW1hZ2VGb3JtYXQoaW1hZ2VGb3JtYXQpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmgJKHJldmlzaW9uIDQ3ODM5KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZURlY29kZXJRdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEltYWdlRGVjb2Rl
clF0IDogcHVibGljIEltYWdlRGVjb2RlcgogewogcHVibGljOgotICAgIHN0YXRpYyBJbWFnZURl
Y29kZXJRdCogY3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSk7CiAgICAgfkltYWdlRGVj
b2RlclF0KCk7CiAKICAgICB0eXBlZGVmIFZlY3RvcjxjaGFyPiBJbmNvbWluZ0RhdGE7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlU291cmNlUXQuY3BwDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVNvdXJjZVF0LmNwcAko
cmV2aXNpb24gNDc4MzkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlU291
cmNlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgSW1hZ2VTb3Vy
Y2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiAKICAgICAvLyBJZiBpbnN1ZmZpY2llbnQgYnl0ZXMg
YXJlIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5cGUsIG5vIGRlY29kZXIgcGx1
Z2luIHdpbGwgYmUKICAgICAvLyBtYWRlLgogICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICBt
X2RlY29kZXIgPSBJbWFnZURlY29kZXJRdDo6Y3JlYXRlKCpkYXRhKTsKKyAgICAgICAgbV9kZWNv
ZGVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VTb3VyY2VQdHI+KEltYWdlRGVjb2Rlcjo6Y3Jl
YXRlKCpkYXRhKSk7CiAKICAgICBpZiAoIW1fZGVjb2RlcikKICAgICAgICAgcmV0dXJuOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIu
Y3BwCShyZXZpc2lvbiA0Nzg0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
SW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNjEgQEAKICNpbmNs
dWRlIDxhbGdvcml0aG0+CiAjZW5kaWYKIAorI2luY2x1ZGUgIkJNUEltYWdlRGVjb2Rlci5oIg0K
KyNpbmNsdWRlICJHSUZJbWFnZURlY29kZXIuaCINCisjaW5jbHVkZSAiSUNPSW1hZ2VEZWNvZGVy
LmgiDQorI2luY2x1ZGUgIkpQRUdJbWFnZURlY29kZXIuaCINCisjaW5jbHVkZSAiUE5HSW1hZ2VE
ZWNvZGVyLmgiDQorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIg0KKyNpbmNsdWRlICJYQk1JbWFn
ZURlY29kZXIuaCINCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorSW1hZ2VEZWNvZGVyKiBJbWFn
ZURlY29kZXI6OmNyZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEpDQorew0KKyAgICAvLyBX
ZSBuZWVkIGF0IGxlYXN0IDQgYnl0ZXMgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgaW1hZ2Ug
d2UncmUgZGVhbGluZyB3aXRoLg0KKyAgICBpbnQgbGVuZ3RoID0gZGF0YS5zaXplKCk7DQorICAg
IGlmIChsZW5ndGggPCA0KQ0KKyAgICAgICAgcmV0dXJuIDA7DQorDQorICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIHVDb250ZW50cyA9IChjb25zdCB1bnNpZ25lZCBjaGFyKilkYXRhLmRhdGEoKTsN
CisgICAgY29uc3QgY2hhciogY29udGVudHMgPSBkYXRhLmRhdGEoKTsNCisNCisgICAgLy8gR0lG
cyBiZWdpbiB3aXRoIEdJRjgoNyBvciA5KS4NCisgICAgaWYgKHN0cm5jbXAoY29udGVudHMsICJH
SUY4IiwgNCkgPT0gMCkNCisgICAgICAgIHJldHVybiBuZXcgR0lGSW1hZ2VEZWNvZGVyKCk7DQor
DQorICAgIC8vIFRlc3QgZm9yIFBORy4NCisgICAgaWYgKHVDb250ZW50c1swXT09MHg4OSAmJg0K
KyAgICAgICAgdUNvbnRlbnRzWzFdPT0weDUwICYmDQorICAgICAgICB1Q29udGVudHNbMl09PTB4
NEUgJiYNCisgICAgICAgIHVDb250ZW50c1szXT09MHg0NykNCisgICAgICAgIHJldHVybiBuZXcg
UE5HSW1hZ2VEZWNvZGVyKCk7DQorDQorICAgIC8vIEpQRUcNCisgICAgaWYgKHVDb250ZW50c1sw
XT09MHhGRiAmJg0KKyAgICAgICAgdUNvbnRlbnRzWzFdPT0weEQ4ICYmDQorICAgICAgICB1Q29u
dGVudHNbMl09PTB4RkYpDQorICAgICAgICByZXR1cm4gbmV3IEpQRUdJbWFnZURlY29kZXIoKTsN
CisNCisgICAgLy8gQk1QDQorICAgIGlmIChzdHJuY21wKGNvbnRlbnRzLCAiQk0iLCAyKSA9PSAw
KQ0KKyAgICAgICAgcmV0dXJuIG5ldyBCTVBJbWFnZURlY29kZXIoKTsNCisNCisgICAgLy8gSUNP
cyBhbHdheXMgYmVnaW4gd2l0aCBhIDItYnl0ZSAwIGZvbGxvd2VkIGJ5IGEgMi1ieXRlIDEuDQor
ICAgIC8vIENVUnMgYmVnaW4gd2l0aCAyLWJ5dGUgMCBmb2xsb3dlZCBieSAyLWJ5dGUgMi4NCisg
ICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJcMDAwXDAwMFwwMDFcMDAwIiwgNCkgfHwNCisgICAg
ICAgICFtZW1jbXAoY29udGVudHMsICJcMDAwXDAwMFwwMDJcMDAwIiwgNCkpDQorICAgICAgICBy
ZXR1cm4gbmV3IElDT0ltYWdlRGVjb2RlcigpOw0KKw0KKyAgICAvLyBYQk1zIHJlcXVpcmUgOCBi
eXRlcyBvZiBpbmZvLg0KKyAgICBpZiAobGVuZ3RoID49IDggJiYgc3RybmNtcChjb250ZW50cywg
IiNkZWZpbmUgIiwgOCkgPT0gMCkNCisgICAgICAgIHJldHVybiBuZXcgWEJNSW1hZ2VEZWNvZGVy
KCk7DQorDQorICAgIC8vIEdpdmUgdXAuIFdlIGRvbid0IGtub3cgd2hhdCB0aGUgaGVjayB0aGlz
IGlzLg0KKyAgICByZXR1cm4gMDsNCit9DQorCiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9X
Tl9TQU1QTElORykKIAogbmFtZXNwYWNlIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA0NzgzOSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE5NSw2ICsxOTUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1
YWwgfkltYWdlRGVjb2RlcigpIHt9CiAKKyAgICAgICAgLy8gRmFjdG9yeSBmdW5jdGlvbiB0byBj
cmVhdGUgYW4gSW1hZ2VEZWNvZGVyLiAgUG9ydHMgdGhhdCBzdWJjbGFzcworICAgICAgICAvLyBJ
bWFnZURlY29kZXIgY2FuIHByb3ZpZGUgdGhlaXIgb3duIGltcGxlbWVudGF0aW9uIG9mIHRoaXMg
dG8gYXZvaWQKKyAgICAgICAgLy8gbmVlZGluZyB0byB3cml0ZSBhIGRlZGljYXRlZCBzZXREYXRh
KCkgaW1wbGVtZW50YXRpb24uCisgICAgICAgIHN0YXRpYyBJbWFnZURlY29kZXIqIGNyZWF0ZShj
b25zdCBTaGFyZWRCdWZmZXImIGRhdGEpOworCiAgICAgICAgIC8vIFRoZSB0aGUgZmlsZW5hbWUg
ZXh0ZW5zaW9uIHVzdWFsbHkgYXNzb2NpYXRlZCB3aXRoIGFuIHVuZGVjb2RlZCBpbWFnZSBvZiB0
aGlzIHR5cGUuCiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29u
c3QgPSAwOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38745</attachid>
            <date>2009-08-28 11:47:22 -0700</date>
            <delta_ts>2009-09-01 08:51:29 -0700</delta_ts>
            <desc>Remove most of ImageSourceQt.cpp</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>6044</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQ3ODcxKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOCBAQAorMjAwOS0wOC0yOCAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3OTY1CisgICAgICAg
IEVsaW1pbmF0ZSBtb3N0IG9mIEltYWdlU291cmNlUXQuY3BwIGluIGZhdm9yIG9mIEltYWdlU291
cmNlLmNwcC4KKworICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpm
cmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1h
Z2VTb3VyY2VRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJh
bWVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUhhc0FscGhh
QXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBsZXRl
QXRJbmRleCk6CisKIDIwMDktMDgtMjggIEJlbiBNdXJkb2NoICA8YmVubUBnb29nbGUuY29tPgog
CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODgwMwpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnBybw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS5wcm8JKHJldmlzaW9uIDQ3ODcwKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBj
b3B5KQpAQCAtMTE2Niw2ICsxMTY2LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNw
cCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIFwKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJl
Y3QuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcCBcCkBAIC0xODQyLDYgKzE4NDMsNyBAQCBI
RUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL01l
ZGlhUGxheWVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaCBcCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcA0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCShyZXZpc2lvbiA0Nzg3MCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTYsNiArMTE2LDggQEAgc2l6ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50KCkg
Y29uc3QKICAgICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCkgOiAw
OwogfQogCisjaWYgIVBMQVRGT1JNKFFUKQorCiBOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6
Y3JlYXRlRnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoIW1fZGVjb2RlcikK
QEAgLTE2MSw4ICsxNjMsOCBAQCBib29sIEltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRl
eChzCiAgICAgLy8gYmxhY2suCiAgICAgLy8gVE9ETzogUGVyaGFwcyB3ZSBzaG91bGQgZW5zdXJl
IHRoYXQgZWFjaCBpbmRpdmlkdWFsIGRlY29kZXIgcmV0dXJucyB0cnVlCiAgICAgLy8gaW4gdGhp
cyBjYXNlLgotICAgIHJldHVybiBmcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4KSA/Ci0gICAg
ICAgIG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KS0+aGFzQWxwaGEoKSA6IHRy
dWU7CisgICAgcmV0dXJuICFmcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4KQorICAgICAgICB8
fCBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCktPmhhc0FscGhhKCk7CiB9CiAK
IGJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQpA
QCAtMTc0LDQgKzE3Niw2IEBAIGJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5k
ZXgKICAgICByZXR1cm4gYnVmZmVyICYmIGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVy
OjpGcmFtZUNvbXBsZXRlOwogfQogCisjZW5kaWYKKwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9JbWFnZVNvdXJjZVF0LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VTb3VyY2VRdC5jcHAJKHJldmlzaW9uIDQ3ODcwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVNvdXJjZVF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksOTggKzI5LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VTb3VyY2UuaCIKICNpbmNsdWRlICJJbWFnZURlY29kZXJRdC5oIgotI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgotCi0jaW5jbHVkZSA8UUJ1ZmZlcj4KLSNpbmNsdWRlIDxRSW1hZ2U+
Ci0jaW5jbHVkZSA8UUltYWdlUmVhZGVyPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUltYWdl
U291cmNlOjpJbWFnZVNvdXJjZSgpCi0gICAgOiBtX2RlY29kZXIoMCkKLXsKLX0KLQotSW1hZ2VT
b3VyY2U6On5JbWFnZVNvdXJjZSgpCi17Ci0gICAgY2xlYXIodHJ1ZSk7Ci19Ci0KLWJvb2wgSW1h
Z2VTb3VyY2U6OmluaXRpYWxpemVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWNvZGVyOwot
fQotCi12b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBh
bGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAgLy8gTWFrZSB0aGUgZGVjb2RlciBieSBzbmlmZmluZyB0
aGUgYnl0ZXMuCi0gICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBleGFtaW5lIHRoZSBkYXRhIGFuZCBp
bnN0YW50aWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgYXBwcm9wcmlhdGUgZGVjb2RlciBwbHVnaW4u
Ci0gICAgLy8gSWYgaW5zdWZmaWNpZW50IGJ5dGVzIGFyZSBhdmFpbGFibGUgdG8gZGV0ZXJtaW5l
IHRoZSBpbWFnZSB0eXBlLCBubyBkZWNvZGVyIHBsdWdpbiB3aWxsIGJlCi0gICAgLy8gbWFkZS4K
LSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgbV9kZWNvZGVyID0gc3RhdGljX2Nhc3Q8TmF0
aXZlSW1hZ2VTb3VyY2VQdHI+KEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhKSk7Ci0KLSAgICBp
ZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kZWNvZGVyLT5zZXREYXRh
KGRhdGEtPmJ1ZmZlcigpLCBhbGxEYXRhUmVjZWl2ZWQpOwotfQotCi1TdHJpbmcgSW1hZ2VTb3Vy
Y2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIG1fZGVjb2Rlci0+ZmlsZW5hbWVF
eHRlbnNpb24oKTsKLX0KLQotYm9vbCBJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxlKCkKLXsK
LSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IG1fZGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCk7Ci19Ci0KLUludFNpemUgSW1hZ2VTb3VyY2U6
OnNpemUoKSBjb25zdAotewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1cm4gSW50
U2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGVjb2Rlci0+c2l6ZSgpOwotfQotCi1JbnRTaXplIElt
YWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIHJldHVybiBt
X2RlY29kZXItPmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgpOwotfQotCi1pbnQgSW1hZ2VTb3VyY2U6
OnJlcGV0aXRpb25Db3VudCgpCi17Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJldHVy
biBjQW5pbWF0aW9uTm9uZTsKLQotICAgIHJldHVybiBtX2RlY29kZXItPnJlcGV0aXRpb25Db3Vu
dCgpOwotfQotCi1zaXplX3QgSW1hZ2VTb3VyY2U6OmZyYW1lQ291bnQoKSBjb25zdAotewotICAg
IGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2RlY29k
ZXItPmZyYW1lQ291bnQoKTsKLX0KLQogTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0
ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fZGVjb2Rlci0+aW1hZ2VBdEluZGV4KGluZGV4
KTsKKyAgICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVyLT5pbWFnZUF0SW5kZXgoaW5kZXgp
IDogMDsKIH0KIAogZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVf
dCBpbmRleCkKQEAgLTEzOSwzMyArNTMsMTMgQEAgZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVy
YXRpb25BdEluZGV4KAogCiBib29sIEltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleChz
aXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFtX2RlY29kZXIgfHwgIW1fZGVjb2Rlci0+c3VwcG9y
dHNBbHBoYSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBRUGl4bWFwKiBz
b3VyY2UgPSBtX2RlY29kZXItPmltYWdlQXRJbmRleChpbmRleCk7Ci0gICAgaWYgKCFzb3VyY2Up
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBzb3VyY2UtPmhhc0FscGhhQ2hh
bm5lbCgpOworICAgIHJldHVybiBmcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4KSAmJiBtX2Rl
Y29kZXItPnN1cHBvcnRzQWxwaGEoKSAmJgorICAgICAgICBtX2RlY29kZXItPmltYWdlQXRJbmRl
eChpbmRleCktPmhhc0FscGhhQ2hhbm5lbCgpOwogfQogCiBib29sIEltYWdlU291cmNlOjpmcmFt
ZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKLSAgICByZXR1cm4gKG1fZGVjb2Rl
ciAmJiBtX2RlY29kZXItPmltYWdlQXRJbmRleChpbmRleCkpOwotfQotCi12b2lkIEltYWdlU291
cmNlOjpjbGVhcihib29sIGRlc3Ryb3lBbGwsIHNpemVfdCBjbGVhckJlZm9yZUZyYW1lLCBTaGFy
ZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQotewotICAgIGlmICghZGVzdHJv
eUFsbCkgewotICAgICAgICBpZiAobV9kZWNvZGVyKQotICAgICAgICAgICAgbV9kZWNvZGVyLT5j
bGVhckZyYW1lQnVmZmVyQ2FjaGUoY2xlYXJCZWZvcmVGcmFtZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBkZWxldGUgbV9kZWNvZGVyOwotICAgIG1fZGVjb2RlciA9IDA7Ci0gICAg
aWYgKGRhdGEpCi0gICAgICAgIHNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICBy
ZXR1cm4gbV9kZWNvZGVyICYmIG1fZGVjb2Rlci0+aW1hZ2VBdEluZGV4KGluZGV4KTsKIH0KIAog
fQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>