<?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>31902</bug_id>
          
          <creation_ts>2009-11-25 23:08:04 -0800</creation_ts>
          <short_desc>WebKit modifies the DOM after the compositionend event</short_desc>
          <delta_ts>2010-07-16 08:40:30 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc>http://www.danilatos.com/event-test/ExperimentTest.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Danilatos">daniel.danilatos</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>hbono</cc>
    
    <cc>joone</cc>
    
    <cc>jshin</cc>
    
    <cc>mark.tsui.01</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>suzhe</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>166657</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Danilatos">daniel.danilatos</who>
    <bug_when>2009-11-25 23:08:04 -0800</bug_when>
    <thetext>All DOM changes resulting from IME composition should be strictly bounded between compositionstart and compositionend events

Please see here, using either Linux or Windows IME:
http://www.danilatos.com/event-test/ExperimentTest.html
Use any Webkit that supports composition events, e.g. Chrome 4 or Webkit after http://trac.webkit.org/changeset/50968/trunk
(Note, I haven&apos;t updated the test page to show the compositionupdate event yet, but this is not particularly relevant).

Also note that, if the composition is not cancelled, i.e. if there is to be a textInput event as well, then we get a 2nd compositionstart/update/end cycle after the normal one, where the content is basically deleted and re-inserted. I think this is bad too (but webkit has been doing this for a while).

A few possible ways to fix:
a) Simply ensure compositionend gets fired after the last dom change (don&apos;t fire it and then change the dom once more).
b) Same as (a), but to avoid the 2nd round of composition events, have textInput come before compositionend. That way when textInput is triggered, the content has been removed so textInput is still a preview of what is about to be inserted (if that is in fact desirable, I&apos;m guessing that would be why webkit deletes then re-inserts the content)
c) Same as (a), but to avoid the 2nd round of composition events, *and* still have textInput fire after compositionend, stop the deleting and re-inserting of content. Instead, textInput is just informational and happens after-the-fact (thus cancelling it has no effect).

b) is preferred by Hironori (cc&apos;d) and me, but contradicts the current DOM Level 3 spec, which says textInput must come after compositionend. That said, hbono and I are involved with that part of the spec (and he drafted it), so based on our implementation experience it could very well be worth trying to change the spec while it&apos;s still fresh.

This issue is also tracked at:
http://code.google.com/p/chromium/issues/detail?id=28246</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200582</commentid>
    <comment_count>1</comment_count>
    <who name="James Su">suzhe</who>
    <bug_when>2010-03-16 21:45:59 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; All DOM changes resulting from IME composition should be strictly bounded
&gt; between compositionstart and compositionend events
How the DOM will be changed by a compositionend event? For now, a compositionend event will only update the composition text (the text being selected). If the following textInput event is cancelled, the composition text will be left unconfirmed. See chrome issue: http://crbug.com/30982 for reference.

The current spec states that composition events can be cancelled. Are you plan to modify the spec to make them non-cancellable? IMHO the semantic of cancelling these events is confusing and may not be possible to be implemented.

&gt; 
&gt; Please see here, using either Linux or Windows IME:
&gt; http://www.danilatos.com/event-test/ExperimentTest.html
&gt; Use any Webkit that supports composition events, e.g. Chrome 4 or Webkit after
&gt; http://trac.webkit.org/changeset/50968/trunk
&gt; (Note, I haven&apos;t updated the test page to show the compositionupdate event yet,
&gt; but this is not particularly relevant).
&gt; 
&gt; Also note that, if the composition is not cancelled, i.e. if there is to be a
&gt; textInput event as well, then we get a 2nd compositionstart/update/end cycle
&gt; after the normal one, where the content is basically deleted and re-inserted. I
&gt; think this is bad too (but webkit has been doing this for a while).
I tested it on Chrome Linux with SCIM input method, but didn&apos;t encounter the 2nd composition cycle issue. See following sample event sequence of inputting &quot;啊&quot; with Chinese pinyin input method: (D=keydown, U=keyup, CS = compositionstart, and so on.)

D 229 0 false false false
CS 啊
U 65 0 false false false
D 229 0 false false false
CU 啊
CE 啊
T 啊
U 32 0 false false false

So I believe the 2nd cycle issue is caused by the input method, rather than the webkit.

And following is the sequence of cancelling a composition:

D 229 0 false false false
CS 啊
U 65 0 false false false
D 229 0 false false false
CE 
U 27 0 false false false

In this case, webkit doesn&apos;t fire compositionupdate event before the last compositionend event, which is different than the behavior described in the current spec: http://www.w3.org/TR/DOM-Level-3-Events/#event-type-compositionupdate


&gt; 
&gt; A few possible ways to fix:
&gt; a) Simply ensure compositionend gets fired after the last dom change (don&apos;t
&gt; fire it and then change the dom once more).
We need to clarify how the DOM will be changed by compositionend.

&gt; b) Same as (a), but to avoid the 2nd round of composition events, have
&gt; textInput come before compositionend. That way when textInput is triggered, the
&gt; content has been removed so textInput is still a preview of what is about to be
&gt; inserted (if that is in fact desirable, I&apos;m guessing that would be why webkit
&gt; deletes then re-inserts the content)
Semantically, a textInput event is actually a result of a confirm composition action (compositionend with a non-empty text), so it would be confusing if textInput events are fired after compositionend events.

&gt; c) Same as (a), but to avoid the 2nd round of composition events, *and* still
&gt; have textInput fire after compositionend, stop the deleting and re-inserting of
&gt; content. Instead, textInput is just informational and happens after-the-fact
&gt; (thus cancelling it has no effect).
The spec states that the textInput event can be cancelled. And it may be useful. See chrome issue: http://crbug.com/30982 for reference, which is actually a webkit issue.

&gt; 
&gt; b) is preferred by Hironori (cc&apos;d) and me, but contradicts the current DOM
&gt; Level 3 spec, which says textInput must come after compositionend. That said,
&gt; hbono and I are involved with that part of the spec (and he drafted it), so
&gt; based on our implementation experience it could very well be worth trying to
&gt; change the spec while it&apos;s still fresh.
&gt; 
&gt; This issue is also tracked at:
&gt; http://code.google.com/p/chromium/issues/detail?id=28246</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208954</commentid>
    <comment_count>2</comment_count>
      <attachid>52618</attachid>
    <who name="Hironori Bono">hbono</who>
    <bug_when>2010-04-06 02:34:11 -0700</bug_when>
    <thetext>Created attachment 52618
A proposed fix (including a layout-test change)

Thank you for your bug report and sorry for my slow response.
This issue is caused by a race condition that updates a composition node after sending a composiionend event. Unfortunately, this change needs to change my previous layout test because it assumes updating a composition node before sending a compositionend event.

Regards,

Hironori Bono</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209032</commentid>
    <comment_count>3</comment_count>
    <who name="Hironori Bono">hbono</who>
    <bug_when>2010-04-06 07:05:08 -0700</bug_when>
    <thetext>I would like to cancel this review request because the ChangeLog files in this patch did not describe this issue correctly. I will fix the descriptions and send the updated one tomorrow.

Regards,

Hironori Bono

