<?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>118878</bug_id>
          
          <creation_ts>2013-07-18 18:53:19 -0700</creation_ts>
          <short_desc>fourthTier: Structure should be able to tell you if it&apos;s valid to load at a given offset from any object with that structure</short_desc>
          <delta_ts>2013-07-19 11:21:24 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>118866</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>909956</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-18 18:53:19 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909963</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-18 19:22:08 -0700</bug_when>
    <thetext>Thus, if we have a GetByOffset with a given offset, we can check if the object was proved to have a structure that has that offset; if it does, then the GetByOffset can proceed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909982</commentid>
    <comment_count>2</comment_count>
      <attachid>207054</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-18 20:31:00 -0700</bug_when>
    <thetext>Created attachment 207054
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910182</commentid>
    <comment_count>3</comment_count>
      <attachid>207110</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-19 09:57:27 -0700</bug_when>
    <thetext>Created attachment 207110
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910246</commentid>
    <comment_count>4</comment_count>
      <attachid>207125</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-19 11:09:43 -0700</bug_when>
    <thetext>Created attachment 207125
the patch

Just improved the changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910247</commentid>
    <comment_count>5</comment_count>
      <attachid>207125</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-07-19 11:11:22 -0700</bug_when>
    <thetext>Comment on attachment 207125
the patch

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

&gt; Source/JavaScriptCore/ChangeLog:35
&gt; +        that could transitively try to compute the hash from the source code. The source
&gt; +        code is a string that may be lazily computed, and that involves all manner of thread
&gt; +        unsafe things.

Do we have any assertions that would catch this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910248</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-19 11:12:06 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 207125 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=207125&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:35
&gt; &gt; +        that could transitively try to compute the hash from the source code. The source
&gt; &gt; +        code is a string that may be lazily computed, and that involves all manner of thread
&gt; &gt; +        unsafe things.
&gt; 
&gt; Do we have any assertions that would catch this?

Yes, that&apos;s how I caught it.  StringImpl&apos;s ref/deref assert that you&apos;re not in the compiler thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910250</commentid>
    <comment_count>7</comment_count>
      <attachid>207125</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-07-19 11:12:34 -0700</bug_when>
    <thetext>Comment on attachment 207125
the patch

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

&gt; Source/JavaScriptCore/runtime/Structure.h:228
&gt;      bool isValidOffset(PropertyOffset offset) const
&gt;      {
&gt; -        return offset &gt;= firstValidOffset()
&gt; -            &amp;&amp; offset &lt;= lastValidOffset();
&gt; +        return JSC::isValidOffset(offset)
&gt; +            &amp;&amp; (offset &lt; m_inlineCapacity
&gt; +                || (offset &gt;= firstOutOfLineOffset &amp;&amp; offset &lt;= m_offset));
&gt;      }

I think it&apos;s worth a comment here explaining that a &quot;valid&quot; offset isn&apos;t necessarily a valid JSValue -- it&apos;s just an offset that, if you load from it, you won&apos;t crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910251</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-19 11:14:55 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/152909</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910253</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-19 11:15:58 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 207125 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=207125&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/Structure.h:228
&gt; &gt;      bool isValidOffset(PropertyOffset offset) const
&gt; &gt;      {
&gt; &gt; -        return offset &gt;= firstValidOffset()
&gt; &gt; -            &amp;&amp; offset &lt;= lastValidOffset();
&gt; &gt; +        return JSC::isValidOffset(offset)
&gt; &gt; +            &amp;&amp; (offset &lt; m_inlineCapacity
&gt; &gt; +                || (offset &gt;= firstOutOfLineOffset &amp;&amp; offset &lt;= m_offset));
&gt; &gt;      }
&gt; 
&gt; I think it&apos;s worth a comment here explaining that a &quot;valid&quot; offset isn&apos;t necessarily a valid JSValue -- it&apos;s just an offset that, if you load from it, you won&apos;t crash.

Interesting.  While that&apos;s not what I intended for this method, its users are indeed file with the &quot;you won&apos;t crash&quot; part.  I&apos;ll change it though, in a separate bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910260</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-19 11:21:24 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 207125 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=207125&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/runtime/Structure.h:228
&gt; &gt; &gt;      bool isValidOffset(PropertyOffset offset) const
&gt; &gt; &gt;      {
&gt; &gt; &gt; -        return offset &gt;= firstValidOffset()
&gt; &gt; &gt; -            &amp;&amp; offset &lt;= lastValidOffset();
&gt; &gt; &gt; +        return JSC::isValidOffset(offset)
&gt; &gt; &gt; +            &amp;&amp; (offset &lt; m_inlineCapacity
&gt; &gt; &gt; +                || (offset &gt;= firstOutOfLineOffset &amp;&amp; offset &lt;= m_offset));
&gt; &gt; &gt;      }
&gt; &gt; 
&gt; &gt; I think it&apos;s worth a comment here explaining that a &quot;valid&quot; offset isn&apos;t necessarily a valid JSValue -- it&apos;s just an offset that, if you load from it, you won&apos;t crash.
&gt; 
&gt; Interesting.  While that&apos;s not what I intended for this method, its users are indeed file with the &quot;you won&apos;t crash&quot; part.  I&apos;ll change it though, in a separate bug.

https://bugs.webkit.org/show_bug.cgi?id=118911</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207054</attachid>
            <date>2013-07-18 20:31:00 -0700</date>
            <delta_ts>2013-07-19 09:57:27 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>13099</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyODgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDEzLTA3LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogU3RydWN0dXJlIHNob3VsZCBiZSBhYmxlIHRvIHRlbGwgeW91IGlmIGl0J3Mg
