<?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>114873</bug_id>
          
          <creation_ts>2013-04-19 06:50:41 -0700</creation_ts>
          <short_desc>[GTK] Reimplement atk_text_get_text_*_offset for SENTENCE boundaries</short_desc>
          <delta_ts>2013-09-04 03:10:05 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>114871</dependson>
    
    <dependson>118908</dependson>
          <blocked>114867</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mario Sanchez Prada">mario</reporter>
          <assigned_to name="Mario Sanchez Prada">mario</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>chrys87</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jdiggs</cc>
    
    <cc>philn</cc>
    
    <cc>rego+ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>878418</commentid>
    <comment_count>0</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-04-19 06:50:41 -0700</bug_when>
    <thetext>We need to get rid of Pango/Gail dependency, and this is one of the functionalities we would need to fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910196</commentid>
    <comment_count>1</comment_count>
      <attachid>207117</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-07-19 10:10:06 -0700</bug_when>
    <thetext>Created attachment 207117
Patch proposal

Almost the last patch in these series. The last one will be one actually removing the whole Pango/Gail stuff and probably changing the ugly set of ifs in webkitAccessibleTextGetTextForOffset() into a switch statement :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910198</commentid>
    <comment_count>2</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-07-19 10:11:46 -0700</bug_when>
    <thetext>Depending on the patch for the WORD boundary, since some changes where introduced there for getSelectionOffsetsForObject() that we are using here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910203</commentid>
    <comment_count>3</comment_count>
      <attachid>207117</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-07-19 10:14:49 -0700</bug_when>
    <thetext>Comment on attachment 207117
Patch proposal

Attachment 207117 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/1130762</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910208</commentid>
    <comment_count>4</comment_count>
      <attachid>207117</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-07-19 10:16:46 -0700</bug_when>
    <thetext>Comment on attachment 207117
Patch proposal

Attachment 207117 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1106912</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910212</commentid>
    <comment_count>5</comment_count>
      <attachid>207117</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-07-19 10:19:58 -0700</bug_when>
    <thetext>Comment on attachment 207117
Patch proposal

Attachment 207117 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/1096888</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910445</commentid>
    <comment_count>6</comment_count>
      <attachid>207190</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-07-19 23:54:12 -0700</bug_when>
    <thetext>Created attachment 207190
Patch proposal

New patch without an extra snippet of code that slipped in before</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910450</commentid>
    <comment_count>7</comment_count>
      <attachid>207190</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-07-20 00:17:56 -0700</bug_when>
    <thetext>Comment on attachment 207190
Patch proposal

Attachment 207190 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/1140103</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910452</commentid>
    <comment_count>8</comment_count>
      <attachid>207190</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-07-20 00:28:13 -0700</bug_when>
    <thetext>Comment on attachment 207190
Patch proposal

Attachment 207190 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1144026</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910462</commentid>
    <comment_count>9</comment_count>
      <attachid>207190</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-07-20 03:06:05 -0700</bug_when>
    <thetext>Comment on attachment 207190
Patch proposal

Attachment 207190 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/1139134</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914378</commentid>
    <comment_count>10</comment_count>
      <attachid>208066</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-08-03 08:24:39 -0700</bug_when>
    <thetext>Created attachment 208066
Patch proposal

Patch rebased against trunk, to make EWS happy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914379</commentid>
    <comment_count>11</comment_count>
      <attachid>208066</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-08-03 09:34:07 -0700</bug_when>
    <thetext>Comment on attachment 208066
Patch proposal

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

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:947
&gt; +static bool isSentenceBoundary(const VisiblePosition &amp;pos)

nit: &amp; on wrong side</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921419</commentid>
    <comment_count>12</comment_count>
    <who name="chrys">chrys87</who>
    <bug_when>2013-08-27 02:56:40 -0700</bug_when>
    <thetext>Please can review someone the Patch :D? I really need it :D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921552</commentid>
    <comment_count>13</comment_count>
      <attachid>208066</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-08-27 08:54:58 -0700</bug_when>
    <thetext>Comment on attachment 208066
Patch proposal

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

any layout tests available?

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:952
&gt; +    // It&apos;s definitely a sentence boundary if there&apos;s nothing before.

shouldn&apos;t this method just be

return startOfSentence(pos) == pos;

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:961
&gt; +static bool isSpaceBetweenRealSentences(const VisiblePosition&amp; position)

the name for the method is a bit confusing. what is it trying to determine?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923972</commentid>
    <comment_count>14</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-09-03 05:56:44 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 208066 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=208066&amp;action=review
&gt; 
&gt; any layout tests available?

This implements atk_text_get_text_{at|before|after}_offset() for the AT_TEXT_BOUNDARY_SENTENCE_{START|END} boundaries, which are ATK specific things that are not tested with layout tests, but with the unit tests for ATK (Source/WebKit/gtk/tests/testatk.c).

The point of this patch is to replace the old implementation, based on GAIL (deprecated library) and Pango, with the new one without having those dependencies, so as long as the same unit tests keep passing for the new implementation, it could be considered tested.

&gt; &gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:952
&gt; &gt; +    // It&apos;s definitely a sentence boundary if there&apos;s nothing before.
&gt; 
&gt; shouldn&apos;t this method just be
&gt; 
&gt; return startOfSentence(pos) == pos;

Not really, becaause that would fail if you are exactly in the boundary, which is what this function tries to determine.

For instance, consider the following text:

 &quot;This is sentence 1. And this is sentence 2&quot;

If you happen to be in the position for the &apos;A&apos; in &quot;And&quot;, right after the space, startOfSentence(pos) will return you the offset 0 (right at the beginning) since you are both at the beginning of the second sentence and at the end of the first one.

That&apos;s the reason why I do the backwards &amp; forward dance, so I can be sure that the current position is actually a boundary, since endOfSentence(0) in that case will return again the offset for the &apos;A&apos; of &quot;And&quot;.

&gt; &gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:961
&gt; &gt; +static bool isSpaceBetweenRealSentences(const VisiblePosition&amp; position)
&gt; 
&gt; the name for the method is a bit confusing. what is it trying to determine?

Agreed I&apos;m really bad at names :)

What the method is trying to determine, though, is whether the position is in the middle of two &quot;real sentences&quot;, where &quot;real sentence&quot; means portions of text identified as sentences withOUT any leading or trailing whitespace.

For instance, consider the following example (notice multiple spaces between sentences, that should also work):

 &quot;This is the 1st sentence.  This is the 2nd one.  And this is the 3rd one.&quot;

In this case isSpaceBetweenRealSentences() should return true whenever you are in any position after a period and before the first non-space character (the &apos;T&apos; or the &apos;A&apos;).

This weird thing is needed because we need to do some extra checks to implement the SENTENCE_END boundary, which would consider the following things to be sentences to the eyes of ATK:

  Sentence 1: &quot;This is the 1st sentence.&quot;
  Sentence 2: &quot; This is the 2nd one.&quot;
  Sentence 3: &quot; And this is the 3rd one.&quot;

Fortunately, this would be just a temporary need since we have just deprecated recently the END boundaries in ATK/AT-SPI, so this code will be removed as soon as WebKitGTK+ can safely depend on newer versions of ATK and assume newer versions of AT-SPI running in the system (1 year from now, theoretically).

In any case, the name is certainly confusing, so I will change it for isWhiteSpaceBetweenSentences(). I think the &quot;Real&quot; part does not do any good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923974</commentid>
    <comment_count>15</comment_count>
      <attachid>210364</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-09-03 06:04:10 -0700</bug_when>
    <thetext>Created attachment 210364
Patch proposal

Attaching new patch with the renamed function</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924289</commentid>
    <comment_count>16</comment_count>
      <attachid>210364</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-09-03 23:06:38 -0700</bug_when>
    <thetext>Comment on attachment 210364
Patch proposal

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

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:916
&gt; +static char* webkitAccessibleTextGetSentenceForBoundary(AtkText* text, int offset, AtkTextBoundary boundaryType, GetTextRelativePosition textPosition, int* startOffset, int* endOffset)

you don&apos;t need Get in the method name</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924338</commentid>
    <comment_count>17</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-09-04 03:09:20 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 210364 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=210364&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:916
&gt; &gt; +static char* webkitAccessibleTextGetSentenceForBoundary(AtkText* text, int offset, AtkTextBoundary boundaryType, GetTextRelativePosition textPosition, int* startOffset, int* endOffset)
&gt; 
&gt; you don&apos;t need Get in the method name

Ok. I&apos;ll change it before landing.

Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924339</commentid>
    <comment_count>18</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-09-04 03:10:05 -0700</bug_when>
    <thetext>Committed r155031: &lt;http://trac.webkit.org/changeset/155031&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207117</attachid>
            <date>2013-07-19 10:10:06 -0700</date>
            <delta_ts>2013-07-19 23:53:56 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0004-2013-07-19-Mario-Sanchez-Prada-mario.prada-samsung.c.patch</filename>
            <type>text/plain</type>
            <size>11669</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA5ODVmZjcwZGQ1ZjFlZmE3Yjg0ZDNlMDg1NTJmYTk3M2I1Mjk0N2U5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KRGF0ZTogRnJpLCAxOSBKdWwgMjAxMyAxNzoxOTo0NCArMDEwMApTdWJqZWN0OiBb
