<?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>66145</bug_id>
          
          <creation_ts>2011-08-12 10:20:39 -0700</creation_ts>
          <short_desc>[chromium] Assert that main thread and compositor thread are used safely</short_desc>
          <delta_ts>2011-08-18 13:37:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Iain Merrick">husky</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>450481</commentid>
    <comment_count>0</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-08-12 10:20:39 -0700</bug_when>
    <thetext>Our threaded compositor has three modes of operation.

Paint: rendering content using standard WebKit calls. This happens on the main thread.
Commit: pushing data over to the compositor tree. The two threads are synchronized.
Update: presenting content on the screen using GL calls. This happens on the compositor thread.

Each mode involves a fairly complex traversal of the layer tree and/or compositor tree. There may be hidden bugs because we don&apos;t actually have a compositor thread yet. We should add asserts to check that methods are called in the appropriate mode(s).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450498</commentid>
    <comment_count>1</comment_count>
      <attachid>103780</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-08-12 10:37:03 -0700</bug_when>
    <thetext>Created attachment 103780
CCThreadRestriction class that checks only specified mode(s) used during its lifetime.

Suggested implementation: each thread has a set of permitted modes. We can temporarily restrict the modes a thread can use (e.g., lock it down to &quot;Paint&quot; only). If we find ourselves trying to widen the set of modes (e.g. we&apos;re currently in &quot;Update&quot; and we try to restrict to &quot;Paint&quot;) we assert.

Pro: easy to use correctly, non-invasive.
Con: failures happen inside CCThreadRestriction. Hard to see where the errors are really occurring without debugging.

I also added an ASSERT macro but that can only do an one-off check. Not obvious how to combine that with a scoped object.

I started sprinkling checks through LayerRendererChromium, but rapidly hit asserts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450516</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-12 11:14:45 -0700</bug_when>
    <thetext>I don&apos;t think function-level blocks will work, since we will sometimes changes modes in the middle of a function.  I&apos;d suggest having a set of assertions (something like assertMainThread(), assertDuringCommit(), assertCompositorThread() - I&apos;m sure you can think of better names) and explicit calls to switch state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450517</commentid>
    <comment_count>3</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-08-12 11:17:23 -0700</bug_when>
    <thetext>If we switch modes in a function we could just block-scope it, no?