dmFsaWQgdG8gbG9hZCBhdCBhIGdpdmVuIG9mZnNldCBmcm9tIGFueSBvYmplY3Qgd2l0aCB0aGF0
IHN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTE4ODc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICAtIENoYW5nZSBTdHJ1Y3R1cmU6OmlzVmFsaWRPZmZzZXQoKSB0byBhY3R1YWxs
eSBhbnN3ZXIgdGhlIHF1ZXN0aW9uICJJZiBJIGF0dGVtcHRlZAorICAgICAgICAgIHRvIGxvYWQg
ZnJvbSBhbiBvYmplY3Qgb2YgdGhpcyBzdHJ1Y3R1cmUsIGF0IHRoaXMgb2Zmc2V0LCB3b3VsZCBJ
IGNvbW1pdCBzdWljaWRlCisgICAgICAgICAgb3Igd291bGQgSSBnZXQgYmFjayBzb21lIGtpbmQg
b2YgdmFsdWU/IgorICAgICAgICAKKyAgICAgICAgLSBDaGFuZ2UgU3RvcmFnZUFjY2Vzc0RhdGE6
Om9mZnNldCB0byB1c2UgYSBQcm9wZXJ0eU9mZnNldC4gSXQgc2hvdWxkIGhhdmUgYmVlbiB0aGF0
CisgICAgICAgICAgd2F5IGZyb20gdGhlIHN0YXJ0LgorICAgICAgICAKKyAgICAgICAgLSBVc2Ug
dGhlIG5ldyBwb3dlciB0byBkbyBzb21lIGV4dHJhIHZhbGlkYXRpb24gaW4gdGhlIEFic3RyYWN0
SW50ZXJwcmV0ZXIuCisgICAgICAgIAorICAgICAgICBUaGUgZnV0dXJlIHVzZSBvZiB0aGlzIHBv
d2VyIHdpbGwgYmUgdG8gYW5zd2VyIHF1ZXN0aW9ucyBsaWtlICJJZiBJIGhvaXN0ZWQgdGhpcwor
ICAgICAgICBHZXRCeU9mZnNldCBvciBQdXRCeU9mZnNldCB0byB0aGlzIHBvaW50LCB3b3VsZCBp
dCBjYXVzZSBjcmFzaGVzLCBvciB3b3VsZCBpdCBiZQorICAgICAgICBmaW5lPyIKKworICAgICAg
ICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ojo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAg
ICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNGQVBoYXNlOjpw
ZXJmb3JtQmxvY2tDRkEpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFu
dHMpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvR2V0QnlPZmZzZXQpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEJ5T2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVB1dEJ5T2Zmc2V0KToKKyAg
ICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjppc1ZhbGlkT2Zmc2V0KToKKwogMjAxMy0wNy0xOCAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZvdXJ0aFRpZXI6IEFic3RyYWN0
SW50ZXJwcmV0ZXIgc2hvdWxkIGV4cGxpY2l0bHkgYXNrIEFic3RyYWN0U3RhdGUgdG8gY3JlYXRl
IG5ldyBBYnN0cmFjdFZhbHVlcyBmb3IgbmV3bHkgYm9ybiBub2RlcwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkocmV2aXNpb24gMTUyODc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMwLDYg
KzEyMzAsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgIH0KIAogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBtX3N0YXRl
LnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogCiAgICAgICAgIC8vIElmIHRoaXMgc3RydWN0dXJl
IGNoZWNrIGlzIGF0dGVtcHRpbmcgdG8gcHJvdmUga25vd2xlZGdlIGFscmVhZHkgaGVsZCBpbgog
ICAgICAgICAvLyB0aGUgZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgc2V0IHRoZW4gdGhlIGNvbnN0
YW50IGZvbGRpbmcgcGhhc2Ugc2hvdWxkCkBAIC0xMjQyLDcgKzEyNDMsNiBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIH0KIAogICAgICAgICBmaWx0
ZXIodmFsdWUsIHNldCk7Ci0gICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0xMzY0LDExICsxMzY0LDI0IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7
IAogICAgIH0KICAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7CisgICAgICAgIGlmICghQVNTRVJUX0RJ
U0FCTEVEKSB7CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBvYmplY3QgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGlmICghb2JqZWN0Lm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLmlzVG9wKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2JqZWN0
Lm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKG9iamVjdC5tX2N1cnJlbnRLbm93blN0cnVjdHVyZVtpXS0+aXNWYWxpZE9mZnNl
dChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRl
eCgpXS5vZmZzZXQpKTsKKyAgICAgICAgICAgIH0gLy8gZWxzZSwgd2UgbWF5IGhhdmUgYSBHZXRC
eU9mZnNldCBndWFyZGVkIGJ5IGEgc2V0IG9mIHN0cnVjdHVyZXMgdGhhdCBpcyBiaWdnZXIgdGhh
biB0aGUgc2V0IHRoYXQgQWJzdHJhY3RWYWx1ZSBjYW4gdHJhY2sgLSBhbmQgdGhhdCdzIGZpbmUu
CisgICAgICAgIH0KICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAg
ICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIG9i
amVjdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgQVNTRVJUKCFvYmpl
Y3QubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNUb3AoKSk7CisgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gb2JqZWN0Lm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpemUoKTsgaS0tOykKKyAg
ICAgICAgICAgICAgICBBU1NFUlQob2JqZWN0Lm1fY3VycmVudEtub3duU3RydWN0dXJlW2ldLT5p
c1ZhbGlkT2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNj
ZXNzRGF0YUluZGV4KCldLm9mZnNldCkpOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1Mjg3OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIw
LDE0ICsxNjIwLDEwIEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgK
ICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsKICAgICBlbHNlCiAgICAgICAgIHByb3Bl
cnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKTsKLSAgICAvLyBGSVhN
RTogSXQgd291bGQgYmUgZmFyIG1vcmUgZWZmaWNpZW50IGZvciBsb2FkIGVsaW1pbmF0aW9uIChh
bmQgc2FmZXIgZnJvbQotICAgIC8vIGFuIE9TUiBzdGFuZHBvaW50KSBpZiBHZXRCeU9mZnNldCBh
bHNvIHJlZmVyZW5jZWQgdGhlIG9iamVjdCB3ZSB3ZXJlIGxvYWRpbmcKLSAgICAvLyBmcm9tLCBh
bmQgaWYgd2UgY291bGQgbG9hZCBlbGltaW5hdGUgYSBHZXRCeU9mZnNldCBldmVuIGlmIHRoZSBi
dXR0ZXJmbHkKLSAgICAvLyBoYWQgY2hhbmdlZC4gVGhhdCB3b3VsZCBiZSBhIGdyZWF0IHN1Y2Nl
c3MuCi0gICAgTm9kZSogZ2V0QnlPZmZzZXQgPSBhZGRUb0dyYXBoKEdldEJ5T2Zmc2V0LCBPcElu
Zm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9u
KSwgcHJvcGVydHlTdG9yYWdlKTsKKyAgICBOb2RlKiBnZXRCeU9mZnNldCA9IGFkZFRvR3JhcGgo
R2V0QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwg
T3BJbmZvKHByZWRpY3Rpb24pLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOwogCiAgICAgU3RvcmFn
ZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7Ci0gICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zm
c2V0ID0gaW5kZXhSZWxhdGl2ZVRvQmFzZShvZmZzZXQpOworICAgIHN0b3JhZ2VBY2Nlc3NEYXRh
Lm9mZnNldCA9IG9mZnNldDsKICAgICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVy
ID0gaWRlbnRpZmllck51bWJlcjsKICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBw
ZW5kKHN0b3JhZ2VBY2Nlc3NEYXRhKTsKIApAQCAtMTY1MSw3ICsxNjQ3LDcgQEAgTm9kZSogQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAogICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRv
R3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6
ZSgpKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlLCB2YWx1ZSk7CiAgICAgCiAgICAgU3RvcmFnZUFj
Y2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7Ci0gICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0
ID0gaW5kZXhSZWxhdGl2ZVRvQmFzZShvZmZzZXQpOworICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9m
ZnNldCA9IG9mZnNldDsKICAgICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyID0g
aWRlbnRpZmllcjsKICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3Jh
Z2VBY2Nlc3NEYXRhKTsKIApAQCAtMjQ1OSw3ICsyNDU1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICB2YWx1ZSk7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFj
Y2Vzc0RhdGE7Ci0gICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0gaW5k
ZXhSZWxhdGl2ZVRvQmFzZShwdXRCeUlkU3RhdHVzLm9mZnNldCgpKTsKKyAgICAgICAgICAgICAg
ICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBwdXRCeUlkU3RhdHVzLm9mZnNldCgpOwogICAg
ICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlm
aWVyTnVtYmVyOwogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5h
cHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOwogICAgICAgICAgICAgfSBlbHNlIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI4Nzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAwLDYgKzEwMCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5hdChpKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgJXMg
QCV1OiAiLCBHcmFwaDo6b3BOYW1lKG5vZGUtPm9wKCkpLCBub2RlLT5pbmRleCgpKTsKICAgICAg
ICAgICAgICAgICBtX2ludGVycHJldGVyLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAg
ICAgICAgICBpZiAobV9zdGF0ZS5oYXZlU3RydWN0dXJlcygpKQorICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgKEhhdmUgU3RydWN0dXJlcykiKTsKICAgICAgICAgICAgICAgICBkYXRhTG9n
RigiXG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5l
eGVjdXRlKGkpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTUyODc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwNiw3ICsyMDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG5vZGUt
PmNvbnZlcnRUb0dldEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCks
IHByb3BlcnR5U3RvcmFnZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3Rv
cmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7Ci0gICAgICAgICAgICAgICAgc3RvcmFn
ZUFjY2Vzc0RhdGEub2Zmc2V0ID0gaW5kZXhSZWxhdGl2ZVRvQmFzZShzdGF0dXMub2Zmc2V0KCkp
OworICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IHN0YXR1cy5vZmZz
ZXQoKTsKICAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVy
ID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFj
Y2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NEYXRhKTsKICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTMxNiw3ICszMTYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG5vZGUtPmNv
bnZlcnRUb1B1dEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCksIHBy
b3BlcnR5U3RvcmFnZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3RvcmFn
ZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7Ci0gICAgICAgICAgICAgICAgc3RvcmFnZUFj
Y2Vzc0RhdGEub2Zmc2V0ID0gaW5kZXhSZWxhdGl2ZVRvQmFzZShzdGF0dXMub2Zmc2V0KCkpOwor
ICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IHN0YXR1cy5vZmZzZXQo
KTsKICAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyID0g
aWRlbnRpZmllck51bWJlcjsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NEYXRhKTsKICAgICAgICAgICAgICAgICBicmVhazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2
aXNpb24gMTUyODc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUzLDYgKzg1Myw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgR2V0QnlPZmZzZXQ6IHsKICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhh
c1N0b3JhZ2VSZXN1bHQoKSkKICAgICAgICAgICAgICAgICBzZXRVc2VLaW5kQW5kVW5ib3hJZlBy
b2ZpdGFibGU8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBzZXRV
c2VLaW5kQW5kVW5ib3hJZlByb2ZpdGFibGU8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDIoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTI4NzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2
LDcgQEAgY2xhc3MgRXhlY1N0YXRlOwogbmFtZXNwYWNlIERGRyB7CiAKIHN0cnVjdCBTdG9yYWdl
QWNjZXNzRGF0YSB7Ci0gICAgc2l6ZV90IG9mZnNldDsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQ7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKIH07CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNTI4NzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDA4LDYgKzQwOCw4IEBA
IHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09IEdldEJ5SWQgfHwg
bV9vcCA9PSBHZXRCeUlkRmx1c2gpOwogICAgICAgICBtX29wSW5mbyA9IHN0b3JhZ2VBY2Nlc3NE
YXRhSW5kZXg7CisgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMihjaGlsZHJlbi5jaGlsZDEoKSk7
CisgICAgICAgIGNoaWxkcmVuLmNoaWxkMigpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAg
ICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQxKHN0b3JhZ2UpOwogICAgICAgICBtX29wID0gR2V0QnlP
ZmZzZXQ7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShy
ZXZpc2lvbiAxNTI4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDAwLDcgKzQwMDAsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIAogICAgICAgICBTdG9y
YWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX2ppdC5ncmFwaCgpLm1fc3RvcmFn
ZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKICAgICAgICAgCi0g
ICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzdG9y
YWdlQWNjZXNzRGF0YS5vZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IG9mZnNldFJlbGF0aXZlVG9CYXNlKHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCkpLCByZXN1bHRH
UFIpOwogICAgICAgICAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwog
ICAgICAgICBicmVhazsKQEAgLTQwMjIsNyArNDAyMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFn
ZUFjY2Vzc0RhdGEgPSBtX2ppdC5ncmFwaCgpLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3Rv
cmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlNjQo
dmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHN0b3JhZ2VBY2Nlc3NE
YXRhLm9mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgbV9qaXQuc3Rv
cmU2NCh2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVs
YXRpdmVUb0Jhc2Uoc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSkpOwogICAgICAgICAKICAgICAg
ICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE1Mjg3OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzUxLDcgKzEzNTEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IG1fb3V0LmFkZHJlc3MoCiAgICAgICAgICAgICAgICAgICAgIG1faGVhcHMucHJvcGVydGllc1tk
YXRhLmlkZW50aWZpZXJOdW1iZXJdLAogICAgICAgICAgICAgICAgICAgICBsb3dTdG9yYWdlKG1f
bm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAgICAgICAgICAgICBkYXRhLm9mZnNldCAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpKSk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldFJlbGF0aXZl
VG9CYXNlKGRhdGEub2Zmc2V0KSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlUHV0
QnlPZmZzZXQoKQpAQCAtMTM2NCw3ICsxMzY0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1f
b3V0LmFkZHJlc3MoCiAgICAgICAgICAgICAgICAgbV9oZWFwcy5wcm9wZXJ0aWVzW2RhdGEuaWRl
bnRpZmllck51bWJlcl0sCiAgICAgICAgICAgICAgICAgbG93U3RvcmFnZShtX25vZGUtPmNoaWxk
MSgpKSwKLSAgICAgICAgICAgICAgICBkYXRhLm9mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRSZWxhdGl2ZVRvQmFzZShkYXRhLm9mZnNldCkp
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0R2xvYmFsVmFyKCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxNTI4Nzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjIwLDIwICsyMjAsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gb3V0T2ZM
aW5lQ2FwYWNpdHkoKSArIGlubGluZUNhcGFjaXR5KCk7CiAgICAgfQogCi0gICAgUHJvcGVydHlP
ZmZzZXQgZmlyc3RWYWxpZE9mZnNldCgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaGFzSW5s
aW5lU3RvcmFnZSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBmaXJz
dE91dE9mTGluZU9mZnNldDsKLSAgICB9Ci0gICAgUHJvcGVydHlPZmZzZXQgbGFzdFZhbGlkT2Zm
c2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX29mZnNldDsKLSAgICB9CiAgICAg
Ym9vbCBpc1ZhbGlkT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBvZmZzZXQgPj0gZmlyc3RWYWxpZE9mZnNldCgpCi0gICAgICAgICAgICAm
JiBvZmZzZXQgPD0gbGFzdFZhbGlkT2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBKU0M6OmlzVmFs
aWRPZmZzZXQob2Zmc2V0KQorICAgICAgICAgICAgJiYgKG9mZnNldCA8IG1faW5saW5lQ2FwYWNp
dHkKKyAgICAgICAgICAgICAgICB8fCAob2Zmc2V0ID49IGZpcnN0T3V0T2ZMaW5lT2Zmc2V0ICYm
IG9mZnNldCA8PSBtX29mZnNldCkpOwogICAgIH0KIAogICAgIGJvb2wgbWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207110</attachid>
            <date>2013-07-19 09:57:27 -0700</date>
            <delta_ts>2013-07-19 11:09:43 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>14805</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBA
CisyMDEzLTA3LTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogU3RydWN0dXJlIHNob3VsZCBiZSBhYmxlIHRvIHRlbGwgeW91IGlmIGl0J3Mg
dmFsaWQgdG8gbG9hZCBhdCBhIGdpdmVuIG9mZnNldCBmcm9tIGFueSBvYmplY3Qgd2l0aCB0aGF0
IHN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTE4ODc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICAtIENoYW5nZSBTdHJ1Y3R1cmU6OmlzVmFsaWRPZmZzZXQoKSB0byBhY3R1YWxs
eSBhbnN3ZXIgdGhlIHF1ZXN0aW9uICJJZiBJIGF0dGVtcHRlZAorICAgICAgICAgIHRvIGxvYWQg
ZnJvbSBhbiBvYmplY3Qgb2YgdGhpcyBzdHJ1Y3R1cmUsIGF0IHRoaXMgb2Zmc2V0LCB3b3VsZCBJ
IGNvbW1pdCBzdWljaWRlCisgICAgICAgICAgb3Igd291bGQgSSBnZXQgYmFjayBzb21lIGtpbmQg
b2YgdmFsdWU/IgorICAgICAgICAKKyAgICAgICAgLSBDaGFuZ2UgU3RvcmFnZUFjY2Vzc0RhdGE6
Om9mZnNldCB0byB1c2UgYSBQcm9wZXJ0eU9mZnNldC4gSXQgc2hvdWxkIGhhdmUgYmVlbiB0aGF0
CisgICAgICAgICAgd2F5IGZyb20gdGhlIHN0YXJ0LgorICAgICAgICAKKyAgICAgICAgVGhlIGZ1
dHVyZSB1c2Ugb2YgdGhpcyBwb3dlciB3aWxsIGJlIHRvIGFuc3dlciBxdWVzdGlvbnMgbGlrZSAi
SWYgSSBob2lzdGVkIHRoaXMKKyAgICAgICAgR2V0QnlPZmZzZXQgb3IgUHV0QnlPZmZzZXQgdG8g
dGhpcyBwb2ludCwgd291bGQgaXQgY2F1c2UgY3Jhc2hlcywgb3Igd291bGQgaXQgYmUKKyAgICAg
ICAgZmluZT8iCisgICAgICAgIAorICAgICAgICBJIGRvbid0IGN1cnJlbnRseSBwbGFuIHRvIHVz
ZSB0aGlzIHBvd2VyIHRvIHBlcmZvcm0gdmFsaWRhdGlvbiwgc2luY2UgdGhlIENTRSBoYXMKKyAg
ICAgICAgdGhlIHBvd2VyIHRvIGVsaW1pbmF0ZSBDaGVja1N0cnVjdHVyZSdzIHRoYXQgdGhlIENG
QSB3b3VsZG4ndCBiZSBzbWFydCBlbm91Z2ggdG8KKyAgICAgICAgcmVtb3ZlIC0gYm90aCBpbiB0
aGUgY2FzZSBvZiBTdHJ1Y3R1cmVTZXRzIHdoZXJlIHNpemUgPj0gMiBhbmQgaW4gdGhlIGNhc2Ug
b2YKKyAgICAgICAgQ2hlY2tTdHJ1Y3R1cmVzIHRoYXQgbWF0Y2ggYWNyb3NzIFB1dFN0cnVjdHVy
ZXMuIEF0IGZpcnN0IEkgdHJpZWQgdG8gd3JpdGUgYQorICAgICAgICB2YWxpZGF0b3IgdGhhdCB3
YXMgYXdhcmUgb2YgdGhpcywgYnV0IHRoZSB2YWxpZGF0aW9uIGNvZGUgZ290IHdheSB0b28gY29t
cGxpY2F0ZWQKKyAgICAgICAgYW5kIEkgc3RhcnRlZCBoYXZpbmcgbmlnaHRtYXJlcyBvZiBzcHVy
aW91cyBhc3NlcnRpb24gYnVncyBiZWluZyBmaWxlZCBhZ2FpbnN0IG1lLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBhbHNvIGNoYW5nZXMgc29tZSBvZiB0aGUgY29kZSBmb3IgaG93IHdlIGhhc2gg
RnVuY3Rpb25FeGVjdXRhYmxlJ3MgZm9yIGRlYnVnCisgICAgICAgIGR1bXBzLCBzaW5jZSB0aGF0
IGNvZGUgc3RpbGwgaGFkIHNvbWUgdGhyZWFkLXNhZmV0eSBpc3N1ZXMuIEJhc2ljYWxseSwgdGhl
CisgICAgICAgIGNvbmN1cnJlbnQgSklUIG5lZWRzIHRvIHVzZSB0aGUgQ29kZUJsb2NrJ3MgcHJl
Y29tcHV0ZWQgaGFzaCBhbmQgbmV2ZXIgY2FsbCBhbnl0aGluZworICAgICAgICB0aGF0IGNvdWxk
IHRyYW5zaXRpdmVseSB0cnkgdG8gY29tcHV0ZSB0aGUgaGFzaCBmcm9tIHRoZSBzb3VyY2UgY29k
ZS4gVGhlIHNvdXJjZQorICAgICAgICBjb2RlIGlzIGEgc3RyaW5nIHRoYXQgbWF5IGJlIGxhemls
eSBjb21wdXRlZCwgYW5kIHRoYXQgaW52b2x2ZXMgYWxsIG1hbm5lciBvZiB0aHJlYWQKKyAgICAg
ICAgdW5zYWZlIHRoaW5ncy4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uY3BwOgor
ICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6Omhhc2gpOgorICAgICAgICAqIGRmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6Ojo6ZXhlY3V0
ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZH
Q0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNGQVBoYXNlOjpwZXJmb3JtQmxvY2tD
RkEpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAg
ICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoU3RvcmFn
ZUFjY2Vzc0RhdGEpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6Y29udmVydFRvR2V0QnlPZmZzZXQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKiBydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4
ZWN1dGFibGVEdW1wOjpkdW1wKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAg
ICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc1ZhbGlkT2Zmc2V0
KToKKwogMjAxMy0wNy0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIGZvdXJ0aFRpZXI6IEFic3RyYWN0SW50ZXJwcmV0ZXIgc2hvdWxkIGV4cGxpY2l0bHkgYXNr
IEFic3RyYWN0U3RhdGUgdG8gY3JlYXRlIG5ldyBBYnN0cmFjdFZhbHVlcyBmb3IgbmV3bHkgYm9y
biBub2RlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3Jp
Z2luLmNwcAkocmV2aXNpb24gMTUyODgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw4IEBAIEpTRnVu
Y3Rpb24qIElubGluZUNhbGxGcmFtZTo6Y2FsbGVlRm9yQ2EKIAogQ29kZUJsb2NrSGFzaCBJbmxp
bmVDYWxsRnJhbWU6Omhhc2goKSBjb25zdAogewotICAgIHJldHVybiBleGVjdXRhYmxlLT5oYXNo
Rm9yKHNwZWNpYWxpemF0aW9uS2luZCgpKTsKKyAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGV4ZWN1dGFibGUuZ2V0KCkpLT5nZW5lcmF0ZWRCeXRlY29kZUZvcigKKyAgICAg
ICAgc3BlY2lhbGl6YXRpb25LaW5kKCkpLmhhc2goKTsKIH0KIAogQ1N0cmluZyBJbmxpbmVDYWxs
RnJhbWU6OmluZmVycmVkTmFtZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZp
c2lvbiAxNTI4ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMzIsNiArMTIzMiw3IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgfQogCiAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVj
dHVyZXModHJ1ZSk7CiAKICAgICAgICAgLy8gSWYgdGhpcyBzdHJ1Y3R1cmUgY2hlY2sgaXMgYXR0
ZW1wdGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxyZWFkeSBoZWxkIGluCiAgICAgICAgIC8vIHRo
ZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgdGhlbiB0aGUgY29uc3RhbnQgZm9sZGluZyBw
aGFzZSBzaG91bGQKQEAgLTEyNDQsNyArMTI0NSw2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgfQogCiAgICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0
KTsKLSAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNTI4ODMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYyMCwxNCArMTYyMCwxMCBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZz
ZXQoCiAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CiAgICAgZWxzZQogICAgICAgICBw
cm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7Ci0gICAgLy8g
RklYTUU6IEl0IHdvdWxkIGJlIGZhciBtb3JlIGVmZmljaWVudCBmb3IgbG9hZCBlbGltaW5hdGlv
biAoYW5kIHNhZmVyIGZyb20KLSAgICAvLyBhbiBPU1Igc3RhbmRwb2ludCkgaWYgR2V0QnlPZmZz
ZXQgYWxzbyByZWZlcmVuY2VkIHRoZSBvYmplY3Qgd2Ugd2VyZSBsb2FkaW5nCi0gICAgLy8gZnJv
bSwgYW5kIGlmIHdlIGNvdWxkIGxvYWQgZWxpbWluYXRlIGEgR2V0QnlPZmZzZXQgZXZlbiBpZiB0
aGUgYnV0dGVyZmx5Ci0gICAgLy8gaGFkIGNoYW5nZWQuIFRoYXQgd291bGQgYmUgYSBncmVhdCBz
dWNjZXNzLgotICAgIE5vZGUqIGdldEJ5T2Zmc2V0ID0gYWRkVG9HcmFwaChHZXRCeU9mZnNldCwg
T3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGlj
dGlvbiksIHByb3BlcnR5U3RvcmFnZSk7CisgICAgTm9kZSogZ2V0QnlPZmZzZXQgPSBhZGRUb0dy
YXBoKEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUo
KSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlKTsKIAogICAgIFN0
b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwotICAgIHN0b3JhZ2VBY2Nlc3NEYXRh
Lm9mZnNldCA9IGluZGV4UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KTsKKyAgICBzdG9yYWdlQWNjZXNz
RGF0YS5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51
bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRh
LmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CiAKQEAgLTE2NTEsNyArMTY0Nyw3IEBAIE5vZGUq
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICBOb2RlKiByZXN1bHQgPSBh
ZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRh
LnNpemUoKSksIHByb3BlcnR5U3RvcmFnZSwgYmFzZSwgdmFsdWUpOwogICAgIAogICAgIFN0b3Jh
Z2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwotICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9m
ZnNldCA9IGluZGV4UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KTsKKyAgICBzdG9yYWdlQWNjZXNzRGF0
YS5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJl
ciA9IGlkZW50aWZpZXI7CiAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFwcGVuZChz
dG9yYWdlQWNjZXNzRGF0YSk7CiAKQEAgLTI0NTksNyArMjQ1NSw3IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgdmFsdWUpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3Jh
Z2VBY2Nlc3NEYXRhOwotICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9
IGluZGV4UmVsYXRpdmVUb0Jhc2UocHV0QnlJZFN0YXR1cy5vZmZzZXQoKSk7CisgICAgICAgICAg
ICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0gcHV0QnlJZFN0YXR1cy5vZmZzZXQoKTsK
ICAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRl
bnRpZmllck51bWJlcjsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0Rh
dGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NEYXRhKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2aXNpb24gMTUy
ODgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMCw2ICsxMDAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAg
ICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZShub2RlLT5vcCgpKSwgbm9kZS0+aW5kZXgoKSk7CiAg
ICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKG1fc3RhdGUuaGF2ZVN0cnVjdHVyZXMoKSkKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiIChIYXZlIFN0cnVjdHVyZXMpIik7CiAgICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIlxuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIW1faW50ZXJwcmV0
ZXIuZXhlY3V0ZShpKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE1Mjg4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBu
b2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6
ZSgpLCBwcm9wZXJ0eVN0b3JhZ2UpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwotICAgICAgICAgICAgICAgIHN0
b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IGluZGV4UmVsYXRpdmVUb0Jhc2Uoc3RhdHVzLm9mZnNl
dCgpKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBzdGF0dXMu
b2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51
bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC0zMTYsNyArMzE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBub2Rl
LT5jb252ZXJ0VG9QdXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgp
LCBwcm9wZXJ0eVN0b3JhZ2UpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFN0
b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwotICAgICAgICAgICAgICAgIHN0b3Jh
Z2VBY2Nlc3NEYXRhLm9mZnNldCA9IGluZGV4UmVsYXRpdmVUb0Jhc2Uoc3RhdHVzLm9mZnNldCgp
KTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBzdGF0dXMub2Zm
c2V0KCk7CiAgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJl
ciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJ
KHJldmlzaW9uIDE1Mjg4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1Myw2ICs4NTMsNyBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7CiAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgp
LT5oYXNTdG9yYWdlUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94
SWZQcm9maXRhYmxlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAg
c2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRhYmxlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQy
KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTUyODgzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3
ICs1Niw3IEBAIGNsYXNzIEV4ZWNTdGF0ZTsKIG5hbWVzcGFjZSBERkcgewogCiBzdHJ1Y3QgU3Rv
cmFnZUFjY2Vzc0RhdGEgewotICAgIHNpemVfdCBvZmZzZXQ7CisgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0OwogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTUyODgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwOCw2ICs0MDgs
OCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICBBU1NFUlQobV9vcCA9PSBHZXRCeUlk
IHx8IG1fb3AgPT0gR2V0QnlJZEZsdXNoKTsKICAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdlQWNj
ZXNzRGF0YUluZGV4OworICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDIoY2hpbGRyZW4uY2hpbGQx
KCkpOworICAgICAgICBjaGlsZHJlbi5jaGlsZDIoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7
CiAgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMShzdG9yYWdlKTsKICAgICAgICAgbV9vcCA9IEdl
dEJ5T2Zmc2V0OwogICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlQ2xvYmJlcnNXb3JsZDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkocmV2aXNpb24gMTUyODgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAwMCw3ICs0MDAwLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAKICAgICAgICAg
U3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3N0
b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CiAgICAgICAg
IAotICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
c3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3Vs
dEdQUik7CisgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQpKSwgcmVz
dWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKICAgICAgICAgYnJlYWs7CkBAIC00MDIyLDcgKzQwMjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0
b3JhZ2VBY2Nlc3NEYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUt
PnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9y
ZTY0KHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzdG9yYWdlQWNj
ZXNzRGF0YS5vZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgIG1faml0
LnN0b3JlNjQodmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNl
dFJlbGF0aXZlVG9CYXNlKHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCkpKTsKICAgICAgICAgCiAg
ICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTI4
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM1MSw3ICsxMzUxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBtX291dC5hZGRyZXNzKAogICAgICAgICAgICAgICAgICAgICBtX2hlYXBzLnByb3BlcnRp
ZXNbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwKICAgICAgICAgICAgICAgICAgICAgbG93U3RvcmFn
ZShtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5vZmZzZXQgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSkpOworICAgICAgICAgICAgICAgICAgICBvZmZzZXRSZWxh
dGl2ZVRvQmFzZShkYXRhLm9mZnNldCkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGls
ZVB1dEJ5T2Zmc2V0KCkKQEAgLTEzNjQsNyArMTM2NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBtX291dC5hZGRyZXNzKAogICAgICAgICAgICAgICAgIG1faGVhcHMucHJvcGVydGllc1tkYXRh
LmlkZW50aWZpZXJOdW1iZXJdLAogICAgICAgICAgICAgICAgIGxvd1N0b3JhZ2UobV9ub2RlLT5j
aGlsZDEoKSksCi0gICAgICAgICAgICAgICAgZGF0YS5vZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UoZGF0YS5vZmZz
ZXQpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEdsb2JhbFZhcigpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4
ZWN1dGFibGVEdW1wLmNwcAkocmV2aXNpb24gMTUyODgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDExICsyNiwyMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9u
RXhlY3V0YWJsZUR1bXAuaCIKIAorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorCiBuYW1lc3BhY2Ug
SlNDIHsKIAogdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KG1fZXhlY3V0YWJsZS0+aW5mZXJyZWROYW1lKCku
c3RyaW5nKCksICIjIiwgbV9leGVjdXRhYmxlLT5oYXNoRm9yKENvZGVGb3JDYWxsKSwgIi8iLCBt
X2V4ZWN1dGFibGUtPmhhc2hGb3IoQ29kZUZvckNvbnN0cnVjdCksICI6WyIsIFJhd1BvaW50ZXIo
bV9leGVjdXRhYmxlKSwgIl0iKTsKKyAgICBvdXQucHJpbnQobV9leGVjdXRhYmxlLT5pbmZlcnJl
ZE5hbWUoKS5zdHJpbmcoKSwgIiMiKTsKKyAgICBpZiAobV9leGVjdXRhYmxlLT5pc0dlbmVyYXRl
ZEZvckNhbGwoKSkKKyAgICAgICAgb3V0LnByaW50KG1fZXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0
ZWNvZGVGb3JDYWxsKCkuaGFzaCgpKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCgiPG5v
Z2VuPiIpOworICAgIG91dC5wcmludCgiLyIpOworICAgIGlmIChtX2V4ZWN1dGFibGUtPmlzR2Vu
ZXJhdGVkRm9yQ29uc3RydWN0KCkpCisgICAgICAgIG91dC5wcmludChtX2V4ZWN1dGFibGUtPmdl
bmVyYXRlZEJ5dGVjb2RlRm9yQ29uc3RydWN0KCkuaGFzaCgpKTsKKyAgICBlbHNlCisgICAgICAg
IG91dC5wcmludCgiPG5vZ2VuPiIpOworICAgIG91dC5wcmludCgiOlsiLCBSYXdQb2ludGVyKG1f
ZXhlY3V0YWJsZSksICJdIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE1Mjg4MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjAsMjAgKzIyMCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvdXRPZkxpbmVD
YXBhY2l0eSgpICsgaW5saW5lQ2FwYWNpdHkoKTsKICAgICB9CiAKLSAgICBQcm9wZXJ0eU9mZnNl
dCBmaXJzdFZhbGlkT2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChoYXNJbmxpbmVT
dG9yYWdlKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0OwotICAgIH0KLSAgICBQcm9wZXJ0eU9mZnNldCBsYXN0VmFsaWRPZmZzZXQo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OwotICAgIH0KICAgICBib29s
IGlzVmFsaWRPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG9mZnNldCA+PSBmaXJzdFZhbGlkT2Zmc2V0KCkKLSAgICAgICAgICAgICYmIG9m
ZnNldCA8PSBsYXN0VmFsaWRPZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6aXNWYWxpZE9m
ZnNldChvZmZzZXQpCisgICAgICAgICAgICAmJiAob2Zmc2V0IDwgbV9pbmxpbmVDYXBhY2l0eQor
ICAgICAgICAgICAgICAgIHx8IChvZmZzZXQgPj0gZmlyc3RPdXRPZkxpbmVPZmZzZXQgJiYgb2Zm
c2V0IDw9IG1fb2Zmc2V0KSk7CiAgICAgfQogCiAgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207125</attachid>
            <date>2013-07-19 11:09:43 -0700</date>
            <delta_ts>2013-07-19 11:12:34 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>15009</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyOTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBA
CisyMDEzLTA3LTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogU3RydWN0dXJlIHNob3VsZCBiZSBhYmxlIHRvIHRlbGwgeW91IGlmIGl0J3Mg
dmFsaWQgdG8gbG9hZCBhdCBhIGdpdmVuIG9mZnNldCBmcm9tIGFueSBvYmplY3Qgd2l0aCB0aGF0
IHN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTE4ODc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICAtIENoYW5nZSBTdHJ1Y3R1cmU6OmlzVmFsaWRPZmZzZXQoKSB0byBhY3R1YWxs
eSBhbnN3ZXIgdGhlIHF1ZXN0aW9uICJJZiBJIGF0dGVtcHRlZAorICAgICAgICAgIHRvIGxvYWQg
ZnJvbSBhbiBvYmplY3Qgb2YgdGhpcyBzdHJ1Y3R1cmUsIGF0IHRoaXMgb2Zmc2V0LCB3b3VsZCBJ
IGNvbW1pdCBzdWljaWRlCisgICAgICAgICAgb3Igd291bGQgSSBnZXQgYmFjayBzb21lIGtpbmQg
b2YgdmFsdWU/IgorICAgICAgICAKKyAgICAgICAgLSBDaGFuZ2UgU3RvcmFnZUFjY2Vzc0RhdGE6
Om9mZnNldCB0byB1c2UgYSBQcm9wZXJ0eU9mZnNldC4gSXQgc2hvdWxkIGhhdmUgYmVlbiB0aGF0
CisgICAgICAgICAgd2F5IGZyb20gdGhlIHN0YXJ0LgorICAgICAgICAKKyAgICAgICAgLSBGaXgg
UHV0U3RydWN0dXJlIHNvIHRoYXQgaXQgc2V0cyBoYXZlU3RydWN0dXJlcyBpbiBhbGwgb2YgdGhl
IGNhc2VzIHRoYXQgaXQgc2hvdWxkLgorICAgICAgICAKKyAgICAgICAgLSBNYWtlIEdldEJ5T2Zm
c2V0IGFsc28gcmVmZXJlbmNlIHRoZSBiYXNlIG9iamVjdCBpbiBhZGRpdGlvbiB0byB0aGUgYnV0
dGVyZmx5LgorICAgICAgICAKKyAgICAgICAgVGhlIGZ1dHVyZSB1c2Ugb2YgdGhpcyBwb3dlciB3
aWxsIGJlIHRvIGFuc3dlciBxdWVzdGlvbnMgbGlrZSAiSWYgSSBob2lzdGVkIHRoaXMKKyAgICAg
ICAgR2V0QnlPZmZzZXQgb3IgUHV0QnlPZmZzZXQgdG8gdGhpcyBwb2ludCwgd291bGQgaXQgY2F1
c2UgY3Jhc2hlcywgb3Igd291bGQgaXQgYmUKKyAgICAgICAgZmluZT8iCisgICAgICAgIAorICAg
ICAgICBJIGRvbid0IGN1cnJlbnRseSBwbGFuIHRvIHVzZSB0aGlzIHBvd2VyIHRvIHBlcmZvcm0g
dmFsaWRhdGlvbiwgc2luY2UgdGhlIENTRSBoYXMKKyAgICAgICAgdGhlIHBvd2VyIHRvIGVsaW1p
bmF0ZSBDaGVja1N0cnVjdHVyZSdzIHRoYXQgdGhlIENGQSB3b3VsZG4ndCBiZSBzbWFydCBlbm91
Z2ggdG8KKyAgICAgICAgcmVtb3ZlIC0gYm90aCBpbiB0aGUgY2FzZSBvZiBTdHJ1Y3R1cmVTZXRz
IHdoZXJlIHNpemUgPj0gMiBhbmQgaW4gdGhlIGNhc2Ugb2YKKyAgICAgICAgQ2hlY2tTdHJ1Y3R1
cmVzIHRoYXQgbWF0Y2ggYWNyb3NzIFB1dFN0cnVjdHVyZXMuIEF0IGZpcnN0IEkgdHJpZWQgdG8g
d3JpdGUgYQorICAgICAgICB2YWxpZGF0b3IgdGhhdCB3YXMgYXdhcmUgb2YgdGhpcywgYnV0IHRo
ZSB2YWxpZGF0aW9uIGNvZGUgZ290IHdheSB0b28gY29tcGxpY2F0ZWQKKyAgICAgICAgYW5kIEkg
c3RhcnRlZCBoYXZpbmcgbmlnaHRtYXJlcyBvZiBzcHVyaW91cyBhc3NlcnRpb24gYnVncyBiZWlu
ZyBmaWxlZCBhZ2FpbnN0IG1lLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhbHNvIGNoYW5nZXMg
c29tZSBvZiB0aGUgY29kZSBmb3IgaG93IHdlIGhhc2ggRnVuY3Rpb25FeGVjdXRhYmxlJ3MgZm9y
IGRlYnVnCisgICAgICAgIGR1bXBzLCBzaW5jZSB0aGF0IGNvZGUgc3RpbGwgaGFkIHNvbWUgdGhy
ZWFkLXNhZmV0eSBpc3N1ZXMuIEJhc2ljYWxseSwgdGhlCisgICAgICAgIGNvbmN1cnJlbnQgSklU
IG5lZWRzIHRvIHVzZSB0aGUgQ29kZUJsb2NrJ3MgcHJlY29tcHV0ZWQgaGFzaCBhbmQgbmV2ZXIg
Y2FsbCBhbnl0aGluZworICAgICAgICB0aGF0IGNvdWxkIHRyYW5zaXRpdmVseSB0cnkgdG8gY29t
cHV0ZSB0aGUgaGFzaCBmcm9tIHRoZSBzb3VyY2UgY29kZS4gVGhlIHNvdXJjZQorICAgICAgICBj
b2RlIGlzIGEgc3RyaW5nIHRoYXQgbWF5IGJlIGxhemlseSBjb21wdXRlZCwgYW5kIHRoYXQgaW52
b2x2ZXMgYWxsIG1hbm5lciBvZiB0aHJlYWQKKyAgICAgICAgdW5zYWZlIHRoaW5ncy4KKworICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uY3BwOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxs
RnJhbWU6Omhhc2gpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oOgorICAgICAgICAoSlNDOjpERkc6Ojo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNGQVBoYXNlOjpwZXJmb3JtQmxvY2tDRkEpOgorICAgICAgICAqIGRmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xk
aW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoU3RvcmFnZUFjY2Vzc0RhdGEpOgorICAgICAgICAq
IGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvR2V0QnlP
ZmZzZXQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZVB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZUR1
bXAuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGVEdW1wOjpkdW1wKToKKyAg
ICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjppc1ZhbGlkT2Zmc2V0KToKKwogMjAxMy0wNy0xOCAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZvdXJ0aFRpZXI6IEFic3RyYWN0
SW50ZXJwcmV0ZXIgc2hvdWxkIGV4cGxpY2l0bHkgYXNrIEFic3RyYWN0U3RhdGUgdG8gY3JlYXRl
IG5ldyBBYnN0cmFjdFZhbHVlcyBmb3IgbmV3bHkgYm9ybiBub2RlcwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTUyODgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NCw3ICs4NCw4IEBAIEpTRnVuY3Rpb24qIElubGluZUNhbGxGcmFtZTo6
Y2FsbGVlRm9yQ2EKIAogQ29kZUJsb2NrSGFzaCBJbmxpbmVDYWxsRnJhbWU6Omhhc2goKSBjb25z
dAogewotICAgIHJldHVybiBleGVjdXRhYmxlLT5oYXNoRm9yKHNwZWNpYWxpemF0aW9uS2luZCgp
KTsKKyAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUuZ2V0
KCkpLT5nZW5lcmF0ZWRCeXRlY29kZUZvcigKKyAgICAgICAgc3BlY2lhbGl6YXRpb25LaW5kKCkp
Lmhhc2goKTsKIH0KIAogQ1N0cmluZyBJbmxpbmVDYWxsRnJhbWU6OmluZmVycmVkTmFtZSgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNTI4ODMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyMzIsNiArMTIzMiw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgfQogCiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1
ZSk7CisgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CiAKICAgICAgICAg
Ly8gSWYgdGhpcyBzdHJ1Y3R1cmUgY2hlY2sgaXMgYXR0ZW1wdGluZyB0byBwcm92ZSBrbm93bGVk
Z2UgYWxyZWFkeSBoZWxkIGluCiAgICAgICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVy
ZSBzZXQgdGhlbiB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFzZSBzaG91bGQKQEAgLTEyNDQsNyAr
MTI0NSw2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgfQogCiAgICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0KTsKLSAgICAgICAgbV9zdGF0ZS5zZXRI
YXZlU3RydWN0dXJlcyh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CShyZXZpc2lvbiAxNTI4ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyMCwxNCArMTYyMCwxMCBAQCBOb2Rl
KiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgICAgIHByb3BlcnR5U3Rv
cmFnZSA9IGJhc2U7CiAgICAgZWxzZQogICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dy
YXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7Ci0gICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGZhciBt
b3JlIGVmZmljaWVudCBmb3IgbG9hZCBlbGltaW5hdGlvbiAoYW5kIHNhZmVyIGZyb20KLSAgICAv
LyBhbiBPU1Igc3RhbmRwb2ludCkgaWYgR2V0QnlPZmZzZXQgYWxzbyByZWZlcmVuY2VkIHRoZSBv
YmplY3Qgd2Ugd2VyZSBsb2FkaW5nCi0gICAgLy8gZnJvbSwgYW5kIGlmIHdlIGNvdWxkIGxvYWQg
ZWxpbWluYXRlIGEgR2V0QnlPZmZzZXQgZXZlbiBpZiB0aGUgYnV0dGVyZmx5Ci0gICAgLy8gaGFk
IGNoYW5nZWQuIFRoYXQgd291bGQgYmUgYSBncmVhdCBzdWNjZXNzLgotICAgIE5vZGUqIGdldEJ5
T2Zmc2V0ID0gYWRkVG9HcmFwaChHZXRCeU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdl
QWNjZXNzRGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIHByb3BlcnR5U3RvcmFnZSk7
CisgICAgTm9kZSogZ2V0QnlPZmZzZXQgPSBhZGRUb0dyYXBoKEdldEJ5T2Zmc2V0LCBPcEluZm8o
bV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwg
cHJvcGVydHlTdG9yYWdlLCBiYXNlKTsKIAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VB
Y2Nlc3NEYXRhOwotICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IGluZGV4UmVsYXRpdmVU
b0Jhc2Uob2Zmc2V0KTsKKyAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBvZmZzZXQ7CiAg
ICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7
CiAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0
YSk7CiAKQEAgLTE2NTEsNyArMTY0Nyw3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQ
dXRCeU9mZnNldCgKICAgICBOb2RlKiByZXN1bHQgPSBhZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBP
cEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIHByb3BlcnR5U3RvcmFn
ZSwgYmFzZSwgdmFsdWUpOwogICAgIAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nl
c3NEYXRhOwotICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IGluZGV4UmVsYXRpdmVUb0Jh
c2Uob2Zmc2V0KTsKKyAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBvZmZzZXQ7CiAgICAg
c3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXI7CiAgICAgbV9n
cmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CiAKQEAg
LTI0NTksNyArMjQ1NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgICAgICAgICAgICAgdmFsdWUpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwotICAgICAgICAg
ICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IGluZGV4UmVsYXRpdmVUb0Jhc2UocHV0
QnlJZFN0YXR1cy5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEu
b2Zmc2V0ID0gcHV0QnlJZFN0YXR1cy5vZmZzZXQoKTsKICAgICAgICAgICAgICAgICBzdG9yYWdl
QWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NE
YXRhKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2aXNpb24gMTUyODgzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAs
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7
CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFt
ZShub2RlLT5vcCgpKSwgbm9kZS0+aW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgbV9pbnRlcnBy
ZXRlci5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUu
aGF2ZVN0cnVjdHVyZXMoKSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiIChIYXZlIFN0
cnVjdHVyZXMpIik7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIlxuIik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpKSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAJKHJldmlzaW9uIDE1Mjg4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNl
dChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2UpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3Jh
Z2VBY2Nlc3NEYXRhOwotICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9
IGluZGV4UmVsYXRpdmVUb0Jhc2Uoc3RhdHVzLm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBz
dG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBzdGF0dXMub2Zmc2V0KCk7CiAgICAgICAgICAgICAg
ICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7
CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9y
YWdlQWNjZXNzRGF0YSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zMTYsNyArMzE2LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QdXRCeU9mZnNldCht
X2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2UpOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VB
Y2Nlc3NEYXRhOwotICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IGlu
ZGV4UmVsYXRpdmVUb0Jhc2Uoc3RhdHVzLm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBzdG9y
YWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBzdGF0dXMub2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAg
c3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdl
QWNjZXNzRGF0YSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE1Mjg4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg1Myw2ICs4NTMsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7
CiAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdlUmVzdWx0KCkpCiAg
ICAgICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRhYmxlPEtub3duQ2VsbFVz
ZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9m
aXRhYmxlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAkocmV2aXNpb24gMTUyODgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIGNsYXNzIEV4ZWNTdGF0
ZTsKIG5hbWVzcGFjZSBERkcgewogCiBzdHJ1Y3QgU3RvcmFnZUFjY2Vzc0RhdGEgewotICAgIHNp
emVfdCBvZmZzZXQ7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXI7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkocmV2aXNpb24gMTUyODgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwOCw2ICs0MDgsOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ewogICAgICAgICBBU1NFUlQobV9vcCA9PSBHZXRCeUlkIHx8IG1fb3AgPT0gR2V0QnlJZEZsdXNo
KTsKICAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4OworICAgICAgICBj
aGlsZHJlbi5zZXRDaGlsZDIoY2hpbGRyZW4uY2hpbGQxKCkpOworICAgICAgICBjaGlsZHJlbi5j
aGlsZDIoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgIGNoaWxkcmVuLnNldENo
aWxkMShzdG9yYWdlKTsKICAgICAgICAgbV9vcCA9IEdldEJ5T2Zmc2V0OwogICAgICAgICBtX2Zs
YWdzICY9IH5Ob2RlQ2xvYmJlcnNXb3JsZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTUyODgzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAwMCw3ICs0MDAwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3Jh
Z2VBY2Nlc3NEYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0
b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkNjQo
SklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0Lmxv
YWQ2NChKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFz
ZShzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CkBAIC00
MDIyLDcgKzQwMjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbV9qaXQu
Z3JhcGgoKS5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgo
KV07CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BSLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgIG1faml0LnN0b3JlNjQodmFsdWVHUFIsIEpJVENv
bXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHN0b3JhZ2VB
Y2Nlc3NEYXRhLm9mZnNldCkpKTsKICAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwog
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTI4ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1MSw3
ICsxMzUxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX291dC5hZGRyZXNzKAogICAg
ICAgICAgICAgICAgICAgICBtX2hlYXBzLnByb3BlcnRpZXNbZGF0YS5pZGVudGlmaWVyTnVtYmVy
XSwKICAgICAgICAgICAgICAgICAgICAgbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMSgpKSwKLSAg
ICAgICAgICAgICAgICAgICAgZGF0YS5vZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSkp
OworICAgICAgICAgICAgICAgICAgICBvZmZzZXRSZWxhdGl2ZVRvQmFzZShkYXRhLm9mZnNldCkp
KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVB1dEJ5T2Zmc2V0KCkKQEAgLTEzNjQs
NyArMTM2NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5hZGRyZXNzKAogICAgICAg
ICAgICAgICAgIG1faGVhcHMucHJvcGVydGllc1tkYXRhLmlkZW50aWZpZXJOdW1iZXJdLAogICAg
ICAgICAgICAgICAgIGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDEoKSksCi0gICAgICAgICAgICAg
ICAgZGF0YS5vZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICAg
ICAgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UoZGF0YS5vZmZzZXQpKSk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgY29tcGlsZUdldEdsb2JhbFZhcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcAkocmV2aXNp
b24gMTUyODgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVj
dXRhYmxlRHVtcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDExICsyNiwyMyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCIKIAorI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBGdW5jdGlvbkV4
ZWN1dGFibGVEdW1wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnBy
aW50KG1fZXhlY3V0YWJsZS0+aW5mZXJyZWROYW1lKCkuc3RyaW5nKCksICIjIiwgbV9leGVjdXRh
YmxlLT5oYXNoRm9yKENvZGVGb3JDYWxsKSwgIi8iLCBtX2V4ZWN1dGFibGUtPmhhc2hGb3IoQ29k
ZUZvckNvbnN0cnVjdCksICI6WyIsIFJhd1BvaW50ZXIobV9leGVjdXRhYmxlKSwgIl0iKTsKKyAg
ICBvdXQucHJpbnQobV9leGVjdXRhYmxlLT5pbmZlcnJlZE5hbWUoKS5zdHJpbmcoKSwgIiMiKTsK
KyAgICBpZiAobV9leGVjdXRhYmxlLT5pc0dlbmVyYXRlZEZvckNhbGwoKSkKKyAgICAgICAgb3V0
LnByaW50KG1fZXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDYWxsKCkuaGFzaCgpKTsK
KyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCgiPG5vZ2VuPiIpOworICAgIG91dC5wcmludCgi
LyIpOworICAgIGlmIChtX2V4ZWN1dGFibGUtPmlzR2VuZXJhdGVkRm9yQ29uc3RydWN0KCkpCisg
ICAgICAgIG91dC5wcmludChtX2V4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5dGVjb2RlRm9yQ29uc3Ry
dWN0KCkuaGFzaCgpKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCgiPG5vZ2VuPiIpOwor
ICAgIG91dC5wcmludCgiOlsiLCBSYXdQb2ludGVyKG1fZXhlY3V0YWJsZSksICJdIik7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgJKHJldmlzaW9uIDE1Mjg4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsMjAgKzIyMCwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBvdXRPZkxpbmVDYXBhY2l0eSgpICsgaW5saW5lQ2FwYWNp
dHkoKTsKICAgICB9CiAKLSAgICBQcm9wZXJ0eU9mZnNldCBmaXJzdFZhbGlkT2Zmc2V0KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIGlmIChoYXNJbmxpbmVTdG9yYWdlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0OwotICAgIH0KLSAg
ICBQcm9wZXJ0eU9mZnNldCBsYXN0VmFsaWRPZmZzZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fb2Zmc2V0OwotICAgIH0KICAgICBib29sIGlzVmFsaWRPZmZzZXQoUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG9mZnNldCA+PSBmaXJz
dFZhbGlkT2Zmc2V0KCkKLSAgICAgICAgICAgICYmIG9mZnNldCA8PSBsYXN0VmFsaWRPZmZzZXQo
KTsKKyAgICAgICAgcmV0dXJuIEpTQzo6aXNWYWxpZE9mZnNldChvZmZzZXQpCisgICAgICAgICAg
ICAmJiAob2Zmc2V0IDwgbV9pbmxpbmVDYXBhY2l0eQorICAgICAgICAgICAgICAgIHx8IChvZmZz
ZXQgPj0gZmlyc3RPdXRPZkxpbmVPZmZzZXQgJiYgb2Zmc2V0IDw9IG1fb2Zmc2V0KSk7CiAgICAg
fQogCiAgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsK
</data>
<flag name="review"
          id="228896"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>