<?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>60569</bug_id>
          
          <creation_ts>2011-05-10 12:10:34 -0700</creation_ts>
          <short_desc>Add flags to Chromium ImageDiff to write image comparison metrics out to files.</short_desc>
          <delta_ts>2011-05-26 00:45:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Tom Hudson">tomhudson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dpranke</cc>
    
    <cc>levin</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>401411</commentid>
    <comment_count>0</comment_count>
    <who name="Tom Hudson">tomhudson</who>
    <bug_when>2011-05-10 12:10:34 -0700</bug_when>
    <thetext>Add flags to Chromium ImageDiff to write image comparison metrics out to files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401416</commentid>
    <comment_count>1</comment_count>
      <attachid>92994</attachid>
    <who name="Tom Hudson">tomhudson</who>
    <bug_when>2011-05-10 12:18:53 -0700</bug_when>
    <thetext>Created attachment 92994
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401418</commentid>
    <comment_count>2</comment_count>
      <attachid>92994</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-10 12:21:41 -0700</bug_when>
    <thetext>Comment on attachment 92994
Patch

Attachment 92994 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8684083</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401426</commentid>
    <comment_count>3</comment_count>
      <attachid>92994</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-05-10 12:49:07 -0700</bug_when>
    <thetext>Comment on attachment 92994
Patch

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

Doesn&apos;t build.

