<?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>115594</bug_id>
          
          <creation_ts>2013-05-04 13:43:53 -0700</creation_ts>
          <short_desc>fourthTier: CodeBlock should be RefCounted</short_desc>
          <delta_ts>2013-05-09 19:44:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>112839</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>884571</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-04 13:43:53 -0700</bug_when>
    <thetext>This will get rid of a bunch of weird ownership rules, and make the implementation of concurrent compilation a heck of a lot easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884574</commentid>
    <comment_count>1</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-05-04 13:50:37 -0700</bug_when>
    <thetext>Can we use GC for this instead? Inside the GC heap, it&apos;s easier when GC objects point to other GC objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884576</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-04 13:54:23 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Can we use GC for this instead? Inside the GC heap, it&apos;s easier when GC objects point to other GC objects.

Probably, eventually.  But right now CodeBlock has a weird relationship with the GC - the GC does have a say in when a CodeBlock dies but not in the usual sense of tracing - so we&apos;ll have to be careful when we do that.  There&apos;s also the issue that how a CodeBlock is traced depends on who owns it (either Executable or the GC itself), so it&apos;s not like making it GC&apos;d would simplify its visit methods.

For now, I don&apos;t see a clear benefit to making CodeBlock GC&apos;d.  It&apos;s true that doing so would mean that Executable would not have to be destructible, but I think that&apos;s really the only benefit.

On the other hand, there is a clear benefit to making it ref-counted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887188</commentid>
    <comment_count>3</comment_count>
      <attachid>201308</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-09 18:28:32 -0700</bug_when>
    <thetext>Created attachment 201308
the patch

Not setting r? yet because I&apos;m still running tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887192</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-09 18:44:19 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=201308) [details]
&gt; the patch
&gt; 
&gt; Not setting r? yet because I&apos;m still running tests.

It&apos;s perf neutral.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887208</commentid>
    <comment_count>5</comment_count>
      <attachid>201308</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-05-09 19:41:07 -0700</bug_when>
    <thetext>Comment on attachment 201308
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887211</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-09 19:44:45 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/149860</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201308</attachid>
            <date>2013-05-09 18:28:32 -0700</date>
            <delta_ts>2013-05-09 19:41:07 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33811</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ5ODU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDEzLTA1LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogQ29kZUJsb2NrIHNob3VsZCBiZSBSZWZDb3VudGVkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTU1OTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFrZXMgaXQg
