<?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>156454</bug_id>
          
          <creation_ts>2016-04-10 14:40:50 -0700</creation_ts>
          <short_desc>Clean up how we reason about the states of AccessCases</short_desc>
          <delta_ts>2016-04-11 11:21:57 -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>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>156457</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>krollin</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1182557</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-10 14:40:50 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182558</commentid>
    <comment_count>1</comment_count>
      <attachid>276109</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-10 14:41:21 -0700</bug_when>
    <thetext>Created attachment 276109
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182571</commentid>
    <comment_count>2</comment_count>
      <attachid>276115</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-10 16:47:30 -0700</bug_when>
    <thetext>Created attachment 276115
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182572</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-10 16:49:04 -0700</bug_when>
    <thetext>Attachment 276115 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.h:60:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.h:68:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.h:77:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.h:226:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.h:227:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.h:228:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 6 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182722</commentid>
    <comment_count>4</comment_count>
      <attachid>276115</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-04-11 10:35:11 -0700</bug_when>
    <thetext>Comment on attachment 276115
the patch

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

r=me with fixes.

&gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:778
&gt; +void AccessCase::generateImpl(AccessGenerationState&amp; state)
&gt; +{

Maybe add an &quot;ASSERT(m_state == Generated);&quot; here because this functions relies on its callers setting m_state accordingly.  Should a new caller be added in the future, we would want to ensure that this does not get overlooked.

&gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:821
&gt; -
&gt; +    

Please undo.

&gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:1613
&gt; -
&gt; +    

Please undo this.

&gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.h:230
&gt; +    // Is it still possible for this case to ever be taken?  Must call this as a prerequisite for
&gt; +    // calling generate() and friends.  If this returns true, then you can call generate().  If
&gt; +    // this returns false, then generate() will crash.  You must call generate() in the same epoch
&gt; +    // as when you called couldStillGenerate().
&gt;      bool couldStillSucceed() const;

Either the comment has a typo (/couldStillGenerate/couldStillSucceed/) or you wanted to rename this function but forgot to.  In light of this function being the guard to generate, I think canStillGenerate() would be a better name (I suggest &quot;can&quot; instead of &quot;could&quot; because it&apos;s a statement about the present state, not the past).  Please fix.

&gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.h:255
&gt; +    // Perform any action that that must be performed before the end of the epoch in which the case

double &quot;that&quot;.  Please remove one.

&gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.h:407
&gt; -
&gt; +    

Please undo this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182737</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-11 11:16:55 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 276115 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=276115&amp;action=review
&gt; 
&gt; r=me with fixes.
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:778
&gt; &gt; +void AccessCase::generateImpl(AccessGenerationState&amp; state)
&gt; &gt; +{
&gt; 
&gt; Maybe add an &quot;ASSERT(m_state == Generated);&quot; here because this functions
&gt; relies on its callers setting m_state accordingly.  Should a new caller be
&gt; added in the future, we would want to ensure that this does not get
&gt; overlooked.

Good idea.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:821
&gt; &gt; -
&gt; &gt; +    
&gt; 
&gt; Please undo.

OK.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:1613
&gt; &gt; -
&gt; &gt; +    
&gt; 
&gt; Please undo this.

OK.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.h:230
&gt; &gt; +    // Is it still possible for this case to ever be taken?  Must call this as a prerequisite for
&gt; &gt; +    // calling generate() and friends.  If this returns true, then you can call generate().  If
&gt; &gt; +    // this returns false, then generate() will crash.  You must call generate() in the same epoch
&gt; &gt; +    // as when you called couldStillGenerate().
&gt; &gt;      bool couldStillSucceed() const;
&gt; 
&gt; Either the comment has a typo (/couldStillGenerate/couldStillSucceed/) or
&gt; you wanted to rename this function but forgot to.  In light of this function
&gt; being the guard to generate, I think canStillGenerate() would be a better
&gt; name (I suggest &quot;can&quot; instead of &quot;could&quot; because it&apos;s a statement about the
&gt; present state, not the past).  Please fix.

I&apos;ll fix the comment since I want to err on not changing trunk.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.h:255
&gt; &gt; +    // Perform any action that that must be performed before the end of the epoch in which the case
&gt; 
&gt; double &quot;that&quot;.  Please remove one.

OK.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.h:407
&gt; &gt; -
&gt; &gt; +    
&gt; 
&gt; Please undo this.

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182740</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-11 11:21:57 -0700</bug_when>
    <thetext>Landed in r199297</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276109</attachid>
            <date>2016-04-10 14:41:21 -0700</date>
            <delta_ts>2016-04-10 16:47:30 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19230</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTk5Mjg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiAr
NDgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBm
YWxzZTsKIAorLy8gRW5jb2RlZEpTVmFsdWUgaW4gSlNWQUxVRTMyXzY0IGlzIGEgNjQtYml0IGlu
dGVnZXIuIFdoZW4gYmVpbmcgY29tcGlsZWQgaW4gQVJNIEVBQkksIGl0IG11c3QgYmUgYWxpZ25l
ZCBvbiBhbiBldmVuLW51bWJlcmVkIHJlZ2lzdGVyIChyMCwgcjIgb3IgW3NwXSkuCisvLyBUbyBw
cmV2ZW50IHRoZSBhc3NlbWJsZXIgZnJvbSB1c2luZyB3cm9uZyByZWdpc3RlcnMsIGxldCdzIG9j
Y3VweSByMSBvciByMyB3aXRoIGEgZHVtbXkgYXJndW1lbnQgd2hlbiBuZWNlc3NhcnkuCisjaWYg
KENPTVBJTEVSX1NVUFBPUlRTKEVBQkkpICYmIENQVShBUk0pKSB8fCBDUFUoTUlQUykKKyNkZWZp
bmUgRUFCSV8zMkJJVF9EVU1NWV9BUkcgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigw
KSwKKyNlbHNlCisjZGVmaW5lIEVBQklfMzJCSVRfRFVNTVlfQVJHCisjZW5kaWYKKwogdm9pZCBB
Y2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAg
ICAgb3V0LnByaW50KG1fa2luZCk7CkBAIC0zODksNiArMzk3LDI0IEBAIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitWZWN0
b3I8V2F0Y2hwb2ludFNldCosIDI+IEFjY2Vzc0Nhc2U6OmNvbW1pdChWTSYgdm0sIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUgPT0gUHJpbW9y
ZGlhbCk7CisgICAgCisgICAgVmVjdG9yPFdhdGNocG9pbnRTZXQqLCAyPiByZXN1bHQ7CisgICAg
CisgICAgaWYgKChzdHJ1Y3R1cmUoKSAmJiBzdHJ1Y3R1cmUoKS0+bmVlZEltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpKQorICAgICAgICB8fCBtX2NvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KCkpCisgICAgICAgIHJlc3VsdC5hcHBlbmQodm0uZW5zdXJlV2F0Y2hwb2lu
dFNldEZvckltcHVyZVByb3BlcnR5KGlkZW50KSk7CisKKyAgICBpZiAoYWRkaXRpb25hbFNldCgp
KQorICAgICAgICByZXN1bHQuYXBwZW5kKGFkZGl0aW9uYWxTZXQoKSk7CisgICAgCisgICAgbV9z
dGF0ZSA9IENvbW1pdHRlZDsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBib29sIEFj
Y2Vzc0Nhc2U6Omd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgY29uc3QKIHsKICAgICBpZiAodmlh
UHJveHkoKSkKQEAgLTQ3MCw2ICs0OTYsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgCiAgICAgb3V0LnByaW50KG1fdHlwZSwgIjooIik7CiAKICAgICBDb21tYVBy
aW50ZXIgY29tbWE7CisgICAgCisgICAgb3V0LnByaW50KGNvbW1hLCBtX3N0YXRlKTsKIAogICAg
IGlmIChtX3R5cGUgPT0gVHJhbnNpdGlvbikKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3Ry
dWN0dXJlID0gIiwgcG9pbnRlckR1bXAoc3RydWN0dXJlKCkpLCAiIC0+ICIsIHBvaW50ZXJEdW1w
KG5ld1N0cnVjdHVyZSgpKSk7CkBAIC01MTcsNiArNTQ1LDExIEBAIGJvb2wgQWNjZXNzQ2FzZTo6
dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3Vh
cmQoCiAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCYgZmFsbFRocm91Z2gpCiB7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOworCisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBDb21taXR0ZWQp
OworICAgIG1fc3RhdGUgPSBHZW5lcmF0ZWQ7CisgICAgCiAgICAgQ0NhbGxIZWxwZXJzJiBqaXQg
PSAqc3RhdGUuaml0OwogICAgIFZNJiB2bSA9ICpqaXQudm0oKTsKICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCA9ICpzdGF0ZS5pZGVudDsKQEAgLTczMCwxOSArNzYzLDIwIEBAIHZvaWQgQWNj
ZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgIGJyZWFrOwogICAgIH0gfTsKIAot
ICAgIGdlbmVyYXRlKHN0YXRlKTsKKyAgICBnZW5lcmF0ZUltcGwoc3RhdGUpOwogfQogCi0vLyBF
bmNvZGVkSlNWYWx1ZSBpbiBKU1ZBTFVFMzJfNjQgaXMgYSA2NC1iaXQgaW50ZWdlci4gV2hlbiBi
ZWluZyBjb21waWxlZCBpbiBBUk0gRUFCSSwgaXQgbXVzdCBiZSBhbGlnbmVkIG9uIGFuIGV2ZW4t
bnVtYmVyZWQgcmVnaXN0ZXIgKHIwLCByMiBvciBbc3BdKS4KLS8vIFRvIHByZXZlbnQgdGhlIGFz
c2VtYmxlciBmcm9tIHVzaW5nIHdyb25nIHJlZ2lzdGVycywgbGV0J3Mgb2NjdXB5IHIxIG9yIHIz
IHdpdGggYSBkdW1teSBhcmd1bWVudCB3aGVuIG5lY2Vzc2FyeS4KLSNpZiAoQ09NUElMRVJfU1VQ
UE9SVFMoRUFCSSkgJiYgQ1BVKEFSTSkpIHx8IENQVShNSVBTKQotI2RlZmluZSBFQUJJXzMyQklU
X0RVTU1ZX0FSRyAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLAotI2Vsc2UKLSNk
ZWZpbmUgRUFCSV8zMkJJVF9EVU1NWV9BUkcKLSNlbmRpZgotCiB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiB7CisgICAgUkVMRUFTRV9BU1NF
UlQobV9zdGF0ZSA9PSBDb21taXR0ZWQpOworICAgIG1fc3RhdGUgPSBHZW5lcmF0ZWQ7CisgICAg
CisgICAgZ2VuZXJhdGVJbXBsKHN0YXRlKTsKK30KKwordm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0
ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKK3sKKyAgICBTdXBlclNhbXBsZXJT
Y29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2coIkdlbmVyYXRpbmcgY29kZSBmb3I6ICIsICp0aGlzLCAiXG4iKTsKICAgICAKQEAg
LTc1NywxMyArNzkxLDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0
aQogCiAgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOwogCi0gICAgaWYgKChzdHJ1Y3R1cmUo
KSAmJiBzdHJ1Y3R1cmUoKS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQotICAgICAg
ICB8fCBtX2NvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCi0gICAg
ICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlkZW50LCBzdGF0ZS5h
ZGRXYXRjaHBvaW50KCkpOwotCi0gICAgaWYgKGFkZGl0aW9uYWxTZXQoKSkKLSAgICAgICAgYWRk
aXRpb25hbFNldCgpLT5hZGQoc3RhdGUuYWRkV2F0Y2hwb2ludCgpKTsKLQogICAgIGZvciAoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IG1fY29uZGl0aW9uU2V0KSB7
CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1
Y3R1cmUoKTsKIApAQCAtNzczLDYgKzgwMCwxMCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRl
KEFjY2Vzc0dlbmVyYXRpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1
Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1
Y3R1cmUpKSB7CisgICAgICAgICAgICAvLyBUaGUgcmVhc29uIHdoeSB0aGlzIGNhbm5vdCBoYXBw
ZW4gaXMgdGhhdCB3ZSByZXF1aXJlIHRoYXQgUG9seW1vcnBoaWNBY2Nlc3MgY2FsbHMKKyAgICAg
ICAgICAgIC8vIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKCkgb25seSBhZnRlciBpdCBoYXMgdmVyaWZp
ZWQgdGhhdAorICAgICAgICAgICAgLy8gQWNjZXNzQ2FzZTo6Y291bGRTdGlsbFN1Y2NlZWQoKSBy
ZXR1cm5lZCB0cnVlLgorICAgICAgICAgICAgCiAgICAgICAgICAgICBkYXRhTG9nKCJUaGlzIGNv
bmRpdGlvbiBpcyBubyBsb25nZXIgbWV0OiAiLCBjb25kaXRpb24sICJcbiIpOwogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQpAQCAtNzg3LDcgKzgx
OCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKICAgICB9Ci0KKyAg
ICAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgSW5IaXQ6CiAgICAgY2FzZSBJbk1p
c3M6CkBAIC0xMzYzLDYgKzEzOTQsOCBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3Jw
aGljQWNjZXNzCiAgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwKICAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBvcmlnaW5hbENhc2VzVG9BZGQpCiB7CisgICAgU3Vw
ZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIAogICAgIC8vIFRo
aXMgbWV0aG9kIHdpbGwgYWRkIHRoZSBvcmlnaW5hbENhc2VzVG9BZGQgdG8gdGhlIGxpc3Qgb25l
IGF0IGEgdGltZSB3aGlsZSBwcmVzZXJ2aW5nIHRoZQogICAgIC8vIGludmFyaWFudHM6CiAgICAg
Ly8gLSBJZiBhIG5ld2x5IGFkZGVkIGNhc2UgY2FuUmVwbGFjZSgpIGFueSBleGlzdGluZyBjYXNl
LCB0aGVuIHRoZSBleGlzdGluZyBjYXNlIGlzIHJlbW92ZWQgYmVmb3JlCkBAIC0xNTAzLDYgKzE1
MzYsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6CiAgICAgVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwKICAgICBQb2x5bW9ycGhpY0FjY2Vzczo6TGlzdFR5cGUm
IGNhc2VzKQogeworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNl
KTsKKyAgICAKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiR2VuZXJhdGluZyBj
b2RlIGZvciBjYXNlczogIiwgbGlzdER1bXAoY2FzZXMpLCAiXG4iKTsKICAgICAKQEAgLTE1Mzgs
NiArMTU3Myw5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2VzczoKICAg
ICBib29sIGFsbEd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrID0gdHJ1ZTsKICAgICBib29sIGhhc0pT
R2V0dGVyU2V0dGVyQ2FsbCA9IGZhbHNlOwogICAgIGZvciAoYXV0byYgZW50cnkgOiBjYXNlcykg
eworICAgICAgICBmb3IgKFdhdGNocG9pbnRTZXQqIHNldCA6IGVudHJ5LT5jb21taXQodm0sIGlk
ZW50KSkKKyAgICAgICAgICAgIHNldC0+YWRkKHN0YXRlLmFkZFdhdGNocG9pbnQoKSk7CisgICAg
ICAgIAogICAgICAgICBhbGxHdWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayAmPSBlbnRyeS0+Z3VhcmRl
ZEJ5U3RydWN0dXJlQ2hlY2soKTsKICAgICAgICAgaWYgKGVudHJ5LT50eXBlKCkgPT0gQWNjZXNz
Q2FzZTo6R2V0dGVyIHx8IGVudHJ5LT50eXBlKCkgPT0gQWNjZXNzQ2FzZTo6U2V0dGVyKQogICAg
ICAgICAgICAgaGFzSlNHZXR0ZXJTZXR0ZXJDYWxsID0gdHJ1ZTsKQEAgLTE1NzIsNyArMTYxMCw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2VzczoKICAgICAgICAgICAg
IGNhc2VzW2JpbmFyeVN3aXRjaC5jYXNlSW5kZXgoKV0tPmdlbmVyYXRlKHN0YXRlKTsKICAgICAg
ICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGJpbmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgp
KTsKICAgICB9Ci0KKyAgICAKICAgICBpZiAoIXN0YXRlLmZhaWxBbmRJZ25vcmUuZW1wdHkoKSkg
ewogICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmxpbmsoJmppdCk7CiAgICAgICAgIApAQCAt
MTc2Myw2ICsxODAxLDIzIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBB
Y2MKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQWNjZXNzQ2FzZTo6U3RhdGUgc3RhdGUpCit7CisgICAg
c3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgQWNjZXNzQ2FzZTo6UHJpbW9yZGlhbDoKKyAgICAg
ICAgb3V0LnByaW50KCJQcmltb3JkaWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFj
Y2Vzc0Nhc2U6OkNvbW1pdHRlZDoKKyAgICAgICAgb3V0LnByaW50KCJDb21taXR0ZWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6R2VuZXJhdGVkOgorICAgICAgICBv
dXQucHJpbnQoIkdlbmVyYXRlZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDE5OTI4NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NywxMSArNDcsNTAgQEAgY2xhc3MgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOwog
CiBzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlOwogCisvLyBBbiBBY2Nlc3NDYXNlIGRlc2Ny
aWJlcyBvbmUgb2YgdGhlIGNhc2VzIG9mIGEgUG9seW1vcnBoaWNBY2Nlc3MuIEEgUG9seW1vcnBo
aWNBY2Nlc3MgcmVwcmVzZW50cyBhCisvLyBwbGFubmVkICh0byBnZW5lcmF0ZSBpbiBmdXR1cmUp
IG9yIGdlbmVyYXRlZCBzdHViIGZvciBzb21lIGlubGluZSBjYWNoZS4gVGhhdCBzdHViIGNvbnRh
aW5zIGZhc3QKKy8vIHBhdGggY29kZSBmb3Igc29tZSBmaW5pdGUgbnVtYmVyIG9mIGZhc3QgY2Fz
ZXMsIGVhY2ggZGVzY3JpYmVkIGJ5IGFuIEFjY2Vzc0Nhc2Ugb2JqZWN0LgorLy8KKy8vIEFuIEFj
Y2Vzc0Nhc2Ugb2JqZWN0IGhhcyBhIGxpZmVjeWNsZSB0aGF0IHByb2NlZWRzIHRocm91Z2ggc2V2
ZXJhbCBzdGF0ZXMuIE5vdGUgdGhhdCB0aGUgc3RhdGVzCisvLyBvZiBBY2Nlc3NDYXNlIGhhdmUg
YSBsb3QgdG8gZG8gd2l0aCB0aGUgZ2xvYmFsIGVmZmVjdCBlcG9jaCAod2UnbGwgc2F5IGVwb2No
IGZvciBzaG9ydCkuIFRoaXMgaXMKKy8vIGEgc2ltcGxlIHdheSBvZiByZWFzb25pbmcgYWJvdXQg
dGhlIHN0YXRlIG9mIHRoZSBzeXN0ZW0gb3V0c2lkZSB0aGlzIEFjY2Vzc0Nhc2UuIEFueSBvYnNl
cnZhYmxlCisvLyBlZmZlY3QgLSBsaWtlIHN0b3JpbmcgdG8gYSBwcm9wZXJ0eSwgY2hhbmdpbmcg
YW4gb2JqZWN0J3Mgc3RydWN0dXJlLCBldGMuIC0gaW5jcmVtZW50cyB0aGUgZXBvY2guCisvLyBU
aGUgc3RhdGVzIGFyZToKKy8vCisvLyBQcmltb3JkaWFsOiAgIFRoaXMgaXMgYW4gQWNjZXNzQ2Fz
ZSB0aGF0IHdhcyBqdXN0IGFsbG9jYXRlZC4gSXQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbnkg
YWN0dWFsCisvLyAgICAgICAgICAgICAgIGNvZGUgYW5kIGl0IGlzIG5vdCBvd25lZCBieSBhbnkg
UG9seW1vcnBoaWNBY2Nlc3MuIEluIHRoaXMgc3RhdGUsIHRoZSBBY2Nlc3NDYXNlCisvLyAgICAg
ICAgICAgICAgIGFzc3VtZXMgdGhhdCBpdCBpcyBpbiB0aGUgc2FtZSBlcG9jaCBhcyB3aGVuIGl0
IHdhcyBjcmVhdGVkLiBUaGlzIGlzIGltcG9ydGFudAorLy8gICAgICAgICAgICAgICBiZWNhdXNl
IGl0IG1heSBtYWtlIGNsYWltcyBhYm91dCBpdHNlbGYgKCJJIHJlcHJlc2VudCBhIHZhbGlkIGNh
c2Ugc28gbG9uZyBhcyB5b3UKKy8vICAgICAgICAgICAgICAgcmVnaXN0ZXIgYSB3YXRjaHBvaW50
IG9uIHRoaXMgc2V0IikgdGhhdCBjb3VsZCBiZSBjb250cmFkaWN0ZWQgYnkgc29tZSBvdXRzaWRl
CisvLyAgICAgICAgICAgICAgIGVmZmVjdHMgKGxpa2UgZmlyaW5nIGFuZCBkZWxldGluZyB0aGUg
d2F0Y2hwb2ludCBzZXQgaW4gcXVlc3Rpb24pLiBUaGlzIGlzIGFsc28gdGhlCisvLyAgICAgICAg
ICAgICAgIHN0YXRlIHRoYXQgYW4gQWNjZXNzQ2FzZSBpcyBpbiB3aGVuIGl0IGlzIGNsb25lZCAo
QWNjZXNzQ2FzZTo6Y2xvbmUoKSkuCisvLworLy8gQ29tbWl0dGVkOiAgICBUaGlzIGhhcHBlbnMg
YXMgc29vbiBhcyBzb21lIFBvbHltb3JwaGljQWNjZXNzIHRha2VzIG93bmVyc2hpcCBvZiB0aGlz
IEFjY2Vzc0Nhc2UuCisvLyAgICAgICAgICAgICAgIEluIHRoaXMgc3RhdGUsIHRoZSBBY2Nlc3ND
YXNlIG5vIGxvbmdlciBhc3N1bWVzIGFueXRoaW5nIGFib3V0IHRoZSBlcG9jaC4gVG8KKy8vICAg
ICAgICAgICAgICAgYWNjb21wbGlzaCB0aGlzLCBQb2x5bW9ycGhpY0FjY2VzcyBjYWxscyBBY2Nl
c3NDYXNlOjpjb21taXQoKS4gVGhpcyBtdXN0IGJlIGRvbmUKKy8vICAgICAgICAgICAgICAgZHVy
aW5nIHRoZSBzYW1lIGVwb2NoIHdoZW4gdGhlIEFjY2Vzc0Nhc2Ugd2FzIGNyZWF0ZWQsIGVpdGhl
ciBieSB0aGUgY2xpZW50IG9yIGJ5CisvLyAgICAgICAgICAgICAgIGNsb25lKCkuIFdoZW4gY3Jl
YXRlZCBieSB0aGUgY2xpZW50LCBjb21taXR0aW5nIGR1cmluZyB0aGUgc2FtZSBlcG9jaCB3b3Jr
cyBiZWNhdXNlCisvLyAgICAgICAgICAgICAgIHdlIGNhbiBiZSBzdXJlIHRoYXQgd2hhdGV2ZXIg
d2F0Y2hwb2ludCBzZXRzIHRoZXkgc3Bva2Ugb2YgYXJlIHN0aWxsIHZhbGlkLiBXaGVuCisvLyAg
ICAgICAgICAgICAgIGNyZWF0ZWQgYnkgY2xvbmUoKSwgd2UgY2FuIGJlIHN1cmUgdGhhdCB0aGUg
c2V0IGlzIHN0aWxsIHZhbGlkIGJlY2F1c2UgdGhlIG9yaWdpbmFsCisvLyAgICAgICAgICAgICAg
IG9mIHRoZSBjbG9uZSBzdGlsbCBoYXMgd2F0Y2hwb2ludHMgb24gaXQuCisvLworLy8gR2VuZXJh
dGVkOiAgICBUaGlzIGlzIHRoZSBzdGF0ZSB3aGVuIHRoZSBQb2x5bW9ycGhpY0FjY2VzcyBnZW5l
cmF0ZXMgY29kZSBmb3IgdGhpcyBjYXNlIGJ5CisvLyAgICAgICAgICAgICAgIGNhbGxpbmcgQWNj
ZXNzQ2FzZTo6Z2VuZXJhdGUoKSBvciBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgpLiBB
dCB0aGlzIHBvaW50CisvLyAgICAgICAgICAgICAgIHRoZSBjYXNlIG9iamVjdCB3aWxsIGhhdmUg
c29tZSBleHRyYSBzdHVmZiBpbiBpdCwgbGlrZSBwb3NzaWJseSB0aGUgQ2FsbExpbmtJbmZvCisv
LyAgICAgICAgICAgICAgIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGlubGluZSBjYWNoZS4K
Ky8vICAgICAgICAgICAgICAgRklYTUU6IE1vdmluZyBpbnRvIHRoZSBHZW5lcmF0ZWQgc3RhdGUg
c2hvdWxkIG5vdCBtdXRhdGUgdGhlIEFjY2Vzc0Nhc2Ugb2JqZWN0IG9yCisvLyAgICAgICAgICAg
ICAgIHB1dCBtb3JlIHN0dWZmIGludG8gaXQuIElmIHdlIGZpeCB0aGlzLCB0aGVuIHdlIGNhbiBn
ZXQgcmlkIG9mIEFjY2Vzc0Nhc2U6OmNsb25lKCkuCisvLworLy8gQW4gQWNjZXNzQ2FzZSBtYXkg
YmUgZGVzdHJveWVkIHdoaWxlIGluIGFueSBvZiB0aGVzZSBzdGF0ZXMuCisvLworLy8gTm90ZSB0
aGF0IHJpZ2h0IG5vdywgYW4gQWNjZXNzQ2FzZSBnb2VzIGZyb20gUHJpbW9yZGlhbCB0byBHZW5l
cmF0ZWQgcXVpdGUgcXVpY2tseS4KKy8vIEZJWE1FOiBNYWtlIGl0IHBvc3NpYmxlIGZvciBQb2x5
bW9ycGhpY0FjY2VzcyB0byBob2xkIG9udG8gQWNjZXNzQ2FzZXMgdGhhdCBoYXZlbid0IGJlZW4K
Ky8vIGdlbmVyYXRlZC4gVGhhdCB3b3VsZCBhbGxvdyB1cyB0byBzaWduaWZpY2FudGx5IHJlZHVj
ZSB0aGUgbnVtYmVyIG9mIHJlZ2VuZXJhdGlvbiBldmVudHMuCiBjbGFzcyBBY2Nlc3NDYXNlIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBY2Nlc3NDYXNlKTsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBlbnVtIEFjY2Vzc1R5cGUgeworICAgIGVudW0gQWNj
ZXNzVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBMb2FkLAogICAgICAgICBNZWdhbW9ycGhpY0xv
YWQsCiAgICAgICAgIFRyYW5zaXRpb24sCkBAIC03Miw2ICsxMTEsMTIgQEAgcHVibGljOgogICAg
ICAgICBEaXJlY3RBcmd1bWVudHNMZW5ndGgsCiAgICAgICAgIFNjb3BlZEFyZ3VtZW50c0xlbmd0
aAogICAgIH07CisgICAgCisgICAgZW51bSBTdGF0ZSA6IHVpbnQ4X3QgeworICAgICAgICBQcmlt
b3JkaWFsLAorICAgICAgICBDb21taXR0ZWQsCisgICAgICAgIEdlbmVyYXRlZAorICAgIH07CiAK
ICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHRyeUdldCgKICAgICAgICAg
Vk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJl
KiwKQEAgLTExMSw5ICsxNTYsOCBAQCBwdWJsaWM6CiAKICAgICB+QWNjZXNzQ2FzZSgpOwogICAg
IAotICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjbG9uZSgpIGNvbnN0OwotICAgIAog
ICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIFN0YXRl
IHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CiAgICAgYm9vbCB2aWFQcm94eSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT52aWFQcm94eSA6IGZhbHNlOyB9
CiAgICAgCkBAIC0xNzYsOCArMjIwLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLmdldCgpOwog
ICAgIH0KLQotICAgIC8vIElzIGl0IHN0aWxsIHBvc3NpYmxlIGZvciB0aGlzIGNhc2UgdG8gZXZl
ciBiZSB0YWtlbj8KKyAgICAKKyAgICAvLyBJcyBpdCBzdGlsbCBwb3NzaWJsZSBmb3IgdGhpcyBj
YXNlIHRvIGV2ZXIgYmUgdGFrZW4/ICBNdXN0IGNhbGwgdGhpcyBhcyBhIHByZXJlcXVpc2l0ZSBm
b3IKKyAgICAvLyBjYWxsaW5nIGdlbmVyYXRlKCkgYW5kIGZyaWVuZHMuICBJZiB0aGlzIHJldHVy
bnMgdHJ1ZSwgdGhlbiB5b3UgY2FuIGNhbGwgZ2VuZXJhdGUoKS4gIElmCisgICAgLy8gdGhpcyBy
ZXR1cm5zIGZhbHNlLCB0aGVuIGdlbmVyYXRlKCkgd2lsbCBjcmFzaC4gIFlvdSBtdXN0IGNhbGwg
Z2VuZXJhdGUoKSBpbiB0aGUgc2FtZSBlcG9jaAorICAgIC8vIGFzIHdoZW4geW91IGNhbGxlZCBj
b3VsZFN0aWxsR2VuZXJhdGUoKS4KICAgICBib29sIGNvdWxkU3RpbGxTdWNjZWVkKCkgY29uc3Q7
CiAgICAgCiAgICAgc3RhdGljIGJvb2wgY2FuRW1pdEludHJpbnNpY0dldHRlcihKU0Z1bmN0aW9u
KiwgU3RydWN0dXJlKik7CkBAIC0xOTgsNiArMjQ1LDEzIEBAIHByaXZhdGU6CiAgICAgQWNjZXNz
Q2FzZSgpOwogCiAgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKKyAgICAKKyAgICAvLyBG
SVhNRTogVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIG9mIGhvdyBBY2Nlc3NDYXNlIHB1dHMgcG9z
dC1nZW5lcmF0aW9uIHRoaW5ncyBpbnRvIGl0c2VsZi4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4gY2xvbmUoKSBjb25zdDsKKyAgICAKKyAgICAvLyBQZXJmb3JtIGFueSBhY3Rpb24g
dGhhdCB0aGF0IG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBlcG9jaCBp
biB3aGljaCB0aGUgY2FzZQorICAgIC8vIHdhcyBjcmVhdGVkLiBSZXR1cm5zIGEgc2V0IG9mIHdh
dGNocG9pbnQgc2V0cyB0aGF0IHdpbGwgbmVlZCB0byBiZSB3YXRjaGVkLgorICAgIFZlY3RvcjxX
YXRjaHBvaW50U2V0KiwgMj4gY29tbWl0KFZNJiwgY29uc3QgSWRlbnRpZmllciYpOwogCiAgICAg
Ly8gRmFsbCB0aHJvdWdoIG9uIHN1Y2Nlc3MuIFR3byBraW5kcyBvZiBmYWlsdXJlcyBhcmUgc3Vw
cG9ydGVkOiBmYWxsLXRocm91Z2gsIHdoaWNoIG1lYW5zIHRoYXQgd2UKICAgICAvLyBzaG91bGQg
dHJ5IGEgZGlmZmVyZW50IGNhc2U7IGFuZCBmYWlsdXJlLCB3aGljaCBtZWFucyB0aGF0IHRoaXMg
d2FzIHRoZSByaWdodCBjYXNlIGJ1dCBpdCBuZWVkcwpAQCAtMjA2LDkgKzI2MCwxMiBAQCBwcml2
YXRlOgogCiAgICAgLy8gRmFsbCB0aHJvdWdoIG9uIHN1Y2Nlc3MsIGFkZCBhIGp1bXAgdG8gdGhl
IGZhaWx1cmUgbGlzdCBvbiBmYWlsdXJlLgogICAgIHZvaWQgZ2VuZXJhdGUoQWNjZXNzR2VuZXJh
dGlvblN0YXRlJik7CisgICAgCisgICAgdm9pZCBnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlv
blN0YXRlJik7CiAgICAgdm9pZCBlbWl0SW50cmluc2ljR2V0dGVyKEFjY2Vzc0dlbmVyYXRpb25T
dGF0ZSYpOwogICAgIAogICAgIEFjY2Vzc1R5cGUgbV90eXBlIHsgTG9hZCB9OworICAgIFN0YXRl
IG1fc3RhdGUgeyBQcmltb3JkaWFsIH07CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQgeyBp
bnZhbGlkT2Zmc2V0IH07CiAKICAgICAvLyBVc3VhbGx5IHRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0
aGF0IHdlIGV4cGVjdCB0aGUgYmFzZSBvYmplY3QgdG8gaGF2ZS4gQnV0LCB0aGlzIGlzIHRoZSAq
bmV3KgpAQCAtMjI5LDYgKzI4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBib29s
IHZpYVByb3h5OwogICAgICAgICBSZWZQdHI8V2F0Y2hwb2ludFNldD4gYWRkaXRpb25hbFNldDsK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGxpdmUgaW4gdGhlIHN0dWIg
cm91dGluZSBvYmplY3QuCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua0luZm8+IGNh
bGxMaW5rSW5mbzsKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgUHJvcGVydHlTbG90OjpH
ZXRWYWx1ZUZ1bmMgZ2V0dGVyOwpAQCAtMzQyLDcgKzQwMCw3IEBAIHByaXZhdGU6CiAKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVnZW5lcmF0ZSgKICAgICAgICAgVk0mLCBDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElkZW50aWZpZXImLCBMaXN0VHlwZSYgY2FzZXMp
OwotCisgICAgCiAgICAgTGlzdFR5cGUgbV9saXN0OwogICAgIFJlZlB0cjxKSVRTdHViUm91dGlu
ZT4gbV9zdHViUm91dGluZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludHNPblN0cnVj
dHVyZVN0dWJJbmZvPiBtX3dhdGNocG9pbnRzOwpAQCAtNDMzLDYgKzQ5MSw3IEBAIG5hbWVzcGFj
ZSBXVEYgewogCiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkFjY2Vzc0dl
bmVyYXRpb25SZXN1bHQ6OktpbmQpOwogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlKTsKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6QWNjZXNzQ2FzZTo6U3RhdGUpOwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uY3BwCShyZXZpc2lvbiAxOTkyODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsOSAr
MTEyLDEyIEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3RydWN0dXJlU3R1YkluZm8KICAgICBp
ZiAoIWFjY2Vzc0Nhc2UpCiAgICAgICAgIHJldHVybiBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjpH
YXZlVXA7CiAgICAgCi0gICAgaWYgKGNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCisgICAg
aWYgKGNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpIHsKKyAgICAgICAgU3VwZXJTYW1wbGVy
U2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUodHJ1ZSk7CisgICAgCiAgICAgICAgIHJldHVybiB1LnN0
dWItPnJlZ2VuZXJhdGVXaXRoQ2FzZSh2bSwgY29kZUJsb2NrLCAqdGhpcywgaWRlbnQsIFdURk1v
dmUoYWNjZXNzQ2FzZSkpOwotCisgICAgfQorICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxQb2x5
bW9ycGhpY0FjY2Vzcz4gYWNjZXNzID0gc3RkOjptYWtlX3VuaXF1ZTxQb2x5bW9ycGhpY0FjY2Vz
cz4oKTsKICAgICAKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBhY2Nl
c3NDYXNlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9p
bnQuaAkocmV2aXNpb24gMTk5Mjg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsOSBAQCBjbGFzcyBXYXRj
aHBvaW50U2V0IDogcHVibGljIFRocmVhZFNhZmVSCiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBXYXRjaHBvaW50
U2V0KFdhdGNocG9pbnRTdGF0ZSk7CisgICAgCisgICAgLy8gRklYTUU6IEluIG1hbnkgY2FzZXMs
IGl0IHdvdWxkIGJlIGFtYXppbmcgaWYgdGhpcyAqZGlkKiBmaXJlIHRoZSB3YXRjaHBvaW50cy4g
SSBzdXNwZWN0IHRoYXQKKyAgICAvLyB0aGlzIG1pZ2h0IGJlIGhhcmQgdG8gZ2V0IHJpZ2h0LCBi
dXQgc3RpbGwsIGl0IG1pZ2h0IGJlIGF3ZXNvbWUuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfldh
dGNocG9pbnRTZXQoKTsgLy8gTm90ZSB0aGF0IHRoaXMgd2lsbCBub3QgZmlyZSBhbnkgb2YgdGhl
IHdhdGNocG9pbnRzOyBpZiB5b3UgbmVlZCB0byBrbm93IHdoZW4gYSBXYXRjaHBvaW50U2V0IGRp
ZXMgdGhlbiB5b3UgbmVlZCBhIHNlcGFyYXRlIG1lY2hhbmlzbSBmb3IgdGhpcy4KICAgICAKICAg
ICAvLyBGYXN0IHdheSBvZiBnZXR0aW5nIHRoZSBzdGF0ZSwgd2hpY2ggb25seSB3b3JrcyBmcm9t
IHRoZSBtYWluIHRocmVhZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTk5Mjg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkxLDcgKzY5MSw3IEBA
IHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QKIAogc2l6ZV90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdEdlbmVyaWMoRXhlY1N0YXRlKiBleGVjLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50KQogewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1
cGVyU2FtcGxlclNjb3BlOworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3Bl
KGZhbHNlKTsKICAgICAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxOTkyODcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzksNiArMzc5LDcg
QEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJRAogCiB2b2lkIHJlcGF0
Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIEdldEJ5SURLaW5kIGtpbmQpCiB7CisgICAgU3VwZXJTYW1wbGVy
U2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZtKCkuaGVhcCk7
CiAgICAgCiAgICAgaWYgKHRyeUNhY2hlR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5
TmFtZSwgc2xvdCwgc3R1YkluZm8sIGtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCkBAIC01MzMsNiAr
NTM0LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogCiB2b2lk
IHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1
dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5k
IHB1dEtpbmQpCiB7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFs
c2UpOwogICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9j
aygpLT5tX2xvY2ssIGV4ZWMtPnZtKCkuaGVhcCk7CiAgICAgCiAgICAgaWYgKHRyeUNhY2hlUHV0
QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHVi
SW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKQEAgLTU5Niw2ICs1OTgsNyBAQCB2b2lk
IHJlcGF0Y2hJbigKICAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIGJvb2wgd2FzRm91bmQsCiAgICAgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CisgICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIGlmICh0cnlSZXBhdGNoSW4oZXhlYywg
YmFzZSwgaWRlbnQsIHdhc0ZvdW5kLCBzbG90LCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkK
ICAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgb3BlcmF0aW9uSW4pOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAkocmV2aXNpb24gMTk5Mjg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTUsMTIgKzc1NSwxNyBAQCB2b2lkIFZN
OjpkdW1wUmVnRXhwVHJhY2UoKQogfQogI2VuZGlmCiAKLXZvaWQgVk06OnJlZ2lzdGVyV2F0Y2hw
b2ludEZvckltcHVyZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgV2F0
Y2hwb2ludCogd2F0Y2hwb2ludCkKK1dhdGNocG9pbnRTZXQqIFZNOjplbnN1cmVXYXRjaHBvaW50
U2V0Rm9ySW1wdXJlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewog
ICAgIGF1dG8gcmVzdWx0ID0gbV9pbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnRTZXRzLmFkZChwcm9w
ZXJ0eU5hbWUuc3RyaW5nKCksIG51bGxwdHIpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkK
ICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50
U2V0KElzV2F0Y2hlZCkpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmFkZCh3YXRjaHBv
aW50KTsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKK30KKwordm9p
ZCBWTTo6cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkoY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQoreworICAgIGVuc3VyZVdh
dGNocG9pbnRTZXRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpLT5hZGQod2F0Y2hwb2lu
dCk7CiB9CiAKIHZvaWQgVk06OmFkZEltcHVyZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlOYW1lKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxOTky
ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01ODAsNiArNTgwLDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZGVsZXRlQWxsTGlua2VkQ29kZSgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVsZXRl
QWxsUmVnRXhwQ29kZSgpOwogCisgICAgV2F0Y2hwb2ludFNldCogZW5zdXJlV2F0Y2hwb2ludFNl
dEZvckltcHVyZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImKTsKICAgICB2b2lkIHJlZ2lzdGVy
V2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImLCBXYXRjaHBvaW50
Kik7CiAgICAgCiAgICAgLy8gRklYTUU6IFVzZSBBdG9taWNTdHJpbmcgb25jZSBpdCBnb3QgbWVy
Z2VkIHdpdGggSWRlbnRpZmllci4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276115</attachid>
            <date>2016-04-10 16:47:30 -0700</date>
            <delta_ts>2016-04-11 10:35:11 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22748</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk5Mjg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBA
CisyMDE2LTA0LTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q2xlYW4gdXAgaG93IHdlIHJlYXNvbiBhYm91dCB0aGUgc3RhdGVzIG9mIEFjY2Vzc0Nhc2VzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY0NTQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEN1
cnJlbnRseSB3aGVuIHdlIGFkZCBhbiBBY2Nlc3NDYXNlIHRvIGEgUG9seW1vcnBoaWNBY2Nlc3Mg
c3R1Yiwgd2UgcmVnZW5lcmF0ZSB0aGUgc3R1Yi4KKyAgICAgICAgVGhhdCBtZWFucyB0aGF0IGFz
IHdlIGdyb3cgYSBzdHViIHRvIGhhdmUgTiBjYXNlcywgd2Ugd2lsbCBkbyBPKE5eMikgZ2VuZXJh
dGlvbiB3b3JrLiBJIHdhbnQKKyAgICAgICAgdG8gZXhwbG9yZSBidWZmZXJpbmcgQWNjZXNzQ2Fz
ZXMgc28gdGhhdCB3ZSBjYW4gZG8gTyhOKSBnZW5lcmF0aW9uIHdvcmsgaW5zdGVhZC4gQnV0IHRv
CisgICAgICAgIGJlZm9yZSBJIGdvIHRoZXJlLCBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhl
IHN0YXRlZnVsbmVzcyBvZiBBY2Nlc3NDYXNlIG1ha2VzIHNlbnNlLiBTbywKKyAgICAgICAgSSBi
cm9rZSBpdCBkb3duIGludG8gdGhyZWUgZGlmZmVyZW50IHN0YXRlcyBhbmQgYWRkZWQgYXNzZXJ0
aW9ucyBhYm91dCB0aGUgdHJhbnNpdGlvbnMuIEkKKyAgICAgICAgYWxzbyBicm9rZSBvdXQgYSBz
ZXBhcmF0ZSBvcGVyYXRpb24gY2FsbGVkIEFjY2Vzc0Nhc2U6OmNvbW1pdCgpLCB3aGljaCBpcyB0
aGUgd29yayB0aGF0CisgICAgICAgIGNhbm5vdCBiZSBidWZmZXJlZCBzaW5jZSB0aGVyZSBjYW5u
b3QgYmUgYW55IEpTIGVmZmVjdHMgYmV0d2VlbiB3aGVuIHRoZSBBY2Nlc3NDYXNlIHdhcworICAg
ICAgICBjcmVhdGVkIGFuZCB3aGVuIHdlIGRvIHRoZSB3b3JrIGluIGNvbW1pdCgpLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBvcGVucyB1cCBhIGZhaXJseSBvYnZpb3VzIHBhdGggdG8gYnVmZmVy
aW5nIEFjY2Vzc0Nhc2VzOiBhZGQgdGhlbSB0byB0aGUgbGlzdCB3aXRob3V0CisgICAgICAgIHJl
Z2VuZXJhdGluZy4gVGhlbiB3aGVuIHdlIGRvIGV2ZW50dWFsbHkgdHJpZ2dlciByZWdlbmVyYXRp
b24sIHRob3NlIGNhc2VzIHdpbGwgZ2V0IGNsb25lZAorICAgICAgICBhbmQgZ2VuZXJhdGVkIGF1
dG9tYWdpY2FsbHkuIFRoaXMgcGF0Y2ggZG9lc24ndCBpbXBsZW1lbnQgdGhpcyB0ZWNobmlxdWUg
eWV0LCBidXQgZ2l2ZXMgdXMKKyAgICAgICAgYW4gb3Bwb3J0dW5pdHkgdG8gaW5kZXBlbmRlbnRs
eSB0ZXN0IHRoZSBzY2FmZm9sZGluZyBuZWNlc3NhcnkgdG8gZG8gaXQuCisKKyAgICAgICAgVGhp
cyBpcyBwZXJmLW5ldXRyYWwgb24gbG90cyBvZiB0ZXN0cy4KKworICAgICAgICAqIGJ5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblJl
c3VsdDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNsb25lKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6Y29tbWl0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z3Vh
cmRlZEJ5U3RydWN0dXJlQ2hlY2spOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpkdW1wKToK
KyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQpOgorICAgICAgICAo
SlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Omdl
bmVyYXRlSW1wbCk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRl
V2l0aENhc2VzKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUp
OgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5oOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp0eXBlKToKKyAgICAg
ICAgKEpTQzo6QWNjZXNzQ2FzZTo6c3RhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpv
ZmZzZXQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp2aWFQcm94eSk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6OmNhbGxMaW5rSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNj
ZXNzQ2FzZSk6CisgICAgICAgICogYnl0ZWNvZGUvV2F0Y2hwb2ludC5oOgorICAgICAgICAqIGRm
Zy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAg
IChKU0M6OnJlcGF0Y2hHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaFB1dEJ5SUQpOgor
ICAgICAgICAoSlNDOjpyZXBhdGNoSW4pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAg
ICAgICAoSlNDOjpWTTo6ZHVtcFJlZ0V4cFRyYWNlKToKKyAgICAgICAgKEpTQzo6Vk06OmVuc3Vy
ZVdhdGNocG9pbnRTZXRGb3JJbXB1cmVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlZNOjpyZWdp
c3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlZNOjphZGRJ
bXB1cmVQcm9wZXJ0eSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDE2LTA0LTA5ICBL
ZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIHRyeUdldEJ5
SWQgc2hvdWxkIGJlIHN1cHBvcnRlZCBieSB0aGUgREZHL0ZUTApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZp
c2lvbiAxOTkyODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCwxNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCisvLyBFbmNvZGVk
SlNWYWx1ZSBpbiBKU1ZBTFVFMzJfNjQgaXMgYSA2NC1iaXQgaW50ZWdlci4gV2hlbiBiZWluZyBj
b21waWxlZCBpbiBBUk0gRUFCSSwgaXQgbXVzdCBiZSBhbGlnbmVkIG9uIGFuIGV2ZW4tbnVtYmVy
ZWQgcmVnaXN0ZXIgKHIwLCByMiBvciBbc3BdKS4KKy8vIFRvIHByZXZlbnQgdGhlIGFzc2VtYmxl
ciBmcm9tIHVzaW5nIHdyb25nIHJlZ2lzdGVycywgbGV0J3Mgb2NjdXB5IHIxIG9yIHIzIHdpdGgg
YSBkdW1teSBhcmd1bWVudCB3aGVuIG5lY2Vzc2FyeS4KKyNpZiAoQ09NUElMRVJfU1VQUE9SVFMo
RUFCSSkgJiYgQ1BVKEFSTSkpIHx8IENQVShNSVBTKQorI2RlZmluZSBFQUJJXzMyQklUX0RVTU1Z
X0FSRyAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLAorI2Vsc2UKKyNkZWZpbmUg
RUFCSV8zMkJJVF9EVU1NWV9BUkcKKyNlbmRpZgorCiB2b2lkIEFjY2Vzc0dlbmVyYXRpb25SZXN1
bHQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQobV9raW5k
KTsKQEAgLTM4OSw2ICszOTcsMjQgQEAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vz
c0Nhc2U6OgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1ZlY3RvcjxXYXRjaHBvaW50U2V0Kiwg
Mj4gQWNjZXNzQ2FzZTo6Y29tbWl0KFZNJiB2bSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBQcmltb3JkaWFsKTsKKyAgICAKKyAgICBW
ZWN0b3I8V2F0Y2hwb2ludFNldCosIDI+IHJlc3VsdDsKKyAgICAKKyAgICBpZiAoKHN0cnVjdHVy
ZSgpICYmIHN0cnVjdHVyZSgpLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAg
ICAgIHx8IG1fY29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZCh2bS5lbnN1cmVXYXRjaHBvaW50U2V0Rm9ySW1wdXJlUHJvcGVy
dHkoaWRlbnQpKTsKKworICAgIGlmIChhZGRpdGlvbmFsU2V0KCkpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoYWRkaXRpb25hbFNldCgpKTsKKyAgICAKKyAgICBtX3N0YXRlID0gQ29tbWl0dGVkOwor
ICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIGJvb2wgQWNjZXNzQ2FzZTo6Z3VhcmRlZEJ5
U3RydWN0dXJlQ2hlY2soKSBjb25zdAogewogICAgIGlmICh2aWFQcm94eSgpKQpAQCAtNDcwLDYg
KzQ5Niw4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSAKICAgICBv
dXQucHJpbnQobV90eXBlLCAiOigiKTsKIAogICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICAK
KyAgICBvdXQucHJpbnQoY29tbWEsIG1fc3RhdGUpOwogCiAgICAgaWYgKG1fdHlwZSA9PSBUcmFu
c2l0aW9uKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJzdHJ1Y3R1cmUgPSAiLCBwb2ludGVy
RHVtcChzdHJ1Y3R1cmUoKSksICIgLT4gIiwgcG9pbnRlckR1bXAobmV3U3RydWN0dXJlKCkpKTsK
QEAgLTUxNyw2ICs1NDUsMTEgQEAgYm9vbCBBY2Nlc3NDYXNlOjp2aXNpdFdlYWsoVk0mIHZtKSBj
b25zdAogdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICBBY2Nlc3NHZW5l
cmF0aW9uU3RhdGUmIHN0YXRlLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCkK
IHsKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlID09IENvbW1pdHRlZCk7CisgICAgbV9zdGF0ZSA9IEdl
bmVyYXRlZDsKKyAgICAKICAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5qaXQ7CiAgICAg
Vk0mIHZtID0gKmppdC52bSgpOwogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gKnN0YXRl
LmlkZW50OwpAQCAtNzMwLDE5ICs3NjMsMjAgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdp
dGhHdWFyZCgKICAgICAgICAgYnJlYWs7CiAgICAgfSB9OwogCi0gICAgZ2VuZXJhdGUoc3RhdGUp
OworICAgIGdlbmVyYXRlSW1wbChzdGF0ZSk7CiB9CiAKLS8vIEVuY29kZWRKU1ZhbHVlIGluIEpT
VkFMVUUzMl82NCBpcyBhIDY0LWJpdCBpbnRlZ2VyLiBXaGVuIGJlaW5nIGNvbXBpbGVkIGluIEFS
TSBFQUJJLCBpdCBtdXN0IGJlIGFsaWduZWQgb24gYW4gZXZlbi1udW1iZXJlZCByZWdpc3RlciAo
cjAsIHIyIG9yIFtzcF0pLgotLy8gVG8gcHJldmVudCB0aGUgYXNzZW1ibGVyIGZyb20gdXNpbmcg
d3JvbmcgcmVnaXN0ZXJzLCBsZXQncyBvY2N1cHkgcjEgb3IgcjMgd2l0aCBhIGR1bW15IGFyZ3Vt
ZW50IHdoZW4gbmVjZXNzYXJ5LgotI2lmIChDT01QSUxFUl9TVVBQT1JUUyhFQUJJKSAmJiBDUFUo
QVJNKSkgfHwgQ1BVKE1JUFMpCi0jZGVmaW5lIEVBQklfMzJCSVRfRFVNTVlfQVJHICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCksCi0jZWxzZQotI2RlZmluZSBFQUJJXzMyQklUX0RV
TU1ZX0FSRwotI2VuZGlmCi0KIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJh
dGlvblN0YXRlJiBzdGF0ZSkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlID09IENvbW1p
dHRlZCk7CisgICAgbV9zdGF0ZSA9IEdlbmVyYXRlZDsKKyAgICAKKyAgICBnZW5lcmF0ZUltcGwo
c3RhdGUpOworfQorCit2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0
aW9uU3RhdGUmIHN0YXRlKQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNj
b3BlKGZhbHNlKTsKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiR2VuZXJhdGlu
ZyBjb2RlIGZvcjogIiwgKnRoaXMsICJcbiIpOwogICAgIApAQCAtNzU3LDEzICs3OTEsNiBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAKICAgICBBU1NFUlQobV9j
b25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKSk7CiAKLSAgICBpZiAoKHN0cnVjdHVyZSgpICYmIHN0cnVjdHVyZSgpLT5u
ZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCi0gICAgICAgIHx8IG1fY29uZGl0aW9uU2V0
Lm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKLSAgICAgICAgdm0ucmVnaXN0ZXJXYXRj
aHBvaW50Rm9ySW1wdXJlUHJvcGVydHkoaWRlbnQsIHN0YXRlLmFkZFdhdGNocG9pbnQoKSk7Ci0K
LSAgICBpZiAoYWRkaXRpb25hbFNldCgpKQotICAgICAgICBhZGRpdGlvbmFsU2V0KCktPmFkZChz
dGF0ZS5hZGRXYXRjaHBvaW50KCkpOwotCiAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYgY29uZGl0aW9uIDogbV9jb25kaXRpb25TZXQpIHsKICAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOwogCkBAIC03NzMs
NiArODAwLDEwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAg
ICAgICAgfQogCiAgICAgICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0
eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpIHsKKyAgICAgICAg
ICAgIC8vIFRoZSByZWFzb24gd2h5IHRoaXMgY2Fubm90IGhhcHBlbiBpcyB0aGF0IHdlIHJlcXVp
cmUgdGhhdCBQb2x5bW9ycGhpY0FjY2VzcyBjYWxscworICAgICAgICAgICAgLy8gQWNjZXNzQ2Fz
ZTo6Z2VuZXJhdGUoKSBvbmx5IGFmdGVyIGl0IGhhcyB2ZXJpZmllZCB0aGF0CisgICAgICAgICAg
ICAvLyBBY2Nlc3NDYXNlOjpjb3VsZFN0aWxsU3VjY2VlZCgpIHJldHVybmVkIHRydWUuCisgICAg
ICAgICAgICAKICAgICAgICAgICAgIGRhdGFMb2coIlRoaXMgY29uZGl0aW9uIGlzIG5vIGxvbmdl
ciBtZXQ6ICIsIGNvbmRpdGlvbiwgIlxuIik7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICB9CkBAIC03ODcsNyArODE4LDcgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAogICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZSkpOwogICAgIH0KLQorICAgIAogICAgIHN3aXRjaCAobV90
eXBlKSB7CiAgICAgY2FzZSBJbkhpdDoKICAgICBjYXNlIEluTWlzczoKQEAgLTEzNjMsNiArMTM5
NCw4IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAgICBWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LAogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4+IG9yaWdpbmFsQ2FzZXNUb0FkZCkKIHsKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBl
clNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgCiAgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBhZGQg
dGhlIG9yaWdpbmFsQ2FzZXNUb0FkZCB0byB0aGUgbGlzdCBvbmUgYXQgYSB0aW1lIHdoaWxlIHBy
ZXNlcnZpbmcgdGhlCiAgICAgLy8gaW52YXJpYW50czoKICAgICAvLyAtIElmIGEgbmV3bHkgYWRk
ZWQgY2FzZSBjYW5SZXBsYWNlKCkgYW55IGV4aXN0aW5nIGNhc2UsIHRoZW4gdGhlIGV4aXN0aW5n
IGNhc2UgaXMgcmVtb3ZlZCBiZWZvcmUKQEAgLTE1MDMsNiArMTUzNiw4IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2VzczoKICAgICBWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LAogICAgIFBvbHltb3JwaGljQWNjZXNzOjpMaXN0VHlwZSYgY2FzZXMpCiB7CisgICAgU3Vw
ZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIAogICAgIGlmICh2
ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJHZW5lcmF0aW5nIGNvZGUgZm9yIGNhc2VzOiAiLCBs
aXN0RHVtcChjYXNlcyksICJcbiIpOwogICAgIApAQCAtMTUzOCw2ICsxNTczLDkgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOgogICAgIGJvb2wgYWxsR3VhcmRlZEJ5
U3RydWN0dXJlQ2hlY2sgPSB0cnVlOwogICAgIGJvb2wgaGFzSlNHZXR0ZXJTZXR0ZXJDYWxsID0g
ZmFsc2U7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGNhc2VzKSB7CisgICAgICAgIGZvciAoV2F0
Y2hwb2ludFNldCogc2V0IDogZW50cnktPmNvbW1pdCh2bSwgaWRlbnQpKQorICAgICAgICAgICAg
c2V0LT5hZGQoc3RhdGUuYWRkV2F0Y2hwb2ludCgpKTsKKyAgICAgICAgCiAgICAgICAgIGFsbEd1
YXJkZWRCeVN0cnVjdHVyZUNoZWNrICY9IGVudHJ5LT5ndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygp
OwogICAgICAgICBpZiAoZW50cnktPnR5cGUoKSA9PSBBY2Nlc3NDYXNlOjpHZXR0ZXIgfHwgZW50
cnktPnR5cGUoKSA9PSBBY2Nlc3NDYXNlOjpTZXR0ZXIpCiAgICAgICAgICAgICBoYXNKU0dldHRl
clNldHRlckNhbGwgPSB0cnVlOwpAQCAtMTU3Miw3ICsxNjEwLDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOgogICAgICAgICAgICAgY2FzZXNbYmluYXJ5U3dpdGNo
LmNhc2VJbmRleCgpXS0+Z2VuZXJhdGUoc3RhdGUpOwogICAgICAgICBzdGF0ZS5mYWlsQW5kUmVw
YXRjaC5hcHBlbmQoYmluYXJ5U3dpdGNoLmZhbGxUaHJvdWdoKCkpOwogICAgIH0KLQorICAgIAog
ICAgIGlmICghc3RhdGUuZmFpbEFuZElnbm9yZS5lbXB0eSgpKSB7CiAgICAgICAgIHN0YXRlLmZh
aWxBbmRJZ25vcmUubGluaygmaml0KTsKICAgICAgICAgCkBAIC0xNzYzLDYgKzE4MDEsMjMgQEAg
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFjYwogICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBBY2Nlc3NDYXNlOjpTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7Cisg
ICAgY2FzZSBBY2Nlc3NDYXNlOjpQcmltb3JkaWFsOgorICAgICAgICBvdXQucHJpbnQoIlByaW1v
cmRpYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q29tbWl0dGVk
OgorICAgICAgICBvdXQucHJpbnQoIkNvbW1pdHRlZCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpHZW5lcmF0ZWQ6CisgICAgICAgIG91dC5wcmludCgiR2VuZXJhdGVk
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuaAkocmV2aXNpb24gMTk5Mjg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDExICs0Nyw1
MiBAQCBjbGFzcyBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I7CiAKIHN0cnVjdCBBY2Nlc3NHZW5l
cmF0aW9uU3RhdGU7CiAKKy8vIEFuIEFjY2Vzc0Nhc2UgZGVzY3JpYmVzIG9uZSBvZiB0aGUgY2Fz
ZXMgb2YgYSBQb2x5bW9ycGhpY0FjY2Vzcy4gQSBQb2x5bW9ycGhpY0FjY2VzcyByZXByZXNlbnRz
IGEKKy8vIHBsYW5uZWQgKHRvIGdlbmVyYXRlIGluIGZ1dHVyZSkgb3IgZ2VuZXJhdGVkIHN0dWIg
Zm9yIHNvbWUgaW5saW5lIGNhY2hlLiBUaGF0IHN0dWIgY29udGFpbnMgZmFzdAorLy8gcGF0aCBj
b2RlIGZvciBzb21lIGZpbml0ZSBudW1iZXIgb2YgZmFzdCBjYXNlcywgZWFjaCBkZXNjcmliZWQg
YnkgYW4gQWNjZXNzQ2FzZSBvYmplY3QuCisvLworLy8gQW4gQWNjZXNzQ2FzZSBvYmplY3QgaGFz
IGEgbGlmZWN5Y2xlIHRoYXQgcHJvY2VlZHMgdGhyb3VnaCBzZXZlcmFsIHN0YXRlcy4gTm90ZSB0
aGF0IHRoZSBzdGF0ZXMKKy8vIG9mIEFjY2Vzc0Nhc2UgaGF2ZSBhIGxvdCB0byBkbyB3aXRoIHRo
ZSBnbG9iYWwgZWZmZWN0IGVwb2NoICh3ZSdsbCBzYXkgZXBvY2ggZm9yIHNob3J0KS4gVGhpcyBp
cworLy8gYSBzaW1wbGUgd2F5IG9mIHJlYXNvbmluZyBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIHN5
c3RlbSBvdXRzaWRlIHRoaXMgQWNjZXNzQ2FzZS4gQW55IG9ic2VydmFibGUKKy8vIGVmZmVjdCAt
IGxpa2Ugc3RvcmluZyB0byBhIHByb3BlcnR5LCBjaGFuZ2luZyBhbiBvYmplY3QncyBzdHJ1Y3R1
cmUsIGV0Yy4gLSBpbmNyZW1lbnRzIHRoZSBlcG9jaC4KKy8vIFRoZSBzdGF0ZXMgYXJlOgorLy8K
Ky8vIFByaW1vcmRpYWw6ICAgVGhpcyBpcyBhbiBBY2Nlc3NDYXNlIHRoYXQgd2FzIGp1c3QgYWxs
b2NhdGVkLiBJdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFueSBhY3R1YWwKKy8vICAgICAgICAg
ICAgICAgY29kZSBhbmQgaXQgaXMgbm90IG93bmVkIGJ5IGFueSBQb2x5bW9ycGhpY0FjY2Vzcy4g
SW4gdGhpcyBzdGF0ZSwgdGhlIEFjY2Vzc0Nhc2UKKy8vICAgICAgICAgICAgICAgYXNzdW1lcyB0
aGF0IGl0IGlzIGluIHRoZSBzYW1lIGVwb2NoIGFzIHdoZW4gaXQgd2FzIGNyZWF0ZWQuIFRoaXMg
aXMgaW1wb3J0YW50CisvLyAgICAgICAgICAgICAgIGJlY2F1c2UgaXQgbWF5IG1ha2UgY2xhaW1z
IGFib3V0IGl0c2VsZiAoIkkgcmVwcmVzZW50IGEgdmFsaWQgY2FzZSBzbyBsb25nIGFzIHlvdQor
Ly8gICAgICAgICAgICAgICByZWdpc3RlciBhIHdhdGNocG9pbnQgb24gdGhpcyBzZXQiKSB0aGF0
IGNvdWxkIGJlIGNvbnRyYWRpY3RlZCBieSBzb21lIG91dHNpZGUKKy8vICAgICAgICAgICAgICAg
ZWZmZWN0cyAobGlrZSBmaXJpbmcgYW5kIGRlbGV0aW5nIHRoZSB3YXRjaHBvaW50IHNldCBpbiBx
dWVzdGlvbikuIFRoaXMgaXMgYWxzbyB0aGUKKy8vICAgICAgICAgICAgICAgc3RhdGUgdGhhdCBh
biBBY2Nlc3NDYXNlIGlzIGluIHdoZW4gaXQgaXMgY2xvbmVkIChBY2Nlc3NDYXNlOjpjbG9uZSgp
KS4KKy8vCisvLyBDb21taXR0ZWQ6ICAgIFRoaXMgaGFwcGVucyBhcyBzb29uIGFzIHNvbWUgUG9s
eW1vcnBoaWNBY2Nlc3MgdGFrZXMgb3duZXJzaGlwIG9mIHRoaXMgQWNjZXNzQ2FzZS4KKy8vICAg
ICAgICAgICAgICAgSW4gdGhpcyBzdGF0ZSwgdGhlIEFjY2Vzc0Nhc2Ugbm8gbG9uZ2VyIGFzc3Vt
ZXMgYW55dGhpbmcgYWJvdXQgdGhlIGVwb2NoLiBUbworLy8gICAgICAgICAgICAgICBhY2NvbXBs
aXNoIHRoaXMsIFBvbHltb3JwaGljQWNjZXNzIGNhbGxzIEFjY2Vzc0Nhc2U6OmNvbW1pdCgpLiBU
aGlzIG11c3QgYmUgZG9uZQorLy8gICAgICAgICAgICAgICBkdXJpbmcgdGhlIHNhbWUgZXBvY2gg
d2hlbiB0aGUgQWNjZXNzQ2FzZSB3YXMgY3JlYXRlZCwgZWl0aGVyIGJ5IHRoZSBjbGllbnQgb3Ig
YnkKKy8vICAgICAgICAgICAgICAgY2xvbmUoKS4gV2hlbiBjcmVhdGVkIGJ5IHRoZSBjbGllbnQs
IGNvbW1pdHRpbmcgZHVyaW5nIHRoZSBzYW1lIGVwb2NoIHdvcmtzIGJlY2F1c2UKKy8vICAgICAg
ICAgICAgICAgd2UgY2FuIGJlIHN1cmUgdGhhdCB3aGF0ZXZlciB3YXRjaHBvaW50IHNldHMgdGhl
eSBzcG9rZSBvZiBhcmUgc3RpbGwgdmFsaWQuIFdoZW4KKy8vICAgICAgICAgICAgICAgY3JlYXRl
ZCBieSBjbG9uZSgpLCB3ZSBjYW4gYmUgc3VyZSB0aGF0IHRoZSBzZXQgaXMgc3RpbGwgdmFsaWQg
YmVjYXVzZSB0aGUgb3JpZ2luYWwKKy8vICAgICAgICAgICAgICAgb2YgdGhlIGNsb25lIHN0aWxs
IGhhcyB3YXRjaHBvaW50cyBvbiBpdC4KKy8vCisvLyBHZW5lcmF0ZWQ6ICAgIFRoaXMgaXMgdGhl
IHN0YXRlIHdoZW4gdGhlIFBvbHltb3JwaGljQWNjZXNzIGdlbmVyYXRlcyBjb2RlIGZvciB0aGlz
IGNhc2UgYnkKKy8vICAgICAgICAgICAgICAgY2FsbGluZyBBY2Nlc3NDYXNlOjpnZW5lcmF0ZSgp
IG9yIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKCkuIEF0IHRoaXMgcG9pbnQKKy8vICAg
ICAgICAgICAgICAgdGhlIGNhc2Ugb2JqZWN0IHdpbGwgaGF2ZSBzb21lIGV4dHJhIHN0dWZmIGlu
IGl0LCBsaWtlIHBvc3NpYmx5IHRoZSBDYWxsTGlua0luZm8KKy8vICAgICAgICAgICAgICAgb2Jq
ZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5saW5lIGNhY2hlLgorLy8gICAgICAgICAgICAgICBG
SVhNRTogTW92aW5nIGludG8gdGhlIEdlbmVyYXRlZCBzdGF0ZSBzaG91bGQgbm90IG11dGF0ZSB0
aGUgQWNjZXNzQ2FzZSBvYmplY3Qgb3IKKy8vICAgICAgICAgICAgICAgcHV0IG1vcmUgc3R1ZmYg
aW50byBpdC4gSWYgd2UgZml4IHRoaXMsIHRoZW4gd2UgY2FuIGdldCByaWQgb2YgQWNjZXNzQ2Fz
ZTo6Y2xvbmUoKS4KKy8vICAgICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NjQ1NgorLy8KKy8vIEFuIEFjY2Vzc0Nhc2UgbWF5IGJlIGRlc3Ryb3ll
ZCB3aGlsZSBpbiBhbnkgb2YgdGhlc2Ugc3RhdGVzLgorLy8KKy8vIE5vdGUgdGhhdCByaWdodCBu
b3csIGFuIEFjY2Vzc0Nhc2UgZ29lcyBmcm9tIFByaW1vcmRpYWwgdG8gR2VuZXJhdGVkIHF1aXRl
IHF1aWNrbHkuCisvLyBGSVhNRTogTWFrZSBpdCBwb3NzaWJsZSBmb3IgUG9seW1vcnBoaWNBY2Nl
c3MgdG8gaG9sZCBvbnRvIEFjY2Vzc0Nhc2VzIHRoYXQgaGF2ZW4ndCBiZWVuCisvLyBnZW5lcmF0
ZWQuIFRoYXQgd291bGQgYWxsb3cgdXMgdG8gc2lnbmlmaWNhbnRseSByZWR1Y2UgdGhlIG51bWJl
ciBvZiByZWdlbmVyYXRpb24gZXZlbnRzLgorLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NjQ1NwogY2xhc3MgQWNjZXNzQ2FzZSB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQWNjZXNzQ2FzZSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6Ci0gICAgZW51bSBBY2Nlc3NUeXBlIHsKKyAgICBlbnVtIEFjY2Vzc1R5cGUgOiB1aW50OF90
IHsKICAgICAgICAgTG9hZCwKICAgICAgICAgTWVnYW1vcnBoaWNMb2FkLAogICAgICAgICBUcmFu
c2l0aW9uLApAQCAtNzIsNiArMTEzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgRGlyZWN0QXJndW1l
bnRzTGVuZ3RoLAogICAgICAgICBTY29wZWRBcmd1bWVudHNMZW5ndGgKICAgICB9OworICAgIAor
ICAgIGVudW0gU3RhdGUgOiB1aW50OF90IHsKKyAgICAgICAgUHJpbW9yZGlhbCwKKyAgICAgICAg
Q29tbWl0dGVkLAorICAgICAgICBHZW5lcmF0ZWQKKyAgICB9OwogCiAgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiB0cnlHZXQoCiAgICAgICAgIFZNJiwgSlNDZWxsKiBvd25l
ciwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosCkBAIC0xMTEsOSArMTU4
LDggQEAgcHVibGljOgogCiAgICAgfkFjY2Vzc0Nhc2UoKTsKICAgICAKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gY2xvbmUoKSBjb25zdDsKLSAgICAKICAgICBBY2Nlc3NUeXBlIHR5
cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGU7IH0KICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX29mZnNldDsgfQogICAgIGJvb2wgdmlhUHJveHkoKSBjb25zdCB7IHJldHVybiBtX3Jh
cmVEYXRhID8gbV9yYXJlRGF0YS0+dmlhUHJveHkgOiBmYWxzZTsgfQogICAgIApAQCAtMTc2LDgg
KzIyMiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
cmV0dXJuIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby5nZXQoKTsKICAgICB9Ci0KLSAgICAvLyBJ
cyBpdCBzdGlsbCBwb3NzaWJsZSBmb3IgdGhpcyBjYXNlIHRvIGV2ZXIgYmUgdGFrZW4/CisgICAg
CisgICAgLy8gSXMgaXQgc3RpbGwgcG9zc2libGUgZm9yIHRoaXMgY2FzZSB0byBldmVyIGJlIHRh
a2VuPyAgTXVzdCBjYWxsIHRoaXMgYXMgYSBwcmVyZXF1aXNpdGUgZm9yCisgICAgLy8gY2FsbGlu
ZyBnZW5lcmF0ZSgpIGFuZCBmcmllbmRzLiAgSWYgdGhpcyByZXR1cm5zIHRydWUsIHRoZW4geW91
IGNhbiBjYWxsIGdlbmVyYXRlKCkuICBJZgorICAgIC8vIHRoaXMgcmV0dXJucyBmYWxzZSwgdGhl
biBnZW5lcmF0ZSgpIHdpbGwgY3Jhc2guICBZb3UgbXVzdCBjYWxsIGdlbmVyYXRlKCkgaW4gdGhl
IHNhbWUgZXBvY2gKKyAgICAvLyBhcyB3aGVuIHlvdSBjYWxsZWQgY291bGRTdGlsbEdlbmVyYXRl
KCkuCiAgICAgYm9vbCBjb3VsZFN0aWxsU3VjY2VlZCgpIGNvbnN0OwogICAgIAogICAgIHN0YXRp
YyBib29sIGNhbkVtaXRJbnRyaW5zaWNHZXR0ZXIoSlNGdW5jdGlvbiosIFN0cnVjdHVyZSopOwpA
QCAtMTk4LDYgKzI0NywxNCBAQCBwcml2YXRlOgogICAgIEFjY2Vzc0Nhc2UoKTsKIAogICAgIGJv
b2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CisgICAgCisgICAgLy8gRklYTUU6IFRoaXMgb25seSBl
eGlzdHMgYmVjYXVzZSBvZiBob3cgQWNjZXNzQ2FzZSBwdXRzIHBvc3QtZ2VuZXJhdGlvbiB0aGlu
Z3MgaW50byBpdHNlbGYuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1NjQ1NgorICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjbG9uZSgpIGNv
bnN0OworICAgIAorICAgIC8vIFBlcmZvcm0gYW55IGFjdGlvbiB0aGF0IHRoYXQgbXVzdCBiZSBw
ZXJmb3JtZWQgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIGVwb2NoIGluIHdoaWNoIHRoZSBjYXNlCisg
ICAgLy8gd2FzIGNyZWF0ZWQuIFJldHVybnMgYSBzZXQgb2Ygd2F0Y2hwb2ludCBzZXRzIHRoYXQg
d2lsbCBuZWVkIHRvIGJlIHdhdGNoZWQuCisgICAgVmVjdG9yPFdhdGNocG9pbnRTZXQqLCAyPiBj
b21taXQoVk0mLCBjb25zdCBJZGVudGlmaWVyJik7CiAKICAgICAvLyBGYWxsIHRocm91Z2ggb24g
c3VjY2Vzcy4gVHdvIGtpbmRzIG9mIGZhaWx1cmVzIGFyZSBzdXBwb3J0ZWQ6IGZhbGwtdGhyb3Vn
aCwgd2hpY2ggbWVhbnMgdGhhdCB3ZQogICAgIC8vIHNob3VsZCB0cnkgYSBkaWZmZXJlbnQgY2Fz
ZTsgYW5kIGZhaWx1cmUsIHdoaWNoIG1lYW5zIHRoYXQgdGhpcyB3YXMgdGhlIHJpZ2h0IGNhc2Ug
YnV0IGl0IG5lZWRzCkBAIC0yMDYsOSArMjYzLDEyIEBAIHByaXZhdGU6CiAKICAgICAvLyBGYWxs
IHRocm91Z2ggb24gc3VjY2VzcywgYWRkIGEganVtcCB0byB0aGUgZmFpbHVyZSBsaXN0IG9uIGZh
aWx1cmUuCiAgICAgdm9pZCBnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmKTsKKyAgICAK
KyAgICB2b2lkIGdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmKTsKICAgICB2b2lk
IGVtaXRJbnRyaW5zaWNHZXR0ZXIoQWNjZXNzR2VuZXJhdGlvblN0YXRlJik7CiAgICAgCiAgICAg
QWNjZXNzVHlwZSBtX3R5cGUgeyBMb2FkIH07CisgICAgU3RhdGUgbV9zdGF0ZSB7IFByaW1vcmRp
YWwgfTsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldCB7IGludmFsaWRPZmZzZXQgfTsKIAog
ICAgIC8vIFVzdWFsbHkgdGhpcyBpcyB0aGUgc3RydWN0dXJlIHRoYXQgd2UgZXhwZWN0IHRoZSBi
YXNlIG9iamVjdCB0byBoYXZlLiBCdXQsIHRoaXMgaXMgdGhlICpuZXcqCkBAIC0yMjksNiArMjg5
LDggQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGJvb2wgdmlhUHJveHk7CiAgICAgICAg
IFJlZlB0cjxXYXRjaHBvaW50U2V0PiBhZGRpdGlvbmFsU2V0OworICAgICAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgcHJvYmFibHkgbGl2ZSBpbiB0aGUgc3R1YiByb3V0aW5lIG9iamVjdC4KKyAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQ1Ngog
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZvPiBjYWxsTGlua0luZm87CiAgICAg
ICAgIHVuaW9uIHsKICAgICAgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldHRl
cjsKQEAgLTM0Miw3ICs0MDQsNyBAQCBwcml2YXRlOgogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIHJlZ2VuZXJhdGUoCiAgICAgICAgIFZNJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBjb25zdCBJZGVudGlmaWVyJiwgTGlzdFR5cGUmIGNhc2VzKTsKLQorICAgIAogICAgIExp
c3RUeXBlIG1fbGlzdDsKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4gbV93
YXRjaHBvaW50czsKQEAgLTQzMyw2ICs0OTUsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogdm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjpL
aW5kKTsKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QWNjZXNzQ2FzZTo6
QWNjZXNzVHlwZSk7Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkFjY2Vz
c0Nhc2U6OlN0YXRlKTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2
aXNpb24gMTk5Mjg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDkgKzExMiwxMiBAQCBBY2Nlc3NH
ZW5lcmF0aW9uUmVzdWx0IFN0cnVjdHVyZVN0dWJJbmZvCiAgICAgaWYgKCFhY2Nlc3NDYXNlKQog
ICAgICAgICByZXR1cm4gQWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6R2F2ZVVwOwogICAgIAotICAg
IGlmIChjYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQorICAgIGlmIChjYWNoZVR5cGUgPT0g
Q2FjaGVUeXBlOjpTdHViKSB7CisgICAgICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxl
clNjb3BlKHRydWUpOworICAgIAogICAgICAgICByZXR1cm4gdS5zdHViLT5yZWdlbmVyYXRlV2l0
aENhc2Uodm0sIGNvZGVCbG9jaywgKnRoaXMsIGlkZW50LCBXVEZNb3ZlKGFjY2Vzc0Nhc2UpKTsK
LQorICAgIH0KKyAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UG9seW1vcnBoaWNBY2Nlc3M+IGFj
Y2VzcyA9IHN0ZDo6bWFrZV91bmlxdWU8UG9seW1vcnBoaWNBY2Nlc3M+KCk7CiAgICAgCiAgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4gYWNjZXNzQ2FzZXM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHJldmlzaW9uIDE5
OTI4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC05NSw2ICs5NSw5IEBAIGNsYXNzIFdhdGNocG9pbnRTZXQgOiBwdWJs
aWMgVGhyZWFkU2FmZVIKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
cHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFdhdGNocG9pbnRTZXQoV2F0Y2hwb2ludFN0
YXRlKTsKKyAgICAKKyAgICAvLyBGSVhNRTogSW4gbWFueSBjYXNlcywgaXQgd291bGQgYmUgYW1h
emluZyBpZiB0aGlzICpkaWQqIGZpcmUgdGhlIHdhdGNocG9pbnRzLiBJIHN1c3BlY3QgdGhhdAor
ICAgIC8vIHRoaXMgbWlnaHQgYmUgaGFyZCB0byBnZXQgcmlnaHQsIGJ1dCBzdGlsbCwgaXQgbWln
aHQgYmUgYXdlc29tZS4KICAgICBKU19FWFBPUlRfUFJJVkFURSB+V2F0Y2hwb2ludFNldCgpOyAv
LyBOb3RlIHRoYXQgdGhpcyB3aWxsIG5vdCBmaXJlIGFueSBvZiB0aGUgd2F0Y2hwb2ludHM7IGlm
IHlvdSBuZWVkIHRvIGtub3cgd2hlbiBhIFdhdGNocG9pbnRTZXQgZGllcyB0aGVuIHlvdSBuZWVk
IGEgc2VwYXJhdGUgbWVjaGFuaXNtIGZvciB0aGlzLgogICAgIAogICAgIC8vIEZhc3Qgd2F5IG9m
IGdldHRpbmcgdGhlIHN0YXRlLCB3aGljaCBvbmx5IHdvcmtzIGZyb20gdGhlIG1haW4gdGhyZWFk
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShy
ZXZpc2lvbiAxOTkyODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTEsNyArNjkxLDcgQEAgc2l6ZV90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdAogCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRp
b25SZWdFeHBUZXN0R2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQXJndW1lbnQpCiB7Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGU7
CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5jcHAJKHJldmlzaW9uIDE5OTI4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3OSw2ICszNzksNyBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAKIHZvaWQgcmVwYXRjaEdldEJ5SUQoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgR2V0QnlJREtpbmQga2luZCkKIHsKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBs
ZXJTY29wZShmYWxzZSk7CiAgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZXhl
Yy0+Y29kZUJsb2NrKCktPm1fbG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKICAgICAKICAgICBpZiAo
dHJ5Q2FjaGVHZXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHVi
SW5mbywga2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKQEAgLTUzMyw2ICs1MzQsNyBAQCBzdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAKIHZvaWQgcmVwYXRjaFB1dEJ5SUQo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBz
bG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKIHsKKyAg
ICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgR0NTYWZl
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jaywgZXhl
Yy0+dm0oKS5oZWFwKTsKICAgICAKICAgICBpZiAodHJ5Q2FjaGVQdXRCeUlEKGV4ZWMsIGJhc2VW
YWx1ZSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKSA9
PSBHaXZlVXBPbkNhY2hlKQpAQCAtNTk2LDYgKzU5OCw3IEBAIHZvaWQgcmVwYXRjaEluKAogICAg
IEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
Ym9vbCB3YXNGb3VuZCwKICAgICBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKIHsKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJT
Y29wZShmYWxzZSk7CiAgICAgaWYgKHRyeVJlcGF0Y2hJbihleGVjLCBiYXNlLCBpZGVudCwgd2Fz
Rm91bmQsIHNsb3QsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQogICAgICAgICByZXBhdGNo
Q2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVy
YXRpb25Jbik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZp
c2lvbiAxOTkyODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc1NSwxMiArNzU1LDE3IEBAIHZvaWQgVk06OmR1bXBSZWdFeHBUcmFj
ZSgpCiB9CiAjZW5kaWYKIAotdm9pZCBWTTo6cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJv
cGVydHkoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBXYXRjaHBvaW50KiB3YXRjaHBv
aW50KQorV2F0Y2hwb2ludFNldCogVk06OmVuc3VyZVdhdGNocG9pbnRTZXRGb3JJbXB1cmVQcm9w
ZXJ0eShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgYXV0byByZXN1bHQg
PSBtX2ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludFNldHMuYWRkKHByb3BlcnR5TmFtZS5zdHJpbmco
KSwgbnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gYWRvcHRSZWYobmV3IFdhdGNocG9pbnRTZXQoSXNXYXRjaGVkKSk7
Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YWRkKHdhdGNocG9pbnQpOworICAgIHJldHVy
biByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworfQorCit2b2lkIFZNOjpyZWdpc3Rlcldh
dGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCit7CisgICAgZW5zdXJlV2F0Y2hwb2ludFNldEZvcklt
cHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSktPmFkZCh3YXRjaHBvaW50KTsKIH0KIAogdm9pZCBW
TTo6YWRkSW1wdXJlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE5OTI4NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4MCw2ICs1ODAs
NyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZWxldGVBbGxMaW5rZWRD
b2RlKCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZWxldGVBbGxSZWdFeHBDb2RlKCk7
CiAKKyAgICBXYXRjaHBvaW50U2V0KiBlbnN1cmVXYXRjaHBvaW50U2V0Rm9ySW1wdXJlUHJvcGVy
dHkoY29uc3QgSWRlbnRpZmllciYpOwogICAgIHZvaWQgcmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1w
dXJlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYsIFdhdGNocG9pbnQqKTsKICAgICAKICAgICAv
LyBGSVhNRTogVXNlIEF0b21pY1N0cmluZyBvbmNlIGl0IGdvdCBtZXJnZWQgd2l0aCBJZGVudGlm
aWVyLgo=
</data>
<flag name="review"
          id="300421"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>