<?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>42309</bug_id>
          
          <creation_ts>2010-07-14 18:03:53 -0700</creation_ts>
          <short_desc>Removing an element from an anonymous block causes crash</short_desc>
          <delta_ts>2010-08-10 15:12:59 -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>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Guillory">ctguil</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>abarth</cc>
    
    <cc>bashi</cc>
    
    <cc>cfleizach</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>hyatt</cc>
    
    <cc>levin</cc>
    
    <cc>mitz</cc>
    
    <cc>mjs</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>251562</commentid>
    <comment_count>0</comment_count>
      <attachid>61593</attachid>
    <who name="Chris Guillory">ctguil</who>
    <bug_when>2010-07-14 18:03:53 -0700</bug_when>
    <thetext>Created attachment 61593
Layout test that reproduces crash within the chromium testshell

This bug is causing the chromium renderer to crash.
http://code.google.com/p/chromium/issues/detail?id=47126

After much debugging I have a layout test that reproduces the crash within the chromium testshell. This appears to be a similar issue to https://bugs.webkit.org/show_bug.cgi?id=41000.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251678</commentid>
    <comment_count>1</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-07-14 22:44:17 -0700</bug_when>
    <thetext>thanks for creating a reproducible case. i&apos;ll take a look tomorrow</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252173</commentid>
    <comment_count>2</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-07-15 15:26:03 -0700</bug_when>
    <thetext>AccessibilityRenderObject::nextSibling is returning an element, but then 

AccessibilityObject* AccessibilityRenderObject::parentObjectIfExists() const

is returning a different element</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252789</commentid>
    <comment_count>3</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-07-16 17:44:23 -0700</bug_when>
    <thetext>So this is a regression from the change to support continuations. The problem is that a child is being added (because its sibling was a continuation). However, it reports its parent as a different object.

I have a fix that changes what&apos;s returned for the parentObject(). The change adds a 3rd case to check. That 3rd case is if the first sibling is part of a continuation, then following the continuation back to its origin. Then take the parent. That parent is the same parent that &quot;found&quot; this element and added it as its child.

To accomplish, however, I had to store the &quot;continuator&quot; when setting a continuation on a RenderBlock/Inline. I couldn&apos;t find any other way to go backwards from element that WAS a continuation. It seemed all the code was designed only to FOLLOW continuations.

I&apos;ve also been able to add some ASSERTs that will help expose more problems like this right away.

Will test this change more and add a patch soon</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252793</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Guillory">ctguil</who>
    <bug_when>2010-07-16 17:58:16 -0700</bug_when>
    <thetext>Could we change the code so that each AccessibleObject keeps a pointer to its parent?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252949</commentid>
    <comment_count>5</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-07-17 21:29:23 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Could we change the code so that each AccessibleObject keeps a pointer to its parent?

we still have the requirement to go from an arbitrary RenderObject -&gt; AccessibilityObject, whose parent may not have been created yet. if its parent object was asked for, we&apos;d have to be able to retrieve the right ax parent still</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>253343</commentid>
    <comment_count>6</comment_count>
      <attachid>61981</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-07-19 12:45:42 -0700</bug_when>
    <thetext>Created attachment 61981
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256289</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Guillory">ctguil</who>
    <bug_when>2010-07-26 15:35:19 -0700</bug_when>
    <thetext>WebCore/accessibility code looks good to me. Someone else should over the WebCore/rendering changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256291</commentid>
    <comment_count>8</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-07-26 15:36:05 -0700</bug_when>
    <thetext>hyatt, mitz -- pretty please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256679</commentid>
    <comment_count>9</comment_count>
      <attachid>62708</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-07-27 10:22:48 -0700</bug_when>
    <thetext>Created attachment 62708
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256680</commentid>
    <comment_count>10</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-07-27 10:23:21 -0700</bug_when>
    <thetext>adding new patch which is smaller than original. i&apos;ve gotten rid of all the changes that are not directly related to this bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257282</commentid>
    <comment_count>11</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-07-28 12:10:12 -0700</bug_when>
    <thetext>anyone want to review this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260388</commentid>
    <comment_count>12</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-08-04 22:01:38 -0700</bug_when>
    <thetext>&gt; To accomplish, however, I had to store the &quot;continuator&quot; when setting a continuation on a RenderBlock/Inline. I couldn&apos;t find any other way to go backwards from element that WAS a continuation. It seemed all the code was designed only to FOLLOW continuations.

Have you already considered the following two approaches?

Is AccessibilityRenderObject::renderParentObject() called often? If performance of this function isn&apos;t so important, cannot we iterate the render tree in reverse order to find the continuator using the forward links?

Another way to avoid increasing memory consumption would be hiring ugly idiom which uses global HashMap. Please check global hashmaps in RenderBlock.cpp for example, in case you aren&apos;t familiar with the hack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260411</commentid>
    <comment_count>13</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-08-04 22:59:06 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; To accomplish, however, I had to store the &quot;continuator&quot; when setting a continuation on a RenderBlock/Inline. I couldn&apos;t find any other way to go backwards from element that WAS a continuation. It seemed all the code was designed only to FOLLOW continuations.
&gt; 
&gt; Have you already considered the following two approaches?
&gt; 
&gt; Is AccessibilityRenderObject::renderParentObject() called often? If performance of this function isn&apos;t so important, cannot we iterate the render tree in reverse order to find the continuator using the forward links?

performance is a huge issue here and this method can be called 1000s of times a second

&gt; 
&gt; Another way to avoid increasing memory consumption would be hiring ugly idiom which uses global HashMap. Please check global hashmaps in RenderBlock.cpp for example, in case you aren&apos;t familiar with the hack.

i don&apos;t see a need to use an &quot;ugly idiom&quot; when this approach is working just fine, and requires less memory ostensibly, than a HashMap full of elements that needs to be accessed early and often.

Honestly, i don&apos;t know whats going on with this patch. in one form or another its been ready for 3 weeks. no one has even left any comments despite my sending direct emails to people and CCing half of webkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260419</commentid>
    <comment_count>14</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-08-04 23:16:43 -0700</bug_when>
    <thetext>&gt; i don&apos;t see a need to use an &quot;ugly idiom&quot; when this approach is working just fine, and requires less memory ostensibly, than a HashMap full of elements that needs to be accessed early and often.

I see. I guessed m_continuator will be 0 for most cases so we can save some amount of memory, but I might be wrong. Sorry for confusion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260421</commentid>
    <comment_count>15</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-08-04 23:18:28 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; i don&apos;t see a need to use an &quot;ugly idiom&quot; when this approach is working just fine, and requires less memory ostensibly, than a HashMap full of elements that needs to be accessed early and often.
&gt; 
&gt; I see. I guessed m_continuator will be 0 for most cases so we can save some amount of memory, but I might be wrong. Sorry for confusion.

Of course if there is some other way to go back the continuation chain that I don&apos;t know about, I&apos;d be happy to use that method</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260732</commentid>
    <comment_count>16</comment_count>
      <attachid>62708</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-05 11:40:56 -0700</bug_when>
    <thetext>Comment on attachment 62708
Patch

