<?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>44790</bug_id>
          
          <creation_ts>2010-08-27 13:12:52 -0700</creation_ts>
          <short_desc>Move UTF16 LEAD/TRAIL logic into the HTMLEntityParser</short_desc>
          <delta_ts>2010-08-29 23:55:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>270692</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-27 13:12:52 -0700</bug_when>
    <thetext>Move UTF16 LEAD/TRAIL logic into the HTMLEntityParser</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270694</commentid>
    <comment_count>1</comment_count>
      <attachid>65756</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-27 13:14:55 -0700</bug_when>
    <thetext>Created attachment 65756
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270758</commentid>
    <comment_count>2</comment_count>
      <attachid>65756</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-27 14:34:34 -0700</bug_when>
    <thetext>Comment on attachment 65756
Patch

WebCore/html/HTMLEntityParser.cpp:65
 +  inline bool convertToCharacters(unsigned value, Vector&lt;UChar&gt;&amp; decodedEntity)
I&apos;m confused why this returns a bool if it&apos;s always true.

WebCore/html/HTMLEntityParser.h:34
 +  bool consumeHTMLEntity(SegmentedString&amp;, Vector&lt;UChar&gt;&amp; decodedEntity, bool&amp; notEnoughCharacters, UChar additionalAllowedCharacter = &apos;\0&apos;);
This is always at most 2 chars.  Vector seems like overkill.

WebCore/html/HTMLTokenizer.cpp:122
 +      Vector&lt;UChar&gt; decodedEntity;
Inline capacity 2?

Using a vector here feels strange.  It makes sense in your possible future world if many-char entities, but not much for when we at most produce 2 utf16 code points.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270769</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-27 14:46:46 -0700</bug_when>
    <thetext>&gt; I&apos;m confused why this returns a bool if it&apos;s always true.

Just to make the callsites look snazzy.  We always want to return true after calling this function.

&gt; This is always at most 2 chars.  Vector seems like overkill.

Secretly I want to prepare for entities that expand to more than two characters.

&gt; WebCore/html/HTMLTokenizer.cpp:122
&gt;  +      Vector&lt;UChar&gt; decodedEntity;
&gt; Inline capacity 2?

Sure.

&gt; Using a vector here feels strange.  It makes sense in your possible future world if many-char entities, but not much for when we at most produce 2 utf16 code points.

Would you prefer UChar decodedEntity[2] ?  Generally, I like Vector because it makes sure we have memory safety.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271074</commentid>
    <comment_count>4</comment_count>
      <attachid>65756</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-28 16:10:54 -0700</bug_when>
    <thetext>Comment on attachment 65756
Patch

&gt; +        * html/HTMLEntityParser.cpp:
&gt; +        (WebCore::):
&gt; +        (WebCore::consumeHTMLEntity):

This list of function names is a bit strange. As you know, I am a big fan of per-function change log comments, but just removing the bogus function name might be enough. For some reason the new function&apos;s name is not here either.

&gt; +inline bool convertToCharacters(unsigned value, Vector&lt;UChar&gt;&amp; decodedEntity)

Functions defined and used within the same file should be marked static so they get internal linkage, unless this is inside an unnamed namespace. We have been using static rather than unnamed namespaces because tool support for unnamed namespaces was lacking, but perhaps you decided on the other path for this code?

The argument name &quot;value&quot; here is strange. We have a type UChar32 that we often use instead of unsigned for such things, by the way.

The name convertToCharacters is a bit unclear since this converts a Unicode character into a sequence of UTF-16 code units. It actually converts *from* a character. I think you should use a different name.

