<?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>179355</bug_id>
          
          <creation_ts>2017-11-06 17:30:01 -0800</creation_ts>
          <short_desc>AccessCase::generateImpl() should exclude the result register when restoring registers after a call.</short_desc>
          <delta_ts>2017-11-07 11:34:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Local 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>buildbot</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1368868</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-11-06 17:30:01 -0800</bug_when>
    <thetext>We should be using this exclude list to exclude result registers from being preserved, instead of needing to exclude them from being restored later.

&lt;rdar://problem/35263053&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1368870</commentid>
    <comment_count>1</comment_count>
      <attachid>326176</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-11-06 17:45:09 -0800</bug_when>
    <thetext>Created attachment 326176
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1368873</commentid>
    <comment_count>2</comment_count>
      <attachid>326177</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-11-06 17:50:54 -0800</bug_when>
    <thetext>Created attachment 326177
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1368877</commentid>
    <comment_count>3</comment_count>
      <attachid>326177</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-11-06 18:06:58 -0800</bug_when>
    <thetext>Comment on attachment 326177
proposed patch.

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:25
&gt; +        1. Added support to specify an exclude RegisterSet for
&gt; +           AccessGenerationState::preserveLiveRegistersToStackForCall().  This allows us
&gt; +           to exclude the result registers from the set of registers to preserve.
&gt; +
&gt; +        2. Removed the exclude RegisterSet from restoreLiveRegistersFromStackForCall().
&gt; +           Instead, restoreLiveRegistersFromStackForCall() should only restore registers
&gt; +           that were preserved.  This simplifies the restoration code.
&gt; +
&gt; +        3. Changed preserveLiveRegistersToStackForCall() and restoreLiveRegistersFromStackForCall()
&gt; +           to take RegisterSet arguments by value instead of by reference.  RegisterSet
&gt; +           is designed to be passed by value.
&gt; +
&gt; +        4. Added an implicit default constructor to RegisterSet.  This allows us to use
&gt; +           the { } notation for instantiation an empty set.  There is an explicit
&gt; +           RegisterSet(Regs... regs) constructor which was made explicit so that we don&apos;t
&gt; +           inadvertently convert register IDs into RegisterSet.  Having a default
&gt; +           constructor does not break intent of the RegisterSet(Regs... regs) constructor.

Most of these are change descriptions for the affected functions.  Move that detail down under the appropriate changed file / function section below.  A summary of what the change does here would be great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1368880</commentid>
    <comment_count>4</comment_count>
      <attachid>326177</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-11-06 18:10:52 -0800</bug_when>
    <thetext>Comment on attachment 326177
proposed patch.

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

&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:677
&gt; +        RegisterSet resultRegistersToExclude;
&gt; +        if (isGetter())
&gt; +            resultRegistersToExclude.set(valueRegs);

I believe this is wrong. Imagine we make a getter call, and the base/result are allocated the same register. Assume that the getter throws an exception. Assume OSR exit now needs to recover the original base. This code breaks that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369054</commentid>
    <comment_count>5</comment_count>
      <attachid>326177</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-11-07 10:25:23 -0800</bug_when>
    <thetext>Comment on attachment 326177
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:677
&gt;&gt; +            resultRegistersToExclude.set(valueRegs);
&gt; 
&gt; I believe this is wrong. Imagine we make a getter call, and the base/result are allocated the same register. Assume that the getter throws an exception. Assume OSR exit now needs to recover the original base. This code breaks that.

Thanks for catching that.  You made a very good point.  This completely invalidates my approach of skipping the result on the preservation pass.  I will redo the entire patch.  I&apos;ll also leave out the refactoring parts for a subsequent patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369072</commentid>
    <comment_count>6</comment_count>
      <attachid>326222</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-11-07 11:02:18 -0800</bug_when>
    <thetext>Created attachment 326222
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369096</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-11-07 11:34:53 -0800</bug_when>
    <thetext>Thanks for the review.  I noticed that the title in the JSTests/ChangeLog was from the old patch.  I&apos;ve updated it before landing.

Landed in r224539: &lt;http://trac.webkit.org/r224539&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326176</attachid>
            <date>2017-11-06 17:45:09 -0800</date>
            <delta_ts>2017-11-06 17:50:54 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-179355.patch</filename>
            <type>text/plain</type>
            <size>12605</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjQ1MjYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE3LTExLTA2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNlcnZlTGl2ZVJlZ2lzdGVy
