<?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>107513</bug_id>
          
          <creation_ts>2013-01-22 00:35:48 -0800</creation_ts>
          <short_desc>AtomicMarkupTokenBase must die</short_desc>
          <delta_ts>2013-01-22 02:27:54 -0800</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>
          
          <blocked>107522</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>812713</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-22 00:35:48 -0800</bug_when>
    <thetext>AtomicMarkupTokenBase must die</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812714</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-22 00:36:32 -0800</bug_when>
    <thetext>Amen, brother.  Amen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812728</commentid>
    <comment_count>2</comment_count>
      <attachid>183911</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-22 00:46:07 -0800</bug_when>
    <thetext>Created attachment 183911
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812743</commentid>
    <comment_count>3</comment_count>
      <attachid>183911</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-22 01:04:05 -0800</bug_when>
    <thetext>Comment on attachment 183911
Patch

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

Just a couple nits.  Most of them don&apos;t apply to this patch even. :)

&gt; Source/WebCore/html/parser/HTMLToken.h:145
&gt; +    bool isAll8BitData() const
&gt; +    {
&gt; +        return m_isAll8BitData;
&gt; +    }

I think I would have written this function named &quot;dataIsAll8Bit()&quot; :) to make it clear that it&apos;s only talking about the data member. :)  Obviously that&apos;s a separate patch here.  Just idly commenting.

&gt; Source/WebCore/html/parser/HTMLToken.h:158
&gt; +    // FIXME: Distinguish between a missing public identifer and an empty one.
&gt; +    WTF::Vector&lt;UChar&gt;&amp; publicIdentifier() const
&gt; +    {
&gt; +        ASSERT(m_type == HTMLTokenTypes::DOCTYPE);
&gt; +        return m_doctypeData-&gt;m_publicIdentifier;
&gt; +    }

There is no reason to make these fancy vectors anyway.  There is 1 DOCTYPE node per document. :)  We can make our handling of it as inefficient as we like. :)  We&apos;re not saving anything by using fancy vector types.

&gt; Source/WebCore/html/parser/HTMLToken.h:172
&gt; +    void clearExternalCharacters()
&gt; +    {
&gt; +        m_externalCharacters = 0;
&gt; +        m_externalCharactersLength = 0;
&gt; +        m_isAll8BitData = false;
&gt; +    }

Does isAll8bit not apply to just data then?

&gt; Source/WebCore/html/parser/HTMLToken.h:270
&gt; +        , m_isAll8BitData(false)
&gt; +        , m_attributes(attributes)

This does not appear to set m_selfClosing...

&gt; Source/WebCore/html/parser/HTMLToken.h:299
&gt; +    // We don&apos;t want to copy the the characters out of the Token, so we
&gt; +    // keep a pointer to its buffer instead. This buffer is owned by the
&gt; +    // Token and causes a lifetime dependence between these objects.
&gt; +    //
&gt; +    // FIXME: Add a mechanism for &quot;internalizing&quot; the characters when the
&gt; +    //        HTMLToken is destructed.
&gt; +    const UChar* m_externalCharacters;
&gt; +    size_t m_externalCharactersLength;

This is obviously wrong in the threaded-parser world.  At least as implemented.  But we&apos;ll fix that now that you&apos;ve made the code fixable. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812745</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-22 01:04:29 -0800</bug_when>
    <thetext>Did you want this marked for review?  Or EWSed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812752</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-22 01:10:39 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 183911 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=183911&amp;action=review
&gt; 
&gt; Just a couple nits.  Most of them don&apos;t apply to this patch even. :)
&gt; 
&gt; &gt; Source/WebCore/html/parser/HTMLToken.h:145
&gt; &gt; +    bool isAll8BitData() const
&gt; &gt; +    {
&gt; &gt; +        return m_isAll8BitData;
&gt; &gt; +    }
&gt; 
&gt; I think I would have written this function named &quot;dataIsAll8Bit()&quot; :) to make it clear that it&apos;s only talking about the data member. :)  Obviously that&apos;s a separate patch here.  Just idly commenting.

-&gt; Punt to future patch.

&gt; &gt; Source/WebCore/html/parser/HTMLToken.h:158
&gt; &gt; +    // FIXME: Distinguish between a missing public identifer and an empty one.
&gt; &gt; +    WTF::Vector&lt;UChar&gt;&amp; publicIdentifier() const
&gt; &gt; +    {
&gt; &gt; +        ASSERT(m_type == HTMLTokenTypes::DOCTYPE);
&gt; &gt; +        return m_doctypeData-&gt;m_publicIdentifier;
&gt; &gt; +    }
&gt; 
&gt; There is no reason to make these fancy vectors anyway.  There is 1 DOCTYPE node per document. :)  We can make our handling of it as inefficient as we like. :)  We&apos;re not saving anything by using fancy vector types.

Agreed!  -&gt; Punt to future patch.

&gt; &gt; Source/WebCore/html/parser/HTMLToken.h:172
&gt; &gt; +    void clearExternalCharacters()
&gt; &gt; +    {
&gt; &gt; +        m_externalCharacters = 0;
&gt; &gt; +        m_externalCharactersLength = 0;
&gt; &gt; +        m_isAll8BitData = false;
&gt; &gt; +    }
&gt; 
&gt; Does isAll8bit not apply to just data then?

We only track m_isAll8BitData for the HTMLToken&apos;s notion of data, which includes the characters (but not attributes, etc).

&gt; &gt; Source/WebCore/html/parser/HTMLToken.h:270
&gt; &gt; +        , m_isAll8BitData(false)
&gt; &gt; +        , m_attributes(attributes)
&gt; 
&gt; This does not appear to set m_selfClosing...

Fixed.

&gt; &gt; Source/WebCore/html/parser/HTMLToken.h:299
&gt; &gt; +    // We don&apos;t want to copy the the characters out of the Token, so we
&gt; &gt; +    // keep a pointer to its buffer instead. This buffer is owned by the
&gt; &gt; +    // Token and causes a lifetime dependence between these objects.
&gt; &gt; +    //
&gt; &gt; +    // FIXME: Add a mechanism for &quot;internalizing&quot; the characters when the
&gt; &gt; +    //        HTMLToken is destructed.
&gt; &gt; +    const UChar* m_externalCharacters;
&gt; &gt; +    size_t m_externalCharactersLength;
&gt; 
&gt; This is obviously wrong in the threaded-parser world.  At least as implemented.  But we&apos;ll fix that now that you&apos;ve made the code fixable. :)

Agreed.  We need to be smarter about taking the whole character string rather than always copying in the threaded case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812753</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-22 01:11:02 -0800</bug_when>
    <thetext>&gt; Did you want this marked for review?  Or EWSed?

This patch doesn&apos;t compile yet.  I&apos;m working through the compile errors now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812768</commentid>
    <comment_count>7</comment_count>
      <attachid>183921</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-22 01:25:00 -0800</bug_when>
    <thetext>Created attachment 183921
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812780</commentid>
    <comment_count>8</comment_count>
      <attachid>183921</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-22 01:30:40 -0800</bug_when>
    <thetext>Comment on attachment 183921
Patch

Attachment 183921 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/16010886</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812781</commentid>
    <comment_count>9</comment_count>
      <attachid>183921</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-22 01:31:15 -0800</bug_when>
    <thetext>Comment on attachment 183921
Patch

Attachment 183921 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16035483</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812782</commentid>
    <comment_count>10</comment_count>
      <attachid>183921</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-22 01:31:29 -0800</bug_when>
    <thetext>Comment on attachment 183921
Patch

Attachment 183921 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16036480</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812784</commentid>
    <comment_count>11</comment_count>
      <attachid>183927</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-22 01:32:31 -0800</bug_when>
    <thetext>Created attachment 183927
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812786</commentid>
    <comment_count>12</comment_count>
      <attachid>183927</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-22 01:34:17 -0800</bug_when>
    <thetext>Comment on attachment 183927
Patch

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812830</commentid>
    <comment_count>13</comment_count>
      <attachid>183927</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-22 02:27:49 -0800</bug_when>
    <thetext>Comment on attachment 183927
Patch

Clearing flags on attachment: 183927

Committed r140403: &lt;http://trac.webkit.org/changeset/140403&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812832</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-22 02:27:54 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183911</attachid>
            <date>2013-01-22 00:46:07 -0800</date>
            <delta_ts>2013-01-22 01:24:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107513-20130122004302.patch</filename>
            <type>text/plain</type>
            <size>15942</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMzg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2FiMjAzNTMzMzFlMGUy