UEFUQ0ggNC80XSAyMDEzLTA3LTE5ICBNYXJpbyBTYW5jaGV6IFByYWRhIAogPG1hcmlvLnByYWRh
QHNhbXN1bmcuY29tPgoKICAgICAgICBbR1RLXSBSZWltcGxlbWVudCBhdGtfdGV4dF9nZXRfdGV4
dF8qX29mZnNldCBmb3IgU0VOVEVOQ0UgYm91bmRhcmllcwogICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ4NzMKCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCgogICAgICAgIFJlLWltcGxlbWVudCB0aGlzIGZ1bmN0aW9ucyB3aXRob3V0
IHVzaW5nIEdhaWxUZXh0VXRpbCBub3IgUGFuZ28uCgogICAgICAgICogYWNjZXNzaWJpbGl0eS9h
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwOgogICAgICAgIChpc1NlbnRlbmNl
Qm91bmRhcnkpOiBIZWxwZXIgZnVuY3Rpb24gdG8ga25vdyB3aGVuIHdlIGFyZSBlaXRoZXIKICAg
ICAgICBhdCB0aGUgYmVnaW5uaW5nIG9yIHRoZSBlbmQgb2YgYSBzZW50ZW5jZS4KICAgICAgICAo
aXNTcGFjZUJldHdlZW5SZWFsU2VudGVuY2VzKTogSXQgcmV0dXJucyB0cnVlIGlmIHdlIGFyZSBp
biB0aGUKICAgICAgICBtaWRkbGUgb2YgYSB3aGl0ZSBzcGFjZSBiZXR3ZWVuIHNlbnRlbmNlcy4g
VXNlZnVsIGZvciBpbXBsZW1lbnRpbmcKICAgICAgICB0aGUgU0VOVEVOQ0VfRU5EIGJvdW5kYXJ5
IHR5cGUuCiAgICAgICAgKHNlbnRlbmNlQXRQb3NpdGlvbkZvckF0a0JvdW5kYXJ5KTogTmV3IGhl
bHBlciBmdW5jdGlvbiB0byBmaW5kIHRoZQogICAgICAgIHNlbnRlbmNlIGF0IGEgZ2l2ZW4gcG9z
aXRpb24gY29uc2lkZXJpbmcgdmFsdWVzIG9mIEF0a1RleHRCb3VuZGFyeS4KICAgICAgICAod2Vi
a2l0QWNjZXNzaWJsZVRleHRHZXRTZW50ZW5jZUZvckJvdW5kYXJ5KTogTmV3IGZ1bmN0aW9uLAog
ICAgICAgIGltcGxlbWVudGluZyBhdGtfdGV4dF9nZXRfdGV4dF8qX29mZnNldCBmb3IgU0VOVEVO
Q0UuCiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEZvck9mZnNldCk6IFJlcGxh
Y2UgdXNhZ2Ugb2YgR2FpbCBmb3IKICAgICAgICBMSU5FIGJvdW5kYXJpZXMgd2l0aCB3ZWJraXRB
Y2Nlc3NpYmxlVGV4dEdldFdvcmRGb3JCb3VuZGFyeSgpLgotLS0KIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMiArKysKIC4uLi9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwICAgICAgICAgIHwgIDE1MSArKysrKysrKysr
KysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxNzMgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCAzZWYyNDBmLi5kOWYyY2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTMt
MDctMTkgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1zdW5nLmNvbT4KKwor
ICAgICAgICBbR1RLXSBSZWltcGxlbWVudCBhdGtfdGV4dF9nZXRfdGV4dF8qX29mZnNldCBmb3Ig
U0VOVEVOQ0UgYm91bmRhcmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTE0ODczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUmUtaW1wbGVtZW50IHRoaXMgZnVuY3Rpb25zIHdpdGhvdXQgdXNpbmcgR2Fp
bFRleHRVdGlsIG5vciBQYW5nby4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcDoKKyAgICAgICAgKGlzU2VudGVuY2VCb3VuZGFy
eSk6IEhlbHBlciBmdW5jdGlvbiB0byBrbm93IHdoZW4gd2UgYXJlIGVpdGhlcgorICAgICAgICBh
dCB0aGUgYmVnaW5uaW5nIG9yIHRoZSBlbmQgb2YgYSBzZW50ZW5jZS4KKyAgICAgICAgKGlzU3Bh
Y2VCZXR3ZWVuUmVhbFNlbnRlbmNlcyk6IEl0IHJldHVybnMgdHJ1ZSBpZiB3ZSBhcmUgaW4gdGhl
CisgICAgICAgIG1pZGRsZSBvZiBhIHdoaXRlIHNwYWNlIGJldHdlZW4gc2VudGVuY2VzLiBVc2Vm
dWwgZm9yIGltcGxlbWVudGluZworICAgICAgICB0aGUgU0VOVEVOQ0VfRU5EIGJvdW5kYXJ5IHR5
cGUuCisgICAgICAgIChzZW50ZW5jZUF0UG9zaXRpb25Gb3JBdGtCb3VuZGFyeSk6IE5ldyBoZWxw
ZXIgZnVuY3Rpb24gdG8gZmluZCB0aGUKKyAgICAgICAgc2VudGVuY2UgYXQgYSBnaXZlbiBwb3Np
dGlvbiBjb25zaWRlcmluZyB2YWx1ZXMgb2YgQXRrVGV4dEJvdW5kYXJ5LgorICAgICAgICAod2Vi
a2l0QWNjZXNzaWJsZVRleHRHZXRTZW50ZW5jZUZvckJvdW5kYXJ5KTogTmV3IGZ1bmN0aW9uLAor
ICAgICAgICBpbXBsZW1lbnRpbmcgYXRrX3RleHRfZ2V0X3RleHRfKl9vZmZzZXQgZm9yIFNFTlRF
TkNFLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0Rm9yT2Zmc2V0KTogUmVw
bGFjZSB1c2FnZSBvZiBHYWlsIGZvcgorICAgICAgICBMSU5FIGJvdW5kYXJpZXMgd2l0aCB3ZWJr
aXRBY2Nlc3NpYmxlVGV4dEdldFdvcmRGb3JCb3VuZGFyeSgpLgorCiAyMDEzLTA3LTE2ICBNYXJp
byBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0dU
S10gUmVpbXBsZW1lbnQgYXRrX3RleHRfZ2V0X3RleHRfKl9vZmZzZXQgZm9yIExJTkUgYm91bmRh
cmllcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCmluZGV4IGQwYzBkYTcuLjQx
NTVhZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKQEAgLTM4LDYgKzM4
LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAi
SG9zdFdpbmRvdy5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgpAQCAtOTQyLDYgKzk0MywxNTMgQEAgc3RhdGljIGNoYXIqIHdlYmtpdEFj
Y2Vzc2libGVUZXh0R2V0TGluZUZvckJvdW5kYXJ5KEF0a1RleHQqIHRleHQsIGludCBvZmZzZXQs
IEEKICAgICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0KHRleHQsICpzdGFydE9m
ZnNldCwgKmVuZE9mZnNldCk7CiB9CiAKK3N0YXRpYyBib29sIGlzU2VudGVuY2VCb3VuZGFyeShj
b25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcykKK3sKKyAgICBpZiAocG9zLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJdCdzIGRlZmluaXRlbHkgYSBzZW50ZW5jZSBi
b3VuZGFyeSBpZiB0aGVyZSdzIG5vdGhpbmcgYmVmb3JlLgorICAgIGlmIChwb3MucHJldmlvdXMo
KS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBXZSBnbyBiYWNrd2Fy
ZHMgYW5kIGZvcndhcmQgdG8gbWFrZSBzdXJlIGFib3V0IHRoaXMuCisgICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0T2ZQcmV2aW91c1NlbnRlbmNlID0gc3RhcnRPZlNlbnRlbmNlKHBvcyk7CisgICAg
cmV0dXJuIHN0YXJ0T2ZQcmV2aW91c1NlbnRlbmNlLmlzTm90TnVsbCgpICYmIHBvcyA9PSBlbmRP
ZlNlbnRlbmNlKHN0YXJ0T2ZQcmV2aW91c1NlbnRlbmNlKTsKK30KKworc3RhdGljIGJvb2wgaXNT
cGFjZUJldHdlZW5SZWFsU2VudGVuY2VzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24p
Cit7CisgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoIWlzV2hpdGVzcGFjZShwb3NpdGlvbi5jaGFyYWN0ZXJBZnRlcigpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZXaGl0ZVNwYWNl
ID0gc3RhcnRPZldvcmQocG9zaXRpb24sIFJpZ2h0V29yZElmT25Cb3VuZGFyeSk7CisgICAgVmlz
aWJsZVBvc2l0aW9uIGVuZE9mV2hpdGVTcGFjZSA9IGVuZE9mV29yZChzdGFydE9mV2hpdGVTcGFj
ZSwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICBpZiAoIWlzU2VudGVuY2VCb3VuZGFyeShz
dGFydE9mV2hpdGVTcGFjZSkgJiYgIWlzU2VudGVuY2VCb3VuZGFyeShlbmRPZldoaXRlU3BhY2Up
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gY29tcGFyZVBvc2l0aW9ucyhz
dGFydE9mV2hpdGVTcGFjZSwgcG9zaXRpb24pIDw9IDAgJiYgY29tcGFyZVBvc2l0aW9ucyhlbmRP
ZldoaXRlU3BhY2UsIHBvc2l0aW9uKSA+PSAwOworfQorCitzdGF0aWMgVmlzaWJsZVNlbGVjdGlv
biBzZW50ZW5jZUF0UG9zaXRpb25Gb3JBdGtCb3VuZGFyeShjb25zdCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjb3JlT2JqZWN0LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBBdGtUZXh0
Qm91bmRhcnkgYm91bmRhcnlUeXBlKQoreworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0
aW9uOworICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbjsKKworICAgIGJvb2wgaXNBdFN0
YXJ0T2ZTZW50ZW5jZUZvckVuZEJvdW5kYXJ5ID0gaXNTcGFjZUJldHdlZW5SZWFsU2VudGVuY2Vz
KHBvc2l0aW9uKSB8fCBpc1NlbnRlbmNlQm91bmRhcnkocG9zaXRpb24pOworICAgIGlmIChib3Vu
ZGFyeVR5cGUgPT0gQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfU1RBUlQgfHwgIWlzQXRTdGFy
dE9mU2VudGVuY2VGb3JFbmRCb3VuZGFyeSkgeworICAgICAgICBzdGFydFBvc2l0aW9uID0gaXNT
ZW50ZW5jZUJvdW5kYXJ5KHBvc2l0aW9uKSA/IHBvc2l0aW9uIDogc3RhcnRPZlNlbnRlbmNlKHBv
c2l0aW9uKTsKKyAgICAgICAgLy8gc3RhcnRPZlNlbnRlbmNlIG1pZ2h0IHN0b3AgYXQgYSBsaW5l
YnJlYWsgaW4gdGhlIEhUTUwgc291cmNlIGNvZGUsCisgICAgICAgIC8vIGJ1dCB3ZSBkb24ndCB3
YW50IHRvIHN0b3AgdGhlcmUgeWV0LCBzbyBrZWVwIGdvaW5nLgorICAgICAgICB3aGlsZSAoIWlz
U2VudGVuY2VCb3VuZGFyeShzdGFydFBvc2l0aW9uKSAmJiBpc0hUTUxMaW5lQnJlYWsoc3RhcnRQ
b3NpdGlvbi5jaGFyYWN0ZXJCZWZvcmUoKSkpCisgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0g
c3RhcnRPZlNlbnRlbmNlKHN0YXJ0UG9zaXRpb24pOworCisgICAgICAgIGVuZFBvc2l0aW9uID0g
ZW5kT2ZTZW50ZW5jZShzdGFydFBvc2l0aW9uKTsKKyAgICB9CisKKyAgICBpZiAoYm91bmRhcnlU
eXBlID09IEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX0VORCkgeworICAgICAgICBpZiAoaXNB
dFN0YXJ0T2ZTZW50ZW5jZUZvckVuZEJvdW5kYXJ5KSB7CisgICAgICAgICAgICBzdGFydFBvc2l0
aW9uID0gcG9zaXRpb247CisgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IGVuZE9mU2VudGVuY2Uo
ZW5kT2ZXb3JkKHBvc2l0aW9uLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIHN0YXJ0T2ZTZW50ZW5jZSByZXR1cm5zIGEgcG9zaXRpb24gYWZ0ZXIgYW55
IHdoaXRlIHNwYWNlIHByZXZpb3VzIHRvCisgICAgICAgIC8vIHRoZSBzZW50ZW5jZSwgc28gd2Ug
bWlnaHQgbmVlZCB0byBhZGp1c3QgdGhhdCBvZmZzZXQgZm9yIHRoaXMgYm91bmRhcnkuCisgICAg
ICAgIGlmIChpc1doaXRlc3BhY2Uoc3RhcnRQb3NpdGlvbi5jaGFyYWN0ZXJCZWZvcmUoKSkpCisg
ICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gc3RhcnRPZldvcmQoc3RhcnRQb3NpdGlvbiwgTGVm
dFdvcmRJZk9uQm91bmRhcnkpOworCisgICAgICAgIC8vIGVuZE9mU2VudGVuY2UgcmV0dXJucyBh
IHBvc2l0aW9uIGFmdGVyIGFueSB3aGl0ZSBzcGFjZSBhZnRlciB0aGUKKyAgICAgICAgLy8gc2Vu
dGVuY2UsIHNvIHdlIG1pZ2h0IG5lZWQgdG8gYWRqdXN0IHRoYXQgb2Zmc2V0IGZvciB0aGlzIGJv
dW5kYXJ5LgorICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGVuZFBvc2l0aW9uLmNoYXJhY3RlckJl
Zm9yZSgpKSkKKyAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gc3RhcnRPZldvcmQoZW5kUG9zaXRp
b24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKworICAgICAgICAvLyBGaW5hbGx5LCBkbyBzb21l
IGFkZGl0aW9uYWwgYWRqdXN0bWVudHMgdGhhdCBtaWdodCBiZSBuZWVkZWQgaWYKKyAgICAgICAg
Ly8gcG9zaXRpb25zIGFyZSBhdCB0aGUgc3RhcnQgb3IgdGhlIGVuZCBvZiBhIGxpbmUuCisgICAg
ICAgIGlmIChpc1N0YXJ0T2ZMaW5lKHN0YXJ0UG9zaXRpb24pICYmICFpc1N0YXJ0T2ZCbG9jayhz
dGFydFBvc2l0aW9uKSkKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBzdGFydFBvc2l0aW9u
LnByZXZpb3VzKCk7CisgICAgICAgIGlmIChpc1N0YXJ0T2ZMaW5lKGVuZFBvc2l0aW9uKSAmJiAh
aXNTdGFydE9mQmxvY2soZW5kUG9zaXRpb24pKQorICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBl
bmRQb3NpdGlvbi5wcmV2aW91cygpOworICAgIH0KKworICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0ZWRTZW50ZW5jZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CisKKyAgICAvLyBXZSBt
YXJrIHRoZSBzZWxlY3Rpb24gYXMgJ3Vwc3RyZWFtJyBzbyB3ZSBjYW4gdXNlIHRoYXQgaW5mb3Jt
YXRpb24gbGF0ZXIsCisgICAgLy8gd2hlbiBmaW5kaW5nIHRoZSBhY3R1YWwgb2Zmc2V0cyBpbiBn
ZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0KCkuCisgICAgaWYgKGJvdW5kYXJ5VHlwZSA9PSBB
VEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9FTkQpCisgICAgICAgIHNlbGVjdGVkU2VudGVuY2Uu
c2V0QWZmaW5pdHkoVVBTVFJFQU0pOworCisgICAgcmV0dXJuIHNlbGVjdGVkU2VudGVuY2U7Cit9
CisKK3N0YXRpYyBjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFNlbnRlbmNlRm9yQm91bmRh
cnkoQXRrVGV4dCogdGV4dCwgaW50IG9mZnNldCwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlw
ZSwgR2V0VGV4dFJlbGF0aXZlUG9zaXRpb24gdGV4dFBvc2l0aW9uLCBpbnQqIHN0YXJ0T2Zmc2V0
LCBpbnQqIGVuZE9mZnNldCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0
ID0gY29yZSh0ZXh0KTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlT2JqZWN0LT5kb2N1
bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBlbXB0eVRleHRTZWxl
Y3Rpb25BdE9mZnNldCgwLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgIE5vZGUqIG5v
ZGUgPSBnZXROb2RlRm9yQWNjZXNzaWJpbGl0eU9iamVjdChjb3JlT2JqZWN0KTsKKyAgICBpZiAo
IW5vZGUpCisgICAgICAgIHJldHVybiBlbXB0eVRleHRTZWxlY3Rpb25BdE9mZnNldCgwLCBzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgIGludCBhY3R1YWxPZmZzZXQgPSBhdGtPZmZzZXRU
b1dlYkNvcmVPZmZzZXQodGV4dCwgb2Zmc2V0KTsKKworICAgIC8vIEJlc2lkZXMgb2YgdGhlIHVz
dWFsIGNvbnZlcnNpb24gZnJvbSBBVEsgb2Zmc2V0cyB0byBXZWJDb3JlIG9mZnNldHMsCisgICAg
Ly8gd2UgbmVlZCB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIGVtYmVkZGVkIG9iamVjdHMgdGhh
dCBtaWdodCBoYXZlIGJlZW4KKyAgICAvLyBpbnNlcnRlZCBpbiB0aGUgdGV4dCBleHBvc2VkIHRo
cm91Z2ggQXRrVGV4dCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBvZmZzZXQuCisgICAgYWN0dWFsT2Zm
c2V0IC09IG51bWJlck9mUmVwbGFjZWRFbGVtZW50c0JlZm9yZU9mZnNldCh0ZXh0LCBhY3R1YWxP
ZmZzZXQpOworCisgICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBjb3JlT2JqZWN0
LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChhY3R1YWxPZmZzZXQpOworICAgIFZpc2libGVTZWxl
Y3Rpb24gY3VycmVudFNlbnRlbmNlID0gc2VudGVuY2VBdFBvc2l0aW9uRm9yQXRrQm91bmRhcnko
Y29yZU9iamVjdCwgY2FyZXRQb3NpdGlvbiwgYm91bmRhcnlUeXBlKTsKKworICAgIC8vIFRha2Ug
aW50byBhY2NvdW50IG90aGVyIHJlbGF0aXZlIHBvc2l0aW9ucywgaWYgbmVlZGVkLCBieQorICAg
IC8vIGNhbGN1bGF0aW5nIHRoZSBuZXcgcG9zaXRpb24gdGhhdCB3ZSB3b3VsZCBuZWVkIHRvIGNv
bnNpZGVyLgorICAgIFZpc2libGVQb3NpdGlvbiBuZXdQb3NpdGlvbiA9IGNhcmV0UG9zaXRpb247
CisgICAgc3dpdGNoICh0ZXh0UG9zaXRpb24pIHsKKyAgICBjYXNlIEdldFRleHRQb3NpdGlvbkF0
OgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgR2V0VGV4dFBvc2l0aW9uQmVmb3JlOgorICAg
ICAgICAvLyBFYXJseSByZXR1cm4gaWYgYXNraW5nIGZvciB0aGUgcHJldmlvdXMgc2VudGVuY2Ug
d2hpbGUgYWxyZWFkeSBhdCB0aGUgYmVnaW5uaW5nLgorICAgICAgICBpZiAoaXNGaXJzdFZpc2li
bGVQb3NpdGlvbkluTm9kZShjdXJyZW50U2VudGVuY2UudmlzaWJsZVN0YXJ0KCksIG5vZGUpKQor
ICAgICAgICAgICAgcmV0dXJuIGVtcHR5VGV4dFNlbGVjdGlvbkF0T2Zmc2V0KDAsIHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQpOworICAgICAgICBuZXdQb3NpdGlvbiA9IGN1cnJlbnRTZW50ZW5jZS52
aXNpYmxlU3RhcnQoKS5wcmV2aW91cygpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgR2V0
VGV4dFBvc2l0aW9uQWZ0ZXI6CisgICAgICAgIC8vIEVhcmx5IHJldHVybiBpZiBhc2tpbmcgZm9y
IHRoZSBmb2xsb3dpbmcgd29yZCB3aGlsZSBhbHJlYWR5IGF0IHRoZSBlbmQuCisgICAgICAgIGlm
IChpc0xhc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY3VycmVudFNlbnRlbmNlLnZpc2libGVFbmQo
KSwgbm9kZSkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlUZXh0U2VsZWN0aW9uQXRPZmZzZXQo
YWNjZXNzaWJpbGl0eU9iamVjdExlbmd0aChjb3JlT2JqZWN0KSwgc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCk7CisgICAgICAgIG5ld1Bvc2l0aW9uID0gY3VycmVudFNlbnRlbmNlLnZpc2libGVFbmQo
KS5uZXh0KCk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgLy8gRGV0ZXJtaW5lIHRoZSByZWxldmFudCBz
ZW50ZW5jZSB3ZSBhcmUgYWN0dWFsbHkgaW50ZXJlc3RlZCBpbgorICAgIC8vIGFuZCBjYWxjdWxh
dGUgdGhlIEFUSyBvZmZzZXRzIGZvciBpdCwgdGhlbiByZXR1cm4gZXZlcnl0aGluZy4KKyAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGVkU2VudGVuY2UgPSBuZXdQb3NpdGlvbiAhPSBjYXJldFBv
c2l0aW9uID8gc2VudGVuY2VBdFBvc2l0aW9uRm9yQXRrQm91bmRhcnkoY29yZU9iamVjdCwgbmV3
UG9zaXRpb24sIGJvdW5kYXJ5VHlwZSkgOiBjdXJyZW50U2VudGVuY2U7CisgICAgZ2V0U2VsZWN0
aW9uT2Zmc2V0c0Zvck9iamVjdChjb3JlT2JqZWN0LCBzZWxlY3RlZFNlbnRlbmNlLCAqc3RhcnRP
ZmZzZXQsICplbmRPZmZzZXQpOworCisgICAgLy8gV2UgbWlnaHQgbmVlZCB0byBhZGp1c3QgdGhl
IHN0YXJ0IG9yIGVuZCBvZmZzZXQgdG8gaW5jbHVkZSB0aGUgbGlzdCBpdGVtIG1hcmtlciwKKyAg
ICAvLyBpZiBwcmVzZW50LCB3aGVuIHByaW50aW5nIHRoZSBmaXJzdCBvciB0aGUgbGFzdCBmdWxs
IHNlbnRlbmNlIGZvciBhIGxpc3QgaXRlbS4KKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
Y29yZU9iamVjdC0+cmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkg
eworICAgICAgICAvLyBGb3IgTGVmdC10by1SaWdodCwgdGhlIGxpc3QgaXRlbSBtYXJrZXIgaXMg
YXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZXhwb3NlZCB0ZXh0LgorICAgICAgICBpZiAocmVuZGVy
ZXItPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiAmJiBpc0ZpcnN0VmlzaWJsZVBvc2l0aW9u
SW5Ob2RlKHNlbGVjdGVkU2VudGVuY2UudmlzaWJsZVN0YXJ0KCksIG5vZGUpKQorICAgICAgICAg
ICAgKnN0YXJ0T2Zmc2V0ID0gMDsKKworICAgICAgICAvLyBGb3IgUmlnaHQtdG8tTGVmdCwgdGhl
IGxpc3QgaXRlbSBtYXJrZXIgaXMgYXQgdGhlIGVuZCBvZiB0aGUgZXhwb3NlZCB0ZXh0LgorICAg
ICAgICBpZiAocmVuZGVyZXItPnN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCAmJiBpc0xhc3RW
aXNpYmxlUG9zaXRpb25Jbk5vZGUoc2VsZWN0ZWRTZW50ZW5jZS52aXNpYmxlRW5kKCksIG5vZGUp
KQorICAgICAgICAgICAgKmVuZE9mZnNldCA9IGFjY2Vzc2liaWxpdHlPYmplY3RMZW5ndGgoY29y
ZU9iamVjdCk7CisgICAgfQorCisgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4
dCh0ZXh0LCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOworfQorCiBzdGF0aWMgZ2NoYXIqIHdl
YmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEZvck9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9m
ZnNldCwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwgR2V0VGV4dFJlbGF0aXZlUG9zaXRp
b24gdGV4dFBvc2l0aW9uLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQogewog
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwpAQCAtOTU3
LDYgKzExMDUsOSBAQCBzdGF0aWMgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEZv
ck9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgQQogICAgIGlmIChib3VuZGFyeVR5
cGUgPT0gQVRLX1RFWFRfQk9VTkRBUllfTElORV9TVEFSVCB8fCBib3VuZGFyeVR5cGUgPT0gQVRL
X1RFWFRfQk9VTkRBUllfTElORV9FTkQpCiAgICAgICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxl
VGV4dEdldExpbmVGb3JCb3VuZGFyeSh0ZXh0LCBvZmZzZXQsIGJvdW5kYXJ5VHlwZSwgdGV4dFBv
c2l0aW9uLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKIAorICAgIGlmIChib3VuZGFyeVR5cGUg
PT0gQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfU1RBUlQgfHwgYm91bmRhcnlUeXBlID09IEFU
S19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX0VORCkKKyAgICAgICAgcmV0dXJuIHdlYmtpdEFjY2Vz
c2libGVUZXh0R2V0U2VudGVuY2VGb3JCb3VuZGFyeSh0ZXh0LCBvZmZzZXQsIGJvdW5kYXJ5VHlw
ZSwgdGV4dFBvc2l0aW9uLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKwogI2lmIFBMQVRGT1JN
KEdUSykKICAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGUgY29kZSBiZWxvdyBvbmNlIGV2ZXJ5
IHNpbmdsZSBwYXJ0IGFib3ZlCiAgICAgLy8gaGFzIGJlZW4gcHJvcGVybHkgaW1wbGVtZW50ZWQg
d2l0aG91dCB1c2luZyBQYW5nby9DYWlyby4KLS0gCjEuNy4xMC40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207190</attachid>
            <date>2013-07-19 23:54:12 -0700</date>
            <delta_ts>2013-08-03 08:23:31 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>bug-114873-20130720075410.patch</filename>
            <type>text/plain</type>
            <size>9603</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyNTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDUyZjc0Mjk1OGEwMmQ4
