<?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>203694</bug_id>
          
          <creation_ts>2019-10-31 13:30:35 -0700</creation_ts>
          <short_desc>Rename Wasm::CodeBlock to Wasm::CalleeGroup</short_desc>
          <delta_ts>2021-12-16 15:46:04 -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 Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tadeu Zagallo">tzagallo</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1586048</commentid>
    <comment_count>0</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-10-31 13:30:35 -0700</bug_when>
    <thetext>It&apos;s just not a CodeBlock, and it should be called something else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824573</commentid>
    <comment_count>1</comment_count>
      <attachid>447297</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-12-15 16:18:22 -0800</bug_when>
    <thetext>Created attachment 447297
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824575</commentid>
    <comment_count>2</comment_count>
      <attachid>447297</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-12-15 16:23:28 -0800</bug_when>
    <thetext>Comment on attachment 447297
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        This is not a CodeBlock. And it is confusing name to JSC::CodeBlock.

I suggest rephrasing as “And the name causes confusion with JSC::CodeBlock, which is not at all related.”</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824598</commentid>
    <comment_count>3</comment_count>
      <attachid>447297</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-12-15 17:04:25 -0800</bug_when>
    <thetext>Comment on attachment 447297
Patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:8
&gt;&gt; +        This is not a CodeBlock. And it is confusing name to JSC::CodeBlock.
&gt; 
&gt; I suggest rephrasing as “And the name causes confusion with JSC::CodeBlock, which is not at all related.”

Thanks, fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824621</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-12-15 18:15:52 -0800</bug_when>
    <thetext>Committed r287122 (245306@trunk): &lt;https://commits.webkit.org/245306@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824622</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-15 18:17:38 -0800</bug_when>
    <thetext>&lt;rdar://problem/86552840&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824900</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-12-16 15:46:04 -0800</bug_when>
    <thetext>*** Bug 234101 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447297</attachid>
            <date>2021-12-15 16:18:22 -0800</date>
            <delta_ts>2021-12-15 16:23:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203694-20211215161821.patch</filename>
            <type>text/plain</type>
            <size>135468</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3MTEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YTRlMWY0NjQ1ZjE1YzRiMTE4MjRjZjFlMGNhYWZmZjllYWMwNTI4Li4xY2FhZTE1ZjFmYWU2Yzgz