MWM3OGNlMDgyZTY4MDYyMTlmY2I2YTBkYi4uNWI2MzFiMWM5NjgxYjE0NmEyZGE5ZTBlZjg0ZTkx
MWYzZDY0ZTRjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEzLTAxLTIyICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQXRvbWljTWFya3VwVG9rZW5C
YXNlIG11c3QgZGllCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDc1MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBOb3cgdGhhdCBORVdfWE1MIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgdHJlZSwgdGhl
cmUgaXMgbm8gcmVhc29uIHRvCisgICAgICAgIGhhdmUgQXRvbWljTWFya3VwVG9rZW5CYXNlIGV4
aXN0IGFzIGEgdGVtcGxhdGVkIGJhc2UgY2xhc3MgZm9yCisgICAgICAgIEF0b21pY0hUTUxUb2tl
bi4gVGhpcyBwYXRjaCBqdXN0IG1lcmdlcyB0aGUgY29kZSBiYWNrIGludG8KKyAgICAgICAgQXRv
bWljSFRNTFRva2VuLgorCisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRva2VuLmg6CisgICAg
ICAgIChBdG9taWNIVE1MVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljSFRNTFRva2Vu
Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY0hUTUxUb2tlbjo6bmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBdG9taWNIVE1MVG9rZW46OnNldE5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXRvbWljSFRNTFRva2VuOjpzZWxmQ2xvc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpBdG9t
aWNIVE1MVG9rZW46OmdldEF0dHJpYnV0ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWlj
SFRNTFRva2VuOjphdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY0hUTUxUb2tl
bjo6Y2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNIVE1MVG9rZW46OmNoYXJh
Y3RlcnNMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljSFRNTFRva2VuOjppc0FsbDhC
aXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY0hUTUxUb2tlbjo6Y29tbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdG9taWNIVE1MVG9rZW46OnB1YmxpY0lkZW50aWZpZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6QXRvbWljSFRNTFRva2VuOjpzeXN0ZW1JZGVudGlmaWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF0b21pY0hUTUxUb2tlbjo6Y2xlYXJFeHRlcm5hbENoYXJhY3RlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6QXRvbWljSFRNTFRva2VuOjpBdG9taWNIVE1MVG9rZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6QXRvbWljTWFya3VwVG9rZW5CYXNlOjppbml0aWFsaXplQXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL01hcmt1cFRva2Vu
QmFzZS5oOgorCiAyMDEzLTAxLTIxICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgRU5BQkxFKE5FV19YTUwpIGlzbid0IHVzZWQgYnkgYW55b25lIGFuZCBubyBvbmUg
aXMgYWN0aXZlbHkgd29ya2luZyBvbiBpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFRva2VuLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9r
ZW4uaAppbmRleCA2ZWE2MzBiNjE5NGFiNzcxYzc1MTQyNzM2YTFlOTQ0ZDRmOTZkNDE4Li4xNmQ4
ODY4NTNhZWY1YzE0ZWQwMTUyMDEyMzIzMzJkMGJlNzgxNWVkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MVG9rZW4uaApAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgfQogfTsK
IAotY2xhc3MgQXRvbWljSFRNTFRva2VuIDogcHVibGljIEF0b21pY01hcmt1cFRva2VuQmFzZTxI
VE1MVG9rZW4+LCBwdWJsaWMgUmVmQ291bnRlZDxBdG9taWNIVE1MVG9rZW4+IHsKK2NsYXNzIEF0
b21pY0hUTUxUb2tlbiA6IHB1YmxpYyBSZWZDb3VudGVkPEF0b21pY0hUTUxUb2tlbj4gewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEF0b21pY0hUTUxUb2tlbik7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBjcmVhdGUoSFRNTFRva2VuJiB0b2tlbikK
QEAgLTg4LDEwICs4OCwxMjYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV90eXBlID09IEhU
TUxUb2tlblR5cGVzOjpET0NUWVBFKTsKICAgICAgICAgcmV0dXJuIG1fZG9jdHlwZURhdGEtPm1f
Zm9yY2VRdWlya3M7CiAgICAgfQorCisgICAgdHlwZW5hbWUgSFRNTFRva2VuVHlwZXM6OlR5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCh1c2VzTmFtZSgpKTsKKyAgICAg
ICAgcmV0dXJuIG1fbmFtZTsKKyAgICB9CisKKyAgICB2b2lkIHNldE5hbWUoY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHVzZXNOYW1lKCkpOworICAgICAg
ICBtX25hbWUgPSBuYW1lOworICAgIH0KKworICAgIGJvb2wgc2VsZkNsb3NpbmcoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcg
fHwgbV90eXBlID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcpOworICAgICAgICByZXR1cm4gbV9z
ZWxmQ2xvc2luZzsKKyAgICB9CisKKyAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh1
c2VzQXR0cmlidXRlcygpKTsKKyAgICAgICAgcmV0dXJuIGZpbmRBdHRyaWJ1dGVJblZlY3Rvciht
X2F0dHJpYnV0ZXMsIGF0dHJpYnV0ZU5hbWUpOworICAgIH0KKworICAgIFZlY3RvcjxBdHRyaWJ1
dGU+JiBhdHRyaWJ1dGVzKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh1c2VzQXR0cmlidXRlcygp
KTsKKyAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlczsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0
b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
dXNlc0F0dHJpYnV0ZXMoKSk7CisgICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZXM7CisgICAgfQor
CisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBIVE1MVG9rZW5UeXBlczo6Q2hhcmFjdGVyKTsKKyAgICAgICAgcmV0dXJu
IG1fZXh0ZXJuYWxDaGFyYWN0ZXJzOworICAgIH0KKworICAgIHNpemVfdCBjaGFyYWN0ZXJzTGVu
Z3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSFRNTFRva2VuVHlw
ZXM6OkNoYXJhY3Rlcik7CisgICAgICAgIHJldHVybiBtX2V4dGVybmFsQ2hhcmFjdGVyc0xlbmd0
aDsKKyAgICB9CisKKyAgICBib29sIGlzQWxsOEJpdERhdGEoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1faXNBbGw4Qml0RGF0YTsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcmIGNv
bW1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBIVE1MVG9rZW5U
eXBlczo6Q29tbWVudCk7CisgICAgICAgIHJldHVybiBtX2RhdGE7CisgICAgfQorCisgICAgLy8g
RklYTUU6IERpc3Rpbmd1aXNoIGJldHdlZW4gYSBtaXNzaW5nIHB1YmxpYyBpZGVudGlmZXIgYW5k
IGFuIGVtcHR5IG9uZS4KKyAgICBXVEY6OlZlY3RvcjxVQ2hhcj4mIHB1YmxpY0lkZW50aWZpZXIo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBIVE1MVG9rZW5UeXBlczo6
RE9DVFlQRSk7CisgICAgICAgIHJldHVybiBtX2RvY3R5cGVEYXRhLT5tX3B1YmxpY0lkZW50aWZp
ZXI7CisgICAgfQorCisgICAgLy8gRklYTUU6IERpc3Rpbmd1aXNoIGJldHdlZW4gYSBtaXNzaW5n
IHN5c3RlbSBpZGVudGlmZXIgYW5kIGFuIGVtcHR5IG9uZS4KKyAgICBXVEY6OlZlY3RvcjxVQ2hh
cj4mIHN5c3RlbUlkZW50aWZpZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlw
ZSA9PSBIVE1MVG9rZW5UeXBlczo6RE9DVFlQRSk7CisgICAgICAgIHJldHVybiBtX2RvY3R5cGVE
YXRhLT5tX3N5c3RlbUlkZW50aWZpZXI7CisgICAgfQorCisgICAgdm9pZCBjbGVhckV4dGVybmFs
Q2hhcmFjdGVycygpCisgICAgeworICAgICAgICBtX2V4dGVybmFsQ2hhcmFjdGVycyA9IDA7Cisg
ICAgICAgIG1fZXh0ZXJuYWxDaGFyYWN0ZXJzTGVuZ3RoID0gMDsKKyAgICAgICAgbV9pc0FsbDhC
aXREYXRhID0gZmFsc2U7CisgICAgfQorCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IEF0b21pY0hU
TUxUb2tlbihIVE1MVG9rZW4mIHRva2VuKQotICAgICAgICA6IEF0b21pY01hcmt1cFRva2VuQmFz
ZTxIVE1MVG9rZW4+KCZ0b2tlbikKKyAgICBleHBsaWNpdCBBdG9taWNIVE1MVG9rZW4oSFRNTFRv
a2VuKiB0b2tlbikKKyAgICAgICAgOiBtX3R5cGUodG9rZW4tPnR5cGUoKSkKICAgICB7CisgICAg
ICAgIEFTU0VSVCh0b2tlbik7CisKKyAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAg
Y2FzZSBIVE1MVG9rZW5UeXBlczo6VW5pbml0aWFsaXplZDoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSFRNTFRva2Vu
VHlwZXM6OkRPQ1RZUEU6CisgICAgICAgICAgICBtX25hbWUgPSBBdG9taWNTdHJpbmcodG9rZW4t
Pm5hbWVTdHJpbmcoKSk7CisgICAgICAgICAgICBtX2RvY3R5cGVEYXRhID0gdG9rZW4tPm1fZG9j
dHlwZURhdGEucmVsZWFzZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSFRN
TFRva2VuVHlwZXM6OkVuZE9mRmlsZToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZzoKKyAgICAgICAgY2FzZSBIVE1MVG9rZW5UeXBlczo6
RW5kVGFnOiB7CisgICAgICAgICAgICBtX3NlbGZDbG9zaW5nID0gdG9rZW4tPnNlbGZDbG9zaW5n
KCk7CisgICAgICAgICAgICBtX25hbWUgPSBBdG9taWNTdHJpbmcodG9rZW4tPm5hbWVTdHJpbmco
KSk7CisgICAgICAgICAgICBpbml0aWFsaXplQXR0cmlidXRlcyh0b2tlbi0+YXR0cmlidXRlcygp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgSFRNTFRva2Vu
VHlwZXM6OkNvbW1lbnQ6CisgICAgICAgICAgICBpZiAodG9rZW4tPmlzQWxsOEJpdERhdGEoKSkK
KyAgICAgICAgICAgICAgICBtX2RhdGEgPSBTdHJpbmc6Om1ha2U4Qml0RnJvbTE2Qml0U291cmNl
KHRva2VuLT5jb21tZW50KCkuZGF0YSgpLCB0b2tlbi0+Y29tbWVudCgpLnNpemUoKSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9kYXRhID0gU3RyaW5nKHRva2VuLT5jb21t
ZW50KCkuZGF0YSgpLCB0b2tlbi0+Y29tbWVudCgpLnNpemUoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBIVE1MVG9rZW5UeXBlczo6Q2hhcmFjdGVyOgorICAgICAgICAgICAg
bV9leHRlcm5hbENoYXJhY3RlcnMgPSB0b2tlbi0+Y2hhcmFjdGVycygpLmRhdGEoKTsKKyAgICAg
ICAgICAgIG1fZXh0ZXJuYWxDaGFyYWN0ZXJzTGVuZ3RoID0gdG9rZW4tPmNoYXJhY3RlcnMoKS5z
aXplKCk7CisgICAgICAgICAgICBtX2lzQWxsOEJpdERhdGEgPSB0b2tlbi0+aXNBbGw4Qml0RGF0
YSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQogICAgIH0KIAogI2lmIEVOQUJMRShUSFJFQURFRF9IVE1MX1BBUlNF
UikKQEAgLTEzNiwxMiArMjUyLDg5IEBAIHByaXZhdGU6CiAKICNlbmRpZgogCi0gICAgQXRvbWlj
SFRNTFRva2VuKEhUTUxUb2tlblR5cGVzOjpUeXBlIHR5cGUsIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSwgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMgPSBWZWN0b3I8QXR0cmli
dXRlPigpKQotICAgICAgICA6IEF0b21pY01hcmt1cFRva2VuQmFzZTxIVE1MVG9rZW4+KHR5cGUs
IG5hbWUsIGF0dHJpYnV0ZXMpCisgICAgZXhwbGljaXQgQXRvbWljSFRNTFRva2VuKHR5cGVuYW1l
IEhUTUxUb2tlblR5cGVzOjpUeXBlIHR5cGUpCisgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAg
ICAgICwgbV9leHRlcm5hbENoYXJhY3RlcnMoMCkKKyAgICAgICAgLCBtX2V4dGVybmFsQ2hhcmFj
dGVyc0xlbmd0aCgwKQorICAgICAgICAsIG1faXNBbGw4Qml0RGF0YShmYWxzZSkKKyAgICAgICAg
LCBtX3NlbGZDbG9zaW5nKGZhbHNlKQogICAgIHsKICAgICB9CisKKyAgICBBdG9taWNIVE1MVG9r
ZW4odHlwZW5hbWUgSFRNTFRva2VuVHlwZXM6OlR5cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lLCBjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcyA9IFZlY3RvcjxBdHRy
aWJ1dGU+KCkpCisgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9uYW1lKG5hbWUp
CisgICAgICAgICwgbV9leHRlcm5hbENoYXJhY3RlcnMoMCkKKyAgICAgICAgLCBtX2V4dGVybmFs
Q2hhcmFjdGVyc0xlbmd0aCgwKQorICAgICAgICAsIG1faXNBbGw4Qml0RGF0YShmYWxzZSkKKyAg
ICAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIEFTU0VSVCh1
c2VzTmFtZSgpKTsKKyAgICB9CisKKyAgICBIVE1MVG9rZW5UeXBlczo6VHlwZSBtX3R5cGU7CisK
KyAgICB2b2lkIGluaXRpYWxpemVBdHRyaWJ1dGVzKGNvbnN0IHR5cGVuYW1lIEhUTUxUb2tlbjo6
QXR0cmlidXRlTGlzdCYgYXR0cmlidXRlcyk7CisgICAgUXVhbGlmaWVkTmFtZSBuYW1lRm9yQXR0
cmlidXRlKGNvbnN0IHR5cGVuYW1lIEhUTUxUb2tlbjo6QXR0cmlidXRlJikgY29uc3Q7CisKKyAg
ICBib29sIHVzZXNOYW1lKCkgY29uc3Q7CisKKyAgICBib29sIHVzZXNBdHRyaWJ1dGVzKCkgY29u
c3Q7CisKKyAgICAvLyAibmFtZSIgZm9yIERPQ1RZUEUsIFN0YXJ0VGFnLCBhbmQgRW5kVGFnCisg
ICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKKworICAgIC8vICJkYXRhIiBmb3IgQ29tbWVudAorICAg
IFN0cmluZyBtX2RhdGE7CisKKyAgICAvLyAiY2hhcmFjdGVycyIgZm9yIENoYXJhY3RlcgorICAg
IC8vCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjb3B5IHRoZSB0aGUgY2hhcmFjdGVycyBvdXQg
b2YgdGhlIFRva2VuLCBzbyB3ZQorICAgIC8vIGtlZXAgYSBwb2ludGVyIHRvIGl0cyBidWZmZXIg
aW5zdGVhZC4gVGhpcyBidWZmZXIgaXMgb3duZWQgYnkgdGhlCisgICAgLy8gVG9rZW4gYW5kIGNh
dXNlcyBhIGxpZmV0aW1lIGRlcGVuZGVuY2UgYmV0d2VlbiB0aGVzZSBvYmplY3RzLgorICAgIC8v
CisgICAgLy8gRklYTUU6IEFkZCBhIG1lY2hhbmlzbSBmb3IgImludGVybmFsaXppbmciIHRoZSBj
aGFyYWN0ZXJzIHdoZW4gdGhlCisgICAgLy8gICAgICAgIEhUTUxUb2tlbiBpcyBkZXN0cnVjdGVk
LgorICAgIGNvbnN0IFVDaGFyKiBtX2V4dGVybmFsQ2hhcmFjdGVyczsKKyAgICBzaXplX3QgbV9l
eHRlcm5hbENoYXJhY3RlcnNMZW5ndGg7CisgICAgYm9vbCBtX2lzQWxsOEJpdERhdGE7CisKKyAg
ICAvLyBGb3IgRE9DVFlQRQorICAgIE93blB0cjxIVE1MVG9rZW5UeXBlczo6RG9jdHlwZURhdGE+
IG1fZG9jdHlwZURhdGE7CisKKyAgICAvLyBGb3IgU3RhcnRUYWcgYW5kIEVuZFRhZworICAgIGJv
b2wgbV9zZWxmQ2xvc2luZzsKKworICAgIFZlY3RvcjxBdHRyaWJ1dGU+IG1fYXR0cmlidXRlczsK
IH07CiAKK2lubGluZSB2b2lkIEF0b21pY01hcmt1cFRva2VuQmFzZTo6aW5pdGlhbGl6ZUF0dHJp
YnV0ZXMoY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0JiBhdHRyaWJ1dGVzKQoreworICAg
IHNpemVfdCBzaXplID0gYXR0cmlidXRlcy5zaXplKCk7CisgICAgaWYgKCFzaXplKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2F0dHJpYnV0ZXMuY2xlYXIoKTsKKyAgICBtX2F0dHJpYnV0ZXMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkgeworICAgICAgICBjb25zdCB0eXBlbmFtZSBUb2tlbjo6QXR0cmlidXRlJiBh
dHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2ldOworICAgICAgICBpZiAoYXR0cmlidXRlLm1fbmFtZS5p
c0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGJlIGFibGUgdG8gYWRkIHRoZSBmb2xsb3dpbmcgQVNTRVJUIG9uY2Ugd2UgZml4Cisg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Mjk3MQor
ICAgICAgICAvLyAgIEFTU0VSVChhdHRyaWJ1dGUubV9uYW1lUmFuZ2UubV9zdGFydCk7CisgICAg
ICAgIEFTU0VSVChhdHRyaWJ1dGUubV9uYW1lUmFuZ2UubV9lbmQpOworICAgICAgICBBU1NFUlQo
YXR0cmlidXRlLm1fdmFsdWVSYW5nZS5tX3N0YXJ0KTsKKyAgICAgICAgQVNTRVJUKGF0dHJpYnV0
ZS5tX3ZhbHVlUmFuZ2UubV9lbmQpOworCisgICAgICAgIEF0b21pY1N0cmluZyB2YWx1ZShhdHRy
aWJ1dGUubV92YWx1ZS5kYXRhKCksIGF0dHJpYnV0ZS5tX3ZhbHVlLnNpemUoKSk7CisgICAgICAg
IGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUgPSBuYW1lRm9yQXR0cmlidXRlKGF0dHJpYnV0ZSk7
CisgICAgICAgIGlmICghZmluZEF0dHJpYnV0ZUluVmVjdG9yKG1fYXR0cmlidXRlcywgbmFtZSkp
CisgICAgICAgICAgICBtX2F0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkp
OworICAgIH0KK30KKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvTWFya3VwVG9rZW5CYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL01h
cmt1cFRva2VuQmFzZS5oCmluZGV4IGNiZmUyYWMwN2RmOGZiNjU2MjRiM2JjMGExYjJjZDE2NTg3
MThjMDEuLjcyN2UxYWRlMzg2NjBmMTI1NmY5MzhlMDA5ZmRiYjc1YjVjNjUwYjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5CYXNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaApAQCAtNDUsNyArNDUsNiBA
QCBzdGF0aWMgaW5saW5lIEF0dHJpYnV0ZSogZmluZEF0dHJpYnV0ZUluVmVjdG9yKFZlY3RvcjxB
dHRyaWJ1dGU+JiBhdHRyaWJ1dGVzLCBjbwogICAgIHJldHVybiAwOwogfQogCi0KIGNsYXNzIERv
Y3R5cGVEYXRhQmFzZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG9jdHlwZURhdGFCYXNl
KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC00MzEsMjE1ICs0MzAsNiBA
QCBwcm90ZWN0ZWQ6CiAgICAgQXR0cmlidXRlKiBtX2N1cnJlbnRBdHRyaWJ1dGU7CiB9OwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUb2tlbj4KLWNsYXNzIEF0b21pY01hcmt1cFRva2VuQmFzZSB7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXRvbWljTWFya3VwVG9rZW5CYXNlKTsKLXB1YmxpYzoK
LSAgICBBdG9taWNNYXJrdXBUb2tlbkJhc2UoVG9rZW4qIHRva2VuKQotICAgICAgICA6IG1fdHlw
ZSh0b2tlbi0+dHlwZSgpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHRva2VuKTsKLQotICAgICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewotICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpVbmluaXRpYWxp
emVkOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6RE9DVFlQRToKLSAgICAgICAgICAgIG1fbmFt
ZSA9IEF0b21pY1N0cmluZyh0b2tlbi0+bmFtZVN0cmluZygpKTsKLSAgICAgICAgICAgIG1fZG9j
dHlwZURhdGEgPSB0b2tlbi0+bV9kb2N0eXBlRGF0YS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6RW5kT2ZGaWxlOgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OlN0YXJ0VGFnOgotICAgICAgICBjYXNl
IFRva2VuOjpUeXBlOjpFbmRUYWc6IHsKLSAgICAgICAgICAgIG1fc2VsZkNsb3NpbmcgPSB0b2tl
bi0+c2VsZkNsb3NpbmcoKTsKLSAgICAgICAgICAgIG1fbmFtZSA9IEF0b21pY1N0cmluZyh0b2tl
bi0+bmFtZVN0cmluZygpKTsKLSAgICAgICAgICAgIGluaXRpYWxpemVBdHRyaWJ1dGVzKHRva2Vu
LT5hdHRyaWJ1dGVzKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBUb2tlbjo6VHlwZTo6Q29tbWVudDoKLSAgICAgICAgICAgIGlmICh0b2tlbi0+aXNBbGw4
Qml0RGF0YSgpKQotICAgICAgICAgICAgICAgIG1fZGF0YSA9IFN0cmluZzo6bWFrZThCaXRGcm9t
MTZCaXRTb3VyY2UodG9rZW4tPmNvbW1lbnQoKS5kYXRhKCksIHRva2VuLT5jb21tZW50KCkuc2l6
ZSgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2RhdGEgPSBTdHJpbmco
dG9rZW4tPmNvbW1lbnQoKS5kYXRhKCksIHRva2VuLT5jb21tZW50KCkuc2l6ZSgpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpDaGFyYWN0ZXI6Ci0gICAg
ICAgICAgICBtX2V4dGVybmFsQ2hhcmFjdGVycyA9IHRva2VuLT5jaGFyYWN0ZXJzKCkuZGF0YSgp
OwotICAgICAgICAgICAgbV9leHRlcm5hbENoYXJhY3RlcnNMZW5ndGggPSB0b2tlbi0+Y2hhcmFj
dGVycygpLnNpemUoKTsKLSAgICAgICAgICAgIG1faXNBbGw4Qml0RGF0YSA9IHRva2VuLT5pc0Fs
bDhCaXREYXRhKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZXhwbGljaXQgQXRvbWljTWFy
a3VwVG9rZW5CYXNlKHR5cGVuYW1lIFRva2VuOjpUeXBlOjpUeXBlIHR5cGUpCi0gICAgICAgIDog
bV90eXBlKHR5cGUpCi0gICAgICAgICwgbV9leHRlcm5hbENoYXJhY3RlcnMoMCkKLSAgICAgICAg
LCBtX2V4dGVybmFsQ2hhcmFjdGVyc0xlbmd0aCgwKQotICAgICAgICAsIG1faXNBbGw4Qml0RGF0
YShmYWxzZSkKLSAgICAgICAgLCBtX3NlbGZDbG9zaW5nKGZhbHNlKQotICAgIHsKLSAgICB9Ci0K
LSAgICBBdG9taWNNYXJrdXBUb2tlbkJhc2UodHlwZW5hbWUgVG9rZW46OlR5cGU6OlR5cGUgdHlw
ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYgYXR0
cmlidXRlcyA9IFZlY3RvcjxBdHRyaWJ1dGU+KCkpCi0gICAgICAgIDogbV90eXBlKHR5cGUpCi0g
ICAgICAgICwgbV9uYW1lKG5hbWUpCi0gICAgICAgICwgbV9leHRlcm5hbENoYXJhY3RlcnMoMCkK
LSAgICAgICAgLCBtX2V4dGVybmFsQ2hhcmFjdGVyc0xlbmd0aCgwKQotICAgICAgICAsIG1faXNB
bGw4Qml0RGF0YShmYWxzZSkKLSAgICAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVCh1c2VzTmFtZSgpKTsKLSAgICB9Ci0KLSAgICB0eXBlbmFtZSBU
b2tlbjo6VHlwZTo6VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKHVz
ZXNOYW1lKCkpOwotICAgICAgICByZXR1cm4gbV9uYW1lOwotICAgIH0KLQotICAgIHZvaWQgc2V0
TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCi0gICAgewotICAgICAgICBBU1NFUlQodXNl
c05hbWUoKSk7Ci0gICAgICAgIG1fbmFtZSA9IG5hbWU7Ci0gICAgfQotCi0gICAgYm9vbCBzZWxm
Q2xvc2luZygpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IFRva2VuOjpU
eXBlOjpTdGFydFRhZyB8fCBtX3R5cGUgPT0gVG9rZW46OlR5cGU6OkVuZFRhZyk7Ci0gICAgICAg
IHJldHVybiBtX3NlbGZDbG9zaW5nOwotICAgIH0KLQotICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmli
dXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKHVzZXNBdHRyaWJ1dGVzKCkpOwotICAgICAgICByZXR1cm4gZmluZEF0dHJpYnV0
ZUluVmVjdG9yKG1fYXR0cmlidXRlcywgYXR0cmlidXRlTmFtZSk7Ci0gICAgfQotCi0gICAgVmVj
dG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHVzZXNB
dHRyaWJ1dGVzKCkpOwotICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVzOwotICAgIH0KLQotICAg
IGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVzKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVCh1c2VzQXR0cmlidXRlcygpKTsKLSAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRl
czsKLSAgICB9Ci0KLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQobV90eXBlID09IFRva2VuOjpUeXBlOjpDaGFyYWN0ZXIpOwotICAgICAg
ICByZXR1cm4gbV9leHRlcm5hbENoYXJhY3RlcnM7Ci0gICAgfQotCi0gICAgc2l6ZV90IGNoYXJh
Y3RlcnNMZW5ndGgoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUb2tl
bjo6VHlwZTo6Q2hhcmFjdGVyKTsKLSAgICAgICAgcmV0dXJuIG1fZXh0ZXJuYWxDaGFyYWN0ZXJz
TGVuZ3RoOwotICAgIH0KLQotICAgIGJvb2wgaXNBbGw4Qml0RGF0YSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9pc0FsbDhCaXREYXRhOwotICAgIH0KLQotICAgIGNvbnN0IFN0cmlu
ZyYgY29tbWVudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IFRva2Vu
OjpUeXBlOjpDb21tZW50KTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YTsKLSAgICB9Ci0KLSAgICAv
LyBGSVhNRTogRGlzdGluZ3Vpc2ggYmV0d2VlbiBhIG1pc3NpbmcgcHVibGljIGlkZW50aWZlciBh
bmQgYW4gZW1wdHkgb25lLgotICAgIFdURjo6VmVjdG9yPFVDaGFyPiYgcHVibGljSWRlbnRpZmll
cigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IFRva2VuOjpUeXBlOjpE
T0NUWVBFKTsKLSAgICAgICAgcmV0dXJuIG1fZG9jdHlwZURhdGEtPm1fcHVibGljSWRlbnRpZmll
cjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogRGlzdGluZ3Vpc2ggYmV0d2VlbiBhIG1pc3Npbmcg
c3lzdGVtIGlkZW50aWZlciBhbmQgYW4gZW1wdHkgb25lLgotICAgIFdURjo6VmVjdG9yPFVDaGFy
PiYgc3lzdGVtSWRlbnRpZmllcigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBl
ID09IFRva2VuOjpUeXBlOjpET0NUWVBFKTsKLSAgICAgICAgcmV0dXJuIG1fZG9jdHlwZURhdGEt
Pm1fc3lzdGVtSWRlbnRpZmllcjsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyRXh0ZXJuYWxDaGFy
YWN0ZXJzKCkKLSAgICB7Ci0gICAgICAgIG1fZXh0ZXJuYWxDaGFyYWN0ZXJzID0gMDsKLSAgICAg
ICAgbV9leHRlcm5hbENoYXJhY3RlcnNMZW5ndGggPSAwOwotICAgICAgICBtX2lzQWxsOEJpdERh
dGEgPSBmYWxzZTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB0eXBlbmFtZSBUb2tlbjo6VHlw
ZTo6VHlwZSBtX3R5cGU7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVBdHRyaWJ1dGVzKGNvbnN0IHR5
cGVuYW1lIFRva2VuOjpBdHRyaWJ1dGVMaXN0JiBhdHRyaWJ1dGVzKTsKLSAgICBRdWFsaWZpZWRO
YW1lIG5hbWVGb3JBdHRyaWJ1dGUoY29uc3QgdHlwZW5hbWUgVG9rZW46OkF0dHJpYnV0ZSYpIGNv
bnN0OwotCi0gICAgYm9vbCB1c2VzTmFtZSgpIGNvbnN0OwotCi0gICAgYm9vbCB1c2VzQXR0cmli
dXRlcygpIGNvbnN0OwotCi0gICAgLy8gIm5hbWUiIGZvciBET0NUWVBFLCBTdGFydFRhZywgYW5k
IEVuZFRhZwotICAgIEF0b21pY1N0cmluZyBtX25hbWU7Ci0KLSAgICAvLyAiZGF0YSIgZm9yIENv
bW1lbnQKLSAgICBTdHJpbmcgbV9kYXRhOwotCi0gICAgLy8gImNoYXJhY3RlcnMiIGZvciBDaGFy
YWN0ZXIKLSAgICAvLwotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY29weSB0aGUgdGhlIGNoYXJh
Y3RlcnMgb3V0IG9mIHRoZSBUb2tlbiwgc28gd2UKLSAgICAvLyBrZWVwIGEgcG9pbnRlciB0byBp
dHMgYnVmZmVyIGluc3RlYWQuIFRoaXMgYnVmZmVyIGlzIG93bmVkIGJ5IHRoZQotICAgIC8vIFRv
a2VuIGFuZCBjYXVzZXMgYSBsaWZldGltZSBkZXBlbmRlbmNlIGJldHdlZW4gdGhlc2Ugb2JqZWN0
cy4KLSAgICAvLwotICAgIC8vIEZJWE1FOiBBZGQgYSBtZWNoYW5pc20gZm9yICJpbnRlcm5hbGl6
aW5nIiB0aGUgY2hhcmFjdGVycyB3aGVuIHRoZQotICAgIC8vICAgICAgICBIVE1MVG9rZW4gaXMg
ZGVzdHJ1Y3RlZC4KLSAgICBjb25zdCBVQ2hhciogbV9leHRlcm5hbENoYXJhY3RlcnM7Ci0gICAg
c2l6ZV90IG1fZXh0ZXJuYWxDaGFyYWN0ZXJzTGVuZ3RoOwotICAgIGJvb2wgbV9pc0FsbDhCaXRE
YXRhOwotCi0gICAgLy8gRm9yIERPQ1RZUEUKLSAgICBPd25QdHI8dHlwZW5hbWUgVG9rZW46OkRv
Y3R5cGVEYXRhPiBtX2RvY3R5cGVEYXRhOwotCi0gICAgLy8gRm9yIFN0YXJ0VGFnIGFuZCBFbmRU
YWcKLSAgICBib29sIG1fc2VsZkNsb3Npbmc7Ci0KLSAgICBWZWN0b3I8QXR0cmlidXRlPiBtX2F0
dHJpYnV0ZXM7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUb2tlbj4KLWlubGluZSB2b2lkIEF0
b21pY01hcmt1cFRva2VuQmFzZTxUb2tlbj46OmluaXRpYWxpemVBdHRyaWJ1dGVzKGNvbnN0IHR5
cGVuYW1lIFRva2VuOjpBdHRyaWJ1dGVMaXN0JiBhdHRyaWJ1dGVzKQotewotICAgIHNpemVfdCBz
aXplID0gYXR0cmlidXRlcy5zaXplKCk7Ci0gICAgaWYgKCFzaXplKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2F0dHJpYnV0ZXMuY2xlYXIoKTsKLSAgICBtX2F0dHJpYnV0ZXMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShzaXplKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgewotICAgICAgICBjb25zdCB0eXBlbmFtZSBUb2tlbjo6QXR0cmlidXRlJiBhdHRyaWJ1dGUg
PSBhdHRyaWJ1dGVzW2ldOwotICAgICAgICBpZiAoYXR0cmlidXRlLm1fbmFtZS5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJl
IGFibGUgdG8gYWRkIHRoZSBmb2xsb3dpbmcgQVNTRVJUIG9uY2Ugd2UgZml4Ci0gICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Mjk3MQotICAgICAgICAv
LyAgIEFTU0VSVChhdHRyaWJ1dGUubV9uYW1lUmFuZ2UubV9zdGFydCk7Ci0gICAgICAgIEFTU0VS
VChhdHRyaWJ1dGUubV9uYW1lUmFuZ2UubV9lbmQpOwotICAgICAgICBBU1NFUlQoYXR0cmlidXRl
Lm1fdmFsdWVSYW5nZS5tX3N0YXJ0KTsKLSAgICAgICAgQVNTRVJUKGF0dHJpYnV0ZS5tX3ZhbHVl
UmFuZ2UubV9lbmQpOwotCi0gICAgICAgIEF0b21pY1N0cmluZyB2YWx1ZShhdHRyaWJ1dGUubV92
YWx1ZS5kYXRhKCksIGF0dHJpYnV0ZS5tX3ZhbHVlLnNpemUoKSk7Ci0gICAgICAgIGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUgPSBuYW1lRm9yQXR0cmlidXRlKGF0dHJpYnV0ZSk7Ci0gICAgICAg
IGlmICghZmluZEF0dHJpYnV0ZUluVmVjdG9yKG1fYXR0cmlidXRlcywgbmFtZSkpCi0gICAgICAg
ICAgICBtX2F0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkpOwotICAgIH0K
LX0KLQogfQogCiAjZW5kaWYgLy8gTWFya3VwVG9rZW5CYXNlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183921</attachid>
            <date>2013-01-22 01:25:00 -0800</date>
            <delta_ts>2013-01-22 01:32:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107513-20130122012155.patch</filename>
            <type>text/plain</type>
            <size>18864</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMzg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2FiMjAzNTMzMzFlMGUy