YWNmYzFhODYwNTFkNGM2NTBlOWU1MTA0Ni4uYzQxY2FhM2IyYzM4ODkyMzc1MzM3MjgyOWU3YjMw
NTA1OGFkNDRmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI3IEBACiAyMDEzLTA3LTE5ICBNYXJp
byBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+CiAKKyAgICAgICAgW0dU
S10gUmVpbXBsZW1lbnQgYXRrX3RleHRfZ2V0X3RleHRfKl9vZmZzZXQgZm9yIFNFTlRFTkNFIGJv
dW5kYXJpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExNDg3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlLWltcGxlbWVudCB0aGlzIGZ1bmN0aW9ucyB3aXRob3V0IHVzaW5nIEdhaWxUZXh0VXRpbCBu
b3IgUGFuZ28uCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChpc1NlbnRlbmNlQm91bmRhcnkpOiBIZWxwZXIg
ZnVuY3Rpb24gdG8ga25vdyB3aGVuIHdlIGFyZSBlaXRoZXIKKyAgICAgICAgYXQgdGhlIGJlZ2lu
bmluZyBvciB0aGUgZW5kIG9mIGEgc2VudGVuY2UuCisgICAgICAgIChpc1NwYWNlQmV0d2VlblJl
YWxTZW50ZW5jZXMpOiBJdCByZXR1cm5zIHRydWUgaWYgd2UgYXJlIGluIHRoZQorICAgICAgICBt
aWRkbGUgb2YgYSB3aGl0ZSBzcGFjZSBiZXR3ZWVuIHNlbnRlbmNlcy4gVXNlZnVsIGZvciBpbXBs
ZW1lbnRpbmcKKyAgICAgICAgdGhlIFNFTlRFTkNFX0VORCBib3VuZGFyeSB0eXBlLgorICAgICAg
ICAoc2VudGVuY2VBdFBvc2l0aW9uRm9yQXRrQm91bmRhcnkpOiBOZXcgaGVscGVyIGZ1bmN0aW9u
IHRvIGZpbmQgdGhlCisgICAgICAgIHNlbnRlbmNlIGF0IGEgZ2l2ZW4gcG9zaXRpb24gY29uc2lk
ZXJpbmcgdmFsdWVzIG9mIEF0a1RleHRCb3VuZGFyeS4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2li
bGVUZXh0R2V0U2VudGVuY2VGb3JCb3VuZGFyeSk6IE5ldyBmdW5jdGlvbiwKKyAgICAgICAgaW1w
bGVtZW50aW5nIGF0a190ZXh0X2dldF90ZXh0Xypfb2Zmc2V0IGZvciBTRU5URU5DRS4KKyAgICAg
ICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEZvck9mZnNldCk6IFJlcGxhY2UgdXNhZ2Ug
b2YgR2FpbCBmb3IKKyAgICAgICAgTElORSBib3VuZGFyaWVzIHdpdGggd2Via2l0QWNjZXNzaWJs
ZVRleHRHZXRXb3JkRm9yQm91bmRhcnkoKS4KKworMjAxMy0wNy0xOSAgTWFyaW8gU2FuY2hleiBQ
cmFkYSAgPG1hcmlvLnByYWRhQHNhbXN1bmcuY29tPgorCiAgICAgICAgIFtHVEtdIFJlaW1wbGVt
ZW50IGF0a190ZXh0X2dldF90ZXh0Xypfb2Zmc2V0IGZvciBMSU5FIGJvdW5kYXJpZXMKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDg3MgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKaW5kZXggZDBjMGRhN2E1MmUwMjAwMGFlNDRl
MTgzMGE5YzM1MzQxYTQwMTUyMi4uNWQ4YjExMDRiODk4YWMzMmVkMzU4Y2Y2NGJlOTMyNjRhOTdk
ZjVlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcApAQCAtMzgsNiArMzgs
NyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJI
b3N0V2luZG93LmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCkBAIC05NDIsNiArOTQzLDEzOSBAQCBzdGF0aWMgY2hhciogd2Via2l0QWNj
ZXNzaWJsZVRleHRHZXRMaW5lRm9yQm91bmRhcnkoQXRrVGV4dCogdGV4dCwgaW50IG9mZnNldCwg
QQogICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQodGV4dCwgKnN0YXJ0T2Zm
c2V0LCAqZW5kT2Zmc2V0KTsKIH0KIAorc3RhdGljIGJvb2wgaXNTZW50ZW5jZUJvdW5kYXJ5KGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmcG9zKQoreworICAgIGlmIChwb3MuaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEl0J3MgZGVmaW5pdGVseSBhIHNlbnRlbmNlIGJv
dW5kYXJ5IGlmIHRoZXJlJ3Mgbm90aGluZyBiZWZvcmUuCisgICAgaWYgKHBvcy5wcmV2aW91cygp
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFdlIGdvIGJhY2t3YXJk
cyBhbmQgZm9yd2FyZCB0byBtYWtlIHN1cmUgYWJvdXQgdGhpcy4KKyAgICBWaXNpYmxlUG9zaXRp
b24gc3RhcnRPZlByZXZpb3VzU2VudGVuY2UgPSBzdGFydE9mU2VudGVuY2UocG9zKTsKKyAgICBy
ZXR1cm4gc3RhcnRPZlByZXZpb3VzU2VudGVuY2UuaXNOb3ROdWxsKCkgJiYgcG9zID09IGVuZE9m
U2VudGVuY2Uoc3RhcnRPZlByZXZpb3VzU2VudGVuY2UpOworfQorCitzdGF0aWMgYm9vbCBpc1Nw
YWNlQmV0d2VlblJlYWxTZW50ZW5jZXMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikK
K3sKKyAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICghaXNXaGl0ZXNwYWNlKHBvc2l0aW9uLmNoYXJhY3RlckFmdGVyKCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZldoaXRlU3BhY2Ug
PSBzdGFydE9mV29yZChwb3NpdGlvbiwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICBWaXNp
YmxlUG9zaXRpb24gZW5kT2ZXaGl0ZVNwYWNlID0gZW5kT2ZXb3JkKHN0YXJ0T2ZXaGl0ZVNwYWNl
LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpOworICAgIGlmICghaXNTZW50ZW5jZUJvdW5kYXJ5KHN0
YXJ0T2ZXaGl0ZVNwYWNlKSAmJiAhaXNTZW50ZW5jZUJvdW5kYXJ5KGVuZE9mV2hpdGVTcGFjZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBjb21wYXJlUG9zaXRpb25zKHN0
YXJ0T2ZXaGl0ZVNwYWNlLCBwb3NpdGlvbikgPD0gMCAmJiBjb21wYXJlUG9zaXRpb25zKGVuZE9m
V2hpdGVTcGFjZSwgcG9zaXRpb24pID49IDA7Cit9CisKK3N0YXRpYyBWaXNpYmxlU2VsZWN0aW9u
IHNlbnRlbmNlQXRQb3NpdGlvbkZvckF0a0JvdW5kYXJ5KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmVPYmplY3QsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIEF0a1RleHRC
b3VuZGFyeSBib3VuZGFyeVR5cGUpCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRp
b247CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uOworCisgICAgYm9vbCBpc0F0U3Rh
cnRPZlNlbnRlbmNlRm9yRW5kQm91bmRhcnkgPSBpc1NwYWNlQmV0d2VlblJlYWxTZW50ZW5jZXMo
cG9zaXRpb24pIHx8IGlzU2VudGVuY2VCb3VuZGFyeShwb3NpdGlvbik7CisgICAgaWYgKGJvdW5k
YXJ5VHlwZSA9PSBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9TVEFSVCB8fCAhaXNBdFN0YXJ0
T2ZTZW50ZW5jZUZvckVuZEJvdW5kYXJ5KSB7CisgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBpc1Nl
bnRlbmNlQm91bmRhcnkocG9zaXRpb24pID8gcG9zaXRpb24gOiBzdGFydE9mU2VudGVuY2UocG9z
aXRpb24pOworICAgICAgICAvLyBzdGFydE9mU2VudGVuY2UgbWlnaHQgc3RvcCBhdCBhIGxpbmVi
cmVhayBpbiB0aGUgSFRNTCBzb3VyY2UgY29kZSwKKyAgICAgICAgLy8gYnV0IHdlIGRvbid0IHdh
bnQgdG8gc3RvcCB0aGVyZSB5ZXQsIHNvIGtlZXAgZ29pbmcuCisgICAgICAgIHdoaWxlICghaXNT
ZW50ZW5jZUJvdW5kYXJ5KHN0YXJ0UG9zaXRpb24pICYmIGlzSFRNTExpbmVCcmVhayhzdGFydFBv
c2l0aW9uLmNoYXJhY3RlckJlZm9yZSgpKSkKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBz
dGFydE9mU2VudGVuY2Uoc3RhcnRQb3NpdGlvbik7CisKKyAgICAgICAgZW5kUG9zaXRpb24gPSBl
bmRPZlNlbnRlbmNlKHN0YXJ0UG9zaXRpb24pOworICAgIH0KKworICAgIGlmIChib3VuZGFyeVR5
cGUgPT0gQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfRU5EKSB7CisgICAgICAgIGlmIChpc0F0
U3RhcnRPZlNlbnRlbmNlRm9yRW5kQm91bmRhcnkpIHsKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRp
b24gPSBwb3NpdGlvbjsKKyAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gZW5kT2ZTZW50ZW5jZShl
bmRPZldvcmQocG9zaXRpb24sIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gc3RhcnRPZlNlbnRlbmNlIHJldHVybnMgYSBwb3NpdGlvbiBhZnRlciBhbnkg
d2hpdGUgc3BhY2UgcHJldmlvdXMgdG8KKyAgICAgICAgLy8gdGhlIHNlbnRlbmNlLCBzbyB3ZSBt
aWdodCBuZWVkIHRvIGFkanVzdCB0aGF0IG9mZnNldCBmb3IgdGhpcyBib3VuZGFyeS4KKyAgICAg
ICAgaWYgKGlzV2hpdGVzcGFjZShzdGFydFBvc2l0aW9uLmNoYXJhY3RlckJlZm9yZSgpKSkKKyAg
ICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBzdGFydE9mV29yZChzdGFydFBvc2l0aW9uLCBMZWZ0
V29yZElmT25Cb3VuZGFyeSk7CisKKyAgICAgICAgLy8gZW5kT2ZTZW50ZW5jZSByZXR1cm5zIGEg
cG9zaXRpb24gYWZ0ZXIgYW55IHdoaXRlIHNwYWNlIGFmdGVyIHRoZQorICAgICAgICAvLyBzZW50
ZW5jZSwgc28gd2UgbWlnaHQgbmVlZCB0byBhZGp1c3QgdGhhdCBvZmZzZXQgZm9yIHRoaXMgYm91
bmRhcnkuCisgICAgICAgIGlmIChpc1doaXRlc3BhY2UoZW5kUG9zaXRpb24uY2hhcmFjdGVyQmVm
b3JlKCkpKQorICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBzdGFydE9mV29yZChlbmRQb3NpdGlv
biwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOworCisgICAgICAgIC8vIEZpbmFsbHksIGRvIHNvbWUg
YWRkaXRpb25hbCBhZGp1c3RtZW50cyB0aGF0IG1pZ2h0IGJlIG5lZWRlZCBpZgorICAgICAgICAv
LyBwb3NpdGlvbnMgYXJlIGF0IHRoZSBzdGFydCBvciB0aGUgZW5kIG9mIGEgbGluZS4KKyAgICAg
ICAgaWYgKGlzU3RhcnRPZkxpbmUoc3RhcnRQb3NpdGlvbikgJiYgIWlzU3RhcnRPZkJsb2NrKHN0
YXJ0UG9zaXRpb24pKQorICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24u
cHJldmlvdXMoKTsKKyAgICAgICAgaWYgKGlzU3RhcnRPZkxpbmUoZW5kUG9zaXRpb24pICYmICFp
c1N0YXJ0T2ZCbG9jayhlbmRQb3NpdGlvbikpCisgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IGVu
ZFBvc2l0aW9uLnByZXZpb3VzKCk7CisgICAgfQorCisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3RlZFNlbnRlbmNlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKworICAgIC8vIFdlIG1h
cmsgdGhlIHNlbGVjdGlvbiBhcyAndXBzdHJlYW0nIHNvIHdlIGNhbiB1c2UgdGhhdCBpbmZvcm1h
dGlvbiBsYXRlciwKKyAgICAvLyB3aGVuIGZpbmRpbmcgdGhlIGFjdHVhbCBvZmZzZXRzIGluIGdl
dFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoKS4KKyAgICBpZiAoYm91bmRhcnlUeXBlID09IEFU
S19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX0VORCkKKyAgICAgICAgc2VsZWN0ZWRTZW50ZW5jZS5z
ZXRBZmZpbml0eShVUFNUUkVBTSk7CisKKyAgICByZXR1cm4gc2VsZWN0ZWRTZW50ZW5jZTsKK30K
Kworc3RhdGljIGNoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0U2VudGVuY2VGb3JCb3VuZGFy
eShBdGtUZXh0KiB0ZXh0LCBpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnkgYm91bmRhcnlUeXBl
LCBHZXRUZXh0UmVsYXRpdmVQb3NpdGlvbiB0ZXh0UG9zaXRpb24sIGludCogc3RhcnRPZmZzZXQs
IGludCogZW5kT2Zmc2V0KQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3Qg
PSBjb3JlKHRleHQpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVPYmplY3QtPmRvY3Vt
ZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIGVtcHR5VGV4dFNlbGVj
dGlvbkF0T2Zmc2V0KDAsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworCisgICAgTm9kZSogbm9k
ZSA9IGdldE5vZGVGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KGNvcmVPYmplY3QpOworICAgIGlmICgh
bm9kZSkKKyAgICAgICAgcmV0dXJuIGVtcHR5VGV4dFNlbGVjdGlvbkF0T2Zmc2V0KDAsIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQpOworCisgICAgaW50IGFjdHVhbE9mZnNldCA9IGF0a09mZnNldFRv
V2ViQ29yZU9mZnNldCh0ZXh0LCBvZmZzZXQpOworCisgICAgLy8gQmVzaWRlcyBvZiB0aGUgdXN1
YWwgY29udmVyc2lvbiBmcm9tIEFUSyBvZmZzZXRzIHRvIFdlYkNvcmUgb2Zmc2V0cywKKyAgICAv
LyB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgZW1iZWRkZWQgb2JqZWN0cyB0aGF0
IG1pZ2h0IGhhdmUgYmVlbgorICAgIC8vIGluc2VydGVkIGluIHRoZSB0ZXh0IGV4cG9zZWQgdGhy
b3VnaCBBdGtUZXh0IHdoZW4gY2FsY3VsYXRpbmcgdGhlIG9mZnNldC4KKyAgICBhY3R1YWxPZmZz
ZXQgLT0gbnVtYmVyT2ZSZXBsYWNlZEVsZW1lbnRzQmVmb3JlT2Zmc2V0KHRleHQsIGFjdHVhbE9m
ZnNldCk7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IGNvcmVPYmplY3Qt
PnZpc2libGVQb3NpdGlvbkZvckluZGV4KGFjdHVhbE9mZnNldCk7CisgICAgVmlzaWJsZVNlbGVj
dGlvbiBjdXJyZW50U2VudGVuY2UgPSBzZW50ZW5jZUF0UG9zaXRpb25Gb3JBdGtCb3VuZGFyeShj
b3JlT2JqZWN0LCBjYXJldFBvc2l0aW9uLCBib3VuZGFyeVR5cGUpOworCisgICAgLy8gVGFrZSBp
bnRvIGFjY291bnQgb3RoZXIgcmVsYXRpdmUgcG9zaXRpb25zLCBpZiBuZWVkZWQsIGJ5CisgICAg
Ly8gY2FsY3VsYXRpbmcgdGhlIG5ldyBwb3NpdGlvbiB0aGF0IHdlIHdvdWxkIG5lZWQgdG8gY29u
c2lkZXIuCisgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1Bvc2l0aW9uID0gY2FyZXRQb3NpdGlvbjsK
KyAgICBzd2l0Y2ggKHRleHRQb3NpdGlvbikgeworICAgIGNhc2UgR2V0VGV4dFBvc2l0aW9uQXQ6
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBHZXRUZXh0UG9zaXRpb25CZWZvcmU6CisgICAg
ICAgIC8vIEVhcmx5IHJldHVybiBpZiBhc2tpbmcgZm9yIHRoZSBwcmV2aW91cyBzZW50ZW5jZSB3
aGlsZSBhbHJlYWR5IGF0IHRoZSBiZWdpbm5pbmcuCisgICAgICAgIGlmIChpc0ZpcnN0VmlzaWJs
ZVBvc2l0aW9uSW5Ob2RlKGN1cnJlbnRTZW50ZW5jZS52aXNpYmxlU3RhcnQoKSwgbm9kZSkpCisg
ICAgICAgICAgICByZXR1cm4gZW1wdHlUZXh0U2VsZWN0aW9uQXRPZmZzZXQoMCwgc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCk7CisgICAgICAgIG5ld1Bvc2l0aW9uID0gY3VycmVudFNlbnRlbmNlLnZp
c2libGVTdGFydCgpLnByZXZpb3VzKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBHZXRU
ZXh0UG9zaXRpb25BZnRlcjoKKyAgICAgICAgLy8gRWFybHkgcmV0dXJuIGlmIGFza2luZyBmb3Ig
dGhlIGZvbGxvd2luZyB3b3JkIHdoaWxlIGFscmVhZHkgYXQgdGhlIGVuZC4KKyAgICAgICAgaWYg
KGlzTGFzdFZpc2libGVQb3NpdGlvbkluTm9kZShjdXJyZW50U2VudGVuY2UudmlzaWJsZUVuZCgp
LCBub2RlKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVRleHRTZWxlY3Rpb25BdE9mZnNldChh
Y2Nlc3NpYmlsaXR5T2JqZWN0TGVuZ3RoKGNvcmVPYmplY3QpLCBzdGFydE9mZnNldCwgZW5kT2Zm
c2V0KTsKKyAgICAgICAgbmV3UG9zaXRpb24gPSBjdXJyZW50U2VudGVuY2UudmlzaWJsZUVuZCgp
Lm5leHQoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHJlbGV2YW50IHNl
bnRlbmNlIHdlIGFyZSBhY3R1YWxseSBpbnRlcmVzdGVkIGluCisgICAgLy8gYW5kIGNhbGN1bGF0
ZSB0aGUgQVRLIG9mZnNldHMgZm9yIGl0LCB0aGVuIHJldHVybiBldmVyeXRoaW5nLgorICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0ZWRTZW50ZW5jZSA9IG5ld1Bvc2l0aW9uICE9IGNhcmV0UG9z
aXRpb24gPyBzZW50ZW5jZUF0UG9zaXRpb25Gb3JBdGtCb3VuZGFyeShjb3JlT2JqZWN0LCBuZXdQ
b3NpdGlvbiwgYm91bmRhcnlUeXBlKSA6IGN1cnJlbnRTZW50ZW5jZTsKKyAgICBnZXRTZWxlY3Rp
b25PZmZzZXRzRm9yT2JqZWN0KGNvcmVPYmplY3QsIHNlbGVjdGVkU2VudGVuY2UsICpzdGFydE9m
ZnNldCwgKmVuZE9mZnNldCk7CisgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4
dCh0ZXh0LCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOworfQorCiBzdGF0aWMgZ2NoYXIqIHdl
YmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEZvck9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9m
ZnNldCwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwgR2V0VGV4dFJlbGF0aXZlUG9zaXRp
b24gdGV4dFBvc2l0aW9uLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQogewog
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwpAQCAtOTU3
LDYgKzEwOTEsOSBAQCBzdGF0aWMgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEZv
ck9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgQQogICAgIGlmIChib3VuZGFyeVR5
cGUgPT0gQVRLX1RFWFRfQk9VTkRBUllfTElORV9TVEFSVCB8fCBib3VuZGFyeVR5cGUgPT0gQVRL
X1RFWFRfQk9VTkRBUllfTElORV9FTkQpCiAgICAgICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxl
VGV4dEdldExpbmVGb3JCb3VuZGFyeSh0ZXh0LCBvZmZzZXQsIGJvdW5kYXJ5VHlwZSwgdGV4dFBv
c2l0aW9uLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKIAorICAgIGlmIChib3VuZGFyeVR5cGUg
PT0gQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfU1RBUlQgfHwgYm91bmRhcnlUeXBlID09IEFU
S19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX0VORCkKKyAgICAgICAgcmV0dXJuIHdlYmtpdEFjY2Vz
c2libGVUZXh0R2V0U2VudGVuY2VGb3JCb3VuZGFyeSh0ZXh0LCBvZmZzZXQsIGJvdW5kYXJ5VHlw
ZSwgdGV4dFBvc2l0aW9uLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKwogI2lmIFBMQVRGT1JN
KEdUSykKICAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGUgY29kZSBiZWxvdyBvbmNlIGV2ZXJ5
IHNpbmdsZSBwYXJ0IGFib3ZlCiAgICAgLy8gaGFzIGJlZW4gcHJvcGVybHkgaW1wbGVtZW50ZWQg
d2l0aG91dCB1c2luZyBQYW5nby9DYWlyby4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208066</attachid>
            <date>2013-08-03 08:24:39 -0700</date>
            <delta_ts>2013-09-03 06:04:04 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>bug-114873-20130803172423.patch</filename>
            <type>text/plain</type>
            <size>9603</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUzNjg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjczNjBiMjAwODk4YjE2