c1RvU3RhY2tGb3JDYWxsKCkgc2hvdWxkIGFsbG93IHNvbWUgcmVnaXN0ZXJzIHRvIGJlIGV4Y2x1
ZGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5
MzU1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNTI2MzA1Mz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9yZWdyZXNzLTE3OTM1NS5q
czogQWRkZWQuCisKIDIwMTctMTEtMDUgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CiAKICAgICAgICAgSklUIGNhbGwgaW5saW5lIGNhY2hlcyBzaG91bGQgY2FjaGUgY2Fs
bHMgdG8gb2JqZWN0cyB3aXRoIGdldENhbGxEYXRhL2dldENvbnN0cnVjdERhdGEgdHJhcHMKSW5k
ZXg6IEpTVGVzdHMvc3RyZXNzL3JlZ3Jlc3MtMTc5MzU1LmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVz
dHMvc3RyZXNzL3JlZ3Jlc3MtMTc5MzU1LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3Ry
ZXNzL3JlZ3Jlc3MtMTc5MzU1LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKK3Zh
ciBhcnIwID0gWzEsMiwzLDRdOwordmFyIGFycjEgPSBuZXcgQXJyYXkoMTAwMCk7CisKK0FycmF5
LnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKDEsIGZ1bmN0aW9uKCkgeworIFtdLmNvbmNhdChh
cnIxKTsgLy9nZW5lcmF0ZSB0byBpbnZhbGlkIEpJVCBjb2RlIGhlcmU/Cit9KTsKKworQXJyYXku
cHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZSwgKGZ1
bmN0aW9uKCkgeworIGZvcih2YXIgaT0wO2k8MTAwMDA7aSsrKSB7CisgICBpZihpPT0wKQorICAg
ICBhcnIxW2ldOworICAgdGhpcy54ID0gMS4xOworICAgYXJyMS5sZWdudGggPSAxOworIH0KK30p
KTsKKwordmFyIGV4Y2VwdGlvbjsKK3RyeSB7CisgICAgYXJyMVsxXS50b1N0cmluZygpOworfSBj
YXRjaCAoZSkgeworICAgIGV4Y2VwdGlvbiA9IGU7Cit9CisKK2lmIChleGNlcHRpb24gIT0gIlJh
bmdlRXJyb3I6IE1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkLiIpCisgICAgdGhyb3cg
IkZBSUxFRCI7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMjQ0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTctMTEtMDYgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZTo6cHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKSBzaG91bGQgYWxsb3cgc29t
ZSByZWdpc3RlcnMgdG8gYmUgZXhjbHVkZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzkzNTUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM1MjYz
MDUzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDEu
IEFkZGVkIHN1cHBvcnQgdG8gc3BlY2lmeSBhbiBleGNsdWRlIFJlZ2lzdGVyU2V0IGZvcgorICAg
ICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3Rh
Y2tGb3JDYWxsKCkuICBUaGlzIGFsbG93cyB1cworICAgICAgICAgICB0byBleGNsdWRlIHRoZSBy
ZXN1bHQgcmVnaXN0ZXJzIGZyb20gdGhlIHNldCBvZiByZWdpc3RlcnMgdG8gcHJlc2VydmUuCisK
KyAgICAgICAgMi4gUmVtb3ZlZCB0aGUgZXhjbHVkZSBSZWdpc3RlclNldCBmcm9tIHJlc3RvcmVM
aXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbCgpLgorICAgICAgICAgICBJbnN0ZWFkLCByZXN0
b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoKSBzaG91bGQgb25seSByZXN0b3JlIHJl
Z2lzdGVycworICAgICAgICAgICB0aGF0IHdlcmUgcHJlc2VydmVkLiAgVGhpcyBzaW1wbGlmaWVz
IHRoZSByZXN0b3JhdGlvbiBjb2RlLgorCisgICAgICAgIDMuIENoYW5nZWQgcHJlc2VydmVMaXZl
UmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKSBhbmQgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3Rh
Y2tGb3JDYWxsKCkKKyAgICAgICAgICAgdG8gdGFrZSBSZWdpc3RlclNldCBhcmd1bWVudHMgYnkg
dmFsdWUgaW5zdGVhZCBvZiBieSByZWZlcmVuY2UuICBSZWdpc3RlclNldAorICAgICAgICAgICBp
cyBkZXNpZ25lZCB0byBiZSBwYXNzZWQgYnkgdmFsdWUuCisKKyAgICAgICAgNC4gQWRkZWQgYW4g
aW1wbGljaXQgZGVmYXVsdCBjb25zdHJ1Y3RvciB0byBSZWdpc3RlclNldC4gIFRoaXMgYWxsb3dz
IHVzIHRvIHVzZQorICAgICAgICAgICB0aGUgeyB9IG5vdGF0aW9uIGZvciBpbnN0YW50aWF0aW9u
IGFuIGVtcHR5IHNldC4gIFRoZXJlIGlzIGFuIGV4cGxpY2l0CisgICAgICAgICAgIFJlZ2lzdGVy
U2V0KFJlZ3MuLi4gcmVncykgY29uc3RydWN0b3Igd2hpY2ggd2FzIG1hZGUgZXhwbGljaXQgc28g
dGhhdCB3ZSBkb24ndAorICAgICAgICAgICBpbmFkdmVydGVudGx5IGNvbnZlcnQgcmVnaXN0ZXIg
SURzIGludG8gUmVnaXN0ZXJTZXQuICBIYXZpbmcgYSBkZWZhdWx0CisgICAgICAgICAgIGNvbnN0
cnVjdG9yIGRvZXMgbm90IGJyZWFrIGludGVudCBvZiB0aGUgUmVnaXN0ZXJTZXQoUmVncy4uLiBy
ZWdzKSBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVj
b2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvd1BhdGhD
YWxsR2VuZXJhdG9yV2l0aEFyZ3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRp
b25TdGF0ZTo6cHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwpOgorICAgICAgICAo
SlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNr
Rm9yQ2FsbCk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaDoKKyAgICAg
ICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0
YWNrRm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cmVzdG9y
ZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKToKKyAgICAgICAgKiBqaXQvUmVnaXN0ZXJT
ZXQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OlJlZ2lzdGVyU2V0KToKKwogMjAxNy0x
MS0wNiAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgogCiAgICAgICAgIENv
ZGVCbG9jazo6dXNlc09wY29kZSgpIGlzIGRlYWQgY29kZQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjI0NDkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NzQsMTcgKzY3NCwxMCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChB
Y2Nlc3NHZW5lCiAKICAgICAgICAgLy8gVGhpcyBhbHNvIGRvZXMgdGhlIG5lY2Vzc2FyeSBjYWxj
dWxhdGlvbnMgb2Ygd2hldGhlciBvciBub3Qgd2UncmUgYW4KICAgICAgICAgLy8gZXhjZXB0aW9u
IGhhbmRsaW5nIGNhbGwgc2l0ZS4KLSAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGls
bFN0YXRlIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9y
Q2FsbCgpOwotCi0gICAgICAgIGF1dG8gcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JD
YWxsID0gWyZdKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSYgc3BpbGxTdGF0ZSwg
Ym9vbCBjYWxsSGFzUmV0dXJuVmFsdWUpIHsKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGRvbnRS
ZXN0b3JlOwotICAgICAgICAgICAgaWYgKGNhbGxIYXNSZXR1cm5WYWx1ZSkgewotICAgICAgICAg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIHJlc3VsdCB2YWx1ZS4gV2UgZG9uJ3Qgd2FudCB0byBvdmVy
d3JpdGUgdGhlIHJlc3VsdCB3aXRoIHdoYXQgd2Ugc3RvcmVkIHRvIHRoZSBzdGFjay4KLSAgICAg
ICAgICAgICAgICAvLyBXZSBzb21ldGltZXMgaGF2ZSB0byBzdG9yZSBpdCB0byB0aGUgc3RhY2sg
anVzdCBpbiBjYXNlIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBhbmQgbmVlZCB0aGUgb3JpZ2luYWwg
dmFsdWUuCi0gICAgICAgICAgICAgICAgZG9udFJlc3RvcmUuc2V0KHZhbHVlUmVncyk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFj
a0ZvckNhbGwoc3BpbGxTdGF0ZSwgZG9udFJlc3RvcmUpOwotICAgICAgICB9OworICAgICAgICBS
ZWdpc3RlclNldCByZXN1bHRSZWdpc3RlcnNUb0V4Y2x1ZGU7CisgICAgICAgIGlmIChpc0dldHRl
cigpKQorICAgICAgICAgICAgcmVzdWx0UmVnaXN0ZXJzVG9FeGNsdWRlLnNldCh2YWx1ZVJlZ3Mp
OworICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUgc3BpbGxTdGF0ZSA9
IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKHsgfSwgcmVzdWx0UmVn
aXN0ZXJzVG9FeGNsdWRlKTsKIAogICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRlLmNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25I
YW5kbGluZ09yT3JpZ2luYWwoKS5iaXRzKCkpLApAQCAtODEwLDggKzgwMyw3IEBAIHZvaWQgQWNj
ZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKIAogICAgICAgICAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZz
ZXQoKSAqIHNpemVvZihSZWdpc3RlcikpIC0gc3RhdGUucHJlc2VydmVkUmV1c2VkUmVnaXN0ZXJT
dGF0ZS5udW1iZXJPZkJ5dGVzUHJlc2VydmVkIC0gc3BpbGxTdGF0ZS5udW1iZXJPZlN0YWNrQnl0
ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24pLAogICAgICAgICAgICAgICAgIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
LSAgICAgICAgICAgIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlID0gaXNHZXR0ZXIoKTsKLSAgICAg
ICAgICAgIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRlLCBj
YWxsSGFzUmV0dXJuVmFsdWUpOworICAgICAgICAgICAgc3RhdGUucmVzdG9yZUxpdmVSZWdpc3Rl
cnNGcm9tU3RhY2tGb3JDYWxsKHNwaWxsU3RhdGUpOwogCiAgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAg
ICB0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygpLT5zZXRD
YWxsTG9jYXRpb25zKApAQCAtODc4LDggKzg3MCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIHN0YXRlLmVtaXRFeHBsaWNpdEV4Y2VwdGlv
bkhhbmRsZXIoKTsKIAogICAgICAgICAgICAgbm9FeGNlcHRpb24ubGluaygmaml0KTsKLSAgICAg
ICAgICAgIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlID0gaXNHZXR0ZXIoKTsKLSAgICAgICAgICAg
IHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRlLCBjYWxsSGFz
UmV0dXJuVmFsdWUpOworICAgICAgICAgICAgc3RhdGUucmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9t
U3RhY2tGb3JDYWxsKHNwaWxsU3RhdGUpOwogICAgICAgICB9CiAgICAgICAgIHN0YXRlLnN1Y2Nl
ZWQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTAwMSw3ICs5OTIsOSBAQCB2b2lkIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQg
ZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlOwogICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJz
VG9QcmVzZXJ2ZS5zZXQoYmFzZUdQUik7CiAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNU
b1ByZXNlcnZlLnNldCh2YWx1ZVJlZ3MpOwotICAgICAgICAgICAgICAgIEFjY2Vzc0dlbmVyYXRp
b25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0
ZXJzVG9TdGFja0ZvckNhbGwoZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlKTsKKyAgICAgICAgICAg
ICAgICBSZWdpc3RlclNldCByZXN1bHRSZWdpc3RlcnNUb0V4Y2x1ZGU7CisgICAgICAgICAgICAg
ICAgcmVzdWx0UmVnaXN0ZXJzVG9FeGNsdWRlLnNldChzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
ICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRl
LnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGV4dHJhUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZSwgcmVzdWx0UmVnaXN0ZXJzVG9FeGNsdWRlKTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNj
ZXNzQ2FzZVNuaXBwZXRQYXJhbXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAJKHJldmlzaW9uIDIyNDQ5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBh
cmFtcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsNyArNTEsOSBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbnM7CiAgICAgICAgIC8vIFdlIHNw
aWxsICgxKSB0aGUgdXNlZCByZWdpc3RlcnMgYnkgSUMgYW5kICgyKSB0aGUgdXNlZCByZWdpc3Rl
cnMgYnkgU25pcHBldC4KLSAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRl
IHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCh1
c2VkUmVnaXN0ZXJzQnlTbmlwcGV0KTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgcmVzdWx0UmVnaXN0
ZXJzVG9FeGNsdWRlOworICAgICAgICByZXN1bHRSZWdpc3RlcnNUb0V4Y2x1ZGUuc2V0KG1fcmVz
dWx0KTsKKyAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3Rh
dGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCh1c2VkUmVnaXN0
ZXJzQnlTbmlwcGV0LCByZXN1bHRSZWdpc3RlcnNUb0V4Y2x1ZGUpOwogCiAgICAgICAgIGppdC5z
dG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUuY2Fs
bFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCkBAIC03
OSw5ICs4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgZXhjZXB0aW9ucy5hcHBlbmQoaml0Lmp1bXAo
KSk7CiAKICAgICAgICAgbm9FeGNlcHRpb24ubGluaygmaml0KTsKLSAgICAgICAgUmVnaXN0ZXJT
ZXQgZG9udFJlc3RvcmU7Ci0gICAgICAgIGRvbnRSZXN0b3JlLnNldChtX3Jlc3VsdCk7Ci0gICAg
ICAgIHN0YXRlLnJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRl
LCBkb250UmVzdG9yZSk7CisgICAgICAgIHN0YXRlLnJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0
YWNrRm9yQ2FsbChzcGlsbFN0YXRlKTsKIAogICAgICAgICByZXR1cm4gZXhjZXB0aW9uczsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDIyNDQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
OSwxMSArMTA5LDEyIEBAIGNvbnN0IFJlZ2lzdGVyU2V0JiBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUK
ICAgICByZXR1cm4gbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbDsKIH0KIAotYXV0byBBY2Nlc3NHZW5l
cmF0aW9uU3RhdGU6OnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGNvbnN0IFJl
Z2lzdGVyU2V0JiBleHRyYSkgLT4gU3BpbGxTdGF0ZQorYXV0byBBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGU6OnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGNvbnN0IFJlZ2lzdGVyU2V0
IGV4dHJhLCBjb25zdCBSZWdpc3RlclNldCBleGNsdWRlKSAtPiBTcGlsbFN0YXRlCiB7CiAgICAg
UmVnaXN0ZXJTZXQgbGl2ZVJlZ2lzdGVycyA9IGxpdmVSZWdpc3RlcnNGb3JDYWxsKCk7CiAgICAg
bGl2ZVJlZ2lzdGVycy5tZXJnZShleHRyYSk7Ci0gICAgCisgICAgbGl2ZVJlZ2lzdGVycy5leGNs
dWRlKGV4Y2x1ZGUpOworCiAgICAgdW5zaWduZWQgZXh0cmFTdGFja1BhZGRpbmcgPSAwOwogICAg
IHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiA9
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2Fs
bCgqaml0LCBsaXZlUmVnaXN0ZXJzLCBleHRyYVN0YWNrUGFkZGluZyk7CiAgICAgcmV0dXJuIFNw
aWxsU3RhdGUgewpAQCAtMTQwLDcgKzE0MSw3IEBAIHZvaWQgQWNjZXNzR2VuZXJhdGlvblN0YXRl
OjpyZXN0b3JlTGl2ZVIKICAgICByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwo
c3BpbGxTdGF0ZSwgZG9udFJlc3RvcmUpOwogfQogCi12b2lkIEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZTo6cmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKGNvbnN0IFNwaWxsU3RhdGUm
IHNwaWxsU3RhdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiBkb250UmVzdG9yZSkKK3ZvaWQgQWNjZXNz
R2VuZXJhdGlvblN0YXRlOjpyZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoY29u
c3QgU3BpbGxTdGF0ZSYgc3BpbGxTdGF0ZSwgY29uc3QgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmUp
CiB7CiAgICAgdW5zaWduZWQgZXh0cmFTdGFja1BhZGRpbmcgPSAwOwogICAgIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoKmppdCwgc3Bp
bGxTdGF0ZS5zcGlsbGVkUmVnaXN0ZXJzLCBkb250UmVzdG9yZSwgc3BpbGxTdGF0ZS5udW1iZXJP
ZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24sIGV4dHJhU3RhY2tQYWRkaW5n
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vz
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAyMjQ0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzMywxMCAr
MjMzLDEwIEBAIHN0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgewogCiAgICAgY29uc3QgUmVn
aXN0ZXJTZXQmIGNhbGN1bGF0ZUxpdmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0aW9uSGFuZGxp
bmcoKTsKIAotICAgIFNwaWxsU3RhdGUgcHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNh
bGwoY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhID0gUmVnaXN0ZXJTZXQoKSk7CisgICAgU3BpbGxT
dGF0ZSBwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChjb25zdCBSZWdpc3RlclNl
dCBleHRyYSA9IHsgfSwgY29uc3QgUmVnaXN0ZXJTZXQgZXhjbHVkZSA9IHsgfSk7CiAKICAgICB2
b2lkIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNlcHRp
b24oY29uc3QgU3BpbGxTdGF0ZSYpOwotICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9t
U3RhY2tGb3JDYWxsKGNvbnN0IFNwaWxsU3RhdGUmLCBjb25zdCBSZWdpc3RlclNldCYgZG9udFJl
c3RvcmUgPSBSZWdpc3RlclNldCgpKTsKKyAgICB2b2lkIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJv
bVN0YWNrRm9yQ2FsbChjb25zdCBTcGlsbFN0YXRlJiBzdGF0ZSkgeyByZXN0b3JlTGl2ZVJlZ2lz
dGVyc0Zyb21TdGFja0ZvckNhbGwoc3RhdGUsIHsgfSk7IH0KIAogICAgIGNvbnN0IFJlZ2lzdGVy
U2V0JiBsaXZlUmVnaXN0ZXJzRm9yQ2FsbCgpOwogCkBAIC0yNjcsNiArMjY3LDcgQEAgc3RydWN0
IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSB7CiAgICAgU3BpbGxTdGF0ZSBzcGlsbFN0YXRlRm9ySlNH
ZXR0ZXJTZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX3NwaWxsU3RhdGVGb3JKU0dldHRlclNldHRl
cjsgfQogICAgIAogcHJpdmF0ZToKKyAgICB2b2lkIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0
YWNrRm9yQ2FsbChjb25zdCBTcGlsbFN0YXRlJiwgY29uc3QgUmVnaXN0ZXJTZXQgZG9udFJlc3Rv
cmUpOwogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBsaXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhj
ZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSgpOwogICAgIAogICAgIFJlZ2lzdGVyU2V0IG1fbGl2ZVJl
Z2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGU7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAyMjQ0OTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDYgKzQwLDggQEAgY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CiAKIGNsYXNzIFJlZ2lz
dGVyU2V0IHsKIHB1YmxpYzoKKyAgICBSZWdpc3RlclNldCgpIHsgfQorCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gUmVncz4KICAgICBleHBsaWNpdCBSZWdpc3RlclNldChSZWdzLi4uIHJlZ3Mp
CiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326177</attachid>
            <date>2017-11-06 17:50:54 -0800</date>
            <delta_ts>2017-11-07 11:02:18 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-179355.patch</filename>
            <type>text/plain</type>
            <size>12694</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjQ1MjYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE3LTExLTA2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNlcnZlTGl2ZVJlZ2lzdGVy