MWM3OGNlMDgyZTY4MDYyMTlmY2I2YTBkYi4uNWI2MzFiMWM5NjgxYjE0NmEyZGE5ZTBlZjg0ZTkx
MWYzZDY0ZTRjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEzLTAxLTIyICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQXRvbWljTWFya3VwVG9rZW5C
YXNlIG11c3QgZGllCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDc1MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBOb3cgdGhhdCBORVdfWE1MIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgdHJlZSwgdGhl
cmUgaXMgbm8gcmVhc29uIHRvCisgICAgICAgIGhhdmUgQXRvbWljTWFya3VwVG9rZW5CYXNlIGV4
aXN0IGFzIGEgdGVtcGxhdGVkIGJhc2UgY2xhc3MgZm9yCisgICAgICAgIEF0b21pY0hUTUxUb2tl
bi4gVGhpcyBwYXRjaCBqdXN0IG1lcmdlcyB0aGUgY29kZSBiYWNrIGludG8KKyAgICAgICAgQXRv
bWljSFRNTFRva2VuLgorCisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRva2VuLmg6CisgICAg
ICAgIChBdG9taWNIVE1MVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljSFRNTFRva2Vu
Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY0hUTUxUb2tlbjo6bmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBdG9taWNIVE1MVG9rZW46OnNldE5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXRvbWljSFRNTFRva2VuOjpzZWxmQ2xvc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpBdG9t
aWNIVE1MVG9rZW46OmdldEF0dHJpYnV0ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWlj
SFRNTFRva2VuOjphdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY0hUTUxUb2tl
bjo6Y2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNIVE1MVG9rZW46OmNoYXJh
Y3RlcnNMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljSFRNTFRva2VuOjppc0FsbDhC
aXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY0hUTUxUb2tlbjo6Y29tbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdG9taWNIVE1MVG9rZW46OnB1YmxpY0lkZW50aWZpZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6QXRvbWljSFRNTFRva2VuOjpzeXN0ZW1JZGVudGlmaWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF0b21pY0hUTUxUb2tlbjo6Y2xlYXJFeHRlcm5hbENoYXJhY3RlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6QXRvbWljSFRNTFRva2VuOjpBdG9taWNIVE1MVG9rZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6QXRvbWljTWFya3VwVG9rZW5CYXNlOjppbml0aWFsaXplQXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL01hcmt1cFRva2Vu
QmFzZS5oOgorCiAyMDEzLTAxLTIxICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgRU5BQkxFKE5FV19YTUwpIGlzbid0IHVzZWQgYnkgYW55b25lIGFuZCBubyBvbmUg
aXMgYWN0aXZlbHkgd29ya2luZyBvbiBpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFRva2VuLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9r
ZW4uaAppbmRleCA2ZWE2MzBiNjE5NGFiNzcxYzc1MTQyNzM2YTFlOTQ0ZDRmOTZkNDE4Li43Njhl
Yjk3ODZiYjEyMjdmZDlkODExYTBhMzQ4NDQwOTVkNmRjMzQwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MVG9rZW4uaApAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgfQogfTsK
IAotY2xhc3MgQXRvbWljSFRNTFRva2VuIDogcHVibGljIEF0b21pY01hcmt1cFRva2VuQmFzZTxI
VE1MVG9rZW4+LCBwdWJsaWMgUmVmQ291bnRlZDxBdG9taWNIVE1MVG9rZW4+IHsKK2NsYXNzIEF0
b21pY0hUTUxUb2tlbiA6IHB1YmxpYyBSZWZDb3VudGVkPEF0b21pY0hUTUxUb2tlbj4gewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEF0b21pY0hUTUxUb2tlbik7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBjcmVhdGUoSFRNTFRva2VuJiB0b2tlbikK
QEAgLTg4LDE2ICs4OCwxMzAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV90eXBlID09IEhU
TUxUb2tlblR5cGVzOjpET0NUWVBFKTsKICAgICAgICAgcmV0dXJuIG1fZG9jdHlwZURhdGEtPm1f
Zm9yY2VRdWlya3M7CiAgICAgfQorCisgICAgdHlwZW5hbWUgSFRNTFRva2VuVHlwZXM6OlR5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCh1c2VzTmFtZSgpKTsKKyAgICAg
ICAgcmV0dXJuIG1fbmFtZTsKKyAgICB9CisKKyAgICB2b2lkIHNldE5hbWUoY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHVzZXNOYW1lKCkpOworICAgICAg
ICBtX25hbWUgPSBuYW1lOworICAgIH0KKworICAgIGJvb2wgc2VsZkNsb3NpbmcoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcg
fHwgbV90eXBlID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcpOworICAgICAgICByZXR1cm4gbV9z
ZWxmQ2xvc2luZzsKKyAgICB9CisKKyAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh1
c2VzQXR0cmlidXRlcygpKTsKKyAgICAgICAgcmV0dXJuIGZpbmRBdHRyaWJ1dGVJblZlY3Rvciht
X2F0dHJpYnV0ZXMsIGF0dHJpYnV0ZU5hbWUpOworICAgIH0KKworICAgIFZlY3RvcjxBdHRyaWJ1
dGU+JiBhdHRyaWJ1dGVzKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh1c2VzQXR0cmlidXRlcygp
KTsKKyAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlczsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0
b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
dXNlc0F0dHJpYnV0ZXMoKSk7CisgICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZXM7CisgICAgfQor
CisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBIVE1MVG9rZW5UeXBlczo6Q2hhcmFjdGVyKTsKKyAgICAgICAgcmV0dXJu
IG1fZXh0ZXJuYWxDaGFyYWN0ZXJzOworICAgIH0KKworICAgIHNpemVfdCBjaGFyYWN0ZXJzTGVu
Z3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSFRNTFRva2VuVHlw
ZXM6OkNoYXJhY3Rlcik7CisgICAgICAgIHJldHVybiBtX2V4dGVybmFsQ2hhcmFjdGVyc0xlbmd0
aDsKKyAgICB9CisKKyAgICBib29sIGlzQWxsOEJpdERhdGEoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1faXNBbGw4Qml0RGF0YTsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcmIGNv
bW1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBIVE1MVG9rZW5U
eXBlczo6Q29tbWVudCk7CisgICAgICAgIHJldHVybiBtX2RhdGE7CisgICAgfQorCisgICAgLy8g
RklYTUU6IERpc3Rpbmd1aXNoIGJldHdlZW4gYSBtaXNzaW5nIHB1YmxpYyBpZGVudGlmZXIgYW5k
IGFuIGVtcHR5IG9uZS4KKyAgICBXVEY6OlZlY3RvcjxVQ2hhcj4mIHB1YmxpY0lkZW50aWZpZXIo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBIVE1MVG9rZW5UeXBlczo6
RE9DVFlQRSk7CisgICAgICAgIHJldHVybiBtX2RvY3R5cGVEYXRhLT5tX3B1YmxpY0lkZW50aWZp
ZXI7CisgICAgfQorCisgICAgLy8gRklYTUU6IERpc3Rpbmd1aXNoIGJldHdlZW4gYSBtaXNzaW5n
IHN5c3RlbSBpZGVudGlmZXIgYW5kIGFuIGVtcHR5IG9uZS4KKyAgICBXVEY6OlZlY3RvcjxVQ2hh
cj4mIHN5c3RlbUlkZW50aWZpZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlw
ZSA9PSBIVE1MVG9rZW5UeXBlczo6RE9DVFlQRSk7CisgICAgICAgIHJldHVybiBtX2RvY3R5cGVE
YXRhLT5tX3N5c3RlbUlkZW50aWZpZXI7CisgICAgfQorCisgICAgdm9pZCBjbGVhckV4dGVybmFs
Q2hhcmFjdGVycygpCisgICAgeworICAgICAgICBtX2V4dGVybmFsQ2hhcmFjdGVycyA9IDA7Cisg
ICAgICAgIG1fZXh0ZXJuYWxDaGFyYWN0ZXJzTGVuZ3RoID0gMDsKKyAgICAgICAgbV9pc0FsbDhC
aXREYXRhID0gZmFsc2U7CisgICAgfQorCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEF0b21pY0hU
TUxUb2tlbihIVE1MVG9rZW4mIHRva2VuKQotICAgICAgICA6IEF0b21pY01hcmt1cFRva2VuQmFz
ZTxIVE1MVG9rZW4+KCZ0b2tlbikKKyAgICAgICAgOiBtX3R5cGUodG9rZW4udHlwZSgpKQogICAg
IHsKKyAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2FzZSBIVE1MVG9rZW5UeXBl
czo6VW5pbml0aWFsaXplZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSFRNTFRva2VuVHlwZXM6OkRPQ1RZUEU6Cisg
ICAgICAgICAgICBtX25hbWUgPSBBdG9taWNTdHJpbmcodG9rZW4ubmFtZVN0cmluZygpKTsKKyAg
ICAgICAgICAgIG1fZG9jdHlwZURhdGEgPSB0b2tlbi5yZWxlYXNlRG9jdHlwZURhdGEoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEhUTUxUb2tlblR5cGVzOjpFbmRPZkZpbGU6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBIVE1MVG9rZW5UeXBlczo6U3RhcnRU
YWc6CisgICAgICAgIGNhc2UgSFRNTFRva2VuVHlwZXM6OkVuZFRhZzogeworICAgICAgICAgICAg
bV9zZWxmQ2xvc2luZyA9IHRva2VuLnNlbGZDbG9zaW5nKCk7CisgICAgICAgICAgICBtX25hbWUg
PSBBdG9taWNTdHJpbmcodG9rZW4ubmFtZVN0cmluZygpKTsKKyAgICAgICAgICAgIGluaXRpYWxp
emVBdHRyaWJ1dGVzKHRva2VuLmF0dHJpYnV0ZXMoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIEhUTUxUb2tlblR5cGVzOjpDb21tZW50OgorICAgICAgICAg
ICAgaWYgKHRva2VuLmlzQWxsOEJpdERhdGEoKSkKKyAgICAgICAgICAgICAgICBtX2RhdGEgPSBT
dHJpbmc6Om1ha2U4Qml0RnJvbTE2Qml0U291cmNlKHRva2VuLmNvbW1lbnQoKS5kYXRhKCksIHRv
a2VuLmNvbW1lbnQoKS5zaXplKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG1fZGF0YSA9IFN0cmluZyh0b2tlbi5jb21tZW50KCkuZGF0YSgpLCB0b2tlbi5jb21tZW50KCku
c2l6ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEhUTUxUb2tlblR5cGVz
OjpDaGFyYWN0ZXI6CisgICAgICAgICAgICBtX2V4dGVybmFsQ2hhcmFjdGVycyA9IHRva2VuLmNo
YXJhY3RlcnMoKS5kYXRhKCk7CisgICAgICAgICAgICBtX2V4dGVybmFsQ2hhcmFjdGVyc0xlbmd0
aCA9IHRva2VuLmNoYXJhY3RlcnMoKS5zaXplKCk7CisgICAgICAgICAgICBtX2lzQWxsOEJpdERh
dGEgPSB0b2tlbi5pc0FsbDhCaXREYXRhKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogCiAjaWYgRU5B
QkxFKFRIUkVBREVEX0hUTUxfUEFSU0VSKQogCiAgICAgZXhwbGljaXQgQXRvbWljSFRNTFRva2Vu
KGNvbnN0IENvbXBhY3RIVE1MVG9rZW4mIHRva2VuKQotICAgICAgICA6IEF0b21pY01hcmt1cFRv
a2VuQmFzZTxIVE1MVG9rZW4+KHRva2VuLnR5cGUoKSkKKyAgICAgICAgOiBtX3R5cGUodG9rZW4u
dHlwZSgpKQogICAgIHsKICAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICAgICAgY2FzZSBI
VE1MVG9rZW5UeXBlczo6VW5pbml0aWFsaXplZDoKQEAgLTEzNiwxMiArMjUwLDkwIEBAIHByaXZh
dGU6CiAKICNlbmRpZgogCi0gICAgQXRvbWljSFRNTFRva2VuKEhUTUxUb2tlblR5cGVzOjpUeXBl
IHR5cGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4m
IGF0dHJpYnV0ZXMgPSBWZWN0b3I8QXR0cmlidXRlPigpKQotICAgICAgICA6IEF0b21pY01hcmt1
cFRva2VuQmFzZTxIVE1MVG9rZW4+KHR5cGUsIG5hbWUsIGF0dHJpYnV0ZXMpCisgICAgZXhwbGlj
aXQgQXRvbWljSFRNTFRva2VuKHR5cGVuYW1lIEhUTUxUb2tlblR5cGVzOjpUeXBlIHR5cGUpCisg
ICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9leHRlcm5hbENoYXJhY3RlcnMoMCkK
KyAgICAgICAgLCBtX2V4dGVybmFsQ2hhcmFjdGVyc0xlbmd0aCgwKQorICAgICAgICAsIG1faXNB
bGw4Qml0RGF0YShmYWxzZSkKKyAgICAgICAgLCBtX3NlbGZDbG9zaW5nKGZhbHNlKQogICAgIHsK
ICAgICB9CisKKyAgICBBdG9taWNIVE1MVG9rZW4odHlwZW5hbWUgSFRNTFRva2VuVHlwZXM6OlR5
cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8QXR0cmlidXRl
PiYgYXR0cmlidXRlcyA9IFZlY3RvcjxBdHRyaWJ1dGU+KCkpCisgICAgICAgIDogbV90eXBlKHR5
cGUpCisgICAgICAgICwgbV9uYW1lKG5hbWUpCisgICAgICAgICwgbV9leHRlcm5hbENoYXJhY3Rl
cnMoMCkKKyAgICAgICAgLCBtX2V4dGVybmFsQ2hhcmFjdGVyc0xlbmd0aCgwKQorICAgICAgICAs
IG1faXNBbGw4Qml0RGF0YShmYWxzZSkKKyAgICAgICAgLCBtX3NlbGZDbG9zaW5nKGZhbHNlKQor
ICAgICAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KHVzZXNOYW1lKCkpOworICAgIH0KKworICAgIEhUTUxUb2tlblR5cGVzOjpUeXBlIG1fdHlwZTsK
KworICAgIHZvaWQgaW5pdGlhbGl6ZUF0dHJpYnV0ZXMoY29uc3QgdHlwZW5hbWUgSFRNTFRva2Vu
OjpBdHRyaWJ1dGVMaXN0JiBhdHRyaWJ1dGVzKTsKKyAgICBRdWFsaWZpZWROYW1lIG5hbWVGb3JB
dHRyaWJ1dGUoY29uc3QgdHlwZW5hbWUgSFRNTFRva2VuOjpBdHRyaWJ1dGUmKSBjb25zdDsKKwor
ICAgIGJvb2wgdXNlc05hbWUoKSBjb25zdDsKKworICAgIGJvb2wgdXNlc0F0dHJpYnV0ZXMoKSBj
b25zdDsKKworICAgIC8vICJuYW1lIiBmb3IgRE9DVFlQRSwgU3RhcnRUYWcsIGFuZCBFbmRUYWcK
KyAgICBBdG9taWNTdHJpbmcgbV9uYW1lOworCisgICAgLy8gImRhdGEiIGZvciBDb21tZW50Cisg
ICAgU3RyaW5nIG1fZGF0YTsKKworICAgIC8vICJjaGFyYWN0ZXJzIiBmb3IgQ2hhcmFjdGVyCisg
ICAgLy8KKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNvcHkgdGhlIHRoZSBjaGFyYWN0ZXJzIG91
dCBvZiB0aGUgVG9rZW4sIHNvIHdlCisgICAgLy8ga2VlcCBhIHBvaW50ZXIgdG8gaXRzIGJ1ZmZl
ciBpbnN0ZWFkLiBUaGlzIGJ1ZmZlciBpcyBvd25lZCBieSB0aGUKKyAgICAvLyBUb2tlbiBhbmQg
Y2F1c2VzIGEgbGlmZXRpbWUgZGVwZW5kZW5jZSBiZXR3ZWVuIHRoZXNlIG9iamVjdHMuCisgICAg
Ly8KKyAgICAvLyBGSVhNRTogQWRkIGEgbWVjaGFuaXNtIGZvciAiaW50ZXJuYWxpemluZyIgdGhl
IGNoYXJhY3RlcnMgd2hlbiB0aGUKKyAgICAvLyAgICAgICAgSFRNTFRva2VuIGlzIGRlc3RydWN0
ZWQuCisgICAgY29uc3QgVUNoYXIqIG1fZXh0ZXJuYWxDaGFyYWN0ZXJzOworICAgIHNpemVfdCBt
X2V4dGVybmFsQ2hhcmFjdGVyc0xlbmd0aDsKKyAgICBib29sIG1faXNBbGw4Qml0RGF0YTsKKwor
ICAgIC8vIEZvciBET0NUWVBFCisgICAgT3duUHRyPEhUTUxUb2tlblR5cGVzOjpEb2N0eXBlRGF0
YT4gbV9kb2N0eXBlRGF0YTsKKworICAgIC8vIEZvciBTdGFydFRhZyBhbmQgRW5kVGFnCisgICAg
Ym9vbCBtX3NlbGZDbG9zaW5nOworCisgICAgVmVjdG9yPEF0dHJpYnV0ZT4gbV9hdHRyaWJ1dGVz
OwogfTsKIAoraW5saW5lIHZvaWQgQXRvbWljSFRNTFRva2VuOjppbml0aWFsaXplQXR0cmlidXRl
cyhjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3QmIGF0dHJpYnV0ZXMpCit7CisgICAgc2l6
ZV90IHNpemUgPSBhdHRyaWJ1dGVzLnNpemUoKTsKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fYXR0cmlidXRlcy5jbGVhcigpOworICAgIG1fYXR0cmlidXRlcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7CisgICAgICAgIGNvbnN0IHR5cGVuYW1lIEhUTUxUb2tlbjo6QXR0cmlidXRlJiBh
dHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2ldOworICAgICAgICBpZiAoYXR0cmlidXRlLm1fbmFtZS5p
c0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGJlIGFibGUgdG8gYWRkIHRoZSBmb2xsb3dpbmcgQVNTRVJUIG9uY2Ugd2UgZml4Cisg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Mjk3MQor
ICAgICAgICAvLyAgIEFTU0VSVChhdHRyaWJ1dGUubV9uYW1lUmFuZ2UubV9zdGFydCk7CisgICAg
ICAgIEFTU0VSVChhdHRyaWJ1dGUubV9uYW1lUmFuZ2UubV9lbmQpOworICAgICAgICBBU1NFUlQo
YXR0cmlidXRlLm1fdmFsdWVSYW5nZS5tX3N0YXJ0KTsKKyAgICAgICAgQVNTRVJUKGF0dHJpYnV0
ZS5tX3ZhbHVlUmFuZ2UubV9lbmQpOworCisgICAgICAgIEF0b21pY1N0cmluZyB2YWx1ZShhdHRy
aWJ1dGUubV92YWx1ZS5kYXRhKCksIGF0dHJpYnV0ZS5tX3ZhbHVlLnNpemUoKSk7CisgICAgICAg
IGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUgPSBuYW1lRm9yQXR0cmlidXRlKGF0dHJpYnV0ZSk7
CisgICAgICAgIGlmICghZmluZEF0dHJpYnV0ZUluVmVjdG9yKG1fYXR0cmlidXRlcywgbmFtZSkp
CisgICAgICAgICAgICBtX2F0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkp
OworICAgIH0KK30KKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFRva2VuaXplci5jcHAKaW5kZXggMTRiODJlMGM3YzkxZDQzZWFiOGQ4NzRiMjdkNTlhYzdi
OTg3MWExZS4uN2RlNDI4ODZmZDJjZDcwOTVlMTdiZmI0MjMyZTlkNmIyNWM0ZmE0ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAKQEAgLTQ5LDIwICs0
OSwxNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAvLyBUaGlzIGhhcyB0byBnbyBp
biBhIC5jcHAgZmlsZSwgYXMgdGhlIGxpbmtlciBkb2Vzbid0IGxpa2UgaXQgYmVpbmcgaW5jbHVk
ZWQgbW9yZSB0aGFuIG9uY2UuCiAvLyBXZSBkb24ndCBoYXZlIGFuIEhUTUxUb2tlbi5jcHAgdGhv
dWdoLCBzbyB0aGlzIGlzIHRoZSBuZXh0IGJlc3QgcGxhY2UuCi10ZW1wbGF0ZTw+Ci1RdWFsaWZp
ZWROYW1lIEF0b21pY01hcmt1cFRva2VuQmFzZTxIVE1MVG9rZW4+OjpuYW1lRm9yQXR0cmlidXRl
KGNvbnN0IEF0dHJpYnV0ZUJhc2UmIGF0dHJpYnV0ZSkgY29uc3QKK1F1YWxpZmllZE5hbWUgQXRv
bWljSFRNTFRva2VuOjpuYW1lRm9yQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZUJhc2UmIGF0dHJp
YnV0ZSkgY29uc3QKIHsKICAgICByZXR1cm4gUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgQXRvbWlj
U3RyaW5nKGF0dHJpYnV0ZS5tX25hbWUuZGF0YSgpLCBhdHRyaWJ1dGUubV9uYW1lLnNpemUoKSks
IG51bGxBdG9tKTsKIH0KIAotdGVtcGxhdGU8PgotYm9vbCBBdG9taWNNYXJrdXBUb2tlbkJhc2U8
SFRNTFRva2VuPjo6dXNlc05hbWUoKSBjb25zdAorYm9vbCBBdG9taWNIVE1MVG9rZW46OnVzZXNO
YW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV90eXBlID09IEhUTUxUb2tlblR5cGVzOjpTdGFy
dFRhZyB8fCBtX3R5cGUgPT0gSFRNTFRva2VuVHlwZXM6OkVuZFRhZyB8fCBtX3R5cGUgPT0gSFRN
TFRva2VuVHlwZXM6OkRPQ1RZUEU7CiB9CiAKLXRlbXBsYXRlPD4KLWJvb2wgQXRvbWljTWFya3Vw
VG9rZW5CYXNlPEhUTUxUb2tlbj46OnVzZXNBdHRyaWJ1dGVzKCkgY29uc3QKK2Jvb2wgQXRvbWlj
SFRNTFRva2VuOjp1c2VzQXR0cmlidXRlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdHlwZSA9
PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcgfHwgbV90eXBlID09IEhUTUxUb2tlblR5cGVzOjpF
bmRUYWc7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL01hcmt1cFRv
a2VuQmFzZS5oIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaApp
bmRleCBjYmZlMmFjMDdkZjhmYjY1NjI0YjNiYzBhMWIyY2QxNjU4NzE4YzAxLi41MWMxZDA1YTVh
NDRiMDcxY2QwNTM4MjRlYWI2Yzg0MTI1YmQ0NjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS94bWwvcGFyc2VyL01hcmt1cFRva2VuQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9w
YXJzZXIvTWFya3VwVG9rZW5CYXNlLmgKQEAgLTQ1LDcgKzQ1LDYgQEAgc3RhdGljIGlubGluZSBB
dHRyaWJ1dGUqIGZpbmRBdHRyaWJ1dGVJblZlY3RvcihWZWN0b3I8QXR0cmlidXRlPiYgYXR0cmli
dXRlcywgY28KICAgICByZXR1cm4gMDsKIH0KIAotCiBjbGFzcyBEb2N0eXBlRGF0YUJhc2Ugewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERvY3R5cGVEYXRhQmFzZSk7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgpAQCAtMzc2LDYgKzM3NSwyNSBAQCBwdWJsaWM6CiAgICAgICAg
IG1fZG9jdHlwZURhdGEtPm1fc3lzdGVtSWRlbnRpZmllci5hcHBlbmQoY2hhcmFjdGVyKTsKICAg
ICB9CiAKKyAgICBjb25zdCBEYXRhVmVjdG9yJiBuYW1lKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2RhdGE7CisgICAgfQorCisgICAgU3RyaW5nIG5hbWVTdHJpbmcoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGEuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7CisgICAgICAgIGlmIChpc0FsbDhCaXREYXRhKCkpCisgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nOjptYWtlOEJpdEZyb20xNkJpdFNvdXJjZShtX2RhdGEuZGF0YSgpLCBtX2Rh
dGEuc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZyhtX2RhdGEuZGF0YSgpLCBtX2RhdGEu
c2l6ZSgpKTsKKyAgICB9CisKKyAgICBQYXNzT3duUHRyPERvY3R5cGVEYXRhPiByZWxlYXNlRG9j
dHlwZURhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZG9jdHlwZURhdGEucmVsZWFzZSgp
OworICAgIH0KKwogcHJvdGVjdGVkOgogCiAjaWZuZGVmIE5ERUJVRwpAQCAtMzk0LDI2ICs0MTIs
NiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fb3JBbGxEYXRhIHw9IGNoYXJhY3RlcjsKICAgICB9
CiAKLSAgICBjb25zdCBEYXRhVmVjdG9yJiBuYW1lKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2RhdGE7Ci0gICAgfQotCi0gICAgU3RyaW5nIG5hbWVTdHJpbmcoKSBjb25zdAotICAg
IHsKLSAgICAgICAgaWYgKCFtX2RhdGEuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7Ci0gICAgICAgIGlmIChpc0FsbDhCaXREYXRhKCkpCi0gICAgICAgICAgICByZXR1
cm4gU3RyaW5nOjptYWtlOEJpdEZyb20xNkJpdFNvdXJjZShtX2RhdGEuZGF0YSgpLCBtX2RhdGEu
c2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuIFN0cmluZyhtX2RhdGEuZGF0YSgpLCBtX2RhdGEuc2l6
ZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogSSdtIG5vdCBzdXJlIHdoYXQgdGhlIGZpbmFs
IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIE1hcmt1cFRva2VuQmFzZSBhbmQKLSAgICAvLyBBdG9taWNN
YXJrdXBUb2tlbkJhc2Ugd2lsbCBiZS4gSSdtIG1hcmtpbmcgdGhpcyBhIGZyaWVuZCBmb3Igbm93
LCBidXQgd2UnbGwKLSAgICAvLyB3YW50IHRvIGVuZCB1cCB3aXRoIGEgY2xlYW5lciBpbnRlcmZh
Y2UgYmV0d2VlbiB0aGUgdHdvIGNsYXNzZXMuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVG9rZW4+
Ci0gICAgZnJpZW5kIGNsYXNzIEF0b21pY01hcmt1cFRva2VuQmFzZTsKLQogICAgIHR5cGVuYW1l
IFR5cGU6OlR5cGUgbV90eXBlOwogICAgIHR5cGVuYW1lIEF0dHJpYnV0ZTo6UmFuZ2UgbV9yYW5n
ZTsgLy8gQWx3YXlzIHN0YXJ0cyBhdCB6ZXJvLgogICAgIGludCBtX2Jhc2VPZmZzZXQ7CkBAIC00
MzEsMjE1ICs0MjksNiBAQCBwcm90ZWN0ZWQ6CiAgICAgQXR0cmlidXRlKiBtX2N1cnJlbnRBdHRy
aWJ1dGU7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUb2tlbj4KLWNsYXNzIEF0b21pY01hcmt1
cFRva2VuQmFzZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXRvbWljTWFya3VwVG9rZW5C
YXNlKTsKLXB1YmxpYzoKLSAgICBBdG9taWNNYXJrdXBUb2tlbkJhc2UoVG9rZW4qIHRva2VuKQot
ICAgICAgICA6IG1fdHlwZSh0b2tlbi0+dHlwZSgpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHRv
a2VuKTsKLQotICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgICAgICBjYXNlIFRva2VuOjpU
eXBlOjpVbmluaXRpYWxpemVkOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6RE9DVFlQRToKLSAg
ICAgICAgICAgIG1fbmFtZSA9IEF0b21pY1N0cmluZyh0b2tlbi0+bmFtZVN0cmluZygpKTsKLSAg
ICAgICAgICAgIG1fZG9jdHlwZURhdGEgPSB0b2tlbi0+bV9kb2N0eXBlRGF0YS5yZWxlYXNlKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6RW5kT2ZGaWxl
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OlN0YXJ0VGFn
OgotICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpFbmRUYWc6IHsKLSAgICAgICAgICAgIG1fc2Vs
ZkNsb3NpbmcgPSB0b2tlbi0+c2VsZkNsb3NpbmcoKTsKLSAgICAgICAgICAgIG1fbmFtZSA9IEF0
b21pY1N0cmluZyh0b2tlbi0+bmFtZVN0cmluZygpKTsKLSAgICAgICAgICAgIGluaXRpYWxpemVB
dHRyaWJ1dGVzKHRva2VuLT5hdHRyaWJ1dGVzKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6Q29tbWVudDoKLSAgICAgICAgICAgIGlm
ICh0b2tlbi0+aXNBbGw4Qml0RGF0YSgpKQotICAgICAgICAgICAgICAgIG1fZGF0YSA9IFN0cmlu
Zzo6bWFrZThCaXRGcm9tMTZCaXRTb3VyY2UodG9rZW4tPmNvbW1lbnQoKS5kYXRhKCksIHRva2Vu
LT5jb21tZW50KCkuc2l6ZSgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBt
X2RhdGEgPSBTdHJpbmcodG9rZW4tPmNvbW1lbnQoKS5kYXRhKCksIHRva2VuLT5jb21tZW50KCku
c2l6ZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpD
aGFyYWN0ZXI6Ci0gICAgICAgICAgICBtX2V4dGVybmFsQ2hhcmFjdGVycyA9IHRva2VuLT5jaGFy
YWN0ZXJzKCkuZGF0YSgpOwotICAgICAgICAgICAgbV9leHRlcm5hbENoYXJhY3RlcnNMZW5ndGgg
PSB0b2tlbi0+Y2hhcmFjdGVycygpLnNpemUoKTsKLSAgICAgICAgICAgIG1faXNBbGw4Qml0RGF0
YSA9IHRva2VuLT5pc0FsbDhCaXREYXRhKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZXhw
bGljaXQgQXRvbWljTWFya3VwVG9rZW5CYXNlKHR5cGVuYW1lIFRva2VuOjpUeXBlOjpUeXBlIHR5
cGUpCi0gICAgICAgIDogbV90eXBlKHR5cGUpCi0gICAgICAgICwgbV9leHRlcm5hbENoYXJhY3Rl
cnMoMCkKLSAgICAgICAgLCBtX2V4dGVybmFsQ2hhcmFjdGVyc0xlbmd0aCgwKQotICAgICAgICAs
IG1faXNBbGw4Qml0RGF0YShmYWxzZSkKLSAgICAgICAgLCBtX3NlbGZDbG9zaW5nKGZhbHNlKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBBdG9taWNNYXJrdXBUb2tlbkJhc2UodHlwZW5hbWUgVG9rZW46
OlR5cGU6OlR5cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8
QXR0cmlidXRlPiYgYXR0cmlidXRlcyA9IFZlY3RvcjxBdHRyaWJ1dGU+KCkpCi0gICAgICAgIDog
bV90eXBlKHR5cGUpCi0gICAgICAgICwgbV9uYW1lKG5hbWUpCi0gICAgICAgICwgbV9leHRlcm5h
bENoYXJhY3RlcnMoMCkKLSAgICAgICAgLCBtX2V4dGVybmFsQ2hhcmFjdGVyc0xlbmd0aCgwKQot
ICAgICAgICAsIG1faXNBbGw4Qml0RGF0YShmYWxzZSkKLSAgICAgICAgLCBtX2F0dHJpYnV0ZXMo
YXR0cmlidXRlcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh1c2VzTmFtZSgpKTsKLSAgICB9Ci0K
LSAgICB0eXBlbmFtZSBUb2tlbjo6VHlwZTo6VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgQVNTRVJUKHVzZXNOYW1lKCkpOwotICAgICAgICByZXR1cm4gbV9uYW1lOwotICAgIH0K
LQotICAgIHZvaWQgc2V0TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCi0gICAgewotICAg
ICAgICBBU1NFUlQodXNlc05hbWUoKSk7Ci0gICAgICAgIG1fbmFtZSA9IG5hbWU7Ci0gICAgfQot
Ci0gICAgYm9vbCBzZWxmQ2xvc2luZygpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90
eXBlID09IFRva2VuOjpUeXBlOjpTdGFydFRhZyB8fCBtX3R5cGUgPT0gVG9rZW46OlR5cGU6OkVu
ZFRhZyk7Ci0gICAgICAgIHJldHVybiBtX3NlbGZDbG9zaW5nOwotICAgIH0KLQotICAgIEF0dHJp
YnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1l
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHVzZXNBdHRyaWJ1dGVzKCkpOwotICAgICAgICByZXR1
cm4gZmluZEF0dHJpYnV0ZUluVmVjdG9yKG1fYXR0cmlidXRlcywgYXR0cmlidXRlTmFtZSk7Ci0g
ICAgfQotCi0gICAgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMoKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKHVzZXNBdHRyaWJ1dGVzKCkpOwotICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVz
OwotICAgIH0KLQotICAgIGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVzKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh1c2VzQXR0cmlidXRlcygpKTsKLSAgICAgICAgcmV0
dXJuIG1fYXR0cmlidXRlczsKLSAgICB9Ci0KLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygp
IGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IFRva2VuOjpUeXBlOjpDaGFy
YWN0ZXIpOwotICAgICAgICByZXR1cm4gbV9leHRlcm5hbENoYXJhY3RlcnM7Ci0gICAgfQotCi0g
ICAgc2l6ZV90IGNoYXJhY3RlcnNMZW5ndGgoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fdHlwZSA9PSBUb2tlbjo6VHlwZTo6Q2hhcmFjdGVyKTsKLSAgICAgICAgcmV0dXJuIG1fZXh0
ZXJuYWxDaGFyYWN0ZXJzTGVuZ3RoOwotICAgIH0KLQotICAgIGJvb2wgaXNBbGw4Qml0RGF0YSgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9pc0FsbDhCaXREYXRhOwotICAgIH0KLQot
ICAgIGNvbnN0IFN0cmluZyYgY29tbWVudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQo
bV90eXBlID09IFRva2VuOjpUeXBlOjpDb21tZW50KTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YTsK
LSAgICB9Ci0KLSAgICAvLyBGSVhNRTogRGlzdGluZ3Vpc2ggYmV0d2VlbiBhIG1pc3NpbmcgcHVi
bGljIGlkZW50aWZlciBhbmQgYW4gZW1wdHkgb25lLgotICAgIFdURjo6VmVjdG9yPFVDaGFyPiYg
cHVibGljSWRlbnRpZmllcigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09
IFRva2VuOjpUeXBlOjpET0NUWVBFKTsKLSAgICAgICAgcmV0dXJuIG1fZG9jdHlwZURhdGEtPm1f
cHVibGljSWRlbnRpZmllcjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogRGlzdGluZ3Vpc2ggYmV0
d2VlbiBhIG1pc3Npbmcgc3lzdGVtIGlkZW50aWZlciBhbmQgYW4gZW1wdHkgb25lLgotICAgIFdU
Rjo6VmVjdG9yPFVDaGFyPiYgc3lzdGVtSWRlbnRpZmllcigpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQobV90eXBlID09IFRva2VuOjpUeXBlOjpET0NUWVBFKTsKLSAgICAgICAgcmV0dXJu
IG1fZG9jdHlwZURhdGEtPm1fc3lzdGVtSWRlbnRpZmllcjsKLSAgICB9Ci0KLSAgICB2b2lkIGNs
ZWFyRXh0ZXJuYWxDaGFyYWN0ZXJzKCkKLSAgICB7Ci0gICAgICAgIG1fZXh0ZXJuYWxDaGFyYWN0
ZXJzID0gMDsKLSAgICAgICAgbV9leHRlcm5hbENoYXJhY3RlcnNMZW5ndGggPSAwOwotICAgICAg
ICBtX2lzQWxsOEJpdERhdGEgPSBmYWxzZTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB0eXBl
bmFtZSBUb2tlbjo6VHlwZTo6VHlwZSBtX3R5cGU7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVBdHRy
aWJ1dGVzKGNvbnN0IHR5cGVuYW1lIFRva2VuOjpBdHRyaWJ1dGVMaXN0JiBhdHRyaWJ1dGVzKTsK
LSAgICBRdWFsaWZpZWROYW1lIG5hbWVGb3JBdHRyaWJ1dGUoY29uc3QgdHlwZW5hbWUgVG9rZW46
OkF0dHJpYnV0ZSYpIGNvbnN0OwotCi0gICAgYm9vbCB1c2VzTmFtZSgpIGNvbnN0OwotCi0gICAg
Ym9vbCB1c2VzQXR0cmlidXRlcygpIGNvbnN0OwotCi0gICAgLy8gIm5hbWUiIGZvciBET0NUWVBF
LCBTdGFydFRhZywgYW5kIEVuZFRhZwotICAgIEF0b21pY1N0cmluZyBtX25hbWU7Ci0KLSAgICAv
LyAiZGF0YSIgZm9yIENvbW1lbnQKLSAgICBTdHJpbmcgbV9kYXRhOwotCi0gICAgLy8gImNoYXJh
Y3RlcnMiIGZvciBDaGFyYWN0ZXIKLSAgICAvLwotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY29w
eSB0aGUgdGhlIGNoYXJhY3RlcnMgb3V0IG9mIHRoZSBUb2tlbiwgc28gd2UKLSAgICAvLyBrZWVw
IGEgcG9pbnRlciB0byBpdHMgYnVmZmVyIGluc3RlYWQuIFRoaXMgYnVmZmVyIGlzIG93bmVkIGJ5
IHRoZQotICAgIC8vIFRva2VuIGFuZCBjYXVzZXMgYSBsaWZldGltZSBkZXBlbmRlbmNlIGJldHdl
ZW4gdGhlc2Ugb2JqZWN0cy4KLSAgICAvLwotICAgIC8vIEZJWE1FOiBBZGQgYSBtZWNoYW5pc20g
Zm9yICJpbnRlcm5hbGl6aW5nIiB0aGUgY2hhcmFjdGVycyB3aGVuIHRoZQotICAgIC8vICAgICAg
ICBIVE1MVG9rZW4gaXMgZGVzdHJ1Y3RlZC4KLSAgICBjb25zdCBVQ2hhciogbV9leHRlcm5hbENo
YXJhY3RlcnM7Ci0gICAgc2l6ZV90IG1fZXh0ZXJuYWxDaGFyYWN0ZXJzTGVuZ3RoOwotICAgIGJv
b2wgbV9pc0FsbDhCaXREYXRhOwotCi0gICAgLy8gRm9yIERPQ1RZUEUKLSAgICBPd25QdHI8dHlw
ZW5hbWUgVG9rZW46OkRvY3R5cGVEYXRhPiBtX2RvY3R5cGVEYXRhOwotCi0gICAgLy8gRm9yIFN0
YXJ0VGFnIGFuZCBFbmRUYWcKLSAgICBib29sIG1fc2VsZkNsb3Npbmc7Ci0KLSAgICBWZWN0b3I8
QXR0cmlidXRlPiBtX2F0dHJpYnV0ZXM7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUb2tlbj4K
LWlubGluZSB2b2lkIEF0b21pY01hcmt1cFRva2VuQmFzZTxUb2tlbj46OmluaXRpYWxpemVBdHRy
aWJ1dGVzKGNvbnN0IHR5cGVuYW1lIFRva2VuOjpBdHRyaWJ1dGVMaXN0JiBhdHRyaWJ1dGVzKQot
ewotICAgIHNpemVfdCBzaXplID0gYXR0cmlidXRlcy5zaXplKCk7Ci0gICAgaWYgKCFzaXplKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX2F0dHJpYnV0ZXMuY2xlYXIoKTsKLSAgICBtX2F0dHJp
YnV0ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBjb25zdCB0eXBlbmFtZSBUb2tlbjo6QXR0cmli
dXRlJiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2ldOwotICAgICAgICBpZiAoYXR0cmlidXRlLm1f
bmFtZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gYWRkIHRoZSBmb2xsb3dpbmcgQVNTRVJUIG9uY2Ugd2Ug
Zml4Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
Mjk3MQotICAgICAgICAvLyAgIEFTU0VSVChhdHRyaWJ1dGUubV9uYW1lUmFuZ2UubV9zdGFydCk7
Ci0gICAgICAgIEFTU0VSVChhdHRyaWJ1dGUubV9uYW1lUmFuZ2UubV9lbmQpOwotICAgICAgICBB
U1NFUlQoYXR0cmlidXRlLm1fdmFsdWVSYW5nZS5tX3N0YXJ0KTsKLSAgICAgICAgQVNTRVJUKGF0
dHJpYnV0ZS5tX3ZhbHVlUmFuZ2UubV9lbmQpOwotCi0gICAgICAgIEF0b21pY1N0cmluZyB2YWx1
ZShhdHRyaWJ1dGUubV92YWx1ZS5kYXRhKCksIGF0dHJpYnV0ZS5tX3ZhbHVlLnNpemUoKSk7Ci0g
ICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUgPSBuYW1lRm9yQXR0cmlidXRlKGF0dHJp
YnV0ZSk7Ci0gICAgICAgIGlmICghZmluZEF0dHJpYnV0ZUluVmVjdG9yKG1fYXR0cmlidXRlcywg
bmFtZSkpCi0gICAgICAgICAgICBtX2F0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShuYW1lLCB2
YWx1ZSkpOwotICAgIH0KLX0KLQogfQogCiAjZW5kaWYgLy8gTWFya3VwVG9rZW5CYXNlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183927</attachid>
            <date>2013-01-22 01:32:31 -0800</date>
            <delta_ts>2013-01-22 02:27:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107513-20130122012926.patch</filename>
            <type>text/plain</type>
            <size>18677</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMzg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2FiMjAzNTMzMzFlMGUy