YzdhYzQwMWY0NDVkYzA3N2Q4YTgxYTkwMi4uMmYxMzM0ZjhiMzdmZGYyNmVhNGVhMGIzNjYyMzVh
YjFjYjA5ZDIyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI3IEBACiAyMDEzLTA4LTAzICBNYXJp
byBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+CiAKKyAgICAgICAgW0dU
S10gUmVpbXBsZW1lbnQgYXRrX3RleHRfZ2V0X3RleHRfKl9vZmZzZXQgZm9yIFNFTlRFTkNFIGJv
dW5kYXJpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExNDg3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlLWltcGxlbWVudCB0aGlzIGZ1bmN0aW9ucyB3aXRob3V0IHVzaW5nIEdhaWxUZXh0VXRpbCBu
b3IgUGFuZ28uCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChpc1NlbnRlbmNlQm91bmRhcnkpOiBIZWxwZXIg
ZnVuY3Rpb24gdG8ga25vdyB3aGVuIHdlIGFyZSBlaXRoZXIKKyAgICAgICAgYXQgdGhlIGJlZ2lu
bmluZyBvciB0aGUgZW5kIG9mIGEgc2VudGVuY2UuCisgICAgICAgIChpc1NwYWNlQmV0d2VlblJl
YWxTZW50ZW5jZXMpOiBJdCByZXR1cm5zIHRydWUgaWYgd2UgYXJlIGluIHRoZQorICAgICAgICBt
aWRkbGUgb2YgYSB3aGl0ZSBzcGFjZSBiZXR3ZWVuIHNlbnRlbmNlcy4gVXNlZnVsIGZvciBpbXBs
ZW1lbnRpbmcKKyAgICAgICAgdGhlIFNFTlRFTkNFX0VORCBib3VuZGFyeSB0eXBlLgorICAgICAg
ICAoc2VudGVuY2VBdFBvc2l0aW9uRm9yQXRrQm91bmRhcnkpOiBOZXcgaGVscGVyIGZ1bmN0aW9u
IHRvIGZpbmQgdGhlCisgICAgICAgIHNlbnRlbmNlIGF0IGEgZ2l2ZW4gcG9zaXRpb24gY29uc2lk
ZXJpbmcgdmFsdWVzIG9mIEF0a1RleHRCb3VuZGFyeS4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2li
bGVUZXh0R2V0U2VudGVuY2VGb3JCb3VuZGFyeSk6IE5ldyBmdW5jdGlvbiwKKyAgICAgICAgaW1w
bGVtZW50aW5nIGF0a190ZXh0X2dldF90ZXh0Xypfb2Zmc2V0IGZvciBTRU5URU5DRS4KKyAgICAg
ICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEZvck9mZnNldCk6IFJlcGxhY2UgdXNhZ2Ug
b2YgR2FpbCBmb3IKKyAgICAgICAgTElORSBib3VuZGFyaWVzIHdpdGggd2Via2l0QWNjZXNzaWJs
ZVRleHRHZXRXb3JkRm9yQm91bmRhcnkoKS4KKworMjAxMy0wOC0wMyAgTWFyaW8gU2FuY2hleiBQ
cmFkYSAgPG1hcmlvLnByYWRhQHNhbXN1bmcuY29tPgorCiAgICAgICAgIFtHVEtdIFJlaW1wbGVt
ZW50IGF0a190ZXh0X2dldF90ZXh0Xypfb2Zmc2V0IGZvciBMSU5FIGJvdW5kYXJpZXMKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDg3MgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKaW5kZXggODA3ZDJkYmQzMGM1Y2EzOThlNjMy
YmY2Y2Q3YmJiMjA0OThjNGM2Zi4uMmIyYTg3NDk3NGI4ODk5NmIwYjczMGJlNDg2MjkyMWIwNWI1
Mzc3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcApAQCAtMzgsNiArMzgs
NyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJI
b3N0V2luZG93LmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCkBAIC05NDMsNiArOTQ0LDEzOSBAQCBzdGF0aWMgY2hhciogd2Via2l0QWNj
ZXNzaWJsZVRleHRHZXRMaW5lRm9yQm91bmRhcnkoQXRrVGV4dCogdGV4dCwgaW50IG9mZnNldCwg
QQogICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQodGV4dCwgKnN0YXJ0T2Zm
c2V0LCAqZW5kT2Zmc2V0KTsKIH0KIAorc3RhdGljIGJvb2wgaXNTZW50ZW5jZUJvdW5kYXJ5KGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmcG9zKQoreworICAgIGlmIChwb3MuaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEl0J3MgZGVmaW5pdGVseSBhIHNlbnRlbmNlIGJv
dW5kYXJ5IGlmIHRoZXJlJ3Mgbm90aGluZyBiZWZvcmUuCisgICAgaWYgKHBvcy5wcmV2aW91cygp
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFdlIGdvIGJhY2t3YXJk
cyBhbmQgZm9yd2FyZCB0byBtYWtlIHN1cmUgYWJvdXQgdGhpcy4KKyAgICBWaXNpYmxlUG9zaXRp
b24gc3RhcnRPZlByZXZpb3VzU2VudGVuY2UgPSBzdGFydE9mU2VudGVuY2UocG9zKTsKKyAgICBy
ZXR1cm4gc3RhcnRPZlByZXZpb3VzU2VudGVuY2UuaXNOb3ROdWxsKCkgJiYgcG9zID09IGVuZE9m
U2VudGVuY2Uoc3RhcnRPZlByZXZpb3VzU2VudGVuY2UpOworfQorCitzdGF0aWMgYm9vbCBpc1Nw
YWNlQmV0d2VlblJlYWxTZW50ZW5jZXMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikK
K3sKKyAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICghaXNXaGl0ZXNwYWNlKHBvc2l0aW9uLmNoYXJhY3RlckFmdGVyKCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZldoaXRlU3BhY2Ug
PSBzdGFydE9mV29yZChwb3NpdGlvbiwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICBWaXNp
YmxlUG9zaXRpb24gZW5kT2ZXaGl0ZVNwYWNlID0gZW5kT2ZXb3JkKHN0YXJ0T2ZXaGl0ZVNwYWNl
LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpOworICAgIGlmICghaXNTZW50ZW5jZUJvdW5kYXJ5KHN0
YXJ0T2ZXaGl0ZVNwYWNlKSAmJiAhaXNTZW50ZW5jZUJvdW5kYXJ5KGVuZE9mV2hpdGVTcGFjZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBjb21wYXJlUG9zaXRpb25zKHN0
YXJ0T2ZXaGl0ZVNwYWNlLCBwb3NpdGlvbikgPD0gMCAmJiBjb21wYXJlUG9zaXRpb25zKGVuZE9m
V2hpdGVTcGFjZSwgcG9zaXRpb24pID49IDA7Cit9CisKK3N0YXRpYyBWaXNpYmxlU2VsZWN0aW9u
IHNlbnRlbmNlQXRQb3NpdGlvbkZvckF0a0JvdW5kYXJ5KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmVPYmplY3QsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIEF0a1RleHRC
b3VuZGFyeSBib3VuZGFyeVR5cGUpCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRp
b247CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uOworCisgICAgYm9vbCBpc0F0U3Rh
cnRPZlNlbnRlbmNlRm9yRW5kQm91bmRhcnkgPSBpc1NwYWNlQmV0d2VlblJlYWxTZW50ZW5jZXMo
cG9zaXRpb24pIHx8IGlzU2VudGVuY2VCb3VuZGFyeShwb3NpdGlvbik7CisgICAgaWYgKGJvdW5k
YXJ5VHlwZSA9PSBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9TVEFSVCB8fCAhaXNBdFN0YXJ0
T2ZTZW50ZW5jZUZvckVuZEJvdW5kYXJ5KSB7CisgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBpc1Nl
bnRlbmNlQm91bmRhcnkocG9zaXRpb24pID8gcG9zaXRpb24gOiBzdGFydE9mU2VudGVuY2UocG9z
aXRpb24pOworICAgICAgICAvLyBzdGFydE9mU2VudGVuY2UgbWlnaHQgc3RvcCBhdCBhIGxpbmVi
cmVhayBpbiB0aGUgSFRNTCBzb3VyY2UgY29kZSwKKyAgICAgICAgLy8gYnV0IHdlIGRvbid0IHdh
bnQgdG8gc3RvcCB0aGVyZSB5ZXQsIHNvIGtlZXAgZ29pbmcuCisgICAgICAgIHdoaWxlICghaXNT
ZW50ZW5jZUJvdW5kYXJ5KHN0YXJ0UG9zaXRpb24pICYmIGlzSFRNTExpbmVCcmVhayhzdGFydFBv
c2l0aW9uLmNoYXJhY3RlckJlZm9yZSgpKSkKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBz
dGFydE9mU2VudGVuY2Uoc3RhcnRQb3NpdGlvbik7CisKKyAgICAgICAgZW5kUG9zaXRpb24gPSBl
bmRPZlNlbnRlbmNlKHN0YXJ0UG9zaXRpb24pOworICAgIH0KKworICAgIGlmIChib3VuZGFyeVR5
cGUgPT0gQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfRU5EKSB7CisgICAgICAgIGlmIChpc0F0
U3RhcnRPZlNlbnRlbmNlRm9yRW5kQm91bmRhcnkpIHsKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRp
b24gPSBwb3NpdGlvbjsKKyAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gZW5kT2ZTZW50ZW5jZShl
bmRPZldvcmQocG9zaXRpb24sIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gc3RhcnRPZlNlbnRlbmNlIHJldHVybnMgYSBwb3NpdGlvbiBhZnRlciBhbnkg
d2hpdGUgc3BhY2UgcHJldmlvdXMgdG8KKyAgICAgICAgLy8gdGhlIHNlbnRlbmNlLCBzbyB3ZSBt
aWdodCBuZWVkIHRvIGFkanVzdCB0aGF0IG9mZnNldCBmb3IgdGhpcyBib3VuZGFyeS4KKyAgICAg
ICAgaWYgKGlzV2hpdGVzcGFjZShzdGFydFBvc2l0aW9uLmNoYXJhY3RlckJlZm9yZSgpKSkKKyAg
ICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBzdGFydE9mV29yZChzdGFydFBvc2l0aW9uLCBMZWZ0
V29yZElmT25Cb3VuZGFyeSk7CisKKyAgICAgICAgLy8gZW5kT2ZTZW50ZW5jZSByZXR1cm5zIGEg
cG9zaXRpb24gYWZ0ZXIgYW55IHdoaXRlIHNwYWNlIGFmdGVyIHRoZQorICAgICAgICAvLyBzZW50
ZW5jZSwgc28gd2UgbWlnaHQgbmVlZCB0byBhZGp1c3QgdGhhdCBvZmZzZXQgZm9yIHRoaXMgYm91
bmRhcnkuCisgICAgICAgIGlmIChpc1doaXRlc3BhY2UoZW5kUG9zaXRpb24uY2hhcmFjdGVyQmVm
b3JlKCkpKQorICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBzdGFydE9mV29yZChlbmRQb3NpdGlv
biwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOworCisgICAgICAgIC8vIEZpbmFsbHksIGRvIHNvbWUg
YWRkaXRpb25hbCBhZGp1c3RtZW50cyB0aGF0IG1pZ2h0IGJlIG5lZWRlZCBpZgorICAgICAgICAv
LyBwb3NpdGlvbnMgYXJlIGF0IHRoZSBzdGFydCBvciB0aGUgZW5kIG9mIGEgbGluZS4KKyAgICAg
ICAgaWYgKGlzU3RhcnRPZkxpbmUoc3RhcnRQb3NpdGlvbikgJiYgIWlzU3RhcnRPZkJsb2NrKHN0
YXJ0UG9zaXRpb24pKQorICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24u
cHJldmlvdXMoKTsKKyAgICAgICAgaWYgKGlzU3RhcnRPZkxpbmUoZW5kUG9zaXRpb24pICYmICFp
c1N0YXJ0T2ZCbG9jayhlbmRQb3NpdGlvbikpCisgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IGVu
ZFBvc2l0aW9uLnByZXZpb3VzKCk7CisgICAgfQorCisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3RlZFNlbnRlbmNlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKworICAgIC8vIFdlIG1h
cmsgdGhlIHNlbGVjdGlvbiBhcyAndXBzdHJlYW0nIHNvIHdlIGNhbiB1c2UgdGhhdCBpbmZvcm1h
dGlvbiBsYXRlciwKKyAgICAvLyB3aGVuIGZpbmRpbmcgdGhlIGFjdHVhbCBvZmZzZXRzIGluIGdl
dFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoKS4KKyAgICBpZiAoYm91bmRhcnlUeXBlID09IEFU
S19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX0VORCkKKyAgICAgICAgc2VsZWN0ZWRTZW50ZW5jZS5z
ZXRBZmZpbml0eShVUFNUUkVBTSk7CisKKyAgICByZXR1cm4gc2VsZWN0ZWRTZW50ZW5jZTsKK30K
Kworc3RhdGljIGNoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0U2VudGVuY2VGb3JCb3VuZGFy
eShBdGtUZXh0KiB0ZXh0LCBpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnkgYm91bmRhcnlUeXBl
LCBHZXRUZXh0UmVsYXRpdmVQb3NpdGlvbiB0ZXh0UG9zaXRpb24sIGludCogc3RhcnRPZmZzZXQs
IGludCogZW5kT2Zmc2V0KQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3Qg
PSBjb3JlKHRleHQpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVPYmplY3QtPmRvY3Vt
ZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIGVtcHR5VGV4dFNlbGVj
dGlvbkF0T2Zmc2V0KDAsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworCisgICAgTm9kZSogbm9k
ZSA9IGdldE5vZGVGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KGNvcmVPYmplY3QpOworICAgIGlmICgh
bm9kZSkKKyAgICAgICAgcmV0dXJuIGVtcHR5VGV4dFNlbGVjdGlvbkF0T2Zmc2V0KDAsIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQpOworCisgICAgaW50IGFjdHVhbE9mZnNldCA9IGF0a09mZnNldFRv
V2ViQ29yZU9mZnNldCh0ZXh0LCBvZmZzZXQpOworCisgICAgLy8gQmVzaWRlcyBvZiB0aGUgdXN1
YWwgY29udmVyc2lvbiBmcm9tIEFUSyBvZmZzZXRzIHRvIFdlYkNvcmUgb2Zmc2V0cywKKyAgICAv
LyB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgZW1iZWRkZWQgb2JqZWN0cyB0aGF0
IG1pZ2h0IGhhdmUgYmVlbgorICAgIC8vIGluc2VydGVkIGluIHRoZSB0ZXh0IGV4cG9zZWQgdGhy
b3VnaCBBdGtUZXh0IHdoZW4gY2FsY3VsYXRpbmcgdGhlIG9mZnNldC4KKyAgICBhY3R1YWxPZmZz
ZXQgLT0gbnVtYmVyT2ZSZXBsYWNlZEVsZW1lbnRzQmVmb3JlT2Zmc2V0KHRleHQsIGFjdHVhbE9m
ZnNldCk7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IGNvcmVPYmplY3Qt
PnZpc2libGVQb3NpdGlvbkZvckluZGV4KGFjdHVhbE9mZnNldCk7CisgICAgVmlzaWJsZVNlbGVj
dGlvbiBjdXJyZW50U2VudGVuY2UgPSBzZW50ZW5jZUF0UG9zaXRpb25Gb3JBdGtCb3VuZGFyeShj
b3JlT2JqZWN0LCBjYXJldFBvc2l0aW9uLCBib3VuZGFyeVR5cGUpOworCisgICAgLy8gVGFrZSBp
bnRvIGFjY291bnQgb3RoZXIgcmVsYXRpdmUgcG9zaXRpb25zLCBpZiBuZWVkZWQsIGJ5CisgICAg
Ly8gY2FsY3VsYXRpbmcgdGhlIG5ldyBwb3NpdGlvbiB0aGF0IHdlIHdvdWxkIG5lZWQgdG8gY29u
c2lkZXIuCisgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1Bvc2l0aW9uID0gY2FyZXRQb3NpdGlvbjsK
KyAgICBzd2l0Y2ggKHRleHRQb3NpdGlvbikgeworICAgIGNhc2UgR2V0VGV4dFBvc2l0aW9uQXQ6
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBHZXRUZXh0UG9zaXRpb25CZWZvcmU6CisgICAg
ICAgIC8vIEVhcmx5IHJldHVybiBpZiBhc2tpbmcgZm9yIHRoZSBwcmV2aW91cyBzZW50ZW5jZSB3
aGlsZSBhbHJlYWR5IGF0IHRoZSBiZWdpbm5pbmcuCisgICAgICAgIGlmIChpc0ZpcnN0VmlzaWJs
ZVBvc2l0aW9uSW5Ob2RlKGN1cnJlbnRTZW50ZW5jZS52aXNpYmxlU3RhcnQoKSwgbm9kZSkpCisg
ICAgICAgICAgICByZXR1cm4gZW1wdHlUZXh0U2VsZWN0aW9uQXRPZmZzZXQoMCwgc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCk7CisgICAgICAgIG5ld1Bvc2l0aW9uID0gY3VycmVudFNlbnRlbmNlLnZp
c2libGVTdGFydCgpLnByZXZpb3VzKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBHZXRU
ZXh0UG9zaXRpb25BZnRlcjoKKyAgICAgICAgLy8gRWFybHkgcmV0dXJuIGlmIGFza2luZyBmb3Ig
dGhlIGZvbGxvd2luZyB3b3JkIHdoaWxlIGFscmVhZHkgYXQgdGhlIGVuZC4KKyAgICAgICAgaWYg
KGlzTGFzdFZpc2libGVQb3NpdGlvbkluTm9kZShjdXJyZW50U2VudGVuY2UudmlzaWJsZUVuZCgp
LCBub2RlKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVRleHRTZWxlY3Rpb25BdE9mZnNldChh
Y2Nlc3NpYmlsaXR5T2JqZWN0TGVuZ3RoKGNvcmVPYmplY3QpLCBzdGFydE9mZnNldCwgZW5kT2Zm
c2V0KTsKKyAgICAgICAgbmV3UG9zaXRpb24gPSBjdXJyZW50U2VudGVuY2UudmlzaWJsZUVuZCgp
Lm5leHQoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHJlbGV2YW50IHNl
bnRlbmNlIHdlIGFyZSBhY3R1YWxseSBpbnRlcmVzdGVkIGluCisgICAgLy8gYW5kIGNhbGN1bGF0
ZSB0aGUgQVRLIG9mZnNldHMgZm9yIGl0LCB0aGVuIHJldHVybiBldmVyeXRoaW5nLgorICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0ZWRTZW50ZW5jZSA9IG5ld1Bvc2l0aW9uICE9IGNhcmV0UG9z
aXRpb24gPyBzZW50ZW5jZUF0UG9zaXRpb25Gb3JBdGtCb3VuZGFyeShjb3JlT2JqZWN0LCBuZXdQ
b3NpdGlvbiwgYm91bmRhcnlUeXBlKSA6IGN1cnJlbnRTZW50ZW5jZTsKKyAgICBnZXRTZWxlY3Rp
b25PZmZzZXRzRm9yT2JqZWN0KGNvcmVPYmplY3QsIHNlbGVjdGVkU2VudGVuY2UsICpzdGFydE9m
ZnNldCwgKmVuZE9mZnNldCk7CisgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4
dCh0ZXh0LCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOworfQorCiBzdGF0aWMgZ2NoYXIqIHdl
YmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEZvck9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9m
ZnNldCwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwgR2V0VGV4dFJlbGF0aXZlUG9zaXRp
b24gdGV4dFBvc2l0aW9uLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQogewog
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwpAQCAtOTU4
LDYgKzEwOTIsOSBAQCBzdGF0aWMgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEZv
ck9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgQQogICAgIGlmIChib3VuZGFyeVR5
cGUgPT0gQVRLX1RFWFRfQk9VTkRBUllfTElORV9TVEFSVCB8fCBib3VuZGFyeVR5cGUgPT0gQVRL
X1RFWFRfQk9VTkRBUllfTElORV9FTkQpCiAgICAgICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxl
VGV4dEdldExpbmVGb3JCb3VuZGFyeSh0ZXh0LCBvZmZzZXQsIGJvdW5kYXJ5VHlwZSwgdGV4dFBv
c2l0aW9uLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKIAorICAgIGlmIChib3VuZGFyeVR5cGUg
PT0gQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfU1RBUlQgfHwgYm91bmRhcnlUeXBlID09IEFU
S19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX0VORCkKKyAgICAgICAgcmV0dXJuIHdlYmtpdEFjY2Vz
c2libGVUZXh0R2V0U2VudGVuY2VGb3JCb3VuZGFyeSh0ZXh0LCBvZmZzZXQsIGJvdW5kYXJ5VHlw
ZSwgdGV4dFBvc2l0aW9uLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKwogI2lmIFBMQVRGT1JN
KEdUSykKICAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGUgY29kZSBiZWxvdyBvbmNlIGV2ZXJ5
IHNpbmdsZSBwYXJ0IGFib3ZlCiAgICAgLy8gaGFzIGJlZW4gcHJvcGVybHkgaW1wbGVtZW50ZWQg
d2l0aG91dCB1c2luZyBQYW5nby9DYWlyby4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210364</attachid>
            <date>2013-09-03 06:04:10 -0700</date>
            <delta_ts>2013-09-03 23:06:38 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>bug-114873-20130903140428.patch</filename>
            <type>text/plain</type>
            <size>9513</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU0OTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTZkODc4YjMwZmI3OGNh
