<?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>132548</bug_id>
          
          <creation_ts>2014-05-04 13:51:48 -0700</creation_ts>
          <short_desc>Optimize JSRopeString for resolving directly to AtomicString.</short_desc>
          <delta_ts>2014-05-04 23:45:14 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kling</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1006498</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-05-04 13:51:48 -0700</bug_when>
    <thetext>We could make JSRopeString smarter when we know the output is going to be used as an AtomicString.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006504</commentid>
    <comment_count>1</comment_count>
      <attachid>230792</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-05-04 14:19:01 -0700</bug_when>
    <thetext>Created attachment 230792
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006506</commentid>
    <comment_count>2</comment_count>
      <attachid>230793</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-05-04 16:05:19 -0700</bug_when>
    <thetext>Created attachment 230793
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006539</commentid>
    <comment_count>3</comment_count>
      <attachid>230793</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-05-04 19:31:02 -0700</bug_when>
    <thetext>Comment on attachment 230793
Patch

I would have done this differently. First use the rope in place to find the AtomicString. If none exist, then create the StringImpl and resolve.

Any reason you went for this two steps resolution?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006543</commentid>
    <comment_count>4</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-05-04 19:46:22 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 230793 [details])
&gt; I would have done this differently. First use the rope in place to find the AtomicString. If none exist, then create the StringImpl and resolve.
&gt; 
&gt; Any reason you went for this two steps resolution?

For simplicity. Here we walk the fiber tree once instead of up to 3 times. In your version, we&apos;d have to hash recursively, then check equality recursively and then (worst case) copy into a new string recursively.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006555</commentid>
    <comment_count>5</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-05-04 21:43:55 -0700</bug_when>
    <thetext>Forgot to mention in ChangeLog, this is a ~20% progression on Dromaeo/dom-query.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006557</commentid>
    <comment_count>6</comment_count>
      <attachid>230793</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-04 21:50:20 -0700</bug_when>
    <thetext>Comment on attachment 230793
Patch

lgtm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006564</commentid>
    <comment_count>7</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-05-04 23:45:14 -0700</bug_when>
    <thetext>Committed r168256: &lt;http://trac.webkit.org/changeset/168256&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230792</attachid>
            <date>2014-05-04 14:19:01 -0700</date>
            <delta_ts>2014-05-04 15:51:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132548.diff</filename>
            <type>text/plain</type>
            <size>18478</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDA0YTZjMzUuLmU1NWIwNjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE0LTA1LTA0ICBBbmRyZWFzIEtsaW5n