c1RvU3RhY2tGb3JDYWxsKCkgc2hvdWxkIGFsbG93IHNvbWUgcmVnaXN0ZXJzIHRvIGJlIGV4Y2x1
ZGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5
MzU1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNTI2MzA1Mz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9yZWdyZXNzLTE3OTM1NS5q
czogQWRkZWQuCisKIDIwMTctMTEtMDUgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CiAKICAgICAgICAgSklUIGNhbGwgaW5saW5lIGNhY2hlcyBzaG91bGQgY2FjaGUgY2Fs
bHMgdG8gb2JqZWN0cyB3aXRoIGdldENhbGxEYXRhL2dldENvbnN0cnVjdERhdGEgdHJhcHMKSW5k
ZXg6IEpTVGVzdHMvc3RyZXNzL3JlZ3Jlc3MtMTc5MzU1LmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVz
dHMvc3RyZXNzL3JlZ3Jlc3MtMTc5MzU1LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3Ry
ZXNzL3JlZ3Jlc3MtMTc5MzU1LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKK3Zh
ciBhcnIwID0gWzEsMiwzLDRdOwordmFyIGFycjEgPSBuZXcgQXJyYXkoMTAwMCk7CisKK0FycmF5
LnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKDEsIGZ1bmN0aW9uKCkgeworICAgIFtdLmNvbmNh
dChhcnIxKTsgLy9nZW5lcmF0ZSB0byBpbnZhbGlkIEpJVCBjb2RlIGhlcmU/Cit9KTsKKworQXJy
YXkucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZSwg
KGZ1bmN0aW9uKCkgeworICAgIGZvcih2YXIgaT0wO2k8MTAwMDA7aSsrKSB7CisgICAgICAgIGlm
KGk9PTApCisgICAgICAgICAgICBhcnIxW2ldOworICAgICAgICB0aGlzLnggPSAxLjE7CisgICAg
ICAgIGFycjEubGVnbnRoID0gMTsKKyAgICB9Cit9KSk7CisKK3ZhciBleGNlcHRpb247Cit0cnkg
eworICAgIGFycjFbMV0udG9TdHJpbmcoKTsKK30gY2F0Y2ggKGUpIHsKKyAgICBleGNlcHRpb24g
PSBlOworfQorCitpZiAoZXhjZXB0aW9uICE9ICJSYW5nZUVycm9yOiBNYXhpbXVtIGNhbGwgc3Rh
Y2sgc2l6ZSBleGNlZWRlZC4iKQorICAgIHRocm93ICJGQUlMRUQiOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjQ1MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTctMTEtMDYgIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFjY2Vzc0dlbmVyYXRpb25T
dGF0ZTo6cHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKSBzaG91bGQgYWxsb3cg
c29tZSByZWdpc3RlcnMgdG8gYmUgZXhjbHVkZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzkzNTUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM1
MjYzMDUzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IDEuIEFkZGVkIHN1cHBvcnQgdG8gc3BlY2lmeSBhbiBleGNsdWRlIFJlZ2lzdGVyU2V0IGZvcgor
ICAgICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1Rv
U3RhY2tGb3JDYWxsKCkuICBUaGlzIGFsbG93cyB1cworICAgICAgICAgICB0byBleGNsdWRlIHRo
ZSByZXN1bHQgcmVnaXN0ZXJzIGZyb20gdGhlIHNldCBvZiByZWdpc3RlcnMgdG8gcHJlc2VydmUu
CisKKyAgICAgICAgMi4gUmVtb3ZlZCB0aGUgZXhjbHVkZSBSZWdpc3RlclNldCBmcm9tIHJlc3Rv
cmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbCgpLgorICAgICAgICAgICBJbnN0ZWFkLCBy
ZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoKSBzaG91bGQgb25seSByZXN0b3Jl
IHJlZ2lzdGVycworICAgICAgICAgICB0aGF0IHdlcmUgcHJlc2VydmVkLiAgVGhpcyBzaW1wbGlm
aWVzIHRoZSByZXN0b3JhdGlvbiBjb2RlLgorCisgICAgICAgIDMuIENoYW5nZWQgcHJlc2VydmVM
aXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKSBhbmQgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9t
U3RhY2tGb3JDYWxsKCkKKyAgICAgICAgICAgdG8gdGFrZSBSZWdpc3RlclNldCBhcmd1bWVudHMg
YnkgdmFsdWUgaW5zdGVhZCBvZiBieSByZWZlcmVuY2UuICBSZWdpc3RlclNldAorICAgICAgICAg
ICBpcyBkZXNpZ25lZCB0byBiZSBwYXNzZWQgYnkgdmFsdWUuCisKKyAgICAgICAgNC4gQWRkZWQg
YW4gaW1wbGljaXQgZGVmYXVsdCBjb25zdHJ1Y3RvciB0byBSZWdpc3RlclNldC4gIFRoaXMgYWxs
b3dzIHVzIHRvIHVzZQorICAgICAgICAgICB0aGUgeyB9IG5vdGF0aW9uIGZvciBpbnN0YW50aWF0
aW9uIGFuIGVtcHR5IHNldC4gIFRoZXJlIGlzIGFuIGV4cGxpY2l0CisgICAgICAgICAgIFJlZ2lz
dGVyU2V0KFJlZ3MuLi4gcmVncykgY29uc3RydWN0b3Igd2hpY2ggd2FzIG1hZGUgZXhwbGljaXQg
c28gdGhhdCB3ZSBkb24ndAorICAgICAgICAgICBpbmFkdmVydGVudGx5IGNvbnZlcnQgcmVnaXN0
ZXIgSURzIGludG8gUmVnaXN0ZXJTZXQuICBIYXZpbmcgYSBkZWZhdWx0CisgICAgICAgICAgIGNv
bnN0cnVjdG9yIGRvZXMgbm90IGJyZWFrIGludGVudCBvZiB0aGUgUmVnaXN0ZXJTZXQoUmVncy4u
LiByZWdzKSBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvd1Bh
dGhDYWxsR2VuZXJhdG9yV2l0aEFyZ3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVy
YXRpb25TdGF0ZTo6cHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0
YWNrRm9yQ2FsbCk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaDoKKyAg
ICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNU
b1N0YWNrRm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cmVz
dG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKToKKyAgICAgICAgKiBqaXQvUmVnaXN0
ZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OlJlZ2lzdGVyU2V0KToKKwogMjAx
Ny0xMS0wNiAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgogCiAgICAgICAg
IENvZGVCbG9jazo6dXNlc09wY29kZSgpIGlzIGRlYWQgY29kZQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjI0NTI2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NzIsMTkgKzY3MiwxMyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1w
bChBY2Nlc3NHZW5lCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0UGF0aENhbGw7CiAg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENhbGw7CiAKKyAgICAgICAgUmVnaXN0
ZXJTZXQgcmVzdWx0UmVnaXN0ZXJzVG9FeGNsdWRlOworICAgICAgICBpZiAoaXNHZXR0ZXIoKSkK
KyAgICAgICAgICAgIHJlc3VsdFJlZ2lzdGVyc1RvRXhjbHVkZS5zZXQodmFsdWVSZWdzKTsKKwog
ICAgICAgICAvLyBUaGlzIGFsc28gZG9lcyB0aGUgbmVjZXNzYXJ5IGNhbGN1bGF0aW9ucyBvZiB3
aGV0aGVyIG9yIG5vdCB3ZSdyZSBhbgogICAgICAgICAvLyBleGNlcHRpb24gaGFuZGxpbmcgY2Fs
bCBzaXRlLgotICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUgc3BpbGxT
dGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCk7Ci0KLSAg
ICAgICAgYXV0byByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwgPSBbJl0oQWNj
ZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlJiBzcGlsbFN0YXRlLCBib29sIGNhbGxIYXNS
ZXR1cm5WYWx1ZSkgewotICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmU7Ci0gICAg
ICAgICAgICBpZiAoY2FsbEhhc1JldHVyblZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhp
cyBpcyB0aGUgcmVzdWx0IHZhbHVlLiBXZSBkb24ndCB3YW50IHRvIG92ZXJ3cml0ZSB0aGUgcmVz
dWx0IHdpdGggd2hhdCB3ZSBzdG9yZWQgdG8gdGhlIHN0YWNrLgotICAgICAgICAgICAgICAgIC8v
IFdlIHNvbWV0aW1lcyBoYXZlIHRvIHN0b3JlIGl0IHRvIHRoZSBzdGFjayBqdXN0IGluIGNhc2Ug
d2UgdGhyb3cgYW4gZXhjZXB0aW9uIGFuZCBuZWVkIHRoZSBvcmlnaW5hbCB2YWx1ZS4KLSAgICAg
ICAgICAgICAgICBkb250UmVzdG9yZS5zZXQodmFsdWVSZWdzKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHN0YXRlLnJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGls
bFN0YXRlLCBkb250UmVzdG9yZSk7Ci0gICAgICAgIH07CisgICAgICAgIEFjY2Vzc0dlbmVyYXRp
b25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0
ZXJzVG9TdGFja0ZvckNhbGwoeyB9LCByZXN1bHRSZWdpc3RlcnNUb0V4Y2x1ZGUpOwogCiAgICAg
ICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
c3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMo
KSksCkBAIC04MTAsOCArODA0LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNj
ZXNzR2VuZQogCiAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKChjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkg
LSBzdGF0ZS5wcmVzZXJ2ZWRSZXVzZWRSZWdpc3RlclN0YXRlLm51bWJlck9mQnl0ZXNQcmVzZXJ2
ZWQgLSBzcGlsbFN0YXRlLm51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZh
dGlvbiksCiAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxs
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgYm9vbCBjYWxsSGFz
UmV0dXJuVmFsdWUgPSBpc0dldHRlcigpOwotICAgICAgICAgICAgcmVzdG9yZUxpdmVSZWdpc3Rl
cnNGcm9tU3RhY2tGb3JDYWxsKHNwaWxsU3RhdGUsIGNhbGxIYXNSZXR1cm5WYWx1ZSk7CisgICAg
ICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoc3BpbGxT
dGF0ZSk7CiAKICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgIHRoaXMtPmFzPEdldHRlclNldHRlckFj
Y2Vzc0Nhc2U+KCkuY2FsbExpbmtJbmZvKCktPnNldENhbGxMb2NhdGlvbnMoCkBAIC04NzgsOCAr
ODcxLDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAg
ICAgICAgc3RhdGUuZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcigpOwogCiAgICAgICAgICAg
ICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOwotICAgICAgICAgICAgYm9vbCBjYWxsSGFzUmV0dXJu
VmFsdWUgPSBpc0dldHRlcigpOwotICAgICAgICAgICAgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9t
U3RhY2tGb3JDYWxsKHNwaWxsU3RhdGUsIGNhbGxIYXNSZXR1cm5WYWx1ZSk7CisgICAgICAgICAg
ICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoc3BpbGxTdGF0ZSk7
CiAgICAgICAgIH0KICAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwogICAgICAgICByZXR1cm47CkBA
IC0xMDAxLDcgKzk5Myw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dl
bmUKICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmU7
CiAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldChiYXNlR1BSKTsK
ICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KHZhbHVlUmVncyk7
Ci0gICAgICAgICAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxs
U3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChleHRyYVJl
Z2lzdGVyc1RvUHJlc2VydmUpOworICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlc3VsdFJl
Z2lzdGVyc1RvRXhjbHVkZTsKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdpc3RlcnNUb0V4Y2x1
ZGUuc2V0KHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9T
dGFja0ZvckNhbGwoZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLCByZXN1bHRSZWdpc3RlcnNUb0V4
Y2x1ZGUpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKAog
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VT
bmlwcGV0UGFyYW1zLmNwcAkocmV2aXNpb24gMjI0NTI2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
MSw3ICs1MSw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3QgZXhjZXB0aW9uczsKICAgICAgICAgLy8gV2Ugc3BpbGwgKDEpIHRoZSB1c2VkIHJlZ2lzdGVy
cyBieSBJQyBhbmQgKDIpIHRoZSB1c2VkIHJlZ2lzdGVycyBieSBTbmlwcGV0LgotICAgICAgICBB
Y2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNl
cnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKHVzZWRSZWdpc3RlcnNCeVNuaXBwZXQpOwor
ICAgICAgICBSZWdpc3RlclNldCByZXN1bHRSZWdpc3RlcnNUb0V4Y2x1ZGU7CisgICAgICAgIHJl
c3VsdFJlZ2lzdGVyc1RvRXhjbHVkZS5zZXQobV9yZXN1bHQpOworICAgICAgICBBY2Nlc3NHZW5l
cmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJl
Z2lzdGVyc1RvU3RhY2tGb3JDYWxsKHVzZWRSZWdpc3RlcnNCeVNuaXBwZXQsIHJlc3VsdFJlZ2lz
dGVyc1RvRXhjbHVkZSk7CiAKICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFu
ZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwKQEAgLTc5LDkgKzgxLDcgQEAgcHVibGljOgogICAg
ICAgICBleGNlcHRpb25zLmFwcGVuZChqaXQuanVtcCgpKTsKIAogICAgICAgICBub0V4Y2VwdGlv
bi5saW5rKCZqaXQpOwotICAgICAgICBSZWdpc3RlclNldCBkb250UmVzdG9yZTsKLSAgICAgICAg
ZG9udFJlc3RvcmUuc2V0KG1fcmVzdWx0KTsKLSAgICAgICAgc3RhdGUucmVzdG9yZUxpdmVSZWdp
c3RlcnNGcm9tU3RhY2tGb3JDYWxsKHNwaWxsU3RhdGUsIGRvbnRSZXN0b3JlKTsKKyAgICAgICAg
c3RhdGUucmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKHNwaWxsU3RhdGUpOwog
CiAgICAgICAgIHJldHVybiBleGNlcHRpb25zOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNp
b24gMjI0NTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDExICsxMDksMTIgQEAgY29uc3QgUmVn
aXN0ZXJTZXQmIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZQogICAgIHJldHVybiBtX2xpdmVSZWdpc3Rl
cnNGb3JDYWxsOwogfQogCi1hdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2VydmVMaXZl
UmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhKSAtPiBTcGls
bFN0YXRlCithdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2VydmVMaXZlUmVnaXN0ZXJz
VG9TdGFja0ZvckNhbGwoY29uc3QgUmVnaXN0ZXJTZXQgZXh0cmEsIGNvbnN0IFJlZ2lzdGVyU2V0
IGV4Y2x1ZGUpIC0+IFNwaWxsU3RhdGUKIHsKICAgICBSZWdpc3RlclNldCBsaXZlUmVnaXN0ZXJz
ID0gbGl2ZVJlZ2lzdGVyc0ZvckNhbGwoKTsKICAgICBsaXZlUmVnaXN0ZXJzLm1lcmdlKGV4dHJh
KTsKLSAgICAKKyAgICBsaXZlUmVnaXN0ZXJzLmV4Y2x1ZGUoZXhjbHVkZSk7CisKICAgICB1bnNp
Z25lZCBleHRyYVN0YWNrUGFkZGluZyA9IDA7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGFja0J5
dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
OjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCpqaXQsIGxpdmVSZWdpc3RlcnMsIGV4
dHJhU3RhY2tQYWRkaW5nKTsKICAgICByZXR1cm4gU3BpbGxTdGF0ZSB7CkBAIC0xNDAsNyArMTQx
LDcgQEAgdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnJlc3RvcmVMaXZlUgogICAgIHJlc3Rv
cmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRlLCBkb250UmVzdG9yZSk7
CiB9CiAKLXZvaWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpyZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zy
b21TdGFja0ZvckNhbGwoY29uc3QgU3BpbGxTdGF0ZSYgc3BpbGxTdGF0ZSwgY29uc3QgUmVnaXN0
ZXJTZXQmIGRvbnRSZXN0b3JlKQordm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnJlc3RvcmVM
aXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChjb25zdCBTcGlsbFN0YXRlJiBzcGlsbFN0YXRl
LCBjb25zdCBSZWdpc3RlclNldCBkb250UmVzdG9yZSkKIHsKICAgICB1bnNpZ25lZCBleHRyYVN0
YWNrUGFkZGluZyA9IDA7CiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVn
aXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbCgqaml0LCBzcGlsbFN0YXRlLnNwaWxsZWRSZWdpc3RlcnMs
IGRvbnRSZXN0b3JlLCBzcGlsbFN0YXRlLm51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3Rl
clByZXNlcnZhdGlvbiwgZXh0cmFTdGFja1BhZGRpbmcpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDIy
NDUyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vz
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMzLDEwICsyMzMsMTAgQEAgc3RydWN0IEFjY2Vzc0dl
bmVyYXRpb25TdGF0ZSB7CiAKICAgICBjb25zdCBSZWdpc3RlclNldCYgY2FsY3VsYXRlTGl2ZVJl
Z2lzdGVyc0ZvckNhbGxBbmRFeGNlcHRpb25IYW5kbGluZygpOwogCi0gICAgU3BpbGxTdGF0ZSBw
cmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChjb25zdCBSZWdpc3RlclNldCYgZXh0
cmEgPSBSZWdpc3RlclNldCgpKTsKKyAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVy
c1RvU3RhY2tGb3JDYWxsKGNvbnN0IFJlZ2lzdGVyU2V0IGV4dHJhID0geyB9LCBjb25zdCBSZWdp
c3RlclNldCBleGNsdWRlID0geyB9KTsKIAogICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNG
cm9tU3RhY2tGb3JDYWxsV2l0aFRocm93bkV4Y2VwdGlvbihjb25zdCBTcGlsbFN0YXRlJik7Ci0g
ICAgdm9pZCByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoY29uc3QgU3BpbGxT
dGF0ZSYsIGNvbnN0IFJlZ2lzdGVyU2V0JiBkb250UmVzdG9yZSA9IFJlZ2lzdGVyU2V0KCkpOwor
ICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKGNvbnN0IFNwaWxs
U3RhdGUmIHN0YXRlKSB7IHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzdGF0
ZSwgeyB9KTsgfQogCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGxpdmVSZWdpc3RlcnNGb3JDYWxs
KCk7CiAKQEAgLTI2Nyw2ICsyNjcsNyBAQCBzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlIHsK
ICAgICBTcGlsbFN0YXRlIHNwaWxsU3RhdGVGb3JKU0dldHRlclNldHRlcigpIGNvbnN0IHsgcmV0
dXJuIG1fc3BpbGxTdGF0ZUZvckpTR2V0dGVyU2V0dGVyOyB9CiAgICAgCiBwcml2YXRlOgorICAg
IHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKGNvbnN0IFNwaWxsU3Rh
dGUmLCBjb25zdCBSZWdpc3RlclNldCBkb250UmVzdG9yZSk7CiAgICAgY29uc3QgUmVnaXN0ZXJT
ZXQmIGxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlKCk7
CiAgICAgCiAgICAgUmVnaXN0ZXJTZXQgbV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0
aW9uSGFuZGxpbmdDYWxsU2l0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
aXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lz
dGVyU2V0LmgJKHJldmlzaW9uIDIyNDUyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQCBjbGFzcyBSZWdp
c3RlckF0T2Zmc2V0TGlzdDsKIAogY2xhc3MgUmVnaXN0ZXJTZXQgewogcHVibGljOgorICAgIFJl
Z2lzdGVyU2V0KCkgeyB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBSZWdzPgogICAgIGV4
cGxpY2l0IFJlZ2lzdGVyU2V0KFJlZ3MuLi4gcmVncykKICAgICB7Cg==
</data>
<flag name="review"
          id="345526"
          type_id="1"
          status="-"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326222</attachid>
            <date>2017-11-07 11:02:18 -0800</date>
            <delta_ts>2017-11-07 11:06:14 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-179355.patch</filename>
            <type>text/plain</type>
            <size>3539</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjQ1MjYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE3LTExLTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNlcnZlTGl2ZVJlZ2lzdGVy