NWEyNmQyOWNiZDk4Mzk2MjM4NTRiMWY4NC4uZmI0OWNlZmVlNzYyMjY3NDcyODIzOTZhZmUwNjM0
Mzk1ODJlNzFmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEzLTA5LTAzICBNYXJp
byBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0dU
S10gUmVpbXBsZW1lbnQgYXRrX3RleHRfZ2V0X3RleHRfKl9vZmZzZXQgZm9yIFNFTlRFTkNFIGJv
dW5kYXJpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExNDg3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlLWltcGxlbWVudCB0aGlzIGZ1bmN0aW9ucyB3aXRob3V0IHVzaW5nIEdhaWxUZXh0VXRpbCBu
b3IgUGFuZ28uCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChpc1NlbnRlbmNlQm91bmRhcnkpOiBIZWxwZXIg
ZnVuY3Rpb24gdG8ga25vdyB3aGVuIHdlIGFyZSBlaXRoZXIKKyAgICAgICAgYXQgdGhlIGJlZ2lu
bmluZyBvciB0aGUgZW5kIG9mIGEgc2VudGVuY2UuCisgICAgICAgIChpc1doaXRlU3BhY2VCZXR3
ZWVuU2VudGVuY2VzKTogSXQgcmV0dXJucyB0cnVlIGlmIHdlIGFyZSBpbiB0aGUKKyAgICAgICAg
bWlkZGxlIG9mIGEgd2hpdGUgc3BhY2UgYmV0d2VlbiBzZW50ZW5jZXMuIFVzZWZ1bCBmb3IgaW1w
bGVtZW50aW5nCisgICAgICAgIHRoZSBTRU5URU5DRV9FTkQgYm91bmRhcnkgdHlwZS4KKyAgICAg
ICAgKHNlbnRlbmNlQXRQb3NpdGlvbkZvckF0a0JvdW5kYXJ5KTogTmV3IGhlbHBlciBmdW5jdGlv
biB0byBmaW5kIHRoZQorICAgICAgICBzZW50ZW5jZSBhdCBhIGdpdmVuIHBvc2l0aW9uIGNvbnNp
ZGVyaW5nIHZhbHVlcyBvZiBBdGtUZXh0Qm91bmRhcnkuCisgICAgICAgICh3ZWJraXRBY2Nlc3Np
YmxlVGV4dEdldFNlbnRlbmNlRm9yQm91bmRhcnkpOiBOZXcgZnVuY3Rpb24sCisgICAgICAgIGlt
cGxlbWVudGluZyBhdGtfdGV4dF9nZXRfdGV4dF8qX29mZnNldCBmb3IgU0VOVEVOQ0UuCisgICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRGb3JPZmZzZXQpOiBSZXBsYWNlIHVzYWdl
IG9mIEdhaWwgZm9yCisgICAgICAgIExJTkUgYm91bmRhcmllcyB3aXRoIHdlYmtpdEFjY2Vzc2li
bGVUZXh0R2V0V29yZEZvckJvdW5kYXJ5KCkuCisKIDIwMTMtMDktMDEgIERpcmsgU2NodWx6ZSAg
PGtyaXRAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgJ2VkZ2VNb2RlJyBhdHRyaWJ1dGUgdG8g
U1ZHRkVHYXVzc2lhbkJsdXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAppbmRl
eCBmMTdjZGMxODRhZmM5MWQ1ZGMxZjJmYjgzM2MwOGFmYzE4MjU1NTA4Li5hYjRiYjRiNTBiZTg0
MDg4Njk1MjcwYjJmNTM0Y2ZjZWJiMmExYWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFj
ZVRleHQuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJGb250LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTFBhcnNl
cklkaW9tcy5oIgogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0
Qm94LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTgzMiw2ICs4MzMsMTM5IEBA
IHN0YXRpYyBjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFdvcmRGb3JCb3VuZGFyeShBdGtU
ZXh0KiB0ZXh0LCBpbnQgb2Zmc2V0LCBBCiAgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0
R2V0VGV4dCh0ZXh0LCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOwogfQogCitzdGF0aWMgYm9v
bCBpc1NlbnRlbmNlQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MpCit7CisgICAg
aWYgKHBvcy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgc2VudGVuY2UgYm91bmRhcnkgaWYgdGhlcmUncyBub3RoaW5nIGJlZm9yZS4K
KyAgICBpZiAocG9zLnByZXZpb3VzKCkuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgLy8gV2UgZ28gYmFja3dhcmRzIGFuZCBmb3J3YXJkIHRvIG1ha2Ugc3VyZSBhYm91dCB0
aGlzLgorICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUHJldmlvdXNTZW50ZW5jZSA9IHN0YXJ0
T2ZTZW50ZW5jZShwb3MpOworICAgIHJldHVybiBzdGFydE9mUHJldmlvdXNTZW50ZW5jZS5pc05v
dE51bGwoKSAmJiBwb3MgPT0gZW5kT2ZTZW50ZW5jZShzdGFydE9mUHJldmlvdXNTZW50ZW5jZSk7
Cit9CisKK3N0YXRpYyBib29sIGlzV2hpdGVTcGFjZUJldHdlZW5TZW50ZW5jZXMoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKK3sKKyAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghaXNXaGl0ZXNwYWNlKHBvc2l0aW9uLmNo
YXJhY3RlckFmdGVyKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWaXNpYmxlUG9z
aXRpb24gc3RhcnRPZldoaXRlU3BhY2UgPSBzdGFydE9mV29yZChwb3NpdGlvbiwgUmlnaHRXb3Jk
SWZPbkJvdW5kYXJ5KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZXaGl0ZVNwYWNlID0gZW5k
T2ZXb3JkKHN0YXJ0T2ZXaGl0ZVNwYWNlLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpOworICAgIGlm
ICghaXNTZW50ZW5jZUJvdW5kYXJ5KHN0YXJ0T2ZXaGl0ZVNwYWNlKSAmJiAhaXNTZW50ZW5jZUJv
dW5kYXJ5KGVuZE9mV2hpdGVTcGFjZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBjb21wYXJlUG9zaXRpb25zKHN0YXJ0T2ZXaGl0ZVNwYWNlLCBwb3NpdGlvbikgPD0gMCAm
JiBjb21wYXJlUG9zaXRpb25zKGVuZE9mV2hpdGVTcGFjZSwgcG9zaXRpb24pID49IDA7Cit9CisK
K3N0YXRpYyBWaXNpYmxlU2VsZWN0aW9uIHNlbnRlbmNlQXRQb3NpdGlvbkZvckF0a0JvdW5kYXJ5
KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgcG9zaXRpb24sIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5cGUpCit7CisgICAgVmlz
aWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb247CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0
aW9uOworCisgICAgYm9vbCBpc0F0U3RhcnRPZlNlbnRlbmNlRm9yRW5kQm91bmRhcnkgPSBpc1do
aXRlU3BhY2VCZXR3ZWVuU2VudGVuY2VzKHBvc2l0aW9uKSB8fCBpc1NlbnRlbmNlQm91bmRhcnko
cG9zaXRpb24pOworICAgIGlmIChib3VuZGFyeVR5cGUgPT0gQVRLX1RFWFRfQk9VTkRBUllfU0VO
VEVOQ0VfU1RBUlQgfHwgIWlzQXRTdGFydE9mU2VudGVuY2VGb3JFbmRCb3VuZGFyeSkgeworICAg
ICAgICBzdGFydFBvc2l0aW9uID0gaXNTZW50ZW5jZUJvdW5kYXJ5KHBvc2l0aW9uKSA/IHBvc2l0
aW9uIDogc3RhcnRPZlNlbnRlbmNlKHBvc2l0aW9uKTsKKyAgICAgICAgLy8gc3RhcnRPZlNlbnRl
bmNlIG1pZ2h0IHN0b3AgYXQgYSBsaW5lYnJlYWsgaW4gdGhlIEhUTUwgc291cmNlIGNvZGUsCisg
ICAgICAgIC8vIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHN0b3AgdGhlcmUgeWV0LCBzbyBrZWVwIGdv
aW5nLgorICAgICAgICB3aGlsZSAoIWlzU2VudGVuY2VCb3VuZGFyeShzdGFydFBvc2l0aW9uKSAm
JiBpc0hUTUxMaW5lQnJlYWsoc3RhcnRQb3NpdGlvbi5jaGFyYWN0ZXJCZWZvcmUoKSkpCisgICAg
ICAgICAgICBzdGFydFBvc2l0aW9uID0gc3RhcnRPZlNlbnRlbmNlKHN0YXJ0UG9zaXRpb24pOwor
CisgICAgICAgIGVuZFBvc2l0aW9uID0gZW5kT2ZTZW50ZW5jZShzdGFydFBvc2l0aW9uKTsKKyAg
ICB9CisKKyAgICBpZiAoYm91bmRhcnlUeXBlID09IEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNF
X0VORCkgeworICAgICAgICBpZiAoaXNBdFN0YXJ0T2ZTZW50ZW5jZUZvckVuZEJvdW5kYXJ5KSB7
CisgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gcG9zaXRpb247CisgICAgICAgICAgICBlbmRQ
b3NpdGlvbiA9IGVuZE9mU2VudGVuY2UoZW5kT2ZXb3JkKHBvc2l0aW9uLCBSaWdodFdvcmRJZk9u
Qm91bmRhcnkpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHN0YXJ0T2ZTZW50ZW5jZSByZXR1
cm5zIGEgcG9zaXRpb24gYWZ0ZXIgYW55IHdoaXRlIHNwYWNlIHByZXZpb3VzIHRvCisgICAgICAg
IC8vIHRoZSBzZW50ZW5jZSwgc28gd2UgbWlnaHQgbmVlZCB0byBhZGp1c3QgdGhhdCBvZmZzZXQg
Zm9yIHRoaXMgYm91bmRhcnkuCisgICAgICAgIGlmIChpc1doaXRlc3BhY2Uoc3RhcnRQb3NpdGlv
bi5jaGFyYWN0ZXJCZWZvcmUoKSkpCisgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gc3RhcnRP
ZldvcmQoc3RhcnRQb3NpdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOworCisgICAgICAgIC8v
IGVuZE9mU2VudGVuY2UgcmV0dXJucyBhIHBvc2l0aW9uIGFmdGVyIGFueSB3aGl0ZSBzcGFjZSBh
ZnRlciB0aGUKKyAgICAgICAgLy8gc2VudGVuY2UsIHNvIHdlIG1pZ2h0IG5lZWQgdG8gYWRqdXN0
IHRoYXQgb2Zmc2V0IGZvciB0aGlzIGJvdW5kYXJ5LgorICAgICAgICBpZiAoaXNXaGl0ZXNwYWNl
KGVuZFBvc2l0aW9uLmNoYXJhY3RlckJlZm9yZSgpKSkKKyAgICAgICAgICAgIGVuZFBvc2l0aW9u
ID0gc3RhcnRPZldvcmQoZW5kUG9zaXRpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKworICAg
ICAgICAvLyBGaW5hbGx5LCBkbyBzb21lIGFkZGl0aW9uYWwgYWRqdXN0bWVudHMgdGhhdCBtaWdo
dCBiZSBuZWVkZWQgaWYKKyAgICAgICAgLy8gcG9zaXRpb25zIGFyZSBhdCB0aGUgc3RhcnQgb3Ig
dGhlIGVuZCBvZiBhIGxpbmUuCisgICAgICAgIGlmIChpc1N0YXJ0T2ZMaW5lKHN0YXJ0UG9zaXRp
b24pICYmICFpc1N0YXJ0T2ZCbG9jayhzdGFydFBvc2l0aW9uKSkKKyAgICAgICAgICAgIHN0YXJ0
UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uLnByZXZpb3VzKCk7CisgICAgICAgIGlmIChpc1N0YXJ0
T2ZMaW5lKGVuZFBvc2l0aW9uKSAmJiAhaXNTdGFydE9mQmxvY2soZW5kUG9zaXRpb24pKQorICAg
ICAgICAgICAgZW5kUG9zaXRpb24gPSBlbmRQb3NpdGlvbi5wcmV2aW91cygpOworICAgIH0KKwor
ICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0ZWRTZW50ZW5jZShzdGFydFBvc2l0aW9uLCBlbmRQ
b3NpdGlvbik7CisKKyAgICAvLyBXZSBtYXJrIHRoZSBzZWxlY3Rpb24gYXMgJ3Vwc3RyZWFtJyBz
byB3ZSBjYW4gdXNlIHRoYXQgaW5mb3JtYXRpb24gbGF0ZXIsCisgICAgLy8gd2hlbiBmaW5kaW5n
IHRoZSBhY3R1YWwgb2Zmc2V0cyBpbiBnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0KCkuCisg
ICAgaWYgKGJvdW5kYXJ5VHlwZSA9PSBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9FTkQpCisg
ICAgICAgIHNlbGVjdGVkU2VudGVuY2Uuc2V0QWZmaW5pdHkoVVBTVFJFQU0pOworCisgICAgcmV0
dXJuIHNlbGVjdGVkU2VudGVuY2U7Cit9CisKK3N0YXRpYyBjaGFyKiB3ZWJraXRBY2Nlc3NpYmxl
VGV4dEdldFNlbnRlbmNlRm9yQm91bmRhcnkoQXRrVGV4dCogdGV4dCwgaW50IG9mZnNldCwgQXRr
VGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwgR2V0VGV4dFJlbGF0aXZlUG9zaXRpb24gdGV4dFBv
c2l0aW9uLCBpbnQqIHN0YXJ0T2Zmc2V0LCBpbnQqIGVuZE9mZnNldCkKK3sKKyAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBjb3JlT2JqZWN0LT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAg
ICAgIHJldHVybiBlbXB0eVRleHRTZWxlY3Rpb25BdE9mZnNldCgwLCBzdGFydE9mZnNldCwgZW5k
T2Zmc2V0KTsKKworICAgIE5vZGUqIG5vZGUgPSBnZXROb2RlRm9yQWNjZXNzaWJpbGl0eU9iamVj
dChjb3JlT2JqZWN0KTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBlbXB0eVRleHRT
ZWxlY3Rpb25BdE9mZnNldCgwLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgIGludCBh
Y3R1YWxPZmZzZXQgPSBhdGtPZmZzZXRUb1dlYkNvcmVPZmZzZXQodGV4dCwgb2Zmc2V0KTsKKwor
ICAgIC8vIEJlc2lkZXMgb2YgdGhlIHVzdWFsIGNvbnZlcnNpb24gZnJvbSBBVEsgb2Zmc2V0cyB0
byBXZWJDb3JlIG9mZnNldHMsCisgICAgLy8gd2UgbmVlZCB0byBjb25zaWRlciB0aGUgcG90ZW50
aWFsIGVtYmVkZGVkIG9iamVjdHMgdGhhdCBtaWdodCBoYXZlIGJlZW4KKyAgICAvLyBpbnNlcnRl
ZCBpbiB0aGUgdGV4dCBleHBvc2VkIHRocm91Z2ggQXRrVGV4dCB3aGVuIGNhbGN1bGF0aW5nIHRo
ZSBvZmZzZXQuCisgICAgYWN0dWFsT2Zmc2V0IC09IG51bWJlck9mUmVwbGFjZWRFbGVtZW50c0Jl
Zm9yZU9mZnNldCh0ZXh0LCBhY3R1YWxPZmZzZXQpOworCisgICAgVmlzaWJsZVBvc2l0aW9uIGNh
cmV0UG9zaXRpb24gPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChhY3R1YWxP
ZmZzZXQpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbnRlbmNlID0gc2VudGVuY2VB
dFBvc2l0aW9uRm9yQXRrQm91bmRhcnkoY29yZU9iamVjdCwgY2FyZXRQb3NpdGlvbiwgYm91bmRh
cnlUeXBlKTsKKworICAgIC8vIFRha2UgaW50byBhY2NvdW50IG90aGVyIHJlbGF0aXZlIHBvc2l0
aW9ucywgaWYgbmVlZGVkLCBieQorICAgIC8vIGNhbGN1bGF0aW5nIHRoZSBuZXcgcG9zaXRpb24g
dGhhdCB3ZSB3b3VsZCBuZWVkIHRvIGNvbnNpZGVyLgorICAgIFZpc2libGVQb3NpdGlvbiBuZXdQ
b3NpdGlvbiA9IGNhcmV0UG9zaXRpb247CisgICAgc3dpdGNoICh0ZXh0UG9zaXRpb24pIHsKKyAg
ICBjYXNlIEdldFRleHRQb3NpdGlvbkF0OgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgR2V0
VGV4dFBvc2l0aW9uQmVmb3JlOgorICAgICAgICAvLyBFYXJseSByZXR1cm4gaWYgYXNraW5nIGZv
ciB0aGUgcHJldmlvdXMgc2VudGVuY2Ugd2hpbGUgYWxyZWFkeSBhdCB0aGUgYmVnaW5uaW5nLgor
ICAgICAgICBpZiAoaXNGaXJzdFZpc2libGVQb3NpdGlvbkluTm9kZShjdXJyZW50U2VudGVuY2Uu
dmlzaWJsZVN0YXJ0KCksIG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5VGV4dFNlbGVj
dGlvbkF0T2Zmc2V0KDAsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworICAgICAgICBuZXdQb3Np
dGlvbiA9IGN1cnJlbnRTZW50ZW5jZS52aXNpYmxlU3RhcnQoKS5wcmV2aW91cygpOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgR2V0VGV4dFBvc2l0aW9uQWZ0ZXI6CisgICAgICAgIC8vIEVh
cmx5IHJldHVybiBpZiBhc2tpbmcgZm9yIHRoZSBmb2xsb3dpbmcgd29yZCB3aGlsZSBhbHJlYWR5
IGF0IHRoZSBlbmQuCisgICAgICAgIGlmIChpc0xhc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY3Vy
cmVudFNlbnRlbmNlLnZpc2libGVFbmQoKSwgbm9kZSkpCisgICAgICAgICAgICByZXR1cm4gZW1w
dHlUZXh0U2VsZWN0aW9uQXRPZmZzZXQoYWNjZXNzaWJpbGl0eU9iamVjdExlbmd0aChjb3JlT2Jq
ZWN0KSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisgICAgICAgIG5ld1Bvc2l0aW9uID0gY3Vy
cmVudFNlbnRlbmNlLnZpc2libGVFbmQoKS5uZXh0KCk7CisgICAgICAgIGJyZWFrOworCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgLy8g
RGV0ZXJtaW5lIHRoZSByZWxldmFudCBzZW50ZW5jZSB3ZSBhcmUgYWN0dWFsbHkgaW50ZXJlc3Rl
ZCBpbgorICAgIC8vIGFuZCBjYWxjdWxhdGUgdGhlIEFUSyBvZmZzZXRzIGZvciBpdCwgdGhlbiBy
ZXR1cm4gZXZlcnl0aGluZy4KKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGVkU2VudGVuY2Ug
PSBuZXdQb3NpdGlvbiAhPSBjYXJldFBvc2l0aW9uID8gc2VudGVuY2VBdFBvc2l0aW9uRm9yQXRr
Qm91bmRhcnkoY29yZU9iamVjdCwgbmV3UG9zaXRpb24sIGJvdW5kYXJ5VHlwZSkgOiBjdXJyZW50
U2VudGVuY2U7CisgICAgZ2V0U2VsZWN0aW9uT2Zmc2V0c0Zvck9iamVjdChjb3JlT2JqZWN0LCBz
ZWxlY3RlZFNlbnRlbmNlLCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOworICAgIHJldHVybiB3
ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQodGV4dCwgKnN0YXJ0T2Zmc2V0LCAqZW5kT2Zmc2V0
KTsKK30KKwogc3RhdGljIGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRGb3JPZmZz
ZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5
cGUsIEdldFRleHRSZWxhdGl2ZVBvc2l0aW9uIHRleHRQb3NpdGlvbiwgZ2ludCogc3RhcnRPZmZz
ZXQsIGdpbnQqIGVuZE9mZnNldCkKIHsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2Jq
ZWN0ID0gY29yZSh0ZXh0KTsKQEAgLTg0NCw2ICs5NzgsOSBAQCBzdGF0aWMgZ2NoYXIqIHdlYmtp
dEFjY2Vzc2libGVUZXh0R2V0VGV4dEZvck9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNl
dCwgQQogICAgIGlmIChib3VuZGFyeVR5cGUgPT0gQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFS
VCB8fCBib3VuZGFyeVR5cGUgPT0gQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQpCiAgICAgICAg
IHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFdvcmRGb3JCb3VuZGFyeSh0ZXh0LCBvZmZz
ZXQsIGJvdW5kYXJ5VHlwZSwgdGV4dFBvc2l0aW9uLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsK
IAorICAgIGlmIChib3VuZGFyeVR5cGUgPT0gQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfU1RB
UlQgfHwgYm91bmRhcnlUeXBlID09IEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX0VORCkKKyAg
ICAgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0U2VudGVuY2VGb3JCb3VuZGFyeSh0
ZXh0LCBvZmZzZXQsIGJvdW5kYXJ5VHlwZSwgdGV4dFBvc2l0aW9uLCBzdGFydE9mZnNldCwgZW5k
T2Zmc2V0KTsKKwogI2lmIFBMQVRGT1JNKEdUSykKICAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0
aGUgY29kZSBiZWxvdyBvbmNlIGV2ZXJ5IHNpbmdsZSBwYXJ0IGFib3ZlCiAgICAgLy8gaGFzIGJl
ZW4gcHJvcGVybHkgaW1wbGVtZW50ZWQgd2l0aG91dCB1c2luZyBQYW5nby9DYWlyby4K
</data>
<flag name="review"
          id="232463"
          type_id="1"
          status="+"
          setter="cfleizach"
    />
          </attachment>
      

    </bug>

</bugzilla>