MWM3OGNlMDgyZTY4MDYyMTlmY2I2YTBkYi4uNWI2MzFiMWM5NjgxYjE0NmEyZGE5ZTBlZjg0ZTkx
MWYzZDY0ZTRjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEzLTAxLTIyICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQXRvbWljTWFya3VwVG9rZW5C
YXNlIG11c3QgZGllCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDc1MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBOb3cgdGhhdCBORVdfWE1MIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgdHJlZSwgdGhl
cmUgaXMgbm8gcmVhc29uIHRvCisgICAgICAgIGhhdmUgQXRvbWljTWFya3VwVG9rZW5CYXNlIGV4
aXN0IGFzIGEgdGVtcGxhdGVkIGJhc2UgY2xhc3MgZm9yCisgICAgICAgIEF0b21pY0hUTUxUb2tl
bi4gVGhpcyBwYXRjaCBqdXN0IG1lcmdlcyB0aGUgY29kZSBiYWNrIGludG8KKyAgICAgICAgQXRv
bWljSFRNTFRva2VuLgorCisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRva2VuLmg6CisgICAg
ICAgIChBdG9taWNIVE1MVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljSFRNTFRva2Vu
Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY0hUTUxUb2tlbjo6bmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBdG9taWNIVE1MVG9rZW46OnNldE5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXRvbWljSFRNTFRva2VuOjpzZWxmQ2xvc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpBdG9t
aWNIVE1MVG9rZW46OmdldEF0dHJpYnV0ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWlj
SFRNTFRva2VuOjphdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY0hUTUxUb2tl
bjo6Y2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNIVE1MVG9rZW46OmNoYXJh
Y3RlcnNMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljSFRNTFRva2VuOjppc0FsbDhC
aXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY0hUTUxUb2tlbjo6Y29tbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdG9taWNIVE1MVG9rZW46OnB1YmxpY0lkZW50aWZpZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6QXRvbWljSFRNTFRva2VuOjpzeXN0ZW1JZGVudGlmaWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF0b21pY0hUTUxUb2tlbjo6Y2xlYXJFeHRlcm5hbENoYXJhY3RlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6QXRvbWljSFRNTFRva2VuOjpBdG9taWNIVE1MVG9rZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6QXRvbWljTWFya3VwVG9rZW5CYXNlOjppbml0aWFsaXplQXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL01hcmt1cFRva2Vu
QmFzZS5oOgorCiAyMDEzLTAxLTIxICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgRU5BQkxFKE5FV19YTUwpIGlzbid0IHVzZWQgYnkgYW55b25lIGFuZCBubyBvbmUg
aXMgYWN0aXZlbHkgd29ya2luZyBvbiBpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFRva2VuLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9r
ZW4uaAppbmRleCA2ZWE2MzBiNjE5NGFiNzcxYzc1MTQyNzM2YTFlOTQ0ZDRmOTZkNDE4Li5mYjRh
ODVmMmNmYTg2YjkwOTQwMTdjZTg3ZmMxOTI2MGRhMDRjNjE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MVG9rZW4uaApAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgfQogfTsK
IAotY2xhc3MgQXRvbWljSFRNTFRva2VuIDogcHVibGljIEF0b21pY01hcmt1cFRva2VuQmFzZTxI
VE1MVG9rZW4+LCBwdWJsaWMgUmVmQ291bnRlZDxBdG9taWNIVE1MVG9rZW4+IHsKK2NsYXNzIEF0
b21pY0hUTUxUb2tlbiA6IHB1YmxpYyBSZWZDb3VudGVkPEF0b21pY0hUTUxUb2tlbj4gewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEF0b21pY0hUTUxUb2tlbik7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBjcmVhdGUoSFRNTFRva2VuJiB0b2tlbikK
QEAgLTg4LDE2ICs4OCwxMzAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV90eXBlID09IEhU
TUxUb2tlblR5cGVzOjpET0NUWVBFKTsKICAgICAgICAgcmV0dXJuIG1fZG9jdHlwZURhdGEtPm1f
Zm9yY2VRdWlya3M7CiAgICAgfQorCisgICAgSFRNTFRva2VuVHlwZXM6OlR5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCh1c2VzTmFtZSgpKTsKKyAgICAgICAgcmV0dXJu
IG1fbmFtZTsKKyAgICB9CisKKyAgICB2b2lkIHNldE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHVzZXNOYW1lKCkpOworICAgICAgICBtX25hbWUg
PSBuYW1lOworICAgIH0KKworICAgIGJvb2wgc2VsZkNsb3NpbmcoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1fdHlwZSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcgfHwgbV90eXBl
ID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcpOworICAgICAgICByZXR1cm4gbV9zZWxmQ2xvc2lu
ZzsKKyAgICB9CisKKyAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh1c2VzQXR0cmli
dXRlcygpKTsKKyAgICAgICAgcmV0dXJuIGZpbmRBdHRyaWJ1dGVJblZlY3RvcihtX2F0dHJpYnV0
ZXMsIGF0dHJpYnV0ZU5hbWUpOworICAgIH0KKworICAgIFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRy
aWJ1dGVzKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh1c2VzQXR0cmlidXRlcygpKTsKKyAgICAg
ICAgcmV0dXJuIG1fYXR0cmlidXRlczsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8QXR0cmli
dXRlPiYgYXR0cmlidXRlcygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQodXNlc0F0dHJp
YnV0ZXMoKSk7CisgICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZXM7CisgICAgfQorCisgICAgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlw
ZSA9PSBIVE1MVG9rZW5UeXBlczo6Q2hhcmFjdGVyKTsKKyAgICAgICAgcmV0dXJuIG1fZXh0ZXJu
YWxDaGFyYWN0ZXJzOworICAgIH0KKworICAgIHNpemVfdCBjaGFyYWN0ZXJzTGVuZ3RoKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSFRNTFRva2VuVHlwZXM6OkNoYXJh
Y3Rlcik7CisgICAgICAgIHJldHVybiBtX2V4dGVybmFsQ2hhcmFjdGVyc0xlbmd0aDsKKyAgICB9
CisKKyAgICBib29sIGlzQWxsOEJpdERhdGEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1faXNBbGw4Qml0RGF0YTsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcmIGNvbW1lbnQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBIVE1MVG9rZW5UeXBlczo6Q29t
bWVudCk7CisgICAgICAgIHJldHVybiBtX2RhdGE7CisgICAgfQorCisgICAgLy8gRklYTUU6IERp
c3Rpbmd1aXNoIGJldHdlZW4gYSBtaXNzaW5nIHB1YmxpYyBpZGVudGlmZXIgYW5kIGFuIGVtcHR5
IG9uZS4KKyAgICBXVEY6OlZlY3RvcjxVQ2hhcj4mIHB1YmxpY0lkZW50aWZpZXIoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBIVE1MVG9rZW5UeXBlczo6RE9DVFlQRSk7
CisgICAgICAgIHJldHVybiBtX2RvY3R5cGVEYXRhLT5tX3B1YmxpY0lkZW50aWZpZXI7CisgICAg
fQorCisgICAgLy8gRklYTUU6IERpc3Rpbmd1aXNoIGJldHdlZW4gYSBtaXNzaW5nIHN5c3RlbSBp
ZGVudGlmZXIgYW5kIGFuIGVtcHR5IG9uZS4KKyAgICBXVEY6OlZlY3RvcjxVQ2hhcj4mIHN5c3Rl
bUlkZW50aWZpZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBIVE1M
VG9rZW5UeXBlczo6RE9DVFlQRSk7CisgICAgICAgIHJldHVybiBtX2RvY3R5cGVEYXRhLT5tX3N5
c3RlbUlkZW50aWZpZXI7CisgICAgfQorCisgICAgdm9pZCBjbGVhckV4dGVybmFsQ2hhcmFjdGVy
cygpCisgICAgeworICAgICAgICBtX2V4dGVybmFsQ2hhcmFjdGVycyA9IDA7CisgICAgICAgIG1f
ZXh0ZXJuYWxDaGFyYWN0ZXJzTGVuZ3RoID0gMDsKKyAgICAgICAgbV9pc0FsbDhCaXREYXRhID0g
ZmFsc2U7CisgICAgfQorCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEF0b21pY0hUTUxUb2tlbihI
VE1MVG9rZW4mIHRva2VuKQotICAgICAgICA6IEF0b21pY01hcmt1cFRva2VuQmFzZTxIVE1MVG9r
ZW4+KCZ0b2tlbikKKyAgICAgICAgOiBtX3R5cGUodG9rZW4udHlwZSgpKQogICAgIHsKKyAgICAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2FzZSBIVE1MVG9rZW5UeXBlczo6VW5pbml0
aWFsaXplZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSFRNTFRva2VuVHlwZXM6OkRPQ1RZUEU6CisgICAgICAgICAg
ICBtX25hbWUgPSBBdG9taWNTdHJpbmcodG9rZW4ubmFtZVN0cmluZygpKTsKKyAgICAgICAgICAg
IG1fZG9jdHlwZURhdGEgPSB0b2tlbi5yZWxlYXNlRG9jdHlwZURhdGEoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEhUTUxUb2tlblR5cGVzOjpFbmRPZkZpbGU6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWc6CisgICAg
ICAgIGNhc2UgSFRNTFRva2VuVHlwZXM6OkVuZFRhZzogeworICAgICAgICAgICAgbV9zZWxmQ2xv
c2luZyA9IHRva2VuLnNlbGZDbG9zaW5nKCk7CisgICAgICAgICAgICBtX25hbWUgPSBBdG9taWNT
dHJpbmcodG9rZW4ubmFtZVN0cmluZygpKTsKKyAgICAgICAgICAgIGluaXRpYWxpemVBdHRyaWJ1
dGVzKHRva2VuLmF0dHJpYnV0ZXMoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIEhUTUxUb2tlblR5cGVzOjpDb21tZW50OgorICAgICAgICAgICAgaWYgKHRv
a2VuLmlzQWxsOEJpdERhdGEoKSkKKyAgICAgICAgICAgICAgICBtX2RhdGEgPSBTdHJpbmc6Om1h
a2U4Qml0RnJvbTE2Qml0U291cmNlKHRva2VuLmNvbW1lbnQoKS5kYXRhKCksIHRva2VuLmNvbW1l
bnQoKS5zaXplKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fZGF0YSA9
IFN0cmluZyh0b2tlbi5jb21tZW50KCkuZGF0YSgpLCB0b2tlbi5jb21tZW50KCkuc2l6ZSgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEhUTUxUb2tlblR5cGVzOjpDaGFyYWN0
ZXI6CisgICAgICAgICAgICBtX2V4dGVybmFsQ2hhcmFjdGVycyA9IHRva2VuLmNoYXJhY3RlcnMo
KS5kYXRhKCk7CisgICAgICAgICAgICBtX2V4dGVybmFsQ2hhcmFjdGVyc0xlbmd0aCA9IHRva2Vu
LmNoYXJhY3RlcnMoKS5zaXplKCk7CisgICAgICAgICAgICBtX2lzQWxsOEJpdERhdGEgPSB0b2tl
bi5pc0FsbDhCaXREYXRhKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogCiAjaWYgRU5BQkxFKFRIUkVB
REVEX0hUTUxfUEFSU0VSKQogCiAgICAgZXhwbGljaXQgQXRvbWljSFRNTFRva2VuKGNvbnN0IENv
bXBhY3RIVE1MVG9rZW4mIHRva2VuKQotICAgICAgICA6IEF0b21pY01hcmt1cFRva2VuQmFzZTxI
VE1MVG9rZW4+KHRva2VuLnR5cGUoKSkKKyAgICAgICAgOiBtX3R5cGUodG9rZW4udHlwZSgpKQog
ICAgIHsKICAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICAgICAgY2FzZSBIVE1MVG9rZW5U
eXBlczo6VW5pbml0aWFsaXplZDoKQEAgLTEzNiwxMiArMjUwLDkwIEBAIHByaXZhdGU6CiAKICNl
bmRpZgogCisgICAgZXhwbGljaXQgQXRvbWljSFRNTFRva2VuKEhUTUxUb2tlblR5cGVzOjpUeXBl
IHR5cGUpCisgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9leHRlcm5hbENoYXJh
Y3RlcnMoMCkKKyAgICAgICAgLCBtX2V4dGVybmFsQ2hhcmFjdGVyc0xlbmd0aCgwKQorICAgICAg
ICAsIG1faXNBbGw4Qml0RGF0YShmYWxzZSkKKyAgICAgICAgLCBtX3NlbGZDbG9zaW5nKGZhbHNl
KQorICAgIHsKKyAgICB9CisKICAgICBBdG9taWNIVE1MVG9rZW4oSFRNTFRva2VuVHlwZXM6OlR5
cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8QXR0cmlidXRl
PiYgYXR0cmlidXRlcyA9IFZlY3RvcjxBdHRyaWJ1dGU+KCkpCi0gICAgICAgIDogQXRvbWljTWFy
a3VwVG9rZW5CYXNlPEhUTUxUb2tlbj4odHlwZSwgbmFtZSwgYXR0cmlidXRlcykKKyAgICAgICAg
OiBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX25hbWUobmFtZSkKKyAgICAgICAgLCBtX2V4dGVy
bmFsQ2hhcmFjdGVycygwKQorICAgICAgICAsIG1fZXh0ZXJuYWxDaGFyYWN0ZXJzTGVuZ3RoKDAp
CisgICAgICAgICwgbV9pc0FsbDhCaXREYXRhKGZhbHNlKQorICAgICAgICAsIG1fc2VsZkNsb3Np
bmcoZmFsc2UpCisgICAgICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCiAgICAgeworICAg
ICAgICBBU1NFUlQodXNlc05hbWUoKSk7CiAgICAgfQorCisgICAgSFRNTFRva2VuVHlwZXM6OlR5
cGUgbV90eXBlOworCisgICAgdm9pZCBpbml0aWFsaXplQXR0cmlidXRlcyhjb25zdCBIVE1MVG9r
ZW46OkF0dHJpYnV0ZUxpc3QmIGF0dHJpYnV0ZXMpOworICAgIFF1YWxpZmllZE5hbWUgbmFtZUZv
ckF0dHJpYnV0ZShjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZSYpIGNvbnN0OworCisgICAgYm9v
bCB1c2VzTmFtZSgpIGNvbnN0OworCisgICAgYm9vbCB1c2VzQXR0cmlidXRlcygpIGNvbnN0Owor
CisgICAgLy8gIm5hbWUiIGZvciBET0NUWVBFLCBTdGFydFRhZywgYW5kIEVuZFRhZworICAgIEF0
b21pY1N0cmluZyBtX25hbWU7CisKKyAgICAvLyAiZGF0YSIgZm9yIENvbW1lbnQKKyAgICBTdHJp
bmcgbV9kYXRhOworCisgICAgLy8gImNoYXJhY3RlcnMiIGZvciBDaGFyYWN0ZXIKKyAgICAvLwor
ICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY29weSB0aGUgdGhlIGNoYXJhY3RlcnMgb3V0IG9mIHRo
ZSBUb2tlbiwgc28gd2UKKyAgICAvLyBrZWVwIGEgcG9pbnRlciB0byBpdHMgYnVmZmVyIGluc3Rl
YWQuIFRoaXMgYnVmZmVyIGlzIG93bmVkIGJ5IHRoZQorICAgIC8vIFRva2VuIGFuZCBjYXVzZXMg
YSBsaWZldGltZSBkZXBlbmRlbmNlIGJldHdlZW4gdGhlc2Ugb2JqZWN0cy4KKyAgICAvLworICAg
IC8vIEZJWE1FOiBBZGQgYSBtZWNoYW5pc20gZm9yICJpbnRlcm5hbGl6aW5nIiB0aGUgY2hhcmFj
dGVycyB3aGVuIHRoZQorICAgIC8vICAgICAgICBIVE1MVG9rZW4gaXMgZGVzdHJ1Y3RlZC4KKyAg
ICBjb25zdCBVQ2hhciogbV9leHRlcm5hbENoYXJhY3RlcnM7CisgICAgc2l6ZV90IG1fZXh0ZXJu
YWxDaGFyYWN0ZXJzTGVuZ3RoOworICAgIGJvb2wgbV9pc0FsbDhCaXREYXRhOworCisgICAgLy8g
Rm9yIERPQ1RZUEUKKyAgICBPd25QdHI8SFRNTFRva2VuVHlwZXM6OkRvY3R5cGVEYXRhPiBtX2Rv
Y3R5cGVEYXRhOworCisgICAgLy8gRm9yIFN0YXJ0VGFnIGFuZCBFbmRUYWcKKyAgICBib29sIG1f
c2VsZkNsb3Npbmc7CisKKyAgICBWZWN0b3I8QXR0cmlidXRlPiBtX2F0dHJpYnV0ZXM7CiB9Owog
CitpbmxpbmUgdm9pZCBBdG9taWNIVE1MVG9rZW46OmluaXRpYWxpemVBdHRyaWJ1dGVzKGNvbnN0
IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgYXR0cmlidXRlcykKK3sKKyAgICBzaXplX3Qgc2l6
ZSA9IGF0dHJpYnV0ZXMuc2l6ZSgpOworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9hdHRyaWJ1dGVzLmNsZWFyKCk7CisgICAgbV9hdHRyaWJ1dGVzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc2l6ZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKKyAgICAgICAgY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IGF0dHJp
YnV0ZXNbaV07CisgICAgICAgIGlmIChhdHRyaWJ1dGUubV9uYW1lLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0
byBhZGQgdGhlIGZvbGxvd2luZyBBU1NFUlQgb25jZSB3ZSBmaXgKKyAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyOTcxCisgICAgICAgIC8vICAgQVNT
RVJUKGF0dHJpYnV0ZS5tX25hbWVSYW5nZS5tX3N0YXJ0KTsKKyAgICAgICAgQVNTRVJUKGF0dHJp
YnV0ZS5tX25hbWVSYW5nZS5tX2VuZCk7CisgICAgICAgIEFTU0VSVChhdHRyaWJ1dGUubV92YWx1
ZVJhbmdlLm1fc3RhcnQpOworICAgICAgICBBU1NFUlQoYXR0cmlidXRlLm1fdmFsdWVSYW5nZS5t
X2VuZCk7CisKKyAgICAgICAgQXRvbWljU3RyaW5nIHZhbHVlKGF0dHJpYnV0ZS5tX3ZhbHVlLmRh
dGEoKSwgYXR0cmlidXRlLm1fdmFsdWUuc2l6ZSgpKTsKKyAgICAgICAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSA9IG5hbWVGb3JBdHRyaWJ1dGUoYXR0cmlidXRlKTsKKyAgICAgICAgaWYgKCFm
aW5kQXR0cmlidXRlSW5WZWN0b3IobV9hdHRyaWJ1dGVzLCBuYW1lKSkKKyAgICAgICAgICAgIG1f
YXR0cmlidXRlcy5hcHBlbmQoQXR0cmlidXRlKG5hbWUsIHZhbHVlKSk7CisgICAgfQorfQorCiB9
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRv
a2VuaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW5pemVyLmNw
cAppbmRleCAxNGI4MmUwYzdjOTFkNDNlYWI4ZDg3NGIyN2Q1OWFjN2I5ODcxYTFlLi43ZGU0Mjg4
NmZkMmNkNzA5NWUxN2JmYjQyMzJlOWQ2YjI1YzRmYTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW5pemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MVG9rZW5pemVyLmNwcApAQCAtNDksMjAgKzQ5LDE3IEBAIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiAKIC8vIFRoaXMgaGFzIHRvIGdvIGluIGEgLmNwcCBmaWxlLCBh
cyB0aGUgbGlua2VyIGRvZXNuJ3QgbGlrZSBpdCBiZWluZyBpbmNsdWRlZCBtb3JlIHRoYW4gb25j
ZS4KIC8vIFdlIGRvbid0IGhhdmUgYW4gSFRNTFRva2VuLmNwcCB0aG91Z2gsIHNvIHRoaXMgaXMg
dGhlIG5leHQgYmVzdCBwbGFjZS4KLXRlbXBsYXRlPD4KLVF1YWxpZmllZE5hbWUgQXRvbWljTWFy
a3VwVG9rZW5CYXNlPEhUTUxUb2tlbj46Om5hbWVGb3JBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRl
QmFzZSYgYXR0cmlidXRlKSBjb25zdAorUXVhbGlmaWVkTmFtZSBBdG9taWNIVE1MVG9rZW46Om5h
bWVGb3JBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlQmFzZSYgYXR0cmlidXRlKSBjb25zdAogewog
ICAgIHJldHVybiBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBBdG9taWNTdHJpbmcoYXR0cmlidXRl
Lm1fbmFtZS5kYXRhKCksIGF0dHJpYnV0ZS5tX25hbWUuc2l6ZSgpKSwgbnVsbEF0b20pOwogfQog
Ci10ZW1wbGF0ZTw+Ci1ib29sIEF0b21pY01hcmt1cFRva2VuQmFzZTxIVE1MVG9rZW4+Ojp1c2Vz
TmFtZSgpIGNvbnN0Citib29sIEF0b21pY0hUTUxUb2tlbjo6dXNlc05hbWUoKSBjb25zdAogewog
ICAgIHJldHVybiBtX3R5cGUgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnIHx8IG1fdHlwZSA9
PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFnIHx8IG1fdHlwZSA9PSBIVE1MVG9rZW5UeXBlczo6RE9D
VFlQRTsKIH0KIAotdGVtcGxhdGU8PgotYm9vbCBBdG9taWNNYXJrdXBUb2tlbkJhc2U8SFRNTFRv
a2VuPjo6dXNlc0F0dHJpYnV0ZXMoKSBjb25zdAorYm9vbCBBdG9taWNIVE1MVG9rZW46OnVzZXNB
dHRyaWJ1dGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV90eXBlID09IEhUTUxUb2tlblR5cGVz
OjpTdGFydFRhZyB8fCBtX3R5cGUgPT0gSFRNTFRva2VuVHlwZXM6OkVuZFRhZzsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5CYXNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL01hcmt1cFRva2VuQmFzZS5oCmluZGV4IGNiZmUyYWMwN2Rm
OGZiNjU2MjRiM2JjMGExYjJjZDE2NTg3MThjMDEuLjUxYzFkMDVhNWE0NGIwNzFjZDA1MzgyNGVh
YjZjODQxMjViZDQ2NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFy
a3VwVG9rZW5CYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tl
bkJhc2UuaApAQCAtNDUsNyArNDUsNiBAQCBzdGF0aWMgaW5saW5lIEF0dHJpYnV0ZSogZmluZEF0
dHJpYnV0ZUluVmVjdG9yKFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVzLCBjbwogICAgIHJl
dHVybiAwOwogfQogCi0KIGNsYXNzIERvY3R5cGVEYXRhQmFzZSB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoRG9jdHlwZURhdGFCYXNlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CkBAIC0zNzYsNiArMzc1LDI1IEBAIHB1YmxpYzoKICAgICAgICAgbV9kb2N0eXBlRGF0YS0+
bV9zeXN0ZW1JZGVudGlmaWVyLmFwcGVuZChjaGFyYWN0ZXIpOwogICAgIH0KIAorICAgIGNvbnN0
IERhdGFWZWN0b3ImIG5hbWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YTsK
KyAgICB9CisKKyAgICBTdHJpbmcgbmFtZVN0cmluZygpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoIW1fZGF0YS5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAg
ICAgICAgaWYgKGlzQWxsOEJpdERhdGEoKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc6Om1h
a2U4Qml0RnJvbTE2Qml0U291cmNlKG1fZGF0YS5kYXRhKCksIG1fZGF0YS5zaXplKCkpOworICAg
ICAgICByZXR1cm4gU3RyaW5nKG1fZGF0YS5kYXRhKCksIG1fZGF0YS5zaXplKCkpOworICAgIH0K
KworICAgIFBhc3NPd25QdHI8RG9jdHlwZURhdGE+IHJlbGVhc2VEb2N0eXBlRGF0YSgpCisgICAg
eworICAgICAgICByZXR1cm4gbV9kb2N0eXBlRGF0YS5yZWxlYXNlKCk7CisgICAgfQorCiBwcm90
ZWN0ZWQ6CiAKICNpZm5kZWYgTkRFQlVHCkBAIC0zOTQsMjYgKzQxMiw2IEBAIHByb3RlY3RlZDoK
ICAgICAgICAgbV9vckFsbERhdGEgfD0gY2hhcmFjdGVyOwogICAgIH0KIAotICAgIGNvbnN0IERh
dGFWZWN0b3ImIG5hbWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGF0YTsKLSAg
ICB9Ci0KLSAgICBTdHJpbmcgbmFtZVN0cmluZygpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAo
IW1fZGF0YS5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAg
ICAgaWYgKGlzQWxsOEJpdERhdGEoKSkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmc6Om1ha2U4
Qml0RnJvbTE2Qml0U291cmNlKG1fZGF0YS5kYXRhKCksIG1fZGF0YS5zaXplKCkpOwotICAgICAg
ICByZXR1cm4gU3RyaW5nKG1fZGF0YS5kYXRhKCksIG1fZGF0YS5zaXplKCkpOwotICAgIH0KLQot
ICAgIC8vIEZJWE1FOiBJJ20gbm90IHN1cmUgd2hhdCB0aGUgZmluYWwgcmVsYXRpb25zaGlwIGJl
dHdlZW4gTWFya3VwVG9rZW5CYXNlIGFuZAotICAgIC8vIEF0b21pY01hcmt1cFRva2VuQmFzZSB3
aWxsIGJlLiBJJ20gbWFya2luZyB0aGlzIGEgZnJpZW5kIGZvciBub3csIGJ1dCB3ZSdsbAotICAg
IC8vIHdhbnQgdG8gZW5kIHVwIHdpdGggYSBjbGVhbmVyIGludGVyZmFjZSBiZXR3ZWVuIHRoZSB0
d28gY2xhc3Nlcy4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUb2tlbj4KLSAgICBmcmllbmQgY2xh
c3MgQXRvbWljTWFya3VwVG9rZW5CYXNlOwotCiAgICAgdHlwZW5hbWUgVHlwZTo6VHlwZSBtX3R5
cGU7CiAgICAgdHlwZW5hbWUgQXR0cmlidXRlOjpSYW5nZSBtX3JhbmdlOyAvLyBBbHdheXMgc3Rh
cnRzIGF0IHplcm8uCiAgICAgaW50IG1fYmFzZU9mZnNldDsKQEAgLTQzMSwyMTUgKzQyOSw2IEBA
IHByb3RlY3RlZDoKICAgICBBdHRyaWJ1dGUqIG1fY3VycmVudEF0dHJpYnV0ZTsKIH07CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFRva2VuPgotY2xhc3MgQXRvbWljTWFya3VwVG9rZW5CYXNlIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShBdG9taWNNYXJrdXBUb2tlbkJhc2UpOwotcHVibGljOgot
ICAgIEF0b21pY01hcmt1cFRva2VuQmFzZShUb2tlbiogdG9rZW4pCi0gICAgICAgIDogbV90eXBl
KHRva2VuLT50eXBlKCkpCi0gICAgewotICAgICAgICBBU1NFUlQodG9rZW4pOwotCi0gICAgICAg
IHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OlVuaW5pdGlhbGl6
ZWQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpET0NUWVBFOgotICAgICAgICAgICAgbV9uYW1l
ID0gQXRvbWljU3RyaW5nKHRva2VuLT5uYW1lU3RyaW5nKCkpOwotICAgICAgICAgICAgbV9kb2N0
eXBlRGF0YSA9IHRva2VuLT5tX2RvY3R5cGVEYXRhLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpFbmRPZkZpbGU6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6U3RhcnRUYWc6Ci0gICAgICAgIGNhc2Ug
VG9rZW46OlR5cGU6OkVuZFRhZzogewotICAgICAgICAgICAgbV9zZWxmQ2xvc2luZyA9IHRva2Vu
LT5zZWxmQ2xvc2luZygpOwotICAgICAgICAgICAgbV9uYW1lID0gQXRvbWljU3RyaW5nKHRva2Vu
LT5uYW1lU3RyaW5nKCkpOwotICAgICAgICAgICAgaW5pdGlhbGl6ZUF0dHJpYnV0ZXModG9rZW4t
PmF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIFRva2VuOjpUeXBlOjpDb21tZW50OgotICAgICAgICAgICAgaWYgKHRva2VuLT5pc0FsbDhC
aXREYXRhKCkpCi0gICAgICAgICAgICAgICAgbV9kYXRhID0gU3RyaW5nOjptYWtlOEJpdEZyb20x
NkJpdFNvdXJjZSh0b2tlbi0+Y29tbWVudCgpLmRhdGEoKSwgdG9rZW4tPmNvbW1lbnQoKS5zaXpl
KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZGF0YSA9IFN0cmluZyh0
b2tlbi0+Y29tbWVudCgpLmRhdGEoKSwgdG9rZW4tPmNvbW1lbnQoKS5zaXplKCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OkNoYXJhY3RlcjoKLSAgICAg
ICAgICAgIG1fZXh0ZXJuYWxDaGFyYWN0ZXJzID0gdG9rZW4tPmNoYXJhY3RlcnMoKS5kYXRhKCk7
Ci0gICAgICAgICAgICBtX2V4dGVybmFsQ2hhcmFjdGVyc0xlbmd0aCA9IHRva2VuLT5jaGFyYWN0
ZXJzKCkuc2l6ZSgpOwotICAgICAgICAgICAgbV9pc0FsbDhCaXREYXRhID0gdG9rZW4tPmlzQWxs
OEJpdERhdGEoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBleHBsaWNpdCBBdG9taWNNYXJr
dXBUb2tlbkJhc2UodHlwZW5hbWUgVG9rZW46OlR5cGU6OlR5cGUgdHlwZSkKLSAgICAgICAgOiBt
X3R5cGUodHlwZSkKLSAgICAgICAgLCBtX2V4dGVybmFsQ2hhcmFjdGVycygwKQotICAgICAgICAs
IG1fZXh0ZXJuYWxDaGFyYWN0ZXJzTGVuZ3RoKDApCi0gICAgICAgICwgbV9pc0FsbDhCaXREYXRh
KGZhbHNlKQotICAgICAgICAsIG1fc2VsZkNsb3NpbmcoZmFsc2UpCi0gICAgewotICAgIH0KLQot
ICAgIEF0b21pY01hcmt1cFRva2VuQmFzZSh0eXBlbmFtZSBUb2tlbjo6VHlwZTo6VHlwZSB0eXBl
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRy
aWJ1dGVzID0gVmVjdG9yPEF0dHJpYnV0ZT4oKSkKLSAgICAgICAgOiBtX3R5cGUodHlwZSkKLSAg
ICAgICAgLCBtX25hbWUobmFtZSkKLSAgICAgICAgLCBtX2V4dGVybmFsQ2hhcmFjdGVycygwKQot
ICAgICAgICAsIG1fZXh0ZXJuYWxDaGFyYWN0ZXJzTGVuZ3RoKDApCi0gICAgICAgICwgbV9pc0Fs
bDhCaXREYXRhKGZhbHNlKQotICAgICAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKHVzZXNOYW1lKCkpOwotICAgIH0KLQotICAgIHR5cGVuYW1lIFRv
a2VuOjpUeXBlOjpUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLQotICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQodXNl
c05hbWUoKSk7Ci0gICAgICAgIHJldHVybiBtX25hbWU7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRO
YW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh1c2Vz
TmFtZSgpKTsKLSAgICAgICAgbV9uYW1lID0gbmFtZTsKLSAgICB9Ci0KLSAgICBib29sIHNlbGZD
bG9zaW5nKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVG9rZW46OlR5
cGU6OlN0YXJ0VGFnIHx8IG1fdHlwZSA9PSBUb2tlbjo6VHlwZTo6RW5kVGFnKTsKLSAgICAgICAg
cmV0dXJuIG1fc2VsZkNsb3Npbmc7Ci0gICAgfQotCi0gICAgQXR0cmlidXRlKiBnZXRBdHRyaWJ1
dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCi0gICAgewotICAgICAg
ICBBU1NFUlQodXNlc0F0dHJpYnV0ZXMoKSk7Ci0gICAgICAgIHJldHVybiBmaW5kQXR0cmlidXRl
SW5WZWN0b3IobV9hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVOYW1lKTsKLSAgICB9Ci0KLSAgICBWZWN0
b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcygpCi0gICAgewotICAgICAgICBBU1NFUlQodXNlc0F0
dHJpYnV0ZXMoKSk7Ci0gICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZXM7Ci0gICAgfQotCi0gICAg
Y29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgQVNTRVJUKHVzZXNBdHRyaWJ1dGVzKCkpOwotICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVz
OwotICAgIH0KLQotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVG9rZW46OlR5cGU6OkNoYXJhY3Rlcik7Ci0gICAgICAg
IHJldHVybiBtX2V4dGVybmFsQ2hhcmFjdGVyczsKLSAgICB9Ci0KLSAgICBzaXplX3QgY2hhcmFj
dGVyc0xlbmd0aCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IFRva2Vu
OjpUeXBlOjpDaGFyYWN0ZXIpOwotICAgICAgICByZXR1cm4gbV9leHRlcm5hbENoYXJhY3RlcnNM
ZW5ndGg7Ci0gICAgfQotCi0gICAgYm9vbCBpc0FsbDhCaXREYXRhKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2lzQWxsOEJpdERhdGE7Ci0gICAgfQotCi0gICAgY29uc3QgU3RyaW5n
JiBjb21tZW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVG9rZW46
OlR5cGU6OkNvbW1lbnQpOwotICAgICAgICByZXR1cm4gbV9kYXRhOwotICAgIH0KLQotICAgIC8v
IEZJWE1FOiBEaXN0aW5ndWlzaCBiZXR3ZWVuIGEgbWlzc2luZyBwdWJsaWMgaWRlbnRpZmVyIGFu
ZCBhbiBlbXB0eSBvbmUuCi0gICAgV1RGOjpWZWN0b3I8VUNoYXI+JiBwdWJsaWNJZGVudGlmaWVy
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVG9rZW46OlR5cGU6OkRP
Q1RZUEUpOwotICAgICAgICByZXR1cm4gbV9kb2N0eXBlRGF0YS0+bV9wdWJsaWNJZGVudGlmaWVy
OwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBEaXN0aW5ndWlzaCBiZXR3ZWVuIGEgbWlzc2luZyBz
eXN0ZW0gaWRlbnRpZmVyIGFuZCBhbiBlbXB0eSBvbmUuCi0gICAgV1RGOjpWZWN0b3I8VUNoYXI+
JiBzeXN0ZW1JZGVudGlmaWVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUg
PT0gVG9rZW46OlR5cGU6OkRPQ1RZUEUpOwotICAgICAgICByZXR1cm4gbV9kb2N0eXBlRGF0YS0+
bV9zeXN0ZW1JZGVudGlmaWVyOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXJFeHRlcm5hbENoYXJh
Y3RlcnMoKQotICAgIHsKLSAgICAgICAgbV9leHRlcm5hbENoYXJhY3RlcnMgPSAwOwotICAgICAg
ICBtX2V4dGVybmFsQ2hhcmFjdGVyc0xlbmd0aCA9IDA7Ci0gICAgICAgIG1faXNBbGw4Qml0RGF0
YSA9IGZhbHNlOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHR5cGVuYW1lIFRva2VuOjpUeXBl
OjpUeXBlIG1fdHlwZTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZUF0dHJpYnV0ZXMoY29uc3QgdHlw
ZW5hbWUgVG9rZW46OkF0dHJpYnV0ZUxpc3QmIGF0dHJpYnV0ZXMpOwotICAgIFF1YWxpZmllZE5h
bWUgbmFtZUZvckF0dHJpYnV0ZShjb25zdCB0eXBlbmFtZSBUb2tlbjo6QXR0cmlidXRlJikgY29u
c3Q7Ci0KLSAgICBib29sIHVzZXNOYW1lKCkgY29uc3Q7Ci0KLSAgICBib29sIHVzZXNBdHRyaWJ1
dGVzKCkgY29uc3Q7Ci0KLSAgICAvLyAibmFtZSIgZm9yIERPQ1RZUEUsIFN0YXJ0VGFnLCBhbmQg
RW5kVGFnCi0gICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKLQotICAgIC8vICJkYXRhIiBmb3IgQ29t
bWVudAotICAgIFN0cmluZyBtX2RhdGE7Ci0KLSAgICAvLyAiY2hhcmFjdGVycyIgZm9yIENoYXJh
Y3RlcgotICAgIC8vCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjb3B5IHRoZSB0aGUgY2hhcmFj
dGVycyBvdXQgb2YgdGhlIFRva2VuLCBzbyB3ZQotICAgIC8vIGtlZXAgYSBwb2ludGVyIHRvIGl0
cyBidWZmZXIgaW5zdGVhZC4gVGhpcyBidWZmZXIgaXMgb3duZWQgYnkgdGhlCi0gICAgLy8gVG9r
ZW4gYW5kIGNhdXNlcyBhIGxpZmV0aW1lIGRlcGVuZGVuY2UgYmV0d2VlbiB0aGVzZSBvYmplY3Rz
LgotICAgIC8vCi0gICAgLy8gRklYTUU6IEFkZCBhIG1lY2hhbmlzbSBmb3IgImludGVybmFsaXpp
bmciIHRoZSBjaGFyYWN0ZXJzIHdoZW4gdGhlCi0gICAgLy8gICAgICAgIEhUTUxUb2tlbiBpcyBk
ZXN0cnVjdGVkLgotICAgIGNvbnN0IFVDaGFyKiBtX2V4dGVybmFsQ2hhcmFjdGVyczsKLSAgICBz
aXplX3QgbV9leHRlcm5hbENoYXJhY3RlcnNMZW5ndGg7Ci0gICAgYm9vbCBtX2lzQWxsOEJpdERh
dGE7Ci0KLSAgICAvLyBGb3IgRE9DVFlQRQotICAgIE93blB0cjx0eXBlbmFtZSBUb2tlbjo6RG9j
dHlwZURhdGE+IG1fZG9jdHlwZURhdGE7Ci0KLSAgICAvLyBGb3IgU3RhcnRUYWcgYW5kIEVuZFRh
ZwotICAgIGJvb2wgbV9zZWxmQ2xvc2luZzsKLQotICAgIFZlY3RvcjxBdHRyaWJ1dGU+IG1fYXR0
cmlidXRlczsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFRva2VuPgotaW5saW5lIHZvaWQgQXRv
bWljTWFya3VwVG9rZW5CYXNlPFRva2VuPjo6aW5pdGlhbGl6ZUF0dHJpYnV0ZXMoY29uc3QgdHlw
ZW5hbWUgVG9rZW46OkF0dHJpYnV0ZUxpc3QmIGF0dHJpYnV0ZXMpCi17Ci0gICAgc2l6ZV90IHNp
emUgPSBhdHRyaWJ1dGVzLnNpemUoKTsKLSAgICBpZiAoIXNpemUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fYXR0cmlidXRlcy5jbGVhcigpOwotICAgIG1fYXR0cmlidXRlcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHNpemUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgIGNvbnN0IHR5cGVuYW1lIFRva2VuOjpBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9
IGF0dHJpYnV0ZXNbaV07Ci0gICAgICAgIGlmIChhdHRyaWJ1dGUubV9uYW1lLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUg
YWJsZSB0byBhZGQgdGhlIGZvbGxvd2luZyBBU1NFUlQgb25jZSB3ZSBmaXgKLSAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyOTcxCi0gICAgICAgIC8v
ICAgQVNTRVJUKGF0dHJpYnV0ZS5tX25hbWVSYW5nZS5tX3N0YXJ0KTsKLSAgICAgICAgQVNTRVJU
KGF0dHJpYnV0ZS5tX25hbWVSYW5nZS5tX2VuZCk7Ci0gICAgICAgIEFTU0VSVChhdHRyaWJ1dGUu
bV92YWx1ZVJhbmdlLm1fc3RhcnQpOwotICAgICAgICBBU1NFUlQoYXR0cmlidXRlLm1fdmFsdWVS
YW5nZS5tX2VuZCk7Ci0KLSAgICAgICAgQXRvbWljU3RyaW5nIHZhbHVlKGF0dHJpYnV0ZS5tX3Zh
bHVlLmRhdGEoKSwgYXR0cmlidXRlLm1fdmFsdWUuc2l6ZSgpKTsKLSAgICAgICAgY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSA9IG5hbWVGb3JBdHRyaWJ1dGUoYXR0cmlidXRlKTsKLSAgICAgICAg
aWYgKCFmaW5kQXR0cmlidXRlSW5WZWN0b3IobV9hdHRyaWJ1dGVzLCBuYW1lKSkKLSAgICAgICAg
ICAgIG1fYXR0cmlidXRlcy5hcHBlbmQoQXR0cmlidXRlKG5hbWUsIHZhbHVlKSk7Ci0gICAgfQot
fQotCiB9CiAKICNlbmRpZiAvLyBNYXJrdXBUb2tlbkJhc2VfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>