cG9zc2libGUgdG8gaGF2ZSB0aGUgY3VycmVudGx5LWJlaW5nLWNvbXBpbGVkIENvZGVCbG9jayBu
b3QgYmUKKyAgICAgICAgaW5zdGFsbGVkIGluIEV4ZWN1dGFibGUsIHdoaWxlIGFsc28gYWxsb3dp
bmcgaXQgdG8gcG9pbnQgdG8gaXRzIGludGVuZGVkCisgICAgICAgIGFsdGVybmF0aXZlKCkuIFNv
IGxvbmcgYXMgd2Ugd2VyZSB1c2luZyBvd25lcnNoaXAgYW5kIG5vdCByZWZlcmVuY2UgY291bnRp
bmcsIGl0CisgICAgICAgIHdvdWxkIGhhdmUgYmVlbiBkaWZmaWN1bHQgdG8gaGF2ZSBib3RoIENv
ZGVCbG9jazo6bV9hbHRlcm5hdGl2ZSBhbmQKKyAgICAgICAgRXhlY3V0YWJsZTo6bV9jb2RlQmxv
Y2tGb3JCbGFoIHBvaW50IHRvIHRoZSBwcmV2aW91cyBDb2RlQmxvY2suCisgICAgICAgIAorICAg
ICAgICBJIGFsc28gdG9vayB0aGUgb3Bwb3J0dW5pdHkgdG8gY2xlYW4gdXAgYSBidW5jaCBvZiBj
b2RlIHRoYXQgYXBwZWFycyB0byBoYXZlCisgICAgICAgIHJvdHRlZC4KKworICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKE1hY3JvQXNzZW1ibGVy
Q29kZVB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6b3BlcmF0b3I9
PSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlbGVhc2VBbHRlcm5hdGl2ZSk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6c2V0QWx0ZXJuYXRpdmUpOgorICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAg
ICAgKEpTQzo6R2xvYmFsQ29kZUJsb2NrOjpHbG9iYWxDb2RlQmxvY2spOgorICAgICAgICAoSlND
OjpQcm9ncmFtQ29kZUJsb2NrOjpQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RXZh
bENvZGVCbG9jazo6RXZhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJs
b2NrOjpGdW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAgICogaGVhcC9ERkdDb2RlQmxvY2tzLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHQ29kZUJsb2Nrczo6fkRGR0NvZGVCbG9ja3MpOgorICAgICAg
ICAoSlNDOjpERkdDb2RlQmxvY2tzOjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6OkRGR0NvZGVC
bG9ja3M6OmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9ja3MpOgorICAgICAgICAqIGhl
YXAvREZHQ29kZUJsb2Nrcy5oOgorICAgICAgICAoREZHQ29kZUJsb2Nrcyk6CisgICAgICAgICog
aGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6amV0dGlzb25ERkdDb2RlQmxvY2sp
OgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGppdC9KSVREcml2ZXIuaDoKKyAg
ICAgICAgKEpTQzo6aml0Q29tcGlsZUlmQXBwcm9wcmlhdGUpOgorICAgICAgICAoSlNDOjpqaXRD
b21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFi
bGUuY3BwOgorICAgICAgICAoSlNDOjpqZXR0aXNvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6
OkV2YWxFeGVjdXRhYmxlOjpqaXRDb21waWxlKToKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFi
bGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpq
aXRDb21waWxlKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6aml0Q29tcGlsZUZvckNh
bGwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmppdENvbXBpbGVGb3JDb25z
dHJ1Y3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxv
Y2tGb3IpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxs
SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JD
b25zdHJ1Y3RJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAg
ICAgIChFdmFsRXhlY3V0YWJsZSk6CisgICAgICAgIChGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvZGVCbG9ja0Zvcik6CisgICAgICAgICog
cnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmg6CisgICAgICAgIChKU0M6OnByZXBhcmVGb3JFeGVj
dXRpb24pOgorICAgICAgICAoSlNDOjpwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24pOgorCiAy
MDEzLTA1LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91
cnRoVGllcjogREZHIHNob3VsZCBoYXZlIGl0cyBvd24gbm90aW9uIG9mIFN0cnVjdHVyZUNoYWlu
LCBhbmQgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHZhbGlkYXRlIGl0IGFmdGVyIGNvbXBpbGF0
aW9uIGZpbmlzaGVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHJldmlzaW9uIDE0OTg1NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxNSw2ICszMTUsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
cmV0dXJuICFtX3ZhbHVlOwogICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQogCiBwcml2YXRlOgogICAgIHZvaWQq
IG1fdmFsdWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMTQ5ODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MTUsNyArMTYxNSw3IEBAIENv
ZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICB9CiB9CiAKLUNvZGVC
bG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
ZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCB1bnNpZ25lZCBiYXNlU2NvcGVEZXB0aCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4g
c291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgUGFzc093blB0cjxDb2RlQmxv
Y2s+IGFsdGVybmF0aXZlKQorQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSog
b3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGJhc2VTY29wZURlcHRoLCBQYXNz
UmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zm
c2V0KQogICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1
dGFibGUsIGdsb2JhbE9iamVjdCkKICAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPnZtKCku
aGVhcCkKICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251
bUNhbGxlZVJlZ2lzdGVycykKQEAgLTE2MzIsNyArMTYzMiw2IEBAIENvZGVCbG9jazo6Q29kZUJs
b2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAsIG1fc291cmNlKHNvdXJjZVByb3ZpZGVyKQog
ICAgICwgbV9zb3VyY2VPZmZzZXQoc291cmNlT2Zmc2V0KQogICAgICwgbV9jb2RlVHlwZSh1bmxp
bmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSkKLSAgICAsIG1fYWx0ZXJuYXRpdmUoYWx0ZXJuYXRp
dmUpCiAgICAgLCBtX29zckV4aXRDb3VudGVyKDApCiAgICAgLCBtX29wdGltaXphdGlvbkRlbGF5
Q291bnRlcigwKQogICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTQ5
ODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdUaGlzT2JqZWN0TWFya2VyKCkgeyByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsgfQogCi0gICAgY2xhc3MgQ29kZUJsb2NrIDog
cHVibGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIsIHB1YmxpYyBXZWFrUmVmZXJlbmNlSGFydmVz
dGVyIHsKK2NsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBSZWZDb3VudGVkPENvZGVCbG9jaz4sIHB1
YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVyLCBwdWJsaWMgV2Vha1JlZmVyZW5jZUhhcnZlc3Rl
ciB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgICAgICBmcmllbmQgY2xh
c3MgSklUOwogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAt
OTksNyArOTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIENv
ZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpOwogICAgICAgICAK
LSAgICAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5s
aW5rZWRDb2RlQmxvY2sqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIGJhc2VTY29wZURlcHRo
LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBQYXNz
T3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpOworICAgICAgICBDb2RlQmxvY2soU2NyaXB0
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayosIEpTR2xvYmFs
T2JqZWN0KiwgdW5zaWduZWQgYmFzZVNjb3BlRGVwdGgsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlk
ZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQpOwogCiAgICAgICAgIFdyaXRlQmFycmllcjxKU0ds
b2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CiAgICAgICAgIEhlYXAqIG1faGVhcDsKQEAgLTEy
Myw4ICsxMjMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2Nr
LCBtX251bVBhcmFtZXRlcnMpOyB9CiAKICAgICAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgp
IHsgcmV0dXJuIG1fYWx0ZXJuYXRpdmUuZ2V0KCk7IH0KLSAgICAgICAgUGFzc093blB0cjxDb2Rl
QmxvY2s+IHJlbGVhc2VBbHRlcm5hdGl2ZSgpIHsgcmV0dXJuIG1fYWx0ZXJuYXRpdmUucmVsZWFz
ZSgpOyB9Ci0gICAgICAgIHZvaWQgc2V0QWx0ZXJuYXRpdmUoUGFzc093blB0cjxDb2RlQmxvY2s+
IGFsdGVybmF0aXZlKSB7IG1fYWx0ZXJuYXRpdmUgPSBhbHRlcm5hdGl2ZTsgfQorICAgICAgICBQ
YXNzUmVmUHRyPENvZGVCbG9jaz4gcmVsZWFzZUFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRl
cm5hdGl2ZS5yZWxlYXNlKCk7IH0KKyAgICAgICAgdm9pZCBzZXRBbHRlcm5hdGl2ZShQYXNzUmVm
UHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpIHsgbV9hbHRlcm5hdGl2ZSA9IGFsdGVybmF0aXZl
OyB9CiAgICAgICAgIAogICAgICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0
aW9uS2luZCgpIGNvbnN0CiAgICAgICAgIHsKQEAgLTEwODIsNyArMTA4Miw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4g
PiBtX2Z1bmN0aW9uRGVjbHM7CiAgICAgICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8RnVuY3Rpb25F
eGVjdXRhYmxlPiA+IG1fZnVuY3Rpb25FeHByczsKIAotICAgICAgICBPd25QdHI8Q29kZUJsb2Nr
PiBtX2FsdGVybmF0aXZlOworICAgICAgICBSZWZQdHI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZl
OwogICAgICAgICAKICAgICAgICAgRXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50
ZXI7CiAgICAgICAgIApAQCAtMTEzNyw4ICsxMTM3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgR2xvYmFsQ29kZUJsb2NrKFNjcmlw
dEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2Vk
Q29kZUJsb2NrLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBiYXNlU2Nv
cGVEZXB0aCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2ln
bmVkIHNvdXJjZU9mZnNldCwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQotICAg
ICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywg
Z2xvYmFsT2JqZWN0LCBiYXNlU2NvcGVEZXB0aCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNl
dCwgYWx0ZXJuYXRpdmUpCisgICAgICAgIEdsb2JhbENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgYmFzZVNjb3BlRGVwdGgsIFBh
c3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VP
ZmZzZXQpCisgICAgICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2Vk
Q29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIGJhc2VTY29wZURlcHRoLCBzb3VyY2VQcm92aWRlciwg
c291cmNlT2Zmc2V0KQogICAgICAgICB7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMTE1MCw4ICsx
MTUwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAg
IFByb2dyYW1Db2RlQmxvY2soUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIs
IFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKLSAgICAgICAgICAgIDogR2xvYmFs
Q29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIGdsb2JhbE9iamVj
dCwgMCwgc291cmNlUHJvdmlkZXIsIDAsIGFsdGVybmF0aXZlKQorICAgICAgICBQcm9ncmFtQ29k
ZUJsb2NrKFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyKQorICAgICAgICAg
ICAgOiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywg
Z2xvYmFsT2JqZWN0LCAwLCBzb3VyY2VQcm92aWRlciwgMCkKICAgICAgICAgewogICAgICAgICB9
CiAKQEAgLTExNzIsOCArMTE3Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIEV2YWxDb2RlQmxvY2soRXZhbEV4ZWN1dGFibGUqIG93
bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4g
c291cmNlUHJvdmlkZXIsIGludCBiYXNlU2NvcGVEZXB0aCwgUGFzc093blB0cjxDb2RlQmxvY2s+
IGFsdGVybmF0aXZlKQotICAgICAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRh
YmxlLCB1bmxpbmtlZENvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBiYXNlU2NvcGVEZXB0aCwgc291
cmNlUHJvdmlkZXIsIDAsIGFsdGVybmF0aXZlKQorICAgICAgICBFdmFsQ29kZUJsb2NrKEV2YWxF
eGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRXZhbENvZGVCbG9jayogdW5saW5r
ZWRDb2RlQmxvY2ssIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291
cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBpbnQgYmFzZVNjb3BlRGVwdGgpCisgICAgICAg
ICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2Nr
LCBnbG9iYWxPYmplY3QsIGJhc2VTY29wZURlcHRoLCBzb3VyY2VQcm92aWRlciwgMCkKICAgICAg
ICAgewogICAgICAgICB9CiAKQEAgLTEyMDAsOCArMTIwMCw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayhGdW5jdGlv
bkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2ssIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQ
dHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQs
IFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSA9IG51bGxwdHIpCi0gICAgICAgICAg
ICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBnbG9iYWxP
YmplY3QsIDAsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIGFsdGVybmF0aXZlKQorICAg
ICAgICBGdW5jdGlvbkNvZGVCbG9jayhGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVBy
b3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQpCisgICAgICAgICAgICA6IENvZGVCbG9jayhv
d25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIDAsIHNvdXJj
ZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCShy
ZXZpc2lvbiAxNDk4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxv
Y2tzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMjAgKzM4LDE4IEBAIERGR0NvZGVCbG9ja3M6
OkRGR0NvZGVCbG9ja3MoKSB7IH0KIAogREZHQ29kZUJsb2Nrczo6fkRGR0NvZGVCbG9ja3MoKQog
ewotICAgIFZlY3RvcjxDb2RlQmxvY2sqLCAxNj4gdG9SZW1vdmU7CisgICAgVmVjdG9yPFJlZlB0
cjxDb2RlQmxvY2s+LCAxNj4gdG9SZW1vdmU7CiAgICAgCiAgICAgZm9yIChIYXNoU2V0PENvZGVC
bG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVnaW4oKTsgaXRlciAhPSBtX3NldC5lbmQo
KTsgKytpdGVyKSB7CiAgICAgICAgIGlmICgoKml0ZXIpLT5nZXRKSVRDb2RlKCktPmRmZ0NvbW1v
bigpLT5pc0pldHRpc29uZWQpCi0gICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoKml0ZXIpOwor
ICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGFkb3B0UmVmKCppdGVyKSk7CiAgICAgfQotICAg
IAotICAgIFdURjo6ZGVsZXRlQWxsVmFsdWVzKHRvUmVtb3ZlKTsKIH0KIAotdm9pZCBERkdDb2Rl
QmxvY2tzOjpqZXR0aXNvbihQYXNzT3duUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrUHRyKQordm9p
ZCBERkdDb2RlQmxvY2tzOjpqZXR0aXNvbihQYXNzUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2Nr
UHRyKQogewogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZGVsZXRlIGl0IG5vdzsgd2UganVzdCB3
YW50IGl0cyBwb2ludGVyLgotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY29kZUJsb2NrUHRy
LmxlYWtQdHIoKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvZGVCbG9ja1B0ci5sZWFr
UmVmKCk7CiAgICAgCiAgICAgQVNTRVJUKGNvZGVCbG9jayk7CiAgICAgQVNTRVJUKEpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmdldEpJVFR5cGUoKSkpOwpAQCAtNzUsMTQgKzcz
LDEyIEBAIHZvaWQgREZHQ29kZUJsb2Nrczo6Y2xlYXJNYXJrcygpCiAKIHZvaWQgREZHQ29kZUJs
b2Nrczo6ZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpCiB7Ci0gICAgVmVjdG9y
PENvZGVCbG9jayosIDE2PiB0b1JlbW92ZTsKKyAgICBWZWN0b3I8UmVmUHRyPENvZGVCbG9jaz4s
IDE2PiB0b1JlbW92ZTsKICAgICAKICAgICBmb3IgKEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJh
dG9yIGl0ZXIgPSBtX3NldC5iZWdpbigpOyBpdGVyICE9IG1fc2V0LmVuZCgpOyArK2l0ZXIpIHsK
ICAgICAgICAgaWYgKCgqaXRlciktPmdldEpJVENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzSmV0dGlz
b25lZCAmJiAhKCppdGVyKS0+Z2V0SklUQ29kZSgpLT5kZmdDb21tb24oKS0+bWF5QmVFeGVjdXRp
bmcpCi0gICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoKml0ZXIpOworICAgICAgICAgICAgdG9S
ZW1vdmUuYXBwZW5kKGFkb3B0UmVmKCppdGVyKSk7CiAgICAgfQotICAgIAotICAgIFdURjo6ZGVs
ZXRlQWxsVmFsdWVzKHRvUmVtb3ZlKTsKIH0KIAogdm9pZCBERkdDb2RlQmxvY2tzOjp0cmFjZU1h
cmtlZENvZGVCbG9ja3MoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5oCShyZXZpc2lvbiAxNDk4NTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgIC8vIGl0LiBUaGlzIGlzIHR5cGljYWxseSBjYWxs
ZWQgZWl0aGVyIGZyb20gYSByZWNvbXBpbGF0aW9uIHRyaWdnZXIsIG9yIGZyb20KICAgICAvLyBh
biB1bmNvbmRpdGlvbmFsIGZpbmFsaXplciBhc3NvY2lhdGVkIHdpdGggYSBDb2RlQmxvY2sgdGhh
dCBoYWQgd2VhawogICAgIC8vIHJlZmVyZW5jZXMsIHdoZXJlIHNvbWUgc3Vic2V0IG9mIHRob3Nl
IHJlZmVyZW5jZXMgd2VyZSBkZWFkLgotICAgIHZvaWQgamV0dGlzb24oUGFzc093blB0cjxDb2Rl
QmxvY2s+KTsKKyAgICB2b2lkIGpldHRpc29uKFBhc3NSZWZQdHI8Q29kZUJsb2NrPik7CiAgICAg
CiAgICAgLy8gQ2xlYXIgYWxsIG1hcmsgYml0cyBhc3NvY2lhdGVkIHdpdGggREZHIGNvZGUgYmxv
Y2tzLgogICAgIHZvaWQgY2xlYXJNYXJrcygpOwpAQCAtODYsNyArODYsNyBAQCBjbGFzcyBERkdD
b2RlQmxvY2tzIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAogcHVibGljOgotICAg
IHZvaWQgamV0dGlzb24oUGFzc093blB0cjxDb2RlQmxvY2s+KTsKKyAgICB2b2lkIGpldHRpc29u
KFBhc3NSZWZQdHI8Q29kZUJsb2NrPik7CiAgICAgdm9pZCBjbGVhck1hcmtzKCkgeyB9CiAgICAg
dm9pZCBtYXJrKHZvaWQqKSB7IH0KICAgICB2b2lkIGRlbGV0ZVVubWFya2VkSmV0dGlzb25lZENv
ZGVCbG9ja3MoKSB7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZp
c2lvbiAxNDk4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUwLDcgKzM1MCw3IEBAIGJvb2wgSGVhcDo6dW5wcm90ZWN0KEpTVmFs
dWUgaykKICAgICByZXR1cm4gbV9wcm90ZWN0ZWRWYWx1ZXMucmVtb3ZlKGsuYXNDZWxsKCkpOwog
fQogCi12b2lkIEhlYXA6OmpldHRpc29uREZHQ29kZUJsb2NrKFBhc3NPd25QdHI8Q29kZUJsb2Nr
PiBjb2RlQmxvY2spCit2b2lkIEhlYXA6OmpldHRpc29uREZHQ29kZUJsb2NrKFBhc3NSZWZQdHI8
Q29kZUJsb2NrPiBjb2RlQmxvY2spCiB7CiAgICAgbV9kZmdDb2RlQmxvY2tzLmpldHRpc29uKGNv
ZGVCbG9jayk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAx
NDk4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzOCw3ICsxMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBwcm90ZWN0KEpTVmFsdWUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBib29sIHVucHJvdGVjdChKU1ZhbHVlKTsgLy8gVHJ1ZSB3aGVuIHRoZSBwcm90ZWN0IGNvdW50
IGRyb3BzIHRvIDAuCiAgICAgICAgIAotICAgICAgICB2b2lkIGpldHRpc29uREZHQ29kZUJsb2Nr
KFBhc3NPd25QdHI8Q29kZUJsb2NrPik7CisgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxv
Y2soUGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBz
aXplX3Qgc2l6ZSgpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHko
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURHJpdmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaAkocmV2aXNpb24gMTQ5
ODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IENvZGVCbG9ja1R5cGU+Ci1pbmxpbmUgYm9vbCBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIE93blB0cjxDb2RlQmxvY2tUeXBlPiYgY29kZUJsb2NrLCBSZWZQdHI8SklU
Q29kZT4mIGppdENvZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQoraW5saW5lIGJvb2wgaml0Q29t
cGlsZUlmQXBwcm9wcmlhdGUoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2tUeXBlKiBjb2RlQmxv
Y2ssIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAKQEAgLTUyLDMwICs1MiwyNyBAQCBpbmxpbmUg
Ym9vbCBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShFeGVjCiAgICAgCiAgICAgUmVmUHRyPEpJVENv
ZGU+IG9sZEpJVENvZGUgPSBqaXRDb2RlOwogICAgIAotICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBm
YWxzZTsKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUpKQotICAgICAg
ICBkZmdDb21waWxlZCA9IERGRzo6dHJ5Q29tcGlsZShleGVjLCBjb2RlQmxvY2suZ2V0KCksIGpp
dENvZGUsIGJ5dGVjb2RlSW5kZXgpOwotICAgIGlmIChkZmdDb21waWxlZCkgewotICAgICAgICBp
ZiAoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQorICAgIGlmIChKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoaml0VHlwZSkpIHsKKyAgICAgICAgaWYgKERGRzo6dHJ5Q29tcGlsZShleGVjLCBjb2Rl
QmxvY2ssIGppdENvZGUsIGJ5dGVjb2RlSW5kZXgpKQogICAgICAgICAgICAgY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkgewotICAgICAgICAgICAgY29kZUJsb2Nr
ID0gc3RhdGljX3BvaW50ZXJfY2FzdDxDb2RlQmxvY2tUeXBlPihjb2RlQmxvY2stPnJlbGVhc2VB
bHRlcm5hdGl2ZSgpKTsKLSAgICAgICAgICAgIGppdENvZGUgPSBvbGRKSVRDb2RlOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChvbGRKSVRDb2RlID09IGppdENvZGUpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGppdENvZGUgPSBKSVQ6
OmNvbXBpbGUoJnZtLCBjb2RlQmxvY2suZ2V0KCksIGVmZm9ydCk7Ci0gICAgICAgIGlmICghaml0
Q29kZSkgewotICAgICAgICAgICAgaml0Q29kZSA9IG9sZEpJVENvZGU7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgUmVmUHRyPEpJVENvZGU+IHJlc3VsdCA9IEpJVDo6Y29tcGlsZSgmdm0sIGNvZGVC
bG9jaywgZWZmb3J0KTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGppdENvZGUg
PSByZXN1bHQ7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQogICAgIH0KKyAgICAKICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwogICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxp
bmUgYm9vbCBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKEV4ZWNTdGF0ZSogZXhlYywg
T3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29kZUJsb2NrLCBSZWZQdHI8SklUQ29kZT4mIGpp
dENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBKSVRD
b2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEpJVENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCkKK2lubGluZSBib29sIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9w
cmlhdGUoRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrLCBSZWZQ
dHI8SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhB
cml0eUNoZWNrLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIApAQCAtOTAsMjYgKzg3LDI1IEBAIGlubGluZSBib29sIGppdENvbXBpbGVGdW5j
dGlvbklmQXBwcm9wcmkKICAgICBSZWZQdHI8SklUQ29kZT4gb2xkSklUQ29kZSA9IGppdENvZGU7
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG9sZEpJVENvZGVXaXRoQXJpdHlDaGVjayA9IGpp
dENvZGVXaXRoQXJpdHlDaGVjazsKICAgICAKLSAgICBib29sIGRmZ0NvbXBpbGVkID0gZmFsc2U7
Ci0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKSkKLSAgICAgICAgZGZn
Q29tcGlsZWQgPSBERkc6OnRyeUNvbXBpbGVGdW5jdGlvbihleGVjLCBjb2RlQmxvY2suZ2V0KCks
IGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjaywgYnl0ZWNvZGVJbmRleCk7Ci0gICAgaWYg
KGRmZ0NvbXBpbGVkKSB7Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCisg
ICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKSkgeworICAgICAgICBpZiAo
REZHOjp0cnlDb21waWxlRnVuY3Rpb24oZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRDb2Rl
V2l0aEFyaXR5Q2hlY2ssIGJ5dGVjb2RlSW5kZXgpKQogICAgICAgICAgICAgY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkgewotICAgICAgICAgICAgY29kZUJsb2Nr
ID0gc3RhdGljX3BvaW50ZXJfY2FzdDxGdW5jdGlvbkNvZGVCbG9jaz4oY29kZUJsb2NrLT5yZWxl
YXNlQWx0ZXJuYXRpdmUoKSk7Ci0gICAgICAgICAgICBqaXRDb2RlID0gb2xkSklUQ29kZTsKLSAg
ICAgICAgICAgIGppdENvZGVXaXRoQXJpdHlDaGVjayA9IG9sZEpJVENvZGVXaXRoQXJpdHlDaGVj
azsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQob2xkSklUQ29kZSA9PSBqaXRD
b2RlKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQob2xkSklUQ29kZVdpdGhBcml0eUNoZWNr
LCBvbGRKSVRDb2RlV2l0aEFyaXR5Q2hlY2sgPT0gaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBqaXRDb2RlID0gSklU
Ojpjb21waWxlKCZ2bSwgY29kZUJsb2NrLmdldCgpLCBlZmZvcnQsICZqaXRDb2RlV2l0aEFyaXR5
Q2hlY2spOwotICAgICAgICBpZiAoIWppdENvZGUpIHsKLSAgICAgICAgICAgIGppdENvZGUgPSBv
bGRKSVRDb2RlOwotICAgICAgICAgICAgaml0Q29kZVdpdGhBcml0eUNoZWNrID0gb2xkSklUQ29k
ZVdpdGhBcml0eUNoZWNrOworICAgIH0gZWxzZSB7CisgICAgICAgIFJlZlB0cjxKSVRDb2RlPiBy
ZXN1bHQgPQorICAgICAgICAgICAgSklUOjpjb21waWxlKCZ2bSwgY29kZUJsb2NrLCBlZmZvcnQs
ICZqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAg
ICAgaml0Q29kZSA9IHJlc3VsdDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlRf
VU5VU0VEKG9sZEpJVENvZGVXaXRoQXJpdHlDaGVjaywgb2xkSklUQ29kZVdpdGhBcml0eUNoZWNr
ID09IGppdENvZGVXaXRoQXJpdHlDaGVjayk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KICAgICB9CisKICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSwgaml0
Q29kZVdpdGhBcml0eUNoZWNrKTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNDk4
NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTQsMTEgKzk0LDExIEBAIEludHJpbnNpYyBOYXRpdmVFeGVjdXRhYmxl
OjppbnRyaW5zaWMoKSAKICNpZiBFTkFCTEUoSklUKQogLy8gVXRpbGl0eSBtZXRob2QgdXNlZCBm
b3IgamV0dGlzb25pbmcgY29kZSBibG9ja3MuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGlj
IHZvaWQgamV0dGlzb25Db2RlQmxvY2soVk0mIHZtLCBPd25QdHI8VD4mIGNvZGVCbG9jaykKK3N0
YXRpYyB2b2lkIGpldHRpc29uQ29kZUJsb2NrKFZNJiB2bSwgUmVmUHRyPFQ+JiBjb2RlQmxvY2sp
CiB7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmdldEpJ
VFR5cGUoKSkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwotICAgIE93
blB0cjxUPiBjb2RlQmxvY2tUb0pldHRpc29uID0gY29kZUJsb2NrLnJlbGVhc2UoKTsKKyAgICBS
ZWZQdHI8VD4gY29kZUJsb2NrVG9KZXR0aXNvbiA9IGNvZGVCbG9jay5yZWxlYXNlKCk7CiAgICAg
Y29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxUPihjb2RlQmxvY2tUb0pldHRpc29uLT5y
ZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CiAgICAgY29kZUJsb2NrVG9KZXR0aXNvbi0+dW5saW5rSW5j
b21pbmdDYWxscygpOwogICAgIHZtLmhlYXAuamV0dGlzb25ERkdDb2RlQmxvY2soc3RhdGljX3Bv
aW50ZXJfY2FzdDxDb2RlQmxvY2s+KGNvZGVCbG9ja1RvSmV0dGlzb24ucmVsZWFzZSgpKSk7CkBA
IC0xNjksNyArMTY5LDcgQEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlT3B0aW1p
egogI2lmIEVOQUJMRShKSVQpCiBib29sIEV2YWxFeGVjdXRhYmxlOjpqaXRDb21waWxlKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUoZXhlYywg
bV9ldmFsQ29kZUJsb2NrLCBtX2ppdENvZGVGb3JDYWxsLCBKSVRDb2RlOjpib3R0b21UaWVySklU
KCksIFVJTlRfTUFYLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIHJldHVybiBqaXRDb21w
aWxlSWZBcHByb3ByaWF0ZShleGVjLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCksIG1faml0Q29kZUZv
ckNhbGwsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSwgVUlOVF9NQVgsIEpJVENvbXBpbGF0aW9u
Q2FuRmFpbCk7CiB9CiAjZW5kaWYKIApAQCAtMjAxLDEwICsyMDEsMTEgQEAgSlNPYmplY3QqIEV2
YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYQogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwog
ICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpOwogICAgIAorICAgIFJlZlB0cjxFdmFsQ29kZUJsb2NrPiBuZXdDb2RlQmxv
Y2s7CisgICAgCiAgICAgaWYgKCEhbV9ldmFsQ29kZUJsb2NrKSB7Ci0gICAgICAgIE93blB0cjxF
dmFsQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgRXZhbENvZGVCbG9jayhD
b2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKm1fZXZhbENvZGVCbG9jaykpOwotICAgICAgICBu
ZXdDb2RlQmxvY2stPnNldEFsdGVybmF0aXZlKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJsb2Nr
PihtX2V2YWxDb2RlQmxvY2sucmVsZWFzZSgpKSk7Ci0gICAgICAgIG1fZXZhbENvZGVCbG9jayA9
IG5ld0NvZGVCbG9jay5yZWxlYXNlKCk7CisgICAgICAgIG5ld0NvZGVCbG9jayA9IGFkb3B0UmVm
KG5ldyBFdmFsQ29kZUJsb2NrKENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqbV9ldmFsQ29k
ZUJsb2NrKSk7CisgICAgICAgIG5ld0NvZGVCbG9jay0+c2V0QWx0ZXJuYXRpdmUoc3RhdGljX3Bv
aW50ZXJfY2FzdDxDb2RlQmxvY2s+KG1fZXZhbENvZGVCbG9jaykpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIFVOVVNFRF9QQVJBTShzY29wZSk7CiAgICAgICAgIFVOVVNFRF9QQVJBTSh2bSk7CkBA
IC0yMTcsMTcgKzIxOCwxOCBAQCBKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRl
cm5hCiAgICAgICAgIGlmICghdW5saW5rZWRFdmFsQ29kZSkKICAgICAgICAgICAgIHJldHVybiBl
eGNlcHRpb247CiAKLSAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sg
PSBtX2V2YWxDb2RlQmxvY2sucmVsZWFzZSgpOwotICAgICAgICBBU1NFUlQoKGppdFR5cGUgPT0g
SklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2RlQmxvY2spOwogICAgICAg
ICBtX3VubGlua2VkRXZhbENvZGVCbG9jay5zZXQoKnZtLCB0aGlzLCB1bmxpbmtlZEV2YWxDb2Rl
KTsKLSAgICAgICAgbV9ldmFsQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxvY2so
dGhpcywgdW5saW5rZWRFdmFsQ29kZSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgc291cmNlKCkucHJv
dmlkZXIoKSwgc2NvcGUtPmxvY2FsRGVwdGgoKSwgcHJldmlvdXNDb2RlQmxvY2sucmVsZWFzZSgp
KSk7Ci0gICAgICAgIG1fZXZhbENvZGVCbG9jay0+Y29weVBvc3RQYXJzZURhdGFGcm9tQWx0ZXJu
YXRpdmUoKTsKKyAgICAgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJK
SVQoKSkgPT0gIW1fZXZhbENvZGVCbG9jayk7CisKKyAgICAgICAgbmV3Q29kZUJsb2NrID0gYWRv
cHRSZWYobmV3IEV2YWxDb2RlQmxvY2sodGhpcywgdW5saW5rZWRFdmFsQ29kZSwgbGV4aWNhbEds
b2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc2NvcGUtPmxvY2FsRGVwdGgoKSkpOwog
ICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKCFwcmVwYXJlRm9yRXhlY3V0aW9uKGV4
ZWMsIG1fZXZhbENvZGVCbG9jaywgbV9qaXRDb2RlRm9yQ2FsbCwgaml0VHlwZSwgYnl0ZWNvZGVJ
bmRleCkpCisgICAgaWYgKCFwcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWMsIG5ld0NvZGVCbG9jay5n
ZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCkpCiAgICAgICAg
IHJldHVybiAwOwogI2VuZGlmCisgICAgCisgICAgbV9ldmFsQ29kZUJsb2NrID0gbmV3Q29kZUJs
b2NrOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRy
YU1lbW9yeUNvc3Qoc2l6ZW9mKCptX2V2YWxDb2RlQmxvY2spICsgbV9qaXRDb2RlRm9yQ2FsbC0+
c2l6ZSgpKTsKQEAgLTMwMiw3ICszMDQsNyBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6
OmNvbXBpbGVPcHRpCiAjaWYgRU5BQkxFKEpJVCkKIGJvb2wgUHJvZ3JhbUV4ZWN1dGFibGU6Ompp
dENvbXBpbGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqaXRDb21waWxlSWZBcHBy
b3ByaWF0ZShleGVjLCBtX3Byb2dyYW1Db2RlQmxvY2ssIG1faml0Q29kZUZvckNhbGwsIEpJVENv
ZGU6OmJvdHRvbVRpZXJKSVQoKSwgVUlOVF9NQVgsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Cisg
ICAgcmV0dXJuIGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKGV4ZWMsIG1fcHJvZ3JhbUNvZGVCbG9j
ay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpLCBVSU5U
X01BWCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKIH0KICNlbmRpZgogCkBAIC0zMTUsMjEgKzMx
NywyNCBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiAgICAgVU5V
U0VEX1BBUkFNKGppdFR5cGUpOwogICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKICNl
bmRpZgorICAgIAorICAgIFJlZlB0cjxQcm9ncmFtQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2s7Cisg
ICAgCiAgICAgaWYgKCEhbV9wcm9ncmFtQ29kZUJsb2NrKSB7Ci0gICAgICAgIE93blB0cjxQcm9n
cmFtQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9j
ayhDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKm1fcHJvZ3JhbUNvZGVCbG9jaykpOwotICAg
ICAgICBuZXdDb2RlQmxvY2stPnNldEFsdGVybmF0aXZlKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29k
ZUJsb2NrPihtX3Byb2dyYW1Db2RlQmxvY2sucmVsZWFzZSgpKSk7Ci0gICAgICAgIG1fcHJvZ3Jh
bUNvZGVCbG9jayA9IG5ld0NvZGVCbG9jay5yZWxlYXNlKCk7CisgICAgICAgIG5ld0NvZGVCbG9j
ayA9IGFkb3B0UmVmKG5ldyBQcm9ncmFtQ29kZUJsb2NrKENvZGVCbG9jazo6Q29weVBhcnNlZEJs
b2NrLCAqbV9wcm9ncmFtQ29kZUJsb2NrKSk7CisgICAgICAgIG5ld0NvZGVCbG9jay0+c2V0QWx0
ZXJuYXRpdmUoc3RhdGljX3BvaW50ZXJfY2FzdDxDb2RlQmxvY2s+KG1fcHJvZ3JhbUNvZGVCbG9j
aykpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBzY29wZS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IGFk
b3B0UHRyKG5ldyBQcm9ncmFtQ29kZUJsb2NrKHRoaXMsIG1fdW5saW5rZWRQcm9ncmFtQ29kZUJs
b2NrLmdldCgpLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIG1fcHJvZ3JhbUNv
ZGVCbG9jay5yZWxlYXNlKCkpKTsKLSAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5jb3B5UG9z
dFBhcnNlRGF0YUZyb21BbHRlcm5hdGl2ZSgpOworICAgICAgICBuZXdDb2RlQmxvY2sgPSBhZG9w
dFJlZihuZXcgUHJvZ3JhbUNvZGVCbG9jayh0aGlzLCBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9j
ay5nZXQoKSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpKSk7CiAgICAgfQogCiAj
aWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoIXByZXBhcmVGb3JFeGVjdXRpb24oZXhlYywgbV9wcm9n
cmFtQ29kZUJsb2NrLCBtX2ppdENvZGVGb3JDYWxsLCBqaXRUeXBlLCBieXRlY29kZUluZGV4KSkK
KyAgICBpZiAoIXByZXBhcmVGb3JFeGVjdXRpb24oZXhlYywgbmV3Q29kZUJsb2NrLmdldCgpLCBt
X2ppdENvZGVGb3JDYWxsLCBqaXRUeXBlLCBieXRlY29kZUluZGV4KSkKICAgICAgICAgcmV0dXJu
IDA7CiAjZW5kaWYKIAorICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IG5ld0NvZGVCbG9jazsKKyAg
ICAKICNpZiBFTkFCTEUoSklUKQogICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVt
b3J5Q29zdChzaXplb2YoKm1fcHJvZ3JhbUNvZGVCbG9jaykgKyBtX2ppdENvZGVGb3JDYWxsLT5z
aXplKCkpOwogI2Vsc2UKQEAgLTQ4MiwxOSArNDg3LDI0IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4
ZWN1dGFibGU6OmNvbXBpbGVPcHQKICNpZiBFTkFCTEUoSklUKQogYm9vbCBGdW5jdGlvbkV4ZWN1
dGFibGU6OmppdENvbXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4g
aml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShleGVjLCBtX2NvZGVCbG9ja0ZvckNhbGws
IG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgSklUQ29k
ZTo6Ym90dG9tVGllckpJVCgpLCBVSU5UX01BWCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAg
ICByZXR1cm4gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShleGVjLCBtX2NvZGVCbG9j
a0ZvckNhbGwuZ2V0KCksIG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJp
dHlDaGVjaywgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpLCBVSU5UX01BWCwgSklUQ29tcGlsYXRp
b25DYW5GYWlsKTsKIH0KIAogYm9vbCBGdW5jdGlvbkV4ZWN1dGFibGU6OmppdENvbXBpbGVGb3JD
b25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rp
b25JZkFwcHJvcHJpYXRlKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LCBtX2ppdENvZGVG
b3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCBKSVRDb2Rl
Ojpib3R0b21UaWVySklUKCksIFVJTlRfTUFYLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAg
IHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMsIG1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0LmdldCgpLCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNv
bnN0cnVjdFdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCksIFVJTlRfTUFY
LCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogfQogI2VuZGlmCiAKLVBhc3NPd25QdHI8RnVuY3Rp
b25Db2RlQmxvY2s+IEZ1bmN0aW9uRXhlY3V0YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0ZvcihKU1Nj
b3BlKiBzY29wZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQsIEpT
T2JqZWN0KiYgZXhjZXB0aW9uKQorUGFzc1JlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gRnVuY3Rp
b25FeGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKEpTU2NvcGUqIHNjb3BlLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3QqJiBleGNlcHRpb24p
CiB7Ci0gICAgaWYgKCEhY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCkpCi0gICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2soQ29kZUJsb2NrOjpDb3B5UGFy
c2VkQmxvY2ssICpjb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKSkpOworICAgIFJlZlB0
cjxGdW5jdGlvbkNvZGVCbG9jaz4gYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2tGb3Ioc3BlY2lhbGl6
YXRpb25LaW5kKTsKKyAgICAKKyAgICBpZiAoISFhbHRlcm5hdGl2ZSkgeworICAgICAgICBSZWZQ
dHI8RnVuY3Rpb25Db2RlQmxvY2s+IHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBGdW5jdGlvbkNvZGVC
bG9jayhDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmNvZGVCbG9ja0ZvcihzcGVjaWFsaXph
dGlvbktpbmQpKSk7CisgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoYWx0ZXJuYXRpdmUp
OworICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICB9CiAKICAgICBWTSogdm0g
PSBzY29wZS0+dm0oKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUt
Pmdsb2JhbE9iamVjdCgpOwpAQCAtNTA5LDkgKzUxOSw3IEBAIFBhc3NPd25QdHI8RnVuY3Rpb25D
b2RlQmxvY2s+IEZ1bmN0aW9uRXgKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0g
ICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiByZXN1bHQgPSBhZG9wdFB0cihuZXcgRnVuY3Rp
b25Db2RlQmxvY2sodGhpcywgdW5saW5rZWRDb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc291cmNl
KCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSkpOwotICAgIHJlc3VsdC0+Y29w
eVBvc3RQYXJzZURhdGFGcm9tKGNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpLmdldCgp
KTsKLSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIHVubGlua2VkQ29kZUJsb2NrLCBnbG9iYWxPYmplY3Qs
IHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCkpKTsKIH0KIAogCkBA
IC01MjcsMjEgKzUzNSwyMSBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxl
Rm9yCiAjZW5kaWYKICAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJ
VCgpKSA9PSAhbV9jb2RlQmxvY2tGb3JDYWxsKTsKICAgICBKU09iamVjdCogZXhjZXB0aW9uOwot
ICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVC
bG9ja0ZvcihzY29wZSwgQ29kZUZvckNhbGwsIGV4Y2VwdGlvbik7CisgICAgCisgICAgUmVmUHRy
PEZ1bmN0aW9uQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBwcm9kdWNlQ29kZUJsb2NrRm9yKHNj
b3BlLCBDb2RlRm9yQ2FsbCwgZXhjZXB0aW9uKTsKICAgICBpZiAoIW5ld0NvZGVCbG9jaykKICAg
ICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKLQotICAgIG5ld0NvZGVCbG9jay0+c2V0QWx0ZXJuYXRp
dmUoc3RhdGljX3BvaW50ZXJfY2FzdDxDb2RlQmxvY2s+KG1fY29kZUJsb2NrRm9yQ2FsbC5yZWxl
YXNlKCkpKTsKLSAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBuZXdDb2RlQmxvY2sucmVsZWFzZSgp
OwogICAgIAotICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBtX2NvZGVCbG9ja0ZvckNhbGwt
Pm51bVBhcmFtZXRlcnMoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX251bVBhcmFtZXRlcnNGb3JD
YWxsKTsKLQogI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKCFwcmVwYXJlRnVuY3Rpb25Gb3JFeGVj
dXRpb24oZXhlYywgbV9jb2RlQmxvY2tGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsLCBtX2ppdENv
ZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2ssIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgsIENvZGVGb3JD
YWxsKSkKKyAgICBpZiAoIXByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbihleGVjLCBuZXdDb2Rl
QmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlD
aGVjaywgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgQ29kZUZvckNhbGwpKQogICAgICAgICByZXR1
cm4gMDsKICNlbmRpZgogCisgICAgbV9jb2RlQmxvY2tGb3JDYWxsID0gbmV3Q29kZUJsb2NrOwor
ICAgIAorICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPm51
bVBhcmFtZXRlcnMoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX251bVBhcmFtZXRlcnNGb3JDYWxs
KTsKKwogI2lmIEVOQUJMRShKSVQpCiAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFN
ZW1vcnlDb3N0KHNpemVvZigqbV9jb2RlQmxvY2tGb3JDYWxsKSArIG1faml0Q29kZUZvckNhbGwt
PnNpemUoKSk7CiAjZWxzZQpAQCAtNTYzLDIxICs1NzEsMjAgQEAgSlNPYmplY3QqIEZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgIAogICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRD
b2RlOjpib3R0b21UaWVySklUKCkpID09ICFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CiAgICAg
SlNPYmplY3QqIGV4Y2VwdGlvbjsKLSAgICBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0Nv
ZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tGb3Ioc2NvcGUsIENvZGVGb3JDb25zdHJ1Y3QsIGV4
Y2VwdGlvbik7CisgICAgUmVmUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBw
cm9kdWNlQ29kZUJsb2NrRm9yKHNjb3BlLCBDb2RlRm9yQ29uc3RydWN0LCBleGNlcHRpb24pOwog
ICAgIGlmICghbmV3Q29kZUJsb2NrKQogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogCi0gICAg
bmV3Q29kZUJsb2NrLT5zZXRBbHRlcm5hdGl2ZShzdGF0aWNfcG9pbnRlcl9jYXN0PENvZGVCbG9j
az4obV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QucmVsZWFzZSgpKSk7Ci0gICAgbV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QgPSBuZXdDb2RlQmxvY2sucmVsZWFzZSgpOwotICAgIAotICAgIG1fbnVtUGFy
YW1ldGVyc0ZvckNvbnN0cnVjdCA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5udW1QYXJhbWV0
ZXJzKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0KTsK
LQogI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKCFwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24o
ZXhlYywgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdCwgbV9q
aXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2ssIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgs
IENvZGVGb3JDb25zdHJ1Y3QpKQorICAgIGlmICghcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9u
KGV4ZWMsIG5ld0NvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ29uc3RydWN0LCBtX2ppdENv
ZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaywgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgQ29k
ZUZvckNvbnN0cnVjdCkpCiAgICAgICAgIHJldHVybiAwOwogI2VuZGlmCiAKKyAgICBtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdCA9IG5ld0NvZGVCbG9jazsKKyAgICAKKyAgICBtX251bVBhcmFtZXRl
cnNGb3JDb25zdHJ1Y3QgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+bnVtUGFyYW1ldGVycygp
OworICAgIFJFTEVBU0VfQVNTRVJUKG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCk7CisKICNp
ZiBFTkFCTEUoSklUKQogICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29z
dChzaXplb2YoKm1fY29kZUJsb2NrRm9yQ29uc3RydWN0KSArIG1faml0Q29kZUZvckNvbnN0cnVj
dC0+c2l6ZSgpKTsKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxNDk4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3Niw3ICs0NzYsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3Rh
dGUqLCBKU1Njb3BlKiwgSklUQ29kZTo6SklUVHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9
IFVJTlRfTUFYKTsKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOwogCi0gICAgICAgIE93blB0cjxFdmFsQ29kZUJsb2NrPiBtX2V2YWxDb2Rl
QmxvY2s7CisgICAgICAgIFJlZlB0cjxFdmFsQ29kZUJsb2NrPiBtX2V2YWxDb2RlQmxvY2s7CiAg
ICAgICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+IG1fdW5saW5rZWRFdmFs
Q29kZUJsb2NrOwogICAgIH07CiAKQEAgLTU1NSw3ICs1NTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwogCiAgICAgICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+IG1fdW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrOwotICAgICAgICBPd25QdHI8UHJvZ3JhbUNvZGVCbG9jaz4g
bV9wcm9ncmFtQ29kZUJsb2NrOworICAgICAgICBSZWZQdHI8UHJvZ3JhbUNvZGVCbG9jaz4gbV9w
cm9ncmFtQ29kZUJsb2NrOwogICAgIH07CiAKICAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGUg
OiBwdWJsaWMgU2NyaXB0RXhlY3V0YWJsZSB7CkBAIC01OTAsNyArNTkwLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gKm1fY29kZUJsb2NrRm9yQ29uc3RydWN0OwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBQYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBw
cm9kdWNlQ29kZUJsb2NrRm9yKEpTU2NvcGUqLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09i
amVjdComIGV4Y2VwdGlvbik7CisgICAgICAgIFBhc3NSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+
IHByb2R1Y2VDb2RlQmxvY2tGb3IoSlNTY29wZSosIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpT
T2JqZWN0KiYgZXhjZXB0aW9uKTsKIAogICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGwo
RXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSkKICAgICAgICAgewpAQCAtNzQyLDcgKzc0
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGxJ
bnRlcm5hbChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSklUQ29kZTo6SklUVHlwZSwgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCA9IFVJTlRfTUFYKTsKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JD
b25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSklUQ29kZTo6SklUVHlwZSwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJTlRfTUFYKTsKICAgICAgICAgCi0gICAgICAgIE93
blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCisgICAgICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9ja0Zv
cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlm
IChraW5kID09IENvZGVGb3JDYWxsKQogICAgICAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9j
a0ZvckNhbGw7CkBAIC03NjMsOCArNzYzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbiB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBXcml0ZUJh
cnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+IG1fdW5saW5rZWRFeGVjdXRhYmxlOwot
ICAgICAgICBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKLSAg
ICAgICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsK
KyAgICAgICAgUmVmUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7Cisg
ICAgICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7
CiAgICAgfTsKIAogICAgIGlubGluZSBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKFZNJiB2bSwgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgJKHJldmlz
aW9uIDE0OTg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhh
cm5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMjIgKzM2LDIyIEBACiBuYW1lc3BhY2UgSlND
IHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLWlubGluZSBib29sIHByZXBh
cmVGb3JFeGVjdXRpb24oRXhlY1N0YXRlKiBleGVjLCBPd25QdHI8Q29kZUJsb2NrVHlwZT4mIGNv
ZGVCbG9jaywgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5
cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitpbmxpbmUgYm9vbCBwcmVwYXJlRm9yRXhlY3V0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBSZWZQdHI8SklU
Q29kZT4mIGppdENvZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCkKIHsKICNpZiBFTkFCTEUoTExJTlQpCiAgICAgaWYgKEpJVENvZGU6OmlzQmFzZWxp
bmVDb2RlKGppdFR5cGUpKSB7CiAgICAgICAgIC8vIFN0YXJ0IG9mZiBpbiB0aGUgbG93IGxldmVs
IGludGVycHJldGVyLgotICAgICAgICBMTEludDo6Z2V0RW50cnlwb2ludChleGVjLT52bSgpLCBj
b2RlQmxvY2suZ2V0KCksIGppdENvZGUpOworICAgICAgICBMTEludDo6Z2V0RW50cnlwb2ludChl
eGVjLT52bSgpLCBjb2RlQmxvY2ssIGppdENvZGUpOwogICAgICAgICBjb2RlQmxvY2stPnNldEpJ
VENvZGUoaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwogICAgICAgICBpZiAoZXhl
Yy0+dm0oKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCi0gICAgICAgICAgICBleGVjLT52bSgpLm1f
cGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKGNvZGVCbG9jay5nZXQoKSk7
CisgICAgICAgICAgICBleGVjLT52bSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0
ZWNvZGVzRm9yKGNvZGVCbG9jayk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRp
ZiAvLyBFTkFCTEUoTExJTlQpCiAgICAgcmV0dXJuIGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKGV4
ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgSklUQ29kZTo6
aXNCYXNlbGluZUNvZGUoaml0VHlwZSkgPyBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkIDogSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKIH0KIAotaW5saW5lIGJvb2wgcHJlcGFyZUZ1bmN0aW9uRm9y
RXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhlYywgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29k
ZUJsb2NrLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYg
aml0Q29kZVdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK2lubGluZSBib29s
IHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OkpJVFR5cGUgaml0VHlw
ZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQog
ewogI2lmIEVOQUJMRShMTElOVCkKICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0
VHlwZSkpIHsKQEAgLTU5LDcgKzU5LDcgQEAgaW5saW5lIGJvb2wgcHJlcGFyZUZ1bmN0aW9uRm9y
RXhlY3V0aW9uKAogICAgICAgICBMTEludDo6Z2V0RnVuY3Rpb25FbnRyeXBvaW50KGV4ZWMtPnZt
KCksIGtpbmQsIGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7CiAgICAgICAgIGNvZGVC
bG9jay0+c2V0SklUQ29kZShqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwogICAgICAg
ICBpZiAoZXhlYy0+dm0oKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCi0gICAgICAgICAgICBleGVj
LT52bSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKGNvZGVCbG9j
ay5nZXQoKSk7CisgICAgICAgICAgICBleGVjLT52bSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+
ZW5zdXJlQnl0ZWNvZGVzRm9yKGNvZGVCbG9jayk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICNlbHNlCg==
</data>
<flag name="review"
          id="222641"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>