c1RvU3RhY2tGb3JDYWxsKCkgc2hvdWxkIGFsbG93IHNvbWUgcmVnaXN0ZXJzIHRvIGJlIGV4Y2x1
ZGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5
MzU1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNTI2MzA1Mz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9yZWdyZXNzLTE3OTM1NS5q
czogQWRkZWQuCisKIDIwMTctMTEtMDUgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CiAKICAgICAgICAgSklUIGNhbGwgaW5saW5lIGNhY2hlcyBzaG91bGQgY2FjaGUgY2Fs
bHMgdG8gb2JqZWN0cyB3aXRoIGdldENhbGxEYXRhL2dldENvbnN0cnVjdERhdGEgdHJhcHMKSW5k
ZXg6IEpTVGVzdHMvc3RyZXNzL3JlZ3Jlc3MtMTc5MzU1LmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVz
dHMvc3RyZXNzL3JlZ3Jlc3MtMTc5MzU1LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3Ry
ZXNzL3JlZ3Jlc3MtMTc5MzU1LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKK3Zh
ciBhcnIwID0gWzEsMiwzLDRdOwordmFyIGFycjEgPSBuZXcgQXJyYXkoMTAwMCk7CisKK0FycmF5
LnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKDEsIGZ1bmN0aW9uKCkgeworICAgIFtdLmNvbmNh
dChhcnIxKTsgLy9nZW5lcmF0ZSB0byBpbnZhbGlkIEpJVCBjb2RlIGhlcmU/Cit9KTsKKworQXJy
YXkucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZSwg
KGZ1bmN0aW9uKCkgeworICAgIGZvcih2YXIgaT0wO2k8MTAwMDA7aSsrKSB7CisgICAgICAgIGlm
KGk9PTApCisgICAgICAgICAgICBhcnIxW2ldOworICAgICAgICB0aGlzLnggPSAxLjE7CisgICAg
ICAgIGFycjEubGVnbnRoID0gMTsKKyAgICB9Cit9KSk7CisKK3ZhciBleGNlcHRpb247Cit0cnkg
eworICAgIGFycjFbMV0udG9TdHJpbmcoKTsKK30gY2F0Y2ggKGUpIHsKKyAgICBleGNlcHRpb24g
PSBlOworfQorCitpZiAoZXhjZXB0aW9uICE9ICJSYW5nZUVycm9yOiBNYXhpbXVtIGNhbGwgc3Rh
Y2sgc2l6ZSBleGNlZWRlZC4iKQorICAgIHRocm93ICJGQUlMRUQiOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTctMTEtMDcgIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlSW1wbCgpIHNob3VsZCBleGNsdWRlIHRoZSByZXN1bHQgcmVnaXN0ZXIgd2hlbiByZXN0b3Jp
bmcgcmVnaXN0ZXJzIGFmdGVyIGEgY2FsbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3OTM1NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzUyNjMw
NTM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4g
dGhlIFRyYW5zaXRpb24gY2FzZSBpbiBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoKSwgd2Ugd2Vy
ZSByZXN0b3JpbmcgcmVnaXN0ZXJzCisgICAgICAgIHVzaW5nIHJlc3RvcmVMaXZlUmVnaXN0ZXJz
RnJvbVN0YWNrRm9yQ2FsbCgpIHdpdGhvdXQgZXhjbHVkaW5nIHRoZSBzY3JhdGNoR1BSCisgICAg
ICAgIHdoZXJlIHdlIHByZXZpb3VzbHkgc3Rhc2hlZCB0aGUgcmVhbGxvY2F0ZWQgYnV0dGVyZmx5
LiAgSWYgdGhlIGdlbmVyYXRlZCBjb2RlIGlzCisgICAgICAgIHVuZGVyIGhlYXZ5IHJlZ2lzdGVy
IHByZXNzdXJlLCBzY3JhdGNoR1BSIGNvdWxkIGhhdmUgYmVlbiBmcm9tIHRoZSBzZXQgb2YgcHJl
c2VydmVkCisgICAgICAgIHJlZ2lzdGVycywgYW5kIGhlbmNlLCB3b3VsZCBiZSByZXN0b3JlZCBi
eSByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoKS4KKyAgICAgICAgQXMgYSBy
ZXN1bHQsIHRoZSByZXN0b3JhdGlvbiB3b3VsZCB0cmFzaCB0aGUgYnV0dGVyZmx5IHJlc3VsdCB3
ZSBzdG9yZWQgdGhlcmUuCisgICAgICAgIFRoaXMgcGF0Y2ggZml4ZXMgdGhlIGlzc3VlIGJ5IGV4
Y2x1ZGluZyB0aGUgc2NyYXRjaEdQUiBpbiB0aGUgcmVzdG9yYXRpb24uCisKKyAgICAgICAgKiBi
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJh
dGVJbXBsKToKKwogMjAxNy0xMS0wNiAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUu
Y29tPgogCiAgICAgICAgIENvZGVCbG9jazo6dXNlc09wY29kZSgpIGlzIGRlYWQgY29kZQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjI0NTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQyLDcgKzEwNDIsOSBAQCB2b2lkIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgc3RhdGUuZW1pdEV4
cGxpY2l0RXhjZXB0aW9uSGFuZGxlcigpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICAgICAgc3RhdGUucmVzdG9y
ZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKHNwaWxsU3RhdGUpOworICAgICAgICAgICAg
ICAgIFJlZ2lzdGVyU2V0IHJlc3VsdFJlZ2lzdGVyVG9FeGNsdWRlOworICAgICAgICAgICAgICAg
IHJlc3VsdFJlZ2lzdGVyVG9FeGNsdWRlLnNldChzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAg
ICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoc3BpbGxTdGF0ZSwg
cmVzdWx0UmVnaXN0ZXJUb0V4Y2x1ZGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIAo=
</data>
<flag name="review"
          id="345563"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>