&gt; +    if (value &lt; 0xFFFF) {

Why &lt; here instead of &lt;=? The old code used &quot;&lt; 0xFFFF&quot; in one place and &quot;&gt; 0xFFFF&quot; in another, which is inconsistent.

ICU has the macro U_IS_BMP for this operation, which I think is slightly more explicit than doing the math directly.

&gt; +    Vector&lt;UChar&gt; decodedEntity;
&gt; +    bool success = consumeHTMLEntity(source, decodedEntity, notEnoughCharacters);

I don&apos;t know how hot this code path is, but if it&apos;s hot enough, we might want to use Vector&lt;UChar, 16&gt; for this instead of Vector&lt;UChar&gt; to avoid a memory allocation each time.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271119</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-28 22:27:47 -0700</bug_when>
    <thetext>Thanks for the comments.

&gt; &gt; +inline bool convertToCharacters(unsigned value, Vector&lt;UChar&gt;&amp; decodedEntity)
&gt; 
&gt; Functions defined and used within the same file should be marked static so they get internal linkage, unless this is inside an unnamed namespace. We have been using static rather than unnamed namespaces because tool support for unnamed namespaces was lacking, but perhaps you decided on the other path for this code?

Ah, I was under the impression that inline implies static.  I thought that&apos;s what one of the compiler gurus told me, but http://gcc.gnu.org/onlinedocs/gcc/Inline.html seems to imply that static is not redundant.  In this case, the code is inside an anonymous namespace.  I didn&apos;t know there were tooling issues with anonymous namespaces.  Maybe those tooling issues are out of date since we use anonymous namespaces in a bunch of places?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271299</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-29 23:11:12 -0700</bug_when>
    <thetext>Ok.  I think I&apos;ve addressed all your comments.  Let&apos;s see if the bot likes the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271300</commentid>
    <comment_count>7</comment_count>
      <attachid>65879</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-29 23:12:31 -0700</bug_when>
    <thetext>Created attachment 65879
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271310</commentid>
    <comment_count>8</comment_count>
      <attachid>65879</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-29 23:31:36 -0700</bug_when>
    <thetext>Comment on attachment 65879
Patch for landing

Clearing flags on attachment: 65879

Committed r66359: &lt;http://trac.webkit.org/changeset/66359&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271311</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-29 23:31:41 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271313</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-29 23:37:12 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/66359 might have broken Qt Linux Release minimal, Qt Linux ARMv5 Release, and Qt Linux ARMv7 Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/66360
http://trac.webkit.org/changeset/66359</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271321</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-29 23:55:59 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; http://trac.webkit.org/changeset/66359 might have broken Qt Linux Release minimal, Qt Linux ARMv5 Release, and Qt Linux ARMv7 Release

Thanks Darin.  I was working on a build fix, but yours is much nice.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65756</attachid>
            <date>2010-08-27 13:14:55 -0700</date>
            <delta_ts>2010-08-29 23:12:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44790-20100827131454.patch</filename>
            <type>text/plain</type>
            <size>14059</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5MmFlNWYxNDMwZmQ1Y2NkNzk5ZjVkMzQwNDRkYTNmYTRjOGQzOGM5Li5kOWJmYzgz
MDhiMzBkYmFlMGEyOWI0Mjk2Y2FjMzgwMTRhOWNiOGFhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMDgtMjcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIFVURjE2IExFQUQvVFJB
SUwgbG9naWMgaW50byB0aGUgSFRNTEVudGl0eVBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ3OTAKKworICAgICAgICBXZSBub3cgYmxvY2sg
dGhpcyBhdHRhY2suCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
amF2YXNjcmlwdC1saW5rLUhUTUwtZW50aXRpZXMtbnVsbC1jaGFyLWV4cGVjdGVkLnR4dDoKKwog
MjAxMC0wOC0yNiAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvamF2YXNjcmlwdC1saW5rLUhUTUwtZW50aXRp
ZXMtbnVsbC1jaGFyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkveHNzQXVkaXRvci9qYXZhc2NyaXB0LWxpbmstSFRNTC1lbnRpdGllcy1udWxsLWNoYXItZXhw
ZWN0ZWQudHh0CmluZGV4IGQyMzQ5YzRiZGE2NGRhOTA1NDkzMTQ3NGFiZWQ4OGI1MmFkMTRlYzQu
LjUxM2UyZjhkMDNmNzQyMDNhMzVlMGJlZWQxZmQ0M2I0MzI5MmRjMmYgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9qYXZhc2NyaXB0LWxpbmst
SFRNTC1lbnRpdGllcy1udWxsLWNoYXItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9qYXZhc2NyaXB0LWxpbmstSFRNTC1lbnRpdGll
cy1udWxsLWNoYXItZXhwZWN0ZWQudHh0CkBAIC0xLDIgKzEsMyBAQAotQ09OU09MRSBNRVNTQUdF
OiBsaW5lIDE6IFN5bnRheEVycm9yOiBQYXJzZSBlcnJvcgorQ09OU09MRSBNRVNTQUdFOiBsaW5l
IDE6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBv
ZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjNzAxN2IyMmJjNmZmMTI0Y2Y4YWU3
ZGMxNWQxOGJiOTdlNTJlNmM5Li5hOTUxMzZjMWZjOTZmNDdkZjFkZTgzMGRlODk3YTgzYzFlMzBj
YmUyIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIzIEBACisyMDEwLTA4LTI3ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TW92ZSBVVEYxNiBMRUFEL1RSQUlMIGxvZ2ljIGludG8gdGhlIEhUTUxFbnRpdHlQYXJzZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NzkwCisKKyAg
ICAgICAgTW92aW5nIHRoaXMgbG9naWMgaW50byB0aGUgcGFyc2VyIG1lYW5zIHRoYXQgY2xpZW50
cyBvZiB0aGUgQVBJIGRvbid0CisgICAgICAgIG5lZWQgdG8gZGVhbCB3aXRoIHRoaXMgbWVzc3kg
Yml0LgorCisgICAgICAgICogaHRtbC9IVE1MRW50aXR5UGFyc2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lSFRNTEVudGl0eSk6CisgICAgICAg
ICogaHRtbC9IVE1MRW50aXR5UGFyc2VyLmg6CisgICAgICAgICogaHRtbC9IVE1MVG9rZW5pemVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6OnByb2Nlc3NFbnRpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6bmV4dFRva2VuKToKKyAgICAgICAgKiBw
YWdlL1hTU0F1ZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZGVjb2Rl
SFRNTEVudGl0aWVzKToKKwogMjAxMC0wOC0yNyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxFbnRpdHlQYXJzZXIuY3BwIGIvV2ViQ29yZS9odG1s
L0hUTUxFbnRpdHlQYXJzZXIuY3BwCmluZGV4IGY2NzU4NDRhZGUwNGU5YThmOWU3NTRhNzUzMzRj
ZmVlYmJhMDJjZmQuLjIyZDNhNTFmZGFhNzcyZWQwODVlMDVlM2JmMWU0YWNmMzZjZDFkZjYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRW50aXR5UGFyc2VyLmNwcAorKysgYi9XZWJDb3Jl
L2h0bWwvSFRNTEVudGl0eVBhcnNlci5jcHAKQEAgLTYyLDYgKzYyLDE5IEBAIGlubGluZSB1bnNp
Z25lZCBsZWdhbEVudGl0eUZvcih1bnNpZ25lZCB2YWx1ZSkKICAgICByZXR1cm4gdmFsdWU7CiB9
CiAKK2lubGluZSBib29sIGNvbnZlcnRUb0NoYXJhY3RlcnModW5zaWduZWQgdmFsdWUsIFZlY3Rv
cjxVQ2hhcj4mIGRlY29kZWRFbnRpdHkpCit7CisgICAgaWYgKHZhbHVlIDwgMHhGRkZGKSB7Cisg
ICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0YXRpY19jYXN0PFVDaGFyPih2YWx1ZSk7CisgICAg
ICAgIEFTU0VSVChjaGFyYWN0ZXIgPT0gdmFsdWUpOworICAgICAgICBkZWNvZGVkRW50aXR5LmFw
cGVuZChjaGFyYWN0ZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZGVjb2Rl
ZEVudGl0eS5hcHBlbmQoVTE2X0xFQUQodmFsdWUpKTsKKyAgICBkZWNvZGVkRW50aXR5LmFwcGVu
ZChVMTZfVFJBSUwodmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogaW5saW5lIGJvb2wg
aXNIZXhEaWdpdChVQ2hhciBjYykKIHsKICAgICByZXR1cm4gKGNjID49ICcwJyAmJiBjYyA8PSAn
OScpIHx8IChjYyA+PSAnYScgJiYgY2MgPD0gJ2YnKSB8fCAoY2MgPj0gJ0EnICYmIGNjIDw9ICdG
Jyk7CkBAIC04NSwxNCArOTgsMTUgQEAgdm9pZCB1bmNvbnN1bWVDaGFyYWN0ZXJzKFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlLCBjb25zdCBWZWN0b3I8VUNoYXIsIDEwPiYgY29uc3UKIAogfQogCi11
bnNpZ25lZCBjb25zdW1lSFRNTEVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgYm9vbCYg
bm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIpCiti
b29sIGNvbnN1bWVIVE1MRW50aXR5KFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBWZWN0b3I8VUNo
YXI+JiBkZWNvZGVkRW50aXR5LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRp
dGlvbmFsQWxsb3dlZENoYXJhY3RlcikKIHsKICAgICBBU1NFUlQoIWFkZGl0aW9uYWxBbGxvd2Vk
Q2hhcmFjdGVyIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09ICciJyB8fCBhZGRpdGlv
bmFsQWxsb3dlZENoYXJhY3RlciA9PSAnXCcnIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVy
ID09ICc+Jyk7CiAgICAgQVNTRVJUKCFub3RFbm91Z2hDaGFyYWN0ZXJzKTsKKyAgICBBU1NFUlQo
ZGVjb2RlZEVudGl0eS5pc0VtcHR5KCkpOwogCiAgICAgZW51bSBFbnRpdHlTdGF0ZSB7CiAgICAg
ICAgIEluaXRpYWwsCi0gICAgICAgIE51bWJlclR5cGUsCisgICAgICAgIE51bWJlciwKICAgICAg
ICAgTWF5YmVIZXhMb3dlckNhc2VYLAogICAgICAgICBNYXliZUhleFVwcGVyQ2FzZVgsCiAgICAg
ICAgIEhleCwKQEAgLTEwOCwyMCArMTIyLDIwIEBAIHVuc2lnbmVkIGNvbnN1bWVIVE1MRW50aXR5
KFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVCiAg
ICAgICAgIHN3aXRjaCAoZW50aXR5U3RhdGUpIHsKICAgICAgICAgY2FzZSBJbml0aWFsOiB7CiAg
ICAgICAgICAgICBpZiAoY2MgPT0gJ1x4MDknIHx8IGNjID09ICdceDBBJyB8fCBjYyA9PSAnXHgw
QycgfHwgY2MgPT0gJyAnIHx8IGNjID09ICc8JyB8fCBjYyA9PSAnJicpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
aWYgKGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyICYmIGNjID09IGFkZGl0aW9uYWxBbGxvd2Vk
Q2hhcmFjdGVyKQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgIGlmIChjYyA9PSAnIycpIHsKLSAgICAgICAgICAgICAg
ICBlbnRpdHlTdGF0ZSA9IE51bWJlclR5cGU7CisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUg
PSBOdW1iZXI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAoKGNjID49ICdhJyAmJiBjYyA8PSAneicpIHx8IChjYyA+PSAnQScgJiYgY2MgPD0g
J1onKSkgewogICAgICAgICAgICAgICAgIGVudGl0eVN0YXRlID0gTmFtZWQ7CiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBjYXNlIE51bWJlclR5
cGU6IHsKKyAgICAgICAgY2FzZSBOdW1iZXI6IHsKICAgICAgICAgICAgIGlmIChjYyA9PSAneCcp
IHsKICAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IE1heWJlSGV4TG93ZXJDYXNlWDsKICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTEzNSw3ICsxNDksNyBAQCB1bnNpZ25lZCBjb25zdW1l
SFRNTEVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFj
dGVycywgVQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgc291cmNlLnB1c2goJyMnKTsKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTWF5YmVIZXhMb3dlckNh
c2VYOiB7CiAgICAgICAgICAgICBpZiAoaXNIZXhEaWdpdChjYykpIHsKQEAgLTE0NCw3ICsxNTgs
NyBAQCB1bnNpZ25lZCBjb25zdW1lSFRNTEVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwg
Ym9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVQogICAgICAgICAgICAgfQogICAgICAgICAgICAg
c291cmNlLnB1c2goJyMnKTsKICAgICAgICAgICAgIHNvdXJjZS5wdXNoKCd4Jyk7Ci0gICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIE1heWJlSGV4VXBwZXJDYXNlWDogewogICAgICAgICAgICAgaWYgKGlzSGV4RGln
aXQoY2MpKSB7CkBAIC0xNTMsNyArMTY3LDcgQEAgdW5zaWduZWQgY29uc3VtZUhUTUxFbnRpdHko
U2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFUKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHNvdXJjZS5wdXNoKCcjJyk7CiAgICAgICAgICAgICBz
b3VyY2UucHVzaCgnWCcpOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBIZXg6IHsKICAgICAgICAgICAgIGlm
IChjYyA+PSAnMCcgJiYgY2MgPD0gJzknKQpAQCAtMTYyLDIxICsxNzYsMjEgQEAgdW5zaWduZWQg
Y29uc3VtZUhUTUxFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIGJvb2wmIG5vdEVub3Vn
aENoYXJhY3RlcnMsIFUKICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxNiArIDEw
ICsgY2MgLSAnYSc7CiAgICAgICAgICAgICBlbHNlIGlmIChjYyA+PSAnQScgJiYgY2MgPD0gJ0Yn
KQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDE2ICsgMTAgKyBjYyAtICdBJzsK
LSAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc7JykgewotICAgICAgICAgICAgICAgIHNvdXJj
ZS5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbGVnYWxF
bnRpdHlGb3IocmVzdWx0KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHJl
dHVybiBsZWdhbEVudGl0eUZvcihyZXN1bHQpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgaWYgKGNjID09ICc7JykKKyAgICAgICAgICAgICAgICAgICAgc291cmNlLmFkdmFu
Y2VBbmRBU1NFUlQoY2MpOworICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9DaGFyYWN0
ZXJzKGxlZ2FsRW50aXR5Rm9yKHJlc3VsdCksIGRlY29kZWRFbnRpdHkpOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBEZWNpbWFsOiB7
CiAgICAgICAgICAgICBpZiAoY2MgPj0gJzAnICYmIGNjIDw9ICc5JykKICAgICAgICAgICAgICAg
ICByZXN1bHQgPSByZXN1bHQgKiAxMCArIGNjIC0gJzAnOwotICAgICAgICAgICAgZWxzZSBpZiAo
Y2MgPT0gJzsnKSB7Ci0gICAgICAgICAgICAgICAgc291cmNlLmFkdmFuY2VQYXN0Tm9uTmV3bGlu
ZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiBsZWdhbEVudGl0eUZvcihyZXN1bHQpOwotICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxlZ2FsRW50aXR5Rm9yKHJl
c3VsdCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJzsn
KQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UuYWR2YW5jZUFuZEFTU0VSVChjYyk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0NoYXJhY3RlcnMobGVnYWxFbnRpdHlGb3IocmVz
dWx0KSwgZGVjb2RlZEVudGl0eSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIE5hbWVkOiB7CkBAIC0xOTQsMTIgKzIwOCwxMiBAQCB1
bnNpZ25lZCBjb25zdW1lSFRNTEVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgYm9vbCYg
bm90RW5vdWdoQ2hhcmFjdGVycywgVQogICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGFuIGVu
dGl0eSBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIGEgbG9uZ2VyIGVudGl0eQogICAgICAgICAgICAg
ICAgIC8vIHRoYXQgd2UgY291bGQgbWF0Y2ggaWYgd2UgaGFkIG1vcmUgZGF0YS4KICAgICAgICAg
ICAgICAgICB1bmNvbnN1bWVDaGFyYWN0ZXJzKHNvdXJjZSwgY29uc3VtZWRDaGFyYWN0ZXJzKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIWVudGl0eVNlYXJjaC5tb3N0UmVjZW50
TWF0Y2goKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVCghZW50aXR5U2VhcmNoLmN1cnJlbnRW
YWx1ZSgpKTsKICAgICAgICAgICAgICAgICB1bmNvbnN1bWVDaGFyYWN0ZXJzKHNvdXJjZSwgY29u
c3VtZWRDaGFyYWN0ZXJzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoZW50aXR5
U2VhcmNoLm1vc3RSZWNlbnRNYXRjaCgpLT5sZW5ndGggIT0gZW50aXR5U2VhcmNoLmN1cnJlbnRM
ZW5ndGgoKSkgewogICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGNvbnN1bWVkIHRvbyBtYW55IGNo
YXJhY3RlcnMuICBXZSBuZWVkIHRvIHdhbGsgdGhlCkBAIC0yMTgsMTIgKzIzMiwxMyBAQCB1bnNp
Z25lZCBjb25zdW1lSFRNTEVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgYm9vbCYgbm90
RW5vdWdoQ2hhcmFjdGVycywgVQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBj
YyA9ICpzb3VyY2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZW50aXR5U2VhcmNo
Lm1vc3RSZWNlbnRNYXRjaCgpLT5sYXN0Q2hhcmFjdGVyKCkgPT0gJzsnKQotICAgICAgICAgICAg
ICAgIHJldHVybiBlbnRpdHlTZWFyY2gubW9zdFJlY2VudE1hdGNoKCktPnZhbHVlOwotICAgICAg
ICAgICAgaWYgKCFhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciB8fCAhKGlzQWxwaGFOdW1lcmlj
KGNjKSB8fCBjYyA9PSAnPScpKQotICAgICAgICAgICAgICAgIHJldHVybiBlbnRpdHlTZWFyY2gu
bW9zdFJlY2VudE1hdGNoKCktPnZhbHVlOworICAgICAgICAgICAgaWYgKGVudGl0eVNlYXJjaC5t
b3N0UmVjZW50TWF0Y2goKS0+bGFzdENoYXJhY3RlcigpID09ICc7JworICAgICAgICAgICAgICAg
IHx8ICFhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcgorICAgICAgICAgICAgICAgIHx8ICEoaXNB
bHBoYU51bWVyaWMoY2MpIHx8IGNjID09ICc9JykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y29udmVydFRvQ2hhcmFjdGVycyhlbnRpdHlTZWFyY2gubW9zdFJlY2VudE1hdGNoKCktPnZhbHVl
LCBkZWNvZGVkRW50aXR5KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHVuY29uc3VtZUNo
YXJhY3RlcnMoc291cmNlLCBjb25zdW1lZENoYXJhY3RlcnMpOwotICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICBjb25zdW1lZENoYXJhY3RlcnMuYXBwZW5kKGNjKTsKQEAgLTIzMiw3ICsyNDcsNyBAQCB1
bnNpZ25lZCBjb25zdW1lSFRNTEVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgYm9vbCYg
bm90RW5vdWdoQ2hhcmFjdGVycywgVQogICAgIEFTU0VSVChzb3VyY2UuaXNFbXB0eSgpKTsKICAg
ICBub3RFbm91Z2hDaGFyYWN0ZXJzID0gdHJ1ZTsKICAgICB1bmNvbnN1bWVDaGFyYWN0ZXJzKHNv
dXJjZSwgY29uc3VtZWRDaGFyYWN0ZXJzKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIFVDaGFyIGRlY29kZU5hbWVkRW50aXR5KGNvbnN0IGNoYXIqIG5hbWUpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEVudGl0eVBhcnNlci5oIGIvV2ViQ29yZS9odG1sL0hU
TUxFbnRpdHlQYXJzZXIuaAppbmRleCAxMDU5YjI0OTVhODBlODAwNjg3NmNlNjEzOTVhZjg3NTY3
OGRiMDkzLi5hZDI2YzVjMWQzMWI3MjdmMWM4ZmY2YjI0MzY0ZWY3Yzg1M2M5MTU5IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvSFRNTEVudGl0eVBhcnNlci5oCisrKyBiL1dlYkNvcmUvaHRtbC9I
VE1MRW50aXR5UGFyc2VyLmgKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi11bnNpZ25lZCBjb25zdW1lSFRNTEVudGl0eShTZWdtZW50ZWRTdHJpbmcmLCBib29sJiBu
b3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9ICdc
MCcpOworYm9vbCBjb25zdW1lSFRNTEVudGl0eShTZWdtZW50ZWRTdHJpbmcmLCBWZWN0b3I8VUNo
YXI+JiBkZWNvZGVkRW50aXR5LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRp
dGlvbmFsQWxsb3dlZENoYXJhY3RlciA9ICdcMCcpOwogCiAvLyBVc2VkIGJ5IHRoZSBYTUwgcGFy
c2VyLiAgTm90IHN1aXRhYmxlIGZvciB1c2UgaW4gSFRNTCBwYXJzaW5nLiAgVXNlIGNvbnN1bWVI
VE1MRW50aXR5IGluc3RlYWQuCiBVQ2hhciBkZWNvZGVOYW1lZEVudGl0eShjb25zdCBjaGFyKik7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5jcHAgYi9XZWJDb3JlL2h0
bWwvSFRNTFRva2VuaXplci5jcHAKaW5kZXggYTE4NzAxYTljMzFiZjJlYjQ0MjYzYmEyMTU2ZTJm
MTVjMTc4OGQ4My4uYzkxMWNkNGFhMjdhOTQ4MjAyMjZiN2UyMThlMzZmNjcyNDlhMmQ4MyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuY3BwCisrKyBiL1dlYkNvcmUvaHRt
bC9IVE1MVG9rZW5pemVyLmNwcApAQCAtMTE5LDEzICsxMTksMTggQEAgdm9pZCBIVE1MVG9rZW5p
emVyOjpyZXNldCgpCiBpbmxpbmUgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzRW50aXR5KFNl
Z21lbnRlZFN0cmluZyYgc291cmNlKQogewogICAgIGJvb2wgbm90RW5vdWdoQ2hhcmFjdGVycyA9
IGZhbHNlOwotICAgIHVuc2lnbmVkIHZhbHVlID0gY29uc3VtZUhUTUxFbnRpdHkoc291cmNlLCBu
b3RFbm91Z2hDaGFyYWN0ZXJzKTsKKyAgICBWZWN0b3I8VUNoYXI+IGRlY29kZWRFbnRpdHk7Cisg
ICAgYm9vbCBzdWNjZXNzID0gY29uc3VtZUhUTUxFbnRpdHkoc291cmNlLCBkZWNvZGVkRW50aXR5
LCBub3RFbm91Z2hDaGFyYWN0ZXJzKTsKICAgICBpZiAobm90RW5vdWdoQ2hhcmFjdGVycykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghdmFsdWUpCisgICAgaWYgKCFzdWNjZXNzKSB7
CisgICAgICAgIEFTU0VSVChkZWNvZGVkRW50aXR5LmlzRW1wdHkoKSk7CiAgICAgICAgIGJ1ZmZl
ckNoYXJhY3RlcignJicpOwotICAgIGVsc2UKLSAgICAgICAgYnVmZmVyQ29kZVBvaW50KHZhbHVl
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBWZWN0b3I8VUNoYXI+Ojpjb25zdF9pdGVyYXRvciBp
dGVyID0gZGVjb2RlZEVudGl0eS5iZWdpbigpOworICAgICAgICBmb3IgKDsgaXRlciAhPSBkZWNv
ZGVkRW50aXR5LmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICBidWZmZXJDaGFyYWN0ZXIoKml0
ZXIpOworICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTAyNywxNiArMTAzMiwxNyBA
QCBib29sIEhUTUxUb2tlbml6ZXI6Om5leHRUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwg
SFRNTFRva2VuJiB0b2tlbikKIAogICAgIEJFR0lOX1NUQVRFKENoYXJhY3RlclJlZmVyZW5jZUlu
QXR0cmlidXRlVmFsdWVTdGF0ZSkgewogICAgICAgICBib29sIG5vdEVub3VnaENoYXJhY3RlcnMg
PSBmYWxzZTsKLSAgICAgICAgdW5zaWduZWQgdmFsdWUgPSBjb25zdW1lSFRNTEVudGl0eShzb3Vy
Y2UsIG5vdEVub3VnaENoYXJhY3RlcnMsIG1fYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIpOwor
ICAgICAgICBWZWN0b3I8VUNoYXI+IGRlY29kZWRFbnRpdHk7CisgICAgICAgIGJvb2wgc3VjY2Vz
cyA9IGNvbnN1bWVIVE1MRW50aXR5KHNvdXJjZSwgZGVjb2RlZEVudGl0eSwgbm90RW5vdWdoQ2hh
cmFjdGVycywgbV9hZGRpdGlvbmFsQWxsb3dlZENoYXJhY3Rlcik7CiAgICAgICAgIGlmIChub3RF
bm91Z2hDaGFyYWN0ZXJzKQogICAgICAgICAgICAgcmV0dXJuIGhhdmVCdWZmZXJlZENoYXJhY3Rl
clRva2VuKCk7Ci0gICAgICAgIGlmICghdmFsdWUpCisgICAgICAgIGlmICghc3VjY2Vzcykgewor
ICAgICAgICAgICAgQVNTRVJUKGRlY29kZWRFbnRpdHkuaXNFbXB0eSgpKTsKICAgICAgICAgICAg
IG1fdG9rZW4tPmFwcGVuZFRvQXR0cmlidXRlVmFsdWUoJyYnKTsKLSAgICAgICAgZWxzZSBpZiAo
dmFsdWUgPCAweEZGRkYpCi0gICAgICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb0F0dHJpYnV0ZVZh
bHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtX3Rva2VuLT5hcHBlbmRU
b0F0dHJpYnV0ZVZhbHVlKFUxNl9MRUFEKHZhbHVlKSk7Ci0gICAgICAgICAgICBtX3Rva2VuLT5h
cHBlbmRUb0F0dHJpYnV0ZVZhbHVlKFUxNl9UUkFJTCh2YWx1ZSkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgVmVjdG9yPFVDaGFyPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRlY29k
ZWRFbnRpdHkuYmVnaW4oKTsKKyAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGRlY29kZWRFbnRp
dHkuZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb0F0dHJp
YnV0ZVZhbHVlKCppdGVyKTsKICAgICAgICAgfQogICAgICAgICAvLyBXZSdyZSBzdXBwb3NlZCB0
byBzd2l0Y2ggYmFjayB0byB0aGUgYXR0cmlidXRlIHZhbHVlIHN0YXRlIHRoYXQKICAgICAgICAg
Ly8gd2Ugd2VyZSBpbiB3aGVuIHdlIHdlcmUgc3dpdGNoZWQgaW50byB0aGlzIHN0YXRlLiAgUmF0
aGVyIHRoYW4KQEAgLTE2MzQsMTYgKzE2NDAsNiBAQCBpbmxpbmUgdm9pZCBIVE1MVG9rZW5pemVy
OjpidWZmZXJDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyKQogICAgIG1fdG9rZW4tPmFwcGVuZFRv
Q2hhcmFjdGVyKGNoYXJhY3Rlcik7CiB9CiAKLWlubGluZSB2b2lkIEhUTUxUb2tlbml6ZXI6OmJ1
ZmZlckNvZGVQb2ludCh1bnNpZ25lZCB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPCAweEZGRkYp
IHsKLSAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBidWZmZXJDaGFyYWN0ZXIoVTE2X0xFQUQodmFsdWUpKTsKLSAgICBidWZmZXJDaGFy
YWN0ZXIoVTE2X1RSQUlMKHZhbHVlKSk7Ci19Ci0KIGlubGluZSB2b2lkIEhUTUxUb2tlbml6ZXI6
OnBhcnNlRXJyb3IoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BhZ2UvWFNTQXVkaXRvci5jcHAgYi9XZWJDb3JlL3BhZ2UvWFNTQXVkaXRvci5jcHAKaW5k
ZXggZmIwZTFjMDk0ZmI3NGFmZjczMDcyNGQyOTg1NzY4MTRlYjJjOWI3ZC4uMTg5NThmYmU2OTIw
OGYzOWNjNzJkNjJmOGU0YmNkNDdiMjQxNjRiZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1hT
U0F1ZGl0b3IuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9YU1NBdWRpdG9yLmNwcApAQCAtMjc3LDE5
ICsyNzcsMTggQEAgU3RyaW5nIFhTU0F1ZGl0b3I6OmRlY29kZUhUTUxFbnRpdGllcyhjb25zdCBT
dHJpbmcmIHN0cmluZywgYm9vbCBsZWF2ZVVuZGVjb2RhYmwKICAgICAgICAgaWYgKGxlYXZlVW5k
ZWNvZGFibGVFbnRpdGllc1VudG91Y2hlZCkKICAgICAgICAgICAgIHNvdXJjZVNoYWRvdyA9IHNv
dXJjZTsKICAgICAgICAgYm9vbCBub3RFbm91Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0gICAgICAg
IHVuc2lnbmVkIGVudGl0eSA9IGNvbnN1bWVIVE1MRW50aXR5KHNvdXJjZSwgbm90RW5vdWdoQ2hh
cmFjdGVycyk7CisgICAgICAgIFZlY3RvcjxVQ2hhcj4gZGVjb2RlZEVudGl0eTsKKyAgICAgICAg
Ym9vbCBzdWNjZXNzID0gY29uc3VtZUhUTUxFbnRpdHkoc291cmNlLCBkZWNvZGVkRW50aXR5LCBu
b3RFbm91Z2hDaGFyYWN0ZXJzKTsKICAgICAgICAgLy8gV2UgaWdub3JlIG5vdEVub3VnaENoYXJh
Y3RlcnMgYmVjYXVzZSB3ZSBtaWdodCBhcyB3ZWxsIHVzZSB0aGlzIGxvb3AKICAgICAgICAgLy8g
dG8gY29weSB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgaW50byB8cmVzdWx0fC4KLQotICAgICAg
ICBpZiAoZW50aXR5ID4gMHhGRkZGKSB7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKFUxNl9M
RUFEKGVudGl0eSkpOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChVMTZfVFJBSUwoZW50aXR5
KSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZW50aXR5ICYmICghbGVhdmVVbmRlY29kYWJsZUVudGl0
aWVzVW50b3VjaGVkIHx8IGVudGl0eSAhPSAweEZGRkQpKXsKLSAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoZW50aXR5KTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFzdWNjZXNzIHx8
ICghbGVhdmVVbmRlY29kYWJsZUVudGl0aWVzVW50b3VjaGVkICYmIGRlY29kZWRFbnRpdHkuc2l6
ZSgpID09IDEgJiYgZGVjb2RlZEVudGl0eVswXSA9PSAweEZGRkQpKSB7CiAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcmJyk7CiAgICAgICAgICAgICBpZiAobGVhdmVVbmRlY29kYWJsZUVudGl0
aWVzVW50b3VjaGVkKQogICAgICAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZVNoYWRvdzsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZlY3RvcjxVQ2hhcj46OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBkZWNvZGVkRW50aXR5LmJlZ2luKCk7CisgICAgICAgICAgICBmb3IgKDsgaXRlciAh
PSBkZWNvZGVkRW50aXR5LmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgqaXRlcik7CiAgICAgICAgIH0KICAgICB9CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65879</attachid>
            <date>2010-08-29 23:12:31 -0700</date>
            <delta_ts>2010-08-29 23:31:36 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-44790-20100829231230.patch</filename>
            <type>text/plain</type>
            <size>14867</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmNwcAkocmV2aXNpb24g
NjYzNTcpCisrKyBXZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSwyMyArNDUsMzYgQEAgc3RhdGljIGNvbnN0IFVDaGFyIHdpbmRvd3NM
YXRpbjFFeHRlbnNpbwogICAgIDB4MDJEQywgMHgyMTIyLCAweDAxNjEsIDB4MjAzQSwgMHgwMTUz
LCAweDAwOUQsIDB4MDE3RSwgMHgwMTc4LCAvLyA5OC05RgogfTsKIAotaW5saW5lIFVDaGFyIGFk
anVzdEVudGl0eSh1bnNpZ25lZCB2YWx1ZSkKK2lubGluZSBVQ2hhciBhZGp1c3RFbnRpdHkoVUNo
YXIzMiB2YWx1ZSkKIHsKICAgICBpZiAoKHZhbHVlICYgfjB4MUYpICE9IDB4MDA4MCkKICAgICAg
ICAgcmV0dXJuIHZhbHVlOwogICAgIHJldHVybiB3aW5kb3dzTGF0aW4xRXh0ZW5zaW9uQXJyYXlb
dmFsdWUgLSAweDgwXTsKIH0KIAotaW5saW5lIHVuc2lnbmVkIGxlZ2FsRW50aXR5Rm9yKHVuc2ln
bmVkIHZhbHVlKQoraW5saW5lIFVDaGFyMzIgbGVnYWxFbnRpdHlGb3IoVUNoYXIzMiB2YWx1ZSkK
IHsKICAgICAvLyBGSVhNRTogQSBudW1iZXIgb2Ygc3BlY2lmaWMgZW50aXR5IHZhbHVlcyBnZW5l
cmF0ZSBwYXJzZSBlcnJvcnMuCiAgICAgaWYgKHZhbHVlID09IDAgfHwgdmFsdWUgPiAweDEwRkZG
RiB8fCAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REZGRikpCiAgICAgICAgIHJldHVy
biAweEZGRkQ7Ci0gICAgaWYgKHZhbHVlIDwgMHhGRkZGKQorICAgIGlmIChVX0lTX0JNUCh2YWx1
ZSkpCiAgICAgICAgIHJldHVybiBhZGp1c3RFbnRpdHkodmFsdWUpOwogICAgIHJldHVybiB2YWx1
ZTsKIH0KIAoraW5saW5lIGJvb2wgY29udmVydFRvVVRGMTYoVUNoYXIzMiB2YWx1ZSwgVmVjdG9y
PFVDaGFyLCAxNj4mIGRlY29kZWRFbnRpdHkpCit7CisgICAgaWYgKFVfSVNfQk1QKHZhbHVlKSkg
eworICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBzdGF0aWNfY2FzdDxVQ2hhcj4odmFsdWUpOwor
ICAgICAgICBBU1NFUlQoY2hhcmFjdGVyID09IHZhbHVlKTsKKyAgICAgICAgZGVjb2RlZEVudGl0
eS5hcHBlbmQoY2hhcmFjdGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGRl
Y29kZWRFbnRpdHkuYXBwZW5kKFUxNl9MRUFEKHZhbHVlKSk7CisgICAgZGVjb2RlZEVudGl0eS5h
cHBlbmQoVTE2X1RSQUlMKHZhbHVlKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGlubGluZSBi
b29sIGlzSGV4RGlnaXQoVUNoYXIgY2MpCiB7CiAgICAgcmV0dXJuIChjYyA+PSAnMCcgJiYgY2Mg
PD0gJzknKSB8fCAoY2MgPj0gJ2EnICYmIGNjIDw9ICdmJykgfHwgKGNjID49ICdBJyAmJiBjYyA8
PSAnRicpOwpAQCAtODUsMTQgKzk4LDE1IEBAIHZvaWQgdW5jb25zdW1lQ2hhcmFjdGVycyhTZWdt
ZW50ZWRTdHJpbmcKIAogfQogCi11bnNpZ25lZCBjb25zdW1lSFRNTEVudGl0eShTZWdtZW50ZWRT
dHJpbmcmIHNvdXJjZSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25h
bEFsbG93ZWRDaGFyYWN0ZXIpCitib29sIGNvbnN1bWVIVE1MRW50aXR5KFNlZ21lbnRlZFN0cmlu
ZyYgc291cmNlLCBWZWN0b3I8VUNoYXIsIDE2PiYgZGVjb2RlZEVudGl0eSwgYm9vbCYgbm90RW5v
dWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIpCiB7CiAgICAg
QVNTRVJUKCFhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciB8fCBhZGRpdGlvbmFsQWxsb3dlZENo
YXJhY3RlciA9PSAnIicgfHwgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPT0gJ1wnJyB8fCBh
ZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9PSAnPicpOwogICAgIEFTU0VSVCghbm90RW5vdWdo
Q2hhcmFjdGVycyk7CisgICAgQVNTRVJUKGRlY29kZWRFbnRpdHkuaXNFbXB0eSgpKTsKIAogICAg
IGVudW0gRW50aXR5U3RhdGUgewogICAgICAgICBJbml0aWFsLAotICAgICAgICBOdW1iZXJUeXBl
LAorICAgICAgICBOdW1iZXIsCiAgICAgICAgIE1heWJlSGV4TG93ZXJDYXNlWCwKICAgICAgICAg
TWF5YmVIZXhVcHBlckNhc2VYLAogICAgICAgICBIZXgsCkBAIC0xMDAsNyArMTE0LDcgQEAgdW5z
aWduZWQgY29uc3VtZUhUTUxFbnRpdHkoU2VnbWVudGVkU3RyaQogICAgICAgICBOYW1lZAogICAg
IH07CiAgICAgRW50aXR5U3RhdGUgZW50aXR5U3RhdGUgPSBJbml0aWFsOwotICAgIHVuc2lnbmVk
IHJlc3VsdCA9IDA7CisgICAgVUNoYXIzMiByZXN1bHQgPSAwOwogICAgIFZlY3RvcjxVQ2hhciwg
MTA+IGNvbnN1bWVkQ2hhcmFjdGVyczsKIAogICAgIHdoaWxlICghc291cmNlLmlzRW1wdHkoKSkg
ewpAQCAtMTA4LDIwICsxMjIsMjAgQEAgdW5zaWduZWQgY29uc3VtZUhUTUxFbnRpdHkoU2VnbWVu
dGVkU3RyaQogICAgICAgICBzd2l0Y2ggKGVudGl0eVN0YXRlKSB7CiAgICAgICAgIGNhc2UgSW5p
dGlhbDogewogICAgICAgICAgICAgaWYgKGNjID09ICdceDA5JyB8fCBjYyA9PSAnXHgwQScgfHwg
Y2MgPT0gJ1x4MEMnIHx8IGNjID09ICcgJyB8fCBjYyA9PSAnPCcgfHwgY2MgPT0gJyYnKQotICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIGlmIChhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciAmJiBjYyA9PSBhZGRpdGlv
bmFsQWxsb3dlZENoYXJhY3RlcikKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBpZiAoY2MgPT0gJyMnKSB7Ci0gICAg
ICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBOdW1iZXJUeXBlOworICAgICAgICAgICAgICAgIGVu
dGl0eVN0YXRlID0gTnVtYmVyOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKChjYyA+PSAnYScgJiYgY2MgPD0gJ3onKSB8fCAoY2MgPj0gJ0En
ICYmIGNjIDw9ICdaJykpIHsKICAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IE5hbWVkOwog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBOdW1iZXJUeXBlOiB7CisgICAgICAgIGNhc2UgTnVtYmVyOiB7CiAgICAgICAgICAgICBpZiAo
Y2MgPT0gJ3gnKSB7CiAgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBNYXliZUhleExvd2Vy
Q2FzZVg7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzUsNyArMTQ5LDcgQEAgdW5zaWdu
ZWQgY29uc3VtZUhUTUxFbnRpdHkoU2VnbWVudGVkU3RyaQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc291cmNlLnB1c2goJyMnKTsKLSAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgTWF5YmVIZXhMb3dlckNhc2VYOiB7CiAgICAgICAgICAgICBpZiAoaXNIZXhE
aWdpdChjYykpIHsKQEAgLTE0NCw3ICsxNTgsNyBAQCB1bnNpZ25lZCBjb25zdW1lSFRNTEVudGl0
eShTZWdtZW50ZWRTdHJpCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzb3VyY2UucHVzaCgn
IycpOwogICAgICAgICAgICAgc291cmNlLnB1c2goJ3gnKTsKLSAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTWF5
YmVIZXhVcHBlckNhc2VYOiB7CiAgICAgICAgICAgICBpZiAoaXNIZXhEaWdpdChjYykpIHsKQEAg
LTE1Myw3ICsxNjcsNyBAQCB1bnNpZ25lZCBjb25zdW1lSFRNTEVudGl0eShTZWdtZW50ZWRTdHJp
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzb3VyY2UucHVzaCgnIycpOwogICAgICAgICAg
ICAgc291cmNlLnB1c2goJ1gnKTsKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgSGV4OiB7CiAgICAgICAgICAg
ICBpZiAoY2MgPj0gJzAnICYmIGNjIDw9ICc5JykKQEAgLTE2MiwyMSArMTc2LDIxIEBAIHVuc2ln
bmVkIGNvbnN1bWVIVE1MRW50aXR5KFNlZ21lbnRlZFN0cmkKICAgICAgICAgICAgICAgICByZXN1
bHQgPSByZXN1bHQgKiAxNiArIDEwICsgY2MgLSAnYSc7CiAgICAgICAgICAgICBlbHNlIGlmIChj
YyA+PSAnQScgJiYgY2MgPD0gJ0YnKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAq
IDE2ICsgMTAgKyBjYyAtICdBJzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc7Jykgewot
ICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbGVnYWxFbnRpdHlGb3IocmVzdWx0KTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIHJldHVybiBsZWdhbEVudGl0eUZvcihyZXN1bHQpOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNjID09ICc7JykKKyAgICAgICAgICAg
ICAgICAgICAgc291cmNlLmFkdmFuY2VBbmRBU1NFUlQoY2MpOworICAgICAgICAgICAgICAgIHJl
dHVybiBjb252ZXJ0VG9VVEYxNihsZWdhbEVudGl0eUZvcihyZXN1bHQpLCBkZWNvZGVkRW50aXR5
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgRGVjaW1hbDogewogICAgICAgICAgICAgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScp
CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMTAgKyBjYyAtICcwJzsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKGNjID09ICc7JykgewotICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZh
bmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbGVnYWxFbnRpdHlG
b3IocmVzdWx0KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBs
ZWdhbEVudGl0eUZvcihyZXN1bHQpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgaWYgKGNjID09ICc7JykKKyAgICAgICAgICAgICAgICAgICAgc291cmNlLmFkdmFuY2VBbmRB
U1NFUlQoY2MpOworICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9VVEYxNihsZWdhbEVu
dGl0eUZvcihyZXN1bHQpLCBkZWNvZGVkRW50aXR5KTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTmFtZWQ6IHsKQEAgLTE5NCwxMiAr
MjA4LDEyIEBAIHVuc2lnbmVkIGNvbnN1bWVIVE1MRW50aXR5KFNlZ21lbnRlZFN0cmkKICAgICAg
ICAgICAgICAgICAvLyBXZSBjYW4ndCBhbiBlbnRpdHkgYmVjYXVzZSB0aGVyZSBtaWdodCBiZSBh
IGxvbmdlciBlbnRpdHkKICAgICAgICAgICAgICAgICAvLyB0aGF0IHdlIGNvdWxkIG1hdGNoIGlm
IHdlIGhhZCBtb3JlIGRhdGEuCiAgICAgICAgICAgICAgICAgdW5jb25zdW1lQ2hhcmFjdGVycyhz
b3VyY2UsIGNvbnN1bWVkQ2hhcmFjdGVycyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKCFlbnRpdHlTZWFyY2gubW9zdFJlY2VudE1hdGNoKCkpIHsKICAgICAgICAgICAgICAgICBB
U1NFUlQoIWVudGl0eVNlYXJjaC5jdXJyZW50VmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgdW5j
b25zdW1lQ2hhcmFjdGVycyhzb3VyY2UsIGNvbnN1bWVkQ2hhcmFjdGVycyk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKGVudGl0eVNlYXJjaC5tb3N0UmVjZW50TWF0Y2goKS0+bGVu
Z3RoICE9IGVudGl0eVNlYXJjaC5jdXJyZW50TGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICAv
LyBXZSd2ZSBjb25zdW1lZCB0b28gbWFueSBjaGFyYWN0ZXJzLiAgV2UgbmVlZCB0byB3YWxrIHRo
ZQpAQCAtMjE4LDEyICsyMzIsMTMgQEAgdW5zaWduZWQgY29uc3VtZUhUTUxFbnRpdHkoU2VnbWVu
dGVkU3RyaQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYyA9ICpzb3VyY2U7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZW50aXR5U2VhcmNoLm1vc3RSZWNlbnRN
YXRjaCgpLT5sYXN0Q2hhcmFjdGVyKCkgPT0gJzsnKQotICAgICAgICAgICAgICAgIHJldHVybiBl
bnRpdHlTZWFyY2gubW9zdFJlY2VudE1hdGNoKCktPnZhbHVlOwotICAgICAgICAgICAgaWYgKCFh
ZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciB8fCAhKGlzQWxwaGFOdW1lcmljKGNjKSB8fCBjYyA9
PSAnPScpKQotICAgICAgICAgICAgICAgIHJldHVybiBlbnRpdHlTZWFyY2gubW9zdFJlY2VudE1h
dGNoKCktPnZhbHVlOworICAgICAgICAgICAgaWYgKGVudGl0eVNlYXJjaC5tb3N0UmVjZW50TWF0
Y2goKS0+bGFzdENoYXJhY3RlcigpID09ICc7JworICAgICAgICAgICAgICAgIHx8ICFhZGRpdGlv
bmFsQWxsb3dlZENoYXJhY3RlcgorICAgICAgICAgICAgICAgIHx8ICEoaXNBbHBoYU51bWVyaWMo
Y2MpIHx8IGNjID09ICc9JykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvVVRG
MTYoZW50aXR5U2VhcmNoLm1vc3RSZWNlbnRNYXRjaCgpLT52YWx1ZSwgZGVjb2RlZEVudGl0eSk7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICB1bmNvbnN1bWVDaGFyYWN0ZXJzKHNvdXJjZSwg
Y29uc3VtZWRDaGFyYWN0ZXJzKTsKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgY29uc3VtZWRDaGFy
YWN0ZXJzLmFwcGVuZChjYyk7CkBAIC0yMzIsNyArMjQ3LDcgQEAgdW5zaWduZWQgY29uc3VtZUhU
TUxFbnRpdHkoU2VnbWVudGVkU3RyaQogICAgIEFTU0VSVChzb3VyY2UuaXNFbXB0eSgpKTsKICAg
ICBub3RFbm91Z2hDaGFyYWN0ZXJzID0gdHJ1ZTsKICAgICB1bmNvbnN1bWVDaGFyYWN0ZXJzKHNv
dXJjZSwgY29uc3VtZWRDaGFyYWN0ZXJzKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIFVDaGFyIGRlY29kZU5hbWVkRW50aXR5KGNvbnN0IGNoYXIqIG5hbWUpCkluZGV4
OiBXZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuaAkocmV2aXNpb24gNjYzNTcpCisr
KyBXZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVuc2lnbmVkIGNvbnN1
bWVIVE1MRW50aXR5KFNlZ21lbnRlZFN0cmluZyYsIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMs
IFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID0gJ1wwJyk7Citib29sIGNvbnN1bWVI
VE1MRW50aXR5KFNlZ21lbnRlZFN0cmluZyYsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkRW50
aXR5LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENo
YXJhY3RlciA9ICdcMCcpOwogCiAvLyBVc2VkIGJ5IHRoZSBYTUwgcGFyc2VyLiAgTm90IHN1aXRh
YmxlIGZvciB1c2UgaW4gSFRNTCBwYXJzaW5nLiAgVXNlIGNvbnN1bWVIVE1MRW50aXR5IGluc3Rl
YWQuCiBVQ2hhciBkZWNvZGVOYW1lZEVudGl0eShjb25zdCBjaGFyKik7CkluZGV4OiBXZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlTZWFyY2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxFbnRpdHlTZWFyY2guaAkocmV2aXNpb24gNjYzNTcpCisrKyBXZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlTZWFyY2guaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyAr
MzksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZHZhbmNlKFVDaGFyKTsKIAogICAgIGJvb2wgaXNF
bnRpdHlQcmVmaXgoKSBjb25zdCB7IHJldHVybiAhIW1fZmlyc3Q7IH0KLSAgICBpbnQgY3VycmVu
dFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VmFsdWU7IH0KKyAgICBVQ2hhcjMyIGN1
cnJlbnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFZhbHVlOyB9CiAgICAgaW50IGN1
cnJlbnRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRMZW5ndGg7IH0KIAogICAgIGNv
bnN0IEhUTUxFbnRpdHlUYWJsZUVudHJ5KiBtb3N0UmVjZW50TWF0Y2goKSBjb25zdCB7IHJldHVy
biBtX21vc3RSZWNlbnRNYXRjaDsgfQpAQCAtNjMsNyArNjMsNyBAQCBwcml2YXRlOgogICAgIH0K
IAogICAgIGludCBtX2N1cnJlbnRMZW5ndGg7Ci0gICAgaW50IG1fY3VycmVudFZhbHVlOworICAg
IFVDaGFyMzIgbV9jdXJyZW50VmFsdWU7CiAKICAgICBjb25zdCBIVE1MRW50aXR5VGFibGVFbnRy
eSogbV9tb3N0UmVjZW50TWF0Y2g7CiAgICAgY29uc3QgSFRNTEVudGl0eVRhYmxlRW50cnkqIG1f
Zmlyc3Q7CkluZGV4OiBXZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlUYWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0eVRhYmxlLmgJKHJldmlzaW9u
IDY2MzU3KQorKysgV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5VGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBzdHJ1Y3QgSFRNTEVudGl0eVRhYmxlRW50cnkgewog
CiAgICAgY29uc3QgVUNoYXIqIGVudGl0eTsKICAgICBpbnQgbGVuZ3RoOwotICAgIGludCB2YWx1
ZTsKKyAgICBVQ2hhcjMyIHZhbHVlOwogfTsKIAogY2xhc3MgSFRNTEVudGl0eVRhYmxlIHsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW5pemVyLmNwcAkocmV2aXNpb24gNjYzNTcpCisr
KyBXZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTksMTMgKzExOSwxOCBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnJlc2V0KCkKIGlubGluZSBi
b29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2Up
CiB7CiAgICAgYm9vbCBub3RFbm91Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0gICAgdW5zaWduZWQg
dmFsdWUgPSBjb25zdW1lSFRNTEVudGl0eShzb3VyY2UsIG5vdEVub3VnaENoYXJhY3RlcnMpOwor
ICAgIFZlY3RvcjxVQ2hhciwgMTY+IGRlY29kZWRFbnRpdHk7CisgICAgYm9vbCBzdWNjZXNzID0g
Y29uc3VtZUhUTUxFbnRpdHkoc291cmNlLCBkZWNvZGVkRW50aXR5LCBub3RFbm91Z2hDaGFyYWN0
ZXJzKTsKICAgICBpZiAobm90RW5vdWdoQ2hhcmFjdGVycykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmICghdmFsdWUpCisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIEFTU0VSVChk
ZWNvZGVkRW50aXR5LmlzRW1wdHkoKSk7CiAgICAgICAgIGJ1ZmZlckNoYXJhY3RlcignJicpOwot
ICAgIGVsc2UKLSAgICAgICAgYnVmZmVyQ29kZVBvaW50KHZhbHVlKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBWZWN0b3I8VUNoYXI+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZGVjb2RlZEVudGl0
eS5iZWdpbigpOworICAgICAgICBmb3IgKDsgaXRlciAhPSBkZWNvZGVkRW50aXR5LmVuZCgpOyAr
K2l0ZXIpCisgICAgICAgICAgICBidWZmZXJDaGFyYWN0ZXIoKml0ZXIpOworICAgIH0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTAyNywxNiArMTAzMiwxNyBAQCBib29sIEhUTUxUb2tlbml6
ZXI6Om5leHRUb2tlbihTZWdtZW50ZWRTCiAKICAgICBCRUdJTl9TVEFURShDaGFyYWN0ZXJSZWZl
cmVuY2VJbkF0dHJpYnV0ZVZhbHVlU3RhdGUpIHsKICAgICAgICAgYm9vbCBub3RFbm91Z2hDaGFy
YWN0ZXJzID0gZmFsc2U7Ci0gICAgICAgIHVuc2lnbmVkIHZhbHVlID0gY29uc3VtZUhUTUxFbnRp
dHkoc291cmNlLCBub3RFbm91Z2hDaGFyYWN0ZXJzLCBtX2FkZGl0aW9uYWxBbGxvd2VkQ2hhcmFj
dGVyKTsKKyAgICAgICAgVmVjdG9yPFVDaGFyLCAxNj4gZGVjb2RlZEVudGl0eTsKKyAgICAgICAg
Ym9vbCBzdWNjZXNzID0gY29uc3VtZUhUTUxFbnRpdHkoc291cmNlLCBkZWNvZGVkRW50aXR5LCBu
b3RFbm91Z2hDaGFyYWN0ZXJzLCBtX2FkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKTsKICAgICAg
ICAgaWYgKG5vdEVub3VnaENoYXJhY3RlcnMpCiAgICAgICAgICAgICByZXR1cm4gaGF2ZUJ1ZmZl
cmVkQ2hhcmFjdGVyVG9rZW4oKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgaWYgKCFz
dWNjZXNzKSB7CisgICAgICAgICAgICBBU1NFUlQoZGVjb2RlZEVudGl0eS5pc0VtcHR5KCkpOwog
ICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZSgnJicpOwotICAgICAg
ICBlbHNlIGlmICh2YWx1ZSA8IDB4RkZGRikKLSAgICAgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRv
QXR0cmlidXRlVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1fdG9r
ZW4tPmFwcGVuZFRvQXR0cmlidXRlVmFsdWUoVTE2X0xFQUQodmFsdWUpKTsKLSAgICAgICAgICAg
IG1fdG9rZW4tPmFwcGVuZFRvQXR0cmlidXRlVmFsdWUoVTE2X1RSQUlMKHZhbHVlKSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWZWN0b3I8VUNoYXI+Ojpjb25zdF9pdGVyYXRvciBp
dGVyID0gZGVjb2RlZEVudGl0eS5iZWdpbigpOworICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0g
ZGVjb2RlZEVudGl0eS5lbmQoKTsgKytpdGVyKQorICAgICAgICAgICAgICAgIG1fdG9rZW4tPmFw
cGVuZFRvQXR0cmlidXRlVmFsdWUoKml0ZXIpOwogICAgICAgICB9CiAgICAgICAgIC8vIFdlJ3Jl
IHN1cHBvc2VkIHRvIHN3aXRjaCBiYWNrIHRvIHRoZSBhdHRyaWJ1dGUgdmFsdWUgc3RhdGUgdGhh
dAogICAgICAgICAvLyB3ZSB3ZXJlIGluIHdoZW4gd2Ugd2VyZSBzd2l0Y2hlZCBpbnRvIHRoaXMg
c3RhdGUuICBSYXRoZXIgdGhhbgpAQCAtMTYzNCwxNiArMTY0MCw2IEBAIGlubGluZSB2b2lkIEhU
TUxUb2tlbml6ZXI6OmJ1ZmZlckNoYXJhY3QKICAgICBtX3Rva2VuLT5hcHBlbmRUb0NoYXJhY3Rl
cihjaGFyYWN0ZXIpOwogfQogCi1pbmxpbmUgdm9pZCBIVE1MVG9rZW5pemVyOjpidWZmZXJDb2Rl
UG9pbnQodW5zaWduZWQgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlIDwgMHhGRkZGKSB7Ci0gICAg
ICAgIGJ1ZmZlckNoYXJhY3Rlcih2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
YnVmZmVyQ2hhcmFjdGVyKFUxNl9MRUFEKHZhbHVlKSk7Ci0gICAgYnVmZmVyQ2hhcmFjdGVyKFUx
Nl9UUkFJTCh2YWx1ZSkpOwotfQotCiBpbmxpbmUgdm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZUVy
cm9yKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogV2ViQ29yZS9wYWdlL1hTU0F1
ZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9YU1NBdWRpdG9yLmNwcAkocmV2
aXNpb24gNjYzNTcpCisrKyBXZWJDb3JlL3BhZ2UvWFNTQXVkaXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3NywxOSArMjc3LDE4IEBAIFN0cmluZyBYU1NBdWRpdG9yOjpkZWNvZGVIVE1MRW50
aXRpZXMoY28KICAgICAgICAgaWYgKGxlYXZlVW5kZWNvZGFibGVFbnRpdGllc1VudG91Y2hlZCkK
ICAgICAgICAgICAgIHNvdXJjZVNoYWRvdyA9IHNvdXJjZTsKICAgICAgICAgYm9vbCBub3RFbm91
Z2hDaGFyYWN0ZXJzID0gZmFsc2U7Ci0gICAgICAgIHVuc2lnbmVkIGVudGl0eSA9IGNvbnN1bWVI
VE1MRW50aXR5KHNvdXJjZSwgbm90RW5vdWdoQ2hhcmFjdGVycyk7CisgICAgICAgIFZlY3RvcjxV
Q2hhciwgMTY+IGRlY29kZWRFbnRpdHk7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGNvbnN1bWVI
VE1MRW50aXR5KHNvdXJjZSwgZGVjb2RlZEVudGl0eSwgbm90RW5vdWdoQ2hhcmFjdGVycyk7CiAg
ICAgICAgIC8vIFdlIGlnbm9yZSBub3RFbm91Z2hDaGFyYWN0ZXJzIGJlY2F1c2Ugd2UgbWlnaHQg
YXMgd2VsbCB1c2UgdGhpcyBsb29wCiAgICAgICAgIC8vIHRvIGNvcHkgdGhlIHJlbWFpbmluZyBj
aGFyYWN0ZXJzIGludG8gfHJlc3VsdHwuCi0KLSAgICAgICAgaWYgKGVudGl0eSA+IDB4RkZGRikg
ewotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChVMTZfTEVBRChlbnRpdHkpKTsKLSAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoVTE2X1RSQUlMKGVudGl0eSkpOwotICAgICAgICB9IGVsc2UgaWYg
KGVudGl0eSAmJiAoIWxlYXZlVW5kZWNvZGFibGVFbnRpdGllc1VudG91Y2hlZCB8fCBlbnRpdHkg
IT0gMHhGRkZEKSl7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGVudGl0eSk7Ci0gICAgICAg
IH0gZWxzZSB7CisgICAgICAgIGlmICghc3VjY2VzcyB8fCAoIWxlYXZlVW5kZWNvZGFibGVFbnRp
dGllc1VudG91Y2hlZCAmJiBkZWNvZGVkRW50aXR5LnNpemUoKSA9PSAxICYmIGRlY29kZWRFbnRp
dHlbMF0gPT0gMHhGRkZEKSkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnJicpOwogICAg
ICAgICAgICAgaWYgKGxlYXZlVW5kZWNvZGFibGVFbnRpdGllc1VudG91Y2hlZCkKICAgICAgICAg
ICAgICAgICBzb3VyY2UgPSBzb3VyY2VTaGFkb3c7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBWZWN0b3I8VUNoYXI+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZGVjb2RlZEVudGl0eS5i
ZWdpbigpOworICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZGVjb2RlZEVudGl0eS5lbmQoKTsg
KytpdGVyKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKml0ZXIpOwogICAgICAgICB9
CiAgICAgfQogICAgIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjYzNTcpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAxMC0wOC0yOSAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgorCisgICAgICAgIE1vdmUgVVRGMTYgTEVBRC9UUkFJTCBsb2dpYyBpbnRvIHRoZSBI
VE1MRW50aXR5UGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NDc5MAorCisgICAgICAgIFdlIG5vdyBibG9jayB0aGlzIGF0dGFjay4KKworICAg
ICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9qYXZhc2NyaXB0LWxpbmstSFRN
TC1lbnRpdGllcy1udWxsLWNoYXItZXhwZWN0ZWQudHh0OgorCisyMDEwLTA4LTI5ICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCisKKyAgICAgICAgTW92ZSBVVEYxNiBMRUFEL1RSQUlMIGxvZ2ljIGludG8gdGhlIEhUTUxF
bnRpdHlQYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ0NzkwCisKKyAgICAgICAgV2Ugbm93IGJsb2NrIHRoaXMgYXR0YWNrLgorCisgICAgICAg
ICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2phdmFzY3JpcHQtbGluay1IVE1MLWVu
dGl0aWVzLW51bGwtY2hhci1leHBlY3RlZC50eHQ6CisKIDIwMTAtMDgtMjkgIFl1em8gRnVqaXNo
aW1hICA8eXV6b0Bnb29nbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgQ2hyb21pdW0gdGVz
dCBleHBlY3RhdGlvbiBjaGFuZ2UgZm9yIHI2NjI4Mi4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9qYXZhc2NyaXB0LWxpbmstSFRNTC1lbnRpdGllcy1u
dWxsLWNoYXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvc2VjdXJpdHkveHNzQXVkaXRvci9qYXZhc2NyaXB0LWxpbmstSFRNTC1lbnRpdGllcy1udWxs
LWNoYXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2NjM1NykKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9qYXZhc2NyaXB0LWxpbmstSFRNTC1lbnRpdGllcy1u
dWxsLWNoYXItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDIgKzEsMyBAQAotQ09O
U09MRSBNRVNTQUdFOiBsaW5lIDE6IFN5bnRheEVycm9yOiBQYXJzZSBlcnJvcgorQ09OU09MRSBN
RVNTQUdFOiBsaW5lIDE6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBT
b3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>