No to adding  4 bytes to all blocks and inlines.  You can just do what all the other code does that has to find the previous continuation... walk the chain from the beginning.  Continuation chains are rarely long in practice, so this is not a big deal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260733</commentid>
    <comment_count>17</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-05 11:42:41 -0700</bug_when>
    <thetext>Check out continuationBefore if you need to see code that does this.  You can basically use the DOM node&apos;s renderer as a starting point and walk the continuation chain to get to the one you want.  You don&apos;t have to iterate through the render tree sibling pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260743</commentid>
    <comment_count>18</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-05 11:49:48 -0700</bug_when>
    <thetext>Continuation pointers are definitely a good candidate to be placed in HashMaps, since they are 0 nearly all the time.  Having forward and backward connections(In reply to comment #14)
&gt; &gt; i don&apos;t see a need to use an &quot;ugly idiom&quot; when this approach is working just fine, and requires less memory ostensibly, than a HashMap full of elements that needs to be accessed early and often.
&gt; 
&gt; I see. I guessed m_continuator will be 0 for most cases so we can save some amount of memory, but I might be wrong. Sorry for confusion.

No, you are correct.  Even the existing forward continuation pointer is a good candidate for a HashMap conversion and would save a significant chunk of memory.  I&apos;d review a patch that did that. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261326</commentid>
    <comment_count>19</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-08-06 10:16:09 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Check out continuationBefore if you need to see code that does this.  You can basically use the DOM node&apos;s renderer as a starting point and walk the continuation chain to get to the one you want.  You don&apos;t have to iterate through the render tree sibling pointers.

Thanks for these pointers. I see that there are two (nearly) identical continuationBefore() methods in RenderInline and RenderBlock

would it make sense to merge these into one method so that AXRenderObject could also use it, or should AXRenderObject make its own copy.

I say, nearly identical, because when RenderBlock wants the next continuation it does

curr-&gt;continuation()

and RenderInline does

curr-&gt;nextContination() --- where

static RenderBoxModelObject* nextContinuation(RenderObject* renderer)
{
    if (renderer-&gt;isInline() &amp;&amp; !renderer-&gt;isReplaced())
        return toRenderInline(renderer)-&gt;continuation();
    return toRenderBlock(renderer)-&gt;inlineElementContinuation();
}
------
but i assume those differences could be resolved</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262059</commentid>
    <comment_count>20</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-08-09 03:24:11 -0700</bug_when>
    <thetext>Hi,

(In reply to comment #18)
&gt; Continuation pointers are definitely a good candidate to be placed in HashMaps, since they are 0 nearly all the time.  Having forward and backward connections(In reply to comment #14)

I&apos;d like to make a patch to migrate m_continuation pointers to a HashMap and to merge similar functions on RenderInline and RenderBlock. I&apos;ll file an issue for that and send a patch soon.

Thanks,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262786</commentid>
    <comment_count>21</comment_count>
      <attachid>64034</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-08-10 11:23:25 -0700</bug_when>
    <thetext>Created attachment 64034
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262789</commentid>
    <comment_count>22</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-08-10 11:24:03 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Created an attachment (id=64034) [details]
&gt; Patch

new patch follow&apos;s Dave&apos;s suggestion. look at the node()-&gt;renderer() and then follow the continuation chain</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262832</commentid>
    <comment_count>23</comment_count>
    <who name="Chris Guillory">ctguil</who>
    <bug_when>2010-08-10 13:30:52 -0700</bug_when>
    <thetext>With this change I am unable to reproduce the renderer crash in Chromium. Regarding the change, the new assert in addChildren will fire if a similar issue occurs so that&apos;s good. Someone with webkit experience should look over the continuation following code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262837</commentid>
    <comment_count>24</comment_count>
      <attachid>64034</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-10 13:45:42 -0700</bug_when>
    <thetext>Comment on attachment 64034
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262853</commentid>
    <comment_count>25</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-08-10 14:36:26 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65095</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262881</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-10 15:12:59 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65095 might have broken SnowLeopard Intel Release (Tests)
The following changes are on the blame list:
http://trac.webkit.org/changeset/65094
http://trac.webkit.org/changeset/65095</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61593</attachid>
            <date>2010-07-14 18:03:53 -0700</date>
            <delta_ts>2010-07-19 12:45:39 -0700</delta_ts>
            <desc>Layout test that reproduces crash within the chromium testshell</desc>
            <filename>MyPatch.txt</filename>
            <type>text/plain</type>
            <size>2661</size>
            <attacher name="Chris Guillory">ctguil</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvcmVtb3ZlZC1hbm9ueW1vdXMtYmxvY2st
Y2hpbGQtY2F1c2VzLWNyYXNoLWV4cGVjdGVkLnR4dA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIExheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvcmVtb3ZlZC1hbm9ueW1vdXMtYmxvY2stY2hpbGQtY2F1c2VzLWNy
YXNoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvcmVtb3ZlZC1hbm9ueW1vdXMtYmxvY2stY2hpbGQtY2F1c2VzLWNyYXNoLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACitJbiBjZXJ0YWluIGNhc2VzIHJlbW92aW5n
IGEgZGVjZW5kZW50IGZyb20gYW4gYW5vbnltb3VzIGJsb2NrIGVsZW1lbnQgZG9lcyBub3QgdXBk
YXRlIHRoZSBwYXJlbnQgY2hhaW4gY29ycmVjdGx5LiBUaGlzIGNhbiBjYXVzZSBhIGNyYXNoLg0N
CisNDQorT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLg0NCisNDQorDQ0KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUNDQorDQ0KK1RFU1QgQ09NUExFVEUNDQorDQ0KSW5kZXg6IExheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvcmVtb3ZlZC1hbm9ueW1vdXMtYmxvY2stY2hpbGQtY2F1c2Vz
LWNyYXNoLmh0bWwNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Jl
bW92ZWQtYW5vbnltb3VzLWJsb2NrLWNoaWxkLWNhdXNlcy1jcmFzaC5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9yZW1vdmVkLWFub255bW91cy1ibG9jay1j
aGlsZC1jYXVzZXMtY3Jhc2guaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdD4NCisgICAgdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9
IGZhbHNlOw0KKw0KKyAgICBmdW5jdGlvbiByZW1vdmVFbGVtZW50KCkgew0KKyAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdicpLnJlbW92ZUNoaWxkKGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdkaXYnKS5jaGlsZHJlblsyXSk7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gcXVl
cnlJc0VuYWJsZWRPbkRlY2VuZGFudHMoYWNjZXNzaWJpbGl0eU9iamVjdCkgew0KKyAgICAgICAg
YWNjZXNzaWJpbGl0eU9iamVjdC5pc0VuYWJsZWQNCisNCisgICAgICAgIHZhciBjb3VudCA9IGFj
Y2Vzc2liaWxpdHlPYmplY3QuY2hpbGRyZW5Db3VudDsNCisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgY291bnQ7ICsraSkNCisgICAgICAgICAgICBxdWVyeUlzRW5hYmxlZE9uRGVjZW5kYW50
cyhhY2Nlc3NpYmlsaXR5T2JqZWN0LmNoaWxkQXRJbmRleChpKSk7DQorICAgIH0KKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8ZGl2IGlkPSJkaXYiPg0KKyAgPHNwYW4+DQorICAg
IDxkaXY+PC9kaXY+DQorICA8L3NwYW4+DQorICA8ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0Ij48L2Rp
dj4NCisgIDxzcGFuIHRpdGxlPSJ0aXRsZSI+PC9zcGFuPg0KKzwvZGl2Pg0KKworPHAgaWQ9ImRl
c2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4NCisg
ICAgZGVzY3JpcHRpb24oIkluIGNlcnRhaW4gY2FzZXMgcmVtb3ZpbmcgYSBkZWNlbmRlbnQgZnJv
bSBhbiBhbm9ueW1vdXMgYmxvY2sgZWxlbWVudCBkb2VzIG5vdCB1cGRhdGUgdGhlIHBhcmVudCBj
aGFpbiBjb3JyZWN0bHkuIFRoaXMgY2FuIGNhdXNlIGEgY3Jhc2guIik7DQorDQorICAgIGlmICh3
aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsNCisgICAgICAgIC8vIEZpcnN0IGJ1aWxk
IHVwIGZ1bGwgYWNjZXNzaWJpbGl0eSB0cmVlLg0KKyAgICAgICAgZG9jdW1lbnQuYm9keS5mb2N1
cygpOw0KKyAgICAgICAgcXVlcnlJc0VuYWJsZWRPbkRlY2VuZGFudHMoYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQpOw0KKyAgICAgICAgDQorICAgICAgICByZW1vdmVFbGVt
ZW50KCkNCisgICAgICAgIA0KKyAgICAgICAgLy8gTm93IGNhbGwgaXNFbmFibGVkIG9uIGVhY2gg
YWNjZXNzaWJpbGl0eSBvYmplY3QuDQorICAgICAgICBkb2N1bWVudC5ib2R5LmZvY3VzKCk7DQor
ICAgICAgICBxdWVyeUlzRW5hYmxlZE9uRGVjZW5kYW50cyhhY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5mb2N1c2VkRWxlbWVudCk7CisgICAgfQorCisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61981</attachid>
            <date>2010-07-19 12:45:42 -0700</date>
            <delta_ts>2010-07-27 10:22:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42309-20100719124541.patch</filename>
            <type>text/plain</type>
            <size>21089</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzY4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMTAtMDctMTkgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbQ2hyb21pdW1dIFJlbW92aW5nIGFuIGVsZW1lbnQgZnJvbSBhbiBhbm9ueW1vdXMgYmxvY2sg
Y2F1c2VzIGNyYXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00MjMwOQorCisgICAgICAgIFRoZXJlIHdhcyBhIGNhc2Ugd2hlcmUgYSBjb250aW51YXRp
b24gd2FzIGFkZGVkIGFzIGEgY2hpbGQsIGJ1dCBpZiB5b3UgYXNrZWQKKyAgICAgICAgdGhhdCBj
aGlsZCB3aG8gaXMgeW91ciBwYXJlbnQsIGl0IHdvdWxkIHJldHVybiB0aGUgd3JvbmcgYW5zd2Vy
LgorCisgICAgICAgIFRoZSBzcGVjaWZpYyBzY2VuYXJpbyB3YXMgd2hlbiBhIHNpYmxpbmcgb2Yg
YW4gZWxlbWVudCB3aG8gd2FzIHRoZSBzdGFydCBvZiBhIAorICAgICAgICBjb250aW51YXRpb24g
d2FzIHByZXNlbnQuIFJldHJpZXZpbmcgdGhlIHBhcmVudCBvYmplY3QgaGFkIHRoZW4gZm9sbG93
IHRoZSBzaWJsaW5nCisgICAgICAgIGNoYWluIGFuZCB0aGVuIGZvbGxvdyB0aGUgb3JpZ2luYXRp
bmcgY29udGludWF0aW9uIGNoYWluLiAKKworICAgICAgICBUbyBoZWxwIHRoYXQgcHJvY2Vzcywg
SSd2ZSBhZGRlZCBzZXRDb250aW51YXRvcigpLCBjb250aW51YXRvcigpIG1ldGhvZHMgdGhhdAor
ICAgICAgICBtaXJyb3Igc2V0Q29udGludWF0aW9uKCkuIFRoZXNlIGFsbG93IG9uZSB0byBmb2xs
b3cgdGhlIGNoYWluIGJhY2sgdXAgdG8gd2hlcmUgaXQgc3RhcnRlZC4KKworICAgICAgICBUZXN0
OiBhY2Nlc3NpYmlsaXR5L3JlbW92ZWQtYW5vbnltb3VzLWJsb2NrLWNoaWxkLWNhdXNlcy1jcmFz
aC5odG1sCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6cHJl
dmlvdXNTaWJsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6Om5leHRTaWJsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnJlbmRlclBhcmVudE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpwYXJlbnRPYmplY3RJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpwYXJlbnRPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNwbGl0QmxvY2tzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRDaGlsZElnbm9yaW5nQW5vbnltb3VzQ29sdW1uQmxv
Y2tzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OlJlbmRlckJveE1vZGVsT2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpkZXN0cm95KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpzZXRDb250aW51YXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29udGludWF0b3IpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpk
ZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6c3R5bGVEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjphZGRDaGlsZElnbm9yaW5nQ29udGlu
dWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6c3BsaXRJbmxpbmVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6Y2hpbGRCZWNhbWVOb25JbmxpbmUpOgor
CiAyMDEwLTA3LTE5ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNjM2NzIp
CisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwNCw3ICszMDQsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBB
Y2Nlc3NpYmlsaXR5UmVuZGVyCiAgICAgaWYgKCFwcmV2aW91c1NpYmxpbmcpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIAotICAgIHJldHVybiBtX3JlbmRlcmVyLT5kb2N1bWVudCgpLT5heE9iamVj
dENhY2hlKCktPmdldE9yQ3JlYXRlKHByZXZpb3VzU2libGluZyk7CisgICAgcmV0dXJuIGF4T2Jq
ZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocHJldmlvdXNTaWJsaW5nKTsKIH0KIAogc3RhdGljIGlu
bGluZSBib29sIGxhc3RDaGlsZEhhc0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KQpAQCAtMzQzLDEwICszNDMsMTAgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0
eVJlbmRlcgogICAgIGVsc2UgaWYgKGlzSW5saW5lV2l0aENvbnRpbnVhdGlvbihtX3JlbmRlcmVy
LT5wYXJlbnQoKSkpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBjb250aW51YXRpb24gPSB0b1Jl
bmRlcklubGluZShtX3JlbmRlcmVyLT5wYXJlbnQoKSktPmNvbnRpbnVhdGlvbigpOwogICAgICAg
ICAKLSAgICAgICAgLy8gQ2FzZSA0YTogY29udGludWF0aW9uIGlzIGEgYmxvY2sgLSBpbiB0aGlz
IGNhc2UgdGhlIGJsb2NrIGl0c2VsZiBpcyB0aGUgbmV4dCBzaWJsaW5nLgorICAgICAgICAvLyBD
YXNlIDVhOiBjb250aW51YXRpb24gaXMgYSBibG9jayAtIGluIHRoaXMgY2FzZSB0aGUgYmxvY2sg
aXRzZWxmIGlzIHRoZSBuZXh0IHNpYmxpbmcuCiAgICAgICAgIGlmIChjb250aW51YXRpb24tPmlz
UmVuZGVyQmxvY2soKSkKICAgICAgICAgICAgIG5leHRTaWJsaW5nID0gY29udGludWF0aW9uOwot
ICAgICAgICAvLyBDYXNlIDRiOiBjb250aW51YXRpb24gaXMgYW4gaW5saW5lIC0gaW4gdGhpcyBj
YXNlIHRoZSBpbmxpbmUncyBmaXJzdCBjaGlsZCBpcyB0aGUgbmV4dCBzaWJsaW5nCisgICAgICAg
IC8vIENhc2UgNWI6IGNvbnRpbnVhdGlvbiBpcyBhbiBpbmxpbmUgLSBpbiB0aGlzIGNhc2UgdGhl
IGlubGluZSdzIGZpcnN0IGNoaWxkIGlzIHRoZSBuZXh0IHNpYmxpbmcKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbmV4dFNpYmxpbmcgPSBmaXJzdENoaWxkQ29uc2lkZXJpbmdDb250aW51YXRp
b24oY29udGludWF0aW9uKTsKICAgICB9CkBAIC0zNTQsMTAgKzM1NCwxMCBAQCBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiAgICAgaWYgKCFuZXh0U2libGluZykKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgcmV0dXJuIG1fcmVuZGVyZXItPmRvY3VtZW50KCkt
PmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUobmV4dFNpYmxpbmcpOworICAgIHJldHVybiBh
eE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKG5leHRTaWJsaW5nKTsKIH0KIAotQWNjZXNzaWJp
bGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6cGFyZW50T2JqZWN0SWZFeGlz
dHMoKSBjb25zdAorUmVuZGVyT2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpyZW5k
ZXJQYXJlbnRPYmplY3QoKSBjb25zdAogewogICAgIGlmICghbV9yZW5kZXJlcikKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0zNjYsNyArMzY2LDggQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNz
aWJpbGl0eVJlbmRlcgogCiAgICAgLy8gQ2FzZSAxOiBub2RlIGlzIGEgYmxvY2sgYW5kIGlzIGFu
IGlubGluZSdzIGNvbnRpbnVhdGlvbi4gUGFyZW50CiAgICAgLy8gaXMgdGhlIHN0YXJ0IG9mIHRo
ZSBjb250aW51YXRpb24gY2hhaW4uCi0gICAgUmVuZGVySW5saW5lKiBzdGFydE9mQ29udHMgPSAw
OworICAgIFJlbmRlck9iamVjdCogc3RhcnRPZkNvbnRzID0gMDsKKyAgICBSZW5kZXJPYmplY3Qq
IGZpcnN0Q2hpbGQgPSAwOwogICAgIGlmIChtX3JlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYg
KHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51YXRpb25zKG1fcmVuZGVyZXIpKSkKICAgICAg
ICAgcGFyZW50ID0gc3RhcnRPZkNvbnRzOwogCkBAIC0zNzQsMzcgKzM3NSwyNyBAQCBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiAgICAgLy8gdGhlIGVhcmxpZXN0IG5v
ZGUgaW4gdGhlIGNvbnRpbnVhdGlvbiBjaGFpbi4KICAgICBlbHNlIGlmIChwYXJlbnQgJiYgcGFy
ZW50LT5pc1JlbmRlcklubGluZSgpICYmIChzdGFydE9mQ29udHMgPSBzdGFydE9mQ29udGludWF0
aW9ucyhwYXJlbnQpKSkKICAgICAgICAgcGFyZW50ID0gc3RhcnRPZkNvbnRzOwotCi0gICAgaWYg
KCFwYXJlbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fcmVuZGVyZXItPmRv
Y3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0KHBhcmVudCk7CisgICAgCisgICAgLy8gQ2Fz
ZSAzOiBGb2xsb3cgdGhlIGNvbnRpbnVhdG9yIGNoYWluIHVudGlsIHdlIGdldCB0byB0aGUgcGFy
ZW50IHRoYXQgZm91bmQgdGhpcyByZW5kZXJlci4KKyAgICBlbHNlIGlmIChwYXJlbnQgJiYgKGZp
cnN0Q2hpbGQgPSBwYXJlbnQtPmZpcnN0Q2hpbGQoKSkpIHsKKyAgICAgICAgaWYgKGZpcnN0Q2hp
bGQtPmlzQm94TW9kZWxPYmplY3QoKSAmJiAoc3RhcnRPZkNvbnRzID0gdG9SZW5kZXJCb3hNb2Rl
bE9iamVjdChmaXJzdENoaWxkKS0+Y29udGludWF0b3IoKSkpIHsKKyAgICAgICAgICAgIGZvciAo
UmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRpbnVhdG9yID0gdG9SZW5kZXJCb3hNb2RlbE9iamVj
dChzdGFydE9mQ29udHMpOyBjb250aW51YXRvcjsgY29udGludWF0b3IgPSBjb250aW51YXRvci0+
Y29udGludWF0b3IoKSkKKyAgICAgICAgICAgICAgICBzdGFydE9mQ29udHMgPSBjb250aW51YXRv
cjsKKyAgICAgICAgICAgIC8vIFRoZSBjb250aW51YXRvciBjaGFpbiB3YXMgZm9sbG93ZWQgdG8g
dGhlIGVuZC4gTm93IHRha2UgaXRzIHBhcmVudCB0byBnZXQgdGhlIHZhbGlkIHBhcmVudC4KKyAg
ICAgICAgICAgIHBhcmVudCA9IHN0YXJ0T2ZDb250cy0+cGFyZW50KCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgICAgIAorICAgIHJldHVybiBwYXJlbnQ7CiB9CiAgICAgCi1BY2Nlc3NpYmlsaXR5
T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpwYXJlbnRPYmplY3QoKSBjb25zdAor
QWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6cGFyZW50T2Jq
ZWN0SWZFeGlzdHMoKSBjb25zdAogewotICAgIGlmICghbV9yZW5kZXJlcikKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgCi0gICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSBtX3JlbmRlcmVyLT5wYXJl
bnQoKTsKLQotICAgIC8vIENhc2UgMTogbm9kZSBpcyBhIGJsb2NrIGFuZCBpcyBhbiBpbmxpbmUn
cyBjb250aW51YXRpb24uIFBhcmVudAotICAgIC8vIGlzIHRoZSBzdGFydCBvZiB0aGUgY29udGlu
dWF0aW9uIGNoYWluLgotICAgIFJlbmRlcklubGluZSogc3RhcnRPZkNvbnRzID0gMDsKLSAgICBp
ZiAobV9yZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmIChzdGFydE9mQ29udHMgPSBzdGFydE9m
Q29udGludWF0aW9ucyhtX3JlbmRlcmVyKSkpCi0gICAgICAgIHBhcmVudCA9IHN0YXJ0T2ZDb250
czsKLQotICAgIC8vIENhc2UgMjogbm9kZSdzIHBhcmVudCBpcyBhbiBpbmxpbmUgd2hpY2ggaXMg
c29tZSBub2RlJ3MgY29udGludWF0aW9uOyBwYXJlbnQgaXMgCi0gICAgLy8gdGhlIGVhcmxpZXN0
IG5vZGUgaW4gdGhlIGNvbnRpbnVhdGlvbiBjaGFpbi4KLSAgICBlbHNlIGlmIChwYXJlbnQgJiYg
cGFyZW50LT5pc1JlbmRlcklubGluZSgpICYmIChzdGFydE9mQ29udHMgPSBzdGFydE9mQ29udGlu
dWF0aW9ucyhwYXJlbnQpKSkKLSAgICAgICAgcGFyZW50ID0gc3RhcnRPZkNvbnRzOwotCi0gICAg
aWYgKCFwYXJlbnQpCi0gICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBheE9iamVjdENhY2hl
KCktPmdldChyZW5kZXJQYXJlbnRPYmplY3QoKSk7Cit9CiAgICAgCi0gICAgaWYgKGFyaWFSb2xl
QXR0cmlidXRlKCkgPT0gTWVudUJhclJvbGUpCi0gICAgICAgIHJldHVybiBtX3JlbmRlcmVyLT5k
b2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHBhcmVudCk7Ci0KK0FjY2Vz
c2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnBhcmVudE9iamVjdCgp
IGNvbnN0Cit7CiAgICAgLy8gbWVudUJ1dHRvbiBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgbWVudSBh
cmUgRE9NIHNpYmxpbmdzLCBidXQgQWNjZXNzaWJpbGl0eSBuZWVkcyB0aGVtIHRvIGJlIHBhcmVu
dC9jaGlsZAogICAgIGlmIChhcmlhUm9sZUF0dHJpYnV0ZSgpID09IE1lbnVSb2xlKSB7CiAgICAg
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1lbnVCdXR0b25Gb3JNZW51KCk7CkBA
IC00MTIsNyArNDAzLDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRl
cgogICAgICAgICAgICAgcmV0dXJuIHBhcmVudDsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIG1f
cmVuZGVyZXItPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocGFyZW50
KTsKKyAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZW5kZXJQYXJlbnRP
YmplY3QoKSk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNXZWJBcmVh
KCkgY29uc3QKQEAgLTMyODYsOCArMzI3NywxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmFkZENoaWxkCiAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBjaGlsZHJlbi5z
aXplKCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
CiAgICAgICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoY2hpbGRyZW5baV0pOwotICAgICAg
ICB9IGVsc2UKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChvYmotPnBhcmVu
dE9iamVjdCgpID09IHRoaXMpOwogICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQob2JqKTsK
KyAgICAgICAgfQogICAgIH0KICAgICAKICAgICAvLyBmb3IgYSBSZW5kZXJJbWFnZSwgYWRkIHRo
ZSA8YXJlYT4gZWxlbWVudHMgYXMgaW5kaXZpZHVhbCBhY2Nlc3NpYmlsaXR5IG9iamVjdHMKQEAg
LTMyOTgsNyArMzI5MSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQ2hp
bGQKIAogICAgICAgICAgICAgICAgIC8vIGFkZCBhbiA8YXJlYT4gZWxlbWVudCBmb3IgdGhpcyBj
aGlsZCBpZiBpdCBoYXMgYSBsaW5rCiAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1Rh
Z05hbWUoYXJlYVRhZykgJiYgY3VycmVudC0+aXNMaW5rKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluayogYXJlYU9iamVjdCA9IHN0YXRpY19jYXN0PEFj
Y2Vzc2liaWxpdHlJbWFnZU1hcExpbmsqPihtX3JlbmRlcmVyLT5kb2N1bWVudCgpLT5heE9iamVj
dENhY2hlKCktPmdldE9yQ3JlYXRlKEltYWdlTWFwTGlua1JvbGUpKTsKKyAgICAgICAgICAgICAg
ICAgICAgQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluayogYXJlYU9iamVjdCA9IHN0YXRpY19jYXN0
PEFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsqPihheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRl
KEltYWdlTWFwTGlua1JvbGUpKTsKICAgICAgICAgICAgICAgICAgICAgYXJlYU9iamVjdC0+c2V0
SFRNTEFyZWFFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudCo+KGN1cnJlbnQpKTsK
ICAgICAgICAgICAgICAgICAgICAgYXJlYU9iamVjdC0+c2V0SFRNTE1hcEVsZW1lbnQobWFwKTsK
ICAgICAgICAgICAgICAgICAgICAgYXJlYU9iamVjdC0+c2V0UGFyZW50KHRoaXMpOwpJbmRleDog
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5o
CShyZXZpc2lvbiA2MzY3MikKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw2ICsyODksNyBAQCBwcml2YXRl
OgogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY2Vzc2liaWxpdHlJbWFnZU1hcEhpdFRlc3Qo
SFRNTEFyZWFFbGVtZW50KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5UGFyZW50Rm9ySW1hZ2VNYXAoSFRNTE1hcEVsZW1lbnQq
IG1hcCkgY29uc3Q7CiAgICAgYm9vbCByZW5kZXJPYmplY3RJc09ic2VydmFibGUoUmVuZGVyT2Jq
ZWN0KikgY29uc3Q7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJQYXJlbnRPYmplY3QoKSBjb25z
dDsKICAgICAKICAgICB2b2lkIGFyaWFTZWxlY3RlZFJvd3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yJik7CiAgICAgCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lv
biA2MzY3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTY3LDYgKzE2Nyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmRlc3Ryb3koKQogICAg
IC8vIFRoZSByZWFzb24gd2UgZG9uJ3QgZGVzdHJveSBpdCBiZWZvcmUgYW5vbnltb3VzIGNoaWxk
cmVuIGlzIHRoYXQgdGhleSBtYXkKICAgICAvLyBoYXZlIGNvbnRpbnVhdGlvbnMgb2YgdGhlaXIg
b3duIHRoYXQgYXJlIGFub255bW91cyBjaGlsZHJlbiBvZiBvdXIgY29udGludWF0aW9uLgogICAg
IGlmIChtX2NvbnRpbnVhdGlvbikgeworICAgICAgICBtX2NvbnRpbnVhdGlvbi0+c2V0Q29udGlu
dWF0b3IoMCk7CiAgICAgICAgIG1fY29udGludWF0aW9uLT5kZXN0cm95KCk7CiAgICAgICAgIG1f
Y29udGludWF0aW9uID0gMDsKICAgICB9CkBAIC0yMzgsNiArMjM5LDggQEAgdm9pZCBSZW5kZXJC
bG9jazo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaQogICAgICAgICAgICAgY3VyckNvbnQtPnNldENv
bnRpbnVhdGlvbigwKTsKICAgICAgICAgICAgIGN1cnJDb250LT5zZXRTdHlsZShzdHlsZSgpKTsK
ICAgICAgICAgICAgIGN1cnJDb250LT5zZXRDb250aW51YXRpb24obmV4dENvbnQpOworICAgICAg
ICAgICAgaWYgKG5leHRDb250KQorICAgICAgICAgICAgICAgIG5leHRDb250LT5zZXRDb250aW51
YXRvcihjdXJyQ29udCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQxNSw3ICs0MTgsOSBAQCB2
b2lkIFJlbmRlckJsb2NrOjpzcGxpdEJsb2NrcyhSZW5kZXJCbG9jCiAgICAgLy8gQ3JlYXRlIGEg
Y2xvbmUgb2YgdGhpcyBpbmxpbmUuCiAgICAgUmVuZGVyQmxvY2sqIGNsb25lQmxvY2sgPSBjbG9u
ZSgpOwogICAgIGNsb25lQmxvY2stPnNldENvbnRpbnVhdGlvbihvbGRDb250KTsKLQorICAgIGlm
IChvbGRDb250KQorICAgICAgICBvbGRDb250LT5zZXRDb250aW51YXRvcihjbG9uZUJsb2NrKTsK
KyAgICAKICAgICAvLyBOb3cgdGFrZSBhbGwgb2YgdGhlIGNoaWxkcmVuIGZyb20gYmVmb3JlQ2hp
bGQgdG8gdGhlIGVuZCBhbmQgcmVtb3ZlCiAgICAgLy8gdGhlbSBmcm9tIHx0aGlzfCBhbmQgcGxh
Y2UgdGhlbSBpbiB0aGUgY2xvbmUuCiAgICAgaWYgKCFiZWZvcmVDaGlsZCAmJiBpc0FmdGVyQ29u
dGVudChsYXN0Q2hpbGQoKSkpCkBAIC00MjQsNyArNDI5LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6
c3BsaXRCbG9ja3MoUmVuZGVyQmxvYwogICAgIAogICAgIC8vIEhvb2sgfGNsb25lfCB1cCBhcyB0
aGUgY29udGludWF0aW9uIG9mIHRoZSBtaWRkbGUgYmxvY2suCiAgICAgbWlkZGxlQmxvY2stPnNl
dENvbnRpbnVhdGlvbihjbG9uZUJsb2NrKTsKLQorICAgIGlmIChjbG9uZUJsb2NrKQorICAgICAg
ICBjbG9uZUJsb2NrLT5zZXRDb250aW51YXRvcihtaWRkbGVCbG9jayk7CisgICAgCiAgICAgLy8g
V2UgaGF2ZSBiZWVuIHJlcGFyZW50ZWQgYW5kIGFyZSBub3cgdW5kZXIgdGhlIGZyb21CbG9jay4g
IFdlIG5lZWQKICAgICAvLyB0byB3YWxrIHVwIG91ciBibG9jayBwYXJlbnQgY2hhaW4gdW50aWwg
d2UgaGl0IHRoZSBjb250YWluaW5nIGFub255bW91cyBjb2x1bW5zIGJsb2NrLgogICAgIC8vIE9u
Y2Ugd2UgaGl0IHRoZSBhbm9ueW1vdXMgY29sdW1ucyBibG9jayB3ZSdyZSBkb25lLgpAQCAtNDUw
LDcgKzQ1NywxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjpzcGxpdEJsb2NrcyhSZW5kZXJCbG9jCiAg
ICAgICAgIGlmICghYmxvY2tDdXJyLT5pc0Fub255bW91c0Jsb2NrKCkpIHsKICAgICAgICAgICAg
IG9sZENvbnQgPSBibG9ja0N1cnItPmNvbnRpbnVhdGlvbigpOwogICAgICAgICAgICAgYmxvY2tD
dXJyLT5zZXRDb250aW51YXRpb24oY2xvbmVCbG9jayk7CisgICAgICAgICAgICBpZiAoY2xvbmVC
bG9jaykKKyAgICAgICAgICAgICAgICBjbG9uZUJsb2NrLT5zZXRDb250aW51YXRvcihibG9ja0N1
cnIpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBjbG9uZUJsb2NrLT5zZXRDb250aW51YXRp
b24ob2xkQ29udCk7CisgICAgICAgICAgICBpZiAob2xkQ29udCkKKyAgICAgICAgICAgICAgICBv
bGRDb250LT5zZXRDb250aW51YXRvcihjbG9uZUJsb2NrKTsKICAgICAgICAgfQogCiAgICAgICAg
IC8vIFNvbWVvbmUgbWF5IGhhdmUgaW5kaXJlY3RseSBjYXVzZWQgYSA8cT4gdG8gc3BsaXQuICBX
aGVuIHRoaXMgaGFwcGVucywgdGhlIDphZnRlciBjb250ZW50CkBAIC02NDYsOCArNjU4LDEyIEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmFkZENoaWxkSWdub3JpbmdBbm9ueW0KICAgICAgICAgICAgIC8v
IFdlIGFyZSBuZXN0ZWQgaW5zaWRlIGEgbXVsdGktY29sdW1uIGVsZW1lbnQgYW5kIGFyZSBiZWlu
ZyBzcGxpdCBieSB0aGUgc3Bhbi4gIFdlIGhhdmUgdG8gYnJlYWsgdXAKICAgICAgICAgICAgIC8v
IG91ciBibG9jayBpbnRvIGNvbnRpbnVhdGlvbnMuCiAgICAgICAgICAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogb2xkQ29udGludWF0aW9uID0gY29udGludWF0aW9uKCk7CisgICAgICAgICAgICBp
ZiAob2xkQ29udGludWF0aW9uKQorICAgICAgICAgICAgICAgIG9sZENvbnRpbnVhdGlvbi0+c2V0
Q29udGludWF0b3IoMCk7CiAgICAgICAgICAgICBzZXRDb250aW51YXRpb24obmV3Qm94KTsKLQor
ICAgICAgICAgICAgaWYgKG5ld0JveCkKKyAgICAgICAgICAgICAgICBuZXdCb3gtPnNldENvbnRp
bnVhdG9yKHRoaXMpOworICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBTb21lb25lIG1heSBo
YXZlIHB1dCBhIDxwPiBpbnNpZGUgYSA8cT4sIGNhdXNpbmcgYSBzcGxpdC4gIFdoZW4gdGhpcyBo
YXBwZW5zLCB0aGUgOmFmdGVyIGNvbnRlbnQKICAgICAgICAgICAgIC8vIGhhcyB0byBtb3ZlIGlu
dG8gdGhlIGlubGluZSBjb250aW51YXRpb24uICBDYWxsIHVwZGF0ZUJlZm9yZUFmdGVyQ29udGVu
dCB0byBlbnN1cmUgdGhhdCBvdXIgOmFmdGVyCiAgICAgICAgICAgICAvLyBjb250ZW50IGdldHMg
cHJvcGVybHkgZGVzdHJveWVkLgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gNjM2NzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw2ICsxOTEsNyBAQCBi
b29sIFJlbmRlckJveE1vZGVsT2JqZWN0OjpzaG91bGRQYWludEF0CiBSZW5kZXJCb3hNb2RlbE9i
amVjdDo6UmVuZGVyQm94TW9kZWxPYmplY3QoTm9kZSogbm9kZSkKICAgICA6IFJlbmRlck9iamVj
dChub2RlKQogICAgICwgbV9sYXllcigwKQorICAgICwgbV9jb250aW51YXRvcigwKQogewogfQog
CkBAIC0yMTIsNiArMjEzLDggQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6ZGVzdHJveUxh
eWVyKAogCiB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpkZXN0cm95KCkKIHsKKyAgICBBU1NF
UlQoIW1fY29udGludWF0b3IpOworICAgIAogICAgIC8vIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9y
ZSB3ZSBkZXN0cm95IHRoZSBSZW5kZXJPYmplY3QuCiAgICAgaWYgKG1fbGF5ZXIpCiAgICAgICAg
IG1fbGF5ZXItPmNsZWFyQ2xpcFJlY3RzKCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmgJKHJldmlzaW9uIDYzNjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSwxMCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKFRpbWVyPFJl
bmRlckJveE1vZGVsT2JqZWN0PiopOwogCiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGlvblN0
YXRlKFNlbGVjdGlvblN0YXRlIHMpOworICAgIAorICAgIHZvaWQgc2V0Q29udGludWF0b3IoUmVu
ZGVyQm94TW9kZWxPYmplY3QqIGMpIHsgbV9jb250aW51YXRvciA9IGM7IH0KKyAgICBSZW5kZXJC
b3hNb2RlbE9iamVjdCogY29udGludWF0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbnRpbnVhdG9y
OyB9CisgICAgICAgIAogcHJvdGVjdGVkOgogICAgIHZvaWQgY2FsY3VsYXRlQmFja2dyb3VuZElt
YWdlR2VvbWV0cnkoY29uc3QgRmlsbExheWVyKiwgaW50IHR4LCBpbnQgdHksIGludCB3LCBpbnQg
aCwgSW50UmVjdCYgZGVzdFJlY3QsIEludFBvaW50JiBwaGFzZSwgSW50U2l6ZSYgdGlsZVNpemUp
OwogCkBAIC0xMjAsNyArMTI0LDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUmVuZGVy
VmlldzsKIAogICAgIFJlbmRlckxheWVyKiBtX2xheWVyOwotICAgIAorICAgIFJlbmRlckJveE1v
ZGVsT2JqZWN0KiBtX2NvbnRpbnVhdG9yOworCiAgICAgLy8gVXNlZCB0byBzdG9yZSBzdGF0ZSBi
ZXR3ZWVuIHN0eWxlV2lsbENoYW5nZSBhbmQgc3R5bGVEaWRDaGFuZ2UKICAgICBzdGF0aWMgYm9v
bCBzX3dhc0Zsb2F0aW5nOwogICAgIHN0YXRpYyBib29sIHNfaGFkTGF5ZXI7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDYzNjcyKQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQCB2
b2lkIFJlbmRlcklubGluZTo6ZGVzdHJveSgpCiAgICAgLy8gVGhlIHJlYXNvbiB3ZSBkb24ndCBk
ZXN0cm95IGl0IGJlZm9yZSBhbm9ueW1vdXMgY2hpbGRyZW4gaXMgdGhhdCB0aGV5IG1heQogICAg
IC8vIGhhdmUgY29udGludWF0aW9ucyBvZiB0aGVpciBvd24gdGhhdCBhcmUgYW5vbnltb3VzIGNo
aWxkcmVuIG9mIG91ciBjb250aW51YXRpb24uCiAgICAgaWYgKG1fY29udGludWF0aW9uKSB7Cisg
ICAgICAgIG1fY29udGludWF0aW9uLT5zZXRDb250aW51YXRvcigwKTsKICAgICAgICAgbV9jb250
aW51YXRpb24tPmRlc3Ryb3koKTsKICAgICAgICAgbV9jb250aW51YXRpb24gPSAwOwogICAgIH0K
QEAgLTEyNiw2ICsxMjcsOCBAQCB2b2lkIFJlbmRlcklubGluZTo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVECiAgICAgICAgIGN1cnJDb250LT5zZXRDb250aW51YXRpb24oMCk7CiAgICAgICAgIGN1cnJD
b250LT5zZXRTdHlsZShzdHlsZSgpKTsKICAgICAgICAgY3VyckNvbnQtPnNldENvbnRpbnVhdGlv
bihuZXh0Q29udCk7CisgICAgICAgIGlmIChuZXh0Q29udCkKKyAgICAgICAgICAgIG5leHRDb250
LT5zZXRDb250aW51YXRvcihjdXJyQ29udCk7CiAgICAgfQogCiAgICAgbV9saW5lSGVpZ2h0ID0g
LTE7CkBAIC0xOTQsOCArMTk3LDEyIEBAIHZvaWQgUmVuZGVySW5saW5lOjphZGRDaGlsZElnbm9y
aW5nQ29udGkKICAgICAgICAgUmVuZGVyQmxvY2sqIG5ld0JveCA9IG5ldyAocmVuZGVyQXJlbmEo
KSkgUmVuZGVyQmxvY2soZG9jdW1lbnQoKSAvKiBhbm9ueW1vdXMgYm94ICovKTsKICAgICAgICAg
bmV3Qm94LT5zZXRTdHlsZShuZXdTdHlsZS5yZWxlYXNlKCkpOwogICAgICAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdCogb2xkQ29udGludWF0aW9uID0gY29udGludWF0aW9uKCk7CisgICAgICAgIGlm
IChvbGRDb250aW51YXRpb24pCisgICAgICAgICAgICBvbGRDb250aW51YXRpb24tPnNldENvbnRp
bnVhdG9yKDApOwogICAgICAgICBzZXRDb250aW51YXRpb24obmV3Qm94KTsKLQorICAgICAgICBp
ZiAobmV3Qm94KQorICAgICAgICAgICAgbmV3Qm94LT5zZXRDb250aW51YXRvcih0aGlzKTsKKyAg
ICAgICAgCiAgICAgICAgIC8vIFNvbWVvbmUgbWF5IGhhdmUgcHV0IGEgPHA+IGluc2lkZSBhIDxx
PiwgY2F1c2luZyBhIHNwbGl0LiAgV2hlbiB0aGlzIGhhcHBlbnMsIHRoZSA6YWZ0ZXIgY29udGVu
dAogICAgICAgICAvLyBoYXMgdG8gbW92ZSBpbnRvIHRoZSBpbmxpbmUgY29udGludWF0aW9uLiAg
Q2FsbCB1cGRhdGVCZWZvcmVBZnRlckNvbnRlbnQgdG8gZW5zdXJlIHRoYXQgb3VyIDphZnRlcgog
ICAgICAgICAvLyBjb250ZW50IGdldHMgcHJvcGVybHkgZGVzdHJveWVkLgpAQCAtMjI5LDcgKzIz
Niw5IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdElubGluZXMoUmVuZGVyQmwKICAgICAvLyBD
cmVhdGUgYSBjbG9uZSBvZiB0aGlzIGlubGluZS4KICAgICBSZW5kZXJJbmxpbmUqIGNsb25lID0g
Y2xvbmVJbmxpbmUodGhpcyk7CiAgICAgY2xvbmUtPnNldENvbnRpbnVhdGlvbihvbGRDb250KTsK
LQorICAgIGlmIChvbGRDb250KQorICAgICAgICBvbGRDb250LT5zZXRDb250aW51YXRvcihjbG9u
ZSk7CisgICAgCiAgICAgLy8gTm93IHRha2UgYWxsIG9mIHRoZSBjaGlsZHJlbiBmcm9tIGJlZm9y
ZUNoaWxkIHRvIHRoZSBlbmQgYW5kIHJlbW92ZQogICAgIC8vIHRoZW0gZnJvbSB8dGhpc3wgYW5k
IHBsYWNlIHRoZW0gaW4gdGhlIGNsb25lLgogICAgIFJlbmRlck9iamVjdCogbyA9IGJlZm9yZUNo
aWxkOwpAQCAtMjQyLDcgKzI1MSw5IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdElubGluZXMo
UmVuZGVyQmwKIAogICAgIC8vIEhvb2sgfGNsb25lfCB1cCBhcyB0aGUgY29udGludWF0aW9uIG9m
IHRoZSBtaWRkbGUgYmxvY2suCiAgICAgbWlkZGxlQmxvY2stPnNldENvbnRpbnVhdGlvbihjbG9u
ZSk7Ci0KKyAgICBpZiAoY2xvbmUpCisgICAgICAgIGNsb25lLT5zZXRDb250aW51YXRvcihtaWRk
bGVCbG9jayk7CisgICAgCiAgICAgLy8gV2UgaGF2ZSBiZWVuIHJlcGFyZW50ZWQgYW5kIGFyZSBu
b3cgdW5kZXIgdGhlIGZyb21CbG9jay4gIFdlIG5lZWQKICAgICAvLyB0byB3YWxrIHVwIG91ciBp
bmxpbmUgcGFyZW50IGNoYWluIHVudGlsIHdlIGhpdCB0aGUgY29udGFpbmluZyBibG9jay4KICAg
ICAvLyBPbmNlIHdlIGhpdCB0aGUgY29udGFpbmluZyBibG9jayB3ZSdyZSBkb25lLgpAQCAtMjY5
LDggKzI4MCwxMyBAQCB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRJbmxpbmVzKFJlbmRlckJsCiAg
ICAgICAgICAgICBSZW5kZXJJbmxpbmUqIGlubGluZUN1cnIgPSB0b1JlbmRlcklubGluZShjdXJy
KTsKICAgICAgICAgICAgIG9sZENvbnQgPSBpbmxpbmVDdXJyLT5jb250aW51YXRpb24oKTsKICAg
ICAgICAgICAgIGlubGluZUN1cnItPnNldENvbnRpbnVhdGlvbihjbG9uZSk7CisgICAgICAgICAg
ICBpZiAoY2xvbmUpCisgICAgICAgICAgICAgICAgY2xvbmUtPnNldENvbnRpbnVhdG9yKGlubGlu
ZUN1cnIpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBjbG9uZS0+c2V0Q29udGludWF0aW9u
KG9sZENvbnQpOwotCisgICAgICAgICAgICBpZiAob2xkQ29udCkKKyAgICAgICAgICAgICAgICBv
bGRDb250LT5zZXRDb250aW51YXRvcihjbG9uZSk7CisgICAgICAgICAgICAKICAgICAgICAgICAg
IC8vIFNvbWVvbmUgbWF5IGhhdmUgaW5kaXJlY3RseSBjYXVzZWQgYSA8cT4gdG8gc3BsaXQuICBX
aGVuIHRoaXMgaGFwcGVucywgdGhlIDphZnRlciBjb250ZW50CiAgICAgICAgICAgICAvLyBoYXMg
dG8gbW92ZSBpbnRvIHRoZSBpbmxpbmUgY29udGludWF0aW9uLiAgQ2FsbCB1cGRhdGVCZWZvcmVB
ZnRlckNvbnRlbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGlubGluZSdzIDphZnRlcgogICAgICAgICAg
ICAgLy8gY29udGVudCBnZXRzIHByb3Blcmx5IGRlc3Ryb3llZC4KQEAgLTgwMyw2ICs4MTksOCBA
QCB2b2lkIFJlbmRlcklubGluZTo6Y2hpbGRCZWNhbWVOb25JbmxpbmUoCiAgICAgUmVuZGVyQmxv
Y2sqIG5ld0JveCA9IGNvbnRhaW5pbmdCbG9jaygpLT5jcmVhdGVBbm9ueW1vdXNCbG9jaygpOwog
ICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBvbGRDb250aW51YXRpb24gPSBjb250aW51YXRpb24o
KTsKICAgICBzZXRDb250aW51YXRpb24obmV3Qm94KTsKKyAgICBuZXdCb3gtPnNldENvbnRpbnVh
dG9yKHRoaXMpOworICAgIAogICAgIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKTsKICAgICBjaGlsZHJlbigpLT5yZW1vdmVDaGlsZE5vZGUodGhpcywgY2hp
bGQpOwogICAgIHNwbGl0RmxvdyhiZWZvcmVDaGlsZCwgbmV3Qm94LCBjaGlsZCwgb2xkQ29udGlu
dWF0aW9uKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzNjgwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDctMTkgIENocmlzIEZs
ZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92aW5nIGFuIGVsZW1lbnQgZnJv
bSBhbiBhbm9ueW1vdXMgYmxvY2sgY2F1c2VzIGNyYXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjMwOQorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9yZW1vdmVkLWFub255bW91cy1ibG9jay1jaGlsZC1jYXVzZXMtY3Jhc2gtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3JlbW92ZWQtYW5vbnltb3VzLWJsb2Nr
LWNoaWxkLWNhdXNlcy1jcmFzaC5odG1sOiBBZGRlZC4KKwogMjAxMC0wNy0xOSAgQWxleGV5IFBy
b3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvcmVtb3ZlZC1hbm9ueW1vdXMt
YmxvY2stY2hpbGQtY2F1c2VzLWNyYXNoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3JlbW92ZWQtYW5vbnltb3VzLWJsb2NrLWNoaWxkLWNhdXNl
cy1jcmFzaC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3Np
YmlsaXR5L3JlbW92ZWQtYW5vbnltb3VzLWJsb2NrLWNoaWxkLWNhdXNlcy1jcmFzaC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK2EKK2EKK0luIGNlcnRhaW4gY2Fz
ZXMgcmVtb3ZpbmcgYSBkZWNlbmRlbnQgZnJvbSBhbiBhbm9ueW1vdXMgYmxvY2sgZWxlbWVudCBk
b2VzIG5vdCB1cGRhdGUgdGhlIHBhcmVudCBjaGFpbiBjb3JyZWN0bHkuIFRoaXMgY2FuIGNhdXNl
IGEgY3Jhc2guCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS9yZW1vdmVkLWFub255bW91cy1ibG9jay1jaGlsZC1jYXVzZXMtY3Jhc2gu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3JlbW92ZWQtYW5v
bnltb3VzLWJsb2NrLWNoaWxkLWNhdXNlcy1jcmFzaC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9yZW1vdmVkLWFub255bW91cy1ibG9jay1jaGlsZC1jYXVz
ZXMtY3Jhc2guaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPg0KKzxodG1sPg0KKzxoZWFkPg0KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1z
dHlsZS5jc3MiPg0KKzxzY3JpcHQ+DQorICAgIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxz
ZTsNCisNCisgICAgZnVuY3Rpb24gcmVtb3ZlRWxlbWVudCgpIHsNCisgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdkaXYnKS5yZW1vdmVDaGlsZChkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnZGl2JykuY2hpbGRyZW5bMl0pOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIHF1ZXJ5SXNF
bmFibGVkT25EZWNlbmRhbnRzKGFjY2Vzc2liaWxpdHlPYmplY3QpIHsNCisgICAgICAgIGFjY2Vz
c2liaWxpdHlPYmplY3QuaXNFbmFibGVkDQorDQorICAgICAgICB2YXIgY291bnQgPSBhY2Nlc3Np
YmlsaXR5T2JqZWN0LmNoaWxkcmVuQ291bnQ7DQorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGNvdW50OyArK2kpDQorICAgICAgICAgICAgcXVlcnlJc0VuYWJsZWRPbkRlY2VuZGFudHMoYWNj
ZXNzaWJpbGl0eU9iamVjdC5jaGlsZEF0SW5kZXgoaSkpOw0KKyAgICB9DQorPC9zY3JpcHQ+DQor
PHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4NCis8L2hlYWQ+DQorPGJvZHk+DQorDQorPGRpdiBpZD0iZGl2Ij4NCisgIDxzcGFuPg0KKyAg
ICA8ZGl2PmE8L2Rpdj4NCisgIDwvc3Bhbj4NCisgIDxkaXYgc3R5bGU9ImZsb2F0OmxlZnQiPmE8
L2Rpdj4NCisgIDxzcGFuIHRpdGxlPSJ0aXRsZSI+Yjwvc3Bhbj4NCis8L2Rpdj4NCisNCis8cCBp
ZD0iZGVzY3JpcHRpb24iPjwvcD4NCis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4NCisNCis8c2Ny
aXB0Pg0KKyAgICBkZXNjcmlwdGlvbigiSW4gY2VydGFpbiBjYXNlcyByZW1vdmluZyBhIGRlY2Vu
ZGVudCBmcm9tIGFuIGFub255bW91cyBibG9jayBlbGVtZW50IGRvZXMgbm90IHVwZGF0ZSB0aGUg
cGFyZW50IGNoYWluIGNvcnJlY3RseS4gVGhpcyBjYW4gY2F1c2UgYSBjcmFzaC4iKTsNCisNCisg
ICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgew0KKyAgICAgICAgLy8gRmly
c3QgYnVpbGQgdXAgZnVsbCBhY2Nlc3NpYmlsaXR5IHRyZWUuDQorICAgICAgICBkb2N1bWVudC5i
b2R5LmZvY3VzKCk7DQorICAgICAgICBxdWVyeUlzRW5hYmxlZE9uRGVjZW5kYW50cyhhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudCk7DQorICAgICAgICANCisgICAgICAgIHJl
bW92ZUVsZW1lbnQoKQ0KKyAgICAgICAgDQorICAgICAgICAvLyBOb3cgY2FsbCBpc0VuYWJsZWQg
b24gZWFjaCBhY2Nlc3NpYmlsaXR5IG9iamVjdC4NCisgICAgICAgIGRvY3VtZW50LmJvZHkuZm9j
dXMoKTsNCisgICAgICAgIHF1ZXJ5SXNFbmFibGVkT25EZWNlbmRhbnRzKGFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmZvY3VzZWRFbGVtZW50KTsNCisgICAgfQ0KKw0KKyAgICBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOw0KKzwvc2NyaXB0Pg0KKw0KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pg0KKzwvYm9keT4NCis8L2h0bWw+DQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62708</attachid>
            <date>2010-07-27 10:22:48 -0700</date>
            <delta_ts>2010-08-10 11:23:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42309-20100727102246.patch</filename>
            <type>text/plain</type>
            <size>16936</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDE0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMTAtMDctMjcgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZW1vdmluZyBhbiBlbGVtZW50IGZyb20gYW4gYW5vbnltb3VzIGJsb2NrIGNhdXNlcyBjcmFz
aAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIzMDkK
KworICAgICAgICBUaGVyZSB3YXMgYSBjYXNlIHdoZXJlIGEgY29udGludWF0aW9uIHdhcyBhZGRl
ZCBhcyBhIGNoaWxkLCBidXQgaWYgeW91IGFza2VkCisgICAgICAgIHRoYXQgY2hpbGQgd2hvIGlz
IHlvdXIgcGFyZW50LCBpdCB3b3VsZCByZXR1cm4gdGhlIHdyb25nIGFuc3dlci4KKworICAgICAg
ICBUaGUgc3BlY2lmaWMgc2NlbmFyaW8gd2FzIHdoZW4gYSBzaWJsaW5nIG9mIGFuIGVsZW1lbnQg
d2hvIHdhcyB0aGUgc3RhcnQgb2YgYSAKKyAgICAgICAgY29udGludWF0aW9uIHdhcyBwcmVzZW50
LiBSZXRyaWV2aW5nIHRoZSBwYXJlbnQgb2JqZWN0IGhhZCB0aGVuIGZvbGxvdyB0aGUgc2libGlu
ZworICAgICAgICBjaGFpbiBhbmQgdGhlbiBmb2xsb3cgdGhlIG9yaWdpbmF0aW5nIGNvbnRpbnVh
dGlvbiBjaGFpbi4gCisKKyAgICAgICAgVG8gaGVscCB0aGF0IHByb2Nlc3MsIEkndmUgYWRkZWQg
c2V0Q29udGludWF0b3IoKSwgY29udGludWF0b3IoKSBtZXRob2RzIHRoYXQKKyAgICAgICAgbWly
cm9yIHNldENvbnRpbnVhdGlvbigpLiBUaGVzZSBhbGxvdyBvbmUgdG8gZm9sbG93IHRoZSBjaGFp
biBiYWNrIHVwIHRvIHdoZXJlIGl0IHN0YXJ0ZWQuCisKKyAgICAgICAgVGVzdDogYWNjZXNzaWJp
bGl0eS9yZW1vdmVkLWFub255bW91cy1ibG9jay1jaGlsZC1jYXVzZXMtY3Jhc2guaHRtbAorCisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om5leHRTaWJsaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnJlbmRlclBhcmVu
dE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpw
YXJlbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OnNwbGl0QmxvY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRD
aGlsZElnbm9yaW5nQW5vbnltb3VzQ29sdW1uQmxvY2tzKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9k
ZWxPYmplY3Q6OlJlbmRlckJveE1vZGVsT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveE1vZGVsT2JqZWN0OjpkZXN0cm95KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpz
ZXRDb250aW51YXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6
Y29udGludWF0b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlcklubGluZTo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW5saW5lOjphZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlcklubGluZTo6c3BsaXRJbmxpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklu
bGluZTo6Y2hpbGRCZWNhbWVOb25JbmxpbmUpOgorCiAyMDEwLTA3LTI3ICBDaHJpcyBGbGVpemFj
aCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA2NDEzOSkKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQzLDEw
ICszNDMsMTAgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlcgogICAg
IGVsc2UgaWYgKGlzSW5saW5lV2l0aENvbnRpbnVhdGlvbihtX3JlbmRlcmVyLT5wYXJlbnQoKSkp
IHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBjb250aW51YXRpb24gPSB0b1JlbmRlcklubGluZSht
X3JlbmRlcmVyLT5wYXJlbnQoKSktPmNvbnRpbnVhdGlvbigpOwogICAgICAgICAKLSAgICAgICAg
Ly8gQ2FzZSA0YTogY29udGludWF0aW9uIGlzIGEgYmxvY2sgLSBpbiB0aGlzIGNhc2UgdGhlIGJs
b2NrIGl0c2VsZiBpcyB0aGUgbmV4dCBzaWJsaW5nLgorICAgICAgICAvLyBDYXNlIDVhOiBjb250
aW51YXRpb24gaXMgYSBibG9jayAtIGluIHRoaXMgY2FzZSB0aGUgYmxvY2sgaXRzZWxmIGlzIHRo
ZSBuZXh0IHNpYmxpbmcuCiAgICAgICAgIGlmIChjb250aW51YXRpb24tPmlzUmVuZGVyQmxvY2so
KSkKICAgICAgICAgICAgIG5leHRTaWJsaW5nID0gY29udGludWF0aW9uOwotICAgICAgICAvLyBD
YXNlIDRiOiBjb250aW51YXRpb24gaXMgYW4gaW5saW5lIC0gaW4gdGhpcyBjYXNlIHRoZSBpbmxp
bmUncyBmaXJzdCBjaGlsZCBpcyB0aGUgbmV4dCBzaWJsaW5nCisgICAgICAgIC8vIENhc2UgNWI6
IGNvbnRpbnVhdGlvbiBpcyBhbiBpbmxpbmUgLSBpbiB0aGlzIGNhc2UgdGhlIGlubGluZSdzIGZp
cnN0IGNoaWxkIGlzIHRoZSBuZXh0IHNpYmxpbmcKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
bmV4dFNpYmxpbmcgPSBmaXJzdENoaWxkQ29uc2lkZXJpbmdDb250aW51YXRpb24oY29udGludWF0
aW9uKTsKICAgICB9CkBAIC0zNjYsNyArMzY2LDggQEAgUmVuZGVyT2JqZWN0KiBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OgogCiAgICAgLy8gQ2FzZSAxOiBub2RlIGlzIGEgYmxvY2sgYW5kIGlz
IGFuIGlubGluZSdzIGNvbnRpbnVhdGlvbi4gUGFyZW50CiAgICAgLy8gaXMgdGhlIHN0YXJ0IG9m
IHRoZSBjb250aW51YXRpb24gY2hhaW4uCi0gICAgUmVuZGVySW5saW5lKiBzdGFydE9mQ29udHMg
PSAwOworICAgIFJlbmRlck9iamVjdCogc3RhcnRPZkNvbnRzID0gMDsKKyAgICBSZW5kZXJPYmpl
Y3QqIGZpcnN0Q2hpbGQgPSAwOwogICAgIGlmIChtX3JlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkg
JiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51YXRpb25zKG1fcmVuZGVyZXIpKSkKICAg
ICAgICAgcGFyZW50ID0gc3RhcnRPZkNvbnRzOwogCkBAIC0zNzUsNiArMzc2LDE2IEBAIFJlbmRl
ck9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDoKICAgICBlbHNlIGlmIChwYXJlbnQg
JiYgcGFyZW50LT5pc1JlbmRlcklubGluZSgpICYmIChzdGFydE9mQ29udHMgPSBzdGFydE9mQ29u
dGludWF0aW9ucyhwYXJlbnQpKSkKICAgICAgICAgcGFyZW50ID0gc3RhcnRPZkNvbnRzOwogICAg
IAorICAgIC8vIENhc2UgMzogRm9sbG93IHRoZSBjb250aW51YXRvciBjaGFpbiB1bnRpbCB3ZSBn
ZXQgdG8gdGhlIHBhcmVudCB0aGF0IGZvdW5kIHRoaXMgcmVuZGVyZXIuCisgICAgZWxzZSBpZiAo
cGFyZW50ICYmIChmaXJzdENoaWxkID0gcGFyZW50LT5maXJzdENoaWxkKCkpKSB7CisgICAgICAg
IGlmIChmaXJzdENoaWxkLT5pc0JveE1vZGVsT2JqZWN0KCkgJiYgKHN0YXJ0T2ZDb250cyA9IHRv
UmVuZGVyQm94TW9kZWxPYmplY3QoZmlyc3RDaGlsZCktPmNvbnRpbnVhdG9yKCkpKSB7CisgICAg
ICAgICAgICBmb3IgKFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250aW51YXRvciA9IHRvUmVuZGVy
Qm94TW9kZWxPYmplY3Qoc3RhcnRPZkNvbnRzKTsgY29udGludWF0b3I7IGNvbnRpbnVhdG9yID0g
Y29udGludWF0b3ItPmNvbnRpbnVhdG9yKCkpCisgICAgICAgICAgICAgICAgc3RhcnRPZkNvbnRz
ID0gY29udGludWF0b3I7CisgICAgICAgICAgICAvLyBUaGUgY29udGludWF0b3IgY2hhaW4gd2Fz
IGZvbGxvd2VkIHRvIHRoZSBlbmQuIE5vdyB0YWtlIGl0cyBwYXJlbnQgdG8gZ2V0IHRoZSB2YWxp
ZCBwYXJlbnQuCisgICAgICAgICAgICBwYXJlbnQgPSBzdGFydE9mQ29udHMtPnBhcmVudCgpOwor
ICAgICAgICB9CisgICAgfQorICAgICAgICAKICAgICByZXR1cm4gcGFyZW50OwogfQogICAgIApA
QCAtMzI4Miw4ICszMjkzLDEwIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRk
Q2hpbGQKICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNoaWxkcmVuLnNpemUoKTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAg
ICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChjaGlsZHJlbltpXSk7Ci0gICAgICAgIH0gZWxzZQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKG9iai0+cGFyZW50T2JqZWN0KCkg
PT0gdGhpcyk7CiAgICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChvYmopOworICAgICAgICB9
CiAgICAgfQogICAgIAogICAgIC8vIGZvciBhIFJlbmRlckltYWdlLCBhZGQgdGhlIDxhcmVhPiBl
bGVtZW50cyBhcyBpbmRpdmlkdWFsIGFjY2Vzc2liaWxpdHkgb2JqZWN0cwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gNjQxMzkpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw2ICsxNjgsNyBAQCB2b2lk
IFJlbmRlckJsb2NrOjpkZXN0cm95KCkKICAgICAvLyBUaGUgcmVhc29uIHdlIGRvbid0IGRlc3Ry
b3kgaXQgYmVmb3JlIGFub255bW91cyBjaGlsZHJlbiBpcyB0aGF0IHRoZXkgbWF5CiAgICAgLy8g
aGF2ZSBjb250aW51YXRpb25zIG9mIHRoZWlyIG93biB0aGF0IGFyZSBhbm9ueW1vdXMgY2hpbGRy
ZW4gb2Ygb3VyIGNvbnRpbnVhdGlvbi4KICAgICBpZiAobV9jb250aW51YXRpb24pIHsKKyAgICAg
ICAgbV9jb250aW51YXRpb24tPnNldENvbnRpbnVhdG9yKDApOwogICAgICAgICBtX2NvbnRpbnVh
dGlvbi0+ZGVzdHJveSgpOwogICAgICAgICBtX2NvbnRpbnVhdGlvbiA9IDA7CiAgICAgfQpAQCAt
MjM5LDYgKzI0MCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGkK
ICAgICAgICAgICAgIGN1cnJDb250LT5zZXRDb250aW51YXRpb24oMCk7CiAgICAgICAgICAgICBj
dXJyQ29udC0+c2V0U3R5bGUoc3R5bGUoKSk7CiAgICAgICAgICAgICBjdXJyQ29udC0+c2V0Q29u
dGludWF0aW9uKG5leHRDb250KTsKKyAgICAgICAgICAgIGlmIChuZXh0Q29udCkKKyAgICAgICAg
ICAgICAgICBuZXh0Q29udC0+c2V0Q29udGludWF0b3IoY3VyckNvbnQpOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC00MTYsNyArNDE5LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6c3BsaXRCbG9ja3Mo
UmVuZGVyQmxvYwogICAgIC8vIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgaW5saW5lLgogICAgIFJl
bmRlckJsb2NrKiBjbG9uZUJsb2NrID0gY2xvbmUoKTsKICAgICBjbG9uZUJsb2NrLT5zZXRDb250
aW51YXRpb24ob2xkQ29udCk7Ci0KKyAgICBpZiAob2xkQ29udCkKKyAgICAgICAgb2xkQ29udC0+
c2V0Q29udGludWF0b3IoY2xvbmVCbG9jayk7CisgICAgCiAgICAgLy8gTm93IHRha2UgYWxsIG9m
IHRoZSBjaGlsZHJlbiBmcm9tIGJlZm9yZUNoaWxkIHRvIHRoZSBlbmQgYW5kIHJlbW92ZQogICAg
IC8vIHRoZW0gZnJvbSB8dGhpc3wgYW5kIHBsYWNlIHRoZW0gaW4gdGhlIGNsb25lLgogICAgIGlm
ICghYmVmb3JlQ2hpbGQgJiYgaXNBZnRlckNvbnRlbnQobGFzdENoaWxkKCkpKQpAQCAtNDI1LDcg
KzQzMCw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNwbGl0QmxvY2tzKFJlbmRlckJsb2MKICAgICAK
ICAgICAvLyBIb29rIHxjbG9uZXwgdXAgYXMgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgbWlkZGxl
IGJsb2NrLgogICAgIG1pZGRsZUJsb2NrLT5zZXRDb250aW51YXRpb24oY2xvbmVCbG9jayk7Ci0K
KyAgICBpZiAoY2xvbmVCbG9jaykKKyAgICAgICAgY2xvbmVCbG9jay0+c2V0Q29udGludWF0b3Io
bWlkZGxlQmxvY2spOworICAgIAogICAgIC8vIFdlIGhhdmUgYmVlbiByZXBhcmVudGVkIGFuZCBh
cmUgbm93IHVuZGVyIHRoZSBmcm9tQmxvY2suICBXZSBuZWVkCiAgICAgLy8gdG8gd2FsayB1cCBv
dXIgYmxvY2sgcGFyZW50IGNoYWluIHVudGlsIHdlIGhpdCB0aGUgY29udGFpbmluZyBhbm9ueW1v
dXMgY29sdW1ucyBibG9jay4KICAgICAvLyBPbmNlIHdlIGhpdCB0aGUgYW5vbnltb3VzIGNvbHVt
bnMgYmxvY2sgd2UncmUgZG9uZS4KQEAgLTQ1MSw3ICs0NTgsMTIgQEAgdm9pZCBSZW5kZXJCbG9j
azo6c3BsaXRCbG9ja3MoUmVuZGVyQmxvYwogICAgICAgICBpZiAoIWJsb2NrQ3Vyci0+aXNBbm9u
eW1vdXNCbG9jaygpKSB7CiAgICAgICAgICAgICBvbGRDb250ID0gYmxvY2tDdXJyLT5jb250aW51
YXRpb24oKTsKICAgICAgICAgICAgIGJsb2NrQ3Vyci0+c2V0Q29udGludWF0aW9uKGNsb25lQmxv
Y2spOworICAgICAgICAgICAgaWYgKGNsb25lQmxvY2spCisgICAgICAgICAgICAgICAgY2xvbmVC
bG9jay0+c2V0Q29udGludWF0b3IoYmxvY2tDdXJyKTsKKyAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2xvbmVCbG9jay0+c2V0Q29udGludWF0aW9uKG9sZENvbnQpOworICAgICAgICAgICAgaWYg
KG9sZENvbnQpCisgICAgICAgICAgICAgICAgb2xkQ29udC0+c2V0Q29udGludWF0b3IoY2xvbmVC
bG9jayk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBTb21lb25lIG1heSBoYXZlIGluZGlyZWN0
bHkgY2F1c2VkIGEgPHE+IHRvIHNwbGl0LiAgV2hlbiB0aGlzIGhhcHBlbnMsIHRoZSA6YWZ0ZXIg
Y29udGVudApAQCAtNjQ3LDggKzY1OSwxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRDaGlsZEln
bm9yaW5nQW5vbnltCiAgICAgICAgICAgICAvLyBXZSBhcmUgbmVzdGVkIGluc2lkZSBhIG11bHRp
LWNvbHVtbiBlbGVtZW50IGFuZCBhcmUgYmVpbmcgc3BsaXQgYnkgdGhlIHNwYW4uICBXZSBoYXZl
IHRvIGJyZWFrIHVwCiAgICAgICAgICAgICAvLyBvdXIgYmxvY2sgaW50byBjb250aW51YXRpb25z
LgogICAgICAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnRpbnVhdGlvbiA9IGNv
bnRpbnVhdGlvbigpOworICAgICAgICAgICAgaWYgKG9sZENvbnRpbnVhdGlvbikKKyAgICAgICAg
ICAgICAgICBvbGRDb250aW51YXRpb24tPnNldENvbnRpbnVhdG9yKDApOwogICAgICAgICAgICAg
c2V0Q29udGludWF0aW9uKG5ld0JveCk7Ci0KKyAgICAgICAgICAgIGlmIChuZXdCb3gpCisgICAg
ICAgICAgICAgICAgbmV3Qm94LT5zZXRDb250aW51YXRvcih0aGlzKTsKKyAgICAgICAgICAgIAog
ICAgICAgICAgICAgLy8gU29tZW9uZSBtYXkgaGF2ZSBwdXQgYSA8cD4gaW5zaWRlIGEgPHE+LCBj
YXVzaW5nIGEgc3BsaXQuICBXaGVuIHRoaXMgaGFwcGVucywgdGhlIDphZnRlciBjb250ZW50CiAg
ICAgICAgICAgICAvLyBoYXMgdG8gbW92ZSBpbnRvIHRoZSBpbmxpbmUgY29udGludWF0aW9uLiAg
Q2FsbCB1cGRhdGVCZWZvcmVBZnRlckNvbnRlbnQgdG8gZW5zdXJlIHRoYXQgb3VyIDphZnRlcgog
ICAgICAgICAgICAgLy8gY29udGVudCBnZXRzIHByb3Blcmx5IGRlc3Ryb3llZC4KSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDY0MTM5
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTEsNiArMTkxLDcgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2hv
dWxkUGFpbnRBdAogUmVuZGVyQm94TW9kZWxPYmplY3Q6OlJlbmRlckJveE1vZGVsT2JqZWN0KE5v
ZGUqIG5vZGUpCiAgICAgOiBSZW5kZXJPYmplY3Qobm9kZSkKICAgICAsIG1fbGF5ZXIoMCkKKyAg
ICAsIG1fY29udGludWF0b3IoMCkKIHsKIH0KIApAQCAtMjEyLDYgKzIxMyw4IEBAIHZvaWQgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6OmRlc3Ryb3lMYXllcigKIAogdm9pZCBSZW5kZXJCb3hNb2RlbE9i
amVjdDo6ZGVzdHJveSgpCiB7CisgICAgQVNTRVJUKCFtX2NvbnRpbnVhdG9yKTsKKyAgICAKICAg
ICAvLyBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgd2UgZGVzdHJveSB0aGUgUmVuZGVyT2JqZWN0
LgogICAgIGlmIChtX2xheWVyKQogICAgICAgICBtX2xheWVyLT5jbGVhckNsaXBSZWN0cygpOwpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCShyZXZpc2lvbiA2
NDEzOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwNSw2ICsxMDUsMTAgQEAgcHVibGljOgogICAgIHZvaWQgaGlnaFF1YWxp
dHlSZXBhaW50VGltZXJGaXJlZChUaW1lcjxSZW5kZXJCb3hNb2RlbE9iamVjdD4qKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzKTsKKyAgICAK
KyAgICB2b2lkIHNldENvbnRpbnVhdG9yKFJlbmRlckJveE1vZGVsT2JqZWN0KiBjKSB7IG1fY29u
dGludWF0b3IgPSBjOyB9CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRpbnVhdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9jb250aW51YXRvcjsgfQorICAgICAgICAKIHByb3RlY3RlZDoKICAg
ICB2b2lkIGNhbGN1bGF0ZUJhY2tncm91bmRJbWFnZUdlb21ldHJ5KGNvbnN0IEZpbGxMYXllcios
IGludCB0eCwgaW50IHR5LCBpbnQgdywgaW50IGgsIEludFJlY3QmIGRlc3RSZWN0LCBJbnRQb2lu
dCYgcGhhc2UsIEludFNpemUmIHRpbGVTaXplKTsKIApAQCAtMTIwLDcgKzEyNCw4IEBAIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlclZpZXc7CiAKICAgICBSZW5kZXJMYXllciogbV9s
YXllcjsKLSAgICAKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogbV9jb250aW51YXRvcjsKKwog
ICAgIC8vIFVzZWQgdG8gc3RvcmUgc3RhdGUgYmV0d2VlbiBzdHlsZVdpbGxDaGFuZ2UgYW5kIHN0
eWxlRGlkQ2hhbmdlCiAgICAgc3RhdGljIGJvb2wgc193YXNGbG9hdGluZzsKICAgICBzdGF0aWMg
Ym9vbCBzX2hhZExheWVyOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZp
c2lvbiA2NDEzOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmRlc3Ryb3koKQog
ICAgIC8vIFRoZSByZWFzb24gd2UgZG9uJ3QgZGVzdHJveSBpdCBiZWZvcmUgYW5vbnltb3VzIGNo
aWxkcmVuIGlzIHRoYXQgdGhleSBtYXkKICAgICAvLyBoYXZlIGNvbnRpbnVhdGlvbnMgb2YgdGhl
aXIgb3duIHRoYXQgYXJlIGFub255bW91cyBjaGlsZHJlbiBvZiBvdXIgY29udGludWF0aW9uLgog
ICAgIGlmIChtX2NvbnRpbnVhdGlvbikgeworICAgICAgICBtX2NvbnRpbnVhdGlvbi0+c2V0Q29u
dGludWF0b3IoMCk7CiAgICAgICAgIG1fY29udGludWF0aW9uLT5kZXN0cm95KCk7CiAgICAgICAg
IG1fY29udGludWF0aW9uID0gMDsKICAgICB9CkBAIC0xMjYsNiArMTI3LDggQEAgdm9pZCBSZW5k
ZXJJbmxpbmU6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRAogICAgICAgICBjdXJyQ29udC0+c2V0Q29u
dGludWF0aW9uKDApOwogICAgICAgICBjdXJyQ29udC0+c2V0U3R5bGUoc3R5bGUoKSk7CiAgICAg
ICAgIGN1cnJDb250LT5zZXRDb250aW51YXRpb24obmV4dENvbnQpOworICAgICAgICBpZiAobmV4
dENvbnQpCisgICAgICAgICAgICBuZXh0Q29udC0+c2V0Q29udGludWF0b3IoY3VyckNvbnQpOwog
ICAgIH0KIAogICAgIG1fbGluZUhlaWdodCA9IC0xOwpAQCAtMTk0LDggKzE5NywxMiBAQCB2b2lk
IFJlbmRlcklubGluZTo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRpCiAgICAgICAgIFJlbmRlckJsb2Nr
KiBuZXdCb3ggPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlckJsb2NrKGRvY3VtZW50KCkgLyog
YW5vbnltb3VzIGJveCAqLyk7CiAgICAgICAgIG5ld0JveC0+c2V0U3R5bGUobmV3U3R5bGUucmVs
ZWFzZSgpKTsKICAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnRpbnVhdGlvbiA9
IGNvbnRpbnVhdGlvbigpOworICAgICAgICBpZiAob2xkQ29udGludWF0aW9uKQorICAgICAgICAg
ICAgb2xkQ29udGludWF0aW9uLT5zZXRDb250aW51YXRvcigwKTsKICAgICAgICAgc2V0Q29udGlu
dWF0aW9uKG5ld0JveCk7Ci0KKyAgICAgICAgaWYgKG5ld0JveCkKKyAgICAgICAgICAgIG5ld0Jv
eC0+c2V0Q29udGludWF0b3IodGhpcyk7CisgICAgICAgIAogICAgICAgICAvLyBTb21lb25lIG1h
eSBoYXZlIHB1dCBhIDxwPiBpbnNpZGUgYSA8cT4sIGNhdXNpbmcgYSBzcGxpdC4gIFdoZW4gdGhp
cyBoYXBwZW5zLCB0aGUgOmFmdGVyIGNvbnRlbnQKICAgICAgICAgLy8gaGFzIHRvIG1vdmUgaW50
byB0aGUgaW5saW5lIGNvbnRpbnVhdGlvbi4gIENhbGwgdXBkYXRlQmVmb3JlQWZ0ZXJDb250ZW50
IHRvIGVuc3VyZSB0aGF0IG91ciA6YWZ0ZXIKICAgICAgICAgLy8gY29udGVudCBnZXRzIHByb3Bl
cmx5IGRlc3Ryb3llZC4KQEAgLTIyOSw3ICsyMzYsOSBAQCB2b2lkIFJlbmRlcklubGluZTo6c3Bs
aXRJbmxpbmVzKFJlbmRlckJsCiAgICAgLy8gQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBpbmxpbmUu
CiAgICAgUmVuZGVySW5saW5lKiBjbG9uZSA9IGNsb25lSW5saW5lKHRoaXMpOwogICAgIGNsb25l
LT5zZXRDb250aW51YXRpb24ob2xkQ29udCk7Ci0KKyAgICBpZiAob2xkQ29udCkKKyAgICAgICAg
b2xkQ29udC0+c2V0Q29udGludWF0b3IoY2xvbmUpOworICAgIAogICAgIC8vIE5vdyB0YWtlIGFs
bCBvZiB0aGUgY2hpbGRyZW4gZnJvbSBiZWZvcmVDaGlsZCB0byB0aGUgZW5kIGFuZCByZW1vdmUK
ICAgICAvLyB0aGVtIGZyb20gfHRoaXN8IGFuZCBwbGFjZSB0aGVtIGluIHRoZSBjbG9uZS4KICAg
ICBSZW5kZXJPYmplY3QqIG8gPSBiZWZvcmVDaGlsZDsKQEAgLTI0Miw3ICsyNTEsOSBAQCB2b2lk
IFJlbmRlcklubGluZTo6c3BsaXRJbmxpbmVzKFJlbmRlckJsCiAKICAgICAvLyBIb29rIHxjbG9u
ZXwgdXAgYXMgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgbWlkZGxlIGJsb2NrLgogICAgIG1pZGRs
ZUJsb2NrLT5zZXRDb250aW51YXRpb24oY2xvbmUpOwotCisgICAgaWYgKGNsb25lKQorICAgICAg
ICBjbG9uZS0+c2V0Q29udGludWF0b3IobWlkZGxlQmxvY2spOworICAgIAogICAgIC8vIFdlIGhh
dmUgYmVlbiByZXBhcmVudGVkIGFuZCBhcmUgbm93IHVuZGVyIHRoZSBmcm9tQmxvY2suICBXZSBu
ZWVkCiAgICAgLy8gdG8gd2FsayB1cCBvdXIgaW5saW5lIHBhcmVudCBjaGFpbiB1bnRpbCB3ZSBo
aXQgdGhlIGNvbnRhaW5pbmcgYmxvY2suCiAgICAgLy8gT25jZSB3ZSBoaXQgdGhlIGNvbnRhaW5p
bmcgYmxvY2sgd2UncmUgZG9uZS4KQEAgLTI2OSw4ICsyODAsMTMgQEAgdm9pZCBSZW5kZXJJbmxp
bmU6OnNwbGl0SW5saW5lcyhSZW5kZXJCbAogICAgICAgICAgICAgUmVuZGVySW5saW5lKiBpbmxp
bmVDdXJyID0gdG9SZW5kZXJJbmxpbmUoY3Vycik7CiAgICAgICAgICAgICBvbGRDb250ID0gaW5s
aW5lQ3Vyci0+Y29udGludWF0aW9uKCk7CiAgICAgICAgICAgICBpbmxpbmVDdXJyLT5zZXRDb250
aW51YXRpb24oY2xvbmUpOworICAgICAgICAgICAgaWYgKGNsb25lKQorICAgICAgICAgICAgICAg
IGNsb25lLT5zZXRDb250aW51YXRvcihpbmxpbmVDdXJyKTsKKyAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2xvbmUtPnNldENvbnRpbnVhdGlvbihvbGRDb250KTsKLQorICAgICAgICAgICAgaWYg
KG9sZENvbnQpCisgICAgICAgICAgICAgICAgb2xkQ29udC0+c2V0Q29udGludWF0b3IoY2xvbmUp
OworICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBTb21lb25lIG1heSBoYXZlIGluZGlyZWN0
bHkgY2F1c2VkIGEgPHE+IHRvIHNwbGl0LiAgV2hlbiB0aGlzIGhhcHBlbnMsIHRoZSA6YWZ0ZXIg
Y29udGVudAogICAgICAgICAgICAgLy8gaGFzIHRvIG1vdmUgaW50byB0aGUgaW5saW5lIGNvbnRp
bnVhdGlvbi4gIENhbGwgdXBkYXRlQmVmb3JlQWZ0ZXJDb250ZW50IHRvIGVuc3VyZSB0aGF0IHRo
ZSBpbmxpbmUncyA6YWZ0ZXIKICAgICAgICAgICAgIC8vIGNvbnRlbnQgZ2V0cyBwcm9wZXJseSBk
ZXN0cm95ZWQuCkBAIC04MDMsNiArODE5LDggQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmNoaWxkQmVj
YW1lTm9uSW5saW5lKAogICAgIFJlbmRlckJsb2NrKiBuZXdCb3ggPSBjb250YWluaW5nQmxvY2so
KS0+Y3JlYXRlQW5vbnltb3VzQmxvY2soKTsKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2xk
Q29udGludWF0aW9uID0gY29udGludWF0aW9uKCk7CiAgICAgc2V0Q29udGludWF0aW9uKG5ld0Jv
eCk7CisgICAgbmV3Qm94LT5zZXRDb250aW51YXRvcih0aGlzKTsKKyAgICAKICAgICBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAgICAgY2hpbGRyZW4o
KS0+cmVtb3ZlQ2hpbGROb2RlKHRoaXMsIGNoaWxkKTsKICAgICBzcGxpdEZsb3coYmVmb3JlQ2hp
bGQsIG5ld0JveCwgY2hpbGQsIG9sZENvbnRpbnVhdGlvbik7CkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2
NDEzOSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDEzIEBACisyMDEwLTA3LTI3ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3Zp
bmcgYW4gZWxlbWVudCBmcm9tIGFuIGFub255bW91cyBibG9jayBjYXVzZXMgY3Jhc2gKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMzA5CisKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L3JlbW92ZWQtYW5vbnltb3VzLWJsb2NrLWNoaWxkLWNhdXNlcy1j
cmFzaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvcmVtb3Zl
ZC1hbm9ueW1vdXMtYmxvY2stY2hpbGQtY2F1c2VzLWNyYXNoLmh0bWw6IEFkZGVkLgorCiAyMDEw
LTA3LTI3ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLgpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9yZW1vdmVkLWFu
b255bW91cy1ibG9jay1jaGlsZC1jYXVzZXMtY3Jhc2gtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvcmVtb3ZlZC1hbm9ueW1vdXMtYmxvY2stY2hp
bGQtY2F1c2VzLWNyYXNoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvcmVtb3ZlZC1hbm9ueW1vdXMtYmxvY2stY2hpbGQtY2F1c2VzLWNyYXNo
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorYQorYQorSW4gY2Vy
dGFpbiBjYXNlcyByZW1vdmluZyBhIGRlY2VuZGVudCBmcm9tIGFuIGFub255bW91cyBibG9jayBl
bGVtZW50IGRvZXMgbm90IHVwZGF0ZSB0aGUgcGFyZW50IGNoYWluIGNvcnJlY3RseS4gVGhpcyBj
YW4gY2F1c2UgYSBjcmFzaC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3JlbW92ZWQtYW5vbnltb3VzLWJsb2NrLWNoaWxkLWNhdXNl
cy1jcmFzaC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvcmVt
b3ZlZC1hbm9ueW1vdXMtYmxvY2stY2hpbGQtY2F1c2VzLWNyYXNoLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3JlbW92ZWQtYW5vbnltb3VzLWJsb2NrLWNo
aWxkLWNhdXNlcy1jcmFzaC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+DQorPGh0bWw+DQorPGhl
YWQ+DQorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXN0eWxlLmNzcyI+DQorPHNjcmlwdD4NCisgICAgdmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IGZhbHNlOw0KKw0KKyAgICBmdW5jdGlvbiByZW1vdmVFbGVtZW50KCkgew0KKyAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdicpLnJlbW92ZUNoaWxkKGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdkaXYnKS5jaGlsZHJlblsyXSk7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24g
cXVlcnlJc0VuYWJsZWRPbkRlY2VuZGFudHMoYWNjZXNzaWJpbGl0eU9iamVjdCkgew0KKyAgICAg
ICAgYWNjZXNzaWJpbGl0eU9iamVjdC5pc0VuYWJsZWQNCisNCisgICAgICAgIHZhciBjb3VudCA9
IGFjY2Vzc2liaWxpdHlPYmplY3QuY2hpbGRyZW5Db3VudDsNCisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgY291bnQ7ICsraSkNCisgICAgICAgICAgICBxdWVyeUlzRW5hYmxlZE9uRGVjZW5k
YW50cyhhY2Nlc3NpYmlsaXR5T2JqZWN0LmNoaWxkQXRJbmRleChpKSk7DQorICAgIH0NCis8L3Nj
cmlwdD4NCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0Pg0KKzwvaGVhZD4NCis8Ym9keT4NCisNCis8ZGl2IGlkPSJkaXYiPg0KKyAgPHNw
YW4+DQorICAgIDxkaXY+YTwvZGl2Pg0KKyAgPC9zcGFuPg0KKyAgPGRpdiBzdHlsZT0iZmxvYXQ6
bGVmdCI+YTwvZGl2Pg0KKyAgPHNwYW4gdGl0bGU9InRpdGxlIj5iPC9zcGFuPg0KKzwvZGl2Pg0K
Kw0KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPg0KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pg0K
Kw0KKzxzY3JpcHQ+DQorICAgIGRlc2NyaXB0aW9uKCJJbiBjZXJ0YWluIGNhc2VzIHJlbW92aW5n
IGEgZGVjZW5kZW50IGZyb20gYW4gYW5vbnltb3VzIGJsb2NrIGVsZW1lbnQgZG9lcyBub3QgdXBk
YXRlIHRoZSBwYXJlbnQgY2hhaW4gY29ycmVjdGx5LiBUaGlzIGNhbiBjYXVzZSBhIGNyYXNoLiIp
Ow0KKw0KKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7DQorICAgICAg
ICAvLyBGaXJzdCBidWlsZCB1cCBmdWxsIGFjY2Vzc2liaWxpdHkgdHJlZS4NCisgICAgICAgIGRv
Y3VtZW50LmJvZHkuZm9jdXMoKTsNCisgICAgICAgIHF1ZXJ5SXNFbmFibGVkT25EZWNlbmRhbnRz
KGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50KTsNCisgICAgICAgIA0KKyAg
ICAgICAgcmVtb3ZlRWxlbWVudCgpDQorICAgICAgICANCisgICAgICAgIC8vIE5vdyBjYWxsIGlz
RW5hYmxlZCBvbiBlYWNoIGFjY2Vzc2liaWxpdHkgb2JqZWN0Lg0KKyAgICAgICAgZG9jdW1lbnQu
Ym9keS5mb2N1cygpOw0KKyAgICAgICAgcXVlcnlJc0VuYWJsZWRPbkRlY2VuZGFudHMoYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQpOw0KKyAgICB9DQorDQorICAgIHN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7DQorPC9zY3JpcHQ+DQorDQorPHNjcmlwdCBzcmM9Ii4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+DQorPC9ib2R5Pg0KKzwv
aHRtbD4NCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64034</attachid>
            <date>2010-08-10 11:23:25 -0700</date>
            <delta_ts>2010-08-10 13:45:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42309-20100810112324.patch</filename>
            <type>text/plain</type>
            <size>8195</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTA3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDgtMTAgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZW1vdmluZyBhbiBlbGVtZW50IGZyb20gYW4gYW5vbnltb3VzIGJsb2NrIGNhdXNlcyBjcmFz
aAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIzMDkK
KworICAgICAgICBUaGVyZSB3YXMgYSBjYXNlIHdoZXJlIGEgY29udGludWF0aW9uIHdhcyBhZGRl
ZCBhcyBhIGNoaWxkLCBidXQgaWYgeW91IGFza2VkCisgICAgICAgIHRoYXQgY2hpbGQgd2hvIGlz
IHlvdXIgcGFyZW50LCBpdCB3b3VsZCByZXR1cm4gdGhlIHdyb25nIGFuc3dlci4KKyAgIAorICAg
ICAgICBUaGUgc3BlY2lmaWMgc2NlbmFyaW8gd2FzIHdoZW4gYSBzaWJsaW5nIG9mIGFuIGVsZW1l
bnQgd2hvIHdhcyB0aGUgc3RhcnQgb2YgYSAKKyAgICAgICAgY29udGludWF0aW9uIHdhcyBwcmVz
ZW50LiBSZXRyaWV2aW5nIHRoZSBwYXJlbnQgb2JqZWN0IGhhZCB0aGVuIGZvbGxvdyB0aGUgc2li
bGluZworICAgICAgICBjaGFpbiBhbmQgdGhlbiBmb2xsb3cgdGhlIG9yaWdpbmF0aW5nIGNvbnRp
bnVhdGlvbiBjaGFpbi4KKworICAgICAgICBUZXN0OiBhY2Nlc3NpYmlsaXR5L3JlbW92ZWQtYW5v
bnltb3VzLWJsb2NrLWNoaWxkLWNhdXNlcy1jcmFzaC5odG1sCisKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bmV4dFNpYmxpbmcpOgorICAgICAgICAgICAgRml4
IGVycm9uZW91cyBjb21tZW50CisgICAgICAgIChXZWJDb3JlOjpuZXh0Q29udGludWF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnJlbmRlclBhcmVu
dE9iamVjdCk6CisgICAgICAgICAgICBIYW5kbGUgdW5oYW5kbGVkIGNvbnRpbnVhdGlvbiBjYXNl
LgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQ2hpbGRy
ZW4pOgorICAgICAgICAgICAgQVNTRVJUIHRoYXQgdGhlIHBhcmVudE9iamVjdCgpIGlzIHRoZSBz
YW1lIHdoZW4gYWRkaW5nIGEgbmV3IGNoaWxkLgorCiAyMDEwLTA4LTEwICBHYXZpbiBCYXJyYWNs
b3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXIgc3RhbXBlZCBi
eSBTYW0gV2VpbmlnLgpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNjUwNzIpCisrKyBXZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1NCwxMCArMzU0LDEwIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlS
ZW5kZXIKICAgICBlbHNlIGlmIChpc0lubGluZVdpdGhDb250aW51YXRpb24obV9yZW5kZXJlci0+
cGFyZW50KCkpKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogY29udGludWF0aW9uID0gdG9SZW5k
ZXJJbmxpbmUobV9yZW5kZXJlci0+cGFyZW50KCkpLT5jb250aW51YXRpb24oKTsKICAgICAgICAg
Ci0gICAgICAgIC8vIENhc2UgNGE6IGNvbnRpbnVhdGlvbiBpcyBhIGJsb2NrIC0gaW4gdGhpcyBj
YXNlIHRoZSBibG9jayBpdHNlbGYgaXMgdGhlIG5leHQgc2libGluZy4KKyAgICAgICAgLy8gQ2Fz
ZSA1YTogY29udGludWF0aW9uIGlzIGEgYmxvY2sgLSBpbiB0aGlzIGNhc2UgdGhlIGJsb2NrIGl0
c2VsZiBpcyB0aGUgbmV4dCBzaWJsaW5nLgogICAgICAgICBpZiAoY29udGludWF0aW9uLT5pc1Jl
bmRlckJsb2NrKCkpCiAgICAgICAgICAgICBuZXh0U2libGluZyA9IGNvbnRpbnVhdGlvbjsKLSAg
ICAgICAgLy8gQ2FzZSA0YjogY29udGludWF0aW9uIGlzIGFuIGlubGluZSAtIGluIHRoaXMgY2Fz
ZSB0aGUgaW5saW5lJ3MgZmlyc3QgY2hpbGQgaXMgdGhlIG5leHQgc2libGluZworICAgICAgICAv
LyBDYXNlIDViOiBjb250aW51YXRpb24gaXMgYW4gaW5saW5lIC0gaW4gdGhpcyBjYXNlIHRoZSBp
bmxpbmUncyBmaXJzdCBjaGlsZCBpcyB0aGUgbmV4dCBzaWJsaW5nCiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIG5leHRTaWJsaW5nID0gZmlyc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9u
KGNvbnRpbnVhdGlvbik7CiAgICAgfQpAQCAtMzY4LDYgKzM2OCwxMyBAQCBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+
Z2V0T3JDcmVhdGUobmV4dFNpYmxpbmcpOwogfQogCitzdGF0aWMgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIG5leHRDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICBpZiAo
cmVuZGVyZXItPmlzSW5saW5lKCkgJiYgIXJlbmRlcmVyLT5pc1JlcGxhY2VkKCkpCisgICAgICAg
IHJldHVybiB0b1JlbmRlcklubGluZShyZW5kZXJlciktPmNvbnRpbnVhdGlvbigpOworICAgIHJl
dHVybiB0b1JlbmRlckJsb2NrKHJlbmRlcmVyKS0+aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigp
OworfQorICAgIAogUmVuZGVyT2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpyZW5k
ZXJQYXJlbnRPYmplY3QoKSBjb25zdAogewogICAgIGlmICghbV9yZW5kZXJlcikKQEAgLTM3Nyw3
ICszODQsOCBAQCBSZW5kZXJPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6CiAKICAg
ICAvLyBDYXNlIDE6IG5vZGUgaXMgYSBibG9jayBhbmQgaXMgYW4gaW5saW5lJ3MgY29udGludWF0
aW9uLiBQYXJlbnQKICAgICAvLyBpcyB0aGUgc3RhcnQgb2YgdGhlIGNvbnRpbnVhdGlvbiBjaGFp
bi4KLSAgICBSZW5kZXJJbmxpbmUqIHN0YXJ0T2ZDb250cyA9IDA7CisgICAgUmVuZGVyT2JqZWN0
KiBzdGFydE9mQ29udHMgPSAwOworICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCA9IDA7CiAg
ICAgaWYgKG1fcmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSAmJiAoc3RhcnRPZkNvbnRzID0gc3Rh
cnRPZkNvbnRpbnVhdGlvbnMobV9yZW5kZXJlcikpKQogICAgICAgICBwYXJlbnQgPSBzdGFydE9m
Q29udHM7CiAKQEAgLTM4Niw2ICszOTQsMjAgQEAgUmVuZGVyT2JqZWN0KiBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OgogICAgIGVsc2UgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzUmVuZGVySW5s
aW5lKCkgJiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51YXRpb25zKHBhcmVudCkpKQog
ICAgICAgICBwYXJlbnQgPSBzdGFydE9mQ29udHM7CiAgICAgCisgICAgLy8gQ2FzZSAzOiBUaGUg
Zmlyc3Qgc2libGluZyBpcyB0aGUgYmVnaW5uaW5nIG9mIGEgY29udGludWF0aW9uIGNoYWluLiBG
aW5kIHRoZSBvcmlnaW4gb2YgdGhhdCBjb250aW51YXRpb24uCisgICAgZWxzZSBpZiAocGFyZW50
ICYmIChmaXJzdENoaWxkID0gcGFyZW50LT5maXJzdENoaWxkKCkpICYmIGZpcnN0Q2hpbGQtPm5v
ZGUoKSkgeworICAgICAgICAvLyBHZXQgdGhlIG5vZGUncyByZW5kZXJlciBhbmQgZm9sbG93IHRo
YXQgY29udGludWF0aW9uIGNoYWluIHVudGlsIHRoZSBmaXJzdCBjaGlsZCBpcyBmb3VuZAorICAg
ICAgICBSZW5kZXJPYmplY3QqIG5vZGVSZW5kZXJGaXJzdENoaWxkID0gZmlyc3RDaGlsZC0+bm9k
ZSgpLT5yZW5kZXJlcigpOworICAgICAgICBpZiAobm9kZVJlbmRlckZpcnN0Q2hpbGQgIT0gZmly
c3RDaGlsZCkgeworICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNvbnRzVGVzdCA9IG5v
ZGVSZW5kZXJGaXJzdENoaWxkOyBjb250c1Rlc3Q7IGNvbnRzVGVzdCA9IG5leHRDb250aW51YXRp
b24oY29udHNUZXN0KSkgeworICAgICAgICAgICAgICAgIGlmIChjb250c1Rlc3QgPT0gZmlyc3RD
aGlsZCkgeworICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBub2RlUmVuZGVyRmlyc3RDaGls
ZC0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCiAgICAgcmV0dXJu
IHBhcmVudDsKIH0KICAgICAKQEAgLTMyOTksOCArMzMyMSwxMCBAQCB2b2lkIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OmFkZENoaWxkCiAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBj
aGlsZHJlbi5zaXplKCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCiAgICAgICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoY2hpbGRyZW5baV0p
OwotICAgICAgICB9IGVsc2UKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChv
YmotPnBhcmVudE9iamVjdCgpID09IHRoaXMpOwogICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBl
bmQob2JqKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICAvLyBmb3IgYSBSZW5kZXJJbWFn
ZSwgYWRkIHRoZSA8YXJlYT4gZWxlbWVudHMgYXMgaW5kaXZpZHVhbCBhY2Nlc3NpYmlsaXR5IG9i
amVjdHMKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY1MDc3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDgtMTAgIENocmlzIEZsZWl6
YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZW1vdmluZyBhbiBlbGVtZW50IGZyb20gYW4gYW5vbnltb3Vz
IGJsb2NrIGNhdXNlcyBjcmFzaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDIzMDkKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvcmVtb3ZlZC1hbm9u
eW1vdXMtYmxvY2stY2hpbGQtY2F1c2VzLWNyYXNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9yZW1vdmVkLWFub255bW91cy1ibG9jay1jaGlsZC1jYXVzZXMt
Y3Jhc2guaHRtbDogQWRkZWQuCisKIDIwMTAtMDgtMDkgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9j
a0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEplcmVteSBPcmxvdy4KSW5kZXg6
IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvcmVtb3ZlZC1hbm9ueW1vdXMtYmxvY2stY2hpbGQt
Y2F1c2VzLWNyYXNoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L3JlbW92ZWQtYW5vbnltb3VzLWJsb2NrLWNoaWxkLWNhdXNlcy1jcmFzaC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3JlbW92
ZWQtYW5vbnltb3VzLWJsb2NrLWNoaWxkLWNhdXNlcy1jcmFzaC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK2EKK2EKK0luIGNlcnRhaW4gY2FzZXMgcmVtb3Zpbmcg
YSBkZWNlbmRlbnQgZnJvbSBhbiBhbm9ueW1vdXMgYmxvY2sgZWxlbWVudCBkb2VzIG5vdCB1cGRh
dGUgdGhlIHBhcmVudCBjaGFpbiBjb3JyZWN0bHkuIFRoaXMgY2FuIGNhdXNlIGEgY3Jhc2guCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS9yZW1vdmVkLWFub255bW91cy1ibG9jay1jaGlsZC1jYXVzZXMtY3Jhc2guaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3JlbW92ZWQtYW5vbnltb3VzLWJsb2Nr
LWNoaWxkLWNhdXNlcy1jcmFzaC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNj
ZXNzaWJpbGl0eS9yZW1vdmVkLWFub255bW91cy1ibG9jay1jaGlsZC1jYXVzZXMtY3Jhc2guaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPg0KKzxodG1sPg0KKzxoZWFkPg0KKzxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPg0K
KzxzY3JpcHQ+DQorICAgIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsNCisNCisgICAg
ZnVuY3Rpb24gcmVtb3ZlRWxlbWVudCgpIHsNCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdkaXYnKS5yZW1vdmVDaGlsZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2JykuY2hp
bGRyZW5bMl0pOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIHF1ZXJ5SXNFbmFibGVkT25EZWNl
bmRhbnRzKGFjY2Vzc2liaWxpdHlPYmplY3QpIHsNCisgICAgICAgIGFjY2Vzc2liaWxpdHlPYmpl
Y3QuaXNFbmFibGVkDQorDQorICAgICAgICB2YXIgY291bnQgPSBhY2Nlc3NpYmlsaXR5T2JqZWN0
LmNoaWxkcmVuQ291bnQ7DQorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyArK2kp
DQorICAgICAgICAgICAgcXVlcnlJc0VuYWJsZWRPbkRlY2VuZGFudHMoYWNjZXNzaWJpbGl0eU9i
amVjdC5jaGlsZEF0SW5kZXgoaSkpOw0KKyAgICB9DQorPC9zY3JpcHQ+DQorPHNjcmlwdCBzcmM9
Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4NCis8L2hlYWQ+
DQorPGJvZHk+DQorDQorPGRpdiBpZD0iZGl2Ij4NCisgIDxzcGFuPg0KKyAgICA8ZGl2PmE8L2Rp
dj4NCisgIDwvc3Bhbj4NCisgIDxkaXYgc3R5bGU9ImZsb2F0OmxlZnQiPmE8L2Rpdj4NCisgIDxz
cGFuIHRpdGxlPSJ0aXRsZSI+Yjwvc3Bhbj4NCis8L2Rpdj4NCisNCis8cCBpZD0iZGVzY3JpcHRp
b24iPjwvcD4NCis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4NCisNCis8c2NyaXB0Pg0KKyAgICBk
ZXNjcmlwdGlvbigiSW4gY2VydGFpbiBjYXNlcyByZW1vdmluZyBhIGRlY2VuZGVudCBmcm9tIGFu
IGFub255bW91cyBibG9jayBlbGVtZW50IGRvZXMgbm90IHVwZGF0ZSB0aGUgcGFyZW50IGNoYWlu
IGNvcnJlY3RseS4gVGhpcyBjYW4gY2F1c2UgYSBjcmFzaC4iKTsNCisNCisgICAgaWYgKHdpbmRv
dy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgew0KKyAgICAgICAgLy8gRmlyc3QgYnVpbGQgdXAg
ZnVsbCBhY2Nlc3NpYmlsaXR5IHRyZWUuDQorICAgICAgICBkb2N1bWVudC5ib2R5LmZvY3VzKCk7
DQorICAgICAgICBxdWVyeUlzRW5hYmxlZE9uRGVjZW5kYW50cyhhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5mb2N1c2VkRWxlbWVudCk7DQorICAgICAgICANCisgICAgICAgIHJlbW92ZUVsZW1lbnQo
KQ0KKyAgICAgICAgDQorICAgICAgICAvLyBOb3cgY2FsbCBpc0VuYWJsZWQgb24gZWFjaCBhY2Nl
c3NpYmlsaXR5IG9iamVjdC4NCisgICAgICAgIGRvY3VtZW50LmJvZHkuZm9jdXMoKTsNCisgICAg
ICAgIHF1ZXJ5SXNFbmFibGVkT25EZWNlbmRhbnRzKGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZv
Y3VzZWRFbGVtZW50KTsNCisgICAgfQ0KKw0KKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
Ow0KKzwvc2NyaXB0Pg0KKw0KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pg0KKzwvYm9keT4NCis8L2h0bWw+DQo=
</data>
<flag name="review"
          id="52497"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>