ICA8YWtsaW5nQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBKU1JvcGVTdHJpbmcgZm9y
IHJlc29sdmluZyBkaXJlY3RseSB0byBBdG9taWNTdHJpbmcuCisgICAgICAgIDxodHRwczovL3dl
YmtpdC5vcmcvYi8xMzI1NDg+CisKKyAgICAgICAgSWYgd2Uga25vdyB0aGF0IHRoZSBKU1JvcGVT
dHJpbmcgd2UgYXJlIHJlc29sdmluZyBpcyBnb2luZyB0byBiZSB1c2VkCisgICAgICAgIGFzIGFu
IEF0b21pY1N0cmluZywgd2UgY2FuIHRyeSB0byBhdm9pZCBjcmVhdGluZyBhIG5ldyBzdHJpbmcu
CisKKyAgICAgICAgV2UgZG8gdGhpcyBieSBmaXJzdCByZXNvbHZpbmcgdGhlIHJvcGUgaW50byBh
IHN0YWNrIGJ1ZmZlciwgYW5kIHVzaW5nCisgICAgICAgIHRoYXQgYnVmZmVyIGFzIGEga2V5IGlu
dG8gdGhlIEF0b21pY1N0cmluZyB0YWJsZS4gSWYgdGhlcmUgaXMgYWxyZWFkeQorICAgICAgICBh
biBBdG9taWNTdHJpbmcgd2l0aCB0aGUgc2FtZSBjaGFyYWN0ZXJzLCB3ZSByZXVzZSB0aGF0IGlu
c3RlYWQgb2YKKyAgICAgICAgY29uc3RydWN0aW5nIGEgbmV3IFN0cmluZ0ltcGwuCisKKyAgICAg
ICAgSlNTdHJpbmcgZ2FpbnMgdGhlc2UgdHdvIHB1YmxpYyBmdW5jdGlvbnM6CisKKyAgICAgICAg
LSBBdG9taWNTdHJpbmcgdG9BdG9taWNTdHJpbmcoKQorCisgICAgICAgICAgICBSZXR1cm5zIGFu
IEF0b21pY1N0cmluZywgdHJpZXMgdG8gYXZvaWQgYWxsb2NhdGluZyBhIG5ldyBzdHJpbmcKKyAg
ICAgICAgICAgIGlmIHBvc3NpYmxlLgorCisgICAgICAgIC0gQXRvbWljU3RyaW5nSW1wbCogdG9F
eGlzdGluZ0F0b21pY1N0cmluZygpCisKKyAgICAgICAgICAgIFJldHVybnMgYSBub24tbnVsbCBB
dG9taWNTdHJpbmdJbXBsKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMgaW4gdGhlCisgICAgICAgICAg
ICBBdG9taWNTdHJpbmcgdGFibGUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6SlNS
b3BlU3RyaW5nOjpyZXNvbHZlUm9wZUludGVybmFsOCk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0
cmluZzo6cmVzb2x2ZVJvcGVJbnRlcm5hbDE2KToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5n
OjpyZXNvbHZlUm9wZVRvQXRvbWljU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5n
OjpjbGVhckZpYmVycyk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVU
b0V4aXN0aW5nQXRvbWljU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpyZXNv
bHZlUm9wZSk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6b3V0T2ZNZW1vcnkpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnRvQXRv
bWljU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnRvRXhpc3RpbmdBdG9taWNTdHJp
bmcpOgorCiAyMDE0LTA1LTAyICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgog
CiAgICAgICAgICJhcm02NCBmdW5jdGlvbiBub3QgNC1ieXRlIGFsaWduZWQiIHdhcm5pbmdzIHdo
ZW4gYnVpbGRpbmcgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5j
cHAKaW5kZXggMDBmMDVmNS4uYWNiYmNmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmNwcApAQCAtODYsNiArODYsMTE1IEBAIHZvaWQgSlNSb3BlU3RyaW5nOjp2
aXNpdEZpYmVycyhTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICAgICAgdmlzaXRvci5hcHBlbmQo
Jm1fZmliZXJzW2ldKTsKIH0KIAorc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heExlbmd0aEZvck9u
U3RhY2tSZXNvbHZlID0gMjA0ODsKKwordm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlSW50
ZXJuYWw4KExDaGFyKiBidWZmZXIpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzX21heEludGVybmFsUm9wZUxlbmd0aCAmJiBtX2ZpYmVyc1tpXTsgKytpKSB7CisgICAgICAg
IGlmIChtX2ZpYmVyc1tpXS0+aXNSb3BlKCkpIHsKKyAgICAgICAgICAgIHJlc29sdmVSb3BlU2xv
d0Nhc2U4KGJ1ZmZlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBMQ2hhciogcG9zaXRpb24gPSBidWZmZXI7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzX21heEludGVybmFsUm9wZUxlbmd0aCAmJiBtX2ZpYmVyc1tpXTsgKytpKSB7CisgICAgICAg
IGNvbnN0IFN0cmluZ0ltcGwmIGZpYmVyU3RyaW5nID0gKm1fZmliZXJzW2ldLT5tX3ZhbHVlLmlt
cGwoKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gZmliZXJTdHJpbmcubGVuZ3RoKCk7Cisg
ICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhwb3NpdGlvbiwgZmliZXJTdHJpbmcuY2hhcmFj
dGVyczgoKSwgbGVuZ3RoKTsKKyAgICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoOworICAgICAgICBt
X2ZpYmVyc1tpXS5jbGVhcigpOworICAgIH0KKyAgICBBU1NFUlQoKGJ1ZmZlciArIG1fbGVuZ3Ro
KSA9PSBwb3NpdGlvbik7Cit9CisKK3ZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZUludGVy
bmFsMTYoVUNoYXIqIGJ1ZmZlcikgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoICYmIG1fZmliZXJzW2ldOyArK2kpIHsKKyAgICAgICAg
aWYgKG1fZmliZXJzW2ldLT5pc1JvcGUoKSkgeworICAgICAgICAgICAgcmVzb2x2ZVJvcGVTbG93
Q2FzZShidWZmZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisg
ICAgVUNoYXIqIHBvc2l0aW9uID0gYnVmZmVyOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c19tYXhJbnRlcm5hbFJvcGVMZW5ndGggJiYgbV9maWJlcnNbaV07ICsraSkgeworICAgICAgICBj
b25zdCBTdHJpbmdJbXBsJiBmaWJlclN0cmluZyA9ICptX2ZpYmVyc1tpXS0+bV92YWx1ZS5pbXBs
KCk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGZpYmVyU3RyaW5nLmxlbmd0aCgpOworICAg
ICAgICBpZiAoZmliZXJTdHJpbmcuaXM4Qml0KCkpCisgICAgICAgICAgICBTdHJpbmdJbXBsOjpj
b3B5Q2hhcnMocG9zaXRpb24sIGZpYmVyU3RyaW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0aCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhwb3NpdGlvbiwg
ZmliZXJTdHJpbmcuY2hhcmFjdGVyczE2KCksIGxlbmd0aCk7CisgICAgICAgIHBvc2l0aW9uICs9
IGxlbmd0aDsKKyAgICAgICAgbV9maWJlcnNbaV0uY2xlYXIoKTsKKyAgICB9CisgICAgQVNTRVJU
KChidWZmZXIgKyBtX2xlbmd0aCkgPT0gcG9zaXRpb24pOworfQorCit2b2lkIEpTUm9wZVN0cmlu
Zzo6cmVzb2x2ZVJvcGVUb0F0b21pY1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fbGVuZ3RoID4gbWF4TGVuZ3RoRm9yT25TdGFja1Jlc29sdmUpIHsKKyAgICAgICAg
cmVzb2x2ZVJvcGUoZXhlYyk7CisgICAgICAgIG1fdmFsdWUgPSBBdG9taWNTdHJpbmcobV92YWx1
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAg
ICAgTENoYXIgYnVmZmVyW21heExlbmd0aEZvck9uU3RhY2tSZXNvbHZlXTsKKyAgICAgICAgcmVz
b2x2ZVJvcGVJbnRlcm5hbDgoYnVmZmVyKTsKKyAgICAgICAgbV92YWx1ZSA9IEF0b21pY1N0cmlu
ZyhidWZmZXIsIG1fbGVuZ3RoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBVQ2hhciBidWZmZXJb
bWF4TGVuZ3RoRm9yT25TdGFja1Jlc29sdmVdOworICAgICAgICByZXNvbHZlUm9wZUludGVybmFs
MTYoYnVmZmVyKTsKKyAgICAgICAgbV92YWx1ZSA9IEF0b21pY1N0cmluZyhidWZmZXIsIG1fbGVu
Z3RoKTsKKyAgICB9CisKKyAgICBjbGVhckZpYmVycygpOworCisgICAgLy8gSWYgd2UgcmVzb2x2
ZWQgYSBzdHJpbmcgdGhhdCBkaWRuJ3QgcHJldmlvdXNseSBleGlzdCwgbm90aWZ5IHRoZSBoZWFw
IHRoYXQgd2UndmUgZ3Jvd24uCisgICAgaWYgKG1fdmFsdWUuaW1wbCgpLT5oYXNPbmVSZWYoKSkK
KyAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KG1fdmFsdWUu
aW1wbCgpLT5jb3N0KCkpOworfQorCit2b2lkIEpTUm9wZVN0cmluZzo6Y2xlYXJGaWJlcnMoKSBj
b25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJvcGVMZW5n
dGggJiYgbV9maWJlcnNbaV07ICsraSkKKyAgICAgICAgbV9maWJlcnNbaV0uY2xlYXIoKTsKK30K
KworQXRvbWljU3RyaW5nSW1wbCogSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZVRvRXhpc3RpbmdB
dG9taWNTdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIGlmIChtX2xlbmd0aCA+
IG1heExlbmd0aEZvck9uU3RhY2tSZXNvbHZlKSB7CisgICAgICAgIHJlc29sdmVSb3BlKGV4ZWMp
OworICAgICAgICBpZiAoQXRvbWljU3RyaW5nSW1wbCogZXhpc3RpbmdBdG9taWNTdHJpbmcgPSBB
dG9taWNTdHJpbmc6OmZpbmQobV92YWx1ZS5pbXBsKCkpKSB7CisgICAgICAgICAgICBtX3ZhbHVl
ID0gKmV4aXN0aW5nQXRvbWljU3RyaW5nOworICAgICAgICAgICAgY2xlYXJGaWJlcnMoKTsKKyAg
ICAgICAgICAgIHJldHVybiBleGlzdGluZ0F0b21pY1N0cmluZzsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAgICAg
TENoYXIgYnVmZmVyW21heExlbmd0aEZvck9uU3RhY2tSZXNvbHZlXTsKKyAgICAgICAgcmVzb2x2
ZVJvcGVJbnRlcm5hbDgoYnVmZmVyKTsKKyAgICAgICAgaWYgKEF0b21pY1N0cmluZ0ltcGwqIGV4
aXN0aW5nQXRvbWljU3RyaW5nID0gQXRvbWljU3RyaW5nOjpmaW5kKGJ1ZmZlciwgbV9sZW5ndGgp
KSB7CisgICAgICAgICAgICBtX3ZhbHVlID0gKmV4aXN0aW5nQXRvbWljU3RyaW5nOworICAgICAg
ICAgICAgY2xlYXJGaWJlcnMoKTsKKyAgICAgICAgICAgIHJldHVybiBleGlzdGluZ0F0b21pY1N0
cmluZzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFVDaGFyIGJ1ZmZlclttYXhM
ZW5ndGhGb3JPblN0YWNrUmVzb2x2ZV07CisgICAgICAgIHJlc29sdmVSb3BlSW50ZXJuYWwxNihi
dWZmZXIpOworICAgICAgICBpZiAoQXRvbWljU3RyaW5nSW1wbCogZXhpc3RpbmdBdG9taWNTdHJp
bmcgPSBBdG9taWNTdHJpbmc6OmZpbmQoYnVmZmVyLCBtX2xlbmd0aCkpIHsKKyAgICAgICAgICAg
IG1fdmFsdWUgPSAqZXhpc3RpbmdBdG9taWNTdHJpbmc7CisgICAgICAgICAgICBjbGVhckZpYmVy
cygpOworICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nQXRvbWljU3RyaW5nOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIHZvaWQgSlNSb3BlU3RyaW5nOjpy
ZXNvbHZlUm9wZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzUm9wZSgp
KTsKQEAgLTk5LDIzICsyMDgsOCBAQCB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGUoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAogICAgICAgICAgICAgb3V0T2ZNZW1vcnkoZXhlYyk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoICYmIG1fZmliZXJzW2ldOyArK2kpIHsKLSAgICAg
ICAgICAgIGlmIChtX2ZpYmVyc1tpXS0+aXNSb3BlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlc29sdmVSb3BlU2xvd0Nhc2U4KGJ1ZmZlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBMQ2hh
ciogcG9zaXRpb24gPSBidWZmZXI7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc19t
YXhJbnRlcm5hbFJvcGVMZW5ndGggJiYgbV9maWJlcnNbaV07ICsraSkgewotICAgICAgICAgICAg
U3RyaW5nSW1wbCogc3RyaW5nID0gbV9maWJlcnNbaV0tPm1fdmFsdWUuaW1wbCgpOwotICAgICAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLT5sZW5ndGgoKTsKLSAgICAgICAgICAgIFN0
cmluZ0ltcGw6OmNvcHlDaGFycyhwb3NpdGlvbiwgc3RyaW5nLT5jaGFyYWN0ZXJzOCgpLCBsZW5n
dGgpOwotICAgICAgICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoOwotICAgICAgICAgICAgbV9maWJl
cnNbaV0uY2xlYXIoKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoKGJ1ZmZlciArIG1fbGVu
Z3RoKSA9PSBwb3NpdGlvbik7CisgICAgICAgIHJlc29sdmVSb3BlSW50ZXJuYWw4KGJ1ZmZlcik7
CiAgICAgICAgIEFTU0VSVCghaXNSb3BlKCkpOwotCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTEyOCwyMyArMjIyLDcgQEAgdm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGggJiYgbV9maWJlcnNbaV07ICsr
aSkgewotICAgICAgICBpZiAobV9maWJlcnNbaV0tPmlzUm9wZSgpKQotICAgICAgICAgICAgcmV0
dXJuIHJlc29sdmVSb3BlU2xvd0Nhc2UoYnVmZmVyKTsKLSAgICB9Ci0KLSAgICBVQ2hhciogcG9z
aXRpb24gPSBidWZmZXI7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzX21heEludGVybmFs
Um9wZUxlbmd0aCAmJiBtX2ZpYmVyc1tpXTsgKytpKSB7Ci0gICAgICAgIFN0cmluZ0ltcGwqIHN0
cmluZyA9IG1fZmliZXJzW2ldLT5tX3ZhbHVlLmltcGwoKTsKLSAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gc3RyaW5nLT5sZW5ndGgoKTsKLSAgICAgICAgaWYgKHN0cmluZy0+aXM4Qml0KCkpCi0g
ICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+Y2hhcmFj
dGVyczgoKSwgbGVuZ3RoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgU3RyaW5nSW1wbDo6
Y29weUNoYXJzKHBvc2l0aW9uLCBzdHJpbmctPmNoYXJhY3RlcnMxNigpLCBsZW5ndGgpOwotICAg
ICAgICBwb3NpdGlvbiArPSBsZW5ndGg7Ci0gICAgICAgIG1fZmliZXJzW2ldLmNsZWFyKCk7Ci0g
ICAgfQotICAgIEFTU0VSVCgoYnVmZmVyICsgbV9sZW5ndGgpID09IHBvc2l0aW9uKTsKKyAgICBy
ZXNvbHZlUm9wZUludGVybmFsMTYoYnVmZmVyKTsKICAgICBBU1NFUlQoIWlzUm9wZSgpKTsKIH0K
IApAQCAtMjI0LDggKzMwMiw3IEBAIHZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dD
YXNlKFVDaGFyKiBidWZmZXIpIGNvbnN0CiAKIHZvaWQgSlNSb3BlU3RyaW5nOjpvdXRPZk1lbW9y
eShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
X21heEludGVybmFsUm9wZUxlbmd0aCAmJiBtX2ZpYmVyc1tpXTsgKytpKQotICAgICAgICBtX2Zp
YmVyc1tpXS5jbGVhcigpOworICAgIGNsZWFyRmliZXJzKCk7CiAgICAgQVNTRVJUKGlzUm9wZSgp
KTsKICAgICBBU1NFUlQobV92YWx1ZS5pc051bGwoKSk7CiAgICAgaWYgKGV4ZWMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAppbmRleCA0MjI2Zjc0Li4yNDUyNjhlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKQEAgLTEzOSw2ICsxMzks
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBuZXdTdHJpbmc7CiAgICAg
ICAgIH0KIAorICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRvQXRvbWljU3RyaW5nKEV4ZWNT
dGF0ZSopIGNvbnN0OworICAgICAgICBBdG9taWNTdHJpbmdJbXBsKiB0b0V4aXN0aW5nQXRvbWlj
U3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlKEV4
ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICBjb25zdCBTdHJpbmcmIHRyeUdldFZhbHVlKCkgY29u
c3Q7CiAgICAgICAgIGNvbnN0IFN0cmluZ0ltcGwqIHRyeUdldFZhbHVlSW1wbCgpIGNvbnN0OwpA
QCAtMzI5LDkgKzMzMSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZnJpZW5kIEpTVmFs
dWUganNTdHJpbmdGcm9tQXJndW1lbnRzKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogCiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVzb2x2ZVJvcGUoRXhlY1N0YXRlKikgY29uc3Q7Cisg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVzb2x2ZVJvcGVUb0F0b21pY1N0cmluZyhF
eGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQXRvbWljU3RyaW5n
SW1wbCogcmVzb2x2ZVJvcGVUb0V4aXN0aW5nQXRvbWljU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0
OwogICAgICAgICB2b2lkIHJlc29sdmVSb3BlU2xvd0Nhc2U4KExDaGFyKikgY29uc3Q7CiAgICAg
ICAgIHZvaWQgcmVzb2x2ZVJvcGVTbG93Q2FzZShVQ2hhciopIGNvbnN0OwogICAgICAgICB2b2lk
IG91dE9mTWVtb3J5KEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICB2b2lkIHJlc29sdmVSb3Bl
SW50ZXJuYWw4KExDaGFyKikgY29uc3Q7CisgICAgICAgIHZvaWQgcmVzb2x2ZVJvcGVJbnRlcm5h
bDE2KFVDaGFyKikgY29uc3Q7CisgICAgICAgIHZvaWQgY2xlYXJGaWJlcnMoKSBjb25zdDsKICAg
ICAgICAgICAgIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1N0cmluZyogZ2V0SW5kZXhT
bG93Q2FzZShFeGVjU3RhdGUqLCB1bnNpZ25lZCk7CiAKQEAgLTM4MCw2ICszODcsMjggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCp2bSwgcy5pbXBs
KCkpOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgQXRvbWljU3RyaW5nJiBKU1N0
cmluZzo6dG9BdG9taWNTdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKGlzUm9wZSgpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgSlNSb3BlU3Ry
aW5nKj4odGhpcyktPnJlc29sdmVSb3BlVG9BdG9taWNTdHJpbmcoZXhlYyk7CisgICAgICAgIGVs
c2UgaWYgKCFtX3ZhbHVlLmltcGwoKS0+aXNBdG9taWMoKSkKKyAgICAgICAgICAgIG1fdmFsdWUg
PSBBdG9taWNTdHJpbmcobV92YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBBdG9taWNTdHJpbmcmPihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEF0
b21pY1N0cmluZ0ltcGwqIEpTU3RyaW5nOjp0b0V4aXN0aW5nQXRvbWljU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1JvcGUoKSkKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1JvcGVTdHJpbmcqPih0aGlzKS0+cmVzb2x2ZVJv
cGVUb0V4aXN0aW5nQXRvbWljU3RyaW5nKGV4ZWMpOworICAgICAgICBpZiAobV92YWx1ZS5pbXBs
KCktPmlzQXRvbWljKCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbWljU3Ry
aW5nSW1wbCo+KG1fdmFsdWUuaW1wbCgpKTsKKyAgICAgICAgaWYgKEF0b21pY1N0cmluZ0ltcGwq
IGV4aXN0aW5nQXRvbWljU3RyaW5nID0gQXRvbWljU3RyaW5nOjpmaW5kKG1fdmFsdWUuaW1wbCgp
KSkgeworICAgICAgICAgICAgbV92YWx1ZSA9ICpleGlzdGluZ0F0b21pY1N0cmluZzsKKyAgICAg
ICAgICAgIHJldHVybiBleGlzdGluZ0F0b21pY1N0cmluZzsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKICAgICBpbmxpbmUgY29uc3QgU3RyaW5nJiBKU1N0cmlu
Zzo6dmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzUm9w
ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwppbmRleCA3MjBhYzYwLi45ZjA0MWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE0LTA1
LTA0ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6
ZSBKU1JvcGVTdHJpbmcgZm9yIHJlc29sdmluZyBkaXJlY3RseSB0byBBdG9taWNTdHJpbmcuCisg
ICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzI1NDg+CisKKyAgICAgICAgQWRkIEF0b21p
Y1N0cmluZzo6ZmluZChbTFVdQ2hhciosIHVuc2lnbmVkIGxlbmd0aCkgaGVscGVycyBmb3IgZmlu
ZGluZworICAgICAgICBhbiBleGlzdGluZyBBdG9taWNTdHJpbmcgd2l0aG91dCBhIFN0cmluZ0lt
cGwgb24gaGFuZC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21p
Y1N0cmluZy5jcHA6CisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6ZmluZCk6CisKIDIwMTQt
MDUtMDEgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4
IGhhbmRsaW5nIG9mIGF0dHJpYnV0ZXMgcHJpb3IgdG8gY29tcGlsaW5nIHNoYWRlcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwIGIvU291cmNlL1dURi93
dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwCmluZGV4IDlkNWI2MjIuLjliNDc4MzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAKQEAgLTUyNSw2ICs1MjUsMzAgQEAgQXRvbWljU3Ry
aW5nIEF0b21pY1N0cmluZzo6bnVtYmVyKGRvdWJsZSBudW1iZXIpCiAgICAgcmV0dXJuIFN0cmlu
ZyhudW1iZXJUb0ZpeGVkUHJlY2lzaW9uU3RyaW5nKG51bWJlciwgNiwgYnVmZmVyLCB0cnVlKSk7
CiB9CiAKK0F0b21pY1N0cmluZ0ltcGwqIEF0b21pY1N0cmluZzo6ZmluZChMQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIEF0b21pY1N0cmluZ1RhYmxlTG9ja2VyIGxv
Y2tlcjsKKyAgICBhdXRvJiB0YWJsZSA9IHN0cmluZ1RhYmxlKCk7CisKKyAgICBMQ2hhckJ1ZmZl
ciBidWZmZXIgPSB7IGNoYXJhY3RlcnMsIGxlbmd0aCB9OworICAgIGF1dG8gaXRlcmF0b3IgPSB0
YWJsZS5maW5kPExDaGFyQnVmZmVyVHJhbnNsYXRvcj4oYnVmZmVyKTsKKyAgICBpZiAoaXRlcmF0
b3IgIT0gdGFibGUuZW5kKCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBdG9taWNTdHJp
bmdJbXBsKj4oKml0ZXJhdG9yKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQXRvbWljU3Ry
aW5nSW1wbCogQXRvbWljU3RyaW5nOjpmaW5kKFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpCit7CisgICAgQXRvbWljU3RyaW5nVGFibGVMb2NrZXIgbG9ja2VyOworICAgIGF1dG8m
IHRhYmxlID0gc3RyaW5nVGFibGUoKTsKKworICAgIFVDaGFyQnVmZmVyIGJ1ZmZlciA9IHsgY2hh
cmFjdGVycywgbGVuZ3RoIH07CisgICAgYXV0byBpdGVyYXRvciA9IHRhYmxlLmZpbmQ8VUNoYXJC
dWZmZXJUcmFuc2xhdG9yPihidWZmZXIpOworICAgIGlmIChpdGVyYXRvciAhPSB0YWJsZS5lbmQo
KSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEF0b21pY1N0cmluZ0ltcGwqPigqaXRlcmF0
b3IpOworICAgIHJldHVybiBudWxscHRyOworfQorCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogYm9v
bCBBdG9taWNTdHJpbmc6OmlzSW5BdG9taWNTdHJpbmdUYWJsZShTdHJpbmdJbXBsKiBzdHJpbmcp
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5oIGIvU291
cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuaAppbmRleCAyZDcwMzZlLi4xNDY3MDFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmgKQEAgLTg3LDYgKzg3LDggQEAgcHVibGljOgog
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3N0cmlu
Zy5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CiAKICAgICBXVEZfRVhQT1JUX1NUUklOR19B
UEkgc3RhdGljIEF0b21pY1N0cmluZ0ltcGwqIGZpbmRTdHJpbmdXaXRoSGFzaChjb25zdCBTdHJp
bmdJbXBsJik7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBBdG9taWNTdHJpbmdJ
bXBsKiBmaW5kKExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBXVEZfRVhQT1JUX1NUUklO
R19BUEkgc3RhdGljIEF0b21pY1N0cmluZ0ltcGwqIGZpbmQoVUNoYXIqLCB1bnNpZ25lZCBsZW5n
dGgpOwogICAgIHN0YXRpYyBBdG9taWNTdHJpbmdJbXBsKiBmaW5kKFN0cmluZ0ltcGwqIHN0cmlu
ZykKICAgICB7CiAgICAgICAgIGlmICghc3RyaW5nIHx8IHN0cmluZy0+aXNBdG9taWMoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCBkZThhYTRiLi45YmNhMzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTQtMDUtMDQgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgorCisgICAgICAg
IE9wdGltaXplIEpTUm9wZVN0cmluZyBmb3IgcmVzb2x2aW5nIGRpcmVjdGx5IHRvIEF0b21pY1N0
cmluZy4KKyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzMjU0OD4KKworICAgICAgICBB
ZGQgdHdvIGJpbmRpbmdzIGdlbmVyYXRvciBhdHRyaWJ1dGVzIGZvciBwYXJhbWV0ZXJzIHRvIGlu
Zmx1ZW5jZQorICAgICAgICB0aGUgd2F5IHRoYXQgSlMgcm9wZSBzdHJpbmdzIGFyZSByZXNvbHZl
ZDoKKworICAgICAgICAtIEF0b21pY1N0cmluZworCisgICAgICAgICAgICBHZW5lcmF0ZXMgY29k
ZSB0aGF0IGF2b2lkcyBhbGxvY2F0aW5nIGEgbmV3IFN0cmluZ0ltcGwgaWYgdGhlcmUKKyAgICAg
ICAgICAgIGlzIGFscmVhZHkgYW4gZXhpc3RpbmcgQXRvbWljU3RyaW5nIHdlIGNhbiByZXVzZS4K
KworICAgICAgICAtIFJlcXVpcmVzRXhpc3RpbmdBdG9taWNTdHJpbmcKKworICAgICAgICAgICAg
R2VuZXJhdGVzIGNvZGUgdGhhdCBmYWlscyBpbW1lZGlhdGVseSBpZiB0aGUgcHJvdmlkZWQgc3Ry
aW5nCisgICAgICAgICAgICBpcyBub3QgZm91bmQgaW4gdGhlIEF0b21pY1N0cmluZyB0YWJsZS4g
VGhpcyBpcyBub3cgdXNlZCBmb3IKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCksIGFuZCB3b3JrcyBiZWNhdXNlIGFueSBleGlzdGluZyBJRAorICAgICAgICAgICAgaXMgZ3Vh
cmFudGVlZCB0byBiZSBpbiB0aGUgdGFibGUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bToKKyAgICAgICAgKEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrKToKKyAgICAgICAgKEpTVmFsdWVU
b05hdGl2ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dDoK
KyAgICAgICAgKiBkb20vRG9jdW1lbnQuaWRsOgorCiAyMDE0LTA1LTA0ICBCZW5qYW1pbiBQb3Vs
YWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBDbGVhciB0aGUgU2VsZWN0b3Ig
UXVlcnkgY2FjaGVzIG9uIG1lbW9yeSBwcmVzc3VyZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCA1YzVkNDRkLi40NGIwZjM0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQpAQCAtMzI4Myw3ICszMjgzLDE0IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVj
awogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICIgLiBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkcGFyYW1l
dGVyKSAuICIgJG5hbWUoIiAuIEpTVmFsdWVUb05hdGl2ZSgkcGFyYW1ldGVyLCAkb3B0aW9uYWwg
JiYgJGRlZmF1bHRBdHRyaWJ1dGUgJiYgJGRlZmF1bHRBdHRyaWJ1dGUgZXEgIk51bGxTdHJpbmci
ID8gImFyZ3VtZW50T3JOdWxsKGV4ZWMsICRhcmdzSW5kZXgpIiA6ICJleGVjLT5hcmd1bWVudCgk
YXJnc0luZGV4KSIpIC4gIik7XG4iKTsKKyAgICAgICAgICAgIGlmICgkcGFyYW1ldGVyLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiUmVxdWlyZXNFeGlzdGluZ0F0b21pY1N0cmluZyJ9KSB7CisgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEF0b21pY1N0cmluZ0ltcGwqIGV4
aXN0aW5nXyRuYW1lID0gZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNFbXB0eSgpID8gbnVs
bHB0ciA6IGV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpLnRvU3RyaW5nKGV4ZWMpLT50b0V4aXN0
aW5nQXRvbWljU3RyaW5nKGV4ZWMpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIGlmICghZXhpc3RpbmdfJG5hbWUpXG4iKTsKKyAgICAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxs
KCkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgJG5hbWUoZXhpc3RpbmdfJG5hbWUpO1xuIik7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAiIC4gR2V0
TmF0aXZlVHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlcikgLiAiICRuYW1lKCIgLiBKU1ZhbHVl
VG9OYXRpdmUoJHBhcmFtZXRlciwgJG9wdGlvbmFsICYmICRkZWZhdWx0QXR0cmlidXRlICYmICRk
ZWZhdWx0QXR0cmlidXRlIGVxICJOdWxsU3RyaW5nIiA/ICJhcmd1bWVudE9yTnVsbChleGVjLCAk
YXJnc0luZGV4KSIgOiAiZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkiKSAuICIpO1xuIik7Cisg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgICMgSWYgYSBwYXJhbWV0ZXIgaXMgImFuIGluZGV4
IiBhbmQgaXQncyBuZWdhdGl2ZSBpdCBzaG91bGQgdGhyb3cgYW4gSU5ERVhfU0laRV9FUlIgZXhj
ZXB0aW9uLgogICAgICAgICAgICAgIyBCdXQgdGhpcyBuZWVkcyB0byBiZSBkb25lIGluIHRoZSBi
aW5kaW5ncywgYmVjYXVzZSB0aGUgdHlwZSBpcyB1bnNpZ25lZCBhbmQgdGhlIGZhY3QgdGhhdCBp
dApAQCAtMzc2MSw2ICszNzY4LDkgQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogICAgICAgICBpZiAo
KCRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJUcmVhdE51bGxBcyJ9IGFuZCAkc2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHJlYXROdWxsQXMifSBlcSAiTnVsbFN0cmlu
ZyIpIG9yICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZWZsZWN0In0pIHsKICAg
ICAgICAgICAgIHJldHVybiAidmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgJHZhbHVl
KSIKICAgICAgICAgfQorICAgICAgICBpZiAoJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkF0b21pY1N0cmluZyJ9KSB7CisgICAgICAgICAgICByZXR1cm4gIiR2YWx1ZS5pc0VtcHR5
KCkgPyBBdG9taWNTdHJpbmcoKSA6ICR2YWx1ZS50b1N0cmluZyhleGVjKS0+dG9BdG9taWNTdHJp
bmcoZXhlYykiOworICAgICAgICB9CiAgICAgICAgICMgRklYTUU6IEFkZCB0aGUgY2FzZSBmb3Ig
J2lmICgkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHJlYXRVbmRlZmluZWRBcyJ9
IGFuZCAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHJlYXRVbmRlZmluZWRBcyJ9
IGVxICJOdWxsU3RyaW5nIikpJy4KICAgICAgICAgcmV0dXJuICIkdmFsdWUuaXNFbXB0eSgpID8g
U3RyaW5nKCkgOiAkdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpIjsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMu
dHh0IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dApp
bmRleCBkMTNiMzBlLi5lYTBlZjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKQEAgLTE5LDYgKzE5LDcgQEAKICMKIAogQWN0aXZl
RE9NT2JqZWN0CitBdG9taWNTdHJpbmcKIENQUFB1cmVJbnRlcmZhY2UKIENhY2hlZEF0dHJpYnV0
ZQogQ2FsbGJhY2tOZWVkc09wZXJhdG9yRXF1YWwKQEAgLTEwMSw2ICsxMDIsNyBAQCBSZWZsZWN0
PSoKIFJlcGxhY2VhYmxlCiBSZXBsYWNlYWJsZUNvbnN0cnVjdG9yCiBSZXBvcnRFeHRyYU1lbW9y
eUNvc3QKK1JlcXVpcmVzRXhpc3RpbmdBdG9taWNTdHJpbmcKIFJldHVybk5ld09iamVjdAogU2V0
dGVyUmFpc2VzRXhjZXB0aW9uCiBTa2lwVlRhYmxlVmFsaWRhdGlvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5pZGwKaW5kZXggOGRkNTFmZi4uNmRmZTUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCkBA
IC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmVhdE51bGxBcz1OdWxsU3RyaW5n
LERlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBET01TdHJpbmcgcXVhbGlmaWVkTmFtZSk7CiAg
ICAgW09iakNMZWdhY3lVbm5hbWVkUGFyYW1ldGVyc10gTm9kZUxpc3QgZ2V0RWxlbWVudHNCeVRh
Z05hbWVOUyhbVHJlYXROdWxsQXM9TnVsbFN0cmluZyxEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9u
YWwgRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgRE9NU3Ry
aW5nIGxvY2FsTmFtZSk7Ci0gICAgRWxlbWVudCBnZXRFbGVtZW50QnlJZChbRGVmYXVsdD1VbmRl
ZmluZWQsT2JqQ0V4cGxpY2l0QXRvbWljU3RyaW5nXSBvcHRpb25hbCBET01TdHJpbmcgZWxlbWVu
dElkKTsKKyAgICBFbGVtZW50IGdldEVsZW1lbnRCeUlkKFtEZWZhdWx0PVVuZGVmaW5lZCxPYmpD
RXhwbGljaXRBdG9taWNTdHJpbmcsUmVxdWlyZXNFeGlzdGluZ0F0b21pY1N0cmluZ10gb3B0aW9u
YWwgRE9NU3RyaW5nIGVsZW1lbnRJZCk7CiAKICAgICAvLyBET00gTGV2ZWwgMyBDb3JlCiAKQEAg
LTE1Niw3ICsxNTYsNyBAQAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBIVE1MQ29sbGVjdGlvbiBh
bmNob3JzOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbGFzdE1vZGlmaWVkOwog
Ci0gICAgTm9kZUxpc3QgZ2V0RWxlbWVudHNCeU5hbWUoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRp
b25hbCBET01TdHJpbmcgZWxlbWVudE5hbWUpOworICAgIE5vZGVMaXN0IGdldEVsZW1lbnRzQnlO
YW1lKFtEZWZhdWx0PVVuZGVmaW5lZCxBdG9taWNTdHJpbmddIG9wdGlvbmFsIERPTVN0cmluZyBl
bGVtZW50TmFtZSk7CiAKICNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpICYmIExBTkdV
QUdFX0pBVkFTQ1JJUFQKICAgICAgICAgICAgICBbQ3VzdG9tXSBhdHRyaWJ1dGUgTG9jYXRpb24g
bG9jYXRpb247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230793</attachid>
            <date>2014-05-04 16:05:19 -0700</date>
            <delta_ts>2014-05-04 21:50:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132548-2.diff</filename>
            <type>text/plain</type>
            <size>18971</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDA0YTZjMzUuLjc1OGZhMWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE0LTA1LTA0ICBBbmRyZWFzIEtsaW5n