(In reply to comment #2)
&gt; Created an attachment (id=52618) [details]
&gt; A proposed fix (including a layout-test change)
&gt; 
&gt; Thank you for your bug report and sorry for my slow response.
&gt; This issue is caused by a race condition that updates a composition node after
&gt; sending a composiionend event. Unfortunately, this change needs to change my
&gt; previous layout test because it assumes updating a composition node before
&gt; sending a compositionend event.
&gt; 
&gt; Regards,
&gt; 
&gt; Hironori Bono</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209464</commentid>
    <comment_count>4</comment_count>
      <attachid>52705</attachid>
    <who name="Hironori Bono">hbono</who>
    <bug_when>2010-04-06 23:30:21 -0700</bug_when>
    <thetext>Created attachment 52705
The second proposed fix (including a layout-test change)

Greetings webkit-reviewers,

I have updated my patch to fix descriptions. Would it be possible to review it and give me your comments?
Thank you for your help in advance.

Regards,

Hironori Bono</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213916</commentid>
    <comment_count>5</comment_count>
    <who name="Hironori Bono">hbono</who>
    <bug_when>2010-04-18 22:52:41 -0700</bug_when>
    <thetext>Greetings,

Unfortunately, this change seems to be desolated. It is definitely helpful for someone to review this change.

Regards,

Hironori Bono

(In reply to comment #4)
&gt; Created an attachment (id=52705) [details]
&gt; The second proposed fix (including a layout-test change)
&gt; 
&gt; Greetings webkit-reviewers,
&gt; 
&gt; I have updated my patch to fix descriptions. Would it be possible to review it
&gt; and give me your comments?
&gt; Thank you for your help in advance.
&gt; 
&gt; Regards,
&gt; 
&gt; Hironori Bono</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215085</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-20 17:41:08 -0700</bug_when>
    <thetext>Alexey, Mitz, any comments on this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216499</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-23 11:53:41 -0700</bug_when>
    <thetext>The bug description mentioned that the spec can be changed. Is the patch expected to implement what the current editor&apos;s draft says? I see that compositionend is no longer cancelable there - but its default action is to fire textInput, which this bug disagrees with.

Is there proposed spec text that describes the behavior that this patch implements? It needn&apos;t be hosted by W3C, but a coherent description that can be reviewed on its own would help. Currently, the patch itself is the only documentation of proposed behavior, so it&apos;s hard to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216972</commentid>
    <comment_count>8</comment_count>
    <who name="Hironori Bono">hbono</who>
    <bug_when>2010-04-26 03:38:42 -0700</bug_when>
    <thetext>Thank you for your comments.

(In reply to comment #7)
&gt; The bug description mentioned that the spec can be changed. Is the patch
&gt; expected to implement what the current editor&apos;s draft says? I see that
&gt; compositionend is no longer cancelable there - but its default action is to
&gt; fire textInput, which this bug disagrees with.

As an editor of the spec, this behavior is not compliant with the spec as of 26 April, 2010. (This is exactly the reason why I cannot push this change.)

&gt; Is there proposed spec text that describes the behavior that this patch
&gt; implements? It needn&apos;t be hosted by W3C, but a coherent description that can be
&gt; reviewed on its own would help. Currently, the patch itself is the only
&gt; documentation of proposed behavior, so it&apos;s hard to review.

This comment is totally right. It is better for us to work for the spec before changing WebKit.

Sorry for disturbing you with my spam change, and regards,

Hironori Bono</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217145</commentid>
    <comment_count>9</comment_count>
      <attachid>52705</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-26 09:32:38 -0700</bug_when>
    <thetext>Comment on attachment 52705
The second proposed fix (including a layout-test change)

OK - clearing the review flag for now per the above comment.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52618</attachid>
            <date>2010-04-06 02:34:11 -0700</date>
            <delta_ts>2010-04-06 23:30:21 -0700</delta_ts>
            <desc>A proposed fix (including a layout-test change)</desc>
            <filename>issue31902-patch0.txt</filename>
            <type>text/plain</type>
            <size>13795</size>
            <attacher name="Hironori Bono">hbono</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzEzMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDQtMDYgIEhpcm9ub3JpIEJvbm8gIDxoYm9ub0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U2VuZCBhIGNvbXBvc2l0aW9uZW5kIGV2ZW50IGFmdGVyIGZpbmlzaGluZyBhbGwgaW5wdXQtbWV0
aG9kIG9wZXJhdGlvbnMgdG8gYXZvaWQgYSByYWNlIGNvbmRpdGlvbi4KKyAgICAgICAgV2hlbiBX
ZWJLaXQgZGVsZXRlcyBhIGNvbXBvc2l0aW9uIG5vZGUsIGl0IHNlbmRzIGEgRE9NU3VidHJlZU1v
ZGlmaWVkIGV2ZW50IGFuZCBhIERPTUNoYXJhY3RlckRhdGFNb2RpZmllZAorICAgICAgICBldmVu
dCB0byBub3RpZnkgdGhlIGNvbXBvc2l0aW9uIG5vZGUgaXMgbW9kaWZpZWQuIFNlbmRpbmcgdGhl
c2UgZXZlbnRzIGFmdGVyIGEgY29tcG9zaXRpb25lbmQgZXZlbnQgY2F1c2VzCisgICAgICAgIGEg
cmFjZSBjb25kaXRpb24gaW4gd2ViIGFwcGxpY2F0aW9ucyBiZWNhdXNlIGl0IG1lYW5zIHRoZSBj
b21wb3NpdGlvbiBub2RlIGlzIG1vZGlmaWVkIGFmdGVyIHRoZSBjb21wb3NpdGlvbgorICAgICAg
ICBpcyBlbmRlZC4gVG8gYXZvaWQgdGhpcyByYWNlIGNvbmRpdGlvbiwgdGhpcyBjaGFuZ2Ugc2Vu
ZHMgYSBjb21wb3NpdGlvbmVuZCBldmVudCBhZnRlciBzZW5kaW5nIHRoZXNlIERPTSBldmVudHMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTkwMgor
ICAgICAgICAKKyAgICAgICAgVGVzdDogZmFzdC9ldmVudHMvaW1lLWNvbXBvc2l0aW9uLWV2ZW50
cy0wMDIuaHRtbAorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpjb25maXJtQ29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpzZXRDb21wb3NpdGlvbik6CisKIDIwMTAtMDQtMDYgIFBhdmVsIEZlbGRtYW4gIDxwZmVs
ZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTm90IHJldmlld2VkOiByZXZlcnRpbmcgdjgg
Y2hhbmdlIGF0IHI1NzA3OSBmb3IgY3Jhc2hpbmcgQ2hyb21pdW0gbGF5b3V0IHRlc3RzLgpJbmRl
eDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDU3MTI3KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNjMsMTYgKzEzNjMsNiBAQCB2b2lkIEVkaXRvcjo6
Y29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ci0gICAgLy8gRGlzcGF0Y2ggYSBjb21wb3NpdGlvbmVuZCBldmVudCB0byB0aGUgZm9jdXNlZCBu
b2RlLgotICAgIC8vIFdlIHNob3VsZCBzZW5kIHRoaXMgZXZlbnQgYmVmb3JlIHNlbmRpbmcgYSBU
ZXh0RXZlbnQgYXMgd3JpdHRlbiBpbiBTZWN0aW9uIDYuMi4yIGFuZCA2LjIuMyBvZgotICAgIC8v
IHRoZSBET00gRXZlbnQgc3BlY2lmaWNhdGlvbi4KLSAgICBOb2RlKiB0YXJnZXQgPSBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpOwotICAgIGlmICh0YXJnZXQpIHsKLSAgICAgICAg
UmVmUHRyPENvbXBvc2l0aW9uRXZlbnQ+IGV2ZW50ID0gQ29tcG9zaXRpb25FdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5jb21wb3NpdGlvbmVuZEV2ZW50LCBtX2ZyYW1lLT5kb21XaW5kb3coKSwg
dGV4dCk7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICB0YXJnZXQtPmRp
c3BhdGNoRXZlbnQoZXZlbnQsIGVjKTsKLSAgICB9Ci0KICAgICAvLyBJZiB0ZXh0IGlzIGVtcHR5
LCB0aGVuIGRlbGV0ZSB0aGUgb2xkIGNvbXBvc2l0aW9uIGhlcmUuICBJZiB0ZXh0IGlzIG5vbi1l
bXB0eSwgSW5zZXJ0VGV4dENvbW1hbmQ6OmlucHV0CiAgICAgLy8gd2lsbCBkZWxldGUgdGhlIG9s
ZCBjb21wb3NpdGlvbiB3aXRoIGFuIG9wdGltaXplZCByZXBsYWNlIG9wZXJhdGlvbi4KICAgICBp
ZiAodGV4dC5pc0VtcHR5KCkpCkBAIC0xMzkwLDYgKzEzODAsMTYgQEAgdm9pZCBFZGl0b3I6OmNv
bmZpcm1Db21wb3NpdGlvbihjb25zdCBTdAogICAgIH0KIAogICAgIHNldElnbm9yZUNvbXBvc2l0
aW9uU2VsZWN0aW9uQ2hhbmdlKGZhbHNlKTsKKworICAgIC8vIERpc3BhdGNoIGEgY29tcG9zaXRp
b25lbmQgZXZlbnQgdG8gdGhlIGZvY3VzZWQgbm9kZS4KKyAgICAvLyBJdCBpcyBncmFjZWZ1bCB0
byBzZW5kIHRoaXMgY29tcG9zaXRpb25lbmQgZXZlbnQgYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0
aW9uLCBpLmUuIHdoZW4gdGhpcyBjb21wb3NpdGlvbiBpcworICAgIC8vIGZpbmlzaGVkLgorICAg
IE5vZGUqIHRhcmdldCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCk7CisgICAg
aWYgKHRhcmdldCkgeworICAgICAgICBSZWZQdHI8Q29tcG9zaXRpb25FdmVudD4gZXZlbnQgPSBD
b21wb3NpdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbXBvc2l0aW9uZW5kRXZlbnQs
IG1fZnJhbWUtPmRvbVdpbmRvdygpLCB0ZXh0KTsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCwgZWMpOworICAgIH0KIH0K
IAogdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3Qg
VmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcywgdW5zaWduZWQgc2VsZWN0
aW9uU3RhcnQsIHVuc2lnbmVkIHNlbGVjdGlvbkVuZCkKQEAgLTE0MDQsNiArMTQwNCw3IEBAIHZv
aWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcKICAgICB9CiAKICAgICBOb2Rl
KiB0YXJnZXQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpOworICAgIGJvb2wg
c2VuZENvbXBvc2l0aW9uRW5kID0gZmFsc2U7CiAgICAgaWYgKHRhcmdldCkgewogICAgICAgICAv
LyBEaXNwYXRjaCBhbiBhcHByb3ByaWF0ZSBjb21wb3NpdGlvbiBldmVudCB0byB0aGUgZm9jdXNl
ZCBub2RlLgogICAgICAgICAvLyBXZSBjaGVjayB0aGUgY29tcG9zaXRpb24gc3RhdHVzIGFuZCBj
aG9vc2UgYW4gYXBwcm9wcmlhdGUgY29tcG9zaXRpb24gZXZlbnQgc2luY2UgdGhpcwpAQCAtMTQx
Niw3ICsxNDE3LDkgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZwog
ICAgICAgICAvLyAgICBub2RlLCBpLmUuIG1fY29tcG9zaXRpb25Ob2RlICE9IDAgJiYgIXRleHQu
aXNFbXB0eSgpLgogICAgICAgICAvLyAzLiBDYW5jZWxpbmcgdGhlIG9uZ29pbmcgY29tcG9zaXRp
b24uCiAgICAgICAgIC8vICAgIFNlbmQgYSBjb21wb3NpdGlvbmVuZCBldmVudCB3aGVuIGZ1bmN0
aW9uIGRlbGV0ZXMgdGhlIGV4aXN0aW5nIGNvbXBvc2l0aW9uIG5vZGUsIGkuZS4KLSAgICAgICAg
Ly8gICAgbV9jb21wb3NpdGlvbk5vZGUgIT0gMCAmJiB0ZXN0LmlzRW1wdHkoKS4KKyAgICAgICAg
Ly8gICAgbV9jb21wb3NpdGlvbk5vZGUgIT0gMCAmJiB0ZXN0LmlzRW1wdHkoKS4gVGhpcyBjb21w
b3NpdGlvbmVuZCBldmVudCBpcyB0byBiZSBzZW50CisgICAgICAgIC8vICAgIGF0IHRoZSBlbmQg
b2YgdGhpcyBmdW5jdGlvbiBiZWNhdXNlIGl0IGlzIGdyYWNlZnVsIHRvIHNlbmQgYSBjb21wb3Np
dGlvbmVuZCBldmVudCBhZnRlcgorICAgICAgICAvLyAgICBmaW5pc2hpbmcgYWxsIG9wZXJhdGlv
bnMgdGhhdCBjYW5jZWwgYSBjb21wb3NpdGlvbi4KICAgICAgICAgUmVmUHRyPENvbXBvc2l0aW9u
RXZlbnQ+IGV2ZW50OwogICAgICAgICBpZiAoIW1fY29tcG9zaXRpb25Ob2RlKSB7CiAgICAgICAg
ICAgICAvLyBXZSBzaG91bGQgc2VuZCBhIGNvbXBvc2l0aW9uc3RhcnQgZXZlbnQgb25seSB3aGVu
IHRoZSBnaXZlbiB0ZXh0IGlzIG5vdCBlbXB0eSBiZWNhdXNlIHRoaXMKQEAgLTE0MjcsNyArMTQz
MCw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcKICAgICAgICAg
ICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgZXZlbnQgPSBDb21wb3Np
dGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbXBvc2l0aW9udXBkYXRlRXZlbnQsIG1f
ZnJhbWUtPmRvbVdpbmRvdygpLCB0ZXh0KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgZXZlbnQgPSBDb21wb3NpdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbXBvc2l0
aW9uZW5kRXZlbnQsIG1fZnJhbWUtPmRvbVdpbmRvdygpLCB0ZXh0KTsKKyAgICAgICAgICAgICAg
ICBzZW5kQ29tcG9zaXRpb25FbmQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgICAgICBpZiAoZXZlbnQuZ2V0KCkpCkBAIC0xNDcxLDYgKzE0NzQs
MTQgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZwogICAgIH0KIAog
ICAgIHNldElnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlKGZhbHNlKTsKKworICAgIC8v
IFNlbmQgYSBjb21wb3NpdGlvbmVuZCBldmVudCBub3cgaWYgdGhlIG9uZ29pbmcgY29tcG9zaXRp
b24gaGFzIGJlZW4gY2FuY2VsZWQgc28gd2UKKyAgICAvLyBjYW4gc2VuZCBpdCBhZnRlciB3ZSBm
aW5pc2ggY2hhbmdpbmcgdGhpcyBub2RlLgorICAgIGlmICh0YXJnZXQgJiYgc2VuZENvbXBvc2l0
aW9uRW5kKSB7CisgICAgICAgIFJlZlB0cjxDb21wb3NpdGlvbkV2ZW50PiBldmVudCA9IENvbXBv
c2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY29tcG9zaXRpb25lbmRFdmVudCwgbV9m
cmFtZS0+ZG9tV2luZG93KCksIHRleHQpOworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBlYyk7CisgICAgfQogfQogCiB2
b2lkIEVkaXRvcjo6aWdub3JlU3BlbGxpbmcoKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTcxMzMpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAor
MjAxMC0wNC0wNiAgSGlyb25vcmkgQm9ubyAgPGhib25vQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBWZXJpZnkgdGhhdCBhIGNv
bXBvc2l0aW9uZW5kIGV2ZW50IGlzIHNlbnQgYWZ0ZXIgc2VuZGluZyB0aGUgRE9NIGV2ZW50cyBz
ZW50IHdoZW4gV2ViS2l0IGRlbGV0ZXMgYSBjb21wb3NpdGlvbgorICAgICAgICBub2RlLiBUaGlz
IGNoYW5nZSBhbHNvIGNoYW5nZXMgbXkgcHJldmlvdXMgbGF5b3V0IHRlc3QgdG8gcmVtb3ZlIGNv
ZGUgdGhhdCBjaGVja3MgdGV4dElucHV0IGV2ZW50cyBiZWNhdXNlIFczQworICAgICAgICBoYXMg
bm90IHlldCBkZWNpZGVkIHdoZXRoZXIgb3Igbm90IHRvIHNlbmQgYSB0ZXh0SW5wdXQgZXZlbnQg
YmVmb3JlIGEgY29tcG9zaXRpb25lbmQgZXZlbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTkwMgorCisgICAgICAgICogZmFzdC9ldmVudHMvaW1l
LWNvbXBvc2l0aW9uLWV2ZW50cy0wMDEtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZXZl
bnRzL2ltZS1jb21wb3NpdGlvbi1ldmVudHMtMDAxLmh0bWw6CisgICAgICAgICogZmFzdC9ldmVu
dHMvaW1lLWNvbXBvc2l0aW9uLWV2ZW50cy0wMDItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9pbWUtY29tcG9zaXRpb24tZXZlbnRzLTAwMi5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9T
a2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVkOgorCiAyMDEwLTA0LTA1ICBE
aW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gQWRsZXIKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2ltZS1jb21w
b3NpdGlvbi1ldmVudHMtMDAxLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9pbWUtY29tcG9zaXRpb24tZXZlbnRzLTAwMS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDU3MTI3KQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW1lLWNvbXBvc2l0aW9u
LWV2ZW50cy0wMDEtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03LDcgKzcsNiBAQCBT
VUNDRVNTOiBJTlBVVCAtIGNvbXBvc2l0aW9uc3RhcnQgLSAiMSIKIFNVQ0NFU1M6IElOUFVUIC0g
Y29tcG9zaXRpb251cGRhdGUgLSAiMiIKIFNVQ0NFU1M6IElOUFVUIC0gY29tcG9zaXRpb251cGRh
dGUgLSAiMyIKIFNVQ0NFU1M6IElOUFVUIC0gY29tcG9zaXRpb25lbmQgLSAiNCIKLVNVQ0NFU1M6
IElOUFVUIC0gdGV4dElucHV0IC0gIjQiCiBTVUNDRVNTOiBJTlBVVCAtIGNvbXBvc2l0aW9uc3Rh
cnQgLSAiNSIKIFNVQ0NFU1M6IElOUFVUIC0gY29tcG9zaXRpb251cGRhdGUgLSAiNiIKIFNVQ0NF
U1M6IElOUFVUIC0gY29tcG9zaXRpb251cGRhdGUgLSAiNyIKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL2ltZS1jb21wb3NpdGlvbi1ldmVudHMtMDAxLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW1lLWNvbXBvc2l0aW9uLWV2ZW50cy0wMDEuaHRtbAko
cmV2aXNpb24gNTcxMjcpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9pbWUtY29tcG9zaXRp
b24tZXZlbnRzLTAwMS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBAIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgICB0ZXN0LmFkZEV2ZW50TGlzdGVuZXIo
ImNvbXBvc2l0aW9uc3RhcnQiLCBsb2dFdmVudCwgZmFsc2UpOwogICAgIHRlc3QuYWRkRXZlbnRM
aXN0ZW5lcigiY29tcG9zaXRpb251cGRhdGUiLCBsb2dFdmVudCwgZmFsc2UpOwogICAgIHRlc3Qu
YWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCBsb2dFdmVudCwgZmFsc2UpOwotICAg
IHRlc3QuYWRkRXZlbnRMaXN0ZW5lcigidGV4dElucHV0IiwgbG9nRXZlbnQsIGZhbHNlKTsKIAog
ICAgIC8vIENhc2UgMTogQ29tcG9zZSBhIHRleHQgYW5kIGNvbW1pdCBpdC4KICAgICB0ZXh0SW5w
dXRDb250cm9sbGVyLnNldE1hcmtlZFRleHQoJzEnLCAwLCAxKTsKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL2ltZS1jb21wb3NpdGlvbi1ldmVudHMtMDAyLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9pbWUtY29tcG9zaXRpb24tZXZlbnRz
LTAwMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9pbWUtY29tcG9zaXRpb24tZXZlbnRzLTAwMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDAgQEAKK1RoaXMgdGVzdHMgdGhhdCBjYWxsaW5nIGlucHV0LW1ldGhvZCBmdW5j
dGlvbnMgc2VuZHMgQ29tcG9zaXRpb24gRXZlbnRzIGFuZCBET00gRXZlbnRzIGludHJvZHVjZWQg
aW4gRE9NIExldmVsIDMuCisKK1RvIHRlc3QgbWFudWFsbHksIHR5cGUgb3B0LXUgaW4gdGhlIGZv
bGxvd2luZyA8ZGl2PiBlbGVtZW50LCBhbmQgc2VlIHRoaXMgcGFnZSBkb2Vzbid0IHNob3cgJ0ZB
SUxFRCcgbGluZXMuCisKKzQKK1NVQ0NFU1M6IERJViAtIGNvbXBvc2l0aW9uc3RhcnQgLSAiMSIK
K1NVQ0NFU1M6IERPTVN1YnRyZWVNb2RpZmllZCAtICIiIC0+ICIiCitTVUNDRVNTOiBET01DaGFy
YWN0ZXJEYXRhTW9kaWZpZWQgLSAiIiAtPiAiMSIKK1NVQ0NFU1M6IERPTVN1YnRyZWVNb2RpZmll
ZCAtICIiIC0+ICIiCitTVUNDRVNTOiBESVYgLSBjb21wb3NpdGlvbnVwZGF0ZSAtICIyIgorU1VD
Q0VTUzogRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkIC0gIjEiIC0+ICIiCitTVUNDRVNTOiBET01T
dWJ0cmVlTW9kaWZpZWQgLSAiIiAtPiAiIgorU1VDQ0VTUzogRE9NQ2hhcmFjdGVyRGF0YU1vZGlm
aWVkIC0gIiIgLT4gIjIiCitTVUNDRVNTOiBET01TdWJ0cmVlTW9kaWZpZWQgLSAiIiAtPiAiIgor
U1VDQ0VTUzogRElWIC0gY29tcG9zaXRpb251cGRhdGUgLSAiMyIKK1NVQ0NFU1M6IERPTUNoYXJh
Y3RlckRhdGFNb2RpZmllZCAtICIyIiAtPiAiIgorU1VDQ0VTUzogRE9NU3VidHJlZU1vZGlmaWVk
IC0gIiIgLT4gIiIKK1NVQ0NFU1M6IERPTUNoYXJhY3RlckRhdGFNb2RpZmllZCAtICIiIC0+ICIz
IgorU1VDQ0VTUzogRE9NU3VidHJlZU1vZGlmaWVkIC0gIiIgLT4gIiIKK1NVQ0NFU1M6IERPTUNo
YXJhY3RlckRhdGFNb2RpZmllZCAtICIzIiAtPiAiIgorU1VDQ0VTUzogRE9NU3VidHJlZU1vZGlm
aWVkIC0gIiIgLT4gIiIKK1NVQ0NFU1M6IERPTUNoYXJhY3RlckRhdGFNb2RpZmllZCAtICIiIC0+
ICI0IgorU1VDQ0VTUzogRE9NU3VidHJlZU1vZGlmaWVkIC0gIiIgLT4gIiIKK1NVQ0NFU1M6IERJ
ViAtIGNvbXBvc2l0aW9uZW5kIC0gIjQiCitTVUNDRVNTOiBESVYgLSBjb21wb3NpdGlvbnN0YXJ0
IC0gIjUiCitTVUNDRVNTOiBET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQgLSAiNCIgLT4gIjQ1Igor
U1VDQ0VTUzogRE9NU3VidHJlZU1vZGlmaWVkIC0gIiIgLT4gIiIKK1NVQ0NFU1M6IERJViAtIGNv
bXBvc2l0aW9udXBkYXRlIC0gIjYiCitTVUNDRVNTOiBET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQg
LSAiNDUiIC0+ICI0IgorU1VDQ0VTUzogRE9NU3VidHJlZU1vZGlmaWVkIC0gIiIgLT4gIiIKK1NV
Q0NFU1M6IERPTUNoYXJhY3RlckRhdGFNb2RpZmllZCAtICI0IiAtPiAiNDYiCitTVUNDRVNTOiBE
T01TdWJ0cmVlTW9kaWZpZWQgLSAiIiAtPiAiIgorU1VDQ0VTUzogRElWIC0gY29tcG9zaXRpb251
cGRhdGUgLSAiNyIKK1NVQ0NFU1M6IERPTUNoYXJhY3RlckRhdGFNb2RpZmllZCAtICI0NiIgLT4g
IjQiCitTVUNDRVNTOiBET01TdWJ0cmVlTW9kaWZpZWQgLSAiIiAtPiAiIgorU1VDQ0VTUzogRE9N
Q2hhcmFjdGVyRGF0YU1vZGlmaWVkIC0gIjQiIC0+ICI0NyIKK1NVQ0NFU1M6IERPTVN1YnRyZWVN
b2RpZmllZCAtICIiIC0+ICIiCitTVUNDRVNTOiBET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQgLSAi
NDciIC0+ICI0IgorU1VDQ0VTUzogRE9NU3VidHJlZU1vZGlmaWVkIC0gIiIgLT4gIiIKK1NVQ0NF
U1M6IERJViAtIGNvbXBvc2l0aW9uZW5kIC0gIiIKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL2ltZS1jb21wb3NpdGlvbi1ldmVudHMtMDAyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvaW1lLWNvbXBvc2l0aW9uLWV2ZW50cy0wMDIuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2ltZS1jb21wb3NpdGlvbi1ldmVudHMt
MDAyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKzxodG1sPgorPGhlYWQ+Cis8
dGl0bGU+PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHA+VGhpcyB0ZXN0cyB0aGF0IGNhbGxp
bmcgaW5wdXQtbWV0aG9kIGZ1bmN0aW9ucyBzZW5kcyBDb21wb3NpdGlvbiBFdmVudHMgYW5kIERP
TSBFdmVudHMgaW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMy48L3A+Cis8cD5UbyB0ZXN0IG1hbnVh
bGx5LCB0eXBlIG9wdC11IGluIHRoZSBmb2xsb3dpbmcgJmx0O2RpdiZndDsgZWxlbWVudCwgYW5k
IHNlZSB0aGlzIHBhZ2UgZG9lc24ndCBzaG93ICdGQUlMRUQnIGxpbmVzLjwvcD4KKzxkaXYgaWQ9
InRlc3QiIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSI+PC9kaXY+Cis8dWwgaWQ9ImNvbnNvbGUiPjwv
dWw+Cis8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
PgorZnVuY3Rpb24gbG9nKHN0cikgeworICAgdmFyIGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnbGknKTsKKyAgIGxpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN0cikp
OworICAgdmFyIGNvbnNvbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpOwor
ICAgY29uc29sZS5hcHBlbmRDaGlsZChsaSk7Cit9CisKK2Z1bmN0aW9uIGxvZ0V2ZW50KGUpIHsK
KyAgICB2YXIgdGFyZ2V0ID0gZS50YXJnZXQ7CisgICAgdmFyIHR5cGUgPSBlLnR5cGU7CisgICAg
aWYgKGUudHlwZSA9PSAnY29tcG9zaXRpb25zdGFydCcgfHwgZS50eXBlID09ICdjb21wb3NpdGlv
bnVwZGF0ZScgfHwgZS50eXBlID09ICdjb21wb3NpdGlvbmVuZCcpCisgICAgICAgIGxvZygnU1VD
Q0VTUzogJyArIHRhcmdldC50YWdOYW1lICsgJyAtICcgKyBlLnR5cGUgKyAnIC0gIicgKyBlLmRh
dGEgKyAnIicpOworICAgIGVsc2UgaWYgKGUudHlwZSA9PSAnRE9NQ2hhcmFjdGVyRGF0YU1vZGlm
aWVkJykKKyAgICAgICAgbG9nKCdTVUNDRVNTOiAnICsgZS50eXBlICsgJyAtICInICsgZS5wcmV2
VmFsdWUgKyAnIiAtPiAiJyArIGUubmV3VmFsdWUgKyAnIicpOworICAgIGVsc2UgaWYgKGUudHlw
ZSA9PSAnRE9NU3VidHJlZU1vZGlmaWVkJykKKyAgICAgICAgbG9nKCdTVUNDRVNTOiAnICsgZS50
eXBlICsgJyAtICInICsgZS5wcmV2VmFsdWUgKyAnIiAtPiAiJyArIGUubmV3VmFsdWUgKyAnIicp
OworICAgIGVsc2UKKyAgICAgICAgbG9nKCdGQUlMRUQ6ICcgKyB0YXJnZXQudGFnTmFtZSArICcg
LSAnICsgZS50eXBlICsgJyAtICInICsgZS5kYXRhICsgJyInKTsKK30KKwordmFyIHRlc3QgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpOwordGVzdC5mb2N1cygpOworCitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworCisgICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVycyB0byB0aGUgPGRpdj4gbm9k
ZS4KKyAgICB0ZXN0LmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCBsb2dFdmVu
dCwgZmFsc2UpOworICAgIHRlc3QuYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb251cGRhdGUi
LCBsb2dFdmVudCwgZmFsc2UpOworICAgIHRlc3QuYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRp
b25lbmQiLCBsb2dFdmVudCwgZmFsc2UpOworICAgIHRlc3QuYWRkRXZlbnRMaXN0ZW5lcigiRE9N
Q2hhcmFjdGVyRGF0YU1vZGlmaWVkIiwgbG9nRXZlbnQsIGZhbHNlKTsKKyAgICB0ZXN0LmFkZEV2
ZW50TGlzdGVuZXIoIkRPTVN1YnRyZWVNb2RpZmllZCIsIGxvZ0V2ZW50LCBmYWxzZSk7CisKKyAg
ICAvLyBDYXNlIDE6IENvbXBvc2UgYSB0ZXh0IGFuZCBjb21taXQgaXQuCisgICAgdGV4dElucHV0
Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCcxJywgMCwgMSk7CisgICAgdGV4dElucHV0Q29udHJv
bGxlci5zZXRNYXJrZWRUZXh0KCcyJywgMCwgMSk7CisgICAgdGV4dElucHV0Q29udHJvbGxlci5z
ZXRNYXJrZWRUZXh0KCczJywgMCwgMSk7CisgICAgdGV4dElucHV0Q29udHJvbGxlci5pbnNlcnRU
ZXh0KCc0Jyk7CisKKyAgICAvLyBDYXNlIDI6IENvbXBvc2UgYSB0ZXh0IGJ1dCBjYW5jZWwgaXQu
CisgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCc1JywgMCwgMSk7CisgICAg
dGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCc2JywgMCwgMSk7CisgICAgdGV4dElu
cHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCc3JywgMCwgMSk7CisgICAgdGV4dElucHV0Q29u
dHJvbGxlci5zZXRNYXJrZWRUZXh0KCcnLCAwLCAwKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQJKHJldmlzaW9uIDU3MTI3KQor
KysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTU1
MDgsNiArNTUwOCw3IEBAIGZhc3QvZm9ybXMvaW5wdXQtbWF4bGVuZ3RoLWltZS1jb21wbGV0ZWQK
IGZhc3QvZm9ybXMvaW5wdXQtbWF4bGVuZ3RoLWltZS1wcmVlZGl0Lmh0bWwKIGZhc3QvdGV4dC9p
bnRlcm5hdGlvbmFsL3RoYWktY3Vyc29yLXBvc2l0aW9uLmh0bWwKIGZhc3QvZXZlbnRzL2ltZS1j
b21wb3NpdGlvbi1ldmVudHMtMDAxLmh0bWwKK2Zhc3QvZXZlbnRzL2ltZS1jb21wb3NpdGlvbi1l
dmVudHMtMDAyLmh0bWwKIAogIyBObyBVc2VyIFNjcmlwdHMKIHVzZXJzY3JpcHRzCkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL3F0L1NraXBwZWQJKHJldmlzaW9uIDU3MTI3KQorKysgTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMjgyLDYgKzI4Miw3IEBAIGZhc3Qv
Zm9ybXMvaW5wdXQtbWF4bGVuZ3RoLWltZS1wcmVlZGl0LmgKIGZhc3QvZm9ybXMvaW5wdXQtbWF4
bGVuZ3RoLWltZS1jb21wbGV0ZWQuaHRtbAogZmFzdC90ZXh0L2ludGVybmF0aW9uYWwvdGhhaS1j
dXJzb3ItcG9zaXRpb24uaHRtbAogZmFzdC9ldmVudHMvaW1lLWNvbXBvc2l0aW9uLWV2ZW50cy0w
MDEuaHRtbAorZmFzdC9ldmVudHMvaW1lLWNvbXBvc2l0aW9uLWV2ZW50cy0wMDIuaHRtbAogCiAj
IE1pc3NpbmcgbGF5b3V0VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCkKIGZhc3Qv
ZXZlbnRzL3BhZ2VzaG93LXBhZ2VoaWRlLW9uLWJhY2stY2FjaGVkLmh0bWwKSW5kZXg6IExheW91
dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbi9Ta2lwcGVkCShyZXZpc2lvbiA1NzEyNykKKysrIExheW91dFRlc3RzL3BsYXRm
b3JtL3dpbi9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC04MjIsMyArODIyLDYgQEAgZmFzdC9t
ZWRpYS9tZWRpYS1mZWF0dXJlLXdndC12aWV3LW1vZGUuaAogCiAjIE5lZWQgZXhwZWN0YXRpb25z
LiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NDYxCiBmYXN0
L3JlcGFpbnQvb3ZlcmZsb3ctc2Nyb2xsLWJvZHktYXBwZWFyLmh0bWwKKworIyBObyBUZXh0SW5w
dXRDb250cm9sbGVyCitmYXN0L2V2ZW50cy9pbWUtY29tcG9zaXRpb24tZXZlbnRzLTAwMi5odG1s
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52705</attachid>
            <date>2010-04-06 23:30:21 -0700</date>
            <delta_ts>2010-06-11 11:40:16 -0700</delta_ts>
            <desc>The second proposed fix (including a layout-test change)</desc>
            <filename>issue31902-patch1.txt</filename>
            <type>text/plain</type>
            <size>13813</size>
            <attacher name="Hironori Bono">hbono</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzE5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDQtMDYgIEhpcm9ub3JpIEJvbm8gIDxoYm9ub0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U2VuZCBhIGNvbXBvc2l0aW9uZW5kIGV2ZW50IGFmdGVyIGZpbmlzaGluZyBhbGwgaW5wdXQtbWV0
aG9kIG9wZXJhdGlvbnMuCisgICAgICAgIFdoZW4gV2ViS2l0IGRlbGV0ZXMgYSBjb21wb3NpdGlv
biBub2RlLCBpdCBzZW5kcyBhIERPTVN1YnRyZWVNb2RpZmllZCBldmVudCBhbmQgYSBET01DaGFy
YWN0ZXJEYXRhTW9kaWZpZWQKKyAgICAgICAgZXZlbnQgdG8gbm90aWZ5IHRoZSBjb21wb3NpdGlv
biBub2RlIGlzIG1vZGlmaWVkLiBTZW5kaW5nIHRoZXNlIGV2ZW50cyBhZnRlciBhIGNvbXBvc2l0
aW9uZW5kIGV2ZW50IGNvbmZ1c2VzCisgICAgICAgIHdlYiBhcHBsaWNhdGlvbnMgYmVjYXVzZSB0
aGV5IHRoaW5rIHRoZSBjb21wb3NpdGlvbiBub2RlIGlzIG1vZGlmaWVkIGFmdGVyIHRoZSBjb21w
b3NpdGlvbiBpcyBlbmRlZC4gVG8gYXZvaWQKKyAgICAgICAgdGhpcyBwcm9ibGVtLCB0aGlzIGNo
YW5nZSBzZW5kcyBhIGNvbXBvc2l0aW9uZW5kIGV2ZW50IGFmdGVyIHNlbmRpbmcgdGhlc2UgRE9N
IGV2ZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTMxOTAyCisKKyAgICAgICAgVGVzdDogZmFzdC9ldmVudHMvaW1lLWNvbXBvc2l0aW9uLWV2ZW50
cy0wMDIuaHRtbAorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpjb25maXJtQ29tcG9zaXRpb24pOiBNb3ZlIGNvZGUgdGhhdCBzZW5kcyBh
IGNvbXBvc2l0aW9uZW5kIGV2ZW50IHRvIHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbi4KKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0Q29tcG9zaXRpb24pOiBNb3ZlIGNvZGUgdGhhdCBzZW5k
cyBhIGNvbXBvc2l0aW9uZW5kIGV2ZW50IHRvIHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbi4KKwog
MjAxMC0wNC0wNiAgR3JlZyBCb2xzaW5nYSAgPGJvbHNpbmdhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiA1
NzE5MykKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYzLDE2ICsxMzYzLDYgQEAgdm9pZCBFZGl0b3I6OmNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBT
dAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIC8vIERpc3BhdGNoIGEgY29tcG9z
aXRpb25lbmQgZXZlbnQgdG8gdGhlIGZvY3VzZWQgbm9kZS4KLSAgICAvLyBXZSBzaG91bGQgc2Vu
ZCB0aGlzIGV2ZW50IGJlZm9yZSBzZW5kaW5nIGEgVGV4dEV2ZW50IGFzIHdyaXR0ZW4gaW4gU2Vj
dGlvbiA2LjIuMiBhbmQgNi4yLjMgb2YKLSAgICAvLyB0aGUgRE9NIEV2ZW50IHNwZWNpZmljYXRp
b24uCi0gICAgTm9kZSogdGFyZ2V0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUo
KTsKLSAgICBpZiAodGFyZ2V0KSB7Ci0gICAgICAgIFJlZlB0cjxDb21wb3NpdGlvbkV2ZW50PiBl
dmVudCA9IENvbXBvc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY29tcG9zaXRpb25l
bmRFdmVudCwgbV9mcmFtZS0+ZG9tV2luZG93KCksIHRleHQpOwotICAgICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBlYyk7Ci0g
ICAgfQotCiAgICAgLy8gSWYgdGV4dCBpcyBlbXB0eSwgdGhlbiBkZWxldGUgdGhlIG9sZCBjb21w
b3NpdGlvbiBoZXJlLiAgSWYgdGV4dCBpcyBub24tZW1wdHksIEluc2VydFRleHRDb21tYW5kOjpp
bnB1dAogICAgIC8vIHdpbGwgZGVsZXRlIHRoZSBvbGQgY29tcG9zaXRpb24gd2l0aCBhbiBvcHRp
bWl6ZWQgcmVwbGFjZSBvcGVyYXRpb24uCiAgICAgaWYgKHRleHQuaXNFbXB0eSgpKQpAQCAtMTM5
MCw2ICsxMzgwLDE2IEBAIHZvaWQgRWRpdG9yOjpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3QK
ICAgICB9CiAKICAgICBzZXRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZShmYWxzZSk7
CisKKyAgICAvLyBEaXNwYXRjaCBhIGNvbXBvc2l0aW9uZW5kIGV2ZW50IHRvIHRoZSBmb2N1c2Vk
IG5vZGUuCisgICAgLy8gSXQgaXMgZ3JhY2VmdWwgdG8gc2VuZCB0aGlzIGNvbXBvc2l0aW9uZW5k
IGV2ZW50IGF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbiwgaS5lLiB3aGVuIHRoaXMgY29tcG9z
aXRpb24gaXMKKyAgICAvLyBmaW5pc2hlZC4KKyAgICBOb2RlKiB0YXJnZXQgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpOworICAgIGlmICh0YXJnZXQpIHsKKyAgICAgICAgUmVm
UHRyPENvbXBvc2l0aW9uRXZlbnQ+IGV2ZW50ID0gQ29tcG9zaXRpb25FdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5jb21wb3NpdGlvbmVuZEV2ZW50LCBtX2ZyYW1lLT5kb21XaW5kb3coKSwgdGV4
dCk7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICB0YXJnZXQtPmRpc3Bh
dGNoRXZlbnQoZXZlbnQsIGVjKTsKKyAgICB9CiB9CiAKIHZvaWQgRWRpdG9yOjpzZXRDb21wb3Np
dGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGlu
ZT4mIHVuZGVybGluZXMsIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0LCB1bnNpZ25lZCBzZWxlY3Rp
b25FbmQpCkBAIC0xNDA0LDYgKzE0MDQsNyBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24o
Y29uc3QgU3RyaW5nCiAgICAgfQogCiAgICAgTm9kZSogdGFyZ2V0ID0gbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+Zm9jdXNlZE5vZGUoKTsKKyAgICBib29sIHNlbmRDb21wb3NpdGlvbkVuZCA9IGZhbHNl
OwogICAgIGlmICh0YXJnZXQpIHsKICAgICAgICAgLy8gRGlzcGF0Y2ggYW4gYXBwcm9wcmlhdGUg
Y29tcG9zaXRpb24gZXZlbnQgdG8gdGhlIGZvY3VzZWQgbm9kZS4KICAgICAgICAgLy8gV2UgY2hl
Y2sgdGhlIGNvbXBvc2l0aW9uIHN0YXR1cyBhbmQgY2hvb3NlIGFuIGFwcHJvcHJpYXRlIGNvbXBv
c2l0aW9uIGV2ZW50IHNpbmNlIHRoaXMKQEAgLTE0MTYsNyArMTQxNyw5IEBAIHZvaWQgRWRpdG9y
OjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcKICAgICAgICAgLy8gICAgbm9kZSwgaS5lLiBt
X2NvbXBvc2l0aW9uTm9kZSAhPSAwICYmICF0ZXh0LmlzRW1wdHkoKS4KICAgICAgICAgLy8gMy4g
Q2FuY2VsaW5nIHRoZSBvbmdvaW5nIGNvbXBvc2l0aW9uLgogICAgICAgICAvLyAgICBTZW5kIGEg
Y29tcG9zaXRpb25lbmQgZXZlbnQgd2hlbiBmdW5jdGlvbiBkZWxldGVzIHRoZSBleGlzdGluZyBj
b21wb3NpdGlvbiBub2RlLCBpLmUuCi0gICAgICAgIC8vICAgIG1fY29tcG9zaXRpb25Ob2RlICE9
IDAgJiYgdGVzdC5pc0VtcHR5KCkuCisgICAgICAgIC8vICAgIG1fY29tcG9zaXRpb25Ob2RlICE9
IDAgJiYgdGVzdC5pc0VtcHR5KCkuIFRoaXMgY29tcG9zaXRpb25lbmQgZXZlbnQgaXMgdG8gYmUg
c2VudAorICAgICAgICAvLyAgICBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSBp
dCBpcyBncmFjZWZ1bCB0byBzZW5kIGEgY29tcG9zaXRpb25lbmQgZXZlbnQgYWZ0ZXIKKyAgICAg
ICAgLy8gICAgZmluaXNoaW5nIGFsbCBvcGVyYXRpb25zIHRoYXQgY2FuY2VsIGEgY29tcG9zaXRp
b24uCiAgICAgICAgIFJlZlB0cjxDb21wb3NpdGlvbkV2ZW50PiBldmVudDsKICAgICAgICAgaWYg
KCFtX2NvbXBvc2l0aW9uTm9kZSkgewogICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIHNlbmQgYSBj
b21wb3NpdGlvbnN0YXJ0IGV2ZW50IG9ubHkgd2hlbiB0aGUgZ2l2ZW4gdGV4dCBpcyBub3QgZW1w
dHkgYmVjYXVzZSB0aGlzCkBAIC0xNDI3LDcgKzE0MzAsNyBAQCB2b2lkIEVkaXRvcjo6c2V0Q29t
cG9zaXRpb24oY29uc3QgU3RyaW5nCiAgICAgICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgICAgIGV2ZW50ID0gQ29tcG9zaXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5jb21wb3NpdGlvbnVwZGF0ZUV2ZW50LCBtX2ZyYW1lLT5kb21XaW5kb3coKSwgdGV4dCk7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGV2ZW50ID0gQ29tcG9zaXRpb25FdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jb21wb3NpdGlvbmVuZEV2ZW50LCBtX2ZyYW1lLT5kb21X
aW5kb3coKSwgdGV4dCk7CisgICAgICAgICAgICAgICAgc2VuZENvbXBvc2l0aW9uRW5kID0gdHJ1
ZTsKICAgICAgICAgfQogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAgICAgaWYg
KGV2ZW50LmdldCgpKQpAQCAtMTQ3MSw2ICsxNDc0LDE0IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21w
b3NpdGlvbihjb25zdCBTdHJpbmcKICAgICB9CiAKICAgICBzZXRJZ25vcmVDb21wb3NpdGlvblNl
bGVjdGlvbkNoYW5nZShmYWxzZSk7CisKKyAgICAvLyBTZW5kIGEgY29tcG9zaXRpb25lbmQgZXZl
bnQgbm93IGlmIHRoZSBvbmdvaW5nIGNvbXBvc2l0aW9uIGhhcyBiZWVuIGNhbmNlbGVkIHNvIHdl
CisgICAgLy8gY2FuIHNlbmQgaXQgYWZ0ZXIgd2UgZmluaXNoIGNoYW5naW5nIHRoaXMgbm9kZS4K
KyAgICBpZiAodGFyZ2V0ICYmIHNlbmRDb21wb3NpdGlvbkVuZCkgeworICAgICAgICBSZWZQdHI8
Q29tcG9zaXRpb25FdmVudD4gZXZlbnQgPSBDb21wb3NpdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnRO
YW1lcygpLmNvbXBvc2l0aW9uZW5kRXZlbnQsIG1fZnJhbWUtPmRvbVdpbmRvdygpLCB0ZXh0KTsK
KyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIHRhcmdldC0+ZGlzcGF0Y2hF
dmVudChldmVudCwgZWMpOworICAgIH0KIH0KIAogdm9pZCBFZGl0b3I6Omlnbm9yZVNwZWxsaW5n
KCkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU3MTk0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMDQtMDYgIEhpcm9ub3JpIEJvbm8g
IDxoYm9ub0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIGEgdGVzdCB0aGF0IFZlcmlmaWVzIHRoYXQgYSBjb21wb3NpdGlv
bmVuZCBldmVudCBpcyBzZW50IGFmdGVyIHNlbmRpbmcgdGhlIERPTSBldmVudHMgc2VudCB3aGVu
IFdlYktpdAorICAgICAgICBkZWxldGVzIGEgY29tcG9zaXRpb24gbm9kZS4gVGhpcyBjaGFuZ2Ug
YWxzbyBjaGFuZ2VzIG15IHByZXZpb3VzIGxheW91dCB0ZXN0IHRvIHJlbW92ZSBhIGNoZWNrIGZv
ciB0ZXh0SW5wdXQKKyAgICAgICAgZXZlbnRzIHdoaWNoIG1vZGlmaWVzIGEgY29tcG9zaXRpb24g
bm9kZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMx
OTAyCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9pbWUtY29tcG9zaXRpb24tZXZlbnRzLTAwMS1l
eHBlY3RlZC50eHQ6IFJlYmFzZWxpbmVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL2ltZS1jb21w
b3NpdGlvbi1ldmVudHMtMDAxLmh0bWw6IFJlbW92ZWQgYSBjaGVjayBmb3IgdGV4dElucHV0IGV2
ZW50cy4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9pbWUtY29tcG9zaXRpb24tZXZlbnRzLTAwMi1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL2ltZS1jb21wb3NpdGlv
bi1ldmVudHMtMDAyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVk
OgorICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vd2lu
L1NraXBwZWQ6CisKIDIwMTAtMDQtMDYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL2ltZS1jb21wb3NpdGlvbi1ldmVudHMtMDAxLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9pbWUtY29tcG9zaXRpb24tZXZlbnRzLTAw
MS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU3MTkzKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvaW1lLWNvbXBvc2l0aW9uLWV2ZW50cy0wMDEtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC03LDcgKzcsNiBAQCBTVUNDRVNTOiBJTlBVVCAtIGNvbXBvc2l0aW9uc3RhcnQgLSAiMSIK
IFNVQ0NFU1M6IElOUFVUIC0gY29tcG9zaXRpb251cGRhdGUgLSAiMiIKIFNVQ0NFU1M6IElOUFVU
IC0gY29tcG9zaXRpb251cGRhdGUgLSAiMyIKIFNVQ0NFU1M6IElOUFVUIC0gY29tcG9zaXRpb25l
bmQgLSAiNCIKLVNVQ0NFU1M6IElOUFVUIC0gdGV4dElucHV0IC0gIjQiCiBTVUNDRVNTOiBJTlBV
VCAtIGNvbXBvc2l0aW9uc3RhcnQgLSAiNSIKIFNVQ0NFU1M6IElOUFVUIC0gY29tcG9zaXRpb251
cGRhdGUgLSAiNiIKIFNVQ0NFU1M6IElOUFVUIC0gY29tcG9zaXRpb251cGRhdGUgLSAiNyIKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2ltZS1jb21wb3NpdGlvbi1ldmVudHMtMDAxLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW1lLWNvbXBvc2l0aW9u
LWV2ZW50cy0wMDEuaHRtbAkocmV2aXNpb24gNTcxOTMpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9pbWUtY29tcG9zaXRpb24tZXZlbnRzLTAwMS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw2IEBAIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgICB0ZXN0
LmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCBsb2dFdmVudCwgZmFsc2UpOwog
ICAgIHRlc3QuYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb251cGRhdGUiLCBsb2dFdmVudCwg
ZmFsc2UpOwogICAgIHRlc3QuYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCBsb2dF
dmVudCwgZmFsc2UpOwotICAgIHRlc3QuYWRkRXZlbnRMaXN0ZW5lcigidGV4dElucHV0IiwgbG9n
RXZlbnQsIGZhbHNlKTsKIAogICAgIC8vIENhc2UgMTogQ29tcG9zZSBhIHRleHQgYW5kIGNvbW1p
dCBpdC4KICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLnNldE1hcmtlZFRleHQoJzEnLCAwLCAxKTsK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2ltZS1jb21wb3NpdGlvbi1ldmVudHMtMDAy
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9pbWUt
Y29tcG9zaXRpb24tZXZlbnRzLTAwMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9pbWUtY29tcG9zaXRpb24tZXZlbnRzLTAwMi1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDAgQEAKK1RoaXMgdGVzdHMgdGhhdCBjYWxsaW5n
IGlucHV0LW1ldGhvZCBmdW5jdGlvbnMgc2VuZHMgQ29tcG9zaXRpb24gRXZlbnRzIGFuZCBET00g
RXZlbnRzIGludHJvZHVjZWQgaW4gRE9NIExldmVsIDMuCisKK1RvIHRlc3QgbWFudWFsbHksIHR5
cGUgb3B0LXUgaW4gdGhlIGZvbGxvd2luZyA8ZGl2PiBlbGVtZW50LCBhbmQgc2VlIHRoaXMgcGFn
ZSBkb2Vzbid0IHNob3cgJ0ZBSUxFRCcgbGluZXMuCisKKzQKK1NVQ0NFU1M6IERJViAtIGNvbXBv
c2l0aW9uc3RhcnQgLSAiMSIKK1NVQ0NFU1M6IERPTVN1YnRyZWVNb2RpZmllZCAtICIiIC0+ICIi
CitTVUNDRVNTOiBET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQgLSAiIiAtPiAiMSIKK1NVQ0NFU1M6
IERPTVN1YnRyZWVNb2RpZmllZCAtICIiIC0+ICIiCitTVUNDRVNTOiBESVYgLSBjb21wb3NpdGlv
bnVwZGF0ZSAtICIyIgorU1VDQ0VTUzogRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkIC0gIjEiIC0+
ICIiCitTVUNDRVNTOiBET01TdWJ0cmVlTW9kaWZpZWQgLSAiIiAtPiAiIgorU1VDQ0VTUzogRE9N
Q2hhcmFjdGVyRGF0YU1vZGlmaWVkIC0gIiIgLT4gIjIiCitTVUNDRVNTOiBET01TdWJ0cmVlTW9k
aWZpZWQgLSAiIiAtPiAiIgorU1VDQ0VTUzogRElWIC0gY29tcG9zaXRpb251cGRhdGUgLSAiMyIK
K1NVQ0NFU1M6IERPTUNoYXJhY3RlckRhdGFNb2RpZmllZCAtICIyIiAtPiAiIgorU1VDQ0VTUzog
RE9NU3VidHJlZU1vZGlmaWVkIC0gIiIgLT4gIiIKK1NVQ0NFU1M6IERPTUNoYXJhY3RlckRhdGFN
b2RpZmllZCAtICIiIC0+ICIzIgorU1VDQ0VTUzogRE9NU3VidHJlZU1vZGlmaWVkIC0gIiIgLT4g
IiIKK1NVQ0NFU1M6IERPTUNoYXJhY3RlckRhdGFNb2RpZmllZCAtICIzIiAtPiAiIgorU1VDQ0VT
UzogRE9NU3VidHJlZU1vZGlmaWVkIC0gIiIgLT4gIiIKK1NVQ0NFU1M6IERPTUNoYXJhY3RlckRh
dGFNb2RpZmllZCAtICIiIC0+ICI0IgorU1VDQ0VTUzogRE9NU3VidHJlZU1vZGlmaWVkIC0gIiIg
LT4gIiIKK1NVQ0NFU1M6IERJViAtIGNvbXBvc2l0aW9uZW5kIC0gIjQiCitTVUNDRVNTOiBESVYg
LSBjb21wb3NpdGlvbnN0YXJ0IC0gIjUiCitTVUNDRVNTOiBET01DaGFyYWN0ZXJEYXRhTW9kaWZp
ZWQgLSAiNCIgLT4gIjQ1IgorU1VDQ0VTUzogRE9NU3VidHJlZU1vZGlmaWVkIC0gIiIgLT4gIiIK
K1NVQ0NFU1M6IERJViAtIGNvbXBvc2l0aW9udXBkYXRlIC0gIjYiCitTVUNDRVNTOiBET01DaGFy
YWN0ZXJEYXRhTW9kaWZpZWQgLSAiNDUiIC0+ICI0IgorU1VDQ0VTUzogRE9NU3VidHJlZU1vZGlm
aWVkIC0gIiIgLT4gIiIKK1NVQ0NFU1M6IERPTUNoYXJhY3RlckRhdGFNb2RpZmllZCAtICI0IiAt
PiAiNDYiCitTVUNDRVNTOiBET01TdWJ0cmVlTW9kaWZpZWQgLSAiIiAtPiAiIgorU1VDQ0VTUzog
RElWIC0gY29tcG9zaXRpb251cGRhdGUgLSAiNyIKK1NVQ0NFU1M6IERPTUNoYXJhY3RlckRhdGFN
b2RpZmllZCAtICI0NiIgLT4gIjQiCitTVUNDRVNTOiBET01TdWJ0cmVlTW9kaWZpZWQgLSAiIiAt
PiAiIgorU1VDQ0VTUzogRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkIC0gIjQiIC0+ICI0NyIKK1NV
Q0NFU1M6IERPTVN1YnRyZWVNb2RpZmllZCAtICIiIC0+ICIiCitTVUNDRVNTOiBET01DaGFyYWN0
ZXJEYXRhTW9kaWZpZWQgLSAiNDciIC0+ICI0IgorU1VDQ0VTUzogRE9NU3VidHJlZU1vZGlmaWVk
IC0gIiIgLT4gIiIKK1NVQ0NFU1M6IERJViAtIGNvbXBvc2l0aW9uZW5kIC0gIiIKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL2ltZS1jb21wb3NpdGlvbi1ldmVudHMtMDAyLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW1lLWNvbXBvc2l0aW9uLWV2ZW50
cy0wMDIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2ltZS1j
b21wb3NpdGlvbi1ldmVudHMtMDAyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAK
KzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHA+VGhp
cyB0ZXN0cyB0aGF0IGNhbGxpbmcgaW5wdXQtbWV0aG9kIGZ1bmN0aW9ucyBzZW5kcyBDb21wb3Np
dGlvbiBFdmVudHMgYW5kIERPTSBFdmVudHMgaW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMy48L3A+
Cis8cD5UbyB0ZXN0IG1hbnVhbGx5LCB0eXBlIG9wdC11IGluIHRoZSBmb2xsb3dpbmcgJmx0O2Rp
diZndDsgZWxlbWVudCwgYW5kIHNlZSB0aGlzIHBhZ2UgZG9lc24ndCBzaG93ICdGQUlMRUQnIGxp
bmVzLjwvcD4KKzxkaXYgaWQ9InRlc3QiIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSI+PC9kaXY+Cis8
dWwgaWQ9ImNvbnNvbGUiPjwvdWw+Cis8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiPgorZnVuY3Rpb24gbG9nKHN0cikgeworICAgdmFyIGxpID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTsKKyAgIGxpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKHN0cikpOworICAgdmFyIGNvbnNvbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnY29uc29sZScpOworICAgY29uc29sZS5hcHBlbmRDaGlsZChsaSk7Cit9CisKK2Z1bmN0
aW9uIGxvZ0V2ZW50KGUpIHsKKyAgICB2YXIgdGFyZ2V0ID0gZS50YXJnZXQ7CisgICAgdmFyIHR5
cGUgPSBlLnR5cGU7CisgICAgaWYgKGUudHlwZSA9PSAnY29tcG9zaXRpb25zdGFydCcgfHwgZS50
eXBlID09ICdjb21wb3NpdGlvbnVwZGF0ZScgfHwgZS50eXBlID09ICdjb21wb3NpdGlvbmVuZCcp
CisgICAgICAgIGxvZygnU1VDQ0VTUzogJyArIHRhcmdldC50YWdOYW1lICsgJyAtICcgKyBlLnR5
cGUgKyAnIC0gIicgKyBlLmRhdGEgKyAnIicpOworICAgIGVsc2UgaWYgKGUudHlwZSA9PSAnRE9N
Q2hhcmFjdGVyRGF0YU1vZGlmaWVkJykKKyAgICAgICAgbG9nKCdTVUNDRVNTOiAnICsgZS50eXBl
ICsgJyAtICInICsgZS5wcmV2VmFsdWUgKyAnIiAtPiAiJyArIGUubmV3VmFsdWUgKyAnIicpOwor
ICAgIGVsc2UgaWYgKGUudHlwZSA9PSAnRE9NU3VidHJlZU1vZGlmaWVkJykKKyAgICAgICAgbG9n
KCdTVUNDRVNTOiAnICsgZS50eXBlICsgJyAtICInICsgZS5wcmV2VmFsdWUgKyAnIiAtPiAiJyAr
IGUubmV3VmFsdWUgKyAnIicpOworICAgIGVsc2UKKyAgICAgICAgbG9nKCdGQUlMRUQ6ICcgKyB0
YXJnZXQudGFnTmFtZSArICcgLSAnICsgZS50eXBlICsgJyAtICInICsgZS5kYXRhICsgJyInKTsK
K30KKwordmFyIHRlc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpOwordGVzdC5m
b2N1cygpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVy
cyB0byB0aGUgPGRpdj4gbm9kZS4KKyAgICB0ZXN0LmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0
aW9uc3RhcnQiLCBsb2dFdmVudCwgZmFsc2UpOworICAgIHRlc3QuYWRkRXZlbnRMaXN0ZW5lcigi
Y29tcG9zaXRpb251cGRhdGUiLCBsb2dFdmVudCwgZmFsc2UpOworICAgIHRlc3QuYWRkRXZlbnRM
aXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCBsb2dFdmVudCwgZmFsc2UpOworICAgIHRlc3QuYWRk
RXZlbnRMaXN0ZW5lcigiRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkIiwgbG9nRXZlbnQsIGZhbHNl
KTsKKyAgICB0ZXN0LmFkZEV2ZW50TGlzdGVuZXIoIkRPTVN1YnRyZWVNb2RpZmllZCIsIGxvZ0V2
ZW50LCBmYWxzZSk7CisKKyAgICAvLyBDYXNlIDE6IENvbXBvc2UgYSB0ZXh0IGFuZCBjb21taXQg
aXQuCisgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCcxJywgMCwgMSk7Cisg
ICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCcyJywgMCwgMSk7CisgICAgdGV4
dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCczJywgMCwgMSk7CisgICAgdGV4dElucHV0
Q29udHJvbGxlci5pbnNlcnRUZXh0KCc0Jyk7CisKKyAgICAvLyBDYXNlIDI6IENvbXBvc2UgYSB0
ZXh0IGJ1dCBjYW5jZWwgaXQuCisgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0
KCc1JywgMCwgMSk7CisgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCc2Jywg
MCwgMSk7CisgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCc3JywgMCwgMSk7
CisgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCcnLCAwLCAwKTsKK30KKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQJ
KHJldmlzaW9uIDU3MTkzKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQJKHdv
cmtpbmcgY29weSkKQEAgLTU1MDgsNiArNTUwOCw3IEBAIGZhc3QvZm9ybXMvaW5wdXQtbWF4bGVu
Z3RoLWltZS1jb21wbGV0ZWQKIGZhc3QvZm9ybXMvaW5wdXQtbWF4bGVuZ3RoLWltZS1wcmVlZGl0
Lmh0bWwKIGZhc3QvdGV4dC9pbnRlcm5hdGlvbmFsL3RoYWktY3Vyc29yLXBvc2l0aW9uLmh0bWwK
IGZhc3QvZXZlbnRzL2ltZS1jb21wb3NpdGlvbi1ldmVudHMtMDAxLmh0bWwKK2Zhc3QvZXZlbnRz
L2ltZS1jb21wb3NpdGlvbi1ldmVudHMtMDAyLmh0bWwKIAogIyBObyBVc2VyIFNjcmlwdHMKIHVz
ZXJzY3JpcHRzCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQJKHJldmlzaW9uIDU3MTkzKQor
KysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMjc4
LDYgKzI3OCw3IEBAIGZhc3QvZm9ybXMvaW5wdXQtbWF4bGVuZ3RoLWltZS1wcmVlZGl0LmgKIGZh
c3QvZm9ybXMvaW5wdXQtbWF4bGVuZ3RoLWltZS1jb21wbGV0ZWQuaHRtbAogZmFzdC90ZXh0L2lu
dGVybmF0aW9uYWwvdGhhaS1jdXJzb3ItcG9zaXRpb24uaHRtbAogZmFzdC9ldmVudHMvaW1lLWNv
bXBvc2l0aW9uLWV2ZW50cy0wMDEuaHRtbAorZmFzdC9ldmVudHMvaW1lLWNvbXBvc2l0aW9uLWV2
ZW50cy0wMDIuaHRtbAogCiAjIE1pc3NpbmcgbGF5b3V0VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQ
cmVmZXJlbmNlKCkKIGZhc3QvZXZlbnRzL3BhZ2VzaG93LXBhZ2VoaWRlLW9uLWJhY2stY2FjaGVk
Lmh0bWwKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCShyZXZpc2lvbiA1NzE5MykKKysr
IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC04MjIs
MyArODIyLDYgQEAgZmFzdC9tZWRpYS9tZWRpYS1mZWF0dXJlLXdndC12aWV3LW1vZGUuaAogCiAj
IE5lZWQgZXhwZWN0YXRpb25zLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM2NDYxCiBmYXN0L3JlcGFpbnQvb3ZlcmZsb3ctc2Nyb2xsLWJvZHktYXBwZWFyLmh0
bWwKKworIyBObyBUZXh0SW5wdXRDb250cm9sbGVyCitmYXN0L2V2ZW50cy9pbWUtY29tcG9zaXRp
b24tZXZlbnRzLTAwMi5odG1sCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>