YjcwOThiOTExNWY0OWE2N2Y1MTlhYjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDIgQEAKKzIwMjEtMTItMTUgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW5hbWUgV2FzbTo6Q29kZUJsb2NrIHRvIFdhc206OkNhbGxlZUdyb3Vw
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM2OTQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlz
IG5vdCBhIENvZGVCbG9jay4gQW5kIGl0IGlzIGNvbmZ1c2luZyBuYW1lIHRvIEpTQzo6Q29kZUJs
b2NrLgorICAgICAgICBUaGlzIHBhdGNoIHJlbmFtZXMgaXQgdG8gV2FzbTo6Q2FsbGVlR3JvdXAu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAo
SlNDOjpIZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6ZGVsZXRlQWxsQ29kZUJsb2Nrcyk6CisgICAgICAgICogaGVhcC9IZWFwLmg6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmZvckVhY2hDb2RlQmxvY2tTcGFjZSk6CisgICAgICAgICogcnVu
dGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9W
TS5oOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpCQlFQbGFuOjpCQlFQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6d29yayk6
CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5oOgorICAgICAgICAqIHdhc20vV2FzbUNhbGxl
ZUdyb3VwLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
b2RlQmxvY2suY3BwLgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWVHcm91cDo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGVlR3JvdXA6OmNyZWF0ZUZyb21FeGlzdGluZyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkNhbGxlZUdyb3VwOjpDYWxsZWVHcm91cCk6CisgICAgICAgIChK
U0M6Oldhc206OkNhbGxlZUdyb3VwOjp+Q2FsbGVlR3JvdXApOgorICAgICAgICAoSlNDOjpXYXNt
OjpDYWxsZWVHcm91cDo6d2FpdFVudGlsRmluaXNoZWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpD
YWxsZWVHcm91cDo6Y29tcGlsZUFzeW5jKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGVlR3Jv
dXA6OmlzU2FmZVRvUnVuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGVlR3JvdXA6OnNldENv
bXBpbGF0aW9uRmluaXNoZWQpOgorICAgICAgICAqIHdhc20vV2FzbUNhbGxlZUdyb3VwLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmguCisg
ICAgICAgICogd2FzbS9XYXNtSW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0
YW5jZTo6aW5pdEVsZW1lbnRTZWdtZW50KToKKyAgICAgICAgKiB3YXNtL1dhc21JbnN0YW5jZS5o
OgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y2FsbGVlR3JvdXAgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6aXNJbXBvcnRGdW5jdGlvbiBjb25zdCk6CisgICAg
ICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpjb2RlQmxvY2sgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmg6CisgICAgICAgICogd2FzbS9XYXNtTW9k
dWxlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpnZXRPckNyZWF0ZUNhbGxlZUdy
b3VwKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpjb21waWxlU3luYyk6CisgICAgICAg
IChKU0M6Oldhc206Ok1vZHVsZTo6Y29tcGlsZUFzeW5jKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlOjpjb3B5SW5pdGlhbENhbGxlZUdyb3VwVG9BbGxNZW1vcnlNb2Rlcyk6CisgICAgICAg
IChKU0M6Oldhc206Ok1vZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2spOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OmNvcHlJbml0aWFsQ29kZUJsb2NrVG9BbGxNZW1vcnlN
b2Rlcyk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlLmg6CisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZTo6Y2FsbGVlR3JvdXBGb3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGU6OmNvZGVCbG9ja0Zvcik6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtT01HRm9y
T1NSRW50cnlQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HRm9yT1NSRW50cnlQbGFu
OjpPTUdGb3JPU1JFbnRyeVBsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdGb3JPU1JFbnRy
eVBsYW46OndvcmspOgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5oOgor
ICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQ
bGFuOjpPTUdQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HUGxhbjo6d29yayk6CisgICAg
ICAgICogd2FzbS9XYXNtT01HUGxhbi5oOgorICAgICAgICAqIHdhc20vV2FzbU9wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmlnZ2VyT01HUmVwbGFjZW1lbnRDb21waWxlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAg
KiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6dXBkYXRlQ2Fs
bFNpdGVzVG9DYWxsVXMpOgorICAgICAgICAqIHdhc20vV2FzbVBsYW4uaDoKKyAgICAgICAgKiB3
YXNtL1dhc21TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6aml0Q29tcGlsZUFu
ZFNldEhldXJpc3RpY3MpOgorICAgICAgICAoSlNDOjpMTEludDo6ZG9XYXNtQ2FsbCk6CisgICAg
ICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcDoKKyAgICAgICAgKEpTQzo6cmVzb2x2ZSk6
CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDYWxsZWVHcm91cC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcC4KKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUNhbGxlZUdyb3VwOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
Q2FsbGVlR3JvdXA6OkpTV2ViQXNzZW1ibHlDYWxsZWVHcm91cCk6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlDYWxsZWVHcm91cDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5Q2FsbGVlR3JvdXA6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5Q2FsbGVlR3JvdXA6OmNsZWFySlNDYWxsSUNzKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUNhbGxlZUdyb3VwOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlDYWxsZWVHcm91cDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAg
ICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZUdyb3VwLmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmguCisgICAg
ICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW5JbXBsKToKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKToKKyAgICAgICAgKiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3Nl
bWJseU1vZHVsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmNhbGxl
ZUdyb3VwKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6c2V0Q2FsbGVlR3Jv
dXApOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuSW1w
bCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmNvZGVCbG9jayk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OnNldENvZGVCbG9jayk6IERl
bGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmg6CisgICAgICAg
ICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRp
YWxpemVJbXBvcnRzQW5kRXhwb3J0cyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5oOgorCiAyMDIxLTEyLTE1ICBKb3NlcGggR3JpZWdvICA8amdyaWVnb0Bp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtTaGFkb3cgUmVhbG1zXSBXcmFwcGVkIGZ1bmN0aW9ucyBt
dXN0IG9ubHkgdGhyb3cgVHlwZUVycm9yIGZyb20gY2FsbGluZyByZWFsbQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDIzMTQwY2M0MTZkN2E5YjE5OTZkOTMzMjlkM2E4NTEw
ZjZiNjkxYjkuLmY0OGI3YWM5MTdmOWJmODQ1MDQ5NGQ1YWM3YTU0ODUyYmEzYTliZjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTEyMzYsOCArMTIzNiw4IEBAIHNldChK
YXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgdG9vbHMvVk1JbnNw
ZWN0b3JJbmxpbmVzLmgKIAogICAgIHdhc20vV2FzbUNhbGxlZS5oCisgICAgd2FzbS9XYXNtQ2Fs
bGVlR3JvdXAuaAogICAgIHdhc20vV2FzbUNhcGFiaWxpdGllcy5oCi0gICAgd2FzbS9XYXNtQ29k
ZUJsb2NrLmgKICAgICB3YXNtL1dhc21Db21waWxhdGlvbk1vZGUuaAogICAgIHdhc20vV2FzbUNv
bnRleHQuaAogICAgIHdhc20vV2FzbUVtYmVkZGVyLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggOTYyNzAzYjk2NTM5ZTJiNGFjZDFkY2VmYjdkMTIwM2NhNzliYmUzZi4uMWU0NzI5
MzM4YjYwMDViMzFjN2Q5ZDZkMzVmMmJiN2MwYzhlMjU5OCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTg5Myw3ICs4OTMsNyBAQAogCQk1MjY3OEY4RjFBMDMxMDA5MDA2QTMwNkQg
LyogQmFzaWNCbG9ja0xvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MjY3OEY4RDFBMDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTI2NzhGOTExQTA0MTc3QzAwNkEzMDZEIC8qIENvbnRyb2xGbG93UHJvZmlsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNjc4RjkwMUEwNDE3N0Mw
MDZBMzA2RCAvKiBDb250cm9sRmxvd1Byb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTI2N0NGODIyNDkzMTZCMTAwMjJCRjZEIC8qIEZh
c3RKSVRQZXJtaXNzaW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTI2N0NGODEyNDkzMTZBRDAwMjJCRjZEIC8qIEZhc3RKSVRQZXJtaXNzaW9ucy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUyNkFD
NEI3MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyog
V2FzbUNvZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUyNkFDNEI3MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ2FsbGVlR3JvdXAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNkFDNEI1MUU5
NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ2FsbGVlR3JvdXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MjdDRTM1NDIyNTU1RkU1MDBDNkYzODIgLyog
SlNUb1dhc21JQ0NhbGxlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTI3Q0UzNTMyMjU1NUZERDAwQzZGMzgyIC8qIEpTVG9XYXNtSUNDYWxsZWUuaCAq
LzsgfTsKIAkJNTI4NDdBREMyMUZGQjg2OTAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI4NDdBREEy
MUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5oICovOyB9OwogCQk1MkIzMTBG
QjE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIzMTBGQTE5NzRBRTYxMDA4
MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE2NjUsNyArMTY2NSw3IEBACiAJCUFEN0I0
QjJFMUZBM0UyOTgwMEM5REY3OSAvKiBXYXNtTmFtZVNlY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEN0I0QjJEMUZBM0UyODYwMEM5REY3OSAv
KiBXYXNtTmFtZVNlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlBRDg2QTkzRTFBQTREODhEMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ4NkE5
M0QxQUE0RDg3QzAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBRDhGRjM5ODFFQjVCREIyMDA4N0ZG
ODIgLyogV2FzbUluZGV4T3JOYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBRDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1l
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQUQ5
RTg1MkYxRThBMEM3QzAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEOUU4NTJFMUU4QTBDNkUw
MDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQUQ5RTg1MkYxRThBMEM3QzAwOERFMzlFIC8q
IEpTV2ViQXNzZW1ibHlDYWxsZWVHcm91cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1i
bHlDYWxsZWVHcm91cC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUFERDhGQTQ2MUVCMzA3OTcwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJz
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERDhG
QTQzMUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAqLzsgfTsKIAkJ
QURFODAyOTkxRTA4RjFERTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERTgwMjk0MUUwOEYx
QzkwMDU4REU3OCAvKiBKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFODAyOUExRTA4RjFERTAwNThERTc4
IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERTgwMjk1MUUwOEYxQzkwMDU4REU3OCAvKiBX
ZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM2OTQsOCArMzY5NCw4IEBACiAJCTUyNjc4RjhE
MUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQmFzaWNCbG9ja0xvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUyNjc4RjkwMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250cm9sRmxvd1Byb2Zp
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRyb2xGbG93UHJvZmls
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI2N0NGODEyNDkzMTZBRDAwMjJC
RjZEIC8qIEZhc3RKSVRQZXJtaXNzaW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGYXN0SklUUGVybWlz
c2lvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTI2QUM0QjQxRTk3N0M1RDAw
MzUwMEUxIC8qIFdhc21Db2RlQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2FzbUNvZGVCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTUyNkFDNEI1MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21Db2RlQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTI2QUM0QjQxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21DYWxsZWVHcm91cC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQ2FsbGVlR3JvdXAu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MjZBQzRCNTFFOTc3QzVEMDAzNTAw
RTEgLyogV2FzbUNhbGxlZUdyb3VwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdhc21DYWxsZWVHcm91cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjcyOTg3
QjIzNUZDOEJBMDA1Qzk4MkMgLyogR0NNZW1vcnlPcGVyYXRpb25zLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdDTWVtb3J5T3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Mjc3
NzNERDFBQUY4M0FDMDBCREU3RTggLyogUnVudGltZVR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUnVudGltZVR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MjdDRTM1MjIyNTU1RkREMDBDNkYzODIgLyogSlNUb1dhc21JQ0NhbGxlZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1RvV2FzbUlDQ2FsbGVlLmNwcDsgcGF0aCA9IGpzL0pT
VG9XYXNtSUNDYWxsZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzkzNCw3
ICszOTM0LDcgQEAKIAkJNTM3M0I0RDQyMkFEQjMxNDAwODAzNTcyIC8qIFdlYWtPYmplY3RSZWZD
b25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWFrT2JqZWN0UmVmQ29uc3RydWN0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzgxQjkzNjFFNjBFOTY2MDA5
MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTM4MUI5MzgxRTYwRTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNp
Z25hbEhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUZhdWx0
U2lnbmFsSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MzgzQUEyRjFF
NjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDsgcGF0
aCA9IGpzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MzgzQUEyRjFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNhbGxlZUdy
b3VwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1i
bHlDYWxsZWVHcm91cC5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Q2FsbGVlR3JvdXAuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzhGMTVERDI2OEZCQkIzMDBENjAxQzQg
LyogVW5pZmllZFNvdXJjZTE0OC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBVbmlmaWVkU291cmNlMTQ4LmNwcDsgcGF0aCA9ICJEZXJpdmVkU291cmNlcy9KYXZhU2Ny
aXB0Q29yZS91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTE0OC5jcHAiOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MzhGMTVERTI2OEZCQkIzMDBENjAxQzQgLyog
VW5pZmllZFNvdXJjZTE1MS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBVbmlmaWVkU291cmNlMTUxLmNwcDsgcGF0aCA9ICJEZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0
Q29yZS91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTE1MS5jcHAiOyBzb3VyY2VUcmVlID0g
QlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MzhGMTVERjI2OEZCQkIzMDBENjAxQzQgLyogVW5p
ZmllZFNvdXJjZTE1Mi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBV
bmlmaWVkU291cmNlMTUyLmNwcDsgcGF0aCA9ICJEZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29y
ZS91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTE1Mi5jcHAiOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtNDkyNSw3ICs0OTI1LDcgQEAKIAkJQUQ4REQ2RDAxRjY3
MDhBMzAwMDRFQjUyIC8qIEpTVG9XYXNtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTVG9XYXNt
LmNwcDsgcGF0aCA9IGpzL0pTVG9XYXNtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQUQ4RkYzOTUxRUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtSW5kZXhPck5hbWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQUQ4RkYzOTYxRUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9y
TmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtSW5kZXhP
ck5hbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBRDlFODUyRTFFOEEwQzZF
MDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg7IHBhdGggPSBqcy9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEOUU4NTJF
MUU4QTBDNkUwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q2FsbGVlR3JvdXAuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUNhbGxlZUdyb3VwLmg7IHBhdGgg
PSBqcy9KU1dlYkFzc2VtYmx5Q2FsbGVlR3JvdXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQURCNkY2N0MxRTE1RDc1MDAwODJGMzg0IC8qIFdhc21QYWdlQ291bnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVBhZ2VDb3VudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERDA5QUVFMUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNt
VG9KUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXYXNtVG9KUy5oOyBwYXRoID0ganMvV2FzbVRvSlMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUREMDlBRUYxRjVGNjIzRjAwMTMxM0MyIC8q
IFdhc21Ub0pTLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdhc21Ub0pTLmNwcDsgcGF0aCA9IGpz
L1dhc21Ub0pTLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcxOTksMTMgKzcx
OTksMTMgQEAKIAkJCQlBRDRCMURGODFERjI0NEQ3MDA3MUFFMzIgLyogV2FzbUJpbmRpbmcuaCAq
LywKIAkJCQk1MjVDMERENzFFOTM1ODQ3MDAyMTg0Q0QgLyogV2FzbUNhbGxlZS5jcHAgKi8sCiAJ
CQkJNTI1QzBERDgxRTkzNTg0NzAwMjE4NENEIC8qIFdhc21DYWxsZWUuaCAqLywKKwkJCQk1MjZB
QzRCNDFFOTc3QzVEMDAzNTAwRTEgLyogV2FzbUNhbGxlZUdyb3VwLmNwcCAqLywKKwkJCQk1MjZB
QzRCNTFFOTc3QzVEMDAzNTAwRTEgLyogV2FzbUNhbGxlZUdyb3VwLmggKi8sCiAJCQkJRTNGQjg1
MzkyMkYzNjY3NDAwOEY5MEVEIC8qIFdhc21DYWxsZWVSZWdpc3RyeS5jcHAgKi8sCiAJCQkJRTNG
Qjg1MzgyMkYzNjY3NDAwOEY5MEVEIC8qIFdhc21DYWxsZWVSZWdpc3RyeS5oICovLAogCQkJCTUz
RkQwNEQxMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovLAog
CQkJCTUzRkQwNEQyMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCAq
LywKIAkJCQlFMzM3Qjk2NjIyNDMyNEU1MDA5M0E4MjAgLyogV2FzbUNhcGFiaWxpdGllcy5oICov
LAotCQkJCTUyNkFDNEI0MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmNwcCAqLywK
LQkJCQk1MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyogV2FzbUNvZGVCbG9jay5oICovLAogCQkJ
CUUzN0NGQjJEMjJGMjdDNTcwMDlBN0IzOCAvKiBXYXNtQ29tcGlsYXRpb25Nb2RlLmNwcCAqLywK
IAkJCQlFM0JEMkI3NTIyRjI3NTAyMDAxMTc2NUMgLyogV2FzbUNvbXBpbGF0aW9uTW9kZS5oICov
LAogCQkJCUUzOTE1QzA2MjMwOTY4MjkwMENCMjU2MSAvKiBXYXNtQ29udGV4dC5jcHAgKi8sCkBA
IC05MTg2LDggKzkxODYsOCBAQAogCQkJCTUyN0NFMzUzMjI1NTVGREQwMEM2RjM4MiAvKiBKU1Rv
V2FzbUlDQ2FsbGVlLmggKi8sCiAJCQkJQUREMDlBRjIxRjYyNDgyOTAwMTMxM0MyIC8qIEpTV2Vi
QXNzZW1ibHkuY3BwICovLAogCQkJCUFERDA5QUYzMUY2MjQ4MkUwMDEzMTNDMiAvKiBKU1dlYkFz
c2VtYmx5LmggKi8sCi0JCQkJNTM4M0FBMkYxRTY1RThBMTAwQTUzMkZDIC8qIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2suY3BwICovLAotCQkJCUFEOUU4NTJFMUU4QTBDNkUwMDhERTM5RSAvKiBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmggKi8sCisJCQkJNTM4M0FBMkYxRTY1RThBMTAwQTUzMkZDIC8q
IEpTV2ViQXNzZW1ibHlDYWxsZWVHcm91cC5jcHAgKi8sCisJCQkJQUQ5RTg1MkUxRThBMEM2RTAw
OERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDYWxsZWVHcm91cC5oICovLAogCQkJCUFEMkZDQkE2MURC
NThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcCAqLywKIAkJCQlB
RDJGQ0JBNzFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oICov
LAogCQkJCTE0RDAxQkRDMjZERUVGMzcwMENBRTBEMCAvKiBKU1dlYkFzc2VtYmx5RXhjZXB0aW9u
LmNwcCAqLywKQEAgLTk1NDIsNiArOTU0Miw3IEBACiAJCQkJMEY3MjVDQTgxQzUwM0RFRDAwQUQ5
NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTMzOTVDNzA3MjI1NTVGNkQwMEJEQkZBRCAvKiBCM0VsaW1pbmF0ZURlYWRDb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjVCRjE3MTFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1cmVMb29w
UHJlSGVhZGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJFNjVBMUUyNzY4Mjc3MTAwMkI0QzBB
IC8qIEIzRXN0aW1hdGVTdGF0aWNFeGVjdXRpb25Db3VudHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUzMTgwNDVDMjJFQUFDNEIwMDRBNzM0MiAvKiBCM0V4dHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2OTcxRUExRDkyRjQyNDAwQkEwMkE1IC8qIEIzRmVuY2VWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY2QjhBRTUxQzRFRkUxNzAwOTY5MDUyIC8qIEIzRml4U1NBLmggaW4g
SGVhZGVycyAqLywKQEAgLTk5MTgsNyArOTkxOSw2IEBACiAJCQkJMEZGQjkyMUQxNkQwMkYzMDAw
NTVBNURCIC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzIy
RTVBMzFEQTY0NDM5MDA2RTc3MDkgLyogREZHU25pcHBldFBhcmFtcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODZFQzlERDMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggaW4g
SGVhZGVycyAqLywKLQkJCQk1MkU2NUExRTI3NjgyNzcxMDAyQjRDMEEgLyogQjNFc3RpbWF0ZVN0
YXRpY0V4ZWN1dGlvbkNvdW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2ODJGQjMxOUJDQjM2
NDAwRkEzQkFEIC8qIERGR1NTQUNhbGN1bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5
RDAwMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdTU0FDb252ZXJzaW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQzIwQ0JBMTg1NTZBMzUwMEM5RTk1NCAvKiBERkdTU0FMb3dlcmluZ1BoYXNl
LmggaW4gSGVhZGVycyAqLywKQEAgLTEwMTU4LDYgKzEwMTU4LDcgQEAKIAkJCQlBNTM5OEZBQjFD
NzUwREE0MDA2MEE5NjMgLyogSGVhcFByb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTRD
MkFCMTFDNjU0NEYyMDBBMThENzggLyogSGVhcFNuYXBzaG90LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNTMxMUMzNjFDNzdDRUM1MDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRkUyQ0M5MzAyNzU2QjJCOTAwM0Y1QUI4IC8qIEhlYXBTdWJzcGFjZVR5
cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkFERTY3MzFENEQyM0JFMDA3Njg0NTcgLyogSGVh
cFV0aWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMUJEMDI1MUU3MjA1MzgwMDEzNEJDOSAvKiBI
ZWFwVmVyaWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCURDMjE0MzA3MUNBMzJFNTUwMDBBODg2
OSAvKiBJQ1N0YXRzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMjc0LDYgKzEwMjc1LDcgQEAKIAkJ
CQkwRkI0Njc4MTFGRERBNkY3MDAzRkNCMDkgLyogSXNvQ2VsbFNldElubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUzQkYxQkFFMjM4QUFFREIwMDNBMUMyQiAvKiBJc29IZWFwQ2VsbFR5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUzQzhFRDQzMjNBMURCQ0IwMDEzMTk1OCAvKiBJc29Jbmxp
bmVkSGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTY1QjE1MTI3NDg2MDFGMDBE
QjVCMTYgLyogSXNvSW5saW5lZEhlYXBDZWxsVHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRENFMTJEMUZBRkI0RTUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZEMkZEOTUyMEI1MkJFMjAwRjA5NDQxIC8qIElzb1N1YnNwYWNlSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1RTBGRTcyMDg2QUQ0ODAwOTdGMERFIC8qIElzb1N1YnNw
YWNlUGVyVk0uaCBpbiBIZWFkZXJzICovLApAQCAtMTA0MjIsNyArMTA0MjQsNiBAQAogCQkJCUUz
M0Y1MDgxMUI4NDI5QTQwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTMzRjUwNzkxQjg0MjI1NzAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDg3MUI4NDQ5RUYwMDQxMzg1NiAv
KiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
RkU2NUIxNTEyNzQ4NjAxRjAwREI1QjE2IC8qIElzb0lubGluZWRIZWFwQ2VsbFR5cGVJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA3NTFCODQyMUMwMDA0MTM4NTYgLyogSlNJbnRl
cm5hbFByb21pc2VQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MDNGQTFFMTg4RTBG
QjAwMDExMEYxNCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDE2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0xleGljYWxFbnZpcm9ubWVu
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDUxMSw3ICsxMDUxMiw3IEBACiAJCQkJNzA5RkI4Njgx
QUUzMzVDNjAwMzlEMDY5IC8qIEpTV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0E5Nzc0
QTgyMDZCODJFNDAwOEQwM0QwIC8qIEpTV2Vha1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
RDVDMzZFQjFGNzVBRDczMDAwQkNBQUYgLyogSlNXZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQUQ5RTg1MkYxRThBMEM3QzAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aCBpbiBIZWFkZXJzICovLAorCQkJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFz
c2VtYmx5Q2FsbGVlR3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkUzMURCNThEQUQw
MEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNEQwMUJFRDI2REVFRjM4MDBDQUUwRDAgLyogSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTNCRjNDNEQyMzkwRDFFODAwOEJDNzUyIC8qIEpTV2ViQXNzZW1i
bHlHbG9iYWwuaCBpbiBIZWFkZXJzICovLApAQCAtMTA5NDUsMTIgKzEwOTQ2LDExIEBACiAJCQkJ
NTNDQTczMEExRUE1MzNEODAwNzYwNDlEIC8qIFdhc21CQlFQbGFuLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBRDRCMURGQTFERjI0NEUyMDA3MUFFMzIgLyogV2FzbUJpbmRpbmcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUyNUMwRERBMUU5MzU4NDcwMDIxODRDRCAvKiBXYXNtQ2FsbGVlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MjZBQzRCNzFFOTc3QzVEMDAzNTAwRTEgLyogV2FzbUNhbGxlZUdyb3Vw
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0ZCODUzQTIyRjM2NjdCMDA4RjkwRUQgLyogV2FzbUNh
bGxlZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0ZEMDRENDFEN0FCMjkxMDAzMjg3
RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzM3Qjk2
NzIyNDMyNEVBMDA5M0E4MjAgLyogV2FzbUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNTI2QUM0QjcxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUzQkQyQjc2MjJGMjc1MDIwMDExNzY1QyAvKiBXYXNtQ29tcGlsYXRpb25Nb2Rl
LmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTJDQzkzMDI3NTZCMkI5MDAzRjVBQjggLyogSGVhcFN1
YnNwYWNlVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENDEyQjM0MUU3QjJFOUUwMDhBRjE1
NyAvKiBXYXNtQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzU5M0M4OThCRTcxNEE2NEJF
OTNBNkU3IC8qIFdhc21Db250ZXh0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM2Q0M5
NDcyMDg2MzE0RjAwNTFGRkQ2IC8qIFdhc21DcmVhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovLApA
QCAtMTE3ODYsMTEgKzExNzg2LDExIEBACiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3
OwogCQkJZmlsZXMgPSAoCiAJCQkJRTM5MkU2RjgyNEQyNUZBNjAwQjIwNzY3IC8qIEIzQm90dG9t
VHVwbGVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MkU2NUExQzI3NjgyNzYwMDAyQjRD
MEEgLyogQjNFc3RpbWF0ZVN0YXRpY0V4ZWN1dGlvbkNvdW50cy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkVDODVBRjFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzXzEuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUMzQTc3QkEyMkYyNDgwRjAwMzgyN0ZGIC8qIHRlc3RiM18yLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDM0E3N0I5MjJGMjQ4MEIwMDM4MjdGRiAvKiB0ZXN0YjNfMy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1QzNBNzdCODIyRjI0ODA5MDAzODI3RkYgLyogdGVzdGIzXzQuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJNTJFNjVBMUMyNzY4Mjc2MDAwMkI0QzBBIC8qIEIzRXN0aW1h
dGVTdGF0aWNFeGVjdXRpb25Db3VudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMzQTc3Qjcy
MkYyNDgwNjAwMzgyN0ZGIC8qIHRlc3RiM181LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDM0E3
N0I2MjJGMjQ4MDMwMDM4MjdGRiAvKiB0ZXN0YjNfNi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
QzNBNzdCNTIyRjI0ODAwMDAzODI3RkYgLyogdGVzdGIzXzcuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggOWY1NWZkY2ZmMWQwZGJjMmVmNTVkNzZhYjRm
ZTNlNThmOWU1N2QyNi4uMTM3ZTRkYWY3OTE5MDk1OTA4ZTljNTVlNDJmNWRkMmYwOGFhNTdkYiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtMTA3Myw5ICsxMDczLDkgQEAgd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5jcHAKIHdhc20vV2FzbUJCUVBsYW4uY3BwCiB3YXNtL1dhc21CaW5k
aW5nLmNwcAogd2FzbS9XYXNtQ2FsbGVlLmNwcAord2FzbS9XYXNtQ2FsbGVlR3JvdXAuY3BwCiB3
YXNtL1dhc21DYWxsZWVSZWdpc3RyeS5jcHAKIHdhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNw
cAotd2FzbS9XYXNtQ29kZUJsb2NrLmNwcAogd2FzbS9XYXNtQ29tcGlsYXRpb25Nb2RlLmNwcAog
d2FzbS9XYXNtQ29udGV4dC5jcHAKIHdhc20vV2FzbUVtYmVkZGVyLmgKQEAgLTExMjEsNyArMTEy
MSw3IEBAIHdhc20vanMvSlNUb1dhc20uY3BwCiB3YXNtL2pzL0pTVG9XYXNtLmgKIHdhc20vanMv
SlNUb1dhc21JQ0NhbGxlZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKLXdhc20vanMv
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKK3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZUdy
b3VwLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcAogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAppbmRleCA0ZTIxZGNhZTQzMzM3YWFhZmNl
YmI2ZGZmNjk2MzkwNDE0NTMxMzk0Li4zOTYzMDgwZGU3NjIwYWRmMjcyMzhhNTQ0OGY5NzFlNDUw
MDRiMThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcApAQCAtNTUsNyArNTUsNyBA
QAogI2luY2x1ZGUgIkpTV2Vha01hcC5oIgogI2luY2x1ZGUgIkpTV2Vha09iamVjdFJlZi5oIgog
I2luY2x1ZGUgIkpTV2Vha1NldC5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlR3JvdXAuaCIKICNpbmNsdWRlICJNYWNo
aW5lU3RhY2tNYXJrZXIuaCIKICNpbmNsdWRlICJNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5o
IgogI2luY2x1ZGUgIk1hcmtlZEpTVmFsdWVSZWZBcnJheS5oIgpAQCAtMzM1LDcgKzMzNSw3IEBA
IEhlYXA6OkhlYXAoVk0mIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIGludGxTZWdtZW50
ZXJIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpBcmdzPEludGxTZWdtZW50ZXI+KCkpCiAg
ICAgLCBpbnRsU2VnbWVudHNIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpBcmdzPEludGxT
ZWdtZW50cz4oKSkKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgLCB3ZWJBc3NlbWJseUNv
ZGVCbG9ja0hlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8SlNXZWJBc3NlbWJseUNv
ZGVCbG9jaz4oKSkKKyAgICAsIHdlYkFzc2VtYmx5Q2FsbGVlR3JvdXBIZWFwQ2VsbFR5cGUoSXNv
SGVhcENlbGxUeXBlOjpBcmdzPEpTV2ViQXNzZW1ibHlDYWxsZWVHcm91cD4oKSkKICAgICAsIHdl
YkFzc2VtYmx5RXhjZXB0aW9uSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6QXJnczxKU1dl
YkFzc2VtYmx5RXhjZXB0aW9uPigpKQogICAgICwgd2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxs
VHlwZShJc29IZWFwQ2VsbFR5cGU6OkFyZ3M8V2ViQXNzZW1ibHlGdW5jdGlvbj4oKSkKICAgICAs
IHdlYkFzc2VtYmx5R2xvYmFsSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6QXJnczxKU1dl
YkFzc2VtYmx5R2xvYmFsPigpKQpAQCAtNzE0LDggKzcxNCw4IEBAIHZvaWQgSGVhcDo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpCiAgICAgICAgIGZpbmFsaXplTWFya2VkVW5jb25k
aXRpb25hbEZpbmFsaXplcnM8SlNGaW5hbGl6YXRpb25SZWdpc3RyeT4oKm1fZmluYWxpemF0aW9u
UmVnaXN0cnlTcGFjZSk7CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgaWYgKG1fd2Vi
QXNzZW1ibHlDb2RlQmxvY2tTcGFjZSkKLSAgICAgICAgZmluYWxpemVNYXJrZWRVbmNvbmRpdGlv
bmFsRmluYWxpemVyczxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPigqbV93ZWJBc3NlbWJseUNvZGVC
bG9ja1NwYWNlKTsKKyAgICBpZiAobV93ZWJBc3NlbWJseUNhbGxlZUdyb3VwU3BhY2UpCisgICAg
ICAgIGZpbmFsaXplTWFya2VkVW5jb25kaXRpb25hbEZpbmFsaXplcnM8SlNXZWJBc3NlbWJseUNh
bGxlZUdyb3VwPigqbV93ZWJBc3NlbWJseUNhbGxlZUdyb3VwU3BhY2UpOwogI2VuZGlmCiB9CiAK
QEAgLTEwMzYsMTEgKzEwMzYsMTAgQEAgdm9pZCBIZWFwOjpkZWxldGVBbGxDb2RlQmxvY2tzKERl
bGV0ZUFsbENvZGVFZmZvcnQgZWZmb3J0KQogICAgICAgICAvLyBwb2ludHMgaW50byBhIENvZGVC
bG9jayB0aGF0IGNvdWxkIGJlIGRlYWQuIFRoZSBJQyB3aWxsIHN0aWxsIHN1Y2NlZWQgYmVjYXVz
ZQogICAgICAgICAvLyBpdCB1c2VzIGEgY2FsbGVlIGNoZWNrLCBidXQgdGhlbiBpdCB3aWxsIGNh
bGwgaW50byBkZWFkIGNvZGUuCiAgICAgICAgIEhlYXBJdGVyYXRpb25TY29wZSBoZWFwSXRlcmF0
aW9uU2NvcGUoKnRoaXMpOwotICAgICAgICBpZiAobV93ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNl
KSB7Ci0gICAgICAgICAgICBtX3dlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UtPmZvckVhY2hMaXZl
Q2VsbChbJl0gKEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSB7CisgICAgICAg
IGlmIChtX3dlYkFzc2VtYmx5Q2FsbGVlR3JvdXBTcGFjZSkgeworICAgICAgICAgICAgbV93ZWJB
c3NlbWJseUNhbGxlZUdyb3VwU3BhY2UtPmZvckVhY2hMaXZlQ2VsbChbJl0gKEhlYXBDZWxsKiBj
ZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNF
RChraW5kLCBraW5kID09IEhlYXBDZWxsOjpKU0NlbGwpOwotICAgICAgICAgICAgICAgIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2sqPihjZWxsKTsKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2stPmNsZWFySlNDYWxs
SUNzKHZtKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5Q2FsbGVl
R3JvdXAqPihjZWxsKS0+Y2xlYXJKU0NhbGxJQ3Modm0pOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgIH0KICAgICB9CkBAIC0zMjc1LDcgKzMyNzQsNyBAQCBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1coaW50bFNlZ21lbnRlclNwYWNlLCBpbnRsU2VnbWVudGVySGVhcENl
bAogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxTZWdtZW50c1Nw
YWNlLCBpbnRsU2VnbWVudHNIZWFwQ2VsbFR5cGUsIEludGxTZWdtZW50cykKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coanNU
b1dhc21JQ0NhbGxlZVNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBKU1RvV2FzbUlDQ2FsbGVlKQot
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5Q29kZUJs
b2NrU3BhY2UsIHdlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLCBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrKSAvLyBIYXNoOjB4OWFkOTk1Y2QKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUNhbGxlZUdyb3VwU3BhY2UsIHdlYkFzc2VtYmx5Q2Fs
bGVlR3JvdXBIZWFwQ2VsbFR5cGUsIEpTV2ViQXNzZW1ibHlDYWxsZWVHcm91cCkgLy8gSGFzaDow
eDlhZDk5NWNkCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNz
ZW1ibHlFeGNlcHRpb25TcGFjZSwgd2ViQXNzZW1ibHlFeGNlcHRpb25IZWFwQ2VsbFR5cGUsIEpT
V2ViQXNzZW1ibHlFeGNlcHRpb24pCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1cod2ViQXNzZW1ibHlGdW5jdGlvblNwYWNlLCB3ZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENl
bGxUeXBlLCBXZWJBc3NlbWJseUZ1bmN0aW9uKSAvLyBIYXNoOjB4OGI3YzMyZGIKIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJseUdsb2JhbFNwYWNlLCB3
ZWJBc3NlbWJseUdsb2JhbEhlYXBDZWxsVHlwZSwgSlNXZWJBc3NlbWJseUdsb2JhbCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAppbmRleCA0YzU2NTE3N2FjMzYwOGZlMWRmMjQ4MWE2OTUyODcy
YzkzMzMyMzc1Li5kYWNkMjc2NWYxMjllNGNmN2ZjNTNiODVjNTBkNDYxYjVjNjRkNDI1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCkBAIC03ODUsNyArNzg1LDcgQEAgY2xhc3MgSGVhcCB7
CiAgICAgSXNvSGVhcENlbGxUeXBlIGludGxTZWdtZW50ZXJIZWFwQ2VsbFR5cGU7CiAgICAgSXNv
SGVhcENlbGxUeXBlIGludGxTZWdtZW50c0hlYXBDZWxsVHlwZTsKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCi0gICAgSXNvSGVhcENlbGxUeXBlIHdlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxU
eXBlOworICAgIElzb0hlYXBDZWxsVHlwZSB3ZWJBc3NlbWJseUNhbGxlZUdyb3VwSGVhcENlbGxU
eXBlOwogICAgIElzb0hlYXBDZWxsVHlwZSB3ZWJBc3NlbWJseUV4Y2VwdGlvbkhlYXBDZWxsVHlw
ZTsKICAgICBJc29IZWFwQ2VsbFR5cGUgd2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZTsK
ICAgICBJc29IZWFwQ2VsbFR5cGUgd2ViQXNzZW1ibHlHbG9iYWxIZWFwQ2VsbFR5cGU7CkBAIC05
NjcsNyArOTY3LDcgQEAgY2xhc3MgSGVhcCB7CiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUihpbnRsU2VnbWVudHNTcGFjZSkKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihqc1RvV2FzbUlDQ2FsbGVlU3Bh
Y2UpCi0gICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUNv
ZGVCbG9ja1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2Vi
QXNzZW1ibHlDYWxsZWVHcm91cFNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIod2ViQXNzZW1ibHlFeGNlcHRpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5RnVuY3Rpb25TcGFjZSkKICAgICBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFzc2VtYmx5R2xvYmFsU3BhY2UpCkBAIC0x
MDI1LDggKzEwMjUsNiBAQCBjbGFzcyBIZWFwIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgogICAgIHZvaWQgZm9yRWFjaENvZGVCbG9ja1NwYWNlKGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAg
ewotICAgICAgICAvLyBUaGlzIHNob3VsZCBub3QgaW5jbHVkZSB3ZWJBc3NlbWJseUNvZGVCbG9j
a1NwYWNlIGJlY2F1c2UgdGhpcyBpcyBhYm91dCBzdWJzY2xhc3NlcyBvZgotICAgICAgICAvLyBK
U0M6OkNvZGVCbG9jay4KICAgICAgICAgZnVuYyhjb2RlQmxvY2tTcGFjZSk7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggNGI4NzcwNWRjMThhMzdkMTNjZGMx
ZmFiMTFiOWEyYTE2ZGRkNGE4MC4uYzZiZTQ1N2I2ZDA2MDNkNjZkMjg1ODEyMThlMDRkNGZjMDNj
YzQyMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtNzcsNyArNzcsNyBA
QAogI2luY2x1ZGUgIkpTU2V0LmgiCiAjaW5jbHVkZSAiSlNTb3VyY2VDb2RlLmgiCiAjaW5jbHVk
ZSAiSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZUdyb3VwLmgiCiAjaW5j
bHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTExJbnRFeGNlcHRpb25zLmgiCiAjaW5jbHVk
ZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCkBAIC0yNzEsNyArMjcxLDcgQEAgVk06OlZNKFZNVHlw
ZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlLCBXVEY6OlJ1bkxvb3AqIHJ1bkxvb3AsIGJvb2wq
IHN1Y2Nlc3MpCiAgICAgcHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9n
cmFtRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCBudWxscHRyLCBqc051bGwoKSkp
OwogICAgIGZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCBudWxscHRyLCBqc051bGwoKSkpOwogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICB3ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5z
ZXQoKnRoaXMsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
bnVsbHB0ciwganNOdWxsKCkpKTsKKyAgICB3ZWJBc3NlbWJseUNhbGxlZUdyb3VwU3RydWN0dXJl
LnNldCgqdGhpcywgSlNXZWJBc3NlbWJseUNhbGxlZUdyb3VwOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIG51bGxwdHIsIGpzTnVsbCgpKSk7CiAjZW5kaWYKICAgICBtb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIG51bGxwdHIsIGpzTnVsbCgpKSk7CiAgICAgcmVnRXhwU3RydWN0dXJl
LnNldCgqdGhpcywgUmVnRXhwOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIG51bGxwdHIsIGpzTnVs
bCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCAzNWFhYzFiNTMzYTRlYzc2
MzE3NjYxMDVlZWUyNWNhNDlmZWFkN2JhLi4xZmNlYzZmOWExOGZlMDE0Mzc0YzRjMTkzZGU2ZGE1
NTk0NzNhOGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTQ3Niw3ICs0NzYs
NyBAQCBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxWTT4sIHB1YmxpYyBE
b3VibHlMaW5rZWRMaXN0Tm9kZTxWTT4gewogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIoaW50bFNlZ21lbnRzU3BhY2UpCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAg
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoanNUb1dhc21JQ0NhbGxlZVNwYWNl
KQotICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIod2ViQXNzZW1ibHlDb2Rl
QmxvY2tTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHdlYkFz
c2VtYmx5Q2FsbGVlR3JvdXBTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSKHdlYkFzc2VtYmx5RXhjZXB0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUZ1bmN0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUih3ZWJBc3NlbWJseUdsb2JhbFNwYWNlKQpAQCAtNTMz
LDcgKzUzMyw3IEBAIGNsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwg
cHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
cHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZnVuY3Rp
b25FeGVjdXRhYmxlU3RydWN0dXJlOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBTdHJv
bmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZTsKKyAgICBTdHJvbmc8
U3RydWN0dXJlPiB3ZWJBc3NlbWJseUNhbGxlZUdyb3VwU3RydWN0dXJlOwogI2VuZGlmCiAgICAg
U3Ryb25nPFN0cnVjdHVyZT4gbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmU7CiAgICAg
U3Ryb25nPFN0cnVjdHVyZT4gcmVnRXhwU3RydWN0dXJlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW4uY3BwCmluZGV4IDE0N2QwMmVlNzU4ZDZmYzg0ZWIxYWYwYTA4MDZl
MGU1YzIzOGIxMDIuLjNlNTYyZWUyYWJhYTc0OWFjZWY1MTllMGVhMjZiNTg3OTI2ZmY4YTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKQEAgLTM0LDggKzM0
LDggQEAKICNpbmNsdWRlICJXYXNtQWlySVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQjNJ
UkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKKyNpbmNsdWRlICJXYXNtQ2Fs
bGVlR3JvdXAuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJX
YXNtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKICNpbmNs
dWRlICJXYXNtVGllclVwQ291bnQuaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgpAQCAtNDgs
MTMgKzQ4LDEzIEBAIG5hbWVzcGFjZSBXYXNtQkJRUGxhbkludGVybmFsIHsKIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLUJCUVBsYW46OkJCUVBsYW4oQ29udGV4
dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBtb2R1bGVJbmZvcm1hdGlvbiwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBsZXRpb25UYXNr
JiYgY29tcGxldGlvblRhc2spCitCQlFQbGFuOjpCQlFQbGFuKENvbnRleHQqIGNvbnRleHQsIFJl
ZjxNb2R1bGVJbmZvcm1hdGlvbj4gbW9kdWxlSW5mb3JtYXRpb24sIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgsIENhbGxlZUdyb3VwKiBjYWxsZWVHcm91cCwgQ29tcGxldGlvblRhc2smJiBjb21wbGV0
aW9uVGFzaykKICAgICA6IEVudHJ5UGxhbihjb250ZXh0LCBXVEZNb3ZlKG1vZHVsZUluZm9ybWF0
aW9uKSwgQ29tcGlsZXJNb2RlOjpGdWxsQ29tcGlsZSwgV1RGTW92ZShjb21wbGV0aW9uVGFzaykp
Ci0gICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgLCBtX2NhbGxlZUdyb3VwKGNhbGxl
ZUdyb3VwKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCiB7CiAgICAgQVNT
RVJUKE9wdGlvbnM6OnVzZUJCUUpJVCgpKTsKLSAgICBzZXRNb2RlKG1fY29kZUJsb2NrLT5tb2Rl
KCkpOworICAgIHNldE1vZGUobV9jYWxsZWVHcm91cC0+bW9kZSgpKTsKICAgICBkYXRhTG9nTG5J
ZihXYXNtQkJRUGxhbkludGVybmFsOjp2ZXJib3NlLCAiU3RhcnRpbmcgQkJRIHBsYW4gZm9yICIs
IGZ1bmN0aW9uSW5kZXgpOwogfQogCkBAIC03Niw3ICs3Niw3IEBAIGJvb2wgQkJRUGxhbjo6cHJl
cGFyZUltcGwoKQogCiB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
KQogewotICAgIGlmICghbV9jb2RlQmxvY2spIHsKKyAgICBpZiAoIW1fY2FsbGVlR3JvdXApIHsK
ICAgICAgICAgc3dpdGNoIChtX3N0YXRlKSB7CiAgICAgICAgIGNhc2UgU3RhdGU6OkluaXRpYWw6
CiAgICAgICAgICAgICBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCk7CkBAIC0xMjcsNyArMTI3LDcg
QEAgdm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICB7CiAg
ICAgICAgIFJlZjxCQlFDYWxsZWU+IGNhbGxlZSA9IEJCUUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUo
ZnVuY3Rpb24tPmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3Jt
YXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZSh0aWVy
VXApLCBXVEZNb3ZlKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKSwgV1RGTW92ZShmdW5jdGlvbi0+
c3RhY2ttYXBzKSwgV1RGTW92ZShmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3Zl
KGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJv
eFdhc20oY2FsbGVlLnB0cigpKSk7Ci0gICAgICAgIEFTU0VSVCghbV9jb2RlQmxvY2stPm1fYmJx
Q2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdKTsKKyAgICAgICAgQVNTRVJUKCFtX2NhbGxlZUdyb3Vw
LT5tX2JicUNhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSk7CiAgICAgICAgIGVudHJ5cG9pbnQgPSBj
YWxsZWUtPmVudHJ5cG9pbnQoKTsKIAogICAgICAgICBpZiAoY29udGV4dC5wY1RvQ29kZU9yaWdp
bk1hcCkKQEAgLTEzNywyNCArMTM3LDI0IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIC8vIGFsd2F5cyBjYWxsIHRoZSBmYXN0ZXN0IGNvZGUu
IEFueSBmdW5jdGlvbiBsaW5rZWQgYWZ0ZXIgdXMgd2lsbCBzZWUgb3VyIG5ldyBjb2RlIGFuZCB0
aGUgbmV3IGNhbGxzaXRlcywgd2hpY2ggdGhleQogICAgICAgICAvLyB3aWxsIHVwZGF0ZS4gSXQn
cyBhbHNvIG9rIGlmIHRoZXkgcHVibGlzaCB0aGVpciBjb2RlIGJlZm9yZSB3ZSByZXNldCB0aGUg
aW5zdHJ1Y3Rpb24gY2FjaGVzIGJlY2F1c2UgYWZ0ZXIgd2UgcmVsZWFzZQogICAgICAgICAvLyB0
aGUgbG9jayBvdXIgY29kZSBpcyByZWFkeSB0byBiZSBwdWJsaXNoZWQgdG9vLgotICAgICAgICBM
b2NrZXIgbG9ja2VyIHsgbV9jb2RlQmxvY2stPm1fbG9jayB9OworICAgICAgICBMb2NrZXIgbG9j
a2VyIHsgbV9jYWxsZWVHcm91cC0+bV9sb2NrIH07CiAKLSAgICAgICAgbV9jb2RlQmxvY2stPm1f
YmJxQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdID0gY2FsbGVlLmNvcHlSZWYoKTsKKyAgICAgICAg
bV9jYWxsZWVHcm91cC0+bV9iYnFDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0gPSBjYWxsZWUuY29w
eVJlZigpOwogCiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNh
bGxzaXRlcygpKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5
UHRyVGFnPiBlbnRyeXBvaW50OwogICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNw
YWNlIDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpKQotICAgICAg
ICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJz
W2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7CisgICAgICAgICAgICAgICAgZW50cnlw
b2ludCA9IG1fY2FsbGVlR3JvdXAtPm1fd2FzbVRvV2FzbUV4aXRTdHVic1tjYWxsLmZ1bmN0aW9u
SW5kZXhTcGFjZV0uY29kZSgpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVu
dHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5lbnRyeXBvaW50KCkucmV0YWdnZWQ8
V2FzbUVudHJ5UHRyVGFnPigpOworICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NhbGxl
ZUdyb3VwLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5m
dW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+
KCk7CiAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5j
YWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2lu
dCkpOwogICAgICAgICB9CiAKLSAgICAgICAgUGxhbjo6dXBkYXRlQ2FsbFNpdGVzVG9DYWxsVXMo
Km1fY29kZUJsb2NrLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9p
bnQpLCBtX2Z1bmN0aW9uSW5kZXgsIGZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgIFBsYW46
OnVwZGF0ZUNhbGxTaXRlc1RvQ2FsbFVzKCptX2NhbGxlZUdyb3VwLCBDb2RlTG9jYXRpb25MYWJl
bDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpLCBtX2Z1bmN0aW9uSW5kZXgsIGZ1bmN0aW9u
SW5kZXhTcGFjZSk7CiAKICAgICAgICAgewotICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50
Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzLT5hdChtX2Z1bmN0aW9uSW5kZXgp
LmdldCgpOworICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jYWxsZWVH
cm91cC0+bV9sbGludENhbGxlZXMtPmF0KG1fZnVuY3Rpb25JbmRleCkuZ2V0KCk7CiAgICAgICAg
ICAgICBMb2NrZXIgbG9ja2VyIHsgbGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fbG9jayB9
OwogICAgICAgICAgICAgbGxpbnRDYWxsZWUuc2V0UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYo
KSwgbW9kZSgpKTsKICAgICAgICAgICAgIGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2Nv
bXBpbGF0aW9uU3RhdHVzID0gTExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6
Q29tcGlsZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAppbmRleCBk
YzAwMjI3NTY2MjI1MWI4YWIwZjA3ZGVhYjA5ODZlOTdjZmU2YTJlLi40ZDU2ZGVlMmI3Y2JlYzc4
YTk2NDFkMjZhOGZjMDk1MjVlYmNkMGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQkJRUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CQlFQbGFuLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgQ2FsbExpbmtJbmZvOwogbmFtZXNw
YWNlIFdhc20gewogCiBjbGFzcyBCQlFDYWxsZWU7Ci1jbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBD
YWxsZWVHcm91cDsKIGNsYXNzIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZTsKIAogY2xhc3MgQkJR
UGxhbiBmaW5hbCA6IHB1YmxpYyBFbnRyeVBsYW4gewpAQCAtNTQsNyArNTQsNyBAQCBjbGFzcyBC
QlFQbGFuIGZpbmFsIDogcHVibGljIEVudHJ5UGxhbiB7CiAKICAgICB1c2luZyBCYXNlOjpCYXNl
OwogCi0gICAgQkJRUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgdWludDMy
X3QgZnVuY3Rpb25JbmRleCwgQ29kZUJsb2NrKiwgQ29tcGxldGlvblRhc2smJik7CisgICAgQkJR
UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgdWludDMyX3QgZnVuY3Rpb25J
bmRleCwgQ2FsbGVlR3JvdXAqLCBDb21wbGV0aW9uVGFzayYmKTsKIAogICAgIGJvb2wgaGFzV29y
aygpIGNvbnN0IGZpbmFsCiAgICAgewpAQCAtODgsNyArODgsNyBAQCBjbGFzcyBCQlFQbGFuIGZp
bmFsIDogcHVibGljIEVudHJ5UGxhbiB7CiAgICAgVmVjdG9yPENvbXBpbGF0aW9uQ29udGV4dD4g
bV9jb21waWxhdGlvbkNvbnRleHRzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VGllclVw
Q291bnQ+PiBtX3RpZXJVcENvdW50czsKIAotICAgIFJlZlB0cjxDb2RlQmxvY2s+IG1fY29kZUJs
b2NrIHsgbnVsbHB0ciB9OworICAgIFJlZlB0cjxDYWxsZWVHcm91cD4gbV9jYWxsZWVHcm91cCB7
IG51bGxwdHIgfTsKICAgICB1aW50MzJfdCBtX2Z1bmN0aW9uSW5kZXg7CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlR3JvdXAuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZUdyb3VwLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
MmE0MTEwOWU2YjA4ZDRjYmY0MTY4Yzc4MjQ5MzcxMDQ2ZjY4ZGMxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZUdyb3VwLmNwcApAQCAtMCww
ICsxLDE5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21DYWxsZWVHcm91cC5oIgor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUJCUVBsYW4uaCIKKyNp
bmNsdWRlICJXYXNtQ2FsbGVlLmgiCisjaW5jbHVkZSAiV2FzbUxMSW50UGxhbi5oIgorI2luY2x1
ZGUgIldhc21Xb3JrbGlzdC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewor
CitSZWY8Q2FsbGVlR3JvdXA+IENhbGxlZUdyb3VwOjpjcmVhdGUoQ29udGV4dCogY29udGV4dCwg
TWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24sIFJl
ZlB0cjxMTEludENhbGxlZXM+IGxsaW50Q2FsbGVlcykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBDYWxsZWVHcm91cChjb250ZXh0LCBtb2RlLCBtb2R1bGVJbmZvcm1hdGlvbiwgbGxpbnRD
YWxsZWVzKSk7Cit9CisKK1JlZjxDYWxsZWVHcm91cD4gQ2FsbGVlR3JvdXA6OmNyZWF0ZUZyb21F
eGlzdGluZyhNZW1vcnlNb2RlIG1vZGUsIGNvbnN0IENhbGxlZUdyb3VwJiBvdGhlcikKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDYWxsZWVHcm91cChtb2RlLCBvdGhlcikpOworfQorCitD
YWxsZWVHcm91cDo6Q2FsbGVlR3JvdXAoTWVtb3J5TW9kZSBtb2RlLCBjb25zdCBDYWxsZWVHcm91
cCYgb3RoZXIpCisgICAgOiBtX2NhbGxlZUNvdW50KG90aGVyLm1fY2FsbGVlQ291bnQpCisgICAg
LCBtX21vZGUobW9kZSkKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCisgICAgLCBtX29t
Z0NhbGxlZXMobV9jYWxsZWVDb3VudCkKKyAgICAsIG1fYmJxQ2FsbGVlcyhtX2NhbGxlZUNvdW50
KQorI2VuZGlmCisgICAgLCBtX2xsaW50Q2FsbGVlcyhvdGhlci5tX2xsaW50Q2FsbGVlcykKKyAg
ICAsIG1fZW1iZWRkZXJDYWxsZWVzKG90aGVyLm1fZW1iZWRkZXJDYWxsZWVzKQorICAgICwgbV93
YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHMob3RoZXIubV93YXNtSW5kaXJlY3RDYWxsRW50cnlQ
b2ludHMpCisgICAgLCBtX3dhc21Ub1dhc21DYWxsc2l0ZXMob3RoZXIubV93YXNtVG9XYXNtQ2Fs
bHNpdGVzKQorICAgICwgbV93YXNtVG9XYXNtRXhpdFN0dWJzKG90aGVyLm1fd2FzbVRvV2FzbUV4
aXRTdHVicykKK3sKKyAgICBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7Cit9CisKK0NhbGxlZUdy
b3VwOjpDYWxsZWVHcm91cChDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVs
ZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiwgUmVmUHRyPExMSW50Q2FsbGVlcz4gbGxp
bnRDYWxsZWVzKQorICAgIDogbV9jYWxsZWVDb3VudChtb2R1bGVJbmZvcm1hdGlvbi5pbnRlcm5h
bEZ1bmN0aW9uQ291bnQoKSkKKyAgICAsIG1fbW9kZShtb2RlKQorICAgICwgbV9sbGludENhbGxl
ZXMobGxpbnRDYWxsZWVzKQoreworICAgIFJlZlB0cjxDYWxsZWVHcm91cD4gcHJvdGVjdGVkVGhp
cyA9IHRoaXM7CisKKyAgICBpZiAoT3B0aW9uczo6dXNlV2FzbUxMSW50KCkpIHsKKyAgICAgICAg
bV9wbGFuID0gYWRvcHRSZWYoKm5ldyBMTEludFBsYW4oY29udGV4dCwgbW9kdWxlSW5mb3JtYXRp
b24sIG1fbGxpbnRDYWxsZWVzLT5kYXRhKCksIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJh
Y2tUeXBlPihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChQ
bGFuJikgeworICAgICAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OworICAgICAgICAg
ICAgaWYgKG1fcGxhbi0+ZmFpbGVkKCkpIHsKKyAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2Fn
ZSA9IG1fcGxhbi0+ZXJyb3JNZXNzYWdlKCk7CisgICAgICAgICAgICAgICAgc2V0Q29tcGlsYXRp
b25GaW5pc2hlZCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKKyAgICAgICAgICAgIC8vIEZJWE1FOiB3ZSBz
aG91bGQgZXZlbnR1YWxseSBjb2xsZWN0IHRoZSBCQlEgY29kZS4KKyAgICAgICAgICAgIG1fYmJx
Q2FsbGVlcyA9IEZpeGVkVmVjdG9yPFJlZlB0cjxCQlFDYWxsZWU+PihtX2NhbGxlZUNvdW50KTsK
KyAgICAgICAgICAgIG1fb21nQ2FsbGVlcyA9IEZpeGVkVmVjdG9yPFJlZlB0cjxPTUdDYWxsZWU+
PihtX2NhbGxlZUNvdW50KTsKKyNlbmRpZgorICAgICAgICAgICAgbV93YXNtSW5kaXJlY3RDYWxs
RW50cnlQb2ludHMgPSBGaXhlZFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5
UHRyVGFnPj4obV9jYWxsZWVDb3VudCk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2NhbGxlZUNvdW50OyArK2kpCisgICAgICAgICAgICAgICAgbV93YXNtSW5kaXJl
Y3RDYWxsRW50cnlQb2ludHNbaV0gPSBtX2xsaW50Q2FsbGVlcy0+YXQoaSktPmVudHJ5cG9pbnQo
KTsKKworICAgICAgICAgICAgbV93YXNtVG9XYXNtRXhpdFN0dWJzID0gbV9wbGFuLT50YWtlV2Fz
bVRvV2FzbUV4aXRTdHVicygpOworICAgICAgICAgICAgbV93YXNtVG9XYXNtQ2FsbHNpdGVzID0g
bV9wbGFuLT50YWtlV2FzbVRvV2FzbUNhbGxzaXRlcygpOworICAgICAgICAgICAgbV9lbWJlZGRl
ckNhbGxlZXMgPSBzdGF0aWNfY2FzdDxMTEludFBsYW4qPihtX3BsYW4uZ2V0KCkpLT50YWtlRW1i
ZWRkZXJDYWxsZWVzKCk7CisKKyAgICAgICAgICAgIHNldENvbXBpbGF0aW9uRmluaXNoZWQoKTsK
KyAgICAgICAgfSkpKTsKKyAgICB9CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQorICAg
IGVsc2UgeworICAgICAgICBtX3BsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oY29udGV4dCwg
bW9kdWxlSW5mb3JtYXRpb24sIENvbXBpbGVyTW9kZTo6RnVsbENvbXBpbGUsIGNyZWF0ZVNoYXJl
ZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUo
cHJvdGVjdGVkVGhpcyldIChQbGFuJikgeworICAgICAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1f
bG9jayB9OworICAgICAgICAgICAgaWYgKG1fcGxhbi0+ZmFpbGVkKCkpIHsKKyAgICAgICAgICAg
ICAgICBtX2Vycm9yTWVzc2FnZSA9IG1fcGxhbi0+ZXJyb3JNZXNzYWdlKCk7CisgICAgICAgICAg
ICAgICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBldmVudHVh
bGx5IGNvbGxlY3QgdGhlIEJCUSBjb2RlLgorICAgICAgICAgICAgbV9iYnFDYWxsZWVzID0gRml4
ZWRWZWN0b3I8UmVmUHRyPEJCUUNhbGxlZT4+KG1fY2FsbGVlQ291bnQpOworICAgICAgICAgICAg
bV9vbWdDYWxsZWVzID0gRml4ZWRWZWN0b3I8UmVmUHRyPE9NR0NhbGxlZT4+KG1fY2FsbGVlQ291
bnQpOworICAgICAgICAgICAgbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHMgPSBGaXhlZFZl
Y3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPj4obV9jYWxsZWVDb3Vu
dCk7CisKKyAgICAgICAgICAgIEJCUVBsYW4qIGJicVBsYW4gPSBzdGF0aWNfY2FzdDxCQlFQbGFu
Kj4obV9wbGFuLmdldCgpKTsKKyAgICAgICAgICAgIGJicVBsYW4tPmluaXRpYWxpemVDYWxsZWVz
KFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIFJlZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxs
ZWU+JiYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBSZWZQdHI8QkJRQ2FsbGVlPiYmIHdhc21F
bnRyeXBvaW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGVtYmVkZGVyRW50cnlwb2ludENhbGxl
ZSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJDYWxsZWVz
LnNldChjYWxsZWVJbmRleCwgV1RGTW92ZShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpKTsKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV93YXNtSW5kaXJlY3RDYWxs
RW50cnlQb2ludHNbY2FsbGVlSW5kZXhdID0gd2FzbUVudHJ5cG9pbnQtPmVudHJ5cG9pbnQoKTsK
KyAgICAgICAgICAgICAgICBtX2JicUNhbGxlZXNbY2FsbGVlSW5kZXhdID0gYWRvcHRSZWYoc3Rh
dGljX2Nhc3Q8QkJRQ2FsbGVlKj4od2FzbUVudHJ5cG9pbnQubGVha1JlZigpKSk7CisgICAgICAg
ICAgICB9KTsKKworICAgICAgICAgICAgbV93YXNtVG9XYXNtRXhpdFN0dWJzID0gbV9wbGFuLT50
YWtlV2FzbVRvV2FzbUV4aXRTdHVicygpOworICAgICAgICAgICAgbV93YXNtVG9XYXNtQ2FsbHNp
dGVzID0gbV9wbGFuLT50YWtlV2FzbVRvV2FzbUNhbGxzaXRlcygpOworCisgICAgICAgICAgICBz
ZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7CisgICAgICAgIH0pKSk7CisgICAgfQorI2VuZGlmCisg
ICAgbV9wbGFuLT5zZXRNb2RlKG1vZGUpOworCisgICAgYXV0byYgd29ya2xpc3QgPSBXYXNtOjpl
bnN1cmVXb3JrbGlzdCgpOworICAgIC8vIE5vdGUsIGltbWVkaWF0ZWx5IGFmdGVyIHdlIGVucXVl
dWUgdGhlIHBsYW4sIHRoZXJlIGlzIGEgY2hhbmNlIHRoZSBhYm92ZSBjYWxsYmFjayB3aWxsIGJl
IGNhbGxlZC4KKyAgICB3b3JrbGlzdC5lbnF1ZXVlKCptX3BsYW4uZ2V0KCkpOworfQorCitDYWxs
ZWVHcm91cDo6fkNhbGxlZUdyb3VwKCkgeyB9CisKK3ZvaWQgQ2FsbGVlR3JvdXA6OndhaXRVbnRp
bEZpbmlzaGVkKCkKK3sKKyAgICBSZWZQdHI8UGxhbj4gcGxhbjsKKyAgICB7CisgICAgICAgIExv
Y2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKKyAgICAgICAgcGxhbiA9IG1fcGxhbjsKKyAgICB9CisK
KyAgICBpZiAocGxhbikgeworICAgICAgICBhdXRvJiB3b3JrbGlzdCA9IFdhc206OmVuc3VyZVdv
cmtsaXN0KCk7CisgICAgICAgIHdvcmtsaXN0LmNvbXBsZXRlUGxhblN5bmNocm9ub3VzbHkoKnBs
YW4uZ2V0KCkpOworICAgIH0KKyAgICAvLyBlbHNlLCBpZiB3ZSBkb24ndCBoYXZlIGEgcGxhbiwg
d2UncmUgYWxyZWFkeSBjb21waWxlZC4KK30KKwordm9pZCBDYWxsZWVHcm91cDo6Y29tcGlsZUFz
eW5jKENvbnRleHQqIGNvbnRleHQsIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2spCit7
CisgICAgUmVmUHRyPFBsYW4+IHBsYW47CisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsg
bV9sb2NrIH07CisgICAgICAgIHBsYW4gPSBtX3BsYW47CisgICAgfQorCisgICAgaWYgKHBsYW4p
IHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBrZWVwIGEgUmVmUHRyIG9uIHRoZSBQbGFu
IGJlY2F1c2UgdGhlIHdvcmtsaXN0IHdpbGwga2VlcAorICAgICAgICAvLyBhIFJlZlB0ciBvbiB0
aGUgUGxhbiB1bnRpbCB0aGUgcGxhbiBmaW5pc2hlcyBub3RpZnlpbmcgYWxsIG9mIGl0cyBjYWxs
YmFja3MuCisgICAgICAgIFJlZlB0cjxDYWxsZWVHcm91cD4gcHJvdGVjdGVkVGhpcyA9IHRoaXM7
CisgICAgICAgIHBsYW4tPmFkZENvbXBsZXRpb25UYXNrKGNvbnRleHQsIGNyZWF0ZVNoYXJlZFRh
c2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgdGFzayA9IFdURk1vdmUodGFzayksIHByb3Rl
Y3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoUGxhbiYpIHsKKyAgICAgICAgICAg
IHRhc2stPnJ1bihSZWYgeyAqdGhpcyB9KTsKKyAgICAgICAgfSkpOworICAgIH0gZWxzZQorICAg
ICAgICB0YXNrLT5ydW4oUmVmIHsgKnRoaXMgfSk7Cit9CisKK2Jvb2wgQ2FsbGVlR3JvdXA6Omlz
U2FmZVRvUnVuKE1lbW9yeU1vZGUgbWVtb3J5TW9kZSkKK3sKKyAgICBpZiAoIXJ1bm5hYmxlKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgY2Fz
ZSBXYXNtOjpNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgY2FzZSBXYXNtOjpNZW1vcnlNb2RlOjpTaWduYWxpbmc6CisgICAgICAgIC8vIENvZGUg
YmVpbmcgaW4gU2lnbmFsaW5nIG1vZGUgbWVhbnMgdGhhdCBpdCBwZXJmb3JtcyBubyBib3VuZHMg
Y2hlY2tzLgorICAgICAgICAvLyBJdHMgbWVtb3J5LCBldmVuIGlmIGVtcHR5LCBhYnNvbHV0ZWx5
IG11c3QgYWxzbyBiZSBpbiBTaWduYWxpbmcgbW9kZQorICAgICAgICAvLyBiZWNhdXNlIHRoZSBw
YWdlIHByb3RlY3Rpb24gZGV0ZWN0cyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLgorICAgICAgICBy
ZXR1cm4gbWVtb3J5TW9kZSA9PSBXYXNtOjpNZW1vcnlNb2RlOjpTaWduYWxpbmc7CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CisKK3ZvaWQgQ2FsbGVlR3JvdXA6OnNldENvbXBpbGF0aW9uRmluaXNoZWQoKQoreworICAgIG1f
cGxhbiA9IG51bGxwdHI7CisgICAgbV9jb21waWxhdGlvbkZpbmlzaGVkLnN0b3JlKHRydWUpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxl
ZUdyb3VwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlR3JvdXAuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41OWQ1YmQ5MzBhOTAyM2Q0ZWMxNzU4MDFkMTVkY2E5ZjRmYWYxZTA5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZUdyb3Vw
LmgKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
CisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxl
ZS5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgorI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVh
ZENvcGllci5oPgorI2luY2x1ZGUgPHd0Zi9GaXhlZFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9M
b2NrLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNr
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgV2FzbSB7
CisKK3N0cnVjdCBDb250ZXh0OworY2xhc3MgRW50cnlQbGFuOworc3RydWN0IE1vZHVsZUluZm9y
bWF0aW9uOworc3RydWN0IFVubGlua2VkV2FzbVRvV2FzbUNhbGw7CitlbnVtIGNsYXNzIE1lbW9y
eU1vZGUgOiB1aW50OF90OworCitjbGFzcyBDYWxsZWVHcm91cCA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxDYWxsZWVHcm91cD4geworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCBDYWxs
YmFja1R5cGUoUmVmPENhbGxlZUdyb3VwPiYmKTsKKyAgICB1c2luZyBBc3luY0NvbXBpbGF0aW9u
Q2FsbGJhY2sgPSBSZWZQdHI8V1RGOjpTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4+OworICAgIHN0
YXRpYyBSZWY8Q2FsbGVlR3JvdXA+IGNyZWF0ZShDb250ZXh0KiwgTWVtb3J5TW9kZSwgTW9kdWxl
SW5mb3JtYXRpb24mLCBSZWZQdHI8TExJbnRDYWxsZWVzPik7CisgICAgc3RhdGljIFJlZjxDYWxs
ZWVHcm91cD4gY3JlYXRlRnJvbUV4aXN0aW5nKE1lbW9yeU1vZGUsIGNvbnN0IENhbGxlZUdyb3Vw
Jik7CisKKyAgICB2b2lkIHdhaXRVbnRpbEZpbmlzaGVkKCk7CisgICAgdm9pZCBjb21waWxlQXN5
bmMoQ29udGV4dCosIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmKTsKKworICAgIGJvb2wgY29t
cGlsYXRpb25GaW5pc2hlZCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jb21waWxhdGlvbkZp
bmlzaGVkLmxvYWQoKTsKKyAgICB9CisgICAgYm9vbCBydW5uYWJsZSgpIHsgcmV0dXJuIGNvbXBp
bGF0aW9uRmluaXNoZWQoKSAmJiAhbV9lcnJvck1lc3NhZ2U7IH0KKworICAgIC8vIE5vdGUsIHdl
IGRvIHRoaXMgY29weSB0byBlbnN1cmUgaXQncyB0aHJlYWQgc2FmZSB0byBoYXZlIHRoaXMKKyAg
ICAvLyBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIHNpbXVsdGFuZW91c2x5LgorICAgIFN0
cmluZyBlcnJvck1lc3NhZ2UoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFydW5uYWJsZSgpKTsK
KyAgICAgICAgcmV0dXJuIGNyb3NzVGhyZWFkQ29weShtX2Vycm9yTWVzc2FnZSk7CisgICAgfQor
CisgICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2Fz
bVRvV2FzbUV4aXRTdHVicy5zaXplKCk7IH0KKworICAgIC8vIFRoZXNlIHR3byBjYWxsZWUgZ2V0
dGVycyBhcmUgb25seSB2YWxpZCBvbmNlIHRoZSBjYWxsZWVzIGhhdmUgYmVlbiBwb3B1bGF0ZWQu
CisKKyAgICBDYWxsZWUmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4
U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KHJ1bm5hYmxlKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2Ug
Pj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKKyAgICAgICAgdW5zaWduZWQgY2FsbGVlSW5kZXgg
PSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5jdGlvbkltcG9ydENvdW50KCk7CisKKyAgICAgICAg
YXV0byBjYWxsZWUgPSBtX2VtYmVkZGVyQ2FsbGVlcy5nZXQoY2FsbGVlSW5kZXgpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjYWxsZWUpOworICAgICAgICByZXR1cm4gKmNhbGxlZTsKKyAgICB9
CisKKyAgICBDYWxsZWUmIHdhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgeworICAgICAgICBBU1NFUlQocnVu
bmFibGUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBm
dW5jdGlvbkltcG9ydENvdW50KCkpOworICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1
bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFlfQjNKSVQpCisgICAgICAgIGlmIChtX29tZ0NhbGxlZXNbY2FsbGVlSW5kZXhdKQor
ICAgICAgICAgICAgcmV0dXJuICptX29tZ0NhbGxlZXNbY2FsbGVlSW5kZXhdLmdldCgpOworICAg
ICAgICBpZiAobV9iYnFDYWxsZWVzW2NhbGxlZUluZGV4XSkKKyAgICAgICAgICAgIHJldHVybiAq
bV9iYnFDYWxsZWVzW2NhbGxlZUluZGV4XS5nZXQoKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4g
bV9sbGludENhbGxlZXMtPmF0KGNhbGxlZUluZGV4KS5nZXQoKTsKKyAgICB9CisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFlfQjNKSVQpCisgICAgQkJRQ2FsbGVlJiB3YXNtQkJRQ2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgeworICAg
ICAgICBBU1NFUlQocnVubmFibGUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9u
SW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOworICAgICAgICB1bnNpZ25lZCBj
YWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsK
KyAgICAgICAgcmV0dXJuICptX2JicUNhbGxlZXNbY2FsbGVlSW5kZXhdLmdldCgpOworICAgIH0K
KyNlbmRpZgorCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4qIGVu
dHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXhTcGFjZSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5k
ZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOworICAgICAgICB1bnNpZ25lZCBjYWxs
ZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKKyAg
ICAgICAgcmV0dXJuICZtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1tjYWxsZWVJbmRleF07
CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gd2Fz
bVRvV2FzbUV4aXRTdHViKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV93YXNtVG9XYXNtRXhpdFN0dWJzW2Z1bmN0aW9uSW5kZXhdLmNvZGUoKTsKKyAgICB9
CisKKyAgICBib29sIGlzU2FmZVRvUnVuKE1lbW9yeU1vZGUpOworCisgICAgTWVtb3J5TW9kZSBt
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisKKyAgICB+Q2FsbGVlR3JvdXAoKTsKK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBsYW47CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0Iz
SklUKQorICAgIGZyaWVuZCBjbGFzcyBCQlFQbGFuOworICAgIGZyaWVuZCBjbGFzcyBPTUdQbGFu
OworICAgIGZyaWVuZCBjbGFzcyBPTUdGb3JPU1JFbnRyeVBsYW47CisjZW5kaWYKKworICAgIENh
bGxlZUdyb3VwKENvbnRleHQqLCBNZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYsIFJlZlB0
cjxMTEludENhbGxlZXM+KTsKKyAgICBDYWxsZWVHcm91cChNZW1vcnlNb2RlLCBjb25zdCBDYWxs
ZWVHcm91cCYpOworICAgIHZvaWQgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOworICAgIHVuc2ln
bmVkIG1fY2FsbGVlQ291bnQ7CisgICAgTWVtb3J5TW9kZSBtX21vZGU7CisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZX0IzSklUKQorICAgIEZpeGVkVmVjdG9yPFJlZlB0cjxPTUdDYWxsZWU+PiBtX29t
Z0NhbGxlZXM7CisgICAgRml4ZWRWZWN0b3I8UmVmUHRyPEJCUUNhbGxlZT4+IG1fYmJxQ2FsbGVl
czsKKyNlbmRpZgorICAgIFJlZlB0cjxMTEludENhbGxlZXM+IG1fbGxpbnRDYWxsZWVzOworICAg
IEhhc2hNYXA8dWludDMyX3QsIFJlZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+LCBEZWZh
dWx0SGFzaDx1aW50MzJfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWlu
dDMyX3Q+PiBtX2VtYmVkZGVyQ2FsbGVlczsKKyAgICBGaXhlZFZlY3RvcjxNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHM7
CisgICAgRml4ZWRWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBtX3dhc21U
b1dhc21DYWxsc2l0ZXM7CisgICAgRml4ZWRWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdh
c21FbnRyeVB0clRhZz4+IG1fd2FzbVRvV2FzbUV4aXRTdHViczsKKyAgICBSZWZQdHI8RW50cnlQ
bGFuPiBtX3BsYW47CisgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9jb21waWxhdGlvbkZpbmlzaGVk
IHsgZmFsc2UgfTsKKyAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CisgICAgTG9jayBtX2xvY2s7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNv
ZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEwY2Y0ZGY3ZjZjY2UyOTY1OTI5NWI2
M2IwYzNlYTM2YWYwNjk0Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2Fz
bUNvZGVCbG9jay5oIgotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiV2Fz
bUJCUVBsYW4uaCIKLSNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCi0jaW5jbHVkZSAiV2FzbUxMSW50
UGxhbi5oIgotI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewotCi1SZWY8Q29kZUJsb2NrPiBDb2RlQmxvY2s6OmNyZWF0ZShDb250ZXh0
KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZv
cm1hdGlvbiwgUmVmUHRyPExMSW50Q2FsbGVlcz4gbGxpbnRDYWxsZWVzKQotewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IENvZGVCbG9jayhjb250ZXh0LCBtb2RlLCBtb2R1bGVJbmZvcm1hdGlv
biwgbGxpbnRDYWxsZWVzKSk7Ci19Ci0KLVJlZjxDb2RlQmxvY2s+IENvZGVCbG9jazo6Y3JlYXRl
RnJvbUV4aXN0aW5nKE1lbW9yeU1vZGUgbW9kZSwgY29uc3QgQ29kZUJsb2NrJiBvdGhlcikKLXsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb2RlQmxvY2sobW9kZSwgb3RoZXIpKTsKLX0KLQot
Q29kZUJsb2NrOjpDb2RlQmxvY2soTWVtb3J5TW9kZSBtb2RlLCBjb25zdCBDb2RlQmxvY2smIG90
aGVyKQotICAgIDogbV9jYWxsZWVDb3VudChvdGhlci5tX2NhbGxlZUNvdW50KQotICAgICwgbV9t
b2RlKG1vZGUpCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQotICAgICwgbV9vbWdDYWxs
ZWVzKG1fY2FsbGVlQ291bnQpCi0gICAgLCBtX2JicUNhbGxlZXMobV9jYWxsZWVDb3VudCkKLSNl
bmRpZgotICAgICwgbV9sbGludENhbGxlZXMob3RoZXIubV9sbGludENhbGxlZXMpCi0gICAgLCBt
X2VtYmVkZGVyQ2FsbGVlcyhvdGhlci5tX2VtYmVkZGVyQ2FsbGVlcykKLSAgICAsIG1fd2FzbUlu
ZGlyZWN0Q2FsbEVudHJ5UG9pbnRzKG90aGVyLm1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRz
KQotICAgICwgbV93YXNtVG9XYXNtQ2FsbHNpdGVzKG90aGVyLm1fd2FzbVRvV2FzbUNhbGxzaXRl
cykKLSAgICAsIG1fd2FzbVRvV2FzbUV4aXRTdHVicyhvdGhlci5tX3dhc21Ub1dhc21FeGl0U3R1
YnMpCi17Ci0gICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwotfQotCi1Db2RlQmxvY2s6OkNv
ZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0
aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiwgUmVmUHRyPExMSW50Q2FsbGVlcz4gbGxpbnRDYWxsZWVz
KQotICAgIDogbV9jYWxsZWVDb3VudChtb2R1bGVJbmZvcm1hdGlvbi5pbnRlcm5hbEZ1bmN0aW9u
Q291bnQoKSkKLSAgICAsIG1fbW9kZShtb2RlKQotICAgICwgbV9sbGludENhbGxlZXMobGxpbnRD
YWxsZWVzKQotewotICAgIFJlZlB0cjxDb2RlQmxvY2s+IHByb3RlY3RlZFRoaXMgPSB0aGlzOwot
Ci0gICAgaWYgKE9wdGlvbnM6OnVzZVdhc21MTEludCgpKSB7Ci0gICAgICAgIG1fcGxhbiA9IGFk
b3B0UmVmKCpuZXcgTExJbnRQbGFuKGNvbnRleHQsIG1vZHVsZUluZm9ybWF0aW9uLCBtX2xsaW50
Q2FsbGVlcy0+ZGF0YSgpLCBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoUGxhbiYpIHsKLSAg
ICAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKLSAgICAgICAgICAgIGlmIChtX3Bs
YW4tPmZhaWxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtX3BsYW4t
PmVycm9yTWVzc2FnZSgpOwotICAgICAgICAgICAgICAgIHNldENvbXBpbGF0aW9uRmluaXNoZWQo
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSNpZiBFTkFCTEUo
V0VCQVNTRU1CTFlfQjNKSVQpCi0gICAgICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGV2ZW50
dWFsbHkgY29sbGVjdCB0aGUgQkJRIGNvZGUuCi0gICAgICAgICAgICBtX2JicUNhbGxlZXMgPSBG
aXhlZFZlY3RvcjxSZWZQdHI8QkJRQ2FsbGVlPj4obV9jYWxsZWVDb3VudCk7Ci0gICAgICAgICAg
ICBtX29tZ0NhbGxlZXMgPSBGaXhlZFZlY3RvcjxSZWZQdHI8T01HQ2FsbGVlPj4obV9jYWxsZWVD
b3VudCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRz
ID0gRml4ZWRWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4+KG1f
Y2FsbGVlQ291bnQpOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9j
YWxsZWVDb3VudDsgKytpKQotICAgICAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5
UG9pbnRzW2ldID0gbV9sbGludENhbGxlZXMtPmF0KGkpLT5lbnRyeXBvaW50KCk7Ci0KLSAgICAg
ICAgICAgIG1fd2FzbVRvV2FzbUV4aXRTdHVicyA9IG1fcGxhbi0+dGFrZVdhc21Ub1dhc21FeGl0
U3R1YnMoKTsKLSAgICAgICAgICAgIG1fd2FzbVRvV2FzbUNhbGxzaXRlcyA9IG1fcGxhbi0+dGFr
ZVdhc21Ub1dhc21DYWxsc2l0ZXMoKTsKLSAgICAgICAgICAgIG1fZW1iZWRkZXJDYWxsZWVzID0g
c3RhdGljX2Nhc3Q8TExJbnRQbGFuKj4obV9wbGFuLmdldCgpKS0+dGFrZUVtYmVkZGVyQ2FsbGVl
cygpOwotCi0gICAgICAgICAgICBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7Ci0gICAgICAgIH0p
KSk7Ci0gICAgfQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKLSAgICBlbHNlIHsKLSAg
ICAgICAgbV9wbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKGNvbnRleHQsIG1vZHVsZUluZm9y
bWF0aW9uLCBDb21waWxlck1vZGU6OkZ1bGxDb21waWxlLCBjcmVhdGVTaGFyZWRUYXNrPFBsYW46
OkNhbGxiYWNrVHlwZT4oW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRo
aXMpXSAoUGxhbiYpIHsKLSAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKLSAg
ICAgICAgICAgIGlmIChtX3BsYW4tPmZhaWxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgbV9lcnJv
ck1lc3NhZ2UgPSBtX3BsYW4tPmVycm9yTWVzc2FnZSgpOwotICAgICAgICAgICAgICAgIHNldENv
bXBpbGF0aW9uRmluaXNoZWQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgZXZlbnR1YWxseSBjb2xsZWN0
IHRoZSBCQlEgY29kZS4KLSAgICAgICAgICAgIG1fYmJxQ2FsbGVlcyA9IEZpeGVkVmVjdG9yPFJl
ZlB0cjxCQlFDYWxsZWU+PihtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgICAgIG1fb21nQ2FsbGVl
cyA9IEZpeGVkVmVjdG9yPFJlZlB0cjxPTUdDYWxsZWU+PihtX2NhbGxlZUNvdW50KTsKLSAgICAg
ICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzID0gRml4ZWRWZWN0b3I8TWFjcm9B
c3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4+KG1fY2FsbGVlQ291bnQpOwotCi0gICAg
ICAgICAgICBCQlFQbGFuKiBiYnFQbGFuID0gc3RhdGljX2Nhc3Q8QkJRUGxhbio+KG1fcGxhbi5n
ZXQoKSk7Ci0gICAgICAgICAgICBiYnFQbGFuLT5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVuc2ln
bmVkIGNhbGxlZUluZGV4LCBSZWZQdHI8RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiYmIGVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZSwgUmVmUHRyPEJCUUNhbGxlZT4mJiB3YXNtRW50cnlwb2ludCkg
ewotICAgICAgICAgICAgICAgIGlmIChlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyQ2FsbGVlcy5zZXQoY2FsbGVl
SW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRz
W2NhbGxlZUluZGV4XSA9IHdhc21FbnRyeXBvaW50LT5lbnRyeXBvaW50KCk7Ci0gICAgICAgICAg
ICAgICAgbV9iYnFDYWxsZWVzW2NhbGxlZUluZGV4XSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PEJC
UUNhbGxlZSo+KHdhc21FbnRyeXBvaW50LmxlYWtSZWYoKSkpOwotICAgICAgICAgICAgfSk7Ci0K
LSAgICAgICAgICAgIG1fd2FzbVRvV2FzbUV4aXRTdHVicyA9IG1fcGxhbi0+dGFrZVdhc21Ub1dh
c21FeGl0U3R1YnMoKTsKLSAgICAgICAgICAgIG1fd2FzbVRvV2FzbUNhbGxzaXRlcyA9IG1fcGxh
bi0+dGFrZVdhc21Ub1dhc21DYWxsc2l0ZXMoKTsKLQotICAgICAgICAgICAgc2V0Q29tcGlsYXRp
b25GaW5pc2hlZCgpOwotICAgICAgICB9KSkpOwotICAgIH0KLSNlbmRpZgotICAgIG1fcGxhbi0+
c2V0TW9kZShtb2RlKTsKLQotICAgIGF1dG8mIHdvcmtsaXN0ID0gV2FzbTo6ZW5zdXJlV29ya2xp
c3QoKTsKLSAgICAvLyBOb3RlLCBpbW1lZGlhdGVseSBhZnRlciB3ZSBlbnF1ZXVlIHRoZSBwbGFu
LCB0aGVyZSBpcyBhIGNoYW5jZSB0aGUgYWJvdmUgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuCi0g
ICAgd29ya2xpc3QuZW5xdWV1ZSgqbV9wbGFuLmdldCgpKTsKLX0KLQotQ29kZUJsb2NrOjp+Q29k
ZUJsb2NrKCkgeyB9Ci0KLXZvaWQgQ29kZUJsb2NrOjp3YWl0VW50aWxGaW5pc2hlZCgpCi17Ci0g
ICAgUmVmUHRyPFBsYW4+IHBsYW47Ci0gICAgewotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9s
b2NrIH07Ci0gICAgICAgIHBsYW4gPSBtX3BsYW47Ci0gICAgfQotCi0gICAgaWYgKHBsYW4pIHsK
LSAgICAgICAgYXV0byYgd29ya2xpc3QgPSBXYXNtOjplbnN1cmVXb3JrbGlzdCgpOwotICAgICAg
ICB3b3JrbGlzdC5jb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KCpwbGFuLmdldCgpKTsKLSAgICB9
Ci0gICAgLy8gZWxzZSwgaWYgd2UgZG9uJ3QgaGF2ZSBhIHBsYW4sIHdlJ3JlIGFscmVhZHkgY29t
cGlsZWQuCi19Ci0KLXZvaWQgQ29kZUJsb2NrOjpjb21waWxlQXN5bmMoQ29udGV4dCogY29udGV4
dCwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYgdGFzaykKLXsKLSAgICBSZWZQdHI8UGxhbj4g
cGxhbjsKLSAgICB7Ci0gICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKLSAgICAgICAg
cGxhbiA9IG1fcGxhbjsKLSAgICB9Ci0KLSAgICBpZiAocGxhbikgewotICAgICAgICAvLyBXZSBk
b24ndCBuZWVkIHRvIGtlZXAgYSBSZWZQdHIgb24gdGhlIFBsYW4gYmVjYXVzZSB0aGUgd29ya2xp
c3Qgd2lsbCBrZWVwCi0gICAgICAgIC8vIGEgUmVmUHRyIG9uIHRoZSBQbGFuIHVudGlsIHRoZSBw
bGFuIGZpbmlzaGVzIG5vdGlmeWluZyBhbGwgb2YgaXRzIGNhbGxiYWNrcy4KLSAgICAgICAgUmVm
UHRyPENvZGVCbG9jaz4gcHJvdGVjdGVkVGhpcyA9IHRoaXM7Ci0gICAgICAgIHBsYW4tPmFkZENv
bXBsZXRpb25UYXNrKGNvbnRleHQsIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBl
PihbdGhpcywgdGFzayA9IFdURk1vdmUodGFzayksIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHBy
b3RlY3RlZFRoaXMpXSAoUGxhbiYpIHsKLSAgICAgICAgICAgIHRhc2stPnJ1bihSZWYgeyAqdGhp
cyB9KTsKLSAgICAgICAgfSkpOwotICAgIH0gZWxzZQotICAgICAgICB0YXNrLT5ydW4oUmVmIHsg
KnRoaXMgfSk7Ci19Ci0KLWJvb2wgQ29kZUJsb2NrOjppc1NhZmVUb1J1bihNZW1vcnlNb2RlIG1l
bW9yeU1vZGUpCi17Ci0gICAgaWYgKCFydW5uYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBzd2l0Y2ggKG1fbW9kZSkgewotICAgIGNhc2UgV2FzbTo6TWVtb3J5TW9kZTo6Qm91
bmRzQ2hlY2tpbmc6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgV2FzbTo6TWVtb3J5
TW9kZTo6U2lnbmFsaW5nOgotICAgICAgICAvLyBDb2RlIGJlaW5nIGluIFNpZ25hbGluZyBtb2Rl
IG1lYW5zIHRoYXQgaXQgcGVyZm9ybXMgbm8gYm91bmRzIGNoZWNrcy4KLSAgICAgICAgLy8gSXRz
IG1lbW9yeSwgZXZlbiBpZiBlbXB0eSwgYWJzb2x1dGVseSBtdXN0IGFsc28gYmUgaW4gU2lnbmFs
aW5nIG1vZGUKLSAgICAgICAgLy8gYmVjYXVzZSB0aGUgcGFnZSBwcm90ZWN0aW9uIGRldGVjdHMg
b3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4KLSAgICAgICAgcmV0dXJuIG1lbW9yeU1vZGUgPT0gV2Fz
bTo6TWVtb3J5TW9kZTo6U2lnbmFsaW5nOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotCi12b2lkIENvZGVCbG9jazo6c2V0
Q29tcGlsYXRpb25GaW5pc2hlZCgpCi17Ci0gICAgbV9wbGFuID0gbnVsbHB0cjsKLSAgICBtX2Nv
bXBpbGF0aW9uRmluaXNoZWQuc3RvcmUodHJ1ZSk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGZhYjZhZmU5YWY1YWFjNjZlNmMyZDM0M2VhMjY4ZjQxNTc0ZjUxZDkuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNvZGVCbG9jay5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmgiCi0jaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgotI2luY2x1ZGUgIldhc21FbWJlZGRl
ci5oIgotI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENvcGllci5oPgotI2luY2x1ZGUgPHd0Zi9G
aXhlZFZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNh
ZmVSZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBKU0MgewotCi1uYW1lc3BhY2UgV2FzbSB7Ci0KLXN0cnVjdCBDb250ZXh0OwotY2xhc3Mg
RW50cnlQbGFuOwotc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwotc3RydWN0IFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw7Ci1lbnVtIGNsYXNzIE1lbW9yeU1vZGUgOiB1aW50OF90OwotICAgIAotLy8g
RklYTUU6IFJlbmFtZSB0aGlzLCBzaW5jZSBpdCdzIG5vdCBhIENvZGVCbG9jawotLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzY5NAotY2xhc3MgQ29kZUJsb2Nr
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvZGVCbG9jaz4gewotcHVibGljOgotICAg
IHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoUmVmPENvZGVCbG9jaz4mJik7Ci0gICAgdXNpbmcg
QXN5bmNDb21waWxhdGlvbkNhbGxiYWNrID0gUmVmUHRyPFdURjo6U2hhcmVkVGFzazxDYWxsYmFj
a1R5cGU+PjsKLSAgICBzdGF0aWMgUmVmPENvZGVCbG9jaz4gY3JlYXRlKENvbnRleHQqLCBNZW1v
cnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYsIFJlZlB0cjxMTEludENhbGxlZXM+KTsKLSAgICBz
dGF0aWMgUmVmPENvZGVCbG9jaz4gY3JlYXRlRnJvbUV4aXN0aW5nKE1lbW9yeU1vZGUsIGNvbnN0
IENvZGVCbG9jayYpOwotCi0gICAgdm9pZCB3YWl0VW50aWxGaW5pc2hlZCgpOwotICAgIHZvaWQg
Y29tcGlsZUFzeW5jKENvbnRleHQqLCBBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJik7Ci0KLSAg
ICBib29sIGNvbXBpbGF0aW9uRmluaXNoZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29t
cGlsYXRpb25GaW5pc2hlZC5sb2FkKCk7Ci0gICAgfQotICAgIGJvb2wgcnVubmFibGUoKSB7IHJl
dHVybiBjb21waWxhdGlvbkZpbmlzaGVkKCkgJiYgIW1fZXJyb3JNZXNzYWdlOyB9Ci0KLSAgICAv
LyBOb3RlLCB3ZSBkbyB0aGlzIGNvcHkgdG8gZW5zdXJlIGl0J3MgdGhyZWFkIHNhZmUgdG8gaGF2
ZSB0aGlzCi0gICAgLy8gY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcyBzaW11bHRhbmVvdXNs
eS4KLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghcnVu
bmFibGUoKSk7Ci0gICAgICAgIHJldHVybiBjcm9zc1RocmVhZENvcHkobV9lcnJvck1lc3NhZ2Up
OwotICAgIH0KLQotICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQoKSBjb25zdCB7IHJl
dHVybiBtX3dhc21Ub1dhc21FeGl0U3R1YnMuc2l6ZSgpOyB9Ci0KLSAgICAvLyBUaGVzZSB0d28g
Y2FsbGVlIGdldHRlcnMgYXJlIG9ubHkgdmFsaWQgb25jZSB0aGUgY2FsbGVlcyBoYXZlIGJlZW4g
cG9wdWxhdGVkLgotCi0gICAgQ2FsbGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVGcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChydW5uYWJsZSgpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25J
bmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7Ci0gICAgICAgIHVuc2lnbmVkIGNh
bGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwot
Ci0gICAgICAgIGF1dG8gY2FsbGVlID0gbV9lbWJlZGRlckNhbGxlZXMuZ2V0KGNhbGxlZUluZGV4
KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlKTsKLSAgICAgICAgcmV0dXJuICpjYWxs
ZWU7Ci0gICAgfQotCi0gICAgQ2FsbGVlJiB3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlv
bkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKHJ1bm5hYmxlKCkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbkluZGV4
U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKLSAgICAgICAgdW5zaWduZWQgY2FsbGVl
SW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5jdGlvbkltcG9ydENvdW50KCk7Ci0jaWYg
RU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQotICAgICAgICBpZiAobV9vbWdDYWxsZWVzW2NhbGxl
ZUluZGV4XSkKLSAgICAgICAgICAgIHJldHVybiAqbV9vbWdDYWxsZWVzW2NhbGxlZUluZGV4XS5n
ZXQoKTsKLSAgICAgICAgaWYgKG1fYmJxQ2FsbGVlc1tjYWxsZWVJbmRleF0pCi0gICAgICAgICAg
ICByZXR1cm4gKm1fYmJxQ2FsbGVlc1tjYWxsZWVJbmRleF0uZ2V0KCk7Ci0jZW5kaWYKLSAgICAg
ICAgcmV0dXJuIG1fbGxpbnRDYWxsZWVzLT5hdChjYWxsZWVJbmRleCkuZ2V0KCk7Ci0gICAgfQot
Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQotICAgIEJCUUNhbGxlZSYgd2FzbUJCUUNh
bGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKLSAgICAgICAg
dW5zaWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5jdGlvbkltcG9y
dENvdW50KCk7Ci0gICAgICAgIHJldHVybiAqbV9iYnFDYWxsZWVzW2NhbGxlZUluZGV4XS5nZXQo
KTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQ
dHJUYWc+KiBlbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNp
Z25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChm
dW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKLSAgICAgICAgdW5z
aWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5jdGlvbkltcG9ydENv
dW50KCk7Ci0gICAgICAgIHJldHVybiAmbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNbY2Fs
bGVlSW5kZXhdOwotICAgIH0KLQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQ
dHJUYWc+IHdhc21Ub1dhc21FeGl0U3R1Yih1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fd2FzbVRvV2FzbUV4aXRTdHVic1tmdW5jdGlvbkluZGV4XS5jb2Rl
KCk7Ci0gICAgfQotCi0gICAgYm9vbCBpc1NhZmVUb1J1bihNZW1vcnlNb2RlKTsKLQotICAgIE1l
bW9yeU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQotCi0gICAgfkNvZGVCbG9j
aygpOwotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgUGxhbjsKLSNpZiBFTkFCTEUoV0VCQVNT
RU1CTFlfQjNKSVQpCi0gICAgZnJpZW5kIGNsYXNzIEJCUVBsYW47Ci0gICAgZnJpZW5kIGNsYXNz
IE9NR1BsYW47Ci0gICAgZnJpZW5kIGNsYXNzIE9NR0Zvck9TUkVudHJ5UGxhbjsKLSNlbmRpZgot
Ci0gICAgQ29kZUJsb2NrKENvbnRleHQqLCBNZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYs
IFJlZlB0cjxMTEludENhbGxlZXM+KTsKLSAgICBDb2RlQmxvY2soTWVtb3J5TW9kZSwgY29uc3Qg
Q29kZUJsb2NrJik7Ci0gICAgdm9pZCBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7Ci0gICAgdW5z
aWduZWQgbV9jYWxsZWVDb3VudDsKLSAgICBNZW1vcnlNb2RlIG1fbW9kZTsKLSNpZiBFTkFCTEUo
V0VCQVNTRU1CTFlfQjNKSVQpCi0gICAgRml4ZWRWZWN0b3I8UmVmUHRyPE9NR0NhbGxlZT4+IG1f
b21nQ2FsbGVlczsKLSAgICBGaXhlZFZlY3RvcjxSZWZQdHI8QkJRQ2FsbGVlPj4gbV9iYnFDYWxs
ZWVzOwotI2VuZGlmCi0gICAgUmVmUHRyPExMSW50Q2FsbGVlcz4gbV9sbGludENhbGxlZXM7Ci0g
ICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4sIERl
ZmF1bHRIYXNoPHVpbnQzMl90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1
aW50MzJfdD4+IG1fZW1iZWRkZXJDYWxsZWVzOwotICAgIEZpeGVkVmVjdG9yPE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50
czsKLSAgICBGaXhlZFZlY3RvcjxWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+IG1fd2Fz
bVRvV2FzbUNhbGxzaXRlczsKLSAgICBGaXhlZFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOwotICAgIFJlZlB0cjxFbnRy
eVBsYW4+IG1fcGxhbjsKLSAgICBzdGQ6OmF0b21pYzxib29sPiBtX2NvbXBpbGF0aW9uRmluaXNo
ZWQgeyBmYWxzZSB9OwotICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKLSAgICBMb2NrIG1fbG9j
azsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCi0KLSNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNw
cAppbmRleCAxODMxZjY1MGNlNTYwOTYxOTU1NGQ0ZmI1ZWJiNGZmMWMzZjk4YjNiLi5hZWY2MjE5
MDJlMTFmM2NkZGU3NjJhZWNhNTdiOGRkODRiZjAxY2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKQEAgLTI1Niw4ICsyNTYsOCBAQCB2b2lkIEluc3Rh
bmNlOjppbml0RWxlbWVudFNlZ21lbnQodWludDMyX3QgdGFibGVJbmRleCwgY29uc3QgRWxlbWVu
dCYgc2VnbWVudCwgdQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAg
ICBDYWxsZWUmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jaygpLT5lbWJlZGRl
ckVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwot
ICAgICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlw
b2ludExvYWRMb2NhdGlvbiA9IGNvZGVCbG9jaygpLT5lbnRyeXBvaW50TG9hZExvY2F0aW9uRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgQ2FsbGVlJiBlbWJl
ZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBjYWxsZWVHcm91cCgpLT5lbWJlZGRlckVudHJ5cG9pbnRD
YWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOworICAgICAgICBXYXNt
VG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2Nh
dGlvbiA9IGNhbGxlZUdyb3VwKCktPmVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgICAg
ICAvLyBGSVhNRTogU2F5IHdlIGV4cG9ydCBsb2NhbCBmdW5jdGlvbiAiZm9vIiBhdCBmdW5jdGlv
biBpbmRleCAwLgogICAgICAgICAvLyBXaGF0IGlmIHdlIGFsc28gc2V0IGl0IHRvIHRoZSB0YWJs
ZSBhbiBFbGVtZW50IHcvIGluZGV4IDAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtSW5zdGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21J
bnN0YW5jZS5oCmluZGV4IDAzNGFhOTI3OTYwNzlkMmU2ZGExZTJlZjQ3NTAzNDUwNWJkYzE4N2Iu
Ljc0MGU3OWM1MTUwNmVhNzc5YzlkODg1Y2RhYTBiNzA2MDg1ZTY2ZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCkBAIC03MSw3ICs3MSw3IEBAIGNsYXNzIElu
c3RhbmNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEluc3RhbmNlPiwgcHVibGljIENh
bk1ha2VXZWFrUHRyPEluCiAgICAgV2FzbTo6Q29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGV4dDsgfQogCiAgICAgTW9kdWxlJiBtb2R1bGUoKSBjb25zdCB7IHJldHVybiBt
X21vZHVsZS5nZXQoKTsgfQotICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1
cm4gbW9kdWxlKCkuY29kZUJsb2NrRm9yKG1lbW9yeSgpLT5tb2RlKCkpOyB9CisgICAgQ2FsbGVl
R3JvdXAqIGNhbGxlZUdyb3VwKCkgY29uc3QgeyByZXR1cm4gbW9kdWxlKCkuY2FsbGVlR3JvdXBG
b3IobWVtb3J5KCktPm1vZGUoKSk7IH0KICAgICBNZW1vcnkqIG1lbW9yeSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWVtb3J5LmdldCgpOyB9CiAgICAgVGFibGUqIHRhYmxlKHVuc2lnbmVkKTsKICAgICB2
b2lkIHNldFRhYmxlKHVuc2lnbmVkLCBSZWY8VGFibGU+JiYpOwpAQCAtODEsNyArODEsNyBAQCBj
bGFzcyBJbnN0YW5jZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJbnN0YW5jZT4sIHB1
YmxpYyBDYW5NYWtlV2Vha1B0cjxJbgogCiAgICAgYm9vbCBpc0ltcG9ydEZ1bmN0aW9uKHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gZnVuY3Rpb25J
bmRleCA8IGNvZGVCbG9jaygpLT5mdW5jdGlvbkltcG9ydENvdW50KCk7CisgICAgICAgIHJldHVy
biBmdW5jdGlvbkluZGV4IDwgY2FsbGVlR3JvdXAoKS0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpOwog
ICAgIH0KIAogICAgIHZvaWQgdGFibGVJbml0KHVpbnQzMl90IGRzdE9mZnNldCwgdWludDMyX3Qg
c3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRJbmRleCwgdWludDMy
X3QgdGFibGVJbmRleCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTWFjaGluZVRocmVhZHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNo
aW5lVGhyZWFkcy5oCmluZGV4IDZiYzhkN2E2ODNiOTRiOTAxZTk0NDRlZTNkZmVjYzhkNGFlNTFi
ZTcuLjY3OGYxMTc1Y2Q5NTdjMWUzMjNhMjgzNDg1ZmU3OGUwODVkNmJlYjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5oCkBAIC0yNyw3ICsy
Nyw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJXYXNtQ29kZUJs
b2NrLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxlZUdyb3VwLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9y
eS5oIgogI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCmluZGV4IGQzOGRiZTc0NDlk
OGU4NTU3NjVhMDM1N2Q3OGU5NDlhODVkYjAzNWYuLjUzZWI5OGJkOWMzNDFlNjkwYWQ4MjdiZjg2
YWNiYjAxYThjYzRmOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUu
Y3BwCkBAIC03OCw0OCArNzgsNDggQEAgdm9pZCBNb2R1bGU6OnZhbGlkYXRlQXN5bmMoQ29udGV4
dCogY29udGV4dCwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBNb2R1bGU6OkEKICAgICBXYXNt
OjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7CiB9CiAKLVJlZjxDb2Rl
QmxvY2s+IE1vZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2soQ29udGV4dCogY29udGV4dCwgTWVt
b3J5TW9kZSBtb2RlKQorUmVmPENhbGxlZUdyb3VwPiBNb2R1bGU6OmdldE9yQ3JlYXRlQ2FsbGVl
R3JvdXAoQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlKQogewotICAgIFJlZlB0cjxD
b2RlQmxvY2s+IGNvZGVCbG9jazsKKyAgICBSZWZQdHI8Q2FsbGVlR3JvdXA+IGNhbGxlZUdyb3Vw
OwogICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKLSAgICBjb2RlQmxvY2sgPSBtX2NvZGVC
bG9ja3Nbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSldOworICAgIGNhbGxlZUdyb3VwID0gbV9j
YWxsZWVHcm91cHNbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSldOwogICAgIC8vIElmIGEgcHJl
dmlvdXMgYXR0ZW1wdCBhdCBhIGNvbXBpbGUgZXJyb3JlZCBvdXQsIGxldCdzIHRyeSBhZ2Fpbi4K
ICAgICAvLyBDb21waWxhdGlvbnMgZnJvbSB2YWxpZCBtb2R1bGVzIGNhbiBmYWlsIGJlY2F1c2Ug
T09NIGFuZCBjYW5jZWxsYXRpb24uCiAgICAgLy8gSXQncyB3b3J0aCByZXRyeWluZy4KICAgICAv
LyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byBiYWNrIG9mZiByZXRyeWluZyBhdCBzb21lIHBvaW50
OgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA2MDcK
LSAgICBpZiAoIWNvZGVCbG9jayB8fCAoY29kZUJsb2NrLT5jb21waWxhdGlvbkZpbmlzaGVkKCkg
JiYgIWNvZGVCbG9jay0+cnVubmFibGUoKSkpIHsKKyAgICBpZiAoIWNhbGxlZUdyb3VwIHx8IChj
YWxsZWVHcm91cC0+Y29tcGlsYXRpb25GaW5pc2hlZCgpICYmICFjYWxsZWVHcm91cC0+cnVubmFi
bGUoKSkpIHsKICAgICAgICAgUmVmUHRyPExMSW50Q2FsbGVlcz4gbGxpbnRDYWxsZWVzID0gbnVs
bHB0cjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZVdhc21MTEludCgpKQogICAgICAgICAgICAg
bGxpbnRDYWxsZWVzID0gbV9sbGludENhbGxlZXM7Ci0gICAgICAgIGNvZGVCbG9jayA9IENvZGVC
bG9jazo6Y3JlYXRlKGNvbnRleHQsIG1vZGUsIGNvbnN0X2Nhc3Q8TW9kdWxlSW5mb3JtYXRpb24m
Pihtb2R1bGVJbmZvcm1hdGlvbigpKSwgbGxpbnRDYWxsZWVzKTsKLSAgICAgICAgbV9jb2RlQmxv
Y2tzW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpXSA9IGNvZGVCbG9jazsKKyAgICAgICAgY2Fs
bGVlR3JvdXAgPSBDYWxsZWVHcm91cDo6Y3JlYXRlKGNvbnRleHQsIG1vZGUsIGNvbnN0X2Nhc3Q8
TW9kdWxlSW5mb3JtYXRpb24mPihtb2R1bGVJbmZvcm1hdGlvbigpKSwgbGxpbnRDYWxsZWVzKTsK
KyAgICAgICAgbV9jYWxsZWVHcm91cHNbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSldID0gY2Fs
bGVlR3JvdXA7CiAgICAgfQotICAgIHJldHVybiBjb2RlQmxvY2sucmVsZWFzZU5vbk51bGwoKTsK
KyAgICByZXR1cm4gY2FsbGVlR3JvdXAucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotUmVmPENvZGVC
bG9jaz4gTW9kdWxlOjpjb21waWxlU3luYyhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1v
ZGUpCitSZWY8Q2FsbGVlR3JvdXA+IE1vZHVsZTo6Y29tcGlsZVN5bmMoQ29udGV4dCogY29udGV4
dCwgTWVtb3J5TW9kZSBtb2RlKQogewotICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdl
dE9yQ3JlYXRlQ29kZUJsb2NrKGNvbnRleHQsIG1vZGUpOwotICAgIGNvZGVCbG9jay0+d2FpdFVu
dGlsRmluaXNoZWQoKTsKLSAgICByZXR1cm4gY29kZUJsb2NrOworICAgIFJlZjxDYWxsZWVHcm91
cD4gY2FsbGVlR3JvdXAgPSBnZXRPckNyZWF0ZUNhbGxlZUdyb3VwKGNvbnRleHQsIG1vZGUpOwor
ICAgIGNhbGxlZUdyb3VwLT53YWl0VW50aWxGaW5pc2hlZCgpOworICAgIHJldHVybiBjYWxsZWVH
cm91cDsKIH0KIAotdm9pZCBNb2R1bGU6OmNvbXBpbGVBc3luYyhDb250ZXh0KiBjb250ZXh0LCBN
ZW1vcnlNb2RlIG1vZGUsIENvZGVCbG9jazo6QXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYgdGFz
aykKK3ZvaWQgTW9kdWxlOjpjb21waWxlQXN5bmMoQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9k
ZSBtb2RlLCBDYWxsZWVHcm91cDo6QXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYgdGFzaykKIHsK
LSAgICBSZWY8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBnZXRPckNyZWF0ZUNvZGVCbG9jayhjb250
ZXh0LCBtb2RlKTsKLSAgICBjb2RlQmxvY2stPmNvbXBpbGVBc3luYyhjb250ZXh0LCBXVEZNb3Zl
KHRhc2spKTsKKyAgICBSZWY8Q2FsbGVlR3JvdXA+IGNhbGxlZUdyb3VwID0gZ2V0T3JDcmVhdGVD
YWxsZWVHcm91cChjb250ZXh0LCBtb2RlKTsKKyAgICBjYWxsZWVHcm91cC0+Y29tcGlsZUFzeW5j
KGNvbnRleHQsIFdURk1vdmUodGFzaykpOwogfQogCi12b2lkIE1vZHVsZTo6Y29weUluaXRpYWxD
b2RlQmxvY2tUb0FsbE1lbW9yeU1vZGVzKE1lbW9yeU1vZGUgaW5pdGlhbE1vZGUpCit2b2lkIE1v
ZHVsZTo6Y29weUluaXRpYWxDYWxsZWVHcm91cFRvQWxsTWVtb3J5TW9kZXMoTWVtb3J5TW9kZSBp
bml0aWFsTW9kZSkKIHsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHVpbnQ4
X3Q+KGluaXRpYWxNb2RlKV0pOwotICAgIGNvbnN0IENvZGVCbG9jayYgaW5pdGlhbEJsb2NrID0g
Km1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDx1aW50OF90Pihpbml0aWFsTW9kZSldOworICAgIEFT
U0VSVChtX2NhbGxlZUdyb3Vwc1tzdGF0aWNfY2FzdDx1aW50OF90Pihpbml0aWFsTW9kZSldKTsK
KyAgICBjb25zdCBDYWxsZWVHcm91cCYgaW5pdGlhbEJsb2NrID0gKm1fY2FsbGVlR3JvdXBzW3N0
YXRpY19jYXN0PHVpbnQ4X3Q+KGluaXRpYWxNb2RlKV07CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IFdhc206Ok51bWJlck9mTWVtb3J5TW9kZXM7IGkrKykgewogICAgICAgICBpZiAoaSA9
PSBzdGF0aWNfY2FzdDx1aW50OF90Pihpbml0aWFsTW9kZSkpCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgUmVmPENvZGVCbG9jaz4gbmV3QmxvY2sgPSBDb2RlQmxvY2s6OmNyZWF0ZUZy
b21FeGlzdGluZyhzdGF0aWNfY2FzdDxNZW1vcnlNb2RlPihpKSwgaW5pdGlhbEJsb2NrKTsKLSAg
ICAgICAgbV9jb2RlQmxvY2tzW2ldID0gV1RGTW92ZShuZXdCbG9jayk7CisgICAgICAgIFJlZjxD
YWxsZWVHcm91cD4gbmV3QmxvY2sgPSBDYWxsZWVHcm91cDo6Y3JlYXRlRnJvbUV4aXN0aW5nKHN0
YXRpY19jYXN0PE1lbW9yeU1vZGU+KGkpLCBpbml0aWFsQmxvY2spOworICAgICAgICBtX2NhbGxl
ZUdyb3Vwc1tpXSA9IFdURk1vdmUobmV3QmxvY2spOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oCmluZGV4IDBjMTU3YzZlNTI3MGQyNGU2N2Q0YTM2ODIy
NTU2MzM2MmY5MjBiZDUuLjk3NjhkM2YzYjQ1OGZmMTJmY2M5NjE5NzkzOTEwZTdjNmViOGZhZTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKQEAgLTI3LDcgKzI3LDcg
QEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIldhc21Db2RlQmxvY2su
aCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlR3JvdXAuaCIKICNpbmNsdWRlICJXYXNtRW1iZWRkZXIu
aCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgpAQCAtNTks
MjEgKzU5LDIxIEBAIGNsYXNzIE1vZHVsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxN
b2R1bGU+IHsKICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleEZyb21GdW5j
dGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25zdDsKICAgICBj
b25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpOyB9CiAKLSAgICBSZWY8Q29kZUJsb2Nr
PiBjb21waWxlU3luYyhDb250ZXh0KiwgTWVtb3J5TW9kZSk7Ci0gICAgdm9pZCBjb21waWxlQXN5
bmMoQ29udGV4dCosIE1lbW9yeU1vZGUsIENvZGVCbG9jazo6QXN5bmNDb21waWxhdGlvbkNhbGxi
YWNrJiYpOworICAgIFJlZjxDYWxsZWVHcm91cD4gY29tcGlsZVN5bmMoQ29udGV4dCosIE1lbW9y
eU1vZGUpOworICAgIHZvaWQgY29tcGlsZUFzeW5jKENvbnRleHQqLCBNZW1vcnlNb2RlLCBDYWxs
ZWVHcm91cDo6QXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYpOwogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgfk1vZHVsZSgpOwogCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3IoTWVtb3J5TW9k
ZSBtb2RlKSB7IHJldHVybiBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSld
LmdldCgpOyB9CisgICAgQ2FsbGVlR3JvdXAqIGNhbGxlZUdyb3VwRm9yKE1lbW9yeU1vZGUgbW9k
ZSkgeyByZXR1cm4gbV9jYWxsZWVHcm91cHNbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSldLmdl
dCgpOyB9CiAKLSAgICB2b2lkIGNvcHlJbml0aWFsQ29kZUJsb2NrVG9BbGxNZW1vcnlNb2RlcyhN
ZW1vcnlNb2RlKTsKKyAgICB2b2lkIGNvcHlJbml0aWFsQ2FsbGVlR3JvdXBUb0FsbE1lbW9yeU1v
ZGVzKE1lbW9yeU1vZGUpOwogCiBwcml2YXRlOgotICAgIFJlZjxDb2RlQmxvY2s+IGdldE9yQ3Jl
YXRlQ29kZUJsb2NrKENvbnRleHQqLCBNZW1vcnlNb2RlKTsKKyAgICBSZWY8Q2FsbGVlR3JvdXA+
IGdldE9yQ3JlYXRlQ2FsbGVlR3JvdXAoQ29udGV4dCosIE1lbW9yeU1vZGUpOwogCiAgICAgTW9k
dWxlKExMSW50UGxhbiYpOwogICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZv
cm1hdGlvbjsKLSAgICBSZWZQdHI8Q29kZUJsb2NrPiBtX2NvZGVCbG9ja3NbV2FzbTo6TnVtYmVy
T2ZNZW1vcnlNb2Rlc107CisgICAgUmVmUHRyPENhbGxlZUdyb3VwPiBtX2NhbGxlZUdyb3Vwc1tX
YXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVzXTsKICAgICBSZWZQdHI8TExJbnRDYWxsZWVzPiBtX2xs
aW50Q2FsbGVlczsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUQ29tcGlsYXRpb25QdHJU
YWc+IG1fbGxpbnRFbnRyeVRodW5rczsKICAgICBMb2NrIG1fbG9jazsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKaW5kZXgg
NGY5ZTZlOWVmMGIwMmZiZDkxODYxYzVkZmNlYzVjYTQ2OGM1ZjkyNy4uYzZiOTViNzRjOTFhMzU1
NzY2OTQwOTY5MGQzZDY4YjljMjFiN2Y2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKQEAgLTQ4LDIyICs0OCwyMiBA
QCBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogT01HRm9yT1NSRW50cnlQ
bGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBt
b2R1bGUsIFJlZjxDYWxsZWU+JiYgY2FsbGVlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50
MzJfdCBsb29wSW5kZXgsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGxldGlvblRhc2smJiB0YXNrKQog
ICAgIDogQmFzZShjb250ZXh0LCBjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxl
LT5tb2R1bGVJbmZvcm1hdGlvbigpKSwgV1RGTW92ZSh0YXNrKSkKICAgICAsIG1fbW9kdWxlKFdU
Rk1vdmUobW9kdWxlKSkKLSAgICAsIG1fY29kZUJsb2NrKCptX21vZHVsZS0+Y29kZUJsb2NrRm9y
KG1vZGUpKQorICAgICwgbV9jYWxsZWVHcm91cCgqbV9tb2R1bGUtPmNhbGxlZUdyb3VwRm9yKG1v
ZGUpKQogICAgICwgbV9jYWxsZWUoV1RGTW92ZShjYWxsZWUpKQogICAgICwgbV9mdW5jdGlvbklu
ZGV4KGZ1bmN0aW9uSW5kZXgpCiAgICAgLCBtX2xvb3BJbmRleChsb29wSW5kZXgpCiB7CiAgICAg
QVNTRVJUKE9wdGlvbnM6OnVzZU9NR0pJVCgpKTsKICAgICBzZXRNb2RlKG1vZGUpOwotICAgIEFT
U0VSVChtX2NvZGVCbG9jay0+cnVubmFibGUoKSk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0
cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobV9tb2RlKSk7CisgICAgQVNTRVJUKG1fY2Fs
bGVlR3JvdXAtPnJ1bm5hYmxlKCkpOworICAgIEFTU0VSVChtX2NhbGxlZUdyb3VwLnB0cigpID09
IG1fbW9kdWxlLT5jYWxsZWVHcm91cEZvcihtX21vZGUpKTsKICAgICBkYXRhTG9nTG5JZihXYXNt
T01HRm9yT1NSRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBPTUdGb3JPU1JF
bnRyeSBwbGFuIGZvciAiLCBmdW5jdGlvbkluZGV4LCAiIG9mIG1vZHVsZTogIiwgUmF3UG9pbnRl
cigmbV9tb2R1bGUuZ2V0KCkpKTsKIH0KIAogdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46Ondvcmso
Q29tcGlsYXRpb25FZmZvcnQpCiB7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5ydW5uYWJsZSgp
KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zv
cihtb2RlKCkpKTsKKyAgICBBU1NFUlQobV9jYWxsZWVHcm91cC0+cnVubmFibGUoKSk7CisgICAg
QVNTRVJUKG1fY2FsbGVlR3JvdXAucHRyKCkgPT0gbV9tb2R1bGUtPmNhbGxlZUdyb3VwRm9yKG1v
ZGUoKSkpOwogICAgIGNvbnN0IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24gPSBtX21vZHVsZUluZm9y
bWF0aW9uLT5mdW5jdGlvbnNbbV9mdW5jdGlvbkluZGV4XTsKIAogICAgIGNvbnN0IHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fZnVuY3Rpb25JbmRleCArIG1fbW9kdWxlLT5tb2R1bGVJ
bmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKQEAgLTEwMSwxOCArMTAxLDE4IEBA
IHZvaWQgT01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogCiAgICAg
b21nRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShpbnRlcm5hbEZ1bmN0
aW9uLT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOwogCi0gICAgQVNTRVJUKG1fY29k
ZUJsb2NrLnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSgpKSk7CisgICAgQVNT
RVJUKG1fY2FsbGVlR3JvdXAucHRyKCkgPT0gbV9tb2R1bGUtPmNhbGxlZUdyb3VwRm9yKG1vZGUo
KSkpOwogICAgIFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gY2FsbGVlID0gT01HRm9yT1NSRW50
cnlDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3Bh
Y2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNw
YWNlKSwgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9sb29wSW5kZXgsIFdURk1vdmUodW5s
aW5rZWRDYWxscyksIFdURk1vdmUoaW50ZXJuYWxGdW5jdGlvbi0+c3RhY2ttYXBzKSwgV1RGTW92
ZShpbnRlcm5hbEZ1bmN0aW9uLT5leGNlcHRpb25IYW5kbGVycyksIFdURk1vdmUoZXhjZXB0aW9u
SGFuZGxlckxvY2F0aW9ucykpOwogICAgIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hQb2ludGVyKGludGVybmFsRnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0
czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKIAotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9j
b2RlQmxvY2stPm1fbG9jayB9OworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9jYWxsZWVHcm91
cC0+bV9sb2NrIH07CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2Fz
bUNhbGxzaXRlcygpKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVu
dHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRl
eFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3Vu
dCgpKQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+bV93YXNtVG9X
YXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7CisgICAgICAgICAg
ICAgICAgZW50cnlwb2ludCA9IG1fY2FsbGVlR3JvdXAtPm1fd2FzbVRvV2FzbUV4aXRTdHVic1tj
YWxsLmZ1bmN0aW9uSW5kZXhTcGFjZV0uY29kZSgpOwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5lbnRyeXBvaW50
KCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOworICAgICAgICAgICAgICAgIGVudHJ5cG9p
bnQgPSBtX2NhbGxlZUdyb3VwLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4
U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRhZ2dlZDxXYXNt
RW50cnlQdHJUYWc+KCk7CiAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVh
ckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRh
Zz4oZW50cnlwb2ludCkpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmgKaW5kZXggMmM1MzM2NDZmOWM1M2UyNWUz
YzdiMzNhNTYyMDZhZGZjYTViY2UwMi4uZmMyYmY0ZWYwZTRmNjY1NjY2YmM5ZmRiYWM4MGYyZWZh
ZjMwMWI5YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zv
ck9TUkVudHJ5UGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdG
b3JPU1JFbnRyeVBsYW4uaApAQCAtNjIsNyArNjIsNyBAQCBjbGFzcyBPTUdGb3JPU1JFbnRyeVBs
YW4gZmluYWwgOiBwdWJsaWMgUGxhbiB7CiAgICAgfQogCiAgICAgUmVmPE1vZHVsZT4gbV9tb2R1
bGU7Ci0gICAgUmVmPENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CisgICAgUmVmPENhbGxlZUdyb3Vw
PiBtX2NhbGxlZUdyb3VwOwogICAgIFJlZjxDYWxsZWU+IG1fY2FsbGVlOwogICAgIGJvb2wgbV9j
b21wbGV0ZWQgeyBmYWxzZSB9OwogICAgIHVpbnQzMl90IG1fZnVuY3Rpb25JbmRleDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAppbmRleCA1NzNmYWZhNDc4Mjdm
N2U0YWVhY2JkZjFjM2Q3MjMyMjY0ZTg3NjQ4Li5lMzczNGQyODM4MDZhZTExYmRlNDhlOTViOTI1
OWUzYzQ1MTJlMzg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T01HUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4u
Y3BwCkBAIC00OCwyMCArNDgsMjAgQEAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBm
YWxzZTsKIE9NR1BsYW46Ok9NR1BsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBt
b2R1bGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGxldGlv
blRhc2smJiB0YXNrKQogICAgIDogQmFzZShjb250ZXh0LCBjb25zdF9jYXN0PE1vZHVsZUluZm9y
bWF0aW9uJj4obW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpKSwgV1RGTW92ZSh0YXNrKSkKICAg
ICAsIG1fbW9kdWxlKFdURk1vdmUobW9kdWxlKSkKLSAgICAsIG1fY29kZUJsb2NrKCptX21vZHVs
ZS0+Y29kZUJsb2NrRm9yKG1vZGUpKQorICAgICwgbV9jYWxsZWVHcm91cCgqbV9tb2R1bGUtPmNh
bGxlZUdyb3VwRm9yKG1vZGUpKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgp
CiB7CiAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZU9NR0pJVCgpKTsKICAgICBzZXRNb2RlKG1vZGUp
OwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cnVubmFibGUoKSk7Ci0gICAgQVNTRVJUKG1fY29k
ZUJsb2NrLnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobV9tb2RlKSk7CisgICAgQVNT
RVJUKG1fY2FsbGVlR3JvdXAtPnJ1bm5hYmxlKCkpOworICAgIEFTU0VSVChtX2NhbGxlZUdyb3Vw
LnB0cigpID09IG1fbW9kdWxlLT5jYWxsZWVHcm91cEZvcihtX21vZGUpKTsKICAgICBkYXRhTG9n
TG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiU3RhcnRpbmcgT01HIHBsYW4gZm9y
ICIsIGZ1bmN0aW9uSW5kZXgsICIgb2YgbW9kdWxlOiAiLCBSYXdQb2ludGVyKCZtX21vZHVsZS5n
ZXQoKSkpOwogfQogCiB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiB7Ci0g
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5ydW5uYWJsZSgpKTsKLSAgICBBU1NFUlQobV9jb2RlQmxv
Y2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKKyAgICBBU1NFUlQo
bV9jYWxsZWVHcm91cC0+cnVubmFibGUoKSk7CisgICAgQVNTRVJUKG1fY2FsbGVlR3JvdXAucHRy
KCkgPT0gbV9tb2R1bGUtPmNhbGxlZUdyb3VwRm9yKG1vZGUoKSkpOwogICAgIGNvbnN0IEZ1bmN0
aW9uRGF0YSYgZnVuY3Rpb24gPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnNbbV9mdW5j
dGlvbkluZGV4XTsKIAogICAgIGNvbnN0IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1f
ZnVuY3Rpb25JbmRleCArIG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0
aW9uQ291bnQoKTsKQEAgLTEwMywxMCArMTAzLDEwIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21w
aWxhdGlvbkVmZm9ydCkKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJU
YWc+IGVudHJ5cG9pbnQ7CiAgICAgewotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkg
PT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKKyAgICAgICAgQVNTRVJUKG1fY2Fs
bGVlR3JvdXAucHRyKCkgPT0gbV9tb2R1bGUtPmNhbGxlZUdyb3VwRm9yKG1vZGUoKSkpOwogICAg
ICAgICBSZWY8T01HQ2FsbGVlPiBjYWxsZWUgPSBPTUdDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG9t
Z0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5h
bWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxz
KSwgV1RGTW92ZShpbnRlcm5hbEZ1bmN0aW9uLT5zdGFja21hcHMpLCBXVEZNb3ZlKGludGVybmFs
RnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwgV1RGTW92ZShleGNlcHRpb25IYW5kbGVyTG9j
YXRpb25zKSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihpbnRlcm5h
bEZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVl
LnB0cigpKSk7Ci0gICAgICAgIEFTU0VSVCghbV9jb2RlQmxvY2stPm1fb21nQ2FsbGVlc1ttX2Z1
bmN0aW9uSW5kZXhdKTsKKyAgICAgICAgQVNTRVJUKCFtX2NhbGxlZUdyb3VwLT5tX29tZ0NhbGxl
ZXNbbV9mdW5jdGlvbkluZGV4XSk7CiAgICAgICAgIGVudHJ5cG9pbnQgPSBjYWxsZWUtPmVudHJ5
cG9pbnQoKTsKIAogICAgICAgICBpZiAoY29udGV4dC5wY1RvQ29kZU9yaWdpbk1hcCkKQEAgLTEx
NiwzMCArMTE2LDMwIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAg
ICAgICAgLy8gYWx3YXlzIGNhbGwgdGhlIGZhc3Rlc3QgY29kZS4gQW55IGZ1bmN0aW9uIGxpbmtl
ZCBhZnRlciB1cyB3aWxsIHNlZSBvdXIgbmV3IGNvZGUgYW5kIHRoZSBuZXcgY2FsbHNpdGVzLCB3
aGljaCB0aGV5CiAgICAgICAgIC8vIHdpbGwgdXBkYXRlLiBJdCdzIGFsc28gb2sgaWYgdGhleSBw
dWJsaXNoIHRoZWlyIGNvZGUgYmVmb3JlIHdlIHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNoZXMg
YmVjYXVzZSBhZnRlciB3ZSByZWxlYXNlCiAgICAgICAgIC8vIHRoZSBsb2NrIG91ciBjb2RlIGlz
IHJlYWR5IHRvIGJlIHB1Ymxpc2hlZCB0b28uCi0gICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2Nv
ZGVCbG9jay0+bV9sb2NrIH07CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2NhbGxlZUdyb3Vw
LT5tX2xvY2sgfTsKIAotICAgICAgICBtX2NvZGVCbG9jay0+bV9vbWdDYWxsZWVzW21fZnVuY3Rp
b25JbmRleF0gPSBjYWxsZWUuY29weVJlZigpOworICAgICAgICBtX2NhbGxlZUdyb3VwLT5tX29t
Z0NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSA9IGNhbGxlZS5jb3B5UmVmKCk7CiAKICAgICAgICAg
Zm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7
CiAgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPCBtX21vZHVsZS0+bW9k
dWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCi0gICAgICAgICAgICAgICAg
ZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1YnNbY2FsbC5mdW5j
dGlvbkluZGV4U3BhY2VdLmNvZGUoKTsKKyAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9j
YWxsZWVHcm91cC0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNl
XS5jb2RlKCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9
IG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
Y2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRhZ2dlZDxXYXNtRW50cnlQ
dHJUYWc+KCk7CisgICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY2FsbGVlR3JvdXAtPndh
c21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5k
ZXhTcGFjZSkuZW50cnlwb2ludCgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsKIAogICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlv
biwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7CiAgICAg
ICAgIH0KIAotICAgICAgICBQbGFuOjp1cGRhdGVDYWxsU2l0ZXNUb0NhbGxVcyhtX2NvZGVCbG9j
aywgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSwgbV9mdW5j
dGlvbkluZGV4LCBmdW5jdGlvbkluZGV4U3BhY2UpOworICAgICAgICBQbGFuOjp1cGRhdGVDYWxs
U2l0ZXNUb0NhbGxVcyhtX2NhbGxlZUdyb3VwLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQ
dHJUYWc+KGVudHJ5cG9pbnQpLCBtX2Z1bmN0aW9uSW5kZXgsIGZ1bmN0aW9uSW5kZXhTcGFjZSk7
CiAKICAgICAgICAgewotICAgICAgICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gbV9j
b2RlQmxvY2stPm1fYmJxQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpKSB7CisgICAgICAg
ICAgICBpZiAoQkJRQ2FsbGVlKiBiYnFDYWxsZWUgPSBtX2NhbGxlZUdyb3VwLT5tX2JicUNhbGxl
ZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQoKSkgewogICAgICAgICAgICAgICAgIExvY2tlciBsb2Nr
ZXIgeyBiYnFDYWxsZWUtPnRpZXJVcENvdW50KCktPmdldExvY2soKSB9OwogICAgICAgICAgICAg
ICAgIGJicUNhbGxlZS0+c2V0UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYoKSk7CiAgICAgICAg
ICAgICAgICAgYmJxQ2FsbGVlLT50aWVyVXBDb3VudCgpLT5tX2NvbXBpbGF0aW9uU3RhdHVzRm9y
T01HID0gVGllclVwQ291bnQ6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXMpIHsKLSAg
ICAgICAgICAgICAgICBMTEludENhbGxlZSYgbGxpbnRDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9s
bGludENhbGxlZXMtPmF0KG1fZnVuY3Rpb25JbmRleCkuZ2V0KCk7CisgICAgICAgICAgICBpZiAo
bV9jYWxsZWVHcm91cC0+bV9sbGludENhbGxlZXMpIHsKKyAgICAgICAgICAgICAgICBMTEludENh
bGxlZSYgbGxpbnRDYWxsZWUgPSBtX2NhbGxlZUdyb3VwLT5tX2xsaW50Q2FsbGVlcy0+YXQobV9m
dW5jdGlvbkluZGV4KS5nZXQoKTsKICAgICAgICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbGxp
bnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fbG9jayB9OwogICAgICAgICAgICAgICAgIGxsaW50
Q2FsbGVlLnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCksIG1vZGUoKSk7CiAgICAgICAg
ICAgICAgICAgbGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fY29tcGlsYXRpb25TdGF0dXMg
PSBMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oCmluZGV4IDBiMGQ5ZTQ3NzdmNjU1Njc5
YzZlZThiYTNjOTYxOGMyYmFjMWU5YmEuLmNjZGNiNDA3MzYwZGM1NTBiMDE3NzIyM2Q3YWQyZmVj
ZjBhMTdhNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQ
bGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaApAQCAt
NjAsNyArNjAsNyBAQCBjbGFzcyBPTUdQbGFuIGZpbmFsIDogcHVibGljIFBsYW4gewogICAgIH0K
ICAgICAKICAgICBSZWY8TW9kdWxlPiBtX21vZHVsZTsKLSAgICBSZWY8Q29kZUJsb2NrPiBtX2Nv
ZGVCbG9jazsKKyAgICBSZWY8Q2FsbGVlR3JvdXA+IG1fY2FsbGVlR3JvdXA7CiAgICAgYm9vbCBt
X2NvbXBsZXRlZCB7IGZhbHNlIH07CiAgICAgdWludDMyX3QgbV9mdW5jdGlvbkluZGV4OwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAppbmRleCAz
Mjk1MzhjNWQ4ZjQ5N2U4ZTE5MzRlMWMxNTZhMTljODcxNzNjNjViLi5iOGI0NWQ1OTY5MGE5OGZm
YTc4MWQxZDBlMTFlMzc2NzA3YzZjZDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9wZXJhdGlvbnMuY3BwCkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyBib29sIHNob3Vs
ZFRyaWdnZXJPTUdDb21waWxlKFRpZXJVcENvdW50JiB0aWVyVXAsIE9NR0NhbGxlZSogcmVwbGFj
ZW1lbnQsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIHRyaWdnZXJPTUdSZXBs
YWNlbWVudENvbXBpbGUoVGllclVwQ291bnQmIHRpZXJVcCwgT01HQ2FsbGVlKiByZXBsYWNlbWVu
dCwgSW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpDb2RlQmxvY2smIGNvZGVCbG9jaywgdWludDMy
X3QgZnVuY3Rpb25JbmRleCkKK3N0YXRpYyB2b2lkIHRyaWdnZXJPTUdSZXBsYWNlbWVudENvbXBp
bGUoVGllclVwQ291bnQmIHRpZXJVcCwgT01HQ2FsbGVlKiByZXBsYWNlbWVudCwgSW5zdGFuY2Uq
IGluc3RhbmNlLCBXYXNtOjpDYWxsZWVHcm91cCYgY2FsbGVlR3JvdXAsIHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgpCiB7CiAgICAgaWYgKHJlcGxhY2VtZW50KSB7CiAgICAgICAgIHRpZXJVcC5vcHRp
bWl6ZVNvb24oZnVuY3Rpb25JbmRleCk7CkBAIC05Nyw3ICs5Nyw3IEBAIHN0YXRpYyB2b2lkIHRy
aWdnZXJPTUdSZXBsYWNlbWVudENvbXBpbGUoVGllclVwQ291bnQmIHRpZXJVcCwgT01HQ2FsbGVl
KiByZXBsYWNlCiAgICAgaWYgKGNvbXBpbGUpIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9u
czo6dmVyYm9zZU9TUigpLCAidHJpZ2dlck9NR1JlcGxhY2VtZW50IGZvciAiLCBmdW5jdGlvbklu
ZGV4KTsKICAgICAgICAgLy8gV2UgbmVlZCB0byBjb21waWxlIHRoZSBjb2RlLgotICAgICAgICBS
ZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HUGxhbihpbnN0YW5jZS0+Y29udGV4dCgp
LCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+bW9kdWxlKCkpLCBmdW5jdGlvbkluZGV4LCBj
b2RlQmxvY2subW9kZSgpLCBQbGFuOjpkb250RmluYWxpemUoKSkpOworICAgICAgICBSZWY8UGxh
bj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HUGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8
V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+bW9kdWxlKCkpLCBmdW5jdGlvbkluZGV4LCBjYWxsZWVH
cm91cC5tb2RlKCksIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CiAgICAgICAgIGVuc3VyZVdvcmts
aXN0KCkuZW5xdWV1ZShwbGFuLmNvcHlSZWYoKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghT3B0
aW9uczo6dXNlQ29uY3VycmVudEpJVCgpKSkKICAgICAgICAgICAgIHBsYW4tPndhaXRGb3JDb21w
bGV0aW9uKCk7CkBAIC0yMzQsMTIgKzIzNCwxMiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uV2FzbVRyaWdnZXJPU1JFbnRyeU5vdywgdm9pZCwgKFByb2JlOjpDb250ZXh0Jgog
ICAgICAgICBjb250ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjApID0gMDsKICAgICB9Owog
Ci0gICAgV2FzbTo6Q29kZUJsb2NrJiBjb2RlQmxvY2sgPSAqaW5zdGFuY2UtPmNvZGVCbG9jaygp
OwotICAgIEFTU0VSVChpbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSA9PSBjb2RlQmxvY2subW9k
ZSgpKTsKKyAgICBXYXNtOjpDYWxsZWVHcm91cCYgY2FsbGVlR3JvdXAgPSAqaW5zdGFuY2UtPmNh
bGxlZUdyb3VwKCk7CisgICAgQVNTRVJUKGluc3RhbmNlLT5tZW1vcnkoKS0+bW9kZSgpID09IGNh
bGxlZUdyb3VwLm1vZGUoKSk7CiAKLSAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4SW5TcGFjZSA9
IGZ1bmN0aW9uSW5kZXggKyBjb2RlQmxvY2suZnVuY3Rpb25JbXBvcnRDb3VudCgpOwotICAgIEFT
U0VSVChjb2RlQmxvY2sud2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rp
b25JbmRleEluU3BhY2UpLmNvbXBpbGF0aW9uTW9kZSgpID09IFdhc206OkNvbXBpbGF0aW9uTW9k
ZTo6QkJRTW9kZSk7Ci0gICAgQkJRQ2FsbGVlJiBjYWxsZWUgPSBzdGF0aWNfY2FzdDxCQlFDYWxs
ZWUmPihjb2RlQmxvY2sud2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rp
b25JbmRleEluU3BhY2UpKTsKKyAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4SW5TcGFjZSA9IGZ1
bmN0aW9uSW5kZXggKyBjYWxsZWVHcm91cC5mdW5jdGlvbkltcG9ydENvdW50KCk7CisgICAgQVNT
RVJUKGNhbGxlZUdyb3VwLndhc21CQlFDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0
aW9uSW5kZXhJblNwYWNlKS5jb21waWxhdGlvbk1vZGUoKSA9PSBXYXNtOjpDb21waWxhdGlvbk1v
ZGU6OkJCUU1vZGUpOworICAgIEJCUUNhbGxlZSYgY2FsbGVlID0gc3RhdGljX2Nhc3Q8QkJRQ2Fs
bGVlJj4oY2FsbGVlR3JvdXAud2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVu
Y3Rpb25JbmRleEluU3BhY2UpKTsKICAgICBUaWVyVXBDb3VudCYgdGllclVwID0gKmNhbGxlZS50
aWVyVXBDb3VudCgpOwogCiAgICAgaWYgKCFzaG91bGRKSVQoZnVuY3Rpb25JbmRleCkpIHsKQEAg
LTI1MSw3ICsyNTEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRy
aWdnZXJPU1JFbnRyeU5vdywgdm9pZCwgKFByb2JlOjpDb250ZXh0JgogCiAgICAgaWYgKCFPcHRp
b25zOjp1c2VXZWJBc3NlbWJseU9TUigpKSB7CiAgICAgICAgIGlmIChzaG91bGRUcmlnZ2VyT01H
Q29tcGlsZSh0aWVyVXAsIGNhbGxlZS5yZXBsYWNlbWVudCgpLCBmdW5jdGlvbkluZGV4KSkKLSAg
ICAgICAgICAgIHRyaWdnZXJPTUdSZXBsYWNlbWVudENvbXBpbGUodGllclVwLCBjYWxsZWUucmVw
bGFjZW1lbnQoKSwgaW5zdGFuY2UsIGNvZGVCbG9jaywgZnVuY3Rpb25JbmRleCk7CisgICAgICAg
ICAgICB0cmlnZ2VyT01HUmVwbGFjZW1lbnRDb21waWxlKHRpZXJVcCwgY2FsbGVlLnJlcGxhY2Vt
ZW50KCksIGluc3RhbmNlLCBjYWxsZWVHcm91cCwgZnVuY3Rpb25JbmRleCk7CiAKICAgICAgICAg
Ly8gV2UgYWxyZWFkeSBoYXZlIGFuIE9NRyByZXBsYWNlbWVudC4KICAgICAgICAgaWYgKGNhbGxl
ZS5yZXBsYWNlbWVudCgpKSB7CkBAIC0zMTYsNyArMzE2LDcgQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbldhc21UcmlnZ2VyT1NSRW50cnlOb3csIHZvaWQsIChQcm9iZTo6Q29u
dGV4dCYKICAgICAgICAgcmV0dXJuIHJldHVybldpdGhvdXRPU1JFbnRyeSgpOwogCiAgICAgaWYg
KCF0cmlnZ2VyZWRTbG93UGF0aFRvU3RhcnRDb21waWxhdGlvbikgewotICAgICAgICB0cmlnZ2Vy
T01HUmVwbGFjZW1lbnRDb21waWxlKHRpZXJVcCwgY2FsbGVlLnJlcGxhY2VtZW50KCksIGluc3Rh
bmNlLCBjb2RlQmxvY2ssIGZ1bmN0aW9uSW5kZXgpOworICAgICAgICB0cmlnZ2VyT01HUmVwbGFj
ZW1lbnRDb21waWxlKHRpZXJVcCwgY2FsbGVlLnJlcGxhY2VtZW50KCksIGluc3RhbmNlLCBjYWxs
ZWVHcm91cCwgZnVuY3Rpb25JbmRleCk7CiAKICAgICAgICAgaWYgKCFjYWxsZWUucmVwbGFjZW1l
bnQoKSkKICAgICAgICAgICAgIHJldHVybiByZXR1cm5XaXRob3V0T1NSRW50cnkoKTsKQEAgLTM5
MCw3ICszOTAsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRyaWdn
ZXJPU1JFbnRyeU5vdywgdm9pZCwgKFByb2JlOjpDb250ZXh0JgogCiAgICAgaWYgKHN0YXJ0T1NS
RW50cnlDb21waWxhdGlvbikgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3Nl
T1NSKCksICJ0cmlnZ2VyT01HT1NSIGZvciAiLCBmdW5jdGlvbkluZGV4KTsKLSAgICAgICAgUmVm
PFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR0Zvck9TUkVudHJ5UGxhbihpbnN0YW5jZS0+
Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+bW9kdWxlKCkpLCBSZWY8V2Fz
bTo6QkJRQ2FsbGVlPihjYWxsZWUpLCBmdW5jdGlvbkluZGV4LCBsb29wSW5kZXgsIGNvZGVCbG9j
ay5tb2RlKCksIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CisgICAgICAgIFJlZjxQbGFuPiBwbGFu
ID0gYWRvcHRSZWYoKm5ldyBPTUdGb3JPU1JFbnRyeVBsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwg
UmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVsZSgpKSwgUmVmPFdhc206OkJCUUNhbGxl
ZT4oY2FsbGVlKSwgZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4LCBjYWxsZWVHcm91cC5tb2RlKCks
IFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CiAgICAgICAgIGVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1
ZShwbGFuLmNvcHlSZWYoKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghT3B0aW9uczo6dXNlQ29u
Y3VycmVudEpJVCgpKSkKICAgICAgICAgICAgIHBsYW4tPndhaXRGb3JDb21wbGV0aW9uKCk7CkBA
IC00MTMsMTIgKzQxMywxMiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2Fz
bVRyaWdnZXJPU1JFbnRyeU5vdywgdm9pZCwgKFByb2JlOjpDb250ZXh0JgogCiBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRyaWdnZXJUaWVyVXBOb3csIHZvaWQsIChJbnN0
YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpKQogewotICAgIFdhc206OkNv
ZGVCbG9jayYgY29kZUJsb2NrID0gKmluc3RhbmNlLT5jb2RlQmxvY2soKTsKLSAgICBBU1NFUlQo
aW5zdGFuY2UtPm1lbW9yeSgpLT5tb2RlKCkgPT0gY29kZUJsb2NrLm1vZGUoKSk7CisgICAgV2Fz
bTo6Q2FsbGVlR3JvdXAmIGNhbGxlZUdyb3VwID0gKmluc3RhbmNlLT5jYWxsZWVHcm91cCgpOwor
ICAgIEFTU0VSVChpbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSA9PSBjYWxsZWVHcm91cC5tb2Rl
KCkpOwogCi0gICAgdWludDMyX3QgZnVuY3Rpb25JbmRleEluU3BhY2UgPSBmdW5jdGlvbkluZGV4
ICsgY29kZUJsb2NrLmZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKLSAgICBBU1NFUlQoY29kZUJsb2Nr
Lndhc21CQlFDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhJblNwYWNl
KS5jb21waWxhdGlvbk1vZGUoKSA9PSBXYXNtOjpDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUpOwot
ICAgIEJCUUNhbGxlZSYgY2FsbGVlID0gc3RhdGljX2Nhc3Q8QkJRQ2FsbGVlJj4oY29kZUJsb2Nr
Lndhc21CQlFDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhJblNwYWNl
KSk7CisgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleEluU3BhY2UgPSBmdW5jdGlvbkluZGV4ICsg
Y2FsbGVlR3JvdXAuZnVuY3Rpb25JbXBvcnRDb3VudCgpOworICAgIEFTU0VSVChjYWxsZWVHcm91
cC53YXNtQkJRQ2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4SW5TcGFj
ZSkuY29tcGlsYXRpb25Nb2RlKCkgPT0gV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlKTsK
KyAgICBCQlFDYWxsZWUmIGNhbGxlZSA9IHN0YXRpY19jYXN0PEJCUUNhbGxlZSY+KGNhbGxlZUdy
b3VwLndhc21CQlFDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhJblNw
YWNlKSk7CiAgICAgVGllclVwQ291bnQmIHRpZXJVcCA9ICpjYWxsZWUudGllclVwQ291bnQoKTsK
IAogICAgIGlmICghc2hvdWxkSklUKGZ1bmN0aW9uSW5kZXgpKSB7CkBAIC00MjksNyArNDI5LDcg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UcmlnZ2VyVGllclVwTm93
LCB2b2lkLCAoSW5zdGFuY2UqIGluc3RhbmMKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJi
b3NlT1NSKCksICJDb25zaWRlciBPTUdQbGFuIGZvciBbIiwgZnVuY3Rpb25JbmRleCwgIl0gd2l0
aCBleGVjdXRlQ291bnRlciA9ICIsIHRpZXJVcCwgIiAiLCBSYXdQb2ludGVyKGNhbGxlZS5yZXBs
YWNlbWVudCgpKSk7CiAKICAgICBpZiAoc2hvdWxkVHJpZ2dlck9NR0NvbXBpbGUodGllclVwLCBj
YWxsZWUucmVwbGFjZW1lbnQoKSwgZnVuY3Rpb25JbmRleCkpCi0gICAgICAgIHRyaWdnZXJPTUdS
ZXBsYWNlbWVudENvbXBpbGUodGllclVwLCBjYWxsZWUucmVwbGFjZW1lbnQoKSwgaW5zdGFuY2Us
IGNvZGVCbG9jaywgZnVuY3Rpb25JbmRleCk7CisgICAgICAgIHRyaWdnZXJPTUdSZXBsYWNlbWVu
dENvbXBpbGUodGllclVwLCBjYWxsZWUucmVwbGFjZW1lbnQoKSwgaW5zdGFuY2UsIGNhbGxlZUdy
b3VwLCBmdW5jdGlvbkluZGV4KTsKIAogICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBPTUcgcmVw
bGFjZW1lbnQuCiAgICAgaWYgKGNhbGxlZS5yZXBsYWNlbWVudCgpKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKaW5kZXggMWMxYjdiNjU5NzAwMDliOGY1NzVlYWQyYTYx
ZWRhNmZhOTJiN2IzYy4uYTkzMmQyNzEyOWYwZTM4MGIzYjM5M2RjMTllNjM5YzBiOGViYzg2NCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcApAQCAtMjksNyArMjksNyBA
QAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKLSNp
bmNsdWRlICJXYXNtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxlZUdyb3VwLmgiCiAj
aW5jbHVkZSAiV2FzbU1hY2hpbmVUaHJlYWRzLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4K
ICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBQbGFuOjpm
YWlsKFN0cmluZyYmIGVycm9yTWVzc2FnZSkKIH0KIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9C
M0pJVCkKLXZvaWQgUGxhbjo6dXBkYXRlQ2FsbFNpdGVzVG9DYWxsVXMoQ29kZUJsb2NrJiBjb2Rl
QmxvY2ssIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludCwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgZnVuY3Rpb25JbmRleFNwYWNlKQordm9pZCBQ
bGFuOjp1cGRhdGVDYWxsU2l0ZXNUb0NhbGxVcyhDYWxsZWVHcm91cCYgY2FsbGVlR3JvdXAsIENv
ZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludCwgdWludDMyX3QgZnVu
Y3Rpb25JbmRleCwgdWludDMyX3QgZnVuY3Rpb25JbmRleFNwYWNlKQogewogICAgIEhhc2hNYXA8
dm9pZCosIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+IHN0YWdlZENhbGxzOwog
ICAgIGF1dG8gc3RhZ2VSZXBhdGNoID0gWyZdIChjb25zdCBhdXRvJiBjYWxsc2l0ZXMpIHsKQEAg
LTEzNSwxNiArMTM1LDE2IEBAIHZvaWQgUGxhbjo6dXBkYXRlQ2FsbFNpdGVzVG9DYWxsVXMoQ29k
ZUJsb2NrJiBjb2RlQmxvY2ssIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2RlQmxv
Y2subV93YXNtVG9XYXNtQ2FsbHNpdGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHN0YWdlUmVw
YXRjaChjb2RlQmxvY2subV93YXNtVG9XYXNtQ2FsbHNpdGVzW2ldKTsKLSAgICAgICAgaWYgKGNv
ZGVCbG9jay5tX2xsaW50Q2FsbGVlcykgewotICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50
Q2FsbGVlID0gY29kZUJsb2NrLm1fbGxpbnRDYWxsZWVzLT5hdChpKS5nZXQoKTsKLSAgICAgICAg
ICAgIGlmIChKSVRDYWxsZWUqIHJlcGxhY2VtZW50Q2FsbGVlID0gbGxpbnRDYWxsZWUucmVwbGFj
ZW1lbnQoY29kZUJsb2NrLm1vZGUoKSkpCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNh
bGxlZUdyb3VwLm1fd2FzbVRvV2FzbUNhbGxzaXRlcy5zaXplKCk7ICsraSkgeworICAgICAgICBz
dGFnZVJlcGF0Y2goY2FsbGVlR3JvdXAubV93YXNtVG9XYXNtQ2FsbHNpdGVzW2ldKTsKKyAgICAg
ICAgaWYgKGNhbGxlZUdyb3VwLm1fbGxpbnRDYWxsZWVzKSB7CisgICAgICAgICAgICBMTEludENh
bGxlZSYgbGxpbnRDYWxsZWUgPSBjYWxsZWVHcm91cC5tX2xsaW50Q2FsbGVlcy0+YXQoaSkuZ2V0
KCk7CisgICAgICAgICAgICBpZiAoSklUQ2FsbGVlKiByZXBsYWNlbWVudENhbGxlZSA9IGxsaW50
Q2FsbGVlLnJlcGxhY2VtZW50KGNhbGxlZUdyb3VwLm1vZGUoKSkpCiAgICAgICAgICAgICAgICAg
c3RhZ2VSZXBhdGNoKHJlcGxhY2VtZW50Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwot
ICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGxs
aW50Q2FsbGVlLm9zckVudHJ5Q2FsbGVlKGNvZGVCbG9jay5tb2RlKCkpKQorICAgICAgICAgICAg
aWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGxsaW50Q2FsbGVlLm9z
ckVudHJ5Q2FsbGVlKGNhbGxlZUdyb3VwLm1vZGUoKSkpCiAgICAgICAgICAgICAgICAgc3RhZ2VS
ZXBhdGNoKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChCQlFDYWxsZWUqIGJicUNhbGxlZSA9IGNvZGVCbG9jay5tX2JicUNhbGxl
ZXNbaV0uZ2V0KCkpIHsKKyAgICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gY2FsbGVl
R3JvdXAubV9iYnFDYWxsZWVzW2ldLmdldCgpKSB7CiAgICAgICAgICAgICBpZiAoT01HQ2FsbGVl
KiByZXBsYWNlbWVudENhbGxlZSA9IGJicUNhbGxlZS0+cmVwbGFjZW1lbnQoKSkKICAgICAgICAg
ICAgICAgICBzdGFnZVJlcGF0Y2gocmVwbGFjZW1lbnRDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0
ZXMoKSk7CiAgICAgICAgICAgICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2Fs
bGVlID0gYmJxQ2FsbGVlLT5vc3JFbnRyeUNhbGxlZSgpKQpAQCAtMTU4LDcgKzE1OCw3IEBAIHZv
aWQgUGxhbjo6dXBkYXRlQ2FsbFNpdGVzVG9DYWxsVXMoQ29kZUJsb2NrJiBjb2RlQmxvY2ssIENv
ZGVMb2NhdGlvbkxhYmVsPFdhc21FCiAgICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJl
YWRzKCk7CiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBwcm9iYWJseSBpc24n
dCBuZWNlc3NhcnkgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KIAotICAgIGNvZGVCbG9j
ay5tX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1tmdW5jdGlvbkluZGV4XSA9IGVudHJ5cG9p
bnQ7CisgICAgY2FsbGVlR3JvdXAubV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNbZnVuY3Rp
b25JbmRleF0gPSBlbnRyeXBvaW50OwogCiAgICAgYXV0byByZXBhdGNoQ2FsbHMgPSBbJl0gKGNv
bnN0IGF1dG8mIGNhbGxzaXRlcykgewogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0
ZXMpIHsKQEAgLTE3MCwxNiArMTcwLDE2IEBAIHZvaWQgUGxhbjo6dXBkYXRlQ2FsbFNpdGVzVG9D
YWxsVXMoQ29kZUJsb2NrJiBjb2RlQmxvY2ssIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FCiAgICAg
ICAgIH0KICAgICB9OwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvZGVCbG9jay5t
X3dhc21Ub1dhc21DYWxsc2l0ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmVwYXRjaENhbGxz
KGNvZGVCbG9jay5tX3dhc21Ub1dhc21DYWxsc2l0ZXNbaV0pOwotICAgICAgICBpZiAoY29kZUJs
b2NrLm1fbGxpbnRDYWxsZWVzKSB7Ci0gICAgICAgICAgICBMTEludENhbGxlZSYgbGxpbnRDYWxs
ZWUgPSBjb2RlQmxvY2subV9sbGludENhbGxlZXMtPmF0KGkpLmdldCgpOwotICAgICAgICAgICAg
aWYgKEpJVENhbGxlZSogcmVwbGFjZW1lbnRDYWxsZWUgPSBsbGludENhbGxlZS5yZXBsYWNlbWVu
dChjb2RlQmxvY2subW9kZSgpKSkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FsbGVl
R3JvdXAubV93YXNtVG9XYXNtQ2FsbHNpdGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJlcGF0
Y2hDYWxscyhjYWxsZWVHcm91cC5tX3dhc21Ub1dhc21DYWxsc2l0ZXNbaV0pOworICAgICAgICBp
ZiAoY2FsbGVlR3JvdXAubV9sbGludENhbGxlZXMpIHsKKyAgICAgICAgICAgIExMSW50Q2FsbGVl
JiBsbGludENhbGxlZSA9IGNhbGxlZUdyb3VwLm1fbGxpbnRDYWxsZWVzLT5hdChpKS5nZXQoKTsK
KyAgICAgICAgICAgIGlmIChKSVRDYWxsZWUqIHJlcGxhY2VtZW50Q2FsbGVlID0gbGxpbnRDYWxs
ZWUucmVwbGFjZW1lbnQoY2FsbGVlR3JvdXAubW9kZSgpKSkKICAgICAgICAgICAgICAgICByZXBh
dGNoQ2FsbHMocmVwbGFjZW1lbnRDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7Ci0gICAg
ICAgICAgICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gbGxpbnRD
YWxsZWUub3NyRW50cnlDYWxsZWUoY29kZUJsb2NrLm1vZGUoKSkpCisgICAgICAgICAgICBpZiAo
T01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gbGxpbnRDYWxsZWUub3NyRW50
cnlDYWxsZWUoY2FsbGVlR3JvdXAubW9kZSgpKSkKICAgICAgICAgICAgICAgICByZXBhdGNoQ2Fs
bHMob3NyRW50cnlDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gY29kZUJsb2NrLm1fYmJxQ2FsbGVlc1tp
XS5nZXQoKSkgeworICAgICAgICBpZiAoQkJRQ2FsbGVlKiBiYnFDYWxsZWUgPSBjYWxsZWVHcm91
cC5tX2JicUNhbGxlZXNbaV0uZ2V0KCkpIHsKICAgICAgICAgICAgIGlmIChPTUdDYWxsZWUqIHJl
cGxhY2VtZW50Q2FsbGVlID0gYmJxQ2FsbGVlLT5yZXBsYWNlbWVudCgpKQogICAgICAgICAgICAg
ICAgIHJlcGF0Y2hDYWxscyhyZXBsYWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygp
KTsKICAgICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUg
PSBiYnFDYWxsZWUtPm9zckVudHJ5Q2FsbGVlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVBsYW4uaAppbmRleCBiM2RlMGNhNTUwYjQ4OWRiNDkyMGViMTJiNTExZDMzYTVhZWI1Yjg4Li5h
OGZjZTMzNzlmNDZjMTY1MDEwMzU1MzRmNzc0MDI5OWU2MDFkNjRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QbGFuLmgKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgQ2FsbExpbmtJbmZv
OwogCiBuYW1lc3BhY2UgV2FzbSB7CiAKLWNsYXNzIENvZGVCbG9jazsKK2NsYXNzIENhbGxlZUdy
b3VwOwogc3RydWN0IENvbnRleHQ7CiAKIGNsYXNzIFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8UGxhbj4gewpAQCAtODUsNyArODUsNyBAQCBjbGFzcyBQbGFuIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKICAgICB2aXJ0dWFsIHZvaWQgY29tcGxldGUoKSBX
VEZfUkVRVUlSRVNfTE9DSyhtX2xvY2spID0gMDsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9C
M0pJVCkKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVDYWxsU2l0ZXNUb0NhbGxVcyhDb2RlQmxvY2sm
LCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQsIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgc3RhdGlj
IHZvaWQgdXBkYXRlQ2FsbFNpdGVzVG9DYWxsVXMoQ2FsbGVlR3JvdXAmLCBDb2RlTG9jYXRpb25M
YWJlbDxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAjZW5kaWYKIAogICAgIFJlZjxNb2R1bGVJ
bmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVNsb3dQYXRocy5jcHAKaW5kZXggMTkxNTY0NWQ2MzE4ZmE5ZDQyOGMwNTc4MDNj
OTE0YTYxYjNlMDBhMy4uYjNiNWM4YTlmOGZmYzBkZGY0NzNiYWJiMWFlYmYxNWFjOGE3ZTQ0YiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAKQEAgLTEz
Miw3ICsxMzIsNyBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhXYXNt
OjpMTEludENhbGxlZSogY2FsbGVlLCBXYXNtOjpGdW5jdGlvbgogICAgICAgICB1aW50MzJfdCBm
dW5jdGlvbkluZGV4ID0gY29kZUJsb2NrLT5mdW5jdGlvbkluZGV4KCk7CiAgICAgICAgIFJlZlB0
cjxXYXNtOjpQbGFuPiBwbGFuOwogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNV
cFRvQkJRKCkpCi0gICAgICAgICAgICBwbGFuID0gYWRvcHRSZWYoKm5ldyBXYXNtOjpCQlFQbGFu
KGluc3RhbmNlLT5jb250ZXh0KCksIGNvbnN0X2Nhc3Q8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24m
PihpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKSksIGZ1bmN0aW9uSW5kZXgs
IGluc3RhbmNlLT5jb2RlQmxvY2soKSwgV2FzbTo6UGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAg
ICAgICAgICAgIHBsYW4gPSBhZG9wdFJlZigqbmV3IFdhc206OkJCUVBsYW4oaW5zdGFuY2UtPmNv
bnRleHQoKSwgY29uc3RfY2FzdDxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiY+KGluc3RhbmNlLT5t
b2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpKSwgZnVuY3Rpb25JbmRleCwgaW5zdGFuY2UtPmNh
bGxlZUdyb3VwKCksIFdhc206OlBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHBsYW4gPSBhZG9wdFJlZigqbmV3IFdhc206Ok9NR1BsYW4oaW5zdGFuY2Ut
PmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVsZSgpKSwgZnVuY3Rp
b25JbmRleCwgaW5zdGFuY2UtPm1lbW9yeSgpLT5tb2RlKCksIFdhc206OlBsYW46OmRvbnRGaW5h
bGl6ZSgpKSk7CiAKQEAgLTQzNSwxNCArNDM1LDE0IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5
cGUgZG9XYXNtQ2FsbChXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGZ1bmN0aW9u
CiAgICAgICAgIFdhc206Okluc3RhbmNlOjpJbXBvcnRGdW5jdGlvbkluZm8qIGZ1bmN0aW9uSW5m
byA9IGluc3RhbmNlLT5pbXBvcnRGdW5jdGlvbkluZm8oZnVuY3Rpb25JbmRleCk7CiAgICAgICAg
IGlmIChmdW5jdGlvbkluZm8tPnRhcmdldEluc3RhbmNlKSB7CiAgICAgICAgICAgICAvLyB0YXJn
ZXQgaXMgYSB3YXNtIGZ1bmN0aW9uIGZyb20gYSBkaWZmZXJlbnQgaW5zdGFuY2UKLSAgICAgICAg
ICAgIGNvZGVQdHIgPSBpbnN0YW5jZS0+Y29kZUJsb2NrKCktPndhc21Ub1dhc21FeGl0U3R1Yihm
dW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAgIGNvZGVQdHIgPSBpbnN0YW5jZS0+Y2FsbGVlR3Jv
dXAoKS0+d2FzbVRvV2FzbUV4aXRTdHViKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gdGFyZ2V0IGlzIEpTCiAgICAgICAgICAgICBjb2RlUHRyID0gZnVu
Y3Rpb25JbmZvLT53YXNtVG9FbWJlZGRlclN0dWI7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewog
ICAgICAgICAvLyBUYXJnZXQgaXMgYSB3YXNtIGZ1bmN0aW9uIHdpdGhpbiB0aGUgc2FtZSBpbnN0
YW5jZQotICAgICAgICBjb2RlUHRyID0gKmluc3RhbmNlLT5jb2RlQmxvY2soKS0+ZW50cnlwb2lu
dExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CisgICAg
ICAgIGNvZGVQdHIgPSAqaW5zdGFuY2UtPmNhbGxlZUdyb3VwKCktPmVudHJ5cG9pbnRMb2FkTG9j
YXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgIH0KIAogICAg
IFdBU01fQ0FMTF9SRVRVUk4oaW5zdGFuY2UsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
V2FzbUVudHJ5UHRyVGFnKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseS5jcHAKaW5kZXggMWFmODQ5NWI1M2Y3NmE1YjZkZDM1NDhiNzhiOTQ5OWY4OWJl
MjE1My4uMzcwNTNjNTYzZWY5MzQyZmY1NWFmNDRjNWMwZTBjY2NkOTM1NWE2ZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKQEAgLTEzOCwx
MCArMTM4LDEwIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTih3ZWJBc3NlbWJseUNvbXBpbGVG
dW5jLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKIH0KIAogZW51bSBjbGFzcyBSZXNv
bHZlIHsgV2l0aEluc3RhbmNlLCBXaXRoTW9kdWxlUmVjb3JkLCBXaXRoTW9kdWxlQW5kSW5zdGFu
Y2UgfTsKLXN0YXRpYyB2b2lkIHJlc29sdmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1Byb21pc2UqIHByb21pc2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFu
Y2UsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwg
UmVmPFdhc206OkNvZGVCbG9jaz4mJiBjb2RlQmxvY2ssIFJlc29sdmUgcmVzb2x2ZUtpbmQsIFdh
c206OkNyZWF0aW9uTW9kZSBjcmVhdGlvbk1vZGUpCitzdGF0aWMgdm9pZCByZXNvbHZlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNQcm9taXNlKiBwcm9taXNlLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUs
IEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFJlZjxXYXNtOjpDYWxsZWVHcm91cD4mJiBjYWxsZWVH
cm91cCwgUmVzb2x2ZSByZXNvbHZlS2luZCwgV2FzbTo6Q3JlYXRpb25Nb2RlIGNyZWF0aW9uTW9k
ZSkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgaW5z
dGFuY2UtPmZpbmFsaXplQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCwgV1RGTW92ZShjb2RlQmxv
Y2spLCBpbXBvcnRPYmplY3QsIGNyZWF0aW9uTW9kZSk7CisgICAgaW5zdGFuY2UtPmZpbmFsaXpl
Q3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCwgV1RGTW92ZShjYWxsZWVHcm91cCksIGltcG9ydE9i
amVjdCwgY3JlYXRpb25Nb2RlKTsKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KSB7CiAgICAgICAgIHByb21pc2UtPnJlamVjdFdpdGhDYXVnaHRFeGNlcHRpb24oZ2xvYmFsT2Jq
ZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTIwNCwxMSArMjA0LDExIEBAIHN0YXRp
YyB2b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNQcm9taXNlKiBwcm9taXNlCiAKICAgICB2bS5kZWZlcnJlZFdvcmtUaW1lci0+YWRkUGVuZGlu
Z1dvcmsodm0sIGluc3RhbmNlLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOwogICAgIC8vIE5vdGU6
IFRoaXMgY29tcGxldGlvbiB0YXNrIG1heSBvciBtYXkgbm90IGdldCBjYWxsZWQgaW1tZWRpYXRl
bHkuCi0gICAgbW9kdWxlLT5tb2R1bGUoKS5jb21waWxlQXN5bmMoJnZtLndhc21Db250ZXh0LCBp
bnN0YW5jZS0+bWVtb3J5TW9kZSgpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206OkNvZGVCbG9jazo6
Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBy
ZXNvbHZlS2luZCwgY3JlYXRpb25Nb2RlLCAmdm1dIChSZWY8V2FzbTo6Q29kZUJsb2NrPiYmIHJl
ZkNvZGVCbG9jaykgbXV0YWJsZSB7Ci0gICAgICAgIFJlZlB0cjxXYXNtOjpDb2RlQmxvY2s+IGNv
ZGVCbG9jayA9IFdURk1vdmUocmVmQ29kZUJsb2NrKTsKLSAgICAgICAgdm0uZGVmZXJyZWRXb3Jr
VGltZXItPnNjaGVkdWxlV29ya1Nvb24oaW5zdGFuY2UsIFtwcm9taXNlLCBpbnN0YW5jZSwgbW9k
dWxlLCBpbXBvcnRPYmplY3QsIHJlc29sdmVLaW5kLCBjcmVhdGlvbk1vZGUsICZ2bSwgY29kZUJs
b2NrID0gV1RGTW92ZShjb2RlQmxvY2spXShEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0LCBEZWZl
cnJlZFdvcmtUaW1lcjo6VGlja2V0RGF0YSYmKSBtdXRhYmxlIHsKKyAgICBtb2R1bGUtPm1vZHVs
ZSgpLmNvbXBpbGVBc3luYygmdm0ud2FzbUNvbnRleHQsIGluc3RhbmNlLT5tZW1vcnlNb2RlKCks
IGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6Q2FsbGVlR3JvdXA6OkNhbGxiYWNrVHlwZT4oW3Byb21p
c2UsIGluc3RhbmNlLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgcmVzb2x2ZUtpbmQsIGNyZWF0aW9u
TW9kZSwgJnZtXSAoUmVmPFdhc206OkNhbGxlZUdyb3VwPiYmIHJlZkNhbGxlZUdyb3VwKSBtdXRh
YmxlIHsKKyAgICAgICAgUmVmUHRyPFdhc206OkNhbGxlZUdyb3VwPiBjYWxsZWVHcm91cCA9IFdU
Rk1vdmUocmVmQ2FsbGVlR3JvdXApOworICAgICAgICB2bS5kZWZlcnJlZFdvcmtUaW1lci0+c2No
ZWR1bGVXb3JrU29vbihpbnN0YW5jZSwgW3Byb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGltcG9y
dE9iamVjdCwgcmVzb2x2ZUtpbmQsIGNyZWF0aW9uTW9kZSwgJnZtLCBjYWxsZWVHcm91cCA9IFdU
Rk1vdmUoY2FsbGVlR3JvdXApXShEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0LCBEZWZlcnJlZFdv
cmtUaW1lcjo6VGlja2V0RGF0YSYmKSBtdXRhYmxlIHsKICAgICAgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgICAg
ICByZXNvbHZlKHZtLCBnbG9iYWxPYmplY3QsIHByb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGlt
cG9ydE9iamVjdCwgY29kZUJsb2NrLnJlbGVhc2VOb25OdWxsKCksIHJlc29sdmVLaW5kLCBjcmVh
dGlvbk1vZGUpOworICAgICAgICAgICAgcmVzb2x2ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9taXNl
LCBpbnN0YW5jZSwgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGNhbGxlZUdyb3VwLnJlbGVhc2VOb25O
dWxsKCksIHJlc29sdmVLaW5kLCBjcmVhdGlvbk1vZGUpOwogICAgICAgICB9KTsKICAgICB9KSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q2FsbGVlR3JvdXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNhbGxlZUdyb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYWZiYzhhZjdlMjc5MTE3YTk5NTU0
ZjA2NjgzNTA3OWJlNjM1YmMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZUdyb3VwLmNwcApAQCAtMCwwICsxLDEwNCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWVHcm91cC5oIgor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMu
aCIKKyNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbVRvSlMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Nv
bnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5Q2FsbGVlR3JvdXA6OnNfaW5mbyA9IHsgIldlYkFz
c2VtYmx5Q2FsbGVlR3JvdXAiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlDYWxsZWVHcm91cCkgfTsKKworSlNXZWJBc3NlbWJseUNh
bGxlZUdyb3VwKiBKU1dlYkFzc2VtYmx5Q2FsbGVlR3JvdXA6OmNyZWF0ZShWTSYgdm0sIFJlZjxX
YXNtOjpDYWxsZWVHcm91cD4gY2FsbGVlR3JvdXAsIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0
aW9uJiBtb2R1bGVJbmZvcm1hdGlvbikKK3sKKyAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q2FsbGVlR3JvdXA+KHZtKSkgSlNXZWJBc3Nl
bWJseUNhbGxlZUdyb3VwKHZtLCBXVEZNb3ZlKGNhbGxlZUdyb3VwKSwgbW9kdWxlSW5mb3JtYXRp
b24pOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK0pTV2ViQXNzZW1ibHlDYWxsZWVHcm91cDo6SlNXZWJBc3NlbWJseUNhbGxlZUdyb3Vw
KFZNJiB2bSwgUmVmPFdhc206OkNhbGxlZUdyb3VwPiYmIGNhbGxlZUdyb3VwLCBjb25zdCBXYXNt
OjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24pCisgICAgOiBCYXNlKHZtLCB2
bS53ZWJBc3NlbWJseUNhbGxlZUdyb3VwU3RydWN0dXJlLmdldCgpKQorICAgICwgbV9jYWxsZWVH
cm91cChXVEZNb3ZlKGNhbGxlZUdyb3VwKSkKKyAgICAsIG1fd2FzbVRvSlNFeGl0U3R1YnMobV9j
YWxsZWVHcm91cC0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpKQoreworICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgbm90IG5lZWQgdG8gZG8gdGhpcyBzeW5jaHJvbm91c2x5LgorICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1NjcKKyAgICBmb3IgKHVuc2lnbmVk
IGltcG9ydEluZGV4ID0gMDsgaW1wb3J0SW5kZXggPCBtX2NhbGxlZUdyb3VwLT5mdW5jdGlvbklt
cG9ydENvdW50KCk7ICsraW1wb3J0SW5kZXgpIHsKKyAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5k
ZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvblNpZ25h
dHVyZUluZGljZXMuYXQoaW1wb3J0SW5kZXgpOworICAgICAgICBhdXRvIGJpbmRpbmcgPSBXYXNt
Ojp3YXNtVG9KUyh2bSwgbV9jYWxsTGlua0luZm9zLCBzaWduYXR1cmVJbmRleCwgaW1wb3J0SW5k
ZXgpOworICAgICAgICBpZiAoVU5MSUtFTFkoIWJpbmRpbmcpKSB7CisgICAgICAgICAgICBzd2l0
Y2ggKGJpbmRpbmcuZXJyb3IoKSkgeworICAgICAgICAgICAgY2FzZSBXYXNtOjpCaW5kaW5nRmFp
bHVyZTo6T3V0T2ZNZW1vcnk6CisgICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiT3V0
IG9mIGV4ZWN1dGFibGUgbWVtb3J5Il9zOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KKyAgICAgICAgbV93YXNtVG9KU0V4aXRTdHVic1tpbXBvcnRJbmRleF0gPSBiaW5kaW5n
LnZhbHVlKCk7CisgICAgfQorfQorCit2b2lkIEpTV2ViQXNzZW1ibHlDYWxsZWVHcm91cDo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKK30K
Kwordm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVlR3JvdXA6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQor
eworICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlDYWxsZWVHcm91cCo+KGNlbGwpLT5KU1dl
YkFzc2VtYmx5Q2FsbGVlR3JvdXA6On5KU1dlYkFzc2VtYmx5Q2FsbGVlR3JvdXAoKTsKK30KKwor
dm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVlR3JvdXA6OmNsZWFySlNDYWxsSUNzKFZNJiB2bSkKK3sK
KyAgICBmb3IgKGF1dG8gaXRlciA9IG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsr
aXRlcikKKyAgICAgICAgKCppdGVyKS0+dW5saW5rKHZtKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgSlNXZWJBc3NlbWJseUNhbGxlZUdyb3VwOjp2aXNpdENoaWxkcmVu
SW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNXZWJBc3NlbWJs
eUNhbGxlZUdyb3VwKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlDYWxsZWVHcm91
cCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKKworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Cit9
CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1dlYkFzc2VtYmx5Q2FsbGVlR3JvdXApOworCit2
b2lkIEpTV2ViQXNzZW1ibHlDYWxsZWVHcm91cDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0m
IHZtKQoreworICAgIGZvciAoYXV0byBpdGVyID0gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7ICEh
aXRlcjsgKytpdGVyKQorICAgICAgICAoKml0ZXIpLT52aXNpdFdlYWsodm0pOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWVHcm91
cC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZUdy
b3VwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODc0MmVkYTU3YjFlMjZhY2RmMTBmMTUwNGVlN2E0NjY3OTcxMzM3
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDYWxsZWVHcm91cC5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAi
RGVmZXJyZWRXb3JrVGltZXIuaCIKKyNpbmNsdWRlICJKU0Nhc3QuaCIKKyNpbmNsdWRlICJTdHJ1
Y3R1cmUuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5o
IgorI2luY2x1ZGUgIldhc21Nb2R1bGUuaCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlNZW1vcnk7CisKK25hbWVzcGFjZSBXYXNtIHsKK2NsYXNz
IFBsYW47Cit9CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWVHcm91cCBmaW5hbCA6IHB1Ymxp
YyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5Q2FsbGVl
R3JvdXAqIGNyZWF0ZShWTSYsIFJlZjxXYXNtOjpDYWxsZWVHcm91cD4sIGNvbnN0IFdhc206Ok1v
ZHVsZUluZm9ybWF0aW9uJik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cyBtb2RlPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5Q2FsbGVlR3JvdXBTcGFjZTxtb2RlPigp
OworICAgIH0KKworICAgIFdhc206OkNhbGxlZUdyb3VwJiBjYWxsZWVHcm91cCgpIHsgcmV0dXJu
IG1fY2FsbGVlR3JvdXAuZ2V0KCk7IH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
V2FzbUVudHJ5UHRyVGFnPiB3YXNtVG9FbWJlZGRlclN0dWIoc2l6ZV90IGltcG9ydEZ1bmN0aW9u
TnVtKSB7IHJldHVybiBtX3dhc21Ub0pTRXhpdFN0dWJzW2ltcG9ydEZ1bmN0aW9uTnVtXS5jb2Rl
KCk7IH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKworICAgIHZvaWQgY2xlYXJK
U0NhbGxJQ3MoVk0mKTsKKworICAgIGJvb2wgcnVubmFibGUoKSBjb25zdCB7IHJldHVybiAhbV9l
cnJvck1lc3NhZ2U7IH0KKworICAgIFN0cmluZyBlcnJvck1lc3NhZ2UoKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFydW5uYWJsZSgpKTsKKyAgICAgICAgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOwor
ICAgIH0KKworICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKKworcHJpdmF0
ZToKKyAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlR3JvdXAoVk0mLCBSZWY8V2FzbTo6Q2FsbGVlR3Jv
dXA+JiYsIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJik7CisgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKyAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOworCisgICAgUmVmPFdhc206OkNhbGxlZUdyb3VwPiBtX2NhbGxlZUdyb3VwOwor
ICAgIEZpeGVkVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBt
X3dhc21Ub0pTRXhpdFN0dWJzOworICAgIEJhZzxPcHRpbWl6aW5nQ2FsbExpbmtJbmZvPiBtX2Nh
bGxMaW5rSW5mb3M7CisgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTRiYjIzZTZjZGZkMjM3ZGIyMDE5NzFj
ZmIwOGZkMTc1NjUxMmRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCi0KLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ2VsbElu
bGluZXMuaCIKLSNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKLSNpbmNsdWRlICJX
YXNtVG9KUy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2s6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Q29kZUJsb2NrIiwgbnVsbHB0
ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKSB9OwotCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjpjcmVhdGUoVk0mIHZtLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiBjb2RlQmxvY2ssIGNvbnN0
IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbikKLXsKLSAgICBhdXRv
KiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrPih2bSkpIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0sIFdURk1vdmUoY29kZUJsb2NrKSwg
bW9kdWxlSW5mb3JtYXRpb24pOwotICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1i
bHlDb2RlQmxvY2soVk0mIHZtLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmIGNvZGVCbG9jaywgY29u
c3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKQotICAgIDogQmFz
ZSh2bSwgdm0ud2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBtX2Nv
ZGVCbG9jayhXVEZNb3ZlKGNvZGVCbG9jaykpCi0gICAgLCBtX3dhc21Ub0pTRXhpdFN0dWJzKG1f
Y29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpCi17Ci0gICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBub3QgbmVlZCB0byBkbyB0aGlzIHN5bmNocm9ub3VzbHkuCi0gICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDU2NwotICAgIGZvciAodW5zaWduZWQg
aW1wb3J0SW5kZXggPSAwOyBpbXBvcnRJbmRleCA8IG1fY29kZUJsb2NrLT5mdW5jdGlvbkltcG9y
dENvdW50KCk7ICsraW1wb3J0SW5kZXgpIHsKLSAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvblNpZ25hdHVy
ZUluZGljZXMuYXQoaW1wb3J0SW5kZXgpOwotICAgICAgICBhdXRvIGJpbmRpbmcgPSBXYXNtOjp3
YXNtVG9KUyh2bSwgbV9jYWxsTGlua0luZm9zLCBzaWduYXR1cmVJbmRleCwgaW1wb3J0SW5kZXgp
OwotICAgICAgICBpZiAoVU5MSUtFTFkoIWJpbmRpbmcpKSB7Ci0gICAgICAgICAgICBzd2l0Y2gg
KGJpbmRpbmcuZXJyb3IoKSkgewotICAgICAgICAgICAgY2FzZSBXYXNtOjpCaW5kaW5nRmFpbHVy
ZTo6T3V0T2ZNZW1vcnk6Ci0gICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiT3V0IG9m
IGV4ZWN1dGFibGUgbWVtb3J5Il9zOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgbV93YXNtVG9KU0V4aXRTdHVic1tpbXBvcnRJbmRleF0gPSBiaW5kaW5nLnZh
bHVlKCk7Ci0gICAgfQotfQotCi12b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci19Ci0KLXZv
aWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAg
c3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9jaygpOwotfQotCi12b2lkIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2s6OmNsZWFySlNDYWxsSUNzKFZNJiB2bSkKLXsKLSAgICBmb3IgKGF1dG8g
aXRlciA9IG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikKLSAgICAgICAg
KCppdGVyKS0+dW5saW5rKHZtKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KLXZv
aWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxs
LCBWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNlbGwpOwotICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLQotICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci19Ci0KLURFRklORV9WSVNJVF9DSElM
RFJFTihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKTsKLQotdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCi17Ci0gICAgZm9yIChhdXRvIGl0
ZXIgPSBtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCi0gICAgICAgICgq
aXRlciktPnZpc2l0V2Vhayh2bSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYg
Ly8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAxYjMwZDJmYzBkMDc1NmRhMTJiOTRjZDI1NTkzNzhjNWNmYWE0OGJjLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAorKysgL2Rldi9udWxsCkBAIC0x
LDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVk
ZSAiQ2FsbExpbmtJbmZvLmgiCi0jaW5jbHVkZSAiRGVmZXJyZWRXb3JrVGltZXIuaCIKLSNpbmNs
dWRlICJKU0Nhc3QuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlICJXYXNtQ2Fs
bGVlLmgiCi0jaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgotI2luY2x1ZGUgIldhc21Nb2R1bGUuaCIK
LSNpbmNsdWRlIDx3dGYvQmFnLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZi5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEpTV2ViQXNzZW1ibHlNZW1v
cnk7Ci0KLW5hbWVzcGFjZSBXYXNtIHsKLWNsYXNzIFBsYW47Ci19Ci0KLWNsYXNzIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2sgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKLXB1YmxpYzoKLSAgICB0eXBl
ZGVmIEpTQ2VsbCBCYXNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7Ci0KLSAg
ICBzdGF0aWMgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY3JlYXRlKFZNJiwgUmVmPFdhc206OkNv
ZGVCbG9jaz4sIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJik7Ci0gICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZtLndlYkFzc2VtYmx5
Q29kZUJsb2NrU3BhY2U8bW9kZT4oKTsKLSAgICB9Ci0KLSAgICBXYXNtOjpDb2RlQmxvY2smIGNv
ZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9Ci0gICAgCi0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gd2FzbVRvRW1iZWRkZXJTdHViKHNpemVf
dCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gbV93YXNtVG9KU0V4aXRTdHVic1tpbXBvcnRG
dW5jdGlvbk51bV0uY29kZSgpOyB9Ci0KLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0K
LSAgICB2b2lkIGNsZWFySlNDYWxsSUNzKFZNJik7Ci0KLSAgICBib29sIHJ1bm5hYmxlKCkgY29u
c3QgeyByZXR1cm4gIW1fZXJyb3JNZXNzYWdlOyB9Ci0KLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdl
KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghcnVubmFibGUoKSk7Ci0gICAgICAgIHJldHVybiBt
X2Vycm9yTWVzc2FnZTsKLSAgICB9Ci0KLSAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5
KFZNJik7Ci0KLXByaXZhdGU6Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYsIFJlZjxX
YXNtOjpDb2RlQmxvY2s+JiYsIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJik7Ci0gICAg
REVDTEFSRV9FWFBPUlRfSU5GTzsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0
cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwotCi0gICAgUmVmPFdhc206OkNvZGVCbG9jaz4gbV9jb2Rl
QmxvY2s7Ci0gICAgRml4ZWRWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0
clRhZz4+IG1fd2FzbVRvSlNFeGl0U3R1YnM7Ci0gICAgQmFnPE9wdGltaXppbmdDYWxsTGlua0lu
Zm8+IG1fY2FsbExpbmtJbmZvczsKLSAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuY3BwCmluZGV4IDkyZTM5MjFlYzdkODllYWQ2ZmJhZGU3MWE1MTZlNjNmM2EyYmZlMjcuLmM0
ZDQ5Y2M0YzVhMThmYTlkMzZhZDllMmM3YjdhNDkzNjQ1MzNkZWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApA
QCAtODEsNyArODEsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJl
bkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogCiAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX21vZHVsZSk7Ci0gICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jb2RlQmxv
Y2spOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FsbGVlR3JvdXApOwogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlUmVjb3JkKTsKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX21lbW9yeSk7CiAgICAgZm9yIChhdXRvJiB0YWJsZSA6IHRo
aXNPYmplY3QtPm1fdGFibGVzKQpAQCAtMTA1LDYyICsxMDUsNjIgQEAgdm9pZCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlz
aXRvcikKIAogREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk7CiAK
LXZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiB3YXNtQ29k
ZUJsb2NrLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBXYXNtOjpDcmVhdGlvbk1vZGUgY3JlYXRp
b25Nb2RlKQordm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24oVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8V2FzbTo6Q2FsbGVlR3JvdXA+
JiYgd2FzbUNhbGxlZUdyb3VwLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBXYXNtOjpDcmVhdGlv
bk1vZGUgY3JlYXRpb25Nb2RlKQogewogICAgIG1faW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24o
dGhpcyk7CiAKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAg
ICBpZiAoIXdhc21Db2RlQmxvY2stPnJ1bm5hYmxlKCkpIHsKLSAgICAgICAgdGhyb3dFeGNlcHRp
b24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihnbG9i
YWxPYmplY3QsIHZtLCB3YXNtQ29kZUJsb2NrLT5lcnJvck1lc3NhZ2UoKSkpOworICAgIGlmICgh
d2FzbUNhbGxlZUdyb3VwLT5ydW5uYWJsZSgpKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGds
b2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCB2bSwgd2FzbUNhbGxlZUdyb3VwLT5lcnJvck1lc3NhZ2UoKSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgUkVMRUFTRV9BU1NFUlQod2FzbUNvZGVCbG9jay0+aXNTYWZlVG9S
dW4obWVtb3J5TW9kZSgpKSk7Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayoganNDb2RlQmxv
Y2sgPSBtX21vZHVsZS0+Y29kZUJsb2NrKG1lbW9yeU1vZGUoKSk7Ci0gICAgaWYgKGpzQ29kZUJs
b2NrKSB7Ci0gICAgICAgIC8vIEEgQ29kZUJsb2NrIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGNv
bXBpbGVkLiBJZiBzbywgaXQgbWVhbnMKLSAgICAgICAgLy8gdGhhdCB0aGUgQ29kZUJsb2NrIHdl
IGFyZSB0cnlpbmcgdG8gY29tcGlsZSBtdXN0IGJlIHRoZSBzYW1lCi0gICAgICAgIC8vIGJlY2F1
c2Ugd2Ugd2lsbCBuZXZlciBjb21waWxlIGEgQ29kZUJsb2NrIGFnYWluIG9uY2UgaXQncworICAg
IFJFTEVBU0VfQVNTRVJUKHdhc21DYWxsZWVHcm91cC0+aXNTYWZlVG9SdW4obWVtb3J5TW9kZSgp
KSk7CisgICAgSlNXZWJBc3NlbWJseUNhbGxlZUdyb3VwKiBqc0NhbGxlZUdyb3VwID0gbV9tb2R1
bGUtPmNhbGxlZUdyb3VwKG1lbW9yeU1vZGUoKSk7CisgICAgaWYgKGpzQ2FsbGVlR3JvdXApIHsK
KyAgICAgICAgLy8gQSBDYWxsZWVHcm91cCBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiBjb21waWxl
ZC4gSWYgc28sIGl0IG1lYW5zCisgICAgICAgIC8vIHRoYXQgdGhlIENhbGxlZUdyb3VwIHdlIGFy
ZSB0cnlpbmcgdG8gY29tcGlsZSBtdXN0IGJlIHRoZSBzYW1lCisgICAgICAgIC8vIGJlY2F1c2Ug
d2Ugd2lsbCBuZXZlciBjb21waWxlIGEgQ2FsbGVlR3JvdXAgYWdhaW4gb25jZSBpdCdzCiAgICAg
ICAgIC8vIHJ1bm5hYmxlLgotICAgICAgICBBU1NFUlQoJmpzQ29kZUJsb2NrLT5jb2RlQmxvY2so
KSA9PSB3YXNtQ29kZUJsb2NrLnB0cigpKTsKLSAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0
aGlzLCBqc0NvZGVCbG9jayk7CisgICAgICAgIEFTU0VSVCgmanNDYWxsZWVHcm91cC0+Y2FsbGVl
R3JvdXAoKSA9PSB3YXNtQ2FsbGVlR3JvdXAucHRyKCkpOworICAgICAgICBtX2NhbGxlZUdyb3Vw
LnNldCh2bSwgdGhpcywganNDYWxsZWVHcm91cCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAganND
b2RlQmxvY2sgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGUodm0sIFdURk1vdmUod2Fz
bUNvZGVCbG9jayksIG1vZHVsZSgpLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpKTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKCFqc0NvZGVCbG9jay0+cnVubmFibGUoKSkpIHsKLSAgICAgICAg
ICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwganNDb2RlQmxvY2stPmVycm9yTWVzc2FnZSgp
KSk7CisgICAgICAgIGpzQ2FsbGVlR3JvdXAgPSBKU1dlYkFzc2VtYmx5Q2FsbGVlR3JvdXA6OmNy
ZWF0ZSh2bSwgV1RGTW92ZSh3YXNtQ2FsbGVlR3JvdXApLCBtb2R1bGUoKS0+bW9kdWxlKCkubW9k
dWxlSW5mb3JtYXRpb24oKSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghanNDYWxsZWVHcm91cC0+
cnVubmFibGUoKSkpIHsKKyAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwg
c2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwganND
YWxsZWVHcm91cC0+ZXJyb3JNZXNzYWdlKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMsIGpzQ29kZUJsb2NrKTsKLSAg
ICAgICAgbV9tb2R1bGUtPnNldENvZGVCbG9jayh2bSwgbWVtb3J5TW9kZSgpLCBqc0NvZGVCbG9j
ayk7CisgICAgICAgIG1fY2FsbGVlR3JvdXAuc2V0KHZtLCB0aGlzLCBqc0NhbGxlZUdyb3VwKTsK
KyAgICAgICAgbV9tb2R1bGUtPnNldENhbGxlZUdyb3VwKHZtLCBtZW1vcnlNb2RlKCksIGpzQ2Fs
bGVlR3JvdXApOwogICAgIH0KIAogICAgIC8vIEluIHRoZSBtb2R1bGUgbG9hZGVyIGNhc2UsIHdl
IHdpbGwgaW5pdGlhbGl6ZSBhbGwgbWVtb3J5IG1vZGVzIHdpdGggdGhlIGluaXRpYWwgTExJbnQg
Y29tcGlsYXRpb24KLSAgICAvLyByZXN1bHRzLCBzbyB0aGF0IGxhdGVyIHdoZW4gbWVtb3J5IGlt
cG9ydHMgYmVjb21lIGF2YWlsYWJsZSwgdGhlIGFwcHJvcHJpYXRlIENvZGVCbG9jayBjYW4gYmUg
dXNlZC4KKyAgICAvLyByZXN1bHRzLCBzbyB0aGF0IGxhdGVyIHdoZW4gbWVtb3J5IGltcG9ydHMg
YmVjb21lIGF2YWlsYWJsZSwgdGhlIGFwcHJvcHJpYXRlIENhbGxlZUdyb3VwIGNhbiBiZSB1c2Vk
LgogICAgIC8vIElmIExMSW50IGlzIGRpc2FibGVkLCB3ZSBpbnN0ZWFkIGRlZmVyIGNvbXBpbGF0
aW9uIHRvIG1vZHVsZSBldmFsdWF0aW9uLgogICAgIGJvb2wgaGFzTWVtb3J5SW1wb3J0ID0gbW9k
dWxlKCktPm1vZHVsZUluZm9ybWF0aW9uKCkubWVtb3J5LmlzSW1wb3J0KCk7CiAgICAgaWYgKGNy
ZWF0aW9uTW9kZSA9PSBXYXNtOjpDcmVhdGlvbk1vZGU6OkZyb21Nb2R1bGVMb2FkZXIgJiYgT3B0
aW9uczo6dXNlV2FzbUxMSW50KCkgJiYgaGFzTWVtb3J5SW1wb3J0KSB7CiAgICAgICAgIFdhc206
Ok1lbW9yeU1vZGUgaW5pdGlhbE1vZGUgPSBXYXNtOjpNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2lu
ZzsKICAgICAgICAgQVNTRVJUKG1lbW9yeU1vZGUoKSA9PSBpbml0aWFsTW9kZSk7Ci0gICAgICAg
IG1vZHVsZSgpLT5tb2R1bGUoKS5jb3B5SW5pdGlhbENvZGVCbG9ja1RvQWxsTWVtb3J5TW9kZXMo
aW5pdGlhbE1vZGUpOworICAgICAgICBtb2R1bGUoKS0+bW9kdWxlKCkuY29weUluaXRpYWxDYWxs
ZWVHcm91cFRvQWxsTWVtb3J5TW9kZXMoaW5pdGlhbE1vZGUpOwogCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVzOyBpKyspIHsKICAgICAg
ICAgICAgIGlmIChpID09IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGluaXRpYWxNb2RlKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIFdhc206Ok1lbW9yeU1vZGUgbWVtb3J5
TW9kZSA9IHN0YXRpY19jYXN0PFdhc206Ok1lbW9yeU1vZGU+KGkpOwotICAgICAgICAgICAgUmVm
UHRyPFdhc206OkNvZGVCbG9jaz4gY29kZUJsb2NrID0gbW9kdWxlKCktPm1vZHVsZSgpLmNvZGVC
bG9ja0ZvcihtZW1vcnlNb2RlKTsKLSAgICAgICAgICAgIGpzQ29kZUJsb2NrID0gSlNXZWJBc3Nl
bWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLCBjb2RlQmxvY2sucmVsZWFzZU5vbk51bGwoKSwgbW9k
dWxlKCktPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkpOwotICAgICAgICAgICAgaWYgKFVO
TElLRUxZKCFqc0NvZGVCbG9jay0+cnVubmFibGUoKSkpIHsKLSAgICAgICAgICAgICAgICB0aHJv
d0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yKGdsb2JhbE9iamVjdCwgdm0sIGpzQ29kZUJsb2NrLT5lcnJvck1lc3NhZ2UoKSkpOworICAg
ICAgICAgICAgUmVmUHRyPFdhc206OkNhbGxlZUdyb3VwPiBjYWxsZWVHcm91cCA9IG1vZHVsZSgp
LT5tb2R1bGUoKS5jYWxsZWVHcm91cEZvcihtZW1vcnlNb2RlKTsKKyAgICAgICAgICAgIGpzQ2Fs
bGVlR3JvdXAgPSBKU1dlYkFzc2VtYmx5Q2FsbGVlR3JvdXA6OmNyZWF0ZSh2bSwgY2FsbGVlR3Jv
dXAucmVsZWFzZU5vbk51bGwoKSwgbW9kdWxlKCktPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9u
KCkpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFqc0NhbGxlZUdyb3VwLT5ydW5uYWJsZSgp
KSkgeworICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUs
IGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwganNDYWxsZWVH
cm91cC0+ZXJyb3JNZXNzYWdlKCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBtX21vZHVsZS0+c2V0Q29kZUJsb2NrKHZtLCBtZW1vcnlNb2Rl
LCBqc0NvZGVCbG9jayk7CisgICAgICAgICAgICBtX21vZHVsZS0+c2V0Q2FsbGVlR3JvdXAodm0s
IG1lbW9yeU1vZGUsIGpzQ2FsbGVlR3JvdXApOwogICAgICAgICB9CiAgICAgfQogCiAgICAgZm9y
ICh1bnNpZ25lZCBpbXBvcnRGdW5jdGlvbk51bSA9IDA7IGltcG9ydEZ1bmN0aW9uTnVtIDwgaW5z
dGFuY2UoKS5udW1JbXBvcnRGdW5jdGlvbnMoKTsgKytpbXBvcnRGdW5jdGlvbk51bSkgewogICAg
ICAgICBhdXRvKiBpbmZvID0gaW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlvbkluZm8oaW1wb3J0RnVu
Y3Rpb25OdW0pOwotICAgICAgICBpbmZvLT53YXNtVG9FbWJlZGRlclN0dWIgPSBtX2NvZGVCbG9j
ay0+d2FzbVRvRW1iZWRkZXJTdHViKGltcG9ydEZ1bmN0aW9uTnVtKTsKKyAgICAgICAgaW5mby0+
d2FzbVRvRW1iZWRkZXJTdHViID0gbV9jYWxsZWVHcm91cC0+d2FzbVRvRW1iZWRkZXJTdHViKGlt
cG9ydEZ1bmN0aW9uTnVtKTsKICAgICB9CiAKICAgICBtX21vZHVsZVJlY29yZC0+cHJlcGFyZUxp
bmsodm0sIHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaAppbmRleCA5MTQzZmQ5MmVlZGE1YjEyY2Q2NzRjY2EwN2Vl
MzI2Y2QxZGU4NzVlLi5hZGVlZmE1N2Y3MzE0MDRhM2E5M2Y5YzUzNDJiODA2Yjc0MDQ5M2Q2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaApAQCAtMjgsNyArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAog
I2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWVHcm91cC5oIgogI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlHbG9iYWwuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVt
b3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCkBAIC00NCw3ICs0NCw3IEBA
IGNsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGU7CiBjbGFzcyBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZDsKIAogbmFtZXNwYWNlIFdhc20gewotY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgQ2FsbGVlR3Jv
dXA7CiB9CiAKIGNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSBmaW5hbCA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKQEAgLTY4LDcgKzY4LDcgQEAgY2xhc3MgSlNXZWJBc3NlbWJseUluc3Rh
bmNlIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogCiAgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKIAotICAgIHZvaWQgZmluYWxpemVDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgV2FzbTo6
Q3JlYXRpb25Nb2RlKTsKKyAgICB2b2lkIGZpbmFsaXplQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9i
amVjdCosIFJlZjxXYXNtOjpDYWxsZWVHcm91cD4mJiwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwg
V2FzbTo6Q3JlYXRpb25Nb2RlKTsKICAgICAKICAgICBXYXNtOjpJbnN0YW5jZSYgaW5zdGFuY2Uo
KSB7IHJldHVybiBtX2luc3RhbmNlLmdldCgpOyB9CiAgICAgV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQqIG1vZHVsZVJlY29yZCgpIHsgcmV0dXJuIG1fbW9kdWxlUmVjb3JkLmdldCgpOyB9CkBAIC0x
MTQsNyArMTE0LDcgQEAgY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlIGZpbmFsIDogcHVibGlj
IEpTTm9uRmluYWxPYmplY3QgewogCiAgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0PiBt
X2dsb2JhbE9iamVjdDsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1vZHVsZT4gbV9t
b2R1bGU7Ci0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJs
b2NrOworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlR3JvdXA+IG1fY2FsbGVl
R3JvdXA7CiAgICAgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkPiBtX21vZHVs
ZVJlY29yZDsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1lbW9yeT4gbV9tZW1vcnk7
CiAgICAgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlUYWJsZT4+IG1fdGFi
bGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TW9kdWxlLmNwcAppbmRleCA1NDY3OGM1ZDJhYjMxM2MzMzllNDE5M2EwODk0ZWYyOWExYzc4
NDgwLi5lNjBlNDQxYTMxMDA5ZDIwNjU1ZjEwZmFhNzU4ZWY0YTdmN2ZjYTg4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNw
cApAQCAtMjksNyArMjksNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCisjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZUdyb3VwLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eUNvbXBpbGVFcnJvci5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNt
TW9kdWxlLmgiCkBAIC0xMDksOSArMTA5LDkgQEAgV2FzbTo6U2lnbmF0dXJlSW5kZXggSlNXZWJB
c3NlbWJseU1vZHVsZTo6c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHUKICAg
ICByZXR1cm4gbV9tb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShm
dW5jdGlvbkluZGV4U3BhY2UpOwogfQogCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dlYkFz
c2VtYmx5TW9kdWxlOjpjb2RlQmxvY2soV2FzbTo6TWVtb3J5TW9kZSBtb2RlKQorSlNXZWJBc3Nl
bWJseUNhbGxlZUdyb3VwKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjYWxsZWVHcm91cChXYXNtOjpN
ZW1vcnlNb2RlIG1vZGUpCiB7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxz
aXplX3Q+KG1vZGUpXS5nZXQoKTsKKyAgICByZXR1cm4gbV9jYWxsZWVHcm91cHNbc3RhdGljX2Nh
c3Q8c2l6ZV90Pihtb2RlKV0uZ2V0KCk7CiB9CiAKIFdhc206Ok1vZHVsZSYgSlNXZWJBc3NlbWJs
eU1vZHVsZTo6bW9kdWxlKCkKQEAgLTExOSw5ICsxMTksOSBAQCBXYXNtOjpNb2R1bGUmIEpTV2Vi
QXNzZW1ibHlNb2R1bGU6Om1vZHVsZSgpCiAgICAgcmV0dXJuIG1fbW9kdWxlLmdldCgpOwogfQog
Ci12b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNldENvZGVCbG9jayhWTSYgdm0sIFdhc206Ok1l
bW9yeU1vZGUgbW9kZSwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKQordm9pZCBK
U1dlYkFzc2VtYmx5TW9kdWxlOjpzZXRDYWxsZWVHcm91cChWTSYgdm0sIFdhc206Ok1lbW9yeU1v
ZGUgbW9kZSwgSlNXZWJBc3NlbWJseUNhbGxlZUdyb3VwKiBjYWxsZWVHcm91cCkKIHsKLSAgICBt
X2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV0uc2V0KHZtLCB0aGlzLCBjb2Rl
QmxvY2spOworICAgIG1fY2FsbGVlR3JvdXBzW3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSldLnNl
dCh2bSwgdGhpcywgY2FsbGVlR3JvdXApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgpAQCAtMTMzLDcgKzEzMyw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9leHBvcnRTeW1ib2xUYWJsZSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IFdhc206Ok51bWJlck9mTWVtb3J5TW9kZXM7ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9jb2RlQmxvY2tzW2ldKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9jYWxsZWVHcm91cHNbaV0pOwogfQogCiBERUZJTkVfVklTSVRfQ0hJTERSRU4o
SlNXZWJBc3NlbWJseU1vZHVsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5kZXggYTZkNjRlZTM0NWZiYzdhNDNjZTFjNWU0
Y2EzZDc3NzI0YTAwM2NjOS4uOTZkMTU2ZjRiYjk1YWQyODc3ZTI0ZDI5ZWIxMDAzODUxNmFkY2Jm
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNb2R1bGUuaApAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBQbGFuOwogfQogCiBjbGFzcyBTeW1i
b2xUYWJsZTsKLWNsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s7CitjbGFzcyBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlR3JvdXA7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TWVtb3J5OwogCiBjbGFzcyBKU1dl
YkFzc2VtYmx5TW9kdWxlIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewpAQCAtNzAs
MTMgKzcwLDEzIEBAIGNsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGUgZmluYWwgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CiAgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlKCkgY29u
c3Q7CiAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3Q7CiAKLSAgICBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soV2FzbTo6TWVtb3J5TW9kZSBtb2RlKTsKLSAg
ICB2b2lkIHNldENvZGVCbG9jayhWTSYsIFdhc206Ok1lbW9yeU1vZGUsIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2sqKTsKKyAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlR3JvdXAqIGNhbGxlZUdyb3VwKFdh
c206Ok1lbW9yeU1vZGUpOworICAgIHZvaWQgc2V0Q2FsbGVlR3JvdXAoVk0mLCBXYXNtOjpNZW1v
cnlNb2RlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlR3JvdXAqKTsKIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIFdhc206Ok1vZHVsZSYgbW9kdWxlKCk7CiAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNz
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s7CisgICAgZnJpZW5kIGNsYXNzIEpTV2ViQXNzZW1ibHlD
YWxsZWVHcm91cDsKIAogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqLCBS
ZWY8V2FzbTo6TW9kdWxlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CkBAIC04
NCw3ICs4NCw3IEBAIGNsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGUgZmluYWwgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CiAKICAgICBSZWY8V2FzbTo6TW9kdWxlPiBtX21vZHVsZTsKICAgICBX
cml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fZXhwb3J0U3ltYm9sVGFibGU7Ci0gICAgV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2Nrc1tXYXNtOjpOdW1iZXJP
Zk1lbW9yeU1vZGVzXTsKKyAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZUdyb3Vw
PiBtX2NhbGxlZUdyb3Vwc1tXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVzXTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAppbmRleCBmNDY0YTdhMDA0NWY2Y2VlNDg1ODc2NWEzMzE3
YmFmZDI4YTJjYTM3Li4yYjkyNzU5M2I0M2Y0NjBhOGFhYjcxNjEwNjBlNWRkNzRkYjQ3YjZmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmNwcApAQCAtNjcsNyArNjcsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2Fs
bFdlYkFzc2VtYmx5RnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAg
IGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUg
bWVtb3J5IHdlIHRoaW5rIHdlIGFyZSBnb2luZyB0byBydW4gd2l0aCBtYXRjaGVzIHRoZSBvbmUg
d2UgZXhwZWN0LgotICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmluc3RhbmNl
KCkuY29kZUJsb2NrKCktPmlzU2FmZVRvUnVuKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+bWVt
b3J5KCktPm1lbW9yeSgpLm1vZGUoKSkpOworICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3Rh
bmNlKCktPmluc3RhbmNlKCkuY2FsbGVlR3JvdXAoKS0+aXNTYWZlVG9SdW4od2FzbUZ1bmN0aW9u
LT5pbnN0YW5jZSgpLT5tZW1vcnkoKS0+bWVtb3J5KCkubW9kZSgpKSk7CiAKICAgICBzdGQ6Om9w
dGlvbmFsPFRyYWNlU2NvcGU+IHRyYWNlU2NvcGU7CiAgICAgaWYgKE9wdGlvbnM6OnVzZVRyYWNl
UG9pbnRzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKaW5kZXggYTM3N2ZlNTMwMjFlMDkyMGZjOGY0MGUx
M2Y2MTNkMDRiYzRhODdmNi4uNmFhZDYyMTcyYmQ5NTYyYmVkODM0ZjYwNTRlNzdjMTE2NGFjN2Rk
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmNwcApAQCAtNDQyLDEzICs0NDIsMTMgQEAgdm9pZCBXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6ZUltcG9ydHNBbmRFeHBvcnRzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWwKICAgICAgICAgICAgIC8vIHJ1bm5hYmxlIGR1ZSB0byB0aGUgTExpbnQgdGll
ciBjb2RlIGJlaW5nIHNoYXJlZCBhbW9uZyBhbGwgbW9kZXMuIEhvd2V2ZXIsCiAgICAgICAgICAg
ICAvLyBpZiBMTEludCBpcyBkaXNhYmxlZCwgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgY29kZSBu
ZWVkcyB0byBiZSBjb21waWxlZCBhdAogICAgICAgICAgICAgLy8gdGhpcyBwb2ludCB3aGVuIHdl
IGtub3cgd2hpY2ggbWVtb3J5IG1vZGUgdG8gdXNlLgotICAgICAgICAgICAgV2FzbTo6Q29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLmNvZGVCbG9jaygpOwotICAg
ICAgICAgICAgaWYgKCFjb2RlQmxvY2sgfHwgIWNvZGVCbG9jay0+cnVubmFibGUoKSkgewotICAg
ICAgICAgICAgICAgIGNvZGVCbG9jayA9IG1faW5zdGFuY2UtPm1vZHVsZSgpLT5tb2R1bGUoKS5j
b21waWxlU3luYygmdm0ud2FzbUNvbnRleHQsIG1lbW9yeS0+bWVtb3J5KCkubW9kZSgpKS5wdHIo
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvZGVCbG9jay0+cnVubmFibGUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9y
KGdsb2JhbE9iamVjdCwgdm0sIGNvZGVCbG9jay0+ZXJyb3JNZXNzYWdlKCkpKTsKKyAgICAgICAg
ICAgIFdhc206OkNhbGxlZUdyb3VwKiBjYWxsZWVHcm91cCA9IG1faW5zdGFuY2UtPmluc3RhbmNl
KCkuY2FsbGVlR3JvdXAoKTsKKyAgICAgICAgICAgIGlmICghY2FsbGVlR3JvdXAgfHwgIWNhbGxl
ZUdyb3VwLT5ydW5uYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgY2FsbGVlR3JvdXAgPSBtX2lu
c3RhbmNlLT5tb2R1bGUoKS0+bW9kdWxlKCkuY29tcGlsZVN5bmMoJnZtLndhc21Db250ZXh0LCBt
ZW1vcnktPm1lbW9yeSgpLm1vZGUoKSkucHRyKCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxs
ZWVHcm91cC0+cnVubmFibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlv
bihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9iamVjdCwgdm0sIGNhbGxlZUdy
b3VwLT5lcnJvck1lc3NhZ2UoKSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoY29kZUJsb2NrLT5pc1NhZmVUb1J1bihtZW1vcnktPm1lbW9yeSgpLm1vZGUoKSkp
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlR3JvdXAtPmlzU2FmZVRvUnVuKG1l
bW9yeS0+bWVtb3J5KCkubW9kZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgIH0KQEAgLTQ3NiwxNCArNDc2LDE0IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmluaXRpYWxpemVJbXBvcnRzQW5kRXhwb3J0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAgICAg
fQogCiAgICAgLy8gVGhpcyBuZWVkcyB0byBiZSBsb29rZWQgdXAgYWZ0ZXIgdGhlIG1lbW9yeSBp
cyBpbml0aWFsaXplZCwgYXMgdGhlIGNvZGVCbG9jayBkZXBlbmRzIG9uIHRoZSBtZW1vcnkgbW9k
ZS4KLSAgICBXYXNtOjpDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1faW5zdGFuY2UtPmluc3RhbmNl
KCkuY29kZUJsb2NrKCk7CisgICAgV2FzbTo6Q2FsbGVlR3JvdXAqIGNhbGxlZUdyb3VwID0gbV9p
bnN0YW5jZS0+aW5zdGFuY2UoKS5jYWxsZWVHcm91cCgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBp
bmRleCA9IDA7IGluZGV4IDwgbW9kdWxlSW5mb3JtYXRpb24uaW50ZXJuYWxFeGNlcHRpb25TaWdu
YXR1cmVJbmRpY2VzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBXYXNtOjpTaWduYXR1cmVJ
bmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmludGVybmFsRXhjZXB0aW9u
U2lnbmF0dXJlSW5kaWNlc1tpbmRleF07CiAgICAgICAgIG1faW5zdGFuY2UtPmluc3RhbmNlKCku
c2V0VGFnKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEV4Y2VwdGlvbkNvdW50KCkgKyBpbmRleCwg
V2FzbTo6VGFnOjpjcmVhdGUoV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1
cmVJbmRleCkpKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50ID0g
Y29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCk7CisgICAgdW5zaWduZWQgZnVuY3Rpb25J
bXBvcnRDb3VudCA9IGNhbGxlZUdyb3VwLT5mdW5jdGlvbkltcG9ydENvdW50KCk7CiAgICAgYXV0
byBtYWtlRnVuY3Rpb25XcmFwcGVyID0gWyZdICh1aW50MzJfdCBpbmRleCkgLT4gSlNWYWx1ZSB7
CiAgICAgICAgIC8vIElmIHdlIGFscmVhZHkgbWFkZSBhIHdyYXBwZXIsIGRvIG5vdCBtYWtlIGEg
bmV3IG9uZS4KICAgICAgICAgSlNWYWx1ZSB3cmFwcGVyID0gbV9pbnN0YW5jZS0+aW5zdGFuY2Uo
KS5nZXRGdW5jdGlvbldyYXBwZXIoaW5kZXgpOwpAQCAtNTA3LDggKzUwNyw4IEBAIHZvaWQgV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxpemVJbXBvcnRzQW5kRXhwb3J0cyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsCiAgICAgICAgICAgICAvLyAgICAgYS4gTGV0IGZ1bmMgYmUgYW4gRXhw
b3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdCBjcmVhdGVkIGZyb20gYy4KICAgICAgICAgICAg
IC8vICAgICBiLiBBcHBlbmQgZnVuYyB0byBmdW5jcy4KICAgICAgICAgICAgIC8vICAgICBjLiBS
ZXR1cm4gZnVuYy4KLSAgICAgICAgICAgIFdhc206OkNhbGxlZSYgZW1iZWRkZXJFbnRyeXBvaW50
Q2FsbGVlID0gY29kZUJsb2NrLT5lbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGluZGV4KTsKLSAgICAgICAgICAgIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uID0gY29kZUJsb2Nr
LT5lbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7Cisg
ICAgICAgICAgICBXYXNtOjpDYWxsZWUmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IGNhbGxl
ZUdyb3VwLT5lbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGlu
ZGV4KTsKKyAgICAgICAgICAgIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Okxv
YWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uID0gY2FsbGVlR3JvdXAtPmVudHJ5cG9p
bnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKICAgICAgICAgICAg
IFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJ
bmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOwogICAgICAgICAgICAgY29uc3QgV2Fz
bTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0
aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpLCBzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpLCBtYWtlU3RyaW5nKGluZGV4KSwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJF
bnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7
CkBAIC02NTIsMTIgKzY1MiwxMiBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjppbml0
aWFsaXplSW1wb3J0c0FuZEV4cG9ydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbAogICAgICAgICAv
LyBUaGUgc3RhcnQgZnVuY3Rpb24gbXVzdCBub3QgdGFrZSBhbnkgYXJndW1lbnRzIG9yIHJldHVy
biBhbnl0aGluZy4gVGhpcyBpcyBlbmZvcmNlZCBieSB0aGUgcGFyc2VyLgogICAgICAgICBBU1NF
UlQoIXNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOwogICAgICAgICBBU1NFUlQoc2lnbmF0dXJl
LnJldHVybnNWb2lkKCkpOwotICAgICAgICBpZiAoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPCBj
b2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgeworICAgICAgICBpZiAoc3RhcnRGdW5j
dGlvbkluZGV4U3BhY2UgPCBjYWxsZWVHcm91cC0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpKSB7CiAg
ICAgICAgICAgICBKU09iamVjdCogc3RhcnRGdW5jdGlvbiA9IG1faW5zdGFuY2UtPmluc3RhbmNl
KCkuaW1wb3J0RnVuY3Rpb248V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pj4oc3RhcnRGdW5jdGlvbklu
ZGV4U3BhY2UpLT5nZXQoKTsKICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRo
aXMsIHN0YXJ0RnVuY3Rpb24pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgV2FzbTo6
Q2FsbGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmVtYmVkZGVyRW50
cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3Bh
Y2UpOwotICAgICAgICAgICAgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9h
ZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPmVudHJ5cG9pbnRM
b2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNl
KTsKKyAgICAgICAgICAgIFdhc206OkNhbGxlZSYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlID0g
Y2FsbGVlR3JvdXAtPmVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3Bh
Y2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOworICAgICAgICAgICAgV2FzbTo6V2FzbVRvV2Fz
bUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24g
PSBjYWxsZWVHcm91cC0+ZW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3Bh
Y2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwogICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5j
dGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCksICJzdGFydCIsIG1faW5zdGFuY2UuZ2V0KCksIGVtYmVkZGVy
RW50cnlwb2ludENhbGxlZSwgZW50cnlwb2ludExvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgp
OwogICAgICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwog
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAppbmRleCA4YzdhZTZkZWM3MmU5ZmY2MDczNDhk
ZTVhNWMwMDBlM2E5NDZhZjY0Li5kNDkwMmQyMWJlZjEwNTM0NGRjYTYyZTQzYjBkY2M0Y2ZiODI5
Yzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCIKKyNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlR3JvdXAuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJs
eUZ1bmN0aW9uQmFzZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
</data>
<flag name="review"
          id="472893"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>