ICA8YWtsaW5nQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBKU1JvcGVTdHJpbmcgZm9y
IHJlc29sdmluZyBkaXJlY3RseSB0byBBdG9taWNTdHJpbmcuCisgICAgICAgIDxodHRwczovL3dl
YmtpdC5vcmcvYi8xMzI1NDg+CisKKyAgICAgICAgSWYgd2Uga25vdyB0aGF0IHRoZSBKU1JvcGVT
dHJpbmcgd2UgYXJlIHJlc29sdmluZyBpcyBnb2luZyB0byBiZSB1c2VkCisgICAgICAgIGFzIGFu
IEF0b21pY1N0cmluZywgd2UgY2FuIHRyeSB0byBhdm9pZCBjcmVhdGluZyBhIG5ldyBzdHJpbmcu
CisKKyAgICAgICAgV2UgZG8gdGhpcyBieSBmaXJzdCByZXNvbHZpbmcgdGhlIHJvcGUgaW50byBh
IHN0YWNrIGJ1ZmZlciwgYW5kIHVzaW5nCisgICAgICAgIHRoYXQgYnVmZmVyIGFzIGEga2V5IGlu
dG8gdGhlIEF0b21pY1N0cmluZyB0YWJsZS4gSWYgdGhlcmUgaXMgYWxyZWFkeQorICAgICAgICBh
biBBdG9taWNTdHJpbmcgd2l0aCB0aGUgc2FtZSBjaGFyYWN0ZXJzLCB3ZSByZXVzZSB0aGF0IGlu
c3RlYWQgb2YKKyAgICAgICAgY29uc3RydWN0aW5nIGEgbmV3IFN0cmluZ0ltcGwuCisKKyAgICAg
ICAgSlNTdHJpbmcgZ2FpbnMgdGhlc2UgdHdvIHB1YmxpYyBmdW5jdGlvbnM6CisKKyAgICAgICAg
LSBBdG9taWNTdHJpbmcgdG9BdG9taWNTdHJpbmcoKQorCisgICAgICAgICAgICBSZXR1cm5zIGFu
IEF0b21pY1N0cmluZywgdHJpZXMgdG8gYXZvaWQgYWxsb2NhdGluZyBhIG5ldyBzdHJpbmcKKyAg
ICAgICAgICAgIGlmIHBvc3NpYmxlLgorCisgICAgICAgIC0gQXRvbWljU3RyaW5nSW1wbCogdG9F
eGlzdGluZ0F0b21pY1N0cmluZygpCisKKyAgICAgICAgICAgIFJldHVybnMgYSBub24tbnVsbCBB
dG9taWNTdHJpbmdJbXBsKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMgaW4gdGhlCisgICAgICAgICAg
ICBBdG9taWNTdHJpbmcgdGFibGUuIElmIG5vbmUgaXMgZm91bmQsIHRoZSByb3BlIGlzIGxlZnQg
dW5yZXNvbHZlZC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6
OnJlc29sdmVSb3BlSW50ZXJuYWw4KToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpyZXNv
bHZlUm9wZUludGVybmFsMTYpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OnJlc29sdmVS
b3BlVG9BdG9taWNTdHJpbmcpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OmNsZWFyRmli
ZXJzKToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZVRvRXhpc3RpbmdB
dG9taWNTdHJpbmcpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlKToK
KyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpvdXRPZk1lbW9yeSk6CisgICAgICAgICogcnVu
dGltZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dG9BdG9taWNTdHJpbmcp
OgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dG9FeGlzdGluZ0F0b21pY1N0cmluZyk6CisKIDIw
MTQtMDUtMDIgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAg
ImFybTY0IGZ1bmN0aW9uIG5vdCA0LWJ5dGUgYWxpZ25lZCIgd2FybmluZ3Mgd2hlbiBidWlsZGlu
ZyBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAppbmRleCAw
MGYwNWY1Li5iOTExYTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuY3BwCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgSlNTdHJpbmc6OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQogdm9pZCBKU1N0cmluZzo6ZHVtcFRvU3RyZWFtKGNvbnN0IEpTQ2VsbCogY2VsbCwgUHJp
bnRTdHJlYW0mIG91dCkKIHsKICAgICBjb25zdCBKU1N0cmluZyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxjb25zdCBKU1N0cmluZyo+KGNlbGwpOwotICAgIG91dC5wcmludGYoIjwlcCwgJXMsIFsldV0s
ICIsIHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPmNsYXNzTmFtZSgpLCB0aGlzT2JqZWN0LT5sZW5n
dGgoKSk7IAorICAgIG91dC5wcmludGYoIjwlcCwgJXMsIFsldV0sICIsIHRoaXNPYmplY3QsIHRo
aXNPYmplY3QtPmNsYXNzTmFtZSgpLCB0aGlzT2JqZWN0LT5sZW5ndGgoKSk7CiAgICAgaWYgKHRo
aXNPYmplY3QtPmlzUm9wZSgpKQogICAgICAgICBvdXQucHJpbnRmKCJbcm9wZV0iKTsKICAgICBl
bHNlIHsKQEAgLTg2LDYgKzg2LDExMyBAQCB2b2lkIEpTUm9wZVN0cmluZzo6dmlzaXRGaWJlcnMo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2ZpYmVyc1tp
XSk7CiB9CiAKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhMZW5ndGhGb3JPblN0YWNrUmVzb2x2
ZSA9IDIwNDg7CisKK3ZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZUludGVybmFsOChMQ2hh
ciogYnVmZmVyKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRl
cm5hbFJvcGVMZW5ndGggJiYgbV9maWJlcnNbaV07ICsraSkgeworICAgICAgICBpZiAobV9maWJl
cnNbaV0tPmlzUm9wZSgpKSB7CisgICAgICAgICAgICByZXNvbHZlUm9wZVNsb3dDYXNlOChidWZm
ZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgTENoYXIq
IHBvc2l0aW9uID0gYnVmZmVyOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRl
cm5hbFJvcGVMZW5ndGggJiYgbV9maWJlcnNbaV07ICsraSkgeworICAgICAgICBjb25zdCBTdHJp
bmdJbXBsJiBmaWJlclN0cmluZyA9ICptX2ZpYmVyc1tpXS0+bV92YWx1ZS5pbXBsKCk7CisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGZpYmVyU3RyaW5nLmxlbmd0aCgpOworICAgICAgICBTdHJp
bmdJbXBsOjpjb3B5Q2hhcnMocG9zaXRpb24sIGZpYmVyU3RyaW5nLmNoYXJhY3RlcnM4KCksIGxl
bmd0aCk7CisgICAgICAgIHBvc2l0aW9uICs9IGxlbmd0aDsKKyAgICB9CisgICAgQVNTRVJUKChi
dWZmZXIgKyBtX2xlbmd0aCkgPT0gcG9zaXRpb24pOworfQorCit2b2lkIEpTUm9wZVN0cmluZzo6
cmVzb2x2ZVJvcGVJbnRlcm5hbDE2KFVDaGFyKiBidWZmZXIpIGNvbnN0Cit7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzX21heEludGVybmFsUm9wZUxlbmd0aCAmJiBtX2ZpYmVyc1tpXTsg
KytpKSB7CisgICAgICAgIGlmIChtX2ZpYmVyc1tpXS0+aXNSb3BlKCkpIHsKKyAgICAgICAgICAg
IHJlc29sdmVSb3BlU2xvd0Nhc2UoYnVmZmVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIFVDaGFyKiBwb3NpdGlvbiA9IGJ1ZmZlcjsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoICYmIG1fZmliZXJzW2ldOyAr
K2kpIHsKKyAgICAgICAgY29uc3QgU3RyaW5nSW1wbCYgZmliZXJTdHJpbmcgPSAqbV9maWJlcnNb
aV0tPm1fdmFsdWUuaW1wbCgpOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBmaWJlclN0cmlu
Zy5sZW5ndGgoKTsKKyAgICAgICAgaWYgKGZpYmVyU3RyaW5nLmlzOEJpdCgpKQorICAgICAgICAg
ICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKHBvc2l0aW9uLCBmaWJlclN0cmluZy5jaGFyYWN0ZXJz
OCgpLCBsZW5ndGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5
Q2hhcnMocG9zaXRpb24sIGZpYmVyU3RyaW5nLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgpOworICAg
ICAgICBwb3NpdGlvbiArPSBsZW5ndGg7CisgICAgfQorICAgIEFTU0VSVCgoYnVmZmVyICsgbV9s
ZW5ndGgpID09IHBvc2l0aW9uKTsKK30KKwordm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3Bl
VG9BdG9taWNTdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIGlmIChtX2xlbmd0
aCA+IG1heExlbmd0aEZvck9uU3RhY2tSZXNvbHZlKSB7CisgICAgICAgIHJlc29sdmVSb3BlKGV4
ZWMpOworICAgICAgICBtX3ZhbHVlID0gQXRvbWljU3RyaW5nKG1fdmFsdWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGlzOEJpdCgpKSB7CisgICAgICAgIExDaGFyIGJ1ZmZl
clttYXhMZW5ndGhGb3JPblN0YWNrUmVzb2x2ZV07CisgICAgICAgIHJlc29sdmVSb3BlSW50ZXJu
YWw4KGJ1ZmZlcik7CisgICAgICAgIG1fdmFsdWUgPSBBdG9taWNTdHJpbmcoYnVmZmVyLCBtX2xl
bmd0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVUNoYXIgYnVmZmVyW21heExlbmd0aEZvck9u
U3RhY2tSZXNvbHZlXTsKKyAgICAgICAgcmVzb2x2ZVJvcGVJbnRlcm5hbDE2KGJ1ZmZlcik7Cisg
ICAgICAgIG1fdmFsdWUgPSBBdG9taWNTdHJpbmcoYnVmZmVyLCBtX2xlbmd0aCk7CisgICAgfQor
CisgICAgY2xlYXJGaWJlcnMoKTsKKworICAgIC8vIElmIHdlIHJlc29sdmVkIGEgc3RyaW5nIHRo
YXQgZGlkbid0IHByZXZpb3VzbHkgZXhpc3QsIG5vdGlmeSB0aGUgaGVhcCB0aGF0IHdlJ3ZlIGdy
b3duLgorICAgIGlmIChtX3ZhbHVlLmltcGwoKS0+aGFzT25lUmVmKCkpCisgICAgICAgIEhlYXA6
OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChtX3ZhbHVlLmltcGwoKS0+Y29zdCgp
KTsKK30KKwordm9pZCBKU1JvcGVTdHJpbmc6OmNsZWFyRmliZXJzKCkgY29uc3QKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoICYmIG1fZmliZXJz
W2ldOyArK2kpCisgICAgICAgIG1fZmliZXJzW2ldLmNsZWFyKCk7Cit9CisKK0F0b21pY1N0cmlu
Z0ltcGwqIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVUb0V4aXN0aW5nQXRvbWljU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICBpZiAobV9sZW5ndGggPiBtYXhMZW5ndGhGb3JP
blN0YWNrUmVzb2x2ZSkgeworICAgICAgICByZXNvbHZlUm9wZShleGVjKTsKKyAgICAgICAgaWYg
KEF0b21pY1N0cmluZ0ltcGwqIGV4aXN0aW5nQXRvbWljU3RyaW5nID0gQXRvbWljU3RyaW5nOjpm
aW5kKG1fdmFsdWUuaW1wbCgpKSkgeworICAgICAgICAgICAgbV92YWx1ZSA9ICpleGlzdGluZ0F0
b21pY1N0cmluZzsKKyAgICAgICAgICAgIGNsZWFyRmliZXJzKCk7CisgICAgICAgICAgICByZXR1
cm4gZXhpc3RpbmdBdG9taWNTdHJpbmc7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgaWYgKGlzOEJpdCgpKSB7CisgICAgICAgIExDaGFyIGJ1ZmZlcltt
YXhMZW5ndGhGb3JPblN0YWNrUmVzb2x2ZV07CisgICAgICAgIHJlc29sdmVSb3BlSW50ZXJuYWw4
KGJ1ZmZlcik7CisgICAgICAgIGlmIChBdG9taWNTdHJpbmdJbXBsKiBleGlzdGluZ0F0b21pY1N0
cmluZyA9IEF0b21pY1N0cmluZzo6ZmluZChidWZmZXIsIG1fbGVuZ3RoKSkgeworICAgICAgICAg
ICAgbV92YWx1ZSA9ICpleGlzdGluZ0F0b21pY1N0cmluZzsKKyAgICAgICAgICAgIGNsZWFyRmli
ZXJzKCk7CisgICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdBdG9taWNTdHJpbmc7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBVQ2hhciBidWZmZXJbbWF4TGVuZ3RoRm9yT25TdGFj
a1Jlc29sdmVdOworICAgICAgICByZXNvbHZlUm9wZUludGVybmFsMTYoYnVmZmVyKTsKKyAgICAg
ICAgaWYgKEF0b21pY1N0cmluZ0ltcGwqIGV4aXN0aW5nQXRvbWljU3RyaW5nID0gQXRvbWljU3Ry
aW5nOjpmaW5kKGJ1ZmZlciwgbV9sZW5ndGgpKSB7CisgICAgICAgICAgICBtX3ZhbHVlID0gKmV4
aXN0aW5nQXRvbWljU3RyaW5nOworICAgICAgICAgICAgY2xlYXJGaWJlcnMoKTsKKyAgICAgICAg
ICAgIHJldHVybiBleGlzdGluZ0F0b21pY1N0cmluZzsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBudWxscHRyOworfQorCiB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGUoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIEFTU0VSVChpc1JvcGUoKSk7CkBAIC05OSwyMyAr
MjA2LDkgQEAgdm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKICAgICAgICAgICAgIG91dE9mTWVtb3J5KGV4ZWMpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzX21heEludGVy
bmFsUm9wZUxlbmd0aCAmJiBtX2ZpYmVyc1tpXTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobV9m
aWJlcnNbaV0tPmlzUm9wZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlUm9wZVNs
b3dDYXNlOChidWZmZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgTENoYXIqIHBvc2l0aW9uID0g
YnVmZmVyOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxSb3Bl
TGVuZ3RoICYmIG1fZmliZXJzW2ldOyArK2kpIHsKLSAgICAgICAgICAgIFN0cmluZ0ltcGwqIHN0
cmluZyA9IG1fZmliZXJzW2ldLT5tX3ZhbHVlLmltcGwoKTsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0cmluZy0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5
Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+Y2hhcmFjdGVyczgoKSwgbGVuZ3RoKTsKLSAgICAgICAg
ICAgIHBvc2l0aW9uICs9IGxlbmd0aDsKLSAgICAgICAgICAgIG1fZmliZXJzW2ldLmNsZWFyKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKChidWZmZXIgKyBtX2xlbmd0aCkgPT0gcG9zaXRp
b24pOworICAgICAgICByZXNvbHZlUm9wZUludGVybmFsOChidWZmZXIpOworICAgICAgICBjbGVh
ckZpYmVycygpOwogICAgICAgICBBU1NFUlQoIWlzUm9wZSgpKTsKLQogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0xMjgsMjMgKzIyMSw4IEBAIHZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZl
Um9wZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoICYmIG1fZmli
ZXJzW2ldOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZmliZXJzW2ldLT5pc1JvcGUoKSkKLSAgICAg
ICAgICAgIHJldHVybiByZXNvbHZlUm9wZVNsb3dDYXNlKGJ1ZmZlcik7Ci0gICAgfQotCi0gICAg
VUNoYXIqIHBvc2l0aW9uID0gYnVmZmVyOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc19t
YXhJbnRlcm5hbFJvcGVMZW5ndGggJiYgbV9maWJlcnNbaV07ICsraSkgewotICAgICAgICBTdHJp
bmdJbXBsKiBzdHJpbmcgPSBtX2ZpYmVyc1tpXS0+bV92YWx1ZS5pbXBsKCk7Ci0gICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHN0cmluZy0+bGVuZ3RoKCk7Ci0gICAgICAgIGlmIChzdHJpbmctPmlz
OEJpdCgpKQotICAgICAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKHBvc2l0aW9uLCBzdHJp
bmctPmNoYXJhY3RlcnM4KCksIGxlbmd0aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFN0
cmluZ0ltcGw6OmNvcHlDaGFycyhwb3NpdGlvbiwgc3RyaW5nLT5jaGFyYWN0ZXJzMTYoKSwgbGVu
Z3RoKTsKLSAgICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoOwotICAgICAgICBtX2ZpYmVyc1tpXS5j
bGVhcigpOwotICAgIH0KLSAgICBBU1NFUlQoKGJ1ZmZlciArIG1fbGVuZ3RoKSA9PSBwb3NpdGlv
bik7CisgICAgcmVzb2x2ZVJvcGVJbnRlcm5hbDE2KGJ1ZmZlcik7CisgICAgY2xlYXJGaWJlcnMo
KTsKICAgICBBU1NFUlQoIWlzUm9wZSgpKTsKIH0KIApAQCAtMjI0LDggKzMwMiw3IEBAIHZvaWQg
SlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNlKFVDaGFyKiBidWZmZXIpIGNvbnN0CiAK
IHZvaWQgSlNSb3BlU3RyaW5nOjpvdXRPZk1lbW9yeShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzX21heEludGVybmFsUm9wZUxlbmd0aCAmJiBt
X2ZpYmVyc1tpXTsgKytpKQotICAgICAgICBtX2ZpYmVyc1tpXS5jbGVhcigpOworICAgIGNsZWFy
RmliZXJzKCk7CiAgICAgQVNTRVJUKGlzUm9wZSgpKTsKICAgICBBU1NFUlQobV92YWx1ZS5pc051
bGwoKSk7CiAgICAgaWYgKGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuaAppbmRleCA0MjI2Zjc0Li5mYzUxNzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmgKQEAgLTEzOSw2ICsxMzksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIHJldHVybiBuZXdTdHJpbmc7CiAgICAgICAgIH0KIAorICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHRvQXRvbWljU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBBdG9t
aWNTdHJpbmdJbXBsKiB0b0V4aXN0aW5nQXRvbWljU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0Owog
ICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICBj
b25zdCBTdHJpbmcmIHRyeUdldFZhbHVlKCkgY29uc3Q7CiAgICAgICAgIGNvbnN0IFN0cmluZ0lt
cGwqIHRyeUdldFZhbHVlSW1wbCgpIGNvbnN0OwpAQCAtMzI5LDkgKzMzMSwxNCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgZnJpZW5kIEpTVmFsdWUganNTdHJpbmdGcm9tQXJndW1lbnRzKEV4
ZWNTdGF0ZSosIEpTVmFsdWUpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVz
b2x2ZVJvcGUoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgcmVzb2x2ZVJvcGVUb0F0b21pY1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgQXRvbWljU3RyaW5nSW1wbCogcmVzb2x2ZVJvcGVUb0V4aXN0aW5n
QXRvbWljU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICB2b2lkIHJlc29sdmVSb3Bl
U2xvd0Nhc2U4KExDaGFyKikgY29uc3Q7CiAgICAgICAgIHZvaWQgcmVzb2x2ZVJvcGVTbG93Q2Fz
ZShVQ2hhciopIGNvbnN0OwogICAgICAgICB2b2lkIG91dE9mTWVtb3J5KEV4ZWNTdGF0ZSopIGNv
bnN0OworICAgICAgICB2b2lkIHJlc29sdmVSb3BlSW50ZXJuYWw4KExDaGFyKikgY29uc3Q7Cisg
ICAgICAgIHZvaWQgcmVzb2x2ZVJvcGVJbnRlcm5hbDE2KFVDaGFyKikgY29uc3Q7CisgICAgICAg
IHZvaWQgY2xlYXJGaWJlcnMoKSBjb25zdDsKICAgICAgICAgICAgIAogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBKU1N0cmluZyogZ2V0SW5kZXhTbG93Q2FzZShFeGVjU3RhdGUqLCB1bnNpZ25l
ZCk7CiAKQEAgLTM4MCw2ICszODcsMjggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVy
biBKU1N0cmluZzo6Y3JlYXRlKCp2bSwgcy5pbXBsKCkpOwogICAgIH0KIAorICAgIEFMV0FZU19J
TkxJTkUgY29uc3QgQXRvbWljU3RyaW5nJiBKU1N0cmluZzo6dG9BdG9taWNTdHJpbmcoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzUm9wZSgpKQorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8Y29uc3QgSlNSb3BlU3RyaW5nKj4odGhpcyktPnJlc29sdmVSb3BlVG9B
dG9taWNTdHJpbmcoZXhlYyk7CisgICAgICAgIGVsc2UgaWYgKCFtX3ZhbHVlLmltcGwoKS0+aXNB
dG9taWMoKSkKKyAgICAgICAgICAgIG1fdmFsdWUgPSBBdG9taWNTdHJpbmcobV92YWx1ZSk7Cisg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBBdG9taWNTdHJpbmcqPigmbV92
YWx1ZSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBBdG9taWNTdHJpbmdJbXBsKiBKU1N0
cmluZzo6dG9FeGlzdGluZ0F0b21pY1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoaXNSb3BlKCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgSlNSb3BlU3RyaW5nKj4odGhpcyktPnJlc29sdmVSb3BlVG9FeGlzdGluZ0F0b21pY1N0
cmluZyhleGVjKTsKKyAgICAgICAgaWYgKG1fdmFsdWUuaW1wbCgpLT5pc0F0b21pYygpKQorICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEF0b21pY1N0cmluZ0ltcGwqPihtX3ZhbHVlLmlt
cGwoKSk7CisgICAgICAgIGlmIChBdG9taWNTdHJpbmdJbXBsKiBleGlzdGluZ0F0b21pY1N0cmlu
ZyA9IEF0b21pY1N0cmluZzo6ZmluZChtX3ZhbHVlLmltcGwoKSkpIHsKKyAgICAgICAgICAgIG1f
dmFsdWUgPSAqZXhpc3RpbmdBdG9taWNTdHJpbmc7CisgICAgICAgICAgICByZXR1cm4gZXhpc3Rp
bmdBdG9taWNTdHJpbmc7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCiAgICAgaW5saW5lIGNvbnN0IFN0cmluZyYgSlNTdHJpbmc6OnZhbHVlKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc1JvcGUoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggNzIwYWM2MC4u
OWYwNDFkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dU
Ri9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNC0wNS0wNCAgQW5kcmVhcyBLbGluZyAg
PGFrbGluZ0BhcHBsZS5jb20+CisKKyAgICAgICAgT3B0aW1pemUgSlNSb3BlU3RyaW5nIGZvciBy
ZXNvbHZpbmcgZGlyZWN0bHkgdG8gQXRvbWljU3RyaW5nLgorICAgICAgICA8aHR0cHM6Ly93ZWJr
aXQub3JnL2IvMTMyNTQ4PgorCisgICAgICAgIEFkZCBBdG9taWNTdHJpbmc6OmZpbmQoW0xVXUNo
YXIqLCB1bnNpZ25lZCBsZW5ndGgpIGhlbHBlcnMgZm9yIGZpbmRpbmcKKyAgICAgICAgYW4gZXhp
c3RpbmcgQXRvbWljU3RyaW5nIHdpdGhvdXQgYSBTdHJpbmdJbXBsIG9uIGhhbmQuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9t
aWNTdHJpbmcuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwOgorICAgICAg
ICAoV1RGOjpBdG9taWNTdHJpbmc6OmZpbmQpOgorCiAyMDE0LTA1LTAxICBCcmVudCBGdWxnaGFt
ICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBoYW5kbGluZyBvZiBhdHRyaWJ1
dGVzIHByaW9yIHRvIGNvbXBpbGluZyBzaGFkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L3RleHQvQXRvbWljU3RyaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5n
LmNwcAppbmRleCA5ZDViNjIyLi45YjQ3ODM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L0F0b21pY1N0cmluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJp
bmcuY3BwCkBAIC01MjUsNiArNTI1LDMwIEBAIEF0b21pY1N0cmluZyBBdG9taWNTdHJpbmc6Om51
bWJlcihkb3VibGUgbnVtYmVyKQogICAgIHJldHVybiBTdHJpbmcobnVtYmVyVG9GaXhlZFByZWNp
c2lvblN0cmluZyhudW1iZXIsIDYsIGJ1ZmZlciwgdHJ1ZSkpOwogfQogCitBdG9taWNTdHJpbmdJ
bXBsKiBBdG9taWNTdHJpbmc6OmZpbmQoTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0
aCkKK3sKKyAgICBBdG9taWNTdHJpbmdUYWJsZUxvY2tlciBsb2NrZXI7CisgICAgYXV0byYgdGFi
bGUgPSBzdHJpbmdUYWJsZSgpOworCisgICAgTENoYXJCdWZmZXIgYnVmZmVyID0geyBjaGFyYWN0
ZXJzLCBsZW5ndGggfTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gdGFibGUuZmluZDxMQ2hhckJ1ZmZl
clRyYW5zbGF0b3I+KGJ1ZmZlcik7CisgICAgaWYgKGl0ZXJhdG9yICE9IHRhYmxlLmVuZCgpKQor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbWljU3RyaW5nSW1wbCo+KCppdGVyYXRvcik7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0F0b21pY1N0cmluZ0ltcGwqIEF0b21pY1N0cmlu
Zzo6ZmluZChVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIEF0b21p
Y1N0cmluZ1RhYmxlTG9ja2VyIGxvY2tlcjsKKyAgICBhdXRvJiB0YWJsZSA9IHN0cmluZ1RhYmxl
KCk7CisKKyAgICBVQ2hhckJ1ZmZlciBidWZmZXIgPSB7IGNoYXJhY3RlcnMsIGxlbmd0aCB9Owor
ICAgIGF1dG8gaXRlcmF0b3IgPSB0YWJsZS5maW5kPFVDaGFyQnVmZmVyVHJhbnNsYXRvcj4oYnVm
ZmVyKTsKKyAgICBpZiAoaXRlcmF0b3IgIT0gdGFibGUuZW5kKCkpCisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxBdG9taWNTdHJpbmdJbXBsKj4oKml0ZXJhdG9yKTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwogI2lmICFBU1NFUlRfRElTQUJMRUQKIGJvb2wgQXRvbWljU3RyaW5nOjppc0lu
QXRvbWljU3RyaW5nVGFibGUoU3RyaW5nSW1wbCogc3RyaW5nKQogewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRv
bWljU3RyaW5nLmgKaW5kZXggMmQ3MDM2ZS4uMTQ2NzAxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9BdG9taWNTdHJpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21p
Y1N0cmluZy5oCkBAIC04Nyw2ICs4Nyw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKTsgfQogCiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBBdG9taWNTdHJp
bmdJbXBsKiBmaW5kU3RyaW5nV2l0aEhhc2goY29uc3QgU3RyaW5nSW1wbCYpOworICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgQXRvbWljU3RyaW5nSW1wbCogZmluZChMQ2hhciosIHVu
c2lnbmVkIGxlbmd0aCk7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBBdG9taWNT
dHJpbmdJbXBsKiBmaW5kKFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBzdGF0aWMgQXRv
bWljU3RyaW5nSW1wbCogZmluZChTdHJpbmdJbXBsKiBzdHJpbmcpCiAgICAgewogICAgICAgICBp
ZiAoIXN0cmluZyB8fCBzdHJpbmctPmlzQXRvbWljKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGU4YWE0Yi4u
OWJjYTM2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE0LTA1LTA0ICBBbmRyZWFz
IEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBKU1JvcGVTdHJp
bmcgZm9yIHJlc29sdmluZyBkaXJlY3RseSB0byBBdG9taWNTdHJpbmcuCisgICAgICAgIDxodHRw
czovL3dlYmtpdC5vcmcvYi8xMzI1NDg+CisKKyAgICAgICAgQWRkIHR3byBiaW5kaW5ncyBnZW5l
cmF0b3IgYXR0cmlidXRlcyBmb3IgcGFyYW1ldGVycyB0byBpbmZsdWVuY2UKKyAgICAgICAgdGhl
IHdheSB0aGF0IEpTIHJvcGUgc3RyaW5ncyBhcmUgcmVzb2x2ZWQ6CisKKyAgICAgICAgLSBBdG9t
aWNTdHJpbmcKKworICAgICAgICAgICAgR2VuZXJhdGVzIGNvZGUgdGhhdCBhdm9pZHMgYWxsb2Nh
dGluZyBhIG5ldyBTdHJpbmdJbXBsIGlmIHRoZXJlCisgICAgICAgICAgICBpcyBhbHJlYWR5IGFu
IGV4aXN0aW5nIEF0b21pY1N0cmluZyB3ZSBjYW4gcmV1c2UuCisKKyAgICAgICAgLSBSZXF1aXJl
c0V4aXN0aW5nQXRvbWljU3RyaW5nCisKKyAgICAgICAgICAgIEdlbmVyYXRlcyBjb2RlIHRoYXQg
ZmFpbHMgaW1tZWRpYXRlbHkgaWYgdGhlIHByb3ZpZGVkIHN0cmluZworICAgICAgICAgICAgaXMg
bm90IGZvdW5kIGluIHRoZSBBdG9taWNTdHJpbmcgdGFibGUuIFRoaXMgaXMgbm93IHVzZWQgZm9y
CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgpLCBhbmQgd29ya3MgYmVjYXVz
ZSBhbnkgZXhpc3RpbmcgSUQKKyAgICAgICAgICAgIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW4gdGhl
IHRhYmxlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0
ZVBhcmFtZXRlcnNDaGVjayk6CisgICAgICAgIChKU1ZhbHVlVG9OYXRpdmUpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQ6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmlkbDoKKwogMjAxNC0wNS0wNCAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgQ2xlYXIgdGhlIFNlbGVjdG9yIFF1ZXJ5IGNhY2hlcyBvbiBtZW1v
cnkgcHJlc3N1cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0KaW5kZXggNWM1ZDQ0ZC4uNDRiMGYzNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTMyODMsNyAr
MzI4MywxNCBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAi
IC4gR2V0TmF0aXZlVHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlcikgLiAiICRuYW1lKCIgLiBK
U1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRlciwgJG9wdGlvbmFsICYmICRkZWZhdWx0QXR0cmlidXRl
ICYmICRkZWZhdWx0QXR0cmlidXRlIGVxICJOdWxsU3RyaW5nIiA/ICJhcmd1bWVudE9yTnVsbChl
eGVjLCAkYXJnc0luZGV4KSIgOiAiZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkiKSAuICIpO1xu
Iik7CisgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJl
cXVpcmVzRXhpc3RpbmdBdG9taWNTdHJpbmcifSkgeworICAgICAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBBdG9taWNTdHJpbmdJbXBsKiBleGlzdGluZ18kbmFtZSA9IGV4ZWMt
PmFyZ3VtZW50KCRhcmdzSW5kZXgpLmlzRW1wdHkoKSA/IG51bGxwdHIgOiBleGVjLT5hcmd1bWVu
dCgkYXJnc0luZGV4KS50b1N0cmluZyhleGVjKS0+dG9FeGlzdGluZ0F0b21pY1N0cmluZyhleGVj
KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIWV4
aXN0aW5nXyRuYW1lKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTtcbiIpOworICAgICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBjb25zdCBBdG9taWNTdHJpbmcmICRuYW1l
KGV4aXN0aW5nXyRuYW1lKTtcbiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0
dXJlKCRwYXJhbWV0ZXIpIC4gIiAkbmFtZSgiIC4gSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIs
ICRvcHRpb25hbCAmJiAkZGVmYXVsdEF0dHJpYnV0ZSAmJiAkZGVmYXVsdEF0dHJpYnV0ZSBlcSAi
TnVsbFN0cmluZyIgPyAiYXJndW1lbnRPck51bGwoZXhlYywgJGFyZ3NJbmRleCkiIDogImV4ZWMt
PmFyZ3VtZW50KCRhcmdzSW5kZXgpIikgLiAiKTtcbiIpOworICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICAjIElmIGEgcGFyYW1ldGVyIGlzICJhbiBpbmRleCIgYW5kIGl0J3MgbmVnYXRpdmUg
aXQgc2hvdWxkIHRocm93IGFuIElOREVYX1NJWkVfRVJSIGV4Y2VwdGlvbi4KICAgICAgICAgICAg
ICMgQnV0IHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBpbiB0aGUgYmluZGluZ3MsIGJlY2F1c2UgdGhl
IHR5cGUgaXMgdW5zaWduZWQgYW5kIHRoZSBmYWN0IHRoYXQgaXQKQEAgLTM3NjEsNiArMzc2OCw5
IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICAgICAgaWYgKCgkc2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiVHJlYXROdWxsQXMifSBhbmQgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IlRyZWF0TnVsbEFzIn0gZXEgIk51bGxTdHJpbmciKSBvciAkc2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVmbGVjdCJ9KSB7CiAgICAgICAgICAgICByZXR1cm4gInZh
bHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsICR2YWx1ZSkiCiAgICAgICAgIH0KKyAgICAg
ICAgaWYgKCRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJBdG9taWNTdHJpbmcifSkg
eworICAgICAgICAgICAgcmV0dXJuICIkdmFsdWUuaXNFbXB0eSgpID8gQXRvbWljU3RyaW5nKCkg
OiAkdmFsdWUudG9TdHJpbmcoZXhlYyktPnRvQXRvbWljU3RyaW5nKGV4ZWMpIjsKKyAgICAgICAg
fQogICAgICAgICAjIEZJWE1FOiBBZGQgdGhlIGNhc2UgZm9yICdpZiAoJHNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IlRyZWF0VW5kZWZpbmVkQXMifSBhbmQgJHNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IlRyZWF0VW5kZWZpbmVkQXMifSBlcSAiTnVsbFN0cmluZyIpKScu
CiAgICAgICAgIHJldHVybiAiJHZhbHVlLmlzRW1wdHkoKSA/IFN0cmluZygpIDogJHZhbHVlLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKaW5kZXggZDEzYjMwZS4uZWEwZWY3
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1
dGVzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0
ZXMudHh0CkBAIC0xOSw2ICsxOSw3IEBACiAjCiAKIEFjdGl2ZURPTU9iamVjdAorQXRvbWljU3Ry
aW5nCiBDUFBQdXJlSW50ZXJmYWNlCiBDYWNoZWRBdHRyaWJ1dGUKIENhbGxiYWNrTmVlZHNPcGVy
YXRvckVxdWFsCkBAIC0xMDEsNiArMTAyLDcgQEAgUmVmbGVjdD0qCiBSZXBsYWNlYWJsZQogUmVw
bGFjZWFibGVDb25zdHJ1Y3RvcgogUmVwb3J0RXh0cmFNZW1vcnlDb3N0CitSZXF1aXJlc0V4aXN0
aW5nQXRvbWljU3RyaW5nCiBSZXR1cm5OZXdPYmplY3QKIFNldHRlclJhaXNlc0V4Y2VwdGlvbgog
U2tpcFZUYWJsZVZhbGlkYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCmluZGV4IDhkZDUxZmYu
LjZkZmU1MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbApAQCAtNTEsNyArNTEsNyBAQAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBbVHJlYXROdWxsQXM9TnVsbFN0cmluZyxEZWZhdWx0PVVuZGVmaW5lZF0g
b3B0aW9uYWwgRE9NU3RyaW5nIHF1YWxpZmllZE5hbWUpOwogICAgIFtPYmpDTGVnYWN5VW5uYW1l
ZFBhcmFtZXRlcnNdIE5vZGVMaXN0IGdldEVsZW1lbnRzQnlUYWdOYW1lTlMoW1RyZWF0TnVsbEFz
PU51bGxTdHJpbmcsRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIERPTVN0cmluZyBuYW1lc3Bh
Y2VVUkksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIERPTVN0cmluZyBsb2NhbE5hbWUpOwotICAg
IEVsZW1lbnQgZ2V0RWxlbWVudEJ5SWQoW0RlZmF1bHQ9VW5kZWZpbmVkLE9iakNFeHBsaWNpdEF0
b21pY1N0cmluZ10gb3B0aW9uYWwgRE9NU3RyaW5nIGVsZW1lbnRJZCk7CisgICAgRWxlbWVudCBn
ZXRFbGVtZW50QnlJZChbRGVmYXVsdD1VbmRlZmluZWQsT2JqQ0V4cGxpY2l0QXRvbWljU3RyaW5n
LFJlcXVpcmVzRXhpc3RpbmdBdG9taWNTdHJpbmddIG9wdGlvbmFsIERPTVN0cmluZyBlbGVtZW50
SWQpOwogCiAgICAgLy8gRE9NIExldmVsIDMgQ29yZQogCkBAIC0xNTYsNyArMTU2LDcgQEAKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgSFRNTENvbGxlY3Rpb24gYW5jaG9yczsKICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxhc3RNb2RpZmllZDsKIAotICAgIE5vZGVMaXN0IGdldEVs
ZW1lbnRzQnlOYW1lKFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgRE9NU3RyaW5nIGVsZW1l
bnROYW1lKTsKKyAgICBOb2RlTGlzdCBnZXRFbGVtZW50c0J5TmFtZShbRGVmYXVsdD1VbmRlZmlu
ZWQsQXRvbWljU3RyaW5nXSBvcHRpb25hbCBET01TdHJpbmcgZWxlbWVudE5hbWUpOwogCiAjaWYg
ZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKSAmJiBMQU5HVUFHRV9KQVZBU0NSSVBUCiAgICAg
ICAgICAgICAgW0N1c3RvbV0gYXR0cmlidXRlIExvY2F0aW9uIGxvY2F0aW9uOwo=
</data>
<flag name="review"
          id="255180"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>