&gt; Tools/DumpRenderTree/chromium/ImageDiff.cpp:269
&gt;  {

avoid abbreviations: &quot;cp&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401431</commentid>
    <comment_count>4</comment_count>
      <attachid>92996</attachid>
    <who name="Tom Hudson">tomhudson</who>
    <bug_when>2011-05-10 12:59:45 -0700</bug_when>
    <thetext>Created attachment 92996
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401582</commentid>
    <comment_count>5</comment_count>
      <attachid>92996</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-05-10 15:42:01 -0700</bug_when>
    <thetext>Comment on attachment 92996
Patch

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

In general, this looks fine, mostly just style nits.

Out of curiosity, what is this for?

&gt; Tools/DumpRenderTree/chromium/ImageDiff.cpp:199
&gt; +#define MAX2(a, b) ((a) &lt; (b) ? (b) : (a))
&gt; +#define MIN2(a, b) ((a) &lt; (b) ? (a) : (b))

Do we really need to use macros here?  What&apos;s wrong with std::min and std::max?

&gt; Tools/DumpRenderTree/chromium/ImageDiff.cpp:203
&gt; +#define MAX3(a, b, c) ((a) &lt; (b) ? MAX2((b), (c)) : MAX2((a), (c)))
&gt; +#define RED(a) ((a &lt;&lt; 24) &gt;&gt; 24)
&gt; +#define GREEN(a) ((a &lt;&lt; 16) &gt;&gt; 24)
&gt; +#define BLUE(a) ((a &lt;&lt; 8) &gt;&gt; 24)

I would also just make these functions.  If you want you can even mark them as inline.

&gt; Tools/DumpRenderTree/chromium/ImageDiff.cpp:214
&gt; +    for (int y = 0; y &lt; h; y++) {
&gt; +        for (int x = 0; x &lt; w; x++) {

Nit: WebKit style prefers ++y and ++x.

&gt; Tools/DumpRenderTree/chromium/ImageDiff.cpp:433
&gt; +    fprintf(stderr, &quot;ImageDiff::diffImages\n&quot;);

Did you mean to keep this line here?

&gt; Tools/DumpRenderTree/chromium/ImageDiff.cpp:442
&gt; +        int fileTypeDotOffset = strrchr(outFile, &apos;.&apos;) - outFile;
&gt; +        strncpy(metadataOutFilename, outFile, fileTypeDotOffset);
&gt; +        strcpy(metadataOutFilename + fileTypeDotOffset, &quot;-meta.json&quot;);

Can we just use std::string here?  Something like:
std::string outFileString(outFile);
outFileString = outFileString.substring(0, outFileString.find(&apos;.&apos;) - 1) + &quot;-meta.json&quot;;

&gt; Tools/DumpRenderTree/chromium/ImageDiff.cpp:443
&gt; +        fprintf(stderr, &quot;ImageDiff: metadata in %s\n&quot;, metadataOutFilename);

Do we need this logging statement?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:156
&gt; -                   actual_filename, diff_filename]
&gt; +                   actual_filename, diff_filename,
&gt; +                   &apos;--writePercent&apos;, &apos;--weighted&apos;]

Can we add a new test case rather than replacing an existing test case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405031</commentid>
    <comment_count>6</comment_count>
      <attachid>93760</attachid>
    <who name="Tom Hudson">tomhudson</who>
    <bug_when>2011-05-17 06:37:11 -0700</bug_when>
    <thetext>Created attachment 93760
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405038</commentid>
    <comment_count>7</comment_count>
    <who name="Tom Hudson">tomhudson</who>
    <bug_when>2011-05-17 07:02:41 -0700</bug_when>
    <thetext>After discussions with Tony, ImageDiff writes metric to stdout. Output will be processed by chromium.py (see bug 60957).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405115</commentid>
    <comment_count>8</comment_count>
      <attachid>93760</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-05-17 10:08:43 -0700</bug_when>
    <thetext>Comment on attachment 93760
Patch

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

This change LGTM.  Did you want this patch reviewed?  If so, please set r? and set cq? if you want someone to commit it for you.

&gt; Tools/DumpRenderTree/chromium/ImageDiff.cpp:228
&gt; +    for (int y = 0; y &lt; h; y++) {
&gt; +        for (int x = 0; x &lt; w; x++) {

Nit: WebKit style prefers ++y and ++x</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405142</commentid>
    <comment_count>9</comment_count>
    <who name="Tom Hudson">tomhudson</who>
    <bug_when>2011-05-17 10:32:18 -0700</bug_when>
    <thetext>Tony, Mike had another feature request that was going to impact this, 60957, and 60964; I uploaded these so that Dirk could look at them for context on our discussion of 60957, but intended to do another round of revision today/tomorrow before I was ready for review, which is why I didn&apos;t specify r? on this.

Ugh, my careless regression on that Nit. Fixed locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409619</commentid>
    <comment_count>10</comment_count>
      <attachid>93760</attachid>
    <who name="Tom Hudson">tomhudson</who>
    <bug_when>2011-05-25 07:18:08 -0700</bug_when>
    <thetext>Comment on attachment 93760
Patch

This patch is meant to work together with 60957 and and 60964, but does not depend on them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409620</commentid>
    <comment_count>11</comment_count>
      <attachid>93760</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-25 07:18:42 -0700</bug_when>
    <thetext>Comment on attachment 93760
Patch

Rejecting attachment 93760 from review queue.

tomhudson@google.com does not have reviewer permissions according to http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/committers.py.

- If you do not have reviewer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have reviewer rights please correct the error in Tools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your reviewer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409621</commentid>
    <comment_count>12</comment_count>
      <attachid>93760</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-25 07:19:22 -0700</bug_when>
    <thetext>Comment on attachment 93760
Patch

Rejecting attachment 93760 from commit-queue.

tomhudson@google.com does not have committer permissions according to http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/committers.py.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409692</commentid>
    <comment_count>13</comment_count>
      <attachid>93760</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-05-25 09:39:55 -0700</bug_when>
    <thetext>Comment on attachment 93760
Patch

cq- for the x++/++x nit.  If you upload a fixed version, I can cq+ it for you to get it landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409809</commentid>
    <comment_count>14</comment_count>
      <attachid>94830</attachid>
    <who name="Tom Hudson">tomhudson</who>
    <bug_when>2011-05-25 12:04:58 -0700</bug_when>
    <thetext>Created attachment 94830
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410026</commentid>
    <comment_count>15</comment_count>
      <attachid>94830</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-25 16:48:18 -0700</bug_when>
    <thetext>Comment on attachment 94830
Patch

Rejecting attachment 94830 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-8&apos;, &apos;land-a...&quot; exit_code: 1

Last 500 characters of output:
WebCore.exp.in
	M	Source/WebCore/ChangeLog
	M	Source/WebKit2/ChangeLog
	M	Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
	M	Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePrivate.h
	M	Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp
	M	Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h
r87335 = 3586f9721775466be55e056bd291dec1aea7b1be (refs/remotes/trunk)
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/trunk.

Full output: http://queues.webkit.org/results/8734587</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410030</commentid>
    <comment_count>16</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-05-25 16:54:18 -0700</bug_when>
    <thetext>This failed because the format of the reviewer line is incorrect.  I&apos;ll upload another copy with a fixed reviewer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410032</commentid>
    <comment_count>17</comment_count>
      <attachid>94881</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-05-25 16:56:03 -0700</bug_when>
    <thetext>Created attachment 94881
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410258</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-26 00:43:47 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 94881:

http/tests/websocket/tests/long-invalid-header.html bug 54131 (author: abarth@webkit.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410259</commentid>
    <comment_count>19</comment_count>
      <attachid>94881</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-26 00:44:57 -0700</bug_when>
    <thetext>Comment on attachment 94881
Patch for landing

Clearing flags on attachment: 94881

Committed r87367: &lt;http://trac.webkit.org/changeset/87367&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410260</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-26 00:45:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92994</attachid>
            <date>2011-05-10 12:18:53 -0700</date>
            <delta_ts>2011-05-10 12:59:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60569-20110510151851.patch</filename>
            <type>text/plain</type>
            <size>12193</size>
            <attacher name="Tom Hudson">tomhudson</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg2MTc1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjIgQEAKKzIwMTEtMDUtMTAgIFRvbSBIdWRzb24gIDx0b21odWRzb25AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZmxh
Z3MgdG8gQ2hyb21pdW0gSW1hZ2VEaWZmIHRvIHdyaXRlIGltYWdlIGNvbXBhcmlzb24gbWV0cmlj
cyBvdXQgdG8gZmlsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02MDU2OQorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vSW1hZ2VE
aWZmLmNwcDoKKyAgICAgICAgKEltYWdlOjpjcmVhdGVGcm9tU3RkaW4pOiBTcGVsbGluZyBmaXgu
CisgICAgICAgICh3ZWlnaHRlZFBlcmNlbnRhZ2VEaWZmZXJlbnQpOiBOZXcgdmFyaWFudCBtZXRy
aWMgdGhhdCB3ZWlnaHRzCisgICAgICAgIGNvbnRyaWJ1dGlvbiBvZiBwaXhlbHMgcHJvcG9ydGlv
bmFsbHkgdG8gSFNWIGludGVuc2l0eS4KKyAgICAgICAgKGNvbXBhcmVJbWFnZXMpOiBQYXJhbWV0
ZXJpemUgdG8gc2VsZWN0IGFtb25nIG11bHRpcGxlIG1ldHJpY3MuCisgICAgICAgICh1bnRlc3Rl
ZENvbXBhcmVJbWFnZXMpOiBTcGVsbGluZyBmaXguCisgICAgICAgICh3cml0ZU1ldGFkYXRhKTog
V3JpdGUgb3V0IEpTT04gZmlsZSB3aXRoIG1ldHJpYy4KKyAgICAgICAgKGRpZmZJbWFnZXMpOiBQ
YXJhbWV0ZXJpemUsIHNldCB1cCBmaWxlbmFtZSBmb3Igd3JpdGVNZXRhZGF0YS4KKyAgICAgICAg
KG1haW4pOiBIYW5kbGUgbmV3IC0td3JpdGVQZXJjZW50IGFuZCAtLXdlaWdodGVkIGZsYWdzLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHk6
IERlZmF1bHQgY2hyb21pdW0gdG8KKyAgICAgICAgLS13ZWlnaHRlZCAtLXdyaXRlUGVyY2VudC4K
KwogMjAxMS0wNS0xMCAgRGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgU2hpbmljaGlybyBIYW1hamkuCkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9JbWFnZURpZmYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL0ltYWdlRGlmZi5jcHAJKHJldmlzaW9uIDg2MTY2KQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vSW1hZ2VEaWZmLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYsNiArNTYsMTUgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHN0YXRpYyBjb25zdCBjaGFyIG9w
dGlvblBvbGxTdGRpbltdID0gIi0tdXNlLXN0ZGluIjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlv
bkdlbmVyYXRlRGlmZltdID0gIi0tZGlmZiI7CiAKKy8vIElmIC0tZGlmZiBpcyBwYXNzZWQsIGNh
dXNlcyB0aGUgYXBwIHRvIGFsc28gd3JpdGUgYSBzdW1tYXJ5IGZpbGUKKy8vICJwZXJjZW50YWdl
cy50eHQiIHdpdGggZWFjaCBhY3R1YWwgZmlsZW5hbWUgYW5kIGl0cyBjb3JyZXNwb25kaW5nIG1l
dHJpYworLy8gKCUgZGlmZmVyZW50KS4KK3N0YXRpYyBjb25zdCBjaGFyIG9wdGlvbldyaXRlUGVy
Y2VudGFnZXNbXSA9ICItLXdyaXRlUGVyY2VudCI7CisKKy8vIFVzZSB3ZWlnaHRlZFBlcmNlbnRh
Z2VEaWZmZXJlbnQoKSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGltYWdlIGNvbXBhcmF0b3IKKy8v
IHByb2MsIHdlaWdodGluZyBlYWNoIHBpeGVsIGRpZmZlcmVudCBieSB0aGUgaW50ZW5zaXR5IG9m
IHRoZSBkaWZmZXJlbmNlLgorc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uV2VpZ2h0ZWRbXSA9ICIt
LXdlaWdodGVkIjsKKwogLy8gUmV0dXJuIGNvZGVzIHVzZWQgYnkgdGhpcyB1dGlsaXR5Lgogc3Rh
dGljIGNvbnN0IGludCBzdGF0dXNTYW1lID0gMDsKIHN0YXRpYyBjb25zdCBpbnQgc3RhdHVzRGlm
ZmVyZW50ID0gMTsKQEAgLTgzLDcgKzkyLDcgQEAgcHVibGljOgogCiAgICAgLy8gQ3JlYXRlcyB0
aGUgaW1hZ2UgZnJvbSBzdGRpbiB3aXRoIHRoZSBnaXZlbiBkYXRhIGxlbmd0aC4gT24gc3VjY2Vz
cywgaXQKICAgICAvLyB3aWxsIHJldHVybiB0cnVlLiBPbiBmYWlsdXJlLCBubyBvdGhlciBtZXRo
b2RzIHNob3VsZCBiZSBhY2Nlc3NlZC4KLSAgICBib29sIGNyYWV0ZUZyb21TdGRpbihzaXplX3Qg
Ynl0ZUxlbmd0aCkKKyAgICBib29sIGNyZWF0ZUZyb21TdGRpbihzaXplX3QgYnl0ZUxlbmd0aCkK
ICAgICB7CiAgICAgICAgIGlmICghYnl0ZUxlbmd0aCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTE1Miw2ICsxNjEsOCBAQCBwcml2YXRlOgogICAgIHZlY3Rvcjx1bnNpZ25lZCBjaGFy
PiBtX2RhdGE7CiB9OwogCit0eXBlZGVmIGZsb2F0ICgqSW1hZ2VDb21wYXJpc29uUHJvYykgKGNv
bnN0IEltYWdlJiwgY29uc3QgSW1hZ2UmKTsKKwogZmxvYXQgcGVyY2VudGFnZURpZmZlcmVudChj
b25zdCBJbWFnZSYgYmFzZWxpbmUsIGNvbnN0IEltYWdlJiBhY3R1YWwpCiB7CiAgICAgaW50IHcg
PSBtaW4oYmFzZWxpbmUud2lkdGgoKSwgYWN0dWFsLndpZHRoKCkpOwpAQCAtMTg0LDYgKzE5NSw1
NCBAQCBmbG9hdCBwZXJjZW50YWdlRGlmZmVyZW50KGNvbnN0IEltYWdlJiBiCiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0PihwaXhlbHNEaWZmZXJlbnQpIC8gdG90YWxQaXhlbHMgKiAxMDA7
CiB9CiAKKyNkZWZpbmUgTUFYMihhLCBiKSAoKGEpIDwgKGIpID8gKGIpIDogKGEpKQorI2RlZmlu
ZSBNSU4yKGEsIGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCisjZGVmaW5lIE1BWDMoYSwgYiwg
YykgKChhKSA8IChiKSA/IE1BWDIoKGIpLCAoYykpIDogTUFYMigoYSksIChjKSkpCisjZGVmaW5l
IFJFRChhKSAoKGEgPDwgMjQpID4+IDI0KQorI2RlZmluZSBHUkVFTihhKSAoKGEgPDwgMTYpID4+
IDI0KQorI2RlZmluZSBCTFVFKGEpICgoYSA8PCA4KSA+PiAyNCkKKworLy8vIFJhbmsgc21hbGwt
cGl4ZWwtY291bnQgaGlnaC1pbnRlbnNpdHkgY2hhbmdlcyBhcyBtb3JlIGltcG9ydGFudCB0aGFu
CisvLy8gbGFyZ2UtcGl4ZWwtY291bnQgbG93LWludGVuc2l0eSBjaGFuZ2VzLgorZmxvYXQgd2Vp
Z2h0ZWRQZXJjZW50YWdlRGlmZmVyZW50KGNvbnN0IEltYWdlJiBiYXNlbGluZSwgY29uc3QgSW1h
Z2UmIGFjdHVhbCkKK3sKKyAgICBpbnQgdyA9IG1pbihiYXNlbGluZS53aWR0aCgpLCBhY3R1YWwu
d2lkdGgoKSk7CisgICAgaW50IGggPSBtaW4oYmFzZWxpbmUuaGVpZ2h0KCksIGFjdHVhbC5oZWln
aHQoKSk7CisKKyAgICBmbG9hdCB3ZWlnaHRlZFBpeGVsc0RpZmZlcmVudCA9IDA7CisgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoOyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
OyB4KyspIHsKKyAgICAgICAgICAgIHVpbnQzMl90IGFjdHVhbENvbG9yID0gYWN0dWFsLnBpeGVs
QXQoeCwgeSk7CisgICAgICAgICAgICB1aW50MzJfdCBuZXdDb2xvciA9IGJhc2VsaW5lLnBpeGVs
QXQoeCwgeSk7CisgICAgICAgICAgICBpZiAobmV3Q29sb3IgIT0gYWN0dWFsQ29sb3IpIHsKKyAg
ICAgICAgICAgICAgICB1aW50MzJfdCBhY3R1YWxSID0gUkVEKGFjdHVhbENvbG9yKTsKKyAgICAg
ICAgICAgICAgICB1aW50MzJfdCBhY3R1YWxHID0gR1JFRU4oYWN0dWFsQ29sb3IpOworICAgICAg
ICAgICAgICAgIHVpbnQzMl90IGFjdHVhbEIgPSBCTFVFKGFjdHVhbENvbG9yKTsKKyAgICAgICAg
ICAgICAgICB1aW50MzJfdCBuZXdSID0gUkVEKG5ld0NvbG9yKTsKKyAgICAgICAgICAgICAgICB1
aW50MzJfdCBuZXdHID0gR1JFRU4obmV3Q29sb3IpOworICAgICAgICAgICAgICAgIHVpbnQzMl90
IG5ld0IgPSBCTFVFKG5ld0NvbG9yKTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBkZWx0YVIg
PSBNQVgyKG5ld1IsIGFjdHVhbFIpIC0gTUlOMihuZXdSLCBhY3R1YWxSKTsKKyAgICAgICAgICAg
ICAgICB1aW50MzJfdCBkZWx0YUcgPSBNQVgyKG5ld0csIGFjdHVhbEcpIC0gTUlOMihuZXdHLCBh
Y3R1YWxHKTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBkZWx0YUIgPSBNQVgyKG5ld0IsIGFj
dHVhbEIpIC0gTUlOMihuZXdCLCBhY3R1YWxCKTsKKyAgICAgICAgICAgICAgICB3ZWlnaHRlZFBp
eGVsc0RpZmZlcmVudCArPQorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4o
TUFYMyhkZWx0YVIsIGRlbHRhRywgZGVsdGFCKSkgLyAyNTU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpbnQgbWF4V2lkdGggPSBtYXgoYmFzZWxpbmUud2lkdGgoKSwg
YWN0dWFsLndpZHRoKCkpOworICAgIGludCBtYXhIZWlnaHQgPSBtYXgoYmFzZWxpbmUuaGVpZ2h0
KCksIGFjdHVhbC5oZWlnaHQoKSk7CisKKyAgICB3ZWlnaHRlZFBpeGVsc0RpZmZlcmVudCArPSAo
bWF4V2lkdGggLSB3KSAqIGg7CisgICAgd2VpZ2h0ZWRQaXhlbHNEaWZmZXJlbnQgKz0gKG1heEhl
aWdodCAtIGgpICogbWF4V2lkdGg7CisKKyAgICBmbG9hdCB0b3RhbFBpeGVscyA9IHN0YXRpY19j
YXN0PGZsb2F0PihhY3R1YWwud2lkdGgoKSkgKgorICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4o
YWN0dWFsLmhlaWdodCgpKTsKKyAgICBpZiAoIXRvdGFsUGl4ZWxzKQorICAgICAgICByZXR1cm4g
MTAwLjBmOworICAgIHJldHVybiB3ZWlnaHRlZFBpeGVsc0RpZmZlcmVudCAvIHRvdGFsUGl4ZWxz
ICogMTAwOworfQorCiB2b2lkIHByaW50SGVscCgpCiB7CiAgICAgZnByaW50ZihzdGRlcnIsCkBA
IC0yMDYsNyArMjY1LDcgQEAgdm9pZCBwcmludEhlbHAoKQogICAgICovCiB9CiAKLWludCBjb21w
YXJlSW1hZ2VzKGNvbnN0IGNoYXIqIGZpbGUxLCBjb25zdCBjaGFyKiBmaWxlMikKK2ludCBjb21w
YXJlSW1hZ2VzKGNvbnN0IGNoYXIqIGZpbGUxLCBjb25zdCBjaGFyKiBmaWxlMiwgSW1hZ2VDb21w
YXJpc29uUHJvYyBjcCkKIHsKICAgICBJbWFnZSBhY3R1YWxJbWFnZTsKICAgICBJbWFnZSBiYXNl
bGluZUltYWdlOwpAQCAtMjIwLDcgKzI3OSw3IEBAIGludCBjb21wYXJlSW1hZ2VzKGNvbnN0IGNo
YXIqIGZpbGUxLCBjb24KICAgICAgICAgcmV0dXJuIHN0YXR1c0Vycm9yOwogICAgIH0KIAotICAg
IGZsb2F0IHBlcmNlbnQgPSBwZXJjZW50YWdlRGlmZmVyZW50KGFjdHVhbEltYWdlLCBiYXNlbGlu
ZUltYWdlKTsKKyAgICBmbG9hdCBwZXJjZW50ID0gKCpjcCkoYWN0dWFsSW1hZ2UsIGJhc2VsaW5l
SW1hZ2UpOwogICAgIGlmIChwZXJjZW50ID4gMC4wKSB7CiAgICAgICAgIC8vIGZhaWx1cmU6IFRo
ZSBXZWJLaXQgdmVyc2lvbiBhbHNvIHdyaXRlcyB0aGUgZGlmZmVyZW5jZSBpbWFnZSB0bwogICAg
ICAgICAvLyBzdGRvdXQsIHdoaWNoIHNlZW1zIGV4Y2Vzc2l2ZSBmb3Igb3VyIG5lZWRzLgpAQCAt
MjM2LDcgKzI5NSw3IEBAIGludCBjb21wYXJlSW1hZ2VzKGNvbnN0IGNoYXIqIGZpbGUxLCBjb24K
IAogLy8gVW50ZXN0ZWQgbW9kZSB0aGF0IGFjdHMgbGlrZSBXZWJLaXQncyBpbWFnZSBjb21wYXJh
dG9yLiBJIHdyb3RlIHRoaXMgYnV0CiAvLyBkZWNpZGVkIGl0J3MgdG9vIGNvbXBsaWNhdGVkLiBX
ZSBtYXkgdXNlIGl0IGluIHRoZSBmdXR1cmUgaWYgaXQgbG9va3MgdXNlZnVsLgotaW50IHVudGVz
dGVkQ29tcGFyZUltYWdlcygpCitpbnQgdW50ZXN0ZWRDb21wYXJlSW1hZ2VzKEltYWdlQ29tcGFy
aXNvblByb2MgY3ApCiB7CiAgICAgSW1hZ2UgYWN0dWFsSW1hZ2U7CiAgICAgSW1hZ2UgYmFzZWxp
bmVJbWFnZTsKQEAgLTI1NCwxMiArMzEzLDEyIEBAIGludCB1bnRlc3RlZENvbXBhcmVJbWFnZXMo
KQogCiAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICAgICAgIGlmIChp
bWFnZVNpemUgPiAwICYmICFhY3R1YWxJbWFnZS5oYXNJbWFnZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFhY3R1YWxJbWFnZS5jcmFldGVGcm9tU3RkaW4oaW1hZ2VTaXplKSkgeworICAgICAg
ICAgICAgICAgIGlmICghYWN0dWFsSW1hZ2UuY3JlYXRlRnJvbVN0ZGluKGltYWdlU2l6ZSkpIHsK
ICAgICAgICAgICAgICAgICAgICAgZnB1dHMoIkVycm9yLCBpbnB1dCBpbWFnZSBjYW4ndCBiZSBk
ZWNvZGVkLlxuIiwgc3RkZXJyKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChpbWFnZVNpemUgPiAwICYmICFi
YXNlbGluZUltYWdlLmhhc0ltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWJhc2VsaW5l
SW1hZ2UuY3JhZXRlRnJvbVN0ZGluKGltYWdlU2l6ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IWJhc2VsaW5lSW1hZ2UuY3JlYXRlRnJvbVN0ZGluKGltYWdlU2l6ZSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgZnB1dHMoIkVycm9yLCBiYXNlbGluZSBpbWFnZSBjYW4ndCBiZSBkZWNvZGVkLlxu
Iiwgc3RkZXJyKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAg
ICAgfQpAQCAtMjcwLDcgKzMyOSw3IEBAIGludCB1bnRlc3RlZENvbXBhcmVJbWFnZXMoKQogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKGFjdHVhbEltYWdlLmhhc0ltYWdlKCkgJiYgYmFzZWxpbmVJ
bWFnZS5oYXNJbWFnZSgpKSB7Ci0gICAgICAgICAgICBmbG9hdCBwZXJjZW50ID0gcGVyY2VudGFn
ZURpZmZlcmVudChhY3R1YWxJbWFnZSwgYmFzZWxpbmVJbWFnZSk7CisgICAgICAgICAgICBmbG9h
dCBwZXJjZW50ID0gKCpjcCkoYWN0dWFsSW1hZ2UsIGJhc2VsaW5lSW1hZ2UpOwogICAgICAgICAg
ICAgaWYgKHBlcmNlbnQgPiAwLjApIHsKICAgICAgICAgICAgICAgICAvLyBmYWlsdXJlOiBUaGUg
V2ViS2l0IHZlcnNpb24gYWxzbyB3cml0ZXMgdGhlIGRpZmZlcmVuY2UgaW1hZ2UgdG8KICAgICAg
ICAgICAgICAgICAvLyBzdGRvdXQsIHdoaWNoIHNlZW1zIGV4Y2Vzc2l2ZSBmb3Igb3VyIG5lZWRz
LgpAQCAtMzMwLDcgKzM4OSwyMyBAQCBzdGF0aWMgYm9vbCB3cml0ZUZpbGUoY29uc3QgY2hhciog
b3V0RmlsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWludCBkaWZmSW1hZ2VzKGNvbnN0IGNoYXIq
IGZpbGUxLCBjb25zdCBjaGFyKiBmaWxlMiwgY29uc3QgY2hhciogb3V0RmlsZSkKK3N0YXRpYyBi
b29sIHdyaXRlTWV0YWRhdGEoY29uc3QgY2hhciogb3V0RmlsZSwgY29uc3QgSW1hZ2UmIGFjdHVh
bEltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbWFnZSYgYmFzZWxpbmVJ
bWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VDb21wYXJpc29uUHJvYyBjcCkg
eworICAgIGZsb2F0IGRpZmZlcmVuY2VNZXRyaWMgPSAoKmNwKShiYXNlbGluZUltYWdlLCBhY3R1
YWxJbWFnZSk7CisgICAgRklMRSogZmlsZSA9IGZvcGVuKG91dEZpbGUsICJ3Iik7CisgICAgaWYg
KCFmaWxlKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW1hZ2VEaWZmOiB1bmFibGUgdG8g
b3BlbiBtZXRhZGF0YSBvdXRwdXQgZmlsZS5cbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIGZwcmludGYoZmlsZSwgIntcIkRpZmZlcmVuY2VNZXRyaWNcIjolLjZmfVxuIiwg
ZGlmZmVyZW5jZU1ldHJpYyk7CisgICAgZmNsb3NlKGZpbGUpOworICAgIHJldHVybiB0cnVlOwor
fQorCitpbnQgZGlmZkltYWdlcyhjb25zdCBjaGFyKiBmaWxlMSwgY29uc3QgY2hhciogZmlsZTIs
IGNvbnN0IGNoYXIqIG91dEZpbGUsCisgICAgICAgICAgICAgICBib29sIHdyaXRlUGVyY2VudGFn
ZXMsIEltYWdlQ29tcGFyaXNvblByb2MgY3AsCisgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBm
aWxlSWRlbnRpZmllcikKIHsKICAgICBJbWFnZSBhY3R1YWxJbWFnZTsKICAgICBJbWFnZSBiYXNl
bGluZUltYWdlOwpAQCAtMzU0LDYgKzQyOSwyMSBAQCBpbnQgZGlmZkltYWdlcyhjb25zdCBjaGFy
KiBmaWxlMSwgY29uc3QgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZklt
YWdlLndpZHRoKCkgKiA0LCAmcG5nRGF0YSk7CiAgICAgaWYgKCF3cml0ZUZpbGUob3V0RmlsZSwg
JnBuZ0RhdGEuZnJvbnQoKSwgcG5nRGF0YS5zaXplKCkpKQogICAgICAgICByZXR1cm4gc3RhdHVz
RXJyb3I7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkltYWdlRGlmZjo6ZGlmZkltYWdlc1xuIik7
CisgICAgaWYgKHdyaXRlUGVyY2VudGFnZXMpIHsKKyAgICAgICAgY2hhciogbWV0YWRhdGFPdXRG
aWxlbmFtZSA9IG5ldyBjaGFyW3N0cmxlbihvdXRGaWxlKSArIDEwXTsKKyAgICAgICAgaWYgKCFt
ZXRhZGF0YU91dEZpbGVuYW1lKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkltYWdl
RGlmZjogY291bGRuJ3QgYWxsb2NhdGUgc3RyaW5nIGJ1ZmZlci5cbiIpOworICAgICAgICAgICAg
cmV0dXJuIHN0YXR1c0Vycm9yOworICAgICAgICB9CisgICAgICAgIGludCBmaWxlVHlwZURvdE9m
ZnNldCA9IHN0cnJjaHIob3V0RmlsZSwgJy4nKSAtIG91dEZpbGU7CisgICAgICAgIHN0cm5jcHko
bWV0YWRhdGFPdXRGaWxlbmFtZSwgb3V0RmlsZSwgZmlsZVR5cGVEb3RPZmZzZXQpOworICAgICAg
ICBzdHJjcHkobWV0YWRhdGFPdXRGaWxlbmFtZSArIGZpbGVUeXBlRG90T2Zmc2V0LCAiLW1ldGEu
anNvbiIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkltYWdlRGlmZjogbWV0YWRhdGEgaW4g
JXNcbiIsIG1ldGFkYXRhT3V0RmlsZW5hbWUpOworICAgICAgICB3cml0ZU1ldGFkYXRhKG1ldGFk
YXRhT3V0RmlsZW5hbWUsIGFjdHVhbEltYWdlLCBiYXNlbGluZUltYWdlLCBjcCk7CisgICAgICAg
IGRlbGV0ZSBbXSBtZXRhZGF0YU91dEZpbGVuYW1lOworICAgIH0KICAgICByZXR1cm4gc3RhdHVz
RGlmZmVyZW50OwogfQogCkBAIC0zNjIsMTIgKzQ1MiwyNCBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y29uc3QgY2hhciogYXJndltdKQogICAgIFZlY3Rvcjxjb25zdCBjaGFyKj4gdmFsdWVzOwogICAg
IGJvb2wgcG9sbFN0ZGluID0gZmFsc2U7CiAgICAgYm9vbCBnZW5lcmF0ZURpZmYgPSBmYWxzZTsK
KyAgICBib29sIHdyaXRlUGVyY2VudGFnZXMgPSBmYWxzZTsKKyAgICBjb25zdCBjaGFyICogZmls
ZUlkZW50aWZpZXIgPSAwOworICAgIEltYWdlQ29tcGFyaXNvblByb2MgY29tcGFyYXRvciA9IHBl
cmNlbnRhZ2VEaWZmZXJlbnQ7CiAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcmdjOyArK2kpIHsK
ICAgICAgICAgaWYgKCFzdHJjbXAoYXJndltpXSwgb3B0aW9uUG9sbFN0ZGluKSkKICAgICAgICAg
ICAgIHBvbGxTdGRpbiA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwg
b3B0aW9uR2VuZXJhdGVEaWZmKSkKICAgICAgICAgICAgIGdlbmVyYXRlRGlmZiA9IHRydWU7Ci0g
ICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCBvcHRpb25Xcml0
ZVBlcmNlbnRhZ2VzKSkKKyAgICAgICAgICAgIHdyaXRlUGVyY2VudGFnZXMgPSB0cnVlOworICAg
ICAgICBlbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sIG9wdGlvbldlaWdodGVkKSkKKyAgICAgICAg
ICAgIGNvbXBhcmF0b3IgPSB3ZWlnaHRlZFBlcmNlbnRhZ2VEaWZmZXJlbnQ7CisgICAgICAgIGVs
c2UgaWYgKCFzdHJjbXAoYXJndltpXSwgb3B0aW9uRmlsZUlkZW50aWZpZXIpKSB7CisgICAgICAg
ICAgICBpKys7CisgICAgICAgICAgICBpZiAoaSA8IGFyZ2MpCisgICAgICAgICAgICAgICAgZmls
ZUlkZW50aWZpZXIgPSBhcmd2W2ldOworCisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgdmFs
dWVzLmFwcGVuZChhcmd2W2ldKTsKICAgICB9CiAKQEAgLTM4MiwxNCArNDg0LDE2IEBAIGludCBt
YWluKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgICAgIGlmIChoYXZlRmlyc3ROYW1lKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gY29tcGFyZUltYWdlcyB3cml0ZXMgcmVzdWx0cyB0byBzdGRvdXQgdW5sZXNzIGFuIGVycm9y
IG9jY3VycmVkLgotICAgICAgICAgICAgICAgIGlmIChjb21wYXJlSW1hZ2VzKGZpcnN0TmFtZSwg
c3RkaW5CdWZmZXIpID09IHN0YXR1c0Vycm9yKQorICAgICAgICAgICAgICAgIC8vIGNvbXBhcmVJ
bWFnZXMgd3JpdGVzIHJlc3VsdHMgdG8gc3Rkb3V0IHVubGVzcyBhbiBlcnJvcgorICAgICAgICAg
ICAgICAgIC8vIG9jY3VycmVkLgorICAgICAgICAgICAgICAgIGlmIChjb21wYXJlSW1hZ2VzKGZp
cnN0TmFtZSwgc3RkaW5CdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29tcGFyYXRvcikgPT0gc3RhdHVzRXJyb3IpCiAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi
ZXJyb3JcbiIpOwogICAgICAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwogICAgICAgICAgICAg
ICAgIGhhdmVGaXJzdE5hbWUgPSBmYWxzZTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgLy8gU2F2ZSB0aGUgZmlyc3QgZmlsZW5hbWUgaW4gYW5vdGhlciBidWZmZXIgYW5k
IHdhaXQgZm9yIHRoZSBzZWNvbmQKLSAgICAgICAgICAgICAgICAvLyBmaWxlbmFtZSB0byBhcnJp
dmUgdmlhIHN0ZGluLgorICAgICAgICAgICAgICAgIC8vIFNhdmUgdGhlIGZpcnN0IGZpbGVuYW1l
IGluIGFub3RoZXIgYnVmZmVyIGFuZCB3YWl0IGZvciB0aGUKKyAgICAgICAgICAgICAgICAvLyBz
ZWNvbmQgZmlsZW5hbWUgdG8gYXJyaXZlIHZpYSBzdGRpbi4KICAgICAgICAgICAgICAgICBzdHJj
cHkoZmlyc3ROYW1lLCBzdGRpbkJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgaGF2ZUZpcnN0TmFt
ZSA9IHRydWU7CiAgICAgICAgICAgICB9CkBAIC0zOTcsMTEgKzUwMSwxNCBAQCBpbnQgbWFpbihp
bnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
KwogICAgIGlmIChnZW5lcmF0ZURpZmYpIHsKICAgICAgICAgaWYgKHZhbHVlcy5zaXplKCkgPT0g
MykKLSAgICAgICAgICAgIHJldHVybiBkaWZmSW1hZ2VzKHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2
YWx1ZXNbMl0pOworICAgICAgICAgICAgcmV0dXJuIGRpZmZJbWFnZXModmFsdWVzWzBdLCB2YWx1
ZXNbMV0sIHZhbHVlc1syXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlUGVy
Y2VudGFnZXMsIGNvbXBhcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxl
SWRlbnRpZmllcik7CiAgICAgfSBlbHNlIGlmICh2YWx1ZXMuc2l6ZSgpID09IDIpCi0gICAgICAg
IHJldHVybiBjb21wYXJlSW1hZ2VzKGFyZ3ZbMV0sIGFyZ3ZbMl0pOworICAgICAgICByZXR1cm4g
Y29tcGFyZUltYWdlcyhhcmd2WzFdLCBhcmd2WzJdLCBjb21wYXJhdG9yKTsKIAogICAgIHByaW50
SGVscCgpOwogICAgIHJldHVybiBzdGF0dXNFcnJvcjsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQkocmV2aXNpb24g
ODYxNjYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9t
aXVtLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDggQEAgY2xhc3MgQ2hyb21pdW1Q
b3J0KGJhc2UuUG9ydCk6CiAgICAgICAgIGV4ZWN1dGFibGUgPSBzZWxmLl9wYXRoX3RvX2ltYWdl
X2RpZmYoKQogICAgICAgICBpZiBkaWZmX2ZpbGVuYW1lOgogICAgICAgICAgICAgY21kID0gW2V4
ZWN1dGFibGUsICctLWRpZmYnLCBleHBlY3RlZF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAg
ICBhY3R1YWxfZmlsZW5hbWUsIGRpZmZfZmlsZW5hbWVdCisgICAgICAgICAgICAgICAgICAgYWN0
dWFsX2ZpbGVuYW1lLCBkaWZmX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICctLXdyaXRl
UGVyY2VudCcsICctLXdlaWdodGVkJ10KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNtZCA9
IFtleGVjdXRhYmxlLCBleHBlY3RlZF9maWxlbmFtZSwgYWN0dWFsX2ZpbGVuYW1lXQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92996</attachid>
            <date>2011-05-10 12:59:45 -0700</date>
            <delta_ts>2011-05-17 06:37:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60569-20110510155943.patch</filename>
            <type>text/plain</type>
            <size>11949</size>
            <attacher name="Tom Hudson">tomhudson</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg2MTc4KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjIgQEAKKzIwMTEtMDUtMTAgIFRvbSBIdWRzb24gIDx0b21odWRzb25AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZmxh
Z3MgdG8gQ2hyb21pdW0gSW1hZ2VEaWZmIHRvIHdyaXRlIGltYWdlIGNvbXBhcmlzb24gbWV0cmlj
cyBvdXQgdG8gZmlsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02MDU2OQorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vSW1hZ2VE
aWZmLmNwcDoKKyAgICAgICAgKEltYWdlOjpjcmVhdGVGcm9tU3RkaW4pOiBGaXggc3BlbGxpbmcu
CisgICAgICAgICh3ZWlnaHRlZFBlcmNlbnRhZ2VEaWZmZXJlbnQpOiBOZXcgbWV0cmljIHdlaWdo
dGluZyBwaXhlbCBkaWZmZXJlbmNlcworICAgICAgICBieSBIU1YgaW50ZW5zaXR5IGRpZmZlcmVu
Y2UuCisgICAgICAgIChjb21wYXJlSW1hZ2VzKTogUGFyYW1ldGVyaXplIG1ldHJpYy4KKyAgICAg
ICAgKHVudGVzdGVkQ29tcGFyZUltYWdlcyk6IEZpeCBzcGVsbGluZy4KKyAgICAgICAgKHdyaXRl
TWV0YWRhdGEpOiBDcmVhdGUgYSBKU09OIGZpbGUgY29udGFpbmluZyBtZXRyaWMuCisgICAgICAg
IChkaWZmSW1hZ2VzKTogUGFyYW1ldGVyaXplLCBzZXQgdXAgZmlsZW5hbWUgZm9yIHdyaXRlTWV0
YWRhdGEoKS4KKyAgICAgICAgKG1haW4pOiBIYW5kbGUgbmV3IC0td2VpZ2h0ZWQgYW5kIC0td3Jp
dGVQZXJjZW50IG9wdGlvbnMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bS5weTogQ2hhbmdlIGRlZmF1bHQgSW1hZ2VEaWZmCisgICAgICAgIGFy
Z3MgdG8gLS13ZWlnaHRlZCAtLXdyaXRlUGVyY2VudC4KKwogMjAxMS0wNS0xMCAgRGF2aWQgTGV2
aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2hpbmljaGly
byBIYW1hamkuCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9JbWFnZURpZmYu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0ltYWdlRGlm
Zi5jcHAJKHJldmlzaW9uIDg2MTc1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
SW1hZ2VEaWZmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTUgQEAgdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvblBvbGxTdGRpbltdID0gIi0tdXNl
LXN0ZGluIjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkdlbmVyYXRlRGlmZltdID0gIi0tZGlm
ZiI7CiAKKy8vIElmIC0tZGlmZiBpcyBwYXNzZWQsIGNhdXNlcyB0aGUgYXBwIHRvIGFsc28gd3Jp
dGUgYSBzdW1tYXJ5IGZpbGUKKy8vICJwZXJjZW50YWdlcy50eHQiIHdpdGggZWFjaCBhY3R1YWwg
ZmlsZW5hbWUgYW5kIGl0cyBjb3JyZXNwb25kaW5nIG1ldHJpYworLy8gKCUgZGlmZmVyZW50KS4K
K3N0YXRpYyBjb25zdCBjaGFyIG9wdGlvbldyaXRlUGVyY2VudGFnZXNbXSA9ICItLXdyaXRlUGVy
Y2VudCI7CisKKy8vIFVzZSB3ZWlnaHRlZFBlcmNlbnRhZ2VEaWZmZXJlbnQoKSBpbnN0ZWFkIG9m
IHRoZSBkZWZhdWx0IGltYWdlIGNvbXBhcmF0b3IKKy8vIHByb2MsIHdlaWdodGluZyBlYWNoIHBp
eGVsIGRpZmZlcmVudCBieSB0aGUgaW50ZW5zaXR5IG9mIHRoZSBkaWZmZXJlbmNlLgorc3RhdGlj
IGNvbnN0IGNoYXIgb3B0aW9uV2VpZ2h0ZWRbXSA9ICItLXdlaWdodGVkIjsKKwogLy8gUmV0dXJu
IGNvZGVzIHVzZWQgYnkgdGhpcyB1dGlsaXR5Lgogc3RhdGljIGNvbnN0IGludCBzdGF0dXNTYW1l
ID0gMDsKIHN0YXRpYyBjb25zdCBpbnQgc3RhdHVzRGlmZmVyZW50ID0gMTsKQEAgLTgzLDcgKzky
LDcgQEAgcHVibGljOgogCiAgICAgLy8gQ3JlYXRlcyB0aGUgaW1hZ2UgZnJvbSBzdGRpbiB3aXRo
IHRoZSBnaXZlbiBkYXRhIGxlbmd0aC4gT24gc3VjY2VzcywgaXQKICAgICAvLyB3aWxsIHJldHVy
biB0cnVlLiBPbiBmYWlsdXJlLCBubyBvdGhlciBtZXRob2RzIHNob3VsZCBiZSBhY2Nlc3NlZC4K
LSAgICBib29sIGNyYWV0ZUZyb21TdGRpbihzaXplX3QgYnl0ZUxlbmd0aCkKKyAgICBib29sIGNy
ZWF0ZUZyb21TdGRpbihzaXplX3QgYnl0ZUxlbmd0aCkKICAgICB7CiAgICAgICAgIGlmICghYnl0
ZUxlbmd0aCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE1Miw2ICsxNjEsOCBAQCBw
cml2YXRlOgogICAgIHZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBtX2RhdGE7CiB9OwogCit0eXBlZGVm
IGZsb2F0ICgqSW1hZ2VDb21wYXJpc29uUHJvYykgKGNvbnN0IEltYWdlJiwgY29uc3QgSW1hZ2Um
KTsKKwogZmxvYXQgcGVyY2VudGFnZURpZmZlcmVudChjb25zdCBJbWFnZSYgYmFzZWxpbmUsIGNv
bnN0IEltYWdlJiBhY3R1YWwpCiB7CiAgICAgaW50IHcgPSBtaW4oYmFzZWxpbmUud2lkdGgoKSwg
YWN0dWFsLndpZHRoKCkpOwpAQCAtMTg0LDYgKzE5NSw1NCBAQCBmbG9hdCBwZXJjZW50YWdlRGlm
ZmVyZW50KGNvbnN0IEltYWdlJiBiCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihwaXhl
bHNEaWZmZXJlbnQpIC8gdG90YWxQaXhlbHMgKiAxMDA7CiB9CiAKKyNkZWZpbmUgTUFYMihhLCBi
KSAoKGEpIDwgKGIpID8gKGIpIDogKGEpKQorI2RlZmluZSBNSU4yKGEsIGIpICgoYSkgPCAoYikg
PyAoYSkgOiAoYikpCisjZGVmaW5lIE1BWDMoYSwgYiwgYykgKChhKSA8IChiKSA/IE1BWDIoKGIp
LCAoYykpIDogTUFYMigoYSksIChjKSkpCisjZGVmaW5lIFJFRChhKSAoKGEgPDwgMjQpID4+IDI0
KQorI2RlZmluZSBHUkVFTihhKSAoKGEgPDwgMTYpID4+IDI0KQorI2RlZmluZSBCTFVFKGEpICgo
YSA8PCA4KSA+PiAyNCkKKworLy8vIFJhbmsgc21hbGwtcGl4ZWwtY291bnQgaGlnaC1pbnRlbnNp
dHkgY2hhbmdlcyBhcyBtb3JlIGltcG9ydGFudCB0aGFuCisvLy8gbGFyZ2UtcGl4ZWwtY291bnQg
bG93LWludGVuc2l0eSBjaGFuZ2VzLgorZmxvYXQgd2VpZ2h0ZWRQZXJjZW50YWdlRGlmZmVyZW50
KGNvbnN0IEltYWdlJiBiYXNlbGluZSwgY29uc3QgSW1hZ2UmIGFjdHVhbCkKK3sKKyAgICBpbnQg
dyA9IG1pbihiYXNlbGluZS53aWR0aCgpLCBhY3R1YWwud2lkdGgoKSk7CisgICAgaW50IGggPSBt
aW4oYmFzZWxpbmUuaGVpZ2h0KCksIGFjdHVhbC5oZWlnaHQoKSk7CisKKyAgICBmbG9hdCB3ZWln
aHRlZFBpeGVsc0RpZmZlcmVudCA9IDA7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyB5Kysp
IHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3OyB4KyspIHsKKyAgICAgICAgICAgIHVp
bnQzMl90IGFjdHVhbENvbG9yID0gYWN0dWFsLnBpeGVsQXQoeCwgeSk7CisgICAgICAgICAgICB1
aW50MzJfdCBuZXdDb2xvciA9IGJhc2VsaW5lLnBpeGVsQXQoeCwgeSk7CisgICAgICAgICAgICBp
ZiAobmV3Q29sb3IgIT0gYWN0dWFsQ29sb3IpIHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBh
Y3R1YWxSID0gUkVEKGFjdHVhbENvbG9yKTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBhY3R1
YWxHID0gR1JFRU4oYWN0dWFsQ29sb3IpOworICAgICAgICAgICAgICAgIHVpbnQzMl90IGFjdHVh
bEIgPSBCTFVFKGFjdHVhbENvbG9yKTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBuZXdSID0g
UkVEKG5ld0NvbG9yKTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBuZXdHID0gR1JFRU4obmV3
Q29sb3IpOworICAgICAgICAgICAgICAgIHVpbnQzMl90IG5ld0IgPSBCTFVFKG5ld0NvbG9yKTsK
KyAgICAgICAgICAgICAgICB1aW50MzJfdCBkZWx0YVIgPSBNQVgyKG5ld1IsIGFjdHVhbFIpIC0g
TUlOMihuZXdSLCBhY3R1YWxSKTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBkZWx0YUcgPSBN
QVgyKG5ld0csIGFjdHVhbEcpIC0gTUlOMihuZXdHLCBhY3R1YWxHKTsKKyAgICAgICAgICAgICAg
ICB1aW50MzJfdCBkZWx0YUIgPSBNQVgyKG5ld0IsIGFjdHVhbEIpIC0gTUlOMihuZXdCLCBhY3R1
YWxCKTsKKyAgICAgICAgICAgICAgICB3ZWlnaHRlZFBpeGVsc0RpZmZlcmVudCArPQorICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oTUFYMyhkZWx0YVIsIGRlbHRhRywgZGVs
dGFCKSkgLyAyNTU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQg
bWF4V2lkdGggPSBtYXgoYmFzZWxpbmUud2lkdGgoKSwgYWN0dWFsLndpZHRoKCkpOworICAgIGlu
dCBtYXhIZWlnaHQgPSBtYXgoYmFzZWxpbmUuaGVpZ2h0KCksIGFjdHVhbC5oZWlnaHQoKSk7CisK
KyAgICB3ZWlnaHRlZFBpeGVsc0RpZmZlcmVudCArPSAobWF4V2lkdGggLSB3KSAqIGg7CisgICAg
d2VpZ2h0ZWRQaXhlbHNEaWZmZXJlbnQgKz0gKG1heEhlaWdodCAtIGgpICogbWF4V2lkdGg7CisK
KyAgICBmbG9hdCB0b3RhbFBpeGVscyA9IHN0YXRpY19jYXN0PGZsb2F0PihhY3R1YWwud2lkdGgo
KSkgKgorICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oYWN0dWFsLmhlaWdodCgpKTsKKyAgICBp
ZiAoIXRvdGFsUGl4ZWxzKQorICAgICAgICByZXR1cm4gMTAwLjBmOworICAgIHJldHVybiB3ZWln
aHRlZFBpeGVsc0RpZmZlcmVudCAvIHRvdGFsUGl4ZWxzICogMTAwOworfQorCiB2b2lkIHByaW50
SGVscCgpCiB7CiAgICAgZnByaW50ZihzdGRlcnIsCkBAIC0yMDYsNyArMjY1LDggQEAgdm9pZCBw
cmludEhlbHAoKQogICAgICovCiB9CiAKLWludCBjb21wYXJlSW1hZ2VzKGNvbnN0IGNoYXIqIGZp
bGUxLCBjb25zdCBjaGFyKiBmaWxlMikKK2ludCBjb21wYXJlSW1hZ2VzKGNvbnN0IGNoYXIqIGZp
bGUxLCBjb25zdCBjaGFyKiBmaWxlMiwKKyAgICAgICAgICAgICAgICAgIEltYWdlQ29tcGFyaXNv
blByb2MgY29tcGFyYXRvcikKIHsKICAgICBJbWFnZSBhY3R1YWxJbWFnZTsKICAgICBJbWFnZSBi
YXNlbGluZUltYWdlOwpAQCAtMjIwLDcgKzI4MCw3IEBAIGludCBjb21wYXJlSW1hZ2VzKGNvbnN0
IGNoYXIqIGZpbGUxLCBjb24KICAgICAgICAgcmV0dXJuIHN0YXR1c0Vycm9yOwogICAgIH0KIAot
ICAgIGZsb2F0IHBlcmNlbnQgPSBwZXJjZW50YWdlRGlmZmVyZW50KGFjdHVhbEltYWdlLCBiYXNl
bGluZUltYWdlKTsKKyAgICBmbG9hdCBwZXJjZW50ID0gKCpjb21wYXJhdG9yKShhY3R1YWxJbWFn
ZSwgYmFzZWxpbmVJbWFnZSk7CiAgICAgaWYgKHBlcmNlbnQgPiAwLjApIHsKICAgICAgICAgLy8g
ZmFpbHVyZTogVGhlIFdlYktpdCB2ZXJzaW9uIGFsc28gd3JpdGVzIHRoZSBkaWZmZXJlbmNlIGlt
YWdlIHRvCiAgICAgICAgIC8vIHN0ZG91dCwgd2hpY2ggc2VlbXMgZXhjZXNzaXZlIGZvciBvdXIg
bmVlZHMuCkBAIC0yMzYsNyArMjk2LDcgQEAgaW50IGNvbXBhcmVJbWFnZXMoY29uc3QgY2hhciog
ZmlsZTEsIGNvbgogCiAvLyBVbnRlc3RlZCBtb2RlIHRoYXQgYWN0cyBsaWtlIFdlYktpdCdzIGlt
YWdlIGNvbXBhcmF0b3IuIEkgd3JvdGUgdGhpcyBidXQKIC8vIGRlY2lkZWQgaXQncyB0b28gY29t
cGxpY2F0ZWQuIFdlIG1heSB1c2UgaXQgaW4gdGhlIGZ1dHVyZSBpZiBpdCBsb29rcyB1c2VmdWwu
Ci1pbnQgdW50ZXN0ZWRDb21wYXJlSW1hZ2VzKCkKK2ludCB1bnRlc3RlZENvbXBhcmVJbWFnZXMo
SW1hZ2VDb21wYXJpc29uUHJvYyBjb21wYXJhdG9yKQogewogICAgIEltYWdlIGFjdHVhbEltYWdl
OwogICAgIEltYWdlIGJhc2VsaW5lSW1hZ2U7CkBAIC0yNTQsMTIgKzMxNCwxMiBAQCBpbnQgdW50
ZXN0ZWRDb21wYXJlSW1hZ2VzKCkKIAogICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7
CiAgICAgICAgICAgICBpZiAoaW1hZ2VTaXplID4gMCAmJiAhYWN0dWFsSW1hZ2UuaGFzSW1hZ2Uo
KSkgewotICAgICAgICAgICAgICAgIGlmICghYWN0dWFsSW1hZ2UuY3JhZXRlRnJvbVN0ZGluKGlt
YWdlU2l6ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbEltYWdlLmNyZWF0ZUZyb21T
dGRpbihpbWFnZVNpemUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZwdXRzKCJFcnJvciwgaW5w
dXQgaW1hZ2UgY2FuJ3QgYmUgZGVjb2RlZC5cbiIsIHN0ZGVycik7CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAo
aW1hZ2VTaXplID4gMCAmJiAhYmFzZWxpbmVJbWFnZS5oYXNJbWFnZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFiYXNlbGluZUltYWdlLmNyYWV0ZUZyb21TdGRpbihpbWFnZVNpemUpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFiYXNlbGluZUltYWdlLmNyZWF0ZUZyb21TdGRpbihpbWFnZVNp
emUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZwdXRzKCJFcnJvciwgYmFzZWxpbmUgaW1hZ2Ug
Y2FuJ3QgYmUgZGVjb2RlZC5cbiIsIHN0ZGVycik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAxOwogICAgICAgICAgICAgICAgIH0KQEAgLTI3MCw3ICszMzAsNyBAQCBpbnQgdW50ZXN0ZWRD
b21wYXJlSW1hZ2VzKCkKICAgICAgICAgfQogCiAgICAgICAgIGlmIChhY3R1YWxJbWFnZS5oYXNJ
bWFnZSgpICYmIGJhc2VsaW5lSW1hZ2UuaGFzSW1hZ2UoKSkgewotICAgICAgICAgICAgZmxvYXQg
cGVyY2VudCA9IHBlcmNlbnRhZ2VEaWZmZXJlbnQoYWN0dWFsSW1hZ2UsIGJhc2VsaW5lSW1hZ2Up
OworICAgICAgICAgICAgZmxvYXQgcGVyY2VudCA9ICgqY29tcGFyYXRvcikoYWN0dWFsSW1hZ2Us
IGJhc2VsaW5lSW1hZ2UpOwogICAgICAgICAgICAgaWYgKHBlcmNlbnQgPiAwLjApIHsKICAgICAg
ICAgICAgICAgICAvLyBmYWlsdXJlOiBUaGUgV2ViS2l0IHZlcnNpb24gYWxzbyB3cml0ZXMgdGhl
IGRpZmZlcmVuY2UgaW1hZ2UgdG8KICAgICAgICAgICAgICAgICAvLyBzdGRvdXQsIHdoaWNoIHNl
ZW1zIGV4Y2Vzc2l2ZSBmb3Igb3VyIG5lZWRzLgpAQCAtMzMwLDcgKzM5MCwyMiBAQCBzdGF0aWMg
Ym9vbCB3cml0ZUZpbGUoY29uc3QgY2hhciogb3V0RmlsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWludCBkaWZmSW1hZ2VzKGNvbnN0IGNoYXIqIGZpbGUxLCBjb25zdCBjaGFyKiBmaWxlMiwgY29u
c3QgY2hhciogb3V0RmlsZSkKK3N0YXRpYyBib29sIHdyaXRlTWV0YWRhdGEoY29uc3QgY2hhciog
b3V0RmlsZSwgY29uc3QgSW1hZ2UmIGFjdHVhbEltYWdlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbWFnZSYgYmFzZWxpbmVJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW1hZ2VDb21wYXJpc29uUHJvYyBjb21wYXJhdG9yKSB7CisgICAgZmxvYXQgZGlmZmVyZW5j
ZU1ldHJpYyA9ICgqY29tcGFyYXRvcikoYmFzZWxpbmVJbWFnZSwgYWN0dWFsSW1hZ2UpOworICAg
IEZJTEUqIGZpbGUgPSBmb3BlbihvdXRGaWxlLCAidyIpOworICAgIGlmICghZmlsZSkgeworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkltYWdlRGlmZjogdW5hYmxlIHRvIG9wZW4gbWV0YWRhdGEg
b3V0cHV0IGZpbGUuXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmcHJp
bnRmKGZpbGUsICJ7XCJEaWZmZXJlbmNlTWV0cmljXCI6JS42Zn1cbiIsIGRpZmZlcmVuY2VNZXRy
aWMpOworICAgIGZjbG9zZShmaWxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IGRpZmZJ
bWFnZXMoY29uc3QgY2hhciogZmlsZTEsIGNvbnN0IGNoYXIqIGZpbGUyLCBjb25zdCBjaGFyKiBv
dXRGaWxlLAorICAgICAgICAgICAgICAgYm9vbCB3cml0ZVBlcmNlbnRhZ2VzLCBJbWFnZUNvbXBh
cmlzb25Qcm9jIGNvbXBhcmF0b3IpCiB7CiAgICAgSW1hZ2UgYWN0dWFsSW1hZ2U7CiAgICAgSW1h
Z2UgYmFzZWxpbmVJbWFnZTsKQEAgLTM1NCw2ICs0MjksMjIgQEAgaW50IGRpZmZJbWFnZXMoY29u
c3QgY2hhciogZmlsZTEsIGNvbnN0IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRpZmZJbWFnZS53aWR0aCgpICogNCwgJnBuZ0RhdGEpOwogICAgIGlmICghd3JpdGVGaWxlKG91
dEZpbGUsICZwbmdEYXRhLmZyb250KCksIHBuZ0RhdGEuc2l6ZSgpKSkKICAgICAgICAgcmV0dXJu
IHN0YXR1c0Vycm9yOworCisgICAgZnByaW50ZihzdGRlcnIsICJJbWFnZURpZmY6OmRpZmZJbWFn
ZXNcbiIpOworICAgIGlmICh3cml0ZVBlcmNlbnRhZ2VzKSB7CisgICAgICAgIGNoYXIqIG1ldGFk
YXRhT3V0RmlsZW5hbWUgPSBuZXcgY2hhcltzdHJsZW4ob3V0RmlsZSkgKyAxMF07CisgICAgICAg
IGlmICghbWV0YWRhdGFPdXRGaWxlbmFtZSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJJbWFnZURpZmY6IGNvdWxkbid0IGFsbG9jYXRlIHN0cmluZyBidWZmZXIuXG4iKTsKKyAgICAg
ICAgICAgIHJldHVybiBzdGF0dXNFcnJvcjsKKyAgICAgICAgfQorICAgICAgICBpbnQgZmlsZVR5
cGVEb3RPZmZzZXQgPSBzdHJyY2hyKG91dEZpbGUsICcuJykgLSBvdXRGaWxlOworICAgICAgICBz
dHJuY3B5KG1ldGFkYXRhT3V0RmlsZW5hbWUsIG91dEZpbGUsIGZpbGVUeXBlRG90T2Zmc2V0KTsK
KyAgICAgICAgc3RyY3B5KG1ldGFkYXRhT3V0RmlsZW5hbWUgKyBmaWxlVHlwZURvdE9mZnNldCwg
Ii1tZXRhLmpzb24iKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbWFnZURpZmY6IG1ldGFk
YXRhIGluICVzXG4iLCBtZXRhZGF0YU91dEZpbGVuYW1lKTsKKyAgICAgICAgd3JpdGVNZXRhZGF0
YShtZXRhZGF0YU91dEZpbGVuYW1lLCBhY3R1YWxJbWFnZSwgYmFzZWxpbmVJbWFnZSwKKyAgICAg
ICAgICAgICAgICAgICAgICBjb21wYXJhdG9yKTsKKyAgICAgICAgZGVsZXRlIFtdIG1ldGFkYXRh
T3V0RmlsZW5hbWU7CisgICAgfQogICAgIHJldHVybiBzdGF0dXNEaWZmZXJlbnQ7CiB9CiAKQEAg
LTM2MiwxMSArNDUzLDE3IEBAIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10p
CiAgICAgVmVjdG9yPGNvbnN0IGNoYXIqPiB2YWx1ZXM7CiAgICAgYm9vbCBwb2xsU3RkaW4gPSBm
YWxzZTsKICAgICBib29sIGdlbmVyYXRlRGlmZiA9IGZhbHNlOworICAgIGJvb2wgd3JpdGVQZXJj
ZW50YWdlcyA9IGZhbHNlOworICAgIEltYWdlQ29tcGFyaXNvblByb2MgY29tcGFyYXRvciA9IHBl
cmNlbnRhZ2VEaWZmZXJlbnQ7CiAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcmdjOyArK2kpIHsK
ICAgICAgICAgaWYgKCFzdHJjbXAoYXJndltpXSwgb3B0aW9uUG9sbFN0ZGluKSkKICAgICAgICAg
ICAgIHBvbGxTdGRpbiA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwg
b3B0aW9uR2VuZXJhdGVEaWZmKSkKICAgICAgICAgICAgIGdlbmVyYXRlRGlmZiA9IHRydWU7Cisg
ICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgb3B0aW9uV3JpdGVQZXJjZW50YWdlcykp
CisgICAgICAgICAgICB3cml0ZVBlcmNlbnRhZ2VzID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAo
IXN0cmNtcChhcmd2W2ldLCBvcHRpb25XZWlnaHRlZCkpCisgICAgICAgICAgICBjb21wYXJhdG9y
ID0gd2VpZ2h0ZWRQZXJjZW50YWdlRGlmZmVyZW50OwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICB2YWx1ZXMuYXBwZW5kKGFyZ3ZbaV0pOwogICAgIH0KQEAgLTM4MiwxNCArNDc5LDE2IEBAIGlu
dCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgICAgIGlmIChoYXZlRmlyc3ROYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gY29tcGFyZUltYWdlcyB3cml0ZXMgcmVzdWx0cyB0byBzdGRvdXQgdW5sZXNzIGFuIGVy
cm9yIG9jY3VycmVkLgotICAgICAgICAgICAgICAgIGlmIChjb21wYXJlSW1hZ2VzKGZpcnN0TmFt
ZSwgc3RkaW5CdWZmZXIpID09IHN0YXR1c0Vycm9yKQorICAgICAgICAgICAgICAgIC8vIGNvbXBh
cmVJbWFnZXMgd3JpdGVzIHJlc3VsdHMgdG8gc3Rkb3V0IHVubGVzcyBhbiBlcnJvcgorICAgICAg
ICAgICAgICAgIC8vIG9jY3VycmVkLgorICAgICAgICAgICAgICAgIGlmIChjb21wYXJlSW1hZ2Vz
KGZpcnN0TmFtZSwgc3RkaW5CdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29tcGFyYXRvcikgPT0gc3RhdHVzRXJyb3IpCiAgICAgICAgICAgICAgICAgICAgIHByaW50
ZigiZXJyb3JcbiIpOwogICAgICAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwogICAgICAgICAg
ICAgICAgIGhhdmVGaXJzdE5hbWUgPSBmYWxzZTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgLy8gU2F2ZSB0aGUgZmlyc3QgZmlsZW5hbWUgaW4gYW5vdGhlciBidWZmZXIg
YW5kIHdhaXQgZm9yIHRoZSBzZWNvbmQKLSAgICAgICAgICAgICAgICAvLyBmaWxlbmFtZSB0byBh
cnJpdmUgdmlhIHN0ZGluLgorICAgICAgICAgICAgICAgIC8vIFNhdmUgdGhlIGZpcnN0IGZpbGVu
YW1lIGluIGFub3RoZXIgYnVmZmVyIGFuZCB3YWl0IGZvciB0aGUKKyAgICAgICAgICAgICAgICAv
LyBzZWNvbmQgZmlsZW5hbWUgdG8gYXJyaXZlIHZpYSBzdGRpbi4KICAgICAgICAgICAgICAgICBz
dHJjcHkoZmlyc3ROYW1lLCBzdGRpbkJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgaGF2ZUZpcnN0
TmFtZSA9IHRydWU7CiAgICAgICAgICAgICB9CkBAIC0zOTksOSArNDk4LDEwIEBAIGludCBtYWlu
KGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCiAKICAgICBpZiAoZ2VuZXJhdGVEaWZmKSB7
CiAgICAgICAgIGlmICh2YWx1ZXMuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICByZXR1cm4gZGlm
ZkltYWdlcyh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdKTsKKyAgICAgICAgICAgIHJl
dHVybiBkaWZmSW1hZ2VzKHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVBlcmNlbnRhZ2VzLCBjb21wYXJhdG9yKTsKICAg
ICB9IGVsc2UgaWYgKHZhbHVlcy5zaXplKCkgPT0gMikKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVJ
bWFnZXMoYXJndlsxXSwgYXJndlsyXSk7CisgICAgICAgIHJldHVybiBjb21wYXJlSW1hZ2VzKGFy
Z3ZbMV0sIGFyZ3ZbMl0sIGNvbXBhcmF0b3IpOwogCiAgICAgcHJpbnRIZWxwKCk7CiAgICAgcmV0
dXJuIHN0YXR1c0Vycm9yOwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CShyZXZpc2lvbiA4NjE3NSkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTE1Miw3ICsxNTIsOCBAQCBjbGFzcyBDaHJvbWl1bVBvcnQoYmFzZS5Qb3J0KToK
ICAgICAgICAgZXhlY3V0YWJsZSA9IHNlbGYuX3BhdGhfdG9faW1hZ2VfZGlmZigpCiAgICAgICAg
IGlmIGRpZmZfZmlsZW5hbWU6CiAgICAgICAgICAgICBjbWQgPSBbZXhlY3V0YWJsZSwgJy0tZGlm
ZicsIGV4cGVjdGVkX2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgIGFjdHVhbF9maWxlbmFt
ZSwgZGlmZl9maWxlbmFtZV0KKyAgICAgICAgICAgICAgICAgICBhY3R1YWxfZmlsZW5hbWUsIGRp
ZmZfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgJy0td3JpdGVQZXJjZW50JywgJy0td2Vp
Z2h0ZWQnXQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY21kID0gW2V4ZWN1dGFibGUsIGV4
cGVjdGVkX2ZpbGVuYW1lLCBhY3R1YWxfZmlsZW5hbWVdCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93760</attachid>
            <date>2011-05-17 06:37:11 -0700</date>
            <delta_ts>2011-05-25 12:04:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60569-20110517093709.patch</filename>
            <type>text/plain</type>
            <size>10715</size>
            <attacher name="Tom Hudson">tomhudson</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg2NjA0KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjUgQEAKKzIwMTEtMDUtMTYgIFRvbSBIdWRzb24gIDx0b21odWRzb25AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZmxh
Z3MgdG8gQ2hyb21pdW0gSW1hZ2VEaWZmIHRvIHdyaXRlIGltYWdlIGNvbXBhcmlzb24gbWV0cmlj
cyBvbgorICAgICAgICBzdGRvdXQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02MDU2OQorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
SW1hZ2VEaWZmLmNwcDoKKyAgICAgICAgKEltYWdlOjpjcmVhdGVGcm9tU3RkaW4pOiBGaXggc3Bl
bGxpbmcuCisgICAgICAgIChtYXhPZjMpOiBOZXcgZnVuY3Rpb24gdG8gZG8gMy13YXkgbWF4aW11
bS4KKyAgICAgICAgKGdldFJlZENvbXBvbmVudCk6IEV4dHJhY3QgcmVkIGNvbXBvbmVudCBmcm9t
IEFCR1IgcGFja2VkIGVuY29kaW5nLgorICAgICAgICAoZ2V0R3JlZW5Db21wb25lbnQpOiBFeHRy
YWN0IGdyZWVuIGNvbXBvbmVudCBmcm9tIEFCR1IgcGFja2VkIGVuY29kaW5nLgorICAgICAgICAo
Z2V0Qmx1ZUNvbXBvbmVudCk6IEV4dHJhY3QgYmx1ZSBjb21wb25lbnQgZnJvbSBBQkdSIHBhY2tl
ZCBlbmNvZGluZy4KKyAgICAgICAgKHdlaWdodGVkUGVyY2VudGFnZURpZmZlcmVudCk6IERldGVy
bWluZSAlIG9mIHBpeGVscyBkaWZmZXJlbnQgaW4gdHdvCisgICAgICAgIGltYWdlcyBtdWx0aXBs
aWVkIGJ5IGludGVuc2l0eSBkaWZmZXJlbmNlIG9mIGVhY2ggcGl4ZWwuCisgICAgICAgIChwcmlu
dEhlbHApOiBEb2N1bWVudCBuZXcgYXJndW1lbnRzLgorICAgICAgICAoY29tcGFyZUltYWdlcyk6
IFBhcmFtZXRlcml6ZS4KKyAgICAgICAgKHVudGVzdGVkQ29tcGFyZUltYWdlcyk6IFBhcmFtZXRl
cml6ZS4KKyAgICAgICAgKGRpZmZJbWFnZXMpOiBQYXJhbWV0ZXJpemU7IHdyaXRlIHJlc3VsdHMg
b24gc3Rkb3V0IGlmIHJlcXVlc3RlZC4KKyAgICAgICAgKG1haW4pOiBQYXJzZSBuZXcgYXJndW1l
bnRzLgorCiAyMDExLTA1LTE2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgRml4IHR5cG8gcG9pbnRlZCBvdXQgYnkgRGF2ZSBMZXZpbi4KSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL0ltYWdlRGlmZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vSW1hZ2VEaWZmLmNwcAkocmV2aXNpb24gODY0MjgpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9JbWFnZURpZmYuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw2ICs1NiwxNCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogc3RhdGljIGNvbnN0IGNo
YXIgb3B0aW9uUG9sbFN0ZGluW10gPSAiLS11c2Utc3RkaW4iOwogc3RhdGljIGNvbnN0IGNoYXIg
b3B0aW9uR2VuZXJhdGVEaWZmW10gPSAiLS1kaWZmIjsKIAorLy8gSWYgLS1kaWZmIGlzIHBhc3Nl
ZCwgY2F1c2VzIHRoZSBhcHAgdG8gb3V0cHV0IHRoZSBpbWFnZSBkaWZmZXJlbmNlCisvLyBtZXRy
aWMgKHBlcmNlbnRhZ2VEaWZmZXJlbnQoKSkgb24gc3Rkb3V0Lgorc3RhdGljIGNvbnN0IGNoYXIg
b3B0aW9uV3JpdGVbXSA9ICItLXdyaXRlLWltYWdlLWRpZmYtbWV0cmljcyI7CisKKy8vIFVzZSB3
ZWlnaHRlZFBlcmNlbnRhZ2VEaWZmZXJlbnQoKSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGltYWdl
CisvLyBjb21wYXJhdG9yIHByb2MuCitzdGF0aWMgY29uc3QgY2hhciBvcHRpb25XZWlnaHRlZElu
dGVuc2l0eVtdID0gIi0td2VpZ2h0ZWQtaW50ZW5zaXR5IjsKKwogLy8gUmV0dXJuIGNvZGVzIHVz
ZWQgYnkgdGhpcyB1dGlsaXR5Lgogc3RhdGljIGNvbnN0IGludCBzdGF0dXNTYW1lID0gMDsKIHN0
YXRpYyBjb25zdCBpbnQgc3RhdHVzRGlmZmVyZW50ID0gMTsKQEAgLTgzLDcgKzkxLDcgQEAgcHVi
bGljOgogCiAgICAgLy8gQ3JlYXRlcyB0aGUgaW1hZ2UgZnJvbSBzdGRpbiB3aXRoIHRoZSBnaXZl
biBkYXRhIGxlbmd0aC4gT24gc3VjY2VzcywgaXQKICAgICAvLyB3aWxsIHJldHVybiB0cnVlLiBP
biBmYWlsdXJlLCBubyBvdGhlciBtZXRob2RzIHNob3VsZCBiZSBhY2Nlc3NlZC4KLSAgICBib29s
IGNyYWV0ZUZyb21TdGRpbihzaXplX3QgYnl0ZUxlbmd0aCkKKyAgICBib29sIGNyZWF0ZUZyb21T
dGRpbihzaXplX3QgYnl0ZUxlbmd0aCkKICAgICB7CiAgICAgICAgIGlmICghYnl0ZUxlbmd0aCkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE1Miw2ICsxNjAsOCBAQCBwcml2YXRlOgog
ICAgIHZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBtX2RhdGE7CiB9OwogCit0eXBlZGVmIGZsb2F0ICgq
SW1hZ2VDb21wYXJpc29uUHJvYykgKGNvbnN0IEltYWdlJiwgY29uc3QgSW1hZ2UmKTsKKwogZmxv
YXQgcGVyY2VudGFnZURpZmZlcmVudChjb25zdCBJbWFnZSYgYmFzZWxpbmUsIGNvbnN0IEltYWdl
JiBhY3R1YWwpCiB7CiAgICAgaW50IHcgPSBtaW4oYmFzZWxpbmUud2lkdGgoKSwgYWN0dWFsLndp
ZHRoKCkpOwpAQCAtMTg0LDYgKzE5NCw3NCBAQCBmbG9hdCBwZXJjZW50YWdlRGlmZmVyZW50KGNv
bnN0IEltYWdlJiBiCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihwaXhlbHNEaWZmZXJl
bnQpIC8gdG90YWxQaXhlbHMgKiAxMDA7CiB9CiAKK2lubGluZSB1aW50MzJfdCBtYXhPZjModWlu
dDMyX3QgYSwgdWludDMyX3QgYiwgdWludDMyX3QgYykKK3sKKyAgICBpZiAoYSA8IGIpCisgICAg
ICAgIHJldHVybiBzdGQ6Om1heChiLCBjKTsKKyAgICByZXR1cm4gc3RkOjptYXgoYSwgYyk7Cit9
CisKK2lubGluZSB1aW50MzJfdCBnZXRSZWRDb21wb25lbnQodWludDMyX3QgY29sb3IpCit7Cisg
ICAgcmV0dXJuIChjb2xvciA8PCAyNCkgPj4gMjQ7Cit9CisKK2lubGluZSB1aW50MzJfdCBnZXRH
cmVlbkNvbXBvbmVudCh1aW50MzJfdCBjb2xvcikKK3sKKyAgICByZXR1cm4gKGNvbG9yIDw8IDE2
KSA+PiAyNDsKK30KKworaW5saW5lIHVpbnQzMl90IGdldEJsdWVDb21wb25lbnQodWludDMyX3Qg
Y29sb3IpCit7CisgICAgcmV0dXJuIChjb2xvciA8PCA4KSA+PiAyNDsKK30KKworLy8vIFJhbmsg
c21hbGwtcGl4ZWwtY291bnQgaGlnaC1pbnRlbnNpdHkgY2hhbmdlcyBhcyBtb3JlIGltcG9ydGFu
dCB0aGFuCisvLy8gbGFyZ2UtcGl4ZWwtY291bnQgbG93LWludGVuc2l0eSBjaGFuZ2VzLgorZmxv
YXQgd2VpZ2h0ZWRQZXJjZW50YWdlRGlmZmVyZW50KGNvbnN0IEltYWdlJiBiYXNlbGluZSwgY29u
c3QgSW1hZ2UmIGFjdHVhbCkKK3sKKyAgICBpbnQgdyA9IG1pbihiYXNlbGluZS53aWR0aCgpLCBh
Y3R1YWwud2lkdGgoKSk7CisgICAgaW50IGggPSBtaW4oYmFzZWxpbmUuaGVpZ2h0KCksIGFjdHVh
bC5oZWlnaHQoKSk7CisKKyAgICBmbG9hdCB3ZWlnaHRlZFBpeGVsc0RpZmZlcmVudCA9IDA7Cisg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3OyB4KyspIHsKKyAgICAgICAgICAgIHVpbnQzMl90IGFjdHVhbENvbG9yID0gYWN0dWFs
LnBpeGVsQXQoeCwgeSk7CisgICAgICAgICAgICB1aW50MzJfdCBiYXNlbGluZUNvbG9yID0gYmFz
ZWxpbmUucGl4ZWxBdCh4LCB5KTsKKyAgICAgICAgICAgIGlmIChiYXNlbGluZUNvbG9yICE9IGFj
dHVhbENvbG9yKSB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgYWN0dWFsUiA9IGdldFJlZENv
bXBvbmVudChhY3R1YWxDb2xvcik7CisgICAgICAgICAgICAgICAgdWludDMyX3QgYWN0dWFsRyA9
IGdldEdyZWVuQ29tcG9uZW50KGFjdHVhbENvbG9yKTsKKyAgICAgICAgICAgICAgICB1aW50MzJf
dCBhY3R1YWxCID0gZ2V0Qmx1ZUNvbXBvbmVudChhY3R1YWxDb2xvcik7CisgICAgICAgICAgICAg
ICAgdWludDMyX3QgYmFzZWxpbmVSID0gZ2V0UmVkQ29tcG9uZW50KGJhc2VsaW5lQ29sb3IpOwor
ICAgICAgICAgICAgICAgIHVpbnQzMl90IGJhc2VsaW5lRyA9IGdldEdyZWVuQ29tcG9uZW50KGJh
c2VsaW5lQ29sb3IpOworICAgICAgICAgICAgICAgIHVpbnQzMl90IGJhc2VsaW5lQiA9IGdldEJs
dWVDb21wb25lbnQoYmFzZWxpbmVDb2xvcik7CisgICAgICAgICAgICAgICAgdWludDMyX3QgZGVs
dGFSID0gc3RkOjptYXgoYWN0dWFsUiwgYmFzZWxpbmVSKQorICAgICAgICAgICAgICAgICAgICAt
IHN0ZDo6bWluKGFjdHVhbFIsIGJhc2VsaW5lUik7CisgICAgICAgICAgICAgICAgdWludDMyX3Qg
ZGVsdGFHID0gc3RkOjptYXgoYWN0dWFsRywgYmFzZWxpbmVHKQorICAgICAgICAgICAgICAgICAg
ICAtIHN0ZDo6bWluKGFjdHVhbEcsIGJhc2VsaW5lRyk7CisgICAgICAgICAgICAgICAgdWludDMy
X3QgZGVsdGFCID0gc3RkOjptYXgoYWN0dWFsQiwgYmFzZWxpbmVCKQorICAgICAgICAgICAgICAg
ICAgICAtIHN0ZDo6bWluKGFjdHVhbEIsIGJhc2VsaW5lQik7CisgICAgICAgICAgICAgICAgd2Vp
Z2h0ZWRQaXhlbHNEaWZmZXJlbnQgKz0KKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG1heE9mMyhkZWx0YVIsIGRlbHRhRywgZGVsdGFCKSkgLyAyNTU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgbWF4V2lkdGggPSBtYXgoYmFzZWxpbmUu
d2lkdGgoKSwgYWN0dWFsLndpZHRoKCkpOworICAgIGludCBtYXhIZWlnaHQgPSBtYXgoYmFzZWxp
bmUuaGVpZ2h0KCksIGFjdHVhbC5oZWlnaHQoKSk7CisKKyAgICB3ZWlnaHRlZFBpeGVsc0RpZmZl
cmVudCArPSAobWF4V2lkdGggLSB3KSAqIGg7CisKKyAgICB3ZWlnaHRlZFBpeGVsc0RpZmZlcmVu
dCArPSAobWF4SGVpZ2h0IC0gaCkgKiBtYXhXaWR0aDsKKworICAgIGZsb2F0IHRvdGFsUGl4ZWxz
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFjdHVhbC53aWR0aCgpKQorICAgICAgICAqIHN0YXRpY19j
YXN0PGZsb2F0PihhY3R1YWwuaGVpZ2h0KCkpOworICAgIGlmICghdG90YWxQaXhlbHMpCisgICAg
ICAgIHJldHVybiAxMDAuMGY7CisgICAgcmV0dXJuIHdlaWdodGVkUGl4ZWxzRGlmZmVyZW50IC8g
dG90YWxQaXhlbHMgKiAxMDA7Cit9CisKKwogdm9pZCBwcmludEhlbHAoKQogewogICAgIGZwcmlu
dGYoc3RkZXJyLApAQCAtMTk1LDcgKzI3MywxMCBAQCB2b2lkIHByaW50SGVscCgpCiAgICAgICAg
ICAgICAiICAgIGFuZCBzZW5kaW5nIDAgdG8gc3Rkb3V0IHdoZW4gdGhleSBhcmUgdGhlIHNhbWVc
biIKICAgICAgICAgICAgICIgIEltYWdlRGlmZiAtLWRpZmYgPGNvbXBhcmUgZmlsZT4gPHJlZmVy
ZW5jZSBmaWxlPiA8b3V0cHV0IGZpbGU+XG4iCiAgICAgICAgICAgICAiICAgIENvbXBhcmVzIHR3
byBmaWxlcyBvbiBkaXNrLCBvdXRwdXRzIGFuIGltYWdlIHRoYXQgdmlzdWFsaXplcyB0aGUiCi0g
ICAgICAgICAgICAiICAgIGRpZmZlcmVuY2UgdG8gPG91dHB1dCBmaWxlPlxuIik7CisgICAgICAg
ICAgICAiICAgIGRpZmZlcmVuY2UgdG8gPG91dHB1dCBmaWxlPlxuIgorICAgICAgICAgICAgIiAg
ICAtLXdyaXRlLWltYWdlLWRpZmYtbWV0cmljcyBwcmludHMgYSBkaWZmZXJlbmNlIG1ldHJpYyB0
byBzdGRvdXRcbiIKKyAgICAgICAgICAgICIgICAgLS13ZWlnaHRlZC1pbnRlbnNpdHkgd2VpZ2h0
cyB0aGUgZGlmZmVyZW5jZSBtZXRyaWMgYnkgaW50ZW5zaXR5XG4iCisgICAgICAgICAgICAiICAg
ICAgYXQgZWFjaCBwaXhlbFxuIik7CiAgICAgLyogRm9yIHVuZmluaXNoZWQgd2Via2l0LWxpa2Ut
bW9kZSAoc2VlIGJlbG93KQogICAgICAgICJcbiIKICAgICAgICAiICBJbWFnZURpZmYgLXNcbiIK
QEAgLTIwNiw3ICsyODcsOCBAQCB2b2lkIHByaW50SGVscCgpCiAgICAgKi8KIH0KIAotaW50IGNv
bXBhcmVJbWFnZXMoY29uc3QgY2hhciogZmlsZTEsIGNvbnN0IGNoYXIqIGZpbGUyKQoraW50IGNv
bXBhcmVJbWFnZXMoY29uc3QgY2hhciogZmlsZTEsIGNvbnN0IGNoYXIqIGZpbGUyLAorICAgICAg
ICAgICAgICAgICAgSW1hZ2VDb21wYXJpc29uUHJvYyBjb21wYXJhdG9yKQogewogICAgIEltYWdl
IGFjdHVhbEltYWdlOwogICAgIEltYWdlIGJhc2VsaW5lSW1hZ2U7CkBAIC0yMjAsNyArMzAyLDcg
QEAgaW50IGNvbXBhcmVJbWFnZXMoY29uc3QgY2hhciogZmlsZTEsIGNvbgogICAgICAgICByZXR1
cm4gc3RhdHVzRXJyb3I7CiAgICAgfQogCi0gICAgZmxvYXQgcGVyY2VudCA9IHBlcmNlbnRhZ2VE
aWZmZXJlbnQoYWN0dWFsSW1hZ2UsIGJhc2VsaW5lSW1hZ2UpOworICAgIGZsb2F0IHBlcmNlbnQg
PSAoKmNvbXBhcmF0b3IpKGFjdHVhbEltYWdlLCBiYXNlbGluZUltYWdlKTsKICAgICBpZiAocGVy
Y2VudCA+IDAuMCkgewogICAgICAgICAvLyBmYWlsdXJlOiBUaGUgV2ViS2l0IHZlcnNpb24gYWxz
byB3cml0ZXMgdGhlIGRpZmZlcmVuY2UgaW1hZ2UgdG8KICAgICAgICAgLy8gc3Rkb3V0LCB3aGlj
aCBzZWVtcyBleGNlc3NpdmUgZm9yIG91ciBuZWVkcy4KQEAgLTIzNiw3ICszMTgsNyBAQCBpbnQg
Y29tcGFyZUltYWdlcyhjb25zdCBjaGFyKiBmaWxlMSwgY29uCiAKIC8vIFVudGVzdGVkIG1vZGUg
dGhhdCBhY3RzIGxpa2UgV2ViS2l0J3MgaW1hZ2UgY29tcGFyYXRvci4gSSB3cm90ZSB0aGlzIGJ1
dAogLy8gZGVjaWRlZCBpdCdzIHRvbyBjb21wbGljYXRlZC4gV2UgbWF5IHVzZSBpdCBpbiB0aGUg
ZnV0dXJlIGlmIGl0IGxvb2tzIHVzZWZ1bC4KLWludCB1bnRlc3RlZENvbXBhcmVJbWFnZXMoKQor
aW50IHVudGVzdGVkQ29tcGFyZUltYWdlcyhJbWFnZUNvbXBhcmlzb25Qcm9jIGNvbXBhcmF0b3Ip
CiB7CiAgICAgSW1hZ2UgYWN0dWFsSW1hZ2U7CiAgICAgSW1hZ2UgYmFzZWxpbmVJbWFnZTsKQEAg
LTI1NCwxMiArMzM2LDEyIEBAIGludCB1bnRlc3RlZENvbXBhcmVJbWFnZXMoKQogCiAgICAgICAg
ICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICAgICAgIGlmIChpbWFnZVNpemUgPiAw
ICYmICFhY3R1YWxJbWFnZS5oYXNJbWFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhY3R1
YWxJbWFnZS5jcmFldGVGcm9tU3RkaW4oaW1hZ2VTaXplKSkgeworICAgICAgICAgICAgICAgIGlm
ICghYWN0dWFsSW1hZ2UuY3JlYXRlRnJvbVN0ZGluKGltYWdlU2l6ZSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgZnB1dHMoIkVycm9yLCBpbnB1dCBpbWFnZSBjYW4ndCBiZSBkZWNvZGVkLlxuIiwg
c3RkZXJyKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfSBlbHNlIGlmIChpbWFnZVNpemUgPiAwICYmICFiYXNlbGluZUltYWdl
Lmhhc0ltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWJhc2VsaW5lSW1hZ2UuY3JhZXRl
RnJvbVN0ZGluKGltYWdlU2l6ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWJhc2VsaW5lSW1h
Z2UuY3JlYXRlRnJvbVN0ZGluKGltYWdlU2l6ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgZnB1
dHMoIkVycm9yLCBiYXNlbGluZSBpbWFnZSBjYW4ndCBiZSBkZWNvZGVkLlxuIiwgc3RkZXJyKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjcw
LDcgKzM1Miw3IEBAIGludCB1bnRlc3RlZENvbXBhcmVJbWFnZXMoKQogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKGFjdHVhbEltYWdlLmhhc0ltYWdlKCkgJiYgYmFzZWxpbmVJbWFnZS5oYXNJbWFn
ZSgpKSB7Ci0gICAgICAgICAgICBmbG9hdCBwZXJjZW50ID0gcGVyY2VudGFnZURpZmZlcmVudChh
Y3R1YWxJbWFnZSwgYmFzZWxpbmVJbWFnZSk7CisgICAgICAgICAgICBmbG9hdCBwZXJjZW50ID0g
KCpjb21wYXJhdG9yKShhY3R1YWxJbWFnZSwgYmFzZWxpbmVJbWFnZSk7CiAgICAgICAgICAgICBp
ZiAocGVyY2VudCA+IDAuMCkgewogICAgICAgICAgICAgICAgIC8vIGZhaWx1cmU6IFRoZSBXZWJL
aXQgdmVyc2lvbiBhbHNvIHdyaXRlcyB0aGUgZGlmZmVyZW5jZSBpbWFnZSB0bwogICAgICAgICAg
ICAgICAgIC8vIHN0ZG91dCwgd2hpY2ggc2VlbXMgZXhjZXNzaXZlIGZvciBvdXIgbmVlZHMuCkBA
IC0zMzAsNyArNDEyLDggQEAgc3RhdGljIGJvb2wgd3JpdGVGaWxlKGNvbnN0IGNoYXIqIG91dEZp
bAogICAgIHJldHVybiB0cnVlOwogfQogCi1pbnQgZGlmZkltYWdlcyhjb25zdCBjaGFyKiBmaWxl
MSwgY29uc3QgY2hhciogZmlsZTIsIGNvbnN0IGNoYXIqIG91dEZpbGUpCitpbnQgZGlmZkltYWdl
cyhjb25zdCBjaGFyKiBmaWxlMSwgY29uc3QgY2hhciogZmlsZTIsIGNvbnN0IGNoYXIqIG91dEZp
bGUsCisgICAgICAgICAgICAgICBib29sIHNob3VsZFdyaXRlUGVyY2VudGFnZXMsIEltYWdlQ29t
cGFyaXNvblByb2MgY29tcGFyYXRvcikKIHsKICAgICBJbWFnZSBhY3R1YWxJbWFnZTsKICAgICBJ
bWFnZSBiYXNlbGluZUltYWdlOwpAQCAtMzU0LDYgKzQzNywxMiBAQCBpbnQgZGlmZkltYWdlcyhj
b25zdCBjaGFyKiBmaWxlMSwgY29uc3QgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGlmZkltYWdlLndpZHRoKCkgKiA0LCAmcG5nRGF0YSk7CiAgICAgaWYgKCF3cml0ZUZpbGUo
b3V0RmlsZSwgJnBuZ0RhdGEuZnJvbnQoKSwgcG5nRGF0YS5zaXplKCkpKQogICAgICAgICByZXR1
cm4gc3RhdHVzRXJyb3I7CisKKyAgICBpZiAoc2hvdWxkV3JpdGVQZXJjZW50YWdlcykgeworICAg
ICAgICBmbG9hdCBwZXJjZW50ID0gKCpjb21wYXJhdG9yKShhY3R1YWxJbWFnZSwgYmFzZWxpbmVJ
bWFnZSk7CisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiJS4zZlxuIiwgcGVyY2VudCk7CisgICAg
fQorCiAgICAgcmV0dXJuIHN0YXR1c0RpZmZlcmVudDsKIH0KIApAQCAtMzYyLDExICs0NTEsMTcg
QEAgaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKICAgICBWZWN0b3I8Y29u
c3QgY2hhcio+IHZhbHVlczsKICAgICBib29sIHBvbGxTdGRpbiA9IGZhbHNlOwogICAgIGJvb2wg
Z2VuZXJhdGVEaWZmID0gZmFsc2U7CisgICAgYm9vbCBzaG91bGRXcml0ZVBlcmNlbnRhZ2VzID0g
ZmFsc2U7CisgICAgSW1hZ2VDb21wYXJpc29uUHJvYyBjb21wYXJhdG9yID0gcGVyY2VudGFnZURp
ZmZlcmVudDsKICAgICBmb3IgKGludCBpID0gMTsgaSA8IGFyZ2M7ICsraSkgewogICAgICAgICBp
ZiAoIXN0cmNtcChhcmd2W2ldLCBvcHRpb25Qb2xsU3RkaW4pKQogICAgICAgICAgICAgcG9sbFN0
ZGluID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCBvcHRpb25HZW5l
cmF0ZURpZmYpKQogICAgICAgICAgICAgZ2VuZXJhdGVEaWZmID0gdHJ1ZTsKKyAgICAgICAgZWxz
ZSBpZiAoIXN0cmNtcChhcmd2W2ldLCBvcHRpb25Xcml0ZSkpCisgICAgICAgICAgICBzaG91bGRX
cml0ZVBlcmNlbnRhZ2VzID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ld
LCBvcHRpb25XZWlnaHRlZEludGVuc2l0eSkpCisgICAgICAgICAgICBjb21wYXJhdG9yID0gd2Vp
Z2h0ZWRQZXJjZW50YWdlRGlmZmVyZW50OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB2YWx1
ZXMuYXBwZW5kKGFyZ3ZbaV0pOwogICAgIH0KQEAgLTM4Myw3ICs0NzgsOCBAQCBpbnQgbWFpbihp
bnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQogCiAgICAgICAgICAgICBpZiAoaGF2ZUZpcnN0
TmFtZSkgewogICAgICAgICAgICAgICAgIC8vIGNvbXBhcmVJbWFnZXMgd3JpdGVzIHJlc3VsdHMg
dG8gc3Rkb3V0IHVubGVzcyBhbiBlcnJvciBvY2N1cnJlZC4KLSAgICAgICAgICAgICAgICBpZiAo
Y29tcGFyZUltYWdlcyhmaXJzdE5hbWUsIHN0ZGluQnVmZmVyKSA9PSBzdGF0dXNFcnJvcikKKyAg
ICAgICAgICAgICAgICBpZiAoY29tcGFyZUltYWdlcyhmaXJzdE5hbWUsIHN0ZGluQnVmZmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmF0b3IpID09IHN0YXR1c0Vy
cm9yKQogICAgICAgICAgICAgICAgICAgICBwcmludGYoImVycm9yXG4iKTsKICAgICAgICAgICAg
ICAgICBmZmx1c2goc3Rkb3V0KTsKICAgICAgICAgICAgICAgICBoYXZlRmlyc3ROYW1lID0gZmFs
c2U7CkBAIC0zOTksOSArNDk1LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiBh
cmd2W10pCiAKICAgICBpZiAoZ2VuZXJhdGVEaWZmKSB7CiAgICAgICAgIGlmICh2YWx1ZXMuc2l6
ZSgpID09IDMpCi0gICAgICAgICAgICByZXR1cm4gZGlmZkltYWdlcyh2YWx1ZXNbMF0sIHZhbHVl
c1sxXSwgdmFsdWVzWzJdKTsKKyAgICAgICAgICAgIHJldHVybiBkaWZmSW1hZ2VzKHZhbHVlc1sw
XSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aG91bGRXcml0ZVBlcmNlbnRhZ2VzLCBjb21wYXJhdG9yKTsKICAgICB9IGVsc2UgaWYgKHZhbHVl
cy5zaXplKCkgPT0gMikKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVJbWFnZXMoYXJndlsxXSwgYXJn
dlsyXSk7CisgICAgICAgIHJldHVybiBjb21wYXJlSW1hZ2VzKGFyZ3ZbMV0sIGFyZ3ZbMl0sIGNv
bXBhcmF0b3IpOwogCiAgICAgcHJpbnRIZWxwKCk7CiAgICAgcmV0dXJuIHN0YXR1c0Vycm9yOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94830</attachid>
            <date>2011-05-25 12:04:58 -0700</date>
            <delta_ts>2011-05-25 16:55:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60569-20110525150457.patch</filename>
            <type>text/plain</type>
            <size>11738</size>
            <attacher name="Tom Hudson">tomhudson</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg3MzA2KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjUgQEAKKzIwMTEtMDUtMjUgIFRvbSBIdWRzb24gIDx0b21odWRzb25AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nICh0b255QGNocm9taXVtLm9yZykuCisK
KyAgICAgICAgQWRkIGZsYWdzIHRvIENocm9taXVtIEltYWdlRGlmZiB0byB3cml0ZSBpbWFnZSBj
b21wYXJpc29uIG1ldHJpY3Mgb24KKyAgICAgICAgc3Rkb3V0LgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA1NjkKKworICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL0ltYWdlRGlmZi5jcHA6CisgICAgICAgIChJbWFnZTo6Y3JlYXRlRnJv
bVN0ZGluKTogRml4IHNwZWxsaW5nLgorICAgICAgICAobWF4T2YzKTogTmV3IGZ1bmN0aW9uIHRv
IGRvIDMtd2F5IG1heGltdW0uCisgICAgICAgIChnZXRSZWRDb21wb25lbnQpOiBFeHRyYWN0IHJl
ZCBjb21wb25lbnQgZnJvbSBBQkdSIHBhY2tlZCBlbmNvZGluZy4KKyAgICAgICAgKGdldEdyZWVu
Q29tcG9uZW50KTogRXh0cmFjdCBncmVlbiBjb21wb25lbnQgZnJvbSBBQkdSIHBhY2tlZCBlbmNv
ZGluZy4KKyAgICAgICAgKGdldEJsdWVDb21wb25lbnQpOiBFeHRyYWN0IGJsdWUgY29tcG9uZW50
IGZyb20gQUJHUiBwYWNrZWQgZW5jb2RpbmcuCisgICAgICAgICh3ZWlnaHRlZFBlcmNlbnRhZ2VE
aWZmZXJlbnQpOiBEZXRlcm1pbmUgJSBvZiBwaXhlbHMgZGlmZmVyZW50IGluIHR3bworICAgICAg
ICBpbWFnZXMgbXVsdGlwbGllZCBieSBpbnRlbnNpdHkgZGlmZmVyZW5jZSBvZiBlYWNoIHBpeGVs
LgorICAgICAgICAocHJpbnRIZWxwKTogRG9jdW1lbnQgbmV3IGFyZ3VtZW50cy4KKyAgICAgICAg
KGNvbXBhcmVJbWFnZXMpOiBQYXJhbWV0ZXJpemUuCisgICAgICAgICh1bnRlc3RlZENvbXBhcmVJ
bWFnZXMpOiBQYXJhbWV0ZXJpemUuCisgICAgICAgIChkaWZmSW1hZ2VzKTogUGFyYW1ldGVyaXpl
OyB3cml0ZSByZXN1bHRzIG9uIHN0ZG91dCBpZiByZXF1ZXN0ZWQuCisgICAgICAgIChtYWluKTog
UGFyc2UgbmV3IGFyZ3VtZW50cy4KKwogMjAxMS0wNS0yNSAgQWRhbSBSb2JlbiAgPGFyb2JlbkBh
cHBsZS5jb20+CiAKICAgICAgICAgSWRlbnRpZnksIHJhdGhlciB0aGFuIHNraXAsIGJ1aWxkcyB3
aGVyZSBydW4td2Via2l0LXRlc3RzIGV4aXRlZCBlYXJseSBkdWUgdG8gdG9vIG1hbnkgZmFpbHVy
ZXMKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0ltYWdlRGlmZi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vSW1hZ2VEaWZmLmNwcAko
cmV2aXNpb24gODczMDYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9JbWFnZURp
ZmYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxNCBAQCB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uUG9sbFN0ZGluW10gPSAiLS11c2Utc3RkaW4i
Owogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uR2VuZXJhdGVEaWZmW10gPSAiLS1kaWZmIjsKIAor
Ly8gSWYgLS1kaWZmIGlzIHBhc3NlZCwgY2F1c2VzIHRoZSBhcHAgdG8gb3V0cHV0IHRoZSBpbWFn
ZSBkaWZmZXJlbmNlCisvLyBtZXRyaWMgKHBlcmNlbnRhZ2VEaWZmZXJlbnQoKSkgb24gc3Rkb3V0
Lgorc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uV3JpdGVbXSA9ICItLXdyaXRlLWltYWdlLWRpZmYt
bWV0cmljcyI7CisKKy8vIFVzZSB3ZWlnaHRlZFBlcmNlbnRhZ2VEaWZmZXJlbnQoKSBpbnN0ZWFk
IG9mIHRoZSBkZWZhdWx0IGltYWdlCisvLyBjb21wYXJhdG9yIHByb2MuCitzdGF0aWMgY29uc3Qg
Y2hhciBvcHRpb25XZWlnaHRlZEludGVuc2l0eVtdID0gIi0td2VpZ2h0ZWQtaW50ZW5zaXR5IjsK
KwogLy8gUmV0dXJuIGNvZGVzIHVzZWQgYnkgdGhpcyB1dGlsaXR5Lgogc3RhdGljIGNvbnN0IGlu
dCBzdGF0dXNTYW1lID0gMDsKIHN0YXRpYyBjb25zdCBpbnQgc3RhdHVzRGlmZmVyZW50ID0gMTsK
QEAgLTgzLDcgKzkxLDcgQEAgcHVibGljOgogCiAgICAgLy8gQ3JlYXRlcyB0aGUgaW1hZ2UgZnJv
bSBzdGRpbiB3aXRoIHRoZSBnaXZlbiBkYXRhIGxlbmd0aC4gT24gc3VjY2VzcywgaXQKICAgICAv
LyB3aWxsIHJldHVybiB0cnVlLiBPbiBmYWlsdXJlLCBubyBvdGhlciBtZXRob2RzIHNob3VsZCBi
ZSBhY2Nlc3NlZC4KLSAgICBib29sIGNyYWV0ZUZyb21TdGRpbihzaXplX3QgYnl0ZUxlbmd0aCkK
KyAgICBib29sIGNyZWF0ZUZyb21TdGRpbihzaXplX3QgYnl0ZUxlbmd0aCkKICAgICB7CiAgICAg
ICAgIGlmICghYnl0ZUxlbmd0aCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE1Miw2
ICsxNjAsOCBAQCBwcml2YXRlOgogICAgIHZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBtX2RhdGE7CiB9
OwogCit0eXBlZGVmIGZsb2F0ICgqSW1hZ2VDb21wYXJpc29uUHJvYykgKGNvbnN0IEltYWdlJiwg
Y29uc3QgSW1hZ2UmKTsKKwogZmxvYXQgcGVyY2VudGFnZURpZmZlcmVudChjb25zdCBJbWFnZSYg
YmFzZWxpbmUsIGNvbnN0IEltYWdlJiBhY3R1YWwpCiB7CiAgICAgaW50IHcgPSBtaW4oYmFzZWxp
bmUud2lkdGgoKSwgYWN0dWFsLndpZHRoKCkpOwpAQCAtMTU5LDggKzE2OSw4IEBAIGZsb2F0IHBl
cmNlbnRhZ2VEaWZmZXJlbnQoY29uc3QgSW1hZ2UmIGIKIAogICAgIC8vIENvbXB1dGUgcGl4ZWxz
IGRpZmZlcmVudCBpbiB0aGUgb3ZlcmxhcAogICAgIGludCBwaXhlbHNEaWZmZXJlbnQgPSAwOwot
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7Ci0gICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgdzsgeCsrKSB7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyArK3kpIHsKKyAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3OyArK3gpIHsKICAgICAgICAgICAgIGlmIChiYXNlbGlu
ZS5waXhlbEF0KHgsIHkpICE9IGFjdHVhbC5waXhlbEF0KHgsIHkpKQogICAgICAgICAgICAgICAg
IHBpeGVsc0RpZmZlcmVudCsrOwogICAgICAgICB9CkBAIC0xODQsNiArMTk0LDc0IEBAIGZsb2F0
IHBlcmNlbnRhZ2VEaWZmZXJlbnQoY29uc3QgSW1hZ2UmIGIKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHBpeGVsc0RpZmZlcmVudCkgLyB0b3RhbFBpeGVscyAqIDEwMDsKIH0KIAoraW5s
aW5lIHVpbnQzMl90IG1heE9mMyh1aW50MzJfdCBhLCB1aW50MzJfdCBiLCB1aW50MzJfdCBjKQor
eworICAgIGlmIChhIDwgYikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KGIsIGMpOworICAgIHJl
dHVybiBzdGQ6Om1heChhLCBjKTsKK30KKworaW5saW5lIHVpbnQzMl90IGdldFJlZENvbXBvbmVu
dCh1aW50MzJfdCBjb2xvcikKK3sKKyAgICByZXR1cm4gKGNvbG9yIDw8IDI0KSA+PiAyNDsKK30K
KworaW5saW5lIHVpbnQzMl90IGdldEdyZWVuQ29tcG9uZW50KHVpbnQzMl90IGNvbG9yKQorewor
ICAgIHJldHVybiAoY29sb3IgPDwgMTYpID4+IDI0OworfQorCitpbmxpbmUgdWludDMyX3QgZ2V0
Qmx1ZUNvbXBvbmVudCh1aW50MzJfdCBjb2xvcikKK3sKKyAgICByZXR1cm4gKGNvbG9yIDw8IDgp
ID4+IDI0OworfQorCisvLy8gUmFuayBzbWFsbC1waXhlbC1jb3VudCBoaWdoLWludGVuc2l0eSBj
aGFuZ2VzIGFzIG1vcmUgaW1wb3J0YW50IHRoYW4KKy8vLyBsYXJnZS1waXhlbC1jb3VudCBsb3ct
aW50ZW5zaXR5IGNoYW5nZXMuCitmbG9hdCB3ZWlnaHRlZFBlcmNlbnRhZ2VEaWZmZXJlbnQoY29u
c3QgSW1hZ2UmIGJhc2VsaW5lLCBjb25zdCBJbWFnZSYgYWN0dWFsKQoreworICAgIGludCB3ID0g
bWluKGJhc2VsaW5lLndpZHRoKCksIGFjdHVhbC53aWR0aCgpKTsKKyAgICBpbnQgaCA9IG1pbihi
YXNlbGluZS5oZWlnaHQoKSwgYWN0dWFsLmhlaWdodCgpKTsKKworICAgIGZsb2F0IHdlaWdodGVk
UGl4ZWxzRGlmZmVyZW50ID0gMDsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7ICsreSkgewor
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7ICsreCkgeworICAgICAgICAgICAgdWludDMy
X3QgYWN0dWFsQ29sb3IgPSBhY3R1YWwucGl4ZWxBdCh4LCB5KTsKKyAgICAgICAgICAgIHVpbnQz
Ml90IGJhc2VsaW5lQ29sb3IgPSBiYXNlbGluZS5waXhlbEF0KHgsIHkpOworICAgICAgICAgICAg
aWYgKGJhc2VsaW5lQ29sb3IgIT0gYWN0dWFsQ29sb3IpIHsKKyAgICAgICAgICAgICAgICB1aW50
MzJfdCBhY3R1YWxSID0gZ2V0UmVkQ29tcG9uZW50KGFjdHVhbENvbG9yKTsKKyAgICAgICAgICAg
ICAgICB1aW50MzJfdCBhY3R1YWxHID0gZ2V0R3JlZW5Db21wb25lbnQoYWN0dWFsQ29sb3IpOwor
ICAgICAgICAgICAgICAgIHVpbnQzMl90IGFjdHVhbEIgPSBnZXRCbHVlQ29tcG9uZW50KGFjdHVh
bENvbG9yKTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBiYXNlbGluZVIgPSBnZXRSZWRDb21w
b25lbnQoYmFzZWxpbmVDb2xvcik7CisgICAgICAgICAgICAgICAgdWludDMyX3QgYmFzZWxpbmVH
ID0gZ2V0R3JlZW5Db21wb25lbnQoYmFzZWxpbmVDb2xvcik7CisgICAgICAgICAgICAgICAgdWlu
dDMyX3QgYmFzZWxpbmVCID0gZ2V0Qmx1ZUNvbXBvbmVudChiYXNlbGluZUNvbG9yKTsKKyAgICAg
ICAgICAgICAgICB1aW50MzJfdCBkZWx0YVIgPSBzdGQ6Om1heChhY3R1YWxSLCBiYXNlbGluZVIp
CisgICAgICAgICAgICAgICAgICAgIC0gc3RkOjptaW4oYWN0dWFsUiwgYmFzZWxpbmVSKTsKKyAg
ICAgICAgICAgICAgICB1aW50MzJfdCBkZWx0YUcgPSBzdGQ6Om1heChhY3R1YWxHLCBiYXNlbGlu
ZUcpCisgICAgICAgICAgICAgICAgICAgIC0gc3RkOjptaW4oYWN0dWFsRywgYmFzZWxpbmVHKTsK
KyAgICAgICAgICAgICAgICB1aW50MzJfdCBkZWx0YUIgPSBzdGQ6Om1heChhY3R1YWxCLCBiYXNl
bGluZUIpCisgICAgICAgICAgICAgICAgICAgIC0gc3RkOjptaW4oYWN0dWFsQiwgYmFzZWxpbmVC
KTsKKyAgICAgICAgICAgICAgICB3ZWlnaHRlZFBpeGVsc0RpZmZlcmVudCArPQorICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4obWF4T2YzKGRlbHRhUiwgZGVsdGFHLCBkZWx0
YUIpKSAvIDI1NTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGludCBt
YXhXaWR0aCA9IG1heChiYXNlbGluZS53aWR0aCgpLCBhY3R1YWwud2lkdGgoKSk7CisgICAgaW50
IG1heEhlaWdodCA9IG1heChiYXNlbGluZS5oZWlnaHQoKSwgYWN0dWFsLmhlaWdodCgpKTsKKwor
ICAgIHdlaWdodGVkUGl4ZWxzRGlmZmVyZW50ICs9IChtYXhXaWR0aCAtIHcpICogaDsKKworICAg
IHdlaWdodGVkUGl4ZWxzRGlmZmVyZW50ICs9IChtYXhIZWlnaHQgLSBoKSAqIG1heFdpZHRoOwor
CisgICAgZmxvYXQgdG90YWxQaXhlbHMgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYWN0dWFsLndpZHRo
KCkpCisgICAgICAgICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFjdHVhbC5oZWlnaHQoKSk7CisgICAg
aWYgKCF0b3RhbFBpeGVscykKKyAgICAgICAgcmV0dXJuIDEwMC4wZjsKKyAgICByZXR1cm4gd2Vp
Z2h0ZWRQaXhlbHNEaWZmZXJlbnQgLyB0b3RhbFBpeGVscyAqIDEwMDsKK30KKworCiB2b2lkIHBy
aW50SGVscCgpCiB7CiAgICAgZnByaW50ZihzdGRlcnIsCkBAIC0xOTUsNyArMjczLDEwIEBAIHZv
aWQgcHJpbnRIZWxwKCkKICAgICAgICAgICAgICIgICAgYW5kIHNlbmRpbmcgMCB0byBzdGRvdXQg
d2hlbiB0aGV5IGFyZSB0aGUgc2FtZVxuIgogICAgICAgICAgICAgIiAgSW1hZ2VEaWZmIC0tZGlm
ZiA8Y29tcGFyZSBmaWxlPiA8cmVmZXJlbmNlIGZpbGU+IDxvdXRwdXQgZmlsZT5cbiIKICAgICAg
ICAgICAgICIgICAgQ29tcGFyZXMgdHdvIGZpbGVzIG9uIGRpc2ssIG91dHB1dHMgYW4gaW1hZ2Ug
dGhhdCB2aXN1YWxpemVzIHRoZSIKLSAgICAgICAgICAgICIgICAgZGlmZmVyZW5jZSB0byA8b3V0
cHV0IGZpbGU+XG4iKTsKKyAgICAgICAgICAgICIgICAgZGlmZmVyZW5jZSB0byA8b3V0cHV0IGZp
bGU+XG4iCisgICAgICAgICAgICAiICAgIC0td3JpdGUtaW1hZ2UtZGlmZi1tZXRyaWNzIHByaW50
cyBhIGRpZmZlcmVuY2UgbWV0cmljIHRvIHN0ZG91dFxuIgorICAgICAgICAgICAgIiAgICAtLXdl
aWdodGVkLWludGVuc2l0eSB3ZWlnaHRzIHRoZSBkaWZmZXJlbmNlIG1ldHJpYyBieSBpbnRlbnNp
dHlcbiIKKyAgICAgICAgICAgICIgICAgICBhdCBlYWNoIHBpeGVsXG4iKTsKICAgICAvKiBGb3Ig
dW5maW5pc2hlZCB3ZWJraXQtbGlrZS1tb2RlIChzZWUgYmVsb3cpCiAgICAgICAgIlxuIgogICAg
ICAgICIgIEltYWdlRGlmZiAtc1xuIgpAQCAtMjA2LDcgKzI4Nyw4IEBAIHZvaWQgcHJpbnRIZWxw
KCkKICAgICAqLwogfQogCi1pbnQgY29tcGFyZUltYWdlcyhjb25zdCBjaGFyKiBmaWxlMSwgY29u
c3QgY2hhciogZmlsZTIpCitpbnQgY29tcGFyZUltYWdlcyhjb25zdCBjaGFyKiBmaWxlMSwgY29u
c3QgY2hhciogZmlsZTIsCisgICAgICAgICAgICAgICAgICBJbWFnZUNvbXBhcmlzb25Qcm9jIGNv
bXBhcmF0b3IpCiB7CiAgICAgSW1hZ2UgYWN0dWFsSW1hZ2U7CiAgICAgSW1hZ2UgYmFzZWxpbmVJ
bWFnZTsKQEAgLTIyMCw3ICszMDIsNyBAQCBpbnQgY29tcGFyZUltYWdlcyhjb25zdCBjaGFyKiBm
aWxlMSwgY29uCiAgICAgICAgIHJldHVybiBzdGF0dXNFcnJvcjsKICAgICB9CiAKLSAgICBmbG9h
dCBwZXJjZW50ID0gcGVyY2VudGFnZURpZmZlcmVudChhY3R1YWxJbWFnZSwgYmFzZWxpbmVJbWFn
ZSk7CisgICAgZmxvYXQgcGVyY2VudCA9ICgqY29tcGFyYXRvcikoYWN0dWFsSW1hZ2UsIGJhc2Vs
aW5lSW1hZ2UpOwogICAgIGlmIChwZXJjZW50ID4gMC4wKSB7CiAgICAgICAgIC8vIGZhaWx1cmU6
IFRoZSBXZWJLaXQgdmVyc2lvbiBhbHNvIHdyaXRlcyB0aGUgZGlmZmVyZW5jZSBpbWFnZSB0bwog
ICAgICAgICAvLyBzdGRvdXQsIHdoaWNoIHNlZW1zIGV4Y2Vzc2l2ZSBmb3Igb3VyIG5lZWRzLgpA
QCAtMjM2LDcgKzMxOCw3IEBAIGludCBjb21wYXJlSW1hZ2VzKGNvbnN0IGNoYXIqIGZpbGUxLCBj
b24KIAogLy8gVW50ZXN0ZWQgbW9kZSB0aGF0IGFjdHMgbGlrZSBXZWJLaXQncyBpbWFnZSBjb21w
YXJhdG9yLiBJIHdyb3RlIHRoaXMgYnV0CiAvLyBkZWNpZGVkIGl0J3MgdG9vIGNvbXBsaWNhdGVk
LiBXZSBtYXkgdXNlIGl0IGluIHRoZSBmdXR1cmUgaWYgaXQgbG9va3MgdXNlZnVsLgotaW50IHVu
dGVzdGVkQ29tcGFyZUltYWdlcygpCitpbnQgdW50ZXN0ZWRDb21wYXJlSW1hZ2VzKEltYWdlQ29t
cGFyaXNvblByb2MgY29tcGFyYXRvcikKIHsKICAgICBJbWFnZSBhY3R1YWxJbWFnZTsKICAgICBJ
bWFnZSBiYXNlbGluZUltYWdlOwpAQCAtMjU0LDEyICszMzYsMTIgQEAgaW50IHVudGVzdGVkQ29t
cGFyZUltYWdlcygpCiAKICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICAgICAg
ICAgICAgaWYgKGltYWdlU2l6ZSA+IDAgJiYgIWFjdHVhbEltYWdlLmhhc0ltYWdlKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIWFjdHVhbEltYWdlLmNyYWV0ZUZyb21TdGRpbihpbWFnZVNpemUp
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxJbWFnZS5jcmVhdGVGcm9tU3RkaW4oaW1h
Z2VTaXplKSkgewogICAgICAgICAgICAgICAgICAgICBmcHV0cygiRXJyb3IsIGlucHV0IGltYWdl
IGNhbid0IGJlIGRlY29kZWQuXG4iLCBzdGRlcnIpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGltYWdlU2l6
ZSA+IDAgJiYgIWJhc2VsaW5lSW1hZ2UuaGFzSW1hZ2UoKSkgewotICAgICAgICAgICAgICAgIGlm
ICghYmFzZWxpbmVJbWFnZS5jcmFldGVGcm9tU3RkaW4oaW1hZ2VTaXplKSkgeworICAgICAgICAg
ICAgICAgIGlmICghYmFzZWxpbmVJbWFnZS5jcmVhdGVGcm9tU3RkaW4oaW1hZ2VTaXplKSkgewog
ICAgICAgICAgICAgICAgICAgICBmcHV0cygiRXJyb3IsIGJhc2VsaW5lIGltYWdlIGNhbid0IGJl
IGRlY29kZWQuXG4iLCBzdGRlcnIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAg
ICAgICAgICAgICAgICB9CkBAIC0yNzAsNyArMzUyLDcgQEAgaW50IHVudGVzdGVkQ29tcGFyZUlt
YWdlcygpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYWN0dWFsSW1hZ2UuaGFzSW1hZ2UoKSAm
JiBiYXNlbGluZUltYWdlLmhhc0ltYWdlKCkpIHsKLSAgICAgICAgICAgIGZsb2F0IHBlcmNlbnQg
PSBwZXJjZW50YWdlRGlmZmVyZW50KGFjdHVhbEltYWdlLCBiYXNlbGluZUltYWdlKTsKKyAgICAg
ICAgICAgIGZsb2F0IHBlcmNlbnQgPSAoKmNvbXBhcmF0b3IpKGFjdHVhbEltYWdlLCBiYXNlbGlu
ZUltYWdlKTsKICAgICAgICAgICAgIGlmIChwZXJjZW50ID4gMC4wKSB7CiAgICAgICAgICAgICAg
ICAgLy8gZmFpbHVyZTogVGhlIFdlYktpdCB2ZXJzaW9uIGFsc28gd3JpdGVzIHRoZSBkaWZmZXJl
bmNlIGltYWdlIHRvCiAgICAgICAgICAgICAgICAgLy8gc3Rkb3V0LCB3aGljaCBzZWVtcyBleGNl
c3NpdmUgZm9yIG91ciBuZWVkcy4KQEAgLTI5NSw4ICszNzcsOCBAQCBib29sIGNyZWF0ZUltYWdl
RGlmZihjb25zdCBJbWFnZSYgaW1hZ2UxCiAgICAgYm9vbCBzYW1lID0gKGltYWdlMS53aWR0aCgp
ID09IGltYWdlMi53aWR0aCgpKSAmJiAoaW1hZ2UxLmhlaWdodCgpID09IGltYWdlMi5oZWlnaHQo
KSk7CiAKICAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIHdpdGggdGhlIGV4dHJhIHBpeGVscyBp
ZiB0aGUgaW1hZ2Ugc2l6ZXMgYXJlIGRpZmZlcmVudC4KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8
IGg7IHkrKykgewotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgeworICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaDsgKyt5KSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
dzsgKyt4KSB7CiAgICAgICAgICAgICB1aW50MzJfdCBiYXNlUGl4ZWwgPSBpbWFnZTEucGl4ZWxB
dCh4LCB5KTsKICAgICAgICAgICAgIGlmIChiYXNlUGl4ZWwgIT0gaW1hZ2UyLnBpeGVsQXQoeCwg
eSkpIHsKICAgICAgICAgICAgICAgICAvLyBTZXQgZGlmZmVyaW5nIHBpeGVscyByZWQuCkBAIC0z
MzAsNyArNDEyLDggQEAgc3RhdGljIGJvb2wgd3JpdGVGaWxlKGNvbnN0IGNoYXIqIG91dEZpbAog
ICAgIHJldHVybiB0cnVlOwogfQogCi1pbnQgZGlmZkltYWdlcyhjb25zdCBjaGFyKiBmaWxlMSwg
Y29uc3QgY2hhciogZmlsZTIsIGNvbnN0IGNoYXIqIG91dEZpbGUpCitpbnQgZGlmZkltYWdlcyhj
b25zdCBjaGFyKiBmaWxlMSwgY29uc3QgY2hhciogZmlsZTIsIGNvbnN0IGNoYXIqIG91dEZpbGUs
CisgICAgICAgICAgICAgICBib29sIHNob3VsZFdyaXRlUGVyY2VudGFnZXMsIEltYWdlQ29tcGFy
aXNvblByb2MgY29tcGFyYXRvcikKIHsKICAgICBJbWFnZSBhY3R1YWxJbWFnZTsKICAgICBJbWFn
ZSBiYXNlbGluZUltYWdlOwpAQCAtMzU0LDYgKzQzNywxMiBAQCBpbnQgZGlmZkltYWdlcyhjb25z
dCBjaGFyKiBmaWxlMSwgY29uc3QgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGlmZkltYWdlLndpZHRoKCkgKiA0LCAmcG5nRGF0YSk7CiAgICAgaWYgKCF3cml0ZUZpbGUob3V0
RmlsZSwgJnBuZ0RhdGEuZnJvbnQoKSwgcG5nRGF0YS5zaXplKCkpKQogICAgICAgICByZXR1cm4g
c3RhdHVzRXJyb3I7CisKKyAgICBpZiAoc2hvdWxkV3JpdGVQZXJjZW50YWdlcykgeworICAgICAg
ICBmbG9hdCBwZXJjZW50ID0gKCpjb21wYXJhdG9yKShhY3R1YWxJbWFnZSwgYmFzZWxpbmVJbWFn
ZSk7CisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiJS4zZlxuIiwgcGVyY2VudCk7CisgICAgfQor
CiAgICAgcmV0dXJuIHN0YXR1c0RpZmZlcmVudDsKIH0KIApAQCAtMzYyLDExICs0NTEsMTcgQEAg
aW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKICAgICBWZWN0b3I8Y29uc3Qg
Y2hhcio+IHZhbHVlczsKICAgICBib29sIHBvbGxTdGRpbiA9IGZhbHNlOwogICAgIGJvb2wgZ2Vu
ZXJhdGVEaWZmID0gZmFsc2U7CisgICAgYm9vbCBzaG91bGRXcml0ZVBlcmNlbnRhZ2VzID0gZmFs
c2U7CisgICAgSW1hZ2VDb21wYXJpc29uUHJvYyBjb21wYXJhdG9yID0gcGVyY2VudGFnZURpZmZl
cmVudDsKICAgICBmb3IgKGludCBpID0gMTsgaSA8IGFyZ2M7ICsraSkgewogICAgICAgICBpZiAo
IXN0cmNtcChhcmd2W2ldLCBvcHRpb25Qb2xsU3RkaW4pKQogICAgICAgICAgICAgcG9sbFN0ZGlu
ID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCBvcHRpb25HZW5lcmF0
ZURpZmYpKQogICAgICAgICAgICAgZ2VuZXJhdGVEaWZmID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBp
ZiAoIXN0cmNtcChhcmd2W2ldLCBvcHRpb25Xcml0ZSkpCisgICAgICAgICAgICBzaG91bGRXcml0
ZVBlcmNlbnRhZ2VzID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCBv
cHRpb25XZWlnaHRlZEludGVuc2l0eSkpCisgICAgICAgICAgICBjb21wYXJhdG9yID0gd2VpZ2h0
ZWRQZXJjZW50YWdlRGlmZmVyZW50OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB2YWx1ZXMu
YXBwZW5kKGFyZ3ZbaV0pOwogICAgIH0KQEAgLTM4Myw3ICs0NzgsOCBAQCBpbnQgbWFpbihpbnQg
YXJnYywgY29uc3QgY2hhciogYXJndltdKQogCiAgICAgICAgICAgICBpZiAoaGF2ZUZpcnN0TmFt
ZSkgewogICAgICAgICAgICAgICAgIC8vIGNvbXBhcmVJbWFnZXMgd3JpdGVzIHJlc3VsdHMgdG8g
c3Rkb3V0IHVubGVzcyBhbiBlcnJvciBvY2N1cnJlZC4KLSAgICAgICAgICAgICAgICBpZiAoY29t
cGFyZUltYWdlcyhmaXJzdE5hbWUsIHN0ZGluQnVmZmVyKSA9PSBzdGF0dXNFcnJvcikKKyAgICAg
ICAgICAgICAgICBpZiAoY29tcGFyZUltYWdlcyhmaXJzdE5hbWUsIHN0ZGluQnVmZmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmF0b3IpID09IHN0YXR1c0Vycm9y
KQogICAgICAgICAgICAgICAgICAgICBwcmludGYoImVycm9yXG4iKTsKICAgICAgICAgICAgICAg
ICBmZmx1c2goc3Rkb3V0KTsKICAgICAgICAgICAgICAgICBoYXZlRmlyc3ROYW1lID0gZmFsc2U7
CkBAIC0zOTksOSArNDk1LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2
W10pCiAKICAgICBpZiAoZ2VuZXJhdGVEaWZmKSB7CiAgICAgICAgIGlmICh2YWx1ZXMuc2l6ZSgp
ID09IDMpCi0gICAgICAgICAgICByZXR1cm4gZGlmZkltYWdlcyh2YWx1ZXNbMF0sIHZhbHVlc1sx
XSwgdmFsdWVzWzJdKTsKKyAgICAgICAgICAgIHJldHVybiBkaWZmSW1hZ2VzKHZhbHVlc1swXSwg
dmFsdWVzWzFdLCB2YWx1ZXNbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91
bGRXcml0ZVBlcmNlbnRhZ2VzLCBjb21wYXJhdG9yKTsKICAgICB9IGVsc2UgaWYgKHZhbHVlcy5z
aXplKCkgPT0gMikKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVJbWFnZXMoYXJndlsxXSwgYXJndlsy
XSk7CisgICAgICAgIHJldHVybiBjb21wYXJlSW1hZ2VzKGFyZ3ZbMV0sIGFyZ3ZbMl0sIGNvbXBh
cmF0b3IpOwogCiAgICAgcHJpbnRIZWxwKCk7CiAgICAgcmV0dXJuIHN0YXR1c0Vycm9yOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94881</attachid>
            <date>2011-05-25 16:56:03 -0700</date>
            <delta_ts>2011-05-26 00:44:57 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-60569-20110525165600.patch</filename>
            <type>text/plain</type>
            <size>11991</size>
            <attacher name="Tony Chang">tony</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODczMzYKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzMWEwNTJiYzE1ZDI2YjMzZmZhMzk1Y2YyOGE5ZGFkYTQ4
NWUwY2NjLi4xOWJjOGRkZDA0OTgxMDIyMGQzYjAxZTg0N2E1YTg2YTJjMjAzZTAwIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTEtMDUtMjUgIFRvbSBIdWRzb24gIDx0b21odWRzb25AZ29vZ2xlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgorCisgICAgICAgIEFkZCBmbGFncyB0byBDaHJv
bWl1bSBJbWFnZURpZmYgdG8gd3JpdGUgaW1hZ2UgY29tcGFyaXNvbiBtZXRyaWNzIG9uCisgICAg
ICAgIHN0ZG91dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYwNTY5CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9JbWFnZURpZmYu
Y3BwOgorICAgICAgICAoSW1hZ2U6OmNyZWF0ZUZyb21TdGRpbik6IEZpeCBzcGVsbGluZy4KKyAg
ICAgICAgKG1heE9mMyk6IE5ldyBmdW5jdGlvbiB0byBkbyAzLXdheSBtYXhpbXVtLgorICAgICAg
ICAoZ2V0UmVkQ29tcG9uZW50KTogRXh0cmFjdCByZWQgY29tcG9uZW50IGZyb20gQUJHUiBwYWNr
ZWQgZW5jb2RpbmcuCisgICAgICAgIChnZXRHcmVlbkNvbXBvbmVudCk6IEV4dHJhY3QgZ3JlZW4g
Y29tcG9uZW50IGZyb20gQUJHUiBwYWNrZWQgZW5jb2RpbmcuCisgICAgICAgIChnZXRCbHVlQ29t
cG9uZW50KTogRXh0cmFjdCBibHVlIGNvbXBvbmVudCBmcm9tIEFCR1IgcGFja2VkIGVuY29kaW5n
LgorICAgICAgICAod2VpZ2h0ZWRQZXJjZW50YWdlRGlmZmVyZW50KTogRGV0ZXJtaW5lICUgb2Yg
cGl4ZWxzIGRpZmZlcmVudCBpbiB0d28KKyAgICAgICAgaW1hZ2VzIG11bHRpcGxpZWQgYnkgaW50
ZW5zaXR5IGRpZmZlcmVuY2Ugb2YgZWFjaCBwaXhlbC4KKyAgICAgICAgKHByaW50SGVscCk6IERv
Y3VtZW50IG5ldyBhcmd1bWVudHMuCisgICAgICAgIChjb21wYXJlSW1hZ2VzKTogUGFyYW1ldGVy
aXplLgorICAgICAgICAodW50ZXN0ZWRDb21wYXJlSW1hZ2VzKTogUGFyYW1ldGVyaXplLgorICAg
ICAgICAoZGlmZkltYWdlcyk6IFBhcmFtZXRlcml6ZTsgd3JpdGUgcmVzdWx0cyBvbiBzdGRvdXQg
aWYgcmVxdWVzdGVkLgorICAgICAgICAobWFpbik6IFBhcnNlIG5ldyBhcmd1bWVudHMuCisKIDIw
MTEtMDUtMjUgIEpvbiBIb25leWN1dHQgIDxqaG9uZXljdXR0QGFwcGxlLmNvbT4KIAogICAgICAg
ICBSRUdSRVNTSU9OIChXZWJLaXQyKTogQ3Jhc2ggaW4gRmxhc2ggb24gVVNBIFRvZGF5IHBob3Rv
IGdhbGxlcnkKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0ltYWdl
RGlmZi5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9JbWFnZURpZmYuY3BwCmlu
ZGV4IDIwZjllOTM5MTYxN2ViYmYyZjdmZTI5NWM0ODczODA4ZTFjYTlmOTUuLjM4NTg2ZWE1OTU4
Mzk0ZmFmOWVkNzhmMmM5ZDM3MzJkODk2N2Y4YWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL0ltYWdlRGlmZi5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vSW1hZ2VEaWZmLmNwcApAQCAtNTYsNiArNTYsMTQgQEAgdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvblBvbGxTdGRpbltdID0gIi0tdXNlLXN0ZGlu
IjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkdlbmVyYXRlRGlmZltdID0gIi0tZGlmZiI7CiAK
Ky8vIElmIC0tZGlmZiBpcyBwYXNzZWQsIGNhdXNlcyB0aGUgYXBwIHRvIG91dHB1dCB0aGUgaW1h
Z2UgZGlmZmVyZW5jZQorLy8gbWV0cmljIChwZXJjZW50YWdlRGlmZmVyZW50KCkpIG9uIHN0ZG91
dC4KK3N0YXRpYyBjb25zdCBjaGFyIG9wdGlvbldyaXRlW10gPSAiLS13cml0ZS1pbWFnZS1kaWZm
LW1ldHJpY3MiOworCisvLyBVc2Ugd2VpZ2h0ZWRQZXJjZW50YWdlRGlmZmVyZW50KCkgaW5zdGVh
ZCBvZiB0aGUgZGVmYXVsdCBpbWFnZQorLy8gY29tcGFyYXRvciBwcm9jLgorc3RhdGljIGNvbnN0
IGNoYXIgb3B0aW9uV2VpZ2h0ZWRJbnRlbnNpdHlbXSA9ICItLXdlaWdodGVkLWludGVuc2l0eSI7
CisKIC8vIFJldHVybiBjb2RlcyB1c2VkIGJ5IHRoaXMgdXRpbGl0eS4KIHN0YXRpYyBjb25zdCBp
bnQgc3RhdHVzU2FtZSA9IDA7CiBzdGF0aWMgY29uc3QgaW50IHN0YXR1c0RpZmZlcmVudCA9IDE7
CkBAIC04Myw3ICs5MSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIENyZWF0ZXMgdGhlIGltYWdlIGZy
b20gc3RkaW4gd2l0aCB0aGUgZ2l2ZW4gZGF0YSBsZW5ndGguIE9uIHN1Y2Nlc3MsIGl0CiAgICAg
Ly8gd2lsbCByZXR1cm4gdHJ1ZS4gT24gZmFpbHVyZSwgbm8gb3RoZXIgbWV0aG9kcyBzaG91bGQg
YmUgYWNjZXNzZWQuCi0gICAgYm9vbCBjcmFldGVGcm9tU3RkaW4oc2l6ZV90IGJ5dGVMZW5ndGgp
CisgICAgYm9vbCBjcmVhdGVGcm9tU3RkaW4oc2l6ZV90IGJ5dGVMZW5ndGgpCiAgICAgewogICAg
ICAgICBpZiAoIWJ5dGVMZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTIs
NiArMTYwLDggQEAgcHJpdmF0ZToKICAgICB2ZWN0b3I8dW5zaWduZWQgY2hhcj4gbV9kYXRhOwog
fTsKIAordHlwZWRlZiBmbG9hdCAoKkltYWdlQ29tcGFyaXNvblByb2MpIChjb25zdCBJbWFnZSYs
IGNvbnN0IEltYWdlJik7CisKIGZsb2F0IHBlcmNlbnRhZ2VEaWZmZXJlbnQoY29uc3QgSW1hZ2Um
IGJhc2VsaW5lLCBjb25zdCBJbWFnZSYgYWN0dWFsKQogewogICAgIGludCB3ID0gbWluKGJhc2Vs
aW5lLndpZHRoKCksIGFjdHVhbC53aWR0aCgpKTsKQEAgLTE1OSw4ICsxNjksOCBAQCBmbG9hdCBw
ZXJjZW50YWdlRGlmZmVyZW50KGNvbnN0IEltYWdlJiBiYXNlbGluZSwgY29uc3QgSW1hZ2UmIGFj
dHVhbCkKIAogICAgIC8vIENvbXB1dGUgcGl4ZWxzIGRpZmZlcmVudCBpbiB0aGUgb3ZlcmxhcAog
ICAgIGludCBwaXhlbHNEaWZmZXJlbnQgPSAwOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsg
eSsrKSB7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdzsgeCsrKSB7CisgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoOyArK3kpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3OyAr
K3gpIHsKICAgICAgICAgICAgIGlmIChiYXNlbGluZS5waXhlbEF0KHgsIHkpICE9IGFjdHVhbC5w
aXhlbEF0KHgsIHkpKQogICAgICAgICAgICAgICAgIHBpeGVsc0RpZmZlcmVudCsrOwogICAgICAg
ICB9CkBAIC0xODQsNiArMTk0LDc0IEBAIGZsb2F0IHBlcmNlbnRhZ2VEaWZmZXJlbnQoY29uc3Qg
SW1hZ2UmIGJhc2VsaW5lLCBjb25zdCBJbWFnZSYgYWN0dWFsKQogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4ocGl4ZWxzRGlmZmVyZW50KSAvIHRvdGFsUGl4ZWxzICogMTAwOwogfQogCitp
bmxpbmUgdWludDMyX3QgbWF4T2YzKHVpbnQzMl90IGEsIHVpbnQzMl90IGIsIHVpbnQzMl90IGMp
Cit7CisgICAgaWYgKGEgPCBiKQorICAgICAgICByZXR1cm4gc3RkOjptYXgoYiwgYyk7CisgICAg
cmV0dXJuIHN0ZDo6bWF4KGEsIGMpOworfQorCitpbmxpbmUgdWludDMyX3QgZ2V0UmVkQ29tcG9u
ZW50KHVpbnQzMl90IGNvbG9yKQoreworICAgIHJldHVybiAoY29sb3IgPDwgMjQpID4+IDI0Owor
fQorCitpbmxpbmUgdWludDMyX3QgZ2V0R3JlZW5Db21wb25lbnQodWludDMyX3QgY29sb3IpCit7
CisgICAgcmV0dXJuIChjb2xvciA8PCAxNikgPj4gMjQ7Cit9CisKK2lubGluZSB1aW50MzJfdCBn
ZXRCbHVlQ29tcG9uZW50KHVpbnQzMl90IGNvbG9yKQoreworICAgIHJldHVybiAoY29sb3IgPDwg
OCkgPj4gMjQ7Cit9CisKKy8vLyBSYW5rIHNtYWxsLXBpeGVsLWNvdW50IGhpZ2gtaW50ZW5zaXR5
IGNoYW5nZXMgYXMgbW9yZSBpbXBvcnRhbnQgdGhhbgorLy8vIGxhcmdlLXBpeGVsLWNvdW50IGxv
dy1pbnRlbnNpdHkgY2hhbmdlcy4KK2Zsb2F0IHdlaWdodGVkUGVyY2VudGFnZURpZmZlcmVudChj
b25zdCBJbWFnZSYgYmFzZWxpbmUsIGNvbnN0IEltYWdlJiBhY3R1YWwpCit7CisgICAgaW50IHcg
PSBtaW4oYmFzZWxpbmUud2lkdGgoKSwgYWN0dWFsLndpZHRoKCkpOworICAgIGludCBoID0gbWlu
KGJhc2VsaW5lLmhlaWdodCgpLCBhY3R1YWwuaGVpZ2h0KCkpOworCisgICAgZmxvYXQgd2VpZ2h0
ZWRQaXhlbHNEaWZmZXJlbnQgPSAwOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgKyt5KSB7
CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdzsgKyt4KSB7CisgICAgICAgICAgICB1aW50
MzJfdCBhY3R1YWxDb2xvciA9IGFjdHVhbC5waXhlbEF0KHgsIHkpOworICAgICAgICAgICAgdWlu
dDMyX3QgYmFzZWxpbmVDb2xvciA9IGJhc2VsaW5lLnBpeGVsQXQoeCwgeSk7CisgICAgICAgICAg
ICBpZiAoYmFzZWxpbmVDb2xvciAhPSBhY3R1YWxDb2xvcikgeworICAgICAgICAgICAgICAgIHVp
bnQzMl90IGFjdHVhbFIgPSBnZXRSZWRDb21wb25lbnQoYWN0dWFsQ29sb3IpOworICAgICAgICAg
ICAgICAgIHVpbnQzMl90IGFjdHVhbEcgPSBnZXRHcmVlbkNvbXBvbmVudChhY3R1YWxDb2xvcik7
CisgICAgICAgICAgICAgICAgdWludDMyX3QgYWN0dWFsQiA9IGdldEJsdWVDb21wb25lbnQoYWN0
dWFsQ29sb3IpOworICAgICAgICAgICAgICAgIHVpbnQzMl90IGJhc2VsaW5lUiA9IGdldFJlZENv
bXBvbmVudChiYXNlbGluZUNvbG9yKTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBiYXNlbGlu
ZUcgPSBnZXRHcmVlbkNvbXBvbmVudChiYXNlbGluZUNvbG9yKTsKKyAgICAgICAgICAgICAgICB1
aW50MzJfdCBiYXNlbGluZUIgPSBnZXRCbHVlQ29tcG9uZW50KGJhc2VsaW5lQ29sb3IpOworICAg
ICAgICAgICAgICAgIHVpbnQzMl90IGRlbHRhUiA9IHN0ZDo6bWF4KGFjdHVhbFIsIGJhc2VsaW5l
UikKKyAgICAgICAgICAgICAgICAgICAgLSBzdGQ6Om1pbihhY3R1YWxSLCBiYXNlbGluZVIpOwor
ICAgICAgICAgICAgICAgIHVpbnQzMl90IGRlbHRhRyA9IHN0ZDo6bWF4KGFjdHVhbEcsIGJhc2Vs
aW5lRykKKyAgICAgICAgICAgICAgICAgICAgLSBzdGQ6Om1pbihhY3R1YWxHLCBiYXNlbGluZUcp
OworICAgICAgICAgICAgICAgIHVpbnQzMl90IGRlbHRhQiA9IHN0ZDo6bWF4KGFjdHVhbEIsIGJh
c2VsaW5lQikKKyAgICAgICAgICAgICAgICAgICAgLSBzdGQ6Om1pbihhY3R1YWxCLCBiYXNlbGlu
ZUIpOworICAgICAgICAgICAgICAgIHdlaWdodGVkUGl4ZWxzRGlmZmVyZW50ICs9CisgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihtYXhPZjMoZGVsdGFSLCBkZWx0YUcsIGRl
bHRhQikpIC8gMjU1OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaW50
IG1heFdpZHRoID0gbWF4KGJhc2VsaW5lLndpZHRoKCksIGFjdHVhbC53aWR0aCgpKTsKKyAgICBp
bnQgbWF4SGVpZ2h0ID0gbWF4KGJhc2VsaW5lLmhlaWdodCgpLCBhY3R1YWwuaGVpZ2h0KCkpOwor
CisgICAgd2VpZ2h0ZWRQaXhlbHNEaWZmZXJlbnQgKz0gKG1heFdpZHRoIC0gdykgKiBoOworCisg
ICAgd2VpZ2h0ZWRQaXhlbHNEaWZmZXJlbnQgKz0gKG1heEhlaWdodCAtIGgpICogbWF4V2lkdGg7
CisKKyAgICBmbG9hdCB0b3RhbFBpeGVscyA9IHN0YXRpY19jYXN0PGZsb2F0PihhY3R1YWwud2lk
dGgoKSkKKyAgICAgICAgKiBzdGF0aWNfY2FzdDxmbG9hdD4oYWN0dWFsLmhlaWdodCgpKTsKKyAg
ICBpZiAoIXRvdGFsUGl4ZWxzKQorICAgICAgICByZXR1cm4gMTAwLjBmOworICAgIHJldHVybiB3
ZWlnaHRlZFBpeGVsc0RpZmZlcmVudCAvIHRvdGFsUGl4ZWxzICogMTAwOworfQorCisKIHZvaWQg
cHJpbnRIZWxwKCkKIHsKICAgICBmcHJpbnRmKHN0ZGVyciwKQEAgLTE5NSw3ICsyNzMsMTAgQEAg
dm9pZCBwcmludEhlbHAoKQogICAgICAgICAgICAgIiAgICBhbmQgc2VuZGluZyAwIHRvIHN0ZG91
dCB3aGVuIHRoZXkgYXJlIHRoZSBzYW1lXG4iCiAgICAgICAgICAgICAiICBJbWFnZURpZmYgLS1k
aWZmIDxjb21wYXJlIGZpbGU+IDxyZWZlcmVuY2UgZmlsZT4gPG91dHB1dCBmaWxlPlxuIgogICAg
ICAgICAgICAgIiAgICBDb21wYXJlcyB0d28gZmlsZXMgb24gZGlzaywgb3V0cHV0cyBhbiBpbWFn
ZSB0aGF0IHZpc3VhbGl6ZXMgdGhlIgotICAgICAgICAgICAgIiAgICBkaWZmZXJlbmNlIHRvIDxv
dXRwdXQgZmlsZT5cbiIpOworICAgICAgICAgICAgIiAgICBkaWZmZXJlbmNlIHRvIDxvdXRwdXQg
ZmlsZT5cbiIKKyAgICAgICAgICAgICIgICAgLS13cml0ZS1pbWFnZS1kaWZmLW1ldHJpY3MgcHJp
bnRzIGEgZGlmZmVyZW5jZSBtZXRyaWMgdG8gc3Rkb3V0XG4iCisgICAgICAgICAgICAiICAgIC0t
d2VpZ2h0ZWQtaW50ZW5zaXR5IHdlaWdodHMgdGhlIGRpZmZlcmVuY2UgbWV0cmljIGJ5IGludGVu
c2l0eVxuIgorICAgICAgICAgICAgIiAgICAgIGF0IGVhY2ggcGl4ZWxcbiIpOwogICAgIC8qIEZv
ciB1bmZpbmlzaGVkIHdlYmtpdC1saWtlLW1vZGUgKHNlZSBiZWxvdykKICAgICAgICAiXG4iCiAg
ICAgICAgIiAgSW1hZ2VEaWZmIC1zXG4iCkBAIC0yMDYsNyArMjg3LDggQEAgdm9pZCBwcmludEhl
bHAoKQogICAgICovCiB9CiAKLWludCBjb21wYXJlSW1hZ2VzKGNvbnN0IGNoYXIqIGZpbGUxLCBj
b25zdCBjaGFyKiBmaWxlMikKK2ludCBjb21wYXJlSW1hZ2VzKGNvbnN0IGNoYXIqIGZpbGUxLCBj
b25zdCBjaGFyKiBmaWxlMiwKKyAgICAgICAgICAgICAgICAgIEltYWdlQ29tcGFyaXNvblByb2Mg
Y29tcGFyYXRvcikKIHsKICAgICBJbWFnZSBhY3R1YWxJbWFnZTsKICAgICBJbWFnZSBiYXNlbGlu
ZUltYWdlOwpAQCAtMjIwLDcgKzMwMiw3IEBAIGludCBjb21wYXJlSW1hZ2VzKGNvbnN0IGNoYXIq
IGZpbGUxLCBjb25zdCBjaGFyKiBmaWxlMikKICAgICAgICAgcmV0dXJuIHN0YXR1c0Vycm9yOwog
ICAgIH0KIAotICAgIGZsb2F0IHBlcmNlbnQgPSBwZXJjZW50YWdlRGlmZmVyZW50KGFjdHVhbElt
YWdlLCBiYXNlbGluZUltYWdlKTsKKyAgICBmbG9hdCBwZXJjZW50ID0gKCpjb21wYXJhdG9yKShh
Y3R1YWxJbWFnZSwgYmFzZWxpbmVJbWFnZSk7CiAgICAgaWYgKHBlcmNlbnQgPiAwLjApIHsKICAg
ICAgICAgLy8gZmFpbHVyZTogVGhlIFdlYktpdCB2ZXJzaW9uIGFsc28gd3JpdGVzIHRoZSBkaWZm
ZXJlbmNlIGltYWdlIHRvCiAgICAgICAgIC8vIHN0ZG91dCwgd2hpY2ggc2VlbXMgZXhjZXNzaXZl
IGZvciBvdXIgbmVlZHMuCkBAIC0yMzYsNyArMzE4LDcgQEAgaW50IGNvbXBhcmVJbWFnZXMoY29u
c3QgY2hhciogZmlsZTEsIGNvbnN0IGNoYXIqIGZpbGUyKQogCiAvLyBVbnRlc3RlZCBtb2RlIHRo
YXQgYWN0cyBsaWtlIFdlYktpdCdzIGltYWdlIGNvbXBhcmF0b3IuIEkgd3JvdGUgdGhpcyBidXQK
IC8vIGRlY2lkZWQgaXQncyB0b28gY29tcGxpY2F0ZWQuIFdlIG1heSB1c2UgaXQgaW4gdGhlIGZ1
dHVyZSBpZiBpdCBsb29rcyB1c2VmdWwuCi1pbnQgdW50ZXN0ZWRDb21wYXJlSW1hZ2VzKCkKK2lu
dCB1bnRlc3RlZENvbXBhcmVJbWFnZXMoSW1hZ2VDb21wYXJpc29uUHJvYyBjb21wYXJhdG9yKQog
ewogICAgIEltYWdlIGFjdHVhbEltYWdlOwogICAgIEltYWdlIGJhc2VsaW5lSW1hZ2U7CkBAIC0y
NTQsMTIgKzMzNiwxMiBAQCBpbnQgdW50ZXN0ZWRDb21wYXJlSW1hZ2VzKCkKIAogICAgICAgICAg
ICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoaW1hZ2VTaXplID4gMCAm
JiAhYWN0dWFsSW1hZ2UuaGFzSW1hZ2UoKSkgewotICAgICAgICAgICAgICAgIGlmICghYWN0dWFs
SW1hZ2UuY3JhZXRlRnJvbVN0ZGluKGltYWdlU2l6ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IWFjdHVhbEltYWdlLmNyZWF0ZUZyb21TdGRpbihpbWFnZVNpemUpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGZwdXRzKCJFcnJvciwgaW5wdXQgaW1hZ2UgY2FuJ3QgYmUgZGVjb2RlZC5cbiIsIHN0
ZGVycik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW1hZ2VTaXplID4gMCAmJiAhYmFzZWxpbmVJbWFnZS5o
YXNJbWFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFiYXNlbGluZUltYWdlLmNyYWV0ZUZy
b21TdGRpbihpbWFnZVNpemUpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFiYXNlbGluZUltYWdl
LmNyZWF0ZUZyb21TdGRpbihpbWFnZVNpemUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZwdXRz
KCJFcnJvciwgYmFzZWxpbmUgaW1hZ2UgY2FuJ3QgYmUgZGVjb2RlZC5cbiIsIHN0ZGVycik7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgIH0KQEAgLTI3MCw3
ICszNTIsNyBAQCBpbnQgdW50ZXN0ZWRDb21wYXJlSW1hZ2VzKCkKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChhY3R1YWxJbWFnZS5oYXNJbWFnZSgpICYmIGJhc2VsaW5lSW1hZ2UuaGFzSW1hZ2Uo
KSkgewotICAgICAgICAgICAgZmxvYXQgcGVyY2VudCA9IHBlcmNlbnRhZ2VEaWZmZXJlbnQoYWN0
dWFsSW1hZ2UsIGJhc2VsaW5lSW1hZ2UpOworICAgICAgICAgICAgZmxvYXQgcGVyY2VudCA9ICgq
Y29tcGFyYXRvcikoYWN0dWFsSW1hZ2UsIGJhc2VsaW5lSW1hZ2UpOwogICAgICAgICAgICAgaWYg
KHBlcmNlbnQgPiAwLjApIHsKICAgICAgICAgICAgICAgICAvLyBmYWlsdXJlOiBUaGUgV2ViS2l0
IHZlcnNpb24gYWxzbyB3cml0ZXMgdGhlIGRpZmZlcmVuY2UgaW1hZ2UgdG8KICAgICAgICAgICAg
ICAgICAvLyBzdGRvdXQsIHdoaWNoIHNlZW1zIGV4Y2Vzc2l2ZSBmb3Igb3VyIG5lZWRzLgpAQCAt
Mjk1LDggKzM3Nyw4IEBAIGJvb2wgY3JlYXRlSW1hZ2VEaWZmKGNvbnN0IEltYWdlJiBpbWFnZTEs
IGNvbnN0IEltYWdlJiBpbWFnZTIsIEltYWdlKiBvdXQpCiAgICAgYm9vbCBzYW1lID0gKGltYWdl
MS53aWR0aCgpID09IGltYWdlMi53aWR0aCgpKSAmJiAoaW1hZ2UxLmhlaWdodCgpID09IGltYWdl
Mi5oZWlnaHQoKSk7CiAKICAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIHdpdGggdGhlIGV4dHJh
IHBpeGVscyBpZiB0aGUgaW1hZ2Ugc2l6ZXMgYXJlIGRpZmZlcmVudC4KLSAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGg7IHkrKykgewotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykg
eworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgKyt5KSB7CisgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgdzsgKyt4KSB7CiAgICAgICAgICAgICB1aW50MzJfdCBiYXNlUGl4ZWwgPSBpbWFn
ZTEucGl4ZWxBdCh4LCB5KTsKICAgICAgICAgICAgIGlmIChiYXNlUGl4ZWwgIT0gaW1hZ2UyLnBp
eGVsQXQoeCwgeSkpIHsKICAgICAgICAgICAgICAgICAvLyBTZXQgZGlmZmVyaW5nIHBpeGVscyBy
ZWQuCkBAIC0zMzAsNyArNDEyLDggQEAgc3RhdGljIGJvb2wgd3JpdGVGaWxlKGNvbnN0IGNoYXIq
IG91dEZpbGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHNpemVfdCBkYXQKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotaW50IGRpZmZJbWFnZXMoY29uc3QgY2hhciogZmlsZTEsIGNvbnN0IGNo
YXIqIGZpbGUyLCBjb25zdCBjaGFyKiBvdXRGaWxlKQoraW50IGRpZmZJbWFnZXMoY29uc3QgY2hh
ciogZmlsZTEsIGNvbnN0IGNoYXIqIGZpbGUyLCBjb25zdCBjaGFyKiBvdXRGaWxlLAorICAgICAg
ICAgICAgICAgYm9vbCBzaG91bGRXcml0ZVBlcmNlbnRhZ2VzLCBJbWFnZUNvbXBhcmlzb25Qcm9j
IGNvbXBhcmF0b3IpCiB7CiAgICAgSW1hZ2UgYWN0dWFsSW1hZ2U7CiAgICAgSW1hZ2UgYmFzZWxp
bmVJbWFnZTsKQEAgLTM1NCw2ICs0MzcsMTIgQEAgaW50IGRpZmZJbWFnZXMoY29uc3QgY2hhciog
ZmlsZTEsIGNvbnN0IGNoYXIqIGZpbGUyLCBjb25zdCBjaGFyKiBvdXRGaWxlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZJbWFnZS53aWR0aCgpICogNCwgJnBuZ0RhdGEp
OwogICAgIGlmICghd3JpdGVGaWxlKG91dEZpbGUsICZwbmdEYXRhLmZyb250KCksIHBuZ0RhdGEu
c2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIHN0YXR1c0Vycm9yOworCisgICAgaWYgKHNob3VsZFdy
aXRlUGVyY2VudGFnZXMpIHsKKyAgICAgICAgZmxvYXQgcGVyY2VudCA9ICgqY29tcGFyYXRvciko
YWN0dWFsSW1hZ2UsIGJhc2VsaW5lSW1hZ2UpOworICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiUu
M2ZcbiIsIHBlcmNlbnQpOworICAgIH0KKwogICAgIHJldHVybiBzdGF0dXNEaWZmZXJlbnQ7CiB9
CiAKQEAgLTM2MiwxMSArNDUxLDE3IEBAIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiBh
cmd2W10pCiAgICAgVmVjdG9yPGNvbnN0IGNoYXIqPiB2YWx1ZXM7CiAgICAgYm9vbCBwb2xsU3Rk
aW4gPSBmYWxzZTsKICAgICBib29sIGdlbmVyYXRlRGlmZiA9IGZhbHNlOworICAgIGJvb2wgc2hv
dWxkV3JpdGVQZXJjZW50YWdlcyA9IGZhbHNlOworICAgIEltYWdlQ29tcGFyaXNvblByb2MgY29t
cGFyYXRvciA9IHBlcmNlbnRhZ2VEaWZmZXJlbnQ7CiAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBh
cmdjOyArK2kpIHsKICAgICAgICAgaWYgKCFzdHJjbXAoYXJndltpXSwgb3B0aW9uUG9sbFN0ZGlu
KSkKICAgICAgICAgICAgIHBvbGxTdGRpbiA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKCFzdHJj
bXAoYXJndltpXSwgb3B0aW9uR2VuZXJhdGVEaWZmKSkKICAgICAgICAgICAgIGdlbmVyYXRlRGlm
ZiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgb3B0aW9uV3JpdGUp
KQorICAgICAgICAgICAgc2hvdWxkV3JpdGVQZXJjZW50YWdlcyA9IHRydWU7CisgICAgICAgIGVs
c2UgaWYgKCFzdHJjbXAoYXJndltpXSwgb3B0aW9uV2VpZ2h0ZWRJbnRlbnNpdHkpKQorICAgICAg
ICAgICAgY29tcGFyYXRvciA9IHdlaWdodGVkUGVyY2VudGFnZURpZmZlcmVudDsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChhcmd2W2ldKTsKICAgICB9CkBAIC0zODMs
NyArNDc4LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKIAogICAg
ICAgICAgICAgaWYgKGhhdmVGaXJzdE5hbWUpIHsKICAgICAgICAgICAgICAgICAvLyBjb21wYXJl
SW1hZ2VzIHdyaXRlcyByZXN1bHRzIHRvIHN0ZG91dCB1bmxlc3MgYW4gZXJyb3Igb2NjdXJyZWQu
Ci0gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmVJbWFnZXMoZmlyc3ROYW1lLCBzdGRpbkJ1ZmZl
cikgPT0gc3RhdHVzRXJyb3IpCisgICAgICAgICAgICAgICAgaWYgKGNvbXBhcmVJbWFnZXMoZmly
c3ROYW1lLCBzdGRpbkJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b21wYXJhdG9yKSA9PSBzdGF0dXNFcnJvcikKICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJl
cnJvclxuIik7CiAgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7CiAgICAgICAgICAgICAg
ICAgaGF2ZUZpcnN0TmFtZSA9IGZhbHNlOwpAQCAtMzk5LDkgKzQ5NSwxMCBAQCBpbnQgbWFpbihp
bnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQogCiAgICAgaWYgKGdlbmVyYXRlRGlmZikgewog
ICAgICAgICBpZiAodmFsdWVzLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgcmV0dXJuIGRpZmZJ
bWFnZXModmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSk7CisgICAgICAgICAgICByZXR1
cm4gZGlmZkltYWdlcyh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2hvdWxkV3JpdGVQZXJjZW50YWdlcywgY29tcGFyYXRvcik7
CiAgICAgfSBlbHNlIGlmICh2YWx1ZXMuc2l6ZSgpID09IDIpCi0gICAgICAgIHJldHVybiBjb21w
YXJlSW1hZ2VzKGFyZ3ZbMV0sIGFyZ3ZbMl0pOworICAgICAgICByZXR1cm4gY29tcGFyZUltYWdl
cyhhcmd2WzFdLCBhcmd2WzJdLCBjb21wYXJhdG9yKTsKIAogICAgIHByaW50SGVscCgpOwogICAg
IHJldHVybiBzdGF0dXNFcnJvcjsK
</data>

          </attachment>
      

    </bug>

</bugzilla>