void foo() {
  {
    CCThreadRestriction mode(Paint);
    paint();
  }
  {
    CCThreadRestriction mode(Commit);
    commit();
  }
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450518</commentid>
    <comment_count>4</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-12 11:19:39 -0700</bug_when>
    <thetext>In previous incarnations of this code, I proposed something ~= Chrome&apos;s NonThreadSafe&lt;T&gt;. This got shot down... the general idea is that a function should *never* have access to stuff that isn&apos;t safe in the first place.

So, my question would be, where in our code do we have a function that can get to pointers at the wrong time?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450521</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-12 11:28:10 -0700</bug_when>
    <thetext>I guess that&apos;s a little stronger than what I was thinking - all I had in mind was DEBUG-only assertions that we&apos;re in the right place.  Nothing for release builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450533</commentid>
    <comment_count>6</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-08-12 11:50:43 -0700</bug_when>
    <thetext>OK, lemme simplify this a bit to:

ASSERT_IN_MAIN_THREAD()
ASSERT_IN_COMPOSITOR_THREAD()
ASSERT_IN_COMMIT_PHASE()

And block-scoped objects that control when each assert is valid. Right now there&apos;s only one thread, so &apos;main thread&apos; and &apos;compositor thread&apos; need to be faked, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450544</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-12 12:09:04 -0700</bug_when>
    <thetext>Yeah, that looks like a great start.  We can expand to get more sophisticated as we need.

You can also use the USE(THREADED_COMPOSITING) macro to tell if there&apos;s supposed to be a real thread - when that is not set, then you will have to &apos;fake&apos; the threaded stuff (just check a bool).  When it is set, you can use our existing isOnMainThread() assertions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450685</commentid>
    <comment_count>8</comment_count>
      <attachid>103820</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-08-12 14:52:10 -0700</bug_when>
    <thetext>Created attachment 103820
isCCThread() and ScopedFakeCompositorThread

I noticed that CCLayerTreeHostImplProxy has its own isMainThread() and isCCThread(). With this patch those are both global functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450742</commentid>
    <comment_count>9</comment_count>
      <attachid>103838</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-08-12 16:15:09 -0700</bug_when>
    <thetext>Created attachment 103838
Cleanup. Don&apos;t declare ScopedFakeCompositorThread if THREADED_COMPOSITOR is enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451998</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-16 17:06:58 -0700</bug_when>
    <thetext>Hey Iain,
What&apos;s the status here?  You haven&apos;t marked the patch &quot;review?&quot; so I haven&apos;t tried to review it.  Are you waiting for some feedback or continuing to do work on this or what?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452001</commentid>
    <comment_count>11</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-08-16 17:12:00 -0700</bug_when>
    <thetext>Oh! Sorry, not familiar with the process. I&apos;ll go ahead and mark it for review. (I was busy with cherry-picking elsewhere.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452005</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-16 17:13:46 -0700</bug_when>
    <thetext>Attachment 103838 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/platform/graphics/chromium/...&quot; exit_code: 1

Source/WebCore/platform/graphics/chromium/cc/CCThread.cpp:46:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452074</commentid>
    <comment_count>13</comment_count>
      <attachid>103838</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-16 19:13:02 -0700</bug_when>
    <thetext>Comment on attachment 103838
Cleanup. Don&apos;t declare ScopedFakeCompositorThread if THREADED_COMPOSITOR is enabled.

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

Please fix the style issue the bot caught and comments.  I also think you should make sure that this all compiles out in release mode, since the only real side effect is ASSERT()s which are debug only.  You might have to be creative to avoid adding too many #ifndef NDEBUG lines, but it should be possible.  You don&apos;t need to guard ASSERT()s since they already compile out.

&gt; WebCore/platform/graphics/chromium/cc/CCThread.cpp:46
&gt; +    ASSERT(ccThreadID == 0);

should be ASSERT(!ccThreadID)

&gt; WebCore/platform/graphics/chromium/cc/CCThread.cpp:92
&gt; +

nit: extra newline

&gt; WebCore/platform/graphics/chromium/cc/CCThread.cpp:97
&gt; +

nit: extra newline

&gt; WebCore/platform/graphics/chromium/cc/CCThread.h:36
&gt; +// True if we&apos;re on the compositor thread.
&gt; +bool isCCThread();

I don&apos;t think it&apos;s a good idea to put this directly in the WebCore namespace.  Can you make this a static function on CCThread, just so that it&apos;s namespaced more tightly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452258</commentid>
    <comment_count>14</comment_count>
      <attachid>103838</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-17 08:08:27 -0700</bug_when>
    <thetext>Comment on attachment 103838
Cleanup. Don&apos;t declare ScopedFakeCompositorThread if THREADED_COMPOSITOR is enabled.

How does all of this going to work when the threaded mode is turned off?

Right now, the plan was for the CCLayerTreeHostImplProxy to have two implementations.

Can ou keep the isCCThread/isMainThread decider in the proxy somehow so that we can more easily switch (at runtime) the proxy?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452415</commentid>
    <comment_count>15</comment_count>
      <attachid>104202</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-08-17 11:33:45 -0700</bug_when>
    <thetext>Created attachment 104202
Moved isCCThread to CCLayerTreeHostImplProxy::isImplThread

In offline discussion with Nat we decided that the functions should live in CCLayerTreeHostImplProxy. Renamed isCCThread to isImplThread for clarity. I&apos;m still not happy that these are static but maybe that can be fixed once the threaded and non-threaded versions of CCLayerTreeHostImplProxy are fully sorted out.

Per James&apos; request we don&apos;t do anything fancy in NDEBUG builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452559</commentid>
    <comment_count>16</comment_count>
      <attachid>104202</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-17 14:12:32 -0700</bug_when>
    <thetext>Comment on attachment 104202
Moved isCCThread to CCLayerTreeHostImplProxy::isImplThread

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

The logic seems a little broken for the !USE(THREADED_COMPOSITOR) case. I also don&apos;t think that having a helper class and whatnot is necessary.  Do the simple thing.

&gt; WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h:55
&gt; +    static bool isMainThread();
&gt; +    static bool isImplThread();

#ifndef NDEBUG around these?

&gt; WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h:63
&gt; +#if !USE(THREADED_COMPOSITING) &amp;&amp; !defined(NDEBUG)
&gt; +    // Pretend that we&apos;re on the impl thread for the lifetime of this object.
&gt; +    // Use this to make ASSERT(isImplThread()) valid when we&apos;re not threaded.
&gt; +    // TODO: CCLayerTreeHostImplProxy is going to be split into two classes, one
&gt; +    // threaded and one unthreaded. Move this feature to the unthreaded class.
&gt; +    class ScopedImplThread {
&gt; +       WTF_MAKE_NONCOPYABLE(ScopedImplThread);

Do we really need this?  Why not just a setter?

&gt; WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp:141
&gt; +bool CCLayerTreeHostImplProxy::isMainThread()
&gt;  {
&gt;      return ::isMainThread();
&gt;  }
&gt;  
&gt; -bool CCLayerTreeHostImplProxy::isCCThread() const
&gt; +#if USE(THREADED_COMPOSITING)
&gt; +bool CCLayerTreeHostImplProxy::isImplThread()
&gt;  {
&gt;      return currentThread() == ccThread-&gt;threadID();
&gt;  }
&gt; +#elif defined(NDEBUG)
&gt; +bool CCLayerTreeHostImplProxy::isImplThread()
&gt; +{
&gt; +    return true;
&gt; +}

It seems like in !USE(THREADED_COMPOSITOR) isMainThread() and isImplThread() will always return true.  That&apos;s not very useful - I think you want to check the fakeImplThread in the !USE(THREADED_COMPOSITOR) case.

&gt; WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp:155
&gt; +CCLayerTreeHostImplProxy::ScopedImplThread::ScopedImplThread() : m_previous(fakeImplThread)
&gt; +{
&gt; +    fakeImplThread = true;
&gt; +}

Do we really need to support arbitrary nesting here?  This seems overdesigned.  Just have setter for the bool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452583</commentid>
    <comment_count>17</comment_count>
      <attachid>104202</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-08-17 14:29:29 -0700</bug_when>
    <thetext>Comment on attachment 104202
Moved isCCThread to CCLayerTreeHostImplProxy::isImplThread

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

&gt;&gt; WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h:55
&gt;&gt; +    static bool isImplThread();
&gt; 
&gt; #ifndef NDEBUG around these?

Done.

&gt;&gt; WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h:63
&gt;&gt; +       WTF_MAKE_NONCOPYABLE(ScopedImplThread);
&gt; 
&gt; Do we really need this?  Why not just a setter?

Done.

&gt;&gt; WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp:141
&gt;&gt; +}
&gt; 
&gt; It seems like in !USE(THREADED_COMPOSITOR) isMainThread() and isImplThread() will always return true.  That&apos;s not very useful - I think you want to check the fakeImplThread in the !USE(THREADED_COMPOSITOR) case.

I figured it had to return *something*, and true was safe (the main thread is actually the impl thread).

But if isImplThread isn&apos;t even defined for release builds, the problem goes away.

Done.

&gt;&gt; WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp:155
&gt;&gt; +}
&gt; 
&gt; Do we really need to support arbitrary nesting here?  This seems overdesigned.  Just have setter for the bool.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452591</commentid>
    <comment_count>18</comment_count>
      <attachid>104245</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-08-17 14:32:06 -0700</bug_when>
    <thetext>Created attachment 104245
Addressed James&apos; comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452614</commentid>
    <comment_count>19</comment_count>
      <attachid>104245</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-17 14:46:11 -0700</bug_when>
    <thetext>Comment on attachment 104245
Addressed James&apos; comments

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452919</commentid>
    <comment_count>20</comment_count>
      <attachid>104245</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-18 02:26:25 -0700</bug_when>
    <thetext>Comment on attachment 104245
Addressed James&apos; comments

Rejecting attachment 104245 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=ec2-cq-02&apos;, &apos;--port...&quot; exit_code: 2

Last 500 characters of output:
ommit message.
All changes require a ChangeLog.  See:
 http://webkit.org/coding/contributing.html
Found no modified ChangeLogs, cannot create a commit message.
All changes require a ChangeLog.  See:
 http://webkit.org/coding/contributing.html
Updating OpenSource
Current branch master is up to date.
Updating chromium port dependencies using gclient...

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

Full output: http://queues.webkit.org/results/9425279</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453168</commentid>
    <comment_count>21</comment_count>
      <attachid>104368</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-08-18 11:20:32 -0700</bug_when>
    <thetext>Created attachment 104368
Added missing ChangeLog. No other changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453173</commentid>
    <comment_count>22</comment_count>
      <attachid>104368</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-18 11:22:40 -0700</bug_when>
    <thetext>Comment on attachment 104368
Added missing ChangeLog. No other changes.

Whee changelogs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453313</commentid>
    <comment_count>23</comment_count>
      <attachid>104368</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-18 13:37:38 -0700</bug_when>
    <thetext>Comment on attachment 104368
Added missing ChangeLog. No other changes.

Clearing flags on attachment: 104368

Committed r93346: &lt;http://trac.webkit.org/changeset/93346&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453314</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-18 13:37:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103780</attachid>
            <date>2011-08-12 10:37:03 -0700</date>
            <delta_ts>2011-08-12 14:52:10 -0700</delta_ts>
            <desc>CCThreadRestriction class that checks only specified mode(s) used during its lifetime.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>8240</size>
            <attacher name="Iain Merrick">husky</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS5neXBpCShyZXZpc2lvbiA5Mjk1OSkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5n
IGNvcHkpCkBAIC0zNTczLDYgKzM1NzMsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUmVzdHJpY3Rpb24uY3BwJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFJlc3RyaWN0aW9u
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
VGFzay5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rp
bGVkTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaWxlZExheWVySW1wbC5oJywKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5jcHAJKHJldmlzaW9uIDky
OTU5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJl
YWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJDQ01h
aW5UaHJlYWQuaCIKIAorI2luY2x1ZGUgImNjL0NDVGhyZWFkUmVzdHJpY3Rpb24uaCIKICNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwpAQCAtMzMsNiAr
MzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgQ0NNYWluVGhyZWFkOjpwZXJmb3Jt
VGFzayh2b2lkKiB1c2VyZGF0YSkKIHsKKyAgICBDQ1RocmVhZFJlc3RyaWN0aW9uIG1vZGUoQ0NU
aHJlYWRSZXN0cmljdGlvbjo6UGFpbnQgfCBDQ1RocmVhZFJlc3RyaWN0aW9uOjpDb21taXQpOwog
ICAgIFRhc2sqIHRhc2sgPSBzdGF0aWNfY2FzdDxUYXNrKj4odXNlcmRhdGEpOwogICAgIHRhc2st
PnBlcmZvcm1UYXNrKCk7CiAgICAgZGVsZXRlIHRhc2s7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcAkocmV2aXNpb24gOTI5
NTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0ND
VGhyZWFkUmVzdHJpY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVz
Lmg+CkBAIC02NSw2ICs2Niw3IEBAIHZvaWQqIENDVGhyZWFkOjpjb21wb3NpdG9yVGhyZWFkU3Rh
cnQodm8KIAogdm9pZCogQ0NUaHJlYWQ6OnJ1bkxvb3AoKQogeworICAgIENDVGhyZWFkUmVzdHJp
Y3Rpb24gbW9kZShDQ1RocmVhZFJlc3RyaWN0aW9uOjpDb21taXQgfCBDQ1RocmVhZFJlc3RyaWN0
aW9uOjpVcGRhdGUpOwogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZDo6cnVuTG9vcCIsIHRoaXMs
IDApOwogICAgIHsKICAgICAgICAgLy8gV2FpdCBmb3IgQ0NUaHJlYWQ6OnN0YXJ0KCkgdG8gY29t
cGxldGUgdG8gaGF2ZSBtX3RocmVhZElECkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUmVzdHJpY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRSZXN0cmljdGlvbi5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkUmVzdHJpY3Rpb24uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDQ1RocmVhZFJlc3Ry
aWN0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3Rm
L1RocmVhZFNwZWNpZmljLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgeworCisvLyBUaHJlYWQtc3BlY2lmaWMgc3RvcmFnZSB3aXRoIGEgYml0bWFzayBvZiBtb2Rl
cyBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkLgorLy8gQmVjYXVzZSB0aGUgc3RvcmFnZSBkZWZhdWx0
cyB0byAwLCB3ZSBhY3R1YWxseSBzdG9yZSB0aGUgKmRpc2FsbG93ZWQqIG1vZGVzLgorV1RGOjpU
aHJlYWRTcGVjaWZpYzx1aW50MzJfdD4mIHRocmVhZFNwZWNpZmljQmFubmVkTW9kZXMoKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoV1RGOjpUaHJlYWRTcGVjaWZpYzx1aW50MzJfdD4sIGJh
bm5lZE1vZGVzLCAoKSk7CisgICAgcmV0dXJuIGJhbm5lZE1vZGVzOworfQorCit9CisKK3VpbnQz
Ml90IENDVGhyZWFkUmVzdHJpY3Rpb246OmdldFBlcm1pdHRlZCgpCit7CisgICAgcmV0dXJuIEFs
bCAmIH4oKnRocmVhZFNwZWNpZmljQmFubmVkTW9kZXMoKSk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRS
ZXN0cmljdGlvbjo6c2V0UGVybWl0dGVkKHVpbnQzMl90IG1vZGVzKQoreworICAgICp0aHJlYWRT
cGVjaWZpY0Jhbm5lZE1vZGVzKCkgPSB+bW9kZXM7Cit9CisKK0NDVGhyZWFkUmVzdHJpY3Rpb246
OkNDVGhyZWFkUmVzdHJpY3Rpb24odWludDMyX3QgbW9kZXMpCit7CisjaWZuZGVmIE5ERUJVRwor
ICAgIG1fb2xkTW9kZXMgPSBnZXRQZXJtaXR0ZWQoKTsKKyAgICBtX25ld01vZGVzID0gbW9kZXM7
CisgICAgQVNTRVJUKChtX25ld01vZGVzICYgfm1fb2xkTW9kZXMpID09IDApOworICAgIHNldFBl
cm1pdHRlZChtX25ld01vZGVzKTsKKyNlbmRpZgorfQorCitDQ1RocmVhZFJlc3RyaWN0aW9uOjp+
Q0NUaHJlYWRSZXN0cmljdGlvbigpCit7CisjaWZuZGVmIE5ERUJVRworICAgIEFTU0VSVChtX25l
d01vZGVzID09IGdldFBlcm1pdHRlZCgpKTsKKyAgICBzZXRQZXJtaXR0ZWQobV9vbGRNb2Rlcyk7
CisjZW5kaWYKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRSZXN0cmljdGlvbi5jcHAKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZFJlc3RyaWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFJlc3RyaWN0aW9uLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
UmVzdHJpY3Rpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBDQ1RocmVhZFJlc3RyaWN0aW9uX2gKKyNkZWZpbmUgQ0NUaHJlYWRSZXN0cmlj
dGlvbl9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorCisjZGVmaW5lIEFTU0VSVF9DQ19USFJFQURfTU9ERShtb2RlKSBBU1NFUlQo
MCA9PSAoKG1vZGUpICYgfjo6V2ViQ29yZTo6Q0NUaHJlYWRSZXN0cmljdGlvbjo6Z2V0UGVybWl0
dGVkKCkpKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoaXMgY2xhc3Mgc2hvdWxkIGJl
IHN0b3JlZCBvbiB0aGUgc3RhY2suIEFzc2VydHMgdGhhdCB3ZSBvbmx5IHVzZSB0aGUKKy8vIHBl
cm1pdHRlZCBtb2RlKHMpIG9uIHRoZSBjdXJyZW50IHRocmVhZCBmb3IgdGhlIGxpZmV0aW1lIG9m
IHRoaXMgb2JqZWN0LgorY2xhc3MgQ0NUaHJlYWRSZXN0cmljdGlvbiB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ0NUaHJlYWRSZXN0cmljdGlvbik7CitwdWJsaWM6CisgICAgZW51bSBNb2Rl
IHsKKyAgICAgIFBhaW50ICA9IDEgPDwgMCwKKyAgICAgIENvbW1pdCA9IDEgPDwgMSwKKyAgICAg
IFVwZGF0ZSA9IDEgPDwgMiwKKworICAgICAgQWxsID0gUGFpbnQgfCBDb21taXQgfCBVcGRhdGUs
IC8vIEluaXRpYWwgc3RhdGUgZm9yIG5ldyB0aHJlYWRzLgorICAgICAgTm9uZSA9IDAKKyAgICB9
OworCisgICAgLy8gR2V0IGEgYml0bWFzayBvZiBtb2RlcyB0aGF0IGFyZSBjdXJyZW50bHkgcGVy
bWl0dGVkIG9uIHRoaXMgdGhyZWFkLgorICAgIHN0YXRpYyB1aW50MzJfdCBnZXRQZXJtaXR0ZWQo
KTsKKworICAgIC8vIFNldCB0aGUgcGVybWl0dGVkIG1vZGUocykgZm9yIHRoaXMgdGhyZWFkLiBU
aGUgc2V0IG9mIG1vZGVzIG1heSBvbmx5IGJlCisgICAgLy8gcmVkdWNlZCwgbm90IHdpZGVuZWQu
CisgICAgZXhwbGljaXQgQ0NUaHJlYWRSZXN0cmljdGlvbih1aW50MzJfdCBtb2Rlcyk7CisKKyAg
ICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBzZXQgb2YgbW9kZXMgdGhhdCB3ZXJlIHBlcm1pdHRl
ZCBhdCBjb25zdHJ1Y3QgdGltZS4KKyAgICB+Q0NUaHJlYWRSZXN0cmljdGlvbigpOworCitwcml2
YXRlOgorICAgIHZvaWQgc2V0UGVybWl0dGVkKHVpbnQzMl90KTsKKworICAgIHVpbnQzMl90IG1f
b2xkTW9kZXM7CisgICAgdWludDMyX3QgbV9uZXdNb2RlczsKK307CisKK30KKworI2VuZGlmIC8v
IENDVGhyZWFkUmVzdHJpY3Rpb25faAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFJlc3RyaWN0aW9uLmgKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103820</attachid>
            <date>2011-08-12 14:52:10 -0700</date>
            <delta_ts>2011-08-12 16:15:09 -0700</delta_ts>
            <desc>isCCThread() and ScopedFakeCompositorThread</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>11401</size>
            <attacher name="Iain Merrick">husky</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXll
ckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCShyZXZpc2lvbiA5Mjk1OSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0ND
VGhyZWFkLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTQ5LDYgKzUwLDcgQEAgQ0NDYW52YXNMYXllckltcGw6On5DQ0NhbnZhc0xh
eWVySW1wbCgpCiAKIHZvaWQgQ0NDYW52YXNMYXllckltcGw6OmRyYXcoKQogeworICAgIEFTU0VS
VChpc0NDVGhyZWFkKCkpOwogICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwogICAgIGNvbnN0
IENDQ2FudmFzTGF5ZXJJbXBsOjpQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigpLT5j
YW52YXNMYXllclByb2dyYW0oKTsKICAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0
aWFsaXplZCgpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAJKHJldmlzaW9uIDkyOTU5KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiVHJhY2VFdmVudC5o
IgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIgogI2luY2x1ZGUgImNj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTIyMiw2ICsyMjMsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6ZG9Db21wb3NpdGUoKQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlKGJvb2wg
ZmluaXNoKQogeworICAgIFNjb3BlZEZha2VDb21wb3NpdG9yVGhyZWFkIGZha2VUaHJlYWQ7CiAg
ICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlIiwgdGhpcywgMCk7CiAK
ICAgICBpZiAobV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0KSB7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5jcHAJKHJldmlzaW9uIDkyOTU5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1
ZGUgImNjL0NDTWFpblRocmVhZC5oIgogI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIK
KyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgogI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgog
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCkBAIC03MCw2ICs3MSw4IEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxldGUKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpkcmF3TGF5ZXJzKCkKIHsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKwogICAgIC8v
IElmIGEgY29tbWl0IGlzIHBlbmRpbmcsIGRvIG5vdCBkcmF3LiBUaGlzIGlzIGEgdGVtcG9yYXJ5
IHJlc3RyaWN0aW9uIHRoYXQKICAgICAvLyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBkcmF3TGF5ZXJz
IGlzIGN1cnJlbnRseSBhIGJsb2NraW5nIG9wZXJhdGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQuCiAg
ICAgaWYgKG1fY29tbWl0UGVuZGluZykKQEAgLTExOSwxNSArMTIyLDE3IEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
ZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9v
bCogY29udGV4dExvc3QpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlm
IChtX2xheWVyUmVuZGVyZXItPm93bmVyKCktPnJvb3RMYXllcigpKSB7Ci0gICAgICAgIG1fbGF5
ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOwotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNl
bnQoKTsKLQotICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fbGF5ZXJSZW5k
ZXJlci0+Y29udGV4dCgpOwotICAgICAgICAqY29udGV4dExvc3QgPSBjb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAhPSBHcmFwaGljc0NvbnRleHQz
RDo6Tk9fRVJST1I7Ci0gICAgfSBlbHNlCi0gICAgICAgICpjb250ZXh0TG9zdCA9IGZhbHNlOwor
ICAgIHsKKyAgICAgICAgU2NvcGVkRmFrZUNvbXBvc2l0b3JUaHJlYWQgZmFrZVRocmVhZDsKKyAg
ICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+b3duZXIoKS0+cm9vdExheWVyKCkpIHsKKyAgICAg
ICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOworICAgICAgICAgICAgbV9sYXll
clJlbmRlcmVyLT5wcmVzZW50KCk7CisKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0ID0gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7CisgICAgICAgICAgICAqY29udGV4
dExvc3QgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNB
UkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgKmNvbnRleHRMb3N0ID0gZmFsc2U7CisgICAgfQogICAgIGNvbXBsZXRpb24tPnNp
Z25hbCgpOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwCShy
ZXZpc2lvbiA5Mjk1OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDE2ICsx
MjQsNiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyCiAgICAgICAg
IENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0LCBmcmFtZUJlZ2luVGlt
ZSkpOwogfQogCi1ib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNNYWluVGhyZWFkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gOjppc01haW5UaHJlYWQoKTsKLX0KLQotYm9vbCBDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OmlzQ0NUaHJlYWQoKSBjb25zdAotewotICAgIHJldHVybiBjdXJy
ZW50VGhyZWFkKCkgPT0gY2NUaHJlYWQtPnRocmVhZElEKCk7Ci19Ci0KIHZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5U
aW1lKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5LmgJKHJldmlzaW9uIDkyOTU5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtNTcsOSArNTcsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgQ0NMYXllclRyZWVIb3N0KiBo
b3N0KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclRyZWVIb3N0OyB9CiAKIHByaXZhdGU6Ci0gICAg
Ym9vbCBpc01haW5UaHJlYWQoKSBjb25zdDsKLSAgICBib29sIGlzQ0NUaHJlYWQoKSBjb25zdDsK
LQogICAgIC8vIENhbGxlZCBvbiBDQ01haW5UaHJlYWQKICAgICB2b2lkIHJlcXVlc3RGcmFtZUFu
ZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBs
LmNwcAkocmV2aXNpb24gOTI5NTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEs
NyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJl
bmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Nyw2ICs0OCw3
IEBAIENDUGx1Z2luTGF5ZXJJbXBsOjp+Q0NQbHVnaW5MYXllckltcGwoKQogCiB2b2lkIENDUGx1
Z2luTGF5ZXJJbXBsOjpkcmF3KCkKIHsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKICAgICBB
U1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKICAgICBjb25zdCBDQ1BsdWdpbkxheWVySW1wbDo6UHJv
Z3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+cGx1Z2luTGF5ZXJQcm9ncmFtKCk7CiAg
ICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcAko
cmV2aXNpb24gOTI5NTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksOSArMjksMTQgQEAKICNpbmNsdWRl
ICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRp
dmVzLmg+CiAKK25hbWVzcGFjZSB7CitXVEY6OlRocmVhZElkZW50aWZpZXIgY2NUaHJlYWRJRDsK
K30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwpAQCAtMzks
NyArNDQsOCBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogQ0NUaHJlYWQ6OkNDVGhyZWFkKCkKIHsK
ICAgICBNdXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7Ci0gICAgbV90aHJl
YWRJRCA9IGNyZWF0ZVRocmVhZChDQ1RocmVhZDo6Y29tcG9zaXRvclRocmVhZFN0YXJ0LCB0aGlz
LCAiQ2hyb21pdW0gQ29tcG9zaXRvciIpOworICAgIEFTU0VSVChjY1RocmVhZElEID09IDApOwor
ICAgIGNjVGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoQ0NUaHJlYWQ6OmNvbXBvc2l0b3JUaHJlYWRT
dGFydCwgdGhpcywgIkNocm9taXVtIENvbXBvc2l0b3IiKTsKIH0KIAogQ0NUaHJlYWQ6On5DQ1Ro
cmVhZCgpCkBAIC00OCw4ICs1NCw4IEBAIENDVGhyZWFkOjp+Q0NUaHJlYWQoKQogCiAgICAgLy8g
U3RvcCB0aHJlYWQuCiAgICAgdm9pZCogZXhpdENvZGU7Ci0gICAgd2FpdEZvclRocmVhZENvbXBs
ZXRpb24obV90aHJlYWRJRCwgJmV4aXRDb2RlKTsKLSAgICBtX3RocmVhZElEID0gMDsKKyAgICB3
YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihjY1RocmVhZElELCAmZXhpdENvZGUpOworICAgIGNjVGhy
ZWFkSUQgPSAwOwogfQogCiB2b2lkIENDVGhyZWFkOjpwb3N0VGFzayhQYXNzT3duUHRyPFRhc2s+
IHRhc2spCkBAIC01Nyw2ICs2MywxMSBAQCB2b2lkIENDVGhyZWFkOjpwb3N0VGFzayhQYXNzT3du
UHRyPFRhc2s+CiAgICAgbV9xdWV1ZS5hcHBlbmQodGFzayk7CiB9CiAKK1dURjo6VGhyZWFkSWRl
bnRpZmllciBDQ1RocmVhZDo6dGhyZWFkSUQoKSBjb25zdAoreworICAgIHJldHVybiBjY1RocmVh
ZElEOworfQorCiB2b2lkKiBDQ1RocmVhZDo6Y29tcG9zaXRvclRocmVhZFN0YXJ0KHZvaWQqIHVz
ZXJkYXRhKQogewogICAgIENDVGhyZWFkKiBjY1RocmVhZCA9IHN0YXRpY19jYXN0PENDVGhyZWFk
Kj4odXNlcmRhdGEpOwpAQCAtNzgsNCArODksMzEgQEAgdm9pZCogQ0NUaHJlYWQ6OnJ1bkxvb3Ao
KQogICAgIHJldHVybiAwOwogfQogCisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorCiti
b29sIGlzQ0NUaHJlYWQoKQoreworICAgIHJldHVybiBjY1RocmVhZElEICYmIChjdXJyZW50VGhy
ZWFkKCkgPT0gY2NUaHJlYWRJRCk7Cit9CisKKyNlbHNlCisKK25hbWVzcGFjZSB7Citib29sIGZh
a2VDQ1RocmVhZDsKK30KKworYm9vbCBpc0NDVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIHJldHVybiBmYWtlQ0NUaHJlYWQ7Cit9CisKK3ZvaWQgU2NvcGVkRmFr
ZUNvbXBvc2l0b3JUaHJlYWQ6OnNldENDVGhyZWFkKGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBmYWtlQ0NUaHJlYWQgPSB2YWx1ZTsKK30KKworI2VuZGlm
CisKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJl
YWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkLmgJKHJldmlzaW9uIDkyOTU5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw5IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gVHJ1ZSBpZiB3ZSdyZSBvbiB0aGUgY29tcG9z
aXRvciB0aHJlYWQuCitib29sIGlzQ0NUaHJlYWQoKTsKKwogLy8gVGhlIENDVGhyZWFkIHNpbmds
ZXRvbiBvd25zIHRoZSBjb21wb3NpdG9yIHRocmVhZCBhbmQgcHJvdmlkZXMKIC8vIGJhc2ljIGlu
ZnJhc3RydWN0dXJlIGZvciBtZXNzYWdpbmcgYmV0d2VlbiB0aGUgdHdvIHRocmVhZHMuCiBjbGFz
cyBDQ1RocmVhZCB7CkBAIC01Niw3ICs1OSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcG9zdFRh
c2soUGFzc093blB0cjxUYXNrPik7IC8vIEV4ZWN1dGVzIHRoZSB0YXNrIG9uIGNvbnRleHQncyB0
aHJlYWQgYXN5bmNocm9ub3VzbHkuCiAKLSAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgdGhyZWFk
SUQoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZElEOyB9CisgICAgV1RGOjpUaHJlYWRJZGVudGlm
aWVyIHRocmVhZElEKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDQ1RocmVh
ZCgpOwpAQCAtNjQsMTIgKzY3LDQ3IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCogY29t
cG9zaXRvclRocmVhZFN0YXJ0KHZvaWQqKTsKICAgICB2b2lkKiBydW5Mb29wKCk7CiAKLSAgICBX
VEY6OlRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKICAgICBNZXNzYWdlUXVldWU8VGFzaz4g
bV9xdWV1ZTsKIAogICAgIE11dGV4IG1fdGhyZWFkQ3JlYXRpb25NdXRleDsKIH07CiAKKy8vIFBy
ZXRlbmQgdGhhdCB3ZSdyZSBvbiB0aGUgY29tcG9zaXRvciB0aHJlYWQgZm9yIHRoZSBsaWZldGlt
ZSBvZiB0aGlzIG9iamVjdC4KKy8vIFVzZSB0aGlzIHRvIG1ha2UgQVNTRVJUKGlzQ0NUaHJlYWQo
KSkgZG8gdGhlIHJpZ2h0IHRoaW5nIGV2ZW4gd2hlbiB0aHJlYWRlZAorLy8gY29tcG9zaXRpbmcg
aXMgZGlzYWJsZWQuCisvLyBUT0RPOiBSZW1vdmUgdGhpcyB3aGVuIGFsbCB0aGUgdGhyZWFkZWQg
Y29tcG9zaXRpbmcgd29yayBpcyBjb21wbGV0ZS4KK2NsYXNzIFNjb3BlZEZha2VDb21wb3NpdG9y
VGhyZWFkIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY29wZWRGYWtlQ29tcG9zaXRvclRo
cmVhZCk7CitwdWJsaWM6CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIFNjb3Bl
ZEZha2VDb21wb3NpdG9yVGhyZWFkKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0NDVGhyZWFk
KCkpOworICAgIH0KKworICAgIH5TY29wZWRGYWtlQ21vcG9zaXRvclRocmVhZCgpCisgICAgewor
ICAgICAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICB9CisjZWxzZQorICAgIFNjb3BlZEZh
a2VDb21wb3NpdG9yVGhyZWFkKCkKKyAgICB7CisgICAgICAgIG1fcHJldmlvdXMgPSBpc0NDVGhy
ZWFkKCk7CisgICAgICAgIHNldENDVGhyZWFkKHRydWUpOworICAgIH0KKworICAgIH5TY29wZWRG
YWtlQ29tcG9zaXRvclRocmVhZCgpCisgICAgeworICAgICAgICBzZXRDQ1RocmVhZChtX3ByZXZp
b3VzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgc2V0Q0NUaHJlYWQoYm9v
bCk7CisKKyAgICBib29sIG1fcHJldmlvdXM7CisjZW5kaWYKK307CisKIH0KIAogI2VuZGlmCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllcklt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5jcHAJKHJldmlzaW9uIDkyOTU5KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgImNjL0NDVGlsZWRMYXllckltcGwuaCIK
IAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotCisjaW5jbHVkZSAiY2MvQ0NU
aHJlYWQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDksNiArNDksNyBAQCBDQ1RpbGVkTGF5ZXJJbXBsOjp+Q0NUaWxlZExheWVy
SW1wbCgpCiAKIHZvaWQgQ0NUaWxlZExheWVySW1wbDo6ZHJhdygpCiB7CisgICAgQVNTRVJUKGlz
Q0NUaHJlYWQoKSk7CiAgICAgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVy
UmVjdCgpOwogICAgIGlmICghbGF5ZXJSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgbV90aWxlci0+
ZHJhdyhsYXllclJlY3QsIG1fdGlsaW5nVHJhbnNmb3JtLCBkcmF3T3BhY2l0eSgpKTsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ZpZGVvTGF5ZXJJbXBsLmNwcAkocmV2aXNpb24gOTI5NTkpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJWaWRlb0xheWVyQ2hyb21pdW0u
aCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03Nyw2ICs3OCw3IEBAIHZvaWQgQ0NWaWRl
b0xheWVySW1wbDo6c2V0VGV4dHVyZShzaXplX3QKIAogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpk
cmF3KCkKIHsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKICAgICBpZiAobV9za2lwc0RyYXcp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMTAzLDYgKzEwNSw3IEBAIHZvaWQgQ0NWaWRlb0xheWVy
SW1wbDo6ZHJhdygpCiAKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd1lVVihjb25zdCBDQ1Zp
ZGVvTGF5ZXJJbXBsOjpZVVZQcm9ncmFtKiBwcm9ncmFtKSBjb25zdAogeworICAgIEFTU0VSVChp
c0NDVGhyZWFkKCkpOwogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5k
ZXJlcigpLT5jb250ZXh0KCk7CiAgICAgVmlkZW9MYXllckNocm9taXVtOjpUZXh0dXJlIHlUZXh0
dXJlID0gbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnlQbGFuZV07CiAgICAgVmlkZW9M
YXllckNocm9taXVtOjpUZXh0dXJlIHVUZXh0dXJlID0gbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hy
b21pdW06OnVQbGFuZV07CkBAIC0xNDEsNiArMTQ0LDcgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBs
OjpkcmF3WVVWKGNvbnN0IENDVgogCiB2b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdSR0JBKGNv
bnN0IENDVmlkZW9MYXllckltcGw6OlJHQkFQcm9ncmFtKiBwcm9ncmFtKSBjb25zdAogeworICAg
IEFTU0VSVChpc0NDVGhyZWFkKCkpOwogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0g
bGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCk7CiAgICAgVmlkZW9MYXllckNocm9taXVtOjpUZXh0
dXJlIHRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6cmdiUGxhbmVdOwog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103838</attachid>
            <date>2011-08-12 16:15:09 -0700</date>
            <delta_ts>2011-08-17 11:33:45 -0700</delta_ts>
            <desc>Cleanup. Don&apos;t declare ScopedFakeCompositorThread if THREADED_COMPOSITOR is enabled.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>11262</size>
            <attacher name="Iain Merrick">husky</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXll
ckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCShyZXZpc2lvbiA5Mjk1OSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0ND
VGhyZWFkLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTQ5LDYgKzUwLDcgQEAgQ0NDYW52YXNMYXllckltcGw6On5DQ0NhbnZhc0xh
eWVySW1wbCgpCiAKIHZvaWQgQ0NDYW52YXNMYXllckltcGw6OmRyYXcoKQogeworICAgIEFTU0VS
VChpc0NDVGhyZWFkKCkpOwogICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwogICAgIGNvbnN0
IENDQ2FudmFzTGF5ZXJJbXBsOjpQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigpLT5j
YW52YXNMYXllclByb2dyYW0oKTsKICAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0
aWFsaXplZCgpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAJKHJldmlzaW9uIDkyOTU5KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiVHJhY2VFdmVudC5o
IgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIgogI2luY2x1ZGUgImNj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTIyMiw2ICsyMjMsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6ZG9Db21wb3NpdGUoKQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlKGJvb2wg
ZmluaXNoKQogeworICAgIFNjb3BlZEZha2VDb21wb3NpdG9yVGhyZWFkIGZha2VUaHJlYWQ7CiAg
ICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlIiwgdGhpcywgMCk7CiAK
ICAgICBpZiAobV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0KSB7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5jcHAJKHJldmlzaW9uIDkyOTU5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1
ZGUgImNjL0NDTWFpblRocmVhZC5oIgogI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIK
KyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgogI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgog
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCkBAIC03MCw2ICs3MSw4IEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxldGUKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpkcmF3TGF5ZXJzKCkKIHsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKwogICAgIC8v
IElmIGEgY29tbWl0IGlzIHBlbmRpbmcsIGRvIG5vdCBkcmF3LiBUaGlzIGlzIGEgdGVtcG9yYXJ5
IHJlc3RyaWN0aW9uIHRoYXQKICAgICAvLyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBkcmF3TGF5ZXJz
IGlzIGN1cnJlbnRseSBhIGJsb2NraW5nIG9wZXJhdGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQuCiAg
ICAgaWYgKG1fY29tbWl0UGVuZGluZykKQEAgLTExOSwxNSArMTIyLDE3IEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
ZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9v
bCogY29udGV4dExvc3QpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlm
IChtX2xheWVyUmVuZGVyZXItPm93bmVyKCktPnJvb3RMYXllcigpKSB7Ci0gICAgICAgIG1fbGF5
ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOwotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNl
bnQoKTsKLQotICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fbGF5ZXJSZW5k
ZXJlci0+Y29udGV4dCgpOwotICAgICAgICAqY29udGV4dExvc3QgPSBjb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAhPSBHcmFwaGljc0NvbnRleHQz
RDo6Tk9fRVJST1I7Ci0gICAgfSBlbHNlCi0gICAgICAgICpjb250ZXh0TG9zdCA9IGZhbHNlOwor
ICAgIHsKKyAgICAgICAgU2NvcGVkRmFrZUNvbXBvc2l0b3JUaHJlYWQgZmFrZVRocmVhZDsKKyAg
ICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+b3duZXIoKS0+cm9vdExheWVyKCkpIHsKKyAgICAg
ICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOworICAgICAgICAgICAgbV9sYXll
clJlbmRlcmVyLT5wcmVzZW50KCk7CisKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0ID0gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7CisgICAgICAgICAgICAqY29udGV4
dExvc3QgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNB
UkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgKmNvbnRleHRMb3N0ID0gZmFsc2U7CisgICAgfQogICAgIGNvbXBsZXRpb24tPnNp
Z25hbCgpOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwCShy
ZXZpc2lvbiA5Mjk1OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDE2ICsx
MjQsNiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyCiAgICAgICAg
IENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0LCBmcmFtZUJlZ2luVGlt
ZSkpOwogfQogCi1ib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNNYWluVGhyZWFkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gOjppc01haW5UaHJlYWQoKTsKLX0KLQotYm9vbCBDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OmlzQ0NUaHJlYWQoKSBjb25zdAotewotICAgIHJldHVybiBjdXJy
ZW50VGhyZWFkKCkgPT0gY2NUaHJlYWQtPnRocmVhZElEKCk7Ci19Ci0KIHZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5U
aW1lKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5LmgJKHJldmlzaW9uIDkyOTU5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtNTcsOSArNTcsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgQ0NMYXllclRyZWVIb3N0KiBo
b3N0KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclRyZWVIb3N0OyB9CiAKIHByaXZhdGU6Ci0gICAg
Ym9vbCBpc01haW5UaHJlYWQoKSBjb25zdDsKLSAgICBib29sIGlzQ0NUaHJlYWQoKSBjb25zdDsK
LQogICAgIC8vIENhbGxlZCBvbiBDQ01haW5UaHJlYWQKICAgICB2b2lkIHJlcXVlc3RGcmFtZUFu
ZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBs
LmNwcAkocmV2aXNpb24gOTI5NTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEs
NyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJl
bmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Nyw2ICs0OCw3
IEBAIENDUGx1Z2luTGF5ZXJJbXBsOjp+Q0NQbHVnaW5MYXllckltcGwoKQogCiB2b2lkIENDUGx1
Z2luTGF5ZXJJbXBsOjpkcmF3KCkKIHsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKICAgICBB
U1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKICAgICBjb25zdCBDQ1BsdWdpbkxheWVySW1wbDo6UHJv
Z3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+cGx1Z2luTGF5ZXJQcm9ncmFtKCk7CiAg
ICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcAko
cmV2aXNpb24gOTI5NTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIgKzI2LDE2IEBACiAKICNpbmNs
dWRlICJDQ1RocmVhZC5oIgogCi0jaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAj
aW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogCituYW1lc3BhY2UgeworV1RGOjpU
aHJlYWRJZGVudGlmaWVyIGNjVGhyZWFkSUQ7Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIFdURjsKQEAgLTM5LDcgKzQzLDggQEAgdXNpbmcgbmFtZXNwYWNlIFdU
RjsKIENDVGhyZWFkOjpDQ1RocmVhZCgpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3RocmVh
ZENyZWF0aW9uTXV0ZXgpOwotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoQ0NUaHJlYWQ6
OmNvbXBvc2l0b3JUaHJlYWRTdGFydCwgdGhpcywgIkNocm9taXVtIENvbXBvc2l0b3IiKTsKKyAg
ICBBU1NFUlQoY2NUaHJlYWRJRCA9PSAwKTsKKyAgICBjY1RocmVhZElEID0gY3JlYXRlVGhyZWFk
KENDVGhyZWFkOjpjb21wb3NpdG9yVGhyZWFkU3RhcnQsIHRoaXMsICJDaHJvbWl1bSBDb21wb3Np
dG9yIik7CiB9CiAKIENDVGhyZWFkOjp+Q0NUaHJlYWQoKQpAQCAtNDgsOCArNTMsOCBAQCBDQ1Ro
cmVhZDo6fkNDVGhyZWFkKCkKIAogICAgIC8vIFN0b3AgdGhyZWFkLgogICAgIHZvaWQqIGV4aXRD
b2RlOwotICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSUQsICZleGl0Q29kZSk7
Ci0gICAgbV90aHJlYWRJRCA9IDA7CisgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24oY2NUaHJl
YWRJRCwgJmV4aXRDb2RlKTsKKyAgICBjY1RocmVhZElEID0gMDsKIH0KIAogdm9pZCBDQ1RocmVh
ZDo6cG9zdFRhc2soUGFzc093blB0cjxUYXNrPiB0YXNrKQpAQCAtNTcsNiArNjIsMTEgQEAgdm9p
ZCBDQ1RocmVhZDo6cG9zdFRhc2soUGFzc093blB0cjxUYXNrPgogICAgIG1fcXVldWUuYXBwZW5k
KHRhc2spOwogfQogCitXVEY6OlRocmVhZElkZW50aWZpZXIgQ0NUaHJlYWQ6OnRocmVhZElEKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gY2NUaHJlYWRJRDsKK30KKwogdm9pZCogQ0NUaHJlYWQ6OmNv
bXBvc2l0b3JUaHJlYWRTdGFydCh2b2lkKiB1c2VyZGF0YSkKIHsKICAgICBDQ1RocmVhZCogY2NU
aHJlYWQgPSBzdGF0aWNfY2FzdDxDQ1RocmVhZCo+KHVzZXJkYXRhKTsKQEAgLTc4LDQgKzg4LDMx
IEBAIHZvaWQqIENDVGhyZWFkOjpydW5Mb29wKCkKICAgICByZXR1cm4gMDsKIH0KIAorI2lmIFVT
RShUSFJFQURFRF9DT01QT1NJVElORykKKworYm9vbCBpc0NDVGhyZWFkKCkKK3sKKyAgICByZXR1
cm4gY2NUaHJlYWRJRCAmJiAoY3VycmVudFRocmVhZCgpID09IGNjVGhyZWFkSUQpOworfQorCisj
ZWxzZQorCituYW1lc3BhY2UgeworYm9vbCBmYWtlQ0NUaHJlYWQ7Cit9CisKK2Jvb2wgaXNDQ1Ro
cmVhZCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICByZXR1cm4gZmFrZUND
VGhyZWFkOworfQorCit2b2lkIFNjb3BlZEZha2VDb21wb3NpdG9yVGhyZWFkOjpzZXRDQ1RocmVh
ZChib29sIHZhbHVlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgZmFrZUND
VGhyZWFkID0gdmFsdWU7Cit9CisKKyNlbmRpZgorCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oCShyZXZpc2lvbiA5Mjk1OSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8v
IFRydWUgaWYgd2UncmUgb24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgorYm9vbCBpc0NDVGhyZWFk
KCk7CisKIC8vIFRoZSBDQ1RocmVhZCBzaW5nbGV0b24gb3ducyB0aGUgY29tcG9zaXRvciB0aHJl
YWQgYW5kIHByb3ZpZGVzCiAvLyBiYXNpYyBpbmZyYXN0cnVjdHVyZSBmb3IgbWVzc2FnaW5nIGJl
dHdlZW4gdGhlIHR3byB0aHJlYWRzLgogY2xhc3MgQ0NUaHJlYWQgewpAQCAtNTYsNyArNTksNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHBvc3RUYXNrKFBhc3NPd25QdHI8VGFzaz4pOyAvLyBFeGVj
dXRlcyB0aGUgdGFzayBvbiBjb250ZXh0J3MgdGhyZWFkIGFzeW5jaHJvbm91c2x5LgogCi0gICAg
V1RGOjpUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCkgY29uc3QgeyByZXR1cm4gbV90aHJlYWRJ
RDsgfQorICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0OwogCiBwcm90
ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ0NUaHJlYWQoKTsKQEAgLTY0LDEyICs2NywzNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQqIGNvbXBvc2l0b3JUaHJlYWRTdGFydCh2b2lkKik7CiAg
ICAgdm9pZCogcnVuTG9vcCgpOwogCi0gICAgV1RGOjpUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFk
SUQ7CiAgICAgTWVzc2FnZVF1ZXVlPFRhc2s+IG1fcXVldWU7CiAKICAgICBNdXRleCBtX3RocmVh
ZENyZWF0aW9uTXV0ZXg7CiB9OwogCisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKy8v
IFByZXRlbmQgdGhhdCB3ZSdyZSBvbiB0aGUgY29tcG9zaXRvciB0aHJlYWQgZm9yIHRoZSBsaWZl
dGltZSBvZiB0aGlzIG9iamVjdC4KKy8vIFVzZSB0aGlzIHRvIG1ha2UgQVNTRVJUKGlzQ0NUaHJl
YWQoKSkgZG8gdGhlIHJpZ2h0IHRoaW5nIGV2ZW4gd2hlbiB0aHJlYWRlZAorLy8gY29tcG9zaXRp
bmcgaXMgZGlzYWJsZWQuCisvLyBUT0RPOiBSZW1vdmUgdGhpcyB3aGVuIGFsbCB0aGUgdGhyZWFk
ZWQgY29tcG9zaXRpbmcgd29yayBpcyBjb21wbGV0ZS4KK2NsYXNzIFNjb3BlZEZha2VDb21wb3Np
dG9yVGhyZWFkIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY29wZWRGYWtlQ29tcG9zaXRv
clRocmVhZCk7CitwdWJsaWM6CisgICAgU2NvcGVkRmFrZUNvbXBvc2l0b3JUaHJlYWQoKQorICAg
IHsKKyAgICAgICAgbV9wcmV2aW91cyA9IGlzQ0NUaHJlYWQoKTsKKyAgICAgICAgc2V0Q0NUaHJl
YWQodHJ1ZSk7CisgICAgfQorCisgICAgflNjb3BlZEZha2VDb21wb3NpdG9yVGhyZWFkKCkKKyAg
ICB7CisgICAgICAgIHNldENDVGhyZWFkKG1fcHJldmlvdXMpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBzdGF0aWMgdm9pZCBzZXRDQ1RocmVhZChib29sKTsKKworICAgIGJvb2wgbV9wcmV2aW91
czsKK307CisjZW5kaWYKKwogfQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAko
cmV2aXNpb24gOTI5NTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGlsZWRMYXllckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAj
aW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5oIgogCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgiCi0KKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00OSw2ICs0OSw3IEBA
IENDVGlsZWRMYXllckltcGw6On5DQ1RpbGVkTGF5ZXJJbXBsKCkKIAogdm9pZCBDQ1RpbGVkTGF5
ZXJJbXBsOjpkcmF3KCkKIHsKKyAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKICAgICBjb25zdCBJ
bnRSZWN0JiBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CiAgICAgaWYgKCFsYXllclJl
Y3QuaXNFbXB0eSgpKQogICAgICAgICBtX3RpbGVyLT5kcmF3KGxheWVyUmVjdCwgbV90aWxpbmdU
cmFuc2Zvcm0sIGRyYXdPcGFjaXR5KCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCShyZXZp
c2lvbiA5Mjk1OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NW
aWRlb0xheWVySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNs
dWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFk
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTc3LDYgKzc4LDcgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpzZXRUZXh0dXJlKHNp
emVfdAogCiB2b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXcoKQogeworICAgIEFTU0VSVChpc0ND
VGhyZWFkKCkpOwogICAgIGlmIChtX3NraXBzRHJhdykKICAgICAgICAgcmV0dXJuOwogCkBAIC0x
MDMsNiArMTA1LDcgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KCkKIAogdm9pZCBDQ1Zp
ZGVvTGF5ZXJJbXBsOjpkcmF3WVVWKGNvbnN0IENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0q
IHByb2dyYW0pIGNvbnN0CiB7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CiAgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyKCktPmNvbnRleHQoKTsKICAgICBW
aWRlb0xheWVyQ2hyb21pdW06OlRleHR1cmUgeVRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJh
bWVDaHJvbWl1bTo6eVBsYW5lXTsKICAgICBWaWRlb0xheWVyQ2hyb21pdW06OlRleHR1cmUgdVRl
eHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6dVBsYW5lXTsKQEAgLTE0MSw2
ICsxNDQsNyBAQCB2b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdZVVYoY29uc3QgQ0NWCiAKIHZv
aWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd1JHQkEoY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6UkdC
QVByb2dyYW0qIHByb2dyYW0pIGNvbnN0CiB7CisgICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CiAg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyKCktPmNvbnRleHQo
KTsKICAgICBWaWRlb0xheWVyQ2hyb21pdW06OlRleHR1cmUgdGV4dHVyZSA9IG1fdGV4dHVyZXNb
VmlkZW9GcmFtZUNocm9taXVtOjpyZ2JQbGFuZV07CiAK
</data>
<flag name="review"
          id="99864"
          type_id="1"
          status="-"
          setter="jamesr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104202</attachid>
            <date>2011-08-17 11:33:45 -0700</date>
            <delta_ts>2011-08-17 14:32:06 -0700</delta_ts>
            <desc>Moved isCCThread to CCLayerTreeHostImplProxy::isImplThread</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>8772</size>
            <attacher name="Iain Merrick">husky</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAJKHJldmlzaW9uIDkzMjA0KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTMsNiArMjEzLDkgQEAKICNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQog
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRvQ29tcG9zaXRlKCkKIHsKKyNpZm5kZWYgTkRFQlVHCisg
ICAgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpTY29wZWRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7
CisjZW5kaWYKICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKICAgICBtX2xheWVyUmVuZGVy
ZXItPnVwZGF0ZUxheWVycygpOwogICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVy
SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAJKHJldmlzaW9uIDkzMjA0KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ3LDYgKzQ4LDcgQEAKIAogdm9pZCBDQ1BsdWdp
bkxheWVySW1wbDo6ZHJhdygpCiB7CisgICAgQVNTRVJUKENDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwogICAgIGNv
bnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigp
LT5wbHVnaW5MYXllclByb2dyYW0oKTsKICAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5p
bml0aWFsaXplZCgpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaAkocmV2
aXNpb24gOTMyMDQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNSArNTEsMzAg
QEAKICAgICB2aXJ0dWFsIHZvaWQgcG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpOwogICAg
IHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBmcmFt
ZUJlZ2luVGltZSk7CiAKKyAgICBzdGF0aWMgYm9vbCBpc01haW5UaHJlYWQoKTsKKyAgICBzdGF0
aWMgYm9vbCBpc0ltcGxUaHJlYWQoKTsKKworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcp
ICYmICFkZWZpbmVkKE5ERUJVRykKKyAgICAvLyBQcmV0ZW5kIHRoYXQgd2UncmUgb24gdGhlIGlt
cGwgdGhyZWFkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhpcyBvYmplY3QuCisgICAgLy8gVXNlIHRo
aXMgdG8gbWFrZSBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpIHZhbGlkIHdoZW4gd2UncmUgbm90IHRo
cmVhZGVkLgorICAgIC8vIFRPRE86IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSBpcyBnb2luZyB0
byBiZSBzcGxpdCBpbnRvIHR3byBjbGFzc2VzLCBvbmUKKyAgICAvLyB0aHJlYWRlZCBhbmQgb25l
IHVudGhyZWFkZWQuIE1vdmUgdGhpcyBmZWF0dXJlIHRvIHRoZSB1bnRocmVhZGVkIGNsYXNzLgor
ICAgIGNsYXNzIFNjb3BlZEltcGxUaHJlYWQgeworICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFNjb3BlZEltcGxUaHJlYWQpOworICAgIHB1YmxpYzoKKyAgICAgICBTY29wZWRJbXBsVGhyZWFk
KCk7CisgICAgICAgflNjb3BlZEltcGxUaHJlYWQoKTsKKyAgICBwcml2YXRlOgorICAgICAgIGJv
b2wgbV9wcmV2aW91czsKKyAgICB9OworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBleHBsaWNp
dCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoQ0NMYXllclRyZWVIb3N0Kik7CiAgICAgdmlydHVh
bCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBs
KCkgPSAwOwogICAgIENDTGF5ZXJUcmVlSG9zdCogaG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5
ZXJUcmVlSG9zdDsgfQogCiBwcml2YXRlOgotICAgIGJvb2wgaXNNYWluVGhyZWFkKCkgY29uc3Q7
Ci0gICAgYm9vbCBpc0NDVGhyZWFkKCkgY29uc3Q7Ci0KICAgICAvLyBDYWxsZWQgb24gQ0NNYWlu
VGhyZWFkCiAgICAgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5U
aW1lKTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZGVvTGF5ZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCShyZXZpc2lvbiA5MzIwNCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJMYXllclJlbmRlcmVy
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlZpZGVv
TGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC03Nyw2ICs3OCw4IEBACiAKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhdygpCiB7Cisg
ICAgQVNTRVJUKENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworCiAg
ICAgaWYgKG1fc2tpcHNEcmF3KQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXll
ckltcGwuY3BwCShyZXZpc2lvbiA5MzIwNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC00OSw2ICs1MCw3IEBACiAKIHZvaWQgQ0NDYW52YXNMYXllckltcGw6OmRyYXco
KQogeworICAgIEFTU0VSVChDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzSW1wbFRocmVhZCgp
KTsKICAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKICAgICBjb25zdCBDQ0NhbnZhc0xheWVy
SW1wbDo6UHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+Y2FudmFzTGF5ZXJQcm9n
cmFtKCk7CiAgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwCShyZXZpc2lvbiA5MzIwNCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBACiAKIHZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCkK
IHsKLSAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkp
OwogICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsKQogICAgICAgICBjY1RocmVhZC0+cG9zdFRh
c2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRy
YXdMYXllcnNPbkNDVGhyZWFkKSk7CiB9CkBAIC0xMTksMjEgKzExOSw0NyBAQAogdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoZG91
YmxlIGZyYW1lQmVnaW5UaW1lKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAg
ICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwogICAg
IGlmIChtX2xheWVyVHJlZUhvc3RJbXBsKQogICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNr
KGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJl
cXVlc3RGcmFtZUFuZENvbW1pdCwgZnJhbWVCZWdpblRpbWUpKTsKIH0KIAotYm9vbCBDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OmlzTWFpblRocmVhZCgpIGNvbnN0Citib29sIENDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6aXNNYWluVGhyZWFkKCkKIHsKICAgICByZXR1cm4gOjppc01haW5UaHJl
YWQoKTsKIH0KIAotYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzQ0NUaHJlYWQoKSBj
b25zdAorI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKK2Jvb2wgQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5Ojppc0ltcGxUaHJlYWQoKQogewogICAgIHJldHVybiBjdXJyZW50VGhyZWFkKCkg
PT0gY2NUaHJlYWQtPnRocmVhZElEKCk7CiB9CisjZWxpZiBkZWZpbmVkKE5ERUJVRykKK2Jvb2wg
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxUaHJlYWQoKQoreworICAgIHJldHVybiB0
cnVlOworfQorI2Vsc2UKK25hbWVzcGFjZSB7Citib29sIGZha2VJbXBsVGhyZWFkID0gZmFsc2U7
Cit9CiAKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxUaHJlYWQoKQorewor
ICAgIHJldHVybiBmYWtlSW1wbFRocmVhZDsKK30KKworQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpTY29wZWRJbXBsVGhyZWFkOjpTY29wZWRJbXBsVGhyZWFkKCkgOiBtX3ByZXZpb3VzKGZha2VJ
bXBsVGhyZWFkKQoreworICAgIGZha2VJbXBsVGhyZWFkID0gdHJ1ZTsKK30KKworQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpTY29wZWRJbXBsVGhyZWFkOjp+U2NvcGVkSW1wbFRocmVhZCgpCit7
CisgICAgZmFrZUltcGxUaHJlYWQgPSBtX3ByZXZpb3VzOworfQorI2VuZGlmCisKIHZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1l
QmVnaW5UaW1lKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0xNjMsNyArMTg5
LDcgQEAKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQo
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKiBjb21taXR0ZXIsIENDQ29tcGxldGlvbkV2ZW50KiBj
b21wbGV0aW9uKQogewotICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIEFTU0VSVChpc0lt
cGxUaHJlYWQoKSk7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
Y29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJl
Z2luQ29tbWl0KCk7CiAgICAgewpAQCAtMTc4LDcgKzIwNCw3IEBACiB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQoKQogewogICAgIFRSQUNFX0VWRU5U
KCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkIiwgdGhpcywg
MCk7Ci0gICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgp
KTsKICAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKICAgICAgICAgbV9sYXllclRyZWVIb3N0
SW1wbC0+ZHJhd0xheWVycygpOwogfQpAQCAtMTg2LDIxICsyMTIsMjEgQEAKIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKQog
ewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0NDVGhyZWFk
KCkgJiYgbV9sYXllclRyZWVIb3N0SW1wbCk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpICYm
IG1fbGF5ZXJUcmVlSG9zdEltcGwpOwogICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRz
Q29tbWl0QW5kUmVkcmF3KCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpz
ZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAg
IEFTU0VSVChpc0NDVGhyZWFkKCkgJiYgbV9sYXllclRyZWVIb3N0SW1wbCk7CisgICAgQVNTRVJU
KGlzSW1wbFRocmVhZCgpICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwpOwogICAgIG1fbGF5ZXJUcmVl
SG9zdEltcGwtPnNldE5lZWRzUmVkcmF3KCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24p
CiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxP
bkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAgQVNT
RVJUKGlzSW1wbFRocmVhZCgpKTsKICAgICBtX2xheWVyVHJlZUhvc3RJbXBsID0gbV9sYXllclRy
ZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0SW1wbCh0aGlzKTsKICAgICBjb21wbGV0aW9uLT5z
aWduYWwoKTsKIH0KQEAgLTIwOCw3ICsyMzQsNyBAQAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBj
b21wbGV0aW9uKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlz
Q0NUaHJlYWQoKSk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKICAgICBtX2xheWVyVHJl
ZUhvc3RJbXBsLmNsZWFyKCk7CiAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CiB9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aWxlZExheWVySW1wbC5jcHAJKHJldmlzaW9uIDkzMjA0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgImNjL0NDVGlsZWRMYXllckltcGwuaCIKIAogI2lu
Y2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotCisjaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ5LDYgKzQ5LDcgQEAKIAogdm9pZCBDQ1RpbGVkTGF5ZXJJ
bXBsOjpkcmF3KCkKIHsKKyAgICBBU1NFUlQoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0lt
cGxUaHJlYWQoKSk7CiAgICAgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVy
UmVjdCgpOwogICAgIGlmICghbGF5ZXJSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgbV90aWxlci0+
ZHJhdyhsYXllclJlY3QsIG1fdGlsaW5nVHJhbnNmb3JtLCBkcmF3T3BhY2l0eSgpKTsK
</data>
<flag name="review"
          id="99964"
          type_id="1"
          status="-"
          setter="jamesr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104245</attachid>
            <date>2011-08-17 14:32:06 -0700</date>
            <delta_ts>2011-08-18 11:20:32 -0700</delta_ts>
            <desc>Addressed James&apos; comments</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>8316</size>
            <attacher name="Iain Merrick">husky</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAJKHJldmlzaW9uIDkzMjA0KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTMsOSArMjEzLDE1IEBACiAjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykK
IHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpkb0NvbXBvc2l0ZSgpCiB7CisjaWZuZGVmIE5ERUJVRwor
ICAgIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0SW1wbFRocmVhZCh0cnVlKTsKKyNlbmRp
ZgogICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOwogICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBk
YXRlTGF5ZXJzKCk7CiAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKCk7CisjaWZuZGVm
IE5ERUJVRworICAgIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0SW1wbFRocmVhZChmYWxz
ZSk7CisjZW5kaWYKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZShib29sIGZp
bmlzaCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVn
aW5MYXllckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCShyZXZpc2lvbiA5MzIwNCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Nyw2ICs0OCw3IEBACiAKIHZvaWQg
Q0NQbHVnaW5MYXllckltcGw6OmRyYXcoKQogeworICAgIEFTU0VSVChDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsK
ICAgICBjb25zdCBDQ1BsdWdpbkxheWVySW1wbDo6UHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVu
ZGVyZXIoKS0+cGx1Z2luTGF5ZXJQcm9ncmFtKCk7CiAgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJv
Z3JhbS0+aW5pdGlhbGl6ZWQoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
LmgJKHJldmlzaW9uIDkzMjA0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTUg
KzUxLDIxIEBACiAgICAgdmlydHVhbCB2b2lkIHBvc3REcmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3Vi
bGUgZnJhbWVCZWdpblRpbWUpOwogCisjaWZuZGVmIE5ERUJVRworICAgIHN0YXRpYyBib29sIGlz
TWFpblRocmVhZCgpOworICAgIHN0YXRpYyBib29sIGlzSW1wbFRocmVhZCgpOworI2lmICFVU0Uo
VEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgLy8gRmFrZSB0aHJlYWRlZCBjb21wb3NpdGluZyBz
byB3ZSBjYW4gY2F0Y2ggaW5jb3JyZWN0IHVzYWdlLgorICAgIHN0YXRpYyB2b2lkIHNldEltcGxU
aHJlYWQoYm9vbCk7CisjZW5kaWYKKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQg
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5KENDTGF5ZXJUcmVlSG9zdCopOwogICAgIHZpcnR1YWwg
UGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgp
ID0gMDsKICAgICBDQ0xheWVyVHJlZUhvc3QqIGhvc3QoKSBjb25zdCB7IHJldHVybiBtX2xheWVy
VHJlZUhvc3Q7IH0KIAogcHJpdmF0ZToKLSAgICBib29sIGlzTWFpblRocmVhZCgpIGNvbnN0Owot
ICAgIGJvb2wgaXNDQ1RocmVhZCgpIGNvbnN0OwotCiAgICAgLy8gQ2FsbGVkIG9uIENDTWFpblRo
cmVhZAogICAgIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGlt
ZSk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRl
b0xheWVySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcAkocmV2aXNpb24gOTMyMDQpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJWaWRlb0xh
eWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNzcsNiArNzgsOCBAQAogCiB2b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXcoKQogeworICAg
IEFTU0VSVChDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKwogICAg
IGlmIChtX3NraXBzRHJhdykKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJ
bXBsLmNwcAkocmV2aXNpb24gOTMyMDQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXll
clJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNDksNiArNTAsNyBAQAogCiB2b2lkIENDQ2FudmFzTGF5ZXJJbXBsOjpkcmF3KCkK
IHsKKyAgICBBU1NFUlQoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxUaHJlYWQoKSk7
CiAgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CiAgICAgY29uc3QgQ0NDYW52YXNMYXllcklt
cGw6OlByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyKCktPmNhbnZhc0xheWVyUHJvZ3Jh
bSgpOwogICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcAkocmV2aXNpb24gOTMyMDQpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQAogCiB2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpCiB7
Ci0gICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsK
ICAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKICAgICAgICAgY2NUaHJlYWQtPnBvc3RUYXNr
KGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3
TGF5ZXJzT25DQ1RocmVhZCkpOwogfQpAQCAtMTE5LDIxICsxMTksNDAgQEAKIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJs
ZSBmcmFtZUJlZ2luVGltZSkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAg
QVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKICAgICBp
ZiAobV9sYXllclRyZWVIb3N0SW1wbCkKICAgICAgICAgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhj
cmVhdGVNYWluVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1
ZXN0RnJhbWVBbmRDb21taXQsIGZyYW1lQmVnaW5UaW1lKSk7CiB9CiAKLWJvb2wgQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5Ojppc01haW5UaHJlYWQoKSBjb25zdAorI2lmbmRlZiBOREVCVUcKK2Jv
b2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc01haW5UaHJlYWQoKQogewogICAgIHJldHVy
biA6OmlzTWFpblRocmVhZCgpOwogfQogCi1ib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
aXNDQ1RocmVhZCgpIGNvbnN0CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorYm9vbCBD
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzSW1wbFRocmVhZCgpCiB7CiAgICAgcmV0dXJuIGN1
cnJlbnRUaHJlYWQoKSA9PSBjY1RocmVhZC0+dGhyZWFkSUQoKTsKIH0KKyNlbHNlCituYW1lc3Bh
Y2UgeworYm9vbCBmYWtlSW1wbFRocmVhZCA9IGZhbHNlOworfQogCitib29sIENDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6aXNJbXBsVGhyZWFkKCkKK3sKKyAgICByZXR1cm4gZmFrZUltcGxUaHJl
YWQ7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXRJbXBsVGhyZWFkKGJv
b2wgdmFsdWUpCit7CisgICAgZmFrZUltcGxUaHJlYWQgPSB2YWx1ZTsKK30KKyNlbmRpZiAvLyBV
U0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZiAvLyAhTkRFQlVHCisKIHZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1l
QmVnaW5UaW1lKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0xNjMsNyArMTgy
LDcgQEAKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQo
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKiBjb21taXR0ZXIsIENDQ29tcGxldGlvbkV2ZW50KiBj
b21wbGV0aW9uKQogewotICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIEFTU0VSVChpc0lt
cGxUaHJlYWQoKSk7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
Y29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJl
Z2luQ29tbWl0KCk7CiAgICAgewpAQCAtMTc4LDcgKzE5Nyw3IEBACiB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQoKQogewogICAgIFRSQUNFX0VWRU5U
KCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkIiwgdGhpcywg
MCk7Ci0gICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgp
KTsKICAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKICAgICAgICAgbV9sYXllclRyZWVIb3N0
SW1wbC0+ZHJhd0xheWVycygpOwogfQpAQCAtMTg2LDIxICsyMDUsMjEgQEAKIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKQog
ewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0NDVGhyZWFk
KCkgJiYgbV9sYXllclRyZWVIb3N0SW1wbCk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpICYm
IG1fbGF5ZXJUcmVlSG9zdEltcGwpOwogICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRz
Q29tbWl0QW5kUmVkcmF3KCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpz
ZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAg
IEFTU0VSVChpc0NDVGhyZWFkKCkgJiYgbV9sYXllclRyZWVIb3N0SW1wbCk7CisgICAgQVNTRVJU
KGlzSW1wbFRocmVhZCgpICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwpOwogICAgIG1fbGF5ZXJUcmVl
SG9zdEltcGwtPnNldE5lZWRzUmVkcmF3KCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24p
CiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxP
bkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzQ0NUaHJlYWQoKSk7CisgICAgQVNT
RVJUKGlzSW1wbFRocmVhZCgpKTsKICAgICBtX2xheWVyVHJlZUhvc3RJbXBsID0gbV9sYXllclRy
ZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0SW1wbCh0aGlzKTsKICAgICBjb21wbGV0aW9uLT5z
aWduYWwoKTsKIH0KQEAgLTIwOCw3ICsyMjcsNyBAQAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBj
b21wbGV0aW9uKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlz
Q0NUaHJlYWQoKSk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKICAgICBtX2xheWVyVHJl
ZUhvc3RJbXBsLmNsZWFyKCk7CiAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CiB9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aWxlZExheWVySW1wbC5jcHAJKHJldmlzaW9uIDkzMjA0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgImNjL0NDVGlsZWRMYXllckltcGwuaCIKIAogI2lu
Y2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotCisjaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ5LDYgKzQ5LDcgQEAKIAogdm9pZCBDQ1RpbGVkTGF5ZXJJ
bXBsOjpkcmF3KCkKIHsKKyAgICBBU1NFUlQoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0lt
cGxUaHJlYWQoKSk7CiAgICAgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVy
UmVjdCgpOwogICAgIGlmICghbGF5ZXJSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgbV90aWxlci0+
ZHJhdyhsYXllclJlY3QsIG1fdGlsaW5nVHJhbnNmb3JtLCBkcmF3T3BhY2l0eSgpKTsK
</data>
<flag name="review"
          id="100020"
          type_id="1"
          status="+"
          setter="jamesr"
    />
    <flag name="commit-queue"
          id="100028"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104368</attachid>
            <date>2011-08-18 11:20:32 -0700</date>
            <delta_ts>2011-08-18 13:37:38 -0700</delta_ts>
            <desc>Added missing ChangeLog. No other changes.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>10615</size>
            <attacher name="Iain Merrick">husky</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA5MzMyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTEtMDgtMTggIElhaW4gTWVycmljayAgPGh1c2t5QGdvb2dsZS5j
b20+CisKKyAgICAgICAgW2Nocm9taXVtXSBBc3NlcnQgdGhhdCBtYWluIHRocmVhZCBhbmQgY29t
cG9zaXRvciB0aHJlYWQgYXJlIHVzZWQgc2FmZWx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjE0NQorCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eSBub3cgaGFzIHB1YmxpYyBzdGF0aWMgbWV0aG9kcyBpc01haW5UaHJlYWQoKQorICAg
ICAgICBhbmQgaXNJbXBsVGhyZWFkKCksIGFuZCB3ZSBBU1NFUlQgdGhlc2UgaW4gdmFyaW91cyBw
bGFjZXMuIElmIHRocmVhZGVkCisgICAgICAgIGNvbXBvc2l0aW5nIGlzIGRpc2FibGVkLCB3ZSBm
YWtlIGlzSW1wbFRocmVhZCgpIGJ5IHNldHRpbmcgYSBmbGFnIGZvcgorICAgICAgICB0aGUgZHVy
YXRpb24gb2YgY29tcG9zaXRpbmcsIHNvIHRoZSBhc3NlcnQgaXMgc3RpbGwgdmFsaWQuCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBl
eGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQ2FudmFzTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDQ2FudmFzTGF5ZXJJ
bXBsOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpkb0Nv
bXBvc2l0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc01h
aW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpp
c0ltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpzZXRJbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6Y29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNS
ZWRyYXdPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6aW5pdEltcGxPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjpkcmF3KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OmRyYXcpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6ZHJhdyk6CisKIDIwMTEtMDgtMTggIEFu
ZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggY2xhbmcg
bGliYysrIEMrKzB4IGJ1aWxkCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCShyZXZpc2lvbiA5MzIz
NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDkgKzIxMywxNSBAQAogI2lmICFVU0UoVEhS
RUFERURfQ09NUE9TSVRJTkcpCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZG9Db21wb3NpdGUoKQog
eworI2lmbmRlZiBOREVCVUcKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldEltcGxU
aHJlYWQodHJ1ZSk7CisjZW5kaWYKICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKICAgICBt
X2xheWVyUmVuZGVyZXItPnVwZGF0ZUxheWVycygpOwogICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJh
d0xheWVycygpOworI2lmbmRlZiBOREVCVUcKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OnNldEltcGxUaHJlYWQoZmFsc2UpOworI2VuZGlmCiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0
Ojpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAkocmV2
aXNpb24gOTMyMzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UGx1Z2luTGF5ZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hy
b21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDcs
NiArNDgsNyBAQAogCiB2b2lkIENDUGx1Z2luTGF5ZXJJbXBsOjpkcmF3KCkKIHsKKyAgICBBU1NF
UlQoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgQVNTRVJU
KGxheWVyUmVuZGVyZXIoKSk7CiAgICAgY29uc3QgQ0NQbHVnaW5MYXllckltcGw6OlByb2dyYW0q
IHByb2dyYW0gPSBsYXllclJlbmRlcmVyKCktPnBsdWdpbkxheWVyUHJvZ3JhbSgpOwogICAgIEFT
U0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eS5oCShyZXZpc2lvbiA5MzIzNCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDE1ICs1MSwyMSBAQAogICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xh
eWVyc1Rhc2tPbkNDVGhyZWFkKCk7CiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RGcmFtZUFuZENv
bW1pdE9uQ0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKIAorI2lmbmRlZiBOREVCVUcK
KyAgICBzdGF0aWMgYm9vbCBpc01haW5UaHJlYWQoKTsKKyAgICBzdGF0aWMgYm9vbCBpc0ltcGxU
aHJlYWQoKTsKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIC8vIEZha2UgdGhy
ZWFkZWQgY29tcG9zaXRpbmcgc28gd2UgY2FuIGNhdGNoIGluY29ycmVjdCB1c2FnZS4KKyAgICBz
dGF0aWMgdm9pZCBzZXRJbXBsVGhyZWFkKGJvb2wpOworI2VuZGlmCisjZW5kaWYKKwogcHJvdGVj
dGVkOgogICAgIGV4cGxpY2l0IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eShDQ0xheWVyVHJlZUhv
c3QqKTsKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRl
TGF5ZXJUcmVlSG9zdEltcGwoKSA9IDA7CiAgICAgQ0NMYXllclRyZWVIb3N0KiBob3N0KCkgY29u
c3QgeyByZXR1cm4gbV9sYXllclRyZWVIb3N0OyB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBpc01h
aW5UaHJlYWQoKSBjb25zdDsKLSAgICBib29sIGlzQ0NUaHJlYWQoKSBjb25zdDsKLQogICAgIC8v
IENhbGxlZCBvbiBDQ01haW5UaHJlYWQKICAgICB2b2lkIHJlcXVlc3RGcmFtZUFuZENvbW1pdChk
b3VibGUgZnJhbWVCZWdpblRpbWUpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAJKHJldmlz
aW9uIDkzMjM0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZGVvTGF5ZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CiAjaW5jbHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc3LDYgKzc4LDggQEAKIAogdm9pZCBDQ1ZpZGVvTGF5ZXJJ
bXBsOjpkcmF3KCkKIHsKKyAgICBBU1NFUlQoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0lt
cGxUaHJlYWQoKSk7CisKICAgICBpZiAobV9za2lwc0RyYXcpCiAgICAgICAgIHJldHVybjsKIApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVy
SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAJKHJldmlzaW9uIDkzMjM0KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ5LDYgKzUwLDcgQEAKIAogdm9pZCBDQ0NhbnZh
c0xheWVySW1wbDo6ZHJhdygpCiB7CisgICAgQVNTRVJUKENDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwogICAgIGNv
bnN0IENDQ2FudmFzTGF5ZXJJbXBsOjpQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigp
LT5jYW52YXNMYXllclByb2dyYW0oKTsKICAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5p
bml0aWFsaXplZCgpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAJ
KHJldmlzaW9uIDkzMjM0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyAr
MTExLDcgQEAKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnBvc3REcmF3TGF5ZXJz
VGFza09uQ0NUaHJlYWQoKQogewotICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIEFTU0VS
VChpc0ltcGxUaHJlYWQoKSk7CiAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCiAgICAgICAg
IGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpKTsKIH0KQEAgLTExOSwyMSArMTE5
LDQwIEBACiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29t
bWl0T25DQ1RocmVhZChkb3VibGUgZnJhbWVCZWdpblRpbWUpCiB7CiAgICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVh
ZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIEFTU0VSVChpc0lt
cGxUaHJlYWQoKSk7CiAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCiAgICAgICAgIENDTWFp
blRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0LCBmcmFtZUJlZ2luVGltZSkpOwog
fQogCi1ib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNNYWluVGhyZWFkKCkgY29uc3QK
KyNpZm5kZWYgTkRFQlVHCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNNYWluVGhy
ZWFkKCkKIHsKICAgICByZXR1cm4gOjppc01haW5UaHJlYWQoKTsKIH0KIAotYm9vbCBDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OmlzQ0NUaHJlYWQoKSBjb25zdAorI2lmIFVTRShUSFJFQURFRF9D
T01QT1NJVElORykKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxUaHJlYWQo
KQogewogICAgIHJldHVybiBjdXJyZW50VGhyZWFkKCkgPT0gY2NUaHJlYWQtPnRocmVhZElEKCk7
CiB9CisjZWxzZQorbmFtZXNwYWNlIHsKK2Jvb2wgZmFrZUltcGxUaHJlYWQgPSBmYWxzZTsKK30K
IAorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzSW1wbFRocmVhZCgpCit7CisgICAg
cmV0dXJuIGZha2VJbXBsVGhyZWFkOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6c2V0SW1wbFRocmVhZChib29sIHZhbHVlKQoreworICAgIGZha2VJbXBsVGhyZWFkID0gdmFs
dWU7Cit9CisjZW5kaWYgLy8gVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYgLy8g
IU5ERUJVRworCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5k
Q29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwpAQCAtMTYzLDcgKzE4Miw3IEBACiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
Ojpjb21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlciogY29tbWl0dGVyLCBD
Q0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKIHsKLSAgICBBU1NFUlQoaXNDQ1RocmVhZCgp
KTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKICAgICBtX2xh
eWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOwogICAgIHsKQEAgLTE3OCw3ICsxOTcsNyBA
QAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKCkK
IHsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5ZXJz
T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIEFT
U0VSVChpc0ltcGxUaHJlYWQoKSk7CiAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCiAgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKTsKIH0KQEAgLTE4NiwyMSArMjA1
LDIxIEBACiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRS
ZWRyYXdPbkNDVGhyZWFkKCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAg
ICBBU1NFUlQoaXNDQ1RocmVhZCgpICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwpOworICAgIEFTU0VS
VChpc0ltcGxUaHJlYWQoKSAmJiBtX2xheWVyVHJlZUhvc3RJbXBsKTsKICAgICBtX2xheWVyVHJl
ZUhvc3RJbXBsLT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwogfQogCiB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCkKIHsKICAgICBUUkFD
RV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJl
YWQiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQoaXNDQ1RocmVhZCgpICYmIG1fbGF5ZXJUcmVlSG9z
dEltcGwpOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSAmJiBtX2xheWVyVHJlZUhvc3RJbXBs
KTsKICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXROZWVkc1JlZHJhdygpOwogfQogCiB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlv
bkV2ZW50KiBjb21wbGV0aW9uKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk6OmluaXRJbXBsT25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ND
VGhyZWFkKCkpOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CiAgICAgbV9sYXllclRyZWVI
b3N0SW1wbCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwodGhpcyk7
CiAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CiB9CkBAIC0yMDgsNyArMjI3LDcgQEAKIHZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChD
Q0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCIsIHRoaXMs
IDApOwotICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQo
KSk7CiAgICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOwogICAgIGNvbXBsZXRpb24tPnNp
Z25hbCgpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RpbGVkTGF5ZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCShyZXZpc2lvbiA5MzIzNCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJjYy9DQ1RpbGVk
TGF5ZXJJbXBsLmgiCiAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLQorI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00OSw2ICs0OSw3IEBACiAK
IHZvaWQgQ0NUaWxlZExheWVySW1wbDo6ZHJhdygpCiB7CisgICAgQVNTRVJUKENDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIGNvbnN0IEludFJlY3QmIGxheWVy
UmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKICAgICBpZiAoIWxheWVyUmVjdC5pc0VtcHR5KCkp
CiAgICAgICAgIG1fdGlsZXItPmRyYXcobGF5ZXJSZWN0LCBtX3RpbGluZ1RyYW5zZm9ybSwgZHJh
d09wYWNpdHkoKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>