<?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>152315</bug_id>
          
          <creation_ts>2015-12-15 14:34:09 -0800</creation_ts>
          <short_desc>Introducing ScratchRegisterAllocator::PreservedState.</short_desc>
          <delta_ts>2015-12-16 08:26:51 -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></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>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1149389</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-12-15 14:34:09 -0800</bug_when>
    <thetext>restoreReusedRegistersByPopping() should always be called with 2 values that matches the expectation of preserveReusedRegistersByPushing().  Those 2 values are the number of bytes preserved and the ExtraStackSpace requirement.  By encapsulating them in a ScratchRegisterAllocator::PreservedState, we can make this less error prone by only passing restoreReusedRegistersByPopping() the appropriate PreservedState that its matching preserveReusedRegistersByPushing() returned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149397</commentid>
    <comment_count>1</comment_count>
      <attachid>267394</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-12-15 14:42:39 -0800</bug_when>
    <thetext>Created attachment 267394
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149404</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-12-15 14:58:27 -0800</bug_when>
    <thetext>Patch looks good.

I think we usually say &quot;Saved&quot;, which is slightly shorter than &quot;Preserved.&quot;

EWS is angry, so r-:

/Volumes/Data/EWS/WebKit/WebKitBuild/Debug/JavaScriptCore.framework/PrivateHeaders/PolymorphicAccess.h:36:10: fatal error: &apos;ScratchRegisterAllocator.h&apos; file not found
#include &quot;ScratchRegisterAllocator.h&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149410</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-12-15 15:24:31 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; I think we usually say &quot;Saved&quot;, which is slightly shorter than &quot;Preserved.&quot;

Talked with Geoff offline.  The function that generates thus artifact is named preserveReusedRegistersByPushing().  It would be a mismatch to name the artifact SavedState while keeping the function as is.  There are also several other preserve...() functions in ScratchRegisterAllocator unrelated to the patch here.

In light of that, for now, we&apos;ll stick with calling it PreservedState.

&gt; EWS is angry, so r-:

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149422</commentid>
    <comment_count>4</comment_count>
      <attachid>267404</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-12-15 15:51:07 -0800</bug_when>
    <thetext>Created attachment 267404
Patch with build fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149453</commentid>
    <comment_count>5</comment_count>
      <attachid>267404</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-12-15 17:01:29 -0800</bug_when>
    <thetext>Comment on attachment 267404
Patch with build fix.

r=me

EWS looks angry for unrelated reasons, so you&apos;ll need to land manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149454</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-12-15 17:06:31 -0800</bug_when>
    <thetext>Thanks for the review.  Landed in r194126: &lt;http://trac.webkit.org/r194126&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149610</commentid>
    <comment_count>7</comment_count>
      <attachid>267404</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-12-16 08:26:23 -0800</bug_when>
    <thetext>Comment on attachment 267404
Patch with build fix.

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

&gt; Source/JavaScriptCore/jit/ScratchRegisterAllocator.h:74
&gt; +        PreservedState()
&gt; +            : PreservedState(0)
&gt; +        { }

Since we have a default empty constructor I think it&apos;s worth having an operator bool indicating that a PreservedState is valid or not.
We could just make the invalid state have UINT_MAX for preserved bytes.
We can assert inside restore / preserve reusedRegisters that we have a valid state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149611</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-12-16 08:26:51 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 267404 [details]
&gt; Patch with build fix.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=267404&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/ScratchRegisterAllocator.h:74
&gt; &gt; +        PreservedState()
&gt; &gt; +            : PreservedState(0)
&gt; &gt; +        { }
&gt; 
&gt; Since we have a default empty constructor I think it&apos;s worth having an
&gt; operator bool indicating that a PreservedState is valid or not.
&gt; We could just make the invalid state have UINT_MAX for preserved bytes.
&gt; We can assert inside restore / preserve reusedRegisters that we have a valid
&gt; state.

I&apos;ll write a patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267394</attachid>
            <date>2015-12-15 14:42:39 -0800</date>
            <delta_ts>2015-12-15 15:51:07 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-152315.patch</filename>
            <type>text/plain</type>
            <size>19745</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0MTE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDE1LTEyLTE1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBJ
bnRyb2R1Y2luZyBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMzE1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcmVzdG9yZVJldXNl
ZFJlZ2lzdGVyc0J5UG9wcGluZygpIHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIHdpdGggMiB2YWx1
ZXMgdGhhdAorICAgICAgICBtYXRjaGVzIHRoZSBleHBlY3RhdGlvbiBvZiBwcmVzZXJ2ZVJldXNl
ZFJlZ2lzdGVyc0J5UHVzaGluZygpLiAgVGhvc2UgMiB2YWx1ZXMKKyAgICAgICAgYXJlIHRoZSBu
dW1iZXIgb2YgYnl0ZXMgcHJlc2VydmVkIGFuZCB0aGUgRXh0cmFTdGFja1NwYWNlIHJlcXVpcmVt
ZW50LiAgQnkKKyAgICAgICAgZW5jYXBzdWxhdGluZyB0aGVtIGluIGEgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSwgd2UgY2FuIG1ha2UKKyAgICAgICAgaXQgbGVzcyBl
cnJvciBwcm9uZSB3aGVuIGNhbGxpbmcgcmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZygp
LiAgTm93LCB3ZSBvbmx5CisgICAgICAgIG5lZWQgdG8gcGFzcyBpdCB0aGUgYXBwcm9wcmlhdGUg
UHJlc2VydmVkU3RhdGUgdGhhdCBpdHMgbWF0Y2hpbmcKKyAgICAgICAgcHJlc2VydmVSZXVzZWRS
ZWdpc3RlcnNCeVB1c2hpbmcoKSByZXR1cm5lZC4KKworICAgICAgICAqIGJ5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0YXRlOjpy
ZXN0b3JlU2NyYXRjaCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlKToKKyAg
ICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUpOgorICAgICAgICAqIGJ5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmg6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRp
b25TdGF0ZTo6QWNjZXNzR2VuZXJhdGlvblN0YXRlKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGls
ZUJpbmFyeU9wLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpnZW5lcmF0ZUJpbmFyeUJpdE9wRmFz
dFBhdGgpOgorICAgICAgICAoSlNDOjpGVEw6OmdlbmVyYXRlUmlnaHRTaGlmdEZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6RlRMOjpnZW5lcmF0ZUJpbmFyeUFyaXRoT3BGYXN0UGF0aCk6CisgICAg
ICAgICogZnRsL0ZUTExhenlTbG93UGF0aC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TGF6eVNs
b3dQYXRoOjpnZW5lcmF0ZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjplbWl0U3RvcmVCYXJyaWVy
KToKKyAgICAgICAgKiBqaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjphbGxvY2F0ZVNjcmF0Y2hHUFIpOgorICAg
ICAgICAoSlNDOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmFsbG9jYXRlU2NyYXRjaEZQUik6
CisgICAgICAgIChKU0M6OlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZXVzZWRS
ZWdpc3RlcnNCeVB1c2hpbmcpOgorICAgICAgICAoSlNDOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcpOgorICAgICAgICAqIGppdC9TY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjp1c2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZTo6UHJlc2VydmVkU3RhdGUpOgorCiAyMDE1LTEyLTE1ICBN
YXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBQb2x5bW9ycGhpYyBvcGVy
YW5kIHR5cGVzIGZvciBERkcgYW5kIEZUTCBiaXQgb3BlcmF0b3JzLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAxOTQxMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIFdhdGNocG9p
bnQqIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6YWRkV2EKIAogdm9pZCBBY2Nlc3NHZW5lcmF0aW9u
U3RhdGU6OnJlc3RvcmVTY3JhdGNoKCkKIHsKLSAgICBhbGxvY2F0b3ItPnJlc3RvcmVSZXVzZWRS
ZWdpc3RlcnNCeVBvcHBpbmcoKmppdCwgbnVtYmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZlUmV1c2Vk
UmVnaXN0ZXJzLCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9F
eHRyYVNwYWNlKTsKKyAgICBhbGxvY2F0b3ItPnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBp
bmcoKmppdCwgcHJlc2VydmVkUmV1c2VkUmVnaXN0ZXJTdGF0ZSk7CiB9CiAKIHZvaWQgQWNjZXNz
R2VuZXJhdGlvblN0YXRlOjpzdWNjZWVkKCkKQEAgLTcyNyw3ICs3MjcsNyBAQCB2b2lkIEFjY2Vz
c0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAKICAgICAgICAgICAgIGRvbmUubGluaygm
aml0KTsKIAotICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
Migoaml0LmNvZGVCbG9jaygpLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rl
cikpIC0gc3RhdGUubnVtYmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzIC0g
c3RhdGUubnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uKCkpLAor
ICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigoaml0LmNv
ZGVCbG9jaygpLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpIC0gc3Rh
dGUucHJlc2VydmVkUmV1c2VkUmVnaXN0ZXJTdGF0ZS5udW1iZXJPZkJ5dGVzUHJlc2VydmVkIC0g
c3RhdGUubnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uKCkpLAog
ICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgICAgIHN0YXRlLnJlc3RvcmVMaXZlUmVn
aXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChpc0dldHRlcigpKTsKIApAQCAtODg2LDEyICs4ODYsMTMg
QEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBzY3JhdGNoR1BSMyA9IEludmFsaWRHUFJSZWc7CiAKLSAgICAgICAgc2l6
ZV90IG51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycyA9IGFsbG9jYXRv
ci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKKyAgICAgICAgU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9CisgICAg
ICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7
CiAKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhh
c0JlZW5JbnZhbGlkYXRlZCgpKTsKIAogICAgICAgICBib29sIHNjcmF0Y2hHUFJIYXNTdG9yYWdl
ID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgbmVlZHNUb01ha2VSb29tT25TdGFja0ZvckNDYWxsID0g
IW51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycyAmJiBjb2RlQmxvY2st
PmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQ7CisgICAgICAgIGJvb2wgbmVlZHNUb01ha2VS
b29tT25TdGFja0ZvckNDYWxsID0gIXByZXNlcnZlZFN0YXRlLm51bWJlck9mQnl0ZXNQcmVzZXJ2
ZWQgJiYgY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6RlRMSklUOwogCiAgICAgICAg
IGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewogICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdT
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKQEAgLTEw
MTYsMTIgKzEwMTcsMTIgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0
aQogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBhbGxv
Y2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIG51bWJlck9mQnl0ZXNV
c2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycywgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpF
eHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOworICAgICAgICBhbGxvY2F0b3IucmVzdG9y
ZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKICAgICAgICAg
c3RhdGUuc3VjY2VlZCgpOwogCiAgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewogICAgICAg
ICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKLSAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3Jl
UmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgbnVtYmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZl
UmV1c2VkUmVnaXN0ZXJzLCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFj
ZTo6U3BhY2VGb3JDQ2FsbCk7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJl
Z2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKICAgICAgICAgICAgIGFsbG9j
YXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKGppdCwgc2Ny
YXRjaEJ1ZmZlciwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBpZiAobmVlZHNUb01ha2VSb29t
T25TdGFja0ZvckNDYWxsKQogICAgICAgICAgICAgICAgIGppdC5tYWtlU3BhY2VPblN0YWNrRm9y
Q0NhbGwoKTsKQEAgLTEyNDUsNyArMTI0Niw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5
bW9ycGhpY0FjY2VzczoKICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29kZUJsb2NrKTsKICAg
ICBzdGF0ZS5qaXQgPSAmaml0OwogCi0gICAgc3RhdGUubnVtYmVyT2ZCeXRlc1VzZWRUb1ByZXNl
cnZlUmV1c2VkUmVnaXN0ZXJzID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQ
dXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5v
RXh0cmFTcGFjZSk7CisgICAgc3RhdGUucHJlc2VydmVkUmV1c2VkUmVnaXN0ZXJTdGF0ZSA9Cisg
ICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOwog
CiAgICAgYm9vbCBhbGxHdWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayA9IHRydWU7CiAgICAgYm9vbCBo
YXNKU0dldHRlclNldHRlckNhbGwgPSBmYWxzZTsKQEAgLTEzMTUsNyArMTMxNyw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2VzczoKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIG1ha2VzaGlmdENhdGNoSGFuZGxlciA9IGppdC5sYWJlbCgpOwogCiAgICAgICAg
IGludCBzdGFja1BvaW50ZXJPZmZzZXQgPSBjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICAgICAgc3RhY2tQb2ludGVyT2Zmc2V0IC09
IHN0YXRlLm51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyczsKKyAgICAg
ICAgc3RhY2tQb2ludGVyT2Zmc2V0IC09IHN0YXRlLnByZXNlcnZlZFJldXNlZFJlZ2lzdGVyU3Rh
dGUubnVtYmVyT2ZCeXRlc1ByZXNlcnZlZDsKICAgICAgICAgc3RhY2tQb2ludGVyT2Zmc2V0IC09
IHN0YXRlLm51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbigpOwog
CiAgICAgICAgIGppdC5sb2FkUHRyKHZtLmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCksIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAxOTQxMTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgi
CiAjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJPcGNv
ZGUuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJT
dHJ1Y3R1cmUuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTM0OSw3ICszNTAsNyBA
QCBzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlIHsKICAgICB9CiAgICAgQ0NhbGxIZWxwZXJz
KiBqaXQgeyBudWxscHRyIH07CiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKiBhbGxvY2F0
b3I7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZlUmV1c2VkUmVnaXN0
ZXJzIHsgMCB9OworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJlc2VydmVkU3RhdGUg
cHJlc2VydmVkUmV1c2VkUmVnaXN0ZXJTdGF0ZTsKICAgICBQb2x5bW9ycGhpY0FjY2VzcyogYWNj
ZXNzIHsgbnVsbHB0ciB9OwogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyB7IG51bGxw
dHIgfTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc3VjY2VzczsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZUJpbmFyeU9wLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGVCaW5hcnlPcC5jcHAJKHJldmlz
aW9uIDE5NDExMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZUJpbmFy
eU9wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgZ2VuZXJhdGVC
aW5hcnlCaXRPcEZhc3RQYXRoKEJpbmFyeU8KICAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihpYy5s
ZWZ0T3BlcmFuZCgpLCBpYy5yaWdodE9wZXJhbmQoKSwgSlNWYWx1ZVJlZ3MocmVzdWx0KSwKICAg
ICAgICAgSlNWYWx1ZVJlZ3MobGVmdCksIEpTVmFsdWVSZWdzKHJpZ2h0KSwgc2NyYXRjaEdQUik7
CiAKLSAgICB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVSZXVzZWRSZWdpc3Rl
cnMgPQorICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJlc2VydmVkU3RhdGUgcHJlc2Vy
dmVkU3RhdGUgPQogICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1
c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9F
eHRyYVNwYWNlKTsKIAogICAgIGNvbnRleHQuaW5pdGlhbGl6ZVJlZ2lzdGVycyhqaXQpOwpAQCAt
MTg4LDE0ICsxODgsMTIgQEAgdm9pZCBnZW5lcmF0ZUJpbmFyeUJpdE9wRmFzdFBhdGgoQmluYXJ5
TwogICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsoJmppdCk7CiAKICAgICBjb250ZXh0LnJlc3Rv
cmVSZWdpc3RlcnMoaml0KTsKLSAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5
UG9wcGluZyhqaXQsIG51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycywK
LSAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0
cmFTcGFjZSk7CisgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmco
aml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgZG9uZSA9IGppdC5qdW1wKCk7CiAKICAgICBnZW4u
c2xvd1BhdGhKdW1wTGlzdCgpLmxpbmsoJmppdCk7CiAgICAgY29udGV4dC5yZXN0b3JlUmVnaXN0
ZXJzKGppdCk7Ci0gICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmco
aml0LCBudW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVSZXVzZWRSZWdpc3RlcnMsCi0gICAgICAg
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2Up
OworICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJl
c2VydmVkU3RhdGUpOwogICAgIHNsb3dQYXRoU3RhcnQgPSBqaXQuanVtcCgpOwogfQogCkBAIC0y
MTQsNyArMjEyLDcgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVSaWdodFNoaWZ0RmFzdFBhdGgoQgog
ICAgIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IgZ2VuKGljLmxlZnRPcGVyYW5kKCksIGljLnJpZ2h0
T3BlcmFuZCgpLCBKU1ZhbHVlUmVncyhyZXN1bHQpLAogICAgICAgICBKU1ZhbHVlUmVncyhsZWZ0
KSwgSlNWYWx1ZVJlZ3MocmlnaHQpLCBsZWZ0RlBSLCBzY3JhdGNoR1BSLCBJbnZhbGlkRlBSUmVn
LCBzaGlmdFR5cGUpOwogCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZl
UmV1c2VkUmVnaXN0ZXJzID0KKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZl
ZFN0YXRlIHByZXNlcnZlZFN0YXRlID0KICAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2Vk
UmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0
YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7CiAKICAgICBjb250ZXh0LmluaXRpYWxpemVSZWdpc3Rl
cnMoaml0KTsKQEAgLTIyMywxNCArMjIxLDEyIEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlUmlnaHRT
aGlmdEZhc3RQYXRoKEIKICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKTsKICAgICBn
ZW4uZW5kSnVtcExpc3QoKS5saW5rKCZqaXQpOwogICAgIGNvbnRleHQucmVzdG9yZVJlZ2lzdGVy
cyhqaXQpOwotICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGpp
dCwgbnVtYmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzLAotICAgICAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsK
KyAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNl
cnZlZFN0YXRlKTsKICAgICBkb25lID0gaml0Lmp1bXAoKTsKIAogICAgIGdlbi5zbG93UGF0aEp1
bXBMaXN0KCkubGluaygmaml0KTsKICAgICBjb250ZXh0LnJlc3RvcmVSZWdpc3RlcnMoaml0KTsK
LSAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIG51bWJl
ck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycywKLSAgICAgICAgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7CisgICAgYWxs
b2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0
ZSk7CiAgICAgc2xvd1BhdGhTdGFydCA9IGppdC5qdW1wKCk7CiB9CiAKQEAgLTI1Myw3ICsyNDks
NyBAQCB2b2lkIGdlbmVyYXRlQmluYXJ5QXJpdGhPcEZhc3RQYXRoKEJpbmFyCiAgICAgQmluYXJ5
QXJpdGhPcEdlbmVyYXRvciBnZW4oaWMubGVmdE9wZXJhbmQoKSwgaWMucmlnaHRPcGVyYW5kKCks
IEpTVmFsdWVSZWdzKHJlc3VsdCksCiAgICAgICAgIEpTVmFsdWVSZWdzKGxlZnQpLCBKU1ZhbHVl
UmVncyhyaWdodCksIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsK
IAotICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVy
cyA9CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2
ZWRTdGF0ZSA9CiAgICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVz
aGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4
dHJhU3BhY2UpOwogCiAgICAgY29udGV4dC5pbml0aWFsaXplUmVnaXN0ZXJzKGppdCk7CkBAIC0y
NjIsMTQgKzI1OCwxMiBAQCB2b2lkIGdlbmVyYXRlQmluYXJ5QXJpdGhPcEZhc3RQYXRoKEJpbmFy
CiAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7CiAgICAgZ2VuLmVuZEp1bXBMaXN0
KCkubGluaygmaml0KTsKICAgICBjb250ZXh0LnJlc3RvcmVSZWdpc3RlcnMoaml0KTsKLSAgICBh
bGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIG51bWJlck9mQnl0
ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycywKLSAgICAgICAgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7CisgICAgYWxsb2NhdG9y
LnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAg
ICAgZG9uZSA9IGppdC5qdW1wKCk7CiAKICAgICBnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLmxpbmso
JmppdCk7CiAgICAgY29udGV4dC5yZXN0b3JlUmVnaXN0ZXJzKGppdCk7Ci0gICAgYWxsb2NhdG9y
LnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBudW1iZXJPZkJ5dGVzVXNlZFRv
UHJlc2VydmVSZXVzZWRSZWdpc3RlcnMsCi0gICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOworICAgIGFsbG9jYXRvci5yZXN0b3Jl
UmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwogICAgIHNsb3dQ
YXRoU3RhcnQgPSBqaXQuanVtcCgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExhenlTbG93UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCShyZXZpc2lvbiAxOTQxMTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc5LDcgKzc5LDggQEAgdm9pZCBMYXp5U2xvd1BhdGg6OmdlbmVyYXRlKENvZGVCbG9jayogYwog
ICAgIHBhcmFtcy5sYXp5U2xvd1BhdGggPSB0aGlzOwogCiAjaWYgIUZUTF9VU0VTX0IzCi0gICAg
dW5zaWduZWQgYnl0ZXNTYXZlZCA9IG1fc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnByZXNlcnZl
UmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpF
eHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9CisgICAgICAgIG1fc2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7CiAg
ICAgLy8gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBMTFZNIG1heSBjcmVhdGUgYSBzdGFja21hcCBs
b2NhdGlvbiB0aGF0IGlzIHRoZSByZWdpc3RlciBTUC4KICAgICAvLyBCdXQgb24gYXJtNjQsIFNQ
IGlzIGFsc28gdGhlIHNhbWUgcmVnaXN0ZXIgbnVtYmVyIGFzIFpSLCBzbyBMTFZNIGlzIHRlbGxp
bmcgdXMgdGhhdCBpdCBoYXMKICAgICAvLyBwcm92ZW4gc29tZXRoaW5nIGlzIHplcm8uIE91ciBN
QVNNIGlzbid0IHVuaXZlcnNhbGx5IGNvbXBhdGlibGUgd2l0aCBhcm02NCdzIGNvbnRleHQgZGVw
ZW5kZW50CkBAIC05NCw5ICs5NSw5IEBAIHZvaWQgTGF6eVNsb3dQYXRoOjpnZW5lcmF0ZShDb2Rl
QmxvY2sqIGMKICNpZiAhRlRMX1VTRVNfQjMKICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGRvbmVM
YWJlbDsKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcFRvRW5kT2ZQYXRjaHBvaW50OwotICAg
IGlmIChieXRlc1NhdmVkKSB7CisgICAgaWYgKHByZXNlcnZlZFN0YXRlLm51bWJlck9mQnl0ZXNQ
cmVzZXJ2ZWQpIHsKICAgICAgICAgZG9uZUxhYmVsID0gaml0LmxhYmVsKCk7Ci0gICAgICAgIG1f
c2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmco
aml0LCBieXRlc1NhdmVkLCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFj
ZTo6Tm9FeHRyYVNwYWNlKTsKKyAgICAgICAgbV9zY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucmVz
dG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKICAgICAg
ICAganVtcFRvRW5kT2ZQYXRjaHBvaW50ID0gaml0Lmp1bXAoKTsKICAgICB9CiAjZW5kaWYgLy8g
IUZUTF9VU0VTX0IzCkBAIC0xMDUsNyArMTA2LDcgQEAgdm9pZCBMYXp5U2xvd1BhdGg6OmdlbmVy
YXRlKENvZGVCbG9jayogYwogI2lmIEZUTF9VU0VTX0IzCiAgICAgbGlua0J1ZmZlci5saW5rKHBh
cmFtcy5kb25lSnVtcHMsIG1fZG9uZSk7CiAjZWxzZSAvLyBGVExfVVNFU19CMwotICAgIGlmIChi
eXRlc1NhdmVkKSB7CisgICAgaWYgKHByZXNlcnZlZFN0YXRlLm51bWJlck9mQnl0ZXNQcmVzZXJ2
ZWQpIHsKICAgICAgICAgbGlua0J1ZmZlci5saW5rKHBhcmFtcy5kb25lSnVtcHMsIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihkb25lTGFiZWwpKTsKICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBU
b0VuZE9mUGF0Y2hwb2ludCwgbV9wYXRjaHBvaW50LmxhYmVsQXRPZmZzZXQoTWFjcm9Bc3NlbWJs
ZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKSkpOwogICAgIH0gZWxzZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9u
IDE5NDExMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzQyLDcgKzkzNDIsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gc2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogICAgICAgICAgICAgICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2gyID0gc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigp
OwogCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlc1B1c2hlZCA9CisgICAg
ICAgICAgICAgICAgICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0
YXRlIHByZXNlcnZlZFN0YXRlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhlc2Us
IHNvIHdoZW4gd2UgbWFrZSBhIHNsb3cgcGF0aCBjYWxsLCB3ZSBkb24ndCBoYXZlCkBAIC05MzY1
LDcgKzkzNjUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
Y3JhdGNoMSwgc2NyYXRjaDIsIENDYWxsSGVscGVyczo6U2NhbGVQdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkp
OwogCi0gICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucmVz
dG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIGJ5dGVzUHVzaGVkLCBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucmVzdG9yZVJldXNlZFJl
Z2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKQEAgLTkzNzQs
NyArOTM3NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJl
Z2lzdGVycywgaml0LCBwYXJhbXMubGF6eVNsb3dQYXRoLT5jYWxsU2l0ZUluZGV4KCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmV4Y2VwdGlvbkp1bXBzLCBvcGVyYXRpb25G
bHVzaFdyaXRlQmFycmllckJ1ZmZlciwgSW52YWxpZEdQUlJlZywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBiYXNlR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgYnl0ZXNQ
dXNoZWQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZv
ckNDYWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXAo
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5jcHAJKHJldmlzaW9uIDE5NDExMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDEwICsxMDIs
MTAgQEAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSBTY3JhdGNoUgogR1BSUmVnIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6YWxsb2NhdGVTY3JhdGNoR1BSKCkgeyByZXR1cm4gYWxs
b2NhdGVTY3JhdGNoPEdQUkluZm8+KCk7IH0KIEZQUlJlZyBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OmFsbG9jYXRlU2NyYXRjaEZQUigpIHsgcmV0dXJuIGFsbG9jYXRlU2NyYXRjaDxGUFJJbmZv
PigpOyB9CiAKLXVuc2lnbmVkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZXVz
ZWRSZWdpc3RlcnNCeVB1c2hpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCwgRXh0cmFTdGFja1NwYWNl
IGV4dHJhU3RhY2tTcGFjZSkKK1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJlc2VydmVkU3Rh
dGUgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVz
aGluZyhNYWNyb0Fzc2VtYmxlciYgaml0LCBFeHRyYVN0YWNrU3BhY2UgZXh0cmFTdGFja1NwYWNl
KQogewogICAgIGlmICghZGlkUmV1c2VSZWdpc3RlcnMoKSkKLSAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIHJldHVybiBQcmVzZXJ2ZWRTdGF0ZSgwLCBleHRyYVN0YWNrU3BhY2UpOwogCiAgICAg
UmVnaXN0ZXJTZXQgcmVnaXN0ZXJzVG9TcGlsbDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewpAQCAtMTIyLDEwICsxMjIsMTAg
QEAgdW5zaWduZWQgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZQogICAgIHVuc2lnbmVk
IGV4dHJhU3RhY2tCeXRlc0F0VG9wT2ZTdGFjayA9IGV4dHJhU3RhY2tTcGFjZSA9PSBFeHRyYVN0
YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwgPyBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCA6
IDA7CiAgICAgdW5zaWduZWQgc3RhY2tBZGp1c3RtZW50U2l6ZSA9IFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1Rv
U3BpbGwsIGV4dHJhU3RhY2tCeXRlc0F0VG9wT2ZTdGFjayk7CiAKLSAgICByZXR1cm4gc3RhY2tB
ZGp1c3RtZW50U2l6ZTsKKyAgICByZXR1cm4gUHJlc2VydmVkU3RhdGUoc3RhY2tBZGp1c3RtZW50
U2l6ZSwgZXh0cmFTdGFja1NwYWNlKTsKIH0KIAotdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCwg
dW5zaWduZWQgbnVtYmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzLCBFeHRy
YVN0YWNrU3BhY2UgZXh0cmFTdGFja1NwYWNlKQordm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCwg
Y29uc3QgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRT
dGF0ZSkKIHsKICAgICBpZiAoIWRpZFJldXNlUmVnaXN0ZXJzKCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTE0Miw5ICsxNDIsMTEgQEAgdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3Rv
cmVSZQogICAgICAgICAgICAgcmVnaXN0ZXJzVG9GaWxsLnNldChyZWcpOwogICAgIH0KIAotICAg
IHVuc2lnbmVkIGV4dHJhU3RhY2tCeXRlc0F0VG9wT2ZTdGFjayA9IGV4dHJhU3RhY2tTcGFjZSA9
PSBFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwgPyBtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCA6IDA7CisgICAgdW5zaWduZWQgZXh0cmFTdGFja0J5dGVzQXRUb3BPZlN0YWNrID0K
KyAgICAgICAgcHJlc2VydmVkU3RhdGUuZXh0cmFTdGFja1NwYWNlUmVxdWlyZW1lbnQgPT0gRXh0
cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsID8gbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwgOiAwOwogICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3JlOyAvLyBFbXB0eSBzZXQuIFdlIHdh
bnQgdG8gcmVzdG9yZSBldmVyeXRoaW5nLgotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6
cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb0ZpbGwsIGRv
bnRSZXN0b3JlLCBudW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVSZXVzZWRSZWdpc3RlcnMsIGV4
dHJhU3RhY2tCeXRlc0F0VG9wT2ZTdGFjayk7CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
OjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvRmlsbCwg
ZG9udFJlc3RvcmUsCisgICAgICAgIHByZXNlcnZlZFN0YXRlLm51bWJlck9mQnl0ZXNQcmVzZXJ2
ZWQsIGV4dHJhU3RhY2tCeXRlc0F0VG9wT2ZTdGFjayk7CiB9CiAKIFJlZ2lzdGVyU2V0IFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvcjo6dXNlZFJlZ2lzdGVyc0ZvckNhbGwoKSBjb25zdApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvci5oCShyZXZpc2lvbiAxOTQxMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2NywyMyBA
QCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlZFJlZ2lzdGVyczsgfQogICAgIAogICAgIGVudW0gY2xhc3MgRXh0cmFTdGFja1NwYWNl
IHsgU3BhY2VGb3JDQ2FsbCwgTm9FeHRyYVNwYWNlIH07Ci0gICAgdW5zaWduZWQgcHJlc2VydmVS
ZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCwgRXh0cmFTdGFja1Nw
YWNlKTsKLSAgICB2b2lkIHJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoTWFjcm9Bc3Nl
bWJsZXImIGppdCwgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZlUmV1c2VkUmVn
aXN0ZXJzLCBFeHRyYVN0YWNrU3BhY2UpOworCisgICAgc3RydWN0IFByZXNlcnZlZFN0YXRlIHsK
KyAgICAgICAgUHJlc2VydmVkU3RhdGUoKQorICAgICAgICAgICAgOiBQcmVzZXJ2ZWRTdGF0ZSgw
KQorICAgICAgICB7IH0KKworICAgICAgICBQcmVzZXJ2ZWRTdGF0ZSh1bnNpZ25lZCBudW1iZXJP
ZkJ5dGVzLCBFeHRyYVN0YWNrU3BhY2UgZXh0cmFTdGFja1NwYWNlID0gRXh0cmFTdGFja1NwYWNl
OjpOb0V4dHJhU3BhY2UpCisgICAgICAgICAgICA6IG51bWJlck9mQnl0ZXNQcmVzZXJ2ZWQobnVt
YmVyT2ZCeXRlcykKKyAgICAgICAgICAgICwgZXh0cmFTdGFja1NwYWNlUmVxdWlyZW1lbnQoZXh0
cmFTdGFja1NwYWNlKQorICAgICAgICB7IH0KKworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkJ5
dGVzUHJlc2VydmVkOworICAgICAgICBFeHRyYVN0YWNrU3BhY2UgZXh0cmFTdGFja1NwYWNlUmVx
dWlyZW1lbnQ7CisgICAgfTsKKworICAgIFByZXNlcnZlZFN0YXRlIHByZXNlcnZlUmV1c2VkUmVn
aXN0ZXJzQnlQdXNoaW5nKE1hY3JvQXNzZW1ibGVyJiBqaXQsIEV4dHJhU3RhY2tTcGFjZSk7Cisg
ICAgdm9pZCByZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKE1hY3JvQXNzZW1ibGVyJiBq
aXQsIFByZXNlcnZlZFN0YXRlKTsKICAgICAKICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJz
Rm9yQ2FsbCgpIGNvbnN0OwogICAgIAo=
</data>
<flag name="review"
          id="292447"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267404</attachid>
            <date>2015-12-15 15:51:07 -0800</date>
            <delta_ts>2015-12-15 17:01:29 -0800</delta_ts>
            <desc>Patch with build fix.</desc>
            <filename>bug-152315.patch</filename>
            <type>text/plain</type>
            <size>21409</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0MTE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDE1LTEyLTE1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBJ
bnRyb2R1Y2luZyBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMzE1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcmVzdG9yZVJldXNl
ZFJlZ2lzdGVyc0J5UG9wcGluZygpIHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIHdpdGggMiB2YWx1
ZXMgdGhhdAorICAgICAgICBtYXRjaGVzIHRoZSBleHBlY3RhdGlvbiBvZiBwcmVzZXJ2ZVJldXNl
ZFJlZ2lzdGVyc0J5UHVzaGluZygpLiAgVGhvc2UgMiB2YWx1ZXMKKyAgICAgICAgYXJlIHRoZSBu
dW1iZXIgb2YgYnl0ZXMgcHJlc2VydmVkIGFuZCB0aGUgRXh0cmFTdGFja1NwYWNlIHJlcXVpcmVt
ZW50LiAgQnkKKyAgICAgICAgZW5jYXBzdWxhdGluZyB0aGVtIGluIGEgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSwgd2UgY2FuIG1ha2UKKyAgICAgICAgaXQgbGVzcyBl
cnJvciBwcm9uZSB3aGVuIGNhbGxpbmcgcmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZygp
LiAgTm93LCB3ZSBvbmx5CisgICAgICAgIG5lZWQgdG8gcGFzcyBpdCB0aGUgYXBwcm9wcmlhdGUg
UHJlc2VydmVkU3RhdGUgdGhhdCBpdHMgbWF0Y2hpbmcKKyAgICAgICAgcHJlc2VydmVSZXVzZWRS
ZWdpc3RlcnNCeVB1c2hpbmcoKSByZXR1cm5lZC4KKworICAgICAgICAqIGJ5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0YXRlOjpy
ZXN0b3JlU2NyYXRjaCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlKToKKyAg
ICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUpOgorICAgICAgICAqIGJ5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmg6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRp
b25TdGF0ZTo6QWNjZXNzR2VuZXJhdGlvblN0YXRlKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGls
ZUJpbmFyeU9wLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpnZW5lcmF0ZUJpbmFyeUJpdE9wRmFz
dFBhdGgpOgorICAgICAgICAoSlNDOjpGVEw6OmdlbmVyYXRlUmlnaHRTaGlmdEZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6RlRMOjpnZW5lcmF0ZUJpbmFyeUFyaXRoT3BGYXN0UGF0aCk6CisgICAg
ICAgICogZnRsL0ZUTExhenlTbG93UGF0aC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TGF6eVNs
b3dQYXRoOjpnZW5lcmF0ZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjplbWl0U3RvcmVCYXJyaWVy
KToKKyAgICAgICAgKiBqaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjphbGxvY2F0ZVNjcmF0Y2hHUFIpOgorICAg
ICAgICAoSlNDOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmFsbG9jYXRlU2NyYXRjaEZQUik6
CisgICAgICAgIChKU0M6OlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZXVzZWRS
ZWdpc3RlcnNCeVB1c2hpbmcpOgorICAgICAgICAoSlNDOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcpOgorICAgICAgICAqIGppdC9TY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjp1c2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZTo6UHJlc2VydmVkU3RhdGUpOgorCiAyMDE1LTEyLTE1ICBN
YXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBQb2x5bW9ycGhpYyBvcGVy
YW5kIHR5cGVzIGZvciBERkcgYW5kIEZUTCBiaXQgb3BlcmF0b3JzLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NDExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTgsNyArMTU4LDcgQEAKIAkJMEYyNEU1NEYxN0VFMjc0OTAwQUJCMjE3IC8qIFRl
bXBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyNEU1NDgxN0VFMjc0OTAwQUJCMjE3IC8qIFRlbXBSZWdpc3RlclNldC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjRFNTUwMTdF
RTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNw
cCAqLzsgfTsKIAkJMEYyNEU1NTExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTRBMTdFRTI3NDkw
MEFCQjIxNyAvKiBSZXBhdGNoLmggKi87IH07Ci0JCTBGMjRFNTUyMTdFRTI3NDkwMEFCQjIxNyAv
KiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaCAqLzsgfTsKKwkJMEYyNEU1NTIxN0VFMjc0OTAwQUJCMjE3IC8qIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyNEU1NEIxN0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGMjRFNTU1MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NTMx
N0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgKi87IH07CiAJCTBGMjRF
NTU2MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTU0MTdGMEI3MUMwMEFCQjIx
NyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjI0RTU1ODE3Rjc0RURCMDBBQkIyMTcgLyogVmFsdWVSZWNv
dmVyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjI0RTU1NzE3Rjc0RURCMDBBQkIyMTcgLyogVmFsdWVSZWNvdmVyeS5jcHAgKi87IH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAJKHJldmlzaW9uIDE5NDExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcg
QEAgV2F0Y2hwb2ludCogQWNjZXNzR2VuZXJhdGlvblN0YXRlOjphZGRXYQogCiB2b2lkIEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZTo6cmVzdG9yZVNjcmF0Y2goKQogewotICAgIGFsbG9jYXRvci0+cmVz
dG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZygqaml0LCBudW1iZXJPZkJ5dGVzVXNlZFRvUHJl
c2VydmVSZXVzZWRSZWdpc3RlcnMsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFj
a1NwYWNlOjpOb0V4dHJhU3BhY2UpOworICAgIGFsbG9jYXRvci0+cmVzdG9yZVJldXNlZFJlZ2lz
dGVyc0J5UG9wcGluZygqaml0LCBwcmVzZXJ2ZWRSZXVzZWRSZWdpc3RlclN0YXRlKTsKIH0KIAog
dm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQoKQpAQCAtNzI3LDcgKzcyNyw3IEBA
IHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKIAogICAgICAgICAgICAg
ZG9uZS5saW5rKCZqaXQpOwogCi0gICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKChqaXQuY29kZUJsb2NrKCktPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSkgLSBzdGF0ZS5udW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVSZXVzZWRS
ZWdpc3RlcnMgLSBzdGF0ZS5udW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2
YXRpb24oKSksCisgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKChqaXQuY29kZUJsb2NrKCktPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSkgLSBzdGF0ZS5wcmVzZXJ2ZWRSZXVzZWRSZWdpc3RlclN0YXRlLm51bWJlck9mQnl0ZXNQ
cmVzZXJ2ZWQgLSBzdGF0ZS5udW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2
YXRpb24oKSksCiAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEND
YWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICAgICAgc3RhdGUucmVz
dG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKGlzR2V0dGVyKCkpOwogCkBAIC04ODYs
MTIgKzg4NiwxMyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHNjcmF0Y2hHUFIzID0gSW52YWxpZEdQUlJlZzsKIAot
ICAgICAgICBzaXplX3QgbnVtYmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZlUmV1c2VkUmVnaXN0ZXJz
ID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOworICAg
ICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0
YXRlID0KKyAgICAgICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVz
aGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpTcGFj
ZUZvckNDYWxsKTsKIAogICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwogCiAgICAgICAgIGJvb2wgc2NyYXRjaEdQ
Ukhhc1N0b3JhZ2UgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBuZWVkc1RvTWFrZVJvb21PblN0YWNr
Rm9yQ0NhbGwgPSAhbnVtYmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzICYm
IGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkZUTEpJVDsKKyAgICAgICAgYm9vbCBu
ZWVkc1RvTWFrZVJvb21PblN0YWNrRm9yQ0NhbGwgPSAhcHJlc2VydmVkU3RhdGUubnVtYmVyT2ZC
eXRlc1ByZXNlcnZlZCAmJiBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQ7
CiAKICAgICAgICAgaWYgKG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICBzaXplX3QgbmV3
U2l6ZSA9IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFs
dWUpOwpAQCAtMTAxNiwxMiArMTAxNywxMiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFj
Y2Vzc0dlbmVyYXRpCiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgbnVt
YmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzLCBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CisgICAgICAgIGFsbG9j
YXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUp
OwogICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CiAKICAgICAgICAgaWYgKG5ld1N0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KSB7CiAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotICAgICAgICAgICAgYWxsb2Nh
dG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBudW1iZXJPZkJ5dGVzVXNl
ZFRvUHJlc2VydmVSZXVzZWRSZWdpc3RlcnMsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0
cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0
b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwogICAgICAg
ICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNh
bGwoaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIGlmIChuZWVk
c1RvTWFrZVJvb21PblN0YWNrRm9yQ0NhbGwpCiAgICAgICAgICAgICAgICAgaml0Lm1ha2VTcGFj
ZU9uU3RhY2tGb3JDQ2FsbCgpOwpAQCAtMTI0NSw3ICsxMjQ2LDggQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOgogICAgIENDYWxsSGVscGVycyBqaXQoJnZtLCBjb2Rl
QmxvY2spOwogICAgIHN0YXRlLmppdCA9ICZqaXQ7CiAKLSAgICBzdGF0ZS5udW1iZXJPZkJ5dGVz
VXNlZFRvUHJlc2VydmVSZXVzZWRSZWdpc3RlcnMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRS
ZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3Rh
Y2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKKyAgICBzdGF0ZS5wcmVzZXJ2ZWRSZXVzZWRSZWdpc3Rl
clN0YXRlID0KKyAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNo
aW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0
cmFTcGFjZSk7CiAKICAgICBib29sIGFsbEd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrID0gdHJ1ZTsK
ICAgICBib29sIGhhc0pTR2V0dGVyU2V0dGVyQ2FsbCA9IGZhbHNlOwpAQCAtMTMxNSw3ICsxMzE3
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOgogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbWFrZXNoaWZ0Q2F0Y2hIYW5kbGVyID0gaml0LmxhYmVsKCk7
CiAKICAgICAgICAgaW50IHN0YWNrUG9pbnRlck9mZnNldCA9IGNvZGVCbG9jay0+c3RhY2tQb2lu
dGVyT2Zmc2V0KCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgICAgICBzdGFja1BvaW50
ZXJPZmZzZXQgLT0gc3RhdGUubnVtYmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZlUmV1c2VkUmVnaXN0
ZXJzOworICAgICAgICBzdGFja1BvaW50ZXJPZmZzZXQgLT0gc3RhdGUucHJlc2VydmVkUmV1c2Vk
UmVnaXN0ZXJTdGF0ZS5udW1iZXJPZkJ5dGVzUHJlc2VydmVkOwogICAgICAgICBzdGFja1BvaW50
ZXJPZmZzZXQgLT0gc3RhdGUubnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2Vy
dmF0aW9uKCk7CiAKICAgICAgICAgaml0LmxvYWRQdHIodm0uYWRkcmVzc09mQ2FsbEZyYW1lRm9y
Q2F0Y2goKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9u
IDE5NDExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXIuaCIKICNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2lu
Y2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMzQ5
LDcgKzM1MCw3IEBAIHN0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgewogICAgIH0KICAgICBD
Q2FsbEhlbHBlcnMqIGppdCB7IG51bGxwdHIgfTsKICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IqIGFsbG9jYXRvcjsKLSAgICB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVS
ZXVzZWRSZWdpc3RlcnMgeyAwIH07CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVz
ZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRSZXVzZWRSZWdpc3RlclN0YXRlOwogICAgIFBvbHltb3JwaGlj
QWNjZXNzKiBhY2Nlc3MgeyBudWxscHRyIH07CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvIHsgbnVsbHB0ciB9OwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzdWNjZXNzOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlQmluYXJ5T3AuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZUJpbmFyeU9w
LmNwcAkocmV2aXNpb24gMTk0MTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlQmluYXJ5T3AuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9p
ZCBnZW5lcmF0ZUJpbmFyeUJpdE9wRmFzdFBhdGgoQmluYXJ5TwogICAgIFNuaXBwZXRHZW5lcmF0
b3IgZ2VuKGljLmxlZnRPcGVyYW5kKCksIGljLnJpZ2h0T3BlcmFuZCgpLCBKU1ZhbHVlUmVncyhy
ZXN1bHQpLAogICAgICAgICBKU1ZhbHVlUmVncyhsZWZ0KSwgSlNWYWx1ZVJlZ3MocmlnaHQpLCBz
Y3JhdGNoR1BSKTsKIAotICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJl
dXNlZFJlZ2lzdGVycyA9CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRT
dGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9CiAgICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJl
Z2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFj
a1NwYWNlOjpOb0V4dHJhU3BhY2UpOwogCiAgICAgY29udGV4dC5pbml0aWFsaXplUmVnaXN0ZXJz
KGppdCk7CkBAIC0xODgsMTQgKzE4OCwxMiBAQCB2b2lkIGdlbmVyYXRlQmluYXJ5Qml0T3BGYXN0
UGF0aChCaW5hcnlPCiAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluaygmaml0KTsKIAogICAgIGNv
bnRleHQucmVzdG9yZVJlZ2lzdGVycyhqaXQpOwotICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2Vk
UmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgbnVtYmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZlUmV1c2Vk
UmVnaXN0ZXJzLAotICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tT
cGFjZTo6Tm9FeHRyYVNwYWNlKTsKKyAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVy
c0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKICAgICBkb25lID0gaml0Lmp1bXAoKTsK
IAogICAgIGdlbi5zbG93UGF0aEp1bXBMaXN0KCkubGluaygmaml0KTsKICAgICBjb250ZXh0LnJl
c3RvcmVSZWdpc3RlcnMoaml0KTsKLSAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVy
c0J5UG9wcGluZyhqaXQsIG51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVy
cywKLSAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5v
RXh0cmFTcGFjZSk7CisgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBp
bmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgc2xvd1BhdGhTdGFydCA9IGppdC5qdW1wKCk7
CiB9CiAKQEAgLTIxNCw3ICsyMTIsNyBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZVJpZ2h0U2hpZnRG
YXN0UGF0aChCCiAgICAgSklUUmlnaHRTaGlmdEdlbmVyYXRvciBnZW4oaWMubGVmdE9wZXJhbmQo
KSwgaWMucmlnaHRPcGVyYW5kKCksIEpTVmFsdWVSZWdzKHJlc3VsdCksCiAgICAgICAgIEpTVmFs
dWVSZWdzKGxlZnQpLCBKU1ZhbHVlUmVncyhyaWdodCksIGxlZnRGUFIsIHNjcmF0Y2hHUFIsIElu
dmFsaWRGUFJSZWcsIHNoaWZ0VHlwZSk7CiAKLSAgICB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzVXNl
ZFRvUHJlc2VydmVSZXVzZWRSZWdpc3RlcnMgPQorICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6UHJlc2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGUgPQogICAgICAgICBhbGxvY2F0b3IucHJl
c2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKIAogICAgIGNvbnRleHQuaW5pdGlh
bGl6ZVJlZ2lzdGVycyhqaXQpOwpAQCAtMjIzLDE0ICsyMjEsMTIgQEAgc3RhdGljIHZvaWQgZ2Vu
ZXJhdGVSaWdodFNoaWZ0RmFzdFBhdGgoQgogICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRo
KCkpOwogICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsoJmppdCk7CiAgICAgY29udGV4dC5yZXN0
b3JlUmVnaXN0ZXJzKGppdCk7Ci0gICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNC
eVBvcHBpbmcoaml0LCBudW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVSZXVzZWRSZWdpc3RlcnMs
Ci0gICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4
dHJhU3BhY2UpOworICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5n
KGppdCwgcHJlc2VydmVkU3RhdGUpOwogICAgIGRvbmUgPSBqaXQuanVtcCgpOwogCiAgICAgZ2Vu
LnNsb3dQYXRoSnVtcExpc3QoKS5saW5rKCZqaXQpOwogICAgIGNvbnRleHQucmVzdG9yZVJlZ2lz
dGVycyhqaXQpOwotICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5n
KGppdCwgbnVtYmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzLAotICAgICAg
ICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNl
KTsKKyAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHBy
ZXNlcnZlZFN0YXRlKTsKICAgICBzbG93UGF0aFN0YXJ0ID0gaml0Lmp1bXAoKTsKIH0KIApAQCAt
MjUzLDcgKzI0OSw3IEBAIHZvaWQgZ2VuZXJhdGVCaW5hcnlBcml0aE9wRmFzdFBhdGgoQmluYXIK
ICAgICBCaW5hcnlBcml0aE9wR2VuZXJhdG9yIGdlbihpYy5sZWZ0T3BlcmFuZCgpLCBpYy5yaWdo
dE9wZXJhbmQoKSwgSlNWYWx1ZVJlZ3MocmVzdWx0KSwKICAgICAgICAgSlNWYWx1ZVJlZ3MobGVm
dCksIEpTVmFsdWVSZWdzKHJpZ2h0KSwgbGVmdEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNj
cmF0Y2hGUFIpOwogCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZlUmV1
c2VkUmVnaXN0ZXJzID0KKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0
YXRlIHByZXNlcnZlZFN0YXRlID0KICAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVn
aXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNr
U3BhY2U6Ok5vRXh0cmFTcGFjZSk7CiAKICAgICBjb250ZXh0LmluaXRpYWxpemVSZWdpc3RlcnMo
aml0KTsKQEAgLTI2MiwxNCArMjU4LDEyIEBAIHZvaWQgZ2VuZXJhdGVCaW5hcnlBcml0aE9wRmFz
dFBhdGgoQmluYXIKICAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKTsKICAgICBnZW4u
ZW5kSnVtcExpc3QoKS5saW5rKCZqaXQpOwogICAgIGNvbnRleHQucmVzdG9yZVJlZ2lzdGVycyhq
aXQpOwotICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwg
bnVtYmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzLAotICAgICAgICBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKKyAg
ICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZl
ZFN0YXRlKTsKICAgICBkb25lID0gaml0Lmp1bXAoKTsKIAogICAgIGdlbi5zbG93UGF0aEp1bXBM
aXN0KCkubGluaygmaml0KTsKICAgICBjb250ZXh0LnJlc3RvcmVSZWdpc3RlcnMoaml0KTsKLSAg
ICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIG51bWJlck9m
Qnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycywKLSAgICAgICAgU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7CisgICAgYWxsb2Nh
dG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7
CiAgICAgc2xvd1BhdGhTdGFydCA9IGppdC5qdW1wKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAJKHJldmlzaW9uIDE5NDExOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzksNyArNzksOCBAQCB2b2lkIExhenlTbG93UGF0aDo6Z2VuZXJhdGUoQ29k
ZUJsb2NrKiBjCiAgICAgcGFyYW1zLmxhenlTbG93UGF0aCA9IHRoaXM7CiAKICNpZiAhRlRMX1VT
RVNfQjMKLSAgICB1bnNpZ25lZCBieXRlc1NhdmVkID0gbV9zY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKKyAgICBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0KKyAgICAgICAg
bV9zY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hp
bmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRy
YVNwYWNlKTsKICAgICAvLyBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIExMVk0gbWF5IGNyZWF0ZSBh
IHN0YWNrbWFwIGxvY2F0aW9uIHRoYXQgaXMgdGhlIHJlZ2lzdGVyIFNQLgogICAgIC8vIEJ1dCBv
biBhcm02NCwgU1AgaXMgYWxzbyB0aGUgc2FtZSByZWdpc3RlciBudW1iZXIgYXMgWlIsIHNvIExM
Vk0gaXMgdGVsbGluZyB1cyB0aGF0IGl0IGhhcwogICAgIC8vIHByb3ZlbiBzb21ldGhpbmcgaXMg
emVyby4gT3VyIE1BU00gaXNuJ3QgdW5pdmVyc2FsbHkgY29tcGF0aWJsZSB3aXRoIGFybTY0J3Mg
Y29udGV4dCBkZXBlbmRlbnQKQEAgLTk0LDkgKzk1LDkgQEAgdm9pZCBMYXp5U2xvd1BhdGg6Omdl
bmVyYXRlKENvZGVCbG9jayogYwogI2lmICFGVExfVVNFU19CMwogICAgIENDYWxsSGVscGVyczo6
TGFiZWwgZG9uZUxhYmVsOwogICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wVG9FbmRPZlBhdGNo
cG9pbnQ7Ci0gICAgaWYgKGJ5dGVzU2F2ZWQpIHsKKyAgICBpZiAocHJlc2VydmVkU3RhdGUubnVt
YmVyT2ZCeXRlc1ByZXNlcnZlZCkgewogICAgICAgICBkb25lTGFiZWwgPSBqaXQubGFiZWwoKTsK
LSAgICAgICAgbV9zY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVy
c0J5UG9wcGluZyhqaXQsIGJ5dGVzU2F2ZWQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0
cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOworICAgICAgICBtX3NjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3Rh
dGUpOwogICAgICAgICBqdW1wVG9FbmRPZlBhdGNocG9pbnQgPSBqaXQuanVtcCgpOwogICAgIH0K
ICNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKQEAgLTEwNSw3ICsxMDYsNyBAQCB2b2lkIExhenlTbG93
UGF0aDo6Z2VuZXJhdGUoQ29kZUJsb2NrKiBjCiAjaWYgRlRMX1VTRVNfQjMKICAgICBsaW5rQnVm
ZmVyLmxpbmsocGFyYW1zLmRvbmVKdW1wcywgbV9kb25lKTsKICNlbHNlIC8vIEZUTF9VU0VTX0Iz
Ci0gICAgaWYgKGJ5dGVzU2F2ZWQpIHsKKyAgICBpZiAocHJlc2VydmVkU3RhdGUubnVtYmVyT2ZC
eXRlc1ByZXNlcnZlZCkgewogICAgICAgICBsaW5rQnVmZmVyLmxpbmsocGFyYW1zLmRvbmVKdW1w
cywgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGRvbmVMYWJlbCkpOwogICAgICAgICBsaW5rQnVmZmVy
LmxpbmsoanVtcFRvRW5kT2ZQYXRjaHBvaW50LCBtX3BhdGNocG9pbnQubGFiZWxBdE9mZnNldChN
YWNyb0Fzc2VtYmxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpKSk7CiAgICAgfSBlbHNlCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAkocmV2aXNpb24gMTk0MTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzNDIsNyArOTM0Miw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVT
Y3JhdGNoR1BSKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVzUHVz
aGVkID0KKyAgICAgICAgICAgICAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6
UHJlc2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGUgPQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVz
aGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpTcGFj
ZUZvckNDYWxsKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBz
YXZlZCB0aGVzZSwgc28gd2hlbiB3ZSBtYWtlIGEgc2xvdyBwYXRoIGNhbGwsIHdlIGRvbid0IGhh
dmUKQEAgLTkzNjUsNyArOTM2NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjcmF0Y2gxLCBzY3JhdGNoMiwgQ0NhbGxIZWxwZXJzOjpTY2FsZVB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVv
Zih2b2lkKikpKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgYnl0ZXNQdXNoZWQs
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxs
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5yZXN0
b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwogCiAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVuZChqaXQuanVtcCgpKTsK
IApAQCAtOTM3NCw3ICs5Mzc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1c2VkUmVnaXN0ZXJzLCBqaXQsIHBhcmFtcy5sYXp5U2xvd1BhdGgtPmNhbGxTaXRlSW5k
ZXgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZXhjZXB0aW9uSnVtcHMs
IG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBJbnZhbGlkR1BSUmVnLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
c2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmco
aml0LCBieXRlc1B1c2hlZCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3Bh
Y2U6OlNwYWNlRm9yQ0NhbGwpOworICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2
ZWRTdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVu
ZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9LApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTk0MTE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDIsMTAgKzEwMiwxMCBAQCB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIFNjcmF0Y2hS
CiBHUFJSZWcgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjphbGxvY2F0ZVNjcmF0Y2hHUFIoKSB7
IHJldHVybiBhbGxvY2F0ZVNjcmF0Y2g8R1BSSW5mbz4oKTsgfQogRlBSUmVnIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6YWxsb2NhdGVTY3JhdGNoRlBSKCkgeyByZXR1cm4gYWxsb2NhdGVTY3Jh
dGNoPEZQUkluZm8+KCk7IH0KIAotdW5zaWduZWQgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpw
cmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhNYWNyb0Fzc2VtYmxlciYgaml0LCBFeHRy
YVN0YWNrU3BhY2UgZXh0cmFTdGFja1NwYWNlKQorU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQ
cmVzZXJ2ZWRTdGF0ZSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlUmV1c2VkUmVn
aXN0ZXJzQnlQdXNoaW5nKE1hY3JvQXNzZW1ibGVyJiBqaXQsIEV4dHJhU3RhY2tTcGFjZSBleHRy
YVN0YWNrU3BhY2UpCiB7CiAgICAgaWYgKCFkaWRSZXVzZVJlZ2lzdGVycygpKQotICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIFByZXNlcnZlZFN0YXRlKDAsIGV4dHJhU3RhY2tTcGFj
ZSk7CiAKICAgICBSZWdpc3RlclNldCByZWdpc3RlcnNUb1NwaWxsOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CkBAIC0xMjIs
MTAgKzEyMiwxMCBAQCB1bnNpZ25lZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlCiAg
ICAgdW5zaWduZWQgZXh0cmFTdGFja0J5dGVzQXRUb3BPZlN0YWNrID0gZXh0cmFTdGFja1NwYWNl
ID09IEV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCA/IG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsIDogMDsKICAgICB1bnNpZ25lZCBzdGFja0FkanVzdG1lbnRTaXplID0gU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGppdCwg
cmVnaXN0ZXJzVG9TcGlsbCwgZXh0cmFTdGFja0J5dGVzQXRUb3BPZlN0YWNrKTsKIAotICAgIHJl
dHVybiBzdGFja0FkanVzdG1lbnRTaXplOworICAgIHJldHVybiBQcmVzZXJ2ZWRTdGF0ZShzdGFj
a0FkanVzdG1lbnRTaXplLCBleHRyYVN0YWNrU3BhY2UpOwogfQogCi12b2lkIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhNYWNyb0Fzc2Vt
YmxlciYgaml0LCB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVSZXVzZWRSZWdp
c3RlcnMsIEV4dHJhU3RhY2tTcGFjZSBleHRyYVN0YWNrU3BhY2UpCit2b2lkIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhNYWNyb0Fzc2Vt
YmxlciYgaml0LCBjb25zdCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRl
IHByZXNlcnZlZFN0YXRlKQogewogICAgIGlmICghZGlkUmV1c2VSZWdpc3RlcnMoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTQyLDkgKzE0MiwxMSBAQCB2b2lkIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcjo6cmVzdG9yZVJlCiAgICAgICAgICAgICByZWdpc3RlcnNUb0ZpbGwuc2V0KHJlZyk7CiAg
ICAgfQogCi0gICAgdW5zaWduZWQgZXh0cmFTdGFja0J5dGVzQXRUb3BPZlN0YWNrID0gZXh0cmFT
dGFja1NwYWNlID09IEV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCA/IG1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsIDogMDsKKyAgICB1bnNpZ25lZCBleHRyYVN0YWNrQnl0ZXNBdFRv
cE9mU3RhY2sgPQorICAgICAgICBwcmVzZXJ2ZWRTdGF0ZS5leHRyYVN0YWNrU3BhY2VSZXF1aXJl
bWVudCA9PSBFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwgPyBtYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbCA6IDA7CiAgICAgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmU7IC8vIEVtcHR5
IHNldC4gV2Ugd2FudCB0byByZXN0b3JlIGV2ZXJ5dGhpbmcuCi0gICAgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVy
c1RvRmlsbCwgZG9udFJlc3RvcmUsIG51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJl
Z2lzdGVycywgZXh0cmFTdGFja0J5dGVzQXRUb3BPZlN0YWNrKTsKKyAgICBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0
ZXJzVG9GaWxsLCBkb250UmVzdG9yZSwKKyAgICAgICAgcHJlc2VydmVkU3RhdGUubnVtYmVyT2ZC
eXRlc1ByZXNlcnZlZCwgZXh0cmFTdGFja0J5dGVzQXRUb3BPZlN0YWNrKTsKIH0KIAogUmVnaXN0
ZXJTZXQgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjp1c2VkUmVnaXN0ZXJzRm9yQ2FsbCgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE5NDExOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3
LDggKzY3LDIzIEBAIHB1YmxpYzoKICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzKCkgY29u
c3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBFeHRy
YVN0YWNrU3BhY2UgeyBTcGFjZUZvckNDYWxsLCBOb0V4dHJhU3BhY2UgfTsKLSAgICB1bnNpZ25l
ZCBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhNYWNyb0Fzc2VtYmxlciYgaml0LCBF
eHRyYVN0YWNrU3BhY2UpOwotICAgIHZvaWQgcmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGlu
ZyhNYWNyb0Fzc2VtYmxlciYgaml0LCB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2Vy
dmVSZXVzZWRSZWdpc3RlcnMsIEV4dHJhU3RhY2tTcGFjZSk7CisKKyAgICBzdHJ1Y3QgUHJlc2Vy
dmVkU3RhdGUgeworICAgICAgICBQcmVzZXJ2ZWRTdGF0ZSgpCisgICAgICAgICAgICA6IFByZXNl
cnZlZFN0YXRlKDApCisgICAgICAgIHsgfQorCisgICAgICAgIFByZXNlcnZlZFN0YXRlKHVuc2ln
bmVkIG51bWJlck9mQnl0ZXMsIEV4dHJhU3RhY2tTcGFjZSBleHRyYVN0YWNrU3BhY2UgPSBFeHRy
YVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSkKKyAgICAgICAgICAgIDogbnVtYmVyT2ZCeXRlc1By
ZXNlcnZlZChudW1iZXJPZkJ5dGVzKQorICAgICAgICAgICAgLCBleHRyYVN0YWNrU3BhY2VSZXF1
aXJlbWVudChleHRyYVN0YWNrU3BhY2UpCisgICAgICAgIHsgfQorCisgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mQnl0ZXNQcmVzZXJ2ZWQ7CisgICAgICAgIEV4dHJhU3RhY2tTcGFjZSBleHRyYVN0
YWNrU3BhY2VSZXF1aXJlbWVudDsKKyAgICB9OworCisgICAgUHJlc2VydmVkU3RhdGUgcHJlc2Vy
dmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCwgRXh0cmFTdGFj
a1NwYWNlKTsKKyAgICB2b2lkIHJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoTWFjcm9B
c3NlbWJsZXImIGppdCwgUHJlc2VydmVkU3RhdGUpOwogICAgIAogICAgIFJlZ2lzdGVyU2V0IHVz
ZWRSZWdpc3RlcnNGb3JDYWxsKCkgY29uc3Q7CiAgICAgCg==
</data>
<flag name="review"
          id="292455"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="292456"
          type_id="3"
          status="-"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>