<?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>234999</bug_id>
          
          <creation_ts>2022-01-07 18:28:53 -0800</creation_ts>
          <short_desc>Remove support for Direct2D / FTW</short_desc>
          <delta_ts>2022-01-11 21:14:00 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=235097</see_also>
          <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>
          
          <blocked>235054</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kbr</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>msaboff</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1829178</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-07 18:28:53 -0800</bug_when>
    <thetext>Remove support for Direct2D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829182</commentid>
    <comment_count>1</comment_count>
      <attachid>448658</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-07 18:40:10 -0800</bug_when>
    <thetext>Created attachment 448658
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829183</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2022-01-07 18:41:41 -0800</bug_when>
    <thetext>Note that there are important steps to take when updating ANGLE. See https://trac.webkit.org/wiki/UpdatingANGLE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829224</commentid>
    <comment_count>3</comment_count>
      <attachid>448671</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-08 09:44:57 -0800</bug_when>
    <thetext>Created attachment 448671
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829226</commentid>
    <comment_count>4</comment_count>
      <attachid>448672</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-08 10:13:27 -0800</bug_when>
    <thetext>Created attachment 448672
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829232</commentid>
    <comment_count>5</comment_count>
      <attachid>448673</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-08 10:40:00 -0800</bug_when>
    <thetext>Created attachment 448673
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829239</commentid>
    <comment_count>6</comment_count>
      <attachid>448675</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-08 11:13:14 -0800</bug_when>
    <thetext>Created attachment 448675
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829266</commentid>
    <comment_count>7</comment_count>
      <attachid>448687</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-08 17:29:48 -0800</bug_when>
    <thetext>Created attachment 448687
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829271</commentid>
    <comment_count>8</comment_count>
      <attachid>448691</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-08 18:09:25 -0800</bug_when>
    <thetext>Created attachment 448691
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829324</commentid>
    <comment_count>9</comment_count>
      <attachid>448709</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-09 09:43:07 -0800</bug_when>
    <thetext>Created attachment 448709
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829325</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-09 09:45:29 -0800</bug_when>
    <thetext>Brent, I believe you added the FTW build, so I want to double check that you are on board with this (my memory is that the last time I asked you were).

The code has not built in a long time at this point, and has bit-rotted quite a bit. I keep accidentally trying to make changes in Direct2D files as part of refactors only to realize they don&apos;t actually compile at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829358</commentid>
    <comment_count>11</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2022-01-09 13:15:47 -0800</bug_when>
    <thetext>(In reply to Sam Weinig from comment #10)
&gt; Brent, I believe you added the FTW build, so I want to double check that you
&gt; are on board with this (my memory is that the last time I asked you were).
&gt; 
&gt; The code has not built in a long time at this point, and has bit-rotted
&gt; quite a bit. I keep accidentally trying to make changes in Direct2D files as
&gt; part of refactors only to realize they don&apos;t actually compile at all.

Yes, this was a cool idea that I can’t work on at a meaningful level, and that no one else wanted to help with. The code will always be available in the repo, so we could revive it if someone wanted to do so.

Please remove this old code.

Thank you for doing this work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829371</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-01-09 19:40:44 -0800</bug_when>
    <thetext>Committed r287829 (245881@main): &lt;https://commits.webkit.org/245881@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 448709.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829372</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-09 19:41:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/87320559&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448658</attachid>
            <date>2022-01-07 18:40:10 -0800</date>
            <delta_ts>2022-01-08 09:44:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234999-20220107184008.patch</filename>
            <type>text/plain</type>
            <size>481241</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI4Nzgw
MykKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAx
LTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3Vw
cG9ydCBmb3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2U6IFJlbW92ZWQuCisKIDIw
MjItMDEtMDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI4NzY5OC4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAxLTA3ICBTYW0g
V2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3Ig
RGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIFNhYW0gQmFyYXRp
ICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIFdhc20gZXhj
ZXB0aW9ucyBpbiB0aGUgQWlyIGdlbmVyYXRvcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Q
bGF0Zm9ybUZUVy5jbWFrZQkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL1BsYXRmb3JtRlRXLmNtYWtlCShub25leGlzdGVudCkKQEAgLTEsNDQgKzAsMCBAQAotbGlz
dChBUFBFTkQgSmF2YVNjcmlwdENvcmVfU09VUkNFUwotICAgIEFQSS9KU1N0cmluZ1JlZkJTVFIu
Y3BwCi0pCi0KLWxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1BVQkxJQ19GUkFNRVdPUktfSEVB
REVSUwotICAgIEFQSS9KU1N0cmluZ1JlZkJTVFIuaAotICAgIEFQSS9KYXZhU2NyaXB0Q29yZS5o
Ci0pCi0KLWlmIChVU0VfQ0YpCi0gICAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfU09VUkNF
UwotICAgICAgICBBUEkvSlNTdHJpbmdSZWZDRi5jcHAKLSAgICApCi0KLSAgICBsaXN0KEFQUEVO
RCBKYXZhU2NyaXB0Q29yZV9QVUJMSUNfRlJBTUVXT1JLX0hFQURFUlMKLSAgICAgICAgQVBJL0pT
U3RyaW5nUmVmQ0YuaAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX0xJ
QlJBUklFUwotICAgICAgICAke0NPUkVGT1VOREFUSU9OX0xJQlJBUll9Ci0gICAgKQotZW5kaWYg
KCkKLQotaWYgKE5PVCBXVEZfUExBVEZPUk1fV0lOX0NBSVJPKQotICAgIGxpc3QoQVBQRU5EIEph
dmFTY3JpcHRDb3JlX0xJQlJBUklFUwotICAgICAgICB3aW5tbQotICAgICkKLWVuZGlmICgpCi0K
LWlmIChFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUikKLSAgICBpbmNsdWRlKGlucHNlY3Rvci9yZW1v
dGUvU29ja2V0LmNtYWtlKQotZWxzZSAoKQotICAgIGxpc3QoUkVNT1ZFX0lURU0gSmF2YVNjcmlw
dENvcmVfU09VUkNFUwotICAgICAgICBpbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JD
b250cm9sbGVyLmNwcAotICAgICkKLWVuZGlmICgpCi0KLWZpbGUoQ09QWQotICAgICIke0pBVkFT
Q1JJUFRDT1JFX0RJUn0vSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS5yZXNv
dXJjZXMiCi0gICAgREVTVElOQVRJT04KLSAgICAke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVD
VE9SWX0KLSkKLQotc2V0KEphdmFTY3JpcHRDb3JlX09VVFBVVF9OQU1FIEphdmFTY3JpcHRDb3Jl
JHtERUJVR19TVUZGSVh9KQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkocmV2aXNp
b24gMjg3ODAzKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjItMDEtMDcgIFNhbSBXZWluaWcgIDx3ZWluaWdA
YXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBEaXJlY3QyRAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0OTk5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybUZUVy5j
bWFrZTogUmVtb3ZlZC4KKwogMjAyMi0wMS0wNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjg3Njk4
LgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvUGxhdGZvcm1GVFcuY21ha2UKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvUGxhdGZvcm1GVFcuY21ha2UJKHJldmlz
aW9uIDI4NzgwMykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL1BsYXRmb3JtRlRXLmNtYWtl
CShub25leGlzdGVudCkKQEAgLTEsMzUgKzAsMCBAQAotIyBXZSdyZSB0YXJnZXRpbmcgV2luZG93
cyAxMCB3aGljaCB3aWxsIGhhdmUgRGlyZWN0WCAxMSBvbiBpdCBzbyByZXF1aXJlIHRoYXQKLSMg
YnV0IG1ha2UgRGlyZWN0WCA5IG9wdGlvbmFsCi0KLWxpc3QoQVBQRU5EIEFOR0xFX0RFRklOSVRJ
T05TCi0gICAgR0xfQVBJQ0FMTD0KLSAgICBHTF9BUEk9Ci0gICAgTk9NSU5NQVgKLSkKLQotIyBX
ZSdyZSB0YXJnZXRpbmcgV2luZG93cyAxMCB3aGljaCB3aWxsIGhhdmUgRGlyZWN0WCAxMQotbGlz
dChBUFBFTkQgQU5HTEVfU09VUkNFUwotICAgICR7X2QzZDExX2JhY2tlbmRfc291cmNlc30KLSAg
ICAke19kM2Rfc2hhcmVkX3NvdXJjZXN9Ci0KLSAgICAke2FuZ2xlX3RyYW5zbGF0b3JfaGxzbF9z
b3VyY2VzfQotCi0gICAgJHtsaWJhbmdsZV9ncHVfaW5mb191dGlsX3NvdXJjZXN9Ci0gICAgJHts
aWJhbmdsZV9ncHVfaW5mb191dGlsX3dpbl9zb3VyY2VzfQotKQotCi1saXN0KEFQUEVORCBBTkdM
RV9ERUZJTklUSU9OUwotICAgIEFOR0xFX0VOQUJMRV9EM0QxMQotICAgIEFOR0xFX0VOQUJMRV9I
TFNMCi0pCi0KLWxpc3QoQVBQRU5EIEFOR0xFR0xFU3YyX0xJQlJBUklFUyBkeGd1aWQgZHhnaSkK
LQotIyBEaXJlY3RYIDkgc3VwcG9ydCBzaG91bGQgYmUgb3B0aW9uYWwgYnV0IEFOR0xFIHdpbGwg
bm90IGNvbXBpbGUgd2l0aG91dCBpdAotbGlzdChBUFBFTkQgQU5HTEVfU09VUkNFUyAke19kM2Q5
X2JhY2tlbmRfc291cmNlc30pCi1saXN0KEFQUEVORCBBTkdMRV9ERUZJTklUSU9OUyBBTkdMRV9F
TkFCTEVfRDNEOSkKLWxpc3QoQVBQRU5EIEFOR0xFR0xFU3YyX0xJQlJBUklFUyBkM2Q5KQotCi0j
IFVzZSBzaGFyZWQgbGlicmFyaWVzCi1zZXQoR0xFU3YyX0xJQlJBUllfVFlQRSBTSEFSRUQpCi1z
ZXQoRUdMX0xJQlJBUllfVFlQRSBTSEFSRUQpCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjg3ODAzKQorKysg
U291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAy
Mi0wMS0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3Zl
IHN1cHBvcnQgZm9yIERpcmVjdDJECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzQ5OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybUZUVy5jbWFrZTogUmVtb3ZlZC4KKwogMjAyMi0w
MS0wNyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZG9wdCBsaW5rZWRPbk9yQWZ0ZXIoKSBpbiBtb3JlIHBsYWNlcwpJbmRleDogU291cmNlL1dURi93
dGYvUGxhdGZvcm1GVFcuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZv
cm1GVFcuY21ha2UJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
RlRXLmNtYWtlCShub25leGlzdGVudCkKQEAgLTEsNjEgKzAsMCBAQAotbGlzdChBUFBFTkQgV1RG
X1BVQkxJQ19IRUFERVJTCi0gICAgdGV4dC93aW4vV0NoYXJTdHJpbmdFeHRyYXMuaAotCi0gICAg
d2luL0RiZ0hlbHBlcldpbi5oCi0gICAgd2luL0dESU9iamVjdC5oCi0gICAgd2luL1NvZnRMaW5r
aW5nLmgKLSAgICB3aW4vV2luMzJIYW5kbGUuaAotKQotCi1saXN0KEFQUEVORCBXVEZfUFJJVkFU
RV9MSUJSQVJJRVMKLSAgICBEYmdoZWxwICMgRm9yIHN5bWJvbCBoYW5kbGluZyA8ZGJnaGVscC5o
PgotICAgIFNobHdhcGkgIyBGb3IgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyA8c2hsd2FwaS5oPgot
KQotCi1saXN0KEFQUEVORCBXVEZfTElCUkFSSUVTCi0gICAgIFdpbm1tICMgRm9yIG11bHRpbWVk
aWEgZnVuY3Rpb25zLCBhbHNvIHVzZWQgaW4gPHRpbWVhcGkuaD4KLSkKLQotbGlzdChBUFBFTkQg
V1RGX1NPVVJDRVMKLSAgICB0ZXh0L3dpbi9TdHJpbmdXaW4uY3BwCi0gICAgdGV4dC93aW4vVGV4
dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVVdpbi5jcHAKLQotICAgIHdpbi9DUFVUaW1lV2luLmNw
cAotICAgIHdpbi9EYmdIZWxwZXJXaW4uY3BwCi0gICAgd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCi0g
ICAgd2luL0xhbmd1YWdlV2luLmNwcAotICAgIHdpbi9Mb2dnaW5nV2luLmNwcAotICAgIHdpbi9N
YWluVGhyZWFkV2luLmNwcAotICAgIHdpbi9NZW1vcnlGb290cHJpbnRXaW4uY3BwCi0gICAgd2lu
L01lbW9yeVByZXNzdXJlSGFuZGxlcldpbi5jcHAKLSAgICB3aW4vT1NBbGxvY2F0b3JXaW4uY3Bw
Ci0gICAgd2luL1BhdGhXYWxrZXIuY3BwCi0gICAgd2luL1J1bkxvb3BXaW4uY3BwCi0gICAgd2lu
L1RocmVhZGluZ1dpbi5jcHAKLSAgICB3aW4vV29ya1F1ZXVlV2luLmNwcAotKQotCi1pZiAoVVNF
X0NGKQotICAgIGxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwotICAgICAgICBjZi9DRlVS
TEV4dHJhcy5oCi0gICAgICAgIGNmL1NwYW5DRi5oCi0gICAgICAgIGNmL1R5cGVDYXN0c0NGLmgK
LQotICAgICAgICB0ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaAotICAgICAgICB0ZXh0L2Nm
L1RleHRCcmVha0l0ZXJhdG9yQ0YuaAotICAgICkKLSAgICBsaXN0KEFQUEVORCBXVEZfU09VUkNF
UwotICAgICAgICBjZi9DRlVSTEV4dHJhcy5jcHAKLSAgICAgICAgY2YvRmlsZVN5c3RlbUNGLmNw
cAotICAgICAgICBjZi9VUkxDRi5jcHAKLQotICAgICAgICB0ZXh0L2NmL0F0b21TdHJpbmdJbXBs
Q0YuY3BwCi0gICAgICAgIHRleHQvY2YvU3RyaW5nQ0YuY3BwCi0gICAgICAgIHRleHQvY2YvU3Ry
aW5nSW1wbENGLmNwcAotICAgICAgICB0ZXh0L2NmL1N0cmluZ1ZpZXdDRi5jcHAKLSAgICApCi0K
LSAgICBsaXN0KEFQUEVORCBXVEZfTElCUkFSSUVTICR7Q09SRUZPVU5EQVRJT05fTElCUkFSWX0p
Ci1lbmRpZiAoKQotCi1zZXQoV1RGX09VVFBVVF9OQU1FIFdURiR7REVCVUdfU1VGRklYfSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBAQAorMjAyMi0wMS0wNyAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIERpcmVj
dDJECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5
OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21ha2U6Cisg
ICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQuCisgICAgICAgICogUGxhdGZvcm1X
aW4uY21ha2U6CisgICAgICAgICogcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5j
cHA6CisgICAgICAgICogcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5oOgorICAg
ICAgICAqIHBhZ2Uvd2luL0ZyYW1lV2luRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5
cGVSZWdpc3RyeTo6Y3JlYXRlTUlNRVR5cGVSZWdpc3RyeVRocmVhZEdsb2JhbERhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnByZVRyYW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmg6
CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpkd0ZvbnQgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6ZHdGb250RmFjZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2
ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6cHJlVHJhbnNmb3JtZWROYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bmF0aXZlSW1hZ2VP
ZlNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kZXI6OnN1cHBvcnRzTWVkaWFUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0VGFyZ2V0Q29u
dGV4dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YXRoOjpsZW5ndGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkUm91bmRlZFJl
Y3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1JbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VC
dWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVy
QmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9D
RE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0RNU2Vzc2lv
bkFWRm91bmRhdGlvbkNGOjpnZW5lcmF0ZUtleVJlcXVlc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25D
Ri5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25D
Rjo6cGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZHJhd1BERlBhZ2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVN
YXRoRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcGVuVHlwZU1hdGhEYXRhOjpPcGVuVHlw
ZU1hdGhEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlw
ZVV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW5hbWVBbmRBY3RpdmF0ZUZvbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZUdMLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2Vu
ZERpcmVjdDJESW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlckRpcmVjdFdy
aXRlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxl
eFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0
ZVV0aWxpdGllcy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
bG9hdFBvaW50RGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9GbG9hdFJlY3REaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0Zsb2F0U2l6ZURpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRm
b3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURh
dGFEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERp
cmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJEaXJlY3QyRC5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJEaXJlY3QyRC5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGly
ZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRo
RGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Q
YXR0ZXJuRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhRGlyZWN0MkQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJI
ZWxwZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0
QW5hbHl6ZXJIZWxwZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vd2luL0RyYWdJbWFnZURpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyRmlsdGVyczo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZSk6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
Rm9yQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlRm9yQ29udGFpbmVy
OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlRm9yQ29udGFpbmVyLmg6CisKIDIwMjItMDEtMDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIEZ1bGxzY3JlZW5NYW5hZ2Vy
OjpyZXF1ZXN0RnVsbHNjcmVlbkZvckVsZW1lbnQgbW9yZSByb2J1c3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtNzEsMTI5ICs3
MSwxMDIgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRQogICAgIHBs
YXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCiApCiAKLWlmICgke1VT
RV9ESVJFQ1QyRH0pCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElS
RUNUT1JJRVMKLSAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3dpbiIK
LSAgICApCi0KLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAgcGFnZS93
aW4vRnJhbWVXaW5EaXJlY3QyRC5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udENhc2NhZGVEaXJlY3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0xheWVyRGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05h
dGl2ZUltYWdlRGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRo
RGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0
MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVj
dDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVy
LmNwcAotCi0gICAgICAgIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VEaXJlY3QyRC5jcHAKLSAgICAp
Ci1lbHNlICgpCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNU
T1JJRVMKLSAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbiIKLSAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9jZiIKLSAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2NhIgot
ICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luIgotICAgICAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2ciCi0gICAgKQotCi0gICAgbGlz
dChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgICAgIHBhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3Bw
Ci0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAotICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuY3BwCi0gICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvVGlsZUNvbnRyb2xsZXIuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1Rp
bGVDb3ZlcmFnZU1hcC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQu
Y3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0Eu
Y3BwCi0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0
LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vTGF5ZXJDaGFuZ2VzRmx1c2hl
ci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRp
b25XaW4uY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBRmls
dGVyc1dpbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FM
YXllcldpbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV0tD
QUNGVmlld0xheWVyVHJlZUhvc3QuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9Db2xvckNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNl
Q0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCi0gICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFkaWVudENHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVu
dFJlbmRlcmVyQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dEdMQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3Bw
Ci0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCi0g
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dXaW4uY3BwCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ludFJlY3RDRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50
U2l6ZUNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNw
cAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAotICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvU3Vi
aW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVHJh
bnNmb3JtYXRpb25NYXRyaXhDRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJ
UmVnaXN0cnkuY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENh
c2NhZGVDb3JlVGV4dC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9u
dENvcmVUZXh0LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250UGxh
dGZvcm1EYXRhQ29yZVRleHQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0
L0dseXBoUGFnZUNvcmVUZXh0LmNwcAotCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50
eXBlL09wZW5UeXBlQ0cuY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
R1dpbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFD
R1dpbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENH
V2luLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCi0KLSAg
ICAgICAgcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcAotICAgICkKLQotICAgIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9MYXllclBvb2wuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNB
QW5pbWF0aW9uLmgKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUZpbHRl
cnMuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAotICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ29udHJvbGxlci5oCi0KLSAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL0Fic3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QuaAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuaAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3RDbGllbnQuaAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKLQotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNlQ0cuaAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5oCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3Vy
ZmFjZVBvb2wuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmgKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmgKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5oCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
aAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCi0gICAgKQotZW5k
aWYgKCkKK2xpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbiIKKyAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmIgorICAgICIk
e1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jYSIKKyAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9n
cmFwaGljcy9jZyIKKykKKworbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGFnZS93
aW4vRnJhbWVDR1dpbi5jcHAKKworICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5
ZXJDQS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuY3BwCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL1RpbGVDb250cm9sbGVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVD
b3ZlcmFnZU1hcC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlR3JpZC5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9UcmFuc2Zvcm1hdGlvbk1hdHJpeENBLmNwcAorCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9MYXllckNoYW5nZXNGbHVzaGVyLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBRmlsdGVyc1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vV0tDQUNGVmlld0xheWVyVHJlZUhvc3QuY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAorCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xv
clNwYWNlQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRp
ZW50Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29k
ZXJDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW50UmVjdENHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFNpemVD
Ry5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUGF0aENHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwCisKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
dGV4dC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCisKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVudHlwZS9PcGVuVHlwZUNHLmNwcAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
R1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2lu
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5jcHAKKworICAgIHBsYXRmb3JtL3dpbi9E
cmFnSW1hZ2VDR1dpbi5jcHAKKykKKworbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuaAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1Bs
YXRmb3JtQ0FGaWx0ZXJzLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5
ZXIuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllckNsaWVudC5oCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUNvbnRyb2xsZXIuaAorCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL0Fic3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QuaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0Q2xpZW50LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKKworICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0NvbG9yU3BhY2VDRy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJl
ckNHLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKKykKIAogaWYg
KENNQUtFX1NJWkVPRl9WT0lEX1AgRVFVQUwgNCkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMgJHtXZWJDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L21ha2VzYWZlc2VoLm9iaikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDI1MyArMCwwIEBA
Ci1pbmNsdWRlKHBsYXRmb3JtL0N1cmwuY21ha2UpCi1pZiAoTk9UIEFQUExFX0JVSUxEKQotICAg
IGluY2x1ZGUocGxhdGZvcm0vSW1hZ2VEZWNvZGVycy5jbWFrZSkKLWVuZGlmICgpCi1pbmNsdWRl
KHBsYXRmb3JtL09wZW5TU0wuY21ha2UpCi1pbmNsdWRlKHBsYXRmb3JtL1RleHR1cmVNYXBwZXIu
Y21ha2UpCi0KLWxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVT
Ci0gICAgIiR7RGlyZWN0WF9JTkNMVURFX0RJUlN9IgotICAgICIke1dFQktJVF9MSUJSQVJJRVNf
RElSfS9pbmNsdWRlIgotICAgICIke1dFQkNPUkVfRElSfS9hY2Nlc3NpYmlsaXR5L3dpbiIKLSAg
ICAiJHtXRUJDT1JFX0RJUn0vcGFnZS93aW4iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3Jt
L2dyYXBoaWNzL2VnbCIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsIgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZSIKLSAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvd2luIgotICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9tZWRpYWNhcGFiaWxpdGllcyIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vbmV0d29yay93aW4iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3dpbiIKLSkK
LQotbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgYWNjZXNzaWJpbGl0eS93aW4vQVhP
YmplY3RDYWNoZVdpbi5jcHAKLSAgICBhY2Nlc3NpYmlsaXR5L3dpbi9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0V2luLmNwcAotICAgIGFjY2Vzc2liaWxpdHkvd2luL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyV2luLmNwcAotCi0gICAgZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcAotCi0gICAgaHRtbC9I
VE1MU2VsZWN0RWxlbWVudFdpbi5jcHAKLQotICAgIHBhZ2Uvd2luL0RyYWdDb250cm9sbGVyV2lu
LmNwcAotICAgIHBhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHAKLSAgICBwYWdlL3dpbi9GcmFt
ZVdpbi5jcHAKLSAgICBwYWdlL3dpbi9GcmFtZVdpbkRpcmVjdDJELmNwcAotCi0gICAgcGxhdGZv
cm0vQ3Vyc29yLmNwcAotICAgIHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuY3BwCi0gICAgcGxh
dGZvcm0vU3RhdGljUGFzdGVib2FyZC5jcHAKLQotICAgIHBsYXRmb3JtL2F1ZGlvL1BsYXRmb3Jt
TWVkaWFTZXNzaW9uTWFuYWdlci5jcHAKLQotICAgIHBsYXRmb3JtL2dlbmVyaWMvS2V5ZWREZWNv
ZGVyR2VuZXJpYy5jcHAKLSAgICBwbGF0Zm9ybS9nZW5lcmljL0tleWVkRW5jb2RlckdlbmVyaWMu
Y3BwCi0KLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAotCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWds
L0dMQ29udGV4dEVHTC5jcHAKLQotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5U
eXBlVXRpbGl0aWVzLmNwcAotCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9y
ZUJhY2tlbmREaXJlY3QyREltcGwuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9y
RGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJv
bGxlckRpcmVjdFdyaXRlLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERh
dGEuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9GbG9hdFBvaW50RGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0Zsb2F0UmVjdERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
bG9hdFNpemVEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hl
V2luLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250RGVzY3JpcHRpb25XaW4uY3BwCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKLSAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udFdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQ
YWdlVHJlZU5vZGVEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGll
bnREaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
R0xEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdp
bi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW50UG9pbnRXaW4uY3BwCi0g
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFJlY3RXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ludFNpemVXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0
aERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQu
Y3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeERpcmVjdDJELmNwcAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAKLQotICAgIHBsYXRmb3Jt
L25ldHdvcmsvd2luL0N1cmxTU0xIYW5kbGVXaW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93
aW4vRG93bmxvYWRCdW5kbGVXaW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93aW4vTmV0d29y
a1N0YXRlTm90aWZpZXJXaW4uY3BwCi0KLSAgICBwbGF0Zm9ybS90ZXh0L0h5cGhlbmF0aW9uLmNw
cAotICAgIHBsYXRmb3JtL3RleHQvd2luL0xvY2FsZVdpbi5jcHAKLQotICAgIHBsYXRmb3JtL3dp
bi9CU3RyaW5nLmNwcAotICAgIHBsYXRmb3JtL3dpbi9CaXRtYXBJbmZvLmNwcAotICAgIHBsYXRm
b3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL0N1cnNv
cldpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vRGVmV25kUHJvY1dpbmRvd0NsYXNzLmNwcAotICAg
IHBsYXRmb3JtL3dpbi9EZWxheUxvYWRlZE1vZHVsZXNFbnVtZXJhdG9yLmNwcAotICAgIHBsYXRm
b3JtL3dpbi9EcmFnRGF0YVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlRGlyZWN0
MkQuY3BwCi0gICAgcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93
aW4vR0RJT2JqZWN0Q291bnRlci5jcHAKLSAgICBwbGF0Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmNw
cAotICAgIHBsYXRmb3JtL3dpbi9JbXBvcnRlZEZ1bmN0aW9uc0VudW1lcmF0b3IuY3BwCi0gICAg
cGxhdGZvcm0vd2luL0ltcG9ydGVkTW9kdWxlc0VudW1lcmF0b3IuY3BwCi0gICAgcGxhdGZvcm0v
d2luL0tleUV2ZW50V2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9Mb2NhbGl6ZWRTdHJpbmdzV2lu
LmNwcAotICAgIHBsYXRmb3JtL3dpbi9Mb2dnaW5nV2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9N
SU1FVHlwZVJlZ2lzdHJ5V2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9NYWluVGhyZWFkU2hhcmVk
VGltZXJXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1BFSW1hZ2UuY3BwCi0gICAgcGxhdGZvcm0v
d2luL1Bhc3RlYm9hcmRXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1BsYXRmb3JtTW91c2VFdmVu
dFdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vUGxhdGZvcm1TY3JlZW5XaW4uY3BwCi0gICAgcGxh
dGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJh
dG9yV2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAKLSAgICBw
bGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuY3BwCi0gICAgcGxhdGZvcm0vd2luL1NlYXJj
aFBvcHVwTWVudVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vU3RydWN0dXJlZEV4Y2VwdGlvbkhh
bmRsZXJTdXBwcmVzc29yLmNwcAotICAgIHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcAotICAg
IHBsYXRmb3JtL3dpbi9Vc2VyQWdlbnRXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1dDRGF0YU9i
amVjdC5jcHAKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZUJ1bmRsZVdpbi5jcHAKLSAgICBwbGF0
Zm9ybS93aW4vV2ViQ29yZUluc3RhbmNlSGFuZGxlLmNwcAotICAgIHBsYXRmb3JtL3dpbi9XZWJD
b3JlVGV4dFJlbmRlcmVyLmNwcAotICAgIHBsYXRmb3JtL3dpbi9XaGVlbEV2ZW50V2luLmNwcAot
ICAgIHBsYXRmb3JtL3dpbi9XaWRnZXRXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1dpbmRvd01l
c3NhZ2VCcm9hZGNhc3Rlci5jcHAKLQotICAgIHJlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAK
LSkKLQotaWYgKFVTRV9DRikKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVE
RV9ESVJFQ1RPUklFUwotICAgICAgICAiJHtXRUJDT1JFX0RJUn0vbG9hZGVyL2FyY2hpdmUvY2Yi
Ci0gICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9jZiIKLSAgICAgICAgIiR7V0VCQ09S
RV9ESVJ9L3BsYXRmb3JtL2NmL3dpbiIKLSAgICApCi0KLSAgICBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKLSAgICAgICAgZWRpdGluZy9TbWFydFJlcGxhY2VDRi5jcHAKLQotICAgICAgICBs
b2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAotCi0gICAgICAgIHBsYXRmb3Jt
L2NmL0tleWVkRGVjb2RlckNGLmNwcAotICAgICAgICBwbGF0Zm9ybS9jZi9LZXllZEVuY29kZXJD
Ri5jcHAKLSAgICAgICAgcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCi0KLSAgICAgICAg
cGxhdGZvcm0vY2Yvd2luL0NlcnRpZmljYXRlQ0ZXaW4uY3BwCi0KLSAgICAgICAgcGxhdGZvcm0v
dGV4dC9jZi9IeXBoZW5hdGlvbkNGLmNwcAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIFdlYkNv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwotICAgICAgICBsb2FkZXIvYXJjaGl2ZS9jZi9M
ZWdhY3lXZWJBcmNoaXZlLmgKLQotICAgICAgICBwbGF0Zm9ybS9jZi93aW4vQ2VydGlmaWNhdGVD
Rldpbi5oCi0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMgJHtDT1JF
Rk9VTkRBVElPTl9MSUJSQVJZfSkKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlVGVzdFN1cHBvcnRf
TElCUkFSSUVTICR7Q09SRUZPVU5EQVRJT05fTElCUkFSWX0pCi1lbHNlICgpCi0gICAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgICAgIHBsYXRmb3JtL3RleHQvSHlwaGVuYXRpb24u
Y3BwCi0gICAgKQotZW5kaWYgKCkKLQotbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCi0gICAgYWNjZXNzaWJpbGl0eS93aW4vQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJXaW4uaAotCi0gICAgcGFnZS93aW4vRnJhbWVXaW4uaAotCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuaAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9E
aXJlY3QyRE9wZXJhdGlvbnMuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0
aWxpdGllcy5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVz
LmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudC5oCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5oCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vTG9jYWxXaW5kb3dzQ29udGV4dC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01l
ZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1NoYXJlZEdESU9iamVjdC5oCi0KLSAgICBwbGF0Zm9ybS93aW4vQlN0cmluZy5oCi0gICAgcGxh
dGZvcm0vd2luL0JpdG1hcEluZm8uaAotICAgIHBsYXRmb3JtL3dpbi9DT01QdHIuaAotICAgIHBs
YXRmb3JtL3dpbi9EZWZXbmRQcm9jV2luZG93Q2xhc3MuaAotICAgIHBsYXRmb3JtL3dpbi9HRElP
YmplY3RDb3VudGVyLmgKLSAgICBwbGF0Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmgKLSAgICBwbGF0
Zm9ybS93aW4vSFduZERDLmgKLSAgICBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmgKLSAgICBw
bGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uaAotICAgIHBsYXRmb3JtL3dpbi9TZWFyY2hQ
b3B1cE1lbnVEQi5oCi0gICAgcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudVdpbi5oCi0gICAg
cGxhdGZvcm0vd2luL1N5c3RlbUluZm8uaAotICAgIHBsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3Qu
aAotICAgIHBsYXRmb3JtL3dpbi9XZWJDb3JlQnVuZGxlV2luLmgKLSAgICBwbGF0Zm9ybS93aW4v
V2ViQ29yZUluc3RhbmNlSGFuZGxlLmgKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZVRleHRSZW5k
ZXJlci5oCi0gICAgcGxhdGZvcm0vd2luL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5oCi0gICAg
cGxhdGZvcm0vd2luL1dpbmRvd01lc3NhZ2VMaXN0ZW5lci5oCi0gICAgcGxhdGZvcm0vd2luL1dp
bmRvd3NUb3VjaC5oCi0pCi0KLWxpc3QoQVBQRU5EIFdlYkNvcmVfVVNFUl9BR0VOVF9TVFlMRV9T
SEVFVFMKLSAgICAke1dFQkNPUkVfRElSfS9jc3MvdGhlbWVXaW4uY3NzCi0gICAgJHtXRUJDT1JF
X0RJUn0vY3NzL3RoZW1lV2luUXVpcmtzLmNzcwotKQotCi1saXN0KEFQUEVORCBXZWJDb3JlX0xJ
QlJBUklFUwotICAgICR7RGlyZWN0WF9MSUJSQVJJRVN9Ci0gICAgY29tY3RsMzIKLSAgICBjcnlw
dDMyCi0gICAgaXBobHBhcGkKLSAgICBycGNydDQKLSAgICBzaGx3YXBpCi0gICAgdXNwMTAKLSAg
ICB2ZXJzaW9uCi0gICAgd2lubW0KLSAgICB3czJfMzIKLSkKLQotbGlzdChBUFBFTkQgV2ViQ29y
ZVRlc3RTdXBwb3J0X0xJQlJBUklFUwotICAgIHNobHdhcGkKLSkKLQotbWFrZV9kaXJlY3Rvcnko
JHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1dlYktpdC5yZXNvdXJjZXMvZW4ubHBy
b2opCi1maWxlKENPUFkKLSAgICAiJHtXRUJDT1JFX0RJUn0vZW4ubHByb2ovTG9jYWxpemFibGUu
c3RyaW5ncyIKLSAgICAiJHtXRUJDT1JFX0RJUn0vZW4ubHByb2ovbWVkaWFDb250cm9sc0xvY2Fs
aXplZFN0cmluZ3MuanMiCi0gICAgREVTVElOQVRJT04KLSAgICAke0NNQUtFX1JVTlRJTUVfT1VU
UFVUX0RJUkVDVE9SWX0vV2ViS2l0LnJlc291cmNlcy9lbi5scHJvagotKQotZmlsZShDT1BZCi0g
ICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvbWVkaWFjb250cm9scy9tZWRpYUNvbnRyb2xzQXBw
bGUuY3NzIgotICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFD
b250cm9sc0FwcGxlLmpzIgotICAgIERFU1RJTkFUSU9OCi0gICAgJHtDTUFLRV9SVU5USU1FX09V
VFBVVF9ESVJFQ1RPUll9L1dlYktpdC5yZXNvdXJjZXMKLSkKLQotc2V0KFdlYkNvcmVfT1VUUFVU
X05BTUUgV2ViQ29yZSR7REVCVUdfU1VGRklYfSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtV2luLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNt
YWtlCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFr
ZQkod29ya2luZyBjb3B5KQpAQCAtMzksMTQgKzM5LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGll
cy5jcHAKIAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2Ny
aWJlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcldpbi5jcHAKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9GbG9hdFJlY3REaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRmxvYXRTaXplRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDYWNoZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udERlc2NyaXB0aW9u
V2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNw
cApAQCAtNjAsNyArNTUsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW50U2l6ZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4V2luLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29y
ay93aW4vRG93bmxvYWRCdW5kbGVXaW4uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QQUwvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMiBAQAorMjAyMi0wMS0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIERpcmVjdDJECisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5OTkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhbC9QbGF0Zm9ybUZUVy5j
bWFrZTogUmVtb3ZlZC4KKwogMjAyMi0wMS0wNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjg3Njk4
LgpJbmRleDogU291cmNlL1dlYkNvcmUvUEFML3BhbC9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lv
biAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL1BsYXRmb3JtRlRXLmNtYWtlCShu
b25leGlzdGVudCkKQEAgLTEsMjYgKzAsMCBAQAotbGlzdChBUFBFTkQgUEFMX1BVQkxJQ19IRUFE
RVJTCi0pCi0KLWxpc3QoQVBQRU5EIFBBTF9TT1VSQ0VTCi0gICAgY3J5cHRvL29wZW5zc2wvQ3J5
cHRvRGlnZXN0T3BlblNTTC5jcHAKLQotICAgIGNyeXB0by93aW4vQ3J5cHRvRGlnZXN0V2luLmNw
cAotCi0gICAgc3lzdGVtL0Nsb2NrR2VuZXJpYy5jcHAKLQotICAgIHN5c3RlbS93aW4vU291bmRX
aW4uY3BwCi0KLSAgICB0ZXh0L0tpbGxSaW5nLmNwcAotCi0gICAgd2luL0xvZ2dpbmdXaW4uY3Bw
Ci0pCi0KLWxpc3QoQVBQRU5EIFBBTF9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAi
JHtXRUJLSVRfTElCUkFSSUVTX0RJUn0vaW5jbHVkZSIKLSkKLQotbGlzdChBUFBFTkQgUEFMX1BS
SVZBVEVfTElCUkFSSUVTCi0gICAgT3BlblNTTDo6Q3J5cHRvCi0pCi0KLXNldChQQUxfT1VUUFVU
X05BTUUgUEFMJHtERUJVR19TVUZGSVh9KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0
aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAJKHJldmlzaW9uIDI4Nzgw
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuaCIKIAotI2lmIEVOQUJM
RShWSURFTykgJiYgIVVTRShESVJFQ1QyRCkKKyNpZiBFTkFCTEUoVklERU8pCiAKICNpbmNsdWRl
ICJBdWRpb1RyYWNrTGlzdC5oIgogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgpAQCAt
OTk1LDQgKzk5NSw0IEBAIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gQ2FwdGlvblVzZXJQcmUK
ICAgICAKIH0KIAotI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgIVVTRShESVJFQ1QyRCkKKyNl
bmRpZiAvLyBFTkFCTEUoVklERU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25V
c2VyUHJlZmVyZW5jZXNNZWRpYUFGLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5oCShyZXZpc2lvbiAyODc4MDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUo
VklERU8pICYmICFVU0UoRElSRUNUMkQpCisjaWYgRU5BQkxFKFZJREVPKQogCiAjaW5jbHVkZSAi
Q1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNhcHRpb25QcmVmZXJlbmNlc0RlbGVnYXRl
LmgiCkBAIC0xMjAsNCArMTIwLDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiAhVVNFKERJUkVDVDJEKQorI2VuZGlmIC8v
IEVOQUJMRShWSURFTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luRGly
ZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2lu
RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3dp
bi9GcmFtZVdpbkRpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDc2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkZyYW1lV2luLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNp
bmNsdWRlICJCaXRtYXBJbmZvLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFt
ZVNlbGVjdGlvbi5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5j
bHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotR0RJT2JqZWN0PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoY29uc3Qg
RnJhbWUqIGZyYW1lLCBJbnRSZWN0JiBpcikKLXsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gb2xkUGFpbnRCZWhhdmlvciA9IGZyYW1lLT52aWV3
KCktPnBhaW50QmVoYXZpb3IoKTsKLSAgICBmcmFtZS0+dmlldygpLT5zZXRQYWludEJlaGF2aW9y
KG9sZFBhaW50QmVoYXZpb3IgfCBQYWludEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9zaXRpbmdMYXll
cnMpOwotCi0gICAgdm9pZCogYml0cyA9IG51bGxwdHI7Ci0gICAgYXV0byBoZGMgPSBhZG9wdEdE
SU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQygwKSk7Ci0gICAgaW50IHcgPSBpci53aWR0aCgp
OwotICAgIGludCBoID0gaXIuaGVpZ2h0KCk7Ci0gICAgQml0bWFwSW5mbyBibXAgPSBCaXRtYXBJ
bmZvOjpjcmVhdGUoSW50U2l6ZSh3LCBoKSk7Ci0KLSAgICBHRElPYmplY3Q8SEJJVE1BUD4gaGJt
cCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYm1wLCBESUJfUkdCX0NP
TE9SUywgc3RhdGljX2Nhc3Q8dm9pZCoqPigmYml0cyksIDAsIDApKTsKLSAgICBpZiAoIWhibXAp
Ci0gICAgICAgIHJldHVybiBoYm1wOwotCi0gICAgSEdESU9CSiBoYm1wT2xkID0gU2VsZWN0T2Jq
ZWN0KGhkYy5nZXQoKSwgaGJtcC5nZXQoKSk7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0g
ICAgU2VsZWN0T2JqZWN0KGhkYy5nZXQoKSwgaGJtcE9sZCk7Ci0KLSAgICBmcmFtZS0+dmlldygp
LT5zZXRQYWludEJlaGF2aW9yKG9sZFBhaW50QmVoYXZpb3IpOwotCi0gICAgcmV0dXJuIGhibXA7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjg3ODAzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2MSw3ICs0NjEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8TUlNRVR5cGVSZWdpc3Ry
eVRocmVhZEdsCiAgICAgfQogI2Vsc2UKICAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5z
ZW5zaXRpdmVIYXNoPiBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nID0gc3RkOjpp
bml0aWFsaXplcl9saXN0PFN0cmluZz4gewotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQor
I2lmIFVTRShDRykKICAgICAgICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFs
bCB0aGUgc3VwcG9ydGVkIFVUSSdzIHdoZW4gYSB3YXkgdG8gY29udmVydCBmcm9tIE1JTUVUeXBl
IHRvIFVUSSByZWxpYWJseSBpcyBmb3VuZC4KICAgICAgICAgLy8gRm9yIG5vdywgb25seSBzdXBw
b3J0IFBORywgSlBFRyBhbmQgR0lGLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYwOTUyODY+LgogICAg
ICAgICAiaW1hZ2UvcG5nIl9zLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAJKHJl
dmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBA
IHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGkKICAgICBtX3NlY29uZGFy
eUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7CiB9CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJF
Q1QyRCkKKyNpZiBVU0UoQ0cpCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5
U3Ryb2tlUGF0dGVybigpCiB7CiAgICAgbV9wcmltYXJ5Q29udGV4dC5hcHBseVN0cm9rZVBhdHRl
cm4oKTsKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZUVsCiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7
CiB9CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpCiB2b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0NBTGF5
ZXJDb250ZXh0KQogewogICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dChp
c0NBTGF5ZXJDb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9u
IDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYp
IGZpbmFsOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAK
LSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpCiAgICAgdm9pZCBhcHBs
eVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5h
bDsKICNlbmRpZgpAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwogICAgIHZvaWQgc3Ryb2tlRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwogCi0jaWYgVVNFKENHKSB8fCBVU0Uo
RElSRUNUMkQpCisjaWYgVVNFKENHKQogICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29s
KSBmaW5hbDsKICAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNw
cAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMzMgKzEyOCwyOCBAQCB2b2lk
IEJpdG1hcEltYWdlOjpzZXRDdXJyZW50RnJhbWVEZWNvZGluCiAgICAgbV9jdXJyZW50RnJhbWVE
ZWNvZGluZ1N0YXR1cyA9IGRlY29kaW5nU3RhdHVzOwogfQogCi1SZWZQdHI8TmF0aXZlSW1hZ2U+
IEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90IGluZGV4
LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCogdGFyZ2V0Q29udGV4dCkKK1JlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2U6OmZyYW1l
SW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwg
c3Vic2FtcGxpbmdMZXZlbCkKIHsKICAgICBpZiAoIWZyYW1lSGFzRnVsbFNpemVOYXRpdmVJbWFn
ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpKSB7CiAgICAgICAgIExPRyhJbWFnZXMs
ICJCaXRtYXBJbWFnZTo6JXMgLSAlcCAtIHVybDogJXMgW3N1YnNhbXBsaW5nTGV2ZWwgd2FzICVk
LCByZXNhbXBsaW5nXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8aW50PihmcmFtZVN1YnNhbXBsaW5nTGV2ZWxBdElu
ZGV4KGluZGV4KSkpOwogICAgICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgfQot
I2lmIFVTRShESVJFQ1QyRCkKLSAgICBtX3NvdXJjZS0+c2V0VGFyZ2V0Q29udGV4dCh0YXJnZXRD
b250ZXh0KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRhcmdldENvbnRleHQpOwotI2VuZGlm
CiAgICAgcmV0dXJuIG1fc291cmNlLT5mcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoaW5k
ZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOwogfQogCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcElt
YWdlOjpuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCitS
ZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSgpCiB7Ci0gICAgcmV0
dXJuIGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZCgwLCBTdWJzYW1wbGluZ0xldmVsOjpE
ZWZhdWx0LCB0YXJnZXRDb250ZXh0KTsKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXhDYWNo
ZUlmTmVlZGVkKDAsIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQpOwogfQogCi1SZWZQdHI8TmF0
aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBH
cmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCitSZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1h
cEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCiB7Ci0gICAgcmV0dXJuIGZyYW1l
SW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChtX2N1cnJlbnRGcmFtZSwgU3Vic2FtcGxpbmdMZXZl
bDo6RGVmYXVsdCwgdGFyZ2V0Q29udGV4dCk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4
Q2FjaGVJZk5lZWRlZChtX2N1cnJlbnRGcmFtZSwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7
CiB9CiAKLVJlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2U6OnByZVRyYW5zZm9ybWVkTmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCByZXNwZWN0T3JpZW50YXRpb24sIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkKK1JlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFw
SW1hZ2U6OnByZVRyYW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCByZXNw
ZWN0T3JpZW50YXRpb24pCiB7Ci0gICAgYXV0byBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKHRhcmdldENvbnRleHQpOworICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBpbWFnZTsKIApA
QCAtMTc4LDE4ICsxNzMsMTggQEAgUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6cHJl
VHJhbgogfQogCiAjaWYgVVNFKENHKQotUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6
bmF0aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0KiB0YXJnZXRDb250ZXh0KQorUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6bmF0
aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBzaXplX3QgY291bnQg
PSBmcmFtZUNvdW50KCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKLSAgICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChp
LCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0LCB0YXJnZXRDb250ZXh0KTsKKyAgICAgICAgYXV0
byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChpLCBTdWJzYW1wbGluZ0xl
dmVsOjpEZWZhdWx0KTsKICAgICAgICAgaWYgKGltYWdlICYmIGltYWdlLT5zaXplKCkgPT0gc2l6
ZSkKICAgICAgICAgICAgIHJldHVybiBpbWFnZTsKICAgICB9CiAKICAgICAvLyBGYWxsYmFjayB0
byB0aGUgZmlyc3QgZnJhbWUgaW1hZ2UgaWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQot
ICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoMCwgU3Vic2FtcGxpbmdM
ZXZlbDo6RGVmYXVsdCwgdGFyZ2V0Q29udGV4dCk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdElu
ZGV4Q2FjaGVJZk5lZWRlZCgwLCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKIH0KIAogVmVj
dG9yPFJlZjxOYXRpdmVJbWFnZT4+IEJpdG1hcEltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKQpA
QCAtMzAzLDcgKzI5OCw3IEBAIEltYWdlRHJhd1Jlc3VsdCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFw
aGkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRp
ZFJlcXVlc3REZWNvZGluZzsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGltYWdlID0g
ZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKG1fY3VycmVudEZyYW1lLCBtX2N1cnJlbnRT
dWJzYW1wbGluZ0xldmVsLCAmY29udGV4dCk7CisgICAgICAgICAgICBpbWFnZSA9IGZyYW1lSW1h
Z2VBdEluZGV4Q2FjaGVJZk5lZWRlZChtX2N1cnJlbnRGcmFtZSwgbV9jdXJyZW50U3Vic2FtcGxp
bmdMZXZlbCk7CiAgICAgICAgICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAg
LSB1cmw6ICVzIFthbiBpbWFnZSBmcmFtZSB3aWxsIGJlIGRlY29kZWQgc3luY2hyb25vdXNseV0i
LCBfX0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDIsMTEgKzE0MiwxMSBAQCBwdWJsaWM6CiAjZW5kaWYKICNlbmRpZgogCi0gICAgV0VCQ09SRV9F
WFBPUlQgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRl
eHQqID0gbnVsbHB0cikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgb3Zl
cnJpZGU7Ci0gICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBwcmVUcmFuc2Zvcm1lZE5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKGJvb2wgcmVzcGVjdE9yaWVudGF0aW9uLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQqID0gbnVsbHB0cikgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5h
dGl2ZUltYWdlPiBuYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIFJlZlB0cjxOYXRpdmVJbWFn
ZT4gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8TmF0
aXZlSW1hZ2U+IHByZVRyYW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCBy
ZXNwZWN0T3JpZW50YXRpb24pIG92ZXJyaWRlOwogI2lmIFVTRShDRykKLSAgICBSZWZQdHI8TmF0
aXZlSW1hZ2U+IG5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUmLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQqID0gbnVsbHB0cikgb3ZlcnJpZGU7CisgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBu
YXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPFJl
ZjxOYXRpdmVJbWFnZT4+IGZyYW1lc05hdGl2ZUltYWdlcygpOwogI2VuZGlmCiAKQEAgLTE1OCw3
ICsxNTgsNyBAQCBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIEJpdG1hcEltYWdlKEltYWdl
T2JzZXJ2ZXIqID0gbnVsbHB0cik7CiAKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGZyYW1lSW1h
Z2VBdEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSW1hZ2VBdElu
ZGV4KGluZGV4KTsgfQotICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gZnJhbWVJbWFnZUF0SW5kZXhD
YWNoZUlmTmVlZGVkKHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6
OkRlZmF1bHQsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKTsKKyAgICBSZWZQdHI8
TmF0aXZlSW1hZ2U+IGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QsIFN1YnNh
bXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKIAogICAgIC8vIENhbGxl
ZCB0byBpbnZhbGlkYXRlIGNhY2hlZCBkYXRhLiBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3
ZSB3aXBlIG91dAogICAgIC8vIHRoZSBlbnRpcmUgZnJhbWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxs
IHRoZSBpbWFnZSBzb3VyY2UgdG8gZGVzdHJveQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuaAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMSArNDksNiBAQAog
I2luY2x1ZGUgPHVzcDEwLmg+CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLWludGVyZmFj
ZSBJRFdyaXRlRmFjdG9yeTU7Ci1pbnRlcmZhY2UgSURXcml0ZUdkaUludGVyb3A7Ci0jZW5kaWYK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb250Q2FjaGU7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCShy
ZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDEwICs2Nyw2IEBAIGludGVyZmFj
ZSBJRFdyaXRlRm9udDsKIGludGVyZmFjZSBJRFdyaXRlRm9udEZhY2U7CiAjZW5kaWYKIAotI2lm
IFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgotI2VuZGlmCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udERlc2NyaXB0aW9uOwpAQCAtMTE5LDkgKzExNSw2IEBA
IHB1YmxpYzoKICNpZiBVU0UoQ09SRV9URVhUKQogICAgIEZvbnRQbGF0Zm9ybURhdGEoR0RJT2Jq
ZWN0PEhGT05UPiwgQ1RGb250UmVmLCBDR0ZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhl
dGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBib29sIHVzZUdESSk7CiAjZW5kaWYKLSNp
ZiBVU0UoRElSRUNUMkQpCi0gICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+JiYs
IENPTVB0cjxJRFdyaXRlRm9udD4mJiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBi
b29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJKTsKLSNlbmRpZgogI2lmIFVTRShDQUlS
TykKICAgICBGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4sIGNhaXJvX2ZvbnRfZmFj
ZV90KiwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgY29uc3QgQ3JlYXRpb25E
YXRhKiA9IG51bGxwdHIpOwogI2VuZGlmCkBAIC0xNjMsMTEgKzE1Niw2IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgaGFzVmFyaWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFyaWF0aW9uczsg
fQogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIElEV3JpdGVGb250KiBkd0ZvbnQoKSBjb25zdCB7
IHJldHVybiBtX2R3Rm9udC5nZXQoKTsgfQotICAgIElEV3JpdGVGb250RmFjZSogZHdGb250RmFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZHdGb250RmFjZS5nZXQoKTsgfQotI2VuZGlmCi0KICAgICBi
b29sIGlzRml4ZWRQaXRjaCgpIGNvbnN0OwogICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX3NpemU7IH0KICAgICBib29sIHN5bnRoZXRpY0JvbGQoKSBjb25zdCB7IHJldHVybiBtX3N5
bnRoZXRpY0JvbGQ7IH0KQEAgLTI2OCwxMSArMjU2LDYgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxl
IFJldGFpblB0cjxDVEZvbnRSZWY+IG1fY3RGb250OwogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNU
MkQpCi0gICAgQ09NUHRyPElEV3JpdGVGb250PiBtX2R3Rm9udDsKLSAgICBDT01QdHI8SURXcml0
ZUZvbnRGYWNlPiBtX2R3Rm9udEZhY2U7Ci0jZW5kaWYKLQogI2lmIFVTRShDQUlSTykKICAgICBS
ZWZQdHI8Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4gbV9zY2FsZWRGb250OwogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHJldmlzaW9uIDI4
NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDE5ICszOSwxMCBAQAogI2luY2x1ZGUgIkdyYWRpZW50UmVuZGVy
ZXJDRy5oIgogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiQ09NUHRyLmgi
Ci0jZW5kaWYKLQogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHQ29udGV4dCogQ0dDb250
ZXh0UmVmOwogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQyRDFCcnVz
aDsKLWludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLSNlbmRpZgotCiAjaWYgVVNFKENBSVJP
KQogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90OwogI2VuZGlm
CkBAIC0xMTgsMTAgKzEwOSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50KENHQ29udGV4dFJl
Zik7CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBJRDJEMUJydXNoKiBjcmVhdGVC
cnVzaChJRDJEMVJlbmRlclRhcmdldCopOwotI2VuZGlmCi0KICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEdyYWRpZW50Pj4gZGVjb2Rl
KERlY29kZXImKTsKIApAQCAtMTM5LDEwICsxMjYsNiBAQCBwcml2YXRlOgogI2lmIFVTRShDRykK
ICAgICBzdGQ6Om9wdGlvbmFsPEdyYWRpZW50UmVuZGVyZXJDRz4gbV9wbGF0Zm9ybVJlbmRlcmVy
OwogI2VuZGlmCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEMkQxQnJ1c2g+IG1f
YnJ1c2g7Ci0jZW5kaWYKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgR3Jh
ZGllbnQ6OkxpbmVhckRhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNSArNDMsNiBAQAogCiAj
aWYgVVNFKENHKQogdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0IFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0OwotI2VsaWYgVVNFKERJUkVDVDJEKQotaW50ZXJmYWNlIElEMkQxRENSZW5kZXJUYXJnZXQ7
Ci1pbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFGYWN0b3J5Owot
aW50ZXJmYWNlIElEMkQxU29saWRDb2xvckJydXNoOwotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xh
c3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ7Ci19Ci10eXBlZGVmIFdlYkNvcmU6OlBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwogI2VsaWYgVVNFKENBSVJP
KQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87CkBAIC0y
NjksMTUgKzI2MCw2IEBAIHB1YmxpYzogICAKICAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0Nv
bnRleHQoKSA9IGRlZmF1bHQ7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+R3JhcGhpY3ND
b250ZXh0KCk7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IG1vdmUgdG8gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQKLSAgICBlbnVtIGNsYXNzIEJpdG1hcFJl
bmRlcmluZ0NvbnRleHRUeXBlIDogdWludDhfdCB7Ci0gICAgICAgIENQVU1lbW9yeSwKLSAgICAg
ICAgR1BVTWVtb3J5Ci0gICAgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQo
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqLCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSk7Ci0j
ZW5kaWYKLQogICAgIHZpcnR1YWwgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRm
b3JtQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KIApAQCAtMzcyLDcgKzM1NCw3
IEBAIHB1YmxpYzogICAKICAgICAKICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YWNrLnNpemUoKTsgfQogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisj
aWYgVVNFKENHKQogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1YmxpYyBH
cmFwaGljc0NvbnRleHQgbWV0aG9kcz8KICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0
ZXJuKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAwOwpAQCAt
NTU3LDI2ICs1MzksNiBAQCBwdWJsaWM6ICAgCiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG51bGxwdHI7IH0KICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIEdyYXBoaWNzQ29u
dGV4dChIREMsIElEMkQxRENSZW5kZXJUYXJnZXQqKiwgUkVDVCwgYm9vbCBoYXNBbHBoYSA9IGZh
bHNlKTsgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQuCi0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgSUQyRDFGYWN0b3J5KiBzeXN0ZW1GYWN0b3J5KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIElEMkQxUmVuZGVyVGFyZ2V0KiBkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGJlZ2luRHJhdygpOwotICAgIEQyRDFfQ09MT1JfRiBjb2xvcldpdGhH
bG9iYWxBbHBoYShjb25zdCBDb2xvciYpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZW5kRHJhdygpOwotICAgIHZvaWQgZmx1c2goKTsKLQotICAgIElEMkQxQnJ1c2gqIHNvbGlkU3Ry
b2tlQnJ1c2goKSBjb25zdDsKLSAgICBJRDJEMUJydXNoKiBzb2xpZEZpbGxCcnVzaCgpIGNvbnN0
OwotICAgIElEMkQxQnJ1c2gqIHBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0OwotICAgIElEMkQx
QnJ1c2gqIHBhdHRlcm5GaWxsQnJ1c2goKSBjb25zdDsKLSAgICBJRDJEMVN0cm9rZVN0eWxlKiBw
bGF0Zm9ybVN0cm9rZVN0eWxlKCkgY29uc3Q7Ci0KLSAgICBJRDJEMVNvbGlkQ29sb3JCcnVzaCog
YnJ1c2hXaXRoQ29sb3IoY29uc3QgQ29sb3ImKTsKLSNlbmRpZgotCiBwcml2YXRlOgogICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCShy
ZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsMTAgKzE1NiwxMCBAQCBwdWJsaWM6CiAKICAgICBl
bnVtIFRpbGVSdWxlIHsgU3RyZXRjaFRpbGUsIFJvdW5kVGlsZSwgU3BhY2VUaWxlLCBSZXBlYXRU
aWxlIH07CiAKLSAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2UoY29u
c3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2
aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29u
c3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2
aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gcHJlVHJhbnNmb3JtZWROYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZShib29sID0gdHJ1ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIp
IHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0
aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBu
dWxscHRyKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1h
Z2U+IG5hdGl2ZUltYWdlKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgUmVmUHRy
PE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIG51bGxw
dHI7IH0KKyAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gcHJlVHJhbnNmb3JtZWROYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZShib29sID0gdHJ1ZSkgeyByZXR1cm4gbnVsbHB0cjsgfQor
ICAgIHZpcnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJ
bnRTaXplJikgeyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgLy8gQWNjZXNzb3JzIGZvciBuYXRp
dmUgaW1hZ2UgZm9ybWF0cy4KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw4ICszMCw2IEBACiAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVy
Q0cuaCIKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3Qy
RC5oIgogI2Vsc2UKICNpbmNsdWRlICJTY2FsYWJsZUltYWdlRGVjb2Rlci5oIgogI2VuZGlmCkBA
IC0xMDcsOCArMTA1LDYgQEAgUmVmUHRyPEltYWdlRGVjb2Rlcj4gSW1hZ2VEZWNvZGVyOjpjcmVh
dAogCiAjaWYgVVNFKENHKQogICAgIHJldHVybiBJbWFnZURlY29kZXJDRzo6Y3JlYXRlKGRhdGEs
IGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7Ci0jZWxpZiBVU0UoRElS
RUNUMkQpCi0gICAgcmV0dXJuIEltYWdlRGVjb2RlckRpcmVjdDJEOjpjcmVhdGUoZGF0YSwgYWxw
aGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKICNlbHNlCiAgICAgcmV0dXJu
IFNjYWxhYmxlSW1hZ2VEZWNvZGVyOjpjcmVhdGUoZGF0YSwgYWxwaGFPcHRpb24sIGdhbW1hQW5k
Q29sb3JQcm9maWxlT3B0aW9uKTsKICNlbmRpZgpAQCAtMTE5LDkgKzExNSw2IEBAIGJvb2wgSW1h
Z2VEZWNvZGVyOjpzdXBwb3J0c01lZGlhVHlwZShNZWQKICNpZiBVU0UoQ0cpCiAgICAgaWYgKElt
YWdlRGVjb2RlckNHOjpzdXBwb3J0c01lZGlhVHlwZSh0eXBlKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgaWYgKEltYWdlRGVjb2RlckRpcmVjdDJEOjpz
dXBwb3J0c01lZGlhVHlwZSh0eXBlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQogICAg
IGlmIChTY2FsYWJsZUltYWdlRGVjb2Rlcjo6c3VwcG9ydHNNZWRpYVR5cGUodHlwZSkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMs
MTAgKzEzMyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQo
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXpl
X3QpID0gMDsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VGFyZ2V0
Q29udGV4dChJRDJEMVJlbmRlclRhcmdldCopID0gMDsKLSNlbmRpZgotCiBwcm90ZWN0ZWQ6CiAg
ICAgSW1hZ2VEZWNvZGVyKCkgPSBkZWZhdWx0OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHJldmlzaW9uIDI4NzgwMykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDYgQEAKICNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2lu
Zy5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5o
IgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSW1hZ2VTb3VyY2U6OkltYWdlU291
cmNlKEJpdG1hcEltYWdlKiBpbWFnZSwgQWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEdhbW1hQW5k
Q29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQpAQCAtNjkzLDE0
ICs2ODgsNiBAQCBJbWFnZU9yaWVudGF0aW9uIEltYWdlU291cmNlOjpmcmFtZU9yaWVuCiAgICAg
cmV0dXJuIGZyYW1lQXRJbmRleENhY2hlSWZOZWVkZWQoaW5kZXgsIEltYWdlRnJhbWU6OkNhY2hp
bmc6Ok1ldGFkYXRhKS5vcmllbnRhdGlvbigpOwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotdm9p
ZCBJbWFnZVNvdXJjZTo6c2V0VGFyZ2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQqIHRh
cmdldENvbnRleHQpCi17Ci0gICAgaWYgKGlzRGVjb2RlckF2YWlsYWJsZSgpICYmIHRhcmdldENv
bnRleHQpCi0gICAgICAgIG1fZGVjb2Rlci0+c2V0VGFyZ2V0Q29udGV4dCh0YXJnZXRDb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkpOwotfQotI2VuZGlmCi0KIFJlZlB0
cjxOYXRpdmVJbWFnZT4gSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVf
dCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKQogewogICAgIGlmICgh
aXNEZWNvZGVyQXZhaWxhYmxlKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmgJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
Miw5ICsxMjIsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgU2Vjb25kcyBmcmFtZUR1
cmF0aW9uQXRJbmRleChzaXplX3QpOwogICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRh
dGlvbkF0SW5kZXgoc2l6ZV90KTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIHNldFRh
cmdldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0Kik7Ci0jZW5kaWYKICAgICBSZWZQdHI8
TmF0aXZlSW1hZ2U+IGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdM
ZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQpOwogICAgIFJlZlB0cjxOYXRpdmVJbWFn
ZT4gZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGZy
YW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBT
dWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDI4
NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0Nv
bnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykKICAg
ICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWwgeyB9CiAgICAgYm9vbCBpc0NB
TGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpAQCAt
NTcsNyArNTcsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzKSBmaW5hbCB7IH0KIAotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShD
RykKICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQogI2Vu
ZGlmCiAKQEAgLTY3LDcgKzY3LDcgQEAgcHJpdmF0ZToKIAogICAgIEludFJlY3QgY2xpcEJvdW5k
cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElS
RUNUMkQpCisjaWYgVVNFKENHKQogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWwg
eyB9CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWwgeyB9CiAgICAgdm9pZCBkcmF3
UGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXRoLmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgIVVTRShESVJFQ1QyRCkKIGZsb2F0IFBh
dGg6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0
YXRlKFBhdGhUcmF2ZXJzYWxTdGF0ZTo6QWN0aW9uOjpUb3RhbExlbmd0aCk7CkBAIC01MSw3ICs1
MCw2IEBAIGZsb2F0IFBhdGg6Omxlbmd0aCgpIGNvbnN0CiAKICAgICByZXR1cm4gdHJhdmVyc2Fs
U3RhdGUudG90YWxMZW5ndGgoKTsKIH0KLSNlbmRpZgogCiAjaWYgIUhBVkUoQ0dQQVRIX0dFVF9O
VU1CRVJfT0ZfRUxFTUVOVFMpCiAKQEAgLTEyNSw3ICsxMjMsNyBAQCB2b2lkIFBhdGg6OmFkZFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91CiAgICAgfQogCiAgICAgaWYgKHN0cmF0ZWd5ID09IFJv
dW5kZWRSZWN0U3RyYXRlZ3k6OlByZWZlck5hdGl2ZSkgewotI2lmIFVTRShDRykgfHwgVVNFKERJ
UkVDVDJEKQorI2lmIFVTRShDRykKICAgICAgICAgcGxhdGZvcm1BZGRQYXRoRm9yUm91bmRlZFJl
Y3QocmVjdCwgcmFkaWkudG9wTGVmdCgpLCByYWRpaS50b3BSaWdodCgpLCByYWRpaS5ib3R0b21M
ZWZ0KCksIHJhZGlpLmJvdHRvbVJpZ2h0KCkpOwogICAgICAgICByZXR1cm47CiAjZW5kaWYKQEAg
LTUyNCw3ICs1MjIsNyBAQCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gUGF0aDo6Ym91bmRpbmdS
CiAKICNlbmRpZgogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkKKyNpZiAhVVNFKENH
KQogUGF0aCBQYXRoOjpwb2x5Z29uUGF0aEZyb21Qb2ludHMoY29uc3QgVmVjdG9yPEZsb2F0UG9p
bnQ+JiBwb2ludHMpCiB7CiAgICAgUGF0aCBwYXRoOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BhdGguaAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyMCArNDEsNiBA
QAogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR1BhdGguaD4KIHR5cGVkZWYgc3RydWN0IENHUGF0
aCBQbGF0Zm9ybVBhdGg7CiAKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJDT01QdHIu
aCIKLQotaW50ZXJmYWNlIElEMkQxR2VvbWV0cnk7Ci1pbnRlcmZhY2UgSUQyRDFHZW9tZXRyeUdy
b3VwOwotaW50ZXJmYWNlIElEMkQxUGF0aEdlb21ldHJ5OwotaW50ZXJmYWNlIElEMkQxR2VvbWV0
cnlTaW5rOwotCi10eXBlZGVmIElEMkQxR2VvbWV0cnlHcm91cCBQbGF0Zm9ybVBhdGg7Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOwotfQotCiAj
ZWxpZiBVU0UoQ0FJUk8pCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKIApAQCAtNjksOCArNTUs
NiBAQCB0eXBlZGVmIFBsYXRmb3JtUGF0aCogUGxhdGZvcm1QYXRoUHRyOwogCiAjaWYgVVNFKENH
KQogdXNpbmcgUGxhdGZvcm1QYXRoU3RvcmFnZVR5cGUgPSBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0
aFJlZj47Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi11c2luZyBQbGF0Zm9ybVBhdGhTdG9yYWdlVHlw
ZSA9IENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+OwogI2Vsc2UKIHVzaW5nIFBsYXRmb3JtUGF0
aFN0b3JhZ2VUeXBlID0gUGxhdGZvcm1QYXRoUHRyOwogI2VuZGlmCkBAIC0xODksMTAgKzE3Myw3
IEBAIHB1YmxpYzoKIAogICAgIC8vIFRvIGtlZXAgUGF0aCgpIGNoZWFwLCBpdCBkb2VzIG5vdCBh
bGxvY2F0ZSBhIFBsYXRmb3JtUGF0aCBpbW1lZGlhdGVseQogICAgIC8vIG1lYW5pbmcgUGF0aDo6
cGxhdGZvcm1QYXRoKCkgY2FuIHJldHVybiBudWxsLgotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBG
bG9hdFJlY3QgZmFzdEJvdW5kaW5nUmVjdEZvclN0cm9rZShjb25zdCBQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYpIGNvbnN0OwotICAgIFBsYXRmb3JtUGF0aFB0ciBwbGF0Zm9ybVBhdGgoKSBjb25z
dCB7IHJldHVybiBtX3BhdGguZ2V0KCk7IH0KLSNlbGlmIFVTRShDRykKK2lmIFVTRShDRykKICAg
ICBXRUJDT1JFX0VYUE9SVCBQbGF0Zm9ybVBhdGhQdHIgcGxhdGZvcm1QYXRoKCkgY29uc3Q7CiAj
ZWxpZiBVU0UoQ0FJUk8pCiAgICAgY2Fpcm9fdCogY2Fpcm9QYXRoKCkgY29uc3QgeyByZXR1cm4g
bV9wYXRoLmdldCgpOyB9CkBAIC0yMTcsMTkgKzE5OCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGFkZEJlemllcnNGb3JSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNp
emUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0
IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdo
dFJhZGl1cyk7CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpCiAg
ICAgdm9pZCBwbGF0Zm9ybUFkZFBhdGhGb3JSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRS
YWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXpl
JiBib3R0b21SaWdodFJhZGl1cyk7CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2
b2lkIGFwcGVuZEdlb21ldHJ5KElEMkQxR2VvbWV0cnkqKTsKLSAgICB2b2lkIGNyZWF0ZUdlb21l
dHJ5V2l0aEZpbGxNb2RlKFdpbmRSdWxlLCBDT01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiYpIGNv
bnN0OwotCi0gICAgdm9pZCBvcGVuRmlndXJlQXRDdXJyZW50UG9pbnRJZk5lY2Vzc2FyeSgpOwot
ICAgIHZvaWQgY2xvc2VBbnlPcGVuR2VvbWV0cmllcyh1bnNpZ25lZCBmaWd1cmVFbmRTdHlsZSkg
Y29uc3Q7Ci0gICAgdm9pZCBjbGVhckdlb21ldHJpZXMoKTsKLSNlbmRpZgotCiAjaWZuZGVmIE5E
RUJVRwogICAgIHZvaWQgZHVtcCgpIGNvbnN0OwogI2VuZGlmCkBAIC0yODAsMTIgKzI1Miw2IEBA
IHByaXZhdGU6CiAgICAgbXV0YWJsZSBQbGF0Zm9ybVBhdGhTdG9yYWdlVHlwZSBtX3BhdGg7CiAj
ZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBWZWN0b3I8SUQyRDFHZW9tZXRyeSo+IG1f
Z2VvbWV0cmllczsKLSAgICBtdXRhYmxlIENPTVB0cjxJRDJEMUdlb21ldHJ5U2luaz4gbV9hY3Rp
dmVQYXRoOwotICAgIG11dGFibGUgYm9vbCBtX2ZpZ3VyZUlzT3BlbmVkIHsgZmFsc2UgfTsKLSNl
bmRpZgotCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgSW5saW5lUGF0aERhdGEg
bV9pbmxpbmVEYXRhOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QYXR0ZXJuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0dGVybi5oCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEzICszNiw2IEBA
CiAjaWYgVVNFKENHKQogdHlwZWRlZiBzdHJ1Y3QgQ0dQYXR0ZXJuKiBDR1BhdHRlcm5SZWY7CiB0
eXBlZGVmIFJldGFpblB0cjxDR1BhdHRlcm5SZWY+IFBsYXRmb3JtUGF0dGVyblB0cjsKLSNlbGlm
IFVTRShESVJFQ1QyRCkKLWludGVyZmFjZSBJRDJEMUJpdG1hcEJydXNoOwotdHlwZWRlZiBJRDJE
MUJpdG1hcEJydXNoKiBQbGF0Zm9ybVBhdHRlcm5QdHI7Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1j
bGFzcyBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDsKLX0KLXR5cGVkZWYgV2ViQ29yZTo6UGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7CiAjZWxpZiBVU0UoQ0FJ
Uk8pCiB0eXBlZGVmIHN0cnVjdCBfY2Fpcm9fcGF0dGVybiBjYWlyb19wYXR0ZXJuX3Q7CiB0eXBl
ZGVmIGNhaXJvX3BhdHRlcm5fdCogUGxhdGZvcm1QYXR0ZXJuUHRyOwpAQCAtNzcsMTEgKzcwLDgg
QEAgcHVibGljOgogICAgIGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJl
dHVybiBtX3BhcmFtZXRlcnM7IH0KIAogICAgIC8vIFBhdHRlcm4gc3BhY2UgaXMgYW4gYWJzdHJh
Y3Qgc3BhY2UgdGhhdCBtYXBzIHRvIHRoZSBkZWZhdWx0IHVzZXIgc3BhY2UgYnkgdGhlIHRyYW5z
Zm9ybWF0aW9uICd1c2VyU3BhY2VUcmFuc2Zvcm0nCi0jaWYgIVVTRShESVJFQ1QyRCkKICAgICBQ
bGF0Zm9ybVBhdHRlcm5QdHIgY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtKSBjb25zdDsKLSNlbHNlCi0gICAgUGxhdGZvcm1QYXR0
ZXJuUHRyIGNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBHcmFwaGljc0NvbnRleHQmLCBmbG9h
dCBhbHBoYSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1c2VyU3BhY2VUcmFuc2Zvcm0pIGNvbnN0
OwotI2VuZGlmCisKICAgICB2b2lkIHNldFBhdHRlcm5TcGFjZVRyYW5zZm9ybShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKTsKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5TcGFjZVRy
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy5wYXR0ZXJuU3BhY2VUcmFuc2Zv
cm07IH07CiAgICAgYm9vbCByZXBlYXRYKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLnJl
cGVhdFg7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybUltYWdlLmgJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoQ0cpCiB1c2luZyBQbGF0Zm9ybUlt
YWdlUHRyID0gUmV0YWluUHRyPENHSW1hZ2VSZWY+OwotI2VsaWYgVVNFKERJUkVDVDJEKQotdXNp
bmcgUGxhdGZvcm1JbWFnZVB0ciA9IENPTVB0cjxJRDJEMUJpdG1hcD47CiAjZWxpZiBVU0UoQ0FJ
Uk8pCiB1c2luZyBQbGF0Zm9ybUltYWdlUHRyID0gUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD47CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1h
Z2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsOCArMzAsNiBAQAogCiAjaWYgVVNFKENHKQogI2luY2x1ZGUgIkltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKICNlbGlmIFVTRShDQUlSTykKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oIgogI2VuZGlmCkBAIC00NCw4ICs0Miw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShDRykKIHVzaW5nIFVuYWNjZWxlcmF0
ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDsKLSNlbGlm
IFVTRShESVJFQ1QyRCkKLXVzaW5nIFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJ
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDsKICNlbGlmIFVTRShDQUlSTykKIHVzaW5nIFVuYWNj
ZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNl
QmFja2VuZDsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oCShyZXZpc2lv
biAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUlt
YWdlQnVmZmVyQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw2IEBACiAKICNp
ZiBVU0UoQ0cpCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKLSNlbGlmIFVTRShE
SVJFQ1QyRCkKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgogI2VsaWYg
VVNFKENBSVJPKQogI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgiCiAjZW5kaWYK
QEAgLTM3LDggKzM1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgVVNFKENHKQogdXNp
bmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNHQmFja2VuZDsKLSNl
bGlmIFVTRShESVJFQ1QyRCkKLXVzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ7CiAjZWxpZiBVU0UoQ0FJUk8pCiB1c2luZyBQbGF0Zm9y
bUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvQ0RN
U2Vzc2lvbkFWRm91bmRhdGlvbkNGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbkNG
LmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL2NmL0NETVNlc3Npb25BVkZvdW5kYXRpb25DRi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDE0ICs1Myw2IEBAIENETVNlc3Npb25BVkZvdW5kYXRpb25DRjo6Q0RNU2Vz
c2lvbkFWRm8KIAogUmVmUHRyPFVpbnQ4QXJyYXk+IENETVNlc3Npb25BVkZvdW5kYXRpb25DRjo6
Z2VuZXJhdGVLZXlSZXF1ZXN0KGNvbnN0IFN0cmluZyYsIFVpbnQ4QXJyYXkqIGluaXREYXRhLCBT
dHJpbmcmIGRlc3RpbmF0aW9uVVJMLCB1bnNpZ25lZCBzaG9ydCYgZXJyb3JDb2RlLCB1aW50MzJf
dCYgc3lzdGVtQ29kZSkKIHsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgVU5VU0VEX1BBUkFNKGlu
aXREYXRhKTsKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25VUkwpOwotICAgIFVOVVNFRF9Q
QVJBTShlcnJvckNvZGUpOwotICAgIFVOVVNFRF9QQVJBTShzeXN0ZW1Db2RlKTsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBudWxscHRyOwotI2Vsc2UKICAgICBTdHJpbmcga2V5
VVJJOwogICAgIFN0cmluZyBrZXlJRDsKICAgICBSZWZQdHI8VWludDhBcnJheT4gY2VydGlmaWNh
dGU7CkBAIC0xMDIsNyArOTQsNiBAQCBSZWZQdHI8VWludDhBcnJheT4gQ0RNU2Vzc2lvbkFWRm91
bmRhdGlvCiAKICAgICBhdXRvIGtleVJlcXVlc3RCdWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRl
KENGRGF0YUdldEJ5dGVQdHIoa2V5UmVxdWVzdC5nZXQoKSksIENGRGF0YUdldExlbmd0aChrZXlS
ZXF1ZXN0LmdldCgpKSk7CiAgICAgcmV0dXJuIFVpbnQ4QXJyYXk6OnRyeUNyZWF0ZShXVEZNb3Zl
KGtleVJlcXVlc3RCdWZmZXIpLCAwLCBrZXlSZXF1ZXN0QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwot
I2VuZGlmCiB9CiAKIHZvaWQgQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbkNGOjpyZWxlYXNlS2V5cygp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2Yv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25DRi5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25DRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5NCwxMSArODk0LDcgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6cAogICAgICAgICBjb250ZXh0LnNj
YWxlKEZsb2F0U2l6ZSgxLjBmLCAtMS4wZikpOwogICAgICAgICBjb250ZXh0LnNldEltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHk6Okxvdyk7CiAgICAgICAgIEZs
b2F0UmVjdCBwYWludFJlY3QoRmxvYXRQb2ludCgpLCByZWN0LnNpemUoKSk7Ci0jaWYgVVNFKERJ
UkVDVDJEKQotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotI2Vsc2UKICAgICAgICAgQ0dDb250
ZXh0RHJhd0ltYWdlKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIENHUmVjdE1ha2UoMCwgMCwg
cGFpbnRSZWN0LndpZHRoKCksIHBhaW50UmVjdC5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKLSNl
bmRpZgogICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKICAgICAgICAgaW1hZ2UgPSAwOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzYyLDE2ICszNjIsMTIgQEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjpkcmF3UERG
UGFnZShHcmFwaAogCiAgICAgY29udGV4dC50cmFuc2xhdGUoLW1fY3JvcEJveC5sb2NhdGlvbigp
KTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotI2Vsc2UKICAg
ICAvLyBDR1BERiBwYWdlcyBhcmUgaW5kZXhlZCBmcm9tIDEuCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgQ0dDb250ZXh0RHJhd1BERlBhZ2VXaXRoQW5ub3RhdGlvbnMoY29udGV4dC5wbGF0Zm9y
bUNvbnRleHQoKSwgQ0dQREZEb2N1bWVudEdldFBhZ2UobV9kb2N1bWVudC5nZXQoKSwgMSksIG51
bGxwdHIpOwogI2Vsc2UKICAgICBDR0NvbnRleHREcmF3UERGUGFnZShjb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpLCBDR1BERkRvY3VtZW50R2V0UGFnZShtX2RvY3VtZW50LmdldCgpLCAxKSk7CiAj
ZW5kaWYKLSNlbmRpZgogfQogCiAjZW5kaWYgLy8gIVVTRShQREZLSVRfRk9SX1BERkRPQ1VNRU5U
SU1BR0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgJKHJldmlz
aW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw3ICsxODks
NyBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1D
b250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQogCi0jaWYgVVNFKENHKSB8
fCBVU0UoRElSRUNUMkQpCisjaWYgVVNFKENHKQogICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4
dChib29sKSBmaW5hbCB7IH0KICAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9v
bCkgZmluYWwgeyB9CkBAIC0yMjAsNyArMjIwLDcgQEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSNp
ZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpCiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5
cGVNYXRoRGF0YS5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTksMTAgKzI1OSw2IEBAIE9wZW5UeXBlTWF0aERhdGE6Ok9wZW5UeXBlTWF0aERhdGEo
Y29uc3QKICAgICA6IG1fbWF0aEZvbnQoZm9udC5jcmVhdGVPcGVuVHlwZU1hdGhIYXJmQnV6ekZv
bnQoKSkKIHsKIH0KLSNlbGlmIFVTRShESVJFQ1QyRCkKLU9wZW5UeXBlTWF0aERhdGE6Ok9wZW5U
eXBlTWF0aERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udCkKLXsKLX0KICNlbHNlCiBP
cGVuVHlwZU1hdGhEYXRhOjpPcGVuVHlwZU1hdGhEYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
KSA9IGRlZmF1bHQ7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAJ
KHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMw
LDYgQEAKICNpbmNsdWRlICJGb250TWVtb3J5UmVzb3VyY2UuaCIKICNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJEaXJlY3RXcml0ZVV0aWxp
dGllcy5oIgotI2luY2x1ZGUgPGR3cml0ZV8zLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBzdHJ1Y3QgQmlnRW5kaWFuVVNob3J0IHsgCkBAIC0yODEsMTEgKzI3Niw2IEBAIFJl
ZlB0cjxGb250TWVtb3J5UmVzb3VyY2U+IHJlbmFtZUFuZEFjdGkKICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgSFJFU1VMVCBociA9IERpcmVjdFdy
aXRlOjphZGRGb250RnJvbURhdGFUb1Byb2Nlc3NDb2xsZWN0aW9uKHJld3JpdHRlbkZvbnREYXRh
KTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0jZW5kaWYKLQogICAgIHJldHVybiBGb250
TWVtb3J5UmVzb3VyY2U6OmNyZWF0ZShmb250SGFuZGxlKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0
dXJlLmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMSAr
NTQsNiBAQCB2b2lkIEJpdG1hcFRleHR1cmU6OnVwZGF0ZUNvbnRlbnRzKEdyYXBoCiAKICAgICBz
b3VyY2VMYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgc291cmNlUmVj
dCk7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgLy8gV2UgY2FuJ3QgYWNjZXNzIHRoZSBiaXRz
IGluIHRoZSBpbWFnZSBidWZmZXIgd2l0aCBhbiBhY3RpdmUgYmVnaW5EcmF3LgotICAgIGNvbnRl
eHQuZW5kRHJhdygpOwotI2VuZGlmCi0KICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gaW1hZ2VC
dWZmZXItPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CiAgICAgaWYgKCFpbWFnZSkK
ICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0JpdG1hcFRleHR1cmVHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVHTC5jcHAJKHJldmlzaW9uIDI4
NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBU
ZXh0dXJlR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsNiBAQAogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1
ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3aW5jb2RlYy5oPgotI2VuZGlmCi0KICNpZiBPUyhEQVJX
SU4pCiAjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViAweDgzNjcKICNlbmRpZgpA
QCAtMTYzLDggKzE1OCw2IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhJ
bWEKICAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBmcmFtZUltYWdlLT5wbGF0Zm9ybUlt
YWdlKCkuZ2V0KCk7CiAgICAgaW1hZ2VEYXRhID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0
YShzdXJmYWNlKTsKICAgICBieXRlc1BlckxpbmUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9z
dHJpZGUoc3VyZmFjZSk7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgbm90SW1wbGVtZW50ZWQo
KTsKICNlbmRpZgogCiAgICAgdXBkYXRlQ29udGVudHMoaW1hZ2VEYXRhLCB0YXJnZXRSZWN0LCBv
ZmZzZXQsIGJ5dGVzUGVyTGluZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJELmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJl
Y3QyRC5oCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJELmgJKG5vbmV4aXN0ZW50KQpAQCAt
MSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQ09NUHRy
LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHdpbmNvZGVjLmg+Ci0jaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLWludGVyZmFjZSBJRDJEMUJpdG1hcDsKLWludGVyZmFj
ZSBJRDJEMUJpdG1hcEJydXNoOwotaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OwotaW50ZXJm
YWNlIElEM0QxMURldmljZTE7Ci1pbnRlcmZhY2UgSURYR0lTdXJmYWNlMTsKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkQgewotICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRCk7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QmFja2luZ1N0b3Jl
QmFja2VuZERpcmVjdDJEKCkgPSBkZWZhdWx0OwotCi0gICAgSUQyRDFSZW5kZXJUYXJnZXQqIHJl
bmRlclRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyVGFyZ2V0LmdldCgpOyB9Ci0gICAg
SUQyRDFCaXRtYXAqIHN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7IH0K
LSAgICBJRFhHSVN1cmZhY2UxKiBkeFN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX2R4U3VyZmFj
ZS5nZXQoKTsgfQotICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVj
dCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KSA9IDA7Ci0gICAgdmlydHVhbCBJRDJEMUJp
dG1hcEJydXNoKiBiaXRtYXBCcnVzaCgpID0gMDsKLQotcHJvdGVjdGVkOgotICAgIEJhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyRChjb25zdCBJbnRTaXplJiBzaXplLCBJRDNEMTFEZXZpY2UxKiBk
ZXZpY2UpCi0gICAgICAgIDogbV9kZXZpY2UoZGV2aWNlKQotICAgICAgICAsIG1fc2l6ZShzaXpl
KQotICAgIHsKLSAgICB9Ci0KLSAgICBDT01QdHI8SUQzRDExRGV2aWNlMT4gbV9kZXZpY2U7Ci0g
ICAgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBtX3JlbmRlclRhcmdldDsKLSAgICBDT01QdHI8
SURYR0lTdXJmYWNlMT4gbV9keFN1cmZhY2U7Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBtX3N1
cmZhY2U7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci19OwotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0
b3JlQmFja2VuZERpcmVjdDJESW1wbC5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJ
bXBsLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDEyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRElt
cGwuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVz
LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2lu
Y2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2lu
Y2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0jaW5jbHVkZSA8d2luY29k
ZWMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgU2Vjb25kcyBzY3Jv
bGxIeXN0ZXJlc2lzRHVyYXRpb24geyAzMDBfbXMgfTsKLQotQmFja2luZ1N0b3JlQmFja2VuZERp
cmVjdDJESW1wbDo6QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbChjb25zdCBJbnRTaXpl
JiBzaXplLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgSUQzRDExRGV2aWNlMSogZGV2aWNlKQot
ICAgIDogQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJEKHNpemUsIGRldmljZSkKLSAgICAsIG1f
c2Nyb2xsZWRIeXN0ZXJlc2lzKFt0aGlzXShQQUw6Okh5c3RlcmVzaXNTdGF0ZSBzdGF0ZSkgewot
ICAgICAgICBpZiAoc3RhdGUgPT0gUEFMOjpIeXN0ZXJlc2lzU3RhdGU6OlN0b3BwZWQpCi0gICAg
ICAgICAgICBtX3Njcm9sbFN1cmZhY2UgPSBudWxscHRyOwotICAgICAgICB9LCBzY3JvbGxIeXN0
ZXJlc2lzRHVyYXRpb24pCi17Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gbV9zaXplOwotICAg
IHNjYWxlZFNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwotCi0gICAgbV9keFN1cmZhY2Ug
PSBXZWJDb3JlOjpEaXJlY3QyRDo6Y3JlYXRlRFhHSVN1cmZhY2VPZlNpemUoc2NhbGVkU2l6ZSwg
bV9kZXZpY2UuZ2V0KCksIGZhbHNlKTsKLSAgICBtX3JlbmRlclRhcmdldCA9IFdlYkNvcmU6OkRp
cmVjdDJEOjpjcmVhdGVTdXJmYWNlUmVuZGVyVGFyZ2V0KG1fZHhTdXJmYWNlLmdldCgpKTsKLQot
ICAgIGF1dG8gYml0bWFwUHJvcGVydGllcyA9IERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCk7
Ci0gICAgSFJFU1VMVCBociA9IG1fcmVuZGVyVGFyZ2V0LT5DcmVhdGVTaGFyZWRCaXRtYXAoX191
dWlkb2YoSURYR0lTdXJmYWNlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fZHhTdXJmYWNl
LmdldCgpKSwgJmJpdG1hcFByb3BlcnRpZXMsICZtX3N1cmZhY2UpOwotICAgIFJFTEVBU0VfQVNT
RVJUKFNVQ0NFRURFRChocikpOwotfQotCi1CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBs
Ojp+QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbCgpCi17Ci19Ci0KLXZvaWQgQmFja2lu
Z1N0b3JlQmFja2VuZERpcmVjdDJESW1wbDo6c2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJl
Y3QsIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkKLXsKLSAgICBJbnRSZWN0IHNvdXJjZVJl
Y3QgPSBzY3JvbGxSZWN0OwotICAgIHNvdXJjZVJlY3QubW92ZSgtc2Nyb2xsT2Zmc2V0KTsKLSAg
ICBzb3VyY2VSZWN0LmludGVyc2VjdChzY3JvbGxSZWN0KTsKLQotICAgIGlmIChzb3VyY2VSZWN0
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3Njcm9sbFN1cmZhY2Ug
fHwgc2Nyb2xsUmVjdC5zaXplKCkgIT0gbV9zY3JvbGxTdXJmYWNlU2l6ZSkgewotI2lmbmRlZiBf
TkRFQlVHCi0gICAgICAgIEFTU0VSVChtX3NpemUud2lkdGgoKSA+PSBzY3JvbGxSZWN0LnNpemUo
KS53aWR0aCgpKTsKLSAgICAgICAgQVNTRVJUKG1fc2l6ZS5oZWlnaHQoKSA+PSBzY3JvbGxSZWN0
LnNpemUoKS5oZWlnaHQoKSk7Ci0jZW5kaWYKLSAgICAgICAgbV9zY3JvbGxTdXJmYWNlU2l6ZSA9
IHNvdXJjZVJlY3Quc2l6ZSgpOwotICAgICAgICBtX2R4U2Nyb2xsU3VyZmFjZSA9IFdlYkNvcmU6
OkRpcmVjdDJEOjpjcmVhdGVEWEdJU3VyZmFjZU9mU2l6ZShtX3Njcm9sbFN1cmZhY2VTaXplLCBt
X2RldmljZS5nZXQoKSwgZmFsc2UpOwotCi0gICAgICAgIG1fc2Nyb2xsU3VyZmFjZSA9IG51bGxw
dHI7Ci0gICAgICAgIGF1dG8gYml0bWFwUHJvcGVydGllcyA9IERpcmVjdDJEOjpiaXRtYXBQcm9w
ZXJ0aWVzKCk7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBtX3JlbmRlclRhcmdldC0+Q3JlYXRlU2hh
cmVkQml0bWFwKF9fdXVpZG9mKElEWEdJU3VyZmFjZTEpLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihtX2R4U2Nyb2xsU3VyZmFjZS5nZXQoKSksICZiaXRtYXBQcm9wZXJ0aWVzLCAmbV9zY3JvbGxT
dXJmYWNlKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQot
Ci0gICAgYXV0byBzb3VyY2VSZWN0TG9jYXRpb24gPSBJbnRTaXplKHNvdXJjZVJlY3QueCgpLCBz
b3VyY2VSZWN0LnkoKSk7Ci0gICAgYXV0byBkZXN0UmVjdExvY2F0aW9uID0gSW50U2l6ZSgpOyAv
LyBUb3AgbGVmdCBjb3JuZXIgb2Ygc2Nyb2xsIHN1cmZhY2UKLSAgICBEaXJlY3QyRDo6Y29weVJl
Y3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihtX3N1cmZhY2UuZ2V0KCksIG1fc2Nyb2xsU3VyZmFj
ZS5nZXQoKSwgc291cmNlUmVjdExvY2F0aW9uLCBzb3VyY2VSZWN0LCBkZXN0UmVjdExvY2F0aW9u
KTsKLQotICAgIEludFJlY3QgZGVzdFJlY3QgPSBzY3JvbGxSZWN0OwotICAgIGRlc3RSZWN0LnNl
dEhlaWdodChzb3VyY2VSZWN0LmhlaWdodCgpKTsKLSAgICBkZXN0UmVjdC5zZXRXaWR0aChzb3Vy
Y2VSZWN0LndpZHRoKCkpOwotCi0gICAgSW50U2l6ZSBkZXN0UG9zaXRpb247Ci0gICAgaWYgKHNj
cm9sbE9mZnNldC53aWR0aCgpID4gMCB8fCBzY3JvbGxPZmZzZXQuaGVpZ2h0KCkgPiAwKSB7Ci0g
ICAgICAgIGRlc3RQb3NpdGlvbi5zZXRXaWR0aChzdGQ6Om1pbihzY3JvbGxSZWN0LndpZHRoKCks
IHNjcm9sbE9mZnNldC53aWR0aCgpKSk7Ci0gICAgICAgIGRlc3RQb3NpdGlvbi5zZXRIZWlnaHQo
c3RkOjptaW4oc2Nyb2xsUmVjdC5oZWlnaHQoKSwgc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSk7Ci0g
ICAgfQotCi0gICAgYXV0byBzb3VyY2VTY3JvbGxTdXJmYWNlTG9jYXRpb24gPSBJbnRTaXplKCk7
IC8vIFRvcCBsZWZ0IGNvcm5lciBvZiBzY3JvbGwgc3VyZmFjZQotICAgIERpcmVjdDJEOjpjb3B5
UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKG1fc2Nyb2xsU3VyZmFjZS5nZXQoKSwgbV9zdXJm
YWNlLmdldCgpLCBzb3VyY2VTY3JvbGxTdXJmYWNlTG9jYXRpb24sIGRlc3RSZWN0LCBkZXN0UG9z
aXRpb24pOwotCi0gICAgbV9zY3JvbGxlZEh5c3RlcmVzaXMuaW1wdWxzZSgpOwotfQotCi1JRDJE
MUJpdG1hcEJydXNoKiBCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsOjpiaXRtYXBCcnVz
aCgpCi17Ci0gICAgaWYgKCFtX3JlbmRlclRhcmdldCB8fCAhbV9zdXJmYWNlKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghbV9iaXRtYXBCcnVzaCkgewotICAgICAgICBhdXRv
IGJpdG1hcEJydXNoUHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcEJydXNoUHJvcGVydGllcygpOwot
ICAgICAgICBhdXRvIGJydXNoUHJvcGVydGllcyA9IEQyRDE6OkJydXNoUHJvcGVydGllcygpOwot
Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBtX3JlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwQnJ1c2go
bV9zdXJmYWNlLmdldCgpLCAmYml0bWFwQnJ1c2hQcm9wZXJ0aWVzLCAmYnJ1c2hQcm9wZXJ0aWVz
LCAmbV9iaXRtYXBCcnVzaCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbV9iaXRtYXBCcnVzaC5nZXQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2lu
Z1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5oCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJE
SW1wbC5oCShub25leGlzdGVudCkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQmFja2luZ1N0b3JlQmFj
a2VuZERpcmVjdDJELmgiCi0jaW5jbHVkZSA8cGFsL0h5c3RlcmVzaXNBY3Rpdml0eS5oPgotCi1p
bnRlcmZhY2UgSUQyRDFCaXRtYXBCcnVzaDsKLWludGVyZmFjZSBJRFhHSVN1cmZhY2UxOwotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEludFNpemU7Ci0KLWNsYXNzIEJhY2tpbmdTdG9y
ZUJhY2tlbmREaXJlY3QyREltcGwgZmluYWwgOiBwdWJsaWMgQmFja2luZ1N0b3JlQmFja2VuZERp
cmVjdDJEIHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBCYWNraW5nU3RvcmVCYWNrZW5k
RGlyZWN0MkRJbXBsKGNvbnN0IEludFNpemUmLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgSUQz
RDExRGV2aWNlMSopOwotICAgIHZpcnR1YWwgfkJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRElt
cGwoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHNjcm9sbChjb25zdCBJbnRSZWN0JiwgY29uc3Qg
SW50U2l6ZSYpIG92ZXJyaWRlOwotICAgIElEMkQxQml0bWFwQnJ1c2gqIGJpdG1hcEJydXNoKCkg
b3ZlcnJpZGU7Ci0KLSAgICBJbnRTaXplIG1fc2Nyb2xsU3VyZmFjZVNpemU7Ci0gICAgQ09NUHRy
PElEMkQxQml0bWFwPiBtX3Njcm9sbFN1cmZhY2U7Ci0gICAgQ09NUHRyPElEWEdJU3VyZmFjZTE+
IG1fZHhTY3JvbGxTdXJmYWNlOwotICAgIENPTVB0cjxJRDJEMUJpdG1hcEJydXNoPiBtX2JpdG1h
cEJydXNoOwotCi0gICAgUEFMOjpIeXN0ZXJlc2lzQWN0aXZpdHkgbV9zY3JvbGxlZEh5c3RlcmVz
aXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoRElSRUNU
MkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJl
Y3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0NvbG9yRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpA
QCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbG9yLmgiCi0KLSNp
ZiBQTEFURk9STShXSU4pCi0KLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8ZDJkMV8xaGVs
cGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ29sb3I6OkNvbG9yKEQyRDFfQ09MT1Jf
RiBjb2xvcikKLSAgICA6IENvbG9yKGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50OF90Pj4oU1JHQkE8
ZmxvYXQ+IHsgY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSB9KSkKLXsKLX0KLQot
Q29sb3I6Om9wZXJhdG9yIEQyRDFfQ09MT1JfRigpIGNvbnN0Ci17Ci0gICAgYXV0byBbciwgZywg
YiwgYV0gPSB0b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwotICAg
IHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwgYSk7Ci19Ci0KLUNvbG9yOjpvcGVyYXRvciBE
MkQxX1ZFQ1RPUl80RigpIGNvbnN0Ci17Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b0NvbG9y
VHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwotICAgIHJldHVybiBEMkQxOjpW
ZWN0b3I0RihyLCBnLCBiLCBhKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oV0lOKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29u
dHJvbGxlckRpcmVjdFdyaXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyRGlyZWN0V3JpdGUuY3BwCShy
ZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Q29tcGxleFRleHRDb250cm9sbGVyRGlyZWN0V3JpdGUuY3BwCShub25leGlzdGVudCkKQEAgLTEs
MTgxICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0
OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KLSogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0q
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29tcGxleFRleHRDb250cm9sbGVy
LmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJlY3RXcml0ZVV0aWxpdGll
cy5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0j
aW5jbHVkZSAiVGV4dEFuYWx5emVySGVscGVyLmgiCi0jaW5jbHVkZSA8ZHdyaXRlXzMuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgYm9vbCBzaGFwZShJRFdyaXRlVGV4dEFuYWx5
emVyKiBhbmFseXplciwgY29uc3QgRFdSSVRFX1NDUklQVF9BTkFMWVNJUyYgYW5hbHlzaXMsIGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnRQbGF0Zm9ybURhdGEsIGNvbnN0IFdDSEFSKiB0ZXh0
LCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN1Z2dlc3RlZENvdW50LCBWZWN0b3I8R2x5cGg+
JiBnbHlwaHMsIFZlY3RvcjxHbHlwaD4mIGNsdXN0ZXJNYXAsIFZlY3RvcjxEV1JJVEVfU0hBUElO
R19URVhUX1BST1BFUlRJRVM+JiB0ZXh0UHJvcGVydGllcywgVmVjdG9yPERXUklURV9TSEFQSU5H
X0dMWVBIX1BST1BFUlRJRVM+JiBnbHlwaFByb3BlcnRpZXMsIHVuc2lnbmVkJiBnbHlwaENvdW50
KQotewotICAgIEhSRVNVTFQgc2hhcGVSZXN1bHQgPSBFX1BFTkRJTkc7Ci0KLSAgICBkbyB7Ci0g
ICAgICAgIHNoYXBlUmVzdWx0ID0gYW5hbHl6ZXItPkdldEdseXBocyh0ZXh0LCBsZW5ndGgsIGZv
bnRQbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpLCBmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9u
KCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCwgZmFsc2UsCi0gICAgICAgICAgICAmYW5h
bHlzaXMsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIDAsIHN1Z2dlc3RlZENv
dW50LCBjbHVzdGVyTWFwLmRhdGEoKSwgdGV4dFByb3BlcnRpZXMuZGF0YSgpLAotICAgICAgICAg
ICAgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhQcm9wZXJ0aWVzLmRhdGEoKSwgJmdseXBoQ291bnQpOwot
Ci0gICAgICAgIGlmIChzaGFwZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKSB7Ci0gICAgICAgICAg
ICAvLyBOZWVkIHRvIHJlc2l6ZSBvdXIgYnVmZmVycyAoZXhjZXB0IGZvciBjbHVzdGVyTWFwLiBJ
dCBpcyBhbHdheXMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nKS4KLSAgICAgICAgICAgIGdseXBo
cy5yZXNpemUoZ2x5cGhzLnNpemUoKSAqIDIpOwotICAgICAgICAgICAgdGV4dFByb3BlcnRpZXMu
cmVzaXplKGdseXBocy5zaXplKCkpOwotICAgICAgICAgICAgZ2x5cGhQcm9wZXJ0aWVzLnJlc2l6
ZShnbHlwaHMuc2l6ZSgpKTsKLSAgICAgICAgfQotICAgIH0gd2hpbGUgKHNoYXBlUmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpOwotCi0gICAgaWYgKEZBSUxFRChzaGFwZVJlc3VsdCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENvbXBsZXhUZXh0
Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNo
YXIqIGNwLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBjb25zdCBG
b250KiBmb250KQotewotICAgIGlmICghZm9udCkgewotICAgICAgICAvLyBDcmVhdGUgYSBydW4g
b2YgbWlzc2luZyBnbHlwaHMgZnJvbSB0aGUgcHJpbWFyeSBmb250LgotICAgICAgICBtX2NvbXBs
ZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShtX2ZvbnQucHJpbWFyeUZv
bnQoKSwgY3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5ndGgsIDAsIGxlbmd0aCwgbV9ydW4ubHRyKCkp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8mIGZvbnRQbGF0Zm9ybURhdGEg
PSBmb250LT5wbGF0Zm9ybURhdGEoKTsKLQotICAgIHdjaGFyX3QgbG9jYWxlTmFtZVtMT0NBTEVf
TkFNRV9NQVhfTEVOR1RIXSA9IHsgfTsKLSAgICBpbnQgbG9jYWxlTGVuZ3RoID0gR2V0VXNlckRl
ZmF1bHRMb2NhbGVOYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmbG9jYWxlTmFtZSksIExP
Q0FMRV9OQU1FX01BWF9MRU5HVEgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGxvY2FsZUxlbmd0aCA8
IExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwotCi0gICAgVmVjdG9yPERXUklURV9GT05UX0ZFQVRV
UkU+IGZvbnRGZWF0dXJlcygxKTsKLSAgICBmb250RmVhdHVyZXNbMF0ubmFtZVRhZyA9IERXUklU
RV9GT05UX0ZFQVRVUkVfVEFHX0tFUk5JTkc7Ci0gICAgZm9udEZlYXR1cmVzWzBdLnBhcmFtZXRl
ciA9IG1fZm9udC5lbmFibGVLZXJuaW5nKCkgPyAxIDogMDsKLQotICAgIGlmIChmb250UGxhdGZv
cm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkKLSAgICAg
ICAgZm9udEZlYXR1cmVzLmFwcGVuZCh7RFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfVkVSVElDQUxf
V1JJVElORywgMX0pOwotCi0gICAgRFdSSVRFX1RZUE9HUkFQSElDX0ZFQVRVUkVTIHVzZWRGZWF0
dXJlczsKLSAgICB1c2VkRmVhdHVyZXMuZmVhdHVyZXMgPSBmb250RmVhdHVyZXMuZGF0YSgpOwot
ICAgIHVzZWRGZWF0dXJlcy5mZWF0dXJlQ291bnQgPSBmb250RmVhdHVyZXMuc2l6ZSgpOwotCi0g
ICAgVmVjdG9yPGNvbnN0IERXUklURV9UWVBPR1JBUEhJQ19GRUFUVVJFUyo+IGZlYXR1cmVzOwot
ICAgIGZlYXR1cmVzLmFwcGVuZCgmdXNlZEZlYXR1cmVzKTsKLQotICAgIENPTVB0cjxJRFdyaXRl
VGV4dEFuYWx5emVyPiBhbmFseXplcjsKLSAgICBIUkVTVUxUIGhyID0gRGlyZWN0V3JpdGU6OmZh
Y3RvcnkoKS0+Q3JlYXRlVGV4dEFuYWx5emVyKCZhbmFseXplcik7Ci0gICAgUkVMRUFTRV9BU1NF
UlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBUZXh0QW5hbHl6ZXJIZWxwZXIgaGVscGVyKHJlaW50
ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmbG9jYWxlTmFtZSksIHJlaW50ZXJwcmV0X2Nhc3Q8TFBDV1NU
Uj4oY3ApLCBsZW5ndGgpOwotCi0gICAgaHIgPSBhbmFseXplci0+QW5hbHl6ZVNjcmlwdCgmaGVs
cGVyLCAwLCBsZW5ndGgsICZoZWxwZXIpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgdW5zaWduZWQgdG90YWxTdWdnZXN0ZWRDb3VudCA9ICgzICogbGVuZ3RoIC8g
MiArIDE2KTsKLQotICAgIFZlY3RvcjxHbHlwaD4gZ2x5cGhzOwotICAgIFZlY3RvcjxHbHlwaD4g
Y2x1c3Rlck1hcDsKLSAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfVEVYVF9QUk9QRVJUSUVTPiB0
ZXh0UHJvcGVydGllczsKLSAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfR0xZUEhfUFJPUEVSVElF
Uz4gZ2x5cGhQcm9wZXJ0aWVzOwotICAgIFZlY3RvcjxGTE9BVD4gZ2x5cGhBZHZhbmNlczsKLSAg
ICBWZWN0b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4gZ2x5cGhPZmZzZXRzOwotICAgIFZlY3RvcjxG
bG9hdFBvaW50PiBvcmlnaW5zOwotICAgIFZlY3RvcjxGbG9hdFNpemU+IGFkdmFuY2VzOwotICAg
IFZlY3Rvcjx1bnNpZ25lZD4gc3RyaW5nSW5kaWNlczsKLQotICAgIGdseXBocy5yZXNlcnZlQ2Fw
YWNpdHkodG90YWxTdWdnZXN0ZWRDb3VudCk7Ci0gICAgY2x1c3Rlck1hcC5yZXNlcnZlQ2FwYWNp
dHkobGVuZ3RoKTsKLSAgICB0ZXh0UHJvcGVydGllcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdn
ZXN0ZWRDb3VudCk7Ci0gICAgZ2x5cGhQcm9wZXJ0aWVzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1
Z2dlc3RlZENvdW50KTsKLSAgICBnbHlwaEFkdmFuY2VzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1
Z2dlc3RlZENvdW50KTsKLSAgICBnbHlwaE9mZnNldHMucmVzZXJ2ZUNhcGFjaXR5KHRvdGFsU3Vn
Z2VzdGVkQ291bnQpOwotICAgIG9yaWdpbnMucmVzZXJ2ZUNhcGFjaXR5KHRvdGFsU3VnZ2VzdGVk
Q291bnQpOwotICAgIGFkdmFuY2VzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1Z2dlc3RlZENvdW50
KTsKLSAgICBzdHJpbmdJbmRpY2VzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1Z2dlc3RlZENvdW50
KTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgcnVuIDogaGVscGVyLm1fYW5hbHl6ZWRSdW5zKSB7
Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjdXJyZW50Q1AgPSBjcCArIHJ1bi5zdGFydFBvc2l0aW9u
OwotICAgICAgICBMUENXU1RSIHRleHRQb3NpdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TFBDV1NU
Uj4oY3VycmVudENQKTsKLQotICAgICAgICB1bnNpZ25lZCBzdWdnZXN0ZWRDb3VudCA9ICgzICog
cnVuLmxlbmd0aCAvIDIgKyAxNik7Ci0gICAgICAgIGdseXBocy5yZXNpemUoc3VnZ2VzdGVkQ291
bnQpOwotICAgICAgICBjbHVzdGVyTWFwLnJlc2l6ZShydW4ubGVuZ3RoKTsKLSAgICAgICAgdGV4
dFByb3BlcnRpZXMucmVzaXplKHN1Z2dlc3RlZENvdW50KTsKLSAgICAgICAgZ2x5cGhQcm9wZXJ0
aWVzLnJlc2l6ZShzdWdnZXN0ZWRDb3VudCk7Ci0KLSAgICAgICAgdW5zaWduZWQgZ2x5cGhDb3Vu
dCA9IDA7Ci0gICAgICAgIGlmICghc2hhcGUoYW5hbHl6ZXIuZ2V0KCksIHJ1bi5hbmFseXNpcywg
Zm9udFBsYXRmb3JtRGF0YSwgdGV4dFBvc2l0aW9uLCBydW4ubGVuZ3RoLCBzdWdnZXN0ZWRDb3Vu
dCwgZ2x5cGhzLCBjbHVzdGVyTWFwLCB0ZXh0UHJvcGVydGllcywgZ2x5cGhQcm9wZXJ0aWVzLCBn
bHlwaENvdW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBnbHlwaHMuc2hyaW5r
KGdseXBoQ291bnQpOwotICAgICAgICB0ZXh0UHJvcGVydGllcy5zaHJpbmsoZ2x5cGhDb3VudCk7
Ci0gICAgICAgIGdseXBoUHJvcGVydGllcy5zaHJpbmsoZ2x5cGhDb3VudCk7Ci0gICAgICAgIGds
eXBoQWR2YW5jZXMucmVzaXplKGdseXBoQ291bnQpOwotICAgICAgICBnbHlwaE9mZnNldHMucmVz
aXplKGdseXBoQ291bnQpOwotCi0gICAgICAgIEhSRVNVTFQgcGxhY2VtZW50UmVzdWx0ID0gYW5h
bHl6ZXItPkdldEdseXBoUGxhY2VtZW50cyh0ZXh0UG9zaXRpb24sIGNsdXN0ZXJNYXAuZGF0YSgp
LCB0ZXh0UHJvcGVydGllcy5kYXRhKCksIHJ1bi5sZW5ndGgsCi0gICAgICAgICAgICBnbHlwaHMu
ZGF0YSgpLCBnbHlwaFByb3BlcnRpZXMuZGF0YSgpLCBnbHlwaENvdW50LCBmb250UGxhdGZvcm1E
YXRhLmR3Rm9udEZhY2UoKSwKLSAgICAgICAgICAgIGZvbnRQbGF0Zm9ybURhdGEuc2l6ZSgpLCBm
b250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNh
bCwgbV9ydW4ubHRyKCksCi0gICAgICAgICAgICAmcnVuLmFuYWx5c2lzLCByZWludGVycHJldF9j
YXN0PExQQ1dTVFI+KGxvY2FsZU5hbWUpLCAKLSAgICAgICAgICAgIGZlYXR1cmVzLmRhdGEoKSwg
JnJ1bi5sZW5ndGgsIDEsCi0gICAgICAgICAgICBnbHlwaEFkdmFuY2VzLmRhdGEoKSwgZ2x5cGhP
ZmZzZXRzLmRhdGEoKSk7Ci0gICAgICAgIGlmIChGQUlMRUQocGxhY2VtZW50UmVzdWx0KSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBDb252ZXJ0IGFsbCBjaGFycyB0aGF0IHNo
b3VsZCBiZSB0cmVhdGVkIGFzIHNwYWNlcyB0byB1c2UgdGhlIHNwYWNlIGdseXBoLgotICAgICAg
ICAvLyBXZSBhbHNvIGNyZWF0ZSBhIG1hcCB0aGF0IGFsbG93cyB1cyB0byBxdWlja2x5IGdvIGZy
b20gc3BhY2UgZ2x5cGhzIGJhY2sgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXJzLgot
ICAgICAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9udC0+c3BhY2VXaWR0aCgpIC0gZm9udC0+c3lu
dGhldGljQm9sZE9mZnNldCgpOwotCi0gICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgcnVuLmxl
bmd0aDsgKytrKSB7Ci0gICAgICAgICAgICBVQ2hhciBjaCA9ICooY3VycmVudENQICsgayk7Ci0g
ICAgICAgICAgICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2Uo
Y2gpOwotICAgICAgICAgICAgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UgPSBGb250Q2FzY2Fk
ZTo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoKTsKLSAgICAgICAgICAgIGlmICh0cmVhdEFzU3Bh
Y2UgfHwgdHJlYXRBc1plcm9XaWR0aFNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3Vic3Rp
dHV0ZSBpbiB0aGUgc3BhY2UgZ2x5cGggYXQgdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluIHRoZSBn
bHlwaHMKLSAgICAgICAgICAgICAgICAvLyBhcnJheS4KLSAgICAgICAgICAgICAgICBnbHlwaHNb
Y2x1c3Rlck1hcFtrXV0gPSBmb250LT5zcGFjZUdseXBoKCk7Ci0gICAgICAgICAgICAgICAgZ2x5
cGhBZHZhbmNlc1tjbHVzdGVyTWFwW2tdXSA9IHRyZWF0QXNTcGFjZSA/IHNwYWNlV2lkdGggOiAw
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgb3JpZ2lucy5yZXNpemUoZ2x5
cGhDb3VudCk7Ci0gICAgICAgIGFkdmFuY2VzLnJlc2l6ZShnbHlwaENvdW50KTsKLSAgICAgICAg
c3RyaW5nSW5kaWNlcy5yZXNpemUoZ2x5cGhDb3VudCk7Ci0KLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBnbHlwaENvdW50OyArK2kpIHsKLSAgICAgICAgICAgIHN0cmluZ0luZGljZXNb
aV0gPSBpOwotICAgICAgICAgICAgb3JpZ2luc1tpXSA9IEZsb2F0UG9pbnQoZ2x5cGhPZmZzZXRz
W2ldLmFkdmFuY2VPZmZzZXQsIGdseXBoT2Zmc2V0c1tpXS5hc2NlbmRlck9mZnNldCk7Ci0gICAg
ICAgICAgICBhZHZhbmNlc1tpXSA9IEZsb2F0U2l6ZShnbHlwaEFkdmFuY2VzW2ldLCAwKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1
bjo6Y3JlYXRlKGFkdmFuY2VzLCBvcmlnaW5zLCBnbHlwaHMsIHN0cmluZ0luZGljZXMsIEZsb2F0
U2l6ZSgpLCAqZm9udCwgY3VycmVudENQLCAwLCBydW4ubGVuZ3RoLCAwLCBydW4ubGVuZ3RoLCBt
X3J1bi5sdHIoKSkpOwotICAgIH0KLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9D
b21wbGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVy
VW5pc2NyaWJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsNiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgogCi0jaWYgIVVT
RShESVJFQ1QyRCkKLQogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnRDYXNj
YWRlLmgiCiAjaW5jbHVkZSAiSFduZERDLmgiCkBAIC0yNzUsNSArMjczLDMgQEAgdm9pZCBDb21w
bGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbAogfQogCiB9Ci0KLSNlbmRpZiAvLyAhVVNF
KERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Rp
cmVjdDJET3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4NzgwMykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlv
bnMuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTI0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA2LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDA4IE51YW50aSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQnJlbnQgRnVsZ2hh
bSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBJZ2Fs
aWEgUy5MLgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyLCBJbnRlbCBDb3Jw
b3JhdGlvbgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGlyZWN0MkRPcGVyYXRpb25zLmgiCi0KLSNpZiBV
U0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgotI2luY2x1ZGUg
IkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCi0jaW5jbHVkZSAiSW1hZ2Uu
aCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVj
dDJELmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYXRoLmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlICJTaGFkb3dCbHVy
LmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGQyZDEuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotbmFtZXNwYWNlIERpcmVjdDJEIHsKLQotZW51bSBQYXR0ZXJuQWRqdXN0bWVu
dCB7IE5vQWRqdXN0bWVudCwgQWRqdXN0UGF0dGVybkZvckdsb2JhbEFscGhhIH07Ci1lbnVtIEFs
cGhhUHJlc2VydmF0aW9uIHsgRG9Ob3RQcmVzZXJ2ZUFscGhhLCBQcmVzZXJ2ZUFscGhhIH07Ci0K
LS8vIEZJWE1FOiBSZXBsYWNlIG9uY2UgR3JhcGhpY3NDb250ZXh0OjpkYXNoZWRMaW5lQ29ybmVy
V2lkdGhGb3JTdHJva2VXaWR0aCgpCi0vLyBpcyByZWZhY3RvcmVkIGFzIGEgc3RhdGljIHB1Ymxp
YyBmdW5jdGlvbi4KLXN0YXRpYyBmbG9hdCBkYXNoZWRMaW5lQ29ybmVyV2lkdGhGb3JTdHJva2VX
aWR0aChmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUsIGZsb2F0IHN0
cm9rZVRoaWNrbmVzcykKLXsKLSAgICByZXR1cm4gc3Ryb2tlU3R5bGUgPT0gRG90dGVkU3Ryb2tl
ID8gc3Ryb2tlVGhpY2tuZXNzIDogc3RkOjptaW4oMi4wZiAqIHN0cm9rZVRoaWNrbmVzcywgc3Rk
OjptYXgoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VXaWR0aCAvIDMuMGYpKTsKLX0KLQotLy8gRklY
TUU6IFJlcGxhY2Ugb25jZSBHcmFwaGljc0NvbnRleHQ6OmRhc2hlZExpbmVQYXR0ZXJuV2lkdGhG
b3JTdHJva2VXaWR0aCgpCi0vLyBpcyByZWZhY3RvcmVkIGFzIGEgc3RhdGljIHB1YmxpYyBmdW5j
dGlvbi4KLXN0YXRpYyBmbG9hdCBkYXNoZWRMaW5lUGF0dGVybldpZHRoRm9yU3Ryb2tlV2lkdGgo
ZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlLCBmbG9hdCBzdHJva2VU
aGlja25lc3MpCi17Ci0gICAgcmV0dXJuIHN0cm9rZVN0eWxlID09IERvdHRlZFN0cm9rZSA/IHN0
cm9rZVRoaWNrbmVzcyA6IHN0ZDo6bWluKDMuMGYgKiBzdHJva2VUaGlja25lc3MsIHN0ZDo6bWF4
KHN0cm9rZVRoaWNrbmVzcywgc3Ryb2tlV2lkdGggLyAzLjBmKSk7Ci19Ci0KLS8vIEZJWE1FOiBS
ZXBsYWNlIG9uY2UgR3JhcGhpY3NDb250ZXh0OjpkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZvclBh
dHRlcm5BbmRTdHJva2VXaWR0aCgpCi0vLyBpcyByZWZhY3RvcmVkIGFzIGEgc3RhdGljIHB1Ymxp
YyBmdW5jdGlvbi4KLXN0YXRpYyBmbG9hdCBkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZvclBhdHRl
cm5BbmRTdHJva2VXaWR0aChmbG9hdCBwYXR0ZXJuV2lkdGgsIGZsb2F0IHN0cm9rZVdpZHRoKQot
ewotICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggZnVsbCBmaWxsIGFuZCBlbmRzIHdpdGggdGhl
IGVtcHR5IGZpbGwuCi0gICAgLy8gMS4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgZW1wdHkgcGhhc2Ug
YWZ0ZXIgdGhlIGNvcm5lci4KLSAgICAvLyAyLiBDaGVjayBpZiB3ZSd2ZSBnb3Qgb2RkIG9yIGV2
ZW4gbnVtYmVyIG9mIHBhdHRlcm5zIGFuZCB3aGV0aGVyIHRoZXkgZnVsbHkgY292ZXIgdGhlIGxp
bmUuCi0gICAgLy8gMy4gSW4gY2FzZSBvZiBldmVuIG51bWJlciBvZiBwYXR0ZXJucyBhbmQvb3Ig
cmVtYWluZGVyLCBtb3ZlIHRoZSBwYXR0ZXJuIHN0YXJ0IHBvc2l0aW9uCi0gICAgLy8gc28gdGhh
dCB0aGUgcGF0dGVybiBpcyBiYWxhbmNlZCBiZXR3ZWVuIHRoZSBjb3JuZXJzLgotICAgIGZsb2F0
IHBhdHRlcm5PZmZzZXQgPSBwYXR0ZXJuV2lkdGg7Ci0gICAgaW50IG51bWJlck9mU2VnbWVudHMg
PSBzdGQ6OmZsb29yKHN0cm9rZVdpZHRoIC8gcGF0dGVybldpZHRoKTsKLSAgICBib29sIG9kZE51
bWJlck9mU2VnbWVudHMgPSBudW1iZXJPZlNlZ21lbnRzICUgMjsKLSAgICBmbG9hdCByZW1haW5k
ZXIgPSBzdHJva2VXaWR0aCAtIChudW1iZXJPZlNlZ21lbnRzICogcGF0dGVybldpZHRoKTsKLSAg
ICBpZiAob2RkTnVtYmVyT2ZTZWdtZW50cyAmJiByZW1haW5kZXIpCi0gICAgICAgIHBhdHRlcm5P
ZmZzZXQgLT0gcmVtYWluZGVyIC8gMi4wZjsKLSAgICBlbHNlIGlmICghb2RkTnVtYmVyT2ZTZWdt
ZW50cykgewotICAgICAgICBpZiAocmVtYWluZGVyKQotICAgICAgICAgICAgcGF0dGVybk9mZnNl
dCArPSBwYXR0ZXJuT2Zmc2V0IC0gKHBhdHRlcm5XaWR0aCArIHJlbWFpbmRlcikgLyAyLjBmOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYXR0ZXJuT2Zmc2V0ICs9IHBhdHRlcm5XaWR0aCAv
IDIuMGY7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhdHRlcm5PZmZzZXQ7Ci19Ci0KLS8vIEZJWE1F
OiBSZXBsYWNlIG9uY2UgR3JhcGhpY3NDb250ZXh0OjpjZW50ZXJMaW5lQW5kQ3V0T2ZmQ29ybmVy
cygpCi0vLyBpcyByZWZhY3RvcmVkIGFzIGEgc3RhdGljIHB1YmxpYyBmdW5jdGlvbi4KLXN0YXRp
YyBWZWN0b3I8RmxvYXRQb2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1Zl
cnRpY2FsTGluZSwgZmxvYXQgY29ybmVyV2lkdGgsIEZsb2F0UG9pbnQgcG9pbnQxLCBGbG9hdFBv
aW50IHBvaW50MikKLXsKLSAgICAvLyBDZW50ZXIgbGluZSBhbmQgY3V0IG9mZiBjb3JuZXJzIGZv
ciBwYXR0ZXJuIHBhaW50aW5nLgotICAgIGlmIChpc1ZlcnRpY2FsTGluZSkgewotICAgICAgICBm
bG9hdCBjZW50ZXJPZmZzZXQgPSAocG9pbnQyLngoKSAtIHBvaW50MS54KCkpIC8gMi4wZjsKLSAg
ICAgICAgcG9pbnQxLm1vdmUoY2VudGVyT2Zmc2V0LCBjb3JuZXJXaWR0aCk7Ci0gICAgICAgIHBv
aW50Mi5tb3ZlKC1jZW50ZXJPZmZzZXQsIC1jb3JuZXJXaWR0aCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgZmxvYXQgY2VudGVyT2Zmc2V0ID0gKHBvaW50Mi55KCkgLSBwb2ludDEueSgpKSAvIDIu
MGY7Ci0gICAgICAgIHBvaW50MS5tb3ZlKGNvcm5lcldpZHRoLCBjZW50ZXJPZmZzZXQpOwotICAg
ICAgICBwb2ludDIubW92ZSgtY29ybmVyV2lkdGgsIC1jZW50ZXJPZmZzZXQpOwotICAgIH0KLQot
ICAgIHJldHVybiB7IHBvaW50MSwgcG9pbnQyIH07Ci19Ci0KLQotbmFtZXNwYWNlIFN0YXRlIHsK
LQotdm9pZCBzZXRTdHJva2VUaGlja25lc3MoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRm
b3JtQ29udGV4dCwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQotewotICAgIHBsYXRmb3JtQ29udGV4
dC5zZXRTdHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKTsKLX0KLQotdm9pZCBzZXRTdHJv
a2VTdHlsZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBTdHJva2VT
dHlsZSBzdHJva2VTdHlsZSkKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0U3Ryb2tlU3R5bGUo
c3Ryb2tlU3R5bGUpOwotfQotCi12b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcGVyYXRpb24sIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0KLSAgICBEMkQxX0JMRU5EX01P
REUgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX01VTFRJUExZOwotICAgIEQyRDFf
Q09NUE9TSVRFX01PREUgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVf
Rk9SQ0VfRFdPUkQ7Ci0KLSAgICBpZiAoYmxlbmRNb2RlICE9IEJsZW5kTW9kZTo6Tm9ybWFsKSB7
Ci0gICAgICAgIHN3aXRjaCAoYmxlbmRNb2RlKSB7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpN
dWx0aXBseToKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9N
VUxUSVBMWTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6U2Ny
ZWVuOgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX1NDUkVF
TjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6T3ZlcmxheToK
LSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9PVkVSTEFZOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpEYXJrZW46Ci0gICAg
ICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfREFSS0VOOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpMaWdodGVuOgotICAgICAgICAg
ICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0xJR0hURU47Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OkNvbG9yRG9kZ2U6Ci0gICAgICAgICAg
ICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfQ09MT1JfRE9ER0U7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OkNvbG9yQnVybjoKLSAgICAgICAg
ICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9DT0xPUl9CVVJOOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpIYXJkTGlnaHQ6Ci0gICAgICAg
ICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfSEFSRF9MSUdIVDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6U29mdExpZ2h0OgotICAgICAg
ICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX1NPRlRfTElHSFQ7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OkRpZmZlcmVuY2U6Ci0gICAg
ICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfRElGRkVSRU5DRTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6RXhjbHVzaW9uOgotICAg
ICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0VYQ0xVU0lPTjsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6SHVlOgotICAgICAgICAg
ICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0hVRTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6U2F0dXJhdGlvbjoKLSAgICAgICAgICAgIHRh
cmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9TQVRVUkFUSU9OOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpDb2xvcjoKLSAgICAgICAgICAgIHRhcmdl
dEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9DT0xPUjsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEJsZW5kTW9kZTo6THVtaW5vc2l0eToKLSAgICAgICAgICAgIHRhcmdldEJs
ZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9MVU1JTk9TSVRZOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpQbHVzRGFya2VyOgotICAgICAgICAgICAgdGFyZ2V0
QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0RBUktFUl9DT0xPUjsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6UGx1c0xpZ2h0ZXI6Ci0gICAgICAgICAgICB0
YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfTElHSFRFUl9DT0xPUjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2ggKGNvbXBvc2l0ZU9wZXJhdGlvbikgewot
ICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpDbGVhcjoKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfQ0xFQVI7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6Q29weToKLSAgICAgICAg
ICAgIHRhcmdldENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX1NPVVJDRV9DT1BZ
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRlT3BlcmF0b3I6OlNv
dXJjZU92ZXI6Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJ
VEVfTU9ERV9TT1VSQ0VfT1ZFUjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENv
bXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbjoKLSAgICAgICAgICAgIHRhcmdldENvbXBvc2l0ZU1v
ZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX1NPVVJDRV9JTjsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdXQ6Ci0gICAgICAgICAgICB0
YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVfTU9ERV9TT1VSQ0VfT1VUOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUF0
b3A6Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVfTU9E
RV9TT1VSQ0VfQVRPUDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0
ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk92ZXI6Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVN
b2RlID0gRDJEMV9DT01QT1NJVEVfTU9ERV9ERVNUSU5BVElPTl9PVkVSOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uSW46Ci0g
ICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVfTU9ERV9ERVNU
SU5BVElPTl9JTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9w
ZXJhdG9yOjpEZXN0aW5hdGlvbk91dDoKLSAgICAgICAgICAgIHRhcmdldENvbXBvc2l0ZU1vZGUg
PSBEMkQxX0NPTVBPU0lURV9NT0RFX0RFU1RJTkFUSU9OX09VVDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbkF0b3A6Ci0gICAg
ICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVfTU9ERV9ERVNUSU5B
VElPTl9BVE9QOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRlT3Bl
cmF0b3I6OlhPUjoKLSAgICAgICAgICAgIHRhcmdldENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBP
U0lURV9NT0RFX1hPUjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0
ZU9wZXJhdG9yOjpQbHVzRGFya2VyOgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJE
MV9CTEVORF9NT0RFX0RBUktFTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENv
bXBvc2l0ZU9wZXJhdG9yOjpQbHVzTGlnaHRlcjoKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9k
ZSA9IEQyRDFfQkxFTkRfTU9ERV9MSUdIVEVOOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ29tcG9zaXRlT3BlcmF0b3I6OkRpZmZlcmVuY2U6Ci0gICAgICAgICAgICB0YXJnZXRC
bGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfRElGRkVSRU5DRTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldEJsZW5kQW5kQ29t
cG9zaXRlTW9kZSh0YXJnZXRCbGVuZE1vZGUsIHRhcmdldENvbXBvc2l0ZU1vZGUpOwotfQotCi12
b2lkIHNldFNob3VsZEFudGlhbGlhcyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1D
b250ZXh0LCBib29sIGVuYWJsZSkKLXsKLSAgICBhdXRvIGFudGlhbGlhc01vZGUgPSBlbmFibGUg
PyBEMkQxX0FOVElBTElBU19NT0RFX1BFUl9QUklNSVRJVkUgOiBEMkQxX0FOVElBTElBU19NT0RF
X0FMSUFTRUQ7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5TZXRBbnRpYWxp
YXNNb2RlKGFudGlhbGlhc01vZGUpOwotfQotCi12b2lkIHNldENUTShQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKLXsKLSAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLSAgICBw
bGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPlNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwot
Ci0gICAgaWYgKGF1dG8qIGdyYXBoaWNzQ29udGV4dFByaXZhdGUgPSBwbGF0Zm9ybUNvbnRleHQu
Z3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICAgICBncmFwaGljc0NvbnRleHRQcml2YXRl
LT5zZXRDVE0odHJhbnNmb3JtKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIGdldENUTShQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0KQotewotICAgIEFTU0VSVChwbGF0Zm9y
bUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIEQyRDFfTUFUUklYXzNYMl9GIGN1cnJlbnRU
cmFuc2Zvcm07Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5HZXRUcmFuc2Zv
cm0oJmN1cnJlbnRUcmFuc2Zvcm0pOwotICAgIHJldHVybiBjdXJyZW50VHJhbnNmb3JtOwotfQot
Ci1JbnRSZWN0IGdldENsaXBCb3VuZHMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3Jt
Q29udGV4dCkKLXsKLSAgICBEMkQxX1NJWkVfRiBjbGlwU2l6ZTsKLSAgICBpZiAoYXV0byBjbGlw
TGF5ZXIgPSBwbGF0Zm9ybUNvbnRleHQuY2xpcExheWVyKCkpCi0gICAgICAgIGNsaXBTaXplID0g
Y2xpcExheWVyLT5HZXRTaXplKCk7Ci0gICAgZWxzZQotICAgICAgICBjbGlwU2l6ZSA9IHBsYXRm
b3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+R2V0U2l6ZSgpOwotCi0gICAgRmxvYXRSZWN0IGNs
aXBCb3VuZHMoSW50UG9pbnQoKSwgY2xpcFNpemUpOwotCi0gICAgcmV0dXJuIGVuY2xvc2luZ0lu
dFJlY3QoY2xpcEJvdW5kcyk7Ci19Ci0KLUZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0K
LWJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRm
b3JtQ29udGV4dCkKLXsKLSAgICBhdXRvIHJlbmRlclByb3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJU
YXJnZXRQcm9wZXJ0aWVzKCk7Ci0gICAgcmVuZGVyUHJvcGVydGllcy50eXBlID0gRDJEMV9SRU5E
RVJfVEFSR0VUX1RZUEVfSEFSRFdBUkU7Ci0gICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dC5yZW5k
ZXJUYXJnZXQoKS0+SXNTdXBwb3J0ZWQoJnJlbmRlclByb3BlcnRpZXMpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBTdGF0ZQotCi1GaWxsU291cmNlOjpGaWxsU291cmNlKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgIDog
Z2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEpCi0gICAgLCBjb2xvcihzdGF0ZS5maWxsQ29sb3IpCi0g
ICAgLCBmaWxsUnVsZShzdGF0ZS5maWxsUnVsZSkKLXsKLSAgICBBU1NFUlQoY29udGV4dC5oYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgYXV0byYgcGxhdGZvcm1Db250ZXh0ID0gKmNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBpZiAoc3RhdGUuZmlsbFBhdHRlcm4pIHsKLSAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBUaGlzIGlzbid0IHJl
YWxseSBuZWVkZWQgb24gV2luZG93cwotICAgICAgICBicnVzaCA9IHN0YXRlLmZpbGxQYXR0ZXJu
LT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29udGV4dCwgc3RhdGUuYWxwaGEsIHVzZXJUb0Jhc2VD
VE0pOwotICAgIH0gZWxzZSBpZiAoc3RhdGUuZmlsbEdyYWRpZW50ICYmICFzdGF0ZS5maWxsR3Jh
ZGllbnQtPnN0b3BzKCkuaXNFbXB0eSgpKQotICAgICAgICBicnVzaCA9IHN0YXRlLmZpbGxHcmFk
aWVudC0+Y3JlYXRlQnJ1c2gocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGJydXNoID0gcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKGNvbG9y
KTsKLX0KLQotU3Ryb2tlU291cmNlOjpTdHJva2VTb3VyY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAgOiBnbG9i
YWxBbHBoYShzdGF0ZS5hbHBoYSkKLSAgICAsIHRoaWNrbmVzcyhzdGF0ZS5zdHJva2VUaGlja25l
c3MpCi0gICAgLCBjb2xvcihzdGF0ZS5zdHJva2VDb2xvcikKLXsKLSAgICBBU1NFUlQoY29udGV4
dC5oYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgYXV0byYgcGxhdGZvcm1Db250ZXh0ID0gKmNv
bnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBpZiAoc3RhdGUuc3Ryb2tlUGF0dGVybikg
ewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMg
aXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCi0gICAgICAgIGJydXNoID0gc3RhdGUuc3Ry
b2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnRleHQsIHN0YXRlLmFscGhhLCB1
c2VyVG9CYXNlQ1RNKTsKLSAgICB9IGVsc2UgaWYgKHN0YXRlLnN0cm9rZUdyYWRpZW50KQotICAg
ICAgICBicnVzaCA9IHN0YXRlLnN0cm9rZUdyYWRpZW50LT5jcmVhdGVCcnVzaChwbGF0Zm9ybUNv
bnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYnJ1c2ggPSBwbGF0Zm9y
bUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoY29sb3IpOwotfQotCi1TaGFkb3dTdGF0ZTo6U2hhZG93
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQotICAgIDogb2Zmc2V0KHN0
YXRlLnNoYWRvd09mZnNldCkKLSAgICAsIGJsdXIoc3RhdGUuc2hhZG93Qmx1cikKLSAgICAsIGNv
bG9yKHN0YXRlLnNoYWRvd0NvbG9yKQotICAgICwgaWdub3JlVHJhbnNmb3JtcyhzdGF0ZS5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtcykKLSAgICAsIGdsb2JhbEFscGhhKHN0YXRlLmFscGhhKQotICAg
ICwgZ2xvYmFsQ29tcG9zaXRlT3BlcmF0b3Ioc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IpCi17Ci19
Ci0KLWJvb2wgU2hhZG93U3RhdGU6OmlzVmlzaWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNv
bG9yLmlzVmlzaWJsZSgpICYmIChvZmZzZXQud2lkdGgoKSB8fCBvZmZzZXQuaGVpZ2h0KCkgfHwg
Ymx1cik7Ci19Ci0KLWJvb2wgU2hhZG93U3RhdGU6OmlzUmVxdWlyZWQoUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkgY29uc3QKLXsKLSAgICAvLyBXZSBjYW4ndCBhdm9p
ZCBTaGFkb3dCbHVyIGlmIHRoZSBzaGFkb3cgaGFzIGJsdXIuCi0gICAgaWYgKGNvbG9yLmlzVmlz
aWJsZSgpICYmIGJsdXIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gV2UgY2FuIGF2
b2lkIFNoYWRvd0JsdXIgYW5kIG9wdGltaXplLCBzaW5jZSB3ZSdyZSBub3QgZHJhd2luZyBvbiBh
Ci0gICAgLy8gY2FudmFzIGFuZCBib3ggc2hhZG93cyBhcmUgYWZmZWN0ZWQgYnkgdGhlIHRyYW5z
Zm9ybWF0aW9uIG1hdHJpeC4KLSAgICBpZiAoIWlnbm9yZVRyYW5zZm9ybXMpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIC8vIFdlIGNhbiBhdm9pZCBTaGFkb3dCbHVyLCBzaW5jZSB0aGVy
ZSBhcmUgbm8gdHJhbnNmb3JtYXRpb25zIHRvIGFwcGx5IHRvIHRoZSBjYW52YXMuCi0gICAgaWYg
KFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KS5pc0lkZW50aXR5KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIC8vIE90aGVyd2lzZSwgbm8gY2hhbmNlIGF2b2lkaW5nIFNoYWRv
d0JsdXIuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgc2V0TGluZUNhcChQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAg
RDJEMV9DQVBfU1RZTEUgY2FwU3R5bGUgPSBEMkQxX0NBUF9TVFlMRV9GTEFUOwotICAgIHN3aXRj
aCAobGluZUNhcCkgewotICAgIGNhc2UgTGluZUNhcDo6Um91bmQ6Ci0gICAgICAgIGNhcFN0eWxl
ID0gRDJEMV9DQVBfU1RZTEVfUk9VTkQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUNh
cDo6U3F1YXJlOgotICAgICAgICBjYXBTdHlsZSA9IEQyRDFfQ0FQX1NUWUxFX1NRVUFSRTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lQ2FwOjpCdXR0OgotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGNhcFN0eWxlID0gRDJEMV9DQVBfU1RZTEVfRkxBVDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldExpbmVDYXAoY2FwU3R5bGUpOwotfQotCi12b2lk
IHNldExpbmVEYXNoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNv
bnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIHBsYXRmb3Jt
Q29udGV4dC5zZXREYXNoZXMoZGFzaGVzKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0RGFzaE9m
ZnNldChkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBzZXRMaW5lSm9pbihQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBMaW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBEMkQx
X0xJTkVfSk9JTiBqb2luU3R5bGUgPSBEMkQxX0xJTkVfSk9JTl9NSVRFUjsKLSAgICBzd2l0Y2gg
KGxpbmVKb2luKSB7Ci0gICAgY2FzZSBMaW5lSm9pbjo6Um91bmQ6Ci0gICAgICAgIGpvaW5TdHls
ZSA9IEQyRDFfTElORV9KT0lOX1JPVU5EOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExpbmVK
b2luOjpCZXZlbDoKLSAgICAgICAgam9pblN0eWxlID0gRDJEMV9MSU5FX0pPSU5fQkVWRUw7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUpvaW46Ok1pdGVyOgotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGpvaW5TdHlsZSA9IEQyRDFfTElORV9KT0lOX01JVEVSOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0TGluZUpvaW4oam9pblN0eWxlKTsKLX0K
LQotdm9pZCBzZXRNaXRlckxpbWl0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNv
bnRleHQsIGZsb2F0IG1pdGVyTGltaXQpCi17Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNldE1pdGVy
TGltaXQobWl0ZXJMaW1pdCk7Ci19Ci0KLXZvaWQgZmlsbFJlY3QoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGaWxs
U291cmNlJiBmaWxsU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCi17Ci0g
ICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0gICAg
cGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwotICAgIGRyYXdXaXRoU2hhZG93
KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwgc2hhZG93U3RhdGUsIFsmcGxhdGZvcm1Db250ZXh0LCBy
ZWN0LCAmZmlsbFNvdXJjZV0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAg
ICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKLSAgICAgICAgcmVuZGVyVGFy
Z2V0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBmaWxsU291cmNlLmJydXNoLmdldCgpKTsKLSAg
ICB9KTsKLX0KLQotdm9pZCBmaWxsUmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZv
cm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgY29u
c3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAgIGF1dG8gY29udGV4dCA9IHBsYXRm
b3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdz
KDEsIF9fTElORV9fKTsKLSAgICBkcmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIHJlY3Qs
IHNoYWRvd1N0YXRlLCBbJnBsYXRmb3JtQ29udGV4dCwgY29sb3IsIHJlY3RdKElEMkQxUmVuZGVy
VGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVj
dCA9IHJlY3Q7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwg
cGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKGNvbG9yKS5nZXQoKSk7Ci0gICAgfSk7Ci19
Ci0KLXZvaWQgZmlsbFJvdW5kZWRSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
ciwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAgIGF1dG8gY29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5z
ZXRUYWdzKDEsIF9fTElORV9fKTsKLQotICAgIGNvbnN0IEZsb2F0UmVjdCYgciA9IHJlY3QucmVj
dCgpOwotICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSA9IHJlY3QucmFk
aWkoKTsKLSAgICBib29sIGVxdWFsV2lkdGhzID0gKHJhZGlpLnRvcExlZnQoKS53aWR0aCgpID09
IHJhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSAmJiByYWRpaS50b3BSaWdodCgpLndpZHRoKCkgPT0g
cmFkaWkuYm90dG9tTGVmdCgpLndpZHRoKCkgJiYgcmFkaWkuYm90dG9tTGVmdCgpLndpZHRoKCkg
PT0gcmFkaWkuYm90dG9tUmlnaHQoKS53aWR0aCgpKTsKLSAgICBib29sIGVxdWFsSGVpZ2h0cyA9
IChyYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgPT0gcmFkaWkuYm90dG9tTGVmdCgpLmhlaWdodCgp
ICYmIHJhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSA9PSByYWRpaS50b3BSaWdodCgpLmhlaWdo
dCgpICYmIHJhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgPT0gcmFkaWkuYm90dG9tUmlnaHQoKS5o
ZWlnaHQoKSk7Ci0gICAgYm9vbCBoYXNDdXN0b21GaWxsID0gZmFsc2U7IC8vIEZJWE1FOiBXaHkg
aXNuJ3QgYSBGaWxsU291cmNlIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uPwotICAgIGlmICghaGFz
Q3VzdG9tRmlsbCAmJiBlcXVhbFdpZHRocyAmJiBlcXVhbEhlaWdodHMgJiYgcmFkaWkudG9wTGVm
dCgpLndpZHRoKCkgKiAyID09IHIud2lkdGgoKSAmJiByYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkg
KiAyID09IHIuaGVpZ2h0KCkpIHsKLSAgICAgICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250
ZXh0LCByLCBzaGFkb3dTdGF0ZSwgWyZwbGF0Zm9ybUNvbnRleHQsIGNvbG9yLCByZWN0LCByYWRp
aSwgcl0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICAgICAgYXV0
byByb3VuZGVkUmVjdCA9IEQyRDE6OlJvdW5kZWRSZWN0KHIsIHJhZGlpLnRvcExlZnQoKS53aWR0
aCgpLCByYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkpOwotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0
LT5GaWxsUm91bmRlZFJlY3RhbmdsZSgmcm91bmRlZFJlY3QsIHBsYXRmb3JtQ29udGV4dC5icnVz
aFdpdGhDb2xvcihjb2xvcikuZ2V0KCkpOwotICAgICAgICB9KTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBQYXRoIHBhdGg7Ci0gICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCk7Ci0gICAg
ICAgIGZpbGxQYXRoKHBsYXRmb3JtQ29udGV4dCwgcGF0aCwgY29sb3IsIHNoYWRvd1N0YXRlKTsK
LSAgICB9Ci19Ci0KLXZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IEZpbGxTb3VyY2UmIGZpbGxT
b3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBhdXRvIGNvbnRl
eHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRl
eHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0KLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRS
ZWN0KHJlY3QpOwotCi0gICAgaWYgKCFyb3VuZGVkSG9sZVJlY3QucmFkaWkoKS5pc1plcm8oKSkK
LSAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyb3VuZGVkSG9sZVJlY3QpOwotICAgIGVsc2UK
LSAgICAgICAgcGF0aC5hZGRSZWN0KHJvdW5kZWRIb2xlUmVjdC5yZWN0KCkpOwotCi0gICAgRmls
bFNvdXJjZSBmaWxsV2l0aEhvbGVTb3VyY2UgPSBmaWxsU291cmNlOwotICAgIGZpbGxXaXRoSG9s
ZVNvdXJjZS5maWxsUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkOwotCi0gICAgZmlsbFBhdGgocGxh
dGZvcm1Db250ZXh0LCBwYXRoLCBmaWxsV2l0aEhvbGVTb3VyY2UsIHNoYWRvd1N0YXRlKTsKLX0K
LQotdm9pZCBmaWxsUmVjdFdpdGhHcmFkaWVudChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxh
dGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIElEMkQxQnJ1c2gqIGdyYWRpZW50
KQotewotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBkcmF3
V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1Db250ZXh0LCByZWN0LCAm
Z3JhZGllbnRdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgY29u
c3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+Rmls
bFJlY3RhbmdsZSgmZDJkUmVjdCwgZ3JhZGllbnQpOwotICAgIH0pOwotfQotCi12b2lkIGZpbGxQ
YXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgm
IHBhdGgsIGNvbnN0IEZpbGxTb3VyY2UmIGZpbGxTb3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBz
aGFkb3dTdGF0ZSkKLXsKLSAgICBwYXRoLmNsb3NlQW55T3Blbkdlb21ldHJpZXMoRDJEMV9GSUdV
UkVfRU5EX09QRU4pOwotCi0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRl
clRhcmdldCgpOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwot
Ci0gICAgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4gcGF0aFRvRmlsbDsKLSAgICBwYXRoLmNy
ZWF0ZUdlb21ldHJ5V2l0aEZpbGxNb2RlKGZpbGxTb3VyY2UuZmlsbFJ1bGUsIHBhdGhUb0ZpbGwp
OwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwotICAgIEZ1bmN0
aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4gZHJhd0Z1bmN0aW9uID0gWyZwbGF0Zm9ybUNv
bnRleHQsICZwYXRoVG9GaWxsLCAmZmlsbFNvdXJjZV0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRl
clRhcmdldCkgewotICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxHZW9tZXRyeShwYXRoVG9GaWxs
LmdldCgpLCBmaWxsU291cmNlLmJydXNoLmdldCgpKTsKLSAgICB9OwotCi0gICAgaWYgKHNoYWRv
d1N0YXRlLmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3QgPSBw
YXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKLSAgICAgICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1D
b250ZXh0LCBib3VuZGluZ1JlY3QsIHNoYWRvd1N0YXRlLCBXVEZNb3ZlKGRyYXdGdW5jdGlvbikp
OwotICAgIH0gZWxzZQotICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQs
IFdURk1vdmUoZHJhd0Z1bmN0aW9uKSk7Ci19Ci0KLXZvaWQgZmlsbFBhdGgoUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCwgY29uc3QgQ29s
b3ImIGNvbG9yLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCi17Ci0gICAgYXV0byBj
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0gICAgcGxhdGZvcm1D
b250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwotCi0gICAgQ09NUHRyPElEMkQxR2VvbWV0cnlH
cm91cD4gcGF0aFRvRmlsbDsKLSAgICBwYXRoLmNyZWF0ZUdlb21ldHJ5V2l0aEZpbGxNb2RlKFdp
bmRSdWxlOjpFdmVuT2RkLCBwYXRoVG9GaWxsKTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRU
YWdzKDEsIF9fTElORV9fKTsKLQotICAgIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQq
KT4gZHJhd0Z1bmN0aW9uID0gWyZwbGF0Zm9ybUNvbnRleHQsICZwYXRoVG9GaWxsLCBjb2xvcl0o
SUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICByZW5kZXJUYXJnZXQt
PkZpbGxHZW9tZXRyeShwYXRoVG9GaWxsLmdldCgpLCBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRo
Q29sb3IoY29sb3IpLmdldCgpKTsKLSAgICB9OwotCi0gICAgaWYgKHNoYWRvd1N0YXRlLmlzVmlz
aWJsZSgpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3QgPSBwYXRoLmZhc3RCb3Vu
ZGluZ1JlY3QoKTsKLSAgICAgICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBib3Vu
ZGluZ1JlY3QsIHNoYWRvd1N0YXRlLCBXVEZNb3ZlKGRyYXdGdW5jdGlvbikpOwotICAgIH0gZWxz
ZQotICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFdURk1vdmUoZHJh
d0Z1bmN0aW9uKSk7Ci19Ci0KLXZvaWQgc3Ryb2tlUmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0
aCwgY29uc3QgU3Ryb2tlU291cmNlJiBzdHJva2VTb3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBz
aGFkb3dTdGF0ZSkKLXsKLSAgICBkcmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIHJlY3Qs
IHNoYWRvd1N0YXRlLCBbJnBsYXRmb3JtQ29udGV4dCwgJnN0cm9rZVNvdXJjZSwgcmVjdCwgbGlu
ZVdpZHRoXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIHBsYXRm
b3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICAgICAgY29uc3QgRDJEMV9SRUNU
X0YgZDJkUmVjdCA9IHJlY3Q7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RHJhd1JlY3RhbmdsZSgm
ZDJkUmVjdCwgc3Ryb2tlU291cmNlLmJydXNoLmdldCgpLCBsaW5lV2lkdGgsIHBsYXRmb3JtQ29u
dGV4dC5zdHJva2VTdHlsZSgpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBzdHJva2VQYXRoKFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgsIGNv
bnN0IFN0cm9rZVNvdXJjZSYgc3Ryb2tlU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93
U3RhdGUpCi17Ci0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdl
dCgpOwotICAgIAotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLQot
ICAgIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4gZHJhd0Z1bmN0aW9uID0gWyZw
bGF0Zm9ybUNvbnRleHQsICZwYXRoLCAmc3Ryb2tlU291cmNlXShJRDJEMVJlbmRlclRhcmdldCog
cmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RHJhd0dlb21ldHJ5KHBhdGgu
cGxhdGZvcm1QYXRoKCksIHN0cm9rZVNvdXJjZS5icnVzaC5nZXQoKSwgc3Ryb2tlU291cmNlLnRo
aWNrbmVzcywgcGxhdGZvcm1Db250ZXh0LnN0cm9rZVN0eWxlKCkpOwotICAgIH07Ci0KLSAgICBp
ZiAoc2hhZG93U3RhdGUuaXNWaXNpYmxlKCkpIHsKLSAgICAgICAgYXV0byBib3VuZGluZ1JlY3Qg
PSBwYXRoLmZhc3RCb3VuZGluZ1JlY3RGb3JTdHJva2UocGxhdGZvcm1Db250ZXh0KTsKLSAgICAg
ICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBib3VuZGluZ1JlY3QsIHNoYWRvd1N0
YXRlLCBXVEZNb3ZlKGRyYXdGdW5jdGlvbikpOwotICAgIH0gZWxzZQotICAgICAgICBkcmF3V2l0
aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFdURk1vdmUoZHJhd0Z1bmN0aW9uKSk7Ci19Ci0K
LXZvaWQgZHJhd1BhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwg
Y29uc3QgUGF0aCYgcGF0aCwgY29uc3QgU3Ryb2tlU291cmNlJiBzdHJva2VTb3VyY2UsIGNvbnN0
IFNoYWRvd1N0YXRlJikKLXsKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVu
ZGVyVGFyZ2V0KCk7Ci0KLSAgICBwYXRoLmNsb3NlQW55T3Blbkdlb21ldHJpZXMoRDJEMV9GSUdV
UkVfRU5EX09QRU4pOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18p
OwotCi0gICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBbJnBsYXRmb3JtQ29u
dGV4dCwgJnN0cm9rZVNvdXJjZSwgJnBhdGhdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJn
ZXQpIHsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3R2VvbWV0cnkocGF0aC5wbGF0Zm9ybVBh
dGgoKSwgc3Ryb2tlU291cmNlLmJydXNoLmdldCgpLCBzdHJva2VTb3VyY2UudGhpY2tuZXNzLCBw
bGF0Zm9ybUNvbnRleHQuc3Ryb2tlU3R5bGUoKSk7Ci0gICAgfSk7Ci0KLSAgICBmbHVzaChwbGF0
Zm9ybUNvbnRleHQpOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3V2l0aFNoYWRvd0hlbHBlcihJRDJE
MVJlbmRlclRhcmdldCogY29udGV4dCwgSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1hcFRh
cmdldCwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ1JlY3QsIGNvbnN0IENvbG9yJiBzaGFkb3dD
b2xvciwgY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIpCi17
Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjdXJyZW50Q2FudmFzID0gRGlyZWN0MkQ6OmNyZWF0
ZUJpdG1hcENvcHlGcm9tQ29udGV4dChiaXRtYXBUYXJnZXQpOwotICAgIGlmICghY3VycmVudENh
bnZhcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4g
c2hhZG93RGV2aWNlQ29udGV4dDsKLSAgICBIUkVTVUxUIGhyID0gYml0bWFwVGFyZ2V0LT5RdWVy
eUludGVyZmFjZSgmc2hhZG93RGV2aWNlQ29udGV4dCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VD
Q0VFREVEKGhyKSk7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIHNoYWRvdyBlZmZlY3QKLSAgICBDT01Q
dHI8SUQyRDFFZmZlY3Q+IHNoYWRvd0VmZmVjdDsKLSAgICBociA9IHNoYWRvd0RldmljZUNvbnRl
eHQtPkNyZWF0ZUVmZmVjdChDTFNJRF9EMkQxU2hhZG93LCAmc2hhZG93RWZmZWN0KTsKLSAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIHNoYWRvd0VmZmVjdC0+U2V0SW5w
dXQoMCwgY3VycmVudENhbnZhcy5nZXQoKSk7Ci0gICAgc2hhZG93RWZmZWN0LT5TZXRWYWx1ZShE
MkQxX1NIQURPV19QUk9QX0NPTE9SLCBzdGF0aWNfY2FzdDxEMkQxX1ZFQ1RPUl80Rj4oc2hhZG93
Q29sb3IpKTsKLQotICAgIGZsb2F0IGJsdXJEZXZpYXRpb24gPSAwLjUgKiBzaGFkb3dCbHVyOwot
ICAgIHNoYWRvd0VmZmVjdC0+U2V0VmFsdWUoRDJEMV9TSEFET1dfUFJPUF9CTFVSX1NUQU5EQVJE
X0RFVklBVElPTiwgYmx1ckRldmlhdGlvbik7Ci0KLSAgICBDT01QdHI8SUQyRDFFZmZlY3Q+IHNo
YWRvd1RyYW5zZm9ybUVmZmVjdDsKLSAgICBociA9IHNoYWRvd0RldmljZUNvbnRleHQtPkNyZWF0
ZUVmZmVjdChDTFNJRF9EMkQxMkRBZmZpbmVUcmFuc2Zvcm0sICZzaGFkb3dUcmFuc2Zvcm1FZmZl
Y3QpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgc2hhZG93VHJh
bnNmb3JtRWZmZWN0LT5TZXRJbnB1dEVmZmVjdCgwLCBzaGFkb3dFZmZlY3QuZ2V0KCkpOwotCi0g
ICAgLy8gTXVzdCBmbGlwIHRoZSBheGlzIGZvciB0aGUgc2hhZG93IG9mZnNldCwgc2luY2UgRGly
ZWN0MkQncyBZIGF4aXMgaXMgaW52ZXJ0ZWQuCi0gICAgYXV0byBzaGFkb3dUcmFuc2xhdGlvbiA9
IEQyRDE6Ok1hdHJpeDN4MkY6OlRyYW5zbGF0aW9uKHNoYWRvd09mZnNldC53aWR0aCgpLCAtc2hh
ZG93T2Zmc2V0LmhlaWdodCgpKTsKLSAgICBzaGFkb3dUcmFuc2Zvcm1FZmZlY3QtPlNldFZhbHVl
KEQyRDFfMkRBRkZJTkVUUkFOU0ZPUk1fUFJPUF9UUkFOU0ZPUk1fTUFUUklYLCBzaGFkb3dUcmFu
c2xhdGlvbik7Ci0KLSAgICBDT01QdHI8SUQyRDFFZmZlY3Q+IGNvbXBvc2l0b3I7Ci0gICAgaHIg
PSBzaGFkb3dEZXZpY2VDb250ZXh0LT5DcmVhdGVFZmZlY3QoQ0xTSURfRDJEMUNvbXBvc2l0ZSwg
JmNvbXBvc2l0b3IpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAg
Y29tcG9zaXRvci0+U2V0SW5wdXRFZmZlY3QoMCwgc2hhZG93VHJhbnNmb3JtRWZmZWN0LmdldCgp
KTsKLSAgICBjb21wb3NpdG9yLT5TZXRJbnB1dCgxLCBjdXJyZW50Q2FudmFzLmdldCgpKTsKLQot
ICAgIHNoYWRvd0RldmljZUNvbnRleHQtPkJlZ2luRHJhdygpOwotICAgIHNoYWRvd0RldmljZUNv
bnRleHQtPkNsZWFyKEQyRDE6OkNvbG9yRigwLCAwLCAwLCAwKSk7Ci0gICAgc2hhZG93RGV2aWNl
Q29udGV4dC0+RHJhd0ltYWdlKGNvbXBvc2l0b3IuZ2V0KCkpOwotICAgIGhyID0gc2hhZG93RGV2
aWNlQ29udGV4dC0+RW5kRHJhdygpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7Ci0gICAgaHIgPSBiaXRtYXBUYXJn
ZXQtPkdldEJpdG1hcCgmYml0bWFwKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKLQotICAgIEludFNpemUgcGl4ZWxTaXplID0gY29udGV4dC0+R2V0UGl4ZWxTaXplKCk7Ci0g
ICAgQ09NUHRyPElEMkQxQml0bWFwPiBjcm9wcGVkID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcChi
aXRtYXBUYXJnZXQsIHBpeGVsU2l6ZSk7Ci0gICAgaWYgKCFjcm9wcGVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhdXRvIHNjYWxlRmFjdG9yID0gYml0bWFwUmVzb2x1dGlvbihjb250ZXh0KTsK
LQotICAgIEZsb2F0UmVjdCBzY2FsZWRCb3VuZGluZ1JlY3QoYm91bmRpbmdSZWN0KTsKLSAgICBz
Y2FsZWRCb3VuZGluZ1JlY3Quc2NhbGUoc2NhbGVGYWN0b3Iud2lkdGgoKSwgc2NhbGVGYWN0b3Iu
aGVpZ2h0KCkpOwotCi0gICAgLy8gVGFrZSB0aGUgbWFnbml0dWRlIG9mIHRoZSBvZmZzZXQuIElm
IHRoZSBvcmlnaW4gd2FzIG91dHNpZGUgdGhlIGRyYXdpbmcgY29udGV4dCwgd2Ugc3RyZXRjaGVk
IHRvIGluY2x1ZGUgdGhvc2UgcG9pbnRzLAotICAgIC8vIGFuZCBzbyB3ZSBuZWVkIHRvIGNyb3Ag
dGhlbSBvdXQuIElmIHRoZSBvcmlnaW4gd2FzIGluc2lkZSwgd2Ugd2FudCB0byBob25vciB0aGUg
b2Zmc2V0LgotICAgIGludCB4ID0gY2xhbXBUbzxpbnQ+KHN0ZDo6YWJzKHNjYWxlZEJvdW5kaW5n
UmVjdC54KCkpKTsKLSAgICBpbnQgeSA9IGNsYW1wVG88aW50PihzdGQ6OmFicyhzY2FsZWRCb3Vu
ZGluZ1JlY3QueSgpKSk7Ci0gICAgaW50IHdpZHRoID0gY2xhbXBUbzxpbnQ+KHNjYWxlZEJvdW5k
aW5nUmVjdC53aWR0aCgpKTsKLSAgICBpbnQgaGVpZ2h0ID0gY2xhbXBUbzxpbnQ+KHNjYWxlZEJv
dW5kaW5nUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBJbnRSZWN0IG91dHB1dFJlY3QoSW50UG9pbnQo
eCwgeSksIEludFNpemUod2lkdGgsIGhlaWdodCkpOwotICAgIEludFJlY3QgZGVzdENvbnRleHRS
ZWN0KEludFBvaW50KCksIHBpeGVsU2l6ZSk7Ci0gICAgaWYgKG91dHB1dFJlY3QuaW50ZXJzZWN0
cyhkZXN0Q29udGV4dFJlY3QpKQotICAgICAgICBvdXRwdXRSZWN0LmludGVyc2VjdChkZXN0Q29u
dGV4dFJlY3QpOwotCi0gICAgRDJEMV9SRUNUX1UgY3JvcFJlY3QgPSBvdXRwdXRSZWN0OwotICAg
IGF1dG8gdGFyZ2V0UG9pbnQgPSBEMkQxOjpQb2ludDJVKCk7Ci0gICAgY3JvcHBlZC0+Q29weUZy
b21CaXRtYXAoJnRhcmdldFBvaW50LCBiaXRtYXAuZ2V0KCksICZjcm9wUmVjdCk7Ci0KLSAgICBj
b250ZXh0LT5EcmF3Qml0bWFwKGNyb3BwZWQuZ2V0KCkpOwotfQotCi12b2lkIGRyYXdXaXRoU2hh
ZG93KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIEZsb2F0UmVjdCBi
b3VuZGluZ1JlY3QsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSwgRnVuY3Rpb248dm9p
ZChJRDJEMVJlbmRlclRhcmdldCopPiYmIGRyYXdDb21tYW5kcykKLXsKLSAgICBpZiAoIXNoYWRv
d1N0YXRlLmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3Jt
Q29udGV4dCwgV1RGTW92ZShkcmF3Q29tbWFuZHMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIHBsYXRmb3JtQ29udGV4dC5ub3RpZnlQcmVEcmF3T2JzZXJ2ZXIoKTsKLQotICAgIGF1
dG8qIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBGbG9h
dFNpemUgcmVuZGVyVGFyZ2V0U2l6ZSA9IGNvbnRleHQtPkdldFNpemUoKTsKLSAgICBjb25zdCBG
bG9hdFJlY3QgY29udGV4dFJlY3QoRmxvYXRQb2ludCgpLCByZW5kZXJUYXJnZXRTaXplKTsKLSAg
ICBGbG9hdFJlY3Qgd29ya2luZ0NvbnRleHRSZWN0KGNvbnRleHRSZWN0KTsKLQotICAgIGlmIChi
b3VuZGluZ1JlY3QuaXNJbmZpbml0ZSgpKQotICAgICAgICBib3VuZGluZ1JlY3QgPSB3b3JraW5n
Q29udGV4dFJlY3Q7Ci0KLSAgICBpZiAoIWNvbnRleHRSZWN0LmNvbnRhaW5zKGJvdW5kaW5nUmVj
dCkpCi0gICAgICAgIHdvcmtpbmdDb250ZXh0UmVjdC51bml0ZShib3VuZGluZ1JlY3QpOwotCi0g
ICAgd29ya2luZ0NvbnRleHRSZWN0LmV4cGFuZChzdGQ6OmFicyhzaGFkb3dTdGF0ZS5vZmZzZXQu
d2lkdGgoKSkgKyBzaGFkb3dTdGF0ZS5ibHVyLCBzdGQ6OmFicyhzaGFkb3dTdGF0ZS5vZmZzZXQu
aGVpZ2h0KCkpICsgc2hhZG93U3RhdGUuYmx1cik7Ci0KLSAgICBhdXRvIHNjYWxlRmFjdG9yID0g
Yml0bWFwUmVzb2x1dGlvbihjb250ZXh0KTsKLQotICAgIHdvcmtpbmdDb250ZXh0UmVjdC5zY2Fs
ZShzY2FsZUZhY3Rvcik7Ci0KLSAgICBJbnRTaXplIHBpeGVsRGltZW5zaW9ucyhjbGFtcFRvPGlu
dD4od29ya2luZ0NvbnRleHRSZWN0LndpZHRoKCkpLCBjbGFtcFRvPGludD4od29ya2luZ0NvbnRl
eHRSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICAvLyBSZW5kZXIgdGhlIGN1cnJlbnQgZ2VvbWV0cnkg
dG8gYSBiaXRtYXAgY29udGV4dAotICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4g
Yml0bWFwVGFyZ2V0ID0gY3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0T2ZTaXplKHBpeGVsRGltZW5z
aW9ucywgY29udGV4dCk7Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiBjdXJyZW50VHJhbnNmb3Jt
OwotICAgIGJpdG1hcFRhcmdldC0+R2V0VHJhbnNmb3JtKCZjdXJyZW50VHJhbnNmb3JtKTsKLQot
ICAgIGlmICghY29udGV4dFJlY3QuY29udGFpbnMoYm91bmRpbmdSZWN0LmxvY2F0aW9uKCkpKSB7
Ci0gICAgICAgIGF1dG8gdHJhbnNsYXRpb24gPSBEMkQxOjpNYXRyaXgzeDJGOjpUcmFuc2xhdGlv
bigtYm91bmRpbmdSZWN0LmxvY2F0aW9uKCkueCgpLCAtYm91bmRpbmdSZWN0LmxvY2F0aW9uKCku
eSgpKTsKLSAgICAgICAgYml0bWFwVGFyZ2V0LT5TZXRUcmFuc2Zvcm0odHJhbnNsYXRpb24gKiBj
dXJyZW50VHJhbnNmb3JtKTsKLSAgICB9Ci0KLSAgICBiaXRtYXBUYXJnZXQtPkJlZ2luRHJhdygp
OwotICAgIGRyYXdDb21tYW5kcyhiaXRtYXBUYXJnZXQuZ2V0KCkpOwotICAgIEhSRVNVTFQgaHIg
PSBiaXRtYXBUYXJnZXQtPkVuZERyYXcoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQo
aHIpKTsKLQotICAgIGJpdG1hcFRhcmdldC0+U2V0VHJhbnNmb3JtKGN1cnJlbnRUcmFuc2Zvcm0p
OwotCi0gICAgZHJhd1dpdGhTaGFkb3dIZWxwZXIoY29udGV4dCwgYml0bWFwVGFyZ2V0LmdldCgp
LCBib3VuZGluZ1JlY3QsIHNoYWRvd1N0YXRlLmNvbG9yLCBzaGFkb3dTdGF0ZS5vZmZzZXQsIHNo
YWRvd1N0YXRlLmJsdXIpOwotICAgIHBsYXRmb3JtQ29udGV4dC5ub3RpZnlQb3N0RHJhd09ic2Vy
dmVyKCk7Ci19Ci0KLXZvaWQgZHJhd1dpdGhvdXRTaGFkb3coUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmIHBsYXRmb3JtQ29udGV4dCwgRnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiYm
IGRyYXdDb21tYW5kcykKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQubm90aWZ5UHJlRHJhd09ic2Vy
dmVyKCk7Ci0gICAgZHJhd0NvbW1hbmRzKHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7
Ci0gICAgcGxhdGZvcm1Db250ZXh0Lm5vdGlmeVBvc3REcmF3T2JzZXJ2ZXIoKTsKLX0KLQotdm9p
ZCBjbGVhclJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29u
dGV4dCwgWyZwbGF0Zm9ybUNvbnRleHQsIHJlY3RdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJU
YXJnZXQpIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlbmRlclRhcmdldFJlY3QoRmxvYXRQb2ludCgp
LCByZW5kZXJUYXJnZXQtPkdldFNpemUoKSk7Ci0KLSAgICAgICAgRDJEMTo6TWF0cml4M3gyRiBt
YXRyaXg7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+R2V0VHJhbnNmb3JtKCZtYXRyaXgpOwotCi0g
ICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0obWF0cml4KTsKLQotICAgICAgICBGbG9h
dFJlY3QgcmVjdFRvQ2xlYXIocmVjdCk7Ci0gICAgICAgIGlmICghdHJhbnNmb3JtLnByZXNlcnZl
c0F4aXNBbGlnbm1lbnQoKSkgewotICAgICAgICAgICAgQ09NUHRyPElEMkQxUmVjdGFuZ2xlR2Vv
bWV0cnk+IHJlY3RhbmdsZTsKLSAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRl
eHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUmVjdGFuZ2xlR2VvbWV0cnkocmVjdFRvQ2xlYXIs
ICZyZWN0YW5nbGUpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxHZW9tZXRyeShyZWN0YW5nbGUuZ2V0KCks
IHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihEMkQxOjpDb2xvckYoMCwgMCwgMCwgMCkp
LmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHJlY3RU
b0NsZWFyID0gdHJhbnNmb3JtLm1hcFJlY3QocmVjdFRvQ2xlYXIpOwotCi0gICAgICAgIGlmIChy
ZWN0VG9DbGVhci5jb250YWlucyhyZW5kZXJUYXJnZXRSZWN0KSkgewotICAgICAgICAgICAgcGxh
dGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwotICAgICAgICAgICAgcmVuZGVyVGFy
Z2V0LT5DbGVhcihEMkQxOjpDb2xvckYoMCwgMCwgMCwgMCkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5F
X18pOwotICAgICAgICByZW5kZXJUYXJnZXQtPlB1c2hBeGlzQWxpZ25lZENsaXAocmVjdFRvQ2xl
YXIsIEQyRDFfQU5USUFMSUFTX01PREVfUEVSX1BSSU1JVElWRSk7Ci0gICAgICAgIHJlbmRlclRh
cmdldC0+Q2xlYXIoRDJEMTo6Q29sb3JGKDAsIDAsIDAsIDApKTsKLSAgICAgICAgcmVuZGVyVGFy
Z2V0LT5Qb3BBeGlzQWxpZ25lZENsaXAoKTsKLSAgICB9KTsKLX0KLQotCi12b2lkIGRyYXdHbHlw
aHMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmlsbFNv
dXJjZSYgZmlsbFNvdXJjZSwgY29uc3QgU3Ryb2tlU291cmNlJiBzdHJva2VTb3VyY2UsIGNvbnN0
IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0
IEZvbnQmIGZvbnQsIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0LCBjb25zdCBWZWN0b3I8dW5z
aWduZWQgc2hvcnQ+JiBnbHlwaHMsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGhvcml6b250YWxBZHZh
bmNlcywgY29uc3QgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+JiBnbHlwaE9mZnNldHMsIGZs
b2F0IHhPZmZzZXQsIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSwgZmxvYXQg
c3Ryb2tlVGhpY2tuZXNzLCBjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNldCwgY29uc3QgQ29s
b3ImIHNoYWRvd0NvbG9yKQotewotICAgIGF1dG8gcmVuZGVyVGFyZ2V0ID0gcGxhdGZvcm1Db250
ZXh0LnJlbmRlclRhcmdldCgpOwotICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3Jt
RGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIocGxhdGZvcm1Db250ZXh0KTsKLQotICAgIEQyRDFfTUFUUklYXzNYMl9G
IG1hdHJpeDsKLSAgICByZW5kZXJUYXJnZXQtPkdldFRyYW5zZm9ybSgmbWF0cml4KTsKLQotICAg
IC8qCi0gICAgLy8gRklYTUU6IEdldCBTeW50aGV0aWMgT2JsaXF1ZSB3b3JraW5nCi0gICAgaWYg
KHBsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkpIHsKLSAgICAgICAgc3RhdGljIGZsb2F0
IHNrZXcgPSAtdGFuZihzeW50aGV0aWNPYmxpcXVlQW5nbGUoKSAqIHBpRmxvYXQgLyAxODAuMGYp
OwotICAgICAgICBhdXRvIHNrZXdNYXRyaXggPSBEMkQxOjpNYXRyaXgzeDJGOjpTa2V3KHNrZXcs
IDApOwotICAgICAgICBjb250ZXh0LT5TZXRUcmFuc2Zvcm0obWF0cml4ICogc2tld01hdHJpeCk7
Ci0gICAgfQotICAgICovCi0KLSAgICBSRUxFQVNFX0FTU0VSVChwbGF0Zm9ybURhdGEuZHdGb250
KCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKHBsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCkpOwotCi0g
ICAgRFdSSVRFX0dMWVBIX1JVTiBnbHlwaFJ1bjsKLSAgICBnbHlwaFJ1bi5mb250RmFjZSA9IHBs
YXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCk7Ci0gICAgZ2x5cGhSdW4uZm9udEVtU2l6ZSA9IHBsYXRm
b3JtRGF0YS5zaXplKCk7Ci0gICAgZ2x5cGhSdW4uZ2x5cGhDb3VudCA9IGdseXBocy5zaXplKCk7
Ci0gICAgZ2x5cGhSdW4uZ2x5cGhJbmRpY2VzID0gZ2x5cGhzLmRhdGEoKTsKLSAgICBnbHlwaFJ1
bi5nbHlwaEFkdmFuY2VzID0gaG9yaXpvbnRhbEFkdmFuY2VzLmRhdGEoKTsKLSAgICBnbHlwaFJ1
bi5nbHlwaE9mZnNldHMgPSBudWxscHRyOwotICAgIGdseXBoUnVuLmlzU2lkZXdheXMgPSBwbGF0
Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsOwotICAg
IGdseXBoUnVuLmJpZGlMZXZlbCA9IDA7Ci0KLSAgICAvKgotICAgIC8vIEZJWE1FKCk6IEdldCBT
aGFkb3dzIHdvcmtpbmcKLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IHNo
YWRvd0JsdXI7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgZ3JhcGhpY3NDb250ZXh0Lmdl
dFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKLQotICAgIGJv
b2wgaGFzU2ltcGxlU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09
IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlkKCkgJiYgIXNoYWRv
d0JsdXIgJiYgKCFncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBn
cmFwaGljc0NvbnRleHQuZ2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQo
KSk7Ci0gICAgaWYgKGhhc1NpbXBsZVNoYWRvdykgewotICAgICAgICAvLyBQYWludCBzaW1wbGUg
c2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2
b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCi0gICAgICAgIGdyYXBoaWNzQ29udGV4
dC5jbGVhclNoYWRvdygpOwotICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRl
eHQuZmlsbENvbG9yKCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0Nv
bG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7
Ci0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0Lndp
ZHRoKCk7Ci0gICAgICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRo
ZW4gd2UgaGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24g
aXMgbmVnYXRpdmUuCi0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hh
ZG93T2Zmc2V0LmhlaWdodCgpICogKGdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNm
b3JtcygpID8gLTEgOiAxKTsKLQotICAgICAgICBhdXRvIHNoYWRvd0JydXNoID0gZ3JhcGhpY3ND
b250ZXh0LmJydXNoV2l0aENvbG9yKHNoYWRvd0ZpbGxDb2xvcik7Ci0gICAgICAgIGNvbnRleHQt
PkRyYXdHbHlwaFJ1bihEMkQxOjpQb2ludDJGKHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksICZn
bHlwaFJ1biwgc2hhZG93QnJ1c2gpOwotICAgICAgICBpZiAoZm9udC5zeW50aGV0aWNCb2xkT2Zm
c2V0KCkpCi0gICAgICAgICAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihz
aGFkb3dUZXh0WCArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBzaGFkb3dUZXh0WSksICZn
bHlwaFJ1biwgc2hhZG93QnJ1c2gpOwotICAgIH0KLSAgICAqLwotCi0gICAgcmVuZGVyVGFyZ2V0
LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihwb2ludC54KCksIHBvaW50LnkoKSksICZnbHlw
aFJ1biwgZmlsbFNvdXJjZS5icnVzaC5nZXQoKSk7Ci0gICAgLy8gaWYgKGZvbnQuc3ludGhldGlj
Qm9sZE9mZnNldCgpKQotICAgIC8vICAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9p
bnQyRihwb2ludC54KCkgKyBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwgcG9pbnQueSgpKSwg
JmdseXBoUnVuLCBncmFwaGljc0NvbnRleHQuc29saWRGaWxsQnJ1c2goKSk7Ci0KLSAgICAvLyBp
ZiAoaGFzU2ltcGxlU2hhZG93KQotICAgIC8vICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93
KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOwotCi0gICAgc3RhdGVTYXZl
ci5yZXN0b3JlKCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0Lm5vdGlmeVBvc3REcmF3T2JzZXJ2ZXIo
KTsKLX0KLQotCi12b2lkIGRyYXdQbGF0Zm9ybUltYWdlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
JiBwbGF0Zm9ybUNvbnRleHQsIElXSUNCaXRtYXAqIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIG9y
aWdpbmFsSW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zLCBmbG9hdCBn
bG9iYWxBbHBoYSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAgIGF1dG8g
bmF0aXZlSW1hZ2VTaXplID0gYml0bWFwU2l6ZShpbWFnZSk7Ci0gICAgQ09NUHRyPElEMkQxQml0
bWFwPiBkZXZpY2VCaXRtYXA7Ci0gICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC5yZW5k
ZXJUYXJnZXQoKS0+Q3JlYXRlQml0bWFwRnJvbVdpY0JpdG1hcChpbWFnZSwgJmRldmljZUJpdG1h
cCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
IGltYWdlU2l6ZSA9IGJpdG1hcFNpemUoZGV2aWNlQml0bWFwLmdldCgpKTsKLSAgICBkcmF3UGxh
dGZvcm1JbWFnZShwbGF0Zm9ybUNvbnRleHQsIGRldmljZUJpdG1hcC5nZXQoKSwgaW1hZ2VTaXpl
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywgZ2xvYmFsQWxwaGEsIHNoYWRvd1N0YXRlKTsK
LX0KLQotdm9pZCBkcmF3UGxhdGZvcm1JbWFnZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxh
dGZvcm1Db250ZXh0LCBJRDJEMUJpdG1hcCogaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zLCBmbG9hdCBnbG9iYWxBbHBoYSwg
Y29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAgIGF1dG8gYml0bWFwU2l6ZSA9
IGltYWdlLT5HZXRTaXplKCk7Ci0KLSAgICBmbG9hdCBjdXJySGVpZ2h0ID0gb3B0aW9ucy5vcmll
bnRhdGlvbigpLnVzZXNXaWR0aEFzSGVpZ2h0KCkgPyBiaXRtYXBTaXplLndpZHRoIDogYml0bWFw
U2l6ZS5oZWlnaHQ7Ci0gICAgaWYgKGN1cnJIZWlnaHQgPD0gc3JjUmVjdC55KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJn
ZXQoKTsKLQotICAgIEQyRDFfTUFUUklYXzNYMl9GIGN0bTsKLSAgICBjb250ZXh0LT5HZXRUcmFu
c2Zvcm0oJmN0bSk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtKGN0bSk7Ci0KLSAg
ICBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGxhdGZvcm1Db250ZXh0KTsK
LQotICAgIGJvb2wgc2hvdWxkVXNlU3ViaW1hZ2UgPSBmYWxzZTsKLQotICAgIC8vIElmIHRoZSBz
b3VyY2UgcmVjdCBpcyBhIHN1YnBvcnRpb24gb2YgdGhlIGltYWdlLCB0aGVuIHdlIGNvbXB1dGUg
YW4gaW5mbGF0ZWQgZGVzdGluYXRpb24gcmVjdCB0aGF0IHdpbGwgaG9sZCB0aGUgZW50aXJlIGlt
YWdlCi0gICAgLy8gYW5kIHRoZW4gc2V0IGEgY2xpcCB0byB0aGUgcG9ydGlvbiB0aGF0IHdlIHdh
bnQgdG8gZGlzcGxheS4KLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWREZXN0UmVjdCA9IGRlc3RSZWN0
OwotCi0gICAgaWYgKHNyY1JlY3Quc2l6ZSgpICE9IGltYWdlU2l6ZSkgewotICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IGltYWdlIHNjYWxpbmcKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgaW1hZ2UgaXMgb25seSBwYXJ0aWFsbHkgbG9hZGVkLCB0
aGVuIHNocmluayB0aGUgZGVzdGluYXRpb24gcmVjdCB0aGF0IHdlJ3JlIGRyYXdpbmcgaW50byBh
Y2NvcmRpbmdseS4KLSAgICBpZiAoIXNob3VsZFVzZVN1YmltYWdlICYmIGN1cnJIZWlnaHQgPCBp
bWFnZVNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0SGVpZ2h0KGFk
anVzdGVkRGVzdFJlY3QuaGVpZ2h0KCkgKiBjdXJySGVpZ2h0IC8gaW1hZ2VTaXplLmhlaWdodCgp
KTsKLQotICAgIFN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1Db250ZXh0LCBv
cHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOwotCi0gICAg
Ly8gSW1hZ2VPcmllbnRhdGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApLgot
ICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoYWRqdXN0ZWREZXN0UmVjdC54KCksIGFkanVzdGVkRGVz
dFJlY3QueSgpKTsKLSAgICBjb250ZXh0LT5TZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKLSAgICBh
ZGp1c3RlZERlc3RSZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7Ci0KLSAgICBpZiAob3B0
aW9ucy5vcmllbnRhdGlvbigpICE9IEltYWdlT3JpZW50YXRpb246Ok5vbmUpIHsKLSAgICAgICAg
Y29uY2F0Q1RNKHBsYXRmb3JtQ29udGV4dCwgb3B0aW9ucy5vcmllbnRhdGlvbigpLnRyYW5zZm9y
bUZyb21EZWZhdWx0KGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgIGlmIChvcHRp
b25zLm9yaWVudGF0aW9uKCkudXNlc1dpZHRoQXNIZWlnaHQoKSkgewotICAgICAgICAgICAgLy8g
VGhlIGRlc3RpbmF0aW9uIHJlY3Qgd2lsbCBoYXZlIGl0J3Mgd2lkdGggYW5kIGhlaWdodCBhbHJl
YWR5IHJldmVyc2VkIGZvciB0aGUgb3JpZW50YXRpb24gb2YKLSAgICAgICAgICAgIC8vIHRoZSBp
bWFnZSwgYXMgaXQgd2FzIG5lZWRlZCBmb3IgcGFnZSBsYXlvdXQsIHNvIHdlIG5lZWQgdG8gcmV2
ZXJzZSBpdCBiYWNrIGhlcmUuCi0gICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0ID0gRmxvYXRS
ZWN0KGFkanVzdGVkRGVzdFJlY3QueCgpLCBhZGp1c3RlZERlc3RSZWN0LnkoKSwgYWRqdXN0ZWRE
ZXN0UmVjdC5oZWlnaHQoKSwgYWRqdXN0ZWREZXN0UmVjdC53aWR0aCgpKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBk
cmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIGFkanVzdGVkRGVzdFJlY3QsIHNoYWRvd1N0
YXRlLCBbaW1hZ2UsIGFkanVzdGVkRGVzdFJlY3QsIGdsb2JhbEFscGhhLCBzcmNSZWN0XShJRDJE
MVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RHJh
d0JpdG1hcChpbWFnZSwgYWRqdXN0ZWREZXN0UmVjdCwgZ2xvYmFsQWxwaGEsIEQyRDFfQklUTUFQ
X0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVIsIHNyY1JlY3QpOwotICAgIH0pOwotCi0gICAgaWYg
KCFzdGF0ZVNhdmVyLmRpZFNhdmUoKSkKLSAgICAgICAgY29udGV4dC0+U2V0VHJhbnNmb3JtKGN0
bSk7Ci19Ci0KLXZvaWQgZHJhd1BhdHRlcm4oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRm
b3JtQ29udGV4dCwgQ09NUHRyPElEMkQxQml0bWFwPiYmIHRpbGVJbWFnZSwgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJl
bmRlclRhcmdldCgpOwotICAgIFBsYXRmb3JtQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihw
bGF0Zm9ybUNvbnRleHQpOwotCi0gICAgY2xpcChwbGF0Zm9ybUNvbnRleHQsIGRlc3RSZWN0KTsK
LQotICAgIFN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1Db250ZXh0LCBjb21w
b3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLQotICAgIGF1dG8gYml0bWFwQnJ1c2hQcm9wZXJ0
aWVzID0gRDJEMTo6Qml0bWFwQnJ1c2hQcm9wZXJ0aWVzKCk7Ci0gICAgYml0bWFwQnJ1c2hQcm9w
ZXJ0aWVzLmV4dGVuZE1vZGVYID0gRDJEMV9FWFRFTkRfTU9ERV9XUkFQOwotICAgIGJpdG1hcEJy
dXNoUHJvcGVydGllcy5leHRlbmRNb2RlWSA9IEQyRDFfRVhURU5EX01PREVfV1JBUDsKLQotICAg
IC8vIENyZWF0ZSBhIGJydXNoIHRyYW5zZm9ybWF0aW9uIHNvIHdlIHBhaW50IHVzaW5nIHRoZSBz
ZWN0aW9uIG9mIHRoZSBpbWFnZSB3ZSBjYXJlIGFib3V0LgotICAgIEFmZmluZVRyYW5zZm9ybSB0
cmFuc2Zvcm1hdGlvbiA9IHBhdHRlcm5UcmFuc2Zvcm07Ci0gICAgdHJhbnNmb3JtYXRpb24udHJh
bnNsYXRlKGRlc3RSZWN0LmxvY2F0aW9uKCkpOwotCi0gICAgYXV0byBicnVzaFByb3BlcnRpZXMg
PSBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKTsKLSAgICBicnVzaFByb3BlcnRpZXMudHJhbnNmb3Jt
ID0gdHJhbnNmb3JtYXRpb247Ci0gICAgYnJ1c2hQcm9wZXJ0aWVzLm9wYWNpdHkgPSAxLjBmOwot
Ci0gICAgLy8gSWYgd2Ugb25seSB3YW50IGEgc3Vic2V0IG9mIHRoZSBiaXRtYXAsIHdlIG5lZWQg
dG8gY3JlYXRlIGEgY3JvcHBlZCBiaXRtYXAgaW1hZ2UuIEFjY29yZGluZyB0byB0aGUgZG9jdW1l
bnRhdGlvbiwKLSAgICAvLyB0aGlzIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBiaXRtYXAgbWVtb3J5
LgotICAgIGlmIChzaXplLndpZHRoKCkgPiBkZXN0UmVjdC53aWR0aCgpIHx8IHNpemUuaGVpZ2h0
KCkgPiBkZXN0UmVjdC5oZWlnaHQoKSkgewotICAgICAgICBmbG9hdCBkcGlYID0gMDsKLSAgICAg
ICAgZmxvYXQgZHBpWSA9IDA7Ci0gICAgICAgIHRpbGVJbWFnZS0+R2V0RHBpKCZkcGlYLCAmZHBp
WSk7Ci0gICAgICAgIGF1dG8gYml0bWFwUHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcFByb3BlcnRp
ZXModGlsZUltYWdlLT5HZXRQaXhlbEZvcm1hdCgpLCBkcGlYLCBkcGlZKTsKLSAgICAgICAgQ09N
UHRyPElEMkQxQml0bWFwPiBzdWJJbWFnZTsKLSAgICAgICAgSFJFU1VMVCBociA9IGNvbnRleHQt
PkNyZWF0ZUJpdG1hcChJbnRTaXplKHRpbGVSZWN0LnNpemUoKSksIGJpdG1hcFByb3BlcnRpZXMs
ICZzdWJJbWFnZSk7Ci0gICAgICAgIGlmIChTVUNDRUVERUQoaHIpKSB7Ci0gICAgICAgICAgICBE
MkQxX1JFQ1RfVSBmaW5pc2hSZWN0ID0gSW50UmVjdCh0aWxlUmVjdCk7Ci0gICAgICAgICAgICBo
ciA9IHN1YkltYWdlLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCB0aWxlSW1hZ2UuZ2V0KCksICZm
aW5pc2hSZWN0KTsKLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAg
ICAgIHRpbGVJbWFnZSA9IHN1YkltYWdlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQ09NUHRy
PElEMkQxQml0bWFwQnJ1c2g+IHBhdHRlcm5CcnVzaDsKLSAgICBIUkVTVUxUIGhyID0gY29udGV4
dC0+Q3JlYXRlQml0bWFwQnJ1c2godGlsZUltYWdlLmdldCgpLCAmYml0bWFwQnJ1c2hQcm9wZXJ0
aWVzLCAmYnJ1c2hQcm9wZXJ0aWVzLCAmcGF0dGVybkJydXNoKTsKLSAgICBBU1NFUlQoU1VDQ0VF
REVEKGhyKSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFtkZXN0UmVjdCwgcGF0dGVybkJy
dXNoXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIGNvbnN0IEQy
RDFfUkVDVF9GIGQyZFJlY3QgPSBkZXN0UmVjdDsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxs
UmVjdGFuZ2xlKCZkMmRSZWN0LCBwYXR0ZXJuQnJ1c2guZ2V0KCkpOwotICAgIH0pOwotfQotCi12
b2lkIGRyYXdSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzLCBjb25zdCBDb2xvciYg
ZmlsbENvbG9yLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImIHN0cm9rZUNv
bG9yKQotewotICAgIC8vIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGhhbmRsZSBwYXR0
ZXJucyBhbmQgZ3JhZGllbnRzIGxpa2UgZHJhd1BhdGggZG9lcywgaXQgcHJvYmFibHkgc2hvdWxk
LgotICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkpOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNl
dFRhZ3MoMSwgX19MSU5FX18pOwotICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4
dCwgWyZwbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGZpbGxDb2xvciwgc3Ryb2tlQ29sb3IsIHN0cm9r
ZVN0eWxlXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIGNvbnN0
IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwotICAgICAgICBhdXRvIGZpbGxCcnVzaCA9IHBs
YXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihmaWxsQ29sb3IpOwotICAgICAgICByZW5kZXJU
YXJnZXQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIGZpbGxCcnVzaC5nZXQoKSk7Ci0gICAgICAg
IGlmIChzdHJva2VTdHlsZSAhPSBOb1N0cm9rZSkgewotICAgICAgICAgICAgYXV0byBzdHJva2VC
cnVzaCA9IHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihzdHJva2VDb2xvcik7Ci0gICAg
ICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdSZWN0YW5nbGUoJmQyZFJlY3QsIHN0cm9rZUJydXNo
LmdldCgpLCBwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCksIHBsYXRmb3JtQ29udGV4
dC5zdHJva2VTdHlsZSgpKTsKLSAgICAgICAgfQotICAgIH0pOwotfQotCi12b2lkIGRyYXdMaW5l
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBTdHJva2VTdHlsZSBzdHJva2VT
dHlsZSwgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yLCBmbG9hdCBzdHJva2VUaGlja25lc3MsIGJv
b2wgc2hvdWxkQW50aWFsaWFzKQotewotICAgIGJvb2wgaXNWZXJ0aWNhbExpbmUgPSAocG9pbnQx
LngoKSArIHN0cm9rZVRoaWNrbmVzcyA9PSBwb2ludDIueCgpKTsKLSAgICBmbG9hdCBzdHJva2VX
aWR0aCA9IGlzVmVydGljYWxMaW5lID8gcG9pbnQyLnkoKSAtIHBvaW50MS55KCkgOiBwb2ludDIu
eCgpIC0gcG9pbnQxLngoKTsKLSAgICBpZiAoIXN0cm9rZVRoaWNrbmVzcyB8fCAhc3Ryb2tlV2lk
dGgpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4
dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIGZsb2F0IGNvcm5lcldpZHRoID0gMDsKLSAgICBib29s
IGRyYXdzRGFzaGVkTGluZSA9IHN0cm9rZVN0eWxlID09IERvdHRlZFN0cm9rZSB8fCBzdHJva2VT
dHlsZSA9PSBEYXNoZWRTdHJva2U7Ci0KLSAgICBDT01QdHI8SUQyRDFTdHJva2VTdHlsZT4gZDJk
U3Ryb2tlU3R5bGU7Ci0gICAgUGxhdGZvcm1Db250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBs
YXRmb3JtQ29udGV4dCwgZHJhd3NEYXNoZWRMaW5lKTsKLSAgICBpZiAoZHJhd3NEYXNoZWRMaW5l
KSB7Ci0gICAgICAgIC8vIEZpZ3VyZSBvdXQgZW5kIHBvaW50cyB0byBlbnN1cmUgd2UgYWx3YXlz
IHBhaW50IGNvcm5lcnMuCi0gICAgICAgIGNvcm5lcldpZHRoID0gZGFzaGVkTGluZUNvcm5lcldp
ZHRoRm9yU3Ryb2tlV2lkdGgoc3Ryb2tlV2lkdGgsIHN0cm9rZVN0eWxlLCBzdHJva2VUaGlja25l
c3MpOwotICAgICAgICBzdHJva2VXaWR0aCAtPSAyICogY29ybmVyV2lkdGg7Ci0gICAgICAgIGZs
b2F0IHBhdHRlcm5XaWR0aCA9IGRhc2hlZExpbmVQYXR0ZXJuV2lkdGhGb3JTdHJva2VXaWR0aChz
dHJva2VXaWR0aCwgc3Ryb2tlU3R5bGUsIHN0cm9rZVRoaWNrbmVzcyk7Ci0gICAgICAgIC8vIENo
ZWNrIGlmIGNvcm5lciBkcmF3aW5nIHN1ZmZpY2llbnRseSBjb3ZlcnMgdGhlIGxpbmUuCi0gICAg
ICAgIGlmIChzdHJva2VXaWR0aCA8PSBwYXR0ZXJuV2lkdGggKyAxKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGZsb2F0IHBhdHRlcm5PZmZzZXQgPSBkYXNoZWRMaW5lUGF0dGVybk9m
ZnNldEZvclBhdHRlcm5BbmRTdHJva2VXaWR0aChwYXR0ZXJuV2lkdGgsIHN0cm9rZVdpZHRoKTsK
LSAgICAgICAgY29uc3QgZmxvYXQgZGFzaGVzWzJdID0geyBwYXR0ZXJuV2lkdGgsIHBhdHRlcm5X
aWR0aCB9OwotICAgICAgICBhdXRvIHN0cm9rZVN0eWxlUHJvcGVydGllcyA9IHBsYXRmb3JtQ29u
dGV4dC5zdHJva2VTdHlsZVByb3BlcnRpZXMoKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0Ojpz
eXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVN0cm9rZVN0eWxlKCZzdHJva2VTdHlsZVByb3BlcnRpZXMs
IGRhc2hlcywgQVJSQVlTSVpFKGRhc2hlcyksICZkMmRTdHJva2VTdHlsZSk7Ci0KLSAgICAgICAg
cGxhdGZvcm1Db250ZXh0LnNldFBhdHRlcm5XaWR0aChwYXR0ZXJuV2lkdGgpOwotICAgICAgICBw
bGF0Zm9ybUNvbnRleHQuc2V0UGF0dGVybk9mZnNldChwYXR0ZXJuT2Zmc2V0KTsKLSAgICAgICAg
cGxhdGZvcm1Db250ZXh0LnNldERhc2hlcyhEYXNoQXJyYXkoMiwgcGF0dGVybldpZHRoKSk7Ci0K
LSAgICAgICAgZDJkU3Ryb2tlU3R5bGUgPSBwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlU3R5bGUoKTsK
LSAgICB9Ci0KLSAgICBhdXRvIGNlbnRlcmVkUG9pbnRzID0gY2VudGVyTGluZUFuZEN1dE9mZkNv
cm5lcnMoaXNWZXJ0aWNhbExpbmUsIGNvcm5lcldpZHRoLCBwb2ludDEsIHBvaW50Mik7Ci0gICAg
YXV0byBwMSA9IGNlbnRlcmVkUG9pbnRzWzBdOwotICAgIGF1dG8gcDIgPSBjZW50ZXJlZFBvaW50
c1sxXTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLQotICAg
IGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9ybUNvbnRleHQsIHAx
LCBwMiwgZDJkU3Ryb2tlU3R5bGUsIHN0cm9rZUNvbG9yLCBzdHJva2VUaGlja25lc3NdKElEMkQx
UmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3
TGluZShwMSwgcDIsIHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihzdHJva2VDb2xvciku
Z2V0KCksIHN0cm9rZVRoaWNrbmVzcywgZDJkU3Ryb2tlU3R5bGUuZ2V0KCkpOwotICAgIH0pOwot
fQotCi12b2lkIGRyYXdMaW5lc0ZvclRleHQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25z
dCBGbG9hdFBvaW50JiwgZmxvYXQsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIGNvbnN0
IENvbG9yJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIGRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3Qm
LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIGZpbGxFbGxpcHNlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvciwgU3Ryb2tl
U3R5bGUgc3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvciwgZmxvYXQgc3Ryb2tl
VGhpY2tuZXNzKQotewotICAgIGF1dG8gZWxsaXBzZSA9IEQyRDE6OkVsbGlwc2UocmVjdC5jZW50
ZXIoKSwgMC41ICogcmVjdC53aWR0aCgpLCAwLjUgKiByZWN0LmhlaWdodCgpKTsKLQotICAgIHBs
YXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBkcmF3V2l0aG91dFNoYWRv
dyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1Db250ZXh0LCBlbGxpcHNlLCBmaWxsQ29sb3Is
IHN0cm9rZVN0eWxlLCBzdHJva2VDb2xvciwgc3Ryb2tlVGhpY2tuZXNzXShJRDJEMVJlbmRlclRh
cmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIGF1dG8gZmlsbEJydXNoID0gcGxhdGZvcm1D
b250ZXh0LmJydXNoV2l0aENvbG9yKGZpbGxDb2xvcik7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+
RmlsbEVsbGlwc2UoJmVsbGlwc2UsIGZpbGxCcnVzaC5nZXQoKSk7Ci0gICAgICAgIGlmIChzdHJv
a2VTdHlsZSAhPSBTdHJva2VTdHlsZTo6Tm9TdHJva2UpIHsKLSAgICAgICAgICAgIGF1dG8gc3Ry
b2tlQnJ1c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IpOwot
ICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3RWxsaXBzZSgmZWxsaXBzZSwgc3Ryb2tlQnJ1
c2guZ2V0KCksIHN0cm9rZVRoaWNrbmVzcywgcGxhdGZvcm1Db250ZXh0LnN0cm9rZVN0eWxlKCkp
OwotICAgICAgICB9Ci0gICAgfSk7Ci19Ci0KLXZvaWQgZHJhd0VsbGlwc2UoUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBTdHJv
a2VTdHlsZSBzdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yLCBmbG9hdCBzdHJv
a2VUaGlja25lc3MpCi17Ci0gICAgaWYgKHN0cm9rZVN0eWxlID09IFN0cm9rZVN0eWxlOjpOb1N0
cm9rZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBlbGxpcHNlID0gRDJEMTo6RWxsaXBz
ZShyZWN0LmNlbnRlcigpLCAwLjUgKiByZWN0LndpZHRoKCksIDAuNSAqIHJlY3QuaGVpZ2h0KCkp
OwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwotICAgIGRyYXdX
aXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9ybUNvbnRleHQsIGVsbGlwc2Us
IHN0cm9rZUNvbG9yLCBzdHJva2VUaGlja25lc3NdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJU
YXJnZXQpIHsKLSAgICAgICAgYXV0byBzdHJva2VCcnVzaCA9IHBsYXRmb3JtQ29udGV4dC5icnVz
aFdpdGhDb2xvcihzdHJva2VDb2xvcik7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RHJhd0VsbGlw
c2UoJmVsbGlwc2UsIHN0cm9rZUJydXNoLmdldCgpLCBzdHJva2VUaGlja25lc3MsIHBsYXRmb3Jt
Q29udGV4dC5zdHJva2VTdHlsZSgpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBkcmF3Rm9jdXNSaW5n
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgUGF0aCYsIGZsb2F0LCBjb25zdCBDb2xv
ciYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBkcmF3Rm9jdXNSaW5nKFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwg
Y29uc3QgQ29sb3ImKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgZmx1c2go
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkKLXsKLSAgICBBU1NFUlQo
cGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLSAgICBEMkQxX1RBRyBmaXJzdCwgc2Vj
b25kOwotICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkZs
dXNoKCZmaXJzdCwgJnNlY29uZCk7Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKLX0KLQotdm9pZCBzYXZlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRl
eHQpCi17Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNhdmUoKTsKLQotICAgIGlmIChhdXRvKiBncmFw
aGljc0NvbnRleHRQcml2YXRlID0gcGxhdGZvcm1Db250ZXh0LmdyYXBoaWNzQ29udGV4dFByaXZh
dGUoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZS0+c2F2ZSgpOwotfQotCi12b2lk
IHJlc3RvcmUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkKLXsKLSAg
ICBwbGF0Zm9ybUNvbnRleHQucmVzdG9yZSgpOwotCi0gICAgaWYgKGF1dG8qIGdyYXBoaWNzQ29u
dGV4dFByaXZhdGUgPSBwbGF0Zm9ybUNvbnRleHQuZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQot
ICAgICAgICBncmFwaGljc0NvbnRleHRQcml2YXRlLT5yZXN0b3JlKCk7Ci19Ci0KLXZvaWQgdHJh
bnNsYXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGZsb2F0IHgs
IGZsb2F0IHkpCi17Ci0gICAgQVNTRVJUKHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7
Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiBjdXJyZW50VHJhbnNmb3JtOwotICAgIHBsYXRmb3Jt
Q29udGV4dC5yZW5kZXJUYXJnZXQoKS0+R2V0VHJhbnNmb3JtKCZjdXJyZW50VHJhbnNmb3JtKTsK
LQotICAgIGF1dG8gdHJhbnNsYXRpb24gPSBEMkQxOjpNYXRyaXgzeDJGOjpUcmFuc2xhdGlvbih4
LCB5KTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPlNldFRyYW5zZm9ybSh0
cmFuc2xhdGlvbiAqIGN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAgaWYgKGF1dG8qIGdyYXBoaWNz
Q29udGV4dFByaXZhdGUgPSBwbGF0Zm9ybUNvbnRleHQuZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgp
KQotICAgICAgICBncmFwaGljc0NvbnRleHRQcml2YXRlLT50cmFuc2xhdGUoeCwgeSk7Ci19Ci0K
LXZvaWQgcm90YXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGZs
b2F0IGFuZ2xlSW5SYWRpYW5zKQotewotICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRleHQucmVuZGVy
VGFyZ2V0KCkpOwotCi0gICAgRDJEMV9NQVRSSVhfM1gyX0YgY3VycmVudFRyYW5zZm9ybTsKLSAg
ICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkdldFRyYW5zZm9ybSgmY3VycmVudFRy
YW5zZm9ybSk7Ci0KLSAgICBhdXRvIHJvdGF0aW9uID0gRDJEMTo6TWF0cml4M3gyRjo6Um90YXRp
b24ocmFkMmRlZyhhbmdsZUluUmFkaWFucykpOwotICAgIHBsYXRmb3JtQ29udGV4dC5yZW5kZXJU
YXJnZXQoKS0+U2V0VHJhbnNmb3JtKHJvdGF0aW9uICogY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAg
ICBpZiAoYXV0byogZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZSA9IHBsYXRmb3JtQ29udGV4dC5ncmFw
aGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dFByaXZhdGUtPnJv
dGF0ZShhbmdsZUluUmFkaWFucyk7Ci19Ci0KLXZvaWQgc2NhbGUoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIEFT
U0VSVChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotCi0gICAgRDJEMV9NQVRSSVhf
M1gyX0YgY3VycmVudFRyYW5zZm9ybTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0
KCktPkdldFRyYW5zZm9ybSgmY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBhdXRvIHNjYWxlID0g
RDJEMTo6TWF0cml4M3gyRjo6U2NhbGUoc2l6ZSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJlbmRl
clRhcmdldCgpLT5TZXRUcmFuc2Zvcm0oc2NhbGUgKiBjdXJyZW50VHJhbnNmb3JtKTsKLQotICAg
IGlmIChhdXRvKiBncmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxhdGZvcm1Db250ZXh0LmdyYXBo
aWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZS0+c2Nh
bGUoc2l6ZSk7Ci19Ci0KLXZvaWQgY29uY2F0Q1RNKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBw
bGF0Zm9ybUNvbnRleHQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lVHJhbnNmb3JtKQot
ewotICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotCi0gICAgRDJE
MV9NQVRSSVhfM1gyX0YgY3VycmVudFRyYW5zZm9ybTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVu
ZGVyVGFyZ2V0KCktPkdldFRyYW5zZm9ybSgmY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBEMkQx
X01BVFJJWF8zWDJfRiB0cmFuc2Zvcm1Ub0NvbmNhdCA9IGFmZmluZVRyYW5zZm9ybTsKLSAgICBw
bGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPlNldFRyYW5zZm9ybSh0cmFuc2Zvcm1Ub0Nv
bmNhdCAqIGN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAgaWYgKGF1dG8qIGdyYXBoaWNzQ29udGV4
dFByaXZhdGUgPSBwbGF0Zm9ybUNvbnRleHQuZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAg
ICAgICBncmFwaGljc0NvbnRleHRQcml2YXRlLT5jb25jYXRDVE0oYWZmaW5lVHJhbnNmb3JtKTsK
LX0KLQotdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
JiBwbGF0Zm9ybUNvbnRleHQsIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQ6OlRyYW5zcGFyZW5jeUxheWVyU3RhdGUgdHJhbnNwYXJlbmN5TGF5ZXI7Ci0gICAg
dHJhbnNwYXJlbmN5TGF5ZXIub3BhY2l0eSA9IG9wYWNpdHk7Ci0KLSAgICB0cmFuc3BhcmVuY3lM
YXllci5yZW5kZXJUYXJnZXQgPSBjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXQocGxhdGZvcm1Db250
ZXh0LnJlbmRlclRhcmdldCgpKTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5tX3RyYW5zcGFyZW5j
eUxheWVyU3RhY2suYXBwZW5kKFdURk1vdmUodHJhbnNwYXJlbmN5TGF5ZXIpKTsKLQotICAgIHBs
YXRmb3JtQ29udGV4dC5tX3RyYW5zcGFyZW5jeUxheWVyU3RhY2subGFzdCgpLnJlbmRlclRhcmdl
dC0+QmVnaW5EcmF3KCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0Lm1fdHJhbnNwYXJlbmN5TGF5ZXJT
dGFjay5sYXN0KCkucmVuZGVyVGFyZ2V0LT5DbGVhcihEMkQxOjpDb2xvckYoMCwgMCwgMCwgMCkp
OwotfQotCi12b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
JiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgYXV0byBjdXJyZW50TGF5ZXIgPSBwbGF0Zm9ybUNv
bnRleHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLnRha2VMYXN0KCk7Ci0gICAgYXV0byByZW5k
ZXJUYXJnZXQgPSBjdXJyZW50TGF5ZXIucmVuZGVyVGFyZ2V0OwotICAgIGlmICghcmVuZGVyVGFy
Z2V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBIUkVTVUxUIGhyID0gcmVuZGVyVGFyZ2V0LT5F
bmREcmF3KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBhdXRv
IGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBpZiAoY3Vy
cmVudExheWVyLmhhc1NoYWRvdykKLSAgICAgICAgZHJhd1dpdGhTaGFkb3dIZWxwZXIoY29udGV4
dCwgcmVuZGVyVGFyZ2V0LmdldCgpLCBGbG9hdFJlY3QoKSwgY3VycmVudExheWVyLnNoYWRvd0Nv
bG9yLCBjdXJyZW50TGF5ZXIuc2hhZG93T2Zmc2V0LCBjdXJyZW50TGF5ZXIuc2hhZG93Qmx1cik7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotICAgICAg
ICBociA9IHJlbmRlclRhcmdldC0+R2V0Qml0bWFwKCZiaXRtYXApOwotICAgICAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXBCcnVz
aD4gYml0bWFwQnJ1c2g7Ci0gICAgICAgIGF1dG8gYml0bWFwQnJ1c2hQcm9wZXJ0aWVzID0gRDJE
MTo6Qml0bWFwQnJ1c2hQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIGF1dG8gYnJ1c2hQcm9wZXJ0aWVz
ID0gRDJEMTo6QnJ1c2hQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0
LT5DcmVhdGVCaXRtYXBCcnVzaChiaXRtYXAuZ2V0KCksIGJpdG1hcEJydXNoUHJvcGVydGllcywg
YnJ1c2hQcm9wZXJ0aWVzLCAmYml0bWFwQnJ1c2gpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChT
VUNDRUVERUQoaHIpKTsKLQotICAgICAgICBhdXRvIHNpemUgPSBiaXRtYXAtPkdldFNpemUoKTsK
LSAgICAgICAgYXV0byByZWN0SW5ESVAgPSBEMkQxOjpSZWN0RigwLCAwLCBzaXplLndpZHRoLCBz
aXplLmhlaWdodCk7Ci0gICAgICAgIGNvbnRleHQtPkZpbGxSZWN0YW5nbGUocmVjdEluRElQLCBi
aXRtYXBCcnVzaC5nZXQoKSk7Ci0gICAgfQotfQotCi12b2lkIGNsaXAoUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAg
IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+UHVzaEF4aXNBbGlnbmVkQ2xpcChyZWN0
LCBEMkQxX0FOVElBTElBU19NT0RFX1BFUl9QUklNSVRJVkUpOwotICAgIHBsYXRmb3JtQ29udGV4
dC5wdXNoQ2xpcChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6QXhpc0FsaWduZWRDbGlwKTsKLQot
ICAgIGlmIChhdXRvKiBncmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxhdGZvcm1Db250ZXh0Lmdy
YXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZS0+
Y2xpcChyZWN0KTsKLX0KLQotdm9pZCBjbGlwT3V0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBw
bGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7
Ci0gICAgcGF0aC5hZGRSZWN0KHJlY3QpOwotCi0gICAgY2xpcE91dChwbGF0Zm9ybUNvbnRleHQs
IHBhdGgpOwotfQotCi12b2lkIGNsaXBPdXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRm
b3JtQ29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICAvLyBUbyBjbGlwIE91dCB3ZSBu
ZWVkIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGluZmluaXRlCi0gICAgLy8gY2xpcHBpbmcgcmVj
dCBhbmQgdGhlIHBhdGggd2UganVzdCBjcmVhdGVkLgotICAgIEQyRDFfU0laRV9GIHJlbmRlcmVy
U2l6ZSA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+R2V0U2l6ZSgpOwotICAgIEZs
b2F0UmVjdCBjbGlwQm91bmRzKDAsIDAsIHJlbmRlcmVyU2l6ZS53aWR0aCwgcmVuZGVyZXJTaXpl
LmhlaWdodCk7Ci0KLSAgICBQYXRoIGJvdW5kaW5nUmVjdDsKLSAgICBib3VuZGluZ1JlY3QuYWRk
UmVjdChjbGlwQm91bmRzKTsKLSAgICBib3VuZGluZ1JlY3QuYXBwZW5kR2VvbWV0cnkocGF0aC5w
bGF0Zm9ybVBhdGgoKSk7Ci0KLSAgICBDT01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiBwYXRoVG9D
bGlwOwotICAgIGJvdW5kaW5nUmVjdC5jcmVhdGVHZW9tZXRyeVdpdGhGaWxsTW9kZShXaW5kUnVs
ZTo6RXZlbk9kZCwgcGF0aFRvQ2xpcCk7Ci0gICAgY2xpcFBhdGgocGxhdGZvcm1Db250ZXh0LCBw
YXRoVG9DbGlwLmdldCgpKTsKLX0KLQotdm9pZCBjbGlwUGF0aChQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVs
ZSkKLXsKLSAgICBpZiAocGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgRGlyZWN0MkQ6OmNsaXAo
cGxhdGZvcm1Db250ZXh0LCBGbG9hdFJlY3QoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBDT01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiBwYXRoVG9DbGlwOwotICAgIHBhdGguY3Jl
YXRlR2VvbWV0cnlXaXRoRmlsbE1vZGUoY2xpcFJ1bGUsIHBhdGhUb0NsaXApOwotCi0gICAgY2xp
cFBhdGgocGxhdGZvcm1Db250ZXh0LCBwYXRoVG9DbGlwLmdldCgpKTsKLQotICAgIGlmIChhdXRv
KiBncmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxhdGZvcm1Db250ZXh0LmdyYXBoaWNzQ29udGV4
dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZS0+Y2xpcChwYXRoKTsK
LX0KLQotdm9pZCBjbGlwUGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250
ZXh0LCBJRDJEMUdlb21ldHJ5KiBwYXRoKQotewotICAgIENPTVB0cjxJRDJEMUxheWVyPiBjbGlw
TGF5ZXI7Ci0gICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+
Q3JlYXRlTGF5ZXIoJmNsaXBMYXllcik7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPlB1c2hMYXll
cihEMkQxOjpMYXllclBhcmFtZXRlcnMoRDJEMTo6SW5maW5pdGVSZWN0KCksIHBhdGgpLCBjbGlw
TGF5ZXIuZ2V0KCkpOwotICAgIHBsYXRmb3JtQ29udGV4dC5wdXNoUmVuZGVyQ2xpcChQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRDo6TGF5ZXJDbGlwKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0QWN0
aXZlTGF5ZXIoV1RGTW92ZShjbGlwTGF5ZXIpKTsKLX0KLQotdm9pZCBjbGlwVG9JbWFnZUJ1ZmZl
cihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIElEMkQxUmVuZGVyVGFyZ2V0KiwgY29uc3QgRmxv
YXRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0KLXZvaWQgY29weUJpdHMo
Y29uc3QgdWludDhfdCogc3JjUm93cywgdW5zaWduZWQgcm93Q291bnQsIHVuc2lnbmVkIGNvbENv
dW50LCB1bnNpZ25lZCBzcmNTdHJpZGUsIHVuc2lnbmVkIGRlc3RTdHJpZGUsIHVpbnQ4X3QqIGRl
c3RSb3dzKQotewotICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCByb3dDb3VudDsgKyt5KSB7
Ci0gICAgICAgIC8vIFNvdXJjZSBkYXRhIG1heSBiZSBwb3dlci1vZi10d28gc2l6ZWQsIHNvIHdl
IG5lZWQgdG8gb25seSBjb3B5IHRoZSBiaXRzIHRoYXQKLSAgICAgICAgLy8gY29ycmVzcG9uZCB0
byB0aGUgcmVjdGFuZ2xlIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIuCi0gICAgICAgIGNvbnN0IHVp
bnQzMl90KiBzcmNSb3cgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93
cyArIHNyY1N0cmlkZSAqIHkpOwotICAgICAgICB1aW50MzJfdCogZGVzdFJvdyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGRlc3RTdHJpZGUgKiB5KTsKLSAgICAgICAg
bWVtY3B5KGRlc3RSb3csIHNyY1JvdywgY29sQ291bnQpOwotICAgIH0KLX0KLQotfSAvLyBuYW1l
c3BhY2UgRGlyZWN0MkQKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNF
KERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Rp
cmVjdDJET3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjg3ODAzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5o
CShub25leGlzdGVudCkKQEAgLTEsMTcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggTnVhbnRpIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBCcmVudCBGdWxnaGFtIDxiZnVs
Z2hhbUB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIElnYWxpYSBTLkwu
Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9u
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiRGFzaEFycmF5LmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8ZDJkMS5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEFmZmluZVRyYW5zZm9ybTsKLWNsYXNz
IENvbG9yOwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKLWNsYXNz
IEZsb2F0U2l6ZTsKLWNsYXNzIFBhdGg7Ci0KLXN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZTsK
LQotbmFtZXNwYWNlIERpcmVjdDJEIHsKLQotbmFtZXNwYWNlIFN0YXRlIHsKLQotdm9pZCBzZXRT
dHJva2VUaGlja25lc3MoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBmbG9hdCk7Ci12b2lkIHNl
dFN0cm9rZVN0eWxlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgU3Ryb2tlU3R5bGUpOwotCi12
b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIENvbXBv
c2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOwotdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQmLCBib29sKTsKLQotdm9pZCBzZXRDVE0oUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLUFmZmluZVRyYW5zZm9ybSBnZXRD
VE0oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKTsKLQotSW50UmVjdCBnZXRDbGlwQm91bmRzKFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci1GbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYpOwotCi1ib29sIGlzQWNj
ZWxlcmF0ZWRDb250ZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci0KLX0gLy8gbmFtZXNw
YWNlIFN0YXRlCi0KLXN0cnVjdCBGaWxsU291cmNlIHsKLSAgICBGaWxsU291cmNlKCkgPSBkZWZh
dWx0OwotICAgIGV4cGxpY2l0IEZpbGxTb3VyY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKLQotICAgIGZsb2F0IGdsb2JhbEFscGhhIHsgMCB9
OwotICAgIENPTVB0cjxJRDJEMUJydXNoPiBicnVzaDsKLSAgICBDb2xvciBjb2xvcjsKLQotICAg
IFdpbmRSdWxlIGZpbGxSdWxlIHsgV2luZFJ1bGU6Ok5vblplcm8gfTsKLX07Ci0KLXN0cnVjdCBT
dHJva2VTb3VyY2UgewotICAgIFN0cm9rZVNvdXJjZSgpID0gZGVmYXVsdDsKLSAgICBleHBsaWNp
dCBTdHJva2VTb3VyY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQmKTsKLQotICAgIGZsb2F0IGdsb2JhbEFscGhhIHsgMCB9OwotICAgIGZsb2F0IHRo
aWNrbmVzcyB7IDAgfTsKLSAgICBDT01QdHI8SUQyRDFCcnVzaD4gYnJ1c2g7Ci0gICAgQ29sb3Ig
Y29sb3I7Ci19OwotCi1zdHJ1Y3QgU2hhZG93U3RhdGUgewotICAgIFNoYWRvd1N0YXRlKCkgPSBk
ZWZhdWx0OwotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IFNoYWRvd1N0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJik7Ci0KLSAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0OwotICAg
IGJvb2wgaXNSZXF1aXJlZChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpIGNvbnN0OwotCi0gICAg
RmxvYXRTaXplIG9mZnNldDsKLSAgICBmbG9hdCBibHVyIHsgMCB9OwotICAgIENvbG9yIGNvbG9y
OwotICAgIGJvb2wgaWdub3JlVHJhbnNmb3JtcyB7IGZhbHNlIH07Ci0KLSAgICBmbG9hdCBnbG9i
YWxBbHBoYSB7IDEuMCB9OwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGdsb2JhbENvbXBvc2l0ZU9w
ZXJhdG9yIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIgfTsKLX07Ci0KLXZvaWQgc2V0
TGluZUNhcChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIExpbmVDYXApOwotdm9pZCBzZXRMaW5l
RGFzaChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KTsK
LXZvaWQgc2V0TGluZUpvaW4oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBMaW5lSm9pbik7Ci12
b2lkIHNldE1pdGVyTGltaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBmbG9hdCk7Ci0KLXZv
aWQgZmlsbFJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBGaWxsU291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQgZmlsbFJlY3QoUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIGNv
bnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIGZpbGxSZWN0V2l0aEdyYWRpZW50KFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgSUQyRDFCcnVzaCopOwotdm9pZCBmaWxs
Um91bmRlZFJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiwgY29uc3QgQ29sb3ImLCBjb25zdCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBGaWxsU291cmNlJiwgY29uc3QgU2hhZG93
U3RhdGUmKTsKLXZvaWQgZmlsbFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBQ
YXRoJiwgY29uc3QgRmlsbFNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIGZpbGxQ
YXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgUGF0aCYsIGNvbnN0IENvbG9yJiwg
Y29uc3QgU2hhZG93U3RhdGUmKTsKLQotdm9pZCBzdHJva2VSZWN0KFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQsIGNvbnN0IFN0cm9rZVNvdXJjZSYsIGNv
bnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIHN0cm9rZVBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmLCBjb25zdCBQYXRoJiwgY29uc3QgU3Ryb2tlU291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUm
KTsKLXZvaWQgY2xlYXJSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRS
ZWN0Jik7Ci0KLXZvaWQgZHJhd0dseXBocyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0
IEZpbGxTb3VyY2UmLCBjb25zdCBTdHJva2VTb3VyY2UmLCBjb25zdCBTaGFkb3dTdGF0ZSYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGb250JiwgZG91YmxlLCBjb25zdCBWZWN0b3I8dW5zaWdu
ZWQgc2hvcnQ+JiBnbHlwaHMsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGhvcml6b250YWxBZHZhbmNl
cywgY29uc3QgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+JiwgZmxvYXQsIFRleHREcmF3aW5n
TW9kZUZsYWdzLCBmbG9hdCwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgQ29sb3ImKTsKLQotdm9p
ZCBkcmF3UGxhdGZvcm1JbWFnZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIElXSUNCaXRtYXAq
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmLCBmbG9hdCwgY29uc3QgU2hhZG93
U3RhdGUmKTsKLXZvaWQgZHJhd1BsYXRmb3JtSW1hZ2UoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQm
LCBJRDJEMUJpdG1hcCosIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYsIGZsb2F0
LCBjb25zdCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBkcmF3UGF0aChQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYsIGNvbnN0IFBhdGgmLCBjb25zdCBTdHJva2VTb3VyY2UmLCBjb25zdCBTaGFkb3dTdGF0
ZSYpOwotdm9pZCBkcmF3UGF0dGVybihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIENPTVB0cjxJ
RDJEMUJpdG1hcD4mJiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmLCBDb21w
b3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKTsKLQotdm9pZCBkcmF3V2l0aG91dFNoYWRvdyhQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYsIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4m
JiBkcmF3Q29tbWFuZHMpOwotdm9pZCBkcmF3V2l0aFNoYWRvdyhQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYsIEZsb2F0UmVjdCBib3VuZGluZ1JlY3QsIGNvbnN0IFNoYWRvd1N0YXRlJiwgRnVuY3Rp
b248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiYmIGRyYXdDb21tYW5kcyk7Ci0KLXZvaWQgZHJh
d1JlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwg
Y29uc3QgQ29sb3ImLCBTdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImKTsKLXZvaWQgZHJhd0xpbmUo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQ
b2ludCYsIFN0cm9rZVN0eWxlLCBjb25zdCBDb2xvciYsIGZsb2F0LCBib29sKTsKLXZvaWQgZHJh
d0xpbmVzRm9yVGV4dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIGNvbnN0IENv
bG9yJik7Ci12b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSk7Ci12b2lk
IGRyYXdFbGxpcHNlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0Jiwg
U3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiwgZmxvYXQpOwotdm9pZCBmaWxsRWxsaXBzZShQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgU3Ry
b2tlU3R5bGUsIGNvbnN0IENvbG9yJiwgZmxvYXQpOwotCi12b2lkIGRyYXdGb2N1c1JpbmcoUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBQYXRoJiwgZmxvYXQsIGNvbnN0IENvbG9yJik7
Ci12b2lkIGRyYXdGb2N1c1JpbmcoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBjb25zdCBDb2xvciYpOwotCi12b2lkIGZsdXNoKFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEJik7Ci12b2lkIHNhdmUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQm
KTsKLXZvaWQgcmVzdG9yZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotCi12b2lkIHRyYW5z
bGF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGZsb2F0LCBmbG9hdCk7Ci12b2lkIHJvdGF0
ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGZsb2F0KTsKLXZvaWQgc2NhbGUoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFNpemUmKTsKLXZvaWQgY29uY2F0Q1RNKFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0KLXZvaWQgYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGZsb2F0KTsKLXZv
aWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKTsKLQotdm9p
ZCBjbGlwKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0KLXZv
aWQgY2xpcE91dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYpOwot
dm9pZCBjbGlwT3V0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgUGF0aCYpOwotdm9p
ZCBjbGlwUGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IFBhdGgmLCBXaW5kUnVs
ZSk7Ci12b2lkIGNsaXBQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgSUQyRDFHZW9tZXRy
eSogcGF0aCk7Ci0KLXZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmLCBJRDJEMVJlbmRlclRhcmdldCosIGNvbnN0IEZsb2F0UmVjdCYpOwotCi19IC8vIG5hbWVz
cGFjZSBEaXJlY3QyRAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJ
UkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVj
dDJEVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3Bw
CShub25leGlzdGVudCkKQEAgLTEsNTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
MCBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lPTiBlbWJlZGRlZCBz
eXN0ZW1zCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgotCi0jaWYgVVNF
KERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgot
I2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlIDxkMmQxXzEuaD4KLSNpbmNsdWRlIDxkM2Qx
MV8xLmg+Ci0jaW5jbHVkZSA8c2hsd2FwaS5oPgotI2luY2x1ZGUgPHdpbmNvZGVjLmg+Ci0KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgRGlyZWN0MkQgewotCi1jb25zdGV4cHIg
RFhHSV9GT1JNQVQgd2Via2l0VGV4dHVyZUZvcm1hdCA9IERYR0lfRk9STUFUX0I4RzhSOEE4X1VO
T1JNOwotY29uc3RleHByIEQyRDFfQUxQSEFfTU9ERSB3ZWJraXRBbHBoYU1vZGUgPSBEMkQxX0FM
UEhBX01PREVfUFJFTVVMVElQTElFRDsKLQotSW50U2l6ZSBiaXRtYXBTaXplKElXSUNCaXRtYXBT
b3VyY2UqIGJpdG1hcFNvdXJjZSkKLXsKLSAgICBVSU5UIHdpZHRoLCBoZWlnaHQ7Ci0gICAgSFJF
U1VMVCBociA9IGJpdG1hcFNvdXJjZS0+R2V0U2l6ZSgmd2lkdGgsICZoZWlnaHQpOwotICAgIGlm
ICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIHJldHVybiBJbnRT
aXplKHdpZHRoLCBoZWlnaHQpOwotfQotCi1GbG9hdFNpemUgYml0bWFwU2l6ZShJRDJEMUJpdG1h
cCogYml0bWFwU291cmNlKQotewotICAgIHJldHVybiBiaXRtYXBTb3VyY2UtPkdldFNpemUoKTsK
LX0KLQotRmxvYXRTaXplIGJpdG1hcFJlc29sdXRpb24oSVdJQ0JpdG1hcFNvdXJjZSogYml0bWFw
U291cmNlKQotewotICAgIGNvbnN0ZXhwciBkb3VibGUgZHBpQmFzZSA9IDk2OwotCi0gICAgZG91
YmxlIGRwaVgsIGRwaVk7Ci0gICAgSFJFU1VMVCBociA9IGJpdG1hcFNvdXJjZS0+R2V0UmVzb2x1
dGlvbigmZHBpWCwgJmRwaVkpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0
dXJuIHsgfTsKLQotICAgIEZsb2F0U2l6ZSByZXN1bHQoZHBpWCwgZHBpWSk7Ci0gICAgcmVzdWx0
LnNjYWxlKDEuMCAvIGRwaUJhc2UpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUZsb2F0U2l6
ZSBiaXRtYXBSZXNvbHV0aW9uKElEMkQxQml0bWFwKiBiaXRtYXApCi17Ci0gICAgY29uc3RleHBy
IGRvdWJsZSBkcGlCYXNlID0gOTY7Ci0KLSAgICBmbG9hdCBkcGlYLCBkcGlZOwotICAgIGJpdG1h
cC0+R2V0RHBpKCZkcGlYLCAmZHBpWSk7Ci0KLSAgICBGbG9hdFNpemUgcmVzdWx0KGRwaVgsIGRw
aVkpOwotICAgIHJlc3VsdC5zY2FsZSgxLjAgLyBkcGlCYXNlKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotCi19Ci0KLUZsb2F0U2l6ZSBiaXRtYXBSZXNvbHV0aW9uKElEMkQxUmVuZGVyVGFyZ2V0KiB0
YXJnZXQpCi17Ci0gICAgY29uc3RleHByIGRvdWJsZSBkcGlCYXNlID0gOTY7Ci0KLSAgICBmbG9h
dCBkcGlYLCBkcGlZOwotICAgIHRhcmdldC0+R2V0RHBpKCZkcGlYLCAmZHBpWSk7Ci0KLSAgICBG
bG9hdFNpemUgcmVzdWx0KGRwaVgsIGRwaVkpOwotICAgIHJlc3VsdC5zY2FsZSgxLjAgLyBkcGlC
YXNlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotCi19Ci11bnNpZ25lZCBiaXRzUGVyUGl4ZWwoR1VJ
RCBiaXRtYXBGb3JtYXQpCi17Ci0gICAgQ09NUHRyPElXSUNDb21wb25lbnRJbmZvPiBjb21wb25l
bnRJbmZvOwotICAgIEhSRVNVTFQgaHIgPSBJbWFnZURlY29kZXJEaXJlY3QyRDo6c3lzdGVtSW1h
Z2luZ0ZhY3RvcnkoKS0+Q3JlYXRlQ29tcG9uZW50SW5mbyhiaXRtYXBGb3JtYXQsICZjb21wb25l
bnRJbmZvKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiA0OwotCi0g
ICAgQ09NUHRyPElXSUNQaXhlbEZvcm1hdEluZm8+IHBpeGVsRm9ybWF0OwotICAgIHBpeGVsRm9y
bWF0LnF1ZXJ5KGNvbXBvbmVudEluZm8pOwotICAgIGlmICghcGl4ZWxGb3JtYXQpCi0gICAgICAg
IHJldHVybiA0OwotCi0gICAgVUlOVCBicHAgPSAwOwotICAgIGhyID0gcGl4ZWxGb3JtYXQtPkdl
dEJpdHNQZXJQaXhlbCgmYnBwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJl
dHVybiA0OwotCi0gICAgcmV0dXJuIGJwcDsKLX0KLQotQ09NUHRyPElXSUNCaXRtYXA+IGNyZWF0
ZURpcmVjdDJESW1hZ2VTdXJmYWNlV2l0aERhdGEodm9pZCogZGF0YSwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgdW5zaWduZWQgc3RyaWRlKQotewotICAgIENoZWNrZWRTaXplIG51bUJ5dGVzID0gQ2hl
Y2tlZFVpbnQzMihzaXplLmhlaWdodCgpKSAqIHN0cmlkZTsKLSAgICBpZiAobnVtQnl0ZXMuaGFz
T3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJV0lD
Qml0bWFwPiBzdXJmYWNlOwotICAgIEhSRVNVTFQgaHIgPSBJbWFnZURlY29kZXJEaXJlY3QyRDo6
c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlQml0bWFwRnJvbU1lbW9yeShzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCksIHdpY0JpdG1hcEZvcm1hdCgpLCBzdHJpZGUsIHN0YXRpY19jYXN0
PFVJTlQ+KG51bUJ5dGVzLnZhbHVlKCkpLCByZWludGVycHJldF9jYXN0PEJZVEUqPihkYXRhKSwg
JnN1cmZhY2UpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICByZXR1cm4gc3VyZmFjZTsKLX0KLQotQ09NUHRyPElXSUNCaXRtYXA+IGNyZWF0
ZVdpY0JpdG1hcChjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIENPTVB0cjxJV0lDQml0bWFw
PiBzdXJmYWNlOwotICAgIEhSRVNVTFQgaHIgPSBJbWFnZURlY29kZXJEaXJlY3QyRDo6c3lzdGVt
SW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlQml0bWFwKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSwgd2ljQml0bWFwRm9ybWF0KCksIFdJQ0JpdG1hcENhY2hlT25EZW1hbmQsICZzdXJmYWNlKTsK
LSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
cmV0dXJuIHN1cmZhY2U7Ci19Ci0KLUQyRDFfUElYRUxfRk9STUFUIHBpeGVsRm9ybWF0Rm9yU29m
dHdhcmVNYW5pcHVsYXRpb24oKQotewotICAgIHJldHVybiBEMkQxOjpQaXhlbEZvcm1hdChEWEdJ
X0ZPUk1BVF9SOEc4QjhBOF9VTk9STSwgRDJEMV9BTFBIQV9NT0RFX1BSRU1VTFRJUExJRUQpOwot
fQotCi1EMkQxX1BJWEVMX0ZPUk1BVCBwaXhlbEZvcm1hdCgpCi17Ci0gICAgLy8gU2luY2Ugd2Ug
bmVlZCB0byBpbnRlcmFjdCB3aXRoIEhEQyBmcm9tIHRpbWUtdG8tdGltZSwgd2UgYXJlIGZvcmNl
ZCB0byB1c2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0gYW5kIEQyRDFfQUxQSEFfTU9ERV9Q
UkVNVUxUSVBMSUVECi0gICAgcmV0dXJuIEQyRDE6OlBpeGVsRm9ybWF0KHdlYmtpdFRleHR1cmVG
b3JtYXQsIHdlYmtpdEFscGhhTW9kZSk7Ci19Ci0KLUdVSUQgd2ljQml0bWFwRm9ybWF0KCkKLXsK
LSAgICAvLyBUaGlzIGlzIHRoZSBXSUMgZm9ybWF0IGNvbXBhdGlibGUgd2l0aCBEWEdJX0ZPUk1B
VF9COEc4UjhBOF9VTk9STS4gSXQgaXMgYWxzbyBzdXBwb3NlZGx5IHRoZSBtb3N0IGVmZmljaWVu
dCBpbi1tZW1vcnkKLSAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgV0lDIGltYWdlcy4KLSAgICBy
ZXR1cm4gR1VJRF9XSUNQaXhlbEZvcm1hdDMyYnBwUEJHUkE7Ci19Ci0KLUQyRDFfQklUTUFQX1BS
T1BFUlRJRVMgYml0bWFwUHJvcGVydGllcygpCi17Ci0gICAgcmV0dXJuIEQyRDE6OkJpdG1hcFBy
b3BlcnRpZXMocGl4ZWxGb3JtYXQoKSk7Ci19Ci0KLUNPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRl
Qml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQsIGNvbnN0IEludFNpemUmIHNp
emUpCi17Ci0gICAgYXV0byBiaXRtYXBDcmVhdGVQcm9wZXJ0aWVzID0gYml0bWFwUHJvcGVydGll
cygpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7Ci0gICAgRDJEMV9TSVpFX1Ug
Yml0bWFwU2l6ZSA9IHNpemU7Ci0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRl
Qml0bWFwKGJpdG1hcFNpemUsIGJpdG1hcENyZWF0ZVByb3BlcnRpZXMsICZiaXRtYXApOwotICAg
IGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1
cm4gYml0bWFwOwotfQotCi1EMkQxX1JFTkRFUl9UQVJHRVRfUFJPUEVSVElFUyByZW5kZXJUYXJn
ZXRQcm9wZXJ0aWVzKCkKLXsKLSAgICByZXR1cm4gRDJEMTo6UmVuZGVyVGFyZ2V0UHJvcGVydGll
cyhEMkQxX1JFTkRFUl9UQVJHRVRfVFlQRV9ERUZBVUxULAotICAgICAgICBwaXhlbEZvcm1hdCgp
LCAwLCAwLCBEMkQxX1JFTkRFUl9UQVJHRVRfVVNBR0VfR0RJX0NPTVBBVElCTEUsIEQyRDFfRkVB
VFVSRV9MRVZFTF9ERUZBVUxUKTsKLX0KLQotQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBjcmVh
dGVSZW5kZXJUYXJnZXRGcm9tV0lDQml0bWFwKElXSUNCaXRtYXAqIGJpdG1hcFNvdXJjZSkKLXsK
LSAgICBhdXRvIHRhcmdldFByb3BlcnRpZXMgPSByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0K
LSAgICBDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IGJpdG1hcENvbnRleHQ7Ci0gICAgSFJFU1VM
VCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVXaWNCaXRtYXBS
ZW5kZXJUYXJnZXQoYml0bWFwU291cmNlLCAmdGFyZ2V0UHJvcGVydGllcywgJmJpdG1hcENvbnRl
eHQpOwotICAgIGlmICghYml0bWFwQ29udGV4dCB8fCAhU1VDQ0VFREVEKGhyKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gYml0bWFwQ29udGV4dDsKLX0KLQotQ09NUHRy
PElEMkQxRENSZW5kZXJUYXJnZXQ+IGNyZWF0ZUdESVJlbmRlclRhcmdldCgpCi17Ci0gICAgYXV0
byB0YXJnZXRQcm9wZXJ0aWVzID0gcmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwotCi0gICAgQ09N
UHRyPElEMkQxRENSZW5kZXJUYXJnZXQ+IHJlbmRlclRhcmdldDsKLSAgICBIUkVTVUxUIGhyID0g
R3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZURDUmVuZGVyVGFyZ2V0KCZ0
YXJnZXRQcm9wZXJ0aWVzLCAmcmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAoIXJlbmRlclRhcmdldCB8
fCAhU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4g
cmVuZGVyVGFyZ2V0OwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGNyZWF0
ZUJpdG1hcFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQotewot
ICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgICAgICByZW5kZXJUYXJnZXQgPSBHcmFwaGljc0Nv
bnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcFJl
bmRlclRhcmdldD4gYml0bWFwQ29udGV4dDsKLSAgICBIUkVTVUxUIGhyID0gcmVuZGVyVGFyZ2V0
LT5DcmVhdGVDb21wYXRpYmxlUmVuZGVyVGFyZ2V0KG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIs
IEQyRDFfQ09NUEFUSUJMRV9SRU5ERVJfVEFSR0VUX09QVElPTlNfR0RJX0NPTVBBVElCTEUsICZi
aXRtYXBDb250ZXh0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgcmV0dXJuIGJpdG1hcENvbnRleHQ7Ci19Ci0KLUNPTVB0cjxJRDJEMUJp
dG1hcFJlbmRlclRhcmdldD4gY3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0T2ZTaXplKGNvbnN0IElu
dFNpemUmIHNpemUsIElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQsIGZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yKQotewotICAgIFVOVVNFRF9QQVJBTShkZXZpY2VTY2FsZUZhY3Rvcik7Ci0K
LSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgcmVuZGVyVGFyZ2V0ID0gR3JhcGhpY3ND
b250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXBS
ZW5kZXJUYXJnZXQ+IGJpdG1hcENvbnRleHQ7Ci0gICAgYXV0byBkZXNpcmVkU2l6ZSA9IEQyRDE6
OlNpemVGKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgRDJEMV9TSVpFX1UgcGl4
ZWxTaXplID0gRDJEMTo6U2l6ZVUoY2xhbXBUbzx1bnNpZ25lZD4oZGV2aWNlU2NhbGVGYWN0b3Ig
KiBzaXplLndpZHRoKCkpLCBjbGFtcFRvPHVuc2lnbmVkPihkZXZpY2VTY2FsZUZhY3RvciAqIHNp
emUuaGVpZ2h0KCkpKTsKLSAgICBIUkVTVUxUIGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVDb21w
YXRpYmxlUmVuZGVyVGFyZ2V0KCZkZXNpcmVkU2l6ZSwgJnBpeGVsU2l6ZSwgbnVsbHB0ciwgRDJE
MV9DT01QQVRJQkxFX1JFTkRFUl9UQVJHRVRfT1BUSU9OU19HRElfQ09NUEFUSUJMRSwgJmJpdG1h
cENvbnRleHQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICByZXR1cm4gYml0bWFwQ29udGV4dDsKLX0KLQotQ09NUHRyPElEWEdJU3VyZmFj
ZTE+IGNyZWF0ZURYR0lTdXJmYWNlT2ZTaXplKGNvbnN0IEludFNpemUmIHNpemUsIElEM0QxMURl
dmljZTEqIGRpcmVjdFhEZXZpY2UsIGJvb2wgY3Jvc3NQcm9jZXNzKQotewotICAgIGlmICghZGly
ZWN0WERldmljZSkKLSAgICAgICAgZGlyZWN0WERldmljZSA9IERpcmVjdDJEOjpkZWZhdWx0RGly
ZWN0WERldmljZSgpOwotCi0gICAgLy8gQ3JlYXRlIHRoZSByZW5kZXIgdGFyZ2V0IHRleHR1cmUK
LSAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOwotICAgIFplcm9NZW1vcnkoJmRlc2MsIHNp
emVvZihkZXNjKSk7Ci0gICAgZGVzYy5XaWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBkZXNjLkhl
aWdodCA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzYy5NaXBMZXZlbHMgPSAxOwotICAgIGRlc2Mu
QXJyYXlTaXplID0gMTsKLSAgICBkZXNjLkZvcm1hdCA9IHdlYmtpdFRleHR1cmVGb3JtYXQ7Ci0g
ICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKLSAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNB
R0VfREVGQVVMVDsKLSAgICBkZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRfUkVOREVSX1RBUkdF
VCB8IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFOwotICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3Mg
PSAwOwotICAgIGRlc2MuTWlzY0ZsYWdzID0gRDNEMTFfUkVTT1VSQ0VfTUlTQ19HRElfQ09NUEFU
SUJMRTsKLSAgICBpZiAoY3Jvc3NQcm9jZXNzKQotICAgICAgICBkZXNjLk1pc2NGbGFncyB8PSBE
M0QxMV9SRVNPVVJDRV9NSVNDX1NIQVJFRF9OVEhBTkRMRSB8IEQzRDExX1JFU09VUkNFX01JU0Nf
U0hBUkVEX0tFWUVETVVURVg7Ci0KLSAgICBDT01QdHI8SUQzRDExVGV4dHVyZTJEPiB0ZXh0dXJl
OwotICAgIEhSRVNVTFQgaHIgPSBkaXJlY3RYRGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2Ms
IG51bGxwdHIsICZ0ZXh0dXJlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsK
LQotICAgIENPTVB0cjxJRFhHSVN1cmZhY2UxPiBzdXJmYWNlOwotICAgIGhyID0gdGV4dHVyZS0+
UXVlcnlJbnRlcmZhY2UoJnN1cmZhY2UpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgcmV0dXJuIHN1cmZhY2U7Ci19Ci0KLUNPTVB0cjxJRDJEMVJlbmRlclRhcmdl
dD4gY3JlYXRlU3VyZmFjZVJlbmRlclRhcmdldChJRFhHSVN1cmZhY2UxKiBzdXJmYWNlKQotewot
ICAgIGF1dG8gcGl4ZWxGb3JtYXQgPSBEMkQxOjpQaXhlbEZvcm1hdCh3ZWJraXRUZXh0dXJlRm9y
bWF0LCB3ZWJraXRBbHBoYU1vZGUpOwotCi0gICAgYXV0byBwcm9wZXJ0aWVzID0gRDJEMTo6UmVu
ZGVyVGFyZ2V0UHJvcGVydGllcyhEMkQxX1JFTkRFUl9UQVJHRVRfVFlQRV9ERUZBVUxULAotICAg
ICAgICBwaXhlbEZvcm1hdCwgMCwgMCwgRDJEMV9SRU5ERVJfVEFSR0VUX1VTQUdFX0dESV9DT01Q
QVRJQkxFLCBEMkQxX0ZFQVRVUkVfTEVWRUxfMTApOwotCi0gICAgQ09NUHRyPElEMkQxUmVuZGVy
VGFyZ2V0PiByZW5kZXJUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6
c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEeGdpU3VyZmFjZVJlbmRlclRhcmdldChzdXJmYWNlLCBw
cm9wZXJ0aWVzLCAmcmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHJlbmRlclRhcmdldDsKLX0KLQotdm9p
ZCBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKElEMkQxQml0bWFwKiBmcm9tLCBJRDJE
MUJpdG1hcCogdG8sIGNvbnN0IEludFNpemUmIHNvdXJjZU9mZnNldCwgY29uc3QgSW50UmVjdCYg
cmVjdCwgY29uc3QgSW50U2l6ZSYgZGVzdE9mZnNldCkKLXsKLSAgICBJbnRTaXplIHNvdXJjZUJp
dG1hcFNpemUgPSBmcm9tLT5HZXRQaXhlbFNpemUoKTsKLSAgICBpZiAoc291cmNlQml0bWFwU2l6
ZS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSB0YXJnZXRCaXRtYXBT
aXplID0gdG8tPkdldFBpeGVsU2l6ZSgpOwotICAgIGlmICh0YXJnZXRCaXRtYXBTaXplLmlzWmVy
bygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IHNvdXJjZVJlY3Qoc291cmNlT2Zm
c2V0LndpZHRoKCksIHNvdXJjZU9mZnNldC5oZWlnaHQoKSwgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpKTsKLSAgICBJbnRSZWN0IHRhcmdldFJlY3QoZGVzdE9mZnNldC53aWR0aCgpLCBkZXN0
T2Zmc2V0LmhlaWdodCgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotCi0gICAgSW50
UmVjdCBzb3VyY2VCaXRtYXBSZWN0KEludFBvaW50KCksIHNvdXJjZUJpdG1hcFNpemUpOwotICAg
IEludFJlY3QgdGFyZ2V0Qml0bWFwUmVjdChJbnRQb2ludCgpLCB0YXJnZXRCaXRtYXBTaXplKTsK
LQotICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KHNvdXJjZUJpdG1hcFJlY3QpOwotICAgIHRhcmdl
dFJlY3QuaW50ZXJzZWN0KHRhcmdldEJpdG1hcFJlY3QpOwotCi0gICAgRDJEMV9SRUNUX1UgZDJk
U291cmNlUmVjdCA9IEQyRDE6OlJlY3RVKHNvdXJjZVJlY3QueCgpLCBzb3VyY2VSZWN0LnkoKSwg
c291cmNlUmVjdC54KCkgKyB0YXJnZXRSZWN0LndpZHRoKCksIHNvdXJjZVJlY3QueSgpICsgdGFy
Z2V0UmVjdC5oZWlnaHQoKSk7Ci0gICAgYXV0byBvZmZzZXQgPSBEMkQxOjpQb2ludDJVKGRlc3RP
ZmZzZXQud2lkdGgoKSwgZGVzdE9mZnNldC5oZWlnaHQoKSk7Ci0KLSAgICBIUkVTVUxUIGhyID0g
dG8tPkNvcHlGcm9tQml0bWFwKCZvZmZzZXQsIGZyb20sICZkMmRTb3VyY2VSZWN0KTsKLSAgICBB
U1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci19Ci0KLXZvaWQgd3JpdGVEaWFnbm9zdGljUE5HVG9QYXRo
KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQsIElEMkQxQml0bWFwKiBiaXRtYXAsIExQ
Q1dTVFIgZmlsZU5hbWUpCi17Ci0gICAgQ09NUHRyPElXSUNCaXRtYXBFbmNvZGVyPiB3aWNCaXRt
YXBFbmNvZGVyOwotICAgIEhSRVNVTFQgaHIgPSBJbWFnZURlY29kZXJEaXJlY3QyRDo6c3lzdGVt
SW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlRW5jb2RlcihHVUlEX0NvbnRhaW5lckZvcm1hdFBuZywg
bnVsbHB0ciwgJndpY0JpdG1hcEVuY29kZXIpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsK
LQotICAgIERXT1JEIG1vZGUgPSBTVEdNX0NSRUFURSB8IFNUR01fUkVBRFdSSVRFIHwgU1RHTV9T
SEFSRV9ERU5ZX1dSSVRFOwotICAgIENPTVB0cjxJU3RyZWFtPiBzdHJlYW07Ci0gICAgaHIgPSA6
OlNIQ3JlYXRlU3RyZWFtT25GaWxlRXgoZmlsZU5hbWUsIG1vZGUsIEZJTEVfQVRUUklCVVRFX05P
Uk1BTCwgVFJVRSwgbnVsbHB0ciwgJnN0cmVhbSk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikp
OwotCi0gICAgaHIgPSB3aWNCaXRtYXBFbmNvZGVyLT5Jbml0aWFsaXplKHN0cmVhbS5nZXQoKSwg
V0lDQml0bWFwRW5jb2Rlck5vQ2FjaGUpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQot
ICAgIENPTVB0cjxJV0lDQml0bWFwRnJhbWVFbmNvZGU+IHdpY0ZyYW1lRW5jb2RlOwotICAgIGhy
ID0gd2ljQml0bWFwRW5jb2Rlci0+Q3JlYXRlTmV3RnJhbWUoJndpY0ZyYW1lRW5jb2RlLCBudWxs
cHRyKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBociA9IHdpY0ZyYW1lRW5j
b2RlLT5Jbml0aWFsaXplKG51bGxwdHIpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQot
ICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IGQyZERldmljZUNvbnRleHQ7Ci0gICAgaHIg
PSByZW5kZXJUYXJnZXQtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEMkQxRGV2aWNlQ29udGV4
dCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmZDJkRGV2aWNlQ29udGV4dCkpOwotICAgIEFT
U0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENPTVB0cjxJRDJEMURldmljZT4gZDJkRGV2aWNl
OwotICAgIGQyZERldmljZUNvbnRleHQtPkdldERldmljZSgmZDJkRGV2aWNlKTsKLQotICAgIENP
TVB0cjxJV0lDSW1hZ2VFbmNvZGVyPiBpbWFnZUVuY29kZXI7Ci0gICAgaHIgPSBJbWFnZURlY29k
ZXJEaXJlY3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlSW1hZ2VFbmNvZGVyKGQy
ZERldmljZS5nZXQoKSwgJmltYWdlRW5jb2Rlcik7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikp
OwotCi0gICAgaHIgPSBpbWFnZUVuY29kZXItPldyaXRlRnJhbWUoYml0bWFwLCB3aWNGcmFtZUVu
Y29kZS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAg
aHIgPSB3aWNGcmFtZUVuY29kZS0+Q29tbWl0KCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikp
OwotCi0gICAgaHIgPSB3aWNCaXRtYXBFbmNvZGVyLT5Db21taXQoKTsKLSAgICBBU1NFUlQoU1VD
Q0VFREVEKGhyKSk7Ci0KLSAgICBociA9IHN0cmVhbS0+Q29tbWl0KFNUR0NfREVGQVVMVCk7Ci0g
ICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotfQotCi1zdGF0aWMgSUQzRDExRGV2aWNlQ29udGV4
dDEqIGltbWVkaWF0ZUNvbnRleHQgPSBudWxscHRyOwotCi1JRDNEMTFEZXZpY2VDb250ZXh0MSog
ZHhnaUltbWVkaWF0ZUNvbnRleHQoKQotewotICAgIGlmICghaW1tZWRpYXRlQ29udGV4dCkKLSAg
ICAgICAgZGVmYXVsdERpcmVjdFhEZXZpY2UoKTsKLQotICAgIFJFTEVBU0VfQVNTRVJUKGltbWVk
aWF0ZUNvbnRleHQpOwotICAgIHJldHVybiBpbW1lZGlhdGVDb250ZXh0OwotfQotCi1JRDNEMTFE
ZXZpY2UxKiBkZWZhdWx0RGlyZWN0WERldmljZSgpCi17Ci0gICAgc3RhdGljIElEM0QxMURldmlj
ZTEqIGRlZmF1bHREZXZpY2UxID0gbnVsbHB0cjsKLQotICAgIGlmICghZGVmYXVsdERldmljZTEp
IHsKLSAgICAgICAgaW50IGRldmljZUZsYWdzID0gRDNEMTFfQ1JFQVRFX0RFVklDRV9CR1JBX1NV
UFBPUlQ7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBkZXZpY2VGbGFncyB8PSBEM0QxMV9DUkVB
VEVfREVWSUNFX0RFQlVHOwotI2VuZGlmCi0KLSAgICAgICAgSUQzRDExRGV2aWNlKiBkZWZhdWx0
RGV2aWNlID0gbnVsbHB0cjsKLSAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUwgZmVhdHVyZUxldmVs
ID0geyB9OwotICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0KiBpbW1lZGlhdGVEZXZpY2VDb250
ZXh0ID0gbnVsbHB0cjsKLSAgICAgICAgSFJFU1VMVCBociA9IEQzRDExQ3JlYXRlRGV2aWNlKG51
bGxwdHIsIEQzRF9EUklWRVJfVFlQRV9IQVJEV0FSRSwgbnVsbHB0ciwgZGV2aWNlRmxhZ3MsIG51
bGxwdHIsIDAsIEQzRDExX1NES19WRVJTSU9OLCAmZGVmYXVsdERldmljZSwgJmZlYXR1cmVMZXZl
bCwgJmltbWVkaWF0ZURldmljZUNvbnRleHQpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUND
RUVERUQoaHIpKTsKLQotICAgICAgICBociA9IGRlZmF1bHREZXZpY2UtPlF1ZXJ5SW50ZXJmYWNl
KCZkZWZhdWx0RGV2aWNlMSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OwotICAgICAgICBkZWZhdWx0RGV2aWNlMS0+QWRkUmVmKCk7Ci0KLSAgICAgICAgaHIgPSBpbW1l
ZGlhdGVEZXZpY2VDb250ZXh0LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNEMTFEZXZpY2VD
b250ZXh0MSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmaW1tZWRpYXRlQ29udGV4dCkpOwot
ICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgaW1tZWRpYXRl
Q29udGV4dC0+QWRkUmVmKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlZmF1bHREZXZpY2UxOwot
fQotCi1ib29sIGNyZWF0ZURldmljZUFuZENvbnRleHQoQ09NUHRyPElEM0QxMURldmljZTE+JiBk
M2REZXZpY2UsIENPTVB0cjxJRDNEMTFEZXZpY2VDb250ZXh0MT4mIGltbWVkaWF0ZUNvbnRleHQp
Ci17Ci0gICAgaW50IGRldmljZUZsYWdzID0gRDNEMTFfQ1JFQVRFX0RFVklDRV9CR1JBX1NVUFBP
UlQ7Ci0jaWZuZGVmIE5ERUJVRwotICAgIGRldmljZUZsYWdzIHw9IEQzRDExX0NSRUFURV9ERVZJ
Q0VfREVCVUc7Ci0jZW5kaWYKLQotICAgIEQzRF9GRUFUVVJFX0xFVkVMIGZlYXR1cmVMZXZlbCA9
IHsgfTsKLSAgICBJRDNEMTFEZXZpY2UqIGRlZmF1bHREZXZpY2UgPSBudWxscHRyOwotICAgIElE
M0QxMURldmljZUNvbnRleHQqIGltbWVkaWF0ZURldmljZUNvbnRleHQgPSBudWxscHRyOwotICAg
IEhSRVNVTFQgaHIgPSA6OkQzRDExQ3JlYXRlRGV2aWNlKG51bGxwdHIsIEQzRF9EUklWRVJfVFlQ
RV9IQVJEV0FSRSwgbnVsbHB0ciwgZGV2aWNlRmxhZ3MsIG51bGxwdHIsIDAsIEQzRDExX1NES19W
RVJTSU9OLCAmZGVmYXVsdERldmljZSwgJmZlYXR1cmVMZXZlbCwgJmltbWVkaWF0ZURldmljZUNv
bnRleHQpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgaHIgPSBk
ZWZhdWx0RGV2aWNlLT5RdWVyeUludGVyZmFjZSgmZDNkRGV2aWNlKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICBkZWZhdWx0RGV2aWNlLT5SZWxlYXNlKCk7Ci0KLSAg
ICBociA9IGltbWVkaWF0ZURldmljZUNvbnRleHQtPlF1ZXJ5SW50ZXJmYWNlKCZpbW1lZGlhdGVD
b250ZXh0KTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICBpbW1lZGlh
dGVDb250ZXh0LT5SZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUNPTVB0cjxJRFhH
SURldmljZTE+IHRvRFhHSURldmljZShjb25zdCBDT01QdHI8SUQzRDExRGV2aWNlMT4mIGQzZERl
dmljZSkKLXsKLSAgICBpZiAoIWQzZERldmljZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBDT01QdHI8SURYR0lEZXZpY2UxPiBkeGdpRGV2aWNlOwotICAgIEhSRVNVTFQgaHIgPSBk
M2REZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEWEdJRGV2aWNlMSksICh2b2lkICoq
KSZkeGdpRGV2aWNlKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgcmV0dXJuIGR4Z2lEZXZpY2U7Ci19Ci0KLUNPTVB0cjxJRFhHSUZhY3Rv
cnkyPiBmYWN0b3J5Rm9yRFhHSURldmljZShjb25zdCBDT01QdHI8SURYR0lEZXZpY2UxPiYgZGV2
aWNlKQotewotICAgIGlmICghZGV2aWNlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IENPTVB0cjxJRFhHSUFkYXB0ZXI+IGFkYXB0b3I7Ci0gICAgSFJFU1VMVCBociA9IGRldmljZS0+
R2V0UGFyZW50KF9fdXVpZG9mKElEWEdJQWRhcHRlciksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoq
PigmYWRhcHRvcikpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAg
Q09NUHRyPElEWEdJRmFjdG9yeT4gZmFjdG9yeTsKLSAgICBociA9IGFkYXB0b3ItPkdldFBhcmVu
dChfX3V1aWRvZihJRFhHSUZhY3RvcnkpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmZhY3Rv
cnkpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENPTVB0cjxJ
RFhHSUZhY3RvcnkyPiBmYWN0b3J5MjsKLSAgICBociA9IGZhY3RvcnktPlF1ZXJ5SW50ZXJmYWNl
KCZmYWN0b3J5Mik7IAotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIAot
ICAgIHJldHVybiBmYWN0b3J5MjsKLX0KLQotQ09NUHRyPElEWEdJU3dhcENoYWluPiBzd2FwQ2hh
aW5PZlNpemVGb3JXaW5kb3dBbmREZXZpY2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwg
SFdORCB3aW5kb3csIGNvbnN0IENPTVB0cjxJRDNEMTFEZXZpY2UxPiYgZGV2aWNlKQotewotICAg
IGlmICghZGV2aWNlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIERYR0lfU1dBUF9D
SEFJTl9ERVNDMSBzd2FwQ2hhaW5EZXNjcmlwdGlvbjsKLSAgICA6Olplcm9NZW1vcnkoJnN3YXBD
aGFpbkRlc2NyaXB0aW9uLCBzaXplb2Yoc3dhcENoYWluRGVzY3JpcHRpb24pKTsKLSAgICBzd2Fw
Q2hhaW5EZXNjcmlwdGlvbi5XaWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBzd2FwQ2hhaW5EZXNj
cmlwdGlvbi5IZWlnaHQgPSBzaXplLmhlaWdodCgpOwotICAgIHN3YXBDaGFpbkRlc2NyaXB0aW9u
LkZvcm1hdCA9IHdlYmtpdFRleHR1cmVGb3JtYXQ7Ci0gICAgc3dhcENoYWluRGVzY3JpcHRpb24u
U2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgc3dhcENoYWluRGVzY3JpcHRpb24uU2FtcGxlRGVz
Yy5RdWFsaXR5ID0gMDsKLSAgICBzd2FwQ2hhaW5EZXNjcmlwdGlvbi5CdWZmZXJVc2FnZSA9IERY
R0lfVVNBR0VfU0hBREVSX0lOUFVUIHwgRFhHSV9VU0FHRV9SRU5ERVJfVEFSR0VUX09VVFBVVDsK
LSAgICBzd2FwQ2hhaW5EZXNjcmlwdGlvbi5CdWZmZXJDb3VudCA9IDE7Ci0gICAgc3dhcENoYWlu
RGVzY3JpcHRpb24uRmxhZ3MgPSBEWEdJX1NXQVBfQ0hBSU5fRkxBR19HRElfQ09NUEFUSUJMRTsK
LQotICAgIGF1dG8gZmFjdG9yeSA9IERpcmVjdDJEOjpmYWN0b3J5Rm9yRFhHSURldmljZShEaXJl
Y3QyRDo6dG9EWEdJRGV2aWNlKGRldmljZSkpOwotCi0gICAgQ09NUHRyPElEWEdJU3dhcENoYWlu
MT4gc3dhcENoYWluMTsKLSAgICBIUkVTVUxUIGhyID0gZmFjdG9yeS0+Q3JlYXRlU3dhcENoYWlu
Rm9ySHduZChkZXZpY2UuZ2V0KCksIHdpbmRvdywgJnN3YXBDaGFpbkRlc2NyaXB0aW9uLCBudWxs
cHRyLCBudWxscHRyLCAmc3dhcENoYWluMSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJRFhHSVN3YXBDaGFpbj4gc3dhcENo
YWluKFF1ZXJ5LCBzd2FwQ2hhaW4xKTsKLSAgICByZXR1cm4gc3dhcENoYWluOwotfQotCi1DT01Q
dHI8SUQyRDFCaXRtYXA+IGNyZWF0ZUJpdG1hcENvcHlGcm9tQ29udGV4dChJRDJEMUJpdG1hcFJl
bmRlclRhcmdldCogYml0bWFwVGFyZ2V0KQotewotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY3Vy
cmVudENhbnZhczsKLSAgICBIUkVTVUxUIGhyID0gYml0bWFwVGFyZ2V0LT5HZXRCaXRtYXAoJmN1
cnJlbnRDYW52YXMpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBhdXRvIGJpdG1hcENyZWF0ZVByb3BlcnRpZXMgPSBiaXRtYXBQcm9wZXJ0
aWVzKCk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKLSAgICBEMkQxX1NJWkVf
VSBiaXRtYXBTaXplID0gY3VycmVudENhbnZhcy0+R2V0UGl4ZWxTaXplKCk7Ci0gICAgaHIgPSBi
aXRtYXBUYXJnZXQtPkNyZWF0ZUJpdG1hcChiaXRtYXBTaXplLCBiaXRtYXBDcmVhdGVQcm9wZXJ0
aWVzLCAmYml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgYXV0byB0YXJnZXRQb3MgPSBEMkQxOjpQb2ludDJVKCk7Ci0gICAgRDJE
MV9SRUNUX1UgZGF0YVJlY3QgPSBEMkQxOjpSZWN0VSgwLCAwLCBiaXRtYXBTaXplLndpZHRoLCBi
aXRtYXBTaXplLmhlaWdodCk7Ci0gICAgaHIgPSBiaXRtYXAtPkNvcHlGcm9tQml0bWFwKCZ0YXJn
ZXRQb3MsIGN1cnJlbnRDYW52YXMuZ2V0KCksICZkYXRhUmVjdCk7Ci0gICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gYml0bWFwOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBEaXJlY3QyRAotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuaAkocmV2aXNpb24gMjg3
ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRp
bGl0aWVzLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lPTiBl
bWJlZGRlZCBzeXN0ZW1zCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1FeHBvcnRN
YWNyb3MuaCIKLQotaW50ZXJmYWNlIElEMkQxQml0bWFwOwotaW50ZXJmYWNlIElEMkQxQml0bWFw
UmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNlIElEMkQxRENSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2Ug
SUQyRDFSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQzRDExRGV2aWNlMTsKLWludGVyZmFjZSBJ
RDNEMTFEZXZpY2VDb250ZXh0MTsKLWludGVyZmFjZSBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3Owot
aW50ZXJmYWNlIElEWEdJRGV2aWNlMTsKLWludGVyZmFjZSBJRFhHSUZhY3RvcnkyOwotaW50ZXJm
YWNlIElEWEdJU3dhcENoYWluOwotaW50ZXJmYWNlIElEWEdJU3VyZmFjZTE7Ci1pbnRlcmZhY2Ug
SVdJQ0JpdG1hcFNvdXJjZTsKLWludGVyZmFjZSBJV0lDQml0bWFwOwotCi1zdHJ1Y3QgRDJEMV9C
SVRNQVBfUFJPUEVSVElFUzsKLXN0cnVjdCBEMkQxX1BJWEVMX0ZPUk1BVDsKLXN0cnVjdCBEMkQx
X1JFTkRFUl9UQVJHRVRfUFJPUEVSVElFUzsKLXN0cnVjdCBEM0QxMV9WSUVXUE9SVDsKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgRmxvYXRTaXplOwot
Y2xhc3MgSW50UmVjdDsKLWNsYXNzIEludFNpemU7Ci0KLW5hbWVzcGFjZSBEaXJlY3QyRCB7Ci0K
LUdVSUQgd2ljQml0bWFwRm9ybWF0KCk7Ci1EMkQxX1BJWEVMX0ZPUk1BVCBwaXhlbEZvcm1hdCgp
OyAvLyBCR1JBCi1EMkQxX1BJWEVMX0ZPUk1BVCBwaXhlbEZvcm1hdEZvclNvZnR3YXJlTWFuaXB1
bGF0aW9uKCk7IC8vIFJHQkEKLUQyRDFfQklUTUFQX1BST1BFUlRJRVMgYml0bWFwUHJvcGVydGll
cygpOwotRDJEMV9SRU5ERVJfVEFSR0VUX1BST1BFUlRJRVMgcmVuZGVyVGFyZ2V0UHJvcGVydGll
cygpOwotCi12b2lkIGluUGxhY2VTd2l6emxlKHVpbnQ4X3QqIGJ5dGVEYXRhLCB1bnNpZ25lZCBs
ZW5ndGgsIGJvb2wgYXBwbHlQcmVtdWx0aXBsaWNhdGlvbiA9IGZhbHNlKTsKLQotSW50U2l6ZSBi
aXRtYXBTaXplKElXSUNCaXRtYXBTb3VyY2UqKTsKLUZsb2F0U2l6ZSBiaXRtYXBTaXplKElEMkQx
Qml0bWFwKik7Ci1GbG9hdFNpemUgYml0bWFwUmVzb2x1dGlvbihJV0lDQml0bWFwU291cmNlKik7
Ci1GbG9hdFNpemUgYml0bWFwUmVzb2x1dGlvbihJRDJEMUJpdG1hcCopOwotRmxvYXRTaXplIGJp
dG1hcFJlc29sdXRpb24oSUQyRDFSZW5kZXJUYXJnZXQqKTsKLXVuc2lnbmVkIGJpdHNQZXJQaXhl
bChHVUlEKTsKLUNPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlQml0bWFwKElEMkQxUmVuZGVyVGFy
Z2V0KiwgY29uc3QgSW50U2l6ZSYpOwotQ09NUHRyPElXSUNCaXRtYXA+IGNyZWF0ZVdpY0JpdG1h
cChjb25zdCBJbnRTaXplJik7Ci1DT01QdHI8SVdJQ0JpdG1hcD4gY3JlYXRlRGlyZWN0MkRJbWFn
ZVN1cmZhY2VXaXRoRGF0YSh2b2lkKiBkYXRhLCBjb25zdCBJbnRTaXplJiwgdW5zaWduZWQgc3Ry
aWRlKTsKLUNPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gY3JlYXRlUmVuZGVyVGFyZ2V0RnJvbVdJ
Q0JpdG1hcChJV0lDQml0bWFwKik7Ci1DT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGNy
ZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShjb25zdCBJbnRTaXplJiwgSUQyRDFSZW5kZXJU
YXJnZXQqID0gbnVsbHB0ciwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSAxLjApOwotQ09NUHRy
PElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXQoSUQyRDFS
ZW5kZXJUYXJnZXQqID0gbnVsbHB0cik7Ci1DT01QdHI8SUQyRDFEQ1JlbmRlclRhcmdldD4gY3Jl
YXRlR0RJUmVuZGVyVGFyZ2V0KCk7Ci1DT01QdHI8SURYR0lTdXJmYWNlMT4gY3JlYXRlRFhHSVN1
cmZhY2VPZlNpemUoY29uc3QgSW50U2l6ZSYsIElEM0QxMURldmljZTEqLCBib29sIGNyb3NzUHJv
Y2Vzcyk7Ci1DT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IGNyZWF0ZVN1cmZhY2VSZW5kZXJUYXJn
ZXQoSURYR0lTdXJmYWNlMSopOwotQ09NUHRyPElEMkQxQml0bWFwPiBjcmVhdGVCaXRtYXBDb3B5
RnJvbUNvbnRleHQoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqKTsKLQotdm9pZCBjb3B5UmVjdEZy
b21PbmVTdXJmYWNlVG9Bbm90aGVyKElEMkQxQml0bWFwKiBmcm9tLCBJRDJEMUJpdG1hcCogdG8s
IGNvbnN0IEludFNpemUmIHNvdXJjZU9mZnNldCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNp
emUmIGRlc3RPZmZzZXQgPSBJbnRTaXplKCkpOwotCi1XRUJDT1JFX0VYUE9SVCBJRDNEMTFEZXZp
Y2VDb250ZXh0MSogZHhnaUltbWVkaWF0ZUNvbnRleHQoKTsKLVdFQkNPUkVfRVhQT1JUIElEM0Qx
MURldmljZTEqIGRlZmF1bHREaXJlY3RYRGV2aWNlKCk7Ci1XRUJDT1JFX0VYUE9SVCBib29sIGNy
ZWF0ZURldmljZUFuZENvbnRleHQoQ09NUHRyPElEM0QxMURldmljZTE+JiwgQ09NUHRyPElEM0Qx
MURldmljZUNvbnRleHQxPiYpOwotV0VCQ09SRV9FWFBPUlQgQ09NUHRyPElEWEdJRGV2aWNlMT4g
dG9EWEdJRGV2aWNlKGNvbnN0IENPTVB0cjxJRDNEMTFEZXZpY2UxPiYpOwotV0VCQ09SRV9FWFBP
UlQgQ09NUHRyPElEWEdJRmFjdG9yeTI+IGZhY3RvcnlGb3JEWEdJRGV2aWNlKGNvbnN0IENPTVB0
cjxJRFhHSURldmljZTE+Jik7Ci1XRUJDT1JFX0VYUE9SVCBDT01QdHI8SURYR0lTd2FwQ2hhaW4+
IHN3YXBDaGFpbk9mU2l6ZUZvcldpbmRvd0FuZERldmljZShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiwgSFdORCwgY29uc3QgQ09NUHRyPElEM0QxMURldmljZTE+Jik7Ci0KLXZvaWQgd3JpdGVEaWFn
bm9zdGljUE5HVG9QYXRoKElEMkQxUmVuZGVyVGFyZ2V0KiwgSUQyRDFCaXRtYXAqLCBMUENXU1RS
IGZpbGVOYW1lKTsKLQotfSAvLyBuYW1lc3BhY2UgRGlyZWN0MkQKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGls
aXRpZXMuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuY3BwCShub25leGlzdGVudCkKQEAgLTEs
MjQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRpcmVjdFdyaXRlVXRpbGl0aWVzLmgi
Ci0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgotCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotbmFtZXNwYWNlIERpcmVjdFdyaXRlIHsKLQotSURXcml0ZUZhY3Rvcnk1KiBmYWN0
b3J5KCkKLXsKLSAgICBzdGF0aWMgSURXcml0ZUZhY3Rvcnk1KiBkaXJlY3RXcml0ZUZhY3Rvcnkg
PSBudWxscHRyOwotICAgIGlmICghZGlyZWN0V3JpdGVGYWN0b3J5KSB7Ci0gICAgICAgIEhSRVNV
TFQgaHIgPSBEV3JpdGVDcmVhdGVGYWN0b3J5KERXUklURV9GQUNUT1JZX1RZUEVfU0hBUkVELCBf
X3V1aWRvZihkaXJlY3RXcml0ZUZhY3RvcnkpLCByZWludGVycHJldF9jYXN0PElVbmtub3duKio+
KCZkaXJlY3RXcml0ZUZhY3RvcnkpKTsKLSAgICAgICAgZGlyZWN0V3JpdGVGYWN0b3J5LT5BZGRS
ZWYoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGRpcmVjdFdyaXRlRmFjdG9yeTsKLX0KLQotSURXcml0ZUdkaUludGVyb3AqIGdk
aUludGVyb3AoKQotewotICAgIHN0YXRpYyBJRFdyaXRlR2RpSW50ZXJvcCogZGlyZWN0V3JpdGVH
ZGlJbnRlcm9wID0gbnVsbHB0cjsKLSAgICBpZiAoIWRpcmVjdFdyaXRlR2RpSW50ZXJvcCkgewot
ICAgICAgICBIUkVTVUxUIGhyID0gZmFjdG9yeSgpLT5HZXRHZGlJbnRlcm9wKCZkaXJlY3RXcml0
ZUdkaUludGVyb3ApOwotICAgICAgICBkaXJlY3RXcml0ZUdkaUludGVyb3AtPkFkZFJlZigpOwot
ICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZGlyZWN0V3JpdGVHZGlJbnRlcm9wOwotfQotCi1zdGF0aWMgSURXcml0ZUluTWVtb3J5Rm9u
dEZpbGVMb2FkZXIqIG1lbW9yeUZvbnRMb2FkZXIoKQotewotICAgIHN0YXRpYyBJRFdyaXRlSW5N
ZW1vcnlGb250RmlsZUxvYWRlciogbWVtb3J5Rm9udExvYWRlciA9IG51bGxwdHI7Ci0gICAgaWYg
KCFtZW1vcnlGb250TG9hZGVyKSB7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBmYWN0b3J5KCktPkNy
ZWF0ZUluTWVtb3J5Rm9udEZpbGVMb2FkZXIoJm1lbW9yeUZvbnRMb2FkZXIpOwotICAgICAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgbWVtb3J5Rm9udExvYWRlci0+
QWRkUmVmKCk7Ci0KLSAgICAgICAgaHIgPSBmYWN0b3J5KCktPlJlZ2lzdGVyRm9udEZpbGVMb2Fk
ZXIobWVtb3J5Rm9udExvYWRlcik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotICAgIH0KLQotICAgIHJldHVybiBtZW1vcnlGb250TG9hZGVyOwotfQotCi1zdGF0aWMg
SURXcml0ZUZvbnRTZXRCdWlsZGVyMSogZm9udFNldEJ1aWxkZXIoKQotewotICAgIHN0YXRpYyBJ
RFdyaXRlRm9udFNldEJ1aWxkZXIxKiBmb250U2V0QnVpbGRlciA9IG51bGxwdHI7Ci0gICAgaWYg
KCFmb250U2V0QnVpbGRlcikgewotICAgICAgICBIUkVTVUxUIGhyID0gZmFjdG9yeSgpLT5DcmVh
dGVGb250U2V0QnVpbGRlcigmZm9udFNldEJ1aWxkZXIpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgZm9udFNldEJ1aWxkZXItPkFkZFJlZigpOwotICAg
IH0KLQotICAgIHJldHVybiBmb250U2V0QnVpbGRlcjsKLX0KLQotc3RhdGljIENPTVB0cjxJRFdy
aXRlRm9udFNldD4gZm9udFNldDsKLXN0YXRpYyBDT01QdHI8SURXcml0ZUZvbnRDb2xsZWN0aW9u
MT4gZm9udENvbGxlY3Rpb247Ci1zdGF0aWMgVUlOVDMyIGZvbnRDb3VudCA9IDA7Ci0KLUlEV3Jp
dGVGb250Q29sbGVjdGlvbjEqIHdlYlByb2Nlc3NGb250Q29sbGVjdGlvbigpCi17Ci0gICAgSFJF
U1VMVCBociA9IFNfT0s7Ci0KLSAgICBpZiAoIWZvbnRTZXQpIHsKLSAgICAgICAgaHIgPSBmb250
U2V0QnVpbGRlcigpLT5DcmVhdGVGb250U2V0KCZmb250U2V0KTsKLSAgICAgICAgaWYgKCFTVUND
RUVERUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgZm9udENv
bGxlY3Rpb24gPSBudWxscHRyOwotICAgICAgICBociA9IGZhY3RvcnkoKS0+Q3JlYXRlRm9udENv
bGxlY3Rpb25Gcm9tRm9udFNldChmb250U2V0LmdldCgpLCAmZm9udENvbGxlY3Rpb24pOwotICAg
ICAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgICAgICBBU1NFUlQoZm9udENvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHlDb3VudCgpID09IGZv
bnRDb3VudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZvbnRDb2xsZWN0aW9uLmdldCgpOwotfQot
Ci1IUkVTVUxUIGFkZEZvbnRGcm9tRGF0YVRvUHJvY2Vzc0NvbGxlY3Rpb24oY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBmb250RGF0YSkKLXsKLSAgICBDT01QdHI8SURXcml0ZUZvbnRGaWxlPiBmb250
RmlsZTsKLSAgICBIUkVTVUxUIGhyID0gbWVtb3J5Rm9udExvYWRlcigpLT5DcmVhdGVJbk1lbW9y
eUZvbnRGaWxlUmVmZXJlbmNlKGZhY3RvcnkoKSwgZm9udERhdGEuZGF0YSgpLCBmb250RGF0YS5z
aXplKCksIG51bGxwdHIsICZmb250RmlsZSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAg
ICAgICByZXR1cm4gaHI7Ci0KLSAgICBociA9IGZvbnRTZXRCdWlsZGVyKCktPkFkZEZvbnRGaWxl
KGZvbnRGaWxlLmdldCgpKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVy
biBocjsKLQotICAgIGZvbnRTZXQgPSBudWxscHRyOwotICAgICsrZm9udENvdW50OwotCi0gICAg
cmV0dXJuIGhyOwotfQotCi1WZWN0b3I8d2NoYXJfdD4gZmFtaWx5TmFtZUZvckxvY2FsZShJRFdy
aXRlRm9udEZhbWlseSogZm9udEZhbWlseSwgY29uc3QgVmVjdG9yPHdjaGFyX3Q+JiBsb2NhbGVO
YW1lKQotewotICAgIENPTVB0cjxJRFdyaXRlTG9jYWxpemVkU3RyaW5ncz4gZmFtaWx5TmFtZXM7
Ci0gICAgSFJFU1VMVCBociA9IGZvbnRGYW1pbHktPkdldEZhbWlseU5hbWVzKCZmYW1pbHlOYW1l
cyk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBCT09M
IGV4aXN0cyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxvY2FsZUluZGV4ID0gMDsKLSAgICBpZiAo
IWxvY2FsZU5hbWUuaXNFbXB0eSgpKQotICAgICAgICBociA9IGZhbWlseU5hbWVzLT5GaW5kTG9j
YWxlTmFtZShsb2NhbGVOYW1lLmRhdGEoKSwgJmxvY2FsZUluZGV4LCAmZXhpc3RzKTsKLQotICAg
IGlmIChTVUNDRUVERUQoaHIpICYmICFleGlzdHMpCi0gICAgICAgIGhyID0gZmFtaWx5TmFtZXMt
PkZpbmRMb2NhbGVOYW1lKEwiZW4tdXMiLCAmbG9jYWxlSW5kZXgsICZleGlzdHMpOwotCi0gICAg
aWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICB1bnNpZ25lZCBmYW1p
bHlOYW1lTGVuZ3RoID0gMDsKLSAgICBociA9IGZhbWlseU5hbWVzLT5HZXRTdHJpbmdMZW5ndGgo
bG9jYWxlSW5kZXgsICZmYW1pbHlOYW1lTGVuZ3RoKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikp
Ci0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBWZWN0b3I8d2NoYXJfdD4gZmFtaWx5TmFtZShm
YW1pbHlOYW1lTGVuZ3RoICsgMSk7Ci0gICAgaHIgPSBmYW1pbHlOYW1lcy0+R2V0U3RyaW5nKGxv
Y2FsZUluZGV4LCBmYW1pbHlOYW1lLmRhdGEoKSwgZmFtaWx5TmFtZS5zaXplKCkpOwotICAgIGlm
ICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIHJldHVybiBmYW1p
bHlOYW1lOwotfQotCi1DT01QdHI8SURXcml0ZUZvbnRGYW1pbHk+IGZvbnRGYW1pbHlGb3JDb2xs
ZWN0aW9uKElEV3JpdGVGb250Q29sbGVjdGlvbiogZm9udENvbGxlY3Rpb24sIGNvbnN0IFZlY3Rv
cjx3Y2hhcl90PiYgbG9jYWxlTmFtZSwgY29uc3QgTE9HRk9OVCYgbG9nRm9udCkKLXsKLSAgICBD
T01QdHI8SURXcml0ZUZvbnRGYW1pbHk+IGZvbnRGYW1pbHk7Ci0KLSAgICB1bnNpZ25lZCBmb250
RmFtaWx5Q291bnQgPSBmb250Q29sbGVjdGlvbi0+R2V0Rm9udEZhbWlseUNvdW50KCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBmb250SW5kZXggPSAwOyBmb250SW5kZXggPCBmb250RmFtaWx5Q291bnQ7
ICsrZm9udEluZGV4KSB7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBmb250Q29sbGVjdGlvbi0+R2V0
Rm9udEZhbWlseShmb250SW5kZXgsICZmb250RmFtaWx5KTsKLSAgICAgICAgaWYgKEZBSUxFRCho
cikpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBhdXRvIGZhbWlseU5h
bWUgPSBmYW1pbHlOYW1lRm9yTG9jYWxlKGZvbnRGYW1pbHkuZ2V0KCksIGxvY2FsZU5hbWUpOwot
Ci0gICAgICAgIGlmICghd2NzY21wKGxvZ0ZvbnQubGZGYWNlTmFtZSwgZmFtaWx5TmFtZS5kYXRh
KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZvbnRGYW1pbHk7Ci0KLSAgICAgICAgZm9udEZhbWls
eSA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUNPTVB0cjxJ
RFdyaXRlRm9udD4gY3JlYXRlV2l0aFBsYXRmb3JtRm9udChjb25zdCBMT0dGT05UJiBsb2dGb250
KQotewotICAgIENPTVB0cjxJRFdyaXRlRm9udENvbGxlY3Rpb24+IHN5c3RlbUZvbnRDb2xsZWN0
aW9uOwotICAgIEhSRVNVTFQgaHIgPSBmYWN0b3J5KCktPkdldFN5c3RlbUZvbnRDb2xsZWN0aW9u
KCZzeXN0ZW1Gb250Q29sbGVjdGlvbik7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgVmVjdG9yPHdjaGFyX3Q+IGxvY2FsZU5hbWUoTE9DQUxFX05B
TUVfTUFYX0xFTkdUSCk7Ci0gICAgaW50IGxvY2FsZUxlbmd0aCA9IEdldFVzZXJEZWZhdWx0TG9j
YWxlTmFtZShsb2NhbGVOYW1lLmRhdGEoKSwgTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQobG9jYWxlTGVuZ3RoIDw9IExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwot
Ci0gICAgQ09NUHRyPElEV3JpdGVGb250Q29sbGVjdGlvbjE+IGNvbGxlY3Rpb24oUXVlcnksIHN5
c3RlbUZvbnRDb2xsZWN0aW9uKTsKLQotICAgIENPTVB0cjxJRFdyaXRlRm9udEZhbWlseT4gZm9u
dEZhbWlseSA9IGZvbnRGYW1pbHlGb3JDb2xsZWN0aW9uKGNvbGxlY3Rpb24uZ2V0KCksIGxvY2Fs
ZU5hbWUsIGxvZ0ZvbnQpOwotICAgIGlmICghZm9udEZhbWlseSkgewotICAgICAgICBjb2xsZWN0
aW9uID0gd2ViUHJvY2Vzc0ZvbnRDb2xsZWN0aW9uKCk7Ci0gICAgICAgIGZvbnRGYW1pbHkgPSBm
b250RmFtaWx5Rm9yQ29sbGVjdGlvbihjb2xsZWN0aW9uLmdldCgpLCBsb2NhbGVOYW1lLCBsb2dG
b250KTsKLSAgICB9Ci0KLSAgICBpZiAoIWZvbnRGYW1pbHkpIHsKLSAgICAgICAgLy8gSnVzdCBy
ZXR1cm4gdGhlIGZpcnN0IHN5c3RlbSBmb250LgotICAgICAgICBjb2xsZWN0aW9uID0gQ09NUHRy
PElEV3JpdGVGb250Q29sbGVjdGlvbjE+KFF1ZXJ5LCBzeXN0ZW1Gb250Q29sbGVjdGlvbik7Ci0g
ICAgICAgIGhyID0gY29sbGVjdGlvbi0+R2V0Rm9udEZhbWlseSgwLCAmZm9udEZhbWlseSk7Ci0g
ICAgICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSNp
Zm5kZWYgTkRFQlVHCi0gICAgICAgIGF1dG8gZmFtaWx5TmFtZSA9IGZhbWlseU5hbWVGb3JMb2Nh
bGUoZm9udEZhbWlseS5nZXQoKSwgbG9jYWxlTmFtZSk7Ci0gICAgICAgIFVOVVNFRF9WQVJJQUJM
RShmYW1pbHlOYW1lKTsKLSNlbmRpZgotICAgIH0KLQotICAgIERXUklURV9GT05UX1dFSUdIVCB3
ZWlnaHQgPSBzdGF0aWNfY2FzdDxEV1JJVEVfRk9OVF9XRUlHSFQ+KGxvZ0ZvbnQubGZXZWlnaHQp
OwotICAgIERXUklURV9GT05UX1NUUkVUQ0ggc3RyZXRjaCA9IHN0YXRpY19jYXN0PERXUklURV9G
T05UX1NUUkVUQ0g+KGxvZ0ZvbnQubGZRdWFsaXR5KTsKLSAgICBEV1JJVEVfRk9OVF9TVFlMRSBz
dHlsZSA9IGxvZ0ZvbnQubGZJdGFsaWMgPyBEV1JJVEVfRk9OVF9TVFlMRV9JVEFMSUMgOiBEV1JJ
VEVfRk9OVF9TVFlMRV9OT1JNQUw7Ci0KLSAgICBDT01QdHI8SURXcml0ZUZvbnQ+IGR3Rm9udDsK
LSAgICBociA9IGZvbnRGYW1pbHktPkdldEZpcnN0TWF0Y2hpbmdGb250KHdlaWdodCwgc3RyZXRj
aCwgc3R5bGUsICZkd0ZvbnQpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIHJl
dHVybiBkd0ZvbnQ7Ci19Ci0KLURXUklURV9GT05UX1dFSUdIVCBmb250V2VpZ2h0KGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmKQotewotICAgIHJldHVybiBEV1JJVEVfRk9OVF9XRUlHSFRfUkVHVUxB
UjsKLX0KLQotRFdSSVRFX0ZPTlRfU1RZTEUgZm9udFN0eWxlKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmKQotewotICAgIHJldHVybiBEV1JJVEVfRk9OVF9TVFlMRV9OT1JNQUw7Ci19Ci0KLURXUklU
RV9GT05UX1NUUkVUQ0ggZm9udFN0cmV0Y2goY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpCi17Ci0g
ICAgcmV0dXJuIERXUklURV9GT05UX1NUUkVUQ0hfTk9STUFMOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBEaXJlY3RXcml0ZQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0Uo
RElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGly
ZWN0V3JpdGVVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuaAkocmV2aXNpb24gMjg3ODAzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0
aWVzLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKERJUkVD
VDJEKQotCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0KLWludGVyZmFjZSBJRFdyaXRlRmFjdG9yeTU7
Ci1pbnRlcmZhY2UgSURXcml0ZUZvbnQ7Ci1pbnRlcmZhY2UgSURXcml0ZUZvbnRDb2xsZWN0aW9u
OwotaW50ZXJmYWNlIElEV3JpdGVGb250Q29sbGVjdGlvbjE7Ci1pbnRlcmZhY2UgSURXcml0ZUZv
bnRGYW1pbHk7Ci1pbnRlcmZhY2UgSURXcml0ZUdkaUludGVyb3A7Ci0KLWVudW0gRFdSSVRFX0ZP
TlRfV0VJR0hUOwotZW51bSBEV1JJVEVfRk9OVF9TVFlMRTsKLWVudW0gRFdSSVRFX0ZPTlRfU1RS
RVRDSDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGb250UGxhdGZvcm1EYXRhOwot
Y2xhc3MgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjsKLQotbmFtZXNwYWNlIERpcmVjdFdyaXRlIHsK
LQotSURXcml0ZUZhY3Rvcnk1KiBmYWN0b3J5KCk7Ci1JRFdyaXRlR2RpSW50ZXJvcCogZ2RpSW50
ZXJvcCgpOwotCi1JRFdyaXRlRm9udENvbGxlY3Rpb24xKiB3ZWJQcm9jZXNzRm9udENvbGxlY3Rp
b24oKTsKLQotSFJFU1VMVCBhZGRGb250RnJvbURhdGFUb1Byb2Nlc3NDb2xsZWN0aW9uKGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgZm9udERhdGEpOwotQ09NUHRyPElEV3JpdGVGb250RmFtaWx5PiBm
b250RmFtaWx5Rm9yQ29sbGVjdGlvbihJRFdyaXRlRm9udENvbGxlY3Rpb24qLCBjb25zdCBWZWN0
b3I8d2NoYXJfdD4mIGxvY2FsZU5hbWUsIGNvbnN0IExPR0ZPTlQmKTsKLUNPTVB0cjxJRFdyaXRl
Rm9udD4gY3JlYXRlV2l0aFBsYXRmb3JtRm9udChjb25zdCBMT0dGT05UJik7Ci1WZWN0b3I8d2No
YXJfdD4gZmFtaWx5TmFtZUZvckxvY2FsZShJRFdyaXRlRm9udEZhbWlseSosIGNvbnN0IFZlY3Rv
cjx3Y2hhcl90PiYgbG9jYWxlTmFtZSk7Ci0KLURXUklURV9GT05UX1dFSUdIVCBmb250V2VpZ2h0
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLURXUklURV9GT05UX1NUWUxFIGZvbnRTdHlsZShj
b25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci1EV1JJVEVfRk9OVF9TVFJFVENIIGZvbnRTdHJldGNo
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLQotfSAvLyBuYW1lc3BhY2UgRGlyZWN0V3JpdGUK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UG9pbnREaXJlY3Qy
RC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0Zsb2F0UG9pbnREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFBvaW50RGlyZWN0MkQuY3BwCShub25leGlz
dGVudCkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE2IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgotCi0jaWYgUExBVEZPUk0oV0lOKQotCi0jaW5jbHVkZSA8ZDJkMS5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0UG9pbnQ6OkZsb2F0UG9pbnQoY29uc3QgRDJEX1BPSU5U
XzJGJiBwKQotICAgIDogbV94KHAueCkKLSAgICAsIG1feShwLnkpCi17Ci19Ci0KLUZsb2F0UG9p
bnQ6Om9wZXJhdG9yIEQyRF9QT0lOVF8yRigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEQyRDE6OlBv
aW50MkYobV94LCBtX3kpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShXSU4pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
bG9hdFJlY3REaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFJlY3REaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50
KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLQot
I2lmIFBMQVRGT1JNKFdJTikKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlIDxk
MmQxLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGJvb2wgaXNJbmZpbml0ZVJl
Y3QoY29uc3QgRDJEMV9SRUNUX0YmIHJlY3QpCi17Ci0gICAgaWYgKCFzdGQ6OmlzaW5mKHJlY3Qu
dG9wKSAmJiByZWN0LnRvcCAhPSAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXN0ZDo6aXNpbmYocmVjdC5sZWZ0KSAm
JiByZWN0LmxlZnQgIT0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFzdGQ6OmlzaW5mKHJlY3QuYm90dG9tKSAmJiBy
ZWN0LmJvdHRvbSAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc3RkOjppc2luZihyZWN0LnJpZ2h0KSAmJiByZWN0
LnJpZ2h0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUZsb2F0UmVjdDo6RmxvYXRSZWN0
KGNvbnN0IFJFQ1QmIHJlY3QpCi0gICAgOiBtX2xvY2F0aW9uKHJlY3QubGVmdCwgcmVjdC50b3Ap
Ci0gICAgLCBtX3NpemUocmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0
LnRvcCkKLXsKLX0KLQotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgRDJEMV9SRUNUX0YmIHIp
Ci17Ci0gICAgLy8gSW5maW5pdGUgUmVjdCBjYXNlOgotICAgIGlmIChpc0luZmluaXRlUmVjdChy
KSkgewotICAgICAgICAqdGhpcyA9IGluZmluaXRlUmVjdCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbV9sb2NhdGlvbiA9IEZsb2F0UG9pbnQoci5sZWZ0LCByLnRvcCk7Ci0gICAg
bV9zaXplID0gRmxvYXRTaXplKHIucmlnaHQgLSByLmxlZnQsIHIuYm90dG9tIC0gci50b3ApOwot
fQotCi1GbG9hdFJlY3Q6Om9wZXJhdG9yIEQyRDFfUkVDVF9GKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gRDJEMTo6UmVjdEYoeCgpLCB5KCksIG1heFgoKSwgbWF4WSgpKTsKLX0KLQotfQotCi0jZW5k
aWYgLy8gUExBVEZPUk0oV0lOKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0Zsb2F0U2l6ZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRTaXplRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAy
ODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRTaXpl
RGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwMy0yMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0KLSNpZiBQTEFURk9STShXSU4pCi0KLSNpbmNs
dWRlIDxkMmQxLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRmxvYXRTaXplOjpGbG9hdFNp
emUoY29uc3QgRDJEMV9TSVpFX0YmIHMpCi0gICAgOiBtX3dpZHRoKHMud2lkdGgpCi0gICAgLCBt
X2hlaWdodChzLmhlaWdodCkKLXsKLX0KLQotRmxvYXRTaXplOjpvcGVyYXRvciBEMkQxX1NJWkVf
RigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEQyRDE6OlNpemVGKG1fd2lkdGgsIG1faGVpZ2h0KTsK
LX0KLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oV0lOKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVj
dDJELmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTQ3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotCi0jaWYgVVNF
KERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQ09N
UHRyLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRm9udC5oIgot
I2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaCIKLSNpbmNs
dWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNp
bmNsdWRlICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1
ZGUgPGR3cml0ZV8zLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYg
Z2x5cGhCdWZmZXIsCi0gICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLXsK
LSAgICBhdXRvIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPnJl
bmRlclRhcmdldCgpOwotICAgIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IFdlYkNvcmVT
aG91bGRVc2VGb250U21vb3RoaW5nKCk7Ci0KLSAgICBzd2l0Y2ggKHNtb290aGluZ01vZGUpIHsK
LSAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpBbnRpYWxpYXNlZDoKLSAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh0cnVlKTsKLSAgICAgICAgc2hvdWxkVXNlRm9u
dFNtb290aGluZyA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRTbW9vdGhp
bmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkOgotICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0
U2hvdWxkQW50aWFsaWFzKHRydWUpOwotICAgICAgICBzaG91bGRVc2VGb250U21vb3RoaW5nID0g
dHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9v
dGhpbmc6Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2Up
OwotICAgICAgICBzaG91bGRVc2VGb250U21vb3RoaW5nID0gZmFsc2U7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc6Ci0gICAgICAgIC8v
IEZvciB0aGUgQXV0b1Ntb290aCBjYXNlLCBkb24ndCBkbyBhbnl0aGluZyEgS2VlcCB0aGUgZGVm
YXVsdCBzZXR0aW5ncy4KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
cGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKLQotICAgIGdyYXBoaWNzQ29udGV4
dC5zYXZlKCk7Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiBtYXRyaXg7Ci0gICAgY29udGV4dC0+
R2V0VHJhbnNmb3JtKCZtYXRyaXgpOwotCi0gICAgaWYgKHBsYXRmb3JtRGF0YS5zeW50aGV0aWNP
YmxpcXVlKCkpIHsKLSAgICAgICAgc3RhdGljIGZsb2F0IHNrZXcgPSAtdGFuZihzeW50aGV0aWNP
YmxpcXVlQW5nbGUoKSAqIHBpRmxvYXQgLyAxODAuMGYpOwotICAgICAgICBhdXRvIHNrZXdNYXRy
aXggPSBEMkQxOjpNYXRyaXgzeDJGOjpTa2V3KHNrZXcsIDApOwotICAgICAgICBjb250ZXh0LT5T
ZXRUcmFuc2Zvcm0obWF0cml4ICogc2tld01hdHJpeCk7Ci0gICAgfQotCi0gICAgUkVMRUFTRV9B
U1NFUlQocGxhdGZvcm1EYXRhLmR3Rm9udCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChwbGF0Zm9y
bURhdGEuZHdGb250RmFjZSgpKTsKLQotICAgIFZlY3RvcjxGTE9BVD4gaG9yaXpvbnRhbEFkdmFu
Y2VzKG51bUdseXBocyk7Ci0gICAgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+IG9mZnNldEFk
dmFuY2VzKG51bUdseXBocyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBo
czsgKytpKSB7Ci0gICAgICAgIGlmIChpICsgZnJvbSA+PSBnbHlwaEJ1ZmZlci5hZHZhbmNlc0Nv
dW50KCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBhdXRvIGFkdmFuY2UgPSBnbHlw
aEJ1ZmZlci5hZHZhbmNlcyhpICsgZnJvbSk7Ci0gICAgICAgIGlmICghYWR2YW5jZSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGhvcml6b250YWxBZHZhbmNlc1tpXSA9IGFkdmFu
Y2UtPndpZHRoKCk7Ci0gICAgICAgIG9mZnNldEFkdmFuY2VzW2ldLmFkdmFuY2VPZmZzZXQgPSBh
ZHZhbmNlLT53aWR0aCgpOwotICAgICAgICBvZmZzZXRBZHZhbmNlc1tpXS5hc2NlbmRlck9mZnNl
dCA9IGFkdmFuY2UtPmhlaWdodCgpOwotICAgIH0KLQotICAgIERXUklURV9HTFlQSF9SVU4gZ2x5
cGhSdW47Ci0gICAgZ2x5cGhSdW4uZm9udEZhY2UgPSBwbGF0Zm9ybURhdGEuZHdGb250RmFjZSgp
OwotICAgIGdseXBoUnVuLmZvbnRFbVNpemUgPSBwbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIGds
eXBoUnVuLmdseXBoQ291bnQgPSBudW1HbHlwaHM7Ci0gICAgZ2x5cGhSdW4uZ2x5cGhJbmRpY2Vz
ID0gZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pOwotICAgIGdseXBoUnVuLmdseXBoQWR2YW5jZXMg
PSBob3Jpem9udGFsQWR2YW5jZXMuZGF0YSgpOwotICAgIGdseXBoUnVuLmdseXBoT2Zmc2V0cyA9
IG51bGxwdHI7Ci0gICAgZ2x5cGhSdW4uaXNTaWRld2F5cyA9IHBsYXRmb3JtRGF0YS5vcmllbnRh
dGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWw7Ci0gICAgZ2x5cGhSdW4uYmlkaUxl
dmVsID0gMDsKLQotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQgc2hhZG93
Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBncmFwaGljc0NvbnRleHQuZ2V0U2hh
ZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOwotCi0gICAgYm9vbCBo
YXNTaW1wbGVTaGFkb3cgPSBncmFwaGljc0NvbnRleHQudGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4
dERyYXdpbmdNb2RlOjpGaWxsICYmIHNoYWRvd0NvbG9yLmlzVmFsaWQoKSAmJiAhc2hhZG93Qmx1
ciAmJiAoIWdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8IGdyYXBo
aWNzQ29udGV4dC5nZXRDVE0oKS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKTsK
LSAgICBpZiAoaGFzU2ltcGxlU2hhZG93KSB7Ci0gICAgICAgIC8vIFBhaW50IHNpbXBsZSBzaGFk
b3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93cywgdG8gYXZvaWQg
bG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNs
ZWFyU2hhZG93KCk7Ci0gICAgICAgIENvbG9yIGZpbGxDb2xvciA9IGdyYXBoaWNzQ29udGV4dC5m
aWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gc2hhZG93Q29sb3Iu
Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsKLSAg
ICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgo
KTsKLSAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3
ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBu
ZWdhdGl2ZS4KLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dP
ZmZzZXQuaGVpZ2h0KCkgKiAoZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCkgPyAtMSA6IDEpOwotCi0gICAgICAgIGF1dG8gc2hhZG93QnJ1c2ggPSBncmFwaGljc0NvbnRl
eHQuYnJ1c2hXaXRoQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKLSAgICAgICAgY29udGV4dC0+RHJh
d0dseXBoUnVuKEQyRDE6OlBvaW50MkYoc2hhZG93VGV4dFgsIHNoYWRvd1RleHRZKSwgJmdseXBo
UnVuLCBzaGFkb3dCcnVzaCk7Ci0gICAgICAgIGlmIChmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQo
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQxOjpQb2ludDJGKHNoYWRv
d1RleHRYICsgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHNoYWRvd1RleHRZKSwgJmdseXBo
UnVuLCBzaGFkb3dCcnVzaCk7Ci0gICAgfQotCi0gICAgY29udGV4dC0+RHJhd0dseXBoUnVuKEQy
RDE6OlBvaW50MkYocG9pbnQueCgpLCBwb2ludC55KCkpLCAmZ2x5cGhSdW4sIGdyYXBoaWNzQ29u
dGV4dC5zb2xpZEZpbGxCcnVzaCgpKTsKLSAgICBpZiAoZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0
KCkpCi0gICAgICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQxOjpQb2ludDJGKHBvaW50Lngo
KSArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkpLCAmZ2x5cGhSdW4sIGdy
YXBoaWNzQ29udGV4dC5zb2xpZEZpbGxCcnVzaCgpKTsKLQotICAgIGlmIChoYXNTaW1wbGVTaGFk
b3cpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFk
b3dCbHVyLCBzaGFkb3dDb2xvcik7Ci0KLSAgICBncmFwaGljc0NvbnRleHQucmVzdG9yZSgpOwot
fQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkocmV2
aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsNiBA
QAogI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjZW5kaWYKIAotI2lm
IFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJEaXJlY3RXcml0ZVV0aWxpdGllcy5oIgotI2luY2x1
ZGUgPGR3cml0ZV8zLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhKGNvbnN0IFN0cmluZyYgbmFt
ZSwgRm9udFBsYXRmb3JtRGF0YTo6Q3JlYXRpb25EYXRhJiYgY3JlYXRpb25EYXRhKQpAQCAtNzMs
NyArNjgsNyBAQCBGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6CiAgICAg
bG9nRm9udC5sZlVuZGVybGluZSA9IGZhbHNlOwogICAgIGxvZ0ZvbnQubGZTdHJpa2VPdXQgPSBm
YWxzZTsKICAgICBsb2dGb250LmxmQ2hhclNldCA9IERFRkFVTFRfQ0hBUlNFVDsKLSNpZiBVU0Uo
Q0cpIHx8IFVTRShDQUlSTykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykgfHwgVVNFKENB
SVJPKQogICAgIGxvZ0ZvbnQubGZPdXRQcmVjaXNpb24gPSBPVVRfVFRfT05MWV9QUkVDSVM7CiAj
ZWxzZQogICAgIGxvZ0ZvbnQubGZPdXRQcmVjaXNpb24gPSBPVVRfVFRfUFJFQ0lTOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJl
Y3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhRGlyZWN0
MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTIxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2lu
Y2x1ZGUgIkRpcmVjdFdyaXRlVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW5jbHVkZSAiSFduZERDLmgiCi0jaW5jbHVkZSAiU2hhcmVkR0RJT2JqZWN0LmgiCi0j
aW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGR3cml0ZV8zLmg+Ci0jaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgRm9udFBsYXRmb3JtRGF0YTo6
cGxhdGZvcm1EYXRhSW5pdChIRk9OVCBmb250LCBmbG9hdCBzaXplLCBIREMgaGRjLCBXQ0hBUiog
ZmFjZU5hbWUpCi17Ci0gICAgTE9HRk9OVCBsb2dmb250OwotICAgIEhSRVNVTFQgaHIgPSA6Okdl
dE9iamVjdChmb250LCBzaXplb2YoTE9HRk9OVCksICZsb2dmb250KTsKLSAgICBpZiAoU1VDQ0VF
REVEKGhyKSkKLSAgICAgICAgbV9kd0ZvbnQgPSBEaXJlY3RXcml0ZTo6Y3JlYXRlV2l0aFBsYXRm
b3JtRm9udChsb2dmb250KTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2R3Rm9udCk7Ci0KLSAgICBo
ciA9IG1fZHdGb250LT5DcmVhdGVGb250RmFjZSgmbV9kd0ZvbnRGYWNlKTsKLSAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGlmICghbV91c2VHREkpCi0gICAgICAgIG1f
aXNTeXN0ZW1Gb250ID0gIXdjc2NtcChmYWNlTmFtZSwgTCJMdWNpZGEgR3JhbmRlIik7Ci19Ci0K
LUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiYmIGhm
b250LCBDT01QdHI8SURXcml0ZUZvbnQ+JiYgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBi
b29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQotICAgIDogbV9zeW50aGV0aWNCb2xkKGJvbGQpCi0g
ICAgLCBtX3N5bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkKLSAgICAsIG1fc2l6ZShzaXplKQotICAg
ICwgbV9mb250KFNoYXJlZEdESU9iamVjdDxIRk9OVD46OmNyZWF0ZShXVEZNb3ZlKGhmb250KSkp
Ci0gICAgLCBtX2R3Rm9udChXVEZNb3ZlKGZvbnQpKQotICAgICwgbV91c2VHREkodXNlR0RJKQot
ewotICAgIEhSRVNVTFQgaHIgPSBtX2R3Rm9udC0+Q3JlYXRlRm9udEZhY2UoJm1fZHdGb250RmFj
ZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci19Ci0KLXN0YXRpYyBib29s
IGZvbnRzQXJlRXF1YWwoSURXcml0ZUZvbnQqIGEsIElEV3JpdGVGb250KiBiKQotewotICAgIGlm
ICghYSAmJiAhYikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoYSA9PSBiKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoIWEgJiYgYikgfHwgKGEgJiYgIWIpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYS0+R2V0V2VpZ2h0KCkgIT0gYi0+R2V0V2Vp
Z2h0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhLT5HZXRTdHlsZSgpICE9
IGItPkdldFN0eWxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhLT5HZXRT
dHJldGNoKCkgIT0gYi0+R2V0U3RyZXRjaCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBEV1JJVEVfRk9OVF9NRVRSSUNTIGFNZXRyaWNzLCBiTWV0cmljczsKLSAgICBhLT5HZXRNZXRy
aWNzKCZhTWV0cmljcyk7Ci0gICAgYi0+R2V0TWV0cmljcygmYk1ldHJpY3MpOwotCi0gICAgaWYg
KChhTWV0cmljcy5kZXNpZ25Vbml0c1BlckVtICE9IGJNZXRyaWNzLmRlc2lnblVuaXRzUGVyRW0p
Ci0gICAgICAgIHx8IChhTWV0cmljcy5hc2NlbnQgIT0gYk1ldHJpY3MuYXNjZW50KQotICAgICAg
ICB8fCAoYU1ldHJpY3MuZGVzY2VudCAhPSBiTWV0cmljcy5hc2NlbnQpCi0gICAgICAgIHx8IChh
TWV0cmljcy5saW5lR2FwICE9IGJNZXRyaWNzLmxpbmVHYXApCi0gICAgICAgIHx8IChhTWV0cmlj
cy5jYXBIZWlnaHQgIT0gYk1ldHJpY3MuY2FwSGVpZ2h0KQotICAgICAgICB8fCAoYU1ldHJpY3Mu
eEhlaWdodCAhPSBiTWV0cmljcy54SGVpZ2h0KQotICAgICAgICB8fCAoYU1ldHJpY3MudW5kZXJs
aW5lUG9zaXRpb24gIT0gYk1ldHJpY3MudW5kZXJsaW5lUG9zaXRpb24pCi0gICAgICAgIHx8IChh
TWV0cmljcy51bmRlcmxpbmVUaGlja25lc3MgIT0gYk1ldHJpY3MudW5kZXJsaW5lVGhpY2tuZXNz
KQotICAgICAgICB8fCAoYU1ldHJpY3Muc3RyaWtldGhyb3VnaFBvc2l0aW9uICE9IGJNZXRyaWNz
LnN0cmlrZXRocm91Z2hQb3NpdGlvbikKLSAgICAgICAgfHwgKGFNZXRyaWNzLnN0cmlrZXRocm91
Z2hUaGlja25lc3MgIT0gYk1ldHJpY3Muc3RyaWtldGhyb3VnaFRoaWNrbmVzcykpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi11bnNpZ25lZCBGb250UGxh
dGZvcm1EYXRhOjpoYXNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mb250ID8gbV9mb250LT5o
YXNoKCkgOiAwOwotfQotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbChj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mb250
ID09IG90aGVyLm1fZm9udAotICAgICAgICAmJiBtX3VzZUdESSA9PSBvdGhlci5tX3VzZUdESQot
ICAgICAgICAmJiBmb250c0FyZUVxdWFsKG1fZHdGb250LmdldCgpLCBvdGhlci5tX2R3Rm9udC5n
ZXQoKSk7Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlRGly
ZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpA
QCAtMSwxMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoUGFnZS5oIgotCi0j
aWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMuaCIKLSNp
bmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiVGV4dEFuYWx5emVySGVscGVyLmgiCi0jaW5jbHVk
ZSA8ZHdyaXRlXzMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIEdseXBoUGFnZTo6
ZmlsbChVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpCi17Ci0gICAgaWYgKGJ1
ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgY29uc3QgRm9udCYgZm9udCA9IHRoaXMtPmZvbnQoKTsKLSAgICBib29sIGhhdmVHbHlwaHMg
PSBmYWxzZTsKLQotICAgIENPTVB0cjxJRFdyaXRlVGV4dEFuYWx5emVyPiBhbmFseXplcjsKLSAg
ICBIUkVTVUxUIGhyID0gRGlyZWN0V3JpdGU6OmZhY3RvcnkoKS0+Q3JlYXRlVGV4dEFuYWx5emVy
KCZhbmFseXplcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBh
dXRvJiBmb250UGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKLQotICAgIFVDaGFy
IGxvY2FsZU5hbWVbTE9DQUxFX05BTUVfTUFYX0xFTkdUSCArIDFdID0geyB9OwotICAgIGludCBs
b2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUocmVpbnRlcnByZXRfY2FzdDxM
UFdTVFI+KCZsb2NhbGVOYW1lKSwgTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQobG9jYWxlTGVuZ3RoIDw9IExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwotCi0gICAg
VGV4dEFuYWx5emVySGVscGVyIGhlbHBlcihyZWludGVycHJldF9jYXN0PExQV1NUUj4oJmxvY2Fs
ZU5hbWUpLCByZWludGVycHJldF9jYXN0PExQV1NUUj4oYnVmZmVyKSwgYnVmZmVyTGVuZ3RoKTsK
LQotICAgIGhyID0gYW5hbHl6ZXItPkFuYWx5emVTY3JpcHQoJmhlbHBlciwgMCwgYnVmZmVyTGVu
Z3RoLCAmaGVscGVyKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAg
IFZlY3RvcjxHbHlwaD4gZ2x5cGhzKEdseXBoUGFnZTo6c2l6ZSwgMCk7Ci0gICAgVmVjdG9yPEds
eXBoPiBjbHVzdGVyTWFwKEdseXBoUGFnZTo6c2l6ZSwgMCk7Ci0gICAgVmVjdG9yPERXUklURV9T
SEFQSU5HX1RFWFRfUFJPUEVSVElFUz4gdGV4dFByb3BlcnRpZXMoR2x5cGhQYWdlOjpzaXplKTsK
LSAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfR0xZUEhfUFJPUEVSVElFUz4gZ2x5cGhQcm9wZXJ0
aWVzKEdseXBoUGFnZTo6c2l6ZSk7Ci0KLSAgICBjb25zdCBXQ0hBUiogdGV4dFN0YXJ0ID0gcmVp
bnRlcnByZXRfY2FzdDxMUENXU1RSPihidWZmZXIpOwotICAgIEdseXBoKiBnbHlwaERhdGEgPSBn
bHlwaHMuZGF0YSgpOwotICAgIEdseXBoKiBjbHVzdGVyTWFwRGF0YSA9IGNsdXN0ZXJNYXAuZGF0
YSgpOwotICAgIERXUklURV9TSEFQSU5HX1RFWFRfUFJPUEVSVElFUyogdGV4dFByb3BlcnRpZXNE
YXRhID0gdGV4dFByb3BlcnRpZXMuZGF0YSgpOwotICAgIERXUklURV9TSEFQSU5HX0dMWVBIX1BS
T1BFUlRJRVMqIGdseXBoUHJvcGVydGllc0RhdGEgPSBnbHlwaFByb3BlcnRpZXMuZGF0YSgpOwot
Ci0gICAgdW5zaWduZWQgdG90YWwgPSAwOwotICAgIHVuc2lnbmVkIG1heEdseXBoQ291bnQgPSBH
bHlwaFBhZ2U6OnNpemU7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBydW4gOiBoZWxwZXIubV9hbmFs
eXplZFJ1bnMpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQodG90YWwgKyBydW4ubGVuZ3RoIDw9
IGJ1ZmZlckxlbmd0aCk7Ci0KLSAgICAgICAgdW5zaWduZWQgcmV0dXJuZWRDb3VudCA9IDA7Ci0g
ICAgICAgIGhyID0gYW5hbHl6ZXItPkdldEdseXBocyh0ZXh0U3RhcnQgKyBydW4uc3RhcnRQb3Np
dGlvbiwgcnVuLmxlbmd0aCwgZm9udFBsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCksIGZvbnRQbGF0
Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsLCBmYWxz
ZSwKLSAgICAgICAgICAgICZydW4uYW5hbHlzaXMsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIs
IG51bGxwdHIsIDAsIG1heEdseXBoQ291bnQsIGNsdXN0ZXJNYXBEYXRhLCB0ZXh0UHJvcGVydGll
c0RhdGEsCi0gICAgICAgICAgICBnbHlwaERhdGEsIGdseXBoUHJvcGVydGllc0RhdGEsICZyZXR1
cm5lZENvdW50KTsKLQotICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZ2x5cGhEYXRhICs9IHJldHVybmVkQ291bnQ7Ci0gICAg
ICAgIGNsdXN0ZXJNYXBEYXRhICs9IHJldHVybmVkQ291bnQ7Ci0gICAgICAgIHRleHRQcm9wZXJ0
aWVzRGF0YSArPSByZXR1cm5lZENvdW50OwotICAgICAgICBnbHlwaFByb3BlcnRpZXNEYXRhICs9
IHJldHVybmVkQ291bnQ7Ci0gICAgICAgIG1heEdseXBoQ291bnQgLT0gcmV0dXJuZWRDb3VudDsK
LSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyAr
K2kpIHsKLSAgICAgICAgR2x5cGggZ2x5cGggPSBnbHlwaHNbaV07Ci0gICAgICAgIGlmICghZ2x5
cGgpCi0gICAgICAgICAgICBzZXRHbHlwaEZvckluZGV4KGksIDApOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIHNldEdseXBoRm9ySW5kZXgoaSwgZ2x5cGgpOwotICAgICAgICAgICAgaGF2
ZUdseXBocyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaGF2ZUdseXBo
czsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4
NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERp
cmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDIwNSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgotCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVj
dDJELmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0K
LSNkZWZpbmUgR1JBRElFTlRfRFJBV0lORyAzCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9p
ZCBHcmFkaWVudDo6c3RvcHNDaGFuZ2VkKCkKLXsKLSAgICBtX2JydXNoID0gbnVsbHB0cjsKLX0K
LQotc3RhdGljIGJvb2wgY2lyY2xlSXNFbnRpcmVseUNvbnRhaW5lZChjb25zdCBGbG9hdFBvaW50
JiBjZW50ZXJBLCBmbG9hdCByYWRpdXNBLCBjb25zdCBGbG9hdFBvaW50JiBjZW50ZXJCLCBmbG9h
dCByYWRpdXNCKQotewotICAgIGRvdWJsZSBkZWx0YVggPSBjZW50ZXJCLngoKSAtIGNlbnRlckEu
eCgpOwotICAgIGRvdWJsZSBkZWx0YVkgPSBjZW50ZXJCLnkoKSAtIGNlbnRlckEueSgpOwotICAg
IGRvdWJsZSBkZWx0YVJhZGl1cyA9IHJhZGl1c0IgLSByYWRpdXNBOwotCi0gICAgcmV0dXJuIGRl
bHRhWCAqIGRlbHRhWCArIGRlbHRhWSAqIGRlbHRhWSA8IGRlbHRhUmFkaXVzICogZGVsdGFSYWRp
dXMgJiYgcmFkaXVzQSA8IHJhZGl1c0I7Ci19Ci0KLUlEMkQxQnJ1c2gqIEdyYWRpZW50OjpjcmVh
dGVCcnVzaChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQotewotICAgIHNvcnRTdG9w
cygpOwotCi0gICAgVmVjdG9yPEQyRDFfR1JBRElFTlRfU1RPUD4gZ3JhZGllbnRTdG9wczsKLSAg
ICBncmFkaWVudFN0b3BzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9zdG9wcy5zaXplKCkpOwot
ICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKLSAgICAgICAgLy8gRklYTUU6IEFkZCBz
dXBwb3J0IGZvciBub24tc1JHQkEgY29sb3Igc3BhY2VzLgotICAgICAgICBhdXRvIFtyLCBnLCBi
LCBhXSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVk
KCk7Ci0gICAgICAgIGdyYWRpZW50U3RvcHMuZ3JhZGllbnRTdG9wcy51bmNoZWNrZWRBcHBlbmQo
RDJEMTo6R3JhZGllbnRTdG9wKHN0b3Aub2Zmc2V0LCBEMkQxOjpDb2xvckYociwgZywgYiwgYSkp
KTsKLSAgICB9Ci0KLSAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKLSAgICAgICAgWyZdIChjb25z
dCBMaW5lYXJEYXRhJikgewotICAgICAgICAgICAgLy8gTm8gYWN0aW9uIG5lZWRlZC4KLSAgICAg
ICAgfSwKLSAgICAgICAgWyZdIChSYWRpYWxEYXRhJiBkYXRhKSB7Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChkYXRhLnN0YXJ0UmFkaXVzID49IDApOwotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoZGF0YS5lbmRSYWRpdXMgPj0gMCk7Ci0KLSAgICAgICAgICAgIGlmIChkYXRhLnN0YXJ0
UmFkaXVzID4gZGF0YS5lbmRSYWRpdXMpIHsKLSAgICAgICAgICAgICAgICBncmFkaWVudFN0b3Bz
LnJldmVyc2UoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiBncmFkaWVudFN0
b3BzKQotICAgICAgICAgICAgICAgICAgICBzdG9wLnBvc2l0aW9uID0gMS4wIC0gc3RvcC5wb3Np
dGlvbjsKLQotICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChkYXRhLnN0YXJ0UmFkaXVzLCBkYXRh
LmVuZFJhZGl1cyk7Ci0gICAgICAgICAgICAgICAgc3RkOjpzd2FwKGRhdGEucG9pbnQwLCBkYXRh
LnBvaW50MSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChkYXRhLnN0YXJ0UmFk
aXVzKSB7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YS5lbmRSYWRpdXMgPiAw
KTsKLSAgICAgICAgICAgICAgICBmbG9hdCBzdGFydFBvc2l0aW9uID0gZGF0YS5zdGFydFJhZGl1
cyAvIGRhdGEuZW5kUmFkaXVzOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXJ0
UG9zaXRpb24gPD0gMS4wKTsKLSAgICAgICAgICAgICAgICBmbG9hdCBhdmFpbGFibGVSYW5nZSA9
IDEuMCAtIHN0YXJ0UG9zaXRpb247Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXZh
aWxhYmxlUmFuZ2UgPD0gMS4wICYmIGF2YWlsYWJsZVJhbmdlID49IDApOwotCi0gICAgICAgICAg
ICAgICAgZm9yIChhdXRvJiBzdG9wIDogZ3JhZGllbnRTdG9wcykgewotICAgICAgICAgICAgICAg
ICAgICBzdG9wLnBvc2l0aW9uICo9IGF2YWlsYWJsZVJhbmdlOwotICAgICAgICAgICAgICAgICAg
ICBzdG9wLnBvc2l0aW9uICs9IHN0YXJ0UG9zaXRpb247Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgJ3N0YXJ0JyBwb3NpdGlvbgotICAgICAgICAg
ICAgICAgIGF1dG8gZmlyc3RTdG9wID0gZ3JhZGllbnRTdG9wcy5maXJzdCgpOwotICAgICAgICAg
ICAgICAgIGlmICghV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGZpcnN0U3RvcC5wb3NpdGlvbiwg
MC4wZikpIHsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RTdG9wLnBvc2l0aW9uID0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgZ3JhZGllbnRTdG9wcy5pbnNlcnQoMCwgZmlyc3RTdG9wKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgIFsmXSAo
Y29uc3QgQ29uaWNEYXRhJikgewotICAgICAgICAgICAgLy8gRklYTUU6IEFzc2VzcyB3aGV0aGVy
IG5lZWRlZCBmb3IgQ29uaWMgR3JhZGllbnRzLgotICAgICAgICB9Ci0gICAgKTsKLQotICAgIENP
TVB0cjxJRDJEMUdyYWRpZW50U3RvcENvbGxlY3Rpb24+IGdyYWRpZW50U3RvcENvbGxlY3Rpb247
Ci0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlR3JhZGllbnRTdG9wQ29sbGVj
dGlvbihncmFkaWVudFN0b3BzLmRhdGEoKSwgZ3JhZGllbnRTdG9wcy5zaXplKCksICZncmFkaWVu
dFN0b3BDb2xsZWN0aW9uKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQot
ICAgIFdURjo6c3dpdGNoT24obV9kYXRhLAotICAgICAgICBbJl0gKGNvbnN0IExpbmVhckRhdGEm
IGRhdGEpIHsKLSAgICAgICAgICAgIElEMkQxTGluZWFyR3JhZGllbnRCcnVzaCogbGluZWFyR3Jh
ZGllbnQgPSBudWxscHRyOwotICAgICAgICAgICAgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZUxp
bmVhckdyYWRpZW50QnJ1c2goCi0gICAgICAgICAgICAgICAgRDJEMTo6TGluZWFyR3JhZGllbnRC
cnVzaFByb3BlcnRpZXMoZGF0YS5wb2ludDAsIGRhdGEucG9pbnQxKSwKLSAgICAgICAgICAgICAg
ICBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKSwgZ3JhZGllbnRTdG9wQ29sbGVjdGlvbi5nZXQoKSwK
LSAgICAgICAgICAgICAgICAmbGluZWFyR3JhZGllbnQpOwotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgICAgICBtX2JydXNoID0gYWRvcHRDT00obGlu
ZWFyR3JhZGllbnQpOwotICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJhZGlhbERhdGEm
IGRhdGEpIHsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQ7Ci0gICAgICAgICAgICBpZiAo
IWNpcmNsZUlzRW50aXJlbHlDb250YWluZWQoZGF0YS5wb2ludDAsIGRhdGEuc3RhcnRSYWRpdXMs
IGRhdGEucG9pbnQxLCBkYXRhLmVuZFJhZGl1cykpCi0gICAgICAgICAgICAgICAgb2Zmc2V0ID0g
KGRhdGEucG9pbnQxLnNjYWxlZChkYXRhLnN0YXJ0UmFkaXVzKSAtIGRhdGEucG9pbnQwLnNjYWxl
ZChkYXRhLmVuZFJhZGl1cykpIC8gKGRhdGEuZW5kUmFkaXVzIC0gZGF0YS5zdGFydFJhZGl1cyk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gZGF0YS5wb2ludDAg
LSBkYXRhLnBvaW50MTsKLQotICAgICAgICAgICAgRmxvYXRQb2ludCBjZW50ZXIgPSBkYXRhLnBv
aW50MTsKLSAgICAgICAgICAgIGZsb2F0IHJhZGl1c1ggPSBkYXRhLmVuZFJhZGl1czsKLSAgICAg
ICAgICAgIGZsb2F0IHJhZGl1c1kgPSByYWRpdXNYIC8gZGF0YS5hc3BlY3RSYXRpbzsKLQotICAg
ICAgICAgICAgSUQyRDFSYWRpYWxHcmFkaWVudEJydXNoKiByYWRpYWxHcmFkaWVudCA9IG51bGxw
dHI7Ci0gICAgICAgICAgICBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlUmFkaWFsR3JhZGllbnRC
cnVzaCgKLSAgICAgICAgICAgICAgICBEMkQxOjpSYWRpYWxHcmFkaWVudEJydXNoUHJvcGVydGll
cyhjZW50ZXIsIEQyRDE6OlBvaW50MkYob2Zmc2V0LndpZHRoKCksIG9mZnNldC5oZWlnaHQoKSks
IHJhZGl1c1gsIHJhZGl1c1kpLAotICAgICAgICAgICAgICAgIEQyRDE6OkJydXNoUHJvcGVydGll
cygpLCBncmFkaWVudFN0b3BDb2xsZWN0aW9uLmdldCgpLAotICAgICAgICAgICAgICAgICZyYWRp
YWxHcmFkaWVudCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsK
LSAgICAgICAgICAgIG1fYnJ1c2ggPSBhZG9wdENPTShyYWRpYWxHcmFkaWVudCk7Ci0gICAgICAg
IH0sCi0gICAgICAgIFsmXSAoY29uc3QgQ29uaWNEYXRhJikgewotICAgICAgICAgICAgLy8gRklY
TUU6IGltcGxlbWVudCBjb25pYyBncmFkaWVudCByZW5kZXJpbmcuCi0gICAgICAgICAgICBtX2Jy
dXNoID0gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICk7Ci0KLSAgICByZXR1cm4gbV9icnVzaC5n
ZXQoKTsKLX0KLQotdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvIGQyZENvbnRleHQgPSBjb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKTsKLQotICAgIFdURjo6c3dpdGNoT24o
bV9kYXRhLAotICAgICAgICBbJl0gKGNvbnN0IExpbmVhckRhdGEmIGRhdGEpIHsKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBJZiB3ZSBoYXZlIGEgYnJ1c2gsIHdoeSBjYW4gd2UgcmUtdXNlIGl0PyBX
aGF0IGd1YXJhbnRlZXMgaXQncyByaWdodCBmb3IgdGhpcyBjb250ZXh0PwotICAgICAgICAgICAg
aWYgKCFtX2JydXNoKQotICAgICAgICAgICAgICAgIGNyZWF0ZUJydXNoKGQyZENvbnRleHQpOwot
Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAgICAgICAgIGQyZENvbnRleHQtPlNldFRhZ3MoR1JB
RElFTlRfRFJBV0lORywgX19MSU5FX18pOwotI2VuZGlmCi0KLSAgICAgICAgICAgIGNvbnN0IEQy
RDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwotICAgICAgICAgICAgZDJkQ29udGV4dC0+RmlsbFJl
Y3RhbmdsZSgmZDJkUmVjdCwgbV9icnVzaC5nZXQoKSk7Ci0gICAgICAgIH0sCi0gICAgICAgIFsm
XSAoY29uc3QgUmFkaWFsRGF0YSYgZGF0YSkgewotICAgICAgICAgICAgYm9vbCBuZWVkU2NhbGlu
ZyA9IGRhdGEuYXNwZWN0UmF0aW8gIT0gMTsKLSAgICAgICAgICAgIGlmIChuZWVkU2NhbGluZykg
ewotICAgICAgICAgICAgICAgIGNvbnRleHQuc2F2ZSgpOwotICAgICAgICAgICAgICAgIC8vIFNj
YWxlIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgZ3JhZGllbnQuIFdlIG9ubHkgZXZlciBzY2FsZSBu
b24tZGVwcmVjYXRlZCBncmFkaWVudHMsCi0gICAgICAgICAgICAgICAgLy8gZm9yIHdoaWNoIG1f
cDAgPT0gbV9wMS4KLSAgICAgICAgICAgICAgICBBU1NFUlQoZGF0YS5wb2ludDAgPT0gZGF0YS5w
b2ludDEpOwotCi0gICAgICAgICAgICAgICAgRDJEMV9NQVRSSVhfM1gyX0YgY3RtID0geyB9Owot
ICAgICAgICAgICAgICAgIGQyZENvbnRleHQtPkdldFRyYW5zZm9ybSgmY3RtKTsKLQotICAgICAg
ICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0oY3RtKTsKLSAgICAgICAgICAgICAg
ICB0cmFuc2Zvcm0udHJhbnNsYXRlKGRhdGEucG9pbnQwKTsKLSAgICAgICAgICAgICAgICB0cmFu
c2Zvcm0uc2NhbGVOb25Vbmlmb3JtKDEuMCwgMS4wIC8gZGF0YS5hc3BlY3RSYXRpbyk7Ci0gICAg
ICAgICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtZGF0YS5wb2ludDApOwotCi0gICAgICAg
ICAgICAgICAgZDJkQ29udGV4dC0+U2V0VHJhbnNmb3JtKGN0bSk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBoYXZlIGEgYnJ1c2gsIHdoeSBjYW4gd2UgcmUt
dXNlIGl0PyBXaGF0IGd1YXJhbnRlZXMgaXQncyByaWdodCBmb3IgdGhpcyBjb250ZXh0PwotICAg
ICAgICAgICAgaWYgKCFtX2JydXNoKQotICAgICAgICAgICAgICAgIGNyZWF0ZUJydXNoKGQyZENv
bnRleHQpOwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAgICAgICAgIGQyZENvbnRleHQtPlNl
dFRhZ3MoR1JBRElFTlRfRFJBV0lORywgX19MSU5FX18pOwotI2VuZGlmCi0KLSAgICAgICAgICAg
IGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwotICAgICAgICAgICAgZDJkQ29udGV4
dC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgbV9icnVzaC5nZXQoKSk7Ci0KLSAgICAgICAgICAg
IGlmIChuZWVkU2NhbGluZykKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKLSAg
ICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBDb25pY0RhdGEmKSB7Ci0gICAgICAgICAgICAv
LyBGSVhNRTogaW1wbGVtZW50IGNvbmljIGdyYWRpZW50IHJlbmRlcmluZy4KLSAgICAgICAgfQot
ICAgICk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkocmV2
aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDkxOSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0KLSNpbmNsdWRl
ICJDT01QdHIuaCIKLSNpbmNsdWRlICJEaXJlY3QyRE9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJE
aXJlY3QyRFV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIKLSNp
bmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlRGlyZWN0MkQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1
ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQu
aCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8ZDJkMWVmZmVjdHMuaD4KLSNpbmNsdWRl
IDxkd3JpdGVfMy5oPgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4KLQotI3ByYWdtYSB3YXJuaW5nIChk
aXNhYmxlIDogNDc1NikKLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRChIREMgaGRjLCBib29sIGhhc0FscGhh
KQotewotICAgIHBsYXRmb3JtSW5pdChoZGMsIGhhc0FscGhhKTsKLX0KLQotR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKEhEQyBoZGMsIElEMkQxRENSZW5k
ZXJUYXJnZXQqKiByZW5kZXJUYXJnZXQsIFJFQ1QgcmVjdCwgYm9vbCBoYXNBbHBoYSkKLXsKLSAg
ICAvLyBDcmVhdGUgYSBEQyByZW5kZXIgdGFyZ2V0LgotICAgIGF1dG8gdGFyZ2V0UHJvcGVydGll
cyA9IERpcmVjdDJEOjpyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0KLSAgICBIUkVTVUxUIGhy
ID0gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5k
ZXJUYXJnZXQoJnRhcmdldFByb3BlcnRpZXMsIHJlbmRlclRhcmdldCk7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICAoKnJlbmRlclRhcmdldCktPkJpbmREQyhoZGMs
ICZyZWN0KTsKLQotICAgIGF1dG8gb3duZWRQbGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5pcXVlPFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEPigqcmVuZGVyVGFyZ2V0KTsKLSAgICBtX2RhdGEgPSBuZXcg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKFdURk1vdmUob3duZWRQbGF0Zm9ybUNvbnRl
eHQpLCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKLSAgICBtX2RhdGEt
Pm1faGRjID0gaGRjOwotfQotCi1HcmFwaGljc0NvbnRleHREaXJlY3QyRDo6R3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJlclR5cGUpCi17Ci0gICAgcGxh
dGZvcm1Jbml0KHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LCByZW5kZXJlclR5cGUpOwotfQotCi1J
RDJEMUZhY3RvcnkqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzeXN0ZW1GYWN0b3J5KCkKLXsK
LSAgICBzdGF0aWMgSUQyRDFGYWN0b3J5KiBkaXJlY3QyREZhY3RvcnkgPSBudWxscHRyOwotICAg
IGlmICghZGlyZWN0MkRGYWN0b3J5KSB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBEMkQxX0ZB
Q1RPUllfT1BUSU9OUyBvcHRpb25zID0geyB9OwotICAgICAgICBvcHRpb25zLmRlYnVnTGV2ZWwg
PSBEMkQxX0RFQlVHX0xFVkVMX0lORk9STUFUSU9OOwotICAgICAgICBIUkVTVUxUIGhyID0gRDJE
MUNyZWF0ZUZhY3RvcnkoRDJEMV9GQUNUT1JZX1RZUEVfTVVMVElfVEhSRUFERUQsIG9wdGlvbnMs
ICZkaXJlY3QyREZhY3RvcnkpOwotI2Vsc2UKLSAgICAgICAgSFJFU1VMVCBociA9IEQyRDFDcmVh
dGVGYWN0b3J5KEQyRDFfRkFDVE9SWV9UWVBFX01VTFRJX1RIUkVBREVELCAmZGlyZWN0MkRGYWN0
b3J5KTsKLSNlbmRpZgotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZGlyZWN0MkRGYWN0b3J5OwotfQotCi1JRDJEMVJlbmRlclRhcmdl
dCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKQotewotICAg
IHN0YXRpYyBJRDJEMVJlbmRlclRhcmdldCogZGVmYXVsdFJlbmRlclRhcmdldCA9IG51bGxwdHI7
Ci0gICAgaWYgKCFkZWZhdWx0UmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIGF1dG8gcmVuZGVyVGFy
Z2V0UHJvcGVydGllcyA9IEQyRDE6OlJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKLSAgICAgICAg
cmVuZGVyVGFyZ2V0UHJvcGVydGllcy51c2FnZSA9IEQyRDFfUkVOREVSX1RBUkdFVF9VU0FHRV9H
RElfQ09NUEFUSUJMRTsKLSAgICAgICAgYXV0byBod25kUmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9
IEQyRDE6Okh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKDo6R2V0RGVza3RvcFdpbmRvdygpLCBE
MkQxOjpTaXplVSgxMCwgMTApKTsKLSAgICAgICAgSFJFU1VMVCBociA9IHN5c3RlbUZhY3Rvcnko
KS0+Q3JlYXRlSHduZFJlbmRlclRhcmdldCgmcmVuZGVyVGFyZ2V0UHJvcGVydGllcywgJmh3bmRS
ZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLCByZWludGVycHJldF9jYXN0PElEMkQxSHduZFJlbmRlclRh
cmdldCoqPigmZGVmYXVsdFJlbmRlclRhcmdldCkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChT
VUNDRUVERUQoaHIpKTsKLSAgICAgICAgZGVmYXVsdFJlbmRlclRhcmdldC0+QWRkUmVmKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGRlZmF1bHRSZW5kZXJUYXJnZXQ7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtSW5pdChIREMgaGRjLCBib29sIGhhc0FscGhhKQot
ewotICAgIGlmICghaGRjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIQklUTUFQIGJpdG1hcCA9
IHN0YXRpY19jYXN0PEhCSVRNQVA+KEdldEN1cnJlbnRPYmplY3QoaGRjLCBPQkpfQklUTUFQKSk7
Ci0KLSAgICBESUJQaXhlbERhdGEgcGl4ZWxEYXRhKGJpdG1hcCk7Ci0KLSAgICBhdXRvIHRhcmdl
dFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6cmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwotCi0gICAg
Q09NUHRyPElEMkQxRENSZW5kZXJUYXJnZXQ+IHJlbmRlclRhcmdldDsKLSAgICBIUkVTVUxUIGhy
ID0gc3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEQ1JlbmRlclRhcmdldCgmdGFyZ2V0UHJvcGVydGll
cywgJnJlbmRlclRhcmdldCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBSRUNUIGNsaWVudFJlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIHBpeGVsRGF0
YS5zaXplKCkpOwotICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5CaW5kREMoaGRjLCAmY2xpZW50UmVj
dCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
IG93bmVkUGxhdGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RD4ocmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKFdURk1vdmUob3duZWRQbGF0Zm9ybUNvbnRleHQpLCBCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKLSAgICBtX2RhdGEtPm1faGRjID0gaGRjOwot
Ci0gICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0
YXRlLgotICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxDb2xvcigpKTsKLSAgICBzZXRQbGF0
Zm9ybVN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlVGhp
Y2tuZXNzKHN0cm9rZVRoaWNrbmVzcygpKTsKLSAgICAvLyBGSVhNRTogbV9zdGF0ZS5pbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5ID0gY29udmVydEludGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4
dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCogcGxhdGZvcm1Db250ZXh0KQotewotICAgIHBsYXRmb3JtSW5pdChwbGF0Zm9ybUNvbnRl
eHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQqIHBsYXRmb3JtQ29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5n
VHlwZSkKLXsKLSAgICBpZiAoIXBsYXRmb3JtQ29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgqcGxhdGZvcm1D
b250ZXh0LCByZW5kZXJpbmdUeXBlKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBz
dGFydHMgaW4gc3luYyB3aXRoIG91ciBzdGF0ZS4KLSAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihm
aWxsQ29sb3IoKSk7Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsK
LSAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3MoKSk7Ci0gICAg
Ly8gRklYTUU6IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvbnZlcnRJbnRl
cnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9y
bUNvbnRleHQoKSkpOwotfQotCi1HcmFwaGljc0NvbnRleHREaXJlY3QyRDo6fkdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEKCkKLXsKLSAgICBkZWxldGUgbV9kYXRhOwotfQotCi1QbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtQ29udGV4dCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuICZtX2RhdGEtPnBsYXRmb3JtQ29udGV4dCgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c3luY0NvbnRleHQoUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLUlEMkQxUmVuZGVy
VGFyZ2V0KiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJlbmRlclRhcmdldCgpCi17
Ci0gICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dC5tX3RyYW5zcGFyZW5jeUxheWVyU3RhY2suaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gbV9wbGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lM
YXllclN0YWNrLmxhc3QoKS5yZW5kZXJUYXJnZXQuZ2V0KCk7Ci0KLSAgICByZXR1cm4gbV9wbGF0
Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlOjpzZXRBbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBBU1NFUlQobV9wbGF0
Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgbV9h
bHBoYSA9IGFscGhhOwotfQotCi1mbG9hdCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6
OmN1cnJlbnRHbG9iYWxBbHBoYSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4
dC5tX3RyYW5zcGFyZW5jeUxheWVyU3RhY2suaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9w
bGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLmxhc3QoKS5vcGFjaXR5Owot
Ci0gICAgcmV0dXJuIG1fYWxwaGE7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OnNhdmUoKQotewotICAgIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpOwotICAgIERpcmVjdDJEOjpz
YXZlKCpwbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OnJlc3RvcmUoKQotewotICAgIGlmICghc3RhY2tTaXplKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpOwotICAgIERpcmVjdDJEOjpyZXN0b3Jl
KCpwbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGF1
dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJhd05hdGl2ZUltYWdl
KCpwbGF0Zm9ybUNvbnRleHQoKSwgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBp
bWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zLCBzdGF0ZS5hbHBoYSwgRGlyZWN0
MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0
LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKQotewotICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9ICFt
X2RhdGEtPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpOwotICAgIGlmICghY3JlYXRl
ZEJpdG1hcCkgewotICAgICAgICBEaXJlY3QyRDo6cmVzdG9yZSgqcGxhdGZvcm1Db250ZXh0KCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFoZGMgfHwgZHN0UmVjdC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gc291cmNlQml0bWFwID0gYWRvcHRH
RElPYmplY3Qoc3RhdGljX2Nhc3Q8SEJJVE1BUD4oOjpHZXRDdXJyZW50T2JqZWN0KGhkYywgT0JK
X0JJVE1BUCkpKTsKLQotICAgIERJQlBpeGVsRGF0YSBwaXhlbERhdGEoc291cmNlQml0bWFwLmdl
dCgpKTsKLSAgICBBU1NFUlQocGl4ZWxEYXRhLmJpdHNQZXJQaXhlbCgpID09IDMyKTsKLQotICAg
IGF1dG8gYml0bWFwUHJvcGVydGllcyA9IERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCk7Ci0K
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIGF1dG8mIHBsYXRmb3JtQ29u
dGV4dCA9ICp0aGlzLT5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1h
cD4gYml0bWFwOwotICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0
KCktPkNyZWF0ZUJpdG1hcChwaXhlbERhdGEuc2l6ZSgpLCBwaXhlbERhdGEuYnVmZmVyKCksIHBp
eGVsRGF0YS5ieXRlc1BlclJvdygpLCAmYml0bWFwUHJvcGVydGllcywgJmJpdG1hcCk7Ci0gICAg
QVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgUGxhdGZvcm1Db250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKHBsYXRmb3JtQ29udGV4dCk7Ci0KLSAgICAvLyBOb3RlOiBUaGUgY29udGVudCBp
biB0aGUgSERDIGlzIGludmVydGVkIGNvbXBhcmVkIHRvIERpcmVjdDJELCBzbyBpdCBuZWVkcyB0
byBiZSBmbGlwcGVkLgotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJU
YXJnZXQoKTsKLQotICAgIEQyRDFfTUFUUklYXzNYMl9GIGN1cnJlbnRUcmFuc2Zvcm07Ci0gICAg
Y29udGV4dC0+R2V0VHJhbnNmb3JtKCZjdXJyZW50VHJhbnNmb3JtKTsKLQotICAgIEFmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm0oY3VycmVudFRyYW5zZm9ybSk7Ci0gICAgdHJhbnNmb3JtLnRyYW5z
bGF0ZShkc3RSZWN0LmxvY2F0aW9uKCkpOwotICAgIHRyYW5zZm9ybS5zY2FsZSgxLjAsIC0xLjAp
OwotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoMCwgLWRzdFJlY3QuaGVpZ2h0KCkpOwotCi0gICAg
Y29udGV4dC0+U2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0gICAgY29udGV4dC0+RHJhd0JpdG1h
cChiaXRtYXAuZ2V0KCksIEQyRDE6OlJlY3RGKDAsIDAsIGRzdFJlY3Qud2lkdGgoKSwgZHN0UmVj
dC5oZWlnaHQoKSkpOwotCi0gICAgOjpEZWxldGVEQyhoZGMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikK
LXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0
eWxlKQotewotICAgIERpcmVjdDJEOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKG1fcGxhdGZv
cm1Db250ZXh0LCByZWN0LCBzdHlsZSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJiBwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQotICAgIDogbV9wbGF0Zm9ybUNvbnRleHQo
cGxhdGZvcm1Db250ZXh0KQotICAgICwgbV9yZW5kZXJlclR5cGUocmVuZGVyaW5nVHlwZSkKLXsK
LSAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpCi0gICAgICAgIGJlZ2luRHJh
dygpOwotfQotCi1HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZShzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+
JiYgb3duZWRQbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQotICAgIDogbV9vd25lZFBsYXRmb3Jt
Q29udGV4dChXVEZNb3ZlKG93bmVkUGxhdGZvcm1Db250ZXh0KSkKLSAgICAsIG1fcGxhdGZvcm1D
b250ZXh0KCptX293bmVkUGxhdGZvcm1Db250ZXh0KQotICAgICwgbV9yZW5kZXJlclR5cGUocmVu
ZGVyaW5nVHlwZSkKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0gR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpCi0g
ICAgICAgIGJlZ2luRHJhdygpOwotfQotCi1HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6
On5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKQotewotICAgIGlmICghbV9wbGF0Zm9y
bUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3Bs
YXRmb3JtQ29udGV4dC5iZWdpbkRyYXdDb3VudCkKLSAgICAgICAgZW5kRHJhdygpOwotfQotCi1J
RDJEMVNvbGlkQ29sb3JCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmJydXNoV2l0aENv
bG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCkt
PmJydXNoV2l0aENvbG9yKGNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbG9yKSkuZ2V0KCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGlwKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNs
aXAoY29uc3QgUGF0aCYgcGF0aCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGU6OmNsaXAoSUQyRDFHZW9tZXRyeSogcGF0aCkKLXsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGFmZmluZVRyYW5zZm9ybSkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU6OmZsdXNoKCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU6OmJlZ2luRHJhdygpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuYmVnaW5EcmF3KCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmREcmF3KCkKLXsKLSAg
ICBtX3BsYXRmb3JtQ29udGV4dC5lbmREcmF3KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjpyZXN0b3JlKCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OnNhdmUoKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtKQotewotICAgIEFTU0VSVChtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJn
ZXQoKSk7Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPlNldFRyYW5zZm9y
bSh0cmFuc2Zvcm0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjpyb3RhdGUoZmxvYXQgYW5nbGUpCi17Ci19Ci0KLUQyRDFfQ09MT1Jf
RiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29s
b3ImIGNvbG9yKSBjb25zdAotewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9Db2xv
clR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKLSAgICByZXR1cm4gRDJEMTo6
Q29sb3JGKHIsIGcsIGIsIGEgKiBtX2RhdGEtPmN1cnJlbnRHbG9iYWxBbHBoYSgpKTsKLX0KLQot
SUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNvbGlkU3Ryb2tlQnJ1c2goKSBj
b25zdAotewotICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZFN0cm9rZUJydXNo
LmdldCgpOwotfQotCi1JRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c29saWRG
aWxsQnJ1c2goKSBjb25zdAotewotICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xp
ZEZpbGxCcnVzaC5nZXQoKTsKLX0KLQotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OnBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBsYXRmb3JtQ29u
dGV4dCgpLT5tX3BhdHRlcm5TdHJva2VCcnVzaC5nZXQoKTsKLX0KLQotSUQyRDFCcnVzaCogR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5GaWxsQnJ1c2goKSBjb25zdAotewotICAgIHJl
dHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuRmlsbEJydXNoLmdldCgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpiZWdpbkRyYXcoKQotewotICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5iZWdpbkRyYXcoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6ZW5kRHJhdygpCi17Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmVuZERyYXcoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Zmx1c2goKQotewotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OmZsdXNoKCpwbGF0Zm9ybUNvbnRleHQo
KSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdQYXR0ZXJuKGNvbnN0
IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKLXsKLSAgICBpZiAoIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBhdXRvIHRpbGVJbWFnZSA9IGltYWdlOwotICAgIERpcmVjdDJE
OjpkcmF3UGF0dGVybigqcGxhdGZvcm1Db250ZXh0KCksIFdURk1vdmUodGlsZUltYWdlKSwgSW50
U2l6ZShpbWFnZS5zaXplKCkpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkp
OwotfQotCi0vLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVy
Lgotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi17Ci0gICAgQVNTRVJUKCFyZWN0LmlzRW1w
dHkoKSk7Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpk
cmF3UmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUu
ZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0TGluZUNhcChMaW5lQ2FwKQot
ewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0TGluZUpvaW4o
TGluZUpvaW4pCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpz
ZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OnNldE1pdGVyTGltaXQoZmxvYXQgY2FudmFzTWl0ZXJMaW1pdCkKLXsK
LSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXREYXNoT2Zmc2V0KGNhbnZhc01pdGVyTGltaXQpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0RGFzaE9mZnNldChm
bG9hdCBkYXNoT2Zmc2V0KQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldERhc2hPZmZzZXQo
ZGFzaE9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpz
ZXRQYXR0ZXJuV2lkdGgoZmxvYXQgcGF0dGVybldpZHRoKQotewotICAgIG1fcGxhdGZvcm1Db250
ZXh0LnNldFBhdHRlcm5XaWR0aChwYXR0ZXJuV2lkdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0UGF0dGVybk9mZnNldChmbG9hdCBwYXR0ZXJuT2Zmc2V0
KQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldFBhdHRlcm5PZmZzZXQocGF0dGVybk9mZnNl
dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzZXRTdHJva2VU
aGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldFN0
cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6c2V0RGFzaGVzKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzKQotewotICAgIG1f
cGxhdGZvcm1Db250ZXh0LnNldERhc2hlcyhkYXNoZXMpOwotfQotCi1EMkQxX1NUUk9LRV9TVFlM
RV9QUk9QRVJUSUVTIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c3Ryb2tlU3R5bGVQ
cm9wZXJ0aWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRDJEMTo6U3Ryb2tlU3R5bGVQcm9wZXJ0
aWVzKG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNvbnRleHQubV9saW5l
Q2FwLCBtX3BsYXRmb3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1Db250ZXh0Lm1fbGlu
ZUpvaW4sIG1fcGxhdGZvcm1Db250ZXh0Lm1fbWl0ZXJMaW1pdCwgRDJEMV9EQVNIX1NUWUxFX1NP
TElELCAwLjBmKTsKLX0KLQotSUQyRDFTdHJva2VTdHlsZSogR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OnN0cm9rZVN0eWxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwotICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+c3Ryb2tlU3R5bGUoKTsKLX0KLQot
Ly8gVGhpcyBpcyBvbmx5IHVzZWQgdG8gZHJhdyBib3JkZXJzLgotdm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludDIpCi17Ci0gICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCi0g
ICAgICAgIHJldHVybjsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgRGly
ZWN0MkQ6OmRyYXdMaW5lKCpwbGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQxLCBwb2ludDIsIHN0YXRl
LnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBz
dGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250
ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0
cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjphcHBseVN0cm9rZVBhdHRlcm4oKQotewotICAgIGlmICghbV9zdGF0ZS5z
dHJva2VQYXR0ZXJuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0
Zm9ybUNvbnRleHQoKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklY
TUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCi0KLSAgICBjb25zdCBmbG9h
dCBwYXR0ZXJuQWxwaGEgPSAxOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5TdHJv
a2VCcnVzaCA9IGFkb3B0Q09NKG1fc3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1Q
YXR0ZXJuKCp0aGlzLCBwYXR0ZXJuQWxwaGEsIHVzZXJUb0Jhc2VDVE0pKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBwbHlGaWxsUGF0dGVybigpCi17Ci0gICAgaWYgKCFt
X3N0YXRlLmZpbGxQYXR0ZXJuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGNvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsg
Ly8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCi0KLSAgICBjb25z
dCBmbG9hdCBwYXR0ZXJuQWxwaGEgPSAxOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRl
cm5GaWxsQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9y
bVBhdHRlcm4oKnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQotewot
ICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0
KCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdQYXRoKGNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpTdHJv
a2VTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCi17Ci0gICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9y
bUNvbnRleHQoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbFBhdGgoY29udGV4dCwgcGF0aCwgRGlyZWN0
MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRl
KSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKLXsKLSAgICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhdXRvJiBjb250ZXh0ID0g
KnBsYXRmb3JtQ29udGV4dCgpOwotICAgIERpcmVjdDJEOjpzdHJva2VQYXRoKGNvbnRleHQsIHBh
dGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRv
d1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7Ci0gICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBEaXJl
Y3QyRDo6ZmlsbFJlY3QoY29udGV4dCwgcmVjdCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUs
ICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQotewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBh
dXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwotICAgIERpcmVjdDJEOjpmaWxsUmVj
dChjb250ZXh0LCByZWN0LCBjb2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQotewotICAgIGF1dG8gYnJ1c2ggPSBncmFkaWVu
dC5jcmVhdGVCcnVzaChtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgaWYg
KCFicnVzaCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0aEdy
YWRpZW50KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBicnVzaC5nZXQoKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4
dCgpLnN0YXRlKCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IHN0
YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotCi0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3Np
dGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1v
ZGUpOwotICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29s
b3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJhdG9y
LCBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQotewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBE
aXJlY3QyRDo6ZmlsbFJvdW5kZWRSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgY29sb3Is
IERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQotewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhdXRvJiBjb250
ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb250ZXh0LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsIERpcmVjdDJEOjpGaWxsU291
cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
LXsKLSAgICBEaXJlY3QyRDo6Y2xpcCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcE91dCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBh
dGgpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXBPdXQoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYg
cGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXBQYXRoKCpwbGF0
Zm9ybUNvbnRleHQoKSwgcGF0aCwgY2xpcFJ1bGUpOwotfQotCi1JbnRSZWN0IEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpjbGlwQm91bmRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRGlyZWN0MkQ6
OlN0YXRlOjpnZXRDbGlwQm91bmRzKCpwbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQ6OmJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0gICAgc2F2ZSgpOwotCi0gICAgbV9zdGF0
ZS5hbHBoYSA9IG9wYWNpdHk7Ci0KLSAgICBEaXJlY3QyRDo6YmVnaW5UcmFuc3BhcmVuY3lMYXll
cigqcGxhdGZvcm1Db250ZXh0KCksIG9wYWNpdHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCi17Ci0gICAgR3Jh
cGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIERpcmVjdDJEOjplbmRU
cmFuc3BhcmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgbV9zdGF0ZS5hbHBo
YSA9IG1fZGF0YS0+Y3VycmVudEdsb2JhbEFscGhhKCk7Ci0KLSAgICByZXN0b3JlKCk7Ci19Ci0K
LWJvb2wgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJz
KCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi17Ci0gICAgaWYgKGZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKLSAgICAg
ICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9wbGF0Zm9ybUNvbnRleHQs
IHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0
U3Ryb2tlU3R5bGUobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVN0eWxlKTsKLQotICAg
IGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpIHsKLSAgICAg
ICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAgICAgICAgICAvLyBN
ZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQKLSAgICAgICAgICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBz
aW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCi0gICAgICAgICAg
ICBhdXRvJiBtdXRhYmxlU3RhdGUgPSBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dFN0YXRlJj4o
Z3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSk7Ci0gICAgICAgICAgICBhdXRvJiBzaGFkb3dPZmZz
ZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBtdXRhYmxlU3RhdGUuc2hhZG93
T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSB9
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpz
ZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLmNvbXBvc2l0ZU9w
ZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRl
OjpzZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnNob3VsZEFudGlh
bGlhcyk7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUNvbG9yQ2hhbmdlKSkgewotICAgICAgICBBU1NFUlQobV9zdGF0ZS5zdHJva2VDb2xvciA9
PSBjb2xvcik7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3NvbGlkU3Ryb2tlQnJ1c2gg
PSBicnVzaFdpdGhDb2xvcihzdHJva2VDb2xvcigpKTsgICAgCi0gICAgfQotICAgIAotICAgIGlm
IChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkg
ewotICAgICAgICBBU1NFUlQobV9zdGF0ZS5maWxsQ29sb3IgPT0gY29sb3IpOwotICAgICAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZEZpbGxCcnVzaCA9IGJydXNoV2l0aENvbG9yKGZpbGxD
b2xvcigpKTsKLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkgewotICAgICAgICBhdXRvIGZvbnRTbW9v
dGhpbmdNb2RlID0gZW5hYmxlID8gRDJEMV9URVhUX0FOVElBTElBU19NT0RFX0NMRUFSVFlQRSA6
IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9BTElBU0VEOwotICAgICAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+cmVuZGVyVGFyZ2V0KCktPlNldFRleHRBbnRpYWxpYXNNb2RlKGZvbnRTbW9vdGhpbmdN
b2RlKTsKLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkFscGhhQ2hhbmdlKSkgewotICAgICAgICBBU1NFUlQobV9zdGF0ZS5hbHBoYSA9PSBhbHBo
YSk7Ci0gICAgICAgIG1fZGF0YS0+c2V0QWxwaGEoYWxwaGEpOwotICAgIH0KLQotICAgIGlmIChm
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eUNoYW5nZSkpIHsKLSAgICAgICAgRDJEMV9JTlRFUlBPTEFUSU9OX01PREUgcXVhbGl0eSA9
IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7Ci0KLSAgICAgICAgc3dp
dGNoIChtb2RlKSB7Ci0gICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6
Ci0gICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9O
RUlHSEJPUjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVycG9sYXRpb25R
dWFsaXR5OjpEb05vdEludGVycG9sYXRlOgotICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5U
RVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgotICAgICAgICAgICAgcXVhbGl0
eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUjsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06Ci0gICAgICAgICAgICBx
dWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfQ1VCSUM7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKLSAgICAgICAgICAg
IHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ISUdIX1FVQUxJVFlfQ1VCSUM7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAvLyBGSVhNRTogU2V0SW50ZXJw
b2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCksIHF1YWxpdHkpOwotICAgIH0KLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkK
LXsKLSAgICBEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1Db250ZXh0KCksIGxpbWl0
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xlYXJSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xlYXJSZWN0KCpwbGF0Zm9ybUNvbnRl
eHQoKSwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN0cm9rZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17Ci0gICAgYXV0byYg
c3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250
ZXh0KCk7Ci0gICAgRGlyZWN0MkQ6OnN0cm9rZVJlY3QoY29udGV4dCwgcmVjdCwgbGluZVdpZHRo
LCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRMaW5l
Q2FwKExpbmVDYXAgY2FwKQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lQ2FwKCpwbGF0Zm9ybUNv
bnRleHQoKSwgY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAg
aWYgKGRhc2hPZmZzZXQgPCAwKSB7Ci0gICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAg
bGVuZ3RoICs9IHN0YXRpY19jYXN0PGZsb2F0PihkYXNoZXNbaV0pOwotICAgICAgICBpZiAobGVu
Z3RoKQotICAgICAgICAgICAgZGFzaE9mZnNldCA9IGZtb2QoZGFzaE9mZnNldCwgbGVuZ3RoKSAr
IGxlbmd0aDsKLSAgICB9Ci0KLSAgICBEaXJlY3QyRDo6c2V0TGluZURhc2goKnBsYXRmb3JtQ29u
dGV4dCgpLCBkYXNoZXMsIGRhc2hPZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQotewotICAgIERpcmVjdDJEOjpzZXRM
aW5lSm9pbigqcGxhdGZvcm1Db250ZXh0KCksIGpvaW4pOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgRGlyZWN0
MkQ6OnNjYWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZSk7Ci0gICAgLy8gRklYTUU6IG1fZGF0
YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyb3RhdGUoZmxvYXQgYW5nbGUpCi17Ci0g
ICAgRGlyZWN0MkQ6OnJvdGF0ZSgqcGxhdGZvcm1Db250ZXh0KCksIGFuZ2xlKTsKLSAgICAvLyBG
SVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0g
ZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnRyYW5zbGF0ZShmbG9h
dCB4LCBmbG9hdCB5KQotewotICAgIERpcmVjdDJEOjp0cmFuc2xhdGUoKnBsYXRmb3JtQ29udGV4
dCgpLCB4LCB5KTsKLSAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9y
bUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAg
ICBEaXJlY3QyRDo6Y29uY2F0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKLSAg
ICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50
aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBEaXJlY3QyRDo6U3RhdGU6
OnNldENUTSgqcGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7Ci0gICAgLy8gRklYTUU6IG1f
ZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwot
fQotCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmdldENUTShJbmNs
dWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAotewotICAgIHJldHVybiBEaXJlY3Qy
RDo6U3RhdGU6OmdldENUTSgqcGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi1GbG9hdFJlY3QgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQotewotICAgIHJldHVybiBEaXJlY3Qy
RDo6U3RhdGU6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdp
ZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSBz
dHJva2VTdHlsZSkKLXsKLSAgICBpZiAoIXdpZHRocy5zaXplKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIERpcmVjdDJEOjpkcmF3TGluZXNGb3JUZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcG9p
bnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgbV9zdGF0
ZS5zdHJva2VDb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldFVS
TEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0xheWVyQ29udGV4dCkKLXsKLSAgICAvLyBUaGlz
IGZ1bmN0aW9uIGlzIHByb2JhYmFseSBub3QgbmVlZGVkLgotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmlzQ0FMYXllckNvbnRleHQoKSBj
b25zdAotewotICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFiYWx5IG5vdCBuZWVkZWQuCi0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVy
YXRlZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIERp
cmVjdDJEOjpTdGF0ZTo6aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3JtQ29udGV4dCgpKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKLXsKLSAgICAvLyBUaGlzIGlzIGEgbm8tb3AgZm9y
IERpcmVjdDJELgotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRp
ZW50IHx8IG1fc3RhdGUuZmlsbFBhdHRlcm4pIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBiZSBhYmxlIHRvIGZpbGwgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMg
aW4gRDJELgotICAgICAgICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIERpcmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0
KCksIGVsbGlwc2UsIG1fc3RhdGUuZmlsbENvbG9yLCBtX3N0YXRlLnN0cm9rZVN0eWxlLCBtX3N0
YXRlLnN0cm9rZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxp
cHNlKQotewotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1fc3RhdGUuc3Ryb2tl
UGF0dGVybikgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gc3Ryb2tl
IGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQyRC4KLSAgICAgICAg
c3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIERpcmVjdDJEOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1f
c3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3RhdGUuc3Ryb2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0dseXBocyhj
b25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVk
IGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRT
bW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZvbnRTbW9v
dGhpbmcpOwotICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKLSAgICBWZWN0b3I8dW5zaWdu
ZWQgc2hvcnQ+IGdseXBocyhudW1HbHlwaHMpOwotICAgIFZlY3RvcjxmbG9hdD4gaG9yaXpvbnRh
bEFkdmFuY2VzKG51bUdseXBocyk7Ci0gICAgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+IGds
eXBoT2Zmc2V0cyhudW1HbHlwaHMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bUdseXBoczsgKytpKSB7Ci0gICAgICAgIGlmIChpICsgZnJvbSA+PSBnbHlwaEJ1ZmZlci5hZHZh
bmNlc0NvdW50KCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBhdXRvIGFkdmFuY2Ug
PSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhpICsgZnJvbSk7Ci0gICAgICAgIGlmICghYWR2YW5jZSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGdseXBoc1tpXSA9IGdseXBoQnVmZmVy
LmdseXBoQXQoaSArIGZyb20pOwotICAgICAgICBob3Jpem9udGFsQWR2YW5jZXNbaV0gPSBhZHZh
bmNlLT53aWR0aCgpOwotICAgICAgICBnbHlwaE9mZnNldHNbaV0uYWR2YW5jZU9mZnNldCA9IGFk
dmFuY2UtPndpZHRoKCk7Ci0gICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hc2NlbmRlck9mZnNldCA9
IGFkdmFuY2UtPmhlaWdodCgpOwotICAgIH0KLQotICAgIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zm
c2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IGdy
YXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdHbHlwaHMobV9wbGF0
Zm9ybUNvbnRleHQsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQo
KSksIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwKLSAg
ICAgICAgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIGZvbnQsIHN5bnRoZXRp
Y0JvbGRPZmZzZXQsIGdseXBocywgaG9yaXpvbnRhbEFkdmFuY2VzLCBnbHlwaE9mZnNldHMsIHhP
ZmZzZXQsCi0gICAgICAgIHN0YXRlLnRleHREcmF3aW5nTW9kZSwgc3RhdGUuc3Ryb2tlVGhpY2tu
ZXNzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yKTsKLX0KLQotR3JhcGhp
Y3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKQot
ewotICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi0gICAgcmV0dXJuIENsaXBUb0RyYXdp
bmdDb21tYW5kc1Jlc3VsdDo6U3VjY2VzczsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCkKLXsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLmNvcHlJ
bWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byogY29udGV4dCA9ICZncmFwaGljc0NvbnRleHQoKTsKLSAgICBpZiAo
YXV0byBzdXJmYWNlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnRleHQp
KQotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotdm9p
ZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVy
JiwgY29uc3QgRmxvYXRSZWN0JikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgot
fQotI2VuZGlmCi0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNw
cAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsNjEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIK
LQotI2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQ09NUHRy
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQyZDFl
ZmZlY3RzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR3JhcGhpY3NDb250ZXh0R0xJbWFn
ZUV4dHJhY3Rvcjo6fkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IoKSA9IGRlZmF1bHQ7
Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgYm9v
bCBpZ25vcmVOYXRpdmVJbWFnZUFscGhhUHJlbXVsdGlwbGljYXRpb24pCi17Ci0gICAgaWYgKCFt
X2ltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xHTDo6cGFpbnRU
b0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgY29uc3QgSW50U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCi17Ci0gICAgaWYgKCFpbWFnZVBpeGVscyB8fCBpbWFnZVNpemUuaXNFbXB0eSgpIHx8
IGNhbnZhc1NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpICYmIFVTRShESVJFQ1QyRCkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKRGVsZXRlZDogc3ZuOmtleXdvcmRzCiMjIC0x
ICswLDAgIyMKLURhdGUgQXV0aG9yIElkIFJldmlzaW9uIEhlYWRVUkwKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZURpcmVjdDJELmgJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVE
aXJlY3QyRC5oCShub25leGlzdGVudCkKQEAgLTEsMTQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IkNPTVB0ci5oIgotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jaW5j
bHVkZSA8ZDJkMWVmZmVjdHMuaD4KLSNpbmNsdWRlIDxkMmQxaGVscGVyLmg+Ci0jaW5jbHVkZSA8
d2luZG93cy5oPgotI2luY2x1ZGUgPHd0Zi9UaW55TFJVQ2FjaGUuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUgewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIEdyYXBoaWNzQ29udGV4dDo6Qml0
bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwotICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZShzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+JiYsIEdyYXBoaWNz
Q29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwotICAgIH5HcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUoKTsKLQotICAgIHZvaWQgc3luY0NvbnRleHQoUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmKTsKLQotICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KTsKLSAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0KLSAgICB2b2lkIGNs
aXAoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBjbGlwKGNvbnN0IFBhdGgmKTsKLSAgICB2
b2lkIGNsaXAoSUQyRDFHZW9tZXRyeSopOwotCi0gICAgdm9pZCBiZWdpbkRyYXcoKTsKLSAgICB2
b2lkIGVuZERyYXcoKTsKLSAgICB2b2lkIGZsdXNoKCk7Ci0gICAgdm9pZCBzYXZlKCk7Ci0gICAg
dm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICB2b2lkIHJlc3RvcmUoKTsKLSAgICB2
b2lkIHJvdGF0ZShmbG9hdCk7Ci0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KTsKLSAg
ICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB2b2lkIHNldENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLQotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2Fw
KTsKLSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKTsKLSAgICB2b2lkIHNldFN0cm9rZVN0
eWxlKFN0cm9rZVN0eWxlKTsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpOwotICAgIHZv
aWQgc2V0RGFzaE9mZnNldChmbG9hdCk7Ci0gICAgdm9pZCBzZXRQYXR0ZXJuV2lkdGgoZmxvYXQp
OwotICAgIHZvaWQgc2V0UGF0dGVybk9mZnNldChmbG9hdCk7Ci0gICAgdm9pZCBzZXRTdHJva2VU
aGlja25lc3MoZmxvYXQpOwotICAgIHZvaWQgc2V0RGFzaGVzKGNvbnN0IERhc2hBcnJheSYpOwot
ICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQpOwotCi0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQm
IHBsYXRmb3JtQ29udGV4dCgpIHsgcmV0dXJuIG1fcGxhdGZvcm1Db250ZXh0OyB9Ci0gICAgSUQy
RDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCgpOwotCi0gICAgSERDIG1faGRjIHsgbnVsbHB0
ciB9OwotCi0gICAgZmxvYXQgY3VycmVudEdsb2JhbEFscGhhKCkgY29uc3Q7Ci0KLSAgICBEMkQx
X1NUUk9LRV9TVFlMRV9QUk9QRVJUSUVTIHN0cm9rZVN0eWxlUHJvcGVydGllcygpIGNvbnN0Owot
Ci1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4g
bV9vd25lZFBsYXRmb3JtQ29udGV4dDsKLSAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgbV9w
bGF0Zm9ybUNvbnRleHQ7Ci0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJp
bmdDb250ZXh0VHlwZSBtX3JlbmRlcmVyVHlwZTsKLQotICAgIHVuc2lnbmVkIGJlZ2luRHJhd0Nv
dW50IHsgMCB9OwotCi0gICAgZmxvYXQgbV9hbHBoYSB7IDEuMCB9OwotCi0gICAgZnJpZW5kIGNs
YXNzIEQyRENvbnRleHRTdGF0ZVNhdmVyOwotfTsKLQotY2xhc3MgRDJEQ29udGV4dFN0YXRlU2F2
ZXIgewotcHVibGljOgotICAgIEQyRENvbnRleHRTdGF0ZVNhdmVyKEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZSYgY29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCi0gICAg
ICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgICAgICwgbV9zYXZlQW5kUmVzdG9yZShzYXZl
QW5kUmVzdG9yZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAg
ICAgICAgbV9jb250ZXh0Lm1fcGxhdGZvcm1Db250ZXh0LnNhdmUoKTsKLSAgICB9Ci0KLSAgICB+
RDJEQ29udGV4dFN0YXRlU2F2ZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3Rv
cmUpCi0gICAgICAgICAgICBtX2NvbnRleHQubV9wbGF0Zm9ybUNvbnRleHQucmVzdG9yZSgpOwot
ICAgIH0KLQotICAgIHZvaWQgc2F2ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fc2F2ZUFu
ZFJlc3RvcmUpOwotICAgICAgICBtX2NvbnRleHQubV9wbGF0Zm9ybUNvbnRleHQuc2F2ZSgpOwot
ICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc3Rv
cmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUpOwotICAgICAgICBt
X2NvbnRleHQubV9wbGF0Zm9ybUNvbnRleHQucmVzdG9yZSgpOwotICAgICAgICBtX3NhdmVBbmRS
ZXN0b3JlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBkaWRTYXZlKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX3NhdmVBbmRSZXN0b3JlOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IG93bmVkUGxhdGZvcm1D
b250ZXh0OwotICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSYgbV9jb250ZXh0Owot
ICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZSB7IGZhbHNlIH07Ci19OwotCi19CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0V2luLmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDggKzI4LDYgQEAKIAogI2lmIFVTRShDRykKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGVDRy5oIgotI2VsaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCiAjZW5kaWYKIAogI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgpAQCAtNDAsNyArMzgsNiBAQAogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KIAotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB2b2lkIGZpbGxXaXRoQ2xlYXJDb2xvcihIQklUTUFQIGJp
dG1hcCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmgJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDYgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRD
Ry5oIgogI2RlZmluZSBHcmFwaGljc0NvbnRleHRXaW4gR3JhcGhpY3NDb250ZXh0Q0cKIAotI2Vs
aWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuaCIK
LSNkZWZpbmUgR3JhcGhpY3NDb250ZXh0V2luIEdyYXBoaWNzQ29udGV4dERpcmVjdDJECi0KICNl
bGlmIFVTRShDQUlSTykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NMYXllckRpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NMYXllckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJEaXJlY3QyRC5jcHAJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NMYXllckRpcmVjdDJELmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRl
ICJEaXNwbGF5TGlzdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJGYWN0b3J5LmgiCi0jaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1
ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgotI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLQotI2lmIENPTVBJTEVSKE1TVkMpCi0v
LyBTZWUgaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8xd2VhNXp3ZS5h
c3B4Ci0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMSkKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVJlZjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVhdGUoR3Jh
cGhpY3NMYXllckZhY3RvcnkqIGZhY3RvcnksIEdyYXBoaWNzTGF5ZXJDbGllbnQmIGNsaWVudCwg
VHlwZSBsYXllclR5cGUpCi17Ci0gICAgaWYgKGZhY3RvcnkpIHsKLSAgICAgICAgYXV0byBsYXll
ciA9IGZhY3RvcnktPmNyZWF0ZUdyYXBoaWNzTGF5ZXIobGF5ZXJUeXBlLCBjbGllbnQpOwotICAg
ICAgICBsYXllci0+aW5pdGlhbGl6ZShsYXllclR5cGUpOwotICAgICAgICByZXR1cm4gbGF5ZXI7
Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFJldHVybiBhIHJlYWwgRGlyZWN0MkQgZ3JhcGhpY3Mg
bGF5ZXIKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHcmFwaGljc0xheWVyRGlyZWN0MkQobGF5
ZXJUeXBlLCBjbGllbnQpKTsKLX0KLQotR3JhcGhpY3NMYXllckRpcmVjdDJEOjpHcmFwaGljc0xh
eWVyRGlyZWN0MkQoVHlwZSBsYXllclR5cGUsIEdyYXBoaWNzTGF5ZXJDbGllbnQmIGNsaWVudCkK
LSAgICA6IEdyYXBoaWNzTGF5ZXIobGF5ZXJUeXBlLCBjbGllbnQpCi17Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NMYXllckRpcmVjdDJEOjppbml0aWFsaXplKFR5cGUgbGF5ZXJUeXBlKQotewotfQotCi1H
cmFwaGljc0xheWVyRGlyZWN0MkQ6On5HcmFwaGljc0xheWVyRGlyZWN0MkQoKQotewotICAgIHdp
bGxCZURlc3Ryb3llZCgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJEaXJlY3QyRDo6c2V0TmVl
ZHNEaXNwbGF5KCkKLXsKLSAgICBpZiAoIWRyYXdzQ29udGVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJEaXJlY3Qy
RDo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgciwgU2hvdWxkQ2xpcFRv
TGF5ZXIgc2hvdWxkQ2xpcCkKLXsKLSAgICBpZiAoIWRyYXdzQ29udGVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzTGF5ZXJEaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGlyZWN0MkQuaAkocmV2aXNpb24gMjg3
ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5
ZXJEaXJlY3QyRC5oCShub25leGlzdGVudCkKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotCi0jaW5j
bHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgRGlzcGxheUxpc3QgewotY2xhc3MgRGlz
cGxheUxpc3Q7Ci19Ci0KLWNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7Ci1jbGFzcyBJbWFnZTsKLWNs
YXNzIFRyYW5zZm9ybVN0YXRlOwotCi1jbGFzcyBHcmFwaGljc0xheWVyRGlyZWN0MkQgOiBwdWJs
aWMgR3JhcGhpY3NMYXllciB7Ci1wdWJsaWM6Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNp
dCBHcmFwaGljc0xheWVyRGlyZWN0MkQoVHlwZSwgR3JhcGhpY3NMYXllckNsaWVudCYpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkdyYXBoaWNzTGF5ZXJEaXJlY3QyRCgpOwotCi1wcml2
YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5pdGlhbGl6ZShUeXBlKSBvdmVycmlkZTsK
LQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkgb3ZlcnJpZGU7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgU2hvdWxkQ2xpcFRvTGF5ZXIgPSBDbGlwVG9MYXllcikgb3ZlcnJpZGU7Ci0KLSAgICBi
b29sIGlzR3JhcGhpY3NMYXllckNBKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19H
UkFQSElDU0xBWUVSKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJEaXJlY3QyRCwgaXNHcmFwaGljc0xh
eWVyQ0EoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAkocmV2
aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDMyMyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgot
Ci0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRl
ICJDT01QdHIuaCIKLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCi0jaW5j
bHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxkMmQxXzEuaD4KLSNpbmNsdWRl
IDxtYXRoLmg+Ci0jaW5jbHVkZSA8d2luY29kZWMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kKTsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBJ
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKLXsKLSAgICBJbnRTaXplIGJhY2tlbmRTaXpl
ID0gY2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKLSAgICBpZiAo
YmFja2VuZFNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1
dG8qIHBsYXRmb3JtQ29udGV4dCA9IHRhcmdldENvbnRleHQgPyB0YXJnZXRDb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKSA6IG51bGxwdHI7Ci0gICAgYXV0byogcmVuZGVyVGFyZ2V0ID0gcGxhdGZv
cm1Db250ZXh0ID8gcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSA6IG51bGxwdHI7Ci0K
LSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgcmVuZGVyVGFyZ2V0ID0gR3JhcGhpY3ND
b250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBhdXRvIGJpdG1hcENvbnRleHQg
PSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0T2ZTaXplKHNpemUsIHJlbmRlclRh
cmdldCwgcmVzb2x1dGlvblNjYWxlKTsKLSAgICBpZiAoIWJpdG1hcENvbnRleHQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFBsYXRmb3JtSW1hZ2VQdHIgYml0bWFwOwotICAgIEhSRVNVTFQgaHIg
PSBiaXRtYXBDb250ZXh0LT5HZXRCaXRtYXAoJmJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQo
aHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHBsYXRmb3JtQ29udGV4dCA9IG1ha2VV
bmlxdWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+KGJpdG1hcENvbnRleHQuZ2V0KCksIFt0aGlz
XSgpIHsKLSAgICAgICAgbV9kYXRhLmxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOwotICAgIH0s
IFt0aGlzXSgpIHsKLSAgICAgICAgbV9kYXRhLm1hcmtCdWZmZXJPdXRPZlN5bmMoKTsKLSAgICB9
KTsKLQotICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ+
KHBsYXRmb3JtQ29udGV4dC5nZXQoKSwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdD
b250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZD4obmV3IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKHNpemUsIGJhY2tlbmRT
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUocGxhdGZvcm1Db250ZXh0
KSwgV1RGTW92ZShjb250ZXh0KSwgV1RGTW92ZShiaXRtYXApKSk7Ci19Ci0KLXN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKLXsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0
ZShzaXplLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOwotfQotCi1J
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIHN0
ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4mJiBwbGF0Zm9ybUNvbnRleHQs
IHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCwgUGxhdGZvcm1JbWFn
ZVB0ciYmIGJpdG1hcCkKLSAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBi
YWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQotICAgICwgbV9wbGF0Zm9y
bUNvbnRleHQoV1RGTW92ZShwbGF0Zm9ybUNvbnRleHQpKQotICAgICwgbV9jb250ZXh0KFdURk1v
dmUoY29udGV4dCkpCi0gICAgLCBtX2JpdG1hcChXVEZNb3ZlKGJpdG1hcCkpCi17Ci19Ci0KLUdy
YXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvbnRleHQoKSBjb25z
dAotewotICAgIHJldHVybiAqbV9jb250ZXh0OwotfQotCi12b2lkIEltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kOjpmbHVzaENvbnRleHQoKQotewotICAgIGNvbnRleHQoKS5mbHVzaCgpOwotfQot
Ci1SZWZQdHI8TmF0aXZlSW1hZ2U+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb3B5TmF0
aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgQ09N
UHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7Ci0gICAgSFJFU1VMVCBo
ciA9IGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50
ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGltYWdlOwotICAgIGhy
ID0gYml0bWFwVGFyZ2V0LT5HZXRCaXRtYXAoJmltYWdlKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVE
KGhyKSk7Ci0KLSAgICAvLyBGSVhNRTogbV9kYXRhLmRhdGEgaXMgbnVsbHB0ciBldmVuIHdoZW4g
YXNraW5nIHRvIGNvcHkgYmFja2luZyBzdG9yZSBsZWFkaW5nIHRvIHRlc3QgZmFpbHVyZXMuCi0g
ICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlICYmIG1fZGF0YS5kYXRhLmlz
RW1wdHkoKSkKLSAgICAgICAgY29weUJlaGF2aW9yID0gRG9udENvcHlCYWNraW5nU3RvcmU7Ci0K
LSAgICBDaGVja2VkU2l6ZSBudW1CeXRlcyA9IENoZWNrZWRVaW50MzIobV9kYXRhLmJhY2tpbmdT
dG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93OwotICAgIGlmIChudW1CeXRl
cy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGNv
cHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlKSB7Ci0gICAgICAgIEQyRDFfUkVDVF9VIGJh
Y2tpbmdTdG9yZURpbWVuc3Rpb25zID0gSW50UmVjdChJbnRQb2ludCgpLCBtX2RhdGEuYmFja2lu
Z1N0b3JlU2l6ZSk7Ci0gICAgICAgIGltYWdlLT5Db3B5RnJvbU1lbW9yeSgmYmFja2luZ1N0b3Jl
RGltZW5zdGlvbnMsIG1fZGF0YS5kYXRhLmRhdGEoKSwgMzIpOwotCi0gICAgfQotCi0gICAgcmV0
dXJuIE5hdGl2ZUltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOwotfQotCi1zdGF0aWMgUGxh
dGZvcm1JbWFnZVB0ciBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShJRDJEMUJpdG1hcFJl
bmRlclRhcmdldCogYml0bWFwVGFyZ2V0LCBJRDJEMUJpdG1hcCogaW1hZ2UsIGNvbnN0IEludFNp
emUmIGJvdW5kcykKLXsKLSAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gaW1hZ2UgPyBuYXRpdmVJ
bWFnZVNpemUoaW1hZ2UpIDogRmxvYXRTaXplKCk7Ci0KLSAgICBpZiAoaW1hZ2UgJiYgKHN0YXRp
Y19jYXN0PHNpemVfdD4oaW1hZ2VTaXplLndpZHRoKCkpICE9IHN0YXRpY19jYXN0PHNpemVfdD4o
Ym91bmRzLndpZHRoKCkpIHx8IHN0YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VTaXplLmhlaWdodCgp
KSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKSB7Ci0gICAgICAgIENP
TVB0cjxJRDJEMUJpdG1hcD4gY3JvcHBlZEJpdG1hcCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXAo
Yml0bWFwVGFyZ2V0LCBib3VuZHMpOwotICAgICAgICBpZiAoY3JvcHBlZEJpdG1hcCkgewotICAg
ICAgICAgICAgYXV0byBzb3VyY2VSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwgYm91bmRzLndpZHRo
KCksIGJvdW5kcy5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBIUkVTVUxUIGhyID0gY3JvcHBlZEJp
dG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgaW1hZ2UsICZzb3VyY2VSZWN0KTsKLSAgICAg
ICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgICAgIHJldHVybiBjcm9wcGVk
Qml0bWFwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi1zdGF0
aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKElE
MkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQsIENPTVB0cjxJRDJEMUJpdG1hcD4m
JiBpbWFnZSwgSW50U2l6ZSBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJl
c2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBpZiAocmVzb2x1dGlv
blNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKQotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGJpdG1h
cFRhcmdldCwgaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBzY2FsZWQgdmVyc2lvbgotICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIH0KLQotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkp
OwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb3B5SW1h
Z2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgUGxhdGZvcm1JbWFnZVB0ciBpbWFnZTsKLSAg
ICBpZiAocmVzb2x1dGlvblNjYWxlKCkgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJl
c2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNv
cHlCZWhhdmlvciktPnBsYXRmb3JtSW1hZ2UoKTsKLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0g
Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKS0+cGxhdGZvcm1JbWFnZSgpOwot
Ci0gICAgYXV0byBiaXRtYXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PElEMkQxQml0bWFwUmVu
ZGVyVGFyZ2V0Kj4oY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICByZXR1cm4gY3Jl
YXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJnZXQsIFdURk1vdmUo
aW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgcmVzb2x1dGlvblNjYWxlKCksIHByZXNlcnZlUmVzb2x1
dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnNp
bmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAg
ICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldDsKLSAgICBIUkVT
VUxUIGhyID0gY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+UXVl
cnlJbnRlcmZhY2UoJmJpdG1hcFRhcmdldCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFBsYXRmb3JtSW1hZ2VQdHIgaW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpLT5wbGF0Zm9ybUltYWdlKCk7Ci0gICAg
cmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0
LmdldCgpLCBXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCksIHJlc29sdXRpb25TY2FsZSgp
LCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1QbGF0Zm9ybUltYWdlUHRyIEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kOjpjb21wYXRpYmxlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5k
ZXJUYXJnZXQpCi17Ci0gICAgbG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCk7Ci0KLSAgICBpZiAo
IXJlbmRlclRhcmdldCkKLSAgICAgICAgcmV0dXJuIGJpdG1hcDsKLQotICAgIGlmIChtX3BsYXRm
b3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkgPT0gcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIENP
TVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0KFF1ZXJ5LCByZW5kZXJU
YXJnZXQpOwotICAgICAgICBpZiAoYml0bWFwVGFyZ2V0KSB7Ci0gICAgICAgICAgICBDT01QdHI8
SUQyRDFCaXRtYXA+IGJhY2tpbmdCaXRtYXA7Ci0gICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGJp
dG1hcFRhcmdldC0+R2V0Qml0bWFwKCZiYWNraW5nQml0bWFwKSkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoYmFja2luZ0JpdG1hcCAhPSBtX2JpdG1hcCkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGJpdG1hcDsKLQotICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGRyYXcgYW4gSUQyRDFC
aXRtYXAgdG8gaXRzZWxmLiBNdXN0IHJldHVybiBhIGNvcHkuCi0gICAgICAgICAgICAgICAgQ09N
UHRyPElEMkQxQml0bWFwPiBjb3BpZWRCaXRtYXA7Ci0gICAgICAgICAgICAgICAgaWYgKFNVQ0NF
RURFRChyZW5kZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBE
aXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpLCAmY29waWVkQml0bWFwKSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChjb3BpZWRCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51
bGxwdHIsIG1fYml0bWFwLmdldCgpLCBudWxscHRyKSkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gY29waWVkQml0bWFwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gc2l6ZSA9IG1fYml0bWFwLT5HZXRQaXhlbFNp
emUoKTsKLSAgICBBU1NFUlQoc2l6ZS5oZWlnaHQgJiYgc2l6ZS53aWR0aCk7Ci0KLSAgICBDaGVj
a2VkVWludDMyIG51bUJ5dGVzID0gc2l6ZS53aWR0aCAqIHNpemUuaGVpZ2h0ICogNDsKLSAgICBp
ZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIC8vIENvcHkgdGhlIGJpdHMgZnJvbSBjdXJyZW50IHJlbmRlclRhcmdldCB0byB0aGUgb3V0
cHV0IHRhcmdldC4KLSAgICAvLyBXZSBjYW5ub3QgYWNjZXNzIHRoZSBkYXRhIGJhY2tpbmcgYW4g
SVdJQ0JpdG1hcCB3aGlsZSBhbiBhY3RpdmUgZHJhdyBzZXNzaW9uIGlzIG9wZW4uCi0gICAgY29u
dGV4dC0+ZW5kRHJhdygpOwotCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gc291cmNl
RGV2aWNlQ29udGV4dCA9IG1fcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7Ci0gICAg
aWYgKCFzb3VyY2VEZXZpY2VDb250ZXh0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IENPTVB0cjxJRDJEMUJpdG1hcDE+IHNvdXJjZUNQVUJpdG1hcDsKLSAgICBEMkQxX0JJVE1BUF9Q
Uk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJE
MV9CSVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RS
QVcsIERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKLSAgICBIUkVTVUxUIGhyID0gc291cmNlRGV2
aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKG1fYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgbnVsbHB0
ciwgYnl0ZXNQZXJSb3csIGJpdG1hcFByb3BlcnRpZXMsICZzb3VyY2VDUFVCaXRtYXApOwotICAg
IGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAo
IXNvdXJjZUNQVUJpdG1hcCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBociA9IHNv
dXJjZUNQVUJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgbV9iaXRtYXAuZ2V0KCksIG51
bGxwdHIpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBlZFNvdXJjZURhdGE7Ci0gICAgaHIgPSBzb3Vy
Y2VDUFVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZtYXBwZWRTb3VyY2VEYXRh
KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gdGFyZ2V0RGV2aWNlQ29udGV4dDsKLSAgICBo
ciA9IHJlbmRlclRhcmdldC0+UXVlcnlJbnRlcmZhY2UoJnRhcmdldERldmljZUNvbnRleHQpOwot
ICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29t
cGF0aWJsZUJpdG1hcDsKLSAgICBociA9IHRhcmdldERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1h
cChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBtYXBwZWRTb3VyY2VEYXRhLmJpdHMsIG1hcHBlZFNv
dXJjZURhdGEucGl0Y2gsIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCksICZjb21wYXRpYmxl
Qml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPlVubWFwKCk7Ci0gICAgQVNTRVJUKFNVQ0NF
RURFRChocikpOwotCi0gICAgY29udGV4dC0+YmVnaW5EcmF3KCk7Ci0KLSAgICByZXR1cm4gY29t
cGF0aWJsZUJpdG1hcDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJh
dyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAg
IGFkanVzdGVkU3JjUmVjdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUoKSk7Ci0KLSAgICBhdXRvIGNv
bXBhdGlibGVCaXRtYXAgPSBjb21wYXRpYmxlQml0bWFwKGRlc3RDb250ZXh0LnBsYXRmb3JtQ29u
dGV4dCgpLT5yZW5kZXJUYXJnZXQoKSk7Ci0KLSAgICBGbG9hdFNpemUgY3VycmVudEltYWdlU2l6
ZSA9IG5hdGl2ZUltYWdlU2l6ZShjb21wYXRpYmxlQml0bWFwKTsKLSAgICBpZiAoY3VycmVudElt
YWdlU2l6ZS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGVzdENvbnRleHQuZHJh
d05hdGl2ZUltYWdlKGNvbXBhdGlibGVCaXRtYXAsIGN1cnJlbnRJbWFnZVNpemUsIGRlc3RSZWN0
LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAg
YWRqdXN0ZWRTcmNSZWN0LnNjYWxlKHJlc29sdXRpb25TY2FsZSgpKTsKLQotICAgIGlmIChhdXRv
IGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tp
bmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgaW1hZ2UtPmRyYXdQYXR0
ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQ6OmNsaXBUb01hc2soR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmLCBzdGQ6Om9wdGlvbmFsPGRvdWJs
ZT4sIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiB7IH07Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYg
b3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZm
ZXIob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBudWxscHRyKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVs
QnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVy
LCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG51bGxwdHIpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKERJUkVDVDJEKQot
Ci0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxv
Yy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7Ci0gICAgV1RGX01BS0VfSVNPX0FM
TE9DQVRFRChJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCk7Ci0gICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQpOwotcHVibGljOgotICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IGNyZWF0ZShjb25zdCBG
bG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RX
aW5kb3cqKTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7
Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2
b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlOwotCi0gICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBj
b3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0
IG92ZXJyaWRlOwotICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHks
IFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBSZWZQdHI8SW1hZ2U+
IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
Y2xpcFRvTWFzayhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KSBv
dmVycmlkZTsKLQotICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
c3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAg
ICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1
ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7Ci0KLXByb3RlY3RlZDoKLSAgICBJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRT
aXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSk7Ci0K
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IG1fcGxhdGZvcm1D
b250ZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsK
LSAgICBQbGF0Zm9ybUltYWdlUHRyIG1fYml0bWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0
MkQuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsMzAz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5o
IgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgIkludFBvaW50LmgiCi0jaW5j
bHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPFdpbkNvZGVj
Lmg+Ci0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUltYWdlRGVjb2RlckRpcmVjdDJEOjpJbWFnZURlY29k
ZXJEaXJlY3QyRCgpCi17Ci19Ci0KLUlXSUNJbWFnaW5nRmFjdG9yeTIqIEltYWdlRGVjb2RlckRp
cmVjdDJEOjpzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpCi17Ci0gICAgc3RhdGljIElXSUNJbWFnaW5n
RmFjdG9yeTIqIHdpY0ltYWdpbmdGYWN0b3J5ID0gbnVsbHB0cjsKLSAgICBpZiAoIXdpY0ltYWdp
bmdGYWN0b3J5KSB7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBDb0NyZWF0ZUluc3RhbmNlKENMU0lE
X1dJQ0ltYWdpbmdGYWN0b3J5LCBudWxscHRyLCBDTFNDVFhfSU5QUk9DX1NFUlZFUiwgSUlEX0lX
SUNJbWFnaW5nRmFjdG9yeTIsIChMUFZPSUQqKSZ3aWNJbWFnaW5nRmFjdG9yeSk7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIH0KLQotICAgIHJldHVybiB3aWNJ
bWFnaW5nRmFjdG9yeTsKLX0KLQotc2l6ZV90IEltYWdlRGVjb2RlckRpcmVjdDJEOjpieXRlc0Rl
Y29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKSBjb25zdAotewotICAgIC8vIFNldCB0byBtYXRj
aCB2YWx1ZSB1c2VkIGZvciBDb3JlR3JhcGhpY3MuCi0gICAgcmV0dXJuIDEzMDg4OwotfQotCi1T
dHJpbmcgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBJ
bWFnZURlY29kZXJEaXJlY3QyRDo6aXNTaXplQXZhaWxhYmxlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9uYXRpdmVEZWNvZGVyID8gdHJ1ZSA6IGZhbHNlOwotfQotCi1FbmNvZGVkRGF0YVN0YXR1
cyBJbWFnZURlY29kZXJEaXJlY3QyRDo6ZW5jb2RlZERhdGFTdGF0dXMoKSBjb25zdAotewotICAg
IGlmICghbV9uYXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4gRW5jb2RlZERhdGFTdGF0dXM6
OkVycm9yOwotCi0gICAgLy8gRklYTUU6IEhvb2sgaW50byBXSUMgZGVjb2RlciAoaWYgYXN5bmMg
ZGVjb2RlIGlzIGV2ZW4gcG9zc2libGUpCi0gICAgcmV0dXJuIEVuY29kZWREYXRhU3RhdHVzOjpD
b21wbGV0ZTsKLX0KLQotSW50U2l6ZSBJbWFnZURlY29kZXJEaXJlY3QyRDo6c2l6ZSgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX25hdGl2ZURlY29kZXIpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7
Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2RlPiBmcmFtZTsKLSAgICBIUkVTVUxU
IGhyID0gbV9uYXRpdmVEZWNvZGVyLT5HZXRGcmFtZSgwLCAmZnJhbWUpOwotICAgIGlmICghU1VD
Q0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIFVJTlQgd2lkdGgs
IGhlaWdodDsKLSAgICBociA9IGZyYW1lLT5HZXRTaXplKCZ3aWR0aCwgJmhlaWdodCk7Ci0gICAg
aWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgcmV0
dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7Ci19Ci0KLXNpemVfdCBJbWFnZURlY29kZXJEaXJl
Y3QyRDo6ZnJhbWVDb3VudCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX25hdGl2ZURlY29kZXIpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgVUlOVCBjb3VudDsKLSAgICBIUkVTVUxUIGhyID0gbV9u
YXRpdmVEZWNvZGVyLT5HZXRGcmFtZUNvdW50KCZjb3VudCk7Ci0gICAgaWYgKCFTVUNDRUVERUQo
aHIpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotUmVwZXRp
dGlvbkNvdW50IEltYWdlRGVjb2RlckRpcmVjdDJEOjpyZXBldGl0aW9uQ291bnQoKSBjb25zdAot
ewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4gUmVwZXRpdGlvbkNv
dW50Tm9uZTsKLQotICAgIC8vIEZJWE1FOiBJZGVudGlmeSBpbWFnZSB0eXBlLCBhbmQgZGV0ZXJt
aW5lIHByb3BlciByZXBldGl0aW9uIGNvdW50LgotICAgIHJldHVybiBSZXBldGl0aW9uQ291bnRO
b25lOwotfQotCi1zdGQ6Om9wdGlvbmFsPEludFBvaW50PiBJbWFnZURlY29kZXJEaXJlY3QyRDo6
aG90U3BvdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQotSW50U2l6
ZSBJbWFnZURlY29kZXJEaXJlY3QyRDo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgsIFN1
YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbmF0
aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIENPTVB0cjxJV0lD
Qml0bWFwRnJhbWVEZWNvZGU+IGZyYW1lOwotICAgIEhSRVNVTFQgaHIgPSBtX25hdGl2ZURlY29k
ZXItPkdldEZyYW1lKGluZGV4LCAmZnJhbWUpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAg
ICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIFVJTlQgd2lkdGgsIGhlaWdodDsKLSAgICBo
ciA9IGZyYW1lLT5HZXRTaXplKCZ3aWR0aCwgJmhlaWdodCk7Ci0gICAgaWYgKCFTVUNDRUVERUQo
aHIpKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgcmV0dXJuIEludFNpemUod2lk
dGgsIGhlaWdodCk7Ci19Ci0KLWJvb2wgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmZyYW1lSXNDb21w
bGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAotewotICAgIGlmICghbV9uYXRpdmVEZWNv
ZGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1l
RGVjb2RlPiBmcmFtZTsKLSAgICBIUkVTVUxUIGhyID0gbV9uYXRpdmVEZWNvZGVyLT5HZXRGcmFt
ZShpbmRleCwgJmZyYW1lKTsKLSAgICByZXR1cm4gU1VDQ0VFREVEKGhyKTsKLX0KLUltYWdlRGVj
b2Rlcjo6RnJhbWVNZXRhZGF0YSBJbWFnZURlY29kZXJEaXJlY3QyRDo6ZnJhbWVNZXRhZGF0YUF0
SW5kZXgoc2l6ZV90KSBjb25zdCBmaW5hbDsKLXsKLSAgICBpZiAoIW1fbmF0aXZlRGVjb2RlcikK
LSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIENPTVB0cjxJV0lDQml0bWFwRnJhbWVEZWNvZGU+
IGZyYW1lOwotICAgIEhSRVNVTFQgaHIgPSBtX25hdGl2ZURlY29kZXItPkdldEZyYW1lKGluZGV4
LCAmZnJhbWUpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIHsgfTsK
LQotICAgIENPTVB0cjxJV0lDTWV0YWRhdGFRdWVyeVJlYWRlcj4gbWV0YWRhdGE7Ci0gICAgaHIg
PSBmcmFtZS0+R2V0TWV0YWRhdGFRdWVyeVJlYWRlcigmbWV0YWRhdGEpOwotICAgIGlmICghU1VD
Q0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFBST1BWQVJJQU5UIHZhbHVl
OwotICAgIFByb3BWYXJpYW50SW5pdCgmdmFsdWUpOwotICAgIGhyID0gbWV0YWRhdGEtPkdldE1l
dGFkYXRhQnlOYW1lKEwiU3lzdGVtLlBob3RvLk9yaWVudGF0aW9uIiwgJnZhbHVlKTsKLSAgICBp
ZiAoU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIHsgSW1hZ2VPcmllbnRhdGlvbihzdGF0
aWNfY2FzdDxJbWFnZU9yaWVudGF0aW9uOjpPcmllbnRhdGlvbj4odmFsdWUudWlWYWwpKSwgc3Rk
OjpudWxsb3B0IH07Ci0KLSAgICByZXR1cm4geyB9OwotfQotCi1TZWNvbmRzIEltYWdlRGVjb2Rl
ckRpcmVjdDJEOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX25hdGl2ZURlY29kZXIpCi0gICAgICAgIHJldHVybiBTZWNvbmRzKDApOwotCi0g
ICAgQ09NUHRyPElXSUNCaXRtYXBGcmFtZURlY29kZT4gZnJhbWU7Ci0gICAgSFJFU1VMVCBociA9
IG1fbmF0aXZlRGVjb2Rlci0+R2V0RnJhbWUoaW5kZXgsICZmcmFtZSk7Ci0gICAgaWYgKCFTVUND
RUVERUQoaHIpKQotICAgICAgICByZXR1cm4gU2Vjb25kcygwKTsKLQotICAgIC8vIEZJWE1FOiBG
aWd1cmUgb3V0IGNvcnJlY3QgaW1hZ2UgZm9ybWF0LXNwZWNpZmljIHF1ZXJ5IGZvciBmcmFtZSBk
dXJhdGlvbiBjaGVjay4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTZWNvbmRz
KDApOwotfQotCi1ib29sIEltYWdlRGVjb2RlckRpcmVjdDJEOjpmcmFtZUFsbG93U3Vic2FtcGxp
bmdBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBJbWFnZURlY29kZXJEaXJlY3QyRDo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGlu
ZGV4KSBjb25zdAotewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2RlPiBmcmFtZTsKLSAgICBI
UkVTVUxUIGhyID0gbV9uYXRpdmVEZWNvZGVyLT5HZXRGcmFtZShpbmRleCwgJmZyYW1lKTsKLSAg
ICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENPTVB0
cjxJV0lDTWV0YWRhdGFRdWVyeVJlYWRlcj4gbWV0YWRhdGE7Ci0gICAgaHIgPSBmcmFtZS0+R2V0
TWV0YWRhdGFRdWVyeVJlYWRlcigmbWV0YWRhdGEpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1VJRCBjb250YWluZXJGb3JtYXQ7Ci0gICAg
aHIgPSBtZXRhZGF0YS0+R2V0Q29udGFpbmVyRm9ybWF0KCZjb250YWluZXJGb3JtYXQpOwotICAg
IGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKDo6
SXNFcXVhbEdVSUQoR1VJRF9Db250YWluZXJGb3JtYXRKcGVnLCBjb250YWluZXJGb3JtYXQpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdW5zaWduZWQg
SW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vi
c2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAotewotICAgIGlmICghbV9uYXRp
dmVEZWNvZGVyKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBmcmFtZVNpemVBdElu
ZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKS5hcmVhKCkgKiA0OwotfQotCi12b2lkIEltYWdl
RGVjb2RlckRpcmVjdDJEOjpzZXRUYXJnZXRDb250ZXh0KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5k
ZXJUYXJnZXQpCi17Ci0gICAgbV9yZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7Ci19Ci0KLVBs
YXRmb3JtSW1hZ2VQdHIgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmNyZWF0ZUZyYW1lSW1hZ2VBdElu
ZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBjb25z
dCBEZWNvZGluZ09wdGlvbnMmKQotewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVyKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghbV9yZW5kZXJUYXJnZXQpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgQ09NUHRyPElXSUNCaXRtYXBGcmFtZURlY29kZT4gZnJhbWU7
Ci0gICAgSFJFU1VMVCBociA9IG1fbmF0aXZlRGVjb2Rlci0+R2V0RnJhbWUoMCwgJmZyYW1lKTsK
LSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
Q09NUHRyPElXSUNGb3JtYXRDb252ZXJ0ZXI+IGNvbnZlcnRlcjsKLSAgICBociA9IHN5c3RlbUlt
YWdpbmdGYWN0b3J5KCktPkNyZWF0ZUZvcm1hdENvbnZlcnRlcigmY29udmVydGVyKTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaHIgPSBj
b252ZXJ0ZXItPkluaXRpYWxpemUoZnJhbWUuZ2V0KCksIEdVSURfV0lDUGl4ZWxGb3JtYXQzMmJw
cFBSR0JBLCBXSUNCaXRtYXBEaXRoZXJUeXBlTm9uZSwgbnVsbHB0ciwgMC5mLCBXSUNCaXRtYXBQ
YWxldHRlVHlwZUN1c3RvbSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJV0lDQml0bWFwPiB3aWNCaXRtYXA7Ci0gICAgaHIg
PSBzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVCaXRtYXBGcm9tU291cmNlKGNvbnZlcnRl
ci5nZXQoKSwgV0lDQml0bWFwQ2FjaGVPbkRlbWFuZCwgJndpY0JpdG1hcCk7Ci0gICAgaWYgKCFT
VUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJRDJE
MUJpdG1hcD4gYml0bWFwOwotICAgIGhyID0gbV9yZW5kZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcEZy
b21XaWNCaXRtYXAod2ljQml0bWFwLmdldCgpLCAmYml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURF
RChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGJpdG1hcDsKLX0K
LQotdm9pZCBJbWFnZURlY29kZXJEaXJlY3QyRDo6c2V0RGF0YShGcmFnbWVudGVkU2hhcmVkQnVm
ZmVyJiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSAgICBpZiAoIWFsbERhdGFSZWNl
aXZlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElXSUNTdHJlYW0+IHN0cmVhbTsK
LSAgICBIUkVTVUxUIGhyID0gc3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlU3RyZWFtKCZz
dHJlYW0pOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Y2hhciogZGF0YVB0ciA9IGNvbnN0X2Nhc3Q8Y2hhcio+KGRhdGEuZGF0YSgpKTsKLSAgICBociA9
IHN0cmVhbS0+SW5pdGlhbGl6ZUZyb21NZW1vcnkocmVpbnRlcnByZXRfY2FzdDxCWVRFKj4oZGF0
YVB0ciksIGRhdGEuc2l6ZSgpKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fbmF0aXZlRGVjb2RlciA9IG51bGxwdHI7Ci0KLSAgICBociA9IHN5c3Rl
bUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZURlY29kZXJGcm9tU3RyZWFtKHN0cmVhbS5nZXQoKSwg
bnVsbHB0ciwgV0lDRGVjb2RlTWV0YWRhdGFDYWNoZU9uRGVtYW5kLCAmbV9uYXRpdmVEZWNvZGVy
KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpIHsKLSAgICAgICAgbV9uYXRpdmVEZWNvZGVyID0g
bnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEltYWdlIHdhcyB2YWxp
ZC4KLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCShyZXZpc2lv
biAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VE
ZWNvZGVyRGlyZWN0MkQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDkyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiSW1h
Z2VEZWNvZGVyLmgiCi0KLWludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLWludGVyZmFjZSBJ
V0lDQml0bWFwRGVjb2RlcjsKLWludGVyZmFjZSBJV0lDSW1hZ2luZ0ZhY3RvcnkyOwotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEltYWdlRGVjb2RlckRpcmVjdDJEIGZpbmFsIDogcHVi
bGljIEltYWdlRGVjb2RlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
Ci0gICAgSW1hZ2VEZWNvZGVyRGlyZWN0MkQoKTsKLQotICAgIHN0YXRpYyBSZWY8SW1hZ2VEZWNv
ZGVyRGlyZWN0MkQ+IGNyZWF0ZShGcmFnbWVudGVkU2hhcmVkQnVmZmVyJiwgQWxwaGFPcHRpb24s
IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSW1hZ2VEZWNvZGVyRGlyZWN0MkQoKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJv
b2wgc3VwcG9ydHNNZWRpYVR5cGUoTWVkaWFUeXBlIHR5cGUpIHsgcmV0dXJuIHR5cGUgPT0gTWVk
aWFUeXBlOjpJbWFnZTsgfQotCi0gICAgc2l6ZV90IGJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJv
cGVydGllcygpIGNvbnN0IGZpbmFsOwotCi0gICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkg
Y29uc3QgZmluYWw7Ci0gICAgRW5jb2RlZERhdGFTdGF0dXMgZW5jb2RlZERhdGFTdGF0dXMoKSBj
b25zdCBmaW5hbDsKLSAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0IGZpbmFsOwotCi0g
ICAgLy8gQWx3YXlzIG9yaWdpbmFsIHNpemUsIHdpdGhvdXQgc3Vic2FtcGxpbmcuCi0gICAgSW50
U2l6ZSBzaXplKCkgY29uc3QgZmluYWw7Ci0gICAgc2l6ZV90IGZyYW1lQ291bnQoKSBjb25zdCBm
aW5hbDsKLQotICAgIFJlcGV0aXRpb25Db3VudCByZXBldGl0aW9uQ291bnQoKSBjb25zdCBmaW5h
bDsKLSAgICBzdGQ6Om9wdGlvbmFsPEludFBvaW50PiBob3RTcG90KCkgY29uc3QgZmluYWw7Ci0K
LSAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0g
U3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBmcmFtZUlz
Q29tcGxldGVBdEluZGV4KHNpemVfdCkgY29uc3QgZmluYWw7Ci0gICAgSW1hZ2VEZWNvZGVyOjpG
cmFtZU1ldGFkYXRhIGZyYW1lTWV0YWRhdGFBdEluZGV4KHNpemVfdCkgY29uc3QgZmluYWw7Ci0K
LSAgICBTZWNvbmRzIGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCkgY29uc3QgZmluYWw7Ci0g
ICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QpIGNvbnN0IGZpbmFsOwotICAgIGJv
b2wgZnJhbWVBbGxvd1N1YnNhbXBsaW5nQXRJbmRleChzaXplX3QpIGNvbnN0IGZpbmFsOwotICAg
IHVuc2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1
YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQpIGNvbnN0IGZpbmFsOwotCi0gICAgUGxhdGZvcm1JbWFn
ZVB0ciBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBT
dWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0LCBjb25zdCBEZWNvZGluZ09wdGlvbnMmID0gRGVjb2Rp
bmdPcHRpb25zKERlY29kaW5nTW9kZTo6U3luY2hyb25vdXMpKSBmaW5hbDsKLQotICAgIHZvaWQg
c2V0RGF0YShGcmFnbWVudGVkU2hhcmVkQnVmZmVyJiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpIGZp
bmFsOwotICAgIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2lzQWxsRGF0YVJlY2VpdmVkOyB9Ci0gICAgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6
ZV90KSBmaW5hbCB7IH0KLQotICAgIHZvaWQgc2V0VGFyZ2V0Q29udGV4dChJRDJEMVJlbmRlclRh
cmdldCopOwotCi0gICAgc3RhdGljIElXSUNJbWFnaW5nRmFjdG9yeTIqIHN5c3RlbUltYWdpbmdG
YWN0b3J5KCk7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX2lzQWxsRGF0YVJlY2VpdmVkIHsgZmFs
c2UgfTsKLSAgICBtdXRhYmxlIEludFNpemUgbV9zaXplOwotICAgIENPTVB0cjxJV0lDQml0bWFw
RGVjb2Rlcj4gbV9uYXRpdmVEZWNvZGVyOwotICAgIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4g
bV9yZW5kZXJUYXJnZXQ7Ci19OwotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAkocmV2
aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDE4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNp
bmNsdWRlICJCaXRtYXBJbmZvLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSW1hZ2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5j
bHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotUmVmUHRyPEJpdG1hcEltYWdlPiBCaXRtYXBJbWFnZTo6Y3JlYXRlKEhCSVRNQVAg
aEJpdG1hcCkKLXsKLSAgICBESUJTRUNUSU9OIGRpYlNlY3Rpb247Ci0gICAgaWYgKCFHZXRPYmpl
Y3QoaEJpdG1hcCwgc2l6ZW9mKERJQlNFQ1RJT04pLCAmZGliU2VjdGlvbikpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgQVNTRVJUKGRpYlNlY3Rpb24uZHNCbS5ibUJpdHNQaXhlbCA9
PSAzMik7Ci0gICAgaWYgKGRpYlNlY3Rpb24uZHNCbS5ibUJpdHNQaXhlbCAhPSAzMikKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBBU1NFUlQoZGliU2VjdGlvbi5kc0JtLmJtQml0cyk7
Ci0gICAgaWYgKCFkaWJTZWN0aW9uLmRzQm0uYm1CaXRzKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQot
Ym9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQIGJtcCwgY29uc3QgSW50
U2l6ZSogc2l6ZSkKLXsKLSAgICBBU1NFUlQoYm1wKTsKLQotICAgIEJJVE1BUCBibXBJbmZvOwot
ICAgIEdldE9iamVjdChibXAsIHNpemVvZihCSVRNQVApLCAmYm1wSW5mbyk7Ci0KLSAgICBBU1NF
UlQoYm1wSW5mby5ibUJpdHNQaXhlbCA9PSAzMik7Ci0gICAgaW50IGJ1ZmZlclNpemUgPSBibXBJ
bmZvLmJtV2lkdGhCeXRlcyAqIGJtcEluZm8uYm1IZWlnaHQ7Ci0gICAgCi0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3
RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0JiBjdHh0LCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wKQotewotICAgIHNpemVfdCBmcmFtZXMgPSBmcmFtZUNvdW50KCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZXM7ICsraSkgewotICAgICAgICBhdXRvIGltYWdl
ID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCk7Ci0gICAgICAgIGF1dG8gaW1hZ2VTaXplID0g
bmF0aXZlSW1hZ2VTaXplKGltYWdlKTsKLSAgICAgICAgaWYgKGltYWdlICYmIGNsYW1wVG88aW50
PihpbWFnZVNpemUuaGVpZ2h0KCkpID09IHN0YXRpY19jYXN0PGludD4oc3JjU2l6ZS5oZWlnaHQo
KSkgJiYgY2xhbXBUbzxpbnQ+KGltYWdlU2l6ZS53aWR0aCgpKSA9PSBzdGF0aWNfY2FzdDxpbnQ+
KHNyY1NpemUud2lkdGgoKSkpIHsKLSAgICAgICAgICAgIHNpemVfdCBjdXJyZW50RnJhbWUgPSBt
X2N1cnJlbnRGcmFtZTsKLSAgICAgICAgICAgIG1fY3VycmVudEZyYW1lID0gaTsKLSAgICAgICAg
ICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIHNyY1NpemUud2lk
dGgoKSwgc3JjU2l6ZS5oZWlnaHQoKSksIHsgY29tcG9zaXRlT3AgfSk7Ci0gICAgICAgICAgICBt
X2N1cnJlbnRGcmFtZSA9IGN1cnJlbnRGcmFtZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8vIE5vIGltYWdlIG9mIHRoZSBjb3JyZWN0IHNpemUgd2FzIGZv
dW5kLCBmYWxsYmFjayB0byBkcmF3aW5nIHRoZSBjdXJyZW50IGZyYW1lCi0gICAgRmxvYXRTaXpl
IGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKCk7Ci0gICAgZHJhdyhjdHh0LCBkc3RSZWN0
LCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWln
aHQoKSksIHsgY29tcG9zaXRlT3AgfSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9OYXRpdmVJbWFnZURpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9OYXRpdmVJbWFnZURpcmVjdDJELmNwcAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5hdGl2ZUlt
YWdlLmgiCi0KLSNpbmNsdWRlICJEaXJlY3QyRE9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJHZW9t
ZXRyeVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8
d2luY29kZWMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgSVdJQ0ltYWdpbmdG
YWN0b3J5KiBpbWFnaW5nRmFjdG9yeSgpCi17Ci0gICAgc3RhdGljIElXSUNJbWFnaW5nRmFjdG9y
eSogaW1hZ2luZ0ZhY3RvcnkgPSBudWxscHRyOwotICAgIGlmICghaW1hZ2luZ0ZhY3RvcnkpIHsK
LSAgICAgICAgSFJFU1VMVCBociA9IENvQ3JlYXRlSW5zdGFuY2UoQ0xTSURfV0lDSW1hZ2luZ0Zh
Y3RvcnksIG51bGxwdHIsIENMU0NUWF9JTlBST0NfU0VSVkVSLCBJSURfUFBWX0FSR1MoJmltYWdp
bmdGYWN0b3J5KSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAg
IH0KLQotICAgIHJldHVybiBpbWFnaW5nRmFjdG9yeTsKLX0KLQotSW50U2l6ZSBOYXRpdmVJbWFn
ZTo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1JbWFnZS0+R2V0UGl4ZWxT
aXplKCk7Ci19Ci0KLWJvb2wgTmF0aXZlSW1hZ2U6Omhhc0FscGhhKCkgY29uc3QKLXsKLSAgICBE
MkQxX1BJWEVMX0ZPUk1BVCBwaXhlbEZvcm1hdCA9IG1fcGxhdGZvcm1JbWFnZS0+R2V0UGl4ZWxG
b3JtYXQoKTsKLSAgICByZXR1cm4gcGl4ZWxGb3JtYXQuYWxwaGFNb2RlICE9IEQyRDFfQUxQSEFf
TU9ERV9JR05PUkU7Ci19Ci0KLUNvbG9yIE5hdGl2ZUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29s
b3IoKSBjb25zdAotewotICAgIGlmIChzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSkKLSAgICAgICAg
cmV0dXJuIENvbG9yKCk7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBDb2xv
cigpOwotfQotCi1EZXN0aW5hdGlvbkNvbG9yU3BhY2UgTmF0aXZlSW1hZ2U6OmNvbG9yU3BhY2Uo
KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpOwotfQotCi12b2lkIE5hdGl2ZUltYWdlOjpjbGVhclN1YmltYWdl
cygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAJKHJl
dmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Q
YXRoRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsNjY3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlBhdGguaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkludFJl
Y3QuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29u
dGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBpbmxpbmUgSUQyRDFS
ZW5kZXJUYXJnZXQqIHNjcmF0Y2hSZW5kZXJUYXJnZXQoKQotewotICAgIHN0YXRpYyBDT01QdHI8
SUQyRDFSZW5kZXJUYXJnZXQ+IHJlbmRlclRhcmdldCA9IGFkb3B0Q09NKEdyYXBoaWNzQ29udGV4
dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpKTsKLSAgICByZXR1cm4gcmVuZGVyVGFyZ2V0LmdldCgp
OwotfQotCi1QYXRoIFBhdGg6OnBvbHlnb25QYXRoRnJvbVBvaW50cyhjb25zdCBWZWN0b3I8Rmxv
YXRQb2ludD4mIHBvaW50cykKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgaWYgKHBvaW50cy5zaXpl
KCkgPCAyKQotICAgICAgICByZXR1cm4gcGF0aDsKLQotICAgIFZlY3RvcjxEMkQxX1BPSU5UXzJG
LCAzMj4gZDJkUG9pbnRzOwotICAgIGQyZFBvaW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBv
aW50cy5zaXplKCkgLSAxKTsKLSAgICBmb3IgKGF1dG8gcG9pbnQgOiBwb2ludHMpCi0gICAgICAg
IGQyZFBvaW50cy51bmNoZWNrZWRBcHBlbmQocG9pbnQpOwotCi0gICAgcGF0aC5tb3ZlVG8ocG9p
bnRzLmZpcnN0KCkpOwotCi0gICAgQVNTRVJUKHBhdGgubV9hY3RpdmVQYXRoKTsKLQotICAgIHBh
dGgubV9hY3RpdmVQYXRoLT5BZGRMaW5lcyhkMmRQb2ludHMuZGF0YSgpLCBkMmRQb2ludHMuc2l6
ZSgpKTsKLSAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwotCi0gICAgcmV0dXJuIHBhdGg7Ci19Ci0K
LVBhdGg6OlBhdGgoKSA9IGRlZmF1bHQ7Ci0KLVBhdGg6On5QYXRoKCkKLXsKLSAgICBjbGVhckdl
b21ldHJpZXMoKTsKLX0KLQotUGxhdGZvcm1QYXRoUHRyIFBhdGg6OmVuc3VyZVBsYXRmb3JtUGF0
aCgpCi17Ci0gICAgaWYgKCFtX3BhdGgpIHsKLSAgICAgICAgSFJFU1VMVCBociA9IEdyYXBoaWNz
Q29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKEQyRDFfRklMTF9N
T0RFX1dJTkRJTkcsIG51bGxwdHIsIDAsICZtX3BhdGgpOwotICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKGhyKSk7Ci0gICAgICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIEFTU0VSVChyZWZDb3VudChtX3BhdGguZ2V0KCkpID09IDEpOwotICAg
IH0KLQotICAgIHJldHVybiBtX3BhdGguZ2V0KCk7Ci19Ci0KLXZvaWQgUGF0aDo6Y2xlYXJHZW9t
ZXRyaWVzKCkKLXsKLSAgICAvLyBNYW51YWxseSBjbGVhbiB0aGVzZSB1cCBzbyB0aGF0IHdlIGNh
biB1c2UgdGhpcyB2ZWN0b3Igd2l0aCBEaXJlY3QyRCBBUElzLgotICAgIGZvciAoYXV0byogZ2Vv
bWV0cnkgOiBtX2dlb21ldHJpZXMpCi0gICAgICAgIGdlb21ldHJ5LT5SZWxlYXNlKCk7Ci0gICAg
bV9nZW9tZXRyaWVzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgUGF0aDo6YXBwZW5kR2VvbWV0cnkoSUQy
RDFHZW9tZXRyeSogZ2VvbWV0cnkpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB1bnNpZ25l
ZCBiZWZvcmUgPSByZWZDb3VudChnZW9tZXRyeSk7Ci0jZW5kaWYKLQotICAgIHVuc2lnbmVkIGdl
b21ldHJ5Q291bnQgPSBtX3BhdGggPyBtX3BhdGgtPkdldFNvdXJjZUdlb21ldHJ5Q291bnQoKSA6
IDA7Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChtX2dlb21ldHJpZXMuc2l6ZSgpID09IGdlb21ldHJ5
Q291bnQpOwotCi0gICAgZ2VvbWV0cnktPkFkZFJlZigpOwotICAgIG1fZ2VvbWV0cmllcy5hcHBl
bmQoZ2VvbWV0cnkpOwotCi0gICAgYXV0byBmaWxsTW9kZSA9IG1fcGF0aCA/IG1fcGF0aC0+R2V0
RmlsbE1vZGUoKSA6IEQyRDFfRklMTF9NT0RFX1dJTkRJTkc7Ci0KLSAgICBtX3BhdGggPSBudWxs
cHRyOwotCi0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgp
LT5DcmVhdGVHZW9tZXRyeUdyb3VwKGZpbGxNb2RlLCBtX2dlb21ldHJpZXMuZGF0YSgpLCBtX2dl
b21ldHJpZXMuc2l6ZSgpLCAmbV9wYXRoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQo
aHIpKTsKLQotICAgIEFTU0VSVChyZWZDb3VudChnZW9tZXRyeSkgPT0gYmVmb3JlICsgMSk7Ci19
Ci0KLXZvaWQgUGF0aDo6Y3JlYXRlR2VvbWV0cnlXaXRoRmlsbE1vZGUoV2luZFJ1bGUgd2Via2l0
RmlsbE1vZGUsIENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+JiBwYXRoKSBjb25zdAotewotICAg
IFJFTEVBU0VfQVNTRVJUKG1fcGF0aCk7Ci0KLSAgICBhdXRvIGZpbGxNb2RlID0gKHdlYmtpdEZp
bGxNb2RlID09IFdpbmRSdWxlOjpFdmVuT2RkKSA/IEQyRDFfRklMTF9NT0RFX0FMVEVSTkFURSA6
IEQyRDFfRklMTF9NT0RFX1dJTkRJTkc7Ci0KLSAgICBpZiAoZmlsbE1vZGUgPT0gbV9wYXRoLT5H
ZXRGaWxsTW9kZSgpKSB7Ci0gICAgICAgIHBhdGggPSBtX3BhdGg7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBnZW9tZXRyeUNvdW50ID0gbV9wYXRoLT5HZXRTb3VyY2VH
ZW9tZXRyeUNvdW50KCk7Ci0KLSAgICBBU1NFUlQobV9nZW9tZXRyaWVzLnNpemUoKSA9PSBnZW9t
ZXRyeUNvdW50KTsKLQotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZh
Y3RvcnkoKS0+Q3JlYXRlR2VvbWV0cnlHcm91cChmaWxsTW9kZSwgY29uc3RfY2FzdDxJRDJEMUdl
b21ldHJ5Kio+KG1fZ2VvbWV0cmllcy5kYXRhKCkpLCBtX2dlb21ldHJpZXMuc2l6ZSgpLCAmcGF0
aCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgQVNTRVJUKHJlZkNv
dW50KHBhdGguZ2V0KCkpID09IDEpOwotfQotCi1QYXRoOjpQYXRoKGNvbnN0IFBhdGgmIG90aGVy
KQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdW5zaWduZWQgcGF0aENvdW50ID0gcmVmQ291
bnQob3RoZXIubV9wYXRoLmdldCgpKTsKLSAgICB1bnNpZ25lZCBhY3RpdmVQYXRoQ291bnQgPSBy
ZWZDb3VudChvdGhlci5tX2FjdGl2ZVBhdGguZ2V0KCkpOwotI2VuZGlmCi0gICAgbV9wYXRoID0g
b3RoZXIubV9wYXRoOwotICAgIG1fYWN0aXZlUGF0aCA9IG90aGVyLm1fYWN0aXZlUGF0aDsKLSAg
ICBtX2dlb21ldHJpZXMgPSBvdGhlci5tX2dlb21ldHJpZXM7Ci0gICAgZm9yIChhdXRvKiBnZW9t
ZXRyeSA6IG1fZ2VvbWV0cmllcykKLSAgICAgICAgZ2VvbWV0cnktPkFkZFJlZigpOwotCi0gICAg
QVNTRVJUKCFtX3BhdGggfHwgcmVmQ291bnQobV9wYXRoLmdldCgpKSA9PSBwYXRoQ291bnQgKyAx
KTsKLSAgICBBU1NFUlQoIW1fYWN0aXZlUGF0aCB8fCByZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0
KCkpID09IGFjdGl2ZVBhdGhDb3VudCArIDEpOwotfQotICAgIAotUGF0aDo6UGF0aChQYXRoJiYg
b3RoZXIpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB1bnNpZ25lZCBwYXRoQ291bnQgPSBy
ZWZDb3VudChvdGhlci5tX3BhdGguZ2V0KCkpOwotICAgIHVuc2lnbmVkIGFjdGl2ZVBhdGhDb3Vu
dCA9IHJlZkNvdW50KG90aGVyLm1fYWN0aXZlUGF0aC5nZXQoKSk7Ci0jZW5kaWYKLSAgICBtX3Bh
dGggPSBXVEZNb3ZlKG90aGVyLm1fcGF0aCk7Ci0gICAgbV9hY3RpdmVQYXRoID0gV1RGTW92ZShv
dGhlci5tX2FjdGl2ZVBhdGgpOwotICAgIG1fZ2VvbWV0cmllcyA9IFdURk1vdmUob3RoZXIubV9n
ZW9tZXRyaWVzKTsKLQotICAgIEFTU0VSVChyZWZDb3VudChtX3BhdGguZ2V0KCkpID09IHBhdGhD
b3VudCk7Ci0gICAgQVNTRVJUKHJlZkNvdW50KG1fYWN0aXZlUGF0aC5nZXQoKSkgPT0gYWN0aXZl
UGF0aENvdW50KTsKLX0KLQotUGF0aCYgUGF0aDo6b3BlcmF0b3I9KGNvbnN0IFBhdGgmIG90aGVy
KQotewotICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAgICAgICAgcmV0dXJuICp0aGlzOwotI2lm
IEFTU0VSVF9FTkFCTEVECi0gICAgdW5zaWduZWQgcGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIu
bV9wYXRoLmdldCgpKTsKLSAgICB1bnNpZ25lZCBhY3RpdmVQYXRoQ291bnQgPSByZWZDb3VudChv
dGhlci5tX2FjdGl2ZVBhdGguZ2V0KCkpOwotI2VuZGlmCi0gICAgbV9wYXRoID0gb3RoZXIubV9w
YXRoOwotICAgIG1fYWN0aXZlUGF0aCA9IG90aGVyLm1fYWN0aXZlUGF0aDsKLSAgICBtX2dlb21l
dHJpZXMgPSBvdGhlci5tX2dlb21ldHJpZXM7Ci0gICAgZm9yIChhdXRvKiBnZW9tZXRyeSA6IG1f
Z2VvbWV0cmllcykKLSAgICAgICAgZ2VvbWV0cnktPkFkZFJlZigpOwotCi0gICAgQVNTRVJUKCFt
X3BhdGggfHwgcmVmQ291bnQobV9wYXRoLmdldCgpKSA9PSBwYXRoQ291bnQgKyAxKTsKLSAgICBB
U1NFUlQoIW1fYWN0aXZlUGF0aCB8fCByZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0KCkpID09IGFj
dGl2ZVBhdGhDb3VudCArIDEpOwotCi0gICAgcmV0dXJuICp0aGlzOwotfQotCi1QYXRoJiBQYXRo
OjpvcGVyYXRvcj0oUGF0aCYmIG90aGVyKQotewotICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAg
ICAgICAgcmV0dXJuICp0aGlzOwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB1bnNpZ25lZCBw
YXRoQ291bnQgPSByZWZDb3VudChvdGhlci5tX3BhdGguZ2V0KCkpOwotICAgIHVuc2lnbmVkIGFj
dGl2ZVBhdGhDb3VudCA9IHJlZkNvdW50KG90aGVyLm1fYWN0aXZlUGF0aC5nZXQoKSk7Ci0jZW5k
aWYKLSAgICBtX3BhdGggPSBXVEZNb3ZlKG90aGVyLm1fcGF0aCk7Ci0gICAgbV9hY3RpdmVQYXRo
ID0gV1RGTW92ZShvdGhlci5tX2FjdGl2ZVBhdGgpOwotICAgIG1fZ2VvbWV0cmllcyA9IFdURk1v
dmUob3RoZXIubV9nZW9tZXRyaWVzKTsKLQotICAgIEFTU0VSVChyZWZDb3VudChtX3BhdGguZ2V0
KCkpID09IHBhdGhDb3VudCk7Ci0gICAgQVNTRVJUKHJlZkNvdW50KG1fYWN0aXZlUGF0aC5nZXQo
KSkgPT0gYWN0aXZlUGF0aENvdW50KTsKLQotICAgIHJldHVybiAqdGhpczsKLX0KLQotYm9vbCBQ
YXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29u
c3QKLXsKLSAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
ICghZmFzdEJvdW5kaW5nUmVjdCgpLmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgQk9PTCBjb250YWluczsKLSAgICBpZiAoIVNVQ0NFRURFRChtX3BhdGgtPkZp
bGxDb250YWluc1BvaW50KHBvaW50LCBudWxscHRyLCAmY29udGFpbnMpKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGNvbnRhaW5zOwotfQotCi1ib29sIFBhdGg6OnN0cm9r
ZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdy
YXBoaWNzQ29udGV4dCYpPiYgc3Ryb2tlU3R5bGVBcHBsaWVyKSBjb25zdAotewotICAgIEFTU0VS
VChzdHJva2VTdHlsZUFwcGxpZXIpOwotCi0gICAgaWYgKGlzTnVsbCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dEQy
RChzY3JhdGNoUmVuZGVyVGFyZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEIHNj
cmF0Y2hDb250ZXh0KCZzY3JhdGNoQ29udGV4dEQyRCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKLSAgICBzdHJva2VTdHlsZUFwcGxpZXIo
c2NyYXRjaENvbnRleHQpOwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB1bnNpZ25lZCBiZWZv
cmUgPSByZWZDb3VudChtX3BhdGguZ2V0KCkpOwotI2VuZGlmCi0KLSAgICBCT09MIGNvbnRhaW5z
UG9pbnQgPSBmYWxzZTsKLSAgICBIUkVTVUxUIGhyID0gbV9wYXRoLT5TdHJva2VDb250YWluc1Bv
aW50KHBvaW50LCBzY3JhdGNoQ29udGV4dC5zdHJva2VUaGlja25lc3MoKSwgc2NyYXRjaENvbnRl
eHQucGxhdGZvcm1TdHJva2VTdHlsZSgpLCBudWxscHRyLCAxLjBmLCAmY29udGFpbnNQb2ludCk7
Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBB
U1NFUlQocmVmQ291bnQobV9wYXRoLmdldCgpKSA9PSBiZWZvcmUpOwotICAgIHJldHVybiBjb250
YWluc1BvaW50OwotfQotCi12b2lkIFBhdGg6OmNsb3NlQW55T3Blbkdlb21ldHJpZXModW5zaWdu
ZWQgZmlndXJlRW5kU3R5bGUpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZmlndXJlSXNPcGVuZWQpIHsK
LSAgICAgICAgQVNTRVJUKG1fYWN0aXZlUGF0aCk7Ci0KLSAgICAgICAgYXV0byBlbmRTdHlsZSA9
IHN0YXRpY19jYXN0PEQyRDFfRklHVVJFX0VORD4oZmlndXJlRW5kU3R5bGUpOwotICAgICAgICBt
X2FjdGl2ZVBhdGgtPkVuZEZpZ3VyZShlbmRTdHlsZSk7Ci0gICAgICAgIG1fZmlndXJlSXNPcGVu
ZWQgPSBmYWxzZTsKLQotICAgICAgICBIUkVTVUxUIGhyID0gbV9hY3RpdmVQYXRoLT5DbG9zZSgp
OwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQotCi0gICAgbV9hY3RpdmVQ
YXRoID0gbnVsbHB0cjsKLX0KLQotdm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXpl
JiBzaXplKQotewotICAgIHRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7Ci19Ci0KLXZvaWQgUGF0aDo6dHJhbnNmb3JtKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIGlmICh0cmFuc2Zvcm0uaXNJ
ZGVudGl0eSgpIHx8IGlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fYWN0
aXZlUGF0aCkKLSAgICAgICAgY2xvc2VBbnlPcGVuR2VvbWV0cmllcyhEMkQxX0ZJR1VSRV9FTkRf
T1BFTik7Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHVuc2lnbmVkIGJlZm9yZSA9IHJlZkNv
dW50KG1fcGF0aC5nZXQoKSk7Ci0jZW5kaWYKLQotICAgIENPTVB0cjxJRDJEMVRyYW5zZm9ybWVk
R2VvbWV0cnk+IHRyYW5zZm9ybWVkUGF0aDsKLSAgICBpZiAoIVNVQ0NFRURFRChHcmFwaGljc0Nv
bnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlVHJhbnNmb3JtZWRHZW9tZXRyeShtX3BhdGgu
Z2V0KCksIHRyYW5zZm9ybSwgJnRyYW5zZm9ybWVkUGF0aCkpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBBU1NFUlQocmVmQ291bnQobV9wYXRoLmdldCgpKSA9PSBiZWZvcmUpOwotICAgIEFTU0VS
VChyZWZDb3VudCh0cmFuc2Zvcm1lZFBhdGguZ2V0KCkpID09IDEpOwotCi0gICAgYXV0byBmaWxs
TW9kZSA9IG1fcGF0aC0+R2V0RmlsbE1vZGUoKTsKLQotICAgIG1fcGF0aCA9IG51bGxwdHI7Ci0K
LSAgICBjbGVhckdlb21ldHJpZXMoKTsKLQotICAgIHRyYW5zZm9ybWVkUGF0aC0+QWRkUmVmKCk7
Ci0gICAgbV9nZW9tZXRyaWVzLmFwcGVuZCh0cmFuc2Zvcm1lZFBhdGguZ2V0KCkpOwotCi0gICAg
SFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVHZW9t
ZXRyeUdyb3VwKGZpbGxNb2RlLCBtX2dlb21ldHJpZXMuZGF0YSgpLCBtX2dlb21ldHJpZXMuc2l6
ZSgpLCAmbV9wYXRoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICBB
U1NFUlQocmVmQ291bnQobV9wYXRoLmdldCgpKSA9PSAxKTsKLX0KLQotRmxvYXRSZWN0IFBhdGg6
OmJvdW5kaW5nUmVjdFNsb3dDYXNlKCkgY29uc3QKLXsKLSAgICBEMkQxX1JFQ1RfRiBib3VuZHMg
PSB7IH07Ci0gICAgaWYgKCFTVUNDRUVERUQobV9wYXRoLT5HZXRCb3VuZHMobnVsbHB0ciwgJmJv
dW5kcykpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICByZXR1cm4gYm91bmRz
OwotfQotCi1GbG9hdFJlY3QgUGF0aDo6ZmFzdEJvdW5kaW5nUmVjdFNsb3dDYXNlKCkgY29uc3QK
LXsKLSAgICBEMkQxX1JFQ1RfRiBib3VuZHMgPSB7IH07Ci0gICAgaWYgKCFTVUNDRUVERUQobV9w
YXRoLT5HZXRCb3VuZHMobnVsbHB0ciwgJmJvdW5kcykpKQotICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7Ci0KLSAgICByZXR1cm4gYm91bmRzOwotfQotCi1GbG9hdFJlY3QgUGF0aDo6ZmFzdEJv
dW5kaW5nUmVjdEZvclN0cm9rZShjb25zdCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZv
cm1Db250ZXh0KSBjb25zdAotewotICAgIGlmIChpc051bGwoKSkKLSAgICAgICAgcmV0dXJuIEZs
b2F0UmVjdCgpOwotCi0gICAgZmxvYXQgdG9sZXJhbmNlID0gMTA7Ci0KLSAgICBhdXRvKiBzdHJv
a2VTdHlsZSA9IGNvbnN0X2Nhc3Q8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmPihwbGF0Zm9ybUNv
bnRleHQpLnN0cm9rZVN0eWxlKCk7Ci0KLSAgICBEMkQxX1JFQ1RfRiBib3VuZHMgPSB7IH07Ci0g
ICAgaWYgKCFTVUNDRUVERUQobV9wYXRoLT5HZXRXaWRlbmVkQm91bmRzKHBsYXRmb3JtQ29udGV4
dC5zdHJva2VUaGlja25lc3MoKSwgc3Ryb2tlU3R5bGUsIG51bGxwdHIsIHRvbGVyYW5jZSwgJmJv
dW5kcykpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICByZXR1cm4gYm91bmRz
OwotfQotCi1GbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KGNvbnN0IEZ1bmN0aW9u
PHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiBzdHJva2VTdHlsZUFwcGxpZXIpIGNvbnN0Ci17Ci0g
ICAgaWYgKGlzTnVsbCgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dEQyRChzY3JhdGNoUmVuZGVyVGFyZ2V0
KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hDb250ZXh0KCZzY3JhdGNo
Q29udGV4dEQyRCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6
R1BVTWVtb3J5KTsKLQotICAgIGlmIChzdHJva2VTdHlsZUFwcGxpZXIpCi0gICAgICAgIHN0cm9r
ZVN0eWxlQXBwbGllcihzY3JhdGNoQ29udGV4dCk7Ci0KLSAgICByZXR1cm4gZmFzdEJvdW5kaW5n
UmVjdEZvclN0cm9rZShzY3JhdGNoQ29udGV4dEQyRCk7Ci19Ci0KLXZvaWQgUGF0aDo6b3BlbkZp
Z3VyZUF0Q3VycmVudFBvaW50SWZOZWNlc3NhcnkoKQotewotICAgIGlmIChtX2ZpZ3VyZUlzT3Bl
bmVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fYWN0aXZlUGF0aCkgewotICAgICAg
ICBDT01QdHI8SUQyRDFQYXRoR2VvbWV0cnk+IGFjdGl2ZVBhdGhHZW9tZXRyeTsKLSAgICAgICAg
R3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVBhdGhHZW9tZXRyeSgmYWN0
aXZlUGF0aEdlb21ldHJ5KTsKLSAgICAgICAgSFJFU1VMVCBociA9IGFjdGl2ZVBhdGhHZW9tZXRy
eS0+T3BlbigmbV9hY3RpdmVQYXRoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7Ci0gICAgICAgIGFwcGVuZEdlb21ldHJ5KGFjdGl2ZVBhdGhHZW9tZXRyeS5sZWFrUmVm
KCkpOwotICAgICAgICBBU1NFUlQocmVmQ291bnQobV9hY3RpdmVQYXRoLmdldCgpKSA9PSAxKTsK
LSAgICB9Ci0KLSAgICBtX2FjdGl2ZVBhdGgtPlNldEZpbGxNb2RlKEQyRDFfRklMTF9NT0RFX1dJ
TkRJTkcpOwotICAgIG1fYWN0aXZlUGF0aC0+QmVnaW5GaWd1cmUoY3VycmVudFBvaW50KCksIEQy
RDFfRklHVVJFX0JFR0lOX0ZJTExFRCk7Ci0gICAgbV9maWd1cmVJc09wZW5lZCA9IHRydWU7Ci19
Ci0KLXZvaWQgUGF0aDo6bW92ZVRvU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCi17
Ci0gICAgaWYgKG1fYWN0aXZlUGF0aCkKLSAgICAgICAgY2xvc2VBbnlPcGVuR2VvbWV0cmllcyhE
MkQxX0ZJR1VSRV9FTkRfT1BFTik7Ci0KLSAgICBDT01QdHI8SUQyRDFQYXRoR2VvbWV0cnk+IGFj
dGl2ZVBhdGhHZW9tZXRyeTsKLSAgICBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+
Q3JlYXRlUGF0aEdlb21ldHJ5KCZhY3RpdmVQYXRoR2VvbWV0cnkpOwotCi0gICAgaWYgKCFTVUND
RUVERUQoYWN0aXZlUGF0aEdlb21ldHJ5LT5PcGVuKCZtX2FjdGl2ZVBhdGgpKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYXBwZW5kR2VvbWV0cnkoYWN0aXZlUGF0aEdlb21ldHJ5LmxlYWtSZWYo
KSk7Ci0KLSAgICBBU1NFUlQocmVmQ291bnQobV9hY3RpdmVQYXRoLmdldCgpKSA9PSAxKTsKLQot
ICAgIG1fYWN0aXZlUGF0aC0+U2V0RmlsbE1vZGUoRDJEMV9GSUxMX01PREVfV0lORElORyk7Ci0g
ICAgbV9hY3RpdmVQYXRoLT5CZWdpbkZpZ3VyZShwb2ludCwgRDJEMV9GSUdVUkVfQkVHSU5fRklM
TEVEKTsKLSAgICBtX2ZpZ3VyZUlzT3BlbmVkID0gdHJ1ZTsKLX0KLQotdm9pZCBQYXRoOjphZGRM
aW5lVG9TbG93Q2FzZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLXsKLSAgICBvcGVuRmlndXJl
QXRDdXJyZW50UG9pbnRJZk5lY2Vzc2FyeSgpOwotICAgIG1fYWN0aXZlUGF0aC0+QWRkTGluZShw
b2ludCk7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG9TbG93Q2FzZShjb25zdCBGbG9h
dFBvaW50JiBjcCwgY29uc3QgRmxvYXRQb2ludCYgcCkKLXsKLSAgICBvcGVuRmlndXJlQXRDdXJy
ZW50UG9pbnRJZk5lY2Vzc2FyeSgpOwotICAgIG1fYWN0aXZlUGF0aC0+QWRkUXVhZHJhdGljQmV6
aWVyKEQyRDE6OlF1YWRyYXRpY0JlemllclNlZ21lbnQoY3AsIHApKTsKLX0KLQotdm9pZCBQYXRo
OjphZGRCZXppZXJDdXJ2ZVRvU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYgY3AxLCBjb25zdCBG
bG9hdFBvaW50JiBjcDIsIGNvbnN0IEZsb2F0UG9pbnQmIHApCi17Ci0gICAgb3BlbkZpZ3VyZUF0
Q3VycmVudFBvaW50SWZOZWNlc3NhcnkoKTsKLSAgICBtX2FjdGl2ZVBhdGgtPkFkZEJlemllcihE
MkQxOjpCZXppZXJTZWdtZW50KGNwMSwgY3AyLCBwKSk7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkQXJj
VG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCByYWRp
dXMpCi17Ci0gICAgRmxvYXRQb2ludCBwMCA9IGN1cnJlbnRQb2ludCgpOwotCi0gICAgaWYgKHAx
ID09IHAwIHx8IHAxID09IHAyIHx8IFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChyYWRpdXMsIDAu
MGYpKQotICAgICAgICByZXR1cm4gYWRkTGluZVRvKHAxKTsKLQotICAgIGZsb2F0IGRpcmVjdGlv
biA9IChwMi54KCkgLSBwMS54KCkpICogKHAwLnkoKSAtIHAxLnkoKSkgKyAocDIueSgpIC0gcDEu
eSgpKSAqIChwMS54KCkgLSBwMC54KCkpOwotICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1
YWwoZGlyZWN0aW9uLCAwLjBmKSkKLSAgICAgICAgcmV0dXJuIGFkZExpbmVUbyhwMSk7Ci0KLSAg
ICBhdXRvIGEyID0gdG9GbG9hdFBvaW50KHAwIC0gcDEpLmxlbmd0aFNxdWFyZWQoKTsKLSAgICBh
dXRvIGIyID0gdG9GbG9hdFBvaW50KHAxIC0gcDIpLmxlbmd0aFNxdWFyZWQoKTsKLSAgICBhdXRv
IGMyID0gdG9GbG9hdFBvaW50KHAwIC0gcDIpLmxlbmd0aFNxdWFyZWQoKTsKLQotICAgIGRvdWJs
ZSBjb3N4ID0gKGEyICsgYjIgLSBjMikgLyAoMi4wICogc3RkOjpzcXJ0KGEyICogYjIpKTsKLSAg
ICBkb3VibGUgc2lueCA9IHN0ZDo6c3FydCgxLjAgLSBjb3N4ICogY29zeCk7Ci0gICAgZG91Ymxl
IGQgPSByYWRpdXMgLyAoKDEgLSBjb3N4KSAvIHNpbngpOwotCi0gICAgYXV0byBhbiA9IHRvRmxv
YXRQb2ludChwMSAtIHAwKS5zY2FsZWQoMS4wIC8gc3RkOjpzcXJ0KGEyKSk7Ci0gICAgYXV0byBi
biA9IHRvRmxvYXRQb2ludChwMSAtIHAyKS5zY2FsZWQoMS4wIC8gc3RkOjpzcXJ0KGIyKSk7Ci0K
LSAgICBhdXRvIHN0YXJ0UG9pbnQgPSB0b0Zsb2F0UG9pbnQocDEgLSBhbi5zY2FsZWQoZCkpOwot
ICAgIGF1dG8gcDQgPSB0b0Zsb2F0UG9pbnQocDEgLSBibi5zY2FsZWQoZCkpOwotCi0gICAgYm9v
bCBhbnRpY2xvY2t3aXNlID0gKGRpcmVjdGlvbiA8IDApOwotICAgIGFuLnNjYWxlKHJhZGl1cyAq
IChhbnRpY2xvY2t3aXNlID8gMSA6IC0xKSk7Ci0KLSAgICBGbG9hdFBvaW50IGNlbnRlcihzdGFy
dFBvaW50LngoKSArIGFuLnkoKSwgc3RhcnRQb2ludC55KCkgLSBhbi54KCkpOwotCi0gICAgZG91
YmxlIGFuZ2xlMCA9IGF0YW4yKHN0YXJ0UG9pbnQueSgpIC0gY2VudGVyLnkoKSwgc3RhcnRQb2lu
dC54KCkgLSBjZW50ZXIueCgpKTsKLSAgICBkb3VibGUgYW5nbGUxID0gYXRhbjIocDQueSgpIC0g
Y2VudGVyLnkoKSwgcDQueCgpIC0gY2VudGVyLngoKSk7Ci0KLSAgICBvcGVuRmlndXJlQXRDdXJy
ZW50UG9pbnRJZk5lY2Vzc2FyeSgpOwotICAgIGFkZExpbmVUbyhzdGFydFBvaW50KTsKLSAgICBh
ZGRBcmMoY2VudGVyLCByYWRpdXMsIGFuZ2xlMCwgYW5nbGUxLCBhbnRpY2xvY2t3aXNlKTsKLX0K
LQotc3RhdGljIGJvb2wgZXF1YWxSYWRpdXNXaWR0aHMoY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0
UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUm
IGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpCi17
Ci0gICAgcmV0dXJuIHRvcExlZnRSYWRpdXMud2lkdGgoKSA9PSB0b3BSaWdodFJhZGl1cy53aWR0
aCgpCi0gICAgICAgICYmIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkgPT0gYm90dG9tTGVmdFJhZGl1
cy53aWR0aCgpCi0gICAgICAgICYmIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSA9PSBib3R0b21S
aWdodFJhZGl1cy53aWR0aCgpOwotfQotCi1zdGF0aWMgYm9vbCBlcXVhbFJhZGl1c0hlaWdodHMo
Y29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0
UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6
ZSYgYm90dG9tUmlnaHRSYWRpdXMpCi17Ci0gICAgcmV0dXJuIHRvcExlZnRSYWRpdXMuaGVpZ2h0
KCkgPT0gYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKQotICAgICAgICAmJiBib3R0b21MZWZ0UmFk
aXVzLmhlaWdodCgpID09IHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpCi0gICAgICAgICYmIHRvcFJp
Z2h0UmFkaXVzLmhlaWdodCgpID09IGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpOwotfQotCi12
b2lkIFBhdGg6OnBsYXRmb3JtQWRkUGF0aEZvclJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRv
cFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZs
b2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpCi17Ci0gICAgYm9vbCBlcXVhbFdpZHRocyA9IGVx
dWFsUmFkaXVzV2lkdGhzKHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0
UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7Ci0gICAgYm9vbCBlcXVhbEhlaWdodHMgPSBlcXVh
bFJhZGl1c0hlaWdodHModG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRS
YWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKLQotICAgIGlmIChlcXVhbFdpZHRocyAmJiBlcXVh
bEhlaWdodHMpIHsKLSAgICAgICAgLy8gRW5zdXJlIHRoYXQgQ0cgY2FuIHJlbmRlciB0aGUgcm91
bmRlZCByZWN0LgotICAgICAgICBmbG9hdCByYWRpdXNXaWR0aCA9IHRvcExlZnRSYWRpdXMud2lk
dGgoKTsKLSAgICAgICAgZmxvYXQgcmFkaXVzSGVpZ2h0ID0gdG9wTGVmdFJhZGl1cy5oZWlnaHQo
KTsKLSAgICAgICAgYXV0byByZWN0VG9EcmF3ID0gRDJEMTo6UmVjdEYocmVjdC54KCksIHJlY3Qu
eSgpLCByZWN0Lm1heFgoKSwgcmVjdC5tYXhZKCkpOwotCi0gICAgICAgIENPTVB0cjxJRDJEMVJv
dW5kZWRSZWN0YW5nbGVHZW9tZXRyeT4gcm91bmRSZWN0OwotICAgICAgICBIUkVTVUxUIGhyID0g
R3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVJvdW5kZWRSZWN0YW5nbGVH
ZW9tZXRyeShEMkQxOjpSb3VuZGVkUmVjdChyZWN0VG9EcmF3LCByYWRpdXNXaWR0aCwgcmFkaXVz
SGVpZ2h0KSwgJnJvdW5kUmVjdCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotICAgICAgICBhcHBlbmRHZW9tZXRyeShyb3VuZFJlY3QuZ2V0KCkpOwotICAgICAgICBB
U1NFUlQocmVmQ291bnQocm91bmRSZWN0LmdldCgpKSA9PSAyKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGFkZEJlemllcnNGb3JSb3VuZGVkUmVjdChyZWN0LCB0b3BMZWZ0UmFkaXVz
LCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpOwot
fQotCi12b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpCi17Ci0gICAgaWYgKGlzTnVsbCgpKSB7Ci0g
ICAgICAgIG1fYWN0aXZlUGF0aCA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoIW1fYWN0aXZlUGF0aCkgewotICAgICAgICBBU1NFUlQoIW1fZmlndXJlSXNPcGVu
ZWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2xvc2VBbnlPcGVuR2VvbWV0cmll
cyhEMkQxX0ZJR1VSRV9FTkRfQ0xPU0VEKTsKLX0KLQotc3RhdGljIEZsb2F0UG9pbnQgYXJjU3Rh
cnQoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyLCBmbG9hdCByYWRpdXMsIGZsb2F0IHN0YXJ0QW5n
bGUpCi17Ci0gICAgRmxvYXRQb2ludCBzdGFydGluZ1BvaW50ID0gY2VudGVyOwotICAgIGZsb2F0
IHN0YXJ0WCA9IHJhZGl1cyAqIHN0ZDo6Y29zKHN0YXJ0QW5nbGUpOwotICAgIGZsb2F0IHN0YXJ0
WSA9IHJhZGl1cyAqIHN0ZDo6c2luKHN0YXJ0QW5nbGUpOwotICAgIHN0YXJ0aW5nUG9pbnQubW92
ZShzdGFydFgsIHN0YXJ0WSk7Ci0gICAgcmV0dXJuIHN0YXJ0aW5nUG9pbnQ7Ci19Ci0KLWNvbnN0
IGZsb2F0IHR3b1BpID0gMi4wZiAqIHBpRmxvYXQ7Ci0KLXN0YXRpYyB2b2lkIGRyYXdBcmNTZWN0
aW9uKElEMkQxR2VvbWV0cnlTaW5rKiBzaW5rLCBjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZs
b2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJvb2wgYW50aWNs
b2Nrd2lzZSkKLXsKLSAgICAvLyBEaXJlY3QyRCB3YW50cyB1cyB0byBzcGVjaWZ5IHRoZSBlbmQg
cG9pbnQgb2YgdGhlIGFyYywgbm90IHRoZSBjZW50ZXIuIEl0IHdpbGwgYmUgZHJhd24gZnJvbQot
ICAgIC8vIHdoYXRldmVyIHRoZSBjdXJyZW50IHBvaW50IGluIHRoZSAnbV9hY3RpdmVQYXRoJyBp
cy4KLSAgICBGbG9hdFBvaW50IGVuZFBvaW50ID0gY2VudGVyOwotICAgIGZsb2F0IGVuZFggPSBy
YWRpdXMgKiBzdGQ6OmNvcyhlbmRBbmdsZSk7Ci0gICAgZmxvYXQgZW5kWSA9IHJhZGl1cyAqIHN0
ZDo6c2luKGVuZEFuZ2xlKTsKLSAgICBlbmRQb2ludC5tb3ZlKGVuZFgsIGVuZFkpOwotCi0gICAg
RDJEMV9TV0VFUF9ESVJFQ1RJT04gZGlyZWN0aW9uID0gYW50aWNsb2Nrd2lzZSA/IEQyRDFfU1dF
RVBfRElSRUNUSU9OX0NPVU5URVJfQ0xPQ0tXSVNFIDogRDJEMV9TV0VFUF9ESVJFQ1RJT05fQ0xP
Q0tXSVNFOwotICAgIHNpbmstPkFkZEFyYyhEMkQxOjpBcmNTZWdtZW50KGVuZFBvaW50LCBEMkQx
OjpTaXplRihyYWRpdXMsIHJhZGl1cyksIDAsIGRpcmVjdGlvbiwgRDJEMV9BUkNfU0laRV9TTUFM
TCkpOwotfQotCi12b2lkIFBhdGg6OmFkZEFyY1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmIGNl
bnRlciwgZmxvYXQgcmFkaXVzLCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9v
bCBhbnRpY2xvY2t3aXNlKQotewotICAgIGF1dG8gYXJjU3RhcnRQb2ludCA9IGFyY1N0YXJ0KGNl
bnRlciwgcmFkaXVzLCBzdGFydEFuZ2xlKTsKLSAgICBpZiAoIW1fYWN0aXZlUGF0aCkKLSAgICAg
ICAgbW92ZVRvKGFyY1N0YXJ0UG9pbnQpOwotICAgIGVsc2UgaWYgKCFhcmVFc3NlbnRpYWxseUVx
dWFsKGN1cnJlbnRQb2ludCgpLCBhcmNTdGFydFBvaW50KSkgewotICAgICAgICAvLyBJZiB0aGUg
YXJjIGRlZmluZWQgYnkgdGhlIGNlbnRlciBhbmQgcmFkaXVzIGRvZXMgbm90IGludGVyc2VjdCB0
aGUgY3VycmVudCBwb3NpdGlvbiwKLSAgICAgICAgLy8gd2UgbmVlZCB0byBkcmF3IGEgbGluZSBm
cm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uIHRvIHRoZSBzdGFydGluZyBwb2ludCBvZiB0aGUgYXJj
LgotICAgICAgICBhZGRMaW5lVG8oYXJjU3RhcnRQb2ludCk7Ci0gICAgfQotCi0gICAgaWYgKFdU
Rjo6YXJlRXNzZW50aWFsbHlFcXVhbChzdGQ6OmFicyhlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpLCB0
d29QaSkpCi0gICAgICAgIHJldHVybiBhZGRFbGxpcHNlKEZsb2F0UmVjdChjZW50ZXIueCgpIC0g
cmFkaXVzLCBjZW50ZXIueSgpIC0gcmFkaXVzLCAyLjAgKiByYWRpdXMsIDIuMCAqIHJhZGl1cykp
OwotCi0gICAgaWYgKGFudGljbG9ja3dpc2UpIHsKLSAgICAgICAgaWYgKGVuZEFuZ2xlID4gc3Rh
cnRBbmdsZSkgewotICAgICAgICAgICAgZW5kQW5nbGUgLT0gdHdvUGkgKiBzdGQ6OmNlaWwoKGVu
ZEFuZ2xlIC0gc3RhcnRBbmdsZSkgLyB0d29QaSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW5kQW5n
bGUgPD0gc3RhcnRBbmdsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
c3RhcnRBbmdsZSA+IGVuZEFuZ2xlKSB7Ci0gICAgICAgICAgICBzdGFydEFuZ2xlIC09IHR3b1Bp
ICogc3RkOjpjZWlsKChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpIC8gdHdvUGkpOwotICAgICAgICAg
ICAgQVNTRVJUKHN0YXJ0QW5nbGUgPD0gZW5kQW5nbGUpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgY29uc3QgZmxvYXQgZGVsdGEgPSBhbnRpY2xvY2t3aXNlID8gLXBpT3ZlclR3b0Zsb2F0IDog
cGlPdmVyVHdvRmxvYXQ7Ci0gICAgZmxvYXQgcmVtYWluaW5nQXJjQW5nbGUgPSBlbmRBbmdsZSAt
IHN0YXJ0QW5nbGU7Ci0KLSAgICB3aGlsZSAoKHJlbWFpbmluZ0FyY0FuZ2xlID4gMCAmJiByZW1h
aW5pbmdBcmNBbmdsZSA+IGRlbHRhKSB8fCAocmVtYWluaW5nQXJjQW5nbGUgPCAwICYmIHJlbWFp
bmluZ0FyY0FuZ2xlIDwgZGVsdGEpKSB7Ci0gICAgICAgIGNvbnN0IGRvdWJsZSBjdXJyZW50RW5k
QW5nbGUgPSBzdGFydEFuZ2xlICsgZGVsdGE7Ci0gICAgICAgIGRyYXdBcmNTZWN0aW9uKG1fYWN0
aXZlUGF0aC5nZXQoKSwgY2VudGVyLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGN1cnJlbnRFbmRBbmds
ZSwgYW50aWNsb2Nrd2lzZSk7Ci0gICAgICAgIHN0YXJ0QW5nbGUgPSBjdXJyZW50RW5kQW5nbGU7
Ci0gICAgICAgIHJlbWFpbmluZ0FyY0FuZ2xlIC09IGRlbHRhOwotICAgIH0KLQotICAgIC8vIEhh
bmRsZSBhbnkgcmVtYWluaW5nIHBhcnQgb2YgdGhlIGFyYzoKLSAgICBpZiAoc3RkOjphYnMocmVt
YWluaW5nQXJjQW5nbGUpID4gMWUtNikKLSAgICAgICAgZHJhd0FyY1NlY3Rpb24obV9hY3RpdmVQ
YXRoLmdldCgpLCBjZW50ZXIsIHJhZGl1cywgc3RhcnRBbmdsZSwgc3RhcnRBbmdsZSArIHJlbWFp
bmluZ0FyY0FuZ2xlLCBhbnRpY2xvY2t3aXNlKTsKLX0KLQotdm9pZCBQYXRoOjphZGRSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcikKLXsKLSAgICBpZiAoIW1fYWN0aXZlUGF0aCkKLSAgICAgICAgbW92
ZVRvKHIubG9jYXRpb24oKSk7Ci0KLSAgICBDT01QdHI8SUQyRDFSZWN0YW5nbGVHZW9tZXRyeT4g
cmVjdGFuZ2xlOwotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3Rv
cnkoKS0+Q3JlYXRlUmVjdGFuZ2xlR2VvbWV0cnkociwgJnJlY3RhbmdsZSk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgYXBwZW5kR2VvbWV0cnkocmVjdGFuZ2xlLmdl
dCgpKTsKLSAgICBBU1NFUlQocmVmQ291bnQocmVjdGFuZ2xlLmdldCgpKSA9PSAyKTsKLX0KLQot
dm9pZCBQYXRoOjphZGRFbGxpcHNlKEZsb2F0UG9pbnQgcCwgZmxvYXQgcmFkaXVzWCwgZmxvYXQg
cmFkaXVzWSwgZmxvYXQgcm90YXRpb24sIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IGVuZEFuZ2xl
LCBib29sIGFudGljbG9ja3dpc2UpCi17Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsK
LSAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKHAueCgpLCBwLnkoKSkucm90YXRlKHJhZDJkZWcocm90
YXRpb24pKS5zY2FsZShyYWRpdXNYLCByYWRpdXNZKTsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAg
aWYgKCFtX2FjdGl2ZVBhdGgpCi0gICAgICAgIG1vdmVUbyhyLmxvY2F0aW9uKCkpOwotCi0gICAg
Q09NUHRyPElEMkQxRWxsaXBzZUdlb21ldHJ5PiBlbGxpcHNlOwotICAgIC8vIE5vdGU6IFRoZSBy
YWRpaSBvZiB0aGUgZWxsaXBzZSBjb250YWluZWQgd2l0aGluIGEgcmVjdGFuZ2UgYXJlIGhhbGYg
dGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHJlY3QuCi0gICAgSFJFU1VMVCBociA9IEdyYXBo
aWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVFbGxpcHNlR2VvbWV0cnkoRDJEMTo6
RWxsaXBzZShyLmNlbnRlcigpLCAwLjUgKiByLndpZHRoKCksIDAuNSAqIHIuaGVpZ2h0KCkpLCAm
ZWxsaXBzZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgYXBwZW5k
R2VvbWV0cnkoZWxsaXBzZS5nZXQoKSk7Ci0gICAgQVNTRVJUKHJlZkNvdW50KGVsbGlwc2UuZ2V0
KCkpID09IDIpOwotfQotCi12b2lkIFBhdGg6OmFkZFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgaWYgKCFwYXRoLnBsYXRmb3Jt
UGF0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXRyYW5zZm9ybS5pc0ludmVydGli
bGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotCi12
b2lkIFBhdGg6OmNsZWFyKCkKLXsKLSAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fcGF0aCA9IG51bGxwdHI7Ci0gICAgbV9hY3RpdmVQYXRoID0gbnVsbHB0cjsKLSAg
ICBjbGVhckdlb21ldHJpZXMoKTsKLX0KLQotYm9vbCBQYXRoOjppc0VtcHR5U2xvd0Nhc2UoKSBj
b25zdAotewotICAgIGlmICghbV9wYXRoLT5HZXRTb3VyY2VHZW9tZXRyeUNvdW50KCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgQVNTRVJUKG1fcGF0aC0+R2V0U291cmNlR2VvbWV0cnlD
b3VudCgpID09IG1fZ2VvbWV0cmllcy5zaXplKCkpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1GbG9hdFBvaW50IFBhdGg6OmN1cnJlbnRQb2ludFNsb3dDYXNlKCkgY29uc3QKLXsKLSAgICBm
bG9hdCBsZW5ndGggPSAwOwotICAgIEhSRVNVTFQgaHIgPSBtX3BhdGgtPkNvbXB1dGVMZW5ndGgo
bnVsbHB0ciwgJmxlbmd0aCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1
cm4gRmxvYXRQb2ludCgpOwotCi0gICAgRDJEMV9QT0lOVF8yRiBwb2ludCA9IHsgfTsKLSAgICBE
MkQxX1BPSU5UXzJGIHRhbmdlbnQgPSB7IH07Ci0gICAgaHIgPSBtX3BhdGgtPkNvbXB1dGVQb2lu
dEF0TGVuZ3RoKGxlbmd0aCwgbnVsbHB0ciwgJnBvaW50LCAmdGFuZ2VudCk7Ci0gICAgaWYgKCFT
VUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgpOwotCi0gICAgcmV0dXJu
IHBvaW50OwotfQotCi1mbG9hdCBQYXRoOjpsZW5ndGgoKSBjb25zdAotewotICAgIGZsb2F0IGxl
bmd0aCA9IDA7Ci0gICAgSFJFU1VMVCBociA9IG1fcGF0aC0+Q29tcHV0ZUxlbmd0aChudWxscHRy
LCAmbGVuZ3RoKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIGxlbmd0aDsKLX0KLQotdm9pZCBQYXRoOjphcHBseVNsb3dDYXNlKGNvbnN0
IFBhdGhBcHBsaWVyRnVuY3Rpb24mKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLWJvb2wgUGF0aDo6aXNOdWxsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIW1fcGF0aDsKLX0K
LQotfQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRlcm5EaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRlcm5EaXJlY3QyRC5jcHAJKHJl
dmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Q
YXR0ZXJuRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JRDJE
MUJpdG1hcEJydXNoKiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBmbG9hdCBhbHBoYSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1
c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbikgY29uc3QKLXsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0
dGVyblRyYW5zZm9ybSA9IHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uICogbV9wYXR0ZXJuU3BhY2VU
cmFuc2Zvcm1hdGlvbjsKLSAgICBhdXRvIGJpdG1hcEJydXNoUHJvcGVydGllcyA9IEQyRDE6OkJp
dG1hcEJydXNoUHJvcGVydGllcygpOwotICAgIGJpdG1hcEJydXNoUHJvcGVydGllcy5leHRlbmRN
b2RlWCA9IG1fcmVwZWF0WCA/IEQyRDFfRVhURU5EX01PREVfV1JBUCA6IEQyRDFfRVhURU5EX01P
REVfQ0xBTVA7Ci0gICAgYml0bWFwQnJ1c2hQcm9wZXJ0aWVzLmV4dGVuZE1vZGVZID0gbV9yZXBl
YXRZID8gRDJEMV9FWFRFTkRfTU9ERV9XUkFQIDogRDJEMV9FWFRFTkRfTU9ERV9DTEFNUDsKLQot
ICAgIGF1dG8gYnJ1c2hQcm9wZXJ0aWVzID0gRDJEMTo6QnJ1c2hQcm9wZXJ0aWVzKCk7Ci0gICAg
YnJ1c2hQcm9wZXJ0aWVzLnRyYW5zZm9ybSA9IHBhdHRlcm5UcmFuc2Zvcm07Ci0gICAgYnJ1c2hQ
cm9wZXJ0aWVzLm9wYWNpdHkgPSBhbHBoYTsKLQotICAgIGF1dG8mIHBhdHRlcm5JbWFnZSA9IHRp
bGVJbWFnZSgpOwotICAgIGF1dG8gbmF0aXZlSW1hZ2UgPSBwYXR0ZXJuSW1hZ2UubmF0aXZlSW1h
Z2UoJmNvbnRleHQpOwotICAgIGlmICghbmF0aXZlSW1hZ2UpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgYXV0byBwbGF0Zm9ybUNvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpOwotICAgIFJFTEVBU0VfQVNTRVJUKHBsYXRmb3JtQ29udGV4dCk7Ci0KLSAgICBJRDJEMUJp
dG1hcEJydXNoKiBwYXR0ZXJuQnJ1c2ggPSBudWxscHRyOwotICAgIEhSRVNVTFQgaHIgPSBwbGF0
Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpLT5DcmVhdGVCaXRtYXBCcnVzaChuYXRpdmVJbWFn
ZS5nZXQoKSwgJmJpdG1hcEJydXNoUHJvcGVydGllcywgJmJydXNoUHJvcGVydGllcywgJnBhdHRl
cm5CcnVzaCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIHJldHVybiBwYXR0ZXJu
QnJ1c2g7Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RC5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwz
OTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRC5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiRGlyZWN0MkRPcGVyYXRp
b25zLmgiCi0jaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDxkMmQxLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gRW5jYXBzdWxhdGVzIHRoZSBhZGRpdGlvbmFs
IHBhaW50aW5nIHN0YXRlIGluZm9ybWF0aW9uIHdlIHN0b3JlIGZvciBlYWNoCi0vLyBwdXNoZWQg
Z3JhcGhpY3Mgc3RhdGUuCi1jbGFzcyBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6U3RhdGUgewot
cHVibGljOgotICAgIFN0YXRlKCkgPSBkZWZhdWx0OwotCi0gICAgQ09NUHRyPElEMkQxRHJhd2lu
Z1N0YXRlQmxvY2s+IG1fZHJhd2luZ1N0YXRlQmxvY2s7Ci0gICAgQ09NUHRyPElEMkQxTGF5ZXI+
IG1fYWN0aXZlTGF5ZXI7Ci0gICAgVmVjdG9yPERpcmVjdDJETGF5ZXJUeXBlPiBtX2NsaXBzOwot
fTsKLQotUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEKElE
MkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQsIEZ1bmN0aW9uPHZvaWQoKT4mJiBwcmVEcmF3
SGFuZGxlciwgRnVuY3Rpb248dm9pZCgpPiYmIHBvc3REcmF3SGFuZGxlcikKLSAgICA6IG1fcmVu
ZGVyVGFyZ2V0KHJlbmRlclRhcmdldCkKLSAgICAsIG1fcHJlRHJhd0hhbmRsZXIoV1RGTW92ZShw
cmVEcmF3SGFuZGxlcikpCi0gICAgLCBtX3Bvc3REcmF3SGFuZGxlcihXVEZNb3ZlKHBvc3REcmF3
SGFuZGxlcikpCi17Ci0gICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChTdGF0ZSgpKTsKLSAgICBtX3N0
YXRlID0gJm1fc3RhdGVTdGFjay5sYXN0KCk7Ci0KLSAgICBtX2RldmljZUNvbnRleHQucXVlcnko
bV9yZW5kZXJUYXJnZXQuZ2V0KCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9kZXZpY2VDb250
ZXh0KTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0UmVuZGVyVGFyZ2V0
KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCi17Ci0gICAgbV9yZW5kZXJUYXJnZXQg
PSByZW5kZXJUYXJnZXQ7Ci0KLSAgICBtX2RldmljZUNvbnRleHQucXVlcnkobV9yZW5kZXJUYXJn
ZXQuZ2V0KCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9kZXZpY2VDb250ZXh0KTsKLX0KLQot
SUQyRDFMYXllciogUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmNsaXBMYXllcigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fc3RhdGUtPm1fYWN0aXZlTGF5ZXIuZ2V0KCk7Ci19Ci0KLXZvaWQgUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ6OmNsZWFyQ2xpcHMoVmVjdG9yPERpcmVjdDJETGF5ZXJUeXBl
PiYgY2xpcHMpCi17Ci0gICAgZm9yIChhdXRvIGNsaXBUeXBlID0gY2xpcHMucmJlZ2luKCk7IGNs
aXBUeXBlICE9IGNsaXBzLnJlbmQoKTsgKytjbGlwVHlwZSkgewotICAgICAgICBpZiAoKmNsaXBU
eXBlID09IEF4aXNBbGlnbmVkQ2xpcCkKLSAgICAgICAgICAgIG1fcmVuZGVyVGFyZ2V0LT5Qb3BB
eGlzQWxpZ25lZENsaXAoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9yZW5kZXJUYXJn
ZXQtPlBvcExheWVyKCk7Ci0gICAgfQotCi0gICAgY2xpcHMuY2xlYXIoKTsKLX0KLQotdm9pZCBQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6cmVzdG9yZSgpCi17Ci0gICAgQVNTRVJUKG1fcmVuZGVy
VGFyZ2V0KTsKLQotICAgIC8vIE5vIG5lZWQgdG8gcmVzdG9yZSBpZiB3ZSBkb24ndCBoYXZlIGEg
c2F2ZWQgZWxlbWVudCBvbiB0aGUgc3RhY2suCi0gICAgaWYgKG1fc3RhdGVTdGFjay5zaXplKCkg
PT0gMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgcmVzdG9yZVN0YXRlID0gbV9zdGF0
ZVN0YWNrLmxhc3QoKTsKLSAgICBpZiAocmVzdG9yZVN0YXRlLm1fZHJhd2luZ1N0YXRlQmxvY2sp
IHsKLSAgICAgICAgbV9yZW5kZXJUYXJnZXQtPlJlc3RvcmVEcmF3aW5nU3RhdGUocmVzdG9yZVN0
YXRlLm1fZHJhd2luZ1N0YXRlQmxvY2suZ2V0KCkpOwotICAgICAgICByZXN0b3JlU3RhdGUubV9k
cmF3aW5nU3RhdGVCbG9jayA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgY2xlYXJDbGlwcyhyZXN0
b3JlU3RhdGUubV9jbGlwcyk7Ci0KLSAgICBtX3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOwotICAg
IEFTU0VSVCghbV9zdGF0ZVN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgbV9zdGF0ZSA9ICZtX3N0YXRl
U3RhY2subGFzdCgpOwotfQotCi1QbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6flBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEKCkgPSBkZWZhdWx0OwotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
OjpzYXZlKCkKLXsKLSAgICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSA+PSAxKTsgLy8gVGhl
cmUgc2hvdWxkIGFsd2F5cyBiZSBvbmUgc3RhdGUgb24gdGhlIHN0YWNrLgotICAgIEFTU0VSVCht
X3JlbmRlclRhcmdldCk7Ci0KLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKFN0YXRlKCkpOwotICAg
IG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDo6
c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEcmF3aW5nU3RhdGVCbG9jaygmbV9zdGF0ZS0+bV9kcmF3
aW5nU3RhdGVCbG9jayk7Ci0KLSAgICBtX3JlbmRlclRhcmdldC0+U2F2ZURyYXdpbmdTdGF0ZSht
X3N0YXRlLT5tX2RyYXdpbmdTdGF0ZUJsb2NrLmdldCgpKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRDo6cHVzaFJlbmRlckNsaXAoRGlyZWN0MkRMYXllclR5cGUgY2xpcFR5cGUp
Ci17Ci0gICAgQVNTRVJUKGhhc1NhdmVkU3RhdGUoKSk7Ci0gICAgbV9zdGF0ZS0+bV9jbGlwcy5h
cHBlbmQoY2xpcFR5cGUpOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRB
Y3RpdmVMYXllcihDT01QdHI8SUQyRDFMYXllcj4mJiBsYXllcikKLXsKLSAgICBBU1NFUlQoaGFz
U2F2ZWRTdGF0ZSgpKTsKLSAgICBtX3N0YXRlLT5tX2FjdGl2ZUxheWVyID0gbGF5ZXI7Ci19Ci0K
LUNPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmJy
dXNoV2l0aENvbG9yKGNvbnN0IEQyRDFfQ09MT1JfRiYgY29sb3IpCi17Ci0gICAgYXV0byBjb2xv
cktleSA9IGNvbG9yQ29udmVydDxTUkdCQTx1aW50OF90Pj4oU1JHQkE8ZmxvYXQ+IHsgY29sb3Iu
ciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSB9KTsKLQotICAgIGlmICghY29sb3JLZXkpIHsK
LSAgICAgICAgaWYgKCFtX3plcm9CcnVzaCkKLSAgICAgICAgICAgIG1fcmVuZGVyVGFyZ2V0LT5D
cmVhdGVTb2xpZENvbG9yQnJ1c2goY29sb3IsICZtX3plcm9CcnVzaCk7Ci0gICAgICAgIHJldHVy
biBtX3plcm9CcnVzaDsKLSAgICB9Ci0KLSAgICBpZiAoY29sb3JLZXkgPT0gMHhGRkZGRkZGRikg
ewotICAgICAgICBpZiAoIW1fd2hpdGVCcnVzaCkKLSAgICAgICAgICAgIG1fcmVuZGVyVGFyZ2V0
LT5DcmVhdGVTb2xpZENvbG9yQnJ1c2goY29sb3IsICZtX3doaXRlQnJ1c2gpOwotICAgICAgICBy
ZXR1cm4gbV93aGl0ZUJydXNoOwotICAgIH0KLQotICAgIGF1dG8gZXhpc3RpbmdCcnVzaCA9IG1f
c29saWRDb2xvcmVkQnJ1c2hDYWNoZS5lbnN1cmUoY29sb3JLZXksIFt0aGlzLCBjb2xvcl0gewot
ICAgICAgICBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IGNvbG9yQnJ1c2g7Ci0gICAgICAg
IG1fcmVuZGVyVGFyZ2V0LT5DcmVhdGVTb2xpZENvbG9yQnJ1c2goY29sb3IsICZjb2xvckJydXNo
KTsKLSAgICAgICAgcmV0dXJuIGNvbG9yQnJ1c2g7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gZXhp
c3RpbmdCcnVzaC5pdGVyYXRvci0+dmFsdWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQ6OnJlY29tcHV0ZVN0cm9rZVN0eWxlKCkKLXsKLSAgICBpZiAoIW1fc3Ryb2tlU3lsZUlz
RGlydHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZDJkU3Ryb2tlU3R5bGUgPSBudWxscHRy
OwotCi0gICAgRGFzaEFycmF5IGRhc2hlczsKLSAgICBmbG9hdCBwYXR0ZXJuT2Zmc2V0ID0gMDsK
LSAgICBhdXRvIGRhc2hTdHlsZSA9IEQyRDFfREFTSF9TVFlMRV9TT0xJRDsKLQotICAgIGlmICgo
bV9zdHJva2VTdHlsZSAhPSBTb2xpZFN0cm9rZSkgJiYgKG1fc3Ryb2tlU3R5bGUgIT0gTm9TdHJv
a2UpKSB7Ci0gICAgICAgIGRhc2hTdHlsZSA9IEQyRDFfREFTSF9TVFlMRV9DVVNUT007Ci0gICAg
ICAgIHBhdHRlcm5PZmZzZXQgPSBtX3BhdHRlcm5PZmZzZXQgLyBtX3N0cm9rZVRoaWNrbmVzczsK
LSAgICAgICAgZGFzaGVzID0gbV9kYXNoZXM7Ci0KLSAgICAgICAgLy8gSW4gRGlyZWN0MkQsIGRh
c2hlcyBhbmQgZG90cyBhcmUgZGVmaW5lZCBpbiB0ZXJtcyBvZiB0aGUgcmF0aW8gb2YgdGhlIGRh
c2ggbGVuZ3RoIHRvIHRoZSBsaW5lIHRoaWNrbmVzcy4KLSAgICAgICAgZm9yIChhdXRvJiBkYXNo
IDogZGFzaGVzKQotICAgICAgICAgICAgZGFzaCAvPSBtX3N0cm9rZVRoaWNrbmVzczsKLSAgICB9
Ci0KLSAgICBhdXRvIHN0cm9rZVN0eWxlUHJvcGVydGllcyA9IEQyRDE6OlN0cm9rZVN0eWxlUHJv
cGVydGllcyhtX2xpbmVDYXAsIG1fbGluZUNhcCwgbV9saW5lQ2FwLCBtX2xpbmVKb2luLCBtX21p
dGVyTGltaXQsIGRhc2hTdHlsZSwgcGF0dGVybk9mZnNldCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0
OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVN0cm9rZVN0eWxlKCZzdHJva2VTdHlsZVByb3BlcnRp
ZXMsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCksICZtX2QyZFN0cm9rZVN0eWxlKTsKLQot
ICAgIG1fc3Ryb2tlU3lsZUlzRGlydHkgPSBmYWxzZTsKLX0KLQotSUQyRDFTdHJva2VTdHlsZSog
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnN0cm9rZVN0eWxlKCkKLXsKLSAgICByZWNvbXB1dGVT
dHJva2VTdHlsZSgpOwotICAgIHJldHVybiBtX2QyZFN0cm9rZVN0eWxlLmdldCgpOwotfQotCi1E
MkQxX1NUUk9LRV9TVFlMRV9QUk9QRVJUSUVTIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzdHJv
a2VTdHlsZVByb3BlcnRpZXMoKSBjb25zdAotewotICAgIHJldHVybiBEMkQxOjpTdHJva2VTdHls
ZVByb3BlcnRpZXMobV9saW5lQ2FwLCBtX2xpbmVDYXAsIG1fbGluZUNhcCwgbV9saW5lSm9pbiwg
bV9taXRlckxpbWl0LCBEMkQxX0RBU0hfU1RZTEVfU09MSUQsIDAuMGYpOwotfQotCi12b2lkIFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRMaW5lQ2FwKEQyRDFfQ0FQX1NUWUxFIGxpbmVDYXAp
Ci17Ci0gICAgaWYgKG1fbGluZUNhcCA9PSBsaW5lQ2FwKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2xpbmVDYXAgPSBsaW5lQ2FwOwotICAgIG1fc3Ryb2tlU3lsZUlzRGlydHkgPSB0cnVlOwot
fQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRMaW5lSm9pbihEMkQxX0xJTkVf
Sk9JTiBqb2luKQotewotICAgIGlmIChtX2xpbmVKb2luID09IGpvaW4pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fbGluZUpvaW4gPSBqb2luOwotICAgIG1fc3Ryb2tlU3lsZUlzRGlydHkgPSB0
cnVlOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRTdHJva2VTdHlsZShT
dHJva2VTdHlsZSBzdHJva2VTdHlsZSkKLXsKLSAgICBpZiAobV9zdHJva2VTdHlsZSA9PSBzdHJv
a2VTdHlsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdHJva2VTdHlsZSA9IHN0cm9rZVN0
eWxlOwotICAgIG1fc3Ryb2tlU3lsZUlzRGlydHkgPSB0cnVlOwotfQotCi12b2lkIFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEOjpzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQotewot
ICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwodGhpY2tuZXNzLCBtX3N0cm9rZVRoaWNr
bmVzcykpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3Ryb2tlVGhpY2tuZXNzID0gdGhpY2tu
ZXNzOwotICAgIG1fc3Ryb2tlU3lsZUlzRGlydHkgPSB0cnVlOwotfQotCi12b2lkIFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KGZsb2F0IGNhbnZhc01pdGVyTGltaXQpCi17
Ci0gICAgLy8gRGlyZWN0MkQgbWl0ZXIgbGltaXQgaXMgaW4gdGVybXMgb2YgSEFMRiB0aGUgbGlu
ZSB0aGlja25lc3MuCi0gICAgZmxvYXQgbWl0ZXJMaW1pdCA9IDAuNWYgKiBjYW52YXNNaXRlckxp
bWl0OwotICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwobWl0ZXJMaW1pdCwgbV9taXRl
ckxpbWl0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9taXRlckxpbWl0ID0gbWl0ZXJMaW1p
dDsKLSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRDo6c2V0RGFzaE9mZnNldChmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIGlm
IChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoZGFzaE9mZnNldCwgbV9kYXNoT2Zmc2V0KSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXNoT2Zmc2V0ID0gZGFzaE9mZnNldDsKLSAgICBtX3N0
cm9rZVN5bGVJc0RpcnR5ID0gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RDo6c2V0RGFzaGVzKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzKQotewotICAgIGlmIChtX2Rhc2hl
cyA9PSBkYXNoZXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGFzaGVzID0gZGFzaGVzOwot
ICAgIG1fc3Ryb2tlU3lsZUlzRGlydHkgPSB0cnVlOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEOjpzZXRQYXR0ZXJuV2lkdGgoZmxvYXQgcGF0dGVybldpZHRoKQotewotICAgIGlm
IChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwocGF0dGVybldpZHRoLCBtX3BhdHRlcm5XaWR0aCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGF0dGVybldpZHRoID0gcGF0dGVybldpZHRoOwot
ICAgIG1fc3Ryb2tlU3lsZUlzRGlydHkgPSB0cnVlOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEOjpzZXRQYXR0ZXJuT2Zmc2V0KGZsb2F0IHBhdHRlcm5PZmZzZXQpCi17Ci0gICAg
aWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChwYXR0ZXJuT2Zmc2V0LCBtX3BhdHRlcm5PZmZz
ZXQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhdHRlcm5PZmZzZXQgPSBwYXR0ZXJuT2Zm
c2V0OwotICAgIG1fc3Ryb2tlU3lsZUlzRGlydHkgPSB0cnVlOwotfQotCi12b2lkIFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEOjpiZWdpbkRyYXcoKQotewotICAgIEFTU0VSVChtX3JlbmRlclRhcmdl
dCk7Ci0gICAgbV9yZW5kZXJUYXJnZXQtPkJlZ2luRHJhdygpOwotICAgICsrYmVnaW5EcmF3Q291
bnQ7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmVuZERyYXcoKQotewotICAg
IEFTU0VSVChtX3JlbmRlclRhcmdldCk7Ci0KLSAgICBpZiAobV9zdGF0ZVN0YWNrLnNpemUoKSA+
IDEpCi0gICAgICAgIHJlc3RvcmUoKTsKLQotICAgIGNsZWFyQ2xpcHMobV9zdGF0ZS0+bV9jbGlw
cyk7Ci0KLSAgICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSA+PSAxKTsKLQotICAgIEQyRDFf
VEFHIGZpcnN0LCBzZWNvbmQ7Ci0gICAgSFJFU1VMVCBociA9IG1fcmVuZGVyVGFyZ2V0LT5FbmRE
cmF3KCZmaXJzdCwgJnNlY29uZCk7Ci0KLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAg
IFdURkxvZ0Fsd2F5cygiRmFpbGVkIGluIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjplbmREcmF3
OiBocj0leGQsIGZpcnN0PSVsZCwgc2Vjb25kPSVsZCIsIGhyLCBmaXJzdCwgc2Vjb25kKTsKLQot
ICAgIC0tYmVnaW5EcmF3Q291bnQ7Ci0KLSAgICBjb21wb3NpdGVJZk5lZWRlZCgpOwotfQotCi12
b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRUYWdzKEQyRDFfVEFHIHRhZzEsIEQyRDFf
VEFHIHRhZzIpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX3JlbmRlclRhcmdldC0+U2V0
VGFncyh0YWcxLCB0YWcyKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRhZzEpOwotICAgIFVO
VVNFRF9QQVJBTSh0YWcyKTsKLSNlbmRpZgotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEOjpub3RpZnlQcmVEcmF3T2JzZXJ2ZXIoKQotewotICAgIG1fcHJlRHJhd0hhbmRsZXIoKTsK
LX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6bm90aWZ5UG9zdERyYXdPYnNlcnZl
cigpCi17Ci0gICAgbV9wb3N0RHJhd0hhbmRsZXIoKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRDo6cHVzaENsaXAoRGlyZWN0MkRMYXllclR5cGUgY2xpcFR5cGUpCi17Ci0gICAg
bV9zdGF0ZS0+bV9jbGlwcy5hcHBlbmQoY2xpcFR5cGUpOwotfQotCi12b2lkIFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEOjpjb21wb3NpdGVJZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX2NvbXBvc2l0
ZVNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVy
VGFyZ2V0PiBiaXRtYXBUYXJnZXQoUXVlcnksIG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAgICBp
ZiAoIWJpdG1hcFRhcmdldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElEMkQxQml0
bWFwPiBjdXJyZW50Q2FudmFzID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcENvcHlGcm9tQ29udGV4
dChiaXRtYXBUYXJnZXQuZ2V0KCkpOwotICAgIGlmICghY3VycmVudENhbnZhcykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQ09NUHRyPElEMkQxRWZmZWN0PiBlZmZlY3Q7Ci0KLSAgICBpZiAobV9j
b21wb3NpdGVNb2RlICE9IEQyRDFfQ09NUE9TSVRFX01PREVfRk9SQ0VfRFdPUkQpIHsKLSAgICAg
ICAgbV9kZXZpY2VDb250ZXh0LT5DcmVhdGVFZmZlY3QoQ0xTSURfRDJEMUNvbXBvc2l0ZSwgJmVm
ZmVjdCk7Ci0gICAgICAgIGVmZmVjdC0+U2V0SW5wdXQoMCwgbV9jb21wb3NpdGVTb3VyY2UuZ2V0
KCkpOwotICAgICAgICBlZmZlY3QtPlNldElucHV0KDEsIGN1cnJlbnRDYW52YXMuZ2V0KCkpOwot
ICAgICAgICBlZmZlY3QtPlNldFZhbHVlKEQyRDFfQ09NUE9TSVRFX1BST1BfTU9ERSwgbV9jb21w
b3NpdGVNb2RlKTsKLSAgICB9IGVsc2UgaWYgKG1fYmxlbmRNb2RlICE9IEQyRDFfQkxFTkRfTU9E
RV9GT1JDRV9EV09SRCkgewotICAgICAgICBtX2RldmljZUNvbnRleHQtPkNyZWF0ZUVmZmVjdChD
TFNJRF9EMkQxQmxlbmQsICZlZmZlY3QpOwotICAgICAgICBlZmZlY3QtPlNldElucHV0KDAsIGN1
cnJlbnRDYW52YXMuZ2V0KCkpOwotICAgICAgICBlZmZlY3QtPlNldElucHV0KDEsIG1fY29tcG9z
aXRlU291cmNlLmdldCgpKTsKLSAgICAgICAgZWZmZWN0LT5TZXRWYWx1ZShEMkQxX0JMRU5EX1BS
T1BfTU9ERSwgbV9ibGVuZE1vZGUpOwotICAgIH0KLQotICAgIGlmIChlZmZlY3QpIHsKLSAgICAg
ICAgbV9kZXZpY2VDb250ZXh0LT5CZWdpbkRyYXcoKTsKLSAgICAgICAgbV9kZXZpY2VDb250ZXh0
LT5DbGVhcihEMkQxOjpDb2xvckYoMCwgMCwgMCwgMCkpOwotICAgICAgICBtX2RldmljZUNvbnRl
eHQtPkRyYXdJbWFnZShlZmZlY3QuZ2V0KCkpOwotICAgICAgICBtX2RldmljZUNvbnRleHQtPkVu
ZERyYXcoKTsKLSAgICB9Ci0KLSAgICBtX2NvbXBvc2l0ZVNvdXJjZSA9IG51bGxwdHI7Ci19Ci0K
LXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldEJsZW5kQW5kQ29tcG9zaXRlTW9kZShE
MkQxX0JMRU5EX01PREUgYmxlbmQsIEQyRDFfQ09NUE9TSVRFX01PREUgbW9kZSkKLXsKLSAgICBp
ZiAobW9kZSA9PSBtX2NvbXBvc2l0ZU1vZGUgJiYgYmxlbmQgPT0gbV9ibGVuZE1vZGUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIERpcmVjdDJEIGhhbmRsZXMgY29tcG9zaXRpbmcgYmFzZWQg
b24gYml0bWFwcy4gSWYgd2UgYXJlIGNoYW5naW5nIHRoZQotICAgIC8vIGNvbXBvc2l0aW5nIG1v
ZGUsIHdlIG5lZWQgdG8gY2FwdHVyZSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcmVuZGVyaW5n
Ci0gICAgLy8gaW4gYSBiaXRtYXAsIHBlcmZvcm0gZHJhd2luZyBvcGVyYXRpb25zIHVudGlsIHdl
IGZpbmlzaCwgdGhlbiBoYW5kbGUKLSAgICAvLyB0aGUgY29tcG9zdGluZyBvZiB0aGUgdHdvIGxh
eWVycy4KLSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldChR
dWVyeSwgbV9yZW5kZXJUYXJnZXQuZ2V0KCkpOwotICAgIGlmICghYml0bWFwVGFyZ2V0KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBlbmREcmF3KCk7Ci0KLSAgICBtX2NvbXBvc2l0ZU1vZGUgPSBt
b2RlOwotICAgIG1fYmxlbmRNb2RlID0gYmxlbmQ7Ci0KLSAgICBtX2NvbXBvc2l0ZVNvdXJjZSA9
IERpcmVjdDJEOjpjcmVhdGVCaXRtYXBDb3B5RnJvbUNvbnRleHQoYml0bWFwVGFyZ2V0LmdldCgp
KTsKLQotICAgIGJlZ2luRHJhdygpOwotCi0gICAgbV9kZXZpY2VDb250ZXh0LT5DbGVhcihEMkQx
OjpDb2xvckYoMCwgMCwgMCwgMCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaAko
cmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMTAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDxkMmQx
XzEuaD4KLSNpbmNsdWRlIDxkMmQxZWZmZWN0cy5oPgotI2luY2x1ZGUgPGQzZDExXzEuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU7Ci1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGU7Ci0KLW5hbWVzcGFjZSBEaXJlY3QyRCB7
Ci1zdHJ1Y3QgRmlsbFNvdXJjZTsKLXN0cnVjdCBTdHJva2VTb3VyY2U7Ci1zdHJ1Y3QgU2hhZG93
U3RhdGU7Ci19Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCk7Ci1wdWJsaWM6Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQoSUQyRDFS
ZW5kZXJUYXJnZXQqLCBGdW5jdGlvbjx2b2lkKCk+JiYgcHJlRHJhd0hhbmRsZXIgPSBbXSgpIHsg
fSwgRnVuY3Rpb248dm9pZCgpPiYmIHBvc3REcmF3SGFuZGxlciA9IFtdKCkgeyB9KTsKLSAgICB+
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQoKTsKLQotICAgIElEMkQxUmVuZGVyVGFyZ2V0KiByZW5k
ZXJUYXJnZXQoKSB7IHJldHVybiBtX3JlbmRlclRhcmdldC5nZXQoKTsgfQotICAgIHZvaWQgc2V0
UmVuZGVyVGFyZ2V0KElEMkQxUmVuZGVyVGFyZ2V0Kik7Ci0KLSAgICBJRDJEMURldmljZUNvbnRl
eHQqIGRldmljZUNvbnRleHQoKSB7IHJldHVybiBtX2RldmljZUNvbnRleHQuZ2V0KCk7IH0KLQot
ICAgIElEM0QxMURldmljZTEqIGQzZERldmljZSgpIGNvbnN0IHsgcmV0dXJuIG1fZDNkRGV2aWNl
LmdldCgpOyB9Ci0gICAgdm9pZCBzZXREM0REZXZpY2UoSUQzRDExRGV2aWNlMSogZGV2aWNlKSB7
IG1fZDNkRGV2aWNlID0gZGV2aWNlOyB9Ci0KLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUqIGdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSB7IHJldHVybiBtX2dyYXBoaWNzQ29udGV4
dFByaXZhdGU7IH0KLSAgICB2b2lkIHNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUoR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKiBncmFwaGljc0NvbnRleHRQcml2YXRlKSB7IG1fZ3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZSA9IGdyYXBoaWNzQ29udGV4dFByaXZhdGU7IH0KLQotICAgIElEMkQx
TGF5ZXIqIGNsaXBMYXllcigpIGNvbnN0OwotICAgIElEMkQxU3Ryb2tlU3R5bGUqIHN0cm9rZVN0
eWxlKCk7Ci0gICAgRDJEMV9TVFJPS0VfU1RZTEVfUFJPUEVSVElFUyBzdHJva2VTdHlsZVByb3Bl
cnRpZXMoKSBjb25zdDsKLSAgICBJRDJEMVN0cm9rZVN0eWxlKiBwbGF0Zm9ybVN0cm9rZVN0eWxl
KCkgY29uc3Q7Ci0KLSAgICBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IGJydXNoV2l0aENv
bG9yKGNvbnN0IEQyRDFfQ09MT1JfRiYpOwotCi0gICAgdm9pZCBzYXZlKCk7Ci0gICAgdm9pZCBy
ZXN0b3JlKCk7Ci0KLSAgICBib29sIGhhc1NhdmVkU3RhdGUoKSBjb25zdCB7IHJldHVybiAhbV9z
dGF0ZVN0YWNrLmlzRW1wdHkoKTsgfQotCi0gICAgdm9pZCBiZWdpbkRyYXcoKTsKLSAgICB2b2lk
IGVuZERyYXcoKTsKLQotICAgIGVudW0gRGlyZWN0MkRMYXllclR5cGUgeyBBeGlzQWxpZ25lZENs
aXAsIExheWVyQ2xpcCB9OwotICAgIHZvaWQgcHVzaFJlbmRlckNsaXAoRGlyZWN0MkRMYXllclR5
cGUpOwotICAgIHZvaWQgc2V0QWN0aXZlTGF5ZXIoQ09NUHRyPElEMkQxTGF5ZXI+JiYpOwotCi0g
ICAgdm9pZCByZWNvbXB1dGVTdHJva2VTdHlsZSgpOwotICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVz
cygpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlVGhpY2tuZXNzOyB9Ci0KLSAgICBzdHJ1Y3QgVHJh
bnNwYXJlbmN5TGF5ZXJTdGF0ZSB7Ci0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRh
cmdldD4gcmVuZGVyVGFyZ2V0OwotICAgICAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICAgICAg
RmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICAgICAgZmxvYXQgb3BhY2l0eSB7IDEuMCB9Owot
ICAgICAgICBmbG9hdCBzaGFkb3dCbHVyIHsgMCB9OwotICAgICAgICBib29sIGhhc1NoYWRvdyB7
IGZhbHNlIH07Ci0gICAgfTsKLSAgICBWZWN0b3I8VHJhbnNwYXJlbmN5TGF5ZXJTdGF0ZT4gbV90
cmFuc3BhcmVuY3lMYXllclN0YWNrOwotCi0gICAgdm9pZCBzZXRMaW5lQ2FwKEQyRDFfQ0FQX1NU
WUxFKTsKLSAgICB2b2lkIHNldExpbmVKb2luKEQyRDFfTElORV9KT0lOKTsKLSAgICB2b2lkIHNl
dFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlKTsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQp
OwotICAgIHZvaWQgc2V0RGFzaE9mZnNldChmbG9hdCk7Ci0gICAgdm9pZCBzZXRQYXR0ZXJuV2lk
dGgoZmxvYXQpOwotICAgIHZvaWQgc2V0UGF0dGVybk9mZnNldChmbG9hdCk7Ci0gICAgdm9pZCBz
ZXRTdHJva2VUaGlja25lc3MoZmxvYXQpOwotICAgIHZvaWQgc2V0RGFzaGVzKGNvbnN0IERhc2hB
cnJheSYpOwotCi0gICAgdm9pZCBzZXRCbGVuZEFuZENvbXBvc2l0ZU1vZGUoRDJEMV9CTEVORF9N
T0RFLCBEMkQxX0NPTVBPU0lURV9NT0RFKTsKLQotICAgIHZvaWQgc2V0VGFncyhEMkQxX1RBRyB0
YWcxLCBEMkQxX1RBRyB0YWcyKTsKLSAgICB2b2lkIG5vdGlmeVByZURyYXdPYnNlcnZlcigpOwot
ICAgIHZvaWQgbm90aWZ5UG9zdERyYXdPYnNlcnZlcigpOwotCi0gICAgdm9pZCBwdXNoQ2xpcChE
aXJlY3QyRExheWVyVHlwZSk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjbGVhckNsaXBzKFZlY3Rv
cjxEaXJlY3QyRExheWVyVHlwZT4mKTsKLSAgICB2b2lkIGNvbXBvc2l0ZUlmTmVlZGVkKCk7Ci0K
LSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIG1fZ3JhcGhpY3NDb250ZXh0UHJp
dmF0ZSB7IG51bGxwdHIgfTsKLQotICAgIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gbV9yZW5k
ZXJUYXJnZXQ7Ci0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gbV9kZXZpY2VDb250ZXh0
OwotICAgIENPTVB0cjxJRDJEMVN0cm9rZVN0eWxlPiBtX2QyZFN0cm9rZVN0eWxlOwotCi0gICAg
SGFzaE1hcDx1aW50MzJfdCwgQ09NUHRyPElEMkQxU29saWRDb2xvckJydXNoPj4gbV9zb2xpZENv
bG9yZWRCcnVzaENhY2hlOwotICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gbV93aGl0
ZUJydXNoOwotICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gbV96ZXJvQnJ1c2g7Ci0g
ICAgQ09NUHRyPElEMkQxU29saWRDb2xvckJydXNoPiBtX3NvbGlkU3Ryb2tlQnJ1c2g7Ci0gICAg
Q09NUHRyPElEMkQxU29saWRDb2xvckJydXNoPiBtX3NvbGlkRmlsbEJydXNoOwotICAgIENPTVB0
cjxJRDJEMUJpdG1hcEJydXNoPiBtX3BhdHRlcm5TdHJva2VCcnVzaDsKLSAgICBDT01QdHI8SUQy
RDFCaXRtYXBCcnVzaD4gbV9wYXR0ZXJuRmlsbEJydXNoOwotCi0gICAgQ09NUHRyPElEM0QxMURl
dmljZTE+IG1fZDNkRGV2aWNlOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBtX2NvbXBvc2l0
ZVNvdXJjZTsKLQotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9wcmVEcmF3SGFuZGxlcjsKLSAgICBG
dW5jdGlvbjx2b2lkKCk+IG1fcG9zdERyYXdIYW5kbGVyOwotCi0gICAgY2xhc3MgU3RhdGU7Ci0g
ICAgU3RhdGUqIG1fc3RhdGUgeyBudWxscHRyIH07Ci0gICAgVmVjdG9yPFN0YXRlPiBtX3N0YXRl
U3RhY2s7Ci0KLSAgICBEMkQxX0NBUF9TVFlMRSBtX2xpbmVDYXAgeyBEMkQxX0NBUF9TVFlMRV9G
TEFUIH07Ci0gICAgRDJEMV9MSU5FX0pPSU4gbV9saW5lSm9pbiB7IEQyRDFfTElORV9KT0lOX01J
VEVSIH07Ci0gICAgU3Ryb2tlU3R5bGUgbV9zdHJva2VTdHlsZSB7IFNvbGlkU3Ryb2tlIH07Ci0g
ICAgRGFzaEFycmF5IG1fZGFzaGVzOwotCi0gICAgdW5zaWduZWQgYmVnaW5EcmF3Q291bnQgeyAw
IH07Ci0KLSAgICBmbG9hdCBtX21pdGVyTGltaXQgeyAxMC4wZiB9OwotICAgIGZsb2F0IG1fZGFz
aE9mZnNldCB7IDAgfTsKLSAgICBmbG9hdCBtX3BhdHRlcm5XaWR0aCB7IDEuMGYgfTsKLSAgICBm
bG9hdCBtX3BhdHRlcm5PZmZzZXQgeyAwIH07Ci0gICAgZmxvYXQgbV9zdHJva2VUaGlja25lc3Mg
eyAwIH07Ci0gICAgZmxvYXQgbV9hbHBoYSB7IDEuMCB9OwotCi0gICAgYm9vbCBtX3N0cm9rZVN5
bGVJc0RpcnR5IHsgZmFsc2UgfTsKLQotICAgIEQyRDFfQkxFTkRfTU9ERSBtX2JsZW5kTW9kZSB7
IEQyRDFfQkxFTkRfTU9ERV9NVUxUSVBMWSB9OwotICAgIEQyRDFfQ09NUE9TSVRFX01PREUgbV9j
b21wb3NpdGVNb2RlIHsgRDJEMV9DT01QT1NJVEVfTU9ERV9TT1VSQ0VfT1ZFUiB9OwotCi0gICAg
ZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOwotfTsKLQotY2xhc3MgUGxhdGZvcm1Db250ZXh0U3RhdGVT
YXZlciB7Ci1wdWJsaWM6Ci0gICAgUGxhdGZvcm1Db250ZXh0U3RhdGVTYXZlcihQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYgY29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCi0gICAg
ICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgICAgICwgbV9zYXZlQW5kUmVzdG9yZShzYXZl
QW5kUmVzdG9yZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAg
ICAgICAgbV9jb250ZXh0LnNhdmUoKTsKLSAgICB9Ci0KLSAgICB+UGxhdGZvcm1Db250ZXh0U3Rh
dGVTYXZlcigpCi0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAg
ICAgIG1fY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBzYXZlKCkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIG1fY29udGV4dC5z
YXZlKCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSB0cnVlOwotICAgIH0KLQotICAgIHZv
aWQgcmVzdG9yZSgpCi0gICAgewotICAgICAgICBBU1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7Ci0g
ICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBm
YWxzZTsKLSAgICB9Ci0KLSAgICBib29sIGRpZFNhdmUoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fc2F2ZUFuZFJlc3RvcmU7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJiBtX2NvbnRleHQ7Ci0gICAgYm9vbCBtX3NhdmVBbmRSZXN0b3JlIHsg
ZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShE
SVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1w
bGVGb250RGF0YURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4
NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250
RGF0YURpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDIxOCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAi
RGlyZWN0V3JpdGVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRl
ICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJH
bHlwaFBhZ2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIV25k
REMuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgPGNvbXV0aWwuaD4K
LSNpbmNsdWRlIDxkd3JpdGVfMy5oPgotI2luY2x1ZGUgPG1sYW5nLmg+Ci0jaW5jbHVkZSA8dW5p
Y29kZS91Y2hhci5oPgotI2luY2x1ZGUgPHVuaWNvZGUvdW5vcm0uaD4KLSNpbmNsdWRlIDx3aW5z
b2NrMi5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXN0YXRpYyBWZWN0b3I8V0NIQVI+IGdldEZhY2VOYW1lKElEV3JpdGVGb250KiBm
b250KQotewotICAgIGlmICghZm9udCkKLSAgICAgICAgcmV0dXJuIFZlY3RvcjxXQ0hBUj4oKTsK
LQotICAgIENPTVB0cjxJRFdyaXRlTG9jYWxpemVkU3RyaW5ncz4gbG9jYWxpemVkRmFjZU5hbWVz
OwotICAgIEhSRVNVTFQgaHIgPSBmb250LT5HZXRGYWNlTmFtZXMoJmxvY2FsaXplZEZhY2VOYW1l
cyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBVSU5UMzIgbG9j
YWxlSW5kZXggPSAwOwotICAgIEJPT0wgZXhpc3RzID0gZmFsc2U7Ci0KLSAgICB3Y2hhcl90IGxv
Y2FsZU5hbWVbTE9DQUxFX05BTUVfTUFYX0xFTkdUSF07Ci0gICAgaW50IGxvY2FsZUxlbmd0aCA9
IEdldFVzZXJEZWZhdWx0TG9jYWxlTmFtZShsb2NhbGVOYW1lLCBMT0NBTEVfTkFNRV9NQVhfTEVO
R1RIKTsKLSAgICBpZiAobG9jYWxlTGVuZ3RoKQotICAgICAgICBociA9IGxvY2FsaXplZEZhY2VO
YW1lcy0+RmluZExvY2FsZU5hbWUobG9jYWxlTmFtZSwgJmxvY2FsZUluZGV4LCAmZXhpc3RzKTsK
LQotICAgIGlmICghZXhpc3RzIHx8ICFTVUNDRUVERUQoaHIpKQotICAgICAgICBociA9IGxvY2Fs
aXplZEZhY2VOYW1lcy0+RmluZExvY2FsZU5hbWUoTCJlbi11cyIsICZsb2NhbGVJbmRleCwgJmV4
aXN0cyk7Ci0KLSAgICBpZiAoIWV4aXN0cyB8fCAhU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgbG9j
YWxlSW5kZXggPSAwOwotCi0gICAgVUlOVDMyIGZhY2VOYW1lTGVuZ3RoID0gMDsKLSAgICBociA9
IGxvY2FsaXplZEZhY2VOYW1lcy0+R2V0U3RyaW5nTGVuZ3RoKGxvY2FsZUluZGV4LCAmZmFjZU5h
bWVMZW5ndGgpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIFZlY3Rv
cjxXQ0hBUj4oKTsKLQotICAgIFZlY3RvcjxXQ0hBUj4gZmFjZU5hbWUoZmFjZU5hbWVMZW5ndGgg
KyAxKTsKLSAgICBociA9IGxvY2FsaXplZEZhY2VOYW1lcy0+R2V0U3RyaW5nKGxvY2FsZUluZGV4
LCBmYWNlTmFtZS5kYXRhKCksIGZhY2VOYW1lLnNpemUoKSk7Ci0KLSAgICByZXR1cm4gZmFjZU5h
bWU7Ci19Ci0KLXZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKLXsKLSAgICBtX3N5bnRoZXRpY0Jv
bGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyAxLjBmIDogMC5mOwot
ICAgIG1fc2NyaXB0Q2FjaGUgPSAwOwotICAgIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMgPSAwOwot
Ci0gICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKQotICAgICAgICByZXR1cm4gaW5pdEdE
SUZvbnQoKTsKLQotICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsK
LQotICAgIGF1dG8gZm9udCA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9udCgpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKGZvbnQpOwotCi0gICAgYXV0byBmb250RmFjZSA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9u
dEZhY2UoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChmb250RmFjZSk7Ci0KLSAgICBEV1JJVEVfRk9O
VF9NRVRSSUNTIGZvbnRNZXRyaWNzOwotICAgIGZvbnQtPkdldE1ldHJpY3MoJmZvbnRNZXRyaWNz
KTsKLQotICAgIGludCBpQXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50OwotICAgIGludCBpRGVz
Y2VudCA9IGZvbnRNZXRyaWNzLmRlc2NlbnQ7Ci0gICAgaW50IGlMaW5lR2FwID0gZm9udE1ldHJp
Y3MubGluZUdhcDsKLSAgICBpbnQgaUNhcEhlaWdodCA9IGZvbnRNZXRyaWNzLmNhcEhlaWdodDsK
LQotICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0gPSBmb250TWV0cmljcy5kZXNpZ25Vbml0c1BlckVt
OwotICAgIGZsb2F0IGZBc2NlbnQgPSBzY2FsZUVtVG9Vbml0cyhpQXNjZW50LCB1bml0c1BlckVt
KSAqIHBvaW50U2l6ZTsKLSAgICBmbG9hdCBmRGVzY2VudCA9IHNjYWxlRW1Ub1VuaXRzKGlEZXNj
ZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLSAgICBmbG9hdCBmQ2FwSGVpZ2h0ID0gc2Nh
bGVFbVRvVW5pdHMoaUNhcEhlaWdodCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgZmxv
YXQgZkxpbmVHYXAgPSBzY2FsZUVtVG9Vbml0cyhpTGluZUdhcCwgdW5pdHNQZXJFbSkgKiBwb2lu
dFNpemU7Ci0KLSAgICBpZiAob3JpZ2luKCkgPT0gT3JpZ2luOjpMb2NhbCkgewotICAgICAgICBW
ZWN0b3I8V0NIQVI+IGZhY2VOYW1lID0gZ2V0RmFjZU5hbWUoZm9udCk7Ci0gICAgICAgIGZBc2Nl
bnQgPSBhc2NlbnRDb25zaWRlcmluZ01hY0FzY2VudEhhY2soZmFjZU5hbWUuZGF0YSgpLCBmQXNj
ZW50LCBmRGVzY2VudCk7Ci0gICAgfQotCi0gICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQoZkFz
Y2VudCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50KGZEZXNjZW50KTsKLSAgICBtX2Zv
bnRNZXRyaWNzLnNldENhcEhlaWdodChmQ2FwSGVpZ2h0KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNl
dExpbmVHYXAoZkxpbmVHYXApOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcobHJv
dW5kZihmQXNjZW50KSArIGxyb3VuZGYoZkRlc2NlbnQpICsgbHJvdW5kZihmTGluZUdhcCkpOwot
Ci0gICAgR2x5cGggeEdseXBoID0gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCd4JykuZ2x5cGg7Ci0K
LSAgICBpZiAoeEdseXBoKSB7Ci0gICAgICAgIC8vIE1lYXN1cmUgdGhlIGFjdHVhbCBjaGFyYWN0
ZXIgIngiLCBzaW5jZSBpdCdzIHBvc3NpYmxlIGZvciBpdCB0byBleHRlbmQgYmVsb3cgdGhlIGJh
c2VsaW5lLCBhbmQgd2UgbmVlZCB0aGUKLSAgICAgICAgLy8gcmVwb3J0ZWQgeC1oZWlnaHQgdG8g
b25seSBpbmNsdWRlIHRoZSBwb3J0aW9uIG9mIHRoZSBnbHlwaCB0aGF0IGlzIGFib3ZlIHRoZSBi
YXNlbGluZS4KLSAgICAgICAgVmVjdG9yPERXUklURV9HTFlQSF9NRVRSSUNTPiBnbHlwaE1ldHJp
Y3MoMSk7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBmb250RmFjZS0+R2V0RGVzaWduR2x5cGhNZXRy
aWNzKCZ4R2x5cGgsIDEsIGdseXBoTWV0cmljcy5kYXRhKCksIG1fcGxhdGZvcm1EYXRhLm9yaWVu
dGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCk7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgICAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQo
c2NhbGVFbVRvVW5pdHMoZ2x5cGhNZXRyaWNzLmZpcnN0KCkudmVydGljYWxPcmlnaW5ZLCB1bml0
c1BlckVtKSAqIHBvaW50U2l6ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50IGlYSGVpZ2h0
ID0gZm9udE1ldHJpY3MueEhlaWdodDsKLSAgICAgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0
KHNjYWxlRW1Ub1VuaXRzKGlYSGVpZ2h0LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7Ci0gICAg
fQotCi0gICAgbV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVyRW0pOwotfQotCi1G
bG9hdFJlY3QgRm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QK
LXsKLSAgICBpZiAoIXBsYXRmb3JtRGF0YSgpLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0
UmVjdCgpOwotCi0gICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKQotICAgICAgICByZXR1
cm4gYm91bmRzRm9yR0RJR2x5cGgoZ2x5cGgpOwotCi0gICAgYXV0byBmb250ID0gbV9wbGF0Zm9y
bURhdGEuZHdGb250KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZm9udCk7Ci0KLSAgICBhdXRvIGZv
bnRGYWNlID0gbV9wbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpOwotICAgIFJFTEVBU0VfQVNTRVJU
KGZvbnRGYWNlKTsKLQotICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUo
KTsKLSAgICBib29sIHZlcnRpY2FsID0gbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBG
b250T3JpZW50YXRpb246OlZlcnRpY2FsOwotCi0gICAgVmVjdG9yPERXUklURV9HTFlQSF9NRVRS
SUNTPiBnbHlwaE1ldHJpY3MoMSk7Ci0gICAgSFJFU1VMVCBociA9IGZvbnRGYWNlLT5HZXREZXNp
Z25HbHlwaE1ldHJpY3MoJmdseXBoLCAxLCBnbHlwaE1ldHJpY3MuZGF0YSgpLCBtX3BsYXRmb3Jt
RGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpOwotICAgIFJF
TEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgY29uc3QgYXV0byYgbWV0cmljcyA9
IGdseXBoTWV0cmljcy5maXJzdCgpOwotCi0gICAgdW5zaWduZWQgdW5pdHNQZXJFbSA9IG1fZm9u
dE1ldHJpY3MudW5pdHNQZXJFbSgpOwotCi0gICAgRmxvYXRQb2ludCBvcmlnaW4oc2NhbGVFbVRv
VW5pdHMobWV0cmljcy5sZWZ0U2lkZUJlYXJpbmcsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplLCBz
Y2FsZUVtVG9Vbml0cyhtZXRyaWNzLnZlcnRpY2FsT3JpZ2luWSwgdW5pdHNQZXJFbSkgKiBwb2lu
dFNpemUpOwotICAgIEZsb2F0U2l6ZSBzaXplKHNjYWxlRW1Ub1VuaXRzKG1ldHJpY3MuYWR2YW5j
ZVdpZHRoIC0gbWV0cmljcy5sZWZ0U2lkZUJlYXJpbmcgLSBtZXRyaWNzLnJpZ2h0U2lkZUJlYXJp
bmcsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplLAotICAgICAgICBzY2FsZUVtVG9Vbml0cyhtZXRy
aWNzLmFkdmFuY2VIZWlnaHQgLSBtZXRyaWNzLnRvcFNpZGVCZWFyaW5nIC0gbWV0cmljcy5ib3R0
b21TaWRlQmVhcmluZywgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOwotCi0gICAgRmxvYXRSZWN0
IGJvdW5kaW5nQm94KG9yaWdpbiwgc2l6ZSk7Ci0gICAgaWYgKG1fc3ludGhldGljQm9sZE9mZnNl
dCkKLSAgICAgICAgYm91bmRpbmdCb3guc2V0V2lkdGgoYm91bmRpbmdCb3gud2lkdGgoKSArIG1f
c3ludGhldGljQm9sZE9mZnNldCk7Ci0KLSAgICByZXR1cm4gYm91bmRpbmdCb3g7Ci19Ci0KLWZs
b2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAg
ICBpZiAoIXBsYXRmb3JtRGF0YSgpLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBp
ZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpCi0gICAgICAgIHJldHVybiB3aWR0aEZvckdESUds
eXBoKGdseXBoKTsKLQotICAgIGF1dG8gZm9udCA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9udCgpOwot
ICAgIFJFTEVBU0VfQVNTRVJUKGZvbnQpOwotCi0gICAgYXV0byBmb250RmFjZSA9IG1fcGxhdGZv
cm1EYXRhLmR3Rm9udEZhY2UoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChmb250RmFjZSk7Ci0KLSAg
ICBib29sIGlzVmVydGljYWwgPSBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRP
cmllbnRhdGlvbjo6VmVydGljYWw7Ci0KLSAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX01FVFJJQ1M+
IGdseXBoTWV0cmljcygxKTsKLSAgICBIUkVTVUxUIGhyID0gZm9udEZhY2UtPkdldERlc2lnbkds
eXBoTWV0cmljcygmZ2x5cGgsIDEsIGdseXBoTWV0cmljcy5kYXRhKCksIGlzVmVydGljYWwpOwot
ICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgY29uc3QgYXV0byYgbWV0
cmljcyA9IGdseXBoTWV0cmljcy5maXJzdCgpOwotICAgIGludCB3aWR0aEluRW0gPSBtZXRyaWNz
LmFkdmFuY2VXaWR0aDsKLQotICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNp
emUoKTsKLSAgICB1bnNpZ25lZCB1bml0c1BlckVtID0gbV9mb250TWV0cmljcy51bml0c1BlckVt
KCk7Ci0gICAgZmxvYXQgd2lkdGggPSBzY2FsZUVtVG9Vbml0cyh3aWR0aEluRW0sIHVuaXRzUGVy
RW0pICogcG9pbnRTaXplOwotCi0gICAgcmV0dXJuIHdpZHRoICsgbV9zeW50aGV0aWNCb2xkT2Zm
c2V0OwotfQotCi1QYXRoIEZvbnQ6OnBsYXRmb3JtUGF0aEZvckdseXBoKEdseXBoKSBjb25zdAot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFBhdGgoKTsKLX0KLQotfQotCi0j
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5h
bHl6ZXJIZWxwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNw
cAkobm9uZXhpc3RlbnQpCkBAIC0xLDE0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGV4dEFuYWx5emVySGVscGVyLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotVGV4dEFuYWx5emVySGVscGVyOjpUZXh0QW5hbHl6ZXJIZWxwZXIoY29uc3Qg
V0NIQVIqIGxvY2FsZU5hbWUsIGNvbnN0IFdDSEFSKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxl
bmd0aCkKLSAgICA6IG1fbG9jYWxlTmFtZShsb2NhbGVOYW1lKQotICAgICwgbV9idWZmZXIoYnVm
ZmVyKQotICAgICwgbV9idWZmZXJMZW5ndGgoYnVmZmVyTGVuZ3RoKQotewotfQotCi1IUkVTVUxU
IFRleHRBbmFseXplckhlbHBlcjo6UXVlcnlJbnRlcmZhY2UoX0luXyBSRUZJSUQgcmlpZCwgX0NP
TV9PdXRwdHJfIHZvaWQqKiBwcHZPYmplY3QpCi17Ci0gICAgaWYgKCFwcHZPYmplY3QpCi0gICAg
ICAgIHJldHVybiBFX1BPSU5URVI7Ci0gICAgKnBwdk9iamVjdCA9IG51bGxwdHI7Ci0gICAgaWYg
KElzRXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9mKElEV3JpdGVUZXh0QW5hbHlzaXNTaW5rKSkpCi0g
ICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJRFdyaXRlVGV4dEFuYWx5c2lzU2luayo+
KHRoaXMpOwotICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9mKElEV3JpdGVU
ZXh0QW5hbHlzaXNTb3VyY2UpKSkKLSAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElE
V3JpdGVUZXh0QW5hbHlzaXNTaW5rKj4odGhpcyk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4g
RV9GQUlMOwotCi0gICAgQWRkUmVmKCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLVVMT05HIFRl
eHRBbmFseXplckhlbHBlcjo6QWRkUmVmKCkKLXsKLSAgICByZXR1cm4gKyttX3JlZkNvdW50Owot
fQotCi1VTE9ORyBUZXh0QW5hbHl6ZXJIZWxwZXI6OlJlbGVhc2UoKQotewotICAgIFVMT05HIG5l
d1JlZiA9IC0tbV9yZWZDb3VudDsKLSAgICBpZiAoIW5ld1JlZikKLSAgICAgICAgZGVsZXRlKHRo
aXMpOwotCi0gICAgcmV0dXJuIG5ld1JlZjsKLX0KLQotSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxw
ZXI6OkdldFRleHRBdFBvc2l0aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIGNvbnN0IFdDSEFSKiog
dGV4dFN0cmluZywgVUlOVDMyKiB0ZXh0TGVuZ3RoKQotewotICAgIGlmICghdGV4dFN0cmluZyB8
fCAhdGV4dExlbmd0aCkKLSAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLQotICAgIGlmICh0ZXh0
UG9zaXRpb24gPj0gbV9idWZmZXJMZW5ndGgpIHsKLSAgICAgICAgKnRleHRTdHJpbmcgPSBudWxs
cHRyOwotICAgICAgICAqdGV4dExlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybiBTX09LOwotICAg
IH0KLQotICAgICp0ZXh0U3RyaW5nID0gJm1fYnVmZmVyW3RleHRQb3NpdGlvbl07Ci0gICAgKnRl
eHRMZW5ndGggPSBtX2J1ZmZlckxlbmd0aCAtIHRleHRQb3NpdGlvbjsKLQotICAgIHJldHVybiBT
X09LOwotfQotCi1IUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6R2V0VGV4dEJlZm9yZVBvc2l0
aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIGNvbnN0IFdDSEFSKiogdGV4dFN0cmluZywgVUlOVDMy
KiB0ZXh0TGVuZ3RoKQotewotICAgIGlmICghdGV4dFN0cmluZyB8fCAhdGV4dExlbmd0aCkKLSAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLQotICAgIGlmICghdGV4dFBvc2l0aW9uIHx8IHRleHRQ
b3NpdGlvbiA+IG1fYnVmZmVyTGVuZ3RoKSB7Ci0gICAgICAgICp0ZXh0U3RyaW5nID0gbnVsbHB0
cjsKLSAgICAgICAgKnRleHRMZW5ndGggPSAwOwotICAgICAgICByZXR1cm4gU19PSzsKLSAgICB9
Ci0KLSAgICAqdGV4dFN0cmluZyA9ICZtX2J1ZmZlclswXTsKLSAgICAqdGV4dExlbmd0aCA9IHRl
eHRQb3NpdGlvbjsKLQotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFRleHRBbmFseXpl
ckhlbHBlcjo6R2V0TG9jYWxlTmFtZShVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIqIHRleHRM
ZW5ndGgsIGNvbnN0IFdDSEFSKiogbG9jYWxlTmFtZSkKLXsKLSAgICAqbG9jYWxlTmFtZSA9IG1f
bG9jYWxlTmFtZTsKLSAgICAqdGV4dExlbmd0aCA9IG1fYnVmZmVyTGVuZ3RoIC0gdGV4dFBvc2l0
aW9uOwotCi0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgVGV4dEFuYWx5emVySGVscGVy
OjpHZXROdW1iZXJTdWJzdGl0dXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyKiB0ZXh0
TGVuZ3RoLCBJRFdyaXRlTnVtYmVyU3Vic3RpdHV0aW9uKiogbnVtYmVyU3Vic3RpdHV0aW9uKQot
ewotICAgICp0ZXh0TGVuZ3RoID0gbV9idWZmZXJMZW5ndGggLSB0ZXh0UG9zaXRpb247Ci0gICAg
cmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpTZXRMaW5lQnJl
YWtwb2ludHMoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIGNvbnN0IERX
UklURV9MSU5FX0JSRUFLUE9JTlQqKQotewotICAgIHJldHVybiBFX05PVElNUEw7Ci19Ci0KLUhS
RVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpTZXRTY3JpcHRBbmFseXNpcyhVSU5UMzIgdGV4dFBv
c2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgY29uc3QgRFdSSVRFX1NDUklQVF9BTkFMWVNJUyog
YW5hbHlzaXMpCi17Ci0gICAgQW5hbHl6ZWRSdW4gY3VycmVudCA9IHsgdGV4dFBvc2l0aW9uLCB0
ZXh0TGVuZ3RoLCAqYW5hbHlzaXMgfTsKLSAgICBtX2FuYWx5emVkUnVucy5hcHBlbmQoV1RGTW92
ZShjdXJyZW50KSk7Ci0KLSAgICByZXR1cm4gU19PSzsKLX0KLQotSFJFU1VMVCBUZXh0QW5hbHl6
ZXJIZWxwZXI6OlNldEJpZGlMZXZlbChVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExl
bmd0aCwgVUlOVDggZXhwbGljaXRMZXZlbCwgVUlOVDggcmVzb2x2ZWRMZXZlbCkKLXsKLSAgICBy
ZXR1cm4gRV9OT1RJTVBMOwotfQotCi1IUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6U2V0TnVt
YmVyU3Vic3RpdHV0aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBJ
RFdyaXRlTnVtYmVyU3Vic3RpdHV0aW9uKikKLXsKLSAgICByZXR1cm4gRV9OT1RJTVBMOwotfQot
Ci19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1RleHRBbmFseXplckhlbHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuaAkocmV2aXNpb24gMjg3ODAzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhlbHBl
ci5oCShub25leGlzdGVudCkKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxkd3Jp
dGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
c3RydWN0IEFuYWx5emVkUnVuIHsKLSAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uIHsgMCB9Owot
ICAgIHVuc2lnbmVkIGxlbmd0aCB7IDAgfTsKLSAgICBEV1JJVEVfU0NSSVBUX0FOQUxZU0lTIGFu
YWx5c2lzOwotfTsKLQotc3RydWN0IFRleHRBbmFseXplckhlbHBlciA6IHB1YmxpYyBJRFdyaXRl
VGV4dEFuYWx5c2lzU2luaywgSURXcml0ZVRleHRBbmFseXNpc1NvdXJjZSB7Ci0gICAgVGV4dEFu
YWx5emVySGVscGVyKGNvbnN0IFdDSEFSKiBsb2NhbGVOYW1lLCBjb25zdCBXQ0hBUiogYnVmZmVy
LCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpOwotCi0gICAgLy8gSVVua25vd24KLSAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoX0luXyBSRUZJSUQsIF9D
T01fT3V0cHRyXyB2b2lkKiopOwotICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUg
QWRkUmVmKCk7Ci0gICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBSZWxlYXNlKCk7
Ci0KLSAgICAvLyBJRFdyaXRlVGV4dEFuYWx5c2lzU291cmNlIAotICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBHZXRUZXh0QXRQb3NpdGlvbihVSU5UMzIgdGV4dFBvc2l0aW9u
LCBjb25zdCBXQ0hBUioqIHRleHRTdHJpbmcsIFVJTlQzMiogdGV4dExlbmd0aCk7Ci0gICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldFRleHRCZWZvcmVQb3NpdGlvbihVSU5U
MzIgdGV4dFBvc2l0aW9uLCBjb25zdCBXQ0hBUioqIHRleHRTdHJpbmcsIFVJTlQzMiogdGV4dExl
bmd0aCk7Ci0gICAgdmlydHVhbCBEV1JJVEVfUkVBRElOR19ESVJFQ1RJT04gU1RETUVUSE9EQ0FM
TFRZUEUgR2V0UGFyYWdyYXBoUmVhZGluZ0RpcmVjdGlvbigpIHsgcmV0dXJuIERXUklURV9SRUFE
SU5HX0RJUkVDVElPTl9MRUZUX1RPX1JJR0hUOyB9Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIEdldExvY2FsZU5hbWUoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyKiB0
ZXh0TGVuZ3RoLCBjb25zdCBXQ0hBUioqIGxvY2FsZU5hbWUpOwotICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBHZXROdW1iZXJTdWJzdGl0dXRpb24oVUlOVDMyIHRleHRQb3Np
dGlvbiwgVUlOVDMyKiB0ZXh0TGVuZ3RoLCBJRFdyaXRlTnVtYmVyU3Vic3RpdHV0aW9uKiopOwot
Ci0gICAgLy8gSURXcml0ZVRleHRBbmFseXNpc1NpbmsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgU2V0TGluZUJyZWFrcG9pbnRzKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJ
TlQzMiB0ZXh0TGVuZ3RoLCBjb25zdCBEV1JJVEVfTElORV9CUkVBS1BPSU5UKik7Ci0gICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldFNjcmlwdEFuYWx5c2lzKFVJTlQzMiB0
ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBjb25zdCBEV1JJVEVfU0NSSVBUX0FOQUxZ
U0lTKik7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldEJpZGlMZXZl
bChVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgVUlOVDggZXhwbGljaXRM
ZXZlbCwgVUlOVDggcmVzb2x2ZWRMZXZlbCk7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFNldE51bWJlclN1YnN0aXR1dGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5U
MzIgdGV4dExlbmd0aCwgSURXcml0ZU51bWJlclN1YnN0aXR1dGlvbiopOwotCi0gICAgY29uc3Qg
V0NIQVIqIG1fbG9jYWxlTmFtZSB7IG51bGxwdHIgfTsKLSAgICBjb25zdCBXQ0hBUiogbV9idWZm
ZXIgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQgbV9idWZmZXJMZW5ndGggeyAwIH07Ci0gICAg
VmVjdG9yPEFuYWx5emVkUnVuPiBtX2FuYWx5emVkUnVuczsKLSAgICBVTE9ORyBtX3JlZkNvdW50
IHsgMCB9OwotfTsKLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeERpcmVj
dDJELmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwCShub25leGlzdGVudCkK
QEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE2IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRp
b25NYXRyaXguaCIKLQotI2lmIFBMQVRGT1JNKFdJTikKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotCi0jaW5jbHVkZSA8ZDJkMS5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4OjpUcmFuc2Zv
cm1hdGlvbk1hdHJpeChjb25zdCBEMkQxX01BVFJJWF8zWDJfRiYgdCkKLXsKLSAgICBzZXRBKHQu
XzExKTsKLSAgICBzZXRCKHQuXzEyKTsKLSAgICBzZXRDKHQuXzIxKTsKLSAgICBzZXREKHQuXzIy
KTsKLSAgICBzZXRFKHQuXzMxKTsKLSAgICBzZXRGKHQuXzMyKTsKLX0KLQotVHJhbnNmb3JtYXRp
b25NYXRyaXg6Om9wZXJhdG9yIEQyRDFfTUFUUklYXzNYMl9GKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gRDJEMTo6TWF0cml4M3gyRihuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGEoKSksCi0gICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoYigpKSwKLSAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdChjKCkpLAotICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGQoKSksCi0gICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZSgpKSwKLSAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdChmKCkpKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtOjpBZmZpbmVUcmFuc2Zvcm0oY29uc3Qg
RDJEMV9NQVRSSVhfM1gyX0YmIHQpCi17Ci0gICAgc2V0TWF0cml4KHQuXzExLCB0Ll8xMiwgdC5f
MjEsIHQuXzIyLCB0Ll8zMSwgdC5fMzIpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9y
IEQyRDFfTUFUUklYXzNYMl9GKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRDJEMTo6TWF0cml4M3gy
RihuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGEoKSksCi0gICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoYigpKSwKLSAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjKCkpLAotICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGQoKSksCi0gICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoZSgpKSwKLSAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChmKCkpKTsKLX0KLQot
fQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VE
aXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0Ry
YWdJbWFnZURpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL0RyYWdJbWFnZURpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDEw
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRHJhZ0ltYWdlLmgiCi0KLSNpZiBVU0Uo
RElSRUNUMkQpCi0KLSNpbmNsdWRlICJCaXRtYXBJbmZvLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1h
Z2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIV25kREMuaCIK
LSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLQotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNs
dWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0
Zi93aW4vR0RJT2JqZWN0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBkZWFsbG9j
Q29udGV4dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0KQotewotICAg
IGlmIChwbGF0Zm9ybUNvbnRleHQpIHsKLSAgICAgICAgaWYgKGF1dG8qIHJlbmRlclRhcmdldCA9
IHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkpCi0gICAgICAgICAgICByZW5kZXJUYXJn
ZXQtPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLUdESU9iamVjdDxIQklUTUFQPiBhbGxvY0ltYWdl
KEhEQyBkYywgSW50U2l6ZSBzaXplLCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCoqIHBsYXRmb3Jt
Q29udGV4dCkKLXsKLSAgICBCaXRtYXBJbmZvIGJtcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUo
c2l6ZSk7Ci0KLSAgICBMUFZPSUQgYml0cyA9IG51bGxwdHI7Ci0gICAgYXV0byBoYm1wID0gYWRv
cHRHRElPYmplY3QoOjpDcmVhdGVESUJTZWN0aW9uKGRjLCAmYm1wSW5mbywgRElCX1JHQl9DT0xP
UlMsICZiaXRzLCAwLCAwKSk7Ci0KLSAgICBpZiAoIXBsYXRmb3JtQ29udGV4dCB8fCAhaGJtcCkK
LSAgICAgICAgcmV0dXJuIGhibXA7Ci0KLSAgICAvLyBGSVhNRTogVXNlIEdESSBJbnRlcm9wIGxh
eWVyIHRvIGNyZWF0ZSBIQklUTUFQIGZyb20gRDJEIEJpdG1hcAotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIGhibXA7Ci19Ci0KLURyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShE
cmFnSW1hZ2VSZWYgaW1hZ2VSZWYsIEZsb2F0U2l6ZSBzY2FsZSkKLXsKLSAgICAvLyBGSVhNRTog
ZHVlIHRvIHRoZSB3YXkgZHJhZyBpbWFnZXMgYXJlIGRvbmUgb24gd2luZG93cyB3ZSBuZWVkIAot
ICAgIC8vIHRvIHByZXByb2Nlc3MgdGhlIGFscGhhIGNoYW5uZWwgPHJkYXI6Ly9wcm9ibGVtLzUw
MTU5NDY+Ci0gICAgaWYgKCFpbWFnZVJlZikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBHRElPYmplY3Q8SEJJVE1BUD4gaGJtcDsKLSAgICBhdXRvIGltYWdlID0gYWRvcHRHRElPYmpl
Y3QoaW1hZ2VSZWYpOwotCi0gICAgSW50U2l6ZSBzcmNTaXplID0gZHJhZ0ltYWdlU2l6ZShpbWFn
ZS5nZXQoKSk7Ci0gICAgSW50U2l6ZSBkc3RTaXplKHN0YXRpY19jYXN0PGludD4oc3JjU2l6ZS53
aWR0aCgpICogc2NhbGUud2lkdGgoKSksIHN0YXRpY19jYXN0PGludD4oc3JjU2l6ZS5oZWlnaHQo
KSAqIHNjYWxlLmhlaWdodCgpKSk7Ci0KLSAgICBIV25kREMgZGMobnVsbHB0cik7Ci0gICAgYXV0
byBkc3REQyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKGRjKSk7Ci0gICAg
aWYgKGRzdERDKQotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgaWYgKCFoYm1wKQot
ICAgICAgICBoYm1wLnN3YXAoaW1hZ2UpOwotICAgIHJldHVybiBoYm1wLmxlYWsoKTsKLX0KLQot
RHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFnZSogaW1nLCBJbWFnZU9y
aWVudGF0aW9uKQotewotICAgIEhXbmREQyBkYyhudWxscHRyKTsKLSAgICBhdXRvIHdvcmtpbmdE
QyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKGRjKSk7Ci0gICAgaWYgKCF3
b3JraW5nREMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLSAgICAKLX0KLQotI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAkocmV2aXNp
b24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVy
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSwxOCArMTI5LDEzIEBAIEdyYXBoaWNzQ29udGV4
dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjppbnAKICAgICByZXR1cm4gbV9zb3VyY2VJbWFnZSA/ICZt
X3NvdXJjZUltYWdlLT5jb250ZXh0KCkgOiBudWxscHRyOwogfQogCi12b2lkIFJlbmRlckxheWVy
RmlsdGVyczo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRl
eHQmIHRhcmdldENvbnRleHQpCit2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YWxsb2NhdGVCYWNr
aW5nU3RvcmVJZk5lZWRlZCgpCiB7CiAgICAgYXV0byYgZmlsdGVyID0gKm1fZmlsdGVyOwogICAg
IGF1dG8gbG9naWNhbFNpemUgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZShtX2ZpbHRlclJl
Z2lvbi5zaXplKCkpOwogCiAgICAgaWYgKCFtX3NvdXJjZUltYWdlIHx8IG1fc291cmNlSW1hZ2Ut
PmxvZ2ljYWxTaXplKCkgIT0gbG9naWNhbFNpemUpIHsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAg
ICAgIG1fc291cmNlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBmaWx0
ZXIucmVuZGVyaW5nTW9kZSgpLCAmdGFyZ2V0Q29udGV4dCwgMSwgRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0jZWxzZQotICAgICAgICBVTlVTRURf
UEFSQU0odGFyZ2V0Q29udGV4dCk7CiAgICAgICAgIG1fc291cmNlSW1hZ2UgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBmaWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBTaG91bGRVc2VE
aXNwbGF5TGlzdDo6Tm8sIFJlbmRlcmluZ1B1cnBvc2U6OkRPTSwgMSwgRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCwgbV9sYXllci5yZW5kZXJlcigpLmhv
c3RXaW5kb3coKSk7Ci0jZW5kaWYKICAgICAgICAgaWYgKGF1dG8gY29udGV4dCA9IGlucHV0Q29u
dGV4dCgpKQogICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkp
OwogICAgIH0KQEAgLTIwMCw3ICsxOTUsNyBAQCBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVy
RmlsdGVyczo6YmVnCiAgICAgcmVzZXREaXJ0eVNvdXJjZVJlY3QoKTsKIAogICAgIGZpbHRlci5z
ZXRGaWx0ZXJSZWdpb24obV9maWx0ZXJSZWdpb24pOwotICAgIGFsbG9jYXRlQmFja2luZ1N0b3Jl
SWZOZWVkZWQoZGVzdGluYXRpb25Db250ZXh0KTsKKyAgICBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlm
TmVlZGVkKCk7CiAKICAgICBhdXRvKiBzb3VyY2VHcmFwaGljc0NvbnRleHQgPSBpbnB1dENvbnRl
eHQoKTsKICAgICBpZiAoIXNvdXJjZUdyYXBoaWNzQ29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgJKHJldmlzaW9uIDI4NzgwMykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgbm90aWZ5RmluaXNo
ZWQoQ2FjaGVkUmVzb3VyY2UmLCBjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmKSBmaW5hbDsKICAg
ICB2b2lkIHJlc2V0RGlydHlTb3VyY2VSZWN0KCkgeyBtX2RpcnR5U291cmNlUmVjdCA9IExheW91
dFJlY3QoKTsgfQogICAgIEdyYXBoaWNzQ29udGV4dCogaW5wdXRDb250ZXh0KCk7Ci0gICAgdm9p
ZCBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgdGFy
Z2V0Q29udGV4dCk7CisgICAgdm9pZCBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCk7CiAK
ICAgICBSZW5kZXJMYXllciYgbV9sYXllcjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHJldmlz
aW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0LDcgQEAgYm9vbCBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdQogI2Vsc2UKICAgICBhdXRvIGNvbG9y
U3BhY2UgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKTsKICNlbmRpZgotICAgIGF1dG8g
c291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZp
bHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwg
ZmlsdGVyRGF0YS0+ZmlsdGVyLT5yZW5kZXJpbmdNb2RlKCksIHJlbmRlcmVyLmhvc3RXaW5kb3co
KSwgY29udGV4dCk7CisgICAgYXV0byBzb3VyY2VHcmFwaGljID0gU1ZHUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgZWZmZWN0aXZl
VHJhbnNmb3JtLCBjb2xvclNwYWNlLCBmaWx0ZXJEYXRhLT5maWx0ZXItPnJlbmRlcmluZ01vZGUo
KSwgcmVuZGVyZXIuaG9zdFdpbmRvdygpKTsKICAgICBpZiAoIXNvdXJjZUdyYXBoaWMpIHsKICAg
ICAgICAgQVNTRVJUKG1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJlcikp
OwogICAgICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZU1hc2tlci5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3
ICs4NCw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5UmVzb3UKICNlbmRp
ZgogCiAgICAgICAgIC8vIEZJWE1FICgxNDk0NzApOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQg
bm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhl
IGNvbnRleHQgYnJlYWtzIGFscGhhIG1hc2tpbmcsIHRob3VnaC4KLSAgICAgICAgbWFza2VyRGF0
YS0+bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVw
YWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBtYXNrQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCwgbnVsbHB0ciwgY29udGV4dCk7CisgICAgICAgIG1hc2tlckRhdGEt
Pm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFp
bnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgbWFza0NvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQsIG51bGxwdHIpOwogICAgICAgICBpZiAoIW1hc2tlckRhdGEtPm1hc2tJ
bWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lv
biAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0Nv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDcgQEAgQWZmaW5lVHJhbnNm
b3JtIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbAogICAgIHJldHVybiBhYnNvbHV0ZVRyYW5zZm9y
bTsKIH0KIAotUmVmUHRyPEltYWdlQnVmZmVyPiBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29s
b3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBo
b3N0V2luZG93LCBjb25zdCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCitSZWZQdHI8SW1hZ2VC
dWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9y
bSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCiB7CiAgICAgSW50
UmVjdCBwYWludFJlY3QgPSBjYWxjdWxhdGVJbWFnZUJ1ZmZlclJlY3QodGFyZ2V0UmVjdCwgYWJz
b2x1dGVUcmFuc2Zvcm0pOwogICAgIC8vIERvbid0IGNyZWF0ZSBlbXB0eSBJbWFnZUJ1ZmZlcnMu
CkBAIC0yMzgsMTIgKzIzOCw3IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29u
dGV4dDoKICAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGNsYW1wZWRTaXpl
LCBzY2FsZSkpCiAgICAgICAgIGNsYW1wZWRTaXplID0gY2xhbXBlZFNpemUgKiBzY2FsZTsKIAot
I2lmIFVTRShESVJFQ1QyRCkKLSAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShjbGFtcGVkU2l6ZSwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCwgMSwgY29sb3JTcGFjZSwg
UGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwog
ICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBy
ZW5kZXJpbmdNb2RlLCBTaG91bGRVc2VEaXNwbGF5TGlzdDo6Tm8sIFJlbmRlcmluZ1B1cnBvc2U6
OkRPTSwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBob3N0V2luZG93KTsKLSNl
bmRpZgogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBA
IC0yNTYsNyArMjUxLDcgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBTVkdSZW5kZXJpbmdDb250ZXh0
OgogICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKIH0KIAotUmVmUHRyPEltYWdlQnVmZmVyPiBTVkdS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZFJlY3QsIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQpCitSZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkUmVjdCwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7CiAgICAgSW50U2l6
ZSBjbGFtcGVkU2l6ZSA9IHJvdW5kZWRJbnRTaXplKGNsYW1wZWRSZWN0LnNpemUoKSk7CiAgICAg
RmxvYXRTaXplIHVuY2xhbXBlZFNpemUgPSByb3VuZGVkSW50U2l6ZSh0YXJnZXRSZWN0LnNpemUo
KSk7CkBAIC0yNjUsMTIgKzI2MCw3IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5n
Q29udGV4dDoKICAgICBpZiAoY2xhbXBlZFNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCwgMSwg
Y29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KGNvbnRleHQpOwogICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNs
YW1wZWRTaXplLCByZW5kZXJpbmdNb2RlLCAxLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdS
QTgpOwotI2VuZGlmCiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29u
dGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsOCAr
NjAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KFJlbmRl
ckVsZW1lbnQmLCBQYWludEluZm8mLCBOZWVkc0dyYXBoaWNzQ29udGV4dFNhdmUgPSBEb250U2F2
ZUdyYXBoaWNzQ29udGV4dCk7CiAgICAgYm9vbCBpc1JlbmRlcmluZ1ByZXBhcmVkKCkgY29uc3Qg
eyByZXR1cm4gbV9yZW5kZXJpbmdGbGFncyAmIFJlbmRlcmluZ1ByZXBhcmVkOyB9CiAKLSAgICBz
dGF0aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJl
Y3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0s
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RX
aW5kb3cqID0gbnVsbHB0ciwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpOwotICAg
IHN0YXRpYyBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkUmVjdCwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0
KiA9IG51bGxwdHIpOworICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgUmVuZGVy
aW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKKyAgICBzdGF0aWMgUmVmUHRy
PEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZFJlY3QsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYsIFJlbmRlcmluZ01vZGUpOwogCiAgICAgc3RhdGljIHZvaWQgcmVuZGVyU3VidHJlZVRv
Q29udGV4dChHcmFwaGljc0NvbnRleHQmLCBSZW5kZXJFbGVtZW50JiwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJik7CiAgICAgc3RhdGljIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXRSZWN0LCBSZWZQdHI8SW1hZ2VCdWZmZXI+JiwgYm9vbCBzYWZlVG9DbGVh
cik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlz
aW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDE1ICs2Niw2IEBACiAjaW5jbHVkZSAiTG9jYWxEZWZhdWx0
U3lzdGVtQXBwZWFyYW5jZS5oIgogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVk
ZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2Vu
ZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHSW1hZ2U6OlNWR0ltYWdlKEltYWdlT2Jz
ZXJ2ZXImIG9ic2VydmVyKQpAQCAtMjE3LDEyICsyMDgsMTIgQEAgSW1hZ2VEcmF3UmVzdWx0IFNW
R0ltYWdlOjpkcmF3Rm9yQ29udGFpbgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxO
YXRpdmVJbWFnZT4gU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkKK1JlZlB0cjxOYXRpdmVJbWFnZT4gU1ZHSW1h
Z2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKIHsKLSAgICByZXR1cm4gbmF0aXZlSW1h
Z2UodGFyZ2V0Q29udGV4dCk7CisgICAgcmV0dXJuIG5hdGl2ZUltYWdlKCk7CiB9CiAKLVJlZlB0
cjxOYXRpdmVJbWFnZT4gU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCopCitSZWZQdHI8TmF0aXZlSW1hZ2U+IFNWR0ltYWdlOjpuYXRpdmVJbWFnZSgpCiB7CiAgICAg
cmV0dXJuIG5hdGl2ZUltYWdlKHNpemUoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSgp
KSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw4ICs4Niw4
IEBAIHByaXZhdGU6CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHRvIGJlIGxlc3MgY29u
c2VydmF0aXZlLgogICAgIGJvb2wgY3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIGZp
bmFsOwotICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2UoY29uc3QgR3JhcGhpY3ND
b250ZXh0KiA9IG51bGxwdHIpIGZpbmFsOworICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBmaW5hbDsKKyAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5h
dGl2ZUltYWdlKCkgZmluYWw7CiAgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZShj
b25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VSZWN0LCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwogCiAgICAgdm9pZCBzdGFydEFuaW1hdGlvblRpbWVyRmly
ZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRh
aW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlRm9yQ29udGFpbmVyLmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTksOSArNTksOSBAQCB2b2lkIFNWR0ltYWdlRm9yQ29udGFpbmVyOjpkcmF3UGF0dGVybihHCiAg
ICAgbV9pbWFnZS0+ZHJhd1BhdHRlcm5Gb3JDb250YWluZXIoY29udGV4dCwgbV9jb250YWluZXJT
aXplLCBtX2NvbnRhaW5lclpvb20sIG1faW5pdGlhbEZyYWdtZW50VVJMLCBzcmNSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgZHN0UmVjdCwgb3B0aW9ucyk7CiB9CiAKLVJl
ZlB0cjxOYXRpdmVJbWFnZT4gU1ZHSW1hZ2VGb3JDb250YWluZXI6Om5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkKK1JlZlB0cjxO
YXRpdmVJbWFnZT4gU1ZHSW1hZ2VGb3JDb250YWluZXI6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCkKIHsKLSAgICByZXR1cm4gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
dGFyZ2V0Q29udGV4dCk7CisgICAgcmV0dXJuIG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5oCShyZXZpc2lv
biAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250
YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzIHRvIGJlIGxlc3MgY29uc2VydmF0aXZlLgogICAgIGJvb2wg
Y3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7
IH0KIAotICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIGZpbmFsOworICAgIFJlZlB0cjxOYXRp
dmVJbWFnZT4gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBmaW5hbDsKIAogcHJpdmF0ZToK
ICAgICBXRUJDT1JFX0VYUE9SVCBTVkdJbWFnZUZvckNvbnRhaW5lcihTVkdJbWFnZSosIGNvbnN0
IEZsb2F0U2l6ZSYgY29udGFpbmVyU2l6ZSwgZmxvYXQgY29udGFpbmVyWm9vbSwgY29uc3QgVVJM
JiBpbml0aWFsRnJhZ21lbnRVUkwpOwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgwMykKKysr
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAK
KzIwMjItMDEtMDcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJl
bW92ZSBzdXBwb3J0IGZvciBEaXJlY3QyRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM0OTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFrZTogUmVtb3ZlZC4KKyAgICAgICAg
KiBTaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxl
Qml0bWFwOjpDb25maWd1cmF0aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpT
aGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb246OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6
OlNoYXJlYWJsZUJpdG1hcDo6U2hhcmVhYmxlQml0bWFwKToKKyAgICAgICAgKFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjp+U2hhcmVhYmxlQml0bWFwKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVh
YmxlQml0bWFwOjpudW1CeXRlc0ZvclNpemUpOgorICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVC
aXRtYXAuaDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpjcmVhdGVQbGF0Zm9y
bUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpkeFN1cmZhY2UpOiBE
ZWxldGVkLgorICAgICAgICAqIFNoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9yZURpcmVjdDJE
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGV2aWNlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXREZXZpY2UpOiBEZWxldGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2hvd1BvcHVwTWVudSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBvcHVwTWVudVByb3h5V2luOjpzZXR1cFN3YXBDaGFpbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpjb25maWd1cmVCYWNraW5nU3RvcmUpOiBE
ZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaDoK
KyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3OjpXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6b25TaXplRXZlbnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzZXR1cFN3YXBDaGFpbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNvbmZpZ3VyZUJhY2tpbmdTdG9yZSk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJWaWV3Lmg6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXc6OmQzZERldmljZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXc6OmQzZEltbWVkaWF0ZUNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUG9wdXBNZW51LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUG9wdXBNZW51OjpzaG93KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpEcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3M6OmRpc3BsYXkpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpnZXRJbWFnZUZvckZpbmRNYXRjaCk6CisKIDIwMjItMDEt
MDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBNYWtlIEZ1bGxzY3JlZW5NYW5hZ2VyOjpyZXF1ZXN0RnVsbHNjcmVlbkZvckVsZW1lbnQgbW9y
ZSByb2J1c3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm1GVFcuY21ha2UKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZQkocmV2aXNpb24gMjg3ODAzKQor
KysgU291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDE5
NSArMCwwIEBACi1zZXQoV2ViS2l0X09VVFBVVF9OQU1FIFdlYktpdDIpCi1zZXQoV2ViUHJvY2Vz
c19PVVRQVVRfTkFNRSBXZWJLaXRXZWJQcm9jZXNzKQotc2V0KE5ldHdvcmtQcm9jZXNzX09VVFBV
VF9OQU1FIFdlYktpdE5ldHdvcmtQcm9jZXNzKQotc2V0KFBsdWdpblByb2Nlc3NfT1VUUFVUX05B
TUUgV2ViS2l0UGx1Z2luUHJvY2VzcykKLXNldChHUFVQcm9jZXNzX09VVFBVVF9OQU1FIFdlYktp
dEdQVVByb2Nlc3MpCi0KLWluY2x1ZGUoSGVhZGVycy5jbWFrZSkKLQotYWRkX2RlZmluaXRpb25z
KC1EQlVJTERJTkdfV0VCS0lUKQotCi1saXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwotICAgIE5l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNw
cAotCi0gICAgTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKLQot
ICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NNYWluQ3VybC5jcHAKLQotICAg
IFBsYXRmb3JtL0lQQy93aW4vQXR0YWNobWVudFdpbi5jcHAKLSAgICBQbGF0Zm9ybS9JUEMvd2lu
L0Nvbm5lY3Rpb25XaW4uY3BwCi0KLSAgICBQbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNwcAotCi0gICAgUGxhdGZvcm0vd2luL0xvZ2dpbmdXaW4u
Y3BwCi0gICAgUGxhdGZvcm0vd2luL01vZHVsZVdpbi5jcHAKLSAgICBQbGF0Zm9ybS93aW4vU2hh
cmVkTWVtb3J5V2luLmNwcAotCi0gICAgU2hhcmVkL0FQSS9jL2N1cmwvV0tDZXJ0aWZpY2F0ZUlu
Zm9DdXJsLmNwcAotCi0gICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5N
b2R1bGVOb25lLmNwcAotCi0gICAgU2hhcmVkL3dpbi9BdXhpbGlhcnlQcm9jZXNzTWFpbldpbi5j
cHAKLSAgICBTaGFyZWQvd2luL05hdGl2ZVdlYktleWJvYXJkRXZlbnRXaW4uY3BwCi0gICAgU2hh
cmVkL3dpbi9OYXRpdmVXZWJNb3VzZUV2ZW50V2luLmNwcAotICAgIFNoYXJlZC93aW4vTmF0aXZl
V2ViVG91Y2hFdmVudFdpbi5jcHAKLSAgICBTaGFyZWQvd2luL05hdGl2ZVdlYldoZWVsRXZlbnRX
aW4uY3BwCi0gICAgU2hhcmVkL3dpbi9XZWJFdmVudEZhY3RvcnkuY3BwCi0KLSAgICBVSVByb2Nl
c3MvQmFja2luZ1N0b3JlLmNwcAotICAgIFVJUHJvY2Vzcy9EZWZhdWx0VW5kb0NvbnRyb2xsZXIu
Y3BwCi0gICAgVUlQcm9jZXNzL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZ05vbmUuY3BwCi0gICAg
VUlQcm9jZXNzL1dlYkdyYW1tYXJEZXRhaWwuY3BwCi0gICAgVUlQcm9jZXNzL1dlYlZpZXdwb3J0
QXR0cmlidXRlcy5jcHAKLQotICAgIFVJUHJvY2Vzcy9BUEkvQy9XS1ZpZXdwb3J0QXR0cmlidXRl
cy5jcHAKLQotICAgIFVJUHJvY2Vzcy9BUEkvQy9jdXJsL1dLUHJvdGVjdGlvblNwYWNlQ3VybC5j
cHAKLSAgICBVSVByb2Nlc3MvQVBJL0MvY3VybC9XS1dlYnNpdGVEYXRhU3RvcmVSZWZDdXJsLmNw
cAotCi0gICAgVUlQcm9jZXNzL0FQSS9DL3dpbi9XS1ZpZXcuY3BwCi0KLSAgICBVSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5j
cHAKLQotICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclVJUHJveHlXaW4u
Y3BwCi0KLSAgICBVSVByb2Nlc3MvTGF1bmNoZXIvd2luL1Byb2Nlc3NMYXVuY2hlcldpbi5jcHAK
LQotICAgIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNw
cAotCi0gICAgVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3dpbi9XZWJzaXRlRGF0YVN0b3JlV2luLmNw
cAotCi0gICAgVUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1wbC5jcHAKLSAgICBVSVByb2Nlc3Mv
d2luL1dlYkNvbnRleHRNZW51UHJveHlXaW4uY3BwCi0gICAgVUlQcm9jZXNzL3dpbi9XZWJQYWdl
UHJveHlXaW4uY3BwCi0gICAgVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAK
LSAgICBVSVByb2Nlc3Mvd2luL1dlYlByb2Nlc3NQb29sV2luLmNwcAotICAgIFVJUHJvY2Vzcy93
aW4vV2ViVmlldy5jcHAKLQotICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvd2luL0luamVj
dGVkQnVuZGxlV2luLmNwcAotCi0gICAgV2ViUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3Bl
Y3RvclVJV2luLmNwcAotCi0gICAgV2ViUHJvY2Vzcy9NZWRpYUNhY2hlL1dlYk1lZGlhS2V5U3Rv
cmFnZU1hbmFnZXIuY3BwCi0KLSAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dpbi9XZWJQ
b3B1cE1lbnVXaW4uY3BwCi0KLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWRTdXJm
YWNlLmNwcAotCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29t
cG9zaXRpbmdDb29yZGluYXRvci5jcHAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCi0gICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5jcHAKLQotICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5jcHAKLQotICAgIFdlYlByb2Nlc3Mv
d2luL1dlYlByb2Nlc3NNYWluV2luLmNwcAotICAgIFdlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NX
aW4uY3BwCi0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAg
IiR7V0VCS0lUX0RJUn0vUGxhdGZvcm0vY2xhc3NpZmllciIKLSAgICAiJHtXRUJLSVRfRElSfS9Q
bHVnaW5Qcm9jZXNzL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvQVBJL2Mvd2luIgot
ICAgICIke1dFQktJVF9ESVJ9L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzIgotICAgICIke1dF
QktJVF9ESVJ9L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvciIK
LSAgICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvUGx1Z2lucy93aW4iCi0gICAgIiR7V0VCS0lUX0RJ
Un0vU2hhcmVkL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL0MvY2Fpcm8i
Ci0gICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2N1cmwiCi0gICAgIiR7V0VCS0lU
X0RJUn0vVUlQcm9jZXNzL0FQSS9DL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3Mv
QVBJL2NwcC93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS93aW4iCi0gICAg
IiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MiCi0gICAgIiR7V0VC
S0lUX0RJUn0vVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQiCi0gICAgIiR7V0VCS0lUX0RJUn0v
VUlQcm9jZXNzL0luc3BlY3Rvci93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL1Bs
dWdpbnMvd2luIgotICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy93aW4iCi0gICAgIiR7V0VC
S0lUX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvd2luIgotICAgICIke1dFQktJ
VF9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL3dpbi9ET00iCi0gICAgIiR7V0VC
S0lUX0RJUn0vV2ViUHJvY2Vzcy9JbnNwZWN0b3Ivd2luIgotICAgICIke1dFQktJVF9ESVJ9L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvd2luIgotICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzIgotICAgICIke1dFQktJVF9ESVJ9L1dlYlBy
b2Nlc3MvV2ViUGFnZS93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vd2luIgotKQotCi1saXN0KEFQ
UEVORCBXZWJLaXRfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKLSkKLQotc2V0KFdlYktpdENv
bW1vbkluY2x1ZGVEaXJlY3RvcmllcyAke1dlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTfSkKLXNl
dChXZWJLaXRDb21tb25TeXN0ZW1JbmNsdWRlRGlyZWN0b3JpZXMgJHtXZWJLaXRfU1lTVEVNX0lO
Q0xVREVfRElSRUNUT1JJRVN9KQotCi1saXN0KEFQUEVORCBXZWJQcm9jZXNzX1NPVVJDRVMKLSAg
ICBXZWJQcm9jZXNzL0VudHJ5UG9pbnQvd2luL1dlYlByb2Nlc3NNYWluLmNwcAotKQotCi1saXN0
KEFQUEVORCBOZXR3b3JrUHJvY2Vzc19TT1VSQ0VTCi0gICAgTmV0d29ya1Byb2Nlc3MvRW50cnlQ
b2ludC93aW4vTmV0d29ya1Byb2Nlc3NNYWluLmNwcAotKQotCi1saXN0KEFQUEVORCBHUFVQcm9j
ZXNzX1NPVVJDRVMKLSAgICBHUFVQcm9jZXNzL0VudHJ5UG9pbnQvd2luL0dQVVByb2Nlc3NNYWlu
LmNwcAotKQotCi1hZGRfZGVmaW5pdGlvbnMoLURVU0VfRElSRUNUMkQ9MSAtRFVTRV9DVVJMPTEp
Ci0KLWxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCi0gICAgTmV0d29ya1Byb2Nlc3MvQ29va2ll
cy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcAotCi0gICAgTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCi0gICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlSU9DaGFubmVsQ3VybC5jcHAKLQotICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0
d29ya0RhdGFUYXNrQ3VybC5jcHAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9j
ZXNzQ3VybC5jcHAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtTZXNzaW9uQ3VybC5j
cHAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Q3VybC5j
cHAKLQotICAgIFNoYXJlZC9jdXJsL1dlYkNvcmVBcmd1bWVudENvZGVyc0N1cmwuY3BwCi0KLSAg
ICBTaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAotCi0gICAgVUlQcm9jZXNz
L3dpbi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHAKLQotICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvY3VybC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAotKQotCi1saXN0KEFQUEVO
RCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQ
cm9jZXNzL2N1cmwiCi0gICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9jdXJsIgotKQotCi1saXN0KEFQUEVORCBXZWJLaXRfUFJJVkFURV9MSUJSQVJJRVMKLSAgICBP
cGVuU1NMOjpTU0wKLSAgICBEMmQxLmxpYgotICAgIEQzZDExLmxpYgotICAgIER3cml0ZQotICAg
IER4Z2kubGliCi0gICAgRHhndWlkCi0gICAgV2luZG93c0NvZGVjcwotICAgIG1mdXVpZC5saWIK
LSAgICBzdHJtaWlkcy5saWIKLSkKLQotaWYgKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SKQotICAg
IGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCi0gICAgICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Iv
c29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKLSAgICAgICAgVUlQcm9jZXNzL0luc3Bl
Y3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmNwcAotCi0gICAgICAg
IFVJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlXaW4uY3Bw
Ci0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKLSAg
ICAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL3NvY2tldCIKLSAgICApCi1lbmRpZiAoKQot
Ci0jIFdpbmRvd3Mgc3BlY2lmaWMKLWxpc3QoQVBQRU5EIFdlYktpdF9QVUJMSUNfRlJBTUVXT1JL
X0hFQURFUlMKLSAgICBTaGFyZWQvQVBJL2MvY3VybC9XS0NlcnRpZmljYXRlSW5mb0N1cmwuaAot
Ci0gICAgU2hhcmVkL0FQSS9jL3dpbi9XS0Jhc2VXaW4uaAotCi0gICAgVUlQcm9jZXNzL0FQSS9D
L2N1cmwvV0tQcm90ZWN0aW9uU3BhY2VDdXJsLmgKLSAgICBVSVByb2Nlc3MvQVBJL0MvY3VybC9X
S1dlYnNpdGVEYXRhU3RvcmVSZWZDdXJsLmgKLQotICAgIFVJUHJvY2Vzcy9BUEkvQy93aW4vV0tW
aWV3LmgKLSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcAko
cmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTQgKzc1LDYgQEAgdm9pZCBTaGFyZWFibGVCaXRt
YXA6OkhhbmRsZTo6Y2xlYXIoKQogdm9pZCBTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb246
OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBj
b2xvclNwYWNlIDw8IGlzT3BhcXVlOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBTaGFyZWRNZW1v
cnk6OkhhbmRsZTo6ZW5jb2RlSGFuZGxlKGVuY29kZXIsIHNoYXJlZFJlc291cmNlSGFuZGxlKTsK
LQotICAgIC8vIEhhbmQgb2ZmIG93bmVyc2hpcCBvZiBvdXIgSEFORExFIHRvIHRoZSByZWNlaXZp
bmcgcHJvY2Vzcy4gSXQgd2lsbCBjbG9zZSBpdCBmb3IgdXMuCi0gICAgLy8gRklYTUU6IElmIHRo
ZSByZWNlaXZpbmcgcHJvY2VzcyBjcmFzaGVzIGJlZm9yZSBpdCByZWNlaXZlcyB0aGUgbWVtb3J5
LCB0aGUgbWVtb3J5IHdpbGwgYmUKLSAgICAvLyBsZWFrZWQuIFNlZSA8aHR0cDovL3dlYmtpdC5v
cmcvYi80NzUwMj4uCi0gICAgc2hhcmVkUmVzb3VyY2VIYW5kbGUgPSBudWxscHRyOwotI2VuZGlm
CiB9CiAKIGJvb2wgU2hhcmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9uOjpkZWNvZGUoSVBDOjpE
ZWNvZGVyJiBkZWNvZGVyLCBDb25maWd1cmF0aW9uJiByZXN1bHQpCkBAIC05OCwxNSArOTAsNiBA
QCBib29sIFNoYXJlYWJsZUJpdG1hcDo6Q29uZmlndXJhdGlvbjo6ZGVjCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIHJlc3VsdCA9IENvbmZpZ3VyYXRpb24geyBXVEZNb3ZlKCpjb2xvclNw
YWNlKSwgKmlzT3BhcXVlIH07Ci0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgYXV0byBwcm9jZXNz
U3BlY2lmaWNIYW5kbGUgPSBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZGVjb2RlSGFuZGxlKGRlY29k
ZXIpOwotICAgIGlmICghcHJvY2Vzc1NwZWNpZmljSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXN1bHQuc2hhcmVkUmVzb3VyY2VIYW5kbGUgPSBwcm9jZXNzU3BlY2lmaWNI
YW5kbGUudmFsdWUoKTsKLSNlbmRpZgotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE4Nywx
OCArMTcwLDEyIEBAIFNoYXJlYWJsZUJpdG1hcDo6U2hhcmVhYmxlQml0bWFwKGNvbnN0IEkKICAg
ICAsIG1fc2hhcmVkTWVtb3J5KHNoYXJlZE1lbW9yeSkKICAgICAsIG1fZGF0YShudWxscHRyKQog
ewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBjcmVhdGVTaGFyZWRSZXNvdXJjZSgpOwotI2VuZGlm
CiB9CiAKIFNoYXJlYWJsZUJpdG1hcDo6flNoYXJlYWJsZUJpdG1hcCgpCiB7CiAgICAgaWYgKCFp
c0JhY2tlZEJ5U2hhcmVkTWVtb3J5KCkpCiAgICAgICAgIFNoYXJlYWJsZUJpdG1hcE1hbGxvYzo6
ZnJlZShtX2RhdGEpOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBkaXNwb3NlU2hhcmVkUmVzb3Vy
Y2UoKTsKLSNlbmRpZgogfQogCiB2b2lkKiBTaGFyZWFibGVCaXRtYXA6OmRhdGEoKSBjb25zdApA
QCAtMjEyLDEyICsxODksNyBAQCB2b2lkKiBTaGFyZWFibGVCaXRtYXA6OmRhdGEoKSBjb25zdAog
CiBDaGVja2VkVWludDMyIFNoYXJlYWJsZUJpdG1hcDo6bnVtQnl0ZXNGb3JTaXplKFdlYkNvcmU6
OkludFNpemUgc2l6ZSwgY29uc3QgU2hhcmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9uJiBjb25m
aWd1cmF0aW9uKQogewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAvLyBXZSBwYXNzIHJlZmVyZW5j
ZXMgdG8gR1BVIHRleHR1cmVzLCBzbyBubyBuZWVkIHRvIGFsbG9jYXRlIGZyYW1lIGJ1ZmZlcnMg
aGVyZS4gSnVzdCBzZW5kIGEgc21hbGwgYml0IG9mIGRhdGEuCi0gICAgcmV0dXJuIHNpemVvZih2
b2lkKik7Ci0jZWxzZQogICAgIHJldHVybiBjYWxjdWxhdGVCeXRlc1BlclJvdyhzaXplLCBjb25m
aWd1cmF0aW9uKSAqIHNpemUuaGVpZ2h0KCk7Ci0jZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaAkocmV2aXNp
b24gMjg3ODAzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDE2ICszMiw2IEBACiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCi0jaWYgVVNFKERJUkVDVDJE
KQotaW50ZXJmYWNlIElEMkQxQml0bWFwOwotaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0Owot
aW50ZXJmYWNlIElEM0QxMURldmljZTE7Ci1pbnRlcmZhY2UgSURYR0lLZXllZE11dGV4OwotaW50
ZXJmYWNlIElEWEdJU3VyZmFjZTE7Ci0KLSNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgotI2Vu
ZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEltYWdlOwogY2xhc3MgR3JhcGhpY3ND
b250ZXh0OwpAQCAtNTQsOSArNDQsNiBAQCBwdWJsaWM6CiAgICAgc3RydWN0IENvbmZpZ3VyYXRp
b24gewogICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFj
ZT4gY29sb3JTcGFjZTsKICAgICAgICAgYm9vbCBpc09wYXF1ZSB7IGZhbHNlIH07Ci0jaWYgVVNF
KERJUkVDVDJEKQotICAgICAgICBtdXRhYmxlIEhBTkRMRSBzaGFyZWRSZXNvdXJjZUhhbmRsZSB7
IG51bGxwdHIgfTsKLSNlbmRpZgogCiAgICAgICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYp
IGNvbnN0OwogICAgICAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKElQ
Qzo6RGVjb2RlciYsIENvbmZpZ3VyYXRpb24mKTsKQEAgLTEzNywxNCArMTI0LDYgQEAgcHVibGlj
OgogICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNyZWF0ZUNhaXJvU3VyZmFjZSgpOwogCiAg
ICAgV2ViQ29yZTo6UGxhdGZvcm1JbWFnZVB0ciBjcmVhdGVQbGF0Zm9ybUltYWdlKCkgeyByZXR1
cm4gY3JlYXRlQ2Fpcm9TdXJmYWNlKCk7IH0KLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBDT01Q
dHI8SUQyRDFCaXRtYXA+IGNyZWF0ZURpcmVjdDJEU3VyZmFjZShJRDNEMTFEZXZpY2UxKiwgSUQy
RDFSZW5kZXJUYXJnZXQqKTsKLSAgICBJRFhHSVN1cmZhY2UxKiBkeFN1cmZhY2UoKSB7IHJldHVy
biBtX3N1cmZhY2UuZ2V0KCk7IH0KLSAgICB2b2lkIGNyZWF0ZVNoYXJlZFJlc291cmNlKCk7Ci0g
ICAgdm9pZCBkaXNwb3NlU2hhcmVkUmVzb3VyY2UoKTsKLSAgICB2b2lkIGxlYWtTaGFyZWRSZXNv
dXJjZSgpOwotCi0gICAgV2ViQ29yZTo6UGxhdGZvcm1JbWFnZVB0ciBjcmVhdGVQbGF0Zm9ybUlt
YWdlKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0xNzEsMTIg
KzE1MCw2IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7CiAgICAgQ29u
ZmlndXJhdGlvbiBtX2NvbmZpZ3VyYXRpb247CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09N
UHRyPElEWEdJU3VyZmFjZTE+IG1fc3VyZmFjZTsKLSAgICBDT01QdHI8SURYR0lLZXllZE11dGV4
PiBtX3N1cmZhY2VNdXRleDsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IG1fYml0bWFwOwotI2Vu
ZGlmCi0KICNpZiBVU0UoQ0cpCiAgICAgYm9vbCBtX3JlbGVhc2VCaXRtYXBDb250ZXh0RGF0YUNh
bGxlZCB7IGZhbHNlIH07CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9T
aGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9T
aGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODAzKQor
KysgU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAko
bm9uZXhpc3RlbnQpCkBAIC0xLDE3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDExIEJyZW50IEZ1bGdoYW0gPGJmdWxnaGFtQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotCi0jaW5jbHVkZSAiRGVjb2Rlci5oIgotI2luY2x1ZGUg
IkVuY29kZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEltYWdlLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9ESUJQaXhlbERhdGEuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJET3BlcmF0
aW9ucy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGlsaXRpZXMuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9O
b3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQuaD4KLSNpbmNsdWRlIDxkMmQxXzEuaD4KLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0jaW5jbHVk
ZSA8ZHhnaTFfMi5oPgotI2luY2x1ZGUgPHdpbmNvZGVjLmg+Ci0jaW5jbHVkZSA8d3RmL1Byb2Nl
c3NJRC5oPgotCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Ci0KLXZvaWQgU2hhcmVhYmxlQml0bWFwOjp2YWxpZGF0ZUNvbmZpZ3VyYXRpb24oQ29uZmlndXJh
dGlvbiYpCi17Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBzdHJpZGVGb3JXaWR0aCh1bnNpZ25lZCB3
aWR0aCkKLXsKLSAgICBzdGF0aWMgdW5zaWduZWQgYml0c1BlclBpeGVsID0gRGlyZWN0MkQ6OmJp
dHNQZXJQaXhlbChEaXJlY3QyRDo6d2ljQml0bWFwRm9ybWF0KCkpOwotICAgIHJldHVybiBiaXRz
UGVyUGl4ZWwgKiB3aWR0aCAvIDg7Ci19Ci0KLUNoZWNrZWRVaW50MzIgU2hhcmVhYmxlQml0bWFw
OjpjYWxjdWxhdGVCeXRlc1BlclJvdyhXZWJDb3JlOjpJbnRTaXplIHNpemUsIGNvbnN0IENvbmZp
Z3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJuIGNhbGN1bGF0ZUJ5dGVzUGVy
UGl4ZWwoY29uZmlndXJhdGlvbikgKiBzaXplLndpZHRoKCk7Ci19Ci0KLUNoZWNrZWRVaW50MzIg
U2hhcmVhYmxlQml0bWFwOjpjYWxjdWxhdGVCeXRlc1BlclBpeGVsKGNvbnN0IENvbmZpZ3VyYXRp
b24mKQotewotICAgIHJldHVybiA0OwotfQotCi12b2lkIFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
U2hhcmVkUmVzb3VyY2UoKQotewotICAgIC8vIERvbid0IGNyZWF0ZSBhIHNoYXJlZCByZXNvdXJj
ZSBpZiB0aGUgY29uZmlndXJhdGlvbiBpbnN0cnVjdHMgdXMgdG8gdXNlIGFuIGV4aXN0aW5nIG9u
ZS4KLSAgICBpZiAobV9jb25maWd1cmF0aW9uLnNoYXJlZFJlc291cmNlSGFuZGxlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3N1cmZhY2UgPSBEaXJlY3QyRDo6Y3JlYXRlRFhHSVN1cmZhY2VP
ZlNpemUobV9zaXplLCBudWxscHRyLCB0cnVlKTsKLQotICAgIENPTVB0cjxJRFhHSVJlc291cmNl
MT4gcmVzb3VyY2VEYXRhOwotICAgIEhSRVNVTFQgaHIgPSBtX3N1cmZhY2UtPlF1ZXJ5SW50ZXJm
YWNlKF9fdXVpZG9mKElEWEdJUmVzb3VyY2UpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJnJl
c291cmNlRGF0YSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAg
aHIgPSByZXNvdXJjZURhdGEtPkNyZWF0ZVNoYXJlZEhhbmRsZShudWxscHRyLCBEWEdJX1NIQVJF
RF9SRVNPVVJDRV9SRUFEIHwgRFhHSV9TSEFSRURfUkVTT1VSQ0VfV1JJVEUsIG51bGxwdHIsICZt
X2NvbmZpZ3VyYXRpb24uc2hhcmVkUmVzb3VyY2VIYW5kbGUpOwotICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotfQotCi12b2lkIFNoYXJlYWJsZUJpdG1hcDo6ZGlzcG9zZVNoYXJl
ZFJlc291cmNlKCkKLXsKLSAgICBpZiAobV9zdXJmYWNlTXV0ZXgpCi0gICAgICAgIG1fc3VyZmFj
ZU11dGV4LT5SZWxlYXNlU3luYygxKTsKLSAgICBpZiAobV9jb25maWd1cmF0aW9uLnNoYXJlZFJl
c291cmNlSGFuZGxlKQotICAgICAgICA6OkNsb3NlSGFuZGxlKG1fY29uZmlndXJhdGlvbi5zaGFy
ZWRSZXNvdXJjZUhhbmRsZSk7Ci19Ci0KLXZvaWQgU2hhcmVhYmxlQml0bWFwOjpsZWFrU2hhcmVk
UmVzb3VyY2UoKQotewotICAgIG1fY29uZmlndXJhdGlvbi5zaGFyZWRSZXNvdXJjZUhhbmRsZSA9
IG51bGxwdHI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKLXsKLSAgICAvLyBMb2NrIHRoZSBzdXJm
YWNlIHRvIHRoZSBjdXJyZW50IGRldmljZSB3aGlsZSByZW5kZXJpbmcuCi0gICAgSFJFU1VMVCBo
ciA9IG1fc3VyZmFjZS0+UXVlcnlJbnRlcmZhY2UoJm1fc3VyZmFjZU11dGV4KTsKLSAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICBociA9IG1fc3VyZmFjZU11dGV4LT5BY3F1
aXJlU3luYygwLCBJTkZJTklURSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0KLSAgICBhdXRvIHN1cmZhY2VDb250ZXh0ID0gRGlyZWN0MkQ6OmNyZWF0ZVN1cmZhY2VSZW5k
ZXJUYXJnZXQobV9zdXJmYWNlLmdldCgpKTsKLSAgICBpZiAoIXN1cmZhY2VDb250ZXh0KQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEPihzdXJmYWNlQ29udGV4dC5nZXQoKSk7Ci19Ci0KLXZvaWQgU2hhcmVhYmxl
Qml0bWFwOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBk
c3RQb2ludCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkKLXsKLSAgICBwYWludChjb250ZXh0LCAx
LCBkc3RQb2ludCwgc3JjUmVjdCk7Ci19Ci0KLXZvaWQgU2hhcmVhYmxlQml0bWFwOjpwYWludChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IHNjYWxlRmFjdG9yLCBjb25zdCBJbnRQb2lu
dCYgZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpCi17Ci0gICAgYXV0byBzdXJmYWNl
ID0gY3JlYXRlRGlyZWN0MkRTdXJmYWNlKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmQzZERl
dmljZSgpLCBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKSk7Ci0KLSNp
Zm5kZWYgX05ERUJVRwotICAgIGF1dG8gYml0bWFwU2l6ZSA9IHN1cmZhY2UtPkdldFBpeGVsU2l6
ZSgpOwotICAgIEFTU0VSVChiaXRtYXBTaXplLndpZHRoID09IG1fc2l6ZS53aWR0aCgpKTsKLSAg
ICBBU1NFUlQoYml0bWFwU2l6ZS5oZWlnaHQgPT0gbV9zaXplLmhlaWdodCgpKTsKLSNlbmRpZgot
Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0KGRzdFBvaW50LCBzcmNSZWN0LnNpemUoKSk7Ci0gICAg
RmxvYXRSZWN0IHNyY1JlY3RTY2FsZWQoc3JjUmVjdCk7Ci0gICAgc3JjUmVjdFNjYWxlZC5zY2Fs
ZShzY2FsZUZhY3Rvcik7Ci0KLSAgICBBU1NFUlQoY29udGV4dC5oYXNQbGF0Zm9ybUNvbnRleHQo
KSk7Ci0gICAgYXV0byYgc3RhdGUgPSBjb250ZXh0LnN0YXRlKCk7Ci0gICAgYXV0byYgcGxhdGZv
cm1Db250ZXh0ID0gKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBJbWFnZVBhaW50
aW5nT3B0aW9ucyBvcHRpb25zIHsgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5k
TW9kZSwgSW1hZ2VPcmllbnRhdGlvbigpLCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5
IH07Ci0gICAgRGlyZWN0MkQ6OmRyYXdQbGF0Zm9ybUltYWdlKHBsYXRmb3JtQ29udGV4dCwgc3Vy
ZmFjZS5nZXQoKSwgbV9zaXplLCBkZXN0UmVjdCwgc3JjUmVjdFNjYWxlZCwgb3B0aW9ucywgc3Rh
dGUuYWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi1DT01QdHI8SUQy
RDFCaXRtYXA+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlRGlyZWN0MkRTdXJmYWNlKElEM0QxMURl
dmljZTEqIGRpcmVjdFhEZXZpY2UsIElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCi17
Ci0gICAgaWYgKCFkaXJlY3RYRGV2aWNlKQotICAgICAgICBkaXJlY3RYRGV2aWNlID0gRGlyZWN0
MkQ6OmRlZmF1bHREaXJlY3RYRGV2aWNlKCk7Ci0KLSAgICBpZiAoIW1fYml0bWFwKSB7Ci0gICAg
ICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IHRleHR1cmU7Ci0gICAgICAgIEhSRVNVTFQgaHIg
PSBkaXJlY3RYRGV2aWNlLT5PcGVuU2hhcmVkUmVzb3VyY2UxKG1fY29uZmlndXJhdGlvbi5zaGFy
ZWRSZXNvdXJjZUhhbmRsZSwgX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKio+KCZ0ZXh0dXJlKSk7Ci0gICAgICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGhyID0gdGV4dHVyZS0+UXVlcnlJ
bnRlcmZhY2UoJm1fc3VyZmFjZSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgICAgIC8vIExvY2sgdGhlIHN1cmZhY2UgdG8gdGhlIGN1cnJlbnQgZGV2aWNl
IHdoaWxlIHJlbmRlcmluZy4KLSAgICAgICAgaHIgPSBtX3N1cmZhY2UtPlF1ZXJ5SW50ZXJmYWNl
KCZtX3N1cmZhY2VNdXRleCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OwotICAgICAgICBociA9IG1fc3VyZmFjZU11dGV4LT5BY3F1aXJlU3luYygxLCBJTkZJTklURSk7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgICAgIGF1dG8g
Yml0bWFwUHJvcGVydGllcyA9IERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCk7Ci0gICAgICAg
IGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVTaGFyZWRCaXRtYXAoX191dWlkb2YoSURYR0lTdXJm
YWNlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fc3VyZmFjZS5nZXQoKSksICZiaXRtYXBQ
cm9wZXJ0aWVzLCAmbV9iaXRtYXApOwotICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9iaXRtYXA7Ci19
Ci0KLVJlZlB0cjxJbWFnZT4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVJbWFnZSgpCi17Ci0gICAg
YXV0byBzdXJmYWNlID0gY3JlYXRlRGlyZWN0MkRTdXJmYWNlKG51bGxwdHIsIEdyYXBoaWNzQ29u
dGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpKTsKLSAgICBpZiAoIXN1cmZhY2UpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92
ZShzdXJmYWNlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQmFja2luZ1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxMSArMjksNiBAQAogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIlVw
ZGF0ZUluZm8uaCIKIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5j
bHVkZSA8ZDNkMTFfMS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc5LDEwICsyNzksNiBAQAogI2luY2x1
ZGUgIlNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgiCiAjZW5kaWYKIAotI2lmIFVTRShESVJF
Q1QyRCkKLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpICYmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAjaW5jbHVkZSAiV2ViRGV2aWNl
T3JpZW50YXRpb25VcGRhdGVQcm92aWRlclByb3h5LmgiCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDEw
ICsxODMsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUHJvbWlzZWRBdHRhY2htZW50SW5mby5oPgog
I2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQzRDExRGV2aWNlMTsKLSNl
bmRpZgotCiAjaWYgRU5BQkxFKE1FRElBX1VTQUdFKQogI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFT
ZXNzaW9uSWRlbnRpZmllci5oPgogI2VuZGlmCkBAIC0xMDE3LDEwICsxMDEzLDYgQEAgcHVibGlj
OgogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIFBsYXRmb3JtVmlld1dpZGdldCB2aWV3V2lkZ2V0
KCk7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIElEM0QxMURldmljZTEqIGRldmljZSgpIGNvbnN0
OwotICAgIHZvaWQgc2V0RGV2aWNlKElEM0QxMURldmljZTEqKTsKLSNlbmRpZgogI2VuZGlmCiAj
aWYgVVNFKExJQldQRSkKICAgICBzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCogdmlld0JhY2tlbmQo
KTsKQEAgLTMxMDUsOSArMzA5Nyw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFJlbW90ZU1lZGlh
U2Vzc2lvbkNvb3JkaW5hdG9yUHJveHk+IG1fbWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JQcm94eTsK
ICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRDNEMTFEZXZpY2UxPiBt
X2RldmljZTsKLSNlbmRpZgogICAgIGJvb2wgbV9zZXNzaW9uU3RhdGVXYXNSZXN0b3JlZEJ5QVBJ
UmVxdWVzdCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzUXVvdGFJbmNyZWFzZURlbmllZCB7IGZh
bHNlIH07CiAgICAgYm9vbCBtX2lzTGF5ZXJUcmVlRnJvemVuRHVlVG9Td2lwZUFuaW1hdGlvbiB7
IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3Jl
RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9C
YWNraW5nU3RvcmVEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpA
QCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJCYWNraW5nU3RvcmUuaCIKLQotI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2lu
Y2x1ZGUgIlVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0NPTVB0ci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGlsaXRpZXMuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oPgotI2luY2x1ZGUgPGQyZDEuaD4KLSNp
bmNsdWRlIDxkM2QxMV8xLmg+Ci0jaW5jbHVkZSA8ZHhnaS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1zdGQ6OnVuaXF1ZV9wdHI8QmFja2luZ1N0
b3JlQmFja2VuZERpcmVjdDJEPiBCYWNraW5nU3RvcmU6OmNyZWF0ZUJhY2tlbmQoKQotewotICAg
IHJldHVybiBtYWtlVW5pcXVlPEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGw+KG1fc2l6
ZSwgbV9kZXZpY2VTY2FsZUZhY3RvciwgbV93ZWJQYWdlUHJveHkuZGV2aWNlKCkpOwotfQotCi12
b2lkIEJhY2tpbmdTdG9yZTo6cGFpbnQoRFhDb25uZWN0aW9ucyBkeENvbm5lY3Rpb25zLCBjb25z
dCBJbnRSZWN0JiByZWN0KQotewotICAgIEFTU0VSVChtX2JhY2tlbmQpOwotICAgIEFTU0VSVCht
X2JhY2tlbmQtPnNpemUoKSA9PSBtX3NpemUpOwotCi0gICAgQ09NUHRyPElEM0QxMVJlc291cmNl
PiBiYWNrQnVmZmVyOwotICAgIEhSRVNVTFQgaHIgPSBkeENvbm5lY3Rpb25zLmJhY2tCdWZmZXIt
PlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEM0QxMVJlc291cmNlKSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KCZiYWNrQnVmZmVyKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0KLSAgICBDT01QdHI8SUQzRDExUmVzb3VyY2U+IGJhY2tpbmdTdG9yZTsKLSAgICBociA9
IG1fYmFja2VuZC0+ZHhTdXJmYWNlKCktPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEM0QxMVJl
c291cmNlKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZiYWNraW5nU3RvcmUpKTsKLSAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENEM0QxMV9CT1ggc3JjQm94KHJl
Y3QueCgpLCByZWN0LnkoKSwgMCwgcmVjdC54KCkgKyByZWN0LndpZHRoKCksIHJlY3QueSgpICsg
cmVjdC5oZWlnaHQoKSwgMSk7Ci0gICAgZHhDb25uZWN0aW9ucy5pbW1lZGlhdGVDb250ZXh0LT5D
b3B5U3VicmVzb3VyY2VSZWdpb24xKGJhY2tCdWZmZXIuZ2V0KCksIDAsIHJlY3QueCgpLCByZWN0
LnkoKSwgMCwgYmFja2luZ1N0b3JlLmdldCgpLCAwLCAmc3JjQm94LCBEM0QxMV9DT1BZX0RJU0NB
UkQpOwotfQotCi12b2lkIEJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUoU2hhcmVhYmxl
Qml0bWFwKiBiaXRtYXAsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgaWYg
KCFtX2JhY2tlbmQpCi0gICAgICAgIG1fYmFja2VuZCA9IGNyZWF0ZUJhY2tlbmQoKTsKLQotICAg
IHNjcm9sbCh1cGRhdGVJbmZvLnNjcm9sbFJlY3QsIHVwZGF0ZUluZm8uc2Nyb2xsT2Zmc2V0KTsK
LQotICAgIEludFBvaW50IHVwZGF0ZVJlY3RCb3VuZHNMb2NhdGlvbiA9IHVwZGF0ZUluZm8udXBk
YXRlUmVjdEJvdW5kcy5sb2NhdGlvbigpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBkZXZp
Y2VVcGRhdGVCaXRtYXAgPSBiaXRtYXAtPmNyZWF0ZURpcmVjdDJEU3VyZmFjZShtX3dlYlBhZ2VQ
cm94eS5kZXZpY2UoKSwgbV9iYWNrZW5kLT5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgaWYgKCFkZXZp
Y2VVcGRhdGVCaXRtYXApCi0gICAgICAgIHJldHVybjsKLQotI2lmbmRlZiBfTkRFQlVHCi0gICAg
YXV0byBkZXZpY2VCaXRtYXBTaXplID0gZGV2aWNlVXBkYXRlQml0bWFwLT5HZXRQaXhlbFNpemUo
KTsKLSAgICBBU1NFUlQoZGV2aWNlQml0bWFwU2l6ZS53aWR0aCA9PSB1cGRhdGVJbmZvLnVwZGF0
ZVJlY3RCb3VuZHMud2lkdGgoKSk7Ci0gICAgQVNTRVJUKGRldmljZUJpdG1hcFNpemUuaGVpZ2h0
ID09IHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy5oZWlnaHQoKSk7Ci0jZW5kaWYKLQotICAg
IGZvciAoY29uc3QgYXV0byYgdXBkYXRlUmVjdCA6IHVwZGF0ZUluZm8udXBkYXRlUmVjdHMpIHsK
LSAgICAgICAgYXV0byBjdXJyZW50UmVjdExvY2F0aW9uID0gSW50U2l6ZSh1cGRhdGVSZWN0Lngo
KSAtIHVwZGF0ZVJlY3RCb3VuZHNMb2NhdGlvbi54KCksIHVwZGF0ZVJlY3QueSgpIC0gdXBkYXRl
UmVjdEJvdW5kc0xvY2F0aW9uLnkoKSk7Ci0gICAgICAgIGF1dG8gZGVzdFJlY3RMb2NhdGlvbiA9
IEludFNpemUodXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpKTsKLSAgICAgICAgRGlyZWN0
MkQ6OmNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoZGV2aWNlVXBkYXRlQml0bWFwLmdl
dCgpLCBtX2JhY2tlbmQtPnN1cmZhY2UoKSwgY3VycmVudFJlY3RMb2NhdGlvbiwgdXBkYXRlUmVj
dCwgZGVzdFJlY3RMb2NhdGlvbik7Ci0gICAgfQotfQotCi12b2lkIEJhY2tpbmdTdG9yZTo6c2Ny
b2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNl
dCkKLXsKLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LmlzWmVybygpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBBU1NFUlQobV9iYWNrZW5kKTsKLSAgICBtX2JhY2tlbmQtPnNjcm9sbChzY3JvbGxSZWN0
LCBzY3JvbGxPZmZzZXQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCShyZXZpc2lv
biAyODc4MDMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDYgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L1NlYXJjaFBvcHVwTWVudURCLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyQWdlbnQuaD4KIAot
I2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0jZW5kaWYKLQogbmFtZXNw
YWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpwbGF0Zm9ybUluaXRpYWxpemUoKQpA
QCAtNzksMTggKzc1LDYgQEAgUGxhdGZvcm1WaWV3V2lkZ2V0IFdlYlBhZ2VQcm94eTo6dmlld1dp
ZAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50SW1wbCY+KHBhZ2VDbGllbnQoKSku
dmlld1dpZGdldCgpOwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotSUQzRDExRGV2aWNlMSogV2Vi
UGFnZVByb3h5OjpkZXZpY2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2RldmljZS5nZXQoKTsK
LX0KLQotdm9pZCBXZWJQYWdlUHJveHk6OnNldERldmljZShJRDNEMTFEZXZpY2UxKiBkZXZpY2Up
Ci17Ci0gICAgbV9kZXZpY2UgPSBkZXZpY2U7Ci19Ci0jZW5kaWYKLQogdm9pZCBXZWJQYWdlUHJv
eHk6OmRpc3BhdGNoUGVuZGluZ0NoYXJFdmVudHMoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dCYga2V5ZG93bkV2ZW50KQogewogICAgIGF1dG8mIHBlbmRpbmdDaGFyRXZlbnRzID0ga2V5ZG93
bkV2ZW50LnBlbmRpbmdDaGFyRXZlbnRzKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAJKHJldmlzaW9uIDI4Nzgw
MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEzICs0NSw2IEBACiAjaW5jbHVkZSA8d3RmL0hleE51
bWJlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAotI2lmIFVTRShE
SVJFQ1QyRCkKLSNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJEVXRpbGl0aWVzLmg+Ci0jaW5jbHVk
ZSA8ZDNkMTFfMS5oPgotI2luY2x1ZGUgPGRpcmVjdHhjb2xvcnMuaD4gCi0jaW5jbHVkZSA8ZHhn
aS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKQEAgLTIxNSwxMSArMjA4LDYgQEAgdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2hv
d1BvcHVwTWVudQogCiAgICAgICAgIGlmICghbV9wb3B1cCkKICAgICAgICAgICAgIHJldHVybjsK
LQotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgRGlyZWN0MkQ6OmNyZWF0ZURldmljZUFuZENv
bnRleHQobV9kM2REZXZpY2UsIG1faW1tZWRpYXRlQ29udGV4dCk7Ci0gICAgICAgIHNldHVwU3dh
cENoYWluKG1fd2luZG93UmVjdC5zaXplKCkpOwotI2VuZGlmCiAgICAgfQogCiAgICAgQk9PTCBz
aG91bGRBbmltYXRlID0gRkFMU0U7CkBAIC04MjgsNyArODE2LDYgQEAgdm9pZCBXZWJQb3B1cE1l
bnVQcm94eVdpbjo6cGFpbnQoY29uc3QgSQogICAgIGlmICghbV9wb3B1cCkKICAgICAgICAgcmV0
dXJuOwogCi0jaWYgIVVTRShESVJFQ1QyRCkKICAgICBpZiAoIW1fREMpIHsKICAgICAgICAgbV9E
QyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKEhXbmREQyhtX3BvcHVwKSkp
OwogICAgICAgICBpZiAoIW1fREMpCkBAIC04NTQsMjIgKzg0MSw2IEBAIHZvaWQgV2ViUG9wdXBN
ZW51UHJveHlXaW46OnBhaW50KGNvbnN0IEkKICAgICB9CiAKICAgICBHcmFwaGljc0NvbnRleHRX
aW4gY29udGV4dChtX0RDLmdldCgpKTsKLSNlbHNlCi0gICAgQ09NUHRyPElEM0QxMVRleHR1cmUy
RD4gYmFja0J1ZmZlcjsgCi0gICAgSFJFU1VMVCBociA9IG1fc3dhcENoYWluLT5HZXRCdWZmZXIo
MCwgX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZi
YWNrQnVmZmVyKSk7IAotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQ09NUHRyPElEWEdJU3VyZmFjZTE+IHN1cmZhY2UoUXVlcnksIGJhY2tCdWZmZXIpOwot
ICAgIGlmICghc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZW5kZXJUYXJn
ZXQgPSBXZWJDb3JlOjpEaXJlY3QyRDo6Y3JlYXRlU3VyZmFjZVJlbmRlclRhcmdldChzdXJmYWNl
LmdldCgpKTsKLQotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHBsYXRmb3JtQ29udGV4dChy
ZW5kZXJUYXJnZXQuZ2V0KCkpOwotICAgIHBsYXRmb3JtQ29udGV4dC5zZXREM0REZXZpY2UobV9k
M2REZXZpY2UuZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250ZXh0KCZwbGF0Zm9y
bUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQ
VU1lbW9yeSk7Ci0jZW5kaWYKIAogICAgIEludFJlY3QgdHJhbnNsYXRlZERhbWFnZVJlY3QgPSBk
YW1hZ2VSZWN0OwogICAgIHRyYW5zbGF0ZWREYW1hZ2VSZWN0Lm1vdmUoSW50U2l6ZSgwLCBtX3Nj
cm9sbE9mZnNldCAqIG1faXRlbUhlaWdodCkpOwpAQCAtODg0LDE1ICs4NTUsMTAgQEAgdm9pZCBX
ZWJQb3B1cE1lbnVQcm94eVdpbjo6cGFpbnQoY29uc3QgSQogICAgIGlmIChtX3Njcm9sbGJhcikK
ICAgICAgICAgbV9zY3JvbGxiYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOwogCi0jaWYg
IVVTRShESVJFQ1QyRCkKICAgICBIV25kREMgaFduZERDOwogICAgIEhEQyBsb2NhbERDID0gaGRj
ID8gaGRjIDogaFduZERDLnNldEhXbmQobV9wb3B1cCk7CiAKICAgICA6OkJpdEJsdChsb2NhbERD
LCBkYW1hZ2VSZWN0LngoKSwgZGFtYWdlUmVjdC55KCksIGRhbWFnZVJlY3Qud2lkdGgoKSwgZGFt
YWdlUmVjdC5oZWlnaHQoKSwgbV9EQy5nZXQoKSwgZGFtYWdlUmVjdC54KCksIGRhbWFnZVJlY3Qu
eSgpLCBTUkNDT1BZKTsKLSNlbHNlCi0gICAgY29udGV4dC5mbHVzaCgpOwotICAgIG1fc3dhcENo
YWluLT5QcmVzZW50KDAsIDApOyAKLSNlbmRpZgogfQogCiBib29sIFdlYlBvcHVwTWVudVByb3h5
V2luOjpzZXRGb2N1c2VkSW5kZXgoaW50IGksIGJvb2wgaG90VHJhY2tpbmcpCkBAIC05OTUsNDgg
Kzk2MSw2IEBAIGJvb2wgV2ViUG9wdXBNZW51UHJveHlXaW46OnNjcm9sbFRvUmV2ZWEKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi12b2lkIFdlYlBvcHVwTWVudVBy
b3h5V2luOjpzZXR1cFN3YXBDaGFpbihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotewot
ICAgIG1fc3dhcENoYWluID0gRGlyZWN0MkQ6OnN3YXBDaGFpbk9mU2l6ZUZvcldpbmRvd0FuZERl
dmljZShzaXplLCBtX3BvcHVwLCBtX2QzZERldmljZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9z
d2FwQ2hhaW4pOwotICAgIGF1dG8gZmFjdG9yeSA9IERpcmVjdDJEOjpmYWN0b3J5Rm9yRFhHSURl
dmljZShEaXJlY3QyRDo6dG9EWEdJRGV2aWNlKG1fZDNkRGV2aWNlKSk7Ci0KLSAgICBmYWN0b3J5
LT5NYWtlV2luZG93QXNzb2NpYXRpb24obV9wb3B1cCwgMCk7Ci0gICAgY29uZmlndXJlQmFja2lu
Z1N0b3JlKHNpemUpOwotfQotCi12b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpjb25maWd1cmVC
YWNraW5nU3RvcmUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBBU1NFUlQo
bV9zd2FwQ2hhaW4pOwotICAgIEFTU0VSVChtX2QzZERldmljZSk7Ci0gICAgQVNTRVJUKG1faW1t
ZWRpYXRlQ29udGV4dCk7Ci0KLSAgICAvLyBDcmVhdGUgYSByZW5kZXIgdGFyZ2V0IHZpZXcgCi0g
ICAgQ09NUHRyPElEM0QxMVRleHR1cmUyRD4gYmFja0J1ZmZlcjsgCi0gICAgSFJFU1VMVCBociA9
IG1fc3dhcENoYWluLT5HZXRCdWZmZXIoMCwgX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZiYWNrQnVmZmVyKSk7IAotICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotCi0gICAgaHIgPSBtX2QzZERldmljZS0+Q3JlYXRlUmVuZGVyVGFy
Z2V0VmlldyhiYWNrQnVmZmVyLmdldCgpLCBudWxscHRyLCAmbV9yZW5kZXJUYXJnZXRWaWV3KTsg
Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBhdXRvKiByZW5kZXJU
YXJnZXRWaWV3ID0gbV9yZW5kZXJUYXJnZXRWaWV3LmdldCgpOwotICAgIG1faW1tZWRpYXRlQ29u
dGV4dC0+T01TZXRSZW5kZXJUYXJnZXRzKDEsICZyZW5kZXJUYXJnZXRWaWV3LCBudWxscHRyKTsK
LQotICAgIC8vIFNldHVwIHRoZSB2aWV3cG9ydCAKLSAgICBEM0QxMV9WSUVXUE9SVCB2aWV3cG9y
dDsKLSAgICB2aWV3cG9ydC5XaWR0aCA9IChGTE9BVClzaXplLndpZHRoKCk7Ci0gICAgdmlld3Bv
cnQuSGVpZ2h0ID0gKEZMT0FUKXNpemUuaGVpZ2h0KCk7Ci0gICAgdmlld3BvcnQuTWluRGVwdGgg
PSAwLjBmOwotICAgIHZpZXdwb3J0Lk1heERlcHRoID0gMS4wZjsKLSAgICB2aWV3cG9ydC5Ub3BM
ZWZ0WCA9IDA7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFkgPSAwOwotICAgIG1faW1tZWRpYXRlQ29u
dGV4dC0+UlNTZXRWaWV3cG9ydHMoMSwgJnZpZXdwb3J0KTsKLQotICAgIG1faW1tZWRpYXRlQ29u
dGV4dC0+Q2xlYXJSZW5kZXJUYXJnZXRWaWV3KG1fcmVuZGVyVGFyZ2V0Vmlldy5nZXQoKSwgRGly
ZWN0WDo6Q29sb3JzOjpCbGFuY2hlZEFsbW9uZCk7IAotfQotI2VuZGlmCi0KIFN0cmluZyBXZWJQ
b3B1cE1lbnVQcm94eVdpbjo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1ha2VTdHJpbmcoIldlYlBvcHVwTWVudVByb3h5V2luIDB4IiwgaGV4KHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaAkocmV2aXNpb24gMjg3
ODAzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2lu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEzICszMyw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9T
Y3JvbGxhYmxlQXJlYS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYmFyLmg+CiAKLSNpZiBV
U0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQzRDExRGV2aWNlMTsKLWludGVyZmFjZSBJRDNEMTFE
ZXZpY2VDb250ZXh0MTsKLWludGVyZmFjZSBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3OwotaW50ZXJm
YWNlIElEWEdJU3dhcENoYWluOwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFz
cyBXZWJWaWV3OwpAQCAtMTMxLDIzICsxMjQsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGluY3Jl
bWVudFdoZWVsRGVsdGEoaW50IGRlbHRhKTsKICAgICB2b2lkIHJlZHVjZVdoZWVsRGVsdGEoaW50
IGRlbHRhKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIHNldHVwU3dhcENoYWluKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSAgICB2b2lkIGNvbmZpZ3VyZUJhY2tpbmdTdG9yZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0jZW5kaWYKLQogICAgIFdlYlZpZXcqIG1fd2ViVmll
dzsKICAgICBWZWN0b3I8V2ViUG9wdXBJdGVtPiBtX2l0ZW1zOwogICAgIFBsYXRmb3JtUG9wdXBN
ZW51RGF0YSBtX2RhdGE7CiAgICAgaW50IG1fbmV3U2VsZWN0ZWRJbmRleCB7IDAgfTsKIAogICAg
IFJlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IG1fc2Nyb2xsYmFyOwotI2lmIFVTRShESVJFQ1Qy
RCkKLSAgICBDT01QdHI8SUQzRDExRGV2aWNlMT4gbV9kM2REZXZpY2U7Ci0gICAgQ09NUHRyPElE
M0QxMURldmljZUNvbnRleHQxPiBtX2ltbWVkaWF0ZUNvbnRleHQ7Ci0gICAgQ09NUHRyPElEM0Qx
MVJlbmRlclRhcmdldFZpZXc+IG1fcmVuZGVyVGFyZ2V0VmlldzsgCi0gICAgQ09NUHRyPElEWEdJ
U3dhcENoYWluPiBtX3N3YXBDaGFpbjsKLSNlbmRpZgogICAgIEdESU9iamVjdDxIREM+IG1fREM7
CiAgICAgR0RJT2JqZWN0PEhCSVRNQVA+IG1fYm1wOwogICAgIEhXTkQgbV9wb3B1cCB7IG51bGxw
dHIgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAJKHJldmlz
aW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjgsMTQgKzY4LDYgQEAKICNpbmNsdWRlIDxjYWlyby5oPgogI2Vu
ZGlmIAogCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGls
aXRpZXMuaD4KLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0jaW5jbHVkZSA8ZGlyZWN0eGNvbG9ycy5o
PiAKLSNpbmNsdWRlIDxkeGdpLmg+Ci0jZW5kaWYKLQotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0yNDMsMTEgKzIzNSw2IEBAIFdlYlZpZXc6Oldl
YlZpZXcoUkVDVCByZWN0LCBjb25zdCBBUEk6OlAKICAgICBtX3BhZ2UtPmluaXRpYWxpemVXZWJQ
YWdlKCk7CiAKICAgICBJbnRTaXplIHdpbmRvd1NpemUocmVjdC5yaWdodCAtIHJlY3QubGVmdCwg
cmVjdC5ib3R0b20gLSByZWN0LnRvcCk7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIERpcmVjdDJE
OjpjcmVhdGVEZXZpY2VBbmRDb250ZXh0KG1fZDNkRGV2aWNlLCBtX2ltbWVkaWF0ZUNvbnRleHQp
OwotICAgIG1fcGFnZS0+c2V0RGV2aWNlKG1fZDNkRGV2aWNlLmdldCgpKTsKLSAgICBzZXR1cFN3
YXBDaGFpbih3aW5kb3dTaXplKTsKLSNlbmRpZgogCiAgICAgaWYgKG1fcGFnZS0+ZHJhd2luZ0Fy
ZWEoKSkKICAgICAgICAgbV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5zZXRTaXplKHdpbmRvd1NpemUp
OwpAQCAtNTczLDIxICs1NjAsNiBAQCBMUkVTVUxUIFdlYlZpZXc6Om9uU2l6ZUV2ZW50KEhXTkQg
aHduZCwgCiAgICAgICAgIG1fbmV4dFJlc2l6ZVNjcm9sbE9mZnNldCA9IEludFNpemUoKTsKICAg
ICB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgaWYgKG1fc3dhcENoYWluKSB7Ci0gICAgICAg
IG1faW1tZWRpYXRlQ29udGV4dC0+T01TZXRSZW5kZXJUYXJnZXRzKDAsIG51bGxwdHIsIG51bGxw
dHIpOwotCi0gICAgICAgIG1fcmVuZGVyVGFyZ2V0VmlldyA9IG51bGxwdHI7Ci0KLSAgICAgICAg
Ly8gUHJlc2VydmUgdGhlIGV4aXN0aW5nIGJ1ZmZlciBjb3VudCAocGFzcyB6ZXJvIGZvciBjb3Vu
dCkgYW5kIGZvcm1hdCAoYnkgcGFzc2luZyBEWEdJX0ZPUk1BVF9VTktOT1dOKS4KLSAgICAgICAg
Ly8gQXV0b21hdGljYWxseSBjaG9vc2UgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gbWF0Y2ggdGhl
IGNsaWVudCByZWN0IGZvciB0aGUgYmFja2luZyB3aW5kb3cgKHBhc3MgemVyb3MgZm9yIHdpZHRo
L2hlaWdodCkuCi0gICAgICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+UmVzaXplQnVmZmVy
cygwLCAwLCAwLCBEWEdJX0ZPUk1BVF9VTktOT1dOLCBEWEdJX1NXQVBfQ0hBSU5fRkxBR19HRElf
Q09NUEFUSUJMRSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0g
ICAgICAgIGNvbmZpZ3VyZUJhY2tpbmdTdG9yZSh3aW5kb3dTaXplKTsKLSAgICB9Ci0jZW5kaWYK
LQogICAgIGhhbmRsZWQgPSB0cnVlOwogICAgIHJldHVybiAwOwogfQpAQCAtOTc0LDUwICs5NDYs
NCBAQCB2b2lkIFdlYlZpZXc6OnNldFRvb2xUaXAoY29uc3QgU3RyaW5nJiB0CiAgICAgOjpTZW5k
TWVzc2FnZShtX3Rvb2xUaXBXaW5kb3csIFRUTV9BQ1RJVkFURSwgIXRvb2xUaXAuaXNFbXB0eSgp
LCAwKTsKIH0KIAotI2lmIFVTRShESVJFQ1QyRCkKLXZvaWQgV2ViVmlldzo6c2V0dXBTd2FwQ2hh
aW4oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAoIW1fZDNkRGV2aWNl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N3YXBDaGFpbiA9IERpcmVjdDJEOjpzd2FwQ2hh
aW5PZlNpemVGb3JXaW5kb3dBbmREZXZpY2Uoc2l6ZSwgbV93aW5kb3csIG1fZDNkRGV2aWNlKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChtX3N3YXBDaGFpbik7Ci0KLSAgICBhdXRvIGZhY3RvcnkgPSBE
aXJlY3QyRDo6ZmFjdG9yeUZvckRYR0lEZXZpY2UoRGlyZWN0MkQ6OnRvRFhHSURldmljZShtX2Qz
ZERldmljZSkpOwotCi0gICAgZmFjdG9yeS0+TWFrZVdpbmRvd0Fzc29jaWF0aW9uKG1fd2luZG93
LCAwKTsKLSAgICBjb25maWd1cmVCYWNraW5nU3RvcmUoc2l6ZSk7Ci19Ci0KLXZvaWQgV2ViVmll
dzo6Y29uZmlndXJlQmFja2luZ1N0b3JlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi17
Ci0gICAgQVNTRVJUKG1fc3dhcENoYWluKTsKLSAgICBBU1NFUlQobV9kM2REZXZpY2UpOwotICAg
IEFTU0VSVChtX2ltbWVkaWF0ZUNvbnRleHQpOwotCi0gICAgLy8gQ3JlYXRlIGEgcmVuZGVyIHRh
cmdldCB2aWV3IAotICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IGJhY2tCdWZmZXI7IAotICAg
IEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVpZG9mKElEM0QxMVRl
eHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja0J1ZmZlcikpOyAKLSAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0gbV9kM2REZXZpY2UtPkNy
ZWF0ZVJlbmRlclRhcmdldFZpZXcoYmFja0J1ZmZlci5nZXQoKSwgbnVsbHB0ciwgJm1fcmVuZGVy
VGFyZ2V0Vmlldyk7IAotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAg
YXV0byogcmVuZGVyVGFyZ2V0VmlldyA9IG1fcmVuZGVyVGFyZ2V0Vmlldy5nZXQoKTsKLSAgICBt
X2ltbWVkaWF0ZUNvbnRleHQtPk9NU2V0UmVuZGVyVGFyZ2V0cygxLCAmcmVuZGVyVGFyZ2V0Vmll
dywgbnVsbHB0cik7Ci0KLSAgICAvLyBTZXR1cCB0aGUgdmlld3BvcnQgCi0gICAgRDNEMTFfVklF
V1BPUlQgdmlld3BvcnQ7Ci0gICAgdmlld3BvcnQuV2lkdGggPSAoRkxPQVQpc2l6ZS53aWR0aCgp
OwotICAgIHZpZXdwb3J0LkhlaWdodCA9IChGTE9BVClzaXplLmhlaWdodCgpOwotICAgIHZpZXdw
b3J0Lk1pbkRlcHRoID0gMC4wZjsKLSAgICB2aWV3cG9ydC5NYXhEZXB0aCA9IDEuMGY7Ci0gICAg
dmlld3BvcnQuVG9wTGVmdFggPSAwOwotICAgIHZpZXdwb3J0LlRvcExlZnRZID0gMDsKLSAgICBt
X2ltbWVkaWF0ZUNvbnRleHQtPlJTU2V0Vmlld3BvcnRzKDEsICZ2aWV3cG9ydCk7Ci0KLSAgICBt
X2ltbWVkaWF0ZUNvbnRleHQtPkNsZWFyUmVuZGVyVGFyZ2V0VmlldyhtX3JlbmRlclRhcmdldFZp
ZXcuZ2V0KCksIERpcmVjdFg6OkNvbG9yczo6TWlkbmlnaHRCbHVlKTsgCi19Ci0jZW5kaWYKLQog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4v
V2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJW
aWV3LmgJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9X
ZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSw2IEBACiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLSNpZiBVU0UoRElSRUNUMkQp
Ci1pbnRlcmZhY2UgSUQzRDExRGV2aWNlMTsKLWludGVyZmFjZSBJRDNEMTFEZXZpY2VDb250ZXh0
MTsKLWludGVyZmFjZSBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3OwotaW50ZXJmYWNlIElEWEdJU3dh
cENoYWluOwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEludFNpemU7CiB9
CkBAIC04MywxMSArNzYsNiBAQCBwdWJsaWM6CiAKICAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3
aW5nQXJlYSgpIHsgcmV0dXJuIHBhZ2UoKSA/IHBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSA6IG51bGxw
dHI7IH0KIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBJRDNEMTFEZXZpY2UxKiBkM2REZXZpY2Uo
KSBjb25zdCB7IHJldHVybiBtX2QzZERldmljZS5nZXQoKTsgfQotICAgIElEM0QxMURldmljZUNv
bnRleHQxKiBkM2RJbW1lZGlhdGVDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbW1lZGlhdGVD
b250ZXh0LmdldCgpOyB9Ci0jZW5kaWYKLQogcHJpdmF0ZToKICAgICBXZWJWaWV3KFJFQ1QsIGNv
bnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mLCBIV05EIHBhcmVudFdpbmRvdyk7CiAKQEAgLTE0
NCwxMSArMTMyLDYgQEAgcHJpdmF0ZToKICAgICAvLyBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlTGlz
dGVuZXIKICAgICB2aXJ0dWFsIHZvaWQgd2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQg
bWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0pOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIHZvaWQg
c2V0dXBTd2FwQ2hhaW4oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIHZvaWQgY29uZmln
dXJlQmFja2luZ1N0b3JlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSNlbmRpZgotCiAgICAg
SFdORCBtX3dpbmRvdyB7IG51bGxwdHIgfTsKICAgICBIV05EIG1fdG9wTGV2ZWxQYXJlbnRXaW5k
b3cgeyBudWxscHRyIH07CiAgICAgSFdORCBtX3Rvb2xUaXBXaW5kb3cgeyBudWxscHRyIH07CkBA
IC0xNjgsMTIgKzE1MSw2IEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0
OjpQYWdlQ2xpZW50SW1wbD4gbV9wYWdlQ2xpZW50OwogICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+
IG1fcGFnZTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEM0QxMURldmljZTE+IG1f
ZDNkRGV2aWNlOwotICAgIENPTVB0cjxJRDNEMTFEZXZpY2VDb250ZXh0MT4gbV9pbW1lZGlhdGVD
b250ZXh0OwotICAgIENPTVB0cjxJRDNEMTFSZW5kZXJUYXJnZXRWaWV3PiBtX3JlbmRlclRhcmdl
dFZpZXc7IAotICAgIENPTVB0cjxJRFhHSVN3YXBDaGFpbj4gbV9zd2FwQ2hhaW47Ci0jZW5kaWYK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVudS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVudS5jcHAJKHJldmlz
aW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJQb3B1cE1lbnUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTIgKzExNSw2IEBAIHZvaWQg
V2ViUG9wdXBNZW51OjpzaG93KGNvbnN0IEludFJlY3QmIHIKICAgICBzZXRVcFBsYXRmb3JtRGF0
YShwYWdlQ29vcmRpbmF0ZXMsIHBsYXRmb3JtRGF0YSk7CiAKICAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlNob3dQb3B1cE1lbnUocGFnZUNvb3JkaW5hdGVzLCBzdGF0aWNfY2FzdDx1aW50NjRf
dD4obV9wb3B1cENsaWVudC0+bWVudVN0eWxlKCkudGV4dERpcmVjdGlvbigpKSwgaXRlbXMsIHNl
bGVjdGVkSW5kZXgsIHBsYXRmb3JtRGF0YSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKLQotI2lm
IFVTRShESVJFQ1QyRCkKLSAgICAvLyBEb24ndCBkZXN0cm95IHRoZSBzaGFyZWQgaGFuZGxlIGlu
IHRoZSBXZWJDb250ZW50IHByb2Nlc3MuIEl0IHdpbGwgYmUgZGVzdHJveWVkIGluIHRoZSBVSVBy
b2Nlc3MuCi0gICAgcGxhdGZvcm1EYXRhLm1fbm90U2VsZWN0ZWRCYWNraW5nU3RvcmUtPmxlYWtT
aGFyZWRSZXNvdXJjZSgpOwotICAgIHBsYXRmb3JtRGF0YS5tX3NlbGVjdGVkQmFja2luZ1N0b3Jl
LT5sZWFrU2hhcmVkUmVzb3VyY2UoKTsKLSNlbmRpZgogfQogCiB2b2lkIFdlYlBvcHVwTWVudTo6
aGlkZSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RmluZENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
MSwxMCArMzUxLDYgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6Z2V0SW1hZ2VGb3JGaW5kTWF0Ywog
ICAgICAgICByZXR1cm47CiAKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkR2V0SW1hZ2VGb3JGaW5kTWF0Y2goaGFuZGxlLCBtYXRjaEluZGV4KSk7Ci0jaWYg
VVNFKERJUkVDVDJEKQotICAgIC8vIERvbid0IGRlc3Ryb3kgdGhlIHNoYXJlZCBoYW5kbGUgaW4g
dGhlIFdlYkNvbnRlbnQgcHJvY2Vzcy4gSXQgd2lsbCBiZSBkZXN0cm95ZWQgaW4gdGhlIFVJUHJv
Y2Vzcy4KLSAgICBzZWxlY3Rpb25TbmFwc2hvdC0+bGVha1NoYXJlZFJlc291cmNlKCk7Ci0jZW5k
aWYKIH0KIAogdm9pZCBGaW5kQ29udHJvbGxlcjo6c2VsZWN0RmluZE1hdGNoKHVpbnQzMl90IG1h
dGNoSW5kZXgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCShyZXZpc2lvbiAyODc4MDMpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Ry
YXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE0
ICs0Myw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpb24uaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1NldHRpbmdzLmg+CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHREaXJlY3QyRC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQuaD4KLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2Vu
ZGlmCi0KLQogI2lmIFVTRShHTElCX0VWRU5UX0xPT1ApCiAjaW5jbHVkZSA8d3RmL2dsaWIvUnVu
TG9vcFNvdXJjZVByaW9yaXR5Lmg+CiAjZW5kaWYKQEAgLTg2MiwxMCArODU0LDYgQEAgdm9pZCBE
cmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3M6OmRpcwogICAgICAgICB1cGRhdGVJbmZvLnVw
ZGF0ZVJlY3RzLmFwcGVuZChyZWN0KTsKICAgICB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAg
Yml0bWFwLT5sZWFrU2hhcmVkUmVzb3VyY2UoKTsgLy8gSXQgd2lsbCBiZSBkZXN0cm95ZWQgaW4g
dGhlIFVJUHJvY2Vzcy4KLSNlbmRpZgotCiAgICAgbV93ZWJQYWdlLmRpZFVwZGF0ZVJlbmRlcmlu
ZygpOwogCiAgICAgLy8gTGF5b3V0IGNhbiB0cmlnZ2VyIG1vcmUgY2FsbHMgdG8gc2V0TmVlZHNE
aXNwbGF5IGFuZCB3ZSBkb24ndCB3YW50IHRvIHByb2Nlc3MgdGhlbQpJbmRleDogU291cmNlL1dl
YktpdExlZ2FjeS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjItMDEtMDcgIFNhbSBXZWlu
aWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBEaXJl
Y3QyRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0
OTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQ
bGF0Zm9ybUZUVy5jbWFrZTogUmVtb3ZlZC4KKwogMjAyMi0wMS0wNyAgQWxleCBDaHJpc3RlbnNl
biAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVy
dGluZyByMjg3Njk4LgpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9QbGF0Zm9ybUZUVy5jbWFr
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L1BsYXRmb3JtRlRXLmNtYWtlCShy
ZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L1BsYXRmb3JtRlRXLmNtYWtl
CShub25leGlzdGVudCkKQEAgLTEsNDM4ICswLDAgQEAKLWFkZF9kZWZpbml0aW9ucygtRFVTRV9E
SVJFQ1QyRD0xIC1EVVNFX0NVUkw9MSAtRFdFQktJVF9FWFBPUlRTPTEpCi1saXN0KEFQUEVORCBX
ZWJLaXRMZWdhY3lfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgIiR7V0VCS0lUX0xJ
QlJBUklFU19ESVJ9L2luY2x1ZGUiCi0pCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfU09VUkNF
U19DbGFzc2VzCi0gICAgd2luL1dlYkRvd25sb2FkQ1VSTC5jcHAKLSAgICB3aW4vV2ViVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VTZW5kZXJDVVJMLmNwcAotKQotbGlzdChBUFBFTkQgV2ViS2l0
TGVnYWN5X1BSSVZBVEVfTElCUkFSSUVTCi0gICAgT3BlblNTTDo6U1NMCi0gICAgRDNEMTEubGli
Ci0gICAgRHhnaS5saWIKLSAgICBtZnV1aWQubGliCi0gICAgc3RybWlpZHMubGliCi0pCi0KLWFk
ZF9jdXN0b21fY29tbWFuZCgKLSAgICBPVVRQVVQgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VS
Q0VTX0RJUn0vV2ViS2l0VmVyc2lvbi5oCi0gICAgTUFJTl9ERVBFTkRFTkNZICR7V0VCS0lUTEVH
QUNZX0RJUn0vc2NyaXB0cy9nZW5lcmF0ZS13ZWJraXR2ZXJzaW9uLnBsCi0gICAgREVQRU5EUyAk
e1dFQktJVExFR0FDWV9ESVJ9L21hYy9Db25maWd1cmF0aW9ucy9WZXJzaW9uLnhjY29uZmlnCi0g
ICAgQ09NTUFORCAke1BFUkxfRVhFQ1VUQUJMRX0gJHtXRUJLSVRMRUdBQ1lfRElSfS9zY3JpcHRz
L2dlbmVyYXRlLXdlYmtpdHZlcnNpb24ucGwgLS1jb25maWcgJHtXRUJLSVRMRUdBQ1lfRElSfS9t
YWMvQ29uZmlndXJhdGlvbnMvVmVyc2lvbi54Y2NvbmZpZyAtLW91dHB1dERpciAke1dlYktpdExl
Z2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfQotICAgIFZFUkJBVElNKQotbGlzdChBUFBFTkQgV2Vi
S2l0TGVnYWN5X1NPVVJDRVMgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2Vi
S2l0VmVyc2lvbi5oKQotCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfUFJJVkFURV9JTkNMVURF
X0RJUkVDVE9SSUVTCi0gICAgIiR7Q01BS0VfQklOQVJZX0RJUn0vLi4vaW5jbHVkZS9wcml2YXRl
IgotICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9Ly4uL2luY2x1ZGUvcHJpdmF0ZS9KYXZhU2NyaXB0
Q29yZSIKLSAgICAiJHtDTUFLRV9CSU5BUllfRElSfS8uLi9pbmNsdWRlL3ByaXZhdGUvV2ViQ29y
ZSIKLSAgICAiJHtXRUJLSVRMRUdBQ1lfRElSfS93aW4iCi0gICAgIiR7V0VCS0lUTEVHQUNZX0RJ
Un0vd2luL1dlYkNvcmVTdXBwb3J0IgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJD
RVNfRElSfS9pbmNsdWRlIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElS
fS9JbnRlcmZhY2VzIgotKQotCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfSU5DTFVERVMKLSAg
ICB3aW4vQ0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcuaAotICAgIHdpbi9DT01FbnVtVmFyaWFudC5o
Ci0gICAgd2luL0NPTVByb3BlcnR5QmFnLmgKLSAgICB3aW4vQ09NVmFyaWFudFNldHRlci5oCi0g
ICAgd2luL0NvZGVBbmFseXNpc0NvbmZpZy5oCi0gICAgd2luL0RPTUNTU0NsYXNzZXMuaAotICAg
IHdpbi9ET01Db3JlQ2xhc3Nlcy5oCi0gICAgd2luL0RPTUV2ZW50c0NsYXNzZXMuaAotICAgIHdp
bi9ET01IVE1MQ2xhc3Nlcy5oCi0gICAgd2luL0RlZmF1bHREb3dubG9hZERlbGVnYXRlLmgKLSAg
ICB3aW4vRGVmYXVsdFBvbGljeURlbGVnYXRlLmgKLSAgICB3aW4vRm9yRWFjaENvQ2xhc3MuaAot
ICAgIHdpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmgKLSAgICB3aW4vTWFyc2hhbGxpbmdI
ZWxwZXJzLmgKLSAgICB3aW4vTWVtb3J5U3RyZWFtLmgKLSAgICB3aW4vUHJvZ0lETWFjcm9zLmgK
LSAgICB3aW4vV2ViQWN0aW9uUHJvcGVydHlCYWcuaAotICAgIHdpbi9XZWJBcHBsaWNhdGlvbkNh
Y2hlLmgKLSAgICB3aW4vV2ViQXJjaGl2ZS5oCi0gICAgd2luL1dlYkJhY2tGb3J3YXJkTGlzdC5o
Ci0gICAgd2luL1dlYkNhY2hlLmgKLSAgICB3aW4vV2ViQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEu
aAotICAgIHdpbi9XZWJDb3JlU3RhdGlzdGljcy5oCi0gICAgd2luL1dlYkRhdGFTb3VyY2UuaAot
ICAgIHdpbi9XZWJEYXRhYmFzZU1hbmFnZXIuaAotICAgIHdpbi9XZWJEb2N1bWVudExvYWRlci5o
Ci0gICAgd2luL1dlYkRvd25sb2FkLmgKLSAgICB3aW4vV2ViRHJvcFNvdXJjZS5oCi0gICAgd2lu
L1dlYkVsZW1lbnRQcm9wZXJ0eUJhZy5oCi0gICAgd2luL1dlYkVycm9yLmgKLSAgICB3aW4vV2Vi
RnJhbWUuaAotICAgIHdpbi9XZWJGcmFtZVBvbGljeUxpc3RlbmVyLmgKLSAgICB3aW4vV2ViR2Vv
bG9jYXRpb25Qb2xpY3lMaXN0ZW5lci5oCi0gICAgd2luL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24u
aAotICAgIHdpbi9XZWJIVE1MUmVwcmVzZW50YXRpb24uaAotICAgIHdpbi9XZWJIaXN0b3J5LmgK
LSAgICB3aW4vV2ViSGlzdG9yeUl0ZW0uaAotICAgIHdpbi9XZWJKYXZhU2NyaXB0Q29sbGVjdG9y
LmgKLSAgICB3aW4vV2ViS2l0Q09NQVBJLmgKLSAgICB3aW4vV2ViS2l0Q2xhc3NGYWN0b3J5LmgK
LSAgICB3aW4vV2ViS2l0RExMLmgKLSAgICB3aW4vV2ViS2l0R3JhcGhpY3MuaAotICAgIHdpbi9X
ZWJLaXRMb2dnaW5nLmgKLSAgICB3aW4vV2ViS2l0U3RhdGlzdGljcy5oCi0gICAgd2luL1dlYktp
dFN0YXRpc3RpY3NQcml2YXRlLmgKLSAgICB3aW4vV2ViS2l0U3lzdGVtQml0cy5oCi0gICAgd2lu
L1dlYkxvY2FsaXphYmxlU3RyaW5ncy5oCi0gICAgd2luL1dlYk11dGFibGVVUkxSZXF1ZXN0LmgK
LSAgICB3aW4vV2ViTmF2aWdhdGlvbkRhdGEuaAotICAgIHdpbi9XZWJOb3RpZmljYXRpb24uaAot
ICAgIHdpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIuaAotICAgIHdpbi9XZWJQcmVmZXJlbmNlS2V5
c1ByaXZhdGUuaAotICAgIHdpbi9XZWJQcmVmZXJlbmNlcy5oCi0gICAgd2luL1dlYlJlc291cmNl
LmgKLSAgICB3aW4vV2ViU2NyaXB0T2JqZWN0LmgKLSAgICB3aW4vV2ViU2NyaXB0V29ybGQuaAot
ICAgIHdpbi9XZWJTZWN1cml0eU9yaWdpbi5oCi0gICAgd2luL1dlYlNlcmlhbGl6ZWRKU1ZhbHVl
LmgKLSAgICB3aW4vV2ViVGV4dFJlbmRlcmVyLmgKLSAgICB3aW4vV2ViVVJMQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UuaAotICAgIHdpbi9XZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNlbmRl
ci5oCi0gICAgd2luL1dlYlVSTENyZWRlbnRpYWwuaAotICAgIHdpbi9XZWJVUkxQcm90ZWN0aW9u
U3BhY2UuaAotICAgIHdpbi9XZWJVUkxSZXNwb25zZS5oCi0gICAgd2luL1dlYlVzZXJDb250ZW50
VVJMUGF0dGVybi5oCi0gICAgd2luL1dlYlZpZXcuaAotICAgIHdpbi9XZWJXb3JrZXJzUHJpdmF0
ZS5oCi0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VTX0NsYXNzZXMKLSAgICB3
aW4vQWNjZXNzaWJsZUJhc2UuY3BwCi0gICAgd2luL0FjY2Vzc2libGVEb2N1bWVudC5jcHAKLSAg
ICB3aW4vQWNjZXNzaWJsZUltYWdlLmNwcAotICAgIHdpbi9BY2Nlc3NpYmxlVGV4dEltcGwuY3Bw
Ci0gICAgd2luL0JhY2tGb3J3YXJkTGlzdC5jcHAKLSAgICB3aW4vQ0ZEaWN0aW9uYXJ5UHJvcGVy
dHlCYWcuY3BwCi0gICAgd2luL0RPTUNTU0NsYXNzZXMuY3BwCi0gICAgd2luL0RPTUNvcmVDbGFz
c2VzLmNwcAotICAgIHdpbi9ET01FdmVudHNDbGFzc2VzLmNwcAotICAgIHdpbi9ET01IVE1MQ2xh
c3Nlcy5jcHAKLSAgICB3aW4vRGVmYXVsdERvd25sb2FkRGVsZWdhdGUuY3BwCi0gICAgd2luL0Rl
ZmF1bHRQb2xpY3lEZWxlZ2F0ZS5jcHAKLSAgICB3aW4vRm9yRWFjaENvQ2xhc3MuY3BwCi0gICAg
d2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwCi0gICAgd2luL01hcnNoYWxsaW5nSGVs
cGVycy5jcHAKLSAgICB3aW4vTWVtb3J5U3RyZWFtLmNwcAotICAgIHdpbi9XZWJBY3Rpb25Qcm9w
ZXJ0eUJhZy5jcHAKLSAgICB3aW4vV2ViQXBwbGljYXRpb25DYWNoZS5jcHAKLSAgICB3aW4vV2Vi
QXJjaGl2ZS5jcHAKLSAgICB3aW4vV2ViQmFja0ZvcndhcmRMaXN0LmNwcAotICAgIHdpbi9XZWJD
YWNoZS5jcHAKLSAgICB3aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCi0gICAgd2luL1dlYkRhdGFT
b3VyY2UuY3BwCi0gICAgd2luL1dlYkRhdGFiYXNlTWFuYWdlci5jcHAKLSAgICB3aW4vV2ViRG9j
dW1lbnRMb2FkZXIuY3BwCi0gICAgd2luL1dlYkRvd25sb2FkLmNwcAotICAgIHdpbi9XZWJEcm9w
U291cmNlLmNwcAotICAgIHdpbi9XZWJFbGVtZW50UHJvcGVydHlCYWcuY3BwCi0gICAgd2luL1dl
YkVycm9yLmNwcAotICAgIHdpbi9XZWJGcmFtZS5jcHAKLSAgICB3aW4vV2ViRnJhbWVQb2xpY3lM
aXN0ZW5lci5jcHAKLSAgICB3aW4vV2ViR2VvbG9jYXRpb25Qb2xpY3lMaXN0ZW5lci5jcHAKLSAg
ICB3aW4vV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5jcHAKLSAgICB3aW4vV2ViSFRNTFJlcHJlc2Vu
dGF0aW9uLmNwcAotICAgIHdpbi9XZWJIaXN0b3J5LmNwcAotICAgIHdpbi9XZWJIaXN0b3J5SXRl
bS5jcHAKLSAgICB3aW4vV2ViSW5zcGVjdG9yLmNwcAotICAgIHdpbi9XZWJKYXZhU2NyaXB0Q29s
bGVjdG9yLmNwcAotICAgIHdpbi9XZWJLaXRDT01BUEkuY3BwCi0gICAgd2luL1dlYktpdENsYXNz
RmFjdG9yeS5jcHAKLSAgICB3aW4vV2ViS2l0RExMLmNwcAotICAgIHdpbi9XZWJLaXRMb2dnaW5n
LmNwcAotICAgIHdpbi9XZWJLaXRNZXNzYWdlTG9vcC5jcHAKLSAgICB3aW4vV2ViS2l0U3RhdGlz
dGljcy5jcHAKLSAgICB3aW4vV2ViS2l0U3lzdGVtQml0cy5jcHAKLSAgICB3aW4vV2ViTG9jYWxp
emFibGVTdHJpbmdzLmNwcAotICAgIHdpbi9XZWJNdXRhYmxlVVJMUmVxdWVzdC5jcHAKLSAgICB3
aW4vV2ViTmF2aWdhdGlvbkRhdGEuY3BwCi0gICAgd2luL1dlYk5vZGVIaWdobGlnaHQuY3BwCi0g
ICAgd2luL1dlYk5vdGlmaWNhdGlvbi5jcHAKLSAgICB3aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVy
LmNwcAotICAgIHdpbi9XZWJQcmVmZXJlbmNlcy5jcHAKLSAgICB3aW4vV2ViUmVzb3VyY2UuY3Bw
Ci0gICAgd2luL1dlYlNjcmlwdE9iamVjdC5jcHAKLSAgICB3aW4vV2ViU2NyaXB0V29ybGQuY3Bw
Ci0gICAgd2luL1dlYlNlY3VyaXR5T3JpZ2luLmNwcAotICAgIHdpbi9XZWJTZXJpYWxpemVkSlNW
YWx1ZS5jcHAKLSAgICB3aW4vV2ViVGV4dFJlbmRlcmVyLmNwcAotICAgIHdpbi9XZWJVUkxBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZS5jcHAKLSAgICB3aW4vV2ViVVJMQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VTZW5kZXIuY3BwCi0gICAgd2luL1dlYlVSTENyZWRlbnRpYWwuY3BwCi0gICAgd2luL1dl
YlVSTFByb3RlY3Rpb25TcGFjZS5jcHAKLSAgICB3aW4vV2ViVVJMUmVzcG9uc2UuY3BwCi0gICAg
d2luL1dlYlVzZXJDb250ZW50VVJMUGF0dGVybi5jcHAKLSAgICB3aW4vV2ViVmlldy5jcHAKLSAg
ICB3aW4vV2ViV29ya2Vyc1ByaXZhdGUuY3BwCi0KLSAgICB3aW4vc3RvcmFnZS9XZWJEYXRhYmFz
ZVByb3ZpZGVyLmNwcAotKQotCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfU09VUkNFU19XZWJD
b3JlU3VwcG9ydAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAot
ICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAotICAgIHdpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQv
V2ViQ29udGV4dE1lbnVDbGllbnQuaAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJEZXNrdG9w
Tm90aWZpY2F0aW9uc0RlbGVnYXRlLmNwcAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJEZXNr
dG9wTm90aWZpY2F0aW9uc0RlbGVnYXRlLmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRHJh
Z0NsaWVudC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCi0gICAg
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVM
b2FkZXJDbGllbnQuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50LmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5j
cHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCi0g
ICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmNwcAotICAgIHdpbi9X
ZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5oCi0gICAgd2luL1dlYkNvcmVTdXBw
b3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50LmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yRGVsZWdh
dGUuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckRlbGVnYXRlLmgKLSAg
ICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAotICAgIHdpbi9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAotICAgIHdpbi9XZWJDb3JlU3Vw
cG9ydC9XZWJQbHVnaW5JbmZvUHJvdmlkZXIuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dl
YlBsdWdpbkluZm9Qcm92aWRlci5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRM
aW5rU3RvcmUuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUu
aAotKQotCi1pZiAoVVNFX0NGKQotICAgIGxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VT
X0NsYXNzZXMKLSAgICAgICAgY2YvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Q0Yu
Y3BwCi0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X0xJQlJBUklFUwotICAg
ICAgICAke0NPUkVGT1VOREFUSU9OX0xJQlJBUll9Ci0gICAgKQotZW5kaWYgKCkKLQotaWYgKENP
TVBJTEVSX0lTX0dDQ19PUl9DTEFORykKLSAgICBXRUJLSVRfQUREX1RBUkdFVF9DWFhfRkxBR1Mo
V2ViS2l0TGVnYWN5IC1Xbm8tb3ZlcmxvYWRlZC12aXJ0dWFsKQotZW5kaWYgKCkKLQotbGlzdChB
UFBFTkQgV2ViS2l0TGVnYWN5X1NPVVJDRVMgJHtXZWJLaXRMZWdhY3lfSU5DTFVERVN9ICR7V2Vi
S2l0TGVnYWN5X1NPVVJDRVNfQ2xhc3Nlc30gJHtXZWJLaXRMZWdhY3lfU09VUkNFU19XZWJDb3Jl
U3VwcG9ydH0pCi0KLXNvdXJjZV9ncm91cChJbmNsdWRlcyBGSUxFUyAke1dlYktpdExlZ2FjeV9J
TkNMVURFU30pCi1zb3VyY2VfZ3JvdXAoQ2xhc3NlcyBGSUxFUyAke1dlYktpdExlZ2FjeV9TT1VS
Q0VTX0NsYXNzZXN9KQotc291cmNlX2dyb3VwKFdlYkNvcmVTdXBwb3J0IEZJTEVTICR7V2ViS2l0
TGVnYWN5X1NPVVJDRVNfV2ViQ29yZVN1cHBvcnR9KQotCi0jIEJ1aWxkIHRoZSBDT00gaW50ZXJm
YWNlOgotbWFjcm8oR0VORVJBVEVfSU5URVJGQUNFIF9pbmZpbGUgX2RlZmluZXMgX2RlcGVuZHMp
Ci0gICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfZmlsZXdlICR7X2luZmlsZX0gTkFNRV9XRSkK
LSAgICBhZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgICAgIE9VVFBVVCAgJHtXZWJLaXRMZWdhY3lf
REVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy8ke19maWxld2V9LmgKLSAgICAgICAgTUFJ
Tl9ERVBFTkRFTkNZICR7X2luZmlsZX0KLSAgICAgICAgREVQRU5EUyAke19kZXBlbmRzfQotICAg
ICAgICBDT01NQU5EIG1pZGwuZXhlIC9JICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vd2lu
L0ludGVyZmFjZXMiIC9JICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vd2luL0ludGVyZmFj
ZXMvQWNjZXNzaWJsZTIiIC9JICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9p
bmNsdWRlIiAvSSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dpbiIgL1dYIC9jaGFyIHNp
Z25lZCAvZW52IHdpbjMyIC90bGIgIiR7Q01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfS8k
e19maWxld2V9LnRsYiIgL291dCAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0v
SW50ZXJmYWNlcyIgL2ggIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVy
ZmFjZXMvJHtfZmlsZXdlfS5oIiAvaWlkICIke19maWxld2V9X2kuYyIgJHtfZGVmaW5lc30gIiR7
Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke19pbmZpbGV9IgotICAgICAgICBVU0VTX1RFUk1J
TkFMIFZFUkJBVElNKQotICAgIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcygke1dlYktpdExl
Z2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzLyR7X2ZpbGV3ZX0uaCBQUk9QRVJU
SUVTIEdFTkVSQVRFRCBUUlVFKQotICAgIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcygke1dl
YktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzLyR7X2ZpbGV3ZX1faS5j
IFBST1BFUlRJRVMgR0VORVJBVEVEIFRSVUUpCi1lbmRtYWNybygpCi0KLXNldChNSURMX0RFRklO
RVMgL0RcIFwiX19QUk9EVUNUSU9OX189MDFcIikKLQotc2V0KFdFQktJVExFR0FDWV9JRExfREVQ
RU5ERU5DSUVTCi0gICAgd2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZUNvbXBhcmFibGUuaWRsCi0g
ICAgd2luL0ludGVyZmFjZXMvRE9NQ1NTLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0RPTUNvcmUu
aWRsCi0gICAgd2luL0ludGVyZmFjZXMvRE9NRXZlbnRzLmlkbAotICAgIHdpbi9JbnRlcmZhY2Vz
L0RPTUV4dGVuc2lvbnMuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvRE9NSFRNTC5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9ET01Qcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0RPTVJhbmdl
LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0RPTVdpbmRvdy5pZGwKLSAgICB3aW4vSW50ZXJmYWNl
cy9JR0VOX0RPTU9iamVjdC5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViQXJjaGl2ZS5pZGwK
LSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViQmFja0ZvcndhcmRMaXN0LmlkbAotICAgIHdpbi9JbnRl
cmZhY2VzL0lXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2Vz
L0lXZWJDYWNoZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViQ29yZVN0YXRpc3RpY3MuaWRs
Ci0gICAgd2luL0ludGVyZmFjZXMvSVdlYkRhdGFTb3VyY2UuaWRsCi0gICAgd2luL0ludGVyZmFj
ZXMvSVdlYkRhdGFiYXNlTWFuYWdlci5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRGVza3Rv
cE5vdGlmaWNhdGlvbnNEZWxlZ2F0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRG9jdW1l
bnQuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkRvd25sb2FkLmlkbAotICAgIHdpbi9JbnRl
cmZhY2VzL0lXZWJFZGl0aW5nRGVsZWdhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkVt
YmVkZGVkVmlldy5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRXJyb3IuaWRsCi0gICAgd2lu
L0ludGVyZmFjZXMvSVdlYkVycm9yUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2Vi
Rm9ybURlbGVnYXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJGcmFtZS5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9JV2ViRnJhbWVMb2FkRGVsZWdhdGUuaWRsCi0gICAgd2luL0ludGVyZmFj
ZXMvSVdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9J
V2ViRnJhbWVMb2FkRGVsZWdhdGVQcml2YXRlMi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2Vi
RnJhbWVQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJGcmFtZVZpZXcuaWRsCi0g
ICAgd2luL0ludGVyZmFjZXMvSVdlYkdlb2xvY2F0aW9uUG9saWN5TGlzdGVuZXIuaWRsCi0gICAg
d2luL0ludGVyZmFjZXMvSVdlYkdlb2xvY2F0aW9uUG9zaXRpb24uaWRsCi0gICAgd2luL0ludGVy
ZmFjZXMvSVdlYkdlb2xvY2F0aW9uUHJvdmlkZXIuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdl
YkhUTUxSZXByZXNlbnRhdGlvbi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViSFRUUFVSTFJl
c3BvbnNlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJIaXN0b3J5LmlkbAotICAgIHdpbi9J
bnRlcmZhY2VzL0lXZWJIaXN0b3J5RGVsZWdhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdl
Ykhpc3RvcnlJdGVtLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJIaXN0b3J5SXRlbVByaXZh
dGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkhpc3RvcnlQcml2YXRlLmlkbAotICAgIHdp
bi9JbnRlcmZhY2VzL0lXZWJJbnNwZWN0b3IuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYklu
c3BlY3RvclByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkphdmFTY3JpcHRDb2xs
ZWN0b3IuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYktpdFN0YXRpc3RpY3MuaWRsCi0gICAg
d2luL0ludGVyZmFjZXMvSVdlYk11dGFibGVVUkxSZXF1ZXN0LmlkbAotICAgIHdpbi9JbnRlcmZh
Y2VzL0lXZWJNdXRhYmxlVVJMUmVxdWVzdFByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMv
SVdlYk5hdmlnYXRpb25EYXRhLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJOb3RpZmljYXRp
b24uaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYk5vdGlmaWNhdGlvbkNlbnRlci5pZGwKLSAg
ICB3aW4vSW50ZXJmYWNlcy9JV2ViTm90aWZpY2F0aW9uT2JzZXJ2ZXIuaWRsCi0gICAgd2luL0lu
dGVyZmFjZXMvSVdlYlBvbGljeURlbGVnYXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJQ
b2xpY3lEZWxlZ2F0ZVByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlByZWZlcmVu
Y2VzLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaWRsCi0g
ICAgd2luL0ludGVyZmFjZXMvSVdlYlJlc291cmNlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lX
ZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViUmVzb3Vy
Y2VMb2FkRGVsZWdhdGVQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJSZXNvdXJj
ZUxvYWREZWxlZ2F0ZVByaXZhdGUyLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJTY3JpcHRP
YmplY3QuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlNjcmlwdFdvcmxkLmlkbAotICAgIHdp
bi9JbnRlcmZhY2VzL0lXZWJTZWN1cml0eU9yaWdpbi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9J
V2ViU2VyaWFsaXplZEpTVmFsdWUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlNlcmlhbGl6
ZWRKU1ZhbHVlUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVGV4dFJlbmRlcmVy
LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJVSURlbGVnYXRlLmlkbAotICAgIHdpbi9JbnRl
cmZhY2VzL0lXZWJVSURlbGVnYXRlMi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVUlEZWxl
Z2F0ZVByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlVSTEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJVUkxSZXF1ZXN0LmlkbAotICAg
IHdpbi9JbnRlcmZhY2VzL0lXZWJVUkxSZXNwb25zZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9J
V2ViVVJMUmVzcG9uc2VQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJVbmRvTWFu
YWdlci5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVW5kb1RhcmdldC5pZGwKLSAgICB3aW4v
SW50ZXJmYWNlcy9JV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmlkbAotICAgIHdpbi9JbnRlcmZh
Y2VzL0lXZWJWaWV3LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJWaWV3UHJpdmF0ZS5pZGwK
LSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViV29ya2Vyc1ByaXZhdGUuaWRsCi0gICAgd2luL0ludGVy
ZmFjZXMvSmF2YVNjcmlwdENvcmVBUElUeXBlcy5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9XZWJL
aXQuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvV2ViU2Nyb2xsYmFyVHlwZXMuaWRsCi0KLSAgICB3
aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlMi5pZGwKLSAgICB3aW4vSW50ZXJm
YWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlMl8yLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0Fj
Y2Vzc2libGUyL0FjY2Vzc2libGVBcHBsaWNhdGlvbi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9B
Y2Nlc3NpYmxlMi9BY2Nlc3NpYmxlRWRpdGFibGVUZXh0LmlkbAotICAgIHdpbi9JbnRlcmZhY2Vz
L0FjY2Vzc2libGUyL0FjY2Vzc2libGVSZWxhdGlvbi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9B
Y2Nlc3NpYmxlMi9BY2Nlc3NpYmxlU3RhdGVzLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0FjY2Vz
c2libGUyL0FjY2Vzc2libGVUZXh0LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUy
L0FjY2Vzc2libGVUZXh0Mi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9JQTJD
b21tb25UeXBlcy5pZGwKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0v
aW5jbHVkZS9hdXRvdmVyc2lvbi5oIgotKQotCi1hZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgT1VU
UFVUICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L2luY2x1ZGUvYXV0b3ZlcnNp
b24uaAotICAgIFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0VfU09VUkNFX0RJUn0KLSAgICBDT01N
QU5EICR7UEVSTF9FWEVDVVRBQkxFfSAke1dFQktJVF9MSUJSQVJJRVNfRElSfS90b29scy9zY3Jp
cHRzL2F1dG8tdmVyc2lvbi5wbCAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfQot
ICAgIFZFUkJBVElNKQotCi1HRU5FUkFURV9JTlRFUkZBQ0Uod2luL0ludGVyZmFjZXMvV2ViS2l0
LmlkbCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikK
LUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxl
QXBwbGljYXRpb24uaWRsICR7TUlETF9ERUZJTkVTfSAiJHtXRUJLSVRMRUdBQ1lfSURMX0RFUEVO
REVOQ0lFU30iKQotR0VORVJBVEVfSU5URVJGQUNFKHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUy
L0FjY2Vzc2libGUyLmlkbCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBF
TkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxl
Mi9BY2Nlc3NpYmxlMl8yLmlkbCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9E
RVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3Np
YmxlMi9BY2Nlc3NpYmxlUmVsYXRpb24uaWRsICR7TUlETF9ERUZJTkVTfSAiJHtXRUJLSVRMRUdB
Q1lfSURMX0RFUEVOREVOQ0lFU30iKQotR0VORVJBVEVfSU5URVJGQUNFKHdpbi9JbnRlcmZhY2Vz
L0FjY2Vzc2libGUyL0FjY2Vzc2libGVTdGF0ZXMuaWRsICR7TUlETF9ERUZJTkVTfSAiJHtXRUJL
SVRMRUdBQ1lfSURMX0RFUEVOREVOQ0lFU30iKQotR0VORVJBVEVfSU5URVJGQUNFKHdpbi9JbnRl
cmZhY2VzL0FjY2Vzc2libGUyL0lBMkNvbW1vblR5cGVzLmlkbCAke01JRExfREVGSU5FU30gIiR7
V0VCS0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4v
SW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlRWRpdGFibGVUZXh0LmlkbCAke01JRExf
REVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lO
VEVSRkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlVGV4dC5pZGwgJHtN
SURMX0RFRklORVN9ICIke1dFQktJVExFR0FDWV9JRExfREVQRU5ERU5DSUVTfSIpCi1HRU5FUkFU
RV9JTlRFUkZBQ0Uod2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIvQWNjZXNzaWJsZVRleHQyLmlk
bCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLQot
YWRkX2xpYnJhcnkoV2ViS2l0TGVnYWN5R1VJRCBTVEFUSUMKLSAgICAiJHtXZWJLaXRMZWdhY3lf
REVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9XZWJLaXQuaCIKLSAgICAiJHtXZWJLaXRM
ZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlQXBwbGljYXRp
b24uaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNl
cy9BY2Nlc3NpYmxlMi5oIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElS
fS9JbnRlcmZhY2VzL0FjY2Vzc2libGUyXzIuaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlUmVsYXRpb24uaCIKLSAgICAiJHtX
ZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlU3Rh
dGVzLmgiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFj
ZXMvSUEyQ29tbW9uVHlwZXMuaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VT
X0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlRWRpdGFibGVUZXh0LmgiCi0gICAgIiR7V2ViS2l0
TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZVRleHQuaCIK
LSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nl
c3NpYmxlVGV4dDIuaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0v
SW50ZXJmYWNlcy9XZWJLaXRfaS5jIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJD
RVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVBcHBsaWNhdGlvbl9pLmMiCi0gICAgIiR7V2Vi
S2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZTJfaS5j
IgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0Fj
Y2Vzc2libGUyXzJfaS5jIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElS
fS9JbnRlcmZhY2VzL0FjY2Vzc2libGVSZWxhdGlvbl9pLmMiCi0gICAgIiR7V2ViS2l0TGVnYWN5
X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZUVkaXRhYmxlVGV4dF9p
LmMiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMv
QWNjZXNzaWJsZVRleHRfaS5jIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNf
RElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVUZXh0Ml9pLmMiCi0pCi1zZXRfdGFyZ2V0X3Byb3Bl
cnRpZXMoV2ViS2l0TGVnYWN5R1VJRCBQUk9QRVJUSUVTIE9VVFBVVF9OQU1FIFdlYktpdEdVSUQk
e0RFQlVHX1NVRkZJWH0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9QUklWQVRFX0xJQlJB
UklFUwotICAgIENvbWN0bDMyCi0gICAgQ29tc3VwcAotICAgIENyeXB0MzIKLSAgICBEMmQxCi0g
ICAgRHdyaXRlCi0gICAgRHhndWlkCi0gICAgSXBobHBhcGkKLSAgICBQc2FwaQotICAgIFJwY3J0
NAotICAgIFNobHdhcGkKLSAgICBVc3AxMAotICAgIFZlcnNpb24KLSAgICBXZWJLaXRHVUlEJHtE
RUJVR19TVUZGSVh9Ci0gICAgV2luZG93c0NvZGVjcwotICAgIFdpbm1tCi0pCi0KLXNldChDTUFL
RV9TSEFSRURfTElOS0VSX0ZMQUdTICIke0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1N9IC9TVUJT
WVNURU06V0lORE9XUyIpCi1zZXQoQ01BS0VfRVhFX0xJTktFUl9GTEFHUyAiJHtDTUFLRV9FWEVf
TElOS0VSX0ZMQUdTfSAvU1VCU1lTVEVNOldJTkRPV1MiKQotCi0jIFdlIG5lZWQgdGhlIHdlYmtp
dCBsaWJyYXJpZXMgdG8gY29tZSBiZWZvcmUgdGhlIHN5c3RlbSBkZWZhdWx0IGxpYnJhcmllcyB0
byBwcmV2ZW50IHN5bWJvbCBjb25mbGljdHMgd2l0aCB1dWlkLmxpYi4KLSMgVG8gZG8gdGhpcyB3
ZSBhZGQgc3lzdGVtIGRlZmF1bHQgbGlicyBhcyB3ZWJraXQgbGlicyBhbmQgemVybyBvdXQgc3lz
dGVtIGRlZmF1bHQgbGlicy4KLXN0cmluZyhSRVBMQUNFICIgIiAiXDsiIENYWF9MSUJTICR7Q01B
S0VfQ1hYX1NUQU5EQVJEX0xJQlJBUklFU30pCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfTElC
UkFSSUVTICR7Q1hYX0xJQlN9KQotc2V0KENNQUtFX0NYWF9TVEFOREFSRF9MSUJSQVJJRVMgIiIp
Ci0KLXNldChDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTICIke0NNQUtFX1NIQVJFRF9MSU5LRVJf
RkxBR1N9ICR7TVNWQ19SVU5USU1FX0xJTktFUl9GTEFHU30iKQotCi0jIElmIHRoaXMgZGlyZWN0
b3J5IGlzbid0IGNyZWF0ZWQgYmVmb3JlIG1pZGwgcnVucyBhbmQgYXR0ZW1wdHMgdG8gb3V0cHV0
IFdlYktpdC50bGIsCi0jIEl0IGZhaWxzIHdpdGggYW4gdW51c3VhbCBlcnJvciAtIG1pZGwgZmFp
bGVkIC0gZmFpbGVkIHRvIHNhdmUgYWxsIGNoYW5nZXMKLWZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtD
TUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9KQotZmlsZShNQUtFX0RJUkVDVE9SWSAke1dl
YktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzKQotCi1zZXQoV2ViS2l0
TGVnYWN5X1BVQkxJQ19GUkFNRVdPUktfSEVBREVSUwotICAgICR7V2ViS2l0TGVnYWN5X0RFUklW
RURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZTIuaAotICAgICR7V2ViS2l0TGVn
YWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZTJfMi5oCi0gICAg
JHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxl
QXBwbGljYXRpb24uaAotICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0lu
dGVyZmFjZXMvQWNjZXNzaWJsZUVkaXRhYmxlVGV4dC5oCi0gICAgJHtXZWJLaXRMZWdhY3lfREVS
SVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlUmVsYXRpb24uaAotICAgICR7
V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZVN0
YXRlcy5oCi0gICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNl
cy9BY2Nlc3NpYmxlVGV4dC5oCi0gICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJ
Un0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlVGV4dDIuaAotICAgICR7V2ViS2l0TGVnYWN5X0RFUklW
RURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvSUEyQ29tbW9uVHlwZXMuaAotICAgICR7V2ViS2l0
TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvV2ViS2l0LmgKLQotICAgIHdp
bi9BY2Nlc3NpYmxlQmFzZS5oCi0gICAgd2luL0FjY2Vzc2libGVEb2N1bWVudC5oCi0gICAgd2lu
L0NGRGljdGlvbmFyeVByb3BlcnR5QmFnLmgKLSAgICB3aW4vV2ViRGF0YVNvdXJjZS5oCi0gICAg
d2luL1dlYkZyYW1lLmgKLSAgICB3aW4vV2ViS2l0Q09NQVBJLmgKLSkKLQotV0VCS0lUX01BS0Vf
Rk9SV0FSRElOR19IRUFERVJTKFdlYktpdExlZ2FjeUdVSUQKLSAgICBUQVJHRVRfTkFNRSBXZWJL
aXRMZWdhY3lGcmFtZXdvcmtIZWFkZXJzCi0gICAgREVTVElOQVRJT04gJHtXZWJLaXRMZWdhY3lf
RlJBTUVXT1JLX0hFQURFUlNfRElSfS9XZWJLaXRMZWdhY3kKLSAgICBGSUxFUyAke1dlYktpdExl
Z2FjeV9QVUJMSUNfRlJBTUVXT1JLX0hFQURFUlN9Ci0gICAgRkxBVFRFTkVECi0pCi0KLXNldChX
ZWJLaXRMZWdhY3lfT1VUUFVUX05BTUUKLSAgICBXZWJLaXQke0RFQlVHX1NVRkZJWH0KLSkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIz
IEBACisyMDIyLTAxLTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZW1vdmUgc3VwcG9ydCBmb3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3Ojpk
ZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViVmlldzo6ZW5zdXJlQmFja2luZ1N0b3Jl
KToKKyAgICAgICAgKFdlYlZpZXc6OnNjcm9sbEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJW
aWV3OjpzaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJWaWV3Ojp1cGRhdGVCYWNraW5nU3RvcmUp
OgorICAgICAgICAoV2ViVmlldzo6cGFpbnQpOgorICAgICAgICAoV2ViVmlldzo6cGFpbnRJbnRv
QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYlZpZXc6OldlYlZpZXdXbmRQcm9jKToKKyAgICAg
ICAgKFdlYlZpZXc6Om5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJWaWV3
OjpwYWludFdpdGhEaXJlY3QyRCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViVmlldy5oOgorCiAy
MDIyLTAxLTA2ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAgICAgICAg
SGF2ZSBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCBhbmQgcmVsYXRlZCBuZXR3b3JraW5nIGFjdG9y
cyB1c2UgU2hhcmVkQnVmZmVyLgpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAJ
KHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDksMTAgKzIwOSw2IEBACiAjaW5jbHVkZSAiQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQuaCIKICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotI2lu
Y2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaD4KLSNlbmRpZgotCiAjaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogI2luY2x1ZGUgPFdlYkNvcmUvRnVsbFNjcmVlbkNvbnRy
b2xsZXIuaD4KICNlbmRpZgpAQCAtODU1LDExICs4NTEsNiBAQCB2b2lkIFdlYlZpZXc6OmRlbGV0
ZUJhY2tpbmdTdG9yZSgpCiAgICAgICAgIG1fZGVsZXRlQmFja2luZ1N0b3JlVGltZXJBY3RpdmUg
PSBmYWxzZTsKICAgICB9CiAgICAgbV9iYWNraW5nU3RvcmVCaXRtYXAgPSBudWxscHRyOwotI2lm
IFVTRShESVJFQ1QyRCkKLSAgICBtX2JhY2tpbmdTdG9yZUQyREJpdG1hcCA9IG51bGxwdHI7Ci0g
ICAgbV9iYWNraW5nU3RvcmVHZGlJbnRlcm9wID0gbnVsbHB0cjsKLSAgICBtX2JhY2tpbmdTdG9y
ZVJlbmRlclRhcmdldCA9IG51bGxwdHI7Ci0jZW5kaWYKICAgICBtX2JhY2tpbmdTdG9yZURpcnR5
UmVnaW9uID0gbnVsbHB0cjsKICAgICBtX2JhY2tpbmdTdG9yZVNpemUuY3ggPSBtX2JhY2tpbmdT
dG9yZVNpemUuY3kgPSAwOwogfQpAQCAtODczLDIwICs4NjQsNiBAQCBib29sIFdlYlZpZXc6OmVu
c3VyZUJhY2tpbmdTdG9yZSgpCiAgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwICYmICh3
aWR0aCAhPSBtX2JhY2tpbmdTdG9yZVNpemUuY3ggfHwgaGVpZ2h0ICE9IG1fYmFja2luZ1N0b3Jl
U2l6ZS5jeSkpIHsKICAgICAgICAgZGVsZXRlQmFja2luZ1N0b3JlKCk7CiAKLSNpZiBVU0UoRElS
RUNUMkQpCi0gICAgICAgIGF1dG8gYml0bWFwU2l6ZSA9IEQyRDE6OlNpemVGKHdpZHRoLCBoZWln
aHQpOwotICAgICAgICBhdXRvIHBpeGVsU2l6ZSA9IEQyRDE6OlNpemVVKHdpZHRoLCBoZWlnaHQp
OwotCi0gICAgICAgIGlmICghbV9yZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgICAgIC8vIENyZWF0
ZSBhIERpcmVjdDJEIHJlbmRlciB0YXJnZXQuCi0gICAgICAgICAgICBhdXRvIHJlbmRlclRhcmdl
dFByb3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAg
ICByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLnVzYWdlID0gRDJEMV9SRU5ERVJfVEFSR0VUX1VTQUdF
X0dESV9DT01QQVRJQkxFOwotICAgICAgICAgICAgYXV0byBod25kUmVuZGVyVGFyZ2V0UHJvcGVy
dGllcyA9IEQyRDE6Okh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKG1fdmlld1dpbmRvdywgcGl4
ZWxTaXplKTsKLSAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3Rl
bUZhY3RvcnkoKS0+Q3JlYXRlSHduZFJlbmRlclRhcmdldCgmcmVuZGVyVGFyZ2V0UHJvcGVydGll
cywgJmh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLCAmbV9yZW5kZXJUYXJnZXQpOwotICAgICAg
ICAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotI2VuZGlmCiAgICAgICAgIG1fYmFja2luZ1N0b3JlU2l6ZS5jeCA9IHdpZHRo
OwogICAgICAgICBtX2JhY2tpbmdTdG9yZVNpemUuY3kgPSBoZWlnaHQ7CiAgICAgICAgIEJpdG1h
cEluZm8gYml0bWFwSW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZUJvdHRvbVVwKEludFNpemUobV9i
YWNraW5nU3RvcmVTaXplKSk7CkBAIC04OTQsMTYgKzg3MSw2IEBAIGJvb2wgV2ViVmlldzo6ZW5z
dXJlQmFja2luZ1N0b3JlKCkKICAgICAgICAgdm9pZCogcGl4ZWxzID0gTlVMTDsKICAgICAgICAg
bV9iYWNraW5nU3RvcmVCaXRtYXAgPSBTaGFyZWRHRElPYmplY3Q8SEJJVE1BUD46OmNyZWF0ZShh
ZG9wdEdESU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24oMCwgJmJpdG1hcEluZm8sIERJQl9SR0Jf
Q09MT1JTLCAmcGl4ZWxzLCAwLCAwKSkpOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgICAgICBI
UkVTVUxUIGhyID0gbV9yZW5kZXJUYXJnZXQtPkNyZWF0ZUNvbXBhdGlibGVSZW5kZXJUYXJnZXQo
JmJpdG1hcFNpemUsICZwaXhlbFNpemUsIG51bGxwdHIsIEQyRDFfQ09NUEFUSUJMRV9SRU5ERVJf
VEFSR0VUX09QVElPTlNfR0RJX0NPTVBBVElCTEUsICZtX2JhY2tpbmdTdG9yZVJlbmRlclRhcmdl
dCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgICAgIGhy
ID0gbV9iYWNraW5nU3RvcmVSZW5kZXJUYXJnZXQtPkdldEJpdG1hcCgmbV9iYWNraW5nU3RvcmVE
MkRCaXRtYXApOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAg
ICAgICBociA9IG1fYmFja2luZ1N0b3JlUmVuZGVyVGFyZ2V0LT5RdWVyeUludGVyZmFjZShfX3V1
aWRvZihJRDJEMUdkaUludGVyb3BSZW5kZXJUYXJnZXQpLCAodm9pZCoqKSZtX2JhY2tpbmdTdG9y
ZUdkaUludGVyb3ApOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSNl
bmRpZgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTk3OCwxNiArOTQ1LDYgQEAg
dm9pZCBXZWJWaWV3OjpzY3JvbGxCYWNraW5nU3RvcmUoRnJhbWVWaQogICAgIEZsb2F0UmVjdCBj
bGlwUmVjdChsb2dpY2FsQ2xpcFJlY3QpOwogICAgIGNsaXBSZWN0LnNjYWxlKHNjYWxlRmFjdG9y
KTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBSRUNUIHNjcm9sbFJlY3RXaW4oc2Nyb2xsVmll
d1JlY3QpOwotICAgIFJFQ1QgY2xpcFJlY3RXaW4oZW5jbG9zaW5nSW50UmVjdChjbGlwUmVjdCkp
OwotICAgIFJFQ1QgdXBkYXRlUmVjdDsKLSAgICA6OlNjcm9sbFdpbmRvd0V4KG1fdmlld1dpbmRv
dywgZHgsIGR5LCAmc2Nyb2xsUmVjdFdpbiwgJmNsaXBSZWN0V2luLCBudWxscHRyLCAmdXBkYXRl
UmVjdCwgMCk7Ci0gICAgOjpJbnZhbGlkYXRlUmVjdChtX3ZpZXdXaW5kb3csICZ1cGRhdGVSZWN0
LCBGQUxTRSk7Ci0KLSAgICBpZiAobV91aURlbGVnYXRlUHJpdmF0ZSkKLSAgICAgICAgbV91aURl
bGVnYXRlUHJpdmF0ZS0+d2ViVmlld1Njcm9sbGVkKHRoaXMpOwotI2Vsc2UKICAgICBpZiAoaXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBi
ZSBkb2luZyBzb21ldGhpbmcgc21hcnRlciBoZXJlLCBsaWtlIG1vdmluZyB0aWxlcyBhcm91bmQg
YW5kIHBhaW50aW5nCiAgICAgICAgIC8vIGFueSBuZXdseS1leHBvc2VkIHRpbGVzLiA8aHR0cDov
L3dlYmtpdC5vcmcvYi81MjcxND4KQEAgLTEwMzksNyArOTk2LDYgQEAgdm9pZCBXZWJWaWV3Ojpz
Y3JvbGxCYWNraW5nU3RvcmUoRnJhbWVWaQogCiAgICAgLy8gQ2xlYW4gdXAuCiAgICAgOjpTZWxl
Y3RPYmplY3QoYml0bWFwREMuZ2V0KCksIG9sZEJpdG1hcCk7Ci0jZW5kaWYgLy8gVVNFKERJUkVD
VDJEKQogfQogCiB2b2lkIFdlYlZpZXc6OnNpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmIG5ld1Np
emUpCkBAIC0xMDY3LDIwICsxMDIzLDYgQEAgdm9pZCBXZWJWaWV3OjpzaXplQ2hhbmdlZChjb25z
dCBJbnRTaXplJgogICAgIGlmIChtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KQogICAg
ICAgICBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5yZXNpemVSb290TGF5ZXIobmV3
U2l6ZSk7CiAjZW5kaWYKLQotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBpZiAobV9yZW5kZXJUYXJn
ZXQpIHsKLSAgICAgICAgbV9yZW5kZXJUYXJnZXQtPlJlc2l6ZShuZXdTaXplKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBhIERpcmVjdDJEIHJlbmRlciB0YXJnZXQu
Ci0gICAgYXV0byByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gRDJEMTo6UmVuZGVyVGFyZ2V0UHJv
cGVydGllcygpOwotICAgIHJlbmRlclRhcmdldFByb3BlcnRpZXMudXNhZ2UgPSBEMkQxX1JFTkRF
Ul9UQVJHRVRfVVNBR0VfR0RJX0NPTVBBVElCTEU7Ci0gICAgYXV0byBod25kUmVuZGVyVGFyZ2V0
UHJvcGVydGllcyA9IEQyRDE6Okh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKG1fdmlld1dpbmRv
dywgbmV3U2l6ZSwgRDJEMV9QUkVTRU5UX09QVElPTlNfSU1NRURJQVRFTFkpOwotICAgIEhSRVNV
TFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlSHduZFJlbmRl
clRhcmdldCgmcmVuZGVyVGFyZ2V0UHJvcGVydGllcywgJmh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0
aWVzLCAmbV9yZW5kZXJUYXJnZXQpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLSNlbmRp
ZgogfQogCiBib29sIFdlYlZpZXc6OmRwaUNoYW5nZWQoZmxvYXQsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIG5ld1NpemUpCkBAIC0xMTQxLDEzICsxMDgzLDYgQEAgdm9pZCBXZWJWaWV3Ojp1cGRh
dGVCYWNraW5nU3RvcmUoRnJhbWVWaQogCiAgICAgTE9DQUxfR0RJX0NPVU5URVIoMCwgX19GVU5D
VElPTl9fKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlR2Rp
SW50ZXJvcCkgewotICAgICAgICBIUkVTVUxUIGhyID0gbV9iYWNraW5nU3RvcmVSZW5kZXJUYXJn
ZXQtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEMkQxR2RpSW50ZXJvcFJlbmRlclRhcmdldCks
ICh2b2lkKiopJm1fYmFja2luZ1N0b3JlR2RpSW50ZXJvcCk7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKFNVQ0NFRURFRChocikpOwotICAgIH0KLSNlbmRpZgotCiAgICAgR0RJT2JqZWN0PEhEQz4g
Yml0bWFwRENPYmplY3Q7CiAKICAgICBIREMgYml0bWFwREMgPSBkYzsKQEAgLTExNTgsMTAgKzEw
OTMsNiBAQCB2b2lkIFdlYlZpZXc6OnVwZGF0ZUJhY2tpbmdTdG9yZShGcmFtZVZpCiAgICAgICAg
IGJpdG1hcERDID0gYml0bWFwRENPYmplY3QuZ2V0KCk7CiAgICAgICAgIG9sZEJpdG1hcCA9IDo6
U2VsZWN0T2JqZWN0KGJpdG1hcERDLCBtX2JhY2tpbmdTdG9yZUJpdG1hcC0+Z2V0KCkpOwogICAg
ICAgICBBU1NFUlQob2xkQml0bWFwKTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIEhSRVNV
TFQgaHIgPSBtX2JhY2tpbmdTdG9yZUdkaUludGVyb3AtPkdldERDKEQyRDFfRENfSU5JVElBTEla
RV9NT0RFX0NPUFksICZiaXRtYXBEQyk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURF
RChocikpOwotI2VuZGlmCiAgICAgfQogCiAgICAgaWYgKG1fYmFja2luZ1N0b3JlQml0bWFwICYm
IChtX2JhY2tpbmdTdG9yZURpcnR5UmVnaW9uIHx8IGJhY2tpbmdTdG9yZUNvbXBsZXRlbHlEaXJ0
eSkpIHsKQEAgLTExODUsMTIgKzExMTYsOCBAQCB2b2lkIFdlYlZpZXc6OnVwZGF0ZUJhY2tpbmdT
dG9yZShGcmFtZVZpCiAgICAgICAgIG1fYmFja2luZ1N0b3JlRGlydHlSZWdpb24gPSBudWxscHRy
OwogICAgIH0KIAotICAgIGlmICghZGMpIHsKKyAgICBpZiAoIWRjKQogICAgICAgICA6OlNlbGVj
dE9iamVjdChiaXRtYXBEQywgb2xkQml0bWFwKTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAg
IG1fYmFja2luZ1N0b3JlR2RpSW50ZXJvcC0+UmVsZWFzZURDKG51bGxwdHIpOwotI2VuZGlmCi0g
ICAgfQogCiAgICAgR2RpRmx1c2goKTsKIApAQCAtMTIyNSw2OSArMTE1Miw2IEBAIHZvaWQgV2Vi
Vmlldzo6cGVyZm9ybUxheWVyZWRXaW5kb3dVcGRhdGUKICAgICBtX25lZWRzRGlzcGxheSA9IGZh
bHNlOwogfQogCi12b2lkIFdlYlZpZXc6OnBhaW50V2l0aERpcmVjdDJEKCkKLXsKLSNpZiBVU0Uo
RElSRUNUMkQpCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUobV9tYWluRnJhbWUpOwotICAg
IGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSBjb3JlRnJhbWUtPnZpZXcoKTsKLSAgICBmcmFtZVZpZXctPnVwZGF0ZUxheW91dEFuZFN0
eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKLQotICAgIGlmICghbV9yZW5kZXJUYXJnZXQpIHsKLSAg
ICAgICAgLy8gQ3JlYXRlIGEgRGlyZWN0MkQgcmVuZGVyIHRhcmdldC4KLSAgICAgICAgYXV0byBy
ZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gRDJEMTo6UmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwot
ICAgICAgICByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLnVzYWdlID0gRDJEMV9SRU5ERVJfVEFSR0VU
X1VTQUdFX0dESV9DT01QQVRJQkxFOwotCi0gICAgICAgIFJFQ1QgcmVjdDsKLSAgICAgICAgOjpH
ZXRDbGllbnRSZWN0KG1fdmlld1dpbmRvdywgJnJlY3QpOwotCi0gICAgICAgIEludFJlY3QgY2xp
ZW50UmVjdChyZWN0KTsKLQotICAgICAgICBhdXRvIHBpeGVsU2l6ZSA9IEQyRDE6OlNpemVVKGNs
aWVudFJlY3Qud2lkdGgoKSwgY2xpZW50UmVjdC5oZWlnaHQoKSk7Ci0KLSAgICAgICAgYXV0byBo
d25kUmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IEQyRDE6Okh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0
aWVzKG1fdmlld1dpbmRvdywgcGl4ZWxTaXplLCBEMkQxX1BSRVNFTlRfT1BUSU9OU19JTU1FRElB
VEVMWSk7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3Rv
cnkoKS0+Q3JlYXRlSHduZFJlbmRlclRhcmdldCgmcmVuZGVyVGFyZ2V0UHJvcGVydGllcywgJmh3
bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLCAmbV9yZW5kZXJUYXJnZXQpOwotICAgICAgICBpZiAo
IVNVQ0NFRURFRChocikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUkVDVCBj
bGllbnRSZWN0ID0ge307Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgcGxhdGZvcm1Db250
ZXh0KG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHRXaW4gZ2MoJnBs
YXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlw
ZTo6R1BVTWVtb3J5KTsKLQotICAgIHsKLSAgICAgICAgbV9yZW5kZXJUYXJnZXQtPlNldFRhZ3Mo
V0VCS0lUX0RSQVdJTkcsIF9fTElORV9fKTsKLSAgICAgICAgbV9yZW5kZXJUYXJnZXQtPkNsZWFy
KCk7Ci0KLSAgICAgICAgLy8gRGlyZWN0MkQgaG9ub3JzIHRoZSBzY2FsZSBmYWN0b3IgbmF0aXZl
bHkuCi0gICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZjsKLSAgICAgICAgZmxvYXQgaW52
ZXJzZVNjYWxlRmFjdG9yID0gMS4wZiAvIHNjYWxlRmFjdG9yOwotCi0gICAgICAgIEdldENsaWVu
dFJlY3QobV92aWV3V2luZG93LCAmY2xpZW50UmVjdCk7Ci0KLSAgICAgICAgSW50UmVjdCBkaXJ0
eVJlY3RQaXhlbHMoMCwgMCwgY2xpZW50UmVjdC5yaWdodCwgY2xpZW50UmVjdC5ib3R0b20pOwot
ICAgICAgICBGbG9hdFJlY3QgbG9naWNhbERpcnR5UmVjdEZsb2F0ID0gZGlydHlSZWN0UGl4ZWxz
OwotICAgICAgICBsb2dpY2FsRGlydHlSZWN0RmxvYXQuc2NhbGUoaW52ZXJzZVNjYWxlRmFjdG9y
KTsKLSAgICAgICAgSW50UmVjdCBsb2dpY2FsRGlydHlSZWN0KGVuY2xvc2luZ0ludFJlY3QobG9n
aWNhbERpcnR5UmVjdEZsb2F0KSk7Ci0KLSAgICAgICAgaWYgKGZyYW1lVmlldyAmJiBmcmFtZVZp
ZXctPmZyYW1lKCkuY29udGVudFJlbmRlcmVyKCkpIHsKLSAgICAgICAgICAgIGdjLnNhdmUoKTsK
LSAgICAgICAgICAgIGdjLnNjYWxlKEZsb2F0U2l6ZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3Ip
KTsKLSAgICAgICAgICAgIGdjLmNsaXAobG9naWNhbERpcnR5UmVjdCk7Ci0gICAgICAgICAgICBm
cmFtZVZpZXctPnBhaW50KGdjLCBsb2dpY2FsRGlydHlSZWN0KTsKLSAgICAgICAgICAgIGlmICht
X3Nob3VsZEludmVydENvbG9ycykKLSAgICAgICAgICAgICAgICBnYy5maWxsUmVjdChsb2dpY2Fs
RGlydHlSZWN0LCBDb2xvcjo6d2hpdGUsIENvbXBvc2l0ZU9wZXJhdG9yOjpEaWZmZXJlbmNlKTsK
LSAgICAgICAgICAgIGdjLnJlc3RvcmUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIDo6VmFs
aWRhdGVSZWN0KG1fdmlld1dpbmRvdywgJmNsaWVudFJlY3QpOwotI2Vsc2UKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotfQotCiB2b2lkIFdlYlZpZXc6OnBhaW50KEhEQyBkYywg
TFBBUkFNIG9wdGlvbnMpCiB7CiAgICAgTE9DQUxfR0RJX0NPVU5URVIoMCwgX19GVU5DVElPTl9f
KTsKQEAgLTEzNDksMTggKzEyMTMsOCBAQCB2b2lkIFdlYlZpZXc6OnBhaW50KEhEQyBkYywgTFBB
UkFNIG9wdGlvCiAKICAgICA6OlNlbGVjdE9iamVjdChiaXRtYXBEQy5nZXQoKSwgb2xkQml0bWFw
KTsKIAotICAgIGlmICghZGMpIHsKKyAgICBpZiAoIWRjKQogICAgICAgICBFbmRQYWludChtX3Zp
ZXdXaW5kb3csICZwcyk7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgICAgICBIUkVTVUxUIGhyID0g
bV9iYWNraW5nU3RvcmVSZW5kZXJUYXJnZXQtPkVuZERyYXcoKTsKLSAgICAgICAgLy8gRklYTUU6
IFJlY29nbml6ZSBhbmQgcmVjb3ZlciBmcm9tIGVycm9yIHN0YXRlOgotICAgICAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSNlbmRpZgotICAgIH0KLQotI2lmIFVTRShESVJFQ1Qy
RCkKLSAgICBtX2JhY2tpbmdTdG9yZUdkaUludGVyb3AtPlJlbGVhc2VEQyhudWxscHRyKTsKLSNl
bmRpZgogCiAgICAgaWYgKGFjdGl2ZSgpKQogICAgICAgICBjYW5jZWxEZWxldGVCYWNraW5nU3Rv
cmVTb29uKCk7CkBAIC0xNDAzLDEwICsxMjU3LDYgQEAgdm9pZCBXZWJWaWV3OjpwYWludEludG9C
YWNraW5nU3RvcmUoRnJhbQogICAgIGxvZ2ljYWxEaXJ0eVJlY3RGbG9hdC5zY2FsZShpbnZlcnNl
U2NhbGVGYWN0b3IpOyAgICAKICAgICBJbnRSZWN0IGxvZ2ljYWxEaXJ0eVJlY3QoZW5jbG9zaW5n
SW50UmVjdChsb2dpY2FsRGlydHlSZWN0RmxvYXQpKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAg
ICBtX2JhY2tpbmdTdG9yZVJlbmRlclRhcmdldCA9IG51bGxwdHI7Ci0jZW5kaWYKLQogICAgIEdy
YXBoaWNzQ29udGV4dFdpbiBnYyhiaXRtYXBEQywgbV90cmFuc3BhcmVudCk7CiAgICAgZ2Muc2F2
ZSgpOwogICAgIGlmIChtX3RyYW5zcGFyZW50KQpAQCAtMjUxMCwxMSArMjM2MCw3IEBAIExSRVNV
TFQgQ0FMTEJBQ0sgV2ViVmlldzo6V2ViVmlld1duZFByb2MKIAogICAgIHN3aXRjaCAobWVzc2Fn
ZSkgewogICAgICAgICBjYXNlIFdNX1BBSU5UOiB7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgICAg
ICAgICAgd2ViVmlldy0+cGFpbnRXaXRoRGlyZWN0MkQoKTsKLSNlbHNlCiAgICAgICAgICAgICB3
ZWJWaWV3LT5wYWludCgwLCAwKTsKLSNlbmRpZgogICAgICAgICAgICAgaWYgKHdlYlZpZXctPnVz
ZXNMYXllcmVkV2luZG93KCkpCiAgICAgICAgICAgICAgICAgd2ViVmlldy0+cGVyZm9ybUxheWVy
ZWRXaW5kb3dVcGRhdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTQ0NCwxMCArNTI5MCw2
IEBAIEhSRVNVTFQgV2ViVmlldzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2UKICAgICBociA9IHBy
ZWZzUHJpdmF0ZS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoJmVuYWJsZWQpOwogICAg
IGlmIChGQUlMRUQoaHIpKQogICAgICAgICByZXR1cm4gaHI7Ci0jaWYgVVNFKERJUkVDVDJEKQot
ICAgIC8vIERpc2FibGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgZm9yIG5vdy4KLSAgICBlbmFi
bGVkID0gZmFsc2U7Ci0jZW5kaWYKICAgICBzZXR0aW5ncy5zZXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nRW5hYmxlZChlbmFibGVkKTsKIAogICAgIGhyID0gcHJlZnNQcml2YXRlLT5zaG93RGVidWdC
b3JkZXJzKCZlbmFibGVkKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmgJKHJldmlz
aW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsMTMgKzc3LDYgQEAgV2ViVmlldyoga2l0KFdlYkNvcmU6OlBhZ2UqKTsK
IFdlYkNvcmU6OlBhZ2UqIGNvcmUoSVdlYlZpZXcqKTsKIAogaW50ZXJmYWNlIElEcm9wVGFyZ2V0
SGVscGVyOwotI2lmIFVTRShESVJFQ1QyRCkKLWludGVyZmFjZSBJRDJEMUJpdG1hcDsKLWludGVy
ZmFjZSBJRDJEMUJpdG1hcFJlbmRlclRhcmdldDsKLWludGVyZmFjZSBJRDJEMUdkaUludGVyb3BS
ZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFId25kUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNl
IElEMkQxUmVuZGVyVGFyZ2V0OwotI2VuZGlmCiAKIGNsYXNzIFdlYlZpZXcgZmluYWwKICAgICA6
IHB1YmxpYyBJV2ViVmlldwpAQCAtNDI3LDcgKzQyMCw2IEBAIHB1YmxpYzoKICAgICBib29sIGtl
eURvd24oV1BBUkFNLCBMUEFSQU0sIGJvb2wgc3lzdGVtS2V5RG93biA9IGZhbHNlKTsKICAgICBi
b29sIGtleVVwKFdQQVJBTSwgTFBBUkFNLCBib29sIHN5c3RlbUtleURvd24gPSBmYWxzZSk7CiAg
ICAgYm9vbCBrZXlQcmVzcyhXUEFSQU0sIExQQVJBTSwgYm9vbCBzeXN0ZW1LZXlEb3duID0gZmFs
c2UpOwotICAgIHZvaWQgcGFpbnRXaXRoRGlyZWN0MkQoKTsKICAgICB2b2lkIHBhaW50KEhEQywg
TFBBUkFNKTsKICAgICB2b2lkIHBhaW50SW50b1dpbmRvdyhIREMgYml0bWFwREMsIEhEQyB3aW5k
b3dEQywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKICAgICBib29sIGVuc3Vy
ZUJhY2tpbmdTdG9yZSgpOwpAQCAtNjI2LDEyICs2MTgsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBI
TUVOVSBtX2N1cnJlbnRDb250ZXh0TWVudSB7IG51bGxwdHIgfTsKICAgICBSZWZQdHI8V2ViQ29y
ZTo6U2hhcmVkR0RJT2JqZWN0PEhCSVRNQVA+PiBtX2JhY2tpbmdTdG9yZUJpdG1hcDsKLSNpZiBV
U0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEMkQxSHduZFJlbmRlclRhcmdldD4gbV9yZW5kZXJU
YXJnZXQ7Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBtX2JhY2tpbmdTdG9yZUQyREJpdG1hcDsK
LSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IG1fYmFja2luZ1N0b3JlUmVuZGVy
VGFyZ2V0OwotICAgIENPTVB0cjxJRDJEMUdkaUludGVyb3BSZW5kZXJUYXJnZXQ+IG1fYmFja2lu
Z1N0b3JlR2RpSW50ZXJvcDsKLSNlbmRpZgogICAgIFNJWkUgbV9iYWNraW5nU3RvcmVTaXplOwog
ICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRHRElPYmplY3Q8SFJHTj4+IG1fYmFja2luZ1N0b3Jl
RGlydHlSZWdpb247CiAKSW5kZXg6IFNvdXJjZS9jbWFrZS9PcHRpb25zRlRXLmNtYWtlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9jbWFrZS9PcHRpb25zRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MDMp
CisrKyBTb3VyY2UvY21ha2UvT3B0aW9uc0ZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDIz
NiArMCwwIEBACi1pZiAoQ01BS0VfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy4xNCkKLSAgICBtZXNz
YWdlKEZBVEFMX0VSUk9SICJDTWFrZSAzLjE0IG9yIGdyZWF0ZXIgaXMgcmVxdWlyZWQgdG8gY29t
cGlsZSBXZWJLaXRGVFciKQotZW5kaWYgKCkKLQotaWYgKE1TVkNfVkVSU0lPTiBWRVJTSU9OX0xF
U1MgMTkyMCkKLSAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJWaXN1YWwgU3R1ZGlvIDIwMTkgaXMg
cmVxdWlyZWQgdG8gY29tcGlsZSBXZWJLaXRGVFciKQotZW5kaWYgKCkKLQotaWYgKCR7V1RGX0NQ
VV9YODZ9KQotICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIldlYktpdEZUVyBkb2VzIG5vdCBzdXBw
b3J0IDMyLWJpdCBidWlsZHMiKQotZW5kaWYgKCkKLQotc2V0KFBPUlQgRlRXKQotCi0jIENvbXBp
bGF0aW9uIG9wdGlvbnMKLWluY2x1ZGUoT3B0aW9uc01TVkMpCi0KLWFkZF9kZWZpbml0aW9ucygt
RFdURl9QTEFURk9STV9GVFc9MSkKLSMgUHJldmVudCBtaW4oKSBhbmQgbWF4KCkgbWFjcm9zIGZy
b20gYmVpbmcgZXhwb3NlZAotYWRkX2RlZmluaXRpb25zKC1ETk9NSU5NQVgpCi0jIFVzZSB1bmlj
b2RlCi1hZGRfZGVmaW5pdGlvbnMoLURVTklDT0RFIC1EX1VOSUNPREUpCi0jIElmIDx3aW5zb2Nr
Mi5oPiBpcyBub3QgaW5jbHVkZWQgYmVmb3JlIDx3aW5kb3dzLmg+IHJlZGVmaW5pdGlvbiBlcnJv
cnMgb2NjdXIKLSMgdW5sZXNzIF9XSU5TT0NLQVBJXyBpcyBkZWZpbmVkIGJlZm9yZSA8d2luZG93
cy5oPiBpcyBpbmNsdWRlZAotYWRkX2RlZmluaXRpb25zKC1EX1dJTlNPQ0tBUElfPSkKLQotIyBT
ZXR1cCBsaWJyYXJ5IHBhdGhzCi1pZiAoREVGSU5FRCBFTlZ7QXBwbGVBcHBsaWNhdGlvblN1cHBv
cnRTREt9KQotICAgIGZpbGUoVE9fQ01BS0VfUEFUSCAiJEVOVntBcHBsZUFwcGxpY2F0aW9uU3Vw
cG9ydFNES30vQXBwbGVJbnRlcm5hbCIgV0VCS0lUX0xJQlJBUklFU19ESVIpCi0gICAgc2V0KFdF
QktJVF9MSUJSQVJJRVNfSU5DTFVERV9ESVIgIiR7V0VCS0lUX0xJQlJBUklFU19ESVJ9L2luY2x1
ZGUiKQotICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtXRUJLSVRfTElCUkFSSUVTX0lOQ0xVREVf
RElSfSkKLSAgICBzZXQoQVBQTEVfQlVJTEQgMSkKLWVuZGlmICgpCi0KLWlmIChOT1QgV0VCS0lU
X0xJQlJBUklFU19ESVIpCi0gICAgaWYgKERFRklORUQgRU5We1dFQktJVF9MSUJSQVJJRVN9KQot
ICAgICAgICBmaWxlKFRPX0NNQUtFX1BBVEggIiRFTlZ7V0VCS0lUX0xJQlJBUklFU30iIFdFQktJ
VF9MSUJSQVJJRVNfRElSKQotICAgIGVsc2UgKCkKLSAgICAgICAgZmlsZShUT19DTUFLRV9QQVRI
ICIke0NNQUtFX1NPVVJDRV9ESVJ9L1dlYktpdExpYnJhcmllcy93aW4iIFdFQktJVF9MSUJSQVJJ
RVNfRElSKQotICAgIGVuZGlmICgpCi1lbmRpZiAoKQotCi1zZXQoQ01BS0VfUFJFRklYX1BBVEgg
JHtXRUJLSVRfTElCUkFSSUVTX0RJUn0pCi0KLXNldF9wcm9wZXJ0eShHTE9CQUwgUFJPUEVSVFkg
RklORF9MSUJSQVJZX1VTRV9MSUIzMl9QQVRIUyBPRkYpCi1zZXRfcHJvcGVydHkoR0xPQkFMIFBS
T1BFUlRZIEZJTkRfTElCUkFSWV9VU0VfTElCNjRfUEFUSFMgT04pCi0KLXNldChXRUJLSVRfTElC
UkFSSUVTX0xJTktfRElSICIke1dFQktJVF9MSUJSQVJJRVNfRElSfS9saWI2NCIpCi0jIEZJWE1F
OiBSZW1vdmUgJHtXRUJLSVRfTElCUkFSSUVTX0xJTktfRElSfSB3aGVuIGZpbmRfbGlicmFyeSBp
cyB1c2VkIGZvciBldmVyeXRoaW5nCi1saW5rX2RpcmVjdG9yaWVzKCIke0NNQUtFX0JJTkFSWV9E
SVJ9L2xpYjY0IiAiJHtXRUJLSVRfTElCUkFSSUVTX0xJTktfRElSfSIpCi1zZXQoQ01BS0VfQVJD
SElWRV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQklOQVJZX0RJUn0vbGliNjQpCi1zZXQoQ01B
S0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQklOQVJZX0RJUn0vbGliNjQpCi1z
ZXQoQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQklOQVJZX0RJUn0vYmlu
NjQpCi0KLXNldChDTUFLRV9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUllfREVCVUcgIiR7Q01BS0Vf
QVJDSElWRV9PVVRQVVRfRElSRUNUT1JZfSIpCi1zZXQoQ01BS0VfQVJDSElWRV9PVVRQVVRfRElS
RUNUT1JZX1JFTEVBU0UgIiR7Q01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZfSIpCi1zZXQo
Q01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZX0RFQlVHICIke0NNQUtFX0xJQlJBUllfT1VU
UFVUX0RJUkVDVE9SWX0iKQotc2V0KENNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWV9SRUxF
QVNFICIke0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWX0iKQotc2V0KENNQUtFX1JVTlRJ
TUVfT1VUUFVUX0RJUkVDVE9SWV9ERUJVRyAiJHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RP
Ull9IikKLXNldChDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUllfUkVMRUFTRSAiJHtDTUFL
RV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9IikKLQotV0VCS0lUX09QVElPTl9CRUdJTigpCi0K
LSMgRmVhdHVyZXMgaW4gdGhlIHNhbWUgc3RhdGUgb24gV2luQ2Fpcm8gYW5kIEFwcGxlV2luCi0K
LVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV8zRF9UUkFOU0ZPUk1TIFBS
SVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQVRUQUNI
TUVOVF9FTEVNRU5UIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfQ0FDSEVfUEFSVElUSU9OSU5HIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcgUFJJVkFURSBPTikKLVdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1MzX1RFWFQgUFJJVkFURSBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX0JPWF9ERUNP
UkFUSU9OX0JSRUFLIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfQ1NTX0NPTklDX0dSQURJRU5UUyBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19ERVZJQ0VfQURBUFRBVElPTiBQUklWQVRFIE9G
RikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1NfSU1BR0VfUkVT
T0xVVElPTiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9DU1NfUEFJTlRJTkdfQVBJIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfQ1NTX1NFTEVDVE9SU19MRVZFTDQgUFJJVkFURSBPTikKLVdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DVVJTT1JfVklTSUJJTElUWSBQUklW
QVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0RSQUdfU1VQ
UE9SVCBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X0ZJTFRFUlNfTEVWRUxfMiBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX0ZUTF9KSVQgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfRlRQRElSIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfRlVMTFNDUkVFTl9BUEkgUFJJVkFURSBPRkYpCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfR0VPTE9DQVRJT04gUFJJVkFURSBPTikK
LVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9NQUNfR0VTVFVSRV9FVkVO
VFMgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
TUFUSE1MIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfTUVESUFfQ09OVFJPTFNfU0NSSVBUIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfTUhUTUwgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTUlOSUJST1dTRVIgUFJJVkFURSBPTikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9NT1VTRV9DVVJTT1JfU0NBTEUgUFJJVkFU
RSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ORVRTQ0FQRV9Q
TFVHSU5fQVBJIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX09SSUVOVEFUSU9OX0VWRU5UUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVG
QVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9PVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0ggUFJJVkFURSBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUFVCTElDX1NVRkZJ
WF9MSVNUIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfU0FNUExJTkdfUFJPRklMRVIgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfU1BFTExDSEVDSyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9UT1VDSF9FVkVOVFMgUFJJVkFURSBPRkYpCi1XRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVE9VQ0hfU0xJREVSIFBSSVZBVEUg
T0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1VOSUZJRURfQlVJ
TERTIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
VklERU8gUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9XRUJBU1NFTUJMWSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9XRUJHTCBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCBQUklWQVRFIE9GRikKLVdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9YU0xUIFBSSVZBVEUgT04pCi0KLSMg
TWVkaWEgdGhpbmdzIHRoYXQgc2hvdWxkIGJlIG9uCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfQVZGX0NBUFRJT05TIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQl9BVURJTyBQUklWQVRFIE9GRikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9MRUdBQ1lfRU5DUllQVEVEX01FRElBIFBS
SVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX01FRElB
X0NBUFRVUkUgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfTUVESUFfU09VUkNFIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTUVESUFfU1RSRUFNIFBSSVZBVEUgT0ZGKQot
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1ZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQl9SVEMgUFJJVkFURSBPRkYpCi0KLSMg
UGF5bWVudCB0aGluZ3MKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9B
UFBMRV9QQVkgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfUEFZTUVOVF9SRVFVRVNUIFBSSVZBVEUgT0ZGKQotCi0jIFdlYkdMCi1XRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCR0wyIFBSSVZBVEUgT0ZGKQotCi0jIE9m
ZiBmb3Igbm93LCBidXQgc2hvdWxkIGJlIG9uCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfQVBJX1RFU1RTIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX0FQUExJQ0FUSU9OX01BTklGRVNUIFBSSVZBVEUgT0ZGKQotV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FTWU5DX1NDUk9MTElORyBQUklW
QVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DT05URU5U
X0VYVEVOU0lPTlMgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfQ09OVEVOVF9GSUxURVJJTkcgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX1RZUEVEX09NIFBSSVZBVEUgT0ZGKQotV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0RBUktfTU9ERV9DU1MgUFJJVkFURSBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfREFUQUNVRV9WQUxV
RSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9E
QVRBTElTVF9FTEVNRU5UIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ET1dOTE9BRF9BVFRSSUJVVEUgUFJJVkFURSBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRU5DUllQVEVEX01F
RElBIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X0lOVEVMTElHRU5UX1RSQUNLSU5HX1BSRVZFTlRJT04gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTEFZRVJfQkFTRURfU1ZHX0VOR0lORSBQUklW
QVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9MQVlPVVRf
Rk9STUFUVElOR19DT05URVhUIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX0xFVFRFUlBSRVNTIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0xBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQgUFJJVkFU
RSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTEVUVEVSUFJF
U1MgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
TUVNT1JZX1NBTVBMRVIgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04gUFJJVkFU
RSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTkVUV09SS19D
QUNIRV9TVEFMRV9XSElMRV9SRVZBTElEQVRFIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX05PVElGSUNBVElPTlMgUFJJVkFURSBPRkYpCi1XRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfT1ZFUkZMT1dfU0NST0xMSU5HX1RP
VUNIIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X1BERktJVF9QTFVHSU4gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfUE9JTlRFUl9MT0NLIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFU09VUkNFX1VTQUdFIFBSSVZBVEUgT0ZGKQotV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JVQkJFUl9CQU5ESU5HIFBSSVZBVEUg
T0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NBTkRCT1hfRVhU
RU5TSU9OUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9TRVJWRVJfUFJFQ09OTkVDVCBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9TRVJWSUNFX0NPTlRST0xTIFBSSVZBVEUgT0ZGKQotV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NFUlZJQ0VfV09SS0VSIFBSSVZBVEUg
T0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NIQVJFQUJMRV9S
RVNPVVJDRSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9TTU9PVEhfU0NST0xMSU5HIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX1NQRUVDSF9TWU5USEVTSVMgUFJJVkFURSBPRkYpCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJ
T04gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
VEVYVF9BVVRPU0laSU5HIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX1VTRVJfTUVTU0FHRV9IQU5ETEVSUyBQUklWQVRFIE9GRikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9WQVJJQVRJT05fRk9OVFMgUFJJVkFURSBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCRFJJVkVSIFBS
SVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQl9B
VVRITiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9XRUJfQ1JZUFRPIFBSSVZBVEUgT0ZGKQotCi0jV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoVVNFX1ZFUlNJT05fU1RBTVBFUiBQUklWQVRFIE9OKQotCi0jIEV4cGVyaW1lbnRhbCBm
ZWF0dXJlcwotI1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRU1PVEVf
SU5TUEVDVE9SIFBSSVZBVEUgJHtFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTfSkKLVdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SIFBSSVZB
VEUgT0ZGKQotI1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRVNPVVJD
RV9VU0FHRSBQUklWQVRFICR7RU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFU30pCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVTT1VSQ0VfVVNBR0UgUFJJVkFURSBP
RkYpCi0KLSMgRmVhdHVyZXMgdG8gaW52ZXN0aWdhdGUKLSMKLSMgRmVhdHVyZXMgdGhhdCBhcmUg
dGVtcG9yYXJpbHkgdHVybmVkIG9mZiBiZWNhdXNlIGFuIGltcGxlbWVudGF0aW9uIGlzIG5vdAot
IyBwcmVzZW50IGF0IHRoaXMgdGltZQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX0ZUTF9KSVQgUFJJVkFURSBPRkYpCi0KLSMgTm8gc3VwcG9ydCBwbGFubmVkCi0KLSMg
RklYTUU6IFBvcnQgYm1hbGxvYyB0byBXaW5kb3dzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQzMzEwCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShV
U0VfU1lTVEVNX01BTExPQyBQUklWQVRFIE9OKQotCi1XRUJLSVRfT1BUSU9OX0VORCgpCi0KLWlm
IChBUFBMRV9CVUlMRCkKLSAgICBzZXQoQ09SRUZPVU5EQVRJT05fTElCUkFSWSBDb3JlRm91bmRh
dGlvbiR7REVCVUdfU1VGRklYfSkKLSAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ0Yg
T04pCi0gICAgZmluZF9wYWNrYWdlKExpYlhtbDIgMi45LjEgUkVRVUlSRUQpCi0gICAgaWYgKEVO
QUJMRV9YU0xUKQotICAgICAgICBmaW5kX3BhY2thZ2UoTGliWHNsdCAxLjEuMjggUkVRVUlSRUQp
Ci0gICAgZW5kaWYgKCkKLWVsc2UgKCkKLSAgICBmaW5kX3BhY2thZ2UoTGliWG1sMiAyLjkuNyBS
RVFVSVJFRCkKLSAgICBpZiAoRU5BQkxFX1hTTFQpCi0gICAgICAgIGZpbmRfcGFja2FnZShMaWJY
c2x0IDEuMS4zMiBSRVFVSVJFRCkKLSAgICBlbmRpZiAoKQotZW5kaWYgKCkKLQotZmluZF9wYWNr
YWdlKENVUkwgNy42MC4wIFJFUVVJUkVEKQotZmluZF9wYWNrYWdlKElDVSA2MS4yIFJFUVVJUkVE
IENPTVBPTkVOVFMgZGF0YSBpMThuIHVjKQotZmluZF9wYWNrYWdlKEpQRUcgMS41LjIgUkVRVUlS
RUQpCi1maW5kX3BhY2thZ2UoT3BlblNTTCAyLjAuMCBSRVFVSVJFRCkKLWZpbmRfcGFja2FnZShQ
TkcgMS42LjM0IFJFUVVJUkVEKQotZmluZF9wYWNrYWdlKFNRTGl0ZTMgMy4yMy4xIFJFUVVJUkVE
KQotZmluZF9wYWNrYWdlKFpMSUIgMS4yLjExIFJFUVVJUkVEKQotZmluZF9wYWNrYWdlKExpYlBT
TCAwLjIwLjIgUkVRVUlSRUQpCi0KLSMgRklYTUU6IFdlIHNob3VsZCBhZGQgdGhlIGZvbGxvd2lu
ZywgdG9vLgotIyBmaW5kX3BhY2thZ2UoV2ViUCBSRVFVSVJFRCBDT01QT05FTlRTIGRlbXV4KQot
IyBpZiAoV2ViUF9GT1VORCkKLSMgICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9XRUJQ
IE9OKQotIyBlbmRpZiAoKQotCi1zZXQoVVNFX0FOR0xFX0VHTCBPTikKLQotU0VUX0FORF9FWFBP
U0VfVE9fQlVJTEQoVVNFX0NVUkwgT04pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfRElS
RUNUMkQgT04pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfRUdMIE9OKQotU0VUX0FORF9F
WFBPU0VfVE9fQlVJTEQoVVNFX09QRU5HTF9FUyBPTikKLVNFVF9BTkRfRVhQT1NFX1RPX0JVSUxE
KEhBVkVfT1BFTkdMX0VTXzMgT04pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfT1BFTlNT
TCBPTikKLVNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9URVhUVVJFX01BUFBFUiBPTikKLVNF
VF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9URVhUVVJFX01BUFBFUl9HTCBPTikKLSNTRVRfQU5E
X0VYUE9TRV9UT19CVUlMRChVU0VfSU5TUEVDVE9SX1NPQ0tFVF9TRVJWRVIgJHtFTkFCTEVfUkVN
T1RFX0lOU1BFQ1RPUn0pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfSU5TUEVDVE9SX1NP
Q0tFVF9TRVJWRVIgT0ZGKQotCi1zZXQoV1RGX0xJQlJBUllfVFlQRSBTSEFSRUQpCi1zZXQoSmF2
YVNjcmlwdENvcmVfTElCUkFSWV9UWVBFIFNIQVJFRCkKLQotc2V0KEVOQUJMRV9BUElfVEVTVFMg
T0ZGKQotc2V0KEVOQUJMRV9XRUJDT1JFIE9OKQotc2V0KEVOQUJMRV9XRUJLSVQgT04pCi1zZXQo
RU5BQkxFX1dFQktJVF9MRUdBQ1kgT04pCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc4MDMpCisrKyBUb29scy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAyMi0wMS0wNyAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIERpcmVj
dDJECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5
OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL1BsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9QaXhl
bER1bXBTdXBwb3J0RGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL3dpbi9QaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydFdpbi5jcHA6CisgICAgICAgIChjcmVh
dGVCaXRtYXBDb250ZXh0RnJvbVdlYlZpZXcpOgorICAgICAgICAqIFBsYXRmb3JtRlRXLmNtYWtl
OiBSZW1vdmVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpk
dW1wRE9NQXNXZWJBcmNoaXZlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1BsYXRmb3Jt
RlRXLmNtYWtlOiBSZW1vdmVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1X
ZWJWaWV3Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4vUGxhdGZvcm1XZWJWaWV3
V2luLmNwcDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL3dpbi9UZXN0SW52b2NhdGlvbkRp
cmVjdDJELmNwcDogUmVtb3ZlZC4KKwogMjAyMi0wMS0wNyAgVGltIEhvcnRvbiAgPHRpbW90aHlf
aG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBBL0IgY29tcGFyaXNvbiB0ZXN0cyBmYWlsIHRy
eWluZyB0byBsb29rIHVwIGZ1enp5IG1hdGNoIHRvbGVyYW5jZQpJbmRleDogVG9vbHMvUGxhdGZv
cm1GVFcuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvUGxhdGZvcm1GVFcuY21ha2UJKHJldmlz
aW9uIDI4NzgwMykKKysrIFRvb2xzL1BsYXRmb3JtRlRXLmNtYWtlCShub25leGlzdGVudCkKQEAg
LTEsMTEgKzAsMCBAQAotI2FkZF9zdWJkaXJlY3RvcnkoSW1hZ2VEaWZmKQotCi1pZiAoRU5BQkxF
X1dFQktJVF9MRUdBQ1kpCi0gICAgI2FkZF9zdWJkaXJlY3RvcnkoRHVtcFJlbmRlclRyZWUpCi0g
ICAgYWRkX3N1YmRpcmVjdG9yeShNaW5pQnJvd3Nlci93aW4pCi1lbmRpZiAoKQotCi1pZiAoRU5B
QkxFX1dFQktJVCkKLSAgICBhZGRfc3ViZGlyZWN0b3J5KFRlc3RSdW5uZXJTaGFyZWQpCi0gICAg
YWRkX3N1YmRpcmVjdG9yeShXZWJLaXRUZXN0UnVubmVyKQotZW5kaWYgKCkKSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuY3BwCShyZXZpc2lvbiAyODc4MDMpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDEsOCArNDEsNiBAQAogI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnRDRy5oIgogI2Vs
aWYgVVNFKENBSVJPKQogI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnRDYWlyby5oIgotI2VsaWYg
VVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnREaXJlY3QyRC5oIgogI2Vu
ZGlmCiAKIHZvaWQgZHVtcFdlYlZpZXdBc1BpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoY29u
c3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkSGFzaCkKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L1BsYXRmb3JtV2luLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Bs
YXRmb3JtV2luLmNtYWtlCShyZXZpc2lvbiAyODc4MDMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS9QbGF0Zm9ybVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtNTIsMjQgKzUyLDE1IEBAIGVs
c2UgKCkKICAgICAgICAgQ0ZOZXR3b3JrCiAgICAgICAgIENvcmVUZXh0CiAgICAgKQotICAgIGlm
ICgke1VTRV9ESVJFQ1QyRH0pCi0gICAgICAgIGxpc3QoQVBQRU5EIER1bXBSZW5kZXJUcmVlX1NP
VVJDRVMKLSAgICAgICAgICAgIHdpbi9QaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuY3BwCi0gICAg
ICAgICkKLSAgICAgICAgbGlzdChBUFBFTkQgRHVtcFJlbmRlclRyZWVfTElCUkFSSUVTCi0gICAg
ICAgICAgICBEMmQxCi0gICAgICAgICkKLSAgICBlbHNlICgpCi0gICAgICAgIGxpc3QoQVBQRU5E
IER1bXBSZW5kZXJUcmVlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICAgICAgICAg
JHtEdW1wUmVuZGVyVHJlZV9ESVJ9L2NnCi0gICAgICAgICkKLSAgICAgICAgbGlzdChBUFBFTkQg
RHVtcFJlbmRlclRyZWVfU09VUkNFUwotICAgICAgICAgICAgY2cvUGl4ZWxEdW1wU3VwcG9ydENH
LmNwcAotICAgICAgICApCi0gICAgICAgIGxpc3QoQVBQRU5EIER1bXBSZW5kZXJUcmVlX0xJQlJB
UklFUwotICAgICAgICAgICAgQ29yZUdyYXBoaWNzCi0gICAgICAgICkKLSAgICBlbmRpZiAoKQor
ICAgIGxpc3QoQVBQRU5EIER1bXBSZW5kZXJUcmVlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklF
UworICAgICAgICAke0R1bXBSZW5kZXJUcmVlX0RJUn0vY2cKKyAgICApCisgICAgbGlzdChBUFBF
TkQgRHVtcFJlbmRlclRyZWVfU09VUkNFUworICAgICAgICBjZy9QaXhlbER1bXBTdXBwb3J0Q0cu
Y3BwCisgICAgKQorICAgIGxpc3QoQVBQRU5EIER1bXBSZW5kZXJUcmVlX0xJQlJBUklFUworICAg
ICAgICBDb3JlR3JhcGhpY3MKKyAgICApCiBlbmRpZiAoKQogCiBXRUJLSVRfQUREX1BSRUNPTVBJ
TEVEX0hFQURFUigiRHVtcFJlbmRlclRyZWVQcmVmaXguaCIgIndpbi9EdW1wUmVuZGVyVHJlZVBy
ZWZpeC5jcHAiIER1bXBSZW5kZXJUcmVlX1NPVVJDRVMpCkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmNwcAkocmV2aXNp
b24gMjg3ODAzKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BpeGVsRHVtcFN1cHBvcnRE
aXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw4MSArMCwwIEBACi0vKgotKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0
RGlyZWN0MkQuaCIKLQotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW5jbHVkZSAiUGl4
ZWxEdW1wU3VwcG9ydC5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjdHlwZS5o
PgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1N0cmluZ0V4dHJhcy5oPgotCi0KLXN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBl
UE5HID0gQ0ZTVFIoInB1YmxpYy5wbmciKTsKLQotSUQyRDFGYWN0b3J5KiBwaXhlbER1bXBTeXN0
ZW1GYWN0b3J5KCkKLXsKLSAgICBzdGF0aWMgSUQyRDFGYWN0b3J5KiBkaXJlY3QyREZhY3Rvcnkg
PSBudWxscHRyOwotICAgIGlmICghZGlyZWN0MkRGYWN0b3J5KSB7Ci0jaWZuZGVmIE5ERUJVRwot
ICAgICAgICBEMkQxX0ZBQ1RPUllfT1BUSU9OUyBvcHRpb25zID0geyB9OwotICAgICAgICBvcHRp
b25zLmRlYnVnTGV2ZWwgPSBEMkQxX0RFQlVHX0xFVkVMX0lORk9STUFUSU9OOwotICAgICAgICBI
UkVTVUxUIGhyID0gRDJEMUNyZWF0ZUZhY3RvcnkoRDJEMV9GQUNUT1JZX1RZUEVfTVVMVElfVEhS
RUFERUQsIG9wdGlvbnMsICZkaXJlY3QyREZhY3RvcnkpOwotI2Vsc2UKLSAgICAgICAgSFJFU1VM
VCBociA9IEQyRDFDcmVhdGVGYWN0b3J5KEQyRDFfRkFDVE9SWV9UWVBFX01VTFRJX1RIUkVBREVE
LCAmZGlyZWN0MkRGYWN0b3J5KTsKLSNlbmRpZgotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUND
RUVERUQoaHIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGlyZWN0MkRGYWN0b3J5OwotfQotCi1z
dGF0aWMgdm9pZCBwcmludFBORyhJRDJEMUJpdG1hcCogaW1hZ2UsIGNvbnN0IGNoYXIqIGNoZWNr
c3VtKQotewotICAgIFVOVVNFRF9QQVJBTShpbWFnZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGNoZWNr
c3VtKTsKLSAgICAvLyBOb3QgaW1wbGVtZW50ZWQuCi19Ci0KLXZvaWQgY29tcHV0ZVNIQTFIYXNo
U3RyaW5nRm9yQml0bWFwQ29udGV4dChCaXRtYXBDb250ZXh0KiBjb250ZXh0LCBjaGFyIGhhc2hT
dHJpbmdbMzNdKQotewotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBVTlVTRURfUEFS
QU0oaGFzaFN0cmluZyk7Ci0gICAgLy8gTm90IGltcGxlbWVudGVkLgotfQotCi12b2lkIGR1bXBC
aXRtYXAoQml0bWFwQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogY2hlY2tzdW0pCi17Ci0g
ICAgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SUQyRDFCaXRtYXAsICZfX3V1aWRvZihJRDJEMUJpdG1h
cCk+PiBpbWFnZTsKLSAgICBIUkVTVUxUIGhyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PkdldEJpdG1hcCgmaW1hZ2UpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgcHJpbnRQTkcoaW1hZ2UuR2V0SW50ZXJmYWNlUHRyKCksIGNoZWNrc3VtKTsK
LX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBwb3J0RGlyZWN0
MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3Vw
cG9ydERpcmVjdDJELmgJKHJldmlzaW9uIDI4NzgwMykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9QaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDY0ICsw
LDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0qIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
PGNvbWlwLmg+Ci0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi10eXBlZGVmIEhCSVRNQVAgUGxhdGZvcm1C
aXRtYXBCdWZmZXI7Ci0KLWNsYXNzIEJpdG1hcENvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxC
aXRtYXBDb250ZXh0PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxCaXRtYXBDb250ZXh0PiBj
cmVhdGVCeUFkb3B0aW5nQml0bWFwQW5kQ29udGV4dChQbGF0Zm9ybUJpdG1hcEJ1ZmZlciBidWZm
ZXIsIElEMkQxUmVuZGVyVGFyZ2V0KiBjb250ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQml0bWFwQ29udGV4dChidWZmZXIsIGNvbnRleHQpKTsKLSAgICB9Ci0KLSAg
ICB+Qml0bWFwQ29udGV4dCgpCi0gICAgewotICAgICAgICBpZiAobV9idWZmZXIpCi0gICAgICAg
ICAgICBEZWxldGVPYmplY3QobV9idWZmZXIpOwotICAgIH0KLQotICAgIElEMkQxQml0bWFwUmVu
ZGVyVGFyZ2V0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuR2V0
SW50ZXJmYWNlUHRyKCk7IH0KLQotcHJpdmF0ZToKLSAgICBCaXRtYXBDb250ZXh0KFBsYXRmb3Jt
Qml0bWFwQnVmZmVyIGJ1ZmZlciwgSUQyRDFSZW5kZXJUYXJnZXQqIGNvbnRleHQpCi0gICAgICAg
IDogbV9idWZmZXIoYnVmZmVyKQotICAgICAgICAsIG1fY29udGV4dChjb250ZXh0KQotICAgIHsK
LSAgICB9Ci0KLSAgICBQbGF0Zm9ybUJpdG1hcEJ1ZmZlciBtX2J1ZmZlcjsKLSAgICBfY29tX3B0
cl90PF9jb21fSUlJRDxJRDJEMUJpdG1hcCwgJl9fdXVpZG9mKElEMkQxQml0bWFwKT4+IG1fYml0
bWFwOwotICAgIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0LCAm
X191dWlkb2YoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQpPj4gbV9jb250ZXh0OwotfTsKLQotUmVm
UHRyPEJpdG1hcENvbnRleHQ+IGNyZWF0ZUJpdG1hcENvbnRleHRGcm9tV2ViVmlldyhib29sIG9u
c2NyZWVuLCBib29sIGluY3JlbWVudGFsUmVwYWludCwgYm9vbCBzd2VlcEhvcml6b250YWxseSwg
Ym9vbCBkcmF3U2VsZWN0aW9uUmVjdCk7Ci1JRDJEMUZhY3RvcnkqIHBpeGVsRHVtcFN5c3RlbUZh
Y3RvcnkoKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBwb3J0
V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1w
U3VwcG9ydFdpbi5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9QaXhlbER1bXBTdXBwb3J0V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIs
NiBAQAogI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnRDRy5oIgogI2VsaWYgVVNFKENBSVJPKQog
I2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnRDYWlyby5oIgotI2VsaWYgVVNFKERJUkVDVDJEKQot
I2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnREaXJlY3QyRC5oIgogI2VuZGlmCiAKICNpbmNsdWRl
ICJEdW1wUmVuZGVyVHJlZS5oIgpAQCAtOTYsMTkgKzk0LDYgQEAgUmVmUHRyPEJpdG1hcENvbnRl
eHQ+IGNyZWF0ZUJpdG1hcENvbnRleAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5mby5ibVdpZHRoLCBpbmZvLmJtSGVpZ2h0LCBpbmZvLmJt
V2lkdGhCeXRlcyk7IAogICAgIGNhaXJvX3QqIGNvbnRleHQgPSBjYWlyb19jcmVhdGUoaW1hZ2Up
OyAKICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koaW1hZ2UpOwotI2VsaWYgVVNFKERJUkVDVDJE
KQotICAgIGF1dG8gdGFyZ2V0UHJvcGVydGllcyA9IEQyRDE6OlJlbmRlclRhcmdldFByb3BlcnRp
ZXMoKTsKLSAgICB0YXJnZXRQcm9wZXJ0aWVzLnBpeGVsRm9ybWF0ID0gRDJEMTo6UGl4ZWxGb3Jt
YXQoRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0sIEQyRDFfQUxQSEFfTU9ERV9JR05PUkUpOwot
Ci0gICAgQ09NUHRyPElEMkQxRENSZW5kZXJUYXJnZXQ+IHJlbmRlclRhcmdldDsKLSAgICBIUkVT
VUxUIGhyID0gcGl4ZWxEdW1wU3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEQ1JlbmRlclRhcmdldCgm
dGFyZ2V0UHJvcGVydGllcywgJnJlbmRlclRhcmdldCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5CaW5k
REMobWVtb3J5REMuZ2V0KCksICZmcmFtZSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIGNvbnRleHQgPSByZW5kZXJUYXJnZXQuZ2V0
KCk7CiAjZW5kaWYgCiAKICAgICByZXR1cm4gQml0bWFwQ29udGV4dDo6Y3JlYXRlQnlBZG9wdGlu
Z0JpdG1hcEFuZENvbnRleHQoYml0bWFwLCBXVEZNb3ZlKGNvbnRleHQpKTsKSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1GVFcuY21ha2UKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUZUVy5jbWFrZQkocmV2aXNpb24gMjg3ODAzKQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBA
IC0xLDQwICswLDAgQEAKLWxpc3QoQVBQRU5EIFdlYktpdFRlc3RSdW5uZXJfU09VUkNFUwotICAg
IHdpbi9FdmVudFNlbmRlclByb3h5V2luLmNwcAotICAgIHdpbi9QbGF0Zm9ybVdlYlZpZXdXaW4u
Y3BwCi0gICAgd2luL1Rlc3RDb250cm9sbGVyV2luLmNwcAotICAgIHdpbi9UZXN0SW52b2NhdGlv
bkRpcmVjdDJELmNwcAotICAgIHdpbi9VSVNjcmlwdENvbnRyb2xsZXJXaW4uY3BwCi0gICAgd2lu
L21haW4uY3BwCi0pCi0KLXNldCh3cmFwcGVyX0RFRklOSVRJT05TCi0gICAgVVNFX0NPTlNPTEVf
RU5UUllfUE9JTlQKLSAgICBXSU5fQ0FJUk8KLSkKLQotbGlzdChBUFBFTkQgV2ViS2l0VGVzdFJ1
bm5lckluamVjdGVkQnVuZGxlX1NPVVJDRVMKLSAgICBJbmplY3RlZEJ1bmRsZS93aW4vQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCi0gICAgSW5qZWN0ZWRCdW5kbGUvd2luL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRXaW4uY3BwCi0gICAgSW5qZWN0ZWRCdW5kbGUvd2luL0FjdGl2YXRlRm9u
dHNXaW4uY3BwCi0gICAgSW5qZWN0ZWRCdW5kbGUvd2luL0luamVjdGVkQnVuZGxlV2luLmNwcAot
ICAgIEluamVjdGVkQnVuZGxlL3dpbi9UZXN0UnVubmVyV2luLmNwcAotKQotCi1saXN0KEFQUEVO
RCBXZWJLaXRUZXN0UnVubmVyX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAke1dlYktpdFRlc3RS
dW5uZXJfRElSfS9JbmplY3RlZEJ1bmRsZS93aW4KLSkKLQotbGlzdChBUFBFTkQgV2ViS2l0VGVz
dFJ1bm5lcl9MSUJSQVJJRVMKLSAgICBDb21zdXBwdwotICAgIE9sZWFjYwotKQotCi1XRUJLSVRf
QUREX1BSRUNPTVBJTEVEX0hFQURFUigiV2ViS2l0VGVzdFJ1bm5lclByZWZpeC5oIiAid2luL1dl
YktpdFRlc3RSdW5uZXJQcmVmaXguY3BwIiBXZWJLaXRUZXN0UnVubmVyX1NPVVJDRVMpCi0KLXNl
dChDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTICIke0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1N9
ICR7TVNWQ19SVU5USU1FX0xJTktFUl9GTEFHU30iKQotCi1XRUJLSVRfV1JBUF9FWEVDVVRBQkxF
KFdlYktpdFRlc3RSdW5uZXIKLSAgICBTT1VSQ0VTICR7VE9PTFNfRElSfS93aW4vRExMTGF1bmNo
ZXIvRExMTGF1bmNoZXJNYWluLmNwcAotICAgIExJQlJBUklFUyBzaGx3YXBpCi0pCi10YXJnZXRf
Y29tcGlsZV9kZWZpbml0aW9ucyhXZWJLaXRUZXN0UnVubmVyIFBSSVZBVEUgJHt3cmFwcGVyX0RF
RklOSVRJT05TfSkKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcu
aAkocmV2aXNpb24gMjg3ODAzKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdl
YlZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0LDcgQEAgY2xhc3MgSGVhZGxlc3NW
aWV3QmFja2VuZDsKIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBX
UEVUb29saW5nQmFja2VuZHM6OkhlYWRsZXNzVmlld0JhY2tlbmQqIFBsYXRmb3JtV2luZG93Owog
I2VsaWYgUExBVEZPUk0oV0lOKQotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkMmQxXzEu
aD4KLSNlbHNlCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KLSNlbmRpZgogY2xhc3MgVGVzdFJ1bm5lcldp
bmRvdzsKIHR5cGVkZWYgSFdORCBQbGF0Zm9ybVdpbmRvdzsKIHR5cGVkZWYgV0tWaWV3UmVmIFBs
YXRmb3JtV0tWaWV3OwpAQCAtNjYsMTAgKzYyLDYgQEAgdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZv
cm1XS1ZpZXc7CiAKICNpZiBVU0UoQ0FJUk8pCiB0eXBlZGVmIGNhaXJvX3N1cmZhY2VfdCogUGxh
dGZvcm1JbWFnZTsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLWludGVyZmFjZSBJRDJEMUJpdG1hcDsK
LQotdHlwZWRlZiBJRDJEMUJpdG1hcCogUGxhdGZvcm1JbWFnZTsKICNlbmRpZgogCiBuYW1lc3Bh
Y2UgV1RSIHsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGVQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAJKHJldmlzaW9uIDI4NzgwMykK
KysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQ
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQAogI2luY2x1ZGUgPHd0Zi90
ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaD4KICNlbmRpZgogCi0jaWYgVVNFKENGKSAmJiAh
UExBVEZPUk0oV0lOX0NBSVJPKSAmJiAhVVNFKERJUkVDVDJEKQorI2lmIFVTRShDRikgJiYgIVBM
QVRGT1JNKFdJTl9DQUlSTykKICNpbmNsdWRlICJXZWJBcmNoaXZlRHVtcFN1cHBvcnQuaCIKICNl
bmRpZgogCkBAIC03ODAsNyArNzgwLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBB
bGxGcmFtZXNUZQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcERPTUFzV2ViQXJjaGl2
ZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQog
ewotI2lmIFVTRShDRikgJiYgIVBMQVRGT1JNKFdJTl9DQUlSTykgJiYgIVVTRShESVJFQ1QyRCkK
KyNpZiBVU0UoQ0YpICYmICFQTEFURk9STShXSU5fQ0FJUk8pCiAgICAgYXV0byB3a0RhdGEgPSBh
ZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5V2ViQXJjaGl2ZShmcmFtZSkpOwogICAgIGF1dG8gY2ZE
YXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGUoMCwgV0tEYXRhR2V0Qnl0ZXMod2tEYXRhLmdldCgp
KSwgV0tEYXRhR2V0U2l6ZSh3a0RhdGEuZ2V0KCkpKSk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoV2ViQ29yZVRlc3RTdXBwb3J0OjpjcmVhdGVYTUxTdHJpbmdGcm9tV2ViQXJjaGl2ZURhdGEo
Y2ZEYXRhLmdldCgpKS5nZXQoKSk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9Q
bGF0Zm9ybVdlYlZpZXdXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvd2luL1BsYXRmb3JtV2ViVmlld1dpbi5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvd2luL1BsYXRmb3JtV2ViVmlld1dpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDEwICszOSw2IEBACiAjaW5jbHVkZSA8Y2Fpcm8uaD4KICNlbmRpZgogCi0jaWYg
VVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPGQyZDFfMS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBX
VFIgewogCiBzdGF0aWMgTFBDV1NUUiBob3N0V2luZG93Q2xhc3NOYW1lID0gTCJXVFJXZWJWaWV3
SG9zdFdpbmRvdyI7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9UZXN0SW52b2Nh
dGlvbkRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dp
bi9UZXN0SW52b2NhdGlvbkRpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysgVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdEludm9jYXRpb25EaXJlY3QyRC5jcHAJKG5vbmV4aXN0
ZW50KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogICAgICAgICAgIChDKSAyMDExIEJyZW50
IEZ1bGdoYW0gPGJmdWxnaGFtQHdlYmtpdC5vcmc+LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
ICAgICAgICAgIChDKSAyMDEwLCAyMDExIElnYWxpYSBTLkwKLSAqICAgICAgICAgICAoQykgMjAx
MiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RJbnZvY2F0aW9uLmgiCi0KLSNpbmNsdWRl
ICJQaXhlbER1bXBTdXBwb3J0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCi0jaW5j
bHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+Ci0jaW5jbHVkZSA8Y3N0ZGlvPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5j
bHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgotCi1uYW1lc3BhY2UgV1RSIHsKLQotCi12b2lkIFRl
c3RJbnZvY2F0aW9uOjpkdW1wUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChTbmFwc2hvdFJl
c3VsdFR5cGUsIFdLQXJyYXlSZWYgLyogcmVwYWludFJlY3RzICovLCBXS0ltYWdlUmVmKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdUUgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448671</attachid>
            <date>2022-01-08 09:44:57 -0800</date>
            <delta_ts>2022-01-08 10:13:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234999-20220108094455.patch</filename>
            <type>text/plain</type>
            <size>481242</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI4Nzgw
MykKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAx
LTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3Vw
cG9ydCBmb3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2U6IFJlbW92ZWQuCisKIDIw
MjItMDEtMDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI4NzY5OC4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAxLTA3ICBTYW0g
V2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3Ig
RGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIFNhYW0gQmFyYXRp
ICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIFdhc20gZXhj
ZXB0aW9ucyBpbiB0aGUgQWlyIGdlbmVyYXRvcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Q
bGF0Zm9ybUZUVy5jbWFrZQkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL1BsYXRmb3JtRlRXLmNtYWtlCShub25leGlzdGVudCkKQEAgLTEsNDQgKzAsMCBAQAotbGlz
dChBUFBFTkQgSmF2YVNjcmlwdENvcmVfU09VUkNFUwotICAgIEFQSS9KU1N0cmluZ1JlZkJTVFIu
Y3BwCi0pCi0KLWxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1BVQkxJQ19GUkFNRVdPUktfSEVB
REVSUwotICAgIEFQSS9KU1N0cmluZ1JlZkJTVFIuaAotICAgIEFQSS9KYXZhU2NyaXB0Q29yZS5o
Ci0pCi0KLWlmIChVU0VfQ0YpCi0gICAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfU09VUkNF
UwotICAgICAgICBBUEkvSlNTdHJpbmdSZWZDRi5jcHAKLSAgICApCi0KLSAgICBsaXN0KEFQUEVO
RCBKYXZhU2NyaXB0Q29yZV9QVUJMSUNfRlJBTUVXT1JLX0hFQURFUlMKLSAgICAgICAgQVBJL0pT
U3RyaW5nUmVmQ0YuaAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX0xJ
QlJBUklFUwotICAgICAgICAke0NPUkVGT1VOREFUSU9OX0xJQlJBUll9Ci0gICAgKQotZW5kaWYg
KCkKLQotaWYgKE5PVCBXVEZfUExBVEZPUk1fV0lOX0NBSVJPKQotICAgIGxpc3QoQVBQRU5EIEph
dmFTY3JpcHRDb3JlX0xJQlJBUklFUwotICAgICAgICB3aW5tbQotICAgICkKLWVuZGlmICgpCi0K
LWlmIChFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUikKLSAgICBpbmNsdWRlKGlucHNlY3Rvci9yZW1v
dGUvU29ja2V0LmNtYWtlKQotZWxzZSAoKQotICAgIGxpc3QoUkVNT1ZFX0lURU0gSmF2YVNjcmlw
dENvcmVfU09VUkNFUwotICAgICAgICBpbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JD
b250cm9sbGVyLmNwcAotICAgICkKLWVuZGlmICgpCi0KLWZpbGUoQ09QWQotICAgICIke0pBVkFT
Q1JJUFRDT1JFX0RJUn0vSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS5yZXNv
dXJjZXMiCi0gICAgREVTVElOQVRJT04KLSAgICAke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVD
VE9SWX0KLSkKLQotc2V0KEphdmFTY3JpcHRDb3JlX09VVFBVVF9OQU1FIEphdmFTY3JpcHRDb3Jl
JHtERUJVR19TVUZGSVh9KQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkocmV2aXNp
b24gMjg3ODAzKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjItMDEtMDcgIFNhbSBXZWluaWcgIDx3ZWluaWdA
YXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBEaXJlY3QyRAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0OTk5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybUZUVy5j
bWFrZTogUmVtb3ZlZC4KKwogMjAyMi0wMS0wNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjg3Njk4
LgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvUGxhdGZvcm1GVFcuY21ha2UKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvUGxhdGZvcm1GVFcuY21ha2UJKHJldmlz
aW9uIDI4NzgwMykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL1BsYXRmb3JtRlRXLmNtYWtl
CShub25leGlzdGVudCkKQEAgLTEsMzUgKzAsMCBAQAotIyBXZSdyZSB0YXJnZXRpbmcgV2luZG93
cyAxMCB3aGljaCB3aWxsIGhhdmUgRGlyZWN0WCAxMSBvbiBpdCBzbyByZXF1aXJlIHRoYXQKLSMg
YnV0IG1ha2UgRGlyZWN0WCA5IG9wdGlvbmFsCi0KLWxpc3QoQVBQRU5EIEFOR0xFX0RFRklOSVRJ
T05TCi0gICAgR0xfQVBJQ0FMTD0KLSAgICBHTF9BUEk9Ci0gICAgTk9NSU5NQVgKLSkKLQotIyBX
ZSdyZSB0YXJnZXRpbmcgV2luZG93cyAxMCB3aGljaCB3aWxsIGhhdmUgRGlyZWN0WCAxMQotbGlz
dChBUFBFTkQgQU5HTEVfU09VUkNFUwotICAgICR7X2QzZDExX2JhY2tlbmRfc291cmNlc30KLSAg
ICAke19kM2Rfc2hhcmVkX3NvdXJjZXN9Ci0KLSAgICAke2FuZ2xlX3RyYW5zbGF0b3JfaGxzbF9z
b3VyY2VzfQotCi0gICAgJHtsaWJhbmdsZV9ncHVfaW5mb191dGlsX3NvdXJjZXN9Ci0gICAgJHts
aWJhbmdsZV9ncHVfaW5mb191dGlsX3dpbl9zb3VyY2VzfQotKQotCi1saXN0KEFQUEVORCBBTkdM
RV9ERUZJTklUSU9OUwotICAgIEFOR0xFX0VOQUJMRV9EM0QxMQotICAgIEFOR0xFX0VOQUJMRV9I
TFNMCi0pCi0KLWxpc3QoQVBQRU5EIEFOR0xFR0xFU3YyX0xJQlJBUklFUyBkeGd1aWQgZHhnaSkK
LQotIyBEaXJlY3RYIDkgc3VwcG9ydCBzaG91bGQgYmUgb3B0aW9uYWwgYnV0IEFOR0xFIHdpbGwg
bm90IGNvbXBpbGUgd2l0aG91dCBpdAotbGlzdChBUFBFTkQgQU5HTEVfU09VUkNFUyAke19kM2Q5
X2JhY2tlbmRfc291cmNlc30pCi1saXN0KEFQUEVORCBBTkdMRV9ERUZJTklUSU9OUyBBTkdMRV9F
TkFCTEVfRDNEOSkKLWxpc3QoQVBQRU5EIEFOR0xFR0xFU3YyX0xJQlJBUklFUyBkM2Q5KQotCi0j
IFVzZSBzaGFyZWQgbGlicmFyaWVzCi1zZXQoR0xFU3YyX0xJQlJBUllfVFlQRSBTSEFSRUQpCi1z
ZXQoRUdMX0xJQlJBUllfVFlQRSBTSEFSRUQpCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjg3ODAzKQorKysg
U291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAy
Mi0wMS0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3Zl
IHN1cHBvcnQgZm9yIERpcmVjdDJECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzQ5OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybUZUVy5jbWFrZTogUmVtb3ZlZC4KKwogMjAyMi0w
MS0wNyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZG9wdCBsaW5rZWRPbk9yQWZ0ZXIoKSBpbiBtb3JlIHBsYWNlcwpJbmRleDogU291cmNlL1dURi93
dGYvUGxhdGZvcm1GVFcuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZv
cm1GVFcuY21ha2UJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
RlRXLmNtYWtlCShub25leGlzdGVudCkKQEAgLTEsNjEgKzAsMCBAQAotbGlzdChBUFBFTkQgV1RG
X1BVQkxJQ19IRUFERVJTCi0gICAgdGV4dC93aW4vV0NoYXJTdHJpbmdFeHRyYXMuaAotCi0gICAg
d2luL0RiZ0hlbHBlcldpbi5oCi0gICAgd2luL0dESU9iamVjdC5oCi0gICAgd2luL1NvZnRMaW5r
aW5nLmgKLSAgICB3aW4vV2luMzJIYW5kbGUuaAotKQotCi1saXN0KEFQUEVORCBXVEZfUFJJVkFU
RV9MSUJSQVJJRVMKLSAgICBEYmdoZWxwICMgRm9yIHN5bWJvbCBoYW5kbGluZyA8ZGJnaGVscC5o
PgotICAgIFNobHdhcGkgIyBGb3IgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyA8c2hsd2FwaS5oPgot
KQotCi1saXN0KEFQUEVORCBXVEZfTElCUkFSSUVTCi0gICAgIFdpbm1tICMgRm9yIG11bHRpbWVk
aWEgZnVuY3Rpb25zLCBhbHNvIHVzZWQgaW4gPHRpbWVhcGkuaD4KLSkKLQotbGlzdChBUFBFTkQg
V1RGX1NPVVJDRVMKLSAgICB0ZXh0L3dpbi9TdHJpbmdXaW4uY3BwCi0gICAgdGV4dC93aW4vVGV4
dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVVdpbi5jcHAKLQotICAgIHdpbi9DUFVUaW1lV2luLmNw
cAotICAgIHdpbi9EYmdIZWxwZXJXaW4uY3BwCi0gICAgd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCi0g
ICAgd2luL0xhbmd1YWdlV2luLmNwcAotICAgIHdpbi9Mb2dnaW5nV2luLmNwcAotICAgIHdpbi9N
YWluVGhyZWFkV2luLmNwcAotICAgIHdpbi9NZW1vcnlGb290cHJpbnRXaW4uY3BwCi0gICAgd2lu
L01lbW9yeVByZXNzdXJlSGFuZGxlcldpbi5jcHAKLSAgICB3aW4vT1NBbGxvY2F0b3JXaW4uY3Bw
Ci0gICAgd2luL1BhdGhXYWxrZXIuY3BwCi0gICAgd2luL1J1bkxvb3BXaW4uY3BwCi0gICAgd2lu
L1RocmVhZGluZ1dpbi5jcHAKLSAgICB3aW4vV29ya1F1ZXVlV2luLmNwcAotKQotCi1pZiAoVVNF
X0NGKQotICAgIGxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwotICAgICAgICBjZi9DRlVS
TEV4dHJhcy5oCi0gICAgICAgIGNmL1NwYW5DRi5oCi0gICAgICAgIGNmL1R5cGVDYXN0c0NGLmgK
LQotICAgICAgICB0ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaAotICAgICAgICB0ZXh0L2Nm
L1RleHRCcmVha0l0ZXJhdG9yQ0YuaAotICAgICkKLSAgICBsaXN0KEFQUEVORCBXVEZfU09VUkNF
UwotICAgICAgICBjZi9DRlVSTEV4dHJhcy5jcHAKLSAgICAgICAgY2YvRmlsZVN5c3RlbUNGLmNw
cAotICAgICAgICBjZi9VUkxDRi5jcHAKLQotICAgICAgICB0ZXh0L2NmL0F0b21TdHJpbmdJbXBs
Q0YuY3BwCi0gICAgICAgIHRleHQvY2YvU3RyaW5nQ0YuY3BwCi0gICAgICAgIHRleHQvY2YvU3Ry
aW5nSW1wbENGLmNwcAotICAgICAgICB0ZXh0L2NmL1N0cmluZ1ZpZXdDRi5jcHAKLSAgICApCi0K
LSAgICBsaXN0KEFQUEVORCBXVEZfTElCUkFSSUVTICR7Q09SRUZPVU5EQVRJT05fTElCUkFSWX0p
Ci1lbmRpZiAoKQotCi1zZXQoV1RGX09VVFBVVF9OQU1FIFdURiR7REVCVUdfU1VGRklYfSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBAQAorMjAyMi0wMS0wNyAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIERpcmVj
dDJECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5
OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21ha2U6Cisg
ICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQuCisgICAgICAgICogUGxhdGZvcm1X
aW4uY21ha2U6CisgICAgICAgICogcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5j
cHA6CisgICAgICAgICogcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5oOgorICAg
ICAgICAqIHBhZ2Uvd2luL0ZyYW1lV2luRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5
cGVSZWdpc3RyeTo6Y3JlYXRlTUlNRVR5cGVSZWdpc3RyeVRocmVhZEdsb2JhbERhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnByZVRyYW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmg6
CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpkd0ZvbnQgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6ZHdGb250RmFjZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2
ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6cHJlVHJhbnNmb3JtZWROYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bmF0aXZlSW1hZ2VP
ZlNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kZXI6OnN1cHBvcnRzTWVkaWFUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0VGFyZ2V0Q29u
dGV4dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YXRoOjpsZW5ndGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkUm91bmRlZFJl
Y3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1JbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VC
dWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVy
QmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9D
RE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0RNU2Vzc2lv
bkFWRm91bmRhdGlvbkNGOjpnZW5lcmF0ZUtleVJlcXVlc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25D
Ri5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25D
Rjo6cGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZHJhd1BERlBhZ2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVN
YXRoRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcGVuVHlwZU1hdGhEYXRhOjpPcGVuVHlw
ZU1hdGhEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlw
ZVV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW5hbWVBbmRBY3RpdmF0ZUZvbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZUdMLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2Vu
ZERpcmVjdDJESW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlckRpcmVjdFdy
aXRlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxl
eFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0
ZVV0aWxpdGllcy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
bG9hdFBvaW50RGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9GbG9hdFJlY3REaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0Zsb2F0U2l6ZURpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRm
b3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURh
dGFEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERp
cmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJEaXJlY3QyRC5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJEaXJlY3QyRC5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGly
ZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRo
RGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Q
YXR0ZXJuRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhRGlyZWN0MkQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJI
ZWxwZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0
QW5hbHl6ZXJIZWxwZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vd2luL0RyYWdJbWFnZURpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyRmlsdGVyczo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZSk6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
Rm9yQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlRm9yQ29udGFpbmVy
OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlRm9yQ29udGFpbmVyLmg6CisKIDIwMjItMDEtMDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIEZ1bGxzY3JlZW5NYW5hZ2Vy
OjpyZXF1ZXN0RnVsbHNjcmVlbkZvckVsZW1lbnQgbW9yZSByb2J1c3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtNzEsMTI5ICs3
MSwxMDIgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRQogICAgIHBs
YXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCiApCiAKLWlmICgke1VT
RV9ESVJFQ1QyRH0pCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElS
RUNUT1JJRVMKLSAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3dpbiIK
LSAgICApCi0KLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAgcGFnZS93
aW4vRnJhbWVXaW5EaXJlY3QyRC5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udENhc2NhZGVEaXJlY3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0xheWVyRGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05h
dGl2ZUltYWdlRGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRo
RGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0
MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVj
dDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVy
LmNwcAotCi0gICAgICAgIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VEaXJlY3QyRC5jcHAKLSAgICAp
Ci1lbHNlICgpCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNU
T1JJRVMKLSAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbiIKLSAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9jZiIKLSAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2NhIgot
ICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luIgotICAgICAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2ciCi0gICAgKQotCi0gICAgbGlz
dChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgICAgIHBhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3Bw
Ci0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAotICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuY3BwCi0gICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvVGlsZUNvbnRyb2xsZXIuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1Rp
bGVDb3ZlcmFnZU1hcC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQu
Y3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0Eu
Y3BwCi0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0
LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vTGF5ZXJDaGFuZ2VzRmx1c2hl
ci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRp
b25XaW4uY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBRmls
dGVyc1dpbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FM
YXllcldpbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV0tD
QUNGVmlld0xheWVyVHJlZUhvc3QuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9Db2xvckNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNl
Q0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCi0gICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFkaWVudENHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVu
dFJlbmRlcmVyQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dEdMQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3Bw
Ci0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCi0g
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dXaW4uY3BwCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ludFJlY3RDRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50
U2l6ZUNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNw
cAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAotICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvU3Vi
aW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVHJh
bnNmb3JtYXRpb25NYXRyaXhDRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJ
UmVnaXN0cnkuY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENh
c2NhZGVDb3JlVGV4dC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9u
dENvcmVUZXh0LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250UGxh
dGZvcm1EYXRhQ29yZVRleHQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0
L0dseXBoUGFnZUNvcmVUZXh0LmNwcAotCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50
eXBlL09wZW5UeXBlQ0cuY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
R1dpbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFD
R1dpbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENH
V2luLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCi0KLSAg
ICAgICAgcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcAotICAgICkKLQotICAgIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9MYXllclBvb2wuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNB
QW5pbWF0aW9uLmgKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUZpbHRl
cnMuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAotICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ29udHJvbGxlci5oCi0KLSAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL0Fic3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QuaAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuaAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3RDbGllbnQuaAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKLQotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNlQ0cuaAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5oCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3Vy
ZmFjZVBvb2wuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmgKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmgKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5oCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
aAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCi0gICAgKQotZW5k
aWYgKCkKK2xpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbiIKKyAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmIgorICAgICIk
e1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jYSIKKyAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9n
cmFwaGljcy9jZyIKKykKKworbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGFnZS93
aW4vRnJhbWVDR1dpbi5jcHAKKworICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5
ZXJDQS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuY3BwCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL1RpbGVDb250cm9sbGVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVD
b3ZlcmFnZU1hcC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlR3JpZC5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9UcmFuc2Zvcm1hdGlvbk1hdHJpeENBLmNwcAorCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9MYXllckNoYW5nZXNGbHVzaGVyLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBRmlsdGVyc1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vV0tDQUNGVmlld0xheWVyVHJlZUhvc3QuY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAorCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xv
clNwYWNlQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRp
ZW50Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29k
ZXJDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW50UmVjdENHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFNpemVD
Ry5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUGF0aENHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwCisKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
dGV4dC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCisKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVudHlwZS9PcGVuVHlwZUNHLmNwcAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
R1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2lu
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5jcHAKKworICAgIHBsYXRmb3JtL3dpbi9E
cmFnSW1hZ2VDR1dpbi5jcHAKKykKKworbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuaAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1Bs
YXRmb3JtQ0FGaWx0ZXJzLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5
ZXIuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllckNsaWVudC5oCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUNvbnRyb2xsZXIuaAorCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL0Fic3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QuaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0Q2xpZW50LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKKworICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0NvbG9yU3BhY2VDRy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJl
ckNHLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKKykKIAogaWYg
KENNQUtFX1NJWkVPRl9WT0lEX1AgRVFVQUwgNCkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMgJHtXZWJDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L21ha2VzYWZlc2VoLm9iaikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDI1MyArMCwwIEBA
Ci1pbmNsdWRlKHBsYXRmb3JtL0N1cmwuY21ha2UpCi1pZiAoTk9UIEFQUExFX0JVSUxEKQotICAg
IGluY2x1ZGUocGxhdGZvcm0vSW1hZ2VEZWNvZGVycy5jbWFrZSkKLWVuZGlmICgpCi1pbmNsdWRl
KHBsYXRmb3JtL09wZW5TU0wuY21ha2UpCi1pbmNsdWRlKHBsYXRmb3JtL1RleHR1cmVNYXBwZXIu
Y21ha2UpCi0KLWxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVT
Ci0gICAgIiR7RGlyZWN0WF9JTkNMVURFX0RJUlN9IgotICAgICIke1dFQktJVF9MSUJSQVJJRVNf
RElSfS9pbmNsdWRlIgotICAgICIke1dFQkNPUkVfRElSfS9hY2Nlc3NpYmlsaXR5L3dpbiIKLSAg
ICAiJHtXRUJDT1JFX0RJUn0vcGFnZS93aW4iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3Jt
L2dyYXBoaWNzL2VnbCIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsIgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZSIKLSAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvd2luIgotICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9tZWRpYWNhcGFiaWxpdGllcyIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vbmV0d29yay93aW4iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3dpbiIKLSkK
LQotbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgYWNjZXNzaWJpbGl0eS93aW4vQVhP
YmplY3RDYWNoZVdpbi5jcHAKLSAgICBhY2Nlc3NpYmlsaXR5L3dpbi9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0V2luLmNwcAotICAgIGFjY2Vzc2liaWxpdHkvd2luL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyV2luLmNwcAotCi0gICAgZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcAotCi0gICAgaHRtbC9I
VE1MU2VsZWN0RWxlbWVudFdpbi5jcHAKLQotICAgIHBhZ2Uvd2luL0RyYWdDb250cm9sbGVyV2lu
LmNwcAotICAgIHBhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHAKLSAgICBwYWdlL3dpbi9GcmFt
ZVdpbi5jcHAKLSAgICBwYWdlL3dpbi9GcmFtZVdpbkRpcmVjdDJELmNwcAotCi0gICAgcGxhdGZv
cm0vQ3Vyc29yLmNwcAotICAgIHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuY3BwCi0gICAgcGxh
dGZvcm0vU3RhdGljUGFzdGVib2FyZC5jcHAKLQotICAgIHBsYXRmb3JtL2F1ZGlvL1BsYXRmb3Jt
TWVkaWFTZXNzaW9uTWFuYWdlci5jcHAKLQotICAgIHBsYXRmb3JtL2dlbmVyaWMvS2V5ZWREZWNv
ZGVyR2VuZXJpYy5jcHAKLSAgICBwbGF0Zm9ybS9nZW5lcmljL0tleWVkRW5jb2RlckdlbmVyaWMu
Y3BwCi0KLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAotCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWds
L0dMQ29udGV4dEVHTC5jcHAKLQotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5U
eXBlVXRpbGl0aWVzLmNwcAotCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9y
ZUJhY2tlbmREaXJlY3QyREltcGwuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9y
RGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJv
bGxlckRpcmVjdFdyaXRlLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERh
dGEuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9GbG9hdFBvaW50RGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0Zsb2F0UmVjdERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
bG9hdFNpemVEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hl
V2luLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250RGVzY3JpcHRpb25XaW4uY3BwCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKLSAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udFdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQ
YWdlVHJlZU5vZGVEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGll
bnREaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
R0xEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdp
bi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW50UG9pbnRXaW4uY3BwCi0g
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFJlY3RXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ludFNpemVXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0
aERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQu
Y3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeERpcmVjdDJELmNwcAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAKLQotICAgIHBsYXRmb3Jt
L25ldHdvcmsvd2luL0N1cmxTU0xIYW5kbGVXaW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93
aW4vRG93bmxvYWRCdW5kbGVXaW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93aW4vTmV0d29y
a1N0YXRlTm90aWZpZXJXaW4uY3BwCi0KLSAgICBwbGF0Zm9ybS90ZXh0L0h5cGhlbmF0aW9uLmNw
cAotICAgIHBsYXRmb3JtL3RleHQvd2luL0xvY2FsZVdpbi5jcHAKLQotICAgIHBsYXRmb3JtL3dp
bi9CU3RyaW5nLmNwcAotICAgIHBsYXRmb3JtL3dpbi9CaXRtYXBJbmZvLmNwcAotICAgIHBsYXRm
b3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL0N1cnNv
cldpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vRGVmV25kUHJvY1dpbmRvd0NsYXNzLmNwcAotICAg
IHBsYXRmb3JtL3dpbi9EZWxheUxvYWRlZE1vZHVsZXNFbnVtZXJhdG9yLmNwcAotICAgIHBsYXRm
b3JtL3dpbi9EcmFnRGF0YVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlRGlyZWN0
MkQuY3BwCi0gICAgcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93
aW4vR0RJT2JqZWN0Q291bnRlci5jcHAKLSAgICBwbGF0Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmNw
cAotICAgIHBsYXRmb3JtL3dpbi9JbXBvcnRlZEZ1bmN0aW9uc0VudW1lcmF0b3IuY3BwCi0gICAg
cGxhdGZvcm0vd2luL0ltcG9ydGVkTW9kdWxlc0VudW1lcmF0b3IuY3BwCi0gICAgcGxhdGZvcm0v
d2luL0tleUV2ZW50V2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9Mb2NhbGl6ZWRTdHJpbmdzV2lu
LmNwcAotICAgIHBsYXRmb3JtL3dpbi9Mb2dnaW5nV2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9N
SU1FVHlwZVJlZ2lzdHJ5V2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9NYWluVGhyZWFkU2hhcmVk
VGltZXJXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1BFSW1hZ2UuY3BwCi0gICAgcGxhdGZvcm0v
d2luL1Bhc3RlYm9hcmRXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1BsYXRmb3JtTW91c2VFdmVu
dFdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vUGxhdGZvcm1TY3JlZW5XaW4uY3BwCi0gICAgcGxh
dGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJh
dG9yV2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAKLSAgICBw
bGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuY3BwCi0gICAgcGxhdGZvcm0vd2luL1NlYXJj
aFBvcHVwTWVudVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vU3RydWN0dXJlZEV4Y2VwdGlvbkhh
bmRsZXJTdXBwcmVzc29yLmNwcAotICAgIHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcAotICAg
IHBsYXRmb3JtL3dpbi9Vc2VyQWdlbnRXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1dDRGF0YU9i
amVjdC5jcHAKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZUJ1bmRsZVdpbi5jcHAKLSAgICBwbGF0
Zm9ybS93aW4vV2ViQ29yZUluc3RhbmNlSGFuZGxlLmNwcAotICAgIHBsYXRmb3JtL3dpbi9XZWJD
b3JlVGV4dFJlbmRlcmVyLmNwcAotICAgIHBsYXRmb3JtL3dpbi9XaGVlbEV2ZW50V2luLmNwcAot
ICAgIHBsYXRmb3JtL3dpbi9XaWRnZXRXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1dpbmRvd01l
c3NhZ2VCcm9hZGNhc3Rlci5jcHAKLQotICAgIHJlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAK
LSkKLQotaWYgKFVTRV9DRikKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVE
RV9ESVJFQ1RPUklFUwotICAgICAgICAiJHtXRUJDT1JFX0RJUn0vbG9hZGVyL2FyY2hpdmUvY2Yi
Ci0gICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9jZiIKLSAgICAgICAgIiR7V0VCQ09S
RV9ESVJ9L3BsYXRmb3JtL2NmL3dpbiIKLSAgICApCi0KLSAgICBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKLSAgICAgICAgZWRpdGluZy9TbWFydFJlcGxhY2VDRi5jcHAKLQotICAgICAgICBs
b2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAotCi0gICAgICAgIHBsYXRmb3Jt
L2NmL0tleWVkRGVjb2RlckNGLmNwcAotICAgICAgICBwbGF0Zm9ybS9jZi9LZXllZEVuY29kZXJD
Ri5jcHAKLSAgICAgICAgcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCi0KLSAgICAgICAg
cGxhdGZvcm0vY2Yvd2luL0NlcnRpZmljYXRlQ0ZXaW4uY3BwCi0KLSAgICAgICAgcGxhdGZvcm0v
dGV4dC9jZi9IeXBoZW5hdGlvbkNGLmNwcAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIFdlYkNv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwotICAgICAgICBsb2FkZXIvYXJjaGl2ZS9jZi9M
ZWdhY3lXZWJBcmNoaXZlLmgKLQotICAgICAgICBwbGF0Zm9ybS9jZi93aW4vQ2VydGlmaWNhdGVD
Rldpbi5oCi0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMgJHtDT1JF
Rk9VTkRBVElPTl9MSUJSQVJZfSkKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlVGVzdFN1cHBvcnRf
TElCUkFSSUVTICR7Q09SRUZPVU5EQVRJT05fTElCUkFSWX0pCi1lbHNlICgpCi0gICAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgICAgIHBsYXRmb3JtL3RleHQvSHlwaGVuYXRpb24u
Y3BwCi0gICAgKQotZW5kaWYgKCkKLQotbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCi0gICAgYWNjZXNzaWJpbGl0eS93aW4vQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJXaW4uaAotCi0gICAgcGFnZS93aW4vRnJhbWVXaW4uaAotCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuaAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9E
aXJlY3QyRE9wZXJhdGlvbnMuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0
aWxpdGllcy5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVz
LmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudC5oCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5oCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vTG9jYWxXaW5kb3dzQ29udGV4dC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01l
ZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1NoYXJlZEdESU9iamVjdC5oCi0KLSAgICBwbGF0Zm9ybS93aW4vQlN0cmluZy5oCi0gICAgcGxh
dGZvcm0vd2luL0JpdG1hcEluZm8uaAotICAgIHBsYXRmb3JtL3dpbi9DT01QdHIuaAotICAgIHBs
YXRmb3JtL3dpbi9EZWZXbmRQcm9jV2luZG93Q2xhc3MuaAotICAgIHBsYXRmb3JtL3dpbi9HRElP
YmplY3RDb3VudGVyLmgKLSAgICBwbGF0Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmgKLSAgICBwbGF0
Zm9ybS93aW4vSFduZERDLmgKLSAgICBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmgKLSAgICBw
bGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uaAotICAgIHBsYXRmb3JtL3dpbi9TZWFyY2hQ
b3B1cE1lbnVEQi5oCi0gICAgcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudVdpbi5oCi0gICAg
cGxhdGZvcm0vd2luL1N5c3RlbUluZm8uaAotICAgIHBsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3Qu
aAotICAgIHBsYXRmb3JtL3dpbi9XZWJDb3JlQnVuZGxlV2luLmgKLSAgICBwbGF0Zm9ybS93aW4v
V2ViQ29yZUluc3RhbmNlSGFuZGxlLmgKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZVRleHRSZW5k
ZXJlci5oCi0gICAgcGxhdGZvcm0vd2luL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5oCi0gICAg
cGxhdGZvcm0vd2luL1dpbmRvd01lc3NhZ2VMaXN0ZW5lci5oCi0gICAgcGxhdGZvcm0vd2luL1dp
bmRvd3NUb3VjaC5oCi0pCi0KLWxpc3QoQVBQRU5EIFdlYkNvcmVfVVNFUl9BR0VOVF9TVFlMRV9T
SEVFVFMKLSAgICAke1dFQkNPUkVfRElSfS9jc3MvdGhlbWVXaW4uY3NzCi0gICAgJHtXRUJDT1JF
X0RJUn0vY3NzL3RoZW1lV2luUXVpcmtzLmNzcwotKQotCi1saXN0KEFQUEVORCBXZWJDb3JlX0xJ
QlJBUklFUwotICAgICR7RGlyZWN0WF9MSUJSQVJJRVN9Ci0gICAgY29tY3RsMzIKLSAgICBjcnlw
dDMyCi0gICAgaXBobHBhcGkKLSAgICBycGNydDQKLSAgICBzaGx3YXBpCi0gICAgdXNwMTAKLSAg
ICB2ZXJzaW9uCi0gICAgd2lubW0KLSAgICB3czJfMzIKLSkKLQotbGlzdChBUFBFTkQgV2ViQ29y
ZVRlc3RTdXBwb3J0X0xJQlJBUklFUwotICAgIHNobHdhcGkKLSkKLQotbWFrZV9kaXJlY3Rvcnko
JHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1dlYktpdC5yZXNvdXJjZXMvZW4ubHBy
b2opCi1maWxlKENPUFkKLSAgICAiJHtXRUJDT1JFX0RJUn0vZW4ubHByb2ovTG9jYWxpemFibGUu
c3RyaW5ncyIKLSAgICAiJHtXRUJDT1JFX0RJUn0vZW4ubHByb2ovbWVkaWFDb250cm9sc0xvY2Fs
aXplZFN0cmluZ3MuanMiCi0gICAgREVTVElOQVRJT04KLSAgICAke0NNQUtFX1JVTlRJTUVfT1VU
UFVUX0RJUkVDVE9SWX0vV2ViS2l0LnJlc291cmNlcy9lbi5scHJvagotKQotZmlsZShDT1BZCi0g
ICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvbWVkaWFjb250cm9scy9tZWRpYUNvbnRyb2xzQXBw
bGUuY3NzIgotICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFD
b250cm9sc0FwcGxlLmpzIgotICAgIERFU1RJTkFUSU9OCi0gICAgJHtDTUFLRV9SVU5USU1FX09V
VFBVVF9ESVJFQ1RPUll9L1dlYktpdC5yZXNvdXJjZXMKLSkKLQotc2V0KFdlYkNvcmVfT1VUUFVU
X05BTUUgV2ViQ29yZSR7REVCVUdfU1VGRklYfSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtV2luLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNt
YWtlCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFr
ZQkod29ya2luZyBjb3B5KQpAQCAtMzksMTQgKzM5LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGll
cy5jcHAKIAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2Ny
aWJlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcldpbi5jcHAKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9GbG9hdFJlY3REaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRmxvYXRTaXplRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDYWNoZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udERlc2NyaXB0aW9u
V2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNw
cApAQCAtNjAsNyArNTUsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW50U2l6ZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4V2luLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29y
ay93aW4vRG93bmxvYWRCdW5kbGVXaW4uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QQUwvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMiBAQAorMjAyMi0wMS0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIERpcmVjdDJECisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5OTkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhbC9QbGF0Zm9ybUZUVy5j
bWFrZTogUmVtb3ZlZC4KKwogMjAyMi0wMS0wNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjg3Njk4
LgpJbmRleDogU291cmNlL1dlYkNvcmUvUEFML3BhbC9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lv
biAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL1BsYXRmb3JtRlRXLmNtYWtlCShu
b25leGlzdGVudCkKQEAgLTEsMjYgKzAsMCBAQAotbGlzdChBUFBFTkQgUEFMX1BVQkxJQ19IRUFE
RVJTCi0pCi0KLWxpc3QoQVBQRU5EIFBBTF9TT1VSQ0VTCi0gICAgY3J5cHRvL29wZW5zc2wvQ3J5
cHRvRGlnZXN0T3BlblNTTC5jcHAKLQotICAgIGNyeXB0by93aW4vQ3J5cHRvRGlnZXN0V2luLmNw
cAotCi0gICAgc3lzdGVtL0Nsb2NrR2VuZXJpYy5jcHAKLQotICAgIHN5c3RlbS93aW4vU291bmRX
aW4uY3BwCi0KLSAgICB0ZXh0L0tpbGxSaW5nLmNwcAotCi0gICAgd2luL0xvZ2dpbmdXaW4uY3Bw
Ci0pCi0KLWxpc3QoQVBQRU5EIFBBTF9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAi
JHtXRUJLSVRfTElCUkFSSUVTX0RJUn0vaW5jbHVkZSIKLSkKLQotbGlzdChBUFBFTkQgUEFMX1BS
SVZBVEVfTElCUkFSSUVTCi0gICAgT3BlblNTTDo6Q3J5cHRvCi0pCi0KLXNldChQQUxfT1VUUFVU
X05BTUUgUEFMJHtERUJVR19TVUZGSVh9KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0
aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAJKHJldmlzaW9uIDI4Nzgw
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuaCIKIAotI2lmIEVOQUJM
RShWSURFTykgJiYgIVVTRShESVJFQ1QyRCkKKyNpZiBFTkFCTEUoVklERU8pCiAKICNpbmNsdWRl
ICJBdWRpb1RyYWNrTGlzdC5oIgogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgpAQCAt
OTk1LDQgKzk5NSw0IEBAIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gQ2FwdGlvblVzZXJQcmUK
ICAgICAKIH0KIAotI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgIVVTRShESVJFQ1QyRCkKKyNl
bmRpZiAvLyBFTkFCTEUoVklERU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25V
c2VyUHJlZmVyZW5jZXNNZWRpYUFGLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5oCShyZXZpc2lvbiAyODc4MDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUo
VklERU8pICYmICFVU0UoRElSRUNUMkQpCisjaWYgRU5BQkxFKFZJREVPKQogCiAjaW5jbHVkZSAi
Q1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNhcHRpb25QcmVmZXJlbmNlc0RlbGVnYXRl
LmgiCkBAIC0xMjAsNCArMTIwLDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiAhVVNFKERJUkVDVDJEKQorI2VuZGlmIC8v
IEVOQUJMRShWSURFTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luRGly
ZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2lu
RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3dp
bi9GcmFtZVdpbkRpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDc2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkZyYW1lV2luLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNp
bmNsdWRlICJCaXRtYXBJbmZvLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFt
ZVNlbGVjdGlvbi5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5j
bHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotR0RJT2JqZWN0PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoY29uc3Qg
RnJhbWUqIGZyYW1lLCBJbnRSZWN0JiBpcikKLXsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gb2xkUGFpbnRCZWhhdmlvciA9IGZyYW1lLT52aWV3
KCktPnBhaW50QmVoYXZpb3IoKTsKLSAgICBmcmFtZS0+dmlldygpLT5zZXRQYWludEJlaGF2aW9y
KG9sZFBhaW50QmVoYXZpb3IgfCBQYWludEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9zaXRpbmdMYXll
cnMpOwotCi0gICAgdm9pZCogYml0cyA9IG51bGxwdHI7Ci0gICAgYXV0byBoZGMgPSBhZG9wdEdE
SU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQygwKSk7Ci0gICAgaW50IHcgPSBpci53aWR0aCgp
OwotICAgIGludCBoID0gaXIuaGVpZ2h0KCk7Ci0gICAgQml0bWFwSW5mbyBibXAgPSBCaXRtYXBJ
bmZvOjpjcmVhdGUoSW50U2l6ZSh3LCBoKSk7Ci0KLSAgICBHRElPYmplY3Q8SEJJVE1BUD4gaGJt
cCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYm1wLCBESUJfUkdCX0NP
TE9SUywgc3RhdGljX2Nhc3Q8dm9pZCoqPigmYml0cyksIDAsIDApKTsKLSAgICBpZiAoIWhibXAp
Ci0gICAgICAgIHJldHVybiBoYm1wOwotCi0gICAgSEdESU9CSiBoYm1wT2xkID0gU2VsZWN0T2Jq
ZWN0KGhkYy5nZXQoKSwgaGJtcC5nZXQoKSk7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0g
ICAgU2VsZWN0T2JqZWN0KGhkYy5nZXQoKSwgaGJtcE9sZCk7Ci0KLSAgICBmcmFtZS0+dmlldygp
LT5zZXRQYWludEJlaGF2aW9yKG9sZFBhaW50QmVoYXZpb3IpOwotCi0gICAgcmV0dXJuIGhibXA7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjg3ODAzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2MSw3ICs0NjEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8TUlNRVR5cGVSZWdpc3Ry
eVRocmVhZEdsCiAgICAgfQogI2Vsc2UKICAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5z
ZW5zaXRpdmVIYXNoPiBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nID0gc3RkOjpp
bml0aWFsaXplcl9saXN0PFN0cmluZz4gewotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQor
I2lmIFVTRShDRykKICAgICAgICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFs
bCB0aGUgc3VwcG9ydGVkIFVUSSdzIHdoZW4gYSB3YXkgdG8gY29udmVydCBmcm9tIE1JTUVUeXBl
IHRvIFVUSSByZWxpYWJseSBpcyBmb3VuZC4KICAgICAgICAgLy8gRm9yIG5vdywgb25seSBzdXBw
b3J0IFBORywgSlBFRyBhbmQgR0lGLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYwOTUyODY+LgogICAg
ICAgICAiaW1hZ2UvcG5nIl9zLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAJKHJl
dmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBA
IHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGkKICAgICBtX3NlY29uZGFy
eUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7CiB9CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJF
Q1QyRCkKKyNpZiBVU0UoQ0cpCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5
U3Ryb2tlUGF0dGVybigpCiB7CiAgICAgbV9wcmltYXJ5Q29udGV4dC5hcHBseVN0cm9rZVBhdHRl
cm4oKTsKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZUVsCiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7
CiB9CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpCiB2b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0NBTGF5
ZXJDb250ZXh0KQogewogICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dChp
c0NBTGF5ZXJDb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9u
IDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYp
IGZpbmFsOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAK
LSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpCiAgICAgdm9pZCBhcHBs
eVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5h
bDsKICNlbmRpZgpAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwogICAgIHZvaWQgc3Ryb2tlRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwogCi0jaWYgVVNFKENHKSB8fCBVU0Uo
RElSRUNUMkQpCisjaWYgVVNFKENHKQogICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29s
KSBmaW5hbDsKICAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNw
cAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMzMgKzEyOCwyOCBAQCB2b2lk
IEJpdG1hcEltYWdlOjpzZXRDdXJyZW50RnJhbWVEZWNvZGluCiAgICAgbV9jdXJyZW50RnJhbWVE
ZWNvZGluZ1N0YXR1cyA9IGRlY29kaW5nU3RhdHVzOwogfQogCi1SZWZQdHI8TmF0aXZlSW1hZ2U+
IEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90IGluZGV4
LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCogdGFyZ2V0Q29udGV4dCkKK1JlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2U6OmZyYW1l
SW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwg
c3Vic2FtcGxpbmdMZXZlbCkKIHsKICAgICBpZiAoIWZyYW1lSGFzRnVsbFNpemVOYXRpdmVJbWFn
ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpKSB7CiAgICAgICAgIExPRyhJbWFnZXMs
ICJCaXRtYXBJbWFnZTo6JXMgLSAlcCAtIHVybDogJXMgW3N1YnNhbXBsaW5nTGV2ZWwgd2FzICVk
LCByZXNhbXBsaW5nXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8aW50PihmcmFtZVN1YnNhbXBsaW5nTGV2ZWxBdElu
ZGV4KGluZGV4KSkpOwogICAgICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgfQot
I2lmIFVTRShESVJFQ1QyRCkKLSAgICBtX3NvdXJjZS0+c2V0VGFyZ2V0Q29udGV4dCh0YXJnZXRD
b250ZXh0KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRhcmdldENvbnRleHQpOwotI2VuZGlm
CiAgICAgcmV0dXJuIG1fc291cmNlLT5mcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoaW5k
ZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOwogfQogCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcElt
YWdlOjpuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCitS
ZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSgpCiB7Ci0gICAgcmV0
dXJuIGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZCgwLCBTdWJzYW1wbGluZ0xldmVsOjpE
ZWZhdWx0LCB0YXJnZXRDb250ZXh0KTsKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXhDYWNo
ZUlmTmVlZGVkKDAsIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQpOwogfQogCi1SZWZQdHI8TmF0
aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBH
cmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCitSZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1h
cEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCiB7Ci0gICAgcmV0dXJuIGZyYW1l
SW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChtX2N1cnJlbnRGcmFtZSwgU3Vic2FtcGxpbmdMZXZl
bDo6RGVmYXVsdCwgdGFyZ2V0Q29udGV4dCk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4
Q2FjaGVJZk5lZWRlZChtX2N1cnJlbnRGcmFtZSwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7
CiB9CiAKLVJlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2U6OnByZVRyYW5zZm9ybWVkTmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCByZXNwZWN0T3JpZW50YXRpb24sIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkKK1JlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFw
SW1hZ2U6OnByZVRyYW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCByZXNw
ZWN0T3JpZW50YXRpb24pCiB7Ci0gICAgYXV0byBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKHRhcmdldENvbnRleHQpOworICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBpbWFnZTsKIApA
QCAtMTc4LDE4ICsxNzMsMTggQEAgUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6cHJl
VHJhbgogfQogCiAjaWYgVVNFKENHKQotUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6
bmF0aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0KiB0YXJnZXRDb250ZXh0KQorUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6bmF0
aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBzaXplX3QgY291bnQg
PSBmcmFtZUNvdW50KCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKLSAgICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChp
LCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0LCB0YXJnZXRDb250ZXh0KTsKKyAgICAgICAgYXV0
byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChpLCBTdWJzYW1wbGluZ0xl
dmVsOjpEZWZhdWx0KTsKICAgICAgICAgaWYgKGltYWdlICYmIGltYWdlLT5zaXplKCkgPT0gc2l6
ZSkKICAgICAgICAgICAgIHJldHVybiBpbWFnZTsKICAgICB9CiAKICAgICAvLyBGYWxsYmFjayB0
byB0aGUgZmlyc3QgZnJhbWUgaW1hZ2UgaWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQot
ICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoMCwgU3Vic2FtcGxpbmdM
ZXZlbDo6RGVmYXVsdCwgdGFyZ2V0Q29udGV4dCk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdElu
ZGV4Q2FjaGVJZk5lZWRlZCgwLCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKIH0KIAogVmVj
dG9yPFJlZjxOYXRpdmVJbWFnZT4+IEJpdG1hcEltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKQpA
QCAtMzAzLDcgKzI5OCw3IEBAIEltYWdlRHJhd1Jlc3VsdCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFw
aGkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRp
ZFJlcXVlc3REZWNvZGluZzsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGltYWdlID0g
ZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKG1fY3VycmVudEZyYW1lLCBtX2N1cnJlbnRT
dWJzYW1wbGluZ0xldmVsLCAmY29udGV4dCk7CisgICAgICAgICAgICBpbWFnZSA9IGZyYW1lSW1h
Z2VBdEluZGV4Q2FjaGVJZk5lZWRlZChtX2N1cnJlbnRGcmFtZSwgbV9jdXJyZW50U3Vic2FtcGxp
bmdMZXZlbCk7CiAgICAgICAgICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAg
LSB1cmw6ICVzIFthbiBpbWFnZSBmcmFtZSB3aWxsIGJlIGRlY29kZWQgc3luY2hyb25vdXNseV0i
LCBfX0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDIsMTEgKzE0MiwxMSBAQCBwdWJsaWM6CiAjZW5kaWYKICNlbmRpZgogCi0gICAgV0VCQ09SRV9F
WFBPUlQgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRl
eHQqID0gbnVsbHB0cikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgb3Zl
cnJpZGU7Ci0gICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBwcmVUcmFuc2Zvcm1lZE5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKGJvb2wgcmVzcGVjdE9yaWVudGF0aW9uLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQqID0gbnVsbHB0cikgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5h
dGl2ZUltYWdlPiBuYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIFJlZlB0cjxOYXRpdmVJbWFn
ZT4gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8TmF0
aXZlSW1hZ2U+IHByZVRyYW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCBy
ZXNwZWN0T3JpZW50YXRpb24pIG92ZXJyaWRlOwogI2lmIFVTRShDRykKLSAgICBSZWZQdHI8TmF0
aXZlSW1hZ2U+IG5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUmLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQqID0gbnVsbHB0cikgb3ZlcnJpZGU7CisgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBu
YXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPFJl
ZjxOYXRpdmVJbWFnZT4+IGZyYW1lc05hdGl2ZUltYWdlcygpOwogI2VuZGlmCiAKQEAgLTE1OCw3
ICsxNTgsNyBAQCBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIEJpdG1hcEltYWdlKEltYWdl
T2JzZXJ2ZXIqID0gbnVsbHB0cik7CiAKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGZyYW1lSW1h
Z2VBdEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSW1hZ2VBdElu
ZGV4KGluZGV4KTsgfQotICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gZnJhbWVJbWFnZUF0SW5kZXhD
YWNoZUlmTmVlZGVkKHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6
OkRlZmF1bHQsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKTsKKyAgICBSZWZQdHI8
TmF0aXZlSW1hZ2U+IGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QsIFN1YnNh
bXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKIAogICAgIC8vIENhbGxl
ZCB0byBpbnZhbGlkYXRlIGNhY2hlZCBkYXRhLiBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3
ZSB3aXBlIG91dAogICAgIC8vIHRoZSBlbnRpcmUgZnJhbWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxs
IHRoZSBpbWFnZSBzb3VyY2UgdG8gZGVzdHJveQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuaAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMSArNDksNiBAQAog
I2luY2x1ZGUgPHVzcDEwLmg+CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLWludGVyZmFj
ZSBJRFdyaXRlRmFjdG9yeTU7Ci1pbnRlcmZhY2UgSURXcml0ZUdkaUludGVyb3A7Ci0jZW5kaWYK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb250Q2FjaGU7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCShy
ZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDEwICs2Nyw2IEBAIGludGVyZmFj
ZSBJRFdyaXRlRm9udDsKIGludGVyZmFjZSBJRFdyaXRlRm9udEZhY2U7CiAjZW5kaWYKIAotI2lm
IFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgotI2VuZGlmCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udERlc2NyaXB0aW9uOwpAQCAtMTE5LDkgKzExNSw2IEBA
IHB1YmxpYzoKICNpZiBVU0UoQ09SRV9URVhUKQogICAgIEZvbnRQbGF0Zm9ybURhdGEoR0RJT2Jq
ZWN0PEhGT05UPiwgQ1RGb250UmVmLCBDR0ZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhl
dGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBib29sIHVzZUdESSk7CiAjZW5kaWYKLSNp
ZiBVU0UoRElSRUNUMkQpCi0gICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+JiYs
IENPTVB0cjxJRFdyaXRlRm9udD4mJiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBi
b29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJKTsKLSNlbmRpZgogI2lmIFVTRShDQUlS
TykKICAgICBGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4sIGNhaXJvX2ZvbnRfZmFj
ZV90KiwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgY29uc3QgQ3JlYXRpb25E
YXRhKiA9IG51bGxwdHIpOwogI2VuZGlmCkBAIC0xNjMsMTEgKzE1Niw2IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgaGFzVmFyaWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFyaWF0aW9uczsg
fQogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIElEV3JpdGVGb250KiBkd0ZvbnQoKSBjb25zdCB7
IHJldHVybiBtX2R3Rm9udC5nZXQoKTsgfQotICAgIElEV3JpdGVGb250RmFjZSogZHdGb250RmFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZHdGb250RmFjZS5nZXQoKTsgfQotI2VuZGlmCi0KICAgICBi
b29sIGlzRml4ZWRQaXRjaCgpIGNvbnN0OwogICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX3NpemU7IH0KICAgICBib29sIHN5bnRoZXRpY0JvbGQoKSBjb25zdCB7IHJldHVybiBtX3N5
bnRoZXRpY0JvbGQ7IH0KQEAgLTI2OCwxMSArMjU2LDYgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxl
IFJldGFpblB0cjxDVEZvbnRSZWY+IG1fY3RGb250OwogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNU
MkQpCi0gICAgQ09NUHRyPElEV3JpdGVGb250PiBtX2R3Rm9udDsKLSAgICBDT01QdHI8SURXcml0
ZUZvbnRGYWNlPiBtX2R3Rm9udEZhY2U7Ci0jZW5kaWYKLQogI2lmIFVTRShDQUlSTykKICAgICBS
ZWZQdHI8Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4gbV9zY2FsZWRGb250OwogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHJldmlzaW9uIDI4
NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDE5ICszOSwxMCBAQAogI2luY2x1ZGUgIkdyYWRpZW50UmVuZGVy
ZXJDRy5oIgogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiQ09NUHRyLmgi
Ci0jZW5kaWYKLQogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHQ29udGV4dCogQ0dDb250
ZXh0UmVmOwogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQyRDFCcnVz
aDsKLWludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLSNlbmRpZgotCiAjaWYgVVNFKENBSVJP
KQogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90OwogI2VuZGlm
CkBAIC0xMTgsMTAgKzEwOSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50KENHQ29udGV4dFJl
Zik7CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBJRDJEMUJydXNoKiBjcmVhdGVC
cnVzaChJRDJEMVJlbmRlclRhcmdldCopOwotI2VuZGlmCi0KICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEdyYWRpZW50Pj4gZGVjb2Rl
KERlY29kZXImKTsKIApAQCAtMTM5LDEwICsxMjYsNiBAQCBwcml2YXRlOgogI2lmIFVTRShDRykK
ICAgICBzdGQ6Om9wdGlvbmFsPEdyYWRpZW50UmVuZGVyZXJDRz4gbV9wbGF0Zm9ybVJlbmRlcmVy
OwogI2VuZGlmCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEMkQxQnJ1c2g+IG1f
YnJ1c2g7Ci0jZW5kaWYKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgR3Jh
ZGllbnQ6OkxpbmVhckRhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNSArNDMsNiBAQAogCiAj
aWYgVVNFKENHKQogdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0IFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0OwotI2VsaWYgVVNFKERJUkVDVDJEKQotaW50ZXJmYWNlIElEMkQxRENSZW5kZXJUYXJnZXQ7
Ci1pbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFGYWN0b3J5Owot
aW50ZXJmYWNlIElEMkQxU29saWRDb2xvckJydXNoOwotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xh
c3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ7Ci19Ci10eXBlZGVmIFdlYkNvcmU6OlBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwogI2VsaWYgVVNFKENBSVJP
KQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87CkBAIC0y
NjksMTUgKzI2MCw2IEBAIHB1YmxpYzogICAKICAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0Nv
bnRleHQoKSA9IGRlZmF1bHQ7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+R3JhcGhpY3ND
b250ZXh0KCk7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IG1vdmUgdG8gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQKLSAgICBlbnVtIGNsYXNzIEJpdG1hcFJl
bmRlcmluZ0NvbnRleHRUeXBlIDogdWludDhfdCB7Ci0gICAgICAgIENQVU1lbW9yeSwKLSAgICAg
ICAgR1BVTWVtb3J5Ci0gICAgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQo
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqLCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSk7Ci0j
ZW5kaWYKLQogICAgIHZpcnR1YWwgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRm
b3JtQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KIApAQCAtMzcyLDcgKzM1NCw3
IEBAIHB1YmxpYzogICAKICAgICAKICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YWNrLnNpemUoKTsgfQogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisj
aWYgVVNFKENHKQogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1YmxpYyBH
cmFwaGljc0NvbnRleHQgbWV0aG9kcz8KICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0
ZXJuKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAwOwpAQCAt
NTU3LDI2ICs1MzksNiBAQCBwdWJsaWM6ICAgCiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG51bGxwdHI7IH0KICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIEdyYXBoaWNzQ29u
dGV4dChIREMsIElEMkQxRENSZW5kZXJUYXJnZXQqKiwgUkVDVCwgYm9vbCBoYXNBbHBoYSA9IGZh
bHNlKTsgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQuCi0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgSUQyRDFGYWN0b3J5KiBzeXN0ZW1GYWN0b3J5KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIElEMkQxUmVuZGVyVGFyZ2V0KiBkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGJlZ2luRHJhdygpOwotICAgIEQyRDFfQ09MT1JfRiBjb2xvcldpdGhH
bG9iYWxBbHBoYShjb25zdCBDb2xvciYpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZW5kRHJhdygpOwotICAgIHZvaWQgZmx1c2goKTsKLQotICAgIElEMkQxQnJ1c2gqIHNvbGlkU3Ry
b2tlQnJ1c2goKSBjb25zdDsKLSAgICBJRDJEMUJydXNoKiBzb2xpZEZpbGxCcnVzaCgpIGNvbnN0
OwotICAgIElEMkQxQnJ1c2gqIHBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0OwotICAgIElEMkQx
QnJ1c2gqIHBhdHRlcm5GaWxsQnJ1c2goKSBjb25zdDsKLSAgICBJRDJEMVN0cm9rZVN0eWxlKiBw
bGF0Zm9ybVN0cm9rZVN0eWxlKCkgY29uc3Q7Ci0KLSAgICBJRDJEMVNvbGlkQ29sb3JCcnVzaCog
YnJ1c2hXaXRoQ29sb3IoY29uc3QgQ29sb3ImKTsKLSNlbmRpZgotCiBwcml2YXRlOgogICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCShy
ZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsMTAgKzE1NiwxMCBAQCBwdWJsaWM6CiAKICAgICBl
bnVtIFRpbGVSdWxlIHsgU3RyZXRjaFRpbGUsIFJvdW5kVGlsZSwgU3BhY2VUaWxlLCBSZXBlYXRU
aWxlIH07CiAKLSAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2UoY29u
c3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2
aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29u
c3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2
aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gcHJlVHJhbnNmb3JtZWROYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZShib29sID0gdHJ1ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIp
IHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0
aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBu
dWxscHRyKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1h
Z2U+IG5hdGl2ZUltYWdlKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgUmVmUHRy
PE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIG51bGxw
dHI7IH0KKyAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gcHJlVHJhbnNmb3JtZWROYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZShib29sID0gdHJ1ZSkgeyByZXR1cm4gbnVsbHB0cjsgfQor
ICAgIHZpcnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJ
bnRTaXplJikgeyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgLy8gQWNjZXNzb3JzIGZvciBuYXRp
dmUgaW1hZ2UgZm9ybWF0cy4KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw4ICszMCw2IEBACiAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVy
Q0cuaCIKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3Qy
RC5oIgogI2Vsc2UKICNpbmNsdWRlICJTY2FsYWJsZUltYWdlRGVjb2Rlci5oIgogI2VuZGlmCkBA
IC0xMDcsOCArMTA1LDYgQEAgUmVmUHRyPEltYWdlRGVjb2Rlcj4gSW1hZ2VEZWNvZGVyOjpjcmVh
dAogCiAjaWYgVVNFKENHKQogICAgIHJldHVybiBJbWFnZURlY29kZXJDRzo6Y3JlYXRlKGRhdGEs
IGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7Ci0jZWxpZiBVU0UoRElS
RUNUMkQpCi0gICAgcmV0dXJuIEltYWdlRGVjb2RlckRpcmVjdDJEOjpjcmVhdGUoZGF0YSwgYWxw
aGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKICNlbHNlCiAgICAgcmV0dXJu
IFNjYWxhYmxlSW1hZ2VEZWNvZGVyOjpjcmVhdGUoZGF0YSwgYWxwaGFPcHRpb24sIGdhbW1hQW5k
Q29sb3JQcm9maWxlT3B0aW9uKTsKICNlbmRpZgpAQCAtMTE5LDkgKzExNSw2IEBAIGJvb2wgSW1h
Z2VEZWNvZGVyOjpzdXBwb3J0c01lZGlhVHlwZShNZWQKICNpZiBVU0UoQ0cpCiAgICAgaWYgKElt
YWdlRGVjb2RlckNHOjpzdXBwb3J0c01lZGlhVHlwZSh0eXBlKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgaWYgKEltYWdlRGVjb2RlckRpcmVjdDJEOjpz
dXBwb3J0c01lZGlhVHlwZSh0eXBlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQogICAg
IGlmIChTY2FsYWJsZUltYWdlRGVjb2Rlcjo6c3VwcG9ydHNNZWRpYVR5cGUodHlwZSkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMs
MTAgKzEzMyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQo
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXpl
X3QpID0gMDsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VGFyZ2V0
Q29udGV4dChJRDJEMVJlbmRlclRhcmdldCopID0gMDsKLSNlbmRpZgotCiBwcm90ZWN0ZWQ6CiAg
ICAgSW1hZ2VEZWNvZGVyKCkgPSBkZWZhdWx0OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHJldmlzaW9uIDI4NzgwMykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDYgQEAKICNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2lu
Zy5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5o
IgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSW1hZ2VTb3VyY2U6OkltYWdlU291
cmNlKEJpdG1hcEltYWdlKiBpbWFnZSwgQWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEdhbW1hQW5k
Q29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQpAQCAtNjkzLDE0
ICs2ODgsNiBAQCBJbWFnZU9yaWVudGF0aW9uIEltYWdlU291cmNlOjpmcmFtZU9yaWVuCiAgICAg
cmV0dXJuIGZyYW1lQXRJbmRleENhY2hlSWZOZWVkZWQoaW5kZXgsIEltYWdlRnJhbWU6OkNhY2hp
bmc6Ok1ldGFkYXRhKS5vcmllbnRhdGlvbigpOwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotdm9p
ZCBJbWFnZVNvdXJjZTo6c2V0VGFyZ2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQqIHRh
cmdldENvbnRleHQpCi17Ci0gICAgaWYgKGlzRGVjb2RlckF2YWlsYWJsZSgpICYmIHRhcmdldENv
bnRleHQpCi0gICAgICAgIG1fZGVjb2Rlci0+c2V0VGFyZ2V0Q29udGV4dCh0YXJnZXRDb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkpOwotfQotI2VuZGlmCi0KIFJlZlB0
cjxOYXRpdmVJbWFnZT4gSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVf
dCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKQogewogICAgIGlmICgh
aXNEZWNvZGVyQXZhaWxhYmxlKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmgJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
Miw5ICsxMjIsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgU2Vjb25kcyBmcmFtZUR1
cmF0aW9uQXRJbmRleChzaXplX3QpOwogICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRh
dGlvbkF0SW5kZXgoc2l6ZV90KTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIHNldFRh
cmdldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0Kik7Ci0jZW5kaWYKICAgICBSZWZQdHI8
TmF0aXZlSW1hZ2U+IGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdM
ZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQpOwogICAgIFJlZlB0cjxOYXRpdmVJbWFn
ZT4gZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGZy
YW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBT
dWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDI4
NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0Nv
bnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykKICAg
ICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWwgeyB9CiAgICAgYm9vbCBpc0NB
TGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpAQCAt
NTcsNyArNTcsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzKSBmaW5hbCB7IH0KIAotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShD
RykKICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQogI2Vu
ZGlmCiAKQEAgLTY3LDcgKzY3LDcgQEAgcHJpdmF0ZToKIAogICAgIEludFJlY3QgY2xpcEJvdW5k
cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElS
RUNUMkQpCisjaWYgVVNFKENHKQogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWwg
eyB9CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWwgeyB9CiAgICAgdm9pZCBkcmF3
UGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXRoLmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgIVVTRShESVJFQ1QyRCkKIGZsb2F0IFBh
dGg6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0
YXRlKFBhdGhUcmF2ZXJzYWxTdGF0ZTo6QWN0aW9uOjpUb3RhbExlbmd0aCk7CkBAIC01MSw3ICs1
MCw2IEBAIGZsb2F0IFBhdGg6Omxlbmd0aCgpIGNvbnN0CiAKICAgICByZXR1cm4gdHJhdmVyc2Fs
U3RhdGUudG90YWxMZW5ndGgoKTsKIH0KLSNlbmRpZgogCiAjaWYgIUhBVkUoQ0dQQVRIX0dFVF9O
VU1CRVJfT0ZfRUxFTUVOVFMpCiAKQEAgLTEyNSw3ICsxMjMsNyBAQCB2b2lkIFBhdGg6OmFkZFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91CiAgICAgfQogCiAgICAgaWYgKHN0cmF0ZWd5ID09IFJv
dW5kZWRSZWN0U3RyYXRlZ3k6OlByZWZlck5hdGl2ZSkgewotI2lmIFVTRShDRykgfHwgVVNFKERJ
UkVDVDJEKQorI2lmIFVTRShDRykKICAgICAgICAgcGxhdGZvcm1BZGRQYXRoRm9yUm91bmRlZFJl
Y3QocmVjdCwgcmFkaWkudG9wTGVmdCgpLCByYWRpaS50b3BSaWdodCgpLCByYWRpaS5ib3R0b21M
ZWZ0KCksIHJhZGlpLmJvdHRvbVJpZ2h0KCkpOwogICAgICAgICByZXR1cm47CiAjZW5kaWYKQEAg
LTUyNCw3ICs1MjIsNyBAQCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gUGF0aDo6Ym91bmRpbmdS
CiAKICNlbmRpZgogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkKKyNpZiAhVVNFKENH
KQogUGF0aCBQYXRoOjpwb2x5Z29uUGF0aEZyb21Qb2ludHMoY29uc3QgVmVjdG9yPEZsb2F0UG9p
bnQ+JiBwb2ludHMpCiB7CiAgICAgUGF0aCBwYXRoOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BhdGguaAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyMCArNDEsNiBA
QAogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR1BhdGguaD4KIHR5cGVkZWYgc3RydWN0IENHUGF0
aCBQbGF0Zm9ybVBhdGg7CiAKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJDT01QdHIu
aCIKLQotaW50ZXJmYWNlIElEMkQxR2VvbWV0cnk7Ci1pbnRlcmZhY2UgSUQyRDFHZW9tZXRyeUdy
b3VwOwotaW50ZXJmYWNlIElEMkQxUGF0aEdlb21ldHJ5OwotaW50ZXJmYWNlIElEMkQxR2VvbWV0
cnlTaW5rOwotCi10eXBlZGVmIElEMkQxR2VvbWV0cnlHcm91cCBQbGF0Zm9ybVBhdGg7Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOwotfQotCiAj
ZWxpZiBVU0UoQ0FJUk8pCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKIApAQCAtNjksOCArNTUs
NiBAQCB0eXBlZGVmIFBsYXRmb3JtUGF0aCogUGxhdGZvcm1QYXRoUHRyOwogCiAjaWYgVVNFKENH
KQogdXNpbmcgUGxhdGZvcm1QYXRoU3RvcmFnZVR5cGUgPSBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0
aFJlZj47Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi11c2luZyBQbGF0Zm9ybVBhdGhTdG9yYWdlVHlw
ZSA9IENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+OwogI2Vsc2UKIHVzaW5nIFBsYXRmb3JtUGF0
aFN0b3JhZ2VUeXBlID0gUGxhdGZvcm1QYXRoUHRyOwogI2VuZGlmCkBAIC0xODksMTAgKzE3Myw3
IEBAIHB1YmxpYzoKIAogICAgIC8vIFRvIGtlZXAgUGF0aCgpIGNoZWFwLCBpdCBkb2VzIG5vdCBh
bGxvY2F0ZSBhIFBsYXRmb3JtUGF0aCBpbW1lZGlhdGVseQogICAgIC8vIG1lYW5pbmcgUGF0aDo6
cGxhdGZvcm1QYXRoKCkgY2FuIHJldHVybiBudWxsLgotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBG
bG9hdFJlY3QgZmFzdEJvdW5kaW5nUmVjdEZvclN0cm9rZShjb25zdCBQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYpIGNvbnN0OwotICAgIFBsYXRmb3JtUGF0aFB0ciBwbGF0Zm9ybVBhdGgoKSBjb25z
dCB7IHJldHVybiBtX3BhdGguZ2V0KCk7IH0KLSNlbGlmIFVTRShDRykKKyNpZiBVU0UoQ0cpCiAg
ICAgV0VCQ09SRV9FWFBPUlQgUGxhdGZvcm1QYXRoUHRyIHBsYXRmb3JtUGF0aCgpIGNvbnN0Owog
I2VsaWYgVVNFKENBSVJPKQogICAgIGNhaXJvX3QqIGNhaXJvUGF0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGF0aC5nZXQoKTsgfQpAQCAtMjE3LDE5ICsxOTgsMTAgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBhZGRCZXppZXJzRm9yUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRT
aXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25z
dCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmln
aHRSYWRpdXMpOwogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNFKENHKQog
ICAgIHZvaWQgcGxhdGZvcm1BZGRQYXRoRm9yUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0
UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6
ZSYgYm90dG9tUmlnaHRSYWRpdXMpOwogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAg
dm9pZCBhcHBlbmRHZW9tZXRyeShJRDJEMUdlb21ldHJ5Kik7Ci0gICAgdm9pZCBjcmVhdGVHZW9t
ZXRyeVdpdGhGaWxsTW9kZShXaW5kUnVsZSwgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4mKSBj
b25zdDsKLQotICAgIHZvaWQgb3BlbkZpZ3VyZUF0Q3VycmVudFBvaW50SWZOZWNlc3NhcnkoKTsK
LSAgICB2b2lkIGNsb3NlQW55T3Blbkdlb21ldHJpZXModW5zaWduZWQgZmlndXJlRW5kU3R5bGUp
IGNvbnN0OwotICAgIHZvaWQgY2xlYXJHZW9tZXRyaWVzKCk7Ci0jZW5kaWYKLQogI2lmbmRlZiBO
REVCVUcKICAgICB2b2lkIGR1bXAoKSBjb25zdDsKICNlbmRpZgpAQCAtMjgwLDEyICsyNTIsNiBA
QCBwcml2YXRlOgogICAgIG11dGFibGUgUGxhdGZvcm1QYXRoU3RvcmFnZVR5cGUgbV9wYXRoOwog
I2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgVmVjdG9yPElEMkQxR2VvbWV0cnkqPiBt
X2dlb21ldHJpZXM7Ci0gICAgbXV0YWJsZSBDT01QdHI8SUQyRDFHZW9tZXRyeVNpbms+IG1fYWN0
aXZlUGF0aDsKLSAgICBtdXRhYmxlIGJvb2wgbV9maWd1cmVJc09wZW5lZCB7IGZhbHNlIH07Ci0j
ZW5kaWYKLQogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIElubGluZVBhdGhEYXRh
IG1faW5saW5lRGF0YTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdHRlcm4uaAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMyArMzYsNiBA
QAogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHUGF0dGVybiogQ0dQYXR0ZXJuUmVmOwog
dHlwZWRlZiBSZXRhaW5QdHI8Q0dQYXR0ZXJuUmVmPiBQbGF0Zm9ybVBhdHRlcm5QdHI7Ci0jZWxp
ZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQyRDFCaXRtYXBCcnVzaDsKLXR5cGVkZWYgSUQy
RDFCaXRtYXBCcnVzaCogUGxhdGZvcm1QYXR0ZXJuUHRyOwotbmFtZXNwYWNlIFdlYkNvcmUgewot
Y2xhc3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ7Ci19Ci10eXBlZGVmIFdlYkNvcmU6OlBsYXRm
b3JtQ29udGV4dERpcmVjdDJEIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwogI2VsaWYgVVNFKENB
SVJPKQogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90OwogdHlw
ZWRlZiBjYWlyb19wYXR0ZXJuX3QqIFBsYXRmb3JtUGF0dGVyblB0cjsKQEAgLTc3LDExICs3MCw4
IEBAIHB1YmxpYzoKICAgICBjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CiAKICAgICAvLyBQYXR0ZXJuIHNwYWNlIGlzIGFuIGFic3Ry
YWN0IHNwYWNlIHRoYXQgbWFwcyB0byB0aGUgZGVmYXVsdCB1c2VyIHNwYWNlIGJ5IHRoZSB0cmFu
c2Zvcm1hdGlvbiAndXNlclNwYWNlVHJhbnNmb3JtJwotI2lmICFVU0UoRElSRUNUMkQpCiAgICAg
UGxhdGZvcm1QYXR0ZXJuUHRyIGNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHVzZXJTcGFjZVRyYW5zZm9ybSkgY29uc3Q7Ci0jZWxzZQotICAgIFBsYXRmb3JtUGF0
dGVyblB0ciBjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgR3JhcGhpY3NDb250ZXh0JiwgZmxv
YXQgYWxwaGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtKSBjb25z
dDsKLSNlbmRpZgorCiAgICAgdm9pZCBzZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJik7CiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuU3BhY2VU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMucGF0dGVyblNwYWNlVHJhbnNm
b3JtOyB9OwogICAgIGJvb2wgcmVwZWF0WCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy5y
ZXBlYXRYOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9y
bUltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGxhdGZvcm1JbWFnZS5oCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgVVNFKENHKQogdXNpbmcgUGxhdGZvcm1J
bWFnZVB0ciA9IFJldGFpblB0cjxDR0ltYWdlUmVmPjsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLXVz
aW5nIFBsYXRmb3JtSW1hZ2VQdHIgPSBDT01QdHI8SUQyRDFCaXRtYXA+OwogI2VsaWYgVVNFKENB
SVJPKQogdXNpbmcgUGxhdGZvcm1JbWFnZVB0ciA9IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Owog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUlt
YWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDggKzMwLDYgQEAKIAogI2lmIFVTRShDRykKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5oIgotI2VsaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIkltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgiCiAjZWxpZiBVU0UoQ0FJUk8pCiAjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaCIKICNlbmRpZgpAQCAtNDQsOCArNDIs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoQ0cpCiB1c2luZyBVbmFjY2VsZXJh
dGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ7Ci0jZWxp
ZiBVU0UoRElSRUNUMkQpCi11c2luZyBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0g
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ7CiAjZWxpZiBVU0UoQ0FJUk8pCiB1c2luZyBVbmFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQ7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaAkocmV2aXNp
b24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1J
bWFnZUJ1ZmZlckJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsNiBAQAogCiAj
aWYgVVNFKENHKQogI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCi0jZWxpZiBVU0Uo
RElSRUNUMkQpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKICNlbGlm
IFVTRShDQUlSTykKICNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgogI2VuZGlm
CkBAIC0zNyw4ICszNSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShDRykKIHVz
aW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ7Ci0j
ZWxpZiBVU0UoRElSRUNUMkQpCi11c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IElt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOwogI2VsaWYgVVNFKENBSVJPKQogdXNpbmcgUGxhdGZv
cm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDsKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL0NE
TVNlc3Npb25BVkZvdW5kYXRpb25DRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL0NETVNlc3Npb25BVkZvdW5kYXRpb25D
Ri5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9jZi9DRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0YuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MywxNCArNTMsNiBAQCBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0Y6OkNETVNl
c3Npb25BVkZvCiAKIFJlZlB0cjxVaW50OEFycmF5PiBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0Y6
OmdlbmVyYXRlS2V5UmVxdWVzdChjb25zdCBTdHJpbmcmLCBVaW50OEFycmF5KiBpbml0RGF0YSwg
U3RyaW5nJiBkZXN0aW5hdGlvblVSTCwgdW5zaWduZWQgc2hvcnQmIGVycm9yQ29kZSwgdWludDMy
X3QmIHN5c3RlbUNvZGUpCiB7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIFVOVVNFRF9QQVJBTShp
bml0RGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uVVJMKTsKLSAgICBVTlVTRURf
UEFSQU0oZXJyb3JDb2RlKTsKLSAgICBVTlVTRURfUEFSQU0oc3lzdGVtQ29kZSk7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSNlbHNlCiAgICAgU3RyaW5nIGtl
eVVSSTsKICAgICBTdHJpbmcga2V5SUQ7CiAgICAgUmVmUHRyPFVpbnQ4QXJyYXk+IGNlcnRpZmlj
YXRlOwpAQCAtMTAyLDcgKzk0LDYgQEAgUmVmUHRyPFVpbnQ4QXJyYXk+IENETVNlc3Npb25BVkZv
dW5kYXRpbwogCiAgICAgYXV0byBrZXlSZXF1ZXN0QnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0
ZShDRkRhdGFHZXRCeXRlUHRyKGtleVJlcXVlc3QuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoa2V5
UmVxdWVzdC5nZXQoKSkpOwogICAgIHJldHVybiBVaW50OEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92
ZShrZXlSZXF1ZXN0QnVmZmVyKSwgMCwga2V5UmVxdWVzdEJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsK
LSNlbmRpZgogfQogCiB2b2lkIENETVNlc3Npb25BVkZvdW5kYXRpb25DRjo6cmVsZWFzZUtleXMo
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2Nm
L01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uQ0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTQsMTEgKzg5NCw3IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnAKICAgICAgICAgY29udGV4dC5z
Y2FsZShGbG9hdFNpemUoMS4wZiwgLTEuMGYpKTsKICAgICAgICAgY29udGV4dC5zZXRJbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5OjpMb3cpOwogICAgICAgICBG
bG9hdFJlY3QgcGFpbnRSZWN0KEZsb2F0UG9pbnQoKSwgcmVjdC5zaXplKCkpOwotI2lmIFVTRShE
SVJFQ1QyRCkKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbHNlCiAgICAgICAgIENHQ29u
dGV4dERyYXdJbWFnZShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBDR1JlY3RNYWtlKDAsIDAs
IHBhaW50UmVjdC53aWR0aCgpLCBwYWludFJlY3QuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7Ci0j
ZW5kaWYKICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CiAgICAgICAgIGltYWdlID0gMDsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVu
dEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2MiwxNiArMzYyLDEyIEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhd1BE
RlBhZ2UoR3JhcGgKIAogICAgIGNvbnRleHQudHJhbnNsYXRlKC1tX2Nyb3BCb3gubG9jYXRpb24o
KSk7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbHNlCiAg
ICAgLy8gQ0dQREYgcGFnZXMgYXJlIGluZGV4ZWQgZnJvbSAxLgogI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIENHQ29udGV4dERyYXdQREZQYWdlV2l0aEFubm90YXRpb25zKGNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCksIENHUERGRG9jdW1lbnRHZXRQYWdlKG1fZG9jdW1lbnQuZ2V0KCksIDEpLCBu
dWxscHRyKTsKICNlbHNlCiAgICAgQ0dDb250ZXh0RHJhd1BERlBhZ2UoY29udGV4dC5wbGF0Zm9y
bUNvbnRleHQoKSwgQ0dQREZEb2N1bWVudEdldFBhZ2UobV9kb2N1bWVudC5nZXQoKSwgMSkpOwog
I2VuZGlmCi0jZW5kaWYKIH0KIAogI2VuZGlmIC8vICFVU0UoUERGS0lUX0ZPUl9QREZET0NVTUVO
VElNQUdFKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCShyZXZp
c2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNyArMTg5
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KIAotI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykKICAgICB2b2lkIHNldElzQ0FMYXllckNvbnRl
eHQoYm9vbCkgZmluYWwgeyB9CiAgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJv
b2wpIGZpbmFsIHsgfQpAQCAtMjIwLDcgKzIyMCw3IEBAIHByaXZhdGU6CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0j
aWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNFKENHKQogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5U
eXBlTWF0aERhdGEuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjU5LDEwICsyNTksNiBAQCBPcGVuVHlwZU1hdGhEYXRhOjpPcGVuVHlwZU1hdGhEYXRh
KGNvbnN0CiAgICAgOiBtX21hdGhGb250KGZvbnQuY3JlYXRlT3BlblR5cGVNYXRoSGFyZkJ1enpG
b250KCkpCiB7CiB9Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi1PcGVuVHlwZU1hdGhEYXRhOjpPcGVu
VHlwZU1hdGhEYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnQpCi17Ci19CiAjZWxzZQog
T3BlblR5cGVNYXRoRGF0YTo6T3BlblR5cGVNYXRoRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRh
JikgPSBkZWZhdWx0OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3Bw
CShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICsz
MCw2IEBACiAjaW5jbHVkZSAiRm9udE1lbW9yeVJlc291cmNlLmgiCiAjaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGls
aXRpZXMuaCIKLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RydWN0IEJpZ0VuZGlhblVTaG9ydCB7IApAQCAtMjgxLDExICsyNzYsNiBAQCBS
ZWZQdHI8Rm9udE1lbW9yeVJlc291cmNlPiByZW5hbWVBbmRBY3RpCiAgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIEhSRVNVTFQgaHIgPSBEaXJlY3RX
cml0ZTo6YWRkRm9udEZyb21EYXRhVG9Qcm9jZXNzQ29sbGVjdGlvbihyZXdyaXR0ZW5Gb250RGF0
YSk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotI2VuZGlmCi0KICAgICByZXR1cm4gRm9u
dE1lbW9yeVJlc291cmNlOjpjcmVhdGUoZm9udEhhbmRsZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4
dHVyZS5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEg
KzU0LDYgQEAgdm9pZCBCaXRtYXBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyhHcmFwaAogCiAgICAg
c291cmNlTGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIHNvdXJjZVJl
Y3QpOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIC8vIFdlIGNhbid0IGFjY2VzcyB0aGUgYml0
cyBpbiB0aGUgaW1hZ2UgYnVmZmVyIHdpdGggYW4gYWN0aXZlIGJlZ2luRHJhdy4KLSAgICBjb250
ZXh0LmVuZERyYXcoKTsKLSNlbmRpZgotCiAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGltYWdl
QnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgIGlmICghaW1hZ2Up
CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuY3BwCShyZXZpc2lvbiAy
ODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFw
VGV4dHVyZUdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTEgKzQyLDYgQEAKICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNs
dWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d2luY29kZWMuaD4KLSNlbmRpZgotCiAjaWYgT1MoREFS
V0lOKQogI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYgMHg4MzY3CiAjZW5kaWYK
QEAgLTE2Myw4ICsxNTgsNiBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMo
SW1hCiAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gZnJhbWVJbWFnZS0+cGxhdGZvcm1J
bWFnZSgpLmdldCgpOwogICAgIGltYWdlRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Rh
dGEoc3VyZmFjZSk7CiAgICAgYnl0ZXNQZXJMaW5lID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
c3RyaWRlKHN1cmZhY2UpOwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIG5vdEltcGxlbWVudGVk
KCk7CiAjZW5kaWYKIAogICAgIHVwZGF0ZUNvbnRlbnRzKGltYWdlRGF0YSwgdGFyZ2V0UmVjdCwg
b2Zmc2V0LCBieXRlc1BlckxpbmUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGly
ZWN0MkQuaAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRC5oCShub25leGlzdGVudCkKQEAg
LTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0
ci5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3aW5jb2RlYy5oPgotI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi1pbnRlcmZhY2UgSUQyRDFCaXRtYXA7Ci1pbnRlcmZh
Y2UgSUQyRDFCaXRtYXBCcnVzaDsKLWludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLWludGVy
ZmFjZSBJRDNEMTFEZXZpY2UxOwotaW50ZXJmYWNlIElEWEdJU3VyZmFjZTE7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJEIHsKLSAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkQpOwotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHZpcnR1YWwgfkJhY2tpbmdTdG9y
ZUJhY2tlbmREaXJlY3QyRCgpID0gZGVmYXVsdDsKLQotICAgIElEMkQxUmVuZGVyVGFyZ2V0KiBy
ZW5kZXJUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclRhcmdldC5nZXQoKTsgfQotICAg
IElEMkQxQml0bWFwKiBzdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLmdldCgpOyB9
Ci0gICAgSURYR0lTdXJmYWNlMSogZHhTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9keFN1cmZh
Y2UuZ2V0KCk7IH0KLSAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJl
Y3QsIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgSUQyRDFC
aXRtYXBCcnVzaCogYml0bWFwQnJ1c2goKSA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICBCYWNraW5n
U3RvcmVCYWNrZW5kRGlyZWN0MkQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSUQzRDExRGV2aWNlMSog
ZGV2aWNlKQotICAgICAgICA6IG1fZGV2aWNlKGRldmljZSkKLSAgICAgICAgLCBtX3NpemUoc2l6
ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgQ09NUHRyPElEM0QxMURldmljZTE+IG1fZGV2aWNlOwot
ICAgIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gbV9yZW5kZXJUYXJnZXQ7Ci0gICAgQ09NUHRy
PElEWEdJU3VyZmFjZTE+IG1fZHhTdXJmYWNlOwotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gbV9z
dXJmYWNlOwotICAgIEludFNpemUgbV9zaXplOwotfTsKLQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyREltcGwuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJE
SW1wbC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJ
bXBsLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGll
cy5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNp
bmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNp
bmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2luY2x1ZGUgPHdpbmNv
ZGVjLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IFNlY29uZHMgc2Ny
b2xsSHlzdGVyZXNpc0R1cmF0aW9uIHsgMzAwX21zIH07Ci0KLUJhY2tpbmdTdG9yZUJhY2tlbmRE
aXJlY3QyREltcGw6OkJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIElEM0QxMURldmljZTEqIGRldmljZSkK
LSAgICA6IEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRChzaXplLCBkZXZpY2UpCi0gICAgLCBt
X3Njcm9sbGVkSHlzdGVyZXNpcyhbdGhpc10oUEFMOjpIeXN0ZXJlc2lzU3RhdGUgc3RhdGUpIHsK
LSAgICAgICAgaWYgKHN0YXRlID09IFBBTDo6SHlzdGVyZXNpc1N0YXRlOjpTdG9wcGVkKQotICAg
ICAgICAgICAgbV9zY3JvbGxTdXJmYWNlID0gbnVsbHB0cjsKLSAgICAgICAgfSwgc2Nyb2xsSHlz
dGVyZXNpc0R1cmF0aW9uKQotewotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IG1fc2l6ZTsKLSAg
ICBzY2FsZWRTaXplLnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKLQotICAgIG1fZHhTdXJmYWNl
ID0gV2ViQ29yZTo6RGlyZWN0MkQ6OmNyZWF0ZURYR0lTdXJmYWNlT2ZTaXplKHNjYWxlZFNpemUs
IG1fZGV2aWNlLmdldCgpLCBmYWxzZSk7Ci0gICAgbV9yZW5kZXJUYXJnZXQgPSBXZWJDb3JlOjpE
aXJlY3QyRDo6Y3JlYXRlU3VyZmFjZVJlbmRlclRhcmdldChtX2R4U3VyZmFjZS5nZXQoKSk7Ci0K
LSAgICBhdXRvIGJpdG1hcFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygp
OwotICAgIEhSRVNVTFQgaHIgPSBtX3JlbmRlclRhcmdldC0+Q3JlYXRlU2hhcmVkQml0bWFwKF9f
dXVpZG9mKElEWEdJU3VyZmFjZTEpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihtX2R4U3VyZmFj
ZS5nZXQoKSksICZiaXRtYXBQcm9wZXJ0aWVzLCAmbV9zdXJmYWNlKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChTVUNDRUVERUQoaHIpKTsKLX0KLQotQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1w
bDo6fkJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwoKQotewotfQotCi12b2lkIEJhY2tp
bmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGw6OnNjcm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxS
ZWN0LCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZzZXQpCi17Ci0gICAgSW50UmVjdCBzb3VyY2VS
ZWN0ID0gc2Nyb2xsUmVjdDsKLSAgICBzb3VyY2VSZWN0Lm1vdmUoLXNjcm9sbE9mZnNldCk7Ci0g
ICAgc291cmNlUmVjdC5pbnRlcnNlY3Qoc2Nyb2xsUmVjdCk7Ci0KLSAgICBpZiAoc291cmNlUmVj
dC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9zY3JvbGxTdXJmYWNl
IHx8IHNjcm9sbFJlY3Quc2l6ZSgpICE9IG1fc2Nyb2xsU3VyZmFjZVNpemUpIHsKLSNpZm5kZWYg
X05ERUJVRwotICAgICAgICBBU1NFUlQobV9zaXplLndpZHRoKCkgPj0gc2Nyb2xsUmVjdC5zaXpl
KCkud2lkdGgoKSk7Ci0gICAgICAgIEFTU0VSVChtX3NpemUuaGVpZ2h0KCkgPj0gc2Nyb2xsUmVj
dC5zaXplKCkuaGVpZ2h0KCkpOwotI2VuZGlmCi0gICAgICAgIG1fc2Nyb2xsU3VyZmFjZVNpemUg
PSBzb3VyY2VSZWN0LnNpemUoKTsKLSAgICAgICAgbV9keFNjcm9sbFN1cmZhY2UgPSBXZWJDb3Jl
OjpEaXJlY3QyRDo6Y3JlYXRlRFhHSVN1cmZhY2VPZlNpemUobV9zY3JvbGxTdXJmYWNlU2l6ZSwg
bV9kZXZpY2UuZ2V0KCksIGZhbHNlKTsKLQotICAgICAgICBtX3Njcm9sbFN1cmZhY2UgPSBudWxs
cHRyOwotICAgICAgICBhdXRvIGJpdG1hcFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6Yml0bWFwUHJv
cGVydGllcygpOwotICAgICAgICBIUkVTVUxUIGhyID0gbV9yZW5kZXJUYXJnZXQtPkNyZWF0ZVNo
YXJlZEJpdG1hcChfX3V1aWRvZihJRFhHSVN1cmZhY2UxKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4obV9keFNjcm9sbFN1cmZhY2UuZ2V0KCkpLCAmYml0bWFwUHJvcGVydGllcywgJm1fc2Nyb2xs
U3VyZmFjZSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIH0K
LQotICAgIGF1dG8gc291cmNlUmVjdExvY2F0aW9uID0gSW50U2l6ZShzb3VyY2VSZWN0LngoKSwg
c291cmNlUmVjdC55KCkpOwotICAgIGF1dG8gZGVzdFJlY3RMb2NhdGlvbiA9IEludFNpemUoKTsg
Ly8gVG9wIGxlZnQgY29ybmVyIG9mIHNjcm9sbCBzdXJmYWNlCi0gICAgRGlyZWN0MkQ6OmNvcHlS
ZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIobV9zdXJmYWNlLmdldCgpLCBtX3Njcm9sbFN1cmZh
Y2UuZ2V0KCksIHNvdXJjZVJlY3RMb2NhdGlvbiwgc291cmNlUmVjdCwgZGVzdFJlY3RMb2NhdGlv
bik7Ci0KLSAgICBJbnRSZWN0IGRlc3RSZWN0ID0gc2Nyb2xsUmVjdDsKLSAgICBkZXN0UmVjdC5z
ZXRIZWlnaHQoc291cmNlUmVjdC5oZWlnaHQoKSk7Ci0gICAgZGVzdFJlY3Quc2V0V2lkdGgoc291
cmNlUmVjdC53aWR0aCgpKTsKLQotICAgIEludFNpemUgZGVzdFBvc2l0aW9uOwotICAgIGlmIChz
Y3JvbGxPZmZzZXQud2lkdGgoKSA+IDAgfHwgc2Nyb2xsT2Zmc2V0LmhlaWdodCgpID4gMCkgewot
ICAgICAgICBkZXN0UG9zaXRpb24uc2V0V2lkdGgoc3RkOjptaW4oc2Nyb2xsUmVjdC53aWR0aCgp
LCBzY3JvbGxPZmZzZXQud2lkdGgoKSkpOwotICAgICAgICBkZXN0UG9zaXRpb24uc2V0SGVpZ2h0
KHN0ZDo6bWluKHNjcm9sbFJlY3QuaGVpZ2h0KCksIHNjcm9sbE9mZnNldC5oZWlnaHQoKSkpOwot
ICAgIH0KLQotICAgIGF1dG8gc291cmNlU2Nyb2xsU3VyZmFjZUxvY2F0aW9uID0gSW50U2l6ZSgp
OyAvLyBUb3AgbGVmdCBjb3JuZXIgb2Ygc2Nyb2xsIHN1cmZhY2UKLSAgICBEaXJlY3QyRDo6Y29w
eVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihtX3Njcm9sbFN1cmZhY2UuZ2V0KCksIG1fc3Vy
ZmFjZS5nZXQoKSwgc291cmNlU2Nyb2xsU3VyZmFjZUxvY2F0aW9uLCBkZXN0UmVjdCwgZGVzdFBv
c2l0aW9uKTsKLQotICAgIG1fc2Nyb2xsZWRIeXN0ZXJlc2lzLmltcHVsc2UoKTsKLX0KLQotSUQy
RDFCaXRtYXBCcnVzaCogQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbDo6Yml0bWFwQnJ1
c2goKQotewotICAgIGlmICghbV9yZW5kZXJUYXJnZXQgfHwgIW1fc3VyZmFjZSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIW1fYml0bWFwQnJ1c2gpIHsKLSAgICAgICAgYXV0
byBiaXRtYXBCcnVzaFByb3BlcnRpZXMgPSBEMkQxOjpCaXRtYXBCcnVzaFByb3BlcnRpZXMoKTsK
LSAgICAgICAgYXV0byBicnVzaFByb3BlcnRpZXMgPSBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKTsK
LQotICAgICAgICBIUkVTVUxUIGhyID0gbV9yZW5kZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcEJydXNo
KG1fc3VyZmFjZS5nZXQoKSwgJmJpdG1hcEJydXNoUHJvcGVydGllcywgJmJydXNoUHJvcGVydGll
cywgJm1fYml0bWFwQnJ1c2gpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG1fYml0bWFwQnJ1c2guZ2V0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tp
bmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuaAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3Qy
REltcGwuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkJhY2tpbmdTdG9yZUJh
Y2tlbmREaXJlY3QyRC5oIgotI2luY2x1ZGUgPHBhbC9IeXN0ZXJlc2lzQWN0aXZpdHkuaD4KLQot
aW50ZXJmYWNlIElEMkQxQml0bWFwQnJ1c2g7Ci1pbnRlcmZhY2UgSURYR0lTdXJmYWNlMTsKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbnRTaXplOwotCi1jbGFzcyBCYWNraW5nU3Rv
cmVCYWNrZW5kRGlyZWN0MkRJbXBsIGZpbmFsIDogcHVibGljIEJhY2tpbmdTdG9yZUJhY2tlbmRE
aXJlY3QyRCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQmFja2luZ1N0b3JlQmFja2Vu
ZERpcmVjdDJESW1wbChjb25zdCBJbnRTaXplJiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIElE
M0QxMURldmljZTEqKTsKLSAgICB2aXJ0dWFsIH5CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJ
bXBsKCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBzY3JvbGwoY29uc3QgSW50UmVjdCYsIGNvbnN0
IEludFNpemUmKSBvdmVycmlkZTsKLSAgICBJRDJEMUJpdG1hcEJydXNoKiBiaXRtYXBCcnVzaCgp
IG92ZXJyaWRlOwotCi0gICAgSW50U2l6ZSBtX3Njcm9sbFN1cmZhY2VTaXplOwotICAgIENPTVB0
cjxJRDJEMUJpdG1hcD4gbV9zY3JvbGxTdXJmYWNlOwotICAgIENPTVB0cjxJRFhHSVN1cmZhY2Ux
PiBtX2R4U2Nyb2xsU3VyZmFjZTsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXBCcnVzaD4gbV9iaXRt
YXBCcnVzaDsKLQotICAgIFBBTDo6SHlzdGVyZXNpc0FjdGl2aXR5IG1fc2Nyb2xsZWRIeXN0ZXJl
c2lzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVD
VDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGly
ZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Db2xvckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkK
QEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotCi0j
aWYgUExBVEZPUk0oV0lOKQotCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQyZDFfMWhl
bHBlci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNvbG9yOjpDb2xvcihEMkQxX0NPTE9S
X0YgY29sb3IpCi0gICAgOiBDb2xvcihjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KFNSR0JB
PGZsb2F0PiB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSkpCi17Ci19Ci0K
LUNvbG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0YoKSBjb25zdAotewotICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKLSAg
ICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEpOwotfQotCi1Db2xvcjo6b3BlcmF0b3Ig
RDJEMV9WRUNUT1JfNEYoKSBjb25zdAotewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xv
clR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKLSAgICByZXR1cm4gRDJEMTo6
VmVjdG9yNEYociwgZywgYiwgYSk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENv
bnRyb2xsZXJEaXJlY3RXcml0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlckRpcmVjdFdyaXRlLmNwcAko
cmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0NvbXBsZXhUZXh0Q29udHJvbGxlckRpcmVjdFdyaXRlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0x
LDE4MSArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1l
dDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0qIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0qIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0qIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCi0qIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0qIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxl
ci5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRp
ZXMuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgot
I2luY2x1ZGUgIlRleHRBbmFseXplckhlbHBlci5oIgotI2luY2x1ZGUgPGR3cml0ZV8zLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGJvb2wgc2hhcGUoSURXcml0ZVRleHRBbmFs
eXplciogYW5hbHl6ZXIsIGNvbnN0IERXUklURV9TQ1JJUFRfQU5BTFlTSVMmIGFuYWx5c2lzLCBj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250UGxhdGZvcm1EYXRhLCBjb25zdCBXQ0hBUiogdGV4
dCwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdWdnZXN0ZWRDb3VudCwgVmVjdG9yPEdseXBo
PiYgZ2x5cGhzLCBWZWN0b3I8R2x5cGg+JiBjbHVzdGVyTWFwLCBWZWN0b3I8RFdSSVRFX1NIQVBJ
TkdfVEVYVF9QUk9QRVJUSUVTPiYgdGV4dFByb3BlcnRpZXMsIFZlY3RvcjxEV1JJVEVfU0hBUElO
R19HTFlQSF9QUk9QRVJUSUVTPiYgZ2x5cGhQcm9wZXJ0aWVzLCB1bnNpZ25lZCYgZ2x5cGhDb3Vu
dCkKLXsKLSAgICBIUkVTVUxUIHNoYXBlUmVzdWx0ID0gRV9QRU5ESU5HOwotCi0gICAgZG8gewot
ICAgICAgICBzaGFwZVJlc3VsdCA9IGFuYWx5emVyLT5HZXRHbHlwaHModGV4dCwgbGVuZ3RoLCBm
b250UGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKSwgZm9udFBsYXRmb3JtRGF0YS5vcmllbnRhdGlv
bigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwsIGZhbHNlLAotICAgICAgICAgICAgJmFu
YWx5c2lzLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCAwLCBzdWdnZXN0ZWRD
b3VudCwgY2x1c3Rlck1hcC5kYXRhKCksIHRleHRQcm9wZXJ0aWVzLmRhdGEoKSwKLSAgICAgICAg
ICAgIGdseXBocy5kYXRhKCksIGdseXBoUHJvcGVydGllcy5kYXRhKCksICZnbHlwaENvdW50KTsK
LQotICAgICAgICBpZiAoc2hhcGVSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkgewotICAgICAgICAg
ICAgLy8gTmVlZCB0byByZXNpemUgb3VyIGJ1ZmZlcnMgKGV4Y2VwdCBmb3IgY2x1c3Rlck1hcC4g
SXQgaXMgYWx3YXlzIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZykuCi0gICAgICAgICAgICBnbHlw
aHMucmVzaXplKGdseXBocy5zaXplKCkgKiAyKTsKLSAgICAgICAgICAgIHRleHRQcm9wZXJ0aWVz
LnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGdseXBoUHJvcGVydGllcy5yZXNp
emUoZ2x5cGhzLnNpemUoKSk7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlIChzaGFwZVJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKTsKLQotICAgIGlmIChGQUlMRUQoc2hhcGVSZXN1bHQpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb21wbGV4VGV4
dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVD
aGFyKiBjcCwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgY29uc3Qg
Rm9udCogZm9udCkKLXsKLSAgICBpZiAoIWZvbnQpIHsKLSAgICAgICAgLy8gQ3JlYXRlIGEgcnVu
IG9mIG1pc3NpbmcgZ2x5cGhzIGZyb20gdGhlIHByaW1hcnkgZm9udC4KLSAgICAgICAgbV9jb21w
bGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlG
b250KCksIGNwLCBzdHJpbmdMb2NhdGlvbiwgbGVuZ3RoLCAwLCBsZW5ndGgsIG1fcnVuLmx0cigp
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvJiBmb250UGxhdGZvcm1EYXRh
ID0gZm9udC0+cGxhdGZvcm1EYXRhKCk7Ci0KLSAgICB3Y2hhcl90IGxvY2FsZU5hbWVbTE9DQUxF
X05BTUVfTUFYX0xFTkdUSF0gPSB7IH07Ci0gICAgaW50IGxvY2FsZUxlbmd0aCA9IEdldFVzZXJE
ZWZhdWx0TG9jYWxlTmFtZShyZWludGVycHJldF9jYXN0PExQV1NUUj4oJmxvY2FsZU5hbWUpLCBM
T0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKLSAgICBSRUxFQVNFX0FTU0VSVChsb2NhbGVMZW5ndGgg
PCBMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKLQotICAgIFZlY3RvcjxEV1JJVEVfRk9OVF9GRUFU
VVJFPiBmb250RmVhdHVyZXMoMSk7Ci0gICAgZm9udEZlYXR1cmVzWzBdLm5hbWVUYWcgPSBEV1JJ
VEVfRk9OVF9GRUFUVVJFX1RBR19LRVJOSU5HOwotICAgIGZvbnRGZWF0dXJlc1swXS5wYXJhbWV0
ZXIgPSBtX2ZvbnQuZW5hYmxlS2VybmluZygpID8gMSA6IDA7Ci0KLSAgICBpZiAoZm9udFBsYXRm
b3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpCi0gICAg
ICAgIGZvbnRGZWF0dXJlcy5hcHBlbmQoe0RXUklURV9GT05UX0ZFQVRVUkVfVEFHX1ZFUlRJQ0FM
X1dSSVRJTkcsIDF9KTsKLQotICAgIERXUklURV9UWVBPR1JBUEhJQ19GRUFUVVJFUyB1c2VkRmVh
dHVyZXM7Ci0gICAgdXNlZEZlYXR1cmVzLmZlYXR1cmVzID0gZm9udEZlYXR1cmVzLmRhdGEoKTsK
LSAgICB1c2VkRmVhdHVyZXMuZmVhdHVyZUNvdW50ID0gZm9udEZlYXR1cmVzLnNpemUoKTsKLQot
ICAgIFZlY3Rvcjxjb25zdCBEV1JJVEVfVFlQT0dSQVBISUNfRkVBVFVSRVMqPiBmZWF0dXJlczsK
LSAgICBmZWF0dXJlcy5hcHBlbmQoJnVzZWRGZWF0dXJlcyk7Ci0KLSAgICBDT01QdHI8SURXcml0
ZVRleHRBbmFseXplcj4gYW5hbHl6ZXI7Ci0gICAgSFJFU1VMVCBociA9IERpcmVjdFdyaXRlOjpm
YWN0b3J5KCktPkNyZWF0ZVRleHRBbmFseXplcigmYW5hbHl6ZXIpOwotICAgIFJFTEVBU0VfQVNT
RVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgVGV4dEFuYWx5emVySGVscGVyIGhlbHBlcihyZWlu
dGVycHJldF9jYXN0PExQV1NUUj4oJmxvY2FsZU5hbWUpLCByZWludGVycHJldF9jYXN0PExQQ1dT
VFI+KGNwKSwgbGVuZ3RoKTsKLQotICAgIGhyID0gYW5hbHl6ZXItPkFuYWx5emVTY3JpcHQoJmhl
bHBlciwgMCwgbGVuZ3RoLCAmaGVscGVyKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQo
aHIpKTsKLQotICAgIHVuc2lnbmVkIHRvdGFsU3VnZ2VzdGVkQ291bnQgPSAoMyAqIGxlbmd0aCAv
IDIgKyAxNik7Ci0KLSAgICBWZWN0b3I8R2x5cGg+IGdseXBoczsKLSAgICBWZWN0b3I8R2x5cGg+
IGNsdXN0ZXJNYXA7Ci0gICAgVmVjdG9yPERXUklURV9TSEFQSU5HX1RFWFRfUFJPUEVSVElFUz4g
dGV4dFByb3BlcnRpZXM7Ci0gICAgVmVjdG9yPERXUklURV9TSEFQSU5HX0dMWVBIX1BST1BFUlRJ
RVM+IGdseXBoUHJvcGVydGllczsKLSAgICBWZWN0b3I8RkxPQVQ+IGdseXBoQWR2YW5jZXM7Ci0g
ICAgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+IGdseXBoT2Zmc2V0czsKLSAgICBWZWN0b3I8
RmxvYXRQb2ludD4gb3JpZ2luczsKLSAgICBWZWN0b3I8RmxvYXRTaXplPiBhZHZhbmNlczsKLSAg
ICBWZWN0b3I8dW5zaWduZWQ+IHN0cmluZ0luZGljZXM7Ci0KLSAgICBnbHlwaHMucmVzZXJ2ZUNh
cGFjaXR5KHRvdGFsU3VnZ2VzdGVkQ291bnQpOwotICAgIGNsdXN0ZXJNYXAucmVzZXJ2ZUNhcGFj
aXR5KGxlbmd0aCk7Ci0gICAgdGV4dFByb3BlcnRpZXMucmVzZXJ2ZUNhcGFjaXR5KHRvdGFsU3Vn
Z2VzdGVkQ291bnQpOwotICAgIGdseXBoUHJvcGVydGllcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxT
dWdnZXN0ZWRDb3VudCk7Ci0gICAgZ2x5cGhBZHZhbmNlcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxT
dWdnZXN0ZWRDb3VudCk7Ci0gICAgZ2x5cGhPZmZzZXRzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1
Z2dlc3RlZENvdW50KTsKLSAgICBvcmlnaW5zLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1Z2dlc3Rl
ZENvdW50KTsKLSAgICBhZHZhbmNlcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdnZXN0ZWRDb3Vu
dCk7Ci0gICAgc3RyaW5nSW5kaWNlcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdnZXN0ZWRDb3Vu
dCk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHJ1biA6IGhlbHBlci5tX2FuYWx5emVkUnVucykg
ewotICAgICAgICBjb25zdCBVQ2hhciogY3VycmVudENQID0gY3AgKyBydW4uc3RhcnRQb3NpdGlv
bjsKLSAgICAgICAgTFBDV1NUUiB0ZXh0UG9zaXRpb24gPSByZWludGVycHJldF9jYXN0PExQQ1dT
VFI+KGN1cnJlbnRDUCk7Ci0KLSAgICAgICAgdW5zaWduZWQgc3VnZ2VzdGVkQ291bnQgPSAoMyAq
IHJ1bi5sZW5ndGggLyAyICsgMTYpOwotICAgICAgICBnbHlwaHMucmVzaXplKHN1Z2dlc3RlZENv
dW50KTsKLSAgICAgICAgY2x1c3Rlck1hcC5yZXNpemUocnVuLmxlbmd0aCk7Ci0gICAgICAgIHRl
eHRQcm9wZXJ0aWVzLnJlc2l6ZShzdWdnZXN0ZWRDb3VudCk7Ci0gICAgICAgIGdseXBoUHJvcGVy
dGllcy5yZXNpemUoc3VnZ2VzdGVkQ291bnQpOwotCi0gICAgICAgIHVuc2lnbmVkIGdseXBoQ291
bnQgPSAwOwotICAgICAgICBpZiAoIXNoYXBlKGFuYWx5emVyLmdldCgpLCBydW4uYW5hbHlzaXMs
IGZvbnRQbGF0Zm9ybURhdGEsIHRleHRQb3NpdGlvbiwgcnVuLmxlbmd0aCwgc3VnZ2VzdGVkQ291
bnQsIGdseXBocywgY2x1c3Rlck1hcCwgdGV4dFByb3BlcnRpZXMsIGdseXBoUHJvcGVydGllcywg
Z2x5cGhDb3VudCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZ2x5cGhzLnNocmlu
ayhnbHlwaENvdW50KTsKLSAgICAgICAgdGV4dFByb3BlcnRpZXMuc2hyaW5rKGdseXBoQ291bnQp
OwotICAgICAgICBnbHlwaFByb3BlcnRpZXMuc2hyaW5rKGdseXBoQ291bnQpOwotICAgICAgICBn
bHlwaEFkdmFuY2VzLnJlc2l6ZShnbHlwaENvdW50KTsKLSAgICAgICAgZ2x5cGhPZmZzZXRzLnJl
c2l6ZShnbHlwaENvdW50KTsKLQotICAgICAgICBIUkVTVUxUIHBsYWNlbWVudFJlc3VsdCA9IGFu
YWx5emVyLT5HZXRHbHlwaFBsYWNlbWVudHModGV4dFBvc2l0aW9uLCBjbHVzdGVyTWFwLmRhdGEo
KSwgdGV4dFByb3BlcnRpZXMuZGF0YSgpLCBydW4ubGVuZ3RoLAotICAgICAgICAgICAgZ2x5cGhz
LmRhdGEoKSwgZ2x5cGhQcm9wZXJ0aWVzLmRhdGEoKSwgZ2x5cGhDb3VudCwgZm9udFBsYXRmb3Jt
RGF0YS5kd0ZvbnRGYWNlKCksCi0gICAgICAgICAgICBmb250UGxhdGZvcm1EYXRhLnNpemUoKSwg
Zm9udFBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGlj
YWwsIG1fcnVuLmx0cigpLAotICAgICAgICAgICAgJnJ1bi5hbmFseXNpcywgcmVpbnRlcnByZXRf
Y2FzdDxMUENXU1RSPihsb2NhbGVOYW1lKSwgCi0gICAgICAgICAgICBmZWF0dXJlcy5kYXRhKCks
ICZydW4ubGVuZ3RoLCAxLAotICAgICAgICAgICAgZ2x5cGhBZHZhbmNlcy5kYXRhKCksIGdseXBo
T2Zmc2V0cy5kYXRhKCkpOwotICAgICAgICBpZiAoRkFJTEVEKHBsYWNlbWVudFJlc3VsdCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gQ29udmVydCBhbGwgY2hhcnMgdGhhdCBz
aG91bGQgYmUgdHJlYXRlZCBhcyBzcGFjZXMgdG8gdXNlIHRoZSBzcGFjZSBnbHlwaC4KLSAgICAg
ICAgLy8gV2UgYWxzbyBjcmVhdGUgYSBtYXAgdGhhdCBhbGxvd3MgdXMgdG8gcXVpY2tseSBnbyBm
cm9tIHNwYWNlIGdseXBocyBiYWNrIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVycy4K
LSAgICAgICAgZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnQtPnNwYWNlV2lkdGgoKSAtIGZvbnQtPnN5
bnRoZXRpY0JvbGRPZmZzZXQoKTsKLQotICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHJ1bi5s
ZW5ndGg7ICsraykgewotICAgICAgICAgICAgVUNoYXIgY2ggPSAqKGN1cnJlbnRDUCArIGspOwot
ICAgICAgICAgICAgYm9vbCB0cmVhdEFzU3BhY2UgPSBGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNl
KGNoKTsKLSAgICAgICAgICAgIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlID0gRm9udENhc2Nh
ZGU6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaCk7Ci0gICAgICAgICAgICBpZiAodHJlYXRBc1Nw
YWNlIHx8IHRyZWF0QXNaZXJvV2lkdGhTcGFjZSkgewotICAgICAgICAgICAgICAgIC8vIFN1YnN0
aXR1dGUgaW4gdGhlIHNwYWNlIGdseXBoIGF0IHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbiB0aGUg
Z2x5cGhzCi0gICAgICAgICAgICAgICAgLy8gYXJyYXkuCi0gICAgICAgICAgICAgICAgZ2x5cGhz
W2NsdXN0ZXJNYXBba11dID0gZm9udC0+c3BhY2VHbHlwaCgpOwotICAgICAgICAgICAgICAgIGds
eXBoQWR2YW5jZXNbY2x1c3Rlck1hcFtrXV0gPSB0cmVhdEFzU3BhY2UgPyBzcGFjZVdpZHRoIDog
MDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG9yaWdpbnMucmVzaXplKGds
eXBoQ291bnQpOwotICAgICAgICBhZHZhbmNlcy5yZXNpemUoZ2x5cGhDb3VudCk7Ci0gICAgICAg
IHN0cmluZ0luZGljZXMucmVzaXplKGdseXBoQ291bnQpOwotCi0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZ2x5cGhDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBzdHJpbmdJbmRpY2Vz
W2ldID0gaTsKLSAgICAgICAgICAgIG9yaWdpbnNbaV0gPSBGbG9hdFBvaW50KGdseXBoT2Zmc2V0
c1tpXS5hZHZhbmNlT2Zmc2V0LCBnbHlwaE9mZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQpOwotICAg
ICAgICAgICAgYWR2YW5jZXNbaV0gPSBGbG9hdFNpemUoZ2x5cGhBZHZhbmNlc1tpXSwgMCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRS
dW46OmNyZWF0ZShhZHZhbmNlcywgb3JpZ2lucywgZ2x5cGhzLCBzdHJpbmdJbmRpY2VzLCBGbG9h
dFNpemUoKSwgKmZvbnQsIGN1cnJlbnRDUCwgMCwgcnVuLmxlbmd0aCwgMCwgcnVuLmxlbmd0aCwg
bV9ydW4ubHRyKCkpKTsKLSAgICB9Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Q29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxl
clVuaXNjcmliZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDYgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKIAotI2lmICFV
U0UoRElSRUNUMkQpCi0KICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGb250Q2Fz
Y2FkZS5oIgogI2luY2x1ZGUgIkhXbmREQy5oIgpAQCAtMjc1LDUgKzI3MywzIEBAIHZvaWQgQ29t
cGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGwKIH0KIAogfQotCi0jZW5kaWYgLy8gIVVT
RShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9E
aXJlY3QyRE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODc4MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRp
b25zLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDEyNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNi0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBOdWFudGkgTHRkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEJyZW50IEZ1bGdo
YW0gPGJmdWxnaGFtQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdh
bGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAx
MC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiwgSW50ZWwgQ29y
cG9yYXRpb24KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRpcmVjdDJET3BlcmF0aW9ucy5oIgotCi0jaWYg
VVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRl
ICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkltYWdl
LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJl
Y3QyRC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSAiU2hhZG93Qmx1
ci5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxkMmQxLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBEaXJlY3QyRCB7Ci0KLWVudW0gUGF0dGVybkFkanVzdG1l
bnQgeyBOb0FkanVzdG1lbnQsIEFkanVzdFBhdHRlcm5Gb3JHbG9iYWxBbHBoYSB9OwotZW51bSBB
bHBoYVByZXNlcnZhdGlvbiB7IERvTm90UHJlc2VydmVBbHBoYSwgUHJlc2VydmVBbHBoYSB9Owot
Ci0vLyBGSVhNRTogUmVwbGFjZSBvbmNlIEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZUNvcm5l
cldpZHRoRm9yU3Ryb2tlV2lkdGgoKQotLy8gaXMgcmVmYWN0b3JlZCBhcyBhIHN0YXRpYyBwdWJs
aWMgZnVuY3Rpb24uCi1zdGF0aWMgZmxvYXQgZGFzaGVkTGluZUNvcm5lcldpZHRoRm9yU3Ryb2tl
V2lkdGgoZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlLCBmbG9hdCBz
dHJva2VUaGlja25lc3MpCi17Ci0gICAgcmV0dXJuIHN0cm9rZVN0eWxlID09IERvdHRlZFN0cm9r
ZSA/IHN0cm9rZVRoaWNrbmVzcyA6IHN0ZDo6bWluKDIuMGYgKiBzdHJva2VUaGlja25lc3MsIHN0
ZDo6bWF4KHN0cm9rZVRoaWNrbmVzcywgc3Ryb2tlV2lkdGggLyAzLjBmKSk7Ci19Ci0KLS8vIEZJ
WE1FOiBSZXBsYWNlIG9uY2UgR3JhcGhpY3NDb250ZXh0OjpkYXNoZWRMaW5lUGF0dGVybldpZHRo
Rm9yU3Ryb2tlV2lkdGgoKQotLy8gaXMgcmVmYWN0b3JlZCBhcyBhIHN0YXRpYyBwdWJsaWMgZnVu
Y3Rpb24uCi1zdGF0aWMgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5XaWR0aEZvclN0cm9rZVdpZHRo
KGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSwgZmxvYXQgc3Ryb2tl
VGhpY2tuZXNzKQotewotICAgIHJldHVybiBzdHJva2VTdHlsZSA9PSBEb3R0ZWRTdHJva2UgPyBz
dHJva2VUaGlja25lc3MgOiBzdGQ6Om1pbigzLjBmICogc3Ryb2tlVGhpY2tuZXNzLCBzdGQ6Om1h
eChzdHJva2VUaGlja25lc3MsIHN0cm9rZVdpZHRoIC8gMy4wZikpOwotfQotCi0vLyBGSVhNRTog
UmVwbGFjZSBvbmNlIEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQ
YXR0ZXJuQW5kU3Ryb2tlV2lkdGgoKQotLy8gaXMgcmVmYWN0b3JlZCBhcyBhIHN0YXRpYyBwdWJs
aWMgZnVuY3Rpb24uCi1zdGF0aWMgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0
ZXJuQW5kU3Ryb2tlV2lkdGgoZmxvYXQgcGF0dGVybldpZHRoLCBmbG9hdCBzdHJva2VXaWR0aCkK
LXsKLSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIGZ1bGwgZmlsbCBhbmQgZW5kcyB3aXRoIHRo
ZSBlbXB0eSBmaWxsLgotICAgIC8vIDEuIExldCdzIHN0YXJ0IHdpdGggdGhlIGVtcHR5IHBoYXNl
IGFmdGVyIHRoZSBjb3JuZXIuCi0gICAgLy8gMi4gQ2hlY2sgaWYgd2UndmUgZ290IG9kZCBvciBl
dmVuIG51bWJlciBvZiBwYXR0ZXJucyBhbmQgd2hldGhlciB0aGV5IGZ1bGx5IGNvdmVyIHRoZSBs
aW5lLgotICAgIC8vIDMuIEluIGNhc2Ugb2YgZXZlbiBudW1iZXIgb2YgcGF0dGVybnMgYW5kL29y
IHJlbWFpbmRlciwgbW92ZSB0aGUgcGF0dGVybiBzdGFydCBwb3NpdGlvbgotICAgIC8vIHNvIHRo
YXQgdGhlIHBhdHRlcm4gaXMgYmFsYW5jZWQgYmV0d2VlbiB0aGUgY29ybmVycy4KLSAgICBmbG9h
dCBwYXR0ZXJuT2Zmc2V0ID0gcGF0dGVybldpZHRoOwotICAgIGludCBudW1iZXJPZlNlZ21lbnRz
ID0gc3RkOjpmbG9vcihzdHJva2VXaWR0aCAvIHBhdHRlcm5XaWR0aCk7Ci0gICAgYm9vbCBvZGRO
dW1iZXJPZlNlZ21lbnRzID0gbnVtYmVyT2ZTZWdtZW50cyAlIDI7Ci0gICAgZmxvYXQgcmVtYWlu
ZGVyID0gc3Ryb2tlV2lkdGggLSAobnVtYmVyT2ZTZWdtZW50cyAqIHBhdHRlcm5XaWR0aCk7Ci0g
ICAgaWYgKG9kZE51bWJlck9mU2VnbWVudHMgJiYgcmVtYWluZGVyKQotICAgICAgICBwYXR0ZXJu
T2Zmc2V0IC09IHJlbWFpbmRlciAvIDIuMGY7Ci0gICAgZWxzZSBpZiAoIW9kZE51bWJlck9mU2Vn
bWVudHMpIHsKLSAgICAgICAgaWYgKHJlbWFpbmRlcikKLSAgICAgICAgICAgIHBhdHRlcm5PZmZz
ZXQgKz0gcGF0dGVybk9mZnNldCAtIChwYXR0ZXJuV2lkdGggKyByZW1haW5kZXIpIC8gMi4wZjsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgcGF0dGVybk9mZnNldCArPSBwYXR0ZXJuV2lkdGgg
LyAyLjBmOwotICAgIH0KLQotICAgIHJldHVybiBwYXR0ZXJuT2Zmc2V0OwotfQotCi0vLyBGSVhN
RTogUmVwbGFjZSBvbmNlIEdyYXBoaWNzQ29udGV4dDo6Y2VudGVyTGluZUFuZEN1dE9mZkNvcm5l
cnMoKQotLy8gaXMgcmVmYWN0b3JlZCBhcyBhIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24uCi1zdGF0
aWMgVmVjdG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNW
ZXJ0aWNhbExpbmUsIGZsb2F0IGNvcm5lcldpZHRoLCBGbG9hdFBvaW50IHBvaW50MSwgRmxvYXRQ
b2ludCBwb2ludDIpCi17Ci0gICAgLy8gQ2VudGVyIGxpbmUgYW5kIGN1dCBvZmYgY29ybmVycyBm
b3IgcGF0dGVybiBwYWludGluZy4KLSAgICBpZiAoaXNWZXJ0aWNhbExpbmUpIHsKLSAgICAgICAg
ZmxvYXQgY2VudGVyT2Zmc2V0ID0gKHBvaW50Mi54KCkgLSBwb2ludDEueCgpKSAvIDIuMGY7Ci0g
ICAgICAgIHBvaW50MS5tb3ZlKGNlbnRlck9mZnNldCwgY29ybmVyV2lkdGgpOwotICAgICAgICBw
b2ludDIubW92ZSgtY2VudGVyT2Zmc2V0LCAtY29ybmVyV2lkdGgpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGZsb2F0IGNlbnRlck9mZnNldCA9IChwb2ludDIueSgpIC0gcG9pbnQxLnkoKSkgLyAy
LjBmOwotICAgICAgICBwb2ludDEubW92ZShjb3JuZXJXaWR0aCwgY2VudGVyT2Zmc2V0KTsKLSAg
ICAgICAgcG9pbnQyLm1vdmUoLWNvcm5lcldpZHRoLCAtY2VudGVyT2Zmc2V0KTsKLSAgICB9Ci0K
LSAgICByZXR1cm4geyBwb2ludDEsIHBvaW50MiB9OwotfQotCi0KLW5hbWVzcGFjZSBTdGF0ZSB7
Ci0KLXZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0
Zm9ybUNvbnRleHQsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKLXsKLSAgICBwbGF0Zm9ybUNvbnRl
eHQuc2V0U3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgc2V0U3Ry
b2tlU3R5bGUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgU3Ryb2tl
U3R5bGUgc3Ryb2tlU3R5bGUpCi17Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNldFN0cm9rZVN0eWxl
KHN0cm9rZVN0eWxlKTsKLX0KLQotdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotCi0gICAgRDJEMV9CTEVORF9N
T0RFIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9NVUxUSVBMWTsKLSAgICBEMkQx
X0NPTVBPU0lURV9NT0RFIHRhcmdldENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RF
X0ZPUkNFX0RXT1JEOwotCi0gICAgaWYgKGJsZW5kTW9kZSAhPSBCbGVuZE1vZGU6Ok5vcm1hbCkg
ewotICAgICAgICBzd2l0Y2ggKGJsZW5kTW9kZSkgewotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6
TXVsdGlwbHk6Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVf
TVVMVElQTFk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OlNj
cmVlbjoKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9TQ1JF
RU47Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6Ok92ZXJsYXk6
Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfT1ZFUkxBWTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6RGFya2VuOgotICAg
ICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0RBUktFTjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6TGlnaHRlbjoKLSAgICAgICAg
ICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9MSUdIVEVOOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpDb2xvckRvZGdlOgotICAgICAgICAg
ICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0NPTE9SX0RPREdFOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpDb2xvckJ1cm46Ci0gICAgICAg
ICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfQ09MT1JfQlVSTjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6SGFyZExpZ2h0OgotICAgICAg
ICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0hBUkRfTElHSFQ7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OlNvZnRMaWdodDoKLSAgICAg
ICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9TT0ZUX0xJR0hUOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpEaWZmZXJlbmNlOgotICAg
ICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0RJRkZFUkVOQ0U7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OkV4Y2x1c2lvbjoKLSAg
ICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9FWENMVVNJT047Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6Okh1ZToKLSAgICAgICAg
ICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9IVUU7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OlNhdHVyYXRpb246Ci0gICAgICAgICAgICB0
YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfU0FUVVJBVElPTjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6Q29sb3I6Ci0gICAgICAgICAgICB0YXJn
ZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfQ09MT1I7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBCbGVuZE1vZGU6Okx1bWlub3NpdHk6Ci0gICAgICAgICAgICB0YXJnZXRC
bGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfTFVNSU5PU0lUWTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6UGx1c0RhcmtlcjoKLSAgICAgICAgICAgIHRhcmdl
dEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9EQVJLRVJfQ09MT1I7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OlBsdXNMaWdodGVyOgotICAgICAgICAgICAg
dGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0xJR0hURVJfQ09MT1I7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3dpdGNoIChjb21wb3NpdGVPcGVyYXRpb24pIHsK
LSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6Q2xlYXI6Ci0gICAgICAgICAgICAvLyBG
SVhNRTogdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0NMRUFSOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHk6Ci0gICAgICAg
ICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVfTU9ERV9TT1VSQ0VfQ09Q
WTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpT
b3VyY2VPdmVyOgotICAgICAgICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9T
SVRFX01PREVfU09VUkNFX09WRVI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW46Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVN
b2RlID0gRDJEMV9DT01QT1NJVEVfTU9ERV9TT1VSQ0VfSU47Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3V0OgotICAgICAgICAgICAg
dGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfU09VUkNFX09VVDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VB
dG9wOgotICAgICAgICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01P
REVfU09VUkNFX0FUT1A7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3Np
dGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyOgotICAgICAgICAgICAgdGFyZ2V0Q29tcG9zaXRl
TW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfREVTVElOQVRJT05fT1ZFUjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbkluOgot
ICAgICAgICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfREVT
VElOQVRJT05fSU47Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVP
cGVyYXRvcjo6RGVzdGluYXRpb25PdXQ6Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2Rl
ID0gRDJEMV9DT01QT1NJVEVfTU9ERV9ERVNUSU5BVElPTl9PVVQ7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25BdG9wOgotICAg
ICAgICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfREVTVElO
QVRJT05fQVRPUDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9w
ZXJhdG9yOjpYT1I6Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01Q
T1NJVEVfTU9ERV9YT1I7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3Np
dGVPcGVyYXRvcjo6UGx1c0RhcmtlcjoKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQy
RDFfQkxFTkRfTU9ERV9EQVJLRU47Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXI6Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1v
ZGUgPSBEMkQxX0JMRU5EX01PREVfTElHSFRFTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpEaWZmZXJlbmNlOgotICAgICAgICAgICAgdGFyZ2V0
QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0RJRkZFUkVOQ0U7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRCbGVuZEFuZENv
bXBvc2l0ZU1vZGUodGFyZ2V0QmxlbmRNb2RlLCB0YXJnZXRDb21wb3NpdGVNb2RlKTsKLX0KLQot
dm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3Jt
Q29udGV4dCwgYm9vbCBlbmFibGUpCi17Ci0gICAgYXV0byBhbnRpYWxpYXNNb2RlID0gZW5hYmxl
ID8gRDJEMV9BTlRJQUxJQVNfTU9ERV9QRVJfUFJJTUlUSVZFIDogRDJEMV9BTlRJQUxJQVNfTU9E
RV9BTElBU0VEOwotICAgIHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+U2V0QW50aWFs
aWFzTW9kZShhbnRpYWxpYXNNb2RlKTsKLX0KLQotdm9pZCBzZXRDVE0oUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pCi17Ci0gICAgQVNTRVJUKHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0gICAg
cGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5TZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsK
LQotICAgIGlmIChhdXRvKiBncmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxhdGZvcm1Db250ZXh0
LmdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0UHJpdmF0
ZS0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBnZXRDVE0oUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkKLXsKLSAgICBBU1NFUlQocGxhdGZv
cm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLSAgICBEMkQxX01BVFJJWF8zWDJfRiBjdXJyZW50
VHJhbnNmb3JtOwotICAgIHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+R2V0VHJhbnNm
b3JtKCZjdXJyZW50VHJhbnNmb3JtKTsKLSAgICByZXR1cm4gY3VycmVudFRyYW5zZm9ybTsKLX0K
LQotSW50UmVjdCBnZXRDbGlwQm91bmRzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQpCi17Ci0gICAgRDJEMV9TSVpFX0YgY2xpcFNpemU7Ci0gICAgaWYgKGF1dG8gY2xp
cExheWVyID0gcGxhdGZvcm1Db250ZXh0LmNsaXBMYXllcigpKQotICAgICAgICBjbGlwU2l6ZSA9
IGNsaXBMYXllci0+R2V0U2l6ZSgpOwotICAgIGVsc2UKLSAgICAgICAgY2xpcFNpemUgPSBwbGF0
Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkdldFNpemUoKTsKLQotICAgIEZsb2F0UmVjdCBj
bGlwQm91bmRzKEludFBvaW50KCksIGNsaXBTaXplKTsKLQotICAgIHJldHVybiBlbmNsb3NpbmdJ
bnRSZWN0KGNsaXBCb3VuZHMpOwotfQotCi1GbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLQotICAgIHJldHVybiByZWN0OwotfQot
Ci1ib29sIGlzQWNjZWxlcmF0ZWRDb250ZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0
Zm9ybUNvbnRleHQpCi17Ci0gICAgYXV0byByZW5kZXJQcm9wZXJ0aWVzID0gRDJEMTo6UmVuZGVy
VGFyZ2V0UHJvcGVydGllcygpOwotICAgIHJlbmRlclByb3BlcnRpZXMudHlwZSA9IEQyRDFfUkVO
REVSX1RBUkdFVF9UWVBFX0hBUkRXQVJFOwotICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQucmVu
ZGVyVGFyZ2V0KCktPklzU3VwcG9ydGVkKCZyZW5kZXJQcm9wZXJ0aWVzKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgU3RhdGUKLQotRmlsbFNvdXJjZTo6RmlsbFNvdXJjZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICA6
IGdsb2JhbEFscGhhKHN0YXRlLmFscGhhKQotICAgICwgY29sb3Ioc3RhdGUuZmlsbENvbG9yKQot
ICAgICwgZmlsbFJ1bGUoc3RhdGUuZmlsbFJ1bGUpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQuaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwotICAgIGF1dG8mIHBsYXRmb3JtQ29udGV4dCA9ICpjb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgaWYgKHN0YXRlLmZpbGxQYXR0ZXJuKSB7Ci0gICAg
ICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNOyAvLyBGSVhNRTogVGhpcyBpc24ndCBy
ZWFsbHkgbmVlZGVkIG9uIFdpbmRvd3MKLSAgICAgICAgYnJ1c2ggPSBzdGF0ZS5maWxsUGF0dGVy
bi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnRleHQsIHN0YXRlLmFscGhhLCB1c2VyVG9CYXNl
Q1RNKTsKLSAgICB9IGVsc2UgaWYgKHN0YXRlLmZpbGxHcmFkaWVudCAmJiAhc3RhdGUuZmlsbEdy
YWRpZW50LT5zdG9wcygpLmlzRW1wdHkoKSkKLSAgICAgICAgYnJ1c2ggPSBzdGF0ZS5maWxsR3Jh
ZGllbnQtPmNyZWF0ZUJydXNoKHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBicnVzaCA9IHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihjb2xv
cik7Ci19Ci0KLVN0cm9rZVNvdXJjZTo6U3Ryb2tlU291cmNlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgIDogZ2xv
YmFsQWxwaGEoc3RhdGUuYWxwaGEpCi0gICAgLCB0aGlja25lc3Moc3RhdGUuc3Ryb2tlVGhpY2tu
ZXNzKQotICAgICwgY29sb3Ioc3RhdGUuc3Ryb2tlQ29sb3IpCi17Ci0gICAgQVNTRVJUKGNvbnRl
eHQuaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIGF1dG8mIHBsYXRmb3JtQ29udGV4dCA9ICpj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgaWYgKHN0YXRlLnN0cm9rZVBhdHRlcm4p
IHsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBUaGlz
IGlzbid0IHJlYWxseSBuZWVkZWQgb24gV2luZG93cwotICAgICAgICBicnVzaCA9IHN0YXRlLnN0
cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb250ZXh0LCBzdGF0ZS5hbHBoYSwg
dXNlclRvQmFzZUNUTSk7Ci0gICAgfSBlbHNlIGlmIChzdGF0ZS5zdHJva2VHcmFkaWVudCkKLSAg
ICAgICAgYnJ1c2ggPSBzdGF0ZS5zdHJva2VHcmFkaWVudC0+Y3JlYXRlQnJ1c2gocGxhdGZvcm1D
b250ZXh0LnJlbmRlclRhcmdldCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGJydXNoID0gcGxhdGZv
cm1Db250ZXh0LmJydXNoV2l0aENvbG9yKGNvbG9yKTsKLX0KLQotU2hhZG93U3RhdGU6OlNoYWRv
d1N0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKLSAgICA6IG9mZnNldChz
dGF0ZS5zaGFkb3dPZmZzZXQpCi0gICAgLCBibHVyKHN0YXRlLnNoYWRvd0JsdXIpCi0gICAgLCBj
b2xvcihzdGF0ZS5zaGFkb3dDb2xvcikKLSAgICAsIGlnbm9yZVRyYW5zZm9ybXMoc3RhdGUuc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMpCi0gICAgLCBnbG9iYWxBbHBoYShzdGF0ZS5hbHBoYSkKLSAg
ICAsIGdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yKHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yKQotewot
fQotCi1ib29sIFNoYWRvd1N0YXRlOjppc1Zpc2libGUoKSBjb25zdAotewotICAgIHJldHVybiBj
b2xvci5pc1Zpc2libGUoKSAmJiAob2Zmc2V0LndpZHRoKCkgfHwgb2Zmc2V0LmhlaWdodCgpIHx8
IGJsdXIpOwotfQotCi1ib29sIFNoYWRvd1N0YXRlOjppc1JlcXVpcmVkKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpIGNvbnN0Ci17Ci0gICAgLy8gV2UgY2FuJ3QgYXZv
aWQgU2hhZG93Qmx1ciBpZiB0aGUgc2hhZG93IGhhcyBibHVyLgotICAgIGlmIChjb2xvci5pc1Zp
c2libGUoKSAmJiBibHVyKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFdlIGNhbiBh
dm9pZCBTaGFkb3dCbHVyIGFuZCBvcHRpbWl6ZSwgc2luY2Ugd2UncmUgbm90IGRyYXdpbmcgb24g
YQotICAgIC8vIGNhbnZhcyBhbmQgYm94IHNoYWRvd3MgYXJlIGFmZmVjdGVkIGJ5IHRoZSB0cmFu
c2Zvcm1hdGlvbiBtYXRyaXguCi0gICAgaWYgKCFpZ25vcmVUcmFuc2Zvcm1zKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBXZSBjYW4gYXZvaWQgU2hhZG93Qmx1ciwgc2luY2UgdGhl
cmUgYXJlIG5vIHRyYW5zZm9ybWF0aW9ucyB0byBhcHBseSB0byB0aGUgY2FudmFzLgotICAgIGlm
IChTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCkuaXNJZGVudGl0eSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBPdGhlcndpc2UsIG5vIGNoYW5jZSBhdm9pZGluZyBTaGFk
b3dCbHVyLgotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIHNldExpbmVDYXAoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgTGluZUNhcCBsaW5lQ2FwKQotewotICAg
IEQyRDFfQ0FQX1NUWUxFIGNhcFN0eWxlID0gRDJEMV9DQVBfU1RZTEVfRkxBVDsKLSAgICBzd2l0
Y2ggKGxpbmVDYXApIHsKLSAgICBjYXNlIExpbmVDYXA6OlJvdW5kOgotICAgICAgICBjYXBTdHls
ZSA9IEQyRDFfQ0FQX1NUWUxFX1JPVU5EOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExpbmVD
YXA6OlNxdWFyZToKLSAgICAgICAgY2FwU3R5bGUgPSBEMkQxX0NBUF9TVFlMRV9TUVVBUkU7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUNhcDo6QnV0dDoKLSAgICBkZWZhdWx0OgotICAg
ICAgICBjYXBTdHlsZSA9IEQyRDFfQ0FQX1NUWUxFX0ZMQVQ7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRMaW5lQ2FwKGNhcFN0eWxlKTsKLX0KLQotdm9p
ZCBzZXRMaW5lRGFzaChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBj
b25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBwbGF0Zm9y
bUNvbnRleHQuc2V0RGFzaGVzKGRhc2hlcyk7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNldERhc2hP
ZmZzZXQoZGFzaE9mZnNldCk7Ci19Ci0KLXZvaWQgc2V0TGluZUpvaW4oUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgRDJE
MV9MSU5FX0pPSU4gam9pblN0eWxlID0gRDJEMV9MSU5FX0pPSU5fTUlURVI7Ci0gICAgc3dpdGNo
IChsaW5lSm9pbikgewotICAgIGNhc2UgTGluZUpvaW46OlJvdW5kOgotICAgICAgICBqb2luU3R5
bGUgPSBEMkQxX0xJTkVfSk9JTl9ST1VORDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5l
Sm9pbjo6QmV2ZWw6Ci0gICAgICAgIGpvaW5TdHlsZSA9IEQyRDFfTElORV9KT0lOX0JFVkVMOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIExpbmVKb2luOjpNaXRlcjoKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBqb2luU3R5bGUgPSBEMkQxX0xJTkVfSk9JTl9NSVRFUjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldExpbmVKb2luKGpvaW5TdHlsZSk7Ci19
Ci0KLXZvaWQgc2V0TWl0ZXJMaW1pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1D
b250ZXh0LCBmbG9hdCBtaXRlckxpbWl0KQotewotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRNaXRl
ckxpbWl0KG1pdGVyTGltaXQpOwotfQotCi12b2lkIGZpbGxSZWN0KFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmls
bFNvdXJjZSYgZmlsbFNvdXJjZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewot
ICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAg
IHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBkcmF3V2l0aFNoYWRv
dyhwbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHNoYWRvd1N0YXRlLCBbJnBsYXRmb3JtQ29udGV4dCwg
cmVjdCwgJmZpbGxTb3VyY2VdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAg
ICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7Ci0gICAgICAgIHJlbmRlclRh
cmdldC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgZmlsbFNvdXJjZS5icnVzaC5nZXQoKSk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgZmlsbFJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRm
b3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIGNv
bnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0
Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFn
cygxLCBfX0xJTkVfXyk7Ci0gICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCByZWN0
LCBzaGFkb3dTdGF0ZSwgWyZwbGF0Zm9ybUNvbnRleHQsIGNvbG9yLCByZWN0XShJRDJEMVJlbmRl
clRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJl
Y3QgPSByZWN0OwotICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3Qs
IHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihjb2xvcikuZ2V0KCkpOwotICAgIH0pOwot
fQotCi12b2lkIGZpbGxSb3VuZGVkUmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZv
cm1Db250ZXh0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBhdXRvIGNvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQu
c2V0VGFncygxLCBfX0xJTkVfXyk7Ci0KLSAgICBjb25zdCBGbG9hdFJlY3QmIHIgPSByZWN0LnJl
Y3QoKTsKLSAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWkgPSByZWN0LnJh
ZGlpKCk7Ci0gICAgYm9vbCBlcXVhbFdpZHRocyA9IChyYWRpaS50b3BMZWZ0KCkud2lkdGgoKSA9
PSByYWRpaS50b3BSaWdodCgpLndpZHRoKCkgJiYgcmFkaWkudG9wUmlnaHQoKS53aWR0aCgpID09
IHJhZGlpLmJvdHRvbUxlZnQoKS53aWR0aCgpICYmIHJhZGlpLmJvdHRvbUxlZnQoKS53aWR0aCgp
ID09IHJhZGlpLmJvdHRvbVJpZ2h0KCkud2lkdGgoKSk7Ci0gICAgYm9vbCBlcXVhbEhlaWdodHMg
PSAocmFkaWkudG9wTGVmdCgpLmhlaWdodCgpID09IHJhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQo
KSAmJiByYWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCkgPT0gcmFkaWkudG9wUmlnaHQoKS5oZWln
aHQoKSAmJiByYWRpaS50b3BSaWdodCgpLmhlaWdodCgpID09IHJhZGlpLmJvdHRvbVJpZ2h0KCku
aGVpZ2h0KCkpOwotICAgIGJvb2wgaGFzQ3VzdG9tRmlsbCA9IGZhbHNlOyAvLyBGSVhNRTogV2h5
IGlzbid0IGEgRmlsbFNvdXJjZSBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbj8KLSAgICBpZiAoIWhh
c0N1c3RvbUZpbGwgJiYgZXF1YWxXaWR0aHMgJiYgZXF1YWxIZWlnaHRzICYmIHJhZGlpLnRvcExl
ZnQoKS53aWR0aCgpICogMiA9PSByLndpZHRoKCkgJiYgcmFkaWkudG9wTGVmdCgpLmhlaWdodCgp
ICogMiA9PSByLmhlaWdodCgpKSB7Ci0gICAgICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29u
dGV4dCwgciwgc2hhZG93U3RhdGUsIFsmcGxhdGZvcm1Db250ZXh0LCBjb2xvciwgcmVjdCwgcmFk
aWksIHJdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgICAgIGF1
dG8gcm91bmRlZFJlY3QgPSBEMkQxOjpSb3VuZGVkUmVjdChyLCByYWRpaS50b3BMZWZ0KCkud2lk
dGgoKSwgcmFkaWkudG9wTGVmdCgpLmhlaWdodCgpKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdl
dC0+RmlsbFJvdW5kZWRSZWN0YW5nbGUoJnJvdW5kZWRSZWN0LCBwbGF0Zm9ybUNvbnRleHQuYnJ1
c2hXaXRoQ29sb3IoY29sb3IpLmdldCgpKTsKLSAgICAgICAgfSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgUGF0aCBwYXRoOwotICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwotICAg
ICAgICBmaWxsUGF0aChwbGF0Zm9ybUNvbnRleHQsIHBhdGgsIGNvbG9yLCBzaGFkb3dTdGF0ZSk7
Ci0gICAgfQotfQotCi12b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBGaWxsU291cmNlJiBmaWxs
U291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCi17Ci0gICAgYXV0byBjb250
ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0gICAgcGxhdGZvcm1Db250
ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwotCi0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRk
UmVjdChyZWN0KTsKLQotICAgIGlmICghcm91bmRlZEhvbGVSZWN0LnJhZGlpKCkuaXNaZXJvKCkp
Ci0gICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3Qocm91bmRlZEhvbGVSZWN0KTsKLSAgICBlbHNl
Ci0gICAgICAgIHBhdGguYWRkUmVjdChyb3VuZGVkSG9sZVJlY3QucmVjdCgpKTsKLQotICAgIEZp
bGxTb3VyY2UgZmlsbFdpdGhIb2xlU291cmNlID0gZmlsbFNvdXJjZTsKLSAgICBmaWxsV2l0aEhv
bGVTb3VyY2UuZmlsbFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZDsKLQotICAgIGZpbGxQYXRoKHBs
YXRmb3JtQ29udGV4dCwgcGF0aCwgZmlsbFdpdGhIb2xlU291cmNlLCBzaGFkb3dTdGF0ZSk7Ci19
Ci0KLXZvaWQgZmlsbFJlY3RXaXRoR3JhZGllbnQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBs
YXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBJRDJEMUJydXNoKiBncmFkaWVu
dCkKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgZHJh
d1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBbJnBsYXRmb3JtQ29udGV4dCwgcmVjdCwg
JmdyYWRpZW50XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIGNv
bnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwotICAgICAgICByZW5kZXJUYXJnZXQtPkZp
bGxSZWN0YW5nbGUoJmQyZFJlY3QsIGdyYWRpZW50KTsKLSAgICB9KTsKLX0KLQotdm9pZCBmaWxs
UGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBQYXRo
JiBwYXRoLCBjb25zdCBGaWxsU291cmNlJiBmaWxsU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYg
c2hhZG93U3RhdGUpCi17Ci0gICAgcGF0aC5jbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklH
VVJFX0VORF9PUEVOKTsKLQotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5k
ZXJUYXJnZXQoKTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsK
LQotICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+IHBhdGhUb0ZpbGw7Ci0gICAgcGF0aC5j
cmVhdGVHZW9tZXRyeVdpdGhGaWxsTW9kZShmaWxsU291cmNlLmZpbGxSdWxlLCBwYXRoVG9GaWxs
KTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBGdW5j
dGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+IGRyYXdGdW5jdGlvbiA9IFsmcGxhdGZvcm1D
b250ZXh0LCAmcGF0aFRvRmlsbCwgJmZpbGxTb3VyY2VdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5k
ZXJUYXJnZXQpIHsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsR2VvbWV0cnkocGF0aFRvRmls
bC5nZXQoKSwgZmlsbFNvdXJjZS5icnVzaC5nZXQoKSk7Ci0gICAgfTsKLQotICAgIGlmIChzaGFk
b3dTdGF0ZS5pc1Zpc2libGUoKSkgewotICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0g
cGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7Ci0gICAgICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3Jt
Q29udGV4dCwgYm91bmRpbmdSZWN0LCBzaGFkb3dTdGF0ZSwgV1RGTW92ZShkcmF3RnVuY3Rpb24p
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0
LCBXVEZNb3ZlKGRyYXdGdW5jdGlvbikpOwotfQotCi12b2lkIGZpbGxQYXRoKFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IENv
bG9yJiBjb2xvciwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAgIGF1dG8g
Y29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIHBsYXRmb3Jt
Q29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLQotICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5
R3JvdXA+IHBhdGhUb0ZpbGw7Ci0gICAgcGF0aC5jcmVhdGVHZW9tZXRyeVdpdGhGaWxsTW9kZShX
aW5kUnVsZTo6RXZlbk9kZCwgcGF0aFRvRmlsbCk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0
VGFncygxLCBfX0xJTkVfXyk7Ci0KLSAgICBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0
Kik+IGRyYXdGdW5jdGlvbiA9IFsmcGxhdGZvcm1Db250ZXh0LCAmcGF0aFRvRmlsbCwgY29sb3Jd
KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgcmVuZGVyVGFyZ2V0
LT5GaWxsR2VvbWV0cnkocGF0aFRvRmlsbC5nZXQoKSwgcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0
aENvbG9yKGNvbG9yKS5nZXQoKSk7Ci0gICAgfTsKLQotICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zp
c2libGUoKSkgewotICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcGF0aC5mYXN0Qm91
bmRpbmdSZWN0KCk7Ci0gICAgICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgYm91
bmRpbmdSZWN0LCBzaGFkb3dTdGF0ZSwgV1RGTW92ZShkcmF3RnVuY3Rpb24pKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBXVEZNb3ZlKGRy
YXdGdW5jdGlvbikpOwotfQotCi12b2lkIHN0cm9rZVJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lk
dGgsIGNvbnN0IFN0cm9rZVNvdXJjZSYgc3Ryb2tlU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYg
c2hhZG93U3RhdGUpCi17Ci0gICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCByZWN0
LCBzaGFkb3dTdGF0ZSwgWyZwbGF0Zm9ybUNvbnRleHQsICZzdHJva2VTb3VyY2UsIHJlY3QsIGxp
bmVXaWR0aF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICBwbGF0
Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgICAgIGNvbnN0IEQyRDFfUkVD
VF9GIGQyZFJlY3QgPSByZWN0OwotICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdSZWN0YW5nbGUo
JmQyZFJlY3QsIHN0cm9rZVNvdXJjZS5icnVzaC5nZXQoKSwgbGluZVdpZHRoLCBwbGF0Zm9ybUNv
bnRleHQuc3Ryb2tlU3R5bGUoKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgc3Ryb2tlUGF0aChQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBQYXRoJiBwYXRoLCBj
b25zdCBTdHJva2VTb3VyY2UmIHN0cm9rZVNvdXJjZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRv
d1N0YXRlKQotewotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJn
ZXQoKTsKLSAgICAKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0K
LSAgICBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+IGRyYXdGdW5jdGlvbiA9IFsm
cGxhdGZvcm1Db250ZXh0LCAmcGF0aCwgJnN0cm9rZVNvdXJjZV0oSUQyRDFSZW5kZXJUYXJnZXQq
IHJlbmRlclRhcmdldCkgewotICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdHZW9tZXRyeShwYXRo
LnBsYXRmb3JtUGF0aCgpLCBzdHJva2VTb3VyY2UuYnJ1c2guZ2V0KCksIHN0cm9rZVNvdXJjZS50
aGlja25lc3MsIHBsYXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZSgpKTsKLSAgICB9OwotCi0gICAg
aWYgKHNoYWRvd1N0YXRlLmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIGF1dG8gYm91bmRpbmdSZWN0
ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0Rm9yU3Ryb2tlKHBsYXRmb3JtQ29udGV4dCk7Ci0gICAg
ICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgYm91bmRpbmdSZWN0LCBzaGFkb3dT
dGF0ZSwgV1RGTW92ZShkcmF3RnVuY3Rpb24pKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZHJhd1dp
dGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBXVEZNb3ZlKGRyYXdGdW5jdGlvbikpOwotfQot
Ci12b2lkIGRyYXdQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQs
IGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IFN0cm9rZVNvdXJjZSYgc3Ryb2tlU291cmNlLCBjb25z
dCBTaGFkb3dTdGF0ZSYpCi17Ci0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJl
bmRlclRhcmdldCgpOwotCi0gICAgcGF0aC5jbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklH
VVJFX0VORF9PUEVOKTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9f
KTsKLQotICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9ybUNv
bnRleHQsICZzdHJva2VTb3VyY2UsICZwYXRoXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFy
Z2V0KSB7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RHJhd0dlb21ldHJ5KHBhdGgucGxhdGZvcm1Q
YXRoKCksIHN0cm9rZVNvdXJjZS5icnVzaC5nZXQoKSwgc3Ryb2tlU291cmNlLnRoaWNrbmVzcywg
cGxhdGZvcm1Db250ZXh0LnN0cm9rZVN0eWxlKCkpOwotICAgIH0pOwotCi0gICAgZmx1c2gocGxh
dGZvcm1Db250ZXh0KTsKLX0KLQotc3RhdGljIHZvaWQgZHJhd1dpdGhTaGFkb3dIZWxwZXIoSUQy
RDFSZW5kZXJUYXJnZXQqIGNvbnRleHQsIElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBU
YXJnZXQsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdSZWN0LCBjb25zdCBDb2xvciYgc2hhZG93
Q29sb3IsIGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dCbHVyKQot
ewotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY3VycmVudENhbnZhcyA9IERpcmVjdDJEOjpjcmVh
dGVCaXRtYXBDb3B5RnJvbUNvbnRleHQoYml0bWFwVGFyZ2V0KTsKLSAgICBpZiAoIWN1cnJlbnRD
YW52YXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+
IHNoYWRvd0RldmljZUNvbnRleHQ7Ci0gICAgSFJFU1VMVCBociA9IGJpdG1hcFRhcmdldC0+UXVl
cnlJbnRlcmZhY2UoJnNoYWRvd0RldmljZUNvbnRleHQpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNV
Q0NFRURFRChocikpOwotCi0gICAgLy8gQ3JlYXRlIHRoZSBzaGFkb3cgZWZmZWN0Ci0gICAgQ09N
UHRyPElEMkQxRWZmZWN0PiBzaGFkb3dFZmZlY3Q7Ci0gICAgaHIgPSBzaGFkb3dEZXZpY2VDb250
ZXh0LT5DcmVhdGVFZmZlY3QoQ0xTSURfRDJEMVNoYWRvdywgJnNoYWRvd0VmZmVjdCk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBzaGFkb3dFZmZlY3QtPlNldElu
cHV0KDAsIGN1cnJlbnRDYW52YXMuZ2V0KCkpOwotICAgIHNoYWRvd0VmZmVjdC0+U2V0VmFsdWUo
RDJEMV9TSEFET1dfUFJPUF9DT0xPUiwgc3RhdGljX2Nhc3Q8RDJEMV9WRUNUT1JfNEY+KHNoYWRv
d0NvbG9yKSk7Ci0KLSAgICBmbG9hdCBibHVyRGV2aWF0aW9uID0gMC41ICogc2hhZG93Qmx1cjsK
LSAgICBzaGFkb3dFZmZlY3QtPlNldFZhbHVlKEQyRDFfU0hBRE9XX1BST1BfQkxVUl9TVEFOREFS
RF9ERVZJQVRJT04sIGJsdXJEZXZpYXRpb24pOwotCi0gICAgQ09NUHRyPElEMkQxRWZmZWN0PiBz
aGFkb3dUcmFuc2Zvcm1FZmZlY3Q7Ci0gICAgaHIgPSBzaGFkb3dEZXZpY2VDb250ZXh0LT5DcmVh
dGVFZmZlY3QoQ0xTSURfRDJEMTJEQWZmaW5lVHJhbnNmb3JtLCAmc2hhZG93VHJhbnNmb3JtRWZm
ZWN0KTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIHNoYWRvd1Ry
YW5zZm9ybUVmZmVjdC0+U2V0SW5wdXRFZmZlY3QoMCwgc2hhZG93RWZmZWN0LmdldCgpKTsKLQot
ICAgIC8vIE11c3QgZmxpcCB0aGUgYXhpcyBmb3IgdGhlIHNoYWRvdyBvZmZzZXQsIHNpbmNlIERp
cmVjdDJEJ3MgWSBheGlzIGlzIGludmVydGVkLgotICAgIGF1dG8gc2hhZG93VHJhbnNsYXRpb24g
PSBEMkQxOjpNYXRyaXgzeDJGOjpUcmFuc2xhdGlvbihzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNo
YWRvd09mZnNldC5oZWlnaHQoKSk7Ci0gICAgc2hhZG93VHJhbnNmb3JtRWZmZWN0LT5TZXRWYWx1
ZShEMkQxXzJEQUZGSU5FVFJBTlNGT1JNX1BST1BfVFJBTlNGT1JNX01BVFJJWCwgc2hhZG93VHJh
bnNsYXRpb24pOwotCi0gICAgQ09NUHRyPElEMkQxRWZmZWN0PiBjb21wb3NpdG9yOwotICAgIGhy
ID0gc2hhZG93RGV2aWNlQ29udGV4dC0+Q3JlYXRlRWZmZWN0KENMU0lEX0QyRDFDb21wb3NpdGUs
ICZjb21wb3NpdG9yKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAg
IGNvbXBvc2l0b3ItPlNldElucHV0RWZmZWN0KDAsIHNoYWRvd1RyYW5zZm9ybUVmZmVjdC5nZXQo
KSk7Ci0gICAgY29tcG9zaXRvci0+U2V0SW5wdXQoMSwgY3VycmVudENhbnZhcy5nZXQoKSk7Ci0K
LSAgICBzaGFkb3dEZXZpY2VDb250ZXh0LT5CZWdpbkRyYXcoKTsKLSAgICBzaGFkb3dEZXZpY2VD
b250ZXh0LT5DbGVhcihEMkQxOjpDb2xvckYoMCwgMCwgMCwgMCkpOwotICAgIHNoYWRvd0Rldmlj
ZUNvbnRleHQtPkRyYXdJbWFnZShjb21wb3NpdG9yLmdldCgpKTsKLSAgICBociA9IHNoYWRvd0Rl
dmljZUNvbnRleHQtPkVuZERyYXcoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotICAgIGhyID0gYml0bWFwVGFy
Z2V0LT5HZXRCaXRtYXAoJmJpdG1hcCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0KLSAgICBJbnRTaXplIHBpeGVsU2l6ZSA9IGNvbnRleHQtPkdldFBpeGVsU2l6ZSgpOwot
ICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY3JvcHBlZCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXAo
Yml0bWFwVGFyZ2V0LCBwaXhlbFNpemUpOwotICAgIGlmICghY3JvcHBlZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byBzY2FsZUZhY3RvciA9IGJpdG1hcFJlc29sdXRpb24oY29udGV4dCk7
Ci0KLSAgICBGbG9hdFJlY3Qgc2NhbGVkQm91bmRpbmdSZWN0KGJvdW5kaW5nUmVjdCk7Ci0gICAg
c2NhbGVkQm91bmRpbmdSZWN0LnNjYWxlKHNjYWxlRmFjdG9yLndpZHRoKCksIHNjYWxlRmFjdG9y
LmhlaWdodCgpKTsKLQotICAgIC8vIFRha2UgdGhlIG1hZ25pdHVkZSBvZiB0aGUgb2Zmc2V0LiBJ
ZiB0aGUgb3JpZ2luIHdhcyBvdXRzaWRlIHRoZSBkcmF3aW5nIGNvbnRleHQsIHdlIHN0cmV0Y2hl
ZCB0byBpbmNsdWRlIHRob3NlIHBvaW50cywKLSAgICAvLyBhbmQgc28gd2UgbmVlZCB0byBjcm9w
IHRoZW0gb3V0LiBJZiB0aGUgb3JpZ2luIHdhcyBpbnNpZGUsIHdlIHdhbnQgdG8gaG9ub3IgdGhl
IG9mZnNldC4KLSAgICBpbnQgeCA9IGNsYW1wVG88aW50PihzdGQ6OmFicyhzY2FsZWRCb3VuZGlu
Z1JlY3QueCgpKSk7Ci0gICAgaW50IHkgPSBjbGFtcFRvPGludD4oc3RkOjphYnMoc2NhbGVkQm91
bmRpbmdSZWN0LnkoKSkpOwotICAgIGludCB3aWR0aCA9IGNsYW1wVG88aW50PihzY2FsZWRCb3Vu
ZGluZ1JlY3Qud2lkdGgoKSk7Ci0gICAgaW50IGhlaWdodCA9IGNsYW1wVG88aW50PihzY2FsZWRC
b3VuZGluZ1JlY3QuaGVpZ2h0KCkpOwotCi0gICAgSW50UmVjdCBvdXRwdXRSZWN0KEludFBvaW50
KHgsIHkpLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKLSAgICBJbnRSZWN0IGRlc3RDb250ZXh0
UmVjdChJbnRQb2ludCgpLCBwaXhlbFNpemUpOwotICAgIGlmIChvdXRwdXRSZWN0LmludGVyc2Vj
dHMoZGVzdENvbnRleHRSZWN0KSkKLSAgICAgICAgb3V0cHV0UmVjdC5pbnRlcnNlY3QoZGVzdENv
bnRleHRSZWN0KTsKLQotICAgIEQyRDFfUkVDVF9VIGNyb3BSZWN0ID0gb3V0cHV0UmVjdDsKLSAg
ICBhdXRvIHRhcmdldFBvaW50ID0gRDJEMTo6UG9pbnQyVSgpOwotICAgIGNyb3BwZWQtPkNvcHlG
cm9tQml0bWFwKCZ0YXJnZXRQb2ludCwgYml0bWFwLmdldCgpLCAmY3JvcFJlY3QpOwotCi0gICAg
Y29udGV4dC0+RHJhd0JpdG1hcChjcm9wcGVkLmdldCgpKTsKLX0KLQotdm9pZCBkcmF3V2l0aFNo
YWRvdyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBGbG9hdFJlY3Qg
Ym91bmRpbmdSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUsIEZ1bmN0aW9uPHZv
aWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4mJiBkcmF3Q29tbWFuZHMpCi17Ci0gICAgaWYgKCFzaGFk
b3dTdGF0ZS5pc1Zpc2libGUoKSkgewotICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9y
bUNvbnRleHQsIFdURk1vdmUoZHJhd0NvbW1hbmRzKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQubm90aWZ5UHJlRHJhd09ic2VydmVyKCk7Ci0KLSAgICBh
dXRvKiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0gICAgRmxv
YXRTaXplIHJlbmRlclRhcmdldFNpemUgPSBjb250ZXh0LT5HZXRTaXplKCk7Ci0gICAgY29uc3Qg
RmxvYXRSZWN0IGNvbnRleHRSZWN0KEZsb2F0UG9pbnQoKSwgcmVuZGVyVGFyZ2V0U2l6ZSk7Ci0g
ICAgRmxvYXRSZWN0IHdvcmtpbmdDb250ZXh0UmVjdChjb250ZXh0UmVjdCk7Ci0KLSAgICBpZiAo
Ym91bmRpbmdSZWN0LmlzSW5maW5pdGUoKSkKLSAgICAgICAgYm91bmRpbmdSZWN0ID0gd29ya2lu
Z0NvbnRleHRSZWN0OwotCi0gICAgaWYgKCFjb250ZXh0UmVjdC5jb250YWlucyhib3VuZGluZ1Jl
Y3QpKQotICAgICAgICB3b3JraW5nQ29udGV4dFJlY3QudW5pdGUoYm91bmRpbmdSZWN0KTsKLQot
ICAgIHdvcmtpbmdDb250ZXh0UmVjdC5leHBhbmQoc3RkOjphYnMoc2hhZG93U3RhdGUub2Zmc2V0
LndpZHRoKCkpICsgc2hhZG93U3RhdGUuYmx1ciwgc3RkOjphYnMoc2hhZG93U3RhdGUub2Zmc2V0
LmhlaWdodCgpKSArIHNoYWRvd1N0YXRlLmJsdXIpOwotCi0gICAgYXV0byBzY2FsZUZhY3RvciA9
IGJpdG1hcFJlc29sdXRpb24oY29udGV4dCk7Ci0KLSAgICB3b3JraW5nQ29udGV4dFJlY3Quc2Nh
bGUoc2NhbGVGYWN0b3IpOwotCi0gICAgSW50U2l6ZSBwaXhlbERpbWVuc2lvbnMoY2xhbXBUbzxp
bnQ+KHdvcmtpbmdDb250ZXh0UmVjdC53aWR0aCgpKSwgY2xhbXBUbzxpbnQ+KHdvcmtpbmdDb250
ZXh0UmVjdC5oZWlnaHQoKSkpOwotCi0gICAgLy8gUmVuZGVyIHRoZSBjdXJyZW50IGdlb21ldHJ5
IHRvIGEgYml0bWFwIGNvbnRleHQKLSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+
IGJpdG1hcFRhcmdldCA9IGNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShwaXhlbERpbWVu
c2lvbnMsIGNvbnRleHQpOwotCi0gICAgRDJEMV9NQVRSSVhfM1gyX0YgY3VycmVudFRyYW5zZm9y
bTsKLSAgICBiaXRtYXBUYXJnZXQtPkdldFRyYW5zZm9ybSgmY3VycmVudFRyYW5zZm9ybSk7Ci0K
LSAgICBpZiAoIWNvbnRleHRSZWN0LmNvbnRhaW5zKGJvdW5kaW5nUmVjdC5sb2NhdGlvbigpKSkg
ewotICAgICAgICBhdXRvIHRyYW5zbGF0aW9uID0gRDJEMTo6TWF0cml4M3gyRjo6VHJhbnNsYXRp
b24oLWJvdW5kaW5nUmVjdC5sb2NhdGlvbigpLngoKSwgLWJvdW5kaW5nUmVjdC5sb2NhdGlvbigp
LnkoKSk7Ci0gICAgICAgIGJpdG1hcFRhcmdldC0+U2V0VHJhbnNmb3JtKHRyYW5zbGF0aW9uICog
Y3VycmVudFRyYW5zZm9ybSk7Ci0gICAgfQotCi0gICAgYml0bWFwVGFyZ2V0LT5CZWdpbkRyYXco
KTsKLSAgICBkcmF3Q29tbWFuZHMoYml0bWFwVGFyZ2V0LmdldCgpKTsKLSAgICBIUkVTVUxUIGhy
ID0gYml0bWFwVGFyZ2V0LT5FbmREcmF3KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7Ci0KLSAgICBiaXRtYXBUYXJnZXQtPlNldFRyYW5zZm9ybShjdXJyZW50VHJhbnNmb3Jt
KTsKLQotICAgIGRyYXdXaXRoU2hhZG93SGVscGVyKGNvbnRleHQsIGJpdG1hcFRhcmdldC5nZXQo
KSwgYm91bmRpbmdSZWN0LCBzaGFkb3dTdGF0ZS5jb2xvciwgc2hhZG93U3RhdGUub2Zmc2V0LCBz
aGFkb3dTdGF0ZS5ibHVyKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQubm90aWZ5UG9zdERyYXdPYnNl
cnZlcigpOwotfQotCi12b2lkIGRyYXdXaXRob3V0U2hhZG93KFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJiBwbGF0Zm9ybUNvbnRleHQsIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4m
JiBkcmF3Q29tbWFuZHMpCi17Ci0gICAgcGxhdGZvcm1Db250ZXh0Lm5vdGlmeVByZURyYXdPYnNl
cnZlcigpOwotICAgIGRyYXdDb21tYW5kcyhwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkp
OwotICAgIHBsYXRmb3JtQ29udGV4dC5ub3RpZnlQb3N0RHJhd09ic2VydmVyKCk7Ci19Ci0KLXZv
aWQgY2xlYXJSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNv
bnRleHQsIFsmcGxhdGZvcm1Db250ZXh0LCByZWN0XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVy
VGFyZ2V0KSB7Ci0gICAgICAgIEZsb2F0UmVjdCByZW5kZXJUYXJnZXRSZWN0KEZsb2F0UG9pbnQo
KSwgcmVuZGVyVGFyZ2V0LT5HZXRTaXplKCkpOwotCi0gICAgICAgIEQyRDE6Ok1hdHJpeDN4MkYg
bWF0cml4OwotICAgICAgICByZW5kZXJUYXJnZXQtPkdldFRyYW5zZm9ybSgmbWF0cml4KTsKLQot
ICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtKG1hdHJpeCk7Ci0KLSAgICAgICAgRmxv
YXRSZWN0IHJlY3RUb0NsZWFyKHJlY3QpOwotICAgICAgICBpZiAoIXRyYW5zZm9ybS5wcmVzZXJ2
ZXNBeGlzQWxpZ25tZW50KCkpIHsKLSAgICAgICAgICAgIENPTVB0cjxJRDJEMVJlY3RhbmdsZUdl
b21ldHJ5PiByZWN0YW5nbGU7Ci0gICAgICAgICAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250
ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVJlY3RhbmdsZUdlb21ldHJ5KHJlY3RUb0NsZWFy
LCAmcmVjdGFuZ2xlKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OwotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsR2VvbWV0cnkocmVjdGFuZ2xlLmdldCgp
LCBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoRDJEMTo6Q29sb3JGKDAsIDAsIDAsIDAp
KS5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICByZWN0
VG9DbGVhciA9IHRyYW5zZm9ybS5tYXBSZWN0KHJlY3RUb0NsZWFyKTsKLQotICAgICAgICBpZiAo
cmVjdFRvQ2xlYXIuY29udGFpbnMocmVuZGVyVGFyZ2V0UmVjdCkpIHsKLSAgICAgICAgICAgIHBs
YXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICAgICAgICAgIHJlbmRlclRh
cmdldC0+Q2xlYXIoRDJEMTo6Q29sb3JGKDAsIDAsIDAsIDApKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElO
RV9fKTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5QdXNoQXhpc0FsaWduZWRDbGlwKHJlY3RUb0Ns
ZWFyLCBEMkQxX0FOVElBTElBU19NT0RFX1BFUl9QUklNSVRJVkUpOwotICAgICAgICByZW5kZXJU
YXJnZXQtPkNsZWFyKEQyRDE6OkNvbG9yRigwLCAwLCAwLCAwKSk7Ci0gICAgICAgIHJlbmRlclRh
cmdldC0+UG9wQXhpc0FsaWduZWRDbGlwKCk7Ci0gICAgfSk7Ci19Ci0KLQotdm9pZCBkcmF3R2x5
cGhzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZpbGxT
b3VyY2UmIGZpbGxTb3VyY2UsIGNvbnN0IFN0cm9rZVNvdXJjZSYgc3Ryb2tlU291cmNlLCBjb25z
dCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25z
dCBGb250JiBmb250LCBkb3VibGUgc3ludGhldGljQm9sZE9mZnNldCwgY29uc3QgVmVjdG9yPHVu
c2lnbmVkIHNob3J0PiYgZ2x5cGhzLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBob3Jpem9udGFsQWR2
YW5jZXMsIGNvbnN0IFZlY3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiYgZ2x5cGhPZmZzZXRzLCBm
bG9hdCB4T2Zmc2V0LCBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUsIGZsb2F0
IHN0cm9rZVRoaWNrbmVzcywgY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGNvbnN0IENv
bG9yJiBzaGFkb3dDb2xvcikKLXsKLSAgICBhdXRvIHJlbmRlclRhcmdldCA9IHBsYXRmb3JtQ29u
dGV4dC5yZW5kZXJUYXJnZXQoKTsKLSAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9y
bURhdGEgPSBmb250LnBsYXRmb3JtRGF0YSgpOwotCi0gICAgUGxhdGZvcm1Db250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKHBsYXRmb3JtQ29udGV4dCk7Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJf
RiBtYXRyaXg7Ci0gICAgcmVuZGVyVGFyZ2V0LT5HZXRUcmFuc2Zvcm0oJm1hdHJpeCk7Ci0KLSAg
ICAvKgotICAgIC8vIEZJWE1FOiBHZXQgU3ludGhldGljIE9ibGlxdWUgd29ya2luZwotICAgIGlm
IChwbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpKSB7Ci0gICAgICAgIHN0YXRpYyBmbG9h
dCBza2V3ID0gLXRhbmYoc3ludGhldGljT2JsaXF1ZUFuZ2xlKCkgKiBwaUZsb2F0IC8gMTgwLjBm
KTsKLSAgICAgICAgYXV0byBza2V3TWF0cml4ID0gRDJEMTo6TWF0cml4M3gyRjo6U2tldyhza2V3
LCAwKTsKLSAgICAgICAgY29udGV4dC0+U2V0VHJhbnNmb3JtKG1hdHJpeCAqIHNrZXdNYXRyaXgp
OwotICAgIH0KLSAgICAqLwotCi0gICAgUkVMRUFTRV9BU1NFUlQocGxhdGZvcm1EYXRhLmR3Rm9u
dCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChwbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpKTsKLQot
ICAgIERXUklURV9HTFlQSF9SVU4gZ2x5cGhSdW47Ci0gICAgZ2x5cGhSdW4uZm9udEZhY2UgPSBw
bGF0Zm9ybURhdGEuZHdGb250RmFjZSgpOwotICAgIGdseXBoUnVuLmZvbnRFbVNpemUgPSBwbGF0
Zm9ybURhdGEuc2l6ZSgpOwotICAgIGdseXBoUnVuLmdseXBoQ291bnQgPSBnbHlwaHMuc2l6ZSgp
OwotICAgIGdseXBoUnVuLmdseXBoSW5kaWNlcyA9IGdseXBocy5kYXRhKCk7Ci0gICAgZ2x5cGhS
dW4uZ2x5cGhBZHZhbmNlcyA9IGhvcml6b250YWxBZHZhbmNlcy5kYXRhKCk7Ci0gICAgZ2x5cGhS
dW4uZ2x5cGhPZmZzZXRzID0gbnVsbHB0cjsKLSAgICBnbHlwaFJ1bi5pc1NpZGV3YXlzID0gcGxh
dGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbDsKLSAg
ICBnbHlwaFJ1bi5iaWRpTGV2ZWwgPSAwOwotCi0gICAgLyoKLSAgICAvLyBGSVhNRSgpOiBHZXQg
U2hhZG93cyB3b3JraW5nCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBz
aGFkb3dCbHVyOwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgIGdyYXBoaWNzQ29udGV4dC5n
ZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7Ci0KLSAgICBi
b29sIGhhc1NpbXBsZVNoYWRvdyA9IGdyYXBoaWNzQ29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9
PSBUZXh0RHJhd2luZ01vZGU6OkZpbGwgJiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmICFzaGFk
b3dCbHVyICYmICghZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwg
Z3JhcGhpY3NDb250ZXh0LmdldENUTSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVk
KCkpOwotICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpIHsKLSAgICAgICAgLy8gUGFpbnQgc2ltcGxl
IHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBh
dm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgotICAgICAgICBncmFwaGljc0NvbnRl
eHQuY2xlYXJTaGFkb3coKTsKLSAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gZ3JhcGhpY3NDb250
ZXh0LmZpbGxDb2xvcigpOwotICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dD
b2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkp
OwotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53
aWR0aCgpOwotICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0
aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3du
IGlzIG5lZ2F0aXZlLgotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNo
YWRvd09mZnNldC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMoKSA/IC0xIDogMSk7Ci0KLSAgICAgICAgYXV0byBzaGFkb3dCcnVzaCA9IGdyYXBoaWNz
Q29udGV4dC5icnVzaFdpdGhDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAgICAgICBjb250ZXh0
LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCAm
Z2x5cGhSdW4sIHNoYWRvd0JydXNoKTsKLSAgICAgICAgaWYgKGZvbnQuc3ludGhldGljQm9sZE9m
ZnNldCgpKQotICAgICAgICAgICAgY29udGV4dC0+RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50MkYo
c2hhZG93VGV4dFggKyBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwgc2hhZG93VGV4dFkpLCAm
Z2x5cGhSdW4sIHNoYWRvd0JydXNoKTsKLSAgICB9Ci0gICAgKi8KLQotICAgIHJlbmRlclRhcmdl
dC0+RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50MkYocG9pbnQueCgpLCBwb2ludC55KCkpLCAmZ2x5
cGhSdW4sIGZpbGxTb3VyY2UuYnJ1c2guZ2V0KCkpOwotICAgIC8vIGlmIChmb250LnN5bnRoZXRp
Y0JvbGRPZmZzZXQoKSkKLSAgICAvLyAgICAgY29udGV4dC0+RHJhd0dseXBoUnVuKEQyRDE6OlBv
aW50MkYocG9pbnQueCgpICsgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSks
ICZnbHlwaFJ1biwgZ3JhcGhpY3NDb250ZXh0LnNvbGlkRmlsbEJydXNoKCkpOwotCi0gICAgLy8g
aWYgKGhhc1NpbXBsZVNoYWRvdykKLSAgICAvLyAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRv
dyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKLQotICAgIHN0YXRlU2F2
ZXIucmVzdG9yZSgpOwotICAgIHBsYXRmb3JtQ29udGV4dC5ub3RpZnlQb3N0RHJhd09ic2VydmVy
KCk7Ci19Ci0KLQotdm9pZCBkcmF3UGxhdGZvcm1JbWFnZShQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYgcGxhdGZvcm1Db250ZXh0LCBJV0lDQml0bWFwKiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBv
cmlnaW5hbEltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucywgZmxvYXQg
Z2xvYmFsQWxwaGEsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBhdXRv
IG5hdGl2ZUltYWdlU2l6ZSA9IGJpdG1hcFNpemUoaW1hZ2UpOwotICAgIENPTVB0cjxJRDJEMUJp
dG1hcD4gZGV2aWNlQml0bWFwOwotICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQucmVu
ZGVyVGFyZ2V0KCktPkNyZWF0ZUJpdG1hcEZyb21XaWNCaXRtYXAoaW1hZ2UsICZkZXZpY2VCaXRt
YXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byBpbWFnZVNpemUgPSBiaXRtYXBTaXplKGRldmljZUJpdG1hcC5nZXQoKSk7Ci0gICAgZHJhd1Bs
YXRmb3JtSW1hZ2UocGxhdGZvcm1Db250ZXh0LCBkZXZpY2VCaXRtYXAuZ2V0KCksIGltYWdlU2l6
ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMsIGdsb2JhbEFscGhhLCBzaGFkb3dTdGF0ZSk7
Ci19Ci0KLXZvaWQgZHJhd1BsYXRmb3JtSW1hZ2UoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBs
YXRmb3JtQ29udGV4dCwgSUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucywgZmxvYXQgZ2xvYmFsQWxwaGEs
IGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBhdXRvIGJpdG1hcFNpemUg
PSBpbWFnZS0+R2V0U2l6ZSgpOwotCi0gICAgZmxvYXQgY3VyckhlaWdodCA9IG9wdGlvbnMub3Jp
ZW50YXRpb24oKS51c2VzV2lkdGhBc0hlaWdodCgpID8gYml0bWFwU2l6ZS53aWR0aCA6IGJpdG1h
cFNpemUuaGVpZ2h0OwotICAgIGlmIChjdXJySGVpZ2h0IDw9IHNyY1JlY3QueSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFy
Z2V0KCk7Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiBjdG07Ci0gICAgY29udGV4dC0+R2V0VHJh
bnNmb3JtKCZjdG0pOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybShjdG0pOwotCi0g
ICAgUGxhdGZvcm1Db250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBsYXRmb3JtQ29udGV4dCk7
Ci0KLSAgICBib29sIHNob3VsZFVzZVN1YmltYWdlID0gZmFsc2U7Ci0KLSAgICAvLyBJZiB0aGUg
c291cmNlIHJlY3QgaXMgYSBzdWJwb3J0aW9uIG9mIHRoZSBpbWFnZSwgdGhlbiB3ZSBjb21wdXRl
IGFuIGluZmxhdGVkIGRlc3RpbmF0aW9uIHJlY3QgdGhhdCB3aWxsIGhvbGQgdGhlIGVudGlyZSBp
bWFnZQotICAgIC8vIGFuZCB0aGVuIHNldCBhIGNsaXAgdG8gdGhlIHBvcnRpb24gdGhhdCB3ZSB3
YW50IHRvIGRpc3BsYXkuCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkRGVzdFJlY3QgPSBkZXN0UmVj
dDsKLQotICAgIGlmIChzcmNSZWN0LnNpemUoKSAhPSBpbWFnZVNpemUpIHsKLSAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCBpbWFnZSBzY2FsaW5nCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGltYWdlIGlzIG9ubHkgcGFydGlhbGx5IGxvYWRlZCwg
dGhlbiBzaHJpbmsgdGhlIGRlc3RpbmF0aW9uIHJlY3QgdGhhdCB3ZSdyZSBkcmF3aW5nIGludG8g
YWNjb3JkaW5nbHkuCi0gICAgaWYgKCFzaG91bGRVc2VTdWJpbWFnZSAmJiBjdXJySGVpZ2h0IDwg
aW1hZ2VTaXplLmhlaWdodCgpKQotICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldEhlaWdodChh
ZGp1c3RlZERlc3RSZWN0LmhlaWdodCgpICogY3VyckhlaWdodCAvIGltYWdlU2l6ZS5oZWlnaHQo
KSk7Ci0KLSAgICBTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dCwg
b3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKLQotICAg
IC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKS4K
LSAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKGFkanVzdGVkRGVzdFJlY3QueCgpLCBhZGp1c3RlZERl
c3RSZWN0LnkoKSk7Ci0gICAgY29udGV4dC0+U2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0gICAg
YWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOwotCi0gICAgaWYgKG9w
dGlvbnMub3JpZW50YXRpb24oKSAhPSBJbWFnZU9yaWVudGF0aW9uOjpOb25lKSB7Ci0gICAgICAg
IGNvbmNhdENUTShwbGF0Zm9ybUNvbnRleHQsIG9wdGlvbnMub3JpZW50YXRpb24oKS50cmFuc2Zv
cm1Gcm9tRGVmYXVsdChhZGp1c3RlZERlc3RSZWN0LnNpemUoKSkpOwotICAgICAgICBpZiAob3B0
aW9ucy5vcmllbnRhdGlvbigpLnVzZXNXaWR0aEFzSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIC8v
IFRoZSBkZXN0aW5hdGlvbiByZWN0IHdpbGwgaGF2ZSBpdCdzIHdpZHRoIGFuZCBoZWlnaHQgYWxy
ZWFkeSByZXZlcnNlZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9mCi0gICAgICAgICAgICAvLyB0aGUg
aW1hZ2UsIGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3ZSBuZWVkIHRvIHJl
dmVyc2UgaXQgYmFjayBoZXJlLgotICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdCA9IEZsb2F0
UmVjdChhZGp1c3RlZERlc3RSZWN0LngoKSwgYWRqdXN0ZWREZXN0UmVjdC55KCksIGFkanVzdGVk
RGVzdFJlY3QuaGVpZ2h0KCksIGFkanVzdGVkRGVzdFJlY3Qud2lkdGgoKSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAg
ZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBhZGp1c3RlZERlc3RSZWN0LCBzaGFkb3dT
dGF0ZSwgW2ltYWdlLCBhZGp1c3RlZERlc3RSZWN0LCBnbG9iYWxBbHBoYSwgc3JjUmVjdF0oSUQy
RDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICByZW5kZXJUYXJnZXQtPkRy
YXdCaXRtYXAoaW1hZ2UsIGFkanVzdGVkRGVzdFJlY3QsIGdsb2JhbEFscGhhLCBEMkQxX0JJVE1B
UF9JTlRFUlBPTEFUSU9OX01PREVfTElORUFSLCBzcmNSZWN0KTsKLSAgICB9KTsKLQotICAgIGlm
ICghc3RhdGVTYXZlci5kaWRTYXZlKCkpCi0gICAgICAgIGNvbnRleHQtPlNldFRyYW5zZm9ybShj
dG0pOwotfQotCi12b2lkIGRyYXdQYXR0ZXJuKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0
Zm9ybUNvbnRleHQsIENPTVB0cjxJRDJEMUJpdG1hcD4mJiB0aWxlSW1hZ2UsIGNvbnN0IEludFNp
emUmIHNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVu
ZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5y
ZW5kZXJUYXJnZXQoKTsKLSAgICBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
cGxhdGZvcm1Db250ZXh0KTsKLQotICAgIGNsaXAocGxhdGZvcm1Db250ZXh0LCBkZXN0UmVjdCk7
Ci0KLSAgICBTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dCwgY29t
cG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0KLSAgICBhdXRvIGJpdG1hcEJydXNoUHJvcGVy
dGllcyA9IEQyRDE6OkJpdG1hcEJydXNoUHJvcGVydGllcygpOwotICAgIGJpdG1hcEJydXNoUHJv
cGVydGllcy5leHRlbmRNb2RlWCA9IEQyRDFfRVhURU5EX01PREVfV1JBUDsKLSAgICBiaXRtYXBC
cnVzaFByb3BlcnRpZXMuZXh0ZW5kTW9kZVkgPSBEMkQxX0VYVEVORF9NT0RFX1dSQVA7Ci0KLSAg
ICAvLyBDcmVhdGUgYSBicnVzaCB0cmFuc2Zvcm1hdGlvbiBzbyB3ZSBwYWludCB1c2luZyB0aGUg
c2VjdGlvbiBvZiB0aGUgaW1hZ2Ugd2UgY2FyZSBhYm91dC4KLSAgICBBZmZpbmVUcmFuc2Zvcm0g
dHJhbnNmb3JtYXRpb24gPSBwYXR0ZXJuVHJhbnNmb3JtOwotICAgIHRyYW5zZm9ybWF0aW9uLnRy
YW5zbGF0ZShkZXN0UmVjdC5sb2NhdGlvbigpKTsKLQotICAgIGF1dG8gYnJ1c2hQcm9wZXJ0aWVz
ID0gRDJEMTo6QnJ1c2hQcm9wZXJ0aWVzKCk7Ci0gICAgYnJ1c2hQcm9wZXJ0aWVzLnRyYW5zZm9y
bSA9IHRyYW5zZm9ybWF0aW9uOwotICAgIGJydXNoUHJvcGVydGllcy5vcGFjaXR5ID0gMS4wZjsK
LQotICAgIC8vIElmIHdlIG9ubHkgd2FudCBhIHN1YnNldCBvZiB0aGUgYml0bWFwLCB3ZSBuZWVk
IHRvIGNyZWF0ZSBhIGNyb3BwZWQgYml0bWFwIGltYWdlLiBBY2NvcmRpbmcgdG8gdGhlIGRvY3Vt
ZW50YXRpb24sCi0gICAgLy8gdGhpcyBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYml0bWFwIG1lbW9y
eS4KLSAgICBpZiAoc2l6ZS53aWR0aCgpID4gZGVzdFJlY3Qud2lkdGgoKSB8fCBzaXplLmhlaWdo
dCgpID4gZGVzdFJlY3QuaGVpZ2h0KCkpIHsKLSAgICAgICAgZmxvYXQgZHBpWCA9IDA7Ci0gICAg
ICAgIGZsb2F0IGRwaVkgPSAwOwotICAgICAgICB0aWxlSW1hZ2UtPkdldERwaSgmZHBpWCwgJmRw
aVkpOwotICAgICAgICBhdXRvIGJpdG1hcFByb3BlcnRpZXMgPSBEMkQxOjpCaXRtYXBQcm9wZXJ0
aWVzKHRpbGVJbWFnZS0+R2V0UGl4ZWxGb3JtYXQoKSwgZHBpWCwgZHBpWSk7Ci0gICAgICAgIENP
TVB0cjxJRDJEMUJpdG1hcD4gc3ViSW1hZ2U7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0
LT5DcmVhdGVCaXRtYXAoSW50U2l6ZSh0aWxlUmVjdC5zaXplKCkpLCBiaXRtYXBQcm9wZXJ0aWVz
LCAmc3ViSW1hZ2UpOwotICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkgewotICAgICAgICAgICAg
RDJEMV9SRUNUX1UgZmluaXNoUmVjdCA9IEludFJlY3QodGlsZVJlY3QpOwotICAgICAgICAgICAg
aHIgPSBzdWJJbWFnZS0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgdGlsZUltYWdlLmdldCgpLCAm
ZmluaXNoUmVjdCk7Ci0gICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAg
ICAgICB0aWxlSW1hZ2UgPSBzdWJJbWFnZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIENPTVB0
cjxJRDJEMUJpdG1hcEJydXNoPiBwYXR0ZXJuQnJ1c2g7Ci0gICAgSFJFU1VMVCBociA9IGNvbnRl
eHQtPkNyZWF0ZUJpdG1hcEJydXNoKHRpbGVJbWFnZS5nZXQoKSwgJmJpdG1hcEJydXNoUHJvcGVy
dGllcywgJmJydXNoUHJvcGVydGllcywgJnBhdHRlcm5CcnVzaCk7Ci0gICAgQVNTRVJUKFNVQ0NF
RURFRChocikpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBbZGVzdFJlY3QsIHBhdHRlcm5C
cnVzaF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICBjb25zdCBE
MkQxX1JFQ1RfRiBkMmRSZWN0ID0gZGVzdFJlY3Q7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+Rmls
bFJlY3RhbmdsZSgmZDJkUmVjdCwgcGF0dGVybkJydXNoLmdldCgpKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBkcmF3UmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcywgY29uc3QgQ29sb3Im
IGZpbGxDb2xvciwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiBzdHJva2VD
b2xvcikKLXsKLSAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUgcGF0
dGVybnMgYW5kIGdyYWRpZW50cyBsaWtlIGRyYXdQYXRoIGRvZXMsIGl0IHByb2JhYmx5IHNob3Vs
ZC4KLSAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5z
ZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRl
eHQsIFsmcGxhdGZvcm1Db250ZXh0LCByZWN0LCBmaWxsQ29sb3IsIHN0cm9rZUNvbG9yLCBzdHJv
a2VTdHlsZV0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICBjb25z
dCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKLSAgICAgICAgYXV0byBmaWxsQnJ1c2ggPSBw
bGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoZmlsbENvbG9yKTsKLSAgICAgICAgcmVuZGVy
VGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBmaWxsQnJ1c2guZ2V0KCkpOwotICAgICAg
ICBpZiAoc3Ryb2tlU3R5bGUgIT0gTm9TdHJva2UpIHsKLSAgICAgICAgICAgIGF1dG8gc3Ryb2tl
QnJ1c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IpOwotICAg
ICAgICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3UmVjdGFuZ2xlKCZkMmRSZWN0LCBzdHJva2VCcnVz
aC5nZXQoKSwgcGxhdGZvcm1Db250ZXh0LnN0cm9rZVRoaWNrbmVzcygpLCBwbGF0Zm9ybUNvbnRl
eHQuc3Ryb2tlU3R5bGUoKSk7Ci0gICAgICAgIH0KLSAgICB9KTsKLX0KLQotdm9pZCBkcmF3TGlu
ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MiwgU3Ryb2tlU3R5bGUgc3Ryb2tl
U3R5bGUsIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvciwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBi
b29sIHNob3VsZEFudGlhbGlhcykKLXsKLSAgICBib29sIGlzVmVydGljYWxMaW5lID0gKHBvaW50
MS54KCkgKyBzdHJva2VUaGlja25lc3MgPT0gcG9pbnQyLngoKSk7Ci0gICAgZmxvYXQgc3Ryb2tl
V2lkdGggPSBpc1ZlcnRpY2FsTGluZSA/IHBvaW50Mi55KCkgLSBwb2ludDEueSgpIDogcG9pbnQy
LngoKSAtIHBvaW50MS54KCk7Ci0gICAgaWYgKCFzdHJva2VUaGlja25lc3MgfHwgIXN0cm9rZVdp
ZHRoKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQucmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBmbG9hdCBjb3JuZXJXaWR0aCA9IDA7Ci0gICAgYm9v
bCBkcmF3c0Rhc2hlZExpbmUgPSBzdHJva2VTdHlsZSA9PSBEb3R0ZWRTdHJva2UgfHwgc3Ryb2tl
U3R5bGUgPT0gRGFzaGVkU3Ryb2tlOwotCi0gICAgQ09NUHRyPElEMkQxU3Ryb2tlU3R5bGU+IGQy
ZFN0cm9rZVN0eWxlOwotICAgIFBsYXRmb3JtQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihw
bGF0Zm9ybUNvbnRleHQsIGRyYXdzRGFzaGVkTGluZSk7Ci0gICAgaWYgKGRyYXdzRGFzaGVkTGlu
ZSkgewotICAgICAgICAvLyBGaWd1cmUgb3V0IGVuZCBwb2ludHMgdG8gZW5zdXJlIHdlIGFsd2F5
cyBwYWludCBjb3JuZXJzLgotICAgICAgICBjb3JuZXJXaWR0aCA9IGRhc2hlZExpbmVDb3JuZXJX
aWR0aEZvclN0cm9rZVdpZHRoKHN0cm9rZVdpZHRoLCBzdHJva2VTdHlsZSwgc3Ryb2tlVGhpY2tu
ZXNzKTsKLSAgICAgICAgc3Ryb2tlV2lkdGggLT0gMiAqIGNvcm5lcldpZHRoOwotICAgICAgICBm
bG9hdCBwYXR0ZXJuV2lkdGggPSBkYXNoZWRMaW5lUGF0dGVybldpZHRoRm9yU3Ryb2tlV2lkdGgo
c3Ryb2tlV2lkdGgsIHN0cm9rZVN0eWxlLCBzdHJva2VUaGlja25lc3MpOwotICAgICAgICAvLyBD
aGVjayBpZiBjb3JuZXIgZHJhd2luZyBzdWZmaWNpZW50bHkgY292ZXJzIHRoZSBsaW5lLgotICAg
ICAgICBpZiAoc3Ryb2tlV2lkdGggPD0gcGF0dGVybldpZHRoICsgMSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBmbG9hdCBwYXR0ZXJuT2Zmc2V0ID0gZGFzaGVkTGluZVBhdHRlcm5P
ZmZzZXRGb3JQYXR0ZXJuQW5kU3Ryb2tlV2lkdGgocGF0dGVybldpZHRoLCBzdHJva2VXaWR0aCk7
Ci0gICAgICAgIGNvbnN0IGZsb2F0IGRhc2hlc1syXSA9IHsgcGF0dGVybldpZHRoLCBwYXR0ZXJu
V2lkdGggfTsKLSAgICAgICAgYXV0byBzdHJva2VTdHlsZVByb3BlcnRpZXMgPSBwbGF0Zm9ybUNv
bnRleHQuc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6
c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVTdHJva2VTdHlsZSgmc3Ryb2tlU3R5bGVQcm9wZXJ0aWVz
LCBkYXNoZXMsIEFSUkFZU0laRShkYXNoZXMpLCAmZDJkU3Ryb2tlU3R5bGUpOwotCi0gICAgICAg
IHBsYXRmb3JtQ29udGV4dC5zZXRQYXR0ZXJuV2lkdGgocGF0dGVybldpZHRoKTsKLSAgICAgICAg
cGxhdGZvcm1Db250ZXh0LnNldFBhdHRlcm5PZmZzZXQocGF0dGVybk9mZnNldCk7Ci0gICAgICAg
IHBsYXRmb3JtQ29udGV4dC5zZXREYXNoZXMoRGFzaEFycmF5KDIsIHBhdHRlcm5XaWR0aCkpOwot
Ci0gICAgICAgIGQyZFN0cm9rZVN0eWxlID0gcGxhdGZvcm1Db250ZXh0LnN0cm9rZVN0eWxlKCk7
Ci0gICAgfQotCi0gICAgYXV0byBjZW50ZXJlZFBvaW50cyA9IGNlbnRlckxpbmVBbmRDdXRPZmZD
b3JuZXJzKGlzVmVydGljYWxMaW5lLCBjb3JuZXJXaWR0aCwgcG9pbnQxLCBwb2ludDIpOwotICAg
IGF1dG8gcDEgPSBjZW50ZXJlZFBvaW50c1swXTsKLSAgICBhdXRvIHAyID0gY2VudGVyZWRQb2lu
dHNbMV07Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0KLSAg
ICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1Db250ZXh0LCBw
MSwgcDIsIGQyZFN0cm9rZVN0eWxlLCBzdHJva2VDb2xvciwgc3Ryb2tlVGhpY2tuZXNzXShJRDJE
MVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RHJh
d0xpbmUocDEsIHAyLCBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3Ip
LmdldCgpLCBzdHJva2VUaGlja25lc3MsIGQyZFN0cm9rZVN0eWxlLmdldCgpKTsKLSAgICB9KTsK
LX0KLQotdm9pZCBkcmF3TGluZXNGb3JUZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBjb25z
dCBDb2xvciYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBkcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0
JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBmaWxsRWxsaXBzZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIFN0cm9r
ZVN0eWxlIHN0cm9rZVN0eWxlLCBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3IsIGZsb2F0IHN0cm9r
ZVRoaWNrbmVzcykKLXsKLSAgICBhdXRvIGVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKHJlY3QuY2Vu
dGVyKCksIDAuNSAqIHJlY3Qud2lkdGgoKSwgMC41ICogcmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBw
bGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgZHJhd1dpdGhvdXRTaGFk
b3cocGxhdGZvcm1Db250ZXh0LCBbJnBsYXRmb3JtQ29udGV4dCwgZWxsaXBzZSwgZmlsbENvbG9y
LCBzdHJva2VTdHlsZSwgc3Ryb2tlQ29sb3IsIHN0cm9rZVRoaWNrbmVzc10oSUQyRDFSZW5kZXJU
YXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICBhdXRvIGZpbGxCcnVzaCA9IHBsYXRmb3Jt
Q29udGV4dC5icnVzaFdpdGhDb2xvcihmaWxsQ29sb3IpOwotICAgICAgICByZW5kZXJUYXJnZXQt
PkZpbGxFbGxpcHNlKCZlbGxpcHNlLCBmaWxsQnJ1c2guZ2V0KCkpOwotICAgICAgICBpZiAoc3Ry
b2tlU3R5bGUgIT0gU3Ryb2tlU3R5bGU6Ok5vU3Ryb2tlKSB7Ci0gICAgICAgICAgICBhdXRvIHN0
cm9rZUJydXNoID0gcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKHN0cm9rZUNvbG9yKTsK
LSAgICAgICAgICAgIHJlbmRlclRhcmdldC0+RHJhd0VsbGlwc2UoJmVsbGlwc2UsIHN0cm9rZUJy
dXNoLmdldCgpLCBzdHJva2VUaGlja25lc3MsIHBsYXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZSgp
KTsKLSAgICAgICAgfQotICAgIH0pOwotfQotCi12b2lkIGRyYXdFbGxpcHNlKFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgU3Ry
b2tlU3R5bGUgc3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvciwgZmxvYXQgc3Ry
b2tlVGhpY2tuZXNzKQotewotICAgIGlmIChzdHJva2VTdHlsZSA9PSBTdHJva2VTdHlsZTo6Tm9T
dHJva2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gZWxsaXBzZSA9IEQyRDE6OkVsbGlw
c2UocmVjdC5jZW50ZXIoKSwgMC41ICogcmVjdC53aWR0aCgpLCAwLjUgKiByZWN0LmhlaWdodCgp
KTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBkcmF3
V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1Db250ZXh0LCBlbGxpcHNl
LCBzdHJva2VDb2xvciwgc3Ryb2tlVGhpY2tuZXNzXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVy
VGFyZ2V0KSB7Ci0gICAgICAgIGF1dG8gc3Ryb2tlQnJ1c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1
c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IpOwotICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdFbGxp
cHNlKCZlbGxpcHNlLCBzdHJva2VCcnVzaC5nZXQoKSwgc3Ryb2tlVGhpY2tuZXNzLCBwbGF0Zm9y
bUNvbnRleHQuc3Ryb2tlU3R5bGUoKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgZHJhd0ZvY3VzUmlu
ZyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IFBhdGgmLCBmbG9hdCwgY29uc3QgQ29s
b3ImKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgZHJhd0ZvY3VzUmluZyhQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQs
IGNvbnN0IENvbG9yJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIGZsdXNo
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgQVNTRVJU
KHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgRDJEMV9UQUcgZmlyc3QsIHNl
Y29uZDsKLSAgICBIUkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5G
bHVzaCgmZmlyc3QsICZzZWNvbmQpOwotCi0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci19Ci0KLXZvaWQgc2F2ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250
ZXh0KQotewotICAgIHBsYXRmb3JtQ29udGV4dC5zYXZlKCk7Ci0KLSAgICBpZiAoYXV0byogZ3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZSA9IHBsYXRmb3JtQ29udGV4dC5ncmFwaGljc0NvbnRleHRQcml2
YXRlKCkpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dFByaXZhdGUtPnNhdmUoKTsKLX0KLQotdm9p
ZCByZXN0b3JlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0g
ICAgcGxhdGZvcm1Db250ZXh0LnJlc3RvcmUoKTsKLQotICAgIGlmIChhdXRvKiBncmFwaGljc0Nv
bnRleHRQcml2YXRlID0gcGxhdGZvcm1Db250ZXh0LmdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkK
LSAgICAgICAgZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZS0+cmVzdG9yZSgpOwotfQotCi12b2lkIHRy
YW5zbGF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBmbG9hdCB4
LCBmbG9hdCB5KQotewotICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkp
OwotCi0gICAgRDJEMV9NQVRSSVhfM1gyX0YgY3VycmVudFRyYW5zZm9ybTsKLSAgICBwbGF0Zm9y
bUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkdldFRyYW5zZm9ybSgmY3VycmVudFRyYW5zZm9ybSk7
Ci0KLSAgICBhdXRvIHRyYW5zbGF0aW9uID0gRDJEMTo6TWF0cml4M3gyRjo6VHJhbnNsYXRpb24o
eCwgeSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5TZXRUcmFuc2Zvcm0o
dHJhbnNsYXRpb24gKiBjdXJyZW50VHJhbnNmb3JtKTsKLQotICAgIGlmIChhdXRvKiBncmFwaGlj
c0NvbnRleHRQcml2YXRlID0gcGxhdGZvcm1Db250ZXh0LmdyYXBoaWNzQ29udGV4dFByaXZhdGUo
KSkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZS0+dHJhbnNsYXRlKHgsIHkpOwotfQot
Ci12b2lkIHJvdGF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBm
bG9hdCBhbmdsZUluUmFkaWFucykKLXsKLSAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0LnJlbmRl
clRhcmdldCgpKTsKLQotICAgIEQyRDFfTUFUUklYXzNYMl9GIGN1cnJlbnRUcmFuc2Zvcm07Ci0g
ICAgcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5HZXRUcmFuc2Zvcm0oJmN1cnJlbnRU
cmFuc2Zvcm0pOwotCi0gICAgYXV0byByb3RhdGlvbiA9IEQyRDE6Ok1hdHJpeDN4MkY6OlJvdGF0
aW9uKHJhZDJkZWcoYW5nbGVJblJhZGlhbnMpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVy
VGFyZ2V0KCktPlNldFRyYW5zZm9ybShyb3RhdGlvbiAqIGN1cnJlbnRUcmFuc2Zvcm0pOwotCi0g
ICAgaWYgKGF1dG8qIGdyYXBoaWNzQ29udGV4dFByaXZhdGUgPSBwbGF0Zm9ybUNvbnRleHQuZ3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICAgICBncmFwaGljc0NvbnRleHRQcml2YXRlLT5y
b3RhdGUoYW5nbGVJblJhZGlhbnMpOwotfQotCi12b2lkIHNjYWxlKFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBB
U1NFUlQocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLQotICAgIEQyRDFfTUFUUklY
XzNYMl9GIGN1cnJlbnRUcmFuc2Zvcm07Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdl
dCgpLT5HZXRUcmFuc2Zvcm0oJmN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAgYXV0byBzY2FsZSA9
IEQyRDE6Ok1hdHJpeDN4MkY6OlNjYWxlKHNpemUpOwotICAgIHBsYXRmb3JtQ29udGV4dC5yZW5k
ZXJUYXJnZXQoKS0+U2V0VHJhbnNmb3JtKHNjYWxlICogY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAg
ICBpZiAoYXV0byogZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZSA9IHBsYXRmb3JtQ29udGV4dC5ncmFw
aGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dFByaXZhdGUtPnNj
YWxlKHNpemUpOwotfQotCi12b2lkIGNvbmNhdENUTShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYg
cGxhdGZvcm1Db250ZXh0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZVRyYW5zZm9ybSkK
LXsKLSAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLQotICAgIEQy
RDFfTUFUUklYXzNYMl9GIGN1cnJlbnRUcmFuc2Zvcm07Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJl
bmRlclRhcmdldCgpLT5HZXRUcmFuc2Zvcm0oJmN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAgRDJE
MV9NQVRSSVhfM1gyX0YgdHJhbnNmb3JtVG9Db25jYXQgPSBhZmZpbmVUcmFuc2Zvcm07Ci0gICAg
cGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5TZXRUcmFuc2Zvcm0odHJhbnNmb3JtVG9D
b25jYXQgKiBjdXJyZW50VHJhbnNmb3JtKTsKLQotICAgIGlmIChhdXRvKiBncmFwaGljc0NvbnRl
eHRQcml2YXRlID0gcGxhdGZvcm1Db250ZXh0LmdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZS0+Y29uY2F0Q1RNKGFmZmluZVRyYW5zZm9ybSk7
Ci19Ci0KLXZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYgcGxhdGZvcm1Db250ZXh0LCBmbG9hdCBvcGFjaXR5KQotewotICAgIFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEOjpUcmFuc3BhcmVuY3lMYXllclN0YXRlIHRyYW5zcGFyZW5jeUxheWVyOwotICAg
IHRyYW5zcGFyZW5jeUxheWVyLm9wYWNpdHkgPSBvcGFjaXR5OwotCi0gICAgdHJhbnNwYXJlbmN5
TGF5ZXIucmVuZGVyVGFyZ2V0ID0gY3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0KHBsYXRmb3JtQ29u
dGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVu
Y3lMYXllclN0YWNrLmFwcGVuZChXVEZNb3ZlKHRyYW5zcGFyZW5jeUxheWVyKSk7Ci0KLSAgICBw
bGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLmxhc3QoKS5yZW5kZXJUYXJn
ZXQtPkJlZ2luRHJhdygpOwotICAgIHBsYXRmb3JtQ29udGV4dC5tX3RyYW5zcGFyZW5jeUxheWVy
U3RhY2subGFzdCgpLnJlbmRlclRhcmdldC0+Q2xlYXIoRDJEMTo6Q29sb3JGKDAsIDAsIDAsIDAp
KTsKLX0KLQotdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcihQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYgcGxhdGZvcm1Db250ZXh0KQotewotICAgIGF1dG8gY3VycmVudExheWVyID0gcGxhdGZvcm1D
b250ZXh0Lm1fdHJhbnNwYXJlbmN5TGF5ZXJTdGFjay50YWtlTGFzdCgpOwotICAgIGF1dG8gcmVu
ZGVyVGFyZ2V0ID0gY3VycmVudExheWVyLnJlbmRlclRhcmdldDsKLSAgICBpZiAoIXJlbmRlclRh
cmdldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+
RW5kRHJhdygpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgYXV0
byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0gICAgaWYgKGN1
cnJlbnRMYXllci5oYXNTaGFkb3cpCi0gICAgICAgIGRyYXdXaXRoU2hhZG93SGVscGVyKGNvbnRl
eHQsIHJlbmRlclRhcmdldC5nZXQoKSwgRmxvYXRSZWN0KCksIGN1cnJlbnRMYXllci5zaGFkb3dD
b2xvciwgY3VycmVudExheWVyLnNoYWRvd09mZnNldCwgY3VycmVudExheWVyLnNoYWRvd0JsdXIp
OwotICAgIGVsc2UgewotICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKLSAgICAg
ICAgaHIgPSByZW5kZXJUYXJnZXQtPkdldEJpdG1hcCgmYml0bWFwKTsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwQnJ1
c2g+IGJpdG1hcEJydXNoOwotICAgICAgICBhdXRvIGJpdG1hcEJydXNoUHJvcGVydGllcyA9IEQy
RDE6OkJpdG1hcEJydXNoUHJvcGVydGllcygpOwotICAgICAgICBhdXRvIGJydXNoUHJvcGVydGll
cyA9IEQyRDE6OkJydXNoUHJvcGVydGllcygpOwotICAgICAgICBIUkVTVUxUIGhyID0gY29udGV4
dC0+Q3JlYXRlQml0bWFwQnJ1c2goYml0bWFwLmdldCgpLCBiaXRtYXBCcnVzaFByb3BlcnRpZXMs
IGJydXNoUHJvcGVydGllcywgJmJpdG1hcEJydXNoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
U1VDQ0VFREVEKGhyKSk7Ci0KLSAgICAgICAgYXV0byBzaXplID0gYml0bWFwLT5HZXRTaXplKCk7
Ci0gICAgICAgIGF1dG8gcmVjdEluRElQID0gRDJEMTo6UmVjdEYoMCwgMCwgc2l6ZS53aWR0aCwg
c2l6ZS5oZWlnaHQpOwotICAgICAgICBjb250ZXh0LT5GaWxsUmVjdGFuZ2xlKHJlY3RJbkRJUCwg
Yml0bWFwQnJ1c2guZ2V0KCkpOwotICAgIH0KLX0KLQotdm9pZCBjbGlwKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAg
ICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPlB1c2hBeGlzQWxpZ25lZENsaXAocmVj
dCwgRDJEMV9BTlRJQUxJQVNfTU9ERV9QRVJfUFJJTUlUSVZFKTsKLSAgICBwbGF0Zm9ybUNvbnRl
eHQucHVzaENsaXAoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OkF4aXNBbGlnbmVkQ2xpcCk7Ci0K
LSAgICBpZiAoYXV0byogZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZSA9IHBsYXRmb3JtQ29udGV4dC5n
cmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dFByaXZhdGUt
PmNsaXAocmVjdCk7Ci19Ci0KLXZvaWQgY2xpcE91dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYg
cGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRo
OwotICAgIHBhdGguYWRkUmVjdChyZWN0KTsKLQotICAgIGNsaXBPdXQocGxhdGZvcm1Db250ZXh0
LCBwYXRoKTsKLX0KLQotdm9pZCBjbGlwT3V0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0
Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgLy8gVG8gY2xpcCBPdXQgd2Ug
bmVlZCB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBpbmZpbml0ZQotICAgIC8vIGNsaXBwaW5nIHJl
Y3QgYW5kIHRoZSBwYXRoIHdlIGp1c3QgY3JlYXRlZC4KLSAgICBEMkQxX1NJWkVfRiByZW5kZXJl
clNpemUgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkdldFNpemUoKTsKLSAgICBG
bG9hdFJlY3QgY2xpcEJvdW5kcygwLCAwLCByZW5kZXJlclNpemUud2lkdGgsIHJlbmRlcmVyU2l6
ZS5oZWlnaHQpOwotCi0gICAgUGF0aCBib3VuZGluZ1JlY3Q7Ci0gICAgYm91bmRpbmdSZWN0LmFk
ZFJlY3QoY2xpcEJvdW5kcyk7Ci0gICAgYm91bmRpbmdSZWN0LmFwcGVuZEdlb21ldHJ5KHBhdGgu
cGxhdGZvcm1QYXRoKCkpOwotCi0gICAgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4gcGF0aFRv
Q2xpcDsKLSAgICBib3VuZGluZ1JlY3QuY3JlYXRlR2VvbWV0cnlXaXRoRmlsbE1vZGUoV2luZFJ1
bGU6OkV2ZW5PZGQsIHBhdGhUb0NsaXApOwotICAgIGNsaXBQYXRoKHBsYXRmb3JtQ29udGV4dCwg
cGF0aFRvQ2xpcC5nZXQoKSk7Ci19Ci0KLXZvaWQgY2xpcFBhdGgoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1
bGUpCi17Ci0gICAgaWYgKHBhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIERpcmVjdDJEOjpjbGlw
KHBsYXRmb3JtQ29udGV4dCwgRmxvYXRSZWN0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4gcGF0aFRvQ2xpcDsKLSAgICBwYXRoLmNy
ZWF0ZUdlb21ldHJ5V2l0aEZpbGxNb2RlKGNsaXBSdWxlLCBwYXRoVG9DbGlwKTsKLQotICAgIGNs
aXBQYXRoKHBsYXRmb3JtQ29udGV4dCwgcGF0aFRvQ2xpcC5nZXQoKSk7Ci0KLSAgICBpZiAoYXV0
byogZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZSA9IHBsYXRmb3JtQ29udGV4dC5ncmFwaGljc0NvbnRl
eHRQcml2YXRlKCkpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dFByaXZhdGUtPmNsaXAocGF0aCk7
Ci19Ci0KLXZvaWQgY2xpcFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29u
dGV4dCwgSUQyRDFHZW9tZXRyeSogcGF0aCkKLXsKLSAgICBDT01QdHI8SUQyRDFMYXllcj4gY2xp
cExheWVyOwotICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkt
PkNyZWF0ZUxheWVyKCZjbGlwTGF5ZXIpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5QdXNoTGF5
ZXIoRDJEMTo6TGF5ZXJQYXJhbWV0ZXJzKEQyRDE6OkluZmluaXRlUmVjdCgpLCBwYXRoKSwgY2xp
cExheWVyLmdldCgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucHVzaFJlbmRlckNsaXAoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQ6OkxheWVyQ2xpcCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNldEFj
dGl2ZUxheWVyKFdURk1vdmUoY2xpcExheWVyKSk7Ci19Ci0KLXZvaWQgY2xpcFRvSW1hZ2VCdWZm
ZXIoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBJRDJEMVJlbmRlclRhcmdldCosIGNvbnN0IEZs
b2F0UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotCi12b2lkIGNvcHlCaXRz
KGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MsIHVuc2lnbmVkIHJvd0NvdW50LCB1bnNpZ25lZCBjb2xD
b3VudCwgdW5zaWduZWQgc3JjU3RyaWRlLCB1bnNpZ25lZCBkZXN0U3RyaWRlLCB1aW50OF90KiBk
ZXN0Um93cykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgcm93Q291bnQ7ICsreSkg
ewotICAgICAgICAvLyBTb3VyY2UgZGF0YSBtYXkgYmUgcG93ZXItb2YtdHdvIHNpemVkLCBzbyB3
ZSBuZWVkIHRvIG9ubHkgY29weSB0aGUgYml0cyB0aGF0Ci0gICAgICAgIC8vIGNvcnJlc3BvbmQg
dG8gdGhlIHJlY3RhbmdsZSBzdXBwbGllZCBieSB0aGUgY2FsbGVyLgotICAgICAgICBjb25zdCB1
aW50MzJfdCogc3JjUm93ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jv
d3MgKyBzcmNTdHJpZGUgKiB5KTsKLSAgICAgICAgdWludDMyX3QqIGRlc3RSb3cgPSByZWludGVy
cHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBkZXN0U3RyaWRlICogeSk7Ci0gICAgICAg
IG1lbWNweShkZXN0Um93LCBzcmNSb3csIGNvbENvdW50KTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIERpcmVjdDJECi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVT
RShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9E
aXJlY3QyRE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI4NzgwMykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMu
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDE3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAy
MDA4IE51YW50aSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQnJlbnQgRnVsZ2hhbSA8YmZ1
bGdoYW1Ad2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBJZ2FsaWEgUy5M
LgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlv
bgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkRhc2hBcnJheS5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPGQyZDEu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci1jbGFz
cyBDb2xvcjsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7Ci1jbGFz
cyBGbG9hdFNpemU7Ci1jbGFzcyBQYXRoOwotCi1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGU7
Ci0KLW5hbWVzcGFjZSBEaXJlY3QyRCB7Ci0KLW5hbWVzcGFjZSBTdGF0ZSB7Ci0KLXZvaWQgc2V0
U3Ryb2tlVGhpY2tuZXNzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgZmxvYXQpOwotdm9pZCBz
ZXRTdHJva2VTdHlsZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIFN0cm9rZVN0eWxlKTsKLQot
dm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBDb21w
b3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKTsKLXZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEJiwgYm9vbCk7Ci0KLXZvaWQgc2V0Q1RNKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci1BZmZpbmVUcmFuc2Zvcm0gZ2V0
Q1RNKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci0KLUludFJlY3QgZ2V0Q2xpcEJvdW5kcyhQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmKTsKLQotYm9vbCBpc0Fj
Y2VsZXJhdGVkQ29udGV4dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotCi19IC8vIG5hbWVz
cGFjZSBTdGF0ZQotCi1zdHJ1Y3QgRmlsbFNvdXJjZSB7Ci0gICAgRmlsbFNvdXJjZSgpID0gZGVm
YXVsdDsKLSAgICBleHBsaWNpdCBGaWxsU291cmNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7Ci0KLSAgICBmbG9hdCBnbG9iYWxBbHBoYSB7IDAg
fTsKLSAgICBDT01QdHI8SUQyRDFCcnVzaD4gYnJ1c2g7Ci0gICAgQ29sb3IgY29sb3I7Ci0KLSAg
ICBXaW5kUnVsZSBmaWxsUnVsZSB7IFdpbmRSdWxlOjpOb25aZXJvIH07Ci19OwotCi1zdHJ1Y3Qg
U3Ryb2tlU291cmNlIHsKLSAgICBTdHJva2VTb3VyY2UoKSA9IGRlZmF1bHQ7Ci0gICAgZXhwbGlj
aXQgU3Ryb2tlU291cmNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0Jik7Ci0KLSAgICBmbG9hdCBnbG9iYWxBbHBoYSB7IDAgfTsKLSAgICBmbG9hdCB0
aGlja25lc3MgeyAwIH07Ci0gICAgQ09NUHRyPElEMkQxQnJ1c2g+IGJydXNoOwotICAgIENvbG9y
IGNvbG9yOwotfTsKLQotc3RydWN0IFNoYWRvd1N0YXRlIHsKLSAgICBTaGFkb3dTdGF0ZSgpID0g
ZGVmYXVsdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBTaGFkb3dTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYpOwotCi0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdDsKLSAg
ICBib29sIGlzUmVxdWlyZWQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKSBjb25zdDsKLQotICAg
IEZsb2F0U2l6ZSBvZmZzZXQ7Ci0gICAgZmxvYXQgYmx1ciB7IDAgfTsKLSAgICBDb2xvciBjb2xv
cjsKLSAgICBib29sIGlnbm9yZVRyYW5zZm9ybXMgeyBmYWxzZSB9OwotCi0gICAgZmxvYXQgZ2xv
YmFsQWxwaGEgeyAxLjAgfTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBnbG9iYWxDb21wb3NpdGVP
cGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyIH07Ci19OwotCi12b2lkIHNl
dExpbmVDYXAoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBMaW5lQ2FwKTsKLXZvaWQgc2V0TGlu
ZURhc2goUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCk7
Ci12b2lkIHNldExpbmVKb2luKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgTGluZUpvaW4pOwot
dm9pZCBzZXRNaXRlckxpbWl0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgZmxvYXQpOwotCi12
b2lkIGZpbGxSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmlsbFNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIGZpbGxSZWN0KFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBj
b25zdCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBmaWxsUmVjdFdpdGhHcmFkaWVudChQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYsIElEMkQxQnJ1c2gqKTsKLXZvaWQgZmls
bFJvdW5kZWRSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYsIGNvbnN0IENvbG9yJiwgY29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQgZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgRmlsbFNvdXJjZSYsIGNvbnN0IFNoYWRv
d1N0YXRlJik7Ci12b2lkIGZpbGxQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3Qg
UGF0aCYsIGNvbnN0IEZpbGxTb3VyY2UmLCBjb25zdCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBmaWxs
UGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IFBhdGgmLCBjb25zdCBDb2xvciYs
IGNvbnN0IFNoYWRvd1N0YXRlJik7Ci0KLXZvaWQgc3Ryb2tlUmVjdChQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0LCBjb25zdCBTdHJva2VTb3VyY2UmLCBj
b25zdCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBzdHJva2VQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJiwgY29uc3QgUGF0aCYsIGNvbnN0IFN0cm9rZVNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRl
Jik7Ci12b2lkIGNsZWFyUmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0
UmVjdCYpOwotCi12b2lkIGRyYXdHbHlwaHMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25z
dCBGaWxsU291cmNlJiwgY29uc3QgU3Ryb2tlU291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUmLCBj
b25zdCBGbG9hdFBvaW50JiwgY29uc3QgRm9udCYsIGRvdWJsZSwgY29uc3QgVmVjdG9yPHVuc2ln
bmVkIHNob3J0PiYgZ2x5cGhzLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBob3Jpem9udGFsQWR2YW5j
ZXMsIGNvbnN0IFZlY3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiYsIGZsb2F0LCBUZXh0RHJhd2lu
Z01vZGVGbGFncywgZmxvYXQsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IENvbG9yJik7Ci0KLXZv
aWQgZHJhd1BsYXRmb3JtSW1hZ2UoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBJV0lDQml0bWFw
KiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiwgZmxvYXQsIGNvbnN0IFNoYWRv
d1N0YXRlJik7Ci12b2lkIGRyYXdQbGF0Zm9ybUltYWdlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
JiwgSUQyRDFCaXRtYXAqLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmLCBmbG9h
dCwgY29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQgZHJhd1BhdGgoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmLCBjb25zdCBQYXRoJiwgY29uc3QgU3Ryb2tlU291cmNlJiwgY29uc3QgU2hhZG93U3Rh
dGUmKTsKLXZvaWQgZHJhd1BhdHRlcm4oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBDT01QdHI8
SUQyRDFCaXRtYXA+JiYsIGNvbnN0IEludFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgQ29t
cG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSk7Ci0KLXZvaWQgZHJhd1dpdGhvdXRTaGFkb3coUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmLCBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+
JiYgZHJhd0NvbW1hbmRzKTsKLXZvaWQgZHJhd1dpdGhTaGFkb3coUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmLCBGbG9hdFJlY3QgYm91bmRpbmdSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYsIEZ1bmN0
aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4mJiBkcmF3Q29tbWFuZHMpOwotCi12b2lkIGRy
YXdSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQs
IGNvbnN0IENvbG9yJiwgU3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJik7Ci12b2lkIGRyYXdMaW5l
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBTdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwgYm9vbCk7Ci12b2lkIGRy
YXdMaW5lc0ZvclRleHQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFBvaW50
JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBjb25zdCBD
b2xvciYpOwotdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpOwotdm9p
ZCBkcmF3RWxsaXBzZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYs
IFN0cm9rZVN0eWxlLCBjb25zdCBDb2xvciYsIGZsb2F0KTsKLXZvaWQgZmlsbEVsbGlwc2UoUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIFN0
cm9rZVN0eWxlLCBjb25zdCBDb2xvciYsIGZsb2F0KTsKLQotdm9pZCBkcmF3Rm9jdXNSaW5nKFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgUGF0aCYsIGZsb2F0LCBjb25zdCBDb2xvciYp
Owotdm9pZCBkcmF3Rm9jdXNSaW5nKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgY29uc3QgQ29sb3ImKTsKLQotdm9pZCBmbHVzaChQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotdm9pZCBzYXZlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
Jik7Ci12b2lkIHJlc3RvcmUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKTsKLQotdm9pZCB0cmFu
c2xhdGUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBmbG9hdCwgZmxvYXQpOwotdm9pZCByb3Rh
dGUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBmbG9hdCk7Ci12b2lkIHNjYWxlKFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRTaXplJik7Ci12b2lkIGNvbmNhdENUTShQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotCi12b2lkIGJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBmbG9hdCk7Ci12
b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci0KLXZv
aWQgY2xpcChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYpOwotCi12
b2lkIGNsaXBPdXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmKTsK
LXZvaWQgY2xpcE91dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IFBhdGgmKTsKLXZv
aWQgY2xpcFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBQYXRoJiwgV2luZFJ1
bGUpOwotdm9pZCBjbGlwUGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIElEMkQxR2VvbWV0
cnkqIHBhdGgpOwotCi12b2lkIGNsaXBUb0ltYWdlQnVmZmVyKFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJiwgSUQyRDFSZW5kZXJUYXJnZXQqLCBjb25zdCBGbG9hdFJlY3QmKTsKLQotfSAvLyBuYW1l
c3BhY2UgRGlyZWN0MkQKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShE
SVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJl
Y3QyRFV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmNw
cAkobm9uZXhpc3RlbnQpCkBAIC0xLDUxNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gZW1iZWRkZWQg
c3lzdGVtcwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLQotI2lmIFVT
RShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIK
LSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jaW5jbHVkZSA8ZDNk
MTFfMS5oPgotI2luY2x1ZGUgPHNobHdhcGkuaD4KLSNpbmNsdWRlIDx3aW5jb2RlYy5oPgotCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIERpcmVjdDJEIHsKLQotY29uc3RleHBy
IERYR0lfRk9STUFUIHdlYmtpdFRleHR1cmVGb3JtYXQgPSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9V
Tk9STTsKLWNvbnN0ZXhwciBEMkQxX0FMUEhBX01PREUgd2Via2l0QWxwaGFNb2RlID0gRDJEMV9B
TFBIQV9NT0RFX1BSRU1VTFRJUExJRUQ7Ci0KLUludFNpemUgYml0bWFwU2l6ZShJV0lDQml0bWFw
U291cmNlKiBiaXRtYXBTb3VyY2UpCi17Ci0gICAgVUlOVCB3aWR0aCwgaGVpZ2h0OwotICAgIEhS
RVNVTFQgaHIgPSBiaXRtYXBTb3VyY2UtPkdldFNpemUoJndpZHRoLCAmaGVpZ2h0KTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gSW50
U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLX0KLQotRmxvYXRTaXplIGJpdG1hcFNpemUoSUQyRDFCaXRt
YXAqIGJpdG1hcFNvdXJjZSkKLXsKLSAgICByZXR1cm4gYml0bWFwU291cmNlLT5HZXRTaXplKCk7
Ci19Ci0KLUZsb2F0U2l6ZSBiaXRtYXBSZXNvbHV0aW9uKElXSUNCaXRtYXBTb3VyY2UqIGJpdG1h
cFNvdXJjZSkKLXsKLSAgICBjb25zdGV4cHIgZG91YmxlIGRwaUJhc2UgPSA5NjsKLQotICAgIGRv
dWJsZSBkcGlYLCBkcGlZOwotICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBTb3VyY2UtPkdldFJlc29s
dXRpb24oJmRwaVgsICZkcGlZKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJl
dHVybiB7IH07Ci0KLSAgICBGbG9hdFNpemUgcmVzdWx0KGRwaVgsIGRwaVkpOwotICAgIHJlc3Vs
dC5zY2FsZSgxLjAgLyBkcGlCYXNlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1GbG9hdFNp
emUgYml0bWFwUmVzb2x1dGlvbihJRDJEMUJpdG1hcCogYml0bWFwKQotewotICAgIGNvbnN0ZXhw
ciBkb3VibGUgZHBpQmFzZSA9IDk2OwotCi0gICAgZmxvYXQgZHBpWCwgZHBpWTsKLSAgICBiaXRt
YXAtPkdldERwaSgmZHBpWCwgJmRwaVkpOwotCi0gICAgRmxvYXRTaXplIHJlc3VsdChkcGlYLCBk
cGlZKTsKLSAgICByZXN1bHQuc2NhbGUoMS4wIC8gZHBpQmFzZSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLQotfQotCi1GbG9hdFNpemUgYml0bWFwUmVzb2x1dGlvbihJRDJEMVJlbmRlclRhcmdldCog
dGFyZ2V0KQotewotICAgIGNvbnN0ZXhwciBkb3VibGUgZHBpQmFzZSA9IDk2OwotCi0gICAgZmxv
YXQgZHBpWCwgZHBpWTsKLSAgICB0YXJnZXQtPkdldERwaSgmZHBpWCwgJmRwaVkpOwotCi0gICAg
RmxvYXRTaXplIHJlc3VsdChkcGlYLCBkcGlZKTsKLSAgICByZXN1bHQuc2NhbGUoMS4wIC8gZHBp
QmFzZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLQotfQotdW5zaWduZWQgYml0c1BlclBpeGVsKEdV
SUQgYml0bWFwRm9ybWF0KQotewotICAgIENPTVB0cjxJV0lDQ29tcG9uZW50SW5mbz4gY29tcG9u
ZW50SW5mbzsKLSAgICBIUkVTVUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3RlbUlt
YWdpbmdGYWN0b3J5KCktPkNyZWF0ZUNvbXBvbmVudEluZm8oYml0bWFwRm9ybWF0LCAmY29tcG9u
ZW50SW5mbyk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gNDsKLQot
ICAgIENPTVB0cjxJV0lDUGl4ZWxGb3JtYXRJbmZvPiBwaXhlbEZvcm1hdDsKLSAgICBwaXhlbEZv
cm1hdC5xdWVyeShjb21wb25lbnRJbmZvKTsKLSAgICBpZiAoIXBpeGVsRm9ybWF0KQotICAgICAg
ICByZXR1cm4gNDsKLQotICAgIFVJTlQgYnBwID0gMDsKLSAgICBociA9IHBpeGVsRm9ybWF0LT5H
ZXRCaXRzUGVyUGl4ZWwoJmJwcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICBy
ZXR1cm4gNDsKLQotICAgIHJldHVybiBicHA7Ci19Ci0KLUNPTVB0cjxJV0lDQml0bWFwPiBjcmVh
dGVEaXJlY3QyREltYWdlU3VyZmFjZVdpdGhEYXRhKHZvaWQqIGRhdGEsIGNvbnN0IEludFNpemUm
IHNpemUsIHVuc2lnbmVkIHN0cmlkZSkKLXsKLSAgICBDaGVja2VkU2l6ZSBudW1CeXRlcyA9IENo
ZWNrZWRVaW50MzIoc2l6ZS5oZWlnaHQoKSkgKiBzdHJpZGU7Ci0gICAgaWYgKG51bUJ5dGVzLmhh
c092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SVdJ
Q0JpdG1hcD4gc3VyZmFjZTsKLSAgICBIUkVTVUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6
OnN5c3RlbUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZUJpdG1hcEZyb21NZW1vcnkoc2l6ZS53aWR0
aCgpLCBzaXplLmhlaWdodCgpLCB3aWNCaXRtYXBGb3JtYXQoKSwgc3RyaWRlLCBzdGF0aWNfY2Fz
dDxVSU5UPihudW1CeXRlcy52YWx1ZSgpKSwgcmVpbnRlcnByZXRfY2FzdDxCWVRFKj4oZGF0YSks
ICZzdXJmYWNlKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgcmV0dXJuIHN1cmZhY2U7Ci19Ci0KLUNPTVB0cjxJV0lDQml0bWFwPiBjcmVh
dGVXaWNCaXRtYXAoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBDT01QdHI8SVdJQ0JpdG1h
cD4gc3VyZmFjZTsKLSAgICBIUkVTVUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3Rl
bUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZUJpdG1hcChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCksIHdpY0JpdG1hcEZvcm1hdCgpLCBXSUNCaXRtYXBDYWNoZU9uRGVtYW5kLCAmc3VyZmFjZSk7
Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IHJldHVybiBzdXJmYWNlOwotfQotCi1EMkQxX1BJWEVMX0ZPUk1BVCBwaXhlbEZvcm1hdEZvclNv
ZnR3YXJlTWFuaXB1bGF0aW9uKCkKLXsKLSAgICByZXR1cm4gRDJEMTo6UGl4ZWxGb3JtYXQoRFhH
SV9GT1JNQVRfUjhHOEI4QThfVU5PUk0sIEQyRDFfQUxQSEFfTU9ERV9QUkVNVUxUSVBMSUVEKTsK
LX0KLQotRDJEMV9QSVhFTF9GT1JNQVQgcGl4ZWxGb3JtYXQoKQotewotICAgIC8vIFNpbmNlIHdl
IG5lZWQgdG8gaW50ZXJhY3Qgd2l0aCBIREMgZnJvbSB0aW1lLXRvLXRpbWUsIHdlIGFyZSBmb3Jj
ZWQgdG8gdXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNIGFuZCBEMkQxX0FMUEhBX01PREVf
UFJFTVVMVElQTElFRAotICAgIHJldHVybiBEMkQxOjpQaXhlbEZvcm1hdCh3ZWJraXRUZXh0dXJl
Rm9ybWF0LCB3ZWJraXRBbHBoYU1vZGUpOwotfQotCi1HVUlEIHdpY0JpdG1hcEZvcm1hdCgpCi17
Ci0gICAgLy8gVGhpcyBpcyB0aGUgV0lDIGZvcm1hdCBjb21wYXRpYmxlIHdpdGggRFhHSV9GT1JN
QVRfQjhHOFI4QThfVU5PUk0uIEl0IGlzIGFsc28gc3VwcG9zZWRseSB0aGUgbW9zdCBlZmZpY2ll
bnQgaW4tbWVtb3J5Ci0gICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIFdJQyBpbWFnZXMuCi0gICAg
cmV0dXJuIEdVSURfV0lDUGl4ZWxGb3JtYXQzMmJwcFBCR1JBOwotfQotCi1EMkQxX0JJVE1BUF9Q
Uk9QRVJUSUVTIGJpdG1hcFByb3BlcnRpZXMoKQotewotICAgIHJldHVybiBEMkQxOjpCaXRtYXBQ
cm9wZXJ0aWVzKHBpeGVsRm9ybWF0KCkpOwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXA+IGNyZWF0
ZUJpdG1hcChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBjb25zdCBJbnRTaXplJiBz
aXplKQotewotICAgIGF1dG8gYml0bWFwQ3JlYXRlUHJvcGVydGllcyA9IGJpdG1hcFByb3BlcnRp
ZXMoKTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotICAgIEQyRDFfU0laRV9V
IGJpdG1hcFNpemUgPSBzaXplOwotICAgIEhSRVNVTFQgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0
ZUJpdG1hcChiaXRtYXBTaXplLCBiaXRtYXBDcmVhdGVQcm9wZXJ0aWVzLCAmYml0bWFwKTsKLSAg
ICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0
dXJuIGJpdG1hcDsKLX0KLQotRDJEMV9SRU5ERVJfVEFSR0VUX1BST1BFUlRJRVMgcmVuZGVyVGFy
Z2V0UHJvcGVydGllcygpCi17Ci0gICAgcmV0dXJuIEQyRDE6OlJlbmRlclRhcmdldFByb3BlcnRp
ZXMoRDJEMV9SRU5ERVJfVEFSR0VUX1RZUEVfREVGQVVMVCwKLSAgICAgICAgcGl4ZWxGb3JtYXQo
KSwgMCwgMCwgRDJEMV9SRU5ERVJfVEFSR0VUX1VTQUdFX0dESV9DT01QQVRJQkxFLCBEMkQxX0ZF
QVRVUkVfTEVWRUxfREVGQVVMVCk7Ci19Ci0KLUNPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gY3Jl
YXRlUmVuZGVyVGFyZ2V0RnJvbVdJQ0JpdG1hcChJV0lDQml0bWFwKiBiaXRtYXBTb3VyY2UpCi17
Ci0gICAgYXV0byB0YXJnZXRQcm9wZXJ0aWVzID0gcmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwot
Ci0gICAgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBiaXRtYXBDb250ZXh0OwotICAgIEhSRVNV
TFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlV2ljQml0bWFw
UmVuZGVyVGFyZ2V0KGJpdG1hcFNvdXJjZSwgJnRhcmdldFByb3BlcnRpZXMsICZiaXRtYXBDb250
ZXh0KTsKLSAgICBpZiAoIWJpdG1hcENvbnRleHQgfHwgIVNVQ0NFRURFRChocikpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGJpdG1hcENvbnRleHQ7Ci19Ci0KLUNPTVB0
cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiBjcmVhdGVHRElSZW5kZXJUYXJnZXQoKQotewotICAgIGF1
dG8gdGFyZ2V0UHJvcGVydGllcyA9IHJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKLQotICAgIENP
TVB0cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9
IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEQ1JlbmRlclRhcmdldCgm
dGFyZ2V0UHJvcGVydGllcywgJnJlbmRlclRhcmdldCk7Ci0gICAgaWYgKCFyZW5kZXJUYXJnZXQg
fHwgIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJu
IHJlbmRlclRhcmdldDsKLX0KLQotQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBjcmVh
dGVCaXRtYXBSZW5kZXJUYXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsK
LSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgcmVuZGVyVGFyZ2V0ID0gR3JhcGhpY3ND
b250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXBS
ZW5kZXJUYXJnZXQ+IGJpdG1hcENvbnRleHQ7Ci0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdl
dC0+Q3JlYXRlQ29tcGF0aWJsZVJlbmRlclRhcmdldChudWxscHRyLCBudWxscHRyLCBudWxscHRy
LCBEMkQxX0NPTVBBVElCTEVfUkVOREVSX1RBUkdFVF9PUFRJT05TX0dESV9DT01QQVRJQkxFLCAm
Yml0bWFwQ29udGV4dCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHJldHVybiBiaXRtYXBDb250ZXh0OwotfQotCi1DT01QdHI8SUQyRDFC
aXRtYXBSZW5kZXJUYXJnZXQ+IGNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShjb25zdCBJ
bnRTaXplJiBzaXplLCBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBmbG9hdCBkZXZp
Y2VTY2FsZUZhY3RvcikKLXsKLSAgICBVTlVTRURfUEFSQU0oZGV2aWNlU2NhbGVGYWN0b3IpOwot
Ci0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgICAgIHJlbmRlclRhcmdldCA9IEdyYXBoaWNz
Q29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFw
UmVuZGVyVGFyZ2V0PiBiaXRtYXBDb250ZXh0OwotICAgIGF1dG8gZGVzaXJlZFNpemUgPSBEMkQx
OjpTaXplRihzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgIEQyRDFfU0laRV9VIHBp
eGVsU2l6ZSA9IEQyRDE6OlNpemVVKGNsYW1wVG88dW5zaWduZWQ+KGRldmljZVNjYWxlRmFjdG9y
ICogc2l6ZS53aWR0aCgpKSwgY2xhbXBUbzx1bnNpZ25lZD4oZGV2aWNlU2NhbGVGYWN0b3IgKiBz
aXplLmhlaWdodCgpKSk7Ci0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlQ29t
cGF0aWJsZVJlbmRlclRhcmdldCgmZGVzaXJlZFNpemUsICZwaXhlbFNpemUsIG51bGxwdHIsIEQy
RDFfQ09NUEFUSUJMRV9SRU5ERVJfVEFSR0VUX09QVElPTlNfR0RJX0NPTVBBVElCTEUsICZiaXRt
YXBDb250ZXh0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgcmV0dXJuIGJpdG1hcENvbnRleHQ7Ci19Ci0KLUNPTVB0cjxJRFhHSVN1cmZh
Y2UxPiBjcmVhdGVEWEdJU3VyZmFjZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplLCBJRDNEMTFE
ZXZpY2UxKiBkaXJlY3RYRGV2aWNlLCBib29sIGNyb3NzUHJvY2VzcykKLXsKLSAgICBpZiAoIWRp
cmVjdFhEZXZpY2UpCi0gICAgICAgIGRpcmVjdFhEZXZpY2UgPSBEaXJlY3QyRDo6ZGVmYXVsdERp
cmVjdFhEZXZpY2UoKTsKLQotICAgIC8vIENyZWF0ZSB0aGUgcmVuZGVyIHRhcmdldCB0ZXh0dXJl
Ci0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKLSAgICBaZXJvTWVtb3J5KCZkZXNjLCBz
aXplb2YoZGVzYykpOwotICAgIGRlc2MuV2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgZGVzYy5I
ZWlnaHQgPSBzaXplLmhlaWdodCgpOwotICAgIGRlc2MuTWlwTGV2ZWxzID0gMTsKLSAgICBkZXNj
LkFycmF5U2l6ZSA9IDE7Ci0gICAgZGVzYy5Gb3JtYXQgPSB3ZWJraXRUZXh0dXJlRm9ybWF0Owot
ICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VT
QUdFX0RFRkFVTFQ7Ci0gICAgZGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1JFTkRFUl9UQVJH
RVQgfCBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKLSAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdz
ID0gMDsKLSAgICBkZXNjLk1pc2NGbGFncyA9IEQzRDExX1JFU09VUkNFX01JU0NfR0RJX0NPTVBB
VElCTEU7Ci0gICAgaWYgKGNyb3NzUHJvY2VzcykKLSAgICAgICAgZGVzYy5NaXNjRmxhZ3MgfD0g
RDNEMTFfUkVTT1VSQ0VfTUlTQ19TSEFSRURfTlRIQU5ETEUgfCBEM0QxMV9SRVNPVVJDRV9NSVND
X1NIQVJFRF9LRVlFRE1VVEVYOwotCi0gICAgQ09NUHRyPElEM0QxMVRleHR1cmUyRD4gdGV4dHVy
ZTsKLSAgICBIUkVTVUxUIGhyID0gZGlyZWN0WERldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNj
LCBudWxscHRyLCAmdGV4dHVyZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0KLSAgICBDT01QdHI8SURYR0lTdXJmYWNlMT4gc3VyZmFjZTsKLSAgICBociA9IHRleHR1cmUt
PlF1ZXJ5SW50ZXJmYWNlKCZzdXJmYWNlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQo
aHIpKTsKLQotICAgIHJldHVybiBzdXJmYWNlOwotfQotCi1DT01QdHI8SUQyRDFSZW5kZXJUYXJn
ZXQ+IGNyZWF0ZVN1cmZhY2VSZW5kZXJUYXJnZXQoSURYR0lTdXJmYWNlMSogc3VyZmFjZSkKLXsK
LSAgICBhdXRvIHBpeGVsRm9ybWF0ID0gRDJEMTo6UGl4ZWxGb3JtYXQod2Via2l0VGV4dHVyZUZv
cm1hdCwgd2Via2l0QWxwaGFNb2RlKTsKLQotICAgIGF1dG8gcHJvcGVydGllcyA9IEQyRDE6OlJl
bmRlclRhcmdldFByb3BlcnRpZXMoRDJEMV9SRU5ERVJfVEFSR0VUX1RZUEVfREVGQVVMVCwKLSAg
ICAgICAgcGl4ZWxGb3JtYXQsIDAsIDAsIEQyRDFfUkVOREVSX1RBUkdFVF9VU0FHRV9HRElfQ09N
UEFUSUJMRSwgRDJEMV9GRUFUVVJFX0xFVkVMXzEwKTsKLQotICAgIENPTVB0cjxJRDJEMVJlbmRl
clRhcmdldD4gcmVuZGVyVGFyZ2V0OwotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6
OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRHhnaVN1cmZhY2VSZW5kZXJUYXJnZXQoc3VyZmFjZSwg
cHJvcGVydGllcywgJnJlbmRlclRhcmdldCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiByZW5kZXJUYXJnZXQ7Ci19Ci0KLXZv
aWQgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihJRDJEMUJpdG1hcCogZnJvbSwgSUQy
RDFCaXRtYXAqIHRvLCBjb25zdCBJbnRTaXplJiBzb3VyY2VPZmZzZXQsIGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IEludFNpemUmIGRlc3RPZmZzZXQpCi17Ci0gICAgSW50U2l6ZSBzb3VyY2VC
aXRtYXBTaXplID0gZnJvbS0+R2V0UGl4ZWxTaXplKCk7Ci0gICAgaWYgKHNvdXJjZUJpdG1hcFNp
emUuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFNpemUgdGFyZ2V0Qml0bWFw
U2l6ZSA9IHRvLT5HZXRQaXhlbFNpemUoKTsKLSAgICBpZiAodGFyZ2V0Qml0bWFwU2l6ZS5pc1pl
cm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCBzb3VyY2VSZWN0KHNvdXJjZU9m
ZnNldC53aWR0aCgpLCBzb3VyY2VPZmZzZXQuaGVpZ2h0KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSk7Ci0gICAgSW50UmVjdCB0YXJnZXRSZWN0KGRlc3RPZmZzZXQud2lkdGgoKSwgZGVz
dE9mZnNldC5oZWlnaHQoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLQotICAgIElu
dFJlY3Qgc291cmNlQml0bWFwUmVjdChJbnRQb2ludCgpLCBzb3VyY2VCaXRtYXBTaXplKTsKLSAg
ICBJbnRSZWN0IHRhcmdldEJpdG1hcFJlY3QoSW50UG9pbnQoKSwgdGFyZ2V0Qml0bWFwU2l6ZSk7
Ci0KLSAgICBzb3VyY2VSZWN0LmludGVyc2VjdChzb3VyY2VCaXRtYXBSZWN0KTsKLSAgICB0YXJn
ZXRSZWN0LmludGVyc2VjdCh0YXJnZXRCaXRtYXBSZWN0KTsKLQotICAgIEQyRDFfUkVDVF9VIGQy
ZFNvdXJjZVJlY3QgPSBEMkQxOjpSZWN0VShzb3VyY2VSZWN0LngoKSwgc291cmNlUmVjdC55KCks
IHNvdXJjZVJlY3QueCgpICsgdGFyZ2V0UmVjdC53aWR0aCgpLCBzb3VyY2VSZWN0LnkoKSArIHRh
cmdldFJlY3QuaGVpZ2h0KCkpOwotICAgIGF1dG8gb2Zmc2V0ID0gRDJEMTo6UG9pbnQyVShkZXN0
T2Zmc2V0LndpZHRoKCksIGRlc3RPZmZzZXQuaGVpZ2h0KCkpOwotCi0gICAgSFJFU1VMVCBociA9
IHRvLT5Db3B5RnJvbUJpdG1hcCgmb2Zmc2V0LCBmcm9tLCAmZDJkU291cmNlUmVjdCk7Ci0gICAg
QVNTRVJUKFNVQ0NFRURFRChocikpOwotfQotCi12b2lkIHdyaXRlRGlhZ25vc3RpY1BOR1RvUGF0
aChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBJRDJEMUJpdG1hcCogYml0bWFwLCBM
UENXU1RSIGZpbGVOYW1lKQotewotICAgIENPTVB0cjxJV0lDQml0bWFwRW5jb2Rlcj4gd2ljQml0
bWFwRW5jb2RlcjsKLSAgICBIUkVTVUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3Rl
bUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZUVuY29kZXIoR1VJRF9Db250YWluZXJGb3JtYXRQbmcs
IG51bGxwdHIsICZ3aWNCaXRtYXBFbmNvZGVyKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0KLSAgICBEV09SRCBtb2RlID0gU1RHTV9DUkVBVEUgfCBTVEdNX1JFQURXUklURSB8IFNUR01f
U0hBUkVfREVOWV9XUklURTsKLSAgICBDT01QdHI8SVN0cmVhbT4gc3RyZWFtOwotICAgIGhyID0g
OjpTSENyZWF0ZVN0cmVhbU9uRmlsZUV4KGZpbGVOYW1lLCBtb2RlLCBGSUxFX0FUVFJJQlVURV9O
T1JNQUwsIFRSVUUsIG51bGxwdHIsICZzdHJlYW0pOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIp
KTsKLQotICAgIGhyID0gd2ljQml0bWFwRW5jb2Rlci0+SW5pdGlhbGl6ZShzdHJlYW0uZ2V0KCks
IFdJQ0JpdG1hcEVuY29kZXJOb0NhY2hlKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0K
LSAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRW5jb2RlPiB3aWNGcmFtZUVuY29kZTsKLSAgICBo
ciA9IHdpY0JpdG1hcEVuY29kZXItPkNyZWF0ZU5ld0ZyYW1lKCZ3aWNGcmFtZUVuY29kZSwgbnVs
bHB0cik7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgaHIgPSB3aWNGcmFtZUVu
Y29kZS0+SW5pdGlhbGl6ZShudWxscHRyKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0K
LSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBkMmREZXZpY2VDb250ZXh0OwotICAgIGhy
ID0gcmVuZGVyVGFyZ2V0LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDJEMURldmljZUNvbnRl
eHQpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmQyZERldmljZUNvbnRleHQpKTsKLSAgICBB
U1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBDT01QdHI8SUQyRDFEZXZpY2U+IGQyZERldmlj
ZTsKLSAgICBkMmREZXZpY2VDb250ZXh0LT5HZXREZXZpY2UoJmQyZERldmljZSk7Ci0KLSAgICBD
T01QdHI8SVdJQ0ltYWdlRW5jb2Rlcj4gaW1hZ2VFbmNvZGVyOwotICAgIGhyID0gSW1hZ2VEZWNv
ZGVyRGlyZWN0MkQ6OnN5c3RlbUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZUltYWdlRW5jb2Rlcihk
MmREZXZpY2UuZ2V0KCksICZpbWFnZUVuY29kZXIpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIp
KTsKLQotICAgIGhyID0gaW1hZ2VFbmNvZGVyLT5Xcml0ZUZyYW1lKGJpdG1hcCwgd2ljRnJhbWVF
bmNvZGUuZ2V0KCksIG51bGxwdHIpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAg
IGhyID0gd2ljRnJhbWVFbmNvZGUtPkNvbW1pdCgpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIp
KTsKLQotICAgIGhyID0gd2ljQml0bWFwRW5jb2Rlci0+Q29tbWl0KCk7Ci0gICAgQVNTRVJUKFNV
Q0NFRURFRChocikpOwotCi0gICAgaHIgPSBzdHJlYW0tPkNvbW1pdChTVEdDX0RFRkFVTFQpOwot
ICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLX0KLQotc3RhdGljIElEM0QxMURldmljZUNvbnRl
eHQxKiBpbW1lZGlhdGVDb250ZXh0ID0gbnVsbHB0cjsKLQotSUQzRDExRGV2aWNlQ29udGV4dDEq
IGR4Z2lJbW1lZGlhdGVDb250ZXh0KCkKLXsKLSAgICBpZiAoIWltbWVkaWF0ZUNvbnRleHQpCi0g
ICAgICAgIGRlZmF1bHREaXJlY3RYRGV2aWNlKCk7Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChpbW1l
ZGlhdGVDb250ZXh0KTsKLSAgICByZXR1cm4gaW1tZWRpYXRlQ29udGV4dDsKLX0KLQotSUQzRDEx
RGV2aWNlMSogZGVmYXVsdERpcmVjdFhEZXZpY2UoKQotewotICAgIHN0YXRpYyBJRDNEMTFEZXZp
Y2UxKiBkZWZhdWx0RGV2aWNlMSA9IG51bGxwdHI7Ci0KLSAgICBpZiAoIWRlZmF1bHREZXZpY2Ux
KSB7Ci0gICAgICAgIGludCBkZXZpY2VGbGFncyA9IEQzRDExX0NSRUFURV9ERVZJQ0VfQkdSQV9T
VVBQT1JUOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgZGV2aWNlRmxhZ3MgfD0gRDNEMTFfQ1JF
QVRFX0RFVklDRV9ERUJVRzsKLSNlbmRpZgotCi0gICAgICAgIElEM0QxMURldmljZSogZGVmYXVs
dERldmljZSA9IG51bGxwdHI7Ci0gICAgICAgIEQzRF9GRUFUVVJFX0xFVkVMIGZlYXR1cmVMZXZl
bCA9IHsgfTsKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCogaW1tZWRpYXRlRGV2aWNlQ29u
dGV4dCA9IG51bGxwdHI7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBEM0QxMUNyZWF0ZURldmljZShu
dWxscHRyLCBEM0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsIG51bGxwdHIsIGRldmljZUZsYWdzLCBu
dWxscHRyLCAwLCBEM0QxMV9TREtfVkVSU0lPTiwgJmRlZmF1bHREZXZpY2UsICZmZWF0dXJlTGV2
ZWwsICZpbW1lZGlhdGVEZXZpY2VDb250ZXh0KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VD
Q0VFREVEKGhyKSk7Ci0KLSAgICAgICAgaHIgPSBkZWZhdWx0RGV2aWNlLT5RdWVyeUludGVyZmFj
ZSgmZGVmYXVsdERldmljZTEpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKLSAgICAgICAgZGVmYXVsdERldmljZTEtPkFkZFJlZigpOwotCi0gICAgICAgIGhyID0gaW1t
ZWRpYXRlRGV2aWNlQ29udGV4dC0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQzRDExRGV2aWNl
Q29udGV4dDEpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmltbWVkaWF0ZUNvbnRleHQpKTsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIGltbWVkaWF0
ZUNvbnRleHQtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBkZWZhdWx0RGV2aWNlMTsK
LX0KLQotYm9vbCBjcmVhdGVEZXZpY2VBbmRDb250ZXh0KENPTVB0cjxJRDNEMTFEZXZpY2UxPiYg
ZDNkRGV2aWNlLCBDT01QdHI8SUQzRDExRGV2aWNlQ29udGV4dDE+JiBpbW1lZGlhdGVDb250ZXh0
KQotewotICAgIGludCBkZXZpY2VGbGFncyA9IEQzRDExX0NSRUFURV9ERVZJQ0VfQkdSQV9TVVBQ
T1JUOwotI2lmbmRlZiBOREVCVUcKLSAgICBkZXZpY2VGbGFncyB8PSBEM0QxMV9DUkVBVEVfREVW
SUNFX0RFQlVHOwotI2VuZGlmCi0KLSAgICBEM0RfRkVBVFVSRV9MRVZFTCBmZWF0dXJlTGV2ZWwg
PSB7IH07Ci0gICAgSUQzRDExRGV2aWNlKiBkZWZhdWx0RGV2aWNlID0gbnVsbHB0cjsKLSAgICBJ
RDNEMTFEZXZpY2VDb250ZXh0KiBpbW1lZGlhdGVEZXZpY2VDb250ZXh0ID0gbnVsbHB0cjsKLSAg
ICBIUkVTVUxUIGhyID0gOjpEM0QxMUNyZWF0ZURldmljZShudWxscHRyLCBEM0RfRFJJVkVSX1RZ
UEVfSEFSRFdBUkUsIG51bGxwdHIsIGRldmljZUZsYWdzLCBudWxscHRyLCAwLCBEM0QxMV9TREtf
VkVSU0lPTiwgJmRlZmF1bHREZXZpY2UsICZmZWF0dXJlTGV2ZWwsICZpbW1lZGlhdGVEZXZpY2VD
b250ZXh0KTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0g
ZGVmYXVsdERldmljZS0+UXVlcnlJbnRlcmZhY2UoJmQzZERldmljZSk7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgZGVmYXVsdERldmljZS0+UmVsZWFzZSgpOwotCi0g
ICAgaHIgPSBpbW1lZGlhdGVEZXZpY2VDb250ZXh0LT5RdWVyeUludGVyZmFjZSgmaW1tZWRpYXRl
Q29udGV4dCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgaW1tZWRp
YXRlQ29udGV4dC0+UmVsZWFzZSgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1DT01QdHI8SURY
R0lEZXZpY2UxPiB0b0RYR0lEZXZpY2UoY29uc3QgQ09NUHRyPElEM0QxMURldmljZTE+JiBkM2RE
ZXZpY2UpCi17Ci0gICAgaWYgKCFkM2REZXZpY2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgQ09NUHRyPElEWEdJRGV2aWNlMT4gZHhnaURldmljZTsKLSAgICBIUkVTVUxUIGhyID0g
ZDNkRGV2aWNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRFhHSURldmljZTEpLCAodm9pZCAq
KikmZHhnaURldmljZSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHJldHVybiBkeGdpRGV2aWNlOwotfQotCi1DT01QdHI8SURYR0lGYWN0
b3J5Mj4gZmFjdG9yeUZvckRYR0lEZXZpY2UoY29uc3QgQ09NUHRyPElEWEdJRGV2aWNlMT4mIGRl
dmljZSkKLXsKLSAgICBpZiAoIWRldmljZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBDT01QdHI8SURYR0lBZGFwdGVyPiBhZGFwdG9yOwotICAgIEhSRVNVTFQgaHIgPSBkZXZpY2Ut
PkdldFBhcmVudChfX3V1aWRvZihJRFhHSUFkYXB0ZXIpLCByZWludGVycHJldF9jYXN0PHZvaWQq
Kj4oJmFkYXB0b3IpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAg
IENPTVB0cjxJRFhHSUZhY3Rvcnk+IGZhY3Rvcnk7Ci0gICAgaHIgPSBhZGFwdG9yLT5HZXRQYXJl
bnQoX191dWlkb2YoSURYR0lGYWN0b3J5KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZmYWN0
b3J5KSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBDT01QdHI8
SURYR0lGYWN0b3J5Mj4gZmFjdG9yeTI7Ci0gICAgaHIgPSBmYWN0b3J5LT5RdWVyeUludGVyZmFj
ZSgmZmFjdG9yeTIpOyAKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAK
LSAgICByZXR1cm4gZmFjdG9yeTI7Ci19Ci0KLUNPTVB0cjxJRFhHSVN3YXBDaGFpbj4gc3dhcENo
YWluT2ZTaXplRm9yV2luZG93QW5kRGV2aWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUs
IEhXTkQgd2luZG93LCBjb25zdCBDT01QdHI8SUQzRDExRGV2aWNlMT4mIGRldmljZSkKLXsKLSAg
ICBpZiAoIWRldmljZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBEWEdJX1NXQVBf
Q0hBSU5fREVTQzEgc3dhcENoYWluRGVzY3JpcHRpb247Ci0gICAgOjpaZXJvTWVtb3J5KCZzd2Fw
Q2hhaW5EZXNjcmlwdGlvbiwgc2l6ZW9mKHN3YXBDaGFpbkRlc2NyaXB0aW9uKSk7Ci0gICAgc3dh
cENoYWluRGVzY3JpcHRpb24uV2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgc3dhcENoYWluRGVz
Y3JpcHRpb24uSGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBzd2FwQ2hhaW5EZXNjcmlwdGlv
bi5Gb3JtYXQgPSB3ZWJraXRUZXh0dXJlRm9ybWF0OwotICAgIHN3YXBDaGFpbkRlc2NyaXB0aW9u
LlNhbXBsZURlc2MuQ291bnQgPSAxOwotICAgIHN3YXBDaGFpbkRlc2NyaXB0aW9uLlNhbXBsZURl
c2MuUXVhbGl0eSA9IDA7Ci0gICAgc3dhcENoYWluRGVzY3JpcHRpb24uQnVmZmVyVXNhZ2UgPSBE
WEdJX1VTQUdFX1NIQURFUl9JTlBVVCB8IERYR0lfVVNBR0VfUkVOREVSX1RBUkdFVF9PVVRQVVQ7
Ci0gICAgc3dhcENoYWluRGVzY3JpcHRpb24uQnVmZmVyQ291bnQgPSAxOwotICAgIHN3YXBDaGFp
bkRlc2NyaXB0aW9uLkZsYWdzID0gRFhHSV9TV0FQX0NIQUlOX0ZMQUdfR0RJX0NPTVBBVElCTEU7
Ci0KLSAgICBhdXRvIGZhY3RvcnkgPSBEaXJlY3QyRDo6ZmFjdG9yeUZvckRYR0lEZXZpY2UoRGly
ZWN0MkQ6OnRvRFhHSURldmljZShkZXZpY2UpKTsKLQotICAgIENPTVB0cjxJRFhHSVN3YXBDaGFp
bjE+IHN3YXBDaGFpbjE7Ci0gICAgSFJFU1VMVCBociA9IGZhY3RvcnktPkNyZWF0ZVN3YXBDaGFp
bkZvckh3bmQoZGV2aWNlLmdldCgpLCB3aW5kb3csICZzd2FwQ2hhaW5EZXNjcmlwdGlvbiwgbnVs
bHB0ciwgbnVsbHB0ciwgJnN3YXBDaGFpbjEpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SURYR0lTd2FwQ2hhaW4+IHN3YXBD
aGFpbihRdWVyeSwgc3dhcENoYWluMSk7Ci0gICAgcmV0dXJuIHN3YXBDaGFpbjsKLX0KLQotQ09N
UHRyPElEMkQxQml0bWFwPiBjcmVhdGVCaXRtYXBDb3B5RnJvbUNvbnRleHQoSUQyRDFCaXRtYXBS
ZW5kZXJUYXJnZXQqIGJpdG1hcFRhcmdldCkKLXsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGN1
cnJlbnRDYW52YXM7Ci0gICAgSFJFU1VMVCBociA9IGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZj
dXJyZW50Q2FudmFzKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgYXV0byBiaXRtYXBDcmVhdGVQcm9wZXJ0aWVzID0gYml0bWFwUHJvcGVy
dGllcygpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7Ci0gICAgRDJEMV9TSVpF
X1UgYml0bWFwU2l6ZSA9IGN1cnJlbnRDYW52YXMtPkdldFBpeGVsU2l6ZSgpOwotICAgIGhyID0g
Yml0bWFwVGFyZ2V0LT5DcmVhdGVCaXRtYXAoYml0bWFwU2l6ZSwgYml0bWFwQ3JlYXRlUHJvcGVy
dGllcywgJmJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGF1dG8gdGFyZ2V0UG9zID0gRDJEMTo6UG9pbnQyVSgpOwotICAgIEQy
RDFfUkVDVF9VIGRhdGFSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwgYml0bWFwU2l6ZS53aWR0aCwg
Yml0bWFwU2l6ZS5oZWlnaHQpOwotICAgIGhyID0gYml0bWFwLT5Db3B5RnJvbUJpdG1hcCgmdGFy
Z2V0UG9zLCBjdXJyZW50Q2FudmFzLmdldCgpLCAmZGF0YVJlY3QpOwotICAgIGlmICghU1VDQ0VF
REVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGJpdG1hcDsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgRGlyZWN0MkQKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI4
NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0
aWxpdGllcy5oCShub25leGlzdGVudCkKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04g
ZW1iZWRkZWQgc3lzdGVtcwotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c1R5cGVzLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtRXhwb3J0
TWFjcm9zLmgiCi0KLWludGVyZmFjZSBJRDJEMUJpdG1hcDsKLWludGVyZmFjZSBJRDJEMUJpdG1h
cFJlbmRlclRhcmdldDsKLWludGVyZmFjZSBJRDJEMURDUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNl
IElEMkQxUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNlIElEM0QxMURldmljZTE7Ci1pbnRlcmZhY2Ug
SUQzRDExRGV2aWNlQ29udGV4dDE7Ci1pbnRlcmZhY2UgSUQzRDExUmVuZGVyVGFyZ2V0VmlldzsK
LWludGVyZmFjZSBJRFhHSURldmljZTE7Ci1pbnRlcmZhY2UgSURYR0lGYWN0b3J5MjsKLWludGVy
ZmFjZSBJRFhHSVN3YXBDaGFpbjsKLWludGVyZmFjZSBJRFhHSVN1cmZhY2UxOwotaW50ZXJmYWNl
IElXSUNCaXRtYXBTb3VyY2U7Ci1pbnRlcmZhY2UgSVdJQ0JpdG1hcDsKLQotc3RydWN0IEQyRDFf
QklUTUFQX1BST1BFUlRJRVM7Ci1zdHJ1Y3QgRDJEMV9QSVhFTF9GT1JNQVQ7Ci1zdHJ1Y3QgRDJE
MV9SRU5ERVJfVEFSR0VUX1BST1BFUlRJRVM7Ci1zdHJ1Y3QgRDNEMTFfVklFV1BPUlQ7Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0U2l6ZTsK
LWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBJbnRTaXplOwotCi1uYW1lc3BhY2UgRGlyZWN0MkQgewot
Ci1HVUlEIHdpY0JpdG1hcEZvcm1hdCgpOwotRDJEMV9QSVhFTF9GT1JNQVQgcGl4ZWxGb3JtYXQo
KTsgLy8gQkdSQQotRDJEMV9QSVhFTF9GT1JNQVQgcGl4ZWxGb3JtYXRGb3JTb2Z0d2FyZU1hbmlw
dWxhdGlvbigpOyAvLyBSR0JBCi1EMkQxX0JJVE1BUF9QUk9QRVJUSUVTIGJpdG1hcFByb3BlcnRp
ZXMoKTsKLUQyRDFfUkVOREVSX1RBUkdFVF9QUk9QRVJUSUVTIHJlbmRlclRhcmdldFByb3BlcnRp
ZXMoKTsKLQotdm9pZCBpblBsYWNlU3dpenpsZSh1aW50OF90KiBieXRlRGF0YSwgdW5zaWduZWQg
bGVuZ3RoLCBib29sIGFwcGx5UHJlbXVsdGlwbGljYXRpb24gPSBmYWxzZSk7Ci0KLUludFNpemUg
Yml0bWFwU2l6ZShJV0lDQml0bWFwU291cmNlKik7Ci1GbG9hdFNpemUgYml0bWFwU2l6ZShJRDJE
MUJpdG1hcCopOwotRmxvYXRTaXplIGJpdG1hcFJlc29sdXRpb24oSVdJQ0JpdG1hcFNvdXJjZSop
OwotRmxvYXRTaXplIGJpdG1hcFJlc29sdXRpb24oSUQyRDFCaXRtYXAqKTsKLUZsb2F0U2l6ZSBi
aXRtYXBSZXNvbHV0aW9uKElEMkQxUmVuZGVyVGFyZ2V0Kik7Ci11bnNpZ25lZCBiaXRzUGVyUGl4
ZWwoR1VJRCk7Ci1DT01QdHI8SUQyRDFCaXRtYXA+IGNyZWF0ZUJpdG1hcChJRDJEMVJlbmRlclRh
cmdldCosIGNvbnN0IEludFNpemUmKTsKLUNPTVB0cjxJV0lDQml0bWFwPiBjcmVhdGVXaWNCaXRt
YXAoY29uc3QgSW50U2l6ZSYpOwotQ09NUHRyPElXSUNCaXRtYXA+IGNyZWF0ZURpcmVjdDJESW1h
Z2VTdXJmYWNlV2l0aERhdGEodm9pZCogZGF0YSwgY29uc3QgSW50U2l6ZSYsIHVuc2lnbmVkIHN0
cmlkZSk7Ci1DT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IGNyZWF0ZVJlbmRlclRhcmdldEZyb21X
SUNCaXRtYXAoSVdJQ0JpdG1hcCopOwotQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBj
cmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUoY29uc3QgSW50U2l6ZSYsIElEMkQxUmVuZGVy
VGFyZ2V0KiA9IG51bGxwdHIsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gMS4wKTsKLUNPTVB0
cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gY3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0KElEMkQx
UmVuZGVyVGFyZ2V0KiA9IG51bGxwdHIpOwotQ09NUHRyPElEMkQxRENSZW5kZXJUYXJnZXQ+IGNy
ZWF0ZUdESVJlbmRlclRhcmdldCgpOwotQ09NUHRyPElEWEdJU3VyZmFjZTE+IGNyZWF0ZURYR0lT
dXJmYWNlT2ZTaXplKGNvbnN0IEludFNpemUmLCBJRDNEMTFEZXZpY2UxKiwgYm9vbCBjcm9zc1By
b2Nlc3MpOwotQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBjcmVhdGVTdXJmYWNlUmVuZGVyVGFy
Z2V0KElEWEdJU3VyZmFjZTEqKTsKLUNPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlQml0bWFwQ29w
eUZyb21Db250ZXh0KElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0Kik7Ci0KLXZvaWQgY29weVJlY3RG
cm9tT25lU3VyZmFjZVRvQW5vdGhlcihJRDJEMUJpdG1hcCogZnJvbSwgSUQyRDFCaXRtYXAqIHRv
LCBjb25zdCBJbnRTaXplJiBzb3VyY2VPZmZzZXQsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRT
aXplJiBkZXN0T2Zmc2V0ID0gSW50U2l6ZSgpKTsKLQotV0VCQ09SRV9FWFBPUlQgSUQzRDExRGV2
aWNlQ29udGV4dDEqIGR4Z2lJbW1lZGlhdGVDb250ZXh0KCk7Ci1XRUJDT1JFX0VYUE9SVCBJRDNE
MTFEZXZpY2UxKiBkZWZhdWx0RGlyZWN0WERldmljZSgpOwotV0VCQ09SRV9FWFBPUlQgYm9vbCBj
cmVhdGVEZXZpY2VBbmRDb250ZXh0KENPTVB0cjxJRDNEMTFEZXZpY2UxPiYsIENPTVB0cjxJRDNE
MTFEZXZpY2VDb250ZXh0MT4mKTsKLVdFQkNPUkVfRVhQT1JUIENPTVB0cjxJRFhHSURldmljZTE+
IHRvRFhHSURldmljZShjb25zdCBDT01QdHI8SUQzRDExRGV2aWNlMT4mKTsKLVdFQkNPUkVfRVhQ
T1JUIENPTVB0cjxJRFhHSUZhY3RvcnkyPiBmYWN0b3J5Rm9yRFhHSURldmljZShjb25zdCBDT01Q
dHI8SURYR0lEZXZpY2UxPiYpOwotV0VCQ09SRV9FWFBPUlQgQ09NUHRyPElEWEdJU3dhcENoYWlu
PiBzd2FwQ2hhaW5PZlNpemVGb3JXaW5kb3dBbmREZXZpY2UoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYsIEhXTkQsIGNvbnN0IENPTVB0cjxJRDNEMTFEZXZpY2UxPiYpOwotCi12b2lkIHdyaXRlRGlh
Z25vc3RpY1BOR1RvUGF0aChJRDJEMVJlbmRlclRhcmdldCosIElEMkQxQml0bWFwKiwgTFBDV1NU
UiBmaWxlTmFtZSk7Ci0KLX0gLy8gbmFtZXNwYWNlIERpcmVjdDJECi0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRp
bGl0aWVzLmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0x
LDI0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEaXJlY3RXcml0ZVV0aWxpdGllcy5o
IgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSA8ZHdyaXRlXzMuaD4KLQotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLW5hbWVzcGFjZSBEaXJlY3RXcml0ZSB7Ci0KLUlEV3JpdGVGYWN0b3J5NSogZmFj
dG9yeSgpCi17Ci0gICAgc3RhdGljIElEV3JpdGVGYWN0b3J5NSogZGlyZWN0V3JpdGVGYWN0b3J5
ID0gbnVsbHB0cjsKLSAgICBpZiAoIWRpcmVjdFdyaXRlRmFjdG9yeSkgewotICAgICAgICBIUkVT
VUxUIGhyID0gRFdyaXRlQ3JlYXRlRmFjdG9yeShEV1JJVEVfRkFDVE9SWV9UWVBFX1NIQVJFRCwg
X191dWlkb2YoZGlyZWN0V3JpdGVGYWN0b3J5KSwgcmVpbnRlcnByZXRfY2FzdDxJVW5rbm93bioq
PigmZGlyZWN0V3JpdGVGYWN0b3J5KSk7Ci0gICAgICAgIGRpcmVjdFdyaXRlRmFjdG9yeS0+QWRk
UmVmKCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIH0KLQot
ICAgIHJldHVybiBkaXJlY3RXcml0ZUZhY3Rvcnk7Ci19Ci0KLUlEV3JpdGVHZGlJbnRlcm9wKiBn
ZGlJbnRlcm9wKCkKLXsKLSAgICBzdGF0aWMgSURXcml0ZUdkaUludGVyb3AqIGRpcmVjdFdyaXRl
R2RpSW50ZXJvcCA9IG51bGxwdHI7Ci0gICAgaWYgKCFkaXJlY3RXcml0ZUdkaUludGVyb3ApIHsK
LSAgICAgICAgSFJFU1VMVCBociA9IGZhY3RvcnkoKS0+R2V0R2RpSW50ZXJvcCgmZGlyZWN0V3Jp
dGVHZGlJbnRlcm9wKTsKLSAgICAgICAgZGlyZWN0V3JpdGVHZGlJbnRlcm9wLT5BZGRSZWYoKTsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGRpcmVjdFdyaXRlR2RpSW50ZXJvcDsKLX0KLQotc3RhdGljIElEV3JpdGVJbk1lbW9yeUZv
bnRGaWxlTG9hZGVyKiBtZW1vcnlGb250TG9hZGVyKCkKLXsKLSAgICBzdGF0aWMgSURXcml0ZUlu
TWVtb3J5Rm9udEZpbGVMb2FkZXIqIG1lbW9yeUZvbnRMb2FkZXIgPSBudWxscHRyOwotICAgIGlm
ICghbWVtb3J5Rm9udExvYWRlcikgewotICAgICAgICBIUkVTVUxUIGhyID0gZmFjdG9yeSgpLT5D
cmVhdGVJbk1lbW9yeUZvbnRGaWxlTG9hZGVyKCZtZW1vcnlGb250TG9hZGVyKTsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIG1lbW9yeUZvbnRMb2FkZXIt
PkFkZFJlZigpOwotCi0gICAgICAgIGhyID0gZmFjdG9yeSgpLT5SZWdpc3RlckZvbnRGaWxlTG9h
ZGVyKG1lbW9yeUZvbnRMb2FkZXIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQo
aHIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWVtb3J5Rm9udExvYWRlcjsKLX0KLQotc3RhdGlj
IElEV3JpdGVGb250U2V0QnVpbGRlcjEqIGZvbnRTZXRCdWlsZGVyKCkKLXsKLSAgICBzdGF0aWMg
SURXcml0ZUZvbnRTZXRCdWlsZGVyMSogZm9udFNldEJ1aWxkZXIgPSBudWxscHRyOwotICAgIGlm
ICghZm9udFNldEJ1aWxkZXIpIHsKLSAgICAgICAgSFJFU1VMVCBociA9IGZhY3RvcnkoKS0+Q3Jl
YXRlRm9udFNldEJ1aWxkZXIoJmZvbnRTZXRCdWlsZGVyKTsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIGZvbnRTZXRCdWlsZGVyLT5BZGRSZWYoKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZm9udFNldEJ1aWxkZXI7Ci19Ci0KLXN0YXRpYyBDT01QdHI8SURX
cml0ZUZvbnRTZXQ+IGZvbnRTZXQ7Ci1zdGF0aWMgQ09NUHRyPElEV3JpdGVGb250Q29sbGVjdGlv
bjE+IGZvbnRDb2xsZWN0aW9uOwotc3RhdGljIFVJTlQzMiBmb250Q291bnQgPSAwOwotCi1JRFdy
aXRlRm9udENvbGxlY3Rpb24xKiB3ZWJQcm9jZXNzRm9udENvbGxlY3Rpb24oKQotewotICAgIEhS
RVNVTFQgaHIgPSBTX09LOwotCi0gICAgaWYgKCFmb250U2V0KSB7Ci0gICAgICAgIGhyID0gZm9u
dFNldEJ1aWxkZXIoKS0+Q3JlYXRlRm9udFNldCgmZm9udFNldCk7Ci0gICAgICAgIGlmICghU1VD
Q0VFREVEKGhyKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGZvbnRD
b2xsZWN0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgaHIgPSBmYWN0b3J5KCktPkNyZWF0ZUZvbnRD
b2xsZWN0aW9uRnJvbUZvbnRTZXQoZm9udFNldC5nZXQoKSwgJmZvbnRDb2xsZWN0aW9uKTsKLSAg
ICAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAgICAgQVNTRVJUKGZvbnRDb2xsZWN0aW9uLT5HZXRGb250RmFtaWx5Q291bnQoKSA9PSBm
b250Q291bnQpOwotICAgIH0KLQotICAgIHJldHVybiBmb250Q29sbGVjdGlvbi5nZXQoKTsKLX0K
LQotSFJFU1VMVCBhZGRGb250RnJvbURhdGFUb1Byb2Nlc3NDb2xsZWN0aW9uKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgZm9udERhdGEpCi17Ci0gICAgQ09NUHRyPElEV3JpdGVGb250RmlsZT4gZm9u
dEZpbGU7Ci0gICAgSFJFU1VMVCBociA9IG1lbW9yeUZvbnRMb2FkZXIoKS0+Q3JlYXRlSW5NZW1v
cnlGb250RmlsZVJlZmVyZW5jZShmYWN0b3J5KCksIGZvbnREYXRhLmRhdGEoKSwgZm9udERhdGEu
c2l6ZSgpLCBudWxscHRyLCAmZm9udEZpbGUpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAg
ICAgICAgcmV0dXJuIGhyOwotCi0gICAgaHIgPSBmb250U2V0QnVpbGRlcigpLT5BZGRGb250Rmls
ZShmb250RmlsZS5nZXQoKSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1
cm4gaHI7Ci0KLSAgICBmb250U2V0ID0gbnVsbHB0cjsKLSAgICArK2ZvbnRDb3VudDsKLQotICAg
IHJldHVybiBocjsKLX0KLQotVmVjdG9yPHdjaGFyX3Q+IGZhbWlseU5hbWVGb3JMb2NhbGUoSURX
cml0ZUZvbnRGYW1pbHkqIGZvbnRGYW1pbHksIGNvbnN0IFZlY3Rvcjx3Y2hhcl90PiYgbG9jYWxl
TmFtZSkKLXsKLSAgICBDT01QdHI8SURXcml0ZUxvY2FsaXplZFN0cmluZ3M+IGZhbWlseU5hbWVz
OwotICAgIEhSRVNVTFQgaHIgPSBmb250RmFtaWx5LT5HZXRGYW1pbHlOYW1lcygmZmFtaWx5TmFt
ZXMpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgQk9P
TCBleGlzdHMgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsb2NhbGVJbmRleCA9IDA7Ci0gICAgaWYg
KCFsb2NhbGVOYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgaHIgPSBmYW1pbHlOYW1lcy0+RmluZExv
Y2FsZU5hbWUobG9jYWxlTmFtZS5kYXRhKCksICZsb2NhbGVJbmRleCwgJmV4aXN0cyk7Ci0KLSAg
ICBpZiAoU1VDQ0VFREVEKGhyKSAmJiAhZXhpc3RzKQotICAgICAgICBociA9IGZhbWlseU5hbWVz
LT5GaW5kTG9jYWxlTmFtZShMImVuLXVzIiwgJmxvY2FsZUluZGV4LCAmZXhpc3RzKTsKLQotICAg
IGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgdW5zaWduZWQgZmFt
aWx5TmFtZUxlbmd0aCA9IDA7Ci0gICAgaHIgPSBmYW1pbHlOYW1lcy0+R2V0U3RyaW5nTGVuZ3Ro
KGxvY2FsZUluZGV4LCAmZmFtaWx5TmFtZUxlbmd0aCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIp
KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgVmVjdG9yPHdjaGFyX3Q+IGZhbWlseU5hbWUo
ZmFtaWx5TmFtZUxlbmd0aCArIDEpOwotICAgIGhyID0gZmFtaWx5TmFtZXMtPkdldFN0cmluZyhs
b2NhbGVJbmRleCwgZmFtaWx5TmFtZS5kYXRhKCksIGZhbWlseU5hbWUuc2l6ZSgpKTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gZmFt
aWx5TmFtZTsKLX0KLQotQ09NUHRyPElEV3JpdGVGb250RmFtaWx5PiBmb250RmFtaWx5Rm9yQ29s
bGVjdGlvbihJRFdyaXRlRm9udENvbGxlY3Rpb24qIGZvbnRDb2xsZWN0aW9uLCBjb25zdCBWZWN0
b3I8d2NoYXJfdD4mIGxvY2FsZU5hbWUsIGNvbnN0IExPR0ZPTlQmIGxvZ0ZvbnQpCi17Ci0gICAg
Q09NUHRyPElEV3JpdGVGb250RmFtaWx5PiBmb250RmFtaWx5OwotCi0gICAgdW5zaWduZWQgZm9u
dEZhbWlseUNvdW50ID0gZm9udENvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHlDb3VudCgpOwotICAg
IGZvciAodW5zaWduZWQgZm9udEluZGV4ID0gMDsgZm9udEluZGV4IDwgZm9udEZhbWlseUNvdW50
OyArK2ZvbnRJbmRleCkgewotICAgICAgICBIUkVTVUxUIGhyID0gZm9udENvbGxlY3Rpb24tPkdl
dEZvbnRGYW1pbHkoZm9udEluZGV4LCAmZm9udEZhbWlseSk7Ci0gICAgICAgIGlmIChGQUlMRUQo
aHIpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgYXV0byBmYW1pbHlO
YW1lID0gZmFtaWx5TmFtZUZvckxvY2FsZShmb250RmFtaWx5LmdldCgpLCBsb2NhbGVOYW1lKTsK
LQotICAgICAgICBpZiAoIXdjc2NtcChsb2dGb250LmxmRmFjZU5hbWUsIGZhbWlseU5hbWUuZGF0
YSgpKSkKLSAgICAgICAgICAgIHJldHVybiBmb250RmFtaWx5OwotCi0gICAgICAgIGZvbnRGYW1p
bHkgPSBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1DT01QdHI8
SURXcml0ZUZvbnQ+IGNyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQoY29uc3QgTE9HRk9OVCYgbG9nRm9u
dCkKLXsKLSAgICBDT01QdHI8SURXcml0ZUZvbnRDb2xsZWN0aW9uPiBzeXN0ZW1Gb250Q29sbGVj
dGlvbjsKLSAgICBIUkVTVUxUIGhyID0gZmFjdG9yeSgpLT5HZXRTeXN0ZW1Gb250Q29sbGVjdGlv
bigmc3lzdGVtRm9udENvbGxlY3Rpb24pOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIFZlY3Rvcjx3Y2hhcl90PiBsb2NhbGVOYW1lKExPQ0FMRV9O
QU1FX01BWF9MRU5HVEgpOwotICAgIGludCBsb2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExv
Y2FsZU5hbWUobG9jYWxlTmFtZS5kYXRhKCksIExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwotICAg
IFJFTEVBU0VfQVNTRVJUKGxvY2FsZUxlbmd0aCA8PSBMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsK
LQotICAgIENPTVB0cjxJRFdyaXRlRm9udENvbGxlY3Rpb24xPiBjb2xsZWN0aW9uKFF1ZXJ5LCBz
eXN0ZW1Gb250Q29sbGVjdGlvbik7Ci0KLSAgICBDT01QdHI8SURXcml0ZUZvbnRGYW1pbHk+IGZv
bnRGYW1pbHkgPSBmb250RmFtaWx5Rm9yQ29sbGVjdGlvbihjb2xsZWN0aW9uLmdldCgpLCBsb2Nh
bGVOYW1lLCBsb2dGb250KTsKLSAgICBpZiAoIWZvbnRGYW1pbHkpIHsKLSAgICAgICAgY29sbGVj
dGlvbiA9IHdlYlByb2Nlc3NGb250Q29sbGVjdGlvbigpOwotICAgICAgICBmb250RmFtaWx5ID0g
Zm9udEZhbWlseUZvckNvbGxlY3Rpb24oY29sbGVjdGlvbi5nZXQoKSwgbG9jYWxlTmFtZSwgbG9n
Rm9udCk7Ci0gICAgfQotCi0gICAgaWYgKCFmb250RmFtaWx5KSB7Ci0gICAgICAgIC8vIEp1c3Qg
cmV0dXJuIHRoZSBmaXJzdCBzeXN0ZW0gZm9udC4KLSAgICAgICAgY29sbGVjdGlvbiA9IENPTVB0
cjxJRFdyaXRlRm9udENvbGxlY3Rpb24xPihRdWVyeSwgc3lzdGVtRm9udENvbGxlY3Rpb24pOwot
ICAgICAgICBociA9IGNvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHkoMCwgJmZvbnRGYW1pbHkpOwot
ICAgICAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0j
aWZuZGVmIE5ERUJVRwotICAgICAgICBhdXRvIGZhbWlseU5hbWUgPSBmYW1pbHlOYW1lRm9yTG9j
YWxlKGZvbnRGYW1pbHkuZ2V0KCksIGxvY2FsZU5hbWUpOwotICAgICAgICBVTlVTRURfVkFSSUFC
TEUoZmFtaWx5TmFtZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBEV1JJVEVfRk9OVF9XRUlHSFQg
d2VpZ2h0ID0gc3RhdGljX2Nhc3Q8RFdSSVRFX0ZPTlRfV0VJR0hUPihsb2dGb250LmxmV2VpZ2h0
KTsKLSAgICBEV1JJVEVfRk9OVF9TVFJFVENIIHN0cmV0Y2ggPSBzdGF0aWNfY2FzdDxEV1JJVEVf
Rk9OVF9TVFJFVENIPihsb2dGb250LmxmUXVhbGl0eSk7Ci0gICAgRFdSSVRFX0ZPTlRfU1RZTEUg
c3R5bGUgPSBsb2dGb250LmxmSXRhbGljID8gRFdSSVRFX0ZPTlRfU1RZTEVfSVRBTElDIDogRFdS
SVRFX0ZPTlRfU1RZTEVfTk9STUFMOwotCi0gICAgQ09NUHRyPElEV3JpdGVGb250PiBkd0ZvbnQ7
Ci0gICAgaHIgPSBmb250RmFtaWx5LT5HZXRGaXJzdE1hdGNoaW5nRm9udCh3ZWlnaHQsIHN0cmV0
Y2gsIHN0eWxlLCAmZHdGb250KTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBy
ZXR1cm4gZHdGb250OwotfQotCi1EV1JJVEVfRk9OVF9XRUlHSFQgZm9udFdlaWdodChjb25zdCBG
b250UGxhdGZvcm1EYXRhJikKLXsKLSAgICByZXR1cm4gRFdSSVRFX0ZPTlRfV0VJR0hUX1JFR1VM
QVI7Ci19Ci0KLURXUklURV9GT05UX1NUWUxFIGZvbnRTdHlsZShjb25zdCBGb250UGxhdGZvcm1E
YXRhJikKLXsKLSAgICByZXR1cm4gRFdSSVRFX0ZPTlRfU1RZTEVfTk9STUFMOwotfQotCi1EV1JJ
VEVfRk9OVF9TVFJFVENIIGZvbnRTdHJldGNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKQotewot
ICAgIHJldHVybiBEV1JJVEVfRk9OVF9TVFJFVENIX05PUk1BTDsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgRGlyZWN0V3JpdGUKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNF
KERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Rp
cmVjdFdyaXRlVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI4NzgwMykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxp
dGllcy5oCShub25leGlzdGVudCkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShESVJF
Q1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0ci5oIgotCi1pbnRlcmZhY2UgSURXcml0ZUZhY3Rvcnk1
OwotaW50ZXJmYWNlIElEV3JpdGVGb250OwotaW50ZXJmYWNlIElEV3JpdGVGb250Q29sbGVjdGlv
bjsKLWludGVyZmFjZSBJRFdyaXRlRm9udENvbGxlY3Rpb24xOwotaW50ZXJmYWNlIElEV3JpdGVG
b250RmFtaWx5OwotaW50ZXJmYWNlIElEV3JpdGVHZGlJbnRlcm9wOwotCi1lbnVtIERXUklURV9G
T05UX1dFSUdIVDsKLWVudW0gRFdSSVRFX0ZPTlRfU1RZTEU7Ci1lbnVtIERXUklURV9GT05UX1NU
UkVUQ0g7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsK
LWNsYXNzIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI7Ci0KLW5hbWVzcGFjZSBEaXJlY3RXcml0ZSB7
Ci0KLUlEV3JpdGVGYWN0b3J5NSogZmFjdG9yeSgpOwotSURXcml0ZUdkaUludGVyb3AqIGdkaUlu
dGVyb3AoKTsKLQotSURXcml0ZUZvbnRDb2xsZWN0aW9uMSogd2ViUHJvY2Vzc0ZvbnRDb2xsZWN0
aW9uKCk7Ci0KLUhSRVNVTFQgYWRkRm9udEZyb21EYXRhVG9Qcm9jZXNzQ29sbGVjdGlvbihjb25z
dCBWZWN0b3I8dWludDhfdD4mIGZvbnREYXRhKTsKLUNPTVB0cjxJRFdyaXRlRm9udEZhbWlseT4g
Zm9udEZhbWlseUZvckNvbGxlY3Rpb24oSURXcml0ZUZvbnRDb2xsZWN0aW9uKiwgY29uc3QgVmVj
dG9yPHdjaGFyX3Q+JiBsb2NhbGVOYW1lLCBjb25zdCBMT0dGT05UJik7Ci1DT01QdHI8SURXcml0
ZUZvbnQ+IGNyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQoY29uc3QgTE9HRk9OVCYpOwotVmVjdG9yPHdj
aGFyX3Q+IGZhbWlseU5hbWVGb3JMb2NhbGUoSURXcml0ZUZvbnRGYW1pbHkqLCBjb25zdCBWZWN0
b3I8d2NoYXJfdD4mIGxvY2FsZU5hbWUpOwotCi1EV1JJVEVfRk9OVF9XRUlHSFQgZm9udFdlaWdo
dChjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci1EV1JJVEVfRk9OVF9TVFlMRSBmb250U3R5bGUo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotRFdSSVRFX0ZPTlRfU1RSRVRDSCBmb250U3RyZXRj
aChjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci0KLX0gLy8gbmFtZXNwYWNlIERpcmVjdFdyaXRl
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFBvaW50RGlyZWN0
MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9GbG9hdFBvaW50RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcAkobm9uZXhp
c3RlbnQpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNiBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKLQotI2lmIFBMQVRGT1JNKFdJTikKLQotI2luY2x1ZGUgPGQyZDEuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1GbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IEQyRF9QT0lO
VF8yRiYgcCkKLSAgICA6IG1feChwLngpCi0gICAgLCBtX3kocC55KQotewotfQotCi1GbG9hdFBv
aW50OjpvcGVyYXRvciBEMkRfUE9JTlRfMkYoKSBjb25zdAotewotICAgIHJldHVybiBEMkQxOjpQ
b2ludDJGKG1feCwgbV95KTsKLX0KLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oV0lOKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UmVjdERpcmVjdDJE
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
RmxvYXRSZWN0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwCShub25leGlzdGVu
dCkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0K
LSNpZiBQTEFURk9STShXSU4pCi0KLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSA8
ZDJkMS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBib29sIGlzSW5maW5pdGVS
ZWN0KGNvbnN0IEQyRDFfUkVDVF9GJiByZWN0KQotewotICAgIGlmICghc3RkOjppc2luZihyZWN0
LnRvcCkgJiYgcmVjdC50b3AgIT0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFzdGQ6OmlzaW5mKHJlY3QubGVmdCkg
JiYgcmVjdC5sZWZ0ICE9IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc3RkOjppc2luZihyZWN0LmJvdHRvbSkgJiYg
cmVjdC5ib3R0b20gIT0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXN0ZDo6aXNpbmYocmVjdC5yaWdodCkgJiYgcmVj
dC5yaWdodCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1GbG9hdFJlY3Q6OkZsb2F0UmVj
dChjb25zdCBSRUNUJiByZWN0KQotICAgIDogbV9sb2NhdGlvbihyZWN0LmxlZnQsIHJlY3QudG9w
KQotICAgICwgbV9zaXplKHJlY3QucmlnaHQgLSByZWN0LmxlZnQsIHJlY3QuYm90dG9tIC0gcmVj
dC50b3ApCi17Ci19Ci0KLUZsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IEQyRDFfUkVDVF9GJiBy
KQotewotICAgIC8vIEluZmluaXRlIFJlY3QgY2FzZToKLSAgICBpZiAoaXNJbmZpbml0ZVJlY3Qo
cikpIHsKLSAgICAgICAgKnRoaXMgPSBpbmZpbml0ZVJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG1fbG9jYXRpb24gPSBGbG9hdFBvaW50KHIubGVmdCwgci50b3ApOwotICAg
IG1fc2l6ZSA9IEZsb2F0U2l6ZShyLnJpZ2h0IC0gci5sZWZ0LCByLmJvdHRvbSAtIHIudG9wKTsK
LX0KLQotRmxvYXRSZWN0OjpvcGVyYXRvciBEMkQxX1JFQ1RfRigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIEQyRDE6OlJlY3RGKHgoKSwgeSgpLCBtYXhYKCksIG1heFkoKSk7Ci19Ci0KLX0KLQotI2Vu
ZGlmIC8vIFBMQVRGT1JNKFdJTikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9GbG9hdFNpemVEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0U2l6ZURpcmVjdDJELmNwcAkocmV2aXNpb24g
Mjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0U2l6
ZURpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotCi0jaWYgUExBVEZPUk0oV0lOKQotCi0jaW5j
bHVkZSA8ZDJkMS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0U2l6ZTo6RmxvYXRT
aXplKGNvbnN0IEQyRDFfU0laRV9GJiBzKQotICAgIDogbV93aWR0aChzLndpZHRoKQotICAgICwg
bV9oZWlnaHQocy5oZWlnaHQpCi17Ci19Ci0KLUZsb2F0U2l6ZTo6b3BlcmF0b3IgRDJEMV9TSVpF
X0YoKSBjb25zdAotewotICAgIHJldHVybiBEMkQxOjpTaXplRihtX3dpZHRoLCBtX2hlaWdodCk7
Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJl
Y3QyRC5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDE0
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLQotI2lmIFVT
RShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNP
TVB0ci5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZvbnQuaCIK
LSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCi0jaW5j
bHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0j
aW5jbHVkZSAiV2ViQ29yZVRleHRSZW5kZXJlci5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNs
dWRlIDxkd3JpdGVfMy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRl
eHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLAotICAgIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi17
Ci0gICAgYXV0byBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5y
ZW5kZXJUYXJnZXQoKTsKLSAgICBib29sIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBXZWJDb3Jl
U2hvdWxkVXNlRm9udFNtb290aGluZygpOwotCi0gICAgc3dpdGNoIChzbW9vdGhpbmdNb2RlKSB7
Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6QW50aWFsaWFzZWQ6Ci0gICAgICAgIGdyYXBo
aWNzQ29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7Ci0gICAgICAgIHNob3VsZFVzZUZv
bnRTbW9vdGhpbmcgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250U21vb3Ro
aW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZDoKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNl
dFNob3VsZEFudGlhbGlhcyh0cnVlKTsKLSAgICAgICAgc2hvdWxkVXNlRm9udFNtb290aGluZyA9
IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6Ok5vU21v
b3RoaW5nOgotICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKGZhbHNl
KTsKLSAgICAgICAgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IGZhbHNlOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nOgotICAgICAgICAv
LyBGb3IgdGhlIEF1dG9TbW9vdGggY2FzZSwgZG9uJ3QgZG8gYW55dGhpbmchIEtlZXAgdGhlIGRl
ZmF1bHQgc2V0dGluZ3MuCi0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBncmFwaGljc0NvbnRl
eHQuc2F2ZSgpOwotCi0gICAgRDJEMV9NQVRSSVhfM1gyX0YgbWF0cml4OwotICAgIGNvbnRleHQt
PkdldFRyYW5zZm9ybSgmbWF0cml4KTsKLQotICAgIGlmIChwbGF0Zm9ybURhdGEuc3ludGhldGlj
T2JsaXF1ZSgpKSB7Ci0gICAgICAgIHN0YXRpYyBmbG9hdCBza2V3ID0gLXRhbmYoc3ludGhldGlj
T2JsaXF1ZUFuZ2xlKCkgKiBwaUZsb2F0IC8gMTgwLjBmKTsKLSAgICAgICAgYXV0byBza2V3TWF0
cml4ID0gRDJEMTo6TWF0cml4M3gyRjo6U2tldyhza2V3LCAwKTsKLSAgICAgICAgY29udGV4dC0+
U2V0VHJhbnNmb3JtKG1hdHJpeCAqIHNrZXdNYXRyaXgpOwotICAgIH0KLQotICAgIFJFTEVBU0Vf
QVNTRVJUKHBsYXRmb3JtRGF0YS5kd0ZvbnQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocGxhdGZv
cm1EYXRhLmR3Rm9udEZhY2UoKSk7Ci0KLSAgICBWZWN0b3I8RkxPQVQ+IGhvcml6b250YWxBZHZh
bmNlcyhudW1HbHlwaHMpOwotICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiBvZmZzZXRB
ZHZhbmNlcyhudW1HbHlwaHMpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlw
aHM7ICsraSkgewotICAgICAgICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZmZXIuYWR2YW5jZXND
b3VudCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYXV0byBhZHZhbmNlID0gZ2x5
cGhCdWZmZXIuYWR2YW5jZXMoaSArIGZyb20pOwotICAgICAgICBpZiAoIWFkdmFuY2UpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBob3Jpem9udGFsQWR2YW5jZXNbaV0gPSBhZHZh
bmNlLT53aWR0aCgpOwotICAgICAgICBvZmZzZXRBZHZhbmNlc1tpXS5hZHZhbmNlT2Zmc2V0ID0g
YWR2YW5jZS0+d2lkdGgoKTsKLSAgICAgICAgb2Zmc2V0QWR2YW5jZXNbaV0uYXNjZW5kZXJPZmZz
ZXQgPSBhZHZhbmNlLT5oZWlnaHQoKTsKLSAgICB9Ci0KLSAgICBEV1JJVEVfR0xZUEhfUlVOIGds
eXBoUnVuOwotICAgIGdseXBoUnVuLmZvbnRGYWNlID0gcGxhdGZvcm1EYXRhLmR3Rm9udEZhY2Uo
KTsKLSAgICBnbHlwaFJ1bi5mb250RW1TaXplID0gcGxhdGZvcm1EYXRhLnNpemUoKTsKLSAgICBn
bHlwaFJ1bi5nbHlwaENvdW50ID0gbnVtR2x5cGhzOwotICAgIGdseXBoUnVuLmdseXBoSW5kaWNl
cyA9IGdseXBoQnVmZmVyLmdseXBocyhmcm9tKTsKLSAgICBnbHlwaFJ1bi5nbHlwaEFkdmFuY2Vz
ID0gaG9yaXpvbnRhbEFkdmFuY2VzLmRhdGEoKTsKLSAgICBnbHlwaFJ1bi5nbHlwaE9mZnNldHMg
PSBudWxscHRyOwotICAgIGdseXBoUnVuLmlzU2lkZXdheXMgPSBwbGF0Zm9ybURhdGEub3JpZW50
YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsOwotICAgIGdseXBoUnVuLmJpZGlM
ZXZlbCA9IDA7Ci0KLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRv
d0JsdXI7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LmdldFNo
YWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKLQotICAgIGJvb2wg
aGFzU2ltcGxlU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRl
eHREcmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlkKCkgJiYgIXNoYWRvd0Js
dXIgJiYgKCFncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBncmFw
aGljc0NvbnRleHQuZ2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7
Ci0gICAgaWYgKGhhc1NpbXBsZVNoYWRvdykgewotICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hh
ZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lk
IGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5j
bGVhclNoYWRvdygpOwotICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQu
ZmlsbENvbG9yKCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9y
LmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7Ci0g
ICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRo
KCk7Ci0gICAgICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4g
d2UgaGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMg
bmVnYXRpdmUuCi0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93
T2Zmc2V0LmhlaWdodCgpICogKGdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cygpID8gLTEgOiAxKTsKLQotICAgICAgICBhdXRvIHNoYWRvd0JydXNoID0gZ3JhcGhpY3NDb250
ZXh0LmJydXNoV2l0aENvbG9yKHNoYWRvd0ZpbGxDb2xvcik7Ci0gICAgICAgIGNvbnRleHQtPkRy
YXdHbHlwaFJ1bihEMkQxOjpQb2ludDJGKHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksICZnbHlw
aFJ1biwgc2hhZG93QnJ1c2gpOwotICAgICAgICBpZiAoZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0
KCkpCi0gICAgICAgICAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihzaGFk
b3dUZXh0WCArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBzaGFkb3dUZXh0WSksICZnbHlw
aFJ1biwgc2hhZG93QnJ1c2gpOwotICAgIH0KLQotICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihE
MkQxOjpQb2ludDJGKHBvaW50LngoKSwgcG9pbnQueSgpKSwgJmdseXBoUnVuLCBncmFwaGljc0Nv
bnRleHQuc29saWRGaWxsQnJ1c2goKSk7Ci0gICAgaWYgKGZvbnQuc3ludGhldGljQm9sZE9mZnNl
dCgpKQotICAgICAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihwb2ludC54
KCkgKyBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwgcG9pbnQueSgpKSwgJmdseXBoUnVuLCBn
cmFwaGljc0NvbnRleHQuc29saWRGaWxsQnJ1c2goKSk7Ci0KLSAgICBpZiAoaGFzU2ltcGxlU2hh
ZG93KQotICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hh
ZG93Qmx1ciwgc2hhZG93Q29sb3IpOwotCi0gICAgZ3JhcGhpY3NDb250ZXh0LnJlc3RvcmUoKTsK
LX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHJl
dmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDYg
QEAKICNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2VuZGlmCiAKLSNp
ZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMuaCIKLSNpbmNs
dWRlIDxkd3JpdGVfMy5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRm9udEN1
c3RvbVBsYXRmb3JtRGF0YTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YShjb25zdCBTdHJpbmcmIG5h
bWUsIEZvbnRQbGF0Zm9ybURhdGE6OkNyZWF0aW9uRGF0YSYmIGNyZWF0aW9uRGF0YSkKQEAgLTcz
LDcgKzY4LDcgQEAgRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOgogICAg
IGxvZ0ZvbnQubGZVbmRlcmxpbmUgPSBmYWxzZTsKICAgICBsb2dGb250LmxmU3RyaWtlT3V0ID0g
ZmFsc2U7CiAgICAgbG9nRm9udC5sZkNoYXJTZXQgPSBERUZBVUxUX0NIQVJTRVQ7Ci0jaWYgVVNF
KENHKSB8fCBVU0UoQ0FJUk8pIHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpIHx8IFVTRShD
QUlSTykKICAgICBsb2dGb250LmxmT3V0UHJlY2lzaW9uID0gT1VUX1RUX09OTFlfUFJFQ0lTOwog
I2Vsc2UKICAgICBsb2dGb250LmxmT3V0UHJlY2lzaW9uID0gT1VUX1RUX1BSRUNJUzsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhRGly
ZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250UGxhdGZvcm1EYXRhRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YURpcmVj
dDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDEyMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNp
bmNsdWRlICJEaXJlY3RXcml0ZVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgotI2luY2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUgIlNoYXJlZEdESU9iamVjdC5oIgot
I2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgotI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEZvbnRQbGF0Zm9ybURhdGE6
OnBsYXRmb3JtRGF0YUluaXQoSEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgSERDIGhkYywgV0NIQVIq
IGZhY2VOYW1lKQotewotICAgIExPR0ZPTlQgbG9nZm9udDsKLSAgICBIUkVTVUxUIGhyID0gOjpH
ZXRPYmplY3QoZm9udCwgc2l6ZW9mKExPR0ZPTlQpLCAmbG9nZm9udCk7Ci0gICAgaWYgKFNVQ0NF
RURFRChocikpCi0gICAgICAgIG1fZHdGb250ID0gRGlyZWN0V3JpdGU6OmNyZWF0ZVdpdGhQbGF0
Zm9ybUZvbnQobG9nZm9udCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9kd0ZvbnQpOwotCi0gICAg
aHIgPSBtX2R3Rm9udC0+Q3JlYXRlRm9udEZhY2UoJm1fZHdGb250RmFjZSk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBpZiAoIW1fdXNlR0RJKQotICAgICAgICBt
X2lzU3lzdGVtRm9udCA9ICF3Y3NjbXAoZmFjZU5hbWUsIEwiTHVjaWRhIEdyYW5kZSIpOwotfQot
Ci1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4mJiBo
Zm9udCwgQ09NUHRyPElEV3JpdGVGb250PiYmIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwg
Ym9vbCBvYmxpcXVlLCBib29sIHVzZUdESSkKLSAgICA6IG1fc3ludGhldGljQm9sZChib2xkKQot
ICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKG9ibGlxdWUpCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAg
ICAsIG1fZm9udChTaGFyZWRHRElPYmplY3Q8SEZPTlQ+OjpjcmVhdGUoV1RGTW92ZShoZm9udCkp
KQotICAgICwgbV9kd0ZvbnQoV1RGTW92ZShmb250KSkKLSAgICAsIG1fdXNlR0RJKHVzZUdESSkK
LXsKLSAgICBIUkVTVUxUIGhyID0gbV9kd0ZvbnQtPkNyZWF0ZUZvbnRGYWNlKCZtX2R3Rm9udEZh
Y2UpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotfQotCi1zdGF0aWMgYm9v
bCBmb250c0FyZUVxdWFsKElEV3JpdGVGb250KiBhLCBJRFdyaXRlRm9udCogYikKLXsKLSAgICBp
ZiAoIWEgJiYgIWIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGEgPT0gYikKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKCFhICYmIGIpIHx8IChhICYmICFiKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGEtPkdldFdlaWdodCgpICE9IGItPkdldFdl
aWdodCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYS0+R2V0U3R5bGUoKSAh
PSBiLT5HZXRTdHlsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYS0+R2V0
U3RyZXRjaCgpICE9IGItPkdldFN0cmV0Y2goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgRFdSSVRFX0ZPTlRfTUVUUklDUyBhTWV0cmljcywgYk1ldHJpY3M7Ci0gICAgYS0+R2V0TWV0
cmljcygmYU1ldHJpY3MpOwotICAgIGItPkdldE1ldHJpY3MoJmJNZXRyaWNzKTsKLQotICAgIGlm
ICgoYU1ldHJpY3MuZGVzaWduVW5pdHNQZXJFbSAhPSBiTWV0cmljcy5kZXNpZ25Vbml0c1BlckVt
KQotICAgICAgICB8fCAoYU1ldHJpY3MuYXNjZW50ICE9IGJNZXRyaWNzLmFzY2VudCkKLSAgICAg
ICAgfHwgKGFNZXRyaWNzLmRlc2NlbnQgIT0gYk1ldHJpY3MuYXNjZW50KQotICAgICAgICB8fCAo
YU1ldHJpY3MubGluZUdhcCAhPSBiTWV0cmljcy5saW5lR2FwKQotICAgICAgICB8fCAoYU1ldHJp
Y3MuY2FwSGVpZ2h0ICE9IGJNZXRyaWNzLmNhcEhlaWdodCkKLSAgICAgICAgfHwgKGFNZXRyaWNz
LnhIZWlnaHQgIT0gYk1ldHJpY3MueEhlaWdodCkKLSAgICAgICAgfHwgKGFNZXRyaWNzLnVuZGVy
bGluZVBvc2l0aW9uICE9IGJNZXRyaWNzLnVuZGVybGluZVBvc2l0aW9uKQotICAgICAgICB8fCAo
YU1ldHJpY3MudW5kZXJsaW5lVGhpY2tuZXNzICE9IGJNZXRyaWNzLnVuZGVybGluZVRoaWNrbmVz
cykKLSAgICAgICAgfHwgKGFNZXRyaWNzLnN0cmlrZXRocm91Z2hQb3NpdGlvbiAhPSBiTWV0cmlj
cy5zdHJpa2V0aHJvdWdoUG9zaXRpb24pCi0gICAgICAgIHx8IChhTWV0cmljcy5zdHJpa2V0aHJv
dWdoVGhpY2tuZXNzICE9IGJNZXRyaWNzLnN0cmlrZXRocm91Z2hUaGlja25lc3MpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdW5zaWduZWQgRm9udFBs
YXRmb3JtRGF0YTo6aGFzaCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZm9udCA/IG1fZm9udC0+
aGFzaCgpIDogMDsKLX0KLQotYm9vbCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybUlzRXF1YWwo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZm9u
dCA9PSBvdGhlci5tX2ZvbnQKLSAgICAgICAgJiYgbV91c2VHREkgPT0gb3RoZXIubV91c2VHREkK
LSAgICAgICAgJiYgZm9udHNBcmVFcXVhbChtX2R3Rm9udC5nZXQoKSwgb3RoZXIubV9kd0ZvbnQu
Z2V0KCkpOwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURp
cmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkK
QEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKLQot
I2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkRpcmVjdFdyaXRlVXRpbGl0aWVzLmgiCi0j
aW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIlRleHRBbmFseXplckhlbHBlci5oIgotI2luY2x1
ZGUgPGR3cml0ZV8zLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBHbHlwaFBhZ2U6
OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKQotewotICAgIGlmIChi
dWZmZXJMZW5ndGggPiBHbHlwaFBhZ2U6OnNpemUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGNvbnN0IEZvbnQmIGZvbnQgPSB0aGlzLT5mb250KCk7Ci0gICAgYm9vbCBoYXZlR2x5cGhz
ID0gZmFsc2U7Ci0KLSAgICBDT01QdHI8SURXcml0ZVRleHRBbmFseXplcj4gYW5hbHl6ZXI7Ci0g
ICAgSFJFU1VMVCBociA9IERpcmVjdFdyaXRlOjpmYWN0b3J5KCktPkNyZWF0ZVRleHRBbmFseXpl
cigmYW5hbHl6ZXIpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAg
YXV0byYgZm9udFBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBVQ2hh
ciBsb2NhbGVOYW1lW0xPQ0FMRV9OQU1FX01BWF9MRU5HVEggKyAxXSA9IHsgfTsKLSAgICBpbnQg
bG9jYWxlTGVuZ3RoID0gR2V0VXNlckRlZmF1bHRMb2NhbGVOYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8
TFBXU1RSPigmbG9jYWxlTmFtZSksIExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwotICAgIFJFTEVB
U0VfQVNTRVJUKGxvY2FsZUxlbmd0aCA8PSBMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKLQotICAg
IFRleHRBbmFseXplckhlbHBlciBoZWxwZXIocmVpbnRlcnByZXRfY2FzdDxMUFdTVFI+KCZsb2Nh
bGVOYW1lKSwgcmVpbnRlcnByZXRfY2FzdDxMUFdTVFI+KGJ1ZmZlciksIGJ1ZmZlckxlbmd0aCk7
Ci0KLSAgICBociA9IGFuYWx5emVyLT5BbmFseXplU2NyaXB0KCZoZWxwZXIsIDAsIGJ1ZmZlckxl
bmd0aCwgJmhlbHBlcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAg
ICBWZWN0b3I8R2x5cGg+IGdseXBocyhHbHlwaFBhZ2U6OnNpemUsIDApOwotICAgIFZlY3RvcjxH
bHlwaD4gY2x1c3Rlck1hcChHbHlwaFBhZ2U6OnNpemUsIDApOwotICAgIFZlY3RvcjxEV1JJVEVf
U0hBUElOR19URVhUX1BST1BFUlRJRVM+IHRleHRQcm9wZXJ0aWVzKEdseXBoUGFnZTo6c2l6ZSk7
Ci0gICAgVmVjdG9yPERXUklURV9TSEFQSU5HX0dMWVBIX1BST1BFUlRJRVM+IGdseXBoUHJvcGVy
dGllcyhHbHlwaFBhZ2U6OnNpemUpOwotCi0gICAgY29uc3QgV0NIQVIqIHRleHRTdGFydCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8TFBDV1NUUj4oYnVmZmVyKTsKLSAgICBHbHlwaCogZ2x5cGhEYXRhID0g
Z2x5cGhzLmRhdGEoKTsKLSAgICBHbHlwaCogY2x1c3Rlck1hcERhdGEgPSBjbHVzdGVyTWFwLmRh
dGEoKTsKLSAgICBEV1JJVEVfU0hBUElOR19URVhUX1BST1BFUlRJRVMqIHRleHRQcm9wZXJ0aWVz
RGF0YSA9IHRleHRQcm9wZXJ0aWVzLmRhdGEoKTsKLSAgICBEV1JJVEVfU0hBUElOR19HTFlQSF9Q
Uk9QRVJUSUVTKiBnbHlwaFByb3BlcnRpZXNEYXRhID0gZ2x5cGhQcm9wZXJ0aWVzLmRhdGEoKTsK
LQotICAgIHVuc2lnbmVkIHRvdGFsID0gMDsKLSAgICB1bnNpZ25lZCBtYXhHbHlwaENvdW50ID0g
R2x5cGhQYWdlOjpzaXplOwotICAgIGZvciAoY29uc3QgYXV0byYgcnVuIDogaGVscGVyLm1fYW5h
bHl6ZWRSdW5zKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHRvdGFsICsgcnVuLmxlbmd0aCA8
PSBidWZmZXJMZW5ndGgpOwotCi0gICAgICAgIHVuc2lnbmVkIHJldHVybmVkQ291bnQgPSAwOwot
ICAgICAgICBociA9IGFuYWx5emVyLT5HZXRHbHlwaHModGV4dFN0YXJ0ICsgcnVuLnN0YXJ0UG9z
aXRpb24sIHJ1bi5sZW5ndGgsIGZvbnRQbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpLCBmb250UGxh
dGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCwgZmFs
c2UsCi0gICAgICAgICAgICAmcnVuLmFuYWx5c2lzLCBudWxscHRyLCBudWxscHRyLCBudWxscHRy
LCBudWxscHRyLCAwLCBtYXhHbHlwaENvdW50LCBjbHVzdGVyTWFwRGF0YSwgdGV4dFByb3BlcnRp
ZXNEYXRhLAotICAgICAgICAgICAgZ2x5cGhEYXRhLCBnbHlwaFByb3BlcnRpZXNEYXRhLCAmcmV0
dXJuZWRDb3VudCk7Ci0KLSAgICAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGdseXBoRGF0YSArPSByZXR1cm5lZENvdW50OwotICAg
ICAgICBjbHVzdGVyTWFwRGF0YSArPSByZXR1cm5lZENvdW50OwotICAgICAgICB0ZXh0UHJvcGVy
dGllc0RhdGEgKz0gcmV0dXJuZWRDb3VudDsKLSAgICAgICAgZ2x5cGhQcm9wZXJ0aWVzRGF0YSAr
PSByZXR1cm5lZENvdW50OwotICAgICAgICBtYXhHbHlwaENvdW50IC09IHJldHVybmVkQ291bnQ7
Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsg
KytpKSB7Ci0gICAgICAgIEdseXBoIGdseXBoID0gZ2x5cGhzW2ldOwotICAgICAgICBpZiAoIWds
eXBoKQotICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCAwKTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBzZXRHbHlwaEZvckluZGV4KGksIGdseXBoKTsKLSAgICAgICAgICAgIGhh
dmVHbHlwaHMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGhhdmVHbHlw
aHM7Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAy
ODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnRE
aXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMDUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiR3JhZGllbnQuaCIKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRC5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgot
Ci0jZGVmaW5lIEdSQURJRU5UX0RSQVdJTkcgMwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZv
aWQgR3JhZGllbnQ6OnN0b3BzQ2hhbmdlZCgpCi17Ci0gICAgbV9icnVzaCA9IG51bGxwdHI7Ci19
Ci0KLXN0YXRpYyBib29sIGNpcmNsZUlzRW50aXJlbHlDb250YWluZWQoY29uc3QgRmxvYXRQb2lu
dCYgY2VudGVyQSwgZmxvYXQgcmFkaXVzQSwgY29uc3QgRmxvYXRQb2ludCYgY2VudGVyQiwgZmxv
YXQgcmFkaXVzQikKLXsKLSAgICBkb3VibGUgZGVsdGFYID0gY2VudGVyQi54KCkgLSBjZW50ZXJB
LngoKTsKLSAgICBkb3VibGUgZGVsdGFZID0gY2VudGVyQi55KCkgLSBjZW50ZXJBLnkoKTsKLSAg
ICBkb3VibGUgZGVsdGFSYWRpdXMgPSByYWRpdXNCIC0gcmFkaXVzQTsKLQotICAgIHJldHVybiBk
ZWx0YVggKiBkZWx0YVggKyBkZWx0YVkgKiBkZWx0YVkgPCBkZWx0YVJhZGl1cyAqIGRlbHRhUmFk
aXVzICYmIHJhZGl1c0EgPCByYWRpdXNCOwotfQotCi1JRDJEMUJydXNoKiBHcmFkaWVudDo6Y3Jl
YXRlQnJ1c2goSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsKLSAgICBzb3J0U3Rv
cHMoKTsKLQotICAgIFZlY3RvcjxEMkQxX0dSQURJRU5UX1NUT1A+IGdyYWRpZW50U3RvcHM7Ci0g
ICAgZ3JhZGllbnRTdG9wcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fc3RvcHMuc2l6ZSgpKTsK
LSAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3Igbm9uLXNSR0JBIGNvbG9yIHNwYWNlcy4KLSAgICAgICAgYXV0byBbciwgZywg
YiwgYV0gc3RvcC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZl
ZCgpOwotICAgICAgICBncmFkaWVudFN0b3BzLmdyYWRpZW50U3RvcHMudW5jaGVja2VkQXBwZW5k
KEQyRDE6OkdyYWRpZW50U3RvcChzdG9wLm9mZnNldCwgRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEp
KSk7Ci0gICAgfQotCi0gICAgV1RGOjpzd2l0Y2hPbihtX2RhdGEsCi0gICAgICAgIFsmXSAoY29u
c3QgTGluZWFyRGF0YSYpIHsKLSAgICAgICAgICAgIC8vIE5vIGFjdGlvbiBuZWVkZWQuCi0gICAg
ICAgIH0sCi0gICAgICAgIFsmXSAoUmFkaWFsRGF0YSYgZGF0YSkgewotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoZGF0YS5zdGFydFJhZGl1cyA+PSAwKTsKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGRhdGEuZW5kUmFkaXVzID49IDApOwotCi0gICAgICAgICAgICBpZiAoZGF0YS5zdGFy
dFJhZGl1cyA+IGRhdGEuZW5kUmFkaXVzKSB7Ci0gICAgICAgICAgICAgICAgZ3JhZGllbnRTdG9w
cy5yZXZlcnNlKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogZ3JhZGllbnRT
dG9wcykKLSAgICAgICAgICAgICAgICAgICAgc3RvcC5wb3NpdGlvbiA9IDEuMCAtIHN0b3AucG9z
aXRpb247Ci0KLSAgICAgICAgICAgICAgICBzdGQ6OnN3YXAoZGF0YS5zdGFydFJhZGl1cywgZGF0
YS5lbmRSYWRpdXMpOwotICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChkYXRhLnBvaW50MCwgZGF0
YS5wb2ludDEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZGF0YS5zdGFydFJh
ZGl1cykgewotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRhdGEuZW5kUmFkaXVzID4g
MCk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc3RhcnRQb3NpdGlvbiA9IGRhdGEuc3RhcnRSYWRp
dXMgLyBkYXRhLmVuZFJhZGl1czsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGFy
dFBvc2l0aW9uIDw9IDEuMCk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgYXZhaWxhYmxlUmFuZ2Ug
PSAxLjAgLSBzdGFydFBvc2l0aW9uOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGF2
YWlsYWJsZVJhbmdlIDw9IDEuMCAmJiBhdmFpbGFibGVSYW5nZSA+PSAwKTsKLQotICAgICAgICAg
ICAgICAgIGZvciAoYXV0byYgc3RvcCA6IGdyYWRpZW50U3RvcHMpIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3RvcC5wb3NpdGlvbiAqPSBhdmFpbGFibGVSYW5nZTsKLSAgICAgICAgICAgICAgICAg
ICAgc3RvcC5wb3NpdGlvbiArPSBzdGFydFBvc2l0aW9uOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlICdzdGFydCcgcG9zaXRpb24KLSAgICAgICAg
ICAgICAgICBhdXRvIGZpcnN0U3RvcCA9IGdyYWRpZW50U3RvcHMuZmlyc3QoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIVdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChmaXJzdFN0b3AucG9zaXRpb24s
IDAuMGYpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0U3RvcC5wb3NpdGlvbiA9IDA7Ci0g
ICAgICAgICAgICAgICAgICAgIGdyYWRpZW50U3RvcHMuaW5zZXJ0KDAsIGZpcnN0U3RvcCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICBbJl0g
KGNvbnN0IENvbmljRGF0YSYpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBc3Nlc3Mgd2hldGhl
ciBuZWVkZWQgZm9yIENvbmljIEdyYWRpZW50cy4KLSAgICAgICAgfQotICAgICk7Ci0KLSAgICBD
T01QdHI8SUQyRDFHcmFkaWVudFN0b3BDb2xsZWN0aW9uPiBncmFkaWVudFN0b3BDb2xsZWN0aW9u
OwotICAgIEhSRVNVTFQgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZUdyYWRpZW50U3RvcENvbGxl
Y3Rpb24oZ3JhZGllbnRTdG9wcy5kYXRhKCksIGdyYWRpZW50U3RvcHMuc2l6ZSgpLCAmZ3JhZGll
bnRTdG9wQ29sbGVjdGlvbik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0K
LSAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKLSAgICAgICAgWyZdIChjb25zdCBMaW5lYXJEYXRh
JiBkYXRhKSB7Ci0gICAgICAgICAgICBJRDJEMUxpbmVhckdyYWRpZW50QnJ1c2gqIGxpbmVhckdy
YWRpZW50ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVM
aW5lYXJHcmFkaWVudEJydXNoKAotICAgICAgICAgICAgICAgIEQyRDE6OkxpbmVhckdyYWRpZW50
QnJ1c2hQcm9wZXJ0aWVzKGRhdGEucG9pbnQwLCBkYXRhLnBvaW50MSksCi0gICAgICAgICAgICAg
ICAgRDJEMTo6QnJ1c2hQcm9wZXJ0aWVzKCksIGdyYWRpZW50U3RvcENvbGxlY3Rpb24uZ2V0KCks
Ci0gICAgICAgICAgICAgICAgJmxpbmVhckdyYWRpZW50KTsKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgICAgICAgICAgbV9icnVzaCA9IGFkb3B0Q09NKGxp
bmVhckdyYWRpZW50KTsKLSAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSYWRpYWxEYXRh
JiBkYXRhKSB7Ci0gICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0OwotICAgICAgICAgICAgaWYg
KCFjaXJjbGVJc0VudGlyZWx5Q29udGFpbmVkKGRhdGEucG9pbnQwLCBkYXRhLnN0YXJ0UmFkaXVz
LCBkYXRhLnBvaW50MSwgZGF0YS5lbmRSYWRpdXMpKQotICAgICAgICAgICAgICAgIG9mZnNldCA9
IChkYXRhLnBvaW50MS5zY2FsZWQoZGF0YS5zdGFydFJhZGl1cykgLSBkYXRhLnBvaW50MC5zY2Fs
ZWQoZGF0YS5lbmRSYWRpdXMpKSAvIChkYXRhLmVuZFJhZGl1cyAtIGRhdGEuc3RhcnRSYWRpdXMp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG9mZnNldCA9IGRhdGEucG9pbnQw
IC0gZGF0YS5wb2ludDE7Ci0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgY2VudGVyID0gZGF0YS5w
b2ludDE7Ci0gICAgICAgICAgICBmbG9hdCByYWRpdXNYID0gZGF0YS5lbmRSYWRpdXM7Ci0gICAg
ICAgICAgICBmbG9hdCByYWRpdXNZID0gcmFkaXVzWCAvIGRhdGEuYXNwZWN0UmF0aW87Ci0KLSAg
ICAgICAgICAgIElEMkQxUmFkaWFsR3JhZGllbnRCcnVzaCogcmFkaWFsR3JhZGllbnQgPSBudWxs
cHRyOwotICAgICAgICAgICAgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZVJhZGlhbEdyYWRpZW50
QnJ1c2goCi0gICAgICAgICAgICAgICAgRDJEMTo6UmFkaWFsR3JhZGllbnRCcnVzaFByb3BlcnRp
ZXMoY2VudGVyLCBEMkQxOjpQb2ludDJGKG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkp
LCByYWRpdXNYLCByYWRpdXNZKSwKLSAgICAgICAgICAgICAgICBEMkQxOjpCcnVzaFByb3BlcnRp
ZXMoKSwgZ3JhZGllbnRTdG9wQ29sbGVjdGlvbi5nZXQoKSwKLSAgICAgICAgICAgICAgICAmcmFk
aWFsR3JhZGllbnQpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0gICAgICAgICAgICBtX2JydXNoID0gYWRvcHRDT00ocmFkaWFsR3JhZGllbnQpOwotICAgICAg
ICB9LAotICAgICAgICBbJl0gKGNvbnN0IENvbmljRGF0YSYpIHsKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQgY29uaWMgZ3JhZGllbnQgcmVuZGVyaW5nLgotICAgICAgICAgICAgbV9i
cnVzaCA9IG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICApOwotCi0gICAgcmV0dXJuIG1fYnJ1c2gu
Z2V0KCk7Ci19Ci0KLXZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXV0byBkMmRDb250ZXh0ID0gY29udGV4
dC5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBXVEY6OnN3aXRjaE9u
KG1fZGF0YSwKLSAgICAgICAgWyZdIChjb25zdCBMaW5lYXJEYXRhJiBkYXRhKSB7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogSWYgd2UgaGF2ZSBhIGJydXNoLCB3aHkgY2FuIHdlIHJlLXVzZSBpdD8g
V2hhdCBndWFyYW50ZWVzIGl0J3MgcmlnaHQgZm9yIHRoaXMgY29udGV4dD8KLSAgICAgICAgICAg
IGlmICghbV9icnVzaCkKLSAgICAgICAgICAgICAgICBjcmVhdGVCcnVzaChkMmRDb250ZXh0KTsK
LQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgICAgICAgICBkMmRDb250ZXh0LT5TZXRUYWdzKEdS
QURJRU5UX0RSQVdJTkcsIF9fTElORV9fKTsKLSNlbmRpZgotCi0gICAgICAgICAgICBjb25zdCBE
MkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKLSAgICAgICAgICAgIGQyZENvbnRleHQtPkZpbGxS
ZWN0YW5nbGUoJmQyZFJlY3QsIG1fYnJ1c2guZ2V0KCkpOwotICAgICAgICB9LAotICAgICAgICBb
Jl0gKGNvbnN0IFJhZGlhbERhdGEmIGRhdGEpIHsKLSAgICAgICAgICAgIGJvb2wgbmVlZFNjYWxp
bmcgPSBkYXRhLmFzcGVjdFJhdGlvICE9IDE7Ci0gICAgICAgICAgICBpZiAobmVlZFNjYWxpbmcp
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNhdmUoKTsKLSAgICAgICAgICAgICAgICAvLyBT
Y2FsZSBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGdyYWRpZW50LiBXZSBvbmx5IGV2ZXIgc2NhbGUg
bm9uLWRlcHJlY2F0ZWQgZ3JhZGllbnRzLAotICAgICAgICAgICAgICAgIC8vIGZvciB3aGljaCBt
X3AwID09IG1fcDEuCi0gICAgICAgICAgICAgICAgQVNTRVJUKGRhdGEucG9pbnQwID09IGRhdGEu
cG9pbnQxKTsKLQotICAgICAgICAgICAgICAgIEQyRDFfTUFUUklYXzNYMl9GIGN0bSA9IHsgfTsK
LSAgICAgICAgICAgICAgICBkMmRDb250ZXh0LT5HZXRUcmFuc2Zvcm0oJmN0bSk7Ci0KLSAgICAg
ICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtKGN0bSk7Ci0gICAgICAgICAgICAg
ICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShkYXRhLnBvaW50MCk7Ci0gICAgICAgICAgICAgICAgdHJh
bnNmb3JtLnNjYWxlTm9uVW5pZm9ybSgxLjAsIDEuMCAvIGRhdGEuYXNwZWN0UmF0aW8pOwotICAg
ICAgICAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLWRhdGEucG9pbnQwKTsKLQotICAgICAg
ICAgICAgICAgIGQyZENvbnRleHQtPlNldFRyYW5zZm9ybShjdG0pOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAvLyBGSVhNRTogSWYgd2UgaGF2ZSBhIGJydXNoLCB3aHkgY2FuIHdlIHJl
LXVzZSBpdD8gV2hhdCBndWFyYW50ZWVzIGl0J3MgcmlnaHQgZm9yIHRoaXMgY29udGV4dD8KLSAg
ICAgICAgICAgIGlmICghbV9icnVzaCkKLSAgICAgICAgICAgICAgICBjcmVhdGVCcnVzaChkMmRD
b250ZXh0KTsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgICAgICAgICBkMmRDb250ZXh0LT5T
ZXRUYWdzKEdSQURJRU5UX0RSQVdJTkcsIF9fTElORV9fKTsKLSNlbmRpZgotCi0gICAgICAgICAg
ICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKLSAgICAgICAgICAgIGQyZENvbnRl
eHQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIG1fYnJ1c2guZ2V0KCkpOwotCi0gICAgICAgICAg
ICBpZiAobmVlZFNjYWxpbmcpCi0gICAgICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0g
ICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgQ29uaWNEYXRhJikgewotICAgICAgICAgICAg
Ly8gRklYTUU6IGltcGxlbWVudCBjb25pYyBncmFkaWVudCByZW5kZXJpbmcuCi0gICAgICAgIH0K
LSAgICApOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHJl
dmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw5MTkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotCi0jaW5jbHVk
ZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiRGlyZWN0MkRPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAi
RGlyZWN0MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJEaXNwbGF5TGlzdFJlY29yZGVyLmgiCi0j
aW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNs
dWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJE
LmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQyZDFlZmZlY3RzLmg+Ci0jaW5jbHVk
ZSA8ZHdyaXRlXzMuaD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0KLSNwcmFnbWEgd2FybmluZyAo
ZGlzYWJsZSA6IDQ3NTYpCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQoSERDIGhkYywgYm9vbCBoYXNBbHBo
YSkKLXsKLSAgICBwbGF0Zm9ybUluaXQoaGRjLCBoYXNBbHBoYSk7Ci19Ci0KLUdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRChIREMgaGRjLCBJRDJEMURDUmVu
ZGVyVGFyZ2V0KiogcmVuZGVyVGFyZ2V0LCBSRUNUIHJlY3QsIGJvb2wgaGFzQWxwaGEpCi17Ci0g
ICAgLy8gQ3JlYXRlIGEgREMgcmVuZGVyIHRhcmdldC4KLSAgICBhdXRvIHRhcmdldFByb3BlcnRp
ZXMgPSBEaXJlY3QyRDo6cmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwotCi0gICAgSFJFU1VMVCBo
ciA9IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZURDUmVu
ZGVyVGFyZ2V0KCZ0YXJnZXRQcm9wZXJ0aWVzLCByZW5kZXJUYXJnZXQpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgKCpyZW5kZXJUYXJnZXQpLT5CaW5kREMoaGRj
LCAmcmVjdCk7Ci0KLSAgICBhdXRvIG93bmVkUGxhdGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRD4oKnJlbmRlclRhcmdldCk7Ci0gICAgbV9kYXRhID0gbmV3
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShXVEZNb3ZlKG93bmVkUGxhdGZvcm1Db250
ZXh0KSwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7Ci0gICAgbV9kYXRh
LT5tX2hkYyA9IGhkYzsKLX0KLQotR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyZXJUeXBlKQotewotICAgIHBs
YXRmb3JtSW5pdChwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgcmVuZGVyZXJUeXBlKTsKLX0KLQot
SUQyRDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3lzdGVtRmFjdG9yeSgpCi17
Ci0gICAgc3RhdGljIElEMkQxRmFjdG9yeSogZGlyZWN0MkRGYWN0b3J5ID0gbnVsbHB0cjsKLSAg
ICBpZiAoIWRpcmVjdDJERmFjdG9yeSkgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgRDJEMV9G
QUNUT1JZX09QVElPTlMgb3B0aW9ucyA9IHsgfTsKLSAgICAgICAgb3B0aW9ucy5kZWJ1Z0xldmVs
ID0gRDJEMV9ERUJVR19MRVZFTF9JTkZPUk1BVElPTjsKLSAgICAgICAgSFJFU1VMVCBociA9IEQy
RDFDcmVhdGVGYWN0b3J5KEQyRDFfRkFDVE9SWV9UWVBFX01VTFRJX1RIUkVBREVELCBvcHRpb25z
LCAmZGlyZWN0MkRGYWN0b3J5KTsKLSNlbHNlCi0gICAgICAgIEhSRVNVTFQgaHIgPSBEMkQxQ3Jl
YXRlRmFjdG9yeShEMkQxX0ZBQ1RPUllfVFlQRV9NVUxUSV9USFJFQURFRCwgJmRpcmVjdDJERmFj
dG9yeSk7Ci0jZW5kaWYKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGRpcmVjdDJERmFjdG9yeTsKLX0KLQotSUQyRDFSZW5kZXJUYXJn
ZXQqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCkKLXsKLSAg
ICBzdGF0aWMgSUQyRDFSZW5kZXJUYXJnZXQqIGRlZmF1bHRSZW5kZXJUYXJnZXQgPSBudWxscHRy
OwotICAgIGlmICghZGVmYXVsdFJlbmRlclRhcmdldCkgewotICAgICAgICBhdXRvIHJlbmRlclRh
cmdldFByb3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0gICAgICAg
IHJlbmRlclRhcmdldFByb3BlcnRpZXMudXNhZ2UgPSBEMkQxX1JFTkRFUl9UQVJHRVRfVVNBR0Vf
R0RJX0NPTVBBVElCTEU7Ci0gICAgICAgIGF1dG8gaHduZFJlbmRlclRhcmdldFByb3BlcnRpZXMg
PSBEMkQxOjpId25kUmVuZGVyVGFyZ2V0UHJvcGVydGllcyg6OkdldERlc2t0b3BXaW5kb3coKSwg
RDJEMTo6U2l6ZVUoMTAsIDEwKSk7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBzeXN0ZW1GYWN0b3J5
KCktPkNyZWF0ZUh3bmRSZW5kZXJUYXJnZXQoJnJlbmRlclRhcmdldFByb3BlcnRpZXMsICZod25k
UmVuZGVyVGFyZ2V0UHJvcGVydGllcywgcmVpbnRlcnByZXRfY2FzdDxJRDJEMUh3bmRSZW5kZXJU
YXJnZXQqKj4oJmRlZmF1bHRSZW5kZXJUYXJnZXQpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
U1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIGRlZmF1bHRSZW5kZXJUYXJnZXQtPkFkZFJlZigpOwot
ICAgIH0KLQotICAgIHJldHVybiBkZWZhdWx0UmVuZGVyVGFyZ2V0OwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUluaXQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkK
LXsKLSAgICBpZiAoIWhkYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSEJJVE1BUCBiaXRtYXAg
PSBzdGF0aWNfY2FzdDxIQklUTUFQPihHZXRDdXJyZW50T2JqZWN0KGhkYywgT0JKX0JJVE1BUCkp
OwotCi0gICAgRElCUGl4ZWxEYXRhIHBpeGVsRGF0YShiaXRtYXApOwotCi0gICAgYXV0byB0YXJn
ZXRQcm9wZXJ0aWVzID0gRGlyZWN0MkQ6OnJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKLQotICAg
IENPTVB0cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7Ci0gICAgSFJFU1VMVCBo
ciA9IHN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRhcmdldFByb3BlcnRp
ZXMsICZyZW5kZXJUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUkVDVCBjbGllbnRSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBwaXhlbERh
dGEuc2l6ZSgpKTsKLSAgICBociA9IHJlbmRlclRhcmdldC0+QmluZERDKGhkYywgJmNsaWVudFJl
Y3QpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byBvd25lZFBsYXRmb3JtQ29udGV4dCA9IG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQ+KHJlbmRlclRhcmdldC5nZXQoKSk7Ci0gICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZShXVEZNb3ZlKG93bmVkUGxhdGZvcm1Db250ZXh0KSwgQml0bWFwUmVu
ZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7Ci0gICAgbV9kYXRhLT5tX2hkYyA9IGhkYzsK
LQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBzdGFydHMgaW4gc3luYyB3aXRoIG91ciBz
dGF0ZS4KLSAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3IoKSk7Ci0gICAgc2V0UGxh
dGZvcm1TdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZVRo
aWNrbmVzcyhzdHJva2VUaGlja25lc3MoKSk7Ci0gICAgLy8gRklYTUU6IG1fc3RhdGUuaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRl
eHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQqIHBsYXRmb3JtQ29udGV4dCkKLXsKLSAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1Db250
ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEKiBwbGF0Zm9ybUNvbnRleHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmlu
Z1R5cGUpCi17Ci0gICAgaWYgKCFwbGF0Zm9ybUNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKnBsYXRmb3Jt
Q29udGV4dCwgcmVuZGVyaW5nVHlwZSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQg
c3RhcnRzIGluIHN5bmMgd2l0aCBvdXIgc3RhdGUuCi0gICAgc2V0UGxhdGZvcm1GaWxsQ29sb3Io
ZmlsbENvbG9yKCkpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7
Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKCkpOwotICAg
IC8vIEZJWE1FOiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb252ZXJ0SW50
ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZv
cm1Db250ZXh0KCkpKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6On5HcmFwaGljc0Nv
bnRleHREaXJlY3QyRCgpCi17Ci0gICAgZGVsZXRlIG1fZGF0YTsKLX0KLQotUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUNvbnRleHQoKSBj
b25zdAotewotICAgIHJldHVybiAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnN5bmNDb250ZXh0KFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1JRDJEMVJlbmRl
clRhcmdldCogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyZW5kZXJUYXJnZXQoKQot
ewotICAgIGlmICghbV9wbGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fcGxhdGZvcm1Db250ZXh0Lm1fdHJhbnNwYXJlbmN5
TGF5ZXJTdGFjay5sYXN0KCkucmVuZGVyVGFyZ2V0LmdldCgpOwotCi0gICAgcmV0dXJuIG1fcGxh
dGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTo6c2V0QWxwaGEoZmxvYXQgYWxwaGEpCi17Ci0gICAgQVNTRVJUKG1fcGxh
dGZvcm1Db250ZXh0Lm1fdHJhbnNwYXJlbmN5TGF5ZXJTdGFjay5pc0VtcHR5KCkpOwotICAgIG1f
YWxwaGEgPSBhbHBoYTsKLX0KLQotZmxvYXQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OjpjdXJyZW50R2xvYmFsQWxwaGEoKSBjb25zdAotewotICAgIGlmICghbV9wbGF0Zm9ybUNvbnRl
eHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1f
cGxhdGZvcm1Db250ZXh0Lm1fdHJhbnNwYXJlbmN5TGF5ZXJTdGFjay5sYXN0KCkub3BhY2l0eTsK
LQotICAgIHJldHVybiBtX2FscGhhOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpzYXZlKCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKLSAgICBEaXJlY3QyRDo6
c2F2ZSgqcGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpyZXN0b3JlKCkKLXsKLSAgICBpZiAoIXN0YWNrU2l6ZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKLSAgICBEaXJlY3QyRDo6cmVzdG9y
ZSgqcGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNp
emUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFn
ZSgqcGxhdGZvcm1Db250ZXh0KCksIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwg
aW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywgc3RhdGUuYWxwaGEsIERpcmVj
dDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpyZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVj
dCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCkKLXsKLSAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSAh
bV9kYXRhLT5tX2hkYyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBpZiAoIWNyZWF0
ZWRCaXRtYXApIHsKLSAgICAgICAgRGlyZWN0MkQ6OnJlc3RvcmUoKnBsYXRmb3JtQ29udGV4dCgp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghaGRjIHx8IGRzdFJlY3QuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHNvdXJjZUJpdG1hcCA9IGFkb3B0
R0RJT2JqZWN0KHN0YXRpY19jYXN0PEhCSVRNQVA+KDo6R2V0Q3VycmVudE9iamVjdChoZGMsIE9C
Sl9CSVRNQVApKSk7Ci0KLSAgICBESUJQaXhlbERhdGEgcGl4ZWxEYXRhKHNvdXJjZUJpdG1hcC5n
ZXQoKSk7Ci0gICAgQVNTRVJUKHBpeGVsRGF0YS5iaXRzUGVyUGl4ZWwoKSA9PSAzMik7Ci0KLSAg
ICBhdXRvIGJpdG1hcFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpOwot
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBhdXRvJiBwbGF0Zm9ybUNv
bnRleHQgPSAqdGhpcy0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRt
YXA+IGJpdG1hcDsKLSAgICBIUkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdl
dCgpLT5DcmVhdGVCaXRtYXAocGl4ZWxEYXRhLnNpemUoKSwgcGl4ZWxEYXRhLmJ1ZmZlcigpLCBw
aXhlbERhdGEuYnl0ZXNQZXJSb3coKSwgJmJpdG1hcFByb3BlcnRpZXMsICZiaXRtYXApOwotICAg
IEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIFBsYXRmb3JtQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihwbGF0Zm9ybUNvbnRleHQpOwotCi0gICAgLy8gTm90ZTogVGhlIGNvbnRlbnQg
aW4gdGhlIEhEQyBpcyBpbnZlcnRlZCBjb21wYXJlZCB0byBEaXJlY3QyRCwgc28gaXQgbmVlZHMg
dG8gYmUgZmxpcHBlZC4KLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVy
VGFyZ2V0KCk7Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiBjdXJyZW50VHJhbnNmb3JtOwotICAg
IGNvbnRleHQtPkdldFRyYW5zZm9ybSgmY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNmb3JtKGN1cnJlbnRUcmFuc2Zvcm0pOwotICAgIHRyYW5zZm9ybS50cmFu
c2xhdGUoZHN0UmVjdC5sb2NhdGlvbigpKTsKLSAgICB0cmFuc2Zvcm0uc2NhbGUoMS4wLCAtMS4w
KTsKLSAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKDAsIC1kc3RSZWN0LmhlaWdodCgpKTsKLQotICAg
IGNvbnRleHQtPlNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwotICAgIGNvbnRleHQtPkRyYXdCaXRt
YXAoYml0bWFwLmdldCgpLCBEMkQxOjpSZWN0RigwLCAwLCBkc3RSZWN0LndpZHRoKCksIGRzdFJl
Y3QuaGVpZ2h0KCkpKTsKLQotICAgIDo6RGVsZXRlREMoaGRjKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3Ip
Ci17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBz
dHlsZSkKLXsKLSAgICBEaXJlY3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihtX3BsYXRm
b3JtQ29udGV4dCwgcmVjdCwgc3R5bGUpOwotfQotCi1HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYgcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVu
ZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKLSAgICA6IG1fcGxhdGZvcm1Db250ZXh0
KHBsYXRmb3JtQ29udGV4dCkKLSAgICAsIG1fcmVuZGVyZXJUeXBlKHJlbmRlcmluZ1R5cGUpCi17
Ci0gICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1fcmVuZGVyZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQotICAgICAgICBiZWdpbkRy
YXcoKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUoc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
PiYmIG93bmVkUGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFw
UmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKLSAgICA6IG1fb3duZWRQbGF0Zm9y
bUNvbnRleHQoV1RGTW92ZShvd25lZFBsYXRmb3JtQ29udGV4dCkpCi0gICAgLCBtX3BsYXRmb3Jt
Q29udGV4dCgqbV9vd25lZFBsYXRmb3JtQ29udGV4dCkKLSAgICAsIG1fcmVuZGVyZXJUeXBlKHJl
bmRlcmluZ1R5cGUpCi17Ci0gICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcmVuZGVyZXJUeXBlID09IEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQot
ICAgICAgICBiZWdpbkRyYXcoKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
Ojp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCkKLXsKLSAgICBpZiAoIW1fcGxhdGZv
cm1Db250ZXh0LnJlbmRlclRhcmdldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9w
bGF0Zm9ybUNvbnRleHQuYmVnaW5EcmF3Q291bnQpCi0gICAgICAgIGVuZERyYXcoKTsKLX0KLQot
SUQyRDFTb2xpZENvbG9yQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpicnVzaFdpdGhD
b2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgp
LT5icnVzaFdpdGhDb2xvcihjb2xvcldpdGhHbG9iYWxBbHBoYShjb2xvcikpLmdldCgpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y2xpcChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpj
bGlwKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpjbGlwKElEMkQxR2VvbWV0cnkqIHBhdGgpCi17Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBhZmZpbmVUcmFuc2Zvcm0pCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlOjpmbHVzaCgpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlOjpiZWdpbkRyYXcoKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LmJlZ2luRHJhdygpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kRHJhdygpCi17Ci0g
ICAgbV9wbGF0Zm9ybUNvbnRleHQuZW5kRHJhdygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6cmVzdG9yZSgpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjpzYXZlKCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKLXsKLSAgICBBU1NFUlQobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFy
Z2V0KCkpOwotICAgIG1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5TZXRUcmFuc2Zv
cm0odHJhbnNmb3JtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6
OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6cm90YXRlKGZsb2F0IGFuZ2xlKQotewotfQotCi1EMkQxX0NPTE9S
X0YgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbnN0IENv
bG9yJiBjb2xvcikgY29uc3QKLXsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7Ci0gICAgcmV0dXJuIEQyRDE6
OkNvbG9yRihyLCBnLCBiLCBhICogbV9kYXRhLT5jdXJyZW50R2xvYmFsQWxwaGEoKSk7Ci19Ci0K
LUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzb2xpZFN0cm9rZUJydXNoKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRTdHJva2VCcnVz
aC5nZXQoKTsKLX0KLQotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNvbGlk
RmlsbEJydXNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fc29s
aWRGaWxsQnJ1c2guZ2V0KCk7Ci19Ci0KLUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpwYXR0ZXJuU3Ryb2tlQnJ1c2goKSBjb25zdAotewotICAgIHJldHVybiBwbGF0Zm9ybUNv
bnRleHQoKS0+bV9wYXR0ZXJuU3Ryb2tlQnJ1c2guZ2V0KCk7Ci19Ci0KLUlEMkQxQnJ1c2gqIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpwYXR0ZXJuRmlsbEJydXNoKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVybkZpbGxCcnVzaC5nZXQoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YmVnaW5EcmF3KCkKLXsKLSAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+YmVnaW5EcmF3KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmVuZERyYXcoKQotewotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5lbmREcmF3KCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZsdXNoKCkKLXsKLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpmbHVzaCgqcGxhdGZvcm1Db250ZXh0
KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3UGF0dGVybihjb25z
dCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0gICAgaWYgKCFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQot
ICAgICAgICByZXR1cm47Ci0gICAgYXV0byB0aWxlSW1hZ2UgPSBpbWFnZTsKLSAgICBEaXJlY3Qy
RDo6ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgpLCBXVEZNb3ZlKHRpbGVJbWFnZSksIElu
dFNpemUoaW1hZ2Uuc2l6ZSgpKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgp
KTsKLX0KLQotLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRl
ci4KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotewotICAgIEFTU0VSVCghcmVjdC5pc0Vt
cHR5KCkpOwotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6
ZHJhd1JlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBib3JkZXJUaGlja25lc3MsIHN0YXRl
LmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldExpbmVDYXAoTGluZUNhcCkK
LXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldExpbmVKb2lu
KExpbmVKb2luKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
c2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjpzZXRNaXRlckxpbWl0KGZsb2F0IGNhbnZhc01pdGVyTGltaXQpCi17
Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0RGFzaE9mZnNldChjYW52YXNNaXRlckxpbWl0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldERhc2hPZmZzZXQo
ZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXREYXNoT2Zmc2V0
KGRhc2hPZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
c2V0UGF0dGVybldpZHRoKGZsb2F0IHBhdHRlcm5XaWR0aCkKLXsKLSAgICBtX3BsYXRmb3JtQ29u
dGV4dC5zZXRQYXR0ZXJuV2lkdGgocGF0dGVybldpZHRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldFBhdHRlcm5PZmZzZXQoZmxvYXQgcGF0dGVybk9mZnNl
dCkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRQYXR0ZXJuT2Zmc2V0KHBhdHRlcm5PZmZz
ZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0U3Ryb2tl
VGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRT
dHJva2VUaGlja25lc3ModGhpY2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6OnNldERhc2hlcyhjb25zdCBEYXNoQXJyYXkmIGRhc2hlcykKLXsKLSAgICBt
X3BsYXRmb3JtQ29udGV4dC5zZXREYXNoZXMoZGFzaGVzKTsKLX0KLQotRDJEMV9TVFJPS0VfU1RZ
TEVfUFJPUEVSVElFUyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnN0cm9rZVN0eWxl
UHJvcGVydGllcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEQyRDE6OlN0cm9rZVN0eWxlUHJvcGVy
dGllcyhtX3BsYXRmb3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1Db250ZXh0Lm1fbGlu
ZUNhcCwgbV9wbGF0Zm9ybUNvbnRleHQubV9saW5lQ2FwLCBtX3BsYXRmb3JtQ29udGV4dC5tX2xp
bmVKb2luLCBtX3BsYXRmb3JtQ29udGV4dC5tX21pdGVyTGltaXQsIEQyRDFfREFTSF9TVFlMRV9T
T0xJRCwgMC4wZik7Ci19Ci0KLUlEMkQxU3Ryb2tlU3R5bGUqIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpzdHJva2VTdHlsZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKLSAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPnN0cm9rZVN0eWxlKCk7Ci19Ci0K
LS8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KLXZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQyKQotewotICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQot
ICAgICAgICByZXR1cm47Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIERp
cmVjdDJEOjpkcmF3TGluZSgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50MSwgcG9pbnQyLCBzdGF0
ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywg
c3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29u
dGV4dCgpLCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5z
dHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKLXsKLSAgICBpZiAoIW1fc3RhdGUu
c3Ryb2tlUGF0dGVybikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBjb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0KCk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJ
WE1FOiBUaGlzIGlzbid0IHJlYWxseSBuZWVkZWQgb24gV2luZG93cwotCi0gICAgY29uc3QgZmxv
YXQgcGF0dGVybkFscGhhID0gMTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuU3Ry
b2tlQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3Jt
UGF0dGVybigqdGhpcywgcGF0dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RNKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmFwcGx5RmlsbFBhdHRlcm4oKQotewotICAgIGlmICgh
bV9zdGF0ZS5maWxsUGF0dGVybikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07
IC8vIEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBuZWVkZWQgb24gV2luZG93cwotCi0gICAgY29u
c3QgZmxvYXQgcGF0dGVybkFscGhhID0gMTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0
ZXJuRmlsbEJydXNoID0gYWRvcHRDT00obV9zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZv
cm1QYXR0ZXJuKCp0aGlzLCBwYXR0ZXJuQWxwaGEsIHVzZXJUb0Jhc2VDVE0pKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsK
LSAgICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHN0
YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4
dCgpOwotICAgIERpcmVjdDJEOjpkcmF3UGF0aChjb250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6U3Ry
b2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUGF0aChjb25zdCBQYXRoJiBw
YXRoKQotewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZv
cm1Db250ZXh0KCk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxQYXRoKGNvbnRleHQsIHBhdGgsIERpcmVj
dDJEOjpGaWxsU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCi17Ci0gICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXV0byYgY29udGV4dCA9
ICpwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBEaXJlY3QyRDo6c3Ryb2tlUGF0aChjb250ZXh0LCBw
YXRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5z
dGF0ZSgpOwotICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgRGly
ZWN0MkQ6OmZpbGxSZWN0KGNvbnRleHQsIHJlY3QsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRl
LCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAg
YXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbFJl
Y3QoY29udGV4dCwgcmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKLXsKLSAgICBhdXRvIGJydXNoID0gZ3JhZGll
bnQuY3JlYXRlQnJ1c2gobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIGlm
ICghYnJ1c2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhH
cmFkaWVudChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgYnJ1c2guZ2V0KCkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3Is
IEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRl
eHQoKS5zdGF0ZSgpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBz
dGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKLQotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9z
aXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRN
b2RlKTsKLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNv
bG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICBEaXJlY3QyRDo6U3RhdGU6
OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRv
ciwgQmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAg
RGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGNvbG9y
LCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXV0byYgY29u
dGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoY29udGV4dCwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBEaXJlY3QyRDo6RmlsbFNv
dXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Ci17Ci0gICAgRGlyZWN0MkQ6OmNsaXAoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXBPdXQoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcE91dChjb25zdCBQYXRoJiBw
YXRoKQotewotICAgIERpcmVjdDJEOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgm
IHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQotewotICAgIERpcmVjdDJEOjpjbGlwUGF0aCgqcGxh
dGZvcm1Db250ZXh0KCksIHBhdGgsIGNsaXBSdWxlKTsKLX0KLQotSW50UmVjdCBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIERpcmVjdDJE
OjpTdGF0ZTo6Z2V0Q2xpcEJvdW5kcygqcGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCBvcGFjaXR5KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0Ojpi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwotICAgIHNhdmUoKTsKLQotICAgIG1fc3Rh
dGUuYWxwaGEgPSBvcGFjaXR5OwotCi0gICAgRGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoKnBsYXRmb3JtQ29udGV4dCgpLCBvcGFjaXR5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAgIEdy
YXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBEaXJlY3QyRDo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKnBsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIG1fc3RhdGUuYWxw
aGEgPSBtX2RhdGEtPmN1cnJlbnRHbG9iYWxBbHBoYSgpOwotCi0gICAgcmVzdG9yZSgpOwotfQot
Ci1ib29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVy
cygpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIGlmIChm
bGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCi0gICAg
ICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKG1fcGxhdGZvcm1Db250ZXh0
LCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNl
dFN0cm9rZVN0eWxlKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAg
ICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAg
ICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICAgICAgLy8g
TWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBD
YW52YXNSZW5kZXJpbmdDb250ZXh0Ci0gICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQg
c2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICAg
ICAgYXV0byYgbXV0YWJsZVN0YXRlID0gY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHRTdGF0ZSY+
KGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpOwotICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zm
c2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgbXV0YWJsZVN0YXRlLnNoYWRv
d09mZnNldCA9IHsgc2hhZG93T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkg
fTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5jb21wb3NpdGVP
cGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0
ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRp
YWxpYXMpOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VDb2xvckNoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUuc3Ryb2tlQ29sb3Ig
PT0gY29sb3IpOwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZFN0cm9rZUJydXNo
ID0gYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7ICAgIAotICAgIH0KLSAgICAKLSAgICBp
ZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkp
IHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUuZmlsbENvbG9yID09IGNvbG9yKTsKLSAgICAgICAg
cGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRGaWxsQnJ1c2ggPSBicnVzaFdpdGhDb2xvcihmaWxs
Q29sb3IoKSk7Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpIHsKLSAgICAgICAgYXV0byBmb250U21v
b3RoaW5nTW9kZSA9IGVuYWJsZSA/IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9DTEVBUlRZUEUg
OiBEMkQxX1RFWFRfQU5USUFMSUFTX01PREVfQUxJQVNFRDsKLSAgICAgICAgcGxhdGZvcm1Db250
ZXh0KCktPnJlbmRlclRhcmdldCgpLT5TZXRUZXh0QW50aWFsaWFzTW9kZShmb250U21vb3RoaW5n
TW9kZSk7Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpBbHBoYUNoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUuYWxwaGEgPT0gYWxw
aGEpOwotICAgICAgICBtX2RhdGEtPnNldEFscGhhKGFscGhhKTsKLSAgICB9Ci0KLSAgICBpZiAo
ZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHlDaGFuZ2UpKSB7Ci0gICAgICAgIEQyRDFfSU5URVJQT0xBVElPTl9NT0RFIHF1YWxpdHkg
PSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwotCi0gICAgICAgIHN3
aXRjaCAobW9kZSkgewotICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0
OgotICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1Rf
TkVJR0hCT1I7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9u
UXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKLSAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lO
VEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzoKLSAgICAgICAgICAgIHF1YWxp
dHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVI7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TWVkaXVtOgotICAgICAgICAgICAg
cXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX0NVQklDOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6Ci0gICAgICAgICAg
ICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfSElHSF9RVUFMSVRZX0NVQklDOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IFNldEludGVy
cG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpLCBxdWFsaXR5KTsKLSAgICB9Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQp
Ci17Ci0gICAgRGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoKnBsYXRmb3JtQ29udGV4dCgpLCBsaW1p
dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgRGlyZWN0MkQ6OmNsZWFyUmVjdCgqcGxhdGZvcm1Db250
ZXh0KCksIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQotewotICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29u
dGV4dCgpOwotICAgIERpcmVjdDJEOjpzdHJva2VSZWN0KGNvbnRleHQsIHJlY3QsIGxpbmVXaWR0
aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TGlu
ZUNhcChMaW5lQ2FwIGNhcCkKLXsKLSAgICBEaXJlY3QyRDo6c2V0TGluZUNhcCgqcGxhdGZvcm1D
b250ZXh0KCksIGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExp
bmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAg
IGlmIChkYXNoT2Zmc2V0IDwgMCkgewotICAgICAgICBmbG9hdCBsZW5ndGggPSAwOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhc2hlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAg
IGxlbmd0aCArPSBzdGF0aWNfY2FzdDxmbG9hdD4oZGFzaGVzW2ldKTsKLSAgICAgICAgaWYgKGxl
bmd0aCkKLSAgICAgICAgICAgIGRhc2hPZmZzZXQgPSBmbW9kKGRhc2hPZmZzZXQsIGxlbmd0aCkg
KyBsZW5ndGg7Ci0gICAgfQotCi0gICAgRGlyZWN0MkQ6OnNldExpbmVEYXNoKCpwbGF0Zm9ybUNv
bnRleHQoKSwgZGFzaGVzLCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKLXsKLSAgICBEaXJlY3QyRDo6c2V0
TGluZUpvaW4oKnBsYXRmb3JtQ29udGV4dCgpLCBqb2luKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIERpcmVj
dDJEOjpzY2FsZSgqcGxhdGZvcm1Db250ZXh0KCksIHNpemUpOwotICAgIC8vIEZJWE1FOiBtX2Rh
dGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cm90YXRlKGZsb2F0IGFuZ2xlKQotewot
ICAgIERpcmVjdDJEOjpyb3RhdGUoKnBsYXRmb3JtQ29udGV4dCgpLCBhbmdsZSk7Ci0gICAgLy8g
RklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9
IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjp0cmFuc2xhdGUoZmxv
YXQgeCwgZmxvYXQgeSkKLXsKLSAgICBEaXJlY3QyRDo6dHJhbnNsYXRlKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgeCwgeSk7Ci0gICAgLy8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zv
cm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0g
ICAgRGlyZWN0MkQ6OmNvbmNhdENUTSgqcGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7Ci0g
ICAgLy8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVu
dGl0eSA9IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgRGlyZWN0MkQ6OlN0YXRl
OjpzZXRDVE0oKnBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwotICAgIC8vIEZJWE1FOiBt
X2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsK
LX0KLQotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpnZXRDVE0oSW5j
bHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gRGlyZWN0
MkQ6OlN0YXRlOjpnZXRDVE0oKnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotRmxvYXRSZWN0IEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKLXsKLSAgICByZXR1cm4gRGlyZWN0
MkQ6OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUg
c3Ryb2tlU3R5bGUpCi17Ci0gICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBEaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dCgqcGxhdGZvcm1Db250ZXh0KCksIHBv
aW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIG1fc3Rh
dGUuc3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRV
UkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCi17Ci0gICAgLy8gVGhp
cyBmdW5jdGlvbiBpcyBwcm9iYWJhbHkgbm90IG5lZWRlZC4KLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjppc0NBTGF5ZXJDb250ZXh0KCkg
Y29uc3QKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmFseSBub3QgbmVlZGVkLgot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxl
cmF0ZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBE
aXJlY3QyRDo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCi17Ci0gICAgLy8gVGhpcyBpcyBhIG5vLW9wIGZv
ciBEaXJlY3QyRC4KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIGlmIChtX3N0YXRlLmZpbGxHcmFk
aWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgYmUgYWJsZSB0byBmaWxsIGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVz
IGluIEQyRC4KLSAgICAgICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBEaXJlY3QyRDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4
dCgpLCBlbGxpcHNlLCBtX3N0YXRlLmZpbGxDb2xvciwgbV9zdGF0ZS5zdHJva2VTdHlsZSwgbV9z
dGF0ZS5zdHJva2VDb2xvciwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxs
aXBzZSkKLXsKLSAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0YXRlLnN0cm9r
ZVBhdHRlcm4pIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHN0cm9r
ZSBlbGxpcHNlcyB3aXRoIHBhdHRlcm4vZ3JhZGllbnQgYnJ1c2hlcyBpbiBEMkQuCi0gICAgICAg
IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBEaXJlY3QyRDo6ZHJhd0VsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBt
X3N0YXRlLnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRo
aWNrbmVzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdHbHlwaHMo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250
U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQotewotICAgIFVOVVNFRF9QQVJBTShmb250U21v
b3RoaW5nKTsKLSAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7Ci0gICAgVmVjdG9yPHVuc2ln
bmVkIHNob3J0PiBnbHlwaHMobnVtR2x5cGhzKTsKLSAgICBWZWN0b3I8ZmxvYXQ+IGhvcml6b250
YWxBZHZhbmNlcyhudW1HbHlwaHMpOwotICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiBn
bHlwaE9mZnNldHMobnVtR2x5cGhzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1HbHlwaHM7ICsraSkgewotICAgICAgICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZmZXIuYWR2
YW5jZXNDb3VudCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYXV0byBhZHZhbmNl
ID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMoaSArIGZyb20pOwotICAgICAgICBpZiAoIWFkdmFuY2Up
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBnbHlwaHNbaV0gPSBnbHlwaEJ1ZmZl
ci5nbHlwaEF0KGkgKyBmcm9tKTsKLSAgICAgICAgaG9yaXpvbnRhbEFkdmFuY2VzW2ldID0gYWR2
YW5jZS0+d2lkdGgoKTsKLSAgICAgICAgZ2x5cGhPZmZzZXRzW2ldLmFkdmFuY2VPZmZzZXQgPSBh
ZHZhbmNlLT53aWR0aCgpOwotICAgICAgICBnbHlwaE9mZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQg
PSBhZHZhbmNlLT5oZWlnaHQoKTsKLSAgICB9Ci0KLSAgICBkb3VibGUgc3ludGhldGljQm9sZE9m
ZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOwotCi0gICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpkcmF3R2x5cGhzKG1fcGxh
dGZvcm1Db250ZXh0LCBEaXJlY3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0
KCkpLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksCi0g
ICAgICAgIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBmb250LCBzeW50aGV0
aWNCb2xkT2Zmc2V0LCBnbHlwaHMsIGhvcml6b250YWxBZHZhbmNlcywgZ2x5cGhPZmZzZXRzLCB4
T2Zmc2V0LAotICAgICAgICBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNr
bmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvcik7Ci19Ci0KLUdyYXBo
aWNzQ29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikK
LXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotICAgIHJldHVybiBDbGlwVG9EcmF3
aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8qIGNvbnRleHQgPSAmZ3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgaWYg
KGF1dG8gc3VyZmFjZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb250ZXh0
KSkKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLXZv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXll
ciYsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4K
LX0KLSNlbmRpZgotCi0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5j
cHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDYx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgi
Ci0KLSNpZiBFTkFCTEUoV0VCR0wpICYmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0
ci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCIKLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDxkMmQx
ZWZmZWN0cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4dEdMSW1h
Z2VFeHRyYWN0b3I6On5HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yKCkgPSBkZWZhdWx0
OwotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShi
b29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGJv
b2wgaWdub3JlTmF0aXZlSW1hZ2VBbHBoYVByZW11bHRpcGxpY2F0aW9uKQotewotICAgIGlmICgh
bV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMR0w6OnBhaW50
VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGNvbnN0IEludFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KQotewotICAgIGlmICghaW1hZ2VQaXhlbHMgfHwgaW1hZ2VTaXplLmlzRW1wdHkoKSB8
fCBjYW52YXNTaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKSAmJiBVU0UoRElSRUNUMkQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkRlbGV0ZWQ6IHN2bjprZXl3b3JkcwojIyAt
MSArMCwwICMjCi1EYXRlIEF1dGhvciBJZCBSZXZpc2lvbiBIZWFkVVJMClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
RGlyZWN0MkQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDE0MCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJDT01QdHIuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQyZDFfMS5oPgotI2lu
Y2x1ZGUgPGQyZDFlZmZlY3RzLmg+Ci0jaW5jbHVkZSA8ZDJkMWhlbHBlci5oPgotI2luY2x1ZGUg
PHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx3dGYvVGlueUxSVUNhY2hlLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlIHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBHcmFwaGljc0NvbnRleHQ6OkJp
dG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlKTsKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUoc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiYmLCBHcmFwaGlj
c0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlKTsKLSAgICB+R3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlKCk7Ci0KLSAgICB2b2lkIHN5bmNDb250ZXh0KFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJik7Ci0KLSAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQg
b3BhY2l0eSk7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOwotCi0gICAgdm9pZCBj
bGlwKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgY2xpcChjb25zdCBQYXRoJik7Ci0gICAg
dm9pZCBjbGlwKElEMkQxR2VvbWV0cnkqKTsKLQotICAgIHZvaWQgYmVnaW5EcmF3KCk7Ci0gICAg
dm9pZCBlbmREcmF3KCk7Ci0gICAgdm9pZCBmbHVzaCgpOwotICAgIHZvaWQgc2F2ZSgpOwotICAg
IHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgdm9pZCByZXN0b3JlKCk7Ci0gICAg
dm9pZCByb3RhdGUoZmxvYXQpOwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCk7Ci0g
ICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgdm9pZCBzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNh
cCk7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbik7Ci0gICAgdm9pZCBzZXRTdHJva2VT
dHlsZShTdHJva2VTdHlsZSk7Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KTsKLSAgICB2
b2lkIHNldERhc2hPZmZzZXQoZmxvYXQpOwotICAgIHZvaWQgc2V0UGF0dGVybldpZHRoKGZsb2F0
KTsKLSAgICB2b2lkIHNldFBhdHRlcm5PZmZzZXQoZmxvYXQpOwotICAgIHZvaWQgc2V0U3Ryb2tl
VGhpY2tuZXNzKGZsb2F0KTsKLSAgICB2b2lkIHNldERhc2hlcyhjb25zdCBEYXNoQXJyYXkmKTsK
LSAgICB2b2lkIHNldEFscGhhKGZsb2F0KTsKLQotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
JiBwbGF0Zm9ybUNvbnRleHQoKSB7IHJldHVybiBtX3BsYXRmb3JtQ29udGV4dDsgfQotICAgIElE
MkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQoKTsKLQotICAgIEhEQyBtX2hkYyB7IG51bGxw
dHIgfTsKLQotICAgIGZsb2F0IGN1cnJlbnRHbG9iYWxBbHBoYSgpIGNvbnN0OwotCi0gICAgRDJE
MV9TVFJPS0VfU1RZTEVfUFJPUEVSVElFUyBzdHJva2VTdHlsZVByb3BlcnRpZXMoKSBjb25zdDsK
LQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+
IG1fb3duZWRQbGF0Zm9ybUNvbnRleHQ7Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIG1f
cGxhdGZvcm1Db250ZXh0OwotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVy
aW5nQ29udGV4dFR5cGUgbV9yZW5kZXJlclR5cGU7Ci0KLSAgICB1bnNpZ25lZCBiZWdpbkRyYXdD
b3VudCB7IDAgfTsKLQotICAgIGZsb2F0IG1fYWxwaGEgeyAxLjAgfTsKLQotICAgIGZyaWVuZCBj
bGFzcyBEMkRDb250ZXh0U3RhdGVTYXZlcjsKLX07Ci0KLWNsYXNzIEQyRENvbnRleHRTdGF0ZVNh
dmVyIHsKLXB1YmxpYzoKLSAgICBEMkRDb250ZXh0U3RhdGVTYXZlcihHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGUmIGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQotICAg
ICAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2
ZUFuZFJlc3RvcmUpCi0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAg
ICAgICAgIG1fY29udGV4dC5tX3BsYXRmb3JtQ29udGV4dC5zYXZlKCk7Ci0gICAgfQotCi0gICAg
fkQyRENvbnRleHRTdGF0ZVNhdmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0
b3JlKQotICAgICAgICAgICAgbV9jb250ZXh0Lm1fcGxhdGZvcm1Db250ZXh0LnJlc3RvcmUoKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHNhdmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX3NhdmVB
bmRSZXN0b3JlKTsKLSAgICAgICAgbV9jb250ZXh0Lm1fcGxhdGZvcm1Db250ZXh0LnNhdmUoKTsK
LSAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCByZXN0
b3JlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAg
bV9jb250ZXh0Lm1fcGxhdGZvcm1Db250ZXh0LnJlc3RvcmUoKTsKLSAgICAgICAgbV9zYXZlQW5k
UmVzdG9yZSA9IGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgZGlkU2F2ZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV9zYXZlQW5kUmVzdG9yZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBvd25lZFBsYXRmb3Jt
Q29udGV4dDsKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUmIG1fY29udGV4dDsK
LSAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmUgeyBmYWxzZSB9OwotfTsKLQotfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dFdpbi5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw4ICsyOCw2IEBACiAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCIKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oIgogI2VuZGlmCiAKICNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKQEAgLTQwLDcgKzM4LDYgQEAKICNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+CiAKLQogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBzdGF0aWMgdm9pZCBmaWxsV2l0aENsZWFyQ29sb3IoSEJJVE1BUCBi
aXRtYXApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0V2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5oCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDExICszMCw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
Q0cuaCIKICNkZWZpbmUgR3JhcGhpY3NDb250ZXh0V2luIEdyYXBoaWNzQ29udGV4dENHCiAKLSNl
bGlmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dERpcmVjdDJELmgi
Ci0jZGVmaW5lIEdyYXBoaWNzQ29udGV4dFdpbiBHcmFwaGljc0NvbnRleHREaXJlY3QyRAotCiAj
ZWxpZiBVU0UoQ0FJUk8pCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJEaXJl
Y3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzTGF5ZXJEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGlyZWN0MkQuY3Bw
CShub25leGlzdGVudCkKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzTGF5ZXJEaXJlY3QyRC5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVk
ZSAiRGlzcGxheUxpc3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyRmFjdG9yeS5oIgotI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KLSNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0KLSNpZiBDT01QSUxFUihNU1ZDKQot
Ly8gU2VlIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMXdlYTV6d2Uu
YXNweAotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCi0jZW5kaWYKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1SZWY8R3JhcGhpY3NMYXllcj4gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKEdy
YXBoaWNzTGF5ZXJGYWN0b3J5KiBmYWN0b3J5LCBHcmFwaGljc0xheWVyQ2xpZW50JiBjbGllbnQs
IFR5cGUgbGF5ZXJUeXBlKQotewotICAgIGlmIChmYWN0b3J5KSB7Ci0gICAgICAgIGF1dG8gbGF5
ZXIgPSBmYWN0b3J5LT5jcmVhdGVHcmFwaGljc0xheWVyKGxheWVyVHlwZSwgY2xpZW50KTsKLSAg
ICAgICAgbGF5ZXItPmluaXRpYWxpemUobGF5ZXJUeXBlKTsKLSAgICAgICAgcmV0dXJuIGxheWVy
OwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBSZXR1cm4gYSByZWFsIERpcmVjdDJEIGdyYXBoaWNz
IGxheWVyCi0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR3JhcGhpY3NMYXllckRpcmVjdDJEKGxh
eWVyVHlwZSwgY2xpZW50KSk7Ci19Ci0KLUdyYXBoaWNzTGF5ZXJEaXJlY3QyRDo6R3JhcGhpY3NM
YXllckRpcmVjdDJEKFR5cGUgbGF5ZXJUeXBlLCBHcmFwaGljc0xheWVyQ2xpZW50JiBjbGllbnQp
Ci0gICAgOiBHcmFwaGljc0xheWVyKGxheWVyVHlwZSwgY2xpZW50KQotewotfQotCi12b2lkIEdy
YXBoaWNzTGF5ZXJEaXJlY3QyRDo6aW5pdGlhbGl6ZShUeXBlIGxheWVyVHlwZSkKLXsKLX0KLQot
R3JhcGhpY3NMYXllckRpcmVjdDJEOjp+R3JhcGhpY3NMYXllckRpcmVjdDJEKCkKLXsKLSAgICB3
aWxsQmVEZXN0cm95ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyRGlyZWN0MkQ6OnNldE5l
ZWRzRGlzcGxheSgpCi17Ci0gICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyRGlyZWN0
MkQ6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHIsIFNob3VsZENsaXBU
b0xheWVyIHNob3VsZENsaXApCi17Ci0gICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0xheWVyRGlyZWN0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NMYXllckRpcmVjdDJELmgJKHJldmlzaW9uIDI4
NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xh
eWVyRGlyZWN0MkQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLQotI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKLWNsYXNzIERp
c3BsYXlMaXN0OwotfQotCi1jbGFzcyBGbG9hdFJvdW5kZWRSZWN0OwotY2xhc3MgSW1hZ2U7Ci1j
bGFzcyBUcmFuc2Zvcm1TdGF0ZTsKLQotY2xhc3MgR3JhcGhpY3NMYXllckRpcmVjdDJEIDogcHVi
bGljIEdyYXBoaWNzTGF5ZXIgewotcHVibGljOgotCi0gICAgV0VCQ09SRV9FWFBPUlQgZXhwbGlj
aXQgR3JhcGhpY3NMYXllckRpcmVjdDJEKFR5cGUsIEdyYXBoaWNzTGF5ZXJDbGllbnQmKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5HcmFwaGljc0xheWVyRGlyZWN0MkQoKTsKLQotcHJp
dmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluaXRpYWxpemUoVHlwZSkgb3ZlcnJpZGU7
Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE5lZWRzRGlzcGxheSgpIG92ZXJyaWRlOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIFNob3VsZENsaXBUb0xheWVyID0gQ2xpcFRvTGF5ZXIpIG92ZXJyaWRlOwotCi0gICAg
Ym9vbCBpc0dyYXBoaWNzTGF5ZXJDQSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
R1JBUEhJQ1NMQVlFUihXZWJDb3JlOjpHcmFwaGljc0xheWVyRGlyZWN0MkQsIGlzR3JhcGhpY3NM
YXllckNBKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAJKHJl
dmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMjMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIK
LQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVk
ZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgotI2lu
Y2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jaW5jbHVk
ZSA8bWF0aC5oPgotI2luY2x1ZGUgPHdpbmNvZGVjLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZCk7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4g
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCi17Ci0gICAgSW50U2l6ZSBiYWNrZW5kU2l6
ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYg
KGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBh
dXRvKiBwbGF0Zm9ybUNvbnRleHQgPSB0YXJnZXRDb250ZXh0ID8gdGFyZ2V0Q29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCkgOiBudWxscHRyOwotICAgIGF1dG8qIHJlbmRlclRhcmdldCA9IHBsYXRm
b3JtQ29udGV4dCA/IHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkgOiBudWxscHRyOwot
Ci0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgICAgIHJlbmRlclRhcmdldCA9IEdyYXBoaWNz
Q29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpOwotCi0gICAgYXV0byBiaXRtYXBDb250ZXh0
ID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShzaXplLCByZW5kZXJU
YXJnZXQsIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKCFiaXRtYXBDb250ZXh0KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBQbGF0Zm9ybUltYWdlUHRyIGJpdG1hcDsKLSAgICBIUkVTVUxUIGhy
ID0gYml0bWFwQ29udGV4dC0+R2V0Qml0bWFwKCZiaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVE
KGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwbGF0Zm9ybUNvbnRleHQgPSBtYWtl
VW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPihiaXRtYXBDb250ZXh0LmdldCgpLCBbdGhp
c10oKSB7Ci0gICAgICAgIG1fZGF0YS5sb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKLSAgICB9
LCBbdGhpc10oKSB7Ci0gICAgICAgIG1fZGF0YS5tYXJrQnVmZmVyT3V0T2ZTeW5jKCk7Ci0gICAg
fSk7Ci0KLSAgICBpZiAoIXBsYXRmb3JtQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
PihwbGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5n
Q29udGV4dFR5cGU6OkdQVU1lbW9yeSk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChzaXplLCBiYWNrZW5k
U2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHBsYXRmb3JtQ29udGV4
dCksIFdURk1vdmUoY29udGV4dCksIFdURk1vdmUoYml0bWFwKSkpOwotfQotCi1zdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCi17Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVh
dGUoc2l6ZSwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsKLX0KLQot
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKGNv
bnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBz
dGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+JiYgcGxhdGZvcm1Db250ZXh0
LCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmIGNvbnRleHQsIFBsYXRmb3JtSW1h
Z2VQdHImJiBiaXRtYXApCi0gICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwg
YmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKLSAgICAsIG1fcGxhdGZv
cm1Db250ZXh0KFdURk1vdmUocGxhdGZvcm1Db250ZXh0KSkKLSAgICAsIG1fY29udGV4dChXVEZN
b3ZlKGNvbnRleHQpKQotICAgICwgbV9iaXRtYXAoV1RGTW92ZShiaXRtYXApKQotewotfQotCi1H
cmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb250ZXh0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gKm1fY29udGV4dDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZDo6Zmx1c2hDb250ZXh0KCkKLXsKLSAgICBjb250ZXh0KCkuZmx1c2goKTsKLX0K
LQotUmVmUHRyPE5hdGl2ZUltYWdlPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weU5h
dGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAotewotICAgIENP
TVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0OwotICAgIEhSRVNVTFQg
aHIgPSBjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5RdWVyeUlu
dGVyZmFjZSgmYml0bWFwVGFyZ2V0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBpbWFnZTsKLSAgICBo
ciA9IGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZpbWFnZSk7Ci0gICAgQVNTRVJUKFNVQ0NFRURF
RChocikpOwotCi0gICAgLy8gRklYTUU6IG1fZGF0YS5kYXRhIGlzIG51bGxwdHIgZXZlbiB3aGVu
IGFza2luZyB0byBjb3B5IGJhY2tpbmcgc3RvcmUgbGVhZGluZyB0byB0ZXN0IGZhaWx1cmVzLgot
ICAgIGlmIChjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSAmJiBtX2RhdGEuZGF0YS5p
c0VtcHR5KCkpCi0gICAgICAgIGNvcHlCZWhhdmlvciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOwot
Ci0gICAgQ2hlY2tlZFNpemUgbnVtQnl0ZXMgPSBDaGVja2VkVWludDMyKG1fZGF0YS5iYWNraW5n
U3RvcmVTaXplLmhlaWdodCgpKSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKLSAgICBpZiAobnVtQnl0
ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChj
b3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSkgewotICAgICAgICBEMkQxX1JFQ1RfVSBi
YWNraW5nU3RvcmVEaW1lbnN0aW9ucyA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9kYXRhLmJhY2tp
bmdTdG9yZVNpemUpOwotICAgICAgICBpbWFnZS0+Q29weUZyb21NZW1vcnkoJmJhY2tpbmdTdG9y
ZURpbWVuc3Rpb25zLCBtX2RhdGEuZGF0YS5kYXRhKCksIDMyKTsKLQotICAgIH0KLQotICAgIHJl
dHVybiBOYXRpdmVJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotc3RhdGljIFBs
YXRmb3JtSW1hZ2VQdHIgY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoSUQyRDFCaXRtYXBS
ZW5kZXJUYXJnZXQqIGJpdG1hcFRhcmdldCwgSUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRT
aXplJiBib3VuZHMpCi17Ci0gICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IGltYWdlID8gbmF0aXZl
SW1hZ2VTaXplKGltYWdlKSA6IEZsb2F0U2l6ZSgpOwotCi0gICAgaWYgKGltYWdlICYmIChzdGF0
aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6ZS53aWR0aCgpKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+
KGJvdW5kcy53aWR0aCgpKSB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6ZS5oZWlnaHQo
KSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkgewotICAgICAgICBD
T01QdHI8SUQyRDFCaXRtYXA+IGNyb3BwZWRCaXRtYXAgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFw
KGJpdG1hcFRhcmdldCwgYm91bmRzKTsKLSAgICAgICAgaWYgKGNyb3BwZWRCaXRtYXApIHsKLSAg
ICAgICAgICAgIGF1dG8gc291cmNlUmVjdCA9IEQyRDE6OlJlY3RVKDAsIDAsIGJvdW5kcy53aWR0
aCgpLCBib3VuZHMuaGVpZ2h0KCkpOwotICAgICAgICAgICAgSFJFU1VMVCBociA9IGNyb3BwZWRC
aXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIGltYWdlLCAmc291cmNlUmVjdCk7Ci0gICAg
ICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JvcHBl
ZEJpdG1hcDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBpbWFnZTsKLX0KLQotc3Rh
dGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChJ
RDJEMUJpdG1hcFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0LCBDT01QdHI8SUQyRDFCaXRtYXA+
JiYgaW1hZ2UsIEludFNpemUgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFBy
ZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgaWYgKHJlc29sdXRp
b25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246
OlllcykKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShiaXRt
YXBUYXJnZXQsIGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAgICAg
ICAvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgc2NhbGVkIHZlcnNpb24KLSAgICAgICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2Up
KTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJl
c2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFBsYXRmb3JtSW1hZ2VQdHIgaW1hZ2U7Ci0g
ICAgaWYgKHJlc29sdXRpb25TY2FsZSgpID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShj
b3B5QmVoYXZpb3IpLT5wbGF0Zm9ybUltYWdlKCk7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9
IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSktPnBsYXRmb3JtSW1hZ2UoKTsK
LQotICAgIGF1dG8gYml0bWFwVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDxJRDJEMUJpdG1hcFJl
bmRlclRhcmdldCo+KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgcmV0dXJuIGNy
ZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LCBXVEZNb3Zl
KGltYWdlKSwgaW50ZXJuYWxTaXplKCksIHJlc29sdXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJlc29s
dXRpb24pOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpz
aW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0g
ICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7Ci0gICAgSFJF
U1VMVCBociA9IGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlF1
ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBQbGF0Zm9ybUltYWdlUHRyIGltYWdlID0gY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKS0+cGxhdGZvcm1JbWFnZSgpOwotICAg
IHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdl
dC5nZXQoKSwgV1RGTW92ZShpbWFnZSksIGludGVybmFsU2l6ZSgpLCByZXNvbHV0aW9uU2NhbGUo
KSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUGxhdGZvcm1JbWFnZVB0ciBJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDo6Y29tcGF0aWJsZUJpdG1hcChJRDJEMVJlbmRlclRhcmdldCogcmVu
ZGVyVGFyZ2V0KQotewotICAgIGxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOwotCi0gICAgaWYg
KCFyZW5kZXJUYXJnZXQpCi0gICAgICAgIHJldHVybiBiaXRtYXA7Ci0KLSAgICBpZiAobV9wbGF0
Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpID09IHJlbmRlclRhcmdldCkgewotICAgICAgICBD
T01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldChRdWVyeSwgcmVuZGVy
VGFyZ2V0KTsKLSAgICAgICAgaWYgKGJpdG1hcFRhcmdldCkgewotICAgICAgICAgICAgQ09NUHRy
PElEMkQxQml0bWFwPiBiYWNraW5nQml0bWFwOwotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChi
aXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmYmFja2luZ0JpdG1hcCkpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGJhY2tpbmdCaXRtYXAgIT0gbV9iaXRtYXApCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBiaXRtYXA7Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBkcmF3IGFuIElEMkQx
Qml0bWFwIHRvIGl0c2VsZi4gTXVzdCByZXR1cm4gYSBjb3B5LgotICAgICAgICAgICAgICAgIENP
TVB0cjxJRDJEMUJpdG1hcD4gY29waWVkQml0bWFwOwotICAgICAgICAgICAgICAgIGlmIChTVUND
RUVERUQocmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwg
RGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvcGllZEJpdG1hcCkpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChTVUNDRUVERUQoY29waWVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChu
dWxscHRyLCBtX2JpdG1hcC5nZXQoKSwgbnVsbHB0cikpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNvcGllZEJpdG1hcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHNpemUgPSBtX2JpdG1hcC0+R2V0UGl4ZWxT
aXplKCk7Ci0gICAgQVNTRVJUKHNpemUuaGVpZ2h0ICYmIHNpemUud2lkdGgpOwotCi0gICAgQ2hl
Y2tlZFVpbnQzMiBudW1CeXRlcyA9IHNpemUud2lkdGggKiBzaXplLmhlaWdodCAqIDQ7Ci0gICAg
aWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAvLyBDb3B5IHRoZSBiaXRzIGZyb20gY3VycmVudCByZW5kZXJUYXJnZXQgdG8gdGhlIG91
dHB1dCB0YXJnZXQuCi0gICAgLy8gV2UgY2Fubm90IGFjY2VzcyB0aGUgZGF0YSBiYWNraW5nIGFu
IElXSUNCaXRtYXAgd2hpbGUgYW4gYWN0aXZlIGRyYXcgc2Vzc2lvbiBpcyBvcGVuLgotICAgIGNv
bnRleHQtPmVuZERyYXcoKTsKLQotICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IHNvdXJj
ZURldmljZUNvbnRleHQgPSBtX3BsYXRmb3JtQ29udGV4dC0+ZGV2aWNlQ29udGV4dCgpOwotICAg
IGlmICghc291cmNlRGV2aWNlQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBDT01QdHI8SUQyRDFCaXRtYXAxPiBzb3VyY2VDUFVCaXRtYXA7Ci0gICAgRDJEMV9CSVRNQVBf
UFJPUEVSVElFUzEgYml0bWFwUHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQy
RDFfQklUTUFQX09QVElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9E
UkFXLCBEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7Ci0gICAgSFJFU1VMVCBociA9IHNvdXJjZURl
dmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChtX2JpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG51bGxw
dHIsIGJ5dGVzUGVyUm93LCBiaXRtYXBQcm9wZXJ0aWVzLCAmc291cmNlQ1BVQml0bWFwKTsKLSAg
ICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYg
KCFzb3VyY2VDUFVCaXRtYXApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaHIgPSBz
b3VyY2VDUFVCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIG1fYml0bWFwLmdldCgpLCBu
dWxscHRyKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgRDJEMV9NQVBQRURfUkVDVCBtYXBwZWRTb3VyY2VEYXRhOwotICAgIGhyID0gc291
cmNlQ1BVQml0bWFwLT5NYXAoRDJEMV9NQVBfT1BUSU9OU19SRUFELCAmbWFwcGVkU291cmNlRGF0
YSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IHRhcmdldERldmljZUNvbnRleHQ7Ci0gICAg
aHIgPSByZW5kZXJUYXJnZXQtPlF1ZXJ5SW50ZXJmYWNlKCZ0YXJnZXREZXZpY2VDb250ZXh0KTsK
LSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNv
bXBhdGlibGVCaXRtYXA7Ci0gICAgaHIgPSB0YXJnZXREZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRt
YXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgbWFwcGVkU291cmNlRGF0YS5iaXRzLCBtYXBwZWRT
b3VyY2VEYXRhLnBpdGNoLCBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpLCAmY29tcGF0aWJs
ZUJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5Vbm1hcCgpOwotICAgIEFTU0VSVChTVUND
RUVERUQoaHIpKTsKLQotICAgIGNvbnRleHQtPmJlZ2luRHJhdygpOwotCi0gICAgcmV0dXJuIGNv
bXBhdGlibGVCaXRtYXA7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmRy
YXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKLXsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAg
ICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKCkpOwotCi0gICAgYXV0byBj
b21wYXRpYmxlQml0bWFwID0gY29tcGF0aWJsZUJpdG1hcChkZXN0Q29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkpOwotCi0gICAgRmxvYXRTaXplIGN1cnJlbnRJbWFnZVNp
emUgPSBuYXRpdmVJbWFnZVNpemUoY29tcGF0aWJsZUJpdG1hcCk7Ci0gICAgaWYgKGN1cnJlbnRJ
bWFnZVNpemUuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRlc3RDb250ZXh0LmRy
YXdOYXRpdmVJbWFnZShjb21wYXRpYmxlQml0bWFwLCBjdXJyZW50SW1hZ2VTaXplLCBkZXN0UmVj
dCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAg
IGFkanVzdGVkU3JjUmVjdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUoKSk7Ci0KLSAgICBpZiAoYXV0
byBpbWFnZSA9IGNvcHlJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNr
aW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIGltYWdlLT5kcmF3UGF0
dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kOjpjbGlwVG9NYXNrKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgc3RkOjpvcHRpb25hbDxkb3Vi
bGU+LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4geyB9OwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQm
IG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVm
ZmVyKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbnVsbHB0cik7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhl
bEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZl
ciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBudWxscHRyKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5o
CShub25leGlzdGVudCkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShESVJFQ1QyRCkK
LQotI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2MuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQgewotICAgIFdURl9NQUtFX0lTT19B
TExPQ0FURUQoSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQpOwotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKTsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0
V2luZG93Kik7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
OwotCi0gICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZTsKLQotICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4g
Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25z
dCBvdmVycmlkZTsKLSAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5
LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgUmVmUHRyPEltYWdl
PiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lk
IGNsaXBUb01hc2soR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkg
b3ZlcnJpZGU7Ci0KLSAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0
IG92ZXJyaWRlOwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOwotCi0g
ICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxC
dWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwotCi1wcm90ZWN0ZWQ6Ci0gICAgSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50
U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UpOwot
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBtX3BsYXRmb3Jt
Q29udGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7
Ci0gICAgUGxhdGZvcm1JbWFnZVB0ciBtX2JpdG1hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVj
dDJELmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDMw
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQu
aCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKLSNpbmNsdWRlICJJbnRQb2ludC5oIgotI2lu
Y2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDxXaW5Db2Rl
Yy5oPgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JbWFnZURlY29kZXJEaXJlY3QyRDo6SW1hZ2VEZWNv
ZGVyRGlyZWN0MkQoKQotewotfQotCi1JV0lDSW1hZ2luZ0ZhY3RvcnkyKiBJbWFnZURlY29kZXJE
aXJlY3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKQotewotICAgIHN0YXRpYyBJV0lDSW1hZ2lu
Z0ZhY3RvcnkyKiB3aWNJbWFnaW5nRmFjdG9yeSA9IG51bGxwdHI7Ci0gICAgaWYgKCF3aWNJbWFn
aW5nRmFjdG9yeSkgewotICAgICAgICBIUkVTVUxUIGhyID0gQ29DcmVhdGVJbnN0YW5jZShDTFNJ
RF9XSUNJbWFnaW5nRmFjdG9yeSwgbnVsbHB0ciwgQ0xTQ1RYX0lOUFJPQ19TRVJWRVIsIElJRF9J
V0lDSW1hZ2luZ0ZhY3RvcnkyLCAoTFBWT0lEKikmd2ljSW1hZ2luZ0ZhY3RvcnkpOwotICAgICAg
ICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gd2lj
SW1hZ2luZ0ZhY3Rvcnk7Ci19Ci0KLXNpemVfdCBJbWFnZURlY29kZXJEaXJlY3QyRDo6Ynl0ZXNE
ZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkgY29uc3QKLXsKLSAgICAvLyBTZXQgdG8gbWF0
Y2ggdmFsdWUgdXNlZCBmb3IgQ29yZUdyYXBoaWNzLgotICAgIHJldHVybiAxMzA4ODsKLX0KLQot
U3RyaW5nIEltYWdlRGVjb2RlckRpcmVjdDJEOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Ci17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLWJvb2wg
SW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fbmF0aXZlRGVjb2RlciA/IHRydWUgOiBmYWxzZTsKLX0KLQotRW5jb2RlZERhdGFTdGF0
dXMgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmVuY29kZWREYXRhU3RhdHVzKCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJuIEVuY29kZWREYXRhU3RhdHVz
OjpFcnJvcjsKLQotICAgIC8vIEZJWE1FOiBIb29rIGludG8gV0lDIGRlY29kZXIgKGlmIGFzeW5j
IGRlY29kZSBpcyBldmVuIHBvc3NpYmxlKQotICAgIHJldHVybiBFbmNvZGVkRGF0YVN0YXR1czo6
Q29tcGxldGU7Ci19Ci0KLUludFNpemUgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnNpemUoKSBjb25z
dAotewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgp
OwotCi0gICAgQ09NUHRyPElXSUNCaXRtYXBGcmFtZURlY29kZT4gZnJhbWU7Ci0gICAgSFJFU1VM
VCBociA9IG1fbmF0aXZlRGVjb2Rlci0+R2V0RnJhbWUoMCwgJmZyYW1lKTsKLSAgICBpZiAoIVNV
Q0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBVSU5UIHdpZHRo
LCBoZWlnaHQ7Ci0gICAgaHIgPSBmcmFtZS0+R2V0U2l6ZSgmd2lkdGgsICZoZWlnaHQpOwotICAg
IGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIHJl
dHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwotfQotCi1zaXplX3QgSW1hZ2VEZWNvZGVyRGly
ZWN0MkQ6OmZyYW1lQ291bnQoKSBjb25zdAotewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVyKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIFVJTlQgY291bnQ7Ci0gICAgSFJFU1VMVCBociA9IG1f
bmF0aXZlRGVjb2Rlci0+R2V0RnJhbWVDb3VudCgmY291bnQpOwotICAgIGlmICghU1VDQ0VFREVE
KGhyKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLVJlcGV0
aXRpb25Db3VudCBJbWFnZURlY29kZXJEaXJlY3QyRDo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QK
LXsKLSAgICBpZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJuIFJlcGV0aXRpb25D
b3VudE5vbmU7Ci0KLSAgICAvLyBGSVhNRTogSWRlbnRpZnkgaW1hZ2UgdHlwZSwgYW5kIGRldGVy
bWluZSBwcm9wZXIgcmVwZXRpdGlvbiBjb3VudC4KLSAgICByZXR1cm4gUmVwZXRpdGlvbkNvdW50
Tm9uZTsKLX0KLQotc3RkOjpvcHRpb25hbDxJbnRQb2ludD4gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6
OmhvdFNwb3QoKSBjb25zdAotewotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0KLUludFNp
emUgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBT
dWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX25h
dGl2ZURlY29kZXIpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBDT01QdHI8SVdJ
Q0JpdG1hcEZyYW1lRGVjb2RlPiBmcmFtZTsKLSAgICBIUkVTVUxUIGhyID0gbV9uYXRpdmVEZWNv
ZGVyLT5HZXRGcmFtZShpbmRleCwgJmZyYW1lKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0g
ICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBVSU5UIHdpZHRoLCBoZWlnaHQ7Ci0gICAg
aHIgPSBmcmFtZS0+R2V0U2l6ZSgmd2lkdGgsICZoZWlnaHQpOwotICAgIGlmICghU1VDQ0VFREVE
KGhyKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIHJldHVybiBJbnRTaXplKHdp
ZHRoLCBoZWlnaHQpOwotfQotCi1ib29sIEltYWdlRGVjb2RlckRpcmVjdDJEOjpmcmFtZUlzQ29t
cGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbmF0aXZlRGVj
b2RlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ09NUHRyPElXSUNCaXRtYXBGcmFt
ZURlY29kZT4gZnJhbWU7Ci0gICAgSFJFU1VMVCBociA9IG1fbmF0aXZlRGVjb2Rlci0+R2V0RnJh
bWUoaW5kZXgsICZmcmFtZSk7Ci0gICAgcmV0dXJuIFNVQ0NFRURFRChocik7Ci19Ci1JbWFnZURl
Y29kZXI6OkZyYW1lTWV0YWRhdGEgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmZyYW1lTWV0YWRhdGFB
dEluZGV4KHNpemVfdCkgY29uc3QgZmluYWw7Ci17Ci0gICAgaWYgKCFtX25hdGl2ZURlY29kZXIp
Ci0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2Rl
PiBmcmFtZTsKLSAgICBIUkVTVUxUIGhyID0gbV9uYXRpdmVEZWNvZGVyLT5HZXRGcmFtZShpbmRl
eCwgJmZyYW1lKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiB7IH07
Ci0KLSAgICBDT01QdHI8SVdJQ01ldGFkYXRhUXVlcnlSZWFkZXI+IG1ldGFkYXRhOwotICAgIGhy
ID0gZnJhbWUtPkdldE1ldGFkYXRhUXVlcnlSZWFkZXIoJm1ldGFkYXRhKTsKLSAgICBpZiAoIVNV
Q0NFRURFRChocikpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBQUk9QVkFSSUFOVCB2YWx1
ZTsKLSAgICBQcm9wVmFyaWFudEluaXQoJnZhbHVlKTsKLSAgICBociA9IG1ldGFkYXRhLT5HZXRN
ZXRhZGF0YUJ5TmFtZShMIlN5c3RlbS5QaG90by5PcmllbnRhdGlvbiIsICZ2YWx1ZSk7Ci0gICAg
aWYgKFNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiB7IEltYWdlT3JpZW50YXRpb24oc3Rh
dGljX2Nhc3Q8SW1hZ2VPcmllbnRhdGlvbjo6T3JpZW50YXRpb24+KHZhbHVlLnVpVmFsKSksIHN0
ZDo6bnVsbG9wdCB9OwotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotU2Vjb25kcyBJbWFnZURlY29k
ZXJEaXJlY3QyRDo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAotewot
ICAgIGlmICghbV9uYXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4gU2Vjb25kcygwKTsKLQot
ICAgIENPTVB0cjxJV0lDQml0bWFwRnJhbWVEZWNvZGU+IGZyYW1lOwotICAgIEhSRVNVTFQgaHIg
PSBtX25hdGl2ZURlY29kZXItPkdldEZyYW1lKGluZGV4LCAmZnJhbWUpOwotICAgIGlmICghU1VD
Q0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIFNlY29uZHMoMCk7Ci0KLSAgICAvLyBGSVhNRTog
RmlndXJlIG91dCBjb3JyZWN0IGltYWdlIGZvcm1hdC1zcGVjaWZpYyBxdWVyeSBmb3IgZnJhbWUg
ZHVyYXRpb24gY2hlY2suCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU2Vjb25k
cygwKTsKLX0KLQotYm9vbCBJbWFnZURlY29kZXJEaXJlY3QyRDo6ZnJhbWVBbGxvd1N1YnNhbXBs
aW5nQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBp
bmRleCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgQ09NUHRyPElXSUNCaXRtYXBGcmFtZURlY29kZT4gZnJhbWU7Ci0gICAg
SFJFU1VMVCBociA9IG1fbmF0aXZlRGVjb2Rlci0+R2V0RnJhbWUoaW5kZXgsICZmcmFtZSk7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDT01Q
dHI8SVdJQ01ldGFkYXRhUXVlcnlSZWFkZXI+IG1ldGFkYXRhOwotICAgIGhyID0gZnJhbWUtPkdl
dE1ldGFkYXRhUXVlcnlSZWFkZXIoJm1ldGFkYXRhKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdVSUQgY29udGFpbmVyRm9ybWF0OwotICAg
IGhyID0gbWV0YWRhdGEtPkdldENvbnRhaW5lckZvcm1hdCgmY29udGFpbmVyRm9ybWF0KTsKLSAg
ICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICg6
OklzRXF1YWxHVUlEKEdVSURfQ29udGFpbmVyRm9ybWF0SnBlZywgY29udGFpbmVyRm9ybWF0KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXVuc2lnbmVk
IEltYWdlRGVjb2RlckRpcmVjdDJEOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgsIFN1
YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbmF0
aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZnJhbWVTaXplQXRJ
bmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCkuYXJlYSgpICogNDsKLX0KLQotdm9pZCBJbWFn
ZURlY29kZXJEaXJlY3QyRDo6c2V0VGFyZ2V0Q29udGV4dChJRDJEMVJlbmRlclRhcmdldCogcmVu
ZGVyVGFyZ2V0KQotewotICAgIG1fcmVuZGVyVGFyZ2V0ID0gcmVuZGVyVGFyZ2V0OwotfQotCi1Q
bGF0Zm9ybUltYWdlUHRyIEltYWdlRGVjb2RlckRpcmVjdDJEOjpjcmVhdGVGcmFtZUltYWdlQXRJ
bmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgY29u
c3QgRGVjb2RpbmdPcHRpb25zJikKLXsKLSAgICBpZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIW1fcmVuZGVyVGFyZ2V0KQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJV0lDQml0bWFwRnJhbWVEZWNvZGU+IGZyYW1l
OwotICAgIEhSRVNVTFQgaHIgPSBtX25hdGl2ZURlY29kZXItPkdldEZyYW1lKDAsICZmcmFtZSk7
Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IENPTVB0cjxJV0lDRm9ybWF0Q29udmVydGVyPiBjb252ZXJ0ZXI7Ci0gICAgaHIgPSBzeXN0ZW1J
bWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVGb3JtYXRDb252ZXJ0ZXIoJmNvbnZlcnRlcik7Ci0gICAg
aWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGhyID0g
Y29udmVydGVyLT5Jbml0aWFsaXplKGZyYW1lLmdldCgpLCBHVUlEX1dJQ1BpeGVsRm9ybWF0MzJi
cHBQUkdCQSwgV0lDQml0bWFwRGl0aGVyVHlwZU5vbmUsIG51bGxwdHIsIDAuZiwgV0lDQml0bWFw
UGFsZXR0ZVR5cGVDdXN0b20pOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcD4gd2ljQml0bWFwOwotICAgIGhy
ID0gc3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlQml0bWFwRnJvbVNvdXJjZShjb252ZXJ0
ZXIuZ2V0KCksIFdJQ0JpdG1hcENhY2hlT25EZW1hbmQsICZ3aWNCaXRtYXApOwotICAgIGlmICgh
U1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQy
RDFCaXRtYXA+IGJpdG1hcDsKLSAgICBociA9IG1fcmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXBG
cm9tV2ljQml0bWFwKHdpY0JpdG1hcC5nZXQoKSwgJmJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBiaXRtYXA7Ci19
Ci0KLXZvaWQgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnNldERhdGEoRnJhZ21lbnRlZFNoYXJlZEJ1
ZmZlciYgZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAgaWYgKCFhbGxEYXRhUmVj
ZWl2ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV0lDU3RyZWFtPiBzdHJlYW07
Ci0gICAgSFJFU1VMVCBociA9IHN5c3RlbUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZVN0cmVhbSgm
c3RyZWFtKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGNoYXIqIGRhdGFQdHIgPSBjb25zdF9jYXN0PGNoYXIqPihkYXRhLmRhdGEoKSk7Ci0gICAgaHIg
PSBzdHJlYW0tPkluaXRpYWxpemVGcm9tTWVtb3J5KHJlaW50ZXJwcmV0X2Nhc3Q8QllURSo+KGRh
dGFQdHIpLCBkYXRhLnNpemUoKSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX25hdGl2ZURlY29kZXIgPSBudWxscHRyOwotCi0gICAgaHIgPSBzeXN0
ZW1JbWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVEZWNvZGVyRnJvbVN0cmVhbShzdHJlYW0uZ2V0KCks
IG51bGxwdHIsIFdJQ0RlY29kZU1ldGFkYXRhQ2FjaGVPbkRlbWFuZCwgJm1fbmF0aXZlRGVjb2Rl
cik7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKSB7Ci0gICAgICAgIG1fbmF0aXZlRGVjb2RlciA9
IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJbWFnZSB3YXMgdmFs
aWQuCi19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAkocmV2aXNp
b24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
RGVjb2RlckRpcmVjdDJELmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw5MiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIklt
YWdlRGVjb2Rlci5oIgotCi1pbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2Ug
SVdJQ0JpdG1hcERlY29kZXI7Ci1pbnRlcmZhY2UgSVdJQ0ltYWdpbmdGYWN0b3J5MjsKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbWFnZURlY29kZXJEaXJlY3QyRCBmaW5hbCA6IHB1
YmxpYyBJbWFnZURlY29kZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGlj
OgotICAgIEltYWdlRGVjb2RlckRpcmVjdDJEKCk7Ci0KLSAgICBzdGF0aWMgUmVmPEltYWdlRGVj
b2RlckRpcmVjdDJEPiBjcmVhdGUoRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciYsIEFscGhhT3B0aW9u
LCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEltYWdlRGVjb2RlckRpcmVjdDJEKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBi
b29sIHN1cHBvcnRzTWVkaWFUeXBlKE1lZGlhVHlwZSB0eXBlKSB7IHJldHVybiB0eXBlID09IE1l
ZGlhVHlwZTo6SW1hZ2U7IH0KLQotICAgIHNpemVfdCBieXRlc0RlY29kZWRUb0RldGVybWluZVBy
b3BlcnRpZXMoKSBjb25zdCBmaW5hbDsKLQotICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigp
IGNvbnN0IGZpbmFsOwotICAgIEVuY29kZWREYXRhU3RhdHVzIGVuY29kZWREYXRhU3RhdHVzKCkg
Y29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdCBmaW5hbDsKLQot
ICAgIC8vIEFsd2F5cyBvcmlnaW5hbCBzaXplLCB3aXRob3V0IHN1YnNhbXBsaW5nLgotICAgIElu
dFNpemUgc2l6ZSgpIGNvbnN0IGZpbmFsOwotICAgIHNpemVfdCBmcmFtZUNvdW50KCkgY29uc3Qg
ZmluYWw7Ci0KLSAgICBSZXBldGl0aW9uQ291bnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3QgZmlu
YWw7Ci0gICAgc3RkOjpvcHRpb25hbDxJbnRQb2ludD4gaG90U3BvdCgpIGNvbnN0IGZpbmFsOwot
Ci0gICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9
IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZnJhbWVJ
c0NvbXBsZXRlQXRJbmRleChzaXplX3QpIGNvbnN0IGZpbmFsOwotICAgIEltYWdlRGVjb2Rlcjo6
RnJhbWVNZXRhZGF0YSBmcmFtZU1ldGFkYXRhQXRJbmRleChzaXplX3QpIGNvbnN0IGZpbmFsOwot
Ci0gICAgU2Vjb25kcyBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0IGZpbmFsOwot
ICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90KSBjb25zdCBmaW5hbDsKLSAgICBi
b29sIGZyYW1lQWxsb3dTdWJzYW1wbGluZ0F0SW5kZXgoc2l6ZV90KSBjb25zdCBmaW5hbDsKLSAg
ICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBT
dWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KSBjb25zdCBmaW5hbDsKLQotICAgIFBsYXRmb3JtSW1h
Z2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0g
U3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJiA9IERlY29k
aW5nT3B0aW9ucyhEZWNvZGluZ01vZGU6OlN5bmNocm9ub3VzKSkgZmluYWw7Ci0KLSAgICB2b2lk
IHNldERhdGEoRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciYsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKSBm
aW5hbDsKLSAgICBib29sIGlzQWxsRGF0YVJlY2VpdmVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9pc0FsbERhdGFSZWNlaXZlZDsgfQotICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNp
emVfdCkgZmluYWwgeyB9Ci0KLSAgICB2b2lkIHNldFRhcmdldENvbnRleHQoSUQyRDFSZW5kZXJU
YXJnZXQqKTsKLQotICAgIHN0YXRpYyBJV0lDSW1hZ2luZ0ZhY3RvcnkyKiBzeXN0ZW1JbWFnaW5n
RmFjdG9yeSgpOwotCi1wcml2YXRlOgotICAgIGJvb2wgbV9pc0FsbERhdGFSZWNlaXZlZCB7IGZh
bHNlIH07Ci0gICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6ZTsKLSAgICBDT01QdHI8SVdJQ0JpdG1h
cERlY29kZXI+IG1fbmF0aXZlRGVjb2RlcjsKLSAgICBDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+
IG1fcmVuZGVyVGFyZ2V0OwotfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAJKHJl
dmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZURpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYtMjAxOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0j
aW5jbHVkZSAiQml0bWFwSW5mby5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2lu
Y2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLVJlZlB0cjxCaXRtYXBJbWFnZT4gQml0bWFwSW1hZ2U6OmNyZWF0ZShIQklUTUFQ
IGhCaXRtYXApCi17Ci0gICAgRElCU0VDVElPTiBkaWJTZWN0aW9uOwotICAgIGlmICghR2V0T2Jq
ZWN0KGhCaXRtYXAsIHNpemVvZihESUJTRUNUSU9OKSwgJmRpYlNlY3Rpb24pKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIEFTU0VSVChkaWJTZWN0aW9uLmRzQm0uYm1CaXRzUGl4ZWwg
PT0gMzIpOwotICAgIGlmIChkaWJTZWN0aW9uLmRzQm0uYm1CaXRzUGl4ZWwgIT0gMzIpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQVNTRVJUKGRpYlNlY3Rpb24uZHNCbS5ibUJpdHMp
OwotICAgIGlmICghZGliU2VjdGlvbi5kc0JtLmJtQml0cykKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0K
LWJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE1BUCBibXAsIGNvbnN0IElu
dFNpemUqIHNpemUpCi17Ci0gICAgQVNTRVJUKGJtcCk7Ci0KLSAgICBCSVRNQVAgYm1wSW5mbzsK
LSAgICBHZXRPYmplY3QoYm1wLCBzaXplb2YoQklUTUFQKSwgJmJtcEluZm8pOwotCi0gICAgQVNT
RVJUKGJtcEluZm8uYm1CaXRzUGl4ZWwgPT0gMzIpOwotICAgIGludCBidWZmZXJTaXplID0gYm1w
SW5mby5ibVdpZHRoQnl0ZXMgKiBibXBJbmZvLmJtSGVpZ2h0OwotICAgIAotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJh
d0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxv
YXRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRv
ciBjb21wb3NpdGVPcCkKLXsKLSAgICBzaXplX3QgZnJhbWVzID0gZnJhbWVDb3VudCgpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVzOyArK2kpIHsKLSAgICAgICAgYXV0byBpbWFn
ZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwotICAgICAgICBhdXRvIGltYWdlU2l6ZSA9
IG5hdGl2ZUltYWdlU2l6ZShpbWFnZSk7Ci0gICAgICAgIGlmIChpbWFnZSAmJiBjbGFtcFRvPGlu
dD4oaW1hZ2VTaXplLmhlaWdodCgpKSA9PSBzdGF0aWNfY2FzdDxpbnQ+KHNyY1NpemUuaGVpZ2h0
KCkpICYmIGNsYW1wVG88aW50PihpbWFnZVNpemUud2lkdGgoKSkgPT0gc3RhdGljX2Nhc3Q8aW50
PihzcmNTaXplLndpZHRoKCkpKSB7Ci0gICAgICAgICAgICBzaXplX3QgY3VycmVudEZyYW1lID0g
bV9jdXJyZW50RnJhbWU7Ci0gICAgICAgICAgICBtX2N1cnJlbnRGcmFtZSA9IGk7Ci0gICAgICAg
ICAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBzcmNTaXplLndp
ZHRoKCksIHNyY1NpemUuaGVpZ2h0KCkpLCB7IGNvbXBvc2l0ZU9wIH0pOwotICAgICAgICAgICAg
bV9jdXJyZW50RnJhbWUgPSBjdXJyZW50RnJhbWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBObyBpbWFnZSBvZiB0aGUgY29ycmVjdCBzaXplIHdhcyBm
b3VuZCwgZmFsbGJhY2sgdG8gZHJhd2luZyB0aGUgY3VycmVudCBmcmFtZQotICAgIEZsb2F0U2l6
ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwotICAgIGRyYXcoY3R4dCwgZHN0UmVj
dCwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVp
Z2h0KCkpLCB7IGNvbXBvc2l0ZU9wIH0pOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJl
Y3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAJKG5v
bmV4aXN0ZW50KQpAQCAtMSw4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOYXRpdmVJ
bWFnZS5oIgotCi0jaW5jbHVkZSAiRGlyZWN0MkRPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiR2Vv
bWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUg
PHdpbmNvZGVjLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIElXSUNJbWFnaW5n
RmFjdG9yeSogaW1hZ2luZ0ZhY3RvcnkoKQotewotICAgIHN0YXRpYyBJV0lDSW1hZ2luZ0ZhY3Rv
cnkqIGltYWdpbmdGYWN0b3J5ID0gbnVsbHB0cjsKLSAgICBpZiAoIWltYWdpbmdGYWN0b3J5KSB7
Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBDb0NyZWF0ZUluc3RhbmNlKENMU0lEX1dJQ0ltYWdpbmdG
YWN0b3J5LCBudWxscHRyLCBDTFNDVFhfSU5QUk9DX1NFUlZFUiwgSUlEX1BQVl9BUkdTKCZpbWFn
aW5nRmFjdG9yeSkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gaW1hZ2luZ0ZhY3Rvcnk7Ci19Ci0KLUludFNpemUgTmF0aXZlSW1h
Z2U6OnNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtX3BsYXRmb3JtSW1hZ2UtPkdldFBpeGVs
U2l6ZSgpOwotfQotCi1ib29sIE5hdGl2ZUltYWdlOjpoYXNBbHBoYSgpIGNvbnN0Ci17Ci0gICAg
RDJEMV9QSVhFTF9GT1JNQVQgcGl4ZWxGb3JtYXQgPSBtX3BsYXRmb3JtSW1hZ2UtPkdldFBpeGVs
Rm9ybWF0KCk7Ci0gICAgcmV0dXJuIHBpeGVsRm9ybWF0LmFscGhhTW9kZSAhPSBEMkQxX0FMUEhB
X01PREVfSUdOT1JFOwotfQotCi1Db2xvciBOYXRpdmVJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENv
bG9yKCkgY29uc3QKLXsKLSAgICBpZiAoc2l6ZSgpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAg
IHJldHVybiBDb2xvcigpOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gQ29s
b3IoKTsKLX0KLQotRGVzdGluYXRpb25Db2xvclNwYWNlIE5hdGl2ZUltYWdlOjpjb2xvclNwYWNl
KCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKTsKLX0KLQotdm9pZCBOYXRpdmVJbWFnZTo6Y2xlYXJTdWJpbWFn
ZXMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCShy
ZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
UGF0aERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDY2NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJQYXRoLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgaW5saW5lIElEMkQx
UmVuZGVyVGFyZ2V0KiBzY3JhdGNoUmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBzdGF0aWMgQ09NUHRy
PElEMkQxUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQgPSBhZG9wdENPTShHcmFwaGljc0NvbnRl
eHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKSk7Ci0gICAgcmV0dXJuIHJlbmRlclRhcmdldC5nZXQo
KTsKLX0KLQotUGF0aCBQYXRoOjpwb2x5Z29uUGF0aEZyb21Qb2ludHMoY29uc3QgVmVjdG9yPEZs
b2F0UG9pbnQ+JiBwb2ludHMpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIGlmIChwb2ludHMuc2l6
ZSgpIDwgMikKLSAgICAgICAgcmV0dXJuIHBhdGg7Ci0KLSAgICBWZWN0b3I8RDJEMV9QT0lOVF8y
RiwgMzI+IGQyZFBvaW50czsKLSAgICBkMmRQb2ludHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShw
b2ludHMuc2l6ZSgpIC0gMSk7Ci0gICAgZm9yIChhdXRvIHBvaW50IDogcG9pbnRzKQotICAgICAg
ICBkMmRQb2ludHMudW5jaGVja2VkQXBwZW5kKHBvaW50KTsKLQotICAgIHBhdGgubW92ZVRvKHBv
aW50cy5maXJzdCgpKTsKLQotICAgIEFTU0VSVChwYXRoLm1fYWN0aXZlUGF0aCk7Ci0KLSAgICBw
YXRoLm1fYWN0aXZlUGF0aC0+QWRkTGluZXMoZDJkUG9pbnRzLmRhdGEoKSwgZDJkUG9pbnRzLnNp
emUoKSk7Ci0gICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKLQotICAgIHJldHVybiBwYXRoOwotfQot
Ci1QYXRoOjpQYXRoKCkgPSBkZWZhdWx0OwotCi1QYXRoOjp+UGF0aCgpCi17Ci0gICAgY2xlYXJH
ZW9tZXRyaWVzKCk7Ci19Ci0KLVBsYXRmb3JtUGF0aFB0ciBQYXRoOjplbnN1cmVQbGF0Zm9ybVBh
dGgoKQotewotICAgIGlmICghbV9wYXRoKSB7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBHcmFwaGlj
c0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlR2VvbWV0cnlHcm91cChEMkQxX0ZJTExf
TU9ERV9XSU5ESU5HLCBudWxscHRyLCAwLCAmbV9wYXRoKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChocikpOwotICAgICAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICBBU1NFUlQocmVmQ291bnQobV9wYXRoLmdldCgpKSA9PSAxKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gbV9wYXRoLmdldCgpOwotfQotCi12b2lkIFBhdGg6OmNsZWFyR2Vv
bWV0cmllcygpCi17Ci0gICAgLy8gTWFudWFsbHkgY2xlYW4gdGhlc2UgdXAgc28gdGhhdCB3ZSBj
YW4gdXNlIHRoaXMgdmVjdG9yIHdpdGggRGlyZWN0MkQgQVBJcy4KLSAgICBmb3IgKGF1dG8qIGdl
b21ldHJ5IDogbV9nZW9tZXRyaWVzKQotICAgICAgICBnZW9tZXRyeS0+UmVsZWFzZSgpOwotICAg
IG1fZ2VvbWV0cmllcy5jbGVhcigpOwotfQotCi12b2lkIFBhdGg6OmFwcGVuZEdlb21ldHJ5KElE
MkQxR2VvbWV0cnkqIGdlb21ldHJ5KQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdW5zaWdu
ZWQgYmVmb3JlID0gcmVmQ291bnQoZ2VvbWV0cnkpOwotI2VuZGlmCi0KLSAgICB1bnNpZ25lZCBn
ZW9tZXRyeUNvdW50ID0gbV9wYXRoID8gbV9wYXRoLT5HZXRTb3VyY2VHZW9tZXRyeUNvdW50KCkg
OiAwOwotCi0gICAgUkVMRUFTRV9BU1NFUlQobV9nZW9tZXRyaWVzLnNpemUoKSA9PSBnZW9tZXRy
eUNvdW50KTsKLQotICAgIGdlb21ldHJ5LT5BZGRSZWYoKTsKLSAgICBtX2dlb21ldHJpZXMuYXBw
ZW5kKGdlb21ldHJ5KTsKLQotICAgIGF1dG8gZmlsbE1vZGUgPSBtX3BhdGggPyBtX3BhdGgtPkdl
dEZpbGxNb2RlKCkgOiBEMkQxX0ZJTExfTU9ERV9XSU5ESU5HOwotCi0gICAgbV9wYXRoID0gbnVs
bHB0cjsKLQotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3Rvcnko
KS0+Q3JlYXRlR2VvbWV0cnlHcm91cChmaWxsTW9kZSwgbV9nZW9tZXRyaWVzLmRhdGEoKSwgbV9n
ZW9tZXRyaWVzLnNpemUoKSwgJm1fcGF0aCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7Ci0KLSAgICBBU1NFUlQocmVmQ291bnQoZ2VvbWV0cnkpID09IGJlZm9yZSArIDEpOwot
fQotCi12b2lkIFBhdGg6OmNyZWF0ZUdlb21ldHJ5V2l0aEZpbGxNb2RlKFdpbmRSdWxlIHdlYmtp
dEZpbGxNb2RlLCBDT01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiYgcGF0aCkgY29uc3QKLXsKLSAg
ICBSRUxFQVNFX0FTU0VSVChtX3BhdGgpOwotCi0gICAgYXV0byBmaWxsTW9kZSA9ICh3ZWJraXRG
aWxsTW9kZSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkgPyBEMkQxX0ZJTExfTU9ERV9BTFRFUk5BVEUg
OiBEMkQxX0ZJTExfTU9ERV9XSU5ESU5HOwotCi0gICAgaWYgKGZpbGxNb2RlID09IG1fcGF0aC0+
R2V0RmlsbE1vZGUoKSkgewotICAgICAgICBwYXRoID0gbV9wYXRoOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgdW5zaWduZWQgZ2VvbWV0cnlDb3VudCA9IG1fcGF0aC0+R2V0U291cmNl
R2VvbWV0cnlDb3VudCgpOwotCi0gICAgQVNTRVJUKG1fZ2VvbWV0cmllcy5zaXplKCkgPT0gZ2Vv
bWV0cnlDb3VudCk7Ci0KLSAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1G
YWN0b3J5KCktPkNyZWF0ZUdlb21ldHJ5R3JvdXAoZmlsbE1vZGUsIGNvbnN0X2Nhc3Q8SUQyRDFH
ZW9tZXRyeSoqPihtX2dlb21ldHJpZXMuZGF0YSgpKSwgbV9nZW9tZXRyaWVzLnNpemUoKSwgJnBh
dGgpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIEFTU0VSVChyZWZD
b3VudChwYXRoLmdldCgpKSA9PSAxKTsKLX0KLQotUGF0aDo6UGF0aChjb25zdCBQYXRoJiBvdGhl
cikKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHVuc2lnbmVkIHBhdGhDb3VudCA9IHJlZkNv
dW50KG90aGVyLm1fcGF0aC5nZXQoKSk7Ci0gICAgdW5zaWduZWQgYWN0aXZlUGF0aENvdW50ID0g
cmVmQ291bnQob3RoZXIubV9hY3RpdmVQYXRoLmdldCgpKTsKLSNlbmRpZgotICAgIG1fcGF0aCA9
IG90aGVyLm1fcGF0aDsKLSAgICBtX2FjdGl2ZVBhdGggPSBvdGhlci5tX2FjdGl2ZVBhdGg7Ci0g
ICAgbV9nZW9tZXRyaWVzID0gb3RoZXIubV9nZW9tZXRyaWVzOwotICAgIGZvciAoYXV0byogZ2Vv
bWV0cnkgOiBtX2dlb21ldHJpZXMpCi0gICAgICAgIGdlb21ldHJ5LT5BZGRSZWYoKTsKLQotICAg
IEFTU0VSVCghbV9wYXRoIHx8IHJlZkNvdW50KG1fcGF0aC5nZXQoKSkgPT0gcGF0aENvdW50ICsg
MSk7Ci0gICAgQVNTRVJUKCFtX2FjdGl2ZVBhdGggfHwgcmVmQ291bnQobV9hY3RpdmVQYXRoLmdl
dCgpKSA9PSBhY3RpdmVQYXRoQ291bnQgKyAxKTsKLX0KLSAgICAKLVBhdGg6OlBhdGgoUGF0aCYm
IG90aGVyKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdW5zaWduZWQgcGF0aENvdW50ID0g
cmVmQ291bnQob3RoZXIubV9wYXRoLmdldCgpKTsKLSAgICB1bnNpZ25lZCBhY3RpdmVQYXRoQ291
bnQgPSByZWZDb3VudChvdGhlci5tX2FjdGl2ZVBhdGguZ2V0KCkpOwotI2VuZGlmCi0gICAgbV9w
YXRoID0gV1RGTW92ZShvdGhlci5tX3BhdGgpOwotICAgIG1fYWN0aXZlUGF0aCA9IFdURk1vdmUo
b3RoZXIubV9hY3RpdmVQYXRoKTsKLSAgICBtX2dlb21ldHJpZXMgPSBXVEZNb3ZlKG90aGVyLm1f
Z2VvbWV0cmllcyk7Ci0KLSAgICBBU1NFUlQocmVmQ291bnQobV9wYXRoLmdldCgpKSA9PSBwYXRo
Q291bnQpOwotICAgIEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0KCkpID09IGFjdGl2
ZVBhdGhDb3VudCk7Ci19Ci0KLVBhdGgmIFBhdGg6Om9wZXJhdG9yPShjb25zdCBQYXRoJiBvdGhl
cikKLXsKLSAgICBpZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgIHJldHVybiAqdGhpczsKLSNp
ZiBBU1NFUlRfRU5BQkxFRAotICAgIHVuc2lnbmVkIHBhdGhDb3VudCA9IHJlZkNvdW50KG90aGVy
Lm1fcGF0aC5nZXQoKSk7Ci0gICAgdW5zaWduZWQgYWN0aXZlUGF0aENvdW50ID0gcmVmQ291bnQo
b3RoZXIubV9hY3RpdmVQYXRoLmdldCgpKTsKLSNlbmRpZgotICAgIG1fcGF0aCA9IG90aGVyLm1f
cGF0aDsKLSAgICBtX2FjdGl2ZVBhdGggPSBvdGhlci5tX2FjdGl2ZVBhdGg7Ci0gICAgbV9nZW9t
ZXRyaWVzID0gb3RoZXIubV9nZW9tZXRyaWVzOwotICAgIGZvciAoYXV0byogZ2VvbWV0cnkgOiBt
X2dlb21ldHJpZXMpCi0gICAgICAgIGdlb21ldHJ5LT5BZGRSZWYoKTsKLQotICAgIEFTU0VSVCgh
bV9wYXRoIHx8IHJlZkNvdW50KG1fcGF0aC5nZXQoKSkgPT0gcGF0aENvdW50ICsgMSk7Ci0gICAg
QVNTRVJUKCFtX2FjdGl2ZVBhdGggfHwgcmVmQ291bnQobV9hY3RpdmVQYXRoLmdldCgpKSA9PSBh
Y3RpdmVQYXRoQ291bnQgKyAxKTsKLQotICAgIHJldHVybiAqdGhpczsKLX0KLQotUGF0aCYgUGF0
aDo6b3BlcmF0b3I9KFBhdGgmJiBvdGhlcikKLXsKLSAgICBpZiAodGhpcyA9PSAmb3RoZXIpCi0g
ICAgICAgIHJldHVybiAqdGhpczsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdW5zaWduZWQg
cGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9wYXRoLmdldCgpKTsKLSAgICB1bnNpZ25lZCBh
Y3RpdmVQYXRoQ291bnQgPSByZWZDb3VudChvdGhlci5tX2FjdGl2ZVBhdGguZ2V0KCkpOwotI2Vu
ZGlmCi0gICAgbV9wYXRoID0gV1RGTW92ZShvdGhlci5tX3BhdGgpOwotICAgIG1fYWN0aXZlUGF0
aCA9IFdURk1vdmUob3RoZXIubV9hY3RpdmVQYXRoKTsKLSAgICBtX2dlb21ldHJpZXMgPSBXVEZN
b3ZlKG90aGVyLm1fZ2VvbWV0cmllcyk7Ci0KLSAgICBBU1NFUlQocmVmQ291bnQobV9wYXRoLmdl
dCgpKSA9PSBwYXRoQ291bnQpOwotICAgIEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0
KCkpID09IGFjdGl2ZVBhdGhDb3VudCk7Ci0KLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWJvb2wg
UGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNv
bnN0Ci17Ci0gICAgaWYgKGlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoIWZhc3RCb3VuZGluZ1JlY3QoKS5jb250YWlucyhwb2ludCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEJPT0wgY29udGFpbnM7Ci0gICAgaWYgKCFTVUNDRUVERUQobV9wYXRoLT5G
aWxsQ29udGFpbnNQb2ludChwb2ludCwgbnVsbHB0ciwgJmNvbnRhaW5zKSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiBjb250YWluczsKLX0KLQotYm9vbCBQYXRoOjpzdHJv
a2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRnVuY3Rpb248dm9pZChH
cmFwaGljc0NvbnRleHQmKT4mIHN0cm9rZVN0eWxlQXBwbGllcikgY29uc3QKLXsKLSAgICBBU1NF
UlQoc3Ryb2tlU3R5bGVBcHBsaWVyKTsKLQotICAgIGlmIChpc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHRE
MkQoc2NyYXRjaFJlbmRlclRhcmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHREaXJlY3QyRCBz
Y3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFw
UmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7Ci0gICAgc3Ryb2tlU3R5bGVBcHBsaWVy
KHNjcmF0Y2hDb250ZXh0KTsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdW5zaWduZWQgYmVm
b3JlID0gcmVmQ291bnQobV9wYXRoLmdldCgpKTsKLSNlbmRpZgotCi0gICAgQk9PTCBjb250YWlu
c1BvaW50ID0gZmFsc2U7Ci0gICAgSFJFU1VMVCBociA9IG1fcGF0aC0+U3Ryb2tlQ29udGFpbnNQ
b2ludChwb2ludCwgc2NyYXRjaENvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCksIHNjcmF0Y2hDb250
ZXh0LnBsYXRmb3JtU3Ryb2tlU3R5bGUoKSwgbnVsbHB0ciwgMS4wZiwgJmNvbnRhaW5zUG9pbnQp
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
QVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkgPT0gYmVmb3JlKTsKLSAgICByZXR1cm4gY29u
dGFpbnNQb2ludDsKLX0KLQotdm9pZCBQYXRoOjpjbG9zZUFueU9wZW5HZW9tZXRyaWVzKHVuc2ln
bmVkIGZpZ3VyZUVuZFN0eWxlKSBjb25zdAotewotICAgIGlmIChtX2ZpZ3VyZUlzT3BlbmVkKSB7
Ci0gICAgICAgIEFTU0VSVChtX2FjdGl2ZVBhdGgpOwotCi0gICAgICAgIGF1dG8gZW5kU3R5bGUg
PSBzdGF0aWNfY2FzdDxEMkQxX0ZJR1VSRV9FTkQ+KGZpZ3VyZUVuZFN0eWxlKTsKLSAgICAgICAg
bV9hY3RpdmVQYXRoLT5FbmRGaWd1cmUoZW5kU3R5bGUpOwotICAgICAgICBtX2ZpZ3VyZUlzT3Bl
bmVkID0gZmFsc2U7Ci0KLSAgICAgICAgSFJFU1VMVCBociA9IG1fYWN0aXZlUGF0aC0+Q2xvc2Uo
KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIH0KLQotICAgIG1fYWN0aXZl
UGF0aCA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSkKLXsKLSAgICB0cmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIDEsIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwotfQotCi12b2lkIFBhdGg6OnRyYW5zZm9ybShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBpZiAodHJhbnNmb3JtLmlz
SWRlbnRpdHkoKSB8fCBpc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2Fj
dGl2ZVBhdGgpCi0gICAgICAgIGNsb3NlQW55T3Blbkdlb21ldHJpZXMoRDJEMV9GSUdVUkVfRU5E
X09QRU4pOwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB1bnNpZ25lZCBiZWZvcmUgPSByZWZD
b3VudChtX3BhdGguZ2V0KCkpOwotI2VuZGlmCi0KLSAgICBDT01QdHI8SUQyRDFUcmFuc2Zvcm1l
ZEdlb21ldHJ5PiB0cmFuc2Zvcm1lZFBhdGg7Ci0gICAgaWYgKCFTVUNDRUVERUQoR3JhcGhpY3ND
b250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVRyYW5zZm9ybWVkR2VvbWV0cnkobV9wYXRo
LmdldCgpLCB0cmFuc2Zvcm0sICZ0cmFuc2Zvcm1lZFBhdGgpKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkgPT0gYmVmb3JlKTsKLSAgICBBU1NF
UlQocmVmQ291bnQodHJhbnNmb3JtZWRQYXRoLmdldCgpKSA9PSAxKTsKLQotICAgIGF1dG8gZmls
bE1vZGUgPSBtX3BhdGgtPkdldEZpbGxNb2RlKCk7Ci0KLSAgICBtX3BhdGggPSBudWxscHRyOwot
Ci0gICAgY2xlYXJHZW9tZXRyaWVzKCk7Ci0KLSAgICB0cmFuc2Zvcm1lZFBhdGgtPkFkZFJlZigp
OwotICAgIG1fZ2VvbWV0cmllcy5hcHBlbmQodHJhbnNmb3JtZWRQYXRoLmdldCgpKTsKLQotICAg
IEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlR2Vv
bWV0cnlHcm91cChmaWxsTW9kZSwgbV9nZW9tZXRyaWVzLmRhdGEoKSwgbV9nZW9tZXRyaWVzLnNp
emUoKSwgJm1fcGF0aCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAg
QVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkgPT0gMSk7Ci19Ci0KLUZsb2F0UmVjdCBQYXRo
Ojpib3VuZGluZ1JlY3RTbG93Q2FzZSgpIGNvbnN0Ci17Ci0gICAgRDJEMV9SRUNUX0YgYm91bmRz
ID0geyB9OwotICAgIGlmICghU1VDQ0VFREVEKG1fcGF0aC0+R2V0Qm91bmRzKG51bGxwdHIsICZi
b3VuZHMpKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgcmV0dXJuIGJvdW5k
czsKLX0KLQotRmxvYXRSZWN0IFBhdGg6OmZhc3RCb3VuZGluZ1JlY3RTbG93Q2FzZSgpIGNvbnN0
Ci17Ci0gICAgRDJEMV9SRUNUX0YgYm91bmRzID0geyB9OwotICAgIGlmICghU1VDQ0VFREVEKG1f
cGF0aC0+R2V0Qm91bmRzKG51bGxwdHIsICZib3VuZHMpKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0
UmVjdCgpOwotCi0gICAgcmV0dXJuIGJvdW5kczsKLX0KLQotRmxvYXRSZWN0IFBhdGg6OmZhc3RC
b3VuZGluZ1JlY3RGb3JTdHJva2UoY29uc3QgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRm
b3JtQ29udGV4dCkgY29uc3QKLXsKLSAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKLQotICAgIGZsb2F0IHRvbGVyYW5jZSA9IDEwOwotCi0gICAgYXV0byogc3Ry
b2tlU3R5bGUgPSBjb25zdF9jYXN0PFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJj4ocGxhdGZvcm1D
b250ZXh0KS5zdHJva2VTdHlsZSgpOwotCi0gICAgRDJEMV9SRUNUX0YgYm91bmRzID0geyB9Owot
ICAgIGlmICghU1VDQ0VFREVEKG1fcGF0aC0+R2V0V2lkZW5lZEJvdW5kcyhwbGF0Zm9ybUNvbnRl
eHQuc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0eWxlLCBudWxscHRyLCB0b2xlcmFuY2UsICZi
b3VuZHMpKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgcmV0dXJuIGJvdW5k
czsKLX0KLQotRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChjb25zdCBGdW5jdGlv
bjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYgc3Ryb2tlU3R5bGVBcHBsaWVyKSBjb25zdAotewot
ICAgIGlmIChpc051bGwoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHREMkQoc2NyYXRjaFJlbmRlclRhcmdl
dCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dCgmc2NyYXRj
aENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6
OkdQVU1lbW9yeSk7Ci0KLSAgICBpZiAoc3Ryb2tlU3R5bGVBcHBsaWVyKQotICAgICAgICBzdHJv
a2VTdHlsZUFwcGxpZXIoc2NyYXRjaENvbnRleHQpOwotCi0gICAgcmV0dXJuIGZhc3RCb3VuZGlu
Z1JlY3RGb3JTdHJva2Uoc2NyYXRjaENvbnRleHREMkQpOwotfQotCi12b2lkIFBhdGg6Om9wZW5G
aWd1cmVBdEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAobV9maWd1cmVJc09w
ZW5lZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2FjdGl2ZVBhdGgpIHsKLSAgICAg
ICAgQ09NUHRyPElEMkQxUGF0aEdlb21ldHJ5PiBhY3RpdmVQYXRoR2VvbWV0cnk7Ci0gICAgICAg
IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVQYXRoR2VvbWV0cnkoJmFj
dGl2ZVBhdGhHZW9tZXRyeSk7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBhY3RpdmVQYXRoR2VvbWV0
cnktPk9wZW4oJm1fYWN0aXZlUGF0aCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURF
RChocikpOwotICAgICAgICBhcHBlbmRHZW9tZXRyeShhY3RpdmVQYXRoR2VvbWV0cnkubGVha1Jl
ZigpKTsKLSAgICAgICAgQVNTRVJUKHJlZkNvdW50KG1fYWN0aXZlUGF0aC5nZXQoKSkgPT0gMSk7
Ci0gICAgfQotCi0gICAgbV9hY3RpdmVQYXRoLT5TZXRGaWxsTW9kZShEMkQxX0ZJTExfTU9ERV9X
SU5ESU5HKTsKLSAgICBtX2FjdGl2ZVBhdGgtPkJlZ2luRmlndXJlKGN1cnJlbnRQb2ludCgpLCBE
MkQxX0ZJR1VSRV9CRUdJTl9GSUxMRUQpOwotICAgIG1fZmlndXJlSXNPcGVuZWQgPSB0cnVlOwot
fQotCi12b2lkIFBhdGg6Om1vdmVUb1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQot
ewotICAgIGlmIChtX2FjdGl2ZVBhdGgpCi0gICAgICAgIGNsb3NlQW55T3Blbkdlb21ldHJpZXMo
RDJEMV9GSUdVUkVfRU5EX09QRU4pOwotCi0gICAgQ09NUHRyPElEMkQxUGF0aEdlb21ldHJ5PiBh
Y3RpdmVQYXRoR2VvbWV0cnk7Ci0gICAgR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCkt
PkNyZWF0ZVBhdGhHZW9tZXRyeSgmYWN0aXZlUGF0aEdlb21ldHJ5KTsKLQotICAgIGlmICghU1VD
Q0VFREVEKGFjdGl2ZVBhdGhHZW9tZXRyeS0+T3BlbigmbV9hY3RpdmVQYXRoKSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGFwcGVuZEdlb21ldHJ5KGFjdGl2ZVBhdGhHZW9tZXRyeS5sZWFrUmVm
KCkpOwotCi0gICAgQVNTRVJUKHJlZkNvdW50KG1fYWN0aXZlUGF0aC5nZXQoKSkgPT0gMSk7Ci0K
LSAgICBtX2FjdGl2ZVBhdGgtPlNldEZpbGxNb2RlKEQyRDFfRklMTF9NT0RFX1dJTkRJTkcpOwot
ICAgIG1fYWN0aXZlUGF0aC0+QmVnaW5GaWd1cmUocG9pbnQsIEQyRDFfRklHVVJFX0JFR0lOX0ZJ
TExFRCk7Ci0gICAgbV9maWd1cmVJc09wZW5lZCA9IHRydWU7Ci19Ci0KLXZvaWQgUGF0aDo6YWRk
TGluZVRvU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgb3BlbkZpZ3Vy
ZUF0Q3VycmVudFBvaW50SWZOZWNlc3NhcnkoKTsKLSAgICBtX2FjdGl2ZVBhdGgtPkFkZExpbmUo
cG9pbnQpOwotfQotCi12b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvU2xvd0Nhc2UoY29uc3QgRmxv
YXRQb2ludCYgY3AsIGNvbnN0IEZsb2F0UG9pbnQmIHApCi17Ci0gICAgb3BlbkZpZ3VyZUF0Q3Vy
cmVudFBvaW50SWZOZWNlc3NhcnkoKTsKLSAgICBtX2FjdGl2ZVBhdGgtPkFkZFF1YWRyYXRpY0Jl
emllcihEMkQxOjpRdWFkcmF0aWNCZXppZXJTZWdtZW50KGNwLCBwKSk7Ci19Ci0KLXZvaWQgUGF0
aDo6YWRkQmV6aWVyQ3VydmVUb1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmIGNwMSwgY29uc3Qg
RmxvYXRQb2ludCYgY3AyLCBjb25zdCBGbG9hdFBvaW50JiBwKQotewotICAgIG9wZW5GaWd1cmVB
dEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5KCk7Ci0gICAgbV9hY3RpdmVQYXRoLT5BZGRCZXppZXIo
RDJEMTo6QmV6aWVyU2VnbWVudChjcDEsIGNwMiwgcCkpOwotfQotCi12b2lkIFBhdGg6OmFkZEFy
Y1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgcmFk
aXVzKQotewotICAgIEZsb2F0UG9pbnQgcDAgPSBjdXJyZW50UG9pbnQoKTsKLQotICAgIGlmIChw
MSA9PSBwMCB8fCBwMSA9PSBwMiB8fCBXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwocmFkaXVzLCAw
LjBmKSkKLSAgICAgICAgcmV0dXJuIGFkZExpbmVUbyhwMSk7Ci0KLSAgICBmbG9hdCBkaXJlY3Rp
b24gPSAocDIueCgpIC0gcDEueCgpKSAqIChwMC55KCkgLSBwMS55KCkpICsgKHAyLnkoKSAtIHAx
LnkoKSkgKiAocDEueCgpIC0gcDAueCgpKTsKLSAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVx
dWFsKGRpcmVjdGlvbiwgMC4wZikpCi0gICAgICAgIHJldHVybiBhZGRMaW5lVG8ocDEpOwotCi0g
ICAgYXV0byBhMiA9IHRvRmxvYXRQb2ludChwMCAtIHAxKS5sZW5ndGhTcXVhcmVkKCk7Ci0gICAg
YXV0byBiMiA9IHRvRmxvYXRQb2ludChwMSAtIHAyKS5sZW5ndGhTcXVhcmVkKCk7Ci0gICAgYXV0
byBjMiA9IHRvRmxvYXRQb2ludChwMCAtIHAyKS5sZW5ndGhTcXVhcmVkKCk7Ci0KLSAgICBkb3Vi
bGUgY29zeCA9IChhMiArIGIyIC0gYzIpIC8gKDIuMCAqIHN0ZDo6c3FydChhMiAqIGIyKSk7Ci0g
ICAgZG91YmxlIHNpbnggPSBzdGQ6OnNxcnQoMS4wIC0gY29zeCAqIGNvc3gpOwotICAgIGRvdWJs
ZSBkID0gcmFkaXVzIC8gKCgxIC0gY29zeCkgLyBzaW54KTsKLQotICAgIGF1dG8gYW4gPSB0b0Zs
b2F0UG9pbnQocDEgLSBwMCkuc2NhbGVkKDEuMCAvIHN0ZDo6c3FydChhMikpOwotICAgIGF1dG8g
Ym4gPSB0b0Zsb2F0UG9pbnQocDEgLSBwMikuc2NhbGVkKDEuMCAvIHN0ZDo6c3FydChiMikpOwot
Ci0gICAgYXV0byBzdGFydFBvaW50ID0gdG9GbG9hdFBvaW50KHAxIC0gYW4uc2NhbGVkKGQpKTsK
LSAgICBhdXRvIHA0ID0gdG9GbG9hdFBvaW50KHAxIC0gYm4uc2NhbGVkKGQpKTsKLQotICAgIGJv
b2wgYW50aWNsb2Nrd2lzZSA9IChkaXJlY3Rpb24gPCAwKTsKLSAgICBhbi5zY2FsZShyYWRpdXMg
KiAoYW50aWNsb2Nrd2lzZSA/IDEgOiAtMSkpOwotCi0gICAgRmxvYXRQb2ludCBjZW50ZXIoc3Rh
cnRQb2ludC54KCkgKyBhbi55KCksIHN0YXJ0UG9pbnQueSgpIC0gYW4ueCgpKTsKLQotICAgIGRv
dWJsZSBhbmdsZTAgPSBhdGFuMihzdGFydFBvaW50LnkoKSAtIGNlbnRlci55KCksIHN0YXJ0UG9p
bnQueCgpIC0gY2VudGVyLngoKSk7Ci0gICAgZG91YmxlIGFuZ2xlMSA9IGF0YW4yKHA0LnkoKSAt
IGNlbnRlci55KCksIHA0LngoKSAtIGNlbnRlci54KCkpOwotCi0gICAgb3BlbkZpZ3VyZUF0Q3Vy
cmVudFBvaW50SWZOZWNlc3NhcnkoKTsKLSAgICBhZGRMaW5lVG8oc3RhcnRQb2ludCk7Ci0gICAg
YWRkQXJjKGNlbnRlciwgcmFkaXVzLCBhbmdsZTAsIGFuZ2xlMSwgYW50aWNsb2Nrd2lzZSk7Ci19
Ci0KLXN0YXRpYyBib29sIGVxdWFsUmFkaXVzV2lkdGhzKGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVm
dFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXpl
JiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKQot
ewotICAgIHJldHVybiB0b3BMZWZ0UmFkaXVzLndpZHRoKCkgPT0gdG9wUmlnaHRSYWRpdXMud2lk
dGgoKQotICAgICAgICAmJiB0b3BSaWdodFJhZGl1cy53aWR0aCgpID09IGJvdHRvbUxlZnRSYWRp
dXMud2lkdGgoKQotICAgICAgICAmJiBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCkgPT0gYm90dG9t
UmlnaHRSYWRpdXMud2lkdGgoKTsKLX0KLQotc3RhdGljIGJvb2wgZXF1YWxSYWRpdXNIZWlnaHRz
KGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiB0b3BSaWdo
dFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNp
emUmIGJvdHRvbVJpZ2h0UmFkaXVzKQotewotICAgIHJldHVybiB0b3BMZWZ0UmFkaXVzLmhlaWdo
dCgpID09IGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkKLSAgICAgICAgJiYgYm90dG9tTGVmdFJh
ZGl1cy5oZWlnaHQoKSA9PSB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKQotICAgICAgICAmJiB0b3BS
aWdodFJhZGl1cy5oZWlnaHQoKSA9PSBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKTsKLX0KLQot
dm9pZCBQYXRoOjpwbGF0Zm9ybUFkZFBhdGhGb3JSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiB0
b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBG
bG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKQotewotICAgIGJvb2wgZXF1YWxXaWR0aHMgPSBl
cXVhbFJhZGl1c1dpZHRocyh0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVm
dFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpOwotICAgIGJvb2wgZXF1YWxIZWlnaHRzID0gZXF1
YWxSYWRpdXNIZWlnaHRzKHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0
UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7Ci0KLSAgICBpZiAoZXF1YWxXaWR0aHMgJiYgZXF1
YWxIZWlnaHRzKSB7Ci0gICAgICAgIC8vIEVuc3VyZSB0aGF0IENHIGNhbiByZW5kZXIgdGhlIHJv
dW5kZWQgcmVjdC4KLSAgICAgICAgZmxvYXQgcmFkaXVzV2lkdGggPSB0b3BMZWZ0UmFkaXVzLndp
ZHRoKCk7Ci0gICAgICAgIGZsb2F0IHJhZGl1c0hlaWdodCA9IHRvcExlZnRSYWRpdXMuaGVpZ2h0
KCk7Ci0gICAgICAgIGF1dG8gcmVjdFRvRHJhdyA9IEQyRDE6OlJlY3RGKHJlY3QueCgpLCByZWN0
LnkoKSwgcmVjdC5tYXhYKCksIHJlY3QubWF4WSgpKTsKLQotICAgICAgICBDT01QdHI8SUQyRDFS
b3VuZGVkUmVjdGFuZ2xlR2VvbWV0cnk+IHJvdW5kUmVjdDsKLSAgICAgICAgSFJFU1VMVCBociA9
IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVSb3VuZGVkUmVjdGFuZ2xl
R2VvbWV0cnkoRDJEMTo6Um91bmRlZFJlY3QocmVjdFRvRHJhdywgcmFkaXVzV2lkdGgsIHJhZGl1
c0hlaWdodCksICZyb3VuZFJlY3QpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQo
aHIpKTsKLSAgICAgICAgYXBwZW5kR2VvbWV0cnkocm91bmRSZWN0LmdldCgpKTsKLSAgICAgICAg
QVNTRVJUKHJlZkNvdW50KHJvdW5kUmVjdC5nZXQoKSkgPT0gMik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBhZGRCZXppZXJzRm9yUm91bmRlZFJlY3QocmVjdCwgdG9wTGVmdFJhZGl1
cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsK
LX0KLQotdm9pZCBQYXRoOjpjbG9zZVN1YnBhdGgoKQotewotICAgIGlmIChpc051bGwoKSkgewot
ICAgICAgICBtX2FjdGl2ZVBhdGggPSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKCFtX2FjdGl2ZVBhdGgpIHsKLSAgICAgICAgQVNTRVJUKCFtX2ZpZ3VyZUlzT3Bl
bmVkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNsb3NlQW55T3Blbkdlb21ldHJp
ZXMoRDJEMV9GSUdVUkVfRU5EX0NMT1NFRCk7Ci19Ci0KLXN0YXRpYyBGbG9hdFBvaW50IGFyY1N0
YXJ0KGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQgcmFkaXVzLCBmbG9hdCBzdGFydEFu
Z2xlKQotewotICAgIEZsb2F0UG9pbnQgc3RhcnRpbmdQb2ludCA9IGNlbnRlcjsKLSAgICBmbG9h
dCBzdGFydFggPSByYWRpdXMgKiBzdGQ6OmNvcyhzdGFydEFuZ2xlKTsKLSAgICBmbG9hdCBzdGFy
dFkgPSByYWRpdXMgKiBzdGQ6OnNpbihzdGFydEFuZ2xlKTsKLSAgICBzdGFydGluZ1BvaW50Lm1v
dmUoc3RhcnRYLCBzdGFydFkpOwotICAgIHJldHVybiBzdGFydGluZ1BvaW50OwotfQotCi1jb25z
dCBmbG9hdCB0d29QaSA9IDIuMGYgKiBwaUZsb2F0OwotCi1zdGF0aWMgdm9pZCBkcmF3QXJjU2Vj
dGlvbihJRDJEMUdlb21ldHJ5U2luayogc2luaywgY29uc3QgRmxvYXRQb2ludCYgY2VudGVyLCBm
bG9hdCByYWRpdXMsIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IGVuZEFuZ2xlLCBib29sIGFudGlj
bG9ja3dpc2UpCi17Ci0gICAgLy8gRGlyZWN0MkQgd2FudHMgdXMgdG8gc3BlY2lmeSB0aGUgZW5k
IHBvaW50IG9mIHRoZSBhcmMsIG5vdCB0aGUgY2VudGVyLiBJdCB3aWxsIGJlIGRyYXduIGZyb20K
LSAgICAvLyB3aGF0ZXZlciB0aGUgY3VycmVudCBwb2ludCBpbiB0aGUgJ21fYWN0aXZlUGF0aCcg
aXMuCi0gICAgRmxvYXRQb2ludCBlbmRQb2ludCA9IGNlbnRlcjsKLSAgICBmbG9hdCBlbmRYID0g
cmFkaXVzICogc3RkOjpjb3MoZW5kQW5nbGUpOwotICAgIGZsb2F0IGVuZFkgPSByYWRpdXMgKiBz
dGQ6OnNpbihlbmRBbmdsZSk7Ci0gICAgZW5kUG9pbnQubW92ZShlbmRYLCBlbmRZKTsKLQotICAg
IEQyRDFfU1dFRVBfRElSRUNUSU9OIGRpcmVjdGlvbiA9IGFudGljbG9ja3dpc2UgPyBEMkQxX1NX
RUVQX0RJUkVDVElPTl9DT1VOVEVSX0NMT0NLV0lTRSA6IEQyRDFfU1dFRVBfRElSRUNUSU9OX0NM
T0NLV0lTRTsKLSAgICBzaW5rLT5BZGRBcmMoRDJEMTo6QXJjU2VnbWVudChlbmRQb2ludCwgRDJE
MTo6U2l6ZUYocmFkaXVzLCByYWRpdXMpLCAwLCBkaXJlY3Rpb24sIEQyRDFfQVJDX1NJWkVfU01B
TEwpKTsKLX0KLQotdm9pZCBQYXRoOjphZGRBcmNTbG93Q2FzZShjb25zdCBGbG9hdFBvaW50JiBj
ZW50ZXIsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJv
b2wgYW50aWNsb2Nrd2lzZSkKLXsKLSAgICBhdXRvIGFyY1N0YXJ0UG9pbnQgPSBhcmNTdGFydChj
ZW50ZXIsIHJhZGl1cywgc3RhcnRBbmdsZSk7Ci0gICAgaWYgKCFtX2FjdGl2ZVBhdGgpCi0gICAg
ICAgIG1vdmVUbyhhcmNTdGFydFBvaW50KTsKLSAgICBlbHNlIGlmICghYXJlRXNzZW50aWFsbHlF
cXVhbChjdXJyZW50UG9pbnQoKSwgYXJjU3RhcnRQb2ludCkpIHsKLSAgICAgICAgLy8gSWYgdGhl
IGFyYyBkZWZpbmVkIGJ5IHRoZSBjZW50ZXIgYW5kIHJhZGl1cyBkb2VzIG5vdCBpbnRlcnNlY3Qg
dGhlIGN1cnJlbnQgcG9zaXRpb24sCi0gICAgICAgIC8vIHdlIG5lZWQgdG8gZHJhdyBhIGxpbmUg
ZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgc3RhcnRpbmcgcG9pbnQgb2YgdGhlIGFy
Yy4KLSAgICAgICAgYWRkTGluZVRvKGFyY1N0YXJ0UG9pbnQpOwotICAgIH0KLQotICAgIGlmIChX
VEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc3RkOjphYnMoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKSwg
dHdvUGkpKQotICAgICAgICByZXR1cm4gYWRkRWxsaXBzZShGbG9hdFJlY3QoY2VudGVyLngoKSAt
IHJhZGl1cywgY2VudGVyLnkoKSAtIHJhZGl1cywgMi4wICogcmFkaXVzLCAyLjAgKiByYWRpdXMp
KTsKLQotICAgIGlmIChhbnRpY2xvY2t3aXNlKSB7Ci0gICAgICAgIGlmIChlbmRBbmdsZSA+IHN0
YXJ0QW5nbGUpIHsKLSAgICAgICAgICAgIGVuZEFuZ2xlIC09IHR3b1BpICogc3RkOjpjZWlsKChl
bmRBbmdsZSAtIHN0YXJ0QW5nbGUpIC8gdHdvUGkpOwotICAgICAgICAgICAgQVNTRVJUKGVuZEFu
Z2xlIDw9IHN0YXJ0QW5nbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYg
KHN0YXJ0QW5nbGUgPiBlbmRBbmdsZSkgewotICAgICAgICAgICAgc3RhcnRBbmdsZSAtPSB0d29Q
aSAqIHN0ZDo6Y2VpbCgoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSAvIHR3b1BpKTsKLSAgICAgICAg
ICAgIEFTU0VSVChzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGNvbnN0IGZsb2F0IGRlbHRhID0gYW50aWNsb2Nrd2lzZSA/IC1waU92ZXJUd29GbG9hdCA6
IHBpT3ZlclR3b0Zsb2F0OwotICAgIGZsb2F0IHJlbWFpbmluZ0FyY0FuZ2xlID0gZW5kQW5nbGUg
LSBzdGFydEFuZ2xlOwotCi0gICAgd2hpbGUgKChyZW1haW5pbmdBcmNBbmdsZSA+IDAgJiYgcmVt
YWluaW5nQXJjQW5nbGUgPiBkZWx0YSkgfHwgKHJlbWFpbmluZ0FyY0FuZ2xlIDwgMCAmJiByZW1h
aW5pbmdBcmNBbmdsZSA8IGRlbHRhKSkgewotICAgICAgICBjb25zdCBkb3VibGUgY3VycmVudEVu
ZEFuZ2xlID0gc3RhcnRBbmdsZSArIGRlbHRhOwotICAgICAgICBkcmF3QXJjU2VjdGlvbihtX2Fj
dGl2ZVBhdGguZ2V0KCksIGNlbnRlciwgcmFkaXVzLCBzdGFydEFuZ2xlLCBjdXJyZW50RW5kQW5n
bGUsIGFudGljbG9ja3dpc2UpOwotICAgICAgICBzdGFydEFuZ2xlID0gY3VycmVudEVuZEFuZ2xl
OwotICAgICAgICByZW1haW5pbmdBcmNBbmdsZSAtPSBkZWx0YTsKLSAgICB9Ci0KLSAgICAvLyBI
YW5kbGUgYW55IHJlbWFpbmluZyBwYXJ0IG9mIHRoZSBhcmM6Ci0gICAgaWYgKHN0ZDo6YWJzKHJl
bWFpbmluZ0FyY0FuZ2xlKSA+IDFlLTYpCi0gICAgICAgIGRyYXdBcmNTZWN0aW9uKG1fYWN0aXZl
UGF0aC5nZXQoKSwgY2VudGVyLCByYWRpdXMsIHN0YXJ0QW5nbGUsIHN0YXJ0QW5nbGUgKyByZW1h
aW5pbmdBcmNBbmdsZSwgYW50aWNsb2Nrd2lzZSk7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkUmVjdChj
b25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAgaWYgKCFtX2FjdGl2ZVBhdGgpCi0gICAgICAgIG1v
dmVUbyhyLmxvY2F0aW9uKCkpOwotCi0gICAgQ09NUHRyPElEMkQxUmVjdGFuZ2xlR2VvbWV0cnk+
IHJlY3RhbmdsZTsKLSAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0
b3J5KCktPkNyZWF0ZVJlY3RhbmdsZUdlb21ldHJ5KHIsICZyZWN0YW5nbGUpOwotICAgIFJFTEVB
U0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIGFwcGVuZEdlb21ldHJ5KHJlY3RhbmdsZS5n
ZXQoKSk7Ci0gICAgQVNTRVJUKHJlZkNvdW50KHJlY3RhbmdsZS5nZXQoKSkgPT0gMik7Ci19Ci0K
LXZvaWQgUGF0aDo6YWRkRWxsaXBzZShGbG9hdFBvaW50IHAsIGZsb2F0IHJhZGl1c1gsIGZsb2F0
IHJhZGl1c1ksIGZsb2F0IHJvdGF0aW9uLCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmds
ZSwgYm9vbCBhbnRpY2xvY2t3aXNlKQotewotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07
Ci0gICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShwLngoKSwgcC55KCkpLnJvdGF0ZShyYWQyZGVnKHJv
dGF0aW9uKSkuc2NhbGUocmFkaXVzWCwgcmFkaXVzWSk7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByKQotewotICAg
IGlmICghbV9hY3RpdmVQYXRoKQotICAgICAgICBtb3ZlVG8oci5sb2NhdGlvbigpKTsKLQotICAg
IENPTVB0cjxJRDJEMUVsbGlwc2VHZW9tZXRyeT4gZWxsaXBzZTsKLSAgICAvLyBOb3RlOiBUaGUg
cmFkaWkgb2YgdGhlIGVsbGlwc2UgY29udGFpbmVkIHdpdGhpbiBhIHJlY3RhbmdlIGFyZSBoYWxm
IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSByZWN0LgotICAgIEhSRVNVTFQgaHIgPSBHcmFw
aGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRWxsaXBzZUdlb21ldHJ5KEQyRDE6
OkVsbGlwc2Uoci5jZW50ZXIoKSwgMC41ICogci53aWR0aCgpLCAwLjUgKiByLmhlaWdodCgpKSwg
JmVsbGlwc2UpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIGFwcGVu
ZEdlb21ldHJ5KGVsbGlwc2UuZ2V0KCkpOwotICAgIEFTU0VSVChyZWZDb3VudChlbGxpcHNlLmdl
dCgpKSA9PSAyKTsKLX0KLQotdm9pZCBQYXRoOjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIGlmICghcGF0aC5wbGF0Zm9y
bVBhdGgoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF0cmFuc2Zvcm0uaXNJbnZlcnRp
YmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLQot
dm9pZCBQYXRoOjpjbGVhcigpCi17Ci0gICAgaWYgKGlzTnVsbCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3BhdGggPSBudWxscHRyOwotICAgIG1fYWN0aXZlUGF0aCA9IG51bGxwdHI7Ci0g
ICAgY2xlYXJHZW9tZXRyaWVzKCk7Ci19Ci0KLWJvb2wgUGF0aDo6aXNFbXB0eVNsb3dDYXNlKCkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fcGF0aC0+R2V0U291cmNlR2VvbWV0cnlDb3VudCgpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEFTU0VSVChtX3BhdGgtPkdldFNvdXJjZUdlb21ldHJ5
Q291bnQoKSA9PSBtX2dlb21ldHJpZXMuc2l6ZSgpKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotRmxvYXRQb2ludCBQYXRoOjpjdXJyZW50UG9pbnRTbG93Q2FzZSgpIGNvbnN0Ci17Ci0gICAg
ZmxvYXQgbGVuZ3RoID0gMDsKLSAgICBIUkVTVUxUIGhyID0gbV9wYXRoLT5Db21wdXRlTGVuZ3Ro
KG51bGxwdHIsICZsZW5ndGgpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0
dXJuIEZsb2F0UG9pbnQoKTsKLQotICAgIEQyRDFfUE9JTlRfMkYgcG9pbnQgPSB7IH07Ci0gICAg
RDJEMV9QT0lOVF8yRiB0YW5nZW50ID0geyB9OwotICAgIGhyID0gbV9wYXRoLT5Db21wdXRlUG9p
bnRBdExlbmd0aChsZW5ndGgsIG51bGxwdHIsICZwb2ludCwgJnRhbmdlbnQpOwotICAgIGlmICgh
U1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKLQotICAgIHJldHVy
biBwb2ludDsKLX0KLQotZmxvYXQgUGF0aDo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICBmbG9hdCBs
ZW5ndGggPSAwOwotICAgIEhSRVNVTFQgaHIgPSBtX3BhdGgtPkNvbXB1dGVMZW5ndGgobnVsbHB0
ciwgJmxlbmd0aCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHJldHVybiBsZW5ndGg7Ci19Ci0KLXZvaWQgUGF0aDo6YXBwbHlTbG93Q2FzZShjb25z
dCBQYXRoQXBwbGllckZ1bmN0aW9uJikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi1ib29sIFBhdGg6OmlzTnVsbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFtX3BhdGg7Ci19
Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3BwCShy
ZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
UGF0dGVybkRpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSUQy
RDFCaXRtYXBCcnVzaCogUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgZmxvYXQgYWxwaGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dXNlclNwYWNlVHJhbnNmb3JtYXRpb24pIGNvbnN0Ci17Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHBh
dHRlcm5UcmFuc2Zvcm0gPSB1c2VyU3BhY2VUcmFuc2Zvcm1hdGlvbiAqIG1fcGF0dGVyblNwYWNl
VHJhbnNmb3JtYXRpb247Ci0gICAgYXV0byBiaXRtYXBCcnVzaFByb3BlcnRpZXMgPSBEMkQxOjpC
aXRtYXBCcnVzaFByb3BlcnRpZXMoKTsKLSAgICBiaXRtYXBCcnVzaFByb3BlcnRpZXMuZXh0ZW5k
TW9kZVggPSBtX3JlcGVhdFggPyBEMkQxX0VYVEVORF9NT0RFX1dSQVAgOiBEMkQxX0VYVEVORF9N
T0RFX0NMQU1QOwotICAgIGJpdG1hcEJydXNoUHJvcGVydGllcy5leHRlbmRNb2RlWSA9IG1fcmVw
ZWF0WSA/IEQyRDFfRVhURU5EX01PREVfV1JBUCA6IEQyRDFfRVhURU5EX01PREVfQ0xBTVA7Ci0K
LSAgICBhdXRvIGJydXNoUHJvcGVydGllcyA9IEQyRDE6OkJydXNoUHJvcGVydGllcygpOwotICAg
IGJydXNoUHJvcGVydGllcy50cmFuc2Zvcm0gPSBwYXR0ZXJuVHJhbnNmb3JtOwotICAgIGJydXNo
UHJvcGVydGllcy5vcGFjaXR5ID0gYWxwaGE7Ci0KLSAgICBhdXRvJiBwYXR0ZXJuSW1hZ2UgPSB0
aWxlSW1hZ2UoKTsKLSAgICBhdXRvIG5hdGl2ZUltYWdlID0gcGF0dGVybkltYWdlLm5hdGl2ZUlt
YWdlKCZjb250ZXh0KTsKLSAgICBpZiAoIW5hdGl2ZUltYWdlKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGF1dG8gcGxhdGZvcm1Db250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChwbGF0Zm9ybUNvbnRleHQpOwotCi0gICAgSUQyRDFC
aXRtYXBCcnVzaCogcGF0dGVybkJydXNoID0gbnVsbHB0cjsKLSAgICBIUkVTVUxUIGhyID0gcGxh
dGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKS0+Q3JlYXRlQml0bWFwQnJ1c2gobmF0aXZlSW1h
Z2UuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRpZXMsICZicnVzaFByb3BlcnRpZXMsICZwYXR0
ZXJuQnJ1c2gpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICByZXR1cm4gcGF0dGVy
bkJydXNoOwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEs
Mzk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkRpcmVjdDJET3BlcmF0
aW9ucy5oIgotI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSA8ZDJkMS5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEVuY2Fwc3VsYXRlcyB0aGUgYWRkaXRpb25h
bCBwYWludGluZyBzdGF0ZSBpbmZvcm1hdGlvbiB3ZSBzdG9yZSBmb3IgZWFjaAotLy8gcHVzaGVk
IGdyYXBoaWNzIHN0YXRlLgotY2xhc3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OlN0YXRlIHsK
LXB1YmxpYzoKLSAgICBTdGF0ZSgpID0gZGVmYXVsdDsKLQotICAgIENPTVB0cjxJRDJEMURyYXdp
bmdTdGF0ZUJsb2NrPiBtX2RyYXdpbmdTdGF0ZUJsb2NrOwotICAgIENPTVB0cjxJRDJEMUxheWVy
PiBtX2FjdGl2ZUxheWVyOwotICAgIFZlY3RvcjxEaXJlY3QyRExheWVyVHlwZT4gbV9jbGlwczsK
LX07Ci0KLVBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpQbGF0Zm9ybUNvbnRleHREaXJlY3QyRChJ
RDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBGdW5jdGlvbjx2b2lkKCk+JiYgcHJlRHJh
d0hhbmRsZXIsIEZ1bmN0aW9uPHZvaWQoKT4mJiBwb3N0RHJhd0hhbmRsZXIpCi0gICAgOiBtX3Jl
bmRlclRhcmdldChyZW5kZXJUYXJnZXQpCi0gICAgLCBtX3ByZURyYXdIYW5kbGVyKFdURk1vdmUo
cHJlRHJhd0hhbmRsZXIpKQotICAgICwgbV9wb3N0RHJhd0hhbmRsZXIoV1RGTW92ZShwb3N0RHJh
d0hhbmRsZXIpKQotewotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoU3RhdGUoKSk7Ci0gICAgbV9z
dGF0ZSA9ICZtX3N0YXRlU3RhY2subGFzdCgpOwotCi0gICAgbV9kZXZpY2VDb250ZXh0LnF1ZXJ5
KG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghIW1fZGV2aWNlQ29u
dGV4dCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFJlbmRlclRhcmdl
dChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQotewotICAgIG1fcmVuZGVyVGFyZ2V0
ID0gcmVuZGVyVGFyZ2V0OwotCi0gICAgbV9kZXZpY2VDb250ZXh0LnF1ZXJ5KG1fcmVuZGVyVGFy
Z2V0LmdldCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghIW1fZGV2aWNlQ29udGV4dCk7Ci19Ci0K
LUlEMkQxTGF5ZXIqIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpjbGlwTGF5ZXIoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3N0YXRlLT5tX2FjdGl2ZUxheWVyLmdldCgpOwotfQotCi12b2lkIFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEOjpjbGVhckNsaXBzKFZlY3RvcjxEaXJlY3QyRExheWVyVHlw
ZT4mIGNsaXBzKQotewotICAgIGZvciAoYXV0byBjbGlwVHlwZSA9IGNsaXBzLnJiZWdpbigpOyBj
bGlwVHlwZSAhPSBjbGlwcy5yZW5kKCk7ICsrY2xpcFR5cGUpIHsKLSAgICAgICAgaWYgKCpjbGlw
VHlwZSA9PSBBeGlzQWxpZ25lZENsaXApCi0gICAgICAgICAgICBtX3JlbmRlclRhcmdldC0+UG9w
QXhpc0FsaWduZWRDbGlwKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcmVuZGVyVGFy
Z2V0LT5Qb3BMYXllcigpOwotICAgIH0KLQotICAgIGNsaXBzLmNsZWFyKCk7Ci19Ci0KLXZvaWQg
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnJlc3RvcmUoKQotewotICAgIEFTU0VSVChtX3JlbmRl
clRhcmdldCk7Ci0KLSAgICAvLyBObyBuZWVkIHRvIHJlc3RvcmUgaWYgd2UgZG9uJ3QgaGF2ZSBh
IHNhdmVkIGVsZW1lbnQgb24gdGhlIHN0YWNrLgotICAgIGlmIChtX3N0YXRlU3RhY2suc2l6ZSgp
ID09IDEpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHJlc3RvcmVTdGF0ZSA9IG1fc3Rh
dGVTdGFjay5sYXN0KCk7Ci0gICAgaWYgKHJlc3RvcmVTdGF0ZS5tX2RyYXdpbmdTdGF0ZUJsb2Nr
KSB7Ci0gICAgICAgIG1fcmVuZGVyVGFyZ2V0LT5SZXN0b3JlRHJhd2luZ1N0YXRlKHJlc3RvcmVT
dGF0ZS5tX2RyYXdpbmdTdGF0ZUJsb2NrLmdldCgpKTsKLSAgICAgICAgcmVzdG9yZVN0YXRlLm1f
ZHJhd2luZ1N0YXRlQmxvY2sgPSBudWxscHRyOwotICAgIH0KLQotICAgIGNsZWFyQ2xpcHMocmVz
dG9yZVN0YXRlLm1fY2xpcHMpOwotCi0gICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAg
ICBBU1NFUlQoIW1fc3RhdGVTdGFjay5pc0VtcHR5KCkpOwotICAgIG1fc3RhdGUgPSAmbV9zdGF0
ZVN0YWNrLmxhc3QoKTsKLX0KLQotUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6On5QbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCgpID0gZGVmYXVsdDsKLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RDo6c2F2ZSgpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkgPj0gMSk7IC8vIFRo
ZXJlIHNob3VsZCBhbHdheXMgYmUgb25lIHN0YXRlIG9uIHRoZSBzdGFjay4KLSAgICBBU1NFUlQo
bV9yZW5kZXJUYXJnZXQpOwotCi0gICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChTdGF0ZSgpKTsKLSAg
ICBtX3N0YXRlID0gJm1fc3RhdGVTdGFjay5sYXN0KCk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQ6
OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRHJhd2luZ1N0YXRlQmxvY2soJm1fc3RhdGUtPm1fZHJh
d2luZ1N0YXRlQmxvY2spOwotCi0gICAgbV9yZW5kZXJUYXJnZXQtPlNhdmVEcmF3aW5nU3RhdGUo
bV9zdGF0ZS0+bV9kcmF3aW5nU3RhdGVCbG9jay5nZXQoKSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQ6OnB1c2hSZW5kZXJDbGlwKERpcmVjdDJETGF5ZXJUeXBlIGNsaXBUeXBl
KQotewotICAgIEFTU0VSVChoYXNTYXZlZFN0YXRlKCkpOwotICAgIG1fc3RhdGUtPm1fY2xpcHMu
YXBwZW5kKGNsaXBUeXBlKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0
QWN0aXZlTGF5ZXIoQ09NUHRyPElEMkQxTGF5ZXI+JiYgbGF5ZXIpCi17Ci0gICAgQVNTRVJUKGhh
c1NhdmVkU3RhdGUoKSk7Ci0gICAgbV9zdGF0ZS0+bV9hY3RpdmVMYXllciA9IGxheWVyOwotfQot
Ci1DT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpi
cnVzaFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9SX0YmIGNvbG9yKQotewotICAgIGF1dG8gY29s
b3JLZXkgPSBjb2xvckNvbnZlcnQ8U1JHQkE8dWludDhfdD4+KFNSR0JBPGZsb2F0PiB7IGNvbG9y
LnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSk7Ci0KLSAgICBpZiAoIWNvbG9yS2V5KSB7
Ci0gICAgICAgIGlmICghbV96ZXJvQnJ1c2gpCi0gICAgICAgICAgICBtX3JlbmRlclRhcmdldC0+
Q3JlYXRlU29saWRDb2xvckJydXNoKGNvbG9yLCAmbV96ZXJvQnJ1c2gpOwotICAgICAgICByZXR1
cm4gbV96ZXJvQnJ1c2g7Ci0gICAgfQotCi0gICAgaWYgKGNvbG9yS2V5ID09IDB4RkZGRkZGRkYp
IHsKLSAgICAgICAgaWYgKCFtX3doaXRlQnJ1c2gpCi0gICAgICAgICAgICBtX3JlbmRlclRhcmdl
dC0+Q3JlYXRlU29saWRDb2xvckJydXNoKGNvbG9yLCAmbV93aGl0ZUJydXNoKTsKLSAgICAgICAg
cmV0dXJuIG1fd2hpdGVCcnVzaDsKLSAgICB9Ci0KLSAgICBhdXRvIGV4aXN0aW5nQnJ1c2ggPSBt
X3NvbGlkQ29sb3JlZEJydXNoQ2FjaGUuZW5zdXJlKGNvbG9yS2V5LCBbdGhpcywgY29sb3JdIHsK
LSAgICAgICAgQ09NUHRyPElEMkQxU29saWRDb2xvckJydXNoPiBjb2xvckJydXNoOwotICAgICAg
ICBtX3JlbmRlclRhcmdldC0+Q3JlYXRlU29saWRDb2xvckJydXNoKGNvbG9yLCAmY29sb3JCcnVz
aCk7Ci0gICAgICAgIHJldHVybiBjb2xvckJydXNoOwotICAgIH0pOwotCi0gICAgcmV0dXJuIGV4
aXN0aW5nQnJ1c2guaXRlcmF0b3ItPnZhbHVlOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEOjpyZWNvbXB1dGVTdHJva2VTdHlsZSgpCi17Ci0gICAgaWYgKCFtX3N0cm9rZVN5bGVJ
c0RpcnR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2QyZFN0cm9rZVN0eWxlID0gbnVsbHB0
cjsKLQotICAgIERhc2hBcnJheSBkYXNoZXM7Ci0gICAgZmxvYXQgcGF0dGVybk9mZnNldCA9IDA7
Ci0gICAgYXV0byBkYXNoU3R5bGUgPSBEMkQxX0RBU0hfU1RZTEVfU09MSUQ7Ci0KLSAgICBpZiAo
KG1fc3Ryb2tlU3R5bGUgIT0gU29saWRTdHJva2UpICYmIChtX3N0cm9rZVN0eWxlICE9IE5vU3Ry
b2tlKSkgewotICAgICAgICBkYXNoU3R5bGUgPSBEMkQxX0RBU0hfU1RZTEVfQ1VTVE9NOwotICAg
ICAgICBwYXR0ZXJuT2Zmc2V0ID0gbV9wYXR0ZXJuT2Zmc2V0IC8gbV9zdHJva2VUaGlja25lc3M7
Ci0gICAgICAgIGRhc2hlcyA9IG1fZGFzaGVzOwotCi0gICAgICAgIC8vIEluIERpcmVjdDJELCBk
YXNoZXMgYW5kIGRvdHMgYXJlIGRlZmluZWQgaW4gdGVybXMgb2YgdGhlIHJhdGlvIG9mIHRoZSBk
YXNoIGxlbmd0aCB0byB0aGUgbGluZSB0aGlja25lc3MuCi0gICAgICAgIGZvciAoYXV0byYgZGFz
aCA6IGRhc2hlcykKLSAgICAgICAgICAgIGRhc2ggLz0gbV9zdHJva2VUaGlja25lc3M7Ci0gICAg
fQotCi0gICAgYXV0byBzdHJva2VTdHlsZVByb3BlcnRpZXMgPSBEMkQxOjpTdHJva2VTdHlsZVBy
b3BlcnRpZXMobV9saW5lQ2FwLCBtX2xpbmVDYXAsIG1fbGluZUNhcCwgbV9saW5lSm9pbiwgbV9t
aXRlckxpbWl0LCBkYXNoU3R5bGUsIHBhdHRlcm5PZmZzZXQpOwotICAgIEdyYXBoaWNzQ29udGV4
dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVTdHJva2VTdHlsZSgmc3Ryb2tlU3R5bGVQcm9wZXJ0
aWVzLCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpLCAmbV9kMmRTdHJva2VTdHlsZSk7Ci0K
LSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0gZmFsc2U7Ci19Ci0KLUlEMkQxU3Ryb2tlU3R5bGUq
IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzdHJva2VTdHlsZSgpCi17Ci0gICAgcmVjb21wdXRl
U3Ryb2tlU3R5bGUoKTsKLSAgICByZXR1cm4gbV9kMmRTdHJva2VTdHlsZS5nZXQoKTsKLX0KLQot
RDJEMV9TVFJPS0VfU1RZTEVfUFJPUEVSVElFUyBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c3Ry
b2tlU3R5bGVQcm9wZXJ0aWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRDJEMTo6U3Ryb2tlU3R5
bGVQcm9wZXJ0aWVzKG1fbGluZUNhcCwgbV9saW5lQ2FwLCBtX2xpbmVDYXAsIG1fbGluZUpvaW4s
IG1fbWl0ZXJMaW1pdCwgRDJEMV9EQVNIX1NUWUxFX1NPTElELCAwLjBmKTsKLX0KLQotdm9pZCBQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0TGluZUNhcChEMkQxX0NBUF9TVFlMRSBsaW5lQ2Fw
KQotewotICAgIGlmIChtX2xpbmVDYXAgPT0gbGluZUNhcCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9saW5lQ2FwID0gbGluZUNhcDsKLSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0gdHJ1ZTsK
LX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0TGluZUpvaW4oRDJEMV9MSU5F
X0pPSU4gam9pbikKLXsKLSAgICBpZiAobV9saW5lSm9pbiA9PSBqb2luKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2xpbmVKb2luID0gam9pbjsKLSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0g
dHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0U3Ryb2tlU3R5bGUo
U3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17Ci0gICAgaWYgKG1fc3Ryb2tlU3R5bGUgPT0gc3Ry
b2tlU3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3Ryb2tlU3R5bGUgPSBzdHJva2VT
dHlsZTsKLSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRDo6c2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKLXsK
LSAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHRoaWNrbmVzcywgbV9zdHJva2VUaGlj
a25lc3MpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0cm9rZVRoaWNrbmVzcyA9IHRoaWNr
bmVzczsKLSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBjYW52YXNNaXRlckxpbWl0KQot
ewotICAgIC8vIERpcmVjdDJEIG1pdGVyIGxpbWl0IGlzIGluIHRlcm1zIG9mIEhBTEYgdGhlIGxp
bmUgdGhpY2tuZXNzLgotICAgIGZsb2F0IG1pdGVyTGltaXQgPSAwLjVmICogY2FudmFzTWl0ZXJM
aW1pdDsKLSAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKG1pdGVyTGltaXQsIG1fbWl0
ZXJMaW1pdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbWl0ZXJMaW1pdCA9IG1pdGVyTGlt
aXQ7Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQ6OnNldERhc2hPZmZzZXQoZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBp
ZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGRhc2hPZmZzZXQsIG1fZGFzaE9mZnNldCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fZGFzaE9mZnNldCA9IGRhc2hPZmZzZXQ7Ci0gICAgbV9z
dHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQ6OnNldERhc2hlcyhjb25zdCBEYXNoQXJyYXkmIGRhc2hlcykKLXsKLSAgICBpZiAobV9kYXNo
ZXMgPT0gZGFzaGVzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Rhc2hlcyA9IGRhc2hlczsK
LSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRDo6c2V0UGF0dGVybldpZHRoKGZsb2F0IHBhdHRlcm5XaWR0aCkKLXsKLSAgICBp
ZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHBhdHRlcm5XaWR0aCwgbV9wYXR0ZXJuV2lkdGgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhdHRlcm5XaWR0aCA9IHBhdHRlcm5XaWR0aDsK
LSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRDo6c2V0UGF0dGVybk9mZnNldChmbG9hdCBwYXR0ZXJuT2Zmc2V0KQotewotICAg
IGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwocGF0dGVybk9mZnNldCwgbV9wYXR0ZXJuT2Zm
c2V0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYXR0ZXJuT2Zmc2V0ID0gcGF0dGVybk9m
ZnNldDsKLSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRDo6YmVnaW5EcmF3KCkKLXsKLSAgICBBU1NFUlQobV9yZW5kZXJUYXJn
ZXQpOwotICAgIG1fcmVuZGVyVGFyZ2V0LT5CZWdpbkRyYXcoKTsKLSAgICArK2JlZ2luRHJhd0Nv
dW50OwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjplbmREcmF3KCkKLXsKLSAg
ICBBU1NFUlQobV9yZW5kZXJUYXJnZXQpOwotCi0gICAgaWYgKG1fc3RhdGVTdGFjay5zaXplKCkg
PiAxKQotICAgICAgICByZXN0b3JlKCk7Ci0KLSAgICBjbGVhckNsaXBzKG1fc3RhdGUtPm1fY2xp
cHMpOwotCi0gICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkgPj0gMSk7Ci0KLSAgICBEMkQx
X1RBRyBmaXJzdCwgc2Vjb25kOwotICAgIEhSRVNVTFQgaHIgPSBtX3JlbmRlclRhcmdldC0+RW5k
RHJhdygmZmlyc3QsICZzZWNvbmQpOwotCi0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAg
ICBXVEZMb2dBbHdheXMoIkZhaWxlZCBpbiBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6ZW5kRHJh
dzogaHI9JXhkLCBmaXJzdD0lbGQsIHNlY29uZD0lbGQiLCBociwgZmlyc3QsIHNlY29uZCk7Ci0K
LSAgICAtLWJlZ2luRHJhd0NvdW50OwotCi0gICAgY29tcG9zaXRlSWZOZWVkZWQoKTsKLX0KLQot
dm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0VGFncyhEMkQxX1RBRyB0YWcxLCBEMkQx
X1RBRyB0YWcyKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbV9yZW5kZXJUYXJnZXQtPlNl
dFRhZ3ModGFnMSwgdGFnMik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YWcxKTsKLSAgICBV
TlVTRURfUEFSQU0odGFnMik7Ci0jZW5kaWYKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRDo6bm90aWZ5UHJlRHJhd09ic2VydmVyKCkKLXsKLSAgICBtX3ByZURyYXdIYW5kbGVyKCk7
Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6Om5vdGlmeVBvc3REcmF3T2JzZXJ2
ZXIoKQotewotICAgIG1fcG9zdERyYXdIYW5kbGVyKCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ6OnB1c2hDbGlwKERpcmVjdDJETGF5ZXJUeXBlIGNsaXBUeXBlKQotewotICAg
IG1fc3RhdGUtPm1fY2xpcHMuYXBwZW5kKGNsaXBUeXBlKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRDo6Y29tcG9zaXRlSWZOZWVkZWQoKQotewotICAgIGlmICghbV9jb21wb3Np
dGVTb3VyY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRl
clRhcmdldD4gYml0bWFwVGFyZ2V0KFF1ZXJ5LCBtX3JlbmRlclRhcmdldC5nZXQoKSk7Ci0gICAg
aWYgKCFiaXRtYXBUYXJnZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJRDJEMUJp
dG1hcD4gY3VycmVudENhbnZhcyA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXBDb3B5RnJvbUNvbnRl
eHQoYml0bWFwVGFyZ2V0LmdldCgpKTsKLSAgICBpZiAoIWN1cnJlbnRDYW52YXMpCi0gICAgICAg
IHJldHVybjsKLQotICAgIENPTVB0cjxJRDJEMUVmZmVjdD4gZWZmZWN0OwotCi0gICAgaWYgKG1f
Y29tcG9zaXRlTW9kZSAhPSBEMkQxX0NPTVBPU0lURV9NT0RFX0ZPUkNFX0RXT1JEKSB7Ci0gICAg
ICAgIG1fZGV2aWNlQ29udGV4dC0+Q3JlYXRlRWZmZWN0KENMU0lEX0QyRDFDb21wb3NpdGUsICZl
ZmZlY3QpOwotICAgICAgICBlZmZlY3QtPlNldElucHV0KDAsIG1fY29tcG9zaXRlU291cmNlLmdl
dCgpKTsKLSAgICAgICAgZWZmZWN0LT5TZXRJbnB1dCgxLCBjdXJyZW50Q2FudmFzLmdldCgpKTsK
LSAgICAgICAgZWZmZWN0LT5TZXRWYWx1ZShEMkQxX0NPTVBPU0lURV9QUk9QX01PREUsIG1fY29t
cG9zaXRlTW9kZSk7Ci0gICAgfSBlbHNlIGlmIChtX2JsZW5kTW9kZSAhPSBEMkQxX0JMRU5EX01P
REVfRk9SQ0VfRFdPUkQpIHsKLSAgICAgICAgbV9kZXZpY2VDb250ZXh0LT5DcmVhdGVFZmZlY3Qo
Q0xTSURfRDJEMUJsZW5kLCAmZWZmZWN0KTsKLSAgICAgICAgZWZmZWN0LT5TZXRJbnB1dCgwLCBj
dXJyZW50Q2FudmFzLmdldCgpKTsKLSAgICAgICAgZWZmZWN0LT5TZXRJbnB1dCgxLCBtX2NvbXBv
c2l0ZVNvdXJjZS5nZXQoKSk7Ci0gICAgICAgIGVmZmVjdC0+U2V0VmFsdWUoRDJEMV9CTEVORF9Q
Uk9QX01PREUsIG1fYmxlbmRNb2RlKTsKLSAgICB9Ci0KLSAgICBpZiAoZWZmZWN0KSB7Ci0gICAg
ICAgIG1fZGV2aWNlQ29udGV4dC0+QmVnaW5EcmF3KCk7Ci0gICAgICAgIG1fZGV2aWNlQ29udGV4
dC0+Q2xlYXIoRDJEMTo6Q29sb3JGKDAsIDAsIDAsIDApKTsKLSAgICAgICAgbV9kZXZpY2VDb250
ZXh0LT5EcmF3SW1hZ2UoZWZmZWN0LmdldCgpKTsKLSAgICAgICAgbV9kZXZpY2VDb250ZXh0LT5F
bmREcmF3KCk7Ci0gICAgfQotCi0gICAgbV9jb21wb3NpdGVTb3VyY2UgPSBudWxscHRyOwotfQot
Ci12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRCbGVuZEFuZENvbXBvc2l0ZU1vZGUo
RDJEMV9CTEVORF9NT0RFIGJsZW5kLCBEMkQxX0NPTVBPU0lURV9NT0RFIG1vZGUpCi17Ci0gICAg
aWYgKG1vZGUgPT0gbV9jb21wb3NpdGVNb2RlICYmIGJsZW5kID09IG1fYmxlbmRNb2RlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBEaXJlY3QyRCBoYW5kbGVzIGNvbXBvc2l0aW5nIGJhc2Vk
IG9uIGJpdG1hcHMuIElmIHdlIGFyZSBjaGFuZ2luZyB0aGUKLSAgICAvLyBjb21wb3NpdGluZyBt
b2RlLCB3ZSBuZWVkIHRvIGNhcHR1cmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHJlbmRlcmlu
ZwotICAgIC8vIGluIGEgYml0bWFwLCBwZXJmb3JtIGRyYXdpbmcgb3BlcmF0aW9ucyB1bnRpbCB3
ZSBmaW5pc2gsIHRoZW4gaGFuZGxlCi0gICAgLy8gdGhlIGNvbXBvc3Rpbmcgb2YgdGhlIHR3byBs
YXllcnMuCi0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQo
UXVlcnksIG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAgICBpZiAoIWJpdG1hcFRhcmdldCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZW5kRHJhdygpOwotCi0gICAgbV9jb21wb3NpdGVNb2RlID0g
bW9kZTsKLSAgICBtX2JsZW5kTW9kZSA9IGJsZW5kOwotCi0gICAgbV9jb21wb3NpdGVTb3VyY2Ug
PSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwQ29weUZyb21Db250ZXh0KGJpdG1hcFRhcmdldC5nZXQo
KSk7Ci0KLSAgICBiZWdpbkRyYXcoKTsKLQotICAgIG1fZGV2aWNlQ29udGV4dC0+Q2xlYXIoRDJE
MTo6Q29sb3JGKDAsIDAsIDAsIDApKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmgJ
KHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oCShub25leGlzdGVudCkKQEAgLTEsMjEwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8ZDJk
MV8xLmg+Ci0jaW5jbHVkZSA8ZDJkMWVmZmVjdHMuaD4KLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlOwotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOwotCi1uYW1lc3BhY2UgRGlyZWN0MkQg
ewotc3RydWN0IEZpbGxTb3VyY2U7Ci1zdHJ1Y3QgU3Ryb2tlU291cmNlOwotc3RydWN0IFNoYWRv
d1N0YXRlOwotfQotCi1jbGFzcyBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQpOwotcHVibGljOgotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKElEMkQx
UmVuZGVyVGFyZ2V0KiwgRnVuY3Rpb248dm9pZCgpPiYmIHByZURyYXdIYW5kbGVyID0gW10oKSB7
IH0sIEZ1bmN0aW9uPHZvaWQoKT4mJiBwb3N0RHJhd0hhbmRsZXIgPSBbXSgpIHsgfSk7Ci0gICAg
flBsYXRmb3JtQ29udGV4dERpcmVjdDJEKCk7Ci0KLSAgICBJRDJEMVJlbmRlclRhcmdldCogcmVu
ZGVyVGFyZ2V0KCkgeyByZXR1cm4gbV9yZW5kZXJUYXJnZXQuZ2V0KCk7IH0KLSAgICB2b2lkIHNl
dFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCopOwotCi0gICAgSUQyRDFEZXZpY2VDb250
ZXh0KiBkZXZpY2VDb250ZXh0KCkgeyByZXR1cm4gbV9kZXZpY2VDb250ZXh0LmdldCgpOyB9Ci0K
LSAgICBJRDNEMTFEZXZpY2UxKiBkM2REZXZpY2UoKSBjb25zdCB7IHJldHVybiBtX2QzZERldmlj
ZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0RDNERGV2aWNlKElEM0QxMURldmljZTEqIGRldmljZSkg
eyBtX2QzZERldmljZSA9IGRldmljZTsgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKiBncmFwaGljc0NvbnRleHRQcml2YXRlKCkgeyByZXR1cm4gbV9ncmFwaGljc0NvbnRl
eHRQcml2YXRlOyB9Ci0gICAgdm9pZCBzZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZSkgeyBtX2dyYXBo
aWNzQ29udGV4dFByaXZhdGUgPSBncmFwaGljc0NvbnRleHRQcml2YXRlOyB9Ci0KLSAgICBJRDJE
MUxheWVyKiBjbGlwTGF5ZXIoKSBjb25zdDsKLSAgICBJRDJEMVN0cm9rZVN0eWxlKiBzdHJva2VT
dHlsZSgpOwotICAgIEQyRDFfU1RST0tFX1NUWUxFX1BST1BFUlRJRVMgc3Ryb2tlU3R5bGVQcm9w
ZXJ0aWVzKCkgY29uc3Q7Ci0gICAgSUQyRDFTdHJva2VTdHlsZSogcGxhdGZvcm1TdHJva2VTdHls
ZSgpIGNvbnN0OwotCi0gICAgQ09NUHRyPElEMkQxU29saWRDb2xvckJydXNoPiBicnVzaFdpdGhD
b2xvcihjb25zdCBEMkQxX0NPTE9SX0YmKTsKLQotICAgIHZvaWQgc2F2ZSgpOwotICAgIHZvaWQg
cmVzdG9yZSgpOwotCi0gICAgYm9vbCBoYXNTYXZlZFN0YXRlKCkgY29uc3QgeyByZXR1cm4gIW1f
c3RhdGVTdGFjay5pc0VtcHR5KCk7IH0KLQotICAgIHZvaWQgYmVnaW5EcmF3KCk7Ci0gICAgdm9p
ZCBlbmREcmF3KCk7Ci0KLSAgICBlbnVtIERpcmVjdDJETGF5ZXJUeXBlIHsgQXhpc0FsaWduZWRD
bGlwLCBMYXllckNsaXAgfTsKLSAgICB2b2lkIHB1c2hSZW5kZXJDbGlwKERpcmVjdDJETGF5ZXJU
eXBlKTsKLSAgICB2b2lkIHNldEFjdGl2ZUxheWVyKENPTVB0cjxJRDJEMUxheWVyPiYmKTsKLQot
ICAgIHZvaWQgcmVjb21wdXRlU3Ryb2tlU3R5bGUoKTsKLSAgICBmbG9hdCBzdHJva2VUaGlja25l
c3MoKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZVRoaWNrbmVzczsgfQotCi0gICAgc3RydWN0IFRy
YW5zcGFyZW5jeUxheWVyU3RhdGUgewotICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJU
YXJnZXQ+IHJlbmRlclRhcmdldDsKLSAgICAgICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgICAg
IEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgICAgIGZsb2F0IG9wYWNpdHkgeyAxLjAgfTsK
LSAgICAgICAgZmxvYXQgc2hhZG93Qmx1ciB7IDAgfTsKLSAgICAgICAgYm9vbCBoYXNTaGFkb3cg
eyBmYWxzZSB9OwotICAgIH07Ci0gICAgVmVjdG9yPFRyYW5zcGFyZW5jeUxheWVyU3RhdGU+IG1f
dHJhbnNwYXJlbmN5TGF5ZXJTdGFjazsKLQotICAgIHZvaWQgc2V0TGluZUNhcChEMkQxX0NBUF9T
VFlMRSk7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihEMkQxX0xJTkVfSk9JTik7Ci0gICAgdm9pZCBz
ZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSk7Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0
KTsKLSAgICB2b2lkIHNldERhc2hPZmZzZXQoZmxvYXQpOwotICAgIHZvaWQgc2V0UGF0dGVybldp
ZHRoKGZsb2F0KTsKLSAgICB2b2lkIHNldFBhdHRlcm5PZmZzZXQoZmxvYXQpOwotICAgIHZvaWQg
c2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KTsKLSAgICB2b2lkIHNldERhc2hlcyhjb25zdCBEYXNo
QXJyYXkmKTsKLQotICAgIHZvaWQgc2V0QmxlbmRBbmRDb21wb3NpdGVNb2RlKEQyRDFfQkxFTkRf
TU9ERSwgRDJEMV9DT01QT1NJVEVfTU9ERSk7Ci0KLSAgICB2b2lkIHNldFRhZ3MoRDJEMV9UQUcg
dGFnMSwgRDJEMV9UQUcgdGFnMik7Ci0gICAgdm9pZCBub3RpZnlQcmVEcmF3T2JzZXJ2ZXIoKTsK
LSAgICB2b2lkIG5vdGlmeVBvc3REcmF3T2JzZXJ2ZXIoKTsKLQotICAgIHZvaWQgcHVzaENsaXAo
RGlyZWN0MkRMYXllclR5cGUpOwotCi1wcml2YXRlOgotICAgIHZvaWQgY2xlYXJDbGlwcyhWZWN0
b3I8RGlyZWN0MkRMYXllclR5cGU+Jik7Ci0gICAgdm9pZCBjb21wb3NpdGVJZk5lZWRlZCgpOwot
Ci0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2dyYXBoaWNzQ29udGV4dFBy
aXZhdGUgeyBudWxscHRyIH07Ci0KLSAgICBDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IG1fcmVu
ZGVyVGFyZ2V0OwotICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IG1fZGV2aWNlQ29udGV4
dDsKLSAgICBDT01QdHI8SUQyRDFTdHJva2VTdHlsZT4gbV9kMmRTdHJva2VTdHlsZTsKLQotICAg
IEhhc2hNYXA8dWludDMyX3QsIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4+IG1fc29saWRD
b2xvcmVkQnJ1c2hDYWNoZTsKLSAgICBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IG1fd2hp
dGVCcnVzaDsKLSAgICBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IG1femVyb0JydXNoOwot
ICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gbV9zb2xpZFN0cm9rZUJydXNoOwotICAg
IENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gbV9zb2xpZEZpbGxCcnVzaDsKLSAgICBDT01Q
dHI8SUQyRDFCaXRtYXBCcnVzaD4gbV9wYXR0ZXJuU3Ryb2tlQnJ1c2g7Ci0gICAgQ09NUHRyPElE
MkQxQml0bWFwQnJ1c2g+IG1fcGF0dGVybkZpbGxCcnVzaDsKLQotICAgIENPTVB0cjxJRDNEMTFE
ZXZpY2UxPiBtX2QzZERldmljZTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gbV9jb21wb3Np
dGVTb3VyY2U7Ci0KLSAgICBGdW5jdGlvbjx2b2lkKCk+IG1fcHJlRHJhd0hhbmRsZXI7Ci0gICAg
RnVuY3Rpb248dm9pZCgpPiBtX3Bvc3REcmF3SGFuZGxlcjsKLQotICAgIGNsYXNzIFN0YXRlOwot
ICAgIFN0YXRlKiBtX3N0YXRlIHsgbnVsbHB0ciB9OwotICAgIFZlY3RvcjxTdGF0ZT4gbV9zdGF0
ZVN0YWNrOwotCi0gICAgRDJEMV9DQVBfU1RZTEUgbV9saW5lQ2FwIHsgRDJEMV9DQVBfU1RZTEVf
RkxBVCB9OwotICAgIEQyRDFfTElORV9KT0lOIG1fbGluZUpvaW4geyBEMkQxX0xJTkVfSk9JTl9N
SVRFUiB9OwotICAgIFN0cm9rZVN0eWxlIG1fc3Ryb2tlU3R5bGUgeyBTb2xpZFN0cm9rZSB9Owot
ICAgIERhc2hBcnJheSBtX2Rhc2hlczsKLQotICAgIHVuc2lnbmVkIGJlZ2luRHJhd0NvdW50IHsg
MCB9OwotCi0gICAgZmxvYXQgbV9taXRlckxpbWl0IHsgMTAuMGYgfTsKLSAgICBmbG9hdCBtX2Rh
c2hPZmZzZXQgeyAwIH07Ci0gICAgZmxvYXQgbV9wYXR0ZXJuV2lkdGggeyAxLjBmIH07Ci0gICAg
ZmxvYXQgbV9wYXR0ZXJuT2Zmc2V0IHsgMCB9OwotICAgIGZsb2F0IG1fc3Ryb2tlVGhpY2tuZXNz
IHsgMCB9OwotICAgIGZsb2F0IG1fYWxwaGEgeyAxLjAgfTsKLQotICAgIGJvb2wgbV9zdHJva2VT
eWxlSXNEaXJ0eSB7IGZhbHNlIH07Ci0KLSAgICBEMkQxX0JMRU5EX01PREUgbV9ibGVuZE1vZGUg
eyBEMkQxX0JMRU5EX01PREVfTVVMVElQTFkgfTsKLSAgICBEMkQxX0NPTVBPU0lURV9NT0RFIG1f
Y29tcG9zaXRlTW9kZSB7IEQyRDFfQ09NUE9TSVRFX01PREVfU09VUkNFX09WRVIgfTsKLQotICAg
IGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKLX07Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dFN0YXRl
U2F2ZXIgewotcHVibGljOgotICAgIFBsYXRmb3JtQ29udGV4dFN0YXRlU2F2ZXIoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmIGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQotICAg
ICAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2
ZUFuZFJlc3RvcmUpCi0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAg
ICAgICAgIG1fY29udGV4dC5zYXZlKCk7Ci0gICAgfQotCi0gICAgflBsYXRmb3JtQ29udGV4dFN0
YXRlU2F2ZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCi0gICAgICAg
ICAgICBtX2NvbnRleHQucmVzdG9yZSgpOwotICAgIH0KLQotICAgIHZvaWQgc2F2ZSgpCi0gICAg
ewotICAgICAgICBBU1NFUlQoIW1fc2F2ZUFuZFJlc3RvcmUpOwotICAgICAgICBtX2NvbnRleHQu
c2F2ZSgpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2
b2lkIHJlc3RvcmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUpOwot
ICAgICAgICBtX2NvbnRleHQucmVzdG9yZSgpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0g
ZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBkaWRTYXZlKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX3NhdmVBbmRSZXN0b3JlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCYgbV9jb250ZXh0OwotICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZSB7
IGZhbHNlIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0Uo
RElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2lt
cGxlRm9udERhdGFEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAy
ODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9u
dERhdGFEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMTggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUg
IkRpcmVjdFdyaXRlVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVk
ZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAi
R2x5cGhQYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFdu
ZERDLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDxjb211dGlsLmg+
Ci0jaW5jbHVkZSA8ZHdyaXRlXzMuaD4KLSNpbmNsdWRlIDxtbGFuZy5oPgotI2luY2x1ZGUgPHVu
aWNvZGUvdWNoYXIuaD4KLSNpbmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+Ci0jaW5jbHVkZSA8d2lu
c29jazIuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGF0aWMgVmVjdG9yPFdDSEFSPiBnZXRGYWNlTmFtZShJRFdyaXRlRm9udCog
Zm9udCkKLXsKLSAgICBpZiAoIWZvbnQpCi0gICAgICAgIHJldHVybiBWZWN0b3I8V0NIQVI+KCk7
Ci0KLSAgICBDT01QdHI8SURXcml0ZUxvY2FsaXplZFN0cmluZ3M+IGxvY2FsaXplZEZhY2VOYW1l
czsKLSAgICBIUkVTVUxUIGhyID0gZm9udC0+R2V0RmFjZU5hbWVzKCZsb2NhbGl6ZWRGYWNlTmFt
ZXMpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgVUlOVDMyIGxv
Y2FsZUluZGV4ID0gMDsKLSAgICBCT09MIGV4aXN0cyA9IGZhbHNlOwotCi0gICAgd2NoYXJfdCBs
b2NhbGVOYW1lW0xPQ0FMRV9OQU1FX01BWF9MRU5HVEhdOwotICAgIGludCBsb2NhbGVMZW5ndGgg
PSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUobG9jYWxlTmFtZSwgTE9DQUxFX05BTUVfTUFYX0xF
TkdUSCk7Ci0gICAgaWYgKGxvY2FsZUxlbmd0aCkKLSAgICAgICAgaHIgPSBsb2NhbGl6ZWRGYWNl
TmFtZXMtPkZpbmRMb2NhbGVOYW1lKGxvY2FsZU5hbWUsICZsb2NhbGVJbmRleCwgJmV4aXN0cyk7
Ci0KLSAgICBpZiAoIWV4aXN0cyB8fCAhU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgaHIgPSBsb2Nh
bGl6ZWRGYWNlTmFtZXMtPkZpbmRMb2NhbGVOYW1lKEwiZW4tdXMiLCAmbG9jYWxlSW5kZXgsICZl
eGlzdHMpOwotCi0gICAgaWYgKCFleGlzdHMgfHwgIVNVQ0NFRURFRChocikpCi0gICAgICAgIGxv
Y2FsZUluZGV4ID0gMDsKLQotICAgIFVJTlQzMiBmYWNlTmFtZUxlbmd0aCA9IDA7Ci0gICAgaHIg
PSBsb2NhbGl6ZWRGYWNlTmFtZXMtPkdldFN0cmluZ0xlbmd0aChsb2NhbGVJbmRleCwgJmZhY2VO
YW1lTGVuZ3RoKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBWZWN0
b3I8V0NIQVI+KCk7Ci0KLSAgICBWZWN0b3I8V0NIQVI+IGZhY2VOYW1lKGZhY2VOYW1lTGVuZ3Ro
ICsgMSk7Ci0gICAgaHIgPSBsb2NhbGl6ZWRGYWNlTmFtZXMtPkdldFN0cmluZyhsb2NhbGVJbmRl
eCwgZmFjZU5hbWUuZGF0YSgpLCBmYWNlTmFtZS5zaXplKCkpOwotCi0gICAgcmV0dXJuIGZhY2VO
YW1lOwotfQotCi12b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCi17Ci0gICAgbV9zeW50aGV0aWNC
b2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpID8gMS4wZiA6IDAuZjsK
LSAgICBtX3NjcmlwdENhY2hlID0gMDsKLSAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzID0gMDsK
LQotICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKLSAgICAgICAgcmV0dXJuIGluaXRH
RElGb250KCk7Ci0KLSAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7
Ci0KLSAgICBhdXRvIGZvbnQgPSBtX3BsYXRmb3JtRGF0YS5kd0ZvbnQoKTsKLSAgICBSRUxFQVNF
X0FTU0VSVChmb250KTsKLQotICAgIGF1dG8gZm9udEZhY2UgPSBtX3BsYXRmb3JtRGF0YS5kd0Zv
bnRGYWNlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZm9udEZhY2UpOwotCi0gICAgRFdSSVRFX0ZP
TlRfTUVUUklDUyBmb250TWV0cmljczsKLSAgICBmb250LT5HZXRNZXRyaWNzKCZmb250TWV0cmlj
cyk7Ci0KLSAgICBpbnQgaUFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2VudDsKLSAgICBpbnQgaURl
c2NlbnQgPSBmb250TWV0cmljcy5kZXNjZW50OwotICAgIGludCBpTGluZUdhcCA9IGZvbnRNZXRy
aWNzLmxpbmVHYXA7Ci0gICAgaW50IGlDYXBIZWlnaHQgPSBmb250TWV0cmljcy5jYXBIZWlnaHQ7
Ci0KLSAgICB1bnNpZ25lZCB1bml0c1BlckVtID0gZm9udE1ldHJpY3MuZGVzaWduVW5pdHNQZXJF
bTsKLSAgICBmbG9hdCBmQXNjZW50ID0gc2NhbGVFbVRvVW5pdHMoaUFzY2VudCwgdW5pdHNQZXJF
bSkgKiBwb2ludFNpemU7Ci0gICAgZmxvYXQgZkRlc2NlbnQgPSBzY2FsZUVtVG9Vbml0cyhpRGVz
Y2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgZmxvYXQgZkNhcEhlaWdodCA9IHNj
YWxlRW1Ub1VuaXRzKGlDYXBIZWlnaHQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgIGZs
b2F0IGZMaW5lR2FwID0gc2NhbGVFbVRvVW5pdHMoaUxpbmVHYXAsIHVuaXRzUGVyRW0pICogcG9p
bnRTaXplOwotCi0gICAgaWYgKG9yaWdpbigpID09IE9yaWdpbjo6TG9jYWwpIHsKLSAgICAgICAg
VmVjdG9yPFdDSEFSPiBmYWNlTmFtZSA9IGdldEZhY2VOYW1lKGZvbnQpOwotICAgICAgICBmQXNj
ZW50ID0gYXNjZW50Q29uc2lkZXJpbmdNYWNBc2NlbnRIYWNrKGZhY2VOYW1lLmRhdGEoKSwgZkFz
Y2VudCwgZkRlc2NlbnQpOwotICAgIH0KLQotICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KGZB
c2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChmRGVzY2VudCk7Ci0gICAgbV9m
b250TWV0cmljcy5zZXRDYXBIZWlnaHQoZkNhcEhlaWdodCk7Ci0gICAgbV9mb250TWV0cmljcy5z
ZXRMaW5lR2FwKGZMaW5lR2FwKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxy
b3VuZGYoZkFzY2VudCkgKyBscm91bmRmKGZEZXNjZW50KSArIGxyb3VuZGYoZkxpbmVHYXApKTsK
LQotICAgIEdseXBoIHhHbHlwaCA9IGdseXBoRGF0YUZvckNoYXJhY3RlcigneCcpLmdseXBoOwot
Ci0gICAgaWYgKHhHbHlwaCkgewotICAgICAgICAvLyBNZWFzdXJlIHRoZSBhY3R1YWwgY2hhcmFj
dGVyICJ4Iiwgc2luY2UgaXQncyBwb3NzaWJsZSBmb3IgaXQgdG8gZXh0ZW5kIGJlbG93IHRoZSBi
YXNlbGluZSwgYW5kIHdlIG5lZWQgdGhlCi0gICAgICAgIC8vIHJlcG9ydGVkIHgtaGVpZ2h0IHRv
IG9ubHkgaW5jbHVkZSB0aGUgcG9ydGlvbiBvZiB0aGUgZ2x5cGggdGhhdCBpcyBhYm92ZSB0aGUg
YmFzZWxpbmUuCi0gICAgICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfTUVUUklDUz4gZ2x5cGhNZXRy
aWNzKDEpOwotICAgICAgICBIUkVTVUxUIGhyID0gZm9udEZhY2UtPkdldERlc2lnbkdseXBoTWV0
cmljcygmeEdseXBoLCAxLCBnbHlwaE1ldHJpY3MuZGF0YSgpLCBtX3BsYXRmb3JtRGF0YS5vcmll
bnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpOwotICAgICAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0
KHNjYWxlRW1Ub1VuaXRzKGdseXBoTWV0cmljcy5maXJzdCgpLnZlcnRpY2FsT3JpZ2luWSwgdW5p
dHNQZXJFbSkgKiBwb2ludFNpemUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBpWEhlaWdo
dCA9IGZvbnRNZXRyaWNzLnhIZWlnaHQ7Ci0gICAgICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdo
dChzY2FsZUVtVG9Vbml0cyhpWEhlaWdodCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOwotICAg
IH0KLQotICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKLX0KLQot
RmxvYXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5zaXplKCkpCi0gICAgICAgIHJldHVybiBGbG9h
dFJlY3QoKTsKLQotICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKLSAgICAgICAgcmV0
dXJuIGJvdW5kc0ZvckdESUdseXBoKGdseXBoKTsKLQotICAgIGF1dG8gZm9udCA9IG1fcGxhdGZv
cm1EYXRhLmR3Rm9udCgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGZvbnQpOwotCi0gICAgYXV0byBm
b250RmFjZSA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKTsKLSAgICBSRUxFQVNFX0FTU0VS
VChmb250RmFjZSk7Ci0KLSAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXpl
KCk7Ci0gICAgYm9vbCB2ZXJ0aWNhbCA9IG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0g
Rm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbDsKLQotICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfTUVU
UklDUz4gZ2x5cGhNZXRyaWNzKDEpOwotICAgIEhSRVNVTFQgaHIgPSBmb250RmFjZS0+R2V0RGVz
aWduR2x5cGhNZXRyaWNzKCZnbHlwaCwgMSwgZ2x5cGhNZXRyaWNzLmRhdGEoKSwgbV9wbGF0Zm9y
bURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKTsKLSAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGNvbnN0IGF1dG8mIG1ldHJpY3Mg
PSBnbHlwaE1ldHJpY3MuZmlyc3QoKTsKLQotICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0gPSBtX2Zv
bnRNZXRyaWNzLnVuaXRzUGVyRW0oKTsKLQotICAgIEZsb2F0UG9pbnQgb3JpZ2luKHNjYWxlRW1U
b1VuaXRzKG1ldHJpY3MubGVmdFNpZGVCZWFyaW5nLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSwg
c2NhbGVFbVRvVW5pdHMobWV0cmljcy52ZXJ0aWNhbE9yaWdpblksIHVuaXRzUGVyRW0pICogcG9p
bnRTaXplKTsKLSAgICBGbG9hdFNpemUgc2l6ZShzY2FsZUVtVG9Vbml0cyhtZXRyaWNzLmFkdmFu
Y2VXaWR0aCAtIG1ldHJpY3MubGVmdFNpZGVCZWFyaW5nIC0gbWV0cmljcy5yaWdodFNpZGVCZWFy
aW5nLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSwKLSAgICAgICAgc2NhbGVFbVRvVW5pdHMobWV0
cmljcy5hZHZhbmNlSGVpZ2h0IC0gbWV0cmljcy50b3BTaWRlQmVhcmluZyAtIG1ldHJpY3MuYm90
dG9tU2lkZUJlYXJpbmcsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplKTsKLQotICAgIEZsb2F0UmVj
dCBib3VuZGluZ0JveChvcmlnaW4sIHNpemUpOwotICAgIGlmIChtX3N5bnRoZXRpY0JvbGRPZmZz
ZXQpCi0gICAgICAgIGJvdW5kaW5nQm94LnNldFdpZHRoKGJvdW5kaW5nQm94LndpZHRoKCkgKyBt
X3N5bnRoZXRpY0JvbGRPZmZzZXQpOwotCi0gICAgcmV0dXJuIGJvdW5kaW5nQm94OwotfQotCi1m
bG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5zaXplKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
aWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKQotICAgICAgICByZXR1cm4gd2lkdGhGb3JHRElH
bHlwaChnbHlwaCk7Ci0KLSAgICBhdXRvIGZvbnQgPSBtX3BsYXRmb3JtRGF0YS5kd0ZvbnQoKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChmb250KTsKLQotICAgIGF1dG8gZm9udEZhY2UgPSBtX3BsYXRm
b3JtRGF0YS5kd0ZvbnRGYWNlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZm9udEZhY2UpOwotCi0g
ICAgYm9vbCBpc1ZlcnRpY2FsID0gbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250
T3JpZW50YXRpb246OlZlcnRpY2FsOwotCi0gICAgVmVjdG9yPERXUklURV9HTFlQSF9NRVRSSUNT
PiBnbHlwaE1ldHJpY3MoMSk7Ci0gICAgSFJFU1VMVCBociA9IGZvbnRGYWNlLT5HZXREZXNpZ25H
bHlwaE1ldHJpY3MoJmdseXBoLCAxLCBnbHlwaE1ldHJpY3MuZGF0YSgpLCBpc1ZlcnRpY2FsKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGNvbnN0IGF1dG8mIG1l
dHJpY3MgPSBnbHlwaE1ldHJpY3MuZmlyc3QoKTsKLSAgICBpbnQgd2lkdGhJbkVtID0gbWV0cmlj
cy5hZHZhbmNlV2lkdGg7Ci0KLSAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5z
aXplKCk7Ci0gICAgdW5zaWduZWQgdW5pdHNQZXJFbSA9IG1fZm9udE1ldHJpY3MudW5pdHNQZXJF
bSgpOwotICAgIGZsb2F0IHdpZHRoID0gc2NhbGVFbVRvVW5pdHMod2lkdGhJbkVtLCB1bml0c1Bl
ckVtKSAqIHBvaW50U2l6ZTsKLQotICAgIHJldHVybiB3aWR0aCArIG1fc3ludGhldGljQm9sZE9m
ZnNldDsKLX0KLQotUGF0aCBGb250OjpwbGF0Zm9ybVBhdGhGb3JHbHlwaChHbHlwaCkgY29uc3QK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBQYXRoKCk7Ci19Ci0KLX0KLQot
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFu
YWx5emVySGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhlbHBlci5j
cHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlRleHRBbmFseXplckhlbHBlci5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVRleHRBbmFseXplckhlbHBlcjo6VGV4dEFuYWx5emVySGVscGVyKGNvbnN0
IFdDSEFSKiBsb2NhbGVOYW1lLCBjb25zdCBXQ0hBUiogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJM
ZW5ndGgpCi0gICAgOiBtX2xvY2FsZU5hbWUobG9jYWxlTmFtZSkKLSAgICAsIG1fYnVmZmVyKGJ1
ZmZlcikKLSAgICAsIG1fYnVmZmVyTGVuZ3RoKGJ1ZmZlckxlbmd0aCkKLXsKLX0KLQotSFJFU1VM
VCBUZXh0QW5hbHl6ZXJIZWxwZXI6OlF1ZXJ5SW50ZXJmYWNlKF9Jbl8gUkVGSUlEIHJpaWQsIF9D
T01fT3V0cHRyXyB2b2lkKiogcHB2T2JqZWN0KQotewotICAgIGlmICghcHB2T2JqZWN0KQotICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOwotICAgICpwcHZPYmplY3QgPSBudWxscHRyOwotICAgIGlm
IChJc0VxdWFsR1VJRChyaWlkLCBfX3V1aWRvZihJRFdyaXRlVGV4dEFuYWx5c2lzU2luaykpKQot
ICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SURXcml0ZVRleHRBbmFseXNpc1Npbmsq
Pih0aGlzKTsKLSAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlkLCBfX3V1aWRvZihJRFdyaXRl
VGV4dEFuYWx5c2lzU291cmNlKSkpCi0gICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJ
RFdyaXRlVGV4dEFuYWx5c2lzU2luayo+KHRoaXMpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJu
IEVfRkFJTDsKLQotICAgIEFkZFJlZigpOwotICAgIHJldHVybiBTX09LOwotfQotCi1VTE9ORyBU
ZXh0QW5hbHl6ZXJIZWxwZXI6OkFkZFJlZigpCi17Ci0gICAgcmV0dXJuICsrbV9yZWZDb3VudDsK
LX0KLQotVUxPTkcgVGV4dEFuYWx5emVySGVscGVyOjpSZWxlYXNlKCkKLXsKLSAgICBVTE9ORyBu
ZXdSZWYgPSAtLW1fcmVmQ291bnQ7Ci0gICAgaWYgKCFuZXdSZWYpCi0gICAgICAgIGRlbGV0ZSh0
aGlzKTsKLQotICAgIHJldHVybiBuZXdSZWY7Ci19Ci0KLUhSRVNVTFQgVGV4dEFuYWx5emVySGVs
cGVyOjpHZXRUZXh0QXRQb3NpdGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBjb25zdCBXQ0hBUioq
IHRleHRTdHJpbmcsIFVJTlQzMiogdGV4dExlbmd0aCkKLXsKLSAgICBpZiAoIXRleHRTdHJpbmcg
fHwgIXRleHRMZW5ndGgpCi0gICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0KLSAgICBpZiAodGV4
dFBvc2l0aW9uID49IG1fYnVmZmVyTGVuZ3RoKSB7Ci0gICAgICAgICp0ZXh0U3RyaW5nID0gbnVs
bHB0cjsKLSAgICAgICAgKnRleHRMZW5ndGggPSAwOwotICAgICAgICByZXR1cm4gU19PSzsKLSAg
ICB9Ci0KLSAgICAqdGV4dFN0cmluZyA9ICZtX2J1ZmZlclt0ZXh0UG9zaXRpb25dOwotICAgICp0
ZXh0TGVuZ3RoID0gbV9idWZmZXJMZW5ndGggLSB0ZXh0UG9zaXRpb247Ci0KLSAgICByZXR1cm4g
U19PSzsKLX0KLQotSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6OkdldFRleHRCZWZvcmVQb3Np
dGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBjb25zdCBXQ0hBUioqIHRleHRTdHJpbmcsIFVJTlQz
MiogdGV4dExlbmd0aCkKLXsKLSAgICBpZiAoIXRleHRTdHJpbmcgfHwgIXRleHRMZW5ndGgpCi0g
ICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0KLSAgICBpZiAoIXRleHRQb3NpdGlvbiB8fCB0ZXh0
UG9zaXRpb24gPiBtX2J1ZmZlckxlbmd0aCkgewotICAgICAgICAqdGV4dFN0cmluZyA9IG51bGxw
dHI7Ci0gICAgICAgICp0ZXh0TGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuIFNfT0s7Ci0gICAg
fQotCi0gICAgKnRleHRTdHJpbmcgPSAmbV9idWZmZXJbMF07Ci0gICAgKnRleHRMZW5ndGggPSB0
ZXh0UG9zaXRpb247Ci0KLSAgICByZXR1cm4gU19PSzsKLX0KLQotSFJFU1VMVCBUZXh0QW5hbHl6
ZXJIZWxwZXI6OkdldExvY2FsZU5hbWUoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyKiB0ZXh0
TGVuZ3RoLCBjb25zdCBXQ0hBUioqIGxvY2FsZU5hbWUpCi17Ci0gICAgKmxvY2FsZU5hbWUgPSBt
X2xvY2FsZU5hbWU7Ci0gICAgKnRleHRMZW5ndGggPSBtX2J1ZmZlckxlbmd0aCAtIHRleHRQb3Np
dGlvbjsKLQotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFRleHRBbmFseXplckhlbHBl
cjo6R2V0TnVtYmVyU3Vic3RpdHV0aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiogdGV4
dExlbmd0aCwgSURXcml0ZU51bWJlclN1YnN0aXR1dGlvbioqIG51bWJlclN1YnN0aXR1dGlvbikK
LXsKLSAgICAqdGV4dExlbmd0aCA9IG1fYnVmZmVyTGVuZ3RoIC0gdGV4dFBvc2l0aW9uOwotICAg
IHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6U2V0TGluZUJy
ZWFrcG9pbnRzKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBjb25zdCBE
V1JJVEVfTElORV9CUkVBS1BPSU5UKikKLXsKLSAgICByZXR1cm4gRV9OT1RJTVBMOwotfQotCi1I
UkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6U2V0U2NyaXB0QW5hbHlzaXMoVUlOVDMyIHRleHRQ
b3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIGNvbnN0IERXUklURV9TQ1JJUFRfQU5BTFlTSVMq
IGFuYWx5c2lzKQotewotICAgIEFuYWx5emVkUnVuIGN1cnJlbnQgPSB7IHRleHRQb3NpdGlvbiwg
dGV4dExlbmd0aCwgKmFuYWx5c2lzIH07Ci0gICAgbV9hbmFseXplZFJ1bnMuYXBwZW5kKFdURk1v
dmUoY3VycmVudCkpOwotCi0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgVGV4dEFuYWx5
emVySGVscGVyOjpTZXRCaWRpTGV2ZWwoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRM
ZW5ndGgsIFVJTlQ4IGV4cGxpY2l0TGV2ZWwsIFVJTlQ4IHJlc29sdmVkTGV2ZWwpCi17Ci0gICAg
cmV0dXJuIEVfTk9USU1QTDsKLX0KLQotSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6OlNldE51
bWJlclN1YnN0aXR1dGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwg
SURXcml0ZU51bWJlclN1YnN0aXR1dGlvbiopCi17Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0K
LQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9UZXh0QW5hbHl6ZXJIZWxwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmgJKHJldmlzaW9uIDI4NzgwMykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxw
ZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8ZHdy
aXRlLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LXN0cnVjdCBBbmFseXplZFJ1biB7Ci0gICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiB7IDAgfTsK
LSAgICB1bnNpZ25lZCBsZW5ndGggeyAwIH07Ci0gICAgRFdSSVRFX1NDUklQVF9BTkFMWVNJUyBh
bmFseXNpczsKLX07Ci0KLXN0cnVjdCBUZXh0QW5hbHl6ZXJIZWxwZXIgOiBwdWJsaWMgSURXcml0
ZVRleHRBbmFseXNpc1NpbmssIElEV3JpdGVUZXh0QW5hbHlzaXNTb3VyY2UgewotICAgIFRleHRB
bmFseXplckhlbHBlcihjb25zdCBXQ0hBUiogbG9jYWxlTmFtZSwgY29uc3QgV0NIQVIqIGJ1ZmZl
ciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKTsKLQotICAgIC8vIElVbmtub3duCi0gICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKF9Jbl8gUkVGSUlELCBf
Q09NX091dHB0cl8gdm9pZCoqKTsKLSAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBF
IEFkZFJlZigpOwotICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgUmVsZWFzZSgp
OwotCi0gICAgLy8gSURXcml0ZVRleHRBbmFseXNpc1NvdXJjZSAKLSAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0VGV4dEF0UG9zaXRpb24oVUlOVDMyIHRleHRQb3NpdGlv
biwgY29uc3QgV0NIQVIqKiB0ZXh0U3RyaW5nLCBVSU5UMzIqIHRleHRMZW5ndGgpOwotICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRUZXh0QmVmb3JlUG9zaXRpb24oVUlO
VDMyIHRleHRQb3NpdGlvbiwgY29uc3QgV0NIQVIqKiB0ZXh0U3RyaW5nLCBVSU5UMzIqIHRleHRM
ZW5ndGgpOwotICAgIHZpcnR1YWwgRFdSSVRFX1JFQURJTkdfRElSRUNUSU9OIFNURE1FVEhPRENB
TExUWVBFIEdldFBhcmFncmFwaFJlYWRpbmdEaXJlY3Rpb24oKSB7IHJldHVybiBEV1JJVEVfUkVB
RElOR19ESVJFQ1RJT05fTEVGVF9UT19SSUdIVDsgfQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBHZXRMb2NhbGVOYW1lKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiog
dGV4dExlbmd0aCwgY29uc3QgV0NIQVIqKiBsb2NhbGVOYW1lKTsKLSAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0TnVtYmVyU3Vic3RpdHV0aW9uKFVJTlQzMiB0ZXh0UG9z
aXRpb24sIFVJTlQzMiogdGV4dExlbmd0aCwgSURXcml0ZU51bWJlclN1YnN0aXR1dGlvbioqKTsK
LQotICAgIC8vIElEV3JpdGVUZXh0QW5hbHlzaXNTaW5rCi0gICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFNldExpbmVCcmVha3BvaW50cyhVSU5UMzIgdGV4dFBvc2l0aW9uLCBV
SU5UMzIgdGV4dExlbmd0aCwgY29uc3QgRFdSSVRFX0xJTkVfQlJFQUtQT0lOVCopOwotICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXRTY3JpcHRBbmFseXNpcyhVSU5UMzIg
dGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgY29uc3QgRFdSSVRFX1NDUklQVF9BTkFM
WVNJUyopOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXRCaWRpTGV2
ZWwoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIFVJTlQ4IGV4cGxpY2l0
TGV2ZWwsIFVJTlQ4IHJlc29sdmVkTGV2ZWwpOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBTZXROdW1iZXJTdWJzdGl0dXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlO
VDMyIHRleHRMZW5ndGgsIElEV3JpdGVOdW1iZXJTdWJzdGl0dXRpb24qKTsKLQotICAgIGNvbnN0
IFdDSEFSKiBtX2xvY2FsZU5hbWUgeyBudWxscHRyIH07Ci0gICAgY29uc3QgV0NIQVIqIG1fYnVm
ZmVyIHsgbnVsbHB0ciB9OwotICAgIHVuc2lnbmVkIG1fYnVmZmVyTGVuZ3RoIHsgMCB9OwotICAg
IFZlY3RvcjxBbmFseXplZFJ1bj4gbV9hbmFseXplZFJ1bnM7Ci0gICAgVUxPTkcgbV9yZWZDb3Vu
dCB7IDAgfTsKLX07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhEaXJl
Y3QyRC5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQp
CkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNiBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCi0KLSNpZiBQTEFURk9STShXSU4pCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLQotI2luY2x1ZGUgPGQyZDEu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeDo6VHJhbnNm
b3JtYXRpb25NYXRyaXgoY29uc3QgRDJEMV9NQVRSSVhfM1gyX0YmIHQpCi17Ci0gICAgc2V0QSh0
Ll8xMSk7Ci0gICAgc2V0Qih0Ll8xMik7Ci0gICAgc2V0Qyh0Ll8yMSk7Ci0gICAgc2V0RCh0Ll8y
Mik7Ci0gICAgc2V0RSh0Ll8zMSk7Ci0gICAgc2V0Rih0Ll8zMik7Ci19Ci0KLVRyYW5zZm9ybWF0
aW9uTWF0cml4OjpvcGVyYXRvciBEMkQxX01BVFJJWF8zWDJfRigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIEQyRDE6Ok1hdHJpeDN4MkYobmFycm93UHJlY2lzaW9uVG9GbG9hdChhKCkpLAotICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGIoKSksCi0gICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoYygpKSwKLSAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChkKCkpLAotICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGUoKSksCi0gICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoZigpKSk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybTo6QWZmaW5lVHJhbnNmb3JtKGNvbnN0
IEQyRDFfTUFUUklYXzNYMl9GJiB0KQotewotICAgIHNldE1hdHJpeCh0Ll8xMSwgdC5fMTIsIHQu
XzIxLCB0Ll8yMiwgdC5fMzEsIHQuXzMyKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRv
ciBEMkQxX01BVFJJWF8zWDJfRigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEQyRDE6Ok1hdHJpeDN4
MkYobmFycm93UHJlY2lzaW9uVG9GbG9hdChhKCkpLAotICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGIoKSksCi0gICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoYygpKSwKLSAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChkKCkpLAotICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGUoKSksCi0gICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZigpKSk7Ci19Ci0K
LX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdl
RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9E
cmFnSW1hZ2VEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwx
MDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRyYWdJbWFnZS5oIgotCi0jaWYgVVNF
KERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQml0bWFwSW5mby5oIgotI2luY2x1ZGUgIkNhY2hlZElt
YWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFduZERDLmgi
Ci0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1
ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0KLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5j
bHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3
dGYvd2luL0dESU9iamVjdC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgZGVhbGxv
Y0NvbnRleHQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4dCkKLXsKLSAg
ICBpZiAocGxhdGZvcm1Db250ZXh0KSB7Ci0gICAgICAgIGlmIChhdXRvKiByZW5kZXJUYXJnZXQg
PSBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpKQotICAgICAgICAgICAgcmVuZGVyVGFy
Z2V0LT5SZWxlYXNlKCk7Ci0gICAgfQotfQotCi1HRElPYmplY3Q8SEJJVE1BUD4gYWxsb2NJbWFn
ZShIREMgZGMsIEludFNpemUgc2l6ZSwgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqKiBwbGF0Zm9y
bUNvbnRleHQpCi17Ci0gICAgQml0bWFwSW5mbyBibXBJbmZvID0gQml0bWFwSW5mbzo6Y3JlYXRl
KHNpemUpOwotCi0gICAgTFBWT0lEIGJpdHMgPSBudWxscHRyOwotICAgIGF1dG8gaGJtcCA9IGFk
b3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlvbihkYywgJmJtcEluZm8sIERJQl9SR0JfQ09M
T1JTLCAmYml0cywgMCwgMCkpOwotCi0gICAgaWYgKCFwbGF0Zm9ybUNvbnRleHQgfHwgIWhibXAp
Ci0gICAgICAgIHJldHVybiBoYm1wOwotCi0gICAgLy8gRklYTUU6IFVzZSBHREkgSW50ZXJvcCBs
YXllciB0byBjcmVhdGUgSEJJVE1BUCBmcm9tIEQyRCBCaXRtYXAKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBoYm1wOwotfQotCi1EcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2Uo
RHJhZ0ltYWdlUmVmIGltYWdlUmVmLCBGbG9hdFNpemUgc2NhbGUpCi17Ci0gICAgLy8gRklYTUU6
IGR1ZSB0byB0aGUgd2F5IGRyYWcgaW1hZ2VzIGFyZSBkb25lIG9uIHdpbmRvd3Mgd2UgbmVlZCAK
LSAgICAvLyB0byBwcmVwcm9jZXNzIHRoZSBhbHBoYSBjaGFubmVsIDxyZGFyOi8vcHJvYmxlbS81
MDE1OTQ2PgotICAgIGlmICghaW1hZ2VSZWYpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgR0RJT2JqZWN0PEhCSVRNQVA+IGhibXA7Ci0gICAgYXV0byBpbWFnZSA9IGFkb3B0R0RJT2Jq
ZWN0KGltYWdlUmVmKTsKLQotICAgIEludFNpemUgc3JjU2l6ZSA9IGRyYWdJbWFnZVNpemUoaW1h
Z2UuZ2V0KCkpOwotICAgIEludFNpemUgZHN0U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNyY1NpemUu
d2lkdGgoKSAqIHNjYWxlLndpZHRoKCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHNyY1NpemUuaGVpZ2h0
KCkgKiBzY2FsZS5oZWlnaHQoKSkpOwotCi0gICAgSFduZERDIGRjKG51bGxwdHIpOwotICAgIGF1
dG8gZHN0REMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyhkYykpOwotICAg
IGlmIChkc3REQykKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLQotICAgIGlmICghaGJtcCkK
LSAgICAgICAgaGJtcC5zd2FwKGltYWdlKTsKLSAgICByZXR1cm4gaGJtcC5sZWFrKCk7Ci19Ci0K
LURyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltZywgSW1hZ2VP
cmllbnRhdGlvbikKLXsKLSAgICBIV25kREMgZGMobnVsbHB0cik7Ci0gICAgYXV0byB3b3JraW5n
REMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyhkYykpOwotICAgIGlmICgh
d29ya2luZ0RDKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0gICAgCi19Ci0KLSNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAJKHJldmlz
aW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMTggKzEyOSwxMyBAQCBHcmFwaGljc0NvbnRl
eHQqIFJlbmRlckxheWVyRmlsdGVyczo6aW5wCiAgICAgcmV0dXJuIG1fc291cmNlSW1hZ2UgPyAm
bV9zb3VyY2VJbWFnZS0+Y29udGV4dCgpIDogbnVsbHB0cjsKIH0KIAotdm9pZCBSZW5kZXJMYXll
ckZpbHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250
ZXh0JiB0YXJnZXRDb250ZXh0KQordm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFj
a2luZ1N0b3JlSWZOZWVkZWQoKQogewogICAgIGF1dG8mIGZpbHRlciA9ICptX2ZpbHRlcjsKICAg
ICBhdXRvIGxvZ2ljYWxTaXplID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUobV9maWx0ZXJS
ZWdpb24uc2l6ZSgpKTsKIAogICAgIGlmICghbV9zb3VyY2VJbWFnZSB8fCBtX3NvdXJjZUltYWdl
LT5sb2dpY2FsU2l6ZSgpICE9IGxvZ2ljYWxTaXplKSB7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAg
ICAgICBtX3NvdXJjZUltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgZmls
dGVyLnJlbmRlcmluZ01vZGUoKSwgJnRhcmdldENvbnRleHQsIDEsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VE
X1BBUkFNKHRhcmdldENvbnRleHQpOwogICAgICAgICBtX3NvdXJjZUltYWdlID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgU2hvdWxkVXNl
RGlzcGxheUxpc3Q6Ok5vLCBSZW5kZXJpbmdQdXJwb3NlOjpET00sIDEsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgsIG1fbGF5ZXIucmVuZGVyZXIoKS5o
b3N0V2luZG93KCkpOwotI2VuZGlmCiAgICAgICAgIGlmIChhdXRvIGNvbnRleHQgPSBpbnB1dENv
bnRleHQoKSkKICAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKICAgICB9CkBAIC0yMDAsNyArMTk1LDcgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXll
ckZpbHRlcnM6OmJlZwogICAgIHJlc2V0RGlydHlTb3VyY2VSZWN0KCk7CiAKICAgICBmaWx0ZXIu
c2V0RmlsdGVyUmVnaW9uKG1fZmlsdGVyUmVnaW9uKTsKLSAgICBhbGxvY2F0ZUJhY2tpbmdTdG9y
ZUlmTmVlZGVkKGRlc3RpbmF0aW9uQ29udGV4dCk7CisgICAgYWxsb2NhdGVCYWNraW5nU3RvcmVJ
Zk5lZWRlZCgpOwogCiAgICAgYXV0byogc291cmNlR3JhcGhpY3NDb250ZXh0ID0gaW5wdXRDb250
ZXh0KCk7CiAgICAgaWYgKCFzb3VyY2VHcmFwaGljc0NvbnRleHQpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCShyZXZpc2lvbiAyODc4MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeUZpbmlz
aGVkKENhY2hlZFJlc291cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJikgZmluYWw7CiAg
ICAgdm9pZCByZXNldERpcnR5U291cmNlUmVjdCgpIHsgbV9kaXJ0eVNvdXJjZVJlY3QgPSBMYXlv
dXRSZWN0KCk7IH0KICAgICBHcmFwaGljc0NvbnRleHQqIGlucHV0Q29udGV4dCgpOwotICAgIHZv
aWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIHRh
cmdldENvbnRleHQpOworICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpOwog
CiAgICAgUmVuZGVyTGF5ZXImIG1fbGF5ZXI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCShyZXZp
c2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3IEBAIGJvb2wg
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3UKICNlbHNlCiAgICAgYXV0byBjb2xv
clNwYWNlID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCk7CiAjZW5kaWYKLSAgICBhdXRv
IHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIGNvbG9yU3BhY2Us
IGZpbHRlckRhdGEtPmZpbHRlci0+cmVuZGVyaW5nTW9kZSgpLCByZW5kZXJlci5ob3N0V2luZG93
KCksIGNvbnRleHQpOworICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2
ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgZmlsdGVyRGF0YS0+ZmlsdGVyLT5yZW5kZXJpbmdNb2Rl
KCksIHJlbmRlcmVyLmhvc3RXaW5kb3coKSk7CiAgICAgaWYgKCFzb3VyY2VHcmFwaGljKSB7CiAg
ICAgICAgIEFTU0VSVChtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIp
KTsKICAgICAgICAgZmlsdGVyRGF0YS0+c2F2ZWRDb250ZXh0ID0gY29udGV4dDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXIuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQs
NyArODQsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291CiAjZW5k
aWYKIAogICAgICAgICAvLyBGSVhNRSAoMTQ5NDcwKTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxk
IG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRo
ZSBjb250ZXh0IGJyZWFrcyBhbHBoYSBtYXNraW5nLCB0aG91Z2guCi0gICAgICAgIG1hc2tlckRh
dGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJl
cGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgbWFza0NvbG9yU3BhY2UsIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQsIG51bGxwdHIsIGNvbnRleHQpOworICAgICAgICBtYXNrZXJEYXRh
LT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBh
aW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIG1hc2tDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkLCBudWxscHRyKTsKICAgICAgICAgaWYgKCFtYXNrZXJEYXRhLT5tYXNr
SW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNp
b24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdD
b250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDcgKzIyNiw3IEBAIEFmZmluZVRyYW5z
Zm9ybSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWwKICAgICByZXR1cm4gYWJzb2x1dGVUcmFuc2Zv
cm07CiB9CiAKLVJlZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNv
bG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdywgY29uc3QgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQorUmVmUHRyPEltYWdl
QnVmZmVyPiBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zv
cm0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQogewogICAgIElu
dFJlY3QgcGFpbnRSZWN0ID0gY2FsY3VsYXRlSW1hZ2VCdWZmZXJSZWN0KHRhcmdldFJlY3QsIGFi
c29sdXRlVHJhbnNmb3JtKTsKICAgICAvLyBEb24ndCBjcmVhdGUgZW1wdHkgSW1hZ2VCdWZmZXJz
LgpAQCAtMjM4LDEyICsyMzgsNyBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0Nv
bnRleHQ6CiAgICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhjbGFtcGVkU2l6
ZSwgc2NhbGUpKQogICAgICAgICBjbGFtcGVkU2l6ZSA9IGNsYW1wZWRTaXplICogc2NhbGU7CiAK
LSNpZiBVU0UoRElSRUNUMkQpCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQsIDEsIGNvbG9yU3BhY2Us
IFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsK
ICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwg
cmVuZGVyaW5nTW9kZSwgU2hvdWxkVXNlRGlzcGxheUxpc3Q6Ok5vLCBSZW5kZXJpbmdQdXJwb3Nl
OjpET00sIDEsIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCwgaG9zdFdpbmRvdyk7Ci0j
ZW5kaWYKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApA
QCAtMjU2LDcgKzI1MSw3IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29udGV4
dDoKICAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9CiAKLVJlZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZH
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJn
ZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRSZWN0LCBjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQorUmVmUHRyPEltYWdlQnVmZmVyPiBTVkdSZW5kZXJp
bmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZFJlY3QsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewogICAgIEludFNp
emUgY2xhbXBlZFNpemUgPSByb3VuZGVkSW50U2l6ZShjbGFtcGVkUmVjdC5zaXplKCkpOwogICAg
IEZsb2F0U2l6ZSB1bmNsYW1wZWRTaXplID0gcm91bmRlZEludFNpemUodGFyZ2V0UmVjdC5zaXpl
KCkpOwpAQCAtMjY1LDEyICsyNjAsNyBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmlu
Z0NvbnRleHQ6CiAgICAgaWYgKGNsYW1wZWRTaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQsIDEs
IGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShjb250ZXh0KTsKICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShj
bGFtcGVkU2l6ZSwgcmVuZGVyaW5nTW9kZSwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJH
UkE4KTsKLSNlbmRpZgogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0Nv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDgg
KzYwLDggQEAgcHVibGljOgogICAgIHZvaWQgcHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudChSZW5k
ZXJFbGVtZW50JiwgUGFpbnRJbmZvJiwgTmVlZHNHcmFwaGljc0NvbnRleHRTYXZlID0gRG9udFNh
dmVHcmFwaGljc0NvbnRleHQpOwogICAgIGJvb2wgaXNSZW5kZXJpbmdQcmVwYXJlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVuZGVyaW5nRmxhZ3MgJiBSZW5kZXJpbmdQcmVwYXJlZDsgfQogCi0gICAg
c3RhdGljIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3Jt
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0
V2luZG93KiA9IG51bGxwdHIsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKTsKLSAg
ICBzdGF0aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZFJlY3QsIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCogPSBudWxscHRyKTsKKyAgICBzdGF0aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFJlbmRl
cmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7CisgICAgc3RhdGljIFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRSZWN0LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmLCBSZW5kZXJpbmdNb2RlKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlbmRlclN1YnRyZWVU
b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiwgUmVuZGVyRWxlbWVudCYsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpOwogICAgIHN0YXRpYyB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgUmVmUHRyPEltYWdlQnVmZmVyPiYsIGJvb2wgc2FmZVRvQ2xl
YXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCShyZXZp
c2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NiwxNSArNjYsNiBAQAogI2luY2x1ZGUgIkxvY2FsRGVmYXVs
dFN5c3RlbUFwcGVhcmFuY2UuaCIKICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1
ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNl
bmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR0ltYWdlOjpTVkdJbWFnZShJbWFnZU9i
c2VydmVyJiBvYnNlcnZlcikKQEAgLTIxNywxMiArMjA4LDEyIEBAIEltYWdlRHJhd1Jlc3VsdCBT
VkdJbWFnZTo6ZHJhd0ZvckNvbnRhaW4KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8
TmF0aXZlSW1hZ2U+IFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBH
cmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCitSZWZQdHI8TmF0aXZlSW1hZ2U+IFNWR0lt
YWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCiB7Ci0gICAgcmV0dXJuIG5hdGl2ZUlt
YWdlKHRhcmdldENvbnRleHQpOworICAgIHJldHVybiBuYXRpdmVJbWFnZSgpOwogfQogCi1SZWZQ
dHI8TmF0aXZlSW1hZ2U+IFNWR0ltYWdlOjpuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRl
eHQqKQorUmVmUHRyPE5hdGl2ZUltYWdlPiBTVkdJbWFnZTo6bmF0aXZlSW1hZ2UoKQogewogICAg
IHJldHVybiBuYXRpdmVJbWFnZShzaXplKCksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNpemUo
KSksIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtODYsOCArODYs
OCBAQCBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyB0byBiZSBsZXNzIGNv
bnNlcnZhdGl2ZS4KICAgICBib29sIGN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSBm
aW5hbDsKLSAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCogPSBudWxscHRyKSBmaW5hbDsKKyAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgZmluYWw7CisgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBu
YXRpdmVJbWFnZSgpIGZpbmFsOwogICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2Uo
Y29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlUmVjdCwg
RGVzdGluYXRpb25Db2xvclNwYWNlKTsKIAogICAgIHZvaWQgc3RhcnRBbmltYXRpb25UaW1lckZp
cmVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250
YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZUZvckNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDkgKzU5LDkgQEAgdm9pZCBTVkdJbWFnZUZvckNvbnRhaW5lcjo6ZHJhd1BhdHRlcm4oRwog
ICAgIG1faW1hZ2UtPmRyYXdQYXR0ZXJuRm9yQ29udGFpbmVyKGNvbnRleHQsIG1fY29udGFpbmVy
U2l6ZSwgbV9jb250YWluZXJab29tLCBtX2luaXRpYWxGcmFnbWVudFVSTCwgc3JjUmVjdCwgcGF0
dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIGRzdFJlY3QsIG9wdGlvbnMpOwogfQogCi1S
ZWZQdHI8TmF0aXZlSW1hZ2U+IFNWR0ltYWdlRm9yQ29udGFpbmVyOjpuYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCitSZWZQdHI8
TmF0aXZlSW1hZ2U+IFNWR0ltYWdlRm9yQ29udGFpbmVyOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpCiB7Ci0gICAgcmV0dXJuIG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KHRhcmdldENvbnRleHQpOworICAgIHJldHVybiBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuaAkocmV2aXNp
b24gMjg3ODAzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29u
dGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcyB0byBiZSBsZXNzIGNvbnNlcnZhdGl2ZS4KICAgICBib29s
IGN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9CiAKLSAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSBmaW5hbDsKKyAgICBSZWZQdHI8TmF0
aXZlSW1hZ2U+IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgZmluYWw7CiAKIHByaXZhdGU6
CiAgICAgV0VCQ09SRV9FWFBPUlQgU1ZHSW1hZ2VGb3JDb250YWluZXIoU1ZHSW1hZ2UqLCBjb25z
dCBGbG9hdFNpemUmIGNvbnRhaW5lclNpemUsIGZsb2F0IGNvbnRhaW5lclpvb20sIGNvbnN0IFVS
TCYgaW5pdGlhbEZyYWdtZW50VVJMKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc4MDMpCisr
KyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDIyLTAxLTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW1vdmUgc3VwcG9ydCBmb3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQuCisgICAgICAg
ICogU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6Q29uZmlndXJhdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
U2hhcmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9uOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0
OjpTaGFyZWFibGVCaXRtYXA6OlNoYXJlYWJsZUJpdG1hcCk6CisgICAgICAgIChXZWJLaXQ6OlNo
YXJlYWJsZUJpdG1hcDo6flNoYXJlYWJsZUJpdG1hcCk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJl
YWJsZUJpdG1hcDo6bnVtQnl0ZXNGb3JTaXplKToKKyAgICAgICAgKiBTaGFyZWQvU2hhcmVhYmxl
Qml0bWFwLmg6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlUGxhdGZv
cm1JbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6ZHhTdXJmYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQmFja2luZ1N0b3JlLmNwcDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3Qy
RC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4u
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRldmljZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0RGV2aWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OnNob3dQb3B1cE1lbnUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2V0dXBTd2FwQ2hhaW4pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6Y29uZmlndXJlQmFja2luZ1N0b3JlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmg6
CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlldzo6V2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6Om9uU2l6ZUV2ZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0dXBTd2FwQ2hhaW4pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpjb25maWd1cmVCYWNraW5nU3RvcmUpOiBEZWxldGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5oOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3OjpkM2REZXZpY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3OjpkM2RJbW1lZGlhdGVDb250ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVudS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBvcHVwTWVudTo6c2hvdyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzOjpkaXNwbGF5KToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpGaW5kQ29udHJvbGxlcjo6Z2V0SW1hZ2VGb3JGaW5kTWF0Y2gpOgorCiAyMDIyLTAx
LTA3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgTWFrZSBGdWxsc2NyZWVuTWFuYWdlcjo6cmVxdWVzdEZ1bGxzY3JlZW5Gb3JFbGVtZW50IG1v
cmUgcm9idXN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm1GVFcuY21ha2UJKHJldmlzaW9uIDI4NzgwMykK
KysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm1GVFcuY21ha2UJKG5vbmV4aXN0ZW50KQpAQCAtMSwx
OTUgKzAsMCBAQAotc2V0KFdlYktpdF9PVVRQVVRfTkFNRSBXZWJLaXQyKQotc2V0KFdlYlByb2Nl
c3NfT1VUUFVUX05BTUUgV2ViS2l0V2ViUHJvY2VzcykKLXNldChOZXR3b3JrUHJvY2Vzc19PVVRQ
VVRfTkFNRSBXZWJLaXROZXR3b3JrUHJvY2VzcykKLXNldChQbHVnaW5Qcm9jZXNzX09VVFBVVF9O
QU1FIFdlYktpdFBsdWdpblByb2Nlc3MpCi1zZXQoR1BVUHJvY2Vzc19PVVRQVVRfTkFNRSBXZWJL
aXRHUFVQcm9jZXNzKQotCi1pbmNsdWRlKEhlYWRlcnMuY21ha2UpCi0KLWFkZF9kZWZpbml0aW9u
cygtREJVSUxESU5HX1dFQktJVCkKLQotbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKLSAgICBO
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5j
cHAKLQotICAgIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCi0K
LSAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzTWFpbkN1cmwuY3BwCi0KLSAg
ICBQbGF0Zm9ybS9JUEMvd2luL0F0dGFjaG1lbnRXaW4uY3BwCi0gICAgUGxhdGZvcm0vSVBDL3dp
bi9Db25uZWN0aW9uV2luLmNwcAotCi0gICAgUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzQ2xhc3NpZmllci5jcHAKLQotICAgIFBsYXRmb3JtL3dpbi9Mb2dnaW5nV2lu
LmNwcAotICAgIFBsYXRmb3JtL3dpbi9Nb2R1bGVXaW4uY3BwCi0gICAgUGxhdGZvcm0vd2luL1No
YXJlZE1lbW9yeVdpbi5jcHAKLQotICAgIFNoYXJlZC9BUEkvYy9jdXJsL1dLQ2VydGlmaWNhdGVJ
bmZvQ3VybC5jcHAKLQotICAgIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2lu
TW9kdWxlTm9uZS5jcHAKLQotICAgIFNoYXJlZC93aW4vQXV4aWxpYXJ5UHJvY2Vzc01haW5XaW4u
Y3BwCi0gICAgU2hhcmVkL3dpbi9OYXRpdmVXZWJLZXlib2FyZEV2ZW50V2luLmNwcAotICAgIFNo
YXJlZC93aW4vTmF0aXZlV2ViTW91c2VFdmVudFdpbi5jcHAKLSAgICBTaGFyZWQvd2luL05hdGl2
ZVdlYlRvdWNoRXZlbnRXaW4uY3BwCi0gICAgU2hhcmVkL3dpbi9OYXRpdmVXZWJXaGVlbEV2ZW50
V2luLmNwcAotICAgIFNoYXJlZC93aW4vV2ViRXZlbnRGYWN0b3J5LmNwcAotCi0gICAgVUlQcm9j
ZXNzL0JhY2tpbmdTdG9yZS5jcHAKLSAgICBVSVByb2Nlc3MvRGVmYXVsdFVuZG9Db250cm9sbGVy
LmNwcAotICAgIFVJUHJvY2Vzcy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmdOb25lLmNwcAotICAg
IFVJUHJvY2Vzcy9XZWJHcmFtbWFyRGV0YWlsLmNwcAotICAgIFVJUHJvY2Vzcy9XZWJWaWV3cG9y
dEF0dHJpYnV0ZXMuY3BwCi0KLSAgICBVSVByb2Nlc3MvQVBJL0MvV0tWaWV3cG9ydEF0dHJpYnV0
ZXMuY3BwCi0KLSAgICBVSVByb2Nlc3MvQVBJL0MvY3VybC9XS1Byb3RlY3Rpb25TcGFjZUN1cmwu
Y3BwCi0gICAgVUlQcm9jZXNzL0FQSS9DL2N1cmwvV0tXZWJzaXRlRGF0YVN0b3JlUmVmQ3VybC5j
cHAKLQotICAgIFVJUHJvY2Vzcy9BUEkvQy93aW4vV0tWaWV3LmNwcAotCi0gICAgVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3Mu
Y3BwCi0KLSAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNwZWN0b3JVSVByb3h5V2lu
LmNwcAotCi0gICAgVUlQcm9jZXNzL0xhdW5jaGVyL3dpbi9Qcm9jZXNzTGF1bmNoZXJXaW4uY3Bw
Ci0KLSAgICBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5j
cHAKLQotICAgIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS93aW4vV2Vic2l0ZURhdGFTdG9yZVdpbi5j
cHAKLQotICAgIFVJUHJvY2Vzcy93aW4vUGFnZUNsaWVudEltcGwuY3BwCi0gICAgVUlQcm9jZXNz
L3dpbi9XZWJDb250ZXh0TWVudVByb3h5V2luLmNwcAotICAgIFVJUHJvY2Vzcy93aW4vV2ViUGFn
ZVByb3h5V2luLmNwcAotICAgIFVJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3Bw
Ci0gICAgVUlQcm9jZXNzL3dpbi9XZWJQcm9jZXNzUG9vbFdpbi5jcHAKLSAgICBVSVByb2Nlc3Mv
d2luL1dlYlZpZXcuY3BwCi0KLSAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL3dpbi9Jbmpl
Y3RlZEJ1bmRsZVdpbi5jcHAKLQotICAgIFdlYlByb2Nlc3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNw
ZWN0b3JVSVdpbi5jcHAKLQotICAgIFdlYlByb2Nlc3MvTWVkaWFDYWNoZS9XZWJNZWRpYUtleVN0
b3JhZ2VNYW5hZ2VyLmNwcAotCi0gICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2Vi
UG9wdXBNZW51V2luLmNwcAotCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkU3Vy
ZmFjZS5jcHAKLQotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
bXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAotICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuY3BwCi0KLSAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL1dlYlBhZ2VXaW4uY3BwCi0KLSAgICBXZWJQcm9jZXNz
L3dpbi9XZWJQcm9jZXNzTWFpbldpbi5jcHAKLSAgICBXZWJQcm9jZXNzL3dpbi9XZWJQcm9jZXNz
V2luLmNwcAotKQotCi1saXN0KEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwotICAg
ICIke1dFQktJVF9ESVJ9L1BsYXRmb3JtL2NsYXNzaWZpZXIiCi0gICAgIiR7V0VCS0lUX0RJUn0v
UGx1Z2luUHJvY2Vzcy93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vU2hhcmVkL0FQSS9jL3dpbiIK
LSAgICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcyIKLSAgICAiJHtX
RUJLSVRfRElSfS9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3Ii
Ci0gICAgIiR7V0VCS0lUX0RJUn0vU2hhcmVkL1BsdWdpbnMvd2luIgotICAgICIke1dFQktJVF9E
SVJ9L1NoYXJlZC93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2NhaXJv
IgotICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvQy9jdXJsIgotICAgICIke1dFQktJ
VF9ESVJ9L1VJUHJvY2Vzcy9BUEkvQy93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNz
L0FQSS9jcHAvd2luIgotICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvd2luIgotICAg
ICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzIgotICAgICIke1dF
QktJVF9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0IgotICAgICIke1dFQktJVF9ESVJ9
L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luIgotICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9Q
bHVnaW5zL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3Mvd2luIgotICAgICIke1dF
QktJVF9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL3dpbiIKLSAgICAiJHtXRUJL
SVRfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS93aW4vRE9NIgotICAgICIke1dF
QktJVF9ESVJ9L1dlYlByb2Nlc3MvSW5zcGVjdG9yL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcyIKLSAgICAiJHtXRUJLSVRfRElSfS9XZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2luIgotICAgICIke1dFQktJVF9ESVJ9L3dpbiIKLSkKLQotbGlzdChB
UFBFTkQgV2ViS2l0X1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTCi0pCi0KLXNldChXZWJLaXRD
b21tb25JbmNsdWRlRGlyZWN0b3JpZXMgJHtXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFU30pCi1z
ZXQoV2ViS2l0Q29tbW9uU3lzdGVtSW5jbHVkZURpcmVjdG9yaWVzICR7V2ViS2l0X1NZU1RFTV9J
TkNMVURFX0RJUkVDVE9SSUVTfSkKLQotbGlzdChBUFBFTkQgV2ViUHJvY2Vzc19TT1VSQ0VTCi0g
ICAgV2ViUHJvY2Vzcy9FbnRyeVBvaW50L3dpbi9XZWJQcm9jZXNzTWFpbi5jcHAKLSkKLQotbGlz
dChBUFBFTkQgTmV0d29ya1Byb2Nlc3NfU09VUkNFUwotICAgIE5ldHdvcmtQcm9jZXNzL0VudHJ5
UG9pbnQvd2luL05ldHdvcmtQcm9jZXNzTWFpbi5jcHAKLSkKLQotbGlzdChBUFBFTkQgR1BVUHJv
Y2Vzc19TT1VSQ0VTCi0gICAgR1BVUHJvY2Vzcy9FbnRyeVBvaW50L3dpbi9HUFVQcm9jZXNzTWFp
bi5jcHAKLSkKLQotYWRkX2RlZmluaXRpb25zKC1EVVNFX0RJUkVDVDJEPTEgLURVU0VfQ1VSTD0x
KQotCi1saXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwotICAgIE5ldHdvcmtQcm9jZXNzL0Nvb2tp
ZXMvY3VybC9XZWJDb29raWVNYW5hZ2VyQ3VybC5jcHAKLQotICAgIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcAotICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUlPQ2hhbm5lbEN1cmwuY3BwCi0KLSAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtEYXRhVGFza0N1cmwuY3BwCi0gICAgTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJv
Y2Vzc0N1cmwuY3BwCi0gICAgTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrU2Vzc2lvbkN1cmwu
Y3BwCi0gICAgTmV0d29ya1Byb2Nlc3MvY3VybC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dEN1cmwu
Y3BwCi0KLSAgICBTaGFyZWQvY3VybC9XZWJDb3JlQXJndW1lbnRDb2RlcnNDdXJsLmNwcAotCi0g
ICAgU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAKLQotICAgIFVJUHJvY2Vz
cy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwCi0KLSAgICBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L2N1cmwvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAKLSkKLQotbGlzdChBUFBF
TkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3Jr
UHJvY2Vzcy9jdXJsIgotICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvY3VybCIKLSkKLQotbGlzdChBUFBFTkQgV2ViS2l0X1BSSVZBVEVfTElCUkFSSUVTCi0gICAg
T3BlblNTTDo6U1NMCi0gICAgRDJkMS5saWIKLSAgICBEM2QxMS5saWIKLSAgICBEd3JpdGUKLSAg
ICBEeGdpLmxpYgotICAgIER4Z3VpZAotICAgIFdpbmRvd3NDb2RlY3MKLSAgICBtZnV1aWQubGli
Ci0gICAgc3RybWlpZHMubGliCi0pCi0KLWlmIChFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUikKLSAg
ICBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwotICAgICAgICBVSVByb2Nlc3MvSW5zcGVjdG9y
L3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCi0gICAgICAgIFVJUHJvY2Vzcy9JbnNw
ZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5jcHAKLQotICAgICAg
ICBVSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5V2luLmNw
cAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCi0g
ICAgICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9zb2NrZXQiCi0gICAgKQotZW5kaWYgKCkK
LQotIyBXaW5kb3dzIHNwZWNpZmljCi1saXN0KEFQUEVORCBXZWJLaXRfUFVCTElDX0ZSQU1FV09S
S19IRUFERVJTCi0gICAgU2hhcmVkL0FQSS9jL2N1cmwvV0tDZXJ0aWZpY2F0ZUluZm9DdXJsLmgK
LQotICAgIFNoYXJlZC9BUEkvYy93aW4vV0tCYXNlV2luLmgKLQotICAgIFVJUHJvY2Vzcy9BUEkv
Qy9jdXJsL1dLUHJvdGVjdGlvblNwYWNlQ3VybC5oCi0gICAgVUlQcm9jZXNzL0FQSS9DL2N1cmwv
V0tXZWJzaXRlRGF0YVN0b3JlUmVmQ3VybC5oCi0KLSAgICBVSVByb2Nlc3MvQVBJL0Mvd2luL1dL
Vmlldy5oCi0pCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAJ
KHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlYWJsZUJpdG1h
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDE0ICs3NSw2IEBAIHZvaWQgU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGU6OmNsZWFyKCkKIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9u
OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwg
Y29sb3JTcGFjZSA8PCBpc09wYXF1ZTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgU2hhcmVkTWVt
b3J5OjpIYW5kbGU6OmVuY29kZUhhbmRsZShlbmNvZGVyLCBzaGFyZWRSZXNvdXJjZUhhbmRsZSk7
Ci0KLSAgICAvLyBIYW5kIG9mZiBvd25lcnNoaXAgb2Ygb3VyIEhBTkRMRSB0byB0aGUgcmVjZWl2
aW5nIHByb2Nlc3MuIEl0IHdpbGwgY2xvc2UgaXQgZm9yIHVzLgotICAgIC8vIEZJWE1FOiBJZiB0
aGUgcmVjZWl2aW5nIHByb2Nlc3MgY3Jhc2hlcyBiZWZvcmUgaXQgcmVjZWl2ZXMgdGhlIG1lbW9y
eSwgdGhlIG1lbW9yeSB3aWxsIGJlCi0gICAgLy8gbGVha2VkLiBTZWUgPGh0dHA6Ly93ZWJraXQu
b3JnL2IvNDc1MDI+LgotICAgIHNoYXJlZFJlc291cmNlSGFuZGxlID0gbnVsbHB0cjsKLSNlbmRp
ZgogfQogCiBib29sIFNoYXJlYWJsZUJpdG1hcDo6Q29uZmlndXJhdGlvbjo6ZGVjb2RlKElQQzo6
RGVjb2RlciYgZGVjb2RlciwgQ29uZmlndXJhdGlvbiYgcmVzdWx0KQpAQCAtOTgsMTUgKzkwLDYg
QEAgYm9vbCBTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb246OmRlYwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICByZXN1bHQgPSBDb25maWd1cmF0aW9uIHsgV1RGTW92ZSgqY29sb3JT
cGFjZSksICppc09wYXF1ZSB9OwotCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIGF1dG8gcHJvY2Vz
c1NwZWNpZmljSGFuZGxlID0gU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmRlY29kZUhhbmRsZShkZWNv
ZGVyKTsKLSAgICBpZiAoIXByb2Nlc3NTcGVjaWZpY0hhbmRsZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmVzdWx0LnNoYXJlZFJlc291cmNlSGFuZGxlID0gcHJvY2Vzc1NwZWNpZmlj
SGFuZGxlLnZhbHVlKCk7Ci0jZW5kaWYKLQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xODcs
MTggKzE3MCwxMiBAQCBTaGFyZWFibGVCaXRtYXA6OlNoYXJlYWJsZUJpdG1hcChjb25zdCBJCiAg
ICAgLCBtX3NoYXJlZE1lbW9yeShzaGFyZWRNZW1vcnkpCiAgICAgLCBtX2RhdGEobnVsbHB0cikK
IHsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgY3JlYXRlU2hhcmVkUmVzb3VyY2UoKTsKLSNlbmRp
ZgogfQogCiBTaGFyZWFibGVCaXRtYXA6On5TaGFyZWFibGVCaXRtYXAoKQogewogICAgIGlmICgh
aXNCYWNrZWRCeVNoYXJlZE1lbW9yeSgpKQogICAgICAgICBTaGFyZWFibGVCaXRtYXBNYWxsb2M6
OmZyZWUobV9kYXRhKTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgZGlzcG9zZVNoYXJlZFJlc291
cmNlKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCogU2hhcmVhYmxlQml0bWFwOjpkYXRhKCkgY29uc3QK
QEAgLTIxMiwxMiArMTg5LDcgQEAgdm9pZCogU2hhcmVhYmxlQml0bWFwOjpkYXRhKCkgY29uc3QK
IAogQ2hlY2tlZFVpbnQzMiBTaGFyZWFibGVCaXRtYXA6Om51bUJ5dGVzRm9yU2l6ZShXZWJDb3Jl
OjpJbnRTaXplIHNpemUsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6Q29uZmlndXJhdGlvbiYgY29u
ZmlndXJhdGlvbikKIHsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgLy8gV2UgcGFzcyByZWZlcmVu
Y2VzIHRvIEdQVSB0ZXh0dXJlcywgc28gbm8gbmVlZCB0byBhbGxvY2F0ZSBmcmFtZSBidWZmZXJz
IGhlcmUuIEp1c3Qgc2VuZCBhIHNtYWxsIGJpdCBvZiBkYXRhLgotICAgIHJldHVybiBzaXplb2Yo
dm9pZCopOwotI2Vsc2UKICAgICByZXR1cm4gY2FsY3VsYXRlQnl0ZXNQZXJSb3coc2l6ZSwgY29u
ZmlndXJhdGlvbikgKiBzaXplLmhlaWdodCgpOwotI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgJKHJldmlz
aW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxNiArMzIsNiBAQAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAotI2lmIFVTRShESVJFQ1Qy
RCkKLWludGVyZmFjZSBJRDJEMUJpdG1hcDsKLWludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsK
LWludGVyZmFjZSBJRDNEMTFEZXZpY2UxOwotaW50ZXJmYWNlIElEWEdJS2V5ZWRNdXRleDsKLWlu
dGVyZmFjZSBJRFhHSVN1cmZhY2UxOwotCi0jaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KLSNl
bmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKQEAgLTU0LDkgKzQ0LDYgQEAgcHVibGljOgogICAgIHN0cnVjdCBDb25maWd1cmF0
aW9uIHsKICAgICAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IGNvbG9yU3BhY2U7CiAgICAgICAgIGJvb2wgaXNPcGFxdWUgeyBmYWxzZSB9OwotI2lmIFVT
RShESVJFQ1QyRCkKLSAgICAgICAgbXV0YWJsZSBIQU5ETEUgc2hhcmVkUmVzb3VyY2VIYW5kbGUg
eyBudWxscHRyIH07Ci0jZW5kaWYKIAogICAgICAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXIm
KSBjb25zdDsKICAgICAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShJ
UEM6OkRlY29kZXImLCBDb25maWd1cmF0aW9uJik7CkBAIC0xMzcsMTQgKzEyNCw2IEBAIHB1Ymxp
YzoKICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBjcmVhdGVDYWlyb1N1cmZhY2UoKTsKIAog
ICAgIFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2VQdHIgY3JlYXRlUGxhdGZvcm1JbWFnZSgpIHsgcmV0
dXJuIGNyZWF0ZUNhaXJvU3VyZmFjZSgpOyB9Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09N
UHRyPElEMkQxQml0bWFwPiBjcmVhdGVEaXJlY3QyRFN1cmZhY2UoSUQzRDExRGV2aWNlMSosIElE
MkQxUmVuZGVyVGFyZ2V0Kik7Ci0gICAgSURYR0lTdXJmYWNlMSogZHhTdXJmYWNlKCkgeyByZXR1
cm4gbV9zdXJmYWNlLmdldCgpOyB9Ci0gICAgdm9pZCBjcmVhdGVTaGFyZWRSZXNvdXJjZSgpOwot
ICAgIHZvaWQgZGlzcG9zZVNoYXJlZFJlc291cmNlKCk7Ci0gICAgdm9pZCBsZWFrU2hhcmVkUmVz
b3VyY2UoKTsKLQotICAgIFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2VQdHIgY3JlYXRlUGxhdGZvcm1J
bWFnZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCiBwcml2YXRlOgpAQCAtMTcxLDEy
ICsxNTAsNiBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOwogICAgIENv
bmZpZ3VyYXRpb24gbV9jb25maWd1cmF0aW9uOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIENP
TVB0cjxJRFhHSVN1cmZhY2UxPiBtX3N1cmZhY2U7Ci0gICAgQ09NUHRyPElEWEdJS2V5ZWRNdXRl
eD4gbV9zdXJmYWNlTXV0ZXg7Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBtX2JpdG1hcDsKLSNl
bmRpZgotCiAjaWYgVVNFKENHKQogICAgIGJvb2wgbV9yZWxlYXNlQml0bWFwQ29udGV4dERhdGFD
YWxsZWQgeyBmYWxzZSB9OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4v
U2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
U2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgwMykK
KysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAJ
KG5vbmV4aXN0ZW50KQpAQCAtMSwxNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMSBCcmVudCBGdWxnaGFtIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChD
KSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLQotI2luY2x1ZGUgIkRlY29kZXIuaCIKLSNpbmNsdWRl
ICJFbmNvZGVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbWFnZS5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvRElCUGl4ZWxEYXRhLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9EaXJlY3QyRE9wZXJh
dGlvbnMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJEVXRpbGl0aWVzLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
Tm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVj
dDJELmg+Ci0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2luY2x1
ZGUgPGR4Z2kxXzIuaD4KLSNpbmNsdWRlIDx3aW5jb2RlYy5oPgotI2luY2x1ZGUgPHd0Zi9Qcm9j
ZXNzSUQuaD4KLQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwotCi12b2lkIFNoYXJlYWJsZUJpdG1hcDo6dmFsaWRhdGVDb25maWd1cmF0aW9uKENvbmZpZ3Vy
YXRpb24mKQotewotfQotCi1zdGF0aWMgdW5zaWduZWQgc3RyaWRlRm9yV2lkdGgodW5zaWduZWQg
d2lkdGgpCi17Ci0gICAgc3RhdGljIHVuc2lnbmVkIGJpdHNQZXJQaXhlbCA9IERpcmVjdDJEOjpi
aXRzUGVyUGl4ZWwoRGlyZWN0MkQ6OndpY0JpdG1hcEZvcm1hdCgpKTsKLSAgICByZXR1cm4gYml0
c1BlclBpeGVsICogd2lkdGggLyA4OwotfQotCi1DaGVja2VkVWludDMyIFNoYXJlYWJsZUJpdG1h
cDo6Y2FsY3VsYXRlQnl0ZXNQZXJSb3coV2ViQ29yZTo6SW50U2l6ZSBzaXplLCBjb25zdCBDb25m
aWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQotewotICAgIHJldHVybiBjYWxjdWxhdGVCeXRlc1Bl
clBpeGVsKGNvbmZpZ3VyYXRpb24pICogc2l6ZS53aWR0aCgpOwotfQotCi1DaGVja2VkVWludDMy
IFNoYXJlYWJsZUJpdG1hcDo6Y2FsY3VsYXRlQnl0ZXNQZXJQaXhlbChjb25zdCBDb25maWd1cmF0
aW9uJikKLXsKLSAgICByZXR1cm4gNDsKLX0KLQotdm9pZCBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZVNoYXJlZFJlc291cmNlKCkKLXsKLSAgICAvLyBEb24ndCBjcmVhdGUgYSBzaGFyZWQgcmVzb3Vy
Y2UgaWYgdGhlIGNvbmZpZ3VyYXRpb24gaW5zdHJ1Y3RzIHVzIHRvIHVzZSBhbiBleGlzdGluZyBv
bmUuCi0gICAgaWYgKG1fY29uZmlndXJhdGlvbi5zaGFyZWRSZXNvdXJjZUhhbmRsZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9zdXJmYWNlID0gRGlyZWN0MkQ6OmNyZWF0ZURYR0lTdXJmYWNl
T2ZTaXplKG1fc2l6ZSwgbnVsbHB0ciwgdHJ1ZSk7Ci0KLSAgICBDT01QdHI8SURYR0lSZXNvdXJj
ZTE+IHJlc291cmNlRGF0YTsKLSAgICBIUkVTVUxUIGhyID0gbV9zdXJmYWNlLT5RdWVyeUludGVy
ZmFjZShfX3V1aWRvZihJRFhHSVJlc291cmNlKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZy
ZXNvdXJjZURhdGEpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAg
IGhyID0gcmVzb3VyY2VEYXRhLT5DcmVhdGVTaGFyZWRIYW5kbGUobnVsbHB0ciwgRFhHSV9TSEFS
RURfUkVTT1VSQ0VfUkVBRCB8IERYR0lfU0hBUkVEX1JFU09VUkNFX1dSSVRFLCBudWxscHRyLCAm
bV9jb25maWd1cmF0aW9uLnNoYXJlZFJlc291cmNlSGFuZGxlKTsKLSAgICBSRUxFQVNFX0FTU0VS
VChTVUNDRUVERUQoaHIpKTsKLX0KLQotdm9pZCBTaGFyZWFibGVCaXRtYXA6OmRpc3Bvc2VTaGFy
ZWRSZXNvdXJjZSgpCi17Ci0gICAgaWYgKG1fc3VyZmFjZU11dGV4KQotICAgICAgICBtX3N1cmZh
Y2VNdXRleC0+UmVsZWFzZVN5bmMoMSk7Ci0gICAgaWYgKG1fY29uZmlndXJhdGlvbi5zaGFyZWRS
ZXNvdXJjZUhhbmRsZSkKLSAgICAgICAgOjpDbG9zZUhhbmRsZShtX2NvbmZpZ3VyYXRpb24uc2hh
cmVkUmVzb3VyY2VIYW5kbGUpOwotfQotCi12b2lkIFNoYXJlYWJsZUJpdG1hcDo6bGVha1NoYXJl
ZFJlc291cmNlKCkKLXsKLSAgICBtX2NvbmZpZ3VyYXRpb24uc2hhcmVkUmVzb3VyY2VIYW5kbGUg
PSBudWxscHRyOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBTaGFyZWFi
bGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpCi17Ci0gICAgLy8gTG9jayB0aGUgc3Vy
ZmFjZSB0byB0aGUgY3VycmVudCBkZXZpY2Ugd2hpbGUgcmVuZGVyaW5nLgotICAgIEhSRVNVTFQg
aHIgPSBtX3N1cmZhY2UtPlF1ZXJ5SW50ZXJmYWNlKCZtX3N1cmZhY2VNdXRleCk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgaHIgPSBtX3N1cmZhY2VNdXRleC0+QWNx
dWlyZVN5bmMoMCwgSU5GSU5JVEUpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OwotCi0gICAgYXV0byBzdXJmYWNlQ29udGV4dCA9IERpcmVjdDJEOjpjcmVhdGVTdXJmYWNlUmVu
ZGVyVGFyZ2V0KG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgaWYgKCFzdXJmYWNlQ29udGV4dCkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHREaXJlY3QyRD4oc3VyZmFjZUNvbnRleHQuZ2V0KCkpOwotfQotCi12b2lkIFNoYXJlYWJs
ZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYg
ZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpCi17Ci0gICAgcGFpbnQoY29udGV4dCwg
MSwgZHN0UG9pbnQsIHNyY1JlY3QpOwotfQotCi12b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9hdCBzY2FsZUZhY3RvciwgY29uc3QgSW50UG9p
bnQmIGRzdFBvaW50LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KQotewotICAgIGF1dG8gc3VyZmFj
ZSA9IGNyZWF0ZURpcmVjdDJEU3VyZmFjZShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5kM2RE
ZXZpY2UoKSwgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkpOwotCi0j
aWZuZGVmIF9OREVCVUcKLSAgICBhdXRvIGJpdG1hcFNpemUgPSBzdXJmYWNlLT5HZXRQaXhlbFNp
emUoKTsKLSAgICBBU1NFUlQoYml0bWFwU2l6ZS53aWR0aCA9PSBtX3NpemUud2lkdGgoKSk7Ci0g
ICAgQVNTRVJUKGJpdG1hcFNpemUuaGVpZ2h0ID09IG1fc2l6ZS5oZWlnaHQoKSk7Ci0jZW5kaWYK
LQotICAgIEZsb2F0UmVjdCBkZXN0UmVjdChkc3RQb2ludCwgc3JjUmVjdC5zaXplKCkpOwotICAg
IEZsb2F0UmVjdCBzcmNSZWN0U2NhbGVkKHNyY1JlY3QpOwotICAgIHNyY1JlY3RTY2FsZWQuc2Nh
bGUoc2NhbGVGYWN0b3IpOwotCi0gICAgQVNTRVJUKGNvbnRleHQuaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwotICAgIGF1dG8mIHN0YXRlID0gY29udGV4dC5zdGF0ZSgpOwotICAgIGF1dG8mIHBsYXRm
b3JtQ29udGV4dCA9ICpjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgSW1hZ2VQYWlu
dGluZ09wdGlvbnMgb3B0aW9ucyB7IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVu
ZE1vZGUsIEltYWdlT3JpZW50YXRpb24oKSwgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSB9OwotICAgIERpcmVjdDJEOjpkcmF3UGxhdGZvcm1JbWFnZShwbGF0Zm9ybUNvbnRleHQsIHN1
cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMsIHN0
YXRlLmFscGhhLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotQ09NUHRyPElE
MkQxQml0bWFwPiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZURpcmVjdDJEU3VyZmFjZShJRDNEMTFE
ZXZpY2UxKiBkaXJlY3RYRGV2aWNlLCBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQot
ewotICAgIGlmICghZGlyZWN0WERldmljZSkKLSAgICAgICAgZGlyZWN0WERldmljZSA9IERpcmVj
dDJEOjpkZWZhdWx0RGlyZWN0WERldmljZSgpOwotCi0gICAgaWYgKCFtX2JpdG1hcCkgewotICAg
ICAgICBDT01QdHI8SUQzRDExVGV4dHVyZTJEPiB0ZXh0dXJlOwotICAgICAgICBIUkVTVUxUIGhy
ID0gZGlyZWN0WERldmljZS0+T3BlblNoYXJlZFJlc291cmNlMShtX2NvbmZpZ3VyYXRpb24uc2hh
cmVkUmVzb3VyY2VIYW5kbGUsIF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPigmdGV4dHVyZSkpOwotICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBociA9IHRleHR1cmUtPlF1ZXJ5
SW50ZXJmYWNlKCZtX3N1cmZhY2UpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQo
aHIpKTsKLQotICAgICAgICAvLyBMb2NrIHRoZSBzdXJmYWNlIHRvIHRoZSBjdXJyZW50IGRldmlj
ZSB3aGlsZSByZW5kZXJpbmcuCi0gICAgICAgIGhyID0gbV9zdXJmYWNlLT5RdWVyeUludGVyZmFj
ZSgmbV9zdXJmYWNlTXV0ZXgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKLSAgICAgICAgaHIgPSBtX3N1cmZhY2VNdXRleC0+QWNxdWlyZVN5bmMoMSwgSU5GSU5JVEUp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgICAgICBhdXRv
IGJpdG1hcFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpOwotICAgICAg
ICBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlU2hhcmVkQml0bWFwKF9fdXVpZG9mKElEWEdJU3Vy
ZmFjZTEpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihtX3N1cmZhY2UuZ2V0KCkpLCAmYml0bWFw
UHJvcGVydGllcywgJm1fYml0bWFwKTsKLSAgICAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fYml0bWFwOwot
fQotCi1SZWZQdHI8SW1hZ2U+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlSW1hZ2UoKQotewotICAg
IGF1dG8gc3VyZmFjZSA9IGNyZWF0ZURpcmVjdDJEU3VyZmFjZShudWxscHRyLCBHcmFwaGljc0Nv
bnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKSk7Ci0gICAgaWYgKCFzdXJmYWNlKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1v
dmUoc3VyZmFjZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQmFja2luZ1N0b3JlLmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQmFja2luZ1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksMTEgKzI5LDYgQEAKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJV
cGRhdGVJbmZvLmgiCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2lu
Y2x1ZGUgPGQzZDExXzEuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OSwxMCArMjc5LDYgQEAKICNpbmNs
dWRlICJTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oIgogI2VuZGlmCiAKLSNpZiBVU0UoRElS
RUNUMkQpCi0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2VuZGlmCi0KICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKSAmJiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogI2luY2x1ZGUgIldlYkRldmlj
ZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXJQcm94eS5oIgogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Mywx
MCArMTgzLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Byb21pc2VkQXR0YWNobWVudEluZm8uaD4K
ICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotaW50ZXJmYWNlIElEM0QxMURldmljZTE7Ci0j
ZW5kaWYKLQogI2lmIEVOQUJMRShNRURJQV9VU0FHRSkKICNpbmNsdWRlIDxXZWJDb3JlL01lZGlh
U2Vzc2lvbklkZW50aWZpZXIuaD4KICNlbmRpZgpAQCAtMTAxNywxMCArMTAxMyw2IEBAIHB1Ymxp
YzoKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICBQbGF0Zm9ybVZpZXdXaWRnZXQgdmlld1dpZGdl
dCgpOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBJRDNEMTFEZXZpY2UxKiBkZXZpY2UoKSBjb25z
dDsKLSAgICB2b2lkIHNldERldmljZShJRDNEMTFEZXZpY2UxKik7Ci0jZW5kaWYKICNlbmRpZgog
I2lmIFVTRShMSUJXUEUpCiAgICAgc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIHZpZXdCYWNrZW5k
KCk7CkBAIC0zMTA1LDkgKzMwOTcsNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxSZW1vdGVNZWRp
YVNlc3Npb25Db29yZGluYXRvclByb3h5PiBtX21lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yUHJveHk7
CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8SUQzRDExRGV2aWNlMT4g
bV9kZXZpY2U7Ci0jZW5kaWYKICAgICBib29sIG1fc2Vzc2lvblN0YXRlV2FzUmVzdG9yZWRCeUFQ
SVJlcXVlc3QgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc1F1b3RhSW5jcmVhc2VEZW5pZWQgeyBm
YWxzZSB9OwogICAgIGJvb2wgbV9pc0xheWVyVHJlZUZyb3plbkR1ZVRvU3dpcGVBbmltYXRpb24g
eyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9y
ZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4v
QmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkK
QEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiQmFja2luZ1N0b3JlLmgiCi0KLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNp
bmNsdWRlICJVcGRhdGVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9DT01QdHIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJEVXRpbGl0aWVzLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaD4KLSNpbmNsdWRlIDxkMmQxLmg+Ci0j
aW5jbHVkZSA8ZDNkMTFfMS5oPgotI2luY2x1ZGUgPGR4Z2kuaD4KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotc3RkOjp1bmlxdWVfcHRyPEJhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyRD4gQmFja2luZ1N0b3JlOjpjcmVhdGVCYWNrZW5kKCkKLXsKLSAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsPihtX3Np
emUsIG1fZGV2aWNlU2NhbGVGYWN0b3IsIG1fd2ViUGFnZVByb3h5LmRldmljZSgpKTsKLX0KLQot
dm9pZCBCYWNraW5nU3RvcmU6OnBhaW50KERYQ29ubmVjdGlvbnMgZHhDb25uZWN0aW9ucywgY29u
c3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBBU1NFUlQobV9iYWNrZW5kKTsKLSAgICBBU1NFUlQo
bV9iYWNrZW5kLT5zaXplKCkgPT0gbV9zaXplKTsKLQotICAgIENPTVB0cjxJRDNEMTFSZXNvdXJj
ZT4gYmFja0J1ZmZlcjsKLSAgICBIUkVTVUxUIGhyID0gZHhDb25uZWN0aW9ucy5iYWNrQnVmZmVy
LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNEMTFSZXNvdXJjZSksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCoqPigmYmFja0J1ZmZlcikpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgQ09NUHRyPElEM0QxMVJlc291cmNlPiBiYWNraW5nU3RvcmU7Ci0gICAgaHIg
PSBtX2JhY2tlbmQtPmR4U3VyZmFjZSgpLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNEMTFS
ZXNvdXJjZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja2luZ1N0b3JlKSk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBDRDNEMTFfQk9YIHNyY0JveChy
ZWN0LngoKSwgcmVjdC55KCksIDAsIHJlY3QueCgpICsgcmVjdC53aWR0aCgpLCByZWN0LnkoKSAr
IHJlY3QuaGVpZ2h0KCksIDEpOwotICAgIGR4Q29ubmVjdGlvbnMuaW1tZWRpYXRlQ29udGV4dC0+
Q29weVN1YnJlc291cmNlUmVnaW9uMShiYWNrQnVmZmVyLmdldCgpLCAwLCByZWN0LngoKSwgcmVj
dC55KCksIDAsIGJhY2tpbmdTdG9yZS5nZXQoKSwgMCwgJnNyY0JveCwgRDNEMTFfQ09QWV9ESVND
QVJEKTsKLX0KLQotdm9pZCBCYWNraW5nU3RvcmU6OmluY29ycG9yYXRlVXBkYXRlKFNoYXJlYWJs
ZUJpdG1hcCogYml0bWFwLCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQotewotICAgIGlm
ICghbV9iYWNrZW5kKQotICAgICAgICBtX2JhY2tlbmQgPSBjcmVhdGVCYWNrZW5kKCk7Ci0KLSAg
ICBzY3JvbGwodXBkYXRlSW5mby5zY3JvbGxSZWN0LCB1cGRhdGVJbmZvLnNjcm9sbE9mZnNldCk7
Ci0KLSAgICBJbnRQb2ludCB1cGRhdGVSZWN0Qm91bmRzTG9jYXRpb24gPSB1cGRhdGVJbmZvLnVw
ZGF0ZVJlY3RCb3VuZHMubG9jYXRpb24oKTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gZGV2
aWNlVXBkYXRlQml0bWFwID0gYml0bWFwLT5jcmVhdGVEaXJlY3QyRFN1cmZhY2UobV93ZWJQYWdl
UHJveHkuZGV2aWNlKCksIG1fYmFja2VuZC0+cmVuZGVyVGFyZ2V0KCkpOwotICAgIGlmICghZGV2
aWNlVXBkYXRlQml0bWFwKQotICAgICAgICByZXR1cm47Ci0KLSNpZm5kZWYgX05ERUJVRwotICAg
IGF1dG8gZGV2aWNlQml0bWFwU2l6ZSA9IGRldmljZVVwZGF0ZUJpdG1hcC0+R2V0UGl4ZWxTaXpl
KCk7Ci0gICAgQVNTRVJUKGRldmljZUJpdG1hcFNpemUud2lkdGggPT0gdXBkYXRlSW5mby51cGRh
dGVSZWN0Qm91bmRzLndpZHRoKCkpOwotICAgIEFTU0VSVChkZXZpY2VCaXRtYXBTaXplLmhlaWdo
dCA9PSB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMuaGVpZ2h0KCkpOwotI2VuZGlmCi0KLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIHVwZGF0ZVJlY3QgOiB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RzKSB7
Ci0gICAgICAgIGF1dG8gY3VycmVudFJlY3RMb2NhdGlvbiA9IEludFNpemUodXBkYXRlUmVjdC54
KCkgLSB1cGRhdGVSZWN0Qm91bmRzTG9jYXRpb24ueCgpLCB1cGRhdGVSZWN0LnkoKSAtIHVwZGF0
ZVJlY3RCb3VuZHNMb2NhdGlvbi55KCkpOwotICAgICAgICBhdXRvIGRlc3RSZWN0TG9jYXRpb24g
PSBJbnRTaXplKHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0LnkoKSk7Ci0gICAgICAgIERpcmVj
dDJEOjpjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKGRldmljZVVwZGF0ZUJpdG1hcC5n
ZXQoKSwgbV9iYWNrZW5kLT5zdXJmYWNlKCksIGN1cnJlbnRSZWN0TG9jYXRpb24sIHVwZGF0ZVJl
Y3QsIGRlc3RSZWN0TG9jYXRpb24pOwotICAgIH0KLX0KLQotdm9pZCBCYWNraW5nU3RvcmU6OnNj
cm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZz
ZXQpCi17Ci0gICAgaWYgKHNjcm9sbE9mZnNldC5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKG1fYmFja2VuZCk7Ci0gICAgbV9iYWNrZW5kLT5zY3JvbGwoc2Nyb2xsUmVj
dCwgc2Nyb2xsT2Zmc2V0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcAkocmV2aXNp
b24gMjg3ODAzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEwICszMiw2IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9TZWFyY2hQb3B1cE1lbnVEQi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckFnZW50Lmg+CiAK
LSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2VuZGlmCi0KIG5hbWVz
cGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYlBhZ2VQcm94eTo6cGxhdGZvcm1Jbml0aWFsaXplKCkK
QEAgLTc5LDE4ICs3NSw2IEBAIFBsYXRmb3JtVmlld1dpZGdldCBXZWJQYWdlUHJveHk6OnZpZXdX
aWQKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGFnZUNsaWVudEltcGwmPihwYWdlQ2xpZW50KCkp
LnZpZXdXaWRnZXQoKTsKIH0KIAotI2lmIFVTRShESVJFQ1QyRCkKLUlEM0QxMURldmljZTEqIFdl
YlBhZ2VQcm94eTo6ZGV2aWNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZXZpY2UuZ2V0KCk7
Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5OjpzZXREZXZpY2UoSUQzRDExRGV2aWNlMSogZGV2aWNl
KQotewotICAgIG1fZGV2aWNlID0gZGV2aWNlOwotfQotI2VuZGlmCi0KIHZvaWQgV2ViUGFnZVBy
b3h5OjpkaXNwYXRjaFBlbmRpbmdDaGFyRXZlbnRzKGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZl
bnQmIGtleWRvd25FdmVudCkKIHsKICAgICBhdXRvJiBwZW5kaW5nQ2hhckV2ZW50cyA9IGtleWRv
d25FdmVudC5wZW5kaW5nQ2hhckV2ZW50cygpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCShyZXZpc2lvbiAyODc4
MDMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMyArNDUsNiBAQAogI2luY2x1ZGUgPHd0Zi9IZXhO
dW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLSNpZiBVU0Uo
RElSRUNUMkQpCi0jaW5jbHVkZSA8V2ViQ29yZS9EaXJlY3QyRFV0aWxpdGllcy5oPgotI2luY2x1
ZGUgPGQzZDExXzEuaD4KLSNpbmNsdWRlIDxkaXJlY3R4Y29sb3JzLmg+IAotI2luY2x1ZGUgPGR4
Z2kuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCkBAIC0yMTUsMTEgKzIwOCw2IEBAIHZvaWQgV2ViUG9wdXBNZW51UHJveHlXaW46OnNo
b3dQb3B1cE1lbnUKIAogICAgICAgICBpZiAoIW1fcG9wdXApCiAgICAgICAgICAgICByZXR1cm47
Ci0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIERpcmVjdDJEOjpjcmVhdGVEZXZpY2VBbmRD
b250ZXh0KG1fZDNkRGV2aWNlLCBtX2ltbWVkaWF0ZUNvbnRleHQpOwotICAgICAgICBzZXR1cFN3
YXBDaGFpbihtX3dpbmRvd1JlY3Quc2l6ZSgpKTsKLSNlbmRpZgogICAgIH0KIAogICAgIEJPT0wg
c2hvdWxkQW5pbWF0ZSA9IEZBTFNFOwpAQCAtODI4LDcgKzgxNiw2IEBAIHZvaWQgV2ViUG9wdXBN
ZW51UHJveHlXaW46OnBhaW50KGNvbnN0IEkKICAgICBpZiAoIW1fcG9wdXApCiAgICAgICAgIHJl
dHVybjsKIAotI2lmICFVU0UoRElSRUNUMkQpCiAgICAgaWYgKCFtX0RDKSB7CiAgICAgICAgIG1f
REMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyhIV25kREMobV9wb3B1cCkp
KTsKICAgICAgICAgaWYgKCFtX0RDKQpAQCAtODU0LDIyICs4NDEsNiBAQCB2b2lkIFdlYlBvcHVw
TWVudVByb3h5V2luOjpwYWludChjb25zdCBJCiAgICAgfQogCiAgICAgR3JhcGhpY3NDb250ZXh0
V2luIGNvbnRleHQobV9EQy5nZXQoKSk7Ci0jZWxzZQotICAgIENPTVB0cjxJRDNEMTFUZXh0dXJl
MkQ+IGJhY2tCdWZmZXI7IAotICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVy
KDAsIF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigm
YmFja0J1ZmZlcikpOyAKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybjsK
LQotICAgIENPTVB0cjxJRFhHSVN1cmZhY2UxPiBzdXJmYWNlKFF1ZXJ5LCBiYWNrQnVmZmVyKTsK
LSAgICBpZiAoIXN1cmZhY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVuZGVyVGFy
Z2V0ID0gV2ViQ29yZTo6RGlyZWN0MkQ6OmNyZWF0ZVN1cmZhY2VSZW5kZXJUYXJnZXQoc3VyZmFj
ZS5nZXQoKSk7Ci0KLSAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCBwbGF0Zm9ybUNvbnRleHQo
cmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0RDNERGV2aWNlKG1f
ZDNkRGV2aWNlLmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHRXaW4gY29udGV4dCgmcGxhdGZv
cm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpH
UFVNZW1vcnkpOwotI2VuZGlmCiAKICAgICBJbnRSZWN0IHRyYW5zbGF0ZWREYW1hZ2VSZWN0ID0g
ZGFtYWdlUmVjdDsKICAgICB0cmFuc2xhdGVkRGFtYWdlUmVjdC5tb3ZlKEludFNpemUoMCwgbV9z
Y3JvbGxPZmZzZXQgKiBtX2l0ZW1IZWlnaHQpKTsKQEAgLTg4NCwxNSArODU1LDEwIEBAIHZvaWQg
V2ViUG9wdXBNZW51UHJveHlXaW46OnBhaW50KGNvbnN0IEkKICAgICBpZiAobV9zY3JvbGxiYXIp
CiAgICAgICAgIG1fc2Nyb2xsYmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKIAotI2lm
ICFVU0UoRElSRUNUMkQpCiAgICAgSFduZERDIGhXbmREQzsKICAgICBIREMgbG9jYWxEQyA9IGhk
YyA/IGhkYyA6IGhXbmREQy5zZXRIV25kKG1fcG9wdXApOwogCiAgICAgOjpCaXRCbHQobG9jYWxE
QywgZGFtYWdlUmVjdC54KCksIGRhbWFnZVJlY3QueSgpLCBkYW1hZ2VSZWN0LndpZHRoKCksIGRh
bWFnZVJlY3QuaGVpZ2h0KCksIG1fREMuZ2V0KCksIGRhbWFnZVJlY3QueCgpLCBkYW1hZ2VSZWN0
LnkoKSwgU1JDQ09QWSk7Ci0jZWxzZQotICAgIGNvbnRleHQuZmx1c2goKTsKLSAgICBtX3N3YXBD
aGFpbi0+UHJlc2VudCgwLCAwKTsgCi0jZW5kaWYKIH0KIAogYm9vbCBXZWJQb3B1cE1lbnVQcm94
eVdpbjo6c2V0Rm9jdXNlZEluZGV4KGludCBpLCBib29sIGhvdFRyYWNraW5nKQpAQCAtOTk1LDQ4
ICs5NjEsNiBAQCBib29sIFdlYlBvcHVwTWVudVByb3h5V2luOjpzY3JvbGxUb1JldmVhCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotdm9pZCBXZWJQb3B1cE1lbnVQ
cm94eVdpbjo6c2V0dXBTd2FwQ2hhaW4oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsK
LSAgICBtX3N3YXBDaGFpbiA9IERpcmVjdDJEOjpzd2FwQ2hhaW5PZlNpemVGb3JXaW5kb3dBbmRE
ZXZpY2Uoc2l6ZSwgbV9wb3B1cCwgbV9kM2REZXZpY2UpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1f
c3dhcENoYWluKTsKLSAgICBhdXRvIGZhY3RvcnkgPSBEaXJlY3QyRDo6ZmFjdG9yeUZvckRYR0lE
ZXZpY2UoRGlyZWN0MkQ6OnRvRFhHSURldmljZShtX2QzZERldmljZSkpOwotCi0gICAgZmFjdG9y
eS0+TWFrZVdpbmRvd0Fzc29jaWF0aW9uKG1fcG9wdXAsIDApOwotICAgIGNvbmZpZ3VyZUJhY2tp
bmdTdG9yZShzaXplKTsKLX0KLQotdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6Y29uZmlndXJl
QmFja2luZ1N0b3JlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi17Ci0gICAgQVNTRVJU
KG1fc3dhcENoYWluKTsKLSAgICBBU1NFUlQobV9kM2REZXZpY2UpOwotICAgIEFTU0VSVChtX2lt
bWVkaWF0ZUNvbnRleHQpOwotCi0gICAgLy8gQ3JlYXRlIGEgcmVuZGVyIHRhcmdldCB2aWV3IAot
ICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IGJhY2tCdWZmZXI7IAotICAgIEhSRVNVTFQgaHIg
PSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja0J1ZmZlcikpOyAKLSAgICBSRUxFQVNFX0FTU0VS
VChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0gbV9kM2REZXZpY2UtPkNyZWF0ZVJlbmRlclRh
cmdldFZpZXcoYmFja0J1ZmZlci5nZXQoKSwgbnVsbHB0ciwgJm1fcmVuZGVyVGFyZ2V0Vmlldyk7
IAotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgYXV0byogcmVuZGVy
VGFyZ2V0VmlldyA9IG1fcmVuZGVyVGFyZ2V0Vmlldy5nZXQoKTsKLSAgICBtX2ltbWVkaWF0ZUNv
bnRleHQtPk9NU2V0UmVuZGVyVGFyZ2V0cygxLCAmcmVuZGVyVGFyZ2V0VmlldywgbnVsbHB0cik7
Ci0KLSAgICAvLyBTZXR1cCB0aGUgdmlld3BvcnQgCi0gICAgRDNEMTFfVklFV1BPUlQgdmlld3Bv
cnQ7Ci0gICAgdmlld3BvcnQuV2lkdGggPSAoRkxPQVQpc2l6ZS53aWR0aCgpOwotICAgIHZpZXdw
b3J0LkhlaWdodCA9IChGTE9BVClzaXplLmhlaWdodCgpOwotICAgIHZpZXdwb3J0Lk1pbkRlcHRo
ID0gMC4wZjsKLSAgICB2aWV3cG9ydC5NYXhEZXB0aCA9IDEuMGY7Ci0gICAgdmlld3BvcnQuVG9w
TGVmdFggPSAwOwotICAgIHZpZXdwb3J0LlRvcExlZnRZID0gMDsKLSAgICBtX2ltbWVkaWF0ZUNv
bnRleHQtPlJTU2V0Vmlld3BvcnRzKDEsICZ2aWV3cG9ydCk7Ci0KLSAgICBtX2ltbWVkaWF0ZUNv
bnRleHQtPkNsZWFyUmVuZGVyVGFyZ2V0VmlldyhtX3JlbmRlclRhcmdldFZpZXcuZ2V0KCksIERp
cmVjdFg6OkNvbG9yczo6QmxhbmNoZWRBbG1vbmQpOyAKLX0KLSNlbmRpZgotCiBTdHJpbmcgV2Vi
UG9wdXBNZW51UHJveHlXaW46OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAogewogICAgIHJldHVy
biBtYWtlU3RyaW5nKCJXZWJQb3B1cE1lbnVQcm94eVdpbiAweCIsIGhleChyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4odGhpcyksIExvd2VyY2FzZSkpOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmgJKHJldmlzaW9uIDI4
NzgwMykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdp
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMyArMzMsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
U2Nyb2xsYWJsZUFyZWEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhci5oPgogCi0jaWYg
VVNFKERJUkVDVDJEKQotaW50ZXJmYWNlIElEM0QxMURldmljZTE7Ci1pbnRlcmZhY2UgSUQzRDEx
RGV2aWNlQ29udGV4dDE7Ci1pbnRlcmZhY2UgSUQzRDExUmVuZGVyVGFyZ2V0VmlldzsKLWludGVy
ZmFjZSBJRFhHSVN3YXBDaGFpbjsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xh
c3MgV2ViVmlldzsKQEAgLTEzMSwyMyArMTI0LDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbmNy
ZW1lbnRXaGVlbERlbHRhKGludCBkZWx0YSk7CiAgICAgdm9pZCByZWR1Y2VXaGVlbERlbHRhKGlu
dCBkZWx0YSk7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgdm9pZCBzZXR1cFN3YXBDaGFpbihj
b25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdm9pZCBjb25maWd1cmVCYWNraW5nU3RvcmUo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotI2VuZGlmCi0KICAgICBXZWJWaWV3KiBtX3dlYlZp
ZXc7CiAgICAgVmVjdG9yPFdlYlBvcHVwSXRlbT4gbV9pdGVtczsKICAgICBQbGF0Zm9ybVBvcHVw
TWVudURhdGEgbV9kYXRhOwogICAgIGludCBtX25ld1NlbGVjdGVkSW5kZXggeyAwIH07CiAKICAg
ICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX3Njcm9sbGJhcjsKLSNpZiBVU0UoRElSRUNU
MkQpCi0gICAgQ09NUHRyPElEM0QxMURldmljZTE+IG1fZDNkRGV2aWNlOwotICAgIENPTVB0cjxJ
RDNEMTFEZXZpY2VDb250ZXh0MT4gbV9pbW1lZGlhdGVDb250ZXh0OwotICAgIENPTVB0cjxJRDNE
MTFSZW5kZXJUYXJnZXRWaWV3PiBtX3JlbmRlclRhcmdldFZpZXc7IAotICAgIENPTVB0cjxJRFhH
SVN3YXBDaGFpbj4gbV9zd2FwQ2hhaW47Ci0jZW5kaWYKICAgICBHRElPYmplY3Q8SERDPiBtX0RD
OwogICAgIEdESU9iamVjdDxIQklUTUFQPiBtX2JtcDsKICAgICBIV05EIG1fcG9wdXAgeyBudWxs
cHRyIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCShyZXZp
c2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY4LDE0ICs2OCw2IEBACiAjaW5jbHVkZSA8Y2Fpcm8uaD4KICNl
bmRpZiAKIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJEVXRp
bGl0aWVzLmg+Ci0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2luY2x1ZGUgPGRpcmVjdHhjb2xvcnMu
aD4gCi0jaW5jbHVkZSA8ZHhnaS5oPgotI2VuZGlmCi0KLQogbmFtZXNwYWNlIFdlYktpdCB7CiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMjQzLDExICsyMzUsNiBAQCBXZWJWaWV3OjpX
ZWJWaWV3KFJFQ1QgcmVjdCwgY29uc3QgQVBJOjpQCiAgICAgbV9wYWdlLT5pbml0aWFsaXplV2Vi
UGFnZSgpOwogCiAgICAgSW50U2l6ZSB3aW5kb3dTaXplKHJlY3QucmlnaHQgLSByZWN0LmxlZnQs
IHJlY3QuYm90dG9tIC0gcmVjdC50b3ApOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBEaXJlY3Qy
RDo6Y3JlYXRlRGV2aWNlQW5kQ29udGV4dChtX2QzZERldmljZSwgbV9pbW1lZGlhdGVDb250ZXh0
KTsKLSAgICBtX3BhZ2UtPnNldERldmljZShtX2QzZERldmljZS5nZXQoKSk7Ci0gICAgc2V0dXBT
d2FwQ2hhaW4od2luZG93U2l6ZSk7Ci0jZW5kaWYKIAogICAgIGlmIChtX3BhZ2UtPmRyYXdpbmdB
cmVhKCkpCiAgICAgICAgIG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2V0U2l6ZSh3aW5kb3dTaXpl
KTsKQEAgLTU3MywyMSArNTYwLDYgQEAgTFJFU1VMVCBXZWJWaWV3OjpvblNpemVFdmVudChIV05E
IGh3bmQsIAogICAgICAgICBtX25leHRSZXNpemVTY3JvbGxPZmZzZXQgPSBJbnRTaXplKCk7CiAg
ICAgfQogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIGlmIChtX3N3YXBDaGFpbikgewotICAgICAg
ICBtX2ltbWVkaWF0ZUNvbnRleHQtPk9NU2V0UmVuZGVyVGFyZ2V0cygwLCBudWxscHRyLCBudWxs
cHRyKTsKLQotICAgICAgICBtX3JlbmRlclRhcmdldFZpZXcgPSBudWxscHRyOwotCi0gICAgICAg
IC8vIFByZXNlcnZlIHRoZSBleGlzdGluZyBidWZmZXIgY291bnQgKHBhc3MgemVybyBmb3IgY291
bnQpIGFuZCBmb3JtYXQgKGJ5IHBhc3NpbmcgRFhHSV9GT1JNQVRfVU5LTk9XTikuCi0gICAgICAg
IC8vIEF1dG9tYXRpY2FsbHkgY2hvb3NlIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHRvIG1hdGNoIHRo
ZSBjbGllbnQgcmVjdCBmb3IgdGhlIGJhY2tpbmcgd2luZG93IChwYXNzIHplcm9zIGZvciB3aWR0
aC9oZWlnaHQpLgotICAgICAgICBIUkVTVUxUIGhyID0gbV9zd2FwQ2hhaW4tPlJlc2l6ZUJ1ZmZl
cnMoMCwgMCwgMCwgRFhHSV9GT1JNQVRfVU5LTk9XTiwgRFhHSV9TV0FQX0NIQUlOX0ZMQUdfR0RJ
X0NPTVBBVElCTEUpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQot
ICAgICAgICBjb25maWd1cmVCYWNraW5nU3RvcmUod2luZG93U2l6ZSk7Ci0gICAgfQotI2VuZGlm
Ci0KICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTk3NCw1MCArOTQ2
LDQgQEAgdm9pZCBXZWJWaWV3OjpzZXRUb29sVGlwKGNvbnN0IFN0cmluZyYgdAogICAgIDo6U2Vu
ZE1lc3NhZ2UobV90b29sVGlwV2luZG93LCBUVE1fQUNUSVZBVEUsICF0b29sVGlwLmlzRW1wdHko
KSwgMCk7CiB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi12b2lkIFdlYlZpZXc6OnNldHVwU3dhcENo
YWluKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi17Ci0gICAgaWYgKCFtX2QzZERldmlj
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zd2FwQ2hhaW4gPSBEaXJlY3QyRDo6c3dhcENo
YWluT2ZTaXplRm9yV2luZG93QW5kRGV2aWNlKHNpemUsIG1fd2luZG93LCBtX2QzZERldmljZSk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9zd2FwQ2hhaW4pOwotCi0gICAgYXV0byBmYWN0b3J5ID0g
RGlyZWN0MkQ6OmZhY3RvcnlGb3JEWEdJRGV2aWNlKERpcmVjdDJEOjp0b0RYR0lEZXZpY2UobV9k
M2REZXZpY2UpKTsKLQotICAgIGZhY3RvcnktPk1ha2VXaW5kb3dBc3NvY2lhdGlvbihtX3dpbmRv
dywgMCk7Ci0gICAgY29uZmlndXJlQmFja2luZ1N0b3JlKHNpemUpOwotfQotCi12b2lkIFdlYlZp
ZXc6OmNvbmZpZ3VyZUJhY2tpbmdTdG9yZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQot
ewotICAgIEFTU0VSVChtX3N3YXBDaGFpbik7Ci0gICAgQVNTRVJUKG1fZDNkRGV2aWNlKTsKLSAg
ICBBU1NFUlQobV9pbW1lZGlhdGVDb250ZXh0KTsKLQotICAgIC8vIENyZWF0ZSBhIHJlbmRlciB0
YXJnZXQgdmlldyAKLSAgICBDT01QdHI8SUQzRDExVGV4dHVyZTJEPiBiYWNrQnVmZmVyOyAKLSAg
ICBIUkVTVUxUIGhyID0gbV9zd2FwQ2hhaW4tPkdldEJ1ZmZlcigwLCBfX3V1aWRvZihJRDNEMTFU
ZXh0dXJlMkQpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmJhY2tCdWZmZXIpKTsgCi0gICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBociA9IG1fZDNkRGV2aWNlLT5D
cmVhdGVSZW5kZXJUYXJnZXRWaWV3KGJhY2tCdWZmZXIuZ2V0KCksIG51bGxwdHIsICZtX3JlbmRl
clRhcmdldFZpZXcpOyAKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAg
IGF1dG8qIHJlbmRlclRhcmdldFZpZXcgPSBtX3JlbmRlclRhcmdldFZpZXcuZ2V0KCk7Ci0gICAg
bV9pbW1lZGlhdGVDb250ZXh0LT5PTVNldFJlbmRlclRhcmdldHMoMSwgJnJlbmRlclRhcmdldFZp
ZXcsIG51bGxwdHIpOwotCi0gICAgLy8gU2V0dXAgdGhlIHZpZXdwb3J0IAotICAgIEQzRDExX1ZJ
RVdQT1JUIHZpZXdwb3J0OwotICAgIHZpZXdwb3J0LldpZHRoID0gKEZMT0FUKXNpemUud2lkdGgo
KTsKLSAgICB2aWV3cG9ydC5IZWlnaHQgPSAoRkxPQVQpc2l6ZS5oZWlnaHQoKTsKLSAgICB2aWV3
cG9ydC5NaW5EZXB0aCA9IDAuMGY7Ci0gICAgdmlld3BvcnQuTWF4RGVwdGggPSAxLjBmOwotICAg
IHZpZXdwb3J0LlRvcExlZnRYID0gMDsKLSAgICB2aWV3cG9ydC5Ub3BMZWZ0WSA9IDA7Ci0gICAg
bV9pbW1lZGlhdGVDb250ZXh0LT5SU1NldFZpZXdwb3J0cygxLCAmdmlld3BvcnQpOwotCi0gICAg
bV9pbW1lZGlhdGVDb250ZXh0LT5DbGVhclJlbmRlclRhcmdldFZpZXcobV9yZW5kZXJUYXJnZXRW
aWV3LmdldCgpLCBEaXJlY3RYOjpDb2xvcnM6Ok1pZG5pZ2h0Qmx1ZSk7IAotfQotI2VuZGlmCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2lu
L1dlYlZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2Vi
Vmlldy5oCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4v
V2ViVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsNiBAQAogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi0jaWYgVVNFKERJUkVDVDJE
KQotaW50ZXJmYWNlIElEM0QxMURldmljZTE7Ci1pbnRlcmZhY2UgSUQzRDExRGV2aWNlQ29udGV4
dDE7Ci1pbnRlcmZhY2UgSUQzRDExUmVuZGVyVGFyZ2V0VmlldzsKLWludGVyZmFjZSBJRFhHSVN3
YXBDaGFpbjsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRTaXplOwog
fQpAQCAtODMsMTEgKzc2LDYgQEAgcHVibGljOgogCiAgICAgRHJhd2luZ0FyZWFQcm94eSogZHJh
d2luZ0FyZWEoKSB7IHJldHVybiBwYWdlKCkgPyBwYWdlKCktPmRyYXdpbmdBcmVhKCkgOiBudWxs
cHRyOyB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgSUQzRDExRGV2aWNlMSogZDNkRGV2aWNl
KCkgY29uc3QgeyByZXR1cm4gbV9kM2REZXZpY2UuZ2V0KCk7IH0KLSAgICBJRDNEMTFEZXZpY2VD
b250ZXh0MSogZDNkSW1tZWRpYXRlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faW1tZWRpYXRl
Q29udGV4dC5nZXQoKTsgfQotI2VuZGlmCi0KIHByaXZhdGU6CiAgICAgV2ViVmlldyhSRUNULCBj
b25zdCBBUEk6OlBhZ2VDb25maWd1cmF0aW9uJiwgSFdORCBwYXJlbnRXaW5kb3cpOwogCkBAIC0x
NDQsMTEgKzEzMiw2IEBAIHByaXZhdGU6CiAgICAgLy8gV2ViQ29yZTo6V2luZG93TWVzc2FnZUxp
c3RlbmVyCiAgICAgdmlydHVhbCB2b2lkIHdpbmRvd1JlY2VpdmVkTWVzc2FnZShIV05ELCBVSU5U
IG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2b2lk
IHNldHVwU3dhcENoYWluKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSAgICB2b2lkIGNvbmZp
Z3VyZUJhY2tpbmdTdG9yZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0jZW5kaWYKLQogICAg
IEhXTkQgbV93aW5kb3cgeyBudWxscHRyIH07CiAgICAgSFdORCBtX3RvcExldmVsUGFyZW50V2lu
ZG93IHsgbnVsbHB0ciB9OwogICAgIEhXTkQgbV90b29sVGlwV2luZG93IHsgbnVsbHB0ciB9OwpA
QCAtMTY4LDEyICsxNTEsNiBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYktp
dDo6UGFnZUNsaWVudEltcGw+IG1fcGFnZUNsaWVudDsKICAgICBSZWZQdHI8V2ViUGFnZVByb3h5
PiBtX3BhZ2U7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRDNEMTFEZXZpY2UxPiBt
X2QzZERldmljZTsKLSAgICBDT01QdHI8SUQzRDExRGV2aWNlQ29udGV4dDE+IG1faW1tZWRpYXRl
Q29udGV4dDsKLSAgICBDT01QdHI8SUQzRDExUmVuZGVyVGFyZ2V0Vmlldz4gbV9yZW5kZXJUYXJn
ZXRWaWV3OyAKLSAgICBDT01QdHI8SURYR0lTd2FwQ2hhaW4+IG1fc3dhcENoYWluOwotI2VuZGlm
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUuY3BwCShyZXZp
c2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUG9wdXBNZW51LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDEyICsxMTUsNiBAQCB2b2lk
IFdlYlBvcHVwTWVudTo6c2hvdyhjb25zdCBJbnRSZWN0JiByCiAgICAgc2V0VXBQbGF0Zm9ybURh
dGEocGFnZUNvb3JkaW5hdGVzLCBwbGF0Zm9ybURhdGEpOwogCiAgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpTaG93UG9wdXBNZW51KHBhZ2VDb29yZGluYXRlcywgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KG1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgpLnRleHREaXJlY3Rpb24oKSksIGl0ZW1zLCBz
ZWxlY3RlZEluZGV4LCBwbGF0Zm9ybURhdGEpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7Ci0KLSNp
ZiBVU0UoRElSRUNUMkQpCi0gICAgLy8gRG9uJ3QgZGVzdHJveSB0aGUgc2hhcmVkIGhhbmRsZSBp
biB0aGUgV2ViQ29udGVudCBwcm9jZXNzLiBJdCB3aWxsIGJlIGRlc3Ryb3llZCBpbiB0aGUgVUlQ
cm9jZXNzLgotICAgIHBsYXRmb3JtRGF0YS5tX25vdFNlbGVjdGVkQmFja2luZ1N0b3JlLT5sZWFr
U2hhcmVkUmVzb3VyY2UoKTsKLSAgICBwbGF0Zm9ybURhdGEubV9zZWxlY3RlZEJhY2tpbmdTdG9y
ZS0+bGVha1NoYXJlZFJlc291cmNlKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBXZWJQb3B1cE1lbnU6
OmhpZGUoKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0ZpbmRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NTEsMTAgKzM1MSw2IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmdldEltYWdlRm9yRmluZE1hdGMK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkRpZEdldEltYWdlRm9yRmluZE1hdGNoKGhhbmRsZSwgbWF0Y2hJbmRleCkpOwotI2lm
IFVTRShESVJFQ1QyRCkKLSAgICAvLyBEb24ndCBkZXN0cm95IHRoZSBzaGFyZWQgaGFuZGxlIGlu
IHRoZSBXZWJDb250ZW50IHByb2Nlc3MuIEl0IHdpbGwgYmUgZGVzdHJveWVkIGluIHRoZSBVSVBy
b2Nlc3MuCi0gICAgc2VsZWN0aW9uU25hcHNob3QtPmxlYWtTaGFyZWRSZXNvdXJjZSgpOwotI2Vu
ZGlmCiB9CiAKIHZvaWQgRmluZENvbnRyb2xsZXI6OnNlbGVjdEZpbmRNYXRjaCh1aW50MzJfdCBt
YXRjaEluZGV4KQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAkocmV2aXNpb24gMjg3ODAzKQor
KysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9E
cmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Mywx
NCArNDMsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9TZXR0aW5ncy5oPgogCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4
dERpcmVjdDJELmg+Ci0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQzZDExXzEuaD4KLSNl
bmRpZgotCi0KICNpZiBVU0UoR0xJQl9FVkVOVF9MT09QKQogI2luY2x1ZGUgPHd0Zi9nbGliL1J1
bkxvb3BTb3VyY2VQcmlvcml0eS5oPgogI2VuZGlmCkBAIC04NjIsMTAgKzg1NCw2IEBAIHZvaWQg
RHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzOjpkaXMKICAgICAgICAgdXBkYXRlSW5mby51
cGRhdGVSZWN0cy5hcHBlbmQocmVjdCk7CiAgICAgfQogCi0jaWYgVVNFKERJUkVDVDJEKQotICAg
IGJpdG1hcC0+bGVha1NoYXJlZFJlc291cmNlKCk7IC8vIEl0IHdpbGwgYmUgZGVzdHJveWVkIGlu
IHRoZSBVSVByb2Nlc3MuCi0jZW5kaWYKLQogICAgIG1fd2ViUGFnZS5kaWRVcGRhdGVSZW5kZXJp
bmcoKTsKIAogICAgIC8vIExheW91dCBjYW4gdHJpZ2dlciBtb3JlIGNhbGxzIHRvIHNldE5lZWRz
RGlzcGxheSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBwcm9jZXNzIHRoZW0KSW5kZXg6IFNvdXJjZS9X
ZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAxLTA3ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgRGly
ZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
NDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
UGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIEFsZXggQ2hyaXN0ZW5z
ZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZl
cnRpbmcgcjI4NzY5OC4KSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvUGxhdGZvcm1GVFcuY21h
a2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9QbGF0Zm9ybUZUVy5jbWFrZQko
cmV2aXNpb24gMjg3ODAzKQorKysgU291cmNlL1dlYktpdExlZ2FjeS9QbGF0Zm9ybUZUVy5jbWFr
ZQkobm9uZXhpc3RlbnQpCkBAIC0xLDQzOCArMCwwIEBACi1hZGRfZGVmaW5pdGlvbnMoLURVU0Vf
RElSRUNUMkQ9MSAtRFVTRV9DVVJMPTEgLURXRUJLSVRfRVhQT1JUUz0xKQotbGlzdChBUFBFTkQg
V2ViS2l0TGVnYWN5X1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICIke1dFQktJVF9M
SUJSQVJJRVNfRElSfS9pbmNsdWRlIgotKQotbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X1NPVVJD
RVNfQ2xhc3NlcwotICAgIHdpbi9XZWJEb3dubG9hZENVUkwuY3BwCi0gICAgd2luL1dlYlVSTEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2VuZGVyQ1VSTC5jcHAKLSkKLWxpc3QoQVBQRU5EIFdlYktp
dExlZ2FjeV9QUklWQVRFX0xJQlJBUklFUwotICAgIE9wZW5TU0w6OlNTTAotICAgIEQzRDExLmxp
YgotICAgIER4Z2kubGliCi0gICAgbWZ1dWlkLmxpYgotICAgIHN0cm1paWRzLmxpYgotKQotCi1h
ZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgT1VUUFVUICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09V
UkNFU19ESVJ9L1dlYktpdFZlcnNpb24uaAotICAgIE1BSU5fREVQRU5ERU5DWSAke1dFQktJVExF
R0FDWV9ESVJ9L3NjcmlwdHMvZ2VuZXJhdGUtd2Via2l0dmVyc2lvbi5wbAotICAgIERFUEVORFMg
JHtXRUJLSVRMRUdBQ1lfRElSfS9tYWMvQ29uZmlndXJhdGlvbnMvVmVyc2lvbi54Y2NvbmZpZwot
ICAgIENPTU1BTkQgJHtQRVJMX0VYRUNVVEFCTEV9ICR7V0VCS0lUTEVHQUNZX0RJUn0vc2NyaXB0
cy9nZW5lcmF0ZS13ZWJraXR2ZXJzaW9uLnBsIC0tY29uZmlnICR7V0VCS0lUTEVHQUNZX0RJUn0v
bWFjL0NvbmZpZ3VyYXRpb25zL1ZlcnNpb24ueGNjb25maWcgLS1vdXRwdXREaXIgJHtXZWJLaXRM
ZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0KLSAgICBWRVJCQVRJTSkKLWxpc3QoQVBQRU5EIFdl
YktpdExlZ2FjeV9TT1VSQ0VTICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L1dl
YktpdFZlcnNpb24uaCkKLQotbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X1BSSVZBVEVfSU5DTFVE
RV9ESVJFQ1RPUklFUwotICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9Ly4uL2luY2x1ZGUvcHJpdmF0
ZSIKLSAgICAiJHtDTUFLRV9CSU5BUllfRElSfS8uLi9pbmNsdWRlL3ByaXZhdGUvSmF2YVNjcmlw
dENvcmUiCi0gICAgIiR7Q01BS0VfQklOQVJZX0RJUn0vLi4vaW5jbHVkZS9wcml2YXRlL1dlYkNv
cmUiCi0gICAgIiR7V0VCS0lUTEVHQUNZX0RJUn0vd2luIgotICAgICIke1dFQktJVExFR0FDWV9E
SVJ9L3dpbi9XZWJDb3JlU3VwcG9ydCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VS
Q0VTX0RJUn0vaW5jbHVkZSIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJ
Un0vSW50ZXJmYWNlcyIKLSkKLQotbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X0lOQ0xVREVTCi0g
ICAgd2luL0NGRGljdGlvbmFyeVByb3BlcnR5QmFnLmgKLSAgICB3aW4vQ09NRW51bVZhcmlhbnQu
aAotICAgIHdpbi9DT01Qcm9wZXJ0eUJhZy5oCi0gICAgd2luL0NPTVZhcmlhbnRTZXR0ZXIuaAot
ICAgIHdpbi9Db2RlQW5hbHlzaXNDb25maWcuaAotICAgIHdpbi9ET01DU1NDbGFzc2VzLmgKLSAg
ICB3aW4vRE9NQ29yZUNsYXNzZXMuaAotICAgIHdpbi9ET01FdmVudHNDbGFzc2VzLmgKLSAgICB3
aW4vRE9NSFRNTENsYXNzZXMuaAotICAgIHdpbi9EZWZhdWx0RG93bmxvYWREZWxlZ2F0ZS5oCi0g
ICAgd2luL0RlZmF1bHRQb2xpY3lEZWxlZ2F0ZS5oCi0gICAgd2luL0ZvckVhY2hDb0NsYXNzLmgK
LSAgICB3aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5oCi0gICAgd2luL01hcnNoYWxsaW5n
SGVscGVycy5oCi0gICAgd2luL01lbW9yeVN0cmVhbS5oCi0gICAgd2luL1Byb2dJRE1hY3Jvcy5o
Ci0gICAgd2luL1dlYkFjdGlvblByb3BlcnR5QmFnLmgKLSAgICB3aW4vV2ViQXBwbGljYXRpb25D
YWNoZS5oCi0gICAgd2luL1dlYkFyY2hpdmUuaAotICAgIHdpbi9XZWJCYWNrRm9yd2FyZExpc3Qu
aAotICAgIHdpbi9XZWJDYWNoZS5oCi0gICAgd2luL1dlYkNhY2hlZEZyYW1lUGxhdGZvcm1EYXRh
LmgKLSAgICB3aW4vV2ViQ29yZVN0YXRpc3RpY3MuaAotICAgIHdpbi9XZWJEYXRhU291cmNlLmgK
LSAgICB3aW4vV2ViRGF0YWJhc2VNYW5hZ2VyLmgKLSAgICB3aW4vV2ViRG9jdW1lbnRMb2FkZXIu
aAotICAgIHdpbi9XZWJEb3dubG9hZC5oCi0gICAgd2luL1dlYkRyb3BTb3VyY2UuaAotICAgIHdp
bi9XZWJFbGVtZW50UHJvcGVydHlCYWcuaAotICAgIHdpbi9XZWJFcnJvci5oCi0gICAgd2luL1dl
YkZyYW1lLmgKLSAgICB3aW4vV2ViRnJhbWVQb2xpY3lMaXN0ZW5lci5oCi0gICAgd2luL1dlYkdl
b2xvY2F0aW9uUG9saWN5TGlzdGVuZXIuaAotICAgIHdpbi9XZWJHZW9sb2NhdGlvblBvc2l0aW9u
LmgKLSAgICB3aW4vV2ViSFRNTFJlcHJlc2VudGF0aW9uLmgKLSAgICB3aW4vV2ViSGlzdG9yeS5o
Ci0gICAgd2luL1dlYkhpc3RvcnlJdGVtLmgKLSAgICB3aW4vV2ViSmF2YVNjcmlwdENvbGxlY3Rv
ci5oCi0gICAgd2luL1dlYktpdENPTUFQSS5oCi0gICAgd2luL1dlYktpdENsYXNzRmFjdG9yeS5o
Ci0gICAgd2luL1dlYktpdERMTC5oCi0gICAgd2luL1dlYktpdEdyYXBoaWNzLmgKLSAgICB3aW4v
V2ViS2l0TG9nZ2luZy5oCi0gICAgd2luL1dlYktpdFN0YXRpc3RpY3MuaAotICAgIHdpbi9XZWJL
aXRTdGF0aXN0aWNzUHJpdmF0ZS5oCi0gICAgd2luL1dlYktpdFN5c3RlbUJpdHMuaAotICAgIHdp
bi9XZWJMb2NhbGl6YWJsZVN0cmluZ3MuaAotICAgIHdpbi9XZWJNdXRhYmxlVVJMUmVxdWVzdC5o
Ci0gICAgd2luL1dlYk5hdmlnYXRpb25EYXRhLmgKLSAgICB3aW4vV2ViTm90aWZpY2F0aW9uLmgK
LSAgICB3aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVyLmgKLSAgICB3aW4vV2ViUHJlZmVyZW5jZUtl
eXNQcml2YXRlLmgKLSAgICB3aW4vV2ViUHJlZmVyZW5jZXMuaAotICAgIHdpbi9XZWJSZXNvdXJj
ZS5oCi0gICAgd2luL1dlYlNjcmlwdE9iamVjdC5oCi0gICAgd2luL1dlYlNjcmlwdFdvcmxkLmgK
LSAgICB3aW4vV2ViU2VjdXJpdHlPcmlnaW4uaAotICAgIHdpbi9XZWJTZXJpYWxpemVkSlNWYWx1
ZS5oCi0gICAgd2luL1dlYlRleHRSZW5kZXJlci5oCi0gICAgd2luL1dlYlVSTEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlLmgKLSAgICB3aW4vV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTZW5k
ZXIuaAotICAgIHdpbi9XZWJVUkxDcmVkZW50aWFsLmgKLSAgICB3aW4vV2ViVVJMUHJvdGVjdGlv
blNwYWNlLmgKLSAgICB3aW4vV2ViVVJMUmVzcG9uc2UuaAotICAgIHdpbi9XZWJVc2VyQ29udGVu
dFVSTFBhdHRlcm4uaAotICAgIHdpbi9XZWJWaWV3LmgKLSAgICB3aW4vV2ViV29ya2Vyc1ByaXZh
dGUuaAotKQotCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfU09VUkNFU19DbGFzc2VzCi0gICAg
d2luL0FjY2Vzc2libGVCYXNlLmNwcAotICAgIHdpbi9BY2Nlc3NpYmxlRG9jdW1lbnQuY3BwCi0g
ICAgd2luL0FjY2Vzc2libGVJbWFnZS5jcHAKLSAgICB3aW4vQWNjZXNzaWJsZVRleHRJbXBsLmNw
cAotICAgIHdpbi9CYWNrRm9yd2FyZExpc3QuY3BwCi0gICAgd2luL0NGRGljdGlvbmFyeVByb3Bl
cnR5QmFnLmNwcAotICAgIHdpbi9ET01DU1NDbGFzc2VzLmNwcAotICAgIHdpbi9ET01Db3JlQ2xh
c3Nlcy5jcHAKLSAgICB3aW4vRE9NRXZlbnRzQ2xhc3Nlcy5jcHAKLSAgICB3aW4vRE9NSFRNTENs
YXNzZXMuY3BwCi0gICAgd2luL0RlZmF1bHREb3dubG9hZERlbGVnYXRlLmNwcAotICAgIHdpbi9E
ZWZhdWx0UG9saWN5RGVsZWdhdGUuY3BwCi0gICAgd2luL0ZvckVhY2hDb0NsYXNzLmNwcAotICAg
IHdpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcAotICAgIHdpbi9NYXJzaGFsbGluZ0hl
bHBlcnMuY3BwCi0gICAgd2luL01lbW9yeVN0cmVhbS5jcHAKLSAgICB3aW4vV2ViQWN0aW9uUHJv
cGVydHlCYWcuY3BwCi0gICAgd2luL1dlYkFwcGxpY2F0aW9uQ2FjaGUuY3BwCi0gICAgd2luL1dl
YkFyY2hpdmUuY3BwCi0gICAgd2luL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKLSAgICB3aW4vV2Vi
Q2FjaGUuY3BwCi0gICAgd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAotICAgIHdpbi9XZWJEYXRh
U291cmNlLmNwcAotICAgIHdpbi9XZWJEYXRhYmFzZU1hbmFnZXIuY3BwCi0gICAgd2luL1dlYkRv
Y3VtZW50TG9hZGVyLmNwcAotICAgIHdpbi9XZWJEb3dubG9hZC5jcHAKLSAgICB3aW4vV2ViRHJv
cFNvdXJjZS5jcHAKLSAgICB3aW4vV2ViRWxlbWVudFByb3BlcnR5QmFnLmNwcAotICAgIHdpbi9X
ZWJFcnJvci5jcHAKLSAgICB3aW4vV2ViRnJhbWUuY3BwCi0gICAgd2luL1dlYkZyYW1lUG9saWN5
TGlzdGVuZXIuY3BwCi0gICAgd2luL1dlYkdlb2xvY2F0aW9uUG9saWN5TGlzdGVuZXIuY3BwCi0g
ICAgd2luL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uY3BwCi0gICAgd2luL1dlYkhUTUxSZXByZXNl
bnRhdGlvbi5jcHAKLSAgICB3aW4vV2ViSGlzdG9yeS5jcHAKLSAgICB3aW4vV2ViSGlzdG9yeUl0
ZW0uY3BwCi0gICAgd2luL1dlYkluc3BlY3Rvci5jcHAKLSAgICB3aW4vV2ViSmF2YVNjcmlwdENv
bGxlY3Rvci5jcHAKLSAgICB3aW4vV2ViS2l0Q09NQVBJLmNwcAotICAgIHdpbi9XZWJLaXRDbGFz
c0ZhY3RvcnkuY3BwCi0gICAgd2luL1dlYktpdERMTC5jcHAKLSAgICB3aW4vV2ViS2l0TG9nZ2lu
Zy5jcHAKLSAgICB3aW4vV2ViS2l0TWVzc2FnZUxvb3AuY3BwCi0gICAgd2luL1dlYktpdFN0YXRp
c3RpY3MuY3BwCi0gICAgd2luL1dlYktpdFN5c3RlbUJpdHMuY3BwCi0gICAgd2luL1dlYkxvY2Fs
aXphYmxlU3RyaW5ncy5jcHAKLSAgICB3aW4vV2ViTXV0YWJsZVVSTFJlcXVlc3QuY3BwCi0gICAg
d2luL1dlYk5hdmlnYXRpb25EYXRhLmNwcAotICAgIHdpbi9XZWJOb2RlSGlnaGxpZ2h0LmNwcAot
ICAgIHdpbi9XZWJOb3RpZmljYXRpb24uY3BwCi0gICAgd2luL1dlYk5vdGlmaWNhdGlvbkNlbnRl
ci5jcHAKLSAgICB3aW4vV2ViUHJlZmVyZW5jZXMuY3BwCi0gICAgd2luL1dlYlJlc291cmNlLmNw
cAotICAgIHdpbi9XZWJTY3JpcHRPYmplY3QuY3BwCi0gICAgd2luL1dlYlNjcmlwdFdvcmxkLmNw
cAotICAgIHdpbi9XZWJTZWN1cml0eU9yaWdpbi5jcHAKLSAgICB3aW4vV2ViU2VyaWFsaXplZEpT
VmFsdWUuY3BwCi0gICAgd2luL1dlYlRleHRSZW5kZXJlci5jcHAKLSAgICB3aW4vV2ViVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UuY3BwCi0gICAgd2luL1dlYlVSTEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlU2VuZGVyLmNwcAotICAgIHdpbi9XZWJVUkxDcmVkZW50aWFsLmNwcAotICAgIHdpbi9X
ZWJVUkxQcm90ZWN0aW9uU3BhY2UuY3BwCi0gICAgd2luL1dlYlVSTFJlc3BvbnNlLmNwcAotICAg
IHdpbi9XZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwCi0gICAgd2luL1dlYlZpZXcuY3BwCi0g
ICAgd2luL1dlYldvcmtlcnNQcml2YXRlLmNwcAotCi0gICAgd2luL3N0b3JhZ2UvV2ViRGF0YWJh
c2VQcm92aWRlci5jcHAKLSkKLQotbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X1NPVVJDRVNfV2Vi
Q29yZVN1cHBvcnQKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHQuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAK
LSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKLSAgICB3aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkNvbnRleHRNZW51Q2xpZW50LmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRGVza3Rv
cE5vdGlmaWNhdGlvbnNEZWxlZ2F0ZS5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRGVz
a3RvcE5vdGlmaWNhdGlvbnNEZWxlZ2F0ZS5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkRy
YWdDbGllbnQuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaAotICAg
IHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCi0gICAgd2luL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50LmNwcAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNs
aWVudC5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQu
Y3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaAot
ICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5jcHAKLSAgICB3aW4v
V2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQuaAotICAgIHdpbi9XZWJDb3JlU3Vw
cG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYklu
c3BlY3RvckNsaWVudC5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckRlbGVn
YXRlLmNwcAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JEZWxlZ2F0ZS5oCi0g
ICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKLSAgICB3aW4v
V2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKLSAgICB3aW4vV2ViQ29yZVN1
cHBvcnQvV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmNwcAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJQbHVnaW5JbmZvUHJvdmlkZXIuaAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVk
TGlua1N0b3JlLmNwcAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3Jl
LmgKLSkKLQotaWYgKFVTRV9DRikKLSAgICBsaXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfU09VUkNF
U19DbGFzc2VzCi0gICAgICAgIGNmL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudENG
LmNwcAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9MSUJSQVJJRVMKLSAg
ICAgICAgJHtDT1JFRk9VTkRBVElPTl9MSUJSQVJZfQotICAgICkKLWVuZGlmICgpCi0KLWlmIChD
T01QSUxFUl9JU19HQ0NfT1JfQ0xBTkcpCi0gICAgV0VCS0lUX0FERF9UQVJHRVRfQ1hYX0ZMQUdT
KFdlYktpdExlZ2FjeSAtV25vLW92ZXJsb2FkZWQtdmlydHVhbCkKLWVuZGlmICgpCi0KLWxpc3Qo
QVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VTICR7V2ViS2l0TGVnYWN5X0lOQ0xVREVTfSAke1dl
YktpdExlZ2FjeV9TT1VSQ0VTX0NsYXNzZXN9ICR7V2ViS2l0TGVnYWN5X1NPVVJDRVNfV2ViQ29y
ZVN1cHBvcnR9KQotCi1zb3VyY2VfZ3JvdXAoSW5jbHVkZXMgRklMRVMgJHtXZWJLaXRMZWdhY3lf
SU5DTFVERVN9KQotc291cmNlX2dyb3VwKENsYXNzZXMgRklMRVMgJHtXZWJLaXRMZWdhY3lfU09V
UkNFU19DbGFzc2VzfSkKLXNvdXJjZV9ncm91cChXZWJDb3JlU3VwcG9ydCBGSUxFUyAke1dlYktp
dExlZ2FjeV9TT1VSQ0VTX1dlYkNvcmVTdXBwb3J0fSkKLQotIyBCdWlsZCB0aGUgQ09NIGludGVy
ZmFjZToKLW1hY3JvKEdFTkVSQVRFX0lOVEVSRkFDRSBfaW5maWxlIF9kZWZpbmVzIF9kZXBlbmRz
KQotICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX2ZpbGV3ZSAke19pbmZpbGV9IE5BTUVfV0Up
Ci0gICAgYWRkX2N1c3RvbV9jb21tYW5kKAotICAgICAgICBPVVRQVVQgICR7V2ViS2l0TGVnYWN5
X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvJHtfZmlsZXdlfS5oCi0gICAgICAgIE1B
SU5fREVQRU5ERU5DWSAke19pbmZpbGV9Ci0gICAgICAgIERFUEVORFMgJHtfZGVwZW5kc30KLSAg
ICAgICAgQ09NTUFORCBtaWRsLmV4ZSAvSSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dp
bi9JbnRlcmZhY2VzIiAvSSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dpbi9JbnRlcmZh
Y2VzL0FjY2Vzc2libGUyIiAvSSAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0v
aW5jbHVkZSIgL0kgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS93aW4iIC9XWCAvY2hhciBz
aWduZWQgL2VudiB3aW4zMiAvdGxiICIke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0v
JHtfZmlsZXdlfS50bGIiIC9vdXQgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9
L0ludGVyZmFjZXMiIC9oICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRl
cmZhY2VzLyR7X2ZpbGV3ZX0uaCIgL2lpZCAiJHtfZmlsZXdlfV9pLmMiICR7X2RlZmluZXN9ICIk
e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vJHtfaW5maWxlfSIKLSAgICAgICAgVVNFU19URVJN
SU5BTCBWRVJCQVRJTSkKLSAgICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoJHtXZWJLaXRM
ZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy8ke19maWxld2V9LmggUFJPUEVS
VElFUyBHRU5FUkFURUQgVFJVRSkKLSAgICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoJHtX
ZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy8ke19maWxld2V9X2ku
YyBQUk9QRVJUSUVTIEdFTkVSQVRFRCBUUlVFKQotZW5kbWFjcm8oKQotCi1zZXQoTUlETF9ERUZJ
TkVTIC9EXCBcIl9fUFJPRFVDVElPTl9fPTAxXCIpCi0KLXNldChXRUJLSVRMRUdBQ1lfSURMX0RF
UEVOREVOQ0lFUwotICAgIHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGVDb21wYXJhYmxlLmlkbAot
ICAgIHdpbi9JbnRlcmZhY2VzL0RPTUNTUy5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9ET01Db3Jl
LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0RPTUV2ZW50cy5pZGwKLSAgICB3aW4vSW50ZXJmYWNl
cy9ET01FeHRlbnNpb25zLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0RPTUhUTUwuaWRsCi0gICAg
d2luL0ludGVyZmFjZXMvRE9NUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9ET01SYW5n
ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9ET01XaW5kb3cuaWRsCi0gICAgd2luL0ludGVyZmFj
ZXMvSUdFTl9ET01PYmplY3QuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkFyY2hpdmUuaWRs
Ci0gICAgd2luL0ludGVyZmFjZXMvSVdlYkJhY2tGb3J3YXJkTGlzdC5pZGwKLSAgICB3aW4vSW50
ZXJmYWNlcy9JV2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNl
cy9JV2ViQ2FjaGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkNvcmVTdGF0aXN0aWNzLmlk
bAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJEYXRhU291cmNlLmlkbAotICAgIHdpbi9JbnRlcmZh
Y2VzL0lXZWJEYXRhYmFzZU1hbmFnZXIuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkRlc2t0
b3BOb3RpZmljYXRpb25zRGVsZWdhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkRvY3Vt
ZW50LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJEb3dubG9hZC5pZGwKLSAgICB3aW4vSW50
ZXJmYWNlcy9JV2ViRWRpdGluZ0RlbGVnYXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJF
bWJlZGRlZFZpZXcuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkVycm9yLmlkbAotICAgIHdp
bi9JbnRlcmZhY2VzL0lXZWJFcnJvclByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdl
YkZvcm1EZWxlZ2F0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRnJhbWUuaWRsCi0gICAg
d2luL0ludGVyZmFjZXMvSVdlYkZyYW1lTG9hZERlbGVnYXRlLmlkbAotICAgIHdpbi9JbnRlcmZh
Y2VzL0lXZWJGcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMv
SVdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZTIuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdl
YkZyYW1lUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRnJhbWVWaWV3LmlkbAot
ICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJHZW9sb2NhdGlvblBvbGljeUxpc3RlbmVyLmlkbAotICAg
IHdpbi9JbnRlcmZhY2VzL0lXZWJHZW9sb2NhdGlvblBvc2l0aW9uLmlkbAotICAgIHdpbi9JbnRl
cmZhY2VzL0lXZWJHZW9sb2NhdGlvblByb3ZpZGVyLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lX
ZWJIVE1MUmVwcmVzZW50YXRpb24uaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkhUVFBVUkxS
ZXNwb25zZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViSGlzdG9yeS5pZGwKLSAgICB3aW4v
SW50ZXJmYWNlcy9JV2ViSGlzdG9yeURlbGVnYXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lX
ZWJIaXN0b3J5SXRlbS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViSGlzdG9yeUl0ZW1Qcml2
YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJIaXN0b3J5UHJpdmF0ZS5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9JV2ViSW5zcGVjdG9yLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJJ
bnNwZWN0b3JQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJKYXZhU2NyaXB0Q29s
bGVjdG9yLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJLaXRTdGF0aXN0aWNzLmlkbAotICAg
IHdpbi9JbnRlcmZhY2VzL0lXZWJNdXRhYmxlVVJMUmVxdWVzdC5pZGwKLSAgICB3aW4vSW50ZXJm
YWNlcy9JV2ViTXV0YWJsZVVSTFJlcXVlc3RQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2Vz
L0lXZWJOYXZpZ2F0aW9uRGF0YS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViTm90aWZpY2F0
aW9uLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJOb3RpZmljYXRpb25DZW50ZXIuaWRsCi0g
ICAgd2luL0ludGVyZmFjZXMvSVdlYk5vdGlmaWNhdGlvbk9ic2VydmVyLmlkbAotICAgIHdpbi9J
bnRlcmZhY2VzL0lXZWJQb2xpY3lEZWxlZ2F0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2Vi
UG9saWN5RGVsZWdhdGVQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJQcmVmZXJl
bmNlcy5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbAot
ICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJSZXNvdXJjZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9J
V2ViUmVzb3VyY2VMb2FkRGVsZWdhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlJlc291
cmNlTG9hZERlbGVnYXRlUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViUmVzb3Vy
Y2VMb2FkRGVsZWdhdGVQcml2YXRlMi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViU2NyaXB0
T2JqZWN0LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJTY3JpcHRXb3JsZC5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9JV2ViU2VjdXJpdHlPcmlnaW4uaWRsCi0gICAgd2luL0ludGVyZmFjZXMv
SVdlYlNlcmlhbGl6ZWRKU1ZhbHVlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJTZXJpYWxp
emVkSlNWYWx1ZVByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlRleHRSZW5kZXJl
ci5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVUlEZWxlZ2F0ZS5pZGwKLSAgICB3aW4vSW50
ZXJmYWNlcy9JV2ViVUlEZWxlZ2F0ZTIuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlVJRGVs
ZWdhdGVQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJVUkxBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVVJMUmVxdWVzdC5pZGwKLSAg
ICB3aW4vSW50ZXJmYWNlcy9JV2ViVVJMUmVzcG9uc2UuaWRsCi0gICAgd2luL0ludGVyZmFjZXMv
SVdlYlVSTFJlc3BvbnNlUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVW5kb01h
bmFnZXIuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlVuZG9UYXJnZXQuaWRsCi0gICAgd2lu
L0ludGVyZmFjZXMvSVdlYlVzZXJDb250ZW50VVJMUGF0dGVybi5pZGwKLSAgICB3aW4vSW50ZXJm
YWNlcy9JV2ViVmlldy5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVmlld1ByaXZhdGUuaWRs
Ci0gICAgd2luL0ludGVyZmFjZXMvSVdlYldvcmtlcnNQcml2YXRlLmlkbAotICAgIHdpbi9JbnRl
cmZhY2VzL0phdmFTY3JpcHRDb3JlQVBJVHlwZXMuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvV2Vi
S2l0LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL1dlYlNjcm9sbGJhclR5cGVzLmlkbAotCi0gICAg
d2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIvQWNjZXNzaWJsZTIuaWRsCi0gICAgd2luL0ludGVy
ZmFjZXMvQWNjZXNzaWJsZTIvQWNjZXNzaWJsZTJfMi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9B
Y2Nlc3NpYmxlMi9BY2Nlc3NpYmxlQXBwbGljYXRpb24uaWRsCi0gICAgd2luL0ludGVyZmFjZXMv
QWNjZXNzaWJsZTIvQWNjZXNzaWJsZUVkaXRhYmxlVGV4dC5pZGwKLSAgICB3aW4vSW50ZXJmYWNl
cy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlUmVsYXRpb24uaWRsCi0gICAgd2luL0ludGVyZmFjZXMv
QWNjZXNzaWJsZTIvQWNjZXNzaWJsZVN0YXRlcy5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9BY2Nl
c3NpYmxlMi9BY2Nlc3NpYmxlVGV4dC5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxl
Mi9BY2Nlc3NpYmxlVGV4dDIuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIvSUEy
Q29tbW9uVHlwZXMuaWRsCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9
L2luY2x1ZGUvYXV0b3ZlcnNpb24uaCIKLSkKLQotYWRkX2N1c3RvbV9jb21tYW5kKAotICAgIE9V
VFBVVCAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbmNsdWRlL2F1dG92ZXJz
aW9uLmgKLSAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0NNQUtFX1NPVVJDRV9ESVJ9Ci0gICAgQ09N
TUFORCAke1BFUkxfRVhFQ1VUQUJMRX0gJHtXRUJLSVRfTElCUkFSSUVTX0RJUn0vdG9vbHMvc2Ny
aXB0cy9hdXRvLXZlcnNpb24ucGwgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0K
LSAgICBWRVJCQVRJTSkKLQotR0VORVJBVEVfSU5URVJGQUNFKHdpbi9JbnRlcmZhY2VzL1dlYktp
dC5pZGwgJHtNSURMX0RFRklORVN9ICIke1dFQktJVExFR0FDWV9JRExfREVQRU5ERU5DSUVTfSIp
Ci1HRU5FUkFURV9JTlRFUkZBQ0Uod2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIvQWNjZXNzaWJs
ZUFwcGxpY2F0aW9uLmlkbCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBF
TkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxl
Mi9BY2Nlc3NpYmxlMi5pZGwgJHtNSURMX0RFRklORVN9ICIke1dFQktJVExFR0FDWV9JRExfREVQ
RU5ERU5DSUVTfSIpCi1HRU5FUkFURV9JTlRFUkZBQ0Uod2luL0ludGVyZmFjZXMvQWNjZXNzaWJs
ZTIvQWNjZXNzaWJsZTJfMi5pZGwgJHtNSURMX0RFRklORVN9ICIke1dFQktJVExFR0FDWV9JRExf
REVQRU5ERU5DSUVTfSIpCi1HRU5FUkFURV9JTlRFUkZBQ0Uod2luL0ludGVyZmFjZXMvQWNjZXNz
aWJsZTIvQWNjZXNzaWJsZVJlbGF0aW9uLmlkbCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVH
QUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50ZXJmYWNl
cy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlU3RhdGVzLmlkbCAke01JRExfREVGSU5FU30gIiR7V0VC
S0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50
ZXJmYWNlcy9BY2Nlc3NpYmxlMi9JQTJDb21tb25UeXBlcy5pZGwgJHtNSURMX0RFRklORVN9ICIk
e1dFQktJVExFR0FDWV9JRExfREVQRU5ERU5DSUVTfSIpCi1HRU5FUkFURV9JTlRFUkZBQ0Uod2lu
L0ludGVyZmFjZXMvQWNjZXNzaWJsZTIvQWNjZXNzaWJsZUVkaXRhYmxlVGV4dC5pZGwgJHtNSURM
X0RFRklORVN9ICIke1dFQktJVExFR0FDWV9JRExfREVQRU5ERU5DSUVTfSIpCi1HRU5FUkFURV9J
TlRFUkZBQ0Uod2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIvQWNjZXNzaWJsZVRleHQuaWRsICR7
TUlETF9ERUZJTkVTfSAiJHtXRUJLSVRMRUdBQ1lfSURMX0RFUEVOREVOQ0lFU30iKQotR0VORVJB
VEVfSU5URVJGQUNFKHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0FjY2Vzc2libGVUZXh0Mi5p
ZGwgJHtNSURMX0RFRklORVN9ICIke1dFQktJVExFR0FDWV9JRExfREVQRU5ERU5DSUVTfSIpCi0K
LWFkZF9saWJyYXJ5KFdlYktpdExlZ2FjeUdVSUQgU1RBVElDCi0gICAgIiR7V2ViS2l0TGVnYWN5
X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvV2ViS2l0LmgiCi0gICAgIiR7V2ViS2l0
TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZUFwcGxpY2F0
aW9uLmgiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFj
ZXMvQWNjZXNzaWJsZTIuaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJ
Un0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMl8yLmgiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklW
RURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZVJlbGF0aW9uLmgiCi0gICAgIiR7
V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZVN0
YXRlcy5oIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZh
Y2VzL0lBMkNvbW1vblR5cGVzLmgiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNF
U19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZUVkaXRhYmxlVGV4dC5oIgotICAgICIke1dlYktp
dExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVUZXh0Lmgi
Ci0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNj
ZXNzaWJsZVRleHQyLmgiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9
L0ludGVyZmFjZXMvV2ViS2l0X2kuYyIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VS
Q0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlQXBwbGljYXRpb25faS5jIgotICAgICIke1dl
YktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGUyX2ku
YyIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9B
Y2Nlc3NpYmxlMl8yX2kuYyIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJ
Un0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlUmVsYXRpb25faS5jIgotICAgICIke1dlYktpdExlZ2Fj
eV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVFZGl0YWJsZVRleHRf
aS5jIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2Vz
L0FjY2Vzc2libGVUZXh0X2kuYyIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VT
X0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlVGV4dDJfaS5jIgotKQotc2V0X3RhcmdldF9wcm9w
ZXJ0aWVzKFdlYktpdExlZ2FjeUdVSUQgUFJPUEVSVElFUyBPVVRQVVRfTkFNRSBXZWJLaXRHVUlE
JHtERUJVR19TVUZGSVh9KQotCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfUFJJVkFURV9MSUJS
QVJJRVMKLSAgICBDb21jdGwzMgotICAgIENvbXN1cHAKLSAgICBDcnlwdDMyCi0gICAgRDJkMQot
ICAgIER3cml0ZQotICAgIER4Z3VpZAotICAgIElwaGxwYXBpCi0gICAgUHNhcGkKLSAgICBScGNy
dDQKLSAgICBTaGx3YXBpCi0gICAgVXNwMTAKLSAgICBWZXJzaW9uCi0gICAgV2ViS2l0R1VJRCR7
REVCVUdfU1VGRklYfQotICAgIFdpbmRvd3NDb2RlY3MKLSAgICBXaW5tbQotKQotCi1zZXQoQ01B
S0VfU0hBUkVEX0xJTktFUl9GTEFHUyAiJHtDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTfSAvU1VC
U1lTVEVNOldJTkRPV1MiKQotc2V0KENNQUtFX0VYRV9MSU5LRVJfRkxBR1MgIiR7Q01BS0VfRVhF
X0xJTktFUl9GTEFHU30gL1NVQlNZU1RFTTpXSU5ET1dTIikKLQotIyBXZSBuZWVkIHRoZSB3ZWJr
aXQgbGlicmFyaWVzIHRvIGNvbWUgYmVmb3JlIHRoZSBzeXN0ZW0gZGVmYXVsdCBsaWJyYXJpZXMg
dG8gcHJldmVudCBzeW1ib2wgY29uZmxpY3RzIHdpdGggdXVpZC5saWIuCi0jIFRvIGRvIHRoaXMg
d2UgYWRkIHN5c3RlbSBkZWZhdWx0IGxpYnMgYXMgd2Via2l0IGxpYnMgYW5kIHplcm8gb3V0IHN5
c3RlbSBkZWZhdWx0IGxpYnMuCi1zdHJpbmcoUkVQTEFDRSAiICIgIlw7IiBDWFhfTElCUyAke0NN
QUtFX0NYWF9TVEFOREFSRF9MSUJSQVJJRVN9KQotbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X0xJ
QlJBUklFUyAke0NYWF9MSUJTfSkKLXNldChDTUFLRV9DWFhfU1RBTkRBUkRfTElCUkFSSUVTICIi
KQotCi1zZXQoQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHUyAiJHtDTUFLRV9TSEFSRURfTElOS0VS
X0ZMQUdTfSAke01TVkNfUlVOVElNRV9MSU5LRVJfRkxBR1N9IikKLQotIyBJZiB0aGlzIGRpcmVj
dG9yeSBpc24ndCBjcmVhdGVkIGJlZm9yZSBtaWRsIHJ1bnMgYW5kIGF0dGVtcHRzIHRvIG91dHB1
dCBXZWJLaXQudGxiLAotIyBJdCBmYWlscyB3aXRoIGFuIHVudXN1YWwgZXJyb3IgLSBtaWRsIGZh
aWxlZCAtIGZhaWxlZCB0byBzYXZlIGFsbCBjaGFuZ2VzCi1maWxlKE1BS0VfRElSRUNUT1JZICR7
Q01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfSkKLWZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtX
ZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcykKLQotc2V0KFdlYktp
dExlZ2FjeV9QVUJMSUNfRlJBTUVXT1JLX0hFQURFUlMKLSAgICAke1dlYktpdExlZ2FjeV9ERVJJ
VkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGUyLmgKLSAgICAke1dlYktpdExl
Z2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGUyXzIuaAotICAg
ICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJs
ZUFwcGxpY2F0aW9uLmgKLSAgICAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9J
bnRlcmZhY2VzL0FjY2Vzc2libGVFZGl0YWJsZVRleHQuaAotICAgICR7V2ViS2l0TGVnYWN5X0RF
UklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZVJlbGF0aW9uLmgKLSAgICAk
e1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVT
dGF0ZXMuaAotICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFj
ZXMvQWNjZXNzaWJsZVRleHQuaAotICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19E
SVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZVRleHQyLmgKLSAgICAke1dlYktpdExlZ2FjeV9ERVJJ
VkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0lBMkNvbW1vblR5cGVzLmgKLSAgICAke1dlYktp
dExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL1dlYktpdC5oCi0KLSAgICB3
aW4vQWNjZXNzaWJsZUJhc2UuaAotICAgIHdpbi9BY2Nlc3NpYmxlRG9jdW1lbnQuaAotICAgIHdp
bi9DRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZy5oCi0gICAgd2luL1dlYkRhdGFTb3VyY2UuaAotICAg
IHdpbi9XZWJGcmFtZS5oCi0gICAgd2luL1dlYktpdENPTUFQSS5oCi0pCi0KLVdFQktJVF9NQUtF
X0ZPUldBUkRJTkdfSEVBREVSUyhXZWJLaXRMZWdhY3lHVUlECi0gICAgVEFSR0VUX05BTUUgV2Vi
S2l0TGVnYWN5RnJhbWV3b3JrSGVhZGVycwotICAgIERFU1RJTkFUSU9OICR7V2ViS2l0TGVnYWN5
X0ZSQU1FV09SS19IRUFERVJTX0RJUn0vV2ViS2l0TGVnYWN5Ci0gICAgRklMRVMgJHtXZWJLaXRM
ZWdhY3lfUFVCTElDX0ZSQU1FV09SS19IRUFERVJTfQotICAgIEZMQVRURU5FRAotKQotCi1zZXQo
V2ViS2l0TGVnYWN5X09VVFBVVF9OQU1FCi0gICAgV2ViS2l0JHtERUJVR19TVUZGSVh9Ci0pCklu
ZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MyBAQAorMjAyMi0wMS0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVtb3ZlIHN1cHBvcnQgZm9yIERpcmVjdDJECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6
ZGVsZXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYlZpZXc6OmVuc3VyZUJhY2tpbmdTdG9y
ZSk6CisgICAgICAgIChXZWJWaWV3OjpzY3JvbGxCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2Vi
Vmlldzo6c2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViVmlldzo6dXBkYXRlQmFja2luZ1N0b3Jl
KToKKyAgICAgICAgKFdlYlZpZXc6OnBhaW50KToKKyAgICAgICAgKFdlYlZpZXc6OnBhaW50SW50
b0JhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJWaWV3OjpXZWJWaWV3V25kUHJvYyk6CisgICAg
ICAgIChXZWJWaWV3Ojpub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQpOgorICAgICAgICAoV2ViVmll
dzo6cGFpbnRXaXRoRGlyZWN0MkQpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlZpZXcuaDoKKwog
MjAyMi0wMS0wNiAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgogCiAgICAgICAg
IEhhdmUgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQgYW5kIHJlbGF0ZWQgbmV0d29ya2luZyBhY3Rv
cnMgdXNlIFNoYXJlZEJ1ZmZlci4KSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3Bw
CShyZXZpc2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDEwICsyMDksNiBAQAogI2luY2x1ZGUgIkFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0LmgiCiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSNp
bmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+Ci0jZW5kaWYKLQogI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICNpbmNsdWRlIDxXZWJDb3JlL0Z1bGxTY3JlZW5Db250
cm9sbGVyLmg+CiAjZW5kaWYKQEAgLTg1NSwxMSArODUxLDYgQEAgdm9pZCBXZWJWaWV3OjpkZWxl
dGVCYWNraW5nU3RvcmUoKQogICAgICAgICBtX2RlbGV0ZUJhY2tpbmdTdG9yZVRpbWVyQWN0aXZl
ID0gZmFsc2U7CiAgICAgfQogICAgIG1fYmFja2luZ1N0b3JlQml0bWFwID0gbnVsbHB0cjsKLSNp
ZiBVU0UoRElSRUNUMkQpCi0gICAgbV9iYWNraW5nU3RvcmVEMkRCaXRtYXAgPSBudWxscHRyOwot
ICAgIG1fYmFja2luZ1N0b3JlR2RpSW50ZXJvcCA9IG51bGxwdHI7Ci0gICAgbV9iYWNraW5nU3Rv
cmVSZW5kZXJUYXJnZXQgPSBudWxscHRyOwotI2VuZGlmCiAgICAgbV9iYWNraW5nU3RvcmVEaXJ0
eVJlZ2lvbiA9IG51bGxwdHI7CiAgICAgbV9iYWNraW5nU3RvcmVTaXplLmN4ID0gbV9iYWNraW5n
U3RvcmVTaXplLmN5ID0gMDsKIH0KQEAgLTg3MywyMCArODY0LDYgQEAgYm9vbCBXZWJWaWV3Ojpl
bnN1cmVCYWNraW5nU3RvcmUoKQogICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCAmJiAo
d2lkdGggIT0gbV9iYWNraW5nU3RvcmVTaXplLmN4IHx8IGhlaWdodCAhPSBtX2JhY2tpbmdTdG9y
ZVNpemUuY3kpKSB7CiAgICAgICAgIGRlbGV0ZUJhY2tpbmdTdG9yZSgpOwogCi0jaWYgVVNFKERJ
UkVDVDJEKQotICAgICAgICBhdXRvIGJpdG1hcFNpemUgPSBEMkQxOjpTaXplRih3aWR0aCwgaGVp
Z2h0KTsKLSAgICAgICAgYXV0byBwaXhlbFNpemUgPSBEMkQxOjpTaXplVSh3aWR0aCwgaGVpZ2h0
KTsKLQotICAgICAgICBpZiAoIW1fcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgICAgICAvLyBDcmVh
dGUgYSBEaXJlY3QyRCByZW5kZXIgdGFyZ2V0LgotICAgICAgICAgICAgYXV0byByZW5kZXJUYXJn
ZXRQcm9wZXJ0aWVzID0gRDJEMTo6UmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwotICAgICAgICAg
ICAgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy51c2FnZSA9IEQyRDFfUkVOREVSX1RBUkdFVF9VU0FH
RV9HRElfQ09NUEFUSUJMRTsKLSAgICAgICAgICAgIGF1dG8gaHduZFJlbmRlclRhcmdldFByb3Bl
cnRpZXMgPSBEMkQxOjpId25kUmVuZGVyVGFyZ2V0UHJvcGVydGllcyhtX3ZpZXdXaW5kb3csIHBp
eGVsU2l6ZSk7Ci0gICAgICAgICAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0
ZW1GYWN0b3J5KCktPkNyZWF0ZUh3bmRSZW5kZXJUYXJnZXQoJnJlbmRlclRhcmdldFByb3BlcnRp
ZXMsICZod25kUmVuZGVyVGFyZ2V0UHJvcGVydGllcywgJm1fcmVuZGVyVGFyZ2V0KTsKLSAgICAg
ICAgICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSNlbmRpZgogICAgICAgICBtX2JhY2tpbmdTdG9yZVNpemUuY3ggPSB3aWR0
aDsKICAgICAgICAgbV9iYWNraW5nU3RvcmVTaXplLmN5ID0gaGVpZ2h0OwogICAgICAgICBCaXRt
YXBJbmZvIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGVCb3R0b21VcChJbnRTaXplKG1f
YmFja2luZ1N0b3JlU2l6ZSkpOwpAQCAtODk0LDE2ICs4NzEsNiBAQCBib29sIFdlYlZpZXc6OmVu
c3VyZUJhY2tpbmdTdG9yZSgpCiAgICAgICAgIHZvaWQqIHBpeGVscyA9IE5VTEw7CiAgICAgICAg
IG1fYmFja2luZ1N0b3JlQml0bWFwID0gU2hhcmVkR0RJT2JqZWN0PEhCSVRNQVA+OjpjcmVhdGUo
YWRvcHRHRElPYmplY3QoOjpDcmVhdGVESUJTZWN0aW9uKDAsICZiaXRtYXBJbmZvLCBESUJfUkdC
X0NPTE9SUywgJnBpeGVscywgMCwgMCkpKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAg
SFJFU1VMVCBociA9IG1fcmVuZGVyVGFyZ2V0LT5DcmVhdGVDb21wYXRpYmxlUmVuZGVyVGFyZ2V0
KCZiaXRtYXBTaXplLCAmcGl4ZWxTaXplLCBudWxscHRyLCBEMkQxX0NPTVBBVElCTEVfUkVOREVS
X1RBUkdFVF9PUFRJT05TX0dESV9DT01QQVRJQkxFLCAmbV9iYWNraW5nU3RvcmVSZW5kZXJUYXJn
ZXQpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgICAgICBo
ciA9IG1fYmFja2luZ1N0b3JlUmVuZGVyVGFyZ2V0LT5HZXRCaXRtYXAoJm1fYmFja2luZ1N0b3Jl
RDJEQml0bWFwKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAg
ICAgICAgaHIgPSBtX2JhY2tpbmdTdG9yZVJlbmRlclRhcmdldC0+UXVlcnlJbnRlcmZhY2UoX191
dWlkb2YoSUQyRDFHZGlJbnRlcm9wUmVuZGVyVGFyZ2V0KSwgKHZvaWQqKikmbV9iYWNraW5nU3Rv
cmVHZGlJbnRlcm9wKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0j
ZW5kaWYKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC05NzgsMTYgKzk0NSw2IEBA
IHZvaWQgV2ViVmlldzo6c2Nyb2xsQmFja2luZ1N0b3JlKEZyYW1lVmkKICAgICBGbG9hdFJlY3Qg
Y2xpcFJlY3QobG9naWNhbENsaXBSZWN0KTsKICAgICBjbGlwUmVjdC5zY2FsZShzY2FsZUZhY3Rv
cik7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgUkVDVCBzY3JvbGxSZWN0V2luKHNjcm9sbFZp
ZXdSZWN0KTsKLSAgICBSRUNUIGNsaXBSZWN0V2luKGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3Qp
KTsKLSAgICBSRUNUIHVwZGF0ZVJlY3Q7Ci0gICAgOjpTY3JvbGxXaW5kb3dFeChtX3ZpZXdXaW5k
b3csIGR4LCBkeSwgJnNjcm9sbFJlY3RXaW4sICZjbGlwUmVjdFdpbiwgbnVsbHB0ciwgJnVwZGF0
ZVJlY3QsIDApOwotICAgIDo6SW52YWxpZGF0ZVJlY3QobV92aWV3V2luZG93LCAmdXBkYXRlUmVj
dCwgRkFMU0UpOwotCi0gICAgaWYgKG1fdWlEZWxlZ2F0ZVByaXZhdGUpCi0gICAgICAgIG1fdWlE
ZWxlZ2F0ZVByaXZhdGUtPndlYlZpZXdTY3JvbGxlZCh0aGlzKTsKLSNlbHNlCiAgICAgaWYgKGlz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
YmUgZG9pbmcgc29tZXRoaW5nIHNtYXJ0ZXIgaGVyZSwgbGlrZSBtb3ZpbmcgdGlsZXMgYXJvdW5k
IGFuZCBwYWludGluZwogICAgICAgICAvLyBhbnkgbmV3bHktZXhwb3NlZCB0aWxlcy4gPGh0dHA6
Ly93ZWJraXQub3JnL2IvNTI3MTQ+CkBAIC0xMDM5LDcgKzk5Niw2IEBAIHZvaWQgV2ViVmlldzo6
c2Nyb2xsQmFja2luZ1N0b3JlKEZyYW1lVmkKIAogICAgIC8vIENsZWFuIHVwLgogICAgIDo6U2Vs
ZWN0T2JqZWN0KGJpdG1hcERDLmdldCgpLCBvbGRCaXRtYXApOwotI2VuZGlmIC8vIFVTRShESVJF
Q1QyRCkKIH0KIAogdm9pZCBXZWJWaWV3OjpzaXplQ2hhbmdlZChjb25zdCBJbnRTaXplJiBuZXdT
aXplKQpAQCAtMTA2NywyMCArMTAyMyw2IEBAIHZvaWQgV2ViVmlldzo6c2l6ZUNoYW5nZWQoY29u
c3QgSW50U2l6ZSYKICAgICBpZiAobV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCkKICAg
ICAgICAgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+cmVzaXplUm9vdExheWVyKG5l
d1NpemUpOwogI2VuZGlmCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgaWYgKG1fcmVuZGVyVGFy
Z2V0KSB7Ci0gICAgICAgIG1fcmVuZGVyVGFyZ2V0LT5SZXNpemUobmV3U2l6ZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgYSBEaXJlY3QyRCByZW5kZXIgdGFyZ2V0
LgotICAgIGF1dG8gcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IEQyRDE6OlJlbmRlclRhcmdldFBy
b3BlcnRpZXMoKTsKLSAgICByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLnVzYWdlID0gRDJEMV9SRU5E
RVJfVEFSR0VUX1VTQUdFX0dESV9DT01QQVRJQkxFOwotICAgIGF1dG8gaHduZFJlbmRlclRhcmdl
dFByb3BlcnRpZXMgPSBEMkQxOjpId25kUmVuZGVyVGFyZ2V0UHJvcGVydGllcyhtX3ZpZXdXaW5k
b3csIG5ld1NpemUsIEQyRDFfUFJFU0VOVF9PUFRJT05TX0lNTUVESUFURUxZKTsKLSAgICBIUkVT
VUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUh3bmRSZW5k
ZXJUYXJnZXQoJnJlbmRlclRhcmdldFByb3BlcnRpZXMsICZod25kUmVuZGVyVGFyZ2V0UHJvcGVy
dGllcywgJm1fcmVuZGVyVGFyZ2V0KTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0jZW5k
aWYKIH0KIAogYm9vbCBXZWJWaWV3OjpkcGlDaGFuZ2VkKGZsb2F0LCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBuZXdTaXplKQpAQCAtMTE0MSwxMyArMTA4Myw2IEBAIHZvaWQgV2ViVmlldzo6dXBk
YXRlQmFja2luZ1N0b3JlKEZyYW1lVmkKIAogICAgIExPQ0FMX0dESV9DT1VOVEVSKDAsIF9fRlVO
Q1RJT05fXyk7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgaWYgKCFtX2JhY2tpbmdTdG9yZUdk
aUludGVyb3ApIHsKLSAgICAgICAgSFJFU1VMVCBociA9IG1fYmFja2luZ1N0b3JlUmVuZGVyVGFy
Z2V0LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDJEMUdkaUludGVyb3BSZW5kZXJUYXJnZXQp
LCAodm9pZCoqKSZtX2JhY2tpbmdTdG9yZUdkaUludGVyb3ApOwotICAgICAgICBSRUxFQVNFX0FT
U0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9Ci0jZW5kaWYKLQogICAgIEdESU9iamVjdDxIREM+
IGJpdG1hcERDT2JqZWN0OwogCiAgICAgSERDIGJpdG1hcERDID0gZGM7CkBAIC0xMTU4LDEwICsx
MDkzLDYgQEAgdm9pZCBXZWJWaWV3Ojp1cGRhdGVCYWNraW5nU3RvcmUoRnJhbWVWaQogICAgICAg
ICBiaXRtYXBEQyA9IGJpdG1hcERDT2JqZWN0LmdldCgpOwogICAgICAgICBvbGRCaXRtYXAgPSA6
OlNlbGVjdE9iamVjdChiaXRtYXBEQywgbV9iYWNraW5nU3RvcmVCaXRtYXAtPmdldCgpKTsKICAg
ICAgICAgQVNTRVJUKG9sZEJpdG1hcCk7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgICAgICBIUkVT
VUxUIGhyID0gbV9iYWNraW5nU3RvcmVHZGlJbnRlcm9wLT5HZXREQyhEMkQxX0RDX0lOSVRJQUxJ
WkVfTU9ERV9DT1BZLCAmYml0bWFwREMpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVE
RUQoaHIpKTsKLSNlbmRpZgogICAgIH0KIAogICAgIGlmIChtX2JhY2tpbmdTdG9yZUJpdG1hcCAm
JiAobV9iYWNraW5nU3RvcmVEaXJ0eVJlZ2lvbiB8fCBiYWNraW5nU3RvcmVDb21wbGV0ZWx5RGly
dHkpKSB7CkBAIC0xMTg1LDEyICsxMTE2LDggQEAgdm9pZCBXZWJWaWV3Ojp1cGRhdGVCYWNraW5n
U3RvcmUoRnJhbWVWaQogICAgICAgICBtX2JhY2tpbmdTdG9yZURpcnR5UmVnaW9uID0gbnVsbHB0
cjsKICAgICB9CiAKLSAgICBpZiAoIWRjKSB7CisgICAgaWYgKCFkYykKICAgICAgICAgOjpTZWxl
Y3RPYmplY3QoYml0bWFwREMsIG9sZEJpdG1hcCk7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgICAg
ICBtX2JhY2tpbmdTdG9yZUdkaUludGVyb3AtPlJlbGVhc2VEQyhudWxscHRyKTsKLSNlbmRpZgot
ICAgIH0KIAogICAgIEdkaUZsdXNoKCk7CiAKQEAgLTEyMjUsNjkgKzExNTIsNiBAQCB2b2lkIFdl
YlZpZXc6OnBlcmZvcm1MYXllcmVkV2luZG93VXBkYXRlCiAgICAgbV9uZWVkc0Rpc3BsYXkgPSBm
YWxzZTsKIH0KIAotdm9pZCBXZWJWaWV3OjpwYWludFdpdGhEaXJlY3QyRCgpCi17Ci0jaWYgVVNF
KERJUkVDVDJEKQotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKG1fbWFpbkZyYW1lKTsKLSAg
ICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEZyYW1lVmlldyogZnJhbWVW
aWV3ID0gY29yZUZyYW1lLT52aWV3KCk7Ci0gICAgZnJhbWVWaWV3LT51cGRhdGVMYXlvdXRBbmRT
dHlsZUlmTmVlZGVkUmVjdXJzaXZlKCk7Ci0KLSAgICBpZiAoIW1fcmVuZGVyVGFyZ2V0KSB7Ci0g
ICAgICAgIC8vIENyZWF0ZSBhIERpcmVjdDJEIHJlbmRlciB0YXJnZXQuCi0gICAgICAgIGF1dG8g
cmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IEQyRDE6OlJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsK
LSAgICAgICAgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy51c2FnZSA9IEQyRDFfUkVOREVSX1RBUkdF
VF9VU0FHRV9HRElfQ09NUEFUSUJMRTsKLQotICAgICAgICBSRUNUIHJlY3Q7Ci0gICAgICAgIDo6
R2V0Q2xpZW50UmVjdChtX3ZpZXdXaW5kb3csICZyZWN0KTsKLQotICAgICAgICBJbnRSZWN0IGNs
aWVudFJlY3QocmVjdCk7Ci0KLSAgICAgICAgYXV0byBwaXhlbFNpemUgPSBEMkQxOjpTaXplVShj
bGllbnRSZWN0LndpZHRoKCksIGNsaWVudFJlY3QuaGVpZ2h0KCkpOwotCi0gICAgICAgIGF1dG8g
aHduZFJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpId25kUmVuZGVyVGFyZ2V0UHJvcGVy
dGllcyhtX3ZpZXdXaW5kb3csIHBpeGVsU2l6ZSwgRDJEMV9QUkVTRU5UX09QVElPTlNfSU1NRURJ
QVRFTFkpOwotICAgICAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0
b3J5KCktPkNyZWF0ZUh3bmRSZW5kZXJUYXJnZXQoJnJlbmRlclRhcmdldFByb3BlcnRpZXMsICZo
d25kUmVuZGVyVGFyZ2V0UHJvcGVydGllcywgJm1fcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgaWYg
KCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJFQ1Qg
Y2xpZW50UmVjdCA9IHt9OwotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHBsYXRmb3JtQ29u
dGV4dChtX3JlbmRlclRhcmdldC5nZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0V2luIGdjKCZw
bGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5
cGU6OkdQVU1lbW9yeSk7Ci0KLSAgICB7Ci0gICAgICAgIG1fcmVuZGVyVGFyZ2V0LT5TZXRUYWdz
KFdFQktJVF9EUkFXSU5HLCBfX0xJTkVfXyk7Ci0gICAgICAgIG1fcmVuZGVyVGFyZ2V0LT5DbGVh
cigpOwotCi0gICAgICAgIC8vIERpcmVjdDJEIGhvbm9ycyB0aGUgc2NhbGUgZmFjdG9yIG5hdGl2
ZWx5LgotICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGY7Ci0gICAgICAgIGZsb2F0IGlu
dmVyc2VTY2FsZUZhY3RvciA9IDEuMGYgLyBzY2FsZUZhY3RvcjsKLQotICAgICAgICBHZXRDbGll
bnRSZWN0KG1fdmlld1dpbmRvdywgJmNsaWVudFJlY3QpOwotCi0gICAgICAgIEludFJlY3QgZGly
dHlSZWN0UGl4ZWxzKDAsIDAsIGNsaWVudFJlY3QucmlnaHQsIGNsaWVudFJlY3QuYm90dG9tKTsK
LSAgICAgICAgRmxvYXRSZWN0IGxvZ2ljYWxEaXJ0eVJlY3RGbG9hdCA9IGRpcnR5UmVjdFBpeGVs
czsKLSAgICAgICAgbG9naWNhbERpcnR5UmVjdEZsb2F0LnNjYWxlKGludmVyc2VTY2FsZUZhY3Rv
cik7Ci0gICAgICAgIEludFJlY3QgbG9naWNhbERpcnR5UmVjdChlbmNsb3NpbmdJbnRSZWN0KGxv
Z2ljYWxEaXJ0eVJlY3RGbG9hdCkpOwotCi0gICAgICAgIGlmIChmcmFtZVZpZXcgJiYgZnJhbWVW
aWV3LT5mcmFtZSgpLmNvbnRlbnRSZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBnYy5zYXZlKCk7
Ci0gICAgICAgICAgICBnYy5zY2FsZShGbG9hdFNpemUoc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9y
KSk7Ci0gICAgICAgICAgICBnYy5jbGlwKGxvZ2ljYWxEaXJ0eVJlY3QpOwotICAgICAgICAgICAg
ZnJhbWVWaWV3LT5wYWludChnYywgbG9naWNhbERpcnR5UmVjdCk7Ci0gICAgICAgICAgICBpZiAo
bV9zaG91bGRJbnZlcnRDb2xvcnMpCi0gICAgICAgICAgICAgICAgZ2MuZmlsbFJlY3QobG9naWNh
bERpcnR5UmVjdCwgQ29sb3I6OndoaXRlLCBDb21wb3NpdGVPcGVyYXRvcjo6RGlmZmVyZW5jZSk7
Ci0gICAgICAgICAgICBnYy5yZXN0b3JlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICA6OlZh
bGlkYXRlUmVjdChtX3ZpZXdXaW5kb3csICZjbGllbnRSZWN0KTsKLSNlbHNlCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBXZWJWaWV3OjpwYWludChIREMgZGMs
IExQQVJBTSBvcHRpb25zKQogewogICAgIExPQ0FMX0dESV9DT1VOVEVSKDAsIF9fRlVOQ1RJT05f
Xyk7CkBAIC0xMzQ5LDE4ICsxMjEzLDggQEAgdm9pZCBXZWJWaWV3OjpwYWludChIREMgZGMsIExQ
QVJBTSBvcHRpbwogCiAgICAgOjpTZWxlY3RPYmplY3QoYml0bWFwREMuZ2V0KCksIG9sZEJpdG1h
cCk7CiAKLSAgICBpZiAoIWRjKSB7CisgICAgaWYgKCFkYykKICAgICAgICAgRW5kUGFpbnQobV92
aWV3V2luZG93LCAmcHMpOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgSFJFU1VMVCBociA9
IG1fYmFja2luZ1N0b3JlUmVuZGVyVGFyZ2V0LT5FbmREcmF3KCk7Ci0gICAgICAgIC8vIEZJWE1F
OiBSZWNvZ25pemUgYW5kIHJlY292ZXIgZnJvbSBlcnJvciBzdGF0ZToKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSNpZiBVU0UoRElSRUNU
MkQpCi0gICAgbV9iYWNraW5nU3RvcmVHZGlJbnRlcm9wLT5SZWxlYXNlREMobnVsbHB0cik7Ci0j
ZW5kaWYKIAogICAgIGlmIChhY3RpdmUoKSkKICAgICAgICAgY2FuY2VsRGVsZXRlQmFja2luZ1N0
b3JlU29vbigpOwpAQCAtMTQwMywxMCArMTI1Nyw2IEBAIHZvaWQgV2ViVmlldzo6cGFpbnRJbnRv
QmFja2luZ1N0b3JlKEZyYW0KICAgICBsb2dpY2FsRGlydHlSZWN0RmxvYXQuc2NhbGUoaW52ZXJz
ZVNjYWxlRmFjdG9yKTsgICAgCiAgICAgSW50UmVjdCBsb2dpY2FsRGlydHlSZWN0KGVuY2xvc2lu
Z0ludFJlY3QobG9naWNhbERpcnR5UmVjdEZsb2F0KSk7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0g
ICAgbV9iYWNraW5nU3RvcmVSZW5kZXJUYXJnZXQgPSBudWxscHRyOwotI2VuZGlmCi0KICAgICBH
cmFwaGljc0NvbnRleHRXaW4gZ2MoYml0bWFwREMsIG1fdHJhbnNwYXJlbnQpOwogICAgIGdjLnNh
dmUoKTsKICAgICBpZiAobV90cmFuc3BhcmVudCkKQEAgLTI1MTAsMTEgKzIzNjAsNyBAQCBMUkVT
VUxUIENBTExCQUNLIFdlYlZpZXc6OldlYlZpZXdXbmRQcm9jCiAKICAgICBzd2l0Y2ggKG1lc3Nh
Z2UpIHsKICAgICAgICAgY2FzZSBXTV9QQUlOVDogewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAg
ICAgICAgIHdlYlZpZXctPnBhaW50V2l0aERpcmVjdDJEKCk7Ci0jZWxzZQogICAgICAgICAgICAg
d2ViVmlldy0+cGFpbnQoMCwgMCk7Ci0jZW5kaWYKICAgICAgICAgICAgIGlmICh3ZWJWaWV3LT51
c2VzTGF5ZXJlZFdpbmRvdygpKQogICAgICAgICAgICAgICAgIHdlYlZpZXctPnBlcmZvcm1MYXll
cmVkV2luZG93VXBkYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTU0NDQsMTAgKzUyOTAs
NiBAQCBIUkVTVUxUIFdlYlZpZXc6Om5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlCiAgICAgaHIgPSBw
cmVmc1ByaXZhdGUtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCZlbmFibGVkKTsKICAg
ICBpZiAoRkFJTEVEKGhyKSkKICAgICAgICAgcmV0dXJuIGhyOwotI2lmIFVTRShESVJFQ1QyRCkK
LSAgICAvLyBEaXNhYmxlIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGZvciBub3cuCi0gICAgZW5h
YmxlZCA9IGZhbHNlOwotI2VuZGlmCiAgICAgc2V0dGluZ3Muc2V0QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0VuYWJsZWQoZW5hYmxlZCk7CiAKICAgICBociA9IHByZWZzUHJpdmF0ZS0+c2hvd0RlYnVn
Qm9yZGVycygmZW5hYmxlZCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5oCShyZXZp
c2lvbiAyODc4MDMpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmgJKHdvcmtp
bmcgY29weSkKQEAgLTc3LDEzICs3Nyw2IEBAIFdlYlZpZXcqIGtpdChXZWJDb3JlOjpQYWdlKik7
CiBXZWJDb3JlOjpQYWdlKiBjb3JlKElXZWJWaWV3Kik7CiAKIGludGVyZmFjZSBJRHJvcFRhcmdl
dEhlbHBlcjsKLSNpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQyRDFCaXRtYXA7Ci1pbnRl
cmZhY2UgSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFHZGlJbnRlcm9w
UmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNlIElEMkQxSHduZFJlbmRlclRhcmdldDsKLWludGVyZmFj
ZSBJRDJEMVJlbmRlclRhcmdldDsKLSNlbmRpZgogCiBjbGFzcyBXZWJWaWV3IGZpbmFsCiAgICAg
OiBwdWJsaWMgSVdlYlZpZXcKQEAgLTQyNyw3ICs0MjAsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBr
ZXlEb3duKFdQQVJBTSwgTFBBUkFNLCBib29sIHN5c3RlbUtleURvd24gPSBmYWxzZSk7CiAgICAg
Ym9vbCBrZXlVcChXUEFSQU0sIExQQVJBTSwgYm9vbCBzeXN0ZW1LZXlEb3duID0gZmFsc2UpOwog
ICAgIGJvb2wga2V5UHJlc3MoV1BBUkFNLCBMUEFSQU0sIGJvb2wgc3lzdGVtS2V5RG93biA9IGZh
bHNlKTsKLSAgICB2b2lkIHBhaW50V2l0aERpcmVjdDJEKCk7CiAgICAgdm9pZCBwYWludChIREMs
IExQQVJBTSk7CiAgICAgdm9pZCBwYWludEludG9XaW5kb3coSERDIGJpdG1hcERDLCBIREMgd2lu
ZG93REMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7CiAgICAgYm9vbCBlbnN1
cmVCYWNraW5nU3RvcmUoKTsKQEAgLTYyNiwxMiArNjE4LDYgQEAgcHJvdGVjdGVkOgogCiAgICAg
SE1FTlUgbV9jdXJyZW50Q29udGV4dE1lbnUgeyBudWxscHRyIH07CiAgICAgUmVmUHRyPFdlYkNv
cmU6OlNoYXJlZEdESU9iamVjdDxIQklUTUFQPj4gbV9iYWNraW5nU3RvcmVCaXRtYXA7Ci0jaWYg
VVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRDJEMUh3bmRSZW5kZXJUYXJnZXQ+IG1fcmVuZGVy
VGFyZ2V0OwotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gbV9iYWNraW5nU3RvcmVEMkRCaXRtYXA7
Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBtX2JhY2tpbmdTdG9yZVJlbmRl
clRhcmdldDsKLSAgICBDT01QdHI8SUQyRDFHZGlJbnRlcm9wUmVuZGVyVGFyZ2V0PiBtX2JhY2tp
bmdTdG9yZUdkaUludGVyb3A7Ci0jZW5kaWYKICAgICBTSVpFIG1fYmFja2luZ1N0b3JlU2l6ZTsK
ICAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkR0RJT2JqZWN0PEhSR04+PiBtX2JhY2tpbmdTdG9y
ZURpcnR5UmVnaW9uOwogCkluZGV4OiBTb3VyY2UvY21ha2UvT3B0aW9uc0ZUVy5jbWFrZQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvY21ha2UvT3B0aW9uc0ZUVy5jbWFrZQkocmV2aXNpb24gMjg3ODAz
KQorKysgU291cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2UJKG5vbmV4aXN0ZW50KQpAQCAtMSwy
MzYgKzAsMCBAQAotaWYgKENNQUtFX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDMuMTQpCi0gICAgbWVz
c2FnZShGQVRBTF9FUlJPUiAiQ01ha2UgMy4xNCBvciBncmVhdGVyIGlzIHJlcXVpcmVkIHRvIGNv
bXBpbGUgV2ViS2l0RlRXIikKLWVuZGlmICgpCi0KLWlmIChNU1ZDX1ZFUlNJT04gVkVSU0lPTl9M
RVNTIDE5MjApCi0gICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVmlzdWFsIFN0dWRpbyAyMDE5IGlz
IHJlcXVpcmVkIHRvIGNvbXBpbGUgV2ViS2l0RlRXIikKLWVuZGlmICgpCi0KLWlmICgke1dURl9D
UFVfWDg2fSkKLSAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJXZWJLaXRGVFcgZG9lcyBub3Qgc3Vw
cG9ydCAzMi1iaXQgYnVpbGRzIikKLWVuZGlmICgpCi0KLXNldChQT1JUIEZUVykKLQotIyBDb21w
aWxhdGlvbiBvcHRpb25zCi1pbmNsdWRlKE9wdGlvbnNNU1ZDKQotCi1hZGRfZGVmaW5pdGlvbnMo
LURXVEZfUExBVEZPUk1fRlRXPTEpCi0jIFByZXZlbnQgbWluKCkgYW5kIG1heCgpIG1hY3JvcyBm
cm9tIGJlaW5nIGV4cG9zZWQKLWFkZF9kZWZpbml0aW9ucygtRE5PTUlOTUFYKQotIyBVc2UgdW5p
Y29kZQotYWRkX2RlZmluaXRpb25zKC1EVU5JQ09ERSAtRF9VTklDT0RFKQotIyBJZiA8d2luc29j
azIuaD4gaXMgbm90IGluY2x1ZGVkIGJlZm9yZSA8d2luZG93cy5oPiByZWRlZmluaXRpb24gZXJy
b3JzIG9jY3VyCi0jIHVubGVzcyBfV0lOU09DS0FQSV8gaXMgZGVmaW5lZCBiZWZvcmUgPHdpbmRv
d3MuaD4gaXMgaW5jbHVkZWQKLWFkZF9kZWZpbml0aW9ucygtRF9XSU5TT0NLQVBJXz0pCi0KLSMg
U2V0dXAgbGlicmFyeSBwYXRocwotaWYgKERFRklORUQgRU5We0FwcGxlQXBwbGljYXRpb25TdXBw
b3J0U0RLfSkKLSAgICBmaWxlKFRPX0NNQUtFX1BBVEggIiRFTlZ7QXBwbGVBcHBsaWNhdGlvblN1
cHBvcnRTREt9L0FwcGxlSW50ZXJuYWwiIFdFQktJVF9MSUJSQVJJRVNfRElSKQotICAgIHNldChX
RUJLSVRfTElCUkFSSUVTX0lOQ0xVREVfRElSICIke1dFQktJVF9MSUJSQVJJRVNfRElSfS9pbmNs
dWRlIikKLSAgICBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7V0VCS0lUX0xJQlJBUklFU19JTkNMVURF
X0RJUn0pCi0gICAgc2V0KEFQUExFX0JVSUxEIDEpCi1lbmRpZiAoKQotCi1pZiAoTk9UIFdFQktJ
VF9MSUJSQVJJRVNfRElSKQotICAgIGlmIChERUZJTkVEIEVOVntXRUJLSVRfTElCUkFSSUVTfSkK
LSAgICAgICAgZmlsZShUT19DTUFLRV9QQVRIICIkRU5We1dFQktJVF9MSUJSQVJJRVN9IiBXRUJL
SVRfTElCUkFSSUVTX0RJUikKLSAgICBlbHNlICgpCi0gICAgICAgIGZpbGUoVE9fQ01BS0VfUEFU
SCAiJHtDTUFLRV9TT1VSQ0VfRElSfS9XZWJLaXRMaWJyYXJpZXMvd2luIiBXRUJLSVRfTElCUkFS
SUVTX0RJUikKLSAgICBlbmRpZiAoKQotZW5kaWYgKCkKLQotc2V0KENNQUtFX1BSRUZJWF9QQVRI
ICR7V0VCS0lUX0xJQlJBUklFU19ESVJ9KQotCi1zZXRfcHJvcGVydHkoR0xPQkFMIFBST1BFUlRZ
IEZJTkRfTElCUkFSWV9VU0VfTElCMzJfUEFUSFMgT0ZGKQotc2V0X3Byb3BlcnR5KEdMT0JBTCBQ
Uk9QRVJUWSBGSU5EX0xJQlJBUllfVVNFX0xJQjY0X1BBVEhTIE9OKQotCi1zZXQoV0VCS0lUX0xJ
QlJBUklFU19MSU5LX0RJUiAiJHtXRUJLSVRfTElCUkFSSUVTX0RJUn0vbGliNjQiKQotIyBGSVhN
RTogUmVtb3ZlICR7V0VCS0lUX0xJQlJBUklFU19MSU5LX0RJUn0gd2hlbiBmaW5kX2xpYnJhcnkg
aXMgdXNlZCBmb3IgZXZlcnl0aGluZwotbGlua19kaXJlY3RvcmllcygiJHtDTUFLRV9CSU5BUllf
RElSfS9saWI2NCIgIiR7V0VCS0lUX0xJQlJBUklFU19MSU5LX0RJUn0iKQotc2V0KENNQUtFX0FS
Q0hJVkVfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtFX0JJTkFSWV9ESVJ9L2xpYjY0KQotc2V0KENN
QUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtFX0JJTkFSWV9ESVJ9L2xpYjY0KQot
c2V0KENNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtFX0JJTkFSWV9ESVJ9L2Jp
bjY0KQotCi1zZXQoQ01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZX0RFQlVHICIke0NNQUtF
X0FSQ0hJVkVfT1VUUFVUX0RJUkVDVE9SWX0iKQotc2V0KENNQUtFX0FSQ0hJVkVfT1VUUFVUX0RJ
UkVDVE9SWV9SRUxFQVNFICIke0NNQUtFX0FSQ0hJVkVfT1VUUFVUX0RJUkVDVE9SWX0iKQotc2V0
KENNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWV9ERUJVRyAiJHtDTUFLRV9MSUJSQVJZX09V
VFBVVF9ESVJFQ1RPUll9IikKLXNldChDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUllfUkVM
RUFTRSAiJHtDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUll9IikKLXNldChDTUFLRV9SVU5U
SU1FX09VVFBVVF9ESVJFQ1RPUllfREVCVUcgIiR7Q01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNU
T1JZfSIpCi1zZXQoQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZX1JFTEVBU0UgIiR7Q01B
S0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfSIpCi0KLVdFQktJVF9PUFRJT05fQkVHSU4oKQot
Ci0jIEZlYXR1cmVzIGluIHRoZSBzYW1lIHN0YXRlIG9uIFdpbkNhaXJvIGFuZCBBcHBsZVdpbgot
Ci1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfM0RfVFJBTlNGT1JNUyBQ
UklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FUVEFD
SE1FTlRfRUxFTUVOVCBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX0NBQ0hFX1BBUlRJVElPTklORyBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HIFBSSVZBVEUgT04pCi1X
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTM19URVhUIFBSSVZBVEUg
T0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19CT1hfREVD
T1JBVElPTl9CUkVBSyBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX0NTU19DT05JQ19HUkFESUVOVFMgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1NfREVWSUNFX0FEQVBUQVRJT04gUFJJVkFURSBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX0lNQUdFX1JF
U09MVVRJT04gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfQ1NTX1BBSU5USU5HX0FQSSBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX0NTU19TRUxFQ1RPUlNfTEVWRUw0IFBSSVZBVEUgT04pCi1XRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1VSU09SX1ZJU0lCSUxJVFkgUFJJ
VkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9EUkFHX1NV
UFBPUlQgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9GSUxURVJTX0xFVkVMXzIgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9GVExfSklUIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX0ZUUERJUiBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJIFBSSVZBVEUgT0ZGKQotV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0dFT0xPQ0FUSU9OIFBSSVZBVEUgT04p
Ci1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTUFDX0dFU1RVUkVfRVZF
TlRTIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X01BVEhNTCBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX01FRElBX0NPTlRST0xTX1NDUklQVCBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX01IVE1MIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX01JTklCUk9XU0VSIFBSSVZBVEUgT04pCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTU9VU0VfQ1VSU09SX1NDQUxFIFBSSVZB
VEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTkVUU0NBUEVf
UExVR0lOX0FQSSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9PUklFTlRBVElPTl9FVkVOVFMgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIIFBSSVZBVEUg
T0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1BVQkxJQ19TVUZG
SVhfTElTVCBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX1NBTVBMSU5HX1BST0ZJTEVSIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX1NQRUxMQ0hFQ0sgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVE9VQ0hfRVZFTlRTIFBSSVZBVEUgT0ZGKQotV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1RPVUNIX1NMSURFUiBQUklWQVRF
IE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9VTklGSUVEX0JV
SUxEUyBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X1ZJREVPIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfV0VCQVNTRU1CTFkgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfV0VCR0wgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9XSVJFTEVTU19QTEFZQkFDS19UQVJHRVQgUFJJVkFURSBPRkYpCi1XRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfWFNMVCBQUklWQVRFIE9OKQotCi0j
IE1lZGlhIHRoaW5ncyB0aGF0IHNob3VsZCBiZSBvbgotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX0FWRl9DQVBUSU9OUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJfQVVESU8gUFJJVkFURSBPRkYpCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTEVHQUNZX0VOQ1JZUFRFRF9NRURJQSBQ
UklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9NRURJ
QV9DQVBUVVJFIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX01FRElBX1NPVVJDRSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9NRURJQV9TVEFUSVNUSUNTIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX01FRElBX1NUUkVBTSBQUklWQVRFIE9GRikK
LVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9WSURFT19QUkVTRU5UQVRJ
T05fTU9ERSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTiBQUklWQVRFIE9GRikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJfUlRDIFBSSVZBVEUgT0ZGKQotCi0j
IFBheW1lbnQgdGhpbmdzCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
QVBQTEVfUEFZIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX1BBWU1FTlRfUkVRVUVTVCBQUklWQVRFIE9GRikKLQotIyBXZWJHTAotV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQkdMMiBQUklWQVRFIE9GRikKLQotIyBP
ZmYgZm9yIG5vdywgYnV0IHNob3VsZCBiZSBvbgotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX0FQSV9URVNUUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9BUFBMSUNBVElPTl9NQU5JRkVTVCBQUklWQVRFIE9GRikKLVdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9BU1lOQ19TQ1JPTExJTkcgUFJJ
VkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ09OVEVO
VF9FWFRFTlNJT05TIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX0NPTlRFTlRfRklMVEVSSU5HIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19UWVBFRF9PTSBQUklWQVRFIE9GRikKLVdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9EQVJLX01PREVfQ1NTIFBSSVZBVEUg
T0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0RBVEFDVUVfVkFM
VUUgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
REFUQUxJU1RfRUxFTUVOVCBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRE9XTkxPQURfQVRUUklCVVRFIFBSSVZBVEUg
T0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0VOQ1JZUFRFRF9N
RURJQSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9JTlRFTExJR0VOVF9UUkFDS0lOR19QUkVWRU5USU9OIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0xBWUVSX0JBU0VEX1NWR19FTkdJTkUgUFJJ
VkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9MRVRURVJQUkVTUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9MQVlPVVRfRk9STUFUVElOR19DT05URVhUIFBSSVZB
VEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0xFVFRFUlBS
RVNTIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X01FTU9SWV9TQU1QTEVSIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX05FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OIFBSSVZB
VEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX05FVFdPUktf
Q0FDSEVfU1RBTEVfV0hJTEVfUkVWQUxJREFURSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9OT1RJRklDQVRJT05TIFBSSVZBVEUgT0ZGKQotV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX09WRVJGTE9XX1NDUk9MTElOR19U
T1VDSCBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9QREZLSVRfUExVR0lOIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX1BPSU5URVJfTE9DSyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVG
QVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRVNPVVJDRV9VU0FHRSBQUklWQVRFIE9GRikKLVdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SVUJCRVJfQkFORElORyBQUklWQVRF
IE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TQU5EQk9YX0VY
VEVOU0lPTlMgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfU0VSVkVSX1BSRUNPTk5FQ1QgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfU0VSVklDRV9DT05UUk9MUyBQUklWQVRFIE9GRikKLVdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TRVJWSUNFX1dPUktFUiBQUklWQVRF
IE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TSEFSRUFCTEVf
UkVTT1VSQ0UgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfU01PT1RIX1NDUk9MTElORyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9TUEVFQ0hfU1lOVEhFU0lTIFBSSVZBVEUgT0ZGKQotV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1RFTEVQSE9ORV9OVU1CRVJfREVURUNU
SU9OIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X1RFWFRfQVVUT1NJWklORyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9VU0VSX01FU1NBR0VfSEFORExFUlMgUFJJVkFURSBPRkYpCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVkFSSUFUSU9OX0ZPTlRTIFBSSVZBVEUg
T0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQkRSSVZFUiBQ
UklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJf
QVVUSE4gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfV0VCX0NSWVBUTyBQUklWQVRFIE9GRikKLQotI1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKFVTRV9WRVJTSU9OX1NUQU1QRVIgUFJJVkFURSBPTikKLQotIyBFeHBlcmltZW50YWwg
ZmVhdHVyZXMKLSNXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVNT1RF
X0lOU1BFQ1RPUiBQUklWQVRFICR7RU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFU30pCi1XRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUiBQUklW
QVRFIE9GRikKLSNXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVTT1VS
Q0VfVVNBR0UgUFJJVkFURSAke0VOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVN9KQotV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFU09VUkNFX1VTQUdFIFBSSVZBVEUg
T0ZGKQotCi0jIEZlYXR1cmVzIHRvIGludmVzdGlnYXRlCi0jCi0jIEZlYXR1cmVzIHRoYXQgYXJl
IHRlbXBvcmFyaWx5IHR1cm5lZCBvZmYgYmVjYXVzZSBhbiBpbXBsZW1lbnRhdGlvbiBpcyBub3QK
LSMgcHJlc2VudCBhdCB0aGlzIHRpbWUKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9GVExfSklUIFBSSVZBVEUgT0ZGKQotCi0jIE5vIHN1cHBvcnQgcGxhbm5lZAotCi0j
IEZJWE1FOiBQb3J0IGJtYWxsb2MgdG8gV2luZG93cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MzMxMAotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
VVNFX1NZU1RFTV9NQUxMT0MgUFJJVkFURSBPTikKLQotV0VCS0lUX09QVElPTl9FTkQoKQotCi1p
ZiAoQVBQTEVfQlVJTEQpCi0gICAgc2V0KENPUkVGT1VOREFUSU9OX0xJQlJBUlkgQ29yZUZvdW5k
YXRpb24ke0RFQlVHX1NVRkZJWH0pCi0gICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0NG
IE9OKQotICAgIGZpbmRfcGFja2FnZShMaWJYbWwyIDIuOS4xIFJFUVVJUkVEKQotICAgIGlmIChF
TkFCTEVfWFNMVCkKLSAgICAgICAgZmluZF9wYWNrYWdlKExpYlhzbHQgMS4xLjI4IFJFUVVJUkVE
KQotICAgIGVuZGlmICgpCi1lbHNlICgpCi0gICAgZmluZF9wYWNrYWdlKExpYlhtbDIgMi45Ljcg
UkVRVUlSRUQpCi0gICAgaWYgKEVOQUJMRV9YU0xUKQotICAgICAgICBmaW5kX3BhY2thZ2UoTGli
WHNsdCAxLjEuMzIgUkVRVUlSRUQpCi0gICAgZW5kaWYgKCkKLWVuZGlmICgpCi0KLWZpbmRfcGFj
a2FnZShDVVJMIDcuNjAuMCBSRVFVSVJFRCkKLWZpbmRfcGFja2FnZShJQ1UgNjEuMiBSRVFVSVJF
RCBDT01QT05FTlRTIGRhdGEgaTE4biB1YykKLWZpbmRfcGFja2FnZShKUEVHIDEuNS4yIFJFUVVJ
UkVEKQotZmluZF9wYWNrYWdlKE9wZW5TU0wgMi4wLjAgUkVRVUlSRUQpCi1maW5kX3BhY2thZ2Uo
UE5HIDEuNi4zNCBSRVFVSVJFRCkKLWZpbmRfcGFja2FnZShTUUxpdGUzIDMuMjMuMSBSRVFVSVJF
RCkKLWZpbmRfcGFja2FnZShaTElCIDEuMi4xMSBSRVFVSVJFRCkKLWZpbmRfcGFja2FnZShMaWJQ
U0wgMC4yMC4yIFJFUVVJUkVEKQotCi0jIEZJWE1FOiBXZSBzaG91bGQgYWRkIHRoZSBmb2xsb3dp
bmcsIHRvby4KLSMgZmluZF9wYWNrYWdlKFdlYlAgUkVRVUlSRUQgQ09NUE9ORU5UUyBkZW11eCkK
LSMgaWYgKFdlYlBfRk9VTkQpCi0jICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfV0VC
UCBPTikKLSMgZW5kaWYgKCkKLQotc2V0KFVTRV9BTkdMRV9FR0wgT04pCi0KLVNFVF9BTkRfRVhQ
T1NFX1RPX0JVSUxEKFVTRV9DVVJMIE9OKQotU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0RJ
UkVDVDJEIE9OKQotU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0VHTCBPTikKLVNFVF9BTkRf
RVhQT1NFX1RPX0JVSUxEKFVTRV9PUEVOR0xfRVMgT04pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlM
RChIQVZFX09QRU5HTF9FU18zIE9OKQotU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX09QRU5T
U0wgT04pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfVEVYVFVSRV9NQVBQRVIgT04pCi1T
RVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfVEVYVFVSRV9NQVBQRVJfR0wgT04pCi0jU0VUX0FO
RF9FWFBPU0VfVE9fQlVJTEQoVVNFX0lOU1BFQ1RPUl9TT0NLRVRfU0VSVkVSICR7RU5BQkxFX1JF
TU9URV9JTlNQRUNUT1J9KQotU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0lOU1BFQ1RPUl9T
T0NLRVRfU0VSVkVSIE9GRikKLQotc2V0KFdURl9MSUJSQVJZX1RZUEUgU0hBUkVEKQotc2V0KEph
dmFTY3JpcHRDb3JlX0xJQlJBUllfVFlQRSBTSEFSRUQpCi0KLXNldChFTkFCTEVfQVBJX1RFU1RT
IE9GRikKLXNldChFTkFCTEVfV0VCQ09SRSBPTikKLXNldChFTkFCTEVfV0VCS0lUIE9OKQotc2V0
KEVOQUJMRV9XRUJLSVRfTEVHQUNZIE9OKQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjg3ODAzKQorKysgVG9vbHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMjItMDEtMDcgIFNhbSBXZWlu
aWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBEaXJl
Y3QyRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0
OTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0LmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9QbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vUGl4
ZWxEdW1wU3VwcG9ydERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmg6IFJlbW92ZWQuCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvd2luL1BpeGVsRHVtcFN1cHBvcnRXaW4uY3BwOgorICAgICAgICAoY3Jl
YXRlQml0bWFwQ29udGV4dEZyb21XZWJWaWV3KToKKyAgICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFr
ZTogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlUGFnZS5jcHA6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6
ZHVtcERPTUFzV2ViQXJjaGl2ZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9y
bUZUVy5jbWFrZTogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1BsYXRmb3Jt
V2ViVmlldy5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvd2luL1BsYXRmb3JtV2ViVmll
d1dpbi5jcHA6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdEludm9jYXRpb25E
aXJlY3QyRC5jcHA6IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIFRpbSBIb3J0b24gIDx0aW1vdGh5
X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQS9CIGNvbXBhcmlzb24gdGVzdHMgZmFpbCB0
cnlpbmcgdG8gbG9vayB1cCBmdXp6eSBtYXRjaCB0b2xlcmFuY2UKSW5kZXg6IFRvb2xzL1BsYXRm
b3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZp
c2lvbiAyODc4MDMpCisrKyBUb29scy9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBA
IC0xLDExICswLDAgQEAKLSNhZGRfc3ViZGlyZWN0b3J5KEltYWdlRGlmZikKLQotaWYgKEVOQUJM
RV9XRUJLSVRfTEVHQUNZKQotICAgICNhZGRfc3ViZGlyZWN0b3J5KER1bXBSZW5kZXJUcmVlKQot
ICAgIGFkZF9zdWJkaXJlY3RvcnkoTWluaUJyb3dzZXIvd2luKQotZW5kaWYgKCkKLQotaWYgKEVO
QUJMRV9XRUJLSVQpCi0gICAgYWRkX3N1YmRpcmVjdG9yeShUZXN0UnVubmVyU2hhcmVkKQotICAg
IGFkZF9zdWJkaXJlY3RvcnkoV2ViS2l0VGVzdFJ1bm5lcikKLWVuZGlmICgpCkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0LmNwcAkocmV2aXNpb24gMjg3ODAzKQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDggKzQxLDYgQEAKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0Q0cuaCIKICNl
bGlmIFVTRShDQUlSTykKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0Q2Fpcm8uaCIKLSNlbGlm
IFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuaCIKICNl
bmRpZgogCiB2b2lkIGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKGNv
bnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZEhhc2gpCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS9QbGF0Zm9ybVdpbi5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9Q
bGF0Zm9ybVdpbi5jbWFrZQkocmV2aXNpb24gMjg3ODAzKQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvUGxhdGZvcm1XaW4uY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTUyLDI0ICs1MiwxNSBAQCBl
bHNlICgpCiAgICAgICAgIENGTmV0d29yawogICAgICAgICBDb3JlVGV4dAogICAgICkKLSAgICBp
ZiAoJHtVU0VfRElSRUNUMkR9KQotICAgICAgICBsaXN0KEFQUEVORCBEdW1wUmVuZGVyVHJlZV9T
T1VSQ0VTCi0gICAgICAgICAgICB3aW4vUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmNwcAotICAg
ICAgICApCi0gICAgICAgIGxpc3QoQVBQRU5EIER1bXBSZW5kZXJUcmVlX0xJQlJBUklFUwotICAg
ICAgICAgICAgRDJkMQotICAgICAgICApCi0gICAgZWxzZSAoKQotICAgICAgICBsaXN0KEFQUEVO
RCBEdW1wUmVuZGVyVHJlZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAgICAgICAg
ICR7RHVtcFJlbmRlclRyZWVfRElSfS9jZwotICAgICAgICApCi0gICAgICAgIGxpc3QoQVBQRU5E
IER1bXBSZW5kZXJUcmVlX1NPVVJDRVMKLSAgICAgICAgICAgIGNnL1BpeGVsRHVtcFN1cHBvcnRD
Ry5jcHAKLSAgICAgICAgKQotICAgICAgICBsaXN0KEFQUEVORCBEdW1wUmVuZGVyVHJlZV9MSUJS
QVJJRVMKLSAgICAgICAgICAgIENvcmVHcmFwaGljcwotICAgICAgICApCi0gICAgZW5kaWYgKCkK
KyAgICBsaXN0KEFQUEVORCBEdW1wUmVuZGVyVHJlZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJ
RVMKKyAgICAgICAgJHtEdW1wUmVuZGVyVHJlZV9ESVJ9L2NnCisgICAgKQorICAgIGxpc3QoQVBQ
RU5EIER1bXBSZW5kZXJUcmVlX1NPVVJDRVMKKyAgICAgICAgY2cvUGl4ZWxEdW1wU3VwcG9ydENH
LmNwcAorICAgICkKKyAgICBsaXN0KEFQUEVORCBEdW1wUmVuZGVyVHJlZV9MSUJSQVJJRVMKKyAg
ICAgICAgQ29yZUdyYXBoaWNzCisgICAgKQogZW5kaWYgKCkKIAogV0VCS0lUX0FERF9QUkVDT01Q
SUxFRF9IRUFERVIoIkR1bXBSZW5kZXJUcmVlUHJlZml4LmgiICJ3aW4vRHVtcFJlbmRlclRyZWVQ
cmVmaXguY3BwIiBEdW1wUmVuZGVyVHJlZV9TT1VSQ0VTKQpJbmRleDogVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL1BpeGVsRHVtcFN1cHBvcnREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL1BpeGVsRHVtcFN1cHBvcnREaXJlY3QyRC5jcHAJKHJldmlz
aW9uIDI4NzgwMykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBwb3J0
RGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsODEgKzAsMCBAQAotLyoKLSogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9y
dERpcmVjdDJELmgiCi0KLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgotI2luY2x1ZGUgIlBp
eGVsRHVtcFN1cHBvcnQuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y3R5cGUu
aD4KLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9TdHJpbmdFeHRyYXMuaD4KLQotCi1zdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlw
ZVBORyA9IENGU1RSKCJwdWJsaWMucG5nIik7Ci0KLUlEMkQxRmFjdG9yeSogcGl4ZWxEdW1wU3lz
dGVtRmFjdG9yeSgpCi17Ci0gICAgc3RhdGljIElEMkQxRmFjdG9yeSogZGlyZWN0MkRGYWN0b3J5
ID0gbnVsbHB0cjsKLSAgICBpZiAoIWRpcmVjdDJERmFjdG9yeSkgewotI2lmbmRlZiBOREVCVUcK
LSAgICAgICAgRDJEMV9GQUNUT1JZX09QVElPTlMgb3B0aW9ucyA9IHsgfTsKLSAgICAgICAgb3B0
aW9ucy5kZWJ1Z0xldmVsID0gRDJEMV9ERUJVR19MRVZFTF9JTkZPUk1BVElPTjsKLSAgICAgICAg
SFJFU1VMVCBociA9IEQyRDFDcmVhdGVGYWN0b3J5KEQyRDFfRkFDVE9SWV9UWVBFX01VTFRJX1RI
UkVBREVELCBvcHRpb25zLCAmZGlyZWN0MkRGYWN0b3J5KTsKLSNlbHNlCi0gICAgICAgIEhSRVNV
TFQgaHIgPSBEMkQxQ3JlYXRlRmFjdG9yeShEMkQxX0ZBQ1RPUllfVFlQRV9NVUxUSV9USFJFQURF
RCwgJmRpcmVjdDJERmFjdG9yeSk7Ci0jZW5kaWYKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VD
Q0VFREVEKGhyKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRpcmVjdDJERmFjdG9yeTsKLX0KLQot
c3RhdGljIHZvaWQgcHJpbnRQTkcoSUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBjaGFyKiBjaGVj
a3N1bSkKLXsKLSAgICBVTlVTRURfUEFSQU0oaW1hZ2UpOwotICAgIFVOVVNFRF9QQVJBTShjaGVj
a3N1bSk7Ci0gICAgLy8gTm90IGltcGxlbWVudGVkLgotfQotCi12b2lkIGNvbXB1dGVTSEExSGFz
aFN0cmluZ0ZvckJpdG1hcENvbnRleHQoQml0bWFwQ29udGV4dCogY29udGV4dCwgY2hhciBoYXNo
U3RyaW5nWzMzXSkKLXsKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VEX1BB
UkFNKGhhc2hTdHJpbmcpOwotICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KLX0KLQotdm9pZCBkdW1w
Qml0bWFwKEJpdG1hcENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGNoZWNrc3VtKQotewot
ICAgIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElEMkQxQml0bWFwLCAmX191dWlkb2YoSUQyRDFCaXRt
YXApPj4gaW1hZ2U7Ci0gICAgSFJFU1VMVCBociA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5HZXRCaXRtYXAoJmltYWdlKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHByaW50UE5HKGltYWdlLkdldEludGVyZmFjZVB0cigpLCBjaGVja3N1bSk7
Ci19CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydERpcmVj
dDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BpeGVsRHVtcFN1
cHBvcnREaXJlY3QyRC5oCShyZXZpc2lvbiAyODc4MDMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2NCAr
MCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
IDxjb21pcC5oPgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotdHlwZWRlZiBIQklUTUFQIFBsYXRmb3Jt
Qml0bWFwQnVmZmVyOwotCi1jbGFzcyBCaXRtYXBDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8
Qml0bWFwQ29udGV4dD4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Qml0bWFwQ29udGV4dD4g
Y3JlYXRlQnlBZG9wdGluZ0JpdG1hcEFuZENvbnRleHQoUGxhdGZvcm1CaXRtYXBCdWZmZXIgYnVm
ZmVyLCBJRDJEMVJlbmRlclRhcmdldCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEJpdG1hcENvbnRleHQoYnVmZmVyLCBjb250ZXh0KSk7Ci0gICAgfQotCi0g
ICAgfkJpdG1hcENvbnRleHQoKQotICAgIHsKLSAgICAgICAgaWYgKG1fYnVmZmVyKQotICAgICAg
ICAgICAgRGVsZXRlT2JqZWN0KG1fYnVmZmVyKTsKLSAgICB9Ci0KLSAgICBJRDJEMUJpdG1hcFJl
bmRlclRhcmdldCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0Lkdl
dEludGVyZmFjZVB0cigpOyB9Ci0KLXByaXZhdGU6Ci0gICAgQml0bWFwQ29udGV4dChQbGF0Zm9y
bUJpdG1hcEJ1ZmZlciBidWZmZXIsIElEMkQxUmVuZGVyVGFyZ2V0KiBjb250ZXh0KQotICAgICAg
ICA6IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAgICB7
Ci0gICAgfQotCi0gICAgUGxhdGZvcm1CaXRtYXBCdWZmZXIgbV9idWZmZXI7Ci0gICAgX2NvbV9w
dHJfdDxfY29tX0lJSUQ8SUQyRDFCaXRtYXAsICZfX3V1aWRvZihJRDJEMUJpdG1hcCk+PiBtX2Jp
dG1hcDsKLSAgICBfY29tX3B0cl90PF9jb21fSUlJRDxJRDJEMUJpdG1hcFJlbmRlclRhcmdldCwg
Jl9fdXVpZG9mKElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KT4+IG1fY29udGV4dDsKLX07Ci0KLVJl
ZlB0cjxCaXRtYXBDb250ZXh0PiBjcmVhdGVCaXRtYXBDb250ZXh0RnJvbVdlYlZpZXcoYm9vbCBv
bnNjcmVlbiwgYm9vbCBpbmNyZW1lbnRhbFJlcGFpbnQsIGJvb2wgc3dlZXBIb3Jpem9udGFsbHks
IGJvb2wgZHJhd1NlbGVjdGlvblJlY3QpOwotSUQyRDFGYWN0b3J5KiBwaXhlbER1bXBTeXN0ZW1G
YWN0b3J5KCk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9y
dFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BpeGVsRHVt
cFN1cHBvcnRXaW4uY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vUGl4ZWxEdW1wU3VwcG9ydFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMy
LDYgQEAKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0Q0cuaCIKICNlbGlmIFVTRShDQUlSTykK
ICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0Q2Fpcm8uaCIKLSNlbGlmIFVTRShESVJFQ1QyRCkK
LSNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuaCIKICNlbmRpZgogCiAjaW5jbHVk
ZSAiRHVtcFJlbmRlclRyZWUuaCIKQEAgLTk2LDE5ICs5NCw2IEBAIFJlZlB0cjxCaXRtYXBDb250
ZXh0PiBjcmVhdGVCaXRtYXBDb250ZXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZm8uYm1XaWR0aCwgaW5mby5ibUhlaWdodCwgaW5mby5i
bVdpZHRoQnl0ZXMpOyAKICAgICBjYWlyb190KiBjb250ZXh0ID0gY2Fpcm9fY3JlYXRlKGltYWdl
KTsgCiAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGltYWdlKTsKLSNlbGlmIFVTRShESVJFQ1Qy
RCkKLSAgICBhdXRvIHRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0
aWVzKCk7Ci0gICAgdGFyZ2V0UHJvcGVydGllcy5waXhlbEZvcm1hdCA9IEQyRDE6OlBpeGVsRm9y
bWF0KERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNLCBEMkQxX0FMUEhBX01PREVfSUdOT1JFKTsK
LQotICAgIENPTVB0cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7Ci0gICAgSFJF
U1VMVCBociA9IHBpeGVsRHVtcFN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQo
JnRhcmdldFByb3BlcnRpZXMsICZyZW5kZXJUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBociA9IHJlbmRlclRhcmdldC0+Qmlu
ZERDKG1lbW9yeURDLmdldCgpLCAmZnJhbWUpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBjb250ZXh0ID0gcmVuZGVyVGFyZ2V0Lmdl
dCgpOwogI2VuZGlmIAogCiAgICAgcmV0dXJuIEJpdG1hcENvbnRleHQ6OmNyZWF0ZUJ5QWRvcHRp
bmdCaXRtYXBBbmRDb250ZXh0KGJpdG1hcCwgV1RGTW92ZShjb250ZXh0KSk7CkluZGV4OiBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1GVFcuY21ha2UJKHJldmlzaW9uIDI4NzgwMykKKysr
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1GVFcuY21ha2UJKG5vbmV4aXN0ZW50KQpA
QCAtMSw0MCArMCwwIEBACi1saXN0KEFQUEVORCBXZWJLaXRUZXN0UnVubmVyX1NPVVJDRVMKLSAg
ICB3aW4vRXZlbnRTZW5kZXJQcm94eVdpbi5jcHAKLSAgICB3aW4vUGxhdGZvcm1XZWJWaWV3V2lu
LmNwcAotICAgIHdpbi9UZXN0Q29udHJvbGxlcldpbi5jcHAKLSAgICB3aW4vVGVzdEludm9jYXRp
b25EaXJlY3QyRC5jcHAKLSAgICB3aW4vVUlTY3JpcHRDb250cm9sbGVyV2luLmNwcAotICAgIHdp
bi9tYWluLmNwcAotKQotCi1zZXQod3JhcHBlcl9ERUZJTklUSU9OUwotICAgIFVTRV9DT05TT0xF
X0VOVFJZX1BPSU5UCi0gICAgV0lOX0NBSVJPCi0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdFRlc3RS
dW5uZXJJbmplY3RlZEJ1bmRsZV9TT1VSQ0VTCi0gICAgSW5qZWN0ZWRCdW5kbGUvd2luL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyV2luLmNwcAotICAgIEluamVjdGVkQnVuZGxlL3dpbi9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50V2luLmNwcAotICAgIEluamVjdGVkQnVuZGxlL3dpbi9BY3RpdmF0ZUZv
bnRzV2luLmNwcAotICAgIEluamVjdGVkQnVuZGxlL3dpbi9JbmplY3RlZEJ1bmRsZVdpbi5jcHAK
LSAgICBJbmplY3RlZEJ1bmRsZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAKLSkKLQotbGlzdChBUFBF
TkQgV2ViS2l0VGVzdFJ1bm5lcl9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgJHtXZWJLaXRUZXN0
UnVubmVyX0RJUn0vSW5qZWN0ZWRCdW5kbGUvd2luCi0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdFRl
c3RSdW5uZXJfTElCUkFSSUVTCi0gICAgQ29tc3VwcHcKLSAgICBPbGVhY2MKLSkKLQotV0VCS0lU
X0FERF9QUkVDT01QSUxFRF9IRUFERVIoIldlYktpdFRlc3RSdW5uZXJQcmVmaXguaCIgIndpbi9X
ZWJLaXRUZXN0UnVubmVyUHJlZml4LmNwcCIgV2ViS2l0VGVzdFJ1bm5lcl9TT1VSQ0VTKQotCi1z
ZXQoQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHUyAiJHtDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdT
fSAke01TVkNfUlVOVElNRV9MSU5LRVJfRkxBR1N9IikKLQotV0VCS0lUX1dSQVBfRVhFQ1VUQUJM
RShXZWJLaXRUZXN0UnVubmVyCi0gICAgU09VUkNFUyAke1RPT0xTX0RJUn0vd2luL0RMTExhdW5j
aGVyL0RMTExhdW5jaGVyTWFpbi5jcHAKLSAgICBMSUJSQVJJRVMgc2hsd2FwaQotKQotdGFyZ2V0
X2NvbXBpbGVfZGVmaW5pdGlvbnMoV2ViS2l0VGVzdFJ1bm5lciBQUklWQVRFICR7d3JhcHBlcl9E
RUZJTklUSU9OU30pCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3
LmgJKHJldmlzaW9uIDI4NzgwMykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1X
ZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDExICs1NCw3IEBAIGNsYXNzIEhlYWRsZXNz
Vmlld0JhY2tlbmQ7CiB0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdLVmlldzsKIHR5cGVkZWYg
V1BFVG9vbGluZ0JhY2tlbmRzOjpIZWFkbGVzc1ZpZXdCYWNrZW5kKiBQbGF0Zm9ybVdpbmRvdzsK
ICNlbGlmIFBMQVRGT1JNKFdJTikKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZDJkMV8x
Lmg+Ci0jZWxzZQogI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYKIGNsYXNzIFRlc3RSdW5uZXJX
aW5kb3c7CiB0eXBlZGVmIEhXTkQgUGxhdGZvcm1XaW5kb3c7CiB0eXBlZGVmIFdLVmlld1JlZiBQ
bGF0Zm9ybVdLVmlldzsKQEAgLTY2LDEwICs2Miw2IEBAIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRm
b3JtV0tWaWV3OwogCiAjaWYgVVNFKENBSVJPKQogdHlwZWRlZiBjYWlyb19zdXJmYWNlX3QqIFBs
YXRmb3JtSW1hZ2U7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQyRDFCaXRtYXA7
Ci0KLXR5cGVkZWYgSUQyRDFCaXRtYXAqIFBsYXRmb3JtSW1hZ2U7CiAjZW5kaWYKIAogbmFtZXNw
YWNlIFdUUiB7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCShyZXZpc2lvbiAyODc4MDMp
CisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
UGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAKICNpbmNsdWRlIDx3dGYv
dGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CiAjZW5kaWYKIAotI2lmIFVTRShDRikgJiYg
IVBMQVRGT1JNKFdJTl9DQUlSTykgJiYgIVVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0YpICYmICFQ
TEFURk9STShXSU5fQ0FJUk8pCiAjaW5jbHVkZSAiV2ViQXJjaGl2ZUR1bXBTdXBwb3J0LmgiCiAj
ZW5kaWYKIApAQCAtNzgwLDcgKzc4MCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1w
QWxsRnJhbWVzVGUKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBET01Bc1dlYkFyY2hp
dmUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikK
IHsKLSNpZiBVU0UoQ0YpICYmICFQTEFURk9STShXSU5fQ0FJUk8pICYmICFVU0UoRElSRUNUMkQp
CisjaWYgVVNFKENGKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKQogICAgIGF1dG8gd2tEYXRhID0g
YWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVdlYkFyY2hpdmUoZnJhbWUpKTsKICAgICBhdXRvIGNm
RGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKDAsIFdLRGF0YUdldEJ5dGVzKHdrRGF0YS5nZXQo
KSksIFdLRGF0YUdldFNpemUod2tEYXRhLmdldCgpKSkpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKFdlYkNvcmVUZXN0U3VwcG9ydDo6Y3JlYXRlWE1MU3RyaW5nRnJvbVdlYkFyY2hpdmVEYXRh
KGNmRGF0YS5nZXQoKSkuZ2V0KCkpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4v
UGxhdGZvcm1XZWJWaWV3V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL3dpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCShyZXZpc2lvbiAyODc4MDMpCisrKyBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL3dpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSwxMCArMzksNiBAQAogI2luY2x1ZGUgPGNhaXJvLmg+CiAjZW5kaWYKIAotI2lm
IFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkMmQxXzEuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2Ug
V1RSIHsKIAogc3RhdGljIExQQ1dTVFIgaG9zdFdpbmRvd0NsYXNzTmFtZSA9IEwiV1RSV2ViVmll
d0hvc3RXaW5kb3ciOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdEludm9j
YXRpb25EaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93
aW4vVGVzdEludm9jYXRpb25EaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgwMykKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvd2luL1Rlc3RJbnZvY2F0aW9uRGlyZWN0MkQuY3BwCShub25leGlz
dGVudCkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICAgICAgICAgICAoQykgMjAxMSBCcmVu
dCBGdWxnaGFtIDxiZnVsZ2hhbUB3ZWJraXQub3JnPi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
ICAgICAgICAgICAoQykgMjAxMCwgMjAxMSBJZ2FsaWEgUy5MCi0gKiAgICAgICAgICAgKEMpIDIw
MTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0SW52b2NhdGlvbi5oIgotCi0jaW5jbHVk
ZSAiUGl4ZWxEdW1wU3VwcG9ydC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgotI2lu
Y2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRl
ZC5oPgotI2luY2x1ZGUgPGNzdGRpbz4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2lu
Y2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdUUiB7Ci0KLQotdm9pZCBU
ZXN0SW52b2NhdGlvbjo6ZHVtcFBpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoU25hcHNob3RS
ZXN1bHRUeXBlLCBXS0FycmF5UmVmIC8qIHJlcGFpbnRSZWN0cyAqLywgV0tJbWFnZVJlZikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVFIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448672</attachid>
            <date>2022-01-08 10:13:27 -0800</date>
            <delta_ts>2022-01-08 10:43:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234999-20220108101324.patch</filename>
            <type>text/plain</type>
            <size>481398</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI4Nzgx
MSkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAx
LTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3Vw
cG9ydCBmb3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2U6IFJlbW92ZWQuCisKIDIw
MjItMDEtMDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI4NzY5OC4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAxLTA3ICBTYW0g
V2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3Ig
RGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIFNhYW0gQmFyYXRp
ICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQXBwZWFzZSBhbiBh
c3NlcnRpb24gdGhhdCB3YXMgYnJva2VuIGJ5IHIyODc4MDEgYnkgc2xpZ2h0bHkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1GVFcuY21ha2UJKHJldmlzaW9uIDI4NzgxMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBA
IC0xLDQ0ICswLDAgQEAKLWxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKLSAgICBB
UEkvSlNTdHJpbmdSZWZCU1RSLmNwcAotKQotCi1saXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9Q
VUJMSUNfRlJBTUVXT1JLX0hFQURFUlMKLSAgICBBUEkvSlNTdHJpbmdSZWZCU1RSLmgKLSAgICBB
UEkvSmF2YVNjcmlwdENvcmUuaAotKQotCi1pZiAoVVNFX0NGKQotICAgIGxpc3QoQVBQRU5EIEph
dmFTY3JpcHRDb3JlX1NPVVJDRVMKLSAgICAgICAgQVBJL0pTU3RyaW5nUmVmQ0YuY3BwCi0gICAg
KQotCi0gICAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfUFVCTElDX0ZSQU1FV09SS19IRUFE
RVJTCi0gICAgICAgIEFQSS9KU1N0cmluZ1JlZkNGLmgKLSAgICApCi0KLSAgICBsaXN0KEFQUEVO
RCBKYXZhU2NyaXB0Q29yZV9MSUJSQVJJRVMKLSAgICAgICAgJHtDT1JFRk9VTkRBVElPTl9MSUJS
QVJZfQotICAgICkKLWVuZGlmICgpCi0KLWlmIChOT1QgV1RGX1BMQVRGT1JNX1dJTl9DQUlSTykK
LSAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9MSUJSQVJJRVMKLSAgICAgICAgd2lubW0K
LSAgICApCi1lbmRpZiAoKQotCi1pZiAoRU5BQkxFX1JFTU9URV9JTlNQRUNUT1IpCi0gICAgaW5j
bHVkZShpbnBzZWN0b3IvcmVtb3RlL1NvY2tldC5jbWFrZSkKLWVsc2UgKCkKLSAgICBsaXN0KFJF
TU9WRV9JVEVNIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKLSAgICAgICAgaW5zcGVjdG9yL0pTR2xv
YmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKLSAgICApCi1lbmRpZiAoKQotCi1maWxl
KENPUFkKLSAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUucmVzb3VyY2VzIgotICAgIERFU1RJTkFUSU9OCi0gICAgJHtDTUFLRV9S
VU5USU1FX09VVFBVVF9ESVJFQ1RPUll9Ci0pCi0KLXNldChKYXZhU2NyaXB0Q29yZV9PVVRQVVRf
TkFNRSBKYXZhU2NyaXB0Q29yZSR7REVCVUdfU1VGRklYfSkKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAxLTA3ICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBm
b3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCByZXZlcnRpbmcgcjI4NzY5OC4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL1BsYXRm
b3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL1BsYXRm
b3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDM1ICswLDAgQEAKLSMgV2Un
cmUgdGFyZ2V0aW5nIFdpbmRvd3MgMTAgd2hpY2ggd2lsbCBoYXZlIERpcmVjdFggMTEgb24gaXQg
c28gcmVxdWlyZSB0aGF0Ci0jIGJ1dCBtYWtlIERpcmVjdFggOSBvcHRpb25hbAotCi1saXN0KEFQ
UEVORCBBTkdMRV9ERUZJTklUSU9OUwotICAgIEdMX0FQSUNBTEw9Ci0gICAgR0xfQVBJPQotICAg
IE5PTUlOTUFYCi0pCi0KLSMgV2UncmUgdGFyZ2V0aW5nIFdpbmRvd3MgMTAgd2hpY2ggd2lsbCBo
YXZlIERpcmVjdFggMTEKLWxpc3QoQVBQRU5EIEFOR0xFX1NPVVJDRVMKLSAgICAke19kM2QxMV9i
YWNrZW5kX3NvdXJjZXN9Ci0gICAgJHtfZDNkX3NoYXJlZF9zb3VyY2VzfQotCi0gICAgJHthbmds
ZV90cmFuc2xhdG9yX2hsc2xfc291cmNlc30KLQotICAgICR7bGliYW5nbGVfZ3B1X2luZm9fdXRp
bF9zb3VyY2VzfQotICAgICR7bGliYW5nbGVfZ3B1X2luZm9fdXRpbF93aW5fc291cmNlc30KLSkK
LQotbGlzdChBUFBFTkQgQU5HTEVfREVGSU5JVElPTlMKLSAgICBBTkdMRV9FTkFCTEVfRDNEMTEK
LSAgICBBTkdMRV9FTkFCTEVfSExTTAotKQotCi1saXN0KEFQUEVORCBBTkdMRUdMRVN2Ml9MSUJS
QVJJRVMgZHhndWlkIGR4Z2kpCi0KLSMgRGlyZWN0WCA5IHN1cHBvcnQgc2hvdWxkIGJlIG9wdGlv
bmFsIGJ1dCBBTkdMRSB3aWxsIG5vdCBjb21waWxlIHdpdGhvdXQgaXQKLWxpc3QoQVBQRU5EIEFO
R0xFX1NPVVJDRVMgJHtfZDNkOV9iYWNrZW5kX3NvdXJjZXN9KQotbGlzdChBUFBFTkQgQU5HTEVf
REVGSU5JVElPTlMgQU5HTEVfRU5BQkxFX0QzRDkpCi1saXN0KEFQUEVORCBBTkdMRUdMRVN2Ml9M
SUJSQVJJRVMgZDNkOSkKLQotIyBVc2Ugc2hhcmVkIGxpYnJhcmllcwotc2V0KEdMRVN2Ml9MSUJS
QVJZX1RZUEUgU0hBUkVEKQotc2V0KEVHTF9MSUJSQVJZX1RZUEUgU0hBUkVEKQpJbmRleDogU291
cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMjItMDEtMDcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29t
PgorCisgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBEaXJlY3QyRAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0OTk5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1GVFcuY21ha2U6
IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRvcHQgbGlua2VkT25PckFmdGVyKCkgaW4gbW9yZSBwbGFjZXMK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDYxICswLDAg
QEAKLWxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwotICAgIHRleHQvd2luL1dDaGFyU3Ry
aW5nRXh0cmFzLmgKLQotICAgIHdpbi9EYmdIZWxwZXJXaW4uaAotICAgIHdpbi9HRElPYmplY3Qu
aAotICAgIHdpbi9Tb2Z0TGlua2luZy5oCi0gICAgd2luL1dpbjMySGFuZGxlLmgKLSkKLQotbGlz
dChBUFBFTkQgV1RGX1BSSVZBVEVfTElCUkFSSUVTCi0gICAgRGJnaGVscCAjIEZvciBzeW1ib2wg
aGFuZGxpbmcgPGRiZ2hlbHAuaD4KLSAgICBTaGx3YXBpICMgRm9yIGZpbGUgc3lzdGVtIG9wZXJh
dGlvbnMgPHNobHdhcGkuaD4KLSkKLQotbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwotICAgICBX
aW5tbSAjIEZvciBtdWx0aW1lZGlhIGZ1bmN0aW9ucywgYWxzbyB1c2VkIGluIDx0aW1lYXBpLmg+
Ci0pCi0KLWxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCi0gICAgdGV4dC93aW4vU3RyaW5nV2luLmNw
cAotICAgIHRleHQvd2luL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VXaW4uY3BwCi0KLSAg
ICB3aW4vQ1BVVGltZVdpbi5jcHAKLSAgICB3aW4vRGJnSGVscGVyV2luLmNwcAotICAgIHdpbi9G
aWxlU3lzdGVtV2luLmNwcAotICAgIHdpbi9MYW5ndWFnZVdpbi5jcHAKLSAgICB3aW4vTG9nZ2lu
Z1dpbi5jcHAKLSAgICB3aW4vTWFpblRocmVhZFdpbi5jcHAKLSAgICB3aW4vTWVtb3J5Rm9vdHBy
aW50V2luLmNwcAotICAgIHdpbi9NZW1vcnlQcmVzc3VyZUhhbmRsZXJXaW4uY3BwCi0gICAgd2lu
L09TQWxsb2NhdG9yV2luLmNwcAotICAgIHdpbi9QYXRoV2Fsa2VyLmNwcAotICAgIHdpbi9SdW5M
b29wV2luLmNwcAotICAgIHdpbi9UaHJlYWRpbmdXaW4uY3BwCi0gICAgd2luL1dvcmtRdWV1ZVdp
bi5jcHAKLSkKLQotaWYgKFVTRV9DRikKLSAgICBsaXN0KEFQUEVORCBXVEZfUFVCTElDX0hFQURF
UlMKLSAgICAgICAgY2YvQ0ZVUkxFeHRyYXMuaAotICAgICAgICBjZi9TcGFuQ0YuaAotICAgICAg
ICBjZi9UeXBlQ2FzdHNDRi5oCi0KLSAgICAgICAgdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNG
LmgKLSAgICAgICAgdGV4dC9jZi9UZXh0QnJlYWtJdGVyYXRvckNGLmgKLSAgICApCi0gICAgbGlz
dChBUFBFTkQgV1RGX1NPVVJDRVMKLSAgICAgICAgY2YvQ0ZVUkxFeHRyYXMuY3BwCi0gICAgICAg
IGNmL0ZpbGVTeXN0ZW1DRi5jcHAKLSAgICAgICAgY2YvVVJMQ0YuY3BwCi0KLSAgICAgICAgdGV4
dC9jZi9BdG9tU3RyaW5nSW1wbENGLmNwcAotICAgICAgICB0ZXh0L2NmL1N0cmluZ0NGLmNwcAot
ICAgICAgICB0ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAKLSAgICAgICAgdGV4dC9jZi9TdHJpbmdW
aWV3Q0YuY3BwCi0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUyAke0NPUkVG
T1VOREFUSU9OX0xJQlJBUll9KQotZW5kaWYgKCkKLQotc2V0KFdURl9PVVRQVVRfTkFNRSBXVEYk
e0RFQlVHX1NVRkZJWH0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMzQgQEAKKzIw
MjItMDEtMDcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92
ZSBzdXBwb3J0IGZvciBEaXJlY3QyRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM0OTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9y
bUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtRlRXLmNtYWtlOiBSZW1vdmVkLgor
ICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUYuY3BwOgorICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01lZGlhQUYuaDoKKyAgICAgICAgKiBwYWdlL3dpbi9GcmFtZVdpbkRpcmVjdDJELmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmNyZWF0ZU1JTUVUeXBlUmVnaXN0cnlUaHJl
YWRHbG9iYWxEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4
Q2FjaGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpwcmVUcmFuc2Zvcm1lZE5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJh
dyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
ZHdGb250IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmR3Rm9udEZhY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYWRpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OnByZVRy
YW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzdXBwb3J0c01lZGlhVHlwZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OnNldFRhcmdldENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdy
YXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGF0aDo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBhdGg6OmFkZFJvdW5kZWRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRo
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vY2YvQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbkNGLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNETVNlc3Npb25BVkZvdW5kYXRpb25DRjo6Z2VuZXJhdGVLZXlSZXF1ZXN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50
SW1hZ2U6OmRyYXdQREZQYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T3BlblR5
cGVNYXRoRGF0YTo6T3BlblR5cGVNYXRoRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVu
YW1lQW5kQWN0aXZhdGVGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Qml0bWFwVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjp1cGRh
dGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRl
eHR1cmVHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNv
bnRlbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFj
a2VuZERpcmVjdDJELmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4
dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGll
cy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJE
VXRpbGl0aWVzLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Rp
cmVjdFdyaXRlVXRpbGl0aWVzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFNpemVEaXJlY3QyRC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGly
ZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0
Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250UGxhdGZvcm1EYXRhRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dFdpbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dFdpbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGly
ZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0xheWVyRGlyZWN0MkQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3Qy
RC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVj
b2RlckRpcmVjdDJELmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9OYXRpdmVJbWFnZURpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVG
b250RGF0YURpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VEaXJlY3QyRC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRl
ckVmZmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZl
SW1hZ2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5oOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5oOgorCiAyMDIyLTAxLTA4ICBU
eWxlciBXaWxjb2NrICA8dHlsZXJfd0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IEltcHJvdmUg
V2Vha0hhc2hTZXQgaHlnaWVuaWNzIGluIEFYT2JqZWN0Q2FjaGUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtNzEsMTI5ICs3MSwx
MDIgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRQogICAgIHBsYXRm
b3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCiApCiAKLWlmICgke1VTRV9E
SVJFQ1QyRH0pCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNU
T1JJRVMKLSAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3dpbiIKLSAg
ICApCi0KLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAgcGFnZS93aW4v
RnJhbWVXaW5EaXJlY3QyRC5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dENhc2NhZGVEaXJlY3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQ
bGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ds
eXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFkaWVudERpcmVjdDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0xheWVyRGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VEaXJlY3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2
ZUltYWdlRGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGly
ZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQu
Y3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVjdDJE
LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNw
cAotCi0gICAgICAgIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VEaXJlY3QyRC5jcHAKLSAgICApCi1l
bHNlICgpCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJ
RVMKLSAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
biIKLSAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9jZiIKLSAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2NhIgotICAg
ICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luIgotICAgICAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2ciCi0gICAgKQotCi0gICAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgICAgIHBhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCi0K
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvVGlsZUNvbnRyb2xsZXIuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVD
b3ZlcmFnZU1hcC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuY3Bw
Ci0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0EuY3Bw
Ci0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNw
cAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vTGF5ZXJDaGFuZ2VzRmx1c2hlci5j
cHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25X
aW4uY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBRmlsdGVy
c1dpbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXll
cldpbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXll
cldpbkludGVybmFsLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV0tDQUNG
Vmlld0xheWVyVHJlZUhvc3QuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9X
ZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9Db2xvckNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNlQ0cu
Y3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCi0gICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFkaWVudENHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJl
bmRlcmVyQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dEdMQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENH
LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCi0g
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5j
cHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5j
cHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dXaW4uY3BwCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ludFJlY3RDRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50U2l6
ZUNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1BhdHRlcm5DRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1h
Z2VDYWNoZVdpdGhUaW1lci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNm
b3JtYXRpb25NYXRyaXhDRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVn
aXN0cnkuY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2Nh
ZGVDb3JlVGV4dC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENv
cmVUZXh0LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250UGxhdGZv
cm1EYXRhQ29yZVRleHQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ds
eXBoUGFnZUNvcmVUZXh0LmNwcAotCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBl
L09wZW5UeXBlQ0cuY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dp
bi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dp
bi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2lu
LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCi0KLSAgICAg
ICAgcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcAotICAgICkKLQotICAgIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9MYXllclBvb2wuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5p
bWF0aW9uLmgKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUZpbHRlcnMu
aAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ29udHJvbGxlci5oCi0KLSAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL0Fic3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QuaAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuaAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3RDbGllbnQuaAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKLQotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNlQ0cuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5oCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFj
ZVBvb2wuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5oCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmgKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kLmgKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5oCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCi0gICAgKQotZW5kaWYg
KCkKK2xpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbiIKKyAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmIgorICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jYSIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFw
aGljcy9jZyIKKykKKworbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGFnZS93aW4v
RnJhbWVDR1dpbi5jcHAKKworICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuY3BwCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL1RpbGVDb250cm9sbGVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3Zl
cmFnZU1hcC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlR3JpZC5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYS9UcmFuc2Zvcm1hdGlvbk1hdHJpeENBLmNwcAorCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9MYXllckNoYW5nZXNGbHVzaGVyLmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBRmlsdGVyc1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYS93aW4vV0tDQUNGVmlld0xheWVyVHJlZUhvc3QuY3BwCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAorCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNw
YWNlQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50
Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJD
Ry5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW50UmVjdENHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFNpemVDRy5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGF0aENHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwCisKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4
dC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCisKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
dHlwZS9PcGVuVHlwZUNHLmNwcAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dp
bi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5jcHAKKworICAgIHBsYXRmb3JtL3dpbi9EcmFn
SW1hZ2VDR1dpbi5jcHAKKykKKworbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09S
S19IRUFERVJTCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRm
b3JtQ0FGaWx0ZXJzLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllckNsaWVudC5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUNvbnRyb2xsZXIuaAorCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Evd2luL0Fic3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QuaAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0Q2xpZW50LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKKworICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Nv
bG9yU3BhY2VDRy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNH
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1h
Z2UuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKKykKIAogaWYgKENN
QUtFX1NJWkVPRl9WT0lEX1AgRVFVQUwgNCkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMgJHtXZWJDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L21ha2VzYWZlc2VoLm9iaikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDI1MyArMCwwIEBACi1p
bmNsdWRlKHBsYXRmb3JtL0N1cmwuY21ha2UpCi1pZiAoTk9UIEFQUExFX0JVSUxEKQotICAgIGlu
Y2x1ZGUocGxhdGZvcm0vSW1hZ2VEZWNvZGVycy5jbWFrZSkKLWVuZGlmICgpCi1pbmNsdWRlKHBs
YXRmb3JtL09wZW5TU0wuY21ha2UpCi1pbmNsdWRlKHBsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21h
a2UpCi0KLWxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCi0g
ICAgIiR7RGlyZWN0WF9JTkNMVURFX0RJUlN9IgotICAgICIke1dFQktJVF9MSUJSQVJJRVNfRElS
fS9pbmNsdWRlIgotICAgICIke1dFQkNPUkVfRElSfS9hY2Nlc3NpYmlsaXR5L3dpbiIKLSAgICAi
JHtXRUJDT1JFX0RJUn0vcGFnZS93aW4iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dy
YXBoaWNzL2VnbCIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
IgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZSIKLSAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvd2luIgotICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9tZWRpYWNhcGFiaWxpdGllcyIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZv
cm0vbmV0d29yay93aW4iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3dpbiIKLSkKLQot
bGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgYWNjZXNzaWJpbGl0eS93aW4vQVhPYmpl
Y3RDYWNoZVdpbi5jcHAKLSAgICBhY2Nlc3NpYmlsaXR5L3dpbi9BY2Nlc3NpYmlsaXR5T2JqZWN0
V2luLmNwcAotICAgIGFjY2Vzc2liaWxpdHkvd2luL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
V2luLmNwcAotCi0gICAgZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcAotCi0gICAgaHRtbC9IVE1M
U2VsZWN0RWxlbWVudFdpbi5jcHAKLQotICAgIHBhZ2Uvd2luL0RyYWdDb250cm9sbGVyV2luLmNw
cAotICAgIHBhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHAKLSAgICBwYWdlL3dpbi9GcmFtZVdp
bi5jcHAKLSAgICBwYWdlL3dpbi9GcmFtZVdpbkRpcmVjdDJELmNwcAotCi0gICAgcGxhdGZvcm0v
Q3Vyc29yLmNwcAotICAgIHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuY3BwCi0gICAgcGxhdGZv
cm0vU3RhdGljUGFzdGVib2FyZC5jcHAKLQotICAgIHBsYXRmb3JtL2F1ZGlvL1BsYXRmb3JtTWVk
aWFTZXNzaW9uTWFuYWdlci5jcHAKLQotICAgIHBsYXRmb3JtL2dlbmVyaWMvS2V5ZWREZWNvZGVy
R2VuZXJpYy5jcHAKLSAgICBwbGF0Zm9ybS9nZW5lcmljL0tleWVkRW5jb2RlckdlbmVyaWMuY3Bw
Ci0KLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAotCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dM
Q29udGV4dEVHTC5jcHAKLQotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBl
VXRpbGl0aWVzLmNwcAotCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJh
Y2tlbmREaXJlY3QyREltcGwuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGly
ZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxl
ckRpcmVjdFdyaXRlLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEu
Y3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9GbG9hdFBvaW50RGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0Zsb2F0UmVjdERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9h
dFNpemVEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2lu
LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250RGVzY3JpcHRpb25XaW4uY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udFdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdl
VHJlZU5vZGVEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnRE
aXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xE
aXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5j
cHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAKLSAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW50UG9pbnRXaW4uY3BwCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFJlY3RXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ludFNpemVXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
TmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERp
cmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3Bw
Ci0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAKLQotICAgIHBsYXRmb3JtL25l
dHdvcmsvd2luL0N1cmxTU0xIYW5kbGVXaW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93aW4v
RG93bmxvYWRCdW5kbGVXaW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93aW4vTmV0d29ya1N0
YXRlTm90aWZpZXJXaW4uY3BwCi0KLSAgICBwbGF0Zm9ybS90ZXh0L0h5cGhlbmF0aW9uLmNwcAot
ICAgIHBsYXRmb3JtL3RleHQvd2luL0xvY2FsZVdpbi5jcHAKLQotICAgIHBsYXRmb3JtL3dpbi9C
U3RyaW5nLmNwcAotICAgIHBsYXRmb3JtL3dpbi9CaXRtYXBJbmZvLmNwcAotICAgIHBsYXRmb3Jt
L3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL0N1cnNvcldp
bi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vRGVmV25kUHJvY1dpbmRvd0NsYXNzLmNwcAotICAgIHBs
YXRmb3JtL3dpbi9EZWxheUxvYWRlZE1vZHVsZXNFbnVtZXJhdG9yLmNwcAotICAgIHBsYXRmb3Jt
L3dpbi9EcmFnRGF0YVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlRGlyZWN0MkQu
Y3BwCi0gICAgcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4v
R0RJT2JqZWN0Q291bnRlci5jcHAKLSAgICBwbGF0Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmNwcAot
ICAgIHBsYXRmb3JtL3dpbi9JbXBvcnRlZEZ1bmN0aW9uc0VudW1lcmF0b3IuY3BwCi0gICAgcGxh
dGZvcm0vd2luL0ltcG9ydGVkTW9kdWxlc0VudW1lcmF0b3IuY3BwCi0gICAgcGxhdGZvcm0vd2lu
L0tleUV2ZW50V2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9Mb2NhbGl6ZWRTdHJpbmdzV2luLmNw
cAotICAgIHBsYXRmb3JtL3dpbi9Mb2dnaW5nV2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9NSU1F
VHlwZVJlZ2lzdHJ5V2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9NYWluVGhyZWFkU2hhcmVkVGlt
ZXJXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1BFSW1hZ2UuY3BwCi0gICAgcGxhdGZvcm0vd2lu
L1Bhc3RlYm9hcmRXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1BsYXRmb3JtTW91c2VFdmVudFdp
bi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vUGxhdGZvcm1TY3JlZW5XaW4uY3BwCi0gICAgcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJhdG9y
V2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAKLSAgICBwbGF0
Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuY3BwCi0gICAgcGxhdGZvcm0vd2luL1NlYXJjaFBv
cHVwTWVudVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vU3RydWN0dXJlZEV4Y2VwdGlvbkhhbmRs
ZXJTdXBwcmVzc29yLmNwcAotICAgIHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcAotICAgIHBs
YXRmb3JtL3dpbi9Vc2VyQWdlbnRXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1dDRGF0YU9iamVj
dC5jcHAKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZUJ1bmRsZVdpbi5jcHAKLSAgICBwbGF0Zm9y
bS93aW4vV2ViQ29yZUluc3RhbmNlSGFuZGxlLmNwcAotICAgIHBsYXRmb3JtL3dpbi9XZWJDb3Jl
VGV4dFJlbmRlcmVyLmNwcAotICAgIHBsYXRmb3JtL3dpbi9XaGVlbEV2ZW50V2luLmNwcAotICAg
IHBsYXRmb3JtL3dpbi9XaWRnZXRXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1dpbmRvd01lc3Nh
Z2VCcm9hZGNhc3Rlci5jcHAKLQotICAgIHJlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKLSkK
LQotaWYgKFVTRV9DRikKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9E
SVJFQ1RPUklFUwotICAgICAgICAiJHtXRUJDT1JFX0RJUn0vbG9hZGVyL2FyY2hpdmUvY2YiCi0g
ICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9jZiIKLSAgICAgICAgIiR7V0VCQ09SRV9E
SVJ9L3BsYXRmb3JtL2NmL3dpbiIKLSAgICApCi0KLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKLSAgICAgICAgZWRpdGluZy9TbWFydFJlcGxhY2VDRi5jcHAKLQotICAgICAgICBsb2Fk
ZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAotCi0gICAgICAgIHBsYXRmb3JtL2Nm
L0tleWVkRGVjb2RlckNGLmNwcAotICAgICAgICBwbGF0Zm9ybS9jZi9LZXllZEVuY29kZXJDRi5j
cHAKLSAgICAgICAgcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCi0KLSAgICAgICAgcGxh
dGZvcm0vY2Yvd2luL0NlcnRpZmljYXRlQ0ZXaW4uY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vdGV4
dC9jZi9IeXBoZW5hdGlvbkNGLmNwcAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVf
UFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwotICAgICAgICBsb2FkZXIvYXJjaGl2ZS9jZi9MZWdh
Y3lXZWJBcmNoaXZlLmgKLQotICAgICAgICBwbGF0Zm9ybS9jZi93aW4vQ2VydGlmaWNhdGVDRldp
bi5oCi0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMgJHtDT1JFRk9V
TkRBVElPTl9MSUJSQVJZfSkKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlVGVzdFN1cHBvcnRfTElC
UkFSSUVTICR7Q09SRUZPVU5EQVRJT05fTElCUkFSWX0pCi1lbHNlICgpCi0gICAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgICAgIHBsYXRmb3JtL3RleHQvSHlwaGVuYXRpb24uY3Bw
Ci0gICAgKQotZW5kaWYgKCkKLQotbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09S
S19IRUFERVJTCi0gICAgYWNjZXNzaWJpbGl0eS93aW4vQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJXaW4uaAotCi0gICAgcGFnZS93aW4vRnJhbWVXaW4uaAotCi0gICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuaAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJl
Y3QyRE9wZXJhdGlvbnMuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxp
dGllcy5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmgK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudC5oCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5oCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vTG9jYWxXaW5kb3dzQ29udGV4dC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlh
UGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1No
YXJlZEdESU9iamVjdC5oCi0KLSAgICBwbGF0Zm9ybS93aW4vQlN0cmluZy5oCi0gICAgcGxhdGZv
cm0vd2luL0JpdG1hcEluZm8uaAotICAgIHBsYXRmb3JtL3dpbi9DT01QdHIuaAotICAgIHBsYXRm
b3JtL3dpbi9EZWZXbmRQcm9jV2luZG93Q2xhc3MuaAotICAgIHBsYXRmb3JtL3dpbi9HRElPYmpl
Y3RDb3VudGVyLmgKLSAgICBwbGF0Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmgKLSAgICBwbGF0Zm9y
bS93aW4vSFduZERDLmgKLSAgICBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmgKLSAgICBwbGF0
Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uaAotICAgIHBsYXRmb3JtL3dpbi9TZWFyY2hQb3B1
cE1lbnVEQi5oCi0gICAgcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudVdpbi5oCi0gICAgcGxh
dGZvcm0vd2luL1N5c3RlbUluZm8uaAotICAgIHBsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuaAot
ICAgIHBsYXRmb3JtL3dpbi9XZWJDb3JlQnVuZGxlV2luLmgKLSAgICBwbGF0Zm9ybS93aW4vV2Vi
Q29yZUluc3RhbmNlSGFuZGxlLmgKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZVRleHRSZW5kZXJl
ci5oCi0gICAgcGxhdGZvcm0vd2luL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5oCi0gICAgcGxh
dGZvcm0vd2luL1dpbmRvd01lc3NhZ2VMaXN0ZW5lci5oCi0gICAgcGxhdGZvcm0vd2luL1dpbmRv
d3NUb3VjaC5oCi0pCi0KLWxpc3QoQVBQRU5EIFdlYkNvcmVfVVNFUl9BR0VOVF9TVFlMRV9TSEVF
VFMKLSAgICAke1dFQkNPUkVfRElSfS9jc3MvdGhlbWVXaW4uY3NzCi0gICAgJHtXRUJDT1JFX0RJ
Un0vY3NzL3RoZW1lV2luUXVpcmtzLmNzcwotKQotCi1saXN0KEFQUEVORCBXZWJDb3JlX0xJQlJB
UklFUwotICAgICR7RGlyZWN0WF9MSUJSQVJJRVN9Ci0gICAgY29tY3RsMzIKLSAgICBjcnlwdDMy
Ci0gICAgaXBobHBhcGkKLSAgICBycGNydDQKLSAgICBzaGx3YXBpCi0gICAgdXNwMTAKLSAgICB2
ZXJzaW9uCi0gICAgd2lubW0KLSAgICB3czJfMzIKLSkKLQotbGlzdChBUFBFTkQgV2ViQ29yZVRl
c3RTdXBwb3J0X0xJQlJBUklFUwotICAgIHNobHdhcGkKLSkKLQotbWFrZV9kaXJlY3RvcnkoJHtD
TUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1dlYktpdC5yZXNvdXJjZXMvZW4ubHByb2op
Ci1maWxlKENPUFkKLSAgICAiJHtXRUJDT1JFX0RJUn0vZW4ubHByb2ovTG9jYWxpemFibGUuc3Ry
aW5ncyIKLSAgICAiJHtXRUJDT1JFX0RJUn0vZW4ubHByb2ovbWVkaWFDb250cm9sc0xvY2FsaXpl
ZFN0cmluZ3MuanMiCi0gICAgREVTVElOQVRJT04KLSAgICAke0NNQUtFX1JVTlRJTUVfT1VUUFVU
X0RJUkVDVE9SWX0vV2ViS2l0LnJlc291cmNlcy9lbi5scHJvagotKQotZmlsZShDT1BZCi0gICAg
IiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvbWVkaWFjb250cm9scy9tZWRpYUNvbnRyb2xzQXBwbGUu
Y3NzIgotICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250
cm9sc0FwcGxlLmpzIgotICAgIERFU1RJTkFUSU9OCi0gICAgJHtDTUFLRV9SVU5USU1FX09VVFBV
VF9ESVJFQ1RPUll9L1dlYktpdC5yZXNvdXJjZXMKLSkKLQotc2V0KFdlYkNvcmVfT1VUUFVUX05B
TUUgV2ViQ29yZSR7REVCVUdfU1VGRklYfSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
V2luLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtl
CShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQko
d29ya2luZyBjb3B5KQpAQCAtMzksMTQgKzM5LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5j
cHAKIAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJl
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcldpbi5jcHAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9GbG9hdFJlY3REaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRmxvYXRTaXplRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
YWNoZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udERlc2NyaXB0aW9uV2lu
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcApA
QCAtNjAsNyArNTUsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW50U2l6ZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1RyYW5zZm9ybWF0aW9uTWF0cml4V2luLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay93
aW4vRG93bmxvYWRCdW5kbGVXaW4uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHJldmlzaW9u
IDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMiBAQAorMjAyMi0wMS0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIERpcmVjdDJECisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5OTkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhbC9QbGF0Zm9ybUZUVy5jbWFr
ZTogUmVtb3ZlZC4KKwogMjAyMi0wMS0wNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjg3Njk4LgpJ
bmRleDogU291cmNlL1dlYkNvcmUvUEFML3BhbC9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAy
ODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL1BsYXRmb3JtRlRXLmNtYWtlCShub25l
eGlzdGVudCkKQEAgLTEsMjYgKzAsMCBAQAotbGlzdChBUFBFTkQgUEFMX1BVQkxJQ19IRUFERVJT
Ci0pCi0KLWxpc3QoQVBQRU5EIFBBTF9TT1VSQ0VTCi0gICAgY3J5cHRvL29wZW5zc2wvQ3J5cHRv
RGlnZXN0T3BlblNTTC5jcHAKLQotICAgIGNyeXB0by93aW4vQ3J5cHRvRGlnZXN0V2luLmNwcAot
Ci0gICAgc3lzdGVtL0Nsb2NrR2VuZXJpYy5jcHAKLQotICAgIHN5c3RlbS93aW4vU291bmRXaW4u
Y3BwCi0KLSAgICB0ZXh0L0tpbGxSaW5nLmNwcAotCi0gICAgd2luL0xvZ2dpbmdXaW4uY3BwCi0p
Ci0KLWxpc3QoQVBQRU5EIFBBTF9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAiJHtX
RUJLSVRfTElCUkFSSUVTX0RJUn0vaW5jbHVkZSIKLSkKLQotbGlzdChBUFBFTkQgUEFMX1BSSVZB
VEVfTElCUkFSSUVTCi0gICAgT3BlblNTTDo6Q3J5cHRvCi0pCi0KLXNldChQQUxfT1VUUFVUX05B
TUUgUEFMJHtERUJVR19TVUZGSVh9KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9u
VXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAJKHJldmlzaW9uIDI4NzgxMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuaCIKIAotI2lmIEVOQUJMRShW
SURFTykgJiYgIVVTRShESVJFQ1QyRCkKKyNpZiBFTkFCTEUoVklERU8pCiAKICNpbmNsdWRlICJB
dWRpb1RyYWNrTGlzdC5oIgogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgpAQCAtOTk1
LDQgKzk5NSw0IEBAIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gQ2FwdGlvblVzZXJQcmUKICAg
ICAKIH0KIAotI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgIVVTRShESVJFQ1QyRCkKKyNlbmRp
ZiAvLyBFTkFCTEUoVklERU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNZWRpYUFGLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9D
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5oCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoVklE
RU8pICYmICFVU0UoRElSRUNUMkQpCisjaWYgRU5BQkxFKFZJREVPKQogCiAjaW5jbHVkZSAiQ1NT
UHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNhcHRpb25QcmVmZXJlbmNlc0RlbGVnYXRlLmgi
CkBAIC0xMjAsNCArMTIwLDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
Ci0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiAhVVNFKERJUkVDVDJEKQorI2VuZGlmIC8vIEVO
QUJMRShWSURFTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luRGlyZWN0
MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luRGly
ZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9G
cmFtZVdpbkRpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkZyYW1lV2luLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNs
dWRlICJCaXRtYXBJbmZvLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVNl
bGVjdGlvbi5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVk
ZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotR0RJT2JqZWN0PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoY29uc3QgRnJh
bWUqIGZyYW1lLCBJbnRSZWN0JiBpcikKLXsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gb2xkUGFpbnRCZWhhdmlvciA9IGZyYW1lLT52aWV3KCkt
PnBhaW50QmVoYXZpb3IoKTsKLSAgICBmcmFtZS0+dmlldygpLT5zZXRQYWludEJlaGF2aW9yKG9s
ZFBhaW50QmVoYXZpb3IgfCBQYWludEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMp
OwotCi0gICAgdm9pZCogYml0cyA9IG51bGxwdHI7Ci0gICAgYXV0byBoZGMgPSBhZG9wdEdESU9i
amVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQygwKSk7Ci0gICAgaW50IHcgPSBpci53aWR0aCgpOwot
ICAgIGludCBoID0gaXIuaGVpZ2h0KCk7Ci0gICAgQml0bWFwSW5mbyBibXAgPSBCaXRtYXBJbmZv
OjpjcmVhdGUoSW50U2l6ZSh3LCBoKSk7Ci0KLSAgICBHRElPYmplY3Q8SEJJVE1BUD4gaGJtcCA9
IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYm1wLCBESUJfUkdCX0NPTE9S
Uywgc3RhdGljX2Nhc3Q8dm9pZCoqPigmYml0cyksIDAsIDApKTsKLSAgICBpZiAoIWhibXApCi0g
ICAgICAgIHJldHVybiBoYm1wOwotCi0gICAgSEdESU9CSiBoYm1wT2xkID0gU2VsZWN0T2JqZWN0
KGhkYy5nZXQoKSwgaGJtcC5nZXQoKSk7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAg
U2VsZWN0T2JqZWN0KGhkYy5nZXQoKSwgaGJtcE9sZCk7Ci0KLSAgICBmcmFtZS0+dmlldygpLT5z
ZXRQYWludEJlaGF2aW9yKG9sZFBhaW50QmVoYXZpb3IpOwotCi0gICAgcmV0dXJuIGhibXA7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjg3ODExKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2MSw3ICs0NjEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8TUlNRVR5cGVSZWdpc3RyeVRo
cmVhZEdsCiAgICAgfQogI2Vsc2UKICAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5z
aXRpdmVIYXNoPiBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nID0gc3RkOjppbml0
aWFsaXplcl9saXN0PFN0cmluZz4gewotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lm
IFVTRShDRykKICAgICAgICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0
aGUgc3VwcG9ydGVkIFVUSSdzIHdoZW4gYSB3YXkgdG8gY29udmVydCBmcm9tIE1JTUVUeXBlIHRv
IFVUSSByZWxpYWJseSBpcyBmb3VuZC4KICAgICAgICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0
IFBORywgSlBFRyBhbmQgR0lGLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYwOTUyODY+LgogICAgICAg
ICAiaW1hZ2UvcG5nIl9zLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlz
aW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGkKICAgICBtX3NlY29uZGFyeUNv
bnRleHQuZHJhd0VsbGlwc2UocmVjdCk7CiB9CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1Qy
RCkKKyNpZiBVU0UoQ0cpCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ry
b2tlUGF0dGVybigpCiB7CiAgICAgbV9wcmltYXJ5Q29udGV4dC5hcHBseVN0cm9rZVBhdHRlcm4o
KTsKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZUVsCiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CiB9
CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpCiB2b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0NBTGF5ZXJD
b250ZXh0KQogewogICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NB
TGF5ZXJDb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Jp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDI4
NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZp
bmFsOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSNp
ZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpCiAgICAgdm9pZCBhcHBseVN0
cm9rZVBhdHRlcm4oKSBmaW5hbDsKICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsK
ICNlbmRpZgpAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWxsRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwogICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElS
RUNUMkQpCisjaWYgVVNFKENHKQogICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBm
aW5hbDsKICAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAko
cmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMzMgKzEyOCwyOCBAQCB2b2lkIEJp
dG1hcEltYWdlOjpzZXRDdXJyZW50RnJhbWVEZWNvZGluCiAgICAgbV9jdXJyZW50RnJhbWVEZWNv
ZGluZ1N0YXR1cyA9IGRlY29kaW5nU3RhdHVzOwogfQogCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IEJp
dG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90IGluZGV4LCBT
dWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCog
dGFyZ2V0Q29udGV4dCkKK1JlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2U6OmZyYW1lSW1h
Z2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vi
c2FtcGxpbmdMZXZlbCkKIHsKICAgICBpZiAoIWZyYW1lSGFzRnVsbFNpemVOYXRpdmVJbWFnZUF0
SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJC
aXRtYXBJbWFnZTo6JXMgLSAlcCAtIHVybDogJXMgW3N1YnNhbXBsaW5nTGV2ZWwgd2FzICVkLCBy
ZXNhbXBsaW5nXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8aW50PihmcmFtZVN1YnNhbXBsaW5nTGV2ZWxBdEluZGV4
KGluZGV4KSkpOwogICAgICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgfQotI2lm
IFVTRShESVJFQ1QyRCkKLSAgICBtX3NvdXJjZS0+c2V0VGFyZ2V0Q29udGV4dCh0YXJnZXRDb250
ZXh0KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRhcmdldENvbnRleHQpOwotI2VuZGlmCiAg
ICAgcmV0dXJuIG1fc291cmNlLT5mcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoaW5kZXgs
IHN1YnNhbXBsaW5nTGV2ZWwpOwogfQogCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdl
OjpuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCitSZWZQ
dHI8TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSgpCiB7Ci0gICAgcmV0dXJu
IGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZCgwLCBTdWJzYW1wbGluZ0xldmVsOjpEZWZh
dWx0LCB0YXJnZXRDb250ZXh0KTsKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlm
TmVlZGVkKDAsIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQpOwogfQogCi1SZWZQdHI8TmF0aXZl
SW1hZ2U+IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBHcmFw
aGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCitSZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcElt
YWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCiB7Ci0gICAgcmV0dXJuIGZyYW1lSW1h
Z2VBdEluZGV4Q2FjaGVJZk5lZWRlZChtX2N1cnJlbnRGcmFtZSwgU3Vic2FtcGxpbmdMZXZlbDo6
RGVmYXVsdCwgdGFyZ2V0Q29udGV4dCk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4Q2Fj
aGVJZk5lZWRlZChtX2N1cnJlbnRGcmFtZSwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7CiB9
CiAKLVJlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2U6OnByZVRyYW5zZm9ybWVkTmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCByZXNwZWN0T3JpZW50YXRpb24sIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkKK1JlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1h
Z2U6OnByZVRyYW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCByZXNwZWN0
T3JpZW50YXRpb24pCiB7Ci0gICAgYXV0byBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKHRhcmdldENvbnRleHQpOworICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBpbWFnZTsKIApAQCAt
MTc4LDE4ICsxNzMsMTggQEAgUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6cHJlVHJh
bgogfQogCiAjaWYgVVNFKENHKQotUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6bmF0
aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0
KiB0YXJnZXRDb250ZXh0KQorUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6bmF0aXZl
SW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBzaXplX3QgY291bnQgPSBm
cmFtZUNvdW50KCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
LSAgICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChpLCBT
dWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0LCB0YXJnZXRDb250ZXh0KTsKKyAgICAgICAgYXV0byBp
bWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChpLCBTdWJzYW1wbGluZ0xldmVs
OjpEZWZhdWx0KTsKICAgICAgICAgaWYgKGltYWdlICYmIGltYWdlLT5zaXplKCkgPT0gc2l6ZSkK
ICAgICAgICAgICAgIHJldHVybiBpbWFnZTsKICAgICB9CiAKICAgICAvLyBGYWxsYmFjayB0byB0
aGUgZmlyc3QgZnJhbWUgaW1hZ2UgaWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQotICAg
IHJldHVybiBmcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoMCwgU3Vic2FtcGxpbmdMZXZl
bDo6RGVmYXVsdCwgdGFyZ2V0Q29udGV4dCk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4
Q2FjaGVJZk5lZWRlZCgwLCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKIH0KIAogVmVjdG9y
PFJlZjxOYXRpdmVJbWFnZT4+IEJpdG1hcEltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKQpAQCAt
MzAzLDcgKzI5OCw3IEBAIEltYWdlRHJhd1Jlc3VsdCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGkK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJl
cXVlc3REZWNvZGluZzsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGltYWdlID0gZnJh
bWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKG1fY3VycmVudEZyYW1lLCBtX2N1cnJlbnRTdWJz
YW1wbGluZ0xldmVsLCAmY29udGV4dCk7CisgICAgICAgICAgICBpbWFnZSA9IGZyYW1lSW1hZ2VB
dEluZGV4Q2FjaGVJZk5lZWRlZChtX2N1cnJlbnRGcmFtZSwgbV9jdXJyZW50U3Vic2FtcGxpbmdM
ZXZlbCk7CiAgICAgICAgICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAgLSB1
cmw6ICVzIFthbiBpbWFnZSBmcmFtZSB3aWxsIGJlIGRlY29kZWQgc3luY2hyb25vdXNseV0iLCBf
X0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwog
ICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5oCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIs
MTEgKzE0MiwxMSBAQCBwdWJsaWM6CiAjZW5kaWYKICNlbmRpZgogCi0gICAgV0VCQ09SRV9FWFBP
UlQgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQq
ID0gbnVsbHB0cikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgb3ZlcnJp
ZGU7Ci0gICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBwcmVUcmFuc2Zvcm1lZE5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKGJvb2wgcmVzcGVjdE9yaWVudGF0aW9uLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQqID0gbnVsbHB0cikgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5hdGl2
ZUltYWdlPiBuYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4g
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8TmF0aXZl
SW1hZ2U+IHByZVRyYW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCByZXNw
ZWN0T3JpZW50YXRpb24pIG92ZXJyaWRlOwogI2lmIFVTRShDRykKLSAgICBSZWZQdHI8TmF0aXZl
SW1hZ2U+IG5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUmLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQqID0gbnVsbHB0cikgb3ZlcnJpZGU7CisgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRp
dmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPFJlZjxO
YXRpdmVJbWFnZT4+IGZyYW1lc05hdGl2ZUltYWdlcygpOwogI2VuZGlmCiAKQEAgLTE1OCw3ICsx
NTgsNyBAQCBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIEJpdG1hcEltYWdlKEltYWdlT2Jz
ZXJ2ZXIqID0gbnVsbHB0cik7CiAKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGZyYW1lSW1hZ2VB
dEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSW1hZ2VBdEluZGV4
KGluZGV4KTsgfQotICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gZnJhbWVJbWFnZUF0SW5kZXhDYWNo
ZUlmTmVlZGVkKHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRl
ZmF1bHQsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKTsKKyAgICBSZWZQdHI8TmF0
aXZlSW1hZ2U+IGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QsIFN1YnNhbXBs
aW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKIAogICAgIC8vIENhbGxlZCB0
byBpbnZhbGlkYXRlIGNhY2hlZCBkYXRhLiBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3
aXBlIG91dAogICAgIC8vIHRoZSBlbnRpcmUgZnJhbWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRo
ZSBpbWFnZSBzb3VyY2UgdG8gZGVzdHJveQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuaAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMSArNDksNiBAQAogI2lu
Y2x1ZGUgPHVzcDEwLmg+CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLWludGVyZmFjZSBJ
RFdyaXRlRmFjdG9yeTU7Ci1pbnRlcmZhY2UgSURXcml0ZUdkaUludGVyb3A7Ci0jZW5kaWYKLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb250Q2FjaGU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCShyZXZp
c2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxh
dGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDEwICs2Nyw2IEBAIGludGVyZmFjZSBJ
RFdyaXRlRm9udDsKIGludGVyZmFjZSBJRFdyaXRlRm9udEZhY2U7CiAjZW5kaWYKIAotI2lmIFVT
RShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgRm9udERlc2NyaXB0aW9uOwpAQCAtMTE5LDkgKzExNSw2IEBAIHB1
YmxpYzoKICNpZiBVU0UoQ09SRV9URVhUKQogICAgIEZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0
PEhGT05UPiwgQ1RGb250UmVmLCBDR0ZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGlj
Qm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBib29sIHVzZUdESSk7CiAjZW5kaWYKLSNpZiBV
U0UoRElSRUNUMkQpCi0gICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+JiYsIENP
TVB0cjxJRFdyaXRlRm9udD4mJiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29s
IHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJKTsKLSNlbmRpZgogI2lmIFVTRShDQUlSTykK
ICAgICBGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4sIGNhaXJvX2ZvbnRfZmFjZV90
KiwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgY29uc3QgQ3JlYXRpb25EYXRh
KiA9IG51bGxwdHIpOwogI2VuZGlmCkBAIC0xNjMsMTEgKzE1Niw2IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaGFzVmFyaWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFyaWF0aW9uczsgfQog
Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIElEV3JpdGVGb250KiBkd0ZvbnQoKSBjb25zdCB7IHJl
dHVybiBtX2R3Rm9udC5nZXQoKTsgfQotICAgIElEV3JpdGVGb250RmFjZSogZHdGb250RmFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZHdGb250RmFjZS5nZXQoKTsgfQotI2VuZGlmCi0KICAgICBib29s
IGlzRml4ZWRQaXRjaCgpIGNvbnN0OwogICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NpemU7IH0KICAgICBib29sIHN5bnRoZXRpY0JvbGQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRo
ZXRpY0JvbGQ7IH0KQEAgLTI2OCwxMSArMjU2LDYgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIFJl
dGFpblB0cjxDVEZvbnRSZWY+IG1fY3RGb250OwogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQp
Ci0gICAgQ09NUHRyPElEV3JpdGVGb250PiBtX2R3Rm9udDsKLSAgICBDT01QdHI8SURXcml0ZUZv
bnRGYWNlPiBtX2R3Rm9udEZhY2U7Ci0jZW5kaWYKLQogI2lmIFVTRShDQUlSTykKICAgICBSZWZQ
dHI8Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4gbV9zY2FsZWRGb250OwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHJldmlzaW9uIDI4Nzgx
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDE5ICszOSwxMCBAQAogI2luY2x1ZGUgIkdyYWRpZW50UmVuZGVyZXJD
Ry5oIgogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0j
ZW5kaWYKLQogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHQ29udGV4dCogQ0dDb250ZXh0
UmVmOwogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQyRDFCcnVzaDsK
LWludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLSNlbmRpZgotCiAjaWYgVVNFKENBSVJPKQog
dHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90OwogI2VuZGlmCkBA
IC0xMTgsMTAgKzEwOSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50KENHQ29udGV4dFJlZik7
CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBJRDJEMUJydXNoKiBjcmVhdGVCcnVz
aChJRDJEMVJlbmRlclRhcmdldCopOwotI2VuZGlmCi0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEdyYWRpZW50Pj4gZGVjb2RlKERl
Y29kZXImKTsKIApAQCAtMTM5LDEwICsxMjYsNiBAQCBwcml2YXRlOgogI2lmIFVTRShDRykKICAg
ICBzdGQ6Om9wdGlvbmFsPEdyYWRpZW50UmVuZGVyZXJDRz4gbV9wbGF0Zm9ybVJlbmRlcmVyOwog
I2VuZGlmCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEMkQxQnJ1c2g+IG1fYnJ1
c2g7Ci0jZW5kaWYKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgR3JhZGll
bnQ6OkxpbmVhckRhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJ
KHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNSArNDMsNiBAQAogCiAjaWYg
VVNFKENHKQogdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
OwotI2VsaWYgVVNFKERJUkVDVDJEKQotaW50ZXJmYWNlIElEMkQxRENSZW5kZXJUYXJnZXQ7Ci1p
bnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFGYWN0b3J5OwotaW50
ZXJmYWNlIElEMkQxU29saWRDb2xvckJydXNoOwotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3Mg
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ7Ci19Ci10eXBlZGVmIFdlYkNvcmU6OlBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwogI2VsaWYgVVNFKENBSVJPKQog
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87CkBAIC0yNjks
MTUgKzI2MCw2IEBAIHB1YmxpYzogICAKICAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRl
eHQoKSA9IGRlZmF1bHQ7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+R3JhcGhpY3NDb250
ZXh0KCk7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG1v
dmUgdG8gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQKLSAgICBlbnVtIGNsYXNzIEJpdG1hcFJlbmRl
cmluZ0NvbnRleHRUeXBlIDogdWludDhfdCB7Ci0gICAgICAgIENQVU1lbW9yeSwKLSAgICAgICAg
R1BVTWVtb3J5Ci0gICAgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQqLCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSk7Ci0jZW5k
aWYKLQogICAgIHZpcnR1YWwgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KIApAQCAtMzcyLDcgKzM1NCw3IEBA
IHB1YmxpYzogICAKICAgICAKICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVy
biBtX3N0YWNrLnNpemUoKTsgfQogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYg
VVNFKENHKQogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1YmxpYyBHcmFw
aGljc0NvbnRleHQgbWV0aG9kcz8KICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJu
KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAwOwpAQCAtNTU3
LDI2ICs1MzksNiBAQCBwdWJsaWM6ICAgCiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG51
bGxwdHI7IH0KICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIEdyYXBoaWNzQ29udGV4
dChIREMsIElEMkQxRENSZW5kZXJUYXJnZXQqKiwgUkVDVCwgYm9vbCBoYXNBbHBoYSA9IGZhbHNl
KTsgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQuCi0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
SUQyRDFGYWN0b3J5KiBzeXN0ZW1GYWN0b3J5KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IElEMkQxUmVuZGVyVGFyZ2V0KiBkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGJlZ2luRHJhdygpOwotICAgIEQyRDFfQ09MT1JfRiBjb2xvcldpdGhHbG9i
YWxBbHBoYShjb25zdCBDb2xvciYpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5k
RHJhdygpOwotICAgIHZvaWQgZmx1c2goKTsKLQotICAgIElEMkQxQnJ1c2gqIHNvbGlkU3Ryb2tl
QnJ1c2goKSBjb25zdDsKLSAgICBJRDJEMUJydXNoKiBzb2xpZEZpbGxCcnVzaCgpIGNvbnN0Owot
ICAgIElEMkQxQnJ1c2gqIHBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0OwotICAgIElEMkQxQnJ1
c2gqIHBhdHRlcm5GaWxsQnJ1c2goKSBjb25zdDsKLSAgICBJRDJEMVN0cm9rZVN0eWxlKiBwbGF0
Zm9ybVN0cm9rZVN0eWxlKCkgY29uc3Q7Ci0KLSAgICBJRDJEMVNvbGlkQ29sb3JCcnVzaCogYnJ1
c2hXaXRoQ29sb3IoY29uc3QgQ29sb3ImKTsKLSNlbmRpZgotCiBwcml2YXRlOgogICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCShyZXZp
c2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsMTAgKzE1NiwxMCBAQCBwdWJsaWM6CiAKICAgICBlbnVt
IFRpbGVSdWxlIHsgU3RyZXRjaFRpbGUsIFJvdW5kVGlsZSwgU3BhY2VUaWxlLCBSZXBlYXRUaWxl
IH07CiAKLSAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2UoY29uc3Qg
R3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0
dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0
dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gcHJlVHJhbnNmb3JtZWROYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZShib29sID0gdHJ1ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIHsg
cmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZl
SW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxs
cHRyKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+
IG5hdGl2ZUltYWdlKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgUmVmUHRyPE5h
dGl2ZUltYWdlPiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIG51bGxwdHI7
IH0KKyAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gcHJlVHJhbnNmb3JtZWROYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZShib29sID0gdHJ1ZSkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAg
IHZpcnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRT
aXplJikgeyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgLy8gQWNjZXNzb3JzIGZvciBuYXRpdmUg
aW1hZ2UgZm9ybWF0cy4KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw4ICszMCw2IEBACiAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyQ0cu
aCIKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5o
IgogI2Vsc2UKICNpbmNsdWRlICJTY2FsYWJsZUltYWdlRGVjb2Rlci5oIgogI2VuZGlmCkBAIC0x
MDcsOCArMTA1LDYgQEAgUmVmUHRyPEltYWdlRGVjb2Rlcj4gSW1hZ2VEZWNvZGVyOjpjcmVhdAog
CiAjaWYgVVNFKENHKQogICAgIHJldHVybiBJbWFnZURlY29kZXJDRzo6Y3JlYXRlKGRhdGEsIGFs
cGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7Ci0jZWxpZiBVU0UoRElSRUNU
MkQpCi0gICAgcmV0dXJuIEltYWdlRGVjb2RlckRpcmVjdDJEOjpjcmVhdGUoZGF0YSwgYWxwaGFP
cHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKICNlbHNlCiAgICAgcmV0dXJuIFNj
YWxhYmxlSW1hZ2VEZWNvZGVyOjpjcmVhdGUoZGF0YSwgYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uKTsKICNlbmRpZgpAQCAtMTE5LDkgKzExNSw2IEBAIGJvb2wgSW1hZ2VE
ZWNvZGVyOjpzdXBwb3J0c01lZGlhVHlwZShNZWQKICNpZiBVU0UoQ0cpCiAgICAgaWYgKEltYWdl
RGVjb2RlckNHOjpzdXBwb3J0c01lZGlhVHlwZSh0eXBlKSkKICAgICAgICAgcmV0dXJuIHRydWU7
Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgaWYgKEltYWdlRGVjb2RlckRpcmVjdDJEOjpzdXBw
b3J0c01lZGlhVHlwZSh0eXBlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQogICAgIGlm
IChTY2FsYWJsZUltYWdlRGVjb2Rlcjo6c3VwcG9ydHNNZWRpYVR5cGUodHlwZSkpCiAgICAgICAg
IHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsMTAg
KzEzMyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3Qp
ID0gMDsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VGFyZ2V0Q29u
dGV4dChJRDJEMVJlbmRlclRhcmdldCopID0gMDsKLSNlbmRpZgotCiBwcm90ZWN0ZWQ6CiAgICAg
SW1hZ2VEZWNvZGVyKCkgPSBkZWZhdWx0OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHJldmlzaW9uIDI4NzgxMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDYgQEAKICNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5o
PgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSW1hZ2VTb3VyY2U6OkltYWdlU291cmNl
KEJpdG1hcEltYWdlKiBpbWFnZSwgQWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEdhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQpAQCAtNjkzLDE0ICs2
ODgsNiBAQCBJbWFnZU9yaWVudGF0aW9uIEltYWdlU291cmNlOjpmcmFtZU9yaWVuCiAgICAgcmV0
dXJuIGZyYW1lQXRJbmRleENhY2hlSWZOZWVkZWQoaW5kZXgsIEltYWdlRnJhbWU6OkNhY2hpbmc6
Ok1ldGFkYXRhKS5vcmllbnRhdGlvbigpOwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotdm9pZCBJ
bWFnZVNvdXJjZTo6c2V0VGFyZ2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdl
dENvbnRleHQpCi17Ci0gICAgaWYgKGlzRGVjb2RlckF2YWlsYWJsZSgpICYmIHRhcmdldENvbnRl
eHQpCi0gICAgICAgIG1fZGVjb2Rlci0+c2V0VGFyZ2V0Q29udGV4dCh0YXJnZXRDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkpOwotfQotI2VuZGlmCi0KIFJlZlB0cjxO
YXRpdmVJbWFnZT4gSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBp
bmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKQogewogICAgIGlmICghaXNE
ZWNvZGVyQXZhaWxhYmxlKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmgJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw5
ICsxMjIsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgU2Vjb25kcyBmcmFtZUR1cmF0
aW9uQXRJbmRleChzaXplX3QpOwogICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRhdGlv
bkF0SW5kZXgoc2l6ZV90KTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIHNldFRhcmdl
dENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0Kik7Ci0jZW5kaWYKICAgICBSZWZQdHI8TmF0
aXZlSW1hZ2U+IGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZl
bCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQpOwogICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4g
ZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGZyYW1l
SW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJz
YW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDI4Nzgx
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBw
cml2YXRlOgotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykKICAgICB2
b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWwgeyB9CiAgICAgYm9vbCBpc0NBTGF5
ZXJDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpAQCAtNTcs
NyArNTcsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
KSBmaW5hbCB7IH0KIAotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykK
ICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQogI2VuZGlm
CiAKQEAgLTY3LDcgKzY3LDcgQEAgcHJpdmF0ZToKIAogICAgIEludFJlY3QgY2xpcEJvdW5kcygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNU
MkQpCisjaWYgVVNFKENHKQogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWwgeyB9
CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWwgeyB9CiAgICAgdm9pZCBkcmF3UGF0
aChjb25zdCBQYXRoJikgZmluYWwgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXRoLmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgIVVTRShESVJFQ1QyRCkKIGZsb2F0IFBhdGg6
Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRl
KFBhdGhUcmF2ZXJzYWxTdGF0ZTo6QWN0aW9uOjpUb3RhbExlbmd0aCk7CkBAIC01MSw3ICs1MCw2
IEBAIGZsb2F0IFBhdGg6Omxlbmd0aCgpIGNvbnN0CiAKICAgICByZXR1cm4gdHJhdmVyc2FsU3Rh
dGUudG90YWxMZW5ndGgoKTsKIH0KLSNlbmRpZgogCiAjaWYgIUhBVkUoQ0dQQVRIX0dFVF9OVU1C
RVJfT0ZfRUxFTUVOVFMpCiAKQEAgLTEyNSw3ICsxMjMsNyBAQCB2b2lkIFBhdGg6OmFkZFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91CiAgICAgfQogCiAgICAgaWYgKHN0cmF0ZWd5ID09IFJvdW5k
ZWRSZWN0U3RyYXRlZ3k6OlByZWZlck5hdGl2ZSkgewotI2lmIFVTRShDRykgfHwgVVNFKERJUkVD
VDJEKQorI2lmIFVTRShDRykKICAgICAgICAgcGxhdGZvcm1BZGRQYXRoRm9yUm91bmRlZFJlY3Qo
cmVjdCwgcmFkaWkudG9wTGVmdCgpLCByYWRpaS50b3BSaWdodCgpLCByYWRpaS5ib3R0b21MZWZ0
KCksIHJhZGlpLmJvdHRvbVJpZ2h0KCkpOwogICAgICAgICByZXR1cm47CiAjZW5kaWYKQEAgLTUy
NCw3ICs1MjIsNyBAQCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gUGF0aDo6Ym91bmRpbmdSCiAK
ICNlbmRpZgogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkKKyNpZiAhVVNFKENHKQog
UGF0aCBQYXRoOjpwb2x5Z29uUGF0aEZyb21Qb2ludHMoY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQ+
JiBwb2ludHMpCiB7CiAgICAgUGF0aCBwYXRoOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BhdGguaAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyMCArNDEsNiBAQAog
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR1BhdGguaD4KIHR5cGVkZWYgc3RydWN0IENHUGF0aCBQ
bGF0Zm9ybVBhdGg7CiAKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJDT01QdHIuaCIK
LQotaW50ZXJmYWNlIElEMkQxR2VvbWV0cnk7Ci1pbnRlcmZhY2UgSUQyRDFHZW9tZXRyeUdyb3Vw
OwotaW50ZXJmYWNlIElEMkQxUGF0aEdlb21ldHJ5OwotaW50ZXJmYWNlIElEMkQxR2VvbWV0cnlT
aW5rOwotCi10eXBlZGVmIElEMkQxR2VvbWV0cnlHcm91cCBQbGF0Zm9ybVBhdGg7Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOwotfQotCiAjZWxp
ZiBVU0UoQ0FJUk8pCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKIApAQCAtNjksOCArNTUsNiBA
QCB0eXBlZGVmIFBsYXRmb3JtUGF0aCogUGxhdGZvcm1QYXRoUHRyOwogCiAjaWYgVVNFKENHKQog
dXNpbmcgUGxhdGZvcm1QYXRoU3RvcmFnZVR5cGUgPSBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJl
Zj47Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi11c2luZyBQbGF0Zm9ybVBhdGhTdG9yYWdlVHlwZSA9
IENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+OwogI2Vsc2UKIHVzaW5nIFBsYXRmb3JtUGF0aFN0
b3JhZ2VUeXBlID0gUGxhdGZvcm1QYXRoUHRyOwogI2VuZGlmCkBAIC0xODksMTAgKzE3Myw3IEBA
IHB1YmxpYzoKIAogICAgIC8vIFRvIGtlZXAgUGF0aCgpIGNoZWFwLCBpdCBkb2VzIG5vdCBhbGxv
Y2F0ZSBhIFBsYXRmb3JtUGF0aCBpbW1lZGlhdGVseQogICAgIC8vIG1lYW5pbmcgUGF0aDo6cGxh
dGZvcm1QYXRoKCkgY2FuIHJldHVybiBudWxsLgotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBGbG9h
dFJlY3QgZmFzdEJvdW5kaW5nUmVjdEZvclN0cm9rZShjb25zdCBQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYpIGNvbnN0OwotICAgIFBsYXRmb3JtUGF0aFB0ciBwbGF0Zm9ybVBhdGgoKSBjb25zdCB7
IHJldHVybiBtX3BhdGguZ2V0KCk7IH0KLSNlbGlmIFVTRShDRykKKyNpZiBVU0UoQ0cpCiAgICAg
V0VCQ09SRV9FWFBPUlQgUGxhdGZvcm1QYXRoUHRyIHBsYXRmb3JtUGF0aCgpIGNvbnN0OwogI2Vs
aWYgVVNFKENBSVJPKQogICAgIGNhaXJvX3QqIGNhaXJvUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
cGF0aC5nZXQoKTsgfQpAQCAtMjE3LDE5ICsxOTgsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBh
ZGRCZXppZXJzRm9yUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXpl
JiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBG
bG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRS
YWRpdXMpOwogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNFKENHKQogICAg
IHZvaWQgcGxhdGZvcm1BZGRQYXRoRm9yUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFk
aXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYg
Ym90dG9tUmlnaHRSYWRpdXMpOwogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgdm9p
ZCBhcHBlbmRHZW9tZXRyeShJRDJEMUdlb21ldHJ5Kik7Ci0gICAgdm9pZCBjcmVhdGVHZW9tZXRy
eVdpdGhGaWxsTW9kZShXaW5kUnVsZSwgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4mKSBjb25z
dDsKLQotICAgIHZvaWQgb3BlbkZpZ3VyZUF0Q3VycmVudFBvaW50SWZOZWNlc3NhcnkoKTsKLSAg
ICB2b2lkIGNsb3NlQW55T3Blbkdlb21ldHJpZXModW5zaWduZWQgZmlndXJlRW5kU3R5bGUpIGNv
bnN0OwotICAgIHZvaWQgY2xlYXJHZW9tZXRyaWVzKCk7Ci0jZW5kaWYKLQogI2lmbmRlZiBOREVC
VUcKICAgICB2b2lkIGR1bXAoKSBjb25zdDsKICNlbmRpZgpAQCAtMjgwLDEyICsyNTIsNiBAQCBw
cml2YXRlOgogICAgIG11dGFibGUgUGxhdGZvcm1QYXRoU3RvcmFnZVR5cGUgbV9wYXRoOwogI2Vu
ZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgVmVjdG9yPElEMkQxR2VvbWV0cnkqPiBtX2dl
b21ldHJpZXM7Ci0gICAgbXV0YWJsZSBDT01QdHI8SUQyRDFHZW9tZXRyeVNpbms+IG1fYWN0aXZl
UGF0aDsKLSAgICBtdXRhYmxlIGJvb2wgbV9maWd1cmVJc09wZW5lZCB7IGZhbHNlIH07Ci0jZW5k
aWYKLQogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIElubGluZVBhdGhEYXRhIG1f
aW5saW5lRGF0YTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BhdHRlcm4uaAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMyArMzYsNiBAQAog
I2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHUGF0dGVybiogQ0dQYXR0ZXJuUmVmOwogdHlw
ZWRlZiBSZXRhaW5QdHI8Q0dQYXR0ZXJuUmVmPiBQbGF0Zm9ybVBhdHRlcm5QdHI7Ci0jZWxpZiBV
U0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQyRDFCaXRtYXBCcnVzaDsKLXR5cGVkZWYgSUQyRDFC
aXRtYXBCcnVzaCogUGxhdGZvcm1QYXR0ZXJuUHRyOwotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xh
c3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ7Ci19Ci10eXBlZGVmIFdlYkNvcmU6OlBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwogI2VsaWYgVVNFKENBSVJP
KQogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90OwogdHlwZWRl
ZiBjYWlyb19wYXR0ZXJuX3QqIFBsYXRmb3JtUGF0dGVyblB0cjsKQEAgLTc3LDExICs3MCw4IEBA
IHB1YmxpYzoKICAgICBjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1
cm4gbV9wYXJhbWV0ZXJzOyB9CiAKICAgICAvLyBQYXR0ZXJuIHNwYWNlIGlzIGFuIGFic3RyYWN0
IHNwYWNlIHRoYXQgbWFwcyB0byB0aGUgZGVmYXVsdCB1c2VyIHNwYWNlIGJ5IHRoZSB0cmFuc2Zv
cm1hdGlvbiAndXNlclNwYWNlVHJhbnNmb3JtJwotI2lmICFVU0UoRElSRUNUMkQpCiAgICAgUGxh
dGZvcm1QYXR0ZXJuUHRyIGNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHVzZXJTcGFjZVRyYW5zZm9ybSkgY29uc3Q7Ci0jZWxzZQotICAgIFBsYXRmb3JtUGF0dGVy
blB0ciBjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgR3JhcGhpY3NDb250ZXh0JiwgZmxvYXQg
YWxwaGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtKSBjb25zdDsK
LSNlbmRpZgorCiAgICAgdm9pZCBzZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJik7CiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuU3BhY2VUcmFu
c2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMucGF0dGVyblNwYWNlVHJhbnNmb3Jt
OyB9OwogICAgIGJvb2wgcmVwZWF0WCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy5yZXBl
YXRYOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUlt
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1JbWFnZS5oCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgVVNFKENHKQogdXNpbmcgUGxhdGZvcm1JbWFn
ZVB0ciA9IFJldGFpblB0cjxDR0ltYWdlUmVmPjsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLXVzaW5n
IFBsYXRmb3JtSW1hZ2VQdHIgPSBDT01QdHI8SUQyRDFCaXRtYXA+OwogI2VsaWYgVVNFKENBSVJP
KQogdXNpbmcgUGxhdGZvcm1JbWFnZVB0ciA9IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+OwogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdl
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGxhdGZvcm1JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDggKzMwLDYgQEAKIAogI2lmIFVTRShDRykKICNpbmNsdWRlICJJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZC5oIgotI2VsaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIkltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kLmgiCiAjZWxpZiBVU0UoQ0FJUk8pCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaCIKICNlbmRpZgpAQCAtNDQsOCArNDIsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoQ0cpCiB1c2luZyBVbmFjY2VsZXJhdGVk
SW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ7Ci0jZWxpZiBV
U0UoRElSRUNUMkQpCi11c2luZyBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ7CiAjZWxpZiBVU0UoQ0FJUk8pCiB1c2luZyBVbmFjY2Vs
ZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQ7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaAkocmV2aXNpb24g
Mjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFn
ZUJ1ZmZlckJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsNiBAQAogCiAjaWYg
VVNFKENHKQogI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCi0jZWxpZiBVU0UoRElS
RUNUMkQpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKICNlbGlmIFVT
RShDQUlSTykKICNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgogI2VuZGlmCkBA
IC0zNyw4ICszNSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShDRykKIHVzaW5n
IFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ7Ci0jZWxp
ZiBVU0UoRElSRUNUMkQpCi11c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kOwogI2VsaWYgVVNFKENBSVJPKQogdXNpbmcgUGxhdGZvcm1J
bWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDsKICNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL0NETVNl
c3Npb25BVkZvdW5kYXRpb25DRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL0NETVNlc3Npb25BVkZvdW5kYXRpb25DRi5j
cHAJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9jZi9DRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0YuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MywxNCArNTMsNiBAQCBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0Y6OkNETVNlc3Np
b25BVkZvCiAKIFJlZlB0cjxVaW50OEFycmF5PiBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0Y6Omdl
bmVyYXRlS2V5UmVxdWVzdChjb25zdCBTdHJpbmcmLCBVaW50OEFycmF5KiBpbml0RGF0YSwgU3Ry
aW5nJiBkZXN0aW5hdGlvblVSTCwgdW5zaWduZWQgc2hvcnQmIGVycm9yQ29kZSwgdWludDMyX3Qm
IHN5c3RlbUNvZGUpCiB7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIFVOVVNFRF9QQVJBTShpbml0
RGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uVVJMKTsKLSAgICBVTlVTRURfUEFS
QU0oZXJyb3JDb2RlKTsKLSAgICBVTlVTRURfUEFSQU0oc3lzdGVtQ29kZSk7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSNlbHNlCiAgICAgU3RyaW5nIGtleVVS
STsKICAgICBTdHJpbmcga2V5SUQ7CiAgICAgUmVmUHRyPFVpbnQ4QXJyYXk+IGNlcnRpZmljYXRl
OwpAQCAtMTAyLDcgKzk0LDYgQEAgUmVmUHRyPFVpbnQ4QXJyYXk+IENETVNlc3Npb25BVkZvdW5k
YXRpbwogCiAgICAgYXV0byBrZXlSZXF1ZXN0QnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShD
RkRhdGFHZXRCeXRlUHRyKGtleVJlcXVlc3QuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoa2V5UmVx
dWVzdC5nZXQoKSkpOwogICAgIHJldHVybiBVaW50OEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShr
ZXlSZXF1ZXN0QnVmZmVyKSwgMCwga2V5UmVxdWVzdEJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLSNl
bmRpZgogfQogCiB2b2lkIENETVNlc3Npb25BVkZvdW5kYXRpb25DRjo6cmVsZWFzZUtleXMoKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uQ0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTQsMTEgKzg5NCw3IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnAKICAgICAgICAgY29udGV4dC5zY2Fs
ZShGbG9hdFNpemUoMS4wZiwgLTEuMGYpKTsKICAgICAgICAgY29udGV4dC5zZXRJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5OjpMb3cpOwogICAgICAgICBGbG9h
dFJlY3QgcGFpbnRSZWN0KEZsb2F0UG9pbnQoKSwgcmVjdC5zaXplKCkpOwotI2lmIFVTRShESVJF
Q1QyRCkKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbHNlCiAgICAgICAgIENHQ29udGV4
dERyYXdJbWFnZShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBDR1JlY3RNYWtlKDAsIDAsIHBh
aW50UmVjdC53aWR0aCgpLCBwYWludFJlY3QuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7Ci0jZW5k
aWYKICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CiAgICAgICAgIGltYWdlID0gMDsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudElt
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QREZEb2N1bWVudEltYWdlLmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2MiwxNiArMzYyLDEyIEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhd1BERlBh
Z2UoR3JhcGgKIAogICAgIGNvbnRleHQudHJhbnNsYXRlKC1tX2Nyb3BCb3gubG9jYXRpb24oKSk7
CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbHNlCiAgICAg
Ly8gQ0dQREYgcGFnZXMgYXJlIGluZGV4ZWQgZnJvbSAxLgogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIENHQ29udGV4dERyYXdQREZQYWdlV2l0aEFubm90YXRpb25zKGNvbnRleHQucGxhdGZvcm1D
b250ZXh0KCksIENHUERGRG9jdW1lbnRHZXRQYWdlKG1fZG9jdW1lbnQuZ2V0KCksIDEpLCBudWxs
cHRyKTsKICNlbHNlCiAgICAgQ0dDb250ZXh0RHJhd1BERlBhZ2UoY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKSwgQ0dQREZEb2N1bWVudEdldFBhZ2UobV9kb2N1bWVudC5nZXQoKSwgMSkpOwogI2Vu
ZGlmCi0jZW5kaWYKIH0KIAogI2VuZGlmIC8vICFVU0UoUERGS0lUX0ZPUl9QREZET0NVTUVOVElN
QUdFKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCShyZXZpc2lv
biAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNyArMTg5LDcg
QEAgcHJpdmF0ZToKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29u
dGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KIAotI2lmIFVTRShDRykgfHwg
VVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykKICAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQo
Ym9vbCkgZmluYWwgeyB9CiAgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wp
IGZpbmFsIHsgfQpAQCAtMjIwLDcgKzIyMCw3IEBAIHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0jaWYg
VVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNFKENHKQogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBl
TWF0aERhdGEuY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjU5LDEwICsyNTksNiBAQCBPcGVuVHlwZU1hdGhEYXRhOjpPcGVuVHlwZU1hdGhEYXRhKGNv
bnN0CiAgICAgOiBtX21hdGhGb250KGZvbnQuY3JlYXRlT3BlblR5cGVNYXRoSGFyZkJ1enpGb250
KCkpCiB7CiB9Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi1PcGVuVHlwZU1hdGhEYXRhOjpPcGVuVHlw
ZU1hdGhEYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnQpCi17Ci19CiAjZWxzZQogT3Bl
blR5cGVNYXRoRGF0YTo6T3BlblR5cGVNYXRoRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJikg
PSBkZWZhdWx0OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
dHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCw2
IEBACiAjaW5jbHVkZSAiRm9udE1lbW9yeVJlc291cmNlLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRp
ZXMuaCIKLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogc3RydWN0IEJpZ0VuZGlhblVTaG9ydCB7IApAQCAtMjgxLDExICsyNzYsNiBAQCBSZWZQ
dHI8Rm9udE1lbW9yeVJlc291cmNlPiByZW5hbWVBbmRBY3RpCiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIEhSRVNVTFQgaHIgPSBEaXJlY3RXcml0
ZTo6YWRkRm9udEZyb21EYXRhVG9Qcm9jZXNzQ29sbGVjdGlvbihyZXdyaXR0ZW5Gb250RGF0YSk7
Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotI2VuZGlmCi0KICAgICByZXR1cm4gRm9udE1l
bW9yeVJlc291cmNlOjpjcmVhdGUoZm9udEhhbmRsZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVy
ZS5jcHAJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0
LDYgQEAgdm9pZCBCaXRtYXBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyhHcmFwaAogCiAgICAgc291
cmNlTGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIHNvdXJjZVJlY3Qp
OwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIC8vIFdlIGNhbid0IGFjY2VzcyB0aGUgYml0cyBp
biB0aGUgaW1hZ2UgYnVmZmVyIHdpdGggYW4gYWN0aXZlIGJlZ2luRHJhdy4KLSAgICBjb250ZXh0
LmVuZERyYXcoKTsKLSNlbmRpZgotCiAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGltYWdlQnVm
ZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgIGlmICghaW1hZ2UpCiAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9CaXRtYXBUZXh0dXJlR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuY3BwCShyZXZpc2lvbiAyODc4
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4
dHVyZUdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTEgKzQyLDYgQEAKICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRl
IDxkMmQxLmg+Ci0jaW5jbHVkZSA8d2luY29kZWMuaD4KLSNlbmRpZgotCiAjaWYgT1MoREFSV0lO
KQogI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYgMHg4MzY3CiAjZW5kaWYKQEAg
LTE2Myw4ICsxNTgsNiBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoSW1h
CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gZnJhbWVJbWFnZS0+cGxhdGZvcm1JbWFn
ZSgpLmdldCgpOwogICAgIGltYWdlRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEo
c3VyZmFjZSk7CiAgICAgYnl0ZXNQZXJMaW5lID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3Ry
aWRlKHN1cmZhY2UpOwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIG5vdEltcGxlbWVudGVkKCk7
CiAjZW5kaWYKIAogICAgIHVwZGF0ZUNvbnRlbnRzKGltYWdlRGF0YSwgdGFyZ2V0UmVjdCwgb2Zm
c2V0LCBieXRlc1BlckxpbmUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0
MkQuaAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRC5oCShub25leGlzdGVudCkKQEAgLTEs
NzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0ci5o
IgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3aW5jb2RlYy5oPgotI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgotCi1pbnRlcmZhY2UgSUQyRDFCaXRtYXA7Ci1pbnRlcmZhY2Ug
SUQyRDFCaXRtYXBCcnVzaDsKLWludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLWludGVyZmFj
ZSBJRDNEMTFEZXZpY2UxOwotaW50ZXJmYWNlIElEWEdJU3VyZmFjZTE7Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJEIHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkQpOwotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHZpcnR1YWwgfkJhY2tpbmdTdG9yZUJh
Y2tlbmREaXJlY3QyRCgpID0gZGVmYXVsdDsKLQotICAgIElEMkQxUmVuZGVyVGFyZ2V0KiByZW5k
ZXJUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclRhcmdldC5nZXQoKTsgfQotICAgIElE
MkQxQml0bWFwKiBzdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLmdldCgpOyB9Ci0g
ICAgSURYR0lTdXJmYWNlMSogZHhTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9keFN1cmZhY2Uu
Z2V0KCk7IH0KLSAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3Qs
IGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgSUQyRDFCaXRt
YXBCcnVzaCogYml0bWFwQnJ1c2goKSA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICBCYWNraW5nU3Rv
cmVCYWNrZW5kRGlyZWN0MkQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSUQzRDExRGV2aWNlMSogZGV2
aWNlKQotICAgICAgICA6IG1fZGV2aWNlKGRldmljZSkKLSAgICAgICAgLCBtX3NpemUoc2l6ZSkK
LSAgICB7Ci0gICAgfQotCi0gICAgQ09NUHRyPElEM0QxMURldmljZTE+IG1fZGV2aWNlOwotICAg
IENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gbV9yZW5kZXJUYXJnZXQ7Ci0gICAgQ09NUHRyPElE
WEdJU3VyZmFjZTE+IG1fZHhTdXJmYWNlOwotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gbV9zdXJm
YWNlOwotICAgIEludFNpemUgbV9zaXplOwotfTsKLQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9y
ZUJhY2tlbmREaXJlY3QyREltcGwuY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1w
bC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBs
LmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5o
IgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNs
dWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNs
dWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2luY2x1ZGUgPHdpbmNvZGVj
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IFNlY29uZHMgc2Nyb2xs
SHlzdGVyZXNpc0R1cmF0aW9uIHsgMzAwX21zIH07Ci0KLUJhY2tpbmdTdG9yZUJhY2tlbmREaXJl
Y3QyREltcGw6OkJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwoY29uc3QgSW50U2l6ZSYg
c2l6ZSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIElEM0QxMURldmljZTEqIGRldmljZSkKLSAg
ICA6IEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRChzaXplLCBkZXZpY2UpCi0gICAgLCBtX3Nj
cm9sbGVkSHlzdGVyZXNpcyhbdGhpc10oUEFMOjpIeXN0ZXJlc2lzU3RhdGUgc3RhdGUpIHsKLSAg
ICAgICAgaWYgKHN0YXRlID09IFBBTDo6SHlzdGVyZXNpc1N0YXRlOjpTdG9wcGVkKQotICAgICAg
ICAgICAgbV9zY3JvbGxTdXJmYWNlID0gbnVsbHB0cjsKLSAgICAgICAgfSwgc2Nyb2xsSHlzdGVy
ZXNpc0R1cmF0aW9uKQotewotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IG1fc2l6ZTsKLSAgICBz
Y2FsZWRTaXplLnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKLQotICAgIG1fZHhTdXJmYWNlID0g
V2ViQ29yZTo6RGlyZWN0MkQ6OmNyZWF0ZURYR0lTdXJmYWNlT2ZTaXplKHNjYWxlZFNpemUsIG1f
ZGV2aWNlLmdldCgpLCBmYWxzZSk7Ci0gICAgbV9yZW5kZXJUYXJnZXQgPSBXZWJDb3JlOjpEaXJl
Y3QyRDo6Y3JlYXRlU3VyZmFjZVJlbmRlclRhcmdldChtX2R4U3VyZmFjZS5nZXQoKSk7Ci0KLSAg
ICBhdXRvIGJpdG1hcFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpOwot
ICAgIEhSRVNVTFQgaHIgPSBtX3JlbmRlclRhcmdldC0+Q3JlYXRlU2hhcmVkQml0bWFwKF9fdXVp
ZG9mKElEWEdJU3VyZmFjZTEpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihtX2R4U3VyZmFjZS5n
ZXQoKSksICZiaXRtYXBQcm9wZXJ0aWVzLCAmbV9zdXJmYWNlKTsKLSAgICBSRUxFQVNFX0FTU0VS
VChTVUNDRUVERUQoaHIpKTsKLX0KLQotQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbDo6
fkJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwoKQotewotfQotCi12b2lkIEJhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyREltcGw6OnNjcm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0
LCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZzZXQpCi17Ci0gICAgSW50UmVjdCBzb3VyY2VSZWN0
ID0gc2Nyb2xsUmVjdDsKLSAgICBzb3VyY2VSZWN0Lm1vdmUoLXNjcm9sbE9mZnNldCk7Ci0gICAg
c291cmNlUmVjdC5pbnRlcnNlY3Qoc2Nyb2xsUmVjdCk7Ci0KLSAgICBpZiAoc291cmNlUmVjdC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9zY3JvbGxTdXJmYWNlIHx8
IHNjcm9sbFJlY3Quc2l6ZSgpICE9IG1fc2Nyb2xsU3VyZmFjZVNpemUpIHsKLSNpZm5kZWYgX05E
RUJVRwotICAgICAgICBBU1NFUlQobV9zaXplLndpZHRoKCkgPj0gc2Nyb2xsUmVjdC5zaXplKCku
d2lkdGgoKSk7Ci0gICAgICAgIEFTU0VSVChtX3NpemUuaGVpZ2h0KCkgPj0gc2Nyb2xsUmVjdC5z
aXplKCkuaGVpZ2h0KCkpOwotI2VuZGlmCi0gICAgICAgIG1fc2Nyb2xsU3VyZmFjZVNpemUgPSBz
b3VyY2VSZWN0LnNpemUoKTsKLSAgICAgICAgbV9keFNjcm9sbFN1cmZhY2UgPSBXZWJDb3JlOjpE
aXJlY3QyRDo6Y3JlYXRlRFhHSVN1cmZhY2VPZlNpemUobV9zY3JvbGxTdXJmYWNlU2l6ZSwgbV9k
ZXZpY2UuZ2V0KCksIGZhbHNlKTsKLQotICAgICAgICBtX3Njcm9sbFN1cmZhY2UgPSBudWxscHRy
OwotICAgICAgICBhdXRvIGJpdG1hcFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6Yml0bWFwUHJvcGVy
dGllcygpOwotICAgICAgICBIUkVTVUxUIGhyID0gbV9yZW5kZXJUYXJnZXQtPkNyZWF0ZVNoYXJl
ZEJpdG1hcChfX3V1aWRvZihJRFhHSVN1cmZhY2UxKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
bV9keFNjcm9sbFN1cmZhY2UuZ2V0KCkpLCAmYml0bWFwUHJvcGVydGllcywgJm1fc2Nyb2xsU3Vy
ZmFjZSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIH0KLQot
ICAgIGF1dG8gc291cmNlUmVjdExvY2F0aW9uID0gSW50U2l6ZShzb3VyY2VSZWN0LngoKSwgc291
cmNlUmVjdC55KCkpOwotICAgIGF1dG8gZGVzdFJlY3RMb2NhdGlvbiA9IEludFNpemUoKTsgLy8g
VG9wIGxlZnQgY29ybmVyIG9mIHNjcm9sbCBzdXJmYWNlCi0gICAgRGlyZWN0MkQ6OmNvcHlSZWN0
RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIobV9zdXJmYWNlLmdldCgpLCBtX3Njcm9sbFN1cmZhY2Uu
Z2V0KCksIHNvdXJjZVJlY3RMb2NhdGlvbiwgc291cmNlUmVjdCwgZGVzdFJlY3RMb2NhdGlvbik7
Ci0KLSAgICBJbnRSZWN0IGRlc3RSZWN0ID0gc2Nyb2xsUmVjdDsKLSAgICBkZXN0UmVjdC5zZXRI
ZWlnaHQoc291cmNlUmVjdC5oZWlnaHQoKSk7Ci0gICAgZGVzdFJlY3Quc2V0V2lkdGgoc291cmNl
UmVjdC53aWR0aCgpKTsKLQotICAgIEludFNpemUgZGVzdFBvc2l0aW9uOwotICAgIGlmIChzY3Jv
bGxPZmZzZXQud2lkdGgoKSA+IDAgfHwgc2Nyb2xsT2Zmc2V0LmhlaWdodCgpID4gMCkgewotICAg
ICAgICBkZXN0UG9zaXRpb24uc2V0V2lkdGgoc3RkOjptaW4oc2Nyb2xsUmVjdC53aWR0aCgpLCBz
Y3JvbGxPZmZzZXQud2lkdGgoKSkpOwotICAgICAgICBkZXN0UG9zaXRpb24uc2V0SGVpZ2h0KHN0
ZDo6bWluKHNjcm9sbFJlY3QuaGVpZ2h0KCksIHNjcm9sbE9mZnNldC5oZWlnaHQoKSkpOwotICAg
IH0KLQotICAgIGF1dG8gc291cmNlU2Nyb2xsU3VyZmFjZUxvY2F0aW9uID0gSW50U2l6ZSgpOyAv
LyBUb3AgbGVmdCBjb3JuZXIgb2Ygc2Nyb2xsIHN1cmZhY2UKLSAgICBEaXJlY3QyRDo6Y29weVJl
Y3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihtX3Njcm9sbFN1cmZhY2UuZ2V0KCksIG1fc3VyZmFj
ZS5nZXQoKSwgc291cmNlU2Nyb2xsU3VyZmFjZUxvY2F0aW9uLCBkZXN0UmVjdCwgZGVzdFBvc2l0
aW9uKTsKLQotICAgIG1fc2Nyb2xsZWRIeXN0ZXJlc2lzLmltcHVsc2UoKTsKLX0KLQotSUQyRDFC
aXRtYXBCcnVzaCogQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbDo6Yml0bWFwQnJ1c2go
KQotewotICAgIGlmICghbV9yZW5kZXJUYXJnZXQgfHwgIW1fc3VyZmFjZSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIW1fYml0bWFwQnJ1c2gpIHsKLSAgICAgICAgYXV0byBi
aXRtYXBCcnVzaFByb3BlcnRpZXMgPSBEMkQxOjpCaXRtYXBCcnVzaFByb3BlcnRpZXMoKTsKLSAg
ICAgICAgYXV0byBicnVzaFByb3BlcnRpZXMgPSBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKTsKLQot
ICAgICAgICBIUkVTVUxUIGhyID0gbV9yZW5kZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcEJydXNoKG1f
c3VyZmFjZS5nZXQoKSwgJmJpdG1hcEJydXNoUHJvcGVydGllcywgJmJydXNoUHJvcGVydGllcywg
Jm1fYml0bWFwQnJ1c2gpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG1fYml0bWFwQnJ1c2guZ2V0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyREltcGwuaAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRElt
cGwuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkJhY2tpbmdTdG9yZUJhY2tl
bmREaXJlY3QyRC5oIgotI2luY2x1ZGUgPHBhbC9IeXN0ZXJlc2lzQWN0aXZpdHkuaD4KLQotaW50
ZXJmYWNlIElEMkQxQml0bWFwQnJ1c2g7Ci1pbnRlcmZhY2UgSURYR0lTdXJmYWNlMTsKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbnRTaXplOwotCi1jbGFzcyBCYWNraW5nU3RvcmVC
YWNrZW5kRGlyZWN0MkRJbXBsIGZpbmFsIDogcHVibGljIEJhY2tpbmdTdG9yZUJhY2tlbmREaXJl
Y3QyRCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQmFja2luZ1N0b3JlQmFja2VuZERp
cmVjdDJESW1wbChjb25zdCBJbnRTaXplJiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIElEM0Qx
MURldmljZTEqKTsKLSAgICB2aXJ0dWFsIH5CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBs
KCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBzY3JvbGwoY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFNpemUmKSBvdmVycmlkZTsKLSAgICBJRDJEMUJpdG1hcEJydXNoKiBiaXRtYXBCcnVzaCgpIG92
ZXJyaWRlOwotCi0gICAgSW50U2l6ZSBtX3Njcm9sbFN1cmZhY2VTaXplOwotICAgIENPTVB0cjxJ
RDJEMUJpdG1hcD4gbV9zY3JvbGxTdXJmYWNlOwotICAgIENPTVB0cjxJRFhHSVN1cmZhY2UxPiBt
X2R4U2Nyb2xsU3VyZmFjZTsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXBCcnVzaD4gbV9iaXRtYXBC
cnVzaDsKLQotICAgIFBBTDo6SHlzdGVyZXNpc0FjdGl2aXR5IG1fc2Nyb2xsZWRIeXN0ZXJlc2lz
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJE
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0
MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Db2xvckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAg
LTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotCi0jaWYg
UExBVEZPUk0oV0lOKQotCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQyZDFfMWhlbHBl
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNvbG9yOjpDb2xvcihEMkQxX0NPTE9SX0Yg
Y29sb3IpCi0gICAgOiBDb2xvcihjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KFNSR0JBPGZs
b2F0PiB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSkpCi17Ci19Ci0KLUNv
bG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0YoKSBjb25zdAotewotICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gdG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKLSAgICBy
ZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEpOwotfQotCi1Db2xvcjo6b3BlcmF0b3IgRDJE
MV9WRUNUT1JfNEYoKSBjb25zdAotewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5
cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKLSAgICByZXR1cm4gRDJEMTo6VmVj
dG9yNEYociwgZywgYiwgYSk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRy
b2xsZXJEaXJlY3RXcml0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlckRpcmVjdFdyaXRlLmNwcAkocmV2
aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Nv
bXBsZXhUZXh0Q29udHJvbGxlckRpcmVjdFdyaXRlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDE4
MSArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoK
LSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0q
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0qIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0qIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0qIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCi0qIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0qIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5o
IgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMu
aCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2lu
Y2x1ZGUgIlRleHRBbmFseXplckhlbHBlci5oIgotI2luY2x1ZGUgPGR3cml0ZV8zLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGJvb2wgc2hhcGUoSURXcml0ZVRleHRBbmFseXpl
ciogYW5hbHl6ZXIsIGNvbnN0IERXUklURV9TQ1JJUFRfQU5BTFlTSVMmIGFuYWx5c2lzLCBjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBmb250UGxhdGZvcm1EYXRhLCBjb25zdCBXQ0hBUiogdGV4dCwg
dW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdWdnZXN0ZWRDb3VudCwgVmVjdG9yPEdseXBoPiYg
Z2x5cGhzLCBWZWN0b3I8R2x5cGg+JiBjbHVzdGVyTWFwLCBWZWN0b3I8RFdSSVRFX1NIQVBJTkdf
VEVYVF9QUk9QRVJUSUVTPiYgdGV4dFByb3BlcnRpZXMsIFZlY3RvcjxEV1JJVEVfU0hBUElOR19H
TFlQSF9QUk9QRVJUSUVTPiYgZ2x5cGhQcm9wZXJ0aWVzLCB1bnNpZ25lZCYgZ2x5cGhDb3VudCkK
LXsKLSAgICBIUkVTVUxUIHNoYXBlUmVzdWx0ID0gRV9QRU5ESU5HOwotCi0gICAgZG8gewotICAg
ICAgICBzaGFwZVJlc3VsdCA9IGFuYWx5emVyLT5HZXRHbHlwaHModGV4dCwgbGVuZ3RoLCBmb250
UGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKSwgZm9udFBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigp
ID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwsIGZhbHNlLAotICAgICAgICAgICAgJmFuYWx5
c2lzLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCAwLCBzdWdnZXN0ZWRDb3Vu
dCwgY2x1c3Rlck1hcC5kYXRhKCksIHRleHRQcm9wZXJ0aWVzLmRhdGEoKSwKLSAgICAgICAgICAg
IGdseXBocy5kYXRhKCksIGdseXBoUHJvcGVydGllcy5kYXRhKCksICZnbHlwaENvdW50KTsKLQot
ICAgICAgICBpZiAoc2hhcGVSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkgewotICAgICAgICAgICAg
Ly8gTmVlZCB0byByZXNpemUgb3VyIGJ1ZmZlcnMgKGV4Y2VwdCBmb3IgY2x1c3Rlck1hcC4gSXQg
aXMgYWx3YXlzIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZykuCi0gICAgICAgICAgICBnbHlwaHMu
cmVzaXplKGdseXBocy5zaXplKCkgKiAyKTsKLSAgICAgICAgICAgIHRleHRQcm9wZXJ0aWVzLnJl
c2l6ZShnbHlwaHMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGdseXBoUHJvcGVydGllcy5yZXNpemUo
Z2x5cGhzLnNpemUoKSk7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlIChzaGFwZVJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKTsKLQotICAgIGlmIChGQUlMRUQoc2hhcGVSZXN1bHQpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENv
bnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFy
KiBjcCwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgY29uc3QgRm9u
dCogZm9udCkKLXsKLSAgICBpZiAoIWZvbnQpIHsKLSAgICAgICAgLy8gQ3JlYXRlIGEgcnVuIG9m
IG1pc3NpbmcgZ2x5cGhzIGZyb20gdGhlIHByaW1hcnkgZm9udC4KLSAgICAgICAgbV9jb21wbGV4
VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250
KCksIGNwLCBzdHJpbmdMb2NhdGlvbiwgbGVuZ3RoLCAwLCBsZW5ndGgsIG1fcnVuLmx0cigpKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvJiBmb250UGxhdGZvcm1EYXRhID0g
Zm9udC0+cGxhdGZvcm1EYXRhKCk7Ci0KLSAgICB3Y2hhcl90IGxvY2FsZU5hbWVbTE9DQUxFX05B
TUVfTUFYX0xFTkdUSF0gPSB7IH07Ci0gICAgaW50IGxvY2FsZUxlbmd0aCA9IEdldFVzZXJEZWZh
dWx0TG9jYWxlTmFtZShyZWludGVycHJldF9jYXN0PExQV1NUUj4oJmxvY2FsZU5hbWUpLCBMT0NB
TEVfTkFNRV9NQVhfTEVOR1RIKTsKLSAgICBSRUxFQVNFX0FTU0VSVChsb2NhbGVMZW5ndGggPCBM
T0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKLQotICAgIFZlY3RvcjxEV1JJVEVfRk9OVF9GRUFUVVJF
PiBmb250RmVhdHVyZXMoMSk7Ci0gICAgZm9udEZlYXR1cmVzWzBdLm5hbWVUYWcgPSBEV1JJVEVf
Rk9OVF9GRUFUVVJFX1RBR19LRVJOSU5HOwotICAgIGZvbnRGZWF0dXJlc1swXS5wYXJhbWV0ZXIg
PSBtX2ZvbnQuZW5hYmxlS2VybmluZygpID8gMSA6IDA7Ci0KLSAgICBpZiAoZm9udFBsYXRmb3Jt
RGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpCi0gICAgICAg
IGZvbnRGZWF0dXJlcy5hcHBlbmQoe0RXUklURV9GT05UX0ZFQVRVUkVfVEFHX1ZFUlRJQ0FMX1dS
SVRJTkcsIDF9KTsKLQotICAgIERXUklURV9UWVBPR1JBUEhJQ19GRUFUVVJFUyB1c2VkRmVhdHVy
ZXM7Ci0gICAgdXNlZEZlYXR1cmVzLmZlYXR1cmVzID0gZm9udEZlYXR1cmVzLmRhdGEoKTsKLSAg
ICB1c2VkRmVhdHVyZXMuZmVhdHVyZUNvdW50ID0gZm9udEZlYXR1cmVzLnNpemUoKTsKLQotICAg
IFZlY3Rvcjxjb25zdCBEV1JJVEVfVFlQT0dSQVBISUNfRkVBVFVSRVMqPiBmZWF0dXJlczsKLSAg
ICBmZWF0dXJlcy5hcHBlbmQoJnVzZWRGZWF0dXJlcyk7Ci0KLSAgICBDT01QdHI8SURXcml0ZVRl
eHRBbmFseXplcj4gYW5hbHl6ZXI7Ci0gICAgSFJFU1VMVCBociA9IERpcmVjdFdyaXRlOjpmYWN0
b3J5KCktPkNyZWF0ZVRleHRBbmFseXplcigmYW5hbHl6ZXIpOwotICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotCi0gICAgVGV4dEFuYWx5emVySGVscGVyIGhlbHBlcihyZWludGVy
cHJldF9jYXN0PExQV1NUUj4oJmxvY2FsZU5hbWUpLCByZWludGVycHJldF9jYXN0PExQQ1dTVFI+
KGNwKSwgbGVuZ3RoKTsKLQotICAgIGhyID0gYW5hbHl6ZXItPkFuYWx5emVTY3JpcHQoJmhlbHBl
ciwgMCwgbGVuZ3RoLCAmaGVscGVyKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKLQotICAgIHVuc2lnbmVkIHRvdGFsU3VnZ2VzdGVkQ291bnQgPSAoMyAqIGxlbmd0aCAvIDIg
KyAxNik7Ci0KLSAgICBWZWN0b3I8R2x5cGg+IGdseXBoczsKLSAgICBWZWN0b3I8R2x5cGg+IGNs
dXN0ZXJNYXA7Ci0gICAgVmVjdG9yPERXUklURV9TSEFQSU5HX1RFWFRfUFJPUEVSVElFUz4gdGV4
dFByb3BlcnRpZXM7Ci0gICAgVmVjdG9yPERXUklURV9TSEFQSU5HX0dMWVBIX1BST1BFUlRJRVM+
IGdseXBoUHJvcGVydGllczsKLSAgICBWZWN0b3I8RkxPQVQ+IGdseXBoQWR2YW5jZXM7Ci0gICAg
VmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+IGdseXBoT2Zmc2V0czsKLSAgICBWZWN0b3I8Rmxv
YXRQb2ludD4gb3JpZ2luczsKLSAgICBWZWN0b3I8RmxvYXRTaXplPiBhZHZhbmNlczsKLSAgICBW
ZWN0b3I8dW5zaWduZWQ+IHN0cmluZ0luZGljZXM7Ci0KLSAgICBnbHlwaHMucmVzZXJ2ZUNhcGFj
aXR5KHRvdGFsU3VnZ2VzdGVkQ291bnQpOwotICAgIGNsdXN0ZXJNYXAucmVzZXJ2ZUNhcGFjaXR5
KGxlbmd0aCk7Ci0gICAgdGV4dFByb3BlcnRpZXMucmVzZXJ2ZUNhcGFjaXR5KHRvdGFsU3VnZ2Vz
dGVkQ291bnQpOwotICAgIGdseXBoUHJvcGVydGllcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdn
ZXN0ZWRDb3VudCk7Ci0gICAgZ2x5cGhBZHZhbmNlcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdn
ZXN0ZWRDb3VudCk7Ci0gICAgZ2x5cGhPZmZzZXRzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1Z2dl
c3RlZENvdW50KTsKLSAgICBvcmlnaW5zLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1Z2dlc3RlZENv
dW50KTsKLSAgICBhZHZhbmNlcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdnZXN0ZWRDb3VudCk7
Ci0gICAgc3RyaW5nSW5kaWNlcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdnZXN0ZWRDb3VudCk7
Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHJ1biA6IGhlbHBlci5tX2FuYWx5emVkUnVucykgewot
ICAgICAgICBjb25zdCBVQ2hhciogY3VycmVudENQID0gY3AgKyBydW4uc3RhcnRQb3NpdGlvbjsK
LSAgICAgICAgTFBDV1NUUiB0ZXh0UG9zaXRpb24gPSByZWludGVycHJldF9jYXN0PExQQ1dTVFI+
KGN1cnJlbnRDUCk7Ci0KLSAgICAgICAgdW5zaWduZWQgc3VnZ2VzdGVkQ291bnQgPSAoMyAqIHJ1
bi5sZW5ndGggLyAyICsgMTYpOwotICAgICAgICBnbHlwaHMucmVzaXplKHN1Z2dlc3RlZENvdW50
KTsKLSAgICAgICAgY2x1c3Rlck1hcC5yZXNpemUocnVuLmxlbmd0aCk7Ci0gICAgICAgIHRleHRQ
cm9wZXJ0aWVzLnJlc2l6ZShzdWdnZXN0ZWRDb3VudCk7Ci0gICAgICAgIGdseXBoUHJvcGVydGll
cy5yZXNpemUoc3VnZ2VzdGVkQ291bnQpOwotCi0gICAgICAgIHVuc2lnbmVkIGdseXBoQ291bnQg
PSAwOwotICAgICAgICBpZiAoIXNoYXBlKGFuYWx5emVyLmdldCgpLCBydW4uYW5hbHlzaXMsIGZv
bnRQbGF0Zm9ybURhdGEsIHRleHRQb3NpdGlvbiwgcnVuLmxlbmd0aCwgc3VnZ2VzdGVkQ291bnQs
IGdseXBocywgY2x1c3Rlck1hcCwgdGV4dFByb3BlcnRpZXMsIGdseXBoUHJvcGVydGllcywgZ2x5
cGhDb3VudCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZ2x5cGhzLnNocmluayhn
bHlwaENvdW50KTsKLSAgICAgICAgdGV4dFByb3BlcnRpZXMuc2hyaW5rKGdseXBoQ291bnQpOwot
ICAgICAgICBnbHlwaFByb3BlcnRpZXMuc2hyaW5rKGdseXBoQ291bnQpOwotICAgICAgICBnbHlw
aEFkdmFuY2VzLnJlc2l6ZShnbHlwaENvdW50KTsKLSAgICAgICAgZ2x5cGhPZmZzZXRzLnJlc2l6
ZShnbHlwaENvdW50KTsKLQotICAgICAgICBIUkVTVUxUIHBsYWNlbWVudFJlc3VsdCA9IGFuYWx5
emVyLT5HZXRHbHlwaFBsYWNlbWVudHModGV4dFBvc2l0aW9uLCBjbHVzdGVyTWFwLmRhdGEoKSwg
dGV4dFByb3BlcnRpZXMuZGF0YSgpLCBydW4ubGVuZ3RoLAotICAgICAgICAgICAgZ2x5cGhzLmRh
dGEoKSwgZ2x5cGhQcm9wZXJ0aWVzLmRhdGEoKSwgZ2x5cGhDb3VudCwgZm9udFBsYXRmb3JtRGF0
YS5kd0ZvbnRGYWNlKCksCi0gICAgICAgICAgICBmb250UGxhdGZvcm1EYXRhLnNpemUoKSwgZm9u
dFBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWws
IG1fcnVuLmx0cigpLAotICAgICAgICAgICAgJnJ1bi5hbmFseXNpcywgcmVpbnRlcnByZXRfY2Fz
dDxMUENXU1RSPihsb2NhbGVOYW1lKSwgCi0gICAgICAgICAgICBmZWF0dXJlcy5kYXRhKCksICZy
dW4ubGVuZ3RoLCAxLAotICAgICAgICAgICAgZ2x5cGhBZHZhbmNlcy5kYXRhKCksIGdseXBoT2Zm
c2V0cy5kYXRhKCkpOwotICAgICAgICBpZiAoRkFJTEVEKHBsYWNlbWVudFJlc3VsdCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gQ29udmVydCBhbGwgY2hhcnMgdGhhdCBzaG91
bGQgYmUgdHJlYXRlZCBhcyBzcGFjZXMgdG8gdXNlIHRoZSBzcGFjZSBnbHlwaC4KLSAgICAgICAg
Ly8gV2UgYWxzbyBjcmVhdGUgYSBtYXAgdGhhdCBhbGxvd3MgdXMgdG8gcXVpY2tseSBnbyBmcm9t
IHNwYWNlIGdseXBocyBiYWNrIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVycy4KLSAg
ICAgICAgZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnQtPnNwYWNlV2lkdGgoKSAtIGZvbnQtPnN5bnRo
ZXRpY0JvbGRPZmZzZXQoKTsKLQotICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHJ1bi5sZW5n
dGg7ICsraykgewotICAgICAgICAgICAgVUNoYXIgY2ggPSAqKGN1cnJlbnRDUCArIGspOwotICAg
ICAgICAgICAgYm9vbCB0cmVhdEFzU3BhY2UgPSBGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNo
KTsKLSAgICAgICAgICAgIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlID0gRm9udENhc2NhZGU6
OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaCk7Ci0gICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNl
IHx8IHRyZWF0QXNaZXJvV2lkdGhTcGFjZSkgewotICAgICAgICAgICAgICAgIC8vIFN1YnN0aXR1
dGUgaW4gdGhlIHNwYWNlIGdseXBoIGF0IHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbiB0aGUgZ2x5
cGhzCi0gICAgICAgICAgICAgICAgLy8gYXJyYXkuCi0gICAgICAgICAgICAgICAgZ2x5cGhzW2Ns
dXN0ZXJNYXBba11dID0gZm9udC0+c3BhY2VHbHlwaCgpOwotICAgICAgICAgICAgICAgIGdseXBo
QWR2YW5jZXNbY2x1c3Rlck1hcFtrXV0gPSB0cmVhdEFzU3BhY2UgPyBzcGFjZVdpZHRoIDogMDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG9yaWdpbnMucmVzaXplKGdseXBo
Q291bnQpOwotICAgICAgICBhZHZhbmNlcy5yZXNpemUoZ2x5cGhDb3VudCk7Ci0gICAgICAgIHN0
cmluZ0luZGljZXMucmVzaXplKGdseXBoQ291bnQpOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZ2x5cGhDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBzdHJpbmdJbmRpY2VzW2ld
ID0gaTsKLSAgICAgICAgICAgIG9yaWdpbnNbaV0gPSBGbG9hdFBvaW50KGdseXBoT2Zmc2V0c1tp
XS5hZHZhbmNlT2Zmc2V0LCBnbHlwaE9mZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQpOwotICAgICAg
ICAgICAgYWR2YW5jZXNbaV0gPSBGbG9hdFNpemUoZ2x5cGhBZHZhbmNlc1tpXSwgMCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46
OmNyZWF0ZShhZHZhbmNlcywgb3JpZ2lucywgZ2x5cGhzLCBzdHJpbmdJbmRpY2VzLCBGbG9hdFNp
emUoKSwgKmZvbnQsIGN1cnJlbnRDUCwgMCwgcnVuLmxlbmd0aCwgMCwgcnVuLmxlbmd0aCwgbV9y
dW4ubHRyKCkpKTsKLSAgICB9Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29t
cGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVu
aXNjcmliZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDYgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKIAotI2lmICFVU0Uo
RElSRUNUMkQpCi0KICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGb250Q2FzY2Fk
ZS5oIgogI2luY2x1ZGUgIkhXbmREQy5oIgpAQCAtMjc1LDUgKzI3MywzIEBAIHZvaWQgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGwKIH0KIAogfQotCi0jZW5kaWYgLy8gIVVTRShE
SVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJl
Y3QyRE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODc4MTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25z
LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDEyNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNi0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAwOCBOdWFudGkgTHRkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEJyZW50IEZ1bGdoYW0g
PGJmdWxnaGFtQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlh
IFMuTC4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiwgSW50ZWwgQ29ycG9y
YXRpb24KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRpcmVjdDJET3BlcmF0aW9ucy5oIgotCi0jaWYgVVNF
KERJUkVDVDJEKQotCi0jaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJG
bG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkltYWdlLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3Qy
RC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSAiU2hhZG93Qmx1ci5o
IgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxkMmQxLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLW5hbWVzcGFjZSBEaXJlY3QyRCB7Ci0KLWVudW0gUGF0dGVybkFkanVzdG1lbnQg
eyBOb0FkanVzdG1lbnQsIEFkanVzdFBhdHRlcm5Gb3JHbG9iYWxBbHBoYSB9OwotZW51bSBBbHBo
YVByZXNlcnZhdGlvbiB7IERvTm90UHJlc2VydmVBbHBoYSwgUHJlc2VydmVBbHBoYSB9OwotCi0v
LyBGSVhNRTogUmVwbGFjZSBvbmNlIEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZUNvcm5lcldp
ZHRoRm9yU3Ryb2tlV2lkdGgoKQotLy8gaXMgcmVmYWN0b3JlZCBhcyBhIHN0YXRpYyBwdWJsaWMg
ZnVuY3Rpb24uCi1zdGF0aWMgZmxvYXQgZGFzaGVkTGluZUNvcm5lcldpZHRoRm9yU3Ryb2tlV2lk
dGgoZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlLCBmbG9hdCBzdHJv
a2VUaGlja25lc3MpCi17Ci0gICAgcmV0dXJuIHN0cm9rZVN0eWxlID09IERvdHRlZFN0cm9rZSA/
IHN0cm9rZVRoaWNrbmVzcyA6IHN0ZDo6bWluKDIuMGYgKiBzdHJva2VUaGlja25lc3MsIHN0ZDo6
bWF4KHN0cm9rZVRoaWNrbmVzcywgc3Ryb2tlV2lkdGggLyAzLjBmKSk7Ci19Ci0KLS8vIEZJWE1F
OiBSZXBsYWNlIG9uY2UgR3JhcGhpY3NDb250ZXh0OjpkYXNoZWRMaW5lUGF0dGVybldpZHRoRm9y
U3Ryb2tlV2lkdGgoKQotLy8gaXMgcmVmYWN0b3JlZCBhcyBhIHN0YXRpYyBwdWJsaWMgZnVuY3Rp
b24uCi1zdGF0aWMgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5XaWR0aEZvclN0cm9rZVdpZHRoKGZs
b2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSwgZmxvYXQgc3Ryb2tlVGhp
Y2tuZXNzKQotewotICAgIHJldHVybiBzdHJva2VTdHlsZSA9PSBEb3R0ZWRTdHJva2UgPyBzdHJv
a2VUaGlja25lc3MgOiBzdGQ6Om1pbigzLjBmICogc3Ryb2tlVGhpY2tuZXNzLCBzdGQ6Om1heChz
dHJva2VUaGlja25lc3MsIHN0cm9rZVdpZHRoIC8gMy4wZikpOwotfQotCi0vLyBGSVhNRTogUmVw
bGFjZSBvbmNlIEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0
ZXJuQW5kU3Ryb2tlV2lkdGgoKQotLy8gaXMgcmVmYWN0b3JlZCBhcyBhIHN0YXRpYyBwdWJsaWMg
ZnVuY3Rpb24uCi1zdGF0aWMgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJu
QW5kU3Ryb2tlV2lkdGgoZmxvYXQgcGF0dGVybldpZHRoLCBmbG9hdCBzdHJva2VXaWR0aCkKLXsK
LSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIGZ1bGwgZmlsbCBhbmQgZW5kcyB3aXRoIHRoZSBl
bXB0eSBmaWxsLgotICAgIC8vIDEuIExldCdzIHN0YXJ0IHdpdGggdGhlIGVtcHR5IHBoYXNlIGFm
dGVyIHRoZSBjb3JuZXIuCi0gICAgLy8gMi4gQ2hlY2sgaWYgd2UndmUgZ290IG9kZCBvciBldmVu
IG51bWJlciBvZiBwYXR0ZXJucyBhbmQgd2hldGhlciB0aGV5IGZ1bGx5IGNvdmVyIHRoZSBsaW5l
LgotICAgIC8vIDMuIEluIGNhc2Ugb2YgZXZlbiBudW1iZXIgb2YgcGF0dGVybnMgYW5kL29yIHJl
bWFpbmRlciwgbW92ZSB0aGUgcGF0dGVybiBzdGFydCBwb3NpdGlvbgotICAgIC8vIHNvIHRoYXQg
dGhlIHBhdHRlcm4gaXMgYmFsYW5jZWQgYmV0d2VlbiB0aGUgY29ybmVycy4KLSAgICBmbG9hdCBw
YXR0ZXJuT2Zmc2V0ID0gcGF0dGVybldpZHRoOwotICAgIGludCBudW1iZXJPZlNlZ21lbnRzID0g
c3RkOjpmbG9vcihzdHJva2VXaWR0aCAvIHBhdHRlcm5XaWR0aCk7Ci0gICAgYm9vbCBvZGROdW1i
ZXJPZlNlZ21lbnRzID0gbnVtYmVyT2ZTZWdtZW50cyAlIDI7Ci0gICAgZmxvYXQgcmVtYWluZGVy
ID0gc3Ryb2tlV2lkdGggLSAobnVtYmVyT2ZTZWdtZW50cyAqIHBhdHRlcm5XaWR0aCk7Ci0gICAg
aWYgKG9kZE51bWJlck9mU2VnbWVudHMgJiYgcmVtYWluZGVyKQotICAgICAgICBwYXR0ZXJuT2Zm
c2V0IC09IHJlbWFpbmRlciAvIDIuMGY7Ci0gICAgZWxzZSBpZiAoIW9kZE51bWJlck9mU2VnbWVu
dHMpIHsKLSAgICAgICAgaWYgKHJlbWFpbmRlcikKLSAgICAgICAgICAgIHBhdHRlcm5PZmZzZXQg
Kz0gcGF0dGVybk9mZnNldCAtIChwYXR0ZXJuV2lkdGggKyByZW1haW5kZXIpIC8gMi4wZjsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgcGF0dGVybk9mZnNldCArPSBwYXR0ZXJuV2lkdGggLyAy
LjBmOwotICAgIH0KLQotICAgIHJldHVybiBwYXR0ZXJuT2Zmc2V0OwotfQotCi0vLyBGSVhNRTog
UmVwbGFjZSBvbmNlIEdyYXBoaWNzQ29udGV4dDo6Y2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMo
KQotLy8gaXMgcmVmYWN0b3JlZCBhcyBhIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24uCi1zdGF0aWMg
VmVjdG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNWZXJ0
aWNhbExpbmUsIGZsb2F0IGNvcm5lcldpZHRoLCBGbG9hdFBvaW50IHBvaW50MSwgRmxvYXRQb2lu
dCBwb2ludDIpCi17Ci0gICAgLy8gQ2VudGVyIGxpbmUgYW5kIGN1dCBvZmYgY29ybmVycyBmb3Ig
cGF0dGVybiBwYWludGluZy4KLSAgICBpZiAoaXNWZXJ0aWNhbExpbmUpIHsKLSAgICAgICAgZmxv
YXQgY2VudGVyT2Zmc2V0ID0gKHBvaW50Mi54KCkgLSBwb2ludDEueCgpKSAvIDIuMGY7Ci0gICAg
ICAgIHBvaW50MS5tb3ZlKGNlbnRlck9mZnNldCwgY29ybmVyV2lkdGgpOwotICAgICAgICBwb2lu
dDIubW92ZSgtY2VudGVyT2Zmc2V0LCAtY29ybmVyV2lkdGgpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGZsb2F0IGNlbnRlck9mZnNldCA9IChwb2ludDIueSgpIC0gcG9pbnQxLnkoKSkgLyAyLjBm
OwotICAgICAgICBwb2ludDEubW92ZShjb3JuZXJXaWR0aCwgY2VudGVyT2Zmc2V0KTsKLSAgICAg
ICAgcG9pbnQyLm1vdmUoLWNvcm5lcldpZHRoLCAtY2VudGVyT2Zmc2V0KTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4geyBwb2ludDEsIHBvaW50MiB9OwotfQotCi0KLW5hbWVzcGFjZSBTdGF0ZSB7Ci0K
LXZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQu
c2V0U3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgc2V0U3Ryb2tl
U3R5bGUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgU3Ryb2tlU3R5
bGUgc3Ryb2tlU3R5bGUpCi17Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNldFN0cm9rZVN0eWxlKHN0
cm9rZVN0eWxlKTsKLX0KLQotdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotCi0gICAgRDJEMV9CTEVORF9NT0RF
IHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9NVUxUSVBMWTsKLSAgICBEMkQxX0NP
TVBPU0lURV9NT0RFIHRhcmdldENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX0ZP
UkNFX0RXT1JEOwotCi0gICAgaWYgKGJsZW5kTW9kZSAhPSBCbGVuZE1vZGU6Ok5vcm1hbCkgewot
ICAgICAgICBzd2l0Y2ggKGJsZW5kTW9kZSkgewotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6TXVs
dGlwbHk6Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfTVVM
VElQTFk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OlNjcmVl
bjoKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9TQ1JFRU47
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6Ok92ZXJsYXk6Ci0g
ICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfT1ZFUkxBWTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6RGFya2VuOgotICAgICAg
ICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0RBUktFTjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6TGlnaHRlbjoKLSAgICAgICAgICAg
IHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9MSUdIVEVOOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpDb2xvckRvZGdlOgotICAgICAgICAgICAg
dGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0NPTE9SX0RPREdFOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpDb2xvckJ1cm46Ci0gICAgICAgICAg
ICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfQ09MT1JfQlVSTjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6SGFyZExpZ2h0OgotICAgICAgICAg
ICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0hBUkRfTElHSFQ7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OlNvZnRMaWdodDoKLSAgICAgICAg
ICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9TT0ZUX0xJR0hUOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpEaWZmZXJlbmNlOgotICAgICAg
ICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0RJRkZFUkVOQ0U7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OkV4Y2x1c2lvbjoKLSAgICAg
ICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9FWENMVVNJT047Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6Okh1ZToKLSAgICAgICAgICAg
IHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9IVUU7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OlNhdHVyYXRpb246Ci0gICAgICAgICAgICB0YXJn
ZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfU0FUVVJBVElPTjsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6Q29sb3I6Ci0gICAgICAgICAgICB0YXJnZXRC
bGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfQ09MT1I7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBCbGVuZE1vZGU6Okx1bWlub3NpdHk6Ci0gICAgICAgICAgICB0YXJnZXRCbGVu
ZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfTFVNSU5PU0lUWTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEJsZW5kTW9kZTo6UGx1c0RhcmtlcjoKLSAgICAgICAgICAgIHRhcmdldEJs
ZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9EQVJLRVJfQ09MT1I7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OlBsdXNMaWdodGVyOgotICAgICAgICAgICAgdGFy
Z2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0xJR0hURVJfQ09MT1I7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3dpdGNoIChjb21wb3NpdGVPcGVyYXRpb24pIHsKLSAg
ICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6Q2xlYXI6Ci0gICAgICAgICAgICAvLyBGSVhN
RTogdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0NMRUFSOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHk6Ci0gICAgICAgICAg
ICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVfTU9ERV9TT1VSQ0VfQ09QWTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3Vy
Y2VPdmVyOgotICAgICAgICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRF
X01PREVfU09VUkNFX09WRVI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21w
b3NpdGVPcGVyYXRvcjo6U291cmNlSW46Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2Rl
ID0gRDJEMV9DT01QT1NJVEVfTU9ERV9TT1VSQ0VfSU47Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3V0OgotICAgICAgICAgICAgdGFy
Z2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfU09VUkNFX09VVDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9w
OgotICAgICAgICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVf
U09VUkNFX0FUT1A7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVP
cGVyYXRvcjo6RGVzdGluYXRpb25PdmVyOgotICAgICAgICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9k
ZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfREVTVElOQVRJT05fT1ZFUjsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbkluOgotICAg
ICAgICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfREVTVElO
QVRJT05fSU47Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVy
YXRvcjo6RGVzdGluYXRpb25PdXQ6Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0g
RDJEMV9DT01QT1NJVEVfTU9ERV9ERVNUSU5BVElPTl9PVVQ7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25BdG9wOgotICAgICAg
ICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfREVTVElOQVRJ
T05fQVRPUDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJh
dG9yOjpYT1I6Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJ
VEVfTU9ERV9YT1I7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVP
cGVyYXRvcjo6UGx1c0RhcmtlcjoKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFf
QkxFTkRfTU9ERV9EQVJLRU47Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21w
b3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXI6Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUg
PSBEMkQxX0JMRU5EX01PREVfTElHSFRFTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpEaWZmZXJlbmNlOgotICAgICAgICAgICAgdGFyZ2V0Qmxl
bmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0RJRkZFUkVOQ0U7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRCbGVuZEFuZENvbXBv
c2l0ZU1vZGUodGFyZ2V0QmxlbmRNb2RlLCB0YXJnZXRDb21wb3NpdGVNb2RlKTsKLX0KLQotdm9p
ZCBzZXRTaG91bGRBbnRpYWxpYXMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29u
dGV4dCwgYm9vbCBlbmFibGUpCi17Ci0gICAgYXV0byBhbnRpYWxpYXNNb2RlID0gZW5hYmxlID8g
RDJEMV9BTlRJQUxJQVNfTU9ERV9QRVJfUFJJTUlUSVZFIDogRDJEMV9BTlRJQUxJQVNfTU9ERV9B
TElBU0VEOwotICAgIHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+U2V0QW50aWFsaWFz
TW9kZShhbnRpYWxpYXNNb2RlKTsKLX0KLQotdm9pZCBzZXRDVE0oUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
Ci17Ci0gICAgQVNTRVJUKHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgcGxh
dGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5TZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKLQot
ICAgIGlmIChhdXRvKiBncmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxhdGZvcm1Db250ZXh0Lmdy
YXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZS0+
c2V0Q1RNKHRyYW5zZm9ybSk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBnZXRDVE0oUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkKLXsKLSAgICBBU1NFUlQocGxhdGZvcm1D
b250ZXh0LnJlbmRlclRhcmdldCgpKTsKLSAgICBEMkQxX01BVFJJWF8zWDJfRiBjdXJyZW50VHJh
bnNmb3JtOwotICAgIHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+R2V0VHJhbnNmb3Jt
KCZjdXJyZW50VHJhbnNmb3JtKTsKLSAgICByZXR1cm4gY3VycmVudFRyYW5zZm9ybTsKLX0KLQot
SW50UmVjdCBnZXRDbGlwQm91bmRzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNv
bnRleHQpCi17Ci0gICAgRDJEMV9TSVpFX0YgY2xpcFNpemU7Ci0gICAgaWYgKGF1dG8gY2xpcExh
eWVyID0gcGxhdGZvcm1Db250ZXh0LmNsaXBMYXllcigpKQotICAgICAgICBjbGlwU2l6ZSA9IGNs
aXBMYXllci0+R2V0U2l6ZSgpOwotICAgIGVsc2UKLSAgICAgICAgY2xpcFNpemUgPSBwbGF0Zm9y
bUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkdldFNpemUoKTsKLQotICAgIEZsb2F0UmVjdCBjbGlw
Qm91bmRzKEludFBvaW50KCksIGNsaXBTaXplKTsKLQotICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KGNsaXBCb3VuZHMpOwotfQotCi1GbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLQotICAgIHJldHVybiByZWN0OwotfQotCi1i
b29sIGlzQWNjZWxlcmF0ZWRDb250ZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQpCi17Ci0gICAgYXV0byByZW5kZXJQcm9wZXJ0aWVzID0gRDJEMTo6UmVuZGVyVGFy
Z2V0UHJvcGVydGllcygpOwotICAgIHJlbmRlclByb3BlcnRpZXMudHlwZSA9IEQyRDFfUkVOREVS
X1RBUkdFVF9UWVBFX0hBUkRXQVJFOwotICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQucmVuZGVy
VGFyZ2V0KCktPklzU3VwcG9ydGVkKCZyZW5kZXJQcm9wZXJ0aWVzKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgU3RhdGUKLQotRmlsbFNvdXJjZTo6RmlsbFNvdXJjZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICA6IGds
b2JhbEFscGhhKHN0YXRlLmFscGhhKQotICAgICwgY29sb3Ioc3RhdGUuZmlsbENvbG9yKQotICAg
ICwgZmlsbFJ1bGUoc3RhdGUuZmlsbFJ1bGUpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQuaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwotICAgIGF1dG8mIHBsYXRmb3JtQ29udGV4dCA9ICpjb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpOwotCi0gICAgaWYgKHN0YXRlLmZpbGxQYXR0ZXJuKSB7Ci0gICAgICAg
IEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNOyAvLyBGSVhNRTogVGhpcyBpc24ndCByZWFs
bHkgbmVlZGVkIG9uIFdpbmRvd3MKLSAgICAgICAgYnJ1c2ggPSBzdGF0ZS5maWxsUGF0dGVybi0+
Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnRleHQsIHN0YXRlLmFscGhhLCB1c2VyVG9CYXNlQ1RN
KTsKLSAgICB9IGVsc2UgaWYgKHN0YXRlLmZpbGxHcmFkaWVudCAmJiAhc3RhdGUuZmlsbEdyYWRp
ZW50LT5zdG9wcygpLmlzRW1wdHkoKSkKLSAgICAgICAgYnJ1c2ggPSBzdGF0ZS5maWxsR3JhZGll
bnQtPmNyZWF0ZUJydXNoKHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBicnVzaCA9IHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihjb2xvcik7
Ci19Ci0KLVN0cm9rZVNvdXJjZTo6U3Ryb2tlU291cmNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgIDogZ2xvYmFs
QWxwaGEoc3RhdGUuYWxwaGEpCi0gICAgLCB0aGlja25lc3Moc3RhdGUuc3Ryb2tlVGhpY2tuZXNz
KQotICAgICwgY29sb3Ioc3RhdGUuc3Ryb2tlQ29sb3IpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQu
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIGF1dG8mIHBsYXRmb3JtQ29udGV4dCA9ICpjb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgaWYgKHN0YXRlLnN0cm9rZVBhdHRlcm4pIHsK
LSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBUaGlzIGlz
bid0IHJlYWxseSBuZWVkZWQgb24gV2luZG93cwotICAgICAgICBicnVzaCA9IHN0YXRlLnN0cm9r
ZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb250ZXh0LCBzdGF0ZS5hbHBoYSwgdXNl
clRvQmFzZUNUTSk7Ci0gICAgfSBlbHNlIGlmIChzdGF0ZS5zdHJva2VHcmFkaWVudCkKLSAgICAg
ICAgYnJ1c2ggPSBzdGF0ZS5zdHJva2VHcmFkaWVudC0+Y3JlYXRlQnJ1c2gocGxhdGZvcm1Db250
ZXh0LnJlbmRlclRhcmdldCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGJydXNoID0gcGxhdGZvcm1D
b250ZXh0LmJydXNoV2l0aENvbG9yKGNvbG9yKTsKLX0KLQotU2hhZG93U3RhdGU6OlNoYWRvd1N0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKLSAgICA6IG9mZnNldChzdGF0
ZS5zaGFkb3dPZmZzZXQpCi0gICAgLCBibHVyKHN0YXRlLnNoYWRvd0JsdXIpCi0gICAgLCBjb2xv
cihzdGF0ZS5zaGFkb3dDb2xvcikKLSAgICAsIGlnbm9yZVRyYW5zZm9ybXMoc3RhdGUuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMpCi0gICAgLCBnbG9iYWxBbHBoYShzdGF0ZS5hbHBoYSkKLSAgICAs
IGdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yKHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yKQotewotfQot
Ci1ib29sIFNoYWRvd1N0YXRlOjppc1Zpc2libGUoKSBjb25zdAotewotICAgIHJldHVybiBjb2xv
ci5pc1Zpc2libGUoKSAmJiAob2Zmc2V0LndpZHRoKCkgfHwgb2Zmc2V0LmhlaWdodCgpIHx8IGJs
dXIpOwotfQotCi1ib29sIFNoYWRvd1N0YXRlOjppc1JlcXVpcmVkKFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpIGNvbnN0Ci17Ci0gICAgLy8gV2UgY2FuJ3QgYXZvaWQg
U2hhZG93Qmx1ciBpZiB0aGUgc2hhZG93IGhhcyBibHVyLgotICAgIGlmIChjb2xvci5pc1Zpc2li
bGUoKSAmJiBibHVyKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFdlIGNhbiBhdm9p
ZCBTaGFkb3dCbHVyIGFuZCBvcHRpbWl6ZSwgc2luY2Ugd2UncmUgbm90IGRyYXdpbmcgb24gYQot
ICAgIC8vIGNhbnZhcyBhbmQgYm94IHNoYWRvd3MgYXJlIGFmZmVjdGVkIGJ5IHRoZSB0cmFuc2Zv
cm1hdGlvbiBtYXRyaXguCi0gICAgaWYgKCFpZ25vcmVUcmFuc2Zvcm1zKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAvLyBXZSBjYW4gYXZvaWQgU2hhZG93Qmx1ciwgc2luY2UgdGhlcmUg
YXJlIG5vIHRyYW5zZm9ybWF0aW9ucyB0byBhcHBseSB0byB0aGUgY2FudmFzLgotICAgIGlmIChT
dGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCkuaXNJZGVudGl0eSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAvLyBPdGhlcndpc2UsIG5vIGNoYW5jZSBhdm9pZGluZyBTaGFkb3dC
bHVyLgotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIHNldExpbmVDYXAoUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgTGluZUNhcCBsaW5lQ2FwKQotewotICAgIEQy
RDFfQ0FQX1NUWUxFIGNhcFN0eWxlID0gRDJEMV9DQVBfU1RZTEVfRkxBVDsKLSAgICBzd2l0Y2gg
KGxpbmVDYXApIHsKLSAgICBjYXNlIExpbmVDYXA6OlJvdW5kOgotICAgICAgICBjYXBTdHlsZSA9
IEQyRDFfQ0FQX1NUWUxFX1JPVU5EOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExpbmVDYXA6
OlNxdWFyZToKLSAgICAgICAgY2FwU3R5bGUgPSBEMkQxX0NBUF9TVFlMRV9TUVVBUkU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUNhcDo6QnV0dDoKLSAgICBkZWZhdWx0OgotICAgICAg
ICBjYXBTdHlsZSA9IEQyRDFfQ0FQX1NUWUxFX0ZMQVQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRMaW5lQ2FwKGNhcFN0eWxlKTsKLX0KLQotdm9pZCBz
ZXRMaW5lRGFzaChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBwbGF0Zm9ybUNv
bnRleHQuc2V0RGFzaGVzKGRhc2hlcyk7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNldERhc2hPZmZz
ZXQoZGFzaE9mZnNldCk7Ci19Ci0KLXZvaWQgc2V0TGluZUpvaW4oUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgRDJEMV9M
SU5FX0pPSU4gam9pblN0eWxlID0gRDJEMV9MSU5FX0pPSU5fTUlURVI7Ci0gICAgc3dpdGNoIChs
aW5lSm9pbikgewotICAgIGNhc2UgTGluZUpvaW46OlJvdW5kOgotICAgICAgICBqb2luU3R5bGUg
PSBEMkQxX0xJTkVfSk9JTl9ST1VORDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lSm9p
bjo6QmV2ZWw6Ci0gICAgICAgIGpvaW5TdHlsZSA9IEQyRDFfTElORV9KT0lOX0JFVkVMOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIExpbmVKb2luOjpNaXRlcjoKLSAgICBkZWZhdWx0OgotICAg
ICAgICBqb2luU3R5bGUgPSBEMkQxX0xJTkVfSk9JTl9NSVRFUjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldExpbmVKb2luKGpvaW5TdHlsZSk7Ci19Ci0K
LXZvaWQgc2V0TWl0ZXJMaW1pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250
ZXh0LCBmbG9hdCBtaXRlckxpbWl0KQotewotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRNaXRlckxp
bWl0KG1pdGVyTGltaXQpOwotfQotCi12b2lkIGZpbGxSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmlsbFNv
dXJjZSYgZmlsbFNvdXJjZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAg
IGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIHBs
YXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBkcmF3V2l0aFNoYWRvdyhw
bGF0Zm9ybUNvbnRleHQsIHJlY3QsIHNoYWRvd1N0YXRlLCBbJnBsYXRmb3JtQ29udGV4dCwgcmVj
dCwgJmZpbGxTb3VyY2VdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAg
ICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7Ci0gICAgICAgIHJlbmRlclRhcmdl
dC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgZmlsbFNvdXJjZS5icnVzaC5nZXQoKSk7Ci0gICAg
fSk7Ci19Ci0KLXZvaWQgZmlsbFJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3Jt
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0
IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygx
LCBfX0xJTkVfXyk7Ci0gICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCByZWN0LCBz
aGFkb3dTdGF0ZSwgWyZwbGF0Zm9ybUNvbnRleHQsIGNvbG9yLCByZWN0XShJRDJEMVJlbmRlclRh
cmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3Qg
PSByZWN0OwotICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIHBs
YXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihjb2xvcikuZ2V0KCkpOwotICAgIH0pOwotfQot
Ci12b2lkIGZpbGxSb3VuZGVkUmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1D
b250ZXh0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBhdXRvIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0
VGFncygxLCBfX0xJTkVfXyk7Ci0KLSAgICBjb25zdCBGbG9hdFJlY3QmIHIgPSByZWN0LnJlY3Qo
KTsKLSAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWkgPSByZWN0LnJhZGlp
KCk7Ci0gICAgYm9vbCBlcXVhbFdpZHRocyA9IChyYWRpaS50b3BMZWZ0KCkud2lkdGgoKSA9PSBy
YWRpaS50b3BSaWdodCgpLndpZHRoKCkgJiYgcmFkaWkudG9wUmlnaHQoKS53aWR0aCgpID09IHJh
ZGlpLmJvdHRvbUxlZnQoKS53aWR0aCgpICYmIHJhZGlpLmJvdHRvbUxlZnQoKS53aWR0aCgpID09
IHJhZGlpLmJvdHRvbVJpZ2h0KCkud2lkdGgoKSk7Ci0gICAgYm9vbCBlcXVhbEhlaWdodHMgPSAo
cmFkaWkudG9wTGVmdCgpLmhlaWdodCgpID09IHJhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSAm
JiByYWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCkgPT0gcmFkaWkudG9wUmlnaHQoKS5oZWlnaHQo
KSAmJiByYWRpaS50b3BSaWdodCgpLmhlaWdodCgpID09IHJhZGlpLmJvdHRvbVJpZ2h0KCkuaGVp
Z2h0KCkpOwotICAgIGJvb2wgaGFzQ3VzdG9tRmlsbCA9IGZhbHNlOyAvLyBGSVhNRTogV2h5IGlz
bid0IGEgRmlsbFNvdXJjZSBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbj8KLSAgICBpZiAoIWhhc0N1
c3RvbUZpbGwgJiYgZXF1YWxXaWR0aHMgJiYgZXF1YWxIZWlnaHRzICYmIHJhZGlpLnRvcExlZnQo
KS53aWR0aCgpICogMiA9PSByLndpZHRoKCkgJiYgcmFkaWkudG9wTGVmdCgpLmhlaWdodCgpICog
MiA9PSByLmhlaWdodCgpKSB7Ci0gICAgICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29udGV4
dCwgciwgc2hhZG93U3RhdGUsIFsmcGxhdGZvcm1Db250ZXh0LCBjb2xvciwgcmVjdCwgcmFkaWks
IHJdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgICAgIGF1dG8g
cm91bmRlZFJlY3QgPSBEMkQxOjpSb3VuZGVkUmVjdChyLCByYWRpaS50b3BMZWZ0KCkud2lkdGgo
KSwgcmFkaWkudG9wTGVmdCgpLmhlaWdodCgpKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldC0+
RmlsbFJvdW5kZWRSZWN0YW5nbGUoJnJvdW5kZWRSZWN0LCBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hX
aXRoQ29sb3IoY29sb3IpLmdldCgpKTsKLSAgICAgICAgfSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgUGF0aCBwYXRoOwotICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwotICAgICAg
ICBmaWxsUGF0aChwbGF0Zm9ybUNvbnRleHQsIHBhdGgsIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0g
ICAgfQotfQotCi12b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBGaWxsU291cmNlJiBmaWxsU291
cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCi17Ci0gICAgYXV0byBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0gICAgcGxhdGZvcm1Db250ZXh0
LnNldFRhZ3MoMSwgX19MSU5FX18pOwotCi0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkUmVj
dChyZWN0KTsKLQotICAgIGlmICghcm91bmRlZEhvbGVSZWN0LnJhZGlpKCkuaXNaZXJvKCkpCi0g
ICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3Qocm91bmRlZEhvbGVSZWN0KTsKLSAgICBlbHNlCi0g
ICAgICAgIHBhdGguYWRkUmVjdChyb3VuZGVkSG9sZVJlY3QucmVjdCgpKTsKLQotICAgIEZpbGxT
b3VyY2UgZmlsbFdpdGhIb2xlU291cmNlID0gZmlsbFNvdXJjZTsKLSAgICBmaWxsV2l0aEhvbGVT
b3VyY2UuZmlsbFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZDsKLQotICAgIGZpbGxQYXRoKHBsYXRm
b3JtQ29udGV4dCwgcGF0aCwgZmlsbFdpdGhIb2xlU291cmNlLCBzaGFkb3dTdGF0ZSk7Ci19Ci0K
LXZvaWQgZmlsbFJlY3RXaXRoR3JhZGllbnQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRm
b3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBJRDJEMUJydXNoKiBncmFkaWVudCkK
LXsKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgZHJhd1dp
dGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBbJnBsYXRmb3JtQ29udGV4dCwgcmVjdCwgJmdy
YWRpZW50XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIGNvbnN0
IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwotICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxS
ZWN0YW5nbGUoJmQyZFJlY3QsIGdyYWRpZW50KTsKLSAgICB9KTsKLX0KLQotdm9pZCBmaWxsUGF0
aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBQYXRoJiBw
YXRoLCBjb25zdCBGaWxsU291cmNlJiBmaWxsU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hh
ZG93U3RhdGUpCi17Ci0gICAgcGF0aC5jbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJF
X0VORF9PUEVOKTsKLQotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJU
YXJnZXQoKTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLQot
ICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+IHBhdGhUb0ZpbGw7Ci0gICAgcGF0aC5jcmVh
dGVHZW9tZXRyeVdpdGhGaWxsTW9kZShmaWxsU291cmNlLmZpbGxSdWxlLCBwYXRoVG9GaWxsKTsK
LQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBGdW5jdGlv
bjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+IGRyYXdGdW5jdGlvbiA9IFsmcGxhdGZvcm1Db250
ZXh0LCAmcGF0aFRvRmlsbCwgJmZpbGxTb3VyY2VdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJU
YXJnZXQpIHsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsR2VvbWV0cnkocGF0aFRvRmlsbC5n
ZXQoKSwgZmlsbFNvdXJjZS5icnVzaC5nZXQoKSk7Ci0gICAgfTsKLQotICAgIGlmIChzaGFkb3dT
dGF0ZS5pc1Zpc2libGUoKSkgewotICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcGF0
aC5mYXN0Qm91bmRpbmdSZWN0KCk7Ci0gICAgICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29u
dGV4dCwgYm91bmRpbmdSZWN0LCBzaGFkb3dTdGF0ZSwgV1RGTW92ZShkcmF3RnVuY3Rpb24pKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBX
VEZNb3ZlKGRyYXdGdW5jdGlvbikpOwotfQotCi12b2lkIGZpbGxQYXRoKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IENvbG9y
JiBjb2xvciwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAgIGF1dG8gY29u
dGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIHBsYXRmb3JtQ29u
dGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLQotICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5R3Jv
dXA+IHBhdGhUb0ZpbGw7Ci0gICAgcGF0aC5jcmVhdGVHZW9tZXRyeVdpdGhGaWxsTW9kZShXaW5k
UnVsZTo6RXZlbk9kZCwgcGF0aFRvRmlsbCk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFn
cygxLCBfX0xJTkVfXyk7Ci0KLSAgICBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+
IGRyYXdGdW5jdGlvbiA9IFsmcGxhdGZvcm1Db250ZXh0LCAmcGF0aFRvRmlsbCwgY29sb3JdKElE
MkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5G
aWxsR2VvbWV0cnkocGF0aFRvRmlsbC5nZXQoKSwgcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENv
bG9yKGNvbG9yKS5nZXQoKSk7Ci0gICAgfTsKLQotICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2li
bGUoKSkgewotICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcGF0aC5mYXN0Qm91bmRp
bmdSZWN0KCk7Ci0gICAgICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgYm91bmRp
bmdSZWN0LCBzaGFkb3dTdGF0ZSwgV1RGTW92ZShkcmF3RnVuY3Rpb24pKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBXVEZNb3ZlKGRyYXdG
dW5jdGlvbikpOwotfQotCi12b2lkIHN0cm9rZVJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQm
IHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgs
IGNvbnN0IFN0cm9rZVNvdXJjZSYgc3Ryb2tlU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hh
ZG93U3RhdGUpCi17Ci0gICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCByZWN0LCBz
aGFkb3dTdGF0ZSwgWyZwbGF0Zm9ybUNvbnRleHQsICZzdHJva2VTb3VyY2UsIHJlY3QsIGxpbmVX
aWR0aF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICBwbGF0Zm9y
bUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgICAgIGNvbnN0IEQyRDFfUkVDVF9G
IGQyZFJlY3QgPSByZWN0OwotICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdSZWN0YW5nbGUoJmQy
ZFJlY3QsIHN0cm9rZVNvdXJjZS5icnVzaC5nZXQoKSwgbGluZVdpZHRoLCBwbGF0Zm9ybUNvbnRl
eHQuc3Ryb2tlU3R5bGUoKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgc3Ryb2tlUGF0aChQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBQYXRoJiBwYXRoLCBjb25z
dCBTdHJva2VTb3VyY2UmIHN0cm9rZVNvdXJjZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0
YXRlKQotewotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQo
KTsKLSAgICAKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0KLSAg
ICBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+IGRyYXdGdW5jdGlvbiA9IFsmcGxh
dGZvcm1Db250ZXh0LCAmcGF0aCwgJnN0cm9rZVNvdXJjZV0oSUQyRDFSZW5kZXJUYXJnZXQqIHJl
bmRlclRhcmdldCkgewotICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdHZW9tZXRyeShwYXRoLnBs
YXRmb3JtUGF0aCgpLCBzdHJva2VTb3VyY2UuYnJ1c2guZ2V0KCksIHN0cm9rZVNvdXJjZS50aGlj
a25lc3MsIHBsYXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZSgpKTsKLSAgICB9OwotCi0gICAgaWYg
KHNoYWRvd1N0YXRlLmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIGF1dG8gYm91bmRpbmdSZWN0ID0g
cGF0aC5mYXN0Qm91bmRpbmdSZWN0Rm9yU3Ryb2tlKHBsYXRmb3JtQ29udGV4dCk7Ci0gICAgICAg
IGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgYm91bmRpbmdSZWN0LCBzaGFkb3dTdGF0
ZSwgV1RGTW92ZShkcmF3RnVuY3Rpb24pKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZHJhd1dpdGhv
dXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBXVEZNb3ZlKGRyYXdGdW5jdGlvbikpOwotfQotCi12
b2lkIGRyYXdQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNv
bnN0IFBhdGgmIHBhdGgsIGNvbnN0IFN0cm9rZVNvdXJjZSYgc3Ryb2tlU291cmNlLCBjb25zdCBT
aGFkb3dTdGF0ZSYpCi17Ci0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRl
clRhcmdldCgpOwotCi0gICAgcGF0aC5jbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJF
X0VORF9PUEVOKTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsK
LQotICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9ybUNvbnRl
eHQsICZzdHJva2VTb3VyY2UsICZwYXRoXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0
KSB7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RHJhd0dlb21ldHJ5KHBhdGgucGxhdGZvcm1QYXRo
KCksIHN0cm9rZVNvdXJjZS5icnVzaC5nZXQoKSwgc3Ryb2tlU291cmNlLnRoaWNrbmVzcywgcGxh
dGZvcm1Db250ZXh0LnN0cm9rZVN0eWxlKCkpOwotICAgIH0pOwotCi0gICAgZmx1c2gocGxhdGZv
cm1Db250ZXh0KTsKLX0KLQotc3RhdGljIHZvaWQgZHJhd1dpdGhTaGFkb3dIZWxwZXIoSUQyRDFS
ZW5kZXJUYXJnZXQqIGNvbnRleHQsIElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJn
ZXQsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdSZWN0LCBjb25zdCBDb2xvciYgc2hhZG93Q29s
b3IsIGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dCbHVyKQotewot
ICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY3VycmVudENhbnZhcyA9IERpcmVjdDJEOjpjcmVhdGVC
aXRtYXBDb3B5RnJvbUNvbnRleHQoYml0bWFwVGFyZ2V0KTsKLSAgICBpZiAoIWN1cnJlbnRDYW52
YXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IHNo
YWRvd0RldmljZUNvbnRleHQ7Ci0gICAgSFJFU1VMVCBociA9IGJpdG1hcFRhcmdldC0+UXVlcnlJ
bnRlcmZhY2UoJnNoYWRvd0RldmljZUNvbnRleHQpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NF
RURFRChocikpOwotCi0gICAgLy8gQ3JlYXRlIHRoZSBzaGFkb3cgZWZmZWN0Ci0gICAgQ09NUHRy
PElEMkQxRWZmZWN0PiBzaGFkb3dFZmZlY3Q7Ci0gICAgaHIgPSBzaGFkb3dEZXZpY2VDb250ZXh0
LT5DcmVhdGVFZmZlY3QoQ0xTSURfRDJEMVNoYWRvdywgJnNoYWRvd0VmZmVjdCk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBzaGFkb3dFZmZlY3QtPlNldElucHV0
KDAsIGN1cnJlbnRDYW52YXMuZ2V0KCkpOwotICAgIHNoYWRvd0VmZmVjdC0+U2V0VmFsdWUoRDJE
MV9TSEFET1dfUFJPUF9DT0xPUiwgc3RhdGljX2Nhc3Q8RDJEMV9WRUNUT1JfNEY+KHNoYWRvd0Nv
bG9yKSk7Ci0KLSAgICBmbG9hdCBibHVyRGV2aWF0aW9uID0gMC41ICogc2hhZG93Qmx1cjsKLSAg
ICBzaGFkb3dFZmZlY3QtPlNldFZhbHVlKEQyRDFfU0hBRE9XX1BST1BfQkxVUl9TVEFOREFSRF9E
RVZJQVRJT04sIGJsdXJEZXZpYXRpb24pOwotCi0gICAgQ09NUHRyPElEMkQxRWZmZWN0PiBzaGFk
b3dUcmFuc2Zvcm1FZmZlY3Q7Ci0gICAgaHIgPSBzaGFkb3dEZXZpY2VDb250ZXh0LT5DcmVhdGVF
ZmZlY3QoQ0xTSURfRDJEMTJEQWZmaW5lVHJhbnNmb3JtLCAmc2hhZG93VHJhbnNmb3JtRWZmZWN0
KTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIHNoYWRvd1RyYW5z
Zm9ybUVmZmVjdC0+U2V0SW5wdXRFZmZlY3QoMCwgc2hhZG93RWZmZWN0LmdldCgpKTsKLQotICAg
IC8vIE11c3QgZmxpcCB0aGUgYXhpcyBmb3IgdGhlIHNoYWRvdyBvZmZzZXQsIHNpbmNlIERpcmVj
dDJEJ3MgWSBheGlzIGlzIGludmVydGVkLgotICAgIGF1dG8gc2hhZG93VHJhbnNsYXRpb24gPSBE
MkQxOjpNYXRyaXgzeDJGOjpUcmFuc2xhdGlvbihzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRv
d09mZnNldC5oZWlnaHQoKSk7Ci0gICAgc2hhZG93VHJhbnNmb3JtRWZmZWN0LT5TZXRWYWx1ZShE
MkQxXzJEQUZGSU5FVFJBTlNGT1JNX1BST1BfVFJBTlNGT1JNX01BVFJJWCwgc2hhZG93VHJhbnNs
YXRpb24pOwotCi0gICAgQ09NUHRyPElEMkQxRWZmZWN0PiBjb21wb3NpdG9yOwotICAgIGhyID0g
c2hhZG93RGV2aWNlQ29udGV4dC0+Q3JlYXRlRWZmZWN0KENMU0lEX0QyRDFDb21wb3NpdGUsICZj
b21wb3NpdG9yKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGNv
bXBvc2l0b3ItPlNldElucHV0RWZmZWN0KDAsIHNoYWRvd1RyYW5zZm9ybUVmZmVjdC5nZXQoKSk7
Ci0gICAgY29tcG9zaXRvci0+U2V0SW5wdXQoMSwgY3VycmVudENhbnZhcy5nZXQoKSk7Ci0KLSAg
ICBzaGFkb3dEZXZpY2VDb250ZXh0LT5CZWdpbkRyYXcoKTsKLSAgICBzaGFkb3dEZXZpY2VDb250
ZXh0LT5DbGVhcihEMkQxOjpDb2xvckYoMCwgMCwgMCwgMCkpOwotICAgIHNoYWRvd0RldmljZUNv
bnRleHQtPkRyYXdJbWFnZShjb21wb3NpdG9yLmdldCgpKTsKLSAgICBociA9IHNoYWRvd0Rldmlj
ZUNvbnRleHQtPkVuZERyYXcoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsK
LQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotICAgIGhyID0gYml0bWFwVGFyZ2V0
LT5HZXRCaXRtYXAoJmJpdG1hcCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0KLSAgICBJbnRTaXplIHBpeGVsU2l6ZSA9IGNvbnRleHQtPkdldFBpeGVsU2l6ZSgpOwotICAg
IENPTVB0cjxJRDJEMUJpdG1hcD4gY3JvcHBlZCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXAoYml0
bWFwVGFyZ2V0LCBwaXhlbFNpemUpOwotICAgIGlmICghY3JvcHBlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byBzY2FsZUZhY3RvciA9IGJpdG1hcFJlc29sdXRpb24oY29udGV4dCk7Ci0K
LSAgICBGbG9hdFJlY3Qgc2NhbGVkQm91bmRpbmdSZWN0KGJvdW5kaW5nUmVjdCk7Ci0gICAgc2Nh
bGVkQm91bmRpbmdSZWN0LnNjYWxlKHNjYWxlRmFjdG9yLndpZHRoKCksIHNjYWxlRmFjdG9yLmhl
aWdodCgpKTsKLQotICAgIC8vIFRha2UgdGhlIG1hZ25pdHVkZSBvZiB0aGUgb2Zmc2V0LiBJZiB0
aGUgb3JpZ2luIHdhcyBvdXRzaWRlIHRoZSBkcmF3aW5nIGNvbnRleHQsIHdlIHN0cmV0Y2hlZCB0
byBpbmNsdWRlIHRob3NlIHBvaW50cywKLSAgICAvLyBhbmQgc28gd2UgbmVlZCB0byBjcm9wIHRo
ZW0gb3V0LiBJZiB0aGUgb3JpZ2luIHdhcyBpbnNpZGUsIHdlIHdhbnQgdG8gaG9ub3IgdGhlIG9m
ZnNldC4KLSAgICBpbnQgeCA9IGNsYW1wVG88aW50PihzdGQ6OmFicyhzY2FsZWRCb3VuZGluZ1Jl
Y3QueCgpKSk7Ci0gICAgaW50IHkgPSBjbGFtcFRvPGludD4oc3RkOjphYnMoc2NhbGVkQm91bmRp
bmdSZWN0LnkoKSkpOwotICAgIGludCB3aWR0aCA9IGNsYW1wVG88aW50PihzY2FsZWRCb3VuZGlu
Z1JlY3Qud2lkdGgoKSk7Ci0gICAgaW50IGhlaWdodCA9IGNsYW1wVG88aW50PihzY2FsZWRCb3Vu
ZGluZ1JlY3QuaGVpZ2h0KCkpOwotCi0gICAgSW50UmVjdCBvdXRwdXRSZWN0KEludFBvaW50KHgs
IHkpLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKLSAgICBJbnRSZWN0IGRlc3RDb250ZXh0UmVj
dChJbnRQb2ludCgpLCBwaXhlbFNpemUpOwotICAgIGlmIChvdXRwdXRSZWN0LmludGVyc2VjdHMo
ZGVzdENvbnRleHRSZWN0KSkKLSAgICAgICAgb3V0cHV0UmVjdC5pbnRlcnNlY3QoZGVzdENvbnRl
eHRSZWN0KTsKLQotICAgIEQyRDFfUkVDVF9VIGNyb3BSZWN0ID0gb3V0cHV0UmVjdDsKLSAgICBh
dXRvIHRhcmdldFBvaW50ID0gRDJEMTo6UG9pbnQyVSgpOwotICAgIGNyb3BwZWQtPkNvcHlGcm9t
Qml0bWFwKCZ0YXJnZXRQb2ludCwgYml0bWFwLmdldCgpLCAmY3JvcFJlY3QpOwotCi0gICAgY29u
dGV4dC0+RHJhd0JpdG1hcChjcm9wcGVkLmdldCgpKTsKLX0KLQotdm9pZCBkcmF3V2l0aFNoYWRv
dyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBGbG9hdFJlY3QgYm91
bmRpbmdSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUsIEZ1bmN0aW9uPHZvaWQo
SUQyRDFSZW5kZXJUYXJnZXQqKT4mJiBkcmF3Q29tbWFuZHMpCi17Ci0gICAgaWYgKCFzaGFkb3dT
dGF0ZS5pc1Zpc2libGUoKSkgewotICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNv
bnRleHQsIFdURk1vdmUoZHJhd0NvbW1hbmRzKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBwbGF0Zm9ybUNvbnRleHQubm90aWZ5UHJlRHJhd09ic2VydmVyKCk7Ci0KLSAgICBhdXRv
KiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0gICAgRmxvYXRT
aXplIHJlbmRlclRhcmdldFNpemUgPSBjb250ZXh0LT5HZXRTaXplKCk7Ci0gICAgY29uc3QgRmxv
YXRSZWN0IGNvbnRleHRSZWN0KEZsb2F0UG9pbnQoKSwgcmVuZGVyVGFyZ2V0U2l6ZSk7Ci0gICAg
RmxvYXRSZWN0IHdvcmtpbmdDb250ZXh0UmVjdChjb250ZXh0UmVjdCk7Ci0KLSAgICBpZiAoYm91
bmRpbmdSZWN0LmlzSW5maW5pdGUoKSkKLSAgICAgICAgYm91bmRpbmdSZWN0ID0gd29ya2luZ0Nv
bnRleHRSZWN0OwotCi0gICAgaWYgKCFjb250ZXh0UmVjdC5jb250YWlucyhib3VuZGluZ1JlY3Qp
KQotICAgICAgICB3b3JraW5nQ29udGV4dFJlY3QudW5pdGUoYm91bmRpbmdSZWN0KTsKLQotICAg
IHdvcmtpbmdDb250ZXh0UmVjdC5leHBhbmQoc3RkOjphYnMoc2hhZG93U3RhdGUub2Zmc2V0Lndp
ZHRoKCkpICsgc2hhZG93U3RhdGUuYmx1ciwgc3RkOjphYnMoc2hhZG93U3RhdGUub2Zmc2V0Lmhl
aWdodCgpKSArIHNoYWRvd1N0YXRlLmJsdXIpOwotCi0gICAgYXV0byBzY2FsZUZhY3RvciA9IGJp
dG1hcFJlc29sdXRpb24oY29udGV4dCk7Ci0KLSAgICB3b3JraW5nQ29udGV4dFJlY3Quc2NhbGUo
c2NhbGVGYWN0b3IpOwotCi0gICAgSW50U2l6ZSBwaXhlbERpbWVuc2lvbnMoY2xhbXBUbzxpbnQ+
KHdvcmtpbmdDb250ZXh0UmVjdC53aWR0aCgpKSwgY2xhbXBUbzxpbnQ+KHdvcmtpbmdDb250ZXh0
UmVjdC5oZWlnaHQoKSkpOwotCi0gICAgLy8gUmVuZGVyIHRoZSBjdXJyZW50IGdlb21ldHJ5IHRv
IGEgYml0bWFwIGNvbnRleHQKLSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJp
dG1hcFRhcmdldCA9IGNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShwaXhlbERpbWVuc2lv
bnMsIGNvbnRleHQpOwotCi0gICAgRDJEMV9NQVRSSVhfM1gyX0YgY3VycmVudFRyYW5zZm9ybTsK
LSAgICBiaXRtYXBUYXJnZXQtPkdldFRyYW5zZm9ybSgmY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAg
ICBpZiAoIWNvbnRleHRSZWN0LmNvbnRhaW5zKGJvdW5kaW5nUmVjdC5sb2NhdGlvbigpKSkgewot
ICAgICAgICBhdXRvIHRyYW5zbGF0aW9uID0gRDJEMTo6TWF0cml4M3gyRjo6VHJhbnNsYXRpb24o
LWJvdW5kaW5nUmVjdC5sb2NhdGlvbigpLngoKSwgLWJvdW5kaW5nUmVjdC5sb2NhdGlvbigpLnko
KSk7Ci0gICAgICAgIGJpdG1hcFRhcmdldC0+U2V0VHJhbnNmb3JtKHRyYW5zbGF0aW9uICogY3Vy
cmVudFRyYW5zZm9ybSk7Ci0gICAgfQotCi0gICAgYml0bWFwVGFyZ2V0LT5CZWdpbkRyYXcoKTsK
LSAgICBkcmF3Q29tbWFuZHMoYml0bWFwVGFyZ2V0LmdldCgpKTsKLSAgICBIUkVTVUxUIGhyID0g
Yml0bWFwVGFyZ2V0LT5FbmREcmF3KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0KLSAgICBiaXRtYXBUYXJnZXQtPlNldFRyYW5zZm9ybShjdXJyZW50VHJhbnNmb3JtKTsK
LQotICAgIGRyYXdXaXRoU2hhZG93SGVscGVyKGNvbnRleHQsIGJpdG1hcFRhcmdldC5nZXQoKSwg
Ym91bmRpbmdSZWN0LCBzaGFkb3dTdGF0ZS5jb2xvciwgc2hhZG93U3RhdGUub2Zmc2V0LCBzaGFk
b3dTdGF0ZS5ibHVyKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQubm90aWZ5UG9zdERyYXdPYnNlcnZl
cigpOwotfQotCi12b2lkIGRyYXdXaXRob3V0U2hhZG93KFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
JiBwbGF0Zm9ybUNvbnRleHQsIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4mJiBk
cmF3Q29tbWFuZHMpCi17Ci0gICAgcGxhdGZvcm1Db250ZXh0Lm5vdGlmeVByZURyYXdPYnNlcnZl
cigpOwotICAgIGRyYXdDb21tYW5kcyhwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwot
ICAgIHBsYXRmb3JtQ29udGV4dC5ub3RpZnlQb3N0RHJhd09ic2VydmVyKCk7Ci19Ci0KLXZvaWQg
Y2xlYXJSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRl
eHQsIFsmcGxhdGZvcm1Db250ZXh0LCByZWN0XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFy
Z2V0KSB7Ci0gICAgICAgIEZsb2F0UmVjdCByZW5kZXJUYXJnZXRSZWN0KEZsb2F0UG9pbnQoKSwg
cmVuZGVyVGFyZ2V0LT5HZXRTaXplKCkpOwotCi0gICAgICAgIEQyRDE6Ok1hdHJpeDN4MkYgbWF0
cml4OwotICAgICAgICByZW5kZXJUYXJnZXQtPkdldFRyYW5zZm9ybSgmbWF0cml4KTsKLQotICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtKG1hdHJpeCk7Ci0KLSAgICAgICAgRmxvYXRS
ZWN0IHJlY3RUb0NsZWFyKHJlY3QpOwotICAgICAgICBpZiAoIXRyYW5zZm9ybS5wcmVzZXJ2ZXNB
eGlzQWxpZ25tZW50KCkpIHsKLSAgICAgICAgICAgIENPTVB0cjxJRDJEMVJlY3RhbmdsZUdlb21l
dHJ5PiByZWN0YW5nbGU7Ci0gICAgICAgICAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0
OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVJlY3RhbmdsZUdlb21ldHJ5KHJlY3RUb0NsZWFyLCAm
cmVjdGFuZ2xlKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwot
ICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsR2VvbWV0cnkocmVjdGFuZ2xlLmdldCgpLCBw
bGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoRDJEMTo6Q29sb3JGKDAsIDAsIDAsIDApKS5n
ZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICByZWN0VG9D
bGVhciA9IHRyYW5zZm9ybS5tYXBSZWN0KHJlY3RUb0NsZWFyKTsKLQotICAgICAgICBpZiAocmVj
dFRvQ2xlYXIuY29udGFpbnMocmVuZGVyVGFyZ2V0UmVjdCkpIHsKLSAgICAgICAgICAgIHBsYXRm
b3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdl
dC0+Q2xlYXIoRDJEMTo6Q29sb3JGKDAsIDAsIDAsIDApKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9f
KTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5QdXNoQXhpc0FsaWduZWRDbGlwKHJlY3RUb0NsZWFy
LCBEMkQxX0FOVElBTElBU19NT0RFX1BFUl9QUklNSVRJVkUpOwotICAgICAgICByZW5kZXJUYXJn
ZXQtPkNsZWFyKEQyRDE6OkNvbG9yRigwLCAwLCAwLCAwKSk7Ci0gICAgICAgIHJlbmRlclRhcmdl
dC0+UG9wQXhpc0FsaWduZWRDbGlwKCk7Ci0gICAgfSk7Ci19Ci0KLQotdm9pZCBkcmF3R2x5cGhz
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZpbGxTb3Vy
Y2UmIGZpbGxTb3VyY2UsIGNvbnN0IFN0cm9rZVNvdXJjZSYgc3Ryb2tlU291cmNlLCBjb25zdCBT
aGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBG
b250JiBmb250LCBkb3VibGUgc3ludGhldGljQm9sZE9mZnNldCwgY29uc3QgVmVjdG9yPHVuc2ln
bmVkIHNob3J0PiYgZ2x5cGhzLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBob3Jpem9udGFsQWR2YW5j
ZXMsIGNvbnN0IFZlY3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiYgZ2x5cGhPZmZzZXRzLCBmbG9h
dCB4T2Zmc2V0LCBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUsIGZsb2F0IHN0
cm9rZVRoaWNrbmVzcywgY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGNvbnN0IENvbG9y
JiBzaGFkb3dDb2xvcikKLXsKLSAgICBhdXRvIHJlbmRlclRhcmdldCA9IHBsYXRmb3JtQ29udGV4
dC5yZW5kZXJUYXJnZXQoKTsKLSAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURh
dGEgPSBmb250LnBsYXRmb3JtRGF0YSgpOwotCi0gICAgUGxhdGZvcm1Db250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKHBsYXRmb3JtQ29udGV4dCk7Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiBt
YXRyaXg7Ci0gICAgcmVuZGVyVGFyZ2V0LT5HZXRUcmFuc2Zvcm0oJm1hdHJpeCk7Ci0KLSAgICAv
KgotICAgIC8vIEZJWE1FOiBHZXQgU3ludGhldGljIE9ibGlxdWUgd29ya2luZwotICAgIGlmIChw
bGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpKSB7Ci0gICAgICAgIHN0YXRpYyBmbG9hdCBz
a2V3ID0gLXRhbmYoc3ludGhldGljT2JsaXF1ZUFuZ2xlKCkgKiBwaUZsb2F0IC8gMTgwLjBmKTsK
LSAgICAgICAgYXV0byBza2V3TWF0cml4ID0gRDJEMTo6TWF0cml4M3gyRjo6U2tldyhza2V3LCAw
KTsKLSAgICAgICAgY29udGV4dC0+U2V0VHJhbnNmb3JtKG1hdHJpeCAqIHNrZXdNYXRyaXgpOwot
ICAgIH0KLSAgICAqLwotCi0gICAgUkVMRUFTRV9BU1NFUlQocGxhdGZvcm1EYXRhLmR3Rm9udCgp
KTsKLSAgICBSRUxFQVNFX0FTU0VSVChwbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpKTsKLQotICAg
IERXUklURV9HTFlQSF9SVU4gZ2x5cGhSdW47Ci0gICAgZ2x5cGhSdW4uZm9udEZhY2UgPSBwbGF0
Zm9ybURhdGEuZHdGb250RmFjZSgpOwotICAgIGdseXBoUnVuLmZvbnRFbVNpemUgPSBwbGF0Zm9y
bURhdGEuc2l6ZSgpOwotICAgIGdseXBoUnVuLmdseXBoQ291bnQgPSBnbHlwaHMuc2l6ZSgpOwot
ICAgIGdseXBoUnVuLmdseXBoSW5kaWNlcyA9IGdseXBocy5kYXRhKCk7Ci0gICAgZ2x5cGhSdW4u
Z2x5cGhBZHZhbmNlcyA9IGhvcml6b250YWxBZHZhbmNlcy5kYXRhKCk7Ci0gICAgZ2x5cGhSdW4u
Z2x5cGhPZmZzZXRzID0gbnVsbHB0cjsKLSAgICBnbHlwaFJ1bi5pc1NpZGV3YXlzID0gcGxhdGZv
cm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbDsKLSAgICBn
bHlwaFJ1bi5iaWRpTGV2ZWwgPSAwOwotCi0gICAgLyoKLSAgICAvLyBGSVhNRSgpOiBHZXQgU2hh
ZG93cyB3b3JraW5nCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBzaGFk
b3dCbHVyOwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgIGdyYXBoaWNzQ29udGV4dC5nZXRT
aGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7Ci0KLSAgICBib29s
IGhhc1NpbXBsZVNoYWRvdyA9IGdyYXBoaWNzQ29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBU
ZXh0RHJhd2luZ01vZGU6OkZpbGwgJiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmICFzaGFkb3dC
bHVyICYmICghZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgZ3Jh
cGhpY3NDb250ZXh0LmdldENUTSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkp
OwotICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpIHsKLSAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNo
YWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9p
ZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgotICAgICAgICBncmFwaGljc0NvbnRleHQu
Y2xlYXJTaGFkb3coKTsKLSAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gZ3JhcGhpY3NDb250ZXh0
LmZpbGxDb2xvcigpOwotICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xv
ci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOwot
ICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0
aCgpOwotICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVu
IHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlz
IG5lZ2F0aXZlLgotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRv
d09mZnNldC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMoKSA/IC0xIDogMSk7Ci0KLSAgICAgICAgYXV0byBzaGFkb3dCcnVzaCA9IGdyYXBoaWNzQ29u
dGV4dC5icnVzaFdpdGhDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAgICAgICBjb250ZXh0LT5E
cmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCAmZ2x5
cGhSdW4sIHNoYWRvd0JydXNoKTsKLSAgICAgICAgaWYgKGZvbnQuc3ludGhldGljQm9sZE9mZnNl
dCgpKQotICAgICAgICAgICAgY29udGV4dC0+RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50MkYoc2hh
ZG93VGV4dFggKyBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwgc2hhZG93VGV4dFkpLCAmZ2x5
cGhSdW4sIHNoYWRvd0JydXNoKTsKLSAgICB9Ci0gICAgKi8KLQotICAgIHJlbmRlclRhcmdldC0+
RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50MkYocG9pbnQueCgpLCBwb2ludC55KCkpLCAmZ2x5cGhS
dW4sIGZpbGxTb3VyY2UuYnJ1c2guZ2V0KCkpOwotICAgIC8vIGlmIChmb250LnN5bnRoZXRpY0Jv
bGRPZmZzZXQoKSkKLSAgICAvLyAgICAgY29udGV4dC0+RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50
MkYocG9pbnQueCgpICsgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSksICZn
bHlwaFJ1biwgZ3JhcGhpY3NDb250ZXh0LnNvbGlkRmlsbEJydXNoKCkpOwotCi0gICAgLy8gaWYg
KGhhc1NpbXBsZVNoYWRvdykKLSAgICAvLyAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhz
aGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKLQotICAgIHN0YXRlU2F2ZXIu
cmVzdG9yZSgpOwotICAgIHBsYXRmb3JtQ29udGV4dC5ub3RpZnlQb3N0RHJhd09ic2VydmVyKCk7
Ci19Ci0KLQotdm9pZCBkcmF3UGxhdGZvcm1JbWFnZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYg
cGxhdGZvcm1Db250ZXh0LCBJV0lDQml0bWFwKiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBvcmln
aW5hbEltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucywgZmxvYXQgZ2xv
YmFsQWxwaGEsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBhdXRvIG5h
dGl2ZUltYWdlU2l6ZSA9IGJpdG1hcFNpemUoaW1hZ2UpOwotICAgIENPTVB0cjxJRDJEMUJpdG1h
cD4gZGV2aWNlQml0bWFwOwotICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVy
VGFyZ2V0KCktPkNyZWF0ZUJpdG1hcEZyb21XaWNCaXRtYXAoaW1hZ2UsICZkZXZpY2VCaXRtYXAp
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBp
bWFnZVNpemUgPSBiaXRtYXBTaXplKGRldmljZUJpdG1hcC5nZXQoKSk7Ci0gICAgZHJhd1BsYXRm
b3JtSW1hZ2UocGxhdGZvcm1Db250ZXh0LCBkZXZpY2VCaXRtYXAuZ2V0KCksIGltYWdlU2l6ZSwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMsIGdsb2JhbEFscGhhLCBzaGFkb3dTdGF0ZSk7Ci19
Ci0KLXZvaWQgZHJhd1BsYXRmb3JtSW1hZ2UoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRm
b3JtQ29udGV4dCwgSUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucywgZmxvYXQgZ2xvYmFsQWxwaGEsIGNv
bnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBhdXRvIGJpdG1hcFNpemUgPSBp
bWFnZS0+R2V0U2l6ZSgpOwotCi0gICAgZmxvYXQgY3VyckhlaWdodCA9IG9wdGlvbnMub3JpZW50
YXRpb24oKS51c2VzV2lkdGhBc0hlaWdodCgpID8gYml0bWFwU2l6ZS53aWR0aCA6IGJpdG1hcFNp
emUuaGVpZ2h0OwotICAgIGlmIChjdXJySGVpZ2h0IDw9IHNyY1JlY3QueSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0
KCk7Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiBjdG07Ci0gICAgY29udGV4dC0+R2V0VHJhbnNm
b3JtKCZjdG0pOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybShjdG0pOwotCi0gICAg
UGxhdGZvcm1Db250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBsYXRmb3JtQ29udGV4dCk7Ci0K
LSAgICBib29sIHNob3VsZFVzZVN1YmltYWdlID0gZmFsc2U7Ci0KLSAgICAvLyBJZiB0aGUgc291
cmNlIHJlY3QgaXMgYSBzdWJwb3J0aW9uIG9mIHRoZSBpbWFnZSwgdGhlbiB3ZSBjb21wdXRlIGFu
IGluZmxhdGVkIGRlc3RpbmF0aW9uIHJlY3QgdGhhdCB3aWxsIGhvbGQgdGhlIGVudGlyZSBpbWFn
ZQotICAgIC8vIGFuZCB0aGVuIHNldCBhIGNsaXAgdG8gdGhlIHBvcnRpb24gdGhhdCB3ZSB3YW50
IHRvIGRpc3BsYXkuCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkRGVzdFJlY3QgPSBkZXN0UmVjdDsK
LQotICAgIGlmIChzcmNSZWN0LnNpemUoKSAhPSBpbWFnZVNpemUpIHsKLSAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCBpbWFnZSBzY2FsaW5nCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgfQotCi0gICAgLy8gSWYgdGhlIGltYWdlIGlzIG9ubHkgcGFydGlhbGx5IGxvYWRlZCwgdGhl
biBzaHJpbmsgdGhlIGRlc3RpbmF0aW9uIHJlY3QgdGhhdCB3ZSdyZSBkcmF3aW5nIGludG8gYWNj
b3JkaW5nbHkuCi0gICAgaWYgKCFzaG91bGRVc2VTdWJpbWFnZSAmJiBjdXJySGVpZ2h0IDwgaW1h
Z2VTaXplLmhlaWdodCgpKQotICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldEhlaWdodChhZGp1
c3RlZERlc3RSZWN0LmhlaWdodCgpICogY3VyckhlaWdodCAvIGltYWdlU2l6ZS5oZWlnaHQoKSk7
Ci0KLSAgICBTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dCwgb3B0
aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKLQotICAgIC8v
IEltYWdlT3JpZW50YXRpb24gZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKS4KLSAg
ICB0cmFuc2Zvcm0udHJhbnNsYXRlKGFkanVzdGVkRGVzdFJlY3QueCgpLCBhZGp1c3RlZERlc3RS
ZWN0LnkoKSk7Ci0gICAgY29udGV4dC0+U2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0gICAgYWRq
dXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOwotCi0gICAgaWYgKG9wdGlv
bnMub3JpZW50YXRpb24oKSAhPSBJbWFnZU9yaWVudGF0aW9uOjpOb25lKSB7Ci0gICAgICAgIGNv
bmNhdENUTShwbGF0Zm9ybUNvbnRleHQsIG9wdGlvbnMub3JpZW50YXRpb24oKS50cmFuc2Zvcm1G
cm9tRGVmYXVsdChhZGp1c3RlZERlc3RSZWN0LnNpemUoKSkpOwotICAgICAgICBpZiAob3B0aW9u
cy5vcmllbnRhdGlvbigpLnVzZXNXaWR0aEFzSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIC8vIFRo
ZSBkZXN0aW5hdGlvbiByZWN0IHdpbGwgaGF2ZSBpdCdzIHdpZHRoIGFuZCBoZWlnaHQgYWxyZWFk
eSByZXZlcnNlZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9mCi0gICAgICAgICAgICAvLyB0aGUgaW1h
Z2UsIGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3ZSBuZWVkIHRvIHJldmVy
c2UgaXQgYmFjayBoZXJlLgotICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdCA9IEZsb2F0UmVj
dChhZGp1c3RlZERlc3RSZWN0LngoKSwgYWRqdXN0ZWREZXN0UmVjdC55KCksIGFkanVzdGVkRGVz
dFJlY3QuaGVpZ2h0KCksIGFkanVzdGVkRGVzdFJlY3Qud2lkdGgoKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgZHJh
d1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBhZGp1c3RlZERlc3RSZWN0LCBzaGFkb3dTdGF0
ZSwgW2ltYWdlLCBhZGp1c3RlZERlc3RSZWN0LCBnbG9iYWxBbHBoYSwgc3JjUmVjdF0oSUQyRDFS
ZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdC
aXRtYXAoaW1hZ2UsIGFkanVzdGVkRGVzdFJlY3QsIGdsb2JhbEFscGhhLCBEMkQxX0JJVE1BUF9J
TlRFUlBPTEFUSU9OX01PREVfTElORUFSLCBzcmNSZWN0KTsKLSAgICB9KTsKLQotICAgIGlmICgh
c3RhdGVTYXZlci5kaWRTYXZlKCkpCi0gICAgICAgIGNvbnRleHQtPlNldFRyYW5zZm9ybShjdG0p
OwotfQotCi12b2lkIGRyYXdQYXR0ZXJuKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQsIENPTVB0cjxJRDJEMUJpdG1hcD4mJiB0aWxlSW1hZ2UsIGNvbnN0IEludFNpemUm
IHNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1v
ZGUgYmxlbmRNb2RlKQotewotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5k
ZXJUYXJnZXQoKTsKLSAgICBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGxh
dGZvcm1Db250ZXh0KTsKLQotICAgIGNsaXAocGxhdGZvcm1Db250ZXh0LCBkZXN0UmVjdCk7Ci0K
LSAgICBTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dCwgY29tcG9z
aXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0KLSAgICBhdXRvIGJpdG1hcEJydXNoUHJvcGVydGll
cyA9IEQyRDE6OkJpdG1hcEJydXNoUHJvcGVydGllcygpOwotICAgIGJpdG1hcEJydXNoUHJvcGVy
dGllcy5leHRlbmRNb2RlWCA9IEQyRDFfRVhURU5EX01PREVfV1JBUDsKLSAgICBiaXRtYXBCcnVz
aFByb3BlcnRpZXMuZXh0ZW5kTW9kZVkgPSBEMkQxX0VYVEVORF9NT0RFX1dSQVA7Ci0KLSAgICAv
LyBDcmVhdGUgYSBicnVzaCB0cmFuc2Zvcm1hdGlvbiBzbyB3ZSBwYWludCB1c2luZyB0aGUgc2Vj
dGlvbiBvZiB0aGUgaW1hZ2Ugd2UgY2FyZSBhYm91dC4KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJh
bnNmb3JtYXRpb24gPSBwYXR0ZXJuVHJhbnNmb3JtOwotICAgIHRyYW5zZm9ybWF0aW9uLnRyYW5z
bGF0ZShkZXN0UmVjdC5sb2NhdGlvbigpKTsKLQotICAgIGF1dG8gYnJ1c2hQcm9wZXJ0aWVzID0g
RDJEMTo6QnJ1c2hQcm9wZXJ0aWVzKCk7Ci0gICAgYnJ1c2hQcm9wZXJ0aWVzLnRyYW5zZm9ybSA9
IHRyYW5zZm9ybWF0aW9uOwotICAgIGJydXNoUHJvcGVydGllcy5vcGFjaXR5ID0gMS4wZjsKLQot
ICAgIC8vIElmIHdlIG9ubHkgd2FudCBhIHN1YnNldCBvZiB0aGUgYml0bWFwLCB3ZSBuZWVkIHRv
IGNyZWF0ZSBhIGNyb3BwZWQgYml0bWFwIGltYWdlLiBBY2NvcmRpbmcgdG8gdGhlIGRvY3VtZW50
YXRpb24sCi0gICAgLy8gdGhpcyBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYml0bWFwIG1lbW9yeS4K
LSAgICBpZiAoc2l6ZS53aWR0aCgpID4gZGVzdFJlY3Qud2lkdGgoKSB8fCBzaXplLmhlaWdodCgp
ID4gZGVzdFJlY3QuaGVpZ2h0KCkpIHsKLSAgICAgICAgZmxvYXQgZHBpWCA9IDA7Ci0gICAgICAg
IGZsb2F0IGRwaVkgPSAwOwotICAgICAgICB0aWxlSW1hZ2UtPkdldERwaSgmZHBpWCwgJmRwaVkp
OwotICAgICAgICBhdXRvIGJpdG1hcFByb3BlcnRpZXMgPSBEMkQxOjpCaXRtYXBQcm9wZXJ0aWVz
KHRpbGVJbWFnZS0+R2V0UGl4ZWxGb3JtYXQoKSwgZHBpWCwgZHBpWSk7Ci0gICAgICAgIENPTVB0
cjxJRDJEMUJpdG1hcD4gc3ViSW1hZ2U7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0LT5D
cmVhdGVCaXRtYXAoSW50U2l6ZSh0aWxlUmVjdC5zaXplKCkpLCBiaXRtYXBQcm9wZXJ0aWVzLCAm
c3ViSW1hZ2UpOwotICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkgewotICAgICAgICAgICAgRDJE
MV9SRUNUX1UgZmluaXNoUmVjdCA9IEludFJlY3QodGlsZVJlY3QpOwotICAgICAgICAgICAgaHIg
PSBzdWJJbWFnZS0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgdGlsZUltYWdlLmdldCgpLCAmZmlu
aXNoUmVjdCk7Ci0gICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAgICAg
ICB0aWxlSW1hZ2UgPSBzdWJJbWFnZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIENPTVB0cjxJ
RDJEMUJpdG1hcEJydXNoPiBwYXR0ZXJuQnJ1c2g7Ci0gICAgSFJFU1VMVCBociA9IGNvbnRleHQt
PkNyZWF0ZUJpdG1hcEJydXNoKHRpbGVJbWFnZS5nZXQoKSwgJmJpdG1hcEJydXNoUHJvcGVydGll
cywgJmJydXNoUHJvcGVydGllcywgJnBhdHRlcm5CcnVzaCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURF
RChocikpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
ZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBbZGVzdFJlY3QsIHBhdHRlcm5CcnVz
aF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICBjb25zdCBEMkQx
X1JFQ1RfRiBkMmRSZWN0ID0gZGVzdFJlY3Q7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJl
Y3RhbmdsZSgmZDJkUmVjdCwgcGF0dGVybkJydXNoLmdldCgpKTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBkcmF3UmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcywgY29uc3QgQ29sb3ImIGZp
bGxDb2xvciwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiBzdHJva2VDb2xv
cikKLXsKLSAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUgcGF0dGVy
bnMgYW5kIGdyYWRpZW50cyBsaWtlIGRyYXdQYXRoIGRvZXMsIGl0IHByb2JhYmx5IHNob3VsZC4K
LSAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRU
YWdzKDEsIF9fTElORV9fKTsKLSAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQs
IFsmcGxhdGZvcm1Db250ZXh0LCByZWN0LCBmaWxsQ29sb3IsIHN0cm9rZUNvbG9yLCBzdHJva2VT
dHlsZV0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICBjb25zdCBE
MkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKLSAgICAgICAgYXV0byBmaWxsQnJ1c2ggPSBwbGF0
Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoZmlsbENvbG9yKTsKLSAgICAgICAgcmVuZGVyVGFy
Z2V0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBmaWxsQnJ1c2guZ2V0KCkpOwotICAgICAgICBp
ZiAoc3Ryb2tlU3R5bGUgIT0gTm9TdHJva2UpIHsKLSAgICAgICAgICAgIGF1dG8gc3Ryb2tlQnJ1
c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IpOwotICAgICAg
ICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3UmVjdGFuZ2xlKCZkMmRSZWN0LCBzdHJva2VCcnVzaC5n
ZXQoKSwgcGxhdGZvcm1Db250ZXh0LnN0cm9rZVRoaWNrbmVzcygpLCBwbGF0Zm9ybUNvbnRleHQu
c3Ryb2tlU3R5bGUoKSk7Ci0gICAgICAgIH0KLSAgICB9KTsKLX0KLQotdm9pZCBkcmF3TGluZShQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MiwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5
bGUsIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvciwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBib29s
IHNob3VsZEFudGlhbGlhcykKLXsKLSAgICBib29sIGlzVmVydGljYWxMaW5lID0gKHBvaW50MS54
KCkgKyBzdHJva2VUaGlja25lc3MgPT0gcG9pbnQyLngoKSk7Ci0gICAgZmxvYXQgc3Ryb2tlV2lk
dGggPSBpc1ZlcnRpY2FsTGluZSA/IHBvaW50Mi55KCkgLSBwb2ludDEueSgpIDogcG9pbnQyLngo
KSAtIHBvaW50MS54KCk7Ci0gICAgaWYgKCFzdHJva2VUaGlja25lc3MgfHwgIXN0cm9rZVdpZHRo
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQu
cmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBmbG9hdCBjb3JuZXJXaWR0aCA9IDA7Ci0gICAgYm9vbCBk
cmF3c0Rhc2hlZExpbmUgPSBzdHJva2VTdHlsZSA9PSBEb3R0ZWRTdHJva2UgfHwgc3Ryb2tlU3R5
bGUgPT0gRGFzaGVkU3Ryb2tlOwotCi0gICAgQ09NUHRyPElEMkQxU3Ryb2tlU3R5bGU+IGQyZFN0
cm9rZVN0eWxlOwotICAgIFBsYXRmb3JtQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwbGF0
Zm9ybUNvbnRleHQsIGRyYXdzRGFzaGVkTGluZSk7Ci0gICAgaWYgKGRyYXdzRGFzaGVkTGluZSkg
ewotICAgICAgICAvLyBGaWd1cmUgb3V0IGVuZCBwb2ludHMgdG8gZW5zdXJlIHdlIGFsd2F5cyBw
YWludCBjb3JuZXJzLgotICAgICAgICBjb3JuZXJXaWR0aCA9IGRhc2hlZExpbmVDb3JuZXJXaWR0
aEZvclN0cm9rZVdpZHRoKHN0cm9rZVdpZHRoLCBzdHJva2VTdHlsZSwgc3Ryb2tlVGhpY2tuZXNz
KTsKLSAgICAgICAgc3Ryb2tlV2lkdGggLT0gMiAqIGNvcm5lcldpZHRoOwotICAgICAgICBmbG9h
dCBwYXR0ZXJuV2lkdGggPSBkYXNoZWRMaW5lUGF0dGVybldpZHRoRm9yU3Ryb2tlV2lkdGgoc3Ry
b2tlV2lkdGgsIHN0cm9rZVN0eWxlLCBzdHJva2VUaGlja25lc3MpOwotICAgICAgICAvLyBDaGVj
ayBpZiBjb3JuZXIgZHJhd2luZyBzdWZmaWNpZW50bHkgY292ZXJzIHRoZSBsaW5lLgotICAgICAg
ICBpZiAoc3Ryb2tlV2lkdGggPD0gcGF0dGVybldpZHRoICsgMSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBmbG9hdCBwYXR0ZXJuT2Zmc2V0ID0gZGFzaGVkTGluZVBhdHRlcm5PZmZz
ZXRGb3JQYXR0ZXJuQW5kU3Ryb2tlV2lkdGgocGF0dGVybldpZHRoLCBzdHJva2VXaWR0aCk7Ci0g
ICAgICAgIGNvbnN0IGZsb2F0IGRhc2hlc1syXSA9IHsgcGF0dGVybldpZHRoLCBwYXR0ZXJuV2lk
dGggfTsKLSAgICAgICAgYXV0byBzdHJva2VTdHlsZVByb3BlcnRpZXMgPSBwbGF0Zm9ybUNvbnRl
eHQuc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6c3lz
dGVtRmFjdG9yeSgpLT5DcmVhdGVTdHJva2VTdHlsZSgmc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzLCBk
YXNoZXMsIEFSUkFZU0laRShkYXNoZXMpLCAmZDJkU3Ryb2tlU3R5bGUpOwotCi0gICAgICAgIHBs
YXRmb3JtQ29udGV4dC5zZXRQYXR0ZXJuV2lkdGgocGF0dGVybldpZHRoKTsKLSAgICAgICAgcGxh
dGZvcm1Db250ZXh0LnNldFBhdHRlcm5PZmZzZXQocGF0dGVybk9mZnNldCk7Ci0gICAgICAgIHBs
YXRmb3JtQ29udGV4dC5zZXREYXNoZXMoRGFzaEFycmF5KDIsIHBhdHRlcm5XaWR0aCkpOwotCi0g
ICAgICAgIGQyZFN0cm9rZVN0eWxlID0gcGxhdGZvcm1Db250ZXh0LnN0cm9rZVN0eWxlKCk7Ci0g
ICAgfQotCi0gICAgYXV0byBjZW50ZXJlZFBvaW50cyA9IGNlbnRlckxpbmVBbmRDdXRPZmZDb3Ju
ZXJzKGlzVmVydGljYWxMaW5lLCBjb3JuZXJXaWR0aCwgcG9pbnQxLCBwb2ludDIpOwotICAgIGF1
dG8gcDEgPSBjZW50ZXJlZFBvaW50c1swXTsKLSAgICBhdXRvIHAyID0gY2VudGVyZWRQb2ludHNb
MV07Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0KLSAgICBk
cmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1Db250ZXh0LCBwMSwg
cDIsIGQyZFN0cm9rZVN0eWxlLCBzdHJva2VDb2xvciwgc3Ryb2tlVGhpY2tuZXNzXShJRDJEMVJl
bmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RHJhd0xp
bmUocDEsIHAyLCBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IpLmdl
dCgpLCBzdHJva2VUaGlja25lc3MsIGQyZFN0cm9rZVN0eWxlLmdldCgpKTsKLSAgICB9KTsKLX0K
LQotdm9pZCBkcmF3TGluZXNGb3JUZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3Qg
RmxvYXRQb2ludCYsIGZsb2F0LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBjb25zdCBD
b2xvciYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBkcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0Jiwg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBmaWxsRWxsaXBzZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIFN0cm9rZVN0
eWxlIHN0cm9rZVN0eWxlLCBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3IsIGZsb2F0IHN0cm9rZVRo
aWNrbmVzcykKLXsKLSAgICBhdXRvIGVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKHJlY3QuY2VudGVy
KCksIDAuNSAqIHJlY3Qud2lkdGgoKSwgMC41ICogcmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBwbGF0
Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgZHJhd1dpdGhvdXRTaGFkb3co
cGxhdGZvcm1Db250ZXh0LCBbJnBsYXRmb3JtQ29udGV4dCwgZWxsaXBzZSwgZmlsbENvbG9yLCBz
dHJva2VTdHlsZSwgc3Ryb2tlQ29sb3IsIHN0cm9rZVRoaWNrbmVzc10oSUQyRDFSZW5kZXJUYXJn
ZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICBhdXRvIGZpbGxCcnVzaCA9IHBsYXRmb3JtQ29u
dGV4dC5icnVzaFdpdGhDb2xvcihmaWxsQ29sb3IpOwotICAgICAgICByZW5kZXJUYXJnZXQtPkZp
bGxFbGxpcHNlKCZlbGxpcHNlLCBmaWxsQnJ1c2guZ2V0KCkpOwotICAgICAgICBpZiAoc3Ryb2tl
U3R5bGUgIT0gU3Ryb2tlU3R5bGU6Ok5vU3Ryb2tlKSB7Ci0gICAgICAgICAgICBhdXRvIHN0cm9r
ZUJydXNoID0gcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKHN0cm9rZUNvbG9yKTsKLSAg
ICAgICAgICAgIHJlbmRlclRhcmdldC0+RHJhd0VsbGlwc2UoJmVsbGlwc2UsIHN0cm9rZUJydXNo
LmdldCgpLCBzdHJva2VUaGlja25lc3MsIHBsYXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZSgpKTsK
LSAgICAgICAgfQotICAgIH0pOwotfQotCi12b2lkIGRyYXdFbGxpcHNlKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgU3Ryb2tl
U3R5bGUgc3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvciwgZmxvYXQgc3Ryb2tl
VGhpY2tuZXNzKQotewotICAgIGlmIChzdHJva2VTdHlsZSA9PSBTdHJva2VTdHlsZTo6Tm9TdHJv
a2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gZWxsaXBzZSA9IEQyRDE6OkVsbGlwc2Uo
cmVjdC5jZW50ZXIoKSwgMC41ICogcmVjdC53aWR0aCgpLCAwLjUgKiByZWN0LmhlaWdodCgpKTsK
LQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBkcmF3V2l0
aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1Db250ZXh0LCBlbGxpcHNlLCBz
dHJva2VDb2xvciwgc3Ryb2tlVGhpY2tuZXNzXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFy
Z2V0KSB7Ci0gICAgICAgIGF1dG8gc3Ryb2tlQnJ1c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hX
aXRoQ29sb3Ioc3Ryb2tlQ29sb3IpOwotICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdFbGxpcHNl
KCZlbGxpcHNlLCBzdHJva2VCcnVzaC5nZXQoKSwgc3Ryb2tlVGhpY2tuZXNzLCBwbGF0Zm9ybUNv
bnRleHQuc3Ryb2tlU3R5bGUoKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgZHJhd0ZvY3VzUmluZyhQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IFBhdGgmLCBmbG9hdCwgY29uc3QgQ29sb3Im
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgZHJhd0ZvY3VzUmluZyhQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGNv
bnN0IENvbG9yJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIGZsdXNoKFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgQVNTRVJUKHBs
YXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgRDJEMV9UQUcgZmlyc3QsIHNlY29u
ZDsKLSAgICBIUkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5GbHVz
aCgmZmlyc3QsICZzZWNvbmQpOwotCi0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci19Ci0KLXZvaWQgc2F2ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0
KQotewotICAgIHBsYXRmb3JtQ29udGV4dC5zYXZlKCk7Ci0KLSAgICBpZiAoYXV0byogZ3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZSA9IHBsYXRmb3JtQ29udGV4dC5ncmFwaGljc0NvbnRleHRQcml2YXRl
KCkpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dFByaXZhdGUtPnNhdmUoKTsKLX0KLQotdm9pZCBy
ZXN0b3JlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAg
cGxhdGZvcm1Db250ZXh0LnJlc3RvcmUoKTsKLQotICAgIGlmIChhdXRvKiBncmFwaGljc0NvbnRl
eHRQcml2YXRlID0gcGxhdGZvcm1Db250ZXh0LmdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZS0+cmVzdG9yZSgpOwotfQotCi12b2lkIHRyYW5z
bGF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBmbG9hdCB4LCBm
bG9hdCB5KQotewotICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwot
Ci0gICAgRDJEMV9NQVRSSVhfM1gyX0YgY3VycmVudFRyYW5zZm9ybTsKLSAgICBwbGF0Zm9ybUNv
bnRleHQucmVuZGVyVGFyZ2V0KCktPkdldFRyYW5zZm9ybSgmY3VycmVudFRyYW5zZm9ybSk7Ci0K
LSAgICBhdXRvIHRyYW5zbGF0aW9uID0gRDJEMTo6TWF0cml4M3gyRjo6VHJhbnNsYXRpb24oeCwg
eSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5TZXRUcmFuc2Zvcm0odHJh
bnNsYXRpb24gKiBjdXJyZW50VHJhbnNmb3JtKTsKLQotICAgIGlmIChhdXRvKiBncmFwaGljc0Nv
bnRleHRQcml2YXRlID0gcGxhdGZvcm1Db250ZXh0LmdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkK
LSAgICAgICAgZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZS0+dHJhbnNsYXRlKHgsIHkpOwotfQotCi12
b2lkIHJvdGF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBmbG9h
dCBhbmdsZUluUmFkaWFucykKLXsKLSAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0LnJlbmRlclRh
cmdldCgpKTsKLQotICAgIEQyRDFfTUFUUklYXzNYMl9GIGN1cnJlbnRUcmFuc2Zvcm07Ci0gICAg
cGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5HZXRUcmFuc2Zvcm0oJmN1cnJlbnRUcmFu
c2Zvcm0pOwotCi0gICAgYXV0byByb3RhdGlvbiA9IEQyRDE6Ok1hdHJpeDN4MkY6OlJvdGF0aW9u
KHJhZDJkZWcoYW5nbGVJblJhZGlhbnMpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFy
Z2V0KCktPlNldFRyYW5zZm9ybShyb3RhdGlvbiAqIGN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAg
aWYgKGF1dG8qIGdyYXBoaWNzQ29udGV4dFByaXZhdGUgPSBwbGF0Zm9ybUNvbnRleHQuZ3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICAgICBncmFwaGljc0NvbnRleHRQcml2YXRlLT5yb3Rh
dGUoYW5nbGVJblJhZGlhbnMpOwotfQotCi12b2lkIHNjYWxlKFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBBU1NF
UlQocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLQotICAgIEQyRDFfTUFUUklYXzNY
Ml9GIGN1cnJlbnRUcmFuc2Zvcm07Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgp
LT5HZXRUcmFuc2Zvcm0oJmN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAgYXV0byBzY2FsZSA9IEQy
RDE6Ok1hdHJpeDN4MkY6OlNjYWxlKHNpemUpOwotICAgIHBsYXRmb3JtQ29udGV4dC5yZW5kZXJU
YXJnZXQoKS0+U2V0VHJhbnNmb3JtKHNjYWxlICogY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBp
ZiAoYXV0byogZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZSA9IHBsYXRmb3JtQ29udGV4dC5ncmFwaGlj
c0NvbnRleHRQcml2YXRlKCkpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dFByaXZhdGUtPnNjYWxl
KHNpemUpOwotfQotCi12b2lkIGNvbmNhdENUTShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxh
dGZvcm1Db250ZXh0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZVRyYW5zZm9ybSkKLXsK
LSAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLQotICAgIEQyRDFf
TUFUUklYXzNYMl9GIGN1cnJlbnRUcmFuc2Zvcm07Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJlbmRl
clRhcmdldCgpLT5HZXRUcmFuc2Zvcm0oJmN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAgRDJEMV9N
QVRSSVhfM1gyX0YgdHJhbnNmb3JtVG9Db25jYXQgPSBhZmZpbmVUcmFuc2Zvcm07Ci0gICAgcGxh
dGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5TZXRUcmFuc2Zvcm0odHJhbnNmb3JtVG9Db25j
YXQgKiBjdXJyZW50VHJhbnNmb3JtKTsKLQotICAgIGlmIChhdXRvKiBncmFwaGljc0NvbnRleHRQ
cml2YXRlID0gcGxhdGZvcm1Db250ZXh0LmdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZS0+Y29uY2F0Q1RNKGFmZmluZVRyYW5zZm9ybSk7Ci19
Ci0KLXZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYg
cGxhdGZvcm1Db250ZXh0LCBmbG9hdCBvcGFjaXR5KQotewotICAgIFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEOjpUcmFuc3BhcmVuY3lMYXllclN0YXRlIHRyYW5zcGFyZW5jeUxheWVyOwotICAgIHRy
YW5zcGFyZW5jeUxheWVyLm9wYWNpdHkgPSBvcGFjaXR5OwotCi0gICAgdHJhbnNwYXJlbmN5TGF5
ZXIucmVuZGVyVGFyZ2V0ID0gY3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0KHBsYXRmb3JtQ29udGV4
dC5yZW5kZXJUYXJnZXQoKSk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lM
YXllclN0YWNrLmFwcGVuZChXVEZNb3ZlKHRyYW5zcGFyZW5jeUxheWVyKSk7Ci0KLSAgICBwbGF0
Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLmxhc3QoKS5yZW5kZXJUYXJnZXQt
PkJlZ2luRHJhdygpOwotICAgIHBsYXRmb3JtQ29udGV4dC5tX3RyYW5zcGFyZW5jeUxheWVyU3Rh
Y2subGFzdCgpLnJlbmRlclRhcmdldC0+Q2xlYXIoRDJEMTo6Q29sb3JGKDAsIDAsIDAsIDApKTsK
LX0KLQotdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYg
cGxhdGZvcm1Db250ZXh0KQotewotICAgIGF1dG8gY3VycmVudExheWVyID0gcGxhdGZvcm1Db250
ZXh0Lm1fdHJhbnNwYXJlbmN5TGF5ZXJTdGFjay50YWtlTGFzdCgpOwotICAgIGF1dG8gcmVuZGVy
VGFyZ2V0ID0gY3VycmVudExheWVyLnJlbmRlclRhcmdldDsKLSAgICBpZiAoIXJlbmRlclRhcmdl
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+RW5k
RHJhdygpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgYXV0byBj
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0gICAgaWYgKGN1cnJl
bnRMYXllci5oYXNTaGFkb3cpCi0gICAgICAgIGRyYXdXaXRoU2hhZG93SGVscGVyKGNvbnRleHQs
IHJlbmRlclRhcmdldC5nZXQoKSwgRmxvYXRSZWN0KCksIGN1cnJlbnRMYXllci5zaGFkb3dDb2xv
ciwgY3VycmVudExheWVyLnNoYWRvd09mZnNldCwgY3VycmVudExheWVyLnNoYWRvd0JsdXIpOwot
ICAgIGVsc2UgewotICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKLSAgICAgICAg
aHIgPSByZW5kZXJUYXJnZXQtPkdldEJpdG1hcCgmYml0bWFwKTsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwQnJ1c2g+
IGJpdG1hcEJydXNoOwotICAgICAgICBhdXRvIGJpdG1hcEJydXNoUHJvcGVydGllcyA9IEQyRDE6
OkJpdG1hcEJydXNoUHJvcGVydGllcygpOwotICAgICAgICBhdXRvIGJydXNoUHJvcGVydGllcyA9
IEQyRDE6OkJydXNoUHJvcGVydGllcygpOwotICAgICAgICBIUkVTVUxUIGhyID0gY29udGV4dC0+
Q3JlYXRlQml0bWFwQnJ1c2goYml0bWFwLmdldCgpLCBiaXRtYXBCcnVzaFByb3BlcnRpZXMsIGJy
dXNoUHJvcGVydGllcywgJmJpdG1hcEJydXNoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VD
Q0VFREVEKGhyKSk7Ci0KLSAgICAgICAgYXV0byBzaXplID0gYml0bWFwLT5HZXRTaXplKCk7Ci0g
ICAgICAgIGF1dG8gcmVjdEluRElQID0gRDJEMTo6UmVjdEYoMCwgMCwgc2l6ZS53aWR0aCwgc2l6
ZS5oZWlnaHQpOwotICAgICAgICBjb250ZXh0LT5GaWxsUmVjdGFuZ2xlKHJlY3RJbkRJUCwgYml0
bWFwQnJ1c2guZ2V0KCkpOwotICAgIH0KLX0KLQotdm9pZCBjbGlwKFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBw
bGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPlB1c2hBeGlzQWxpZ25lZENsaXAocmVjdCwg
RDJEMV9BTlRJQUxJQVNfTU9ERV9QRVJfUFJJTUlUSVZFKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQu
cHVzaENsaXAoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OkF4aXNBbGlnbmVkQ2xpcCk7Ci0KLSAg
ICBpZiAoYXV0byogZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZSA9IHBsYXRmb3JtQ29udGV4dC5ncmFw
aGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dFByaXZhdGUtPmNs
aXAocmVjdCk7Ci19Ci0KLXZvaWQgY2xpcE91dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxh
dGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRoOwot
ICAgIHBhdGguYWRkUmVjdChyZWN0KTsKLQotICAgIGNsaXBPdXQocGxhdGZvcm1Db250ZXh0LCBw
YXRoKTsKLX0KLQotdm9pZCBjbGlwT3V0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgLy8gVG8gY2xpcCBPdXQgd2UgbmVl
ZCB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBpbmZpbml0ZQotICAgIC8vIGNsaXBwaW5nIHJlY3Qg
YW5kIHRoZSBwYXRoIHdlIGp1c3QgY3JlYXRlZC4KLSAgICBEMkQxX1NJWkVfRiByZW5kZXJlclNp
emUgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkdldFNpemUoKTsKLSAgICBGbG9h
dFJlY3QgY2xpcEJvdW5kcygwLCAwLCByZW5kZXJlclNpemUud2lkdGgsIHJlbmRlcmVyU2l6ZS5o
ZWlnaHQpOwotCi0gICAgUGF0aCBib3VuZGluZ1JlY3Q7Ci0gICAgYm91bmRpbmdSZWN0LmFkZFJl
Y3QoY2xpcEJvdW5kcyk7Ci0gICAgYm91bmRpbmdSZWN0LmFwcGVuZEdlb21ldHJ5KHBhdGgucGxh
dGZvcm1QYXRoKCkpOwotCi0gICAgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4gcGF0aFRvQ2xp
cDsKLSAgICBib3VuZGluZ1JlY3QuY3JlYXRlR2VvbWV0cnlXaXRoRmlsbE1vZGUoV2luZFJ1bGU6
OkV2ZW5PZGQsIHBhdGhUb0NsaXApOwotICAgIGNsaXBQYXRoKHBsYXRmb3JtQ29udGV4dCwgcGF0
aFRvQ2xpcC5nZXQoKSk7Ci19Ci0KLXZvaWQgY2xpcFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUp
Ci17Ci0gICAgaWYgKHBhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIERpcmVjdDJEOjpjbGlwKHBs
YXRmb3JtQ29udGV4dCwgRmxvYXRSZWN0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4gcGF0aFRvQ2xpcDsKLSAgICBwYXRoLmNyZWF0
ZUdlb21ldHJ5V2l0aEZpbGxNb2RlKGNsaXBSdWxlLCBwYXRoVG9DbGlwKTsKLQotICAgIGNsaXBQ
YXRoKHBsYXRmb3JtQ29udGV4dCwgcGF0aFRvQ2xpcC5nZXQoKSk7Ci0KLSAgICBpZiAoYXV0byog
Z3JhcGhpY3NDb250ZXh0UHJpdmF0ZSA9IHBsYXRmb3JtQ29udGV4dC5ncmFwaGljc0NvbnRleHRQ
cml2YXRlKCkpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dFByaXZhdGUtPmNsaXAocGF0aCk7Ci19
Ci0KLXZvaWQgY2xpcFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4
dCwgSUQyRDFHZW9tZXRyeSogcGF0aCkKLXsKLSAgICBDT01QdHI8SUQyRDFMYXllcj4gY2xpcExh
eWVyOwotICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkNy
ZWF0ZUxheWVyKCZjbGlwTGF5ZXIpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5QdXNoTGF5ZXIo
RDJEMTo6TGF5ZXJQYXJhbWV0ZXJzKEQyRDE6OkluZmluaXRlUmVjdCgpLCBwYXRoKSwgY2xpcExh
eWVyLmdldCgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucHVzaFJlbmRlckNsaXAoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQ6OkxheWVyQ2xpcCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNldEFjdGl2
ZUxheWVyKFdURk1vdmUoY2xpcExheWVyKSk7Ci19Ci0KLXZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBJRDJEMVJlbmRlclRhcmdldCosIGNvbnN0IEZsb2F0
UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotCi12b2lkIGNvcHlCaXRzKGNv
bnN0IHVpbnQ4X3QqIHNyY1Jvd3MsIHVuc2lnbmVkIHJvd0NvdW50LCB1bnNpZ25lZCBjb2xDb3Vu
dCwgdW5zaWduZWQgc3JjU3RyaWRlLCB1bnNpZ25lZCBkZXN0U3RyaWRlLCB1aW50OF90KiBkZXN0
Um93cykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgcm93Q291bnQ7ICsreSkgewot
ICAgICAgICAvLyBTb3VyY2UgZGF0YSBtYXkgYmUgcG93ZXItb2YtdHdvIHNpemVkLCBzbyB3ZSBu
ZWVkIHRvIG9ubHkgY29weSB0aGUgYml0cyB0aGF0Ci0gICAgICAgIC8vIGNvcnJlc3BvbmQgdG8g
dGhlIHJlY3RhbmdsZSBzdXBwbGllZCBieSB0aGUgY2FsbGVyLgotICAgICAgICBjb25zdCB1aW50
MzJfdCogc3JjUm93ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3Mg
KyBzcmNTdHJpZGUgKiB5KTsKLSAgICAgICAgdWludDMyX3QqIGRlc3RSb3cgPSByZWludGVycHJl
dF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBkZXN0U3RyaWRlICogeSk7Ci0gICAgICAgIG1l
bWNweShkZXN0Um93LCBzcmNSb3csIGNvbENvdW50KTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIERpcmVjdDJECi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShE
SVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJl
Y3QyRE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuaAko
bm9uZXhpc3RlbnQpCkBAIC0xLDE3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4
IE51YW50aSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQnJlbnQgRnVsZ2hhbSA8YmZ1bGdo
YW1Ad2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBJZ2FsaWEgUy5MLgot
ICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkRhc2hBcnJheS5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPGQyZDEuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci1jbGFzcyBD
b2xvcjsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7Ci1jbGFzcyBG
bG9hdFNpemU7Ci1jbGFzcyBQYXRoOwotCi1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGU7Ci0K
LW5hbWVzcGFjZSBEaXJlY3QyRCB7Ci0KLW5hbWVzcGFjZSBTdGF0ZSB7Ci0KLXZvaWQgc2V0U3Ry
b2tlVGhpY2tuZXNzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgZmxvYXQpOwotdm9pZCBzZXRT
dHJva2VTdHlsZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIFN0cm9rZVN0eWxlKTsKLQotdm9p
ZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBDb21wb3Np
dGVPcGVyYXRvciwgQmxlbmRNb2RlKTsKLXZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJiwgYm9vbCk7Ci0KLXZvaWQgc2V0Q1RNKFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci1BZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RN
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci0KLUludFJlY3QgZ2V0Q2xpcEJvdW5kcyhQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmKTsKLQotYm9vbCBpc0FjY2Vs
ZXJhdGVkQ29udGV4dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotCi19IC8vIG5hbWVzcGFj
ZSBTdGF0ZQotCi1zdHJ1Y3QgRmlsbFNvdXJjZSB7Ci0gICAgRmlsbFNvdXJjZSgpID0gZGVmYXVs
dDsKLSAgICBleHBsaWNpdCBGaWxsU291cmNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0Jik7Ci0KLSAgICBmbG9hdCBnbG9iYWxBbHBoYSB7IDAgfTsK
LSAgICBDT01QdHI8SUQyRDFCcnVzaD4gYnJ1c2g7Ci0gICAgQ29sb3IgY29sb3I7Ci0KLSAgICBX
aW5kUnVsZSBmaWxsUnVsZSB7IFdpbmRSdWxlOjpOb25aZXJvIH07Ci19OwotCi1zdHJ1Y3QgU3Ry
b2tlU291cmNlIHsKLSAgICBTdHJva2VTb3VyY2UoKSA9IGRlZmF1bHQ7Ci0gICAgZXhwbGljaXQg
U3Ryb2tlU291cmNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7Ci0KLSAgICBmbG9hdCBnbG9iYWxBbHBoYSB7IDAgfTsKLSAgICBmbG9hdCB0aGlj
a25lc3MgeyAwIH07Ci0gICAgQ09NUHRyPElEMkQxQnJ1c2g+IGJydXNoOwotICAgIENvbG9yIGNv
bG9yOwotfTsKLQotc3RydWN0IFNoYWRvd1N0YXRlIHsKLSAgICBTaGFkb3dTdGF0ZSgpID0gZGVm
YXVsdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBTaGFkb3dTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYpOwotCi0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdDsKLSAgICBi
b29sIGlzUmVxdWlyZWQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKSBjb25zdDsKLQotICAgIEZs
b2F0U2l6ZSBvZmZzZXQ7Ci0gICAgZmxvYXQgYmx1ciB7IDAgfTsKLSAgICBDb2xvciBjb2xvcjsK
LSAgICBib29sIGlnbm9yZVRyYW5zZm9ybXMgeyBmYWxzZSB9OwotCi0gICAgZmxvYXQgZ2xvYmFs
QWxwaGEgeyAxLjAgfTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBnbG9iYWxDb21wb3NpdGVPcGVy
YXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyIH07Ci19OwotCi12b2lkIHNldExp
bmVDYXAoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBMaW5lQ2FwKTsKLXZvaWQgc2V0TGluZURh
c2goUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCk7Ci12
b2lkIHNldExpbmVKb2luKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgTGluZUpvaW4pOwotdm9p
ZCBzZXRNaXRlckxpbWl0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgZmxvYXQpOwotCi12b2lk
IGZpbGxSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmlsbFNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIGZpbGxSZWN0KFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBjb25z
dCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBmaWxsUmVjdFdpdGhHcmFkaWVudChQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYsIElEMkQxQnJ1c2gqKTsKLXZvaWQgZmlsbFJv
dW5kZWRSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJiwgY29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQgZmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgRmlsbFNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0
YXRlJik7Ci12b2lkIGZpbGxQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgUGF0
aCYsIGNvbnN0IEZpbGxTb3VyY2UmLCBjb25zdCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBmaWxsUGF0
aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IFBhdGgmLCBjb25zdCBDb2xvciYsIGNv
bnN0IFNoYWRvd1N0YXRlJik7Ci0KLXZvaWQgc3Ryb2tlUmVjdChQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0LCBjb25zdCBTdHJva2VTb3VyY2UmLCBjb25z
dCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBzdHJva2VQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
JiwgY29uc3QgUGF0aCYsIGNvbnN0IFN0cm9rZVNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7
Ci12b2lkIGNsZWFyUmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVj
dCYpOwotCi12b2lkIGRyYXdHbHlwaHMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBG
aWxsU291cmNlJiwgY29uc3QgU3Ryb2tlU291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUmLCBjb25z
dCBGbG9hdFBvaW50JiwgY29uc3QgRm9udCYsIGRvdWJsZSwgY29uc3QgVmVjdG9yPHVuc2lnbmVk
IHNob3J0PiYgZ2x5cGhzLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBob3Jpem9udGFsQWR2YW5jZXMs
IGNvbnN0IFZlY3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiYsIGZsb2F0LCBUZXh0RHJhd2luZ01v
ZGVGbGFncywgZmxvYXQsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IENvbG9yJik7Ci0KLXZvaWQg
ZHJhd1BsYXRmb3JtSW1hZ2UoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBJV0lDQml0bWFwKiwg
Y29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiwgZmxvYXQsIGNvbnN0IFNoYWRvd1N0
YXRlJik7Ci12b2lkIGRyYXdQbGF0Zm9ybUltYWdlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwg
SUQyRDFCaXRtYXAqLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmLCBmbG9hdCwg
Y29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQgZHJhd1BhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmLCBjb25zdCBQYXRoJiwgY29uc3QgU3Ryb2tlU291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUm
KTsKLXZvaWQgZHJhd1BhdHRlcm4oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBDT01QdHI8SUQy
RDFCaXRtYXA+JiYsIGNvbnN0IEludFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgQ29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTW9kZSk7Ci0KLXZvaWQgZHJhd1dpdGhvdXRTaGFkb3coUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQmLCBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+JiYg
ZHJhd0NvbW1hbmRzKTsKLXZvaWQgZHJhd1dpdGhTaGFkb3coUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmLCBGbG9hdFJlY3QgYm91bmRpbmdSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYsIEZ1bmN0aW9u
PHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4mJiBkcmF3Q29tbWFuZHMpOwotCi12b2lkIGRyYXdS
ZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQsIGNv
bnN0IENvbG9yJiwgU3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJik7Ci12b2lkIGRyYXdMaW5lKFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBTdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwgYm9vbCk7Ci12b2lkIGRyYXdM
aW5lc0ZvclRleHQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFBvaW50Jiwg
ZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBjb25zdCBDb2xv
ciYpOwotdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpOwotdm9pZCBk
cmF3RWxsaXBzZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYsIFN0
cm9rZVN0eWxlLCBjb25zdCBDb2xvciYsIGZsb2F0KTsKLXZvaWQgZmlsbEVsbGlwc2UoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIFN0cm9r
ZVN0eWxlLCBjb25zdCBDb2xvciYsIGZsb2F0KTsKLQotdm9pZCBkcmF3Rm9jdXNSaW5nKFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgUGF0aCYsIGZsb2F0LCBjb25zdCBDb2xvciYpOwot
dm9pZCBkcmF3Rm9jdXNSaW5nKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mLCBmbG9hdCwgY29uc3QgQ29sb3ImKTsKLQotdm9pZCBmbHVzaChQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCYpOwotdm9pZCBzYXZlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7
Ci12b2lkIHJlc3RvcmUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKTsKLQotdm9pZCB0cmFuc2xh
dGUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBmbG9hdCwgZmxvYXQpOwotdm9pZCByb3RhdGUo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBmbG9hdCk7Ci12b2lkIHNjYWxlKFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRTaXplJik7Ci12b2lkIGNvbmNhdENUTShQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotCi12b2lkIGJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBmbG9hdCk7Ci12b2lk
IGVuZFRyYW5zcGFyZW5jeUxheWVyKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci0KLXZvaWQg
Y2xpcChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYpOwotCi12b2lk
IGNsaXBPdXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmKTsKLXZv
aWQgY2xpcE91dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IFBhdGgmKTsKLXZvaWQg
Y2xpcFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBQYXRoJiwgV2luZFJ1bGUp
Owotdm9pZCBjbGlwUGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIElEMkQxR2VvbWV0cnkq
IHBhdGgpOwotCi12b2lkIGNsaXBUb0ltYWdlQnVmZmVyKFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
JiwgSUQyRDFSZW5kZXJUYXJnZXQqLCBjb25zdCBGbG9hdFJlY3QmKTsKLQotfSAvLyBuYW1lc3Bh
Y2UgRGlyZWN0MkQKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJF
Q1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3Qy
RFV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmNwcAko
bm9uZXhpc3RlbnQpCkBAIC0xLDUxNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gZW1iZWRkZWQgc3lz
dGVtcwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLQotI2lmIFVTRShE
SVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
LSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNp
bmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jaW5jbHVkZSA8ZDNkMTFf
MS5oPgotI2luY2x1ZGUgPHNobHdhcGkuaD4KLSNpbmNsdWRlIDx3aW5jb2RlYy5oPgotCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIERpcmVjdDJEIHsKLQotY29uc3RleHByIERY
R0lfRk9STUFUIHdlYmtpdFRleHR1cmVGb3JtYXQgPSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9S
TTsKLWNvbnN0ZXhwciBEMkQxX0FMUEhBX01PREUgd2Via2l0QWxwaGFNb2RlID0gRDJEMV9BTFBI
QV9NT0RFX1BSRU1VTFRJUExJRUQ7Ci0KLUludFNpemUgYml0bWFwU2l6ZShJV0lDQml0bWFwU291
cmNlKiBiaXRtYXBTb3VyY2UpCi17Ci0gICAgVUlOVCB3aWR0aCwgaGVpZ2h0OwotICAgIEhSRVNV
TFQgaHIgPSBiaXRtYXBTb3VyY2UtPkdldFNpemUoJndpZHRoLCAmaGVpZ2h0KTsKLSAgICBpZiAo
IVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gSW50U2l6
ZSh3aWR0aCwgaGVpZ2h0KTsKLX0KLQotRmxvYXRTaXplIGJpdG1hcFNpemUoSUQyRDFCaXRtYXAq
IGJpdG1hcFNvdXJjZSkKLXsKLSAgICByZXR1cm4gYml0bWFwU291cmNlLT5HZXRTaXplKCk7Ci19
Ci0KLUZsb2F0U2l6ZSBiaXRtYXBSZXNvbHV0aW9uKElXSUNCaXRtYXBTb3VyY2UqIGJpdG1hcFNv
dXJjZSkKLXsKLSAgICBjb25zdGV4cHIgZG91YmxlIGRwaUJhc2UgPSA5NjsKLQotICAgIGRvdWJs
ZSBkcGlYLCBkcGlZOwotICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBTb3VyY2UtPkdldFJlc29sdXRp
b24oJmRwaVgsICZkcGlZKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVy
biB7IH07Ci0KLSAgICBGbG9hdFNpemUgcmVzdWx0KGRwaVgsIGRwaVkpOwotICAgIHJlc3VsdC5z
Y2FsZSgxLjAgLyBkcGlCYXNlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1GbG9hdFNpemUg
Yml0bWFwUmVzb2x1dGlvbihJRDJEMUJpdG1hcCogYml0bWFwKQotewotICAgIGNvbnN0ZXhwciBk
b3VibGUgZHBpQmFzZSA9IDk2OwotCi0gICAgZmxvYXQgZHBpWCwgZHBpWTsKLSAgICBiaXRtYXAt
PkdldERwaSgmZHBpWCwgJmRwaVkpOwotCi0gICAgRmxvYXRTaXplIHJlc3VsdChkcGlYLCBkcGlZ
KTsKLSAgICByZXN1bHQuc2NhbGUoMS4wIC8gZHBpQmFzZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LQotfQotCi1GbG9hdFNpemUgYml0bWFwUmVzb2x1dGlvbihJRDJEMVJlbmRlclRhcmdldCogdGFy
Z2V0KQotewotICAgIGNvbnN0ZXhwciBkb3VibGUgZHBpQmFzZSA9IDk2OwotCi0gICAgZmxvYXQg
ZHBpWCwgZHBpWTsKLSAgICB0YXJnZXQtPkdldERwaSgmZHBpWCwgJmRwaVkpOwotCi0gICAgRmxv
YXRTaXplIHJlc3VsdChkcGlYLCBkcGlZKTsKLSAgICByZXN1bHQuc2NhbGUoMS4wIC8gZHBpQmFz
ZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLQotfQotdW5zaWduZWQgYml0c1BlclBpeGVsKEdVSUQg
Yml0bWFwRm9ybWF0KQotewotICAgIENPTVB0cjxJV0lDQ29tcG9uZW50SW5mbz4gY29tcG9uZW50
SW5mbzsKLSAgICBIUkVTVUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3RlbUltYWdp
bmdGYWN0b3J5KCktPkNyZWF0ZUNvbXBvbmVudEluZm8oYml0bWFwRm9ybWF0LCAmY29tcG9uZW50
SW5mbyk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gNDsKLQotICAg
IENPTVB0cjxJV0lDUGl4ZWxGb3JtYXRJbmZvPiBwaXhlbEZvcm1hdDsKLSAgICBwaXhlbEZvcm1h
dC5xdWVyeShjb21wb25lbnRJbmZvKTsKLSAgICBpZiAoIXBpeGVsRm9ybWF0KQotICAgICAgICBy
ZXR1cm4gNDsKLQotICAgIFVJTlQgYnBwID0gMDsKLSAgICBociA9IHBpeGVsRm9ybWF0LT5HZXRC
aXRzUGVyUGl4ZWwoJmJwcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1
cm4gNDsKLQotICAgIHJldHVybiBicHA7Ci19Ci0KLUNPTVB0cjxJV0lDQml0bWFwPiBjcmVhdGVE
aXJlY3QyREltYWdlU3VyZmFjZVdpdGhEYXRhKHZvaWQqIGRhdGEsIGNvbnN0IEludFNpemUmIHNp
emUsIHVuc2lnbmVkIHN0cmlkZSkKLXsKLSAgICBDaGVja2VkU2l6ZSBudW1CeXRlcyA9IENoZWNr
ZWRVaW50MzIoc2l6ZS5oZWlnaHQoKSkgKiBzdHJpZGU7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092
ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SVdJQ0Jp
dG1hcD4gc3VyZmFjZTsKLSAgICBIUkVTVUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5
c3RlbUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZUJpdG1hcEZyb21NZW1vcnkoc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpLCB3aWNCaXRtYXBGb3JtYXQoKSwgc3RyaWRlLCBzdGF0aWNfY2FzdDxV
SU5UPihudW1CeXRlcy52YWx1ZSgpKSwgcmVpbnRlcnByZXRfY2FzdDxCWVRFKj4oZGF0YSksICZz
dXJmYWNlKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgcmV0dXJuIHN1cmZhY2U7Ci19Ci0KLUNPTVB0cjxJV0lDQml0bWFwPiBjcmVhdGVX
aWNCaXRtYXAoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBDT01QdHI8SVdJQ0JpdG1hcD4g
c3VyZmFjZTsKLSAgICBIUkVTVUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3RlbUlt
YWdpbmdGYWN0b3J5KCktPkNyZWF0ZUJpdG1hcChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCks
IHdpY0JpdG1hcEZvcm1hdCgpLCBXSUNCaXRtYXBDYWNoZU9uRGVtYW5kLCAmc3VyZmFjZSk7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJl
dHVybiBzdXJmYWNlOwotfQotCi1EMkQxX1BJWEVMX0ZPUk1BVCBwaXhlbEZvcm1hdEZvclNvZnR3
YXJlTWFuaXB1bGF0aW9uKCkKLXsKLSAgICByZXR1cm4gRDJEMTo6UGl4ZWxGb3JtYXQoRFhHSV9G
T1JNQVRfUjhHOEI4QThfVU5PUk0sIEQyRDFfQUxQSEFfTU9ERV9QUkVNVUxUSVBMSUVEKTsKLX0K
LQotRDJEMV9QSVhFTF9GT1JNQVQgcGl4ZWxGb3JtYXQoKQotewotICAgIC8vIFNpbmNlIHdlIG5l
ZWQgdG8gaW50ZXJhY3Qgd2l0aCBIREMgZnJvbSB0aW1lLXRvLXRpbWUsIHdlIGFyZSBmb3JjZWQg
dG8gdXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNIGFuZCBEMkQxX0FMUEhBX01PREVfUFJF
TVVMVElQTElFRAotICAgIHJldHVybiBEMkQxOjpQaXhlbEZvcm1hdCh3ZWJraXRUZXh0dXJlRm9y
bWF0LCB3ZWJraXRBbHBoYU1vZGUpOwotfQotCi1HVUlEIHdpY0JpdG1hcEZvcm1hdCgpCi17Ci0g
ICAgLy8gVGhpcyBpcyB0aGUgV0lDIGZvcm1hdCBjb21wYXRpYmxlIHdpdGggRFhHSV9GT1JNQVRf
QjhHOFI4QThfVU5PUk0uIEl0IGlzIGFsc28gc3VwcG9zZWRseSB0aGUgbW9zdCBlZmZpY2llbnQg
aW4tbWVtb3J5Ci0gICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIFdJQyBpbWFnZXMuCi0gICAgcmV0
dXJuIEdVSURfV0lDUGl4ZWxGb3JtYXQzMmJwcFBCR1JBOwotfQotCi1EMkQxX0JJVE1BUF9QUk9Q
RVJUSUVTIGJpdG1hcFByb3BlcnRpZXMoKQotewotICAgIHJldHVybiBEMkQxOjpCaXRtYXBQcm9w
ZXJ0aWVzKHBpeGVsRm9ybWF0KCkpOwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXA+IGNyZWF0ZUJp
dG1hcChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBjb25zdCBJbnRTaXplJiBzaXpl
KQotewotICAgIGF1dG8gYml0bWFwQ3JlYXRlUHJvcGVydGllcyA9IGJpdG1hcFByb3BlcnRpZXMo
KTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotICAgIEQyRDFfU0laRV9VIGJp
dG1hcFNpemUgPSBzaXplOwotICAgIEhSRVNVTFQgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZUJp
dG1hcChiaXRtYXBTaXplLCBiaXRtYXBDcmVhdGVQcm9wZXJ0aWVzLCAmYml0bWFwKTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJu
IGJpdG1hcDsKLX0KLQotRDJEMV9SRU5ERVJfVEFSR0VUX1BST1BFUlRJRVMgcmVuZGVyVGFyZ2V0
UHJvcGVydGllcygpCi17Ci0gICAgcmV0dXJuIEQyRDE6OlJlbmRlclRhcmdldFByb3BlcnRpZXMo
RDJEMV9SRU5ERVJfVEFSR0VUX1RZUEVfREVGQVVMVCwKLSAgICAgICAgcGl4ZWxGb3JtYXQoKSwg
MCwgMCwgRDJEMV9SRU5ERVJfVEFSR0VUX1VTQUdFX0dESV9DT01QQVRJQkxFLCBEMkQxX0ZFQVRV
UkVfTEVWRUxfREVGQVVMVCk7Ci19Ci0KLUNPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gY3JlYXRl
UmVuZGVyVGFyZ2V0RnJvbVdJQ0JpdG1hcChJV0lDQml0bWFwKiBiaXRtYXBTb3VyY2UpCi17Ci0g
ICAgYXV0byB0YXJnZXRQcm9wZXJ0aWVzID0gcmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwotCi0g
ICAgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBiaXRtYXBDb250ZXh0OwotICAgIEhSRVNVTFQg
aHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlV2ljQml0bWFwUmVu
ZGVyVGFyZ2V0KGJpdG1hcFNvdXJjZSwgJnRhcmdldFByb3BlcnRpZXMsICZiaXRtYXBDb250ZXh0
KTsKLSAgICBpZiAoIWJpdG1hcENvbnRleHQgfHwgIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGJpdG1hcENvbnRleHQ7Ci19Ci0KLUNPTVB0cjxJ
RDJEMURDUmVuZGVyVGFyZ2V0PiBjcmVhdGVHRElSZW5kZXJUYXJnZXQoKQotewotICAgIGF1dG8g
dGFyZ2V0UHJvcGVydGllcyA9IHJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKLQotICAgIENPTVB0
cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IEdy
YXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEQ1JlbmRlclRhcmdldCgmdGFy
Z2V0UHJvcGVydGllcywgJnJlbmRlclRhcmdldCk7Ci0gICAgaWYgKCFyZW5kZXJUYXJnZXQgfHwg
IVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHJl
bmRlclRhcmdldDsKLX0KLQotQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBjcmVhdGVC
aXRtYXBSZW5kZXJUYXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsKLSAg
ICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgcmVuZGVyVGFyZ2V0ID0gR3JhcGhpY3NDb250
ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5k
ZXJUYXJnZXQ+IGJpdG1hcENvbnRleHQ7Ci0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+
Q3JlYXRlQ29tcGF0aWJsZVJlbmRlclRhcmdldChudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBE
MkQxX0NPTVBBVElCTEVfUkVOREVSX1RBUkdFVF9PUFRJT05TX0dESV9DT01QQVRJQkxFLCAmYml0
bWFwQ29udGV4dCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIHJldHVybiBiaXRtYXBDb250ZXh0OwotfQotCi1DT01QdHI8SUQyRDFCaXRt
YXBSZW5kZXJUYXJnZXQ+IGNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShjb25zdCBJbnRT
aXplJiBzaXplLCBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvcikKLXsKLSAgICBVTlVTRURfUEFSQU0oZGV2aWNlU2NhbGVGYWN0b3IpOwotCi0g
ICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgICAgIHJlbmRlclRhcmdldCA9IEdyYXBoaWNzQ29u
dGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVu
ZGVyVGFyZ2V0PiBiaXRtYXBDb250ZXh0OwotICAgIGF1dG8gZGVzaXJlZFNpemUgPSBEMkQxOjpT
aXplRihzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgIEQyRDFfU0laRV9VIHBpeGVs
U2l6ZSA9IEQyRDE6OlNpemVVKGNsYW1wVG88dW5zaWduZWQ+KGRldmljZVNjYWxlRmFjdG9yICog
c2l6ZS53aWR0aCgpKSwgY2xhbXBUbzx1bnNpZ25lZD4oZGV2aWNlU2NhbGVGYWN0b3IgKiBzaXpl
LmhlaWdodCgpKSk7Ci0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlQ29tcGF0
aWJsZVJlbmRlclRhcmdldCgmZGVzaXJlZFNpemUsICZwaXhlbFNpemUsIG51bGxwdHIsIEQyRDFf
Q09NUEFUSUJMRV9SRU5ERVJfVEFSR0VUX09QVElPTlNfR0RJX0NPTVBBVElCTEUsICZiaXRtYXBD
b250ZXh0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgcmV0dXJuIGJpdG1hcENvbnRleHQ7Ci19Ci0KLUNPTVB0cjxJRFhHSVN1cmZhY2Ux
PiBjcmVhdGVEWEdJU3VyZmFjZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplLCBJRDNEMTFEZXZp
Y2UxKiBkaXJlY3RYRGV2aWNlLCBib29sIGNyb3NzUHJvY2VzcykKLXsKLSAgICBpZiAoIWRpcmVj
dFhEZXZpY2UpCi0gICAgICAgIGRpcmVjdFhEZXZpY2UgPSBEaXJlY3QyRDo6ZGVmYXVsdERpcmVj
dFhEZXZpY2UoKTsKLQotICAgIC8vIENyZWF0ZSB0aGUgcmVuZGVyIHRhcmdldCB0ZXh0dXJlCi0g
ICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKLSAgICBaZXJvTWVtb3J5KCZkZXNjLCBzaXpl
b2YoZGVzYykpOwotICAgIGRlc2MuV2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgZGVzYy5IZWln
aHQgPSBzaXplLmhlaWdodCgpOwotICAgIGRlc2MuTWlwTGV2ZWxzID0gMTsKLSAgICBkZXNjLkFy
cmF5U2l6ZSA9IDE7Ci0gICAgZGVzYy5Gb3JtYXQgPSB3ZWJraXRUZXh0dXJlRm9ybWF0OwotICAg
IGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdF
X0RFRkFVTFQ7Ci0gICAgZGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQg
fCBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKLSAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0g
MDsKLSAgICBkZXNjLk1pc2NGbGFncyA9IEQzRDExX1JFU09VUkNFX01JU0NfR0RJX0NPTVBBVElC
TEU7Ci0gICAgaWYgKGNyb3NzUHJvY2VzcykKLSAgICAgICAgZGVzYy5NaXNjRmxhZ3MgfD0gRDNE
MTFfUkVTT1VSQ0VfTUlTQ19TSEFSRURfTlRIQU5ETEUgfCBEM0QxMV9SRVNPVVJDRV9NSVNDX1NI
QVJFRF9LRVlFRE1VVEVYOwotCi0gICAgQ09NUHRyPElEM0QxMVRleHR1cmUyRD4gdGV4dHVyZTsK
LSAgICBIUkVTVUxUIGhyID0gZGlyZWN0WERldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBu
dWxscHRyLCAmdGV4dHVyZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0K
LSAgICBDT01QdHI8SURYR0lTdXJmYWNlMT4gc3VyZmFjZTsKLSAgICBociA9IHRleHR1cmUtPlF1
ZXJ5SW50ZXJmYWNlKCZzdXJmYWNlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKLQotICAgIHJldHVybiBzdXJmYWNlOwotfQotCi1DT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+
IGNyZWF0ZVN1cmZhY2VSZW5kZXJUYXJnZXQoSURYR0lTdXJmYWNlMSogc3VyZmFjZSkKLXsKLSAg
ICBhdXRvIHBpeGVsRm9ybWF0ID0gRDJEMTo6UGl4ZWxGb3JtYXQod2Via2l0VGV4dHVyZUZvcm1h
dCwgd2Via2l0QWxwaGFNb2RlKTsKLQotICAgIGF1dG8gcHJvcGVydGllcyA9IEQyRDE6OlJlbmRl
clRhcmdldFByb3BlcnRpZXMoRDJEMV9SRU5ERVJfVEFSR0VUX1RZUEVfREVGQVVMVCwKLSAgICAg
ICAgcGl4ZWxGb3JtYXQsIDAsIDAsIEQyRDFfUkVOREVSX1RBUkdFVF9VU0FHRV9HRElfQ09NUEFU
SUJMRSwgRDJEMV9GRUFUVVJFX0xFVkVMXzEwKTsKLQotICAgIENPTVB0cjxJRDJEMVJlbmRlclRh
cmdldD4gcmVuZGVyVGFyZ2V0OwotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5
c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRHhnaVN1cmZhY2VSZW5kZXJUYXJnZXQoc3VyZmFjZSwgcHJv
cGVydGllcywgJnJlbmRlclRhcmdldCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiByZW5kZXJUYXJnZXQ7Ci19Ci0KLXZvaWQg
Y29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihJRDJEMUJpdG1hcCogZnJvbSwgSUQyRDFC
aXRtYXAqIHRvLCBjb25zdCBJbnRTaXplJiBzb3VyY2VPZmZzZXQsIGNvbnN0IEludFJlY3QmIHJl
Y3QsIGNvbnN0IEludFNpemUmIGRlc3RPZmZzZXQpCi17Ci0gICAgSW50U2l6ZSBzb3VyY2VCaXRt
YXBTaXplID0gZnJvbS0+R2V0UGl4ZWxTaXplKCk7Ci0gICAgaWYgKHNvdXJjZUJpdG1hcFNpemUu
aXNaZXJvKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFNpemUgdGFyZ2V0Qml0bWFwU2l6
ZSA9IHRvLT5HZXRQaXhlbFNpemUoKTsKLSAgICBpZiAodGFyZ2V0Qml0bWFwU2l6ZS5pc1plcm8o
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCBzb3VyY2VSZWN0KHNvdXJjZU9mZnNl
dC53aWR0aCgpLCBzb3VyY2VPZmZzZXQuaGVpZ2h0KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSk7Ci0gICAgSW50UmVjdCB0YXJnZXRSZWN0KGRlc3RPZmZzZXQud2lkdGgoKSwgZGVzdE9m
ZnNldC5oZWlnaHQoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLQotICAgIEludFJl
Y3Qgc291cmNlQml0bWFwUmVjdChJbnRQb2ludCgpLCBzb3VyY2VCaXRtYXBTaXplKTsKLSAgICBJ
bnRSZWN0IHRhcmdldEJpdG1hcFJlY3QoSW50UG9pbnQoKSwgdGFyZ2V0Qml0bWFwU2l6ZSk7Ci0K
LSAgICBzb3VyY2VSZWN0LmludGVyc2VjdChzb3VyY2VCaXRtYXBSZWN0KTsKLSAgICB0YXJnZXRS
ZWN0LmludGVyc2VjdCh0YXJnZXRCaXRtYXBSZWN0KTsKLQotICAgIEQyRDFfUkVDVF9VIGQyZFNv
dXJjZVJlY3QgPSBEMkQxOjpSZWN0VShzb3VyY2VSZWN0LngoKSwgc291cmNlUmVjdC55KCksIHNv
dXJjZVJlY3QueCgpICsgdGFyZ2V0UmVjdC53aWR0aCgpLCBzb3VyY2VSZWN0LnkoKSArIHRhcmdl
dFJlY3QuaGVpZ2h0KCkpOwotICAgIGF1dG8gb2Zmc2V0ID0gRDJEMTo6UG9pbnQyVShkZXN0T2Zm
c2V0LndpZHRoKCksIGRlc3RPZmZzZXQuaGVpZ2h0KCkpOwotCi0gICAgSFJFU1VMVCBociA9IHRv
LT5Db3B5RnJvbUJpdG1hcCgmb2Zmc2V0LCBmcm9tLCAmZDJkU291cmNlUmVjdCk7Ci0gICAgQVNT
RVJUKFNVQ0NFRURFRChocikpOwotfQotCi12b2lkIHdyaXRlRGlhZ25vc3RpY1BOR1RvUGF0aChJ
RDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBJRDJEMUJpdG1hcCogYml0bWFwLCBMUENX
U1RSIGZpbGVOYW1lKQotewotICAgIENPTVB0cjxJV0lDQml0bWFwRW5jb2Rlcj4gd2ljQml0bWFw
RW5jb2RlcjsKLSAgICBIUkVTVUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3RlbUlt
YWdpbmdGYWN0b3J5KCktPkNyZWF0ZUVuY29kZXIoR1VJRF9Db250YWluZXJGb3JtYXRQbmcsIG51
bGxwdHIsICZ3aWNCaXRtYXBFbmNvZGVyKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0K
LSAgICBEV09SRCBtb2RlID0gU1RHTV9DUkVBVEUgfCBTVEdNX1JFQURXUklURSB8IFNUR01fU0hB
UkVfREVOWV9XUklURTsKLSAgICBDT01QdHI8SVN0cmVhbT4gc3RyZWFtOwotICAgIGhyID0gOjpT
SENyZWF0ZVN0cmVhbU9uRmlsZUV4KGZpbGVOYW1lLCBtb2RlLCBGSUxFX0FUVFJJQlVURV9OT1JN
QUwsIFRSVUUsIG51bGxwdHIsICZzdHJlYW0pOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsK
LQotICAgIGhyID0gd2ljQml0bWFwRW5jb2Rlci0+SW5pdGlhbGl6ZShzdHJlYW0uZ2V0KCksIFdJ
Q0JpdG1hcEVuY29kZXJOb0NhY2hlKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAg
ICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRW5jb2RlPiB3aWNGcmFtZUVuY29kZTsKLSAgICBociA9
IHdpY0JpdG1hcEVuY29kZXItPkNyZWF0ZU5ld0ZyYW1lKCZ3aWNGcmFtZUVuY29kZSwgbnVsbHB0
cik7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgaHIgPSB3aWNGcmFtZUVuY29k
ZS0+SW5pdGlhbGl6ZShudWxscHRyKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAg
ICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBkMmREZXZpY2VDb250ZXh0OwotICAgIGhyID0g
cmVuZGVyVGFyZ2V0LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDJEMURldmljZUNvbnRleHQp
LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmQyZERldmljZUNvbnRleHQpKTsKLSAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBDT01QdHI8SUQyRDFEZXZpY2U+IGQyZERldmljZTsK
LSAgICBkMmREZXZpY2VDb250ZXh0LT5HZXREZXZpY2UoJmQyZERldmljZSk7Ci0KLSAgICBDT01Q
dHI8SVdJQ0ltYWdlRW5jb2Rlcj4gaW1hZ2VFbmNvZGVyOwotICAgIGhyID0gSW1hZ2VEZWNvZGVy
RGlyZWN0MkQ6OnN5c3RlbUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZUltYWdlRW5jb2RlcihkMmRE
ZXZpY2UuZ2V0KCksICZpbWFnZUVuY29kZXIpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsK
LQotICAgIGhyID0gaW1hZ2VFbmNvZGVyLT5Xcml0ZUZyYW1lKGJpdG1hcCwgd2ljRnJhbWVFbmNv
ZGUuZ2V0KCksIG51bGxwdHIpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhy
ID0gd2ljRnJhbWVFbmNvZGUtPkNvbW1pdCgpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsK
LQotICAgIGhyID0gd2ljQml0bWFwRW5jb2Rlci0+Q29tbWl0KCk7Ci0gICAgQVNTRVJUKFNVQ0NF
RURFRChocikpOwotCi0gICAgaHIgPSBzdHJlYW0tPkNvbW1pdChTVEdDX0RFRkFVTFQpOwotICAg
IEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLX0KLQotc3RhdGljIElEM0QxMURldmljZUNvbnRleHQx
KiBpbW1lZGlhdGVDb250ZXh0ID0gbnVsbHB0cjsKLQotSUQzRDExRGV2aWNlQ29udGV4dDEqIGR4
Z2lJbW1lZGlhdGVDb250ZXh0KCkKLXsKLSAgICBpZiAoIWltbWVkaWF0ZUNvbnRleHQpCi0gICAg
ICAgIGRlZmF1bHREaXJlY3RYRGV2aWNlKCk7Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChpbW1lZGlh
dGVDb250ZXh0KTsKLSAgICByZXR1cm4gaW1tZWRpYXRlQ29udGV4dDsKLX0KLQotSUQzRDExRGV2
aWNlMSogZGVmYXVsdERpcmVjdFhEZXZpY2UoKQotewotICAgIHN0YXRpYyBJRDNEMTFEZXZpY2Ux
KiBkZWZhdWx0RGV2aWNlMSA9IG51bGxwdHI7Ci0KLSAgICBpZiAoIWRlZmF1bHREZXZpY2UxKSB7
Ci0gICAgICAgIGludCBkZXZpY2VGbGFncyA9IEQzRDExX0NSRUFURV9ERVZJQ0VfQkdSQV9TVVBQ
T1JUOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgZGV2aWNlRmxhZ3MgfD0gRDNEMTFfQ1JFQVRF
X0RFVklDRV9ERUJVRzsKLSNlbmRpZgotCi0gICAgICAgIElEM0QxMURldmljZSogZGVmYXVsdERl
dmljZSA9IG51bGxwdHI7Ci0gICAgICAgIEQzRF9GRUFUVVJFX0xFVkVMIGZlYXR1cmVMZXZlbCA9
IHsgfTsKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCogaW1tZWRpYXRlRGV2aWNlQ29udGV4
dCA9IG51bGxwdHI7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBEM0QxMUNyZWF0ZURldmljZShudWxs
cHRyLCBEM0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsIG51bGxwdHIsIGRldmljZUZsYWdzLCBudWxs
cHRyLCAwLCBEM0QxMV9TREtfVkVSU0lPTiwgJmRlZmF1bHREZXZpY2UsICZmZWF0dXJlTGV2ZWws
ICZpbW1lZGlhdGVEZXZpY2VDb250ZXh0KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VF
REVEKGhyKSk7Ci0KLSAgICAgICAgaHIgPSBkZWZhdWx0RGV2aWNlLT5RdWVyeUludGVyZmFjZSgm
ZGVmYXVsdERldmljZTEpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsK
LSAgICAgICAgZGVmYXVsdERldmljZTEtPkFkZFJlZigpOwotCi0gICAgICAgIGhyID0gaW1tZWRp
YXRlRGV2aWNlQ29udGV4dC0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQzRDExRGV2aWNlQ29u
dGV4dDEpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmltbWVkaWF0ZUNvbnRleHQpKTsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIGltbWVkaWF0ZUNv
bnRleHQtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBkZWZhdWx0RGV2aWNlMTsKLX0K
LQotYm9vbCBjcmVhdGVEZXZpY2VBbmRDb250ZXh0KENPTVB0cjxJRDNEMTFEZXZpY2UxPiYgZDNk
RGV2aWNlLCBDT01QdHI8SUQzRDExRGV2aWNlQ29udGV4dDE+JiBpbW1lZGlhdGVDb250ZXh0KQot
ewotICAgIGludCBkZXZpY2VGbGFncyA9IEQzRDExX0NSRUFURV9ERVZJQ0VfQkdSQV9TVVBQT1JU
OwotI2lmbmRlZiBOREVCVUcKLSAgICBkZXZpY2VGbGFncyB8PSBEM0QxMV9DUkVBVEVfREVWSUNF
X0RFQlVHOwotI2VuZGlmCi0KLSAgICBEM0RfRkVBVFVSRV9MRVZFTCBmZWF0dXJlTGV2ZWwgPSB7
IH07Ci0gICAgSUQzRDExRGV2aWNlKiBkZWZhdWx0RGV2aWNlID0gbnVsbHB0cjsKLSAgICBJRDNE
MTFEZXZpY2VDb250ZXh0KiBpbW1lZGlhdGVEZXZpY2VDb250ZXh0ID0gbnVsbHB0cjsKLSAgICBI
UkVTVUxUIGhyID0gOjpEM0QxMUNyZWF0ZURldmljZShudWxscHRyLCBEM0RfRFJJVkVSX1RZUEVf
SEFSRFdBUkUsIG51bGxwdHIsIGRldmljZUZsYWdzLCBudWxscHRyLCAwLCBEM0QxMV9TREtfVkVS
U0lPTiwgJmRlZmF1bHREZXZpY2UsICZmZWF0dXJlTGV2ZWwsICZpbW1lZGlhdGVEZXZpY2VDb250
ZXh0KTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0gZGVm
YXVsdERldmljZS0+UXVlcnlJbnRlcmZhY2UoJmQzZERldmljZSk7Ci0gICAgUkVMRUFTRV9BU1NF
UlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgZGVmYXVsdERldmljZS0+UmVsZWFzZSgpOwotCi0gICAg
aHIgPSBpbW1lZGlhdGVEZXZpY2VDb250ZXh0LT5RdWVyeUludGVyZmFjZSgmaW1tZWRpYXRlQ29u
dGV4dCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgaW1tZWRpYXRl
Q29udGV4dC0+UmVsZWFzZSgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1DT01QdHI8SURYR0lE
ZXZpY2UxPiB0b0RYR0lEZXZpY2UoY29uc3QgQ09NUHRyPElEM0QxMURldmljZTE+JiBkM2REZXZp
Y2UpCi17Ci0gICAgaWYgKCFkM2REZXZpY2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgQ09NUHRyPElEWEdJRGV2aWNlMT4gZHhnaURldmljZTsKLSAgICBIUkVTVUxUIGhyID0gZDNk
RGV2aWNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRFhHSURldmljZTEpLCAodm9pZCAqKikm
ZHhnaURldmljZSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIHJldHVybiBkeGdpRGV2aWNlOwotfQotCi1DT01QdHI8SURYR0lGYWN0b3J5
Mj4gZmFjdG9yeUZvckRYR0lEZXZpY2UoY29uc3QgQ09NUHRyPElEWEdJRGV2aWNlMT4mIGRldmlj
ZSkKLXsKLSAgICBpZiAoIWRldmljZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBD
T01QdHI8SURYR0lBZGFwdGVyPiBhZGFwdG9yOwotICAgIEhSRVNVTFQgaHIgPSBkZXZpY2UtPkdl
dFBhcmVudChfX3V1aWRvZihJRFhHSUFkYXB0ZXIpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4o
JmFkYXB0b3IpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENP
TVB0cjxJRFhHSUZhY3Rvcnk+IGZhY3Rvcnk7Ci0gICAgaHIgPSBhZGFwdG9yLT5HZXRQYXJlbnQo
X191dWlkb2YoSURYR0lGYWN0b3J5KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZmYWN0b3J5
KSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBDT01QdHI8SURY
R0lGYWN0b3J5Mj4gZmFjdG9yeTI7Ci0gICAgaHIgPSBmYWN0b3J5LT5RdWVyeUludGVyZmFjZSgm
ZmFjdG9yeTIpOyAKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAKLSAg
ICByZXR1cm4gZmFjdG9yeTI7Ci19Ci0KLUNPTVB0cjxJRFhHSVN3YXBDaGFpbj4gc3dhcENoYWlu
T2ZTaXplRm9yV2luZG93QW5kRGV2aWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIEhX
TkQgd2luZG93LCBjb25zdCBDT01QdHI8SUQzRDExRGV2aWNlMT4mIGRldmljZSkKLXsKLSAgICBp
ZiAoIWRldmljZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBEWEdJX1NXQVBfQ0hB
SU5fREVTQzEgc3dhcENoYWluRGVzY3JpcHRpb247Ci0gICAgOjpaZXJvTWVtb3J5KCZzd2FwQ2hh
aW5EZXNjcmlwdGlvbiwgc2l6ZW9mKHN3YXBDaGFpbkRlc2NyaXB0aW9uKSk7Ci0gICAgc3dhcENo
YWluRGVzY3JpcHRpb24uV2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgc3dhcENoYWluRGVzY3Jp
cHRpb24uSGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBzd2FwQ2hhaW5EZXNjcmlwdGlvbi5G
b3JtYXQgPSB3ZWJraXRUZXh0dXJlRm9ybWF0OwotICAgIHN3YXBDaGFpbkRlc2NyaXB0aW9uLlNh
bXBsZURlc2MuQ291bnQgPSAxOwotICAgIHN3YXBDaGFpbkRlc2NyaXB0aW9uLlNhbXBsZURlc2Mu
UXVhbGl0eSA9IDA7Ci0gICAgc3dhcENoYWluRGVzY3JpcHRpb24uQnVmZmVyVXNhZ2UgPSBEWEdJ
X1VTQUdFX1NIQURFUl9JTlBVVCB8IERYR0lfVVNBR0VfUkVOREVSX1RBUkdFVF9PVVRQVVQ7Ci0g
ICAgc3dhcENoYWluRGVzY3JpcHRpb24uQnVmZmVyQ291bnQgPSAxOwotICAgIHN3YXBDaGFpbkRl
c2NyaXB0aW9uLkZsYWdzID0gRFhHSV9TV0FQX0NIQUlOX0ZMQUdfR0RJX0NPTVBBVElCTEU7Ci0K
LSAgICBhdXRvIGZhY3RvcnkgPSBEaXJlY3QyRDo6ZmFjdG9yeUZvckRYR0lEZXZpY2UoRGlyZWN0
MkQ6OnRvRFhHSURldmljZShkZXZpY2UpKTsKLQotICAgIENPTVB0cjxJRFhHSVN3YXBDaGFpbjE+
IHN3YXBDaGFpbjE7Ci0gICAgSFJFU1VMVCBociA9IGZhY3RvcnktPkNyZWF0ZVN3YXBDaGFpbkZv
ckh3bmQoZGV2aWNlLmdldCgpLCB3aW5kb3csICZzd2FwQ2hhaW5EZXNjcmlwdGlvbiwgbnVsbHB0
ciwgbnVsbHB0ciwgJnN3YXBDaGFpbjEpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SURYR0lTd2FwQ2hhaW4+IHN3YXBDaGFp
bihRdWVyeSwgc3dhcENoYWluMSk7Ci0gICAgcmV0dXJuIHN3YXBDaGFpbjsKLX0KLQotQ09NUHRy
PElEMkQxQml0bWFwPiBjcmVhdGVCaXRtYXBDb3B5RnJvbUNvbnRleHQoSUQyRDFCaXRtYXBSZW5k
ZXJUYXJnZXQqIGJpdG1hcFRhcmdldCkKLXsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGN1cnJl
bnRDYW52YXM7Ci0gICAgSFJFU1VMVCBociA9IGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZjdXJy
ZW50Q2FudmFzKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgYXV0byBiaXRtYXBDcmVhdGVQcm9wZXJ0aWVzID0gYml0bWFwUHJvcGVydGll
cygpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7Ci0gICAgRDJEMV9TSVpFX1Ug
Yml0bWFwU2l6ZSA9IGN1cnJlbnRDYW52YXMtPkdldFBpeGVsU2l6ZSgpOwotICAgIGhyID0gYml0
bWFwVGFyZ2V0LT5DcmVhdGVCaXRtYXAoYml0bWFwU2l6ZSwgYml0bWFwQ3JlYXRlUHJvcGVydGll
cywgJmJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGF1dG8gdGFyZ2V0UG9zID0gRDJEMTo6UG9pbnQyVSgpOwotICAgIEQyRDFf
UkVDVF9VIGRhdGFSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwgYml0bWFwU2l6ZS53aWR0aCwgYml0
bWFwU2l6ZS5oZWlnaHQpOwotICAgIGhyID0gYml0bWFwLT5Db3B5RnJvbUJpdG1hcCgmdGFyZ2V0
UG9zLCBjdXJyZW50Q2FudmFzLmdldCgpLCAmZGF0YVJlY3QpOwotICAgIGlmICghU1VDQ0VFREVE
KGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGJpdG1hcDsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgRGlyZWN0MkQKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI4Nzgx
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxp
dGllcy5oCShub25leGlzdGVudCkKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gZW1i
ZWRkZWQgc3lzdGVtcwotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBV
U0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5
cGVzLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtRXhwb3J0TWFj
cm9zLmgiCi0KLWludGVyZmFjZSBJRDJEMUJpdG1hcDsKLWludGVyZmFjZSBJRDJEMUJpdG1hcFJl
bmRlclRhcmdldDsKLWludGVyZmFjZSBJRDJEMURDUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNlIElE
MkQxUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNlIElEM0QxMURldmljZTE7Ci1pbnRlcmZhY2UgSUQz
RDExRGV2aWNlQ29udGV4dDE7Ci1pbnRlcmZhY2UgSUQzRDExUmVuZGVyVGFyZ2V0VmlldzsKLWlu
dGVyZmFjZSBJRFhHSURldmljZTE7Ci1pbnRlcmZhY2UgSURYR0lGYWN0b3J5MjsKLWludGVyZmFj
ZSBJRFhHSVN3YXBDaGFpbjsKLWludGVyZmFjZSBJRFhHSVN1cmZhY2UxOwotaW50ZXJmYWNlIElX
SUNCaXRtYXBTb3VyY2U7Ci1pbnRlcmZhY2UgSVdJQ0JpdG1hcDsKLQotc3RydWN0IEQyRDFfQklU
TUFQX1BST1BFUlRJRVM7Ci1zdHJ1Y3QgRDJEMV9QSVhFTF9GT1JNQVQ7Ci1zdHJ1Y3QgRDJEMV9S
RU5ERVJfVEFSR0VUX1BST1BFUlRJRVM7Ci1zdHJ1Y3QgRDNEMTFfVklFV1BPUlQ7Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0U2l6ZTsKLWNs
YXNzIEludFJlY3Q7Ci1jbGFzcyBJbnRTaXplOwotCi1uYW1lc3BhY2UgRGlyZWN0MkQgewotCi1H
VUlEIHdpY0JpdG1hcEZvcm1hdCgpOwotRDJEMV9QSVhFTF9GT1JNQVQgcGl4ZWxGb3JtYXQoKTsg
Ly8gQkdSQQotRDJEMV9QSVhFTF9GT1JNQVQgcGl4ZWxGb3JtYXRGb3JTb2Z0d2FyZU1hbmlwdWxh
dGlvbigpOyAvLyBSR0JBCi1EMkQxX0JJVE1BUF9QUk9QRVJUSUVTIGJpdG1hcFByb3BlcnRpZXMo
KTsKLUQyRDFfUkVOREVSX1RBUkdFVF9QUk9QRVJUSUVTIHJlbmRlclRhcmdldFByb3BlcnRpZXMo
KTsKLQotdm9pZCBpblBsYWNlU3dpenpsZSh1aW50OF90KiBieXRlRGF0YSwgdW5zaWduZWQgbGVu
Z3RoLCBib29sIGFwcGx5UHJlbXVsdGlwbGljYXRpb24gPSBmYWxzZSk7Ci0KLUludFNpemUgYml0
bWFwU2l6ZShJV0lDQml0bWFwU291cmNlKik7Ci1GbG9hdFNpemUgYml0bWFwU2l6ZShJRDJEMUJp
dG1hcCopOwotRmxvYXRTaXplIGJpdG1hcFJlc29sdXRpb24oSVdJQ0JpdG1hcFNvdXJjZSopOwot
RmxvYXRTaXplIGJpdG1hcFJlc29sdXRpb24oSUQyRDFCaXRtYXAqKTsKLUZsb2F0U2l6ZSBiaXRt
YXBSZXNvbHV0aW9uKElEMkQxUmVuZGVyVGFyZ2V0Kik7Ci11bnNpZ25lZCBiaXRzUGVyUGl4ZWwo
R1VJRCk7Ci1DT01QdHI8SUQyRDFCaXRtYXA+IGNyZWF0ZUJpdG1hcChJRDJEMVJlbmRlclRhcmdl
dCosIGNvbnN0IEludFNpemUmKTsKLUNPTVB0cjxJV0lDQml0bWFwPiBjcmVhdGVXaWNCaXRtYXAo
Y29uc3QgSW50U2l6ZSYpOwotQ09NUHRyPElXSUNCaXRtYXA+IGNyZWF0ZURpcmVjdDJESW1hZ2VT
dXJmYWNlV2l0aERhdGEodm9pZCogZGF0YSwgY29uc3QgSW50U2l6ZSYsIHVuc2lnbmVkIHN0cmlk
ZSk7Ci1DT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IGNyZWF0ZVJlbmRlclRhcmdldEZyb21XSUNC
aXRtYXAoSVdJQ0JpdG1hcCopOwotQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBjcmVh
dGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUoY29uc3QgSW50U2l6ZSYsIElEMkQxUmVuZGVyVGFy
Z2V0KiA9IG51bGxwdHIsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gMS4wKTsKLUNPTVB0cjxJ
RDJEMUJpdG1hcFJlbmRlclRhcmdldD4gY3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0KElEMkQxUmVu
ZGVyVGFyZ2V0KiA9IG51bGxwdHIpOwotQ09NUHRyPElEMkQxRENSZW5kZXJUYXJnZXQ+IGNyZWF0
ZUdESVJlbmRlclRhcmdldCgpOwotQ09NUHRyPElEWEdJU3VyZmFjZTE+IGNyZWF0ZURYR0lTdXJm
YWNlT2ZTaXplKGNvbnN0IEludFNpemUmLCBJRDNEMTFEZXZpY2UxKiwgYm9vbCBjcm9zc1Byb2Nl
c3MpOwotQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBjcmVhdGVTdXJmYWNlUmVuZGVyVGFyZ2V0
KElEWEdJU3VyZmFjZTEqKTsKLUNPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlQml0bWFwQ29weUZy
b21Db250ZXh0KElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0Kik7Ci0KLXZvaWQgY29weVJlY3RGcm9t
T25lU3VyZmFjZVRvQW5vdGhlcihJRDJEMUJpdG1hcCogZnJvbSwgSUQyRDFCaXRtYXAqIHRvLCBj
b25zdCBJbnRTaXplJiBzb3VyY2VPZmZzZXQsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXpl
JiBkZXN0T2Zmc2V0ID0gSW50U2l6ZSgpKTsKLQotV0VCQ09SRV9FWFBPUlQgSUQzRDExRGV2aWNl
Q29udGV4dDEqIGR4Z2lJbW1lZGlhdGVDb250ZXh0KCk7Ci1XRUJDT1JFX0VYUE9SVCBJRDNEMTFE
ZXZpY2UxKiBkZWZhdWx0RGlyZWN0WERldmljZSgpOwotV0VCQ09SRV9FWFBPUlQgYm9vbCBjcmVh
dGVEZXZpY2VBbmRDb250ZXh0KENPTVB0cjxJRDNEMTFEZXZpY2UxPiYsIENPTVB0cjxJRDNEMTFE
ZXZpY2VDb250ZXh0MT4mKTsKLVdFQkNPUkVfRVhQT1JUIENPTVB0cjxJRFhHSURldmljZTE+IHRv
RFhHSURldmljZShjb25zdCBDT01QdHI8SUQzRDExRGV2aWNlMT4mKTsKLVdFQkNPUkVfRVhQT1JU
IENPTVB0cjxJRFhHSUZhY3RvcnkyPiBmYWN0b3J5Rm9yRFhHSURldmljZShjb25zdCBDT01QdHI8
SURYR0lEZXZpY2UxPiYpOwotV0VCQ09SRV9FWFBPUlQgQ09NUHRyPElEWEdJU3dhcENoYWluPiBz
d2FwQ2hhaW5PZlNpemVGb3JXaW5kb3dBbmREZXZpY2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYs
IEhXTkQsIGNvbnN0IENPTVB0cjxJRDNEMTFEZXZpY2UxPiYpOwotCi12b2lkIHdyaXRlRGlhZ25v
c3RpY1BOR1RvUGF0aChJRDJEMVJlbmRlclRhcmdldCosIElEMkQxQml0bWFwKiwgTFBDV1NUUiBm
aWxlTmFtZSk7Ci0KLX0gLy8gbmFtZXNwYWNlIERpcmVjdDJECi0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0
aWVzLmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDI0
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEaXJlY3RXcml0ZVV0aWxpdGllcy5oIgot
Ci0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCi0jaW5jbHVkZSA8ZHdyaXRlXzMuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLW5hbWVzcGFjZSBEaXJlY3RXcml0ZSB7Ci0KLUlEV3JpdGVGYWN0b3J5NSogZmFjdG9y
eSgpCi17Ci0gICAgc3RhdGljIElEV3JpdGVGYWN0b3J5NSogZGlyZWN0V3JpdGVGYWN0b3J5ID0g
bnVsbHB0cjsKLSAgICBpZiAoIWRpcmVjdFdyaXRlRmFjdG9yeSkgewotICAgICAgICBIUkVTVUxU
IGhyID0gRFdyaXRlQ3JlYXRlRmFjdG9yeShEV1JJVEVfRkFDVE9SWV9UWVBFX1NIQVJFRCwgX191
dWlkb2YoZGlyZWN0V3JpdGVGYWN0b3J5KSwgcmVpbnRlcnByZXRfY2FzdDxJVW5rbm93bioqPigm
ZGlyZWN0V3JpdGVGYWN0b3J5KSk7Ci0gICAgICAgIGRpcmVjdFdyaXRlRmFjdG9yeS0+QWRkUmVm
KCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIH0KLQotICAg
IHJldHVybiBkaXJlY3RXcml0ZUZhY3Rvcnk7Ci19Ci0KLUlEV3JpdGVHZGlJbnRlcm9wKiBnZGlJ
bnRlcm9wKCkKLXsKLSAgICBzdGF0aWMgSURXcml0ZUdkaUludGVyb3AqIGRpcmVjdFdyaXRlR2Rp
SW50ZXJvcCA9IG51bGxwdHI7Ci0gICAgaWYgKCFkaXJlY3RXcml0ZUdkaUludGVyb3ApIHsKLSAg
ICAgICAgSFJFU1VMVCBociA9IGZhY3RvcnkoKS0+R2V0R2RpSW50ZXJvcCgmZGlyZWN0V3JpdGVH
ZGlJbnRlcm9wKTsKLSAgICAgICAgZGlyZWN0V3JpdGVHZGlJbnRlcm9wLT5BZGRSZWYoKTsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGRpcmVjdFdyaXRlR2RpSW50ZXJvcDsKLX0KLQotc3RhdGljIElEV3JpdGVJbk1lbW9yeUZvbnRG
aWxlTG9hZGVyKiBtZW1vcnlGb250TG9hZGVyKCkKLXsKLSAgICBzdGF0aWMgSURXcml0ZUluTWVt
b3J5Rm9udEZpbGVMb2FkZXIqIG1lbW9yeUZvbnRMb2FkZXIgPSBudWxscHRyOwotICAgIGlmICgh
bWVtb3J5Rm9udExvYWRlcikgewotICAgICAgICBIUkVTVUxUIGhyID0gZmFjdG9yeSgpLT5DcmVh
dGVJbk1lbW9yeUZvbnRGaWxlTG9hZGVyKCZtZW1vcnlGb250TG9hZGVyKTsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIG1lbW9yeUZvbnRMb2FkZXItPkFk
ZFJlZigpOwotCi0gICAgICAgIGhyID0gZmFjdG9yeSgpLT5SZWdpc3RlckZvbnRGaWxlTG9hZGVy
KG1lbW9yeUZvbnRMb2FkZXIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWVtb3J5Rm9udExvYWRlcjsKLX0KLQotc3RhdGljIElE
V3JpdGVGb250U2V0QnVpbGRlcjEqIGZvbnRTZXRCdWlsZGVyKCkKLXsKLSAgICBzdGF0aWMgSURX
cml0ZUZvbnRTZXRCdWlsZGVyMSogZm9udFNldEJ1aWxkZXIgPSBudWxscHRyOwotICAgIGlmICgh
Zm9udFNldEJ1aWxkZXIpIHsKLSAgICAgICAgSFJFU1VMVCBociA9IGZhY3RvcnkoKS0+Q3JlYXRl
Rm9udFNldEJ1aWxkZXIoJmZvbnRTZXRCdWlsZGVyKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
U1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIGZvbnRTZXRCdWlsZGVyLT5BZGRSZWYoKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZm9udFNldEJ1aWxkZXI7Ci19Ci0KLXN0YXRpYyBDT01QdHI8SURXcml0
ZUZvbnRTZXQ+IGZvbnRTZXQ7Ci1zdGF0aWMgQ09NUHRyPElEV3JpdGVGb250Q29sbGVjdGlvbjE+
IGZvbnRDb2xsZWN0aW9uOwotc3RhdGljIFVJTlQzMiBmb250Q291bnQgPSAwOwotCi1JRFdyaXRl
Rm9udENvbGxlY3Rpb24xKiB3ZWJQcm9jZXNzRm9udENvbGxlY3Rpb24oKQotewotICAgIEhSRVNV
TFQgaHIgPSBTX09LOwotCi0gICAgaWYgKCFmb250U2V0KSB7Ci0gICAgICAgIGhyID0gZm9udFNl
dEJ1aWxkZXIoKS0+Q3JlYXRlRm9udFNldCgmZm9udFNldCk7Ci0gICAgICAgIGlmICghU1VDQ0VF
REVEKGhyKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGZvbnRDb2xs
ZWN0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgaHIgPSBmYWN0b3J5KCktPkNyZWF0ZUZvbnRDb2xs
ZWN0aW9uRnJvbUZvbnRTZXQoZm9udFNldC5nZXQoKSwgJmZvbnRDb2xsZWN0aW9uKTsKLSAgICAg
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAgICAgQVNTRVJUKGZvbnRDb2xsZWN0aW9uLT5HZXRGb250RmFtaWx5Q291bnQoKSA9PSBmb250
Q291bnQpOwotICAgIH0KLQotICAgIHJldHVybiBmb250Q29sbGVjdGlvbi5nZXQoKTsKLX0KLQot
SFJFU1VMVCBhZGRGb250RnJvbURhdGFUb1Byb2Nlc3NDb2xsZWN0aW9uKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgZm9udERhdGEpCi17Ci0gICAgQ09NUHRyPElEV3JpdGVGb250RmlsZT4gZm9udEZp
bGU7Ci0gICAgSFJFU1VMVCBociA9IG1lbW9yeUZvbnRMb2FkZXIoKS0+Q3JlYXRlSW5NZW1vcnlG
b250RmlsZVJlZmVyZW5jZShmYWN0b3J5KCksIGZvbnREYXRhLmRhdGEoKSwgZm9udERhdGEuc2l6
ZSgpLCBudWxscHRyLCAmZm9udEZpbGUpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgcmV0dXJuIGhyOwotCi0gICAgaHIgPSBmb250U2V0QnVpbGRlcigpLT5BZGRGb250RmlsZShm
b250RmlsZS5nZXQoKSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4g
aHI7Ci0KLSAgICBmb250U2V0ID0gbnVsbHB0cjsKLSAgICArK2ZvbnRDb3VudDsKLQotICAgIHJl
dHVybiBocjsKLX0KLQotVmVjdG9yPHdjaGFyX3Q+IGZhbWlseU5hbWVGb3JMb2NhbGUoSURXcml0
ZUZvbnRGYW1pbHkqIGZvbnRGYW1pbHksIGNvbnN0IFZlY3Rvcjx3Y2hhcl90PiYgbG9jYWxlTmFt
ZSkKLXsKLSAgICBDT01QdHI8SURXcml0ZUxvY2FsaXplZFN0cmluZ3M+IGZhbWlseU5hbWVzOwot
ICAgIEhSRVNVTFQgaHIgPSBmb250RmFtaWx5LT5HZXRGYW1pbHlOYW1lcygmZmFtaWx5TmFtZXMp
OwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgQk9PTCBl
eGlzdHMgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsb2NhbGVJbmRleCA9IDA7Ci0gICAgaWYgKCFs
b2NhbGVOYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgaHIgPSBmYW1pbHlOYW1lcy0+RmluZExvY2Fs
ZU5hbWUobG9jYWxlTmFtZS5kYXRhKCksICZsb2NhbGVJbmRleCwgJmV4aXN0cyk7Ci0KLSAgICBp
ZiAoU1VDQ0VFREVEKGhyKSAmJiAhZXhpc3RzKQotICAgICAgICBociA9IGZhbWlseU5hbWVzLT5G
aW5kTG9jYWxlTmFtZShMImVuLXVzIiwgJmxvY2FsZUluZGV4LCAmZXhpc3RzKTsKLQotICAgIGlm
IChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgdW5zaWduZWQgZmFtaWx5
TmFtZUxlbmd0aCA9IDA7Ci0gICAgaHIgPSBmYW1pbHlOYW1lcy0+R2V0U3RyaW5nTGVuZ3RoKGxv
Y2FsZUluZGV4LCAmZmFtaWx5TmFtZUxlbmd0aCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQot
ICAgICAgICByZXR1cm4geyB9OwotCi0gICAgVmVjdG9yPHdjaGFyX3Q+IGZhbWlseU5hbWUoZmFt
aWx5TmFtZUxlbmd0aCArIDEpOwotICAgIGhyID0gZmFtaWx5TmFtZXMtPkdldFN0cmluZyhsb2Nh
bGVJbmRleCwgZmFtaWx5TmFtZS5kYXRhKCksIGZhbWlseU5hbWUuc2l6ZSgpKTsKLSAgICBpZiAo
IVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gZmFtaWx5
TmFtZTsKLX0KLQotQ09NUHRyPElEV3JpdGVGb250RmFtaWx5PiBmb250RmFtaWx5Rm9yQ29sbGVj
dGlvbihJRFdyaXRlRm9udENvbGxlY3Rpb24qIGZvbnRDb2xsZWN0aW9uLCBjb25zdCBWZWN0b3I8
d2NoYXJfdD4mIGxvY2FsZU5hbWUsIGNvbnN0IExPR0ZPTlQmIGxvZ0ZvbnQpCi17Ci0gICAgQ09N
UHRyPElEV3JpdGVGb250RmFtaWx5PiBmb250RmFtaWx5OwotCi0gICAgdW5zaWduZWQgZm9udEZh
bWlseUNvdW50ID0gZm9udENvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHlDb3VudCgpOwotICAgIGZv
ciAodW5zaWduZWQgZm9udEluZGV4ID0gMDsgZm9udEluZGV4IDwgZm9udEZhbWlseUNvdW50OyAr
K2ZvbnRJbmRleCkgewotICAgICAgICBIUkVTVUxUIGhyID0gZm9udENvbGxlY3Rpb24tPkdldEZv
bnRGYW1pbHkoZm9udEluZGV4LCAmZm9udEZhbWlseSk7Ci0gICAgICAgIGlmIChGQUlMRUQoaHIp
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgYXV0byBmYW1pbHlOYW1l
ID0gZmFtaWx5TmFtZUZvckxvY2FsZShmb250RmFtaWx5LmdldCgpLCBsb2NhbGVOYW1lKTsKLQot
ICAgICAgICBpZiAoIXdjc2NtcChsb2dGb250LmxmRmFjZU5hbWUsIGZhbWlseU5hbWUuZGF0YSgp
KSkKLSAgICAgICAgICAgIHJldHVybiBmb250RmFtaWx5OwotCi0gICAgICAgIGZvbnRGYW1pbHkg
PSBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1DT01QdHI8SURX
cml0ZUZvbnQ+IGNyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQoY29uc3QgTE9HRk9OVCYgbG9nRm9udCkK
LXsKLSAgICBDT01QdHI8SURXcml0ZUZvbnRDb2xsZWN0aW9uPiBzeXN0ZW1Gb250Q29sbGVjdGlv
bjsKLSAgICBIUkVTVUxUIGhyID0gZmFjdG9yeSgpLT5HZXRTeXN0ZW1Gb250Q29sbGVjdGlvbigm
c3lzdGVtRm9udENvbGxlY3Rpb24pOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIFZlY3Rvcjx3Y2hhcl90PiBsb2NhbGVOYW1lKExPQ0FMRV9OQU1F
X01BWF9MRU5HVEgpOwotICAgIGludCBsb2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2Fs
ZU5hbWUobG9jYWxlTmFtZS5kYXRhKCksIExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwotICAgIFJF
TEVBU0VfQVNTRVJUKGxvY2FsZUxlbmd0aCA8PSBMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKLQot
ICAgIENPTVB0cjxJRFdyaXRlRm9udENvbGxlY3Rpb24xPiBjb2xsZWN0aW9uKFF1ZXJ5LCBzeXN0
ZW1Gb250Q29sbGVjdGlvbik7Ci0KLSAgICBDT01QdHI8SURXcml0ZUZvbnRGYW1pbHk+IGZvbnRG
YW1pbHkgPSBmb250RmFtaWx5Rm9yQ29sbGVjdGlvbihjb2xsZWN0aW9uLmdldCgpLCBsb2NhbGVO
YW1lLCBsb2dGb250KTsKLSAgICBpZiAoIWZvbnRGYW1pbHkpIHsKLSAgICAgICAgY29sbGVjdGlv
biA9IHdlYlByb2Nlc3NGb250Q29sbGVjdGlvbigpOwotICAgICAgICBmb250RmFtaWx5ID0gZm9u
dEZhbWlseUZvckNvbGxlY3Rpb24oY29sbGVjdGlvbi5nZXQoKSwgbG9jYWxlTmFtZSwgbG9nRm9u
dCk7Ci0gICAgfQotCi0gICAgaWYgKCFmb250RmFtaWx5KSB7Ci0gICAgICAgIC8vIEp1c3QgcmV0
dXJuIHRoZSBmaXJzdCBzeXN0ZW0gZm9udC4KLSAgICAgICAgY29sbGVjdGlvbiA9IENPTVB0cjxJ
RFdyaXRlRm9udENvbGxlY3Rpb24xPihRdWVyeSwgc3lzdGVtRm9udENvbGxlY3Rpb24pOwotICAg
ICAgICBociA9IGNvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHkoMCwgJmZvbnRGYW1pbHkpOwotICAg
ICAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0jaWZu
ZGVmIE5ERUJVRwotICAgICAgICBhdXRvIGZhbWlseU5hbWUgPSBmYW1pbHlOYW1lRm9yTG9jYWxl
KGZvbnRGYW1pbHkuZ2V0KCksIGxvY2FsZU5hbWUpOwotICAgICAgICBVTlVTRURfVkFSSUFCTEUo
ZmFtaWx5TmFtZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBEV1JJVEVfRk9OVF9XRUlHSFQgd2Vp
Z2h0ID0gc3RhdGljX2Nhc3Q8RFdSSVRFX0ZPTlRfV0VJR0hUPihsb2dGb250LmxmV2VpZ2h0KTsK
LSAgICBEV1JJVEVfRk9OVF9TVFJFVENIIHN0cmV0Y2ggPSBzdGF0aWNfY2FzdDxEV1JJVEVfRk9O
VF9TVFJFVENIPihsb2dGb250LmxmUXVhbGl0eSk7Ci0gICAgRFdSSVRFX0ZPTlRfU1RZTEUgc3R5
bGUgPSBsb2dGb250LmxmSXRhbGljID8gRFdSSVRFX0ZPTlRfU1RZTEVfSVRBTElDIDogRFdSSVRF
X0ZPTlRfU1RZTEVfTk9STUFMOwotCi0gICAgQ09NUHRyPElEV3JpdGVGb250PiBkd0ZvbnQ7Ci0g
ICAgaHIgPSBmb250RmFtaWx5LT5HZXRGaXJzdE1hdGNoaW5nRm9udCh3ZWlnaHQsIHN0cmV0Y2gs
IHN0eWxlLCAmZHdGb250KTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICByZXR1
cm4gZHdGb250OwotfQotCi1EV1JJVEVfRk9OVF9XRUlHSFQgZm9udFdlaWdodChjb25zdCBGb250
UGxhdGZvcm1EYXRhJikKLXsKLSAgICByZXR1cm4gRFdSSVRFX0ZPTlRfV0VJR0hUX1JFR1VMQVI7
Ci19Ci0KLURXUklURV9GT05UX1NUWUxFIGZvbnRTdHlsZShjb25zdCBGb250UGxhdGZvcm1EYXRh
JikKLXsKLSAgICByZXR1cm4gRFdSSVRFX0ZPTlRfU1RZTEVfTk9STUFMOwotfQotCi1EV1JJVEVf
Rk9OVF9TVFJFVENIIGZvbnRTdHJldGNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKQotewotICAg
IHJldHVybiBEV1JJVEVfRk9OVF9TVFJFVENIX05PUk1BTDsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
RGlyZWN0V3JpdGUKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJ
UkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVj
dFdyaXRlVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI4NzgxMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGll
cy5oCShub25leGlzdGVudCkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShESVJFQ1Qy
RCkKLQotI2luY2x1ZGUgIkNPTVB0ci5oIgotCi1pbnRlcmZhY2UgSURXcml0ZUZhY3Rvcnk1Owot
aW50ZXJmYWNlIElEV3JpdGVGb250OwotaW50ZXJmYWNlIElEV3JpdGVGb250Q29sbGVjdGlvbjsK
LWludGVyZmFjZSBJRFdyaXRlRm9udENvbGxlY3Rpb24xOwotaW50ZXJmYWNlIElEV3JpdGVGb250
RmFtaWx5OwotaW50ZXJmYWNlIElEV3JpdGVHZGlJbnRlcm9wOwotCi1lbnVtIERXUklURV9GT05U
X1dFSUdIVDsKLWVudW0gRFdSSVRFX0ZPTlRfU1RZTEU7Ci1lbnVtIERXUklURV9GT05UX1NUUkVU
Q0g7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKLWNs
YXNzIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI7Ci0KLW5hbWVzcGFjZSBEaXJlY3RXcml0ZSB7Ci0K
LUlEV3JpdGVGYWN0b3J5NSogZmFjdG9yeSgpOwotSURXcml0ZUdkaUludGVyb3AqIGdkaUludGVy
b3AoKTsKLQotSURXcml0ZUZvbnRDb2xsZWN0aW9uMSogd2ViUHJvY2Vzc0ZvbnRDb2xsZWN0aW9u
KCk7Ci0KLUhSRVNVTFQgYWRkRm9udEZyb21EYXRhVG9Qcm9jZXNzQ29sbGVjdGlvbihjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGZvbnREYXRhKTsKLUNPTVB0cjxJRFdyaXRlRm9udEZhbWlseT4gZm9u
dEZhbWlseUZvckNvbGxlY3Rpb24oSURXcml0ZUZvbnRDb2xsZWN0aW9uKiwgY29uc3QgVmVjdG9y
PHdjaGFyX3Q+JiBsb2NhbGVOYW1lLCBjb25zdCBMT0dGT05UJik7Ci1DT01QdHI8SURXcml0ZUZv
bnQ+IGNyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQoY29uc3QgTE9HRk9OVCYpOwotVmVjdG9yPHdjaGFy
X3Q+IGZhbWlseU5hbWVGb3JMb2NhbGUoSURXcml0ZUZvbnRGYW1pbHkqLCBjb25zdCBWZWN0b3I8
d2NoYXJfdD4mIGxvY2FsZU5hbWUpOwotCi1EV1JJVEVfRk9OVF9XRUlHSFQgZm9udFdlaWdodChj
b25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci1EV1JJVEVfRk9OVF9TVFlMRSBmb250U3R5bGUoY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYpOwotRFdSSVRFX0ZPTlRfU1RSRVRDSCBmb250U3RyZXRjaChj
b25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci0KLX0gLy8gbmFtZXNwYWNlIERpcmVjdFdyaXRlCi0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFBvaW50RGlyZWN0MkQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
bG9hdFBvaW50RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNiBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKLQotI2lmIFBMQVRGT1JNKFdJTikKLQotI2luY2x1ZGUgPGQyZDEuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1GbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IEQyRF9QT0lOVF8y
RiYgcCkKLSAgICA6IG1feChwLngpCi0gICAgLCBtX3kocC55KQotewotfQotCi1GbG9hdFBvaW50
OjpvcGVyYXRvciBEMkRfUE9JTlRfMkYoKSBjb25zdAotewotICAgIHJldHVybiBEMkQxOjpQb2lu
dDJGKG1feCwgbV95KTsKLX0KLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oV0lOKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UmVjdERpcmVjdDJELmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxv
YXRSZWN0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwCShub25leGlzdGVudCkK
QEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0KLSNp
ZiBQTEFURk9STShXSU4pCi0KLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSA8ZDJk
MS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBib29sIGlzSW5maW5pdGVSZWN0
KGNvbnN0IEQyRDFfUkVDVF9GJiByZWN0KQotewotICAgIGlmICghc3RkOjppc2luZihyZWN0LnRv
cCkgJiYgcmVjdC50b3AgIT0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFzdGQ6OmlzaW5mKHJlY3QubGVmdCkgJiYg
cmVjdC5sZWZ0ICE9IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc3RkOjppc2luZihyZWN0LmJvdHRvbSkgJiYgcmVj
dC5ib3R0b20gIT0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXN0ZDo6aXNpbmYocmVjdC5yaWdodCkgJiYgcmVjdC5y
aWdodCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1GbG9hdFJlY3Q6OkZsb2F0UmVjdChj
b25zdCBSRUNUJiByZWN0KQotICAgIDogbV9sb2NhdGlvbihyZWN0LmxlZnQsIHJlY3QudG9wKQot
ICAgICwgbV9zaXplKHJlY3QucmlnaHQgLSByZWN0LmxlZnQsIHJlY3QuYm90dG9tIC0gcmVjdC50
b3ApCi17Ci19Ci0KLUZsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IEQyRDFfUkVDVF9GJiByKQot
ewotICAgIC8vIEluZmluaXRlIFJlY3QgY2FzZToKLSAgICBpZiAoaXNJbmZpbml0ZVJlY3Qocikp
IHsKLSAgICAgICAgKnRoaXMgPSBpbmZpbml0ZVJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1fbG9jYXRpb24gPSBGbG9hdFBvaW50KHIubGVmdCwgci50b3ApOwotICAgIG1f
c2l6ZSA9IEZsb2F0U2l6ZShyLnJpZ2h0IC0gci5sZWZ0LCByLmJvdHRvbSAtIHIudG9wKTsKLX0K
LQotRmxvYXRSZWN0OjpvcGVyYXRvciBEMkQxX1JFQ1RfRigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IEQyRDE6OlJlY3RGKHgoKSwgeSgpLCBtYXhYKCksIG1heFkoKSk7Ci19Ci0KLX0KLQotI2VuZGlm
IC8vIFBMQVRGT1JNKFdJTikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9GbG9hdFNpemVEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0U2l6ZURpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3
ODExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0U2l6ZURp
cmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDMtMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotCi0jaWYgUExBVEZPUk0oV0lOKQotCi0jaW5jbHVk
ZSA8ZDJkMS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0U2l6ZTo6RmxvYXRTaXpl
KGNvbnN0IEQyRDFfU0laRV9GJiBzKQotICAgIDogbV93aWR0aChzLndpZHRoKQotICAgICwgbV9o
ZWlnaHQocy5oZWlnaHQpCi17Ci19Ci0KLUZsb2F0U2l6ZTo6b3BlcmF0b3IgRDJEMV9TSVpFX0Yo
KSBjb25zdAotewotICAgIHJldHVybiBEMkQxOjpTaXplRihtX3dpZHRoLCBtX2hlaWdodCk7Ci19
Ci0KLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3Qy
RC5jcHAJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDE0NyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLQotI2lmIFVTRShE
SVJFQ1QyRCkKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNPTVB0
ci5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNp
bmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCi0jaW5jbHVk
ZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5j
bHVkZSAiV2ViQ29yZVRleHRSZW5kZXJlci5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRl
IDxkd3JpdGVfMy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQm
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLAotICAgIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi17Ci0g
ICAgYXV0byBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5k
ZXJUYXJnZXQoKTsKLSAgICBib29sIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBXZWJDb3JlU2hv
dWxkVXNlRm9udFNtb290aGluZygpOwotCi0gICAgc3dpdGNoIChzbW9vdGhpbmdNb2RlKSB7Ci0g
ICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6QW50aWFsaWFzZWQ6Ci0gICAgICAgIGdyYXBoaWNz
Q29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7Ci0gICAgICAgIHNob3VsZFVzZUZvbnRT
bW9vdGhpbmcgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250U21vb3RoaW5n
TW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZDoKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNo
b3VsZEFudGlhbGlhcyh0cnVlKTsKLSAgICAgICAgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IHRy
dWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6Ok5vU21vb3Ro
aW5nOgotICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsK
LSAgICAgICAgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IGZhbHNlOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nOgotICAgICAgICAvLyBG
b3IgdGhlIEF1dG9TbW9vdGggY2FzZSwgZG9uJ3QgZG8gYW55dGhpbmchIEtlZXAgdGhlIGRlZmF1
bHQgc2V0dGluZ3MuCi0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBs
YXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBncmFwaGljc0NvbnRleHQu
c2F2ZSgpOwotCi0gICAgRDJEMV9NQVRSSVhfM1gyX0YgbWF0cml4OwotICAgIGNvbnRleHQtPkdl
dFRyYW5zZm9ybSgmbWF0cml4KTsKLQotICAgIGlmIChwbGF0Zm9ybURhdGEuc3ludGhldGljT2Js
aXF1ZSgpKSB7Ci0gICAgICAgIHN0YXRpYyBmbG9hdCBza2V3ID0gLXRhbmYoc3ludGhldGljT2Js
aXF1ZUFuZ2xlKCkgKiBwaUZsb2F0IC8gMTgwLjBmKTsKLSAgICAgICAgYXV0byBza2V3TWF0cml4
ID0gRDJEMTo6TWF0cml4M3gyRjo6U2tldyhza2V3LCAwKTsKLSAgICAgICAgY29udGV4dC0+U2V0
VHJhbnNmb3JtKG1hdHJpeCAqIHNrZXdNYXRyaXgpOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNT
RVJUKHBsYXRmb3JtRGF0YS5kd0ZvbnQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocGxhdGZvcm1E
YXRhLmR3Rm9udEZhY2UoKSk7Ci0KLSAgICBWZWN0b3I8RkxPQVQ+IGhvcml6b250YWxBZHZhbmNl
cyhudW1HbHlwaHMpOwotICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiBvZmZzZXRBZHZh
bmNlcyhudW1HbHlwaHMpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7
ICsraSkgewotICAgICAgICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZmZXIuYWR2YW5jZXNDb3Vu
dCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYXV0byBhZHZhbmNlID0gZ2x5cGhC
dWZmZXIuYWR2YW5jZXMoaSArIGZyb20pOwotICAgICAgICBpZiAoIWFkdmFuY2UpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBob3Jpem9udGFsQWR2YW5jZXNbaV0gPSBhZHZhbmNl
LT53aWR0aCgpOwotICAgICAgICBvZmZzZXRBZHZhbmNlc1tpXS5hZHZhbmNlT2Zmc2V0ID0gYWR2
YW5jZS0+d2lkdGgoKTsKLSAgICAgICAgb2Zmc2V0QWR2YW5jZXNbaV0uYXNjZW5kZXJPZmZzZXQg
PSBhZHZhbmNlLT5oZWlnaHQoKTsKLSAgICB9Ci0KLSAgICBEV1JJVEVfR0xZUEhfUlVOIGdseXBo
UnVuOwotICAgIGdseXBoUnVuLmZvbnRGYWNlID0gcGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKTsK
LSAgICBnbHlwaFJ1bi5mb250RW1TaXplID0gcGxhdGZvcm1EYXRhLnNpemUoKTsKLSAgICBnbHlw
aFJ1bi5nbHlwaENvdW50ID0gbnVtR2x5cGhzOwotICAgIGdseXBoUnVuLmdseXBoSW5kaWNlcyA9
IGdseXBoQnVmZmVyLmdseXBocyhmcm9tKTsKLSAgICBnbHlwaFJ1bi5nbHlwaEFkdmFuY2VzID0g
aG9yaXpvbnRhbEFkdmFuY2VzLmRhdGEoKTsKLSAgICBnbHlwaFJ1bi5nbHlwaE9mZnNldHMgPSBu
dWxscHRyOwotICAgIGdseXBoUnVuLmlzU2lkZXdheXMgPSBwbGF0Zm9ybURhdGEub3JpZW50YXRp
b24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsOwotICAgIGdseXBoUnVuLmJpZGlMZXZl
bCA9IDA7Ci0KLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRvd0Js
dXI7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LmdldFNoYWRv
dyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKLQotICAgIGJvb2wgaGFz
U2ltcGxlU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHRE
cmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIg
JiYgKCFncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBncmFwaGlj
c0NvbnRleHQuZ2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7Ci0g
ICAgaWYgKGhhc1NpbXBsZVNoYWRvdykgewotICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93
cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxv
c2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVh
clNoYWRvdygpOwotICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQuZmls
bENvbG9yKCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNv
bG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7Ci0gICAg
ICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7
Ci0gICAgICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2Ug
aGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVn
YXRpdmUuCi0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zm
c2V0LmhlaWdodCgpICogKGdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcygp
ID8gLTEgOiAxKTsKLQotICAgICAgICBhdXRvIHNoYWRvd0JydXNoID0gZ3JhcGhpY3NDb250ZXh0
LmJydXNoV2l0aENvbG9yKHNoYWRvd0ZpbGxDb2xvcik7Ci0gICAgICAgIGNvbnRleHQtPkRyYXdH
bHlwaFJ1bihEMkQxOjpQb2ludDJGKHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksICZnbHlwaFJ1
biwgc2hhZG93QnJ1c2gpOwotICAgICAgICBpZiAoZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCkp
Ci0gICAgICAgICAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihzaGFkb3dU
ZXh0WCArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBzaGFkb3dUZXh0WSksICZnbHlwaFJ1
biwgc2hhZG93QnJ1c2gpOwotICAgIH0KLQotICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQx
OjpQb2ludDJGKHBvaW50LngoKSwgcG9pbnQueSgpKSwgJmdseXBoUnVuLCBncmFwaGljc0NvbnRl
eHQuc29saWRGaWxsQnJ1c2goKSk7Ci0gICAgaWYgKGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgp
KQotICAgICAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihwb2ludC54KCkg
KyBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwgcG9pbnQueSgpKSwgJmdseXBoUnVuLCBncmFw
aGljc0NvbnRleHQuc29saWRGaWxsQnJ1c2goKSk7Ci0KLSAgICBpZiAoaGFzU2ltcGxlU2hhZG93
KQotICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93
Qmx1ciwgc2hhZG93Q29sb3IpOwotCi0gICAgZ3JhcGhpY3NDb250ZXh0LnJlc3RvcmUoKTsKLX0K
LQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHJldmlz
aW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDYgQEAK
ICNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2VuZGlmCiAKLSNpZiBV
U0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMuaCIKLSNpbmNsdWRl
IDxkd3JpdGVfMy5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YShjb25zdCBTdHJpbmcmIG5hbWUs
IEZvbnRQbGF0Zm9ybURhdGE6OkNyZWF0aW9uRGF0YSYmIGNyZWF0aW9uRGF0YSkKQEAgLTczLDcg
KzY4LDcgQEAgRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOgogICAgIGxv
Z0ZvbnQubGZVbmRlcmxpbmUgPSBmYWxzZTsKICAgICBsb2dGb250LmxmU3RyaWtlT3V0ID0gZmFs
c2U7CiAgICAgbG9nRm9udC5sZkNoYXJTZXQgPSBERUZBVUxUX0NIQVJTRVQ7Ci0jaWYgVVNFKENH
KSB8fCBVU0UoQ0FJUk8pIHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlS
TykKICAgICBsb2dGb250LmxmT3V0UHJlY2lzaW9uID0gT1VUX1RUX09OTFlfUFJFQ0lTOwogI2Vs
c2UKICAgICBsb2dGb250LmxmT3V0UHJlY2lzaW9uID0gT1VUX1RUX1BSRUNJUzsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhRGlyZWN0
MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250UGxhdGZvcm1EYXRhRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YURpcmVjdDJE
LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDEyMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNs
dWRlICJEaXJlY3RXcml0ZVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUgIlNoYXJlZEdESU9iamVjdC5oIgotI2lu
Y2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBs
YXRmb3JtRGF0YUluaXQoSEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgSERDIGhkYywgV0NIQVIqIGZh
Y2VOYW1lKQotewotICAgIExPR0ZPTlQgbG9nZm9udDsKLSAgICBIUkVTVUxUIGhyID0gOjpHZXRP
YmplY3QoZm9udCwgc2l6ZW9mKExPR0ZPTlQpLCAmbG9nZm9udCk7Ci0gICAgaWYgKFNVQ0NFRURF
RChocikpCi0gICAgICAgIG1fZHdGb250ID0gRGlyZWN0V3JpdGU6OmNyZWF0ZVdpdGhQbGF0Zm9y
bUZvbnQobG9nZm9udCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9kd0ZvbnQpOwotCi0gICAgaHIg
PSBtX2R3Rm9udC0+Q3JlYXRlRm9udEZhY2UoJm1fZHdGb250RmFjZSk7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBpZiAoIW1fdXNlR0RJKQotICAgICAgICBtX2lz
U3lzdGVtRm9udCA9ICF3Y3NjbXAoZmFjZU5hbWUsIEwiTHVjaWRhIEdyYW5kZSIpOwotfQotCi1G
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4mJiBoZm9u
dCwgQ09NUHRyPElEV3JpdGVGb250PiYmIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9v
bCBvYmxpcXVlLCBib29sIHVzZUdESSkKLSAgICA6IG1fc3ludGhldGljQm9sZChib2xkKQotICAg
ICwgbV9zeW50aGV0aWNPYmxpcXVlKG9ibGlxdWUpCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAs
IG1fZm9udChTaGFyZWRHRElPYmplY3Q8SEZPTlQ+OjpjcmVhdGUoV1RGTW92ZShoZm9udCkpKQot
ICAgICwgbV9kd0ZvbnQoV1RGTW92ZShmb250KSkKLSAgICAsIG1fdXNlR0RJKHVzZUdESSkKLXsK
LSAgICBIUkVTVUxUIGhyID0gbV9kd0ZvbnQtPkNyZWF0ZUZvbnRGYWNlKCZtX2R3Rm9udEZhY2Up
OwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotfQotCi1zdGF0aWMgYm9vbCBm
b250c0FyZUVxdWFsKElEV3JpdGVGb250KiBhLCBJRFdyaXRlRm9udCogYikKLXsKLSAgICBpZiAo
IWEgJiYgIWIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGEgPT0gYikKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKCFhICYmIGIpIHx8IChhICYmICFiKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGEtPkdldFdlaWdodCgpICE9IGItPkdldFdlaWdo
dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYS0+R2V0U3R5bGUoKSAhPSBi
LT5HZXRTdHlsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYS0+R2V0U3Ry
ZXRjaCgpICE9IGItPkdldFN0cmV0Y2goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
RFdSSVRFX0ZPTlRfTUVUUklDUyBhTWV0cmljcywgYk1ldHJpY3M7Ci0gICAgYS0+R2V0TWV0cmlj
cygmYU1ldHJpY3MpOwotICAgIGItPkdldE1ldHJpY3MoJmJNZXRyaWNzKTsKLQotICAgIGlmICgo
YU1ldHJpY3MuZGVzaWduVW5pdHNQZXJFbSAhPSBiTWV0cmljcy5kZXNpZ25Vbml0c1BlckVtKQot
ICAgICAgICB8fCAoYU1ldHJpY3MuYXNjZW50ICE9IGJNZXRyaWNzLmFzY2VudCkKLSAgICAgICAg
fHwgKGFNZXRyaWNzLmRlc2NlbnQgIT0gYk1ldHJpY3MuYXNjZW50KQotICAgICAgICB8fCAoYU1l
dHJpY3MubGluZUdhcCAhPSBiTWV0cmljcy5saW5lR2FwKQotICAgICAgICB8fCAoYU1ldHJpY3Mu
Y2FwSGVpZ2h0ICE9IGJNZXRyaWNzLmNhcEhlaWdodCkKLSAgICAgICAgfHwgKGFNZXRyaWNzLnhI
ZWlnaHQgIT0gYk1ldHJpY3MueEhlaWdodCkKLSAgICAgICAgfHwgKGFNZXRyaWNzLnVuZGVybGlu
ZVBvc2l0aW9uICE9IGJNZXRyaWNzLnVuZGVybGluZVBvc2l0aW9uKQotICAgICAgICB8fCAoYU1l
dHJpY3MudW5kZXJsaW5lVGhpY2tuZXNzICE9IGJNZXRyaWNzLnVuZGVybGluZVRoaWNrbmVzcykK
LSAgICAgICAgfHwgKGFNZXRyaWNzLnN0cmlrZXRocm91Z2hQb3NpdGlvbiAhPSBiTWV0cmljcy5z
dHJpa2V0aHJvdWdoUG9zaXRpb24pCi0gICAgICAgIHx8IChhTWV0cmljcy5zdHJpa2V0aHJvdWdo
VGhpY2tuZXNzICE9IGJNZXRyaWNzLnN0cmlrZXRocm91Z2hUaGlja25lc3MpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdW5zaWduZWQgRm9udFBsYXRm
b3JtRGF0YTo6aGFzaCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZm9udCA/IG1fZm9udC0+aGFz
aCgpIDogMDsKLX0KLQotYm9vbCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybUlzRXF1YWwoY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZm9udCA9
PSBvdGhlci5tX2ZvbnQKLSAgICAgICAgJiYgbV91c2VHREkgPT0gb3RoZXIubV91c2VHREkKLSAg
ICAgICAgJiYgZm9udHNBcmVFcXVhbChtX2R3Rm9udC5nZXQoKSwgb3RoZXIubV9kd0ZvbnQuZ2V0
KCkpOwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVj
dDJELmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAg
LTEsMTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKLQotI2lm
IFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkRpcmVjdFdyaXRlVXRpbGl0aWVzLmgiCi0jaW5j
bHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIlRleHRBbmFseXplckhlbHBlci5oIgotI2luY2x1ZGUg
PGR3cml0ZV8zLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBHbHlwaFBhZ2U6OmZp
bGwoVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKQotewotICAgIGlmIChidWZm
ZXJMZW5ndGggPiBHbHlwaFBhZ2U6OnNpemUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGNvbnN0IEZvbnQmIGZvbnQgPSB0aGlzLT5mb250KCk7Ci0gICAgYm9vbCBoYXZlR2x5cGhzID0g
ZmFsc2U7Ci0KLSAgICBDT01QdHI8SURXcml0ZVRleHRBbmFseXplcj4gYW5hbHl6ZXI7Ci0gICAg
SFJFU1VMVCBociA9IERpcmVjdFdyaXRlOjpmYWN0b3J5KCktPkNyZWF0ZVRleHRBbmFseXplcigm
YW5hbHl6ZXIpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgYXV0
byYgZm9udFBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBVQ2hhciBs
b2NhbGVOYW1lW0xPQ0FMRV9OQU1FX01BWF9MRU5HVEggKyAxXSA9IHsgfTsKLSAgICBpbnQgbG9j
YWxlTGVuZ3RoID0gR2V0VXNlckRlZmF1bHRMb2NhbGVOYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8TFBX
U1RSPigmbG9jYWxlTmFtZSksIExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKGxvY2FsZUxlbmd0aCA8PSBMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKLQotICAgIFRl
eHRBbmFseXplckhlbHBlciBoZWxwZXIocmVpbnRlcnByZXRfY2FzdDxMUFdTVFI+KCZsb2NhbGVO
YW1lKSwgcmVpbnRlcnByZXRfY2FzdDxMUFdTVFI+KGJ1ZmZlciksIGJ1ZmZlckxlbmd0aCk7Ci0K
LSAgICBociA9IGFuYWx5emVyLT5BbmFseXplU2NyaXB0KCZoZWxwZXIsIDAsIGJ1ZmZlckxlbmd0
aCwgJmhlbHBlcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBW
ZWN0b3I8R2x5cGg+IGdseXBocyhHbHlwaFBhZ2U6OnNpemUsIDApOwotICAgIFZlY3RvcjxHbHlw
aD4gY2x1c3Rlck1hcChHbHlwaFBhZ2U6OnNpemUsIDApOwotICAgIFZlY3RvcjxEV1JJVEVfU0hB
UElOR19URVhUX1BST1BFUlRJRVM+IHRleHRQcm9wZXJ0aWVzKEdseXBoUGFnZTo6c2l6ZSk7Ci0g
ICAgVmVjdG9yPERXUklURV9TSEFQSU5HX0dMWVBIX1BST1BFUlRJRVM+IGdseXBoUHJvcGVydGll
cyhHbHlwaFBhZ2U6OnNpemUpOwotCi0gICAgY29uc3QgV0NIQVIqIHRleHRTdGFydCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8TFBDV1NUUj4oYnVmZmVyKTsKLSAgICBHbHlwaCogZ2x5cGhEYXRhID0gZ2x5
cGhzLmRhdGEoKTsKLSAgICBHbHlwaCogY2x1c3Rlck1hcERhdGEgPSBjbHVzdGVyTWFwLmRhdGEo
KTsKLSAgICBEV1JJVEVfU0hBUElOR19URVhUX1BST1BFUlRJRVMqIHRleHRQcm9wZXJ0aWVzRGF0
YSA9IHRleHRQcm9wZXJ0aWVzLmRhdGEoKTsKLSAgICBEV1JJVEVfU0hBUElOR19HTFlQSF9QUk9Q
RVJUSUVTKiBnbHlwaFByb3BlcnRpZXNEYXRhID0gZ2x5cGhQcm9wZXJ0aWVzLmRhdGEoKTsKLQot
ICAgIHVuc2lnbmVkIHRvdGFsID0gMDsKLSAgICB1bnNpZ25lZCBtYXhHbHlwaENvdW50ID0gR2x5
cGhQYWdlOjpzaXplOwotICAgIGZvciAoY29uc3QgYXV0byYgcnVuIDogaGVscGVyLm1fYW5hbHl6
ZWRSdW5zKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHRvdGFsICsgcnVuLmxlbmd0aCA8PSBi
dWZmZXJMZW5ndGgpOwotCi0gICAgICAgIHVuc2lnbmVkIHJldHVybmVkQ291bnQgPSAwOwotICAg
ICAgICBociA9IGFuYWx5emVyLT5HZXRHbHlwaHModGV4dFN0YXJ0ICsgcnVuLnN0YXJ0UG9zaXRp
b24sIHJ1bi5sZW5ndGgsIGZvbnRQbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpLCBmb250UGxhdGZv
cm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCwgZmFsc2Us
Ci0gICAgICAgICAgICAmcnVuLmFuYWx5c2lzLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBu
dWxscHRyLCAwLCBtYXhHbHlwaENvdW50LCBjbHVzdGVyTWFwRGF0YSwgdGV4dFByb3BlcnRpZXNE
YXRhLAotICAgICAgICAgICAgZ2x5cGhEYXRhLCBnbHlwaFByb3BlcnRpZXNEYXRhLCAmcmV0dXJu
ZWRDb3VudCk7Ci0KLSAgICAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIGdseXBoRGF0YSArPSByZXR1cm5lZENvdW50OwotICAgICAg
ICBjbHVzdGVyTWFwRGF0YSArPSByZXR1cm5lZENvdW50OwotICAgICAgICB0ZXh0UHJvcGVydGll
c0RhdGEgKz0gcmV0dXJuZWRDb3VudDsKLSAgICAgICAgZ2x5cGhQcm9wZXJ0aWVzRGF0YSArPSBy
ZXR1cm5lZENvdW50OwotICAgICAgICBtYXhHbHlwaENvdW50IC09IHJldHVybmVkQ291bnQ7Ci0g
ICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgKytp
KSB7Ci0gICAgICAgIEdseXBoIGdseXBoID0gZ2x5cGhzW2ldOwotICAgICAgICBpZiAoIWdseXBo
KQotICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCAwKTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBzZXRHbHlwaEZvckluZGV4KGksIGdseXBoKTsKLSAgICAgICAgICAgIGhhdmVH
bHlwaHMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGhhdmVHbHlwaHM7
Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJl
Y3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiR3JhZGllbnQuaCIKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RC5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0j
ZGVmaW5lIEdSQURJRU5UX0RSQVdJTkcgMwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQg
R3JhZGllbnQ6OnN0b3BzQ2hhbmdlZCgpCi17Ci0gICAgbV9icnVzaCA9IG51bGxwdHI7Ci19Ci0K
LXN0YXRpYyBib29sIGNpcmNsZUlzRW50aXJlbHlDb250YWluZWQoY29uc3QgRmxvYXRQb2ludCYg
Y2VudGVyQSwgZmxvYXQgcmFkaXVzQSwgY29uc3QgRmxvYXRQb2ludCYgY2VudGVyQiwgZmxvYXQg
cmFkaXVzQikKLXsKLSAgICBkb3VibGUgZGVsdGFYID0gY2VudGVyQi54KCkgLSBjZW50ZXJBLngo
KTsKLSAgICBkb3VibGUgZGVsdGFZID0gY2VudGVyQi55KCkgLSBjZW50ZXJBLnkoKTsKLSAgICBk
b3VibGUgZGVsdGFSYWRpdXMgPSByYWRpdXNCIC0gcmFkaXVzQTsKLQotICAgIHJldHVybiBkZWx0
YVggKiBkZWx0YVggKyBkZWx0YVkgKiBkZWx0YVkgPCBkZWx0YVJhZGl1cyAqIGRlbHRhUmFkaXVz
ICYmIHJhZGl1c0EgPCByYWRpdXNCOwotfQotCi1JRDJEMUJydXNoKiBHcmFkaWVudDo6Y3JlYXRl
QnJ1c2goSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsKLSAgICBzb3J0U3RvcHMo
KTsKLQotICAgIFZlY3RvcjxEMkQxX0dSQURJRU5UX1NUT1A+IGdyYWRpZW50U3RvcHM7Ci0gICAg
Z3JhZGllbnRTdG9wcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fc3RvcHMuc2l6ZSgpKTsKLSAg
ICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3Igbm9uLXNSR0JBIGNvbG9yIHNwYWNlcy4KLSAgICAgICAgYXV0byBbciwgZywgYiwg
YV0gc3RvcC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgp
OwotICAgICAgICBncmFkaWVudFN0b3BzLmdyYWRpZW50U3RvcHMudW5jaGVja2VkQXBwZW5kKEQy
RDE6OkdyYWRpZW50U3RvcChzdG9wLm9mZnNldCwgRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEpKSk7
Ci0gICAgfQotCi0gICAgV1RGOjpzd2l0Y2hPbihtX2RhdGEsCi0gICAgICAgIFsmXSAoY29uc3Qg
TGluZWFyRGF0YSYpIHsKLSAgICAgICAgICAgIC8vIE5vIGFjdGlvbiBuZWVkZWQuCi0gICAgICAg
IH0sCi0gICAgICAgIFsmXSAoUmFkaWFsRGF0YSYgZGF0YSkgewotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZGF0YS5zdGFydFJhZGl1cyA+PSAwKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGRhdGEuZW5kUmFkaXVzID49IDApOwotCi0gICAgICAgICAgICBpZiAoZGF0YS5zdGFydFJh
ZGl1cyA+IGRhdGEuZW5kUmFkaXVzKSB7Ci0gICAgICAgICAgICAgICAgZ3JhZGllbnRTdG9wcy5y
ZXZlcnNlKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogZ3JhZGllbnRTdG9w
cykKLSAgICAgICAgICAgICAgICAgICAgc3RvcC5wb3NpdGlvbiA9IDEuMCAtIHN0b3AucG9zaXRp
b247Ci0KLSAgICAgICAgICAgICAgICBzdGQ6OnN3YXAoZGF0YS5zdGFydFJhZGl1cywgZGF0YS5l
bmRSYWRpdXMpOwotICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChkYXRhLnBvaW50MCwgZGF0YS5w
b2ludDEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZGF0YS5zdGFydFJhZGl1
cykgewotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRhdGEuZW5kUmFkaXVzID4gMCk7
Ci0gICAgICAgICAgICAgICAgZmxvYXQgc3RhcnRQb3NpdGlvbiA9IGRhdGEuc3RhcnRSYWRpdXMg
LyBkYXRhLmVuZFJhZGl1czsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGFydFBv
c2l0aW9uIDw9IDEuMCk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgYXZhaWxhYmxlUmFuZ2UgPSAx
LjAgLSBzdGFydFBvc2l0aW9uOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGF2YWls
YWJsZVJhbmdlIDw9IDEuMCAmJiBhdmFpbGFibGVSYW5nZSA+PSAwKTsKLQotICAgICAgICAgICAg
ICAgIGZvciAoYXV0byYgc3RvcCA6IGdyYWRpZW50U3RvcHMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3RvcC5wb3NpdGlvbiAqPSBhdmFpbGFibGVSYW5nZTsKLSAgICAgICAgICAgICAgICAgICAg
c3RvcC5wb3NpdGlvbiArPSBzdGFydFBvc2l0aW9uOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlICdzdGFydCcgcG9zaXRpb24KLSAgICAgICAgICAg
ICAgICBhdXRvIGZpcnN0U3RvcCA9IGdyYWRpZW50U3RvcHMuZmlyc3QoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIVdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChmaXJzdFN0b3AucG9zaXRpb24sIDAu
MGYpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0U3RvcC5wb3NpdGlvbiA9IDA7Ci0gICAg
ICAgICAgICAgICAgICAgIGdyYWRpZW50U3RvcHMuaW5zZXJ0KDAsIGZpcnN0U3RvcCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICBbJl0gKGNv
bnN0IENvbmljRGF0YSYpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBc3Nlc3Mgd2hldGhlciBu
ZWVkZWQgZm9yIENvbmljIEdyYWRpZW50cy4KLSAgICAgICAgfQotICAgICk7Ci0KLSAgICBDT01Q
dHI8SUQyRDFHcmFkaWVudFN0b3BDb2xsZWN0aW9uPiBncmFkaWVudFN0b3BDb2xsZWN0aW9uOwot
ICAgIEhSRVNVTFQgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZUdyYWRpZW50U3RvcENvbGxlY3Rp
b24oZ3JhZGllbnRTdG9wcy5kYXRhKCksIGdyYWRpZW50U3RvcHMuc2l6ZSgpLCAmZ3JhZGllbnRT
dG9wQ29sbGVjdGlvbik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAg
ICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKLSAgICAgICAgWyZdIChjb25zdCBMaW5lYXJEYXRhJiBk
YXRhKSB7Ci0gICAgICAgICAgICBJRDJEMUxpbmVhckdyYWRpZW50QnJ1c2gqIGxpbmVhckdyYWRp
ZW50ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVMaW5l
YXJHcmFkaWVudEJydXNoKAotICAgICAgICAgICAgICAgIEQyRDE6OkxpbmVhckdyYWRpZW50QnJ1
c2hQcm9wZXJ0aWVzKGRhdGEucG9pbnQwLCBkYXRhLnBvaW50MSksCi0gICAgICAgICAgICAgICAg
RDJEMTo6QnJ1c2hQcm9wZXJ0aWVzKCksIGdyYWRpZW50U3RvcENvbGxlY3Rpb24uZ2V0KCksCi0g
ICAgICAgICAgICAgICAgJmxpbmVhckdyYWRpZW50KTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKFNVQ0NFRURFRChocikpOwotICAgICAgICAgICAgbV9icnVzaCA9IGFkb3B0Q09NKGxpbmVh
ckdyYWRpZW50KTsKLSAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSYWRpYWxEYXRhJiBk
YXRhKSB7Ci0gICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0OwotICAgICAgICAgICAgaWYgKCFj
aXJjbGVJc0VudGlyZWx5Q29udGFpbmVkKGRhdGEucG9pbnQwLCBkYXRhLnN0YXJ0UmFkaXVzLCBk
YXRhLnBvaW50MSwgZGF0YS5lbmRSYWRpdXMpKQotICAgICAgICAgICAgICAgIG9mZnNldCA9IChk
YXRhLnBvaW50MS5zY2FsZWQoZGF0YS5zdGFydFJhZGl1cykgLSBkYXRhLnBvaW50MC5zY2FsZWQo
ZGF0YS5lbmRSYWRpdXMpKSAvIChkYXRhLmVuZFJhZGl1cyAtIGRhdGEuc3RhcnRSYWRpdXMpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG9mZnNldCA9IGRhdGEucG9pbnQwIC0g
ZGF0YS5wb2ludDE7Ci0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgY2VudGVyID0gZGF0YS5wb2lu
dDE7Ci0gICAgICAgICAgICBmbG9hdCByYWRpdXNYID0gZGF0YS5lbmRSYWRpdXM7Ci0gICAgICAg
ICAgICBmbG9hdCByYWRpdXNZID0gcmFkaXVzWCAvIGRhdGEuYXNwZWN0UmF0aW87Ci0KLSAgICAg
ICAgICAgIElEMkQxUmFkaWFsR3JhZGllbnRCcnVzaCogcmFkaWFsR3JhZGllbnQgPSBudWxscHRy
OwotICAgICAgICAgICAgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZVJhZGlhbEdyYWRpZW50QnJ1
c2goCi0gICAgICAgICAgICAgICAgRDJEMTo6UmFkaWFsR3JhZGllbnRCcnVzaFByb3BlcnRpZXMo
Y2VudGVyLCBEMkQxOjpQb2ludDJGKG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkpLCBy
YWRpdXNYLCByYWRpdXNZKSwKLSAgICAgICAgICAgICAgICBEMkQxOjpCcnVzaFByb3BlcnRpZXMo
KSwgZ3JhZGllbnRTdG9wQ29sbGVjdGlvbi5nZXQoKSwKLSAgICAgICAgICAgICAgICAmcmFkaWFs
R3JhZGllbnQpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0g
ICAgICAgICAgICBtX2JydXNoID0gYWRvcHRDT00ocmFkaWFsR3JhZGllbnQpOwotICAgICAgICB9
LAotICAgICAgICBbJl0gKGNvbnN0IENvbmljRGF0YSYpIHsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQgY29uaWMgZ3JhZGllbnQgcmVuZGVyaW5nLgotICAgICAgICAgICAgbV9icnVz
aCA9IG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICApOwotCi0gICAgcmV0dXJuIG1fYnJ1c2guZ2V0
KCk7Ci19Ci0KLXZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXV0byBkMmRDb250ZXh0ID0gY29udGV4dC5w
bGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBXVEY6OnN3aXRjaE9uKG1f
ZGF0YSwKLSAgICAgICAgWyZdIChjb25zdCBMaW5lYXJEYXRhJiBkYXRhKSB7Ci0gICAgICAgICAg
ICAvLyBGSVhNRTogSWYgd2UgaGF2ZSBhIGJydXNoLCB3aHkgY2FuIHdlIHJlLXVzZSBpdD8gV2hh
dCBndWFyYW50ZWVzIGl0J3MgcmlnaHQgZm9yIHRoaXMgY29udGV4dD8KLSAgICAgICAgICAgIGlm
ICghbV9icnVzaCkKLSAgICAgICAgICAgICAgICBjcmVhdGVCcnVzaChkMmRDb250ZXh0KTsKLQot
I2lmIEFTU0VSVF9FTkFCTEVECi0gICAgICAgICAgICBkMmRDb250ZXh0LT5TZXRUYWdzKEdSQURJ
RU5UX0RSQVdJTkcsIF9fTElORV9fKTsKLSNlbmRpZgotCi0gICAgICAgICAgICBjb25zdCBEMkQx
X1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKLSAgICAgICAgICAgIGQyZENvbnRleHQtPkZpbGxSZWN0
YW5nbGUoJmQyZFJlY3QsIG1fYnJ1c2guZ2V0KCkpOwotICAgICAgICB9LAotICAgICAgICBbJl0g
KGNvbnN0IFJhZGlhbERhdGEmIGRhdGEpIHsKLSAgICAgICAgICAgIGJvb2wgbmVlZFNjYWxpbmcg
PSBkYXRhLmFzcGVjdFJhdGlvICE9IDE7Ci0gICAgICAgICAgICBpZiAobmVlZFNjYWxpbmcpIHsK
LSAgICAgICAgICAgICAgICBjb250ZXh0LnNhdmUoKTsKLSAgICAgICAgICAgICAgICAvLyBTY2Fs
ZSBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGdyYWRpZW50LiBXZSBvbmx5IGV2ZXIgc2NhbGUgbm9u
LWRlcHJlY2F0ZWQgZ3JhZGllbnRzLAotICAgICAgICAgICAgICAgIC8vIGZvciB3aGljaCBtX3Aw
ID09IG1fcDEuCi0gICAgICAgICAgICAgICAgQVNTRVJUKGRhdGEucG9pbnQwID09IGRhdGEucG9p
bnQxKTsKLQotICAgICAgICAgICAgICAgIEQyRDFfTUFUUklYXzNYMl9GIGN0bSA9IHsgfTsKLSAg
ICAgICAgICAgICAgICBkMmRDb250ZXh0LT5HZXRUcmFuc2Zvcm0oJmN0bSk7Ci0KLSAgICAgICAg
ICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtKGN0bSk7Ci0gICAgICAgICAgICAgICAg
dHJhbnNmb3JtLnRyYW5zbGF0ZShkYXRhLnBvaW50MCk7Ci0gICAgICAgICAgICAgICAgdHJhbnNm
b3JtLnNjYWxlTm9uVW5pZm9ybSgxLjAsIDEuMCAvIGRhdGEuYXNwZWN0UmF0aW8pOwotICAgICAg
ICAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLWRhdGEucG9pbnQwKTsKLQotICAgICAgICAg
ICAgICAgIGQyZENvbnRleHQtPlNldFRyYW5zZm9ybShjdG0pOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBGSVhNRTogSWYgd2UgaGF2ZSBhIGJydXNoLCB3aHkgY2FuIHdlIHJlLXVz
ZSBpdD8gV2hhdCBndWFyYW50ZWVzIGl0J3MgcmlnaHQgZm9yIHRoaXMgY29udGV4dD8KLSAgICAg
ICAgICAgIGlmICghbV9icnVzaCkKLSAgICAgICAgICAgICAgICBjcmVhdGVCcnVzaChkMmRDb250
ZXh0KTsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgICAgICAgICBkMmRDb250ZXh0LT5TZXRU
YWdzKEdSQURJRU5UX0RSQVdJTkcsIF9fTElORV9fKTsKLSNlbmRpZgotCi0gICAgICAgICAgICBj
b25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKLSAgICAgICAgICAgIGQyZENvbnRleHQt
PkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIG1fYnJ1c2guZ2V0KCkpOwotCi0gICAgICAgICAgICBp
ZiAobmVlZFNjYWxpbmcpCi0gICAgICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAg
ICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgQ29uaWNEYXRhJikgewotICAgICAgICAgICAgLy8g
RklYTUU6IGltcGxlbWVudCBjb25pYyBncmFkaWVudCByZW5kZXJpbmcuCi0gICAgICAgIH0KLSAg
ICApOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHJldmlz
aW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHREaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw5MTkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotCi0jaW5jbHVkZSAi
Q09NUHRyLmgiCi0jaW5jbHVkZSAiRGlyZWN0MkRPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiRGly
ZWN0MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJEaXNwbGF5TGlzdFJlY29yZGVyLmgiCi0jaW5j
bHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZURpcmVjdDJELmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRl
ICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgi
Ci0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQyZDFlZmZlY3RzLmg+Ci0jaW5jbHVkZSA8
ZHdyaXRlXzMuaD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0KLSNwcmFnbWEgd2FybmluZyAoZGlz
YWJsZSA6IDQ3NTYpCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkK
LXsKLSAgICBwbGF0Zm9ybUluaXQoaGRjLCBoYXNBbHBoYSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRChIREMgaGRjLCBJRDJEMURDUmVuZGVy
VGFyZ2V0KiogcmVuZGVyVGFyZ2V0LCBSRUNUIHJlY3QsIGJvb2wgaGFzQWxwaGEpCi17Ci0gICAg
Ly8gQ3JlYXRlIGEgREMgcmVuZGVyIHRhcmdldC4KLSAgICBhdXRvIHRhcmdldFByb3BlcnRpZXMg
PSBEaXJlY3QyRDo6cmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwotCi0gICAgSFJFU1VMVCBociA9
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZURDUmVuZGVy
VGFyZ2V0KCZ0YXJnZXRQcm9wZXJ0aWVzLCByZW5kZXJUYXJnZXQpOwotICAgIFJFTEVBU0VfQVNT
RVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgKCpyZW5kZXJUYXJnZXQpLT5CaW5kREMoaGRjLCAm
cmVjdCk7Ci0KLSAgICBhdXRvIG93bmVkUGxhdGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRD4oKnJlbmRlclRhcmdldCk7Ci0gICAgbV9kYXRhID0gbmV3IEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShXVEZNb3ZlKG93bmVkUGxhdGZvcm1Db250ZXh0
KSwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7Ci0gICAgbV9kYXRhLT5t
X2hkYyA9IGhkYzsKLX0KLQotR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4
dERpcmVjdDJEKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyZXJUeXBlKQotewotICAgIHBsYXRm
b3JtSW5pdChwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgcmVuZGVyZXJUeXBlKTsKLX0KLQotSUQy
RDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3lzdGVtRmFjdG9yeSgpCi17Ci0g
ICAgc3RhdGljIElEMkQxRmFjdG9yeSogZGlyZWN0MkRGYWN0b3J5ID0gbnVsbHB0cjsKLSAgICBp
ZiAoIWRpcmVjdDJERmFjdG9yeSkgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgRDJEMV9GQUNU
T1JZX09QVElPTlMgb3B0aW9ucyA9IHsgfTsKLSAgICAgICAgb3B0aW9ucy5kZWJ1Z0xldmVsID0g
RDJEMV9ERUJVR19MRVZFTF9JTkZPUk1BVElPTjsKLSAgICAgICAgSFJFU1VMVCBociA9IEQyRDFD
cmVhdGVGYWN0b3J5KEQyRDFfRkFDVE9SWV9UWVBFX01VTFRJX1RIUkVBREVELCBvcHRpb25zLCAm
ZGlyZWN0MkRGYWN0b3J5KTsKLSNlbHNlCi0gICAgICAgIEhSRVNVTFQgaHIgPSBEMkQxQ3JlYXRl
RmFjdG9yeShEMkQxX0ZBQ1RPUllfVFlQRV9NVUxUSV9USFJFQURFRCwgJmRpcmVjdDJERmFjdG9y
eSk7Ci0jZW5kaWYKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGRpcmVjdDJERmFjdG9yeTsKLX0KLQotSUQyRDFSZW5kZXJUYXJnZXQq
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBz
dGF0aWMgSUQyRDFSZW5kZXJUYXJnZXQqIGRlZmF1bHRSZW5kZXJUYXJnZXQgPSBudWxscHRyOwot
ICAgIGlmICghZGVmYXVsdFJlbmRlclRhcmdldCkgewotICAgICAgICBhdXRvIHJlbmRlclRhcmdl
dFByb3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIHJl
bmRlclRhcmdldFByb3BlcnRpZXMudXNhZ2UgPSBEMkQxX1JFTkRFUl9UQVJHRVRfVVNBR0VfR0RJ
X0NPTVBBVElCTEU7Ci0gICAgICAgIGF1dG8gaHduZFJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBE
MkQxOjpId25kUmVuZGVyVGFyZ2V0UHJvcGVydGllcyg6OkdldERlc2t0b3BXaW5kb3coKSwgRDJE
MTo6U2l6ZVUoMTAsIDEwKSk7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBzeXN0ZW1GYWN0b3J5KCkt
PkNyZWF0ZUh3bmRSZW5kZXJUYXJnZXQoJnJlbmRlclRhcmdldFByb3BlcnRpZXMsICZod25kUmVu
ZGVyVGFyZ2V0UHJvcGVydGllcywgcmVpbnRlcnByZXRfY2FzdDxJRDJEMUh3bmRSZW5kZXJUYXJn
ZXQqKj4oJmRlZmF1bHRSZW5kZXJUYXJnZXQpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VD
Q0VFREVEKGhyKSk7Ci0gICAgICAgIGRlZmF1bHRSZW5kZXJUYXJnZXQtPkFkZFJlZigpOwotICAg
IH0KLQotICAgIHJldHVybiBkZWZhdWx0UmVuZGVyVGFyZ2V0OwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUluaXQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKLXsK
LSAgICBpZiAoIWhkYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSEJJVE1BUCBiaXRtYXAgPSBz
dGF0aWNfY2FzdDxIQklUTUFQPihHZXRDdXJyZW50T2JqZWN0KGhkYywgT0JKX0JJVE1BUCkpOwot
Ci0gICAgRElCUGl4ZWxEYXRhIHBpeGVsRGF0YShiaXRtYXApOwotCi0gICAgYXV0byB0YXJnZXRQ
cm9wZXJ0aWVzID0gRGlyZWN0MkQ6OnJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKLQotICAgIENP
TVB0cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9
IHN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRhcmdldFByb3BlcnRpZXMs
ICZyZW5kZXJUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUkVDVCBjbGllbnRSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBwaXhlbERhdGEu
c2l6ZSgpKTsKLSAgICBociA9IHJlbmRlclRhcmdldC0+QmluZERDKGhkYywgJmNsaWVudFJlY3Qp
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBv
d25lZFBsYXRmb3JtQ29udGV4dCA9IG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+
KHJlbmRlclRhcmdldC5nZXQoKSk7Ci0gICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZShXVEZNb3ZlKG93bmVkUGxhdGZvcm1Db250ZXh0KSwgQml0bWFwUmVuZGVy
aW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7Ci0gICAgbV9kYXRhLT5tX2hkYyA9IGhkYzsKLQot
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBzdGFydHMgaW4gc3luYyB3aXRoIG91ciBzdGF0
ZS4KLSAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3IoKSk7Ci0gICAgc2V0UGxhdGZv
cm1TdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNr
bmVzcyhzdHJva2VUaGlja25lc3MoKSk7Ci0gICAgLy8gRklYTUU6IG1fc3RhdGUuaW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRH
ZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQqIHBsYXRmb3JtQ29udGV4dCkKLXsKLSAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1Db250ZXh0
LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
KiBwbGF0Zm9ybUNvbnRleHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5
cGUpCi17Ci0gICAgaWYgKCFwbGF0Zm9ybUNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKnBsYXRmb3JtQ29u
dGV4dCwgcmVuZGVyaW5nVHlwZSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3Rh
cnRzIGluIHN5bmMgd2l0aCBvdXIgc3RhdGUuCi0gICAgc2V0UGxhdGZvcm1GaWxsQ29sb3IoZmls
bENvbG9yKCkpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7Ci0g
ICAgc2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKCkpOwotICAgIC8v
IEZJWE1FOiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb252ZXJ0SW50ZXJw
b2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1D
b250ZXh0KCkpKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6On5HcmFwaGljc0NvbnRl
eHREaXJlY3QyRCgpCi17Ci0gICAgZGVsZXRlIG1fZGF0YTsKLX0KLQotUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25z
dAotewotICAgIHJldHVybiAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQoKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnN5bmNDb250ZXh0KFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1JRDJEMVJlbmRlclRh
cmdldCogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyZW5kZXJUYXJnZXQoKQotewot
ICAgIGlmICghbV9wbGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG1fcGxhdGZvcm1Db250ZXh0Lm1fdHJhbnNwYXJlbmN5TGF5
ZXJTdGFjay5sYXN0KCkucmVuZGVyVGFyZ2V0LmdldCgpOwotCi0gICAgcmV0dXJuIG1fcGxhdGZv
cm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6c2V0QWxwaGEoZmxvYXQgYWxwaGEpCi17Ci0gICAgQVNTRVJUKG1fcGxhdGZv
cm1Db250ZXh0Lm1fdHJhbnNwYXJlbmN5TGF5ZXJTdGFjay5pc0VtcHR5KCkpOwotICAgIG1fYWxw
aGEgPSBhbHBoYTsKLX0KLQotZmxvYXQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpj
dXJyZW50R2xvYmFsQWxwaGEoKSBjb25zdAotewotICAgIGlmICghbV9wbGF0Zm9ybUNvbnRleHQu
bV90cmFuc3BhcmVuY3lMYXllclN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fcGxh
dGZvcm1Db250ZXh0Lm1fdHJhbnNwYXJlbmN5TGF5ZXJTdGFjay5sYXN0KCkub3BhY2l0eTsKLQot
ICAgIHJldHVybiBtX2FscGhhOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpz
YXZlKCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKLSAgICBEaXJlY3QyRDo6c2F2
ZSgqcGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpyZXN0b3JlKCkKLXsKLSAgICBpZiAoIXN0YWNrU2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKLSAgICBEaXJlY3QyRDo6cmVzdG9yZSgq
cGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpk
cmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhdXRv
JiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZSgq
cGxhdGZvcm1Db250ZXh0KCksIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgaW1h
Z2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywgc3RhdGUuYWxwaGEsIERpcmVjdDJE
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpyZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwg
Ym9vbCBzdXBwb3J0QWxwaGFCbGVuZCkKLXsKLSAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSAhbV9k
YXRhLT5tX2hkYyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBpZiAoIWNyZWF0ZWRC
aXRtYXApIHsKLSAgICAgICAgRGlyZWN0MkQ6OnJlc3RvcmUoKnBsYXRmb3JtQ29udGV4dCgpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghaGRjIHx8IGRzdFJlY3QuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHNvdXJjZUJpdG1hcCA9IGFkb3B0R0RJ
T2JqZWN0KHN0YXRpY19jYXN0PEhCSVRNQVA+KDo6R2V0Q3VycmVudE9iamVjdChoZGMsIE9CSl9C
SVRNQVApKSk7Ci0KLSAgICBESUJQaXhlbERhdGEgcGl4ZWxEYXRhKHNvdXJjZUJpdG1hcC5nZXQo
KSk7Ci0gICAgQVNTRVJUKHBpeGVsRGF0YS5iaXRzUGVyUGl4ZWwoKSA9PSAzMik7Ci0KLSAgICBh
dXRvIGJpdG1hcFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpOwotCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBhdXRvJiBwbGF0Zm9ybUNvbnRl
eHQgPSAqdGhpcy0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+
IGJpdG1hcDsKLSAgICBIUkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgp
LT5DcmVhdGVCaXRtYXAocGl4ZWxEYXRhLnNpemUoKSwgcGl4ZWxEYXRhLmJ1ZmZlcigpLCBwaXhl
bERhdGEuYnl0ZXNQZXJSb3coKSwgJmJpdG1hcFByb3BlcnRpZXMsICZiaXRtYXApOwotICAgIEFT
U0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIFBsYXRmb3JtQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihwbGF0Zm9ybUNvbnRleHQpOwotCi0gICAgLy8gTm90ZTogVGhlIGNvbnRlbnQgaW4g
dGhlIEhEQyBpcyBpbnZlcnRlZCBjb21wYXJlZCB0byBEaXJlY3QyRCwgc28gaXQgbmVlZHMgdG8g
YmUgZmxpcHBlZC4KLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFy
Z2V0KCk7Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiBjdXJyZW50VHJhbnNmb3JtOwotICAgIGNv
bnRleHQtPkdldFRyYW5zZm9ybSgmY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBBZmZpbmVUcmFu
c2Zvcm0gdHJhbnNmb3JtKGN1cnJlbnRUcmFuc2Zvcm0pOwotICAgIHRyYW5zZm9ybS50cmFuc2xh
dGUoZHN0UmVjdC5sb2NhdGlvbigpKTsKLSAgICB0cmFuc2Zvcm0uc2NhbGUoMS4wLCAtMS4wKTsK
LSAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKDAsIC1kc3RSZWN0LmhlaWdodCgpKTsKLQotICAgIGNv
bnRleHQtPlNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwotICAgIGNvbnRleHQtPkRyYXdCaXRtYXAo
Yml0bWFwLmdldCgpLCBEMkQxOjpSZWN0RigwLCAwLCBkc3RSZWN0LndpZHRoKCksIGRzdFJlY3Qu
aGVpZ2h0KCkpKTsKLQotICAgIDo6RGVsZXRlREMoaGRjKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
IHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHls
ZSkKLXsKLSAgICBEaXJlY3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihtX3BsYXRmb3Jt
Q29udGV4dCwgcmVjdCwgc3R5bGUpOwotfQotCi1HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYgcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVuZGVy
aW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKLSAgICA6IG1fcGxhdGZvcm1Db250ZXh0KHBs
YXRmb3JtQ29udGV4dCkKLSAgICAsIG1fcmVuZGVyZXJUeXBlKHJlbmRlcmluZ1R5cGUpCi17Ci0g
ICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fcmVuZGVyZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpC
aXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQotICAgICAgICBiZWdpbkRyYXco
KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGUoc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiYm
IG93bmVkUGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVu
ZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKLSAgICA6IG1fb3duZWRQbGF0Zm9ybUNv
bnRleHQoV1RGTW92ZShvd25lZFBsYXRmb3JtQ29udGV4dCkpCi0gICAgLCBtX3BsYXRmb3JtQ29u
dGV4dCgqbV9vd25lZFBsYXRmb3JtQ29udGV4dCkKLSAgICAsIG1fcmVuZGVyZXJUeXBlKHJlbmRl
cmluZ1R5cGUpCi17Ci0gICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcmVuZGVyZXJUeXBlID09IEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQotICAg
ICAgICBiZWdpbkRyYXcoKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCkKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1D
b250ZXh0LnJlbmRlclRhcmdldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wbGF0
Zm9ybUNvbnRleHQuYmVnaW5EcmF3Q291bnQpCi0gICAgICAgIGVuZERyYXcoKTsKLX0KLQotSUQy
RDFTb2xpZENvbG9yQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpicnVzaFdpdGhDb2xv
cihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5i
cnVzaFdpdGhDb2xvcihjb2xvcldpdGhHbG9iYWxBbHBoYShjb2xvcikpLmdldCgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y2xpcChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGlw
KGNvbnN0IFBhdGgmIHBhdGgpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlOjpjbGlwKElEMkQxR2VvbWV0cnkqIHBhdGgpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBh
ZmZpbmVUcmFuc2Zvcm0pCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlOjpmbHVzaCgpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OjpiZWdpbkRyYXcoKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LmJlZ2luRHJhdygpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kRHJhdygpCi17Ci0gICAg
bV9wbGF0Zm9ybUNvbnRleHQuZW5kRHJhdygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTo6cmVzdG9yZSgpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlOjpzYXZlKCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGU6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKLXsKLSAgICBBU1NFUlQobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0
KCkpOwotICAgIG1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5TZXRUcmFuc2Zvcm0o
dHJhbnNmb3JtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnRy
YW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTo6cm90YXRlKGZsb2F0IGFuZ2xlKQotewotfQotCi1EMkQxX0NPTE9SX0Yg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbnN0IENvbG9y
JiBjb2xvcikgY29uc3QKLXsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvQ29sb3JU
eXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7Ci0gICAgcmV0dXJuIEQyRDE6OkNv
bG9yRihyLCBnLCBiLCBhICogbV9kYXRhLT5jdXJyZW50R2xvYmFsQWxwaGEoKSk7Ci19Ci0KLUlE
MkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzb2xpZFN0cm9rZUJydXNoKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRTdHJva2VCcnVzaC5n
ZXQoKTsKLX0KLQotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNvbGlkRmls
bEJydXNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRG
aWxsQnJ1c2guZ2V0KCk7Ci19Ci0KLUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpwYXR0ZXJuU3Ryb2tlQnJ1c2goKSBjb25zdAotewotICAgIHJldHVybiBwbGF0Zm9ybUNvbnRl
eHQoKS0+bV9wYXR0ZXJuU3Ryb2tlQnJ1c2guZ2V0KCk7Ci19Ci0KLUlEMkQxQnJ1c2gqIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpwYXR0ZXJuRmlsbEJydXNoKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVybkZpbGxCcnVzaC5nZXQoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YmVnaW5EcmF3KCkKLXsKLSAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+YmVnaW5EcmF3KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmVuZERyYXcoKQotewotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5lbmREcmF3KCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZsdXNoKCkKLXsKLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpmbHVzaCgqcGxhdGZvcm1Db250ZXh0KCkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3UGF0dGVybihjb25zdCBQ
bGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCi17Ci0gICAgaWYgKCFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgYXV0byB0aWxlSW1hZ2UgPSBpbWFnZTsKLSAgICBEaXJlY3QyRDo6
ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgpLCBXVEZNb3ZlKHRpbGVJbWFnZSksIEludFNp
emUoaW1hZ2Uuc2l6ZSgpKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsK
LX0KLQotLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4K
LXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotewotICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5
KCkpOwotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJh
d1JlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZp
bGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldExpbmVDYXAoTGluZUNhcCkKLXsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldExpbmVKb2luKExp
bmVKb2luKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0
U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlOjpzZXRNaXRlckxpbWl0KGZsb2F0IGNhbnZhc01pdGVyTGltaXQpCi17Ci0g
ICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0RGFzaE9mZnNldChjYW52YXNNaXRlckxpbWl0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldERhc2hPZmZzZXQoZmxv
YXQgZGFzaE9mZnNldCkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXREYXNoT2Zmc2V0KGRh
c2hPZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0
UGF0dGVybldpZHRoKGZsb2F0IHBhdHRlcm5XaWR0aCkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4
dC5zZXRQYXR0ZXJuV2lkdGgocGF0dGVybldpZHRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6OnNldFBhdHRlcm5PZmZzZXQoZmxvYXQgcGF0dGVybk9mZnNldCkK
LXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRQYXR0ZXJuT2Zmc2V0KHBhdHRlcm5PZmZzZXQp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0U3Ryb2tlVGhp
Y2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRTdHJv
a2VUaGlja25lc3ModGhpY2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGU6OnNldERhc2hlcyhjb25zdCBEYXNoQXJyYXkmIGRhc2hlcykKLXsKLSAgICBtX3Bs
YXRmb3JtQ29udGV4dC5zZXREYXNoZXMoZGFzaGVzKTsKLX0KLQotRDJEMV9TVFJPS0VfU1RZTEVf
UFJPUEVSVElFUyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnN0cm9rZVN0eWxlUHJv
cGVydGllcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEQyRDE6OlN0cm9rZVN0eWxlUHJvcGVydGll
cyhtX3BsYXRmb3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUNh
cCwgbV9wbGF0Zm9ybUNvbnRleHQubV9saW5lQ2FwLCBtX3BsYXRmb3JtQ29udGV4dC5tX2xpbmVK
b2luLCBtX3BsYXRmb3JtQ29udGV4dC5tX21pdGVyTGltaXQsIEQyRDFfREFTSF9TVFlMRV9TT0xJ
RCwgMC4wZik7Ci19Ci0KLUlEMkQxU3Ryb2tlU3R5bGUqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpzdHJva2VTdHlsZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKLSAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPnN0cm9rZVN0eWxlKCk7Ci19Ci0KLS8v
IFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQyKQotewotICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQotICAg
ICAgICByZXR1cm47Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIERpcmVj
dDJEOjpkcmF3TGluZSgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5z
dHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3Rh
dGUuc2hvdWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4
dCgpLCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJv
a2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKLXsKLSAgICBpZiAoIW1fc3RhdGUuc3Ry
b2tlUGF0dGVybikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1F
OiBUaGlzIGlzbid0IHJlYWxseSBuZWVkZWQgb24gV2luZG93cwotCi0gICAgY29uc3QgZmxvYXQg
cGF0dGVybkFscGhhID0gMTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuU3Ryb2tl
QnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0
dGVybigqdGhpcywgcGF0dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RNKSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OmFwcGx5RmlsbFBhdHRlcm4oKQotewotICAgIGlmICghbV9z
dGF0ZS5maWxsUGF0dGVybikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8v
IEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBuZWVkZWQgb24gV2luZG93cwotCi0gICAgY29uc3Qg
ZmxvYXQgcGF0dGVybkFscGhhID0gMTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJu
RmlsbEJydXNoID0gYWRvcHRDT00obV9zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1Q
YXR0ZXJuKCp0aGlzLCBwYXR0ZXJuQWxwaGEsIHVzZXJUb0Jhc2VDVE0pKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAg
ICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgp
OwotICAgIERpcmVjdDJEOjpkcmF3UGF0aChjb250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6U3Ryb2tl
U291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRo
KQotewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1D
b250ZXh0KCk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxQYXRoKGNvbnRleHQsIHBhdGgsIERpcmVjdDJE
OjpGaWxsU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCi17Ci0gICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXV0byYgY29udGV4dCA9ICpw
bGF0Zm9ybUNvbnRleHQoKTsKLSAgICBEaXJlY3QyRDo6c3Ryb2tlUGF0aChjb250ZXh0LCBwYXRo
LCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwotICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgRGlyZWN0
MkQ6OmZpbGxSZWN0KGNvbnRleHQsIHJlY3QsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCAq
dGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvcikKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXV0
byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3Qo
Y29udGV4dCwgcmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKLXsKLSAgICBhdXRvIGJydXNoID0gZ3JhZGllbnQu
Y3JlYXRlQnJ1c2gobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIGlmICgh
YnJ1c2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhHcmFk
aWVudChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgYnJ1c2guZ2V0KCkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0
ZS5jb21wb3NpdGVPcGVyYXRvcjsKLQotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRl
T3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2Rl
KTsKLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9y
LCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwg
QmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpm
aWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvcikKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgRGly
ZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGNvbG9yLCBE
aXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXV0byYgY29udGV4
dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoY29udGV4dCwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBEaXJlY3QyRDo6RmlsbFNvdXJj
ZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgRGlyZWN0MkQ6OmNsaXAoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Ci17Ci0gICAgRGlyZWN0MkQ6OmNsaXBPdXQoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRo
KQotewotICAgIERpcmVjdDJEOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBh
dGgsIFdpbmRSdWxlIGNsaXBSdWxlKQotewotICAgIERpcmVjdDJEOjpjbGlwUGF0aCgqcGxhdGZv
cm1Db250ZXh0KCksIHBhdGgsIGNsaXBSdWxlKTsKLX0KLQotSW50UmVjdCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIERpcmVjdDJEOjpT
dGF0ZTo6Z2V0Q2xpcEJvdW5kcygqcGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpiZWdpblRyYW5z
cGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0OjpiZWdp
blRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwotICAgIHNhdmUoKTsKLQotICAgIG1fc3RhdGUu
YWxwaGEgPSBvcGFjaXR5OwotCi0gICAgRGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
KnBsYXRmb3JtQ29udGV4dCgpLCBvcGFjaXR5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAgIEdyYXBo
aWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBEaXJlY3QyRDo6ZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKnBsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIG1fc3RhdGUuYWxwaGEg
PSBtX2RhdGEtPmN1cnJlbnRHbG9iYWxBbHBoYSgpOwotCi0gICAgcmVzdG9yZSgpOwotfQotCi1i
b29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygp
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIGlmIChmbGFn
cyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCi0gICAgICAg
IERpcmVjdDJEOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKG1fcGxhdGZvcm1Db250ZXh0LCBz
dGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0
cm9rZVN0eWxlKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBp
ZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAgICAg
IGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICAgICAgLy8gTWVh
bmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52
YXNSZW5kZXJpbmdDb250ZXh0Ci0gICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2lu
Y2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICAgICAg
YXV0byYgbXV0YWJsZVN0YXRlID0gY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHRTdGF0ZSY+KGdy
YXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpOwotICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0
ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgbXV0YWJsZVN0YXRlLnNoYWRvd09m
ZnNldCA9IHsgc2hhZG93T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVy
YXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6
c2V0U2hvdWxkQW50aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxp
YXMpOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VDb2xvckNoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUuc3Ryb2tlQ29sb3IgPT0g
Y29sb3IpOwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZFN0cm9rZUJydXNoID0g
YnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7ICAgIAotICAgIH0KLSAgICAKLSAgICBpZiAo
ZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpIHsK
LSAgICAgICAgQVNTRVJUKG1fc3RhdGUuZmlsbENvbG9yID09IGNvbG9yKTsKLSAgICAgICAgcGxh
dGZvcm1Db250ZXh0KCktPm1fc29saWRGaWxsQnJ1c2ggPSBicnVzaFdpdGhDb2xvcihmaWxsQ29s
b3IoKSk7Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpIHsKLSAgICAgICAgYXV0byBmb250U21vb3Ro
aW5nTW9kZSA9IGVuYWJsZSA/IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9DTEVBUlRZUEUgOiBE
MkQxX1RFWFRfQU5USUFMSUFTX01PREVfQUxJQVNFRDsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0
KCktPnJlbmRlclRhcmdldCgpLT5TZXRUZXh0QW50aWFsaWFzTW9kZShmb250U21vb3RoaW5nTW9k
ZSk7Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpBbHBoYUNoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUuYWxwaGEgPT0gYWxwaGEp
OwotICAgICAgICBtX2RhdGEtPnNldEFscGhhKGFscGhhKTsKLSAgICB9Ci0KLSAgICBpZiAoZmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHlDaGFuZ2UpKSB7Ci0gICAgICAgIEQyRDFfSU5URVJQT0xBVElPTl9NT0RFIHF1YWxpdHkgPSBE
MkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwotCi0gICAgICAgIHN3aXRj
aCAobW9kZSkgewotICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0Ogot
ICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJ
R0hCT1I7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVh
bGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKLSAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVS
UE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzoKLSAgICAgICAgICAgIHF1YWxpdHkg
PSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVI7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TWVkaXVtOgotICAgICAgICAgICAgcXVh
bGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX0NVQklDOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6Ci0gICAgICAgICAgICBx
dWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfSElHSF9RVUFMSVRZX0NVQklDOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IFNldEludGVycG9s
YXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpLCBxdWFsaXR5KTsKLSAgICB9Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17
Ci0gICAgRGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoKnBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsZWFyUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCi17Ci0gICAgRGlyZWN0MkQ6OmNsZWFyUmVjdCgqcGxhdGZvcm1Db250ZXh0
KCksIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQotewotICAgIGF1dG8mIHN0
YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4
dCgpOwotICAgIERpcmVjdDJEOjpzdHJva2VSZWN0KGNvbnRleHQsIHJlY3QsIGxpbmVXaWR0aCwg
RGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3Rh
dGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TGluZUNh
cChMaW5lQ2FwIGNhcCkKLXsKLSAgICBEaXJlY3QyRDo6c2V0TGluZUNhcCgqcGxhdGZvcm1Db250
ZXh0KCksIGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExpbmVE
YXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIGlm
IChkYXNoT2Zmc2V0IDwgMCkgewotICAgICAgICBmbG9hdCBsZW5ndGggPSAwOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGRhc2hlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGxl
bmd0aCArPSBzdGF0aWNfY2FzdDxmbG9hdD4oZGFzaGVzW2ldKTsKLSAgICAgICAgaWYgKGxlbmd0
aCkKLSAgICAgICAgICAgIGRhc2hPZmZzZXQgPSBmbW9kKGRhc2hPZmZzZXQsIGxlbmd0aCkgKyBs
ZW5ndGg7Ci0gICAgfQotCi0gICAgRGlyZWN0MkQ6OnNldExpbmVEYXNoKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgZGFzaGVzLCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKLXsKLSAgICBEaXJlY3QyRDo6c2V0TGlu
ZUpvaW4oKnBsYXRmb3JtQ29udGV4dCgpLCBqb2luKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIERpcmVjdDJE
OjpzY2FsZSgqcGxhdGZvcm1Db250ZXh0KCksIHNpemUpOwotICAgIC8vIEZJWE1FOiBtX2RhdGEt
Pm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cm90YXRlKGZsb2F0IGFuZ2xlKQotewotICAg
IERpcmVjdDJEOjpyb3RhdGUoKnBsYXRmb3JtQ29udGV4dCgpLCBhbmdsZSk7Ci0gICAgLy8gRklY
TUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZh
bHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjp0cmFuc2xhdGUoZmxvYXQg
eCwgZmxvYXQgeSkKLXsKLSAgICBEaXJlY3QyRDo6dHJhbnNsYXRlKCpwbGF0Zm9ybUNvbnRleHQo
KSwgeCwgeSk7Ci0gICAgLy8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1L
bm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAg
RGlyZWN0MkQ6OmNvbmNhdENUTSgqcGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7Ci0gICAg
Ly8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0
eSA9IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpz
ZXRDVE0oKnBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwotICAgIC8vIEZJWE1FOiBtX2Rh
dGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0K
LQotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpnZXRDVE0oSW5jbHVk
ZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gRGlyZWN0MkQ6
OlN0YXRlOjpnZXRDVE0oKnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotRmxvYXRSZWN0IEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKLXsKLSAgICByZXR1cm4gRGlyZWN0MkQ6
OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0
aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3Ry
b2tlU3R5bGUpCi17Ci0gICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBEaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dCgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50
LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIG1fc3RhdGUu
c3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRVUkxG
b3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpz
ZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCi17Ci0gICAgLy8gVGhpcyBm
dW5jdGlvbiBpcyBwcm9iYWJhbHkgbm90IG5lZWRlZC4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi1ib29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjppc0NBTGF5ZXJDb250ZXh0KCkgY29u
c3QKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmFseSBub3QgbmVlZGVkLgotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0
ZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBEaXJl
Y3QyRDo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCi17Ci0gICAgLy8gVGhpcyBpcyBhIG5vLW9wIGZvciBE
aXJlY3QyRC4KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVu
dCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
YmUgYWJsZSB0byBmaWxsIGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGlu
IEQyRC4KLSAgICAgICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBEaXJlY3QyRDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgp
LCBlbGxpcHNlLCBtX3N0YXRlLmZpbGxDb2xvciwgbV9zdGF0ZS5zdHJva2VTdHlsZSwgbV9zdGF0
ZS5zdHJva2VDb2xvciwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBz
ZSkKLXsKLSAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0YXRlLnN0cm9rZVBh
dHRlcm4pIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHN0cm9rZSBl
bGxpcHNlcyB3aXRoIHBhdHRlcm4vZ3JhZGllbnQgYnJ1c2hlcyBpbiBEMkQuCi0gICAgICAgIHN0
cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBEaXJlY3QyRDo6ZHJhd0VsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0
YXRlLnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNr
bmVzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdHbHlwaHMoY29u
c3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21v
b3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQotewotICAgIFVOVVNFRF9QQVJBTShmb250U21vb3Ro
aW5nKTsKLSAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7Ci0gICAgVmVjdG9yPHVuc2lnbmVk
IHNob3J0PiBnbHlwaHMobnVtR2x5cGhzKTsKLSAgICBWZWN0b3I8ZmxvYXQ+IGhvcml6b250YWxB
ZHZhbmNlcyhudW1HbHlwaHMpOwotICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiBnbHlw
aE9mZnNldHMobnVtR2x5cGhzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1H
bHlwaHM7ICsraSkgewotICAgICAgICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZmZXIuYWR2YW5j
ZXNDb3VudCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYXV0byBhZHZhbmNlID0g
Z2x5cGhCdWZmZXIuYWR2YW5jZXMoaSArIGZyb20pOwotICAgICAgICBpZiAoIWFkdmFuY2UpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBnbHlwaHNbaV0gPSBnbHlwaEJ1ZmZlci5n
bHlwaEF0KGkgKyBmcm9tKTsKLSAgICAgICAgaG9yaXpvbnRhbEFkdmFuY2VzW2ldID0gYWR2YW5j
ZS0+d2lkdGgoKTsKLSAgICAgICAgZ2x5cGhPZmZzZXRzW2ldLmFkdmFuY2VPZmZzZXQgPSBhZHZh
bmNlLT53aWR0aCgpOwotICAgICAgICBnbHlwaE9mZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQgPSBh
ZHZhbmNlLT5oZWlnaHQoKTsKLSAgICB9Ci0KLSAgICBkb3VibGUgc3ludGhldGljQm9sZE9mZnNl
dCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOwotCi0gICAgYXV0byYgc3RhdGUgPSBncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpkcmF3R2x5cGhzKG1fcGxhdGZv
cm1Db250ZXh0LCBEaXJlY3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkp
LCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksCi0gICAg
ICAgIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBmb250LCBzeW50aGV0aWNC
b2xkT2Zmc2V0LCBnbHlwaHMsIGhvcml6b250YWxBZHZhbmNlcywgZ2x5cGhPZmZzZXRzLCB4T2Zm
c2V0LAotICAgICAgICBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVz
cywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvcik7Ci19Ci0KLUdyYXBoaWNz
Q29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKLXsK
LSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotICAgIHJldHVybiBDbGlwVG9EcmF3aW5n
Q29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QpCi17Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5SW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGF1dG8qIGNvbnRleHQgPSAmZ3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgaWYgKGF1
dG8gc3VyZmFjZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb250ZXh0KSkK
LSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLXZvaWQg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYs
IGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0K
LSNlbmRpZgotCi0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAJ
KHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDYxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCi0K
LSNpZiBFTkFCTEUoV0VCR0wpICYmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0ci5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCIKLSNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDxkMmQxZWZm
ZWN0cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4dEdMSW1hZ2VF
eHRyYWN0b3I6On5HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yKCkgPSBkZWZhdWx0Owot
Ci1ib29sIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29s
IHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGJvb2wg
aWdub3JlTmF0aXZlSW1hZ2VBbHBoYVByZW11bHRpcGxpY2F0aW9uKQotewotICAgIGlmICghbV9p
bWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMR0w6OnBhaW50VG9D
YW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGNvbnN0IEludFNpemUmIGlt
YWdlU2l6ZSwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQotewotICAgIGlmICghaW1hZ2VQaXhlbHMgfHwgaW1hZ2VTaXplLmlzRW1wdHkoKSB8fCBj
YW52YXNTaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdF
QkdMKSAmJiBVU0UoRElSRUNUMkQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkRlbGV0ZWQ6IHN2bjprZXl3b3JkcwojIyAtMSAr
MCwwICMjCi1EYXRlIEF1dGhvciBJZCBSZXZpc2lvbiBIZWFkVVJMClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGVEaXJlY3QyRC5oCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGly
ZWN0MkQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDE0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJD
T01QdHIuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERp
cmVjdDJELmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQyZDFfMS5oPgotI2luY2x1
ZGUgPGQyZDFlZmZlY3RzLmg+Ci0jaW5jbHVkZSA8ZDJkMWhlbHBlci5oPgotI2luY2x1ZGUgPHdp
bmRvd3MuaD4KLSNpbmNsdWRlIDx3dGYvVGlueUxSVUNhY2hlLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBHcmFwaGljc0NvbnRleHQ6OkJpdG1h
cFJlbmRlcmluZ0NvbnRleHRUeXBlKTsKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUoc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiYmLCBHcmFwaGljc0Nv
bnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlKTsKLSAgICB+R3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKCk7Ci0KLSAgICB2b2lkIHN5bmNDb250ZXh0KFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJik7Ci0KLSAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3Bh
Y2l0eSk7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOwotCi0gICAgdm9pZCBjbGlw
KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgY2xpcChjb25zdCBQYXRoJik7Ci0gICAgdm9p
ZCBjbGlwKElEMkQxR2VvbWV0cnkqKTsKLQotICAgIHZvaWQgYmVnaW5EcmF3KCk7Ci0gICAgdm9p
ZCBlbmREcmF3KCk7Ci0gICAgdm9pZCBmbHVzaCgpOwotICAgIHZvaWQgc2F2ZSgpOwotICAgIHZv
aWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgdm9pZCByZXN0b3JlKCk7Ci0gICAgdm9p
ZCByb3RhdGUoZmxvYXQpOwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCk7Ci0gICAg
dm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgdm9pZCBzZXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCk7
Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbik7Ci0gICAgdm9pZCBzZXRTdHJva2VTdHls
ZShTdHJva2VTdHlsZSk7Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KTsKLSAgICB2b2lk
IHNldERhc2hPZmZzZXQoZmxvYXQpOwotICAgIHZvaWQgc2V0UGF0dGVybldpZHRoKGZsb2F0KTsK
LSAgICB2b2lkIHNldFBhdHRlcm5PZmZzZXQoZmxvYXQpOwotICAgIHZvaWQgc2V0U3Ryb2tlVGhp
Y2tuZXNzKGZsb2F0KTsKLSAgICB2b2lkIHNldERhc2hlcyhjb25zdCBEYXNoQXJyYXkmKTsKLSAg
ICB2b2lkIHNldEFscGhhKGZsb2F0KTsKLQotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBw
bGF0Zm9ybUNvbnRleHQoKSB7IHJldHVybiBtX3BsYXRmb3JtQ29udGV4dDsgfQotICAgIElEMkQx
UmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQoKTsKLQotICAgIEhEQyBtX2hkYyB7IG51bGxwdHIg
fTsKLQotICAgIGZsb2F0IGN1cnJlbnRHbG9iYWxBbHBoYSgpIGNvbnN0OwotCi0gICAgRDJEMV9T
VFJPS0VfU1RZTEVfUFJPUEVSVElFUyBzdHJva2VTdHlsZVByb3BlcnRpZXMoKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IG1f
b3duZWRQbGF0Zm9ybUNvbnRleHQ7Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIG1fcGxh
dGZvcm1Db250ZXh0OwotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5n
Q29udGV4dFR5cGUgbV9yZW5kZXJlclR5cGU7Ci0KLSAgICB1bnNpZ25lZCBiZWdpbkRyYXdDb3Vu
dCB7IDAgfTsKLQotICAgIGZsb2F0IG1fYWxwaGEgeyAxLjAgfTsKLQotICAgIGZyaWVuZCBjbGFz
cyBEMkRDb250ZXh0U3RhdGVTYXZlcjsKLX07Ci0KLWNsYXNzIEQyRENvbnRleHRTdGF0ZVNhdmVy
IHsKLXB1YmxpYzoKLSAgICBEMkRDb250ZXh0U3RhdGVTYXZlcihHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUmIGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQotICAgICAg
ICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFu
ZFJlc3RvcmUpCi0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAg
ICAgIG1fY29udGV4dC5tX3BsYXRmb3JtQ29udGV4dC5zYXZlKCk7Ci0gICAgfQotCi0gICAgfkQy
RENvbnRleHRTdGF0ZVNhdmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3Jl
KQotICAgICAgICAgICAgbV9jb250ZXh0Lm1fcGxhdGZvcm1Db250ZXh0LnJlc3RvcmUoKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIHNhdmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX3NhdmVBbmRS
ZXN0b3JlKTsKLSAgICAgICAgbV9jb250ZXh0Lm1fcGxhdGZvcm1Db250ZXh0LnNhdmUoKTsKLSAg
ICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCByZXN0b3Jl
KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAgbV9j
b250ZXh0Lm1fcGxhdGZvcm1Db250ZXh0LnJlc3RvcmUoKTsKLSAgICAgICAgbV9zYXZlQW5kUmVz
dG9yZSA9IGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgZGlkU2F2ZSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9zYXZlQW5kUmVzdG9yZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBvd25lZFBsYXRmb3JtQ29u
dGV4dDsKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUmIG1fY29udGV4dDsKLSAg
ICBib29sIG1fc2F2ZUFuZFJlc3RvcmUgeyBmYWxzZSB9OwotfTsKLQotfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dFdpbi5jcHAJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw4ICsyOCw2IEBACiAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlQ0cuaCIKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oIgogI2VuZGlmCiAKICNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKQEAgLTQwLDcgKzM4LDYgQEAKICNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+CiAKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBzdGF0aWMgdm9pZCBmaWxsV2l0aENsZWFyQ29sb3IoSEJJVE1BUCBiaXRt
YXApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0V2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5oCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDExICszMCw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cu
aCIKICNkZWZpbmUgR3JhcGhpY3NDb250ZXh0V2luIEdyYXBoaWNzQ29udGV4dENHCiAKLSNlbGlm
IFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dERpcmVjdDJELmgiCi0j
ZGVmaW5lIEdyYXBoaWNzQ29udGV4dFdpbiBHcmFwaGljc0NvbnRleHREaXJlY3QyRAotCiAjZWxp
ZiBVU0UoQ0FJUk8pCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJEaXJlY3Qy
RC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzTGF5ZXJEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGlyZWN0MkQuY3BwCShu
b25leGlzdGVudCkKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXJEaXJlY3QyRC5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAi
RGlzcGxheUxpc3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyRmFjdG9yeS5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvU2V0Rm9yU2NvcGUuaD4KLSNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0KLSNpZiBDT01QSUxFUihNU1ZDKQotLy8g
U2VlIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMXdlYTV6d2UuYXNw
eAotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1SZWY8R3JhcGhpY3NMYXllcj4gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKEdyYXBo
aWNzTGF5ZXJGYWN0b3J5KiBmYWN0b3J5LCBHcmFwaGljc0xheWVyQ2xpZW50JiBjbGllbnQsIFR5
cGUgbGF5ZXJUeXBlKQotewotICAgIGlmIChmYWN0b3J5KSB7Ci0gICAgICAgIGF1dG8gbGF5ZXIg
PSBmYWN0b3J5LT5jcmVhdGVHcmFwaGljc0xheWVyKGxheWVyVHlwZSwgY2xpZW50KTsKLSAgICAg
ICAgbGF5ZXItPmluaXRpYWxpemUobGF5ZXJUeXBlKTsKLSAgICAgICAgcmV0dXJuIGxheWVyOwot
ICAgIH0KLQotICAgIC8vIEZJWE1FOiBSZXR1cm4gYSByZWFsIERpcmVjdDJEIGdyYXBoaWNzIGxh
eWVyCi0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR3JhcGhpY3NMYXllckRpcmVjdDJEKGxheWVy
VHlwZSwgY2xpZW50KSk7Ci19Ci0KLUdyYXBoaWNzTGF5ZXJEaXJlY3QyRDo6R3JhcGhpY3NMYXll
ckRpcmVjdDJEKFR5cGUgbGF5ZXJUeXBlLCBHcmFwaGljc0xheWVyQ2xpZW50JiBjbGllbnQpCi0g
ICAgOiBHcmFwaGljc0xheWVyKGxheWVyVHlwZSwgY2xpZW50KQotewotfQotCi12b2lkIEdyYXBo
aWNzTGF5ZXJEaXJlY3QyRDo6aW5pdGlhbGl6ZShUeXBlIGxheWVyVHlwZSkKLXsKLX0KLQotR3Jh
cGhpY3NMYXllckRpcmVjdDJEOjp+R3JhcGhpY3NMYXllckRpcmVjdDJEKCkKLXsKLSAgICB3aWxs
QmVEZXN0cm95ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyRGlyZWN0MkQ6OnNldE5lZWRz
RGlzcGxheSgpCi17Ci0gICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyRGlyZWN0MkQ6
OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHIsIFNob3VsZENsaXBUb0xh
eWVyIHNob3VsZENsaXApCi17Ci0gICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0xheWVyRGlyZWN0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NMYXllckRpcmVjdDJELmgJKHJldmlzaW9uIDI4Nzgx
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVy
RGlyZWN0MkQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLQotI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKLWNsYXNzIERpc3Bs
YXlMaXN0OwotfQotCi1jbGFzcyBGbG9hdFJvdW5kZWRSZWN0OwotY2xhc3MgSW1hZ2U7Ci1jbGFz
cyBUcmFuc2Zvcm1TdGF0ZTsKLQotY2xhc3MgR3JhcGhpY3NMYXllckRpcmVjdDJEIDogcHVibGlj
IEdyYXBoaWNzTGF5ZXIgewotcHVibGljOgotCi0gICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQg
R3JhcGhpY3NMYXllckRpcmVjdDJEKFR5cGUsIEdyYXBoaWNzTGF5ZXJDbGllbnQmKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5HcmFwaGljc0xheWVyRGlyZWN0MkQoKTsKLQotcHJpdmF0
ZToKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluaXRpYWxpemUoVHlwZSkgb3ZlcnJpZGU7Ci0K
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE5lZWRzRGlzcGxheSgpIG92ZXJyaWRlOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIFNob3VsZENsaXBUb0xheWVyID0gQ2xpcFRvTGF5ZXIpIG92ZXJyaWRlOwotCi0gICAgYm9v
bCBpc0dyYXBoaWNzTGF5ZXJDQSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfR1JB
UEhJQ1NMQVlFUihXZWJDb3JlOjpHcmFwaGljc0xheWVyRGlyZWN0MkQsIGlzR3JhcGhpY3NMYXll
ckNBKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAJKHJldmlz
aW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMjMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKLQot
I2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAi
Q09NUHRyLmgiCi0jaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgotI2luY2x1
ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jaW5jbHVkZSA8
bWF0aC5oPgotI2luY2x1ZGUgPHdpbmNvZGVjLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZCk7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIGNv
bnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCi17Ci0gICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9
IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKGJh
Y2tlbmRTaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRv
KiBwbGF0Zm9ybUNvbnRleHQgPSB0YXJnZXRDb250ZXh0ID8gdGFyZ2V0Q29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCkgOiBudWxscHRyOwotICAgIGF1dG8qIHJlbmRlclRhcmdldCA9IHBsYXRmb3Jt
Q29udGV4dCA/IHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkgOiBudWxscHRyOwotCi0g
ICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgICAgIHJlbmRlclRhcmdldCA9IEdyYXBoaWNzQ29u
dGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpOwotCi0gICAgYXV0byBiaXRtYXBDb250ZXh0ID0g
RGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShzaXplLCByZW5kZXJUYXJn
ZXQsIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKCFiaXRtYXBDb250ZXh0KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBQbGF0Zm9ybUltYWdlUHRyIGJpdG1hcDsKLSAgICBIUkVTVUxUIGhyID0g
Yml0bWFwQ29udGV4dC0+R2V0Qml0bWFwKCZiaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwbGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5p
cXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPihiaXRtYXBDb250ZXh0LmdldCgpLCBbdGhpc10o
KSB7Ci0gICAgICAgIG1fZGF0YS5sb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKLSAgICB9LCBb
dGhpc10oKSB7Ci0gICAgICAgIG1fZGF0YS5tYXJrQnVmZmVyT3V0T2ZTeW5jKCk7Ci0gICAgfSk7
Ci0KLSAgICBpZiAoIXBsYXRmb3JtQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dERpcmVjdDJEPihw
bGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29u
dGV4dFR5cGU6OkdQVU1lbW9yeSk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChzaXplLCBiYWNrZW5kU2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHBsYXRmb3JtQ29udGV4dCks
IFdURk1vdmUoY29udGV4dCksIFdURk1vdmUoYml0bWFwKSkpOwotfQotCi1zdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
OjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCi17Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUo
c2l6ZSwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsKLX0KLQotSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKGNvbnN0
IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBzdGQ6
OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+JiYgcGxhdGZvcm1Db250ZXh0LCBz
dGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmIGNvbnRleHQsIFBsYXRmb3JtSW1hZ2VQ
dHImJiBiaXRtYXApCi0gICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFj
a2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKLSAgICAsIG1fcGxhdGZvcm1D
b250ZXh0KFdURk1vdmUocGxhdGZvcm1Db250ZXh0KSkKLSAgICAsIG1fY29udGV4dChXVEZNb3Zl
KGNvbnRleHQpKQotICAgICwgbV9iaXRtYXAoV1RGTW92ZShiaXRtYXApKQotewotfQotCi1HcmFw
aGljc0NvbnRleHQmIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gKm1fY29udGV4dDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZDo6Zmx1c2hDb250ZXh0KCkKLXsKLSAgICBjb250ZXh0KCkuZmx1c2goKTsKLX0KLQot
UmVmUHRyPE5hdGl2ZUltYWdlPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weU5hdGl2
ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAotewotICAgIENPTVB0
cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0OwotICAgIEhSRVNVTFQgaHIg
PSBjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVy
ZmFjZSgmYml0bWFwVGFyZ2V0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBpbWFnZTsKLSAgICBociA9
IGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZpbWFnZSk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgLy8gRklYTUU6IG1fZGF0YS5kYXRhIGlzIG51bGxwdHIgZXZlbiB3aGVuIGFz
a2luZyB0byBjb3B5IGJhY2tpbmcgc3RvcmUgbGVhZGluZyB0byB0ZXN0IGZhaWx1cmVzLgotICAg
IGlmIChjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSAmJiBtX2RhdGEuZGF0YS5pc0Vt
cHR5KCkpCi0gICAgICAgIGNvcHlCZWhhdmlvciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOwotCi0g
ICAgQ2hlY2tlZFNpemUgbnVtQnl0ZXMgPSBDaGVja2VkVWludDMyKG1fZGF0YS5iYWNraW5nU3Rv
cmVTaXplLmhlaWdodCgpKSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKLSAgICBpZiAobnVtQnl0ZXMu
aGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChjb3B5
QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSkgewotICAgICAgICBEMkQxX1JFQ1RfVSBiYWNr
aW5nU3RvcmVEaW1lbnN0aW9ucyA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9kYXRhLmJhY2tpbmdT
dG9yZVNpemUpOwotICAgICAgICBpbWFnZS0+Q29weUZyb21NZW1vcnkoJmJhY2tpbmdTdG9yZURp
bWVuc3Rpb25zLCBtX2RhdGEuZGF0YS5kYXRhKCksIDMyKTsKLQotICAgIH0KLQotICAgIHJldHVy
biBOYXRpdmVJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotc3RhdGljIFBsYXRm
b3JtSW1hZ2VQdHIgY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoSUQyRDFCaXRtYXBSZW5k
ZXJUYXJnZXQqIGJpdG1hcFRhcmdldCwgSUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRTaXpl
JiBib3VuZHMpCi17Ci0gICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IGltYWdlID8gbmF0aXZlSW1h
Z2VTaXplKGltYWdlKSA6IEZsb2F0U2l6ZSgpOwotCi0gICAgaWYgKGltYWdlICYmIChzdGF0aWNf
Y2FzdDxzaXplX3Q+KGltYWdlU2l6ZS53aWR0aCgpKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJv
dW5kcy53aWR0aCgpKSB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6ZS5oZWlnaHQoKSkg
IT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkgewotICAgICAgICBDT01Q
dHI8SUQyRDFCaXRtYXA+IGNyb3BwZWRCaXRtYXAgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwKGJp
dG1hcFRhcmdldCwgYm91bmRzKTsKLSAgICAgICAgaWYgKGNyb3BwZWRCaXRtYXApIHsKLSAgICAg
ICAgICAgIGF1dG8gc291cmNlUmVjdCA9IEQyRDE6OlJlY3RVKDAsIDAsIGJvdW5kcy53aWR0aCgp
LCBib3VuZHMuaGVpZ2h0KCkpOwotICAgICAgICAgICAgSFJFU1VMVCBociA9IGNyb3BwZWRCaXRt
YXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIGltYWdlLCAmc291cmNlUmVjdCk7Ci0gICAgICAg
ICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JvcHBlZEJp
dG1hcDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBpbWFnZTsKLX0KLQotc3RhdGlj
IFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChJRDJE
MUJpdG1hcFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0LCBDT01QdHI8SUQyRDFCaXRtYXA+JiYg
aW1hZ2UsIEludFNpemUgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgaWYgKHJlc29sdXRpb25T
Y2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246Olll
cykKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShiaXRtYXBU
YXJnZXQsIGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAgICAgICAv
LyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgc2NhbGVkIHZlcnNpb24KLSAgICAgICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsK
LX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2Vy
dmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFBsYXRmb3JtSW1hZ2VQdHIgaW1hZ2U7Ci0gICAg
aWYgKHJlc29sdXRpb25TY2FsZSgpID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNl
cnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5
QmVoYXZpb3IpLT5wbGF0Zm9ybUltYWdlKCk7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNv
cHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSktPnBsYXRmb3JtSW1hZ2UoKTsKLQot
ICAgIGF1dG8gYml0bWFwVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDxJRDJEMUJpdG1hcFJlbmRl
clRhcmdldCo+KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgcmV0dXJuIGNyZWF0
ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LCBXVEZNb3ZlKGlt
YWdlKSwgaW50ZXJuYWxTaXplKCksIHJlc29sdXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJlc29sdXRp
b24pOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpzaW5r
SW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAg
Q09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7Ci0gICAgSFJFU1VM
VCBociA9IGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5
SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBQbGF0Zm9ybUltYWdlUHRyIGltYWdlID0gY29weU5h
dGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKS0+cGxhdGZvcm1JbWFnZSgpOwotICAgIHJl
dHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdldC5n
ZXQoKSwgV1RGTW92ZShpbWFnZSksIGludGVybmFsU2l6ZSgpLCByZXNvbHV0aW9uU2NhbGUoKSwg
cHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUGxhdGZvcm1JbWFnZVB0ciBJbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZDo6Y29tcGF0aWJsZUJpdG1hcChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVy
VGFyZ2V0KQotewotICAgIGxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOwotCi0gICAgaWYgKCFy
ZW5kZXJUYXJnZXQpCi0gICAgICAgIHJldHVybiBiaXRtYXA7Ci0KLSAgICBpZiAobV9wbGF0Zm9y
bUNvbnRleHQtPnJlbmRlclRhcmdldCgpID09IHJlbmRlclRhcmdldCkgewotICAgICAgICBDT01Q
dHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldChRdWVyeSwgcmVuZGVyVGFy
Z2V0KTsKLSAgICAgICAgaWYgKGJpdG1hcFRhcmdldCkgewotICAgICAgICAgICAgQ09NUHRyPElE
MkQxQml0bWFwPiBiYWNraW5nQml0bWFwOwotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChiaXRt
YXBUYXJnZXQtPkdldEJpdG1hcCgmYmFja2luZ0JpdG1hcCkpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGJhY2tpbmdCaXRtYXAgIT0gbV9iaXRtYXApCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBiaXRtYXA7Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBkcmF3IGFuIElEMkQxQml0
bWFwIHRvIGl0c2VsZi4gTXVzdCByZXR1cm4gYSBjb3B5LgotICAgICAgICAgICAgICAgIENPTVB0
cjxJRDJEMUJpdG1hcD4gY29waWVkQml0bWFwOwotICAgICAgICAgICAgICAgIGlmIChTVUNDRUVE
RUQocmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgRGly
ZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvcGllZEJpdG1hcCkpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChTVUNDRUVERUQoY29waWVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxs
cHRyLCBtX2JpdG1hcC5nZXQoKSwgbnVsbHB0cikpKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGNvcGllZEJpdG1hcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHNpemUgPSBtX2JpdG1hcC0+R2V0UGl4ZWxTaXpl
KCk7Ci0gICAgQVNTRVJUKHNpemUuaGVpZ2h0ICYmIHNpemUud2lkdGgpOwotCi0gICAgQ2hlY2tl
ZFVpbnQzMiBudW1CeXRlcyA9IHNpemUud2lkdGggKiBzaXplLmhlaWdodCAqIDQ7Ci0gICAgaWYg
KG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAvLyBDb3B5IHRoZSBiaXRzIGZyb20gY3VycmVudCByZW5kZXJUYXJnZXQgdG8gdGhlIG91dHB1
dCB0YXJnZXQuCi0gICAgLy8gV2UgY2Fubm90IGFjY2VzcyB0aGUgZGF0YSBiYWNraW5nIGFuIElX
SUNCaXRtYXAgd2hpbGUgYW4gYWN0aXZlIGRyYXcgc2Vzc2lvbiBpcyBvcGVuLgotICAgIGNvbnRl
eHQtPmVuZERyYXcoKTsKLQotICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IHNvdXJjZURl
dmljZUNvbnRleHQgPSBtX3BsYXRmb3JtQ29udGV4dC0+ZGV2aWNlQ29udGV4dCgpOwotICAgIGlm
ICghc291cmNlRGV2aWNlQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBD
T01QdHI8SUQyRDFCaXRtYXAxPiBzb3VyY2VDUFVCaXRtYXA7Ci0gICAgRDJEMV9CSVRNQVBfUFJP
UEVSVElFUzEgYml0bWFwUHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFf
QklUTUFQX09QVElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFX
LCBEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7Ci0gICAgSFJFU1VMVCBociA9IHNvdXJjZURldmlj
ZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChtX2JpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG51bGxwdHIs
IGJ5dGVzUGVyUm93LCBiaXRtYXBQcm9wZXJ0aWVzLCAmc291cmNlQ1BVQml0bWFwKTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFz
b3VyY2VDUFVCaXRtYXApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaHIgPSBzb3Vy
Y2VDUFVCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIG1fYml0bWFwLmdldCgpLCBudWxs
cHRyKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgRDJEMV9NQVBQRURfUkVDVCBtYXBwZWRTb3VyY2VEYXRhOwotICAgIGhyID0gc291cmNl
Q1BVQml0bWFwLT5NYXAoRDJEMV9NQVBfT1BUSU9OU19SRUFELCAmbWFwcGVkU291cmNlRGF0YSk7
Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IHRhcmdldERldmljZUNvbnRleHQ7Ci0gICAgaHIg
PSByZW5kZXJUYXJnZXQtPlF1ZXJ5SW50ZXJmYWNlKCZ0YXJnZXREZXZpY2VDb250ZXh0KTsKLSAg
ICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvbXBh
dGlibGVCaXRtYXA7Ci0gICAgaHIgPSB0YXJnZXREZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAo
Yml0bWFwLT5HZXRQaXhlbFNpemUoKSwgbWFwcGVkU291cmNlRGF0YS5iaXRzLCBtYXBwZWRTb3Vy
Y2VEYXRhLnBpdGNoLCBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpLCAmY29tcGF0aWJsZUJp
dG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5Vbm1hcCgpOwotICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpKTsKLQotICAgIGNvbnRleHQtPmJlZ2luRHJhdygpOwotCi0gICAgcmV0dXJuIGNvbXBh
dGlibGVCaXRtYXA7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmRyYXco
R3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKLXsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBh
ZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKCkpOwotCi0gICAgYXV0byBjb21w
YXRpYmxlQml0bWFwID0gY29tcGF0aWJsZUJpdG1hcChkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKS0+cmVuZGVyVGFyZ2V0KCkpOwotCi0gICAgRmxvYXRTaXplIGN1cnJlbnRJbWFnZVNpemUg
PSBuYXRpdmVJbWFnZVNpemUoY29tcGF0aWJsZUJpdG1hcCk7Ci0gICAgaWYgKGN1cnJlbnRJbWFn
ZVNpemUuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRlc3RDb250ZXh0LmRyYXdO
YXRpdmVJbWFnZShjb21wYXRpYmxlQml0bWFwLCBjdXJyZW50SW1hZ2VTaXplLCBkZXN0UmVjdCwg
YWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFk
anVzdGVkU3JjUmVjdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUoKSk7Ci0KLSAgICBpZiAoYXV0byBp
bWFnZSA9IGNvcHlJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5n
U3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIGltYWdlLT5kcmF3UGF0dGVy
bihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kOjpjbGlwVG9NYXNrKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgc3RkOjpvcHRpb25hbDxkb3VibGU+
LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4geyB9OwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVy
KG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbnVsbHB0cik7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1
ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwg
c3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBudWxscHRyKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oCShu
b25leGlzdGVudCkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShESVJFQ1QyRCkKLQot
I2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2Mu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQgewotICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURUQoSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQpOwotICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2lu
ZG93Kik7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwot
Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZTsKLQotICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gY29w
eU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBv
dmVycmlkZTsKLSAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5LCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgUmVmUHRyPEltYWdlPiBz
aW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNs
aXBUb01hc2soR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkgb3Zl
cnJpZGU7Ci0KLSAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0
ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92
ZXJyaWRlOwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAg
c3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZm
ZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwotCi1wcm90ZWN0ZWQ6Ci0gICAgSW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6
ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UpOwotCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBtX3BsYXRmb3JtQ29u
dGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Ci0g
ICAgUGxhdGZvcm1JbWFnZVB0ciBtX2JpdG1hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJE
LmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDMwNCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIK
LQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKLSNpbmNsdWRlICJJbnRQb2ludC5oIgotI2luY2x1
ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDxXaW5Db2RlYy5o
PgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1JbWFnZURlY29kZXJEaXJlY3QyRDo6SW1hZ2VEZWNvZGVy
RGlyZWN0MkQoKQotewotfQotCi1JV0lDSW1hZ2luZ0ZhY3RvcnkyKiBJbWFnZURlY29kZXJEaXJl
Y3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKQotewotICAgIHN0YXRpYyBJV0lDSW1hZ2luZ0Zh
Y3RvcnkyKiB3aWNJbWFnaW5nRmFjdG9yeSA9IG51bGxwdHI7Ci0gICAgaWYgKCF3aWNJbWFnaW5n
RmFjdG9yeSkgewotICAgICAgICBIUkVTVUxUIGhyID0gQ29DcmVhdGVJbnN0YW5jZShDTFNJRF9X
SUNJbWFnaW5nRmFjdG9yeSwgbnVsbHB0ciwgQ0xTQ1RYX0lOUFJPQ19TRVJWRVIsIElJRF9JV0lD
SW1hZ2luZ0ZhY3RvcnkyLCAoTFBWT0lEKikmd2ljSW1hZ2luZ0ZhY3RvcnkpOwotICAgICAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gd2ljSW1h
Z2luZ0ZhY3Rvcnk7Ci19Ci0KLXNpemVfdCBJbWFnZURlY29kZXJEaXJlY3QyRDo6Ynl0ZXNEZWNv
ZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkgY29uc3QKLXsKLSAgICAvLyBTZXQgdG8gbWF0Y2gg
dmFsdWUgdXNlZCBmb3IgQ29yZUdyYXBoaWNzLgotICAgIHJldHVybiAxMzA4ODsKLX0KLQotU3Ry
aW5nIEltYWdlRGVjb2RlckRpcmVjdDJEOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Ci17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLWJvb2wgSW1h
Z2VEZWNvZGVyRGlyZWN0MkQ6OmlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fbmF0aXZlRGVjb2RlciA/IHRydWUgOiBmYWxzZTsKLX0KLQotRW5jb2RlZERhdGFTdGF0dXMg
SW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmVuY29kZWREYXRhU3RhdHVzKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJuIEVuY29kZWREYXRhU3RhdHVzOjpF
cnJvcjsKLQotICAgIC8vIEZJWE1FOiBIb29rIGludG8gV0lDIGRlY29kZXIgKGlmIGFzeW5jIGRl
Y29kZSBpcyBldmVuIHBvc3NpYmxlKQotICAgIHJldHVybiBFbmNvZGVkRGF0YVN0YXR1czo6Q29t
cGxldGU7Ci19Ci0KLUludFNpemUgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnNpemUoKSBjb25zdAot
ewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwot
Ci0gICAgQ09NUHRyPElXSUNCaXRtYXBGcmFtZURlY29kZT4gZnJhbWU7Ci0gICAgSFJFU1VMVCBo
ciA9IG1fbmF0aXZlRGVjb2Rlci0+R2V0RnJhbWUoMCwgJmZyYW1lKTsKLSAgICBpZiAoIVNVQ0NF
RURFRChocikpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBVSU5UIHdpZHRoLCBo
ZWlnaHQ7Ci0gICAgaHIgPSBmcmFtZS0+R2V0U2l6ZSgmd2lkdGgsICZoZWlnaHQpOwotICAgIGlm
ICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIHJldHVy
biBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwotfQotCi1zaXplX3QgSW1hZ2VEZWNvZGVyRGlyZWN0
MkQ6OmZyYW1lQ291bnQoKSBjb25zdAotewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVyKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIFVJTlQgY291bnQ7Ci0gICAgSFJFU1VMVCBociA9IG1fbmF0
aXZlRGVjb2Rlci0+R2V0RnJhbWVDb3VudCgmY291bnQpOwotICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLVJlcGV0aXRp
b25Db3VudCBJbWFnZURlY29kZXJEaXJlY3QyRDo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKLXsK
LSAgICBpZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJuIFJlcGV0aXRpb25Db3Vu
dE5vbmU7Ci0KLSAgICAvLyBGSVhNRTogSWRlbnRpZnkgaW1hZ2UgdHlwZSwgYW5kIGRldGVybWlu
ZSBwcm9wZXIgcmVwZXRpdGlvbiBjb3VudC4KLSAgICByZXR1cm4gUmVwZXRpdGlvbkNvdW50Tm9u
ZTsKLX0KLQotc3RkOjpvcHRpb25hbDxJbnRQb2ludD4gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6Omhv
dFNwb3QoKSBjb25zdAotewotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0KLUludFNpemUg
SW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJz
YW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX25hdGl2
ZURlY29kZXIpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBDT01QdHI8SVdJQ0Jp
dG1hcEZyYW1lRGVjb2RlPiBmcmFtZTsKLSAgICBIUkVTVUxUIGhyID0gbV9uYXRpdmVEZWNvZGVy
LT5HZXRGcmFtZShpbmRleCwgJmZyYW1lKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBVSU5UIHdpZHRoLCBoZWlnaHQ7Ci0gICAgaHIg
PSBmcmFtZS0+R2V0U2l6ZSgmd2lkdGgsICZoZWlnaHQpOwotICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIHJldHVybiBJbnRTaXplKHdpZHRo
LCBoZWlnaHQpOwotfQotCi1ib29sIEltYWdlRGVjb2RlckRpcmVjdDJEOjpmcmFtZUlzQ29tcGxl
dGVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbmF0aXZlRGVjb2Rl
cikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ09NUHRyPElXSUNCaXRtYXBGcmFtZURl
Y29kZT4gZnJhbWU7Ci0gICAgSFJFU1VMVCBociA9IG1fbmF0aXZlRGVjb2Rlci0+R2V0RnJhbWUo
aW5kZXgsICZmcmFtZSk7Ci0gICAgcmV0dXJuIFNVQ0NFRURFRChocik7Ci19Ci1JbWFnZURlY29k
ZXI6OkZyYW1lTWV0YWRhdGEgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmZyYW1lTWV0YWRhdGFBdElu
ZGV4KHNpemVfdCkgY29uc3QgZmluYWw7Ci17Ci0gICAgaWYgKCFtX25hdGl2ZURlY29kZXIpCi0g
ICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2RlPiBm
cmFtZTsKLSAgICBIUkVTVUxUIGhyID0gbV9uYXRpdmVEZWNvZGVyLT5HZXRGcmFtZShpbmRleCwg
JmZyYW1lKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiB7IH07Ci0K
LSAgICBDT01QdHI8SVdJQ01ldGFkYXRhUXVlcnlSZWFkZXI+IG1ldGFkYXRhOwotICAgIGhyID0g
ZnJhbWUtPkdldE1ldGFkYXRhUXVlcnlSZWFkZXIoJm1ldGFkYXRhKTsKLSAgICBpZiAoIVNVQ0NF
RURFRChocikpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBQUk9QVkFSSUFOVCB2YWx1ZTsK
LSAgICBQcm9wVmFyaWFudEluaXQoJnZhbHVlKTsKLSAgICBociA9IG1ldGFkYXRhLT5HZXRNZXRh
ZGF0YUJ5TmFtZShMIlN5c3RlbS5QaG90by5PcmllbnRhdGlvbiIsICZ2YWx1ZSk7Ci0gICAgaWYg
KFNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiB7IEltYWdlT3JpZW50YXRpb24oc3RhdGlj
X2Nhc3Q8SW1hZ2VPcmllbnRhdGlvbjo6T3JpZW50YXRpb24+KHZhbHVlLnVpVmFsKSksIHN0ZDo6
bnVsbG9wdCB9OwotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotU2Vjb25kcyBJbWFnZURlY29kZXJE
aXJlY3QyRDo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAotewotICAg
IGlmICghbV9uYXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4gU2Vjb25kcygwKTsKLQotICAg
IENPTVB0cjxJV0lDQml0bWFwRnJhbWVEZWNvZGU+IGZyYW1lOwotICAgIEhSRVNVTFQgaHIgPSBt
X25hdGl2ZURlY29kZXItPkdldEZyYW1lKGluZGV4LCAmZnJhbWUpOwotICAgIGlmICghU1VDQ0VF
REVEKGhyKSkKLSAgICAgICAgcmV0dXJuIFNlY29uZHMoMCk7Ci0KLSAgICAvLyBGSVhNRTogRmln
dXJlIG91dCBjb3JyZWN0IGltYWdlIGZvcm1hdC1zcGVjaWZpYyBxdWVyeSBmb3IgZnJhbWUgZHVy
YXRpb24gY2hlY2suCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU2Vjb25kcygw
KTsKLX0KLQotYm9vbCBJbWFnZURlY29kZXJEaXJlY3QyRDo6ZnJhbWVBbGxvd1N1YnNhbXBsaW5n
QXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRl
eCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgQ09NUHRyPElXSUNCaXRtYXBGcmFtZURlY29kZT4gZnJhbWU7Ci0gICAgSFJF
U1VMVCBociA9IG1fbmF0aXZlRGVjb2Rlci0+R2V0RnJhbWUoaW5kZXgsICZmcmFtZSk7Ci0gICAg
aWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDT01QdHI8
SVdJQ01ldGFkYXRhUXVlcnlSZWFkZXI+IG1ldGFkYXRhOwotICAgIGhyID0gZnJhbWUtPkdldE1l
dGFkYXRhUXVlcnlSZWFkZXIoJm1ldGFkYXRhKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdVSUQgY29udGFpbmVyRm9ybWF0OwotICAgIGhy
ID0gbWV0YWRhdGEtPkdldENvbnRhaW5lckZvcm1hdCgmY29udGFpbmVyRm9ybWF0KTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICg6Oklz
RXF1YWxHVUlEKEdVSURfQ29udGFpbmVyRm9ybWF0SnBlZywgY29udGFpbmVyRm9ybWF0KSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXVuc2lnbmVkIElt
YWdlRGVjb2RlckRpcmVjdDJEOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNh
bXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbmF0aXZl
RGVjb2RlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRl
eChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCkuYXJlYSgpICogNDsKLX0KLQotdm9pZCBJbWFnZURl
Y29kZXJEaXJlY3QyRDo6c2V0VGFyZ2V0Q29udGV4dChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVy
VGFyZ2V0KQotewotICAgIG1fcmVuZGVyVGFyZ2V0ID0gcmVuZGVyVGFyZ2V0OwotfQotCi1QbGF0
Zm9ybUltYWdlUHRyIEltYWdlRGVjb2RlckRpcmVjdDJEOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRl
eChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgY29uc3Qg
RGVjb2RpbmdPcHRpb25zJikKLXsKLSAgICBpZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIW1fcmVuZGVyVGFyZ2V0KQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJV0lDQml0bWFwRnJhbWVEZWNvZGU+IGZyYW1lOwot
ICAgIEhSRVNVTFQgaHIgPSBtX25hdGl2ZURlY29kZXItPkdldEZyYW1lKDAsICZmcmFtZSk7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENP
TVB0cjxJV0lDRm9ybWF0Q29udmVydGVyPiBjb252ZXJ0ZXI7Ci0gICAgaHIgPSBzeXN0ZW1JbWFn
aW5nRmFjdG9yeSgpLT5DcmVhdGVGb3JtYXRDb252ZXJ0ZXIoJmNvbnZlcnRlcik7Ci0gICAgaWYg
KCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGhyID0gY29u
dmVydGVyLT5Jbml0aWFsaXplKGZyYW1lLmdldCgpLCBHVUlEX1dJQ1BpeGVsRm9ybWF0MzJicHBQ
UkdCQSwgV0lDQml0bWFwRGl0aGVyVHlwZU5vbmUsIG51bGxwdHIsIDAuZiwgV0lDQml0bWFwUGFs
ZXR0ZVR5cGVDdXN0b20pOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcD4gd2ljQml0bWFwOwotICAgIGhyID0g
c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlQml0bWFwRnJvbVNvdXJjZShjb252ZXJ0ZXIu
Z2V0KCksIFdJQ0JpdG1hcENhY2hlT25EZW1hbmQsICZ3aWNCaXRtYXApOwotICAgIGlmICghU1VD
Q0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQyRDFC
aXRtYXA+IGJpdG1hcDsKLSAgICBociA9IG1fcmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXBGcm9t
V2ljQml0bWFwKHdpY0JpdG1hcC5nZXQoKSwgJmJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQo
aHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBiaXRtYXA7Ci19Ci0K
LXZvaWQgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnNldERhdGEoY29uc3QgRnJhZ21lbnRlZFNoYXJl
ZEJ1ZmZlciYgZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAgaWYgKCFhbGxEYXRh
UmVjZWl2ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV0lDU3RyZWFtPiBzdHJl
YW07Ci0gICAgSFJFU1VMVCBociA9IHN5c3RlbUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZVN0cmVh
bSgmc3RyZWFtKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFJlZjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IGRhdGEubWFrZUNvbnRpZ3VvdXMoKTsKLSAg
ICBjaGFyKiBkYXRhUHRyID0gY29uc3RfY2FzdDxjaGFyKj4oYnVmZmVyLT5kYXRhKCkpOwotICAg
IGhyID0gc3RyZWFtLT5Jbml0aWFsaXplRnJvbU1lbW9yeShyZWludGVycHJldF9jYXN0PEJZVEUq
PihkYXRhUHRyKSwgZGF0YS5zaXplKCkpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9uYXRpdmVEZWNvZGVyID0gbnVsbHB0cjsKLQotICAgIGhyID0g
c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlRGVjb2RlckZyb21TdHJlYW0oc3RyZWFtLmdl
dCgpLCBudWxscHRyLCBXSUNEZWNvZGVNZXRhZGF0YUNhY2hlT25EZW1hbmQsICZtX25hdGl2ZURl
Y29kZXIpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkgewotICAgICAgICBtX25hdGl2ZURlY29k
ZXIgPSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSW1hZ2Ugd2Fz
IHZhbGlkLgotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgJKHJl
dmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZURlY29kZXJEaXJlY3QyRC5oCShub25leGlzdGVudCkKQEAgLTEsOTIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRl
ICJJbWFnZURlY29kZXIuaCIKLQotaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OwotaW50ZXJm
YWNlIElXSUNCaXRtYXBEZWNvZGVyOwotaW50ZXJmYWNlIElXSUNJbWFnaW5nRmFjdG9yeTI7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW1hZ2VEZWNvZGVyRGlyZWN0MkQgZmluYWwg
OiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1
YmxpYzoKLSAgICBJbWFnZURlY29kZXJEaXJlY3QyRCgpOwotCi0gICAgc3RhdGljIFJlZjxJbWFn
ZURlY29kZXJEaXJlY3QyRD4gY3JlYXRlKEZyYWdtZW50ZWRTaGFyZWRCdWZmZXImLCBBbHBoYU9w
dGlvbiwgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBJbWFnZURlY29kZXJEaXJlY3QyRCgpKTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgYm9vbCBzdXBwb3J0c01lZGlhVHlwZShNZWRpYVR5cGUgdHlwZSkgeyByZXR1cm4gdHlwZSA9
PSBNZWRpYVR5cGU6OkltYWdlOyB9Ci0KLSAgICBzaXplX3QgYnl0ZXNEZWNvZGVkVG9EZXRlcm1p
bmVQcm9wZXJ0aWVzKCkgY29uc3QgZmluYWw7Ci0KLSAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNp
b24oKSBjb25zdCBmaW5hbDsKLSAgICBFbmNvZGVkRGF0YVN0YXR1cyBlbmNvZGVkRGF0YVN0YXR1
cygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3QgZmluYWw7
Ci0KLSAgICAvLyBBbHdheXMgb3JpZ2luYWwgc2l6ZSwgd2l0aG91dCBzdWJzYW1wbGluZy4KLSAg
ICBJbnRTaXplIHNpemUoKSBjb25zdCBmaW5hbDsKLSAgICBzaXplX3QgZnJhbWVDb3VudCgpIGNv
bnN0IGZpbmFsOwotCi0gICAgUmVwZXRpdGlvbkNvdW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0
IGZpbmFsOwotICAgIHN0ZDo6b3B0aW9uYWw8SW50UG9pbnQ+IGhvdFNwb3QoKSBjb25zdCBmaW5h
bDsKLQotICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2
ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KSBjb25zdCBmaW5hbDsKLSAgICBib29sIGZy
YW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KSBjb25zdCBmaW5hbDsKLSAgICBJbWFnZURlY29k
ZXI6OkZyYW1lTWV0YWRhdGEgZnJhbWVNZXRhZGF0YUF0SW5kZXgoc2l6ZV90KSBjb25zdCBmaW5h
bDsKLQotICAgIFNlY29uZHMgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KSBjb25zdCBmaW5h
bDsKLSAgICBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCkgY29uc3QgZmluYWw7Ci0g
ICAgYm9vbCBmcmFtZUFsbG93U3Vic2FtcGxpbmdBdEluZGV4KHNpemVfdCkgY29uc3QgZmluYWw7
Ci0gICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVs
ID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCkgY29uc3QgZmluYWw7Ci0KLSAgICBQbGF0Zm9y
bUltYWdlUHRyIGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZl
bCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYgPSBE
ZWNvZGluZ09wdGlvbnMoRGVjb2RpbmdNb2RlOjpTeW5jaHJvbm91cykpIGZpbmFsOwotCi0gICAg
dm9pZCBzZXREYXRhKGNvbnN0IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXImLCBib29sIGFsbERhdGFS
ZWNlaXZlZCkgZmluYWw7Ci0gICAgYm9vbCBpc0FsbERhdGFSZWNlaXZlZCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1faXNBbGxEYXRhUmVjZWl2ZWQ7IH0KLSAgICB2b2lkIGNsZWFyRnJhbWVCdWZm
ZXJDYWNoZShzaXplX3QpIGZpbmFsIHsgfQotCi0gICAgdm9pZCBzZXRUYXJnZXRDb250ZXh0KElE
MkQxUmVuZGVyVGFyZ2V0Kik7Ci0KLSAgICBzdGF0aWMgSVdJQ0ltYWdpbmdGYWN0b3J5Miogc3lz
dGVtSW1hZ2luZ0ZhY3RvcnkoKTsKLQotcHJpdmF0ZToKLSAgICBib29sIG1faXNBbGxEYXRhUmVj
ZWl2ZWQgeyBmYWxzZSB9OwotICAgIG11dGFibGUgSW50U2l6ZSBtX3NpemU7Ci0gICAgQ09NUHRy
PElXSUNCaXRtYXBEZWNvZGVyPiBtX25hdGl2ZURlY29kZXI7Ci0gICAgQ09NUHRyPElEMkQxUmVu
ZGVyVGFyZ2V0PiBtX3JlbmRlclRhcmdldDsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGlyZWN0
MkQuY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw5NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0KLSNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgotI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1SZWZQdHI8Qml0bWFwSW1hZ2U+IEJpdG1hcEltYWdlOjpjcmVh
dGUoSEJJVE1BUCBoQml0bWFwKQotewotICAgIERJQlNFQ1RJT04gZGliU2VjdGlvbjsKLSAgICBp
ZiAoIUdldE9iamVjdChoQml0bWFwLCBzaXplb2YoRElCU0VDVElPTiksICZkaWJTZWN0aW9uKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBBU1NFUlQoZGliU2VjdGlvbi5kc0JtLmJt
Qml0c1BpeGVsID09IDMyKTsKLSAgICBpZiAoZGliU2VjdGlvbi5kc0JtLmJtQml0c1BpeGVsICE9
IDMyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEFTU0VSVChkaWJTZWN0aW9uLmRz
Qm0uYm1CaXRzKTsKLSAgICBpZiAoIWRpYlNlY3Rpb24uZHNCbS5ibUJpdHMpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLQotICAgIHJldHVybiBudWxs
cHRyOwotfQotCi1ib29sIEJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKEhCSVRNQVAgYm1w
LCBjb25zdCBJbnRTaXplKiBzaXplKQotewotICAgIEFTU0VSVChibXApOwotCi0gICAgQklUTUFQ
IGJtcEluZm87Ci0gICAgR2V0T2JqZWN0KGJtcCwgc2l6ZW9mKEJJVE1BUCksICZibXBJbmZvKTsK
LQotICAgIEFTU0VSVChibXBJbmZvLmJtQml0c1BpeGVsID09IDMyKTsKLSAgICBpbnQgYnVmZmVy
U2l6ZSA9IGJtcEluZm8uYm1XaWR0aEJ5dGVzICogYm1wSW5mby5ibUhlaWdodDsKLSAgICAKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQml0bWFw
SW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQmIGN0eHQs
IGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9z
aXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCi17Ci0gICAgc2l6ZV90IGZyYW1lcyA9IGZyYW1lQ291
bnQoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1lczsgKytpKSB7Ci0gICAgICAg
IGF1dG8gaW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChpKS5nZXQoKTsKLSAgICAgICAgYXV0byBp
bWFnZVNpemUgPSBuYXRpdmVJbWFnZVNpemUoaW1hZ2UpOwotICAgICAgICBpZiAoaW1hZ2UgJiYg
Y2xhbXBUbzxpbnQ+KGltYWdlU2l6ZS5oZWlnaHQoKSkgPT0gc3RhdGljX2Nhc3Q8aW50PihzcmNT
aXplLmhlaWdodCgpKSAmJiBjbGFtcFRvPGludD4oaW1hZ2VTaXplLndpZHRoKCkpID09IHN0YXRp
Y19jYXN0PGludD4oc3JjU2l6ZS53aWR0aCgpKSkgewotICAgICAgICAgICAgc2l6ZV90IGN1cnJl
bnRGcmFtZSA9IG1fY3VycmVudEZyYW1lOwotICAgICAgICAgICAgbV9jdXJyZW50RnJhbWUgPSBp
OwotICAgICAgICAgICAgZHJhdyhjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwg
c3JjU2l6ZS53aWR0aCgpLCBzcmNTaXplLmhlaWdodCgpKSwgeyBjb21wb3NpdGVPcCB9KTsKLSAg
ICAgICAgICAgIG1fY3VycmVudEZyYW1lID0gY3VycmVudEZyYW1lOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm8gaW1hZ2Ugb2YgdGhlIGNvcnJlY3Qg
c2l6ZSB3YXMgZm91bmQsIGZhbGxiYWNrIHRvIGRyYXdpbmcgdGhlIGN1cnJlbnQgZnJhbWUKLSAg
ICBGbG9hdFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKLSAgICBkcmF3KGN0
eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNpemUud2lkdGgoKSwgaW1h
Z2VTaXplLmhlaWdodCgpKSwgeyBjb21wb3NpdGVPcCB9KTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2
ZUltYWdlRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9OYXRpdmVJbWFnZURpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODExKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0
MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiTmF0aXZlSW1hZ2UuaCIKLQotI2luY2x1ZGUgIkRpcmVjdDJET3BlcmF0aW9ucy5oIgotI2lu
Y2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUgPGQyZDEuaD4K
LSNpbmNsdWRlIDx3aW5jb2RlYy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBJ
V0lDSW1hZ2luZ0ZhY3RvcnkqIGltYWdpbmdGYWN0b3J5KCkKLXsKLSAgICBzdGF0aWMgSVdJQ0lt
YWdpbmdGYWN0b3J5KiBpbWFnaW5nRmFjdG9yeSA9IG51bGxwdHI7Ci0gICAgaWYgKCFpbWFnaW5n
RmFjdG9yeSkgewotICAgICAgICBIUkVTVUxUIGhyID0gQ29DcmVhdGVJbnN0YW5jZShDTFNJRF9X
SUNJbWFnaW5nRmFjdG9yeSwgbnVsbHB0ciwgQ0xTQ1RYX0lOUFJPQ19TRVJWRVIsIElJRF9QUFZf
QVJHUygmaW1hZ2luZ0ZhY3RvcnkpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGltYWdpbmdGYWN0b3J5OwotfQotCi1JbnRTaXpl
IE5hdGl2ZUltYWdlOjpzaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUltYWdl
LT5HZXRQaXhlbFNpemUoKTsKLX0KLQotYm9vbCBOYXRpdmVJbWFnZTo6aGFzQWxwaGEoKSBjb25z
dAotewotICAgIEQyRDFfUElYRUxfRk9STUFUIHBpeGVsRm9ybWF0ID0gbV9wbGF0Zm9ybUltYWdl
LT5HZXRQaXhlbEZvcm1hdCgpOwotICAgIHJldHVybiBwaXhlbEZvcm1hdC5hbHBoYU1vZGUgIT0g
RDJEMV9BTFBIQV9NT0RFX0lHTk9SRTsKLX0KLQotQ29sb3IgTmF0aXZlSW1hZ2U6OnNpbmdsZVBp
eGVsU29saWRDb2xvcigpIGNvbnN0Ci17Ci0gICAgaWYgKHNpemUoKSAhPSBJbnRTaXplKDEsIDEp
KQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIENvbG9yKCk7Ci19Ci0KLURlc3RpbmF0aW9uQ29sb3JTcGFjZSBOYXRpdmVJbWFnZTo6
Y29sb3JTcGFjZSgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCk7Ci19Ci0KLXZvaWQgTmF0aXZlSW1hZ2U6OmNs
ZWFyU3ViaW1hZ2VzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVj
dDJELmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw2NjcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotCi0jaWYgVVNFKERJUkVDVDJE
KQotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0j
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlu
bGluZSBJRDJEMVJlbmRlclRhcmdldCogc2NyYXRjaFJlbmRlclRhcmdldCgpCi17Ci0gICAgc3Rh
dGljIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gcmVuZGVyVGFyZ2V0ID0gYWRvcHRDT00oR3Jh
cGhpY3NDb250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCkpOwotICAgIHJldHVybiByZW5kZXJU
YXJnZXQuZ2V0KCk7Ci19Ci0KLVBhdGggUGF0aDo6cG9seWdvblBhdGhGcm9tUG9pbnRzKGNvbnN0
IFZlY3RvcjxGbG9hdFBvaW50PiYgcG9pbnRzKQotewotICAgIFBhdGggcGF0aDsKLSAgICBpZiAo
cG9pbnRzLnNpemUoKSA8IDIpCi0gICAgICAgIHJldHVybiBwYXRoOwotCi0gICAgVmVjdG9yPEQy
RDFfUE9JTlRfMkYsIDMyPiBkMmRQb2ludHM7Ci0gICAgZDJkUG9pbnRzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkocG9pbnRzLnNpemUoKSAtIDEpOwotICAgIGZvciAoYXV0byBwb2ludCA6IHBvaW50
cykKLSAgICAgICAgZDJkUG9pbnRzLnVuY2hlY2tlZEFwcGVuZChwb2ludCk7Ci0KLSAgICBwYXRo
Lm1vdmVUbyhwb2ludHMuZmlyc3QoKSk7Ci0KLSAgICBBU1NFUlQocGF0aC5tX2FjdGl2ZVBhdGgp
OwotCi0gICAgcGF0aC5tX2FjdGl2ZVBhdGgtPkFkZExpbmVzKGQyZFBvaW50cy5kYXRhKCksIGQy
ZFBvaW50cy5zaXplKCkpOwotICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7Ci0KLSAgICByZXR1cm4g
cGF0aDsKLX0KLQotUGF0aDo6UGF0aCgpID0gZGVmYXVsdDsKLQotUGF0aDo6flBhdGgoKQotewot
ICAgIGNsZWFyR2VvbWV0cmllcygpOwotfQotCi1QbGF0Zm9ybVBhdGhQdHIgUGF0aDo6ZW5zdXJl
UGxhdGZvcm1QYXRoKCkKLXsKLSAgICBpZiAoIW1fcGF0aCkgewotICAgICAgICBIUkVTVUxUIGhy
ID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUdlb21ldHJ5R3JvdXAo
RDJEMV9GSUxMX01PREVfV0lORElORywgbnVsbHB0ciwgMCwgJm1fcGF0aCk7Ci0gICAgICAgIEFT
U0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgQVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkg
PT0gMSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fcGF0aC5nZXQoKTsKLX0KLQotdm9pZCBQYXRo
OjpjbGVhckdlb21ldHJpZXMoKQotewotICAgIC8vIE1hbnVhbGx5IGNsZWFuIHRoZXNlIHVwIHNv
IHRoYXQgd2UgY2FuIHVzZSB0aGlzIHZlY3RvciB3aXRoIERpcmVjdDJEIEFQSXMuCi0gICAgZm9y
IChhdXRvKiBnZW9tZXRyeSA6IG1fZ2VvbWV0cmllcykKLSAgICAgICAgZ2VvbWV0cnktPlJlbGVh
c2UoKTsKLSAgICBtX2dlb21ldHJpZXMuY2xlYXIoKTsKLX0KLQotdm9pZCBQYXRoOjphcHBlbmRH
ZW9tZXRyeShJRDJEMUdlb21ldHJ5KiBnZW9tZXRyeSkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAot
ICAgIHVuc2lnbmVkIGJlZm9yZSA9IHJlZkNvdW50KGdlb21ldHJ5KTsKLSNlbmRpZgotCi0gICAg
dW5zaWduZWQgZ2VvbWV0cnlDb3VudCA9IG1fcGF0aCA/IG1fcGF0aC0+R2V0U291cmNlR2VvbWV0
cnlDb3VudCgpIDogMDsKLQotICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2VvbWV0cmllcy5zaXplKCkg
PT0gZ2VvbWV0cnlDb3VudCk7Ci0KLSAgICBnZW9tZXRyeS0+QWRkUmVmKCk7Ci0gICAgbV9nZW9t
ZXRyaWVzLmFwcGVuZChnZW9tZXRyeSk7Ci0KLSAgICBhdXRvIGZpbGxNb2RlID0gbV9wYXRoID8g
bV9wYXRoLT5HZXRGaWxsTW9kZSgpIDogRDJEMV9GSUxMX01PREVfV0lORElORzsKLQotICAgIG1f
cGF0aCA9IG51bGxwdHI7Ci0KLSAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0
ZW1GYWN0b3J5KCktPkNyZWF0ZUdlb21ldHJ5R3JvdXAoZmlsbE1vZGUsIG1fZ2VvbWV0cmllcy5k
YXRhKCksIG1fZ2VvbWV0cmllcy5zaXplKCksICZtX3BhdGgpOwotICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotCi0gICAgQVNTRVJUKHJlZkNvdW50KGdlb21ldHJ5KSA9PSBiZWZv
cmUgKyAxKTsKLX0KLQotdm9pZCBQYXRoOjpjcmVhdGVHZW9tZXRyeVdpdGhGaWxsTW9kZShXaW5k
UnVsZSB3ZWJraXRGaWxsTW9kZSwgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4mIHBhdGgpIGNv
bnN0Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9wYXRoKTsKLQotICAgIGF1dG8gZmlsbE1vZGUg
PSAod2Via2l0RmlsbE1vZGUgPT0gV2luZFJ1bGU6OkV2ZW5PZGQpID8gRDJEMV9GSUxMX01PREVf
QUxURVJOQVRFIDogRDJEMV9GSUxMX01PREVfV0lORElORzsKLQotICAgIGlmIChmaWxsTW9kZSA9
PSBtX3BhdGgtPkdldEZpbGxNb2RlKCkpIHsKLSAgICAgICAgcGF0aCA9IG1fcGF0aDsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGdlb21ldHJ5Q291bnQgPSBtX3BhdGgt
PkdldFNvdXJjZUdlb21ldHJ5Q291bnQoKTsKLQotICAgIEFTU0VSVChtX2dlb21ldHJpZXMuc2l6
ZSgpID09IGdlb21ldHJ5Q291bnQpOwotCi0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4
dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKGZpbGxNb2RlLCBjb25zdF9j
YXN0PElEMkQxR2VvbWV0cnkqKj4obV9nZW9tZXRyaWVzLmRhdGEoKSksIG1fZ2VvbWV0cmllcy5z
aXplKCksICZwYXRoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICBB
U1NFUlQocmVmQ291bnQocGF0aC5nZXQoKSkgPT0gMSk7Ci19Ci0KLVBhdGg6OlBhdGgoY29uc3Qg
UGF0aCYgb3RoZXIpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB1bnNpZ25lZCBwYXRoQ291
bnQgPSByZWZDb3VudChvdGhlci5tX3BhdGguZ2V0KCkpOwotICAgIHVuc2lnbmVkIGFjdGl2ZVBh
dGhDb3VudCA9IHJlZkNvdW50KG90aGVyLm1fYWN0aXZlUGF0aC5nZXQoKSk7Ci0jZW5kaWYKLSAg
ICBtX3BhdGggPSBvdGhlci5tX3BhdGg7Ci0gICAgbV9hY3RpdmVQYXRoID0gb3RoZXIubV9hY3Rp
dmVQYXRoOwotICAgIG1fZ2VvbWV0cmllcyA9IG90aGVyLm1fZ2VvbWV0cmllczsKLSAgICBmb3Ig
KGF1dG8qIGdlb21ldHJ5IDogbV9nZW9tZXRyaWVzKQotICAgICAgICBnZW9tZXRyeS0+QWRkUmVm
KCk7Ci0KLSAgICBBU1NFUlQoIW1fcGF0aCB8fCByZWZDb3VudChtX3BhdGguZ2V0KCkpID09IHBh
dGhDb3VudCArIDEpOwotICAgIEFTU0VSVCghbV9hY3RpdmVQYXRoIHx8IHJlZkNvdW50KG1fYWN0
aXZlUGF0aC5nZXQoKSkgPT0gYWN0aXZlUGF0aENvdW50ICsgMSk7Ci19Ci0gICAgCi1QYXRoOjpQ
YXRoKFBhdGgmJiBvdGhlcikKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHVuc2lnbmVkIHBh
dGhDb3VudCA9IHJlZkNvdW50KG90aGVyLm1fcGF0aC5nZXQoKSk7Ci0gICAgdW5zaWduZWQgYWN0
aXZlUGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9hY3RpdmVQYXRoLmdldCgpKTsKLSNlbmRp
ZgotICAgIG1fcGF0aCA9IFdURk1vdmUob3RoZXIubV9wYXRoKTsKLSAgICBtX2FjdGl2ZVBhdGgg
PSBXVEZNb3ZlKG90aGVyLm1fYWN0aXZlUGF0aCk7Ci0gICAgbV9nZW9tZXRyaWVzID0gV1RGTW92
ZShvdGhlci5tX2dlb21ldHJpZXMpOwotCi0gICAgQVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQo
KSkgPT0gcGF0aENvdW50KTsKLSAgICBBU1NFUlQocmVmQ291bnQobV9hY3RpdmVQYXRoLmdldCgp
KSA9PSBhY3RpdmVQYXRoQ291bnQpOwotfQotCi1QYXRoJiBQYXRoOjpvcGVyYXRvcj0oY29uc3Qg
UGF0aCYgb3RoZXIpCi17Ci0gICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAgICByZXR1cm4g
KnRoaXM7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB1bnNpZ25lZCBwYXRoQ291bnQgPSByZWZD
b3VudChvdGhlci5tX3BhdGguZ2V0KCkpOwotICAgIHVuc2lnbmVkIGFjdGl2ZVBhdGhDb3VudCA9
IHJlZkNvdW50KG90aGVyLm1fYWN0aXZlUGF0aC5nZXQoKSk7Ci0jZW5kaWYKLSAgICBtX3BhdGgg
PSBvdGhlci5tX3BhdGg7Ci0gICAgbV9hY3RpdmVQYXRoID0gb3RoZXIubV9hY3RpdmVQYXRoOwot
ICAgIG1fZ2VvbWV0cmllcyA9IG90aGVyLm1fZ2VvbWV0cmllczsKLSAgICBmb3IgKGF1dG8qIGdl
b21ldHJ5IDogbV9nZW9tZXRyaWVzKQotICAgICAgICBnZW9tZXRyeS0+QWRkUmVmKCk7Ci0KLSAg
ICBBU1NFUlQoIW1fcGF0aCB8fCByZWZDb3VudChtX3BhdGguZ2V0KCkpID09IHBhdGhDb3VudCAr
IDEpOwotICAgIEFTU0VSVCghbV9hY3RpdmVQYXRoIHx8IHJlZkNvdW50KG1fYWN0aXZlUGF0aC5n
ZXQoKSkgPT0gYWN0aXZlUGF0aENvdW50ICsgMSk7Ci0KLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0K
LVBhdGgmIFBhdGg6Om9wZXJhdG9yPShQYXRoJiYgb3RoZXIpCi17Ci0gICAgaWYgKHRoaXMgPT0g
Jm90aGVyKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAg
IHVuc2lnbmVkIHBhdGhDb3VudCA9IHJlZkNvdW50KG90aGVyLm1fcGF0aC5nZXQoKSk7Ci0gICAg
dW5zaWduZWQgYWN0aXZlUGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9hY3RpdmVQYXRoLmdl
dCgpKTsKLSNlbmRpZgotICAgIG1fcGF0aCA9IFdURk1vdmUob3RoZXIubV9wYXRoKTsKLSAgICBt
X2FjdGl2ZVBhdGggPSBXVEZNb3ZlKG90aGVyLm1fYWN0aXZlUGF0aCk7Ci0gICAgbV9nZW9tZXRy
aWVzID0gV1RGTW92ZShvdGhlci5tX2dlb21ldHJpZXMpOwotCi0gICAgQVNTRVJUKHJlZkNvdW50
KG1fcGF0aC5nZXQoKSkgPT0gcGF0aENvdW50KTsKLSAgICBBU1NFUlQocmVmQ291bnQobV9hY3Rp
dmVQYXRoLmdldCgpKSA9PSBhY3RpdmVQYXRoQ291bnQpOwotCi0gICAgcmV0dXJuICp0aGlzOwot
fQotCi1ib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVs
ZSBydWxlKSBjb25zdAotewotICAgIGlmIChpc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKCFmYXN0Qm91bmRpbmdSZWN0KCkuY29udGFpbnMocG9pbnQpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBCT09MIGNvbnRhaW5zOwotICAgIGlmICghU1VDQ0VFREVE
KG1fcGF0aC0+RmlsbENvbnRhaW5zUG9pbnQocG9pbnQsIG51bGxwdHIsICZjb250YWlucykpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gY29udGFpbnM7Ci19Ci0KLWJvb2wg
UGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1bmN0
aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiBzdHJva2VTdHlsZUFwcGxpZXIpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKHN0cm9rZVN0eWxlQXBwbGllcik7Ci0KLSAgICBpZiAoaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHNjcmF0
Y2hDb250ZXh0RDJEKHNjcmF0Y2hSZW5kZXJUYXJnZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQgc2NyYXRjaENvbnRleHQoJnNjcmF0Y2hDb250ZXh0RDJELCBHcmFwaGljc0NvbnRl
eHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwotICAgIHN0cm9rZVN0
eWxlQXBwbGllcihzY3JhdGNoQ29udGV4dCk7Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHVu
c2lnbmVkIGJlZm9yZSA9IHJlZkNvdW50KG1fcGF0aC5nZXQoKSk7Ci0jZW5kaWYKLQotICAgIEJP
T0wgY29udGFpbnNQb2ludCA9IGZhbHNlOwotICAgIEhSRVNVTFQgaHIgPSBtX3BhdGgtPlN0cm9r
ZUNvbnRhaW5zUG9pbnQocG9pbnQsIHNjcmF0Y2hDb250ZXh0LnN0cm9rZVRoaWNrbmVzcygpLCBz
Y3JhdGNoQ29udGV4dC5wbGF0Zm9ybVN0cm9rZVN0eWxlKCksIG51bGxwdHIsIDEuMGYsICZjb250
YWluc1BvaW50KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIEFTU0VSVChyZWZDb3VudChtX3BhdGguZ2V0KCkpID09IGJlZm9yZSk7Ci0gICAg
cmV0dXJuIGNvbnRhaW5zUG9pbnQ7Ci19Ci0KLXZvaWQgUGF0aDo6Y2xvc2VBbnlPcGVuR2VvbWV0
cmllcyh1bnNpZ25lZCBmaWd1cmVFbmRTdHlsZSkgY29uc3QKLXsKLSAgICBpZiAobV9maWd1cmVJ
c09wZW5lZCkgewotICAgICAgICBBU1NFUlQobV9hY3RpdmVQYXRoKTsKLQotICAgICAgICBhdXRv
IGVuZFN0eWxlID0gc3RhdGljX2Nhc3Q8RDJEMV9GSUdVUkVfRU5EPihmaWd1cmVFbmRTdHlsZSk7
Ci0gICAgICAgIG1fYWN0aXZlUGF0aC0+RW5kRmlndXJlKGVuZFN0eWxlKTsKLSAgICAgICAgbV9m
aWd1cmVJc09wZW5lZCA9IGZhbHNlOwotCi0gICAgICAgIEhSRVNVTFQgaHIgPSBtX2FjdGl2ZVBh
dGgtPkNsb3NlKCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9Ci0KLSAg
ICBtX2FjdGl2ZVBhdGggPSBudWxscHRyOwotfQotCi12b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgdHJhbnNmb3JtKEFmZmluZVRyYW5zZm9ybSgxLCAw
LCAwLCAxLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBQYXRoOjp0
cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgaWYgKHRy
YW5zZm9ybS5pc0lkZW50aXR5KCkgfHwgaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9hY3RpdmVQYXRoKQotICAgICAgICBjbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFf
RklHVVJFX0VORF9PUEVOKTsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdW5zaWduZWQgYmVm
b3JlID0gcmVmQ291bnQobV9wYXRoLmdldCgpKTsKLSNlbmRpZgotCi0gICAgQ09NUHRyPElEMkQx
VHJhbnNmb3JtZWRHZW9tZXRyeT4gdHJhbnNmb3JtZWRQYXRoOwotICAgIGlmICghU1VDQ0VFREVE
KEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVUcmFuc2Zvcm1lZEdlb21l
dHJ5KG1fcGF0aC5nZXQoKSwgdHJhbnNmb3JtLCAmdHJhbnNmb3JtZWRQYXRoKSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChyZWZDb3VudChtX3BhdGguZ2V0KCkpID09IGJlZm9yZSk7
Ci0gICAgQVNTRVJUKHJlZkNvdW50KHRyYW5zZm9ybWVkUGF0aC5nZXQoKSkgPT0gMSk7Ci0KLSAg
ICBhdXRvIGZpbGxNb2RlID0gbV9wYXRoLT5HZXRGaWxsTW9kZSgpOwotCi0gICAgbV9wYXRoID0g
bnVsbHB0cjsKLQotICAgIGNsZWFyR2VvbWV0cmllcygpOwotCi0gICAgdHJhbnNmb3JtZWRQYXRo
LT5BZGRSZWYoKTsKLSAgICBtX2dlb21ldHJpZXMuYXBwZW5kKHRyYW5zZm9ybWVkUGF0aC5nZXQo
KSk7Ci0KLSAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCkt
PkNyZWF0ZUdlb21ldHJ5R3JvdXAoZmlsbE1vZGUsIG1fZ2VvbWV0cmllcy5kYXRhKCksIG1fZ2Vv
bWV0cmllcy5zaXplKCksICZtX3BhdGgpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotICAgIEFTU0VSVChyZWZDb3VudChtX3BhdGguZ2V0KCkpID09IDEpOwotfQotCi1GbG9h
dFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0U2xvd0Nhc2UoKSBjb25zdAotewotICAgIEQyRDFfUkVD
VF9GIGJvdW5kcyA9IHsgfTsKLSAgICBpZiAoIVNVQ0NFRURFRChtX3BhdGgtPkdldEJvdW5kcyhu
dWxscHRyLCAmYm91bmRzKSkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIHJl
dHVybiBib3VuZHM7Ci19Ci0KLUZsb2F0UmVjdCBQYXRoOjpmYXN0Qm91bmRpbmdSZWN0U2xvd0Nh
c2UoKSBjb25zdAotewotICAgIEQyRDFfUkVDVF9GIGJvdW5kcyA9IHsgfTsKLSAgICBpZiAoIVNV
Q0NFRURFRChtX3BhdGgtPkdldEJvdW5kcyhudWxscHRyLCAmYm91bmRzKSkpCi0gICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKLQotICAgIHJldHVybiBib3VuZHM7Ci19Ci0KLUZsb2F0UmVjdCBQ
YXRoOjpmYXN0Qm91bmRpbmdSZWN0Rm9yU3Ryb2tlKGNvbnN0IFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJiBwbGF0Zm9ybUNvbnRleHQpIGNvbnN0Ci17Ci0gICAgaWYgKGlzTnVsbCgpKQotICAgICAg
ICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBmbG9hdCB0b2xlcmFuY2UgPSAxMDsKLQotICAg
IGF1dG8qIHN0cm9rZVN0eWxlID0gY29uc3RfY2FzdDxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCY+
KHBsYXRmb3JtQ29udGV4dCkuc3Ryb2tlU3R5bGUoKTsKLQotICAgIEQyRDFfUkVDVF9GIGJvdW5k
cyA9IHsgfTsKLSAgICBpZiAoIVNVQ0NFRURFRChtX3BhdGgtPkdldFdpZGVuZWRCb3VuZHMocGxh
dGZvcm1Db250ZXh0LnN0cm9rZVRoaWNrbmVzcygpLCBzdHJva2VTdHlsZSwgbnVsbHB0ciwgdG9s
ZXJhbmNlLCAmYm91bmRzKSkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIHJl
dHVybiBib3VuZHM7Ci19Ci0KLUZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoY29u
c3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mIHN0cm9rZVN0eWxlQXBwbGllcikg
Y29uc3QKLXsKLSAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsK
LQotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hDb250ZXh0RDJEKHNjcmF0Y2hS
ZW5kZXJUYXJnZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRl
eHQoJnNjcmF0Y2hDb250ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0Nv
bnRleHRUeXBlOjpHUFVNZW1vcnkpOwotCi0gICAgaWYgKHN0cm9rZVN0eWxlQXBwbGllcikKLSAg
ICAgICAgc3Ryb2tlU3R5bGVBcHBsaWVyKHNjcmF0Y2hDb250ZXh0KTsKLQotICAgIHJldHVybiBm
YXN0Qm91bmRpbmdSZWN0Rm9yU3Ryb2tlKHNjcmF0Y2hDb250ZXh0RDJEKTsKLX0KLQotdm9pZCBQ
YXRoOjpvcGVuRmlndXJlQXRDdXJyZW50UG9pbnRJZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKG1f
ZmlndXJlSXNPcGVuZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9hY3RpdmVQYXRo
KSB7Ci0gICAgICAgIENPTVB0cjxJRDJEMVBhdGhHZW9tZXRyeT4gYWN0aXZlUGF0aEdlb21ldHJ5
OwotICAgICAgICBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUGF0aEdl
b21ldHJ5KCZhY3RpdmVQYXRoR2VvbWV0cnkpOwotICAgICAgICBIUkVTVUxUIGhyID0gYWN0aXZl
UGF0aEdlb21ldHJ5LT5PcGVuKCZtX2FjdGl2ZVBhdGgpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgYXBwZW5kR2VvbWV0cnkoYWN0aXZlUGF0aEdlb21l
dHJ5LmxlYWtSZWYoKSk7Ci0gICAgICAgIEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0
KCkpID09IDEpOwotICAgIH0KLQotICAgIG1fYWN0aXZlUGF0aC0+U2V0RmlsbE1vZGUoRDJEMV9G
SUxMX01PREVfV0lORElORyk7Ci0gICAgbV9hY3RpdmVQYXRoLT5CZWdpbkZpZ3VyZShjdXJyZW50
UG9pbnQoKSwgRDJEMV9GSUdVUkVfQkVHSU5fRklMTEVEKTsKLSAgICBtX2ZpZ3VyZUlzT3BlbmVk
ID0gdHJ1ZTsKLX0KLQotdm9pZCBQYXRoOjptb3ZlVG9TbG93Q2FzZShjb25zdCBGbG9hdFBvaW50
JiBwb2ludCkKLXsKLSAgICBpZiAobV9hY3RpdmVQYXRoKQotICAgICAgICBjbG9zZUFueU9wZW5H
ZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9PUEVOKTsKLQotICAgIENPTVB0cjxJRDJEMVBhdGhH
ZW9tZXRyeT4gYWN0aXZlUGF0aEdlb21ldHJ5OwotICAgIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVt
RmFjdG9yeSgpLT5DcmVhdGVQYXRoR2VvbWV0cnkoJmFjdGl2ZVBhdGhHZW9tZXRyeSk7Ci0KLSAg
ICBpZiAoIVNVQ0NFRURFRChhY3RpdmVQYXRoR2VvbWV0cnktPk9wZW4oJm1fYWN0aXZlUGF0aCkp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhcHBlbmRHZW9tZXRyeShhY3RpdmVQYXRoR2VvbWV0
cnkubGVha1JlZigpKTsKLQotICAgIEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0KCkp
ID09IDEpOwotCi0gICAgbV9hY3RpdmVQYXRoLT5TZXRGaWxsTW9kZShEMkQxX0ZJTExfTU9ERV9X
SU5ESU5HKTsKLSAgICBtX2FjdGl2ZVBhdGgtPkJlZ2luRmlndXJlKHBvaW50LCBEMkQxX0ZJR1VS
RV9CRUdJTl9GSUxMRUQpOwotICAgIG1fZmlndXJlSXNPcGVuZWQgPSB0cnVlOwotfQotCi12b2lk
IFBhdGg6OmFkZExpbmVUb1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAg
IG9wZW5GaWd1cmVBdEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5KCk7Ci0gICAgbV9hY3RpdmVQYXRo
LT5BZGRMaW5lKHBvaW50KTsKLX0KLQotdm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUb1Nsb3dDYXNl
KGNvbnN0IEZsb2F0UG9pbnQmIGNwLCBjb25zdCBGbG9hdFBvaW50JiBwKQotewotICAgIG9wZW5G
aWd1cmVBdEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5KCk7Ci0gICAgbV9hY3RpdmVQYXRoLT5BZGRR
dWFkcmF0aWNCZXppZXIoRDJEMTo6UXVhZHJhdGljQmV6aWVyU2VnbWVudChjcCwgcCkpOwotfQot
Ci12b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG9TbG93Q2FzZShjb25zdCBGbG9hdFBvaW50JiBj
cDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYgcCkKLXsKLSAgICBv
cGVuRmlndXJlQXRDdXJyZW50UG9pbnRJZk5lY2Vzc2FyeSgpOwotICAgIG1fYWN0aXZlUGF0aC0+
QWRkQmV6aWVyKEQyRDE6OkJlemllclNlZ21lbnQoY3AxLCBjcDIsIHApKTsKLX0KLQotdm9pZCBQ
YXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIs
IGZsb2F0IHJhZGl1cykKLXsKLSAgICBGbG9hdFBvaW50IHAwID0gY3VycmVudFBvaW50KCk7Ci0K
LSAgICBpZiAocDEgPT0gcDAgfHwgcDEgPT0gcDIgfHwgV1RGOjphcmVFc3NlbnRpYWxseUVxdWFs
KHJhZGl1cywgMC4wZikpCi0gICAgICAgIHJldHVybiBhZGRMaW5lVG8ocDEpOwotCi0gICAgZmxv
YXQgZGlyZWN0aW9uID0gKHAyLngoKSAtIHAxLngoKSkgKiAocDAueSgpIC0gcDEueSgpKSArIChw
Mi55KCkgLSBwMS55KCkpICogKHAxLngoKSAtIHAwLngoKSk7Ci0gICAgaWYgKFdURjo6YXJlRXNz
ZW50aWFsbHlFcXVhbChkaXJlY3Rpb24sIDAuMGYpKQotICAgICAgICByZXR1cm4gYWRkTGluZVRv
KHAxKTsKLQotICAgIGF1dG8gYTIgPSB0b0Zsb2F0UG9pbnQocDAgLSBwMSkubGVuZ3RoU3F1YXJl
ZCgpOwotICAgIGF1dG8gYjIgPSB0b0Zsb2F0UG9pbnQocDEgLSBwMikubGVuZ3RoU3F1YXJlZCgp
OwotICAgIGF1dG8gYzIgPSB0b0Zsb2F0UG9pbnQocDAgLSBwMikubGVuZ3RoU3F1YXJlZCgpOwot
Ci0gICAgZG91YmxlIGNvc3ggPSAoYTIgKyBiMiAtIGMyKSAvICgyLjAgKiBzdGQ6OnNxcnQoYTIg
KiBiMikpOwotICAgIGRvdWJsZSBzaW54ID0gc3RkOjpzcXJ0KDEuMCAtIGNvc3ggKiBjb3N4KTsK
LSAgICBkb3VibGUgZCA9IHJhZGl1cyAvICgoMSAtIGNvc3gpIC8gc2lueCk7Ci0KLSAgICBhdXRv
IGFuID0gdG9GbG9hdFBvaW50KHAxIC0gcDApLnNjYWxlZCgxLjAgLyBzdGQ6OnNxcnQoYTIpKTsK
LSAgICBhdXRvIGJuID0gdG9GbG9hdFBvaW50KHAxIC0gcDIpLnNjYWxlZCgxLjAgLyBzdGQ6OnNx
cnQoYjIpKTsKLQotICAgIGF1dG8gc3RhcnRQb2ludCA9IHRvRmxvYXRQb2ludChwMSAtIGFuLnNj
YWxlZChkKSk7Ci0gICAgYXV0byBwNCA9IHRvRmxvYXRQb2ludChwMSAtIGJuLnNjYWxlZChkKSk7
Ci0KLSAgICBib29sIGFudGljbG9ja3dpc2UgPSAoZGlyZWN0aW9uIDwgMCk7Ci0gICAgYW4uc2Nh
bGUocmFkaXVzICogKGFudGljbG9ja3dpc2UgPyAxIDogLTEpKTsKLQotICAgIEZsb2F0UG9pbnQg
Y2VudGVyKHN0YXJ0UG9pbnQueCgpICsgYW4ueSgpLCBzdGFydFBvaW50LnkoKSAtIGFuLngoKSk7
Ci0KLSAgICBkb3VibGUgYW5nbGUwID0gYXRhbjIoc3RhcnRQb2ludC55KCkgLSBjZW50ZXIueSgp
LCBzdGFydFBvaW50LngoKSAtIGNlbnRlci54KCkpOwotICAgIGRvdWJsZSBhbmdsZTEgPSBhdGFu
MihwNC55KCkgLSBjZW50ZXIueSgpLCBwNC54KCkgLSBjZW50ZXIueCgpKTsKLQotICAgIG9wZW5G
aWd1cmVBdEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5KCk7Ci0gICAgYWRkTGluZVRvKHN0YXJ0UG9p
bnQpOwotICAgIGFkZEFyYyhjZW50ZXIsIHJhZGl1cywgYW5nbGUwLCBhbmdsZTEsIGFudGljbG9j
a3dpc2UpOwotfQotCi1zdGF0aWMgYm9vbCBlcXVhbFJhZGl1c1dpZHRocyhjb25zdCBGbG9hdFNp
emUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0
IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdo
dFJhZGl1cykKLXsKLSAgICByZXR1cm4gdG9wTGVmdFJhZGl1cy53aWR0aCgpID09IHRvcFJpZ2h0
UmFkaXVzLndpZHRoKCkKLSAgICAgICAgJiYgdG9wUmlnaHRSYWRpdXMud2lkdGgoKSA9PSBib3R0
b21MZWZ0UmFkaXVzLndpZHRoKCkKLSAgICAgICAgJiYgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgp
ID09IGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCk7Ci19Ci0KLXN0YXRpYyBib29sIGVxdWFsUmFk
aXVzSGVpZ2h0cyhjb25zdCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6
ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29u
c3QgRmxvYXRTaXplJiBib3R0b21SaWdodFJhZGl1cykKLXsKLSAgICByZXR1cm4gdG9wTGVmdFJh
ZGl1cy5oZWlnaHQoKSA9PSBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpCi0gICAgICAgICYmIGJv
dHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkgPT0gdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkKLSAgICAg
ICAgJiYgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkgPT0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0
KCk7Ci19Ci0KLXZvaWQgUGF0aDo6cGxhdGZvcm1BZGRQYXRoRm9yUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZs
b2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1
cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdodFJhZGl1cykKLXsKLSAgICBib29sIGVxdWFs
V2lkdGhzID0gZXF1YWxSYWRpdXNXaWR0aHModG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMs
IGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKLSAgICBib29sIGVxdWFsSGVp
Z2h0cyA9IGVxdWFsUmFkaXVzSGVpZ2h0cyh0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywg
Ym90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpOwotCi0gICAgaWYgKGVxdWFsV2lk
dGhzICYmIGVxdWFsSGVpZ2h0cykgewotICAgICAgICAvLyBFbnN1cmUgdGhhdCBDRyBjYW4gcmVu
ZGVyIHRoZSByb3VuZGVkIHJlY3QuCi0gICAgICAgIGZsb2F0IHJhZGl1c1dpZHRoID0gdG9wTGVm
dFJhZGl1cy53aWR0aCgpOwotICAgICAgICBmbG9hdCByYWRpdXNIZWlnaHQgPSB0b3BMZWZ0UmFk
aXVzLmhlaWdodCgpOwotICAgICAgICBhdXRvIHJlY3RUb0RyYXcgPSBEMkQxOjpSZWN0RihyZWN0
LngoKSwgcmVjdC55KCksIHJlY3QubWF4WCgpLCByZWN0Lm1heFkoKSk7Ci0KLSAgICAgICAgQ09N
UHRyPElEMkQxUm91bmRlZFJlY3RhbmdsZUdlb21ldHJ5PiByb3VuZFJlY3Q7Ci0gICAgICAgIEhS
RVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUm91bmRl
ZFJlY3RhbmdsZUdlb21ldHJ5KEQyRDE6OlJvdW5kZWRSZWN0KHJlY3RUb0RyYXcsIHJhZGl1c1dp
ZHRoLCByYWRpdXNIZWlnaHQpLCAmcm91bmRSZWN0KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
U1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIGFwcGVuZEdlb21ldHJ5KHJvdW5kUmVjdC5nZXQoKSk7
Ci0gICAgICAgIEFTU0VSVChyZWZDb3VudChyb3VuZFJlY3QuZ2V0KCkpID09IDIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYWRkQmV6aWVyc0ZvclJvdW5kZWRSZWN0KHJlY3QsIHRv
cExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdo
dFJhZGl1cyk7Ci19Ci0KLXZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKLXsKLSAgICBpZiAoaXNO
dWxsKCkpIHsKLSAgICAgICAgbV9hY3RpdmVQYXRoID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghbV9hY3RpdmVQYXRoKSB7Ci0gICAgICAgIEFTU0VSVCghbV9m
aWd1cmVJc09wZW5lZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjbG9zZUFueU9w
ZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9DTE9TRUQpOwotfQotCi1zdGF0aWMgRmxvYXRQ
b2ludCBhcmNTdGFydChjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHJhZGl1cywgZmxv
YXQgc3RhcnRBbmdsZSkKLXsKLSAgICBGbG9hdFBvaW50IHN0YXJ0aW5nUG9pbnQgPSBjZW50ZXI7
Ci0gICAgZmxvYXQgc3RhcnRYID0gcmFkaXVzICogc3RkOjpjb3Moc3RhcnRBbmdsZSk7Ci0gICAg
ZmxvYXQgc3RhcnRZID0gcmFkaXVzICogc3RkOjpzaW4oc3RhcnRBbmdsZSk7Ci0gICAgc3RhcnRp
bmdQb2ludC5tb3ZlKHN0YXJ0WCwgc3RhcnRZKTsKLSAgICByZXR1cm4gc3RhcnRpbmdQb2ludDsK
LX0KLQotY29uc3QgZmxvYXQgdHdvUGkgPSAyLjBmICogcGlGbG9hdDsKLQotc3RhdGljIHZvaWQg
ZHJhd0FyY1NlY3Rpb24oSUQyRDFHZW9tZXRyeVNpbmsqIHNpbmssIGNvbnN0IEZsb2F0UG9pbnQm
IGNlbnRlciwgZmxvYXQgcmFkaXVzLCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwg
Ym9vbCBhbnRpY2xvY2t3aXNlKQotewotICAgIC8vIERpcmVjdDJEIHdhbnRzIHVzIHRvIHNwZWNp
ZnkgdGhlIGVuZCBwb2ludCBvZiB0aGUgYXJjLCBub3QgdGhlIGNlbnRlci4gSXQgd2lsbCBiZSBk
cmF3biBmcm9tCi0gICAgLy8gd2hhdGV2ZXIgdGhlIGN1cnJlbnQgcG9pbnQgaW4gdGhlICdtX2Fj
dGl2ZVBhdGgnIGlzLgotICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQgPSBjZW50ZXI7Ci0gICAgZmxv
YXQgZW5kWCA9IHJhZGl1cyAqIHN0ZDo6Y29zKGVuZEFuZ2xlKTsKLSAgICBmbG9hdCBlbmRZID0g
cmFkaXVzICogc3RkOjpzaW4oZW5kQW5nbGUpOwotICAgIGVuZFBvaW50Lm1vdmUoZW5kWCwgZW5k
WSk7Ci0KLSAgICBEMkQxX1NXRUVQX0RJUkVDVElPTiBkaXJlY3Rpb24gPSBhbnRpY2xvY2t3aXNl
ID8gRDJEMV9TV0VFUF9ESVJFQ1RJT05fQ09VTlRFUl9DTE9DS1dJU0UgOiBEMkQxX1NXRUVQX0RJ
UkVDVElPTl9DTE9DS1dJU0U7Ci0gICAgc2luay0+QWRkQXJjKEQyRDE6OkFyY1NlZ21lbnQoZW5k
UG9pbnQsIEQyRDE6OlNpemVGKHJhZGl1cywgcmFkaXVzKSwgMCwgZGlyZWN0aW9uLCBEMkQxX0FS
Q19TSVpFX1NNQUxMKSk7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkQXJjU2xvd0Nhc2UoY29uc3QgRmxv
YXRQb2ludCYgY2VudGVyLCBmbG9hdCByYWRpdXMsIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IGVu
ZEFuZ2xlLCBib29sIGFudGljbG9ja3dpc2UpCi17Ci0gICAgYXV0byBhcmNTdGFydFBvaW50ID0g
YXJjU3RhcnQoY2VudGVyLCByYWRpdXMsIHN0YXJ0QW5nbGUpOwotICAgIGlmICghbV9hY3RpdmVQ
YXRoKQotICAgICAgICBtb3ZlVG8oYXJjU3RhcnRQb2ludCk7Ci0gICAgZWxzZSBpZiAoIWFyZUVz
c2VudGlhbGx5RXF1YWwoY3VycmVudFBvaW50KCksIGFyY1N0YXJ0UG9pbnQpKSB7Ci0gICAgICAg
IC8vIElmIHRoZSBhcmMgZGVmaW5lZCBieSB0aGUgY2VudGVyIGFuZCByYWRpdXMgZG9lcyBub3Qg
aW50ZXJzZWN0IHRoZSBjdXJyZW50IHBvc2l0aW9uLAotICAgICAgICAvLyB3ZSBuZWVkIHRvIGRy
YXcgYSBsaW5lIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIHN0YXJ0aW5nIHBvaW50
IG9mIHRoZSBhcmMuCi0gICAgICAgIGFkZExpbmVUbyhhcmNTdGFydFBvaW50KTsKLSAgICB9Ci0K
LSAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHN0ZDo6YWJzKGVuZEFuZ2xlIC0gc3Rh
cnRBbmdsZSksIHR3b1BpKSkKLSAgICAgICAgcmV0dXJuIGFkZEVsbGlwc2UoRmxvYXRSZWN0KGNl
bnRlci54KCkgLSByYWRpdXMsIGNlbnRlci55KCkgLSByYWRpdXMsIDIuMCAqIHJhZGl1cywgMi4w
ICogcmFkaXVzKSk7Ci0KLSAgICBpZiAoYW50aWNsb2Nrd2lzZSkgewotICAgICAgICBpZiAoZW5k
QW5nbGUgPiBzdGFydEFuZ2xlKSB7Ci0gICAgICAgICAgICBlbmRBbmdsZSAtPSB0d29QaSAqIHN0
ZDo6Y2VpbCgoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKSAvIHR3b1BpKTsKLSAgICAgICAgICAgIEFT
U0VSVChlbmRBbmdsZSA8PSBzdGFydEFuZ2xlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmIChzdGFydEFuZ2xlID4gZW5kQW5nbGUpIHsKLSAgICAgICAgICAgIHN0YXJ0QW5n
bGUgLT0gdHdvUGkgKiBzdGQ6OmNlaWwoKHN0YXJ0QW5nbGUgLSBlbmRBbmdsZSkgLyB0d29QaSk7
Ci0gICAgICAgICAgICBBU1NFUlQoc3RhcnRBbmdsZSA8PSBlbmRBbmdsZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBjb25zdCBmbG9hdCBkZWx0YSA9IGFudGljbG9ja3dpc2UgPyAtcGlPdmVy
VHdvRmxvYXQgOiBwaU92ZXJUd29GbG9hdDsKLSAgICBmbG9hdCByZW1haW5pbmdBcmNBbmdsZSA9
IGVuZEFuZ2xlIC0gc3RhcnRBbmdsZTsKLQotICAgIHdoaWxlICgocmVtYWluaW5nQXJjQW5nbGUg
PiAwICYmIHJlbWFpbmluZ0FyY0FuZ2xlID4gZGVsdGEpIHx8IChyZW1haW5pbmdBcmNBbmdsZSA8
IDAgJiYgcmVtYWluaW5nQXJjQW5nbGUgPCBkZWx0YSkpIHsKLSAgICAgICAgY29uc3QgZG91Ymxl
IGN1cnJlbnRFbmRBbmdsZSA9IHN0YXJ0QW5nbGUgKyBkZWx0YTsKLSAgICAgICAgZHJhd0FyY1Nl
Y3Rpb24obV9hY3RpdmVQYXRoLmdldCgpLCBjZW50ZXIsIHJhZGl1cywgc3RhcnRBbmdsZSwgY3Vy
cmVudEVuZEFuZ2xlLCBhbnRpY2xvY2t3aXNlKTsKLSAgICAgICAgc3RhcnRBbmdsZSA9IGN1cnJl
bnRFbmRBbmdsZTsKLSAgICAgICAgcmVtYWluaW5nQXJjQW5nbGUgLT0gZGVsdGE7Ci0gICAgfQot
Ci0gICAgLy8gSGFuZGxlIGFueSByZW1haW5pbmcgcGFydCBvZiB0aGUgYXJjOgotICAgIGlmIChz
dGQ6OmFicyhyZW1haW5pbmdBcmNBbmdsZSkgPiAxZS02KQotICAgICAgICBkcmF3QXJjU2VjdGlv
bihtX2FjdGl2ZVBhdGguZ2V0KCksIGNlbnRlciwgcmFkaXVzLCBzdGFydEFuZ2xlLCBzdGFydEFu
Z2xlICsgcmVtYWluaW5nQXJjQW5nbGUsIGFudGljbG9ja3dpc2UpOwotfQotCi12b2lkIFBhdGg6
OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQotewotICAgIGlmICghbV9hY3RpdmVQYXRoKQot
ICAgICAgICBtb3ZlVG8oci5sb2NhdGlvbigpKTsKLQotICAgIENPTVB0cjxJRDJEMVJlY3Rhbmds
ZUdlb21ldHJ5PiByZWN0YW5nbGU7Ci0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6
c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVSZWN0YW5nbGVHZW9tZXRyeShyLCAmcmVjdGFuZ2xlKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICBhcHBlbmRHZW9tZXRyeShy
ZWN0YW5nbGUuZ2V0KCkpOwotICAgIEFTU0VSVChyZWZDb3VudChyZWN0YW5nbGUuZ2V0KCkpID09
IDIpOwotfQotCi12b2lkIFBhdGg6OmFkZEVsbGlwc2UoRmxvYXRQb2ludCBwLCBmbG9hdCByYWRp
dXNYLCBmbG9hdCByYWRpdXNZLCBmbG9hdCByb3RhdGlvbiwgZmxvYXQgc3RhcnRBbmdsZSwgZmxv
YXQgZW5kQW5nbGUsIGJvb2wgYW50aWNsb2Nrd2lzZSkKLXsKLSAgICBBZmZpbmVUcmFuc2Zvcm0g
dHJhbnNmb3JtOwotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUocC54KCksIHAueSgpKS5yb3RhdGUo
cmFkMmRlZyhyb3RhdGlvbikpLnNjYWxlKHJhZGl1c1gsIHJhZGl1c1kpOwotCi0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
cikKLXsKLSAgICBpZiAoIW1fYWN0aXZlUGF0aCkKLSAgICAgICAgbW92ZVRvKHIubG9jYXRpb24o
KSk7Ci0KLSAgICBDT01QdHI8SUQyRDFFbGxpcHNlR2VvbWV0cnk+IGVsbGlwc2U7Ci0gICAgLy8g
Tm90ZTogVGhlIHJhZGlpIG9mIHRoZSBlbGxpcHNlIGNvbnRhaW5lZCB3aXRoaW4gYSByZWN0YW5n
ZSBhcmUgaGFsZiB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgcmVjdC4KLSAgICBIUkVTVUxU
IGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUVsbGlwc2VHZW9t
ZXRyeShEMkQxOjpFbGxpcHNlKHIuY2VudGVyKCksIDAuNSAqIHIud2lkdGgoKSwgMC41ICogci5o
ZWlnaHQoKSksICZlbGxpcHNlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsK
LSAgICBhcHBlbmRHZW9tZXRyeShlbGxpcHNlLmdldCgpKTsKLSAgICBBU1NFUlQocmVmQ291bnQo
ZWxsaXBzZS5nZXQoKSkgPT0gMik7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkUGF0aChjb25zdCBQYXRo
JiBwYXRoLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBpZiAoIXBh
dGgucGxhdGZvcm1QYXRoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghdHJhbnNmb3Jt
LmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi0KLXZvaWQgUGF0aDo6Y2xlYXIoKQotewotICAgIGlmIChpc051bGwoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9wYXRoID0gbnVsbHB0cjsKLSAgICBtX2FjdGl2ZVBhdGggPSBu
dWxscHRyOwotICAgIGNsZWFyR2VvbWV0cmllcygpOwotfQotCi1ib29sIFBhdGg6OmlzRW1wdHlT
bG93Q2FzZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BhdGgtPkdldFNvdXJjZUdlb21ldHJ5Q291
bnQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBBU1NFUlQobV9wYXRoLT5HZXRTb3Vy
Y2VHZW9tZXRyeUNvdW50KCkgPT0gbV9nZW9tZXRyaWVzLnNpemUoKSk7Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLUZsb2F0UG9pbnQgUGF0aDo6Y3VycmVudFBvaW50U2xvd0Nhc2UoKSBjb25z
dAotewotICAgIGZsb2F0IGxlbmd0aCA9IDA7Ci0gICAgSFJFU1VMVCBociA9IG1fcGF0aC0+Q29t
cHV0ZUxlbmd0aChudWxscHRyLCAmbGVuZ3RoKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0g
ICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7Ci0KLSAgICBEMkQxX1BPSU5UXzJGIHBvaW50ID0g
eyB9OwotICAgIEQyRDFfUE9JTlRfMkYgdGFuZ2VudCA9IHsgfTsKLSAgICBociA9IG1fcGF0aC0+
Q29tcHV0ZVBvaW50QXRMZW5ndGgobGVuZ3RoLCBudWxscHRyLCAmcG9pbnQsICZ0YW5nZW50KTsK
LSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7Ci0K
LSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLWZsb2F0IFBhdGg6Omxlbmd0aCgpIGNvbnN0Ci17Ci0g
ICAgZmxvYXQgbGVuZ3RoID0gMDsKLSAgICBIUkVTVUxUIGhyID0gbV9wYXRoLT5Db21wdXRlTGVu
Z3RoKG51bGxwdHIsICZsZW5ndGgpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbGVuZ3RoOwotfQotCi12b2lkIFBhdGg6OmFwcGx5U2xv
d0Nhc2UoY29uc3QgUGF0aEFwcGxpZXJGdW5jdGlvbiYpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotYm9vbCBQYXRoOjppc051bGwoKSBjb25zdAotewotICAgIHJldHVybiAh
bV9wYXRoOwotfQotCi19Ci0KLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJELmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVj
dDJELmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1BhdHRlcm5EaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw2NyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgotCi0jaWYgVVNFKERJUkVDVDJE
KQotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxk
MmQxLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLUlEMkQxQml0bWFwQnJ1c2gqIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihj
b25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IGFscGhhLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW5zZm9ybWF0aW9uKSBjb25zdAotewotICAgIEFmZmluZVRy
YW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtID0gdXNlclNwYWNlVHJhbnNmb3JtYXRpb24gKiBtX3Bh
dHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9uOwotICAgIGF1dG8gYml0bWFwQnJ1c2hQcm9wZXJ0aWVz
ID0gRDJEMTo6Qml0bWFwQnJ1c2hQcm9wZXJ0aWVzKCk7Ci0gICAgYml0bWFwQnJ1c2hQcm9wZXJ0
aWVzLmV4dGVuZE1vZGVYID0gbV9yZXBlYXRYID8gRDJEMV9FWFRFTkRfTU9ERV9XUkFQIDogRDJE
MV9FWFRFTkRfTU9ERV9DTEFNUDsKLSAgICBiaXRtYXBCcnVzaFByb3BlcnRpZXMuZXh0ZW5kTW9k
ZVkgPSBtX3JlcGVhdFkgPyBEMkQxX0VYVEVORF9NT0RFX1dSQVAgOiBEMkQxX0VYVEVORF9NT0RF
X0NMQU1QOwotCi0gICAgYXV0byBicnVzaFByb3BlcnRpZXMgPSBEMkQxOjpCcnVzaFByb3BlcnRp
ZXMoKTsKLSAgICBicnVzaFByb3BlcnRpZXMudHJhbnNmb3JtID0gcGF0dGVyblRyYW5zZm9ybTsK
LSAgICBicnVzaFByb3BlcnRpZXMub3BhY2l0eSA9IGFscGhhOwotCi0gICAgYXV0byYgcGF0dGVy
bkltYWdlID0gdGlsZUltYWdlKCk7Ci0gICAgYXV0byBuYXRpdmVJbWFnZSA9IHBhdHRlcm5JbWFn
ZS5uYXRpdmVJbWFnZSgmY29udGV4dCk7Ci0gICAgaWYgKCFuYXRpdmVJbWFnZSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHBsYXRmb3JtQ29udGV4dCA9IGNvbnRleHQucGxh
dGZvcm1Db250ZXh0KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocGxhdGZvcm1Db250ZXh0KTsKLQot
ICAgIElEMkQxQml0bWFwQnJ1c2gqIHBhdHRlcm5CcnVzaCA9IG51bGxwdHI7Ci0gICAgSFJFU1VM
VCBociA9IHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCktPkNyZWF0ZUJpdG1hcEJydXNo
KG5hdGl2ZUltYWdlLmdldCgpLCAmYml0bWFwQnJ1c2hQcm9wZXJ0aWVzLCAmYnJ1c2hQcm9wZXJ0
aWVzLCAmcGF0dGVybkJydXNoKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgcmV0
dXJuIHBhdHRlcm5CcnVzaDsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29u
dGV4dERpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDM5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dERpcmVjdDJELmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJl
Y3QyRE9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgotI2luY2x1
ZGUgPGQyZDEuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBFbmNhcHN1bGF0ZXMgdGhl
IGFkZGl0aW9uYWwgcGFpbnRpbmcgc3RhdGUgaW5mb3JtYXRpb24gd2Ugc3RvcmUgZm9yIGVhY2gK
LS8vIHB1c2hlZCBncmFwaGljcyBzdGF0ZS4KLWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
OjpTdGF0ZSB7Ci1wdWJsaWM6Ci0gICAgU3RhdGUoKSA9IGRlZmF1bHQ7Ci0KLSAgICBDT01QdHI8
SUQyRDFEcmF3aW5nU3RhdGVCbG9jaz4gbV9kcmF3aW5nU3RhdGVCbG9jazsKLSAgICBDT01QdHI8
SUQyRDFMYXllcj4gbV9hY3RpdmVMYXllcjsKLSAgICBWZWN0b3I8RGlyZWN0MkRMYXllclR5cGU+
IG1fY2xpcHM7Ci19OwotCi1QbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6UGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCwgRnVuY3Rpb248dm9pZCgp
PiYmIHByZURyYXdIYW5kbGVyLCBGdW5jdGlvbjx2b2lkKCk+JiYgcG9zdERyYXdIYW5kbGVyKQot
ICAgIDogbV9yZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KQotICAgICwgbV9wcmVEcmF3SGFuZGxl
cihXVEZNb3ZlKHByZURyYXdIYW5kbGVyKSkKLSAgICAsIG1fcG9zdERyYXdIYW5kbGVyKFdURk1v
dmUocG9zdERyYXdIYW5kbGVyKSkKLXsKLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKFN0YXRlKCkp
OwotICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLQotICAgIG1fZGV2aWNlQ29u
dGV4dC5xdWVyeShtX3JlbmRlclRhcmdldC5nZXQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoISFt
X2RldmljZUNvbnRleHQpOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRS
ZW5kZXJUYXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsKLSAgICBtX3Jl
bmRlclRhcmdldCA9IHJlbmRlclRhcmdldDsKLQotICAgIG1fZGV2aWNlQ29udGV4dC5xdWVyeSht
X3JlbmRlclRhcmdldC5nZXQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoISFtX2RldmljZUNvbnRl
eHQpOwotfQotCi1JRDJEMUxheWVyKiBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6Y2xpcExheWVy
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdGF0ZS0+bV9hY3RpdmVMYXllci5nZXQoKTsKLX0K
LQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6Y2xlYXJDbGlwcyhWZWN0b3I8RGlyZWN0
MkRMYXllclR5cGU+JiBjbGlwcykKLXsKLSAgICBmb3IgKGF1dG8gY2xpcFR5cGUgPSBjbGlwcy5y
YmVnaW4oKTsgY2xpcFR5cGUgIT0gY2xpcHMucmVuZCgpOyArK2NsaXBUeXBlKSB7Ci0gICAgICAg
IGlmICgqY2xpcFR5cGUgPT0gQXhpc0FsaWduZWRDbGlwKQotICAgICAgICAgICAgbV9yZW5kZXJU
YXJnZXQtPlBvcEF4aXNBbGlnbmVkQ2xpcCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
X3JlbmRlclRhcmdldC0+UG9wTGF5ZXIoKTsKLSAgICB9Ci0KLSAgICBjbGlwcy5jbGVhcigpOwot
fQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpyZXN0b3JlKCkKLXsKLSAgICBBU1NF
UlQobV9yZW5kZXJUYXJnZXQpOwotCi0gICAgLy8gTm8gbmVlZCB0byByZXN0b3JlIGlmIHdlIGRv
bid0IGhhdmUgYSBzYXZlZCBlbGVtZW50IG9uIHRoZSBzdGFjay4KLSAgICBpZiAobV9zdGF0ZVN0
YWNrLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiByZXN0b3JlU3Rh
dGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgIGlmIChyZXN0b3JlU3RhdGUubV9kcmF3aW5n
U3RhdGVCbG9jaykgewotICAgICAgICBtX3JlbmRlclRhcmdldC0+UmVzdG9yZURyYXdpbmdTdGF0
ZShyZXN0b3JlU3RhdGUubV9kcmF3aW5nU3RhdGVCbG9jay5nZXQoKSk7Ci0gICAgICAgIHJlc3Rv
cmVTdGF0ZS5tX2RyYXdpbmdTdGF0ZUJsb2NrID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBjbGVh
ckNsaXBzKHJlc3RvcmVTdGF0ZS5tX2NsaXBzKTsKLQotICAgIG1fc3RhdGVTdGFjay5yZW1vdmVM
YXN0KCk7Ci0gICAgQVNTRVJUKCFtX3N0YXRlU3RhY2suaXNFbXB0eSgpKTsKLSAgICBtX3N0YXRl
ID0gJm1fc3RhdGVTdGFjay5sYXN0KCk7Ci19Ci0KLVBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjp+
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ6OnNhdmUoKQotewotICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpID49
IDEpOyAvLyBUaGVyZSBzaG91bGQgYWx3YXlzIGJlIG9uZSBzdGF0ZSBvbiB0aGUgc3RhY2suCi0g
ICAgQVNTRVJUKG1fcmVuZGVyVGFyZ2V0KTsKLQotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoU3Rh
dGUoKSk7Ci0gICAgbV9zdGF0ZSA9ICZtX3N0YXRlU3RhY2subGFzdCgpOwotCi0gICAgR3JhcGhp
Y3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZURyYXdpbmdTdGF0ZUJsb2NrKCZtX3N0
YXRlLT5tX2RyYXdpbmdTdGF0ZUJsb2NrKTsKLQotICAgIG1fcmVuZGVyVGFyZ2V0LT5TYXZlRHJh
d2luZ1N0YXRlKG1fc3RhdGUtPm1fZHJhd2luZ1N0YXRlQmxvY2suZ2V0KCkpOwotfQotCi12b2lk
IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpwdXNoUmVuZGVyQ2xpcChEaXJlY3QyRExheWVyVHlw
ZSBjbGlwVHlwZSkKLXsKLSAgICBBU1NFUlQoaGFzU2F2ZWRTdGF0ZSgpKTsKLSAgICBtX3N0YXRl
LT5tX2NsaXBzLmFwcGVuZChjbGlwVHlwZSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQ6OnNldEFjdGl2ZUxheWVyKENPTVB0cjxJRDJEMUxheWVyPiYmIGxheWVyKQotewotICAg
IEFTU0VSVChoYXNTYXZlZFN0YXRlKCkpOwotICAgIG1fc3RhdGUtPm1fYWN0aXZlTGF5ZXIgPSBs
YXllcjsKLX0KLQotQ09NUHRyPElEMkQxU29saWRDb2xvckJydXNoPiBQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRDo6YnJ1c2hXaXRoQ29sb3IoY29uc3QgRDJEMV9DT0xPUl9GJiBjb2xvcikKLXsKLSAg
ICBhdXRvIGNvbG9yS2V5ID0gY29sb3JDb252ZXJ0PFNSR0JBPHVpbnQ4X3Q+PihTUkdCQTxmbG9h
dD4geyBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hIH0pOwotCi0gICAgaWYgKCFj
b2xvcktleSkgewotICAgICAgICBpZiAoIW1femVyb0JydXNoKQotICAgICAgICAgICAgbV9yZW5k
ZXJUYXJnZXQtPkNyZWF0ZVNvbGlkQ29sb3JCcnVzaChjb2xvciwgJm1femVyb0JydXNoKTsKLSAg
ICAgICAgcmV0dXJuIG1femVyb0JydXNoOwotICAgIH0KLQotICAgIGlmIChjb2xvcktleSA9PSAw
eEZGRkZGRkZGKSB7Ci0gICAgICAgIGlmICghbV93aGl0ZUJydXNoKQotICAgICAgICAgICAgbV9y
ZW5kZXJUYXJnZXQtPkNyZWF0ZVNvbGlkQ29sb3JCcnVzaChjb2xvciwgJm1fd2hpdGVCcnVzaCk7
Ci0gICAgICAgIHJldHVybiBtX3doaXRlQnJ1c2g7Ci0gICAgfQotCi0gICAgYXV0byBleGlzdGlu
Z0JydXNoID0gbV9zb2xpZENvbG9yZWRCcnVzaENhY2hlLmVuc3VyZShjb2xvcktleSwgW3RoaXMs
IGNvbG9yXSB7Ci0gICAgICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gY29sb3JCcnVz
aDsKLSAgICAgICAgbV9yZW5kZXJUYXJnZXQtPkNyZWF0ZVNvbGlkQ29sb3JCcnVzaChjb2xvciwg
JmNvbG9yQnJ1c2gpOwotICAgICAgICByZXR1cm4gY29sb3JCcnVzaDsKLSAgICB9KTsKLQotICAg
IHJldHVybiBleGlzdGluZ0JydXNoLml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotdm9pZCBQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRDo6cmVjb21wdXRlU3Ryb2tlU3R5bGUoKQotewotICAgIGlmICghbV9z
dHJva2VTeWxlSXNEaXJ0eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kMmRTdHJva2VTdHls
ZSA9IG51bGxwdHI7Ci0KLSAgICBEYXNoQXJyYXkgZGFzaGVzOwotICAgIGZsb2F0IHBhdHRlcm5P
ZmZzZXQgPSAwOwotICAgIGF1dG8gZGFzaFN0eWxlID0gRDJEMV9EQVNIX1NUWUxFX1NPTElEOwot
Ci0gICAgaWYgKChtX3N0cm9rZVN0eWxlICE9IFNvbGlkU3Ryb2tlKSAmJiAobV9zdHJva2VTdHls
ZSAhPSBOb1N0cm9rZSkpIHsKLSAgICAgICAgZGFzaFN0eWxlID0gRDJEMV9EQVNIX1NUWUxFX0NV
U1RPTTsKLSAgICAgICAgcGF0dGVybk9mZnNldCA9IG1fcGF0dGVybk9mZnNldCAvIG1fc3Ryb2tl
VGhpY2tuZXNzOwotICAgICAgICBkYXNoZXMgPSBtX2Rhc2hlczsKLQotICAgICAgICAvLyBJbiBE
aXJlY3QyRCwgZGFzaGVzIGFuZCBkb3RzIGFyZSBkZWZpbmVkIGluIHRlcm1zIG9mIHRoZSByYXRp
byBvZiB0aGUgZGFzaCBsZW5ndGggdG8gdGhlIGxpbmUgdGhpY2tuZXNzLgotICAgICAgICBmb3Ig
KGF1dG8mIGRhc2ggOiBkYXNoZXMpCi0gICAgICAgICAgICBkYXNoIC89IG1fc3Ryb2tlVGhpY2tu
ZXNzOwotICAgIH0KLQotICAgIGF1dG8gc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzID0gRDJEMTo6U3Ry
b2tlU3R5bGVQcm9wZXJ0aWVzKG1fbGluZUNhcCwgbV9saW5lQ2FwLCBtX2xpbmVDYXAsIG1fbGlu
ZUpvaW4sIG1fbWl0ZXJMaW1pdCwgZGFzaFN0eWxlLCBwYXR0ZXJuT2Zmc2V0KTsKLSAgICBHcmFw
aGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlU3Ryb2tlU3R5bGUoJnN0cm9rZVN0
eWxlUHJvcGVydGllcywgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSwgJm1fZDJkU3Ryb2tl
U3R5bGUpOwotCi0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IGZhbHNlOwotfQotCi1JRDJEMVN0
cm9rZVN0eWxlKiBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c3Ryb2tlU3R5bGUoKQotewotICAg
IHJlY29tcHV0ZVN0cm9rZVN0eWxlKCk7Ci0gICAgcmV0dXJuIG1fZDJkU3Ryb2tlU3R5bGUuZ2V0
KCk7Ci19Ci0KLUQyRDFfU1RST0tFX1NUWUxFX1BST1BFUlRJRVMgUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQ6OnN0cm9rZVN0eWxlUHJvcGVydGllcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEQyRDE6
OlN0cm9rZVN0eWxlUHJvcGVydGllcyhtX2xpbmVDYXAsIG1fbGluZUNhcCwgbV9saW5lQ2FwLCBt
X2xpbmVKb2luLCBtX21pdGVyTGltaXQsIEQyRDFfREFTSF9TVFlMRV9TT0xJRCwgMC4wZik7Ci19
Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldExpbmVDYXAoRDJEMV9DQVBfU1RZ
TEUgbGluZUNhcCkKLXsKLSAgICBpZiAobV9saW5lQ2FwID09IGxpbmVDYXApCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fbGluZUNhcCA9IGxpbmVDYXA7Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0
eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldExpbmVKb2lu
KEQyRDFfTElORV9KT0lOIGpvaW4pCi17Ci0gICAgaWYgKG1fbGluZUpvaW4gPT0gam9pbikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9saW5lSm9pbiA9IGpvaW47Ci0gICAgbV9zdHJva2VTeWxl
SXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFN0
cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQotewotICAgIGlmIChtX3N0cm9rZVN0
eWxlID09IHN0cm9rZVN0eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0cm9rZVN0eWxl
ID0gc3Ryb2tlU3R5bGU7Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZv
aWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlj
a25lc3MpCi17Ci0gICAgaWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbCh0aGlja25lc3MsIG1f
c3Ryb2tlVGhpY2tuZXNzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdHJva2VUaGlja25l
c3MgPSB0aGlja25lc3M7Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZv
aWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoZmxvYXQgY2FudmFzTWl0
ZXJMaW1pdCkKLXsKLSAgICAvLyBEaXJlY3QyRCBtaXRlciBsaW1pdCBpcyBpbiB0ZXJtcyBvZiBI
QUxGIHRoZSBsaW5lIHRoaWNrbmVzcy4KLSAgICBmbG9hdCBtaXRlckxpbWl0ID0gMC41ZiAqIGNh
bnZhc01pdGVyTGltaXQ7Ci0gICAgaWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChtaXRlckxp
bWl0LCBtX21pdGVyTGltaXQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX21pdGVyTGltaXQg
PSBtaXRlckxpbWl0OwotICAgIG1fc3Ryb2tlU3lsZUlzRGlydHkgPSB0cnVlOwotfQotCi12b2lk
IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXREYXNoT2Zmc2V0KGZsb2F0IGRhc2hPZmZzZXQp
Ci17Ci0gICAgaWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChkYXNoT2Zmc2V0LCBtX2Rhc2hP
ZmZzZXQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Rhc2hPZmZzZXQgPSBkYXNoT2Zmc2V0
OwotICAgIG1fc3Ryb2tlU3lsZUlzRGlydHkgPSB0cnVlOwotfQotCi12b2lkIFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEOjpzZXREYXNoZXMoY29uc3QgRGFzaEFycmF5JiBkYXNoZXMpCi17Ci0gICAg
aWYgKG1fZGFzaGVzID09IGRhc2hlcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXNoZXMg
PSBkYXNoZXM7Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFBhdHRlcm5XaWR0aChmbG9hdCBwYXR0ZXJuV2lkdGgp
Ci17Ci0gICAgaWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChwYXR0ZXJuV2lkdGgsIG1fcGF0
dGVybldpZHRoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYXR0ZXJuV2lkdGggPSBwYXR0
ZXJuV2lkdGg7Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFBhdHRlcm5PZmZzZXQoZmxvYXQgcGF0dGVybk9mZnNl
dCkKLXsKLSAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHBhdHRlcm5PZmZzZXQsIG1f
cGF0dGVybk9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGF0dGVybk9mZnNldCA9
IHBhdHRlcm5PZmZzZXQ7Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZv
aWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmJlZ2luRHJhdygpCi17Ci0gICAgQVNTRVJUKG1f
cmVuZGVyVGFyZ2V0KTsKLSAgICBtX3JlbmRlclRhcmdldC0+QmVnaW5EcmF3KCk7Ci0gICAgKyti
ZWdpbkRyYXdDb3VudDsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6ZW5kRHJh
dygpCi17Ci0gICAgQVNTRVJUKG1fcmVuZGVyVGFyZ2V0KTsKLQotICAgIGlmIChtX3N0YXRlU3Rh
Y2suc2l6ZSgpID4gMSkKLSAgICAgICAgcmVzdG9yZSgpOwotCi0gICAgY2xlYXJDbGlwcyhtX3N0
YXRlLT5tX2NsaXBzKTsKLQotICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpID49IDEpOwot
Ci0gICAgRDJEMV9UQUcgZmlyc3QsIHNlY29uZDsKLSAgICBIUkVTVUxUIGhyID0gbV9yZW5kZXJU
YXJnZXQtPkVuZERyYXcoJmZpcnN0LCAmc2Vjb25kKTsKLQotICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJGYWlsZWQgaW4gUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQ6OmVuZERyYXc6IGhyPSV4ZCwgZmlyc3Q9JWxkLCBzZWNvbmQ9JWxkIiwgaHIsIGZpcnN0LCBz
ZWNvbmQpOwotCi0gICAgLS1iZWdpbkRyYXdDb3VudDsKLQotICAgIGNvbXBvc2l0ZUlmTmVlZGVk
KCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFRhZ3MoRDJEMV9UQUcg
dGFnMSwgRDJEMV9UQUcgdGFnMikKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIG1fcmVuZGVy
VGFyZ2V0LT5TZXRUYWdzKHRhZzEsIHRhZzIpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGFn
MSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRhZzIpOwotI2VuZGlmCi19Ci0KLXZvaWQgUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQ6Om5vdGlmeVByZURyYXdPYnNlcnZlcigpCi17Ci0gICAgbV9wcmVEcmF3
SGFuZGxlcigpOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpub3RpZnlQb3N0
RHJhd09ic2VydmVyKCkKLXsKLSAgICBtX3Bvc3REcmF3SGFuZGxlcigpOwotfQotCi12b2lkIFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEOjpwdXNoQ2xpcChEaXJlY3QyRExheWVyVHlwZSBjbGlwVHlw
ZSkKLXsKLSAgICBtX3N0YXRlLT5tX2NsaXBzLmFwcGVuZChjbGlwVHlwZSk7Ci19Ci0KLXZvaWQg
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmNvbXBvc2l0ZUlmTmVlZGVkKCkKLXsKLSAgICBpZiAo
IW1fY29tcG9zaXRlU291cmNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SUQyRDFC
aXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldChRdWVyeSwgbV9yZW5kZXJUYXJnZXQuZ2V0
KCkpOwotICAgIGlmICghYml0bWFwVGFyZ2V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01Q
dHI8SUQyRDFCaXRtYXA+IGN1cnJlbnRDYW52YXMgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwQ29w
eUZyb21Db250ZXh0KGJpdG1hcFRhcmdldC5nZXQoKSk7Ci0gICAgaWYgKCFjdXJyZW50Q2FudmFz
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SUQyRDFFZmZlY3Q+IGVmZmVjdDsKLQot
ICAgIGlmIChtX2NvbXBvc2l0ZU1vZGUgIT0gRDJEMV9DT01QT1NJVEVfTU9ERV9GT1JDRV9EV09S
RCkgewotICAgICAgICBtX2RldmljZUNvbnRleHQtPkNyZWF0ZUVmZmVjdChDTFNJRF9EMkQxQ29t
cG9zaXRlLCAmZWZmZWN0KTsKLSAgICAgICAgZWZmZWN0LT5TZXRJbnB1dCgwLCBtX2NvbXBvc2l0
ZVNvdXJjZS5nZXQoKSk7Ci0gICAgICAgIGVmZmVjdC0+U2V0SW5wdXQoMSwgY3VycmVudENhbnZh
cy5nZXQoKSk7Ci0gICAgICAgIGVmZmVjdC0+U2V0VmFsdWUoRDJEMV9DT01QT1NJVEVfUFJPUF9N
T0RFLCBtX2NvbXBvc2l0ZU1vZGUpOwotICAgIH0gZWxzZSBpZiAobV9ibGVuZE1vZGUgIT0gRDJE
MV9CTEVORF9NT0RFX0ZPUkNFX0RXT1JEKSB7Ci0gICAgICAgIG1fZGV2aWNlQ29udGV4dC0+Q3Jl
YXRlRWZmZWN0KENMU0lEX0QyRDFCbGVuZCwgJmVmZmVjdCk7Ci0gICAgICAgIGVmZmVjdC0+U2V0
SW5wdXQoMCwgY3VycmVudENhbnZhcy5nZXQoKSk7Ci0gICAgICAgIGVmZmVjdC0+U2V0SW5wdXQo
MSwgbV9jb21wb3NpdGVTb3VyY2UuZ2V0KCkpOwotICAgICAgICBlZmZlY3QtPlNldFZhbHVlKEQy
RDFfQkxFTkRfUFJPUF9NT0RFLCBtX2JsZW5kTW9kZSk7Ci0gICAgfQotCi0gICAgaWYgKGVmZmVj
dCkgewotICAgICAgICBtX2RldmljZUNvbnRleHQtPkJlZ2luRHJhdygpOwotICAgICAgICBtX2Rl
dmljZUNvbnRleHQtPkNsZWFyKEQyRDE6OkNvbG9yRigwLCAwLCAwLCAwKSk7Ci0gICAgICAgIG1f
ZGV2aWNlQ29udGV4dC0+RHJhd0ltYWdlKGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIG1fZGV2aWNl
Q29udGV4dC0+RW5kRHJhdygpOwotICAgIH0KLQotICAgIG1fY29tcG9zaXRlU291cmNlID0gbnVs
bHB0cjsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0QmxlbmRBbmRDb21w
b3NpdGVNb2RlKEQyRDFfQkxFTkRfTU9ERSBibGVuZCwgRDJEMV9DT01QT1NJVEVfTU9ERSBtb2Rl
KQotewotICAgIGlmIChtb2RlID09IG1fY29tcG9zaXRlTW9kZSAmJiBibGVuZCA9PSBtX2JsZW5k
TW9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRGlyZWN0MkQgaGFuZGxlcyBjb21wb3Np
dGluZyBiYXNlZCBvbiBiaXRtYXBzLiBJZiB3ZSBhcmUgY2hhbmdpbmcgdGhlCi0gICAgLy8gY29t
cG9zaXRpbmcgbW9kZSwgd2UgbmVlZCB0byBjYXB0dXJlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRo
ZSByZW5kZXJpbmcKLSAgICAvLyBpbiBhIGJpdG1hcCwgcGVyZm9ybSBkcmF3aW5nIG9wZXJhdGlv
bnMgdW50aWwgd2UgZmluaXNoLCB0aGVuIGhhbmRsZQotICAgIC8vIHRoZSBjb21wb3N0aW5nIG9m
IHRoZSB0d28gbGF5ZXJzLgotICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0
bWFwVGFyZ2V0KFF1ZXJ5LCBtX3JlbmRlclRhcmdldC5nZXQoKSk7Ci0gICAgaWYgKCFiaXRtYXBU
YXJnZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGVuZERyYXcoKTsKLQotICAgIG1fY29tcG9z
aXRlTW9kZSA9IG1vZGU7Ci0gICAgbV9ibGVuZE1vZGUgPSBibGVuZDsKLQotICAgIG1fY29tcG9z
aXRlU291cmNlID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcENvcHlGcm9tQ29udGV4dChiaXRtYXBU
YXJnZXQuZ2V0KCkpOwotCi0gICAgYmVnaW5EcmF3KCk7Ci0KLSAgICBtX2RldmljZUNvbnRleHQt
PkNsZWFyKEQyRDE6OkNvbG9yRigwLCAwLCAwLCAwKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRC5oCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaAkobm9uZXhpc3RlbnQpCkBAIC0x
LDIxMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQ09NUHRy
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2lu
Y2x1ZGUgPGQyZDFfMS5oPgotI2luY2x1ZGUgPGQyZDFlZmZlY3RzLmg+Ci0jaW5jbHVkZSA8ZDNk
MTFfMS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTsKLXN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZTsKLQotbmFtZXNwYWNl
IERpcmVjdDJEIHsKLXN0cnVjdCBGaWxsU291cmNlOwotc3RydWN0IFN0cm9rZVNvdXJjZTsKLXN0
cnVjdCBTaGFkb3dTdGF0ZTsKLX0KLQotY2xhc3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEKTsKLXB1YmxpYzoKLSAgICBQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRChJRDJEMVJlbmRlclRhcmdldCosIEZ1bmN0aW9uPHZvaWQoKT4mJiBwcmVEcmF3SGFuZGxl
ciA9IFtdKCkgeyB9LCBGdW5jdGlvbjx2b2lkKCk+JiYgcG9zdERyYXdIYW5kbGVyID0gW10oKSB7
IH0pOwotICAgIH5QbGF0Zm9ybUNvbnRleHREaXJlY3QyRCgpOwotCi0gICAgSUQyRDFSZW5kZXJU
YXJnZXQqIHJlbmRlclRhcmdldCgpIHsgcmV0dXJuIG1fcmVuZGVyVGFyZ2V0LmdldCgpOyB9Ci0g
ICAgdm9pZCBzZXRSZW5kZXJUYXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKLQotICAgIElEMkQx
RGV2aWNlQ29udGV4dCogZGV2aWNlQ29udGV4dCgpIHsgcmV0dXJuIG1fZGV2aWNlQ29udGV4dC5n
ZXQoKTsgfQotCi0gICAgSUQzRDExRGV2aWNlMSogZDNkRGV2aWNlKCkgY29uc3QgeyByZXR1cm4g
bV9kM2REZXZpY2UuZ2V0KCk7IH0KLSAgICB2b2lkIHNldEQzRERldmljZShJRDNEMTFEZXZpY2Ux
KiBkZXZpY2UpIHsgbV9kM2REZXZpY2UgPSBkZXZpY2U7IH0KLQotICAgIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZSogZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpIHsgcmV0dXJuIG1fZ3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZTsgfQotICAgIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0
ZShHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGdyYXBoaWNzQ29udGV4dFByaXZhdGUp
IHsgbV9ncmFwaGljc0NvbnRleHRQcml2YXRlID0gZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZTsgfQot
Ci0gICAgSUQyRDFMYXllciogY2xpcExheWVyKCkgY29uc3Q7Ci0gICAgSUQyRDFTdHJva2VTdHls
ZSogc3Ryb2tlU3R5bGUoKTsKLSAgICBEMkQxX1NUUk9LRV9TVFlMRV9QUk9QRVJUSUVTIHN0cm9r
ZVN0eWxlUHJvcGVydGllcygpIGNvbnN0OwotICAgIElEMkQxU3Ryb2tlU3R5bGUqIHBsYXRmb3Jt
U3Ryb2tlU3R5bGUoKSBjb25zdDsKLQotICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4g
YnJ1c2hXaXRoQ29sb3IoY29uc3QgRDJEMV9DT0xPUl9GJik7Ci0KLSAgICB2b2lkIHNhdmUoKTsK
LSAgICB2b2lkIHJlc3RvcmUoKTsKLQotICAgIGJvb2wgaGFzU2F2ZWRTdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuICFtX3N0YXRlU3RhY2suaXNFbXB0eSgpOyB9Ci0KLSAgICB2b2lkIGJlZ2luRHJhdygp
OwotICAgIHZvaWQgZW5kRHJhdygpOwotCi0gICAgZW51bSBEaXJlY3QyRExheWVyVHlwZSB7IEF4
aXNBbGlnbmVkQ2xpcCwgTGF5ZXJDbGlwIH07Ci0gICAgdm9pZCBwdXNoUmVuZGVyQ2xpcChEaXJl
Y3QyRExheWVyVHlwZSk7Ci0gICAgdm9pZCBzZXRBY3RpdmVMYXllcihDT01QdHI8SUQyRDFMYXll
cj4mJik7Ci0KLSAgICB2b2lkIHJlY29tcHV0ZVN0cm9rZVN0eWxlKCk7Ci0gICAgZmxvYXQgc3Ry
b2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VUaGlja25lc3M7IH0KLQotICAg
IHN0cnVjdCBUcmFuc3BhcmVuY3lMYXllclN0YXRlIHsKLSAgICAgICAgQ09NUHRyPElEMkQxQml0
bWFwUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7Ci0gICAgICAgIENvbG9yIHNoYWRvd0NvbG9y
OwotICAgICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgICAgICBmbG9hdCBvcGFjaXR5
IHsgMS4wIH07Ci0gICAgICAgIGZsb2F0IHNoYWRvd0JsdXIgeyAwIH07Ci0gICAgICAgIGJvb2wg
aGFzU2hhZG93IHsgZmFsc2UgfTsKLSAgICB9OwotICAgIFZlY3RvcjxUcmFuc3BhcmVuY3lMYXll
clN0YXRlPiBtX3RyYW5zcGFyZW5jeUxheWVyU3RhY2s7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAo
RDJEMV9DQVBfU1RZTEUpOwotICAgIHZvaWQgc2V0TGluZUpvaW4oRDJEMV9MSU5FX0pPSU4pOwot
ICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpOwotICAgIHZvaWQgc2V0TWl0ZXJM
aW1pdChmbG9hdCk7Ci0gICAgdm9pZCBzZXREYXNoT2Zmc2V0KGZsb2F0KTsKLSAgICB2b2lkIHNl
dFBhdHRlcm5XaWR0aChmbG9hdCk7Ci0gICAgdm9pZCBzZXRQYXR0ZXJuT2Zmc2V0KGZsb2F0KTsK
LSAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7Ci0gICAgdm9pZCBzZXREYXNoZXMo
Y29uc3QgRGFzaEFycmF5Jik7Ci0KLSAgICB2b2lkIHNldEJsZW5kQW5kQ29tcG9zaXRlTW9kZShE
MkQxX0JMRU5EX01PREUsIEQyRDFfQ09NUE9TSVRFX01PREUpOwotCi0gICAgdm9pZCBzZXRUYWdz
KEQyRDFfVEFHIHRhZzEsIEQyRDFfVEFHIHRhZzIpOwotICAgIHZvaWQgbm90aWZ5UHJlRHJhd09i
c2VydmVyKCk7Ci0gICAgdm9pZCBub3RpZnlQb3N0RHJhd09ic2VydmVyKCk7Ci0KLSAgICB2b2lk
IHB1c2hDbGlwKERpcmVjdDJETGF5ZXJUeXBlKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNsZWFy
Q2xpcHMoVmVjdG9yPERpcmVjdDJETGF5ZXJUeXBlPiYpOwotICAgIHZvaWQgY29tcG9zaXRlSWZO
ZWVkZWQoKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogbV9ncmFwaGlj
c0NvbnRleHRQcml2YXRlIHsgbnVsbHB0ciB9OwotCi0gICAgQ09NUHRyPElEMkQxUmVuZGVyVGFy
Z2V0PiBtX3JlbmRlclRhcmdldDsKLSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBtX2Rl
dmljZUNvbnRleHQ7Ci0gICAgQ09NUHRyPElEMkQxU3Ryb2tlU3R5bGU+IG1fZDJkU3Ryb2tlU3R5
bGU7Ci0KLSAgICBIYXNoTWFwPHVpbnQzMl90LCBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+
PiBtX3NvbGlkQ29sb3JlZEJydXNoQ2FjaGU7Ci0gICAgQ09NUHRyPElEMkQxU29saWRDb2xvckJy
dXNoPiBtX3doaXRlQnJ1c2g7Ci0gICAgQ09NUHRyPElEMkQxU29saWRDb2xvckJydXNoPiBtX3pl
cm9CcnVzaDsKLSAgICBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IG1fc29saWRTdHJva2VC
cnVzaDsKLSAgICBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IG1fc29saWRGaWxsQnJ1c2g7
Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwQnJ1c2g+IG1fcGF0dGVyblN0cm9rZUJydXNoOwotICAg
IENPTVB0cjxJRDJEMUJpdG1hcEJydXNoPiBtX3BhdHRlcm5GaWxsQnJ1c2g7Ci0KLSAgICBDT01Q
dHI8SUQzRDExRGV2aWNlMT4gbV9kM2REZXZpY2U7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+
IG1fY29tcG9zaXRlU291cmNlOwotCi0gICAgRnVuY3Rpb248dm9pZCgpPiBtX3ByZURyYXdIYW5k
bGVyOwotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9wb3N0RHJhd0hhbmRsZXI7Ci0KLSAgICBjbGFz
cyBTdGF0ZTsKLSAgICBTdGF0ZSogbV9zdGF0ZSB7IG51bGxwdHIgfTsKLSAgICBWZWN0b3I8U3Rh
dGU+IG1fc3RhdGVTdGFjazsKLQotICAgIEQyRDFfQ0FQX1NUWUxFIG1fbGluZUNhcCB7IEQyRDFf
Q0FQX1NUWUxFX0ZMQVQgfTsKLSAgICBEMkQxX0xJTkVfSk9JTiBtX2xpbmVKb2luIHsgRDJEMV9M
SU5FX0pPSU5fTUlURVIgfTsKLSAgICBTdHJva2VTdHlsZSBtX3N0cm9rZVN0eWxlIHsgU29saWRT
dHJva2UgfTsKLSAgICBEYXNoQXJyYXkgbV9kYXNoZXM7Ci0KLSAgICB1bnNpZ25lZCBiZWdpbkRy
YXdDb3VudCB7IDAgfTsKLQotICAgIGZsb2F0IG1fbWl0ZXJMaW1pdCB7IDEwLjBmIH07Ci0gICAg
ZmxvYXQgbV9kYXNoT2Zmc2V0IHsgMCB9OwotICAgIGZsb2F0IG1fcGF0dGVybldpZHRoIHsgMS4w
ZiB9OwotICAgIGZsb2F0IG1fcGF0dGVybk9mZnNldCB7IDAgfTsKLSAgICBmbG9hdCBtX3N0cm9r
ZVRoaWNrbmVzcyB7IDAgfTsKLSAgICBmbG9hdCBtX2FscGhhIHsgMS4wIH07Ci0KLSAgICBib29s
IG1fc3Ryb2tlU3lsZUlzRGlydHkgeyBmYWxzZSB9OwotCi0gICAgRDJEMV9CTEVORF9NT0RFIG1f
YmxlbmRNb2RlIHsgRDJEMV9CTEVORF9NT0RFX01VTFRJUExZIH07Ci0gICAgRDJEMV9DT01QT1NJ
VEVfTU9ERSBtX2NvbXBvc2l0ZU1vZGUgeyBEMkQxX0NPTVBPU0lURV9NT0RFX1NPVVJDRV9PVkVS
IH07Ci0KLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGZyaWVuZCBjbGFz
cyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7Ci19OwotCi1jbGFzcyBQbGF0Zm9ybUNv
bnRleHRTdGF0ZVNhdmVyIHsKLXB1YmxpYzoKLSAgICBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVy
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBjb250ZXh0LCBib29sIHNhdmVBbmRSZXN0b3JlID0g
dHJ1ZSkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX3NhdmVBbmRS
ZXN0b3JlKHNhdmVBbmRSZXN0b3JlKQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3Rv
cmUpCi0gICAgICAgICAgICBtX2NvbnRleHQuc2F2ZSgpOwotICAgIH0KLQotICAgIH5QbGF0Zm9y
bUNvbnRleHRTdGF0ZVNhdmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3Jl
KQotICAgICAgICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNh
dmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAg
bV9jb250ZXh0LnNhdmUoKTsKLSAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7Ci0gICAg
fQotCi0gICAgdm9pZCByZXN0b3JlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3NhdmVBbmRS
ZXN0b3JlKTsKLSAgICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKLSAgICAgICAgbV9zYXZlQW5k
UmVzdG9yZSA9IGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgZGlkU2F2ZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV9zYXZlQW5kUmVzdG9yZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIG1fY29udGV4dDsKLSAgICBib29sIG1fc2F2ZUFu
ZFJlc3RvcmUgeyBmYWxzZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1NpbXBsZUZvbnREYXRhRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVjdDJELmNwcAko
cmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1NpbXBsZUZvbnREYXRhRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsMjE4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0K
LSNpbmNsdWRlICJEaXJlY3RXcml0ZVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgot
I2luY2x1ZGUgIkdseXBoUGFnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8
Y29tdXRpbC5oPgotI2luY2x1ZGUgPGR3cml0ZV8zLmg+Ci0jaW5jbHVkZSA8bWxhbmcuaD4KLSNp
bmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91bm9ybS5oPgotI2lu
Y2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFZlY3RvcjxXQ0hBUj4gZ2V0RmFjZU5hbWUoSURX
cml0ZUZvbnQqIGZvbnQpCi17Ci0gICAgaWYgKCFmb250KQotICAgICAgICByZXR1cm4gVmVjdG9y
PFdDSEFSPigpOwotCi0gICAgQ09NUHRyPElEV3JpdGVMb2NhbGl6ZWRTdHJpbmdzPiBsb2NhbGl6
ZWRGYWNlTmFtZXM7Ci0gICAgSFJFU1VMVCBociA9IGZvbnQtPkdldEZhY2VOYW1lcygmbG9jYWxp
emVkRmFjZU5hbWVzKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAg
IFVJTlQzMiBsb2NhbGVJbmRleCA9IDA7Ci0gICAgQk9PTCBleGlzdHMgPSBmYWxzZTsKLQotICAg
IHdjaGFyX3QgbG9jYWxlTmFtZVtMT0NBTEVfTkFNRV9NQVhfTEVOR1RIXTsKLSAgICBpbnQgbG9j
YWxlTGVuZ3RoID0gR2V0VXNlckRlZmF1bHRMb2NhbGVOYW1lKGxvY2FsZU5hbWUsIExPQ0FMRV9O
QU1FX01BWF9MRU5HVEgpOwotICAgIGlmIChsb2NhbGVMZW5ndGgpCi0gICAgICAgIGhyID0gbG9j
YWxpemVkRmFjZU5hbWVzLT5GaW5kTG9jYWxlTmFtZShsb2NhbGVOYW1lLCAmbG9jYWxlSW5kZXgs
ICZleGlzdHMpOwotCi0gICAgaWYgKCFleGlzdHMgfHwgIVNVQ0NFRURFRChocikpCi0gICAgICAg
IGhyID0gbG9jYWxpemVkRmFjZU5hbWVzLT5GaW5kTG9jYWxlTmFtZShMImVuLXVzIiwgJmxvY2Fs
ZUluZGV4LCAmZXhpc3RzKTsKLQotICAgIGlmICghZXhpc3RzIHx8ICFTVUNDRUVERUQoaHIpKQot
ICAgICAgICBsb2NhbGVJbmRleCA9IDA7Ci0KLSAgICBVSU5UMzIgZmFjZU5hbWVMZW5ndGggPSAw
OwotICAgIGhyID0gbG9jYWxpemVkRmFjZU5hbWVzLT5HZXRTdHJpbmdMZW5ndGgobG9jYWxlSW5k
ZXgsICZmYWNlTmFtZUxlbmd0aCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICBy
ZXR1cm4gVmVjdG9yPFdDSEFSPigpOwotCi0gICAgVmVjdG9yPFdDSEFSPiBmYWNlTmFtZShmYWNl
TmFtZUxlbmd0aCArIDEpOwotICAgIGhyID0gbG9jYWxpemVkRmFjZU5hbWVzLT5HZXRTdHJpbmco
bG9jYWxlSW5kZXgsIGZhY2VOYW1lLmRhdGEoKSwgZmFjZU5hbWUuc2l6ZSgpKTsKLQotICAgIHJl
dHVybiBmYWNlTmFtZTsKLX0KLQotdm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQotewotICAgIG1f
c3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEu
MGYgOiAwLmY7Ci0gICAgbV9zY3JpcHRDYWNoZSA9IDA7Ci0gICAgbV9zY3JpcHRGb250UHJvcGVy
dGllcyA9IDA7Ci0KLSAgICBpZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpCi0gICAgICAgIHJl
dHVybiBpbml0R0RJRm9udCgpOwotCi0gICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURh
dGEuc2l6ZSgpOwotCi0gICAgYXV0byBmb250ID0gbV9wbGF0Zm9ybURhdGEuZHdGb250KCk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoZm9udCk7Ci0KLSAgICBhdXRvIGZvbnRGYWNlID0gbV9wbGF0Zm9y
bURhdGEuZHdGb250RmFjZSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGZvbnRGYWNlKTsKLQotICAg
IERXUklURV9GT05UX01FVFJJQ1MgZm9udE1ldHJpY3M7Ci0gICAgZm9udC0+R2V0TWV0cmljcygm
Zm9udE1ldHJpY3MpOwotCi0gICAgaW50IGlBc2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQ7Ci0g
ICAgaW50IGlEZXNjZW50ID0gZm9udE1ldHJpY3MuZGVzY2VudDsKLSAgICBpbnQgaUxpbmVHYXAg
PSBmb250TWV0cmljcy5saW5lR2FwOwotICAgIGludCBpQ2FwSGVpZ2h0ID0gZm9udE1ldHJpY3Mu
Y2FwSGVpZ2h0OwotCi0gICAgdW5zaWduZWQgdW5pdHNQZXJFbSA9IGZvbnRNZXRyaWNzLmRlc2ln
blVuaXRzUGVyRW07Ci0gICAgZmxvYXQgZkFzY2VudCA9IHNjYWxlRW1Ub1VuaXRzKGlBc2NlbnQs
IHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgIGZsb2F0IGZEZXNjZW50ID0gc2NhbGVFbVRv
VW5pdHMoaURlc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgIGZsb2F0IGZDYXBI
ZWlnaHQgPSBzY2FsZUVtVG9Vbml0cyhpQ2FwSGVpZ2h0LCB1bml0c1BlckVtKSAqIHBvaW50U2l6
ZTsKLSAgICBmbG9hdCBmTGluZUdhcCA9IHNjYWxlRW1Ub1VuaXRzKGlMaW5lR2FwLCB1bml0c1Bl
ckVtKSAqIHBvaW50U2l6ZTsKLQotICAgIGlmIChvcmlnaW4oKSA9PSBPcmlnaW46OkxvY2FsKSB7
Ci0gICAgICAgIFZlY3RvcjxXQ0hBUj4gZmFjZU5hbWUgPSBnZXRGYWNlTmFtZShmb250KTsKLSAg
ICAgICAgZkFzY2VudCA9IGFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhmYWNlTmFtZS5k
YXRhKCksIGZBc2NlbnQsIGZEZXNjZW50KTsKLSAgICB9Ci0KLSAgICBtX2ZvbnRNZXRyaWNzLnNl
dEFzY2VudChmQXNjZW50KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZkRlc2NlbnQp
OwotICAgIG1fZm9udE1ldHJpY3Muc2V0Q2FwSGVpZ2h0KGZDYXBIZWlnaHQpOwotICAgIG1fZm9u
dE1ldHJpY3Muc2V0TGluZUdhcChmTGluZUdhcCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5l
U3BhY2luZyhscm91bmRmKGZBc2NlbnQpICsgbHJvdW5kZihmRGVzY2VudCkgKyBscm91bmRmKGZM
aW5lR2FwKSk7Ci0KLSAgICBHbHlwaCB4R2x5cGggPSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoJ3gn
KS5nbHlwaDsKLQotICAgIGlmICh4R2x5cGgpIHsKLSAgICAgICAgLy8gTWVhc3VyZSB0aGUgYWN0
dWFsIGNoYXJhY3RlciAieCIsIHNpbmNlIGl0J3MgcG9zc2libGUgZm9yIGl0IHRvIGV4dGVuZCBi
ZWxvdyB0aGUgYmFzZWxpbmUsIGFuZCB3ZSBuZWVkIHRoZQotICAgICAgICAvLyByZXBvcnRlZCB4
LWhlaWdodCB0byBvbmx5IGluY2x1ZGUgdGhlIHBvcnRpb24gb2YgdGhlIGdseXBoIHRoYXQgaXMg
YWJvdmUgdGhlIGJhc2VsaW5lLgotICAgICAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX01FVFJJQ1M+
IGdseXBoTWV0cmljcygxKTsKLSAgICAgICAgSFJFU1VMVCBociA9IGZvbnRGYWNlLT5HZXREZXNp
Z25HbHlwaE1ldHJpY3MoJnhHbHlwaCwgMSwgZ2x5cGhNZXRyaWNzLmRhdGEoKSwgbV9wbGF0Zm9y
bURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKTsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIG1fZm9udE1ldHJpY3Mu
c2V0WEhlaWdodChzY2FsZUVtVG9Vbml0cyhnbHlwaE1ldHJpY3MuZmlyc3QoKS52ZXJ0aWNhbE9y
aWdpblksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplKTsKLSAgICB9IGVsc2UgewotICAgICAgICBp
bnQgaVhIZWlnaHQgPSBmb250TWV0cmljcy54SGVpZ2h0OwotICAgICAgICBtX2ZvbnRNZXRyaWNz
LnNldFhIZWlnaHQoc2NhbGVFbVRvVW5pdHMoaVhIZWlnaHQsIHVuaXRzUGVyRW0pICogcG9pbnRT
aXplKTsKLSAgICB9Ci0KLSAgICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJF
bSk7Ci19Ci0KLUZsb2F0UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGds
eXBoKSBjb25zdAotewotICAgIGlmICghcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBpZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpCi0g
ICAgICAgIHJldHVybiBib3VuZHNGb3JHRElHbHlwaChnbHlwaCk7Ci0KLSAgICBhdXRvIGZvbnQg
PSBtX3BsYXRmb3JtRGF0YS5kd0ZvbnQoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChmb250KTsKLQot
ICAgIGF1dG8gZm9udEZhY2UgPSBtX3BsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoZm9udEZhY2UpOwotCi0gICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9y
bURhdGEuc2l6ZSgpOwotICAgIGJvb2wgdmVydGljYWwgPSBtX3BsYXRmb3JtRGF0YS5vcmllbnRh
dGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWw7Ci0KLSAgICBWZWN0b3I8RFdSSVRF
X0dMWVBIX01FVFJJQ1M+IGdseXBoTWV0cmljcygxKTsKLSAgICBIUkVTVUxUIGhyID0gZm9udEZh
Y2UtPkdldERlc2lnbkdseXBoTWV0cmljcygmZ2x5cGgsIDEsIGdseXBoTWV0cmljcy5kYXRhKCks
IG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNh
bCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBjb25zdCBhdXRv
JiBtZXRyaWNzID0gZ2x5cGhNZXRyaWNzLmZpcnN0KCk7Ci0KLSAgICB1bnNpZ25lZCB1bml0c1Bl
ckVtID0gbV9mb250TWV0cmljcy51bml0c1BlckVtKCk7Ci0KLSAgICBGbG9hdFBvaW50IG9yaWdp
bihzY2FsZUVtVG9Vbml0cyhtZXRyaWNzLmxlZnRTaWRlQmVhcmluZywgdW5pdHNQZXJFbSkgKiBw
b2ludFNpemUsIHNjYWxlRW1Ub1VuaXRzKG1ldHJpY3MudmVydGljYWxPcmlnaW5ZLCB1bml0c1Bl
ckVtKSAqIHBvaW50U2l6ZSk7Ci0gICAgRmxvYXRTaXplIHNpemUoc2NhbGVFbVRvVW5pdHMobWV0
cmljcy5hZHZhbmNlV2lkdGggLSBtZXRyaWNzLmxlZnRTaWRlQmVhcmluZyAtIG1ldHJpY3Mucmln
aHRTaWRlQmVhcmluZywgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUsCi0gICAgICAgIHNjYWxlRW1U
b1VuaXRzKG1ldHJpY3MuYWR2YW5jZUhlaWdodCAtIG1ldHJpY3MudG9wU2lkZUJlYXJpbmcgLSBt
ZXRyaWNzLmJvdHRvbVNpZGVCZWFyaW5nLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7Ci0KLSAg
ICBGbG9hdFJlY3QgYm91bmRpbmdCb3gob3JpZ2luLCBzaXplKTsKLSAgICBpZiAobV9zeW50aGV0
aWNCb2xkT2Zmc2V0KQotICAgICAgICBib3VuZGluZ0JveC5zZXRXaWR0aChib3VuZGluZ0JveC53
aWR0aCgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsKLQotICAgIHJldHVybiBib3VuZGluZ0Jv
eDsKLX0KLQotZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBj
b25zdAotewotICAgIGlmICghcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKLSAgICAgICAgcmV0dXJuIHdp
ZHRoRm9yR0RJR2x5cGgoZ2x5cGgpOwotCi0gICAgYXV0byBmb250ID0gbV9wbGF0Zm9ybURhdGEu
ZHdGb250KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZm9udCk7Ci0KLSAgICBhdXRvIGZvbnRGYWNl
ID0gbV9wbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGZvbnRG
YWNlKTsKLQotICAgIGJvb2wgaXNWZXJ0aWNhbCA9IG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9u
KCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbDsKLQotICAgIFZlY3RvcjxEV1JJVEVfR0xZ
UEhfTUVUUklDUz4gZ2x5cGhNZXRyaWNzKDEpOwotICAgIEhSRVNVTFQgaHIgPSBmb250RmFjZS0+
R2V0RGVzaWduR2x5cGhNZXRyaWNzKCZnbHlwaCwgMSwgZ2x5cGhNZXRyaWNzLmRhdGEoKSwgaXNW
ZXJ0aWNhbCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBjb25z
dCBhdXRvJiBtZXRyaWNzID0gZ2x5cGhNZXRyaWNzLmZpcnN0KCk7Ci0gICAgaW50IHdpZHRoSW5F
bSA9IG1ldHJpY3MuYWR2YW5jZVdpZHRoOwotCi0gICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0
Zm9ybURhdGEuc2l6ZSgpOwotICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0gPSBtX2ZvbnRNZXRyaWNz
LnVuaXRzUGVyRW0oKTsKLSAgICBmbG9hdCB3aWR0aCA9IHNjYWxlRW1Ub1VuaXRzKHdpZHRoSW5F
bSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0KLSAgICByZXR1cm4gd2lkdGggKyBtX3N5bnRo
ZXRpY0JvbGRPZmZzZXQ7Ci19Ci0KLVBhdGggRm9udDo6cGxhdGZvcm1QYXRoRm9yR2x5cGgoR2x5
cGgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUGF0aCgpOwot
fQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1RleHRBbmFseXplckhlbHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhlbHBlci5jcHAJKHJldmlzaW9uIDI4
NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6
ZXJIZWxwZXIuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTQzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJUZXh0QW5hbHl6ZXJIZWxwZXIuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1UZXh0QW5hbHl6ZXJIZWxwZXI6OlRleHRBbmFseXplckhl
bHBlcihjb25zdCBXQ0hBUiogbG9jYWxlTmFtZSwgY29uc3QgV0NIQVIqIGJ1ZmZlciwgdW5zaWdu
ZWQgYnVmZmVyTGVuZ3RoKQotICAgIDogbV9sb2NhbGVOYW1lKGxvY2FsZU5hbWUpCi0gICAgLCBt
X2J1ZmZlcihidWZmZXIpCi0gICAgLCBtX2J1ZmZlckxlbmd0aChidWZmZXJMZW5ndGgpCi17Ci19
Ci0KLUhSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpRdWVyeUludGVyZmFjZShfSW5fIFJFRklJ
RCByaWlkLCBfQ09NX091dHB0cl8gdm9pZCoqIHBwdk9iamVjdCkKLXsKLSAgICBpZiAoIXBwdk9i
amVjdCkKLSAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLSAgICAqcHB2T2JqZWN0ID0gbnVsbHB0
cjsKLSAgICBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlkb2YoSURXcml0ZVRleHRBbmFseXNp
c1NpbmspKSkKLSAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElEV3JpdGVUZXh0QW5h
bHlzaXNTaW5rKj4odGhpcyk7Ci0gICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlk
b2YoSURXcml0ZVRleHRBbmFseXNpc1NvdXJjZSkpKQotICAgICAgICAqcHB2T2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SURXcml0ZVRleHRBbmFseXNpc1NpbmsqPih0aGlzKTsKLSAgICBlbHNlCi0gICAg
ICAgIHJldHVybiBFX0ZBSUw7Ci0KLSAgICBBZGRSZWYoKTsKLSAgICByZXR1cm4gU19PSzsKLX0K
LQotVUxPTkcgVGV4dEFuYWx5emVySGVscGVyOjpBZGRSZWYoKQotewotICAgIHJldHVybiArK21f
cmVmQ291bnQ7Ci19Ci0KLVVMT05HIFRleHRBbmFseXplckhlbHBlcjo6UmVsZWFzZSgpCi17Ci0g
ICAgVUxPTkcgbmV3UmVmID0gLS1tX3JlZkNvdW50OwotICAgIGlmICghbmV3UmVmKQotICAgICAg
ICBkZWxldGUodGhpcyk7Ci0KLSAgICByZXR1cm4gbmV3UmVmOwotfQotCi1IUkVTVUxUIFRleHRB
bmFseXplckhlbHBlcjo6R2V0VGV4dEF0UG9zaXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgY29u
c3QgV0NIQVIqKiB0ZXh0U3RyaW5nLCBVSU5UMzIqIHRleHRMZW5ndGgpCi17Ci0gICAgaWYgKCF0
ZXh0U3RyaW5nIHx8ICF0ZXh0TGVuZ3RoKQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotCi0g
ICAgaWYgKHRleHRQb3NpdGlvbiA+PSBtX2J1ZmZlckxlbmd0aCkgewotICAgICAgICAqdGV4dFN0
cmluZyA9IG51bGxwdHI7Ci0gICAgICAgICp0ZXh0TGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJu
IFNfT0s7Ci0gICAgfQotCi0gICAgKnRleHRTdHJpbmcgPSAmbV9idWZmZXJbdGV4dFBvc2l0aW9u
XTsKLSAgICAqdGV4dExlbmd0aCA9IG1fYnVmZmVyTGVuZ3RoIC0gdGV4dFBvc2l0aW9uOwotCi0g
ICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpHZXRUZXh0
QmVmb3JlUG9zaXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgY29uc3QgV0NIQVIqKiB0ZXh0U3Ry
aW5nLCBVSU5UMzIqIHRleHRMZW5ndGgpCi17Ci0gICAgaWYgKCF0ZXh0U3RyaW5nIHx8ICF0ZXh0
TGVuZ3RoKQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotCi0gICAgaWYgKCF0ZXh0UG9zaXRp
b24gfHwgdGV4dFBvc2l0aW9uID4gbV9idWZmZXJMZW5ndGgpIHsKLSAgICAgICAgKnRleHRTdHJp
bmcgPSBudWxscHRyOwotICAgICAgICAqdGV4dExlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybiBT
X09LOwotICAgIH0KLQotICAgICp0ZXh0U3RyaW5nID0gJm1fYnVmZmVyWzBdOwotICAgICp0ZXh0
TGVuZ3RoID0gdGV4dFBvc2l0aW9uOwotCi0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQg
VGV4dEFuYWx5emVySGVscGVyOjpHZXRMb2NhbGVOYW1lKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJ
TlQzMiogdGV4dExlbmd0aCwgY29uc3QgV0NIQVIqKiBsb2NhbGVOYW1lKQotewotICAgICpsb2Nh
bGVOYW1lID0gbV9sb2NhbGVOYW1lOwotICAgICp0ZXh0TGVuZ3RoID0gbV9idWZmZXJMZW5ndGgg
LSB0ZXh0UG9zaXRpb247Ci0KLSAgICByZXR1cm4gU19PSzsKLX0KLQotSFJFU1VMVCBUZXh0QW5h
bHl6ZXJIZWxwZXI6OkdldE51bWJlclN1YnN0aXR1dGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBV
SU5UMzIqIHRleHRMZW5ndGgsIElEV3JpdGVOdW1iZXJTdWJzdGl0dXRpb24qKiBudW1iZXJTdWJz
dGl0dXRpb24pCi17Ci0gICAgKnRleHRMZW5ndGggPSBtX2J1ZmZlckxlbmd0aCAtIHRleHRQb3Np
dGlvbjsKLSAgICByZXR1cm4gU19PSzsKLX0KLQotSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6
OlNldExpbmVCcmVha3BvaW50cyhVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0
aCwgY29uc3QgRFdSSVRFX0xJTkVfQlJFQUtQT0lOVCopCi17Ci0gICAgcmV0dXJuIEVfTk9USU1Q
TDsKLX0KLQotSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6OlNldFNjcmlwdEFuYWx5c2lzKFVJ
TlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBjb25zdCBEV1JJVEVfU0NSSVBU
X0FOQUxZU0lTKiBhbmFseXNpcykKLXsKLSAgICBBbmFseXplZFJ1biBjdXJyZW50ID0geyB0ZXh0
UG9zaXRpb24sIHRleHRMZW5ndGgsICphbmFseXNpcyB9OwotICAgIG1fYW5hbHl6ZWRSdW5zLmFw
cGVuZChXVEZNb3ZlKGN1cnJlbnQpKTsKLQotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxU
IFRleHRBbmFseXplckhlbHBlcjo6U2V0QmlkaUxldmVsKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJ
TlQzMiB0ZXh0TGVuZ3RoLCBVSU5UOCBleHBsaWNpdExldmVsLCBVSU5UOCByZXNvbHZlZExldmVs
KQotewotICAgIHJldHVybiBFX05PVElNUEw7Ci19Ci0KLUhSRVNVTFQgVGV4dEFuYWx5emVySGVs
cGVyOjpTZXROdW1iZXJTdWJzdGl0dXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRl
eHRMZW5ndGgsIElEV3JpdGVOdW1iZXJTdWJzdGl0dXRpb24qKQotewotICAgIHJldHVybiBFX05P
VElNUEw7Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhlbHBlci5oCShyZXZpc2lv
biAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFu
YWx5emVySGVscGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgPGR3cml0ZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdHJ1Y3QgQW5hbHl6ZWRSdW4gewotICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRp
b24geyAwIH07Ci0gICAgdW5zaWduZWQgbGVuZ3RoIHsgMCB9OwotICAgIERXUklURV9TQ1JJUFRf
QU5BTFlTSVMgYW5hbHlzaXM7Ci19OwotCi1zdHJ1Y3QgVGV4dEFuYWx5emVySGVscGVyIDogcHVi
bGljIElEV3JpdGVUZXh0QW5hbHlzaXNTaW5rLCBJRFdyaXRlVGV4dEFuYWx5c2lzU291cmNlIHsK
LSAgICBUZXh0QW5hbHl6ZXJIZWxwZXIoY29uc3QgV0NIQVIqIGxvY2FsZU5hbWUsIGNvbnN0IFdD
SEFSKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCk7Ci0KLSAgICAvLyBJVW5rbm93bgot
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShfSW5f
IFJFRklJRCwgX0NPTV9PdXRwdHJfIHZvaWQqKik7Ci0gICAgdmlydHVhbCBVTE9ORyBTVERNRVRI
T0RDQUxMVFlQRSBBZGRSZWYoKTsKLSAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBF
IFJlbGVhc2UoKTsKLQotICAgIC8vIElEV3JpdGVUZXh0QW5hbHlzaXNTb3VyY2UgCi0gICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldFRleHRBdFBvc2l0aW9uKFVJTlQzMiB0
ZXh0UG9zaXRpb24sIGNvbnN0IFdDSEFSKiogdGV4dFN0cmluZywgVUlOVDMyKiB0ZXh0TGVuZ3Ro
KTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0VGV4dEJlZm9yZVBv
c2l0aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIGNvbnN0IFdDSEFSKiogdGV4dFN0cmluZywgVUlO
VDMyKiB0ZXh0TGVuZ3RoKTsKLSAgICB2aXJ0dWFsIERXUklURV9SRUFESU5HX0RJUkVDVElPTiBT
VERNRVRIT0RDQUxMVFlQRSBHZXRQYXJhZ3JhcGhSZWFkaW5nRGlyZWN0aW9uKCkgeyByZXR1cm4g
RFdSSVRFX1JFQURJTkdfRElSRUNUSU9OX0xFRlRfVE9fUklHSFQ7IH0KLSAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0TG9jYWxlTmFtZShVSU5UMzIgdGV4dFBvc2l0aW9u
LCBVSU5UMzIqIHRleHRMZW5ndGgsIGNvbnN0IFdDSEFSKiogbG9jYWxlTmFtZSk7Ci0gICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldE51bWJlclN1YnN0aXR1dGlvbihVSU5U
MzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIqIHRleHRMZW5ndGgsIElEV3JpdGVOdW1iZXJTdWJzdGl0
dXRpb24qKik7Ci0KLSAgICAvLyBJRFdyaXRlVGV4dEFuYWx5c2lzU2luawotICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXRMaW5lQnJlYWtwb2ludHMoVUlOVDMyIHRleHRQ
b3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIGNvbnN0IERXUklURV9MSU5FX0JSRUFLUE9JTlQq
KTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0U2NyaXB0QW5hbHlz
aXMoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIGNvbnN0IERXUklURV9T
Q1JJUFRfQU5BTFlTSVMqKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
U2V0QmlkaUxldmVsKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBVSU5U
OCBleHBsaWNpdExldmVsLCBVSU5UOCByZXNvbHZlZExldmVsKTsKLSAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0TnVtYmVyU3Vic3RpdHV0aW9uKFVJTlQzMiB0ZXh0UG9z
aXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBJRFdyaXRlTnVtYmVyU3Vic3RpdHV0aW9uKik7Ci0K
LSAgICBjb25zdCBXQ0hBUiogbV9sb2NhbGVOYW1lIHsgbnVsbHB0ciB9OwotICAgIGNvbnN0IFdD
SEFSKiBtX2J1ZmZlciB7IG51bGxwdHIgfTsKLSAgICB1bnNpZ25lZCBtX2J1ZmZlckxlbmd0aCB7
IDAgfTsKLSAgICBWZWN0b3I8QW5hbHl6ZWRSdW4+IG1fYW5hbHl6ZWRSdW5zOwotICAgIFVMT05H
IG1fcmVmQ291bnQgeyAwIH07Ci19OwotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9u
TWF0cml4RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAJKG5v
bmV4aXN0ZW50KQpAQCAtMSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIw
MTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotCi0jaWYgUExBVEZPUk0oV0lOKQotCi0jaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0KLSNpbmNs
dWRlIDxkMmQxLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotVHJhbnNmb3JtYXRpb25NYXRy
aXg6OlRyYW5zZm9ybWF0aW9uTWF0cml4KGNvbnN0IEQyRDFfTUFUUklYXzNYMl9GJiB0KQotewot
ICAgIHNldEEodC5fMTEpOwotICAgIHNldEIodC5fMTIpOwotICAgIHNldEModC5fMjEpOwotICAg
IHNldEQodC5fMjIpOwotICAgIHNldEUodC5fMzEpOwotICAgIHNldEYodC5fMzIpOwotfQotCi1U
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3IgRDJEMV9NQVRSSVhfM1gyX0YoKSBjb25zdAot
ewotICAgIHJldHVybiBEMkQxOjpNYXRyaXgzeDJGKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoYSgp
KSwKLSAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChiKCkpLAotICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KGMoKSksCi0gICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZCgp
KSwKLSAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChlKCkpLAotICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KGYoKSkpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm06OkFmZmluZVRyYW5z
Zm9ybShjb25zdCBEMkQxX01BVFJJWF8zWDJfRiYgdCkKLXsKLSAgICBzZXRNYXRyaXgodC5fMTEs
IHQuXzEyLCB0Ll8yMSwgdC5fMjIsIHQuXzMxLCB0Ll8zMik7Ci19Ci0KLUFmZmluZVRyYW5zZm9y
bTo6b3BlcmF0b3IgRDJEMV9NQVRSSVhfM1gyX0YoKSBjb25zdAotewotICAgIHJldHVybiBEMkQx
OjpNYXRyaXgzeDJGKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoYSgpKSwKLSAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdChiKCkpLAotICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGMo
KSksCi0gICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZCgpKSwKLSAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdChlKCkpLAotICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGYo
KSkpOwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L0RyYWdJbWFnZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vRHJhZ0ltYWdlRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlRGlyZWN0MkQuY3BwCShub25leGlzdGVu
dCkKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEcmFnSW1hZ2UuaCIK
LQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKLSNpbmNsdWRl
ICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IkhXbmREQy5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotCi0jaW5jbHVkZSA8ZDJk
MS5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12
b2lkIGRlYWxsb2NDb250ZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRl
eHQpCi17Ci0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCkgewotICAgICAgICBpZiAoYXV0byogcmVu
ZGVyVGFyZ2V0ID0gcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgICAg
IHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgIH0KLX0KLQotR0RJT2JqZWN0PEhCSVRNQVA+
IGFsbG9jSW1hZ2UoSERDIGRjLCBJbnRTaXplIHNpemUsIFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
KiogcGxhdGZvcm1Db250ZXh0KQotewotICAgIEJpdG1hcEluZm8gYm1wSW5mbyA9IEJpdG1hcElu
Zm86OmNyZWF0ZShzaXplKTsKLQotICAgIExQVk9JRCBiaXRzID0gbnVsbHB0cjsKLSAgICBhdXRv
IGhibXAgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24oZGMsICZibXBJbmZvLCBE
SUJfUkdCX0NPTE9SUywgJmJpdHMsIDAsIDApKTsKLQotICAgIGlmICghcGxhdGZvcm1Db250ZXh0
IHx8ICFoYm1wKQotICAgICAgICByZXR1cm4gaGJtcDsKLQotICAgIC8vIEZJWE1FOiBVc2UgR0RJ
IEludGVyb3AgbGF5ZXIgdG8gY3JlYXRlIEhCSVRNQVAgZnJvbSBEMkQgQml0bWFwCi0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gaGJtcDsKLX0KLQotRHJhZ0ltYWdlUmVmIHNjYWxl
RHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZVJlZiwgRmxvYXRTaXplIHNjYWxlKQotewotICAg
IC8vIEZJWE1FOiBkdWUgdG8gdGhlIHdheSBkcmFnIGltYWdlcyBhcmUgZG9uZSBvbiB3aW5kb3dz
IHdlIG5lZWQgCi0gICAgLy8gdG8gcHJlcHJvY2VzcyB0aGUgYWxwaGEgY2hhbm5lbCA8cmRhcjov
L3Byb2JsZW0vNTAxNTk0Nj4KLSAgICBpZiAoIWltYWdlUmVmKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIEdESU9iamVjdDxIQklUTUFQPiBoYm1wOwotICAgIGF1dG8gaW1hZ2UgPSBh
ZG9wdEdESU9iamVjdChpbWFnZVJlZik7Ci0KLSAgICBJbnRTaXplIHNyY1NpemUgPSBkcmFnSW1h
Z2VTaXplKGltYWdlLmdldCgpKTsKLSAgICBJbnRTaXplIGRzdFNpemUoc3RhdGljX2Nhc3Q8aW50
PihzcmNTaXplLndpZHRoKCkgKiBzY2FsZS53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50PihzcmNT
aXplLmhlaWdodCgpICogc2NhbGUuaGVpZ2h0KCkpKTsKLQotICAgIEhXbmREQyBkYyhudWxscHRy
KTsKLSAgICBhdXRvIGRzdERDID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMo
ZGMpKTsKLSAgICBpZiAoZHN0REMpCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0KLSAgICBp
ZiAoIWhibXApCi0gICAgICAgIGhibXAuc3dhcChpbWFnZSk7Ci0gICAgcmV0dXJuIGhibXAubGVh
aygpOwotfQotCi1EcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBp
bWcsIEltYWdlT3JpZW50YXRpb24pCi17Ci0gICAgSFduZERDIGRjKG51bGxwdHIpOwotICAgIGF1
dG8gd29ya2luZ0RDID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoZGMpKTsK
LSAgICBpZiAoIXdvcmtpbmdEQykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotICAgIAotfQotCi0jZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMu
Y3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJGaWx0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDE4ICsxMjksMTMgQEAgR3Jh
cGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmlucAogICAgIHJldHVybiBtX3NvdXJj
ZUltYWdlID8gJm1fc291cmNlSW1hZ2UtPmNvbnRleHQoKSA6IG51bGxwdHI7CiB9CiAKLXZvaWQg
UmVuZGVyTGF5ZXJGaWx0ZXJzOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYgdGFyZ2V0Q29udGV4dCkKK3ZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjph
bGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCkKIHsKICAgICBhdXRvJiBmaWx0ZXIgPSAqbV9m
aWx0ZXI7CiAgICAgYXV0byBsb2dpY2FsU2l6ZSA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxl
KG1fZmlsdGVyUmVnaW9uLnNpemUoKSk7CiAKICAgICBpZiAoIW1fc291cmNlSW1hZ2UgfHwgbV9z
b3VyY2VJbWFnZS0+bG9naWNhbFNpemUoKSAhPSBsb2dpY2FsU2l6ZSkgewotI2lmIFVTRShESVJF
Q1QyRCkKLSAgICAgICAgbV9zb3VyY2VJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNh
bFNpemUsIGZpbHRlci5yZW5kZXJpbmdNb2RlKCksICZ0YXJnZXRDb250ZXh0LCAxLCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSNlbHNlCi0gICAg
ICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRDb250ZXh0KTsKICAgICAgICAgbV9zb3VyY2VJbWFnZSA9
IEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIGZpbHRlci5yZW5kZXJpbmdNb2RlKCks
IFNob3VsZFVzZURpc3BsYXlMaXN0OjpObywgUmVuZGVyaW5nUHVycG9zZTo6RE9NLCAxLCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBtX2xheWVyLnJl
bmRlcmVyKCkuaG9zdFdpbmRvdygpKTsKLSNlbmRpZgogICAgICAgICBpZiAoYXV0byBjb250ZXh0
ID0gaW5wdXRDb250ZXh0KCkpCiAgICAgICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXIuZmls
dGVyU2NhbGUoKSk7CiAgICAgfQpAQCAtMjAwLDcgKzE5NSw3IEBAIEdyYXBoaWNzQ29udGV4dCog
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWcKICAgICByZXNldERpcnR5U291cmNlUmVjdCgpOwogCiAg
ICAgZmlsdGVyLnNldEZpbHRlclJlZ2lvbihtX2ZpbHRlclJlZ2lvbik7Ci0gICAgYWxsb2NhdGVC
YWNraW5nU3RvcmVJZk5lZWRlZChkZXN0aW5hdGlvbkNvbnRleHQpOworICAgIGFsbG9jYXRlQmFj
a2luZ1N0b3JlSWZOZWVkZWQoKTsKIAogICAgIGF1dG8qIHNvdXJjZUdyYXBoaWNzQ29udGV4dCA9
IGlucHV0Q29udGV4dCgpOwogICAgIGlmICghc291cmNlR3JhcGhpY3NDb250ZXh0KQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAkocmV2aXNp
b24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBu
b3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSYsIGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyYp
IGZpbmFsOwogICAgIHZvaWQgcmVzZXREaXJ0eVNvdXJjZVJlY3QoKSB7IG1fZGlydHlTb3VyY2VS
ZWN0ID0gTGF5b3V0UmVjdCgpOyB9CiAgICAgR3JhcGhpY3NDb250ZXh0KiBpbnB1dENvbnRleHQo
KTsKLSAgICB2b2lkIGFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3ND
b250ZXh0JiB0YXJnZXRDb250ZXh0KTsKKyAgICB2b2lkIGFsbG9jYXRlQmFja2luZ1N0b3JlSWZO
ZWVkZWQoKTsKIAogICAgIFJlbmRlckxheWVyJiBtX2xheWVyOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3ICsxNTQs
NyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291CiAjZWxzZQogICAg
IGF1dG8gY29sb3JTcGFjZSA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpOwogI2VuZGlm
Ci0gICAgYXV0byBzb3VyY2VHcmFwaGljID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1h
Z2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgZWZmZWN0aXZlVHJhbnNmb3JtLCBj
b2xvclNwYWNlLCBmaWx0ZXJEYXRhLT5maWx0ZXItPnJlbmRlcmluZ01vZGUoKSwgcmVuZGVyZXIu
aG9zdFdpbmRvdygpLCBjb250ZXh0KTsKKyAgICBhdXRvIHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9u
LCBlZmZlY3RpdmVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIGZpbHRlckRhdGEtPmZpbHRlci0+cmVu
ZGVyaW5nTW9kZSgpLCByZW5kZXJlci5ob3N0V2luZG93KCkpOwogICAgIGlmICghc291cmNlR3Jh
cGhpYykgewogICAgICAgICBBU1NFUlQobV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMo
JnJlbmRlcmVyKSk7CiAgICAgICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dCA9IGNvbnRleHQ7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFz
a2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlTWFza2VyLmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg0LDcgKzg0LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlS
ZXNvdQogI2VuZGlmCiAKICAgICAgICAgLy8gRklYTUUgKDE0OTQ3MCk6IFRoaXMgaW1hZ2UgYnVm
ZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2luZyBp
dCBtYXRjaCB0aGUgY29udGV4dCBicmVha3MgYWxwaGEgbWFza2luZywgdGhvdWdoLgotICAgICAg
ICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFn
ZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIG1hc2tDb2xvclNwYWNlLCBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBudWxscHRyLCBjb250ZXh0KTsKKyAgICAgICAg
bWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VC
dWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBtYXNrQ29sb3JTcGFjZSwgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbnVsbHB0cik7CiAgICAgICAgIGlmICghbWFza2Vy
RGF0YS0+bWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5j
cHAJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNiw3ICsyMjYsNyBAQCBB
ZmZpbmVUcmFuc2Zvcm0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsCiAgICAgcmV0dXJuIGFic29s
dXRlVHJhbnNmb3JtOwogfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhv
c3RXaW5kb3cqIGhvc3RXaW5kb3csIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK1Jl
ZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIo
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29s
dXRlVHJhbnNmb3JtLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykK
IHsKICAgICBJbnRSZWN0IHBhaW50UmVjdCA9IGNhbGN1bGF0ZUltYWdlQnVmZmVyUmVjdCh0YXJn
ZXRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSk7CiAgICAgLy8gRG9uJ3QgY3JlYXRlIGVtcHR5IElt
YWdlQnVmZmVycy4KQEAgLTIzOCwxMiArMjM4LDcgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBTVkdS
ZW5kZXJpbmdDb250ZXh0OgogICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmco
Y2xhbXBlZFNpemUsIHNjYWxlKSkKICAgICAgICAgY2xhbXBlZFNpemUgPSBjbGFtcGVkU2l6ZSAq
IHNjYWxlOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0LCAxLCBj
b2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
Y29udGV4dCk7CiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xh
bXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIFNob3VsZFVzZURpc3BsYXlMaXN0OjpObywgUmVuZGVy
aW5nUHVycG9zZTo6RE9NLCAxLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgsIGhvc3RX
aW5kb3cpOwotI2VuZGlmCiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKQEAgLTI1Niw3ICsyNTEsNyBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRl
cmluZ0NvbnRleHQ6CiAgICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQogCi1SZWZQdHI8SW1hZ2VC
dWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkUmVjdCwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4g
U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0
YXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRSZWN0LCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKIHsK
ICAgICBJbnRTaXplIGNsYW1wZWRTaXplID0gcm91bmRlZEludFNpemUoY2xhbXBlZFJlY3Quc2l6
ZSgpKTsKICAgICBGbG9hdFNpemUgdW5jbGFtcGVkU2l6ZSA9IHJvdW5kZWRJbnRTaXplKHRhcmdl
dFJlY3Quc2l6ZSgpKTsKQEAgLTI2NSwxMiArMjYwLDcgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBT
VkdSZW5kZXJpbmdDb250ZXh0OgogICAgIGlmIChjbGFtcGVkU2l6ZS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIGF1dG8gaW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCByZW5kZXJpbmdNb2RlLCBj
b250ZXh0LCAxLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0oY29udGV4dCk7CiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIDEsIGNvbG9yU3BhY2UsIFBpeGVs
Rm9ybWF0OjpCR1JBOCk7Ci0jZW5kaWYKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MCw4ICs2MCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmVUb1JlbmRlclNWR0Nv
bnRlbnQoUmVuZGVyRWxlbWVudCYsIFBhaW50SW5mbyYsIE5lZWRzR3JhcGhpY3NDb250ZXh0U2F2
ZSA9IERvbnRTYXZlR3JhcGhpY3NDb250ZXh0KTsKICAgICBib29sIGlzUmVuZGVyaW5nUHJlcGFy
ZWQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ0ZsYWdzICYgUmVuZGVyaW5nUHJlcGFyZWQ7
IH0KIAotICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0
ZVRyYW5zZm9ybSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgUmVuZGVyaW5nTW9kZSwg
Y29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyLCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVs
bHB0cik7Ci0gICAgc3RhdGljIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIo
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRSZWN0
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFw
aGljc0NvbnRleHQqID0gbnVsbHB0cik7CisgICAgc3RhdGljIFJlZlB0cjxJbWFnZUJ1ZmZlcj4g
Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOworICAgIHN0
YXRpYyBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkUmVjdCwgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiwgUmVuZGVyaW5nTW9kZSk7CiAKICAgICBzdGF0aWMgdm9pZCByZW5k
ZXJTdWJ0cmVlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYsIFJlbmRlckVsZW1lbnQmLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mKTsKICAgICBzdGF0aWMgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4mLCBib29s
IHNhZmVUb0NsZWFyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTUgKzY2LDYgQEAKICNpbmNsdWRlICJM
b2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLmgiCiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1Qy
RCkKLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVj
dDJELmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxk
MmQxLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdJbWFnZTo6U1ZHSW1h
Z2UoSW1hZ2VPYnNlcnZlciYgb2JzZXJ2ZXIpCkBAIC0yMTcsMTIgKzIwOCwxMiBAQCBJbWFnZURy
YXdSZXN1bHQgU1ZHSW1hZ2U6OmRyYXdGb3JDb250YWluCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotUmVmUHRyPE5hdGl2ZUltYWdlPiBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQorUmVmUHRyPE5hdGl2ZUlt
YWdlPiBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQogewotICAgIHJldHVy
biBuYXRpdmVJbWFnZSh0YXJnZXRDb250ZXh0KTsKKyAgICByZXR1cm4gbmF0aXZlSW1hZ2UoKTsK
IH0KIAotUmVmUHRyPE5hdGl2ZUltYWdlPiBTVkdJbWFnZTo6bmF0aXZlSW1hZ2UoY29uc3QgR3Jh
cGhpY3NDb250ZXh0KikKK1JlZlB0cjxOYXRpdmVJbWFnZT4gU1ZHSW1hZ2U6Om5hdGl2ZUltYWdl
KCkKIHsKICAgICByZXR1cm4gbmF0aXZlSW1hZ2Uoc2l6ZSgpLCBGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCBzaXplKCkpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gMjg3ODExKQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg2LDggKzg2LDggQEAgcHJpdmF0ZToKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgdG8g
YmUgbGVzcyBjb25zZXJ2YXRpdmUuCiAgICAgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFx
dWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgUmVmUHRyPE5hdGl2ZUlt
YWdlPiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0g
bnVsbHB0cikgZmluYWw7Ci0gICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZShjb25z
dCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgZmluYWw7CisgICAgUmVmUHRyPE5hdGl2ZUlt
YWdlPiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIGZpbmFsOworICAgIFJlZlB0cjxOYXRp
dmVJbWFnZT4gbmF0aXZlSW1hZ2UoKSBmaW5hbDsKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5h
dGl2ZUltYWdlKGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZVJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CiAKICAgICB2b2lkIHN0YXJ0QW5pbWF0
aW9uVGltZXJGaXJlZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlRm9yQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01OSw5ICs1OSw5IEBAIHZvaWQgU1ZHSW1hZ2VGb3JDb250YWluZXI6OmRyYXdQ
YXR0ZXJuKEcKICAgICBtX2ltYWdlLT5kcmF3UGF0dGVybkZvckNvbnRhaW5lcihjb250ZXh0LCBt
X2NvbnRhaW5lclNpemUsIG1fY29udGFpbmVyWm9vbSwgbV9pbml0aWFsRnJhZ21lbnRVUkwsIHNy
Y1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBkc3RSZWN0LCBvcHRpb25z
KTsKIH0KIAotUmVmUHRyPE5hdGl2ZUltYWdlPiBTVkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0
KQorUmVmUHRyPE5hdGl2ZUltYWdlPiBTVkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKQogewotICAgIHJldHVybiBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSh0YXJnZXRDb250ZXh0KTsKKyAgICByZXR1cm4gbV9pbWFnZS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVy
LmgJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZUZvckNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1Ymxp
YzoKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgdG8gYmUgbGVzcyBjb25zZXJ2YXRpdmUu
CiAgICAgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBmYWxzZTsgfQogCi0gICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgZmluYWw7CisgICAg
UmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIGZpbmFsOwog
CiBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIFNWR0ltYWdlRm9yQ29udGFpbmVyKFNWR0lt
YWdlKiwgY29uc3QgRmxvYXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWluZXJab29t
LCBjb25zdCBVUkwmIGluaXRpYWxGcmFnbWVudFVSTCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24g
Mjg3ODExKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw0OSBAQAorMjAyMi0wMS0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIERpcmVjdDJECisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5OTkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtRlRXLmNtYWtlOiBSZW1vdmVk
LgorICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwOgorICAgICAgICAoV2ViS2l0
OjpTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb246OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Q29uZmlndXJhdGlvbjo6ZGVjb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpTaGFyZWFibGVCaXRtYXApOgorICAgICAgICAo
V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6On5TaGFyZWFibGVCaXRtYXApOgorICAgICAgICAoV2Vi
S2l0OjpTaGFyZWFibGVCaXRtYXA6Om51bUJ5dGVzRm9yU2l6ZSk6CisgICAgICAgICogU2hhcmVk
L1NoYXJlYWJsZUJpdG1hcC5oOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmNy
ZWF0ZVBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmR4
U3VyZmFjZSk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBE
aXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5j
cHA6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vQmFja2luZ1N0
b3JlRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViUGFn
ZVByb3h5V2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkZXZpY2UgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldERldmljZSk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpzaG93UG9wdXBNZW51
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OnBhaW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OnNldHVwU3dhcENoYWluKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OmNvbmZpZ3VyZUJhY2tp
bmdTdG9yZSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQ
cm94eVdpbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXc6OldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpv
blNpemVFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldHVwU3dhcENoYWluKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y29uZmlndXJlQmFja2luZ1N0b3Jl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuaDoKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6ZDNkRGV2aWNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViVmlldzo6ZDNkSW1tZWRpYXRlQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQb3B1cE1lbnU6OnNob3cpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljczo6ZGlz
cGxheSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OmdldEltYWdlRm9yRmluZE1hdGNoKToK
KwogMjAyMi0wMS0wOCAgVHlsZXIgV2lsY29jayAgPHR5bGVyX3dAYXBwbGUuY29tPgogCiAgICAg
ICAgIEFYOiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRGb2N1c2VkKHRydWUpIHNob3VsZCBtYWtl
IHRoZSB3ZWJwYWdlIGZvY3VzZWQsIGFuZCBtYWtlIHdlYiBjb250ZW50IHRoZSBmaXJzdCByZXNw
b25kZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm1GVFcuY21ha2UKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZQkocmV2aXNpb24gMjg3ODExKQorKysg
U291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDE5NSAr
MCwwIEBACi1zZXQoV2ViS2l0X09VVFBVVF9OQU1FIFdlYktpdDIpCi1zZXQoV2ViUHJvY2Vzc19P
VVRQVVRfTkFNRSBXZWJLaXRXZWJQcm9jZXNzKQotc2V0KE5ldHdvcmtQcm9jZXNzX09VVFBVVF9O
QU1FIFdlYktpdE5ldHdvcmtQcm9jZXNzKQotc2V0KFBsdWdpblByb2Nlc3NfT1VUUFVUX05BTUUg
V2ViS2l0UGx1Z2luUHJvY2VzcykKLXNldChHUFVQcm9jZXNzX09VVFBVVF9OQU1FIFdlYktpdEdQ
VVByb2Nlc3MpCi0KLWluY2x1ZGUoSGVhZGVycy5jbWFrZSkKLQotYWRkX2RlZmluaXRpb25zKC1E
QlVJTERJTkdfV0VCS0lUKQotCi1saXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwotICAgIE5ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAot
Ci0gICAgTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKLQotICAg
IE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NNYWluQ3VybC5jcHAKLQotICAgIFBs
YXRmb3JtL0lQQy93aW4vQXR0YWNobWVudFdpbi5jcHAKLSAgICBQbGF0Zm9ybS9JUEMvd2luL0Nv
bm5lY3Rpb25XaW4uY3BwCi0KLSAgICBQbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NDbGFzc2lmaWVyLmNwcAotCi0gICAgUGxhdGZvcm0vd2luL0xvZ2dpbmdXaW4uY3Bw
Ci0gICAgUGxhdGZvcm0vd2luL01vZHVsZVdpbi5jcHAKLSAgICBQbGF0Zm9ybS93aW4vU2hhcmVk
TWVtb3J5V2luLmNwcAotCi0gICAgU2hhcmVkL0FQSS9jL2N1cmwvV0tDZXJ0aWZpY2F0ZUluZm9D
dXJsLmNwcAotCi0gICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1
bGVOb25lLmNwcAotCi0gICAgU2hhcmVkL3dpbi9BdXhpbGlhcnlQcm9jZXNzTWFpbldpbi5jcHAK
LSAgICBTaGFyZWQvd2luL05hdGl2ZVdlYktleWJvYXJkRXZlbnRXaW4uY3BwCi0gICAgU2hhcmVk
L3dpbi9OYXRpdmVXZWJNb3VzZUV2ZW50V2luLmNwcAotICAgIFNoYXJlZC93aW4vTmF0aXZlV2Vi
VG91Y2hFdmVudFdpbi5jcHAKLSAgICBTaGFyZWQvd2luL05hdGl2ZVdlYldoZWVsRXZlbnRXaW4u
Y3BwCi0gICAgU2hhcmVkL3dpbi9XZWJFdmVudEZhY3RvcnkuY3BwCi0KLSAgICBVSVByb2Nlc3Mv
QmFja2luZ1N0b3JlLmNwcAotICAgIFVJUHJvY2Vzcy9EZWZhdWx0VW5kb0NvbnRyb2xsZXIuY3Bw
Ci0gICAgVUlQcm9jZXNzL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZ05vbmUuY3BwCi0gICAgVUlQ
cm9jZXNzL1dlYkdyYW1tYXJEZXRhaWwuY3BwCi0gICAgVUlQcm9jZXNzL1dlYlZpZXdwb3J0QXR0
cmlidXRlcy5jcHAKLQotICAgIFVJUHJvY2Vzcy9BUEkvQy9XS1ZpZXdwb3J0QXR0cmlidXRlcy5j
cHAKLQotICAgIFVJUHJvY2Vzcy9BUEkvQy9jdXJsL1dLUHJvdGVjdGlvblNwYWNlQ3VybC5jcHAK
LSAgICBVSVByb2Nlc3MvQVBJL0MvY3VybC9XS1dlYnNpdGVEYXRhU3RvcmVSZWZDdXJsLmNwcAot
Ci0gICAgVUlQcm9jZXNzL0FQSS9DL3dpbi9XS1ZpZXcuY3BwCi0KLSAgICBVSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5jcHAK
LQotICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclVJUHJveHlXaW4uY3Bw
Ci0KLSAgICBVSVByb2Nlc3MvTGF1bmNoZXIvd2luL1Byb2Nlc3NMYXVuY2hlcldpbi5jcHAKLQot
ICAgIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcAot
Ci0gICAgVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3dpbi9XZWJzaXRlRGF0YVN0b3JlV2luLmNwcAot
Ci0gICAgVUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1wbC5jcHAKLSAgICBVSVByb2Nlc3Mvd2lu
L1dlYkNvbnRleHRNZW51UHJveHlXaW4uY3BwCi0gICAgVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJv
eHlXaW4uY3BwCi0gICAgVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKLSAg
ICBVSVByb2Nlc3Mvd2luL1dlYlByb2Nlc3NQb29sV2luLmNwcAotICAgIFVJUHJvY2Vzcy93aW4v
V2ViVmlldy5jcHAKLQotICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvd2luL0luamVjdGVk
QnVuZGxlV2luLmNwcAotCi0gICAgV2ViUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3Rv
clVJV2luLmNwcAotCi0gICAgV2ViUHJvY2Vzcy9NZWRpYUNhY2hlL1dlYk1lZGlhS2V5U3RvcmFn
ZU1hbmFnZXIuY3BwCi0KLSAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dpbi9XZWJQb3B1
cE1lbnVXaW4uY3BwCi0KLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWRTdXJmYWNl
LmNwcAotCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9z
aXRpbmdDb29yZGluYXRvci5jcHAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCi0gICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5jcHAKLQotICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5jcHAKLQotICAgIFdlYlByb2Nlc3Mvd2lu
L1dlYlByb2Nlc3NNYWluV2luLmNwcAotICAgIFdlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NXaW4u
Y3BwCi0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgIiR7
V0VCS0lUX0RJUn0vUGxhdGZvcm0vY2xhc3NpZmllciIKLSAgICAiJHtXRUJLSVRfRElSfS9QbHVn
aW5Qcm9jZXNzL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvQVBJL2Mvd2luIgotICAg
ICIke1dFQktJVF9ESVJ9L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzIgotICAgICIke1dFQktJ
VF9ESVJ9L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvciIKLSAg
ICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvUGx1Z2lucy93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0v
U2hhcmVkL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL0MvY2Fpcm8iCi0g
ICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2N1cmwiCi0gICAgIiR7V0VCS0lUX0RJ
Un0vVUlQcm9jZXNzL0FQSS9DL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJ
L2NwcC93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS93aW4iCi0gICAgIiR7
V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MiCi0gICAgIiR7V0VCS0lU
X0RJUn0vVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQiCi0gICAgIiR7V0VCS0lUX0RJUn0vVUlQ
cm9jZXNzL0luc3BlY3Rvci93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL1BsdWdp
bnMvd2luIgotICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy93aW4iCi0gICAgIiR7V0VCS0lU
X0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvd2luIgotICAgICIke1dFQktJVF9E
SVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL3dpbi9ET00iCi0gICAgIiR7V0VCS0lU
X0RJUn0vV2ViUHJvY2Vzcy9JbnNwZWN0b3Ivd2luIgotICAgICIke1dFQktJVF9ESVJ9L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvd2luIgotICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzIgotICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nl
c3MvV2ViUGFnZS93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vd2luIgotKQotCi1saXN0KEFQUEVO
RCBXZWJLaXRfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKLSkKLQotc2V0KFdlYktpdENvbW1v
bkluY2x1ZGVEaXJlY3RvcmllcyAke1dlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTfSkKLXNldChX
ZWJLaXRDb21tb25TeXN0ZW1JbmNsdWRlRGlyZWN0b3JpZXMgJHtXZWJLaXRfU1lTVEVNX0lOQ0xV
REVfRElSRUNUT1JJRVN9KQotCi1saXN0KEFQUEVORCBXZWJQcm9jZXNzX1NPVVJDRVMKLSAgICBX
ZWJQcm9jZXNzL0VudHJ5UG9pbnQvd2luL1dlYlByb2Nlc3NNYWluLmNwcAotKQotCi1saXN0KEFQ
UEVORCBOZXR3b3JrUHJvY2Vzc19TT1VSQ0VTCi0gICAgTmV0d29ya1Byb2Nlc3MvRW50cnlQb2lu
dC93aW4vTmV0d29ya1Byb2Nlc3NNYWluLmNwcAotKQotCi1saXN0KEFQUEVORCBHUFVQcm9jZXNz
X1NPVVJDRVMKLSAgICBHUFVQcm9jZXNzL0VudHJ5UG9pbnQvd2luL0dQVVByb2Nlc3NNYWluLmNw
cAotKQotCi1hZGRfZGVmaW5pdGlvbnMoLURVU0VfRElSRUNUMkQ9MSAtRFVTRV9DVVJMPTEpCi0K
LWxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCi0gICAgTmV0d29ya1Byb2Nlc3MvQ29va2llcy9j
dXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcAotCi0gICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCi0gICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlSU9DaGFubmVsQ3VybC5jcHAKLQotICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29y
a0RhdGFUYXNrQ3VybC5jcHAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNz
Q3VybC5jcHAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtTZXNzaW9uQ3VybC5jcHAK
LSAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Q3VybC5jcHAK
LQotICAgIFNoYXJlZC9jdXJsL1dlYkNvcmVBcmd1bWVudENvZGVyc0N1cmwuY3BwCi0KLSAgICBT
aGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAotCi0gICAgVUlQcm9jZXNzL3dp
bi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHAKLQotICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvY3VybC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAotKQotCi1saXN0KEFQUEVORCBX
ZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9j
ZXNzL2N1cmwiCi0gICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9j
dXJsIgotKQotCi1saXN0KEFQUEVORCBXZWJLaXRfUFJJVkFURV9MSUJSQVJJRVMKLSAgICBPcGVu
U1NMOjpTU0wKLSAgICBEMmQxLmxpYgotICAgIEQzZDExLmxpYgotICAgIER3cml0ZQotICAgIER4
Z2kubGliCi0gICAgRHhndWlkCi0gICAgV2luZG93c0NvZGVjcwotICAgIG1mdXVpZC5saWIKLSAg
ICBzdHJtaWlkcy5saWIKLSkKLQotaWYgKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SKQotICAgIGxp
c3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCi0gICAgICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivc29j
a2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKLSAgICAgICAgVUlQcm9jZXNzL0luc3BlY3Rv
ci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmNwcAotCi0gICAgICAgIFVJ
UHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlXaW4uY3BwCi0g
ICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAg
ICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL3NvY2tldCIKLSAgICApCi1lbmRpZiAoKQotCi0j
IFdpbmRvd3Mgc3BlY2lmaWMKLWxpc3QoQVBQRU5EIFdlYktpdF9QVUJMSUNfRlJBTUVXT1JLX0hF
QURFUlMKLSAgICBTaGFyZWQvQVBJL2MvY3VybC9XS0NlcnRpZmljYXRlSW5mb0N1cmwuaAotCi0g
ICAgU2hhcmVkL0FQSS9jL3dpbi9XS0Jhc2VXaW4uaAotCi0gICAgVUlQcm9jZXNzL0FQSS9DL2N1
cmwvV0tQcm90ZWN0aW9uU3BhY2VDdXJsLmgKLSAgICBVSVByb2Nlc3MvQVBJL0MvY3VybC9XS1dl
YnNpdGVEYXRhU3RvcmVSZWZDdXJsLmgKLQotICAgIFVJUHJvY2Vzcy9BUEkvQy93aW4vV0tWaWV3
LmgKLSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcAkocmV2
aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTQgKzc1LDYgQEAgdm9pZCBTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZTo6Y2xlYXIoKQogdm9pZCBTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb246OmVu
Y29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBjb2xv
clNwYWNlIDw8IGlzT3BhcXVlOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBTaGFyZWRNZW1vcnk6
OkhhbmRsZTo6ZW5jb2RlSGFuZGxlKGVuY29kZXIsIHNoYXJlZFJlc291cmNlSGFuZGxlKTsKLQot
ICAgIC8vIEhhbmQgb2ZmIG93bmVyc2hpcCBvZiBvdXIgSEFORExFIHRvIHRoZSByZWNlaXZpbmcg
cHJvY2Vzcy4gSXQgd2lsbCBjbG9zZSBpdCBmb3IgdXMuCi0gICAgLy8gRklYTUU6IElmIHRoZSBy
ZWNlaXZpbmcgcHJvY2VzcyBjcmFzaGVzIGJlZm9yZSBpdCByZWNlaXZlcyB0aGUgbWVtb3J5LCB0
aGUgbWVtb3J5IHdpbGwgYmUKLSAgICAvLyBsZWFrZWQuIFNlZSA8aHR0cDovL3dlYmtpdC5vcmcv
Yi80NzUwMj4uCi0gICAgc2hhcmVkUmVzb3VyY2VIYW5kbGUgPSBudWxscHRyOwotI2VuZGlmCiB9
CiAKIGJvb2wgU2hhcmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9uOjpkZWNvZGUoSVBDOjpEZWNv
ZGVyJiBkZWNvZGVyLCBDb25maWd1cmF0aW9uJiByZXN1bHQpCkBAIC05OCwxNSArOTAsNiBAQCBi
b29sIFNoYXJlYWJsZUJpdG1hcDo6Q29uZmlndXJhdGlvbjo6ZGVjCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHJlc3VsdCA9IENvbmZpZ3VyYXRpb24geyBXVEZNb3ZlKCpjb2xvclNwYWNl
KSwgKmlzT3BhcXVlIH07Ci0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgYXV0byBwcm9jZXNzU3Bl
Y2lmaWNIYW5kbGUgPSBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZGVjb2RlSGFuZGxlKGRlY29kZXIp
OwotICAgIGlmICghcHJvY2Vzc1NwZWNpZmljSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICByZXN1bHQuc2hhcmVkUmVzb3VyY2VIYW5kbGUgPSBwcm9jZXNzU3BlY2lmaWNIYW5k
bGUudmFsdWUoKTsKLSNlbmRpZgotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE4NywxOCAr
MTcwLDEyIEBAIFNoYXJlYWJsZUJpdG1hcDo6U2hhcmVhYmxlQml0bWFwKGNvbnN0IEkKICAgICAs
IG1fc2hhcmVkTWVtb3J5KHNoYXJlZE1lbW9yeSkKICAgICAsIG1fZGF0YShudWxscHRyKQogewot
I2lmIFVTRShESVJFQ1QyRCkKLSAgICBjcmVhdGVTaGFyZWRSZXNvdXJjZSgpOwotI2VuZGlmCiB9
CiAKIFNoYXJlYWJsZUJpdG1hcDo6flNoYXJlYWJsZUJpdG1hcCgpCiB7CiAgICAgaWYgKCFpc0Jh
Y2tlZEJ5U2hhcmVkTWVtb3J5KCkpCiAgICAgICAgIFNoYXJlYWJsZUJpdG1hcE1hbGxvYzo6ZnJl
ZShtX2RhdGEpOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBkaXNwb3NlU2hhcmVkUmVzb3VyY2Uo
KTsKLSNlbmRpZgogfQogCiB2b2lkKiBTaGFyZWFibGVCaXRtYXA6OmRhdGEoKSBjb25zdApAQCAt
MjEyLDEyICsxODksNyBAQCB2b2lkKiBTaGFyZWFibGVCaXRtYXA6OmRhdGEoKSBjb25zdAogCiBD
aGVja2VkVWludDMyIFNoYXJlYWJsZUJpdG1hcDo6bnVtQnl0ZXNGb3JTaXplKFdlYkNvcmU6Oklu
dFNpemUgc2l6ZSwgY29uc3QgU2hhcmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9uJiBjb25maWd1
cmF0aW9uKQogewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAvLyBXZSBwYXNzIHJlZmVyZW5jZXMg
dG8gR1BVIHRleHR1cmVzLCBzbyBubyBuZWVkIHRvIGFsbG9jYXRlIGZyYW1lIGJ1ZmZlcnMgaGVy
ZS4gSnVzdCBzZW5kIGEgc21hbGwgYml0IG9mIGRhdGEuCi0gICAgcmV0dXJuIHNpemVvZih2b2lk
Kik7Ci0jZWxzZQogICAgIHJldHVybiBjYWxjdWxhdGVCeXRlc1BlclJvdyhzaXplLCBjb25maWd1
cmF0aW9uKSAqIHNpemUuaGVpZ2h0KCk7Ci0jZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaAkocmV2aXNpb24g
Mjg3ODExKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDE2ICszMiw2IEBACiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCi0jaWYgVVNFKERJUkVDVDJEKQot
aW50ZXJmYWNlIElEMkQxQml0bWFwOwotaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OwotaW50
ZXJmYWNlIElEM0QxMURldmljZTE7Ci1pbnRlcmZhY2UgSURYR0lLZXllZE11dGV4OwotaW50ZXJm
YWNlIElEWEdJU3VyZmFjZTE7Ci0KLSNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgotI2VuZGlm
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEltYWdlOwogY2xhc3MgR3JhcGhpY3NDb250
ZXh0OwpAQCAtNTQsOSArNDQsNiBAQCBwdWJsaWM6CiAgICAgc3RydWN0IENvbmZpZ3VyYXRpb24g
ewogICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZT4g
Y29sb3JTcGFjZTsKICAgICAgICAgYm9vbCBpc09wYXF1ZSB7IGZhbHNlIH07Ci0jaWYgVVNFKERJ
UkVDVDJEKQotICAgICAgICBtdXRhYmxlIEhBTkRMRSBzaGFyZWRSZXNvdXJjZUhhbmRsZSB7IG51
bGxwdHIgfTsKLSNlbmRpZgogCiAgICAgICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNv
bnN0OwogICAgICAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKElQQzo6
RGVjb2RlciYsIENvbmZpZ3VyYXRpb24mKTsKQEAgLTEzNywxNCArMTI0LDYgQEAgcHVibGljOgog
ICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNyZWF0ZUNhaXJvU3VyZmFjZSgpOwogCiAgICAg
V2ViQ29yZTo6UGxhdGZvcm1JbWFnZVB0ciBjcmVhdGVQbGF0Zm9ybUltYWdlKCkgeyByZXR1cm4g
Y3JlYXRlQ2Fpcm9TdXJmYWNlKCk7IH0KLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8
SUQyRDFCaXRtYXA+IGNyZWF0ZURpcmVjdDJEU3VyZmFjZShJRDNEMTFEZXZpY2UxKiwgSUQyRDFS
ZW5kZXJUYXJnZXQqKTsKLSAgICBJRFhHSVN1cmZhY2UxKiBkeFN1cmZhY2UoKSB7IHJldHVybiBt
X3N1cmZhY2UuZ2V0KCk7IH0KLSAgICB2b2lkIGNyZWF0ZVNoYXJlZFJlc291cmNlKCk7Ci0gICAg
dm9pZCBkaXNwb3NlU2hhcmVkUmVzb3VyY2UoKTsKLSAgICB2b2lkIGxlYWtTaGFyZWRSZXNvdXJj
ZSgpOwotCi0gICAgV2ViQ29yZTo6UGxhdGZvcm1JbWFnZVB0ciBjcmVhdGVQbGF0Zm9ybUltYWdl
KCkgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0xNzEsMTIgKzE1
MCw2IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7CiAgICAgQ29uZmln
dXJhdGlvbiBtX2NvbmZpZ3VyYXRpb247CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRy
PElEWEdJU3VyZmFjZTE+IG1fc3VyZmFjZTsKLSAgICBDT01QdHI8SURYR0lLZXllZE11dGV4PiBt
X3N1cmZhY2VNdXRleDsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IG1fYml0bWFwOwotI2VuZGlm
Ci0KICNpZiBVU0UoQ0cpCiAgICAgYm9vbCBtX3JlbGVhc2VCaXRtYXBDb250ZXh0RGF0YUNhbGxl
ZCB7IGZhbHNlIH07CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9TaGFy
ZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFy
ZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODExKQorKysg
U291cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDE3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEJyZW50IEZ1bGdoYW0gPGJmdWxnaGFtQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlNoYXJlYWJsZUJpdG1hcC5oIgotCi0jaW5jbHVkZSAiRGVjb2Rlci5oIgotI2luY2x1ZGUgIkVu
Y29kZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEltYWdlLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9ESUJQaXhlbERhdGEuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJET3BlcmF0aW9u
cy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJ
bXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQu
aD4KLSNpbmNsdWRlIDxkMmQxXzEuaD4KLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0jaW5jbHVkZSA8
ZHhnaTFfMi5oPgotI2luY2x1ZGUgPHdpbmNvZGVjLmg+Ci0jaW5jbHVkZSA8d3RmL1Byb2Nlc3NJ
RC5oPgotCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0K
LXZvaWQgU2hhcmVhYmxlQml0bWFwOjp2YWxpZGF0ZUNvbmZpZ3VyYXRpb24oQ29uZmlndXJhdGlv
biYpCi17Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBzdHJpZGVGb3JXaWR0aCh1bnNpZ25lZCB3aWR0
aCkKLXsKLSAgICBzdGF0aWMgdW5zaWduZWQgYml0c1BlclBpeGVsID0gRGlyZWN0MkQ6OmJpdHNQ
ZXJQaXhlbChEaXJlY3QyRDo6d2ljQml0bWFwRm9ybWF0KCkpOwotICAgIHJldHVybiBiaXRzUGVy
UGl4ZWwgKiB3aWR0aCAvIDg7Ci19Ci0KLUNoZWNrZWRVaW50MzIgU2hhcmVhYmxlQml0bWFwOjpj
YWxjdWxhdGVCeXRlc1BlclJvdyhXZWJDb3JlOjpJbnRTaXplIHNpemUsIGNvbnN0IENvbmZpZ3Vy
YXRpb24mIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJuIGNhbGN1bGF0ZUJ5dGVzUGVyUGl4
ZWwoY29uZmlndXJhdGlvbikgKiBzaXplLndpZHRoKCk7Ci19Ci0KLUNoZWNrZWRVaW50MzIgU2hh
cmVhYmxlQml0bWFwOjpjYWxjdWxhdGVCeXRlc1BlclBpeGVsKGNvbnN0IENvbmZpZ3VyYXRpb24m
KQotewotICAgIHJldHVybiA0OwotfQotCi12b2lkIFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hh
cmVkUmVzb3VyY2UoKQotewotICAgIC8vIERvbid0IGNyZWF0ZSBhIHNoYXJlZCByZXNvdXJjZSBp
ZiB0aGUgY29uZmlndXJhdGlvbiBpbnN0cnVjdHMgdXMgdG8gdXNlIGFuIGV4aXN0aW5nIG9uZS4K
LSAgICBpZiAobV9jb25maWd1cmF0aW9uLnNoYXJlZFJlc291cmNlSGFuZGxlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3N1cmZhY2UgPSBEaXJlY3QyRDo6Y3JlYXRlRFhHSVN1cmZhY2VPZlNp
emUobV9zaXplLCBudWxscHRyLCB0cnVlKTsKLQotICAgIENPTVB0cjxJRFhHSVJlc291cmNlMT4g
cmVzb3VyY2VEYXRhOwotICAgIEhSRVNVTFQgaHIgPSBtX3N1cmZhY2UtPlF1ZXJ5SW50ZXJmYWNl
KF9fdXVpZG9mKElEWEdJUmVzb3VyY2UpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJnJlc291
cmNlRGF0YSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgaHIg
PSByZXNvdXJjZURhdGEtPkNyZWF0ZVNoYXJlZEhhbmRsZShudWxscHRyLCBEWEdJX1NIQVJFRF9S
RVNPVVJDRV9SRUFEIHwgRFhHSV9TSEFSRURfUkVTT1VSQ0VfV1JJVEUsIG51bGxwdHIsICZtX2Nv
bmZpZ3VyYXRpb24uc2hhcmVkUmVzb3VyY2VIYW5kbGUpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNV
Q0NFRURFRChocikpOwotfQotCi12b2lkIFNoYXJlYWJsZUJpdG1hcDo6ZGlzcG9zZVNoYXJlZFJl
c291cmNlKCkKLXsKLSAgICBpZiAobV9zdXJmYWNlTXV0ZXgpCi0gICAgICAgIG1fc3VyZmFjZU11
dGV4LT5SZWxlYXNlU3luYygxKTsKLSAgICBpZiAobV9jb25maWd1cmF0aW9uLnNoYXJlZFJlc291
cmNlSGFuZGxlKQotICAgICAgICA6OkNsb3NlSGFuZGxlKG1fY29uZmlndXJhdGlvbi5zaGFyZWRS
ZXNvdXJjZUhhbmRsZSk7Ci19Ci0KLXZvaWQgU2hhcmVhYmxlQml0bWFwOjpsZWFrU2hhcmVkUmVz
b3VyY2UoKQotewotICAgIG1fY29uZmlndXJhdGlvbi5zaGFyZWRSZXNvdXJjZUhhbmRsZSA9IG51
bGxwdHI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJp
dG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKLXsKLSAgICAvLyBMb2NrIHRoZSBzdXJmYWNl
IHRvIHRoZSBjdXJyZW50IGRldmljZSB3aGlsZSByZW5kZXJpbmcuCi0gICAgSFJFU1VMVCBociA9
IG1fc3VyZmFjZS0+UXVlcnlJbnRlcmZhY2UoJm1fc3VyZmFjZU11dGV4KTsKLSAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICBociA9IG1fc3VyZmFjZU11dGV4LT5BY3F1aXJl
U3luYygwLCBJTkZJTklURSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0K
LSAgICBhdXRvIHN1cmZhY2VDb250ZXh0ID0gRGlyZWN0MkQ6OmNyZWF0ZVN1cmZhY2VSZW5kZXJU
YXJnZXQobV9zdXJmYWNlLmdldCgpKTsKLSAgICBpZiAoIXN1cmZhY2VDb250ZXh0KQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEPihzdXJmYWNlQ29udGV4dC5nZXQoKSk7Ci19Ci0KLXZvaWQgU2hhcmVhYmxlQml0
bWFwOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBkc3RQ
b2ludCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkKLXsKLSAgICBwYWludChjb250ZXh0LCAxLCBk
c3RQb2ludCwgc3JjUmVjdCk7Ci19Ci0KLXZvaWQgU2hhcmVhYmxlQml0bWFwOjpwYWludChHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IHNjYWxlRmFjdG9yLCBjb25zdCBJbnRQb2ludCYg
ZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpCi17Ci0gICAgYXV0byBzdXJmYWNlID0g
Y3JlYXRlRGlyZWN0MkRTdXJmYWNlKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmQzZERldmlj
ZSgpLCBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKSk7Ci0KLSNpZm5k
ZWYgX05ERUJVRwotICAgIGF1dG8gYml0bWFwU2l6ZSA9IHN1cmZhY2UtPkdldFBpeGVsU2l6ZSgp
OwotICAgIEFTU0VSVChiaXRtYXBTaXplLndpZHRoID09IG1fc2l6ZS53aWR0aCgpKTsKLSAgICBB
U1NFUlQoYml0bWFwU2l6ZS5oZWlnaHQgPT0gbV9zaXplLmhlaWdodCgpKTsKLSNlbmRpZgotCi0g
ICAgRmxvYXRSZWN0IGRlc3RSZWN0KGRzdFBvaW50LCBzcmNSZWN0LnNpemUoKSk7Ci0gICAgRmxv
YXRSZWN0IHNyY1JlY3RTY2FsZWQoc3JjUmVjdCk7Ci0gICAgc3JjUmVjdFNjYWxlZC5zY2FsZShz
Y2FsZUZhY3Rvcik7Ci0KLSAgICBBU1NFUlQoY29udGV4dC5oYXNQbGF0Zm9ybUNvbnRleHQoKSk7
Ci0gICAgYXV0byYgc3RhdGUgPSBjb250ZXh0LnN0YXRlKCk7Ci0gICAgYXV0byYgcGxhdGZvcm1D
b250ZXh0ID0gKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBJbWFnZVBhaW50aW5n
T3B0aW9ucyBvcHRpb25zIHsgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9k
ZSwgSW1hZ2VPcmllbnRhdGlvbigpLCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH07
Ci0gICAgRGlyZWN0MkQ6OmRyYXdQbGF0Zm9ybUltYWdlKHBsYXRmb3JtQ29udGV4dCwgc3VyZmFj
ZS5nZXQoKSwgbV9zaXplLCBkZXN0UmVjdCwgc3JjUmVjdFNjYWxlZCwgb3B0aW9ucywgc3RhdGUu
YWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi1DT01QdHI8SUQyRDFC
aXRtYXA+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlRGlyZWN0MkRTdXJmYWNlKElEM0QxMURldmlj
ZTEqIGRpcmVjdFhEZXZpY2UsIElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCi17Ci0g
ICAgaWYgKCFkaXJlY3RYRGV2aWNlKQotICAgICAgICBkaXJlY3RYRGV2aWNlID0gRGlyZWN0MkQ6
OmRlZmF1bHREaXJlY3RYRGV2aWNlKCk7Ci0KLSAgICBpZiAoIW1fYml0bWFwKSB7Ci0gICAgICAg
IENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IHRleHR1cmU7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBk
aXJlY3RYRGV2aWNlLT5PcGVuU2hhcmVkUmVzb3VyY2UxKG1fY29uZmlndXJhdGlvbi5zaGFyZWRS
ZXNvdXJjZUhhbmRsZSwgX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KCZ0ZXh0dXJlKSk7Ci0gICAgICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGhyID0gdGV4dHVyZS0+UXVlcnlJbnRl
cmZhY2UoJm1fc3VyZmFjZSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OwotCi0gICAgICAgIC8vIExvY2sgdGhlIHN1cmZhY2UgdG8gdGhlIGN1cnJlbnQgZGV2aWNlIHdo
aWxlIHJlbmRlcmluZy4KLSAgICAgICAgaHIgPSBtX3N1cmZhY2UtPlF1ZXJ5SW50ZXJmYWNlKCZt
X3N1cmZhY2VNdXRleCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwot
ICAgICAgICBociA9IG1fc3VyZmFjZU11dGV4LT5BY3F1aXJlU3luYygxLCBJTkZJTklURSk7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgICAgIGF1dG8gYml0
bWFwUHJvcGVydGllcyA9IERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIGhy
ID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVTaGFyZWRCaXRtYXAoX191dWlkb2YoSURYR0lTdXJmYWNl
MSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fc3VyZmFjZS5nZXQoKSksICZiaXRtYXBQcm9w
ZXJ0aWVzLCAmbV9iaXRtYXApOwotICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9iaXRtYXA7Ci19Ci0K
LVJlZlB0cjxJbWFnZT4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVJbWFnZSgpCi17Ci0gICAgYXV0
byBzdXJmYWNlID0gY3JlYXRlRGlyZWN0MkRTdXJmYWNlKG51bGxwdHIsIEdyYXBoaWNzQ29udGV4
dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpKTsKLSAgICBpZiAoIXN1cmZhY2UpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShz
dXJmYWNlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQmFja2luZ1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
MSArMjksNiBAQAogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIlVwZGF0
ZUluZm8uaCIKIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVk
ZSA8ZDNkMTFfMS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc4LDEwICsyNzgsNiBAQAogI2luY2x1ZGUg
IlNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgiCiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1Qy
RCkKLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpICYmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAjaW5jbHVkZSAiV2ViRGV2aWNlT3Jp
ZW50YXRpb25VcGRhdGVQcm92aWRlclByb3h5LmgiCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDEwICsx
ODMsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUHJvbWlzZWRBdHRhY2htZW50SW5mby5oPgogI2Vu
ZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQzRDExRGV2aWNlMTsKLSNlbmRp
ZgotCiAjaWYgRU5BQkxFKE1FRElBX1VTQUdFKQogI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFTZXNz
aW9uSWRlbnRpZmllci5oPgogI2VuZGlmCkBAIC0xMDE3LDEwICsxMDEzLDYgQEAgcHVibGljOgog
CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIFBsYXRmb3JtVmlld1dpZGdldCB2aWV3V2lkZ2V0KCk7
Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIElEM0QxMURldmljZTEqIGRldmljZSgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0RGV2aWNlKElEM0QxMURldmljZTEqKTsKLSNlbmRpZgogI2VuZGlmCiAjaWYg
VVNFKExJQldQRSkKICAgICBzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCogdmlld0JhY2tlbmQoKTsK
QEAgLTMxMDUsOSArMzA5Nyw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFJlbW90ZU1lZGlhU2Vz
c2lvbkNvb3JkaW5hdG9yUHJveHk+IG1fbWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JQcm94eTsKICNl
bmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRDNEMTFEZXZpY2UxPiBtX2Rl
dmljZTsKLSNlbmRpZgogICAgIGJvb2wgbV9zZXNzaW9uU3RhdGVXYXNSZXN0b3JlZEJ5QVBJUmVx
dWVzdCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzUXVvdGFJbmNyZWFzZURlbmllZCB7IGZhbHNl
IH07CiAgICAgYm9vbCBtX2lzTGF5ZXJUcmVlRnJvemVuRHVlVG9Td2lwZUFuaW1hdGlvbiB7IGZh
bHNlIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGly
ZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNr
aW5nU3RvcmVEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAt
MSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJCYWNraW5nU3RvcmUuaCIKLQotI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2luY2x1
ZGUgIlVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlIDxX
ZWJDb3JlL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0NPTVB0ci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGlsaXRpZXMuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oPgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNs
dWRlIDxkM2QxMV8xLmg+Ci0jaW5jbHVkZSA8ZHhnaS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1zdGQ6OnVuaXF1ZV9wdHI8QmFja2luZ1N0b3Jl
QmFja2VuZERpcmVjdDJEPiBCYWNraW5nU3RvcmU6OmNyZWF0ZUJhY2tlbmQoKQotewotICAgIHJl
dHVybiBtYWtlVW5pcXVlPEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGw+KG1fc2l6ZSwg
bV9kZXZpY2VTY2FsZUZhY3RvciwgbV93ZWJQYWdlUHJveHkuZGV2aWNlKCkpOwotfQotCi12b2lk
IEJhY2tpbmdTdG9yZTo6cGFpbnQoRFhDb25uZWN0aW9ucyBkeENvbm5lY3Rpb25zLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQotewotICAgIEFTU0VSVChtX2JhY2tlbmQpOwotICAgIEFTU0VSVChtX2Jh
Y2tlbmQtPnNpemUoKSA9PSBtX3NpemUpOwotCi0gICAgQ09NUHRyPElEM0QxMVJlc291cmNlPiBi
YWNrQnVmZmVyOwotICAgIEhSRVNVTFQgaHIgPSBkeENvbm5lY3Rpb25zLmJhY2tCdWZmZXItPlF1
ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEM0QxMVJlc291cmNlKSwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KCZiYWNrQnVmZmVyKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0KLSAgICBDT01QdHI8SUQzRDExUmVzb3VyY2U+IGJhY2tpbmdTdG9yZTsKLSAgICBociA9IG1f
YmFja2VuZC0+ZHhTdXJmYWNlKCktPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEM0QxMVJlc291
cmNlKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZiYWNraW5nU3RvcmUpKTsKLSAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENEM0QxMV9CT1ggc3JjQm94KHJlY3Qu
eCgpLCByZWN0LnkoKSwgMCwgcmVjdC54KCkgKyByZWN0LndpZHRoKCksIHJlY3QueSgpICsgcmVj
dC5oZWlnaHQoKSwgMSk7Ci0gICAgZHhDb25uZWN0aW9ucy5pbW1lZGlhdGVDb250ZXh0LT5Db3B5
U3VicmVzb3VyY2VSZWdpb24xKGJhY2tCdWZmZXIuZ2V0KCksIDAsIHJlY3QueCgpLCByZWN0Lnko
KSwgMCwgYmFja2luZ1N0b3JlLmdldCgpLCAwLCAmc3JjQm94LCBEM0QxMV9DT1BZX0RJU0NBUkQp
OwotfQotCi12b2lkIEJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUoU2hhcmVhYmxlQml0
bWFwKiBiaXRtYXAsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgaWYgKCFt
X2JhY2tlbmQpCi0gICAgICAgIG1fYmFja2VuZCA9IGNyZWF0ZUJhY2tlbmQoKTsKLQotICAgIHNj
cm9sbCh1cGRhdGVJbmZvLnNjcm9sbFJlY3QsIHVwZGF0ZUluZm8uc2Nyb2xsT2Zmc2V0KTsKLQot
ICAgIEludFBvaW50IHVwZGF0ZVJlY3RCb3VuZHNMb2NhdGlvbiA9IHVwZGF0ZUluZm8udXBkYXRl
UmVjdEJvdW5kcy5sb2NhdGlvbigpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBkZXZpY2VV
cGRhdGVCaXRtYXAgPSBiaXRtYXAtPmNyZWF0ZURpcmVjdDJEU3VyZmFjZShtX3dlYlBhZ2VQcm94
eS5kZXZpY2UoKSwgbV9iYWNrZW5kLT5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgaWYgKCFkZXZpY2VV
cGRhdGVCaXRtYXApCi0gICAgICAgIHJldHVybjsKLQotI2lmbmRlZiBfTkRFQlVHCi0gICAgYXV0
byBkZXZpY2VCaXRtYXBTaXplID0gZGV2aWNlVXBkYXRlQml0bWFwLT5HZXRQaXhlbFNpemUoKTsK
LSAgICBBU1NFUlQoZGV2aWNlQml0bWFwU2l6ZS53aWR0aCA9PSB1cGRhdGVJbmZvLnVwZGF0ZVJl
Y3RCb3VuZHMud2lkdGgoKSk7Ci0gICAgQVNTRVJUKGRldmljZUJpdG1hcFNpemUuaGVpZ2h0ID09
IHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy5oZWlnaHQoKSk7Ci0jZW5kaWYKLQotICAgIGZv
ciAoY29uc3QgYXV0byYgdXBkYXRlUmVjdCA6IHVwZGF0ZUluZm8udXBkYXRlUmVjdHMpIHsKLSAg
ICAgICAgYXV0byBjdXJyZW50UmVjdExvY2F0aW9uID0gSW50U2l6ZSh1cGRhdGVSZWN0LngoKSAt
IHVwZGF0ZVJlY3RCb3VuZHNMb2NhdGlvbi54KCksIHVwZGF0ZVJlY3QueSgpIC0gdXBkYXRlUmVj
dEJvdW5kc0xvY2F0aW9uLnkoKSk7Ci0gICAgICAgIGF1dG8gZGVzdFJlY3RMb2NhdGlvbiA9IElu
dFNpemUodXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpKTsKLSAgICAgICAgRGlyZWN0MkQ6
OmNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoZGV2aWNlVXBkYXRlQml0bWFwLmdldCgp
LCBtX2JhY2tlbmQtPnN1cmZhY2UoKSwgY3VycmVudFJlY3RMb2NhdGlvbiwgdXBkYXRlUmVjdCwg
ZGVzdFJlY3RMb2NhdGlvbik7Ci0gICAgfQotfQotCi12b2lkIEJhY2tpbmdTdG9yZTo6c2Nyb2xs
KGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkK
LXsKLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LmlzWmVybygpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBBU1NFUlQobV9iYWNrZW5kKTsKLSAgICBtX2JhY2tlbmQtPnNjcm9sbChzY3JvbGxSZWN0LCBz
Y3JvbGxPZmZzZXQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCShyZXZpc2lvbiAy
ODc4MTEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Nl
YXJjaFBvcHVwTWVudURCLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyQWdlbnQuaD4KIAotI2lm
IFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpwbGF0Zm9ybUluaXRpYWxpemUoKQpAQCAt
NzksMTggKzc1LDYgQEAgUGxhdGZvcm1WaWV3V2lkZ2V0IFdlYlBhZ2VQcm94eTo6dmlld1dpZAog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50SW1wbCY+KHBhZ2VDbGllbnQoKSkudmll
d1dpZGdldCgpOwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotSUQzRDExRGV2aWNlMSogV2ViUGFn
ZVByb3h5OjpkZXZpY2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2RldmljZS5nZXQoKTsKLX0K
LQotdm9pZCBXZWJQYWdlUHJveHk6OnNldERldmljZShJRDNEMTFEZXZpY2UxKiBkZXZpY2UpCi17
Ci0gICAgbV9kZXZpY2UgPSBkZXZpY2U7Ci19Ci0jZW5kaWYKLQogdm9pZCBXZWJQYWdlUHJveHk6
OmRpc3BhdGNoUGVuZGluZ0NoYXJFdmVudHMoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYg
a2V5ZG93bkV2ZW50KQogewogICAgIGF1dG8mIHBlbmRpbmdDaGFyRXZlbnRzID0ga2V5ZG93bkV2
ZW50LnBlbmRpbmdDaGFyRXZlbnRzKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93
aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAJKHJldmlzaW9uIDI4NzgxMSkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDEzICs0NSw2IEBACiAjaW5jbHVkZSA8d3RmL0hleE51bWJl
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAotI2lmIFVTRShESVJF
Q1QyRCkKLSNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJEVXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8
ZDNkMTFfMS5oPgotI2luY2x1ZGUgPGRpcmVjdHhjb2xvcnMuaD4gCi0jaW5jbHVkZSA8ZHhnaS5o
PgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKQEAgLTIxNSwxMSArMjA4LDYgQEAgdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2hvd1Bv
cHVwTWVudQogCiAgICAgICAgIGlmICghbV9wb3B1cCkKICAgICAgICAgICAgIHJldHVybjsKLQot
I2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgRGlyZWN0MkQ6OmNyZWF0ZURldmljZUFuZENvbnRl
eHQobV9kM2REZXZpY2UsIG1faW1tZWRpYXRlQ29udGV4dCk7Ci0gICAgICAgIHNldHVwU3dhcENo
YWluKG1fd2luZG93UmVjdC5zaXplKCkpOwotI2VuZGlmCiAgICAgfQogCiAgICAgQk9PTCBzaG91
bGRBbmltYXRlID0gRkFMU0U7CkBAIC04MjgsNyArODE2LDYgQEAgdm9pZCBXZWJQb3B1cE1lbnVQ
cm94eVdpbjo6cGFpbnQoY29uc3QgSQogICAgIGlmICghbV9wb3B1cCkKICAgICAgICAgcmV0dXJu
OwogCi0jaWYgIVVTRShESVJFQ1QyRCkKICAgICBpZiAoIW1fREMpIHsKICAgICAgICAgbV9EQyA9
IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKEhXbmREQyhtX3BvcHVwKSkpOwog
ICAgICAgICBpZiAoIW1fREMpCkBAIC04NTQsMjIgKzg0MSw2IEBAIHZvaWQgV2ViUG9wdXBNZW51
UHJveHlXaW46OnBhaW50KGNvbnN0IEkKICAgICB9CiAKICAgICBHcmFwaGljc0NvbnRleHRXaW4g
Y29udGV4dChtX0RDLmdldCgpKTsKLSNlbHNlCi0gICAgQ09NUHRyPElEM0QxMVRleHR1cmUyRD4g
YmFja0J1ZmZlcjsgCi0gICAgSFJFU1VMVCBociA9IG1fc3dhcENoYWluLT5HZXRCdWZmZXIoMCwg
X191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZiYWNr
QnVmZmVyKSk7IAotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQ09NUHRyPElEWEdJU3VyZmFjZTE+IHN1cmZhY2UoUXVlcnksIGJhY2tCdWZmZXIpOwotICAg
IGlmICghc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZW5kZXJUYXJnZXQg
PSBXZWJDb3JlOjpEaXJlY3QyRDo6Y3JlYXRlU3VyZmFjZVJlbmRlclRhcmdldChzdXJmYWNlLmdl
dCgpKTsKLQotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHBsYXRmb3JtQ29udGV4dChyZW5k
ZXJUYXJnZXQuZ2V0KCkpOwotICAgIHBsYXRmb3JtQ29udGV4dC5zZXREM0REZXZpY2UobV9kM2RE
ZXZpY2UuZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250ZXh0KCZwbGF0Zm9ybUNv
bnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1l
bW9yeSk7Ci0jZW5kaWYKIAogICAgIEludFJlY3QgdHJhbnNsYXRlZERhbWFnZVJlY3QgPSBkYW1h
Z2VSZWN0OwogICAgIHRyYW5zbGF0ZWREYW1hZ2VSZWN0Lm1vdmUoSW50U2l6ZSgwLCBtX3Njcm9s
bE9mZnNldCAqIG1faXRlbUhlaWdodCkpOwpAQCAtODg0LDE1ICs4NTUsMTAgQEAgdm9pZCBXZWJQ
b3B1cE1lbnVQcm94eVdpbjo6cGFpbnQoY29uc3QgSQogICAgIGlmIChtX3Njcm9sbGJhcikKICAg
ICAgICAgbV9zY3JvbGxiYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOwogCi0jaWYgIVVT
RShESVJFQ1QyRCkKICAgICBIV25kREMgaFduZERDOwogICAgIEhEQyBsb2NhbERDID0gaGRjID8g
aGRjIDogaFduZERDLnNldEhXbmQobV9wb3B1cCk7CiAKICAgICA6OkJpdEJsdChsb2NhbERDLCBk
YW1hZ2VSZWN0LngoKSwgZGFtYWdlUmVjdC55KCksIGRhbWFnZVJlY3Qud2lkdGgoKSwgZGFtYWdl
UmVjdC5oZWlnaHQoKSwgbV9EQy5nZXQoKSwgZGFtYWdlUmVjdC54KCksIGRhbWFnZVJlY3QueSgp
LCBTUkNDT1BZKTsKLSNlbHNlCi0gICAgY29udGV4dC5mbHVzaCgpOwotICAgIG1fc3dhcENoYWlu
LT5QcmVzZW50KDAsIDApOyAKLSNlbmRpZgogfQogCiBib29sIFdlYlBvcHVwTWVudVByb3h5V2lu
OjpzZXRGb2N1c2VkSW5kZXgoaW50IGksIGJvb2wgaG90VHJhY2tpbmcpCkBAIC05OTUsNDggKzk2
MSw2IEBAIGJvb2wgV2ViUG9wdXBNZW51UHJveHlXaW46OnNjcm9sbFRvUmV2ZWEKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi12b2lkIFdlYlBvcHVwTWVudVByb3h5
V2luOjpzZXR1cFN3YXBDaGFpbihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotewotICAg
IG1fc3dhcENoYWluID0gRGlyZWN0MkQ6OnN3YXBDaGFpbk9mU2l6ZUZvcldpbmRvd0FuZERldmlj
ZShzaXplLCBtX3BvcHVwLCBtX2QzZERldmljZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9zd2Fw
Q2hhaW4pOwotICAgIGF1dG8gZmFjdG9yeSA9IERpcmVjdDJEOjpmYWN0b3J5Rm9yRFhHSURldmlj
ZShEaXJlY3QyRDo6dG9EWEdJRGV2aWNlKG1fZDNkRGV2aWNlKSk7Ci0KLSAgICBmYWN0b3J5LT5N
YWtlV2luZG93QXNzb2NpYXRpb24obV9wb3B1cCwgMCk7Ci0gICAgY29uZmlndXJlQmFja2luZ1N0
b3JlKHNpemUpOwotfQotCi12b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpjb25maWd1cmVCYWNr
aW5nU3RvcmUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBBU1NFUlQobV9z
d2FwQ2hhaW4pOwotICAgIEFTU0VSVChtX2QzZERldmljZSk7Ci0gICAgQVNTRVJUKG1faW1tZWRp
YXRlQ29udGV4dCk7Ci0KLSAgICAvLyBDcmVhdGUgYSByZW5kZXIgdGFyZ2V0IHZpZXcgCi0gICAg
Q09NUHRyPElEM0QxMVRleHR1cmUyRD4gYmFja0J1ZmZlcjsgCi0gICAgSFJFU1VMVCBociA9IG1f
c3dhcENoYWluLT5HZXRCdWZmZXIoMCwgX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KCZiYWNrQnVmZmVyKSk7IAotICAgIFJFTEVBU0VfQVNTRVJUKFNV
Q0NFRURFRChocikpOwotCi0gICAgaHIgPSBtX2QzZERldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0
VmlldyhiYWNrQnVmZmVyLmdldCgpLCBudWxscHRyLCAmbV9yZW5kZXJUYXJnZXRWaWV3KTsgCi0g
ICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBhdXRvKiByZW5kZXJUYXJn
ZXRWaWV3ID0gbV9yZW5kZXJUYXJnZXRWaWV3LmdldCgpOwotICAgIG1faW1tZWRpYXRlQ29udGV4
dC0+T01TZXRSZW5kZXJUYXJnZXRzKDEsICZyZW5kZXJUYXJnZXRWaWV3LCBudWxscHRyKTsKLQot
ICAgIC8vIFNldHVwIHRoZSB2aWV3cG9ydCAKLSAgICBEM0QxMV9WSUVXUE9SVCB2aWV3cG9ydDsK
LSAgICB2aWV3cG9ydC5XaWR0aCA9IChGTE9BVClzaXplLndpZHRoKCk7Ci0gICAgdmlld3BvcnQu
SGVpZ2h0ID0gKEZMT0FUKXNpemUuaGVpZ2h0KCk7Ci0gICAgdmlld3BvcnQuTWluRGVwdGggPSAw
LjBmOwotICAgIHZpZXdwb3J0Lk1heERlcHRoID0gMS4wZjsKLSAgICB2aWV3cG9ydC5Ub3BMZWZ0
WCA9IDA7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFkgPSAwOwotICAgIG1faW1tZWRpYXRlQ29udGV4
dC0+UlNTZXRWaWV3cG9ydHMoMSwgJnZpZXdwb3J0KTsKLQotICAgIG1faW1tZWRpYXRlQ29udGV4
dC0+Q2xlYXJSZW5kZXJUYXJnZXRWaWV3KG1fcmVuZGVyVGFyZ2V0Vmlldy5nZXQoKSwgRGlyZWN0
WDo6Q29sb3JzOjpCbGFuY2hlZEFsbW9uZCk7IAotfQotI2VuZGlmCi0KIFN0cmluZyBXZWJQb3B1
cE1lbnVQcm94eVdpbjo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoIldlYlBvcHVwTWVudVByb3h5V2luIDB4IiwgaGV4KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaAkocmV2aXNpb24gMjg3ODEx
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDEzICszMyw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TY3Jv
bGxhYmxlQXJlYS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYmFyLmg+CiAKLSNpZiBVU0Uo
RElSRUNUMkQpCi1pbnRlcmZhY2UgSUQzRDExRGV2aWNlMTsKLWludGVyZmFjZSBJRDNEMTFEZXZp
Y2VDb250ZXh0MTsKLWludGVyZmFjZSBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3OwotaW50ZXJmYWNl
IElEWEdJU3dhcENoYWluOwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBX
ZWJWaWV3OwpAQCAtMTMxLDIzICsxMjQsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGluY3JlbWVu
dFdoZWVsRGVsdGEoaW50IGRlbHRhKTsKICAgICB2b2lkIHJlZHVjZVdoZWVsRGVsdGEoaW50IGRl
bHRhKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIHNldHVwU3dhcENoYWluKGNvbnN0
IFdlYkNvcmU6OkludFNpemUmKTsKLSAgICB2b2lkIGNvbmZpZ3VyZUJhY2tpbmdTdG9yZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJik7Ci0jZW5kaWYKLQogICAgIFdlYlZpZXcqIG1fd2ViVmlldzsK
ICAgICBWZWN0b3I8V2ViUG9wdXBJdGVtPiBtX2l0ZW1zOwogICAgIFBsYXRmb3JtUG9wdXBNZW51
RGF0YSBtX2RhdGE7CiAgICAgaW50IG1fbmV3U2VsZWN0ZWRJbmRleCB7IDAgfTsKIAogICAgIFJl
ZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IG1fc2Nyb2xsYmFyOwotI2lmIFVTRShESVJFQ1QyRCkK
LSAgICBDT01QdHI8SUQzRDExRGV2aWNlMT4gbV9kM2REZXZpY2U7Ci0gICAgQ09NUHRyPElEM0Qx
MURldmljZUNvbnRleHQxPiBtX2ltbWVkaWF0ZUNvbnRleHQ7Ci0gICAgQ09NUHRyPElEM0QxMVJl
bmRlclRhcmdldFZpZXc+IG1fcmVuZGVyVGFyZ2V0VmlldzsgCi0gICAgQ09NUHRyPElEWEdJU3dh
cENoYWluPiBtX3N3YXBDaGFpbjsKLSNlbmRpZgogICAgIEdESU9iamVjdDxIREM+IG1fREM7CiAg
ICAgR0RJT2JqZWN0PEhCSVRNQVA+IG1fYm1wOwogICAgIEhXTkQgbV9wb3B1cCB7IG51bGxwdHIg
fTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9u
IDI4NzgxMSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjgsMTQgKzY4LDYgQEAKICNpbmNsdWRlIDxjYWlyby5oPgogI2VuZGlm
IAogCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGlsaXRp
ZXMuaD4KLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0jaW5jbHVkZSA8ZGlyZWN0eGNvbG9ycy5oPiAK
LSNpbmNsdWRlIDxkeGdpLmg+Ci0jZW5kaWYKLQotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0yNDMsMTEgKzIzNSw2IEBAIFdlYlZpZXc6OldlYlZp
ZXcoUkVDVCByZWN0LCBjb25zdCBBUEk6OlAKICAgICBtX3BhZ2UtPmluaXRpYWxpemVXZWJQYWdl
KCk7CiAKICAgICBJbnRTaXplIHdpbmRvd1NpemUocmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVj
dC5ib3R0b20gLSByZWN0LnRvcCk7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIERpcmVjdDJEOjpj
cmVhdGVEZXZpY2VBbmRDb250ZXh0KG1fZDNkRGV2aWNlLCBtX2ltbWVkaWF0ZUNvbnRleHQpOwot
ICAgIG1fcGFnZS0+c2V0RGV2aWNlKG1fZDNkRGV2aWNlLmdldCgpKTsKLSAgICBzZXR1cFN3YXBD
aGFpbih3aW5kb3dTaXplKTsKLSNlbmRpZgogCiAgICAgaWYgKG1fcGFnZS0+ZHJhd2luZ0FyZWEo
KSkKICAgICAgICAgbV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5zZXRTaXplKHdpbmRvd1NpemUpOwpA
QCAtNTczLDIxICs1NjAsNiBAQCBMUkVTVUxUIFdlYlZpZXc6Om9uU2l6ZUV2ZW50KEhXTkQgaHdu
ZCwgCiAgICAgICAgIG1fbmV4dFJlc2l6ZVNjcm9sbE9mZnNldCA9IEludFNpemUoKTsKICAgICB9
CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgaWYgKG1fc3dhcENoYWluKSB7Ci0gICAgICAgIG1f
aW1tZWRpYXRlQ29udGV4dC0+T01TZXRSZW5kZXJUYXJnZXRzKDAsIG51bGxwdHIsIG51bGxwdHIp
OwotCi0gICAgICAgIG1fcmVuZGVyVGFyZ2V0VmlldyA9IG51bGxwdHI7Ci0KLSAgICAgICAgLy8g
UHJlc2VydmUgdGhlIGV4aXN0aW5nIGJ1ZmZlciBjb3VudCAocGFzcyB6ZXJvIGZvciBjb3VudCkg
YW5kIGZvcm1hdCAoYnkgcGFzc2luZyBEWEdJX0ZPUk1BVF9VTktOT1dOKS4KLSAgICAgICAgLy8g
QXV0b21hdGljYWxseSBjaG9vc2UgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gbWF0Y2ggdGhlIGNs
aWVudCByZWN0IGZvciB0aGUgYmFja2luZyB3aW5kb3cgKHBhc3MgemVyb3MgZm9yIHdpZHRoL2hl
aWdodCkuCi0gICAgICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+UmVzaXplQnVmZmVycygw
LCAwLCAwLCBEWEdJX0ZPUk1BVF9VTktOT1dOLCBEWEdJX1NXQVBfQ0hBSU5fRkxBR19HRElfQ09N
UEFUSUJMRSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAg
ICAgIGNvbmZpZ3VyZUJhY2tpbmdTdG9yZSh3aW5kb3dTaXplKTsKLSAgICB9Ci0jZW5kaWYKLQog
ICAgIGhhbmRsZWQgPSB0cnVlOwogICAgIHJldHVybiAwOwogfQpAQCAtOTc0LDUwICs5NDYsNCBA
QCB2b2lkIFdlYlZpZXc6OnNldFRvb2xUaXAoY29uc3QgU3RyaW5nJiB0CiAgICAgOjpTZW5kTWVz
c2FnZShtX3Rvb2xUaXBXaW5kb3csIFRUTV9BQ1RJVkFURSwgIXRvb2xUaXAuaXNFbXB0eSgpLCAw
KTsKIH0KIAotI2lmIFVTRShESVJFQ1QyRCkKLXZvaWQgV2ViVmlldzo6c2V0dXBTd2FwQ2hhaW4o
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAoIW1fZDNkRGV2aWNlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N3YXBDaGFpbiA9IERpcmVjdDJEOjpzd2FwQ2hhaW5P
ZlNpemVGb3JXaW5kb3dBbmREZXZpY2Uoc2l6ZSwgbV93aW5kb3csIG1fZDNkRGV2aWNlKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChtX3N3YXBDaGFpbik7Ci0KLSAgICBhdXRvIGZhY3RvcnkgPSBEaXJl
Y3QyRDo6ZmFjdG9yeUZvckRYR0lEZXZpY2UoRGlyZWN0MkQ6OnRvRFhHSURldmljZShtX2QzZERl
dmljZSkpOwotCi0gICAgZmFjdG9yeS0+TWFrZVdpbmRvd0Fzc29jaWF0aW9uKG1fd2luZG93LCAw
KTsKLSAgICBjb25maWd1cmVCYWNraW5nU3RvcmUoc2l6ZSk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6
Y29uZmlndXJlQmFja2luZ1N0b3JlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi17Ci0g
ICAgQVNTRVJUKG1fc3dhcENoYWluKTsKLSAgICBBU1NFUlQobV9kM2REZXZpY2UpOwotICAgIEFT
U0VSVChtX2ltbWVkaWF0ZUNvbnRleHQpOwotCi0gICAgLy8gQ3JlYXRlIGEgcmVuZGVyIHRhcmdl
dCB2aWV3IAotICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IGJhY2tCdWZmZXI7IAotICAgIEhS
RVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVpZG9mKElEM0QxMVRleHR1
cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja0J1ZmZlcikpOyAKLSAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0gbV9kM2REZXZpY2UtPkNyZWF0
ZVJlbmRlclRhcmdldFZpZXcoYmFja0J1ZmZlci5nZXQoKSwgbnVsbHB0ciwgJm1fcmVuZGVyVGFy
Z2V0Vmlldyk7IAotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgYXV0
byogcmVuZGVyVGFyZ2V0VmlldyA9IG1fcmVuZGVyVGFyZ2V0Vmlldy5nZXQoKTsKLSAgICBtX2lt
bWVkaWF0ZUNvbnRleHQtPk9NU2V0UmVuZGVyVGFyZ2V0cygxLCAmcmVuZGVyVGFyZ2V0Vmlldywg
bnVsbHB0cik7Ci0KLSAgICAvLyBTZXR1cCB0aGUgdmlld3BvcnQgCi0gICAgRDNEMTFfVklFV1BP
UlQgdmlld3BvcnQ7Ci0gICAgdmlld3BvcnQuV2lkdGggPSAoRkxPQVQpc2l6ZS53aWR0aCgpOwot
ICAgIHZpZXdwb3J0LkhlaWdodCA9IChGTE9BVClzaXplLmhlaWdodCgpOwotICAgIHZpZXdwb3J0
Lk1pbkRlcHRoID0gMC4wZjsKLSAgICB2aWV3cG9ydC5NYXhEZXB0aCA9IDEuMGY7Ci0gICAgdmll
d3BvcnQuVG9wTGVmdFggPSAwOwotICAgIHZpZXdwb3J0LlRvcExlZnRZID0gMDsKLSAgICBtX2lt
bWVkaWF0ZUNvbnRleHQtPlJTU2V0Vmlld3BvcnRzKDEsICZ2aWV3cG9ydCk7Ci0KLSAgICBtX2lt
bWVkaWF0ZUNvbnRleHQtPkNsZWFyUmVuZGVyVGFyZ2V0VmlldyhtX3JlbmRlclRhcmdldFZpZXcu
Z2V0KCksIERpcmVjdFg6OkNvbG9yczo6TWlkbmlnaHRCbHVlKTsgCi19Ci0jZW5kaWYKLQogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2Vi
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3
LmgJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJW
aWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSw2IEBACiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLSNpZiBVU0UoRElSRUNUMkQpCi1p
bnRlcmZhY2UgSUQzRDExRGV2aWNlMTsKLWludGVyZmFjZSBJRDNEMTFEZXZpY2VDb250ZXh0MTsK
LWludGVyZmFjZSBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3OwotaW50ZXJmYWNlIElEWEdJU3dhcENo
YWluOwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEludFNpemU7CiB9CkBA
IC04MywxMSArNzYsNiBAQCBwdWJsaWM6CiAKICAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5n
QXJlYSgpIHsgcmV0dXJuIHBhZ2UoKSA/IHBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSA6IG51bGxwdHI7
IH0KIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBJRDNEMTFEZXZpY2UxKiBkM2REZXZpY2UoKSBj
b25zdCB7IHJldHVybiBtX2QzZERldmljZS5nZXQoKTsgfQotICAgIElEM0QxMURldmljZUNvbnRl
eHQxKiBkM2RJbW1lZGlhdGVDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbW1lZGlhdGVDb250
ZXh0LmdldCgpOyB9Ci0jZW5kaWYKLQogcHJpdmF0ZToKICAgICBXZWJWaWV3KFJFQ1QsIGNvbnN0
IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mLCBIV05EIHBhcmVudFdpbmRvdyk7CiAKQEAgLTE0NCwx
MSArMTMyLDYgQEAgcHJpdmF0ZToKICAgICAvLyBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlTGlzdGVu
ZXIKICAgICB2aXJ0dWFsIHZvaWQgd2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQgbWVz
c2FnZSwgV1BBUkFNLCBMUEFSQU0pOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgc2V0
dXBTd2FwQ2hhaW4oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIHZvaWQgY29uZmlndXJl
QmFja2luZ1N0b3JlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSNlbmRpZgotCiAgICAgSFdO
RCBtX3dpbmRvdyB7IG51bGxwdHIgfTsKICAgICBIV05EIG1fdG9wTGV2ZWxQYXJlbnRXaW5kb3cg
eyBudWxscHRyIH07CiAgICAgSFdORCBtX3Rvb2xUaXBXaW5kb3cgeyBudWxscHRyIH07CkBAIC0x
NjgsMTIgKzE1MSw2IEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpQ
YWdlQ2xpZW50SW1wbD4gbV9wYWdlQ2xpZW50OwogICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IG1f
cGFnZTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEM0QxMURldmljZTE+IG1fZDNk
RGV2aWNlOwotICAgIENPTVB0cjxJRDNEMTFEZXZpY2VDb250ZXh0MT4gbV9pbW1lZGlhdGVDb250
ZXh0OwotICAgIENPTVB0cjxJRDNEMTFSZW5kZXJUYXJnZXRWaWV3PiBtX3JlbmRlclRhcmdldFZp
ZXc7IAotICAgIENPTVB0cjxJRFhHSVN3YXBDaGFpbj4gbV9zd2FwQ2hhaW47Ci0jZW5kaWYKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVudS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVudS5jcHAJKHJldmlzaW9u
IDI4NzgxMSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQ
b3B1cE1lbnUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTIgKzExNSw2IEBAIHZvaWQgV2Vi
UG9wdXBNZW51OjpzaG93KGNvbnN0IEludFJlY3QmIHIKICAgICBzZXRVcFBsYXRmb3JtRGF0YShw
YWdlQ29vcmRpbmF0ZXMsIHBsYXRmb3JtRGF0YSk7CiAKICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OlNob3dQb3B1cE1lbnUocGFnZUNvb3JkaW5hdGVzLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
bV9wb3B1cENsaWVudC0+bWVudVN0eWxlKCkudGV4dERpcmVjdGlvbigpKSwgaXRlbXMsIHNlbGVj
dGVkSW5kZXgsIHBsYXRmb3JtRGF0YSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKLQotI2lmIFVT
RShESVJFQ1QyRCkKLSAgICAvLyBEb24ndCBkZXN0cm95IHRoZSBzaGFyZWQgaGFuZGxlIGluIHRo
ZSBXZWJDb250ZW50IHByb2Nlc3MuIEl0IHdpbGwgYmUgZGVzdHJveWVkIGluIHRoZSBVSVByb2Nl
c3MuCi0gICAgcGxhdGZvcm1EYXRhLm1fbm90U2VsZWN0ZWRCYWNraW5nU3RvcmUtPmxlYWtTaGFy
ZWRSZXNvdXJjZSgpOwotICAgIHBsYXRmb3JtRGF0YS5tX3NlbGVjdGVkQmFja2luZ1N0b3JlLT5s
ZWFrU2hhcmVkUmVzb3VyY2UoKTsKLSNlbmRpZgogfQogCiB2b2lkIFdlYlBvcHVwTWVudTo6aGlk
ZSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmlu
ZENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1MSwx
MCArMzUxLDYgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6Z2V0SW1hZ2VGb3JGaW5kTWF0YwogICAg
ICAgICByZXR1cm47CiAKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlkR2V0SW1hZ2VGb3JGaW5kTWF0Y2goaGFuZGxlLCBtYXRjaEluZGV4KSk7Ci0jaWYgVVNF
KERJUkVDVDJEKQotICAgIC8vIERvbid0IGRlc3Ryb3kgdGhlIHNoYXJlZCBoYW5kbGUgaW4gdGhl
IFdlYkNvbnRlbnQgcHJvY2Vzcy4gSXQgd2lsbCBiZSBkZXN0cm95ZWQgaW4gdGhlIFVJUHJvY2Vz
cy4KLSAgICBzZWxlY3Rpb25TbmFwc2hvdC0+bGVha1NoYXJlZFJlc291cmNlKCk7Ci0jZW5kaWYK
IH0KIAogdm9pZCBGaW5kQ29udHJvbGxlcjo6c2VsZWN0RmluZE1hdGNoKHVpbnQzMl90IG1hdGNo
SW5kZXgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9E
cmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdp
bmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE0ICs0
Myw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nl
dHRpbmdzLmg+CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHREaXJlY3QyRC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQuaD4KLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2VuZGlm
Ci0KLQogI2lmIFVTRShHTElCX0VWRU5UX0xPT1ApCiAjaW5jbHVkZSA8d3RmL2dsaWIvUnVuTG9v
cFNvdXJjZVByaW9yaXR5Lmg+CiAjZW5kaWYKQEAgLTg2MiwxMCArODU0LDYgQEAgdm9pZCBEcmF3
aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3M6OmRpcwogICAgICAgICB1cGRhdGVJbmZvLnVwZGF0
ZVJlY3RzLmFwcGVuZChyZWN0KTsKICAgICB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgYml0
bWFwLT5sZWFrU2hhcmVkUmVzb3VyY2UoKTsgLy8gSXQgd2lsbCBiZSBkZXN0cm95ZWQgaW4gdGhl
IFVJUHJvY2Vzcy4KLSNlbmRpZgotCiAgICAgbV93ZWJQYWdlLmRpZFVwZGF0ZVJlbmRlcmluZygp
OwogCiAgICAgLy8gTGF5b3V0IGNhbiB0cmlnZ2VyIG1vcmUgY2FsbHMgdG8gc2V0TmVlZHNEaXNw
bGF5IGFuZCB3ZSBkb24ndCB3YW50IHRvIHByb2Nlc3MgdGhlbQpJbmRleDogU291cmNlL1dlYktp
dExlZ2FjeS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjItMDEtMDcgIFNhbSBXZWluaWcg
IDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBEaXJlY3Qy
RAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0OTk5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0
Zm9ybUZUVy5jbWFrZTogUmVtb3ZlZC4KKwogMjAyMi0wMS0wNyAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGlu
ZyByMjg3Njk4LgpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9QbGF0Zm9ybUZUVy5jbWFrZQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L1BsYXRmb3JtRlRXLmNtYWtlCShyZXZp
c2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L1BsYXRmb3JtRlRXLmNtYWtlCShu
b25leGlzdGVudCkKQEAgLTEsNDM4ICswLDAgQEAKLWFkZF9kZWZpbml0aW9ucygtRFVTRV9ESVJF
Q1QyRD0xIC1EVVNFX0NVUkw9MSAtRFdFQktJVF9FWFBPUlRTPTEpCi1saXN0KEFQUEVORCBXZWJL
aXRMZWdhY3lfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgIiR7V0VCS0lUX0xJQlJB
UklFU19ESVJ9L2luY2x1ZGUiCi0pCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfU09VUkNFU19D
bGFzc2VzCi0gICAgd2luL1dlYkRvd25sb2FkQ1VSTC5jcHAKLSAgICB3aW4vV2ViVVJMQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VTZW5kZXJDVVJMLmNwcAotKQotbGlzdChBUFBFTkQgV2ViS2l0TGVn
YWN5X1BSSVZBVEVfTElCUkFSSUVTCi0gICAgT3BlblNTTDo6U1NMCi0gICAgRDNEMTEubGliCi0g
ICAgRHhnaS5saWIKLSAgICBtZnV1aWQubGliCi0gICAgc3RybWlpZHMubGliCi0pCi0KLWFkZF9j
dXN0b21fY29tbWFuZCgKLSAgICBPVVRQVVQgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VT
X0RJUn0vV2ViS2l0VmVyc2lvbi5oCi0gICAgTUFJTl9ERVBFTkRFTkNZICR7V0VCS0lUTEVHQUNZ
X0RJUn0vc2NyaXB0cy9nZW5lcmF0ZS13ZWJraXR2ZXJzaW9uLnBsCi0gICAgREVQRU5EUyAke1dF
QktJVExFR0FDWV9ESVJ9L21hYy9Db25maWd1cmF0aW9ucy9WZXJzaW9uLnhjY29uZmlnCi0gICAg
Q09NTUFORCAke1BFUkxfRVhFQ1VUQUJMRX0gJHtXRUJLSVRMRUdBQ1lfRElSfS9zY3JpcHRzL2dl
bmVyYXRlLXdlYmtpdHZlcnNpb24ucGwgLS1jb25maWcgJHtXRUJLSVRMRUdBQ1lfRElSfS9tYWMv
Q29uZmlndXJhdGlvbnMvVmVyc2lvbi54Y2NvbmZpZyAtLW91dHB1dERpciAke1dlYktpdExlZ2Fj
eV9ERVJJVkVEX1NPVVJDRVNfRElSfQotICAgIFZFUkJBVElNKQotbGlzdChBUFBFTkQgV2ViS2l0
TGVnYWN5X1NPVVJDRVMgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2ViS2l0
VmVyc2lvbi5oKQotCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfUFJJVkFURV9JTkNMVURFX0RJ
UkVDVE9SSUVTCi0gICAgIiR7Q01BS0VfQklOQVJZX0RJUn0vLi4vaW5jbHVkZS9wcml2YXRlIgot
ICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9Ly4uL2luY2x1ZGUvcHJpdmF0ZS9KYXZhU2NyaXB0Q29y
ZSIKLSAgICAiJHtDTUFLRV9CSU5BUllfRElSfS8uLi9pbmNsdWRlL3ByaXZhdGUvV2ViQ29yZSIK
LSAgICAiJHtXRUJLSVRMRUdBQ1lfRElSfS93aW4iCi0gICAgIiR7V0VCS0lUTEVHQUNZX0RJUn0v
d2luL1dlYkNvcmVTdXBwb3J0IgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNf
RElSfS9pbmNsdWRlIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9J
bnRlcmZhY2VzIgotKQotCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfSU5DTFVERVMKLSAgICB3
aW4vQ0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcuaAotICAgIHdpbi9DT01FbnVtVmFyaWFudC5oCi0g
ICAgd2luL0NPTVByb3BlcnR5QmFnLmgKLSAgICB3aW4vQ09NVmFyaWFudFNldHRlci5oCi0gICAg
d2luL0NvZGVBbmFseXNpc0NvbmZpZy5oCi0gICAgd2luL0RPTUNTU0NsYXNzZXMuaAotICAgIHdp
bi9ET01Db3JlQ2xhc3Nlcy5oCi0gICAgd2luL0RPTUV2ZW50c0NsYXNzZXMuaAotICAgIHdpbi9E
T01IVE1MQ2xhc3Nlcy5oCi0gICAgd2luL0RlZmF1bHREb3dubG9hZERlbGVnYXRlLmgKLSAgICB3
aW4vRGVmYXVsdFBvbGljeURlbGVnYXRlLmgKLSAgICB3aW4vRm9yRWFjaENvQ2xhc3MuaAotICAg
IHdpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmgKLSAgICB3aW4vTWFyc2hhbGxpbmdIZWxw
ZXJzLmgKLSAgICB3aW4vTWVtb3J5U3RyZWFtLmgKLSAgICB3aW4vUHJvZ0lETWFjcm9zLmgKLSAg
ICB3aW4vV2ViQWN0aW9uUHJvcGVydHlCYWcuaAotICAgIHdpbi9XZWJBcHBsaWNhdGlvbkNhY2hl
LmgKLSAgICB3aW4vV2ViQXJjaGl2ZS5oCi0gICAgd2luL1dlYkJhY2tGb3J3YXJkTGlzdC5oCi0g
ICAgd2luL1dlYkNhY2hlLmgKLSAgICB3aW4vV2ViQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEuaAot
ICAgIHdpbi9XZWJDb3JlU3RhdGlzdGljcy5oCi0gICAgd2luL1dlYkRhdGFTb3VyY2UuaAotICAg
IHdpbi9XZWJEYXRhYmFzZU1hbmFnZXIuaAotICAgIHdpbi9XZWJEb2N1bWVudExvYWRlci5oCi0g
ICAgd2luL1dlYkRvd25sb2FkLmgKLSAgICB3aW4vV2ViRHJvcFNvdXJjZS5oCi0gICAgd2luL1dl
YkVsZW1lbnRQcm9wZXJ0eUJhZy5oCi0gICAgd2luL1dlYkVycm9yLmgKLSAgICB3aW4vV2ViRnJh
bWUuaAotICAgIHdpbi9XZWJGcmFtZVBvbGljeUxpc3RlbmVyLmgKLSAgICB3aW4vV2ViR2VvbG9j
YXRpb25Qb2xpY3lMaXN0ZW5lci5oCi0gICAgd2luL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uaAot
ICAgIHdpbi9XZWJIVE1MUmVwcmVzZW50YXRpb24uaAotICAgIHdpbi9XZWJIaXN0b3J5LmgKLSAg
ICB3aW4vV2ViSGlzdG9yeUl0ZW0uaAotICAgIHdpbi9XZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmgK
LSAgICB3aW4vV2ViS2l0Q09NQVBJLmgKLSAgICB3aW4vV2ViS2l0Q2xhc3NGYWN0b3J5LmgKLSAg
ICB3aW4vV2ViS2l0RExMLmgKLSAgICB3aW4vV2ViS2l0R3JhcGhpY3MuaAotICAgIHdpbi9XZWJL
aXRMb2dnaW5nLmgKLSAgICB3aW4vV2ViS2l0U3RhdGlzdGljcy5oCi0gICAgd2luL1dlYktpdFN0
YXRpc3RpY3NQcml2YXRlLmgKLSAgICB3aW4vV2ViS2l0U3lzdGVtQml0cy5oCi0gICAgd2luL1dl
YkxvY2FsaXphYmxlU3RyaW5ncy5oCi0gICAgd2luL1dlYk11dGFibGVVUkxSZXF1ZXN0LmgKLSAg
ICB3aW4vV2ViTmF2aWdhdGlvbkRhdGEuaAotICAgIHdpbi9XZWJOb3RpZmljYXRpb24uaAotICAg
IHdpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIuaAotICAgIHdpbi9XZWJQcmVmZXJlbmNlS2V5c1By
aXZhdGUuaAotICAgIHdpbi9XZWJQcmVmZXJlbmNlcy5oCi0gICAgd2luL1dlYlJlc291cmNlLmgK
LSAgICB3aW4vV2ViU2NyaXB0T2JqZWN0LmgKLSAgICB3aW4vV2ViU2NyaXB0V29ybGQuaAotICAg
IHdpbi9XZWJTZWN1cml0eU9yaWdpbi5oCi0gICAgd2luL1dlYlNlcmlhbGl6ZWRKU1ZhbHVlLmgK
LSAgICB3aW4vV2ViVGV4dFJlbmRlcmVyLmgKLSAgICB3aW4vV2ViVVJMQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UuaAotICAgIHdpbi9XZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNlbmRlci5o
Ci0gICAgd2luL1dlYlVSTENyZWRlbnRpYWwuaAotICAgIHdpbi9XZWJVUkxQcm90ZWN0aW9uU3Bh
Y2UuaAotICAgIHdpbi9XZWJVUkxSZXNwb25zZS5oCi0gICAgd2luL1dlYlVzZXJDb250ZW50VVJM
UGF0dGVybi5oCi0gICAgd2luL1dlYlZpZXcuaAotICAgIHdpbi9XZWJXb3JrZXJzUHJpdmF0ZS5o
Ci0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VTX0NsYXNzZXMKLSAgICB3aW4v
QWNjZXNzaWJsZUJhc2UuY3BwCi0gICAgd2luL0FjY2Vzc2libGVEb2N1bWVudC5jcHAKLSAgICB3
aW4vQWNjZXNzaWJsZUltYWdlLmNwcAotICAgIHdpbi9BY2Nlc3NpYmxlVGV4dEltcGwuY3BwCi0g
ICAgd2luL0JhY2tGb3J3YXJkTGlzdC5jcHAKLSAgICB3aW4vQ0ZEaWN0aW9uYXJ5UHJvcGVydHlC
YWcuY3BwCi0gICAgd2luL0RPTUNTU0NsYXNzZXMuY3BwCi0gICAgd2luL0RPTUNvcmVDbGFzc2Vz
LmNwcAotICAgIHdpbi9ET01FdmVudHNDbGFzc2VzLmNwcAotICAgIHdpbi9ET01IVE1MQ2xhc3Nl
cy5jcHAKLSAgICB3aW4vRGVmYXVsdERvd25sb2FkRGVsZWdhdGUuY3BwCi0gICAgd2luL0RlZmF1
bHRQb2xpY3lEZWxlZ2F0ZS5jcHAKLSAgICB3aW4vRm9yRWFjaENvQ2xhc3MuY3BwCi0gICAgd2lu
L0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwCi0gICAgd2luL01hcnNoYWxsaW5nSGVscGVy
cy5jcHAKLSAgICB3aW4vTWVtb3J5U3RyZWFtLmNwcAotICAgIHdpbi9XZWJBY3Rpb25Qcm9wZXJ0
eUJhZy5jcHAKLSAgICB3aW4vV2ViQXBwbGljYXRpb25DYWNoZS5jcHAKLSAgICB3aW4vV2ViQXJj
aGl2ZS5jcHAKLSAgICB3aW4vV2ViQmFja0ZvcndhcmRMaXN0LmNwcAotICAgIHdpbi9XZWJDYWNo
ZS5jcHAKLSAgICB3aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCi0gICAgd2luL1dlYkRhdGFTb3Vy
Y2UuY3BwCi0gICAgd2luL1dlYkRhdGFiYXNlTWFuYWdlci5jcHAKLSAgICB3aW4vV2ViRG9jdW1l
bnRMb2FkZXIuY3BwCi0gICAgd2luL1dlYkRvd25sb2FkLmNwcAotICAgIHdpbi9XZWJEcm9wU291
cmNlLmNwcAotICAgIHdpbi9XZWJFbGVtZW50UHJvcGVydHlCYWcuY3BwCi0gICAgd2luL1dlYkVy
cm9yLmNwcAotICAgIHdpbi9XZWJGcmFtZS5jcHAKLSAgICB3aW4vV2ViRnJhbWVQb2xpY3lMaXN0
ZW5lci5jcHAKLSAgICB3aW4vV2ViR2VvbG9jYXRpb25Qb2xpY3lMaXN0ZW5lci5jcHAKLSAgICB3
aW4vV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5jcHAKLSAgICB3aW4vV2ViSFRNTFJlcHJlc2VudGF0
aW9uLmNwcAotICAgIHdpbi9XZWJIaXN0b3J5LmNwcAotICAgIHdpbi9XZWJIaXN0b3J5SXRlbS5j
cHAKLSAgICB3aW4vV2ViSW5zcGVjdG9yLmNwcAotICAgIHdpbi9XZWJKYXZhU2NyaXB0Q29sbGVj
dG9yLmNwcAotICAgIHdpbi9XZWJLaXRDT01BUEkuY3BwCi0gICAgd2luL1dlYktpdENsYXNzRmFj
dG9yeS5jcHAKLSAgICB3aW4vV2ViS2l0RExMLmNwcAotICAgIHdpbi9XZWJLaXRMb2dnaW5nLmNw
cAotICAgIHdpbi9XZWJLaXRNZXNzYWdlTG9vcC5jcHAKLSAgICB3aW4vV2ViS2l0U3RhdGlzdGlj
cy5jcHAKLSAgICB3aW4vV2ViS2l0U3lzdGVtQml0cy5jcHAKLSAgICB3aW4vV2ViTG9jYWxpemFi
bGVTdHJpbmdzLmNwcAotICAgIHdpbi9XZWJNdXRhYmxlVVJMUmVxdWVzdC5jcHAKLSAgICB3aW4v
V2ViTmF2aWdhdGlvbkRhdGEuY3BwCi0gICAgd2luL1dlYk5vZGVIaWdobGlnaHQuY3BwCi0gICAg
d2luL1dlYk5vdGlmaWNhdGlvbi5jcHAKLSAgICB3aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNw
cAotICAgIHdpbi9XZWJQcmVmZXJlbmNlcy5jcHAKLSAgICB3aW4vV2ViUmVzb3VyY2UuY3BwCi0g
ICAgd2luL1dlYlNjcmlwdE9iamVjdC5jcHAKLSAgICB3aW4vV2ViU2NyaXB0V29ybGQuY3BwCi0g
ICAgd2luL1dlYlNlY3VyaXR5T3JpZ2luLmNwcAotICAgIHdpbi9XZWJTZXJpYWxpemVkSlNWYWx1
ZS5jcHAKLSAgICB3aW4vV2ViVGV4dFJlbmRlcmVyLmNwcAotICAgIHdpbi9XZWJVUkxBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS5jcHAKLSAgICB3aW4vV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VTZW5kZXIuY3BwCi0gICAgd2luL1dlYlVSTENyZWRlbnRpYWwuY3BwCi0gICAgd2luL1dlYlVS
TFByb3RlY3Rpb25TcGFjZS5jcHAKLSAgICB3aW4vV2ViVVJMUmVzcG9uc2UuY3BwCi0gICAgd2lu
L1dlYlVzZXJDb250ZW50VVJMUGF0dGVybi5jcHAKLSAgICB3aW4vV2ViVmlldy5jcHAKLSAgICB3
aW4vV2ViV29ya2Vyc1ByaXZhdGUuY3BwCi0KLSAgICB3aW4vc3RvcmFnZS9XZWJEYXRhYmFzZVBy
b3ZpZGVyLmNwcAotKQotCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfU09VUkNFU19XZWJDb3Jl
U3VwcG9ydAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAotICAg
IHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAotICAgIHdpbi9XZWJDb3JlU3Vw
cG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
Q29udGV4dE1lbnVDbGllbnQuaAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJEZXNrdG9wTm90
aWZpY2F0aW9uc0RlbGVnYXRlLmNwcAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJEZXNrdG9w
Tm90aWZpY2F0aW9uc0RlbGVnYXRlLmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0Ns
aWVudC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCi0gICAgd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
LmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAK
LSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCi0gICAg
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmNwcAotICAgIHdpbi9XZWJD
b3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckNsaWVudC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVj
dG9yQ2xpZW50LmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yRGVsZWdhdGUu
Y3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckRlbGVnYXRlLmgKLSAgICB3
aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAotICAgIHdpbi9XZWJD
b3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAotICAgIHdpbi9XZWJDb3JlU3VwcG9y
dC9XZWJQbHVnaW5JbmZvUHJvdmlkZXIuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBs
dWdpbkluZm9Qcm92aWRlci5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5r
U3RvcmUuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUuaAot
KQotCi1pZiAoVVNFX0NGKQotICAgIGxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VTX0Ns
YXNzZXMKLSAgICAgICAgY2YvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Q0YuY3Bw
Ci0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X0xJQlJBUklFUwotICAgICAg
ICAke0NPUkVGT1VOREFUSU9OX0xJQlJBUll9Ci0gICAgKQotZW5kaWYgKCkKLQotaWYgKENPTVBJ
TEVSX0lTX0dDQ19PUl9DTEFORykKLSAgICBXRUJLSVRfQUREX1RBUkdFVF9DWFhfRkxBR1MoV2Vi
S2l0TGVnYWN5IC1Xbm8tb3ZlcmxvYWRlZC12aXJ0dWFsKQotZW5kaWYgKCkKLQotbGlzdChBUFBF
TkQgV2ViS2l0TGVnYWN5X1NPVVJDRVMgJHtXZWJLaXRMZWdhY3lfSU5DTFVERVN9ICR7V2ViS2l0
TGVnYWN5X1NPVVJDRVNfQ2xhc3Nlc30gJHtXZWJLaXRMZWdhY3lfU09VUkNFU19XZWJDb3JlU3Vw
cG9ydH0pCi0KLXNvdXJjZV9ncm91cChJbmNsdWRlcyBGSUxFUyAke1dlYktpdExlZ2FjeV9JTkNM
VURFU30pCi1zb3VyY2VfZ3JvdXAoQ2xhc3NlcyBGSUxFUyAke1dlYktpdExlZ2FjeV9TT1VSQ0VT
X0NsYXNzZXN9KQotc291cmNlX2dyb3VwKFdlYkNvcmVTdXBwb3J0IEZJTEVTICR7V2ViS2l0TGVn
YWN5X1NPVVJDRVNfV2ViQ29yZVN1cHBvcnR9KQotCi0jIEJ1aWxkIHRoZSBDT00gaW50ZXJmYWNl
OgotbWFjcm8oR0VORVJBVEVfSU5URVJGQUNFIF9pbmZpbGUgX2RlZmluZXMgX2RlcGVuZHMpCi0g
ICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfZmlsZXdlICR7X2luZmlsZX0gTkFNRV9XRSkKLSAg
ICBhZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgICAgIE9VVFBVVCAgJHtXZWJLaXRMZWdhY3lfREVS
SVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy8ke19maWxld2V9LmgKLSAgICAgICAgTUFJTl9E
RVBFTkRFTkNZICR7X2luZmlsZX0KLSAgICAgICAgREVQRU5EUyAke19kZXBlbmRzfQotICAgICAg
ICBDT01NQU5EIG1pZGwuZXhlIC9JICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vd2luL0lu
dGVyZmFjZXMiIC9JICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vd2luL0ludGVyZmFjZXMv
QWNjZXNzaWJsZTIiIC9JICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbmNs
dWRlIiAvSSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dpbiIgL1dYIC9jaGFyIHNpZ25l
ZCAvZW52IHdpbjMyIC90bGIgIiR7Q01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfS8ke19m
aWxld2V9LnRsYiIgL291dCAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50
ZXJmYWNlcyIgL2ggIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFj
ZXMvJHtfZmlsZXdlfS5oIiAvaWlkICIke19maWxld2V9X2kuYyIgJHtfZGVmaW5lc30gIiR7Q01B
S0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke19pbmZpbGV9IgotICAgICAgICBVU0VTX1RFUk1JTkFM
IFZFUkJBVElNKQotICAgIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcygke1dlYktpdExlZ2Fj
eV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzLyR7X2ZpbGV3ZX0uaCBQUk9QRVJUSUVT
IEdFTkVSQVRFRCBUUlVFKQotICAgIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcygke1dlYktp
dExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzLyR7X2ZpbGV3ZX1faS5jIFBS
T1BFUlRJRVMgR0VORVJBVEVEIFRSVUUpCi1lbmRtYWNybygpCi0KLXNldChNSURMX0RFRklORVMg
L0RcIFwiX19QUk9EVUNUSU9OX189MDFcIikKLQotc2V0KFdFQktJVExFR0FDWV9JRExfREVQRU5E
RU5DSUVTCi0gICAgd2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZUNvbXBhcmFibGUuaWRsCi0gICAg
d2luL0ludGVyZmFjZXMvRE9NQ1NTLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0RPTUNvcmUuaWRs
Ci0gICAgd2luL0ludGVyZmFjZXMvRE9NRXZlbnRzLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0RP
TUV4dGVuc2lvbnMuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvRE9NSFRNTC5pZGwKLSAgICB3aW4v
SW50ZXJmYWNlcy9ET01Qcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0RPTVJhbmdlLmlk
bAotICAgIHdpbi9JbnRlcmZhY2VzL0RPTVdpbmRvdy5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9J
R0VOX0RPTU9iamVjdC5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViQXJjaGl2ZS5pZGwKLSAg
ICB3aW4vSW50ZXJmYWNlcy9JV2ViQmFja0ZvcndhcmRMaXN0LmlkbAotICAgIHdpbi9JbnRlcmZh
Y2VzL0lXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lX
ZWJDYWNoZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViQ29yZVN0YXRpc3RpY3MuaWRsCi0g
ICAgd2luL0ludGVyZmFjZXMvSVdlYkRhdGFTb3VyY2UuaWRsCi0gICAgd2luL0ludGVyZmFjZXMv
SVdlYkRhdGFiYXNlTWFuYWdlci5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRGVza3RvcE5v
dGlmaWNhdGlvbnNEZWxlZ2F0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRG9jdW1lbnQu
aWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkRvd25sb2FkLmlkbAotICAgIHdpbi9JbnRlcmZh
Y2VzL0lXZWJFZGl0aW5nRGVsZWdhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkVtYmVk
ZGVkVmlldy5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRXJyb3IuaWRsCi0gICAgd2luL0lu
dGVyZmFjZXMvSVdlYkVycm9yUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRm9y
bURlbGVnYXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJGcmFtZS5pZGwKLSAgICB3aW4v
SW50ZXJmYWNlcy9JV2ViRnJhbWVMb2FkRGVsZWdhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMv
SVdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2Vi
RnJhbWVMb2FkRGVsZWdhdGVQcml2YXRlMi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRnJh
bWVQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJGcmFtZVZpZXcuaWRsCi0gICAg
d2luL0ludGVyZmFjZXMvSVdlYkdlb2xvY2F0aW9uUG9saWN5TGlzdGVuZXIuaWRsCi0gICAgd2lu
L0ludGVyZmFjZXMvSVdlYkdlb2xvY2F0aW9uUG9zaXRpb24uaWRsCi0gICAgd2luL0ludGVyZmFj
ZXMvSVdlYkdlb2xvY2F0aW9uUHJvdmlkZXIuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkhU
TUxSZXByZXNlbnRhdGlvbi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViSFRUUFVSTFJlc3Bv
bnNlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJIaXN0b3J5LmlkbAotICAgIHdpbi9JbnRl
cmZhY2VzL0lXZWJIaXN0b3J5RGVsZWdhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkhp
c3RvcnlJdGVtLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJIaXN0b3J5SXRlbVByaXZhdGUu
aWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkhpc3RvcnlQcml2YXRlLmlkbAotICAgIHdpbi9J
bnRlcmZhY2VzL0lXZWJJbnNwZWN0b3IuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkluc3Bl
Y3RvclByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkphdmFTY3JpcHRDb2xsZWN0
b3IuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYktpdFN0YXRpc3RpY3MuaWRsCi0gICAgd2lu
L0ludGVyZmFjZXMvSVdlYk11dGFibGVVUkxSZXF1ZXN0LmlkbAotICAgIHdpbi9JbnRlcmZhY2Vz
L0lXZWJNdXRhYmxlVVJMUmVxdWVzdFByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdl
Yk5hdmlnYXRpb25EYXRhLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJOb3RpZmljYXRpb24u
aWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYk5vdGlmaWNhdGlvbkNlbnRlci5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9JV2ViTm90aWZpY2F0aW9uT2JzZXJ2ZXIuaWRsCi0gICAgd2luL0ludGVy
ZmFjZXMvSVdlYlBvbGljeURlbGVnYXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJQb2xp
Y3lEZWxlZ2F0ZVByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlByZWZlcmVuY2Vz
LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaWRsCi0gICAg
d2luL0ludGVyZmFjZXMvSVdlYlJlc291cmNlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJS
ZXNvdXJjZUxvYWREZWxlZ2F0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViUmVzb3VyY2VM
b2FkRGVsZWdhdGVQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJSZXNvdXJjZUxv
YWREZWxlZ2F0ZVByaXZhdGUyLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJTY3JpcHRPYmpl
Y3QuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlNjcmlwdFdvcmxkLmlkbAotICAgIHdpbi9J
bnRlcmZhY2VzL0lXZWJTZWN1cml0eU9yaWdpbi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2Vi
U2VyaWFsaXplZEpTVmFsdWUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlNlcmlhbGl6ZWRK
U1ZhbHVlUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVGV4dFJlbmRlcmVyLmlk
bAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJVSURlbGVnYXRlLmlkbAotICAgIHdpbi9JbnRlcmZh
Y2VzL0lXZWJVSURlbGVnYXRlMi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVUlEZWxlZ2F0
ZVByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlVSTEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJVUkxSZXF1ZXN0LmlkbAotICAgIHdp
bi9JbnRlcmZhY2VzL0lXZWJVUkxSZXNwb25zZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2Vi
VVJMUmVzcG9uc2VQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJVbmRvTWFuYWdl
ci5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVW5kb1RhcmdldC5pZGwKLSAgICB3aW4vSW50
ZXJmYWNlcy9JV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmlkbAotICAgIHdpbi9JbnRlcmZhY2Vz
L0lXZWJWaWV3LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJWaWV3UHJpdmF0ZS5pZGwKLSAg
ICB3aW4vSW50ZXJmYWNlcy9JV2ViV29ya2Vyc1ByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFj
ZXMvSmF2YVNjcmlwdENvcmVBUElUeXBlcy5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9XZWJLaXQu
aWRsCi0gICAgd2luL0ludGVyZmFjZXMvV2ViU2Nyb2xsYmFyVHlwZXMuaWRsCi0KLSAgICB3aW4v
SW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlMi5pZGwKLSAgICB3aW4vSW50ZXJmYWNl
cy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlMl8yLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0FjY2Vz
c2libGUyL0FjY2Vzc2libGVBcHBsaWNhdGlvbi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9BY2Nl
c3NpYmxlMi9BY2Nlc3NpYmxlRWRpdGFibGVUZXh0LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0Fj
Y2Vzc2libGUyL0FjY2Vzc2libGVSZWxhdGlvbi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9BY2Nl
c3NpYmxlMi9BY2Nlc3NpYmxlU3RhdGVzLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2li
bGUyL0FjY2Vzc2libGVUZXh0LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0Fj
Y2Vzc2libGVUZXh0Mi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9JQTJDb21t
b25UeXBlcy5pZGwKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vaW5j
bHVkZS9hdXRvdmVyc2lvbi5oIgotKQotCi1hZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgT1VUUFVU
ICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L2luY2x1ZGUvYXV0b3ZlcnNpb24u
aAotICAgIFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0VfU09VUkNFX0RJUn0KLSAgICBDT01NQU5E
ICR7UEVSTF9FWEVDVVRBQkxFfSAke1dFQktJVF9MSUJSQVJJRVNfRElSfS90b29scy9zY3JpcHRz
L2F1dG8tdmVyc2lvbi5wbCAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfQotICAg
IFZFUkJBVElNKQotCi1HRU5FUkFURV9JTlRFUkZBQ0Uod2luL0ludGVyZmFjZXMvV2ViS2l0Lmlk
bCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLUdF
TkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlQXBw
bGljYXRpb24uaWRsICR7TUlETF9ERUZJTkVTfSAiJHtXRUJLSVRMRUdBQ1lfSURMX0RFUEVOREVO
Q0lFU30iKQotR0VORVJBVEVfSU5URVJGQUNFKHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0Fj
Y2Vzc2libGUyLmlkbCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBFTkRF
TkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9B
Y2Nlc3NpYmxlMl8yLmlkbCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBF
TkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxl
Mi9BY2Nlc3NpYmxlUmVsYXRpb24uaWRsICR7TUlETF9ERUZJTkVTfSAiJHtXRUJLSVRMRUdBQ1lf
SURMX0RFUEVOREVOQ0lFU30iKQotR0VORVJBVEVfSU5URVJGQUNFKHdpbi9JbnRlcmZhY2VzL0Fj
Y2Vzc2libGUyL0FjY2Vzc2libGVTdGF0ZXMuaWRsICR7TUlETF9ERUZJTkVTfSAiJHtXRUJLSVRM
RUdBQ1lfSURMX0RFUEVOREVOQ0lFU30iKQotR0VORVJBVEVfSU5URVJGQUNFKHdpbi9JbnRlcmZh
Y2VzL0FjY2Vzc2libGUyL0lBMkNvbW1vblR5cGVzLmlkbCAke01JRExfREVGSU5FU30gIiR7V0VC
S0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50
ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlRWRpdGFibGVUZXh0LmlkbCAke01JRExfREVG
SU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVS
RkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlVGV4dC5pZGwgJHtNSURM
X0RFRklORVN9ICIke1dFQktJVExFR0FDWV9JRExfREVQRU5ERU5DSUVTfSIpCi1HRU5FUkFURV9J
TlRFUkZBQ0Uod2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIvQWNjZXNzaWJsZVRleHQyLmlkbCAk
e01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLQotYWRk
X2xpYnJhcnkoV2ViS2l0TGVnYWN5R1VJRCBTVEFUSUMKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVS
SVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9XZWJLaXQuaCIKLSAgICAiJHtXZWJLaXRMZWdh
Y3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlQXBwbGljYXRpb24u
aCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9B
Y2Nlc3NpYmxlMi5oIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9J
bnRlcmZhY2VzL0FjY2Vzc2libGUyXzIuaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9T
T1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlUmVsYXRpb24uaCIKLSAgICAiJHtXZWJL
aXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlU3RhdGVz
LmgiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMv
SUEyQ29tbW9uVHlwZXMuaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJ
Un0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlRWRpdGFibGVUZXh0LmgiCi0gICAgIiR7V2ViS2l0TGVn
YWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZVRleHQuaCIKLSAg
ICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3Np
YmxlVGV4dDIuaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50
ZXJmYWNlcy9XZWJLaXRfaS5jIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNf
RElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVBcHBsaWNhdGlvbl9pLmMiCi0gICAgIiR7V2ViS2l0
TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZTJfaS5jIgot
ICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vz
c2libGUyXzJfaS5jIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9J
bnRlcmZhY2VzL0FjY2Vzc2libGVSZWxhdGlvbl9pLmMiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RF
UklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZUVkaXRhYmxlVGV4dF9pLmMi
Ci0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNj
ZXNzaWJsZVRleHRfaS5jIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElS
fS9JbnRlcmZhY2VzL0FjY2Vzc2libGVUZXh0Ml9pLmMiCi0pCi1zZXRfdGFyZ2V0X3Byb3BlcnRp
ZXMoV2ViS2l0TGVnYWN5R1VJRCBQUk9QRVJUSUVTIE9VVFBVVF9OQU1FIFdlYktpdEdVSUQke0RF
QlVHX1NVRkZJWH0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9QUklWQVRFX0xJQlJBUklF
UwotICAgIENvbWN0bDMyCi0gICAgQ29tc3VwcAotICAgIENyeXB0MzIKLSAgICBEMmQxCi0gICAg
RHdyaXRlCi0gICAgRHhndWlkCi0gICAgSXBobHBhcGkKLSAgICBQc2FwaQotICAgIFJwY3J0NAot
ICAgIFNobHdhcGkKLSAgICBVc3AxMAotICAgIFZlcnNpb24KLSAgICBXZWJLaXRHVUlEJHtERUJV
R19TVUZGSVh9Ci0gICAgV2luZG93c0NvZGVjcwotICAgIFdpbm1tCi0pCi0KLXNldChDTUFLRV9T
SEFSRURfTElOS0VSX0ZMQUdTICIke0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1N9IC9TVUJTWVNU
RU06V0lORE9XUyIpCi1zZXQoQ01BS0VfRVhFX0xJTktFUl9GTEFHUyAiJHtDTUFLRV9FWEVfTElO
S0VSX0ZMQUdTfSAvU1VCU1lTVEVNOldJTkRPV1MiKQotCi0jIFdlIG5lZWQgdGhlIHdlYmtpdCBs
aWJyYXJpZXMgdG8gY29tZSBiZWZvcmUgdGhlIHN5c3RlbSBkZWZhdWx0IGxpYnJhcmllcyB0byBw
cmV2ZW50IHN5bWJvbCBjb25mbGljdHMgd2l0aCB1dWlkLmxpYi4KLSMgVG8gZG8gdGhpcyB3ZSBh
ZGQgc3lzdGVtIGRlZmF1bHQgbGlicyBhcyB3ZWJraXQgbGlicyBhbmQgemVybyBvdXQgc3lzdGVt
IGRlZmF1bHQgbGlicy4KLXN0cmluZyhSRVBMQUNFICIgIiAiXDsiIENYWF9MSUJTICR7Q01BS0Vf
Q1hYX1NUQU5EQVJEX0xJQlJBUklFU30pCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfTElCUkFS
SUVTICR7Q1hYX0xJQlN9KQotc2V0KENNQUtFX0NYWF9TVEFOREFSRF9MSUJSQVJJRVMgIiIpCi0K
LXNldChDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTICIke0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxB
R1N9ICR7TVNWQ19SVU5USU1FX0xJTktFUl9GTEFHU30iKQotCi0jIElmIHRoaXMgZGlyZWN0b3J5
IGlzbid0IGNyZWF0ZWQgYmVmb3JlIG1pZGwgcnVucyBhbmQgYXR0ZW1wdHMgdG8gb3V0cHV0IFdl
YktpdC50bGIsCi0jIEl0IGZhaWxzIHdpdGggYW4gdW51c3VhbCBlcnJvciAtIG1pZGwgZmFpbGVk
IC0gZmFpbGVkIHRvIHNhdmUgYWxsIGNoYW5nZXMKLWZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtDTUFL
RV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9KQotZmlsZShNQUtFX0RJUkVDVE9SWSAke1dlYktp
dExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzKQotCi1zZXQoV2ViS2l0TGVn
YWN5X1BVQkxJQ19GUkFNRVdPUktfSEVBREVSUwotICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURf
U09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZTIuaAotICAgICR7V2ViS2l0TGVnYWN5
X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZTJfMi5oCi0gICAgJHtX
ZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlQXBw
bGljYXRpb24uaAotICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVy
ZmFjZXMvQWNjZXNzaWJsZUVkaXRhYmxlVGV4dC5oCi0gICAgJHtXZWJLaXRMZWdhY3lfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlUmVsYXRpb24uaAotICAgICR7V2Vi
S2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZVN0YXRl
cy5oCi0gICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9B
Y2Nlc3NpYmxlVGV4dC5oCi0gICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0v
SW50ZXJmYWNlcy9BY2Nlc3NpYmxlVGV4dDIuaAotICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURf
U09VUkNFU19ESVJ9L0ludGVyZmFjZXMvSUEyQ29tbW9uVHlwZXMuaAotICAgICR7V2ViS2l0TGVn
YWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvV2ViS2l0LmgKLQotICAgIHdpbi9B
Y2Nlc3NpYmxlQmFzZS5oCi0gICAgd2luL0FjY2Vzc2libGVEb2N1bWVudC5oCi0gICAgd2luL0NG
RGljdGlvbmFyeVByb3BlcnR5QmFnLmgKLSAgICB3aW4vV2ViRGF0YVNvdXJjZS5oCi0gICAgd2lu
L1dlYkZyYW1lLmgKLSAgICB3aW4vV2ViS2l0Q09NQVBJLmgKLSkKLQotV0VCS0lUX01BS0VfRk9S
V0FSRElOR19IRUFERVJTKFdlYktpdExlZ2FjeUdVSUQKLSAgICBUQVJHRVRfTkFNRSBXZWJLaXRM
ZWdhY3lGcmFtZXdvcmtIZWFkZXJzCi0gICAgREVTVElOQVRJT04gJHtXZWJLaXRMZWdhY3lfRlJB
TUVXT1JLX0hFQURFUlNfRElSfS9XZWJLaXRMZWdhY3kKLSAgICBGSUxFUyAke1dlYktpdExlZ2Fj
eV9QVUJMSUNfRlJBTUVXT1JLX0hFQURFUlN9Ci0gICAgRkxBVFRFTkVECi0pCi0KLXNldChXZWJL
aXRMZWdhY3lfT1VUUFVUX05BTUUKLSAgICBXZWJLaXQke0RFQlVHX1NVRkZJWH0KLSkKSW5kZXg6
IFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBA
CisyMDIyLTAxLTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW1vdmUgc3VwcG9ydCBmb3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpkZWxl
dGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViVmlldzo6ZW5zdXJlQmFja2luZ1N0b3JlKToK
KyAgICAgICAgKFdlYlZpZXc6OnNjcm9sbEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJWaWV3
OjpzaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJWaWV3Ojp1cGRhdGVCYWNraW5nU3RvcmUpOgor
ICAgICAgICAoV2ViVmlldzo6cGFpbnQpOgorICAgICAgICAoV2ViVmlldzo6cGFpbnRJbnRvQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKFdlYlZpZXc6OldlYlZpZXdXbmRQcm9jKToKKyAgICAgICAg
KFdlYlZpZXc6Om5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJWaWV3Ojpw
YWludFdpdGhEaXJlY3QyRCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViVmlldy5oOgorCiAyMDIy
LTAxLTA2ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAgICAgICAgSGF2
ZSBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCBhbmQgcmVsYXRlZCBuZXR3b3JraW5nIGFjdG9ycyB1
c2UgU2hhcmVkQnVmZmVyLgpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAJKHJl
dmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDksMTAgKzIwOSw2IEBACiAjaW5jbHVkZSAiQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQuaCIKICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaD4KLSNlbmRpZgotCiAjaWYgRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKQogI2luY2x1ZGUgPFdlYkNvcmUvRnVsbFNjcmVlbkNvbnRyb2xs
ZXIuaD4KICNlbmRpZgpAQCAtODU1LDExICs4NTEsNiBAQCB2b2lkIFdlYlZpZXc6OmRlbGV0ZUJh
Y2tpbmdTdG9yZSgpCiAgICAgICAgIG1fZGVsZXRlQmFja2luZ1N0b3JlVGltZXJBY3RpdmUgPSBm
YWxzZTsKICAgICB9CiAgICAgbV9iYWNraW5nU3RvcmVCaXRtYXAgPSBudWxscHRyOwotI2lmIFVT
RShESVJFQ1QyRCkKLSAgICBtX2JhY2tpbmdTdG9yZUQyREJpdG1hcCA9IG51bGxwdHI7Ci0gICAg
bV9iYWNraW5nU3RvcmVHZGlJbnRlcm9wID0gbnVsbHB0cjsKLSAgICBtX2JhY2tpbmdTdG9yZVJl
bmRlclRhcmdldCA9IG51bGxwdHI7Ci0jZW5kaWYKICAgICBtX2JhY2tpbmdTdG9yZURpcnR5UmVn
aW9uID0gbnVsbHB0cjsKICAgICBtX2JhY2tpbmdTdG9yZVNpemUuY3ggPSBtX2JhY2tpbmdTdG9y
ZVNpemUuY3kgPSAwOwogfQpAQCAtODczLDIwICs4NjQsNiBAQCBib29sIFdlYlZpZXc6OmVuc3Vy
ZUJhY2tpbmdTdG9yZSgpCiAgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwICYmICh3aWR0
aCAhPSBtX2JhY2tpbmdTdG9yZVNpemUuY3ggfHwgaGVpZ2h0ICE9IG1fYmFja2luZ1N0b3JlU2l6
ZS5jeSkpIHsKICAgICAgICAgZGVsZXRlQmFja2luZ1N0b3JlKCk7CiAKLSNpZiBVU0UoRElSRUNU
MkQpCi0gICAgICAgIGF1dG8gYml0bWFwU2l6ZSA9IEQyRDE6OlNpemVGKHdpZHRoLCBoZWlnaHQp
OwotICAgICAgICBhdXRvIHBpeGVsU2l6ZSA9IEQyRDE6OlNpemVVKHdpZHRoLCBoZWlnaHQpOwot
Ci0gICAgICAgIGlmICghbV9yZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgICAgIC8vIENyZWF0ZSBh
IERpcmVjdDJEIHJlbmRlciB0YXJnZXQuCi0gICAgICAgICAgICBhdXRvIHJlbmRlclRhcmdldFBy
b3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAgICBy
ZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLnVzYWdlID0gRDJEMV9SRU5ERVJfVEFSR0VUX1VTQUdFX0dE
SV9DT01QQVRJQkxFOwotICAgICAgICAgICAgYXV0byBod25kUmVuZGVyVGFyZ2V0UHJvcGVydGll
cyA9IEQyRDE6Okh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKG1fdmlld1dpbmRvdywgcGl4ZWxT
aXplKTsKLSAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZh
Y3RvcnkoKS0+Q3JlYXRlSHduZFJlbmRlclRhcmdldCgmcmVuZGVyVGFyZ2V0UHJvcGVydGllcywg
Jmh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLCAmbV9yZW5kZXJUYXJnZXQpOwotICAgICAgICAg
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotI2VuZGlmCiAgICAgICAgIG1fYmFja2luZ1N0b3JlU2l6ZS5jeCA9IHdpZHRoOwog
ICAgICAgICBtX2JhY2tpbmdTdG9yZVNpemUuY3kgPSBoZWlnaHQ7CiAgICAgICAgIEJpdG1hcElu
Zm8gYml0bWFwSW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZUJvdHRvbVVwKEludFNpemUobV9iYWNr
aW5nU3RvcmVTaXplKSk7CkBAIC04OTQsMTYgKzg3MSw2IEBAIGJvb2wgV2ViVmlldzo6ZW5zdXJl
QmFja2luZ1N0b3JlKCkKICAgICAgICAgdm9pZCogcGl4ZWxzID0gTlVMTDsKICAgICAgICAgbV9i
YWNraW5nU3RvcmVCaXRtYXAgPSBTaGFyZWRHRElPYmplY3Q8SEJJVE1BUD46OmNyZWF0ZShhZG9w
dEdESU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24oMCwgJmJpdG1hcEluZm8sIERJQl9SR0JfQ09M
T1JTLCAmcGl4ZWxzLCAwLCAwKSkpOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgICAgICBIUkVT
VUxUIGhyID0gbV9yZW5kZXJUYXJnZXQtPkNyZWF0ZUNvbXBhdGlibGVSZW5kZXJUYXJnZXQoJmJp
dG1hcFNpemUsICZwaXhlbFNpemUsIG51bGxwdHIsIEQyRDFfQ09NUEFUSUJMRV9SRU5ERVJfVEFS
R0VUX09QVElPTlNfR0RJX0NPTVBBVElCTEUsICZtX2JhY2tpbmdTdG9yZVJlbmRlclRhcmdldCk7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgICAgIGhyID0g
bV9iYWNraW5nU3RvcmVSZW5kZXJUYXJnZXQtPkdldEJpdG1hcCgmbV9iYWNraW5nU3RvcmVEMkRC
aXRtYXApOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgICAg
ICBociA9IG1fYmFja2luZ1N0b3JlUmVuZGVyVGFyZ2V0LT5RdWVyeUludGVyZmFjZShfX3V1aWRv
ZihJRDJEMUdkaUludGVyb3BSZW5kZXJUYXJnZXQpLCAodm9pZCoqKSZtX2JhY2tpbmdTdG9yZUdk
aUludGVyb3ApOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSNlbmRp
ZgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTk3OCwxNiArOTQ1LDYgQEAgdm9p
ZCBXZWJWaWV3OjpzY3JvbGxCYWNraW5nU3RvcmUoRnJhbWVWaQogICAgIEZsb2F0UmVjdCBjbGlw
UmVjdChsb2dpY2FsQ2xpcFJlY3QpOwogICAgIGNsaXBSZWN0LnNjYWxlKHNjYWxlRmFjdG9yKTsK
IAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBSRUNUIHNjcm9sbFJlY3RXaW4oc2Nyb2xsVmlld1Jl
Y3QpOwotICAgIFJFQ1QgY2xpcFJlY3RXaW4oZW5jbG9zaW5nSW50UmVjdChjbGlwUmVjdCkpOwot
ICAgIFJFQ1QgdXBkYXRlUmVjdDsKLSAgICA6OlNjcm9sbFdpbmRvd0V4KG1fdmlld1dpbmRvdywg
ZHgsIGR5LCAmc2Nyb2xsUmVjdFdpbiwgJmNsaXBSZWN0V2luLCBudWxscHRyLCAmdXBkYXRlUmVj
dCwgMCk7Ci0gICAgOjpJbnZhbGlkYXRlUmVjdChtX3ZpZXdXaW5kb3csICZ1cGRhdGVSZWN0LCBG
QUxTRSk7Ci0KLSAgICBpZiAobV91aURlbGVnYXRlUHJpdmF0ZSkKLSAgICAgICAgbV91aURlbGVn
YXRlUHJpdmF0ZS0+d2ViVmlld1Njcm9sbGVkKHRoaXMpOwotI2Vsc2UKICAgICBpZiAoaXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBk
b2luZyBzb21ldGhpbmcgc21hcnRlciBoZXJlLCBsaWtlIG1vdmluZyB0aWxlcyBhcm91bmQgYW5k
IHBhaW50aW5nCiAgICAgICAgIC8vIGFueSBuZXdseS1leHBvc2VkIHRpbGVzLiA8aHR0cDovL3dl
YmtpdC5vcmcvYi81MjcxND4KQEAgLTEwMzksNyArOTk2LDYgQEAgdm9pZCBXZWJWaWV3OjpzY3Jv
bGxCYWNraW5nU3RvcmUoRnJhbWVWaQogCiAgICAgLy8gQ2xlYW4gdXAuCiAgICAgOjpTZWxlY3RP
YmplY3QoYml0bWFwREMuZ2V0KCksIG9sZEJpdG1hcCk7Ci0jZW5kaWYgLy8gVVNFKERJUkVDVDJE
KQogfQogCiB2b2lkIFdlYlZpZXc6OnNpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmIG5ld1NpemUp
CkBAIC0xMDY3LDIwICsxMDIzLDYgQEAgdm9pZCBXZWJWaWV3OjpzaXplQ2hhbmdlZChjb25zdCBJ
bnRTaXplJgogICAgIGlmIChtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KQogICAgICAg
ICBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5yZXNpemVSb290TGF5ZXIobmV3U2l6
ZSk7CiAjZW5kaWYKLQotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBpZiAobV9yZW5kZXJUYXJnZXQp
IHsKLSAgICAgICAgbV9yZW5kZXJUYXJnZXQtPlJlc2l6ZShuZXdTaXplKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBhIERpcmVjdDJEIHJlbmRlciB0YXJnZXQuCi0g
ICAgYXV0byByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gRDJEMTo6UmVuZGVyVGFyZ2V0UHJvcGVy
dGllcygpOwotICAgIHJlbmRlclRhcmdldFByb3BlcnRpZXMudXNhZ2UgPSBEMkQxX1JFTkRFUl9U
QVJHRVRfVVNBR0VfR0RJX0NPTVBBVElCTEU7Ci0gICAgYXV0byBod25kUmVuZGVyVGFyZ2V0UHJv
cGVydGllcyA9IEQyRDE6Okh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKG1fdmlld1dpbmRvdywg
bmV3U2l6ZSwgRDJEMV9QUkVTRU5UX09QVElPTlNfSU1NRURJQVRFTFkpOwotICAgIEhSRVNVTFQg
aHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlSHduZFJlbmRlclRh
cmdldCgmcmVuZGVyVGFyZ2V0UHJvcGVydGllcywgJmh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVz
LCAmbV9yZW5kZXJUYXJnZXQpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLSNlbmRpZgog
fQogCiBib29sIFdlYlZpZXc6OmRwaUNoYW5nZWQoZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIG5ld1NpemUpCkBAIC0xMTQxLDEzICsxMDgzLDYgQEAgdm9pZCBXZWJWaWV3Ojp1cGRhdGVC
YWNraW5nU3RvcmUoRnJhbWVWaQogCiAgICAgTE9DQUxfR0RJX0NPVU5URVIoMCwgX19GVU5DVElP
Tl9fKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlR2RpSW50
ZXJvcCkgewotICAgICAgICBIUkVTVUxUIGhyID0gbV9iYWNraW5nU3RvcmVSZW5kZXJUYXJnZXQt
PlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEMkQxR2RpSW50ZXJvcFJlbmRlclRhcmdldCksICh2
b2lkKiopJm1fYmFja2luZ1N0b3JlR2RpSW50ZXJvcCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotICAgIH0KLSNlbmRpZgotCiAgICAgR0RJT2JqZWN0PEhEQz4gYml0
bWFwRENPYmplY3Q7CiAKICAgICBIREMgYml0bWFwREMgPSBkYzsKQEAgLTExNTgsMTAgKzEwOTMs
NiBAQCB2b2lkIFdlYlZpZXc6OnVwZGF0ZUJhY2tpbmdTdG9yZShGcmFtZVZpCiAgICAgICAgIGJp
dG1hcERDID0gYml0bWFwRENPYmplY3QuZ2V0KCk7CiAgICAgICAgIG9sZEJpdG1hcCA9IDo6U2Vs
ZWN0T2JqZWN0KGJpdG1hcERDLCBtX2JhY2tpbmdTdG9yZUJpdG1hcC0+Z2V0KCkpOwogICAgICAg
ICBBU1NFUlQob2xkQml0bWFwKTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIEhSRVNVTFQg
aHIgPSBtX2JhY2tpbmdTdG9yZUdkaUludGVyb3AtPkdldERDKEQyRDFfRENfSU5JVElBTElaRV9N
T0RFX0NPUFksICZiaXRtYXBEQyk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotI2VuZGlmCiAgICAgfQogCiAgICAgaWYgKG1fYmFja2luZ1N0b3JlQml0bWFwICYmICht
X2JhY2tpbmdTdG9yZURpcnR5UmVnaW9uIHx8IGJhY2tpbmdTdG9yZUNvbXBsZXRlbHlEaXJ0eSkp
IHsKQEAgLTExODUsMTIgKzExMTYsOCBAQCB2b2lkIFdlYlZpZXc6OnVwZGF0ZUJhY2tpbmdTdG9y
ZShGcmFtZVZpCiAgICAgICAgIG1fYmFja2luZ1N0b3JlRGlydHlSZWdpb24gPSBudWxscHRyOwog
ICAgIH0KIAotICAgIGlmICghZGMpIHsKKyAgICBpZiAoIWRjKQogICAgICAgICA6OlNlbGVjdE9i
amVjdChiaXRtYXBEQywgb2xkQml0bWFwKTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIG1f
YmFja2luZ1N0b3JlR2RpSW50ZXJvcC0+UmVsZWFzZURDKG51bGxwdHIpOwotI2VuZGlmCi0gICAg
fQogCiAgICAgR2RpRmx1c2goKTsKIApAQCAtMTIyNSw2OSArMTE1Miw2IEBAIHZvaWQgV2ViVmll
dzo6cGVyZm9ybUxheWVyZWRXaW5kb3dVcGRhdGUKICAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNl
OwogfQogCi12b2lkIFdlYlZpZXc6OnBhaW50V2l0aERpcmVjdDJEKCkKLXsKLSNpZiBVU0UoRElS
RUNUMkQpCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUobV9tYWluRnJhbWUpOwotICAgIGlm
ICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBjb3JlRnJhbWUtPnZpZXcoKTsKLSAgICBmcmFtZVZpZXctPnVwZGF0ZUxheW91dEFuZFN0eWxl
SWZOZWVkZWRSZWN1cnNpdmUoKTsKLQotICAgIGlmICghbV9yZW5kZXJUYXJnZXQpIHsKLSAgICAg
ICAgLy8gQ3JlYXRlIGEgRGlyZWN0MkQgcmVuZGVyIHRhcmdldC4KLSAgICAgICAgYXV0byByZW5k
ZXJUYXJnZXRQcm9wZXJ0aWVzID0gRDJEMTo6UmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwotICAg
ICAgICByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLnVzYWdlID0gRDJEMV9SRU5ERVJfVEFSR0VUX1VT
QUdFX0dESV9DT01QQVRJQkxFOwotCi0gICAgICAgIFJFQ1QgcmVjdDsKLSAgICAgICAgOjpHZXRD
bGllbnRSZWN0KG1fdmlld1dpbmRvdywgJnJlY3QpOwotCi0gICAgICAgIEludFJlY3QgY2xpZW50
UmVjdChyZWN0KTsKLQotICAgICAgICBhdXRvIHBpeGVsU2l6ZSA9IEQyRDE6OlNpemVVKGNsaWVu
dFJlY3Qud2lkdGgoKSwgY2xpZW50UmVjdC5oZWlnaHQoKSk7Ci0KLSAgICAgICAgYXV0byBod25k
UmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IEQyRDE6Okh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVz
KG1fdmlld1dpbmRvdywgcGl4ZWxTaXplLCBEMkQxX1BSRVNFTlRfT1BUSU9OU19JTU1FRElBVEVM
WSk7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3Rvcnko
KS0+Q3JlYXRlSHduZFJlbmRlclRhcmdldCgmcmVuZGVyVGFyZ2V0UHJvcGVydGllcywgJmh3bmRS
ZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLCAmbV9yZW5kZXJUYXJnZXQpOwotICAgICAgICBpZiAoIVNV
Q0NFRURFRChocikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUkVDVCBjbGll
bnRSZWN0ID0ge307Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgcGxhdGZvcm1Db250ZXh0
KG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHRXaW4gZ2MoJnBsYXRm
b3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6
R1BVTWVtb3J5KTsKLQotICAgIHsKLSAgICAgICAgbV9yZW5kZXJUYXJnZXQtPlNldFRhZ3MoV0VC
S0lUX0RSQVdJTkcsIF9fTElORV9fKTsKLSAgICAgICAgbV9yZW5kZXJUYXJnZXQtPkNsZWFyKCk7
Ci0KLSAgICAgICAgLy8gRGlyZWN0MkQgaG9ub3JzIHRoZSBzY2FsZSBmYWN0b3IgbmF0aXZlbHku
Ci0gICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZjsKLSAgICAgICAgZmxvYXQgaW52ZXJz
ZVNjYWxlRmFjdG9yID0gMS4wZiAvIHNjYWxlRmFjdG9yOwotCi0gICAgICAgIEdldENsaWVudFJl
Y3QobV92aWV3V2luZG93LCAmY2xpZW50UmVjdCk7Ci0KLSAgICAgICAgSW50UmVjdCBkaXJ0eVJl
Y3RQaXhlbHMoMCwgMCwgY2xpZW50UmVjdC5yaWdodCwgY2xpZW50UmVjdC5ib3R0b20pOwotICAg
ICAgICBGbG9hdFJlY3QgbG9naWNhbERpcnR5UmVjdEZsb2F0ID0gZGlydHlSZWN0UGl4ZWxzOwot
ICAgICAgICBsb2dpY2FsRGlydHlSZWN0RmxvYXQuc2NhbGUoaW52ZXJzZVNjYWxlRmFjdG9yKTsK
LSAgICAgICAgSW50UmVjdCBsb2dpY2FsRGlydHlSZWN0KGVuY2xvc2luZ0ludFJlY3QobG9naWNh
bERpcnR5UmVjdEZsb2F0KSk7Ci0KLSAgICAgICAgaWYgKGZyYW1lVmlldyAmJiBmcmFtZVZpZXct
PmZyYW1lKCkuY29udGVudFJlbmRlcmVyKCkpIHsKLSAgICAgICAgICAgIGdjLnNhdmUoKTsKLSAg
ICAgICAgICAgIGdjLnNjYWxlKEZsb2F0U2l6ZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpKTsK
LSAgICAgICAgICAgIGdjLmNsaXAobG9naWNhbERpcnR5UmVjdCk7Ci0gICAgICAgICAgICBmcmFt
ZVZpZXctPnBhaW50KGdjLCBsb2dpY2FsRGlydHlSZWN0KTsKLSAgICAgICAgICAgIGlmIChtX3No
b3VsZEludmVydENvbG9ycykKLSAgICAgICAgICAgICAgICBnYy5maWxsUmVjdChsb2dpY2FsRGly
dHlSZWN0LCBDb2xvcjo6d2hpdGUsIENvbXBvc2l0ZU9wZXJhdG9yOjpEaWZmZXJlbmNlKTsKLSAg
ICAgICAgICAgIGdjLnJlc3RvcmUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIDo6VmFsaWRh
dGVSZWN0KG1fdmlld1dpbmRvdywgJmNsaWVudFJlY3QpOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSNlbmRpZgotfQotCiB2b2lkIFdlYlZpZXc6OnBhaW50KEhEQyBkYywgTFBB
UkFNIG9wdGlvbnMpCiB7CiAgICAgTE9DQUxfR0RJX0NPVU5URVIoMCwgX19GVU5DVElPTl9fKTsK
QEAgLTEzNDksMTggKzEyMTMsOCBAQCB2b2lkIFdlYlZpZXc6OnBhaW50KEhEQyBkYywgTFBBUkFN
IG9wdGlvCiAKICAgICA6OlNlbGVjdE9iamVjdChiaXRtYXBEQy5nZXQoKSwgb2xkQml0bWFwKTsK
IAotICAgIGlmICghZGMpIHsKKyAgICBpZiAoIWRjKQogICAgICAgICBFbmRQYWludChtX3ZpZXdX
aW5kb3csICZwcyk7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgICAgICBIUkVTVUxUIGhyID0gbV9i
YWNraW5nU3RvcmVSZW5kZXJUYXJnZXQtPkVuZERyYXcoKTsKLSAgICAgICAgLy8gRklYTUU6IFJl
Y29nbml6ZSBhbmQgcmVjb3ZlciBmcm9tIGVycm9yIHN0YXRlOgotICAgICAgICBSRUxFQVNFX0FT
U0VSVChTVUNDRUVERUQoaHIpKTsKLSNlbmRpZgotICAgIH0KLQotI2lmIFVTRShESVJFQ1QyRCkK
LSAgICBtX2JhY2tpbmdTdG9yZUdkaUludGVyb3AtPlJlbGVhc2VEQyhudWxscHRyKTsKLSNlbmRp
ZgogCiAgICAgaWYgKGFjdGl2ZSgpKQogICAgICAgICBjYW5jZWxEZWxldGVCYWNraW5nU3RvcmVT
b29uKCk7CkBAIC0xNDAzLDEwICsxMjU3LDYgQEAgdm9pZCBXZWJWaWV3OjpwYWludEludG9CYWNr
aW5nU3RvcmUoRnJhbQogICAgIGxvZ2ljYWxEaXJ0eVJlY3RGbG9hdC5zY2FsZShpbnZlcnNlU2Nh
bGVGYWN0b3IpOyAgICAKICAgICBJbnRSZWN0IGxvZ2ljYWxEaXJ0eVJlY3QoZW5jbG9zaW5nSW50
UmVjdChsb2dpY2FsRGlydHlSZWN0RmxvYXQpKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBt
X2JhY2tpbmdTdG9yZVJlbmRlclRhcmdldCA9IG51bGxwdHI7Ci0jZW5kaWYKLQogICAgIEdyYXBo
aWNzQ29udGV4dFdpbiBnYyhiaXRtYXBEQywgbV90cmFuc3BhcmVudCk7CiAgICAgZ2Muc2F2ZSgp
OwogICAgIGlmIChtX3RyYW5zcGFyZW50KQpAQCAtMjUxMCwxMSArMjM2MCw3IEBAIExSRVNVTFQg
Q0FMTEJBQ0sgV2ViVmlldzo6V2ViVmlld1duZFByb2MKIAogICAgIHN3aXRjaCAobWVzc2FnZSkg
ewogICAgICAgICBjYXNlIFdNX1BBSU5UOiB7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgICAgICAg
ICAgd2ViVmlldy0+cGFpbnRXaXRoRGlyZWN0MkQoKTsKLSNlbHNlCiAgICAgICAgICAgICB3ZWJW
aWV3LT5wYWludCgwLCAwKTsKLSNlbmRpZgogICAgICAgICAgICAgaWYgKHdlYlZpZXctPnVzZXNM
YXllcmVkV2luZG93KCkpCiAgICAgICAgICAgICAgICAgd2ViVmlldy0+cGVyZm9ybUxheWVyZWRX
aW5kb3dVcGRhdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTQ0NCwxMCArNTI5MCw2IEBA
IEhSRVNVTFQgV2ViVmlldzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2UKICAgICBociA9IHByZWZz
UHJpdmF0ZS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoJmVuYWJsZWQpOwogICAgIGlm
IChGQUlMRUQoaHIpKQogICAgICAgICByZXR1cm4gaHI7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAg
IC8vIERpc2FibGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgZm9yIG5vdy4KLSAgICBlbmFibGVk
ID0gZmFsc2U7Ci0jZW5kaWYKICAgICBzZXR0aW5ncy5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
RW5hYmxlZChlbmFibGVkKTsKIAogICAgIGhyID0gcHJlZnNQcml2YXRlLT5zaG93RGVidWdCb3Jk
ZXJzKCZlbmFibGVkKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmgJKHJldmlzaW9u
IDI4NzgxMSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtNzcsMTMgKzc3LDYgQEAgV2ViVmlldyoga2l0KFdlYkNvcmU6OlBhZ2UqKTsKIFdl
YkNvcmU6OlBhZ2UqIGNvcmUoSVdlYlZpZXcqKTsKIAogaW50ZXJmYWNlIElEcm9wVGFyZ2V0SGVs
cGVyOwotI2lmIFVTRShESVJFQ1QyRCkKLWludGVyZmFjZSBJRDJEMUJpdG1hcDsKLWludGVyZmFj
ZSBJRDJEMUJpdG1hcFJlbmRlclRhcmdldDsKLWludGVyZmFjZSBJRDJEMUdkaUludGVyb3BSZW5k
ZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFId25kUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNlIElE
MkQxUmVuZGVyVGFyZ2V0OwotI2VuZGlmCiAKIGNsYXNzIFdlYlZpZXcgZmluYWwKICAgICA6IHB1
YmxpYyBJV2ViVmlldwpAQCAtNDI3LDcgKzQyMCw2IEBAIHB1YmxpYzoKICAgICBib29sIGtleURv
d24oV1BBUkFNLCBMUEFSQU0sIGJvb2wgc3lzdGVtS2V5RG93biA9IGZhbHNlKTsKICAgICBib29s
IGtleVVwKFdQQVJBTSwgTFBBUkFNLCBib29sIHN5c3RlbUtleURvd24gPSBmYWxzZSk7CiAgICAg
Ym9vbCBrZXlQcmVzcyhXUEFSQU0sIExQQVJBTSwgYm9vbCBzeXN0ZW1LZXlEb3duID0gZmFsc2Up
OwotICAgIHZvaWQgcGFpbnRXaXRoRGlyZWN0MkQoKTsKICAgICB2b2lkIHBhaW50KEhEQywgTFBB
UkFNKTsKICAgICB2b2lkIHBhaW50SW50b1dpbmRvdyhIREMgYml0bWFwREMsIEhEQyB3aW5kb3dE
QywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKICAgICBib29sIGVuc3VyZUJh
Y2tpbmdTdG9yZSgpOwpAQCAtNjI2LDEyICs2MTgsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBITUVO
VSBtX2N1cnJlbnRDb250ZXh0TWVudSB7IG51bGxwdHIgfTsKICAgICBSZWZQdHI8V2ViQ29yZTo6
U2hhcmVkR0RJT2JqZWN0PEhCSVRNQVA+PiBtX2JhY2tpbmdTdG9yZUJpdG1hcDsKLSNpZiBVU0Uo
RElSRUNUMkQpCi0gICAgQ09NUHRyPElEMkQxSHduZFJlbmRlclRhcmdldD4gbV9yZW5kZXJUYXJn
ZXQ7Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBtX2JhY2tpbmdTdG9yZUQyREJpdG1hcDsKLSAg
ICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IG1fYmFja2luZ1N0b3JlUmVuZGVyVGFy
Z2V0OwotICAgIENPTVB0cjxJRDJEMUdkaUludGVyb3BSZW5kZXJUYXJnZXQ+IG1fYmFja2luZ1N0
b3JlR2RpSW50ZXJvcDsKLSNlbmRpZgogICAgIFNJWkUgbV9iYWNraW5nU3RvcmVTaXplOwogICAg
IFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRHRElPYmplY3Q8SFJHTj4+IG1fYmFja2luZ1N0b3JlRGly
dHlSZWdpb247CiAKSW5kZXg6IFNvdXJjZS9jbWFrZS9PcHRpb25zRlRXLmNtYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9jbWFrZS9PcHRpb25zRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTEpCisr
KyBTb3VyY2UvY21ha2UvT3B0aW9uc0ZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDIzNiAr
MCwwIEBACi1pZiAoQ01BS0VfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy4xNCkKLSAgICBtZXNzYWdl
KEZBVEFMX0VSUk9SICJDTWFrZSAzLjE0IG9yIGdyZWF0ZXIgaXMgcmVxdWlyZWQgdG8gY29tcGls
ZSBXZWJLaXRGVFciKQotZW5kaWYgKCkKLQotaWYgKE1TVkNfVkVSU0lPTiBWRVJTSU9OX0xFU1Mg
MTkyMCkKLSAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJWaXN1YWwgU3R1ZGlvIDIwMTkgaXMgcmVx
dWlyZWQgdG8gY29tcGlsZSBXZWJLaXRGVFciKQotZW5kaWYgKCkKLQotaWYgKCR7V1RGX0NQVV9Y
ODZ9KQotICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIldlYktpdEZUVyBkb2VzIG5vdCBzdXBwb3J0
IDMyLWJpdCBidWlsZHMiKQotZW5kaWYgKCkKLQotc2V0KFBPUlQgRlRXKQotCi0jIENvbXBpbGF0
aW9uIG9wdGlvbnMKLWluY2x1ZGUoT3B0aW9uc01TVkMpCi0KLWFkZF9kZWZpbml0aW9ucygtRFdU
Rl9QTEFURk9STV9GVFc9MSkKLSMgUHJldmVudCBtaW4oKSBhbmQgbWF4KCkgbWFjcm9zIGZyb20g
YmVpbmcgZXhwb3NlZAotYWRkX2RlZmluaXRpb25zKC1ETk9NSU5NQVgpCi0jIFVzZSB1bmljb2Rl
Ci1hZGRfZGVmaW5pdGlvbnMoLURVTklDT0RFIC1EX1VOSUNPREUpCi0jIElmIDx3aW5zb2NrMi5o
PiBpcyBub3QgaW5jbHVkZWQgYmVmb3JlIDx3aW5kb3dzLmg+IHJlZGVmaW5pdGlvbiBlcnJvcnMg
b2NjdXIKLSMgdW5sZXNzIF9XSU5TT0NLQVBJXyBpcyBkZWZpbmVkIGJlZm9yZSA8d2luZG93cy5o
PiBpcyBpbmNsdWRlZAotYWRkX2RlZmluaXRpb25zKC1EX1dJTlNPQ0tBUElfPSkKLQotIyBTZXR1
cCBsaWJyYXJ5IHBhdGhzCi1pZiAoREVGSU5FRCBFTlZ7QXBwbGVBcHBsaWNhdGlvblN1cHBvcnRT
REt9KQotICAgIGZpbGUoVE9fQ01BS0VfUEFUSCAiJEVOVntBcHBsZUFwcGxpY2F0aW9uU3VwcG9y
dFNES30vQXBwbGVJbnRlcm5hbCIgV0VCS0lUX0xJQlJBUklFU19ESVIpCi0gICAgc2V0KFdFQktJ
VF9MSUJSQVJJRVNfSU5DTFVERV9ESVIgIiR7V0VCS0lUX0xJQlJBUklFU19ESVJ9L2luY2x1ZGUi
KQotICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtXRUJLSVRfTElCUkFSSUVTX0lOQ0xVREVfRElS
fSkKLSAgICBzZXQoQVBQTEVfQlVJTEQgMSkKLWVuZGlmICgpCi0KLWlmIChOT1QgV0VCS0lUX0xJ
QlJBUklFU19ESVIpCi0gICAgaWYgKERFRklORUQgRU5We1dFQktJVF9MSUJSQVJJRVN9KQotICAg
ICAgICBmaWxlKFRPX0NNQUtFX1BBVEggIiRFTlZ7V0VCS0lUX0xJQlJBUklFU30iIFdFQktJVF9M
SUJSQVJJRVNfRElSKQotICAgIGVsc2UgKCkKLSAgICAgICAgZmlsZShUT19DTUFLRV9QQVRIICIk
e0NNQUtFX1NPVVJDRV9ESVJ9L1dlYktpdExpYnJhcmllcy93aW4iIFdFQktJVF9MSUJSQVJJRVNf
RElSKQotICAgIGVuZGlmICgpCi1lbmRpZiAoKQotCi1zZXQoQ01BS0VfUFJFRklYX1BBVEggJHtX
RUJLSVRfTElCUkFSSUVTX0RJUn0pCi0KLXNldF9wcm9wZXJ0eShHTE9CQUwgUFJPUEVSVFkgRklO
RF9MSUJSQVJZX1VTRV9MSUIzMl9QQVRIUyBPRkYpCi1zZXRfcHJvcGVydHkoR0xPQkFMIFBST1BF
UlRZIEZJTkRfTElCUkFSWV9VU0VfTElCNjRfUEFUSFMgT04pCi0KLXNldChXRUJLSVRfTElCUkFS
SUVTX0xJTktfRElSICIke1dFQktJVF9MSUJSQVJJRVNfRElSfS9saWI2NCIpCi0jIEZJWE1FOiBS
ZW1vdmUgJHtXRUJLSVRfTElCUkFSSUVTX0xJTktfRElSfSB3aGVuIGZpbmRfbGlicmFyeSBpcyB1
c2VkIGZvciBldmVyeXRoaW5nCi1saW5rX2RpcmVjdG9yaWVzKCIke0NNQUtFX0JJTkFSWV9ESVJ9
L2xpYjY0IiAiJHtXRUJLSVRfTElCUkFSSUVTX0xJTktfRElSfSIpCi1zZXQoQ01BS0VfQVJDSElW
RV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQklOQVJZX0RJUn0vbGliNjQpCi1zZXQoQ01BS0Vf
TElCUkFSWV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQklOQVJZX0RJUn0vbGliNjQpCi1zZXQo
Q01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQklOQVJZX0RJUn0vYmluNjQp
Ci0KLXNldChDTUFLRV9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUllfREVCVUcgIiR7Q01BS0VfQVJD
SElWRV9PVVRQVVRfRElSRUNUT1JZfSIpCi1zZXQoQ01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNU
T1JZX1JFTEVBU0UgIiR7Q01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZfSIpCi1zZXQoQ01B
S0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZX0RFQlVHICIke0NNQUtFX0xJQlJBUllfT1VUUFVU
X0RJUkVDVE9SWX0iKQotc2V0KENNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWV9SRUxFQVNF
ICIke0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWX0iKQotc2V0KENNQUtFX1JVTlRJTUVf
T1VUUFVUX0RJUkVDVE9SWV9ERUJVRyAiJHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9
IikKLXNldChDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUllfUkVMRUFTRSAiJHtDTUFLRV9S
VU5USU1FX09VVFBVVF9ESVJFQ1RPUll9IikKLQotV0VCS0lUX09QVElPTl9CRUdJTigpCi0KLSMg
RmVhdHVyZXMgaW4gdGhlIHNhbWUgc3RhdGUgb24gV2luQ2Fpcm8gYW5kIEFwcGxlV2luCi0KLVdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV8zRF9UUkFOU0ZPUk1TIFBSSVZB
VEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQVRUQUNITUVO
VF9FTEVNRU5UIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfQ0FDSEVfUEFSVElUSU9OSU5HIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcgUFJJVkFURSBPTikKLVdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1MzX1RFWFQgUFJJVkFURSBPRkYp
Ci1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX0JPWF9ERUNPUkFU
SU9OX0JSRUFLIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfQ1NTX0NPTklDX0dSQURJRU5UUyBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19ERVZJQ0VfQURBUFRBVElPTiBQUklWQVRFIE9GRikK
LVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xV
VElPTiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9DU1NfUEFJTlRJTkdfQVBJIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfQ1NTX1NFTEVDVE9SU19MRVZFTDQgUFJJVkFURSBPTikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DVVJTT1JfVklTSUJJTElUWSBQUklWQVRF
IE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0RSQUdfU1VQUE9S
VCBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0ZJ
TFRFUlNfTEVWRUxfMiBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX0ZUTF9KSVQgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfRlRQRElSIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfRlVMTFNDUkVFTl9BUEkgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfR0VPTE9DQVRJT04gUFJJVkFURSBPTikKLVdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9NQUNfR0VTVFVSRV9FVkVOVFMg
UFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTUFU
SE1MIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
TUVESUFfQ09OVFJPTFNfU0NSSVBUIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfTUhUTUwgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfTUlOSUJST1dTRVIgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9NT1VTRV9DVVJTT1JfU0NBTEUgUFJJVkFURSBP
TikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ORVRTQ0FQRV9QTFVH
SU5fQVBJIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX09SSUVOVEFUSU9OX0VWRU5UUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9PVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0ggUFJJVkFURSBPRkYp
Ci1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUFVCTElDX1NVRkZJWF9M
SVNUIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
U0FNUExJTkdfUFJPRklMRVIgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfU1BFTExDSEVDSyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVG
QVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9UT1VDSF9FVkVOVFMgUFJJVkFURSBPRkYpCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVE9VQ0hfU0xJREVSIFBSSVZBVEUgT0ZG
KQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1VOSUZJRURfQlVJTERT
IFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVklE
RU8gUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9X
RUJBU1NFTUJMWSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9XRUJHTCBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCBQUklWQVRFIE9GRikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9YU0xUIFBSSVZBVEUgT04pCi0KLSMgTWVk
aWEgdGhpbmdzIHRoYXQgc2hvdWxkIGJlIG9uCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfQVZGX0NBUFRJT05TIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQl9BVURJTyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9MRUdBQ1lfRU5DUllQVEVEX01FRElBIFBSSVZB
VEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX01FRElBX0NB
UFRVUkUgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfTUVESUFfU09VUkNFIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTUVESUFfU1RSRUFNIFBSSVZBVEUgT0ZGKQotV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1ZJREVPX1BSRVNFTlRBVElPTl9N
T0RFIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQl9SVEMgUFJJVkFURSBPRkYpCi0KLSMgUGF5
bWVudCB0aGluZ3MKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9BUFBM
RV9QQVkgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfUEFZTUVOVF9SRVFVRVNUIFBSSVZBVEUgT0ZGKQotCi0jIFdlYkdMCi1XRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCR0wyIFBSSVZBVEUgT0ZGKQotCi0jIE9mZiBm
b3Igbm93LCBidXQgc2hvdWxkIGJlIG9uCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfQVBJX1RFU1RTIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX0FQUExJQ0FUSU9OX01BTklGRVNUIFBSSVZBVEUgT0ZGKQotV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FTWU5DX1NDUk9MTElORyBQUklWQVRF
IE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DT05URU5UX0VY
VEVOU0lPTlMgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfQ09OVEVOVF9GSUxURVJJTkcgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX1RZUEVEX09NIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0RBUktfTU9ERV9DU1MgUFJJVkFURSBPRkYp
Ci1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfREFUQUNVRV9WQUxVRSBQ
UklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9EQVRB
TElTVF9FTEVNRU5UIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ET1dOTE9BRF9BVFRSSUJVVEUgUFJJVkFURSBPRkYp
Ci1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRU5DUllQVEVEX01FRElB
IFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0lO
VEVMTElHRU5UX1RSQUNLSU5HX1BSRVZFTlRJT04gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTEFZRVJfQkFTRURfU1ZHX0VOR0lORSBQUklWQVRF
IE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9MQVlPVVRfRk9S
TUFUVElOR19DT05URVhUIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX0xFVFRFUlBSRVNTIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX0xBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQgUFJJVkFURSBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTEVUVEVSUFJFU1Mg
UFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTUVN
T1JZX1NBTVBMRVIgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04gUFJJVkFURSBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTkVUV09SS19DQUNI
RV9TVEFMRV9XSElMRV9SRVZBTElEQVRFIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX05PVElGSUNBVElPTlMgUFJJVkFURSBPRkYpCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNI
IFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1BE
RktJVF9QTFVHSU4gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfUE9JTlRFUl9MT0NLIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX1JFU09VUkNFX1VTQUdFIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JVQkJFUl9CQU5ESU5HIFBSSVZBVEUgT0ZG
KQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NBTkRCT1hfRVhURU5T
SU9OUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9TRVJWRVJfUFJFQ09OTkVDVCBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9TRVJWSUNFX0NPTlRST0xTIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NFUlZJQ0VfV09SS0VSIFBSSVZBVEUgT0ZG
KQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NIQVJFQUJMRV9SRVNP
VVJDRSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9TTU9PVEhfU0NST0xMSU5HIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX1NQRUVDSF9TWU5USEVTSVMgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04g
UFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVEVY
VF9BVVRPU0laSU5HIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX1VTRVJfTUVTU0FHRV9IQU5ETEVSUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9WQVJJQVRJT05fRk9OVFMgUFJJVkFURSBPRkYp
Ci1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCRFJJVkVSIFBSSVZB
VEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQl9BVVRI
TiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9X
RUJfQ1JZUFRPIFBSSVZBVEUgT0ZGKQotCi0jV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoVVNFX1ZFUlNJT05fU1RBTVBFUiBQUklWQVRFIE9OKQotCi0jIEV4cGVyaW1lbnRhbCBmZWF0
dXJlcwotI1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRU1PVEVfSU5T
UEVDVE9SIFBSSVZBVEUgJHtFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTfSkKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SIFBSSVZBVEUg
T0ZGKQotI1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRVNPVVJDRV9V
U0FHRSBQUklWQVRFICR7RU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFU30pCi1XRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVTT1VSQ0VfVVNBR0UgUFJJVkFURSBPRkYp
Ci0KLSMgRmVhdHVyZXMgdG8gaW52ZXN0aWdhdGUKLSMKLSMgRmVhdHVyZXMgdGhhdCBhcmUgdGVt
cG9yYXJpbHkgdHVybmVkIG9mZiBiZWNhdXNlIGFuIGltcGxlbWVudGF0aW9uIGlzIG5vdAotIyBw
cmVzZW50IGF0IHRoaXMgdGltZQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX0ZUTF9KSVQgUFJJVkFURSBPRkYpCi0KLSMgTm8gc3VwcG9ydCBwbGFubmVkCi0KLSMgRklY
TUU6IFBvcnQgYm1hbGxvYyB0byBXaW5kb3dzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQzMzEwCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShVU0Vf
U1lTVEVNX01BTExPQyBQUklWQVRFIE9OKQotCi1XRUJLSVRfT1BUSU9OX0VORCgpCi0KLWlmIChB
UFBMRV9CVUlMRCkKLSAgICBzZXQoQ09SRUZPVU5EQVRJT05fTElCUkFSWSBDb3JlRm91bmRhdGlv
biR7REVCVUdfU1VGRklYfSkKLSAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ0YgT04p
Ci0gICAgZmluZF9wYWNrYWdlKExpYlhtbDIgMi45LjEgUkVRVUlSRUQpCi0gICAgaWYgKEVOQUJM
RV9YU0xUKQotICAgICAgICBmaW5kX3BhY2thZ2UoTGliWHNsdCAxLjEuMjggUkVRVUlSRUQpCi0g
ICAgZW5kaWYgKCkKLWVsc2UgKCkKLSAgICBmaW5kX3BhY2thZ2UoTGliWG1sMiAyLjkuNyBSRVFV
SVJFRCkKLSAgICBpZiAoRU5BQkxFX1hTTFQpCi0gICAgICAgIGZpbmRfcGFja2FnZShMaWJYc2x0
IDEuMS4zMiBSRVFVSVJFRCkKLSAgICBlbmRpZiAoKQotZW5kaWYgKCkKLQotZmluZF9wYWNrYWdl
KENVUkwgNy42MC4wIFJFUVVJUkVEKQotZmluZF9wYWNrYWdlKElDVSA2MS4yIFJFUVVJUkVEIENP
TVBPTkVOVFMgZGF0YSBpMThuIHVjKQotZmluZF9wYWNrYWdlKEpQRUcgMS41LjIgUkVRVUlSRUQp
Ci1maW5kX3BhY2thZ2UoT3BlblNTTCAyLjAuMCBSRVFVSVJFRCkKLWZpbmRfcGFja2FnZShQTkcg
MS42LjM0IFJFUVVJUkVEKQotZmluZF9wYWNrYWdlKFNRTGl0ZTMgMy4yMy4xIFJFUVVJUkVEKQot
ZmluZF9wYWNrYWdlKFpMSUIgMS4yLjExIFJFUVVJUkVEKQotZmluZF9wYWNrYWdlKExpYlBTTCAw
LjIwLjIgUkVRVUlSRUQpCi0KLSMgRklYTUU6IFdlIHNob3VsZCBhZGQgdGhlIGZvbGxvd2luZywg
dG9vLgotIyBmaW5kX3BhY2thZ2UoV2ViUCBSRVFVSVJFRCBDT01QT05FTlRTIGRlbXV4KQotIyBp
ZiAoV2ViUF9GT1VORCkKLSMgICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9XRUJQIE9O
KQotIyBlbmRpZiAoKQotCi1zZXQoVVNFX0FOR0xFX0VHTCBPTikKLQotU0VUX0FORF9FWFBPU0Vf
VE9fQlVJTEQoVVNFX0NVUkwgT04pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfRElSRUNU
MkQgT04pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfRUdMIE9OKQotU0VUX0FORF9FWFBP
U0VfVE9fQlVJTEQoVVNFX09QRU5HTF9FUyBPTikKLVNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKEhB
VkVfT1BFTkdMX0VTXzMgT04pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfT1BFTlNTTCBP
TikKLVNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9URVhUVVJFX01BUFBFUiBPTikKLVNFVF9B
TkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9URVhUVVJFX01BUFBFUl9HTCBPTikKLSNTRVRfQU5EX0VY
UE9TRV9UT19CVUlMRChVU0VfSU5TUEVDVE9SX1NPQ0tFVF9TRVJWRVIgJHtFTkFCTEVfUkVNT1RF
X0lOU1BFQ1RPUn0pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfSU5TUEVDVE9SX1NPQ0tF
VF9TRVJWRVIgT0ZGKQotCi1zZXQoV1RGX0xJQlJBUllfVFlQRSBTSEFSRUQpCi1zZXQoSmF2YVNj
cmlwdENvcmVfTElCUkFSWV9UWVBFIFNIQVJFRCkKLQotc2V0KEVOQUJMRV9BUElfVEVTVFMgT0ZG
KQotc2V0KEVOQUJMRV9XRUJDT1JFIE9OKQotc2V0KEVOQUJMRV9XRUJLSVQgT04pCi1zZXQoRU5B
QkxFX1dFQktJVF9MRUdBQ1kgT04pCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc4MTEpCisrKyBUb29scy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAyMi0wMS0wNyAgU2FtIFdlaW5pZyAg
PHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIERpcmVjdDJE
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5OTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L1BsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1
bXBTdXBwb3J0RGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L3dpbi9QaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydFdpbi5jcHA6CisgICAgICAgIChjcmVhdGVC
aXRtYXBDb250ZXh0RnJvbVdlYlZpZXcpOgorICAgICAgICAqIFBsYXRmb3JtRlRXLmNtYWtlOiBS
ZW1vdmVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1w
RE9NQXNXZWJBcmNoaXZlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtRlRX
LmNtYWtlOiBSZW1vdmVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJW
aWV3Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4vUGxhdGZvcm1XZWJWaWV3V2lu
LmNwcDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL3dpbi9UZXN0SW52b2NhdGlvbkRpcmVj
dDJELmNwcDogUmVtb3ZlZC4KKwogMjAyMi0wMS0wOCAgVHlsZXIgV2lsY29jayAgPHR5bGVyX3dA
YXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRGb2N1c2Vk
KHRydWUpIHNob3VsZCBtYWtlIHRoZSB3ZWJwYWdlIGZvY3VzZWQsIGFuZCBtYWtlIHdlYiBjb250
ZW50IHRoZSBmaXJzdCByZXNwb25kZXIKSW5kZXg6IFRvb2xzL1BsYXRmb3JtRlRXLmNtYWtlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTEpCisr
KyBUb29scy9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDExICswLDAgQEAK
LSNhZGRfc3ViZGlyZWN0b3J5KEltYWdlRGlmZikKLQotaWYgKEVOQUJMRV9XRUJLSVRfTEVHQUNZ
KQotICAgICNhZGRfc3ViZGlyZWN0b3J5KER1bXBSZW5kZXJUcmVlKQotICAgIGFkZF9zdWJkaXJl
Y3RvcnkoTWluaUJyb3dzZXIvd2luKQotZW5kaWYgKCkKLQotaWYgKEVOQUJMRV9XRUJLSVQpCi0g
ICAgYWRkX3N1YmRpcmVjdG9yeShUZXN0UnVubmVyU2hhcmVkKQotICAgIGFkZF9zdWJkaXJlY3Rv
cnkoV2ViS2l0VGVzdFJ1bm5lcikKLWVuZGlmICgpCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS9QaXhlbER1bXBTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJl
ZS9QaXhlbER1bXBTdXBwb3J0LmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgVG9vbHMvRHVtcFJl
bmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQx
LDYgQEAKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0Q0cuaCIKICNlbGlmIFVTRShDQUlSTykK
ICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0Q2Fpcm8uaCIKLSNlbGlmIFVTRShESVJFQ1QyRCkK
LSNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuaCIKICNlbmRpZgogCiB2b2lkIGR1
bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKGNvbnN0IHN0ZDo6c3RyaW5n
JiBleHBlY3RlZEhhc2gpCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9QbGF0Zm9ybVdpbi5j
bWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9QbGF0Zm9ybVdpbi5jbWFr
ZQkocmV2aXNpb24gMjg3ODExKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvUGxhdGZvcm1XaW4u
Y21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTUyLDI0ICs1MiwxNSBAQCBlbHNlICgpCiAgICAgICAg
IENGTmV0d29yawogICAgICAgICBDb3JlVGV4dAogICAgICkKLSAgICBpZiAoJHtVU0VfRElSRUNU
MkR9KQotICAgICAgICBsaXN0KEFQUEVORCBEdW1wUmVuZGVyVHJlZV9TT1VSQ0VTCi0gICAgICAg
ICAgICB3aW4vUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmNwcAotICAgICAgICApCi0gICAgICAg
IGxpc3QoQVBQRU5EIER1bXBSZW5kZXJUcmVlX0xJQlJBUklFUwotICAgICAgICAgICAgRDJkMQot
ICAgICAgICApCi0gICAgZWxzZSAoKQotICAgICAgICBsaXN0KEFQUEVORCBEdW1wUmVuZGVyVHJl
ZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAgICAgICAgICR7RHVtcFJlbmRlclRy
ZWVfRElSfS9jZwotICAgICAgICApCi0gICAgICAgIGxpc3QoQVBQRU5EIER1bXBSZW5kZXJUcmVl
X1NPVVJDRVMKLSAgICAgICAgICAgIGNnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAKLSAgICAgICAg
KQotICAgICAgICBsaXN0KEFQUEVORCBEdW1wUmVuZGVyVHJlZV9MSUJSQVJJRVMKLSAgICAgICAg
ICAgIENvcmVHcmFwaGljcwotICAgICAgICApCi0gICAgZW5kaWYgKCkKKyAgICBsaXN0KEFQUEVO
RCBEdW1wUmVuZGVyVHJlZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAgJHtE
dW1wUmVuZGVyVHJlZV9ESVJ9L2NnCisgICAgKQorICAgIGxpc3QoQVBQRU5EIER1bXBSZW5kZXJU
cmVlX1NPVVJDRVMKKyAgICAgICAgY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAorICAgICkKKyAg
ICBsaXN0KEFQUEVORCBEdW1wUmVuZGVyVHJlZV9MSUJSQVJJRVMKKyAgICAgICAgQ29yZUdyYXBo
aWNzCisgICAgKQogZW5kaWYgKCkKIAogV0VCS0lUX0FERF9QUkVDT01QSUxFRF9IRUFERVIoIkR1
bXBSZW5kZXJUcmVlUHJlZml4LmgiICJ3aW4vRHVtcFJlbmRlclRyZWVQcmVmaXguY3BwIiBEdW1w
UmVuZGVyVHJlZV9TT1VSQ0VTKQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BpeGVs
RHVtcFN1cHBvcnREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL1BpeGVsRHVtcFN1cHBvcnREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMSkKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuY3BwCShu
b25leGlzdGVudCkKQEAgLTEsODEgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmgiCi0K
LSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgotI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnQu
aCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxk
MmQxLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRy
YXMuaD4KLQotCi1zdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZVBORyA9IENGU1RSKCJw
dWJsaWMucG5nIik7Ci0KLUlEMkQxRmFjdG9yeSogcGl4ZWxEdW1wU3lzdGVtRmFjdG9yeSgpCi17
Ci0gICAgc3RhdGljIElEMkQxRmFjdG9yeSogZGlyZWN0MkRGYWN0b3J5ID0gbnVsbHB0cjsKLSAg
ICBpZiAoIWRpcmVjdDJERmFjdG9yeSkgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgRDJEMV9G
QUNUT1JZX09QVElPTlMgb3B0aW9ucyA9IHsgfTsKLSAgICAgICAgb3B0aW9ucy5kZWJ1Z0xldmVs
ID0gRDJEMV9ERUJVR19MRVZFTF9JTkZPUk1BVElPTjsKLSAgICAgICAgSFJFU1VMVCBociA9IEQy
RDFDcmVhdGVGYWN0b3J5KEQyRDFfRkFDVE9SWV9UWVBFX01VTFRJX1RIUkVBREVELCBvcHRpb25z
LCAmZGlyZWN0MkRGYWN0b3J5KTsKLSNlbHNlCi0gICAgICAgIEhSRVNVTFQgaHIgPSBEMkQxQ3Jl
YXRlRmFjdG9yeShEMkQxX0ZBQ1RPUllfVFlQRV9NVUxUSV9USFJFQURFRCwgJmRpcmVjdDJERmFj
dG9yeSk7Ci0jZW5kaWYKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGRpcmVjdDJERmFjdG9yeTsKLX0KLQotc3RhdGljIHZvaWQgcHJp
bnRQTkcoSUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBjaGFyKiBjaGVja3N1bSkKLXsKLSAgICBV
TlVTRURfUEFSQU0oaW1hZ2UpOwotICAgIFVOVVNFRF9QQVJBTShjaGVja3N1bSk7Ci0gICAgLy8g
Tm90IGltcGxlbWVudGVkLgotfQotCi12b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckJpdG1h
cENvbnRleHQoQml0bWFwQ29udGV4dCogY29udGV4dCwgY2hhciBoYXNoU3RyaW5nWzMzXSkKLXsK
LSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGhhc2hTdHJpbmcp
OwotICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KLX0KLQotdm9pZCBkdW1wQml0bWFwKEJpdG1hcENv
bnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGNoZWNrc3VtKQotewotICAgIF9jb21fcHRyX3Q8
X2NvbV9JSUlEPElEMkQxQml0bWFwLCAmX191dWlkb2YoSUQyRDFCaXRtYXApPj4gaW1hZ2U7Ci0g
ICAgSFJFU1VMVCBociA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5HZXRCaXRtYXAoJmlt
YWdlKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBy
aW50UE5HKGltYWdlLkdldEludGVyZmFjZVB0cigpLCBjaGVja3N1bSk7Ci19CkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BpeGVsRHVtcFN1cHBvcnREaXJlY3QyRC5o
CShyZXZpc2lvbiAyODc4MTEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1w
U3VwcG9ydERpcmVjdDJELmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2NCArMCwwIEBACi0vKgotKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSovCi0KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxjb21pcC5oPgotI2lu
Y2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KLQotdHlwZWRlZiBIQklUTUFQIFBsYXRmb3JtQml0bWFwQnVmZmVyOwot
Ci1jbGFzcyBCaXRtYXBDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8Qml0bWFwQ29udGV4dD4g
ewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Qml0bWFwQ29udGV4dD4gY3JlYXRlQnlBZG9wdGlu
Z0JpdG1hcEFuZENvbnRleHQoUGxhdGZvcm1CaXRtYXBCdWZmZXIgYnVmZmVyLCBJRDJEMVJlbmRl
clRhcmdldCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJp
dG1hcENvbnRleHQoYnVmZmVyLCBjb250ZXh0KSk7Ci0gICAgfQotCi0gICAgfkJpdG1hcENvbnRl
eHQoKQotICAgIHsKLSAgICAgICAgaWYgKG1fYnVmZmVyKQotICAgICAgICAgICAgRGVsZXRlT2Jq
ZWN0KG1fYnVmZmVyKTsKLSAgICB9Ci0KLSAgICBJRDJEMUJpdG1hcFJlbmRlclRhcmdldCogcGxh
dGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LkdldEludGVyZmFjZVB0cigp
OyB9Ci0KLXByaXZhdGU6Ci0gICAgQml0bWFwQ29udGV4dChQbGF0Zm9ybUJpdG1hcEJ1ZmZlciBi
dWZmZXIsIElEMkQxUmVuZGVyVGFyZ2V0KiBjb250ZXh0KQotICAgICAgICA6IG1fYnVmZmVyKGJ1
ZmZlcikKLSAgICAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAgICB7Ci0gICAgfQotCi0gICAg
UGxhdGZvcm1CaXRtYXBCdWZmZXIgbV9idWZmZXI7Ci0gICAgX2NvbV9wdHJfdDxfY29tX0lJSUQ8
SUQyRDFCaXRtYXAsICZfX3V1aWRvZihJRDJEMUJpdG1hcCk+PiBtX2JpdG1hcDsKLSAgICBfY29t
X3B0cl90PF9jb21fSUlJRDxJRDJEMUJpdG1hcFJlbmRlclRhcmdldCwgJl9fdXVpZG9mKElEMkQx
Qml0bWFwUmVuZGVyVGFyZ2V0KT4+IG1fY29udGV4dDsKLX07Ci0KLVJlZlB0cjxCaXRtYXBDb250
ZXh0PiBjcmVhdGVCaXRtYXBDb250ZXh0RnJvbVdlYlZpZXcoYm9vbCBvbnNjcmVlbiwgYm9vbCBp
bmNyZW1lbnRhbFJlcGFpbnQsIGJvb2wgc3dlZXBIb3Jpem9udGFsbHksIGJvb2wgZHJhd1NlbGVj
dGlvblJlY3QpOwotSUQyRDFGYWN0b3J5KiBwaXhlbER1bXBTeXN0ZW1GYWN0b3J5KCk7CkluZGV4
OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydFdpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BpeGVsRHVtcFN1cHBvcnRXaW4uY3Bw
CShyZXZpc2lvbiAyODc4MTEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1w
U3VwcG9ydFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDYgQEAKICNpbmNsdWRl
ICJQaXhlbER1bXBTdXBwb3J0Q0cuaCIKICNlbGlmIFVTRShDQUlSTykKICNpbmNsdWRlICJQaXhl
bER1bXBTdXBwb3J0Q2Fpcm8uaCIKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJQaXhl
bER1bXBTdXBwb3J0RGlyZWN0MkQuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRy
ZWUuaCIKQEAgLTk2LDE5ICs5NCw2IEBAIFJlZlB0cjxCaXRtYXBDb250ZXh0PiBjcmVhdGVCaXRt
YXBDb250ZXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZm8uYm1XaWR0aCwgaW5mby5ibUhlaWdodCwgaW5mby5ibVdpZHRoQnl0ZXMpOyAK
ICAgICBjYWlyb190KiBjb250ZXh0ID0gY2Fpcm9fY3JlYXRlKGltYWdlKTsgCiAgICAgY2Fpcm9f
c3VyZmFjZV9kZXN0cm95KGltYWdlKTsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBhdXRvIHRh
cmdldFByb3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0gICAgdGFy
Z2V0UHJvcGVydGllcy5waXhlbEZvcm1hdCA9IEQyRDE6OlBpeGVsRm9ybWF0KERYR0lfRk9STUFU
X0I4RzhSOEE4X1VOT1JNLCBEMkQxX0FMUEhBX01PREVfSUdOT1JFKTsKLQotICAgIENPTVB0cjxJ
RDJEMURDUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IHBpeGVs
RHVtcFN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRhcmdldFByb3BlcnRp
ZXMsICZyZW5kZXJUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBociA9IHJlbmRlclRhcmdldC0+QmluZERDKG1lbW9yeURDLmdl
dCgpLCAmZnJhbWUpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgYXV0byBjb250ZXh0ID0gcmVuZGVyVGFyZ2V0LmdldCgpOwogI2VuZGlmIAog
CiAgICAgcmV0dXJuIEJpdG1hcENvbnRleHQ6OmNyZWF0ZUJ5QWRvcHRpbmdCaXRtYXBBbmRDb250
ZXh0KGJpdG1hcCwgV1RGTW92ZShjb250ZXh0KSk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvUGxhdGZvcm1GVFcuY21ha2UJKHJldmlzaW9uIDI4NzgxMSkKKysrIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvUGxhdGZvcm1GVFcuY21ha2UJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MCArMCwwIEBA
Ci1saXN0KEFQUEVORCBXZWJLaXRUZXN0UnVubmVyX1NPVVJDRVMKLSAgICB3aW4vRXZlbnRTZW5k
ZXJQcm94eVdpbi5jcHAKLSAgICB3aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcAotICAgIHdpbi9U
ZXN0Q29udHJvbGxlcldpbi5jcHAKLSAgICB3aW4vVGVzdEludm9jYXRpb25EaXJlY3QyRC5jcHAK
LSAgICB3aW4vVUlTY3JpcHRDb250cm9sbGVyV2luLmNwcAotICAgIHdpbi9tYWluLmNwcAotKQot
Ci1zZXQod3JhcHBlcl9ERUZJTklUSU9OUwotICAgIFVTRV9DT05TT0xFX0VOVFJZX1BPSU5UCi0g
ICAgV0lOX0NBSVJPCi0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdFRlc3RSdW5uZXJJbmplY3RlZEJ1
bmRsZV9TT1VSQ0VTCi0gICAgSW5qZWN0ZWRCdW5kbGUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9s
bGVyV2luLmNwcAotICAgIEluamVjdGVkQnVuZGxlL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
V2luLmNwcAotICAgIEluamVjdGVkQnVuZGxlL3dpbi9BY3RpdmF0ZUZvbnRzV2luLmNwcAotICAg
IEluamVjdGVkQnVuZGxlL3dpbi9JbmplY3RlZEJ1bmRsZVdpbi5jcHAKLSAgICBJbmplY3RlZEJ1
bmRsZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAKLSkKLQotbGlzdChBUFBFTkQgV2ViS2l0VGVzdFJ1
bm5lcl9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgJHtXZWJLaXRUZXN0UnVubmVyX0RJUn0vSW5q
ZWN0ZWRCdW5kbGUvd2luCi0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdFRlc3RSdW5uZXJfTElCUkFS
SUVTCi0gICAgQ29tc3VwcHcKLSAgICBPbGVhY2MKLSkKLQotV0VCS0lUX0FERF9QUkVDT01QSUxF
RF9IRUFERVIoIldlYktpdFRlc3RSdW5uZXJQcmVmaXguaCIgIndpbi9XZWJLaXRUZXN0UnVubmVy
UHJlZml4LmNwcCIgV2ViS2l0VGVzdFJ1bm5lcl9TT1VSQ0VTKQotCi1zZXQoQ01BS0VfU0hBUkVE
X0xJTktFUl9GTEFHUyAiJHtDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTfSAke01TVkNfUlVOVElN
RV9MSU5LRVJfRkxBR1N9IikKLQotV0VCS0lUX1dSQVBfRVhFQ1VUQUJMRShXZWJLaXRUZXN0UnVu
bmVyCi0gICAgU09VUkNFUyAke1RPT0xTX0RJUn0vd2luL0RMTExhdW5jaGVyL0RMTExhdW5jaGVy
TWFpbi5jcHAKLSAgICBMSUJSQVJJRVMgc2hsd2FwaQotKQotdGFyZ2V0X2NvbXBpbGVfZGVmaW5p
dGlvbnMoV2ViS2l0VGVzdFJ1bm5lciBQUklWQVRFICR7d3JhcHBlcl9ERUZJTklUSU9OU30pCklu
ZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJKHJldmlzaW9uIDI4
NzgxMSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU0LDExICs1NCw3IEBAIGNsYXNzIEhlYWRsZXNzVmlld0JhY2tlbmQ7CiB0
eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdLVmlldzsKIHR5cGVkZWYgV1BFVG9vbGluZ0JhY2tl
bmRzOjpIZWFkbGVzc1ZpZXdCYWNrZW5kKiBQbGF0Zm9ybVdpbmRvdzsKICNlbGlmIFBMQVRGT1JN
KFdJTikKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jZWxzZQogI2lu
Y2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYKIGNsYXNzIFRlc3RSdW5uZXJXaW5kb3c7CiB0eXBlZGVm
IEhXTkQgUGxhdGZvcm1XaW5kb3c7CiB0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdLVmlldzsK
QEAgLTY2LDEwICs2Miw2IEBAIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogCiAj
aWYgVVNFKENBSVJPKQogdHlwZWRlZiBjYWlyb19zdXJmYWNlX3QqIFBsYXRmb3JtSW1hZ2U7Ci0j
ZWxpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQyRDFCaXRtYXA7Ci0KLXR5cGVkZWYgSUQy
RDFCaXRtYXAqIFBsYXRmb3JtSW1hZ2U7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdUUiB7CkluZGV4
OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9jZi9TdHJpbmdD
b25jYXRlbmF0ZUNGLmg+CiAjZW5kaWYKIAotI2lmIFVTRShDRikgJiYgIVBMQVRGT1JNKFdJTl9D
QUlSTykgJiYgIVVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0YpICYmICFQTEFURk9STShXSU5fQ0FJ
Uk8pCiAjaW5jbHVkZSAiV2ViQXJjaGl2ZUR1bXBTdXBwb3J0LmgiCiAjZW5kaWYKIApAQCAtNzgw
LDcgKzc4MCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wQWxsRnJhbWVzVGUKIAog
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBET01Bc1dlYkFyY2hpdmUoV0tCdW5kbGVGcmFt
ZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKLSNpZiBVU0UoQ0Yp
ICYmICFQTEFURk9STShXSU5fQ0FJUk8pICYmICFVU0UoRElSRUNUMkQpCisjaWYgVVNFKENGKSAm
JiAhUExBVEZPUk0oV0lOX0NBSVJPKQogICAgIGF1dG8gd2tEYXRhID0gYWRvcHRXSyhXS0J1bmRs
ZUZyYW1lQ29weVdlYkFyY2hpdmUoZnJhbWUpKTsKICAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0Yo
Q0ZEYXRhQ3JlYXRlKDAsIFdLRGF0YUdldEJ5dGVzKHdrRGF0YS5nZXQoKSksIFdLRGF0YUdldFNp
emUod2tEYXRhLmdldCgpKSkpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKFdlYkNvcmVUZXN0
U3VwcG9ydDo6Y3JlYXRlWE1MU3RyaW5nRnJvbVdlYkFyY2hpdmVEYXRhKGNmRGF0YS5nZXQoKSku
Z2V0KCkpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vUGxhdGZvcm1XZWJWaWV3
V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9QbGF0Zm9y
bVdlYlZpZXdXaW4uY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL3dpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMCAr
MzksNiBAQAogI2luY2x1ZGUgPGNhaXJvLmg+CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkK
LSNpbmNsdWRlIDxkMmQxXzEuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV1RSIHsKIAogc3RhdGlj
IExQQ1dTVFIgaG9zdFdpbmRvd0NsYXNzTmFtZSA9IEwiV1RSV2ViVmlld0hvc3RXaW5kb3ciOwpJ
bmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdEludm9jYXRpb25EaXJlY3QyRC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdEludm9jYXRp
b25EaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvd2luL1Rlc3RJbnZvY2F0aW9uRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsNDgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqICAgICAgICAgICAoQykgMjAxMSBCcmVudCBGdWxnaGFtIDxiZnVs
Z2hhbUB3ZWJraXQub3JnPi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICAgICAgICAgICAoQykg
MjAxMCwgMjAxMSBJZ2FsaWEgUy5MCi0gKiAgICAgICAgICAgKEMpIDIwMTIgSW50ZWwgQ29ycG9y
YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJUZXN0SW52b2NhdGlvbi5oIgotCi0jaW5jbHVkZSAiUGl4ZWxEdW1wU3Vw
cG9ydC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgotI2luY2x1ZGUgIlRlc3RDb250
cm9sbGVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUg
PGNzdGRpbz4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJp
bmdFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdUUiB7Ci0KLQotdm9pZCBUZXN0SW52b2NhdGlvbjo6
ZHVtcFBpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoU25hcHNob3RSZXN1bHRUeXBlLCBXS0Fy
cmF5UmVmIC8qIHJlcGFpbnRSZWN0cyAqLywgV0tJbWFnZVJlZikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVFIK
</data>
<flag name="commit-queue"
          id="474596"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448673</attachid>
            <date>2022-01-08 10:40:00 -0800</date>
            <delta_ts>2022-01-08 11:26:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234999-20220108103959.patch</filename>
            <type>text/plain</type>
            <size>483289</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI4Nzgx
MikKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAx
LTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3Vw
cG9ydCBmb3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2U6IFJlbW92ZWQuCisKIDIw
MjItMDEtMDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI4NzY5OC4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAxLTA3ICBTYW0g
V2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3Ig
RGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIFNhYW0gQmFyYXRp
ICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQXBwZWFzZSBhbiBh
c3NlcnRpb24gdGhhdCB3YXMgYnJva2VuIGJ5IHIyODc4MDEgYnkgc2xpZ2h0bHkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1GVFcuY21ha2UJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBA
IC0xLDQ0ICswLDAgQEAKLWxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKLSAgICBB
UEkvSlNTdHJpbmdSZWZCU1RSLmNwcAotKQotCi1saXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9Q
VUJMSUNfRlJBTUVXT1JLX0hFQURFUlMKLSAgICBBUEkvSlNTdHJpbmdSZWZCU1RSLmgKLSAgICBB
UEkvSmF2YVNjcmlwdENvcmUuaAotKQotCi1pZiAoVVNFX0NGKQotICAgIGxpc3QoQVBQRU5EIEph
dmFTY3JpcHRDb3JlX1NPVVJDRVMKLSAgICAgICAgQVBJL0pTU3RyaW5nUmVmQ0YuY3BwCi0gICAg
KQotCi0gICAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfUFVCTElDX0ZSQU1FV09SS19IRUFE
RVJTCi0gICAgICAgIEFQSS9KU1N0cmluZ1JlZkNGLmgKLSAgICApCi0KLSAgICBsaXN0KEFQUEVO
RCBKYXZhU2NyaXB0Q29yZV9MSUJSQVJJRVMKLSAgICAgICAgJHtDT1JFRk9VTkRBVElPTl9MSUJS
QVJZfQotICAgICkKLWVuZGlmICgpCi0KLWlmIChOT1QgV1RGX1BMQVRGT1JNX1dJTl9DQUlSTykK
LSAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9MSUJSQVJJRVMKLSAgICAgICAgd2lubW0K
LSAgICApCi1lbmRpZiAoKQotCi1pZiAoRU5BQkxFX1JFTU9URV9JTlNQRUNUT1IpCi0gICAgaW5j
bHVkZShpbnBzZWN0b3IvcmVtb3RlL1NvY2tldC5jbWFrZSkKLWVsc2UgKCkKLSAgICBsaXN0KFJF
TU9WRV9JVEVNIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKLSAgICAgICAgaW5zcGVjdG9yL0pTR2xv
YmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKLSAgICApCi1lbmRpZiAoKQotCi1maWxl
KENPUFkKLSAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUucmVzb3VyY2VzIgotICAgIERFU1RJTkFUSU9OCi0gICAgJHtDTUFLRV9S
VU5USU1FX09VVFBVVF9ESVJFQ1RPUll9Ci0pCi0KLXNldChKYXZhU2NyaXB0Q29yZV9PVVRQVVRf
TkFNRSBKYXZhU2NyaXB0Q29yZSR7REVCVUdfU1VGRklYfSkKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAxLTA3ICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBm
b3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCByZXZlcnRpbmcgcjI4NzY5OC4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL1BsYXRm
b3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL1BsYXRm
b3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDM1ICswLDAgQEAKLSMgV2Un
cmUgdGFyZ2V0aW5nIFdpbmRvd3MgMTAgd2hpY2ggd2lsbCBoYXZlIERpcmVjdFggMTEgb24gaXQg
c28gcmVxdWlyZSB0aGF0Ci0jIGJ1dCBtYWtlIERpcmVjdFggOSBvcHRpb25hbAotCi1saXN0KEFQ
UEVORCBBTkdMRV9ERUZJTklUSU9OUwotICAgIEdMX0FQSUNBTEw9Ci0gICAgR0xfQVBJPQotICAg
IE5PTUlOTUFYCi0pCi0KLSMgV2UncmUgdGFyZ2V0aW5nIFdpbmRvd3MgMTAgd2hpY2ggd2lsbCBo
YXZlIERpcmVjdFggMTEKLWxpc3QoQVBQRU5EIEFOR0xFX1NPVVJDRVMKLSAgICAke19kM2QxMV9i
YWNrZW5kX3NvdXJjZXN9Ci0gICAgJHtfZDNkX3NoYXJlZF9zb3VyY2VzfQotCi0gICAgJHthbmds
ZV90cmFuc2xhdG9yX2hsc2xfc291cmNlc30KLQotICAgICR7bGliYW5nbGVfZ3B1X2luZm9fdXRp
bF9zb3VyY2VzfQotICAgICR7bGliYW5nbGVfZ3B1X2luZm9fdXRpbF93aW5fc291cmNlc30KLSkK
LQotbGlzdChBUFBFTkQgQU5HTEVfREVGSU5JVElPTlMKLSAgICBBTkdMRV9FTkFCTEVfRDNEMTEK
LSAgICBBTkdMRV9FTkFCTEVfSExTTAotKQotCi1saXN0KEFQUEVORCBBTkdMRUdMRVN2Ml9MSUJS
QVJJRVMgZHhndWlkIGR4Z2kpCi0KLSMgRGlyZWN0WCA5IHN1cHBvcnQgc2hvdWxkIGJlIG9wdGlv
bmFsIGJ1dCBBTkdMRSB3aWxsIG5vdCBjb21waWxlIHdpdGhvdXQgaXQKLWxpc3QoQVBQRU5EIEFO
R0xFX1NPVVJDRVMgJHtfZDNkOV9iYWNrZW5kX3NvdXJjZXN9KQotbGlzdChBUFBFTkQgQU5HTEVf
REVGSU5JVElPTlMgQU5HTEVfRU5BQkxFX0QzRDkpCi1saXN0KEFQUEVORCBBTkdMRUdMRVN2Ml9M
SUJSQVJJRVMgZDNkOSkKLQotIyBVc2Ugc2hhcmVkIGxpYnJhcmllcwotc2V0KEdMRVN2Ml9MSUJS
QVJZX1RZUEUgU0hBUkVEKQotc2V0KEVHTF9MSUJSQVJZX1RZUEUgU0hBUkVEKQpJbmRleDogU291
cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMjItMDEtMDcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29t
PgorCisgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBEaXJlY3QyRAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0OTk5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1GVFcuY21ha2U6
IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRvcHQgbGlua2VkT25PckFmdGVyKCkgaW4gbW9yZSBwbGFjZXMK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDYxICswLDAg
QEAKLWxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwotICAgIHRleHQvd2luL1dDaGFyU3Ry
aW5nRXh0cmFzLmgKLQotICAgIHdpbi9EYmdIZWxwZXJXaW4uaAotICAgIHdpbi9HRElPYmplY3Qu
aAotICAgIHdpbi9Tb2Z0TGlua2luZy5oCi0gICAgd2luL1dpbjMySGFuZGxlLmgKLSkKLQotbGlz
dChBUFBFTkQgV1RGX1BSSVZBVEVfTElCUkFSSUVTCi0gICAgRGJnaGVscCAjIEZvciBzeW1ib2wg
aGFuZGxpbmcgPGRiZ2hlbHAuaD4KLSAgICBTaGx3YXBpICMgRm9yIGZpbGUgc3lzdGVtIG9wZXJh
dGlvbnMgPHNobHdhcGkuaD4KLSkKLQotbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwotICAgICBX
aW5tbSAjIEZvciBtdWx0aW1lZGlhIGZ1bmN0aW9ucywgYWxzbyB1c2VkIGluIDx0aW1lYXBpLmg+
Ci0pCi0KLWxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCi0gICAgdGV4dC93aW4vU3RyaW5nV2luLmNw
cAotICAgIHRleHQvd2luL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VXaW4uY3BwCi0KLSAg
ICB3aW4vQ1BVVGltZVdpbi5jcHAKLSAgICB3aW4vRGJnSGVscGVyV2luLmNwcAotICAgIHdpbi9G
aWxlU3lzdGVtV2luLmNwcAotICAgIHdpbi9MYW5ndWFnZVdpbi5jcHAKLSAgICB3aW4vTG9nZ2lu
Z1dpbi5jcHAKLSAgICB3aW4vTWFpblRocmVhZFdpbi5jcHAKLSAgICB3aW4vTWVtb3J5Rm9vdHBy
aW50V2luLmNwcAotICAgIHdpbi9NZW1vcnlQcmVzc3VyZUhhbmRsZXJXaW4uY3BwCi0gICAgd2lu
L09TQWxsb2NhdG9yV2luLmNwcAotICAgIHdpbi9QYXRoV2Fsa2VyLmNwcAotICAgIHdpbi9SdW5M
b29wV2luLmNwcAotICAgIHdpbi9UaHJlYWRpbmdXaW4uY3BwCi0gICAgd2luL1dvcmtRdWV1ZVdp
bi5jcHAKLSkKLQotaWYgKFVTRV9DRikKLSAgICBsaXN0KEFQUEVORCBXVEZfUFVCTElDX0hFQURF
UlMKLSAgICAgICAgY2YvQ0ZVUkxFeHRyYXMuaAotICAgICAgICBjZi9TcGFuQ0YuaAotICAgICAg
ICBjZi9UeXBlQ2FzdHNDRi5oCi0KLSAgICAgICAgdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNG
LmgKLSAgICAgICAgdGV4dC9jZi9UZXh0QnJlYWtJdGVyYXRvckNGLmgKLSAgICApCi0gICAgbGlz
dChBUFBFTkQgV1RGX1NPVVJDRVMKLSAgICAgICAgY2YvQ0ZVUkxFeHRyYXMuY3BwCi0gICAgICAg
IGNmL0ZpbGVTeXN0ZW1DRi5jcHAKLSAgICAgICAgY2YvVVJMQ0YuY3BwCi0KLSAgICAgICAgdGV4
dC9jZi9BdG9tU3RyaW5nSW1wbENGLmNwcAotICAgICAgICB0ZXh0L2NmL1N0cmluZ0NGLmNwcAot
ICAgICAgICB0ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAKLSAgICAgICAgdGV4dC9jZi9TdHJpbmdW
aWV3Q0YuY3BwCi0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUyAke0NPUkVG
T1VOREFUSU9OX0xJQlJBUll9KQotZW5kaWYgKCkKLQotc2V0KFdURl9PVVRQVVRfTkFNRSBXVEYk
e0RFQlVHX1NVRkZJWH0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMzQgQEAKKzIw
MjItMDEtMDcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92
ZSBzdXBwb3J0IGZvciBEaXJlY3QyRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM0OTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9y
bUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtRlRXLmNtYWtlOiBSZW1vdmVkLgor
ICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUYuY3BwOgorICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01lZGlhQUYuaDoKKyAgICAgICAgKiBwYWdlL3dpbi9GcmFtZVdpbkRpcmVjdDJELmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmNyZWF0ZU1JTUVUeXBlUmVnaXN0cnlUaHJl
YWRHbG9iYWxEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4
Q2FjaGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpwcmVUcmFuc2Zvcm1lZE5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJh
dyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
ZHdGb250IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmR3Rm9udEZhY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYWRpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OnByZVRy
YW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzdXBwb3J0c01lZGlhVHlwZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OnNldFRhcmdldENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdy
YXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGF0aDo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBhdGg6OmFkZFJvdW5kZWRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRo
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vY2YvQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbkNGLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNETVNlc3Npb25BVkZvdW5kYXRpb25DRjo6Z2VuZXJhdGVLZXlSZXF1ZXN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50
SW1hZ2U6OmRyYXdQREZQYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T3BlblR5
cGVNYXRoRGF0YTo6T3BlblR5cGVNYXRoRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVu
YW1lQW5kQWN0aXZhdGVGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Qml0bWFwVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjp1cGRh
dGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRl
eHR1cmVHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNv
bnRlbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFj
a2VuZERpcmVjdDJELmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4
dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGll
cy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJE
VXRpbGl0aWVzLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Rp
cmVjdFdyaXRlVXRpbGl0aWVzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFNpemVEaXJlY3QyRC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGly
ZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0
Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250UGxhdGZvcm1EYXRhRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dFdpbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dFdpbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGly
ZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0xheWVyRGlyZWN0MkQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3Qy
RC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVj
b2RlckRpcmVjdDJELmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9OYXRpdmVJbWFnZURpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVG
b250RGF0YURpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VEaXJlY3QyRC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRl
ckVmZmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZl
SW1hZ2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5oOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5oOgorCiAyMDIyLTAxLTA4ICBH
YWJyaWVsIE5hdmEgTWFyaW5vICA8Z25hdmFtYXJpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIG51
bGwgcHRyIGRlcmVmIGluIFdlYkNvcmU6Ok1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6
OmFwcGVuZFNpYmxpbmdOb2RlUmFuZ2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBw
bGVXaW4uY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdp
bi5jbWFrZQkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBs
ZVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtNzEsMTI5ICs3MSwxMDIgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRQogICAgIHBsYXRmb3JtL25ldHdvcmsvY2Yv
U29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCiApCiAKLWlmICgke1VTRV9ESVJFQ1QyRH0pCi0gICAg
bGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3dpbiIKLSAgICApCi0KLSAgICBsaXN0
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAgcGFnZS93aW4vRnJhbWVXaW5EaXJlY3Qy
RC5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3Qy
RC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJl
Y3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2Rl
RGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVj
dDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGly
ZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2Rl
ckRpcmVjdDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3Qy
RC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQu
Y3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3BwCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVjdDJELmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcAotCi0gICAgICAgIHBs
YXRmb3JtL3dpbi9EcmFnSW1hZ2VEaXJlY3QyRC5jcHAKLSAgICApCi1lbHNlICgpCi0gICAgbGlz
dChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbiIKLSAgICAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZiIKLSAgICAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2NhIgotICAgICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luIgotICAgICAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3MvY2ciCi0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCi0gICAgICAgIHBhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCi0KLSAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9MYXllclBvb2wuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRm
b3JtQ0FMYXllci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUNvbnRyb2xs
ZXIuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5jcHAK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuY3BwCi0gICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0EuY3BwCi0KLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vTGF5ZXJDaGFuZ2VzRmx1c2hlci5jcHAKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBRmlsdGVyc1dpbi5jcHAKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNw
cAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV0tDQUNGVmlld0xheWVyVHJlZUhv
c3QuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdM
YXllcldpbi5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNlQ0cuY3BwCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zs
b2F0U2l6ZUNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNw
cAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuY3BwCi0g
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCi0gICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlU291cmNlQ0dXaW4uY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ludFBvaW50Q0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFJlY3RD
Ry5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50U2l6ZUNHLmNwcAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5D
Ry5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1l
ci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhD
Ry5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwCi0KLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENvcmVUZXh0LmNwcAotICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQu
Y3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0dseXBoUGFnZUNvcmVUZXh0
LmNwcAotCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlQ0cuY3Bw
Ci0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vd2lu
L0RyYWdJbWFnZUNHV2luLmNwcAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBREVSUwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFw
aGljc0xheWVyQ0EuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuaAot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmgKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUZpbHRlcnMuaAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9UaWxlQ29udHJvbGxlci5oCi0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2lu
L0Fic3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93
aW4vQ0FDRkxheWVyVHJlZUhvc3RDbGllbnQuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9Db2xvclNwYWNlQ0cuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJl
bmRlcmVyQ0cuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5oCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCi0gICAgKQotZW5kaWYgKCkKK2xpc3QoQVBQRU5E
IFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbiIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9ncmFwaGljcy9jYSIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jZyIKKykKKwor
bGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAK
KworICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
UGxhdGZvcm1DQUxheWVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb250cm9s
bGVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlR3JpZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9UcmFuc2Zvcm1hdGlvbk1hdHJpeENBLmNwcAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9MYXllckNoYW5nZXNGbHVzaGVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9Q
bGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9Q
bGF0Zm9ybUNBRmlsdGVyc1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV0tD
QUNGVmlld0xheWVyVHJlZUhvc3QuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dl
YlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29s
b3JDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNlQ0cuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0Zsb2F0UmVjdENHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6
ZUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJm
YWNlUG9vbC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ludFBvaW50Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UmVjdENH
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFNpemVDRy5jcHAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BERkRvY3VtZW50SW1hZ2UuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvVVRJUmVnaXN0cnkuY3BwCisKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250
Q2FzY2FkZUNvcmVUZXh0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRD
b3JlVGV4dC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250UGxhdGZvcm1E
YXRhQ29yZVRleHQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdl
Q29yZVRleHQuY3BwCisKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZUNH
LmNwcAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxl
Rm9udERhdGFDR1dpbi5jcHAKKworICAgIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAK
KykKKworbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9MYXllclBvb2wuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FB
bmltYXRpb24uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllckNsaWVudC5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvVGlsZUNvbnRyb2xsZXIuaAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0Fi
c3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9D
QUNGTGF5ZXJUcmVlSG9zdC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXll
clRyZWVIb3N0Q2xpZW50LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUxheWVyV2luLmgKKworICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yU3BhY2VDRy5oCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSU9TdXJmYWNlUG9vbC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKKykKIAogaWYgKENNQUtFX1NJWkVPRl9WT0lE
X1AgRVFVQUwgNCkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMgJHtXZWJDb3JlX0RF
UklWRURfU09VUkNFU19ESVJ9L21ha2VzYWZlc2VoLm9iaikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZU
Vy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDI1MyArMCwwIEBACi1pbmNsdWRlKHBsYXRmb3Jt
L0N1cmwuY21ha2UpCi1pZiAoTk9UIEFQUExFX0JVSUxEKQotICAgIGluY2x1ZGUocGxhdGZvcm0v
SW1hZ2VEZWNvZGVycy5jbWFrZSkKLWVuZGlmICgpCi1pbmNsdWRlKHBsYXRmb3JtL09wZW5TU0wu
Y21ha2UpCi1pbmNsdWRlKHBsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UpCi0KLWxpc3QoQVBQ
RU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgIiR7RGlyZWN0WF9J
TkNMVURFX0RJUlN9IgotICAgICIke1dFQktJVF9MSUJSQVJJRVNfRElSfS9pbmNsdWRlIgotICAg
ICIke1dFQkNPUkVfRElSfS9hY2Nlc3NpYmlsaXR5L3dpbiIKLSAgICAiJHtXRUJDT1JFX0RJUn0v
cGFnZS93aW4iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2VnbCIKLSAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsIgotICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZSIKLSAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luIgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRp
YWNhcGFiaWxpdGllcyIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay93aW4i
Ci0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3dpbiIKLSkKLQotbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCi0gICAgYWNjZXNzaWJpbGl0eS93aW4vQVhPYmplY3RDYWNoZVdpbi5jcHAK
LSAgICBhY2Nlc3NpYmlsaXR5L3dpbi9BY2Nlc3NpYmlsaXR5T2JqZWN0V2luLmNwcAotICAgIGFj
Y2Vzc2liaWxpdHkvd2luL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyV2luLmNwcAotCi0gICAg
ZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcAotCi0gICAgaHRtbC9IVE1MU2VsZWN0RWxlbWVudFdp
bi5jcHAKLQotICAgIHBhZ2Uvd2luL0RyYWdDb250cm9sbGVyV2luLmNwcAotICAgIHBhZ2Uvd2lu
L0V2ZW50SGFuZGxlcldpbi5jcHAKLSAgICBwYWdlL3dpbi9GcmFtZVdpbi5jcHAKLSAgICBwYWdl
L3dpbi9GcmFtZVdpbkRpcmVjdDJELmNwcAotCi0gICAgcGxhdGZvcm0vQ3Vyc29yLmNwcAotICAg
IHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuY3BwCi0gICAgcGxhdGZvcm0vU3RhdGljUGFzdGVi
b2FyZC5jcHAKLQotICAgIHBsYXRmb3JtL2F1ZGlvL1BsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdl
ci5jcHAKLQotICAgIHBsYXRmb3JtL2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAKLSAg
ICBwbGF0Zm9ybS9nZW5lcmljL0tleWVkRW5jb2RlckdlbmVyaWMuY3BwCi0KLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9HTENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1E
aXNwbGF5LmNwcAotCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAK
LQotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcAot
Ci0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRElt
cGwuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlckRpcmVjdFdyaXRlLmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9h
dFBvaW50RGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UmVjdERp
cmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFNpemVEaXJlY3QyRC5j
cHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250RGVzY3JpcHRpb25XaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdp
bi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVEaXJlY3Qy
RC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlRGVjb2RlckRpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURp
cmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZVdpbi5jcHAKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW50UG9pbnRXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ludFJlY3RXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFNpemVX
aW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJl
Y3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
VGV4dEFuYWx5emVySGVscGVyLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFuc2Zv
cm1hdGlvbk1hdHJpeERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFu
c2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAKLQotICAgIHBsYXRmb3JtL25ldHdvcmsvd2luL0N1cmxT
U0xIYW5kbGVXaW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93aW4vRG93bmxvYWRCdW5kbGVX
aW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93aW4vTmV0d29ya1N0YXRlTm90aWZpZXJXaW4u
Y3BwCi0KLSAgICBwbGF0Zm9ybS90ZXh0L0h5cGhlbmF0aW9uLmNwcAotICAgIHBsYXRmb3JtL3Rl
eHQvd2luL0xvY2FsZVdpbi5jcHAKLQotICAgIHBsYXRmb3JtL3dpbi9CU3RyaW5nLmNwcAotICAg
IHBsYXRmb3JtL3dpbi9CaXRtYXBJbmZvLmNwcAotICAgIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRV
dGlsaXRpZXNXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL0N1cnNvcldpbi5jcHAKLSAgICBwbGF0
Zm9ybS93aW4vRGVmV25kUHJvY1dpbmRvd0NsYXNzLmNwcAotICAgIHBsYXRmb3JtL3dpbi9EZWxh
eUxvYWRlZE1vZHVsZXNFbnVtZXJhdG9yLmNwcAotICAgIHBsYXRmb3JtL3dpbi9EcmFnRGF0YVdp
bi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlRGlyZWN0MkQuY3BwCi0gICAgcGxhdGZv
cm0vd2luL0RyYWdJbWFnZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vR0RJT2JqZWN0Q291bnRl
ci5jcHAKLSAgICBwbGF0Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmNwcAotICAgIHBsYXRmb3JtL3dp
bi9JbXBvcnRlZEZ1bmN0aW9uc0VudW1lcmF0b3IuY3BwCi0gICAgcGxhdGZvcm0vd2luL0ltcG9y
dGVkTW9kdWxlc0VudW1lcmF0b3IuY3BwCi0gICAgcGxhdGZvcm0vd2luL0tleUV2ZW50V2luLmNw
cAotICAgIHBsYXRmb3JtL3dpbi9Mb2NhbGl6ZWRTdHJpbmdzV2luLmNwcAotICAgIHBsYXRmb3Jt
L3dpbi9Mb2dnaW5nV2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9NSU1FVHlwZVJlZ2lzdHJ5V2lu
LmNwcAotICAgIHBsYXRmb3JtL3dpbi9NYWluVGhyZWFkU2hhcmVkVGltZXJXaW4uY3BwCi0gICAg
cGxhdGZvcm0vd2luL1BFSW1hZ2UuY3BwCi0gICAgcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4u
Y3BwCi0gICAgcGxhdGZvcm0vd2luL1BsYXRmb3JtTW91c2VFdmVudFdpbi5jcHAKLSAgICBwbGF0
Zm9ybS93aW4vUGxhdGZvcm1TY3JlZW5XaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1BvcHVwTWVu
dVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJhdG9yV2luLmNwcAotICAgIHBs
YXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vU2VhcmNo
UG9wdXBNZW51REIuY3BwCi0gICAgcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudVdpbi5jcHAK
LSAgICBwbGF0Zm9ybS93aW4vU3RydWN0dXJlZEV4Y2VwdGlvbkhhbmRsZXJTdXBwcmVzc29yLmNw
cAotICAgIHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcAotICAgIHBsYXRmb3JtL3dpbi9Vc2Vy
QWdlbnRXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAKLSAgICBwbGF0
Zm9ybS93aW4vV2ViQ29yZUJ1bmRsZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZUlu
c3RhbmNlSGFuZGxlLmNwcAotICAgIHBsYXRmb3JtL3dpbi9XZWJDb3JlVGV4dFJlbmRlcmVyLmNw
cAotICAgIHBsYXRmb3JtL3dpbi9XaGVlbEV2ZW50V2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9X
aWRnZXRXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5j
cHAKLQotICAgIHJlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKLSkKLQotaWYgKFVTRV9DRikK
LSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUwotICAg
ICAgICAiJHtXRUJDT1JFX0RJUn0vbG9hZGVyL2FyY2hpdmUvY2YiCi0gICAgICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9jZiIKLSAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2Nm
L3dpbiIKLSAgICApCi0KLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAg
ZWRpdGluZy9TbWFydFJlcGxhY2VDRi5jcHAKLQotICAgICAgICBsb2FkZXIvYXJjaGl2ZS9jZi9M
ZWdhY3lXZWJBcmNoaXZlLmNwcAotCi0gICAgICAgIHBsYXRmb3JtL2NmL0tleWVkRGVjb2RlckNG
LmNwcAotICAgICAgICBwbGF0Zm9ybS9jZi9LZXllZEVuY29kZXJDRi5jcHAKLSAgICAgICAgcGxh
dGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vY2Yvd2luL0Nl
cnRpZmljYXRlQ0ZXaW4uY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vdGV4dC9jZi9IeXBoZW5hdGlv
bkNGLmNwcAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwotICAgICAgICBsb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmgK
LQotICAgICAgICBwbGF0Zm9ybS9jZi93aW4vQ2VydGlmaWNhdGVDRldpbi5oCi0gICAgKQotCi0g
ICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMgJHtDT1JFRk9VTkRBVElPTl9MSUJSQVJZ
fSkKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlVGVzdFN1cHBvcnRfTElCUkFSSUVTICR7Q09SRUZP
VU5EQVRJT05fTElCUkFSWX0pCi1lbHNlICgpCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCi0gICAgICAgIHBsYXRmb3JtL3RleHQvSHlwaGVuYXRpb24uY3BwCi0gICAgKQotZW5kaWYg
KCkKLQotbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCi0gICAg
YWNjZXNzaWJpbGl0eS93aW4vQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJXaW4uaAotCi0gICAg
cGFnZS93aW4vRnJhbWVXaW4uaAotCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyREltcGwuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQ
aXhlbERhdGEuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMu
aAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5oCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmgKLSAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dFdpbi5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
RGVjb2RlckRpcmVjdDJELmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxXaW5kb3dz
Q29udGV4dC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1
bGxzY3JlZW5XaW5kb3cuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NoYXJlZEdESU9iamVjdC5o
Ci0KLSAgICBwbGF0Zm9ybS93aW4vQlN0cmluZy5oCi0gICAgcGxhdGZvcm0vd2luL0JpdG1hcElu
Zm8uaAotICAgIHBsYXRmb3JtL3dpbi9DT01QdHIuaAotICAgIHBsYXRmb3JtL3dpbi9EZWZXbmRQ
cm9jV2luZG93Q2xhc3MuaAotICAgIHBsYXRmb3JtL3dpbi9HRElPYmplY3RDb3VudGVyLmgKLSAg
ICBwbGF0Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmgKLSAgICBwbGF0Zm9ybS93aW4vSFduZERDLmgK
LSAgICBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmgKLSAgICBwbGF0Zm9ybS93aW4vU2Nyb2xs
YmFyVGhlbWVXaW4uaAotICAgIHBsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVEQi5oCi0gICAg
cGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudVdpbi5oCi0gICAgcGxhdGZvcm0vd2luL1N5c3Rl
bUluZm8uaAotICAgIHBsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuaAotICAgIHBsYXRmb3JtL3dp
bi9XZWJDb3JlQnVuZGxlV2luLmgKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZUluc3RhbmNlSGFu
ZGxlLmgKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZVRleHRSZW5kZXJlci5oCi0gICAgcGxhdGZv
cm0vd2luL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5oCi0gICAgcGxhdGZvcm0vd2luL1dpbmRv
d01lc3NhZ2VMaXN0ZW5lci5oCi0gICAgcGxhdGZvcm0vd2luL1dpbmRvd3NUb3VjaC5oCi0pCi0K
LWxpc3QoQVBQRU5EIFdlYkNvcmVfVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMKLSAgICAke1dFQkNP
UkVfRElSfS9jc3MvdGhlbWVXaW4uY3NzCi0gICAgJHtXRUJDT1JFX0RJUn0vY3NzL3RoZW1lV2lu
UXVpcmtzLmNzcwotKQotCi1saXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUwotICAgICR7RGly
ZWN0WF9MSUJSQVJJRVN9Ci0gICAgY29tY3RsMzIKLSAgICBjcnlwdDMyCi0gICAgaXBobHBhcGkK
LSAgICBycGNydDQKLSAgICBzaGx3YXBpCi0gICAgdXNwMTAKLSAgICB2ZXJzaW9uCi0gICAgd2lu
bW0KLSAgICB3czJfMzIKLSkKLQotbGlzdChBUFBFTkQgV2ViQ29yZVRlc3RTdXBwb3J0X0xJQlJB
UklFUwotICAgIHNobHdhcGkKLSkKLQotbWFrZV9kaXJlY3RvcnkoJHtDTUFLRV9SVU5USU1FX09V
VFBVVF9ESVJFQ1RPUll9L1dlYktpdC5yZXNvdXJjZXMvZW4ubHByb2opCi1maWxlKENPUFkKLSAg
ICAiJHtXRUJDT1JFX0RJUn0vZW4ubHByb2ovTG9jYWxpemFibGUuc3RyaW5ncyIKLSAgICAiJHtX
RUJDT1JFX0RJUn0vZW4ubHByb2ovbWVkaWFDb250cm9sc0xvY2FsaXplZFN0cmluZ3MuanMiCi0g
ICAgREVTVElOQVRJT04KLSAgICAke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vV2Vi
S2l0LnJlc291cmNlcy9lbi5scHJvagotKQotZmlsZShDT1BZCi0gICAgIiR7V0VCQ09SRV9ESVJ9
L01vZHVsZXMvbWVkaWFjb250cm9scy9tZWRpYUNvbnRyb2xzQXBwbGUuY3NzIgotICAgICIke1dF
QkNPUkVfRElSfS9Nb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250cm9sc0FwcGxlLmpzIgot
ICAgIERFU1RJTkFUSU9OCi0gICAgJHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1dl
YktpdC5yZXNvdXJjZXMKLSkKLQotc2V0KFdlYkNvcmVfT1VUUFVUX05BTUUgV2ViQ29yZSR7REVC
VUdfU1VGRklYfSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCShyZXZpc2lvbiAyODc4
MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMzksMTQgKzM5LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAKIAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcldpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9h
dFJlY3REaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRTaXplRGly
ZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udERlc2NyaXB0aW9uV2luLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcApAQCAtNjAsNyArNTUsNiBA
QCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW50U2l6ZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2
YXRlRnVsbHNjcmVlbldpbmRvdy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxl
Rm9udERhdGFXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9u
TWF0cml4RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0
aW9uTWF0cml4V2luLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay93aW4vRG93bmxvYWRCdW5k
bGVXaW4uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxMikKKysrIFNv
dXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBA
QAorMjAyMi0wMS0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVtb3ZlIHN1cHBvcnQgZm9yIERpcmVjdDJECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHBhbC9QbGF0Zm9ybUZUVy5jbWFrZTogUmVtb3ZlZC4KKwog
MjAyMi0wMS0wNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjg3Njk4LgpJbmRleDogU291cmNlL1dl
YkNvcmUvUEFML3BhbC9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL1BsYXRmb3JtRlRXLmNtYWtlCShub25leGlzdGVudCkKQEAgLTEs
MjYgKzAsMCBAQAotbGlzdChBUFBFTkQgUEFMX1BVQkxJQ19IRUFERVJTCi0pCi0KLWxpc3QoQVBQ
RU5EIFBBTF9TT1VSQ0VTCi0gICAgY3J5cHRvL29wZW5zc2wvQ3J5cHRvRGlnZXN0T3BlblNTTC5j
cHAKLQotICAgIGNyeXB0by93aW4vQ3J5cHRvRGlnZXN0V2luLmNwcAotCi0gICAgc3lzdGVtL0Ns
b2NrR2VuZXJpYy5jcHAKLQotICAgIHN5c3RlbS93aW4vU291bmRXaW4uY3BwCi0KLSAgICB0ZXh0
L0tpbGxSaW5nLmNwcAotCi0gICAgd2luL0xvZ2dpbmdXaW4uY3BwCi0pCi0KLWxpc3QoQVBQRU5E
IFBBTF9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAiJHtXRUJLSVRfTElCUkFSSUVT
X0RJUn0vaW5jbHVkZSIKLSkKLQotbGlzdChBUFBFTkQgUEFMX1BSSVZBVEVfTElCUkFSSUVTCi0g
ICAgT3BlblNTTDo6Q3J5cHRvCi0pCi0KLXNldChQQUxfT1VUUFVUX05BTUUgUEFMJHtERUJVR19T
VUZGSVh9KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWVkaWFBRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNl
clByZWZlcmVuY2VzTWVkaWFBRi5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01lZGlhQUYuaCIKIAotI2lmIEVOQUJMRShWSURFTykgJiYgIVVTRShE
SVJFQ1QyRCkKKyNpZiBFTkFCTEUoVklERU8pCiAKICNpbmNsdWRlICJBdWRpb1RyYWNrTGlzdC5o
IgogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgpAQCAtOTk1LDQgKzk5NSw0IEBAIFZl
Y3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gQ2FwdGlvblVzZXJQcmUKICAgICAKIH0KIAotI2VuZGlm
IC8vIEVOQUJMRShWSURFTykgJiYgIVVTRShESVJFQ1QyRCkKKyNlbmRpZiAvLyBFTkFCTEUoVklE
RU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZl
cmVuY2VzTWVkaWFBRi5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcg
KzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoVklERU8pICYmICFVU0UoRElS
RUNUMkQpCisjaWYgRU5BQkxFKFZJREVPKQogCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5o
IgogI2luY2x1ZGUgIkNhcHRpb25QcmVmZXJlbmNlc0RlbGVnYXRlLmgiCkBAIC0xMjAsNCArMTIw
LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5B
QkxFKFZJREVPKSAmJiAhVVNFKERJUkVDVDJEKQorI2VuZGlmIC8vIEVOQUJMRShWSURFTykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luRGlyZWN0MkQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luRGlyZWN0MkQuY3BwCShyZXZp
c2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdpbkRpcmVjdDJE
LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZyYW1lV2luLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJCaXRtYXBJbmZv
LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgotI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgot
I2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
R0RJT2JqZWN0PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoY29uc3QgRnJhbWUqIGZyYW1lLCBJbnRS
ZWN0JiBpcikKLXsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGF1dG8gb2xkUGFpbnRCZWhhdmlvciA9IGZyYW1lLT52aWV3KCktPnBhaW50QmVoYXZpb3Io
KTsKLSAgICBmcmFtZS0+dmlldygpLT5zZXRQYWludEJlaGF2aW9yKG9sZFBhaW50QmVoYXZpb3Ig
fCBQYWludEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpOwotCi0gICAgdm9pZCog
Yml0cyA9IG51bGxwdHI7Ci0gICAgYXV0byBoZGMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNv
bXBhdGlibGVEQygwKSk7Ci0gICAgaW50IHcgPSBpci53aWR0aCgpOwotICAgIGludCBoID0gaXIu
aGVpZ2h0KCk7Ci0gICAgQml0bWFwSW5mbyBibXAgPSBCaXRtYXBJbmZvOjpjcmVhdGUoSW50U2l6
ZSh3LCBoKSk7Ci0KLSAgICBHRElPYmplY3Q8SEJJVE1BUD4gaGJtcCA9IGFkb3B0R0RJT2JqZWN0
KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYm1wLCBESUJfUkdCX0NPTE9SUywgc3RhdGljX2Nhc3Q8
dm9pZCoqPigmYml0cyksIDAsIDApKTsKLSAgICBpZiAoIWhibXApCi0gICAgICAgIHJldHVybiBo
Ym1wOwotCi0gICAgSEdESU9CSiBoYm1wT2xkID0gU2VsZWN0T2JqZWN0KGhkYy5nZXQoKSwgaGJt
cC5nZXQoKSk7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgU2VsZWN0T2JqZWN0KGhk
Yy5nZXQoKSwgaGJtcE9sZCk7Ci0KLSAgICBmcmFtZS0+dmlldygpLT5zZXRQYWludEJlaGF2aW9y
KG9sZFBhaW50QmVoYXZpb3IpOwotCi0gICAgcmV0dXJuIGhibXA7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1F
VHlwZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9N
SU1FVHlwZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2MSw3ICs0
NjEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8TUlNRVR5cGVSZWdpc3RyeVRocmVhZEdsCiAgICAgfQog
I2Vsc2UKICAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBzdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nID0gc3RkOjppbml0aWFsaXplcl9saXN0PFN0
cmluZz4gewotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykKICAgICAg
ICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVU
SSdzIHdoZW4gYSB3YXkgdG8gY29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVUSSByZWxpYWJseSBp
cyBmb3VuZC4KICAgICAgICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0IFBORywgSlBFRyBhbmQg
R0lGLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYwOTUyODY+LgogICAgICAgICAiaW1hZ2UvcG5nIl9z
LApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0VsbGkKICAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0VsbGlw
c2UocmVjdCk7CiB9CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cp
CiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7
CiAgICAgbV9wcmltYXJ5Q29udGV4dC5hcHBseVN0cm9rZVBhdHRlcm4oKTsKQEAgLTE4MCw3ICsx
ODAsNyBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsCiAgICAgbV9z
ZWNvbmRhcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CiB9CiAKLSNpZiBVU0UoQ0cp
IHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0NBTGF5ZXJDb250ZXh0KQogewogICAg
IG1fcHJpbWFyeUNvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogICAgIHZvaWQg
ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSNpZiBVU0UoQ0cpIHx8IFVT
RShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBm
aW5hbDsKICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKICNlbmRpZgpAQCAtNzQs
NyArNzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpIGZpbmFsOwogICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpIGZpbmFsOwogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNF
KENHKQogICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbDsKICAgICBib29s
IGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24gMjg3ODEy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjgsMzMgKzEyOCwyOCBAQCB2b2lkIEJpdG1hcEltYWdlOjpzZXRD
dXJyZW50RnJhbWVEZWNvZGluCiAgICAgbV9jdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1cyA9IGRl
Y29kaW5nU3RhdHVzOwogfQogCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpmcmFt
ZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVs
IHN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkK
K1JlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJ
Zk5lZWRlZChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkK
IHsKICAgICBpZiAoIWZyYW1lSGFzRnVsbFNpemVOYXRpdmVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1
YnNhbXBsaW5nTGV2ZWwpKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZTo6JXMg
LSAlcCAtIHVybDogJXMgW3N1YnNhbXBsaW5nTGV2ZWwgd2FzICVkLCByZXNhbXBsaW5nXSIsIF9f
RlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3Rh
dGljX2Nhc3Q8aW50PihmcmFtZVN1YnNhbXBsaW5nTGV2ZWxBdEluZGV4KGluZGV4KSkpOwogICAg
ICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgfQotI2lmIFVTRShESVJFQ1QyRCkK
LSAgICBtX3NvdXJjZS0+c2V0VGFyZ2V0Q29udGV4dCh0YXJnZXRDb250ZXh0KTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHRhcmdldENvbnRleHQpOwotI2VuZGlmCiAgICAgcmV0dXJuIG1fc291
cmNlLT5mcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoaW5kZXgsIHN1YnNhbXBsaW5nTGV2
ZWwpOwogfQogCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZShj
b25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCitSZWZQdHI8TmF0aXZlSW1hZ2U+
IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSgpCiB7Ci0gICAgcmV0dXJuIGZyYW1lSW1hZ2VBdElu
ZGV4Q2FjaGVJZk5lZWRlZCgwLCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0LCB0YXJnZXRDb250
ZXh0KTsKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKDAsIFN1YnNh
bXBsaW5nTGV2ZWw6OkRlZmF1bHQpOwogfQogCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcElt
YWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqIHRh
cmdldENvbnRleHQpCitSZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpCiB7Ci0gICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJ
Zk5lZWRlZChtX2N1cnJlbnRGcmFtZSwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgdGFyZ2V0
Q29udGV4dCk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChtX2N1
cnJlbnRGcmFtZSwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7CiB9CiAKLVJlZlB0cjxOYXRp
dmVJbWFnZT4gQml0bWFwSW1hZ2U6OnByZVRyYW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoYm9vbCByZXNwZWN0T3JpZW50YXRpb24sIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFy
Z2V0Q29udGV4dCkKK1JlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2U6OnByZVRyYW5zZm9y
bWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCByZXNwZWN0T3JpZW50YXRpb24pCiB7
Ci0gICAgYXV0byBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKHRhcmdldENvbnRl
eHQpOworICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAg
IGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBpbWFnZTsKIApAQCAtMTc4LDE4ICsxNzMsMTgg
QEAgUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6cHJlVHJhbgogfQogCiAjaWYgVVNF
KENHKQotUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0
KQorUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgYXV0byBp
bWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChpLCBTdWJzYW1wbGluZ0xldmVs
OjpEZWZhdWx0LCB0YXJnZXRDb250ZXh0KTsKKyAgICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1h
Z2VBdEluZGV4Q2FjaGVJZk5lZWRlZChpLCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKICAg
ICAgICAgaWYgKGltYWdlICYmIGltYWdlLT5zaXplKCkgPT0gc2l6ZSkKICAgICAgICAgICAgIHJl
dHVybiBpbWFnZTsKICAgICB9CiAKICAgICAvLyBGYWxsYmFjayB0byB0aGUgZmlyc3QgZnJhbWUg
aW1hZ2UgaWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQotICAgIHJldHVybiBmcmFtZUlt
YWdlQXRJbmRleENhY2hlSWZOZWVkZWQoMCwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgdGFy
Z2V0Q29udGV4dCk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZCgw
LCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKIH0KIAogVmVjdG9yPFJlZjxOYXRpdmVJbWFn
ZT4+IEJpdG1hcEltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKQpAQCAtMzAzLDcgKzI5OCw3IEBA
IEltYWdlRHJhd1Jlc3VsdCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGkKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlcXVlc3REZWNvZGluZzsK
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXhD
YWNoZUlmTmVlZGVkKG1fY3VycmVudEZyYW1lLCBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsLCAm
Y29udGV4dCk7CisgICAgICAgICAgICBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5l
ZWRlZChtX2N1cnJlbnRGcmFtZSwgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCk7CiAgICAgICAg
ICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAgLSB1cmw6ICVzIFthbiBpbWFn
ZSBmcmFtZSB3aWxsIGJlIGRlY29kZWQgc3luY2hyb25vdXNseV0iLCBfX0ZVTkNUSU9OX18sIHRo
aXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICB9CiAgICAg
ICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsMTEgKzE0MiwxMSBAQCBw
dWJsaWM6CiAjZW5kaWYKICNlbmRpZgogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5hdGl2
ZUltYWdlPiBuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgb3Zl
cnJpZGU7Ci0gICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRy
PE5hdGl2ZUltYWdlPiBwcmVUcmFuc2Zvcm1lZE5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGJv
b2wgcmVzcGVjdE9yaWVudGF0aW9uLCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikg
b3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJ
bWFnZSgpIG92ZXJyaWRlOworICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IHByZVRyYW5z
Zm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCByZXNwZWN0T3JpZW50YXRpb24p
IG92ZXJyaWRlOwogI2lmIFVTRShDRykKLSAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUlt
YWdlT2ZTaXplKGNvbnN0IEludFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0
cikgb3ZlcnJpZGU7CisgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZU9mU2l6ZShj
b25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPFJlZjxOYXRpdmVJbWFnZT4+IGZy
YW1lc05hdGl2ZUltYWdlcygpOwogI2VuZGlmCiAKQEAgLTE1OCw3ICsxNTgsNyBAQCBwcml2YXRl
OgogICAgIFdFQkNPUkVfRVhQT1JUIEJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gbnVsbHB0
cik7CiAKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBp
bmRleCkgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSW1hZ2VBdEluZGV4KGluZGV4KTsgfQotICAg
IFJlZlB0cjxOYXRpdmVJbWFnZT4gZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKHNpemVf
dCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogPSBudWxscHRyKTsKKyAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGZyYW1l
SW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJz
YW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKIAogICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNh
Y2hlZCBkYXRhLiBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAogICAgIC8v
IHRoZSBlbnRpcmUgZnJhbWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3VyY2Ug
dG8gZGVzdHJveQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAko
cmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMSArNDksNiBAQAogI2luY2x1ZGUgPHVzcDEwLmg+
CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLWludGVyZmFjZSBJRFdyaXRlRmFjdG9yeTU7
Ci1pbnRlcmZhY2UgSURXcml0ZUdkaUludGVyb3A7Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBGb250Q2FjaGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCShyZXZpc2lvbiAyODc4MTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDEwICs2Nyw2IEBAIGludGVyZmFjZSBJRFdyaXRlRm9udDsKIGlu
dGVyZmFjZSBJRFdyaXRlRm9udEZhY2U7CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSNp
bmNsdWRlIDxkd3JpdGVfMy5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRm9udERlc2NyaXB0aW9uOwpAQCAtMTE5LDkgKzExNSw2IEBAIHB1YmxpYzoKICNpZiBVU0Uo
Q09SRV9URVhUKQogICAgIEZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiwgQ1RGb250
UmVmLCBDR0ZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50
aGV0aWNPYmxpcXVlLCBib29sIHVzZUdESSk7CiAjZW5kaWYKLSNpZiBVU0UoRElSRUNUMkQpCi0g
ICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+JiYsIENPTVB0cjxJRFdyaXRlRm9u
dD4mJiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlx
dWUsIGJvb2wgdXNlR0RJKTsKLSNlbmRpZgogI2lmIFVTRShDQUlSTykKICAgICBGb250UGxhdGZv
cm1EYXRhKEdESU9iamVjdDxIRk9OVD4sIGNhaXJvX2ZvbnRfZmFjZV90KiwgZmxvYXQgc2l6ZSwg
Ym9vbCBib2xkLCBib29sIGl0YWxpYywgY29uc3QgQ3JlYXRpb25EYXRhKiA9IG51bGxwdHIpOwog
I2VuZGlmCkBAIC0xNjMsMTEgKzE1Niw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzVmFyaWF0
aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFyaWF0aW9uczsgfQogCi0jaWYgVVNFKERJUkVD
VDJEKQotICAgIElEV3JpdGVGb250KiBkd0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX2R3Rm9udC5n
ZXQoKTsgfQotICAgIElEV3JpdGVGb250RmFjZSogZHdGb250RmFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZHdGb250RmFjZS5nZXQoKTsgfQotI2VuZGlmCi0KICAgICBib29sIGlzRml4ZWRQaXRjaCgp
IGNvbnN0OwogICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAgICBi
b29sIHN5bnRoZXRpY0JvbGQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY0JvbGQ7IH0KQEAg
LTI2OCwxMSArMjU2LDYgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIFJldGFpblB0cjxDVEZvbnRS
ZWY+IG1fY3RGb250OwogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElE
V3JpdGVGb250PiBtX2R3Rm9udDsKLSAgICBDT01QdHI8SURXcml0ZUZvbnRGYWNlPiBtX2R3Rm9u
dEZhY2U7Ci0jZW5kaWYKLQogI2lmIFVTRShDQUlSTykKICAgICBSZWZQdHI8Y2Fpcm9fc2NhbGVk
X2ZvbnRfdD4gbV9zY2FsZWRGb250OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDE5ICszOSwxMCBAQAogI2luY2x1ZGUgIkdyYWRpZW50UmVuZGVyZXJDRy5oIgogI2VuZGlmCiAK
LSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jZW5kaWYKLQogI2lmIFVT
RShDRykKIHR5cGVkZWYgc3RydWN0IENHQ29udGV4dCogQ0dDb250ZXh0UmVmOwogI2VuZGlmCiAK
LSNpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQyRDFCcnVzaDsKLWludGVyZmFjZSBJRDJE
MVJlbmRlclRhcmdldDsKLSNlbmRpZgotCiAjaWYgVVNFKENBSVJPKQogdHlwZWRlZiBzdHJ1Y3Qg
X2NhaXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90OwogI2VuZGlmCkBAIC0xMTgsMTAgKzEwOSw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50KENHQ29udGV4dFJlZik7CiAjZW5kaWYKIAotI2lm
IFVTRShESVJFQ1QyRCkKLSAgICBJRDJEMUJydXNoKiBjcmVhdGVCcnVzaChJRDJEMVJlbmRlclRh
cmdldCopOwotI2VuZGlmCi0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8UmVmPEdyYWRpZW50Pj4gZGVjb2RlKERlY29kZXImKTsKIApAQCAt
MTM5LDEwICsxMjYsNiBAQCBwcml2YXRlOgogI2lmIFVTRShDRykKICAgICBzdGQ6Om9wdGlvbmFs
PEdyYWRpZW50UmVuZGVyZXJDRz4gbV9wbGF0Zm9ybVJlbmRlcmVyOwogI2VuZGlmCi0KLSNpZiBV
U0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEMkQxQnJ1c2g+IG1fYnJ1c2g7Ci0jZW5kaWYKIH07
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgR3JhZGllbnQ6OkxpbmVhckRhdGE6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDI4Nzgx
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MywxNSArNDMsNiBAQAogCiAjaWYgVVNFKENHKQogdHlwZWRl
ZiBzdHJ1Y3QgQ0dDb250ZXh0IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwotI2VsaWYgVVNFKERJ
UkVDVDJEKQotaW50ZXJmYWNlIElEMkQxRENSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFS
ZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFGYWN0b3J5OwotaW50ZXJmYWNlIElEMkQxU29s
aWRDb2xvckJydXNoOwotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQ7Ci19Ci10eXBlZGVmIFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0OwogI2VsaWYgVVNFKENBSVJPKQogbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87CkBAIC0yNjksMTUgKzI2MCw2IEBAIHB1
YmxpYzogICAKICAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoKSA9IGRlZmF1bHQ7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0KCk7CiAKLSNpZiBV
U0UoRElSRUNUMkQpCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG1vdmUgdG8gR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQKLSAgICBlbnVtIGNsYXNzIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBl
IDogdWludDhfdCB7Ci0gICAgICAgIENQVU1lbW9yeSwKLSAgICAgICAgR1BVTWVtb3J5Ci0gICAg
fTsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqLCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSk7Ci0jZW5kaWYKLQogICAgIHZpcnR1
YWwgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG51bGxwdHI7IH0KIApAQCAtMzcyLDcgKzM1NCw3IEBAIHB1YmxpYzogICAKICAg
ICAKICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrLnNpemUo
KTsgfQogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNFKENHKQogICAgIC8v
IEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1YmxpYyBHcmFwaGljc0NvbnRleHQgbWV0
aG9kcz8KICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAwOwpAQCAtNTU3LDI2ICs1MzksNiBAQCBw
dWJsaWM6ICAgCiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRl
cHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRp
ZgogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIEdyYXBoaWNzQ29udGV4dChIREMsIElEMkQxRENS
ZW5kZXJUYXJnZXQqKiwgUkVDVCwgYm9vbCBoYXNBbHBoYSA9IGZhbHNlKTsgLy8gRklYTUU6IFRv
IGJlIHJlbW92ZWQuCi0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSUQyRDFGYWN0b3J5KiBz
eXN0ZW1GYWN0b3J5KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxUmVuZGVyVGFy
Z2V0KiBkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJl
Z2luRHJhdygpOwotICAgIEQyRDFfQ09MT1JfRiBjb2xvcldpdGhHbG9iYWxBbHBoYShjb25zdCBD
b2xvciYpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kRHJhdygpOwotICAgIHZv
aWQgZmx1c2goKTsKLQotICAgIElEMkQxQnJ1c2gqIHNvbGlkU3Ryb2tlQnJ1c2goKSBjb25zdDsK
LSAgICBJRDJEMUJydXNoKiBzb2xpZEZpbGxCcnVzaCgpIGNvbnN0OwotICAgIElEMkQxQnJ1c2gq
IHBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0OwotICAgIElEMkQxQnJ1c2gqIHBhdHRlcm5GaWxs
QnJ1c2goKSBjb25zdDsKLSAgICBJRDJEMVN0cm9rZVN0eWxlKiBwbGF0Zm9ybVN0cm9rZVN0eWxl
KCkgY29uc3Q7Ci0KLSAgICBJRDJEMVNvbGlkQ29sb3JCcnVzaCogYnJ1c2hXaXRoQ29sb3IoY29u
c3QgQ29sb3ImKTsKLSNlbmRpZgotCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCShyZXZpc2lvbiAyODc4MTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTYsMTAgKzE1NiwxMCBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFRpbGVSdWxlIHsgU3Ry
ZXRjaFRpbGUsIFJvdW5kVGlsZSwgU3BhY2VUaWxlLCBSZXBlYXRUaWxlIH07CiAKLSAgICB2aXJ0
dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0
KiA9IG51bGxwdHIpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJlZlB0cjxOYXRp
dmVJbWFnZT4gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0
KiA9IG51bGxwdHIpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJlZlB0cjxOYXRp
dmVJbWFnZT4gcHJlVHJhbnNmb3JtZWROYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShib29sID0g
dHJ1ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIHsgcmV0dXJuIG51bGxwdHI7
IH0KLSAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VPZlNpemUoY29u
c3QgSW50U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSB7IHJldHVybiBu
dWxscHRyOyB9CisgICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlKCkg
eyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFs
IFJlZlB0cjxOYXRpdmVJbWFnZT4gcHJlVHJhbnNmb3JtZWROYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZShib29sID0gdHJ1ZSkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgUmVmUHRy
PE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4g
bnVsbHB0cjsgfQogCiAgICAgLy8gQWNjZXNzb3JzIGZvciBuYXRpdmUgaW1hZ2UgZm9ybWF0cy4K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURl
Y29kZXIuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw2IEBA
CiAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyQ0cuaCIKLSNlbGlmIFVTRShE
SVJFQ1QyRCkKLSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgogI2Vsc2UKICNpbmNs
dWRlICJTY2FsYWJsZUltYWdlRGVjb2Rlci5oIgogI2VuZGlmCkBAIC0xMDcsOCArMTA1LDYgQEAg
UmVmUHRyPEltYWdlRGVjb2Rlcj4gSW1hZ2VEZWNvZGVyOjpjcmVhdAogCiAjaWYgVVNFKENHKQog
ICAgIHJldHVybiBJbWFnZURlY29kZXJDRzo6Y3JlYXRlKGRhdGEsIGFscGhhT3B0aW9uLCBnYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbik7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgcmV0dXJu
IEltYWdlRGVjb2RlckRpcmVjdDJEOjpjcmVhdGUoZGF0YSwgYWxwaGFPcHRpb24sIGdhbW1hQW5k
Q29sb3JQcm9maWxlT3B0aW9uKTsKICNlbHNlCiAgICAgcmV0dXJuIFNjYWxhYmxlSW1hZ2VEZWNv
ZGVyOjpjcmVhdGUoZGF0YSwgYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9u
KTsKICNlbmRpZgpAQCAtMTE5LDkgKzExNSw2IEBAIGJvb2wgSW1hZ2VEZWNvZGVyOjpzdXBwb3J0
c01lZGlhVHlwZShNZWQKICNpZiBVU0UoQ0cpCiAgICAgaWYgKEltYWdlRGVjb2RlckNHOjpzdXBw
b3J0c01lZGlhVHlwZSh0eXBlKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZWxpZiBVU0UoRElS
RUNUMkQpCi0gICAgaWYgKEltYWdlRGVjb2RlckRpcmVjdDJEOjpzdXBwb3J0c01lZGlhVHlwZSh0
eXBlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQogICAgIGlmIChTY2FsYWJsZUltYWdl
RGVjb2Rlcjo6c3VwcG9ydHNNZWRpYVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVy
LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsMTAgKzEzMyw2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpID0gMDsKIAotI2lmIFVT
RShESVJFQ1QyRCkKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VGFyZ2V0Q29udGV4dChJRDJEMVJlbmRl
clRhcmdldCopID0gMDsKLSNlbmRpZgotCiBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VEZWNvZGVyKCkg
PSBkZWZhdWx0OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
MTEgKzM0LDYgQEAKICNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgogI2luY2x1ZGUgPHd0
Zi9VUkwuaD4KIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2VuZGlmCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKEJpdG1hcEltYWdlKiBp
bWFnZSwgQWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9u
IGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQpAQCAtNjkzLDE0ICs2ODgsNiBAQCBJbWFnZU9y
aWVudGF0aW9uIEltYWdlU291cmNlOjpmcmFtZU9yaWVuCiAgICAgcmV0dXJuIGZyYW1lQXRJbmRl
eENhY2hlSWZOZWVkZWQoaW5kZXgsIEltYWdlRnJhbWU6OkNhY2hpbmc6Ok1ldGFkYXRhKS5vcmll
bnRhdGlvbigpOwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotdm9pZCBJbWFnZVNvdXJjZTo6c2V0
VGFyZ2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCi17Ci0g
ICAgaWYgKGlzRGVjb2RlckF2YWlsYWJsZSgpICYmIHRhcmdldENvbnRleHQpCi0gICAgICAgIG1f
ZGVjb2Rlci0+c2V0VGFyZ2V0Q29udGV4dCh0YXJnZXRDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+cmVuZGVyVGFyZ2V0KCkpOwotfQotI2VuZGlmCi0KIFJlZlB0cjxOYXRpdmVJbWFnZT4gSW1h
Z2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxp
bmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKQogewogICAgIGlmICghaXNEZWNvZGVyQXZhaWxhYmxl
KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw5ICsxMjIsNiBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgU2Vjb25kcyBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXpl
X3QpOwogICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90
KTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIHNldFRhcmdldENvbnRleHQoY29uc3Qg
R3JhcGhpY3NDb250ZXh0Kik7Ci0jZW5kaWYKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGNyZWF0
ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5n
TGV2ZWw6OkRlZmF1bHQpOwogICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gZnJhbWVJbWFnZUF0SW5k
ZXgoc2l6ZV90KTsKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGZyYW1lSW1hZ2VBdEluZGV4Q2Fj
aGVJZk5lZWRlZChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpE
ZWZhdWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFw
aGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotI2lmIFVT
RShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykKICAgICB2b2lkIHNldElzQ0FMYXll
ckNvbnRleHQoYm9vbCkgZmluYWwgeyB9CiAgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29u
c3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpAQCAtNTcsNyArNTcsNyBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KIAot
I2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykKICAgICB2b2lkIHNldElz
QWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQogI2VuZGlmCiAKQEAgLTY3LDcgKzY3
LDcgQEAgcHJpdmF0ZToKIAogICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHsgfTsgfQogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNFKENH
KQogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWwgeyB9CiAgICAgdm9pZCBhcHBs
eUZpbGxQYXR0ZXJuKCkgZmluYWwgeyB9CiAgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikg
ZmluYWwgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNw
cAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi0jaWYgIVVTRShESVJFQ1QyRCkKIGZsb2F0IFBhdGg6Omxlbmd0aCgpIGNvbnN0
CiB7CiAgICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxT
dGF0ZTo6QWN0aW9uOjpUb3RhbExlbmd0aCk7CkBAIC01MSw3ICs1MCw2IEBAIGZsb2F0IFBhdGg6
Omxlbmd0aCgpIGNvbnN0CiAKICAgICByZXR1cm4gdHJhdmVyc2FsU3RhdGUudG90YWxMZW5ndGgo
KTsKIH0KLSNlbmRpZgogCiAjaWYgIUhBVkUoQ0dQQVRIX0dFVF9OVU1CRVJfT0ZfRUxFTUVOVFMp
CiAKQEAgLTEyNSw3ICsxMjMsNyBAQCB2b2lkIFBhdGg6OmFkZFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91CiAgICAgfQogCiAgICAgaWYgKHN0cmF0ZWd5ID09IFJvdW5kZWRSZWN0U3RyYXRlZ3k6
OlByZWZlck5hdGl2ZSkgewotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShD
RykKICAgICAgICAgcGxhdGZvcm1BZGRQYXRoRm9yUm91bmRlZFJlY3QocmVjdCwgcmFkaWkudG9w
TGVmdCgpLCByYWRpaS50b3BSaWdodCgpLCByYWRpaS5ib3R0b21MZWZ0KCksIHJhZGlpLmJvdHRv
bVJpZ2h0KCkpOwogICAgICAgICByZXR1cm47CiAjZW5kaWYKQEAgLTUyNCw3ICs1MjIsNyBAQCBz
dGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gUGF0aDo6Ym91bmRpbmdSCiAKICNlbmRpZgogCi0jaWYg
IVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkKKyNpZiAhVVNFKENHKQogUGF0aCBQYXRoOjpwb2x5
Z29uUGF0aEZyb21Qb2ludHMoY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQ+JiBwb2ludHMpCiB7CiAg
ICAgUGF0aCBwYXRoOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGgu
aAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyMCArNDEsNiBAQAogI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9DR1BhdGguaD4KIHR5cGVkZWYgc3RydWN0IENHUGF0aCBQbGF0Zm9ybVBhdGg7CiAK
LSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJDT01QdHIuaCIKLQotaW50ZXJmYWNlIElE
MkQxR2VvbWV0cnk7Ci1pbnRlcmZhY2UgSUQyRDFHZW9tZXRyeUdyb3VwOwotaW50ZXJmYWNlIElE
MkQxUGF0aEdlb21ldHJ5OwotaW50ZXJmYWNlIElEMkQxR2VvbWV0cnlTaW5rOwotCi10eXBlZGVm
IElEMkQxR2VvbWV0cnlHcm91cCBQbGF0Zm9ybVBhdGg7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOwotfQotCiAjZWxpZiBVU0UoQ0FJUk8pCiAj
aW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKIApAQCAtNjksOCArNTUsNiBAQCB0eXBlZGVmIFBsYXRm
b3JtUGF0aCogUGxhdGZvcm1QYXRoUHRyOwogCiAjaWYgVVNFKENHKQogdXNpbmcgUGxhdGZvcm1Q
YXRoU3RvcmFnZVR5cGUgPSBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj47Ci0jZWxpZiBVU0Uo
RElSRUNUMkQpCi11c2luZyBQbGF0Zm9ybVBhdGhTdG9yYWdlVHlwZSA9IENPTVB0cjxJRDJEMUdl
b21ldHJ5R3JvdXA+OwogI2Vsc2UKIHVzaW5nIFBsYXRmb3JtUGF0aFN0b3JhZ2VUeXBlID0gUGxh
dGZvcm1QYXRoUHRyOwogI2VuZGlmCkBAIC0xODksMTAgKzE3Myw3IEBAIHB1YmxpYzoKIAogICAg
IC8vIFRvIGtlZXAgUGF0aCgpIGNoZWFwLCBpdCBkb2VzIG5vdCBhbGxvY2F0ZSBhIFBsYXRmb3Jt
UGF0aCBpbW1lZGlhdGVseQogICAgIC8vIG1lYW5pbmcgUGF0aDo6cGxhdGZvcm1QYXRoKCkgY2Fu
IHJldHVybiBudWxsLgotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBGbG9hdFJlY3QgZmFzdEJvdW5k
aW5nUmVjdEZvclN0cm9rZShjb25zdCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpIGNvbnN0Owot
ICAgIFBsYXRmb3JtUGF0aFB0ciBwbGF0Zm9ybVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGgu
Z2V0KCk7IH0KLSNlbGlmIFVTRShDRykKKyNpZiBVU0UoQ0cpCiAgICAgV0VCQ09SRV9FWFBPUlQg
UGxhdGZvcm1QYXRoUHRyIHBsYXRmb3JtUGF0aCgpIGNvbnN0OwogI2VsaWYgVVNFKENBSVJPKQog
ICAgIGNhaXJvX3QqIGNhaXJvUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5nZXQoKTsgfQpA
QCAtMjE3LDE5ICsxOTgsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRCZXppZXJzRm9yUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVz
LCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRv
bUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpOwogCi0jaWYg
VVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNFKENHKQogICAgIHZvaWQgcGxhdGZvcm1B
ZGRQYXRoRm9yUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiB0
b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9h
dFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRp
dXMpOwogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgdm9pZCBhcHBlbmRHZW9tZXRy
eShJRDJEMUdlb21ldHJ5Kik7Ci0gICAgdm9pZCBjcmVhdGVHZW9tZXRyeVdpdGhGaWxsTW9kZShX
aW5kUnVsZSwgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4mKSBjb25zdDsKLQotICAgIHZvaWQg
b3BlbkZpZ3VyZUF0Q3VycmVudFBvaW50SWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIGNsb3NlQW55
T3Blbkdlb21ldHJpZXModW5zaWduZWQgZmlndXJlRW5kU3R5bGUpIGNvbnN0OwotICAgIHZvaWQg
Y2xlYXJHZW9tZXRyaWVzKCk7Ci0jZW5kaWYKLQogI2lmbmRlZiBOREVCVUcKICAgICB2b2lkIGR1
bXAoKSBjb25zdDsKICNlbmRpZgpAQCAtMjgwLDEyICsyNTIsNiBAQCBwcml2YXRlOgogICAgIG11
dGFibGUgUGxhdGZvcm1QYXRoU3RvcmFnZVR5cGUgbV9wYXRoOwogI2VuZGlmCiAKLSNpZiBVU0Uo
RElSRUNUMkQpCi0gICAgVmVjdG9yPElEMkQxR2VvbWV0cnkqPiBtX2dlb21ldHJpZXM7Ci0gICAg
bXV0YWJsZSBDT01QdHI8SUQyRDFHZW9tZXRyeVNpbms+IG1fYWN0aXZlUGF0aDsKLSAgICBtdXRh
YmxlIGJvb2wgbV9maWd1cmVJc09wZW5lZCB7IGZhbHNlIH07Ci0jZW5kaWYKLQogI2lmIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQogICAgIElubGluZVBhdGhEYXRhIG1faW5saW5lRGF0YTsKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAko
cmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMyArMzYsNiBAQAogI2lmIFVTRShDRykKIHR5
cGVkZWYgc3RydWN0IENHUGF0dGVybiogQ0dQYXR0ZXJuUmVmOwogdHlwZWRlZiBSZXRhaW5QdHI8
Q0dQYXR0ZXJuUmVmPiBQbGF0Zm9ybVBhdHRlcm5QdHI7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi1p
bnRlcmZhY2UgSUQyRDFCaXRtYXBCcnVzaDsKLXR5cGVkZWYgSUQyRDFCaXRtYXBCcnVzaCogUGxh
dGZvcm1QYXR0ZXJuUHRyOwotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ7Ci19Ci10eXBlZGVmIFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dERpcmVjdDJE
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwogI2VsaWYgVVNFKENBSVJPKQogdHlwZWRlZiBzdHJ1
Y3QgX2NhaXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90OwogdHlwZWRlZiBjYWlyb19wYXR0ZXJu
X3QqIFBsYXRmb3JtUGF0dGVyblB0cjsKQEAgLTc3LDExICs3MCw4IEBAIHB1YmxpYzoKICAgICBj
b25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJz
OyB9CiAKICAgICAvLyBQYXR0ZXJuIHNwYWNlIGlzIGFuIGFic3RyYWN0IHNwYWNlIHRoYXQgbWFw
cyB0byB0aGUgZGVmYXVsdCB1c2VyIHNwYWNlIGJ5IHRoZSB0cmFuc2Zvcm1hdGlvbiAndXNlclNw
YWNlVHJhbnNmb3JtJwotI2lmICFVU0UoRElSRUNUMkQpCiAgICAgUGxhdGZvcm1QYXR0ZXJuUHRy
IGNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRy
YW5zZm9ybSkgY29uc3Q7Ci0jZWxzZQotICAgIFBsYXRmb3JtUGF0dGVyblB0ciBjcmVhdGVQbGF0
Zm9ybVBhdHRlcm4oY29uc3QgR3JhcGhpY3NDb250ZXh0JiwgZmxvYXQgYWxwaGEsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtKSBjb25zdDsKLSNlbmRpZgorCiAgICAg
dm9pZCBzZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAg
ICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7
IHJldHVybiBtX3BhcmFtZXRlcnMucGF0dGVyblNwYWNlVHJhbnNmb3JtOyB9OwogICAgIGJvb2wg
cmVwZWF0WCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy5yZXBlYXRYOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oCShy
ZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAjaWYgVVNFKENHKQogdXNpbmcgUGxhdGZvcm1JbWFnZVB0ciA9IFJldGFpblB0
cjxDR0ltYWdlUmVmPjsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLXVzaW5nIFBsYXRmb3JtSW1hZ2VQ
dHIgPSBDT01QdHI8SUQyRDFCaXRtYXA+OwogI2VsaWYgVVNFKENBSVJPKQogdXNpbmcgUGxhdGZv
cm1JbWFnZVB0ciA9IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+OwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1
ZmZlci5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDYg
QEAKIAogI2lmIFVTRShDRykKICNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5o
IgotI2VsaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kLmgiCiAjZWxpZiBVU0UoQ0FJUk8pCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQuaCIKICNlbmRpZgpAQCAtNDQsOCArNDIsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICNpZiBVU0UoQ0cpCiB1c2luZyBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNr
ZW5kID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi11
c2luZyBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ7CiAjZWxpZiBVU0UoQ0FJUk8pCiB1c2luZyBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZm
ZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ7CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZm
ZXJCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsNiBAQAogCiAjaWYgVVNFKENHKQogI2luY2x1
ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKICNlbGlmIFVTRShDQUlSTykKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgogI2VuZGlmCkBAIC0zNyw4ICszNSw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShDRykKIHVzaW5nIFBsYXRmb3JtSW1hZ2VC
dWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ7Ci0jZWxpZiBVU0UoRElSRUNUMkQp
Ci11c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kOwogI2VsaWYgVVNFKENBSVJPKQogdXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tl
bmQgPSBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL0NETVNlc3Npb25BVkZvdW5kYXRp
b25DRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL2NmL0NETVNlc3Npb25BVkZvdW5kYXRpb25DRi5jcHAJKHJldmlzaW9uIDI4
NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9j
Zi9DRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNCAr
NTMsNiBAQCBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0Y6OkNETVNlc3Npb25BVkZvCiAKIFJlZlB0
cjxVaW50OEFycmF5PiBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0Y6OmdlbmVyYXRlS2V5UmVxdWVz
dChjb25zdCBTdHJpbmcmLCBVaW50OEFycmF5KiBpbml0RGF0YSwgU3RyaW5nJiBkZXN0aW5hdGlv
blVSTCwgdW5zaWduZWQgc2hvcnQmIGVycm9yQ29kZSwgdWludDMyX3QmIHN5c3RlbUNvZGUpCiB7
Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIFVOVVNFRF9QQVJBTShpbml0RGF0YSk7Ci0gICAgVU5V
U0VEX1BBUkFNKGRlc3RpbmF0aW9uVVJMKTsKLSAgICBVTlVTRURfUEFSQU0oZXJyb3JDb2RlKTsK
LSAgICBVTlVTRURfUEFSQU0oc3lzdGVtQ29kZSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gbnVsbHB0cjsKLSNlbHNlCiAgICAgU3RyaW5nIGtleVVSSTsKICAgICBTdHJpbmcg
a2V5SUQ7CiAgICAgUmVmUHRyPFVpbnQ4QXJyYXk+IGNlcnRpZmljYXRlOwpAQCAtMTAyLDcgKzk0
LDYgQEAgUmVmUHRyPFVpbnQ4QXJyYXk+IENETVNlc3Npb25BVkZvdW5kYXRpbwogCiAgICAgYXV0
byBrZXlSZXF1ZXN0QnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShDRkRhdGFHZXRCeXRlUHRy
KGtleVJlcXVlc3QuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoa2V5UmVxdWVzdC5nZXQoKSkpOwog
ICAgIHJldHVybiBVaW50OEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShrZXlSZXF1ZXN0QnVmZmVy
KSwgMCwga2V5UmVxdWVzdEJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLSNlbmRpZgogfQogCiB2b2lk
IENETVNlc3Npb25BVkZvdW5kYXRpb25DRjo6cmVsZWFzZUtleXMoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbkNGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
Q0YuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OTQsMTEgKzg5NCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uQ0Y6OnAKICAgICAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoMS4w
ZiwgLTEuMGYpKTsKICAgICAgICAgY29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KEludGVycG9sYXRpb25RdWFsaXR5OjpMb3cpOwogICAgICAgICBGbG9hdFJlY3QgcGFpbnRSZWN0
KEZsb2F0UG9pbnQoKSwgcmVjdC5zaXplKCkpOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAg
bm90SW1wbGVtZW50ZWQoKTsKLSNlbHNlCiAgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBDR1JlY3RNYWtlKDAsIDAsIHBhaW50UmVjdC53aWR0aCgp
LCBwYWludFJlY3QuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7Ci0jZW5kaWYKICAgICAgICAgY29u
dGV4dC5yZXN0b3JlKCk7CiAgICAgICAgIGltYWdlID0gMDsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudElt
YWdlLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MiwxNiAr
MzYyLDEyIEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhd1BERlBhZ2UoR3JhcGgKIAogICAg
IGNvbnRleHQudHJhbnNsYXRlKC1tX2Nyb3BCb3gubG9jYXRpb24oKSk7CiAKLSNpZiBVU0UoRElS
RUNUMkQpCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbHNlCiAgICAgLy8gQ0dQREYgcGFnZXMg
YXJlIGluZGV4ZWQgZnJvbSAxLgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIENHQ29udGV4dERy
YXdQREZQYWdlV2l0aEFubm90YXRpb25zKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIENHUERG
RG9jdW1lbnRHZXRQYWdlKG1fZG9jdW1lbnQuZ2V0KCksIDEpLCBudWxscHRyKTsKICNlbHNlCiAg
ICAgQ0dDb250ZXh0RHJhd1BERlBhZ2UoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgQ0dQREZE
b2N1bWVudEdldFBhZ2UobV9kb2N1bWVudC5nZXQoKSwgMSkpOwogI2VuZGlmCi0jZW5kaWYKIH0K
IAogI2VuZGlmIC8vICFVU0UoUERGS0lUX0ZPUl9QREZET0NVTUVOVElNQUdFKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNyArMTg5LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KIAotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQor
I2lmIFVTRShDRykKICAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWwgeyB9
CiAgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQpAQCAt
MjIwLDcgKzIyMCw3IEBAIHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0jaWYgVVNFKENHKSB8fCBVU0Uo
RElSRUNUMkQpCisjaWYgVVNFKENHKQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlTdHJv
a2VQYXR0ZXJuKCkgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseUZpbGxQYXR0
ZXJuKCkgZmluYWw7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwCShy
ZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
dHlwZS9PcGVuVHlwZU1hdGhEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDEwICsyNTks
NiBAQCBPcGVuVHlwZU1hdGhEYXRhOjpPcGVuVHlwZU1hdGhEYXRhKGNvbnN0CiAgICAgOiBtX21h
dGhGb250KGZvbnQuY3JlYXRlT3BlblR5cGVNYXRoSGFyZkJ1enpGb250KCkpCiB7CiB9Ci0jZWxp
ZiBVU0UoRElSRUNUMkQpCi1PcGVuVHlwZU1hdGhEYXRhOjpPcGVuVHlwZU1hdGhEYXRhKGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnQpCi17Ci19CiAjZWxzZQogT3BlblR5cGVNYXRoRGF0YTo6
T3BlblR5cGVNYXRoRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJikgPSBkZWZhdWx0OwogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVu
VHlwZVV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyODc4MTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0
aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCw2IEBACiAjaW5jbHVkZSAi
Rm9udE1lbW9yeVJlc291cmNlLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKLSNpZiBV
U0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMuaCIKLSNpbmNsdWRl
IDxkd3JpdGVfMy5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IEJp
Z0VuZGlhblVTaG9ydCB7IApAQCAtMjgxLDExICsyNzYsNiBAQCBSZWZQdHI8Rm9udE1lbW9yeVJl
c291cmNlPiByZW5hbWVBbmRBY3RpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0jaWYg
VVNFKERJUkVDVDJEKQotICAgIEhSRVNVTFQgaHIgPSBEaXJlY3RXcml0ZTo6YWRkRm9udEZyb21E
YXRhVG9Qcm9jZXNzQ29sbGVjdGlvbihyZXdyaXR0ZW5Gb250RGF0YSk7Ci0gICAgQVNTRVJUKFNV
Q0NFRURFRChocikpOwotI2VuZGlmCi0KICAgICByZXR1cm4gRm9udE1lbW9yeVJlc291cmNlOjpj
cmVhdGUoZm9udEhhbmRsZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAJKHJldmlzaW9u
IDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRt
YXBUZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0LDYgQEAgdm9pZCBCaXRt
YXBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyhHcmFwaAogCiAgICAgc291cmNlTGF5ZXItPnBhaW50
R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIHNvdXJjZVJlY3QpOwogCi0jaWYgVVNFKERJ
UkVDVDJEKQotICAgIC8vIFdlIGNhbid0IGFjY2VzcyB0aGUgYml0cyBpbiB0aGUgaW1hZ2UgYnVm
ZmVyIHdpdGggYW4gYWN0aXZlIGJlZ2luRHJhdy4KLSAgICBjb250ZXh0LmVuZERyYXcoKTsKLSNl
bmRpZgotCiAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0
dXJlR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZUdMLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDIsMTEgKzQyLDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5j
bHVkZSA8d2luY29kZWMuaD4KLSNlbmRpZgotCiAjaWYgT1MoREFSV0lOKQogI2RlZmluZSBHTF9V
TlNJR05FRF9JTlRfOF84XzhfOF9SRVYgMHg4MzY3CiAjZW5kaWYKQEAgLTE2Myw4ICsxNTgsNiBA
QCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoSW1hCiAgICAgY2Fpcm9fc3Vy
ZmFjZV90KiBzdXJmYWNlID0gZnJhbWVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpOwogICAg
IGltYWdlRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSk7CiAgICAg
Ynl0ZXNQZXJMaW5lID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpOwot
I2VsaWYgVVNFKERJUkVDVDJEKQotICAgIG5vdEltcGxlbWVudGVkKCk7CiAjZW5kaWYKIAogICAg
IHVwZGF0ZUNvbnRlbnRzKGltYWdlRGF0YSwgdGFyZ2V0UmVjdCwgb2Zmc2V0LCBieXRlc1Blckxp
bmUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkQuaAkocmV2aXNpb24g
Mjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyRC5oCShub25leGlzdGVudCkKQEAgLTEsNzQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIklu
dFJlY3QuaCIKLSNpbmNsdWRlIDx3aW5jb2RlYy5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgotCi1pbnRlcmZhY2UgSUQyRDFCaXRtYXA7Ci1pbnRlcmZhY2UgSUQyRDFCaXRtYXBCcnVz
aDsKLWludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLWludGVyZmFjZSBJRDNEMTFEZXZpY2Ux
OwotaW50ZXJmYWNlIElEWEdJU3VyZmFjZTE7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJEIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkQpOwotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIHZpcnR1YWwgfkJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRCgp
ID0gZGVmYXVsdDsKLQotICAgIElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQoKSBjb25z
dCB7IHJldHVybiBtX3JlbmRlclRhcmdldC5nZXQoKTsgfQotICAgIElEMkQxQml0bWFwKiBzdXJm
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLmdldCgpOyB9Ci0gICAgSURYR0lTdXJmYWNl
MSogZHhTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9keFN1cmZhY2UuZ2V0KCk7IH0KLSAgICBj
b25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgc2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUm
IHNjcm9sbE9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgSUQyRDFCaXRtYXBCcnVzaCogYml0bWFw
QnJ1c2goKSA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICBCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0
MkQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSUQzRDExRGV2aWNlMSogZGV2aWNlKQotICAgICAgICA6
IG1fZGV2aWNlKGRldmljZSkKLSAgICAgICAgLCBtX3NpemUoc2l6ZSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgQ09NUHRyPElEM0QxMURldmljZTE+IG1fZGV2aWNlOwotICAgIENPTVB0cjxJRDJEMVJl
bmRlclRhcmdldD4gbV9yZW5kZXJUYXJnZXQ7Ci0gICAgQ09NUHRyPElEWEdJU3VyZmFjZTE+IG1f
ZHhTdXJmYWNlOwotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gbV9zdXJmYWNlOwotICAgIEludFNp
emUgbV9zaXplOwotfTsKLQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBV
U0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3Qy
REltcGwuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5jcHAJKG5vbmV4aXN0
ZW50KQpAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmgiCi0KLSNpZiBVU0Uo
RElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJJbWFnZURlY29k
ZXJEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgi
Ci0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2luY2x1ZGUgPHdpbmNvZGVjLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IFNlY29uZHMgc2Nyb2xsSHlzdGVyZXNpc0R1cmF0
aW9uIHsgMzAwX21zIH07Ci0KLUJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGw6OkJhY2tp
bmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwoY29uc3QgSW50U2l6ZSYgc2l6ZSwgZmxvYXQgZGV2
aWNlU2NhbGVGYWN0b3IsIElEM0QxMURldmljZTEqIGRldmljZSkKLSAgICA6IEJhY2tpbmdTdG9y
ZUJhY2tlbmREaXJlY3QyRChzaXplLCBkZXZpY2UpCi0gICAgLCBtX3Njcm9sbGVkSHlzdGVyZXNp
cyhbdGhpc10oUEFMOjpIeXN0ZXJlc2lzU3RhdGUgc3RhdGUpIHsKLSAgICAgICAgaWYgKHN0YXRl
ID09IFBBTDo6SHlzdGVyZXNpc1N0YXRlOjpTdG9wcGVkKQotICAgICAgICAgICAgbV9zY3JvbGxT
dXJmYWNlID0gbnVsbHB0cjsKLSAgICAgICAgfSwgc2Nyb2xsSHlzdGVyZXNpc0R1cmF0aW9uKQot
ewotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IG1fc2l6ZTsKLSAgICBzY2FsZWRTaXplLnNjYWxl
KGRldmljZVNjYWxlRmFjdG9yKTsKLQotICAgIG1fZHhTdXJmYWNlID0gV2ViQ29yZTo6RGlyZWN0
MkQ6OmNyZWF0ZURYR0lTdXJmYWNlT2ZTaXplKHNjYWxlZFNpemUsIG1fZGV2aWNlLmdldCgpLCBm
YWxzZSk7Ci0gICAgbV9yZW5kZXJUYXJnZXQgPSBXZWJDb3JlOjpEaXJlY3QyRDo6Y3JlYXRlU3Vy
ZmFjZVJlbmRlclRhcmdldChtX2R4U3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBhdXRvIGJpdG1hcFBy
b3BlcnRpZXMgPSBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpOwotICAgIEhSRVNVTFQgaHIg
PSBtX3JlbmRlclRhcmdldC0+Q3JlYXRlU2hhcmVkQml0bWFwKF9fdXVpZG9mKElEWEdJU3VyZmFj
ZTEpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihtX2R4U3VyZmFjZS5nZXQoKSksICZiaXRtYXBQ
cm9wZXJ0aWVzLCAmbV9zdXJmYWNlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKLX0KLQotQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbDo6fkJhY2tpbmdTdG9yZUJh
Y2tlbmREaXJlY3QyREltcGwoKQotewotfQotCi12b2lkIEJhY2tpbmdTdG9yZUJhY2tlbmREaXJl
Y3QyREltcGw6OnNjcm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBJbnRTaXpl
JiBzY3JvbGxPZmZzZXQpCi17Ci0gICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gc2Nyb2xsUmVjdDsK
LSAgICBzb3VyY2VSZWN0Lm1vdmUoLXNjcm9sbE9mZnNldCk7Ci0gICAgc291cmNlUmVjdC5pbnRl
cnNlY3Qoc2Nyb2xsUmVjdCk7Ci0KLSAgICBpZiAoc291cmNlUmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghbV9zY3JvbGxTdXJmYWNlIHx8IHNjcm9sbFJlY3Quc2l6
ZSgpICE9IG1fc2Nyb2xsU3VyZmFjZVNpemUpIHsKLSNpZm5kZWYgX05ERUJVRwotICAgICAgICBB
U1NFUlQobV9zaXplLndpZHRoKCkgPj0gc2Nyb2xsUmVjdC5zaXplKCkud2lkdGgoKSk7Ci0gICAg
ICAgIEFTU0VSVChtX3NpemUuaGVpZ2h0KCkgPj0gc2Nyb2xsUmVjdC5zaXplKCkuaGVpZ2h0KCkp
OwotI2VuZGlmCi0gICAgICAgIG1fc2Nyb2xsU3VyZmFjZVNpemUgPSBzb3VyY2VSZWN0LnNpemUo
KTsKLSAgICAgICAgbV9keFNjcm9sbFN1cmZhY2UgPSBXZWJDb3JlOjpEaXJlY3QyRDo6Y3JlYXRl
RFhHSVN1cmZhY2VPZlNpemUobV9zY3JvbGxTdXJmYWNlU2l6ZSwgbV9kZXZpY2UuZ2V0KCksIGZh
bHNlKTsKLQotICAgICAgICBtX3Njcm9sbFN1cmZhY2UgPSBudWxscHRyOwotICAgICAgICBhdXRv
IGJpdG1hcFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpOwotICAgICAg
ICBIUkVTVUxUIGhyID0gbV9yZW5kZXJUYXJnZXQtPkNyZWF0ZVNoYXJlZEJpdG1hcChfX3V1aWRv
ZihJRFhHSVN1cmZhY2UxKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9keFNjcm9sbFN1cmZh
Y2UuZ2V0KCkpLCAmYml0bWFwUHJvcGVydGllcywgJm1fc2Nyb2xsU3VyZmFjZSk7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIH0KLQotICAgIGF1dG8gc291cmNl
UmVjdExvY2F0aW9uID0gSW50U2l6ZShzb3VyY2VSZWN0LngoKSwgc291cmNlUmVjdC55KCkpOwot
ICAgIGF1dG8gZGVzdFJlY3RMb2NhdGlvbiA9IEludFNpemUoKTsgLy8gVG9wIGxlZnQgY29ybmVy
IG9mIHNjcm9sbCBzdXJmYWNlCi0gICAgRGlyZWN0MkQ6OmNvcHlSZWN0RnJvbU9uZVN1cmZhY2VU
b0Fub3RoZXIobV9zdXJmYWNlLmdldCgpLCBtX3Njcm9sbFN1cmZhY2UuZ2V0KCksIHNvdXJjZVJl
Y3RMb2NhdGlvbiwgc291cmNlUmVjdCwgZGVzdFJlY3RMb2NhdGlvbik7Ci0KLSAgICBJbnRSZWN0
IGRlc3RSZWN0ID0gc2Nyb2xsUmVjdDsKLSAgICBkZXN0UmVjdC5zZXRIZWlnaHQoc291cmNlUmVj
dC5oZWlnaHQoKSk7Ci0gICAgZGVzdFJlY3Quc2V0V2lkdGgoc291cmNlUmVjdC53aWR0aCgpKTsK
LQotICAgIEludFNpemUgZGVzdFBvc2l0aW9uOwotICAgIGlmIChzY3JvbGxPZmZzZXQud2lkdGgo
KSA+IDAgfHwgc2Nyb2xsT2Zmc2V0LmhlaWdodCgpID4gMCkgewotICAgICAgICBkZXN0UG9zaXRp
b24uc2V0V2lkdGgoc3RkOjptaW4oc2Nyb2xsUmVjdC53aWR0aCgpLCBzY3JvbGxPZmZzZXQud2lk
dGgoKSkpOwotICAgICAgICBkZXN0UG9zaXRpb24uc2V0SGVpZ2h0KHN0ZDo6bWluKHNjcm9sbFJl
Y3QuaGVpZ2h0KCksIHNjcm9sbE9mZnNldC5oZWlnaHQoKSkpOwotICAgIH0KLQotICAgIGF1dG8g
c291cmNlU2Nyb2xsU3VyZmFjZUxvY2F0aW9uID0gSW50U2l6ZSgpOyAvLyBUb3AgbGVmdCBjb3Ju
ZXIgb2Ygc2Nyb2xsIHN1cmZhY2UKLSAgICBEaXJlY3QyRDo6Y29weVJlY3RGcm9tT25lU3VyZmFj
ZVRvQW5vdGhlcihtX3Njcm9sbFN1cmZhY2UuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgc291cmNl
U2Nyb2xsU3VyZmFjZUxvY2F0aW9uLCBkZXN0UmVjdCwgZGVzdFBvc2l0aW9uKTsKLQotICAgIG1f
c2Nyb2xsZWRIeXN0ZXJlc2lzLmltcHVsc2UoKTsKLX0KLQotSUQyRDFCaXRtYXBCcnVzaCogQmFj
a2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbDo6Yml0bWFwQnJ1c2goKQotewotICAgIGlmICgh
bV9yZW5kZXJUYXJnZXQgfHwgIW1fc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBpZiAoIW1fYml0bWFwQnJ1c2gpIHsKLSAgICAgICAgYXV0byBiaXRtYXBCcnVzaFByb3Bl
cnRpZXMgPSBEMkQxOjpCaXRtYXBCcnVzaFByb3BlcnRpZXMoKTsKLSAgICAgICAgYXV0byBicnVz
aFByb3BlcnRpZXMgPSBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKTsKLQotICAgICAgICBIUkVTVUxU
IGhyID0gbV9yZW5kZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcEJydXNoKG1fc3VyZmFjZS5nZXQoKSwg
JmJpdG1hcEJydXNoUHJvcGVydGllcywgJmJydXNoUHJvcGVydGllcywgJm1fYml0bWFwQnJ1c2gp
OwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1f
Yml0bWFwQnJ1c2guZ2V0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJl
Y3QyREltcGwuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuaAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVT
RShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRC5oIgot
I2luY2x1ZGUgPHBhbC9IeXN0ZXJlc2lzQWN0aXZpdHkuaD4KLQotaW50ZXJmYWNlIElEMkQxQml0
bWFwQnJ1c2g7Ci1pbnRlcmZhY2UgSURYR0lTdXJmYWNlMTsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBJbnRTaXplOwotCi1jbGFzcyBCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJ
bXBsIGZpbmFsIDogcHVibGljIEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRCB7Ci1wdWJsaWM6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbChjb25z
dCBJbnRTaXplJiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIElEM0QxMURldmljZTEqKTsKLSAg
ICB2aXJ0dWFsIH5CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsKCk7Ci0KLXByaXZhdGU6
Ci0gICAgdm9pZCBzY3JvbGwoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmKSBvdmVycmlk
ZTsKLSAgICBJRDJEMUJpdG1hcEJydXNoKiBiaXRtYXBCcnVzaCgpIG92ZXJyaWRlOwotCi0gICAg
SW50U2l6ZSBtX3Njcm9sbFN1cmZhY2VTaXplOwotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gbV9z
Y3JvbGxTdXJmYWNlOwotICAgIENPTVB0cjxJRFhHSVN1cmZhY2UxPiBtX2R4U2Nyb2xsU3VyZmFj
ZTsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXBCcnVzaD4gbV9iaXRtYXBCcnVzaDsKLQotICAgIFBB
TDo6SHlzdGVyZXNpc0FjdGl2aXR5IG1fc2Nyb2xsZWRIeXN0ZXJlc2lzOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJE
LmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsNTUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotCi0jaWYgUExBVEZPUk0oV0lOKQot
Ci0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQyZDFfMWhlbHBlci5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLUNvbG9yOjpDb2xvcihEMkQxX0NPTE9SX0YgY29sb3IpCi0gICAgOiBD
b2xvcihjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KFNSR0JBPGZsb2F0PiB7IGNvbG9yLnIs
IGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSkpCi17Ci19Ci0KLUNvbG9yOjpvcGVyYXRvciBE
MkQxX0NPTE9SX0YoKSBjb25zdAotewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5
cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKLSAgICByZXR1cm4gRDJEMTo6Q29s
b3JGKHIsIGcsIGIsIGEpOwotfQotCi1Db2xvcjo6b3BlcmF0b3IgRDJEMV9WRUNUT1JfNEYoKSBj
b25zdAotewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5cGVMb3NzeTxTUkdCQTxm
bG9hdD4+KCkucmVzb2x2ZWQoKTsKLSAgICByZXR1cm4gRDJEMTo6VmVjdG9yNEYociwgZywgYiwg
YSk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0NvbXBsZXhUZXh0Q29udHJvbGxlckRpcmVjdFdyaXRlLmNwcAkocmV2aXNpb24gMjg3ODEyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJv
bGxlckRpcmVjdFdyaXRlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDE4MSArMCwwIEBACi0vKgot
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0qIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0qIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0q
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0qIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0qIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgotCi0jaWYgVVNFKERJ
UkVDVDJEKQotCi0jaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJG
b250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIlRleHRBbmFs
eXplckhlbHBlci5oIgotI2luY2x1ZGUgPGR3cml0ZV8zLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RhdGljIGJvb2wgc2hhcGUoSURXcml0ZVRleHRBbmFseXplciogYW5hbHl6ZXIsIGNv
bnN0IERXUklURV9TQ1JJUFRfQU5BTFlTSVMmIGFuYWx5c2lzLCBjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBmb250UGxhdGZvcm1EYXRhLCBjb25zdCBXQ0hBUiogdGV4dCwgdW5zaWduZWQgbGVuZ3Ro
LCB1bnNpZ25lZCBzdWdnZXN0ZWRDb3VudCwgVmVjdG9yPEdseXBoPiYgZ2x5cGhzLCBWZWN0b3I8
R2x5cGg+JiBjbHVzdGVyTWFwLCBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfVEVYVF9QUk9QRVJUSUVT
PiYgdGV4dFByb3BlcnRpZXMsIFZlY3RvcjxEV1JJVEVfU0hBUElOR19HTFlQSF9QUk9QRVJUSUVT
PiYgZ2x5cGhQcm9wZXJ0aWVzLCB1bnNpZ25lZCYgZ2x5cGhDb3VudCkKLXsKLSAgICBIUkVTVUxU
IHNoYXBlUmVzdWx0ID0gRV9QRU5ESU5HOwotCi0gICAgZG8gewotICAgICAgICBzaGFwZVJlc3Vs
dCA9IGFuYWx5emVyLT5HZXRHbHlwaHModGV4dCwgbGVuZ3RoLCBmb250UGxhdGZvcm1EYXRhLmR3
Rm9udEZhY2UoKSwgZm9udFBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRh
dGlvbjo6VmVydGljYWwsIGZhbHNlLAotICAgICAgICAgICAgJmFuYWx5c2lzLCBudWxscHRyLCBu
dWxscHRyLCBudWxscHRyLCBudWxscHRyLCAwLCBzdWdnZXN0ZWRDb3VudCwgY2x1c3Rlck1hcC5k
YXRhKCksIHRleHRQcm9wZXJ0aWVzLmRhdGEoKSwKLSAgICAgICAgICAgIGdseXBocy5kYXRhKCks
IGdseXBoUHJvcGVydGllcy5kYXRhKCksICZnbHlwaENvdW50KTsKLQotICAgICAgICBpZiAoc2hh
cGVSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkgewotICAgICAgICAgICAgLy8gTmVlZCB0byByZXNp
emUgb3VyIGJ1ZmZlcnMgKGV4Y2VwdCBmb3IgY2x1c3Rlck1hcC4gSXQgaXMgYWx3YXlzIHRoZSBs
ZW5ndGggb2YgdGhlIHN0cmluZykuCi0gICAgICAgICAgICBnbHlwaHMucmVzaXplKGdseXBocy5z
aXplKCkgKiAyKTsKLSAgICAgICAgICAgIHRleHRQcm9wZXJ0aWVzLnJlc2l6ZShnbHlwaHMuc2l6
ZSgpKTsKLSAgICAgICAgICAgIGdseXBoUHJvcGVydGllcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7
Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlIChzaGFwZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsK
LQotICAgIGlmIChGQUlMRUQoc2hhcGVSZXN1bHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxl
Y3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQg
bGVuZ3RoLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgY29uc3QgRm9udCogZm9udCkKLXsKLSAg
ICBpZiAoIWZvbnQpIHsKLSAgICAgICAgLy8gQ3JlYXRlIGEgcnVuIG9mIG1pc3NpbmcgZ2x5cGhz
IGZyb20gdGhlIHByaW1hcnkgZm9udC4KLSAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5k
KENvbXBsZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBzdHJpbmdM
b2NhdGlvbiwgbGVuZ3RoLCAwLCBsZW5ndGgsIG1fcnVuLmx0cigpKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBhdXRvJiBmb250UGxhdGZvcm1EYXRhID0gZm9udC0+cGxhdGZvcm1E
YXRhKCk7Ci0KLSAgICB3Y2hhcl90IGxvY2FsZU5hbWVbTE9DQUxFX05BTUVfTUFYX0xFTkdUSF0g
PSB7IH07Ci0gICAgaW50IGxvY2FsZUxlbmd0aCA9IEdldFVzZXJEZWZhdWx0TG9jYWxlTmFtZShy
ZWludGVycHJldF9jYXN0PExQV1NUUj4oJmxvY2FsZU5hbWUpLCBMT0NBTEVfTkFNRV9NQVhfTEVO
R1RIKTsKLSAgICBSRUxFQVNFX0FTU0VSVChsb2NhbGVMZW5ndGggPCBMT0NBTEVfTkFNRV9NQVhf
TEVOR1RIKTsKLQotICAgIFZlY3RvcjxEV1JJVEVfRk9OVF9GRUFUVVJFPiBmb250RmVhdHVyZXMo
MSk7Ci0gICAgZm9udEZlYXR1cmVzWzBdLm5hbWVUYWcgPSBEV1JJVEVfRk9OVF9GRUFUVVJFX1RB
R19LRVJOSU5HOwotICAgIGZvbnRGZWF0dXJlc1swXS5wYXJhbWV0ZXIgPSBtX2ZvbnQuZW5hYmxl
S2VybmluZygpID8gMSA6IDA7Ci0KLSAgICBpZiAoZm9udFBsYXRmb3JtRGF0YS5vcmllbnRhdGlv
bigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpCi0gICAgICAgIGZvbnRGZWF0dXJlcy5h
cHBlbmQoe0RXUklURV9GT05UX0ZFQVRVUkVfVEFHX1ZFUlRJQ0FMX1dSSVRJTkcsIDF9KTsKLQot
ICAgIERXUklURV9UWVBPR1JBUEhJQ19GRUFUVVJFUyB1c2VkRmVhdHVyZXM7Ci0gICAgdXNlZEZl
YXR1cmVzLmZlYXR1cmVzID0gZm9udEZlYXR1cmVzLmRhdGEoKTsKLSAgICB1c2VkRmVhdHVyZXMu
ZmVhdHVyZUNvdW50ID0gZm9udEZlYXR1cmVzLnNpemUoKTsKLQotICAgIFZlY3Rvcjxjb25zdCBE
V1JJVEVfVFlQT0dSQVBISUNfRkVBVFVSRVMqPiBmZWF0dXJlczsKLSAgICBmZWF0dXJlcy5hcHBl
bmQoJnVzZWRGZWF0dXJlcyk7Ci0KLSAgICBDT01QdHI8SURXcml0ZVRleHRBbmFseXplcj4gYW5h
bHl6ZXI7Ci0gICAgSFJFU1VMVCBociA9IERpcmVjdFdyaXRlOjpmYWN0b3J5KCktPkNyZWF0ZVRl
eHRBbmFseXplcigmYW5hbHl6ZXIpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OwotCi0gICAgVGV4dEFuYWx5emVySGVscGVyIGhlbHBlcihyZWludGVycHJldF9jYXN0PExQV1NU
Uj4oJmxvY2FsZU5hbWUpLCByZWludGVycHJldF9jYXN0PExQQ1dTVFI+KGNwKSwgbGVuZ3RoKTsK
LQotICAgIGhyID0gYW5hbHl6ZXItPkFuYWx5emVTY3JpcHQoJmhlbHBlciwgMCwgbGVuZ3RoLCAm
aGVscGVyKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIHVuc2ln
bmVkIHRvdGFsU3VnZ2VzdGVkQ291bnQgPSAoMyAqIGxlbmd0aCAvIDIgKyAxNik7Ci0KLSAgICBW
ZWN0b3I8R2x5cGg+IGdseXBoczsKLSAgICBWZWN0b3I8R2x5cGg+IGNsdXN0ZXJNYXA7Ci0gICAg
VmVjdG9yPERXUklURV9TSEFQSU5HX1RFWFRfUFJPUEVSVElFUz4gdGV4dFByb3BlcnRpZXM7Ci0g
ICAgVmVjdG9yPERXUklURV9TSEFQSU5HX0dMWVBIX1BST1BFUlRJRVM+IGdseXBoUHJvcGVydGll
czsKLSAgICBWZWN0b3I8RkxPQVQ+IGdseXBoQWR2YW5jZXM7Ci0gICAgVmVjdG9yPERXUklURV9H
TFlQSF9PRkZTRVQ+IGdseXBoT2Zmc2V0czsKLSAgICBWZWN0b3I8RmxvYXRQb2ludD4gb3JpZ2lu
czsKLSAgICBWZWN0b3I8RmxvYXRTaXplPiBhZHZhbmNlczsKLSAgICBWZWN0b3I8dW5zaWduZWQ+
IHN0cmluZ0luZGljZXM7Ci0KLSAgICBnbHlwaHMucmVzZXJ2ZUNhcGFjaXR5KHRvdGFsU3VnZ2Vz
dGVkQ291bnQpOwotICAgIGNsdXN0ZXJNYXAucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7Ci0gICAg
dGV4dFByb3BlcnRpZXMucmVzZXJ2ZUNhcGFjaXR5KHRvdGFsU3VnZ2VzdGVkQ291bnQpOwotICAg
IGdseXBoUHJvcGVydGllcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdnZXN0ZWRDb3VudCk7Ci0g
ICAgZ2x5cGhBZHZhbmNlcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdnZXN0ZWRDb3VudCk7Ci0g
ICAgZ2x5cGhPZmZzZXRzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1Z2dlc3RlZENvdW50KTsKLSAg
ICBvcmlnaW5zLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1Z2dlc3RlZENvdW50KTsKLSAgICBhZHZh
bmNlcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdnZXN0ZWRDb3VudCk7Ci0gICAgc3RyaW5nSW5k
aWNlcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdnZXN0ZWRDb3VudCk7Ci0KLSAgICBmb3IgKGNv
bnN0IGF1dG8mIHJ1biA6IGhlbHBlci5tX2FuYWx5emVkUnVucykgewotICAgICAgICBjb25zdCBV
Q2hhciogY3VycmVudENQID0gY3AgKyBydW4uc3RhcnRQb3NpdGlvbjsKLSAgICAgICAgTFBDV1NU
UiB0ZXh0UG9zaXRpb24gPSByZWludGVycHJldF9jYXN0PExQQ1dTVFI+KGN1cnJlbnRDUCk7Ci0K
LSAgICAgICAgdW5zaWduZWQgc3VnZ2VzdGVkQ291bnQgPSAoMyAqIHJ1bi5sZW5ndGggLyAyICsg
MTYpOwotICAgICAgICBnbHlwaHMucmVzaXplKHN1Z2dlc3RlZENvdW50KTsKLSAgICAgICAgY2x1
c3Rlck1hcC5yZXNpemUocnVuLmxlbmd0aCk7Ci0gICAgICAgIHRleHRQcm9wZXJ0aWVzLnJlc2l6
ZShzdWdnZXN0ZWRDb3VudCk7Ci0gICAgICAgIGdseXBoUHJvcGVydGllcy5yZXNpemUoc3VnZ2Vz
dGVkQ291bnQpOwotCi0gICAgICAgIHVuc2lnbmVkIGdseXBoQ291bnQgPSAwOwotICAgICAgICBp
ZiAoIXNoYXBlKGFuYWx5emVyLmdldCgpLCBydW4uYW5hbHlzaXMsIGZvbnRQbGF0Zm9ybURhdGEs
IHRleHRQb3NpdGlvbiwgcnVuLmxlbmd0aCwgc3VnZ2VzdGVkQ291bnQsIGdseXBocywgY2x1c3Rl
ck1hcCwgdGV4dFByb3BlcnRpZXMsIGdseXBoUHJvcGVydGllcywgZ2x5cGhDb3VudCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZ2x5cGhzLnNocmluayhnbHlwaENvdW50KTsKLSAg
ICAgICAgdGV4dFByb3BlcnRpZXMuc2hyaW5rKGdseXBoQ291bnQpOwotICAgICAgICBnbHlwaFBy
b3BlcnRpZXMuc2hyaW5rKGdseXBoQ291bnQpOwotICAgICAgICBnbHlwaEFkdmFuY2VzLnJlc2l6
ZShnbHlwaENvdW50KTsKLSAgICAgICAgZ2x5cGhPZmZzZXRzLnJlc2l6ZShnbHlwaENvdW50KTsK
LQotICAgICAgICBIUkVTVUxUIHBsYWNlbWVudFJlc3VsdCA9IGFuYWx5emVyLT5HZXRHbHlwaFBs
YWNlbWVudHModGV4dFBvc2l0aW9uLCBjbHVzdGVyTWFwLmRhdGEoKSwgdGV4dFByb3BlcnRpZXMu
ZGF0YSgpLCBydW4ubGVuZ3RoLAotICAgICAgICAgICAgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhQcm9w
ZXJ0aWVzLmRhdGEoKSwgZ2x5cGhDb3VudCwgZm9udFBsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCks
Ci0gICAgICAgICAgICBmb250UGxhdGZvcm1EYXRhLnNpemUoKSwgZm9udFBsYXRmb3JtRGF0YS5v
cmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwsIG1fcnVuLmx0cigpLAot
ICAgICAgICAgICAgJnJ1bi5hbmFseXNpcywgcmVpbnRlcnByZXRfY2FzdDxMUENXU1RSPihsb2Nh
bGVOYW1lKSwgCi0gICAgICAgICAgICBmZWF0dXJlcy5kYXRhKCksICZydW4ubGVuZ3RoLCAxLAot
ICAgICAgICAgICAgZ2x5cGhBZHZhbmNlcy5kYXRhKCksIGdseXBoT2Zmc2V0cy5kYXRhKCkpOwot
ICAgICAgICBpZiAoRkFJTEVEKHBsYWNlbWVudFJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgLy8gQ29udmVydCBhbGwgY2hhcnMgdGhhdCBzaG91bGQgYmUgdHJlYXRlZCBh
cyBzcGFjZXMgdG8gdXNlIHRoZSBzcGFjZSBnbHlwaC4KLSAgICAgICAgLy8gV2UgYWxzbyBjcmVh
dGUgYSBtYXAgdGhhdCBhbGxvd3MgdXMgdG8gcXVpY2tseSBnbyBmcm9tIHNwYWNlIGdseXBocyBi
YWNrIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVycy4KLSAgICAgICAgZmxvYXQgc3Bh
Y2VXaWR0aCA9IGZvbnQtPnNwYWNlV2lkdGgoKSAtIGZvbnQtPnN5bnRoZXRpY0JvbGRPZmZzZXQo
KTsKLQotICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHJ1bi5sZW5ndGg7ICsraykgewotICAg
ICAgICAgICAgVUNoYXIgY2ggPSAqKGN1cnJlbnRDUCArIGspOwotICAgICAgICAgICAgYm9vbCB0
cmVhdEFzU3BhY2UgPSBGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoKTsKLSAgICAgICAgICAg
IGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNaZXJvV2lk
dGhTcGFjZShjaCk7Ci0gICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlIHx8IHRyZWF0QXNaZXJv
V2lkdGhTcGFjZSkgewotICAgICAgICAgICAgICAgIC8vIFN1YnN0aXR1dGUgaW4gdGhlIHNwYWNl
IGdseXBoIGF0IHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbiB0aGUgZ2x5cGhzCi0gICAgICAgICAg
ICAgICAgLy8gYXJyYXkuCi0gICAgICAgICAgICAgICAgZ2x5cGhzW2NsdXN0ZXJNYXBba11dID0g
Zm9udC0+c3BhY2VHbHlwaCgpOwotICAgICAgICAgICAgICAgIGdseXBoQWR2YW5jZXNbY2x1c3Rl
ck1hcFtrXV0gPSB0cmVhdEFzU3BhY2UgPyBzcGFjZVdpZHRoIDogMDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIG9yaWdpbnMucmVzaXplKGdseXBoQ291bnQpOwotICAgICAg
ICBhZHZhbmNlcy5yZXNpemUoZ2x5cGhDb3VudCk7Ci0gICAgICAgIHN0cmluZ0luZGljZXMucmVz
aXplKGdseXBoQ291bnQpOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ2x5cGhD
b3VudDsgKytpKSB7Ci0gICAgICAgICAgICBzdHJpbmdJbmRpY2VzW2ldID0gaTsKLSAgICAgICAg
ICAgIG9yaWdpbnNbaV0gPSBGbG9hdFBvaW50KGdseXBoT2Zmc2V0c1tpXS5hZHZhbmNlT2Zmc2V0
LCBnbHlwaE9mZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQpOwotICAgICAgICAgICAgYWR2YW5jZXNb
aV0gPSBGbG9hdFNpemUoZ2x5cGhBZHZhbmNlc1tpXSwgMCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShhZHZhbmNl
cywgb3JpZ2lucywgZ2x5cGhzLCBzdHJpbmdJbmRpY2VzLCBGbG9hdFNpemUoKSwgKmZvbnQsIGN1
cnJlbnRDUCwgMCwgcnVuLmxlbmd0aCwgMCwgcnVuLmxlbmd0aCwgbV9ydW4ubHRyKCkpKTsKLSAg
ICB9Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9s
bGVyVW5pc2NyaWJlLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKIAotI2lmICFVU0UoRElSRUNUMkQpCi0KICNp
bmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUg
IkhXbmREQy5oIgpAQCAtMjc1LDUgKzI3MywzIEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVy
Ojpjb2xsZWN0Q29tcGwKIH0KIAogfQotCi0jZW5kaWYgLy8gIVVTRShESVJFQ1QyRCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9E
aXJlY3QyRE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDEyNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxw
IFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkg
THRkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEJyZW50IEZ1bGdoYW0gPGJmdWxnaGFtQHdlYmtp
dC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMuTC4KLSAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkRpcmVjdDJET3BlcmF0aW9ucy5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0j
aW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24u
aCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGVEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgotI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1ZGUgPGFs
Z29yaXRobT4KLSNpbmNsdWRlIDxkMmQxLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVz
cGFjZSBEaXJlY3QyRCB7Ci0KLWVudW0gUGF0dGVybkFkanVzdG1lbnQgeyBOb0FkanVzdG1lbnQs
IEFkanVzdFBhdHRlcm5Gb3JHbG9iYWxBbHBoYSB9OwotZW51bSBBbHBoYVByZXNlcnZhdGlvbiB7
IERvTm90UHJlc2VydmVBbHBoYSwgUHJlc2VydmVBbHBoYSB9OwotCi0vLyBGSVhNRTogUmVwbGFj
ZSBvbmNlIEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZUNvcm5lcldpZHRoRm9yU3Ryb2tlV2lk
dGgoKQotLy8gaXMgcmVmYWN0b3JlZCBhcyBhIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24uCi1zdGF0
aWMgZmxvYXQgZGFzaGVkTGluZUNvcm5lcldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tl
V2lkdGgsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlLCBmbG9hdCBzdHJva2VUaGlja25lc3MpCi17
Ci0gICAgcmV0dXJuIHN0cm9rZVN0eWxlID09IERvdHRlZFN0cm9rZSA/IHN0cm9rZVRoaWNrbmVz
cyA6IHN0ZDo6bWluKDIuMGYgKiBzdHJva2VUaGlja25lc3MsIHN0ZDo6bWF4KHN0cm9rZVRoaWNr
bmVzcywgc3Ryb2tlV2lkdGggLyAzLjBmKSk7Ci19Ci0KLS8vIEZJWE1FOiBSZXBsYWNlIG9uY2Ug
R3JhcGhpY3NDb250ZXh0OjpkYXNoZWRMaW5lUGF0dGVybldpZHRoRm9yU3Ryb2tlV2lkdGgoKQot
Ly8gaXMgcmVmYWN0b3JlZCBhcyBhIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24uCi1zdGF0aWMgZmxv
YXQgZGFzaGVkTGluZVBhdHRlcm5XaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRo
LCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQotewotICAg
IHJldHVybiBzdHJva2VTdHlsZSA9PSBEb3R0ZWRTdHJva2UgPyBzdHJva2VUaGlja25lc3MgOiBz
dGQ6Om1pbigzLjBmICogc3Ryb2tlVGhpY2tuZXNzLCBzdGQ6Om1heChzdHJva2VUaGlja25lc3Ms
IHN0cm9rZVdpZHRoIC8gMy4wZikpOwotfQotCi0vLyBGSVhNRTogUmVwbGFjZSBvbmNlIEdyYXBo
aWNzQ29udGV4dDo6ZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJuQW5kU3Ryb2tlV2lk
dGgoKQotLy8gaXMgcmVmYWN0b3JlZCBhcyBhIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24uCi1zdGF0
aWMgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJuQW5kU3Ryb2tlV2lkdGgo
ZmxvYXQgcGF0dGVybldpZHRoLCBmbG9hdCBzdHJva2VXaWR0aCkKLXsKLSAgICAvLyBQYXR0ZXJu
IHN0YXJ0cyB3aXRoIGZ1bGwgZmlsbCBhbmQgZW5kcyB3aXRoIHRoZSBlbXB0eSBmaWxsLgotICAg
IC8vIDEuIExldCdzIHN0YXJ0IHdpdGggdGhlIGVtcHR5IHBoYXNlIGFmdGVyIHRoZSBjb3JuZXIu
Ci0gICAgLy8gMi4gQ2hlY2sgaWYgd2UndmUgZ290IG9kZCBvciBldmVuIG51bWJlciBvZiBwYXR0
ZXJucyBhbmQgd2hldGhlciB0aGV5IGZ1bGx5IGNvdmVyIHRoZSBsaW5lLgotICAgIC8vIDMuIElu
IGNhc2Ugb2YgZXZlbiBudW1iZXIgb2YgcGF0dGVybnMgYW5kL29yIHJlbWFpbmRlciwgbW92ZSB0
aGUgcGF0dGVybiBzdGFydCBwb3NpdGlvbgotICAgIC8vIHNvIHRoYXQgdGhlIHBhdHRlcm4gaXMg
YmFsYW5jZWQgYmV0d2VlbiB0aGUgY29ybmVycy4KLSAgICBmbG9hdCBwYXR0ZXJuT2Zmc2V0ID0g
cGF0dGVybldpZHRoOwotICAgIGludCBudW1iZXJPZlNlZ21lbnRzID0gc3RkOjpmbG9vcihzdHJv
a2VXaWR0aCAvIHBhdHRlcm5XaWR0aCk7Ci0gICAgYm9vbCBvZGROdW1iZXJPZlNlZ21lbnRzID0g
bnVtYmVyT2ZTZWdtZW50cyAlIDI7Ci0gICAgZmxvYXQgcmVtYWluZGVyID0gc3Ryb2tlV2lkdGgg
LSAobnVtYmVyT2ZTZWdtZW50cyAqIHBhdHRlcm5XaWR0aCk7Ci0gICAgaWYgKG9kZE51bWJlck9m
U2VnbWVudHMgJiYgcmVtYWluZGVyKQotICAgICAgICBwYXR0ZXJuT2Zmc2V0IC09IHJlbWFpbmRl
ciAvIDIuMGY7Ci0gICAgZWxzZSBpZiAoIW9kZE51bWJlck9mU2VnbWVudHMpIHsKLSAgICAgICAg
aWYgKHJlbWFpbmRlcikKLSAgICAgICAgICAgIHBhdHRlcm5PZmZzZXQgKz0gcGF0dGVybk9mZnNl
dCAtIChwYXR0ZXJuV2lkdGggKyByZW1haW5kZXIpIC8gMi4wZjsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcGF0dGVybk9mZnNldCArPSBwYXR0ZXJuV2lkdGggLyAyLjBmOwotICAgIH0KLQot
ICAgIHJldHVybiBwYXR0ZXJuT2Zmc2V0OwotfQotCi0vLyBGSVhNRTogUmVwbGFjZSBvbmNlIEdy
YXBoaWNzQ29udGV4dDo6Y2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoKQotLy8gaXMgcmVmYWN0
b3JlZCBhcyBhIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24uCi1zdGF0aWMgVmVjdG9yPEZsb2F0UG9p
bnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNWZXJ0aWNhbExpbmUsIGZsb2F0
IGNvcm5lcldpZHRoLCBGbG9hdFBvaW50IHBvaW50MSwgRmxvYXRQb2ludCBwb2ludDIpCi17Ci0g
ICAgLy8gQ2VudGVyIGxpbmUgYW5kIGN1dCBvZmYgY29ybmVycyBmb3IgcGF0dGVybiBwYWludGlu
Zy4KLSAgICBpZiAoaXNWZXJ0aWNhbExpbmUpIHsKLSAgICAgICAgZmxvYXQgY2VudGVyT2Zmc2V0
ID0gKHBvaW50Mi54KCkgLSBwb2ludDEueCgpKSAvIDIuMGY7Ci0gICAgICAgIHBvaW50MS5tb3Zl
KGNlbnRlck9mZnNldCwgY29ybmVyV2lkdGgpOwotICAgICAgICBwb2ludDIubW92ZSgtY2VudGVy
T2Zmc2V0LCAtY29ybmVyV2lkdGgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0IGNlbnRl
ck9mZnNldCA9IChwb2ludDIueSgpIC0gcG9pbnQxLnkoKSkgLyAyLjBmOwotICAgICAgICBwb2lu
dDEubW92ZShjb3JuZXJXaWR0aCwgY2VudGVyT2Zmc2V0KTsKLSAgICAgICAgcG9pbnQyLm1vdmUo
LWNvcm5lcldpZHRoLCAtY2VudGVyT2Zmc2V0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4geyBwb2lu
dDEsIHBvaW50MiB9OwotfQotCi0KLW5hbWVzcGFjZSBTdGF0ZSB7Ci0KLXZvaWQgc2V0U3Ryb2tl
VGhpY2tuZXNzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGZsb2F0
IHN0cm9rZVRoaWNrbmVzcykKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0U3Ryb2tlVGhpY2tu
ZXNzKHN0cm9rZVRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgc2V0U3Ryb2tlU3R5bGUoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUp
Ci17Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNldFN0cm9rZVN0eWxlKHN0cm9rZVN0eWxlKTsKLX0K
LQotdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBs
YXRmb3JtQ29udGV4dCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVu
ZE1vZGUgYmxlbmRNb2RlKQotewotCi0gICAgRDJEMV9CTEVORF9NT0RFIHRhcmdldEJsZW5kTW9k
ZSA9IEQyRDFfQkxFTkRfTU9ERV9NVUxUSVBMWTsKLSAgICBEMkQxX0NPTVBPU0lURV9NT0RFIHRh
cmdldENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX0ZPUkNFX0RXT1JEOwotCi0g
ICAgaWYgKGJsZW5kTW9kZSAhPSBCbGVuZE1vZGU6Ok5vcm1hbCkgewotICAgICAgICBzd2l0Y2gg
KGJsZW5kTW9kZSkgewotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6TXVsdGlwbHk6Ci0gICAgICAg
ICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfTVVMVElQTFk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OlNjcmVlbjoKLSAgICAgICAgICAg
IHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9TQ1JFRU47Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6Ok92ZXJsYXk6Ci0gICAgICAgICAgICB0YXJn
ZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfT1ZFUkxBWTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6RGFya2VuOgotICAgICAgICAgICAgdGFyZ2V0Qmxl
bmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0RBUktFTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEJsZW5kTW9kZTo6TGlnaHRlbjoKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9k
ZSA9IEQyRDFfQkxFTkRfTU9ERV9MSUdIVEVOOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQmxlbmRNb2RlOjpDb2xvckRvZGdlOgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2Rl
ID0gRDJEMV9CTEVORF9NT0RFX0NPTE9SX0RPREdFOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQmxlbmRNb2RlOjpDb2xvckJ1cm46Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1v
ZGUgPSBEMkQxX0JMRU5EX01PREVfQ09MT1JfQlVSTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEJsZW5kTW9kZTo6SGFyZExpZ2h0OgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRN
b2RlID0gRDJEMV9CTEVORF9NT0RFX0hBUkRfTElHSFQ7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBCbGVuZE1vZGU6OlNvZnRMaWdodDoKLSAgICAgICAgICAgIHRhcmdldEJsZW5k
TW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9TT0ZUX0xJR0hUOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQmxlbmRNb2RlOjpEaWZmZXJlbmNlOgotICAgICAgICAgICAgdGFyZ2V0Qmxl
bmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0RJRkZFUkVOQ0U7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OkV4Y2x1c2lvbjoKLSAgICAgICAgICAgIHRhcmdldEJs
ZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9FWENMVVNJT047Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBCbGVuZE1vZGU6Okh1ZToKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9k
ZSA9IEQyRDFfQkxFTkRfTU9ERV9IVUU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBCbGVuZE1vZGU6OlNhdHVyYXRpb246Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBE
MkQxX0JMRU5EX01PREVfU0FUVVJBVElPTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEJsZW5kTW9kZTo6Q29sb3I6Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQx
X0JMRU5EX01PREVfQ09MT1I7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVu
ZE1vZGU6Okx1bWlub3NpdHk6Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JM
RU5EX01PREVfTFVNSU5PU0lUWTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJs
ZW5kTW9kZTo6UGx1c0RhcmtlcjoKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFf
QkxFTkRfTU9ERV9EQVJLRVJfQ09MT1I7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBCbGVuZE1vZGU6OlBsdXNMaWdodGVyOgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0g
RDJEMV9CTEVORF9NT0RFX0xJR0hURVJfQ09MT1I7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgc3dpdGNoIChjb21wb3NpdGVPcGVyYXRpb24pIHsKLSAgICAgICAgY2FzZSBDb21w
b3NpdGVPcGVyYXRvcjo6Q2xlYXI6Ci0gICAgICAgICAgICAvLyBGSVhNRTogdGFyZ2V0QmxlbmRN
b2RlID0gRDJEMV9CTEVORF9NT0RFX0NMRUFSOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHk6Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3Np
dGVNb2RlID0gRDJEMV9DT01QT1NJVEVfTU9ERV9TT1VSQ0VfQ09QWTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyOgotICAgICAg
ICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfU09VUkNFX09W
RVI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6
U291cmNlSW46Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJ
VEVfTU9ERV9TT1VSQ0VfSU47Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21w
b3NpdGVPcGVyYXRvcjo6U291cmNlT3V0OgotICAgICAgICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9k
ZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfU09VUkNFX09VVDsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9wOgotICAgICAgICAgICAg
dGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfU09VUkNFX0FUT1A7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGlu
YXRpb25PdmVyOgotICAgICAgICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9T
SVRFX01PREVfREVTVElOQVRJT05fT1ZFUjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbkluOgotICAgICAgICAgICAgdGFyZ2V0
Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfREVTVElOQVRJT05fSU47Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRp
b25PdXQ6Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVf
TU9ERV9ERVNUSU5BVElPTl9PVVQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25BdG9wOgotICAgICAgICAgICAgdGFyZ2V0Q29t
cG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfREVTVElOQVRJT05fQVRPUDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpYT1I6Ci0gICAg
ICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVfTU9ERV9YT1I7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0Rh
cmtlcjoKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9EQVJL
RU47Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6
UGx1c0xpZ2h0ZXI6Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01P
REVfTElHSFRFTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9w
ZXJhdG9yOjpEaWZmZXJlbmNlOgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9C
TEVORF9NT0RFX0RJRkZFUkVOQ0U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRCbGVuZEFuZENvbXBvc2l0ZU1vZGUodGFyZ2V0
QmxlbmRNb2RlLCB0YXJnZXRDb21wb3NpdGVNb2RlKTsKLX0KLQotdm9pZCBzZXRTaG91bGRBbnRp
YWxpYXMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgYm9vbCBlbmFi
bGUpCi17Ci0gICAgYXV0byBhbnRpYWxpYXNNb2RlID0gZW5hYmxlID8gRDJEMV9BTlRJQUxJQVNf
TU9ERV9QRVJfUFJJTUlUSVZFIDogRDJEMV9BTlRJQUxJQVNfTU9ERV9BTElBU0VEOwotICAgIHBs
YXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+U2V0QW50aWFsaWFzTW9kZShhbnRpYWxpYXNN
b2RlKTsKLX0KLQotdm9pZCBzZXRDVE0oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3Jt
Q29udGV4dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQVNTRVJU
KHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJl
bmRlclRhcmdldCgpLT5TZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKLQotICAgIGlmIChhdXRvKiBn
cmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxhdGZvcm1Db250ZXh0LmdyYXBoaWNzQ29udGV4dFBy
aXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZS0+c2V0Q1RNKHRyYW5zZm9y
bSk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBnZXRDVE0oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQm
IHBsYXRmb3JtQ29udGV4dCkKLXsKLSAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0LnJlbmRlclRh
cmdldCgpKTsKLSAgICBEMkQxX01BVFJJWF8zWDJfRiBjdXJyZW50VHJhbnNmb3JtOwotICAgIHBs
YXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+R2V0VHJhbnNmb3JtKCZjdXJyZW50VHJhbnNm
b3JtKTsKLSAgICByZXR1cm4gY3VycmVudFRyYW5zZm9ybTsKLX0KLQotSW50UmVjdCBnZXRDbGlw
Qm91bmRzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAg
RDJEMV9TSVpFX0YgY2xpcFNpemU7Ci0gICAgaWYgKGF1dG8gY2xpcExheWVyID0gcGxhdGZvcm1D
b250ZXh0LmNsaXBMYXllcigpKQotICAgICAgICBjbGlwU2l6ZSA9IGNsaXBMYXllci0+R2V0U2l6
ZSgpOwotICAgIGVsc2UKLSAgICAgICAgY2xpcFNpemUgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVy
VGFyZ2V0KCktPkdldFNpemUoKTsKLQotICAgIEZsb2F0UmVjdCBjbGlwQm91bmRzKEludFBvaW50
KCksIGNsaXBTaXplKTsKLQotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGNsaXBCb3VuZHMp
OwotfQotCi1GbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLQotICAgIHJldHVybiByZWN0OwotfQotCi1ib29sIGlzQWNjZWxlcmF0
ZWRDb250ZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0g
ICAgYXV0byByZW5kZXJQcm9wZXJ0aWVzID0gRDJEMTo6UmVuZGVyVGFyZ2V0UHJvcGVydGllcygp
OwotICAgIHJlbmRlclByb3BlcnRpZXMudHlwZSA9IEQyRDFfUkVOREVSX1RBUkdFVF9UWVBFX0hB
UkRXQVJFOwotICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPklzU3Vw
cG9ydGVkKCZyZW5kZXJQcm9wZXJ0aWVzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgU3RhdGUKLQot
RmlsbFNvdXJjZTo6RmlsbFNvdXJjZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICA6IGdsb2JhbEFscGhhKHN0YXRl
LmFscGhhKQotICAgICwgY29sb3Ioc3RhdGUuZmlsbENvbG9yKQotICAgICwgZmlsbFJ1bGUoc3Rh
dGUuZmlsbFJ1bGUpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQuaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwotICAgIGF1dG8mIHBsYXRmb3JtQ29udGV4dCA9ICpjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
OwotCi0gICAgaWYgKHN0YXRlLmZpbGxQYXR0ZXJuKSB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9y
bSB1c2VyVG9CYXNlQ1RNOyAvLyBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdp
bmRvd3MKLSAgICAgICAgYnJ1c2ggPSBzdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1Q
YXR0ZXJuKGNvbnRleHQsIHN0YXRlLmFscGhhLCB1c2VyVG9CYXNlQ1RNKTsKLSAgICB9IGVsc2Ug
aWYgKHN0YXRlLmZpbGxHcmFkaWVudCAmJiAhc3RhdGUuZmlsbEdyYWRpZW50LT5zdG9wcygpLmlz
RW1wdHkoKSkKLSAgICAgICAgYnJ1c2ggPSBzdGF0ZS5maWxsR3JhZGllbnQtPmNyZWF0ZUJydXNo
KHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBicnVz
aCA9IHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihjb2xvcik7Ci19Ci0KLVN0cm9rZVNv
dXJjZTo6U3Ryb2tlU291cmNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgIDogZ2xvYmFsQWxwaGEoc3RhdGUuYWxw
aGEpCi0gICAgLCB0aGlja25lc3Moc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKQotICAgICwgY29sb3Io
c3RhdGUuc3Ryb2tlQ29sb3IpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQuaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwotICAgIGF1dG8mIHBsYXRmb3JtQ29udGV4dCA9ICpjb250ZXh0LnBsYXRmb3JtQ29u
dGV4dCgpOwotCi0gICAgaWYgKHN0YXRlLnN0cm9rZVBhdHRlcm4pIHsKLSAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBuZWVk
ZWQgb24gV2luZG93cwotICAgICAgICBicnVzaCA9IHN0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0
ZVBsYXRmb3JtUGF0dGVybihjb250ZXh0LCBzdGF0ZS5hbHBoYSwgdXNlclRvQmFzZUNUTSk7Ci0g
ICAgfSBlbHNlIGlmIChzdGF0ZS5zdHJva2VHcmFkaWVudCkKLSAgICAgICAgYnJ1c2ggPSBzdGF0
ZS5zdHJva2VHcmFkaWVudC0+Y3JlYXRlQnJ1c2gocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdl
dCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGJydXNoID0gcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0
aENvbG9yKGNvbG9yKTsKLX0KLQotU2hhZG93U3RhdGU6OlNoYWRvd1N0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKLSAgICA6IG9mZnNldChzdGF0ZS5zaGFkb3dPZmZzZXQp
Ci0gICAgLCBibHVyKHN0YXRlLnNoYWRvd0JsdXIpCi0gICAgLCBjb2xvcihzdGF0ZS5zaGFkb3dD
b2xvcikKLSAgICAsIGlnbm9yZVRyYW5zZm9ybXMoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpCi0gICAgLCBnbG9iYWxBbHBoYShzdGF0ZS5hbHBoYSkKLSAgICAsIGdsb2JhbENvbXBvc2l0
ZU9wZXJhdG9yKHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yKQotewotfQotCi1ib29sIFNoYWRvd1N0
YXRlOjppc1Zpc2libGUoKSBjb25zdAotewotICAgIHJldHVybiBjb2xvci5pc1Zpc2libGUoKSAm
JiAob2Zmc2V0LndpZHRoKCkgfHwgb2Zmc2V0LmhlaWdodCgpIHx8IGJsdXIpOwotfQotCi1ib29s
IFNoYWRvd1N0YXRlOjppc1JlcXVpcmVkKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQpIGNvbnN0Ci17Ci0gICAgLy8gV2UgY2FuJ3QgYXZvaWQgU2hhZG93Qmx1ciBpZiB0
aGUgc2hhZG93IGhhcyBibHVyLgotICAgIGlmIChjb2xvci5pc1Zpc2libGUoKSAmJiBibHVyKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFdlIGNhbiBhdm9pZCBTaGFkb3dCbHVyIGFu
ZCBvcHRpbWl6ZSwgc2luY2Ugd2UncmUgbm90IGRyYXdpbmcgb24gYQotICAgIC8vIGNhbnZhcyBh
bmQgYm94IHNoYWRvd3MgYXJlIGFmZmVjdGVkIGJ5IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgu
Ci0gICAgaWYgKCFpZ25vcmVUcmFuc2Zvcm1zKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBXZSBjYW4gYXZvaWQgU2hhZG93Qmx1ciwgc2luY2UgdGhlcmUgYXJlIG5vIHRyYW5zZm9y
bWF0aW9ucyB0byBhcHBseSB0byB0aGUgY2FudmFzLgotICAgIGlmIChTdGF0ZTo6Z2V0Q1RNKHBs
YXRmb3JtQ29udGV4dCkuaXNJZGVudGl0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBPdGhlcndpc2UsIG5vIGNoYW5jZSBhdm9pZGluZyBTaGFkb3dCbHVyLgotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIHNldExpbmVDYXAoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBs
YXRmb3JtQ29udGV4dCwgTGluZUNhcCBsaW5lQ2FwKQotewotICAgIEQyRDFfQ0FQX1NUWUxFIGNh
cFN0eWxlID0gRDJEMV9DQVBfU1RZTEVfRkxBVDsKLSAgICBzd2l0Y2ggKGxpbmVDYXApIHsKLSAg
ICBjYXNlIExpbmVDYXA6OlJvdW5kOgotICAgICAgICBjYXBTdHlsZSA9IEQyRDFfQ0FQX1NUWUxF
X1JPVU5EOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExpbmVDYXA6OlNxdWFyZToKLSAgICAg
ICAgY2FwU3R5bGUgPSBEMkQxX0NBUF9TVFlMRV9TUVVBUkU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgTGluZUNhcDo6QnV0dDoKLSAgICBkZWZhdWx0OgotICAgICAgICBjYXBTdHlsZSA9IEQy
RDFfQ0FQX1NUWUxFX0ZMQVQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHBsYXRmb3Jt
Q29udGV4dC5zZXRMaW5lQ2FwKGNhcFN0eWxlKTsKLX0KLQotdm9pZCBzZXRMaW5lRGFzaChQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBEYXNoQXJyYXkmIGRh
c2hlcywgZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0RGFzaGVz
KGRhc2hlcyk7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNldERhc2hPZmZzZXQoZGFzaE9mZnNldCk7
Ci19Ci0KLXZvaWQgc2V0TGluZUpvaW4oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3Jt
Q29udGV4dCwgTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgRDJEMV9MSU5FX0pPSU4gam9pblN0
eWxlID0gRDJEMV9MSU5FX0pPSU5fTUlURVI7Ci0gICAgc3dpdGNoIChsaW5lSm9pbikgewotICAg
IGNhc2UgTGluZUpvaW46OlJvdW5kOgotICAgICAgICBqb2luU3R5bGUgPSBEMkQxX0xJTkVfSk9J
Tl9ST1VORDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lSm9pbjo6QmV2ZWw6Ci0gICAg
ICAgIGpvaW5TdHlsZSA9IEQyRDFfTElORV9KT0lOX0JFVkVMOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIExpbmVKb2luOjpNaXRlcjoKLSAgICBkZWZhdWx0OgotICAgICAgICBqb2luU3R5bGUg
PSBEMkQxX0xJTkVfSk9JTl9NSVRFUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcGxh
dGZvcm1Db250ZXh0LnNldExpbmVKb2luKGpvaW5TdHlsZSk7Ci19Ci0KLXZvaWQgc2V0TWl0ZXJM
aW1pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBmbG9hdCBtaXRl
ckxpbWl0KQotewotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRNaXRlckxpbWl0KG1pdGVyTGltaXQp
OwotfQotCi12b2lkIGZpbGxSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmlsbFNvdXJjZSYgZmlsbFNvdXJj
ZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAgIGF1dG8gY29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5z
ZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBkcmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQs
IHJlY3QsIHNoYWRvd1N0YXRlLCBbJnBsYXRmb3JtQ29udGV4dCwgcmVjdCwgJmZpbGxTb3VyY2Vd
KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgY29uc3QgRDJEMV9S
RUNUX0YgZDJkUmVjdCA9IHJlY3Q7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3Rhbmds
ZSgmZDJkUmVjdCwgZmlsbFNvdXJjZS5icnVzaC5nZXQoKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
ZmlsbFJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IFNoYWRvd1N0YXRlJiBz
aGFkb3dTdGF0ZSkKLXsKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVy
VGFyZ2V0KCk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0g
ICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCByZWN0LCBzaGFkb3dTdGF0ZSwgWyZw
bGF0Zm9ybUNvbnRleHQsIGNvbG9yLCByZWN0XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFy
Z2V0KSB7Ci0gICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwotICAgICAg
ICByZW5kZXJUYXJnZXQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIHBsYXRmb3JtQ29udGV4dC5i
cnVzaFdpdGhDb2xvcihjb2xvcikuZ2V0KCkpOwotICAgIH0pOwotfQotCi12b2lkIGZpbGxSb3Vu
ZGVkUmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IFNoYWRvd1N0
YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQu
cmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVf
Xyk7Ci0KLSAgICBjb25zdCBGbG9hdFJlY3QmIHIgPSByZWN0LnJlY3QoKTsKLSAgICBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWkgPSByZWN0LnJhZGlpKCk7Ci0gICAgYm9vbCBl
cXVhbFdpZHRocyA9IChyYWRpaS50b3BMZWZ0KCkud2lkdGgoKSA9PSByYWRpaS50b3BSaWdodCgp
LndpZHRoKCkgJiYgcmFkaWkudG9wUmlnaHQoKS53aWR0aCgpID09IHJhZGlpLmJvdHRvbUxlZnQo
KS53aWR0aCgpICYmIHJhZGlpLmJvdHRvbUxlZnQoKS53aWR0aCgpID09IHJhZGlpLmJvdHRvbVJp
Z2h0KCkud2lkdGgoKSk7Ci0gICAgYm9vbCBlcXVhbEhlaWdodHMgPSAocmFkaWkudG9wTGVmdCgp
LmhlaWdodCgpID09IHJhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSAmJiByYWRpaS5ib3R0b21M
ZWZ0KCkuaGVpZ2h0KCkgPT0gcmFkaWkudG9wUmlnaHQoKS5oZWlnaHQoKSAmJiByYWRpaS50b3BS
aWdodCgpLmhlaWdodCgpID09IHJhZGlpLmJvdHRvbVJpZ2h0KCkuaGVpZ2h0KCkpOwotICAgIGJv
b2wgaGFzQ3VzdG9tRmlsbCA9IGZhbHNlOyAvLyBGSVhNRTogV2h5IGlzbid0IGEgRmlsbFNvdXJj
ZSBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbj8KLSAgICBpZiAoIWhhc0N1c3RvbUZpbGwgJiYgZXF1
YWxXaWR0aHMgJiYgZXF1YWxIZWlnaHRzICYmIHJhZGlpLnRvcExlZnQoKS53aWR0aCgpICogMiA9
PSByLndpZHRoKCkgJiYgcmFkaWkudG9wTGVmdCgpLmhlaWdodCgpICogMiA9PSByLmhlaWdodCgp
KSB7Ci0gICAgICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgciwgc2hhZG93U3Rh
dGUsIFsmcGxhdGZvcm1Db250ZXh0LCBjb2xvciwgcmVjdCwgcmFkaWksIHJdKElEMkQxUmVuZGVy
VGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgICAgIGF1dG8gcm91bmRlZFJlY3QgPSBE
MkQxOjpSb3VuZGVkUmVjdChyLCByYWRpaS50b3BMZWZ0KCkud2lkdGgoKSwgcmFkaWkudG9wTGVm
dCgpLmhlaWdodCgpKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJvdW5kZWRSZWN0
YW5nbGUoJnJvdW5kZWRSZWN0LCBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoY29sb3Ip
LmdldCgpKTsKLSAgICAgICAgfSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUGF0aCBwYXRoOwot
ICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwotICAgICAgICBmaWxsUGF0aChwbGF0
Zm9ybUNvbnRleHQsIHBhdGgsIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0gICAgfQotfQotCi12b2lk
IGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cm91bmRlZEhvbGVSZWN0LCBjb25zdCBGaWxsU291cmNlJiBmaWxsU291cmNlLCBjb25zdCBTaGFk
b3dTdGF0ZSYgc2hhZG93U3RhdGUpCi17Ci0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0LnJlbmRlclRhcmdldCgpOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19M
SU5FX18pOwotCi0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkUmVjdChyZWN0KTsKLQotICAg
IGlmICghcm91bmRlZEhvbGVSZWN0LnJhZGlpKCkuaXNaZXJvKCkpCi0gICAgICAgIHBhdGguYWRk
Um91bmRlZFJlY3Qocm91bmRlZEhvbGVSZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIHBhdGguYWRk
UmVjdChyb3VuZGVkSG9sZVJlY3QucmVjdCgpKTsKLQotICAgIEZpbGxTb3VyY2UgZmlsbFdpdGhI
b2xlU291cmNlID0gZmlsbFNvdXJjZTsKLSAgICBmaWxsV2l0aEhvbGVTb3VyY2UuZmlsbFJ1bGUg
PSBXaW5kUnVsZTo6RXZlbk9kZDsKLQotICAgIGZpbGxQYXRoKHBsYXRmb3JtQ29udGV4dCwgcGF0
aCwgZmlsbFdpdGhIb2xlU291cmNlLCBzaGFkb3dTdGF0ZSk7Ci19Ci0KLXZvaWQgZmlsbFJlY3RX
aXRoR3JhZGllbnQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBJRDJEMUJydXNoKiBncmFkaWVudCkKLXsKLSAgICBwbGF0Zm9y
bUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgZHJhd1dpdGhvdXRTaGFkb3cocGxh
dGZvcm1Db250ZXh0LCBbJnBsYXRmb3JtQ29udGV4dCwgcmVjdCwgJmdyYWRpZW50XShJRDJEMVJl
bmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQy
ZFJlY3QgPSByZWN0OwotICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxSZWN0YW5nbGUoJmQyZFJl
Y3QsIGdyYWRpZW50KTsKLSAgICB9KTsKLX0KLQotdm9pZCBmaWxsUGF0aChQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBGaWxs
U291cmNlJiBmaWxsU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCi17Ci0g
ICAgcGF0aC5jbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9PUEVOKTsKLQot
ICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAg
IHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLQotICAgIENPTVB0cjxJRDJE
MUdlb21ldHJ5R3JvdXA+IHBhdGhUb0ZpbGw7Ci0gICAgcGF0aC5jcmVhdGVHZW9tZXRyeVdpdGhG
aWxsTW9kZShmaWxsU291cmNlLmZpbGxSdWxlLCBwYXRoVG9GaWxsKTsKLQotICAgIHBsYXRmb3Jt
Q29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBGdW5jdGlvbjx2b2lkKElEMkQxUmVu
ZGVyVGFyZ2V0Kik+IGRyYXdGdW5jdGlvbiA9IFsmcGxhdGZvcm1Db250ZXh0LCAmcGF0aFRvRmls
bCwgJmZpbGxTb3VyY2VdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5GaWxsR2VvbWV0cnkocGF0aFRvRmlsbC5nZXQoKSwgZmlsbFNvdXJj
ZS5icnVzaC5nZXQoKSk7Ci0gICAgfTsKLQotICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2libGUo
KSkgewotICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdS
ZWN0KCk7Ci0gICAgICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgYm91bmRpbmdS
ZWN0LCBzaGFkb3dTdGF0ZSwgV1RGTW92ZShkcmF3RnVuY3Rpb24pKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBXVEZNb3ZlKGRyYXdGdW5j
dGlvbikpOwotfQotCi12b2lkIGZpbGxQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0
Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IENvbG9yJiBjb2xvciwgY29uc3Qg
U2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEs
IF9fTElORV9fKTsKLQotICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+IHBhdGhUb0ZpbGw7
Ci0gICAgcGF0aC5jcmVhdGVHZW9tZXRyeVdpdGhGaWxsTW9kZShXaW5kUnVsZTo6RXZlbk9kZCwg
cGF0aFRvRmlsbCk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7
Ci0KLSAgICBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+IGRyYXdGdW5jdGlvbiA9
IFsmcGxhdGZvcm1Db250ZXh0LCAmcGF0aFRvRmlsbCwgY29sb3JdKElEMkQxUmVuZGVyVGFyZ2V0
KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsR2VvbWV0cnkocGF0
aFRvRmlsbC5nZXQoKSwgcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKGNvbG9yKS5nZXQo
KSk7Ci0gICAgfTsKLQotICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2libGUoKSkgewotICAgICAg
ICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7Ci0gICAg
ICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgYm91bmRpbmdSZWN0LCBzaGFkb3dT
dGF0ZSwgV1RGTW92ZShkcmF3RnVuY3Rpb24pKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZHJhd1dp
dGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBXVEZNb3ZlKGRyYXdGdW5jdGlvbikpOwotfQot
Ci12b2lkIHN0cm9rZVJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgsIGNvbnN0IFN0cm9rZVNv
dXJjZSYgc3Ryb2tlU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCi17Ci0g
ICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCByZWN0LCBzaGFkb3dTdGF0ZSwgWyZw
bGF0Zm9ybUNvbnRleHQsICZzdHJva2VTb3VyY2UsIHJlY3QsIGxpbmVXaWR0aF0oSUQyRDFSZW5k
ZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFn
cygxLCBfX0xJTkVfXyk7Ci0gICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0
OwotICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdSZWN0YW5nbGUoJmQyZFJlY3QsIHN0cm9rZVNv
dXJjZS5icnVzaC5nZXQoKSwgbGluZVdpZHRoLCBwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlU3R5bGUo
KSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgc3Ryb2tlUGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBTdHJva2VTb3VyY2Um
IHN0cm9rZVNvdXJjZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAgIGF1
dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLSAgICAKLSAgICBw
bGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0KLSAgICBGdW5jdGlvbjx2b2lk
KElEMkQxUmVuZGVyVGFyZ2V0Kik+IGRyYXdGdW5jdGlvbiA9IFsmcGxhdGZvcm1Db250ZXh0LCAm
cGF0aCwgJnN0cm9rZVNvdXJjZV0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewot
ICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdHZW9tZXRyeShwYXRoLnBsYXRmb3JtUGF0aCgpLCBz
dHJva2VTb3VyY2UuYnJ1c2guZ2V0KCksIHN0cm9rZVNvdXJjZS50aGlja25lc3MsIHBsYXRmb3Jt
Q29udGV4dC5zdHJva2VTdHlsZSgpKTsKLSAgICB9OwotCi0gICAgaWYgKHNoYWRvd1N0YXRlLmlz
VmlzaWJsZSgpKSB7Ci0gICAgICAgIGF1dG8gYm91bmRpbmdSZWN0ID0gcGF0aC5mYXN0Qm91bmRp
bmdSZWN0Rm9yU3Ryb2tlKHBsYXRmb3JtQ29udGV4dCk7Ci0gICAgICAgIGRyYXdXaXRoU2hhZG93
KHBsYXRmb3JtQ29udGV4dCwgYm91bmRpbmdSZWN0LCBzaGFkb3dTdGF0ZSwgV1RGTW92ZShkcmF3
RnVuY3Rpb24pKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZv
cm1Db250ZXh0LCBXVEZNb3ZlKGRyYXdGdW5jdGlvbikpOwotfQotCi12b2lkIGRyYXdQYXRoKFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgs
IGNvbnN0IFN0cm9rZVNvdXJjZSYgc3Ryb2tlU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYpCi17
Ci0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0g
ICAgcGF0aC5jbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9PUEVOKTsKLQot
ICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLQotICAgIGRyYXdXaXRo
b3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9ybUNvbnRleHQsICZzdHJva2VTb3Vy
Y2UsICZwYXRoXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIHJl
bmRlclRhcmdldC0+RHJhd0dlb21ldHJ5KHBhdGgucGxhdGZvcm1QYXRoKCksIHN0cm9rZVNvdXJj
ZS5icnVzaC5nZXQoKSwgc3Ryb2tlU291cmNlLnRoaWNrbmVzcywgcGxhdGZvcm1Db250ZXh0LnN0
cm9rZVN0eWxlKCkpOwotICAgIH0pOwotCi0gICAgZmx1c2gocGxhdGZvcm1Db250ZXh0KTsKLX0K
LQotc3RhdGljIHZvaWQgZHJhd1dpdGhTaGFkb3dIZWxwZXIoSUQyRDFSZW5kZXJUYXJnZXQqIGNv
bnRleHQsIElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQsIGNvbnN0IEZsb2F0
UmVjdCYgYm91bmRpbmdSZWN0LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0
U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dCbHVyKQotewotICAgIENPTVB0cjxJRDJE
MUJpdG1hcD4gY3VycmVudENhbnZhcyA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXBDb3B5RnJvbUNv
bnRleHQoYml0bWFwVGFyZ2V0KTsKLSAgICBpZiAoIWN1cnJlbnRDYW52YXMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IHNoYWRvd0RldmljZUNvbnRl
eHQ7Ci0gICAgSFJFU1VMVCBociA9IGJpdG1hcFRhcmdldC0+UXVlcnlJbnRlcmZhY2UoJnNoYWRv
d0RldmljZUNvbnRleHQpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0g
ICAgLy8gQ3JlYXRlIHRoZSBzaGFkb3cgZWZmZWN0Ci0gICAgQ09NUHRyPElEMkQxRWZmZWN0PiBz
aGFkb3dFZmZlY3Q7Ci0gICAgaHIgPSBzaGFkb3dEZXZpY2VDb250ZXh0LT5DcmVhdGVFZmZlY3Qo
Q0xTSURfRDJEMVNoYWRvdywgJnNoYWRvd0VmZmVjdCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VD
Q0VFREVEKGhyKSk7Ci0KLSAgICBzaGFkb3dFZmZlY3QtPlNldElucHV0KDAsIGN1cnJlbnRDYW52
YXMuZ2V0KCkpOwotICAgIHNoYWRvd0VmZmVjdC0+U2V0VmFsdWUoRDJEMV9TSEFET1dfUFJPUF9D
T0xPUiwgc3RhdGljX2Nhc3Q8RDJEMV9WRUNUT1JfNEY+KHNoYWRvd0NvbG9yKSk7Ci0KLSAgICBm
bG9hdCBibHVyRGV2aWF0aW9uID0gMC41ICogc2hhZG93Qmx1cjsKLSAgICBzaGFkb3dFZmZlY3Qt
PlNldFZhbHVlKEQyRDFfU0hBRE9XX1BST1BfQkxVUl9TVEFOREFSRF9ERVZJQVRJT04sIGJsdXJE
ZXZpYXRpb24pOwotCi0gICAgQ09NUHRyPElEMkQxRWZmZWN0PiBzaGFkb3dUcmFuc2Zvcm1FZmZl
Y3Q7Ci0gICAgaHIgPSBzaGFkb3dEZXZpY2VDb250ZXh0LT5DcmVhdGVFZmZlY3QoQ0xTSURfRDJE
MTJEQWZmaW5lVHJhbnNmb3JtLCAmc2hhZG93VHJhbnNmb3JtRWZmZWN0KTsKLSAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIHNoYWRvd1RyYW5zZm9ybUVmZmVjdC0+U2V0
SW5wdXRFZmZlY3QoMCwgc2hhZG93RWZmZWN0LmdldCgpKTsKLQotICAgIC8vIE11c3QgZmxpcCB0
aGUgYXhpcyBmb3IgdGhlIHNoYWRvdyBvZmZzZXQsIHNpbmNlIERpcmVjdDJEJ3MgWSBheGlzIGlz
IGludmVydGVkLgotICAgIGF1dG8gc2hhZG93VHJhbnNsYXRpb24gPSBEMkQxOjpNYXRyaXgzeDJG
OjpUcmFuc2xhdGlvbihzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQo
KSk7Ci0gICAgc2hhZG93VHJhbnNmb3JtRWZmZWN0LT5TZXRWYWx1ZShEMkQxXzJEQUZGSU5FVFJB
TlNGT1JNX1BST1BfVFJBTlNGT1JNX01BVFJJWCwgc2hhZG93VHJhbnNsYXRpb24pOwotCi0gICAg
Q09NUHRyPElEMkQxRWZmZWN0PiBjb21wb3NpdG9yOwotICAgIGhyID0gc2hhZG93RGV2aWNlQ29u
dGV4dC0+Q3JlYXRlRWZmZWN0KENMU0lEX0QyRDFDb21wb3NpdGUsICZjb21wb3NpdG9yKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGNvbXBvc2l0b3ItPlNldElu
cHV0RWZmZWN0KDAsIHNoYWRvd1RyYW5zZm9ybUVmZmVjdC5nZXQoKSk7Ci0gICAgY29tcG9zaXRv
ci0+U2V0SW5wdXQoMSwgY3VycmVudENhbnZhcy5nZXQoKSk7Ci0KLSAgICBzaGFkb3dEZXZpY2VD
b250ZXh0LT5CZWdpbkRyYXcoKTsKLSAgICBzaGFkb3dEZXZpY2VDb250ZXh0LT5DbGVhcihEMkQx
OjpDb2xvckYoMCwgMCwgMCwgMCkpOwotICAgIHNoYWRvd0RldmljZUNvbnRleHQtPkRyYXdJbWFn
ZShjb21wb3NpdG9yLmdldCgpKTsKLSAgICBociA9IHNoYWRvd0RldmljZUNvbnRleHQtPkVuZERy
YXcoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENPTVB0cjxJ
RDJEMUJpdG1hcD4gYml0bWFwOwotICAgIGhyID0gYml0bWFwVGFyZ2V0LT5HZXRCaXRtYXAoJmJp
dG1hcCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBJbnRTaXpl
IHBpeGVsU2l6ZSA9IGNvbnRleHQtPkdldFBpeGVsU2l6ZSgpOwotICAgIENPTVB0cjxJRDJEMUJp
dG1hcD4gY3JvcHBlZCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXAoYml0bWFwVGFyZ2V0LCBwaXhl
bFNpemUpOwotICAgIGlmICghY3JvcHBlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBz
Y2FsZUZhY3RvciA9IGJpdG1hcFJlc29sdXRpb24oY29udGV4dCk7Ci0KLSAgICBGbG9hdFJlY3Qg
c2NhbGVkQm91bmRpbmdSZWN0KGJvdW5kaW5nUmVjdCk7Ci0gICAgc2NhbGVkQm91bmRpbmdSZWN0
LnNjYWxlKHNjYWxlRmFjdG9yLndpZHRoKCksIHNjYWxlRmFjdG9yLmhlaWdodCgpKTsKLQotICAg
IC8vIFRha2UgdGhlIG1hZ25pdHVkZSBvZiB0aGUgb2Zmc2V0LiBJZiB0aGUgb3JpZ2luIHdhcyBv
dXRzaWRlIHRoZSBkcmF3aW5nIGNvbnRleHQsIHdlIHN0cmV0Y2hlZCB0byBpbmNsdWRlIHRob3Nl
IHBvaW50cywKLSAgICAvLyBhbmQgc28gd2UgbmVlZCB0byBjcm9wIHRoZW0gb3V0LiBJZiB0aGUg
b3JpZ2luIHdhcyBpbnNpZGUsIHdlIHdhbnQgdG8gaG9ub3IgdGhlIG9mZnNldC4KLSAgICBpbnQg
eCA9IGNsYW1wVG88aW50PihzdGQ6OmFicyhzY2FsZWRCb3VuZGluZ1JlY3QueCgpKSk7Ci0gICAg
aW50IHkgPSBjbGFtcFRvPGludD4oc3RkOjphYnMoc2NhbGVkQm91bmRpbmdSZWN0LnkoKSkpOwot
ICAgIGludCB3aWR0aCA9IGNsYW1wVG88aW50PihzY2FsZWRCb3VuZGluZ1JlY3Qud2lkdGgoKSk7
Ci0gICAgaW50IGhlaWdodCA9IGNsYW1wVG88aW50PihzY2FsZWRCb3VuZGluZ1JlY3QuaGVpZ2h0
KCkpOwotCi0gICAgSW50UmVjdCBvdXRwdXRSZWN0KEludFBvaW50KHgsIHkpLCBJbnRTaXplKHdp
ZHRoLCBoZWlnaHQpKTsKLSAgICBJbnRSZWN0IGRlc3RDb250ZXh0UmVjdChJbnRQb2ludCgpLCBw
aXhlbFNpemUpOwotICAgIGlmIChvdXRwdXRSZWN0LmludGVyc2VjdHMoZGVzdENvbnRleHRSZWN0
KSkKLSAgICAgICAgb3V0cHV0UmVjdC5pbnRlcnNlY3QoZGVzdENvbnRleHRSZWN0KTsKLQotICAg
IEQyRDFfUkVDVF9VIGNyb3BSZWN0ID0gb3V0cHV0UmVjdDsKLSAgICBhdXRvIHRhcmdldFBvaW50
ID0gRDJEMTo6UG9pbnQyVSgpOwotICAgIGNyb3BwZWQtPkNvcHlGcm9tQml0bWFwKCZ0YXJnZXRQ
b2ludCwgYml0bWFwLmdldCgpLCAmY3JvcFJlY3QpOwotCi0gICAgY29udGV4dC0+RHJhd0JpdG1h
cChjcm9wcGVkLmdldCgpKTsKLX0KLQotdm9pZCBkcmF3V2l0aFNoYWRvdyhQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBGbG9hdFJlY3QgYm91bmRpbmdSZWN0LCBjb25z
dCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUsIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJn
ZXQqKT4mJiBkcmF3Q29tbWFuZHMpCi17Ci0gICAgaWYgKCFzaGFkb3dTdGF0ZS5pc1Zpc2libGUo
KSkgewotICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFdURk1vdmUo
ZHJhd0NvbW1hbmRzKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwbGF0Zm9ybUNv
bnRleHQubm90aWZ5UHJlRHJhd09ic2VydmVyKCk7Ci0KLSAgICBhdXRvKiBjb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0gICAgRmxvYXRTaXplIHJlbmRlclRhcmdl
dFNpemUgPSBjb250ZXh0LT5HZXRTaXplKCk7Ci0gICAgY29uc3QgRmxvYXRSZWN0IGNvbnRleHRS
ZWN0KEZsb2F0UG9pbnQoKSwgcmVuZGVyVGFyZ2V0U2l6ZSk7Ci0gICAgRmxvYXRSZWN0IHdvcmtp
bmdDb250ZXh0UmVjdChjb250ZXh0UmVjdCk7Ci0KLSAgICBpZiAoYm91bmRpbmdSZWN0LmlzSW5m
aW5pdGUoKSkKLSAgICAgICAgYm91bmRpbmdSZWN0ID0gd29ya2luZ0NvbnRleHRSZWN0OwotCi0g
ICAgaWYgKCFjb250ZXh0UmVjdC5jb250YWlucyhib3VuZGluZ1JlY3QpKQotICAgICAgICB3b3Jr
aW5nQ29udGV4dFJlY3QudW5pdGUoYm91bmRpbmdSZWN0KTsKLQotICAgIHdvcmtpbmdDb250ZXh0
UmVjdC5leHBhbmQoc3RkOjphYnMoc2hhZG93U3RhdGUub2Zmc2V0LndpZHRoKCkpICsgc2hhZG93
U3RhdGUuYmx1ciwgc3RkOjphYnMoc2hhZG93U3RhdGUub2Zmc2V0LmhlaWdodCgpKSArIHNoYWRv
d1N0YXRlLmJsdXIpOwotCi0gICAgYXV0byBzY2FsZUZhY3RvciA9IGJpdG1hcFJlc29sdXRpb24o
Y29udGV4dCk7Ci0KLSAgICB3b3JraW5nQ29udGV4dFJlY3Quc2NhbGUoc2NhbGVGYWN0b3IpOwot
Ci0gICAgSW50U2l6ZSBwaXhlbERpbWVuc2lvbnMoY2xhbXBUbzxpbnQ+KHdvcmtpbmdDb250ZXh0
UmVjdC53aWR0aCgpKSwgY2xhbXBUbzxpbnQ+KHdvcmtpbmdDb250ZXh0UmVjdC5oZWlnaHQoKSkp
OwotCi0gICAgLy8gUmVuZGVyIHRoZSBjdXJyZW50IGdlb21ldHJ5IHRvIGEgYml0bWFwIGNvbnRl
eHQKLSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldCA9IGNy
ZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShwaXhlbERpbWVuc2lvbnMsIGNvbnRleHQpOwot
Ci0gICAgRDJEMV9NQVRSSVhfM1gyX0YgY3VycmVudFRyYW5zZm9ybTsKLSAgICBiaXRtYXBUYXJn
ZXQtPkdldFRyYW5zZm9ybSgmY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBpZiAoIWNvbnRleHRS
ZWN0LmNvbnRhaW5zKGJvdW5kaW5nUmVjdC5sb2NhdGlvbigpKSkgewotICAgICAgICBhdXRvIHRy
YW5zbGF0aW9uID0gRDJEMTo6TWF0cml4M3gyRjo6VHJhbnNsYXRpb24oLWJvdW5kaW5nUmVjdC5s
b2NhdGlvbigpLngoKSwgLWJvdW5kaW5nUmVjdC5sb2NhdGlvbigpLnkoKSk7Ci0gICAgICAgIGJp
dG1hcFRhcmdldC0+U2V0VHJhbnNmb3JtKHRyYW5zbGF0aW9uICogY3VycmVudFRyYW5zZm9ybSk7
Ci0gICAgfQotCi0gICAgYml0bWFwVGFyZ2V0LT5CZWdpbkRyYXcoKTsKLSAgICBkcmF3Q29tbWFu
ZHMoYml0bWFwVGFyZ2V0LmdldCgpKTsKLSAgICBIUkVTVUxUIGhyID0gYml0bWFwVGFyZ2V0LT5F
bmREcmF3KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBiaXRt
YXBUYXJnZXQtPlNldFRyYW5zZm9ybShjdXJyZW50VHJhbnNmb3JtKTsKLQotICAgIGRyYXdXaXRo
U2hhZG93SGVscGVyKGNvbnRleHQsIGJpdG1hcFRhcmdldC5nZXQoKSwgYm91bmRpbmdSZWN0LCBz
aGFkb3dTdGF0ZS5jb2xvciwgc2hhZG93U3RhdGUub2Zmc2V0LCBzaGFkb3dTdGF0ZS5ibHVyKTsK
LSAgICBwbGF0Zm9ybUNvbnRleHQubm90aWZ5UG9zdERyYXdPYnNlcnZlcigpOwotfQotCi12b2lk
IGRyYXdXaXRob3V0U2hhZG93KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRl
eHQsIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4mJiBkcmF3Q29tbWFuZHMpCi17
Ci0gICAgcGxhdGZvcm1Db250ZXh0Lm5vdGlmeVByZURyYXdPYnNlcnZlcigpOwotICAgIGRyYXdD
b21tYW5kcyhwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIHBsYXRmb3JtQ29u
dGV4dC5ub3RpZnlQb3N0RHJhd09ic2VydmVyKCk7Ci19Ci0KLXZvaWQgY2xlYXJSZWN0KFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLXsKLSAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1D
b250ZXh0LCByZWN0XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAg
IEZsb2F0UmVjdCByZW5kZXJUYXJnZXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVuZGVyVGFyZ2V0LT5H
ZXRTaXplKCkpOwotCi0gICAgICAgIEQyRDE6Ok1hdHJpeDN4MkYgbWF0cml4OwotICAgICAgICBy
ZW5kZXJUYXJnZXQtPkdldFRyYW5zZm9ybSgmbWF0cml4KTsKLQotICAgICAgICBBZmZpbmVUcmFu
c2Zvcm0gdHJhbnNmb3JtKG1hdHJpeCk7Ci0KLSAgICAgICAgRmxvYXRSZWN0IHJlY3RUb0NsZWFy
KHJlY3QpOwotICAgICAgICBpZiAoIXRyYW5zZm9ybS5wcmVzZXJ2ZXNBeGlzQWxpZ25tZW50KCkp
IHsKLSAgICAgICAgICAgIENPTVB0cjxJRDJEMVJlY3RhbmdsZUdlb21ldHJ5PiByZWN0YW5nbGU7
Ci0gICAgICAgICAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5
KCktPkNyZWF0ZVJlY3RhbmdsZUdlb21ldHJ5KHJlY3RUb0NsZWFyLCAmcmVjdGFuZ2xlKTsKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgICAgICAgICAgcmVu
ZGVyVGFyZ2V0LT5GaWxsR2VvbWV0cnkocmVjdGFuZ2xlLmdldCgpLCBwbGF0Zm9ybUNvbnRleHQu
YnJ1c2hXaXRoQ29sb3IoRDJEMTo6Q29sb3JGKDAsIDAsIDAsIDApKS5nZXQoKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICByZWN0VG9DbGVhciA9IHRyYW5zZm9y
bS5tYXBSZWN0KHJlY3RUb0NsZWFyKTsKLQotICAgICAgICBpZiAocmVjdFRvQ2xlYXIuY29udGFp
bnMocmVuZGVyVGFyZ2V0UmVjdCkpIHsKLSAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC5zZXRU
YWdzKDEsIF9fTElORV9fKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldC0+Q2xlYXIoRDJEMTo6
Q29sb3JGKDAsIDAsIDAsIDApKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICAgICAgcmVu
ZGVyVGFyZ2V0LT5QdXNoQXhpc0FsaWduZWRDbGlwKHJlY3RUb0NsZWFyLCBEMkQxX0FOVElBTElB
U19NT0RFX1BFUl9QUklNSVRJVkUpOwotICAgICAgICByZW5kZXJUYXJnZXQtPkNsZWFyKEQyRDE6
OkNvbG9yRigwLCAwLCAwLCAwKSk7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+UG9wQXhpc0FsaWdu
ZWRDbGlwKCk7Ci0gICAgfSk7Ci19Ci0KLQotdm9pZCBkcmF3R2x5cGhzKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZpbGxTb3VyY2UmIGZpbGxTb3VyY2Us
IGNvbnN0IFN0cm9rZVNvdXJjZSYgc3Ryb2tlU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hh
ZG93U3RhdGUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBkb3Vi
bGUgc3ludGhldGljQm9sZE9mZnNldCwgY29uc3QgVmVjdG9yPHVuc2lnbmVkIHNob3J0PiYgZ2x5
cGhzLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBob3Jpem9udGFsQWR2YW5jZXMsIGNvbnN0IFZlY3Rv
cjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiYgZ2x5cGhPZmZzZXRzLCBmbG9hdCB4T2Zmc2V0LCBUZXh0
RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcywg
Y29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcikK
LXsKLSAgICBhdXRvIHJlbmRlclRhcmdldCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQo
KTsKLSAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LnBsYXRm
b3JtRGF0YSgpOwotCi0gICAgUGxhdGZvcm1Db250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBs
YXRmb3JtQ29udGV4dCk7Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiBtYXRyaXg7Ci0gICAgcmVu
ZGVyVGFyZ2V0LT5HZXRUcmFuc2Zvcm0oJm1hdHJpeCk7Ci0KLSAgICAvKgotICAgIC8vIEZJWE1F
OiBHZXQgU3ludGhldGljIE9ibGlxdWUgd29ya2luZwotICAgIGlmIChwbGF0Zm9ybURhdGEuc3lu
dGhldGljT2JsaXF1ZSgpKSB7Ci0gICAgICAgIHN0YXRpYyBmbG9hdCBza2V3ID0gLXRhbmYoc3lu
dGhldGljT2JsaXF1ZUFuZ2xlKCkgKiBwaUZsb2F0IC8gMTgwLjBmKTsKLSAgICAgICAgYXV0byBz
a2V3TWF0cml4ID0gRDJEMTo6TWF0cml4M3gyRjo6U2tldyhza2V3LCAwKTsKLSAgICAgICAgY29u
dGV4dC0+U2V0VHJhbnNmb3JtKG1hdHJpeCAqIHNrZXdNYXRyaXgpOwotICAgIH0KLSAgICAqLwot
Ci0gICAgUkVMRUFTRV9BU1NFUlQocGxhdGZvcm1EYXRhLmR3Rm9udCgpKTsKLSAgICBSRUxFQVNF
X0FTU0VSVChwbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpKTsKLQotICAgIERXUklURV9HTFlQSF9S
VU4gZ2x5cGhSdW47Ci0gICAgZ2x5cGhSdW4uZm9udEZhY2UgPSBwbGF0Zm9ybURhdGEuZHdGb250
RmFjZSgpOwotICAgIGdseXBoUnVuLmZvbnRFbVNpemUgPSBwbGF0Zm9ybURhdGEuc2l6ZSgpOwot
ICAgIGdseXBoUnVuLmdseXBoQ291bnQgPSBnbHlwaHMuc2l6ZSgpOwotICAgIGdseXBoUnVuLmds
eXBoSW5kaWNlcyA9IGdseXBocy5kYXRhKCk7Ci0gICAgZ2x5cGhSdW4uZ2x5cGhBZHZhbmNlcyA9
IGhvcml6b250YWxBZHZhbmNlcy5kYXRhKCk7Ci0gICAgZ2x5cGhSdW4uZ2x5cGhPZmZzZXRzID0g
bnVsbHB0cjsKLSAgICBnbHlwaFJ1bi5pc1NpZGV3YXlzID0gcGxhdGZvcm1EYXRhLm9yaWVudGF0
aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbDsKLSAgICBnbHlwaFJ1bi5iaWRpTGV2
ZWwgPSAwOwotCi0gICAgLyoKLSAgICAvLyBGSVhNRSgpOiBHZXQgU2hhZG93cyB3b3JraW5nCi0g
ICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBzaGFkb3dCbHVyOwotICAgIENv
bG9yIHNoYWRvd0NvbG9yOwotICAgIGdyYXBoaWNzQ29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zm
c2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7Ci0KLSAgICBib29sIGhhc1NpbXBsZVNoYWRv
dyA9IGdyYXBoaWNzQ29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6
OkZpbGwgJiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmICFzaGFkb3dCbHVyICYmICghZ3JhcGhp
Y3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgZ3JhcGhpY3NDb250ZXh0Lmdl
dENUTSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOwotICAgIGlmIChoYXNT
aW1wbGVTaGFkb3cpIHsKLSAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVz
IGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Npbmcgc3VicGl4
ZWwgYW50aWFsaWFzaW5nLgotICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJTaGFkb3coKTsK
LSAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gZ3JhcGhpY3NDb250ZXh0LmZpbGxDb2xvcigpOwot
ICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhBbHBo
YU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOwotICAgICAgICBmbG9hdCBz
aGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOwotICAgICAgICAv
LyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBw
bGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgotICAg
ICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQo
KSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7
Ci0KLSAgICAgICAgYXV0byBzaGFkb3dCcnVzaCA9IGdyYXBoaWNzQ29udGV4dC5icnVzaFdpdGhD
b2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAgICAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJE
MTo6UG9pbnQyRihzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCAmZ2x5cGhSdW4sIHNoYWRvd0Jy
dXNoKTsKLSAgICAgICAgaWYgKGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpKQotICAgICAgICAg
ICAgY29udGV4dC0+RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50MkYoc2hhZG93VGV4dFggKyBmb250
LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwgc2hhZG93VGV4dFkpLCAmZ2x5cGhSdW4sIHNoYWRvd0Jy
dXNoKTsKLSAgICB9Ci0gICAgKi8KLQotICAgIHJlbmRlclRhcmdldC0+RHJhd0dseXBoUnVuKEQy
RDE6OlBvaW50MkYocG9pbnQueCgpLCBwb2ludC55KCkpLCAmZ2x5cGhSdW4sIGZpbGxTb3VyY2Uu
YnJ1c2guZ2V0KCkpOwotICAgIC8vIGlmIChmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSkKLSAg
ICAvLyAgICAgY29udGV4dC0+RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50MkYocG9pbnQueCgpICsg
Zm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSksICZnbHlwaFJ1biwgZ3JhcGhp
Y3NDb250ZXh0LnNvbGlkRmlsbEJydXNoKCkpOwotCi0gICAgLy8gaWYgKGhhc1NpbXBsZVNoYWRv
dykKLSAgICAvLyAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNo
YWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKLQotICAgIHN0YXRlU2F2ZXIucmVzdG9yZSgpOwotICAg
IHBsYXRmb3JtQ29udGV4dC5ub3RpZnlQb3N0RHJhd09ic2VydmVyKCk7Ci19Ci0KLQotdm9pZCBk
cmF3UGxhdGZvcm1JbWFnZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0
LCBJV0lDQml0bWFwKiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBvcmlnaW5hbEltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucywgZmxvYXQgZ2xvYmFsQWxwaGEsIGNvbnN0
IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBhdXRvIG5hdGl2ZUltYWdlU2l6ZSA9
IGJpdG1hcFNpemUoaW1hZ2UpOwotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gZGV2aWNlQml0bWFw
OwotICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkNyZWF0
ZUJpdG1hcEZyb21XaWNCaXRtYXAoaW1hZ2UsICZkZXZpY2VCaXRtYXApOwotICAgIGlmICghU1VD
Q0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBpbWFnZVNpemUgPSBiaXRt
YXBTaXplKGRldmljZUJpdG1hcC5nZXQoKSk7Ci0gICAgZHJhd1BsYXRmb3JtSW1hZ2UocGxhdGZv
cm1Db250ZXh0LCBkZXZpY2VCaXRtYXAuZ2V0KCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIG9wdGlvbnMsIGdsb2JhbEFscGhhLCBzaGFkb3dTdGF0ZSk7Ci19Ci0KLXZvaWQgZHJhd1Bs
YXRmb3JtSW1hZ2UoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgSUQy
RDFCaXRtYXAqIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucywgZmxvYXQgZ2xvYmFsQWxwaGEsIGNvbnN0IFNoYWRvd1N0YXRl
JiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBhdXRvIGJpdG1hcFNpemUgPSBpbWFnZS0+R2V0U2l6ZSgp
OwotCi0gICAgZmxvYXQgY3VyckhlaWdodCA9IG9wdGlvbnMub3JpZW50YXRpb24oKS51c2VzV2lk
dGhBc0hlaWdodCgpID8gYml0bWFwU2l6ZS53aWR0aCA6IGJpdG1hcFNpemUuaGVpZ2h0OwotICAg
IGlmIChjdXJySGVpZ2h0IDw9IHNyY1JlY3QueSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBEMkQx
X01BVFJJWF8zWDJfRiBjdG07Ci0gICAgY29udGV4dC0+R2V0VHJhbnNmb3JtKCZjdG0pOwotCi0g
ICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybShjdG0pOwotCi0gICAgUGxhdGZvcm1Db250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBsYXRmb3JtQ29udGV4dCk7Ci0KLSAgICBib29sIHNob3Vs
ZFVzZVN1YmltYWdlID0gZmFsc2U7Ci0KLSAgICAvLyBJZiB0aGUgc291cmNlIHJlY3QgaXMgYSBz
dWJwb3J0aW9uIG9mIHRoZSBpbWFnZSwgdGhlbiB3ZSBjb21wdXRlIGFuIGluZmxhdGVkIGRlc3Rp
bmF0aW9uIHJlY3QgdGhhdCB3aWxsIGhvbGQgdGhlIGVudGlyZSBpbWFnZQotICAgIC8vIGFuZCB0
aGVuIHNldCBhIGNsaXAgdG8gdGhlIHBvcnRpb24gdGhhdCB3ZSB3YW50IHRvIGRpc3BsYXkuCi0g
ICAgRmxvYXRSZWN0IGFkanVzdGVkRGVzdFJlY3QgPSBkZXN0UmVjdDsKLQotICAgIGlmIChzcmNS
ZWN0LnNpemUoKSAhPSBpbWFnZVNpemUpIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBp
bWFnZSBzY2FsaW5nCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotCi0gICAgLy8g
SWYgdGhlIGltYWdlIGlzIG9ubHkgcGFydGlhbGx5IGxvYWRlZCwgdGhlbiBzaHJpbmsgdGhlIGRl
c3RpbmF0aW9uIHJlY3QgdGhhdCB3ZSdyZSBkcmF3aW5nIGludG8gYWNjb3JkaW5nbHkuCi0gICAg
aWYgKCFzaG91bGRVc2VTdWJpbWFnZSAmJiBjdXJySGVpZ2h0IDwgaW1hZ2VTaXplLmhlaWdodCgp
KQotICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldEhlaWdodChhZGp1c3RlZERlc3RSZWN0Lmhl
aWdodCgpICogY3VyckhlaWdodCAvIGltYWdlU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBTdGF0ZTo6
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dCwgb3B0aW9ucy5jb21wb3NpdGVP
cGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKLQotICAgIC8vIEltYWdlT3JpZW50YXRp
b24gZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKS4KLSAgICB0cmFuc2Zvcm0udHJh
bnNsYXRlKGFkanVzdGVkRGVzdFJlY3QueCgpLCBhZGp1c3RlZERlc3RSZWN0LnkoKSk7Ci0gICAg
Y29udGV4dC0+U2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0gICAgYWRqdXN0ZWREZXN0UmVjdC5z
ZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOwotCi0gICAgaWYgKG9wdGlvbnMub3JpZW50YXRpb24o
KSAhPSBJbWFnZU9yaWVudGF0aW9uOjpOb25lKSB7Ci0gICAgICAgIGNvbmNhdENUTShwbGF0Zm9y
bUNvbnRleHQsIG9wdGlvbnMub3JpZW50YXRpb24oKS50cmFuc2Zvcm1Gcm9tRGVmYXVsdChhZGp1
c3RlZERlc3RSZWN0LnNpemUoKSkpOwotICAgICAgICBpZiAob3B0aW9ucy5vcmllbnRhdGlvbigp
LnVzZXNXaWR0aEFzSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBy
ZWN0IHdpbGwgaGF2ZSBpdCdzIHdpZHRoIGFuZCBoZWlnaHQgYWxyZWFkeSByZXZlcnNlZCBmb3Ig
dGhlIG9yaWVudGF0aW9uIG9mCi0gICAgICAgICAgICAvLyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBu
ZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3ZSBuZWVkIHRvIHJldmVyc2UgaXQgYmFjayBoZXJl
LgotICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdCA9IEZsb2F0UmVjdChhZGp1c3RlZERlc3RS
ZWN0LngoKSwgYWRqdXN0ZWREZXN0UmVjdC55KCksIGFkanVzdGVkRGVzdFJlY3QuaGVpZ2h0KCks
IGFkanVzdGVkRGVzdFJlY3Qud2lkdGgoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwbGF0
Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgZHJhd1dpdGhTaGFkb3cocGxh
dGZvcm1Db250ZXh0LCBhZGp1c3RlZERlc3RSZWN0LCBzaGFkb3dTdGF0ZSwgW2ltYWdlLCBhZGp1
c3RlZERlc3RSZWN0LCBnbG9iYWxBbHBoYSwgc3JjUmVjdF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJl
bmRlclRhcmdldCkgewotICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdCaXRtYXAoaW1hZ2UsIGFk
anVzdGVkRGVzdFJlY3QsIGdsb2JhbEFscGhhLCBEMkQxX0JJVE1BUF9JTlRFUlBPTEFUSU9OX01P
REVfTElORUFSLCBzcmNSZWN0KTsKLSAgICB9KTsKLQotICAgIGlmICghc3RhdGVTYXZlci5kaWRT
YXZlKCkpCi0gICAgICAgIGNvbnRleHQtPlNldFRyYW5zZm9ybShjdG0pOwotfQotCi12b2lkIGRy
YXdQYXR0ZXJuKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIENPTVB0
cjxJRDJEMUJpdG1hcD4mJiB0aWxlSW1hZ2UsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQot
ewotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLSAg
ICBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGxhdGZvcm1Db250ZXh0KTsK
LQotICAgIGNsaXAocGxhdGZvcm1Db250ZXh0LCBkZXN0UmVjdCk7Ci0KLSAgICBTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJs
ZW5kTW9kZSk7Ci0KLSAgICBhdXRvIGJpdG1hcEJydXNoUHJvcGVydGllcyA9IEQyRDE6OkJpdG1h
cEJydXNoUHJvcGVydGllcygpOwotICAgIGJpdG1hcEJydXNoUHJvcGVydGllcy5leHRlbmRNb2Rl
WCA9IEQyRDFfRVhURU5EX01PREVfV1JBUDsKLSAgICBiaXRtYXBCcnVzaFByb3BlcnRpZXMuZXh0
ZW5kTW9kZVkgPSBEMkQxX0VYVEVORF9NT0RFX1dSQVA7Ci0KLSAgICAvLyBDcmVhdGUgYSBicnVz
aCB0cmFuc2Zvcm1hdGlvbiBzbyB3ZSBwYWludCB1c2luZyB0aGUgc2VjdGlvbiBvZiB0aGUgaW1h
Z2Ugd2UgY2FyZSBhYm91dC4KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtYXRpb24gPSBw
YXR0ZXJuVHJhbnNmb3JtOwotICAgIHRyYW5zZm9ybWF0aW9uLnRyYW5zbGF0ZShkZXN0UmVjdC5s
b2NhdGlvbigpKTsKLQotICAgIGF1dG8gYnJ1c2hQcm9wZXJ0aWVzID0gRDJEMTo6QnJ1c2hQcm9w
ZXJ0aWVzKCk7Ci0gICAgYnJ1c2hQcm9wZXJ0aWVzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybWF0aW9u
OwotICAgIGJydXNoUHJvcGVydGllcy5vcGFjaXR5ID0gMS4wZjsKLQotICAgIC8vIElmIHdlIG9u
bHkgd2FudCBhIHN1YnNldCBvZiB0aGUgYml0bWFwLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIGNyb3Bw
ZWQgYml0bWFwIGltYWdlLiBBY2NvcmRpbmcgdG8gdGhlIGRvY3VtZW50YXRpb24sCi0gICAgLy8g
dGhpcyBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYml0bWFwIG1lbW9yeS4KLSAgICBpZiAoc2l6ZS53
aWR0aCgpID4gZGVzdFJlY3Qud2lkdGgoKSB8fCBzaXplLmhlaWdodCgpID4gZGVzdFJlY3QuaGVp
Z2h0KCkpIHsKLSAgICAgICAgZmxvYXQgZHBpWCA9IDA7Ci0gICAgICAgIGZsb2F0IGRwaVkgPSAw
OwotICAgICAgICB0aWxlSW1hZ2UtPkdldERwaSgmZHBpWCwgJmRwaVkpOwotICAgICAgICBhdXRv
IGJpdG1hcFByb3BlcnRpZXMgPSBEMkQxOjpCaXRtYXBQcm9wZXJ0aWVzKHRpbGVJbWFnZS0+R2V0
UGl4ZWxGb3JtYXQoKSwgZHBpWCwgZHBpWSk7Ci0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4g
c3ViSW1hZ2U7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0LT5DcmVhdGVCaXRtYXAoSW50
U2l6ZSh0aWxlUmVjdC5zaXplKCkpLCBiaXRtYXBQcm9wZXJ0aWVzLCAmc3ViSW1hZ2UpOwotICAg
ICAgICBpZiAoU1VDQ0VFREVEKGhyKSkgewotICAgICAgICAgICAgRDJEMV9SRUNUX1UgZmluaXNo
UmVjdCA9IEludFJlY3QodGlsZVJlY3QpOwotICAgICAgICAgICAgaHIgPSBzdWJJbWFnZS0+Q29w
eUZyb21CaXRtYXAobnVsbHB0ciwgdGlsZUltYWdlLmdldCgpLCAmZmluaXNoUmVjdCk7Ci0gICAg
ICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAgICAgICB0aWxlSW1hZ2UgPSBz
dWJJbWFnZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcEJydXNo
PiBwYXR0ZXJuQnJ1c2g7Ci0gICAgSFJFU1VMVCBociA9IGNvbnRleHQtPkNyZWF0ZUJpdG1hcEJy
dXNoKHRpbGVJbWFnZS5nZXQoKSwgJmJpdG1hcEJydXNoUHJvcGVydGllcywgJmJydXNoUHJvcGVy
dGllcywgJnBhdHRlcm5CcnVzaCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIGlm
ICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZHJhd1dpdGhvdXRTaGFk
b3cocGxhdGZvcm1Db250ZXh0LCBbZGVzdFJlY3QsIHBhdHRlcm5CcnVzaF0oSUQyRDFSZW5kZXJU
YXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0
ID0gZGVzdFJlY3Q7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVj
dCwgcGF0dGVybkJydXNoLmdldCgpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBkcmF3UmVjdChQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcywgY29uc3QgQ29sb3ImIGZpbGxDb2xvciwgU3Ryb2tl
U3R5bGUgc3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvcikKLXsKLSAgICAvLyBG
SVhNRTogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUgcGF0dGVybnMgYW5kIGdyYWRpZW50
cyBsaWtlIGRyYXdQYXRoIGRvZXMsIGl0IHByb2JhYmx5IHNob3VsZC4KLSAgICBBU1NFUlQoIXJl
Y3QuaXNFbXB0eSgpKTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9f
KTsKLSAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1Db250
ZXh0LCByZWN0LCBmaWxsQ29sb3IsIHN0cm9rZUNvbG9yLCBzdHJva2VTdHlsZV0oSUQyRDFSZW5k
ZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRS
ZWN0ID0gcmVjdDsKLSAgICAgICAgYXV0byBmaWxsQnJ1c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1
c2hXaXRoQ29sb3IoZmlsbENvbG9yKTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFu
Z2xlKCZkMmRSZWN0LCBmaWxsQnJ1c2guZ2V0KCkpOwotICAgICAgICBpZiAoc3Ryb2tlU3R5bGUg
IT0gTm9TdHJva2UpIHsKLSAgICAgICAgICAgIGF1dG8gc3Ryb2tlQnJ1c2ggPSBwbGF0Zm9ybUNv
bnRleHQuYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IpOwotICAgICAgICAgICAgcmVuZGVyVGFy
Z2V0LT5EcmF3UmVjdGFuZ2xlKCZkMmRSZWN0LCBzdHJva2VCcnVzaC5nZXQoKSwgcGxhdGZvcm1D
b250ZXh0LnN0cm9rZVRoaWNrbmVzcygpLCBwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlU3R5bGUoKSk7
Ci0gICAgICAgIH0KLSAgICB9KTsKLX0KLQotdm9pZCBkcmF3TGluZShQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MiwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9y
JiBzdHJva2VDb2xvciwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBib29sIHNob3VsZEFudGlhbGlh
cykKLXsKLSAgICBib29sIGlzVmVydGljYWxMaW5lID0gKHBvaW50MS54KCkgKyBzdHJva2VUaGlj
a25lc3MgPT0gcG9pbnQyLngoKSk7Ci0gICAgZmxvYXQgc3Ryb2tlV2lkdGggPSBpc1ZlcnRpY2Fs
TGluZSA/IHBvaW50Mi55KCkgLSBwb2ludDEueSgpIDogcG9pbnQyLngoKSAtIHBvaW50MS54KCk7
Ci0gICAgaWYgKCFzdHJva2VUaGlja25lc3MgfHwgIXN0cm9rZVdpZHRoKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7
Ci0KLSAgICBmbG9hdCBjb3JuZXJXaWR0aCA9IDA7Ci0gICAgYm9vbCBkcmF3c0Rhc2hlZExpbmUg
PSBzdHJva2VTdHlsZSA9PSBEb3R0ZWRTdHJva2UgfHwgc3Ryb2tlU3R5bGUgPT0gRGFzaGVkU3Ry
b2tlOwotCi0gICAgQ09NUHRyPElEMkQxU3Ryb2tlU3R5bGU+IGQyZFN0cm9rZVN0eWxlOwotICAg
IFBsYXRmb3JtQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwbGF0Zm9ybUNvbnRleHQsIGRy
YXdzRGFzaGVkTGluZSk7Ci0gICAgaWYgKGRyYXdzRGFzaGVkTGluZSkgewotICAgICAgICAvLyBG
aWd1cmUgb3V0IGVuZCBwb2ludHMgdG8gZW5zdXJlIHdlIGFsd2F5cyBwYWludCBjb3JuZXJzLgot
ICAgICAgICBjb3JuZXJXaWR0aCA9IGRhc2hlZExpbmVDb3JuZXJXaWR0aEZvclN0cm9rZVdpZHRo
KHN0cm9rZVdpZHRoLCBzdHJva2VTdHlsZSwgc3Ryb2tlVGhpY2tuZXNzKTsKLSAgICAgICAgc3Ry
b2tlV2lkdGggLT0gMiAqIGNvcm5lcldpZHRoOwotICAgICAgICBmbG9hdCBwYXR0ZXJuV2lkdGgg
PSBkYXNoZWRMaW5lUGF0dGVybldpZHRoRm9yU3Ryb2tlV2lkdGgoc3Ryb2tlV2lkdGgsIHN0cm9r
ZVN0eWxlLCBzdHJva2VUaGlja25lc3MpOwotICAgICAgICAvLyBDaGVjayBpZiBjb3JuZXIgZHJh
d2luZyBzdWZmaWNpZW50bHkgY292ZXJzIHRoZSBsaW5lLgotICAgICAgICBpZiAoc3Ryb2tlV2lk
dGggPD0gcGF0dGVybldpZHRoICsgMSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBm
bG9hdCBwYXR0ZXJuT2Zmc2V0ID0gZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJuQW5k
U3Ryb2tlV2lkdGgocGF0dGVybldpZHRoLCBzdHJva2VXaWR0aCk7Ci0gICAgICAgIGNvbnN0IGZs
b2F0IGRhc2hlc1syXSA9IHsgcGF0dGVybldpZHRoLCBwYXR0ZXJuV2lkdGggfTsKLSAgICAgICAg
YXV0byBzdHJva2VTdHlsZVByb3BlcnRpZXMgPSBwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlU3R5bGVQ
cm9wZXJ0aWVzKCk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5D
cmVhdGVTdHJva2VTdHlsZSgmc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzLCBkYXNoZXMsIEFSUkFZU0la
RShkYXNoZXMpLCAmZDJkU3Ryb2tlU3R5bGUpOwotCi0gICAgICAgIHBsYXRmb3JtQ29udGV4dC5z
ZXRQYXR0ZXJuV2lkdGgocGF0dGVybldpZHRoKTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0LnNl
dFBhdHRlcm5PZmZzZXQocGF0dGVybk9mZnNldCk7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dC5z
ZXREYXNoZXMoRGFzaEFycmF5KDIsIHBhdHRlcm5XaWR0aCkpOwotCi0gICAgICAgIGQyZFN0cm9r
ZVN0eWxlID0gcGxhdGZvcm1Db250ZXh0LnN0cm9rZVN0eWxlKCk7Ci0gICAgfQotCi0gICAgYXV0
byBjZW50ZXJlZFBvaW50cyA9IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGlzVmVydGljYWxM
aW5lLCBjb3JuZXJXaWR0aCwgcG9pbnQxLCBwb2ludDIpOwotICAgIGF1dG8gcDEgPSBjZW50ZXJl
ZFBvaW50c1swXTsKLSAgICBhdXRvIHAyID0gY2VudGVyZWRQb2ludHNbMV07Ci0KLSAgICBwbGF0
Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0KLSAgICBkcmF3V2l0aG91dFNoYWRv
dyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1Db250ZXh0LCBwMSwgcDIsIGQyZFN0cm9rZVN0
eWxlLCBzdHJva2VDb2xvciwgc3Ryb2tlVGhpY2tuZXNzXShJRDJEMVJlbmRlclRhcmdldCogcmVu
ZGVyVGFyZ2V0KSB7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RHJhd0xpbmUocDEsIHAyLCBwbGF0
Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IpLmdldCgpLCBzdHJva2VUaGlj
a25lc3MsIGQyZFN0cm9rZVN0eWxlLmdldCgpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBkcmF3TGlu
ZXNGb3JUZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRQb2ludCYsIGZs
b2F0LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBjb25zdCBDb2xvciYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBmaWxsRWxsaXBz
ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxl
LCBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3IsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKLXsKLSAg
ICBhdXRvIGVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKHJlY3QuY2VudGVyKCksIDAuNSAqIHJlY3Qu
d2lkdGgoKSwgMC41ICogcmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0
VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0
LCBbJnBsYXRmb3JtQ29udGV4dCwgZWxsaXBzZSwgZmlsbENvbG9yLCBzdHJva2VTdHlsZSwgc3Ry
b2tlQ29sb3IsIHN0cm9rZVRoaWNrbmVzc10oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdl
dCkgewotICAgICAgICBhdXRvIGZpbGxCcnVzaCA9IHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhD
b2xvcihmaWxsQ29sb3IpOwotICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxFbGxpcHNlKCZlbGxp
cHNlLCBmaWxsQnJ1c2guZ2V0KCkpOwotICAgICAgICBpZiAoc3Ryb2tlU3R5bGUgIT0gU3Ryb2tl
U3R5bGU6Ok5vU3Ryb2tlKSB7Ci0gICAgICAgICAgICBhdXRvIHN0cm9rZUJydXNoID0gcGxhdGZv
cm1Db250ZXh0LmJydXNoV2l0aENvbG9yKHN0cm9rZUNvbG9yKTsKLSAgICAgICAgICAgIHJlbmRl
clRhcmdldC0+RHJhd0VsbGlwc2UoJmVsbGlwc2UsIHN0cm9rZUJydXNoLmdldCgpLCBzdHJva2VU
aGlja25lc3MsIHBsYXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZSgpKTsKLSAgICAgICAgfQotICAg
IH0pOwotfQotCi12b2lkIGRyYXdFbGxpcHNlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0
Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5
bGUsIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvciwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQotewot
ICAgIGlmIChzdHJva2VTdHlsZSA9PSBTdHJva2VTdHlsZTo6Tm9TdHJva2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8gZWxsaXBzZSA9IEQyRDE6OkVsbGlwc2UocmVjdC5jZW50ZXIoKSwg
MC41ICogcmVjdC53aWR0aCgpLCAwLjUgKiByZWN0LmhlaWdodCgpKTsKLQotICAgIHBsYXRmb3Jt
Q29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0
Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1Db250ZXh0LCBlbGxpcHNlLCBzdHJva2VDb2xvciwgc3Ry
b2tlVGhpY2tuZXNzXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAg
IGF1dG8gc3Ryb2tlQnJ1c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tl
Q29sb3IpOwotICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdFbGxpcHNlKCZlbGxpcHNlLCBzdHJv
a2VCcnVzaC5nZXQoKSwgc3Ryb2tlVGhpY2tuZXNzLCBwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlU3R5
bGUoKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgZHJhd0ZvY3VzUmluZyhQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYsIGNvbnN0IFBhdGgmLCBmbG9hdCwgY29uc3QgQ29sb3ImKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgZHJhd0ZvY3VzUmluZyhQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYsIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGNvbnN0IENvbG9yJikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIGZsdXNoKFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgQVNTRVJUKHBsYXRmb3JtQ29udGV4dC5y
ZW5kZXJUYXJnZXQoKSk7Ci0gICAgRDJEMV9UQUcgZmlyc3QsIHNlY29uZDsKLSAgICBIUkVTVUxU
IGhyID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5GbHVzaCgmZmlyc3QsICZzZWNv
bmQpOwotCi0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci19Ci0KLXZvaWQgc2F2
ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0KQotewotICAgIHBsYXRm
b3JtQ29udGV4dC5zYXZlKCk7Ci0KLSAgICBpZiAoYXV0byogZ3JhcGhpY3NDb250ZXh0UHJpdmF0
ZSA9IHBsYXRmb3JtQ29udGV4dC5ncmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgICAgIGdy
YXBoaWNzQ29udGV4dFByaXZhdGUtPnNhdmUoKTsKLX0KLQotdm9pZCByZXN0b3JlKFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgcGxhdGZvcm1Db250ZXh0
LnJlc3RvcmUoKTsKLQotICAgIGlmIChhdXRvKiBncmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxh
dGZvcm1Db250ZXh0LmdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3ND
b250ZXh0UHJpdmF0ZS0+cmVzdG9yZSgpOwotfQotCi12b2lkIHRyYW5zbGF0ZShQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBmbG9hdCB4LCBmbG9hdCB5KQotewotICAg
IEFTU0VSVChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotCi0gICAgRDJEMV9NQVRS
SVhfM1gyX0YgY3VycmVudFRyYW5zZm9ybTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFy
Z2V0KCktPkdldFRyYW5zZm9ybSgmY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBhdXRvIHRyYW5z
bGF0aW9uID0gRDJEMTo6TWF0cml4M3gyRjo6VHJhbnNsYXRpb24oeCwgeSk7Ci0gICAgcGxhdGZv
cm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5TZXRUcmFuc2Zvcm0odHJhbnNsYXRpb24gKiBjdXJy
ZW50VHJhbnNmb3JtKTsKLQotICAgIGlmIChhdXRvKiBncmFwaGljc0NvbnRleHRQcml2YXRlID0g
cGxhdGZvcm1Db250ZXh0LmdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZS0+dHJhbnNsYXRlKHgsIHkpOwotfQotCi12b2lkIHJvdGF0ZShQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBmbG9hdCBhbmdsZUluUmFkaWFu
cykKLXsKLSAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLQotICAg
IEQyRDFfTUFUUklYXzNYMl9GIGN1cnJlbnRUcmFuc2Zvcm07Ci0gICAgcGxhdGZvcm1Db250ZXh0
LnJlbmRlclRhcmdldCgpLT5HZXRUcmFuc2Zvcm0oJmN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAg
YXV0byByb3RhdGlvbiA9IEQyRDE6Ok1hdHJpeDN4MkY6OlJvdGF0aW9uKHJhZDJkZWcoYW5nbGVJ
blJhZGlhbnMpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPlNldFRyYW5z
Zm9ybShyb3RhdGlvbiAqIGN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAgaWYgKGF1dG8qIGdyYXBo
aWNzQ29udGV4dFByaXZhdGUgPSBwbGF0Zm9ybUNvbnRleHQuZ3JhcGhpY3NDb250ZXh0UHJpdmF0
ZSgpKQotICAgICAgICBncmFwaGljc0NvbnRleHRQcml2YXRlLT5yb3RhdGUoYW5nbGVJblJhZGlh
bnMpOwotfQotCi12b2lkIHNjYWxlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNv
bnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBBU1NFUlQocGxhdGZvcm1Db250
ZXh0LnJlbmRlclRhcmdldCgpKTsKLQotICAgIEQyRDFfTUFUUklYXzNYMl9GIGN1cnJlbnRUcmFu
c2Zvcm07Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5HZXRUcmFuc2Zvcm0o
JmN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAgYXV0byBzY2FsZSA9IEQyRDE6Ok1hdHJpeDN4MkY6
OlNjYWxlKHNpemUpOwotICAgIHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+U2V0VHJh
bnNmb3JtKHNjYWxlICogY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBpZiAoYXV0byogZ3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZSA9IHBsYXRmb3JtQ29udGV4dC5ncmFwaGljc0NvbnRleHRQcml2YXRl
KCkpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dFByaXZhdGUtPnNjYWxlKHNpemUpOwotfQotCi12
b2lkIGNvbmNhdENUTShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZVRyYW5zZm9ybSkKLXsKLSAgICBBU1NFUlQocGxh
dGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLQotICAgIEQyRDFfTUFUUklYXzNYMl9GIGN1
cnJlbnRUcmFuc2Zvcm07Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5HZXRU
cmFuc2Zvcm0oJmN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAgRDJEMV9NQVRSSVhfM1gyX0YgdHJh
bnNmb3JtVG9Db25jYXQgPSBhZmZpbmVUcmFuc2Zvcm07Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJl
bmRlclRhcmdldCgpLT5TZXRUcmFuc2Zvcm0odHJhbnNmb3JtVG9Db25jYXQgKiBjdXJyZW50VHJh
bnNmb3JtKTsKLQotICAgIGlmIChhdXRvKiBncmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxhdGZv
cm1Db250ZXh0LmdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250
ZXh0UHJpdmF0ZS0+Y29uY2F0Q1RNKGFmZmluZVRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgYmVnaW5U
cmFuc3BhcmVuY3lMYXllcihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0
LCBmbG9hdCBvcGFjaXR5KQotewotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpUcmFuc3Bh
cmVuY3lMYXllclN0YXRlIHRyYW5zcGFyZW5jeUxheWVyOwotICAgIHRyYW5zcGFyZW5jeUxheWVy
Lm9wYWNpdHkgPSBvcGFjaXR5OwotCi0gICAgdHJhbnNwYXJlbmN5TGF5ZXIucmVuZGVyVGFyZ2V0
ID0gY3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0KHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQo
KSk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLmFwcGVu
ZChXVEZNb3ZlKHRyYW5zcGFyZW5jeUxheWVyKSk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQubV90
cmFuc3BhcmVuY3lMYXllclN0YWNrLmxhc3QoKS5yZW5kZXJUYXJnZXQtPkJlZ2luRHJhdygpOwot
ICAgIHBsYXRmb3JtQ29udGV4dC5tX3RyYW5zcGFyZW5jeUxheWVyU3RhY2subGFzdCgpLnJlbmRl
clRhcmdldC0+Q2xlYXIoRDJEMTo6Q29sb3JGKDAsIDAsIDAsIDApKTsKLX0KLQotdm9pZCBlbmRU
cmFuc3BhcmVuY3lMYXllcihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0
KQotewotICAgIGF1dG8gY3VycmVudExheWVyID0gcGxhdGZvcm1Db250ZXh0Lm1fdHJhbnNwYXJl
bmN5TGF5ZXJTdGFjay50YWtlTGFzdCgpOwotICAgIGF1dG8gcmVuZGVyVGFyZ2V0ID0gY3VycmVu
dExheWVyLnJlbmRlclRhcmdldDsKLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+RW5kRHJhdygpOwotICAgIFJF
TEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0gICAgaWYgKGN1cnJlbnRMYXllci5oYXNTaGFk
b3cpCi0gICAgICAgIGRyYXdXaXRoU2hhZG93SGVscGVyKGNvbnRleHQsIHJlbmRlclRhcmdldC5n
ZXQoKSwgRmxvYXRSZWN0KCksIGN1cnJlbnRMYXllci5zaGFkb3dDb2xvciwgY3VycmVudExheWVy
LnNoYWRvd09mZnNldCwgY3VycmVudExheWVyLnNoYWRvd0JsdXIpOwotICAgIGVsc2UgewotICAg
ICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKLSAgICAgICAgaHIgPSByZW5kZXJUYXJn
ZXQtPkdldEJpdG1hcCgmYml0bWFwKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7Ci0KLSAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwQnJ1c2g+IGJpdG1hcEJydXNoOwot
ICAgICAgICBhdXRvIGJpdG1hcEJydXNoUHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcEJydXNoUHJv
cGVydGllcygpOwotICAgICAgICBhdXRvIGJydXNoUHJvcGVydGllcyA9IEQyRDE6OkJydXNoUHJv
cGVydGllcygpOwotICAgICAgICBIUkVTVUxUIGhyID0gY29udGV4dC0+Q3JlYXRlQml0bWFwQnJ1
c2goYml0bWFwLmdldCgpLCBiaXRtYXBCcnVzaFByb3BlcnRpZXMsIGJydXNoUHJvcGVydGllcywg
JmJpdG1hcEJydXNoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0K
LSAgICAgICAgYXV0byBzaXplID0gYml0bWFwLT5HZXRTaXplKCk7Ci0gICAgICAgIGF1dG8gcmVj
dEluRElQID0gRDJEMTo6UmVjdEYoMCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOwotICAg
ICAgICBjb250ZXh0LT5GaWxsUmVjdGFuZ2xlKHJlY3RJbkRJUCwgYml0bWFwQnJ1c2guZ2V0KCkp
OwotICAgIH0KLX0KLQotdm9pZCBjbGlwKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQu
cmVuZGVyVGFyZ2V0KCktPlB1c2hBeGlzQWxpZ25lZENsaXAocmVjdCwgRDJEMV9BTlRJQUxJQVNf
TU9ERV9QRVJfUFJJTUlUSVZFKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucHVzaENsaXAoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQ6OkF4aXNBbGlnbmVkQ2xpcCk7Ci0KLSAgICBpZiAoYXV0byogZ3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZSA9IHBsYXRmb3JtQ29udGV4dC5ncmFwaGljc0NvbnRleHRQcml2
YXRlKCkpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dFByaXZhdGUtPmNsaXAocmVjdCk7Ci19Ci0K
LXZvaWQgY2xpcE91dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkUmVj
dChyZWN0KTsKLQotICAgIGNsaXBPdXQocGxhdGZvcm1Db250ZXh0LCBwYXRoKTsKLX0KLQotdm9p
ZCBjbGlwT3V0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0
IFBhdGgmIHBhdGgpCi17Ci0gICAgLy8gVG8gY2xpcCBPdXQgd2UgbmVlZCB0aGUgaW50ZXJzZWN0
aW9uIG9mIHRoZSBpbmZpbml0ZQotICAgIC8vIGNsaXBwaW5nIHJlY3QgYW5kIHRoZSBwYXRoIHdl
IGp1c3QgY3JlYXRlZC4KLSAgICBEMkQxX1NJWkVfRiByZW5kZXJlclNpemUgPSBwbGF0Zm9ybUNv
bnRleHQucmVuZGVyVGFyZ2V0KCktPkdldFNpemUoKTsKLSAgICBGbG9hdFJlY3QgY2xpcEJvdW5k
cygwLCAwLCByZW5kZXJlclNpemUud2lkdGgsIHJlbmRlcmVyU2l6ZS5oZWlnaHQpOwotCi0gICAg
UGF0aCBib3VuZGluZ1JlY3Q7Ci0gICAgYm91bmRpbmdSZWN0LmFkZFJlY3QoY2xpcEJvdW5kcyk7
Ci0gICAgYm91bmRpbmdSZWN0LmFwcGVuZEdlb21ldHJ5KHBhdGgucGxhdGZvcm1QYXRoKCkpOwot
Ci0gICAgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4gcGF0aFRvQ2xpcDsKLSAgICBib3VuZGlu
Z1JlY3QuY3JlYXRlR2VvbWV0cnlXaXRoRmlsbE1vZGUoV2luZFJ1bGU6OkV2ZW5PZGQsIHBhdGhU
b0NsaXApOwotICAgIGNsaXBQYXRoKHBsYXRmb3JtQ29udGV4dCwgcGF0aFRvQ2xpcC5nZXQoKSk7
Ci19Ci0KLXZvaWQgY2xpcFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29u
dGV4dCwgY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17Ci0gICAgaWYgKHBh
dGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIERpcmVjdDJEOjpjbGlwKHBsYXRmb3JtQ29udGV4dCwg
RmxvYXRSZWN0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ09NUHRyPElEMkQx
R2VvbWV0cnlHcm91cD4gcGF0aFRvQ2xpcDsKLSAgICBwYXRoLmNyZWF0ZUdlb21ldHJ5V2l0aEZp
bGxNb2RlKGNsaXBSdWxlLCBwYXRoVG9DbGlwKTsKLQotICAgIGNsaXBQYXRoKHBsYXRmb3JtQ29u
dGV4dCwgcGF0aFRvQ2xpcC5nZXQoKSk7Ci0KLSAgICBpZiAoYXV0byogZ3JhcGhpY3NDb250ZXh0
UHJpdmF0ZSA9IHBsYXRmb3JtQ29udGV4dC5ncmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAg
ICAgIGdyYXBoaWNzQ29udGV4dFByaXZhdGUtPmNsaXAocGF0aCk7Ci19Ci0KLXZvaWQgY2xpcFBh
dGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgSUQyRDFHZW9tZXRy
eSogcGF0aCkKLXsKLSAgICBDT01QdHI8SUQyRDFMYXllcj4gY2xpcExheWVyOwotICAgIEhSRVNV
TFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkNyZWF0ZUxheWVyKCZjbGlw
TGF5ZXIpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
cGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5QdXNoTGF5ZXIoRDJEMTo6TGF5ZXJQYXJh
bWV0ZXJzKEQyRDE6OkluZmluaXRlUmVjdCgpLCBwYXRoKSwgY2xpcExheWVyLmdldCgpKTsKLSAg
ICBwbGF0Zm9ybUNvbnRleHQucHVzaFJlbmRlckNsaXAoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6
OkxheWVyQ2xpcCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNldEFjdGl2ZUxheWVyKFdURk1vdmUo
Y2xpcExheWVyKSk7Ci19Ci0KLXZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQmLCBJRDJEMVJlbmRlclRhcmdldCosIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotCi12b2lkIGNvcHlCaXRzKGNvbnN0IHVpbnQ4X3QqIHNy
Y1Jvd3MsIHVuc2lnbmVkIHJvd0NvdW50LCB1bnNpZ25lZCBjb2xDb3VudCwgdW5zaWduZWQgc3Jj
U3RyaWRlLCB1bnNpZ25lZCBkZXN0U3RyaWRlLCB1aW50OF90KiBkZXN0Um93cykKLXsKLSAgICBm
b3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgcm93Q291bnQ7ICsreSkgewotICAgICAgICAvLyBTb3Vy
Y2UgZGF0YSBtYXkgYmUgcG93ZXItb2YtdHdvIHNpemVkLCBzbyB3ZSBuZWVkIHRvIG9ubHkgY29w
eSB0aGUgYml0cyB0aGF0Ci0gICAgICAgIC8vIGNvcnJlc3BvbmQgdG8gdGhlIHJlY3RhbmdsZSBz
dXBwbGllZCBieSB0aGUgY2FsbGVyLgotICAgICAgICBjb25zdCB1aW50MzJfdCogc3JjUm93ID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBzcmNTdHJpZGUgKiB5
KTsKLSAgICAgICAgdWludDMyX3QqIGRlc3RSb3cgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90
Kj4oZGVzdFJvd3MgKyBkZXN0U3RyaWRlICogeSk7Ci0gICAgICAgIG1lbWNweShkZXN0Um93LCBz
cmNSb3csIGNvbENvdW50KTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIERpcmVjdDJECi0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGly
ZWN0MkRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDE3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIg
PGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQnJlbnQgRnVsZ2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4K
LSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShESVJF
Q1QyRCkKLQotI2luY2x1ZGUgIkRhc2hBcnJheS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPGQyZDEuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci1jbGFzcyBDb2xvcjsKLWNsYXNzIEZs
b2F0UmVjdDsKLWNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7Ci1jbGFzcyBGbG9hdFNpemU7Ci1jbGFz
cyBQYXRoOwotCi1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGU7Ci0KLW5hbWVzcGFjZSBEaXJl
Y3QyRCB7Ci0KLW5hbWVzcGFjZSBTdGF0ZSB7Ci0KLXZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiwgZmxvYXQpOwotdm9pZCBzZXRTdHJva2VTdHlsZShQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYsIFN0cm9rZVN0eWxlKTsKLQotdm9pZCBzZXRDb21wb3NpdGVP
cGVyYXRpb24oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBDb21wb3NpdGVPcGVyYXRvciwgQmxl
bmRNb2RlKTsKLXZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
JiwgYm9vbCk7Ci0KLXZvaWQgc2V0Q1RNKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJik7Ci1BZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJik7Ci0KLUludFJlY3QgZ2V0Q2xpcEJvdW5kcyhQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYpOwotRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmKTsKLQotYm9vbCBpc0FjY2VsZXJhdGVkQ29udGV4dChQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotCi19IC8vIG5hbWVzcGFjZSBTdGF0ZQotCi1zdHJ1
Y3QgRmlsbFNvdXJjZSB7Ci0gICAgRmlsbFNvdXJjZSgpID0gZGVmYXVsdDsKLSAgICBleHBsaWNp
dCBGaWxsU291cmNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7Ci0KLSAgICBmbG9hdCBnbG9iYWxBbHBoYSB7IDAgfTsKLSAgICBDT01QdHI8SUQy
RDFCcnVzaD4gYnJ1c2g7Ci0gICAgQ29sb3IgY29sb3I7Ci0KLSAgICBXaW5kUnVsZSBmaWxsUnVs
ZSB7IFdpbmRSdWxlOjpOb25aZXJvIH07Ci19OwotCi1zdHJ1Y3QgU3Ryb2tlU291cmNlIHsKLSAg
ICBTdHJva2VTb3VyY2UoKSA9IGRlZmF1bHQ7Ci0gICAgZXhwbGljaXQgU3Ryb2tlU291cmNlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7Ci0KLSAg
ICBmbG9hdCBnbG9iYWxBbHBoYSB7IDAgfTsKLSAgICBmbG9hdCB0aGlja25lc3MgeyAwIH07Ci0g
ICAgQ09NUHRyPElEMkQxQnJ1c2g+IGJydXNoOwotICAgIENvbG9yIGNvbG9yOwotfTsKLQotc3Ry
dWN0IFNoYWRvd1N0YXRlIHsKLSAgICBTaGFkb3dTdGF0ZSgpID0gZGVmYXVsdDsKLSAgICBXRUJD
T1JFX0VYUE9SVCBleHBsaWNpdCBTaGFkb3dTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYpOwotCi0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdDsKLSAgICBib29sIGlzUmVxdWlyZWQo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKSBjb25zdDsKLQotICAgIEZsb2F0U2l6ZSBvZmZzZXQ7
Ci0gICAgZmxvYXQgYmx1ciB7IDAgfTsKLSAgICBDb2xvciBjb2xvcjsKLSAgICBib29sIGlnbm9y
ZVRyYW5zZm9ybXMgeyBmYWxzZSB9OwotCi0gICAgZmxvYXQgZ2xvYmFsQWxwaGEgeyAxLjAgfTsK
LSAgICBDb21wb3NpdGVPcGVyYXRvciBnbG9iYWxDb21wb3NpdGVPcGVyYXRvciB7IENvbXBvc2l0
ZU9wZXJhdG9yOjpTb3VyY2VPdmVyIH07Ci19OwotCi12b2lkIHNldExpbmVDYXAoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmLCBMaW5lQ2FwKTsKLXZvaWQgc2V0TGluZURhc2goUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmLCBjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCk7Ci12b2lkIHNldExpbmVKb2lu
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgTGluZUpvaW4pOwotdm9pZCBzZXRNaXRlckxpbWl0
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgZmxvYXQpOwotCi12b2lkIGZpbGxSZWN0KFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmlsbFNvdXJjZSYs
IGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIGZpbGxSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBjb25zdCBTaGFkb3dTdGF0ZSYp
Owotdm9pZCBmaWxsUmVjdFdpdGhHcmFkaWVudChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNv
bnN0IEZsb2F0UmVjdCYsIElEMkQxQnJ1c2gqKTsKLXZvaWQgZmlsbFJvdW5kZWRSZWN0KFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9y
JiwgY29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiwgY29uc3QgRmlsbFNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIGZp
bGxQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgUGF0aCYsIGNvbnN0IEZpbGxT
b3VyY2UmLCBjb25zdCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBmaWxsUGF0aChQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCYsIGNvbnN0IFBhdGgmLCBjb25zdCBDb2xvciYsIGNvbnN0IFNoYWRvd1N0YXRl
Jik7Ci0KLXZvaWQgc3Ryb2tlUmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0LCBjb25zdCBTdHJva2VTb3VyY2UmLCBjb25zdCBTaGFkb3dTdGF0ZSYp
Owotdm9pZCBzdHJva2VQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgUGF0aCYs
IGNvbnN0IFN0cm9rZVNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIGNsZWFyUmVj
dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYpOwotCi12b2lkIGRy
YXdHbHlwaHMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGaWxsU291cmNlJiwgY29u
c3QgU3Ryb2tlU291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUmLCBjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgRm9udCYsIGRvdWJsZSwgY29uc3QgVmVjdG9yPHVuc2lnbmVkIHNob3J0PiYgZ2x5cGhz
LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBob3Jpem9udGFsQWR2YW5jZXMsIGNvbnN0IFZlY3RvcjxE
V1JJVEVfR0xZUEhfT0ZGU0VUPiYsIGZsb2F0LCBUZXh0RHJhd2luZ01vZGVGbGFncywgZmxvYXQs
IGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IENvbG9yJik7Ci0KLXZvaWQgZHJhd1BsYXRmb3JtSW1h
Z2UoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBJV0lDQml0bWFwKiwgY29uc3QgRmxvYXRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiwgZmxvYXQsIGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIGRy
YXdQbGF0Zm9ybUltYWdlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgSUQyRDFCaXRtYXAqLCBj
b25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmLCBmbG9hdCwgY29uc3QgU2hhZG93U3Rh
dGUmKTsKLXZvaWQgZHJhd1BhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBQYXRo
JiwgY29uc3QgU3Ryb2tlU291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQgZHJhd1Bh
dHRlcm4oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBDT01QdHI8SUQyRDFCaXRtYXA+JiYsIGNv
bnN0IEludFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSk7Ci0KLXZvaWQgZHJhd1dpdGhvdXRTaGFkb3coUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmLCBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+JiYgZHJhd0NvbW1hbmRzKTsK
LXZvaWQgZHJhd1dpdGhTaGFkb3coUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBGbG9hdFJlY3Qg
Ym91bmRpbmdSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYsIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5k
ZXJUYXJnZXQqKT4mJiBkcmF3Q29tbWFuZHMpOwotCi12b2lkIGRyYXdSZWN0KFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQsIGNvbnN0IENvbG9yJiwgU3Ry
b2tlU3R5bGUsIGNvbnN0IENvbG9yJik7Ci12b2lkIGRyYXdMaW5lKFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBTdHJva2VTdHls
ZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwgYm9vbCk7Ci12b2lkIGRyYXdMaW5lc0ZvclRleHQoUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBjb25zdCBDb2xvciYpOwotdm9pZCBkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxv
YXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpOwotdm9pZCBkcmF3RWxsaXBzZShQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYsIFN0cm9rZVN0eWxlLCBjb25z
dCBDb2xvciYsIGZsb2F0KTsKLXZvaWQgZmlsbEVsbGlwc2UoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIFN0cm9rZVN0eWxlLCBjb25zdCBD
b2xvciYsIGZsb2F0KTsKLQotdm9pZCBkcmF3Rm9jdXNSaW5nKFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJiwgY29uc3QgUGF0aCYsIGZsb2F0LCBjb25zdCBDb2xvciYpOwotdm9pZCBkcmF3Rm9jdXNS
aW5nKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBm
bG9hdCwgY29uc3QgQ29sb3ImKTsKLQotdm9pZCBmbHVzaChQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYpOwotdm9pZCBzYXZlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci12b2lkIHJlc3RvcmUo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKTsKLQotdm9pZCB0cmFuc2xhdGUoUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmLCBmbG9hdCwgZmxvYXQpOwotdm9pZCByb3RhdGUoUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQmLCBmbG9hdCk7Ci12b2lkIHNjYWxlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwg
Y29uc3QgRmxvYXRTaXplJik7Ci12b2lkIGNvbmNhdENUTShQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotCi12b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBmbG9hdCk7Ci12b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci0KLXZvaWQgY2xpcChQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYpOwotCi12b2lkIGNsaXBPdXQoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmKTsKLXZvaWQgY2xpcE91dChQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IFBhdGgmKTsKLXZvaWQgY2xpcFBhdGgoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBQYXRoJiwgV2luZFJ1bGUpOwotdm9pZCBjbGlwUGF0
aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIElEMkQxR2VvbWV0cnkqIHBhdGgpOwotCi12b2lk
IGNsaXBUb0ltYWdlQnVmZmVyKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgSUQyRDFSZW5kZXJU
YXJnZXQqLCBjb25zdCBGbG9hdFJlY3QmKTsKLQotfSAvLyBuYW1lc3BhY2UgRGlyZWN0MkQKLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVj
dDJEVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmNwcAkobm9uZXhpc3RlbnQpCkBA
IC0xLDUxNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2lu
Y2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9h
dFNpemUuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURl
Y29kZXJEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRTaXpl
LmgiCi0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2luY2x1ZGUg
PHNobHdhcGkuaD4KLSNpbmNsdWRlIDx3aW5jb2RlYy5oPgotCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotbmFtZXNwYWNlIERpcmVjdDJEIHsKLQotY29uc3RleHByIERYR0lfRk9STUFUIHdlYmtp
dFRleHR1cmVGb3JtYXQgPSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STTsKLWNvbnN0ZXhwciBE
MkQxX0FMUEhBX01PREUgd2Via2l0QWxwaGFNb2RlID0gRDJEMV9BTFBIQV9NT0RFX1BSRU1VTFRJ
UExJRUQ7Ci0KLUludFNpemUgYml0bWFwU2l6ZShJV0lDQml0bWFwU291cmNlKiBiaXRtYXBTb3Vy
Y2UpCi17Ci0gICAgVUlOVCB3aWR0aCwgaGVpZ2h0OwotICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBT
b3VyY2UtPkdldFNpemUoJndpZHRoLCAmaGVpZ2h0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikp
Ci0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0
KTsKLX0KLQotRmxvYXRTaXplIGJpdG1hcFNpemUoSUQyRDFCaXRtYXAqIGJpdG1hcFNvdXJjZSkK
LXsKLSAgICByZXR1cm4gYml0bWFwU291cmNlLT5HZXRTaXplKCk7Ci19Ci0KLUZsb2F0U2l6ZSBi
aXRtYXBSZXNvbHV0aW9uKElXSUNCaXRtYXBTb3VyY2UqIGJpdG1hcFNvdXJjZSkKLXsKLSAgICBj
b25zdGV4cHIgZG91YmxlIGRwaUJhc2UgPSA5NjsKLQotICAgIGRvdWJsZSBkcGlYLCBkcGlZOwot
ICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBTb3VyY2UtPkdldFJlc29sdXRpb24oJmRwaVgsICZkcGlZ
KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBG
bG9hdFNpemUgcmVzdWx0KGRwaVgsIGRwaVkpOwotICAgIHJlc3VsdC5zY2FsZSgxLjAgLyBkcGlC
YXNlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1GbG9hdFNpemUgYml0bWFwUmVzb2x1dGlv
bihJRDJEMUJpdG1hcCogYml0bWFwKQotewotICAgIGNvbnN0ZXhwciBkb3VibGUgZHBpQmFzZSA9
IDk2OwotCi0gICAgZmxvYXQgZHBpWCwgZHBpWTsKLSAgICBiaXRtYXAtPkdldERwaSgmZHBpWCwg
JmRwaVkpOwotCi0gICAgRmxvYXRTaXplIHJlc3VsdChkcGlYLCBkcGlZKTsKLSAgICByZXN1bHQu
c2NhbGUoMS4wIC8gZHBpQmFzZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLQotfQotCi1GbG9hdFNp
emUgYml0bWFwUmVzb2x1dGlvbihJRDJEMVJlbmRlclRhcmdldCogdGFyZ2V0KQotewotICAgIGNv
bnN0ZXhwciBkb3VibGUgZHBpQmFzZSA9IDk2OwotCi0gICAgZmxvYXQgZHBpWCwgZHBpWTsKLSAg
ICB0YXJnZXQtPkdldERwaSgmZHBpWCwgJmRwaVkpOwotCi0gICAgRmxvYXRTaXplIHJlc3VsdChk
cGlYLCBkcGlZKTsKLSAgICByZXN1bHQuc2NhbGUoMS4wIC8gZHBpQmFzZSk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLQotfQotdW5zaWduZWQgYml0c1BlclBpeGVsKEdVSUQgYml0bWFwRm9ybWF0KQot
ewotICAgIENPTVB0cjxJV0lDQ29tcG9uZW50SW5mbz4gY29tcG9uZW50SW5mbzsKLSAgICBIUkVT
VUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3RlbUltYWdpbmdGYWN0b3J5KCktPkNy
ZWF0ZUNvbXBvbmVudEluZm8oYml0bWFwRm9ybWF0LCAmY29tcG9uZW50SW5mbyk7Ci0gICAgaWYg
KCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gNDsKLQotICAgIENPTVB0cjxJV0lDUGl4
ZWxGb3JtYXRJbmZvPiBwaXhlbEZvcm1hdDsKLSAgICBwaXhlbEZvcm1hdC5xdWVyeShjb21wb25l
bnRJbmZvKTsKLSAgICBpZiAoIXBpeGVsRm9ybWF0KQotICAgICAgICByZXR1cm4gNDsKLQotICAg
IFVJTlQgYnBwID0gMDsKLSAgICBociA9IHBpeGVsRm9ybWF0LT5HZXRCaXRzUGVyUGl4ZWwoJmJw
cCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gNDsKLQotICAgIHJl
dHVybiBicHA7Ci19Ci0KLUNPTVB0cjxJV0lDQml0bWFwPiBjcmVhdGVEaXJlY3QyREltYWdlU3Vy
ZmFjZVdpdGhEYXRhKHZvaWQqIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIHVuc2lnbmVkIHN0
cmlkZSkKLXsKLSAgICBDaGVja2VkU2l6ZSBudW1CeXRlcyA9IENoZWNrZWRVaW50MzIoc2l6ZS5o
ZWlnaHQoKSkgKiBzdHJpZGU7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcD4gc3VyZmFjZTsK
LSAgICBIUkVTVUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3RlbUltYWdpbmdGYWN0
b3J5KCktPkNyZWF0ZUJpdG1hcEZyb21NZW1vcnkoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
LCB3aWNCaXRtYXBGb3JtYXQoKSwgc3RyaWRlLCBzdGF0aWNfY2FzdDxVSU5UPihudW1CeXRlcy52
YWx1ZSgpKSwgcmVpbnRlcnByZXRfY2FzdDxCWVRFKj4oZGF0YSksICZzdXJmYWNlKTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJu
IHN1cmZhY2U7Ci19Ci0KLUNPTVB0cjxJV0lDQml0bWFwPiBjcmVhdGVXaWNCaXRtYXAoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBDT01QdHI8SVdJQ0JpdG1hcD4gc3VyZmFjZTsKLSAgICBI
UkVTVUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3RlbUltYWdpbmdGYWN0b3J5KCkt
PkNyZWF0ZUJpdG1hcChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHdpY0JpdG1hcEZvcm1h
dCgpLCBXSUNCaXRtYXBDYWNoZU9uRGVtYW5kLCAmc3VyZmFjZSk7Ci0gICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBzdXJmYWNlOwot
fQotCi1EMkQxX1BJWEVMX0ZPUk1BVCBwaXhlbEZvcm1hdEZvclNvZnR3YXJlTWFuaXB1bGF0aW9u
KCkKLXsKLSAgICByZXR1cm4gRDJEMTo6UGl4ZWxGb3JtYXQoRFhHSV9GT1JNQVRfUjhHOEI4QThf
VU5PUk0sIEQyRDFfQUxQSEFfTU9ERV9QUkVNVUxUSVBMSUVEKTsKLX0KLQotRDJEMV9QSVhFTF9G
T1JNQVQgcGl4ZWxGb3JtYXQoKQotewotICAgIC8vIFNpbmNlIHdlIG5lZWQgdG8gaW50ZXJhY3Qg
d2l0aCBIREMgZnJvbSB0aW1lLXRvLXRpbWUsIHdlIGFyZSBmb3JjZWQgdG8gdXNlIERYR0lfRk9S
TUFUX0I4RzhSOEE4X1VOT1JNIGFuZCBEMkQxX0FMUEhBX01PREVfUFJFTVVMVElQTElFRAotICAg
IHJldHVybiBEMkQxOjpQaXhlbEZvcm1hdCh3ZWJraXRUZXh0dXJlRm9ybWF0LCB3ZWJraXRBbHBo
YU1vZGUpOwotfQotCi1HVUlEIHdpY0JpdG1hcEZvcm1hdCgpCi17Ci0gICAgLy8gVGhpcyBpcyB0
aGUgV0lDIGZvcm1hdCBjb21wYXRpYmxlIHdpdGggRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0u
IEl0IGlzIGFsc28gc3VwcG9zZWRseSB0aGUgbW9zdCBlZmZpY2llbnQgaW4tbWVtb3J5Ci0gICAg
Ly8gcmVwcmVzZW50YXRpb24gZm9yIFdJQyBpbWFnZXMuCi0gICAgcmV0dXJuIEdVSURfV0lDUGl4
ZWxGb3JtYXQzMmJwcFBCR1JBOwotfQotCi1EMkQxX0JJVE1BUF9QUk9QRVJUSUVTIGJpdG1hcFBy
b3BlcnRpZXMoKQotewotICAgIHJldHVybiBEMkQxOjpCaXRtYXBQcm9wZXJ0aWVzKHBpeGVsRm9y
bWF0KCkpOwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXA+IGNyZWF0ZUJpdG1hcChJRDJEMVJlbmRl
clRhcmdldCogcmVuZGVyVGFyZ2V0LCBjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIGF1dG8g
Yml0bWFwQ3JlYXRlUHJvcGVydGllcyA9IGJpdG1hcFByb3BlcnRpZXMoKTsKLQotICAgIENPTVB0
cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotICAgIEQyRDFfU0laRV9VIGJpdG1hcFNpemUgPSBzaXpl
OwotICAgIEhSRVNVTFQgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcChiaXRtYXBTaXpl
LCBiaXRtYXBDcmVhdGVQcm9wZXJ0aWVzLCAmYml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRCho
cikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGJpdG1hcDsKLX0KLQot
RDJEMV9SRU5ERVJfVEFSR0VUX1BST1BFUlRJRVMgcmVuZGVyVGFyZ2V0UHJvcGVydGllcygpCi17
Ci0gICAgcmV0dXJuIEQyRDE6OlJlbmRlclRhcmdldFByb3BlcnRpZXMoRDJEMV9SRU5ERVJfVEFS
R0VUX1RZUEVfREVGQVVMVCwKLSAgICAgICAgcGl4ZWxGb3JtYXQoKSwgMCwgMCwgRDJEMV9SRU5E
RVJfVEFSR0VUX1VTQUdFX0dESV9DT01QQVRJQkxFLCBEMkQxX0ZFQVRVUkVfTEVWRUxfREVGQVVM
VCk7Ci19Ci0KLUNPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gY3JlYXRlUmVuZGVyVGFyZ2V0RnJv
bVdJQ0JpdG1hcChJV0lDQml0bWFwKiBiaXRtYXBTb3VyY2UpCi17Ci0gICAgYXV0byB0YXJnZXRQ
cm9wZXJ0aWVzID0gcmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwotCi0gICAgQ09NUHRyPElEMkQx
UmVuZGVyVGFyZ2V0PiBiaXRtYXBDb250ZXh0OwotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0Nv
bnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlV2ljQml0bWFwUmVuZGVyVGFyZ2V0KGJpdG1h
cFNvdXJjZSwgJnRhcmdldFByb3BlcnRpZXMsICZiaXRtYXBDb250ZXh0KTsKLSAgICBpZiAoIWJp
dG1hcENvbnRleHQgfHwgIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgcmV0dXJuIGJpdG1hcENvbnRleHQ7Ci19Ci0KLUNPTVB0cjxJRDJEMURDUmVuZGVyVGFy
Z2V0PiBjcmVhdGVHRElSZW5kZXJUYXJnZXQoKQotewotICAgIGF1dG8gdGFyZ2V0UHJvcGVydGll
cyA9IHJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKLQotICAgIENPTVB0cjxJRDJEMURDUmVuZGVy
VGFyZ2V0PiByZW5kZXJUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6
c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEQ1JlbmRlclRhcmdldCgmdGFyZ2V0UHJvcGVydGllcywg
JnJlbmRlclRhcmdldCk7Ci0gICAgaWYgKCFyZW5kZXJUYXJnZXQgfHwgIVNVQ0NFRURFRChocikp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHJlbmRlclRhcmdldDsKLX0K
LQotQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBjcmVhdGVCaXRtYXBSZW5kZXJUYXJn
ZXQoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsKLSAgICBpZiAoIXJlbmRlclRh
cmdldCkKLSAgICAgICAgcmVuZGVyVGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0UmVu
ZGVyVGFyZ2V0KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1h
cENvbnRleHQ7Ci0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlQ29tcGF0aWJs
ZVJlbmRlclRhcmdldChudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBEMkQxX0NPTVBBVElCTEVf
UkVOREVSX1RBUkdFVF9PUFRJT05TX0dESV9DT01QQVRJQkxFLCAmYml0bWFwQ29udGV4dCk7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJl
dHVybiBiaXRtYXBDb250ZXh0OwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+
IGNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplLCBJRDJE
MVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKLXsK
LSAgICBVTlVTRURfUEFSQU0oZGV2aWNlU2NhbGVGYWN0b3IpOwotCi0gICAgaWYgKCFyZW5kZXJU
YXJnZXQpCi0gICAgICAgIHJlbmRlclRhcmdldCA9IEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJl
bmRlclRhcmdldCgpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRt
YXBDb250ZXh0OwotICAgIGF1dG8gZGVzaXJlZFNpemUgPSBEMkQxOjpTaXplRihzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCkpOwotICAgIEQyRDFfU0laRV9VIHBpeGVsU2l6ZSA9IEQyRDE6OlNp
emVVKGNsYW1wVG88dW5zaWduZWQ+KGRldmljZVNjYWxlRmFjdG9yICogc2l6ZS53aWR0aCgpKSwg
Y2xhbXBUbzx1bnNpZ25lZD4oZGV2aWNlU2NhbGVGYWN0b3IgKiBzaXplLmhlaWdodCgpKSk7Ci0g
ICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlQ29tcGF0aWJsZVJlbmRlclRhcmdl
dCgmZGVzaXJlZFNpemUsICZwaXhlbFNpemUsIG51bGxwdHIsIEQyRDFfQ09NUEFUSUJMRV9SRU5E
RVJfVEFSR0VUX09QVElPTlNfR0RJX0NPTVBBVElCTEUsICZiaXRtYXBDb250ZXh0KTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJu
IGJpdG1hcENvbnRleHQ7Ci19Ci0KLUNPTVB0cjxJRFhHSVN1cmZhY2UxPiBjcmVhdGVEWEdJU3Vy
ZmFjZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplLCBJRDNEMTFEZXZpY2UxKiBkaXJlY3RYRGV2
aWNlLCBib29sIGNyb3NzUHJvY2VzcykKLXsKLSAgICBpZiAoIWRpcmVjdFhEZXZpY2UpCi0gICAg
ICAgIGRpcmVjdFhEZXZpY2UgPSBEaXJlY3QyRDo6ZGVmYXVsdERpcmVjdFhEZXZpY2UoKTsKLQot
ICAgIC8vIENyZWF0ZSB0aGUgcmVuZGVyIHRhcmdldCB0ZXh0dXJlCi0gICAgRDNEMTFfVEVYVFVS
RTJEX0RFU0MgZGVzYzsKLSAgICBaZXJvTWVtb3J5KCZkZXNjLCBzaXplb2YoZGVzYykpOwotICAg
IGRlc2MuV2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgZGVzYy5IZWlnaHQgPSBzaXplLmhlaWdo
dCgpOwotICAgIGRlc2MuTWlwTGV2ZWxzID0gMTsKLSAgICBkZXNjLkFycmF5U2l6ZSA9IDE7Ci0g
ICAgZGVzYy5Gb3JtYXQgPSB3ZWJraXRUZXh0dXJlRm9ybWF0OwotICAgIGRlc2MuU2FtcGxlRGVz
Yy5Db3VudCA9IDE7Ci0gICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7Ci0gICAg
ZGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX1NI
QURFUl9SRVNPVVJDRTsKLSAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICBkZXNjLk1p
c2NGbGFncyA9IEQzRDExX1JFU09VUkNFX01JU0NfR0RJX0NPTVBBVElCTEU7Ci0gICAgaWYgKGNy
b3NzUHJvY2VzcykKLSAgICAgICAgZGVzYy5NaXNjRmxhZ3MgfD0gRDNEMTFfUkVTT1VSQ0VfTUlT
Q19TSEFSRURfTlRIQU5ETEUgfCBEM0QxMV9SRVNPVVJDRV9NSVNDX1NIQVJFRF9LRVlFRE1VVEVY
OwotCi0gICAgQ09NUHRyPElEM0QxMVRleHR1cmUyRD4gdGV4dHVyZTsKLSAgICBIUkVTVUxUIGhy
ID0gZGlyZWN0WERldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBudWxscHRyLCAmdGV4dHVy
ZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBDT01QdHI8SURY
R0lTdXJmYWNlMT4gc3VyZmFjZTsKLSAgICBociA9IHRleHR1cmUtPlF1ZXJ5SW50ZXJmYWNlKCZz
dXJmYWNlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIHJldHVy
biBzdXJmYWNlOwotfQotCi1DT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IGNyZWF0ZVN1cmZhY2VS
ZW5kZXJUYXJnZXQoSURYR0lTdXJmYWNlMSogc3VyZmFjZSkKLXsKLSAgICBhdXRvIHBpeGVsRm9y
bWF0ID0gRDJEMTo6UGl4ZWxGb3JtYXQod2Via2l0VGV4dHVyZUZvcm1hdCwgd2Via2l0QWxwaGFN
b2RlKTsKLQotICAgIGF1dG8gcHJvcGVydGllcyA9IEQyRDE6OlJlbmRlclRhcmdldFByb3BlcnRp
ZXMoRDJEMV9SRU5ERVJfVEFSR0VUX1RZUEVfREVGQVVMVCwKLSAgICAgICAgcGl4ZWxGb3JtYXQs
IDAsIDAsIEQyRDFfUkVOREVSX1RBUkdFVF9VU0FHRV9HRElfQ09NUEFUSUJMRSwgRDJEMV9GRUFU
VVJFX0xFVkVMXzEwKTsKLQotICAgIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gcmVuZGVyVGFy
Z2V0OwotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+
Q3JlYXRlRHhnaVN1cmZhY2VSZW5kZXJUYXJnZXQoc3VyZmFjZSwgcHJvcGVydGllcywgJnJlbmRl
clRhcmdldCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIHJldHVybiByZW5kZXJUYXJnZXQ7Ci19Ci0KLXZvaWQgY29weVJlY3RGcm9tT25l
U3VyZmFjZVRvQW5vdGhlcihJRDJEMUJpdG1hcCogZnJvbSwgSUQyRDFCaXRtYXAqIHRvLCBjb25z
dCBJbnRTaXplJiBzb3VyY2VPZmZzZXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNp
emUmIGRlc3RPZmZzZXQpCi17Ci0gICAgSW50U2l6ZSBzb3VyY2VCaXRtYXBTaXplID0gZnJvbS0+
R2V0UGl4ZWxTaXplKCk7Ci0gICAgaWYgKHNvdXJjZUJpdG1hcFNpemUuaXNaZXJvKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEludFNpemUgdGFyZ2V0Qml0bWFwU2l6ZSA9IHRvLT5HZXRQaXhl
bFNpemUoKTsKLSAgICBpZiAodGFyZ2V0Qml0bWFwU2l6ZS5pc1plcm8oKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgSW50UmVjdCBzb3VyY2VSZWN0KHNvdXJjZU9mZnNldC53aWR0aCgpLCBzb3Vy
Y2VPZmZzZXQuaGVpZ2h0KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgSW50
UmVjdCB0YXJnZXRSZWN0KGRlc3RPZmZzZXQud2lkdGgoKSwgZGVzdE9mZnNldC5oZWlnaHQoKSwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLQotICAgIEludFJlY3Qgc291cmNlQml0bWFw
UmVjdChJbnRQb2ludCgpLCBzb3VyY2VCaXRtYXBTaXplKTsKLSAgICBJbnRSZWN0IHRhcmdldEJp
dG1hcFJlY3QoSW50UG9pbnQoKSwgdGFyZ2V0Qml0bWFwU2l6ZSk7Ci0KLSAgICBzb3VyY2VSZWN0
LmludGVyc2VjdChzb3VyY2VCaXRtYXBSZWN0KTsKLSAgICB0YXJnZXRSZWN0LmludGVyc2VjdCh0
YXJnZXRCaXRtYXBSZWN0KTsKLQotICAgIEQyRDFfUkVDVF9VIGQyZFNvdXJjZVJlY3QgPSBEMkQx
OjpSZWN0VShzb3VyY2VSZWN0LngoKSwgc291cmNlUmVjdC55KCksIHNvdXJjZVJlY3QueCgpICsg
dGFyZ2V0UmVjdC53aWR0aCgpLCBzb3VyY2VSZWN0LnkoKSArIHRhcmdldFJlY3QuaGVpZ2h0KCkp
OwotICAgIGF1dG8gb2Zmc2V0ID0gRDJEMTo6UG9pbnQyVShkZXN0T2Zmc2V0LndpZHRoKCksIGRl
c3RPZmZzZXQuaGVpZ2h0KCkpOwotCi0gICAgSFJFU1VMVCBociA9IHRvLT5Db3B5RnJvbUJpdG1h
cCgmb2Zmc2V0LCBmcm9tLCAmZDJkU291cmNlUmVjdCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotfQotCi12b2lkIHdyaXRlRGlhZ25vc3RpY1BOR1RvUGF0aChJRDJEMVJlbmRlclRhcmdl
dCogcmVuZGVyVGFyZ2V0LCBJRDJEMUJpdG1hcCogYml0bWFwLCBMUENXU1RSIGZpbGVOYW1lKQot
ewotICAgIENPTVB0cjxJV0lDQml0bWFwRW5jb2Rlcj4gd2ljQml0bWFwRW5jb2RlcjsKLSAgICBI
UkVTVUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3RlbUltYWdpbmdGYWN0b3J5KCkt
PkNyZWF0ZUVuY29kZXIoR1VJRF9Db250YWluZXJGb3JtYXRQbmcsIG51bGxwdHIsICZ3aWNCaXRt
YXBFbmNvZGVyKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBEV09SRCBtb2Rl
ID0gU1RHTV9DUkVBVEUgfCBTVEdNX1JFQURXUklURSB8IFNUR01fU0hBUkVfREVOWV9XUklURTsK
LSAgICBDT01QdHI8SVN0cmVhbT4gc3RyZWFtOwotICAgIGhyID0gOjpTSENyZWF0ZVN0cmVhbU9u
RmlsZUV4KGZpbGVOYW1lLCBtb2RlLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIFRSVUUsIG51bGxw
dHIsICZzdHJlYW0pOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0gd2lj
Qml0bWFwRW5jb2Rlci0+SW5pdGlhbGl6ZShzdHJlYW0uZ2V0KCksIFdJQ0JpdG1hcEVuY29kZXJO
b0NhY2hlKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBDT01QdHI8SVdJQ0Jp
dG1hcEZyYW1lRW5jb2RlPiB3aWNGcmFtZUVuY29kZTsKLSAgICBociA9IHdpY0JpdG1hcEVuY29k
ZXItPkNyZWF0ZU5ld0ZyYW1lKCZ3aWNGcmFtZUVuY29kZSwgbnVsbHB0cik7Ci0gICAgQVNTRVJU
KFNVQ0NFRURFRChocikpOwotCi0gICAgaHIgPSB3aWNGcmFtZUVuY29kZS0+SW5pdGlhbGl6ZShu
dWxscHRyKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBDT01QdHI8SUQyRDFE
ZXZpY2VDb250ZXh0PiBkMmREZXZpY2VDb250ZXh0OwotICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5R
dWVyeUludGVyZmFjZShfX3V1aWRvZihJRDJEMURldmljZUNvbnRleHQpLCByZWludGVycHJldF9j
YXN0PHZvaWQqKj4oJmQyZERldmljZUNvbnRleHQpKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0KLSAgICBDT01QdHI8SUQyRDFEZXZpY2U+IGQyZERldmljZTsKLSAgICBkMmREZXZpY2VD
b250ZXh0LT5HZXREZXZpY2UoJmQyZERldmljZSk7Ci0KLSAgICBDT01QdHI8SVdJQ0ltYWdlRW5j
b2Rlcj4gaW1hZ2VFbmNvZGVyOwotICAgIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3Rl
bUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZUltYWdlRW5jb2RlcihkMmREZXZpY2UuZ2V0KCksICZp
bWFnZUVuY29kZXIpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0gaW1h
Z2VFbmNvZGVyLT5Xcml0ZUZyYW1lKGJpdG1hcCwgd2ljRnJhbWVFbmNvZGUuZ2V0KCksIG51bGxw
dHIpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0gd2ljRnJhbWVFbmNv
ZGUtPkNvbW1pdCgpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0gd2lj
Qml0bWFwRW5jb2Rlci0+Q29tbWl0KCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0g
ICAgaHIgPSBzdHJlYW0tPkNvbW1pdChTVEdDX0RFRkFVTFQpOwotICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpKTsKLX0KLQotc3RhdGljIElEM0QxMURldmljZUNvbnRleHQxKiBpbW1lZGlhdGVDb250
ZXh0ID0gbnVsbHB0cjsKLQotSUQzRDExRGV2aWNlQ29udGV4dDEqIGR4Z2lJbW1lZGlhdGVDb250
ZXh0KCkKLXsKLSAgICBpZiAoIWltbWVkaWF0ZUNvbnRleHQpCi0gICAgICAgIGRlZmF1bHREaXJl
Y3RYRGV2aWNlKCk7Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChpbW1lZGlhdGVDb250ZXh0KTsKLSAg
ICByZXR1cm4gaW1tZWRpYXRlQ29udGV4dDsKLX0KLQotSUQzRDExRGV2aWNlMSogZGVmYXVsdERp
cmVjdFhEZXZpY2UoKQotewotICAgIHN0YXRpYyBJRDNEMTFEZXZpY2UxKiBkZWZhdWx0RGV2aWNl
MSA9IG51bGxwdHI7Ci0KLSAgICBpZiAoIWRlZmF1bHREZXZpY2UxKSB7Ci0gICAgICAgIGludCBk
ZXZpY2VGbGFncyA9IEQzRDExX0NSRUFURV9ERVZJQ0VfQkdSQV9TVVBQT1JUOwotI2lmbmRlZiBO
REVCVUcKLSAgICAgICAgZGV2aWNlRmxhZ3MgfD0gRDNEMTFfQ1JFQVRFX0RFVklDRV9ERUJVRzsK
LSNlbmRpZgotCi0gICAgICAgIElEM0QxMURldmljZSogZGVmYXVsdERldmljZSA9IG51bGxwdHI7
Ci0gICAgICAgIEQzRF9GRUFUVVJFX0xFVkVMIGZlYXR1cmVMZXZlbCA9IHsgfTsKLSAgICAgICAg
SUQzRDExRGV2aWNlQ29udGV4dCogaW1tZWRpYXRlRGV2aWNlQ29udGV4dCA9IG51bGxwdHI7Ci0g
ICAgICAgIEhSRVNVTFQgaHIgPSBEM0QxMUNyZWF0ZURldmljZShudWxscHRyLCBEM0RfRFJJVkVS
X1RZUEVfSEFSRFdBUkUsIG51bGxwdHIsIGRldmljZUZsYWdzLCBudWxscHRyLCAwLCBEM0QxMV9T
REtfVkVSU0lPTiwgJmRlZmF1bHREZXZpY2UsICZmZWF0dXJlTGV2ZWwsICZpbW1lZGlhdGVEZXZp
Y2VDb250ZXh0KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAg
ICAgICAgaHIgPSBkZWZhdWx0RGV2aWNlLT5RdWVyeUludGVyZmFjZSgmZGVmYXVsdERldmljZTEp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgZGVmYXVs
dERldmljZTEtPkFkZFJlZigpOwotCi0gICAgICAgIGhyID0gaW1tZWRpYXRlRGV2aWNlQ29udGV4
dC0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQzRDExRGV2aWNlQ29udGV4dDEpLCByZWludGVy
cHJldF9jYXN0PHZvaWQqKj4oJmltbWVkaWF0ZUNvbnRleHQpKTsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIGltbWVkaWF0ZUNvbnRleHQtPkFkZFJlZigp
OwotICAgIH0KLQotICAgIHJldHVybiBkZWZhdWx0RGV2aWNlMTsKLX0KLQotYm9vbCBjcmVhdGVE
ZXZpY2VBbmRDb250ZXh0KENPTVB0cjxJRDNEMTFEZXZpY2UxPiYgZDNkRGV2aWNlLCBDT01QdHI8
SUQzRDExRGV2aWNlQ29udGV4dDE+JiBpbW1lZGlhdGVDb250ZXh0KQotewotICAgIGludCBkZXZp
Y2VGbGFncyA9IEQzRDExX0NSRUFURV9ERVZJQ0VfQkdSQV9TVVBQT1JUOwotI2lmbmRlZiBOREVC
VUcKLSAgICBkZXZpY2VGbGFncyB8PSBEM0QxMV9DUkVBVEVfREVWSUNFX0RFQlVHOwotI2VuZGlm
Ci0KLSAgICBEM0RfRkVBVFVSRV9MRVZFTCBmZWF0dXJlTGV2ZWwgPSB7IH07Ci0gICAgSUQzRDEx
RGV2aWNlKiBkZWZhdWx0RGV2aWNlID0gbnVsbHB0cjsKLSAgICBJRDNEMTFEZXZpY2VDb250ZXh0
KiBpbW1lZGlhdGVEZXZpY2VDb250ZXh0ID0gbnVsbHB0cjsKLSAgICBIUkVTVUxUIGhyID0gOjpE
M0QxMUNyZWF0ZURldmljZShudWxscHRyLCBEM0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsIG51bGxw
dHIsIGRldmljZUZsYWdzLCBudWxscHRyLCAwLCBEM0QxMV9TREtfVkVSU0lPTiwgJmRlZmF1bHRE
ZXZpY2UsICZmZWF0dXJlTGV2ZWwsICZpbW1lZGlhdGVEZXZpY2VDb250ZXh0KTsKLSAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0gZGVmYXVsdERldmljZS0+UXVl
cnlJbnRlcmZhY2UoJmQzZERldmljZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0gICAgZGVmYXVsdERldmljZS0+UmVsZWFzZSgpOwotCi0gICAgaHIgPSBpbW1lZGlhdGVE
ZXZpY2VDb250ZXh0LT5RdWVyeUludGVyZmFjZSgmaW1tZWRpYXRlQ29udGV4dCk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgaW1tZWRpYXRlQ29udGV4dC0+UmVsZWFz
ZSgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1DT01QdHI8SURYR0lEZXZpY2UxPiB0b0RYR0lE
ZXZpY2UoY29uc3QgQ09NUHRyPElEM0QxMURldmljZTE+JiBkM2REZXZpY2UpCi17Ci0gICAgaWYg
KCFkM2REZXZpY2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ09NUHRyPElEWEdJ
RGV2aWNlMT4gZHhnaURldmljZTsKLSAgICBIUkVTVUxUIGhyID0gZDNkRGV2aWNlLT5RdWVyeUlu
dGVyZmFjZShfX3V1aWRvZihJRFhHSURldmljZTEpLCAodm9pZCAqKikmZHhnaURldmljZSk7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJl
dHVybiBkeGdpRGV2aWNlOwotfQotCi1DT01QdHI8SURYR0lGYWN0b3J5Mj4gZmFjdG9yeUZvckRY
R0lEZXZpY2UoY29uc3QgQ09NUHRyPElEWEdJRGV2aWNlMT4mIGRldmljZSkKLXsKLSAgICBpZiAo
IWRldmljZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SURYR0lBZGFw
dGVyPiBhZGFwdG9yOwotICAgIEhSRVNVTFQgaHIgPSBkZXZpY2UtPkdldFBhcmVudChfX3V1aWRv
ZihJRFhHSUFkYXB0ZXIpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmFkYXB0b3IpKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENPTVB0cjxJRFhHSUZhY3Rv
cnk+IGZhY3Rvcnk7Ci0gICAgaHIgPSBhZGFwdG9yLT5HZXRQYXJlbnQoX191dWlkb2YoSURYR0lG
YWN0b3J5KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZmYWN0b3J5KSk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBDT01QdHI8SURYR0lGYWN0b3J5Mj4gZmFj
dG9yeTI7Ci0gICAgaHIgPSBmYWN0b3J5LT5RdWVyeUludGVyZmFjZSgmZmFjdG9yeTIpOyAKLSAg
ICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAKLSAgICByZXR1cm4gZmFjdG9y
eTI7Ci19Ci0KLUNPTVB0cjxJRFhHSVN3YXBDaGFpbj4gc3dhcENoYWluT2ZTaXplRm9yV2luZG93
QW5kRGV2aWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIEhXTkQgd2luZG93LCBjb25z
dCBDT01QdHI8SUQzRDExRGV2aWNlMT4mIGRldmljZSkKLXsKLSAgICBpZiAoIWRldmljZSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBEWEdJX1NXQVBfQ0hBSU5fREVTQzEgc3dhcENo
YWluRGVzY3JpcHRpb247Ci0gICAgOjpaZXJvTWVtb3J5KCZzd2FwQ2hhaW5EZXNjcmlwdGlvbiwg
c2l6ZW9mKHN3YXBDaGFpbkRlc2NyaXB0aW9uKSk7Ci0gICAgc3dhcENoYWluRGVzY3JpcHRpb24u
V2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgc3dhcENoYWluRGVzY3JpcHRpb24uSGVpZ2h0ID0g
c2l6ZS5oZWlnaHQoKTsKLSAgICBzd2FwQ2hhaW5EZXNjcmlwdGlvbi5Gb3JtYXQgPSB3ZWJraXRU
ZXh0dXJlRm9ybWF0OwotICAgIHN3YXBDaGFpbkRlc2NyaXB0aW9uLlNhbXBsZURlc2MuQ291bnQg
PSAxOwotICAgIHN3YXBDaGFpbkRlc2NyaXB0aW9uLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7Ci0g
ICAgc3dhcENoYWluRGVzY3JpcHRpb24uQnVmZmVyVXNhZ2UgPSBEWEdJX1VTQUdFX1NIQURFUl9J
TlBVVCB8IERYR0lfVVNBR0VfUkVOREVSX1RBUkdFVF9PVVRQVVQ7Ci0gICAgc3dhcENoYWluRGVz
Y3JpcHRpb24uQnVmZmVyQ291bnQgPSAxOwotICAgIHN3YXBDaGFpbkRlc2NyaXB0aW9uLkZsYWdz
ID0gRFhHSV9TV0FQX0NIQUlOX0ZMQUdfR0RJX0NPTVBBVElCTEU7Ci0KLSAgICBhdXRvIGZhY3Rv
cnkgPSBEaXJlY3QyRDo6ZmFjdG9yeUZvckRYR0lEZXZpY2UoRGlyZWN0MkQ6OnRvRFhHSURldmlj
ZShkZXZpY2UpKTsKLQotICAgIENPTVB0cjxJRFhHSVN3YXBDaGFpbjE+IHN3YXBDaGFpbjE7Ci0g
ICAgSFJFU1VMVCBociA9IGZhY3RvcnktPkNyZWF0ZVN3YXBDaGFpbkZvckh3bmQoZGV2aWNlLmdl
dCgpLCB3aW5kb3csICZzd2FwQ2hhaW5EZXNjcmlwdGlvbiwgbnVsbHB0ciwgbnVsbHB0ciwgJnN3
YXBDaGFpbjEpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBDT01QdHI8SURYR0lTd2FwQ2hhaW4+IHN3YXBDaGFpbihRdWVyeSwgc3dhcENo
YWluMSk7Ci0gICAgcmV0dXJuIHN3YXBDaGFpbjsKLX0KLQotQ09NUHRyPElEMkQxQml0bWFwPiBj
cmVhdGVCaXRtYXBDb3B5RnJvbUNvbnRleHQoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1h
cFRhcmdldCkKLXsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGN1cnJlbnRDYW52YXM7Ci0gICAg
SFJFU1VMVCBociA9IGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZjdXJyZW50Q2FudmFzKTsKLSAg
ICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0
byBiaXRtYXBDcmVhdGVQcm9wZXJ0aWVzID0gYml0bWFwUHJvcGVydGllcygpOwotCi0gICAgQ09N
UHRyPElEMkQxQml0bWFwPiBiaXRtYXA7Ci0gICAgRDJEMV9TSVpFX1UgYml0bWFwU2l6ZSA9IGN1
cnJlbnRDYW52YXMtPkdldFBpeGVsU2l6ZSgpOwotICAgIGhyID0gYml0bWFwVGFyZ2V0LT5DcmVh
dGVCaXRtYXAoYml0bWFwU2l6ZSwgYml0bWFwQ3JlYXRlUHJvcGVydGllcywgJmJpdG1hcCk7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1
dG8gdGFyZ2V0UG9zID0gRDJEMTo6UG9pbnQyVSgpOwotICAgIEQyRDFfUkVDVF9VIGRhdGFSZWN0
ID0gRDJEMTo6UmVjdFUoMCwgMCwgYml0bWFwU2l6ZS53aWR0aCwgYml0bWFwU2l6ZS5oZWlnaHQp
OwotICAgIGhyID0gYml0bWFwLT5Db3B5RnJvbUJpdG1hcCgmdGFyZ2V0UG9zLCBjdXJyZW50Q2Fu
dmFzLmdldCgpLCAmZGF0YVJlY3QpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGJpdG1hcDsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
RGlyZWN0MkQKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVD
VDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJE
VXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5oCShub25leGlz
dGVudCkKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlh
IFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0K
LSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5jbHVk
ZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtRXhwb3J0TWFjcm9zLmgiCi0KLWludGVy
ZmFjZSBJRDJEMUJpdG1hcDsKLWludGVyZmFjZSBJRDJEMUJpdG1hcFJlbmRlclRhcmdldDsKLWlu
dGVyZmFjZSBJRDJEMURDUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0
OwotaW50ZXJmYWNlIElEM0QxMURldmljZTE7Ci1pbnRlcmZhY2UgSUQzRDExRGV2aWNlQ29udGV4
dDE7Ci1pbnRlcmZhY2UgSUQzRDExUmVuZGVyVGFyZ2V0VmlldzsKLWludGVyZmFjZSBJRFhHSURl
dmljZTE7Ci1pbnRlcmZhY2UgSURYR0lGYWN0b3J5MjsKLWludGVyZmFjZSBJRFhHSVN3YXBDaGFp
bjsKLWludGVyZmFjZSBJRFhHSVN1cmZhY2UxOwotaW50ZXJmYWNlIElXSUNCaXRtYXBTb3VyY2U7
Ci1pbnRlcmZhY2UgSVdJQ0JpdG1hcDsKLQotc3RydWN0IEQyRDFfQklUTUFQX1BST1BFUlRJRVM7
Ci1zdHJ1Y3QgRDJEMV9QSVhFTF9GT1JNQVQ7Ci1zdHJ1Y3QgRDJEMV9SRU5ERVJfVEFSR0VUX1BS
T1BFUlRJRVM7Ci1zdHJ1Y3QgRDNEMTFfVklFV1BPUlQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0U2l6ZTsKLWNsYXNzIEludFJlY3Q7Ci1j
bGFzcyBJbnRTaXplOwotCi1uYW1lc3BhY2UgRGlyZWN0MkQgewotCi1HVUlEIHdpY0JpdG1hcEZv
cm1hdCgpOwotRDJEMV9QSVhFTF9GT1JNQVQgcGl4ZWxGb3JtYXQoKTsgLy8gQkdSQQotRDJEMV9Q
SVhFTF9GT1JNQVQgcGl4ZWxGb3JtYXRGb3JTb2Z0d2FyZU1hbmlwdWxhdGlvbigpOyAvLyBSR0JB
Ci1EMkQxX0JJVE1BUF9QUk9QRVJUSUVTIGJpdG1hcFByb3BlcnRpZXMoKTsKLUQyRDFfUkVOREVS
X1RBUkdFVF9QUk9QRVJUSUVTIHJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKLQotdm9pZCBpblBs
YWNlU3dpenpsZSh1aW50OF90KiBieXRlRGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBib29sIGFwcGx5
UHJlbXVsdGlwbGljYXRpb24gPSBmYWxzZSk7Ci0KLUludFNpemUgYml0bWFwU2l6ZShJV0lDQml0
bWFwU291cmNlKik7Ci1GbG9hdFNpemUgYml0bWFwU2l6ZShJRDJEMUJpdG1hcCopOwotRmxvYXRT
aXplIGJpdG1hcFJlc29sdXRpb24oSVdJQ0JpdG1hcFNvdXJjZSopOwotRmxvYXRTaXplIGJpdG1h
cFJlc29sdXRpb24oSUQyRDFCaXRtYXAqKTsKLUZsb2F0U2l6ZSBiaXRtYXBSZXNvbHV0aW9uKElE
MkQxUmVuZGVyVGFyZ2V0Kik7Ci11bnNpZ25lZCBiaXRzUGVyUGl4ZWwoR1VJRCk7Ci1DT01QdHI8
SUQyRDFCaXRtYXA+IGNyZWF0ZUJpdG1hcChJRDJEMVJlbmRlclRhcmdldCosIGNvbnN0IEludFNp
emUmKTsKLUNPTVB0cjxJV0lDQml0bWFwPiBjcmVhdGVXaWNCaXRtYXAoY29uc3QgSW50U2l6ZSYp
OwotQ09NUHRyPElXSUNCaXRtYXA+IGNyZWF0ZURpcmVjdDJESW1hZ2VTdXJmYWNlV2l0aERhdGEo
dm9pZCogZGF0YSwgY29uc3QgSW50U2l6ZSYsIHVuc2lnbmVkIHN0cmlkZSk7Ci1DT01QdHI8SUQy
RDFSZW5kZXJUYXJnZXQ+IGNyZWF0ZVJlbmRlclRhcmdldEZyb21XSUNCaXRtYXAoSVdJQ0JpdG1h
cCopOwotQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBjcmVhdGVCaXRtYXBSZW5kZXJU
YXJnZXRPZlNpemUoY29uc3QgSW50U2l6ZSYsIElEMkQxUmVuZGVyVGFyZ2V0KiA9IG51bGxwdHIs
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gMS4wKTsKLUNPTVB0cjxJRDJEMUJpdG1hcFJlbmRl
clRhcmdldD4gY3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0KElEMkQxUmVuZGVyVGFyZ2V0KiA9IG51
bGxwdHIpOwotQ09NUHRyPElEMkQxRENSZW5kZXJUYXJnZXQ+IGNyZWF0ZUdESVJlbmRlclRhcmdl
dCgpOwotQ09NUHRyPElEWEdJU3VyZmFjZTE+IGNyZWF0ZURYR0lTdXJmYWNlT2ZTaXplKGNvbnN0
IEludFNpemUmLCBJRDNEMTFEZXZpY2UxKiwgYm9vbCBjcm9zc1Byb2Nlc3MpOwotQ09NUHRyPElE
MkQxUmVuZGVyVGFyZ2V0PiBjcmVhdGVTdXJmYWNlUmVuZGVyVGFyZ2V0KElEWEdJU3VyZmFjZTEq
KTsKLUNPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlQml0bWFwQ29weUZyb21Db250ZXh0KElEMkQx
Qml0bWFwUmVuZGVyVGFyZ2V0Kik7Ci0KLXZvaWQgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5v
dGhlcihJRDJEMUJpdG1hcCogZnJvbSwgSUQyRDFCaXRtYXAqIHRvLCBjb25zdCBJbnRTaXplJiBz
b3VyY2VPZmZzZXQsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiBkZXN0T2Zmc2V0ID0g
SW50U2l6ZSgpKTsKLQotV0VCQ09SRV9FWFBPUlQgSUQzRDExRGV2aWNlQ29udGV4dDEqIGR4Z2lJ
bW1lZGlhdGVDb250ZXh0KCk7Ci1XRUJDT1JFX0VYUE9SVCBJRDNEMTFEZXZpY2UxKiBkZWZhdWx0
RGlyZWN0WERldmljZSgpOwotV0VCQ09SRV9FWFBPUlQgYm9vbCBjcmVhdGVEZXZpY2VBbmRDb250
ZXh0KENPTVB0cjxJRDNEMTFEZXZpY2UxPiYsIENPTVB0cjxJRDNEMTFEZXZpY2VDb250ZXh0MT4m
KTsKLVdFQkNPUkVfRVhQT1JUIENPTVB0cjxJRFhHSURldmljZTE+IHRvRFhHSURldmljZShjb25z
dCBDT01QdHI8SUQzRDExRGV2aWNlMT4mKTsKLVdFQkNPUkVfRVhQT1JUIENPTVB0cjxJRFhHSUZh
Y3RvcnkyPiBmYWN0b3J5Rm9yRFhHSURldmljZShjb25zdCBDT01QdHI8SURYR0lEZXZpY2UxPiYp
OwotV0VCQ09SRV9FWFBPUlQgQ09NUHRyPElEWEdJU3dhcENoYWluPiBzd2FwQ2hhaW5PZlNpemVG
b3JXaW5kb3dBbmREZXZpY2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIEhXTkQsIGNvbnN0IENP
TVB0cjxJRDNEMTFEZXZpY2UxPiYpOwotCi12b2lkIHdyaXRlRGlhZ25vc3RpY1BOR1RvUGF0aChJ
RDJEMVJlbmRlclRhcmdldCosIElEMkQxQml0bWFwKiwgTFBDV1NUUiBmaWxlTmFtZSk7Ci0KLX0g
Ly8gbmFtZXNwYWNlIERpcmVjdDJECi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAkocmV2aXNp
b24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVj
dFdyaXRlVXRpbGl0aWVzLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDI0NiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJEaXJlY3RXcml0ZVV0aWxpdGllcy5oIgotCi0jaWYgVVNFKERJUkVD
VDJEKQotCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0j
aW5jbHVkZSA8ZHdyaXRlXzMuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFj
ZSBEaXJlY3RXcml0ZSB7Ci0KLUlEV3JpdGVGYWN0b3J5NSogZmFjdG9yeSgpCi17Ci0gICAgc3Rh
dGljIElEV3JpdGVGYWN0b3J5NSogZGlyZWN0V3JpdGVGYWN0b3J5ID0gbnVsbHB0cjsKLSAgICBp
ZiAoIWRpcmVjdFdyaXRlRmFjdG9yeSkgewotICAgICAgICBIUkVTVUxUIGhyID0gRFdyaXRlQ3Jl
YXRlRmFjdG9yeShEV1JJVEVfRkFDVE9SWV9UWVBFX1NIQVJFRCwgX191dWlkb2YoZGlyZWN0V3Jp
dGVGYWN0b3J5KSwgcmVpbnRlcnByZXRfY2FzdDxJVW5rbm93bioqPigmZGlyZWN0V3JpdGVGYWN0
b3J5KSk7Ci0gICAgICAgIGRpcmVjdFdyaXRlRmFjdG9yeS0+QWRkUmVmKCk7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIH0KLQotICAgIHJldHVybiBkaXJlY3RX
cml0ZUZhY3Rvcnk7Ci19Ci0KLUlEV3JpdGVHZGlJbnRlcm9wKiBnZGlJbnRlcm9wKCkKLXsKLSAg
ICBzdGF0aWMgSURXcml0ZUdkaUludGVyb3AqIGRpcmVjdFdyaXRlR2RpSW50ZXJvcCA9IG51bGxw
dHI7Ci0gICAgaWYgKCFkaXJlY3RXcml0ZUdkaUludGVyb3ApIHsKLSAgICAgICAgSFJFU1VMVCBo
ciA9IGZhY3RvcnkoKS0+R2V0R2RpSW50ZXJvcCgmZGlyZWN0V3JpdGVHZGlJbnRlcm9wKTsKLSAg
ICAgICAgZGlyZWN0V3JpdGVHZGlJbnRlcm9wLT5BZGRSZWYoKTsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRpcmVjdFdyaXRlR2Rp
SW50ZXJvcDsKLX0KLQotc3RhdGljIElEV3JpdGVJbk1lbW9yeUZvbnRGaWxlTG9hZGVyKiBtZW1v
cnlGb250TG9hZGVyKCkKLXsKLSAgICBzdGF0aWMgSURXcml0ZUluTWVtb3J5Rm9udEZpbGVMb2Fk
ZXIqIG1lbW9yeUZvbnRMb2FkZXIgPSBudWxscHRyOwotICAgIGlmICghbWVtb3J5Rm9udExvYWRl
cikgewotICAgICAgICBIUkVTVUxUIGhyID0gZmFjdG9yeSgpLT5DcmVhdGVJbk1lbW9yeUZvbnRG
aWxlTG9hZGVyKCZtZW1vcnlGb250TG9hZGVyKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VD
Q0VFREVEKGhyKSk7Ci0gICAgICAgIG1lbW9yeUZvbnRMb2FkZXItPkFkZFJlZigpOwotCi0gICAg
ICAgIGhyID0gZmFjdG9yeSgpLT5SZWdpc3RlckZvbnRGaWxlTG9hZGVyKG1lbW9yeUZvbnRMb2Fk
ZXIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gbWVtb3J5Rm9udExvYWRlcjsKLX0KLQotc3RhdGljIElEV3JpdGVGb250U2V0QnVp
bGRlcjEqIGZvbnRTZXRCdWlsZGVyKCkKLXsKLSAgICBzdGF0aWMgSURXcml0ZUZvbnRTZXRCdWls
ZGVyMSogZm9udFNldEJ1aWxkZXIgPSBudWxscHRyOwotICAgIGlmICghZm9udFNldEJ1aWxkZXIp
IHsKLSAgICAgICAgSFJFU1VMVCBociA9IGZhY3RvcnkoKS0+Q3JlYXRlRm9udFNldEJ1aWxkZXIo
JmZvbnRTZXRCdWlsZGVyKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0gICAgICAgIGZvbnRTZXRCdWlsZGVyLT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
Zm9udFNldEJ1aWxkZXI7Ci19Ci0KLXN0YXRpYyBDT01QdHI8SURXcml0ZUZvbnRTZXQ+IGZvbnRT
ZXQ7Ci1zdGF0aWMgQ09NUHRyPElEV3JpdGVGb250Q29sbGVjdGlvbjE+IGZvbnRDb2xsZWN0aW9u
Owotc3RhdGljIFVJTlQzMiBmb250Q291bnQgPSAwOwotCi1JRFdyaXRlRm9udENvbGxlY3Rpb24x
KiB3ZWJQcm9jZXNzRm9udENvbGxlY3Rpb24oKQotewotICAgIEhSRVNVTFQgaHIgPSBTX09LOwot
Ci0gICAgaWYgKCFmb250U2V0KSB7Ci0gICAgICAgIGhyID0gZm9udFNldEJ1aWxkZXIoKS0+Q3Jl
YXRlRm9udFNldCgmZm9udFNldCk7Ci0gICAgICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGZvbnRDb2xsZWN0aW9uID0gbnVsbHB0
cjsKLSAgICAgICAgaHIgPSBmYWN0b3J5KCktPkNyZWF0ZUZvbnRDb2xsZWN0aW9uRnJvbUZvbnRT
ZXQoZm9udFNldC5nZXQoKSwgJmZvbnRDb2xsZWN0aW9uKTsKLSAgICAgICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgQVNTRVJUKGZv
bnRDb2xsZWN0aW9uLT5HZXRGb250RmFtaWx5Q291bnQoKSA9PSBmb250Q291bnQpOwotICAgIH0K
LQotICAgIHJldHVybiBmb250Q29sbGVjdGlvbi5nZXQoKTsKLX0KLQotSFJFU1VMVCBhZGRGb250
RnJvbURhdGFUb1Byb2Nlc3NDb2xsZWN0aW9uKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZm9udERh
dGEpCi17Ci0gICAgQ09NUHRyPElEV3JpdGVGb250RmlsZT4gZm9udEZpbGU7Ci0gICAgSFJFU1VM
VCBociA9IG1lbW9yeUZvbnRMb2FkZXIoKS0+Q3JlYXRlSW5NZW1vcnlGb250RmlsZVJlZmVyZW5j
ZShmYWN0b3J5KCksIGZvbnREYXRhLmRhdGEoKSwgZm9udERhdGEuc2l6ZSgpLCBudWxscHRyLCAm
Zm9udEZpbGUpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwot
Ci0gICAgaHIgPSBmb250U2V0QnVpbGRlcigpLT5BZGRGb250RmlsZShmb250RmlsZS5nZXQoKSk7
Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICBmb250
U2V0ID0gbnVsbHB0cjsKLSAgICArK2ZvbnRDb3VudDsKLQotICAgIHJldHVybiBocjsKLX0KLQot
VmVjdG9yPHdjaGFyX3Q+IGZhbWlseU5hbWVGb3JMb2NhbGUoSURXcml0ZUZvbnRGYW1pbHkqIGZv
bnRGYW1pbHksIGNvbnN0IFZlY3Rvcjx3Y2hhcl90PiYgbG9jYWxlTmFtZSkKLXsKLSAgICBDT01Q
dHI8SURXcml0ZUxvY2FsaXplZFN0cmluZ3M+IGZhbWlseU5hbWVzOwotICAgIEhSRVNVTFQgaHIg
PSBmb250RmFtaWx5LT5HZXRGYW1pbHlOYW1lcygmZmFtaWx5TmFtZXMpOwotICAgIGlmIChGQUlM
RUQoaHIpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgQk9PTCBleGlzdHMgPSBmYWxzZTsK
LSAgICB1bnNpZ25lZCBsb2NhbGVJbmRleCA9IDA7Ci0gICAgaWYgKCFsb2NhbGVOYW1lLmlzRW1w
dHkoKSkKLSAgICAgICAgaHIgPSBmYW1pbHlOYW1lcy0+RmluZExvY2FsZU5hbWUobG9jYWxlTmFt
ZS5kYXRhKCksICZsb2NhbGVJbmRleCwgJmV4aXN0cyk7Ci0KLSAgICBpZiAoU1VDQ0VFREVEKGhy
KSAmJiAhZXhpc3RzKQotICAgICAgICBociA9IGZhbWlseU5hbWVzLT5GaW5kTG9jYWxlTmFtZShM
ImVuLXVzIiwgJmxvY2FsZUluZGV4LCAmZXhpc3RzKTsKLQotICAgIGlmIChGQUlMRUQoaHIpKQot
ICAgICAgICByZXR1cm4geyB9OwotCi0gICAgdW5zaWduZWQgZmFtaWx5TmFtZUxlbmd0aCA9IDA7
Ci0gICAgaHIgPSBmYW1pbHlOYW1lcy0+R2V0U3RyaW5nTGVuZ3RoKGxvY2FsZUluZGV4LCAmZmFt
aWx5TmFtZUxlbmd0aCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4g
eyB9OwotCi0gICAgVmVjdG9yPHdjaGFyX3Q+IGZhbWlseU5hbWUoZmFtaWx5TmFtZUxlbmd0aCAr
IDEpOwotICAgIGhyID0gZmFtaWx5TmFtZXMtPkdldFN0cmluZyhsb2NhbGVJbmRleCwgZmFtaWx5
TmFtZS5kYXRhKCksIGZhbWlseU5hbWUuc2l6ZSgpKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikp
Ci0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gZmFtaWx5TmFtZTsKLX0KLQotQ09N
UHRyPElEV3JpdGVGb250RmFtaWx5PiBmb250RmFtaWx5Rm9yQ29sbGVjdGlvbihJRFdyaXRlRm9u
dENvbGxlY3Rpb24qIGZvbnRDb2xsZWN0aW9uLCBjb25zdCBWZWN0b3I8d2NoYXJfdD4mIGxvY2Fs
ZU5hbWUsIGNvbnN0IExPR0ZPTlQmIGxvZ0ZvbnQpCi17Ci0gICAgQ09NUHRyPElEV3JpdGVGb250
RmFtaWx5PiBmb250RmFtaWx5OwotCi0gICAgdW5zaWduZWQgZm9udEZhbWlseUNvdW50ID0gZm9u
dENvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHlDb3VudCgpOwotICAgIGZvciAodW5zaWduZWQgZm9u
dEluZGV4ID0gMDsgZm9udEluZGV4IDwgZm9udEZhbWlseUNvdW50OyArK2ZvbnRJbmRleCkgewot
ICAgICAgICBIUkVTVUxUIGhyID0gZm9udENvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHkoZm9udElu
ZGV4LCAmZm9udEZhbWlseSk7Ci0gICAgICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgYXV0byBmYW1pbHlOYW1lID0gZmFtaWx5TmFtZUZv
ckxvY2FsZShmb250RmFtaWx5LmdldCgpLCBsb2NhbGVOYW1lKTsKLQotICAgICAgICBpZiAoIXdj
c2NtcChsb2dGb250LmxmRmFjZU5hbWUsIGZhbWlseU5hbWUuZGF0YSgpKSkKLSAgICAgICAgICAg
IHJldHVybiBmb250RmFtaWx5OwotCi0gICAgICAgIGZvbnRGYW1pbHkgPSBudWxscHRyOwotICAg
IH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1DT01QdHI8SURXcml0ZUZvbnQ+IGNyZWF0
ZVdpdGhQbGF0Zm9ybUZvbnQoY29uc3QgTE9HRk9OVCYgbG9nRm9udCkKLXsKLSAgICBDT01QdHI8
SURXcml0ZUZvbnRDb2xsZWN0aW9uPiBzeXN0ZW1Gb250Q29sbGVjdGlvbjsKLSAgICBIUkVTVUxU
IGhyID0gZmFjdG9yeSgpLT5HZXRTeXN0ZW1Gb250Q29sbGVjdGlvbigmc3lzdGVtRm9udENvbGxl
Y3Rpb24pOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIFZlY3Rvcjx3Y2hhcl90PiBsb2NhbGVOYW1lKExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwot
ICAgIGludCBsb2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUobG9jYWxlTmFt
ZS5kYXRhKCksIExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGxv
Y2FsZUxlbmd0aCA8PSBMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKLQotICAgIENPTVB0cjxJRFdy
aXRlRm9udENvbGxlY3Rpb24xPiBjb2xsZWN0aW9uKFF1ZXJ5LCBzeXN0ZW1Gb250Q29sbGVjdGlv
bik7Ci0KLSAgICBDT01QdHI8SURXcml0ZUZvbnRGYW1pbHk+IGZvbnRGYW1pbHkgPSBmb250RmFt
aWx5Rm9yQ29sbGVjdGlvbihjb2xsZWN0aW9uLmdldCgpLCBsb2NhbGVOYW1lLCBsb2dGb250KTsK
LSAgICBpZiAoIWZvbnRGYW1pbHkpIHsKLSAgICAgICAgY29sbGVjdGlvbiA9IHdlYlByb2Nlc3NG
b250Q29sbGVjdGlvbigpOwotICAgICAgICBmb250RmFtaWx5ID0gZm9udEZhbWlseUZvckNvbGxl
Y3Rpb24oY29sbGVjdGlvbi5nZXQoKSwgbG9jYWxlTmFtZSwgbG9nRm9udCk7Ci0gICAgfQotCi0g
ICAgaWYgKCFmb250RmFtaWx5KSB7Ci0gICAgICAgIC8vIEp1c3QgcmV0dXJuIHRoZSBmaXJzdCBz
eXN0ZW0gZm9udC4KLSAgICAgICAgY29sbGVjdGlvbiA9IENPTVB0cjxJRFdyaXRlRm9udENvbGxl
Y3Rpb24xPihRdWVyeSwgc3lzdGVtRm9udENvbGxlY3Rpb24pOwotICAgICAgICBociA9IGNvbGxl
Y3Rpb24tPkdldEZvbnRGYW1pbHkoMCwgJmZvbnRGYW1pbHkpOwotICAgICAgICBpZiAoRkFJTEVE
KGhyKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0jaWZuZGVmIE5ERUJVRwotICAg
ICAgICBhdXRvIGZhbWlseU5hbWUgPSBmYW1pbHlOYW1lRm9yTG9jYWxlKGZvbnRGYW1pbHkuZ2V0
KCksIGxvY2FsZU5hbWUpOwotICAgICAgICBVTlVTRURfVkFSSUFCTEUoZmFtaWx5TmFtZSk7Ci0j
ZW5kaWYKLSAgICB9Ci0KLSAgICBEV1JJVEVfRk9OVF9XRUlHSFQgd2VpZ2h0ID0gc3RhdGljX2Nh
c3Q8RFdSSVRFX0ZPTlRfV0VJR0hUPihsb2dGb250LmxmV2VpZ2h0KTsKLSAgICBEV1JJVEVfRk9O
VF9TVFJFVENIIHN0cmV0Y2ggPSBzdGF0aWNfY2FzdDxEV1JJVEVfRk9OVF9TVFJFVENIPihsb2dG
b250LmxmUXVhbGl0eSk7Ci0gICAgRFdSSVRFX0ZPTlRfU1RZTEUgc3R5bGUgPSBsb2dGb250Lmxm
SXRhbGljID8gRFdSSVRFX0ZPTlRfU1RZTEVfSVRBTElDIDogRFdSSVRFX0ZPTlRfU1RZTEVfTk9S
TUFMOwotCi0gICAgQ09NUHRyPElEV3JpdGVGb250PiBkd0ZvbnQ7Ci0gICAgaHIgPSBmb250RmFt
aWx5LT5HZXRGaXJzdE1hdGNoaW5nRm9udCh3ZWlnaHQsIHN0cmV0Y2gsIHN0eWxlLCAmZHdGb250
KTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICByZXR1cm4gZHdGb250OwotfQot
Ci1EV1JJVEVfRk9OVF9XRUlHSFQgZm9udFdlaWdodChjb25zdCBGb250UGxhdGZvcm1EYXRhJikK
LXsKLSAgICByZXR1cm4gRFdSSVRFX0ZPTlRfV0VJR0hUX1JFR1VMQVI7Ci19Ci0KLURXUklURV9G
T05UX1NUWUxFIGZvbnRTdHlsZShjb25zdCBGb250UGxhdGZvcm1EYXRhJikKLXsKLSAgICByZXR1
cm4gRFdSSVRFX0ZPTlRfU1RZTEVfTk9STUFMOwotfQotCi1EV1JJVEVfRk9OVF9TVFJFVENIIGZv
bnRTdHJldGNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKQotewotICAgIHJldHVybiBEV1JJVEVf
Rk9OVF9TVFJFVENIX05PUk1BTDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgRGlyZWN0V3JpdGUKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Rp
cmVjdFdyaXRlVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5oCShub25leGlzdGVu
dCkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUg
IkNPTVB0ci5oIgotCi1pbnRlcmZhY2UgSURXcml0ZUZhY3Rvcnk1OwotaW50ZXJmYWNlIElEV3Jp
dGVGb250OwotaW50ZXJmYWNlIElEV3JpdGVGb250Q29sbGVjdGlvbjsKLWludGVyZmFjZSBJRFdy
aXRlRm9udENvbGxlY3Rpb24xOwotaW50ZXJmYWNlIElEV3JpdGVGb250RmFtaWx5OwotaW50ZXJm
YWNlIElEV3JpdGVHZGlJbnRlcm9wOwotCi1lbnVtIERXUklURV9GT05UX1dFSUdIVDsKLWVudW0g
RFdSSVRFX0ZPTlRfU1RZTEU7Ci1lbnVtIERXUklURV9GT05UX1NUUkVUQ0g7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKLWNsYXNzIEZyYWdtZW50ZWRT
aGFyZWRCdWZmZXI7Ci0KLW5hbWVzcGFjZSBEaXJlY3RXcml0ZSB7Ci0KLUlEV3JpdGVGYWN0b3J5
NSogZmFjdG9yeSgpOwotSURXcml0ZUdkaUludGVyb3AqIGdkaUludGVyb3AoKTsKLQotSURXcml0
ZUZvbnRDb2xsZWN0aW9uMSogd2ViUHJvY2Vzc0ZvbnRDb2xsZWN0aW9uKCk7Ci0KLUhSRVNVTFQg
YWRkRm9udEZyb21EYXRhVG9Qcm9jZXNzQ29sbGVjdGlvbihjb25zdCBWZWN0b3I8dWludDhfdD4m
IGZvbnREYXRhKTsKLUNPTVB0cjxJRFdyaXRlRm9udEZhbWlseT4gZm9udEZhbWlseUZvckNvbGxl
Y3Rpb24oSURXcml0ZUZvbnRDb2xsZWN0aW9uKiwgY29uc3QgVmVjdG9yPHdjaGFyX3Q+JiBsb2Nh
bGVOYW1lLCBjb25zdCBMT0dGT05UJik7Ci1DT01QdHI8SURXcml0ZUZvbnQ+IGNyZWF0ZVdpdGhQ
bGF0Zm9ybUZvbnQoY29uc3QgTE9HRk9OVCYpOwotVmVjdG9yPHdjaGFyX3Q+IGZhbWlseU5hbWVG
b3JMb2NhbGUoSURXcml0ZUZvbnRGYW1pbHkqLCBjb25zdCBWZWN0b3I8d2NoYXJfdD4mIGxvY2Fs
ZU5hbWUpOwotCi1EV1JJVEVfRk9OVF9XRUlHSFQgZm9udFdlaWdodChjb25zdCBGb250UGxhdGZv
cm1EYXRhJik7Ci1EV1JJVEVfRk9OVF9TVFlMRSBmb250U3R5bGUoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYpOwotRFdSSVRFX0ZPTlRfU1RSRVRDSCBmb250U3RyZXRjaChjb25zdCBGb250UGxhdGZv
cm1EYXRhJik7Ci0KLX0gLy8gbmFtZXNwYWNlIERpcmVjdFdyaXRlCi0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFBvaW50RGlyZWN0MkQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFBvaW50RGlyZWN0
MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNiBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLQotI2lmIFBM
QVRGT1JNKFdJTikKLQotI2luY2x1ZGUgPGQyZDEuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1GbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IEQyRF9QT0lOVF8yRiYgcCkKLSAgICA6IG1f
eChwLngpCi0gICAgLCBtX3kocC55KQotewotfQotCi1GbG9hdFBvaW50OjpvcGVyYXRvciBEMkRf
UE9JTlRfMkYoKSBjb25zdAotewotICAgIHJldHVybiBEMkQxOjpQb2ludDJGKG1feCwgbV95KTsK
LX0KLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oV0lOKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UmVjdERpcmVjdDJELmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQu
Y3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsNzggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0KLSNpZiBQTEFURk9STShXSU4p
Ci0KLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBib29sIGlzSW5maW5pdGVSZWN0KGNvbnN0IEQyRDFfUkVD
VF9GJiByZWN0KQotewotICAgIGlmICghc3RkOjppc2luZihyZWN0LnRvcCkgJiYgcmVjdC50b3Ag
IT0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKCFzdGQ6OmlzaW5mKHJlY3QubGVmdCkgJiYgcmVjdC5sZWZ0ICE9IC1z
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghc3RkOjppc2luZihyZWN0LmJvdHRvbSkgJiYgcmVjdC5ib3R0b20gIT0gc3Rk
OjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoIXN0ZDo6aXNpbmYocmVjdC5yaWdodCkgJiYgcmVjdC5yaWdodCAhPSBzdGQ6Om51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1GbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBSRUNUJiByZWN0
KQotICAgIDogbV9sb2NhdGlvbihyZWN0LmxlZnQsIHJlY3QudG9wKQotICAgICwgbV9zaXplKHJl
Y3QucmlnaHQgLSByZWN0LmxlZnQsIHJlY3QuYm90dG9tIC0gcmVjdC50b3ApCi17Ci19Ci0KLUZs
b2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IEQyRDFfUkVDVF9GJiByKQotewotICAgIC8vIEluZmlu
aXRlIFJlY3QgY2FzZToKLSAgICBpZiAoaXNJbmZpbml0ZVJlY3QocikpIHsKLSAgICAgICAgKnRo
aXMgPSBpbmZpbml0ZVJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fbG9j
YXRpb24gPSBGbG9hdFBvaW50KHIubGVmdCwgci50b3ApOwotICAgIG1fc2l6ZSA9IEZsb2F0U2l6
ZShyLnJpZ2h0IC0gci5sZWZ0LCByLmJvdHRvbSAtIHIudG9wKTsKLX0KLQotRmxvYXRSZWN0Ojpv
cGVyYXRvciBEMkQxX1JFQ1RfRigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEQyRDE6OlJlY3RGKHgo
KSwgeSgpLCBtYXhYKCksIG1heFkoKSk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKFdJ
TikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFNpemVE
aXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0Zsb2F0U2l6ZURpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0U2l6ZURpcmVjdDJELmNwcAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAx
NiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZs
b2F0U2l6ZS5oIgotCi0jaWYgUExBVEZPUk0oV0lOKQotCi0jaW5jbHVkZSA8ZDJkMS5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IEQyRDFfU0la
RV9GJiBzKQotICAgIDogbV93aWR0aChzLndpZHRoKQotICAgICwgbV9oZWlnaHQocy5oZWlnaHQp
Ci17Ci19Ci0KLUZsb2F0U2l6ZTo6b3BlcmF0b3IgRDJEMV9TSVpFX0YoKSBjb25zdAotewotICAg
IHJldHVybiBEMkQxOjpTaXplRihtX3dpZHRoLCBtX2hlaWdodCk7Ci19Ci0KLX0KLQotI2VuZGlm
IC8vIFBMQVRGT1JNKFdJTikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAJKHJldmlzaW9u
IDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2Fz
Y2FkZURpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDE0NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUg
IkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJHbHlwaEJ1
ZmZlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSAiV2ViQ29yZVRl
eHRSZW5kZXJlci5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgot
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9p
ZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4
dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAotICAg
IHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi17Ci0gICAgYXV0byBjb250ZXh0
ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKTsKLSAg
ICBib29sIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBXZWJDb3JlU2hvdWxkVXNlRm9udFNtb290
aGluZygpOwotCi0gICAgc3dpdGNoIChzbW9vdGhpbmdNb2RlKSB7Ci0gICAgY2FzZSBGb250U21v
b3RoaW5nTW9kZTo6QW50aWFsaWFzZWQ6Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaG91
bGRBbnRpYWxpYXModHJ1ZSk7Ci0gICAgICAgIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBmYWxz
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxB
bnRpYWxpYXNlZDoKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh0
cnVlKTsKLSAgICAgICAgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nOgotICAgICAgICBn
cmFwaGljc0NvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKLSAgICAgICAgc2hvdWxk
VXNlRm9udFNtb290aGluZyA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRT
bW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nOgotICAgICAgICAvLyBGb3IgdGhlIEF1dG9TbW9v
dGggY2FzZSwgZG9uJ3QgZG8gYW55dGhpbmchIEtlZXAgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCi0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIH0KLQotICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZv
bnQucGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBncmFwaGljc0NvbnRleHQuc2F2ZSgpOwotCi0gICAg
RDJEMV9NQVRSSVhfM1gyX0YgbWF0cml4OwotICAgIGNvbnRleHQtPkdldFRyYW5zZm9ybSgmbWF0
cml4KTsKLQotICAgIGlmIChwbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpKSB7Ci0gICAg
ICAgIHN0YXRpYyBmbG9hdCBza2V3ID0gLXRhbmYoc3ludGhldGljT2JsaXF1ZUFuZ2xlKCkgKiBw
aUZsb2F0IC8gMTgwLjBmKTsKLSAgICAgICAgYXV0byBza2V3TWF0cml4ID0gRDJEMTo6TWF0cml4
M3gyRjo6U2tldyhza2V3LCAwKTsKLSAgICAgICAgY29udGV4dC0+U2V0VHJhbnNmb3JtKG1hdHJp
eCAqIHNrZXdNYXRyaXgpOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUKHBsYXRmb3JtRGF0
YS5kd0ZvbnQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocGxhdGZvcm1EYXRhLmR3Rm9udEZhY2Uo
KSk7Ci0KLSAgICBWZWN0b3I8RkxPQVQ+IGhvcml6b250YWxBZHZhbmNlcyhudW1HbHlwaHMpOwot
ICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiBvZmZzZXRBZHZhbmNlcyhudW1HbHlwaHMp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAg
ICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZmZXIuYWR2YW5jZXNDb3VudCgpKQotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgYXV0byBhZHZhbmNlID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMo
aSArIGZyb20pOwotICAgICAgICBpZiAoIWFkdmFuY2UpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBob3Jpem9udGFsQWR2YW5jZXNbaV0gPSBhZHZhbmNlLT53aWR0aCgpOwotICAg
ICAgICBvZmZzZXRBZHZhbmNlc1tpXS5hZHZhbmNlT2Zmc2V0ID0gYWR2YW5jZS0+d2lkdGgoKTsK
LSAgICAgICAgb2Zmc2V0QWR2YW5jZXNbaV0uYXNjZW5kZXJPZmZzZXQgPSBhZHZhbmNlLT5oZWln
aHQoKTsKLSAgICB9Ci0KLSAgICBEV1JJVEVfR0xZUEhfUlVOIGdseXBoUnVuOwotICAgIGdseXBo
UnVuLmZvbnRGYWNlID0gcGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKTsKLSAgICBnbHlwaFJ1bi5m
b250RW1TaXplID0gcGxhdGZvcm1EYXRhLnNpemUoKTsKLSAgICBnbHlwaFJ1bi5nbHlwaENvdW50
ID0gbnVtR2x5cGhzOwotICAgIGdseXBoUnVuLmdseXBoSW5kaWNlcyA9IGdseXBoQnVmZmVyLmds
eXBocyhmcm9tKTsKLSAgICBnbHlwaFJ1bi5nbHlwaEFkdmFuY2VzID0gaG9yaXpvbnRhbEFkdmFu
Y2VzLmRhdGEoKTsKLSAgICBnbHlwaFJ1bi5nbHlwaE9mZnNldHMgPSBudWxscHRyOwotICAgIGds
eXBoUnVuLmlzU2lkZXdheXMgPSBwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3Jp
ZW50YXRpb246OlZlcnRpY2FsOwotICAgIGdseXBoUnVuLmJpZGlMZXZlbCA9IDA7Ci0KLSAgICBG
bG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRvd0JsdXI7Ci0gICAgQ29sb3Ig
c2hhZG93Q29sb3I7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQs
IHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKLQotICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0g
Z3JhcGhpY3NDb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6Rmls
bCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIgJiYgKCFncmFwaGljc0Nv
bnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBncmFwaGljc0NvbnRleHQuZ2V0Q1RN
KCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7Ci0gICAgaWYgKGhhc1NpbXBs
ZVNoYWRvdykgewotICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5z
dGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBh
bnRpYWxpYXNpbmcuCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclNoYWRvdygpOwotICAg
ICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQuZmlsbENvbG9yKCk7Ci0gICAg
ICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFscGhhTXVs
dGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7Ci0gICAgICAgIGZsb2F0IHNoYWRv
d1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7Ci0gICAgICAgIC8vIElm
IHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4ndCBhcHBsaWVk
IHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUuCi0gICAgICAg
IGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpICog
KGdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKLQot
ICAgICAgICBhdXRvIHNoYWRvd0JydXNoID0gZ3JhcGhpY3NDb250ZXh0LmJydXNoV2l0aENvbG9y
KHNoYWRvd0ZpbGxDb2xvcik7Ci0gICAgICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQxOjpQ
b2ludDJGKHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksICZnbHlwaFJ1biwgc2hhZG93QnJ1c2gp
OwotICAgICAgICBpZiAoZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCkpCi0gICAgICAgICAgICBj
b250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihzaGFkb3dUZXh0WCArIGZvbnQuc3lu
dGhldGljQm9sZE9mZnNldCgpLCBzaGFkb3dUZXh0WSksICZnbHlwaFJ1biwgc2hhZG93QnJ1c2gp
OwotICAgIH0KLQotICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQxOjpQb2ludDJGKHBvaW50
LngoKSwgcG9pbnQueSgpKSwgJmdseXBoUnVuLCBncmFwaGljc0NvbnRleHQuc29saWRGaWxsQnJ1
c2goKSk7Ci0gICAgaWYgKGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpKQotICAgICAgICBjb250
ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihwb2ludC54KCkgKyBmb250LnN5bnRoZXRp
Y0JvbGRPZmZzZXQoKSwgcG9pbnQueSgpKSwgJmdseXBoUnVuLCBncmFwaGljc0NvbnRleHQuc29s
aWRGaWxsQnJ1c2goKSk7Ci0KLSAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQotICAgICAgICBncmFw
aGljc0NvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29s
b3IpOwotCi0gICAgZ3JhcGhpY3NDb250ZXh0LnJlc3RvcmUoKTsKLX0KLQotfQotCi0jZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDYgQEAKICNpbmNsdWRlIDxwYWwv
c3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0j
aW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIEZvbnRQbGF0Zm9ybURh
dGE6OkNyZWF0aW9uRGF0YSYmIGNyZWF0aW9uRGF0YSkKQEAgLTczLDcgKzY4LDcgQEAgRm9udFBs
YXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOgogICAgIGxvZ0ZvbnQubGZVbmRlcmxp
bmUgPSBmYWxzZTsKICAgICBsb2dGb250LmxmU3RyaWtlT3V0ID0gZmFsc2U7CiAgICAgbG9nRm9u
dC5sZkNoYXJTZXQgPSBERUZBVUxUX0NIQVJTRVQ7Ci0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8p
IHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKICAgICBsb2dGb250
LmxmT3V0UHJlY2lzaW9uID0gT1VUX1RUX09OTFlfUFJFQ0lTOwogI2Vsc2UKICAgICBsb2dGb250
LmxmT3V0UHJlY2lzaW9uID0gT1VUX1RUX1BSRUNJUzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhRGlyZWN0MkQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YURpcmVjdDJELmNwcAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDEyMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250UGxh
dGZvcm1EYXRhLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJlY3RXcml0
ZVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhX
bmREQy5oIgotI2luY2x1ZGUgIlNoYXJlZEdESU9iamVjdC5oIgotI2luY2x1ZGUgPGQyZDEuaD4K
LSNpbmNsdWRlIDxkd3JpdGVfMy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi12b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQo
SEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgSERDIGhkYywgV0NIQVIqIGZhY2VOYW1lKQotewotICAg
IExPR0ZPTlQgbG9nZm9udDsKLSAgICBIUkVTVUxUIGhyID0gOjpHZXRPYmplY3QoZm9udCwgc2l6
ZW9mKExPR0ZPTlQpLCAmbG9nZm9udCk7Ci0gICAgaWYgKFNVQ0NFRURFRChocikpCi0gICAgICAg
IG1fZHdGb250ID0gRGlyZWN0V3JpdGU6OmNyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQobG9nZm9udCk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9kd0ZvbnQpOwotCi0gICAgaHIgPSBtX2R3Rm9udC0+Q3Jl
YXRlRm9udEZhY2UoJm1fZHdGb250RmFjZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7Ci0KLSAgICBpZiAoIW1fdXNlR0RJKQotICAgICAgICBtX2lzU3lzdGVtRm9udCA9ICF3
Y3NjbXAoZmFjZU5hbWUsIEwiTHVjaWRhIEdyYW5kZSIpOwotfQotCi1Gb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4mJiBoZm9udCwgQ09NUHRyPElEV3Jp
dGVGb250PiYmIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBib29s
IHVzZUdESSkKLSAgICA6IG1fc3ludGhldGljQm9sZChib2xkKQotICAgICwgbV9zeW50aGV0aWNP
YmxpcXVlKG9ibGlxdWUpCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fZm9udChTaGFyZWRH
RElPYmplY3Q8SEZPTlQ+OjpjcmVhdGUoV1RGTW92ZShoZm9udCkpKQotICAgICwgbV9kd0ZvbnQo
V1RGTW92ZShmb250KSkKLSAgICAsIG1fdXNlR0RJKHVzZUdESSkKLXsKLSAgICBIUkVTVUxUIGhy
ID0gbV9kd0ZvbnQtPkNyZWF0ZUZvbnRGYWNlKCZtX2R3Rm9udEZhY2UpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKFNVQ0NFRURFRChocikpOwotfQotCi1zdGF0aWMgYm9vbCBmb250c0FyZUVxdWFsKElE
V3JpdGVGb250KiBhLCBJRFdyaXRlRm9udCogYikKLXsKLSAgICBpZiAoIWEgJiYgIWIpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGEgPT0gYikKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAoKCFhICYmIGIpIHx8IChhICYmICFiKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKGEtPkdldFdlaWdodCgpICE9IGItPkdldFdlaWdodCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYS0+R2V0U3R5bGUoKSAhPSBiLT5HZXRTdHlsZSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYS0+R2V0U3RyZXRjaCgpICE9IGItPkdl
dFN0cmV0Y2goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRFdSSVRFX0ZPTlRfTUVU
UklDUyBhTWV0cmljcywgYk1ldHJpY3M7Ci0gICAgYS0+R2V0TWV0cmljcygmYU1ldHJpY3MpOwot
ICAgIGItPkdldE1ldHJpY3MoJmJNZXRyaWNzKTsKLQotICAgIGlmICgoYU1ldHJpY3MuZGVzaWdu
VW5pdHNQZXJFbSAhPSBiTWV0cmljcy5kZXNpZ25Vbml0c1BlckVtKQotICAgICAgICB8fCAoYU1l
dHJpY3MuYXNjZW50ICE9IGJNZXRyaWNzLmFzY2VudCkKLSAgICAgICAgfHwgKGFNZXRyaWNzLmRl
c2NlbnQgIT0gYk1ldHJpY3MuYXNjZW50KQotICAgICAgICB8fCAoYU1ldHJpY3MubGluZUdhcCAh
PSBiTWV0cmljcy5saW5lR2FwKQotICAgICAgICB8fCAoYU1ldHJpY3MuY2FwSGVpZ2h0ICE9IGJN
ZXRyaWNzLmNhcEhlaWdodCkKLSAgICAgICAgfHwgKGFNZXRyaWNzLnhIZWlnaHQgIT0gYk1ldHJp
Y3MueEhlaWdodCkKLSAgICAgICAgfHwgKGFNZXRyaWNzLnVuZGVybGluZVBvc2l0aW9uICE9IGJN
ZXRyaWNzLnVuZGVybGluZVBvc2l0aW9uKQotICAgICAgICB8fCAoYU1ldHJpY3MudW5kZXJsaW5l
VGhpY2tuZXNzICE9IGJNZXRyaWNzLnVuZGVybGluZVRoaWNrbmVzcykKLSAgICAgICAgfHwgKGFN
ZXRyaWNzLnN0cmlrZXRocm91Z2hQb3NpdGlvbiAhPSBiTWV0cmljcy5zdHJpa2V0aHJvdWdoUG9z
aXRpb24pCi0gICAgICAgIHx8IChhTWV0cmljcy5zdHJpa2V0aHJvdWdoVGhpY2tuZXNzICE9IGJN
ZXRyaWNzLnN0cmlrZXRocm91Z2hUaGlja25lc3MpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdW5zaWduZWQgRm9udFBsYXRmb3JtRGF0YTo6aGFzaCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZm9udCA/IG1fZm9udC0+aGFzaCgpIDogMDsKLX0KLQot
Ym9vbCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybUlzRXF1YWwoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZm9udCA9PSBvdGhlci5tX2ZvbnQK
LSAgICAgICAgJiYgbV91c2VHREkgPT0gb3RoZXIubV91c2VHREkKLSAgICAgICAgJiYgZm9udHNB
cmVFcXVhbChtX2R3Rm9udC5nZXQoKSwgb3RoZXIubV9kd0ZvbnQuZ2V0KCkpOwotfQotCi19Ci0K
LSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBo
UGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcAkocmV2aXNp
b24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBo
UGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTA3ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkK
LQotI2luY2x1ZGUgIkRpcmVjdFdyaXRlVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiRm9udC5oIgot
I2luY2x1ZGUgIlRleHRBbmFseXplckhlbHBlci5oIgotI2luY2x1ZGUgPGR3cml0ZV8zLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZl
ciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKQotewotICAgIGlmIChidWZmZXJMZW5ndGggPiBHbHlw
aFBhZ2U6OnNpemUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IEZvbnQmIGZv
bnQgPSB0aGlzLT5mb250KCk7Ci0gICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7Ci0KLSAgICBD
T01QdHI8SURXcml0ZVRleHRBbmFseXplcj4gYW5hbHl6ZXI7Ci0gICAgSFJFU1VMVCBociA9IERp
cmVjdFdyaXRlOjpmYWN0b3J5KCktPkNyZWF0ZVRleHRBbmFseXplcigmYW5hbHl6ZXIpOwotICAg
IFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgYXV0byYgZm9udFBsYXRmb3Jt
RGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBVQ2hhciBsb2NhbGVOYW1lW0xPQ0FM
RV9OQU1FX01BWF9MRU5HVEggKyAxXSA9IHsgfTsKLSAgICBpbnQgbG9jYWxlTGVuZ3RoID0gR2V0
VXNlckRlZmF1bHRMb2NhbGVOYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmbG9jYWxlTmFt
ZSksIExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGxvY2FsZUxl
bmd0aCA8PSBMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKLQotICAgIFRleHRBbmFseXplckhlbHBl
ciBoZWxwZXIocmVpbnRlcnByZXRfY2FzdDxMUFdTVFI+KCZsb2NhbGVOYW1lKSwgcmVpbnRlcnBy
ZXRfY2FzdDxMUFdTVFI+KGJ1ZmZlciksIGJ1ZmZlckxlbmd0aCk7Ci0KLSAgICBociA9IGFuYWx5
emVyLT5BbmFseXplU2NyaXB0KCZoZWxwZXIsIDAsIGJ1ZmZlckxlbmd0aCwgJmhlbHBlcik7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBWZWN0b3I8R2x5cGg+IGds
eXBocyhHbHlwaFBhZ2U6OnNpemUsIDApOwotICAgIFZlY3RvcjxHbHlwaD4gY2x1c3Rlck1hcChH
bHlwaFBhZ2U6OnNpemUsIDApOwotICAgIFZlY3RvcjxEV1JJVEVfU0hBUElOR19URVhUX1BST1BF
UlRJRVM+IHRleHRQcm9wZXJ0aWVzKEdseXBoUGFnZTo6c2l6ZSk7Ci0gICAgVmVjdG9yPERXUklU
RV9TSEFQSU5HX0dMWVBIX1BST1BFUlRJRVM+IGdseXBoUHJvcGVydGllcyhHbHlwaFBhZ2U6OnNp
emUpOwotCi0gICAgY29uc3QgV0NIQVIqIHRleHRTdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TFBD
V1NUUj4oYnVmZmVyKTsKLSAgICBHbHlwaCogZ2x5cGhEYXRhID0gZ2x5cGhzLmRhdGEoKTsKLSAg
ICBHbHlwaCogY2x1c3Rlck1hcERhdGEgPSBjbHVzdGVyTWFwLmRhdGEoKTsKLSAgICBEV1JJVEVf
U0hBUElOR19URVhUX1BST1BFUlRJRVMqIHRleHRQcm9wZXJ0aWVzRGF0YSA9IHRleHRQcm9wZXJ0
aWVzLmRhdGEoKTsKLSAgICBEV1JJVEVfU0hBUElOR19HTFlQSF9QUk9QRVJUSUVTKiBnbHlwaFBy
b3BlcnRpZXNEYXRhID0gZ2x5cGhQcm9wZXJ0aWVzLmRhdGEoKTsKLQotICAgIHVuc2lnbmVkIHRv
dGFsID0gMDsKLSAgICB1bnNpZ25lZCBtYXhHbHlwaENvdW50ID0gR2x5cGhQYWdlOjpzaXplOwot
ICAgIGZvciAoY29uc3QgYXV0byYgcnVuIDogaGVscGVyLm1fYW5hbHl6ZWRSdW5zKSB7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHRvdGFsICsgcnVuLmxlbmd0aCA8PSBidWZmZXJMZW5ndGgpOwot
Ci0gICAgICAgIHVuc2lnbmVkIHJldHVybmVkQ291bnQgPSAwOwotICAgICAgICBociA9IGFuYWx5
emVyLT5HZXRHbHlwaHModGV4dFN0YXJ0ICsgcnVuLnN0YXJ0UG9zaXRpb24sIHJ1bi5sZW5ndGgs
IGZvbnRQbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpLCBmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0
aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCwgZmFsc2UsCi0gICAgICAgICAgICAm
cnVuLmFuYWx5c2lzLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCAwLCBtYXhH
bHlwaENvdW50LCBjbHVzdGVyTWFwRGF0YSwgdGV4dFByb3BlcnRpZXNEYXRhLAotICAgICAgICAg
ICAgZ2x5cGhEYXRhLCBnbHlwaFByb3BlcnRpZXNEYXRhLCAmcmV0dXJuZWRDb3VudCk7Ci0KLSAg
ICAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIGdseXBoRGF0YSArPSByZXR1cm5lZENvdW50OwotICAgICAgICBjbHVzdGVyTWFwRGF0
YSArPSByZXR1cm5lZENvdW50OwotICAgICAgICB0ZXh0UHJvcGVydGllc0RhdGEgKz0gcmV0dXJu
ZWRDb3VudDsKLSAgICAgICAgZ2x5cGhQcm9wZXJ0aWVzRGF0YSArPSByZXR1cm5lZENvdW50Owot
ICAgICAgICBtYXhHbHlwaENvdW50IC09IHJldHVybmVkQ291bnQ7Ci0gICAgfQotCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgKytpKSB7Ci0gICAgICAgIEds
eXBoIGdseXBoID0gZ2x5cGhzW2ldOwotICAgICAgICBpZiAoIWdseXBoKQotICAgICAgICAgICAg
c2V0R2x5cGhGb3JJbmRleChpLCAwKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzZXRH
bHlwaEZvckluZGV4KGksIGdseXBoKTsKLSAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGhhdmVHbHlwaHM7Ci19Ci0KLX0KLQotI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnRE
aXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKG5vbmV4
aXN0ZW50KQpAQCAtMSwyMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3Jh
ZGllbnQuaCIKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUg
PGQyZDEuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0jZGVmaW5lIEdSQURJRU5U
X0RSQVdJTkcgMwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgR3JhZGllbnQ6OnN0b3Bz
Q2hhbmdlZCgpCi17Ci0gICAgbV9icnVzaCA9IG51bGxwdHI7Ci19Ci0KLXN0YXRpYyBib29sIGNp
cmNsZUlzRW50aXJlbHlDb250YWluZWQoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyQSwgZmxvYXQg
cmFkaXVzQSwgY29uc3QgRmxvYXRQb2ludCYgY2VudGVyQiwgZmxvYXQgcmFkaXVzQikKLXsKLSAg
ICBkb3VibGUgZGVsdGFYID0gY2VudGVyQi54KCkgLSBjZW50ZXJBLngoKTsKLSAgICBkb3VibGUg
ZGVsdGFZID0gY2VudGVyQi55KCkgLSBjZW50ZXJBLnkoKTsKLSAgICBkb3VibGUgZGVsdGFSYWRp
dXMgPSByYWRpdXNCIC0gcmFkaXVzQTsKLQotICAgIHJldHVybiBkZWx0YVggKiBkZWx0YVggKyBk
ZWx0YVkgKiBkZWx0YVkgPCBkZWx0YVJhZGl1cyAqIGRlbHRhUmFkaXVzICYmIHJhZGl1c0EgPCBy
YWRpdXNCOwotfQotCi1JRDJEMUJydXNoKiBHcmFkaWVudDo6Y3JlYXRlQnJ1c2goSUQyRDFSZW5k
ZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsKLSAgICBzb3J0U3RvcHMoKTsKLQotICAgIFZlY3Rv
cjxEMkQxX0dSQURJRU5UX1NUT1A+IGdyYWRpZW50U3RvcHM7Ci0gICAgZ3JhZGllbnRTdG9wcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fc3RvcHMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHN0
b3AgOiBtX3N0b3BzKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igbm9uLXNS
R0JBIGNvbG9yIHNwYWNlcy4KLSAgICAgICAgYXV0byBbciwgZywgYiwgYV0gc3RvcC5jb2xvci50
b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwotICAgICAgICBncmFk
aWVudFN0b3BzLmdyYWRpZW50U3RvcHMudW5jaGVja2VkQXBwZW5kKEQyRDE6OkdyYWRpZW50U3Rv
cChzdG9wLm9mZnNldCwgRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEpKSk7Ci0gICAgfQotCi0gICAg
V1RGOjpzd2l0Y2hPbihtX2RhdGEsCi0gICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYpIHsK
LSAgICAgICAgICAgIC8vIE5vIGFjdGlvbiBuZWVkZWQuCi0gICAgICAgIH0sCi0gICAgICAgIFsm
XSAoUmFkaWFsRGF0YSYgZGF0YSkgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YS5z
dGFydFJhZGl1cyA+PSAwKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRhdGEuZW5kUmFk
aXVzID49IDApOwotCi0gICAgICAgICAgICBpZiAoZGF0YS5zdGFydFJhZGl1cyA+IGRhdGEuZW5k
UmFkaXVzKSB7Ci0gICAgICAgICAgICAgICAgZ3JhZGllbnRTdG9wcy5yZXZlcnNlKCk7Ci0gICAg
ICAgICAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogZ3JhZGllbnRTdG9wcykKLSAgICAgICAgICAg
ICAgICAgICAgc3RvcC5wb3NpdGlvbiA9IDEuMCAtIHN0b3AucG9zaXRpb247Ci0KLSAgICAgICAg
ICAgICAgICBzdGQ6OnN3YXAoZGF0YS5zdGFydFJhZGl1cywgZGF0YS5lbmRSYWRpdXMpOwotICAg
ICAgICAgICAgICAgIHN0ZDo6c3dhcChkYXRhLnBvaW50MCwgZGF0YS5wb2ludDEpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZGF0YS5zdGFydFJhZGl1cykgewotICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGRhdGEuZW5kUmFkaXVzID4gMCk7Ci0gICAgICAgICAgICAg
ICAgZmxvYXQgc3RhcnRQb3NpdGlvbiA9IGRhdGEuc3RhcnRSYWRpdXMgLyBkYXRhLmVuZFJhZGl1
czsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGFydFBvc2l0aW9uIDw9IDEuMCk7
Ci0gICAgICAgICAgICAgICAgZmxvYXQgYXZhaWxhYmxlUmFuZ2UgPSAxLjAgLSBzdGFydFBvc2l0
aW9uOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGF2YWlsYWJsZVJhbmdlIDw9IDEu
MCAmJiBhdmFpbGFibGVSYW5nZSA+PSAwKTsKLQotICAgICAgICAgICAgICAgIGZvciAoYXV0byYg
c3RvcCA6IGdyYWRpZW50U3RvcHMpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RvcC5wb3NpdGlv
biAqPSBhdmFpbGFibGVSYW5nZTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcC5wb3NpdGlvbiAr
PSBzdGFydFBvc2l0aW9uOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8v
IFJlc3RvcmUgdGhlICdzdGFydCcgcG9zaXRpb24KLSAgICAgICAgICAgICAgICBhdXRvIGZpcnN0
U3RvcCA9IGdyYWRpZW50U3RvcHMuZmlyc3QoKTsKLSAgICAgICAgICAgICAgICBpZiAoIVdURjo6
YXJlRXNzZW50aWFsbHlFcXVhbChmaXJzdFN0b3AucG9zaXRpb24sIDAuMGYpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGZpcnN0U3RvcC5wb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICAgICAgICAg
IGdyYWRpZW50U3RvcHMuaW5zZXJ0KDAsIGZpcnN0U3RvcCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IENvbmljRGF0YSYp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBc3Nlc3Mgd2hldGhlciBuZWVkZWQgZm9yIENvbmlj
IEdyYWRpZW50cy4KLSAgICAgICAgfQotICAgICk7Ci0KLSAgICBDT01QdHI8SUQyRDFHcmFkaWVu
dFN0b3BDb2xsZWN0aW9uPiBncmFkaWVudFN0b3BDb2xsZWN0aW9uOwotICAgIEhSRVNVTFQgaHIg
PSByZW5kZXJUYXJnZXQtPkNyZWF0ZUdyYWRpZW50U3RvcENvbGxlY3Rpb24oZ3JhZGllbnRTdG9w
cy5kYXRhKCksIGdyYWRpZW50U3RvcHMuc2l6ZSgpLCAmZ3JhZGllbnRTdG9wQ29sbGVjdGlvbik7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBXVEY6OnN3aXRjaE9u
KG1fZGF0YSwKLSAgICAgICAgWyZdIChjb25zdCBMaW5lYXJEYXRhJiBkYXRhKSB7Ci0gICAgICAg
ICAgICBJRDJEMUxpbmVhckdyYWRpZW50QnJ1c2gqIGxpbmVhckdyYWRpZW50ID0gbnVsbHB0cjsK
LSAgICAgICAgICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVMaW5lYXJHcmFkaWVudEJydXNo
KAotICAgICAgICAgICAgICAgIEQyRDE6OkxpbmVhckdyYWRpZW50QnJ1c2hQcm9wZXJ0aWVzKGRh
dGEucG9pbnQwLCBkYXRhLnBvaW50MSksCi0gICAgICAgICAgICAgICAgRDJEMTo6QnJ1c2hQcm9w
ZXJ0aWVzKCksIGdyYWRpZW50U3RvcENvbGxlY3Rpb24uZ2V0KCksCi0gICAgICAgICAgICAgICAg
JmxpbmVhckdyYWRpZW50KTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotICAgICAgICAgICAgbV9icnVzaCA9IGFkb3B0Q09NKGxpbmVhckdyYWRpZW50KTsKLSAg
ICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSYWRpYWxEYXRhJiBkYXRhKSB7Ci0gICAgICAg
ICAgICBGbG9hdFNpemUgb2Zmc2V0OwotICAgICAgICAgICAgaWYgKCFjaXJjbGVJc0VudGlyZWx5
Q29udGFpbmVkKGRhdGEucG9pbnQwLCBkYXRhLnN0YXJ0UmFkaXVzLCBkYXRhLnBvaW50MSwgZGF0
YS5lbmRSYWRpdXMpKQotICAgICAgICAgICAgICAgIG9mZnNldCA9IChkYXRhLnBvaW50MS5zY2Fs
ZWQoZGF0YS5zdGFydFJhZGl1cykgLSBkYXRhLnBvaW50MC5zY2FsZWQoZGF0YS5lbmRSYWRpdXMp
KSAvIChkYXRhLmVuZFJhZGl1cyAtIGRhdGEuc3RhcnRSYWRpdXMpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIG9mZnNldCA9IGRhdGEucG9pbnQwIC0gZGF0YS5wb2ludDE7Ci0K
LSAgICAgICAgICAgIEZsb2F0UG9pbnQgY2VudGVyID0gZGF0YS5wb2ludDE7Ci0gICAgICAgICAg
ICBmbG9hdCByYWRpdXNYID0gZGF0YS5lbmRSYWRpdXM7Ci0gICAgICAgICAgICBmbG9hdCByYWRp
dXNZID0gcmFkaXVzWCAvIGRhdGEuYXNwZWN0UmF0aW87Ci0KLSAgICAgICAgICAgIElEMkQxUmFk
aWFsR3JhZGllbnRCcnVzaCogcmFkaWFsR3JhZGllbnQgPSBudWxscHRyOwotICAgICAgICAgICAg
aHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZVJhZGlhbEdyYWRpZW50QnJ1c2goCi0gICAgICAgICAg
ICAgICAgRDJEMTo6UmFkaWFsR3JhZGllbnRCcnVzaFByb3BlcnRpZXMoY2VudGVyLCBEMkQxOjpQ
b2ludDJGKG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkpLCByYWRpdXNYLCByYWRpdXNZ
KSwKLSAgICAgICAgICAgICAgICBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKSwgZ3JhZGllbnRTdG9w
Q29sbGVjdGlvbi5nZXQoKSwKLSAgICAgICAgICAgICAgICAmcmFkaWFsR3JhZGllbnQpOwotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgICAgICBtX2Jy
dXNoID0gYWRvcHRDT00ocmFkaWFsR3JhZGllbnQpOwotICAgICAgICB9LAotICAgICAgICBbJl0g
KGNvbnN0IENvbmljRGF0YSYpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgY29u
aWMgZ3JhZGllbnQgcmVuZGVyaW5nLgotICAgICAgICAgICAgbV9icnVzaCA9IG51bGxwdHI7Ci0g
ICAgICAgIH0KLSAgICApOwotCi0gICAgcmV0dXJuIG1fYnJ1c2guZ2V0KCk7Ci19Ci0KLXZvaWQg
R3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgYXV0byBkMmRDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQo
KS0+cmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKLSAgICAgICAg
WyZdIChjb25zdCBMaW5lYXJEYXRhJiBkYXRhKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSWYg
d2UgaGF2ZSBhIGJydXNoLCB3aHkgY2FuIHdlIHJlLXVzZSBpdD8gV2hhdCBndWFyYW50ZWVzIGl0
J3MgcmlnaHQgZm9yIHRoaXMgY29udGV4dD8KLSAgICAgICAgICAgIGlmICghbV9icnVzaCkKLSAg
ICAgICAgICAgICAgICBjcmVhdGVCcnVzaChkMmRDb250ZXh0KTsKLQotI2lmIEFTU0VSVF9FTkFC
TEVECi0gICAgICAgICAgICBkMmRDb250ZXh0LT5TZXRUYWdzKEdSQURJRU5UX0RSQVdJTkcsIF9f
TElORV9fKTsKLSNlbmRpZgotCi0gICAgICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0
ID0gcmVjdDsKLSAgICAgICAgICAgIGQyZENvbnRleHQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3Qs
IG1fYnJ1c2guZ2V0KCkpOwotICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJhZGlhbERh
dGEmIGRhdGEpIHsKLSAgICAgICAgICAgIGJvb2wgbmVlZFNjYWxpbmcgPSBkYXRhLmFzcGVjdFJh
dGlvICE9IDE7Ci0gICAgICAgICAgICBpZiAobmVlZFNjYWxpbmcpIHsKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LnNhdmUoKTsKLSAgICAgICAgICAgICAgICAvLyBTY2FsZSBmcm9tIHRoZSBjZW50
ZXIgb2YgdGhlIGdyYWRpZW50LiBXZSBvbmx5IGV2ZXIgc2NhbGUgbm9uLWRlcHJlY2F0ZWQgZ3Jh
ZGllbnRzLAotICAgICAgICAgICAgICAgIC8vIGZvciB3aGljaCBtX3AwID09IG1fcDEuCi0gICAg
ICAgICAgICAgICAgQVNTRVJUKGRhdGEucG9pbnQwID09IGRhdGEucG9pbnQxKTsKLQotICAgICAg
ICAgICAgICAgIEQyRDFfTUFUUklYXzNYMl9GIGN0bSA9IHsgfTsKLSAgICAgICAgICAgICAgICBk
MmRDb250ZXh0LT5HZXRUcmFuc2Zvcm0oJmN0bSk7Ci0KLSAgICAgICAgICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNmb3JtKGN0bSk7Ci0gICAgICAgICAgICAgICAgdHJhbnNmb3JtLnRyYW5z
bGF0ZShkYXRhLnBvaW50MCk7Ci0gICAgICAgICAgICAgICAgdHJhbnNmb3JtLnNjYWxlTm9uVW5p
Zm9ybSgxLjAsIDEuMCAvIGRhdGEuYXNwZWN0UmF0aW8pOwotICAgICAgICAgICAgICAgIHRyYW5z
Zm9ybS50cmFuc2xhdGUoLWRhdGEucG9pbnQwKTsKLQotICAgICAgICAgICAgICAgIGQyZENvbnRl
eHQtPlNldFRyYW5zZm9ybShjdG0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBG
SVhNRTogSWYgd2UgaGF2ZSBhIGJydXNoLCB3aHkgY2FuIHdlIHJlLXVzZSBpdD8gV2hhdCBndWFy
YW50ZWVzIGl0J3MgcmlnaHQgZm9yIHRoaXMgY29udGV4dD8KLSAgICAgICAgICAgIGlmICghbV9i
cnVzaCkKLSAgICAgICAgICAgICAgICBjcmVhdGVCcnVzaChkMmRDb250ZXh0KTsKLQotI2lmIEFT
U0VSVF9FTkFCTEVECi0gICAgICAgICAgICBkMmRDb250ZXh0LT5TZXRUYWdzKEdSQURJRU5UX0RS
QVdJTkcsIF9fTElORV9fKTsKLSNlbmRpZgotCi0gICAgICAgICAgICBjb25zdCBEMkQxX1JFQ1Rf
RiBkMmRSZWN0ID0gcmVjdDsKLSAgICAgICAgICAgIGQyZENvbnRleHQtPkZpbGxSZWN0YW5nbGUo
JmQyZFJlY3QsIG1fYnJ1c2guZ2V0KCkpOwotCi0gICAgICAgICAgICBpZiAobmVlZFNjYWxpbmcp
Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgICAgIH0sCi0gICAgICAg
IFsmXSAoY29uc3QgQ29uaWNEYXRhJikgewotICAgICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVu
dCBjb25pYyBncmFkaWVudCByZW5kZXJpbmcuCi0gICAgICAgIH0KLSAgICApOwotfQotCi19Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJl
Y3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw5MTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5j
bHVkZSAiRGlyZWN0MkRPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMu
aCIKLSNpbmNsdWRlICJEaXNwbGF5TGlzdFJlY29yZGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRSb3Vu
ZGVkUmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVj
dDJELmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXJE
aXJlY3QyRC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8ZDJk
MS5oPgotI2luY2x1ZGUgPGQyZDFlZmZlY3RzLmg+Ci0jaW5jbHVkZSA8ZHdyaXRlXzMuaD4KLSNp
bmNsdWRlIDx3dGYvVVJMLmg+Ci0KLSNwcmFnbWEgd2FybmluZyAoZGlzYWJsZSA6IDQ3NTYpCi0K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0NvbnRleHREaXJlY3QyRDo6R3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKLXsKLSAgICBwbGF0Zm9y
bUluaXQoaGRjLCBoYXNBbHBoYSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpHcmFw
aGljc0NvbnRleHREaXJlY3QyRChIREMgaGRjLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiogcmVuZGVy
VGFyZ2V0LCBSRUNUIHJlY3QsIGJvb2wgaGFzQWxwaGEpCi17Ci0gICAgLy8gQ3JlYXRlIGEgREMg
cmVuZGVyIHRhcmdldC4KLSAgICBhdXRvIHRhcmdldFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6cmVu
ZGVyVGFyZ2V0UHJvcGVydGllcygpOwotCi0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZURDUmVuZGVyVGFyZ2V0KCZ0YXJnZXRQ
cm9wZXJ0aWVzLCByZW5kZXJUYXJnZXQpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgKCpyZW5kZXJUYXJnZXQpLT5CaW5kREMoaGRjLCAmcmVjdCk7Ci0KLSAgICBh
dXRvIG93bmVkUGxhdGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRD4oKnJlbmRlclRhcmdldCk7Ci0gICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZShXVEZNb3ZlKG93bmVkUGxhdGZvcm1Db250ZXh0KSwgQml0bWFwUmVuZGVy
aW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7Ci0gICAgbV9kYXRhLT5tX2hkYyA9IGhkYzsKLX0K
LQotR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgQml0bWFwUmVuZGVy
aW5nQ29udGV4dFR5cGUgcmVuZGVyZXJUeXBlKQotewotICAgIHBsYXRmb3JtSW5pdChwbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCwgcmVuZGVyZXJUeXBlKTsKLX0KLQotSUQyRDFGYWN0b3J5KiBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6c3lzdGVtRmFjdG9yeSgpCi17Ci0gICAgc3RhdGljIElEMkQx
RmFjdG9yeSogZGlyZWN0MkRGYWN0b3J5ID0gbnVsbHB0cjsKLSAgICBpZiAoIWRpcmVjdDJERmFj
dG9yeSkgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgRDJEMV9GQUNUT1JZX09QVElPTlMgb3B0
aW9ucyA9IHsgfTsKLSAgICAgICAgb3B0aW9ucy5kZWJ1Z0xldmVsID0gRDJEMV9ERUJVR19MRVZF
TF9JTkZPUk1BVElPTjsKLSAgICAgICAgSFJFU1VMVCBociA9IEQyRDFDcmVhdGVGYWN0b3J5KEQy
RDFfRkFDVE9SWV9UWVBFX01VTFRJX1RIUkVBREVELCBvcHRpb25zLCAmZGlyZWN0MkRGYWN0b3J5
KTsKLSNlbHNlCi0gICAgICAgIEhSRVNVTFQgaHIgPSBEMkQxQ3JlYXRlRmFjdG9yeShEMkQxX0ZB
Q1RPUllfVFlQRV9NVUxUSV9USFJFQURFRCwgJmRpcmVjdDJERmFjdG9yeSk7Ci0jZW5kaWYKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGRpcmVjdDJERmFjdG9yeTsKLX0KLQotSUQyRDFSZW5kZXJUYXJnZXQqIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBzdGF0aWMgSUQyRDFSZW5k
ZXJUYXJnZXQqIGRlZmF1bHRSZW5kZXJUYXJnZXQgPSBudWxscHRyOwotICAgIGlmICghZGVmYXVs
dFJlbmRlclRhcmdldCkgewotICAgICAgICBhdXRvIHJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBE
MkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIHJlbmRlclRhcmdldFByb3Bl
cnRpZXMudXNhZ2UgPSBEMkQxX1JFTkRFUl9UQVJHRVRfVVNBR0VfR0RJX0NPTVBBVElCTEU7Ci0g
ICAgICAgIGF1dG8gaHduZFJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpId25kUmVuZGVy
VGFyZ2V0UHJvcGVydGllcyg6OkdldERlc2t0b3BXaW5kb3coKSwgRDJEMTo6U2l6ZVUoMTAsIDEw
KSk7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUh3bmRSZW5k
ZXJUYXJnZXQoJnJlbmRlclRhcmdldFByb3BlcnRpZXMsICZod25kUmVuZGVyVGFyZ2V0UHJvcGVy
dGllcywgcmVpbnRlcnByZXRfY2FzdDxJRDJEMUh3bmRSZW5kZXJUYXJnZXQqKj4oJmRlZmF1bHRS
ZW5kZXJUYXJnZXQpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0g
ICAgICAgIGRlZmF1bHRSZW5kZXJUYXJnZXQtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVy
biBkZWZhdWx0UmVuZGVyVGFyZ2V0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpwbGF0Zm9ybUluaXQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKLXsKLSAgICBpZiAoIWhkYykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgSEJJVE1BUCBiaXRtYXAgPSBzdGF0aWNfY2FzdDxIQklU
TUFQPihHZXRDdXJyZW50T2JqZWN0KGhkYywgT0JKX0JJVE1BUCkpOwotCi0gICAgRElCUGl4ZWxE
YXRhIHBpeGVsRGF0YShiaXRtYXApOwotCi0gICAgYXV0byB0YXJnZXRQcm9wZXJ0aWVzID0gRGly
ZWN0MkQ6OnJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKLQotICAgIENPTVB0cjxJRDJEMURDUmVu
ZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IHN5c3RlbUZhY3Rvcnko
KS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRhcmdldFByb3BlcnRpZXMsICZyZW5kZXJUYXJnZXQp
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUkVDVCBj
bGllbnRSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBwaXhlbERhdGEuc2l6ZSgpKTsKLSAgICBo
ciA9IHJlbmRlclRhcmdldC0+QmluZERDKGhkYywgJmNsaWVudFJlY3QpOwotICAgIGlmICghU1VD
Q0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBvd25lZFBsYXRmb3JtQ29u
dGV4dCA9IG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+KHJlbmRlclRhcmdldC5n
ZXQoKSk7Ci0gICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShX
VEZNb3ZlKG93bmVkUGxhdGZvcm1Db250ZXh0KSwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6
OkdQVU1lbW9yeSk7Ci0gICAgbV9kYXRhLT5tX2hkYyA9IGhkYzsKLQotICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgY29udGV4dCBzdGFydHMgaW4gc3luYyB3aXRoIG91ciBzdGF0ZS4KLSAgICBzZXRQbGF0
Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3IoKSk7Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihz
dHJva2VDb2xvcigpKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlj
a25lc3MoKSk7Ci0gICAgLy8gRklYTUU6IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9u
UXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29u
dGV4dCkKLXsKLSAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJp
bmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRl
eHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCi17Ci0gICAgaWYg
KCFwbGF0Zm9ybUNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YSA9IG5ldyBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKnBsYXRmb3JtQ29udGV4dCwgcmVuZGVyaW5n
VHlwZSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5bmMgd2l0
aCBvdXIgc3RhdGUuCi0gICAgc2V0UGxhdGZvcm1GaWxsQ29sb3IoZmlsbENvbG9yKCkpOwotICAg
IHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7Ci0gICAgc2V0UGxhdGZvcm1T
dHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKCkpOwotICAgIC8vIEZJWE1FOiBtX3N0YXRl
LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHko
Q0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCkpKTsKLX0K
LQotR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6On5HcmFwaGljc0NvbnRleHREaXJlY3QyRCgpCi17
Ci0gICAgZGVsZXRlIG1fZGF0YTsKLX0KLQotUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVy
biAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OnN5bmNDb250ZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1JRDJEMVJlbmRlclRhcmdldCogR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyZW5kZXJUYXJnZXQoKQotewotICAgIGlmICghbV9wbGF0
Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG1fcGxhdGZvcm1Db250ZXh0Lm1fdHJhbnNwYXJlbmN5TGF5ZXJTdGFjay5sYXN0KCku
cmVuZGVyVGFyZ2V0LmdldCgpOwotCi0gICAgcmV0dXJuIG1fcGxhdGZvcm1Db250ZXh0LnJlbmRl
clRhcmdldCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0
QWxwaGEoZmxvYXQgYWxwaGEpCi17Ci0gICAgQVNTRVJUKG1fcGxhdGZvcm1Db250ZXh0Lm1fdHJh
bnNwYXJlbmN5TGF5ZXJTdGFjay5pc0VtcHR5KCkpOwotICAgIG1fYWxwaGEgPSBhbHBoYTsKLX0K
LQotZmxvYXQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjdXJyZW50R2xvYmFsQWxw
aGEoKSBjb25zdAotewotICAgIGlmICghbV9wbGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lM
YXllclN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fcGxhdGZvcm1Db250ZXh0Lm1f
dHJhbnNwYXJlbmN5TGF5ZXJTdGFjay5sYXN0KCkub3BhY2l0eTsKLQotICAgIHJldHVybiBtX2Fs
cGhhOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzYXZlKCkKLXsKLSAgICBH
cmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKLSAgICBEaXJlY3QyRDo6c2F2ZSgqcGxhdGZvcm1Db250
ZXh0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyZXN0b3JlKCkKLXsK
LSAgICBpZiAoIXN0YWNrU2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0Nv
bnRleHQ6OnJlc3RvcmUoKTsKLSAgICBEaXJlY3QyRDo6cmVzdG9yZSgqcGxhdGZvcm1Db250ZXh0
KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3TmF0aXZlSW1hZ2Uo
TmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZSgqcGxhdGZvcm1Db250ZXh0
KCksIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgaW1hZ2VTaXplLCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3B0aW9ucywgc3RhdGUuYWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyZWxlYXNlV2luZG93
c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxw
aGFCbGVuZCkKLXsKLSAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSAhbV9kYXRhLT5tX2hkYyB8fCBp
c0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBpZiAoIWNyZWF0ZWRCaXRtYXApIHsKLSAgICAg
ICAgRGlyZWN0MkQ6OnJlc3RvcmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghaGRjIHx8IGRzdFJlY3QuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvIHNvdXJjZUJpdG1hcCA9IGFkb3B0R0RJT2JqZWN0KHN0YXRpY19j
YXN0PEhCSVRNQVA+KDo6R2V0Q3VycmVudE9iamVjdChoZGMsIE9CSl9CSVRNQVApKSk7Ci0KLSAg
ICBESUJQaXhlbERhdGEgcGl4ZWxEYXRhKHNvdXJjZUJpdG1hcC5nZXQoKSk7Ci0gICAgQVNTRVJU
KHBpeGVsRGF0YS5iaXRzUGVyUGl4ZWwoKSA9PSAzMik7Ci0KLSAgICBhdXRvIGJpdG1hcFByb3Bl
cnRpZXMgPSBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpOwotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICBhdXRvJiBwbGF0Zm9ybUNvbnRleHQgPSAqdGhpcy0+cGxh
dGZvcm1Db250ZXh0KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKLSAgICBI
UkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5DcmVhdGVCaXRtYXAo
cGl4ZWxEYXRhLnNpemUoKSwgcGl4ZWxEYXRhLmJ1ZmZlcigpLCBwaXhlbERhdGEuYnl0ZXNQZXJS
b3coKSwgJmJpdG1hcFByb3BlcnRpZXMsICZiaXRtYXApOwotICAgIEFTU0VSVChTVUNDRUVERUQo
aHIpKTsKLQotICAgIFBsYXRmb3JtQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwbGF0Zm9y
bUNvbnRleHQpOwotCi0gICAgLy8gTm90ZTogVGhlIGNvbnRlbnQgaW4gdGhlIEhEQyBpcyBpbnZl
cnRlZCBjb21wYXJlZCB0byBEaXJlY3QyRCwgc28gaXQgbmVlZHMgdG8gYmUgZmxpcHBlZC4KLSAg
ICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBE
MkQxX01BVFJJWF8zWDJfRiBjdXJyZW50VHJhbnNmb3JtOwotICAgIGNvbnRleHQtPkdldFRyYW5z
Zm9ybSgmY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
KGN1cnJlbnRUcmFuc2Zvcm0pOwotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoZHN0UmVjdC5sb2Nh
dGlvbigpKTsKLSAgICB0cmFuc2Zvcm0uc2NhbGUoMS4wLCAtMS4wKTsKLSAgICB0cmFuc2Zvcm0u
dHJhbnNsYXRlKDAsIC1kc3RSZWN0LmhlaWdodCgpKTsKLQotICAgIGNvbnRleHQtPlNldFRyYW5z
Zm9ybSh0cmFuc2Zvcm0pOwotICAgIGNvbnRleHQtPkRyYXdCaXRtYXAoYml0bWFwLmdldCgpLCBE
MkQxOjpSZWN0RigwLCAwLCBkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkpKTsKLQot
ICAgIDo6RGVsZXRlREMoaGRjKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKLXsKLSAgICBEaXJl
Y3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwg
c3R5bGUpOwotfQotCi1HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250
ZXh0LCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUg
cmVuZGVyaW5nVHlwZSkKLSAgICA6IG1fcGxhdGZvcm1Db250ZXh0KHBsYXRmb3JtQ29udGV4dCkK
LSAgICAsIG1fcmVuZGVyZXJUeXBlKHJlbmRlcmluZ1R5cGUpCi17Ci0gICAgaWYgKCFtX3BsYXRm
b3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
cmVuZGVyZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpCaXRtYXBSZW5kZXJpbmdD
b250ZXh0VHlwZTo6R1BVTWVtb3J5KQotICAgICAgICBiZWdpbkRyYXcoKTsKLX0KLQotR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUo
c3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiYmIG93bmVkUGxhdGZvcm1D
b250ZXh0LCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5
cGUgcmVuZGVyaW5nVHlwZSkKLSAgICA6IG1fb3duZWRQbGF0Zm9ybUNvbnRleHQoV1RGTW92ZShv
d25lZFBsYXRmb3JtQ29udGV4dCkpCi0gICAgLCBtX3BsYXRmb3JtQ29udGV4dCgqbV9vd25lZFBs
YXRmb3JtQ29udGV4dCkKLSAgICAsIG1fcmVuZGVyZXJUeXBlKHJlbmRlcmluZ1R5cGUpCi17Ci0g
ICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fcmVuZGVyZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpC
aXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQotICAgICAgICBiZWdpbkRyYXco
KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKCkKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRh
cmdldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wbGF0Zm9ybUNvbnRleHQuYmVn
aW5EcmF3Q291bnQpCi0gICAgICAgIGVuZERyYXcoKTsKLX0KLQotSUQyRDFTb2xpZENvbG9yQnJ1
c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpicnVzaFdpdGhDb2xvcihjb25zdCBDb2xvciYg
Y29sb3IpCi17Ci0gICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5icnVzaFdpdGhDb2xvcihj
b2xvcldpdGhHbG9iYWxBbHBoYShjb2xvcikpLmdldCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGlwKGNvbnN0IFBhdGgmIHBh
dGgpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGlwKElE
MkQxR2VvbWV0cnkqIHBhdGgpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhZmZpbmVUcmFuc2Zvcm0p
Ci17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpmbHVzaCgpCi17
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpbkRyYXcoKQot
ewotICAgIG1fcGxhdGZvcm1Db250ZXh0LmJlZ2luRHJhdygpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kRHJhdygpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRl
eHQuZW5kRHJhdygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
cmVzdG9yZSgpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpz
YXZlKCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsK
LSAgICBBU1NFUlQobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIG1fcGxh
dGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5TZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnRyYW5zbGF0ZShmbG9hdCB4
LCBmbG9hdCB5KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
cm90YXRlKGZsb2F0IGFuZ2xlKQotewotfQotCi1EMkQxX0NPTE9SX0YgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QK
LXsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8
ZmxvYXQ+PigpLnJlc29sdmVkKCk7Ci0gICAgcmV0dXJuIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBh
ICogbV9kYXRhLT5jdXJyZW50R2xvYmFsQWxwaGEoKSk7Ci19Ci0KLUlEMkQxQnJ1c2gqIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpzb2xpZFN0cm9rZUJydXNoKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRTdHJva2VCcnVzaC5nZXQoKTsKLX0KLQotSUQy
RDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNvbGlkRmlsbEJydXNoKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRGaWxsQnJ1c2guZ2V0KCk7
Ci19Ci0KLUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwYXR0ZXJuU3Ryb2tl
QnJ1c2goKSBjb25zdAotewotICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJu
U3Ryb2tlQnJ1c2guZ2V0KCk7Ci19Ci0KLUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpwYXR0ZXJuRmlsbEJydXNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGxhdGZvcm1Db250
ZXh0KCktPm1fcGF0dGVybkZpbGxCcnVzaC5nZXQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6YmVnaW5EcmF3KCkKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+YmVnaW5E
cmF3KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmVuZERyYXcoKQotewot
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5lbmREcmF3KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmZsdXNoKCkKLXsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwotICAgIERpcmVjdDJEOjpmbHVzaCgqcGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3UGF0dGVybihjb25zdCBQbGF0Zm9ybUltYWdlUHRy
JiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
aWYgKCFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgYXV0byB0aWxlSW1hZ2UgPSBpbWFnZTsKLSAgICBEaXJlY3QyRDo6ZHJhd1BhdHRlcm4oKnBs
YXRmb3JtQ29udGV4dCgpLCBXVEZNb3ZlKHRpbGVJbWFnZSksIEludFNpemUoaW1hZ2Uuc2l6ZSgp
KSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucy5j
b21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKLX0KLQotLy8gRHJhd3Mg
YSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzKQotewotICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkpOwotICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJhd1JlY3QoKnBsYXRmb3Jt
Q29udGV4dCgpLCByZWN0LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUu
c3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6OnNldExpbmVDYXAoTGluZUNhcCkKLXsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldExpbmVKb2luKExpbmVKb2luKQotewotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0U3Ryb2tlU3R5bGUoU3Ry
b2tlU3R5bGUpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpz
ZXRNaXRlckxpbWl0KGZsb2F0IGNhbnZhc01pdGVyTGltaXQpCi17Ci0gICAgbV9wbGF0Zm9ybUNv
bnRleHQuc2V0RGFzaE9mZnNldChjYW52YXNNaXRlckxpbWl0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldERhc2hPZmZzZXQoZmxvYXQgZGFzaE9mZnNldCkK
LXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXREYXNoT2Zmc2V0KGRhc2hPZmZzZXQpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0UGF0dGVybldpZHRoKGZs
b2F0IHBhdHRlcm5XaWR0aCkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRQYXR0ZXJuV2lk
dGgocGF0dGVybldpZHRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU6OnNldFBhdHRlcm5PZmZzZXQoZmxvYXQgcGF0dGVybk9mZnNldCkKLXsKLSAgICBtX3BsYXRm
b3JtQ29udGV4dC5zZXRQYXR0ZXJuT2Zmc2V0KHBhdHRlcm5PZmZzZXQpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRo
aWNrbmVzcykKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRTdHJva2VUaGlja25lc3ModGhp
Y2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldERh
c2hlcyhjb25zdCBEYXNoQXJyYXkmIGRhc2hlcykKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5z
ZXREYXNoZXMoZGFzaGVzKTsKLX0KLQotRDJEMV9TVFJPS0VfU1RZTEVfUFJPUEVSVElFUyBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnN0cm9rZVN0eWxlUHJvcGVydGllcygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIEQyRDE6OlN0cm9rZVN0eWxlUHJvcGVydGllcyhtX3BsYXRmb3JtQ29u
dGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNv
bnRleHQubV9saW5lQ2FwLCBtX3BsYXRmb3JtQ29udGV4dC5tX2xpbmVKb2luLCBtX3BsYXRmb3Jt
Q29udGV4dC5tX21pdGVyTGltaXQsIEQyRDFfREFTSF9TVFlMRV9TT0xJRCwgMC4wZik7Ci19Ci0K
LUlEMkQxU3Ryb2tlU3R5bGUqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VTdHlsZSgp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICByZXR1cm4g
cGxhdGZvcm1Db250ZXh0KCktPnN0cm9rZVN0eWxlKCk7Ci19Ci0KLS8vIFRoaXMgaXMgb25seSB1
c2VkIHRvIGRyYXcgYm9yZGVycy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQot
ewotICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQotICAgICAgICByZXR1cm47Ci0g
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpkcmF3TGluZSgq
cGxhdGZvcm1Db250ZXh0KCksIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3Rh
dGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFs
aWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0VsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsK
LSAgICBEaXJlY3QyRDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBzdGF0
ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBw
bHlTdHJva2VQYXR0ZXJuKCkKLXsKLSAgICBpZiAoIW1fc3RhdGUuc3Ryb2tlUGF0dGVybikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7Ci0g
ICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBUaGlzIGlzbid0IHJl
YWxseSBuZWVkZWQgb24gV2luZG93cwotCi0gICAgY29uc3QgZmxvYXQgcGF0dGVybkFscGhhID0g
MTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuU3Ryb2tlQnJ1c2ggPSBhZG9wdENP
TShtX3N0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybigqdGhpcywgcGF0
dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RNKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OmFwcGx5RmlsbFBhdHRlcm4oKQotewotICAgIGlmICghbV9zdGF0ZS5maWxsUGF0dGVy
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBUaGlzIGlz
bid0IHJlYWxseSBuZWVkZWQgb24gV2luZG93cwotCi0gICAgY29uc3QgZmxvYXQgcGF0dGVybkFs
cGhhID0gMTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuRmlsbEJydXNoID0gYWRv
cHRDT00obV9zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKCp0aGlzLCBw
YXR0ZXJuQWxwaGEsIHVzZXJUb0Jhc2VDVE0pKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBpZiAocGF0aC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKLSAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwotICAgIERpcmVjdDJE
OjpkcmF3UGF0aChjb250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCAq
dGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGlmIChw
YXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgc3RhdGUgPSB0aGlz
LT5zdGF0ZSgpOwotICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAg
RGlyZWN0MkQ6OmZpbGxQYXRoKGNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0
YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0g
ICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQo
KTsKLSAgICBEaXJlY3QyRDo6c3Ryb2tlUGF0aChjb250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6U3Ry
b2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCi17Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGF1dG8m
IGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KGNv
bnRleHQsIHJlY3QsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJE
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsK
LSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXV0byYgY29udGV4dCA9ICpw
bGF0Zm9ybUNvbnRleHQoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3QoY29udGV4dCwgcmVjdCwg
Y29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50
JiBncmFkaWVudCkKLXsKLSAgICBhdXRvIGJydXNoID0gZ3JhZGllbnQuY3JlYXRlQnJ1c2gobV9w
bGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIGlmICghYnJ1c2gpCi0gICAgICAg
IHJldHVybjsKLQotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhHcmFkaWVudChtX3BsYXRmb3Jt
Q29udGV4dCwgcmVjdCwgYnJ1c2guZ2V0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
ciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAg
IENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVy
YXRvcjsKLQotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxh
dGZvcm1Db250ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLSAgICBEaXJlY3Qy
RDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hh
ZG93U3RhdGUoc3RhdGUpKTsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3Jt
YWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3RJ
bXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsK
LSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSb3Vu
ZGVkUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBhdXRv
JiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNv
bnRleHQoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29udGV4dCwg
cmVjdCwgcm91bmRlZEhvbGVSZWN0LCBEaXJlY3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgKnRoaXMp
LCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgRGlyZWN0MkQ6
OmNsaXAoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgRGlyZWN0
MkQ6OmNsaXBPdXQoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIERpcmVj
dDJEOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNs
aXBSdWxlKQotewotICAgIERpcmVjdDJEOjpjbGlwUGF0aCgqcGxhdGZvcm1Db250ZXh0KCksIHBh
dGgsIGNsaXBSdWxlKTsKLX0KLQotSW50UmVjdCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xp
cEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6Z2V0Q2xpcEJv
dW5kcygqcGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZs
b2F0IG9wYWNpdHkpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKG9wYWNpdHkpOwotICAgIHNhdmUoKTsKLQotICAgIG1fc3RhdGUuYWxwaGEgPSBvcGFjaXR5
OwotCi0gICAgRGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKnBsYXRmb3JtQ29udGV4
dCgpLCBvcGFjaXR5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6
OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBEaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KnBsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIG1fc3RhdGUuYWxwaGEgPSBtX2RhdGEtPmN1cnJl
bnRHbG9iYWxBbHBoYSgpOwotCi0gICAgcmVzdG9yZSgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpCi17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkaWRVcGRhdGVTdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0
ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VUaGlj
a25lc3MpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0
eWxlQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKG1fcGxh
dGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAgICAgIGlmIChzdGF0ZS5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMg
Z3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250
ZXh0Ci0gICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1
IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICAgICAgYXV0byYgbXV0YWJsZVN0
YXRlID0gY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHRTdGF0ZSY+KGdyYXBoaWNzQ29udGV4dCgp
LnN0YXRlKCkpOwotICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93
T2Zmc2V0OwotICAgICAgICAgICAgbXV0YWJsZVN0YXRlLnNoYWRvd09mZnNldCA9IHsgc2hhZG93
T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVy
YXRpb25DaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0
aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxl
bmRNb2RlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRB
bnRpYWxpYXNDaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFs
aWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotCi0gICAgaWYg
KGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkp
IHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUuc3Ryb2tlQ29sb3IgPT0gY29sb3IpOwotICAgICAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZFN0cm9rZUJydXNoID0gYnJ1c2hXaXRoQ29sb3Io
c3Ryb2tlQ29sb3IoKSk7ICAgIAotICAgIH0KLSAgICAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJU
KG1fc3RhdGUuZmlsbENvbG9yID09IGNvbG9yKTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCkt
Pm1fc29saWRGaWxsQnJ1c2ggPSBicnVzaFdpdGhDb2xvcihmaWxsQ29sb3IoKSk7Ci0gICAgfQot
Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9v
dGhGb250c0NoYW5nZSkpIHsKLSAgICAgICAgYXV0byBmb250U21vb3RoaW5nTW9kZSA9IGVuYWJs
ZSA/IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9DTEVBUlRZUEUgOiBEMkQxX1RFWFRfQU5USUFM
SUFTX01PREVfQUxJQVNFRDsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdl
dCgpLT5TZXRUZXh0QW50aWFsaWFzTW9kZShmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgfQotCi0g
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkp
IHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUuYWxwaGEgPT0gYWxwaGEpOwotICAgICAgICBtX2Rh
dGEtPnNldEFscGhhKGFscGhhKTsKLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKSB7Ci0g
ICAgICAgIEQyRDFfSU5URVJQT0xBVElPTl9NT0RFIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJ
T05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwotCi0gICAgICAgIHN3aXRjaCAobW9kZSkgewotICAg
ICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OgotICAgICAgICAgICAgcXVh
bGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRl
cnBvbGF0ZToKLSAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9O
RUFSRVNUX05FSUdIQk9SOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZXJw
b2xhdGlvblF1YWxpdHk6OkxvdzoKLSAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9M
QVRJT05fTU9ERV9MSU5FQVI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRl
cnBvbGF0aW9uUXVhbGl0eTo6TWVkaXVtOgotICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5U
RVJQT0xBVElPTl9NT0RFX0NVQklDOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SW50ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6Ci0gICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9J
TlRFUlBPTEFUSU9OX01PREVfSElHSF9RVUFMSVRZX0NVQklDOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IFNldEludGVycG9sYXRpb25RdWFsaXR5KHBs
YXRmb3JtQ29udGV4dCgpLCBxdWFsaXR5KTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgRGlyZWN0MkQ6
OnNldE1pdGVyTGltaXQoKnBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgRGlyZWN0MkQ6OmNsZWFyUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQotewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3Rh
dGUoKTsKLSAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwotICAgIERpcmVj
dDJEOjpzdHJva2VSZWN0KGNvbnRleHQsIHJlY3QsIGxpbmVXaWR0aCwgRGlyZWN0MkQ6OlN0cm9r
ZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkK
LXsKLSAgICBEaXJlY3QyRDo6c2V0TGluZUNhcCgqcGxhdGZvcm1Db250ZXh0KCksIGNhcCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIGlmIChkYXNoT2Zmc2V0IDwg
MCkgewotICAgICAgICBmbG9hdCBsZW5ndGggPSAwOwotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGRhc2hlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGxlbmd0aCArPSBzdGF0aWNf
Y2FzdDxmbG9hdD4oZGFzaGVzW2ldKTsKLSAgICAgICAgaWYgKGxlbmd0aCkKLSAgICAgICAgICAg
IGRhc2hPZmZzZXQgPSBmbW9kKGRhc2hPZmZzZXQsIGxlbmd0aCkgKyBsZW5ndGg7Ci0gICAgfQot
Ci0gICAgRGlyZWN0MkQ6OnNldExpbmVEYXNoKCpwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaGVzLCBk
YXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TGluZUpv
aW4oTGluZUpvaW4gam9pbikKLXsKLSAgICBEaXJlY3QyRDo6c2V0TGluZUpvaW4oKnBsYXRmb3Jt
Q29udGV4dCgpLCBqb2luKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2Nh
bGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIERpcmVjdDJEOjpzY2FsZSgqcGxhdGZv
cm1Db250ZXh0KCksIHNpemUpOwotICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNl
VHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6cm90YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIERpcmVjdDJEOjpyb3Rh
dGUoKnBsYXRmb3JtQ29udGV4dCgpLCBhbmdsZSk7Ci0gICAgLy8gRklYTUU6IG1fZGF0YS0+bV91
c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsK
LSAgICBEaXJlY3QyRDo6dHJhbnNsYXRlKCpwbGF0Zm9ybUNvbnRleHQoKSwgeCwgeSk7Ci0gICAg
Ly8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0
eSA9IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgRGlyZWN0MkQ6OmNvbmNh
dENUTSgqcGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7Ci0gICAgLy8gRklYTUU6IG1fZGF0
YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDVE0oKnBsYXRmb3Jt
Q29udGV4dCgpLCB0cmFuc2Zvcm0pOwotICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2
aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotQWZmaW5lVHJhbnNm
b3JtIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGlu
Y2x1ZGVTY2FsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpnZXRDVE0o
KnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdN
b2RlIHJvdW5kaW5nTW9kZSkKLXsKLSAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpyb3VuZFRv
RGV2aWNlUGl4ZWxzKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRp
bmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17Ci0g
ICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEaXJlY3QyRDo6
ZHJhd0xpbmVzRm9yVGV4dCgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50LCB0aGlja25lc3MsIHdp
ZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIG1fc3RhdGUuc3Ryb2tlQ29sb3IpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVS
TCYgbGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRJc0NBTGF5ZXJDb250
ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBwcm9i
YWJhbHkgbm90IG5lZWRlZC4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKLXsKLSAgICAvLyBU
aGlzIGZ1bmN0aW9uIGlzIHByb2JhYmFseSBub3QgbmVlZGVkLgotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0ZWQpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6aXNBY2Nl
bGVyYXRlZENvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6Omlz
QWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IpCi17Ci0gICAgLy8gVGhpcyBpcyBhIG5vLW9wIGZvciBEaXJlY3QyRC4KLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiBlbGxpcHNlKQotewotICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZp
bGxQYXR0ZXJuKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBmaWxs
IGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQyRC4KLSAgICAgICAg
ZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBEaXJlY3QyRDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0
YXRlLmZpbGxDb2xvciwgbV9zdGF0ZS5zdHJva2VTdHlsZSwgbV9zdGF0ZS5zdHJva2VDb2xvciwg
bV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKLXsKLSAgICBpZiAo
bV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4pIHsKLSAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHN0cm9rZSBlbGxpcHNlcyB3aXRoIHBh
dHRlcm4vZ3JhZGllbnQgYnJ1c2hlcyBpbiBEMkQuCi0gICAgICAgIHN0cm9rZUVsbGlwc2VBc1Bh
dGgoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBEaXJlY3QyRDo6ZHJh
d0VsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0YXRlLnN0cm9rZVN0eWxl
LCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250
U21vb3RoaW5nKQotewotICAgIFVOVVNFRF9QQVJBTShmb250U21vb3RoaW5nKTsKLSAgICBpZiAo
IWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
IHhPZmZzZXQgPSBwb2ludC54KCk7Ci0gICAgVmVjdG9yPHVuc2lnbmVkIHNob3J0PiBnbHlwaHMo
bnVtR2x5cGhzKTsKLSAgICBWZWN0b3I8ZmxvYXQ+IGhvcml6b250YWxBZHZhbmNlcyhudW1HbHlw
aHMpOwotICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiBnbHlwaE9mZnNldHMobnVtR2x5
cGhzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewot
ICAgICAgICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZmZXIuYWR2YW5jZXNDb3VudCgpKQotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYXV0byBhZHZhbmNlID0gZ2x5cGhCdWZmZXIuYWR2
YW5jZXMoaSArIGZyb20pOwotICAgICAgICBpZiAoIWFkdmFuY2UpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBnbHlwaHNbaV0gPSBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkgKyBmcm9t
KTsKLSAgICAgICAgaG9yaXpvbnRhbEFkdmFuY2VzW2ldID0gYWR2YW5jZS0+d2lkdGgoKTsKLSAg
ICAgICAgZ2x5cGhPZmZzZXRzW2ldLmFkdmFuY2VPZmZzZXQgPSBhZHZhbmNlLT53aWR0aCgpOwot
ICAgICAgICBnbHlwaE9mZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQgPSBhZHZhbmNlLT5oZWlnaHQo
KTsKLSAgICB9Ci0KLSAgICBkb3VibGUgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhl
dGljQm9sZE9mZnNldCgpOwotCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5z
dGF0ZSgpOwotICAgIERpcmVjdDJEOjpkcmF3R2x5cGhzKG1fcGxhdGZvcm1Db250ZXh0LCBEaXJl
Y3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U3Ry
b2tlU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksCi0gICAgICAgIERpcmVjdDJEOjpT
aGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBmb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBnbHlw
aHMsIGhvcml6b250YWxBZHZhbmNlcywgZ2x5cGhPZmZzZXRzLCB4T2Zmc2V0LAotICAgICAgICBz
dGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93
T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvcik7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6Q2xpcFRv
RHJhd2luZ0NvbW1hbmRzUmVzdWx0IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwVG9EcmF3
aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKLXsKLSAgICAvLyBGSVhNRTog
Tm90IGltcGxlbWVudGVkLgotICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6
OlN1Y2Nlc3M7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBUb0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17
Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5SW1hZ2UoRG9udENvcHlCYWNr
aW5nU3RvcmUpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8q
IGNvbnRleHQgPSAmZ3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGlt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb250ZXh0KSkKLSAgICAgICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVj
dCYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLSNlbmRpZgotCi0KLX0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRHTERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4Nzgx
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRHTERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCi0KLSNpZiBFTkFCTEUoV0VC
R0wpICYmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDxkMmQxZWZmZWN0cy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6On5HcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yKCkgPSBkZWZhdWx0OwotCi1ib29sIEdyYXBoaWNz
Q29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxw
aGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGJvb2wgaWdub3JlTmF0aXZlSW1h
Z2VBbHBoYVByZW11bHRpcGxpY2F0aW9uKQotewotICAgIGlmICghbV9pbWFnZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLQotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMR0w6OnBhaW50VG9DYW52YXMoY29uc3QgdW5z
aWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3Qg
SW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlm
ICghaW1hZ2VQaXhlbHMgfHwgaW1hZ2VTaXplLmlzRW1wdHkoKSB8fCBjYW52YXNTaXplLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSAmJiBVU0UoRElS
RUNUMkQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVk
OiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkRlbGV0ZWQ6IHN2bjprZXl3b3JkcwojIyAtMSArMCwwICMjCi1EYXRlIEF1
dGhvciBJZCBSZXZpc2lvbiBIZWFkVVJMClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJl
Y3QyRC5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaAkobm9uZXhp
c3RlbnQpCkBAIC0xLDE0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNs
dWRlICJDb2xvci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5j
bHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQyZDFfMS5oPgotI2luY2x1ZGUgPGQyZDFlZmZlY3Rz
Lmg+Ci0jaW5jbHVkZSA8ZDJkMWhlbHBlci5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNs
dWRlIDx3dGYvVGlueUxSVUNhY2hlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQmLCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRl
eHRUeXBlKTsKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3RkOjp1bmlxdWVf
cHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiYmLCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJl
bmRlcmluZ0NvbnRleHRUeXBlKTsKLSAgICB+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KCk7Ci0KLSAgICB2b2lkIHN5bmNDb250ZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci0K
LSAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7Ci0gICAgdm9p
ZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOwotCi0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVj
dCYpOwotICAgIHZvaWQgY2xpcChjb25zdCBQYXRoJik7Ci0gICAgdm9pZCBjbGlwKElEMkQxR2Vv
bWV0cnkqKTsKLQotICAgIHZvaWQgYmVnaW5EcmF3KCk7Ci0gICAgdm9pZCBlbmREcmF3KCk7Ci0g
ICAgdm9pZCBmbHVzaCgpOwotICAgIHZvaWQgc2F2ZSgpOwotICAgIHZvaWQgc2NhbGUoY29uc3Qg
RmxvYXRTaXplJik7Ci0gICAgdm9pZCByZXN0b3JlKCk7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQp
OwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCk7Ci0gICAgdm9pZCBjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJik7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCk7Ci0gICAgdm9pZCBzZXRM
aW5lSm9pbihMaW5lSm9pbik7Ci0gICAgdm9pZCBzZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSk7
Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KTsKLSAgICB2b2lkIHNldERhc2hPZmZzZXQo
ZmxvYXQpOwotICAgIHZvaWQgc2V0UGF0dGVybldpZHRoKGZsb2F0KTsKLSAgICB2b2lkIHNldFBh
dHRlcm5PZmZzZXQoZmxvYXQpOwotICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KTsK
LSAgICB2b2lkIHNldERhc2hlcyhjb25zdCBEYXNoQXJyYXkmKTsKLSAgICB2b2lkIHNldEFscGhh
KGZsb2F0KTsKLQotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQo
KSB7IHJldHVybiBtX3BsYXRmb3JtQ29udGV4dDsgfQotICAgIElEMkQxUmVuZGVyVGFyZ2V0KiBy
ZW5kZXJUYXJnZXQoKTsKLQotICAgIEhEQyBtX2hkYyB7IG51bGxwdHIgfTsKLQotICAgIGZsb2F0
IGN1cnJlbnRHbG9iYWxBbHBoYSgpIGNvbnN0OwotCi0gICAgRDJEMV9TVFJPS0VfU1RZTEVfUFJP
UEVSVElFUyBzdHJva2VTdHlsZVByb3BlcnRpZXMoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IG1fb3duZWRQbGF0Zm9ybUNv
bnRleHQ7Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIG1fcGxhdGZvcm1Db250ZXh0Owot
ICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgbV9y
ZW5kZXJlclR5cGU7Ci0KLSAgICB1bnNpZ25lZCBiZWdpbkRyYXdDb3VudCB7IDAgfTsKLQotICAg
IGZsb2F0IG1fYWxwaGEgeyAxLjAgfTsKLQotICAgIGZyaWVuZCBjbGFzcyBEMkRDb250ZXh0U3Rh
dGVTYXZlcjsKLX07Ci0KLWNsYXNzIEQyRENvbnRleHRTdGF0ZVNhdmVyIHsKLXB1YmxpYzoKLSAg
ICBEMkRDb250ZXh0U3RhdGVTYXZlcihHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUmIGNv
bnRleHQsIGJvb2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQotICAgICAgICA6IG1fY29udGV4dChj
b250ZXh0KQotICAgICAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCi0gICAg
ewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAgIG1fY29udGV4dC5t
X3BsYXRmb3JtQ29udGV4dC5zYXZlKCk7Ci0gICAgfQotCi0gICAgfkQyRENvbnRleHRTdGF0ZVNh
dmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAg
bV9jb250ZXh0Lm1fcGxhdGZvcm1Db250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHNhdmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAg
ICAgbV9jb250ZXh0Lm1fcGxhdGZvcm1Db250ZXh0LnNhdmUoKTsKLSAgICAgICAgbV9zYXZlQW5k
UmVzdG9yZSA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCByZXN0b3JlKCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAgbV9jb250ZXh0Lm1fcGxhdGZv
cm1Db250ZXh0LnJlc3RvcmUoKTsKLSAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IGZhbHNlOwot
ICAgIH0KLQotICAgIGJvb2wgZGlkU2F2ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9zYXZlQW5kUmVzdG9yZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBvd25lZFBsYXRmb3JtQ29udGV4dDsKLSAgICBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUmIG1fY29udGV4dDsKLSAgICBib29sIG1fc2F2ZUFu
ZFJlc3RvcmUgeyBmYWxzZSB9OwotfTsKLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAJ
KHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw2IEBA
CiAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
Q0cuaCIKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGVEaXJlY3QyRC5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKQEAgLTQwLDcgKzM4LDYgQEAKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+CiAKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBz
dGF0aWMgdm9pZCBmaWxsV2l0aENsZWFyQ29sb3IoSEJJVE1BUCBiaXRtYXApCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dFdpbi5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDExICszMCw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNkZWZpbmUgR3Jh
cGhpY3NDb250ZXh0V2luIEdyYXBoaWNzQ29udGV4dENHCiAKLSNlbGlmIFVTRShESVJFQ1QyRCkK
LQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dERpcmVjdDJELmgiCi0jZGVmaW5lIEdyYXBoaWNz
Q29udGV4dFdpbiBHcmFwaGljc0NvbnRleHREaXJlY3QyRAotCiAjZWxpZiBVU0UoQ0FJUk8pCiAK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJEaXJlY3QyRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJE
aXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAg
LTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJEaXJl
Y3QyRC5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0xheWVyRmFjdG9yeS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
LSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU2V0Rm9yU2Nv
cGUuaD4KLSNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi0KLSNpZiBDT01QSUxFUihNU1ZDKQotLy8gU2VlIGh0dHBzOi8vbXNk
bi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMXdlYTV6d2UuYXNweAotI3ByYWdtYSB3YXJu
aW5nKGRpc2FibGU6IDQ3MDEpCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWY8
R3JhcGhpY3NMYXllcj4gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJGYWN0b3J5
KiBmYWN0b3J5LCBHcmFwaGljc0xheWVyQ2xpZW50JiBjbGllbnQsIFR5cGUgbGF5ZXJUeXBlKQot
ewotICAgIGlmIChmYWN0b3J5KSB7Ci0gICAgICAgIGF1dG8gbGF5ZXIgPSBmYWN0b3J5LT5jcmVh
dGVHcmFwaGljc0xheWVyKGxheWVyVHlwZSwgY2xpZW50KTsKLSAgICAgICAgbGF5ZXItPmluaXRp
YWxpemUobGF5ZXJUeXBlKTsKLSAgICAgICAgcmV0dXJuIGxheWVyOwotICAgIH0KLQotICAgIC8v
IEZJWE1FOiBSZXR1cm4gYSByZWFsIERpcmVjdDJEIGdyYXBoaWNzIGxheWVyCi0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgR3JhcGhpY3NMYXllckRpcmVjdDJEKGxheWVyVHlwZSwgY2xpZW50KSk7
Ci19Ci0KLUdyYXBoaWNzTGF5ZXJEaXJlY3QyRDo6R3JhcGhpY3NMYXllckRpcmVjdDJEKFR5cGUg
bGF5ZXJUeXBlLCBHcmFwaGljc0xheWVyQ2xpZW50JiBjbGllbnQpCi0gICAgOiBHcmFwaGljc0xh
eWVyKGxheWVyVHlwZSwgY2xpZW50KQotewotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJEaXJlY3Qy
RDo6aW5pdGlhbGl6ZShUeXBlIGxheWVyVHlwZSkKLXsKLX0KLQotR3JhcGhpY3NMYXllckRpcmVj
dDJEOjp+R3JhcGhpY3NMYXllckRpcmVjdDJEKCkKLXsKLSAgICB3aWxsQmVEZXN0cm95ZWQoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0xheWVyRGlyZWN0MkQ6OnNldE5lZWRzRGlzcGxheSgpCi17Ci0g
ICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyRGlyZWN0MkQ6OnNldE5lZWRzRGlzcGxh
eUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHIsIFNob3VsZENsaXBUb0xheWVyIHNob3VsZENsaXAp
Ci17Ci0gICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGly
ZWN0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NMYXllckRpcmVjdDJELmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGlyZWN0MkQuaAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLQotI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKLWNsYXNzIERpc3BsYXlMaXN0OwotfQotCi1j
bGFzcyBGbG9hdFJvdW5kZWRSZWN0OwotY2xhc3MgSW1hZ2U7Ci1jbGFzcyBUcmFuc2Zvcm1TdGF0
ZTsKLQotY2xhc3MgR3JhcGhpY3NMYXllckRpcmVjdDJEIDogcHVibGljIEdyYXBoaWNzTGF5ZXIg
ewotcHVibGljOgotCi0gICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgR3JhcGhpY3NMYXllckRp
cmVjdDJEKFR5cGUsIEdyYXBoaWNzTGF5ZXJDbGllbnQmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5HcmFwaGljc0xheWVyRGlyZWN0MkQoKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGluaXRpYWxpemUoVHlwZSkgb3ZlcnJpZGU7Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldE5lZWRzRGlzcGxheSgpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYsIFNob3VsZENsaXBU
b0xheWVyID0gQ2xpcFRvTGF5ZXIpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc0dyYXBoaWNzTGF5
ZXJDQSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfR1JBUEhJQ1NMQVlFUihXZWJD
b3JlOjpHcmFwaGljc0xheWVyRGlyZWN0MkQsIGlzR3JhcGhpY3NMYXllckNBKCkpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMjMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKLQotI2lmIFVTRShESVJFQ1Qy
RCkKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5j
bHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIK
LSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERp
cmVjdDJELmgiCi0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1
ZGUgPHdpbmNvZGVjLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdURl9NQUtF
X0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCk7Ci0KLXN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3cpCi17Ci0gICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tl
bmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKGJhY2tlbmRTaXplLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvKiBwbGF0Zm9ybUNvbnRl
eHQgPSB0YXJnZXRDb250ZXh0ID8gdGFyZ2V0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiBu
dWxscHRyOwotICAgIGF1dG8qIHJlbmRlclRhcmdldCA9IHBsYXRmb3JtQ29udGV4dCA/IHBsYXRm
b3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkgOiBudWxscHRyOwotCi0gICAgaWYgKCFyZW5kZXJU
YXJnZXQpCi0gICAgICAgIHJlbmRlclRhcmdldCA9IEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJl
bmRlclRhcmdldCgpOwotCi0gICAgYXV0byBiaXRtYXBDb250ZXh0ID0gRGlyZWN0MkQ6OmNyZWF0
ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShzaXplLCByZW5kZXJUYXJnZXQsIHJlc29sdXRpb25T
Y2FsZSk7Ci0gICAgaWYgKCFiaXRtYXBDb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBQ
bGF0Zm9ybUltYWdlUHRyIGJpdG1hcDsKLSAgICBIUkVTVUxUIGhyID0gYml0bWFwQ29udGV4dC0+
R2V0Qml0bWFwKCZiaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byBwbGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5pcXVlPFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEPihiaXRtYXBDb250ZXh0LmdldCgpLCBbdGhpc10oKSB7Ci0gICAgICAgIG1f
ZGF0YS5sb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKLSAgICB9LCBbdGhpc10oKSB7Ci0gICAg
ICAgIG1fZGF0YS5tYXJrQnVmZmVyT3V0T2ZTeW5jKCk7Ci0gICAgfSk7Ci0KLSAgICBpZiAoIXBs
YXRmb3JtQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGNvbnRl
eHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dERpcmVjdDJEPihwbGF0Zm9ybUNvbnRleHQu
Z2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1l
bW9yeSk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+KG5ldyBJ
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChzaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHBsYXRmb3JtQ29udGV4dCksIFdURk1vdmUoY29udGV4
dCksIFdURk1vdmUoYml0bWFwKSkpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQ+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAg
cmV0dXJuIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgMSwgRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsKLX0KLQotSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8UGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ+JiYgcGxhdGZvcm1Db250ZXh0LCBzdGQ6OnVuaXF1ZV9wdHI8
R3JhcGhpY3NDb250ZXh0PiYmIGNvbnRleHQsIFBsYXRmb3JtSW1hZ2VQdHImJiBiaXRtYXApCi0g
ICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSkKLSAgICAsIG1fcGxhdGZvcm1Db250ZXh0KFdURk1vdmUo
cGxhdGZvcm1Db250ZXh0KSkKLSAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQotICAg
ICwgbV9iaXRtYXAoV1RGTW92ZShiaXRtYXApKQotewotfQotCi1HcmFwaGljc0NvbnRleHQmIElt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Km1fY29udGV4dDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Zmx1c2hD
b250ZXh0KCkKLXsKLSAgICBjb250ZXh0KCkuZmx1c2goKTsKLX0KLQotUmVmUHRyPE5hdGl2ZUlt
YWdlPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAotewotICAgIENPTVB0cjxJRDJEMUJpdG1hcFJl
bmRlclRhcmdldD4gYml0bWFwVGFyZ2V0OwotICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0KCkucGxh
dGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFjZSgmYml0bWFwVGFy
Z2V0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBpbWFnZTsKLSAgICBociA9IGJpdG1hcFRhcmdldC0+
R2V0Qml0bWFwKCZpbWFnZSk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgLy8g
RklYTUU6IG1fZGF0YS5kYXRhIGlzIG51bGxwdHIgZXZlbiB3aGVuIGFza2luZyB0byBjb3B5IGJh
Y2tpbmcgc3RvcmUgbGVhZGluZyB0byB0ZXN0IGZhaWx1cmVzLgotICAgIGlmIChjb3B5QmVoYXZp
b3IgPT0gQ29weUJhY2tpbmdTdG9yZSAmJiBtX2RhdGEuZGF0YS5pc0VtcHR5KCkpCi0gICAgICAg
IGNvcHlCZWhhdmlvciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOwotCi0gICAgQ2hlY2tlZFNpemUg
bnVtQnl0ZXMgPSBDaGVja2VkVWludDMyKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgp
KSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChjb3B5QmVoYXZpb3IgPT0gQ29w
eUJhY2tpbmdTdG9yZSkgewotICAgICAgICBEMkQxX1JFQ1RfVSBiYWNraW5nU3RvcmVEaW1lbnN0
aW9ucyA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUpOwotICAg
ICAgICBpbWFnZS0+Q29weUZyb21NZW1vcnkoJmJhY2tpbmdTdG9yZURpbWVuc3Rpb25zLCBtX2Rh
dGEuZGF0YS5kYXRhKCksIDMyKTsKLQotICAgIH0KLQotICAgIHJldHVybiBOYXRpdmVJbWFnZTo6
Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotc3RhdGljIFBsYXRmb3JtSW1hZ2VQdHIgY3Jl
YXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1h
cFRhcmdldCwgSUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCi17Ci0g
ICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IGltYWdlID8gbmF0aXZlSW1hZ2VTaXplKGltYWdlKSA6
IEZsb2F0U2l6ZSgpOwotCi0gICAgaWYgKGltYWdlICYmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGlt
YWdlU2l6ZS53aWR0aCgpKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8
fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6ZS5oZWlnaHQoKSkgIT0gc3RhdGljX2Nhc3Q8
c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkgewotICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+
IGNyb3BwZWRCaXRtYXAgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwKGJpdG1hcFRhcmdldCwgYm91
bmRzKTsKLSAgICAgICAgaWYgKGNyb3BwZWRCaXRtYXApIHsKLSAgICAgICAgICAgIGF1dG8gc291
cmNlUmVjdCA9IEQyRDE6OlJlY3RVKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0
KCkpOwotICAgICAgICAgICAgSFJFU1VMVCBociA9IGNyb3BwZWRCaXRtYXAtPkNvcHlGcm9tQml0
bWFwKG51bGxwdHIsIGltYWdlLCAmc291cmNlUmVjdCk7Ci0gICAgICAgICAgICBpZiAoU1VDQ0VF
REVEKGhyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JvcHBlZEJpdG1hcDsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiBpbWFnZTsKLX0KLQotc3RhdGljIFJlZlB0cjxJbWFnZT4g
Y3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChJRDJEMUJpdG1hcFJlbmRlclRh
cmdldCogYml0bWFwVGFyZ2V0LCBDT01QdHI8SUQyRDFCaXRtYXA+JiYgaW1hZ2UsIEludFNpemUg
aW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHBy
ZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1h
Z2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShiaXRtYXBUYXJnZXQsIGltYWdlLmdl
dCgpLCBpbnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAgICAgICAvLyBGSVhNRTogTmVlZCB0
byBpbXBsZW1lbnQgc2NhbGVkIHZlcnNpb24KLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICB9Ci0KLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJl
dHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotUmVmUHRyPElt
YWdlPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAotewotICAgIFBsYXRmb3JtSW1hZ2VQdHIgaW1hZ2U7Ci0gICAgaWYgKHJlc29sdXRpb25T
Y2FsZSgpID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpLT5wbGF0
Zm9ybUltYWdlKCk7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShE
b250Q29weUJhY2tpbmdTdG9yZSktPnBsYXRmb3JtSW1hZ2UoKTsKLQotICAgIGF1dG8gYml0bWFw
VGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDxJRDJEMUJpdG1hcFJlbmRlclRhcmdldCo+KGNvbnRl
eHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0
ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LCBXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxT
aXplKCksIHJlc29sdXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQ
dHI8SW1hZ2U+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgQ09NUHRyPElEMkQxQml0
bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IGNvbnRleHQo
KS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRt
YXBUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBQbGF0Zm9ybUltYWdlUHRyIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlKS0+cGxhdGZvcm1JbWFnZSgpOwotICAgIHJldHVybiBjcmVhdGVCaXRt
YXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdldC5nZXQoKSwgV1RGTW92ZShp
bWFnZSksIGludGVybmFsU2l6ZSgpLCByZXNvbHV0aW9uU2NhbGUoKSwgcHJlc2VydmVSZXNvbHV0
aW9uKTsKLX0KLQotUGxhdGZvcm1JbWFnZVB0ciBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
Y29tcGF0aWJsZUJpdG1hcChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQotewotICAg
IGxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOwotCi0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0g
ICAgICAgIHJldHVybiBiaXRtYXA7Ci0KLSAgICBpZiAobV9wbGF0Zm9ybUNvbnRleHQtPnJlbmRl
clRhcmdldCgpID09IHJlbmRlclRhcmdldCkgewotICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXBS
ZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldChRdWVyeSwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAg
aWYgKGJpdG1hcFRhcmdldCkgewotICAgICAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiYWNr
aW5nQml0bWFwOwotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChiaXRtYXBUYXJnZXQtPkdldEJp
dG1hcCgmYmFja2luZ0JpdG1hcCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJhY2tpbmdCaXRt
YXAgIT0gbV9iaXRtYXApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBiaXRtYXA7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBkcmF3IGFuIElEMkQxQml0bWFwIHRvIGl0c2VsZi4g
TXVzdCByZXR1cm4gYSBjb3B5LgotICAgICAgICAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4g
Y29waWVkQml0bWFwOwotICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVuZGVyVGFyZ2V0
LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgRGlyZWN0MkQ6OmJpdG1hcFBy
b3BlcnRpZXMoKSwgJmNvcGllZEJpdG1hcCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChT
VUNDRUVERUQoY29waWVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBtX2JpdG1hcC5n
ZXQoKSwgbnVsbHB0cikpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvcGllZEJp
dG1hcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBhdXRvIHNpemUgPSBtX2JpdG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0gICAgQVNTRVJU
KHNpemUuaGVpZ2h0ICYmIHNpemUud2lkdGgpOwotCi0gICAgQ2hlY2tlZFVpbnQzMiBudW1CeXRl
cyA9IHNpemUud2lkdGggKiBzaXplLmhlaWdodCAqIDQ7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092
ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDb3B5IHRoZSBi
aXRzIGZyb20gY3VycmVudCByZW5kZXJUYXJnZXQgdG8gdGhlIG91dHB1dCB0YXJnZXQuCi0gICAg
Ly8gV2UgY2Fubm90IGFjY2VzcyB0aGUgZGF0YSBiYWNraW5nIGFuIElXSUNCaXRtYXAgd2hpbGUg
YW4gYWN0aXZlIGRyYXcgc2Vzc2lvbiBpcyBvcGVuLgotICAgIGNvbnRleHQtPmVuZERyYXcoKTsK
LQotICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IHNvdXJjZURldmljZUNvbnRleHQgPSBt
X3BsYXRmb3JtQ29udGV4dC0+ZGV2aWNlQ29udGV4dCgpOwotICAgIGlmICghc291cmNlRGV2aWNl
Q29udGV4dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRt
YXAxPiBzb3VyY2VDUFVCaXRtYXA7Ci0gICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzEgYml0bWFw
UHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09QVElPTlNf
Q1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4
ZWxGb3JtYXQoKSk7Ci0gICAgSFJFU1VMVCBociA9IHNvdXJjZURldmljZUNvbnRleHQtPkNyZWF0
ZUJpdG1hcChtX2JpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG51bGxwdHIsIGJ5dGVzUGVyUm93LCBi
aXRtYXBQcm9wZXJ0aWVzLCAmc291cmNlQ1BVQml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRCho
cikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFzb3VyY2VDUFVCaXRtYXAp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPkNv
cHlGcm9tQml0bWFwKG51bGxwdHIsIG1fYml0bWFwLmdldCgpLCBudWxscHRyKTsKLSAgICBpZiAo
IVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRDJEMV9NQVBQ
RURfUkVDVCBtYXBwZWRTb3VyY2VEYXRhOwotICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5NYXAo
RDJEMV9NQVBfT1BUSU9OU19SRUFELCAmbWFwcGVkU291cmNlRGF0YSk7Ci0gICAgaWYgKCFTVUND
RUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJRDJEMURl
dmljZUNvbnRleHQ+IHRhcmdldERldmljZUNvbnRleHQ7Ci0gICAgaHIgPSByZW5kZXJUYXJnZXQt
PlF1ZXJ5SW50ZXJmYWNlKCZ0YXJnZXREZXZpY2VDb250ZXh0KTsKLSAgICBBU1NFUlQoU1VDQ0VF
REVEKGhyKSk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvbXBhdGlibGVCaXRtYXA7Ci0g
ICAgaHIgPSB0YXJnZXREZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQaXhl
bFNpemUoKSwgbWFwcGVkU291cmNlRGF0YS5iaXRzLCBtYXBwZWRTb3VyY2VEYXRhLnBpdGNoLCBE
aXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpLCAmY29tcGF0aWJsZUJpdG1hcCk7Ci0gICAgaWYg
KCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGhyID0gc291
cmNlQ1BVQml0bWFwLT5Vbm1hcCgpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAg
IGNvbnRleHQtPmJlZ2luRHJhdygpOwotCi0gICAgcmV0dXJuIGNvbXBhdGlibGVCaXRtYXA7Ci19
Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0
JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBG
bG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Qu
c2NhbGUocmVzb2x1dGlvblNjYWxlKCkpOwotCi0gICAgYXV0byBjb21wYXRpYmxlQml0bWFwID0g
Y29tcGF0aWJsZUJpdG1hcChkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFy
Z2V0KCkpOwotCi0gICAgRmxvYXRTaXplIGN1cnJlbnRJbWFnZVNpemUgPSBuYXRpdmVJbWFnZVNp
emUoY29tcGF0aWJsZUJpdG1hcCk7Ci0gICAgaWYgKGN1cnJlbnRJbWFnZVNpemUuaXNaZXJvKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShjb21w
YXRpYmxlQml0bWFwLCBjdXJyZW50SW1hZ2VTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0
LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEZs
b2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5z
Y2FsZShyZXNvbHV0aW9uU2NhbGUoKSk7Ci0KLSAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFn
ZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29w
eUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwg
ZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNp
bmcsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjbGlw
VG9NYXNrKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJiwgc3RkOjpvcHRpb25hbDxkb3VibGU+LCBQcmVzZXJ2ZVJlc29s
dXRpb24pIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gImRhdGE6
LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0
b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4geyB9OwotfQot
Ci1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwg
c3JjUmVjdCwgbnVsbHB0cik7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6
OnB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgSW1hZ2VC
dWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBv
aW50LCBkZXN0Rm9ybWF0LCBudWxscHRyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oCShub25leGlzdGVudCkKQEAg
LTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkltYWdl
QnVmZmVyQmFja2VuZC5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCA6IHB1YmxpYyBJ
bWFnZUJ1ZmZlckJhY2tlbmQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQpOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kKTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7Ci0gICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gY3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwotCi0gICAgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQo
KSBvdmVycmlkZTsKLQotICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKLSAgICBS
ZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5LCBQcmVzZXJ2ZVJlc29sdXRp
b24pIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFBy
ZXNlcnZlUmVzb2x1dGlvbikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNsaXBUb01hc2soR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkgb3ZlcnJpZGU7Ci0KLSAgICBT
dHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOwotICAgIFZl
Y3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0UGl4
ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQp
IG92ZXJyaWRlOwotCi1wcm90ZWN0ZWQ6Ci0gICAgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQo
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UpOwotCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBtX3BsYXRmb3JtQ29udGV4dDsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Ci0gICAgUGxhdGZvcm1JbWFn
ZVB0ciBtX2JpdG1hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZURlY29kZXJEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAkocmV2aXNpb24g
Mjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVj
b2RlckRpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDMwNCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKLQotI2lmIFVTRShESVJF
Q1QyRCkKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlT3Jp
ZW50YXRpb24uaCIKLSNpbmNsdWRlICJJbnRQb2ludC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIK
LSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDxXaW5Db2RlYy5oPgotI2luY2x1ZGUgPGQy
ZDEuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1JbWFnZURlY29kZXJEaXJlY3QyRDo6SW1hZ2VEZWNvZGVyRGlyZWN0MkQoKQotewot
fQotCi1JV0lDSW1hZ2luZ0ZhY3RvcnkyKiBJbWFnZURlY29kZXJEaXJlY3QyRDo6c3lzdGVtSW1h
Z2luZ0ZhY3RvcnkoKQotewotICAgIHN0YXRpYyBJV0lDSW1hZ2luZ0ZhY3RvcnkyKiB3aWNJbWFn
aW5nRmFjdG9yeSA9IG51bGxwdHI7Ci0gICAgaWYgKCF3aWNJbWFnaW5nRmFjdG9yeSkgewotICAg
ICAgICBIUkVTVUxUIGhyID0gQ29DcmVhdGVJbnN0YW5jZShDTFNJRF9XSUNJbWFnaW5nRmFjdG9y
eSwgbnVsbHB0ciwgQ0xTQ1RYX0lOUFJPQ19TRVJWRVIsIElJRF9JV0lDSW1hZ2luZ0ZhY3Rvcnky
LCAoTFBWT0lEKikmd2ljSW1hZ2luZ0ZhY3RvcnkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChT
VUNDRUVERUQoaHIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gd2ljSW1hZ2luZ0ZhY3Rvcnk7Ci19
Ci0KLXNpemVfdCBJbWFnZURlY29kZXJEaXJlY3QyRDo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQ
cm9wZXJ0aWVzKCkgY29uc3QKLXsKLSAgICAvLyBTZXQgdG8gbWF0Y2ggdmFsdWUgdXNlZCBmb3Ig
Q29yZUdyYXBoaWNzLgotICAgIHJldHVybiAxMzA4ODsKLX0KLQotU3RyaW5nIEltYWdlRGVjb2Rl
ckRpcmVjdDJEOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLWJvb2wgSW1hZ2VEZWNvZGVyRGlyZWN0
MkQ6OmlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbmF0aXZlRGVjb2Rl
ciA/IHRydWUgOiBmYWxzZTsKLX0KLQotRW5jb2RlZERhdGFTdGF0dXMgSW1hZ2VEZWNvZGVyRGly
ZWN0MkQ6OmVuY29kZWREYXRhU3RhdHVzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbmF0aXZlRGVj
b2RlcikKLSAgICAgICAgcmV0dXJuIEVuY29kZWREYXRhU3RhdHVzOjpFcnJvcjsKLQotICAgIC8v
IEZJWE1FOiBIb29rIGludG8gV0lDIGRlY29kZXIgKGlmIGFzeW5jIGRlY29kZSBpcyBldmVuIHBv
c3NpYmxlKQotICAgIHJldHVybiBFbmNvZGVkRGF0YVN0YXR1czo6Q29tcGxldGU7Ci19Ci0KLUlu
dFNpemUgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnNpemUoKSBjb25zdAotewotICAgIGlmICghbV9u
YXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgQ09NUHRyPElX
SUNCaXRtYXBGcmFtZURlY29kZT4gZnJhbWU7Ci0gICAgSFJFU1VMVCBociA9IG1fbmF0aXZlRGVj
b2Rlci0+R2V0RnJhbWUoMCwgJmZyYW1lKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBVSU5UIHdpZHRoLCBoZWlnaHQ7Ci0gICAgaHIg
PSBmcmFtZS0+R2V0U2l6ZSgmd2lkdGgsICZoZWlnaHQpOwotICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIHJldHVybiBJbnRTaXplKHdpZHRo
LCBoZWlnaHQpOwotfQotCi1zaXplX3QgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmZyYW1lQ291bnQo
KSBjb25zdAotewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIFVJTlQgY291bnQ7Ci0gICAgSFJFU1VMVCBociA9IG1fbmF0aXZlRGVjb2Rlci0+R2V0
RnJhbWVDb3VudCgmY291bnQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLVJlcGV0aXRpb25Db3VudCBJbWFnZURl
Y29kZXJEaXJlY3QyRDo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbmF0
aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJuIFJlcGV0aXRpb25Db3VudE5vbmU7Ci0KLSAgICAv
LyBGSVhNRTogSWRlbnRpZnkgaW1hZ2UgdHlwZSwgYW5kIGRldGVybWluZSBwcm9wZXIgcmVwZXRp
dGlvbiBjb3VudC4KLSAgICByZXR1cm4gUmVwZXRpdGlvbkNvdW50Tm9uZTsKLX0KLQotc3RkOjpv
cHRpb25hbDxJbnRQb2ludD4gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmhvdFNwb3QoKSBjb25zdAot
ewotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0KLUludFNpemUgSW1hZ2VEZWNvZGVyRGly
ZWN0MkQ6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1
YnNhbXBsaW5nTGV2ZWwpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX25hdGl2ZURlY29kZXIpCi0gICAg
ICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2Rl
PiBmcmFtZTsKLSAgICBIUkVTVUxUIGhyID0gbV9uYXRpdmVEZWNvZGVyLT5HZXRGcmFtZShpbmRl
eCwgJmZyYW1lKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBJbnRT
aXplKCk7Ci0KLSAgICBVSU5UIHdpZHRoLCBoZWlnaHQ7Ci0gICAgaHIgPSBmcmFtZS0+R2V0U2l6
ZSgmd2lkdGgsICZoZWlnaHQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0
dXJuIEludFNpemUoKTsKLQotICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwotfQot
Ci1ib29sIEltYWdlRGVjb2RlckRpcmVjdDJEOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVf
dCBpbmRleCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgQ09NUHRyPElXSUNCaXRtYXBGcmFtZURlY29kZT4gZnJhbWU7Ci0g
ICAgSFJFU1VMVCBociA9IG1fbmF0aXZlRGVjb2Rlci0+R2V0RnJhbWUoaW5kZXgsICZmcmFtZSk7
Ci0gICAgcmV0dXJuIFNVQ0NFRURFRChocik7Ci19Ci1JbWFnZURlY29kZXI6OkZyYW1lTWV0YWRh
dGEgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmZyYW1lTWV0YWRhdGFBdEluZGV4KHNpemVfdCkgY29u
c3QgZmluYWw7Ci17Ci0gICAgaWYgKCFtX25hdGl2ZURlY29kZXIpCi0gICAgICAgIHJldHVybiB7
IH07Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2RlPiBmcmFtZTsKLSAgICBIUkVT
VUxUIGhyID0gbV9uYXRpdmVEZWNvZGVyLT5HZXRGcmFtZShpbmRleCwgJmZyYW1lKTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBDT01QdHI8SVdJ
Q01ldGFkYXRhUXVlcnlSZWFkZXI+IG1ldGFkYXRhOwotICAgIGhyID0gZnJhbWUtPkdldE1ldGFk
YXRhUXVlcnlSZWFkZXIoJm1ldGFkYXRhKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgIHJldHVybiB7IH07Ci0KLSAgICBQUk9QVkFSSUFOVCB2YWx1ZTsKLSAgICBQcm9wVmFyaWFu
dEluaXQoJnZhbHVlKTsKLSAgICBociA9IG1ldGFkYXRhLT5HZXRNZXRhZGF0YUJ5TmFtZShMIlN5
c3RlbS5QaG90by5PcmllbnRhdGlvbiIsICZ2YWx1ZSk7Ci0gICAgaWYgKFNVQ0NFRURFRChocikp
Ci0gICAgICAgIHJldHVybiB7IEltYWdlT3JpZW50YXRpb24oc3RhdGljX2Nhc3Q8SW1hZ2VPcmll
bnRhdGlvbjo6T3JpZW50YXRpb24+KHZhbHVlLnVpVmFsKSksIHN0ZDo6bnVsbG9wdCB9OwotCi0g
ICAgcmV0dXJuIHsgfTsKLX0KLQotU2Vjb25kcyBJbWFnZURlY29kZXJEaXJlY3QyRDo6ZnJhbWVE
dXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAotewotICAgIGlmICghbV9uYXRpdmVE
ZWNvZGVyKQotICAgICAgICByZXR1cm4gU2Vjb25kcygwKTsKLQotICAgIENPTVB0cjxJV0lDQml0
bWFwRnJhbWVEZWNvZGU+IGZyYW1lOwotICAgIEhSRVNVTFQgaHIgPSBtX25hdGl2ZURlY29kZXIt
PkdldEZyYW1lKGluZGV4LCAmZnJhbWUpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgcmV0dXJuIFNlY29uZHMoMCk7Ci0KLSAgICAvLyBGSVhNRTogRmlndXJlIG91dCBjb3JyZWN0
IGltYWdlIGZvcm1hdC1zcGVjaWZpYyBxdWVyeSBmb3IgZnJhbWUgZHVyYXRpb24gY2hlY2suCi0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU2Vjb25kcygwKTsKLX0KLQotYm9vbCBJ
bWFnZURlY29kZXJEaXJlY3QyRDo6ZnJhbWVBbGxvd1N1YnNhbXBsaW5nQXRJbmRleChzaXplX3Qg
aW5kZXgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW1hZ2VEZWNvZGVy
RGlyZWN0MkQ6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ09N
UHRyPElXSUNCaXRtYXBGcmFtZURlY29kZT4gZnJhbWU7Ci0gICAgSFJFU1VMVCBociA9IG1fbmF0
aXZlRGVjb2Rlci0+R2V0RnJhbWUoaW5kZXgsICZmcmFtZSk7Ci0gICAgaWYgKCFTVUNDRUVERUQo
aHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDT01QdHI8SVdJQ01ldGFkYXRhUXVl
cnlSZWFkZXI+IG1ldGFkYXRhOwotICAgIGhyID0gZnJhbWUtPkdldE1ldGFkYXRhUXVlcnlSZWFk
ZXIoJm1ldGFkYXRhKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEdVSUQgY29udGFpbmVyRm9ybWF0OwotICAgIGhyID0gbWV0YWRhdGEtPkdl
dENvbnRhaW5lckZvcm1hdCgmY29udGFpbmVyRm9ybWF0KTsKLSAgICBpZiAoIVNVQ0NFRURFRCho
cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICg6OklzRXF1YWxHVUlEKEdVSURf
Q29udGFpbmVyRm9ybWF0SnBlZywgY29udGFpbmVyRm9ybWF0KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXVuc2lnbmVkIEltYWdlRGVjb2RlckRpcmVj
dDJEOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vi
c2FtcGxpbmdMZXZlbCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRleChpbmRleCwgc3Vic2Ft
cGxpbmdMZXZlbCkuYXJlYSgpICogNDsKLX0KLQotdm9pZCBJbWFnZURlY29kZXJEaXJlY3QyRDo6
c2V0VGFyZ2V0Q29udGV4dChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQotewotICAg
IG1fcmVuZGVyVGFyZ2V0ID0gcmVuZGVyVGFyZ2V0OwotfQotCi1QbGF0Zm9ybUltYWdlUHRyIElt
YWdlRGVjb2RlckRpcmVjdDJEOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgs
IFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgY29uc3QgRGVjb2RpbmdPcHRpb25z
JikKLXsKLSAgICBpZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBpZiAoIW1fcmVuZGVyVGFyZ2V0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIENPTVB0cjxJV0lDQml0bWFwRnJhbWVEZWNvZGU+IGZyYW1lOwotICAgIEhSRVNVTFQgaHIg
PSBtX25hdGl2ZURlY29kZXItPkdldEZyYW1lKDAsICZmcmFtZSk7Ci0gICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJV0lDRm9ybWF0
Q29udmVydGVyPiBjb252ZXJ0ZXI7Ci0gICAgaHIgPSBzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpLT5D
cmVhdGVGb3JtYXRDb252ZXJ0ZXIoJmNvbnZlcnRlcik7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGhyID0gY29udmVydGVyLT5Jbml0aWFs
aXplKGZyYW1lLmdldCgpLCBHVUlEX1dJQ1BpeGVsRm9ybWF0MzJicHBQUkdCQSwgV0lDQml0bWFw
RGl0aGVyVHlwZU5vbmUsIG51bGxwdHIsIDAuZiwgV0lDQml0bWFwUGFsZXR0ZVR5cGVDdXN0b20p
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBDT01QdHI8SVdJQ0JpdG1hcD4gd2ljQml0bWFwOwotICAgIGhyID0gc3lzdGVtSW1hZ2luZ0Zh
Y3RvcnkoKS0+Q3JlYXRlQml0bWFwRnJvbVNvdXJjZShjb252ZXJ0ZXIuZ2V0KCksIFdJQ0JpdG1h
cENhY2hlT25EZW1hbmQsICZ3aWNCaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsK
LSAgICBociA9IG1fcmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXBGcm9tV2ljQml0bWFwKHdpY0Jp
dG1hcC5nZXQoKSwgJmJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBiaXRtYXA7Ci19Ci0KLXZvaWQgSW1hZ2VEZWNv
ZGVyRGlyZWN0MkQ6OnNldERhdGEoY29uc3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciYgZGF0YSwg
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAgaWYgKCFhbGxEYXRhUmVjZWl2ZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV0lDU3RyZWFtPiBzdHJlYW07Ci0gICAgSFJFU1VM
VCBociA9IHN5c3RlbUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZVN0cmVhbSgmc3RyZWFtKTsKLSAg
ICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZjxTaGFyZWRC
dWZmZXI+IGJ1ZmZlciA9IGRhdGEubWFrZUNvbnRpZ3VvdXMoKTsKLSAgICBjaGFyKiBkYXRhUHRy
ID0gY29uc3RfY2FzdDxjaGFyKj4oYnVmZmVyLT5kYXRhKCkpOwotICAgIGhyID0gc3RyZWFtLT5J
bml0aWFsaXplRnJvbU1lbW9yeShyZWludGVycHJldF9jYXN0PEJZVEUqPihkYXRhUHRyKSwgZGF0
YS5zaXplKCkpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9uYXRpdmVEZWNvZGVyID0gbnVsbHB0cjsKLQotICAgIGhyID0gc3lzdGVtSW1hZ2luZ0Zh
Y3RvcnkoKS0+Q3JlYXRlRGVjb2RlckZyb21TdHJlYW0oc3RyZWFtLmdldCgpLCBudWxscHRyLCBX
SUNEZWNvZGVNZXRhZGF0YUNhY2hlT25EZW1hbmQsICZtX25hdGl2ZURlY29kZXIpOwotICAgIGlm
ICghU1VDQ0VFREVEKGhyKSkgewotICAgICAgICBtX25hdGl2ZURlY29kZXIgPSBudWxscHRyOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSW1hZ2Ugd2FzIHZhbGlkLgotfQotCi19
Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlRGVjb2RlckRpcmVjdDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgJKHJldmlzaW9uIDI4NzgxMikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJl
Y3QyRC5oCShub25leGlzdGVudCkKQEAgLTEsOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0Uo
RElSRUNUMkQpCi0KLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXIu
aCIKLQotaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNlIElXSUNCaXRtYXBE
ZWNvZGVyOwotaW50ZXJmYWNlIElXSUNJbWFnaW5nRmFjdG9yeTI7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgSW1hZ2VEZWNvZGVyRGlyZWN0MkQgZmluYWwgOiBwdWJsaWMgSW1hZ2VE
ZWNvZGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBJbWFn
ZURlY29kZXJEaXJlY3QyRCgpOwotCi0gICAgc3RhdGljIFJlZjxJbWFnZURlY29kZXJEaXJlY3Qy
RD4gY3JlYXRlKEZyYWdtZW50ZWRTaGFyZWRCdWZmZXImLCBBbHBoYU9wdGlvbiwgR2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb24pCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJ
bWFnZURlY29kZXJEaXJlY3QyRCgpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0
c01lZGlhVHlwZShNZWRpYVR5cGUgdHlwZSkgeyByZXR1cm4gdHlwZSA9PSBNZWRpYVR5cGU6Oklt
YWdlOyB9Ci0KLSAgICBzaXplX3QgYnl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkg
Y29uc3QgZmluYWw7Ci0KLSAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCBmaW5h
bDsKLSAgICBFbmNvZGVkRGF0YVN0YXR1cyBlbmNvZGVkRGF0YVN0YXR1cygpIGNvbnN0IGZpbmFs
OwotICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3QgZmluYWw7Ci0KLSAgICAvLyBBbHdh
eXMgb3JpZ2luYWwgc2l6ZSwgd2l0aG91dCBzdWJzYW1wbGluZy4KLSAgICBJbnRTaXplIHNpemUo
KSBjb25zdCBmaW5hbDsKLSAgICBzaXplX3QgZnJhbWVDb3VudCgpIGNvbnN0IGZpbmFsOwotCi0g
ICAgUmVwZXRpdGlvbkNvdW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0IGZpbmFsOwotICAgIHN0
ZDo6b3B0aW9uYWw8SW50UG9pbnQ+IGhvdFNwb3QoKSBjb25zdCBmaW5hbDsKLQotICAgIEludFNp
emUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGlu
Z0xldmVsOjpEZWZhdWx0KSBjb25zdCBmaW5hbDsKLSAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0
SW5kZXgoc2l6ZV90KSBjb25zdCBmaW5hbDsKLSAgICBJbWFnZURlY29kZXI6OkZyYW1lTWV0YWRh
dGEgZnJhbWVNZXRhZGF0YUF0SW5kZXgoc2l6ZV90KSBjb25zdCBmaW5hbDsKLQotICAgIFNlY29u
ZHMgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KSBjb25zdCBmaW5hbDsKLSAgICBib29sIGZy
YW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBmcmFtZUFs
bG93U3Vic2FtcGxpbmdBdEluZGV4KHNpemVfdCkgY29uc3QgZmluYWw7Ci0gICAgdW5zaWduZWQg
ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdM
ZXZlbDo6RGVmYXVsdCkgY29uc3QgZmluYWw7Ci0KLSAgICBQbGF0Zm9ybUltYWdlUHRyIGNyZWF0
ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5n
TGV2ZWw6OkRlZmF1bHQsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYgPSBEZWNvZGluZ09wdGlvbnMo
RGVjb2RpbmdNb2RlOjpTeW5jaHJvbm91cykpIGZpbmFsOwotCi0gICAgdm9pZCBzZXREYXRhKGNv
bnN0IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXImLCBib29sIGFsbERhdGFSZWNlaXZlZCkgZmluYWw7
Ci0gICAgYm9vbCBpc0FsbERhdGFSZWNlaXZlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faXNB
bGxEYXRhUmVjZWl2ZWQ7IH0KLSAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3Qp
IGZpbmFsIHsgfQotCi0gICAgdm9pZCBzZXRUYXJnZXRDb250ZXh0KElEMkQxUmVuZGVyVGFyZ2V0
Kik7Ci0KLSAgICBzdGF0aWMgSVdJQ0ltYWdpbmdGYWN0b3J5Miogc3lzdGVtSW1hZ2luZ0ZhY3Rv
cnkoKTsKLQotcHJpdmF0ZToKLSAgICBib29sIG1faXNBbGxEYXRhUmVjZWl2ZWQgeyBmYWxzZSB9
OwotICAgIG11dGFibGUgSW50U2l6ZSBtX3NpemU7Ci0gICAgQ09NUHRyPElXSUNCaXRtYXBEZWNv
ZGVyPiBtX25hdGl2ZURlY29kZXI7Ci0gICAgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBtX3Jl
bmRlclRhcmdldDsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGlyZWN0MkQuY3BwCShyZXZpc2lv
biAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VE
aXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LTIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkltYWdlLmgiCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1
ZGUgIkJpdG1hcEluZm8uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRl
IDxkMmQxLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1SZWZQdHI8Qml0bWFwSW1hZ2U+IEJpdG1hcEltYWdlOjpjcmVhdGUoSEJJVE1BUCBoQml0
bWFwKQotewotICAgIERJQlNFQ1RJT04gZGliU2VjdGlvbjsKLSAgICBpZiAoIUdldE9iamVjdCho
Qml0bWFwLCBzaXplb2YoRElCU0VDVElPTiksICZkaWJTZWN0aW9uKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBBU1NFUlQoZGliU2VjdGlvbi5kc0JtLmJtQml0c1BpeGVsID09IDMy
KTsKLSAgICBpZiAoZGliU2VjdGlvbi5kc0JtLmJtQml0c1BpeGVsICE9IDMyKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIEFTU0VSVChkaWJTZWN0aW9uLmRzQm0uYm1CaXRzKTsKLSAg
ICBpZiAoIWRpYlNlY3Rpb24uZHNCbS5ibUJpdHMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29s
IEJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKEhCSVRNQVAgYm1wLCBjb25zdCBJbnRTaXpl
KiBzaXplKQotewotICAgIEFTU0VSVChibXApOwotCi0gICAgQklUTUFQIGJtcEluZm87Ci0gICAg
R2V0T2JqZWN0KGJtcCwgc2l6ZW9mKEJJVE1BUCksICZibXBJbmZvKTsKLQotICAgIEFTU0VSVChi
bXBJbmZvLmJtQml0c1BpeGVsID09IDMyKTsKLSAgICBpbnQgYnVmZmVyU2l6ZSA9IGJtcEluZm8u
Ym1XaWR0aEJ5dGVzICogYm1wSW5mby5ibUhlaWdodDsKLSAgICAKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFt
ZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3ApCi17Ci0gICAgc2l6ZV90IGZyYW1lcyA9IGZyYW1lQ291bnQoKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGZyYW1lczsgKytpKSB7Ci0gICAgICAgIGF1dG8gaW1hZ2UgPSBm
cmFtZUltYWdlQXRJbmRleChpKS5nZXQoKTsKLSAgICAgICAgYXV0byBpbWFnZVNpemUgPSBuYXRp
dmVJbWFnZVNpemUoaW1hZ2UpOwotICAgICAgICBpZiAoaW1hZ2UgJiYgY2xhbXBUbzxpbnQ+KGlt
YWdlU2l6ZS5oZWlnaHQoKSkgPT0gc3RhdGljX2Nhc3Q8aW50PihzcmNTaXplLmhlaWdodCgpKSAm
JiBjbGFtcFRvPGludD4oaW1hZ2VTaXplLndpZHRoKCkpID09IHN0YXRpY19jYXN0PGludD4oc3Jj
U2l6ZS53aWR0aCgpKSkgewotICAgICAgICAgICAgc2l6ZV90IGN1cnJlbnRGcmFtZSA9IG1fY3Vy
cmVudEZyYW1lOwotICAgICAgICAgICAgbV9jdXJyZW50RnJhbWUgPSBpOwotICAgICAgICAgICAg
ZHJhdyhjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgc3JjU2l6ZS53aWR0aCgp
LCBzcmNTaXplLmhlaWdodCgpKSwgeyBjb21wb3NpdGVPcCB9KTsKLSAgICAgICAgICAgIG1fY3Vy
cmVudEZyYW1lID0gY3VycmVudEZyYW1lOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gTm8gaW1hZ2Ugb2YgdGhlIGNvcnJlY3Qgc2l6ZSB3YXMgZm91bmQs
IGZhbGxiYWNrIHRvIGRyYXdpbmcgdGhlIGN1cnJlbnQgZnJhbWUKLSAgICBGbG9hdFNpemUgaW1h
Z2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKLSAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZs
b2F0UmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgp
KSwgeyBjb21wb3NpdGVPcCB9KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9O
YXRpdmVJbWFnZURpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwCShub25leGlz
dGVudCkKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmF0aXZlSW1hZ2Uu
aCIKLQotI2luY2x1ZGUgIkRpcmVjdDJET3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkdlb21ldHJ5
VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3aW5j
b2RlYy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBJV0lDSW1hZ2luZ0ZhY3Rv
cnkqIGltYWdpbmdGYWN0b3J5KCkKLXsKLSAgICBzdGF0aWMgSVdJQ0ltYWdpbmdGYWN0b3J5KiBp
bWFnaW5nRmFjdG9yeSA9IG51bGxwdHI7Ci0gICAgaWYgKCFpbWFnaW5nRmFjdG9yeSkgewotICAg
ICAgICBIUkVTVUxUIGhyID0gQ29DcmVhdGVJbnN0YW5jZShDTFNJRF9XSUNJbWFnaW5nRmFjdG9y
eSwgbnVsbHB0ciwgQ0xTQ1RYX0lOUFJPQ19TRVJWRVIsIElJRF9QUFZfQVJHUygmaW1hZ2luZ0Zh
Y3RvcnkpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGltYWdpbmdGYWN0b3J5OwotfQotCi1JbnRTaXplIE5hdGl2ZUltYWdlOjpz
aXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUltYWdlLT5HZXRQaXhlbFNpemUo
KTsKLX0KLQotYm9vbCBOYXRpdmVJbWFnZTo6aGFzQWxwaGEoKSBjb25zdAotewotICAgIEQyRDFf
UElYRUxfRk9STUFUIHBpeGVsRm9ybWF0ID0gbV9wbGF0Zm9ybUltYWdlLT5HZXRQaXhlbEZvcm1h
dCgpOwotICAgIHJldHVybiBwaXhlbEZvcm1hdC5hbHBoYU1vZGUgIT0gRDJEMV9BTFBIQV9NT0RF
X0lHTk9SRTsKLX0KLQotQ29sb3IgTmF0aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigp
IGNvbnN0Ci17Ci0gICAgaWYgKHNpemUoKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1
cm4gQ29sb3IoKTsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIENvbG9yKCk7
Ci19Ci0KLURlc3RpbmF0aW9uQ29sb3JTcGFjZSBOYXRpdmVJbWFnZTo6Y29sb3JTcGFjZSgpIGNv
bnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCk7Ci19Ci0KLXZvaWQgTmF0aXZlSW1hZ2U6OmNsZWFyU3ViaW1hZ2VzKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAkocmV2aXNp
b24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhE
aXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw2NjcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5o
IgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBJRDJEMVJlbmRl
clRhcmdldCogc2NyYXRjaFJlbmRlclRhcmdldCgpCi17Ci0gICAgc3RhdGljIENPTVB0cjxJRDJE
MVJlbmRlclRhcmdldD4gcmVuZGVyVGFyZ2V0ID0gYWRvcHRDT00oR3JhcGhpY3NDb250ZXh0Ojpk
ZWZhdWx0UmVuZGVyVGFyZ2V0KCkpOwotICAgIHJldHVybiByZW5kZXJUYXJnZXQuZ2V0KCk7Ci19
Ci0KLVBhdGggUGF0aDo6cG9seWdvblBhdGhGcm9tUG9pbnRzKGNvbnN0IFZlY3RvcjxGbG9hdFBv
aW50PiYgcG9pbnRzKQotewotICAgIFBhdGggcGF0aDsKLSAgICBpZiAocG9pbnRzLnNpemUoKSA8
IDIpCi0gICAgICAgIHJldHVybiBwYXRoOwotCi0gICAgVmVjdG9yPEQyRDFfUE9JTlRfMkYsIDMy
PiBkMmRQb2ludHM7Ci0gICAgZDJkUG9pbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocG9pbnRz
LnNpemUoKSAtIDEpOwotICAgIGZvciAoYXV0byBwb2ludCA6IHBvaW50cykKLSAgICAgICAgZDJk
UG9pbnRzLnVuY2hlY2tlZEFwcGVuZChwb2ludCk7Ci0KLSAgICBwYXRoLm1vdmVUbyhwb2ludHMu
Zmlyc3QoKSk7Ci0KLSAgICBBU1NFUlQocGF0aC5tX2FjdGl2ZVBhdGgpOwotCi0gICAgcGF0aC5t
X2FjdGl2ZVBhdGgtPkFkZExpbmVzKGQyZFBvaW50cy5kYXRhKCksIGQyZFBvaW50cy5zaXplKCkp
OwotICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7Ci0KLSAgICByZXR1cm4gcGF0aDsKLX0KLQotUGF0
aDo6UGF0aCgpID0gZGVmYXVsdDsKLQotUGF0aDo6flBhdGgoKQotewotICAgIGNsZWFyR2VvbWV0
cmllcygpOwotfQotCi1QbGF0Zm9ybVBhdGhQdHIgUGF0aDo6ZW5zdXJlUGxhdGZvcm1QYXRoKCkK
LXsKLSAgICBpZiAoIW1fcGF0aCkgewotICAgICAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250
ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUdlb21ldHJ5R3JvdXAoRDJEMV9GSUxMX01PREVf
V0lORElORywgbnVsbHB0ciwgMCwgJm1fcGF0aCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQo
aHIpKTsKLSAgICAgICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgQVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkgPT0gMSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG1fcGF0aC5nZXQoKTsKLX0KLQotdm9pZCBQYXRoOjpjbGVhckdlb21ldHJp
ZXMoKQotewotICAgIC8vIE1hbnVhbGx5IGNsZWFuIHRoZXNlIHVwIHNvIHRoYXQgd2UgY2FuIHVz
ZSB0aGlzIHZlY3RvciB3aXRoIERpcmVjdDJEIEFQSXMuCi0gICAgZm9yIChhdXRvKiBnZW9tZXRy
eSA6IG1fZ2VvbWV0cmllcykKLSAgICAgICAgZ2VvbWV0cnktPlJlbGVhc2UoKTsKLSAgICBtX2dl
b21ldHJpZXMuY2xlYXIoKTsKLX0KLQotdm9pZCBQYXRoOjphcHBlbmRHZW9tZXRyeShJRDJEMUdl
b21ldHJ5KiBnZW9tZXRyeSkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHVuc2lnbmVkIGJl
Zm9yZSA9IHJlZkNvdW50KGdlb21ldHJ5KTsKLSNlbmRpZgotCi0gICAgdW5zaWduZWQgZ2VvbWV0
cnlDb3VudCA9IG1fcGF0aCA/IG1fcGF0aC0+R2V0U291cmNlR2VvbWV0cnlDb3VudCgpIDogMDsK
LQotICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2VvbWV0cmllcy5zaXplKCkgPT0gZ2VvbWV0cnlDb3Vu
dCk7Ci0KLSAgICBnZW9tZXRyeS0+QWRkUmVmKCk7Ci0gICAgbV9nZW9tZXRyaWVzLmFwcGVuZChn
ZW9tZXRyeSk7Ci0KLSAgICBhdXRvIGZpbGxNb2RlID0gbV9wYXRoID8gbV9wYXRoLT5HZXRGaWxs
TW9kZSgpIDogRDJEMV9GSUxMX01PREVfV0lORElORzsKLQotICAgIG1fcGF0aCA9IG51bGxwdHI7
Ci0KLSAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNy
ZWF0ZUdlb21ldHJ5R3JvdXAoZmlsbE1vZGUsIG1fZ2VvbWV0cmllcy5kYXRhKCksIG1fZ2VvbWV0
cmllcy5zaXplKCksICZtX3BhdGgpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OwotCi0gICAgQVNTRVJUKHJlZkNvdW50KGdlb21ldHJ5KSA9PSBiZWZvcmUgKyAxKTsKLX0KLQot
dm9pZCBQYXRoOjpjcmVhdGVHZW9tZXRyeVdpdGhGaWxsTW9kZShXaW5kUnVsZSB3ZWJraXRGaWxs
TW9kZSwgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4mIHBhdGgpIGNvbnN0Ci17Ci0gICAgUkVM
RUFTRV9BU1NFUlQobV9wYXRoKTsKLQotICAgIGF1dG8gZmlsbE1vZGUgPSAod2Via2l0RmlsbE1v
ZGUgPT0gV2luZFJ1bGU6OkV2ZW5PZGQpID8gRDJEMV9GSUxMX01PREVfQUxURVJOQVRFIDogRDJE
MV9GSUxMX01PREVfV0lORElORzsKLQotICAgIGlmIChmaWxsTW9kZSA9PSBtX3BhdGgtPkdldEZp
bGxNb2RlKCkpIHsKLSAgICAgICAgcGF0aCA9IG1fcGF0aDsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIHVuc2lnbmVkIGdlb21ldHJ5Q291bnQgPSBtX3BhdGgtPkdldFNvdXJjZUdlb21l
dHJ5Q291bnQoKTsKLQotICAgIEFTU0VSVChtX2dlb21ldHJpZXMuc2l6ZSgpID09IGdlb21ldHJ5
Q291bnQpOwotCi0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9y
eSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKGZpbGxNb2RlLCBjb25zdF9jYXN0PElEMkQxR2VvbWV0
cnkqKj4obV9nZW9tZXRyaWVzLmRhdGEoKSksIG1fZ2VvbWV0cmllcy5zaXplKCksICZwYXRoKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICBBU1NFUlQocmVmQ291bnQo
cGF0aC5nZXQoKSkgPT0gMSk7Ci19Ci0KLVBhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3RoZXIpCi17
Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB1bnNpZ25lZCBwYXRoQ291bnQgPSByZWZDb3VudChv
dGhlci5tX3BhdGguZ2V0KCkpOwotICAgIHVuc2lnbmVkIGFjdGl2ZVBhdGhDb3VudCA9IHJlZkNv
dW50KG90aGVyLm1fYWN0aXZlUGF0aC5nZXQoKSk7Ci0jZW5kaWYKLSAgICBtX3BhdGggPSBvdGhl
ci5tX3BhdGg7Ci0gICAgbV9hY3RpdmVQYXRoID0gb3RoZXIubV9hY3RpdmVQYXRoOwotICAgIG1f
Z2VvbWV0cmllcyA9IG90aGVyLm1fZ2VvbWV0cmllczsKLSAgICBmb3IgKGF1dG8qIGdlb21ldHJ5
IDogbV9nZW9tZXRyaWVzKQotICAgICAgICBnZW9tZXRyeS0+QWRkUmVmKCk7Ci0KLSAgICBBU1NF
UlQoIW1fcGF0aCB8fCByZWZDb3VudChtX3BhdGguZ2V0KCkpID09IHBhdGhDb3VudCArIDEpOwot
ICAgIEFTU0VSVCghbV9hY3RpdmVQYXRoIHx8IHJlZkNvdW50KG1fYWN0aXZlUGF0aC5nZXQoKSkg
PT0gYWN0aXZlUGF0aENvdW50ICsgMSk7Ci19Ci0gICAgCi1QYXRoOjpQYXRoKFBhdGgmJiBvdGhl
cikKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHVuc2lnbmVkIHBhdGhDb3VudCA9IHJlZkNv
dW50KG90aGVyLm1fcGF0aC5nZXQoKSk7Ci0gICAgdW5zaWduZWQgYWN0aXZlUGF0aENvdW50ID0g
cmVmQ291bnQob3RoZXIubV9hY3RpdmVQYXRoLmdldCgpKTsKLSNlbmRpZgotICAgIG1fcGF0aCA9
IFdURk1vdmUob3RoZXIubV9wYXRoKTsKLSAgICBtX2FjdGl2ZVBhdGggPSBXVEZNb3ZlKG90aGVy
Lm1fYWN0aXZlUGF0aCk7Ci0gICAgbV9nZW9tZXRyaWVzID0gV1RGTW92ZShvdGhlci5tX2dlb21l
dHJpZXMpOwotCi0gICAgQVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkgPT0gcGF0aENvdW50
KTsKLSAgICBBU1NFUlQocmVmQ291bnQobV9hY3RpdmVQYXRoLmdldCgpKSA9PSBhY3RpdmVQYXRo
Q291bnQpOwotfQotCi1QYXRoJiBQYXRoOjpvcGVyYXRvcj0oY29uc3QgUGF0aCYgb3RoZXIpCi17
Ci0gICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0jaWYgQVNT
RVJUX0VOQUJMRUQKLSAgICB1bnNpZ25lZCBwYXRoQ291bnQgPSByZWZDb3VudChvdGhlci5tX3Bh
dGguZ2V0KCkpOwotICAgIHVuc2lnbmVkIGFjdGl2ZVBhdGhDb3VudCA9IHJlZkNvdW50KG90aGVy
Lm1fYWN0aXZlUGF0aC5nZXQoKSk7Ci0jZW5kaWYKLSAgICBtX3BhdGggPSBvdGhlci5tX3BhdGg7
Ci0gICAgbV9hY3RpdmVQYXRoID0gb3RoZXIubV9hY3RpdmVQYXRoOwotICAgIG1fZ2VvbWV0cmll
cyA9IG90aGVyLm1fZ2VvbWV0cmllczsKLSAgICBmb3IgKGF1dG8qIGdlb21ldHJ5IDogbV9nZW9t
ZXRyaWVzKQotICAgICAgICBnZW9tZXRyeS0+QWRkUmVmKCk7Ci0KLSAgICBBU1NFUlQoIW1fcGF0
aCB8fCByZWZDb3VudChtX3BhdGguZ2V0KCkpID09IHBhdGhDb3VudCArIDEpOwotICAgIEFTU0VS
VCghbV9hY3RpdmVQYXRoIHx8IHJlZkNvdW50KG1fYWN0aXZlUGF0aC5nZXQoKSkgPT0gYWN0aXZl
UGF0aENvdW50ICsgMSk7Ci0KLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVBhdGgmIFBhdGg6Om9w
ZXJhdG9yPShQYXRoJiYgb3RoZXIpCi17Ci0gICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAg
ICByZXR1cm4gKnRoaXM7Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHVuc2lnbmVkIHBhdGhD
b3VudCA9IHJlZkNvdW50KG90aGVyLm1fcGF0aC5nZXQoKSk7Ci0gICAgdW5zaWduZWQgYWN0aXZl
UGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9hY3RpdmVQYXRoLmdldCgpKTsKLSNlbmRpZgot
ICAgIG1fcGF0aCA9IFdURk1vdmUob3RoZXIubV9wYXRoKTsKLSAgICBtX2FjdGl2ZVBhdGggPSBX
VEZNb3ZlKG90aGVyLm1fYWN0aXZlUGF0aCk7Ci0gICAgbV9nZW9tZXRyaWVzID0gV1RGTW92ZShv
dGhlci5tX2dlb21ldHJpZXMpOwotCi0gICAgQVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkg
PT0gcGF0aENvdW50KTsKLSAgICBBU1NFUlQocmVmQ291bnQobV9hY3RpdmVQYXRoLmdldCgpKSA9
PSBhY3RpdmVQYXRoQ291bnQpOwotCi0gICAgcmV0dXJuICp0aGlzOwotfQotCi1ib29sIFBhdGg6
OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAot
ewotICAgIGlmIChpc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFm
YXN0Qm91bmRpbmdSZWN0KCkuY29udGFpbnMocG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBCT09MIGNvbnRhaW5zOwotICAgIGlmICghU1VDQ0VFREVEKG1fcGF0aC0+RmlsbENv
bnRhaW5zUG9pbnQocG9pbnQsIG51bGxwdHIsICZjb250YWlucykpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gY29udGFpbnM7Ci19Ci0KLWJvb2wgUGF0aDo6c3Ryb2tlQ29u
dGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhp
Y3NDb250ZXh0Jik+JiBzdHJva2VTdHlsZUFwcGxpZXIpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHN0
cm9rZVN0eWxlQXBwbGllcik7Ci0KLSAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hDb250ZXh0RDJEKHNj
cmF0Y2hSZW5kZXJUYXJnZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQgc2NyYXRj
aENvbnRleHQoJnNjcmF0Y2hDb250ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRl
cmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwotICAgIHN0cm9rZVN0eWxlQXBwbGllcihzY3Jh
dGNoQ29udGV4dCk7Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHVuc2lnbmVkIGJlZm9yZSA9
IHJlZkNvdW50KG1fcGF0aC5nZXQoKSk7Ci0jZW5kaWYKLQotICAgIEJPT0wgY29udGFpbnNQb2lu
dCA9IGZhbHNlOwotICAgIEhSRVNVTFQgaHIgPSBtX3BhdGgtPlN0cm9rZUNvbnRhaW5zUG9pbnQo
cG9pbnQsIHNjcmF0Y2hDb250ZXh0LnN0cm9rZVRoaWNrbmVzcygpLCBzY3JhdGNoQ29udGV4dC5w
bGF0Zm9ybVN0cm9rZVN0eWxlKCksIG51bGxwdHIsIDEuMGYsICZjb250YWluc1BvaW50KTsKLSAg
ICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VS
VChyZWZDb3VudChtX3BhdGguZ2V0KCkpID09IGJlZm9yZSk7Ci0gICAgcmV0dXJuIGNvbnRhaW5z
UG9pbnQ7Ci19Ci0KLXZvaWQgUGF0aDo6Y2xvc2VBbnlPcGVuR2VvbWV0cmllcyh1bnNpZ25lZCBm
aWd1cmVFbmRTdHlsZSkgY29uc3QKLXsKLSAgICBpZiAobV9maWd1cmVJc09wZW5lZCkgewotICAg
ICAgICBBU1NFUlQobV9hY3RpdmVQYXRoKTsKLQotICAgICAgICBhdXRvIGVuZFN0eWxlID0gc3Rh
dGljX2Nhc3Q8RDJEMV9GSUdVUkVfRU5EPihmaWd1cmVFbmRTdHlsZSk7Ci0gICAgICAgIG1fYWN0
aXZlUGF0aC0+RW5kRmlndXJlKGVuZFN0eWxlKTsKLSAgICAgICAgbV9maWd1cmVJc09wZW5lZCA9
IGZhbHNlOwotCi0gICAgICAgIEhSRVNVTFQgaHIgPSBtX2FjdGl2ZVBhdGgtPkNsb3NlKCk7Ci0g
ICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9Ci0KLSAgICBtX2FjdGl2ZVBhdGgg
PSBudWxscHRyOwotfQotCi12b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNp
emUpCi17Ci0gICAgdHJhbnNmb3JtKEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAxLCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgaWYgKHRyYW5zZm9ybS5pc0lkZW50
aXR5KCkgfHwgaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9hY3RpdmVQ
YXRoKQotICAgICAgICBjbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9PUEVO
KTsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdW5zaWduZWQgYmVmb3JlID0gcmVmQ291bnQo
bV9wYXRoLmdldCgpKTsKLSNlbmRpZgotCi0gICAgQ09NUHRyPElEMkQxVHJhbnNmb3JtZWRHZW9t
ZXRyeT4gdHJhbnNmb3JtZWRQYXRoOwotICAgIGlmICghU1VDQ0VFREVEKEdyYXBoaWNzQ29udGV4
dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVUcmFuc2Zvcm1lZEdlb21ldHJ5KG1fcGF0aC5nZXQo
KSwgdHJhbnNmb3JtLCAmdHJhbnNmb3JtZWRQYXRoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVChyZWZDb3VudChtX3BhdGguZ2V0KCkpID09IGJlZm9yZSk7Ci0gICAgQVNTRVJUKHJl
ZkNvdW50KHRyYW5zZm9ybWVkUGF0aC5nZXQoKSkgPT0gMSk7Ci0KLSAgICBhdXRvIGZpbGxNb2Rl
ID0gbV9wYXRoLT5HZXRGaWxsTW9kZSgpOwotCi0gICAgbV9wYXRoID0gbnVsbHB0cjsKLQotICAg
IGNsZWFyR2VvbWV0cmllcygpOwotCi0gICAgdHJhbnNmb3JtZWRQYXRoLT5BZGRSZWYoKTsKLSAg
ICBtX2dlb21ldHJpZXMuYXBwZW5kKHRyYW5zZm9ybWVkUGF0aC5nZXQoKSk7Ci0KLSAgICBIUkVT
VUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUdlb21ldHJ5
R3JvdXAoZmlsbE1vZGUsIG1fZ2VvbWV0cmllcy5kYXRhKCksIG1fZ2VvbWV0cmllcy5zaXplKCks
ICZtX3BhdGgpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIEFTU0VS
VChyZWZDb3VudChtX3BhdGguZ2V0KCkpID09IDEpOwotfQotCi1GbG9hdFJlY3QgUGF0aDo6Ym91
bmRpbmdSZWN0U2xvd0Nhc2UoKSBjb25zdAotewotICAgIEQyRDFfUkVDVF9GIGJvdW5kcyA9IHsg
fTsKLSAgICBpZiAoIVNVQ0NFRURFRChtX3BhdGgtPkdldEJvdW5kcyhudWxscHRyLCAmYm91bmRz
KSkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIHJldHVybiBib3VuZHM7Ci19
Ci0KLUZsb2F0UmVjdCBQYXRoOjpmYXN0Qm91bmRpbmdSZWN0U2xvd0Nhc2UoKSBjb25zdAotewot
ICAgIEQyRDFfUkVDVF9GIGJvdW5kcyA9IHsgfTsKLSAgICBpZiAoIVNVQ0NFRURFRChtX3BhdGgt
PkdldEJvdW5kcyhudWxscHRyLCAmYm91bmRzKSkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKLQotICAgIHJldHVybiBib3VuZHM7Ci19Ci0KLUZsb2F0UmVjdCBQYXRoOjpmYXN0Qm91bmRp
bmdSZWN0Rm9yU3Ryb2tlKGNvbnN0IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNv
bnRleHQpIGNvbnN0Ci17Ci0gICAgaWYgKGlzTnVsbCgpKQotICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7Ci0KLSAgICBmbG9hdCB0b2xlcmFuY2UgPSAxMDsKLQotICAgIGF1dG8qIHN0cm9rZVN0
eWxlID0gY29uc3RfY2FzdDxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCY+KHBsYXRmb3JtQ29udGV4
dCkuc3Ryb2tlU3R5bGUoKTsKLQotICAgIEQyRDFfUkVDVF9GIGJvdW5kcyA9IHsgfTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChtX3BhdGgtPkdldFdpZGVuZWRCb3VuZHMocGxhdGZvcm1Db250ZXh0LnN0
cm9rZVRoaWNrbmVzcygpLCBzdHJva2VTdHlsZSwgbnVsbHB0ciwgdG9sZXJhbmNlLCAmYm91bmRz
KSkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIHJldHVybiBib3VuZHM7Ci19
Ci0KLUZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoY29uc3QgRnVuY3Rpb248dm9p
ZChHcmFwaGljc0NvbnRleHQmKT4mIHN0cm9rZVN0eWxlQXBwbGllcikgY29uc3QKLXsKLSAgICBp
ZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEIHNjcmF0Y2hDb250ZXh0RDJEKHNjcmF0Y2hSZW5kZXJUYXJnZXQoKSk7
Ci0gICAgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHQoJnNjcmF0Y2hDb250
ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVN
ZW1vcnkpOwotCi0gICAgaWYgKHN0cm9rZVN0eWxlQXBwbGllcikKLSAgICAgICAgc3Ryb2tlU3R5
bGVBcHBsaWVyKHNjcmF0Y2hDb250ZXh0KTsKLQotICAgIHJldHVybiBmYXN0Qm91bmRpbmdSZWN0
Rm9yU3Ryb2tlKHNjcmF0Y2hDb250ZXh0RDJEKTsKLX0KLQotdm9pZCBQYXRoOjpvcGVuRmlndXJl
QXRDdXJyZW50UG9pbnRJZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKG1fZmlndXJlSXNPcGVuZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9hY3RpdmVQYXRoKSB7Ci0gICAgICAgIENP
TVB0cjxJRDJEMVBhdGhHZW9tZXRyeT4gYWN0aXZlUGF0aEdlb21ldHJ5OwotICAgICAgICBHcmFw
aGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUGF0aEdlb21ldHJ5KCZhY3RpdmVQ
YXRoR2VvbWV0cnkpOwotICAgICAgICBIUkVTVUxUIGhyID0gYWN0aXZlUGF0aEdlb21ldHJ5LT5P
cGVuKCZtX2FjdGl2ZVBhdGgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKLSAgICAgICAgYXBwZW5kR2VvbWV0cnkoYWN0aXZlUGF0aEdlb21ldHJ5LmxlYWtSZWYoKSk7
Ci0gICAgICAgIEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0KCkpID09IDEpOwotICAg
IH0KLQotICAgIG1fYWN0aXZlUGF0aC0+U2V0RmlsbE1vZGUoRDJEMV9GSUxMX01PREVfV0lORElO
Ryk7Ci0gICAgbV9hY3RpdmVQYXRoLT5CZWdpbkZpZ3VyZShjdXJyZW50UG9pbnQoKSwgRDJEMV9G
SUdVUkVfQkVHSU5fRklMTEVEKTsKLSAgICBtX2ZpZ3VyZUlzT3BlbmVkID0gdHJ1ZTsKLX0KLQot
dm9pZCBQYXRoOjptb3ZlVG9TbG93Q2FzZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLXsKLSAg
ICBpZiAobV9hY3RpdmVQYXRoKQotICAgICAgICBjbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFf
RklHVVJFX0VORF9PUEVOKTsKLQotICAgIENPTVB0cjxJRDJEMVBhdGhHZW9tZXRyeT4gYWN0aXZl
UGF0aEdlb21ldHJ5OwotICAgIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVh
dGVQYXRoR2VvbWV0cnkoJmFjdGl2ZVBhdGhHZW9tZXRyeSk7Ci0KLSAgICBpZiAoIVNVQ0NFRURF
RChhY3RpdmVQYXRoR2VvbWV0cnktPk9wZW4oJm1fYWN0aXZlUGF0aCkpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhcHBlbmRHZW9tZXRyeShhY3RpdmVQYXRoR2VvbWV0cnkubGVha1JlZigpKTsK
LQotICAgIEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0KCkpID09IDEpOwotCi0gICAg
bV9hY3RpdmVQYXRoLT5TZXRGaWxsTW9kZShEMkQxX0ZJTExfTU9ERV9XSU5ESU5HKTsKLSAgICBt
X2FjdGl2ZVBhdGgtPkJlZ2luRmlndXJlKHBvaW50LCBEMkQxX0ZJR1VSRV9CRUdJTl9GSUxMRUQp
OwotICAgIG1fZmlndXJlSXNPcGVuZWQgPSB0cnVlOwotfQotCi12b2lkIFBhdGg6OmFkZExpbmVU
b1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIG9wZW5GaWd1cmVBdEN1
cnJlbnRQb2ludElmTmVjZXNzYXJ5KCk7Ci0gICAgbV9hY3RpdmVQYXRoLT5BZGRMaW5lKHBvaW50
KTsKLX0KLQotdm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUb1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9p
bnQmIGNwLCBjb25zdCBGbG9hdFBvaW50JiBwKQotewotICAgIG9wZW5GaWd1cmVBdEN1cnJlbnRQ
b2ludElmTmVjZXNzYXJ5KCk7Ci0gICAgbV9hY3RpdmVQYXRoLT5BZGRRdWFkcmF0aWNCZXppZXIo
RDJEMTo6UXVhZHJhdGljQmV6aWVyU2VnbWVudChjcCwgcCkpOwotfQotCi12b2lkIFBhdGg6OmFk
ZEJlemllckN1cnZlVG9TbG93Q2FzZShjb25zdCBGbG9hdFBvaW50JiBjcDEsIGNvbnN0IEZsb2F0
UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYgcCkKLXsKLSAgICBvcGVuRmlndXJlQXRDdXJy
ZW50UG9pbnRJZk5lY2Vzc2FyeSgpOwotICAgIG1fYWN0aXZlUGF0aC0+QWRkQmV6aWVyKEQyRDE6
OkJlemllclNlZ21lbnQoY3AxLCBjcDIsIHApKTsKLX0KLQotdm9pZCBQYXRoOjphZGRBcmNUbyhj
b25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHJhZGl1cykK
LXsKLSAgICBGbG9hdFBvaW50IHAwID0gY3VycmVudFBvaW50KCk7Ci0KLSAgICBpZiAocDEgPT0g
cDAgfHwgcDEgPT0gcDIgfHwgV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHJhZGl1cywgMC4wZikp
Ci0gICAgICAgIHJldHVybiBhZGRMaW5lVG8ocDEpOwotCi0gICAgZmxvYXQgZGlyZWN0aW9uID0g
KHAyLngoKSAtIHAxLngoKSkgKiAocDAueSgpIC0gcDEueSgpKSArIChwMi55KCkgLSBwMS55KCkp
ICogKHAxLngoKSAtIHAwLngoKSk7Ci0gICAgaWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChk
aXJlY3Rpb24sIDAuMGYpKQotICAgICAgICByZXR1cm4gYWRkTGluZVRvKHAxKTsKLQotICAgIGF1
dG8gYTIgPSB0b0Zsb2F0UG9pbnQocDAgLSBwMSkubGVuZ3RoU3F1YXJlZCgpOwotICAgIGF1dG8g
YjIgPSB0b0Zsb2F0UG9pbnQocDEgLSBwMikubGVuZ3RoU3F1YXJlZCgpOwotICAgIGF1dG8gYzIg
PSB0b0Zsb2F0UG9pbnQocDAgLSBwMikubGVuZ3RoU3F1YXJlZCgpOwotCi0gICAgZG91YmxlIGNv
c3ggPSAoYTIgKyBiMiAtIGMyKSAvICgyLjAgKiBzdGQ6OnNxcnQoYTIgKiBiMikpOwotICAgIGRv
dWJsZSBzaW54ID0gc3RkOjpzcXJ0KDEuMCAtIGNvc3ggKiBjb3N4KTsKLSAgICBkb3VibGUgZCA9
IHJhZGl1cyAvICgoMSAtIGNvc3gpIC8gc2lueCk7Ci0KLSAgICBhdXRvIGFuID0gdG9GbG9hdFBv
aW50KHAxIC0gcDApLnNjYWxlZCgxLjAgLyBzdGQ6OnNxcnQoYTIpKTsKLSAgICBhdXRvIGJuID0g
dG9GbG9hdFBvaW50KHAxIC0gcDIpLnNjYWxlZCgxLjAgLyBzdGQ6OnNxcnQoYjIpKTsKLQotICAg
IGF1dG8gc3RhcnRQb2ludCA9IHRvRmxvYXRQb2ludChwMSAtIGFuLnNjYWxlZChkKSk7Ci0gICAg
YXV0byBwNCA9IHRvRmxvYXRQb2ludChwMSAtIGJuLnNjYWxlZChkKSk7Ci0KLSAgICBib29sIGFu
dGljbG9ja3dpc2UgPSAoZGlyZWN0aW9uIDwgMCk7Ci0gICAgYW4uc2NhbGUocmFkaXVzICogKGFu
dGljbG9ja3dpc2UgPyAxIDogLTEpKTsKLQotICAgIEZsb2F0UG9pbnQgY2VudGVyKHN0YXJ0UG9p
bnQueCgpICsgYW4ueSgpLCBzdGFydFBvaW50LnkoKSAtIGFuLngoKSk7Ci0KLSAgICBkb3VibGUg
YW5nbGUwID0gYXRhbjIoc3RhcnRQb2ludC55KCkgLSBjZW50ZXIueSgpLCBzdGFydFBvaW50Lngo
KSAtIGNlbnRlci54KCkpOwotICAgIGRvdWJsZSBhbmdsZTEgPSBhdGFuMihwNC55KCkgLSBjZW50
ZXIueSgpLCBwNC54KCkgLSBjZW50ZXIueCgpKTsKLQotICAgIG9wZW5GaWd1cmVBdEN1cnJlbnRQ
b2ludElmTmVjZXNzYXJ5KCk7Ci0gICAgYWRkTGluZVRvKHN0YXJ0UG9pbnQpOwotICAgIGFkZEFy
YyhjZW50ZXIsIHJhZGl1cywgYW5nbGUwLCBhbmdsZTEsIGFudGljbG9ja3dpc2UpOwotfQotCi1z
dGF0aWMgYm9vbCBlcXVhbFJhZGl1c1dpZHRocyhjb25zdCBGbG9hdFNpemUmIHRvcExlZnRSYWRp
dXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90
dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdodFJhZGl1cykKLXsKLSAg
ICByZXR1cm4gdG9wTGVmdFJhZGl1cy53aWR0aCgpID09IHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkK
LSAgICAgICAgJiYgdG9wUmlnaHRSYWRpdXMud2lkdGgoKSA9PSBib3R0b21MZWZ0UmFkaXVzLndp
ZHRoKCkKLSAgICAgICAgJiYgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpID09IGJvdHRvbVJpZ2h0
UmFkaXVzLndpZHRoKCk7Ci19Ci0KLXN0YXRpYyBib29sIGVxdWFsUmFkaXVzSGVpZ2h0cyhjb25z
dCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRp
dXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBi
b3R0b21SaWdodFJhZGl1cykKLXsKLSAgICByZXR1cm4gdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSA9
PSBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpCi0gICAgICAgICYmIGJvdHRvbUxlZnRSYWRpdXMu
aGVpZ2h0KCkgPT0gdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkKLSAgICAgICAgJiYgdG9wUmlnaHRS
YWRpdXMuaGVpZ2h0KCkgPT0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCk7Ci19Ci0KLXZvaWQg
UGF0aDo6cGxhdGZvcm1BZGRQYXRoRm9yUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmln
aHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRT
aXplJiBib3R0b21SaWdodFJhZGl1cykKLXsKLSAgICBib29sIGVxdWFsV2lkdGhzID0gZXF1YWxS
YWRpdXNXaWR0aHModG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRp
dXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKLSAgICBib29sIGVxdWFsSGVpZ2h0cyA9IGVxdWFsUmFk
aXVzSGVpZ2h0cyh0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1
cywgYm90dG9tUmlnaHRSYWRpdXMpOwotCi0gICAgaWYgKGVxdWFsV2lkdGhzICYmIGVxdWFsSGVp
Z2h0cykgewotICAgICAgICAvLyBFbnN1cmUgdGhhdCBDRyBjYW4gcmVuZGVyIHRoZSByb3VuZGVk
IHJlY3QuCi0gICAgICAgIGZsb2F0IHJhZGl1c1dpZHRoID0gdG9wTGVmdFJhZGl1cy53aWR0aCgp
OwotICAgICAgICBmbG9hdCByYWRpdXNIZWlnaHQgPSB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpOwot
ICAgICAgICBhdXRvIHJlY3RUb0RyYXcgPSBEMkQxOjpSZWN0RihyZWN0LngoKSwgcmVjdC55KCks
IHJlY3QubWF4WCgpLCByZWN0Lm1heFkoKSk7Ci0KLSAgICAgICAgQ09NUHRyPElEMkQxUm91bmRl
ZFJlY3RhbmdsZUdlb21ldHJ5PiByb3VuZFJlY3Q7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBHcmFw
aGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUm91bmRlZFJlY3RhbmdsZUdlb21l
dHJ5KEQyRDE6OlJvdW5kZWRSZWN0KHJlY3RUb0RyYXcsIHJhZGl1c1dpZHRoLCByYWRpdXNIZWln
aHQpLCAmcm91bmRSZWN0KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0gICAgICAgIGFwcGVuZEdlb21ldHJ5KHJvdW5kUmVjdC5nZXQoKSk7Ci0gICAgICAgIEFTU0VS
VChyZWZDb3VudChyb3VuZFJlY3QuZ2V0KCkpID09IDIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgYWRkQmV6aWVyc0ZvclJvdW5kZWRSZWN0KHJlY3QsIHRvcExlZnRSYWRpdXMsIHRv
cFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7Ci19Ci0K
LXZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKLXsKLSAgICBpZiAoaXNOdWxsKCkpIHsKLSAgICAg
ICAgbV9hY3RpdmVQYXRoID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICghbV9hY3RpdmVQYXRoKSB7Ci0gICAgICAgIEFTU0VSVCghbV9maWd1cmVJc09wZW5lZCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQy
RDFfRklHVVJFX0VORF9DTE9TRUQpOwotfQotCi1zdGF0aWMgRmxvYXRQb2ludCBhcmNTdGFydChj
b25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSkK
LXsKLSAgICBGbG9hdFBvaW50IHN0YXJ0aW5nUG9pbnQgPSBjZW50ZXI7Ci0gICAgZmxvYXQgc3Rh
cnRYID0gcmFkaXVzICogc3RkOjpjb3Moc3RhcnRBbmdsZSk7Ci0gICAgZmxvYXQgc3RhcnRZID0g
cmFkaXVzICogc3RkOjpzaW4oc3RhcnRBbmdsZSk7Ci0gICAgc3RhcnRpbmdQb2ludC5tb3ZlKHN0
YXJ0WCwgc3RhcnRZKTsKLSAgICByZXR1cm4gc3RhcnRpbmdQb2ludDsKLX0KLQotY29uc3QgZmxv
YXQgdHdvUGkgPSAyLjBmICogcGlGbG9hdDsKLQotc3RhdGljIHZvaWQgZHJhd0FyY1NlY3Rpb24o
SUQyRDFHZW9tZXRyeVNpbmsqIHNpbmssIGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQg
cmFkaXVzLCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBhbnRpY2xvY2t3
aXNlKQotewotICAgIC8vIERpcmVjdDJEIHdhbnRzIHVzIHRvIHNwZWNpZnkgdGhlIGVuZCBwb2lu
dCBvZiB0aGUgYXJjLCBub3QgdGhlIGNlbnRlci4gSXQgd2lsbCBiZSBkcmF3biBmcm9tCi0gICAg
Ly8gd2hhdGV2ZXIgdGhlIGN1cnJlbnQgcG9pbnQgaW4gdGhlICdtX2FjdGl2ZVBhdGgnIGlzLgot
ICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQgPSBjZW50ZXI7Ci0gICAgZmxvYXQgZW5kWCA9IHJhZGl1
cyAqIHN0ZDo6Y29zKGVuZEFuZ2xlKTsKLSAgICBmbG9hdCBlbmRZID0gcmFkaXVzICogc3RkOjpz
aW4oZW5kQW5nbGUpOwotICAgIGVuZFBvaW50Lm1vdmUoZW5kWCwgZW5kWSk7Ci0KLSAgICBEMkQx
X1NXRUVQX0RJUkVDVElPTiBkaXJlY3Rpb24gPSBhbnRpY2xvY2t3aXNlID8gRDJEMV9TV0VFUF9E
SVJFQ1RJT05fQ09VTlRFUl9DTE9DS1dJU0UgOiBEMkQxX1NXRUVQX0RJUkVDVElPTl9DTE9DS1dJ
U0U7Ci0gICAgc2luay0+QWRkQXJjKEQyRDE6OkFyY1NlZ21lbnQoZW5kUG9pbnQsIEQyRDE6OlNp
emVGKHJhZGl1cywgcmFkaXVzKSwgMCwgZGlyZWN0aW9uLCBEMkQxX0FSQ19TSVpFX1NNQUxMKSk7
Ci19Ci0KLXZvaWQgUGF0aDo6YWRkQXJjU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYgY2VudGVy
LCBmbG9hdCByYWRpdXMsIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IGVuZEFuZ2xlLCBib29sIGFu
dGljbG9ja3dpc2UpCi17Ci0gICAgYXV0byBhcmNTdGFydFBvaW50ID0gYXJjU3RhcnQoY2VudGVy
LCByYWRpdXMsIHN0YXJ0QW5nbGUpOwotICAgIGlmICghbV9hY3RpdmVQYXRoKQotICAgICAgICBt
b3ZlVG8oYXJjU3RhcnRQb2ludCk7Ci0gICAgZWxzZSBpZiAoIWFyZUVzc2VudGlhbGx5RXF1YWwo
Y3VycmVudFBvaW50KCksIGFyY1N0YXJ0UG9pbnQpKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcmMg
ZGVmaW5lZCBieSB0aGUgY2VudGVyIGFuZCByYWRpdXMgZG9lcyBub3QgaW50ZXJzZWN0IHRoZSBj
dXJyZW50IHBvc2l0aW9uLAotICAgICAgICAvLyB3ZSBuZWVkIHRvIGRyYXcgYSBsaW5lIGZyb20g
dGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBhcmMuCi0g
ICAgICAgIGFkZExpbmVUbyhhcmNTdGFydFBvaW50KTsKLSAgICB9Ci0KLSAgICBpZiAoV1RGOjph
cmVFc3NlbnRpYWxseUVxdWFsKHN0ZDo6YWJzKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSksIHR3b1Bp
KSkKLSAgICAgICAgcmV0dXJuIGFkZEVsbGlwc2UoRmxvYXRSZWN0KGNlbnRlci54KCkgLSByYWRp
dXMsIGNlbnRlci55KCkgLSByYWRpdXMsIDIuMCAqIHJhZGl1cywgMi4wICogcmFkaXVzKSk7Ci0K
LSAgICBpZiAoYW50aWNsb2Nrd2lzZSkgewotICAgICAgICBpZiAoZW5kQW5nbGUgPiBzdGFydEFu
Z2xlKSB7Ci0gICAgICAgICAgICBlbmRBbmdsZSAtPSB0d29QaSAqIHN0ZDo6Y2VpbCgoZW5kQW5n
bGUgLSBzdGFydEFuZ2xlKSAvIHR3b1BpKTsKLSAgICAgICAgICAgIEFTU0VSVChlbmRBbmdsZSA8
PSBzdGFydEFuZ2xlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGFy
dEFuZ2xlID4gZW5kQW5nbGUpIHsKLSAgICAgICAgICAgIHN0YXJ0QW5nbGUgLT0gdHdvUGkgKiBz
dGQ6OmNlaWwoKHN0YXJ0QW5nbGUgLSBlbmRBbmdsZSkgLyB0d29QaSk7Ci0gICAgICAgICAgICBB
U1NFUlQoc3RhcnRBbmdsZSA8PSBlbmRBbmdsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBj
b25zdCBmbG9hdCBkZWx0YSA9IGFudGljbG9ja3dpc2UgPyAtcGlPdmVyVHdvRmxvYXQgOiBwaU92
ZXJUd29GbG9hdDsKLSAgICBmbG9hdCByZW1haW5pbmdBcmNBbmdsZSA9IGVuZEFuZ2xlIC0gc3Rh
cnRBbmdsZTsKLQotICAgIHdoaWxlICgocmVtYWluaW5nQXJjQW5nbGUgPiAwICYmIHJlbWFpbmlu
Z0FyY0FuZ2xlID4gZGVsdGEpIHx8IChyZW1haW5pbmdBcmNBbmdsZSA8IDAgJiYgcmVtYWluaW5n
QXJjQW5nbGUgPCBkZWx0YSkpIHsKLSAgICAgICAgY29uc3QgZG91YmxlIGN1cnJlbnRFbmRBbmds
ZSA9IHN0YXJ0QW5nbGUgKyBkZWx0YTsKLSAgICAgICAgZHJhd0FyY1NlY3Rpb24obV9hY3RpdmVQ
YXRoLmdldCgpLCBjZW50ZXIsIHJhZGl1cywgc3RhcnRBbmdsZSwgY3VycmVudEVuZEFuZ2xlLCBh
bnRpY2xvY2t3aXNlKTsKLSAgICAgICAgc3RhcnRBbmdsZSA9IGN1cnJlbnRFbmRBbmdsZTsKLSAg
ICAgICAgcmVtYWluaW5nQXJjQW5nbGUgLT0gZGVsdGE7Ci0gICAgfQotCi0gICAgLy8gSGFuZGxl
IGFueSByZW1haW5pbmcgcGFydCBvZiB0aGUgYXJjOgotICAgIGlmIChzdGQ6OmFicyhyZW1haW5p
bmdBcmNBbmdsZSkgPiAxZS02KQotICAgICAgICBkcmF3QXJjU2VjdGlvbihtX2FjdGl2ZVBhdGgu
Z2V0KCksIGNlbnRlciwgcmFkaXVzLCBzdGFydEFuZ2xlLCBzdGFydEFuZ2xlICsgcmVtYWluaW5n
QXJjQW5nbGUsIGFudGljbG9ja3dpc2UpOwotfQotCi12b2lkIFBhdGg6OmFkZFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByKQotewotICAgIGlmICghbV9hY3RpdmVQYXRoKQotICAgICAgICBtb3ZlVG8o
ci5sb2NhdGlvbigpKTsKLQotICAgIENPTVB0cjxJRDJEMVJlY3RhbmdsZUdlb21ldHJ5PiByZWN0
YW5nbGU7Ci0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgp
LT5DcmVhdGVSZWN0YW5nbGVHZW9tZXRyeShyLCAmcmVjdGFuZ2xlKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICBhcHBlbmRHZW9tZXRyeShyZWN0YW5nbGUuZ2V0KCkp
OwotICAgIEFTU0VSVChyZWZDb3VudChyZWN0YW5nbGUuZ2V0KCkpID09IDIpOwotfQotCi12b2lk
IFBhdGg6OmFkZEVsbGlwc2UoRmxvYXRQb2ludCBwLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRp
dXNZLCBmbG9hdCByb3RhdGlvbiwgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJv
b2wgYW50aWNsb2Nrd2lzZSkKLXsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwotICAg
IHRyYW5zZm9ybS50cmFuc2xhdGUocC54KCksIHAueSgpKS5yb3RhdGUocmFkMmRlZyhyb3RhdGlv
bikpLnNjYWxlKHJhZGl1c1gsIHJhZGl1c1kpOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcikKLXsKLSAgICBpZiAo
IW1fYWN0aXZlUGF0aCkKLSAgICAgICAgbW92ZVRvKHIubG9jYXRpb24oKSk7Ci0KLSAgICBDT01Q
dHI8SUQyRDFFbGxpcHNlR2VvbWV0cnk+IGVsbGlwc2U7Ci0gICAgLy8gTm90ZTogVGhlIHJhZGlp
IG9mIHRoZSBlbGxpcHNlIGNvbnRhaW5lZCB3aXRoaW4gYSByZWN0YW5nZSBhcmUgaGFsZiB0aGUg
d2lkdGggYW5kIGhlaWdodCBvZiB0aGUgcmVjdC4KLSAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3ND
b250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUVsbGlwc2VHZW9tZXRyeShEMkQxOjpFbGxp
cHNlKHIuY2VudGVyKCksIDAuNSAqIHIud2lkdGgoKSwgMC41ICogci5oZWlnaHQoKSksICZlbGxp
cHNlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICBhcHBlbmRHZW9t
ZXRyeShlbGxpcHNlLmdldCgpKTsKLSAgICBBU1NFUlQocmVmQ291bnQoZWxsaXBzZS5nZXQoKSkg
PT0gMik7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBpZiAoIXBhdGgucGxhdGZvcm1QYXRo
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghdHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0KLXZvaWQg
UGF0aDo6Y2xlYXIoKQotewotICAgIGlmIChpc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9wYXRoID0gbnVsbHB0cjsKLSAgICBtX2FjdGl2ZVBhdGggPSBudWxscHRyOwotICAgIGNs
ZWFyR2VvbWV0cmllcygpOwotfQotCi1ib29sIFBhdGg6OmlzRW1wdHlTbG93Q2FzZSgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX3BhdGgtPkdldFNvdXJjZUdlb21ldHJ5Q291bnQoKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBBU1NFUlQobV9wYXRoLT5HZXRTb3VyY2VHZW9tZXRyeUNvdW50
KCkgPT0gbV9nZW9tZXRyaWVzLnNpemUoKSk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUZs
b2F0UG9pbnQgUGF0aDo6Y3VycmVudFBvaW50U2xvd0Nhc2UoKSBjb25zdAotewotICAgIGZsb2F0
IGxlbmd0aCA9IDA7Ci0gICAgSFJFU1VMVCBociA9IG1fcGF0aC0+Q29tcHV0ZUxlbmd0aChudWxs
cHRyLCAmbGVuZ3RoKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBG
bG9hdFBvaW50KCk7Ci0KLSAgICBEMkQxX1BPSU5UXzJGIHBvaW50ID0geyB9OwotICAgIEQyRDFf
UE9JTlRfMkYgdGFuZ2VudCA9IHsgfTsKLSAgICBociA9IG1fcGF0aC0+Q29tcHV0ZVBvaW50QXRM
ZW5ndGgobGVuZ3RoLCBudWxscHRyLCAmcG9pbnQsICZ0YW5nZW50KTsKLSAgICBpZiAoIVNVQ0NF
RURFRChocikpCi0gICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7Ci0KLSAgICByZXR1cm4gcG9p
bnQ7Ci19Ci0KLWZsb2F0IFBhdGg6Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgZmxvYXQgbGVuZ3Ro
ID0gMDsKLSAgICBIUkVTVUxUIGhyID0gbV9wYXRoLT5Db21wdXRlTGVuZ3RoKG51bGxwdHIsICZs
ZW5ndGgpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICByZXR1cm4gbGVuZ3RoOwotfQotCi12b2lkIFBhdGg6OmFwcGx5U2xvd0Nhc2UoY29uc3QgUGF0
aEFwcGxpZXJGdW5jdGlvbiYpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
Ym9vbCBQYXRoOjppc051bGwoKSBjb25zdAotewotICAgIHJldHVybiAhbV9wYXRoOwotfQotCi19
Ci0KLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJELmNwcAkocmV2aXNp
b24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRl
cm5EaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUGF0dGVybi5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUlEMkQxQml0
bWFwQnJ1c2gqIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGZsb2F0IGFscGhhLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJT
cGFjZVRyYW5zZm9ybWF0aW9uKSBjb25zdAotewotICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJu
VHJhbnNmb3JtID0gdXNlclNwYWNlVHJhbnNmb3JtYXRpb24gKiBtX3BhdHRlcm5TcGFjZVRyYW5z
Zm9ybWF0aW9uOwotICAgIGF1dG8gYml0bWFwQnJ1c2hQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFw
QnJ1c2hQcm9wZXJ0aWVzKCk7Ci0gICAgYml0bWFwQnJ1c2hQcm9wZXJ0aWVzLmV4dGVuZE1vZGVY
ID0gbV9yZXBlYXRYID8gRDJEMV9FWFRFTkRfTU9ERV9XUkFQIDogRDJEMV9FWFRFTkRfTU9ERV9D
TEFNUDsKLSAgICBiaXRtYXBCcnVzaFByb3BlcnRpZXMuZXh0ZW5kTW9kZVkgPSBtX3JlcGVhdFkg
PyBEMkQxX0VYVEVORF9NT0RFX1dSQVAgOiBEMkQxX0VYVEVORF9NT0RFX0NMQU1QOwotCi0gICAg
YXV0byBicnVzaFByb3BlcnRpZXMgPSBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKTsKLSAgICBicnVz
aFByb3BlcnRpZXMudHJhbnNmb3JtID0gcGF0dGVyblRyYW5zZm9ybTsKLSAgICBicnVzaFByb3Bl
cnRpZXMub3BhY2l0eSA9IGFscGhhOwotCi0gICAgYXV0byYgcGF0dGVybkltYWdlID0gdGlsZUlt
YWdlKCk7Ci0gICAgYXV0byBuYXRpdmVJbWFnZSA9IHBhdHRlcm5JbWFnZS5uYXRpdmVJbWFnZSgm
Y29udGV4dCk7Ci0gICAgaWYgKCFuYXRpdmVJbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBhdXRvIHBsYXRmb3JtQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQocGxhdGZvcm1Db250ZXh0KTsKLQotICAgIElEMkQxQml0bWFw
QnJ1c2gqIHBhdHRlcm5CcnVzaCA9IG51bGxwdHI7Ci0gICAgSFJFU1VMVCBociA9IHBsYXRmb3Jt
Q29udGV4dC0+cmVuZGVyVGFyZ2V0KCktPkNyZWF0ZUJpdG1hcEJydXNoKG5hdGl2ZUltYWdlLmdl
dCgpLCAmYml0bWFwQnJ1c2hQcm9wZXJ0aWVzLCAmYnJ1c2hQcm9wZXJ0aWVzLCAmcGF0dGVybkJy
dXNoKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgcmV0dXJuIHBhdHRlcm5CcnVz
aDsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNw
cAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDM5NyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJE
LmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJlY3QyRE9wZXJhdGlvbnMu
aCIKLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBFbmNhcHN1bGF0ZXMgdGhlIGFkZGl0aW9uYWwgcGFp
bnRpbmcgc3RhdGUgaW5mb3JtYXRpb24gd2Ugc3RvcmUgZm9yIGVhY2gKLS8vIHB1c2hlZCBncmFw
aGljcyBzdGF0ZS4KLWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpTdGF0ZSB7Ci1wdWJs
aWM6Ci0gICAgU3RhdGUoKSA9IGRlZmF1bHQ7Ci0KLSAgICBDT01QdHI8SUQyRDFEcmF3aW5nU3Rh
dGVCbG9jaz4gbV9kcmF3aW5nU3RhdGVCbG9jazsKLSAgICBDT01QdHI8SUQyRDFMYXllcj4gbV9h
Y3RpdmVMYXllcjsKLSAgICBWZWN0b3I8RGlyZWN0MkRMYXllclR5cGU+IG1fY2xpcHM7Ci19Owot
Ci1QbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQoSUQyRDFS
ZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCwgRnVuY3Rpb248dm9pZCgpPiYmIHByZURyYXdIYW5k
bGVyLCBGdW5jdGlvbjx2b2lkKCk+JiYgcG9zdERyYXdIYW5kbGVyKQotICAgIDogbV9yZW5kZXJU
YXJnZXQocmVuZGVyVGFyZ2V0KQotICAgICwgbV9wcmVEcmF3SGFuZGxlcihXVEZNb3ZlKHByZURy
YXdIYW5kbGVyKSkKLSAgICAsIG1fcG9zdERyYXdIYW5kbGVyKFdURk1vdmUocG9zdERyYXdIYW5k
bGVyKSkKLXsKLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKFN0YXRlKCkpOwotICAgIG1fc3RhdGUg
PSAmbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLQotICAgIG1fZGV2aWNlQ29udGV4dC5xdWVyeShtX3Jl
bmRlclRhcmdldC5nZXQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoISFtX2RldmljZUNvbnRleHQp
OwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRSZW5kZXJUYXJnZXQoSUQy
RDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsKLSAgICBtX3JlbmRlclRhcmdldCA9IHJl
bmRlclRhcmdldDsKLQotICAgIG1fZGV2aWNlQ29udGV4dC5xdWVyeShtX3JlbmRlclRhcmdldC5n
ZXQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoISFtX2RldmljZUNvbnRleHQpOwotfQotCi1JRDJE
MUxheWVyKiBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6Y2xpcExheWVyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9zdGF0ZS0+bV9hY3RpdmVMYXllci5nZXQoKTsKLX0KLQotdm9pZCBQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRDo6Y2xlYXJDbGlwcyhWZWN0b3I8RGlyZWN0MkRMYXllclR5cGU+JiBj
bGlwcykKLXsKLSAgICBmb3IgKGF1dG8gY2xpcFR5cGUgPSBjbGlwcy5yYmVnaW4oKTsgY2xpcFR5
cGUgIT0gY2xpcHMucmVuZCgpOyArK2NsaXBUeXBlKSB7Ci0gICAgICAgIGlmICgqY2xpcFR5cGUg
PT0gQXhpc0FsaWduZWRDbGlwKQotICAgICAgICAgICAgbV9yZW5kZXJUYXJnZXQtPlBvcEF4aXNB
bGlnbmVkQ2xpcCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3JlbmRlclRhcmdldC0+
UG9wTGF5ZXIoKTsKLSAgICB9Ci0KLSAgICBjbGlwcy5jbGVhcigpOwotfQotCi12b2lkIFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEOjpyZXN0b3JlKCkKLXsKLSAgICBBU1NFUlQobV9yZW5kZXJUYXJn
ZXQpOwotCi0gICAgLy8gTm8gbmVlZCB0byByZXN0b3JlIGlmIHdlIGRvbid0IGhhdmUgYSBzYXZl
ZCBlbGVtZW50IG9uIHRoZSBzdGFjay4KLSAgICBpZiAobV9zdGF0ZVN0YWNrLnNpemUoKSA9PSAx
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiByZXN0b3JlU3RhdGUgPSBtX3N0YXRlU3Rh
Y2subGFzdCgpOwotICAgIGlmIChyZXN0b3JlU3RhdGUubV9kcmF3aW5nU3RhdGVCbG9jaykgewot
ICAgICAgICBtX3JlbmRlclRhcmdldC0+UmVzdG9yZURyYXdpbmdTdGF0ZShyZXN0b3JlU3RhdGUu
bV9kcmF3aW5nU3RhdGVCbG9jay5nZXQoKSk7Ci0gICAgICAgIHJlc3RvcmVTdGF0ZS5tX2RyYXdp
bmdTdGF0ZUJsb2NrID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBjbGVhckNsaXBzKHJlc3RvcmVT
dGF0ZS5tX2NsaXBzKTsKLQotICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgQVNT
RVJUKCFtX3N0YXRlU3RhY2suaXNFbXB0eSgpKTsKLSAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFj
ay5sYXN0KCk7Ci19Ci0KLVBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjp+UGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNh
dmUoKQotewotICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpID49IDEpOyAvLyBUaGVyZSBz
aG91bGQgYWx3YXlzIGJlIG9uZSBzdGF0ZSBvbiB0aGUgc3RhY2suCi0gICAgQVNTRVJUKG1fcmVu
ZGVyVGFyZ2V0KTsKLQotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoU3RhdGUoKSk7Ci0gICAgbV9z
dGF0ZSA9ICZtX3N0YXRlU3RhY2subGFzdCgpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0OjpzeXN0
ZW1GYWN0b3J5KCktPkNyZWF0ZURyYXdpbmdTdGF0ZUJsb2NrKCZtX3N0YXRlLT5tX2RyYXdpbmdT
dGF0ZUJsb2NrKTsKLQotICAgIG1fcmVuZGVyVGFyZ2V0LT5TYXZlRHJhd2luZ1N0YXRlKG1fc3Rh
dGUtPm1fZHJhd2luZ1N0YXRlQmxvY2suZ2V0KCkpOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEOjpwdXNoUmVuZGVyQ2xpcChEaXJlY3QyRExheWVyVHlwZSBjbGlwVHlwZSkKLXsK
LSAgICBBU1NFUlQoaGFzU2F2ZWRTdGF0ZSgpKTsKLSAgICBtX3N0YXRlLT5tX2NsaXBzLmFwcGVu
ZChjbGlwVHlwZSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldEFjdGl2
ZUxheWVyKENPTVB0cjxJRDJEMUxheWVyPiYmIGxheWVyKQotewotICAgIEFTU0VSVChoYXNTYXZl
ZFN0YXRlKCkpOwotICAgIG1fc3RhdGUtPm1fYWN0aXZlTGF5ZXIgPSBsYXllcjsKLX0KLQotQ09N
UHRyPElEMkQxU29saWRDb2xvckJydXNoPiBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6YnJ1c2hX
aXRoQ29sb3IoY29uc3QgRDJEMV9DT0xPUl9GJiBjb2xvcikKLXsKLSAgICBhdXRvIGNvbG9yS2V5
ID0gY29sb3JDb252ZXJ0PFNSR0JBPHVpbnQ4X3Q+PihTUkdCQTxmbG9hdD4geyBjb2xvci5yLCBj
b2xvci5nLCBjb2xvci5iLCBjb2xvci5hIH0pOwotCi0gICAgaWYgKCFjb2xvcktleSkgewotICAg
ICAgICBpZiAoIW1femVyb0JydXNoKQotICAgICAgICAgICAgbV9yZW5kZXJUYXJnZXQtPkNyZWF0
ZVNvbGlkQ29sb3JCcnVzaChjb2xvciwgJm1femVyb0JydXNoKTsKLSAgICAgICAgcmV0dXJuIG1f
emVyb0JydXNoOwotICAgIH0KLQotICAgIGlmIChjb2xvcktleSA9PSAweEZGRkZGRkZGKSB7Ci0g
ICAgICAgIGlmICghbV93aGl0ZUJydXNoKQotICAgICAgICAgICAgbV9yZW5kZXJUYXJnZXQtPkNy
ZWF0ZVNvbGlkQ29sb3JCcnVzaChjb2xvciwgJm1fd2hpdGVCcnVzaCk7Ci0gICAgICAgIHJldHVy
biBtX3doaXRlQnJ1c2g7Ci0gICAgfQotCi0gICAgYXV0byBleGlzdGluZ0JydXNoID0gbV9zb2xp
ZENvbG9yZWRCcnVzaENhY2hlLmVuc3VyZShjb2xvcktleSwgW3RoaXMsIGNvbG9yXSB7Ci0gICAg
ICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gY29sb3JCcnVzaDsKLSAgICAgICAgbV9y
ZW5kZXJUYXJnZXQtPkNyZWF0ZVNvbGlkQ29sb3JCcnVzaChjb2xvciwgJmNvbG9yQnJ1c2gpOwot
ICAgICAgICByZXR1cm4gY29sb3JCcnVzaDsKLSAgICB9KTsKLQotICAgIHJldHVybiBleGlzdGlu
Z0JydXNoLml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RDo6cmVjb21wdXRlU3Ryb2tlU3R5bGUoKQotewotICAgIGlmICghbV9zdHJva2VTeWxlSXNEaXJ0
eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kMmRTdHJva2VTdHlsZSA9IG51bGxwdHI7Ci0K
LSAgICBEYXNoQXJyYXkgZGFzaGVzOwotICAgIGZsb2F0IHBhdHRlcm5PZmZzZXQgPSAwOwotICAg
IGF1dG8gZGFzaFN0eWxlID0gRDJEMV9EQVNIX1NUWUxFX1NPTElEOwotCi0gICAgaWYgKChtX3N0
cm9rZVN0eWxlICE9IFNvbGlkU3Ryb2tlKSAmJiAobV9zdHJva2VTdHlsZSAhPSBOb1N0cm9rZSkp
IHsKLSAgICAgICAgZGFzaFN0eWxlID0gRDJEMV9EQVNIX1NUWUxFX0NVU1RPTTsKLSAgICAgICAg
cGF0dGVybk9mZnNldCA9IG1fcGF0dGVybk9mZnNldCAvIG1fc3Ryb2tlVGhpY2tuZXNzOwotICAg
ICAgICBkYXNoZXMgPSBtX2Rhc2hlczsKLQotICAgICAgICAvLyBJbiBEaXJlY3QyRCwgZGFzaGVz
IGFuZCBkb3RzIGFyZSBkZWZpbmVkIGluIHRlcm1zIG9mIHRoZSByYXRpbyBvZiB0aGUgZGFzaCBs
ZW5ndGggdG8gdGhlIGxpbmUgdGhpY2tuZXNzLgotICAgICAgICBmb3IgKGF1dG8mIGRhc2ggOiBk
YXNoZXMpCi0gICAgICAgICAgICBkYXNoIC89IG1fc3Ryb2tlVGhpY2tuZXNzOwotICAgIH0KLQot
ICAgIGF1dG8gc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzID0gRDJEMTo6U3Ryb2tlU3R5bGVQcm9wZXJ0
aWVzKG1fbGluZUNhcCwgbV9saW5lQ2FwLCBtX2xpbmVDYXAsIG1fbGluZUpvaW4sIG1fbWl0ZXJM
aW1pdCwgZGFzaFN0eWxlLCBwYXR0ZXJuT2Zmc2V0KTsKLSAgICBHcmFwaGljc0NvbnRleHQ6OnN5
c3RlbUZhY3RvcnkoKS0+Q3JlYXRlU3Ryb2tlU3R5bGUoJnN0cm9rZVN0eWxlUHJvcGVydGllcywg
ZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSwgJm1fZDJkU3Ryb2tlU3R5bGUpOwotCi0gICAg
bV9zdHJva2VTeWxlSXNEaXJ0eSA9IGZhbHNlOwotfQotCi1JRDJEMVN0cm9rZVN0eWxlKiBQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRDo6c3Ryb2tlU3R5bGUoKQotewotICAgIHJlY29tcHV0ZVN0cm9r
ZVN0eWxlKCk7Ci0gICAgcmV0dXJuIG1fZDJkU3Ryb2tlU3R5bGUuZ2V0KCk7Ci19Ci0KLUQyRDFf
U1RST0tFX1NUWUxFX1BST1BFUlRJRVMgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnN0cm9rZVN0
eWxlUHJvcGVydGllcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEQyRDE6OlN0cm9rZVN0eWxlUHJv
cGVydGllcyhtX2xpbmVDYXAsIG1fbGluZUNhcCwgbV9saW5lQ2FwLCBtX2xpbmVKb2luLCBtX21p
dGVyTGltaXQsIEQyRDFfREFTSF9TVFlMRV9TT0xJRCwgMC4wZik7Ci19Ci0KLXZvaWQgUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQ6OnNldExpbmVDYXAoRDJEMV9DQVBfU1RZTEUgbGluZUNhcCkKLXsK
LSAgICBpZiAobV9saW5lQ2FwID09IGxpbmVDYXApCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
bGluZUNhcCA9IGxpbmVDYXA7Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0K
LXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldExpbmVKb2luKEQyRDFfTElORV9KT0lO
IGpvaW4pCi17Ci0gICAgaWYgKG1fbGluZUpvaW4gPT0gam9pbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9saW5lSm9pbiA9IGpvaW47Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7
Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFN0cm9rZVN0eWxlKFN0cm9r
ZVN0eWxlIHN0cm9rZVN0eWxlKQotewotICAgIGlmIChtX3N0cm9rZVN0eWxlID09IHN0cm9rZVN0
eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0cm9rZVN0eWxlID0gc3Ryb2tlU3R5bGU7
Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ6OnNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCi17Ci0gICAg
aWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbCh0aGlja25lc3MsIG1fc3Ryb2tlVGhpY2tuZXNz
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdHJva2VUaGlja25lc3MgPSB0aGlja25lc3M7
Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoZmxvYXQgY2FudmFzTWl0ZXJMaW1pdCkKLXsKLSAg
ICAvLyBEaXJlY3QyRCBtaXRlciBsaW1pdCBpcyBpbiB0ZXJtcyBvZiBIQUxGIHRoZSBsaW5lIHRo
aWNrbmVzcy4KLSAgICBmbG9hdCBtaXRlckxpbWl0ID0gMC41ZiAqIGNhbnZhc01pdGVyTGltaXQ7
Ci0gICAgaWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChtaXRlckxpbWl0LCBtX21pdGVyTGlt
aXQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX21pdGVyTGltaXQgPSBtaXRlckxpbWl0Owot
ICAgIG1fc3Ryb2tlU3lsZUlzRGlydHkgPSB0cnVlOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEOjpzZXREYXNoT2Zmc2V0KGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgaWYgKFdU
Rjo6YXJlRXNzZW50aWFsbHlFcXVhbChkYXNoT2Zmc2V0LCBtX2Rhc2hPZmZzZXQpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2Rhc2hPZmZzZXQgPSBkYXNoT2Zmc2V0OwotICAgIG1fc3Ryb2tl
U3lsZUlzRGlydHkgPSB0cnVlOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpz
ZXREYXNoZXMoY29uc3QgRGFzaEFycmF5JiBkYXNoZXMpCi17Ci0gICAgaWYgKG1fZGFzaGVzID09
IGRhc2hlcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXNoZXMgPSBkYXNoZXM7Ci0gICAg
bV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQ6OnNldFBhdHRlcm5XaWR0aChmbG9hdCBwYXR0ZXJuV2lkdGgpCi17Ci0gICAgaWYgKFdU
Rjo6YXJlRXNzZW50aWFsbHlFcXVhbChwYXR0ZXJuV2lkdGgsIG1fcGF0dGVybldpZHRoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9wYXR0ZXJuV2lkdGggPSBwYXR0ZXJuV2lkdGg7Ci0gICAg
bV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQ6OnNldFBhdHRlcm5PZmZzZXQoZmxvYXQgcGF0dGVybk9mZnNldCkKLXsKLSAgICBpZiAo
V1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHBhdHRlcm5PZmZzZXQsIG1fcGF0dGVybk9mZnNldCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGF0dGVybk9mZnNldCA9IHBhdHRlcm5PZmZzZXQ7
Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ6OmJlZ2luRHJhdygpCi17Ci0gICAgQVNTRVJUKG1fcmVuZGVyVGFyZ2V0KTsK
LSAgICBtX3JlbmRlclRhcmdldC0+QmVnaW5EcmF3KCk7Ci0gICAgKytiZWdpbkRyYXdDb3VudDsK
LX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6ZW5kRHJhdygpCi17Ci0gICAgQVNT
RVJUKG1fcmVuZGVyVGFyZ2V0KTsKLQotICAgIGlmIChtX3N0YXRlU3RhY2suc2l6ZSgpID4gMSkK
LSAgICAgICAgcmVzdG9yZSgpOwotCi0gICAgY2xlYXJDbGlwcyhtX3N0YXRlLT5tX2NsaXBzKTsK
LQotICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpID49IDEpOwotCi0gICAgRDJEMV9UQUcg
Zmlyc3QsIHNlY29uZDsKLSAgICBIUkVTVUxUIGhyID0gbV9yZW5kZXJUYXJnZXQtPkVuZERyYXco
JmZpcnN0LCAmc2Vjb25kKTsKLQotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgV1RG
TG9nQWx3YXlzKCJGYWlsZWQgaW4gUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmVuZERyYXc6IGhy
PSV4ZCwgZmlyc3Q9JWxkLCBzZWNvbmQ9JWxkIiwgaHIsIGZpcnN0LCBzZWNvbmQpOwotCi0gICAg
LS1iZWdpbkRyYXdDb3VudDsKLQotICAgIGNvbXBvc2l0ZUlmTmVlZGVkKCk7Ci19Ci0KLXZvaWQg
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFRhZ3MoRDJEMV9UQUcgdGFnMSwgRDJEMV9UQUcg
dGFnMikKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIG1fcmVuZGVyVGFyZ2V0LT5TZXRUYWdz
KHRhZzEsIHRhZzIpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGFnMSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRhZzIpOwotI2VuZGlmCi19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6
Om5vdGlmeVByZURyYXdPYnNlcnZlcigpCi17Ci0gICAgbV9wcmVEcmF3SGFuZGxlcigpOwotfQot
Ci12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpub3RpZnlQb3N0RHJhd09ic2VydmVyKCkK
LXsKLSAgICBtX3Bvc3REcmF3SGFuZGxlcigpOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEOjpwdXNoQ2xpcChEaXJlY3QyRExheWVyVHlwZSBjbGlwVHlwZSkKLXsKLSAgICBtX3N0
YXRlLT5tX2NsaXBzLmFwcGVuZChjbGlwVHlwZSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQ6OmNvbXBvc2l0ZUlmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fY29tcG9zaXRlU291
cmNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJn
ZXQ+IGJpdG1hcFRhcmdldChRdWVyeSwgbV9yZW5kZXJUYXJnZXQuZ2V0KCkpOwotICAgIGlmICgh
Yml0bWFwVGFyZ2V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+
IGN1cnJlbnRDYW52YXMgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwQ29weUZyb21Db250ZXh0KGJp
dG1hcFRhcmdldC5nZXQoKSk7Ci0gICAgaWYgKCFjdXJyZW50Q2FudmFzKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBDT01QdHI8SUQyRDFFZmZlY3Q+IGVmZmVjdDsKLQotICAgIGlmIChtX2NvbXBv
c2l0ZU1vZGUgIT0gRDJEMV9DT01QT1NJVEVfTU9ERV9GT1JDRV9EV09SRCkgewotICAgICAgICBt
X2RldmljZUNvbnRleHQtPkNyZWF0ZUVmZmVjdChDTFNJRF9EMkQxQ29tcG9zaXRlLCAmZWZmZWN0
KTsKLSAgICAgICAgZWZmZWN0LT5TZXRJbnB1dCgwLCBtX2NvbXBvc2l0ZVNvdXJjZS5nZXQoKSk7
Ci0gICAgICAgIGVmZmVjdC0+U2V0SW5wdXQoMSwgY3VycmVudENhbnZhcy5nZXQoKSk7Ci0gICAg
ICAgIGVmZmVjdC0+U2V0VmFsdWUoRDJEMV9DT01QT1NJVEVfUFJPUF9NT0RFLCBtX2NvbXBvc2l0
ZU1vZGUpOwotICAgIH0gZWxzZSBpZiAobV9ibGVuZE1vZGUgIT0gRDJEMV9CTEVORF9NT0RFX0ZP
UkNFX0RXT1JEKSB7Ci0gICAgICAgIG1fZGV2aWNlQ29udGV4dC0+Q3JlYXRlRWZmZWN0KENMU0lE
X0QyRDFCbGVuZCwgJmVmZmVjdCk7Ci0gICAgICAgIGVmZmVjdC0+U2V0SW5wdXQoMCwgY3VycmVu
dENhbnZhcy5nZXQoKSk7Ci0gICAgICAgIGVmZmVjdC0+U2V0SW5wdXQoMSwgbV9jb21wb3NpdGVT
b3VyY2UuZ2V0KCkpOwotICAgICAgICBlZmZlY3QtPlNldFZhbHVlKEQyRDFfQkxFTkRfUFJPUF9N
T0RFLCBtX2JsZW5kTW9kZSk7Ci0gICAgfQotCi0gICAgaWYgKGVmZmVjdCkgewotICAgICAgICBt
X2RldmljZUNvbnRleHQtPkJlZ2luRHJhdygpOwotICAgICAgICBtX2RldmljZUNvbnRleHQtPkNs
ZWFyKEQyRDE6OkNvbG9yRigwLCAwLCAwLCAwKSk7Ci0gICAgICAgIG1fZGV2aWNlQ29udGV4dC0+
RHJhd0ltYWdlKGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIG1fZGV2aWNlQ29udGV4dC0+RW5kRHJh
dygpOwotICAgIH0KLQotICAgIG1fY29tcG9zaXRlU291cmNlID0gbnVsbHB0cjsKLX0KLQotdm9p
ZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0QmxlbmRBbmRDb21wb3NpdGVNb2RlKEQyRDFf
QkxFTkRfTU9ERSBibGVuZCwgRDJEMV9DT01QT1NJVEVfTU9ERSBtb2RlKQotewotICAgIGlmICht
b2RlID09IG1fY29tcG9zaXRlTW9kZSAmJiBibGVuZCA9PSBtX2JsZW5kTW9kZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gRGlyZWN0MkQgaGFuZGxlcyBjb21wb3NpdGluZyBiYXNlZCBvbiBi
aXRtYXBzLiBJZiB3ZSBhcmUgY2hhbmdpbmcgdGhlCi0gICAgLy8gY29tcG9zaXRpbmcgbW9kZSwg
d2UgbmVlZCB0byBjYXB0dXJlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSByZW5kZXJpbmcKLSAg
ICAvLyBpbiBhIGJpdG1hcCwgcGVyZm9ybSBkcmF3aW5nIG9wZXJhdGlvbnMgdW50aWwgd2UgZmlu
aXNoLCB0aGVuIGhhbmRsZQotICAgIC8vIHRoZSBjb21wb3N0aW5nIG9mIHRoZSB0d28gbGF5ZXJz
LgotICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0KFF1ZXJ5
LCBtX3JlbmRlclRhcmdldC5nZXQoKSk7Ci0gICAgaWYgKCFiaXRtYXBUYXJnZXQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGVuZERyYXcoKTsKLQotICAgIG1fY29tcG9zaXRlTW9kZSA9IG1vZGU7
Ci0gICAgbV9ibGVuZE1vZGUgPSBibGVuZDsKLQotICAgIG1fY29tcG9zaXRlU291cmNlID0gRGly
ZWN0MkQ6OmNyZWF0ZUJpdG1hcENvcHlGcm9tQ29udGV4dChiaXRtYXBUYXJnZXQuZ2V0KCkpOwot
Ci0gICAgYmVnaW5EcmF3KCk7Ci0KLSAgICBtX2RldmljZUNvbnRleHQtPkNsZWFyKEQyRDE6OkNv
bG9yRigwLCAwLCAwLCAwKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oCShyZXZp
c2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDIxMCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQyZDFfMS5o
PgotI2luY2x1ZGUgPGQyZDFlZmZlY3RzLmg+Ci0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsK
LXN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZTsKLQotbmFtZXNwYWNlIERpcmVjdDJEIHsKLXN0
cnVjdCBGaWxsU291cmNlOwotc3RydWN0IFN0cm9rZVNvdXJjZTsKLXN0cnVjdCBTaGFkb3dTdGF0
ZTsKLX0KLQotY2xhc3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgewotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEKTsKLXB1YmxpYzoKLSAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRChJRDJEMVJlbmRl
clRhcmdldCosIEZ1bmN0aW9uPHZvaWQoKT4mJiBwcmVEcmF3SGFuZGxlciA9IFtdKCkgeyB9LCBG
dW5jdGlvbjx2b2lkKCk+JiYgcG9zdERyYXdIYW5kbGVyID0gW10oKSB7IH0pOwotICAgIH5QbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCgpOwotCi0gICAgSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRh
cmdldCgpIHsgcmV0dXJuIG1fcmVuZGVyVGFyZ2V0LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRSZW5k
ZXJUYXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKLQotICAgIElEMkQxRGV2aWNlQ29udGV4dCog
ZGV2aWNlQ29udGV4dCgpIHsgcmV0dXJuIG1fZGV2aWNlQ29udGV4dC5nZXQoKTsgfQotCi0gICAg
SUQzRDExRGV2aWNlMSogZDNkRGV2aWNlKCkgY29uc3QgeyByZXR1cm4gbV9kM2REZXZpY2UuZ2V0
KCk7IH0KLSAgICB2b2lkIHNldEQzRERldmljZShJRDNEMTFEZXZpY2UxKiBkZXZpY2UpIHsgbV9k
M2REZXZpY2UgPSBkZXZpY2U7IH0KLQotICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZSogZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpIHsgcmV0dXJuIG1fZ3JhcGhpY3NDb250ZXh0UHJp
dmF0ZTsgfQotICAgIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUqIGdyYXBoaWNzQ29udGV4dFByaXZhdGUpIHsgbV9ncmFwaGljc0Nv
bnRleHRQcml2YXRlID0gZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZTsgfQotCi0gICAgSUQyRDFMYXll
ciogY2xpcExheWVyKCkgY29uc3Q7Ci0gICAgSUQyRDFTdHJva2VTdHlsZSogc3Ryb2tlU3R5bGUo
KTsKLSAgICBEMkQxX1NUUk9LRV9TVFlMRV9QUk9QRVJUSUVTIHN0cm9rZVN0eWxlUHJvcGVydGll
cygpIGNvbnN0OwotICAgIElEMkQxU3Ryb2tlU3R5bGUqIHBsYXRmb3JtU3Ryb2tlU3R5bGUoKSBj
b25zdDsKLQotICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gYnJ1c2hXaXRoQ29sb3Io
Y29uc3QgRDJEMV9DT0xPUl9GJik7Ci0KLSAgICB2b2lkIHNhdmUoKTsKLSAgICB2b2lkIHJlc3Rv
cmUoKTsKLQotICAgIGJvb2wgaGFzU2F2ZWRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuICFtX3N0YXRl
U3RhY2suaXNFbXB0eSgpOyB9Ci0KLSAgICB2b2lkIGJlZ2luRHJhdygpOwotICAgIHZvaWQgZW5k
RHJhdygpOwotCi0gICAgZW51bSBEaXJlY3QyRExheWVyVHlwZSB7IEF4aXNBbGlnbmVkQ2xpcCwg
TGF5ZXJDbGlwIH07Ci0gICAgdm9pZCBwdXNoUmVuZGVyQ2xpcChEaXJlY3QyRExheWVyVHlwZSk7
Ci0gICAgdm9pZCBzZXRBY3RpdmVMYXllcihDT01QdHI8SUQyRDFMYXllcj4mJik7Ci0KLSAgICB2
b2lkIHJlY29tcHV0ZVN0cm9rZVN0eWxlKCk7Ci0gICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJva2VUaGlja25lc3M7IH0KLQotICAgIHN0cnVjdCBUcmFuc3Bh
cmVuY3lMYXllclN0YXRlIHsKLSAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0
PiByZW5kZXJUYXJnZXQ7Ci0gICAgICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgICAgICBGbG9h
dFNpemUgc2hhZG93T2Zmc2V0OwotICAgICAgICBmbG9hdCBvcGFjaXR5IHsgMS4wIH07Ci0gICAg
ICAgIGZsb2F0IHNoYWRvd0JsdXIgeyAwIH07Ci0gICAgICAgIGJvb2wgaGFzU2hhZG93IHsgZmFs
c2UgfTsKLSAgICB9OwotICAgIFZlY3RvcjxUcmFuc3BhcmVuY3lMYXllclN0YXRlPiBtX3RyYW5z
cGFyZW5jeUxheWVyU3RhY2s7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoRDJEMV9DQVBfU1RZTEUp
OwotICAgIHZvaWQgc2V0TGluZUpvaW4oRDJEMV9MSU5FX0pPSU4pOwotICAgIHZvaWQgc2V0U3Ry
b2tlU3R5bGUoU3Ryb2tlU3R5bGUpOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0g
ICAgdm9pZCBzZXREYXNoT2Zmc2V0KGZsb2F0KTsKLSAgICB2b2lkIHNldFBhdHRlcm5XaWR0aChm
bG9hdCk7Ci0gICAgdm9pZCBzZXRQYXR0ZXJuT2Zmc2V0KGZsb2F0KTsKLSAgICB2b2lkIHNldFN0
cm9rZVRoaWNrbmVzcyhmbG9hdCk7Ci0gICAgdm9pZCBzZXREYXNoZXMoY29uc3QgRGFzaEFycmF5
Jik7Ci0KLSAgICB2b2lkIHNldEJsZW5kQW5kQ29tcG9zaXRlTW9kZShEMkQxX0JMRU5EX01PREUs
IEQyRDFfQ09NUE9TSVRFX01PREUpOwotCi0gICAgdm9pZCBzZXRUYWdzKEQyRDFfVEFHIHRhZzEs
IEQyRDFfVEFHIHRhZzIpOwotICAgIHZvaWQgbm90aWZ5UHJlRHJhd09ic2VydmVyKCk7Ci0gICAg
dm9pZCBub3RpZnlQb3N0RHJhd09ic2VydmVyKCk7Ci0KLSAgICB2b2lkIHB1c2hDbGlwKERpcmVj
dDJETGF5ZXJUeXBlKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNsZWFyQ2xpcHMoVmVjdG9yPERp
cmVjdDJETGF5ZXJUeXBlPiYpOwotICAgIHZvaWQgY29tcG9zaXRlSWZOZWVkZWQoKTsKLQotICAg
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogbV9ncmFwaGljc0NvbnRleHRQcml2YXRl
IHsgbnVsbHB0ciB9OwotCi0gICAgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBtX3JlbmRlclRh
cmdldDsKLSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBtX2RldmljZUNvbnRleHQ7Ci0g
ICAgQ09NUHRyPElEMkQxU3Ryb2tlU3R5bGU+IG1fZDJkU3Ryb2tlU3R5bGU7Ci0KLSAgICBIYXNo
TWFwPHVpbnQzMl90LCBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+PiBtX3NvbGlkQ29sb3Jl
ZEJydXNoQ2FjaGU7Ci0gICAgQ09NUHRyPElEMkQxU29saWRDb2xvckJydXNoPiBtX3doaXRlQnJ1
c2g7Ci0gICAgQ09NUHRyPElEMkQxU29saWRDb2xvckJydXNoPiBtX3plcm9CcnVzaDsKLSAgICBD
T01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IG1fc29saWRTdHJva2VCcnVzaDsKLSAgICBDT01Q
dHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IG1fc29saWRGaWxsQnJ1c2g7Ci0gICAgQ09NUHRyPElE
MkQxQml0bWFwQnJ1c2g+IG1fcGF0dGVyblN0cm9rZUJydXNoOwotICAgIENPTVB0cjxJRDJEMUJp
dG1hcEJydXNoPiBtX3BhdHRlcm5GaWxsQnJ1c2g7Ci0KLSAgICBDT01QdHI8SUQzRDExRGV2aWNl
MT4gbV9kM2REZXZpY2U7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IG1fY29tcG9zaXRlU291
cmNlOwotCi0gICAgRnVuY3Rpb248dm9pZCgpPiBtX3ByZURyYXdIYW5kbGVyOwotICAgIEZ1bmN0
aW9uPHZvaWQoKT4gbV9wb3N0RHJhd0hhbmRsZXI7Ci0KLSAgICBjbGFzcyBTdGF0ZTsKLSAgICBT
dGF0ZSogbV9zdGF0ZSB7IG51bGxwdHIgfTsKLSAgICBWZWN0b3I8U3RhdGU+IG1fc3RhdGVTdGFj
azsKLQotICAgIEQyRDFfQ0FQX1NUWUxFIG1fbGluZUNhcCB7IEQyRDFfQ0FQX1NUWUxFX0ZMQVQg
fTsKLSAgICBEMkQxX0xJTkVfSk9JTiBtX2xpbmVKb2luIHsgRDJEMV9MSU5FX0pPSU5fTUlURVIg
fTsKLSAgICBTdHJva2VTdHlsZSBtX3N0cm9rZVN0eWxlIHsgU29saWRTdHJva2UgfTsKLSAgICBE
YXNoQXJyYXkgbV9kYXNoZXM7Ci0KLSAgICB1bnNpZ25lZCBiZWdpbkRyYXdDb3VudCB7IDAgfTsK
LQotICAgIGZsb2F0IG1fbWl0ZXJMaW1pdCB7IDEwLjBmIH07Ci0gICAgZmxvYXQgbV9kYXNoT2Zm
c2V0IHsgMCB9OwotICAgIGZsb2F0IG1fcGF0dGVybldpZHRoIHsgMS4wZiB9OwotICAgIGZsb2F0
IG1fcGF0dGVybk9mZnNldCB7IDAgfTsKLSAgICBmbG9hdCBtX3N0cm9rZVRoaWNrbmVzcyB7IDAg
fTsKLSAgICBmbG9hdCBtX2FscGhhIHsgMS4wIH07Ci0KLSAgICBib29sIG1fc3Ryb2tlU3lsZUlz
RGlydHkgeyBmYWxzZSB9OwotCi0gICAgRDJEMV9CTEVORF9NT0RFIG1fYmxlbmRNb2RlIHsgRDJE
MV9CTEVORF9NT0RFX01VTFRJUExZIH07Ci0gICAgRDJEMV9DT01QT1NJVEVfTU9ERSBtX2NvbXBv
c2l0ZU1vZGUgeyBEMkQxX0NPTVBPU0lURV9NT0RFX1NPVVJDRV9PVkVSIH07Ci0KLSAgICBmcmll
bmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU7Ci19OwotCi1jbGFzcyBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVy
IHsKLXB1YmxpYzoKLSAgICBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVyKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBjb250ZXh0LCBib29sIHNhdmVBbmRSZXN0b3JlID0gdHJ1ZSkKLSAgICAgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX3NhdmVBbmRSZXN0b3JlKHNhdmVBbmRS
ZXN0b3JlKQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCi0gICAgICAgICAg
ICBtX2NvbnRleHQuc2F2ZSgpOwotICAgIH0KLQotICAgIH5QbGF0Zm9ybUNvbnRleHRTdGF0ZVNh
dmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAg
bV9jb250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNhdmUoKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKCFtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAgbV9jb250ZXh0LnNhdmUo
KTsKLSAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBy
ZXN0b3JlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAg
ICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKLSAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IGZhbHNl
OwotICAgIH0KLQotICAgIGJvb2wgZGlkU2F2ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gbV9zYXZlQW5kUmVzdG9yZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmIG1fY29udGV4dDsKLSAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmUgeyBmYWxz
ZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVD
VDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZv
bnREYXRhRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRh
RGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsMjE4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJGb250LmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJl
Y3RXcml0ZVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZv
bnRDYWNoZS5oIgotI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkdseXBo
UGFnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhXbmREQy5o
IgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8Y29tdXRpbC5oPgotI2lu
Y2x1ZGUgPGR3cml0ZV8zLmg+Ci0jaW5jbHVkZSA8bWxhbmcuaD4KLSNpbmNsdWRlIDx1bmljb2Rl
L3VjaGFyLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91bm9ybS5oPgotI2luY2x1ZGUgPHdpbnNvY2sy
Lmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RhdGljIFZlY3RvcjxXQ0hBUj4gZ2V0RmFjZU5hbWUoSURXcml0ZUZvbnQqIGZvbnQp
Ci17Ci0gICAgaWYgKCFmb250KQotICAgICAgICByZXR1cm4gVmVjdG9yPFdDSEFSPigpOwotCi0g
ICAgQ09NUHRyPElEV3JpdGVMb2NhbGl6ZWRTdHJpbmdzPiBsb2NhbGl6ZWRGYWNlTmFtZXM7Ci0g
ICAgSFJFU1VMVCBociA9IGZvbnQtPkdldEZhY2VOYW1lcygmbG9jYWxpemVkRmFjZU5hbWVzKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIFVJTlQzMiBsb2NhbGVJ
bmRleCA9IDA7Ci0gICAgQk9PTCBleGlzdHMgPSBmYWxzZTsKLQotICAgIHdjaGFyX3QgbG9jYWxl
TmFtZVtMT0NBTEVfTkFNRV9NQVhfTEVOR1RIXTsKLSAgICBpbnQgbG9jYWxlTGVuZ3RoID0gR2V0
VXNlckRlZmF1bHRMb2NhbGVOYW1lKGxvY2FsZU5hbWUsIExPQ0FMRV9OQU1FX01BWF9MRU5HVEgp
OwotICAgIGlmIChsb2NhbGVMZW5ndGgpCi0gICAgICAgIGhyID0gbG9jYWxpemVkRmFjZU5hbWVz
LT5GaW5kTG9jYWxlTmFtZShsb2NhbGVOYW1lLCAmbG9jYWxlSW5kZXgsICZleGlzdHMpOwotCi0g
ICAgaWYgKCFleGlzdHMgfHwgIVNVQ0NFRURFRChocikpCi0gICAgICAgIGhyID0gbG9jYWxpemVk
RmFjZU5hbWVzLT5GaW5kTG9jYWxlTmFtZShMImVuLXVzIiwgJmxvY2FsZUluZGV4LCAmZXhpc3Rz
KTsKLQotICAgIGlmICghZXhpc3RzIHx8ICFTVUNDRUVERUQoaHIpKQotICAgICAgICBsb2NhbGVJ
bmRleCA9IDA7Ci0KLSAgICBVSU5UMzIgZmFjZU5hbWVMZW5ndGggPSAwOwotICAgIGhyID0gbG9j
YWxpemVkRmFjZU5hbWVzLT5HZXRTdHJpbmdMZW5ndGgobG9jYWxlSW5kZXgsICZmYWNlTmFtZUxl
bmd0aCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gVmVjdG9yPFdD
SEFSPigpOwotCi0gICAgVmVjdG9yPFdDSEFSPiBmYWNlTmFtZShmYWNlTmFtZUxlbmd0aCArIDEp
OwotICAgIGhyID0gbG9jYWxpemVkRmFjZU5hbWVzLT5HZXRTdHJpbmcobG9jYWxlSW5kZXgsIGZh
Y2VOYW1lLmRhdGEoKSwgZmFjZU5hbWUuc2l6ZSgpKTsKLQotICAgIHJldHVybiBmYWNlTmFtZTsK
LX0KLQotdm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQotewotICAgIG1fc3ludGhldGljQm9sZE9m
ZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7Ci0gICAg
bV9zY3JpcHRDYWNoZSA9IDA7Ci0gICAgbV9zY3JpcHRGb250UHJvcGVydGllcyA9IDA7Ci0KLSAg
ICBpZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpCi0gICAgICAgIHJldHVybiBpbml0R0RJRm9u
dCgpOwotCi0gICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotCi0g
ICAgYXV0byBmb250ID0gbV9wbGF0Zm9ybURhdGEuZHdGb250KCk7Ci0gICAgUkVMRUFTRV9BU1NF
UlQoZm9udCk7Ci0KLSAgICBhdXRvIGZvbnRGYWNlID0gbV9wbGF0Zm9ybURhdGEuZHdGb250RmFj
ZSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGZvbnRGYWNlKTsKLQotICAgIERXUklURV9GT05UX01F
VFJJQ1MgZm9udE1ldHJpY3M7Ci0gICAgZm9udC0+R2V0TWV0cmljcygmZm9udE1ldHJpY3MpOwot
Ci0gICAgaW50IGlBc2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQ7Ci0gICAgaW50IGlEZXNjZW50
ID0gZm9udE1ldHJpY3MuZGVzY2VudDsKLSAgICBpbnQgaUxpbmVHYXAgPSBmb250TWV0cmljcy5s
aW5lR2FwOwotICAgIGludCBpQ2FwSGVpZ2h0ID0gZm9udE1ldHJpY3MuY2FwSGVpZ2h0OwotCi0g
ICAgdW5zaWduZWQgdW5pdHNQZXJFbSA9IGZvbnRNZXRyaWNzLmRlc2lnblVuaXRzUGVyRW07Ci0g
ICAgZmxvYXQgZkFzY2VudCA9IHNjYWxlRW1Ub1VuaXRzKGlBc2NlbnQsIHVuaXRzUGVyRW0pICog
cG9pbnRTaXplOwotICAgIGZsb2F0IGZEZXNjZW50ID0gc2NhbGVFbVRvVW5pdHMoaURlc2NlbnQs
IHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgIGZsb2F0IGZDYXBIZWlnaHQgPSBzY2FsZUVt
VG9Vbml0cyhpQ2FwSGVpZ2h0LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLSAgICBmbG9hdCBm
TGluZUdhcCA9IHNjYWxlRW1Ub1VuaXRzKGlMaW5lR2FwLCB1bml0c1BlckVtKSAqIHBvaW50U2l6
ZTsKLQotICAgIGlmIChvcmlnaW4oKSA9PSBPcmlnaW46OkxvY2FsKSB7Ci0gICAgICAgIFZlY3Rv
cjxXQ0hBUj4gZmFjZU5hbWUgPSBnZXRGYWNlTmFtZShmb250KTsKLSAgICAgICAgZkFzY2VudCA9
IGFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhmYWNlTmFtZS5kYXRhKCksIGZBc2NlbnQs
IGZEZXNjZW50KTsKLSAgICB9Ci0KLSAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChmQXNjZW50
KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZkRlc2NlbnQpOwotICAgIG1fZm9udE1l
dHJpY3Muc2V0Q2FwSGVpZ2h0KGZDYXBIZWlnaHQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGlu
ZUdhcChmTGluZUdhcCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhscm91bmRm
KGZBc2NlbnQpICsgbHJvdW5kZihmRGVzY2VudCkgKyBscm91bmRmKGZMaW5lR2FwKSk7Ci0KLSAg
ICBHbHlwaCB4R2x5cGggPSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoJ3gnKS5nbHlwaDsKLQotICAg
IGlmICh4R2x5cGgpIHsKLSAgICAgICAgLy8gTWVhc3VyZSB0aGUgYWN0dWFsIGNoYXJhY3RlciAi
eCIsIHNpbmNlIGl0J3MgcG9zc2libGUgZm9yIGl0IHRvIGV4dGVuZCBiZWxvdyB0aGUgYmFzZWxp
bmUsIGFuZCB3ZSBuZWVkIHRoZQotICAgICAgICAvLyByZXBvcnRlZCB4LWhlaWdodCB0byBvbmx5
IGluY2x1ZGUgdGhlIHBvcnRpb24gb2YgdGhlIGdseXBoIHRoYXQgaXMgYWJvdmUgdGhlIGJhc2Vs
aW5lLgotICAgICAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX01FVFJJQ1M+IGdseXBoTWV0cmljcygx
KTsKLSAgICAgICAgSFJFU1VMVCBociA9IGZvbnRGYWNlLT5HZXREZXNpZ25HbHlwaE1ldHJpY3Mo
JnhHbHlwaCwgMSwgZ2x5cGhNZXRyaWNzLmRhdGEoKSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRp
b24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKTsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodChzY2Fs
ZUVtVG9Vbml0cyhnbHlwaE1ldHJpY3MuZmlyc3QoKS52ZXJ0aWNhbE9yaWdpblksIHVuaXRzUGVy
RW0pICogcG9pbnRTaXplKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpbnQgaVhIZWlnaHQgPSBm
b250TWV0cmljcy54SGVpZ2h0OwotICAgICAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoc2Nh
bGVFbVRvVW5pdHMoaVhIZWlnaHQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplKTsKLSAgICB9Ci0K
LSAgICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7Ci19Ci0KLUZsb2F0
UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewot
ICAgIGlmICghcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0
KCk7Ci0KLSAgICBpZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpCi0gICAgICAgIHJldHVybiBi
b3VuZHNGb3JHRElHbHlwaChnbHlwaCk7Ci0KLSAgICBhdXRvIGZvbnQgPSBtX3BsYXRmb3JtRGF0
YS5kd0ZvbnQoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChmb250KTsKLQotICAgIGF1dG8gZm9udEZh
Y2UgPSBtX3BsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZm9u
dEZhY2UpOwotCi0gICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwot
ICAgIGJvb2wgdmVydGljYWwgPSBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRP
cmllbnRhdGlvbjo6VmVydGljYWw7Ci0KLSAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX01FVFJJQ1M+
IGdseXBoTWV0cmljcygxKTsKLSAgICBIUkVTVUxUIGhyID0gZm9udEZhY2UtPkdldERlc2lnbkds
eXBoTWV0cmljcygmZ2x5cGgsIDEsIGdseXBoTWV0cmljcy5kYXRhKCksIG1fcGxhdGZvcm1EYXRh
Lm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBjb25zdCBhdXRvJiBtZXRyaWNzID0gZ2x5
cGhNZXRyaWNzLmZpcnN0KCk7Ci0KLSAgICB1bnNpZ25lZCB1bml0c1BlckVtID0gbV9mb250TWV0
cmljcy51bml0c1BlckVtKCk7Ci0KLSAgICBGbG9hdFBvaW50IG9yaWdpbihzY2FsZUVtVG9Vbml0
cyhtZXRyaWNzLmxlZnRTaWRlQmVhcmluZywgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUsIHNjYWxl
RW1Ub1VuaXRzKG1ldHJpY3MudmVydGljYWxPcmlnaW5ZLCB1bml0c1BlckVtKSAqIHBvaW50U2l6
ZSk7Ci0gICAgRmxvYXRTaXplIHNpemUoc2NhbGVFbVRvVW5pdHMobWV0cmljcy5hZHZhbmNlV2lk
dGggLSBtZXRyaWNzLmxlZnRTaWRlQmVhcmluZyAtIG1ldHJpY3MucmlnaHRTaWRlQmVhcmluZywg
dW5pdHNQZXJFbSkgKiBwb2ludFNpemUsCi0gICAgICAgIHNjYWxlRW1Ub1VuaXRzKG1ldHJpY3Mu
YWR2YW5jZUhlaWdodCAtIG1ldHJpY3MudG9wU2lkZUJlYXJpbmcgLSBtZXRyaWNzLmJvdHRvbVNp
ZGVCZWFyaW5nLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7Ci0KLSAgICBGbG9hdFJlY3QgYm91
bmRpbmdCb3gob3JpZ2luLCBzaXplKTsKLSAgICBpZiAobV9zeW50aGV0aWNCb2xkT2Zmc2V0KQot
ICAgICAgICBib3VuZGluZ0JveC5zZXRXaWR0aChib3VuZGluZ0JveC53aWR0aCgpICsgbV9zeW50
aGV0aWNCb2xkT2Zmc2V0KTsKLQotICAgIHJldHVybiBib3VuZGluZ0JveDsKLX0KLQotZmxvYXQg
Rm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIGlm
ICghcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICht
X3BsYXRmb3JtRGF0YS51c2VHREkoKSkKLSAgICAgICAgcmV0dXJuIHdpZHRoRm9yR0RJR2x5cGgo
Z2x5cGgpOwotCi0gICAgYXV0byBmb250ID0gbV9wbGF0Zm9ybURhdGEuZHdGb250KCk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoZm9udCk7Ci0KLSAgICBhdXRvIGZvbnRGYWNlID0gbV9wbGF0Zm9ybURh
dGEuZHdGb250RmFjZSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGZvbnRGYWNlKTsKLQotICAgIGJv
b2wgaXNWZXJ0aWNhbCA9IG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVu
dGF0aW9uOjpWZXJ0aWNhbDsKLQotICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfTUVUUklDUz4gZ2x5
cGhNZXRyaWNzKDEpOwotICAgIEhSRVNVTFQgaHIgPSBmb250RmFjZS0+R2V0RGVzaWduR2x5cGhN
ZXRyaWNzKCZnbHlwaCwgMSwgZ2x5cGhNZXRyaWNzLmRhdGEoKSwgaXNWZXJ0aWNhbCk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBjb25zdCBhdXRvJiBtZXRyaWNz
ID0gZ2x5cGhNZXRyaWNzLmZpcnN0KCk7Ci0gICAgaW50IHdpZHRoSW5FbSA9IG1ldHJpY3MuYWR2
YW5jZVdpZHRoOwotCi0gICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgp
OwotICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0gPSBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKTsK
LSAgICBmbG9hdCB3aWR0aCA9IHNjYWxlRW1Ub1VuaXRzKHdpZHRoSW5FbSwgdW5pdHNQZXJFbSkg
KiBwb2ludFNpemU7Ci0KLSAgICByZXR1cm4gd2lkdGggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7
Ci19Ci0KLVBhdGggRm9udDo6cGxhdGZvcm1QYXRoRm9yR2x5cGgoR2x5cGgpIGNvbnN0Ci17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUGF0aCgpOwotfQotCi19Ci0KLSNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXpl
ckhlbHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1RleHRBbmFseXplckhlbHBlci5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuY3BwCShu
b25leGlzdGVudCkKQEAgLTEsMTQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0
QW5hbHl6ZXJIZWxwZXIuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1UZXh0QW5hbHl6ZXJIZWxwZXI6OlRleHRBbmFseXplckhlbHBlcihjb25zdCBXQ0hB
UiogbG9jYWxlTmFtZSwgY29uc3QgV0NIQVIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
KQotICAgIDogbV9sb2NhbGVOYW1lKGxvY2FsZU5hbWUpCi0gICAgLCBtX2J1ZmZlcihidWZmZXIp
Ci0gICAgLCBtX2J1ZmZlckxlbmd0aChidWZmZXJMZW5ndGgpCi17Ci19Ci0KLUhSRVNVTFQgVGV4
dEFuYWx5emVySGVscGVyOjpRdWVyeUludGVyZmFjZShfSW5fIFJFRklJRCByaWlkLCBfQ09NX091
dHB0cl8gdm9pZCoqIHBwdk9iamVjdCkKLXsKLSAgICBpZiAoIXBwdk9iamVjdCkKLSAgICAgICAg
cmV0dXJuIEVfUE9JTlRFUjsKLSAgICAqcHB2T2JqZWN0ID0gbnVsbHB0cjsKLSAgICBpZiAoSXNF
cXVhbEdVSUQocmlpZCwgX191dWlkb2YoSURXcml0ZVRleHRBbmFseXNpc1NpbmspKSkKLSAgICAg
ICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElEV3JpdGVUZXh0QW5hbHlzaXNTaW5rKj4odGhp
cyk7Ci0gICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlkb2YoSURXcml0ZVRleHRB
bmFseXNpc1NvdXJjZSkpKQotICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SURXcml0
ZVRleHRBbmFseXNpc1NpbmsqPih0aGlzKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBFX0ZB
SUw7Ci0KLSAgICBBZGRSZWYoKTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQotVUxPTkcgVGV4dEFu
YWx5emVySGVscGVyOjpBZGRSZWYoKQotewotICAgIHJldHVybiArK21fcmVmQ291bnQ7Ci19Ci0K
LVVMT05HIFRleHRBbmFseXplckhlbHBlcjo6UmVsZWFzZSgpCi17Ci0gICAgVUxPTkcgbmV3UmVm
ID0gLS1tX3JlZkNvdW50OwotICAgIGlmICghbmV3UmVmKQotICAgICAgICBkZWxldGUodGhpcyk7
Ci0KLSAgICByZXR1cm4gbmV3UmVmOwotfQotCi1IUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6
R2V0VGV4dEF0UG9zaXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgY29uc3QgV0NIQVIqKiB0ZXh0
U3RyaW5nLCBVSU5UMzIqIHRleHRMZW5ndGgpCi17Ci0gICAgaWYgKCF0ZXh0U3RyaW5nIHx8ICF0
ZXh0TGVuZ3RoKQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotCi0gICAgaWYgKHRleHRQb3Np
dGlvbiA+PSBtX2J1ZmZlckxlbmd0aCkgewotICAgICAgICAqdGV4dFN0cmluZyA9IG51bGxwdHI7
Ci0gICAgICAgICp0ZXh0TGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuIFNfT0s7Ci0gICAgfQot
Ci0gICAgKnRleHRTdHJpbmcgPSAmbV9idWZmZXJbdGV4dFBvc2l0aW9uXTsKLSAgICAqdGV4dExl
bmd0aCA9IG1fYnVmZmVyTGVuZ3RoIC0gdGV4dFBvc2l0aW9uOwotCi0gICAgcmV0dXJuIFNfT0s7
Ci19Ci0KLUhSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpHZXRUZXh0QmVmb3JlUG9zaXRpb24o
VUlOVDMyIHRleHRQb3NpdGlvbiwgY29uc3QgV0NIQVIqKiB0ZXh0U3RyaW5nLCBVSU5UMzIqIHRl
eHRMZW5ndGgpCi17Ci0gICAgaWYgKCF0ZXh0U3RyaW5nIHx8ICF0ZXh0TGVuZ3RoKQotICAgICAg
ICByZXR1cm4gRV9QT0lOVEVSOwotCi0gICAgaWYgKCF0ZXh0UG9zaXRpb24gfHwgdGV4dFBvc2l0
aW9uID4gbV9idWZmZXJMZW5ndGgpIHsKLSAgICAgICAgKnRleHRTdHJpbmcgPSBudWxscHRyOwot
ICAgICAgICAqdGV4dExlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybiBTX09LOwotICAgIH0KLQot
ICAgICp0ZXh0U3RyaW5nID0gJm1fYnVmZmVyWzBdOwotICAgICp0ZXh0TGVuZ3RoID0gdGV4dFBv
c2l0aW9uOwotCi0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgVGV4dEFuYWx5emVySGVs
cGVyOjpHZXRMb2NhbGVOYW1lKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiogdGV4dExlbmd0
aCwgY29uc3QgV0NIQVIqKiBsb2NhbGVOYW1lKQotewotICAgICpsb2NhbGVOYW1lID0gbV9sb2Nh
bGVOYW1lOwotICAgICp0ZXh0TGVuZ3RoID0gbV9idWZmZXJMZW5ndGggLSB0ZXh0UG9zaXRpb247
Ci0KLSAgICByZXR1cm4gU19PSzsKLX0KLQotSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6Okdl
dE51bWJlclN1YnN0aXR1dGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIqIHRleHRMZW5n
dGgsIElEV3JpdGVOdW1iZXJTdWJzdGl0dXRpb24qKiBudW1iZXJTdWJzdGl0dXRpb24pCi17Ci0g
ICAgKnRleHRMZW5ndGggPSBtX2J1ZmZlckxlbmd0aCAtIHRleHRQb3NpdGlvbjsKLSAgICByZXR1
cm4gU19PSzsKLX0KLQotSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6OlNldExpbmVCcmVha3Bv
aW50cyhVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgY29uc3QgRFdSSVRF
X0xJTkVfQlJFQUtQT0lOVCopCi17Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQotSFJFU1VM
VCBUZXh0QW5hbHl6ZXJIZWxwZXI6OlNldFNjcmlwdEFuYWx5c2lzKFVJTlQzMiB0ZXh0UG9zaXRp
b24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBjb25zdCBEV1JJVEVfU0NSSVBUX0FOQUxZU0lTKiBhbmFs
eXNpcykKLXsKLSAgICBBbmFseXplZFJ1biBjdXJyZW50ID0geyB0ZXh0UG9zaXRpb24sIHRleHRM
ZW5ndGgsICphbmFseXNpcyB9OwotICAgIG1fYW5hbHl6ZWRSdW5zLmFwcGVuZChXVEZNb3ZlKGN1
cnJlbnQpKTsKLQotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFRleHRBbmFseXplckhl
bHBlcjo6U2V0QmlkaUxldmVsKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3Ro
LCBVSU5UOCBleHBsaWNpdExldmVsLCBVSU5UOCByZXNvbHZlZExldmVsKQotewotICAgIHJldHVy
biBFX05PVElNUEw7Ci19Ci0KLUhSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpTZXROdW1iZXJT
dWJzdGl0dXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIElEV3Jp
dGVOdW1iZXJTdWJzdGl0dXRpb24qKQotewotICAgIHJldHVybiBFX05PVElNUEw7Ci19Ci0KLX0K
LQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4
dEFuYWx5emVySGVscGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhlbHBlci5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGR3cml0ZS5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1
Y3QgQW5hbHl6ZWRSdW4gewotICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24geyAwIH07Ci0gICAg
dW5zaWduZWQgbGVuZ3RoIHsgMCB9OwotICAgIERXUklURV9TQ1JJUFRfQU5BTFlTSVMgYW5hbHlz
aXM7Ci19OwotCi1zdHJ1Y3QgVGV4dEFuYWx5emVySGVscGVyIDogcHVibGljIElEV3JpdGVUZXh0
QW5hbHlzaXNTaW5rLCBJRFdyaXRlVGV4dEFuYWx5c2lzU291cmNlIHsKLSAgICBUZXh0QW5hbHl6
ZXJIZWxwZXIoY29uc3QgV0NIQVIqIGxvY2FsZU5hbWUsIGNvbnN0IFdDSEFSKiBidWZmZXIsIHVu
c2lnbmVkIGJ1ZmZlckxlbmd0aCk7Ci0KLSAgICAvLyBJVW5rbm93bgotICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShfSW5fIFJFRklJRCwgX0NPTV9P
dXRwdHJfIHZvaWQqKik7Ci0gICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBBZGRS
ZWYoKTsKLSAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2UoKTsKLQot
ICAgIC8vIElEV3JpdGVUZXh0QW5hbHlzaXNTb3VyY2UgCi0gICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIEdldFRleHRBdFBvc2l0aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIGNv
bnN0IFdDSEFSKiogdGV4dFN0cmluZywgVUlOVDMyKiB0ZXh0TGVuZ3RoKTsKLSAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0VGV4dEJlZm9yZVBvc2l0aW9uKFVJTlQzMiB0
ZXh0UG9zaXRpb24sIGNvbnN0IFdDSEFSKiogdGV4dFN0cmluZywgVUlOVDMyKiB0ZXh0TGVuZ3Ro
KTsKLSAgICB2aXJ0dWFsIERXUklURV9SRUFESU5HX0RJUkVDVElPTiBTVERNRVRIT0RDQUxMVFlQ
RSBHZXRQYXJhZ3JhcGhSZWFkaW5nRGlyZWN0aW9uKCkgeyByZXR1cm4gRFdSSVRFX1JFQURJTkdf
RElSRUNUSU9OX0xFRlRfVE9fUklHSFQ7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgR2V0TG9jYWxlTmFtZShVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIqIHRleHRM
ZW5ndGgsIGNvbnN0IFdDSEFSKiogbG9jYWxlTmFtZSk7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIEdldE51bWJlclN1YnN0aXR1dGlvbihVSU5UMzIgdGV4dFBvc2l0aW9u
LCBVSU5UMzIqIHRleHRMZW5ndGgsIElEV3JpdGVOdW1iZXJTdWJzdGl0dXRpb24qKik7Ci0KLSAg
ICAvLyBJRFdyaXRlVGV4dEFuYWx5c2lzU2luawotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBTZXRMaW5lQnJlYWtwb2ludHMoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMy
IHRleHRMZW5ndGgsIGNvbnN0IERXUklURV9MSU5FX0JSRUFLUE9JTlQqKTsKLSAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0U2NyaXB0QW5hbHlzaXMoVUlOVDMyIHRleHRQ
b3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIGNvbnN0IERXUklURV9TQ1JJUFRfQU5BTFlTSVMq
KTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0QmlkaUxldmVsKFVJ
TlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBVSU5UOCBleHBsaWNpdExldmVs
LCBVSU5UOCByZXNvbHZlZExldmVsKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgU2V0TnVtYmVyU3Vic3RpdHV0aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0
ZXh0TGVuZ3RoLCBJRFdyaXRlTnVtYmVyU3Vic3RpdHV0aW9uKik7Ci0KLSAgICBjb25zdCBXQ0hB
UiogbV9sb2NhbGVOYW1lIHsgbnVsbHB0ciB9OwotICAgIGNvbnN0IFdDSEFSKiBtX2J1ZmZlciB7
IG51bGxwdHIgfTsKLSAgICB1bnNpZ25lZCBtX2J1ZmZlckxlbmd0aCB7IDAgfTsKLSAgICBWZWN0
b3I8QW5hbHl6ZWRSdW4+IG1fYW5hbHl6ZWRSdW5zOwotICAgIFVMT05HIG1fcmVmQ291bnQgeyAw
IH07Ci19OwotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
VHJhbnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQu
Y3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAt
MSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTYgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgotCi0jaWYgUExBVEZPUk0oV0lOKQotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0KLSNpbmNsdWRlIDxkMmQxLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotVHJhbnNmb3JtYXRpb25NYXRyaXg6OlRyYW5zZm9ybWF0
aW9uTWF0cml4KGNvbnN0IEQyRDFfTUFUUklYXzNYMl9GJiB0KQotewotICAgIHNldEEodC5fMTEp
OwotICAgIHNldEIodC5fMTIpOwotICAgIHNldEModC5fMjEpOwotICAgIHNldEQodC5fMjIpOwot
ICAgIHNldEUodC5fMzEpOwotICAgIHNldEYodC5fMzIpOwotfQotCi1UcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6b3BlcmF0b3IgRDJEMV9NQVRSSVhfM1gyX0YoKSBjb25zdAotewotICAgIHJldHVybiBE
MkQxOjpNYXRyaXgzeDJGKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoYSgpKSwKLSAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChiKCkpLAotICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KGMoKSksCi0gICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZCgpKSwKLSAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChlKCkpLAotICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KGYoKSkpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm06OkFmZmluZVRyYW5zZm9ybShjb25zdCBEMkQx
X01BVFJJWF8zWDJfRiYgdCkKLXsKLSAgICBzZXRNYXRyaXgodC5fMTEsIHQuXzEyLCB0Ll8yMSwg
dC5fMjIsIHQuXzMxLCB0Ll8zMik7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3IgRDJE
MV9NQVRSSVhfM1gyX0YoKSBjb25zdAotewotICAgIHJldHVybiBEMkQxOjpNYXRyaXgzeDJGKG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoYSgpKSwKLSAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dChiKCkpLAotICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGMoKSksCi0gICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoZCgpKSwKLSAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dChlKCkpLAotICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGYoKSkpOwotfQotCi19Ci0K
LSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZURpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0lt
YWdlRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vRHJhZ0ltYWdlRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTA1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKLQotI2lmIFVTRShESVJF
Q1QyRCkKLQotI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhXbmREQy5oIgotI2lu
Y2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUg
PHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3dp
bi9HRElPYmplY3QuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIGRlYWxsb2NDb250
ZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgaWYg
KHBsYXRmb3JtQ29udGV4dCkgewotICAgICAgICBpZiAoYXV0byogcmVuZGVyVGFyZ2V0ID0gcGxh
dGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgICAgIHJlbmRlclRhcmdldC0+
UmVsZWFzZSgpOwotICAgIH0KLX0KLQotR0RJT2JqZWN0PEhCSVRNQVA+IGFsbG9jSW1hZ2UoSERD
IGRjLCBJbnRTaXplIHNpemUsIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiogcGxhdGZvcm1Db250
ZXh0KQotewotICAgIEJpdG1hcEluZm8gYm1wSW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZShzaXpl
KTsKLQotICAgIExQVk9JRCBiaXRzID0gbnVsbHB0cjsKLSAgICBhdXRvIGhibXAgPSBhZG9wdEdE
SU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24oZGMsICZibXBJbmZvLCBESUJfUkdCX0NPTE9SUywg
JmJpdHMsIDAsIDApKTsKLQotICAgIGlmICghcGxhdGZvcm1Db250ZXh0IHx8ICFoYm1wKQotICAg
ICAgICByZXR1cm4gaGJtcDsKLQotICAgIC8vIEZJWE1FOiBVc2UgR0RJIEludGVyb3AgbGF5ZXIg
dG8gY3JlYXRlIEhCSVRNQVAgZnJvbSBEMkQgQml0bWFwCi0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gaGJtcDsKLX0KLQotRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJ
bWFnZVJlZiBpbWFnZVJlZiwgRmxvYXRTaXplIHNjYWxlKQotewotICAgIC8vIEZJWE1FOiBkdWUg
dG8gdGhlIHdheSBkcmFnIGltYWdlcyBhcmUgZG9uZSBvbiB3aW5kb3dzIHdlIG5lZWQgCi0gICAg
Ly8gdG8gcHJlcHJvY2VzcyB0aGUgYWxwaGEgY2hhbm5lbCA8cmRhcjovL3Byb2JsZW0vNTAxNTk0
Nj4KLSAgICBpZiAoIWltYWdlUmVmKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEdE
SU9iamVjdDxIQklUTUFQPiBoYm1wOwotICAgIGF1dG8gaW1hZ2UgPSBhZG9wdEdESU9iamVjdChp
bWFnZVJlZik7Ci0KLSAgICBJbnRTaXplIHNyY1NpemUgPSBkcmFnSW1hZ2VTaXplKGltYWdlLmdl
dCgpKTsKLSAgICBJbnRTaXplIGRzdFNpemUoc3RhdGljX2Nhc3Q8aW50PihzcmNTaXplLndpZHRo
KCkgKiBzY2FsZS53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50PihzcmNTaXplLmhlaWdodCgpICog
c2NhbGUuaGVpZ2h0KCkpKTsKLQotICAgIEhXbmREQyBkYyhudWxscHRyKTsKLSAgICBhdXRvIGRz
dERDID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoZGMpKTsKLSAgICBpZiAo
ZHN0REMpCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0KLSAgICBpZiAoIWhibXApCi0gICAg
ICAgIGhibXAuc3dhcChpbWFnZSk7Ci0gICAgcmV0dXJuIGhibXAubGVhaygpOwotfQotCi1EcmFn
SW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWcsIEltYWdlT3JpZW50
YXRpb24pCi17Ci0gICAgSFduZERDIGRjKG51bGxwdHIpOwotICAgIGF1dG8gd29ya2luZ0RDID0g
YWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoZGMpKTsKLSAgICBpZiAoIXdvcmtp
bmdEQykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBudWxscHRyOwotfQotICAgIAotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIyNyw3ICszMjI3LDcgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllcjo6c2V0dXBGaWx0
ZQogCiAgICAgYXV0byByb290UmVsYXRpdmVCb3VuZHMgPSBjYWxjdWxhdGVMYXllckJvdW5kcyhw
YWludGluZ0luZm8ucm9vdExheWVyLCBvZmZzZXRGcm9tUm9vdCwgeyB9KTsKIAotICAgIEdyYXBo
aWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHBhaW50aW5nRmlsdGVycy0+YmVnaW5GaWx0ZXJF
ZmZlY3QoZGVzdGluYXRpb25Db250ZXh0LCByZW5kZXJlcigpLCBlbmNsb3NpbmdJbnRSZWN0KHJv
b3RSZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3QocGFpbnRpbmdJbmZvLnBhaW50RGly
dHlSZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBhaW50UmVjdCkpOworICAgIEdyYXBo
aWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHBhaW50aW5nRmlsdGVycy0+YmVnaW5GaWx0ZXJF
ZmZlY3QocmVuZGVyZXIoKSwgZW5jbG9zaW5nSW50UmVjdChyb290UmVsYXRpdmVCb3VuZHMpLCBl
bmNsb3NpbmdJbnRSZWN0KHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCksIGVuY2xvc2luZ0lu
dFJlY3QoZmlsdGVyUmVwYWludFJlY3QpKTsKICAgICBpZiAoIWZpbHRlckNvbnRleHQpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJGaWx0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyOSwyNCArMTI5LDE5IEBAIEdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpp
bnAKICAgICByZXR1cm4gbV9zb3VyY2VJbWFnZSA/ICZtX3NvdXJjZUltYWdlLT5jb250ZXh0KCkg
OiBudWxscHRyOwogfQogCi12b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YWxsb2NhdGVCYWNraW5n
U3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRleHQpCit2b2lk
IFJlbmRlckxheWVyRmlsdGVyczo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpCiB7CiAg
ICAgYXV0byYgZmlsdGVyID0gKm1fZmlsdGVyOwogICAgIGF1dG8gbG9naWNhbFNpemUgPSBmaWx0
ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZShtX2ZpbHRlclJlZ2lvbi5zaXplKCkpOwogCiAgICAgaWYg
KCFtX3NvdXJjZUltYWdlIHx8IG1fc291cmNlSW1hZ2UtPmxvZ2ljYWxTaXplKCkgIT0gbG9naWNh
bFNpemUpIHsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIG1fc291cmNlSW1hZ2UgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBmaWx0ZXIucmVuZGVyaW5nTW9kZSgpLCAmdGFy
Z2V0Q29udGV4dCwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0
OjpCR1JBOCk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0odGFyZ2V0Q29udGV4dCk7CiAg
ICAgICAgIG1fc291cmNlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBm
aWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBTaG91bGRVc2VEaXNwbGF5TGlzdDo6Tm8sIFJlbmRlcmlu
Z1B1cnBvc2U6OkRPTSwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9y
bWF0OjpCR1JBOCwgbV9sYXllci5yZW5kZXJlcigpLmhvc3RXaW5kb3coKSk7Ci0jZW5kaWYKICAg
ICAgICAgaWYgKGF1dG8gY29udGV4dCA9IGlucHV0Q29udGV4dCgpKQogICAgICAgICAgICAgY29u
dGV4dC0+c2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogICAgIH0KIH0KIAotR3JhcGhpY3ND
b250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29u
dGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3Qg
TGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBj
b25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KQorR3JhcGhpY3NDb250ZXh0KiBSZW5k
ZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
LCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0
eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCiB7CiAgICAgaWYgKCFt
X2ZpbHRlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMDAsNyArMTk1LDcgQEAgR3Jh
cGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZwogICAgIHJlc2V0RGlydHlTb3Vy
Y2VSZWN0KCk7CiAKICAgICBmaWx0ZXIuc2V0RmlsdGVyUmVnaW9uKG1fZmlsdGVyUmVnaW9uKTsK
LSAgICBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGRlc3RpbmF0aW9uQ29udGV4dCk7Cisg
ICAgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpOwogCiAgICAgYXV0byogc291cmNlR3Jh
cGhpY3NDb250ZXh0ID0gaW5wdXRDb250ZXh0KCk7CiAgICAgaWYgKCFzb3VyY2VHcmFwaGljc0Nv
bnRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVycy5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJGaWx0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDE0ICs2MywxNCBAQCBwdWJs
aWM6CiAgICAgLy8gUGVyIHJlbmRlcgogICAgIExheW91dFJlY3QgcmVwYWludFJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3JlcGFpbnRSZWN0OyB9CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGJlZ2lu
RmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBSZW5kZXJF
bGVtZW50JiwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVj
dCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KTsKKyAgICBH
cmFwaGljc0NvbnRleHQqIGJlZ2luRmlsdGVyRWZmZWN0KFJlbmRlckVsZW1lbnQmLCBjb25zdCBM
YXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNv
bnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpOwogICAgIHZvaWQgYXBwbHlGaWx0ZXJF
ZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQpOwogCiBwcml2YXRlOgog
ICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UmLCBjb25zdCBOZXR3b3JrTG9h
ZE1ldHJpY3MmKSBmaW5hbDsKICAgICB2b2lkIHJlc2V0RGlydHlTb3VyY2VSZWN0KCkgeyBtX2Rp
cnR5U291cmNlUmVjdCA9IExheW91dFJlY3QoKTsgfQogICAgIEdyYXBoaWNzQ29udGV4dCogaW5w
dXRDb250ZXh0KCk7Ci0gICAgdm9pZCBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYgdGFyZ2V0Q29udGV4dCk7CisgICAgdm9pZCBhbGxvY2F0ZUJhY2tp
bmdTdG9yZUlmTmVlZGVkKCk7CiAKICAgICBSZW5kZXJMYXllciYgbV9sYXllcjsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTQsNyArMTU0LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdQog
I2Vsc2UKICAgICBhdXRvIGNvbG9yU3BhY2UgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KTsKICNlbmRpZgotICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRy
YW5zZm9ybSwgY29sb3JTcGFjZSwgZmlsdGVyRGF0YS0+ZmlsdGVyLT5yZW5kZXJpbmdNb2RlKCks
IHJlbmRlcmVyLmhvc3RXaW5kb3coKSwgY29udGV4dCk7CisgICAgYXV0byBzb3VyY2VHcmFwaGlj
ID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJh
d2luZ1JlZ2lvbiwgZWZmZWN0aXZlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCBmaWx0ZXJEYXRhLT5m
aWx0ZXItPnJlbmRlcmluZ01vZGUoKSwgcmVuZGVyZXIuaG9zdFdpbmRvdygpKTsKICAgICBpZiAo
IXNvdXJjZUdyYXBoaWMpIHsKICAgICAgICAgQVNTRVJUKG1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFw
LmNvbnRhaW5zKCZyZW5kZXJlcikpOwogICAgICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQg
PSBjb250ZXh0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXI6OmFwcGx5UmVzb3UKICNlbmRpZgogCiAgICAgICAgIC8vIEZJWE1FICgxNDk0NzApOiBUaGlz
IGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVk
LiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIGFscGhhIG1hc2tpbmcsIHRob3Vn
aC4KLSAgICAgICAgbWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6
Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBtYXNrQ29s
b3JTcGFjZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbnVsbHB0ciwgY29udGV4dCk7
CisgICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgbWFza0NvbG9y
U3BhY2UsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIG51bGxwdHIpOwogICAgICAgICBp
ZiAoIW1hc2tlckRhdGEtPm1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmlu
Z0NvbnRleHQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNyAr
MjI2LDcgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbAogICAgIHJl
dHVybiBhYnNvbHV0ZVRyYW5zZm9ybTsKIH0KIAotUmVmUHRyPEltYWdlQnVmZmVyPiBTVkdSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
LCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93LCBjb25zdCBHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQpCitSZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUlt
YWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xv
clNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3cpCiB7CiAgICAgSW50UmVjdCBwYWludFJlY3QgPSBjYWxjdWxhdGVJbWFnZUJ1ZmZl
clJlY3QodGFyZ2V0UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgIC8vIERvbid0IGNyZWF0
ZSBlbXB0eSBJbWFnZUJ1ZmZlcnMuCkBAIC0yMzgsMTIgKzIzOCw3IEBAIFJlZlB0cjxJbWFnZUJ1
ZmZlcj4gU1ZHUmVuZGVyaW5nQ29udGV4dDoKICAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVk
c0NsYW1waW5nKGNsYW1wZWRTaXplLCBzY2FsZSkpCiAgICAgICAgIGNsYW1wZWRTaXplID0gY2xh
bXBlZFNpemUgKiBzY2FsZTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBhdXRvIGltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgcmVuZGVyaW5nTW9kZSwgY29u
dGV4dCwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKGNvbnRleHQpOwogICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGNsYW1wZWRTaXplLCByZW5kZXJpbmdNb2RlLCBTaG91bGRVc2VEaXNwbGF5TGlzdDo6
Tm8sIFJlbmRlcmluZ1B1cnBvc2U6OkRPTSwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJH
UkE4LCBob3N0V2luZG93KTsKLSNlbmRpZgogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCkBAIC0yNTYsNyArMjUxLDcgQEAgUmVmUHRyPEltYWdlQnVmZmVy
PiBTVkdSZW5kZXJpbmdDb250ZXh0OgogICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKIH0KIAotUmVm
UHRyPEltYWdlQnVmZmVyPiBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZFJlY3Qs
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCitSZWZQdHI8SW1h
Z2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkUmVjdCwgY29uc3Qg
RGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUpCiB7CiAgICAgSW50U2l6ZSBjbGFtcGVkU2l6ZSA9IHJvdW5kZWRJbnRTaXplKGNsYW1w
ZWRSZWN0LnNpemUoKSk7CiAgICAgRmxvYXRTaXplIHVuY2xhbXBlZFNpemUgPSByb3VuZGVkSW50
U2l6ZSh0YXJnZXRSZWN0LnNpemUoKSk7CkBAIC0yNjUsMTIgKzI2MCw3IEBAIFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29udGV4dDoKICAgICBpZiAoY2xhbXBlZFNpemUuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBh
dXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgcmVuZGVy
aW5nTW9kZSwgY29udGV4dCwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwogICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCByZW5kZXJpbmdNb2RlLCAxLCBjb2xvclNw
YWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotI2VuZGlmCiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAyODc4MTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVwYXJlVG9S
ZW5kZXJTVkdDb250ZW50KFJlbmRlckVsZW1lbnQmLCBQYWludEluZm8mLCBOZWVkc0dyYXBoaWNz
Q29udGV4dFNhdmUgPSBEb250U2F2ZUdyYXBoaWNzQ29udGV4dCk7CiAgICAgYm9vbCBpc1JlbmRl
cmluZ1ByZXBhcmVkKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdGbGFncyAmIFJlbmRlcmlu
Z1ByZXBhcmVkOyB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFJlbmRl
cmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0ciwgY29uc3QgR3JhcGhpY3NDb250
ZXh0KiA9IG51bGxwdHIpOwotICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUlt
YWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBj
bGFtcGVkUmVjdCwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgUmVuZGVyaW5nTW9kZSwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpOworICAgIHN0YXRpYyBSZWZQdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRy
KTsKKyAgICBzdGF0aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZFJlY3QsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFJlbmRlcmluZ01vZGUpOwogCiAgICAgc3RhdGlj
IHZvaWQgcmVuZGVyU3VidHJlZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQmLCBSZW5kZXJFbGVt
ZW50JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAgc3RhdGljIHZvaWQgY2xpcFRvSW1h
Z2VCdWZmZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0
ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBSZWZQdHI8SW1hZ2VCdWZm
ZXI+JiwgYm9vbCBzYWZlVG9DbGVhcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDE1ICs2Niw2IEBACiAj
aW5jbHVkZSAiTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oIgogI2VuZGlmCiAKLSNpZiBV
U0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiRGlyZWN0MkRVdGls
aXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURl
Y29kZXJEaXJlY3QyRC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0j
aW5jbHVkZSA8ZDJkMS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHSW1h
Z2U6OlNWR0ltYWdlKEltYWdlT2JzZXJ2ZXImIG9ic2VydmVyKQpAQCAtMjE3LDEyICsyMDgsMTIg
QEAgSW1hZ2VEcmF3UmVzdWx0IFNWR0ltYWdlOjpkcmF3Rm9yQ29udGFpbgogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLVJlZlB0cjxOYXRpdmVJbWFnZT4gU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkKK1JlZlB0
cjxOYXRpdmVJbWFnZT4gU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKIHsK
LSAgICByZXR1cm4gbmF0aXZlSW1hZ2UodGFyZ2V0Q29udGV4dCk7CisgICAgcmV0dXJuIG5hdGl2
ZUltYWdlKCk7CiB9CiAKLVJlZlB0cjxOYXRpdmVJbWFnZT4gU1ZHSW1hZ2U6Om5hdGl2ZUltYWdl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCopCitSZWZQdHI8TmF0aXZlSW1hZ2U+IFNWR0ltYWdlOjpu
YXRpdmVJbWFnZSgpCiB7CiAgICAgcmV0dXJuIG5hdGl2ZUltYWdlKHNpemUoKSwgRmxvYXRSZWN0
KEZsb2F0UG9pbnQoKSwgc2l6ZSgpKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHJldmlzaW9uIDI4
NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Niw4ICs4Niw4IEBAIHByaXZhdGU6CiAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzIHRvIGJlIGxlc3MgY29uc2VydmF0aXZlLgogICAgIGJvb2wgY3VycmVudEZyYW1lS25v
d25Ub0JlT3BhcXVlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIFJlZlB0
cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3ND
b250ZXh0KiA9IG51bGxwdHIpIGZpbmFsOwotICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZl
SW1hZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIGZpbmFsOworICAgIFJlZlB0
cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBmaW5hbDsKKyAgICBS
ZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlKCkgZmluYWw7CiAgICAgUmVmUHRyPE5hdGl2
ZUltYWdlPiBuYXRpdmVJbWFnZShjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwogCiAgICAgdm9pZCBz
dGFydEFuaW1hdGlvblRpbWVyRmlyZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVyLmNwcAkocmV2aXNpb24gMjg3ODEy
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksOSBAQCB2b2lkIFNWR0ltYWdlRm9yQ29udGFp
bmVyOjpkcmF3UGF0dGVybihHCiAgICAgbV9pbWFnZS0+ZHJhd1BhdHRlcm5Gb3JDb250YWluZXIo
Y29udGV4dCwgbV9jb250YWluZXJTaXplLCBtX2NvbnRhaW5lclpvb20sIG1faW5pdGlhbEZyYWdt
ZW50VVJMLCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgZHN0UmVj
dCwgb3B0aW9ucyk7CiB9CiAKLVJlZlB0cjxOYXRpdmVJbWFnZT4gU1ZHSW1hZ2VGb3JDb250YWlu
ZXI6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFy
Z2V0Q29udGV4dCkKK1JlZlB0cjxOYXRpdmVJbWFnZT4gU1ZHSW1hZ2VGb3JDb250YWluZXI6Om5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKIHsKLSAgICByZXR1cm4gbV9pbWFnZS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUodGFyZ2V0Q29udGV4dCk7CisgICAgcmV0dXJuIG1faW1hZ2Ut
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5l
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZv
ckNvbnRhaW5lci5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEs
NyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHRvIGJlIGxlc3MgY29u
c2VydmF0aXZlLgogICAgIGJvb2wgY3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIGZp
bmFsOworICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KSBmaW5hbDsKIAogcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCBTVkdJbWFnZUZvckNvbnRh
aW5lcihTVkdJbWFnZSosIGNvbnN0IEZsb2F0U2l6ZSYgY29udGFpbmVyU2l6ZSwgZmxvYXQgY29u
dGFpbmVyWm9vbSwgY29uc3QgVVJMJiBpbml0aWFsRnJhZ21lbnRVUkwpOwpJbmRleDogU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMjItMDEtMDcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBw
bGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBEaXJlY3QyRAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0OTk5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFr
ZTogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9uOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb246OmRlY29k
ZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6U2hhcmVhYmxlQml0bWFwKToK
KyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjp+U2hhcmVhYmxlQml0bWFwKToKKyAg
ICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpudW1CeXRlc0ZvclNpemUpOgorICAgICAg
ICAqIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuaDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxl
Qml0bWFwOjpjcmVhdGVQbGF0Zm9ybUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxl
Qml0bWFwOjpkeFN1cmZhY2UpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC93aW4vU2hhcmVh
YmxlQml0bWFwRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9CYWNr
aW5nU3RvcmUuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2lu
L0JhY2tpbmdTdG9yZURpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
d2luL1dlYlBhZ2VQcm94eVdpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
ZGV2aWNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpz
ZXREZXZpY2UpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51
UHJveHlXaW4uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2hv
d1BvcHVwTWVudSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpwYWlu
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpzZXR1cFN3YXBDaGFp
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpjb25m
aWd1cmVCYWNraW5nU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2Vi
UG9wdXBNZW51UHJveHlXaW4uaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlldzo6b25TaXplRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzZXR1cFN3
YXBDaGFpbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNvbmZpZ3VyZUJh
Y2tpbmdTdG9yZSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJWaWV3Lmg6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmQzZERldmljZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmQzZEltbWVkaWF0ZUNvbnRleHQgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUG9wdXBNZW51LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51OjpzaG93KToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVk
R3JhcGhpY3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3Jh
cGhpY3M6OmRpc3BsYXkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpnZXRJbWFnZUZvckZp
bmRNYXRjaCk6CisKIDIwMjItMDEtMDggIFR5bGVyIFdpbGNvY2sgIDx0eWxlcl93QGFwcGxlLmNv
bT4KIAogICAgICAgICBBWDogQWNjZXNzaWJpbGl0eU9iamVjdDo6c2V0Rm9jdXNlZCh0cnVlKSBz
aG91bGQgbWFrZSB0aGUgd2VicGFnZSBmb2N1c2VkLCBhbmQgbWFrZSB3ZWIgY29udGVudCB0aGUg
Zmlyc3QgcmVzcG9uZGVyCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtRlRXLmNtYWtlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm1GVFcuY21ha2UJKHJldmlzaW9uIDI4
NzgxMikKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm1GVFcuY21ha2UJKG5vbmV4aXN0ZW50KQpA
QCAtMSwxOTUgKzAsMCBAQAotc2V0KFdlYktpdF9PVVRQVVRfTkFNRSBXZWJLaXQyKQotc2V0KFdl
YlByb2Nlc3NfT1VUUFVUX05BTUUgV2ViS2l0V2ViUHJvY2VzcykKLXNldChOZXR3b3JrUHJvY2Vz
c19PVVRQVVRfTkFNRSBXZWJLaXROZXR3b3JrUHJvY2VzcykKLXNldChQbHVnaW5Qcm9jZXNzX09V
VFBVVF9OQU1FIFdlYktpdFBsdWdpblByb2Nlc3MpCi1zZXQoR1BVUHJvY2Vzc19PVVRQVVRfTkFN
RSBXZWJLaXRHUFVQcm9jZXNzKQotCi1pbmNsdWRlKEhlYWRlcnMuY21ha2UpCi0KLWFkZF9kZWZp
bml0aW9ucygtREJVSUxESU5HX1dFQktJVCkKLQotbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMK
LSAgICBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHAKLQotICAgIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIu
Y3BwCi0KLSAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzTWFpbkN1cmwuY3Bw
Ci0KLSAgICBQbGF0Zm9ybS9JUEMvd2luL0F0dGFjaG1lbnRXaW4uY3BwCi0gICAgUGxhdGZvcm0v
SVBDL3dpbi9Db25uZWN0aW9uV2luLmNwcAotCi0gICAgUGxhdGZvcm0vY2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5jcHAKLQotICAgIFBsYXRmb3JtL3dpbi9Mb2dn
aW5nV2luLmNwcAotICAgIFBsYXRmb3JtL3dpbi9Nb2R1bGVXaW4uY3BwCi0gICAgUGxhdGZvcm0v
d2luL1NoYXJlZE1lbW9yeVdpbi5jcHAKLQotICAgIFNoYXJlZC9BUEkvYy9jdXJsL1dLQ2VydGlm
aWNhdGVJbmZvQ3VybC5jcHAKLQotICAgIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBl
UGx1Z2luTW9kdWxlTm9uZS5jcHAKLQotICAgIFNoYXJlZC93aW4vQXV4aWxpYXJ5UHJvY2Vzc01h
aW5XaW4uY3BwCi0gICAgU2hhcmVkL3dpbi9OYXRpdmVXZWJLZXlib2FyZEV2ZW50V2luLmNwcAot
ICAgIFNoYXJlZC93aW4vTmF0aXZlV2ViTW91c2VFdmVudFdpbi5jcHAKLSAgICBTaGFyZWQvd2lu
L05hdGl2ZVdlYlRvdWNoRXZlbnRXaW4uY3BwCi0gICAgU2hhcmVkL3dpbi9OYXRpdmVXZWJXaGVl
bEV2ZW50V2luLmNwcAotICAgIFNoYXJlZC93aW4vV2ViRXZlbnRGYWN0b3J5LmNwcAotCi0gICAg
VUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5jcHAKLSAgICBVSVByb2Nlc3MvRGVmYXVsdFVuZG9Db250
cm9sbGVyLmNwcAotICAgIFVJUHJvY2Vzcy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmdOb25lLmNw
cAotICAgIFVJUHJvY2Vzcy9XZWJHcmFtbWFyRGV0YWlsLmNwcAotICAgIFVJUHJvY2Vzcy9XZWJW
aWV3cG9ydEF0dHJpYnV0ZXMuY3BwCi0KLSAgICBVSVByb2Nlc3MvQVBJL0MvV0tWaWV3cG9ydEF0
dHJpYnV0ZXMuY3BwCi0KLSAgICBVSVByb2Nlc3MvQVBJL0MvY3VybC9XS1Byb3RlY3Rpb25TcGFj
ZUN1cmwuY3BwCi0gICAgVUlQcm9jZXNzL0FQSS9DL2N1cmwvV0tXZWJzaXRlRGF0YVN0b3JlUmVm
Q3VybC5jcHAKLQotICAgIFVJUHJvY2Vzcy9BUEkvQy93aW4vV0tWaWV3LmNwcAotCi0gICAgVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3Jh
cGhpY3MuY3BwCi0KLSAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNwZWN0b3JVSVBy
b3h5V2luLmNwcAotCi0gICAgVUlQcm9jZXNzL0xhdW5jaGVyL3dpbi9Qcm9jZXNzTGF1bmNoZXJX
aW4uY3BwCi0KLSAgICBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3Jl
Q3VybC5jcHAKLQotICAgIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS93aW4vV2Vic2l0ZURhdGFTdG9y
ZVdpbi5jcHAKLQotICAgIFVJUHJvY2Vzcy93aW4vUGFnZUNsaWVudEltcGwuY3BwCi0gICAgVUlQ
cm9jZXNzL3dpbi9XZWJDb250ZXh0TWVudVByb3h5V2luLmNwcAotICAgIFVJUHJvY2Vzcy93aW4v
V2ViUGFnZVByb3h5V2luLmNwcAotICAgIFVJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlX
aW4uY3BwCi0gICAgVUlQcm9jZXNzL3dpbi9XZWJQcm9jZXNzUG9vbFdpbi5jcHAKLSAgICBVSVBy
b2Nlc3Mvd2luL1dlYlZpZXcuY3BwCi0KLSAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL3dp
bi9JbmplY3RlZEJ1bmRsZVdpbi5jcHAKLQotICAgIFdlYlByb2Nlc3MvSW5zcGVjdG9yL3dpbi9X
ZWJJbnNwZWN0b3JVSVdpbi5jcHAKLQotICAgIFdlYlByb2Nlc3MvTWVkaWFDYWNoZS9XZWJNZWRp
YUtleVN0b3JhZ2VNYW5hZ2VyLmNwcAotCi0gICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93
aW4vV2ViUG9wdXBNZW51V2luLmNwcAotCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJh
dGVkU3VyZmFjZS5jcHAKLQotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAotICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuY3Bw
Ci0KLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL1dlYlBhZ2VXaW4uY3BwCi0KLSAgICBXZWJQ
cm9jZXNzL3dpbi9XZWJQcm9jZXNzTWFpbldpbi5jcHAKLSAgICBXZWJQcm9jZXNzL3dpbi9XZWJQ
cm9jZXNzV2luLmNwcAotKQotCi1saXN0KEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklF
UwotICAgICIke1dFQktJVF9ESVJ9L1BsYXRmb3JtL2NsYXNzaWZpZXIiCi0gICAgIiR7V0VCS0lU
X0RJUn0vUGx1Z2luUHJvY2Vzcy93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vU2hhcmVkL0FQSS9j
L3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcyIKLSAg
ICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBv
c2l0b3IiCi0gICAgIiR7V0VCS0lUX0RJUn0vU2hhcmVkL1BsdWdpbnMvd2luIgotICAgICIke1dF
QktJVF9ESVJ9L1NoYXJlZC93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9D
L2NhaXJvIgotICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvQy9jdXJsIgotICAgICIk
e1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvQy93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vVUlQ
cm9jZXNzL0FQSS9jcHAvd2luIgotICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvd2lu
IgotICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzIgotICAg
ICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0IgotICAgICIke1dFQktJ
VF9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luIgotICAgICIke1dFQktJVF9ESVJ9L1VJUHJv
Y2Vzcy9QbHVnaW5zL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3Mvd2luIgotICAg
ICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL3dpbiIKLSAgICAi
JHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS93aW4vRE9NIgotICAg
ICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvSW5zcGVjdG9yL3dpbiIKLSAgICAiJHtXRUJLSVRf
RElSfS9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcyIKLSAgICAiJHtXRUJLSVRfRElS
fS9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2luIgotICAgICIke1dFQktJVF9ESVJ9L3dpbiIKLSkKLQot
bGlzdChBUFBFTkQgV2ViS2l0X1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTCi0pCi0KLXNldChX
ZWJLaXRDb21tb25JbmNsdWRlRGlyZWN0b3JpZXMgJHtXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklF
U30pCi1zZXQoV2ViS2l0Q29tbW9uU3lzdGVtSW5jbHVkZURpcmVjdG9yaWVzICR7V2ViS2l0X1NZ
U1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTfSkKLQotbGlzdChBUFBFTkQgV2ViUHJvY2Vzc19TT1VS
Q0VTCi0gICAgV2ViUHJvY2Vzcy9FbnRyeVBvaW50L3dpbi9XZWJQcm9jZXNzTWFpbi5jcHAKLSkK
LQotbGlzdChBUFBFTkQgTmV0d29ya1Byb2Nlc3NfU09VUkNFUwotICAgIE5ldHdvcmtQcm9jZXNz
L0VudHJ5UG9pbnQvd2luL05ldHdvcmtQcm9jZXNzTWFpbi5jcHAKLSkKLQotbGlzdChBUFBFTkQg
R1BVUHJvY2Vzc19TT1VSQ0VTCi0gICAgR1BVUHJvY2Vzcy9FbnRyeVBvaW50L3dpbi9HUFVQcm9j
ZXNzTWFpbi5jcHAKLSkKLQotYWRkX2RlZmluaXRpb25zKC1EVVNFX0RJUkVDVDJEPTEgLURVU0Vf
Q1VSTD0xKQotCi1saXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwotICAgIE5ldHdvcmtQcm9jZXNz
L0Nvb2tpZXMvY3VybC9XZWJDb29raWVNYW5hZ2VyQ3VybC5jcHAKLQotICAgIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcAotICAgIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbEN1cmwuY3BwCi0KLSAgICBOZXR3b3JrUHJvY2Vzcy9j
dXJsL05ldHdvcmtEYXRhVGFza0N1cmwuY3BwCi0gICAgTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3
b3JrUHJvY2Vzc0N1cmwuY3BwCi0gICAgTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrU2Vzc2lv
bkN1cmwuY3BwCi0gICAgTmV0d29ya1Byb2Nlc3MvY3VybC9SZW1vdGVOZXR3b3JraW5nQ29udGV4
dEN1cmwuY3BwCi0KLSAgICBTaGFyZWQvY3VybC9XZWJDb3JlQXJndW1lbnRDb2RlcnNDdXJsLmNw
cAotCi0gICAgU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAKLQotICAgIFVJ
UHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwCi0KLSAgICBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L2N1cmwvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAKLSkKLQotbGlz
dChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAiJHtXRUJLSVRfRElSfS9O
ZXR3b3JrUHJvY2Vzcy9jdXJsIgotICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvY3VybCIKLSkKLQotbGlzdChBUFBFTkQgV2ViS2l0X1BSSVZBVEVfTElCUkFSSUVT
Ci0gICAgT3BlblNTTDo6U1NMCi0gICAgRDJkMS5saWIKLSAgICBEM2QxMS5saWIKLSAgICBEd3Jp
dGUKLSAgICBEeGdpLmxpYgotICAgIER4Z3VpZAotICAgIFdpbmRvd3NDb2RlY3MKLSAgICBtZnV1
aWQubGliCi0gICAgc3RybWlpZHMubGliCi0pCi0KLWlmIChFTkFCTEVfUkVNT1RFX0lOU1BFQ1RP
UikKLSAgICBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwotICAgICAgICBVSVByb2Nlc3MvSW5z
cGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCi0gICAgICAgIFVJUHJvY2Vz
cy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5jcHAKLQot
ICAgICAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
V2luLmNwcAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9S
SUVTCi0gICAgICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9zb2NrZXQiCi0gICAgKQotZW5k
aWYgKCkKLQotIyBXaW5kb3dzIHNwZWNpZmljCi1saXN0KEFQUEVORCBXZWJLaXRfUFVCTElDX0ZS
QU1FV09SS19IRUFERVJTCi0gICAgU2hhcmVkL0FQSS9jL2N1cmwvV0tDZXJ0aWZpY2F0ZUluZm9D
dXJsLmgKLQotICAgIFNoYXJlZC9BUEkvYy93aW4vV0tCYXNlV2luLmgKLQotICAgIFVJUHJvY2Vz
cy9BUEkvQy9jdXJsL1dLUHJvdGVjdGlvblNwYWNlQ3VybC5oCi0gICAgVUlQcm9jZXNzL0FQSS9D
L2N1cmwvV0tXZWJzaXRlRGF0YVN0b3JlUmVmQ3VybC5oCi0KLSAgICBVSVByb2Nlc3MvQVBJL0Mv
d2luL1dLVmlldy5oCi0pCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWFibGVCaXRt
YXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlYWJsZUJpdG1h
cC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlYWJs
ZUJpdG1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDE0ICs3NSw2IEBAIHZvaWQgU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGU6OmNsZWFyKCkKIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpDb25maWd1
cmF0aW9uOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29k
ZXIgPDwgY29sb3JTcGFjZSA8PCBpc09wYXF1ZTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgU2hh
cmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZUhhbmRsZShlbmNvZGVyLCBzaGFyZWRSZXNvdXJjZUhh
bmRsZSk7Ci0KLSAgICAvLyBIYW5kIG9mZiBvd25lcnNoaXAgb2Ygb3VyIEhBTkRMRSB0byB0aGUg
cmVjZWl2aW5nIHByb2Nlc3MuIEl0IHdpbGwgY2xvc2UgaXQgZm9yIHVzLgotICAgIC8vIEZJWE1F
OiBJZiB0aGUgcmVjZWl2aW5nIHByb2Nlc3MgY3Jhc2hlcyBiZWZvcmUgaXQgcmVjZWl2ZXMgdGhl
IG1lbW9yeSwgdGhlIG1lbW9yeSB3aWxsIGJlCi0gICAgLy8gbGVha2VkLiBTZWUgPGh0dHA6Ly93
ZWJraXQub3JnL2IvNDc1MDI+LgotICAgIHNoYXJlZFJlc291cmNlSGFuZGxlID0gbnVsbHB0cjsK
LSNlbmRpZgogfQogCiBib29sIFNoYXJlYWJsZUJpdG1hcDo6Q29uZmlndXJhdGlvbjo6ZGVjb2Rl
KElQQzo6RGVjb2RlciYgZGVjb2RlciwgQ29uZmlndXJhdGlvbiYgcmVzdWx0KQpAQCAtOTgsMTUg
KzkwLDYgQEAgYm9vbCBTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb246OmRlYwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICByZXN1bHQgPSBDb25maWd1cmF0aW9uIHsgV1RGTW92ZSgq
Y29sb3JTcGFjZSksICppc09wYXF1ZSB9OwotCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIGF1dG8g
cHJvY2Vzc1NwZWNpZmljSGFuZGxlID0gU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmRlY29kZUhhbmRs
ZShkZWNvZGVyKTsKLSAgICBpZiAoIXByb2Nlc3NTcGVjaWZpY0hhbmRsZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmVzdWx0LnNoYXJlZFJlc291cmNlSGFuZGxlID0gcHJvY2Vzc1Nw
ZWNpZmljSGFuZGxlLnZhbHVlKCk7Ci0jZW5kaWYKLQogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0xODcsMTggKzE3MCwxMiBAQCBTaGFyZWFibGVCaXRtYXA6OlNoYXJlYWJsZUJpdG1hcChjb25z
dCBJCiAgICAgLCBtX3NoYXJlZE1lbW9yeShzaGFyZWRNZW1vcnkpCiAgICAgLCBtX2RhdGEobnVs
bHB0cikKIHsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgY3JlYXRlU2hhcmVkUmVzb3VyY2UoKTsK
LSNlbmRpZgogfQogCiBTaGFyZWFibGVCaXRtYXA6On5TaGFyZWFibGVCaXRtYXAoKQogewogICAg
IGlmICghaXNCYWNrZWRCeVNoYXJlZE1lbW9yeSgpKQogICAgICAgICBTaGFyZWFibGVCaXRtYXBN
YWxsb2M6OmZyZWUobV9kYXRhKTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgZGlzcG9zZVNoYXJl
ZFJlc291cmNlKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCogU2hhcmVhYmxlQml0bWFwOjpkYXRhKCkg
Y29uc3QKQEAgLTIxMiwxMiArMTg5LDcgQEAgdm9pZCogU2hhcmVhYmxlQml0bWFwOjpkYXRhKCkg
Y29uc3QKIAogQ2hlY2tlZFVpbnQzMiBTaGFyZWFibGVCaXRtYXA6Om51bUJ5dGVzRm9yU2l6ZShX
ZWJDb3JlOjpJbnRTaXplIHNpemUsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6Q29uZmlndXJhdGlv
biYgY29uZmlndXJhdGlvbikKIHsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgLy8gV2UgcGFzcyBy
ZWZlcmVuY2VzIHRvIEdQVSB0ZXh0dXJlcywgc28gbm8gbmVlZCB0byBhbGxvY2F0ZSBmcmFtZSBi
dWZmZXJzIGhlcmUuIEp1c3Qgc2VuZCBhIHNtYWxsIGJpdCBvZiBkYXRhLgotICAgIHJldHVybiBz
aXplb2Yodm9pZCopOwotI2Vsc2UKICAgICByZXR1cm4gY2FsY3VsYXRlQnl0ZXNQZXJSb3coc2l6
ZSwgY29uZmlndXJhdGlvbikgKiBzaXplLmhlaWdodCgpOwotI2VuZGlmCiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgJ
KHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlYWJsZUJpdG1h
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNiArMzIsNiBAQAogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAotI2lmIFVTRShE
SVJFQ1QyRCkKLWludGVyZmFjZSBJRDJEMUJpdG1hcDsKLWludGVyZmFjZSBJRDJEMVJlbmRlclRh
cmdldDsKLWludGVyZmFjZSBJRDNEMTFEZXZpY2UxOwotaW50ZXJmYWNlIElEWEdJS2V5ZWRNdXRl
eDsKLWludGVyZmFjZSBJRFhHSVN1cmZhY2UxOwotCi0jaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIu
aD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDsKQEAgLTU0LDkgKzQ0LDYgQEAgcHVibGljOgogICAgIHN0cnVjdCBDb25m
aWd1cmF0aW9uIHsKICAgICAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+IGNvbG9yU3BhY2U7CiAgICAgICAgIGJvb2wgaXNPcGFxdWUgeyBmYWxzZSB9Owot
I2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgbXV0YWJsZSBIQU5ETEUgc2hhcmVkUmVzb3VyY2VI
YW5kbGUgeyBudWxscHRyIH07Ci0jZW5kaWYKIAogICAgICAgICB2b2lkIGVuY29kZShJUEM6OkVu
Y29kZXImKSBjb25zdDsKICAgICAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRl
Y29kZShJUEM6OkRlY29kZXImLCBDb25maWd1cmF0aW9uJik7CkBAIC0xMzcsMTQgKzEyNCw2IEBA
IHB1YmxpYzoKICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBjcmVhdGVDYWlyb1N1cmZhY2Uo
KTsKIAogICAgIFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2VQdHIgY3JlYXRlUGxhdGZvcm1JbWFnZSgp
IHsgcmV0dXJuIGNyZWF0ZUNhaXJvU3VyZmFjZSgpOyB9Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0g
ICAgQ09NUHRyPElEMkQxQml0bWFwPiBjcmVhdGVEaXJlY3QyRFN1cmZhY2UoSUQzRDExRGV2aWNl
MSosIElEMkQxUmVuZGVyVGFyZ2V0Kik7Ci0gICAgSURYR0lTdXJmYWNlMSogZHhTdXJmYWNlKCkg
eyByZXR1cm4gbV9zdXJmYWNlLmdldCgpOyB9Ci0gICAgdm9pZCBjcmVhdGVTaGFyZWRSZXNvdXJj
ZSgpOwotICAgIHZvaWQgZGlzcG9zZVNoYXJlZFJlc291cmNlKCk7Ci0gICAgdm9pZCBsZWFrU2hh
cmVkUmVzb3VyY2UoKTsKLQotICAgIFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2VQdHIgY3JlYXRlUGxh
dGZvcm1JbWFnZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCiBwcml2YXRlOgpAQCAt
MTcxLDEyICsxNTAsNiBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOwog
ICAgIENvbmZpZ3VyYXRpb24gbV9jb25maWd1cmF0aW9uOwogCi0jaWYgVVNFKERJUkVDVDJEKQot
ICAgIENPTVB0cjxJRFhHSVN1cmZhY2UxPiBtX3N1cmZhY2U7Ci0gICAgQ09NUHRyPElEWEdJS2V5
ZWRNdXRleD4gbV9zdXJmYWNlTXV0ZXg7Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBtX2JpdG1h
cDsKLSNlbmRpZgotCiAjaWYgVVNFKENHKQogICAgIGJvb2wgbV9yZWxlYXNlQml0bWFwQ29udGV4
dERhdGFDYWxsZWQgeyBmYWxzZSB9OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4
NzgxMikKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3Qy
RC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBCcmVudCBGdWxnaGFtIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgotICogQ29weXJp
Z2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLQotI2luY2x1ZGUgIkRlY29kZXIuaCIKLSNp
bmNsdWRlICJFbmNvZGVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbWFnZS5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvRElCUGl4ZWxEYXRhLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9EaXJlY3Qy
RE9wZXJhdGlvbnMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJEVXRpbGl0aWVzLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4
dERpcmVjdDJELmg+Ci0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jaW5jbHVkZSA8ZDNkMTFfMS5oPgot
I2luY2x1ZGUgPGR4Z2kxXzIuaD4KLSNpbmNsdWRlIDx3aW5jb2RlYy5oPgotI2luY2x1ZGUgPHd0
Zi9Qcm9jZXNzSUQuaD4KLQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwotCi12b2lkIFNoYXJlYWJsZUJpdG1hcDo6dmFsaWRhdGVDb25maWd1cmF0aW9uKENv
bmZpZ3VyYXRpb24mKQotewotfQotCi1zdGF0aWMgdW5zaWduZWQgc3RyaWRlRm9yV2lkdGgodW5z
aWduZWQgd2lkdGgpCi17Ci0gICAgc3RhdGljIHVuc2lnbmVkIGJpdHNQZXJQaXhlbCA9IERpcmVj
dDJEOjpiaXRzUGVyUGl4ZWwoRGlyZWN0MkQ6OndpY0JpdG1hcEZvcm1hdCgpKTsKLSAgICByZXR1
cm4gYml0c1BlclBpeGVsICogd2lkdGggLyA4OwotfQotCi1DaGVja2VkVWludDMyIFNoYXJlYWJs
ZUJpdG1hcDo6Y2FsY3VsYXRlQnl0ZXNQZXJSb3coV2ViQ29yZTo6SW50U2l6ZSBzaXplLCBjb25z
dCBDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQotewotICAgIHJldHVybiBjYWxjdWxhdGVC
eXRlc1BlclBpeGVsKGNvbmZpZ3VyYXRpb24pICogc2l6ZS53aWR0aCgpOwotfQotCi1DaGVja2Vk
VWludDMyIFNoYXJlYWJsZUJpdG1hcDo6Y2FsY3VsYXRlQnl0ZXNQZXJQaXhlbChjb25zdCBDb25m
aWd1cmF0aW9uJikKLXsKLSAgICByZXR1cm4gNDsKLX0KLQotdm9pZCBTaGFyZWFibGVCaXRtYXA6
OmNyZWF0ZVNoYXJlZFJlc291cmNlKCkKLXsKLSAgICAvLyBEb24ndCBjcmVhdGUgYSBzaGFyZWQg
cmVzb3VyY2UgaWYgdGhlIGNvbmZpZ3VyYXRpb24gaW5zdHJ1Y3RzIHVzIHRvIHVzZSBhbiBleGlz
dGluZyBvbmUuCi0gICAgaWYgKG1fY29uZmlndXJhdGlvbi5zaGFyZWRSZXNvdXJjZUhhbmRsZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdXJmYWNlID0gRGlyZWN0MkQ6OmNyZWF0ZURYR0lT
dXJmYWNlT2ZTaXplKG1fc2l6ZSwgbnVsbHB0ciwgdHJ1ZSk7Ci0KLSAgICBDT01QdHI8SURYR0lS
ZXNvdXJjZTE+IHJlc291cmNlRGF0YTsKLSAgICBIUkVTVUxUIGhyID0gbV9zdXJmYWNlLT5RdWVy
eUludGVyZmFjZShfX3V1aWRvZihJRFhHSVJlc291cmNlKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kio+KCZyZXNvdXJjZURhdGEpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsK
LQotICAgIGhyID0gcmVzb3VyY2VEYXRhLT5DcmVhdGVTaGFyZWRIYW5kbGUobnVsbHB0ciwgRFhH
SV9TSEFSRURfUkVTT1VSQ0VfUkVBRCB8IERYR0lfU0hBUkVEX1JFU09VUkNFX1dSSVRFLCBudWxs
cHRyLCAmbV9jb25maWd1cmF0aW9uLnNoYXJlZFJlc291cmNlSGFuZGxlKTsKLSAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLX0KLQotdm9pZCBTaGFyZWFibGVCaXRtYXA6OmRpc3Bv
c2VTaGFyZWRSZXNvdXJjZSgpCi17Ci0gICAgaWYgKG1fc3VyZmFjZU11dGV4KQotICAgICAgICBt
X3N1cmZhY2VNdXRleC0+UmVsZWFzZVN5bmMoMSk7Ci0gICAgaWYgKG1fY29uZmlndXJhdGlvbi5z
aGFyZWRSZXNvdXJjZUhhbmRsZSkKLSAgICAgICAgOjpDbG9zZUhhbmRsZShtX2NvbmZpZ3VyYXRp
b24uc2hhcmVkUmVzb3VyY2VIYW5kbGUpOwotfQotCi12b2lkIFNoYXJlYWJsZUJpdG1hcDo6bGVh
a1NoYXJlZFJlc291cmNlKCkKLXsKLSAgICBtX2NvbmZpZ3VyYXRpb24uc2hhcmVkUmVzb3VyY2VI
YW5kbGUgPSBudWxscHRyOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpCi17Ci0gICAgLy8gTG9jayB0
aGUgc3VyZmFjZSB0byB0aGUgY3VycmVudCBkZXZpY2Ugd2hpbGUgcmVuZGVyaW5nLgotICAgIEhS
RVNVTFQgaHIgPSBtX3N1cmZhY2UtPlF1ZXJ5SW50ZXJmYWNlKCZtX3N1cmZhY2VNdXRleCk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgaHIgPSBtX3N1cmZhY2VNdXRl
eC0+QWNxdWlyZVN5bmMoMCwgSU5GSU5JVEUpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURF
RChocikpOwotCi0gICAgYXV0byBzdXJmYWNlQ29udGV4dCA9IERpcmVjdDJEOjpjcmVhdGVTdXJm
YWNlUmVuZGVyVGFyZ2V0KG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgaWYgKCFzdXJmYWNlQ29udGV4
dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFw
aGljc0NvbnRleHREaXJlY3QyRD4oc3VyZmFjZUNvbnRleHQuZ2V0KCkpOwotfQotCi12b2lkIFNo
YXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQ
b2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpCi17Ci0gICAgcGFpbnQoY29u
dGV4dCwgMSwgZHN0UG9pbnQsIHNyY1JlY3QpOwotfQotCi12b2lkIFNoYXJlYWJsZUJpdG1hcDo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9hdCBzY2FsZUZhY3RvciwgY29uc3Qg
SW50UG9pbnQmIGRzdFBvaW50LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KQotewotICAgIGF1dG8g
c3VyZmFjZSA9IGNyZWF0ZURpcmVjdDJEU3VyZmFjZShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
LT5kM2REZXZpY2UoKSwgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkp
OwotCi0jaWZuZGVmIF9OREVCVUcKLSAgICBhdXRvIGJpdG1hcFNpemUgPSBzdXJmYWNlLT5HZXRQ
aXhlbFNpemUoKTsKLSAgICBBU1NFUlQoYml0bWFwU2l6ZS53aWR0aCA9PSBtX3NpemUud2lkdGgo
KSk7Ci0gICAgQVNTRVJUKGJpdG1hcFNpemUuaGVpZ2h0ID09IG1fc2l6ZS5oZWlnaHQoKSk7Ci0j
ZW5kaWYKLQotICAgIEZsb2F0UmVjdCBkZXN0UmVjdChkc3RQb2ludCwgc3JjUmVjdC5zaXplKCkp
OwotICAgIEZsb2F0UmVjdCBzcmNSZWN0U2NhbGVkKHNyY1JlY3QpOwotICAgIHNyY1JlY3RTY2Fs
ZWQuc2NhbGUoc2NhbGVGYWN0b3IpOwotCi0gICAgQVNTRVJUKGNvbnRleHQuaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwotICAgIGF1dG8mIHN0YXRlID0gY29udGV4dC5zdGF0ZSgpOwotICAgIGF1dG8m
IHBsYXRmb3JtQ29udGV4dCA9ICpjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgSW1h
Z2VQYWludGluZ09wdGlvbnMgb3B0aW9ucyB7IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0
ZS5ibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24oKSwgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSB9OwotICAgIERpcmVjdDJEOjpkcmF3UGxhdGZvcm1JbWFnZShwbGF0Zm9ybUNvbnRl
eHQsIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlv
bnMsIHN0YXRlLmFscGhhLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotQ09N
UHRyPElEMkQxQml0bWFwPiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZURpcmVjdDJEU3VyZmFjZShJ
RDNEMTFEZXZpY2UxKiBkaXJlY3RYRGV2aWNlLCBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFy
Z2V0KQotewotICAgIGlmICghZGlyZWN0WERldmljZSkKLSAgICAgICAgZGlyZWN0WERldmljZSA9
IERpcmVjdDJEOjpkZWZhdWx0RGlyZWN0WERldmljZSgpOwotCi0gICAgaWYgKCFtX2JpdG1hcCkg
ewotICAgICAgICBDT01QdHI8SUQzRDExVGV4dHVyZTJEPiB0ZXh0dXJlOwotICAgICAgICBIUkVT
VUxUIGhyID0gZGlyZWN0WERldmljZS0+T3BlblNoYXJlZFJlc291cmNlMShtX2NvbmZpZ3VyYXRp
b24uc2hhcmVkUmVzb3VyY2VIYW5kbGUsIF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmdGV4dHVyZSkpOwotICAgICAgICBpZiAoIVNVQ0NFRURFRCho
cikpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBociA9IHRleHR1cmUt
PlF1ZXJ5SW50ZXJmYWNlKCZtX3N1cmZhY2UpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUND
RUVERUQoaHIpKTsKLQotICAgICAgICAvLyBMb2NrIHRoZSBzdXJmYWNlIHRvIHRoZSBjdXJyZW50
IGRldmljZSB3aGlsZSByZW5kZXJpbmcuCi0gICAgICAgIGhyID0gbV9zdXJmYWNlLT5RdWVyeUlu
dGVyZmFjZSgmbV9zdXJmYWNlTXV0ZXgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVE
RUQoaHIpKTsKLSAgICAgICAgaHIgPSBtX3N1cmZhY2VNdXRleC0+QWNxdWlyZVN5bmMoMSwgSU5G
SU5JVEUpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgICAg
ICBhdXRvIGJpdG1hcFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpOwot
ICAgICAgICBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlU2hhcmVkQml0bWFwKF9fdXVpZG9mKElE
WEdJU3VyZmFjZTEpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihtX3N1cmZhY2UuZ2V0KCkpLCAm
Yml0bWFwUHJvcGVydGllcywgJm1fYml0bWFwKTsKLSAgICAgICAgaWYgKCFTVUNDRUVERUQoaHIp
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fYml0
bWFwOwotfQotCi1SZWZQdHI8SW1hZ2U+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlSW1hZ2UoKQot
ewotICAgIGF1dG8gc3VyZmFjZSA9IGNyZWF0ZURpcmVjdDJEU3VyZmFjZShudWxscHRyLCBHcmFw
aGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKSk7Ci0gICAgaWYgKCFzdXJmYWNlKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRl
KFdURk1vdmUoc3VyZmFjZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQmFja2luZ1N0b3JlLmNwcAkocmV2aXNpb24gMjg3ODEyKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQmFja2luZ1N0b3JlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksMTEgKzI5LDYgQEAKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNs
dWRlICJVcGRhdGVJbmZvLmgiCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZDJkMS5o
PgotI2luY2x1ZGUgPGQzZDExXzEuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OCwxMCArMjc4LDYgQEAK
ICNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oIgogI2VuZGlmCiAKLSNpZiBV
U0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2VuZGlmCi0KICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogI2luY2x1ZGUgIldl
YkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXJQcm94eS5oIgogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjg3ODEyKQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE4MywxMCArMTgzLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Byb21pc2VkQXR0YWNobWVudElu
Zm8uaD4KICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotaW50ZXJmYWNlIElEM0QxMURldmlj
ZTE7Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShNRURJQV9VU0FHRSkKICNpbmNsdWRlIDxXZWJDb3Jl
L01lZGlhU2Vzc2lvbklkZW50aWZpZXIuaD4KICNlbmRpZgpAQCAtMTAxNywxMCArMTAxMyw2IEBA
IHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICBQbGF0Zm9ybVZpZXdXaWRnZXQgdmll
d1dpZGdldCgpOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBJRDNEMTFEZXZpY2UxKiBkZXZpY2Uo
KSBjb25zdDsKLSAgICB2b2lkIHNldERldmljZShJRDNEMTFEZXZpY2UxKik7Ci0jZW5kaWYKICNl
bmRpZgogI2lmIFVTRShMSUJXUEUpCiAgICAgc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIHZpZXdC
YWNrZW5kKCk7CkBAIC0zMTA1LDkgKzMwOTcsNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxSZW1v
dGVNZWRpYVNlc3Npb25Db29yZGluYXRvclByb3h5PiBtX21lZGlhU2Vzc2lvbkNvb3JkaW5hdG9y
UHJveHk7CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8SUQzRDExRGV2
aWNlMT4gbV9kZXZpY2U7Ci0jZW5kaWYKICAgICBib29sIG1fc2Vzc2lvblN0YXRlV2FzUmVzdG9y
ZWRCeUFQSVJlcXVlc3QgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc1F1b3RhSW5jcmVhc2VEZW5p
ZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0xheWVyVHJlZUZyb3plbkR1ZVRvU3dpcGVBbmlt
YXRpb24geyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0JhY2tp
bmdTdG9yZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwCShub25leGlz
dGVudCkKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCi0KLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAu
aCIKLSNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJEVXRpbGl0
aWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaD4KLSNpbmNsdWRlIDxkMmQx
Lmg+Ci0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2luY2x1ZGUgPGR4Z2kuaD4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotc3RkOjp1bmlxdWVfcHRyPEJh
Y2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRD4gQmFja2luZ1N0b3JlOjpjcmVhdGVCYWNrZW5kKCkK
LXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBs
PihtX3NpemUsIG1fZGV2aWNlU2NhbGVGYWN0b3IsIG1fd2ViUGFnZVByb3h5LmRldmljZSgpKTsK
LX0KLQotdm9pZCBCYWNraW5nU3RvcmU6OnBhaW50KERYQ29ubmVjdGlvbnMgZHhDb25uZWN0aW9u
cywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBBU1NFUlQobV9iYWNrZW5kKTsKLSAgICBB
U1NFUlQobV9iYWNrZW5kLT5zaXplKCkgPT0gbV9zaXplKTsKLQotICAgIENPTVB0cjxJRDNEMTFS
ZXNvdXJjZT4gYmFja0J1ZmZlcjsKLSAgICBIUkVTVUxUIGhyID0gZHhDb25uZWN0aW9ucy5iYWNr
QnVmZmVyLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNEMTFSZXNvdXJjZSksIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCoqPigmYmFja0J1ZmZlcikpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NF
RURFRChocikpOwotCi0gICAgQ09NUHRyPElEM0QxMVJlc291cmNlPiBiYWNraW5nU3RvcmU7Ci0g
ICAgaHIgPSBtX2JhY2tlbmQtPmR4U3VyZmFjZSgpLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJ
RDNEMTFSZXNvdXJjZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja2luZ1N0b3JlKSk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBDRDNEMTFfQk9YIHNy
Y0JveChyZWN0LngoKSwgcmVjdC55KCksIDAsIHJlY3QueCgpICsgcmVjdC53aWR0aCgpLCByZWN0
LnkoKSArIHJlY3QuaGVpZ2h0KCksIDEpOwotICAgIGR4Q29ubmVjdGlvbnMuaW1tZWRpYXRlQ29u
dGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uMShiYWNrQnVmZmVyLmdldCgpLCAwLCByZWN0Lngo
KSwgcmVjdC55KCksIDAsIGJhY2tpbmdTdG9yZS5nZXQoKSwgMCwgJnNyY0JveCwgRDNEMTFfQ09Q
WV9ESVNDQVJEKTsKLX0KLQotdm9pZCBCYWNraW5nU3RvcmU6OmluY29ycG9yYXRlVXBkYXRlKFNo
YXJlYWJsZUJpdG1hcCogYml0bWFwLCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQotewot
ICAgIGlmICghbV9iYWNrZW5kKQotICAgICAgICBtX2JhY2tlbmQgPSBjcmVhdGVCYWNrZW5kKCk7
Ci0KLSAgICBzY3JvbGwodXBkYXRlSW5mby5zY3JvbGxSZWN0LCB1cGRhdGVJbmZvLnNjcm9sbE9m
ZnNldCk7Ci0KLSAgICBJbnRQb2ludCB1cGRhdGVSZWN0Qm91bmRzTG9jYXRpb24gPSB1cGRhdGVJ
bmZvLnVwZGF0ZVJlY3RCb3VuZHMubG9jYXRpb24oKTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1h
cD4gZGV2aWNlVXBkYXRlQml0bWFwID0gYml0bWFwLT5jcmVhdGVEaXJlY3QyRFN1cmZhY2UobV93
ZWJQYWdlUHJveHkuZGV2aWNlKCksIG1fYmFja2VuZC0+cmVuZGVyVGFyZ2V0KCkpOwotICAgIGlm
ICghZGV2aWNlVXBkYXRlQml0bWFwKQotICAgICAgICByZXR1cm47Ci0KLSNpZm5kZWYgX05ERUJV
RwotICAgIGF1dG8gZGV2aWNlQml0bWFwU2l6ZSA9IGRldmljZVVwZGF0ZUJpdG1hcC0+R2V0UGl4
ZWxTaXplKCk7Ci0gICAgQVNTRVJUKGRldmljZUJpdG1hcFNpemUud2lkdGggPT0gdXBkYXRlSW5m
by51cGRhdGVSZWN0Qm91bmRzLndpZHRoKCkpOwotICAgIEFTU0VSVChkZXZpY2VCaXRtYXBTaXpl
LmhlaWdodCA9PSB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMuaGVpZ2h0KCkpOwotI2VuZGlm
Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHVwZGF0ZVJlY3QgOiB1cGRhdGVJbmZvLnVwZGF0ZVJl
Y3RzKSB7Ci0gICAgICAgIGF1dG8gY3VycmVudFJlY3RMb2NhdGlvbiA9IEludFNpemUodXBkYXRl
UmVjdC54KCkgLSB1cGRhdGVSZWN0Qm91bmRzTG9jYXRpb24ueCgpLCB1cGRhdGVSZWN0LnkoKSAt
IHVwZGF0ZVJlY3RCb3VuZHNMb2NhdGlvbi55KCkpOwotICAgICAgICBhdXRvIGRlc3RSZWN0TG9j
YXRpb24gPSBJbnRTaXplKHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0LnkoKSk7Ci0gICAgICAg
IERpcmVjdDJEOjpjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKGRldmljZVVwZGF0ZUJp
dG1hcC5nZXQoKSwgbV9iYWNrZW5kLT5zdXJmYWNlKCksIGN1cnJlbnRSZWN0TG9jYXRpb24sIHVw
ZGF0ZVJlY3QsIGRlc3RSZWN0TG9jYXRpb24pOwotICAgIH0KLX0KLQotdm9pZCBCYWNraW5nU3Rv
cmU6OnNjcm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBJbnRTaXplJiBzY3Jv
bGxPZmZzZXQpCi17Ci0gICAgaWYgKHNjcm9sbE9mZnNldC5pc1plcm8oKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKG1fYmFja2VuZCk7Ci0gICAgbV9iYWNrZW5kLT5zY3JvbGwoc2Ny
b2xsUmVjdCwgc2Nyb2xsT2Zmc2V0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcAko
cmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBhZ2VQ
cm94eVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEwICszMiw2IEBACiAjaW5jbHVkZSA8
V2ViQ29yZS9TZWFyY2hQb3B1cE1lbnVEQi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckFnZW50
Lmg+CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYlBhZ2VQcm94eTo6cGxhdGZvcm1Jbml0aWFs
aXplKCkKQEAgLTc5LDE4ICs3NSw2IEBAIFBsYXRmb3JtVmlld1dpZGdldCBXZWJQYWdlUHJveHk6
OnZpZXdXaWQKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGFnZUNsaWVudEltcGwmPihwYWdlQ2xp
ZW50KCkpLnZpZXdXaWRnZXQoKTsKIH0KIAotI2lmIFVTRShESVJFQ1QyRCkKLUlEM0QxMURldmlj
ZTEqIFdlYlBhZ2VQcm94eTo6ZGV2aWNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZXZpY2Uu
Z2V0KCk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5OjpzZXREZXZpY2UoSUQzRDExRGV2aWNlMSog
ZGV2aWNlKQotewotICAgIG1fZGV2aWNlID0gZGV2aWNlOwotfQotI2VuZGlmCi0KIHZvaWQgV2Vi
UGFnZVByb3h5OjpkaXNwYXRjaFBlbmRpbmdDaGFyRXZlbnRzKGNvbnN0IE5hdGl2ZVdlYktleWJv
YXJkRXZlbnQmIGtleWRvd25FdmVudCkKIHsKICAgICBhdXRvJiBwZW5kaW5nQ2hhckV2ZW50cyA9
IGtleWRvd25FdmVudC5wZW5kaW5nQ2hhckV2ZW50cygpOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCShyZXZpc2lv
biAyODc4MTIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJv
eHlXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMyArNDUsNiBAQAogI2luY2x1ZGUgPHd0
Zi9IZXhOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLSNp
ZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8V2ViQ29yZS9EaXJlY3QyRFV0aWxpdGllcy5oPgot
I2luY2x1ZGUgPGQzZDExXzEuaD4KLSNpbmNsdWRlIDxkaXJlY3R4Y29sb3JzLmg+IAotI2luY2x1
ZGUgPGR4Z2kuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCkBAIC0yMTUsMTEgKzIwOCw2IEBAIHZvaWQgV2ViUG9wdXBNZW51UHJveHlX
aW46OnNob3dQb3B1cE1lbnUKIAogICAgICAgICBpZiAoIW1fcG9wdXApCiAgICAgICAgICAgICBy
ZXR1cm47Ci0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIERpcmVjdDJEOjpjcmVhdGVEZXZp
Y2VBbmRDb250ZXh0KG1fZDNkRGV2aWNlLCBtX2ltbWVkaWF0ZUNvbnRleHQpOwotICAgICAgICBz
ZXR1cFN3YXBDaGFpbihtX3dpbmRvd1JlY3Quc2l6ZSgpKTsKLSNlbmRpZgogICAgIH0KIAogICAg
IEJPT0wgc2hvdWxkQW5pbWF0ZSA9IEZBTFNFOwpAQCAtODI4LDcgKzgxNiw2IEBAIHZvaWQgV2Vi
UG9wdXBNZW51UHJveHlXaW46OnBhaW50KGNvbnN0IEkKICAgICBpZiAoIW1fcG9wdXApCiAgICAg
ICAgIHJldHVybjsKIAotI2lmICFVU0UoRElSRUNUMkQpCiAgICAgaWYgKCFtX0RDKSB7CiAgICAg
ICAgIG1fREMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyhIV25kREMobV9w
b3B1cCkpKTsKICAgICAgICAgaWYgKCFtX0RDKQpAQCAtODU0LDIyICs4NDEsNiBAQCB2b2lkIFdl
YlBvcHVwTWVudVByb3h5V2luOjpwYWludChjb25zdCBJCiAgICAgfQogCiAgICAgR3JhcGhpY3ND
b250ZXh0V2luIGNvbnRleHQobV9EQy5nZXQoKSk7Ci0jZWxzZQotICAgIENPTVB0cjxJRDNEMTFU
ZXh0dXJlMkQ+IGJhY2tCdWZmZXI7IAotICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0
QnVmZmVyKDAsIF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCoqPigmYmFja0J1ZmZlcikpOyAKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIENPTVB0cjxJRFhHSVN1cmZhY2UxPiBzdXJmYWNlKFF1ZXJ5LCBiYWNrQnVm
ZmVyKTsKLSAgICBpZiAoIXN1cmZhY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVu
ZGVyVGFyZ2V0ID0gV2ViQ29yZTo6RGlyZWN0MkQ6OmNyZWF0ZVN1cmZhY2VSZW5kZXJUYXJnZXQo
c3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCBwbGF0Zm9ybUNv
bnRleHQocmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0RDNERGV2
aWNlKG1fZDNkRGV2aWNlLmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHRXaW4gY29udGV4dCgm
cGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRU
eXBlOjpHUFVNZW1vcnkpOwotI2VuZGlmCiAKICAgICBJbnRSZWN0IHRyYW5zbGF0ZWREYW1hZ2VS
ZWN0ID0gZGFtYWdlUmVjdDsKICAgICB0cmFuc2xhdGVkRGFtYWdlUmVjdC5tb3ZlKEludFNpemUo
MCwgbV9zY3JvbGxPZmZzZXQgKiBtX2l0ZW1IZWlnaHQpKTsKQEAgLTg4NCwxNSArODU1LDEwIEBA
IHZvaWQgV2ViUG9wdXBNZW51UHJveHlXaW46OnBhaW50KGNvbnN0IEkKICAgICBpZiAobV9zY3Jv
bGxiYXIpCiAgICAgICAgIG1fc2Nyb2xsYmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsK
IAotI2lmICFVU0UoRElSRUNUMkQpCiAgICAgSFduZERDIGhXbmREQzsKICAgICBIREMgbG9jYWxE
QyA9IGhkYyA/IGhkYyA6IGhXbmREQy5zZXRIV25kKG1fcG9wdXApOwogCiAgICAgOjpCaXRCbHQo
bG9jYWxEQywgZGFtYWdlUmVjdC54KCksIGRhbWFnZVJlY3QueSgpLCBkYW1hZ2VSZWN0LndpZHRo
KCksIGRhbWFnZVJlY3QuaGVpZ2h0KCksIG1fREMuZ2V0KCksIGRhbWFnZVJlY3QueCgpLCBkYW1h
Z2VSZWN0LnkoKSwgU1JDQ09QWSk7Ci0jZWxzZQotICAgIGNvbnRleHQuZmx1c2goKTsKLSAgICBt
X3N3YXBDaGFpbi0+UHJlc2VudCgwLCAwKTsgCi0jZW5kaWYKIH0KIAogYm9vbCBXZWJQb3B1cE1l
bnVQcm94eVdpbjo6c2V0Rm9jdXNlZEluZGV4KGludCBpLCBib29sIGhvdFRyYWNraW5nKQpAQCAt
OTk1LDQ4ICs5NjEsNiBAQCBib29sIFdlYlBvcHVwTWVudVByb3h5V2luOjpzY3JvbGxUb1JldmVh
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotdm9pZCBXZWJQb3B1
cE1lbnVQcm94eVdpbjo6c2V0dXBTd2FwQ2hhaW4oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6
ZSkKLXsKLSAgICBtX3N3YXBDaGFpbiA9IERpcmVjdDJEOjpzd2FwQ2hhaW5PZlNpemVGb3JXaW5k
b3dBbmREZXZpY2Uoc2l6ZSwgbV9wb3B1cCwgbV9kM2REZXZpY2UpOwotICAgIFJFTEVBU0VfQVNT
RVJUKG1fc3dhcENoYWluKTsKLSAgICBhdXRvIGZhY3RvcnkgPSBEaXJlY3QyRDo6ZmFjdG9yeUZv
ckRYR0lEZXZpY2UoRGlyZWN0MkQ6OnRvRFhHSURldmljZShtX2QzZERldmljZSkpOwotCi0gICAg
ZmFjdG9yeS0+TWFrZVdpbmRvd0Fzc29jaWF0aW9uKG1fcG9wdXAsIDApOwotICAgIGNvbmZpZ3Vy
ZUJhY2tpbmdTdG9yZShzaXplKTsKLX0KLQotdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6Y29u
ZmlndXJlQmFja2luZ1N0b3JlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi17Ci0gICAg
QVNTRVJUKG1fc3dhcENoYWluKTsKLSAgICBBU1NFUlQobV9kM2REZXZpY2UpOwotICAgIEFTU0VS
VChtX2ltbWVkaWF0ZUNvbnRleHQpOwotCi0gICAgLy8gQ3JlYXRlIGEgcmVuZGVyIHRhcmdldCB2
aWV3IAotICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IGJhY2tCdWZmZXI7IAotICAgIEhSRVNV
TFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVpZG9mKElEM0QxMVRleHR1cmUy
RCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja0J1ZmZlcikpOyAKLSAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0gbV9kM2REZXZpY2UtPkNyZWF0ZVJl
bmRlclRhcmdldFZpZXcoYmFja0J1ZmZlci5nZXQoKSwgbnVsbHB0ciwgJm1fcmVuZGVyVGFyZ2V0
Vmlldyk7IAotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgYXV0byog
cmVuZGVyVGFyZ2V0VmlldyA9IG1fcmVuZGVyVGFyZ2V0Vmlldy5nZXQoKTsKLSAgICBtX2ltbWVk
aWF0ZUNvbnRleHQtPk9NU2V0UmVuZGVyVGFyZ2V0cygxLCAmcmVuZGVyVGFyZ2V0VmlldywgbnVs
bHB0cik7Ci0KLSAgICAvLyBTZXR1cCB0aGUgdmlld3BvcnQgCi0gICAgRDNEMTFfVklFV1BPUlQg
dmlld3BvcnQ7Ci0gICAgdmlld3BvcnQuV2lkdGggPSAoRkxPQVQpc2l6ZS53aWR0aCgpOwotICAg
IHZpZXdwb3J0LkhlaWdodCA9IChGTE9BVClzaXplLmhlaWdodCgpOwotICAgIHZpZXdwb3J0Lk1p
bkRlcHRoID0gMC4wZjsKLSAgICB2aWV3cG9ydC5NYXhEZXB0aCA9IDEuMGY7Ci0gICAgdmlld3Bv
cnQuVG9wTGVmdFggPSAwOwotICAgIHZpZXdwb3J0LlRvcExlZnRZID0gMDsKLSAgICBtX2ltbWVk
aWF0ZUNvbnRleHQtPlJTU2V0Vmlld3BvcnRzKDEsICZ2aWV3cG9ydCk7Ci0KLSAgICBtX2ltbWVk
aWF0ZUNvbnRleHQtPkNsZWFyUmVuZGVyVGFyZ2V0VmlldyhtX3JlbmRlclRhcmdldFZpZXcuZ2V0
KCksIERpcmVjdFg6OkNvbG9yczo6QmxhbmNoZWRBbG1vbmQpOyAKLX0KLSNlbmRpZgotCiBTdHJp
bmcgV2ViUG9wdXBNZW51UHJveHlXaW46OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAogewogICAg
IHJldHVybiBtYWtlU3RyaW5nKCJXZWJQb3B1cE1lbnVQcm94eVdpbiAweCIsIGhleChyZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4odGhpcyksIExvd2VyY2FzZSkpOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmgJKHJldmlz
aW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQ
cm94eVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMyArMzMsNiBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvU2Nyb2xsYWJsZUFyZWEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhci5oPgog
Ci0jaWYgVVNFKERJUkVDVDJEKQotaW50ZXJmYWNlIElEM0QxMURldmljZTE7Ci1pbnRlcmZhY2Ug
SUQzRDExRGV2aWNlQ29udGV4dDE7Ci1pbnRlcmZhY2UgSUQzRDExUmVuZGVyVGFyZ2V0VmlldzsK
LWludGVyZmFjZSBJRFhHSVN3YXBDaGFpbjsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogY2xhc3MgV2ViVmlldzsKQEAgLTEzMSwyMyArMTI0LDEyIEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBpbmNyZW1lbnRXaGVlbERlbHRhKGludCBkZWx0YSk7CiAgICAgdm9pZCByZWR1Y2VXaGVlbERl
bHRhKGludCBkZWx0YSk7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgdm9pZCBzZXR1cFN3YXBD
aGFpbihjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdm9pZCBjb25maWd1cmVCYWNraW5n
U3RvcmUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotI2VuZGlmCi0KICAgICBXZWJWaWV3KiBt
X3dlYlZpZXc7CiAgICAgVmVjdG9yPFdlYlBvcHVwSXRlbT4gbV9pdGVtczsKICAgICBQbGF0Zm9y
bVBvcHVwTWVudURhdGEgbV9kYXRhOwogICAgIGludCBtX25ld1NlbGVjdGVkSW5kZXggeyAwIH07
CiAKICAgICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX3Njcm9sbGJhcjsKLSNpZiBVU0Uo
RElSRUNUMkQpCi0gICAgQ09NUHRyPElEM0QxMURldmljZTE+IG1fZDNkRGV2aWNlOwotICAgIENP
TVB0cjxJRDNEMTFEZXZpY2VDb250ZXh0MT4gbV9pbW1lZGlhdGVDb250ZXh0OwotICAgIENPTVB0
cjxJRDNEMTFSZW5kZXJUYXJnZXRWaWV3PiBtX3JlbmRlclRhcmdldFZpZXc7IAotICAgIENPTVB0
cjxJRFhHSVN3YXBDaGFpbj4gbV9zd2FwQ2hhaW47Ci0jZW5kaWYKICAgICBHRElPYmplY3Q8SERD
PiBtX0RDOwogICAgIEdESU9iamVjdDxIQklUTUFQPiBtX2JtcDsKICAgICBIV05EIG1fcG9wdXAg
eyBudWxscHRyIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3Bw
CShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmll
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDE0ICs2OCw2IEBACiAjaW5jbHVkZSA8Y2Fpcm8u
aD4KICNlbmRpZiAKIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxXZWJDb3JlL0RpcmVj
dDJEVXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2luY2x1ZGUgPGRpcmVjdHhj
b2xvcnMuaD4gCi0jaW5jbHVkZSA8ZHhnaS5oPgotI2VuZGlmCi0KLQogbmFtZXNwYWNlIFdlYktp
dCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMjQzLDExICsyMzUsNiBAQCBXZWJW
aWV3OjpXZWJWaWV3KFJFQ1QgcmVjdCwgY29uc3QgQVBJOjpQCiAgICAgbV9wYWdlLT5pbml0aWFs
aXplV2ViUGFnZSgpOwogCiAgICAgSW50U2l6ZSB3aW5kb3dTaXplKHJlY3QucmlnaHQgLSByZWN0
LmxlZnQsIHJlY3QuYm90dG9tIC0gcmVjdC50b3ApOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBE
aXJlY3QyRDo6Y3JlYXRlRGV2aWNlQW5kQ29udGV4dChtX2QzZERldmljZSwgbV9pbW1lZGlhdGVD
b250ZXh0KTsKLSAgICBtX3BhZ2UtPnNldERldmljZShtX2QzZERldmljZS5nZXQoKSk7Ci0gICAg
c2V0dXBTd2FwQ2hhaW4od2luZG93U2l6ZSk7Ci0jZW5kaWYKIAogICAgIGlmIChtX3BhZ2UtPmRy
YXdpbmdBcmVhKCkpCiAgICAgICAgIG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2V0U2l6ZSh3aW5k
b3dTaXplKTsKQEAgLTU3MywyMSArNTYwLDYgQEAgTFJFU1VMVCBXZWJWaWV3OjpvblNpemVFdmVu
dChIV05EIGh3bmQsIAogICAgICAgICBtX25leHRSZXNpemVTY3JvbGxPZmZzZXQgPSBJbnRTaXpl
KCk7CiAgICAgfQogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIGlmIChtX3N3YXBDaGFpbikgewot
ICAgICAgICBtX2ltbWVkaWF0ZUNvbnRleHQtPk9NU2V0UmVuZGVyVGFyZ2V0cygwLCBudWxscHRy
LCBudWxscHRyKTsKLQotICAgICAgICBtX3JlbmRlclRhcmdldFZpZXcgPSBudWxscHRyOwotCi0g
ICAgICAgIC8vIFByZXNlcnZlIHRoZSBleGlzdGluZyBidWZmZXIgY291bnQgKHBhc3MgemVybyBm
b3IgY291bnQpIGFuZCBmb3JtYXQgKGJ5IHBhc3NpbmcgRFhHSV9GT1JNQVRfVU5LTk9XTikuCi0g
ICAgICAgIC8vIEF1dG9tYXRpY2FsbHkgY2hvb3NlIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHRvIG1h
dGNoIHRoZSBjbGllbnQgcmVjdCBmb3IgdGhlIGJhY2tpbmcgd2luZG93IChwYXNzIHplcm9zIGZv
ciB3aWR0aC9oZWlnaHQpLgotICAgICAgICBIUkVTVUxUIGhyID0gbV9zd2FwQ2hhaW4tPlJlc2l6
ZUJ1ZmZlcnMoMCwgMCwgMCwgRFhHSV9GT1JNQVRfVU5LTk9XTiwgRFhHSV9TV0FQX0NIQUlOX0ZM
QUdfR0RJX0NPTVBBVElCTEUpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKLQotICAgICAgICBjb25maWd1cmVCYWNraW5nU3RvcmUod2luZG93U2l6ZSk7Ci0gICAgfQot
I2VuZGlmCi0KICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTk3NCw1
MCArOTQ2LDQgQEAgdm9pZCBXZWJWaWV3OjpzZXRUb29sVGlwKGNvbnN0IFN0cmluZyYgdAogICAg
IDo6U2VuZE1lc3NhZ2UobV90b29sVGlwV2luZG93LCBUVE1fQUNUSVZBVEUsICF0b29sVGlwLmlz
RW1wdHkoKSwgMCk7CiB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi12b2lkIFdlYlZpZXc6OnNldHVw
U3dhcENoYWluKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi17Ci0gICAgaWYgKCFtX2Qz
ZERldmljZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zd2FwQ2hhaW4gPSBEaXJlY3QyRDo6
c3dhcENoYWluT2ZTaXplRm9yV2luZG93QW5kRGV2aWNlKHNpemUsIG1fd2luZG93LCBtX2QzZERl
dmljZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9zd2FwQ2hhaW4pOwotCi0gICAgYXV0byBmYWN0
b3J5ID0gRGlyZWN0MkQ6OmZhY3RvcnlGb3JEWEdJRGV2aWNlKERpcmVjdDJEOjp0b0RYR0lEZXZp
Y2UobV9kM2REZXZpY2UpKTsKLQotICAgIGZhY3RvcnktPk1ha2VXaW5kb3dBc3NvY2lhdGlvbiht
X3dpbmRvdywgMCk7Ci0gICAgY29uZmlndXJlQmFja2luZ1N0b3JlKHNpemUpOwotfQotCi12b2lk
IFdlYlZpZXc6OmNvbmZpZ3VyZUJhY2tpbmdTdG9yZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBz
aXplKQotewotICAgIEFTU0VSVChtX3N3YXBDaGFpbik7Ci0gICAgQVNTRVJUKG1fZDNkRGV2aWNl
KTsKLSAgICBBU1NFUlQobV9pbW1lZGlhdGVDb250ZXh0KTsKLQotICAgIC8vIENyZWF0ZSBhIHJl
bmRlciB0YXJnZXQgdmlldyAKLSAgICBDT01QdHI8SUQzRDExVGV4dHVyZTJEPiBiYWNrQnVmZmVy
OyAKLSAgICBIUkVTVUxUIGhyID0gbV9zd2FwQ2hhaW4tPkdldEJ1ZmZlcigwLCBfX3V1aWRvZihJ
RDNEMTFUZXh0dXJlMkQpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmJhY2tCdWZmZXIpKTsg
Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBociA9IG1fZDNkRGV2
aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KGJhY2tCdWZmZXIuZ2V0KCksIG51bGxwdHIsICZt
X3JlbmRlclRhcmdldFZpZXcpOyAKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsK
LQotICAgIGF1dG8qIHJlbmRlclRhcmdldFZpZXcgPSBtX3JlbmRlclRhcmdldFZpZXcuZ2V0KCk7
Ci0gICAgbV9pbW1lZGlhdGVDb250ZXh0LT5PTVNldFJlbmRlclRhcmdldHMoMSwgJnJlbmRlclRh
cmdldFZpZXcsIG51bGxwdHIpOwotCi0gICAgLy8gU2V0dXAgdGhlIHZpZXdwb3J0IAotICAgIEQz
RDExX1ZJRVdQT1JUIHZpZXdwb3J0OwotICAgIHZpZXdwb3J0LldpZHRoID0gKEZMT0FUKXNpemUu
d2lkdGgoKTsKLSAgICB2aWV3cG9ydC5IZWlnaHQgPSAoRkxPQVQpc2l6ZS5oZWlnaHQoKTsKLSAg
ICB2aWV3cG9ydC5NaW5EZXB0aCA9IDAuMGY7Ci0gICAgdmlld3BvcnQuTWF4RGVwdGggPSAxLjBm
OwotICAgIHZpZXdwb3J0LlRvcExlZnRYID0gMDsKLSAgICB2aWV3cG9ydC5Ub3BMZWZ0WSA9IDA7
Ci0gICAgbV9pbW1lZGlhdGVDb250ZXh0LT5SU1NldFZpZXdwb3J0cygxLCAmdmlld3BvcnQpOwot
Ci0gICAgbV9pbW1lZGlhdGVDb250ZXh0LT5DbGVhclJlbmRlclRhcmdldFZpZXcobV9yZW5kZXJU
YXJnZXRWaWV3LmdldCgpLCBEaXJlY3RYOjpDb2xvcnM6Ok1pZG5pZ2h0Qmx1ZSk7IAotfQotI2Vu
ZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3Mvd2luL1dlYlZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93
aW4vV2ViVmlldy5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy93aW4vV2ViVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsNiBAQAogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi0jaWYgVVNFKERJ
UkVDVDJEKQotaW50ZXJmYWNlIElEM0QxMURldmljZTE7Ci1pbnRlcmZhY2UgSUQzRDExRGV2aWNl
Q29udGV4dDE7Ci1pbnRlcmZhY2UgSUQzRDExUmVuZGVyVGFyZ2V0VmlldzsKLWludGVyZmFjZSBJ
RFhHSVN3YXBDaGFpbjsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRT
aXplOwogfQpAQCAtODMsMTEgKzc2LDYgQEAgcHVibGljOgogCiAgICAgRHJhd2luZ0FyZWFQcm94
eSogZHJhd2luZ0FyZWEoKSB7IHJldHVybiBwYWdlKCkgPyBwYWdlKCktPmRyYXdpbmdBcmVhKCkg
OiBudWxscHRyOyB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgSUQzRDExRGV2aWNlMSogZDNk
RGV2aWNlKCkgY29uc3QgeyByZXR1cm4gbV9kM2REZXZpY2UuZ2V0KCk7IH0KLSAgICBJRDNEMTFE
ZXZpY2VDb250ZXh0MSogZDNkSW1tZWRpYXRlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faW1t
ZWRpYXRlQ29udGV4dC5nZXQoKTsgfQotI2VuZGlmCi0KIHByaXZhdGU6CiAgICAgV2ViVmlldyhS
RUNULCBjb25zdCBBUEk6OlBhZ2VDb25maWd1cmF0aW9uJiwgSFdORCBwYXJlbnRXaW5kb3cpOwog
CkBAIC0xNDQsMTEgKzEzMiw2IEBAIHByaXZhdGU6CiAgICAgLy8gV2ViQ29yZTo6V2luZG93TWVz
c2FnZUxpc3RlbmVyCiAgICAgdmlydHVhbCB2b2lkIHdpbmRvd1JlY2VpdmVkTWVzc2FnZShIV05E
LCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAg
ICB2b2lkIHNldHVwU3dhcENoYWluKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSAgICB2b2lk
IGNvbmZpZ3VyZUJhY2tpbmdTdG9yZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0jZW5kaWYK
LQogICAgIEhXTkQgbV93aW5kb3cgeyBudWxscHRyIH07CiAgICAgSFdORCBtX3RvcExldmVsUGFy
ZW50V2luZG93IHsgbnVsbHB0ciB9OwogICAgIEhXTkQgbV90b29sVGlwV2luZG93IHsgbnVsbHB0
ciB9OwpAQCAtMTY4LDEyICsxNTEsNiBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYktpdDo6UGFnZUNsaWVudEltcGw+IG1fcGFnZUNsaWVudDsKICAgICBSZWZQdHI8V2ViUGFn
ZVByb3h5PiBtX3BhZ2U7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRDNEMTFEZXZp
Y2UxPiBtX2QzZERldmljZTsKLSAgICBDT01QdHI8SUQzRDExRGV2aWNlQ29udGV4dDE+IG1faW1t
ZWRpYXRlQ29udGV4dDsKLSAgICBDT01QdHI8SUQzRDExUmVuZGVyVGFyZ2V0Vmlldz4gbV9yZW5k
ZXJUYXJnZXRWaWV3OyAKLSAgICBDT01QdHI8SURYR0lTd2FwQ2hhaW4+IG1fc3dhcENoYWluOwot
I2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUuY3Bw
CShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViUG9wdXBNZW51LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDEyICsxMTUsNiBA
QCB2b2lkIFdlYlBvcHVwTWVudTo6c2hvdyhjb25zdCBJbnRSZWN0JiByCiAgICAgc2V0VXBQbGF0
Zm9ybURhdGEocGFnZUNvb3JkaW5hdGVzLCBwbGF0Zm9ybURhdGEpOwogCiAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpTaG93UG9wdXBNZW51KHBhZ2VDb29yZGluYXRlcywgc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KG1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgpLnRleHREaXJlY3Rpb24oKSksIGl0
ZW1zLCBzZWxlY3RlZEluZGV4LCBwbGF0Zm9ybURhdGEpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7
Ci0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgLy8gRG9uJ3QgZGVzdHJveSB0aGUgc2hhcmVkIGhh
bmRsZSBpbiB0aGUgV2ViQ29udGVudCBwcm9jZXNzLiBJdCB3aWxsIGJlIGRlc3Ryb3llZCBpbiB0
aGUgVUlQcm9jZXNzLgotICAgIHBsYXRmb3JtRGF0YS5tX25vdFNlbGVjdGVkQmFja2luZ1N0b3Jl
LT5sZWFrU2hhcmVkUmVzb3VyY2UoKTsKLSAgICBwbGF0Zm9ybURhdGEubV9zZWxlY3RlZEJhY2tp
bmdTdG9yZS0+bGVha1NoYXJlZFJlc291cmNlKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBXZWJQb3B1
cE1lbnU6OmhpZGUoKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmlu
ZENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNTEsMTAgKzM1MSw2IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmdldEltYWdlRm9yRmlu
ZE1hdGMKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkRpZEdldEltYWdlRm9yRmluZE1hdGNoKGhhbmRsZSwgbWF0Y2hJbmRleCkp
OwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAvLyBEb24ndCBkZXN0cm95IHRoZSBzaGFyZWQgaGFu
ZGxlIGluIHRoZSBXZWJDb250ZW50IHByb2Nlc3MuIEl0IHdpbGwgYmUgZGVzdHJveWVkIGluIHRo
ZSBVSVByb2Nlc3MuCi0gICAgc2VsZWN0aW9uU25hcHNob3QtPmxlYWtTaGFyZWRSZXNvdXJjZSgp
OwotI2VuZGlmCiB9CiAKIHZvaWQgRmluZENvbnRyb2xsZXI6OnNlbGVjdEZpbmRNYXRjaCh1aW50
MzJfdCBtYXRjaEluZGV4KQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAkocmV2aXNpb24gMjg3
ODEyKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MywxNCArNDMsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9TZXR0aW5ncy5oPgogCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3Jt
Q29udGV4dERpcmVjdDJELmg+Ci0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQzZDExXzEu
aD4KLSNlbmRpZgotCi0KICNpZiBVU0UoR0xJQl9FVkVOVF9MT09QKQogI2luY2x1ZGUgPHd0Zi9n
bGliL1J1bkxvb3BTb3VyY2VQcmlvcml0eS5oPgogI2VuZGlmCkBAIC04NjIsMTAgKzg1NCw2IEBA
IHZvaWQgRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzOjpkaXMKICAgICAgICAgdXBkYXRl
SW5mby51cGRhdGVSZWN0cy5hcHBlbmQocmVjdCk7CiAgICAgfQogCi0jaWYgVVNFKERJUkVDVDJE
KQotICAgIGJpdG1hcC0+bGVha1NoYXJlZFJlc291cmNlKCk7IC8vIEl0IHdpbGwgYmUgZGVzdHJv
eWVkIGluIHRoZSBVSVByb2Nlc3MuCi0jZW5kaWYKLQogICAgIG1fd2ViUGFnZS5kaWRVcGRhdGVS
ZW5kZXJpbmcoKTsKIAogICAgIC8vIExheW91dCBjYW4gdHJpZ2dlciBtb3JlIGNhbGxzIHRvIHNl
dE5lZWRzRGlzcGxheSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBwcm9jZXNzIHRoZW0KSW5kZXg6IFNv
dXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRM
ZWdhY3kvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAxLTA3ICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBm
b3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCByZXZlcnRpbmcgcjI4NzY5OC4KSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvUGxhdGZvcm1G
VFcuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9QbGF0Zm9ybUZUVy5j
bWFrZQkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdExlZ2FjeS9QbGF0Zm9ybUZU
Vy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDQzOCArMCwwIEBACi1hZGRfZGVmaW5pdGlvbnMo
LURVU0VfRElSRUNUMkQ9MSAtRFVTRV9DVVJMPTEgLURXRUJLSVRfRVhQT1JUUz0xKQotbGlzdChB
UFBFTkQgV2ViS2l0TGVnYWN5X1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICIke1dF
QktJVF9MSUJSQVJJRVNfRElSfS9pbmNsdWRlIgotKQotbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5
X1NPVVJDRVNfQ2xhc3NlcwotICAgIHdpbi9XZWJEb3dubG9hZENVUkwuY3BwCi0gICAgd2luL1dl
YlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2VuZGVyQ1VSTC5jcHAKLSkKLWxpc3QoQVBQRU5E
IFdlYktpdExlZ2FjeV9QUklWQVRFX0xJQlJBUklFUwotICAgIE9wZW5TU0w6OlNTTAotICAgIEQz
RDExLmxpYgotICAgIER4Z2kubGliCi0gICAgbWZ1dWlkLmxpYgotICAgIHN0cm1paWRzLmxpYgot
KQotCi1hZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgT1VUUFVUICR7V2ViS2l0TGVnYWN5X0RFUklW
RURfU09VUkNFU19ESVJ9L1dlYktpdFZlcnNpb24uaAotICAgIE1BSU5fREVQRU5ERU5DWSAke1dF
QktJVExFR0FDWV9ESVJ9L3NjcmlwdHMvZ2VuZXJhdGUtd2Via2l0dmVyc2lvbi5wbAotICAgIERF
UEVORFMgJHtXRUJLSVRMRUdBQ1lfRElSfS9tYWMvQ29uZmlndXJhdGlvbnMvVmVyc2lvbi54Y2Nv
bmZpZwotICAgIENPTU1BTkQgJHtQRVJMX0VYRUNVVEFCTEV9ICR7V0VCS0lUTEVHQUNZX0RJUn0v
c2NyaXB0cy9nZW5lcmF0ZS13ZWJraXR2ZXJzaW9uLnBsIC0tY29uZmlnICR7V0VCS0lUTEVHQUNZ
X0RJUn0vbWFjL0NvbmZpZ3VyYXRpb25zL1ZlcnNpb24ueGNjb25maWcgLS1vdXRwdXREaXIgJHtX
ZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0KLSAgICBWRVJCQVRJTSkKLWxpc3QoQVBQ
RU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VTICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19E
SVJ9L1dlYktpdFZlcnNpb24uaCkKLQotbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X1BSSVZBVEVf
SU5DTFVERV9ESVJFQ1RPUklFUwotICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9Ly4uL2luY2x1ZGUv
cHJpdmF0ZSIKLSAgICAiJHtDTUFLRV9CSU5BUllfRElSfS8uLi9pbmNsdWRlL3ByaXZhdGUvSmF2
YVNjcmlwdENvcmUiCi0gICAgIiR7Q01BS0VfQklOQVJZX0RJUn0vLi4vaW5jbHVkZS9wcml2YXRl
L1dlYkNvcmUiCi0gICAgIiR7V0VCS0lUTEVHQUNZX0RJUn0vd2luIgotICAgICIke1dFQktJVExF
R0FDWV9ESVJ9L3dpbi9XZWJDb3JlU3VwcG9ydCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vaW5jbHVkZSIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VS
Q0VTX0RJUn0vSW50ZXJmYWNlcyIKLSkKLQotbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X0lOQ0xV
REVTCi0gICAgd2luL0NGRGljdGlvbmFyeVByb3BlcnR5QmFnLmgKLSAgICB3aW4vQ09NRW51bVZh
cmlhbnQuaAotICAgIHdpbi9DT01Qcm9wZXJ0eUJhZy5oCi0gICAgd2luL0NPTVZhcmlhbnRTZXR0
ZXIuaAotICAgIHdpbi9Db2RlQW5hbHlzaXNDb25maWcuaAotICAgIHdpbi9ET01DU1NDbGFzc2Vz
LmgKLSAgICB3aW4vRE9NQ29yZUNsYXNzZXMuaAotICAgIHdpbi9ET01FdmVudHNDbGFzc2VzLmgK
LSAgICB3aW4vRE9NSFRNTENsYXNzZXMuaAotICAgIHdpbi9EZWZhdWx0RG93bmxvYWREZWxlZ2F0
ZS5oCi0gICAgd2luL0RlZmF1bHRQb2xpY3lEZWxlZ2F0ZS5oCi0gICAgd2luL0ZvckVhY2hDb0Ns
YXNzLmgKLSAgICB3aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5oCi0gICAgd2luL01hcnNo
YWxsaW5nSGVscGVycy5oCi0gICAgd2luL01lbW9yeVN0cmVhbS5oCi0gICAgd2luL1Byb2dJRE1h
Y3Jvcy5oCi0gICAgd2luL1dlYkFjdGlvblByb3BlcnR5QmFnLmgKLSAgICB3aW4vV2ViQXBwbGlj
YXRpb25DYWNoZS5oCi0gICAgd2luL1dlYkFyY2hpdmUuaAotICAgIHdpbi9XZWJCYWNrRm9yd2Fy
ZExpc3QuaAotICAgIHdpbi9XZWJDYWNoZS5oCi0gICAgd2luL1dlYkNhY2hlZEZyYW1lUGxhdGZv
cm1EYXRhLmgKLSAgICB3aW4vV2ViQ29yZVN0YXRpc3RpY3MuaAotICAgIHdpbi9XZWJEYXRhU291
cmNlLmgKLSAgICB3aW4vV2ViRGF0YWJhc2VNYW5hZ2VyLmgKLSAgICB3aW4vV2ViRG9jdW1lbnRM
b2FkZXIuaAotICAgIHdpbi9XZWJEb3dubG9hZC5oCi0gICAgd2luL1dlYkRyb3BTb3VyY2UuaAot
ICAgIHdpbi9XZWJFbGVtZW50UHJvcGVydHlCYWcuaAotICAgIHdpbi9XZWJFcnJvci5oCi0gICAg
d2luL1dlYkZyYW1lLmgKLSAgICB3aW4vV2ViRnJhbWVQb2xpY3lMaXN0ZW5lci5oCi0gICAgd2lu
L1dlYkdlb2xvY2F0aW9uUG9saWN5TGlzdGVuZXIuaAotICAgIHdpbi9XZWJHZW9sb2NhdGlvblBv
c2l0aW9uLmgKLSAgICB3aW4vV2ViSFRNTFJlcHJlc2VudGF0aW9uLmgKLSAgICB3aW4vV2ViSGlz
dG9yeS5oCi0gICAgd2luL1dlYkhpc3RvcnlJdGVtLmgKLSAgICB3aW4vV2ViSmF2YVNjcmlwdENv
bGxlY3Rvci5oCi0gICAgd2luL1dlYktpdENPTUFQSS5oCi0gICAgd2luL1dlYktpdENsYXNzRmFj
dG9yeS5oCi0gICAgd2luL1dlYktpdERMTC5oCi0gICAgd2luL1dlYktpdEdyYXBoaWNzLmgKLSAg
ICB3aW4vV2ViS2l0TG9nZ2luZy5oCi0gICAgd2luL1dlYktpdFN0YXRpc3RpY3MuaAotICAgIHdp
bi9XZWJLaXRTdGF0aXN0aWNzUHJpdmF0ZS5oCi0gICAgd2luL1dlYktpdFN5c3RlbUJpdHMuaAot
ICAgIHdpbi9XZWJMb2NhbGl6YWJsZVN0cmluZ3MuaAotICAgIHdpbi9XZWJNdXRhYmxlVVJMUmVx
dWVzdC5oCi0gICAgd2luL1dlYk5hdmlnYXRpb25EYXRhLmgKLSAgICB3aW4vV2ViTm90aWZpY2F0
aW9uLmgKLSAgICB3aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVyLmgKLSAgICB3aW4vV2ViUHJlZmVy
ZW5jZUtleXNQcml2YXRlLmgKLSAgICB3aW4vV2ViUHJlZmVyZW5jZXMuaAotICAgIHdpbi9XZWJS
ZXNvdXJjZS5oCi0gICAgd2luL1dlYlNjcmlwdE9iamVjdC5oCi0gICAgd2luL1dlYlNjcmlwdFdv
cmxkLmgKLSAgICB3aW4vV2ViU2VjdXJpdHlPcmlnaW4uaAotICAgIHdpbi9XZWJTZXJpYWxpemVk
SlNWYWx1ZS5oCi0gICAgd2luL1dlYlRleHRSZW5kZXJlci5oCi0gICAgd2luL1dlYlVSTEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlLmgKLSAgICB3aW4vV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VTZW5kZXIuaAotICAgIHdpbi9XZWJVUkxDcmVkZW50aWFsLmgKLSAgICB3aW4vV2ViVVJMUHJv
dGVjdGlvblNwYWNlLmgKLSAgICB3aW4vV2ViVVJMUmVzcG9uc2UuaAotICAgIHdpbi9XZWJVc2Vy
Q29udGVudFVSTFBhdHRlcm4uaAotICAgIHdpbi9XZWJWaWV3LmgKLSAgICB3aW4vV2ViV29ya2Vy
c1ByaXZhdGUuaAotKQotCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfU09VUkNFU19DbGFzc2Vz
Ci0gICAgd2luL0FjY2Vzc2libGVCYXNlLmNwcAotICAgIHdpbi9BY2Nlc3NpYmxlRG9jdW1lbnQu
Y3BwCi0gICAgd2luL0FjY2Vzc2libGVJbWFnZS5jcHAKLSAgICB3aW4vQWNjZXNzaWJsZVRleHRJ
bXBsLmNwcAotICAgIHdpbi9CYWNrRm9yd2FyZExpc3QuY3BwCi0gICAgd2luL0NGRGljdGlvbmFy
eVByb3BlcnR5QmFnLmNwcAotICAgIHdpbi9ET01DU1NDbGFzc2VzLmNwcAotICAgIHdpbi9ET01D
b3JlQ2xhc3Nlcy5jcHAKLSAgICB3aW4vRE9NRXZlbnRzQ2xhc3Nlcy5jcHAKLSAgICB3aW4vRE9N
SFRNTENsYXNzZXMuY3BwCi0gICAgd2luL0RlZmF1bHREb3dubG9hZERlbGVnYXRlLmNwcAotICAg
IHdpbi9EZWZhdWx0UG9saWN5RGVsZWdhdGUuY3BwCi0gICAgd2luL0ZvckVhY2hDb0NsYXNzLmNw
cAotICAgIHdpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcAotICAgIHdpbi9NYXJzaGFs
bGluZ0hlbHBlcnMuY3BwCi0gICAgd2luL01lbW9yeVN0cmVhbS5jcHAKLSAgICB3aW4vV2ViQWN0
aW9uUHJvcGVydHlCYWcuY3BwCi0gICAgd2luL1dlYkFwcGxpY2F0aW9uQ2FjaGUuY3BwCi0gICAg
d2luL1dlYkFyY2hpdmUuY3BwCi0gICAgd2luL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKLSAgICB3
aW4vV2ViQ2FjaGUuY3BwCi0gICAgd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAotICAgIHdpbi9X
ZWJEYXRhU291cmNlLmNwcAotICAgIHdpbi9XZWJEYXRhYmFzZU1hbmFnZXIuY3BwCi0gICAgd2lu
L1dlYkRvY3VtZW50TG9hZGVyLmNwcAotICAgIHdpbi9XZWJEb3dubG9hZC5jcHAKLSAgICB3aW4v
V2ViRHJvcFNvdXJjZS5jcHAKLSAgICB3aW4vV2ViRWxlbWVudFByb3BlcnR5QmFnLmNwcAotICAg
IHdpbi9XZWJFcnJvci5jcHAKLSAgICB3aW4vV2ViRnJhbWUuY3BwCi0gICAgd2luL1dlYkZyYW1l
UG9saWN5TGlzdGVuZXIuY3BwCi0gICAgd2luL1dlYkdlb2xvY2F0aW9uUG9saWN5TGlzdGVuZXIu
Y3BwCi0gICAgd2luL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uY3BwCi0gICAgd2luL1dlYkhUTUxS
ZXByZXNlbnRhdGlvbi5jcHAKLSAgICB3aW4vV2ViSGlzdG9yeS5jcHAKLSAgICB3aW4vV2ViSGlz
dG9yeUl0ZW0uY3BwCi0gICAgd2luL1dlYkluc3BlY3Rvci5jcHAKLSAgICB3aW4vV2ViSmF2YVNj
cmlwdENvbGxlY3Rvci5jcHAKLSAgICB3aW4vV2ViS2l0Q09NQVBJLmNwcAotICAgIHdpbi9XZWJL
aXRDbGFzc0ZhY3RvcnkuY3BwCi0gICAgd2luL1dlYktpdERMTC5jcHAKLSAgICB3aW4vV2ViS2l0
TG9nZ2luZy5jcHAKLSAgICB3aW4vV2ViS2l0TWVzc2FnZUxvb3AuY3BwCi0gICAgd2luL1dlYktp
dFN0YXRpc3RpY3MuY3BwCi0gICAgd2luL1dlYktpdFN5c3RlbUJpdHMuY3BwCi0gICAgd2luL1dl
YkxvY2FsaXphYmxlU3RyaW5ncy5jcHAKLSAgICB3aW4vV2ViTXV0YWJsZVVSTFJlcXVlc3QuY3Bw
Ci0gICAgd2luL1dlYk5hdmlnYXRpb25EYXRhLmNwcAotICAgIHdpbi9XZWJOb2RlSGlnaGxpZ2h0
LmNwcAotICAgIHdpbi9XZWJOb3RpZmljYXRpb24uY3BwCi0gICAgd2luL1dlYk5vdGlmaWNhdGlv
bkNlbnRlci5jcHAKLSAgICB3aW4vV2ViUHJlZmVyZW5jZXMuY3BwCi0gICAgd2luL1dlYlJlc291
cmNlLmNwcAotICAgIHdpbi9XZWJTY3JpcHRPYmplY3QuY3BwCi0gICAgd2luL1dlYlNjcmlwdFdv
cmxkLmNwcAotICAgIHdpbi9XZWJTZWN1cml0eU9yaWdpbi5jcHAKLSAgICB3aW4vV2ViU2VyaWFs
aXplZEpTVmFsdWUuY3BwCi0gICAgd2luL1dlYlRleHRSZW5kZXJlci5jcHAKLSAgICB3aW4vV2Vi
VVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuY3BwCi0gICAgd2luL1dlYlVSTEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlU2VuZGVyLmNwcAotICAgIHdpbi9XZWJVUkxDcmVkZW50aWFsLmNwcAotICAg
IHdpbi9XZWJVUkxQcm90ZWN0aW9uU3BhY2UuY3BwCi0gICAgd2luL1dlYlVSTFJlc3BvbnNlLmNw
cAotICAgIHdpbi9XZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwCi0gICAgd2luL1dlYlZpZXcu
Y3BwCi0gICAgd2luL1dlYldvcmtlcnNQcml2YXRlLmNwcAotCi0gICAgd2luL3N0b3JhZ2UvV2Vi
RGF0YWJhc2VQcm92aWRlci5jcHAKLSkKLQotbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X1NPVVJD
RVNfV2ViQ29yZVN1cHBvcnQKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0NvbnRleHQuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKLSAgICB3aW4v
V2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQuY3BwCi0gICAgd2luL1dlYkNvcmVT
dXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50LmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
RGVza3RvcE5vdGlmaWNhdGlvbnNEZWxlZ2F0ZS5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQv
V2ViRGVza3RvcE5vdGlmaWNhdGlvbnNEZWxlZ2F0ZS5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkRyYWdDbGllbnQuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQu
aAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCi0gICAgd2luL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50LmNwcAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRl
eHQuaAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5jcHAKLSAg
ICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQuaAotICAgIHdpbi9XZWJD
b3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckNsaWVudC5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3Rv
ckRlbGVnYXRlLmNwcAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JEZWxlZ2F0
ZS5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKLSAg
ICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKLSAgICB3aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmNwcAotICAgIHdpbi9XZWJDb3JlU3Vw
cG9ydC9XZWJQbHVnaW5JbmZvUHJvdmlkZXIuaAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJW
aXNpdGVkTGlua1N0b3JlLmNwcAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlu
a1N0b3JlLmgKLSkKLQotaWYgKFVTRV9DRikKLSAgICBsaXN0KEFQUEVORCBXZWJLaXRMZWdhY3lf
U09VUkNFU19DbGFzc2VzCi0gICAgICAgIGNmL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNs
aWVudENGLmNwcAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9MSUJSQVJJ
RVMKLSAgICAgICAgJHtDT1JFRk9VTkRBVElPTl9MSUJSQVJZfQotICAgICkKLWVuZGlmICgpCi0K
LWlmIChDT01QSUxFUl9JU19HQ0NfT1JfQ0xBTkcpCi0gICAgV0VCS0lUX0FERF9UQVJHRVRfQ1hY
X0ZMQUdTKFdlYktpdExlZ2FjeSAtV25vLW92ZXJsb2FkZWQtdmlydHVhbCkKLWVuZGlmICgpCi0K
LWxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VTICR7V2ViS2l0TGVnYWN5X0lOQ0xVREVT
fSAke1dlYktpdExlZ2FjeV9TT1VSQ0VTX0NsYXNzZXN9ICR7V2ViS2l0TGVnYWN5X1NPVVJDRVNf
V2ViQ29yZVN1cHBvcnR9KQotCi1zb3VyY2VfZ3JvdXAoSW5jbHVkZXMgRklMRVMgJHtXZWJLaXRM
ZWdhY3lfSU5DTFVERVN9KQotc291cmNlX2dyb3VwKENsYXNzZXMgRklMRVMgJHtXZWJLaXRMZWdh
Y3lfU09VUkNFU19DbGFzc2VzfSkKLXNvdXJjZV9ncm91cChXZWJDb3JlU3VwcG9ydCBGSUxFUyAk
e1dlYktpdExlZ2FjeV9TT1VSQ0VTX1dlYkNvcmVTdXBwb3J0fSkKLQotIyBCdWlsZCB0aGUgQ09N
IGludGVyZmFjZToKLW1hY3JvKEdFTkVSQVRFX0lOVEVSRkFDRSBfaW5maWxlIF9kZWZpbmVzIF9k
ZXBlbmRzKQotICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX2ZpbGV3ZSAke19pbmZpbGV9IE5B
TUVfV0UpCi0gICAgYWRkX2N1c3RvbV9jb21tYW5kKAotICAgICAgICBPVVRQVVQgICR7V2ViS2l0
TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvJHtfZmlsZXdlfS5oCi0gICAg
ICAgIE1BSU5fREVQRU5ERU5DWSAke19pbmZpbGV9Ci0gICAgICAgIERFUEVORFMgJHtfZGVwZW5k
c30KLSAgICAgICAgQ09NTUFORCBtaWRsLmV4ZSAvSSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9E
SVJ9L3dpbi9JbnRlcmZhY2VzIiAvSSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dpbi9J
bnRlcmZhY2VzL0FjY2Vzc2libGUyIiAvSSAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VT
X0RJUn0vaW5jbHVkZSIgL0kgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS93aW4iIC9XWCAv
Y2hhciBzaWduZWQgL2VudiB3aW4zMiAvdGxiICIke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVD
VE9SWX0vJHtfZmlsZXdlfS50bGIiIC9vdXQgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNF
U19ESVJ9L0ludGVyZmFjZXMiIC9oICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElS
fS9JbnRlcmZhY2VzLyR7X2ZpbGV3ZX0uaCIgL2lpZCAiJHtfZmlsZXdlfV9pLmMiICR7X2RlZmlu
ZXN9ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vJHtfaW5maWxlfSIKLSAgICAgICAgVVNF
U19URVJNSU5BTCBWRVJCQVRJTSkKLSAgICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoJHtX
ZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy8ke19maWxld2V9Lmgg
UFJPUEVSVElFUyBHRU5FUkFURUQgVFJVRSkKLSAgICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRp
ZXMoJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy8ke19maWxl
d2V9X2kuYyBQUk9QRVJUSUVTIEdFTkVSQVRFRCBUUlVFKQotZW5kbWFjcm8oKQotCi1zZXQoTUlE
TF9ERUZJTkVTIC9EXCBcIl9fUFJPRFVDVElPTl9fPTAxXCIpCi0KLXNldChXRUJLSVRMRUdBQ1lf
SURMX0RFUEVOREVOQ0lFUwotICAgIHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGVDb21wYXJhYmxl
LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0RPTUNTUy5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9E
T01Db3JlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0RPTUV2ZW50cy5pZGwKLSAgICB3aW4vSW50
ZXJmYWNlcy9ET01FeHRlbnNpb25zLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0RPTUhUTUwuaWRs
Ci0gICAgd2luL0ludGVyZmFjZXMvRE9NUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9E
T01SYW5nZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9ET01XaW5kb3cuaWRsCi0gICAgd2luL0lu
dGVyZmFjZXMvSUdFTl9ET01PYmplY3QuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkFyY2hp
dmUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkJhY2tGb3J3YXJkTGlzdC5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9JV2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50
ZXJmYWNlcy9JV2ViQ2FjaGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkNvcmVTdGF0aXN0
aWNzLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJEYXRhU291cmNlLmlkbAotICAgIHdpbi9J
bnRlcmZhY2VzL0lXZWJEYXRhYmFzZU1hbmFnZXIuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdl
YkRlc2t0b3BOb3RpZmljYXRpb25zRGVsZWdhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdl
YkRvY3VtZW50LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJEb3dubG9hZC5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9JV2ViRWRpdGluZ0RlbGVnYXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2Vz
L0lXZWJFbWJlZGRlZFZpZXcuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkVycm9yLmlkbAot
ICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJFcnJvclByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFj
ZXMvSVdlYkZvcm1EZWxlZ2F0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRnJhbWUuaWRs
Ci0gICAgd2luL0ludGVyZmFjZXMvSVdlYkZyYW1lTG9hZERlbGVnYXRlLmlkbAotICAgIHdpbi9J
bnRlcmZhY2VzL0lXZWJGcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUuaWRsCi0gICAgd2luL0ludGVy
ZmFjZXMvSVdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZTIuaWRsCi0gICAgd2luL0ludGVyZmFj
ZXMvSVdlYkZyYW1lUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRnJhbWVWaWV3
LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJHZW9sb2NhdGlvblBvbGljeUxpc3RlbmVyLmlk
bAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJHZW9sb2NhdGlvblBvc2l0aW9uLmlkbAotICAgIHdp
bi9JbnRlcmZhY2VzL0lXZWJHZW9sb2NhdGlvblByb3ZpZGVyLmlkbAotICAgIHdpbi9JbnRlcmZh
Y2VzL0lXZWJIVE1MUmVwcmVzZW50YXRpb24uaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkhU
VFBVUkxSZXNwb25zZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViSGlzdG9yeS5pZGwKLSAg
ICB3aW4vSW50ZXJmYWNlcy9JV2ViSGlzdG9yeURlbGVnYXRlLmlkbAotICAgIHdpbi9JbnRlcmZh
Y2VzL0lXZWJIaXN0b3J5SXRlbS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViSGlzdG9yeUl0
ZW1Qcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJIaXN0b3J5UHJpdmF0ZS5pZGwK
LSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViSW5zcGVjdG9yLmlkbAotICAgIHdpbi9JbnRlcmZhY2Vz
L0lXZWJJbnNwZWN0b3JQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJKYXZhU2Ny
aXB0Q29sbGVjdG9yLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJLaXRTdGF0aXN0aWNzLmlk
bAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJNdXRhYmxlVVJMUmVxdWVzdC5pZGwKLSAgICB3aW4v
SW50ZXJmYWNlcy9JV2ViTXV0YWJsZVVSTFJlcXVlc3RQcml2YXRlLmlkbAotICAgIHdpbi9JbnRl
cmZhY2VzL0lXZWJOYXZpZ2F0aW9uRGF0YS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViTm90
aWZpY2F0aW9uLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJOb3RpZmljYXRpb25DZW50ZXIu
aWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYk5vdGlmaWNhdGlvbk9ic2VydmVyLmlkbAotICAg
IHdpbi9JbnRlcmZhY2VzL0lXZWJQb2xpY3lEZWxlZ2F0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNl
cy9JV2ViUG9saWN5RGVsZWdhdGVQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJQ
cmVmZXJlbmNlcy5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRl
LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJSZXNvdXJjZS5pZGwKLSAgICB3aW4vSW50ZXJm
YWNlcy9JV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdl
YlJlc291cmNlTG9hZERlbGVnYXRlUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2Vi
UmVzb3VyY2VMb2FkRGVsZWdhdGVQcml2YXRlMi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2Vi
U2NyaXB0T2JqZWN0LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJTY3JpcHRXb3JsZC5pZGwK
LSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViU2VjdXJpdHlPcmlnaW4uaWRsCi0gICAgd2luL0ludGVy
ZmFjZXMvSVdlYlNlcmlhbGl6ZWRKU1ZhbHVlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJT
ZXJpYWxpemVkSlNWYWx1ZVByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlRleHRS
ZW5kZXJlci5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVUlEZWxlZ2F0ZS5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9JV2ViVUlEZWxlZ2F0ZTIuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdl
YlVJRGVsZWdhdGVQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJVUkxBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVVJMUmVxdWVzdC5p
ZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVVJMUmVzcG9uc2UuaWRsCi0gICAgd2luL0ludGVy
ZmFjZXMvSVdlYlVSTFJlc3BvbnNlUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2Vi
VW5kb01hbmFnZXIuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlVuZG9UYXJnZXQuaWRsCi0g
ICAgd2luL0ludGVyZmFjZXMvSVdlYlVzZXJDb250ZW50VVJMUGF0dGVybi5pZGwKLSAgICB3aW4v
SW50ZXJmYWNlcy9JV2ViVmlldy5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVmlld1ByaXZh
dGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYldvcmtlcnNQcml2YXRlLmlkbAotICAgIHdp
bi9JbnRlcmZhY2VzL0phdmFTY3JpcHRDb3JlQVBJVHlwZXMuaWRsCi0gICAgd2luL0ludGVyZmFj
ZXMvV2ViS2l0LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL1dlYlNjcm9sbGJhclR5cGVzLmlkbAot
Ci0gICAgd2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIvQWNjZXNzaWJsZTIuaWRsCi0gICAgd2lu
L0ludGVyZmFjZXMvQWNjZXNzaWJsZTIvQWNjZXNzaWJsZTJfMi5pZGwKLSAgICB3aW4vSW50ZXJm
YWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlQXBwbGljYXRpb24uaWRsCi0gICAgd2luL0ludGVy
ZmFjZXMvQWNjZXNzaWJsZTIvQWNjZXNzaWJsZUVkaXRhYmxlVGV4dC5pZGwKLSAgICB3aW4vSW50
ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlUmVsYXRpb24uaWRsCi0gICAgd2luL0ludGVy
ZmFjZXMvQWNjZXNzaWJsZTIvQWNjZXNzaWJsZVN0YXRlcy5pZGwKLSAgICB3aW4vSW50ZXJmYWNl
cy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlVGV4dC5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9BY2Nl
c3NpYmxlMi9BY2Nlc3NpYmxlVGV4dDIuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvQWNjZXNzaWJs
ZTIvSUEyQ29tbW9uVHlwZXMuaWRsCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNF
U19ESVJ9L2luY2x1ZGUvYXV0b3ZlcnNpb24uaCIKLSkKLQotYWRkX2N1c3RvbV9jb21tYW5kKAot
ICAgIE9VVFBVVCAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbmNsdWRlL2F1
dG92ZXJzaW9uLmgKLSAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0NNQUtFX1NPVVJDRV9ESVJ9Ci0g
ICAgQ09NTUFORCAke1BFUkxfRVhFQ1VUQUJMRX0gJHtXRUJLSVRfTElCUkFSSUVTX0RJUn0vdG9v
bHMvc2NyaXB0cy9hdXRvLXZlcnNpb24ucGwgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VT
X0RJUn0KLSAgICBWRVJCQVRJTSkKLQotR0VORVJBVEVfSU5URVJGQUNFKHdpbi9JbnRlcmZhY2Vz
L1dlYktpdC5pZGwgJHtNSURMX0RFRklORVN9ICIke1dFQktJVExFR0FDWV9JRExfREVQRU5ERU5D
SUVTfSIpCi1HRU5FUkFURV9JTlRFUkZBQ0Uod2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIvQWNj
ZXNzaWJsZUFwcGxpY2F0aW9uLmlkbCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lE
TF9ERVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nl
c3NpYmxlMi9BY2Nlc3NpYmxlMi5pZGwgJHtNSURMX0RFRklORVN9ICIke1dFQktJVExFR0FDWV9J
RExfREVQRU5ERU5DSUVTfSIpCi1HRU5FUkFURV9JTlRFUkZBQ0Uod2luL0ludGVyZmFjZXMvQWNj
ZXNzaWJsZTIvQWNjZXNzaWJsZTJfMi5pZGwgJHtNSURMX0RFRklORVN9ICIke1dFQktJVExFR0FD
WV9JRExfREVQRU5ERU5DSUVTfSIpCi1HRU5FUkFURV9JTlRFUkZBQ0Uod2luL0ludGVyZmFjZXMv
QWNjZXNzaWJsZTIvQWNjZXNzaWJsZVJlbGF0aW9uLmlkbCAke01JRExfREVGSU5FU30gIiR7V0VC
S0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50
ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlU3RhdGVzLmlkbCAke01JRExfREVGSU5FU30g
IiR7V0VCS0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3
aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9JQTJDb21tb25UeXBlcy5pZGwgJHtNSURMX0RFRklO
RVN9ICIke1dFQktJVExFR0FDWV9JRExfREVQRU5ERU5DSUVTfSIpCi1HRU5FUkFURV9JTlRFUkZB
Q0Uod2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIvQWNjZXNzaWJsZUVkaXRhYmxlVGV4dC5pZGwg
JHtNSURMX0RFRklORVN9ICIke1dFQktJVExFR0FDWV9JRExfREVQRU5ERU5DSUVTfSIpCi1HRU5F
UkFURV9JTlRFUkZBQ0Uod2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIvQWNjZXNzaWJsZVRleHQu
aWRsICR7TUlETF9ERUZJTkVTfSAiJHtXRUJLSVRMRUdBQ1lfSURMX0RFUEVOREVOQ0lFU30iKQot
R0VORVJBVEVfSU5URVJGQUNFKHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0FjY2Vzc2libGVU
ZXh0Mi5pZGwgJHtNSURMX0RFRklORVN9ICIke1dFQktJVExFR0FDWV9JRExfREVQRU5ERU5DSUVT
fSIpCi0KLWFkZF9saWJyYXJ5KFdlYktpdExlZ2FjeUdVSUQgU1RBVElDCi0gICAgIiR7V2ViS2l0
TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvV2ViS2l0LmgiCi0gICAgIiR7
V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZUFw
cGxpY2F0aW9uLmgiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0lu
dGVyZmFjZXMvQWNjZXNzaWJsZTIuaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VS
Q0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMl8yLmgiCi0gICAgIiR7V2ViS2l0TGVnYWN5
X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZVJlbGF0aW9uLmgiCi0g
ICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNz
aWJsZVN0YXRlcy5oIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9J
bnRlcmZhY2VzL0lBMkNvbW1vblR5cGVzLmgiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURf
U09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZUVkaXRhYmxlVGV4dC5oIgotICAgICIk
e1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVU
ZXh0LmgiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFj
ZXMvQWNjZXNzaWJsZVRleHQyLmgiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNF
U19ESVJ9L0ludGVyZmFjZXMvV2ViS2l0X2kuYyIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlQXBwbGljYXRpb25faS5jIgotICAg
ICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2li
bGUyX2kuYyIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJm
YWNlcy9BY2Nlc3NpYmxlMl8yX2kuYyIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VS
Q0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlUmVsYXRpb25faS5jIgotICAgICIke1dlYktp
dExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVFZGl0YWJs
ZVRleHRfaS5jIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRl
cmZhY2VzL0FjY2Vzc2libGVUZXh0X2kuYyIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9T
T1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlVGV4dDJfaS5jIgotKQotc2V0X3Rhcmdl
dF9wcm9wZXJ0aWVzKFdlYktpdExlZ2FjeUdVSUQgUFJPUEVSVElFUyBPVVRQVVRfTkFNRSBXZWJL
aXRHVUlEJHtERUJVR19TVUZGSVh9KQotCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfUFJJVkFU
RV9MSUJSQVJJRVMKLSAgICBDb21jdGwzMgotICAgIENvbXN1cHAKLSAgICBDcnlwdDMyCi0gICAg
RDJkMQotICAgIER3cml0ZQotICAgIER4Z3VpZAotICAgIElwaGxwYXBpCi0gICAgUHNhcGkKLSAg
ICBScGNydDQKLSAgICBTaGx3YXBpCi0gICAgVXNwMTAKLSAgICBWZXJzaW9uCi0gICAgV2ViS2l0
R1VJRCR7REVCVUdfU1VGRklYfQotICAgIFdpbmRvd3NDb2RlY3MKLSAgICBXaW5tbQotKQotCi1z
ZXQoQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHUyAiJHtDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdT
fSAvU1VCU1lTVEVNOldJTkRPV1MiKQotc2V0KENNQUtFX0VYRV9MSU5LRVJfRkxBR1MgIiR7Q01B
S0VfRVhFX0xJTktFUl9GTEFHU30gL1NVQlNZU1RFTTpXSU5ET1dTIikKLQotIyBXZSBuZWVkIHRo
ZSB3ZWJraXQgbGlicmFyaWVzIHRvIGNvbWUgYmVmb3JlIHRoZSBzeXN0ZW0gZGVmYXVsdCBsaWJy
YXJpZXMgdG8gcHJldmVudCBzeW1ib2wgY29uZmxpY3RzIHdpdGggdXVpZC5saWIuCi0jIFRvIGRv
IHRoaXMgd2UgYWRkIHN5c3RlbSBkZWZhdWx0IGxpYnMgYXMgd2Via2l0IGxpYnMgYW5kIHplcm8g
b3V0IHN5c3RlbSBkZWZhdWx0IGxpYnMuCi1zdHJpbmcoUkVQTEFDRSAiICIgIlw7IiBDWFhfTElC
UyAke0NNQUtFX0NYWF9TVEFOREFSRF9MSUJSQVJJRVN9KQotbGlzdChBUFBFTkQgV2ViS2l0TGVn
YWN5X0xJQlJBUklFUyAke0NYWF9MSUJTfSkKLXNldChDTUFLRV9DWFhfU1RBTkRBUkRfTElCUkFS
SUVTICIiKQotCi1zZXQoQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHUyAiJHtDTUFLRV9TSEFSRURf
TElOS0VSX0ZMQUdTfSAke01TVkNfUlVOVElNRV9MSU5LRVJfRkxBR1N9IikKLQotIyBJZiB0aGlz
IGRpcmVjdG9yeSBpc24ndCBjcmVhdGVkIGJlZm9yZSBtaWRsIHJ1bnMgYW5kIGF0dGVtcHRzIHRv
IG91dHB1dCBXZWJLaXQudGxiLAotIyBJdCBmYWlscyB3aXRoIGFuIHVudXN1YWwgZXJyb3IgLSBt
aWRsIGZhaWxlZCAtIGZhaWxlZCB0byBzYXZlIGFsbCBjaGFuZ2VzCi1maWxlKE1BS0VfRElSRUNU
T1JZICR7Q01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfSkKLWZpbGUoTUFLRV9ESVJFQ1RP
UlkgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcykKLQotc2V0
KFdlYktpdExlZ2FjeV9QVUJMSUNfRlJBTUVXT1JLX0hFQURFUlMKLSAgICAke1dlYktpdExlZ2Fj
eV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGUyLmgKLSAgICAke1dl
YktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGUyXzIu
aAotICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNj
ZXNzaWJsZUFwcGxpY2F0aW9uLmgKLSAgICAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNf
RElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVFZGl0YWJsZVRleHQuaAotICAgICR7V2ViS2l0TGVn
YWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZVJlbGF0aW9uLmgK
LSAgICAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vz
c2libGVTdGF0ZXMuaAotICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0lu
dGVyZmFjZXMvQWNjZXNzaWJsZVRleHQuaAotICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09V
UkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZVRleHQyLmgKLSAgICAke1dlYktpdExlZ2Fj
eV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0lBMkNvbW1vblR5cGVzLmgKLSAgICAk
e1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL1dlYktpdC5oCi0K
LSAgICB3aW4vQWNjZXNzaWJsZUJhc2UuaAotICAgIHdpbi9BY2Nlc3NpYmxlRG9jdW1lbnQuaAot
ICAgIHdpbi9DRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZy5oCi0gICAgd2luL1dlYkRhdGFTb3VyY2Uu
aAotICAgIHdpbi9XZWJGcmFtZS5oCi0gICAgd2luL1dlYktpdENPTUFQSS5oCi0pCi0KLVdFQktJ
VF9NQUtFX0ZPUldBUkRJTkdfSEVBREVSUyhXZWJLaXRMZWdhY3lHVUlECi0gICAgVEFSR0VUX05B
TUUgV2ViS2l0TGVnYWN5RnJhbWV3b3JrSGVhZGVycwotICAgIERFU1RJTkFUSU9OICR7V2ViS2l0
TGVnYWN5X0ZSQU1FV09SS19IRUFERVJTX0RJUn0vV2ViS2l0TGVnYWN5Ci0gICAgRklMRVMgJHtX
ZWJLaXRMZWdhY3lfUFVCTElDX0ZSQU1FV09SS19IRUFERVJTfQotICAgIEZMQVRURU5FRAotKQot
Ci1zZXQoV2ViS2l0TGVnYWN5X09VVFBVVF9OQU1FCi0gICAgV2ViS2l0JHtERUJVR19TVUZGSVh9
Ci0pCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc4MTIpCisr
KyBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyMyBAQAorMjAyMi0wMS0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIERpcmVjdDJECisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5OTkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2Vi
Vmlldzo6ZGVsZXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYlZpZXc6OmVuc3VyZUJhY2tp
bmdTdG9yZSk6CisgICAgICAgIChXZWJWaWV3OjpzY3JvbGxCYWNraW5nU3RvcmUpOgorICAgICAg
ICAoV2ViVmlldzo6c2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViVmlldzo6dXBkYXRlQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKFdlYlZpZXc6OnBhaW50KToKKyAgICAgICAgKFdlYlZpZXc6OnBh
aW50SW50b0JhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJWaWV3OjpXZWJWaWV3V25kUHJvYyk6
CisgICAgICAgIChXZWJWaWV3Ojpub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQpOgorICAgICAgICAo
V2ViVmlldzo6cGFpbnRXaXRoRGlyZWN0MkQpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlZpZXcu
aDoKKwogMjAyMi0wMS0wNiAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgogCiAg
ICAgICAgIEhhdmUgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQgYW5kIHJlbGF0ZWQgbmV0d29ya2lu
ZyBhY3RvcnMgdXNlIFNoYXJlZEJ1ZmZlci4KSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZp
ZXcuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJW
aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDEwICsyMDksNiBAQAogI2luY2x1ZGUgIkFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgiCiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1Qy
RCkKLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+Ci0jZW5kaWYK
LQogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICNpbmNsdWRlIDxXZWJDb3JlL0Z1bGxTY3Jl
ZW5Db250cm9sbGVyLmg+CiAjZW5kaWYKQEAgLTg1NSwxMSArODUxLDYgQEAgdm9pZCBXZWJWaWV3
OjpkZWxldGVCYWNraW5nU3RvcmUoKQogICAgICAgICBtX2RlbGV0ZUJhY2tpbmdTdG9yZVRpbWVy
QWN0aXZlID0gZmFsc2U7CiAgICAgfQogICAgIG1fYmFja2luZ1N0b3JlQml0bWFwID0gbnVsbHB0
cjsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgbV9iYWNraW5nU3RvcmVEMkRCaXRtYXAgPSBudWxs
cHRyOwotICAgIG1fYmFja2luZ1N0b3JlR2RpSW50ZXJvcCA9IG51bGxwdHI7Ci0gICAgbV9iYWNr
aW5nU3RvcmVSZW5kZXJUYXJnZXQgPSBudWxscHRyOwotI2VuZGlmCiAgICAgbV9iYWNraW5nU3Rv
cmVEaXJ0eVJlZ2lvbiA9IG51bGxwdHI7CiAgICAgbV9iYWNraW5nU3RvcmVTaXplLmN4ID0gbV9i
YWNraW5nU3RvcmVTaXplLmN5ID0gMDsKIH0KQEAgLTg3MywyMCArODY0LDYgQEAgYm9vbCBXZWJW
aWV3OjplbnN1cmVCYWNraW5nU3RvcmUoKQogICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4g
MCAmJiAod2lkdGggIT0gbV9iYWNraW5nU3RvcmVTaXplLmN4IHx8IGhlaWdodCAhPSBtX2JhY2tp
bmdTdG9yZVNpemUuY3kpKSB7CiAgICAgICAgIGRlbGV0ZUJhY2tpbmdTdG9yZSgpOwogCi0jaWYg
VVNFKERJUkVDVDJEKQotICAgICAgICBhdXRvIGJpdG1hcFNpemUgPSBEMkQxOjpTaXplRih3aWR0
aCwgaGVpZ2h0KTsKLSAgICAgICAgYXV0byBwaXhlbFNpemUgPSBEMkQxOjpTaXplVSh3aWR0aCwg
aGVpZ2h0KTsKLQotICAgICAgICBpZiAoIW1fcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgICAgICAv
LyBDcmVhdGUgYSBEaXJlY3QyRCByZW5kZXIgdGFyZ2V0LgotICAgICAgICAgICAgYXV0byByZW5k
ZXJUYXJnZXRQcm9wZXJ0aWVzID0gRDJEMTo6UmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwotICAg
ICAgICAgICAgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy51c2FnZSA9IEQyRDFfUkVOREVSX1RBUkdF
VF9VU0FHRV9HRElfQ09NUEFUSUJMRTsKLSAgICAgICAgICAgIGF1dG8gaHduZFJlbmRlclRhcmdl
dFByb3BlcnRpZXMgPSBEMkQxOjpId25kUmVuZGVyVGFyZ2V0UHJvcGVydGllcyhtX3ZpZXdXaW5k
b3csIHBpeGVsU2l6ZSk7Ci0gICAgICAgICAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0
OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUh3bmRSZW5kZXJUYXJnZXQoJnJlbmRlclRhcmdldFBy
b3BlcnRpZXMsICZod25kUmVuZGVyVGFyZ2V0UHJvcGVydGllcywgJm1fcmVuZGVyVGFyZ2V0KTsK
LSAgICAgICAgICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSNlbmRpZgogICAgICAgICBtX2JhY2tpbmdTdG9yZVNpemUuY3gg
PSB3aWR0aDsKICAgICAgICAgbV9iYWNraW5nU3RvcmVTaXplLmN5ID0gaGVpZ2h0OwogICAgICAg
ICBCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGVCb3R0b21VcChJbnRT
aXplKG1fYmFja2luZ1N0b3JlU2l6ZSkpOwpAQCAtODk0LDE2ICs4NzEsNiBAQCBib29sIFdlYlZp
ZXc6OmVuc3VyZUJhY2tpbmdTdG9yZSgpCiAgICAgICAgIHZvaWQqIHBpeGVscyA9IE5VTEw7CiAg
ICAgICAgIG1fYmFja2luZ1N0b3JlQml0bWFwID0gU2hhcmVkR0RJT2JqZWN0PEhCSVRNQVA+Ojpj
cmVhdGUoYWRvcHRHRElPYmplY3QoOjpDcmVhdGVESUJTZWN0aW9uKDAsICZiaXRtYXBJbmZvLCBE
SUJfUkdCX0NPTE9SUywgJnBpeGVscywgMCwgMCkpKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAg
ICAgICAgSFJFU1VMVCBociA9IG1fcmVuZGVyVGFyZ2V0LT5DcmVhdGVDb21wYXRpYmxlUmVuZGVy
VGFyZ2V0KCZiaXRtYXBTaXplLCAmcGl4ZWxTaXplLCBudWxscHRyLCBEMkQxX0NPTVBBVElCTEVf
UkVOREVSX1RBUkdFVF9PUFRJT05TX0dESV9DT01QQVRJQkxFLCAmbV9iYWNraW5nU3RvcmVSZW5k
ZXJUYXJnZXQpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAg
ICAgICBociA9IG1fYmFja2luZ1N0b3JlUmVuZGVyVGFyZ2V0LT5HZXRCaXRtYXAoJm1fYmFja2lu
Z1N0b3JlRDJEQml0bWFwKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0KLSAgICAgICAgaHIgPSBtX2JhY2tpbmdTdG9yZVJlbmRlclRhcmdldC0+UXVlcnlJbnRlcmZh
Y2UoX191dWlkb2YoSUQyRDFHZGlJbnRlcm9wUmVuZGVyVGFyZ2V0KSwgKHZvaWQqKikmbV9iYWNr
aW5nU3RvcmVHZGlJbnRlcm9wKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0jZW5kaWYKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC05NzgsMTYgKzk0
NSw2IEBAIHZvaWQgV2ViVmlldzo6c2Nyb2xsQmFja2luZ1N0b3JlKEZyYW1lVmkKICAgICBGbG9h
dFJlY3QgY2xpcFJlY3QobG9naWNhbENsaXBSZWN0KTsKICAgICBjbGlwUmVjdC5zY2FsZShzY2Fs
ZUZhY3Rvcik7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgUkVDVCBzY3JvbGxSZWN0V2luKHNj
cm9sbFZpZXdSZWN0KTsKLSAgICBSRUNUIGNsaXBSZWN0V2luKGVuY2xvc2luZ0ludFJlY3QoY2xp
cFJlY3QpKTsKLSAgICBSRUNUIHVwZGF0ZVJlY3Q7Ci0gICAgOjpTY3JvbGxXaW5kb3dFeChtX3Zp
ZXdXaW5kb3csIGR4LCBkeSwgJnNjcm9sbFJlY3RXaW4sICZjbGlwUmVjdFdpbiwgbnVsbHB0ciwg
JnVwZGF0ZVJlY3QsIDApOwotICAgIDo6SW52YWxpZGF0ZVJlY3QobV92aWV3V2luZG93LCAmdXBk
YXRlUmVjdCwgRkFMU0UpOwotCi0gICAgaWYgKG1fdWlEZWxlZ2F0ZVByaXZhdGUpCi0gICAgICAg
IG1fdWlEZWxlZ2F0ZVByaXZhdGUtPndlYlZpZXdTY3JvbGxlZCh0aGlzKTsKLSNlbHNlCiAgICAg
aWYgKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYmUgZG9pbmcgc29tZXRoaW5nIHNtYXJ0ZXIgaGVyZSwgbGlrZSBtb3ZpbmcgdGlsZXMg
YXJvdW5kIGFuZCBwYWludGluZwogICAgICAgICAvLyBhbnkgbmV3bHktZXhwb3NlZCB0aWxlcy4g
PGh0dHA6Ly93ZWJraXQub3JnL2IvNTI3MTQ+CkBAIC0xMDM5LDcgKzk5Niw2IEBAIHZvaWQgV2Vi
Vmlldzo6c2Nyb2xsQmFja2luZ1N0b3JlKEZyYW1lVmkKIAogICAgIC8vIENsZWFuIHVwLgogICAg
IDo6U2VsZWN0T2JqZWN0KGJpdG1hcERDLmdldCgpLCBvbGRCaXRtYXApOwotI2VuZGlmIC8vIFVT
RShESVJFQ1QyRCkKIH0KIAogdm9pZCBXZWJWaWV3OjpzaXplQ2hhbmdlZChjb25zdCBJbnRTaXpl
JiBuZXdTaXplKQpAQCAtMTA2NywyMCArMTAyMyw2IEBAIHZvaWQgV2ViVmlldzo6c2l6ZUNoYW5n
ZWQoY29uc3QgSW50U2l6ZSYKICAgICBpZiAobV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4
dCkKICAgICAgICAgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+cmVzaXplUm9vdExh
eWVyKG5ld1NpemUpOwogI2VuZGlmCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgaWYgKG1fcmVu
ZGVyVGFyZ2V0KSB7Ci0gICAgICAgIG1fcmVuZGVyVGFyZ2V0LT5SZXNpemUobmV3U2l6ZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgYSBEaXJlY3QyRCByZW5kZXIg
dGFyZ2V0LgotICAgIGF1dG8gcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IEQyRDE6OlJlbmRlclRh
cmdldFByb3BlcnRpZXMoKTsKLSAgICByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLnVzYWdlID0gRDJE
MV9SRU5ERVJfVEFSR0VUX1VTQUdFX0dESV9DT01QQVRJQkxFOwotICAgIGF1dG8gaHduZFJlbmRl
clRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpId25kUmVuZGVyVGFyZ2V0UHJvcGVydGllcyhtX3Zp
ZXdXaW5kb3csIG5ld1NpemUsIEQyRDFfUFJFU0VOVF9PUFRJT05TX0lNTUVESUFURUxZKTsKLSAg
ICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUh3
bmRSZW5kZXJUYXJnZXQoJnJlbmRlclRhcmdldFByb3BlcnRpZXMsICZod25kUmVuZGVyVGFyZ2V0
UHJvcGVydGllcywgJm1fcmVuZGVyVGFyZ2V0KTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0jZW5kaWYKIH0KIAogYm9vbCBXZWJWaWV3OjpkcGlDaGFuZ2VkKGZsb2F0LCBjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBuZXdTaXplKQpAQCAtMTE0MSwxMyArMTA4Myw2IEBAIHZvaWQgV2ViVmll
dzo6dXBkYXRlQmFja2luZ1N0b3JlKEZyYW1lVmkKIAogICAgIExPQ0FMX0dESV9DT1VOVEVSKDAs
IF9fRlVOQ1RJT05fXyk7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgaWYgKCFtX2JhY2tpbmdT
dG9yZUdkaUludGVyb3ApIHsKLSAgICAgICAgSFJFU1VMVCBociA9IG1fYmFja2luZ1N0b3JlUmVu
ZGVyVGFyZ2V0LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDJEMUdkaUludGVyb3BSZW5kZXJU
YXJnZXQpLCAodm9pZCoqKSZtX2JhY2tpbmdTdG9yZUdkaUludGVyb3ApOwotICAgICAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9Ci0jZW5kaWYKLQogICAgIEdESU9iamVj
dDxIREM+IGJpdG1hcERDT2JqZWN0OwogCiAgICAgSERDIGJpdG1hcERDID0gZGM7CkBAIC0xMTU4
LDEwICsxMDkzLDYgQEAgdm9pZCBXZWJWaWV3Ojp1cGRhdGVCYWNraW5nU3RvcmUoRnJhbWVWaQog
ICAgICAgICBiaXRtYXBEQyA9IGJpdG1hcERDT2JqZWN0LmdldCgpOwogICAgICAgICBvbGRCaXRt
YXAgPSA6OlNlbGVjdE9iamVjdChiaXRtYXBEQywgbV9iYWNraW5nU3RvcmVCaXRtYXAtPmdldCgp
KTsKICAgICAgICAgQVNTRVJUKG9sZEJpdG1hcCk7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgICAg
ICBIUkVTVUxUIGhyID0gbV9iYWNraW5nU3RvcmVHZGlJbnRlcm9wLT5HZXREQyhEMkQxX0RDX0lO
SVRJQUxJWkVfTU9ERV9DT1BZLCAmYml0bWFwREMpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChT
VUNDRUVERUQoaHIpKTsKLSNlbmRpZgogICAgIH0KIAogICAgIGlmIChtX2JhY2tpbmdTdG9yZUJp
dG1hcCAmJiAobV9iYWNraW5nU3RvcmVEaXJ0eVJlZ2lvbiB8fCBiYWNraW5nU3RvcmVDb21wbGV0
ZWx5RGlydHkpKSB7CkBAIC0xMTg1LDEyICsxMTE2LDggQEAgdm9pZCBXZWJWaWV3Ojp1cGRhdGVC
YWNraW5nU3RvcmUoRnJhbWVWaQogICAgICAgICBtX2JhY2tpbmdTdG9yZURpcnR5UmVnaW9uID0g
bnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoIWRjKSB7CisgICAgaWYgKCFkYykKICAgICAgICAg
OjpTZWxlY3RPYmplY3QoYml0bWFwREMsIG9sZEJpdG1hcCk7Ci0jaWYgVVNFKERJUkVDVDJEKQot
ICAgICAgICBtX2JhY2tpbmdTdG9yZUdkaUludGVyb3AtPlJlbGVhc2VEQyhudWxscHRyKTsKLSNl
bmRpZgotICAgIH0KIAogICAgIEdkaUZsdXNoKCk7CiAKQEAgLTEyMjUsNjkgKzExNTIsNiBAQCB2
b2lkIFdlYlZpZXc6OnBlcmZvcm1MYXllcmVkV2luZG93VXBkYXRlCiAgICAgbV9uZWVkc0Rpc3Bs
YXkgPSBmYWxzZTsKIH0KIAotdm9pZCBXZWJWaWV3OjpwYWludFdpdGhEaXJlY3QyRCgpCi17Ci0j
aWYgVVNFKERJUkVDVDJEKQotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKG1fbWFpbkZyYW1l
KTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEZyYW1lVmlldyog
ZnJhbWVWaWV3ID0gY29yZUZyYW1lLT52aWV3KCk7Ci0gICAgZnJhbWVWaWV3LT51cGRhdGVMYXlv
dXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlKCk7Ci0KLSAgICBpZiAoIW1fcmVuZGVyVGFyZ2V0
KSB7Ci0gICAgICAgIC8vIENyZWF0ZSBhIERpcmVjdDJEIHJlbmRlciB0YXJnZXQuCi0gICAgICAg
IGF1dG8gcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IEQyRDE6OlJlbmRlclRhcmdldFByb3BlcnRp
ZXMoKTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy51c2FnZSA9IEQyRDFfUkVOREVS
X1RBUkdFVF9VU0FHRV9HRElfQ09NUEFUSUJMRTsKLQotICAgICAgICBSRUNUIHJlY3Q7Ci0gICAg
ICAgIDo6R2V0Q2xpZW50UmVjdChtX3ZpZXdXaW5kb3csICZyZWN0KTsKLQotICAgICAgICBJbnRS
ZWN0IGNsaWVudFJlY3QocmVjdCk7Ci0KLSAgICAgICAgYXV0byBwaXhlbFNpemUgPSBEMkQxOjpT
aXplVShjbGllbnRSZWN0LndpZHRoKCksIGNsaWVudFJlY3QuaGVpZ2h0KCkpOwotCi0gICAgICAg
IGF1dG8gaHduZFJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpId25kUmVuZGVyVGFyZ2V0
UHJvcGVydGllcyhtX3ZpZXdXaW5kb3csIHBpeGVsU2l6ZSwgRDJEMV9QUkVTRU5UX09QVElPTlNf
SU1NRURJQVRFTFkpOwotICAgICAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0
ZW1GYWN0b3J5KCktPkNyZWF0ZUh3bmRSZW5kZXJUYXJnZXQoJnJlbmRlclRhcmdldFByb3BlcnRp
ZXMsICZod25kUmVuZGVyVGFyZ2V0UHJvcGVydGllcywgJm1fcmVuZGVyVGFyZ2V0KTsKLSAgICAg
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IFJFQ1QgY2xpZW50UmVjdCA9IHt9OwotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHBsYXRm
b3JtQ29udGV4dChtX3JlbmRlclRhcmdldC5nZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0V2lu
IGdjKCZwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29u
dGV4dFR5cGU6OkdQVU1lbW9yeSk7Ci0KLSAgICB7Ci0gICAgICAgIG1fcmVuZGVyVGFyZ2V0LT5T
ZXRUYWdzKFdFQktJVF9EUkFXSU5HLCBfX0xJTkVfXyk7Ci0gICAgICAgIG1fcmVuZGVyVGFyZ2V0
LT5DbGVhcigpOwotCi0gICAgICAgIC8vIERpcmVjdDJEIGhvbm9ycyB0aGUgc2NhbGUgZmFjdG9y
IG5hdGl2ZWx5LgotICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGY7Ci0gICAgICAgIGZs
b2F0IGludmVyc2VTY2FsZUZhY3RvciA9IDEuMGYgLyBzY2FsZUZhY3RvcjsKLQotICAgICAgICBH
ZXRDbGllbnRSZWN0KG1fdmlld1dpbmRvdywgJmNsaWVudFJlY3QpOwotCi0gICAgICAgIEludFJl
Y3QgZGlydHlSZWN0UGl4ZWxzKDAsIDAsIGNsaWVudFJlY3QucmlnaHQsIGNsaWVudFJlY3QuYm90
dG9tKTsKLSAgICAgICAgRmxvYXRSZWN0IGxvZ2ljYWxEaXJ0eVJlY3RGbG9hdCA9IGRpcnR5UmVj
dFBpeGVsczsKLSAgICAgICAgbG9naWNhbERpcnR5UmVjdEZsb2F0LnNjYWxlKGludmVyc2VTY2Fs
ZUZhY3Rvcik7Ci0gICAgICAgIEludFJlY3QgbG9naWNhbERpcnR5UmVjdChlbmNsb3NpbmdJbnRS
ZWN0KGxvZ2ljYWxEaXJ0eVJlY3RGbG9hdCkpOwotCi0gICAgICAgIGlmIChmcmFtZVZpZXcgJiYg
ZnJhbWVWaWV3LT5mcmFtZSgpLmNvbnRlbnRSZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBnYy5z
YXZlKCk7Ci0gICAgICAgICAgICBnYy5zY2FsZShGbG9hdFNpemUoc2NhbGVGYWN0b3IsIHNjYWxl
RmFjdG9yKSk7Ci0gICAgICAgICAgICBnYy5jbGlwKGxvZ2ljYWxEaXJ0eVJlY3QpOwotICAgICAg
ICAgICAgZnJhbWVWaWV3LT5wYWludChnYywgbG9naWNhbERpcnR5UmVjdCk7Ci0gICAgICAgICAg
ICBpZiAobV9zaG91bGRJbnZlcnRDb2xvcnMpCi0gICAgICAgICAgICAgICAgZ2MuZmlsbFJlY3Qo
bG9naWNhbERpcnR5UmVjdCwgQ29sb3I6OndoaXRlLCBDb21wb3NpdGVPcGVyYXRvcjo6RGlmZmVy
ZW5jZSk7Ci0gICAgICAgICAgICBnYy5yZXN0b3JlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICA6OlZhbGlkYXRlUmVjdChtX3ZpZXdXaW5kb3csICZjbGllbnRSZWN0KTsKLSNlbHNlCi0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBXZWJWaWV3OjpwYWludChI
REMgZGMsIExQQVJBTSBvcHRpb25zKQogewogICAgIExPQ0FMX0dESV9DT1VOVEVSKDAsIF9fRlVO
Q1RJT05fXyk7CkBAIC0xMzQ5LDE4ICsxMjEzLDggQEAgdm9pZCBXZWJWaWV3OjpwYWludChIREMg
ZGMsIExQQVJBTSBvcHRpbwogCiAgICAgOjpTZWxlY3RPYmplY3QoYml0bWFwREMuZ2V0KCksIG9s
ZEJpdG1hcCk7CiAKLSAgICBpZiAoIWRjKSB7CisgICAgaWYgKCFkYykKICAgICAgICAgRW5kUGFp
bnQobV92aWV3V2luZG93LCAmcHMpOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgSFJFU1VM
VCBociA9IG1fYmFja2luZ1N0b3JlUmVuZGVyVGFyZ2V0LT5FbmREcmF3KCk7Ci0gICAgICAgIC8v
IEZJWE1FOiBSZWNvZ25pemUgYW5kIHJlY292ZXIgZnJvbSBlcnJvciBzdGF0ZToKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSNpZiBVU0Uo
RElSRUNUMkQpCi0gICAgbV9iYWNraW5nU3RvcmVHZGlJbnRlcm9wLT5SZWxlYXNlREMobnVsbHB0
cik7Ci0jZW5kaWYKIAogICAgIGlmIChhY3RpdmUoKSkKICAgICAgICAgY2FuY2VsRGVsZXRlQmFj
a2luZ1N0b3JlU29vbigpOwpAQCAtMTQwMywxMCArMTI1Nyw2IEBAIHZvaWQgV2ViVmlldzo6cGFp
bnRJbnRvQmFja2luZ1N0b3JlKEZyYW0KICAgICBsb2dpY2FsRGlydHlSZWN0RmxvYXQuc2NhbGUo
aW52ZXJzZVNjYWxlRmFjdG9yKTsgICAgCiAgICAgSW50UmVjdCBsb2dpY2FsRGlydHlSZWN0KGVu
Y2xvc2luZ0ludFJlY3QobG9naWNhbERpcnR5UmVjdEZsb2F0KSk7CiAKLSNpZiBVU0UoRElSRUNU
MkQpCi0gICAgbV9iYWNraW5nU3RvcmVSZW5kZXJUYXJnZXQgPSBudWxscHRyOwotI2VuZGlmCi0K
ICAgICBHcmFwaGljc0NvbnRleHRXaW4gZ2MoYml0bWFwREMsIG1fdHJhbnNwYXJlbnQpOwogICAg
IGdjLnNhdmUoKTsKICAgICBpZiAobV90cmFuc3BhcmVudCkKQEAgLTI1MTAsMTEgKzIzNjAsNyBA
QCBMUkVTVUxUIENBTExCQUNLIFdlYlZpZXc6OldlYlZpZXdXbmRQcm9jCiAKICAgICBzd2l0Y2gg
KG1lc3NhZ2UpIHsKICAgICAgICAgY2FzZSBXTV9QQUlOVDogewotI2lmIFVTRShESVJFQ1QyRCkK
LSAgICAgICAgICAgIHdlYlZpZXctPnBhaW50V2l0aERpcmVjdDJEKCk7Ci0jZWxzZQogICAgICAg
ICAgICAgd2ViVmlldy0+cGFpbnQoMCwgMCk7Ci0jZW5kaWYKICAgICAgICAgICAgIGlmICh3ZWJW
aWV3LT51c2VzTGF5ZXJlZFdpbmRvdygpKQogICAgICAgICAgICAgICAgIHdlYlZpZXctPnBlcmZv
cm1MYXllcmVkV2luZG93VXBkYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTU0NDQsMTAg
KzUyOTAsNiBAQCBIUkVTVUxUIFdlYlZpZXc6Om5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlCiAgICAg
aHIgPSBwcmVmc1ByaXZhdGUtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCZlbmFibGVk
KTsKICAgICBpZiAoRkFJTEVEKGhyKSkKICAgICAgICAgcmV0dXJuIGhyOwotI2lmIFVTRShESVJF
Q1QyRCkKLSAgICAvLyBEaXNhYmxlIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGZvciBub3cuCi0g
ICAgZW5hYmxlZCA9IGZhbHNlOwotI2VuZGlmCiAgICAgc2V0dGluZ3Muc2V0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0VuYWJsZWQoZW5hYmxlZCk7CiAKICAgICBociA9IHByZWZzUHJpdmF0ZS0+c2hv
d0RlYnVnQm9yZGVycygmZW5hYmxlZCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9X
ZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5o
CShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc3LDEzICs3Nyw2IEBAIFdlYlZpZXcqIGtpdChXZWJDb3JlOjpQ
YWdlKik7CiBXZWJDb3JlOjpQYWdlKiBjb3JlKElXZWJWaWV3Kik7CiAKIGludGVyZmFjZSBJRHJv
cFRhcmdldEhlbHBlcjsKLSNpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQyRDFCaXRtYXA7
Ci1pbnRlcmZhY2UgSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFHZGlJ
bnRlcm9wUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNlIElEMkQxSHduZFJlbmRlclRhcmdldDsKLWlu
dGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLSNlbmRpZgogCiBjbGFzcyBXZWJWaWV3IGZpbmFs
CiAgICAgOiBwdWJsaWMgSVdlYlZpZXcKQEAgLTQyNyw3ICs0MjAsNiBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBrZXlEb3duKFdQQVJBTSwgTFBBUkFNLCBib29sIHN5c3RlbUtleURvd24gPSBmYWxzZSk7
CiAgICAgYm9vbCBrZXlVcChXUEFSQU0sIExQQVJBTSwgYm9vbCBzeXN0ZW1LZXlEb3duID0gZmFs
c2UpOwogICAgIGJvb2wga2V5UHJlc3MoV1BBUkFNLCBMUEFSQU0sIGJvb2wgc3lzdGVtS2V5RG93
biA9IGZhbHNlKTsKLSAgICB2b2lkIHBhaW50V2l0aERpcmVjdDJEKCk7CiAgICAgdm9pZCBwYWlu
dChIREMsIExQQVJBTSk7CiAgICAgdm9pZCBwYWludEludG9XaW5kb3coSERDIGJpdG1hcERDLCBI
REMgd2luZG93REMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7CiAgICAgYm9v
bCBlbnN1cmVCYWNraW5nU3RvcmUoKTsKQEAgLTYyNiwxMiArNjE4LDYgQEAgcHJvdGVjdGVkOgog
CiAgICAgSE1FTlUgbV9jdXJyZW50Q29udGV4dE1lbnUgeyBudWxscHRyIH07CiAgICAgUmVmUHRy
PFdlYkNvcmU6OlNoYXJlZEdESU9iamVjdDxIQklUTUFQPj4gbV9iYWNraW5nU3RvcmVCaXRtYXA7
Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRDJEMUh3bmRSZW5kZXJUYXJnZXQ+IG1f
cmVuZGVyVGFyZ2V0OwotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gbV9iYWNraW5nU3RvcmVEMkRC
aXRtYXA7Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBtX2JhY2tpbmdTdG9y
ZVJlbmRlclRhcmdldDsKLSAgICBDT01QdHI8SUQyRDFHZGlJbnRlcm9wUmVuZGVyVGFyZ2V0PiBt
X2JhY2tpbmdTdG9yZUdkaUludGVyb3A7Ci0jZW5kaWYKICAgICBTSVpFIG1fYmFja2luZ1N0b3Jl
U2l6ZTsKICAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkR0RJT2JqZWN0PEhSR04+PiBtX2JhY2tp
bmdTdG9yZURpcnR5UmVnaW9uOwogCkluZGV4OiBTb3VyY2UvY21ha2UvT3B0aW9uc0ZUVy5jbWFr
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvY21ha2UvT3B0aW9uc0ZUVy5jbWFrZQkocmV2aXNpb24g
Mjg3ODEyKQorKysgU291cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2UJKG5vbmV4aXN0ZW50KQpA
QCAtMSwyMzYgKzAsMCBAQAotaWYgKENNQUtFX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDMuMTQpCi0g
ICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ01ha2UgMy4xNCBvciBncmVhdGVyIGlzIHJlcXVpcmVk
IHRvIGNvbXBpbGUgV2ViS2l0RlRXIikKLWVuZGlmICgpCi0KLWlmIChNU1ZDX1ZFUlNJT04gVkVS
U0lPTl9MRVNTIDE5MjApCi0gICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVmlzdWFsIFN0dWRpbyAy
MDE5IGlzIHJlcXVpcmVkIHRvIGNvbXBpbGUgV2ViS2l0RlRXIikKLWVuZGlmICgpCi0KLWlmICgk
e1dURl9DUFVfWDg2fSkKLSAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJXZWJLaXRGVFcgZG9lcyBu
b3Qgc3VwcG9ydCAzMi1iaXQgYnVpbGRzIikKLWVuZGlmICgpCi0KLXNldChQT1JUIEZUVykKLQot
IyBDb21waWxhdGlvbiBvcHRpb25zCi1pbmNsdWRlKE9wdGlvbnNNU1ZDKQotCi1hZGRfZGVmaW5p
dGlvbnMoLURXVEZfUExBVEZPUk1fRlRXPTEpCi0jIFByZXZlbnQgbWluKCkgYW5kIG1heCgpIG1h
Y3JvcyBmcm9tIGJlaW5nIGV4cG9zZWQKLWFkZF9kZWZpbml0aW9ucygtRE5PTUlOTUFYKQotIyBV
c2UgdW5pY29kZQotYWRkX2RlZmluaXRpb25zKC1EVU5JQ09ERSAtRF9VTklDT0RFKQotIyBJZiA8
d2luc29jazIuaD4gaXMgbm90IGluY2x1ZGVkIGJlZm9yZSA8d2luZG93cy5oPiByZWRlZmluaXRp
b24gZXJyb3JzIG9jY3VyCi0jIHVubGVzcyBfV0lOU09DS0FQSV8gaXMgZGVmaW5lZCBiZWZvcmUg
PHdpbmRvd3MuaD4gaXMgaW5jbHVkZWQKLWFkZF9kZWZpbml0aW9ucygtRF9XSU5TT0NLQVBJXz0p
Ci0KLSMgU2V0dXAgbGlicmFyeSBwYXRocwotaWYgKERFRklORUQgRU5We0FwcGxlQXBwbGljYXRp
b25TdXBwb3J0U0RLfSkKLSAgICBmaWxlKFRPX0NNQUtFX1BBVEggIiRFTlZ7QXBwbGVBcHBsaWNh
dGlvblN1cHBvcnRTREt9L0FwcGxlSW50ZXJuYWwiIFdFQktJVF9MSUJSQVJJRVNfRElSKQotICAg
IHNldChXRUJLSVRfTElCUkFSSUVTX0lOQ0xVREVfRElSICIke1dFQktJVF9MSUJSQVJJRVNfRElS
fS9pbmNsdWRlIikKLSAgICBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7V0VCS0lUX0xJQlJBUklFU19J
TkNMVURFX0RJUn0pCi0gICAgc2V0KEFQUExFX0JVSUxEIDEpCi1lbmRpZiAoKQotCi1pZiAoTk9U
IFdFQktJVF9MSUJSQVJJRVNfRElSKQotICAgIGlmIChERUZJTkVEIEVOVntXRUJLSVRfTElCUkFS
SUVTfSkKLSAgICAgICAgZmlsZShUT19DTUFLRV9QQVRIICIkRU5We1dFQktJVF9MSUJSQVJJRVN9
IiBXRUJLSVRfTElCUkFSSUVTX0RJUikKLSAgICBlbHNlICgpCi0gICAgICAgIGZpbGUoVE9fQ01B
S0VfUEFUSCAiJHtDTUFLRV9TT1VSQ0VfRElSfS9XZWJLaXRMaWJyYXJpZXMvd2luIiBXRUJLSVRf
TElCUkFSSUVTX0RJUikKLSAgICBlbmRpZiAoKQotZW5kaWYgKCkKLQotc2V0KENNQUtFX1BSRUZJ
WF9QQVRIICR7V0VCS0lUX0xJQlJBUklFU19ESVJ9KQotCi1zZXRfcHJvcGVydHkoR0xPQkFMIFBS
T1BFUlRZIEZJTkRfTElCUkFSWV9VU0VfTElCMzJfUEFUSFMgT0ZGKQotc2V0X3Byb3BlcnR5KEdM
T0JBTCBQUk9QRVJUWSBGSU5EX0xJQlJBUllfVVNFX0xJQjY0X1BBVEhTIE9OKQotCi1zZXQoV0VC
S0lUX0xJQlJBUklFU19MSU5LX0RJUiAiJHtXRUJLSVRfTElCUkFSSUVTX0RJUn0vbGliNjQiKQot
IyBGSVhNRTogUmVtb3ZlICR7V0VCS0lUX0xJQlJBUklFU19MSU5LX0RJUn0gd2hlbiBmaW5kX2xp
YnJhcnkgaXMgdXNlZCBmb3IgZXZlcnl0aGluZwotbGlua19kaXJlY3RvcmllcygiJHtDTUFLRV9C
SU5BUllfRElSfS9saWI2NCIgIiR7V0VCS0lUX0xJQlJBUklFU19MSU5LX0RJUn0iKQotc2V0KENN
QUtFX0FSQ0hJVkVfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtFX0JJTkFSWV9ESVJ9L2xpYjY0KQot
c2V0KENNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtFX0JJTkFSWV9ESVJ9L2xp
YjY0KQotc2V0KENNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtFX0JJTkFSWV9E
SVJ9L2JpbjY0KQotCi1zZXQoQ01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZX0RFQlVHICIk
e0NNQUtFX0FSQ0hJVkVfT1VUUFVUX0RJUkVDVE9SWX0iKQotc2V0KENNQUtFX0FSQ0hJVkVfT1VU
UFVUX0RJUkVDVE9SWV9SRUxFQVNFICIke0NNQUtFX0FSQ0hJVkVfT1VUUFVUX0RJUkVDVE9SWX0i
KQotc2V0KENNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWV9ERUJVRyAiJHtDTUFLRV9MSUJS
QVJZX09VVFBVVF9ESVJFQ1RPUll9IikKLXNldChDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RP
UllfUkVMRUFTRSAiJHtDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUll9IikKLXNldChDTUFL
RV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUllfREVCVUcgIiR7Q01BS0VfUlVOVElNRV9PVVRQVVRf
RElSRUNUT1JZfSIpCi1zZXQoQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZX1JFTEVBU0Ug
IiR7Q01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfSIpCi0KLVdFQktJVF9PUFRJT05fQkVH
SU4oKQotCi0jIEZlYXR1cmVzIGluIHRoZSBzYW1lIHN0YXRlIG9uIFdpbkNhaXJvIGFuZCBBcHBs
ZVdpbgotCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfM0RfVFJBTlNG
T1JNUyBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X0FUVEFDSE1FTlRfRUxFTUVOVCBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX0NBQ0hFX1BBUlRJVElPTklORyBQUklWQVRFIE9OKQotV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HIFBSSVZBVEUg
T04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTM19URVhUIFBS
SVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19C
T1hfREVDT1JBVElPTl9CUkVBSyBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX0NTU19DT05JQ19HUkFESUVOVFMgUFJJVkFURSBPTikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1NfREVWSUNFX0FEQVBUQVRJT04gUFJJ
VkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX0lN
QUdFX1JFU09MVVRJT04gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfQ1NTX1BBSU5USU5HX0FQSSBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19TRUxFQ1RPUlNfTEVWRUw0IFBSSVZBVEUgT04p
Ci1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1VSU09SX1ZJU0lCSUxJ
VFkgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9E
UkFHX1NVUFBPUlQgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9GSUxURVJTX0xFVkVMXzIgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9GVExfSklUIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0ZUUERJUiBQUklWQVRFIE9OKQotV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJIFBSSVZBVEUgT0ZGKQot
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0dFT0xPQ0FUSU9OIFBSSVZB
VEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTUFDX0dFU1RV
UkVfRVZFTlRTIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX01BVEhNTCBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX01FRElBX0NPTlRST0xTX1NDUklQVCBQUklWQVRFIE9OKQotV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX01IVE1MIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX01JTklCUk9XU0VSIFBSSVZBVEUgT04pCi1X
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTU9VU0VfQ1VSU09SX1NDQUxF
IFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTkVU
U0NBUEVfUExVR0lOX0FQSSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9PUklFTlRBVElPTl9FVkVOVFMgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIIFBS
SVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1BVQkxJ
Q19TVUZGSVhfTElTVCBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX1NBTVBMSU5HX1BST0ZJTEVSIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NQRUxMQ0hFQ0sgUFJJVkFURSBPRkYpCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVE9VQ0hfRVZFTlRTIFBSSVZBVEUgT0ZG
KQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1RPVUNIX1NMSURFUiBQ
UklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9VTklG
SUVEX0JVSUxEUyBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX1ZJREVPIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfV0VCQVNTRU1CTFkgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfV0VCR0wgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9XSVJFTEVTU19QTEFZQkFDS19UQVJHRVQgUFJJVkFURSBPRkYp
Ci1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfWFNMVCBQUklWQVRFIE9O
KQotCi0jIE1lZGlhIHRoaW5ncyB0aGF0IHNob3VsZCBiZSBvbgotV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FWRl9DQVBUSU9OUyBQUklWQVRFIE9GRikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJfQVVESU8gUFJJVkFURSBPRkYpCi1X
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTEVHQUNZX0VOQ1JZUFRFRF9N
RURJQSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9NRURJQV9DQVBUVVJFIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX01FRElBX1NPVVJDRSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVG
QVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9NRURJQV9TVEFUSVNUSUNTIFBSSVZBVEUgT0ZGKQotV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX01FRElBX1NUUkVBTSBQUklWQVRF
IE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9WSURFT19QUkVT
RU5UQVRJT05fTU9ERSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTiBQUklWQVRFIE9GRikKLVdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJfUlRDIFBSSVZBVEUgT0ZG
KQotCi0jIFBheW1lbnQgdGhpbmdzCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfQVBQTEVfUEFZIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX1BBWU1FTlRfUkVRVUVTVCBQUklWQVRFIE9GRikKLQotIyBXZWJHTAotV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQkdMMiBQUklWQVRFIE9GRikK
LQotIyBPZmYgZm9yIG5vdywgYnV0IHNob3VsZCBiZSBvbgotV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX0FQSV9URVNUUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9BUFBMSUNBVElPTl9NQU5JRkVTVCBQUklWQVRFIE9G
RikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9BU1lOQ19TQ1JPTExJ
TkcgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
Q09OVEVOVF9FWFRFTlNJT05TIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX0NPTlRFTlRfRklMVEVSSU5HIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19UWVBFRF9PTSBQUklWQVRFIE9GRikK
LVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9EQVJLX01PREVfQ1NTIFBS
SVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0RBVEFD
VUVfVkFMVUUgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfREFUQUxJU1RfRUxFTUVOVCBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04gUFJJVkFURSBPRkYpCi1XRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRE9XTkxPQURfQVRUUklCVVRFIFBS
SVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0VOQ1JZ
UFRFRF9NRURJQSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9JTlRFTExJR0VOVF9UUkFDS0lOR19QUkVWRU5USU9OIFBSSVZBVEUgT0ZGKQotV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0xBWUVSX0JBU0VEX1NWR19FTkdJ
TkUgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVG
QVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9MRVRURVJQUkVTUyBQUklWQVRFIE9GRikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9MQVlPVVRfRk9STUFUVElOR19DT05URVhU
IFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0xF
VFRFUlBSRVNTIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX01FTU9SWV9TQU1QTEVSIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX05FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9O
IFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX05F
VFdPUktfQ0FDSEVfU1RBTEVfV0hJTEVfUkVWQUxJREFURSBQUklWQVRFIE9GRikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9OT1RJRklDQVRJT05TIFBSSVZBVEUgT0ZG
KQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX09WRVJGTE9XX1NDUk9M
TElOR19UT1VDSCBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9QREZLSVRfUExVR0lOIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX1BPSU5URVJfTE9DSyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRVNPVVJDRV9VU0FHRSBQUklWQVRFIE9GRikK
LVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SVUJCRVJfQkFORElORyBQ
UklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TQU5E
Qk9YX0VYVEVOU0lPTlMgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfU0VSVkVSX1BSRUNPTk5FQ1QgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0VSVklDRV9DT05UUk9MUyBQUklWQVRFIE9GRikK
LVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TRVJWSUNFX1dPUktFUiBQ
UklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TSEFS
RUFCTEVfUkVTT1VSQ0UgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfU01PT1RIX1NDUk9MTElORyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TUEVFQ0hfU1lOVEhFU0lTIFBSSVZBVEUgT0ZGKQot
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1RFTEVQSE9ORV9OVU1CRVJf
REVURUNUSU9OIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX1RFWFRfQVVUT1NJWklORyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9VU0VSX01FU1NBR0VfSEFORExFUlMgUFJJVkFURSBPRkYpCi1X
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVkFSSUFUSU9OX0ZPTlRTIFBS
SVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQkRS
SVZFUiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9XRUJfQVVUSE4gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfV0VCX0NSWVBUTyBQUklWQVRFIE9GRikKLQotI1dFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKFVTRV9WRVJTSU9OX1NUQU1QRVIgUFJJVkFURSBPTikKLQotIyBFeHBlcmlt
ZW50YWwgZmVhdHVyZXMKLSNXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
UkVNT1RFX0lOU1BFQ1RPUiBQUklWQVRFICR7RU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFU30p
Ci1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVNT1RFX0lOU1BFQ1RP
UiBQUklWQVRFIE9GRikKLSNXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
UkVTT1VSQ0VfVVNBR0UgUFJJVkFURSAke0VOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVN9KQot
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFU09VUkNFX1VTQUdFIFBS
SVZBVEUgT0ZGKQotCi0jIEZlYXR1cmVzIHRvIGludmVzdGlnYXRlCi0jCi0jIEZlYXR1cmVzIHRo
YXQgYXJlIHRlbXBvcmFyaWx5IHR1cm5lZCBvZmYgYmVjYXVzZSBhbiBpbXBsZW1lbnRhdGlvbiBp
cyBub3QKLSMgcHJlc2VudCBhdCB0aGlzIHRpbWUKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9GVExfSklUIFBSSVZBVEUgT0ZGKQotCi0jIE5vIHN1cHBvcnQgcGxhbm5l
ZAotCi0jIEZJWE1FOiBQb3J0IGJtYWxsb2MgdG8gV2luZG93cy4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzMxMAotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoVVNFX1NZU1RFTV9NQUxMT0MgUFJJVkFURSBPTikKLQotV0VCS0lUX09QVElPTl9FTkQo
KQotCi1pZiAoQVBQTEVfQlVJTEQpCi0gICAgc2V0KENPUkVGT1VOREFUSU9OX0xJQlJBUlkgQ29y
ZUZvdW5kYXRpb24ke0RFQlVHX1NVRkZJWH0pCi0gICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQo
VVNFX0NGIE9OKQotICAgIGZpbmRfcGFja2FnZShMaWJYbWwyIDIuOS4xIFJFUVVJUkVEKQotICAg
IGlmIChFTkFCTEVfWFNMVCkKLSAgICAgICAgZmluZF9wYWNrYWdlKExpYlhzbHQgMS4xLjI4IFJF
UVVJUkVEKQotICAgIGVuZGlmICgpCi1lbHNlICgpCi0gICAgZmluZF9wYWNrYWdlKExpYlhtbDIg
Mi45LjcgUkVRVUlSRUQpCi0gICAgaWYgKEVOQUJMRV9YU0xUKQotICAgICAgICBmaW5kX3BhY2th
Z2UoTGliWHNsdCAxLjEuMzIgUkVRVUlSRUQpCi0gICAgZW5kaWYgKCkKLWVuZGlmICgpCi0KLWZp
bmRfcGFja2FnZShDVVJMIDcuNjAuMCBSRVFVSVJFRCkKLWZpbmRfcGFja2FnZShJQ1UgNjEuMiBS
RVFVSVJFRCBDT01QT05FTlRTIGRhdGEgaTE4biB1YykKLWZpbmRfcGFja2FnZShKUEVHIDEuNS4y
IFJFUVVJUkVEKQotZmluZF9wYWNrYWdlKE9wZW5TU0wgMi4wLjAgUkVRVUlSRUQpCi1maW5kX3Bh
Y2thZ2UoUE5HIDEuNi4zNCBSRVFVSVJFRCkKLWZpbmRfcGFja2FnZShTUUxpdGUzIDMuMjMuMSBS
RVFVSVJFRCkKLWZpbmRfcGFja2FnZShaTElCIDEuMi4xMSBSRVFVSVJFRCkKLWZpbmRfcGFja2Fn
ZShMaWJQU0wgMC4yMC4yIFJFUVVJUkVEKQotCi0jIEZJWE1FOiBXZSBzaG91bGQgYWRkIHRoZSBm
b2xsb3dpbmcsIHRvby4KLSMgZmluZF9wYWNrYWdlKFdlYlAgUkVRVUlSRUQgQ09NUE9ORU5UUyBk
ZW11eCkKLSMgaWYgKFdlYlBfRk9VTkQpCi0jICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChV
U0VfV0VCUCBPTikKLSMgZW5kaWYgKCkKLQotc2V0KFVTRV9BTkdMRV9FR0wgT04pCi0KLVNFVF9B
TkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DVVJMIE9OKQotU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQo
VVNFX0RJUkVDVDJEIE9OKQotU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0VHTCBPTikKLVNF
VF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9PUEVOR0xfRVMgT04pCi1TRVRfQU5EX0VYUE9TRV9U
T19CVUlMRChIQVZFX09QRU5HTF9FU18zIE9OKQotU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNF
X09QRU5TU0wgT04pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfVEVYVFVSRV9NQVBQRVIg
T04pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfVEVYVFVSRV9NQVBQRVJfR0wgT04pCi0j
U0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0lOU1BFQ1RPUl9TT0NLRVRfU0VSVkVSICR7RU5B
QkxFX1JFTU9URV9JTlNQRUNUT1J9KQotU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0lOU1BF
Q1RPUl9TT0NLRVRfU0VSVkVSIE9GRikKLQotc2V0KFdURl9MSUJSQVJZX1RZUEUgU0hBUkVEKQot
c2V0KEphdmFTY3JpcHRDb3JlX0xJQlJBUllfVFlQRSBTSEFSRUQpCi0KLXNldChFTkFCTEVfQVBJ
X1RFU1RTIE9GRikKLXNldChFTkFCTEVfV0VCQ09SRSBPTikKLXNldChFTkFCTEVfV0VCS0lUIE9O
KQotc2V0KEVOQUJMRV9XRUJLSVRfTEVHQUNZIE9OKQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjg3ODEyKQorKysgVG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMjItMDEtMDcgIFNh
bSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZv
ciBEaXJlY3QyRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjM0OTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0LmNwcDoKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9QbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93
aW4vUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmg6IFJlbW92ZWQuCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvd2luL1BpeGVsRHVtcFN1cHBvcnRXaW4uY3BwOgorICAgICAg
ICAoY3JlYXRlQml0bWFwQ29udGV4dEZyb21XZWJWaWV3KToKKyAgICAgICAgKiBQbGF0Zm9ybUZU
Vy5jbWFrZTogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHA6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxl
UGFnZTo6ZHVtcERPTUFzV2ViQXJjaGl2ZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Q
bGF0Zm9ybUZUVy5jbWFrZTogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Bs
YXRmb3JtV2ViVmlldy5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvd2luL1BsYXRmb3Jt
V2ViVmlld1dpbi5jcHA6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdEludm9j
YXRpb25EaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisKIDIwMjItMDEtMDggIFR5bGVyIFdpbGNvY2sg
IDx0eWxlcl93QGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogQWNjZXNzaWJpbGl0eU9iamVjdDo6
c2V0Rm9jdXNlZCh0cnVlKSBzaG91bGQgbWFrZSB0aGUgd2VicGFnZSBmb2N1c2VkLCBhbmQgbWFr
ZSB3ZWIgY29udGVudCB0aGUgZmlyc3QgcmVzcG9uZGVyCkluZGV4OiBUb29scy9QbGF0Zm9ybUZU
Vy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9QbGF0Zm9ybUZUVy5jbWFrZQkocmV2aXNpb24g
Mjg3ODEyKQorKysgVG9vbHMvUGxhdGZvcm1GVFcuY21ha2UJKG5vbmV4aXN0ZW50KQpAQCAtMSwx
MSArMCwwIEBACi0jYWRkX3N1YmRpcmVjdG9yeShJbWFnZURpZmYpCi0KLWlmIChFTkFCTEVfV0VC
S0lUX0xFR0FDWSkKLSAgICAjYWRkX3N1YmRpcmVjdG9yeShEdW1wUmVuZGVyVHJlZSkKLSAgICBh
ZGRfc3ViZGlyZWN0b3J5KE1pbmlCcm93c2VyL3dpbikKLWVuZGlmICgpCi0KLWlmIChFTkFCTEVf
V0VCS0lUKQotICAgIGFkZF9zdWJkaXJlY3RvcnkoVGVzdFJ1bm5lclNoYXJlZCkKLSAgICBhZGRf
c3ViZGlyZWN0b3J5KFdlYktpdFRlc3RSdW5uZXIpCi1lbmRpZiAoKQpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw4ICs0MSw2IEBACiAjaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydENHLmgiCiAjZWxpZiBV
U0UoQ0FJUk8pCiAjaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmgiCi0jZWxpZiBVU0Uo
RElSRUNUMkQpCi0jaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmgiCiAjZW5kaWYK
IAogdm9pZCBkdW1wV2ViVmlld0FzUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChjb25zdCBz
dGQ6OnN0cmluZyYgZXhwZWN0ZWRIYXNoKQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvUGxh
dGZvcm1XaW4uY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvUGxhdGZv
cm1XaW4uY21ha2UJKHJldmlzaW9uIDI4NzgxMikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Bs
YXRmb3JtV2luLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC01MiwyNCArNTIsMTUgQEAgZWxzZSAo
KQogICAgICAgICBDRk5ldHdvcmsKICAgICAgICAgQ29yZVRleHQKICAgICApCi0gICAgaWYgKCR7
VVNFX0RJUkVDVDJEfSkKLSAgICAgICAgbGlzdChBUFBFTkQgRHVtcFJlbmRlclRyZWVfU09VUkNF
UwotICAgICAgICAgICAgd2luL1BpeGVsRHVtcFN1cHBvcnREaXJlY3QyRC5jcHAKLSAgICAgICAg
KQotICAgICAgICBsaXN0KEFQUEVORCBEdW1wUmVuZGVyVHJlZV9MSUJSQVJJRVMKLSAgICAgICAg
ICAgIEQyZDEKLSAgICAgICAgKQotICAgIGVsc2UgKCkKLSAgICAgICAgbGlzdChBUFBFTkQgRHVt
cFJlbmRlclRyZWVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgICAgICAgICAke0R1
bXBSZW5kZXJUcmVlX0RJUn0vY2cKLSAgICAgICAgKQotICAgICAgICBsaXN0KEFQUEVORCBEdW1w
UmVuZGVyVHJlZV9TT1VSQ0VTCi0gICAgICAgICAgICBjZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3Bw
Ci0gICAgICAgICkKLSAgICAgICAgbGlzdChBUFBFTkQgRHVtcFJlbmRlclRyZWVfTElCUkFSSUVT
Ci0gICAgICAgICAgICBDb3JlR3JhcGhpY3MKLSAgICAgICAgKQotICAgIGVuZGlmICgpCisgICAg
bGlzdChBUFBFTkQgRHVtcFJlbmRlclRyZWVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisg
ICAgICAgICR7RHVtcFJlbmRlclRyZWVfRElSfS9jZworICAgICkKKyAgICBsaXN0KEFQUEVORCBE
dW1wUmVuZGVyVHJlZV9TT1VSQ0VTCisgICAgICAgIGNnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAK
KyAgICApCisgICAgbGlzdChBUFBFTkQgRHVtcFJlbmRlclRyZWVfTElCUkFSSUVTCisgICAgICAg
IENvcmVHcmFwaGljcworICAgICkKIGVuZGlmICgpCiAKIFdFQktJVF9BRERfUFJFQ09NUElMRURf
SEVBREVSKCJEdW1wUmVuZGVyVHJlZVByZWZpeC5oIiAid2luL0R1bXBSZW5kZXJUcmVlUHJlZml4
LmNwcCIgRHVtcFJlbmRlclRyZWVfU09VUkNFUykKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9QaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAy
ODc4MTIpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydERpcmVj
dDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDgxICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnREaXJl
Y3QyRC5oIgotCi0jaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKLSNpbmNsdWRlICJQaXhlbER1
bXBTdXBwb3J0LmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0j
aW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
U3RyaW5nRXh0cmFzLmg+Ci0KLQotc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcg
PSBDRlNUUigicHVibGljLnBuZyIpOwotCi1JRDJEMUZhY3RvcnkqIHBpeGVsRHVtcFN5c3RlbUZh
Y3RvcnkoKQotewotICAgIHN0YXRpYyBJRDJEMUZhY3RvcnkqIGRpcmVjdDJERmFjdG9yeSA9IG51
bGxwdHI7Ci0gICAgaWYgKCFkaXJlY3QyREZhY3RvcnkpIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAg
ICAgIEQyRDFfRkFDVE9SWV9PUFRJT05TIG9wdGlvbnMgPSB7IH07Ci0gICAgICAgIG9wdGlvbnMu
ZGVidWdMZXZlbCA9IEQyRDFfREVCVUdfTEVWRUxfSU5GT1JNQVRJT047Ci0gICAgICAgIEhSRVNV
TFQgaHIgPSBEMkQxQ3JlYXRlRmFjdG9yeShEMkQxX0ZBQ1RPUllfVFlQRV9NVUxUSV9USFJFQURF
RCwgb3B0aW9ucywgJmRpcmVjdDJERmFjdG9yeSk7Ci0jZWxzZQotICAgICAgICBIUkVTVUxUIGhy
ID0gRDJEMUNyZWF0ZUZhY3RvcnkoRDJEMV9GQUNUT1JZX1RZUEVfTVVMVElfVEhSRUFERUQsICZk
aXJlY3QyREZhY3RvcnkpOwotI2VuZGlmCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURF
RChocikpOwotICAgIH0KLQotICAgIHJldHVybiBkaXJlY3QyREZhY3Rvcnk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHByaW50UE5HKElEMkQxQml0bWFwKiBpbWFnZSwgY29uc3QgY2hhciogY2hlY2tzdW0p
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGltYWdlKTsKLSAgICBVTlVTRURfUEFSQU0oY2hlY2tzdW0p
OwotICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KLX0KLQotdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJp
bmdGb3JCaXRtYXBDb250ZXh0KEJpdG1hcENvbnRleHQqIGNvbnRleHQsIGNoYXIgaGFzaFN0cmlu
Z1szM10pCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotICAgIFVOVVNFRF9QQVJBTSho
YXNoU3RyaW5nKTsKLSAgICAvLyBOb3QgaW1wbGVtZW50ZWQuCi19Ci0KLXZvaWQgZHVtcEJpdG1h
cChCaXRtYXBDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBjaGVja3N1bSkKLXsKLSAgICBf
Y29tX3B0cl90PF9jb21fSUlJRDxJRDJEMUJpdG1hcCwgJl9fdXVpZG9mKElEMkQxQml0bWFwKT4+
IGltYWdlOwotICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+R2V0
Qml0bWFwKCZpbWFnZSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBwcmludFBORyhpbWFnZS5HZXRJbnRlcmZhY2VQdHIoKSwgY2hlY2tzdW0pOwotfQpJ
bmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BpeGVsRHVtcFN1cHBvcnREaXJlY3QyRC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBwb3J0
RGlyZWN0MkQuaAkocmV2aXNpb24gMjg3ODEyKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L1BpeGVsRHVtcFN1cHBvcnREaXJlY3QyRC5oCShub25leGlzdGVudCkKQEAgLTEsNjQgKzAsMCBA
QAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8Y29t
aXAuaD4KLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLXR5cGVkZWYgSEJJVE1BUCBQbGF0Zm9ybUJpdG1h
cEJ1ZmZlcjsKLQotY2xhc3MgQml0bWFwQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEJpdG1h
cENvbnRleHQ+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEJpdG1hcENvbnRleHQ+IGNyZWF0
ZUJ5QWRvcHRpbmdCaXRtYXBBbmRDb250ZXh0KFBsYXRmb3JtQml0bWFwQnVmZmVyIGJ1ZmZlciwg
SUQyRDFSZW5kZXJUYXJnZXQqIGNvbnRleHQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBCaXRtYXBDb250ZXh0KGJ1ZmZlciwgY29udGV4dCkpOwotICAgIH0KLQotICAgIH5C
aXRtYXBDb250ZXh0KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2J1ZmZlcikKLSAgICAgICAgICAg
IERlbGV0ZU9iamVjdChtX2J1ZmZlcik7Ci0gICAgfQotCi0gICAgSUQyRDFCaXRtYXBSZW5kZXJU
YXJnZXQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5HZXRJbnRl
cmZhY2VQdHIoKTsgfQotCi1wcml2YXRlOgotICAgIEJpdG1hcENvbnRleHQoUGxhdGZvcm1CaXRt
YXBCdWZmZXIgYnVmZmVyLCBJRDJEMVJlbmRlclRhcmdldCogY29udGV4dCkKLSAgICAgICAgOiBt
X2J1ZmZlcihidWZmZXIpCi0gICAgICAgICwgbV9jb250ZXh0KGNvbnRleHQpCi0gICAgewotICAg
IH0KLQotICAgIFBsYXRmb3JtQml0bWFwQnVmZmVyIG1fYnVmZmVyOwotICAgIF9jb21fcHRyX3Q8
X2NvbV9JSUlEPElEMkQxQml0bWFwLCAmX191dWlkb2YoSUQyRDFCaXRtYXApPj4gbV9iaXRtYXA7
Ci0gICAgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQsICZfX3V1
aWRvZihJRDJEMUJpdG1hcFJlbmRlclRhcmdldCk+PiBtX2NvbnRleHQ7Ci19OwotCi1SZWZQdHI8
Qml0bWFwQ29udGV4dD4gY3JlYXRlQml0bWFwQ29udGV4dEZyb21XZWJWaWV3KGJvb2wgb25zY3Jl
ZW4sIGJvb2wgaW5jcmVtZW50YWxSZXBhaW50LCBib29sIHN3ZWVwSG9yaXpvbnRhbGx5LCBib29s
IGRyYXdTZWxlY3Rpb25SZWN0KTsKLUlEMkQxRmFjdG9yeSogcGl4ZWxEdW1wU3lzdGVtRmFjdG9y
eSgpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BpeGVsRHVtcFN1cHBvcnRXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBw
b3J0V2luLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L1BpeGVsRHVtcFN1cHBvcnRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw2IEBA
CiAjaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydENHLmgiCiAjZWxpZiBVU0UoQ0FJUk8pCiAjaW5j
bHVkZSAiUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5j
bHVkZSAiUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgIkR1
bXBSZW5kZXJUcmVlLmgiCkBAIC05NiwxOSArOTQsNiBAQCBSZWZQdHI8Qml0bWFwQ29udGV4dD4g
Y3JlYXRlQml0bWFwQ29udGV4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmZvLmJtV2lkdGgsIGluZm8uYm1IZWlnaHQsIGluZm8uYm1XaWR0
aEJ5dGVzKTsgCiAgICAgY2Fpcm9fdCogY29udGV4dCA9IGNhaXJvX2NyZWF0ZShpbWFnZSk7IAog
ICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShpbWFnZSk7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0g
ICAgYXV0byB0YXJnZXRQcm9wZXJ0aWVzID0gRDJEMTo6UmVuZGVyVGFyZ2V0UHJvcGVydGllcygp
OwotICAgIHRhcmdldFByb3BlcnRpZXMucGl4ZWxGb3JtYXQgPSBEMkQxOjpQaXhlbEZvcm1hdChE
WEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSwgRDJEMV9BTFBIQV9NT0RFX0lHTk9SRSk7Ci0KLSAg
ICBDT01QdHI8SUQyRDFEQ1JlbmRlclRhcmdldD4gcmVuZGVyVGFyZ2V0OwotICAgIEhSRVNVTFQg
aHIgPSBwaXhlbER1bXBTeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZURDUmVuZGVyVGFyZ2V0KCZ0YXJn
ZXRQcm9wZXJ0aWVzLCAmcmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaHIgPSByZW5kZXJUYXJnZXQtPkJpbmREQyht
ZW1vcnlEQy5nZXQoKSwgJmZyYW1lKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIGF1dG8gY29udGV4dCA9IHJlbmRlclRhcmdldC5nZXQoKTsK
ICNlbmRpZiAKIAogICAgIHJldHVybiBCaXRtYXBDb250ZXh0OjpjcmVhdGVCeUFkb3B0aW5nQml0
bWFwQW5kQ29udGV4dChiaXRtYXAsIFdURk1vdmUoY29udGV4dCkpOwpJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtRlRXLmNtYWtlCShub25leGlzdGVudCkKQEAgLTEs
NDAgKzAsMCBAQAotbGlzdChBUFBFTkQgV2ViS2l0VGVzdFJ1bm5lcl9TT1VSQ0VTCi0gICAgd2lu
L0V2ZW50U2VuZGVyUHJveHlXaW4uY3BwCi0gICAgd2luL1BsYXRmb3JtV2ViVmlld1dpbi5jcHAK
LSAgICB3aW4vVGVzdENvbnRyb2xsZXJXaW4uY3BwCi0gICAgd2luL1Rlc3RJbnZvY2F0aW9uRGly
ZWN0MkQuY3BwCi0gICAgd2luL1VJU2NyaXB0Q29udHJvbGxlcldpbi5jcHAKLSAgICB3aW4vbWFp
bi5jcHAKLSkKLQotc2V0KHdyYXBwZXJfREVGSU5JVElPTlMKLSAgICBVU0VfQ09OU09MRV9FTlRS
WV9QT0lOVAotICAgIFdJTl9DQUlSTwotKQotCi1saXN0KEFQUEVORCBXZWJLaXRUZXN0UnVubmVy
SW5qZWN0ZWRCdW5kbGVfU09VUkNFUwotICAgIEluamVjdGVkQnVuZGxlL3dpbi9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlcldpbi5jcHAKLSAgICBJbmplY3RlZEJ1bmRsZS93aW4vQWNjZXNzaWJpbGl0
eVVJRWxlbWVudFdpbi5jcHAKLSAgICBJbmplY3RlZEJ1bmRsZS93aW4vQWN0aXZhdGVGb250c1dp
bi5jcHAKLSAgICBJbmplY3RlZEJ1bmRsZS93aW4vSW5qZWN0ZWRCdW5kbGVXaW4uY3BwCi0gICAg
SW5qZWN0ZWRCdW5kbGUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwCi0pCi0KLWxpc3QoQVBQRU5EIFdl
YktpdFRlc3RSdW5uZXJfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICR7V2ViS2l0VGVzdFJ1bm5l
cl9ESVJ9L0luamVjdGVkQnVuZGxlL3dpbgotKQotCi1saXN0KEFQUEVORCBXZWJLaXRUZXN0UnVu
bmVyX0xJQlJBUklFUwotICAgIENvbXN1cHB3Ci0gICAgT2xlYWNjCi0pCi0KLVdFQktJVF9BRERf
UFJFQ09NUElMRURfSEVBREVSKCJXZWJLaXRUZXN0UnVubmVyUHJlZml4LmgiICJ3aW4vV2ViS2l0
VGVzdFJ1bm5lclByZWZpeC5jcHAiIFdlYktpdFRlc3RSdW5uZXJfU09VUkNFUykKLQotc2V0KENN
QUtFX1NIQVJFRF9MSU5LRVJfRkxBR1MgIiR7Q01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU30gJHtN
U1ZDX1JVTlRJTUVfTElOS0VSX0ZMQUdTfSIpCi0KLVdFQktJVF9XUkFQX0VYRUNVVEFCTEUoV2Vi
S2l0VGVzdFJ1bm5lcgotICAgIFNPVVJDRVMgJHtUT09MU19ESVJ9L3dpbi9ETExMYXVuY2hlci9E
TExMYXVuY2hlck1haW4uY3BwCi0gICAgTElCUkFSSUVTIHNobHdhcGkKLSkKLXRhcmdldF9jb21w
aWxlX2RlZmluaXRpb25zKFdlYktpdFRlc3RSdW5uZXIgUFJJVkFURSAke3dyYXBwZXJfREVGSU5J
VElPTlN9KQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCShy
ZXZpc2lvbiAyODc4MTIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmll
dy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMSArNTQsNyBAQCBjbGFzcyBIZWFkbGVzc1ZpZXdC
YWNrZW5kOwogdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1ZpZXc7CiB0eXBlZGVmIFdQRVRv
b2xpbmdCYWNrZW5kczo6SGVhZGxlc3NWaWV3QmFja2VuZCogUGxhdGZvcm1XaW5kb3c7CiAjZWxp
ZiBQTEFURk9STShXSU4pCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPGQyZDFfMS5oPgot
I2Vsc2UKICNpbmNsdWRlIDxjYWlyby5oPgotI2VuZGlmCiBjbGFzcyBUZXN0UnVubmVyV2luZG93
OwogdHlwZWRlZiBIV05EIFBsYXRmb3JtV2luZG93OwogdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZv
cm1XS1ZpZXc7CkBAIC02NiwxMCArNjIsNiBAQCB0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdL
VmlldzsKIAogI2lmIFVTRShDQUlSTykKIHR5cGVkZWYgY2Fpcm9fc3VyZmFjZV90KiBQbGF0Zm9y
bUltYWdlOwotI2VsaWYgVVNFKERJUkVDVDJEKQotaW50ZXJmYWNlIElEMkQxQml0bWFwOwotCi10
eXBlZGVmIElEMkQxQml0bWFwKiBQbGF0Zm9ybUltYWdlOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBX
VFIgewpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZVBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQv
Y2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oPgogI2VuZGlmCiAKLSNpZiBVU0UoQ0YpICYmICFQTEFU
Rk9STShXSU5fQ0FJUk8pICYmICFVU0UoRElSRUNUMkQpCisjaWYgVVNFKENGKSAmJiAhUExBVEZP
Uk0oV0lOX0NBSVJPKQogI2luY2x1ZGUgIldlYkFyY2hpdmVEdW1wU3VwcG9ydC5oIgogI2VuZGlm
CiAKQEAgLTc4MCw3ICs3ODAsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEFsbEZy
YW1lc1RlCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wRE9NQXNXZWJBcmNoaXZlKFdL
QnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7Ci0j
aWYgVVNFKENGKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKSAmJiAhVVNFKERJUkVDVDJEKQorI2lm
IFVTRShDRikgJiYgIVBMQVRGT1JNKFdJTl9DQUlSTykKICAgICBhdXRvIHdrRGF0YSA9IGFkb3B0
V0soV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlKGZyYW1lKSk7CiAgICAgYXV0byBjZkRhdGEg
PSBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCBXS0RhdGFHZXRCeXRlcyh3a0RhdGEuZ2V0KCkpLCBX
S0RhdGFHZXRTaXplKHdrRGF0YS5nZXQoKSkpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChX
ZWJDb3JlVGVzdFN1cHBvcnQ6OmNyZWF0ZVhNTFN0cmluZ0Zyb21XZWJBcmNoaXZlRGF0YShjZkRh
dGEuZ2V0KCkpLmdldCgpKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1BsYXRm
b3JtV2ViVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93
aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci93aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzksMTAgKzM5LDYgQEAKICNpbmNsdWRlIDxjYWlyby5oPgogI2VuZGlmCiAKLSNpZiBVU0Uo
RElSRUNUMkQpCi0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdUUiB7
CiAKIHN0YXRpYyBMUENXU1RSIGhvc3RXaW5kb3dDbGFzc05hbWUgPSBMIldUUldlYlZpZXdIb3N0
V2luZG93IjsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1Rlc3RJbnZvY2F0aW9u
RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1Rl
c3RJbnZvY2F0aW9uRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL3dpbi9UZXN0SW52b2NhdGlvbkRpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQp
CkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgICAgICAgICAgKEMpIDIwMTEgQnJlbnQgRnVs
Z2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgICAg
ICAgICAgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMuTAotICogICAgICAgICAgIChDKSAyMDEyIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEludm9jYXRpb24uaCIKLQotI2luY2x1ZGUgIlBp
eGVsRHVtcFN1cHBvcnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKLSNpbmNsdWRl
ICJUZXN0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4K
LSNpbmNsdWRlIDxjc3RkaW8+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRl
IDx3dGYvU3RyaW5nRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXVFIgewotCi0KLXZvaWQgVGVzdElu
dm9jYXRpb246OmR1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKFNuYXBzaG90UmVzdWx0
VHlwZSwgV0tBcnJheVJlZiAvKiByZXBhaW50UmVjdHMgKi8sIFdLSW1hZ2VSZWYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RSCg==
</data>
<flag name="commit-queue"
          id="474600"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448675</attachid>
            <date>2022-01-08 11:13:14 -0800</date>
            <delta_ts>2022-01-08 17:29:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234999-20220108111312.patch</filename>
            <type>text/plain</type>
            <size>484437</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI4Nzgx
MikKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAx
LTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3Vw
cG9ydCBmb3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2U6IFJlbW92ZWQuCisKIDIw
MjItMDEtMDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI4NzY5OC4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAxLTA3ICBTYW0g
V2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3Ig
RGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIFNhYW0gQmFyYXRp
ICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQXBwZWFzZSBhbiBh
c3NlcnRpb24gdGhhdCB3YXMgYnJva2VuIGJ5IHIyODc4MDEgYnkgc2xpZ2h0bHkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1GVFcuY21ha2UJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBA
IC0xLDQ0ICswLDAgQEAKLWxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKLSAgICBB
UEkvSlNTdHJpbmdSZWZCU1RSLmNwcAotKQotCi1saXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9Q
VUJMSUNfRlJBTUVXT1JLX0hFQURFUlMKLSAgICBBUEkvSlNTdHJpbmdSZWZCU1RSLmgKLSAgICBB
UEkvSmF2YVNjcmlwdENvcmUuaAotKQotCi1pZiAoVVNFX0NGKQotICAgIGxpc3QoQVBQRU5EIEph
dmFTY3JpcHRDb3JlX1NPVVJDRVMKLSAgICAgICAgQVBJL0pTU3RyaW5nUmVmQ0YuY3BwCi0gICAg
KQotCi0gICAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfUFVCTElDX0ZSQU1FV09SS19IRUFE
RVJTCi0gICAgICAgIEFQSS9KU1N0cmluZ1JlZkNGLmgKLSAgICApCi0KLSAgICBsaXN0KEFQUEVO
RCBKYXZhU2NyaXB0Q29yZV9MSUJSQVJJRVMKLSAgICAgICAgJHtDT1JFRk9VTkRBVElPTl9MSUJS
QVJZfQotICAgICkKLWVuZGlmICgpCi0KLWlmIChOT1QgV1RGX1BMQVRGT1JNX1dJTl9DQUlSTykK
LSAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9MSUJSQVJJRVMKLSAgICAgICAgd2lubW0K
LSAgICApCi1lbmRpZiAoKQotCi1pZiAoRU5BQkxFX1JFTU9URV9JTlNQRUNUT1IpCi0gICAgaW5j
bHVkZShpbnBzZWN0b3IvcmVtb3RlL1NvY2tldC5jbWFrZSkKLWVsc2UgKCkKLSAgICBsaXN0KFJF
TU9WRV9JVEVNIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKLSAgICAgICAgaW5zcGVjdG9yL0pTR2xv
YmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKLSAgICApCi1lbmRpZiAoKQotCi1maWxl
KENPUFkKLSAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUucmVzb3VyY2VzIgotICAgIERFU1RJTkFUSU9OCi0gICAgJHtDTUFLRV9S
VU5USU1FX09VVFBVVF9ESVJFQ1RPUll9Ci0pCi0KLXNldChKYXZhU2NyaXB0Q29yZV9PVVRQVVRf
TkFNRSBKYXZhU2NyaXB0Q29yZSR7REVCVUdfU1VGRklYfSkKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAxLTA3ICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBm
b3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCByZXZlcnRpbmcgcjI4NzY5OC4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL1BsYXRm
b3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL1BsYXRm
b3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDM1ICswLDAgQEAKLSMgV2Un
cmUgdGFyZ2V0aW5nIFdpbmRvd3MgMTAgd2hpY2ggd2lsbCBoYXZlIERpcmVjdFggMTEgb24gaXQg
c28gcmVxdWlyZSB0aGF0Ci0jIGJ1dCBtYWtlIERpcmVjdFggOSBvcHRpb25hbAotCi1saXN0KEFQ
UEVORCBBTkdMRV9ERUZJTklUSU9OUwotICAgIEdMX0FQSUNBTEw9Ci0gICAgR0xfQVBJPQotICAg
IE5PTUlOTUFYCi0pCi0KLSMgV2UncmUgdGFyZ2V0aW5nIFdpbmRvd3MgMTAgd2hpY2ggd2lsbCBo
YXZlIERpcmVjdFggMTEKLWxpc3QoQVBQRU5EIEFOR0xFX1NPVVJDRVMKLSAgICAke19kM2QxMV9i
YWNrZW5kX3NvdXJjZXN9Ci0gICAgJHtfZDNkX3NoYXJlZF9zb3VyY2VzfQotCi0gICAgJHthbmds
ZV90cmFuc2xhdG9yX2hsc2xfc291cmNlc30KLQotICAgICR7bGliYW5nbGVfZ3B1X2luZm9fdXRp
bF9zb3VyY2VzfQotICAgICR7bGliYW5nbGVfZ3B1X2luZm9fdXRpbF93aW5fc291cmNlc30KLSkK
LQotbGlzdChBUFBFTkQgQU5HTEVfREVGSU5JVElPTlMKLSAgICBBTkdMRV9FTkFCTEVfRDNEMTEK
LSAgICBBTkdMRV9FTkFCTEVfSExTTAotKQotCi1saXN0KEFQUEVORCBBTkdMRUdMRVN2Ml9MSUJS
QVJJRVMgZHhndWlkIGR4Z2kpCi0KLSMgRGlyZWN0WCA5IHN1cHBvcnQgc2hvdWxkIGJlIG9wdGlv
bmFsIGJ1dCBBTkdMRSB3aWxsIG5vdCBjb21waWxlIHdpdGhvdXQgaXQKLWxpc3QoQVBQRU5EIEFO
R0xFX1NPVVJDRVMgJHtfZDNkOV9iYWNrZW5kX3NvdXJjZXN9KQotbGlzdChBUFBFTkQgQU5HTEVf
REVGSU5JVElPTlMgQU5HTEVfRU5BQkxFX0QzRDkpCi1saXN0KEFQUEVORCBBTkdMRUdMRVN2Ml9M
SUJSQVJJRVMgZDNkOSkKLQotIyBVc2Ugc2hhcmVkIGxpYnJhcmllcwotc2V0KEdMRVN2Ml9MSUJS
QVJZX1RZUEUgU0hBUkVEKQotc2V0KEVHTF9MSUJSQVJZX1RZUEUgU0hBUkVEKQpJbmRleDogU291
cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMjItMDEtMDcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29t
PgorCisgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBEaXJlY3QyRAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0OTk5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1GVFcuY21ha2U6
IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRvcHQgbGlua2VkT25PckFmdGVyKCkgaW4gbW9yZSBwbGFjZXMK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDYxICswLDAg
QEAKLWxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwotICAgIHRleHQvd2luL1dDaGFyU3Ry
aW5nRXh0cmFzLmgKLQotICAgIHdpbi9EYmdIZWxwZXJXaW4uaAotICAgIHdpbi9HRElPYmplY3Qu
aAotICAgIHdpbi9Tb2Z0TGlua2luZy5oCi0gICAgd2luL1dpbjMySGFuZGxlLmgKLSkKLQotbGlz
dChBUFBFTkQgV1RGX1BSSVZBVEVfTElCUkFSSUVTCi0gICAgRGJnaGVscCAjIEZvciBzeW1ib2wg
aGFuZGxpbmcgPGRiZ2hlbHAuaD4KLSAgICBTaGx3YXBpICMgRm9yIGZpbGUgc3lzdGVtIG9wZXJh
dGlvbnMgPHNobHdhcGkuaD4KLSkKLQotbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwotICAgICBX
aW5tbSAjIEZvciBtdWx0aW1lZGlhIGZ1bmN0aW9ucywgYWxzbyB1c2VkIGluIDx0aW1lYXBpLmg+
Ci0pCi0KLWxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCi0gICAgdGV4dC93aW4vU3RyaW5nV2luLmNw
cAotICAgIHRleHQvd2luL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VXaW4uY3BwCi0KLSAg
ICB3aW4vQ1BVVGltZVdpbi5jcHAKLSAgICB3aW4vRGJnSGVscGVyV2luLmNwcAotICAgIHdpbi9G
aWxlU3lzdGVtV2luLmNwcAotICAgIHdpbi9MYW5ndWFnZVdpbi5jcHAKLSAgICB3aW4vTG9nZ2lu
Z1dpbi5jcHAKLSAgICB3aW4vTWFpblRocmVhZFdpbi5jcHAKLSAgICB3aW4vTWVtb3J5Rm9vdHBy
aW50V2luLmNwcAotICAgIHdpbi9NZW1vcnlQcmVzc3VyZUhhbmRsZXJXaW4uY3BwCi0gICAgd2lu
L09TQWxsb2NhdG9yV2luLmNwcAotICAgIHdpbi9QYXRoV2Fsa2VyLmNwcAotICAgIHdpbi9SdW5M
b29wV2luLmNwcAotICAgIHdpbi9UaHJlYWRpbmdXaW4uY3BwCi0gICAgd2luL1dvcmtRdWV1ZVdp
bi5jcHAKLSkKLQotaWYgKFVTRV9DRikKLSAgICBsaXN0KEFQUEVORCBXVEZfUFVCTElDX0hFQURF
UlMKLSAgICAgICAgY2YvQ0ZVUkxFeHRyYXMuaAotICAgICAgICBjZi9TcGFuQ0YuaAotICAgICAg
ICBjZi9UeXBlQ2FzdHNDRi5oCi0KLSAgICAgICAgdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNG
LmgKLSAgICAgICAgdGV4dC9jZi9UZXh0QnJlYWtJdGVyYXRvckNGLmgKLSAgICApCi0gICAgbGlz
dChBUFBFTkQgV1RGX1NPVVJDRVMKLSAgICAgICAgY2YvQ0ZVUkxFeHRyYXMuY3BwCi0gICAgICAg
IGNmL0ZpbGVTeXN0ZW1DRi5jcHAKLSAgICAgICAgY2YvVVJMQ0YuY3BwCi0KLSAgICAgICAgdGV4
dC9jZi9BdG9tU3RyaW5nSW1wbENGLmNwcAotICAgICAgICB0ZXh0L2NmL1N0cmluZ0NGLmNwcAot
ICAgICAgICB0ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAKLSAgICAgICAgdGV4dC9jZi9TdHJpbmdW
aWV3Q0YuY3BwCi0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUyAke0NPUkVG
T1VOREFUSU9OX0xJQlJBUll9KQotZW5kaWYgKCkKLQotc2V0KFdURl9PVVRQVVRfTkFNRSBXVEYk
e0RFQlVHX1NVRkZJWH0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMzQgQEAKKzIw
MjItMDEtMDcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92
ZSBzdXBwb3J0IGZvciBEaXJlY3QyRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM0OTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9y
bUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtRlRXLmNtYWtlOiBSZW1vdmVkLgor
ICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUYuY3BwOgorICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01lZGlhQUYuaDoKKyAgICAgICAgKiBwYWdlL3dpbi9GcmFtZVdpbkRpcmVjdDJELmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmNyZWF0ZU1JTUVUeXBlUmVnaXN0cnlUaHJl
YWRHbG9iYWxEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4
Q2FjaGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpwcmVUcmFuc2Zvcm1lZE5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJh
dyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
ZHdGb250IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmR3Rm9udEZhY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYWRpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OnByZVRy
YW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzdXBwb3J0c01lZGlhVHlwZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OnNldFRhcmdldENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdy
YXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGF0aDo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBhdGg6OmFkZFJvdW5kZWRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRo
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vY2YvQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbkNGLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNETVNlc3Npb25BVkZvdW5kYXRpb25DRjo6Z2VuZXJhdGVLZXlSZXF1ZXN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50
SW1hZ2U6OmRyYXdQREZQYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T3BlblR5
cGVNYXRoRGF0YTo6T3BlblR5cGVNYXRoRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVu
YW1lQW5kQWN0aXZhdGVGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Qml0bWFwVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjp1cGRh
dGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRl
eHR1cmVHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNv
bnRlbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFj
a2VuZERpcmVjdDJELmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4
dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGll
cy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJE
VXRpbGl0aWVzLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Rp
cmVjdFdyaXRlVXRpbGl0aWVzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFNpemVEaXJlY3QyRC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGly
ZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0
Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250UGxhdGZvcm1EYXRhRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dFdpbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dFdpbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGly
ZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0xheWVyRGlyZWN0MkQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3Qy
RC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVj
b2RlckRpcmVjdDJELmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9OYXRpdmVJbWFnZURpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVG
b250RGF0YURpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VEaXJlY3QyRC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRl
ckVmZmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZl
SW1hZ2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5oOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5oOgorCiAyMDIyLTAxLTA4ICBH
YWJyaWVsIE5hdmEgTWFyaW5vICA8Z25hdmFtYXJpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIG51
bGwgcHRyIGRlcmVmIGluIFdlYkNvcmU6Ok1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6
OmFwcGVuZFNpYmxpbmdOb2RlUmFuZ2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBw
bGVXaW4uY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdp
bi5jbWFrZQkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBs
ZVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtNzEsMTI5ICs3MSwxMDIgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRQogICAgIHBsYXRmb3JtL25ldHdvcmsvY2Yv
U29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCiApCiAKLWlmICgke1VTRV9ESVJFQ1QyRH0pCi0gICAg
bGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3dpbiIKLSAgICApCi0KLSAgICBsaXN0
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAgcGFnZS93aW4vRnJhbWVXaW5EaXJlY3Qy
RC5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3Qy
RC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJl
Y3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2Rl
RGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVj
dDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGly
ZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2Rl
ckRpcmVjdDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3Qy
RC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQu
Y3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3BwCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVjdDJELmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcAotCi0gICAgICAgIHBs
YXRmb3JtL3dpbi9EcmFnSW1hZ2VEaXJlY3QyRC5jcHAKLSAgICApCi1lbHNlICgpCi0gICAgbGlz
dChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbiIKLSAgICAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZiIKLSAgICAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2NhIgotICAgICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luIgotICAgICAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3MvY2ciCi0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCi0gICAgICAgIHBhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCi0KLSAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9MYXllclBvb2wuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRm
b3JtQ0FMYXllci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUNvbnRyb2xs
ZXIuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5jcHAK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuY3BwCi0gICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0EuY3BwCi0KLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vTGF5ZXJDaGFuZ2VzRmx1c2hlci5jcHAKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBRmlsdGVyc1dpbi5jcHAKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNw
cAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV0tDQUNGVmlld0xheWVyVHJlZUhv
c3QuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdM
YXllcldpbi5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNlQ0cuY3BwCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zs
b2F0U2l6ZUNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNw
cAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuY3BwCi0g
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCi0gICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlU291cmNlQ0dXaW4uY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ludFBvaW50Q0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFJlY3RD
Ry5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50U2l6ZUNHLmNwcAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5D
Ry5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1l
ci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhD
Ry5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwCi0KLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENvcmVUZXh0LmNwcAotICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQu
Y3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0dseXBoUGFnZUNvcmVUZXh0
LmNwcAotCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlQ0cuY3Bw
Ci0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vd2lu
L0RyYWdJbWFnZUNHV2luLmNwcAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBREVSUwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFw
aGljc0xheWVyQ0EuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuaAot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmgKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUZpbHRlcnMuaAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9UaWxlQ29udHJvbGxlci5oCi0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2lu
L0Fic3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93
aW4vQ0FDRkxheWVyVHJlZUhvc3RDbGllbnQuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9Db2xvclNwYWNlQ0cuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJl
bmRlcmVyQ0cuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5oCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCi0gICAgKQotZW5kaWYgKCkKK2xpc3QoQVBQRU5E
IFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbiIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9ncmFwaGljcy9jYSIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jZyIKKykKKwor
bGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAK
KworICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
UGxhdGZvcm1DQUxheWVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb250cm9s
bGVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlR3JpZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9UcmFuc2Zvcm1hdGlvbk1hdHJpeENBLmNwcAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9MYXllckNoYW5nZXNGbHVzaGVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9Q
bGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9Q
bGF0Zm9ybUNBRmlsdGVyc1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV0tD
QUNGVmlld0xheWVyVHJlZUhvc3QuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dl
YlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29s
b3JDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNlQ0cuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0Zsb2F0UmVjdENHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6
ZUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJm
YWNlUG9vbC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ludFBvaW50Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UmVjdENH
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFNpemVDRy5jcHAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BERkRvY3VtZW50SW1hZ2UuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvVVRJUmVnaXN0cnkuY3BwCisKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250
Q2FzY2FkZUNvcmVUZXh0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRD
b3JlVGV4dC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250UGxhdGZvcm1E
YXRhQ29yZVRleHQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdl
Q29yZVRleHQuY3BwCisKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZUNH
LmNwcAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxl
Rm9udERhdGFDR1dpbi5jcHAKKworICAgIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAK
KykKKworbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9MYXllclBvb2wuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FB
bmltYXRpb24uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllckNsaWVudC5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvVGlsZUNvbnRyb2xsZXIuaAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0Fi
c3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9D
QUNGTGF5ZXJUcmVlSG9zdC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXll
clRyZWVIb3N0Q2xpZW50LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUxheWVyV2luLmgKKworICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yU3BhY2VDRy5oCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSU9TdXJmYWNlUG9vbC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKKykKIAogaWYgKENNQUtFX1NJWkVPRl9WT0lE
X1AgRVFVQUwgNCkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMgJHtXZWJDb3JlX0RF
UklWRURfU09VUkNFU19ESVJ9L21ha2VzYWZlc2VoLm9iaikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZU
Vy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDI1MyArMCwwIEBACi1pbmNsdWRlKHBsYXRmb3Jt
L0N1cmwuY21ha2UpCi1pZiAoTk9UIEFQUExFX0JVSUxEKQotICAgIGluY2x1ZGUocGxhdGZvcm0v
SW1hZ2VEZWNvZGVycy5jbWFrZSkKLWVuZGlmICgpCi1pbmNsdWRlKHBsYXRmb3JtL09wZW5TU0wu
Y21ha2UpCi1pbmNsdWRlKHBsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UpCi0KLWxpc3QoQVBQ
RU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgIiR7RGlyZWN0WF9J
TkNMVURFX0RJUlN9IgotICAgICIke1dFQktJVF9MSUJSQVJJRVNfRElSfS9pbmNsdWRlIgotICAg
ICIke1dFQkNPUkVfRElSfS9hY2Nlc3NpYmlsaXR5L3dpbiIKLSAgICAiJHtXRUJDT1JFX0RJUn0v
cGFnZS93aW4iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2VnbCIKLSAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsIgotICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZSIKLSAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luIgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRp
YWNhcGFiaWxpdGllcyIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay93aW4i
Ci0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3dpbiIKLSkKLQotbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCi0gICAgYWNjZXNzaWJpbGl0eS93aW4vQVhPYmplY3RDYWNoZVdpbi5jcHAK
LSAgICBhY2Nlc3NpYmlsaXR5L3dpbi9BY2Nlc3NpYmlsaXR5T2JqZWN0V2luLmNwcAotICAgIGFj
Y2Vzc2liaWxpdHkvd2luL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyV2luLmNwcAotCi0gICAg
ZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcAotCi0gICAgaHRtbC9IVE1MU2VsZWN0RWxlbWVudFdp
bi5jcHAKLQotICAgIHBhZ2Uvd2luL0RyYWdDb250cm9sbGVyV2luLmNwcAotICAgIHBhZ2Uvd2lu
L0V2ZW50SGFuZGxlcldpbi5jcHAKLSAgICBwYWdlL3dpbi9GcmFtZVdpbi5jcHAKLSAgICBwYWdl
L3dpbi9GcmFtZVdpbkRpcmVjdDJELmNwcAotCi0gICAgcGxhdGZvcm0vQ3Vyc29yLmNwcAotICAg
IHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuY3BwCi0gICAgcGxhdGZvcm0vU3RhdGljUGFzdGVi
b2FyZC5jcHAKLQotICAgIHBsYXRmb3JtL2F1ZGlvL1BsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdl
ci5jcHAKLQotICAgIHBsYXRmb3JtL2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAKLSAg
ICBwbGF0Zm9ybS9nZW5lcmljL0tleWVkRW5jb2RlckdlbmVyaWMuY3BwCi0KLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9HTENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1E
aXNwbGF5LmNwcAotCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAK
LQotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcAot
Ci0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRElt
cGwuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlckRpcmVjdFdyaXRlLmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9h
dFBvaW50RGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UmVjdERp
cmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFNpemVEaXJlY3QyRC5j
cHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250RGVzY3JpcHRpb25XaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdp
bi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVEaXJlY3Qy
RC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlRGVjb2RlckRpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURp
cmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZVdpbi5jcHAKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW50UG9pbnRXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ludFJlY3RXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFNpemVX
aW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJl
Y3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
VGV4dEFuYWx5emVySGVscGVyLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFuc2Zv
cm1hdGlvbk1hdHJpeERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFu
c2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAKLQotICAgIHBsYXRmb3JtL25ldHdvcmsvd2luL0N1cmxT
U0xIYW5kbGVXaW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93aW4vRG93bmxvYWRCdW5kbGVX
aW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93aW4vTmV0d29ya1N0YXRlTm90aWZpZXJXaW4u
Y3BwCi0KLSAgICBwbGF0Zm9ybS90ZXh0L0h5cGhlbmF0aW9uLmNwcAotICAgIHBsYXRmb3JtL3Rl
eHQvd2luL0xvY2FsZVdpbi5jcHAKLQotICAgIHBsYXRmb3JtL3dpbi9CU3RyaW5nLmNwcAotICAg
IHBsYXRmb3JtL3dpbi9CaXRtYXBJbmZvLmNwcAotICAgIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRV
dGlsaXRpZXNXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL0N1cnNvcldpbi5jcHAKLSAgICBwbGF0
Zm9ybS93aW4vRGVmV25kUHJvY1dpbmRvd0NsYXNzLmNwcAotICAgIHBsYXRmb3JtL3dpbi9EZWxh
eUxvYWRlZE1vZHVsZXNFbnVtZXJhdG9yLmNwcAotICAgIHBsYXRmb3JtL3dpbi9EcmFnRGF0YVdp
bi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlRGlyZWN0MkQuY3BwCi0gICAgcGxhdGZv
cm0vd2luL0RyYWdJbWFnZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vR0RJT2JqZWN0Q291bnRl
ci5jcHAKLSAgICBwbGF0Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmNwcAotICAgIHBsYXRmb3JtL3dp
bi9JbXBvcnRlZEZ1bmN0aW9uc0VudW1lcmF0b3IuY3BwCi0gICAgcGxhdGZvcm0vd2luL0ltcG9y
dGVkTW9kdWxlc0VudW1lcmF0b3IuY3BwCi0gICAgcGxhdGZvcm0vd2luL0tleUV2ZW50V2luLmNw
cAotICAgIHBsYXRmb3JtL3dpbi9Mb2NhbGl6ZWRTdHJpbmdzV2luLmNwcAotICAgIHBsYXRmb3Jt
L3dpbi9Mb2dnaW5nV2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9NSU1FVHlwZVJlZ2lzdHJ5V2lu
LmNwcAotICAgIHBsYXRmb3JtL3dpbi9NYWluVGhyZWFkU2hhcmVkVGltZXJXaW4uY3BwCi0gICAg
cGxhdGZvcm0vd2luL1BFSW1hZ2UuY3BwCi0gICAgcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4u
Y3BwCi0gICAgcGxhdGZvcm0vd2luL1BsYXRmb3JtTW91c2VFdmVudFdpbi5jcHAKLSAgICBwbGF0
Zm9ybS93aW4vUGxhdGZvcm1TY3JlZW5XaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1BvcHVwTWVu
dVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJhdG9yV2luLmNwcAotICAgIHBs
YXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vU2VhcmNo
UG9wdXBNZW51REIuY3BwCi0gICAgcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudVdpbi5jcHAK
LSAgICBwbGF0Zm9ybS93aW4vU3RydWN0dXJlZEV4Y2VwdGlvbkhhbmRsZXJTdXBwcmVzc29yLmNw
cAotICAgIHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcAotICAgIHBsYXRmb3JtL3dpbi9Vc2Vy
QWdlbnRXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAKLSAgICBwbGF0
Zm9ybS93aW4vV2ViQ29yZUJ1bmRsZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZUlu
c3RhbmNlSGFuZGxlLmNwcAotICAgIHBsYXRmb3JtL3dpbi9XZWJDb3JlVGV4dFJlbmRlcmVyLmNw
cAotICAgIHBsYXRmb3JtL3dpbi9XaGVlbEV2ZW50V2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9X
aWRnZXRXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5j
cHAKLQotICAgIHJlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKLSkKLQotaWYgKFVTRV9DRikK
LSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUwotICAg
ICAgICAiJHtXRUJDT1JFX0RJUn0vbG9hZGVyL2FyY2hpdmUvY2YiCi0gICAgICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9jZiIKLSAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2Nm
L3dpbiIKLSAgICApCi0KLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAg
ZWRpdGluZy9TbWFydFJlcGxhY2VDRi5jcHAKLQotICAgICAgICBsb2FkZXIvYXJjaGl2ZS9jZi9M
ZWdhY3lXZWJBcmNoaXZlLmNwcAotCi0gICAgICAgIHBsYXRmb3JtL2NmL0tleWVkRGVjb2RlckNG
LmNwcAotICAgICAgICBwbGF0Zm9ybS9jZi9LZXllZEVuY29kZXJDRi5jcHAKLSAgICAgICAgcGxh
dGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vY2Yvd2luL0Nl
cnRpZmljYXRlQ0ZXaW4uY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vdGV4dC9jZi9IeXBoZW5hdGlv
bkNGLmNwcAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwotICAgICAgICBsb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmgK
LQotICAgICAgICBwbGF0Zm9ybS9jZi93aW4vQ2VydGlmaWNhdGVDRldpbi5oCi0gICAgKQotCi0g
ICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMgJHtDT1JFRk9VTkRBVElPTl9MSUJSQVJZ
fSkKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlVGVzdFN1cHBvcnRfTElCUkFSSUVTICR7Q09SRUZP
VU5EQVRJT05fTElCUkFSWX0pCi1lbHNlICgpCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCi0gICAgICAgIHBsYXRmb3JtL3RleHQvSHlwaGVuYXRpb24uY3BwCi0gICAgKQotZW5kaWYg
KCkKLQotbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCi0gICAg
YWNjZXNzaWJpbGl0eS93aW4vQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJXaW4uaAotCi0gICAg
cGFnZS93aW4vRnJhbWVXaW4uaAotCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyREltcGwuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQ
aXhlbERhdGEuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMu
aAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5oCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmgKLSAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dFdpbi5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
RGVjb2RlckRpcmVjdDJELmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxXaW5kb3dz
Q29udGV4dC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1
bGxzY3JlZW5XaW5kb3cuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NoYXJlZEdESU9iamVjdC5o
Ci0KLSAgICBwbGF0Zm9ybS93aW4vQlN0cmluZy5oCi0gICAgcGxhdGZvcm0vd2luL0JpdG1hcElu
Zm8uaAotICAgIHBsYXRmb3JtL3dpbi9DT01QdHIuaAotICAgIHBsYXRmb3JtL3dpbi9EZWZXbmRQ
cm9jV2luZG93Q2xhc3MuaAotICAgIHBsYXRmb3JtL3dpbi9HRElPYmplY3RDb3VudGVyLmgKLSAg
ICBwbGF0Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmgKLSAgICBwbGF0Zm9ybS93aW4vSFduZERDLmgK
LSAgICBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmgKLSAgICBwbGF0Zm9ybS93aW4vU2Nyb2xs
YmFyVGhlbWVXaW4uaAotICAgIHBsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVEQi5oCi0gICAg
cGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudVdpbi5oCi0gICAgcGxhdGZvcm0vd2luL1N5c3Rl
bUluZm8uaAotICAgIHBsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuaAotICAgIHBsYXRmb3JtL3dp
bi9XZWJDb3JlQnVuZGxlV2luLmgKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZUluc3RhbmNlSGFu
ZGxlLmgKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZVRleHRSZW5kZXJlci5oCi0gICAgcGxhdGZv
cm0vd2luL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5oCi0gICAgcGxhdGZvcm0vd2luL1dpbmRv
d01lc3NhZ2VMaXN0ZW5lci5oCi0gICAgcGxhdGZvcm0vd2luL1dpbmRvd3NUb3VjaC5oCi0pCi0K
LWxpc3QoQVBQRU5EIFdlYkNvcmVfVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMKLSAgICAke1dFQkNP
UkVfRElSfS9jc3MvdGhlbWVXaW4uY3NzCi0gICAgJHtXRUJDT1JFX0RJUn0vY3NzL3RoZW1lV2lu
UXVpcmtzLmNzcwotKQotCi1saXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUwotICAgICR7RGly
ZWN0WF9MSUJSQVJJRVN9Ci0gICAgY29tY3RsMzIKLSAgICBjcnlwdDMyCi0gICAgaXBobHBhcGkK
LSAgICBycGNydDQKLSAgICBzaGx3YXBpCi0gICAgdXNwMTAKLSAgICB2ZXJzaW9uCi0gICAgd2lu
bW0KLSAgICB3czJfMzIKLSkKLQotbGlzdChBUFBFTkQgV2ViQ29yZVRlc3RTdXBwb3J0X0xJQlJB
UklFUwotICAgIHNobHdhcGkKLSkKLQotbWFrZV9kaXJlY3RvcnkoJHtDTUFLRV9SVU5USU1FX09V
VFBVVF9ESVJFQ1RPUll9L1dlYktpdC5yZXNvdXJjZXMvZW4ubHByb2opCi1maWxlKENPUFkKLSAg
ICAiJHtXRUJDT1JFX0RJUn0vZW4ubHByb2ovTG9jYWxpemFibGUuc3RyaW5ncyIKLSAgICAiJHtX
RUJDT1JFX0RJUn0vZW4ubHByb2ovbWVkaWFDb250cm9sc0xvY2FsaXplZFN0cmluZ3MuanMiCi0g
ICAgREVTVElOQVRJT04KLSAgICAke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vV2Vi
S2l0LnJlc291cmNlcy9lbi5scHJvagotKQotZmlsZShDT1BZCi0gICAgIiR7V0VCQ09SRV9ESVJ9
L01vZHVsZXMvbWVkaWFjb250cm9scy9tZWRpYUNvbnRyb2xzQXBwbGUuY3NzIgotICAgICIke1dF
QkNPUkVfRElSfS9Nb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250cm9sc0FwcGxlLmpzIgot
ICAgIERFU1RJTkFUSU9OCi0gICAgJHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1dl
YktpdC5yZXNvdXJjZXMKLSkKLQotc2V0KFdlYkNvcmVfT1VUUFVUX05BTUUgV2ViQ29yZSR7REVC
VUdfU1VGRklYfSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCShyZXZpc2lvbiAyODc4
MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMzksMTQgKzM5LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAKIAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcldpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9h
dFJlY3REaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRTaXplRGly
ZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udERlc2NyaXB0aW9uV2luLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcApAQCAtNjAsNyArNTUsNiBA
QCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW50U2l6ZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2
YXRlRnVsbHNjcmVlbldpbmRvdy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxl
Rm9udERhdGFXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9u
TWF0cml4RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0
aW9uTWF0cml4V2luLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay93aW4vRG93bmxvYWRCdW5k
bGVXaW4uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxMikKKysrIFNv
dXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBA
QAorMjAyMi0wMS0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVtb3ZlIHN1cHBvcnQgZm9yIERpcmVjdDJECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHBhbC9QbGF0Zm9ybUZUVy5jbWFrZTogUmVtb3ZlZC4KKwog
MjAyMi0wMS0wNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjg3Njk4LgpJbmRleDogU291cmNlL1dl
YkNvcmUvUEFML3BhbC9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL1BsYXRmb3JtRlRXLmNtYWtlCShub25leGlzdGVudCkKQEAgLTEs
MjYgKzAsMCBAQAotbGlzdChBUFBFTkQgUEFMX1BVQkxJQ19IRUFERVJTCi0pCi0KLWxpc3QoQVBQ
RU5EIFBBTF9TT1VSQ0VTCi0gICAgY3J5cHRvL29wZW5zc2wvQ3J5cHRvRGlnZXN0T3BlblNTTC5j
cHAKLQotICAgIGNyeXB0by93aW4vQ3J5cHRvRGlnZXN0V2luLmNwcAotCi0gICAgc3lzdGVtL0Ns
b2NrR2VuZXJpYy5jcHAKLQotICAgIHN5c3RlbS93aW4vU291bmRXaW4uY3BwCi0KLSAgICB0ZXh0
L0tpbGxSaW5nLmNwcAotCi0gICAgd2luL0xvZ2dpbmdXaW4uY3BwCi0pCi0KLWxpc3QoQVBQRU5E
IFBBTF9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAiJHtXRUJLSVRfTElCUkFSSUVT
X0RJUn0vaW5jbHVkZSIKLSkKLQotbGlzdChBUFBFTkQgUEFMX1BSSVZBVEVfTElCUkFSSUVTCi0g
ICAgT3BlblNTTDo6Q3J5cHRvCi0pCi0KLXNldChQQUxfT1VUUFVUX05BTUUgUEFMJHtERUJVR19T
VUZGSVh9KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWVkaWFBRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNl
clByZWZlcmVuY2VzTWVkaWFBRi5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01lZGlhQUYuaCIKIAotI2lmIEVOQUJMRShWSURFTykgJiYgIVVTRShE
SVJFQ1QyRCkKKyNpZiBFTkFCTEUoVklERU8pCiAKICNpbmNsdWRlICJBdWRpb1RyYWNrTGlzdC5o
IgogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgpAQCAtOTk1LDQgKzk5NSw0IEBAIFZl
Y3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gQ2FwdGlvblVzZXJQcmUKICAgICAKIH0KIAotI2VuZGlm
IC8vIEVOQUJMRShWSURFTykgJiYgIVVTRShESVJFQ1QyRCkKKyNlbmRpZiAvLyBFTkFCTEUoVklE
RU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZl
cmVuY2VzTWVkaWFBRi5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcg
KzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoVklERU8pICYmICFVU0UoRElS
RUNUMkQpCisjaWYgRU5BQkxFKFZJREVPKQogCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5o
IgogI2luY2x1ZGUgIkNhcHRpb25QcmVmZXJlbmNlc0RlbGVnYXRlLmgiCkBAIC0xMjAsNCArMTIw
LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5B
QkxFKFZJREVPKSAmJiAhVVNFKERJUkVDVDJEKQorI2VuZGlmIC8vIEVOQUJMRShWSURFTykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luRGlyZWN0MkQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luRGlyZWN0MkQuY3BwCShyZXZp
c2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdpbkRpcmVjdDJE
LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZyYW1lV2luLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJCaXRtYXBJbmZv
LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgotI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgot
I2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
R0RJT2JqZWN0PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoY29uc3QgRnJhbWUqIGZyYW1lLCBJbnRS
ZWN0JiBpcikKLXsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGF1dG8gb2xkUGFpbnRCZWhhdmlvciA9IGZyYW1lLT52aWV3KCktPnBhaW50QmVoYXZpb3Io
KTsKLSAgICBmcmFtZS0+dmlldygpLT5zZXRQYWludEJlaGF2aW9yKG9sZFBhaW50QmVoYXZpb3Ig
fCBQYWludEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpOwotCi0gICAgdm9pZCog
Yml0cyA9IG51bGxwdHI7Ci0gICAgYXV0byBoZGMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNv
bXBhdGlibGVEQygwKSk7Ci0gICAgaW50IHcgPSBpci53aWR0aCgpOwotICAgIGludCBoID0gaXIu
aGVpZ2h0KCk7Ci0gICAgQml0bWFwSW5mbyBibXAgPSBCaXRtYXBJbmZvOjpjcmVhdGUoSW50U2l6
ZSh3LCBoKSk7Ci0KLSAgICBHRElPYmplY3Q8SEJJVE1BUD4gaGJtcCA9IGFkb3B0R0RJT2JqZWN0
KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYm1wLCBESUJfUkdCX0NPTE9SUywgc3RhdGljX2Nhc3Q8
dm9pZCoqPigmYml0cyksIDAsIDApKTsKLSAgICBpZiAoIWhibXApCi0gICAgICAgIHJldHVybiBo
Ym1wOwotCi0gICAgSEdESU9CSiBoYm1wT2xkID0gU2VsZWN0T2JqZWN0KGhkYy5nZXQoKSwgaGJt
cC5nZXQoKSk7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgU2VsZWN0T2JqZWN0KGhk
Yy5nZXQoKSwgaGJtcE9sZCk7Ci0KLSAgICBmcmFtZS0+dmlldygpLT5zZXRQYWludEJlaGF2aW9y
KG9sZFBhaW50QmVoYXZpb3IpOwotCi0gICAgcmV0dXJuIGhibXA7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1F
VHlwZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9N
SU1FVHlwZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2MSw3ICs0
NjEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8TUlNRVR5cGVSZWdpc3RyeVRocmVhZEdsCiAgICAgfQog
I2Vsc2UKICAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBzdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nID0gc3RkOjppbml0aWFsaXplcl9saXN0PFN0
cmluZz4gewotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykKICAgICAg
ICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVU
SSdzIHdoZW4gYSB3YXkgdG8gY29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVUSSByZWxpYWJseSBp
cyBmb3VuZC4KICAgICAgICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0IFBORywgSlBFRyBhbmQg
R0lGLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYwOTUyODY+LgogICAgICAgICAiaW1hZ2UvcG5nIl9z
LApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0VsbGkKICAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0VsbGlw
c2UocmVjdCk7CiB9CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cp
CiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7
CiAgICAgbV9wcmltYXJ5Q29udGV4dC5hcHBseVN0cm9rZVBhdHRlcm4oKTsKQEAgLTE4MCw3ICsx
ODAsNyBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsCiAgICAgbV9z
ZWNvbmRhcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CiB9CiAKLSNpZiBVU0UoQ0cp
IHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0NBTGF5ZXJDb250ZXh0KQogewogICAg
IG1fcHJpbWFyeUNvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogICAgIHZvaWQg
ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSNpZiBVU0UoQ0cpIHx8IFVT
RShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBm
aW5hbDsKICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKICNlbmRpZgpAQCAtNzQs
NyArNzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpIGZpbmFsOwogICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpIGZpbmFsOwogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNF
KENHKQogICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbDsKICAgICBib29s
IGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24gMjg3ODEy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjgsMzMgKzEyOCwyOCBAQCB2b2lkIEJpdG1hcEltYWdlOjpzZXRD
dXJyZW50RnJhbWVEZWNvZGluCiAgICAgbV9jdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1cyA9IGRl
Y29kaW5nU3RhdHVzOwogfQogCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpmcmFt
ZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVs
IHN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkK
K1JlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJ
Zk5lZWRlZChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkK
IHsKICAgICBpZiAoIWZyYW1lSGFzRnVsbFNpemVOYXRpdmVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1
YnNhbXBsaW5nTGV2ZWwpKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZTo6JXMg
LSAlcCAtIHVybDogJXMgW3N1YnNhbXBsaW5nTGV2ZWwgd2FzICVkLCByZXNhbXBsaW5nXSIsIF9f
RlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3Rh
dGljX2Nhc3Q8aW50PihmcmFtZVN1YnNhbXBsaW5nTGV2ZWxBdEluZGV4KGluZGV4KSkpOwogICAg
ICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgfQotI2lmIFVTRShESVJFQ1QyRCkK
LSAgICBtX3NvdXJjZS0+c2V0VGFyZ2V0Q29udGV4dCh0YXJnZXRDb250ZXh0KTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHRhcmdldENvbnRleHQpOwotI2VuZGlmCiAgICAgcmV0dXJuIG1fc291
cmNlLT5mcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoaW5kZXgsIHN1YnNhbXBsaW5nTGV2
ZWwpOwogfQogCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZShj
b25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCitSZWZQdHI8TmF0aXZlSW1hZ2U+
IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSgpCiB7Ci0gICAgcmV0dXJuIGZyYW1lSW1hZ2VBdElu
ZGV4Q2FjaGVJZk5lZWRlZCgwLCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0LCB0YXJnZXRDb250
ZXh0KTsKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKDAsIFN1YnNh
bXBsaW5nTGV2ZWw6OkRlZmF1bHQpOwogfQogCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcElt
YWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqIHRh
cmdldENvbnRleHQpCitSZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpCiB7Ci0gICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJ
Zk5lZWRlZChtX2N1cnJlbnRGcmFtZSwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgdGFyZ2V0
Q29udGV4dCk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChtX2N1
cnJlbnRGcmFtZSwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7CiB9CiAKLVJlZlB0cjxOYXRp
dmVJbWFnZT4gQml0bWFwSW1hZ2U6OnByZVRyYW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoYm9vbCByZXNwZWN0T3JpZW50YXRpb24sIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFy
Z2V0Q29udGV4dCkKK1JlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2U6OnByZVRyYW5zZm9y
bWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCByZXNwZWN0T3JpZW50YXRpb24pCiB7
Ci0gICAgYXV0byBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKHRhcmdldENvbnRl
eHQpOworICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAg
IGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBpbWFnZTsKIApAQCAtMTc4LDE4ICsxNzMsMTgg
QEAgUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6cHJlVHJhbgogfQogCiAjaWYgVVNF
KENHKQotUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0
KQorUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgYXV0byBp
bWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChpLCBTdWJzYW1wbGluZ0xldmVs
OjpEZWZhdWx0LCB0YXJnZXRDb250ZXh0KTsKKyAgICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1h
Z2VBdEluZGV4Q2FjaGVJZk5lZWRlZChpLCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKICAg
ICAgICAgaWYgKGltYWdlICYmIGltYWdlLT5zaXplKCkgPT0gc2l6ZSkKICAgICAgICAgICAgIHJl
dHVybiBpbWFnZTsKICAgICB9CiAKICAgICAvLyBGYWxsYmFjayB0byB0aGUgZmlyc3QgZnJhbWUg
aW1hZ2UgaWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQotICAgIHJldHVybiBmcmFtZUlt
YWdlQXRJbmRleENhY2hlSWZOZWVkZWQoMCwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgdGFy
Z2V0Q29udGV4dCk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZCgw
LCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKIH0KIAogVmVjdG9yPFJlZjxOYXRpdmVJbWFn
ZT4+IEJpdG1hcEltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKQpAQCAtMzAzLDcgKzI5OCw3IEBA
IEltYWdlRHJhd1Jlc3VsdCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGkKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlcXVlc3REZWNvZGluZzsK
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXhD
YWNoZUlmTmVlZGVkKG1fY3VycmVudEZyYW1lLCBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsLCAm
Y29udGV4dCk7CisgICAgICAgICAgICBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5l
ZWRlZChtX2N1cnJlbnRGcmFtZSwgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCk7CiAgICAgICAg
ICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAgLSB1cmw6ICVzIFthbiBpbWFn
ZSBmcmFtZSB3aWxsIGJlIGRlY29kZWQgc3luY2hyb25vdXNseV0iLCBfX0ZVTkNUSU9OX18sIHRo
aXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICB9CiAgICAg
ICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsMTEgKzE0MiwxMSBAQCBw
dWJsaWM6CiAjZW5kaWYKICNlbmRpZgogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5hdGl2
ZUltYWdlPiBuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgb3Zl
cnJpZGU7Ci0gICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRy
PE5hdGl2ZUltYWdlPiBwcmVUcmFuc2Zvcm1lZE5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGJv
b2wgcmVzcGVjdE9yaWVudGF0aW9uLCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikg
b3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJ
bWFnZSgpIG92ZXJyaWRlOworICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IHByZVRyYW5z
Zm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCByZXNwZWN0T3JpZW50YXRpb24p
IG92ZXJyaWRlOwogI2lmIFVTRShDRykKLSAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUlt
YWdlT2ZTaXplKGNvbnN0IEludFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0
cikgb3ZlcnJpZGU7CisgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZU9mU2l6ZShj
b25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPFJlZjxOYXRpdmVJbWFnZT4+IGZy
YW1lc05hdGl2ZUltYWdlcygpOwogI2VuZGlmCiAKQEAgLTE1OCw3ICsxNTgsNyBAQCBwcml2YXRl
OgogICAgIFdFQkNPUkVfRVhQT1JUIEJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gbnVsbHB0
cik7CiAKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBp
bmRleCkgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSW1hZ2VBdEluZGV4KGluZGV4KTsgfQotICAg
IFJlZlB0cjxOYXRpdmVJbWFnZT4gZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKHNpemVf
dCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogPSBudWxscHRyKTsKKyAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGZyYW1l
SW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJz
YW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKIAogICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNh
Y2hlZCBkYXRhLiBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAogICAgIC8v
IHRoZSBlbnRpcmUgZnJhbWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3VyY2Ug
dG8gZGVzdHJveQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAko
cmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMSArNDksNiBAQAogI2luY2x1ZGUgPHVzcDEwLmg+
CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLWludGVyZmFjZSBJRFdyaXRlRmFjdG9yeTU7
Ci1pbnRlcmZhY2UgSURXcml0ZUdkaUludGVyb3A7Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBGb250Q2FjaGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCShyZXZpc2lvbiAyODc4MTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDEwICs2Nyw2IEBAIGludGVyZmFjZSBJRFdyaXRlRm9udDsKIGlu
dGVyZmFjZSBJRFdyaXRlRm9udEZhY2U7CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSNp
bmNsdWRlIDxkd3JpdGVfMy5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRm9udERlc2NyaXB0aW9uOwpAQCAtMTE5LDkgKzExNSw2IEBAIHB1YmxpYzoKICNpZiBVU0Uo
Q09SRV9URVhUKQogICAgIEZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiwgQ1RGb250
UmVmLCBDR0ZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50
aGV0aWNPYmxpcXVlLCBib29sIHVzZUdESSk7CiAjZW5kaWYKLSNpZiBVU0UoRElSRUNUMkQpCi0g
ICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+JiYsIENPTVB0cjxJRFdyaXRlRm9u
dD4mJiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlx
dWUsIGJvb2wgdXNlR0RJKTsKLSNlbmRpZgogI2lmIFVTRShDQUlSTykKICAgICBGb250UGxhdGZv
cm1EYXRhKEdESU9iamVjdDxIRk9OVD4sIGNhaXJvX2ZvbnRfZmFjZV90KiwgZmxvYXQgc2l6ZSwg
Ym9vbCBib2xkLCBib29sIGl0YWxpYywgY29uc3QgQ3JlYXRpb25EYXRhKiA9IG51bGxwdHIpOwog
I2VuZGlmCkBAIC0xNjMsMTEgKzE1Niw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzVmFyaWF0
aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFyaWF0aW9uczsgfQogCi0jaWYgVVNFKERJUkVD
VDJEKQotICAgIElEV3JpdGVGb250KiBkd0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX2R3Rm9udC5n
ZXQoKTsgfQotICAgIElEV3JpdGVGb250RmFjZSogZHdGb250RmFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZHdGb250RmFjZS5nZXQoKTsgfQotI2VuZGlmCi0KICAgICBib29sIGlzRml4ZWRQaXRjaCgp
IGNvbnN0OwogICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAgICBi
b29sIHN5bnRoZXRpY0JvbGQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY0JvbGQ7IH0KQEAg
LTI2OCwxMSArMjU2LDYgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIFJldGFpblB0cjxDVEZvbnRS
ZWY+IG1fY3RGb250OwogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElE
V3JpdGVGb250PiBtX2R3Rm9udDsKLSAgICBDT01QdHI8SURXcml0ZUZvbnRGYWNlPiBtX2R3Rm9u
dEZhY2U7Ci0jZW5kaWYKLQogI2lmIFVTRShDQUlSTykKICAgICBSZWZQdHI8Y2Fpcm9fc2NhbGVk
X2ZvbnRfdD4gbV9zY2FsZWRGb250OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDE5ICszOSwxMCBAQAogI2luY2x1ZGUgIkdyYWRpZW50UmVuZGVyZXJDRy5oIgogI2VuZGlmCiAK
LSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jZW5kaWYKLQogI2lmIFVT
RShDRykKIHR5cGVkZWYgc3RydWN0IENHQ29udGV4dCogQ0dDb250ZXh0UmVmOwogI2VuZGlmCiAK
LSNpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQyRDFCcnVzaDsKLWludGVyZmFjZSBJRDJE
MVJlbmRlclRhcmdldDsKLSNlbmRpZgotCiAjaWYgVVNFKENBSVJPKQogdHlwZWRlZiBzdHJ1Y3Qg
X2NhaXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90OwogI2VuZGlmCkBAIC0xMTgsMTAgKzEwOSw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50KENHQ29udGV4dFJlZik7CiAjZW5kaWYKIAotI2lm
IFVTRShESVJFQ1QyRCkKLSAgICBJRDJEMUJydXNoKiBjcmVhdGVCcnVzaChJRDJEMVJlbmRlclRh
cmdldCopOwotI2VuZGlmCi0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8UmVmPEdyYWRpZW50Pj4gZGVjb2RlKERlY29kZXImKTsKIApAQCAt
MTM5LDEwICsxMjYsNiBAQCBwcml2YXRlOgogI2lmIFVTRShDRykKICAgICBzdGQ6Om9wdGlvbmFs
PEdyYWRpZW50UmVuZGVyZXJDRz4gbV9wbGF0Zm9ybVJlbmRlcmVyOwogI2VuZGlmCi0KLSNpZiBV
U0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEMkQxQnJ1c2g+IG1fYnJ1c2g7Ci0jZW5kaWYKIH07
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgR3JhZGllbnQ6OkxpbmVhckRhdGE6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDI4Nzgx
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MywxNSArNDMsNiBAQAogCiAjaWYgVVNFKENHKQogdHlwZWRl
ZiBzdHJ1Y3QgQ0dDb250ZXh0IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwotI2VsaWYgVVNFKERJ
UkVDVDJEKQotaW50ZXJmYWNlIElEMkQxRENSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFS
ZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFGYWN0b3J5OwotaW50ZXJmYWNlIElEMkQxU29s
aWRDb2xvckJydXNoOwotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQ7Ci19Ci10eXBlZGVmIFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0OwogI2VsaWYgVVNFKENBSVJPKQogbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87CkBAIC0yNjksMTUgKzI2MCw2IEBAIHB1
YmxpYzogICAKICAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoKSA9IGRlZmF1bHQ7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0KCk7CiAKLSNpZiBV
U0UoRElSRUNUMkQpCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG1vdmUgdG8gR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQKLSAgICBlbnVtIGNsYXNzIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBl
IDogdWludDhfdCB7Ci0gICAgICAgIENQVU1lbW9yeSwKLSAgICAgICAgR1BVTWVtb3J5Ci0gICAg
fTsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqLCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSk7Ci0jZW5kaWYKLQogICAgIHZpcnR1
YWwgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG51bGxwdHI7IH0KIApAQCAtMzcyLDcgKzM1NCw3IEBAIHB1YmxpYzogICAKICAg
ICAKICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrLnNpemUo
KTsgfQogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNFKENHKQogICAgIC8v
IEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1YmxpYyBHcmFwaGljc0NvbnRleHQgbWV0
aG9kcz8KICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAwOwpAQCAtNTU3LDI2ICs1MzksNiBAQCBw
dWJsaWM6ICAgCiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRl
cHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRp
ZgogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIEdyYXBoaWNzQ29udGV4dChIREMsIElEMkQxRENS
ZW5kZXJUYXJnZXQqKiwgUkVDVCwgYm9vbCBoYXNBbHBoYSA9IGZhbHNlKTsgLy8gRklYTUU6IFRv
IGJlIHJlbW92ZWQuCi0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSUQyRDFGYWN0b3J5KiBz
eXN0ZW1GYWN0b3J5KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxUmVuZGVyVGFy
Z2V0KiBkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJl
Z2luRHJhdygpOwotICAgIEQyRDFfQ09MT1JfRiBjb2xvcldpdGhHbG9iYWxBbHBoYShjb25zdCBD
b2xvciYpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kRHJhdygpOwotICAgIHZv
aWQgZmx1c2goKTsKLQotICAgIElEMkQxQnJ1c2gqIHNvbGlkU3Ryb2tlQnJ1c2goKSBjb25zdDsK
LSAgICBJRDJEMUJydXNoKiBzb2xpZEZpbGxCcnVzaCgpIGNvbnN0OwotICAgIElEMkQxQnJ1c2gq
IHBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0OwotICAgIElEMkQxQnJ1c2gqIHBhdHRlcm5GaWxs
QnJ1c2goKSBjb25zdDsKLSAgICBJRDJEMVN0cm9rZVN0eWxlKiBwbGF0Zm9ybVN0cm9rZVN0eWxl
KCkgY29uc3Q7Ci0KLSAgICBJRDJEMVNvbGlkQ29sb3JCcnVzaCogYnJ1c2hXaXRoQ29sb3IoY29u
c3QgQ29sb3ImKTsKLSNlbmRpZgotCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCShyZXZpc2lvbiAyODc4MTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTYsMTAgKzE1NiwxMCBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFRpbGVSdWxlIHsgU3Ry
ZXRjaFRpbGUsIFJvdW5kVGlsZSwgU3BhY2VUaWxlLCBSZXBlYXRUaWxlIH07CiAKLSAgICB2aXJ0
dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0
KiA9IG51bGxwdHIpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJlZlB0cjxOYXRp
dmVJbWFnZT4gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0
KiA9IG51bGxwdHIpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJlZlB0cjxOYXRp
dmVJbWFnZT4gcHJlVHJhbnNmb3JtZWROYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShib29sID0g
dHJ1ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIHsgcmV0dXJuIG51bGxwdHI7
IH0KLSAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VPZlNpemUoY29u
c3QgSW50U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSB7IHJldHVybiBu
dWxscHRyOyB9CisgICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlKCkg
eyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFs
IFJlZlB0cjxOYXRpdmVJbWFnZT4gcHJlVHJhbnNmb3JtZWROYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZShib29sID0gdHJ1ZSkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgUmVmUHRy
PE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4g
bnVsbHB0cjsgfQogCiAgICAgLy8gQWNjZXNzb3JzIGZvciBuYXRpdmUgaW1hZ2UgZm9ybWF0cy4K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURl
Y29kZXIuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw2IEBA
CiAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyQ0cuaCIKLSNlbGlmIFVTRShE
SVJFQ1QyRCkKLSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgogI2Vsc2UKICNpbmNs
dWRlICJTY2FsYWJsZUltYWdlRGVjb2Rlci5oIgogI2VuZGlmCkBAIC0xMDcsOCArMTA1LDYgQEAg
UmVmUHRyPEltYWdlRGVjb2Rlcj4gSW1hZ2VEZWNvZGVyOjpjcmVhdAogCiAjaWYgVVNFKENHKQog
ICAgIHJldHVybiBJbWFnZURlY29kZXJDRzo6Y3JlYXRlKGRhdGEsIGFscGhhT3B0aW9uLCBnYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbik7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgcmV0dXJu
IEltYWdlRGVjb2RlckRpcmVjdDJEOjpjcmVhdGUoZGF0YSwgYWxwaGFPcHRpb24sIGdhbW1hQW5k
Q29sb3JQcm9maWxlT3B0aW9uKTsKICNlbHNlCiAgICAgcmV0dXJuIFNjYWxhYmxlSW1hZ2VEZWNv
ZGVyOjpjcmVhdGUoZGF0YSwgYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9u
KTsKICNlbmRpZgpAQCAtMTE5LDkgKzExNSw2IEBAIGJvb2wgSW1hZ2VEZWNvZGVyOjpzdXBwb3J0
c01lZGlhVHlwZShNZWQKICNpZiBVU0UoQ0cpCiAgICAgaWYgKEltYWdlRGVjb2RlckNHOjpzdXBw
b3J0c01lZGlhVHlwZSh0eXBlKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZWxpZiBVU0UoRElS
RUNUMkQpCi0gICAgaWYgKEltYWdlRGVjb2RlckRpcmVjdDJEOjpzdXBwb3J0c01lZGlhVHlwZSh0
eXBlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQogICAgIGlmIChTY2FsYWJsZUltYWdl
RGVjb2Rlcjo6c3VwcG9ydHNNZWRpYVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVy
LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsMTAgKzEzMyw2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpID0gMDsKIAotI2lmIFVT
RShESVJFQ1QyRCkKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VGFyZ2V0Q29udGV4dChJRDJEMVJlbmRl
clRhcmdldCopID0gMDsKLSNlbmRpZgotCiBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VEZWNvZGVyKCkg
PSBkZWZhdWx0OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
MTEgKzM0LDYgQEAKICNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgogI2luY2x1ZGUgPHd0
Zi9VUkwuaD4KIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2VuZGlmCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKEJpdG1hcEltYWdlKiBp
bWFnZSwgQWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9u
IGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQpAQCAtNjkzLDE0ICs2ODgsNiBAQCBJbWFnZU9y
aWVudGF0aW9uIEltYWdlU291cmNlOjpmcmFtZU9yaWVuCiAgICAgcmV0dXJuIGZyYW1lQXRJbmRl
eENhY2hlSWZOZWVkZWQoaW5kZXgsIEltYWdlRnJhbWU6OkNhY2hpbmc6Ok1ldGFkYXRhKS5vcmll
bnRhdGlvbigpOwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotdm9pZCBJbWFnZVNvdXJjZTo6c2V0
VGFyZ2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCi17Ci0g
ICAgaWYgKGlzRGVjb2RlckF2YWlsYWJsZSgpICYmIHRhcmdldENvbnRleHQpCi0gICAgICAgIG1f
ZGVjb2Rlci0+c2V0VGFyZ2V0Q29udGV4dCh0YXJnZXRDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+cmVuZGVyVGFyZ2V0KCkpOwotfQotI2VuZGlmCi0KIFJlZlB0cjxOYXRpdmVJbWFnZT4gSW1h
Z2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxp
bmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKQogewogICAgIGlmICghaXNEZWNvZGVyQXZhaWxhYmxl
KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw5ICsxMjIsNiBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgU2Vjb25kcyBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXpl
X3QpOwogICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90
KTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIHNldFRhcmdldENvbnRleHQoY29uc3Qg
R3JhcGhpY3NDb250ZXh0Kik7Ci0jZW5kaWYKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGNyZWF0
ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5n
TGV2ZWw6OkRlZmF1bHQpOwogICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gZnJhbWVJbWFnZUF0SW5k
ZXgoc2l6ZV90KTsKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGZyYW1lSW1hZ2VBdEluZGV4Q2Fj
aGVJZk5lZWRlZChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpE
ZWZhdWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFw
aGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotI2lmIFVT
RShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykKICAgICB2b2lkIHNldElzQ0FMYXll
ckNvbnRleHQoYm9vbCkgZmluYWwgeyB9CiAgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29u
c3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpAQCAtNTcsNyArNTcsNyBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KIAot
I2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykKICAgICB2b2lkIHNldElz
QWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQogI2VuZGlmCiAKQEAgLTY3LDcgKzY3
LDcgQEAgcHJpdmF0ZToKIAogICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHsgfTsgfQogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNFKENH
KQogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWwgeyB9CiAgICAgdm9pZCBhcHBs
eUZpbGxQYXR0ZXJuKCkgZmluYWwgeyB9CiAgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikg
ZmluYWwgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNw
cAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi0jaWYgIVVTRShESVJFQ1QyRCkKIGZsb2F0IFBhdGg6Omxlbmd0aCgpIGNvbnN0
CiB7CiAgICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxT
dGF0ZTo6QWN0aW9uOjpUb3RhbExlbmd0aCk7CkBAIC01MSw3ICs1MCw2IEBAIGZsb2F0IFBhdGg6
Omxlbmd0aCgpIGNvbnN0CiAKICAgICByZXR1cm4gdHJhdmVyc2FsU3RhdGUudG90YWxMZW5ndGgo
KTsKIH0KLSNlbmRpZgogCiAjaWYgIUhBVkUoQ0dQQVRIX0dFVF9OVU1CRVJfT0ZfRUxFTUVOVFMp
CiAKQEAgLTEyNSw3ICsxMjMsNyBAQCB2b2lkIFBhdGg6OmFkZFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91CiAgICAgfQogCiAgICAgaWYgKHN0cmF0ZWd5ID09IFJvdW5kZWRSZWN0U3RyYXRlZ3k6
OlByZWZlck5hdGl2ZSkgewotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShD
RykKICAgICAgICAgcGxhdGZvcm1BZGRQYXRoRm9yUm91bmRlZFJlY3QocmVjdCwgcmFkaWkudG9w
TGVmdCgpLCByYWRpaS50b3BSaWdodCgpLCByYWRpaS5ib3R0b21MZWZ0KCksIHJhZGlpLmJvdHRv
bVJpZ2h0KCkpOwogICAgICAgICByZXR1cm47CiAjZW5kaWYKQEAgLTUyNCw3ICs1MjIsNyBAQCBz
dGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gUGF0aDo6Ym91bmRpbmdSCiAKICNlbmRpZgogCi0jaWYg
IVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkKKyNpZiAhVVNFKENHKQogUGF0aCBQYXRoOjpwb2x5
Z29uUGF0aEZyb21Qb2ludHMoY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQ+JiBwb2ludHMpCiB7CiAg
ICAgUGF0aCBwYXRoOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGgu
aAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyMCArNDEsNiBAQAogI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9DR1BhdGguaD4KIHR5cGVkZWYgc3RydWN0IENHUGF0aCBQbGF0Zm9ybVBhdGg7CiAK
LSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJDT01QdHIuaCIKLQotaW50ZXJmYWNlIElE
MkQxR2VvbWV0cnk7Ci1pbnRlcmZhY2UgSUQyRDFHZW9tZXRyeUdyb3VwOwotaW50ZXJmYWNlIElE
MkQxUGF0aEdlb21ldHJ5OwotaW50ZXJmYWNlIElEMkQxR2VvbWV0cnlTaW5rOwotCi10eXBlZGVm
IElEMkQxR2VvbWV0cnlHcm91cCBQbGF0Zm9ybVBhdGg7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOwotfQotCiAjZWxpZiBVU0UoQ0FJUk8pCiAj
aW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKIApAQCAtNjksOCArNTUsNiBAQCB0eXBlZGVmIFBsYXRm
b3JtUGF0aCogUGxhdGZvcm1QYXRoUHRyOwogCiAjaWYgVVNFKENHKQogdXNpbmcgUGxhdGZvcm1Q
YXRoU3RvcmFnZVR5cGUgPSBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj47Ci0jZWxpZiBVU0Uo
RElSRUNUMkQpCi11c2luZyBQbGF0Zm9ybVBhdGhTdG9yYWdlVHlwZSA9IENPTVB0cjxJRDJEMUdl
b21ldHJ5R3JvdXA+OwogI2Vsc2UKIHVzaW5nIFBsYXRmb3JtUGF0aFN0b3JhZ2VUeXBlID0gUGxh
dGZvcm1QYXRoUHRyOwogI2VuZGlmCkBAIC0xODksMTAgKzE3Myw3IEBAIHB1YmxpYzoKIAogICAg
IC8vIFRvIGtlZXAgUGF0aCgpIGNoZWFwLCBpdCBkb2VzIG5vdCBhbGxvY2F0ZSBhIFBsYXRmb3Jt
UGF0aCBpbW1lZGlhdGVseQogICAgIC8vIG1lYW5pbmcgUGF0aDo6cGxhdGZvcm1QYXRoKCkgY2Fu
IHJldHVybiBudWxsLgotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBGbG9hdFJlY3QgZmFzdEJvdW5k
aW5nUmVjdEZvclN0cm9rZShjb25zdCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpIGNvbnN0Owot
ICAgIFBsYXRmb3JtUGF0aFB0ciBwbGF0Zm9ybVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGgu
Z2V0KCk7IH0KLSNlbGlmIFVTRShDRykKKyNpZiBVU0UoQ0cpCiAgICAgV0VCQ09SRV9FWFBPUlQg
UGxhdGZvcm1QYXRoUHRyIHBsYXRmb3JtUGF0aCgpIGNvbnN0OwogI2VsaWYgVVNFKENBSVJPKQog
ICAgIGNhaXJvX3QqIGNhaXJvUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5nZXQoKTsgfQpA
QCAtMjE3LDE5ICsxOTgsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRCZXppZXJzRm9yUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVz
LCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRv
bUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpOwogCi0jaWYg
VVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNFKENHKQogICAgIHZvaWQgcGxhdGZvcm1B
ZGRQYXRoRm9yUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiB0
b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9h
dFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRp
dXMpOwogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgdm9pZCBhcHBlbmRHZW9tZXRy
eShJRDJEMUdlb21ldHJ5Kik7Ci0gICAgdm9pZCBjcmVhdGVHZW9tZXRyeVdpdGhGaWxsTW9kZShX
aW5kUnVsZSwgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4mKSBjb25zdDsKLQotICAgIHZvaWQg
b3BlbkZpZ3VyZUF0Q3VycmVudFBvaW50SWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIGNsb3NlQW55
T3Blbkdlb21ldHJpZXModW5zaWduZWQgZmlndXJlRW5kU3R5bGUpIGNvbnN0OwotICAgIHZvaWQg
Y2xlYXJHZW9tZXRyaWVzKCk7Ci0jZW5kaWYKLQogI2lmbmRlZiBOREVCVUcKICAgICB2b2lkIGR1
bXAoKSBjb25zdDsKICNlbmRpZgpAQCAtMjgwLDEyICsyNTIsNiBAQCBwcml2YXRlOgogICAgIG11
dGFibGUgUGxhdGZvcm1QYXRoU3RvcmFnZVR5cGUgbV9wYXRoOwogI2VuZGlmCiAKLSNpZiBVU0Uo
RElSRUNUMkQpCi0gICAgVmVjdG9yPElEMkQxR2VvbWV0cnkqPiBtX2dlb21ldHJpZXM7Ci0gICAg
bXV0YWJsZSBDT01QdHI8SUQyRDFHZW9tZXRyeVNpbms+IG1fYWN0aXZlUGF0aDsKLSAgICBtdXRh
YmxlIGJvb2wgbV9maWd1cmVJc09wZW5lZCB7IGZhbHNlIH07Ci0jZW5kaWYKLQogI2lmIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQogICAgIElubGluZVBhdGhEYXRhIG1faW5saW5lRGF0YTsKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAko
cmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMyArMzYsNiBAQAogI2lmIFVTRShDRykKIHR5
cGVkZWYgc3RydWN0IENHUGF0dGVybiogQ0dQYXR0ZXJuUmVmOwogdHlwZWRlZiBSZXRhaW5QdHI8
Q0dQYXR0ZXJuUmVmPiBQbGF0Zm9ybVBhdHRlcm5QdHI7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi1p
bnRlcmZhY2UgSUQyRDFCaXRtYXBCcnVzaDsKLXR5cGVkZWYgSUQyRDFCaXRtYXBCcnVzaCogUGxh
dGZvcm1QYXR0ZXJuUHRyOwotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ7Ci19Ci10eXBlZGVmIFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dERpcmVjdDJE
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwogI2VsaWYgVVNFKENBSVJPKQogdHlwZWRlZiBzdHJ1
Y3QgX2NhaXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90OwogdHlwZWRlZiBjYWlyb19wYXR0ZXJu
X3QqIFBsYXRmb3JtUGF0dGVyblB0cjsKQEAgLTc3LDExICs3MCw4IEBAIHB1YmxpYzoKICAgICBj
b25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJz
OyB9CiAKICAgICAvLyBQYXR0ZXJuIHNwYWNlIGlzIGFuIGFic3RyYWN0IHNwYWNlIHRoYXQgbWFw
cyB0byB0aGUgZGVmYXVsdCB1c2VyIHNwYWNlIGJ5IHRoZSB0cmFuc2Zvcm1hdGlvbiAndXNlclNw
YWNlVHJhbnNmb3JtJwotI2lmICFVU0UoRElSRUNUMkQpCiAgICAgUGxhdGZvcm1QYXR0ZXJuUHRy
IGNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRy
YW5zZm9ybSkgY29uc3Q7Ci0jZWxzZQotICAgIFBsYXRmb3JtUGF0dGVyblB0ciBjcmVhdGVQbGF0
Zm9ybVBhdHRlcm4oY29uc3QgR3JhcGhpY3NDb250ZXh0JiwgZmxvYXQgYWxwaGEsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtKSBjb25zdDsKLSNlbmRpZgorCiAgICAg
dm9pZCBzZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAg
ICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7
IHJldHVybiBtX3BhcmFtZXRlcnMucGF0dGVyblNwYWNlVHJhbnNmb3JtOyB9OwogICAgIGJvb2wg
cmVwZWF0WCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy5yZXBlYXRYOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oCShy
ZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAjaWYgVVNFKENHKQogdXNpbmcgUGxhdGZvcm1JbWFnZVB0ciA9IFJldGFpblB0
cjxDR0ltYWdlUmVmPjsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLXVzaW5nIFBsYXRmb3JtSW1hZ2VQ
dHIgPSBDT01QdHI8SUQyRDFCaXRtYXA+OwogI2VsaWYgVVNFKENBSVJPKQogdXNpbmcgUGxhdGZv
cm1JbWFnZVB0ciA9IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+OwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1
ZmZlci5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDYg
QEAKIAogI2lmIFVTRShDRykKICNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5o
IgotI2VsaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kLmgiCiAjZWxpZiBVU0UoQ0FJUk8pCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQuaCIKICNlbmRpZgpAQCAtNDQsOCArNDIsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICNpZiBVU0UoQ0cpCiB1c2luZyBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNr
ZW5kID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi11
c2luZyBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ7CiAjZWxpZiBVU0UoQ0FJUk8pCiB1c2luZyBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZm
ZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ7CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZm
ZXJCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsNiBAQAogCiAjaWYgVVNFKENHKQogI2luY2x1
ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKICNlbGlmIFVTRShDQUlSTykKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgogI2VuZGlmCkBAIC0zNyw4ICszNSw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShDRykKIHVzaW5nIFBsYXRmb3JtSW1hZ2VC
dWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ7Ci0jZWxpZiBVU0UoRElSRUNUMkQp
Ci11c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kOwogI2VsaWYgVVNFKENBSVJPKQogdXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tl
bmQgPSBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL0NETVNlc3Npb25BVkZvdW5kYXRp
b25DRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL2NmL0NETVNlc3Npb25BVkZvdW5kYXRpb25DRi5jcHAJKHJldmlzaW9uIDI4
NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9j
Zi9DRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNCAr
NTMsNiBAQCBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0Y6OkNETVNlc3Npb25BVkZvCiAKIFJlZlB0
cjxVaW50OEFycmF5PiBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0Y6OmdlbmVyYXRlS2V5UmVxdWVz
dChjb25zdCBTdHJpbmcmLCBVaW50OEFycmF5KiBpbml0RGF0YSwgU3RyaW5nJiBkZXN0aW5hdGlv
blVSTCwgdW5zaWduZWQgc2hvcnQmIGVycm9yQ29kZSwgdWludDMyX3QmIHN5c3RlbUNvZGUpCiB7
Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIFVOVVNFRF9QQVJBTShpbml0RGF0YSk7Ci0gICAgVU5V
U0VEX1BBUkFNKGRlc3RpbmF0aW9uVVJMKTsKLSAgICBVTlVTRURfUEFSQU0oZXJyb3JDb2RlKTsK
LSAgICBVTlVTRURfUEFSQU0oc3lzdGVtQ29kZSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gbnVsbHB0cjsKLSNlbHNlCiAgICAgU3RyaW5nIGtleVVSSTsKICAgICBTdHJpbmcg
a2V5SUQ7CiAgICAgUmVmUHRyPFVpbnQ4QXJyYXk+IGNlcnRpZmljYXRlOwpAQCAtMTAyLDcgKzk0
LDYgQEAgUmVmUHRyPFVpbnQ4QXJyYXk+IENETVNlc3Npb25BVkZvdW5kYXRpbwogCiAgICAgYXV0
byBrZXlSZXF1ZXN0QnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShDRkRhdGFHZXRCeXRlUHRy
KGtleVJlcXVlc3QuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoa2V5UmVxdWVzdC5nZXQoKSkpOwog
ICAgIHJldHVybiBVaW50OEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShrZXlSZXF1ZXN0QnVmZmVy
KSwgMCwga2V5UmVxdWVzdEJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLSNlbmRpZgogfQogCiB2b2lk
IENETVNlc3Npb25BVkZvdW5kYXRpb25DRjo6cmVsZWFzZUtleXMoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbkNGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
Q0YuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OTQsMTEgKzg5NCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uQ0Y6OnAKICAgICAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoMS4w
ZiwgLTEuMGYpKTsKICAgICAgICAgY29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KEludGVycG9sYXRpb25RdWFsaXR5OjpMb3cpOwogICAgICAgICBGbG9hdFJlY3QgcGFpbnRSZWN0
KEZsb2F0UG9pbnQoKSwgcmVjdC5zaXplKCkpOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAg
bm90SW1wbGVtZW50ZWQoKTsKLSNlbHNlCiAgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBDR1JlY3RNYWtlKDAsIDAsIHBhaW50UmVjdC53aWR0aCgp
LCBwYWludFJlY3QuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7Ci0jZW5kaWYKICAgICAgICAgY29u
dGV4dC5yZXN0b3JlKCk7CiAgICAgICAgIGltYWdlID0gMDsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudElt
YWdlLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MiwxNiAr
MzYyLDEyIEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhd1BERlBhZ2UoR3JhcGgKIAogICAg
IGNvbnRleHQudHJhbnNsYXRlKC1tX2Nyb3BCb3gubG9jYXRpb24oKSk7CiAKLSNpZiBVU0UoRElS
RUNUMkQpCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbHNlCiAgICAgLy8gQ0dQREYgcGFnZXMg
YXJlIGluZGV4ZWQgZnJvbSAxLgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIENHQ29udGV4dERy
YXdQREZQYWdlV2l0aEFubm90YXRpb25zKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIENHUERG
RG9jdW1lbnRHZXRQYWdlKG1fZG9jdW1lbnQuZ2V0KCksIDEpLCBudWxscHRyKTsKICNlbHNlCiAg
ICAgQ0dDb250ZXh0RHJhd1BERlBhZ2UoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgQ0dQREZE
b2N1bWVudEdldFBhZ2UobV9kb2N1bWVudC5nZXQoKSwgMSkpOwogI2VuZGlmCi0jZW5kaWYKIH0K
IAogI2VuZGlmIC8vICFVU0UoUERGS0lUX0ZPUl9QREZET0NVTUVOVElNQUdFKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNyArMTg5LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KIAotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQor
I2lmIFVTRShDRykKICAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWwgeyB9
CiAgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQpAQCAt
MjIwLDcgKzIyMCw3IEBAIHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0jaWYgVVNFKENHKSB8fCBVU0Uo
RElSRUNUMkQpCisjaWYgVVNFKENHKQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlTdHJv
a2VQYXR0ZXJuKCkgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseUZpbGxQYXR0
ZXJuKCkgZmluYWw7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwCShy
ZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
dHlwZS9PcGVuVHlwZU1hdGhEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDEwICsyNTks
NiBAQCBPcGVuVHlwZU1hdGhEYXRhOjpPcGVuVHlwZU1hdGhEYXRhKGNvbnN0CiAgICAgOiBtX21h
dGhGb250KGZvbnQuY3JlYXRlT3BlblR5cGVNYXRoSGFyZkJ1enpGb250KCkpCiB7CiB9Ci0jZWxp
ZiBVU0UoRElSRUNUMkQpCi1PcGVuVHlwZU1hdGhEYXRhOjpPcGVuVHlwZU1hdGhEYXRhKGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnQpCi17Ci19CiAjZWxzZQogT3BlblR5cGVNYXRoRGF0YTo6
T3BlblR5cGVNYXRoRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJikgPSBkZWZhdWx0OwogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVu
VHlwZVV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyODc4MTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0
aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCw2IEBACiAjaW5jbHVkZSAi
Rm9udE1lbW9yeVJlc291cmNlLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKLSNpZiBV
U0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMuaCIKLSNpbmNsdWRl
IDxkd3JpdGVfMy5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IEJp
Z0VuZGlhblVTaG9ydCB7IApAQCAtMjgxLDExICsyNzYsNiBAQCBSZWZQdHI8Rm9udE1lbW9yeVJl
c291cmNlPiByZW5hbWVBbmRBY3RpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0jaWYg
VVNFKERJUkVDVDJEKQotICAgIEhSRVNVTFQgaHIgPSBEaXJlY3RXcml0ZTo6YWRkRm9udEZyb21E
YXRhVG9Qcm9jZXNzQ29sbGVjdGlvbihyZXdyaXR0ZW5Gb250RGF0YSk7Ci0gICAgQVNTRVJUKFNV
Q0NFRURFRChocikpOwotI2VuZGlmCi0KICAgICByZXR1cm4gRm9udE1lbW9yeVJlc291cmNlOjpj
cmVhdGUoZm9udEhhbmRsZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAJKHJldmlzaW9u
IDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRt
YXBUZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0LDYgQEAgdm9pZCBCaXRt
YXBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyhHcmFwaAogCiAgICAgc291cmNlTGF5ZXItPnBhaW50
R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIHNvdXJjZVJlY3QpOwogCi0jaWYgVVNFKERJ
UkVDVDJEKQotICAgIC8vIFdlIGNhbid0IGFjY2VzcyB0aGUgYml0cyBpbiB0aGUgaW1hZ2UgYnVm
ZmVyIHdpdGggYW4gYWN0aXZlIGJlZ2luRHJhdy4KLSAgICBjb250ZXh0LmVuZERyYXcoKTsKLSNl
bmRpZgotCiAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0
dXJlR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZUdMLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDIsMTEgKzQyLDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5j
bHVkZSA8d2luY29kZWMuaD4KLSNlbmRpZgotCiAjaWYgT1MoREFSV0lOKQogI2RlZmluZSBHTF9V
TlNJR05FRF9JTlRfOF84XzhfOF9SRVYgMHg4MzY3CiAjZW5kaWYKQEAgLTE2Myw4ICsxNTgsNiBA
QCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoSW1hCiAgICAgY2Fpcm9fc3Vy
ZmFjZV90KiBzdXJmYWNlID0gZnJhbWVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpOwogICAg
IGltYWdlRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSk7CiAgICAg
Ynl0ZXNQZXJMaW5lID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpOwot
I2VsaWYgVVNFKERJUkVDVDJEKQotICAgIG5vdEltcGxlbWVudGVkKCk7CiAjZW5kaWYKIAogICAg
IHVwZGF0ZUNvbnRlbnRzKGltYWdlRGF0YSwgdGFyZ2V0UmVjdCwgb2Zmc2V0LCBieXRlc1Blckxp
bmUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkQuaAkocmV2aXNpb24g
Mjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyRC5oCShub25leGlzdGVudCkKQEAgLTEsNzQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIklu
dFJlY3QuaCIKLSNpbmNsdWRlIDx3aW5jb2RlYy5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgotCi1pbnRlcmZhY2UgSUQyRDFCaXRtYXA7Ci1pbnRlcmZhY2UgSUQyRDFCaXRtYXBCcnVz
aDsKLWludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLWludGVyZmFjZSBJRDNEMTFEZXZpY2Ux
OwotaW50ZXJmYWNlIElEWEdJU3VyZmFjZTE7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJEIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkQpOwotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIHZpcnR1YWwgfkJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRCgp
ID0gZGVmYXVsdDsKLQotICAgIElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQoKSBjb25z
dCB7IHJldHVybiBtX3JlbmRlclRhcmdldC5nZXQoKTsgfQotICAgIElEMkQxQml0bWFwKiBzdXJm
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLmdldCgpOyB9Ci0gICAgSURYR0lTdXJmYWNl
MSogZHhTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9keFN1cmZhY2UuZ2V0KCk7IH0KLSAgICBj
b25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgc2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUm
IHNjcm9sbE9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgSUQyRDFCaXRtYXBCcnVzaCogYml0bWFw
QnJ1c2goKSA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICBCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0
MkQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSUQzRDExRGV2aWNlMSogZGV2aWNlKQotICAgICAgICA6
IG1fZGV2aWNlKGRldmljZSkKLSAgICAgICAgLCBtX3NpemUoc2l6ZSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgQ09NUHRyPElEM0QxMURldmljZTE+IG1fZGV2aWNlOwotICAgIENPTVB0cjxJRDJEMVJl
bmRlclRhcmdldD4gbV9yZW5kZXJUYXJnZXQ7Ci0gICAgQ09NUHRyPElEWEdJU3VyZmFjZTE+IG1f
ZHhTdXJmYWNlOwotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gbV9zdXJmYWNlOwotICAgIEludFNp
emUgbV9zaXplOwotfTsKLQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBV
U0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3Qy
REltcGwuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5jcHAJKG5vbmV4aXN0
ZW50KQpAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmgiCi0KLSNpZiBVU0Uo
RElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJJbWFnZURlY29k
ZXJEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgi
Ci0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2luY2x1ZGUgPHdpbmNvZGVjLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IFNlY29uZHMgc2Nyb2xsSHlzdGVyZXNpc0R1cmF0
aW9uIHsgMzAwX21zIH07Ci0KLUJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGw6OkJhY2tp
bmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwoY29uc3QgSW50U2l6ZSYgc2l6ZSwgZmxvYXQgZGV2
aWNlU2NhbGVGYWN0b3IsIElEM0QxMURldmljZTEqIGRldmljZSkKLSAgICA6IEJhY2tpbmdTdG9y
ZUJhY2tlbmREaXJlY3QyRChzaXplLCBkZXZpY2UpCi0gICAgLCBtX3Njcm9sbGVkSHlzdGVyZXNp
cyhbdGhpc10oUEFMOjpIeXN0ZXJlc2lzU3RhdGUgc3RhdGUpIHsKLSAgICAgICAgaWYgKHN0YXRl
ID09IFBBTDo6SHlzdGVyZXNpc1N0YXRlOjpTdG9wcGVkKQotICAgICAgICAgICAgbV9zY3JvbGxT
dXJmYWNlID0gbnVsbHB0cjsKLSAgICAgICAgfSwgc2Nyb2xsSHlzdGVyZXNpc0R1cmF0aW9uKQot
ewotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IG1fc2l6ZTsKLSAgICBzY2FsZWRTaXplLnNjYWxl
KGRldmljZVNjYWxlRmFjdG9yKTsKLQotICAgIG1fZHhTdXJmYWNlID0gV2ViQ29yZTo6RGlyZWN0
MkQ6OmNyZWF0ZURYR0lTdXJmYWNlT2ZTaXplKHNjYWxlZFNpemUsIG1fZGV2aWNlLmdldCgpLCBm
YWxzZSk7Ci0gICAgbV9yZW5kZXJUYXJnZXQgPSBXZWJDb3JlOjpEaXJlY3QyRDo6Y3JlYXRlU3Vy
ZmFjZVJlbmRlclRhcmdldChtX2R4U3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBhdXRvIGJpdG1hcFBy
b3BlcnRpZXMgPSBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpOwotICAgIEhSRVNVTFQgaHIg
PSBtX3JlbmRlclRhcmdldC0+Q3JlYXRlU2hhcmVkQml0bWFwKF9fdXVpZG9mKElEWEdJU3VyZmFj
ZTEpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihtX2R4U3VyZmFjZS5nZXQoKSksICZiaXRtYXBQ
cm9wZXJ0aWVzLCAmbV9zdXJmYWNlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKLX0KLQotQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbDo6fkJhY2tpbmdTdG9yZUJh
Y2tlbmREaXJlY3QyREltcGwoKQotewotfQotCi12b2lkIEJhY2tpbmdTdG9yZUJhY2tlbmREaXJl
Y3QyREltcGw6OnNjcm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBJbnRTaXpl
JiBzY3JvbGxPZmZzZXQpCi17Ci0gICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gc2Nyb2xsUmVjdDsK
LSAgICBzb3VyY2VSZWN0Lm1vdmUoLXNjcm9sbE9mZnNldCk7Ci0gICAgc291cmNlUmVjdC5pbnRl
cnNlY3Qoc2Nyb2xsUmVjdCk7Ci0KLSAgICBpZiAoc291cmNlUmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghbV9zY3JvbGxTdXJmYWNlIHx8IHNjcm9sbFJlY3Quc2l6
ZSgpICE9IG1fc2Nyb2xsU3VyZmFjZVNpemUpIHsKLSNpZm5kZWYgX05ERUJVRwotICAgICAgICBB
U1NFUlQobV9zaXplLndpZHRoKCkgPj0gc2Nyb2xsUmVjdC5zaXplKCkud2lkdGgoKSk7Ci0gICAg
ICAgIEFTU0VSVChtX3NpemUuaGVpZ2h0KCkgPj0gc2Nyb2xsUmVjdC5zaXplKCkuaGVpZ2h0KCkp
OwotI2VuZGlmCi0gICAgICAgIG1fc2Nyb2xsU3VyZmFjZVNpemUgPSBzb3VyY2VSZWN0LnNpemUo
KTsKLSAgICAgICAgbV9keFNjcm9sbFN1cmZhY2UgPSBXZWJDb3JlOjpEaXJlY3QyRDo6Y3JlYXRl
RFhHSVN1cmZhY2VPZlNpemUobV9zY3JvbGxTdXJmYWNlU2l6ZSwgbV9kZXZpY2UuZ2V0KCksIGZh
bHNlKTsKLQotICAgICAgICBtX3Njcm9sbFN1cmZhY2UgPSBudWxscHRyOwotICAgICAgICBhdXRv
IGJpdG1hcFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpOwotICAgICAg
ICBIUkVTVUxUIGhyID0gbV9yZW5kZXJUYXJnZXQtPkNyZWF0ZVNoYXJlZEJpdG1hcChfX3V1aWRv
ZihJRFhHSVN1cmZhY2UxKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9keFNjcm9sbFN1cmZh
Y2UuZ2V0KCkpLCAmYml0bWFwUHJvcGVydGllcywgJm1fc2Nyb2xsU3VyZmFjZSk7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIH0KLQotICAgIGF1dG8gc291cmNl
UmVjdExvY2F0aW9uID0gSW50U2l6ZShzb3VyY2VSZWN0LngoKSwgc291cmNlUmVjdC55KCkpOwot
ICAgIGF1dG8gZGVzdFJlY3RMb2NhdGlvbiA9IEludFNpemUoKTsgLy8gVG9wIGxlZnQgY29ybmVy
IG9mIHNjcm9sbCBzdXJmYWNlCi0gICAgRGlyZWN0MkQ6OmNvcHlSZWN0RnJvbU9uZVN1cmZhY2VU
b0Fub3RoZXIobV9zdXJmYWNlLmdldCgpLCBtX3Njcm9sbFN1cmZhY2UuZ2V0KCksIHNvdXJjZVJl
Y3RMb2NhdGlvbiwgc291cmNlUmVjdCwgZGVzdFJlY3RMb2NhdGlvbik7Ci0KLSAgICBJbnRSZWN0
IGRlc3RSZWN0ID0gc2Nyb2xsUmVjdDsKLSAgICBkZXN0UmVjdC5zZXRIZWlnaHQoc291cmNlUmVj
dC5oZWlnaHQoKSk7Ci0gICAgZGVzdFJlY3Quc2V0V2lkdGgoc291cmNlUmVjdC53aWR0aCgpKTsK
LQotICAgIEludFNpemUgZGVzdFBvc2l0aW9uOwotICAgIGlmIChzY3JvbGxPZmZzZXQud2lkdGgo
KSA+IDAgfHwgc2Nyb2xsT2Zmc2V0LmhlaWdodCgpID4gMCkgewotICAgICAgICBkZXN0UG9zaXRp
b24uc2V0V2lkdGgoc3RkOjptaW4oc2Nyb2xsUmVjdC53aWR0aCgpLCBzY3JvbGxPZmZzZXQud2lk
dGgoKSkpOwotICAgICAgICBkZXN0UG9zaXRpb24uc2V0SGVpZ2h0KHN0ZDo6bWluKHNjcm9sbFJl
Y3QuaGVpZ2h0KCksIHNjcm9sbE9mZnNldC5oZWlnaHQoKSkpOwotICAgIH0KLQotICAgIGF1dG8g
c291cmNlU2Nyb2xsU3VyZmFjZUxvY2F0aW9uID0gSW50U2l6ZSgpOyAvLyBUb3AgbGVmdCBjb3Ju
ZXIgb2Ygc2Nyb2xsIHN1cmZhY2UKLSAgICBEaXJlY3QyRDo6Y29weVJlY3RGcm9tT25lU3VyZmFj
ZVRvQW5vdGhlcihtX3Njcm9sbFN1cmZhY2UuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgc291cmNl
U2Nyb2xsU3VyZmFjZUxvY2F0aW9uLCBkZXN0UmVjdCwgZGVzdFBvc2l0aW9uKTsKLQotICAgIG1f
c2Nyb2xsZWRIeXN0ZXJlc2lzLmltcHVsc2UoKTsKLX0KLQotSUQyRDFCaXRtYXBCcnVzaCogQmFj
a2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbDo6Yml0bWFwQnJ1c2goKQotewotICAgIGlmICgh
bV9yZW5kZXJUYXJnZXQgfHwgIW1fc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBpZiAoIW1fYml0bWFwQnJ1c2gpIHsKLSAgICAgICAgYXV0byBiaXRtYXBCcnVzaFByb3Bl
cnRpZXMgPSBEMkQxOjpCaXRtYXBCcnVzaFByb3BlcnRpZXMoKTsKLSAgICAgICAgYXV0byBicnVz
aFByb3BlcnRpZXMgPSBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKTsKLQotICAgICAgICBIUkVTVUxU
IGhyID0gbV9yZW5kZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcEJydXNoKG1fc3VyZmFjZS5nZXQoKSwg
JmJpdG1hcEJydXNoUHJvcGVydGllcywgJmJydXNoUHJvcGVydGllcywgJm1fYml0bWFwQnJ1c2gp
OwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1f
Yml0bWFwQnJ1c2guZ2V0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJl
Y3QyREltcGwuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuaAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVT
RShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRC5oIgot
I2luY2x1ZGUgPHBhbC9IeXN0ZXJlc2lzQWN0aXZpdHkuaD4KLQotaW50ZXJmYWNlIElEMkQxQml0
bWFwQnJ1c2g7Ci1pbnRlcmZhY2UgSURYR0lTdXJmYWNlMTsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBJbnRTaXplOwotCi1jbGFzcyBCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJ
bXBsIGZpbmFsIDogcHVibGljIEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRCB7Ci1wdWJsaWM6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbChjb25z
dCBJbnRTaXplJiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIElEM0QxMURldmljZTEqKTsKLSAg
ICB2aXJ0dWFsIH5CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsKCk7Ci0KLXByaXZhdGU6
Ci0gICAgdm9pZCBzY3JvbGwoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmKSBvdmVycmlk
ZTsKLSAgICBJRDJEMUJpdG1hcEJydXNoKiBiaXRtYXBCcnVzaCgpIG92ZXJyaWRlOwotCi0gICAg
SW50U2l6ZSBtX3Njcm9sbFN1cmZhY2VTaXplOwotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gbV9z
Y3JvbGxTdXJmYWNlOwotICAgIENPTVB0cjxJRFhHSVN1cmZhY2UxPiBtX2R4U2Nyb2xsU3VyZmFj
ZTsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXBCcnVzaD4gbV9iaXRtYXBCcnVzaDsKLQotICAgIFBB
TDo6SHlzdGVyZXNpc0FjdGl2aXR5IG1fc2Nyb2xsZWRIeXN0ZXJlc2lzOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJE
LmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsNTUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotCi0jaWYgUExBVEZPUk0oV0lOKQot
Ci0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQyZDFfMWhlbHBlci5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLUNvbG9yOjpDb2xvcihEMkQxX0NPTE9SX0YgY29sb3IpCi0gICAgOiBD
b2xvcihjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KFNSR0JBPGZsb2F0PiB7IGNvbG9yLnIs
IGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSkpCi17Ci19Ci0KLUNvbG9yOjpvcGVyYXRvciBE
MkQxX0NPTE9SX0YoKSBjb25zdAotewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5
cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKLSAgICByZXR1cm4gRDJEMTo6Q29s
b3JGKHIsIGcsIGIsIGEpOwotfQotCi1Db2xvcjo6b3BlcmF0b3IgRDJEMV9WRUNUT1JfNEYoKSBj
b25zdAotewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5cGVMb3NzeTxTUkdCQTxm
bG9hdD4+KCkucmVzb2x2ZWQoKTsKLSAgICByZXR1cm4gRDJEMTo6VmVjdG9yNEYociwgZywgYiwg
YSk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0NvbXBsZXhUZXh0Q29udHJvbGxlckRpcmVjdFdyaXRlLmNwcAkocmV2aXNpb24gMjg3ODEyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJv
bGxlckRpcmVjdFdyaXRlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDE4MSArMCwwIEBACi0vKgot
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0qIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0qIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0q
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0qIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0qIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgotCi0jaWYgVVNFKERJ
UkVDVDJEKQotCi0jaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJG
b250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIlRleHRBbmFs
eXplckhlbHBlci5oIgotI2luY2x1ZGUgPGR3cml0ZV8zLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RhdGljIGJvb2wgc2hhcGUoSURXcml0ZVRleHRBbmFseXplciogYW5hbHl6ZXIsIGNv
bnN0IERXUklURV9TQ1JJUFRfQU5BTFlTSVMmIGFuYWx5c2lzLCBjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBmb250UGxhdGZvcm1EYXRhLCBjb25zdCBXQ0hBUiogdGV4dCwgdW5zaWduZWQgbGVuZ3Ro
LCB1bnNpZ25lZCBzdWdnZXN0ZWRDb3VudCwgVmVjdG9yPEdseXBoPiYgZ2x5cGhzLCBWZWN0b3I8
R2x5cGg+JiBjbHVzdGVyTWFwLCBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfVEVYVF9QUk9QRVJUSUVT
PiYgdGV4dFByb3BlcnRpZXMsIFZlY3RvcjxEV1JJVEVfU0hBUElOR19HTFlQSF9QUk9QRVJUSUVT
PiYgZ2x5cGhQcm9wZXJ0aWVzLCB1bnNpZ25lZCYgZ2x5cGhDb3VudCkKLXsKLSAgICBIUkVTVUxU
IHNoYXBlUmVzdWx0ID0gRV9QRU5ESU5HOwotCi0gICAgZG8gewotICAgICAgICBzaGFwZVJlc3Vs
dCA9IGFuYWx5emVyLT5HZXRHbHlwaHModGV4dCwgbGVuZ3RoLCBmb250UGxhdGZvcm1EYXRhLmR3
Rm9udEZhY2UoKSwgZm9udFBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRh
dGlvbjo6VmVydGljYWwsIGZhbHNlLAotICAgICAgICAgICAgJmFuYWx5c2lzLCBudWxscHRyLCBu
dWxscHRyLCBudWxscHRyLCBudWxscHRyLCAwLCBzdWdnZXN0ZWRDb3VudCwgY2x1c3Rlck1hcC5k
YXRhKCksIHRleHRQcm9wZXJ0aWVzLmRhdGEoKSwKLSAgICAgICAgICAgIGdseXBocy5kYXRhKCks
IGdseXBoUHJvcGVydGllcy5kYXRhKCksICZnbHlwaENvdW50KTsKLQotICAgICAgICBpZiAoc2hh
cGVSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkgewotICAgICAgICAgICAgLy8gTmVlZCB0byByZXNp
emUgb3VyIGJ1ZmZlcnMgKGV4Y2VwdCBmb3IgY2x1c3Rlck1hcC4gSXQgaXMgYWx3YXlzIHRoZSBs
ZW5ndGggb2YgdGhlIHN0cmluZykuCi0gICAgICAgICAgICBnbHlwaHMucmVzaXplKGdseXBocy5z
aXplKCkgKiAyKTsKLSAgICAgICAgICAgIHRleHRQcm9wZXJ0aWVzLnJlc2l6ZShnbHlwaHMuc2l6
ZSgpKTsKLSAgICAgICAgICAgIGdseXBoUHJvcGVydGllcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7
Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlIChzaGFwZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsK
LQotICAgIGlmIChGQUlMRUQoc2hhcGVSZXN1bHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxl
Y3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQg
bGVuZ3RoLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgY29uc3QgRm9udCogZm9udCkKLXsKLSAg
ICBpZiAoIWZvbnQpIHsKLSAgICAgICAgLy8gQ3JlYXRlIGEgcnVuIG9mIG1pc3NpbmcgZ2x5cGhz
IGZyb20gdGhlIHByaW1hcnkgZm9udC4KLSAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5k
KENvbXBsZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBzdHJpbmdM
b2NhdGlvbiwgbGVuZ3RoLCAwLCBsZW5ndGgsIG1fcnVuLmx0cigpKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBhdXRvJiBmb250UGxhdGZvcm1EYXRhID0gZm9udC0+cGxhdGZvcm1E
YXRhKCk7Ci0KLSAgICB3Y2hhcl90IGxvY2FsZU5hbWVbTE9DQUxFX05BTUVfTUFYX0xFTkdUSF0g
PSB7IH07Ci0gICAgaW50IGxvY2FsZUxlbmd0aCA9IEdldFVzZXJEZWZhdWx0TG9jYWxlTmFtZShy
ZWludGVycHJldF9jYXN0PExQV1NUUj4oJmxvY2FsZU5hbWUpLCBMT0NBTEVfTkFNRV9NQVhfTEVO
R1RIKTsKLSAgICBSRUxFQVNFX0FTU0VSVChsb2NhbGVMZW5ndGggPCBMT0NBTEVfTkFNRV9NQVhf
TEVOR1RIKTsKLQotICAgIFZlY3RvcjxEV1JJVEVfRk9OVF9GRUFUVVJFPiBmb250RmVhdHVyZXMo
MSk7Ci0gICAgZm9udEZlYXR1cmVzWzBdLm5hbWVUYWcgPSBEV1JJVEVfRk9OVF9GRUFUVVJFX1RB
R19LRVJOSU5HOwotICAgIGZvbnRGZWF0dXJlc1swXS5wYXJhbWV0ZXIgPSBtX2ZvbnQuZW5hYmxl
S2VybmluZygpID8gMSA6IDA7Ci0KLSAgICBpZiAoZm9udFBsYXRmb3JtRGF0YS5vcmllbnRhdGlv
bigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpCi0gICAgICAgIGZvbnRGZWF0dXJlcy5h
cHBlbmQoe0RXUklURV9GT05UX0ZFQVRVUkVfVEFHX1ZFUlRJQ0FMX1dSSVRJTkcsIDF9KTsKLQot
ICAgIERXUklURV9UWVBPR1JBUEhJQ19GRUFUVVJFUyB1c2VkRmVhdHVyZXM7Ci0gICAgdXNlZEZl
YXR1cmVzLmZlYXR1cmVzID0gZm9udEZlYXR1cmVzLmRhdGEoKTsKLSAgICB1c2VkRmVhdHVyZXMu
ZmVhdHVyZUNvdW50ID0gZm9udEZlYXR1cmVzLnNpemUoKTsKLQotICAgIFZlY3Rvcjxjb25zdCBE
V1JJVEVfVFlQT0dSQVBISUNfRkVBVFVSRVMqPiBmZWF0dXJlczsKLSAgICBmZWF0dXJlcy5hcHBl
bmQoJnVzZWRGZWF0dXJlcyk7Ci0KLSAgICBDT01QdHI8SURXcml0ZVRleHRBbmFseXplcj4gYW5h
bHl6ZXI7Ci0gICAgSFJFU1VMVCBociA9IERpcmVjdFdyaXRlOjpmYWN0b3J5KCktPkNyZWF0ZVRl
eHRBbmFseXplcigmYW5hbHl6ZXIpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OwotCi0gICAgVGV4dEFuYWx5emVySGVscGVyIGhlbHBlcihyZWludGVycHJldF9jYXN0PExQV1NU
Uj4oJmxvY2FsZU5hbWUpLCByZWludGVycHJldF9jYXN0PExQQ1dTVFI+KGNwKSwgbGVuZ3RoKTsK
LQotICAgIGhyID0gYW5hbHl6ZXItPkFuYWx5emVTY3JpcHQoJmhlbHBlciwgMCwgbGVuZ3RoLCAm
aGVscGVyKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIHVuc2ln
bmVkIHRvdGFsU3VnZ2VzdGVkQ291bnQgPSAoMyAqIGxlbmd0aCAvIDIgKyAxNik7Ci0KLSAgICBW
ZWN0b3I8R2x5cGg+IGdseXBoczsKLSAgICBWZWN0b3I8R2x5cGg+IGNsdXN0ZXJNYXA7Ci0gICAg
VmVjdG9yPERXUklURV9TSEFQSU5HX1RFWFRfUFJPUEVSVElFUz4gdGV4dFByb3BlcnRpZXM7Ci0g
ICAgVmVjdG9yPERXUklURV9TSEFQSU5HX0dMWVBIX1BST1BFUlRJRVM+IGdseXBoUHJvcGVydGll
czsKLSAgICBWZWN0b3I8RkxPQVQ+IGdseXBoQWR2YW5jZXM7Ci0gICAgVmVjdG9yPERXUklURV9H
TFlQSF9PRkZTRVQ+IGdseXBoT2Zmc2V0czsKLSAgICBWZWN0b3I8RmxvYXRQb2ludD4gb3JpZ2lu
czsKLSAgICBWZWN0b3I8RmxvYXRTaXplPiBhZHZhbmNlczsKLSAgICBWZWN0b3I8dW5zaWduZWQ+
IHN0cmluZ0luZGljZXM7Ci0KLSAgICBnbHlwaHMucmVzZXJ2ZUNhcGFjaXR5KHRvdGFsU3VnZ2Vz
dGVkQ291bnQpOwotICAgIGNsdXN0ZXJNYXAucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7Ci0gICAg
dGV4dFByb3BlcnRpZXMucmVzZXJ2ZUNhcGFjaXR5KHRvdGFsU3VnZ2VzdGVkQ291bnQpOwotICAg
IGdseXBoUHJvcGVydGllcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdnZXN0ZWRDb3VudCk7Ci0g
ICAgZ2x5cGhBZHZhbmNlcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdnZXN0ZWRDb3VudCk7Ci0g
ICAgZ2x5cGhPZmZzZXRzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1Z2dlc3RlZENvdW50KTsKLSAg
ICBvcmlnaW5zLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1Z2dlc3RlZENvdW50KTsKLSAgICBhZHZh
bmNlcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdnZXN0ZWRDb3VudCk7Ci0gICAgc3RyaW5nSW5k
aWNlcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdnZXN0ZWRDb3VudCk7Ci0KLSAgICBmb3IgKGNv
bnN0IGF1dG8mIHJ1biA6IGhlbHBlci5tX2FuYWx5emVkUnVucykgewotICAgICAgICBjb25zdCBV
Q2hhciogY3VycmVudENQID0gY3AgKyBydW4uc3RhcnRQb3NpdGlvbjsKLSAgICAgICAgTFBDV1NU
UiB0ZXh0UG9zaXRpb24gPSByZWludGVycHJldF9jYXN0PExQQ1dTVFI+KGN1cnJlbnRDUCk7Ci0K
LSAgICAgICAgdW5zaWduZWQgc3VnZ2VzdGVkQ291bnQgPSAoMyAqIHJ1bi5sZW5ndGggLyAyICsg
MTYpOwotICAgICAgICBnbHlwaHMucmVzaXplKHN1Z2dlc3RlZENvdW50KTsKLSAgICAgICAgY2x1
c3Rlck1hcC5yZXNpemUocnVuLmxlbmd0aCk7Ci0gICAgICAgIHRleHRQcm9wZXJ0aWVzLnJlc2l6
ZShzdWdnZXN0ZWRDb3VudCk7Ci0gICAgICAgIGdseXBoUHJvcGVydGllcy5yZXNpemUoc3VnZ2Vz
dGVkQ291bnQpOwotCi0gICAgICAgIHVuc2lnbmVkIGdseXBoQ291bnQgPSAwOwotICAgICAgICBp
ZiAoIXNoYXBlKGFuYWx5emVyLmdldCgpLCBydW4uYW5hbHlzaXMsIGZvbnRQbGF0Zm9ybURhdGEs
IHRleHRQb3NpdGlvbiwgcnVuLmxlbmd0aCwgc3VnZ2VzdGVkQ291bnQsIGdseXBocywgY2x1c3Rl
ck1hcCwgdGV4dFByb3BlcnRpZXMsIGdseXBoUHJvcGVydGllcywgZ2x5cGhDb3VudCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZ2x5cGhzLnNocmluayhnbHlwaENvdW50KTsKLSAg
ICAgICAgdGV4dFByb3BlcnRpZXMuc2hyaW5rKGdseXBoQ291bnQpOwotICAgICAgICBnbHlwaFBy
b3BlcnRpZXMuc2hyaW5rKGdseXBoQ291bnQpOwotICAgICAgICBnbHlwaEFkdmFuY2VzLnJlc2l6
ZShnbHlwaENvdW50KTsKLSAgICAgICAgZ2x5cGhPZmZzZXRzLnJlc2l6ZShnbHlwaENvdW50KTsK
LQotICAgICAgICBIUkVTVUxUIHBsYWNlbWVudFJlc3VsdCA9IGFuYWx5emVyLT5HZXRHbHlwaFBs
YWNlbWVudHModGV4dFBvc2l0aW9uLCBjbHVzdGVyTWFwLmRhdGEoKSwgdGV4dFByb3BlcnRpZXMu
ZGF0YSgpLCBydW4ubGVuZ3RoLAotICAgICAgICAgICAgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhQcm9w
ZXJ0aWVzLmRhdGEoKSwgZ2x5cGhDb3VudCwgZm9udFBsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCks
Ci0gICAgICAgICAgICBmb250UGxhdGZvcm1EYXRhLnNpemUoKSwgZm9udFBsYXRmb3JtRGF0YS5v
cmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwsIG1fcnVuLmx0cigpLAot
ICAgICAgICAgICAgJnJ1bi5hbmFseXNpcywgcmVpbnRlcnByZXRfY2FzdDxMUENXU1RSPihsb2Nh
bGVOYW1lKSwgCi0gICAgICAgICAgICBmZWF0dXJlcy5kYXRhKCksICZydW4ubGVuZ3RoLCAxLAot
ICAgICAgICAgICAgZ2x5cGhBZHZhbmNlcy5kYXRhKCksIGdseXBoT2Zmc2V0cy5kYXRhKCkpOwot
ICAgICAgICBpZiAoRkFJTEVEKHBsYWNlbWVudFJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgLy8gQ29udmVydCBhbGwgY2hhcnMgdGhhdCBzaG91bGQgYmUgdHJlYXRlZCBh
cyBzcGFjZXMgdG8gdXNlIHRoZSBzcGFjZSBnbHlwaC4KLSAgICAgICAgLy8gV2UgYWxzbyBjcmVh
dGUgYSBtYXAgdGhhdCBhbGxvd3MgdXMgdG8gcXVpY2tseSBnbyBmcm9tIHNwYWNlIGdseXBocyBi
YWNrIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVycy4KLSAgICAgICAgZmxvYXQgc3Bh
Y2VXaWR0aCA9IGZvbnQtPnNwYWNlV2lkdGgoKSAtIGZvbnQtPnN5bnRoZXRpY0JvbGRPZmZzZXQo
KTsKLQotICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHJ1bi5sZW5ndGg7ICsraykgewotICAg
ICAgICAgICAgVUNoYXIgY2ggPSAqKGN1cnJlbnRDUCArIGspOwotICAgICAgICAgICAgYm9vbCB0
cmVhdEFzU3BhY2UgPSBGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoKTsKLSAgICAgICAgICAg
IGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNaZXJvV2lk
dGhTcGFjZShjaCk7Ci0gICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlIHx8IHRyZWF0QXNaZXJv
V2lkdGhTcGFjZSkgewotICAgICAgICAgICAgICAgIC8vIFN1YnN0aXR1dGUgaW4gdGhlIHNwYWNl
IGdseXBoIGF0IHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbiB0aGUgZ2x5cGhzCi0gICAgICAgICAg
ICAgICAgLy8gYXJyYXkuCi0gICAgICAgICAgICAgICAgZ2x5cGhzW2NsdXN0ZXJNYXBba11dID0g
Zm9udC0+c3BhY2VHbHlwaCgpOwotICAgICAgICAgICAgICAgIGdseXBoQWR2YW5jZXNbY2x1c3Rl
ck1hcFtrXV0gPSB0cmVhdEFzU3BhY2UgPyBzcGFjZVdpZHRoIDogMDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIG9yaWdpbnMucmVzaXplKGdseXBoQ291bnQpOwotICAgICAg
ICBhZHZhbmNlcy5yZXNpemUoZ2x5cGhDb3VudCk7Ci0gICAgICAgIHN0cmluZ0luZGljZXMucmVz
aXplKGdseXBoQ291bnQpOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ2x5cGhD
b3VudDsgKytpKSB7Ci0gICAgICAgICAgICBzdHJpbmdJbmRpY2VzW2ldID0gaTsKLSAgICAgICAg
ICAgIG9yaWdpbnNbaV0gPSBGbG9hdFBvaW50KGdseXBoT2Zmc2V0c1tpXS5hZHZhbmNlT2Zmc2V0
LCBnbHlwaE9mZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQpOwotICAgICAgICAgICAgYWR2YW5jZXNb
aV0gPSBGbG9hdFNpemUoZ2x5cGhBZHZhbmNlc1tpXSwgMCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShhZHZhbmNl
cywgb3JpZ2lucywgZ2x5cGhzLCBzdHJpbmdJbmRpY2VzLCBGbG9hdFNpemUoKSwgKmZvbnQsIGN1
cnJlbnRDUCwgMCwgcnVuLmxlbmd0aCwgMCwgcnVuLmxlbmd0aCwgbV9ydW4ubHRyKCkpKTsKLSAg
ICB9Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9s
bGVyVW5pc2NyaWJlLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKIAotI2lmICFVU0UoRElSRUNUMkQpCi0KICNp
bmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUg
IkhXbmREQy5oIgpAQCAtMjc1LDUgKzI3MywzIEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVy
Ojpjb2xsZWN0Q29tcGwKIH0KIAogfQotCi0jZW5kaWYgLy8gIVVTRShESVJFQ1QyRCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9E
aXJlY3QyRE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDEyNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxw
IFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkg
THRkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEJyZW50IEZ1bGdoYW0gPGJmdWxnaGFtQHdlYmtp
dC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMuTC4KLSAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkRpcmVjdDJET3BlcmF0aW9ucy5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0j
aW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24u
aCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGVEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgotI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1ZGUgPGFs
Z29yaXRobT4KLSNpbmNsdWRlIDxkMmQxLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVz
cGFjZSBEaXJlY3QyRCB7Ci0KLWVudW0gUGF0dGVybkFkanVzdG1lbnQgeyBOb0FkanVzdG1lbnQs
IEFkanVzdFBhdHRlcm5Gb3JHbG9iYWxBbHBoYSB9OwotZW51bSBBbHBoYVByZXNlcnZhdGlvbiB7
IERvTm90UHJlc2VydmVBbHBoYSwgUHJlc2VydmVBbHBoYSB9OwotCi0vLyBGSVhNRTogUmVwbGFj
ZSBvbmNlIEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZUNvcm5lcldpZHRoRm9yU3Ryb2tlV2lk
dGgoKQotLy8gaXMgcmVmYWN0b3JlZCBhcyBhIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24uCi1zdGF0
aWMgZmxvYXQgZGFzaGVkTGluZUNvcm5lcldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tl
V2lkdGgsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlLCBmbG9hdCBzdHJva2VUaGlja25lc3MpCi17
Ci0gICAgcmV0dXJuIHN0cm9rZVN0eWxlID09IERvdHRlZFN0cm9rZSA/IHN0cm9rZVRoaWNrbmVz
cyA6IHN0ZDo6bWluKDIuMGYgKiBzdHJva2VUaGlja25lc3MsIHN0ZDo6bWF4KHN0cm9rZVRoaWNr
bmVzcywgc3Ryb2tlV2lkdGggLyAzLjBmKSk7Ci19Ci0KLS8vIEZJWE1FOiBSZXBsYWNlIG9uY2Ug
R3JhcGhpY3NDb250ZXh0OjpkYXNoZWRMaW5lUGF0dGVybldpZHRoRm9yU3Ryb2tlV2lkdGgoKQot
Ly8gaXMgcmVmYWN0b3JlZCBhcyBhIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24uCi1zdGF0aWMgZmxv
YXQgZGFzaGVkTGluZVBhdHRlcm5XaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRo
LCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQotewotICAg
IHJldHVybiBzdHJva2VTdHlsZSA9PSBEb3R0ZWRTdHJva2UgPyBzdHJva2VUaGlja25lc3MgOiBz
dGQ6Om1pbigzLjBmICogc3Ryb2tlVGhpY2tuZXNzLCBzdGQ6Om1heChzdHJva2VUaGlja25lc3Ms
IHN0cm9rZVdpZHRoIC8gMy4wZikpOwotfQotCi0vLyBGSVhNRTogUmVwbGFjZSBvbmNlIEdyYXBo
aWNzQ29udGV4dDo6ZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJuQW5kU3Ryb2tlV2lk
dGgoKQotLy8gaXMgcmVmYWN0b3JlZCBhcyBhIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24uCi1zdGF0
aWMgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJuQW5kU3Ryb2tlV2lkdGgo
ZmxvYXQgcGF0dGVybldpZHRoLCBmbG9hdCBzdHJva2VXaWR0aCkKLXsKLSAgICAvLyBQYXR0ZXJu
IHN0YXJ0cyB3aXRoIGZ1bGwgZmlsbCBhbmQgZW5kcyB3aXRoIHRoZSBlbXB0eSBmaWxsLgotICAg
IC8vIDEuIExldCdzIHN0YXJ0IHdpdGggdGhlIGVtcHR5IHBoYXNlIGFmdGVyIHRoZSBjb3JuZXIu
Ci0gICAgLy8gMi4gQ2hlY2sgaWYgd2UndmUgZ290IG9kZCBvciBldmVuIG51bWJlciBvZiBwYXR0
ZXJucyBhbmQgd2hldGhlciB0aGV5IGZ1bGx5IGNvdmVyIHRoZSBsaW5lLgotICAgIC8vIDMuIElu
IGNhc2Ugb2YgZXZlbiBudW1iZXIgb2YgcGF0dGVybnMgYW5kL29yIHJlbWFpbmRlciwgbW92ZSB0
aGUgcGF0dGVybiBzdGFydCBwb3NpdGlvbgotICAgIC8vIHNvIHRoYXQgdGhlIHBhdHRlcm4gaXMg
YmFsYW5jZWQgYmV0d2VlbiB0aGUgY29ybmVycy4KLSAgICBmbG9hdCBwYXR0ZXJuT2Zmc2V0ID0g
cGF0dGVybldpZHRoOwotICAgIGludCBudW1iZXJPZlNlZ21lbnRzID0gc3RkOjpmbG9vcihzdHJv
a2VXaWR0aCAvIHBhdHRlcm5XaWR0aCk7Ci0gICAgYm9vbCBvZGROdW1iZXJPZlNlZ21lbnRzID0g
bnVtYmVyT2ZTZWdtZW50cyAlIDI7Ci0gICAgZmxvYXQgcmVtYWluZGVyID0gc3Ryb2tlV2lkdGgg
LSAobnVtYmVyT2ZTZWdtZW50cyAqIHBhdHRlcm5XaWR0aCk7Ci0gICAgaWYgKG9kZE51bWJlck9m
U2VnbWVudHMgJiYgcmVtYWluZGVyKQotICAgICAgICBwYXR0ZXJuT2Zmc2V0IC09IHJlbWFpbmRl
ciAvIDIuMGY7Ci0gICAgZWxzZSBpZiAoIW9kZE51bWJlck9mU2VnbWVudHMpIHsKLSAgICAgICAg
aWYgKHJlbWFpbmRlcikKLSAgICAgICAgICAgIHBhdHRlcm5PZmZzZXQgKz0gcGF0dGVybk9mZnNl
dCAtIChwYXR0ZXJuV2lkdGggKyByZW1haW5kZXIpIC8gMi4wZjsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcGF0dGVybk9mZnNldCArPSBwYXR0ZXJuV2lkdGggLyAyLjBmOwotICAgIH0KLQot
ICAgIHJldHVybiBwYXR0ZXJuT2Zmc2V0OwotfQotCi0vLyBGSVhNRTogUmVwbGFjZSBvbmNlIEdy
YXBoaWNzQ29udGV4dDo6Y2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoKQotLy8gaXMgcmVmYWN0
b3JlZCBhcyBhIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24uCi1zdGF0aWMgVmVjdG9yPEZsb2F0UG9p
bnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNWZXJ0aWNhbExpbmUsIGZsb2F0
IGNvcm5lcldpZHRoLCBGbG9hdFBvaW50IHBvaW50MSwgRmxvYXRQb2ludCBwb2ludDIpCi17Ci0g
ICAgLy8gQ2VudGVyIGxpbmUgYW5kIGN1dCBvZmYgY29ybmVycyBmb3IgcGF0dGVybiBwYWludGlu
Zy4KLSAgICBpZiAoaXNWZXJ0aWNhbExpbmUpIHsKLSAgICAgICAgZmxvYXQgY2VudGVyT2Zmc2V0
ID0gKHBvaW50Mi54KCkgLSBwb2ludDEueCgpKSAvIDIuMGY7Ci0gICAgICAgIHBvaW50MS5tb3Zl
KGNlbnRlck9mZnNldCwgY29ybmVyV2lkdGgpOwotICAgICAgICBwb2ludDIubW92ZSgtY2VudGVy
T2Zmc2V0LCAtY29ybmVyV2lkdGgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0IGNlbnRl
ck9mZnNldCA9IChwb2ludDIueSgpIC0gcG9pbnQxLnkoKSkgLyAyLjBmOwotICAgICAgICBwb2lu
dDEubW92ZShjb3JuZXJXaWR0aCwgY2VudGVyT2Zmc2V0KTsKLSAgICAgICAgcG9pbnQyLm1vdmUo
LWNvcm5lcldpZHRoLCAtY2VudGVyT2Zmc2V0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4geyBwb2lu
dDEsIHBvaW50MiB9OwotfQotCi0KLW5hbWVzcGFjZSBTdGF0ZSB7Ci0KLXZvaWQgc2V0U3Ryb2tl
VGhpY2tuZXNzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGZsb2F0
IHN0cm9rZVRoaWNrbmVzcykKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0U3Ryb2tlVGhpY2tu
ZXNzKHN0cm9rZVRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgc2V0U3Ryb2tlU3R5bGUoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUp
Ci17Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNldFN0cm9rZVN0eWxlKHN0cm9rZVN0eWxlKTsKLX0K
LQotdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBs
YXRmb3JtQ29udGV4dCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVu
ZE1vZGUgYmxlbmRNb2RlKQotewotCi0gICAgRDJEMV9CTEVORF9NT0RFIHRhcmdldEJsZW5kTW9k
ZSA9IEQyRDFfQkxFTkRfTU9ERV9NVUxUSVBMWTsKLSAgICBEMkQxX0NPTVBPU0lURV9NT0RFIHRh
cmdldENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX0ZPUkNFX0RXT1JEOwotCi0g
ICAgaWYgKGJsZW5kTW9kZSAhPSBCbGVuZE1vZGU6Ok5vcm1hbCkgewotICAgICAgICBzd2l0Y2gg
KGJsZW5kTW9kZSkgewotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6TXVsdGlwbHk6Ci0gICAgICAg
ICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfTVVMVElQTFk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OlNjcmVlbjoKLSAgICAgICAgICAg
IHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9TQ1JFRU47Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6Ok92ZXJsYXk6Ci0gICAgICAgICAgICB0YXJn
ZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfT1ZFUkxBWTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6RGFya2VuOgotICAgICAgICAgICAgdGFyZ2V0Qmxl
bmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0RBUktFTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEJsZW5kTW9kZTo6TGlnaHRlbjoKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9k
ZSA9IEQyRDFfQkxFTkRfTU9ERV9MSUdIVEVOOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQmxlbmRNb2RlOjpDb2xvckRvZGdlOgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2Rl
ID0gRDJEMV9CTEVORF9NT0RFX0NPTE9SX0RPREdFOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQmxlbmRNb2RlOjpDb2xvckJ1cm46Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1v
ZGUgPSBEMkQxX0JMRU5EX01PREVfQ09MT1JfQlVSTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEJsZW5kTW9kZTo6SGFyZExpZ2h0OgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRN
b2RlID0gRDJEMV9CTEVORF9NT0RFX0hBUkRfTElHSFQ7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBCbGVuZE1vZGU6OlNvZnRMaWdodDoKLSAgICAgICAgICAgIHRhcmdldEJsZW5k
TW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9TT0ZUX0xJR0hUOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQmxlbmRNb2RlOjpEaWZmZXJlbmNlOgotICAgICAgICAgICAgdGFyZ2V0Qmxl
bmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0RJRkZFUkVOQ0U7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OkV4Y2x1c2lvbjoKLSAgICAgICAgICAgIHRhcmdldEJs
ZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9FWENMVVNJT047Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBCbGVuZE1vZGU6Okh1ZToKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9k
ZSA9IEQyRDFfQkxFTkRfTU9ERV9IVUU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBCbGVuZE1vZGU6OlNhdHVyYXRpb246Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBE
MkQxX0JMRU5EX01PREVfU0FUVVJBVElPTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEJsZW5kTW9kZTo6Q29sb3I6Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQx
X0JMRU5EX01PREVfQ09MT1I7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVu
ZE1vZGU6Okx1bWlub3NpdHk6Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JM
RU5EX01PREVfTFVNSU5PU0lUWTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJs
ZW5kTW9kZTo6UGx1c0RhcmtlcjoKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFf
QkxFTkRfTU9ERV9EQVJLRVJfQ09MT1I7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBCbGVuZE1vZGU6OlBsdXNMaWdodGVyOgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0g
RDJEMV9CTEVORF9NT0RFX0xJR0hURVJfQ09MT1I7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgc3dpdGNoIChjb21wb3NpdGVPcGVyYXRpb24pIHsKLSAgICAgICAgY2FzZSBDb21w
b3NpdGVPcGVyYXRvcjo6Q2xlYXI6Ci0gICAgICAgICAgICAvLyBGSVhNRTogdGFyZ2V0QmxlbmRN
b2RlID0gRDJEMV9CTEVORF9NT0RFX0NMRUFSOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHk6Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3Np
dGVNb2RlID0gRDJEMV9DT01QT1NJVEVfTU9ERV9TT1VSQ0VfQ09QWTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyOgotICAgICAg
ICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfU09VUkNFX09W
RVI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6
U291cmNlSW46Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJ
VEVfTU9ERV9TT1VSQ0VfSU47Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21w
b3NpdGVPcGVyYXRvcjo6U291cmNlT3V0OgotICAgICAgICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9k
ZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfU09VUkNFX09VVDsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9wOgotICAgICAgICAgICAg
dGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfU09VUkNFX0FUT1A7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGlu
YXRpb25PdmVyOgotICAgICAgICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9T
SVRFX01PREVfREVTVElOQVRJT05fT1ZFUjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbkluOgotICAgICAgICAgICAgdGFyZ2V0
Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfREVTVElOQVRJT05fSU47Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRp
b25PdXQ6Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVf
TU9ERV9ERVNUSU5BVElPTl9PVVQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25BdG9wOgotICAgICAgICAgICAgdGFyZ2V0Q29t
cG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfREVTVElOQVRJT05fQVRPUDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpYT1I6Ci0gICAg
ICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVfTU9ERV9YT1I7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0Rh
cmtlcjoKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9EQVJL
RU47Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6
UGx1c0xpZ2h0ZXI6Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01P
REVfTElHSFRFTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9w
ZXJhdG9yOjpEaWZmZXJlbmNlOgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9C
TEVORF9NT0RFX0RJRkZFUkVOQ0U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRCbGVuZEFuZENvbXBvc2l0ZU1vZGUodGFyZ2V0
QmxlbmRNb2RlLCB0YXJnZXRDb21wb3NpdGVNb2RlKTsKLX0KLQotdm9pZCBzZXRTaG91bGRBbnRp
YWxpYXMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgYm9vbCBlbmFi
bGUpCi17Ci0gICAgYXV0byBhbnRpYWxpYXNNb2RlID0gZW5hYmxlID8gRDJEMV9BTlRJQUxJQVNf
TU9ERV9QRVJfUFJJTUlUSVZFIDogRDJEMV9BTlRJQUxJQVNfTU9ERV9BTElBU0VEOwotICAgIHBs
YXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+U2V0QW50aWFsaWFzTW9kZShhbnRpYWxpYXNN
b2RlKTsKLX0KLQotdm9pZCBzZXRDVE0oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3Jt
Q29udGV4dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQVNTRVJU
KHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJl
bmRlclRhcmdldCgpLT5TZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKLQotICAgIGlmIChhdXRvKiBn
cmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxhdGZvcm1Db250ZXh0LmdyYXBoaWNzQ29udGV4dFBy
aXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZS0+c2V0Q1RNKHRyYW5zZm9y
bSk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBnZXRDVE0oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQm
IHBsYXRmb3JtQ29udGV4dCkKLXsKLSAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0LnJlbmRlclRh
cmdldCgpKTsKLSAgICBEMkQxX01BVFJJWF8zWDJfRiBjdXJyZW50VHJhbnNmb3JtOwotICAgIHBs
YXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+R2V0VHJhbnNmb3JtKCZjdXJyZW50VHJhbnNm
b3JtKTsKLSAgICByZXR1cm4gY3VycmVudFRyYW5zZm9ybTsKLX0KLQotSW50UmVjdCBnZXRDbGlw
Qm91bmRzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAg
RDJEMV9TSVpFX0YgY2xpcFNpemU7Ci0gICAgaWYgKGF1dG8gY2xpcExheWVyID0gcGxhdGZvcm1D
b250ZXh0LmNsaXBMYXllcigpKQotICAgICAgICBjbGlwU2l6ZSA9IGNsaXBMYXllci0+R2V0U2l6
ZSgpOwotICAgIGVsc2UKLSAgICAgICAgY2xpcFNpemUgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVy
VGFyZ2V0KCktPkdldFNpemUoKTsKLQotICAgIEZsb2F0UmVjdCBjbGlwQm91bmRzKEludFBvaW50
KCksIGNsaXBTaXplKTsKLQotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGNsaXBCb3VuZHMp
OwotfQotCi1GbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLQotICAgIHJldHVybiByZWN0OwotfQotCi1ib29sIGlzQWNjZWxlcmF0
ZWRDb250ZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0g
ICAgYXV0byByZW5kZXJQcm9wZXJ0aWVzID0gRDJEMTo6UmVuZGVyVGFyZ2V0UHJvcGVydGllcygp
OwotICAgIHJlbmRlclByb3BlcnRpZXMudHlwZSA9IEQyRDFfUkVOREVSX1RBUkdFVF9UWVBFX0hB
UkRXQVJFOwotICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPklzU3Vw
cG9ydGVkKCZyZW5kZXJQcm9wZXJ0aWVzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgU3RhdGUKLQot
RmlsbFNvdXJjZTo6RmlsbFNvdXJjZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICA6IGdsb2JhbEFscGhhKHN0YXRl
LmFscGhhKQotICAgICwgY29sb3Ioc3RhdGUuZmlsbENvbG9yKQotICAgICwgZmlsbFJ1bGUoc3Rh
dGUuZmlsbFJ1bGUpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQuaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwotICAgIGF1dG8mIHBsYXRmb3JtQ29udGV4dCA9ICpjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
OwotCi0gICAgaWYgKHN0YXRlLmZpbGxQYXR0ZXJuKSB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9y
bSB1c2VyVG9CYXNlQ1RNOyAvLyBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdp
bmRvd3MKLSAgICAgICAgYnJ1c2ggPSBzdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1Q
YXR0ZXJuKGNvbnRleHQsIHN0YXRlLmFscGhhLCB1c2VyVG9CYXNlQ1RNKTsKLSAgICB9IGVsc2Ug
aWYgKHN0YXRlLmZpbGxHcmFkaWVudCAmJiAhc3RhdGUuZmlsbEdyYWRpZW50LT5zdG9wcygpLmlz
RW1wdHkoKSkKLSAgICAgICAgYnJ1c2ggPSBzdGF0ZS5maWxsR3JhZGllbnQtPmNyZWF0ZUJydXNo
KHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBicnVz
aCA9IHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihjb2xvcik7Ci19Ci0KLVN0cm9rZVNv
dXJjZTo6U3Ryb2tlU291cmNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgIDogZ2xvYmFsQWxwaGEoc3RhdGUuYWxw
aGEpCi0gICAgLCB0aGlja25lc3Moc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKQotICAgICwgY29sb3Io
c3RhdGUuc3Ryb2tlQ29sb3IpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQuaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwotICAgIGF1dG8mIHBsYXRmb3JtQ29udGV4dCA9ICpjb250ZXh0LnBsYXRmb3JtQ29u
dGV4dCgpOwotCi0gICAgaWYgKHN0YXRlLnN0cm9rZVBhdHRlcm4pIHsKLSAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBuZWVk
ZWQgb24gV2luZG93cwotICAgICAgICBicnVzaCA9IHN0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0
ZVBsYXRmb3JtUGF0dGVybihjb250ZXh0LCBzdGF0ZS5hbHBoYSwgdXNlclRvQmFzZUNUTSk7Ci0g
ICAgfSBlbHNlIGlmIChzdGF0ZS5zdHJva2VHcmFkaWVudCkKLSAgICAgICAgYnJ1c2ggPSBzdGF0
ZS5zdHJva2VHcmFkaWVudC0+Y3JlYXRlQnJ1c2gocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdl
dCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGJydXNoID0gcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0
aENvbG9yKGNvbG9yKTsKLX0KLQotU2hhZG93U3RhdGU6OlNoYWRvd1N0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKLSAgICA6IG9mZnNldChzdGF0ZS5zaGFkb3dPZmZzZXQp
Ci0gICAgLCBibHVyKHN0YXRlLnNoYWRvd0JsdXIpCi0gICAgLCBjb2xvcihzdGF0ZS5zaGFkb3dD
b2xvcikKLSAgICAsIGlnbm9yZVRyYW5zZm9ybXMoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpCi0gICAgLCBnbG9iYWxBbHBoYShzdGF0ZS5hbHBoYSkKLSAgICAsIGdsb2JhbENvbXBvc2l0
ZU9wZXJhdG9yKHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yKQotewotfQotCi1ib29sIFNoYWRvd1N0
YXRlOjppc1Zpc2libGUoKSBjb25zdAotewotICAgIHJldHVybiBjb2xvci5pc1Zpc2libGUoKSAm
JiAob2Zmc2V0LndpZHRoKCkgfHwgb2Zmc2V0LmhlaWdodCgpIHx8IGJsdXIpOwotfQotCi1ib29s
IFNoYWRvd1N0YXRlOjppc1JlcXVpcmVkKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQpIGNvbnN0Ci17Ci0gICAgLy8gV2UgY2FuJ3QgYXZvaWQgU2hhZG93Qmx1ciBpZiB0
aGUgc2hhZG93IGhhcyBibHVyLgotICAgIGlmIChjb2xvci5pc1Zpc2libGUoKSAmJiBibHVyKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFdlIGNhbiBhdm9pZCBTaGFkb3dCbHVyIGFu
ZCBvcHRpbWl6ZSwgc2luY2Ugd2UncmUgbm90IGRyYXdpbmcgb24gYQotICAgIC8vIGNhbnZhcyBh
bmQgYm94IHNoYWRvd3MgYXJlIGFmZmVjdGVkIGJ5IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgu
Ci0gICAgaWYgKCFpZ25vcmVUcmFuc2Zvcm1zKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBXZSBjYW4gYXZvaWQgU2hhZG93Qmx1ciwgc2luY2UgdGhlcmUgYXJlIG5vIHRyYW5zZm9y
bWF0aW9ucyB0byBhcHBseSB0byB0aGUgY2FudmFzLgotICAgIGlmIChTdGF0ZTo6Z2V0Q1RNKHBs
YXRmb3JtQ29udGV4dCkuaXNJZGVudGl0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBPdGhlcndpc2UsIG5vIGNoYW5jZSBhdm9pZGluZyBTaGFkb3dCbHVyLgotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIHNldExpbmVDYXAoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBs
YXRmb3JtQ29udGV4dCwgTGluZUNhcCBsaW5lQ2FwKQotewotICAgIEQyRDFfQ0FQX1NUWUxFIGNh
cFN0eWxlID0gRDJEMV9DQVBfU1RZTEVfRkxBVDsKLSAgICBzd2l0Y2ggKGxpbmVDYXApIHsKLSAg
ICBjYXNlIExpbmVDYXA6OlJvdW5kOgotICAgICAgICBjYXBTdHlsZSA9IEQyRDFfQ0FQX1NUWUxF
X1JPVU5EOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExpbmVDYXA6OlNxdWFyZToKLSAgICAg
ICAgY2FwU3R5bGUgPSBEMkQxX0NBUF9TVFlMRV9TUVVBUkU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgTGluZUNhcDo6QnV0dDoKLSAgICBkZWZhdWx0OgotICAgICAgICBjYXBTdHlsZSA9IEQy
RDFfQ0FQX1NUWUxFX0ZMQVQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHBsYXRmb3Jt
Q29udGV4dC5zZXRMaW5lQ2FwKGNhcFN0eWxlKTsKLX0KLQotdm9pZCBzZXRMaW5lRGFzaChQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBEYXNoQXJyYXkmIGRh
c2hlcywgZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0RGFzaGVz
KGRhc2hlcyk7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNldERhc2hPZmZzZXQoZGFzaE9mZnNldCk7
Ci19Ci0KLXZvaWQgc2V0TGluZUpvaW4oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3Jt
Q29udGV4dCwgTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgRDJEMV9MSU5FX0pPSU4gam9pblN0
eWxlID0gRDJEMV9MSU5FX0pPSU5fTUlURVI7Ci0gICAgc3dpdGNoIChsaW5lSm9pbikgewotICAg
IGNhc2UgTGluZUpvaW46OlJvdW5kOgotICAgICAgICBqb2luU3R5bGUgPSBEMkQxX0xJTkVfSk9J
Tl9ST1VORDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lSm9pbjo6QmV2ZWw6Ci0gICAg
ICAgIGpvaW5TdHlsZSA9IEQyRDFfTElORV9KT0lOX0JFVkVMOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIExpbmVKb2luOjpNaXRlcjoKLSAgICBkZWZhdWx0OgotICAgICAgICBqb2luU3R5bGUg
PSBEMkQxX0xJTkVfSk9JTl9NSVRFUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcGxh
dGZvcm1Db250ZXh0LnNldExpbmVKb2luKGpvaW5TdHlsZSk7Ci19Ci0KLXZvaWQgc2V0TWl0ZXJM
aW1pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBmbG9hdCBtaXRl
ckxpbWl0KQotewotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRNaXRlckxpbWl0KG1pdGVyTGltaXQp
OwotfQotCi12b2lkIGZpbGxSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmlsbFNvdXJjZSYgZmlsbFNvdXJj
ZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAgIGF1dG8gY29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5z
ZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBkcmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQs
IHJlY3QsIHNoYWRvd1N0YXRlLCBbJnBsYXRmb3JtQ29udGV4dCwgcmVjdCwgJmZpbGxTb3VyY2Vd
KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgY29uc3QgRDJEMV9S
RUNUX0YgZDJkUmVjdCA9IHJlY3Q7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3Rhbmds
ZSgmZDJkUmVjdCwgZmlsbFNvdXJjZS5icnVzaC5nZXQoKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
ZmlsbFJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IFNoYWRvd1N0YXRlJiBz
aGFkb3dTdGF0ZSkKLXsKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVy
VGFyZ2V0KCk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0g
ICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCByZWN0LCBzaGFkb3dTdGF0ZSwgWyZw
bGF0Zm9ybUNvbnRleHQsIGNvbG9yLCByZWN0XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFy
Z2V0KSB7Ci0gICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwotICAgICAg
ICByZW5kZXJUYXJnZXQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIHBsYXRmb3JtQ29udGV4dC5i
cnVzaFdpdGhDb2xvcihjb2xvcikuZ2V0KCkpOwotICAgIH0pOwotfQotCi12b2lkIGZpbGxSb3Vu
ZGVkUmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IFNoYWRvd1N0
YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQu
cmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVf
Xyk7Ci0KLSAgICBjb25zdCBGbG9hdFJlY3QmIHIgPSByZWN0LnJlY3QoKTsKLSAgICBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWkgPSByZWN0LnJhZGlpKCk7Ci0gICAgYm9vbCBl
cXVhbFdpZHRocyA9IChyYWRpaS50b3BMZWZ0KCkud2lkdGgoKSA9PSByYWRpaS50b3BSaWdodCgp
LndpZHRoKCkgJiYgcmFkaWkudG9wUmlnaHQoKS53aWR0aCgpID09IHJhZGlpLmJvdHRvbUxlZnQo
KS53aWR0aCgpICYmIHJhZGlpLmJvdHRvbUxlZnQoKS53aWR0aCgpID09IHJhZGlpLmJvdHRvbVJp
Z2h0KCkud2lkdGgoKSk7Ci0gICAgYm9vbCBlcXVhbEhlaWdodHMgPSAocmFkaWkudG9wTGVmdCgp
LmhlaWdodCgpID09IHJhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSAmJiByYWRpaS5ib3R0b21M
ZWZ0KCkuaGVpZ2h0KCkgPT0gcmFkaWkudG9wUmlnaHQoKS5oZWlnaHQoKSAmJiByYWRpaS50b3BS
aWdodCgpLmhlaWdodCgpID09IHJhZGlpLmJvdHRvbVJpZ2h0KCkuaGVpZ2h0KCkpOwotICAgIGJv
b2wgaGFzQ3VzdG9tRmlsbCA9IGZhbHNlOyAvLyBGSVhNRTogV2h5IGlzbid0IGEgRmlsbFNvdXJj
ZSBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbj8KLSAgICBpZiAoIWhhc0N1c3RvbUZpbGwgJiYgZXF1
YWxXaWR0aHMgJiYgZXF1YWxIZWlnaHRzICYmIHJhZGlpLnRvcExlZnQoKS53aWR0aCgpICogMiA9
PSByLndpZHRoKCkgJiYgcmFkaWkudG9wTGVmdCgpLmhlaWdodCgpICogMiA9PSByLmhlaWdodCgp
KSB7Ci0gICAgICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgciwgc2hhZG93U3Rh
dGUsIFsmcGxhdGZvcm1Db250ZXh0LCBjb2xvciwgcmVjdCwgcmFkaWksIHJdKElEMkQxUmVuZGVy
VGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgICAgIGF1dG8gcm91bmRlZFJlY3QgPSBE
MkQxOjpSb3VuZGVkUmVjdChyLCByYWRpaS50b3BMZWZ0KCkud2lkdGgoKSwgcmFkaWkudG9wTGVm
dCgpLmhlaWdodCgpKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJvdW5kZWRSZWN0
YW5nbGUoJnJvdW5kZWRSZWN0LCBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoY29sb3Ip
LmdldCgpKTsKLSAgICAgICAgfSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUGF0aCBwYXRoOwot
ICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwotICAgICAgICBmaWxsUGF0aChwbGF0
Zm9ybUNvbnRleHQsIHBhdGgsIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0gICAgfQotfQotCi12b2lk
IGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cm91bmRlZEhvbGVSZWN0LCBjb25zdCBGaWxsU291cmNlJiBmaWxsU291cmNlLCBjb25zdCBTaGFk
b3dTdGF0ZSYgc2hhZG93U3RhdGUpCi17Ci0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0LnJlbmRlclRhcmdldCgpOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19M
SU5FX18pOwotCi0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkUmVjdChyZWN0KTsKLQotICAg
IGlmICghcm91bmRlZEhvbGVSZWN0LnJhZGlpKCkuaXNaZXJvKCkpCi0gICAgICAgIHBhdGguYWRk
Um91bmRlZFJlY3Qocm91bmRlZEhvbGVSZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIHBhdGguYWRk
UmVjdChyb3VuZGVkSG9sZVJlY3QucmVjdCgpKTsKLQotICAgIEZpbGxTb3VyY2UgZmlsbFdpdGhI
b2xlU291cmNlID0gZmlsbFNvdXJjZTsKLSAgICBmaWxsV2l0aEhvbGVTb3VyY2UuZmlsbFJ1bGUg
PSBXaW5kUnVsZTo6RXZlbk9kZDsKLQotICAgIGZpbGxQYXRoKHBsYXRmb3JtQ29udGV4dCwgcGF0
aCwgZmlsbFdpdGhIb2xlU291cmNlLCBzaGFkb3dTdGF0ZSk7Ci19Ci0KLXZvaWQgZmlsbFJlY3RX
aXRoR3JhZGllbnQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBJRDJEMUJydXNoKiBncmFkaWVudCkKLXsKLSAgICBwbGF0Zm9y
bUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgZHJhd1dpdGhvdXRTaGFkb3cocGxh
dGZvcm1Db250ZXh0LCBbJnBsYXRmb3JtQ29udGV4dCwgcmVjdCwgJmdyYWRpZW50XShJRDJEMVJl
bmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQy
ZFJlY3QgPSByZWN0OwotICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxSZWN0YW5nbGUoJmQyZFJl
Y3QsIGdyYWRpZW50KTsKLSAgICB9KTsKLX0KLQotdm9pZCBmaWxsUGF0aChQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBGaWxs
U291cmNlJiBmaWxsU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCi17Ci0g
ICAgcGF0aC5jbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9PUEVOKTsKLQot
ICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAg
IHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLQotICAgIENPTVB0cjxJRDJE
MUdlb21ldHJ5R3JvdXA+IHBhdGhUb0ZpbGw7Ci0gICAgcGF0aC5jcmVhdGVHZW9tZXRyeVdpdGhG
aWxsTW9kZShmaWxsU291cmNlLmZpbGxSdWxlLCBwYXRoVG9GaWxsKTsKLQotICAgIHBsYXRmb3Jt
Q29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBGdW5jdGlvbjx2b2lkKElEMkQxUmVu
ZGVyVGFyZ2V0Kik+IGRyYXdGdW5jdGlvbiA9IFsmcGxhdGZvcm1Db250ZXh0LCAmcGF0aFRvRmls
bCwgJmZpbGxTb3VyY2VdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5GaWxsR2VvbWV0cnkocGF0aFRvRmlsbC5nZXQoKSwgZmlsbFNvdXJj
ZS5icnVzaC5nZXQoKSk7Ci0gICAgfTsKLQotICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2libGUo
KSkgewotICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdS
ZWN0KCk7Ci0gICAgICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgYm91bmRpbmdS
ZWN0LCBzaGFkb3dTdGF0ZSwgV1RGTW92ZShkcmF3RnVuY3Rpb24pKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBXVEZNb3ZlKGRyYXdGdW5j
dGlvbikpOwotfQotCi12b2lkIGZpbGxQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0
Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IENvbG9yJiBjb2xvciwgY29uc3Qg
U2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEs
IF9fTElORV9fKTsKLQotICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+IHBhdGhUb0ZpbGw7
Ci0gICAgcGF0aC5jcmVhdGVHZW9tZXRyeVdpdGhGaWxsTW9kZShXaW5kUnVsZTo6RXZlbk9kZCwg
cGF0aFRvRmlsbCk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7
Ci0KLSAgICBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+IGRyYXdGdW5jdGlvbiA9
IFsmcGxhdGZvcm1Db250ZXh0LCAmcGF0aFRvRmlsbCwgY29sb3JdKElEMkQxUmVuZGVyVGFyZ2V0
KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsR2VvbWV0cnkocGF0
aFRvRmlsbC5nZXQoKSwgcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKGNvbG9yKS5nZXQo
KSk7Ci0gICAgfTsKLQotICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2libGUoKSkgewotICAgICAg
ICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7Ci0gICAg
ICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgYm91bmRpbmdSZWN0LCBzaGFkb3dT
dGF0ZSwgV1RGTW92ZShkcmF3RnVuY3Rpb24pKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZHJhd1dp
dGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBXVEZNb3ZlKGRyYXdGdW5jdGlvbikpOwotfQot
Ci12b2lkIHN0cm9rZVJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgsIGNvbnN0IFN0cm9rZVNv
dXJjZSYgc3Ryb2tlU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCi17Ci0g
ICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCByZWN0LCBzaGFkb3dTdGF0ZSwgWyZw
bGF0Zm9ybUNvbnRleHQsICZzdHJva2VTb3VyY2UsIHJlY3QsIGxpbmVXaWR0aF0oSUQyRDFSZW5k
ZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFn
cygxLCBfX0xJTkVfXyk7Ci0gICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0
OwotICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdSZWN0YW5nbGUoJmQyZFJlY3QsIHN0cm9rZVNv
dXJjZS5icnVzaC5nZXQoKSwgbGluZVdpZHRoLCBwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlU3R5bGUo
KSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgc3Ryb2tlUGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBTdHJva2VTb3VyY2Um
IHN0cm9rZVNvdXJjZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAgIGF1
dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLSAgICAKLSAgICBw
bGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0KLSAgICBGdW5jdGlvbjx2b2lk
KElEMkQxUmVuZGVyVGFyZ2V0Kik+IGRyYXdGdW5jdGlvbiA9IFsmcGxhdGZvcm1Db250ZXh0LCAm
cGF0aCwgJnN0cm9rZVNvdXJjZV0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewot
ICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdHZW9tZXRyeShwYXRoLnBsYXRmb3JtUGF0aCgpLCBz
dHJva2VTb3VyY2UuYnJ1c2guZ2V0KCksIHN0cm9rZVNvdXJjZS50aGlja25lc3MsIHBsYXRmb3Jt
Q29udGV4dC5zdHJva2VTdHlsZSgpKTsKLSAgICB9OwotCi0gICAgaWYgKHNoYWRvd1N0YXRlLmlz
VmlzaWJsZSgpKSB7Ci0gICAgICAgIGF1dG8gYm91bmRpbmdSZWN0ID0gcGF0aC5mYXN0Qm91bmRp
bmdSZWN0Rm9yU3Ryb2tlKHBsYXRmb3JtQ29udGV4dCk7Ci0gICAgICAgIGRyYXdXaXRoU2hhZG93
KHBsYXRmb3JtQ29udGV4dCwgYm91bmRpbmdSZWN0LCBzaGFkb3dTdGF0ZSwgV1RGTW92ZShkcmF3
RnVuY3Rpb24pKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZv
cm1Db250ZXh0LCBXVEZNb3ZlKGRyYXdGdW5jdGlvbikpOwotfQotCi12b2lkIGRyYXdQYXRoKFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgs
IGNvbnN0IFN0cm9rZVNvdXJjZSYgc3Ryb2tlU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYpCi17
Ci0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0g
ICAgcGF0aC5jbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9PUEVOKTsKLQot
ICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLQotICAgIGRyYXdXaXRo
b3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9ybUNvbnRleHQsICZzdHJva2VTb3Vy
Y2UsICZwYXRoXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIHJl
bmRlclRhcmdldC0+RHJhd0dlb21ldHJ5KHBhdGgucGxhdGZvcm1QYXRoKCksIHN0cm9rZVNvdXJj
ZS5icnVzaC5nZXQoKSwgc3Ryb2tlU291cmNlLnRoaWNrbmVzcywgcGxhdGZvcm1Db250ZXh0LnN0
cm9rZVN0eWxlKCkpOwotICAgIH0pOwotCi0gICAgZmx1c2gocGxhdGZvcm1Db250ZXh0KTsKLX0K
LQotc3RhdGljIHZvaWQgZHJhd1dpdGhTaGFkb3dIZWxwZXIoSUQyRDFSZW5kZXJUYXJnZXQqIGNv
bnRleHQsIElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQsIGNvbnN0IEZsb2F0
UmVjdCYgYm91bmRpbmdSZWN0LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0
U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dCbHVyKQotewotICAgIENPTVB0cjxJRDJE
MUJpdG1hcD4gY3VycmVudENhbnZhcyA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXBDb3B5RnJvbUNv
bnRleHQoYml0bWFwVGFyZ2V0KTsKLSAgICBpZiAoIWN1cnJlbnRDYW52YXMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IHNoYWRvd0RldmljZUNvbnRl
eHQ7Ci0gICAgSFJFU1VMVCBociA9IGJpdG1hcFRhcmdldC0+UXVlcnlJbnRlcmZhY2UoJnNoYWRv
d0RldmljZUNvbnRleHQpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0g
ICAgLy8gQ3JlYXRlIHRoZSBzaGFkb3cgZWZmZWN0Ci0gICAgQ09NUHRyPElEMkQxRWZmZWN0PiBz
aGFkb3dFZmZlY3Q7Ci0gICAgaHIgPSBzaGFkb3dEZXZpY2VDb250ZXh0LT5DcmVhdGVFZmZlY3Qo
Q0xTSURfRDJEMVNoYWRvdywgJnNoYWRvd0VmZmVjdCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VD
Q0VFREVEKGhyKSk7Ci0KLSAgICBzaGFkb3dFZmZlY3QtPlNldElucHV0KDAsIGN1cnJlbnRDYW52
YXMuZ2V0KCkpOwotICAgIHNoYWRvd0VmZmVjdC0+U2V0VmFsdWUoRDJEMV9TSEFET1dfUFJPUF9D
T0xPUiwgc3RhdGljX2Nhc3Q8RDJEMV9WRUNUT1JfNEY+KHNoYWRvd0NvbG9yKSk7Ci0KLSAgICBm
bG9hdCBibHVyRGV2aWF0aW9uID0gMC41ICogc2hhZG93Qmx1cjsKLSAgICBzaGFkb3dFZmZlY3Qt
PlNldFZhbHVlKEQyRDFfU0hBRE9XX1BST1BfQkxVUl9TVEFOREFSRF9ERVZJQVRJT04sIGJsdXJE
ZXZpYXRpb24pOwotCi0gICAgQ09NUHRyPElEMkQxRWZmZWN0PiBzaGFkb3dUcmFuc2Zvcm1FZmZl
Y3Q7Ci0gICAgaHIgPSBzaGFkb3dEZXZpY2VDb250ZXh0LT5DcmVhdGVFZmZlY3QoQ0xTSURfRDJE
MTJEQWZmaW5lVHJhbnNmb3JtLCAmc2hhZG93VHJhbnNmb3JtRWZmZWN0KTsKLSAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIHNoYWRvd1RyYW5zZm9ybUVmZmVjdC0+U2V0
SW5wdXRFZmZlY3QoMCwgc2hhZG93RWZmZWN0LmdldCgpKTsKLQotICAgIC8vIE11c3QgZmxpcCB0
aGUgYXhpcyBmb3IgdGhlIHNoYWRvdyBvZmZzZXQsIHNpbmNlIERpcmVjdDJEJ3MgWSBheGlzIGlz
IGludmVydGVkLgotICAgIGF1dG8gc2hhZG93VHJhbnNsYXRpb24gPSBEMkQxOjpNYXRyaXgzeDJG
OjpUcmFuc2xhdGlvbihzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQo
KSk7Ci0gICAgc2hhZG93VHJhbnNmb3JtRWZmZWN0LT5TZXRWYWx1ZShEMkQxXzJEQUZGSU5FVFJB
TlNGT1JNX1BST1BfVFJBTlNGT1JNX01BVFJJWCwgc2hhZG93VHJhbnNsYXRpb24pOwotCi0gICAg
Q09NUHRyPElEMkQxRWZmZWN0PiBjb21wb3NpdG9yOwotICAgIGhyID0gc2hhZG93RGV2aWNlQ29u
dGV4dC0+Q3JlYXRlRWZmZWN0KENMU0lEX0QyRDFDb21wb3NpdGUsICZjb21wb3NpdG9yKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGNvbXBvc2l0b3ItPlNldElu
cHV0RWZmZWN0KDAsIHNoYWRvd1RyYW5zZm9ybUVmZmVjdC5nZXQoKSk7Ci0gICAgY29tcG9zaXRv
ci0+U2V0SW5wdXQoMSwgY3VycmVudENhbnZhcy5nZXQoKSk7Ci0KLSAgICBzaGFkb3dEZXZpY2VD
b250ZXh0LT5CZWdpbkRyYXcoKTsKLSAgICBzaGFkb3dEZXZpY2VDb250ZXh0LT5DbGVhcihEMkQx
OjpDb2xvckYoMCwgMCwgMCwgMCkpOwotICAgIHNoYWRvd0RldmljZUNvbnRleHQtPkRyYXdJbWFn
ZShjb21wb3NpdG9yLmdldCgpKTsKLSAgICBociA9IHNoYWRvd0RldmljZUNvbnRleHQtPkVuZERy
YXcoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENPTVB0cjxJ
RDJEMUJpdG1hcD4gYml0bWFwOwotICAgIGhyID0gYml0bWFwVGFyZ2V0LT5HZXRCaXRtYXAoJmJp
dG1hcCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBJbnRTaXpl
IHBpeGVsU2l6ZSA9IGNvbnRleHQtPkdldFBpeGVsU2l6ZSgpOwotICAgIENPTVB0cjxJRDJEMUJp
dG1hcD4gY3JvcHBlZCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXAoYml0bWFwVGFyZ2V0LCBwaXhl
bFNpemUpOwotICAgIGlmICghY3JvcHBlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBz
Y2FsZUZhY3RvciA9IGJpdG1hcFJlc29sdXRpb24oY29udGV4dCk7Ci0KLSAgICBGbG9hdFJlY3Qg
c2NhbGVkQm91bmRpbmdSZWN0KGJvdW5kaW5nUmVjdCk7Ci0gICAgc2NhbGVkQm91bmRpbmdSZWN0
LnNjYWxlKHNjYWxlRmFjdG9yLndpZHRoKCksIHNjYWxlRmFjdG9yLmhlaWdodCgpKTsKLQotICAg
IC8vIFRha2UgdGhlIG1hZ25pdHVkZSBvZiB0aGUgb2Zmc2V0LiBJZiB0aGUgb3JpZ2luIHdhcyBv
dXRzaWRlIHRoZSBkcmF3aW5nIGNvbnRleHQsIHdlIHN0cmV0Y2hlZCB0byBpbmNsdWRlIHRob3Nl
IHBvaW50cywKLSAgICAvLyBhbmQgc28gd2UgbmVlZCB0byBjcm9wIHRoZW0gb3V0LiBJZiB0aGUg
b3JpZ2luIHdhcyBpbnNpZGUsIHdlIHdhbnQgdG8gaG9ub3IgdGhlIG9mZnNldC4KLSAgICBpbnQg
eCA9IGNsYW1wVG88aW50PihzdGQ6OmFicyhzY2FsZWRCb3VuZGluZ1JlY3QueCgpKSk7Ci0gICAg
aW50IHkgPSBjbGFtcFRvPGludD4oc3RkOjphYnMoc2NhbGVkQm91bmRpbmdSZWN0LnkoKSkpOwot
ICAgIGludCB3aWR0aCA9IGNsYW1wVG88aW50PihzY2FsZWRCb3VuZGluZ1JlY3Qud2lkdGgoKSk7
Ci0gICAgaW50IGhlaWdodCA9IGNsYW1wVG88aW50PihzY2FsZWRCb3VuZGluZ1JlY3QuaGVpZ2h0
KCkpOwotCi0gICAgSW50UmVjdCBvdXRwdXRSZWN0KEludFBvaW50KHgsIHkpLCBJbnRTaXplKHdp
ZHRoLCBoZWlnaHQpKTsKLSAgICBJbnRSZWN0IGRlc3RDb250ZXh0UmVjdChJbnRQb2ludCgpLCBw
aXhlbFNpemUpOwotICAgIGlmIChvdXRwdXRSZWN0LmludGVyc2VjdHMoZGVzdENvbnRleHRSZWN0
KSkKLSAgICAgICAgb3V0cHV0UmVjdC5pbnRlcnNlY3QoZGVzdENvbnRleHRSZWN0KTsKLQotICAg
IEQyRDFfUkVDVF9VIGNyb3BSZWN0ID0gb3V0cHV0UmVjdDsKLSAgICBhdXRvIHRhcmdldFBvaW50
ID0gRDJEMTo6UG9pbnQyVSgpOwotICAgIGNyb3BwZWQtPkNvcHlGcm9tQml0bWFwKCZ0YXJnZXRQ
b2ludCwgYml0bWFwLmdldCgpLCAmY3JvcFJlY3QpOwotCi0gICAgY29udGV4dC0+RHJhd0JpdG1h
cChjcm9wcGVkLmdldCgpKTsKLX0KLQotdm9pZCBkcmF3V2l0aFNoYWRvdyhQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBGbG9hdFJlY3QgYm91bmRpbmdSZWN0LCBjb25z
dCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUsIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJn
ZXQqKT4mJiBkcmF3Q29tbWFuZHMpCi17Ci0gICAgaWYgKCFzaGFkb3dTdGF0ZS5pc1Zpc2libGUo
KSkgewotICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFdURk1vdmUo
ZHJhd0NvbW1hbmRzKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwbGF0Zm9ybUNv
bnRleHQubm90aWZ5UHJlRHJhd09ic2VydmVyKCk7Ci0KLSAgICBhdXRvKiBjb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0gICAgRmxvYXRTaXplIHJlbmRlclRhcmdl
dFNpemUgPSBjb250ZXh0LT5HZXRTaXplKCk7Ci0gICAgY29uc3QgRmxvYXRSZWN0IGNvbnRleHRS
ZWN0KEZsb2F0UG9pbnQoKSwgcmVuZGVyVGFyZ2V0U2l6ZSk7Ci0gICAgRmxvYXRSZWN0IHdvcmtp
bmdDb250ZXh0UmVjdChjb250ZXh0UmVjdCk7Ci0KLSAgICBpZiAoYm91bmRpbmdSZWN0LmlzSW5m
aW5pdGUoKSkKLSAgICAgICAgYm91bmRpbmdSZWN0ID0gd29ya2luZ0NvbnRleHRSZWN0OwotCi0g
ICAgaWYgKCFjb250ZXh0UmVjdC5jb250YWlucyhib3VuZGluZ1JlY3QpKQotICAgICAgICB3b3Jr
aW5nQ29udGV4dFJlY3QudW5pdGUoYm91bmRpbmdSZWN0KTsKLQotICAgIHdvcmtpbmdDb250ZXh0
UmVjdC5leHBhbmQoc3RkOjphYnMoc2hhZG93U3RhdGUub2Zmc2V0LndpZHRoKCkpICsgc2hhZG93
U3RhdGUuYmx1ciwgc3RkOjphYnMoc2hhZG93U3RhdGUub2Zmc2V0LmhlaWdodCgpKSArIHNoYWRv
d1N0YXRlLmJsdXIpOwotCi0gICAgYXV0byBzY2FsZUZhY3RvciA9IGJpdG1hcFJlc29sdXRpb24o
Y29udGV4dCk7Ci0KLSAgICB3b3JraW5nQ29udGV4dFJlY3Quc2NhbGUoc2NhbGVGYWN0b3IpOwot
Ci0gICAgSW50U2l6ZSBwaXhlbERpbWVuc2lvbnMoY2xhbXBUbzxpbnQ+KHdvcmtpbmdDb250ZXh0
UmVjdC53aWR0aCgpKSwgY2xhbXBUbzxpbnQ+KHdvcmtpbmdDb250ZXh0UmVjdC5oZWlnaHQoKSkp
OwotCi0gICAgLy8gUmVuZGVyIHRoZSBjdXJyZW50IGdlb21ldHJ5IHRvIGEgYml0bWFwIGNvbnRl
eHQKLSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldCA9IGNy
ZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShwaXhlbERpbWVuc2lvbnMsIGNvbnRleHQpOwot
Ci0gICAgRDJEMV9NQVRSSVhfM1gyX0YgY3VycmVudFRyYW5zZm9ybTsKLSAgICBiaXRtYXBUYXJn
ZXQtPkdldFRyYW5zZm9ybSgmY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBpZiAoIWNvbnRleHRS
ZWN0LmNvbnRhaW5zKGJvdW5kaW5nUmVjdC5sb2NhdGlvbigpKSkgewotICAgICAgICBhdXRvIHRy
YW5zbGF0aW9uID0gRDJEMTo6TWF0cml4M3gyRjo6VHJhbnNsYXRpb24oLWJvdW5kaW5nUmVjdC5s
b2NhdGlvbigpLngoKSwgLWJvdW5kaW5nUmVjdC5sb2NhdGlvbigpLnkoKSk7Ci0gICAgICAgIGJp
dG1hcFRhcmdldC0+U2V0VHJhbnNmb3JtKHRyYW5zbGF0aW9uICogY3VycmVudFRyYW5zZm9ybSk7
Ci0gICAgfQotCi0gICAgYml0bWFwVGFyZ2V0LT5CZWdpbkRyYXcoKTsKLSAgICBkcmF3Q29tbWFu
ZHMoYml0bWFwVGFyZ2V0LmdldCgpKTsKLSAgICBIUkVTVUxUIGhyID0gYml0bWFwVGFyZ2V0LT5F
bmREcmF3KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBiaXRt
YXBUYXJnZXQtPlNldFRyYW5zZm9ybShjdXJyZW50VHJhbnNmb3JtKTsKLQotICAgIGRyYXdXaXRo
U2hhZG93SGVscGVyKGNvbnRleHQsIGJpdG1hcFRhcmdldC5nZXQoKSwgYm91bmRpbmdSZWN0LCBz
aGFkb3dTdGF0ZS5jb2xvciwgc2hhZG93U3RhdGUub2Zmc2V0LCBzaGFkb3dTdGF0ZS5ibHVyKTsK
LSAgICBwbGF0Zm9ybUNvbnRleHQubm90aWZ5UG9zdERyYXdPYnNlcnZlcigpOwotfQotCi12b2lk
IGRyYXdXaXRob3V0U2hhZG93KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRl
eHQsIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4mJiBkcmF3Q29tbWFuZHMpCi17
Ci0gICAgcGxhdGZvcm1Db250ZXh0Lm5vdGlmeVByZURyYXdPYnNlcnZlcigpOwotICAgIGRyYXdD
b21tYW5kcyhwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIHBsYXRmb3JtQ29u
dGV4dC5ub3RpZnlQb3N0RHJhd09ic2VydmVyKCk7Ci19Ci0KLXZvaWQgY2xlYXJSZWN0KFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLXsKLSAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1D
b250ZXh0LCByZWN0XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAg
IEZsb2F0UmVjdCByZW5kZXJUYXJnZXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVuZGVyVGFyZ2V0LT5H
ZXRTaXplKCkpOwotCi0gICAgICAgIEQyRDE6Ok1hdHJpeDN4MkYgbWF0cml4OwotICAgICAgICBy
ZW5kZXJUYXJnZXQtPkdldFRyYW5zZm9ybSgmbWF0cml4KTsKLQotICAgICAgICBBZmZpbmVUcmFu
c2Zvcm0gdHJhbnNmb3JtKG1hdHJpeCk7Ci0KLSAgICAgICAgRmxvYXRSZWN0IHJlY3RUb0NsZWFy
KHJlY3QpOwotICAgICAgICBpZiAoIXRyYW5zZm9ybS5wcmVzZXJ2ZXNBeGlzQWxpZ25tZW50KCkp
IHsKLSAgICAgICAgICAgIENPTVB0cjxJRDJEMVJlY3RhbmdsZUdlb21ldHJ5PiByZWN0YW5nbGU7
Ci0gICAgICAgICAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5
KCktPkNyZWF0ZVJlY3RhbmdsZUdlb21ldHJ5KHJlY3RUb0NsZWFyLCAmcmVjdGFuZ2xlKTsKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgICAgICAgICAgcmVu
ZGVyVGFyZ2V0LT5GaWxsR2VvbWV0cnkocmVjdGFuZ2xlLmdldCgpLCBwbGF0Zm9ybUNvbnRleHQu
YnJ1c2hXaXRoQ29sb3IoRDJEMTo6Q29sb3JGKDAsIDAsIDAsIDApKS5nZXQoKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICByZWN0VG9DbGVhciA9IHRyYW5zZm9y
bS5tYXBSZWN0KHJlY3RUb0NsZWFyKTsKLQotICAgICAgICBpZiAocmVjdFRvQ2xlYXIuY29udGFp
bnMocmVuZGVyVGFyZ2V0UmVjdCkpIHsKLSAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC5zZXRU
YWdzKDEsIF9fTElORV9fKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldC0+Q2xlYXIoRDJEMTo6
Q29sb3JGKDAsIDAsIDAsIDApKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICAgICAgcmVu
ZGVyVGFyZ2V0LT5QdXNoQXhpc0FsaWduZWRDbGlwKHJlY3RUb0NsZWFyLCBEMkQxX0FOVElBTElB
U19NT0RFX1BFUl9QUklNSVRJVkUpOwotICAgICAgICByZW5kZXJUYXJnZXQtPkNsZWFyKEQyRDE6
OkNvbG9yRigwLCAwLCAwLCAwKSk7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+UG9wQXhpc0FsaWdu
ZWRDbGlwKCk7Ci0gICAgfSk7Ci19Ci0KLQotdm9pZCBkcmF3R2x5cGhzKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZpbGxTb3VyY2UmIGZpbGxTb3VyY2Us
IGNvbnN0IFN0cm9rZVNvdXJjZSYgc3Ryb2tlU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hh
ZG93U3RhdGUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBkb3Vi
bGUgc3ludGhldGljQm9sZE9mZnNldCwgY29uc3QgVmVjdG9yPHVuc2lnbmVkIHNob3J0PiYgZ2x5
cGhzLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBob3Jpem9udGFsQWR2YW5jZXMsIGNvbnN0IFZlY3Rv
cjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiYgZ2x5cGhPZmZzZXRzLCBmbG9hdCB4T2Zmc2V0LCBUZXh0
RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcywg
Y29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcikK
LXsKLSAgICBhdXRvIHJlbmRlclRhcmdldCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQo
KTsKLSAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LnBsYXRm
b3JtRGF0YSgpOwotCi0gICAgUGxhdGZvcm1Db250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBs
YXRmb3JtQ29udGV4dCk7Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiBtYXRyaXg7Ci0gICAgcmVu
ZGVyVGFyZ2V0LT5HZXRUcmFuc2Zvcm0oJm1hdHJpeCk7Ci0KLSAgICAvKgotICAgIC8vIEZJWE1F
OiBHZXQgU3ludGhldGljIE9ibGlxdWUgd29ya2luZwotICAgIGlmIChwbGF0Zm9ybURhdGEuc3lu
dGhldGljT2JsaXF1ZSgpKSB7Ci0gICAgICAgIHN0YXRpYyBmbG9hdCBza2V3ID0gLXRhbmYoc3lu
dGhldGljT2JsaXF1ZUFuZ2xlKCkgKiBwaUZsb2F0IC8gMTgwLjBmKTsKLSAgICAgICAgYXV0byBz
a2V3TWF0cml4ID0gRDJEMTo6TWF0cml4M3gyRjo6U2tldyhza2V3LCAwKTsKLSAgICAgICAgY29u
dGV4dC0+U2V0VHJhbnNmb3JtKG1hdHJpeCAqIHNrZXdNYXRyaXgpOwotICAgIH0KLSAgICAqLwot
Ci0gICAgUkVMRUFTRV9BU1NFUlQocGxhdGZvcm1EYXRhLmR3Rm9udCgpKTsKLSAgICBSRUxFQVNF
X0FTU0VSVChwbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpKTsKLQotICAgIERXUklURV9HTFlQSF9S
VU4gZ2x5cGhSdW47Ci0gICAgZ2x5cGhSdW4uZm9udEZhY2UgPSBwbGF0Zm9ybURhdGEuZHdGb250
RmFjZSgpOwotICAgIGdseXBoUnVuLmZvbnRFbVNpemUgPSBwbGF0Zm9ybURhdGEuc2l6ZSgpOwot
ICAgIGdseXBoUnVuLmdseXBoQ291bnQgPSBnbHlwaHMuc2l6ZSgpOwotICAgIGdseXBoUnVuLmds
eXBoSW5kaWNlcyA9IGdseXBocy5kYXRhKCk7Ci0gICAgZ2x5cGhSdW4uZ2x5cGhBZHZhbmNlcyA9
IGhvcml6b250YWxBZHZhbmNlcy5kYXRhKCk7Ci0gICAgZ2x5cGhSdW4uZ2x5cGhPZmZzZXRzID0g
bnVsbHB0cjsKLSAgICBnbHlwaFJ1bi5pc1NpZGV3YXlzID0gcGxhdGZvcm1EYXRhLm9yaWVudGF0
aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbDsKLSAgICBnbHlwaFJ1bi5iaWRpTGV2
ZWwgPSAwOwotCi0gICAgLyoKLSAgICAvLyBGSVhNRSgpOiBHZXQgU2hhZG93cyB3b3JraW5nCi0g
ICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBzaGFkb3dCbHVyOwotICAgIENv
bG9yIHNoYWRvd0NvbG9yOwotICAgIGdyYXBoaWNzQ29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zm
c2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7Ci0KLSAgICBib29sIGhhc1NpbXBsZVNoYWRv
dyA9IGdyYXBoaWNzQ29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6
OkZpbGwgJiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmICFzaGFkb3dCbHVyICYmICghZ3JhcGhp
Y3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgZ3JhcGhpY3NDb250ZXh0Lmdl
dENUTSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOwotICAgIGlmIChoYXNT
aW1wbGVTaGFkb3cpIHsKLSAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVz
IGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Npbmcgc3VicGl4
ZWwgYW50aWFsaWFzaW5nLgotICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJTaGFkb3coKTsK
LSAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gZ3JhcGhpY3NDb250ZXh0LmZpbGxDb2xvcigpOwot
ICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhBbHBo
YU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOwotICAgICAgICBmbG9hdCBz
aGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOwotICAgICAgICAv
LyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBw
bGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgotICAg
ICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQo
KSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7
Ci0KLSAgICAgICAgYXV0byBzaGFkb3dCcnVzaCA9IGdyYXBoaWNzQ29udGV4dC5icnVzaFdpdGhD
b2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAgICAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJE
MTo6UG9pbnQyRihzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCAmZ2x5cGhSdW4sIHNoYWRvd0Jy
dXNoKTsKLSAgICAgICAgaWYgKGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpKQotICAgICAgICAg
ICAgY29udGV4dC0+RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50MkYoc2hhZG93VGV4dFggKyBmb250
LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwgc2hhZG93VGV4dFkpLCAmZ2x5cGhSdW4sIHNoYWRvd0Jy
dXNoKTsKLSAgICB9Ci0gICAgKi8KLQotICAgIHJlbmRlclRhcmdldC0+RHJhd0dseXBoUnVuKEQy
RDE6OlBvaW50MkYocG9pbnQueCgpLCBwb2ludC55KCkpLCAmZ2x5cGhSdW4sIGZpbGxTb3VyY2Uu
YnJ1c2guZ2V0KCkpOwotICAgIC8vIGlmIChmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSkKLSAg
ICAvLyAgICAgY29udGV4dC0+RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50MkYocG9pbnQueCgpICsg
Zm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSksICZnbHlwaFJ1biwgZ3JhcGhp
Y3NDb250ZXh0LnNvbGlkRmlsbEJydXNoKCkpOwotCi0gICAgLy8gaWYgKGhhc1NpbXBsZVNoYWRv
dykKLSAgICAvLyAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNo
YWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKLQotICAgIHN0YXRlU2F2ZXIucmVzdG9yZSgpOwotICAg
IHBsYXRmb3JtQ29udGV4dC5ub3RpZnlQb3N0RHJhd09ic2VydmVyKCk7Ci19Ci0KLQotdm9pZCBk
cmF3UGxhdGZvcm1JbWFnZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0
LCBJV0lDQml0bWFwKiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBvcmlnaW5hbEltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucywgZmxvYXQgZ2xvYmFsQWxwaGEsIGNvbnN0
IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBhdXRvIG5hdGl2ZUltYWdlU2l6ZSA9
IGJpdG1hcFNpemUoaW1hZ2UpOwotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gZGV2aWNlQml0bWFw
OwotICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkNyZWF0
ZUJpdG1hcEZyb21XaWNCaXRtYXAoaW1hZ2UsICZkZXZpY2VCaXRtYXApOwotICAgIGlmICghU1VD
Q0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBpbWFnZVNpemUgPSBiaXRt
YXBTaXplKGRldmljZUJpdG1hcC5nZXQoKSk7Ci0gICAgZHJhd1BsYXRmb3JtSW1hZ2UocGxhdGZv
cm1Db250ZXh0LCBkZXZpY2VCaXRtYXAuZ2V0KCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIG9wdGlvbnMsIGdsb2JhbEFscGhhLCBzaGFkb3dTdGF0ZSk7Ci19Ci0KLXZvaWQgZHJhd1Bs
YXRmb3JtSW1hZ2UoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgSUQy
RDFCaXRtYXAqIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucywgZmxvYXQgZ2xvYmFsQWxwaGEsIGNvbnN0IFNoYWRvd1N0YXRl
JiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBhdXRvIGJpdG1hcFNpemUgPSBpbWFnZS0+R2V0U2l6ZSgp
OwotCi0gICAgZmxvYXQgY3VyckhlaWdodCA9IG9wdGlvbnMub3JpZW50YXRpb24oKS51c2VzV2lk
dGhBc0hlaWdodCgpID8gYml0bWFwU2l6ZS53aWR0aCA6IGJpdG1hcFNpemUuaGVpZ2h0OwotICAg
IGlmIChjdXJySGVpZ2h0IDw9IHNyY1JlY3QueSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBEMkQx
X01BVFJJWF8zWDJfRiBjdG07Ci0gICAgY29udGV4dC0+R2V0VHJhbnNmb3JtKCZjdG0pOwotCi0g
ICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybShjdG0pOwotCi0gICAgUGxhdGZvcm1Db250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBsYXRmb3JtQ29udGV4dCk7Ci0KLSAgICBib29sIHNob3Vs
ZFVzZVN1YmltYWdlID0gZmFsc2U7Ci0KLSAgICAvLyBJZiB0aGUgc291cmNlIHJlY3QgaXMgYSBz
dWJwb3J0aW9uIG9mIHRoZSBpbWFnZSwgdGhlbiB3ZSBjb21wdXRlIGFuIGluZmxhdGVkIGRlc3Rp
bmF0aW9uIHJlY3QgdGhhdCB3aWxsIGhvbGQgdGhlIGVudGlyZSBpbWFnZQotICAgIC8vIGFuZCB0
aGVuIHNldCBhIGNsaXAgdG8gdGhlIHBvcnRpb24gdGhhdCB3ZSB3YW50IHRvIGRpc3BsYXkuCi0g
ICAgRmxvYXRSZWN0IGFkanVzdGVkRGVzdFJlY3QgPSBkZXN0UmVjdDsKLQotICAgIGlmIChzcmNS
ZWN0LnNpemUoKSAhPSBpbWFnZVNpemUpIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBp
bWFnZSBzY2FsaW5nCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotCi0gICAgLy8g
SWYgdGhlIGltYWdlIGlzIG9ubHkgcGFydGlhbGx5IGxvYWRlZCwgdGhlbiBzaHJpbmsgdGhlIGRl
c3RpbmF0aW9uIHJlY3QgdGhhdCB3ZSdyZSBkcmF3aW5nIGludG8gYWNjb3JkaW5nbHkuCi0gICAg
aWYgKCFzaG91bGRVc2VTdWJpbWFnZSAmJiBjdXJySGVpZ2h0IDwgaW1hZ2VTaXplLmhlaWdodCgp
KQotICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldEhlaWdodChhZGp1c3RlZERlc3RSZWN0Lmhl
aWdodCgpICogY3VyckhlaWdodCAvIGltYWdlU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBTdGF0ZTo6
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dCwgb3B0aW9ucy5jb21wb3NpdGVP
cGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKLQotICAgIC8vIEltYWdlT3JpZW50YXRp
b24gZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKS4KLSAgICB0cmFuc2Zvcm0udHJh
bnNsYXRlKGFkanVzdGVkRGVzdFJlY3QueCgpLCBhZGp1c3RlZERlc3RSZWN0LnkoKSk7Ci0gICAg
Y29udGV4dC0+U2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0gICAgYWRqdXN0ZWREZXN0UmVjdC5z
ZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOwotCi0gICAgaWYgKG9wdGlvbnMub3JpZW50YXRpb24o
KSAhPSBJbWFnZU9yaWVudGF0aW9uOjpOb25lKSB7Ci0gICAgICAgIGNvbmNhdENUTShwbGF0Zm9y
bUNvbnRleHQsIG9wdGlvbnMub3JpZW50YXRpb24oKS50cmFuc2Zvcm1Gcm9tRGVmYXVsdChhZGp1
c3RlZERlc3RSZWN0LnNpemUoKSkpOwotICAgICAgICBpZiAob3B0aW9ucy5vcmllbnRhdGlvbigp
LnVzZXNXaWR0aEFzSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBy
ZWN0IHdpbGwgaGF2ZSBpdCdzIHdpZHRoIGFuZCBoZWlnaHQgYWxyZWFkeSByZXZlcnNlZCBmb3Ig
dGhlIG9yaWVudGF0aW9uIG9mCi0gICAgICAgICAgICAvLyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBu
ZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3ZSBuZWVkIHRvIHJldmVyc2UgaXQgYmFjayBoZXJl
LgotICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdCA9IEZsb2F0UmVjdChhZGp1c3RlZERlc3RS
ZWN0LngoKSwgYWRqdXN0ZWREZXN0UmVjdC55KCksIGFkanVzdGVkRGVzdFJlY3QuaGVpZ2h0KCks
IGFkanVzdGVkRGVzdFJlY3Qud2lkdGgoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwbGF0
Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgZHJhd1dpdGhTaGFkb3cocGxh
dGZvcm1Db250ZXh0LCBhZGp1c3RlZERlc3RSZWN0LCBzaGFkb3dTdGF0ZSwgW2ltYWdlLCBhZGp1
c3RlZERlc3RSZWN0LCBnbG9iYWxBbHBoYSwgc3JjUmVjdF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJl
bmRlclRhcmdldCkgewotICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdCaXRtYXAoaW1hZ2UsIGFk
anVzdGVkRGVzdFJlY3QsIGdsb2JhbEFscGhhLCBEMkQxX0JJVE1BUF9JTlRFUlBPTEFUSU9OX01P
REVfTElORUFSLCBzcmNSZWN0KTsKLSAgICB9KTsKLQotICAgIGlmICghc3RhdGVTYXZlci5kaWRT
YXZlKCkpCi0gICAgICAgIGNvbnRleHQtPlNldFRyYW5zZm9ybShjdG0pOwotfQotCi12b2lkIGRy
YXdQYXR0ZXJuKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIENPTVB0
cjxJRDJEMUJpdG1hcD4mJiB0aWxlSW1hZ2UsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQot
ewotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLSAg
ICBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGxhdGZvcm1Db250ZXh0KTsK
LQotICAgIGNsaXAocGxhdGZvcm1Db250ZXh0LCBkZXN0UmVjdCk7Ci0KLSAgICBTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJs
ZW5kTW9kZSk7Ci0KLSAgICBhdXRvIGJpdG1hcEJydXNoUHJvcGVydGllcyA9IEQyRDE6OkJpdG1h
cEJydXNoUHJvcGVydGllcygpOwotICAgIGJpdG1hcEJydXNoUHJvcGVydGllcy5leHRlbmRNb2Rl
WCA9IEQyRDFfRVhURU5EX01PREVfV1JBUDsKLSAgICBiaXRtYXBCcnVzaFByb3BlcnRpZXMuZXh0
ZW5kTW9kZVkgPSBEMkQxX0VYVEVORF9NT0RFX1dSQVA7Ci0KLSAgICAvLyBDcmVhdGUgYSBicnVz
aCB0cmFuc2Zvcm1hdGlvbiBzbyB3ZSBwYWludCB1c2luZyB0aGUgc2VjdGlvbiBvZiB0aGUgaW1h
Z2Ugd2UgY2FyZSBhYm91dC4KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtYXRpb24gPSBw
YXR0ZXJuVHJhbnNmb3JtOwotICAgIHRyYW5zZm9ybWF0aW9uLnRyYW5zbGF0ZShkZXN0UmVjdC5s
b2NhdGlvbigpKTsKLQotICAgIGF1dG8gYnJ1c2hQcm9wZXJ0aWVzID0gRDJEMTo6QnJ1c2hQcm9w
ZXJ0aWVzKCk7Ci0gICAgYnJ1c2hQcm9wZXJ0aWVzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybWF0aW9u
OwotICAgIGJydXNoUHJvcGVydGllcy5vcGFjaXR5ID0gMS4wZjsKLQotICAgIC8vIElmIHdlIG9u
bHkgd2FudCBhIHN1YnNldCBvZiB0aGUgYml0bWFwLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIGNyb3Bw
ZWQgYml0bWFwIGltYWdlLiBBY2NvcmRpbmcgdG8gdGhlIGRvY3VtZW50YXRpb24sCi0gICAgLy8g
dGhpcyBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYml0bWFwIG1lbW9yeS4KLSAgICBpZiAoc2l6ZS53
aWR0aCgpID4gZGVzdFJlY3Qud2lkdGgoKSB8fCBzaXplLmhlaWdodCgpID4gZGVzdFJlY3QuaGVp
Z2h0KCkpIHsKLSAgICAgICAgZmxvYXQgZHBpWCA9IDA7Ci0gICAgICAgIGZsb2F0IGRwaVkgPSAw
OwotICAgICAgICB0aWxlSW1hZ2UtPkdldERwaSgmZHBpWCwgJmRwaVkpOwotICAgICAgICBhdXRv
IGJpdG1hcFByb3BlcnRpZXMgPSBEMkQxOjpCaXRtYXBQcm9wZXJ0aWVzKHRpbGVJbWFnZS0+R2V0
UGl4ZWxGb3JtYXQoKSwgZHBpWCwgZHBpWSk7Ci0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4g
c3ViSW1hZ2U7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0LT5DcmVhdGVCaXRtYXAoSW50
U2l6ZSh0aWxlUmVjdC5zaXplKCkpLCBiaXRtYXBQcm9wZXJ0aWVzLCAmc3ViSW1hZ2UpOwotICAg
ICAgICBpZiAoU1VDQ0VFREVEKGhyKSkgewotICAgICAgICAgICAgRDJEMV9SRUNUX1UgZmluaXNo
UmVjdCA9IEludFJlY3QodGlsZVJlY3QpOwotICAgICAgICAgICAgaHIgPSBzdWJJbWFnZS0+Q29w
eUZyb21CaXRtYXAobnVsbHB0ciwgdGlsZUltYWdlLmdldCgpLCAmZmluaXNoUmVjdCk7Ci0gICAg
ICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAgICAgICB0aWxlSW1hZ2UgPSBz
dWJJbWFnZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcEJydXNo
PiBwYXR0ZXJuQnJ1c2g7Ci0gICAgSFJFU1VMVCBociA9IGNvbnRleHQtPkNyZWF0ZUJpdG1hcEJy
dXNoKHRpbGVJbWFnZS5nZXQoKSwgJmJpdG1hcEJydXNoUHJvcGVydGllcywgJmJydXNoUHJvcGVy
dGllcywgJnBhdHRlcm5CcnVzaCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIGlm
ICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZHJhd1dpdGhvdXRTaGFk
b3cocGxhdGZvcm1Db250ZXh0LCBbZGVzdFJlY3QsIHBhdHRlcm5CcnVzaF0oSUQyRDFSZW5kZXJU
YXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0
ID0gZGVzdFJlY3Q7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVj
dCwgcGF0dGVybkJydXNoLmdldCgpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBkcmF3UmVjdChQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcywgY29uc3QgQ29sb3ImIGZpbGxDb2xvciwgU3Ryb2tl
U3R5bGUgc3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvcikKLXsKLSAgICAvLyBG
SVhNRTogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUgcGF0dGVybnMgYW5kIGdyYWRpZW50
cyBsaWtlIGRyYXdQYXRoIGRvZXMsIGl0IHByb2JhYmx5IHNob3VsZC4KLSAgICBBU1NFUlQoIXJl
Y3QuaXNFbXB0eSgpKTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9f
KTsKLSAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1Db250
ZXh0LCByZWN0LCBmaWxsQ29sb3IsIHN0cm9rZUNvbG9yLCBzdHJva2VTdHlsZV0oSUQyRDFSZW5k
ZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRS
ZWN0ID0gcmVjdDsKLSAgICAgICAgYXV0byBmaWxsQnJ1c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1
c2hXaXRoQ29sb3IoZmlsbENvbG9yKTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFu
Z2xlKCZkMmRSZWN0LCBmaWxsQnJ1c2guZ2V0KCkpOwotICAgICAgICBpZiAoc3Ryb2tlU3R5bGUg
IT0gTm9TdHJva2UpIHsKLSAgICAgICAgICAgIGF1dG8gc3Ryb2tlQnJ1c2ggPSBwbGF0Zm9ybUNv
bnRleHQuYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IpOwotICAgICAgICAgICAgcmVuZGVyVGFy
Z2V0LT5EcmF3UmVjdGFuZ2xlKCZkMmRSZWN0LCBzdHJva2VCcnVzaC5nZXQoKSwgcGxhdGZvcm1D
b250ZXh0LnN0cm9rZVRoaWNrbmVzcygpLCBwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlU3R5bGUoKSk7
Ci0gICAgICAgIH0KLSAgICB9KTsKLX0KLQotdm9pZCBkcmF3TGluZShQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MiwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9y
JiBzdHJva2VDb2xvciwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBib29sIHNob3VsZEFudGlhbGlh
cykKLXsKLSAgICBib29sIGlzVmVydGljYWxMaW5lID0gKHBvaW50MS54KCkgKyBzdHJva2VUaGlj
a25lc3MgPT0gcG9pbnQyLngoKSk7Ci0gICAgZmxvYXQgc3Ryb2tlV2lkdGggPSBpc1ZlcnRpY2Fs
TGluZSA/IHBvaW50Mi55KCkgLSBwb2ludDEueSgpIDogcG9pbnQyLngoKSAtIHBvaW50MS54KCk7
Ci0gICAgaWYgKCFzdHJva2VUaGlja25lc3MgfHwgIXN0cm9rZVdpZHRoKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7
Ci0KLSAgICBmbG9hdCBjb3JuZXJXaWR0aCA9IDA7Ci0gICAgYm9vbCBkcmF3c0Rhc2hlZExpbmUg
PSBzdHJva2VTdHlsZSA9PSBEb3R0ZWRTdHJva2UgfHwgc3Ryb2tlU3R5bGUgPT0gRGFzaGVkU3Ry
b2tlOwotCi0gICAgQ09NUHRyPElEMkQxU3Ryb2tlU3R5bGU+IGQyZFN0cm9rZVN0eWxlOwotICAg
IFBsYXRmb3JtQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwbGF0Zm9ybUNvbnRleHQsIGRy
YXdzRGFzaGVkTGluZSk7Ci0gICAgaWYgKGRyYXdzRGFzaGVkTGluZSkgewotICAgICAgICAvLyBG
aWd1cmUgb3V0IGVuZCBwb2ludHMgdG8gZW5zdXJlIHdlIGFsd2F5cyBwYWludCBjb3JuZXJzLgot
ICAgICAgICBjb3JuZXJXaWR0aCA9IGRhc2hlZExpbmVDb3JuZXJXaWR0aEZvclN0cm9rZVdpZHRo
KHN0cm9rZVdpZHRoLCBzdHJva2VTdHlsZSwgc3Ryb2tlVGhpY2tuZXNzKTsKLSAgICAgICAgc3Ry
b2tlV2lkdGggLT0gMiAqIGNvcm5lcldpZHRoOwotICAgICAgICBmbG9hdCBwYXR0ZXJuV2lkdGgg
PSBkYXNoZWRMaW5lUGF0dGVybldpZHRoRm9yU3Ryb2tlV2lkdGgoc3Ryb2tlV2lkdGgsIHN0cm9r
ZVN0eWxlLCBzdHJva2VUaGlja25lc3MpOwotICAgICAgICAvLyBDaGVjayBpZiBjb3JuZXIgZHJh
d2luZyBzdWZmaWNpZW50bHkgY292ZXJzIHRoZSBsaW5lLgotICAgICAgICBpZiAoc3Ryb2tlV2lk
dGggPD0gcGF0dGVybldpZHRoICsgMSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBm
bG9hdCBwYXR0ZXJuT2Zmc2V0ID0gZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJuQW5k
U3Ryb2tlV2lkdGgocGF0dGVybldpZHRoLCBzdHJva2VXaWR0aCk7Ci0gICAgICAgIGNvbnN0IGZs
b2F0IGRhc2hlc1syXSA9IHsgcGF0dGVybldpZHRoLCBwYXR0ZXJuV2lkdGggfTsKLSAgICAgICAg
YXV0byBzdHJva2VTdHlsZVByb3BlcnRpZXMgPSBwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlU3R5bGVQ
cm9wZXJ0aWVzKCk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5D
cmVhdGVTdHJva2VTdHlsZSgmc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzLCBkYXNoZXMsIEFSUkFZU0la
RShkYXNoZXMpLCAmZDJkU3Ryb2tlU3R5bGUpOwotCi0gICAgICAgIHBsYXRmb3JtQ29udGV4dC5z
ZXRQYXR0ZXJuV2lkdGgocGF0dGVybldpZHRoKTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0LnNl
dFBhdHRlcm5PZmZzZXQocGF0dGVybk9mZnNldCk7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dC5z
ZXREYXNoZXMoRGFzaEFycmF5KDIsIHBhdHRlcm5XaWR0aCkpOwotCi0gICAgICAgIGQyZFN0cm9r
ZVN0eWxlID0gcGxhdGZvcm1Db250ZXh0LnN0cm9rZVN0eWxlKCk7Ci0gICAgfQotCi0gICAgYXV0
byBjZW50ZXJlZFBvaW50cyA9IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGlzVmVydGljYWxM
aW5lLCBjb3JuZXJXaWR0aCwgcG9pbnQxLCBwb2ludDIpOwotICAgIGF1dG8gcDEgPSBjZW50ZXJl
ZFBvaW50c1swXTsKLSAgICBhdXRvIHAyID0gY2VudGVyZWRQb2ludHNbMV07Ci0KLSAgICBwbGF0
Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0KLSAgICBkcmF3V2l0aG91dFNoYWRv
dyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1Db250ZXh0LCBwMSwgcDIsIGQyZFN0cm9rZVN0
eWxlLCBzdHJva2VDb2xvciwgc3Ryb2tlVGhpY2tuZXNzXShJRDJEMVJlbmRlclRhcmdldCogcmVu
ZGVyVGFyZ2V0KSB7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RHJhd0xpbmUocDEsIHAyLCBwbGF0
Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IpLmdldCgpLCBzdHJva2VUaGlj
a25lc3MsIGQyZFN0cm9rZVN0eWxlLmdldCgpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBkcmF3TGlu
ZXNGb3JUZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRQb2ludCYsIGZs
b2F0LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBjb25zdCBDb2xvciYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBmaWxsRWxsaXBz
ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxl
LCBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3IsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKLXsKLSAg
ICBhdXRvIGVsbGlwc2UgPSBEMkQxOjpFbGxpcHNlKHJlY3QuY2VudGVyKCksIDAuNSAqIHJlY3Qu
d2lkdGgoKSwgMC41ICogcmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0
VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0
LCBbJnBsYXRmb3JtQ29udGV4dCwgZWxsaXBzZSwgZmlsbENvbG9yLCBzdHJva2VTdHlsZSwgc3Ry
b2tlQ29sb3IsIHN0cm9rZVRoaWNrbmVzc10oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdl
dCkgewotICAgICAgICBhdXRvIGZpbGxCcnVzaCA9IHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhD
b2xvcihmaWxsQ29sb3IpOwotICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxFbGxpcHNlKCZlbGxp
cHNlLCBmaWxsQnJ1c2guZ2V0KCkpOwotICAgICAgICBpZiAoc3Ryb2tlU3R5bGUgIT0gU3Ryb2tl
U3R5bGU6Ok5vU3Ryb2tlKSB7Ci0gICAgICAgICAgICBhdXRvIHN0cm9rZUJydXNoID0gcGxhdGZv
cm1Db250ZXh0LmJydXNoV2l0aENvbG9yKHN0cm9rZUNvbG9yKTsKLSAgICAgICAgICAgIHJlbmRl
clRhcmdldC0+RHJhd0VsbGlwc2UoJmVsbGlwc2UsIHN0cm9rZUJydXNoLmdldCgpLCBzdHJva2VU
aGlja25lc3MsIHBsYXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZSgpKTsKLSAgICAgICAgfQotICAg
IH0pOwotfQotCi12b2lkIGRyYXdFbGxpcHNlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0
Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5
bGUsIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvciwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQotewot
ICAgIGlmIChzdHJva2VTdHlsZSA9PSBTdHJva2VTdHlsZTo6Tm9TdHJva2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8gZWxsaXBzZSA9IEQyRDE6OkVsbGlwc2UocmVjdC5jZW50ZXIoKSwg
MC41ICogcmVjdC53aWR0aCgpLCAwLjUgKiByZWN0LmhlaWdodCgpKTsKLQotICAgIHBsYXRmb3Jt
Q29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0
Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1Db250ZXh0LCBlbGxpcHNlLCBzdHJva2VDb2xvciwgc3Ry
b2tlVGhpY2tuZXNzXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAg
IGF1dG8gc3Ryb2tlQnJ1c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tl
Q29sb3IpOwotICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdFbGxpcHNlKCZlbGxpcHNlLCBzdHJv
a2VCcnVzaC5nZXQoKSwgc3Ryb2tlVGhpY2tuZXNzLCBwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlU3R5
bGUoKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgZHJhd0ZvY3VzUmluZyhQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYsIGNvbnN0IFBhdGgmLCBmbG9hdCwgY29uc3QgQ29sb3ImKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgZHJhd0ZvY3VzUmluZyhQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYsIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGNvbnN0IENvbG9yJikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIGZsdXNoKFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgQVNTRVJUKHBsYXRmb3JtQ29udGV4dC5y
ZW5kZXJUYXJnZXQoKSk7Ci0gICAgRDJEMV9UQUcgZmlyc3QsIHNlY29uZDsKLSAgICBIUkVTVUxU
IGhyID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5GbHVzaCgmZmlyc3QsICZzZWNv
bmQpOwotCi0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci19Ci0KLXZvaWQgc2F2
ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0KQotewotICAgIHBsYXRm
b3JtQ29udGV4dC5zYXZlKCk7Ci0KLSAgICBpZiAoYXV0byogZ3JhcGhpY3NDb250ZXh0UHJpdmF0
ZSA9IHBsYXRmb3JtQ29udGV4dC5ncmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgICAgIGdy
YXBoaWNzQ29udGV4dFByaXZhdGUtPnNhdmUoKTsKLX0KLQotdm9pZCByZXN0b3JlKFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgcGxhdGZvcm1Db250ZXh0
LnJlc3RvcmUoKTsKLQotICAgIGlmIChhdXRvKiBncmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxh
dGZvcm1Db250ZXh0LmdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3ND
b250ZXh0UHJpdmF0ZS0+cmVzdG9yZSgpOwotfQotCi12b2lkIHRyYW5zbGF0ZShQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBmbG9hdCB4LCBmbG9hdCB5KQotewotICAg
IEFTU0VSVChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotCi0gICAgRDJEMV9NQVRS
SVhfM1gyX0YgY3VycmVudFRyYW5zZm9ybTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFy
Z2V0KCktPkdldFRyYW5zZm9ybSgmY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBhdXRvIHRyYW5z
bGF0aW9uID0gRDJEMTo6TWF0cml4M3gyRjo6VHJhbnNsYXRpb24oeCwgeSk7Ci0gICAgcGxhdGZv
cm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5TZXRUcmFuc2Zvcm0odHJhbnNsYXRpb24gKiBjdXJy
ZW50VHJhbnNmb3JtKTsKLQotICAgIGlmIChhdXRvKiBncmFwaGljc0NvbnRleHRQcml2YXRlID0g
cGxhdGZvcm1Db250ZXh0LmdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZS0+dHJhbnNsYXRlKHgsIHkpOwotfQotCi12b2lkIHJvdGF0ZShQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBmbG9hdCBhbmdsZUluUmFkaWFu
cykKLXsKLSAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLQotICAg
IEQyRDFfTUFUUklYXzNYMl9GIGN1cnJlbnRUcmFuc2Zvcm07Ci0gICAgcGxhdGZvcm1Db250ZXh0
LnJlbmRlclRhcmdldCgpLT5HZXRUcmFuc2Zvcm0oJmN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAg
YXV0byByb3RhdGlvbiA9IEQyRDE6Ok1hdHJpeDN4MkY6OlJvdGF0aW9uKHJhZDJkZWcoYW5nbGVJ
blJhZGlhbnMpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPlNldFRyYW5z
Zm9ybShyb3RhdGlvbiAqIGN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAgaWYgKGF1dG8qIGdyYXBo
aWNzQ29udGV4dFByaXZhdGUgPSBwbGF0Zm9ybUNvbnRleHQuZ3JhcGhpY3NDb250ZXh0UHJpdmF0
ZSgpKQotICAgICAgICBncmFwaGljc0NvbnRleHRQcml2YXRlLT5yb3RhdGUoYW5nbGVJblJhZGlh
bnMpOwotfQotCi12b2lkIHNjYWxlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNv
bnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBBU1NFUlQocGxhdGZvcm1Db250
ZXh0LnJlbmRlclRhcmdldCgpKTsKLQotICAgIEQyRDFfTUFUUklYXzNYMl9GIGN1cnJlbnRUcmFu
c2Zvcm07Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5HZXRUcmFuc2Zvcm0o
JmN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAgYXV0byBzY2FsZSA9IEQyRDE6Ok1hdHJpeDN4MkY6
OlNjYWxlKHNpemUpOwotICAgIHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+U2V0VHJh
bnNmb3JtKHNjYWxlICogY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBpZiAoYXV0byogZ3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZSA9IHBsYXRmb3JtQ29udGV4dC5ncmFwaGljc0NvbnRleHRQcml2YXRl
KCkpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dFByaXZhdGUtPnNjYWxlKHNpemUpOwotfQotCi12
b2lkIGNvbmNhdENUTShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZVRyYW5zZm9ybSkKLXsKLSAgICBBU1NFUlQocGxh
dGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLQotICAgIEQyRDFfTUFUUklYXzNYMl9GIGN1
cnJlbnRUcmFuc2Zvcm07Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5HZXRU
cmFuc2Zvcm0oJmN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAgRDJEMV9NQVRSSVhfM1gyX0YgdHJh
bnNmb3JtVG9Db25jYXQgPSBhZmZpbmVUcmFuc2Zvcm07Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJl
bmRlclRhcmdldCgpLT5TZXRUcmFuc2Zvcm0odHJhbnNmb3JtVG9Db25jYXQgKiBjdXJyZW50VHJh
bnNmb3JtKTsKLQotICAgIGlmIChhdXRvKiBncmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxhdGZv
cm1Db250ZXh0LmdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250
ZXh0UHJpdmF0ZS0+Y29uY2F0Q1RNKGFmZmluZVRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgYmVnaW5U
cmFuc3BhcmVuY3lMYXllcihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0
LCBmbG9hdCBvcGFjaXR5KQotewotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpUcmFuc3Bh
cmVuY3lMYXllclN0YXRlIHRyYW5zcGFyZW5jeUxheWVyOwotICAgIHRyYW5zcGFyZW5jeUxheWVy
Lm9wYWNpdHkgPSBvcGFjaXR5OwotCi0gICAgdHJhbnNwYXJlbmN5TGF5ZXIucmVuZGVyVGFyZ2V0
ID0gY3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0KHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQo
KSk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLmFwcGVu
ZChXVEZNb3ZlKHRyYW5zcGFyZW5jeUxheWVyKSk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQubV90
cmFuc3BhcmVuY3lMYXllclN0YWNrLmxhc3QoKS5yZW5kZXJUYXJnZXQtPkJlZ2luRHJhdygpOwot
ICAgIHBsYXRmb3JtQ29udGV4dC5tX3RyYW5zcGFyZW5jeUxheWVyU3RhY2subGFzdCgpLnJlbmRl
clRhcmdldC0+Q2xlYXIoRDJEMTo6Q29sb3JGKDAsIDAsIDAsIDApKTsKLX0KLQotdm9pZCBlbmRU
cmFuc3BhcmVuY3lMYXllcihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0
KQotewotICAgIGF1dG8gY3VycmVudExheWVyID0gcGxhdGZvcm1Db250ZXh0Lm1fdHJhbnNwYXJl
bmN5TGF5ZXJTdGFjay50YWtlTGFzdCgpOwotICAgIGF1dG8gcmVuZGVyVGFyZ2V0ID0gY3VycmVu
dExheWVyLnJlbmRlclRhcmdldDsKLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+RW5kRHJhdygpOwotICAgIFJF
TEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0gICAgaWYgKGN1cnJlbnRMYXllci5oYXNTaGFk
b3cpCi0gICAgICAgIGRyYXdXaXRoU2hhZG93SGVscGVyKGNvbnRleHQsIHJlbmRlclRhcmdldC5n
ZXQoKSwgRmxvYXRSZWN0KCksIGN1cnJlbnRMYXllci5zaGFkb3dDb2xvciwgY3VycmVudExheWVy
LnNoYWRvd09mZnNldCwgY3VycmVudExheWVyLnNoYWRvd0JsdXIpOwotICAgIGVsc2UgewotICAg
ICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKLSAgICAgICAgaHIgPSByZW5kZXJUYXJn
ZXQtPkdldEJpdG1hcCgmYml0bWFwKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7Ci0KLSAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwQnJ1c2g+IGJpdG1hcEJydXNoOwot
ICAgICAgICBhdXRvIGJpdG1hcEJydXNoUHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcEJydXNoUHJv
cGVydGllcygpOwotICAgICAgICBhdXRvIGJydXNoUHJvcGVydGllcyA9IEQyRDE6OkJydXNoUHJv
cGVydGllcygpOwotICAgICAgICBIUkVTVUxUIGhyID0gY29udGV4dC0+Q3JlYXRlQml0bWFwQnJ1
c2goYml0bWFwLmdldCgpLCBiaXRtYXBCcnVzaFByb3BlcnRpZXMsIGJydXNoUHJvcGVydGllcywg
JmJpdG1hcEJydXNoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0K
LSAgICAgICAgYXV0byBzaXplID0gYml0bWFwLT5HZXRTaXplKCk7Ci0gICAgICAgIGF1dG8gcmVj
dEluRElQID0gRDJEMTo6UmVjdEYoMCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOwotICAg
ICAgICBjb250ZXh0LT5GaWxsUmVjdGFuZ2xlKHJlY3RJbkRJUCwgYml0bWFwQnJ1c2guZ2V0KCkp
OwotICAgIH0KLX0KLQotdm9pZCBjbGlwKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQu
cmVuZGVyVGFyZ2V0KCktPlB1c2hBeGlzQWxpZ25lZENsaXAocmVjdCwgRDJEMV9BTlRJQUxJQVNf
TU9ERV9QRVJfUFJJTUlUSVZFKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucHVzaENsaXAoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQ6OkF4aXNBbGlnbmVkQ2xpcCk7Ci0KLSAgICBpZiAoYXV0byogZ3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZSA9IHBsYXRmb3JtQ29udGV4dC5ncmFwaGljc0NvbnRleHRQcml2
YXRlKCkpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dFByaXZhdGUtPmNsaXAocmVjdCk7Ci19Ci0K
LXZvaWQgY2xpcE91dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkUmVj
dChyZWN0KTsKLQotICAgIGNsaXBPdXQocGxhdGZvcm1Db250ZXh0LCBwYXRoKTsKLX0KLQotdm9p
ZCBjbGlwT3V0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0
IFBhdGgmIHBhdGgpCi17Ci0gICAgLy8gVG8gY2xpcCBPdXQgd2UgbmVlZCB0aGUgaW50ZXJzZWN0
aW9uIG9mIHRoZSBpbmZpbml0ZQotICAgIC8vIGNsaXBwaW5nIHJlY3QgYW5kIHRoZSBwYXRoIHdl
IGp1c3QgY3JlYXRlZC4KLSAgICBEMkQxX1NJWkVfRiByZW5kZXJlclNpemUgPSBwbGF0Zm9ybUNv
bnRleHQucmVuZGVyVGFyZ2V0KCktPkdldFNpemUoKTsKLSAgICBGbG9hdFJlY3QgY2xpcEJvdW5k
cygwLCAwLCByZW5kZXJlclNpemUud2lkdGgsIHJlbmRlcmVyU2l6ZS5oZWlnaHQpOwotCi0gICAg
UGF0aCBib3VuZGluZ1JlY3Q7Ci0gICAgYm91bmRpbmdSZWN0LmFkZFJlY3QoY2xpcEJvdW5kcyk7
Ci0gICAgYm91bmRpbmdSZWN0LmFwcGVuZEdlb21ldHJ5KHBhdGgucGxhdGZvcm1QYXRoKCkpOwot
Ci0gICAgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4gcGF0aFRvQ2xpcDsKLSAgICBib3VuZGlu
Z1JlY3QuY3JlYXRlR2VvbWV0cnlXaXRoRmlsbE1vZGUoV2luZFJ1bGU6OkV2ZW5PZGQsIHBhdGhU
b0NsaXApOwotICAgIGNsaXBQYXRoKHBsYXRmb3JtQ29udGV4dCwgcGF0aFRvQ2xpcC5nZXQoKSk7
Ci19Ci0KLXZvaWQgY2xpcFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29u
dGV4dCwgY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17Ci0gICAgaWYgKHBh
dGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIERpcmVjdDJEOjpjbGlwKHBsYXRmb3JtQ29udGV4dCwg
RmxvYXRSZWN0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ09NUHRyPElEMkQx
R2VvbWV0cnlHcm91cD4gcGF0aFRvQ2xpcDsKLSAgICBwYXRoLmNyZWF0ZUdlb21ldHJ5V2l0aEZp
bGxNb2RlKGNsaXBSdWxlLCBwYXRoVG9DbGlwKTsKLQotICAgIGNsaXBQYXRoKHBsYXRmb3JtQ29u
dGV4dCwgcGF0aFRvQ2xpcC5nZXQoKSk7Ci0KLSAgICBpZiAoYXV0byogZ3JhcGhpY3NDb250ZXh0
UHJpdmF0ZSA9IHBsYXRmb3JtQ29udGV4dC5ncmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAg
ICAgIGdyYXBoaWNzQ29udGV4dFByaXZhdGUtPmNsaXAocGF0aCk7Ci19Ci0KLXZvaWQgY2xpcFBh
dGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgSUQyRDFHZW9tZXRy
eSogcGF0aCkKLXsKLSAgICBDT01QdHI8SUQyRDFMYXllcj4gY2xpcExheWVyOwotICAgIEhSRVNV
TFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkNyZWF0ZUxheWVyKCZjbGlw
TGF5ZXIpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
cGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5QdXNoTGF5ZXIoRDJEMTo6TGF5ZXJQYXJh
bWV0ZXJzKEQyRDE6OkluZmluaXRlUmVjdCgpLCBwYXRoKSwgY2xpcExheWVyLmdldCgpKTsKLSAg
ICBwbGF0Zm9ybUNvbnRleHQucHVzaFJlbmRlckNsaXAoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6
OkxheWVyQ2xpcCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNldEFjdGl2ZUxheWVyKFdURk1vdmUo
Y2xpcExheWVyKSk7Ci19Ci0KLXZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQmLCBJRDJEMVJlbmRlclRhcmdldCosIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotCi12b2lkIGNvcHlCaXRzKGNvbnN0IHVpbnQ4X3QqIHNy
Y1Jvd3MsIHVuc2lnbmVkIHJvd0NvdW50LCB1bnNpZ25lZCBjb2xDb3VudCwgdW5zaWduZWQgc3Jj
U3RyaWRlLCB1bnNpZ25lZCBkZXN0U3RyaWRlLCB1aW50OF90KiBkZXN0Um93cykKLXsKLSAgICBm
b3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgcm93Q291bnQ7ICsreSkgewotICAgICAgICAvLyBTb3Vy
Y2UgZGF0YSBtYXkgYmUgcG93ZXItb2YtdHdvIHNpemVkLCBzbyB3ZSBuZWVkIHRvIG9ubHkgY29w
eSB0aGUgYml0cyB0aGF0Ci0gICAgICAgIC8vIGNvcnJlc3BvbmQgdG8gdGhlIHJlY3RhbmdsZSBz
dXBwbGllZCBieSB0aGUgY2FsbGVyLgotICAgICAgICBjb25zdCB1aW50MzJfdCogc3JjUm93ID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBzcmNTdHJpZGUgKiB5
KTsKLSAgICAgICAgdWludDMyX3QqIGRlc3RSb3cgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90
Kj4oZGVzdFJvd3MgKyBkZXN0U3RyaWRlICogeSk7Ci0gICAgICAgIG1lbWNweShkZXN0Um93LCBz
cmNSb3csIGNvbENvdW50KTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIERpcmVjdDJECi0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGly
ZWN0MkRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDE3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIg
PGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQnJlbnQgRnVsZ2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4K
LSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShESVJF
Q1QyRCkKLQotI2luY2x1ZGUgIkRhc2hBcnJheS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPGQyZDEuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci1jbGFzcyBDb2xvcjsKLWNsYXNzIEZs
b2F0UmVjdDsKLWNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7Ci1jbGFzcyBGbG9hdFNpemU7Ci1jbGFz
cyBQYXRoOwotCi1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGU7Ci0KLW5hbWVzcGFjZSBEaXJl
Y3QyRCB7Ci0KLW5hbWVzcGFjZSBTdGF0ZSB7Ci0KLXZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiwgZmxvYXQpOwotdm9pZCBzZXRTdHJva2VTdHlsZShQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYsIFN0cm9rZVN0eWxlKTsKLQotdm9pZCBzZXRDb21wb3NpdGVP
cGVyYXRpb24oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBDb21wb3NpdGVPcGVyYXRvciwgQmxl
bmRNb2RlKTsKLXZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
JiwgYm9vbCk7Ci0KLXZvaWQgc2V0Q1RNKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJik7Ci1BZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJik7Ci0KLUludFJlY3QgZ2V0Q2xpcEJvdW5kcyhQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYpOwotRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmKTsKLQotYm9vbCBpc0FjY2VsZXJhdGVkQ29udGV4dChQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotCi19IC8vIG5hbWVzcGFjZSBTdGF0ZQotCi1zdHJ1
Y3QgRmlsbFNvdXJjZSB7Ci0gICAgRmlsbFNvdXJjZSgpID0gZGVmYXVsdDsKLSAgICBleHBsaWNp
dCBGaWxsU291cmNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7Ci0KLSAgICBmbG9hdCBnbG9iYWxBbHBoYSB7IDAgfTsKLSAgICBDT01QdHI8SUQy
RDFCcnVzaD4gYnJ1c2g7Ci0gICAgQ29sb3IgY29sb3I7Ci0KLSAgICBXaW5kUnVsZSBmaWxsUnVs
ZSB7IFdpbmRSdWxlOjpOb25aZXJvIH07Ci19OwotCi1zdHJ1Y3QgU3Ryb2tlU291cmNlIHsKLSAg
ICBTdHJva2VTb3VyY2UoKSA9IGRlZmF1bHQ7Ci0gICAgZXhwbGljaXQgU3Ryb2tlU291cmNlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7Ci0KLSAg
ICBmbG9hdCBnbG9iYWxBbHBoYSB7IDAgfTsKLSAgICBmbG9hdCB0aGlja25lc3MgeyAwIH07Ci0g
ICAgQ09NUHRyPElEMkQxQnJ1c2g+IGJydXNoOwotICAgIENvbG9yIGNvbG9yOwotfTsKLQotc3Ry
dWN0IFNoYWRvd1N0YXRlIHsKLSAgICBTaGFkb3dTdGF0ZSgpID0gZGVmYXVsdDsKLSAgICBXRUJD
T1JFX0VYUE9SVCBleHBsaWNpdCBTaGFkb3dTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYpOwotCi0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdDsKLSAgICBib29sIGlzUmVxdWlyZWQo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKSBjb25zdDsKLQotICAgIEZsb2F0U2l6ZSBvZmZzZXQ7
Ci0gICAgZmxvYXQgYmx1ciB7IDAgfTsKLSAgICBDb2xvciBjb2xvcjsKLSAgICBib29sIGlnbm9y
ZVRyYW5zZm9ybXMgeyBmYWxzZSB9OwotCi0gICAgZmxvYXQgZ2xvYmFsQWxwaGEgeyAxLjAgfTsK
LSAgICBDb21wb3NpdGVPcGVyYXRvciBnbG9iYWxDb21wb3NpdGVPcGVyYXRvciB7IENvbXBvc2l0
ZU9wZXJhdG9yOjpTb3VyY2VPdmVyIH07Ci19OwotCi12b2lkIHNldExpbmVDYXAoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmLCBMaW5lQ2FwKTsKLXZvaWQgc2V0TGluZURhc2goUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmLCBjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCk7Ci12b2lkIHNldExpbmVKb2lu
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgTGluZUpvaW4pOwotdm9pZCBzZXRNaXRlckxpbWl0
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgZmxvYXQpOwotCi12b2lkIGZpbGxSZWN0KFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmlsbFNvdXJjZSYs
IGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIGZpbGxSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBjb25zdCBTaGFkb3dTdGF0ZSYp
Owotdm9pZCBmaWxsUmVjdFdpdGhHcmFkaWVudChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNv
bnN0IEZsb2F0UmVjdCYsIElEMkQxQnJ1c2gqKTsKLXZvaWQgZmlsbFJvdW5kZWRSZWN0KFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9y
JiwgY29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiwgY29uc3QgRmlsbFNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIGZp
bGxQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgUGF0aCYsIGNvbnN0IEZpbGxT
b3VyY2UmLCBjb25zdCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBmaWxsUGF0aChQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCYsIGNvbnN0IFBhdGgmLCBjb25zdCBDb2xvciYsIGNvbnN0IFNoYWRvd1N0YXRl
Jik7Ci0KLXZvaWQgc3Ryb2tlUmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0LCBjb25zdCBTdHJva2VTb3VyY2UmLCBjb25zdCBTaGFkb3dTdGF0ZSYp
Owotdm9pZCBzdHJva2VQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgUGF0aCYs
IGNvbnN0IFN0cm9rZVNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIGNsZWFyUmVj
dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYpOwotCi12b2lkIGRy
YXdHbHlwaHMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGaWxsU291cmNlJiwgY29u
c3QgU3Ryb2tlU291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUmLCBjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgRm9udCYsIGRvdWJsZSwgY29uc3QgVmVjdG9yPHVuc2lnbmVkIHNob3J0PiYgZ2x5cGhz
LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBob3Jpem9udGFsQWR2YW5jZXMsIGNvbnN0IFZlY3RvcjxE
V1JJVEVfR0xZUEhfT0ZGU0VUPiYsIGZsb2F0LCBUZXh0RHJhd2luZ01vZGVGbGFncywgZmxvYXQs
IGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IENvbG9yJik7Ci0KLXZvaWQgZHJhd1BsYXRmb3JtSW1h
Z2UoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBJV0lDQml0bWFwKiwgY29uc3QgRmxvYXRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiwgZmxvYXQsIGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIGRy
YXdQbGF0Zm9ybUltYWdlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgSUQyRDFCaXRtYXAqLCBj
b25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmLCBmbG9hdCwgY29uc3QgU2hhZG93U3Rh
dGUmKTsKLXZvaWQgZHJhd1BhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBQYXRo
JiwgY29uc3QgU3Ryb2tlU291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQgZHJhd1Bh
dHRlcm4oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBDT01QdHI8SUQyRDFCaXRtYXA+JiYsIGNv
bnN0IEludFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSk7Ci0KLXZvaWQgZHJhd1dpdGhvdXRTaGFkb3coUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmLCBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+JiYgZHJhd0NvbW1hbmRzKTsK
LXZvaWQgZHJhd1dpdGhTaGFkb3coUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBGbG9hdFJlY3Qg
Ym91bmRpbmdSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYsIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5k
ZXJUYXJnZXQqKT4mJiBkcmF3Q29tbWFuZHMpOwotCi12b2lkIGRyYXdSZWN0KFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQsIGNvbnN0IENvbG9yJiwgU3Ry
b2tlU3R5bGUsIGNvbnN0IENvbG9yJik7Ci12b2lkIGRyYXdMaW5lKFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBTdHJva2VTdHls
ZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwgYm9vbCk7Ci12b2lkIGRyYXdMaW5lc0ZvclRleHQoUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBjb25zdCBDb2xvciYpOwotdm9pZCBkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxv
YXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpOwotdm9pZCBkcmF3RWxsaXBzZShQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYsIFN0cm9rZVN0eWxlLCBjb25z
dCBDb2xvciYsIGZsb2F0KTsKLXZvaWQgZmlsbEVsbGlwc2UoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIFN0cm9rZVN0eWxlLCBjb25zdCBD
b2xvciYsIGZsb2F0KTsKLQotdm9pZCBkcmF3Rm9jdXNSaW5nKFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJiwgY29uc3QgUGF0aCYsIGZsb2F0LCBjb25zdCBDb2xvciYpOwotdm9pZCBkcmF3Rm9jdXNS
aW5nKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBm
bG9hdCwgY29uc3QgQ29sb3ImKTsKLQotdm9pZCBmbHVzaChQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYpOwotdm9pZCBzYXZlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci12b2lkIHJlc3RvcmUo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKTsKLQotdm9pZCB0cmFuc2xhdGUoUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmLCBmbG9hdCwgZmxvYXQpOwotdm9pZCByb3RhdGUoUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQmLCBmbG9hdCk7Ci12b2lkIHNjYWxlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwg
Y29uc3QgRmxvYXRTaXplJik7Ci12b2lkIGNvbmNhdENUTShQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotCi12b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBmbG9hdCk7Ci12b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci0KLXZvaWQgY2xpcChQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYpOwotCi12b2lkIGNsaXBPdXQoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmKTsKLXZvaWQgY2xpcE91dChQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IFBhdGgmKTsKLXZvaWQgY2xpcFBhdGgoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBQYXRoJiwgV2luZFJ1bGUpOwotdm9pZCBjbGlwUGF0
aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIElEMkQxR2VvbWV0cnkqIHBhdGgpOwotCi12b2lk
IGNsaXBUb0ltYWdlQnVmZmVyKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgSUQyRDFSZW5kZXJU
YXJnZXQqLCBjb25zdCBGbG9hdFJlY3QmKTsKLQotfSAvLyBuYW1lc3BhY2UgRGlyZWN0MkQKLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVj
dDJEVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmNwcAkobm9uZXhpc3RlbnQpCkBA
IC0xLDUxNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2lu
Y2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9h
dFNpemUuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURl
Y29kZXJEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRTaXpl
LmgiCi0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2luY2x1ZGUg
PHNobHdhcGkuaD4KLSNpbmNsdWRlIDx3aW5jb2RlYy5oPgotCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotbmFtZXNwYWNlIERpcmVjdDJEIHsKLQotY29uc3RleHByIERYR0lfRk9STUFUIHdlYmtp
dFRleHR1cmVGb3JtYXQgPSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STTsKLWNvbnN0ZXhwciBE
MkQxX0FMUEhBX01PREUgd2Via2l0QWxwaGFNb2RlID0gRDJEMV9BTFBIQV9NT0RFX1BSRU1VTFRJ
UExJRUQ7Ci0KLUludFNpemUgYml0bWFwU2l6ZShJV0lDQml0bWFwU291cmNlKiBiaXRtYXBTb3Vy
Y2UpCi17Ci0gICAgVUlOVCB3aWR0aCwgaGVpZ2h0OwotICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBT
b3VyY2UtPkdldFNpemUoJndpZHRoLCAmaGVpZ2h0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikp
Ci0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0
KTsKLX0KLQotRmxvYXRTaXplIGJpdG1hcFNpemUoSUQyRDFCaXRtYXAqIGJpdG1hcFNvdXJjZSkK
LXsKLSAgICByZXR1cm4gYml0bWFwU291cmNlLT5HZXRTaXplKCk7Ci19Ci0KLUZsb2F0U2l6ZSBi
aXRtYXBSZXNvbHV0aW9uKElXSUNCaXRtYXBTb3VyY2UqIGJpdG1hcFNvdXJjZSkKLXsKLSAgICBj
b25zdGV4cHIgZG91YmxlIGRwaUJhc2UgPSA5NjsKLQotICAgIGRvdWJsZSBkcGlYLCBkcGlZOwot
ICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBTb3VyY2UtPkdldFJlc29sdXRpb24oJmRwaVgsICZkcGlZ
KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBG
bG9hdFNpemUgcmVzdWx0KGRwaVgsIGRwaVkpOwotICAgIHJlc3VsdC5zY2FsZSgxLjAgLyBkcGlC
YXNlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1GbG9hdFNpemUgYml0bWFwUmVzb2x1dGlv
bihJRDJEMUJpdG1hcCogYml0bWFwKQotewotICAgIGNvbnN0ZXhwciBkb3VibGUgZHBpQmFzZSA9
IDk2OwotCi0gICAgZmxvYXQgZHBpWCwgZHBpWTsKLSAgICBiaXRtYXAtPkdldERwaSgmZHBpWCwg
JmRwaVkpOwotCi0gICAgRmxvYXRTaXplIHJlc3VsdChkcGlYLCBkcGlZKTsKLSAgICByZXN1bHQu
c2NhbGUoMS4wIC8gZHBpQmFzZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLQotfQotCi1GbG9hdFNp
emUgYml0bWFwUmVzb2x1dGlvbihJRDJEMVJlbmRlclRhcmdldCogdGFyZ2V0KQotewotICAgIGNv
bnN0ZXhwciBkb3VibGUgZHBpQmFzZSA9IDk2OwotCi0gICAgZmxvYXQgZHBpWCwgZHBpWTsKLSAg
ICB0YXJnZXQtPkdldERwaSgmZHBpWCwgJmRwaVkpOwotCi0gICAgRmxvYXRTaXplIHJlc3VsdChk
cGlYLCBkcGlZKTsKLSAgICByZXN1bHQuc2NhbGUoMS4wIC8gZHBpQmFzZSk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLQotfQotdW5zaWduZWQgYml0c1BlclBpeGVsKEdVSUQgYml0bWFwRm9ybWF0KQot
ewotICAgIENPTVB0cjxJV0lDQ29tcG9uZW50SW5mbz4gY29tcG9uZW50SW5mbzsKLSAgICBIUkVT
VUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3RlbUltYWdpbmdGYWN0b3J5KCktPkNy
ZWF0ZUNvbXBvbmVudEluZm8oYml0bWFwRm9ybWF0LCAmY29tcG9uZW50SW5mbyk7Ci0gICAgaWYg
KCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gNDsKLQotICAgIENPTVB0cjxJV0lDUGl4
ZWxGb3JtYXRJbmZvPiBwaXhlbEZvcm1hdDsKLSAgICBwaXhlbEZvcm1hdC5xdWVyeShjb21wb25l
bnRJbmZvKTsKLSAgICBpZiAoIXBpeGVsRm9ybWF0KQotICAgICAgICByZXR1cm4gNDsKLQotICAg
IFVJTlQgYnBwID0gMDsKLSAgICBociA9IHBpeGVsRm9ybWF0LT5HZXRCaXRzUGVyUGl4ZWwoJmJw
cCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gNDsKLQotICAgIHJl
dHVybiBicHA7Ci19Ci0KLUNPTVB0cjxJV0lDQml0bWFwPiBjcmVhdGVEaXJlY3QyREltYWdlU3Vy
ZmFjZVdpdGhEYXRhKHZvaWQqIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIHVuc2lnbmVkIHN0
cmlkZSkKLXsKLSAgICBDaGVja2VkU2l6ZSBudW1CeXRlcyA9IENoZWNrZWRVaW50MzIoc2l6ZS5o
ZWlnaHQoKSkgKiBzdHJpZGU7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcD4gc3VyZmFjZTsK
LSAgICBIUkVTVUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3RlbUltYWdpbmdGYWN0
b3J5KCktPkNyZWF0ZUJpdG1hcEZyb21NZW1vcnkoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
LCB3aWNCaXRtYXBGb3JtYXQoKSwgc3RyaWRlLCBzdGF0aWNfY2FzdDxVSU5UPihudW1CeXRlcy52
YWx1ZSgpKSwgcmVpbnRlcnByZXRfY2FzdDxCWVRFKj4oZGF0YSksICZzdXJmYWNlKTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJu
IHN1cmZhY2U7Ci19Ci0KLUNPTVB0cjxJV0lDQml0bWFwPiBjcmVhdGVXaWNCaXRtYXAoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBDT01QdHI8SVdJQ0JpdG1hcD4gc3VyZmFjZTsKLSAgICBI
UkVTVUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3RlbUltYWdpbmdGYWN0b3J5KCkt
PkNyZWF0ZUJpdG1hcChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHdpY0JpdG1hcEZvcm1h
dCgpLCBXSUNCaXRtYXBDYWNoZU9uRGVtYW5kLCAmc3VyZmFjZSk7Ci0gICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBzdXJmYWNlOwot
fQotCi1EMkQxX1BJWEVMX0ZPUk1BVCBwaXhlbEZvcm1hdEZvclNvZnR3YXJlTWFuaXB1bGF0aW9u
KCkKLXsKLSAgICByZXR1cm4gRDJEMTo6UGl4ZWxGb3JtYXQoRFhHSV9GT1JNQVRfUjhHOEI4QThf
VU5PUk0sIEQyRDFfQUxQSEFfTU9ERV9QUkVNVUxUSVBMSUVEKTsKLX0KLQotRDJEMV9QSVhFTF9G
T1JNQVQgcGl4ZWxGb3JtYXQoKQotewotICAgIC8vIFNpbmNlIHdlIG5lZWQgdG8gaW50ZXJhY3Qg
d2l0aCBIREMgZnJvbSB0aW1lLXRvLXRpbWUsIHdlIGFyZSBmb3JjZWQgdG8gdXNlIERYR0lfRk9S
TUFUX0I4RzhSOEE4X1VOT1JNIGFuZCBEMkQxX0FMUEhBX01PREVfUFJFTVVMVElQTElFRAotICAg
IHJldHVybiBEMkQxOjpQaXhlbEZvcm1hdCh3ZWJraXRUZXh0dXJlRm9ybWF0LCB3ZWJraXRBbHBo
YU1vZGUpOwotfQotCi1HVUlEIHdpY0JpdG1hcEZvcm1hdCgpCi17Ci0gICAgLy8gVGhpcyBpcyB0
aGUgV0lDIGZvcm1hdCBjb21wYXRpYmxlIHdpdGggRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0u
IEl0IGlzIGFsc28gc3VwcG9zZWRseSB0aGUgbW9zdCBlZmZpY2llbnQgaW4tbWVtb3J5Ci0gICAg
Ly8gcmVwcmVzZW50YXRpb24gZm9yIFdJQyBpbWFnZXMuCi0gICAgcmV0dXJuIEdVSURfV0lDUGl4
ZWxGb3JtYXQzMmJwcFBCR1JBOwotfQotCi1EMkQxX0JJVE1BUF9QUk9QRVJUSUVTIGJpdG1hcFBy
b3BlcnRpZXMoKQotewotICAgIHJldHVybiBEMkQxOjpCaXRtYXBQcm9wZXJ0aWVzKHBpeGVsRm9y
bWF0KCkpOwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXA+IGNyZWF0ZUJpdG1hcChJRDJEMVJlbmRl
clRhcmdldCogcmVuZGVyVGFyZ2V0LCBjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIGF1dG8g
Yml0bWFwQ3JlYXRlUHJvcGVydGllcyA9IGJpdG1hcFByb3BlcnRpZXMoKTsKLQotICAgIENPTVB0
cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotICAgIEQyRDFfU0laRV9VIGJpdG1hcFNpemUgPSBzaXpl
OwotICAgIEhSRVNVTFQgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcChiaXRtYXBTaXpl
LCBiaXRtYXBDcmVhdGVQcm9wZXJ0aWVzLCAmYml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRCho
cikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGJpdG1hcDsKLX0KLQot
RDJEMV9SRU5ERVJfVEFSR0VUX1BST1BFUlRJRVMgcmVuZGVyVGFyZ2V0UHJvcGVydGllcygpCi17
Ci0gICAgcmV0dXJuIEQyRDE6OlJlbmRlclRhcmdldFByb3BlcnRpZXMoRDJEMV9SRU5ERVJfVEFS
R0VUX1RZUEVfREVGQVVMVCwKLSAgICAgICAgcGl4ZWxGb3JtYXQoKSwgMCwgMCwgRDJEMV9SRU5E
RVJfVEFSR0VUX1VTQUdFX0dESV9DT01QQVRJQkxFLCBEMkQxX0ZFQVRVUkVfTEVWRUxfREVGQVVM
VCk7Ci19Ci0KLUNPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gY3JlYXRlUmVuZGVyVGFyZ2V0RnJv
bVdJQ0JpdG1hcChJV0lDQml0bWFwKiBiaXRtYXBTb3VyY2UpCi17Ci0gICAgYXV0byB0YXJnZXRQ
cm9wZXJ0aWVzID0gcmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwotCi0gICAgQ09NUHRyPElEMkQx
UmVuZGVyVGFyZ2V0PiBiaXRtYXBDb250ZXh0OwotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0Nv
bnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlV2ljQml0bWFwUmVuZGVyVGFyZ2V0KGJpdG1h
cFNvdXJjZSwgJnRhcmdldFByb3BlcnRpZXMsICZiaXRtYXBDb250ZXh0KTsKLSAgICBpZiAoIWJp
dG1hcENvbnRleHQgfHwgIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgcmV0dXJuIGJpdG1hcENvbnRleHQ7Ci19Ci0KLUNPTVB0cjxJRDJEMURDUmVuZGVyVGFy
Z2V0PiBjcmVhdGVHRElSZW5kZXJUYXJnZXQoKQotewotICAgIGF1dG8gdGFyZ2V0UHJvcGVydGll
cyA9IHJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKLQotICAgIENPTVB0cjxJRDJEMURDUmVuZGVy
VGFyZ2V0PiByZW5kZXJUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6
c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEQ1JlbmRlclRhcmdldCgmdGFyZ2V0UHJvcGVydGllcywg
JnJlbmRlclRhcmdldCk7Ci0gICAgaWYgKCFyZW5kZXJUYXJnZXQgfHwgIVNVQ0NFRURFRChocikp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHJlbmRlclRhcmdldDsKLX0K
LQotQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBjcmVhdGVCaXRtYXBSZW5kZXJUYXJn
ZXQoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsKLSAgICBpZiAoIXJlbmRlclRh
cmdldCkKLSAgICAgICAgcmVuZGVyVGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0UmVu
ZGVyVGFyZ2V0KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1h
cENvbnRleHQ7Ci0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlQ29tcGF0aWJs
ZVJlbmRlclRhcmdldChudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBEMkQxX0NPTVBBVElCTEVf
UkVOREVSX1RBUkdFVF9PUFRJT05TX0dESV9DT01QQVRJQkxFLCAmYml0bWFwQ29udGV4dCk7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJl
dHVybiBiaXRtYXBDb250ZXh0OwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+
IGNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplLCBJRDJE
MVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKLXsK
LSAgICBVTlVTRURfUEFSQU0oZGV2aWNlU2NhbGVGYWN0b3IpOwotCi0gICAgaWYgKCFyZW5kZXJU
YXJnZXQpCi0gICAgICAgIHJlbmRlclRhcmdldCA9IEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJl
bmRlclRhcmdldCgpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRt
YXBDb250ZXh0OwotICAgIGF1dG8gZGVzaXJlZFNpemUgPSBEMkQxOjpTaXplRihzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCkpOwotICAgIEQyRDFfU0laRV9VIHBpeGVsU2l6ZSA9IEQyRDE6OlNp
emVVKGNsYW1wVG88dW5zaWduZWQ+KGRldmljZVNjYWxlRmFjdG9yICogc2l6ZS53aWR0aCgpKSwg
Y2xhbXBUbzx1bnNpZ25lZD4oZGV2aWNlU2NhbGVGYWN0b3IgKiBzaXplLmhlaWdodCgpKSk7Ci0g
ICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlQ29tcGF0aWJsZVJlbmRlclRhcmdl
dCgmZGVzaXJlZFNpemUsICZwaXhlbFNpemUsIG51bGxwdHIsIEQyRDFfQ09NUEFUSUJMRV9SRU5E
RVJfVEFSR0VUX09QVElPTlNfR0RJX0NPTVBBVElCTEUsICZiaXRtYXBDb250ZXh0KTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJu
IGJpdG1hcENvbnRleHQ7Ci19Ci0KLUNPTVB0cjxJRFhHSVN1cmZhY2UxPiBjcmVhdGVEWEdJU3Vy
ZmFjZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplLCBJRDNEMTFEZXZpY2UxKiBkaXJlY3RYRGV2
aWNlLCBib29sIGNyb3NzUHJvY2VzcykKLXsKLSAgICBpZiAoIWRpcmVjdFhEZXZpY2UpCi0gICAg
ICAgIGRpcmVjdFhEZXZpY2UgPSBEaXJlY3QyRDo6ZGVmYXVsdERpcmVjdFhEZXZpY2UoKTsKLQot
ICAgIC8vIENyZWF0ZSB0aGUgcmVuZGVyIHRhcmdldCB0ZXh0dXJlCi0gICAgRDNEMTFfVEVYVFVS
RTJEX0RFU0MgZGVzYzsKLSAgICBaZXJvTWVtb3J5KCZkZXNjLCBzaXplb2YoZGVzYykpOwotICAg
IGRlc2MuV2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgZGVzYy5IZWlnaHQgPSBzaXplLmhlaWdo
dCgpOwotICAgIGRlc2MuTWlwTGV2ZWxzID0gMTsKLSAgICBkZXNjLkFycmF5U2l6ZSA9IDE7Ci0g
ICAgZGVzYy5Gb3JtYXQgPSB3ZWJraXRUZXh0dXJlRm9ybWF0OwotICAgIGRlc2MuU2FtcGxlRGVz
Yy5Db3VudCA9IDE7Ci0gICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7Ci0gICAg
ZGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX1NI
QURFUl9SRVNPVVJDRTsKLSAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICBkZXNjLk1p
c2NGbGFncyA9IEQzRDExX1JFU09VUkNFX01JU0NfR0RJX0NPTVBBVElCTEU7Ci0gICAgaWYgKGNy
b3NzUHJvY2VzcykKLSAgICAgICAgZGVzYy5NaXNjRmxhZ3MgfD0gRDNEMTFfUkVTT1VSQ0VfTUlT
Q19TSEFSRURfTlRIQU5ETEUgfCBEM0QxMV9SRVNPVVJDRV9NSVNDX1NIQVJFRF9LRVlFRE1VVEVY
OwotCi0gICAgQ09NUHRyPElEM0QxMVRleHR1cmUyRD4gdGV4dHVyZTsKLSAgICBIUkVTVUxUIGhy
ID0gZGlyZWN0WERldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBudWxscHRyLCAmdGV4dHVy
ZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBDT01QdHI8SURY
R0lTdXJmYWNlMT4gc3VyZmFjZTsKLSAgICBociA9IHRleHR1cmUtPlF1ZXJ5SW50ZXJmYWNlKCZz
dXJmYWNlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIHJldHVy
biBzdXJmYWNlOwotfQotCi1DT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IGNyZWF0ZVN1cmZhY2VS
ZW5kZXJUYXJnZXQoSURYR0lTdXJmYWNlMSogc3VyZmFjZSkKLXsKLSAgICBhdXRvIHBpeGVsRm9y
bWF0ID0gRDJEMTo6UGl4ZWxGb3JtYXQod2Via2l0VGV4dHVyZUZvcm1hdCwgd2Via2l0QWxwaGFN
b2RlKTsKLQotICAgIGF1dG8gcHJvcGVydGllcyA9IEQyRDE6OlJlbmRlclRhcmdldFByb3BlcnRp
ZXMoRDJEMV9SRU5ERVJfVEFSR0VUX1RZUEVfREVGQVVMVCwKLSAgICAgICAgcGl4ZWxGb3JtYXQs
IDAsIDAsIEQyRDFfUkVOREVSX1RBUkdFVF9VU0FHRV9HRElfQ09NUEFUSUJMRSwgRDJEMV9GRUFU
VVJFX0xFVkVMXzEwKTsKLQotICAgIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gcmVuZGVyVGFy
Z2V0OwotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+
Q3JlYXRlRHhnaVN1cmZhY2VSZW5kZXJUYXJnZXQoc3VyZmFjZSwgcHJvcGVydGllcywgJnJlbmRl
clRhcmdldCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIHJldHVybiByZW5kZXJUYXJnZXQ7Ci19Ci0KLXZvaWQgY29weVJlY3RGcm9tT25l
U3VyZmFjZVRvQW5vdGhlcihJRDJEMUJpdG1hcCogZnJvbSwgSUQyRDFCaXRtYXAqIHRvLCBjb25z
dCBJbnRTaXplJiBzb3VyY2VPZmZzZXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNp
emUmIGRlc3RPZmZzZXQpCi17Ci0gICAgSW50U2l6ZSBzb3VyY2VCaXRtYXBTaXplID0gZnJvbS0+
R2V0UGl4ZWxTaXplKCk7Ci0gICAgaWYgKHNvdXJjZUJpdG1hcFNpemUuaXNaZXJvKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEludFNpemUgdGFyZ2V0Qml0bWFwU2l6ZSA9IHRvLT5HZXRQaXhl
bFNpemUoKTsKLSAgICBpZiAodGFyZ2V0Qml0bWFwU2l6ZS5pc1plcm8oKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgSW50UmVjdCBzb3VyY2VSZWN0KHNvdXJjZU9mZnNldC53aWR0aCgpLCBzb3Vy
Y2VPZmZzZXQuaGVpZ2h0KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgSW50
UmVjdCB0YXJnZXRSZWN0KGRlc3RPZmZzZXQud2lkdGgoKSwgZGVzdE9mZnNldC5oZWlnaHQoKSwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLQotICAgIEludFJlY3Qgc291cmNlQml0bWFw
UmVjdChJbnRQb2ludCgpLCBzb3VyY2VCaXRtYXBTaXplKTsKLSAgICBJbnRSZWN0IHRhcmdldEJp
dG1hcFJlY3QoSW50UG9pbnQoKSwgdGFyZ2V0Qml0bWFwU2l6ZSk7Ci0KLSAgICBzb3VyY2VSZWN0
LmludGVyc2VjdChzb3VyY2VCaXRtYXBSZWN0KTsKLSAgICB0YXJnZXRSZWN0LmludGVyc2VjdCh0
YXJnZXRCaXRtYXBSZWN0KTsKLQotICAgIEQyRDFfUkVDVF9VIGQyZFNvdXJjZVJlY3QgPSBEMkQx
OjpSZWN0VShzb3VyY2VSZWN0LngoKSwgc291cmNlUmVjdC55KCksIHNvdXJjZVJlY3QueCgpICsg
dGFyZ2V0UmVjdC53aWR0aCgpLCBzb3VyY2VSZWN0LnkoKSArIHRhcmdldFJlY3QuaGVpZ2h0KCkp
OwotICAgIGF1dG8gb2Zmc2V0ID0gRDJEMTo6UG9pbnQyVShkZXN0T2Zmc2V0LndpZHRoKCksIGRl
c3RPZmZzZXQuaGVpZ2h0KCkpOwotCi0gICAgSFJFU1VMVCBociA9IHRvLT5Db3B5RnJvbUJpdG1h
cCgmb2Zmc2V0LCBmcm9tLCAmZDJkU291cmNlUmVjdCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotfQotCi12b2lkIHdyaXRlRGlhZ25vc3RpY1BOR1RvUGF0aChJRDJEMVJlbmRlclRhcmdl
dCogcmVuZGVyVGFyZ2V0LCBJRDJEMUJpdG1hcCogYml0bWFwLCBMUENXU1RSIGZpbGVOYW1lKQot
ewotICAgIENPTVB0cjxJV0lDQml0bWFwRW5jb2Rlcj4gd2ljQml0bWFwRW5jb2RlcjsKLSAgICBI
UkVTVUxUIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3RlbUltYWdpbmdGYWN0b3J5KCkt
PkNyZWF0ZUVuY29kZXIoR1VJRF9Db250YWluZXJGb3JtYXRQbmcsIG51bGxwdHIsICZ3aWNCaXRt
YXBFbmNvZGVyKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBEV09SRCBtb2Rl
ID0gU1RHTV9DUkVBVEUgfCBTVEdNX1JFQURXUklURSB8IFNUR01fU0hBUkVfREVOWV9XUklURTsK
LSAgICBDT01QdHI8SVN0cmVhbT4gc3RyZWFtOwotICAgIGhyID0gOjpTSENyZWF0ZVN0cmVhbU9u
RmlsZUV4KGZpbGVOYW1lLCBtb2RlLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIFRSVUUsIG51bGxw
dHIsICZzdHJlYW0pOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0gd2lj
Qml0bWFwRW5jb2Rlci0+SW5pdGlhbGl6ZShzdHJlYW0uZ2V0KCksIFdJQ0JpdG1hcEVuY29kZXJO
b0NhY2hlKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBDT01QdHI8SVdJQ0Jp
dG1hcEZyYW1lRW5jb2RlPiB3aWNGcmFtZUVuY29kZTsKLSAgICBociA9IHdpY0JpdG1hcEVuY29k
ZXItPkNyZWF0ZU5ld0ZyYW1lKCZ3aWNGcmFtZUVuY29kZSwgbnVsbHB0cik7Ci0gICAgQVNTRVJU
KFNVQ0NFRURFRChocikpOwotCi0gICAgaHIgPSB3aWNGcmFtZUVuY29kZS0+SW5pdGlhbGl6ZShu
dWxscHRyKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBDT01QdHI8SUQyRDFE
ZXZpY2VDb250ZXh0PiBkMmREZXZpY2VDb250ZXh0OwotICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5R
dWVyeUludGVyZmFjZShfX3V1aWRvZihJRDJEMURldmljZUNvbnRleHQpLCByZWludGVycHJldF9j
YXN0PHZvaWQqKj4oJmQyZERldmljZUNvbnRleHQpKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0KLSAgICBDT01QdHI8SUQyRDFEZXZpY2U+IGQyZERldmljZTsKLSAgICBkMmREZXZpY2VD
b250ZXh0LT5HZXREZXZpY2UoJmQyZERldmljZSk7Ci0KLSAgICBDT01QdHI8SVdJQ0ltYWdlRW5j
b2Rlcj4gaW1hZ2VFbmNvZGVyOwotICAgIGhyID0gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnN5c3Rl
bUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZUltYWdlRW5jb2RlcihkMmREZXZpY2UuZ2V0KCksICZp
bWFnZUVuY29kZXIpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0gaW1h
Z2VFbmNvZGVyLT5Xcml0ZUZyYW1lKGJpdG1hcCwgd2ljRnJhbWVFbmNvZGUuZ2V0KCksIG51bGxw
dHIpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0gd2ljRnJhbWVFbmNv
ZGUtPkNvbW1pdCgpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0gd2lj
Qml0bWFwRW5jb2Rlci0+Q29tbWl0KCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0g
ICAgaHIgPSBzdHJlYW0tPkNvbW1pdChTVEdDX0RFRkFVTFQpOwotICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpKTsKLX0KLQotc3RhdGljIElEM0QxMURldmljZUNvbnRleHQxKiBpbW1lZGlhdGVDb250
ZXh0ID0gbnVsbHB0cjsKLQotSUQzRDExRGV2aWNlQ29udGV4dDEqIGR4Z2lJbW1lZGlhdGVDb250
ZXh0KCkKLXsKLSAgICBpZiAoIWltbWVkaWF0ZUNvbnRleHQpCi0gICAgICAgIGRlZmF1bHREaXJl
Y3RYRGV2aWNlKCk7Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChpbW1lZGlhdGVDb250ZXh0KTsKLSAg
ICByZXR1cm4gaW1tZWRpYXRlQ29udGV4dDsKLX0KLQotSUQzRDExRGV2aWNlMSogZGVmYXVsdERp
cmVjdFhEZXZpY2UoKQotewotICAgIHN0YXRpYyBJRDNEMTFEZXZpY2UxKiBkZWZhdWx0RGV2aWNl
MSA9IG51bGxwdHI7Ci0KLSAgICBpZiAoIWRlZmF1bHREZXZpY2UxKSB7Ci0gICAgICAgIGludCBk
ZXZpY2VGbGFncyA9IEQzRDExX0NSRUFURV9ERVZJQ0VfQkdSQV9TVVBQT1JUOwotI2lmbmRlZiBO
REVCVUcKLSAgICAgICAgZGV2aWNlRmxhZ3MgfD0gRDNEMTFfQ1JFQVRFX0RFVklDRV9ERUJVRzsK
LSNlbmRpZgotCi0gICAgICAgIElEM0QxMURldmljZSogZGVmYXVsdERldmljZSA9IG51bGxwdHI7
Ci0gICAgICAgIEQzRF9GRUFUVVJFX0xFVkVMIGZlYXR1cmVMZXZlbCA9IHsgfTsKLSAgICAgICAg
SUQzRDExRGV2aWNlQ29udGV4dCogaW1tZWRpYXRlRGV2aWNlQ29udGV4dCA9IG51bGxwdHI7Ci0g
ICAgICAgIEhSRVNVTFQgaHIgPSBEM0QxMUNyZWF0ZURldmljZShudWxscHRyLCBEM0RfRFJJVkVS
X1RZUEVfSEFSRFdBUkUsIG51bGxwdHIsIGRldmljZUZsYWdzLCBudWxscHRyLCAwLCBEM0QxMV9T
REtfVkVSU0lPTiwgJmRlZmF1bHREZXZpY2UsICZmZWF0dXJlTGV2ZWwsICZpbW1lZGlhdGVEZXZp
Y2VDb250ZXh0KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAg
ICAgICAgaHIgPSBkZWZhdWx0RGV2aWNlLT5RdWVyeUludGVyZmFjZSgmZGVmYXVsdERldmljZTEp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgZGVmYXVs
dERldmljZTEtPkFkZFJlZigpOwotCi0gICAgICAgIGhyID0gaW1tZWRpYXRlRGV2aWNlQ29udGV4
dC0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQzRDExRGV2aWNlQ29udGV4dDEpLCByZWludGVy
cHJldF9jYXN0PHZvaWQqKj4oJmltbWVkaWF0ZUNvbnRleHQpKTsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIGltbWVkaWF0ZUNvbnRleHQtPkFkZFJlZigp
OwotICAgIH0KLQotICAgIHJldHVybiBkZWZhdWx0RGV2aWNlMTsKLX0KLQotYm9vbCBjcmVhdGVE
ZXZpY2VBbmRDb250ZXh0KENPTVB0cjxJRDNEMTFEZXZpY2UxPiYgZDNkRGV2aWNlLCBDT01QdHI8
SUQzRDExRGV2aWNlQ29udGV4dDE+JiBpbW1lZGlhdGVDb250ZXh0KQotewotICAgIGludCBkZXZp
Y2VGbGFncyA9IEQzRDExX0NSRUFURV9ERVZJQ0VfQkdSQV9TVVBQT1JUOwotI2lmbmRlZiBOREVC
VUcKLSAgICBkZXZpY2VGbGFncyB8PSBEM0QxMV9DUkVBVEVfREVWSUNFX0RFQlVHOwotI2VuZGlm
Ci0KLSAgICBEM0RfRkVBVFVSRV9MRVZFTCBmZWF0dXJlTGV2ZWwgPSB7IH07Ci0gICAgSUQzRDEx
RGV2aWNlKiBkZWZhdWx0RGV2aWNlID0gbnVsbHB0cjsKLSAgICBJRDNEMTFEZXZpY2VDb250ZXh0
KiBpbW1lZGlhdGVEZXZpY2VDb250ZXh0ID0gbnVsbHB0cjsKLSAgICBIUkVTVUxUIGhyID0gOjpE
M0QxMUNyZWF0ZURldmljZShudWxscHRyLCBEM0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsIG51bGxw
dHIsIGRldmljZUZsYWdzLCBudWxscHRyLCAwLCBEM0QxMV9TREtfVkVSU0lPTiwgJmRlZmF1bHRE
ZXZpY2UsICZmZWF0dXJlTGV2ZWwsICZpbW1lZGlhdGVEZXZpY2VDb250ZXh0KTsKLSAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0gZGVmYXVsdERldmljZS0+UXVl
cnlJbnRlcmZhY2UoJmQzZERldmljZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0gICAgZGVmYXVsdERldmljZS0+UmVsZWFzZSgpOwotCi0gICAgaHIgPSBpbW1lZGlhdGVE
ZXZpY2VDb250ZXh0LT5RdWVyeUludGVyZmFjZSgmaW1tZWRpYXRlQ29udGV4dCk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgaW1tZWRpYXRlQ29udGV4dC0+UmVsZWFz
ZSgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1DT01QdHI8SURYR0lEZXZpY2UxPiB0b0RYR0lE
ZXZpY2UoY29uc3QgQ09NUHRyPElEM0QxMURldmljZTE+JiBkM2REZXZpY2UpCi17Ci0gICAgaWYg
KCFkM2REZXZpY2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ09NUHRyPElEWEdJ
RGV2aWNlMT4gZHhnaURldmljZTsKLSAgICBIUkVTVUxUIGhyID0gZDNkRGV2aWNlLT5RdWVyeUlu
dGVyZmFjZShfX3V1aWRvZihJRFhHSURldmljZTEpLCAodm9pZCAqKikmZHhnaURldmljZSk7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJl
dHVybiBkeGdpRGV2aWNlOwotfQotCi1DT01QdHI8SURYR0lGYWN0b3J5Mj4gZmFjdG9yeUZvckRY
R0lEZXZpY2UoY29uc3QgQ09NUHRyPElEWEdJRGV2aWNlMT4mIGRldmljZSkKLXsKLSAgICBpZiAo
IWRldmljZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SURYR0lBZGFw
dGVyPiBhZGFwdG9yOwotICAgIEhSRVNVTFQgaHIgPSBkZXZpY2UtPkdldFBhcmVudChfX3V1aWRv
ZihJRFhHSUFkYXB0ZXIpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmFkYXB0b3IpKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENPTVB0cjxJRFhHSUZhY3Rv
cnk+IGZhY3Rvcnk7Ci0gICAgaHIgPSBhZGFwdG9yLT5HZXRQYXJlbnQoX191dWlkb2YoSURYR0lG
YWN0b3J5KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZmYWN0b3J5KSk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBDT01QdHI8SURYR0lGYWN0b3J5Mj4gZmFj
dG9yeTI7Ci0gICAgaHIgPSBmYWN0b3J5LT5RdWVyeUludGVyZmFjZSgmZmFjdG9yeTIpOyAKLSAg
ICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAKLSAgICByZXR1cm4gZmFjdG9y
eTI7Ci19Ci0KLUNPTVB0cjxJRFhHSVN3YXBDaGFpbj4gc3dhcENoYWluT2ZTaXplRm9yV2luZG93
QW5kRGV2aWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIEhXTkQgd2luZG93LCBjb25z
dCBDT01QdHI8SUQzRDExRGV2aWNlMT4mIGRldmljZSkKLXsKLSAgICBpZiAoIWRldmljZSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBEWEdJX1NXQVBfQ0hBSU5fREVTQzEgc3dhcENo
YWluRGVzY3JpcHRpb247Ci0gICAgOjpaZXJvTWVtb3J5KCZzd2FwQ2hhaW5EZXNjcmlwdGlvbiwg
c2l6ZW9mKHN3YXBDaGFpbkRlc2NyaXB0aW9uKSk7Ci0gICAgc3dhcENoYWluRGVzY3JpcHRpb24u
V2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgc3dhcENoYWluRGVzY3JpcHRpb24uSGVpZ2h0ID0g
c2l6ZS5oZWlnaHQoKTsKLSAgICBzd2FwQ2hhaW5EZXNjcmlwdGlvbi5Gb3JtYXQgPSB3ZWJraXRU
ZXh0dXJlRm9ybWF0OwotICAgIHN3YXBDaGFpbkRlc2NyaXB0aW9uLlNhbXBsZURlc2MuQ291bnQg
PSAxOwotICAgIHN3YXBDaGFpbkRlc2NyaXB0aW9uLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7Ci0g
ICAgc3dhcENoYWluRGVzY3JpcHRpb24uQnVmZmVyVXNhZ2UgPSBEWEdJX1VTQUdFX1NIQURFUl9J
TlBVVCB8IERYR0lfVVNBR0VfUkVOREVSX1RBUkdFVF9PVVRQVVQ7Ci0gICAgc3dhcENoYWluRGVz
Y3JpcHRpb24uQnVmZmVyQ291bnQgPSAxOwotICAgIHN3YXBDaGFpbkRlc2NyaXB0aW9uLkZsYWdz
ID0gRFhHSV9TV0FQX0NIQUlOX0ZMQUdfR0RJX0NPTVBBVElCTEU7Ci0KLSAgICBhdXRvIGZhY3Rv
cnkgPSBEaXJlY3QyRDo6ZmFjdG9yeUZvckRYR0lEZXZpY2UoRGlyZWN0MkQ6OnRvRFhHSURldmlj
ZShkZXZpY2UpKTsKLQotICAgIENPTVB0cjxJRFhHSVN3YXBDaGFpbjE+IHN3YXBDaGFpbjE7Ci0g
ICAgSFJFU1VMVCBociA9IGZhY3RvcnktPkNyZWF0ZVN3YXBDaGFpbkZvckh3bmQoZGV2aWNlLmdl
dCgpLCB3aW5kb3csICZzd2FwQ2hhaW5EZXNjcmlwdGlvbiwgbnVsbHB0ciwgbnVsbHB0ciwgJnN3
YXBDaGFpbjEpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBDT01QdHI8SURYR0lTd2FwQ2hhaW4+IHN3YXBDaGFpbihRdWVyeSwgc3dhcENo
YWluMSk7Ci0gICAgcmV0dXJuIHN3YXBDaGFpbjsKLX0KLQotQ09NUHRyPElEMkQxQml0bWFwPiBj
cmVhdGVCaXRtYXBDb3B5RnJvbUNvbnRleHQoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1h
cFRhcmdldCkKLXsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGN1cnJlbnRDYW52YXM7Ci0gICAg
SFJFU1VMVCBociA9IGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZjdXJyZW50Q2FudmFzKTsKLSAg
ICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0
byBiaXRtYXBDcmVhdGVQcm9wZXJ0aWVzID0gYml0bWFwUHJvcGVydGllcygpOwotCi0gICAgQ09N
UHRyPElEMkQxQml0bWFwPiBiaXRtYXA7Ci0gICAgRDJEMV9TSVpFX1UgYml0bWFwU2l6ZSA9IGN1
cnJlbnRDYW52YXMtPkdldFBpeGVsU2l6ZSgpOwotICAgIGhyID0gYml0bWFwVGFyZ2V0LT5DcmVh
dGVCaXRtYXAoYml0bWFwU2l6ZSwgYml0bWFwQ3JlYXRlUHJvcGVydGllcywgJmJpdG1hcCk7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1
dG8gdGFyZ2V0UG9zID0gRDJEMTo6UG9pbnQyVSgpOwotICAgIEQyRDFfUkVDVF9VIGRhdGFSZWN0
ID0gRDJEMTo6UmVjdFUoMCwgMCwgYml0bWFwU2l6ZS53aWR0aCwgYml0bWFwU2l6ZS5oZWlnaHQp
OwotICAgIGhyID0gYml0bWFwLT5Db3B5RnJvbUJpdG1hcCgmdGFyZ2V0UG9zLCBjdXJyZW50Q2Fu
dmFzLmdldCgpLCAmZGF0YVJlY3QpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGJpdG1hcDsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
RGlyZWN0MkQKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVD
VDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJE
VXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5oCShub25leGlz
dGVudCkKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlh
IFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0K
LSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5jbHVk
ZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtRXhwb3J0TWFjcm9zLmgiCi0KLWludGVy
ZmFjZSBJRDJEMUJpdG1hcDsKLWludGVyZmFjZSBJRDJEMUJpdG1hcFJlbmRlclRhcmdldDsKLWlu
dGVyZmFjZSBJRDJEMURDUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0
OwotaW50ZXJmYWNlIElEM0QxMURldmljZTE7Ci1pbnRlcmZhY2UgSUQzRDExRGV2aWNlQ29udGV4
dDE7Ci1pbnRlcmZhY2UgSUQzRDExUmVuZGVyVGFyZ2V0VmlldzsKLWludGVyZmFjZSBJRFhHSURl
dmljZTE7Ci1pbnRlcmZhY2UgSURYR0lGYWN0b3J5MjsKLWludGVyZmFjZSBJRFhHSVN3YXBDaGFp
bjsKLWludGVyZmFjZSBJRFhHSVN1cmZhY2UxOwotaW50ZXJmYWNlIElXSUNCaXRtYXBTb3VyY2U7
Ci1pbnRlcmZhY2UgSVdJQ0JpdG1hcDsKLQotc3RydWN0IEQyRDFfQklUTUFQX1BST1BFUlRJRVM7
Ci1zdHJ1Y3QgRDJEMV9QSVhFTF9GT1JNQVQ7Ci1zdHJ1Y3QgRDJEMV9SRU5ERVJfVEFSR0VUX1BS
T1BFUlRJRVM7Ci1zdHJ1Y3QgRDNEMTFfVklFV1BPUlQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0U2l6ZTsKLWNsYXNzIEludFJlY3Q7Ci1j
bGFzcyBJbnRTaXplOwotCi1uYW1lc3BhY2UgRGlyZWN0MkQgewotCi1HVUlEIHdpY0JpdG1hcEZv
cm1hdCgpOwotRDJEMV9QSVhFTF9GT1JNQVQgcGl4ZWxGb3JtYXQoKTsgLy8gQkdSQQotRDJEMV9Q
SVhFTF9GT1JNQVQgcGl4ZWxGb3JtYXRGb3JTb2Z0d2FyZU1hbmlwdWxhdGlvbigpOyAvLyBSR0JB
Ci1EMkQxX0JJVE1BUF9QUk9QRVJUSUVTIGJpdG1hcFByb3BlcnRpZXMoKTsKLUQyRDFfUkVOREVS
X1RBUkdFVF9QUk9QRVJUSUVTIHJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKLQotdm9pZCBpblBs
YWNlU3dpenpsZSh1aW50OF90KiBieXRlRGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBib29sIGFwcGx5
UHJlbXVsdGlwbGljYXRpb24gPSBmYWxzZSk7Ci0KLUludFNpemUgYml0bWFwU2l6ZShJV0lDQml0
bWFwU291cmNlKik7Ci1GbG9hdFNpemUgYml0bWFwU2l6ZShJRDJEMUJpdG1hcCopOwotRmxvYXRT
aXplIGJpdG1hcFJlc29sdXRpb24oSVdJQ0JpdG1hcFNvdXJjZSopOwotRmxvYXRTaXplIGJpdG1h
cFJlc29sdXRpb24oSUQyRDFCaXRtYXAqKTsKLUZsb2F0U2l6ZSBiaXRtYXBSZXNvbHV0aW9uKElE
MkQxUmVuZGVyVGFyZ2V0Kik7Ci11bnNpZ25lZCBiaXRzUGVyUGl4ZWwoR1VJRCk7Ci1DT01QdHI8
SUQyRDFCaXRtYXA+IGNyZWF0ZUJpdG1hcChJRDJEMVJlbmRlclRhcmdldCosIGNvbnN0IEludFNp
emUmKTsKLUNPTVB0cjxJV0lDQml0bWFwPiBjcmVhdGVXaWNCaXRtYXAoY29uc3QgSW50U2l6ZSYp
OwotQ09NUHRyPElXSUNCaXRtYXA+IGNyZWF0ZURpcmVjdDJESW1hZ2VTdXJmYWNlV2l0aERhdGEo
dm9pZCogZGF0YSwgY29uc3QgSW50U2l6ZSYsIHVuc2lnbmVkIHN0cmlkZSk7Ci1DT01QdHI8SUQy
RDFSZW5kZXJUYXJnZXQ+IGNyZWF0ZVJlbmRlclRhcmdldEZyb21XSUNCaXRtYXAoSVdJQ0JpdG1h
cCopOwotQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBjcmVhdGVCaXRtYXBSZW5kZXJU
YXJnZXRPZlNpemUoY29uc3QgSW50U2l6ZSYsIElEMkQxUmVuZGVyVGFyZ2V0KiA9IG51bGxwdHIs
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gMS4wKTsKLUNPTVB0cjxJRDJEMUJpdG1hcFJlbmRl
clRhcmdldD4gY3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0KElEMkQxUmVuZGVyVGFyZ2V0KiA9IG51
bGxwdHIpOwotQ09NUHRyPElEMkQxRENSZW5kZXJUYXJnZXQ+IGNyZWF0ZUdESVJlbmRlclRhcmdl
dCgpOwotQ09NUHRyPElEWEdJU3VyZmFjZTE+IGNyZWF0ZURYR0lTdXJmYWNlT2ZTaXplKGNvbnN0
IEludFNpemUmLCBJRDNEMTFEZXZpY2UxKiwgYm9vbCBjcm9zc1Byb2Nlc3MpOwotQ09NUHRyPElE
MkQxUmVuZGVyVGFyZ2V0PiBjcmVhdGVTdXJmYWNlUmVuZGVyVGFyZ2V0KElEWEdJU3VyZmFjZTEq
KTsKLUNPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlQml0bWFwQ29weUZyb21Db250ZXh0KElEMkQx
Qml0bWFwUmVuZGVyVGFyZ2V0Kik7Ci0KLXZvaWQgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5v
dGhlcihJRDJEMUJpdG1hcCogZnJvbSwgSUQyRDFCaXRtYXAqIHRvLCBjb25zdCBJbnRTaXplJiBz
b3VyY2VPZmZzZXQsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiBkZXN0T2Zmc2V0ID0g
SW50U2l6ZSgpKTsKLQotV0VCQ09SRV9FWFBPUlQgSUQzRDExRGV2aWNlQ29udGV4dDEqIGR4Z2lJ
bW1lZGlhdGVDb250ZXh0KCk7Ci1XRUJDT1JFX0VYUE9SVCBJRDNEMTFEZXZpY2UxKiBkZWZhdWx0
RGlyZWN0WERldmljZSgpOwotV0VCQ09SRV9FWFBPUlQgYm9vbCBjcmVhdGVEZXZpY2VBbmRDb250
ZXh0KENPTVB0cjxJRDNEMTFEZXZpY2UxPiYsIENPTVB0cjxJRDNEMTFEZXZpY2VDb250ZXh0MT4m
KTsKLVdFQkNPUkVfRVhQT1JUIENPTVB0cjxJRFhHSURldmljZTE+IHRvRFhHSURldmljZShjb25z
dCBDT01QdHI8SUQzRDExRGV2aWNlMT4mKTsKLVdFQkNPUkVfRVhQT1JUIENPTVB0cjxJRFhHSUZh
Y3RvcnkyPiBmYWN0b3J5Rm9yRFhHSURldmljZShjb25zdCBDT01QdHI8SURYR0lEZXZpY2UxPiYp
OwotV0VCQ09SRV9FWFBPUlQgQ09NUHRyPElEWEdJU3dhcENoYWluPiBzd2FwQ2hhaW5PZlNpemVG
b3JXaW5kb3dBbmREZXZpY2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIEhXTkQsIGNvbnN0IENP
TVB0cjxJRDNEMTFEZXZpY2UxPiYpOwotCi12b2lkIHdyaXRlRGlhZ25vc3RpY1BOR1RvUGF0aChJ
RDJEMVJlbmRlclRhcmdldCosIElEMkQxQml0bWFwKiwgTFBDV1NUUiBmaWxlTmFtZSk7Ci0KLX0g
Ly8gbmFtZXNwYWNlIERpcmVjdDJECi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAkocmV2aXNp
b24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVj
dFdyaXRlVXRpbGl0aWVzLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDI0NiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJEaXJlY3RXcml0ZVV0aWxpdGllcy5oIgotCi0jaWYgVVNFKERJUkVD
VDJEKQotCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0j
aW5jbHVkZSA8ZHdyaXRlXzMuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFj
ZSBEaXJlY3RXcml0ZSB7Ci0KLUlEV3JpdGVGYWN0b3J5NSogZmFjdG9yeSgpCi17Ci0gICAgc3Rh
dGljIElEV3JpdGVGYWN0b3J5NSogZGlyZWN0V3JpdGVGYWN0b3J5ID0gbnVsbHB0cjsKLSAgICBp
ZiAoIWRpcmVjdFdyaXRlRmFjdG9yeSkgewotICAgICAgICBIUkVTVUxUIGhyID0gRFdyaXRlQ3Jl
YXRlRmFjdG9yeShEV1JJVEVfRkFDVE9SWV9UWVBFX1NIQVJFRCwgX191dWlkb2YoZGlyZWN0V3Jp
dGVGYWN0b3J5KSwgcmVpbnRlcnByZXRfY2FzdDxJVW5rbm93bioqPigmZGlyZWN0V3JpdGVGYWN0
b3J5KSk7Ci0gICAgICAgIGRpcmVjdFdyaXRlRmFjdG9yeS0+QWRkUmVmKCk7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIH0KLQotICAgIHJldHVybiBkaXJlY3RX
cml0ZUZhY3Rvcnk7Ci19Ci0KLUlEV3JpdGVHZGlJbnRlcm9wKiBnZGlJbnRlcm9wKCkKLXsKLSAg
ICBzdGF0aWMgSURXcml0ZUdkaUludGVyb3AqIGRpcmVjdFdyaXRlR2RpSW50ZXJvcCA9IG51bGxw
dHI7Ci0gICAgaWYgKCFkaXJlY3RXcml0ZUdkaUludGVyb3ApIHsKLSAgICAgICAgSFJFU1VMVCBo
ciA9IGZhY3RvcnkoKS0+R2V0R2RpSW50ZXJvcCgmZGlyZWN0V3JpdGVHZGlJbnRlcm9wKTsKLSAg
ICAgICAgZGlyZWN0V3JpdGVHZGlJbnRlcm9wLT5BZGRSZWYoKTsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRpcmVjdFdyaXRlR2Rp
SW50ZXJvcDsKLX0KLQotc3RhdGljIElEV3JpdGVJbk1lbW9yeUZvbnRGaWxlTG9hZGVyKiBtZW1v
cnlGb250TG9hZGVyKCkKLXsKLSAgICBzdGF0aWMgSURXcml0ZUluTWVtb3J5Rm9udEZpbGVMb2Fk
ZXIqIG1lbW9yeUZvbnRMb2FkZXIgPSBudWxscHRyOwotICAgIGlmICghbWVtb3J5Rm9udExvYWRl
cikgewotICAgICAgICBIUkVTVUxUIGhyID0gZmFjdG9yeSgpLT5DcmVhdGVJbk1lbW9yeUZvbnRG
aWxlTG9hZGVyKCZtZW1vcnlGb250TG9hZGVyKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VD
Q0VFREVEKGhyKSk7Ci0gICAgICAgIG1lbW9yeUZvbnRMb2FkZXItPkFkZFJlZigpOwotCi0gICAg
ICAgIGhyID0gZmFjdG9yeSgpLT5SZWdpc3RlckZvbnRGaWxlTG9hZGVyKG1lbW9yeUZvbnRMb2Fk
ZXIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gbWVtb3J5Rm9udExvYWRlcjsKLX0KLQotc3RhdGljIElEV3JpdGVGb250U2V0QnVp
bGRlcjEqIGZvbnRTZXRCdWlsZGVyKCkKLXsKLSAgICBzdGF0aWMgSURXcml0ZUZvbnRTZXRCdWls
ZGVyMSogZm9udFNldEJ1aWxkZXIgPSBudWxscHRyOwotICAgIGlmICghZm9udFNldEJ1aWxkZXIp
IHsKLSAgICAgICAgSFJFU1VMVCBociA9IGZhY3RvcnkoKS0+Q3JlYXRlRm9udFNldEJ1aWxkZXIo
JmZvbnRTZXRCdWlsZGVyKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0gICAgICAgIGZvbnRTZXRCdWlsZGVyLT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
Zm9udFNldEJ1aWxkZXI7Ci19Ci0KLXN0YXRpYyBDT01QdHI8SURXcml0ZUZvbnRTZXQ+IGZvbnRT
ZXQ7Ci1zdGF0aWMgQ09NUHRyPElEV3JpdGVGb250Q29sbGVjdGlvbjE+IGZvbnRDb2xsZWN0aW9u
Owotc3RhdGljIFVJTlQzMiBmb250Q291bnQgPSAwOwotCi1JRFdyaXRlRm9udENvbGxlY3Rpb24x
KiB3ZWJQcm9jZXNzRm9udENvbGxlY3Rpb24oKQotewotICAgIEhSRVNVTFQgaHIgPSBTX09LOwot
Ci0gICAgaWYgKCFmb250U2V0KSB7Ci0gICAgICAgIGhyID0gZm9udFNldEJ1aWxkZXIoKS0+Q3Jl
YXRlRm9udFNldCgmZm9udFNldCk7Ci0gICAgICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGZvbnRDb2xsZWN0aW9uID0gbnVsbHB0
cjsKLSAgICAgICAgaHIgPSBmYWN0b3J5KCktPkNyZWF0ZUZvbnRDb2xsZWN0aW9uRnJvbUZvbnRT
ZXQoZm9udFNldC5nZXQoKSwgJmZvbnRDb2xsZWN0aW9uKTsKLSAgICAgICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgQVNTRVJUKGZv
bnRDb2xsZWN0aW9uLT5HZXRGb250RmFtaWx5Q291bnQoKSA9PSBmb250Q291bnQpOwotICAgIH0K
LQotICAgIHJldHVybiBmb250Q29sbGVjdGlvbi5nZXQoKTsKLX0KLQotSFJFU1VMVCBhZGRGb250
RnJvbURhdGFUb1Byb2Nlc3NDb2xsZWN0aW9uKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZm9udERh
dGEpCi17Ci0gICAgQ09NUHRyPElEV3JpdGVGb250RmlsZT4gZm9udEZpbGU7Ci0gICAgSFJFU1VM
VCBociA9IG1lbW9yeUZvbnRMb2FkZXIoKS0+Q3JlYXRlSW5NZW1vcnlGb250RmlsZVJlZmVyZW5j
ZShmYWN0b3J5KCksIGZvbnREYXRhLmRhdGEoKSwgZm9udERhdGEuc2l6ZSgpLCBudWxscHRyLCAm
Zm9udEZpbGUpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwot
Ci0gICAgaHIgPSBmb250U2V0QnVpbGRlcigpLT5BZGRGb250RmlsZShmb250RmlsZS5nZXQoKSk7
Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICBmb250
U2V0ID0gbnVsbHB0cjsKLSAgICArK2ZvbnRDb3VudDsKLQotICAgIHJldHVybiBocjsKLX0KLQot
VmVjdG9yPHdjaGFyX3Q+IGZhbWlseU5hbWVGb3JMb2NhbGUoSURXcml0ZUZvbnRGYW1pbHkqIGZv
bnRGYW1pbHksIGNvbnN0IFZlY3Rvcjx3Y2hhcl90PiYgbG9jYWxlTmFtZSkKLXsKLSAgICBDT01Q
dHI8SURXcml0ZUxvY2FsaXplZFN0cmluZ3M+IGZhbWlseU5hbWVzOwotICAgIEhSRVNVTFQgaHIg
PSBmb250RmFtaWx5LT5HZXRGYW1pbHlOYW1lcygmZmFtaWx5TmFtZXMpOwotICAgIGlmIChGQUlM
RUQoaHIpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgQk9PTCBleGlzdHMgPSBmYWxzZTsK
LSAgICB1bnNpZ25lZCBsb2NhbGVJbmRleCA9IDA7Ci0gICAgaWYgKCFsb2NhbGVOYW1lLmlzRW1w
dHkoKSkKLSAgICAgICAgaHIgPSBmYW1pbHlOYW1lcy0+RmluZExvY2FsZU5hbWUobG9jYWxlTmFt
ZS5kYXRhKCksICZsb2NhbGVJbmRleCwgJmV4aXN0cyk7Ci0KLSAgICBpZiAoU1VDQ0VFREVEKGhy
KSAmJiAhZXhpc3RzKQotICAgICAgICBociA9IGZhbWlseU5hbWVzLT5GaW5kTG9jYWxlTmFtZShM
ImVuLXVzIiwgJmxvY2FsZUluZGV4LCAmZXhpc3RzKTsKLQotICAgIGlmIChGQUlMRUQoaHIpKQot
ICAgICAgICByZXR1cm4geyB9OwotCi0gICAgdW5zaWduZWQgZmFtaWx5TmFtZUxlbmd0aCA9IDA7
Ci0gICAgaHIgPSBmYW1pbHlOYW1lcy0+R2V0U3RyaW5nTGVuZ3RoKGxvY2FsZUluZGV4LCAmZmFt
aWx5TmFtZUxlbmd0aCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4g
eyB9OwotCi0gICAgVmVjdG9yPHdjaGFyX3Q+IGZhbWlseU5hbWUoZmFtaWx5TmFtZUxlbmd0aCAr
IDEpOwotICAgIGhyID0gZmFtaWx5TmFtZXMtPkdldFN0cmluZyhsb2NhbGVJbmRleCwgZmFtaWx5
TmFtZS5kYXRhKCksIGZhbWlseU5hbWUuc2l6ZSgpKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikp
Ci0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gZmFtaWx5TmFtZTsKLX0KLQotQ09N
UHRyPElEV3JpdGVGb250RmFtaWx5PiBmb250RmFtaWx5Rm9yQ29sbGVjdGlvbihJRFdyaXRlRm9u
dENvbGxlY3Rpb24qIGZvbnRDb2xsZWN0aW9uLCBjb25zdCBWZWN0b3I8d2NoYXJfdD4mIGxvY2Fs
ZU5hbWUsIGNvbnN0IExPR0ZPTlQmIGxvZ0ZvbnQpCi17Ci0gICAgQ09NUHRyPElEV3JpdGVGb250
RmFtaWx5PiBmb250RmFtaWx5OwotCi0gICAgdW5zaWduZWQgZm9udEZhbWlseUNvdW50ID0gZm9u
dENvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHlDb3VudCgpOwotICAgIGZvciAodW5zaWduZWQgZm9u
dEluZGV4ID0gMDsgZm9udEluZGV4IDwgZm9udEZhbWlseUNvdW50OyArK2ZvbnRJbmRleCkgewot
ICAgICAgICBIUkVTVUxUIGhyID0gZm9udENvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHkoZm9udElu
ZGV4LCAmZm9udEZhbWlseSk7Ci0gICAgICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgYXV0byBmYW1pbHlOYW1lID0gZmFtaWx5TmFtZUZv
ckxvY2FsZShmb250RmFtaWx5LmdldCgpLCBsb2NhbGVOYW1lKTsKLQotICAgICAgICBpZiAoIXdj
c2NtcChsb2dGb250LmxmRmFjZU5hbWUsIGZhbWlseU5hbWUuZGF0YSgpKSkKLSAgICAgICAgICAg
IHJldHVybiBmb250RmFtaWx5OwotCi0gICAgICAgIGZvbnRGYW1pbHkgPSBudWxscHRyOwotICAg
IH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1DT01QdHI8SURXcml0ZUZvbnQ+IGNyZWF0
ZVdpdGhQbGF0Zm9ybUZvbnQoY29uc3QgTE9HRk9OVCYgbG9nRm9udCkKLXsKLSAgICBDT01QdHI8
SURXcml0ZUZvbnRDb2xsZWN0aW9uPiBzeXN0ZW1Gb250Q29sbGVjdGlvbjsKLSAgICBIUkVTVUxU
IGhyID0gZmFjdG9yeSgpLT5HZXRTeXN0ZW1Gb250Q29sbGVjdGlvbigmc3lzdGVtRm9udENvbGxl
Y3Rpb24pOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIFZlY3Rvcjx3Y2hhcl90PiBsb2NhbGVOYW1lKExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwot
ICAgIGludCBsb2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUobG9jYWxlTmFt
ZS5kYXRhKCksIExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGxv
Y2FsZUxlbmd0aCA8PSBMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKLQotICAgIENPTVB0cjxJRFdy
aXRlRm9udENvbGxlY3Rpb24xPiBjb2xsZWN0aW9uKFF1ZXJ5LCBzeXN0ZW1Gb250Q29sbGVjdGlv
bik7Ci0KLSAgICBDT01QdHI8SURXcml0ZUZvbnRGYW1pbHk+IGZvbnRGYW1pbHkgPSBmb250RmFt
aWx5Rm9yQ29sbGVjdGlvbihjb2xsZWN0aW9uLmdldCgpLCBsb2NhbGVOYW1lLCBsb2dGb250KTsK
LSAgICBpZiAoIWZvbnRGYW1pbHkpIHsKLSAgICAgICAgY29sbGVjdGlvbiA9IHdlYlByb2Nlc3NG
b250Q29sbGVjdGlvbigpOwotICAgICAgICBmb250RmFtaWx5ID0gZm9udEZhbWlseUZvckNvbGxl
Y3Rpb24oY29sbGVjdGlvbi5nZXQoKSwgbG9jYWxlTmFtZSwgbG9nRm9udCk7Ci0gICAgfQotCi0g
ICAgaWYgKCFmb250RmFtaWx5KSB7Ci0gICAgICAgIC8vIEp1c3QgcmV0dXJuIHRoZSBmaXJzdCBz
eXN0ZW0gZm9udC4KLSAgICAgICAgY29sbGVjdGlvbiA9IENPTVB0cjxJRFdyaXRlRm9udENvbGxl
Y3Rpb24xPihRdWVyeSwgc3lzdGVtRm9udENvbGxlY3Rpb24pOwotICAgICAgICBociA9IGNvbGxl
Y3Rpb24tPkdldEZvbnRGYW1pbHkoMCwgJmZvbnRGYW1pbHkpOwotICAgICAgICBpZiAoRkFJTEVE
KGhyKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0jaWZuZGVmIE5ERUJVRwotICAg
ICAgICBhdXRvIGZhbWlseU5hbWUgPSBmYW1pbHlOYW1lRm9yTG9jYWxlKGZvbnRGYW1pbHkuZ2V0
KCksIGxvY2FsZU5hbWUpOwotICAgICAgICBVTlVTRURfVkFSSUFCTEUoZmFtaWx5TmFtZSk7Ci0j
ZW5kaWYKLSAgICB9Ci0KLSAgICBEV1JJVEVfRk9OVF9XRUlHSFQgd2VpZ2h0ID0gc3RhdGljX2Nh
c3Q8RFdSSVRFX0ZPTlRfV0VJR0hUPihsb2dGb250LmxmV2VpZ2h0KTsKLSAgICBEV1JJVEVfRk9O
VF9TVFJFVENIIHN0cmV0Y2ggPSBzdGF0aWNfY2FzdDxEV1JJVEVfRk9OVF9TVFJFVENIPihsb2dG
b250LmxmUXVhbGl0eSk7Ci0gICAgRFdSSVRFX0ZPTlRfU1RZTEUgc3R5bGUgPSBsb2dGb250Lmxm
SXRhbGljID8gRFdSSVRFX0ZPTlRfU1RZTEVfSVRBTElDIDogRFdSSVRFX0ZPTlRfU1RZTEVfTk9S
TUFMOwotCi0gICAgQ09NUHRyPElEV3JpdGVGb250PiBkd0ZvbnQ7Ci0gICAgaHIgPSBmb250RmFt
aWx5LT5HZXRGaXJzdE1hdGNoaW5nRm9udCh3ZWlnaHQsIHN0cmV0Y2gsIHN0eWxlLCAmZHdGb250
KTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICByZXR1cm4gZHdGb250OwotfQot
Ci1EV1JJVEVfRk9OVF9XRUlHSFQgZm9udFdlaWdodChjb25zdCBGb250UGxhdGZvcm1EYXRhJikK
LXsKLSAgICByZXR1cm4gRFdSSVRFX0ZPTlRfV0VJR0hUX1JFR1VMQVI7Ci19Ci0KLURXUklURV9G
T05UX1NUWUxFIGZvbnRTdHlsZShjb25zdCBGb250UGxhdGZvcm1EYXRhJikKLXsKLSAgICByZXR1
cm4gRFdSSVRFX0ZPTlRfU1RZTEVfTk9STUFMOwotfQotCi1EV1JJVEVfRk9OVF9TVFJFVENIIGZv
bnRTdHJldGNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKQotewotICAgIHJldHVybiBEV1JJVEVf
Rk9OVF9TVFJFVENIX05PUk1BTDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgRGlyZWN0V3JpdGUKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Rp
cmVjdFdyaXRlVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5oCShub25leGlzdGVu
dCkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUg
IkNPTVB0ci5oIgotCi1pbnRlcmZhY2UgSURXcml0ZUZhY3Rvcnk1OwotaW50ZXJmYWNlIElEV3Jp
dGVGb250OwotaW50ZXJmYWNlIElEV3JpdGVGb250Q29sbGVjdGlvbjsKLWludGVyZmFjZSBJRFdy
aXRlRm9udENvbGxlY3Rpb24xOwotaW50ZXJmYWNlIElEV3JpdGVGb250RmFtaWx5OwotaW50ZXJm
YWNlIElEV3JpdGVHZGlJbnRlcm9wOwotCi1lbnVtIERXUklURV9GT05UX1dFSUdIVDsKLWVudW0g
RFdSSVRFX0ZPTlRfU1RZTEU7Ci1lbnVtIERXUklURV9GT05UX1NUUkVUQ0g7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKLWNsYXNzIEZyYWdtZW50ZWRT
aGFyZWRCdWZmZXI7Ci0KLW5hbWVzcGFjZSBEaXJlY3RXcml0ZSB7Ci0KLUlEV3JpdGVGYWN0b3J5
NSogZmFjdG9yeSgpOwotSURXcml0ZUdkaUludGVyb3AqIGdkaUludGVyb3AoKTsKLQotSURXcml0
ZUZvbnRDb2xsZWN0aW9uMSogd2ViUHJvY2Vzc0ZvbnRDb2xsZWN0aW9uKCk7Ci0KLUhSRVNVTFQg
YWRkRm9udEZyb21EYXRhVG9Qcm9jZXNzQ29sbGVjdGlvbihjb25zdCBWZWN0b3I8dWludDhfdD4m
IGZvbnREYXRhKTsKLUNPTVB0cjxJRFdyaXRlRm9udEZhbWlseT4gZm9udEZhbWlseUZvckNvbGxl
Y3Rpb24oSURXcml0ZUZvbnRDb2xsZWN0aW9uKiwgY29uc3QgVmVjdG9yPHdjaGFyX3Q+JiBsb2Nh
bGVOYW1lLCBjb25zdCBMT0dGT05UJik7Ci1DT01QdHI8SURXcml0ZUZvbnQ+IGNyZWF0ZVdpdGhQ
bGF0Zm9ybUZvbnQoY29uc3QgTE9HRk9OVCYpOwotVmVjdG9yPHdjaGFyX3Q+IGZhbWlseU5hbWVG
b3JMb2NhbGUoSURXcml0ZUZvbnRGYW1pbHkqLCBjb25zdCBWZWN0b3I8d2NoYXJfdD4mIGxvY2Fs
ZU5hbWUpOwotCi1EV1JJVEVfRk9OVF9XRUlHSFQgZm9udFdlaWdodChjb25zdCBGb250UGxhdGZv
cm1EYXRhJik7Ci1EV1JJVEVfRk9OVF9TVFlMRSBmb250U3R5bGUoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYpOwotRFdSSVRFX0ZPTlRfU1RSRVRDSCBmb250U3RyZXRjaChjb25zdCBGb250UGxhdGZv
cm1EYXRhJik7Ci0KLX0gLy8gbmFtZXNwYWNlIERpcmVjdFdyaXRlCi0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFBvaW50RGlyZWN0MkQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFBvaW50RGlyZWN0
MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNiBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLQotI2lmIFBM
QVRGT1JNKFdJTikKLQotI2luY2x1ZGUgPGQyZDEuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1GbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IEQyRF9QT0lOVF8yRiYgcCkKLSAgICA6IG1f
eChwLngpCi0gICAgLCBtX3kocC55KQotewotfQotCi1GbG9hdFBvaW50OjpvcGVyYXRvciBEMkRf
UE9JTlRfMkYoKSBjb25zdAotewotICAgIHJldHVybiBEMkQxOjpQb2ludDJGKG1feCwgbV95KTsK
LX0KLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oV0lOKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UmVjdERpcmVjdDJELmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQu
Y3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsNzggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0KLSNpZiBQTEFURk9STShXSU4p
Ci0KLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBib29sIGlzSW5maW5pdGVSZWN0KGNvbnN0IEQyRDFfUkVD
VF9GJiByZWN0KQotewotICAgIGlmICghc3RkOjppc2luZihyZWN0LnRvcCkgJiYgcmVjdC50b3Ag
IT0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKCFzdGQ6OmlzaW5mKHJlY3QubGVmdCkgJiYgcmVjdC5sZWZ0ICE9IC1z
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghc3RkOjppc2luZihyZWN0LmJvdHRvbSkgJiYgcmVjdC5ib3R0b20gIT0gc3Rk
OjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoIXN0ZDo6aXNpbmYocmVjdC5yaWdodCkgJiYgcmVjdC5yaWdodCAhPSBzdGQ6Om51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1GbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBSRUNUJiByZWN0
KQotICAgIDogbV9sb2NhdGlvbihyZWN0LmxlZnQsIHJlY3QudG9wKQotICAgICwgbV9zaXplKHJl
Y3QucmlnaHQgLSByZWN0LmxlZnQsIHJlY3QuYm90dG9tIC0gcmVjdC50b3ApCi17Ci19Ci0KLUZs
b2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IEQyRDFfUkVDVF9GJiByKQotewotICAgIC8vIEluZmlu
aXRlIFJlY3QgY2FzZToKLSAgICBpZiAoaXNJbmZpbml0ZVJlY3QocikpIHsKLSAgICAgICAgKnRo
aXMgPSBpbmZpbml0ZVJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fbG9j
YXRpb24gPSBGbG9hdFBvaW50KHIubGVmdCwgci50b3ApOwotICAgIG1fc2l6ZSA9IEZsb2F0U2l6
ZShyLnJpZ2h0IC0gci5sZWZ0LCByLmJvdHRvbSAtIHIudG9wKTsKLX0KLQotRmxvYXRSZWN0Ojpv
cGVyYXRvciBEMkQxX1JFQ1RfRigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEQyRDE6OlJlY3RGKHgo
KSwgeSgpLCBtYXhYKCksIG1heFkoKSk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKFdJ
TikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFNpemVE
aXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0Zsb2F0U2l6ZURpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0U2l6ZURpcmVjdDJELmNwcAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAx
NiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZs
b2F0U2l6ZS5oIgotCi0jaWYgUExBVEZPUk0oV0lOKQotCi0jaW5jbHVkZSA8ZDJkMS5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IEQyRDFfU0la
RV9GJiBzKQotICAgIDogbV93aWR0aChzLndpZHRoKQotICAgICwgbV9oZWlnaHQocy5oZWlnaHQp
Ci17Ci19Ci0KLUZsb2F0U2l6ZTo6b3BlcmF0b3IgRDJEMV9TSVpFX0YoKSBjb25zdAotewotICAg
IHJldHVybiBEMkQxOjpTaXplRihtX3dpZHRoLCBtX2hlaWdodCk7Ci19Ci0KLX0KLQotI2VuZGlm
IC8vIFBMQVRGT1JNKFdJTikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAJKHJldmlzaW9u
IDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2Fz
Y2FkZURpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDE0NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUg
IkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJHbHlwaEJ1
ZmZlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSAiV2ViQ29yZVRl
eHRSZW5kZXJlci5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgot
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9p
ZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4
dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAotICAg
IHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi17Ci0gICAgYXV0byBjb250ZXh0
ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKTsKLSAg
ICBib29sIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBXZWJDb3JlU2hvdWxkVXNlRm9udFNtb290
aGluZygpOwotCi0gICAgc3dpdGNoIChzbW9vdGhpbmdNb2RlKSB7Ci0gICAgY2FzZSBGb250U21v
b3RoaW5nTW9kZTo6QW50aWFsaWFzZWQ6Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaG91
bGRBbnRpYWxpYXModHJ1ZSk7Ci0gICAgICAgIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBmYWxz
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxB
bnRpYWxpYXNlZDoKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh0
cnVlKTsKLSAgICAgICAgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nOgotICAgICAgICBn
cmFwaGljc0NvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKLSAgICAgICAgc2hvdWxk
VXNlRm9udFNtb290aGluZyA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRT
bW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nOgotICAgICAgICAvLyBGb3IgdGhlIEF1dG9TbW9v
dGggY2FzZSwgZG9uJ3QgZG8gYW55dGhpbmchIEtlZXAgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCi0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIH0KLQotICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZv
bnQucGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBncmFwaGljc0NvbnRleHQuc2F2ZSgpOwotCi0gICAg
RDJEMV9NQVRSSVhfM1gyX0YgbWF0cml4OwotICAgIGNvbnRleHQtPkdldFRyYW5zZm9ybSgmbWF0
cml4KTsKLQotICAgIGlmIChwbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpKSB7Ci0gICAg
ICAgIHN0YXRpYyBmbG9hdCBza2V3ID0gLXRhbmYoc3ludGhldGljT2JsaXF1ZUFuZ2xlKCkgKiBw
aUZsb2F0IC8gMTgwLjBmKTsKLSAgICAgICAgYXV0byBza2V3TWF0cml4ID0gRDJEMTo6TWF0cml4
M3gyRjo6U2tldyhza2V3LCAwKTsKLSAgICAgICAgY29udGV4dC0+U2V0VHJhbnNmb3JtKG1hdHJp
eCAqIHNrZXdNYXRyaXgpOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUKHBsYXRmb3JtRGF0
YS5kd0ZvbnQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocGxhdGZvcm1EYXRhLmR3Rm9udEZhY2Uo
KSk7Ci0KLSAgICBWZWN0b3I8RkxPQVQ+IGhvcml6b250YWxBZHZhbmNlcyhudW1HbHlwaHMpOwot
ICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiBvZmZzZXRBZHZhbmNlcyhudW1HbHlwaHMp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAg
ICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZmZXIuYWR2YW5jZXNDb3VudCgpKQotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgYXV0byBhZHZhbmNlID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMo
aSArIGZyb20pOwotICAgICAgICBpZiAoIWFkdmFuY2UpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBob3Jpem9udGFsQWR2YW5jZXNbaV0gPSBhZHZhbmNlLT53aWR0aCgpOwotICAg
ICAgICBvZmZzZXRBZHZhbmNlc1tpXS5hZHZhbmNlT2Zmc2V0ID0gYWR2YW5jZS0+d2lkdGgoKTsK
LSAgICAgICAgb2Zmc2V0QWR2YW5jZXNbaV0uYXNjZW5kZXJPZmZzZXQgPSBhZHZhbmNlLT5oZWln
aHQoKTsKLSAgICB9Ci0KLSAgICBEV1JJVEVfR0xZUEhfUlVOIGdseXBoUnVuOwotICAgIGdseXBo
UnVuLmZvbnRGYWNlID0gcGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKTsKLSAgICBnbHlwaFJ1bi5m
b250RW1TaXplID0gcGxhdGZvcm1EYXRhLnNpemUoKTsKLSAgICBnbHlwaFJ1bi5nbHlwaENvdW50
ID0gbnVtR2x5cGhzOwotICAgIGdseXBoUnVuLmdseXBoSW5kaWNlcyA9IGdseXBoQnVmZmVyLmds
eXBocyhmcm9tKTsKLSAgICBnbHlwaFJ1bi5nbHlwaEFkdmFuY2VzID0gaG9yaXpvbnRhbEFkdmFu
Y2VzLmRhdGEoKTsKLSAgICBnbHlwaFJ1bi5nbHlwaE9mZnNldHMgPSBudWxscHRyOwotICAgIGds
eXBoUnVuLmlzU2lkZXdheXMgPSBwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3Jp
ZW50YXRpb246OlZlcnRpY2FsOwotICAgIGdseXBoUnVuLmJpZGlMZXZlbCA9IDA7Ci0KLSAgICBG
bG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRvd0JsdXI7Ci0gICAgQ29sb3Ig
c2hhZG93Q29sb3I7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQs
IHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKLQotICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0g
Z3JhcGhpY3NDb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6Rmls
bCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIgJiYgKCFncmFwaGljc0Nv
bnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBncmFwaGljc0NvbnRleHQuZ2V0Q1RN
KCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7Ci0gICAgaWYgKGhhc1NpbXBs
ZVNoYWRvdykgewotICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5z
dGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBh
bnRpYWxpYXNpbmcuCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclNoYWRvdygpOwotICAg
ICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQuZmlsbENvbG9yKCk7Ci0gICAg
ICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFscGhhTXVs
dGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7Ci0gICAgICAgIGZsb2F0IHNoYWRv
d1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7Ci0gICAgICAgIC8vIElm
IHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4ndCBhcHBsaWVk
IHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUuCi0gICAgICAg
IGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpICog
KGdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKLQot
ICAgICAgICBhdXRvIHNoYWRvd0JydXNoID0gZ3JhcGhpY3NDb250ZXh0LmJydXNoV2l0aENvbG9y
KHNoYWRvd0ZpbGxDb2xvcik7Ci0gICAgICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQxOjpQ
b2ludDJGKHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksICZnbHlwaFJ1biwgc2hhZG93QnJ1c2gp
OwotICAgICAgICBpZiAoZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCkpCi0gICAgICAgICAgICBj
b250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihzaGFkb3dUZXh0WCArIGZvbnQuc3lu
dGhldGljQm9sZE9mZnNldCgpLCBzaGFkb3dUZXh0WSksICZnbHlwaFJ1biwgc2hhZG93QnJ1c2gp
OwotICAgIH0KLQotICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQxOjpQb2ludDJGKHBvaW50
LngoKSwgcG9pbnQueSgpKSwgJmdseXBoUnVuLCBncmFwaGljc0NvbnRleHQuc29saWRGaWxsQnJ1
c2goKSk7Ci0gICAgaWYgKGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpKQotICAgICAgICBjb250
ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihwb2ludC54KCkgKyBmb250LnN5bnRoZXRp
Y0JvbGRPZmZzZXQoKSwgcG9pbnQueSgpKSwgJmdseXBoUnVuLCBncmFwaGljc0NvbnRleHQuc29s
aWRGaWxsQnJ1c2goKSk7Ci0KLSAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQotICAgICAgICBncmFw
aGljc0NvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29s
b3IpOwotCi0gICAgZ3JhcGhpY3NDb250ZXh0LnJlc3RvcmUoKTsKLX0KLQotfQotCi0jZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDYgQEAKICNpbmNsdWRlIDxwYWwv
c3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0j
aW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIEZvbnRQbGF0Zm9ybURh
dGE6OkNyZWF0aW9uRGF0YSYmIGNyZWF0aW9uRGF0YSkKQEAgLTczLDcgKzY4LDcgQEAgRm9udFBs
YXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOgogICAgIGxvZ0ZvbnQubGZVbmRlcmxp
bmUgPSBmYWxzZTsKICAgICBsb2dGb250LmxmU3RyaWtlT3V0ID0gZmFsc2U7CiAgICAgbG9nRm9u
dC5sZkNoYXJTZXQgPSBERUZBVUxUX0NIQVJTRVQ7Ci0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8p
IHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKICAgICBsb2dGb250
LmxmT3V0UHJlY2lzaW9uID0gT1VUX1RUX09OTFlfUFJFQ0lTOwogI2Vsc2UKICAgICBsb2dGb250
LmxmT3V0UHJlY2lzaW9uID0gT1VUX1RUX1BSRUNJUzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhRGlyZWN0MkQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YURpcmVjdDJELmNwcAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDEyMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250UGxh
dGZvcm1EYXRhLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJlY3RXcml0
ZVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhX
bmREQy5oIgotI2luY2x1ZGUgIlNoYXJlZEdESU9iamVjdC5oIgotI2luY2x1ZGUgPGQyZDEuaD4K
LSNpbmNsdWRlIDxkd3JpdGVfMy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi12b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQo
SEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgSERDIGhkYywgV0NIQVIqIGZhY2VOYW1lKQotewotICAg
IExPR0ZPTlQgbG9nZm9udDsKLSAgICBIUkVTVUxUIGhyID0gOjpHZXRPYmplY3QoZm9udCwgc2l6
ZW9mKExPR0ZPTlQpLCAmbG9nZm9udCk7Ci0gICAgaWYgKFNVQ0NFRURFRChocikpCi0gICAgICAg
IG1fZHdGb250ID0gRGlyZWN0V3JpdGU6OmNyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQobG9nZm9udCk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9kd0ZvbnQpOwotCi0gICAgaHIgPSBtX2R3Rm9udC0+Q3Jl
YXRlRm9udEZhY2UoJm1fZHdGb250RmFjZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7Ci0KLSAgICBpZiAoIW1fdXNlR0RJKQotICAgICAgICBtX2lzU3lzdGVtRm9udCA9ICF3
Y3NjbXAoZmFjZU5hbWUsIEwiTHVjaWRhIEdyYW5kZSIpOwotfQotCi1Gb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4mJiBoZm9udCwgQ09NUHRyPElEV3Jp
dGVGb250PiYmIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBib29s
IHVzZUdESSkKLSAgICA6IG1fc3ludGhldGljQm9sZChib2xkKQotICAgICwgbV9zeW50aGV0aWNP
YmxpcXVlKG9ibGlxdWUpCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fZm9udChTaGFyZWRH
RElPYmplY3Q8SEZPTlQ+OjpjcmVhdGUoV1RGTW92ZShoZm9udCkpKQotICAgICwgbV9kd0ZvbnQo
V1RGTW92ZShmb250KSkKLSAgICAsIG1fdXNlR0RJKHVzZUdESSkKLXsKLSAgICBIUkVTVUxUIGhy
ID0gbV9kd0ZvbnQtPkNyZWF0ZUZvbnRGYWNlKCZtX2R3Rm9udEZhY2UpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKFNVQ0NFRURFRChocikpOwotfQotCi1zdGF0aWMgYm9vbCBmb250c0FyZUVxdWFsKElE
V3JpdGVGb250KiBhLCBJRFdyaXRlRm9udCogYikKLXsKLSAgICBpZiAoIWEgJiYgIWIpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGEgPT0gYikKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAoKCFhICYmIGIpIHx8IChhICYmICFiKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKGEtPkdldFdlaWdodCgpICE9IGItPkdldFdlaWdodCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYS0+R2V0U3R5bGUoKSAhPSBiLT5HZXRTdHlsZSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYS0+R2V0U3RyZXRjaCgpICE9IGItPkdl
dFN0cmV0Y2goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRFdSSVRFX0ZPTlRfTUVU
UklDUyBhTWV0cmljcywgYk1ldHJpY3M7Ci0gICAgYS0+R2V0TWV0cmljcygmYU1ldHJpY3MpOwot
ICAgIGItPkdldE1ldHJpY3MoJmJNZXRyaWNzKTsKLQotICAgIGlmICgoYU1ldHJpY3MuZGVzaWdu
VW5pdHNQZXJFbSAhPSBiTWV0cmljcy5kZXNpZ25Vbml0c1BlckVtKQotICAgICAgICB8fCAoYU1l
dHJpY3MuYXNjZW50ICE9IGJNZXRyaWNzLmFzY2VudCkKLSAgICAgICAgfHwgKGFNZXRyaWNzLmRl
c2NlbnQgIT0gYk1ldHJpY3MuYXNjZW50KQotICAgICAgICB8fCAoYU1ldHJpY3MubGluZUdhcCAh
PSBiTWV0cmljcy5saW5lR2FwKQotICAgICAgICB8fCAoYU1ldHJpY3MuY2FwSGVpZ2h0ICE9IGJN
ZXRyaWNzLmNhcEhlaWdodCkKLSAgICAgICAgfHwgKGFNZXRyaWNzLnhIZWlnaHQgIT0gYk1ldHJp
Y3MueEhlaWdodCkKLSAgICAgICAgfHwgKGFNZXRyaWNzLnVuZGVybGluZVBvc2l0aW9uICE9IGJN
ZXRyaWNzLnVuZGVybGluZVBvc2l0aW9uKQotICAgICAgICB8fCAoYU1ldHJpY3MudW5kZXJsaW5l
VGhpY2tuZXNzICE9IGJNZXRyaWNzLnVuZGVybGluZVRoaWNrbmVzcykKLSAgICAgICAgfHwgKGFN
ZXRyaWNzLnN0cmlrZXRocm91Z2hQb3NpdGlvbiAhPSBiTWV0cmljcy5zdHJpa2V0aHJvdWdoUG9z
aXRpb24pCi0gICAgICAgIHx8IChhTWV0cmljcy5zdHJpa2V0aHJvdWdoVGhpY2tuZXNzICE9IGJN
ZXRyaWNzLnN0cmlrZXRocm91Z2hUaGlja25lc3MpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdW5zaWduZWQgRm9udFBsYXRmb3JtRGF0YTo6aGFzaCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZm9udCA/IG1fZm9udC0+aGFzaCgpIDogMDsKLX0KLQot
Ym9vbCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybUlzRXF1YWwoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZm9udCA9PSBvdGhlci5tX2ZvbnQK
LSAgICAgICAgJiYgbV91c2VHREkgPT0gb3RoZXIubV91c2VHREkKLSAgICAgICAgJiYgZm9udHNB
cmVFcXVhbChtX2R3Rm9udC5nZXQoKSwgb3RoZXIubV9kd0ZvbnQuZ2V0KCkpOwotfQotCi19Ci0K
LSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBo
UGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcAkocmV2aXNp
b24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBo
UGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTA3ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkK
LQotI2luY2x1ZGUgIkRpcmVjdFdyaXRlVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiRm9udC5oIgot
I2luY2x1ZGUgIlRleHRBbmFseXplckhlbHBlci5oIgotI2luY2x1ZGUgPGR3cml0ZV8zLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZl
ciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKQotewotICAgIGlmIChidWZmZXJMZW5ndGggPiBHbHlw
aFBhZ2U6OnNpemUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IEZvbnQmIGZv
bnQgPSB0aGlzLT5mb250KCk7Ci0gICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7Ci0KLSAgICBD
T01QdHI8SURXcml0ZVRleHRBbmFseXplcj4gYW5hbHl6ZXI7Ci0gICAgSFJFU1VMVCBociA9IERp
cmVjdFdyaXRlOjpmYWN0b3J5KCktPkNyZWF0ZVRleHRBbmFseXplcigmYW5hbHl6ZXIpOwotICAg
IFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgYXV0byYgZm9udFBsYXRmb3Jt
RGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBVQ2hhciBsb2NhbGVOYW1lW0xPQ0FM
RV9OQU1FX01BWF9MRU5HVEggKyAxXSA9IHsgfTsKLSAgICBpbnQgbG9jYWxlTGVuZ3RoID0gR2V0
VXNlckRlZmF1bHRMb2NhbGVOYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmbG9jYWxlTmFt
ZSksIExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGxvY2FsZUxl
bmd0aCA8PSBMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKLQotICAgIFRleHRBbmFseXplckhlbHBl
ciBoZWxwZXIocmVpbnRlcnByZXRfY2FzdDxMUFdTVFI+KCZsb2NhbGVOYW1lKSwgcmVpbnRlcnBy
ZXRfY2FzdDxMUFdTVFI+KGJ1ZmZlciksIGJ1ZmZlckxlbmd0aCk7Ci0KLSAgICBociA9IGFuYWx5
emVyLT5BbmFseXplU2NyaXB0KCZoZWxwZXIsIDAsIGJ1ZmZlckxlbmd0aCwgJmhlbHBlcik7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBWZWN0b3I8R2x5cGg+IGds
eXBocyhHbHlwaFBhZ2U6OnNpemUsIDApOwotICAgIFZlY3RvcjxHbHlwaD4gY2x1c3Rlck1hcChH
bHlwaFBhZ2U6OnNpemUsIDApOwotICAgIFZlY3RvcjxEV1JJVEVfU0hBUElOR19URVhUX1BST1BF
UlRJRVM+IHRleHRQcm9wZXJ0aWVzKEdseXBoUGFnZTo6c2l6ZSk7Ci0gICAgVmVjdG9yPERXUklU
RV9TSEFQSU5HX0dMWVBIX1BST1BFUlRJRVM+IGdseXBoUHJvcGVydGllcyhHbHlwaFBhZ2U6OnNp
emUpOwotCi0gICAgY29uc3QgV0NIQVIqIHRleHRTdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TFBD
V1NUUj4oYnVmZmVyKTsKLSAgICBHbHlwaCogZ2x5cGhEYXRhID0gZ2x5cGhzLmRhdGEoKTsKLSAg
ICBHbHlwaCogY2x1c3Rlck1hcERhdGEgPSBjbHVzdGVyTWFwLmRhdGEoKTsKLSAgICBEV1JJVEVf
U0hBUElOR19URVhUX1BST1BFUlRJRVMqIHRleHRQcm9wZXJ0aWVzRGF0YSA9IHRleHRQcm9wZXJ0
aWVzLmRhdGEoKTsKLSAgICBEV1JJVEVfU0hBUElOR19HTFlQSF9QUk9QRVJUSUVTKiBnbHlwaFBy
b3BlcnRpZXNEYXRhID0gZ2x5cGhQcm9wZXJ0aWVzLmRhdGEoKTsKLQotICAgIHVuc2lnbmVkIHRv
dGFsID0gMDsKLSAgICB1bnNpZ25lZCBtYXhHbHlwaENvdW50ID0gR2x5cGhQYWdlOjpzaXplOwot
ICAgIGZvciAoY29uc3QgYXV0byYgcnVuIDogaGVscGVyLm1fYW5hbHl6ZWRSdW5zKSB7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHRvdGFsICsgcnVuLmxlbmd0aCA8PSBidWZmZXJMZW5ndGgpOwot
Ci0gICAgICAgIHVuc2lnbmVkIHJldHVybmVkQ291bnQgPSAwOwotICAgICAgICBociA9IGFuYWx5
emVyLT5HZXRHbHlwaHModGV4dFN0YXJ0ICsgcnVuLnN0YXJ0UG9zaXRpb24sIHJ1bi5sZW5ndGgs
IGZvbnRQbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpLCBmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0
aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCwgZmFsc2UsCi0gICAgICAgICAgICAm
cnVuLmFuYWx5c2lzLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCAwLCBtYXhH
bHlwaENvdW50LCBjbHVzdGVyTWFwRGF0YSwgdGV4dFByb3BlcnRpZXNEYXRhLAotICAgICAgICAg
ICAgZ2x5cGhEYXRhLCBnbHlwaFByb3BlcnRpZXNEYXRhLCAmcmV0dXJuZWRDb3VudCk7Ci0KLSAg
ICAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIGdseXBoRGF0YSArPSByZXR1cm5lZENvdW50OwotICAgICAgICBjbHVzdGVyTWFwRGF0
YSArPSByZXR1cm5lZENvdW50OwotICAgICAgICB0ZXh0UHJvcGVydGllc0RhdGEgKz0gcmV0dXJu
ZWRDb3VudDsKLSAgICAgICAgZ2x5cGhQcm9wZXJ0aWVzRGF0YSArPSByZXR1cm5lZENvdW50Owot
ICAgICAgICBtYXhHbHlwaENvdW50IC09IHJldHVybmVkQ291bnQ7Ci0gICAgfQotCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgKytpKSB7Ci0gICAgICAgIEds
eXBoIGdseXBoID0gZ2x5cGhzW2ldOwotICAgICAgICBpZiAoIWdseXBoKQotICAgICAgICAgICAg
c2V0R2x5cGhGb3JJbmRleChpLCAwKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzZXRH
bHlwaEZvckluZGV4KGksIGdseXBoKTsKLSAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGhhdmVHbHlwaHM7Ci19Ci0KLX0KLQotI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnRE
aXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKG5vbmV4
aXN0ZW50KQpAQCAtMSwyMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3Jh
ZGllbnQuaCIKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUg
PGQyZDEuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0jZGVmaW5lIEdSQURJRU5U
X0RSQVdJTkcgMwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgR3JhZGllbnQ6OnN0b3Bz
Q2hhbmdlZCgpCi17Ci0gICAgbV9icnVzaCA9IG51bGxwdHI7Ci19Ci0KLXN0YXRpYyBib29sIGNp
cmNsZUlzRW50aXJlbHlDb250YWluZWQoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyQSwgZmxvYXQg
cmFkaXVzQSwgY29uc3QgRmxvYXRQb2ludCYgY2VudGVyQiwgZmxvYXQgcmFkaXVzQikKLXsKLSAg
ICBkb3VibGUgZGVsdGFYID0gY2VudGVyQi54KCkgLSBjZW50ZXJBLngoKTsKLSAgICBkb3VibGUg
ZGVsdGFZID0gY2VudGVyQi55KCkgLSBjZW50ZXJBLnkoKTsKLSAgICBkb3VibGUgZGVsdGFSYWRp
dXMgPSByYWRpdXNCIC0gcmFkaXVzQTsKLQotICAgIHJldHVybiBkZWx0YVggKiBkZWx0YVggKyBk
ZWx0YVkgKiBkZWx0YVkgPCBkZWx0YVJhZGl1cyAqIGRlbHRhUmFkaXVzICYmIHJhZGl1c0EgPCBy
YWRpdXNCOwotfQotCi1JRDJEMUJydXNoKiBHcmFkaWVudDo6Y3JlYXRlQnJ1c2goSUQyRDFSZW5k
ZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsKLSAgICBzb3J0U3RvcHMoKTsKLQotICAgIFZlY3Rv
cjxEMkQxX0dSQURJRU5UX1NUT1A+IGdyYWRpZW50U3RvcHM7Ci0gICAgZ3JhZGllbnRTdG9wcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fc3RvcHMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHN0
b3AgOiBtX3N0b3BzKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igbm9uLXNS
R0JBIGNvbG9yIHNwYWNlcy4KLSAgICAgICAgYXV0byBbciwgZywgYiwgYV0gc3RvcC5jb2xvci50
b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwotICAgICAgICBncmFk
aWVudFN0b3BzLmdyYWRpZW50U3RvcHMudW5jaGVja2VkQXBwZW5kKEQyRDE6OkdyYWRpZW50U3Rv
cChzdG9wLm9mZnNldCwgRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEpKSk7Ci0gICAgfQotCi0gICAg
V1RGOjpzd2l0Y2hPbihtX2RhdGEsCi0gICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYpIHsK
LSAgICAgICAgICAgIC8vIE5vIGFjdGlvbiBuZWVkZWQuCi0gICAgICAgIH0sCi0gICAgICAgIFsm
XSAoUmFkaWFsRGF0YSYgZGF0YSkgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YS5z
dGFydFJhZGl1cyA+PSAwKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRhdGEuZW5kUmFk
aXVzID49IDApOwotCi0gICAgICAgICAgICBpZiAoZGF0YS5zdGFydFJhZGl1cyA+IGRhdGEuZW5k
UmFkaXVzKSB7Ci0gICAgICAgICAgICAgICAgZ3JhZGllbnRTdG9wcy5yZXZlcnNlKCk7Ci0gICAg
ICAgICAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogZ3JhZGllbnRTdG9wcykKLSAgICAgICAgICAg
ICAgICAgICAgc3RvcC5wb3NpdGlvbiA9IDEuMCAtIHN0b3AucG9zaXRpb247Ci0KLSAgICAgICAg
ICAgICAgICBzdGQ6OnN3YXAoZGF0YS5zdGFydFJhZGl1cywgZGF0YS5lbmRSYWRpdXMpOwotICAg
ICAgICAgICAgICAgIHN0ZDo6c3dhcChkYXRhLnBvaW50MCwgZGF0YS5wb2ludDEpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZGF0YS5zdGFydFJhZGl1cykgewotICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGRhdGEuZW5kUmFkaXVzID4gMCk7Ci0gICAgICAgICAgICAg
ICAgZmxvYXQgc3RhcnRQb3NpdGlvbiA9IGRhdGEuc3RhcnRSYWRpdXMgLyBkYXRhLmVuZFJhZGl1
czsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGFydFBvc2l0aW9uIDw9IDEuMCk7
Ci0gICAgICAgICAgICAgICAgZmxvYXQgYXZhaWxhYmxlUmFuZ2UgPSAxLjAgLSBzdGFydFBvc2l0
aW9uOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGF2YWlsYWJsZVJhbmdlIDw9IDEu
MCAmJiBhdmFpbGFibGVSYW5nZSA+PSAwKTsKLQotICAgICAgICAgICAgICAgIGZvciAoYXV0byYg
c3RvcCA6IGdyYWRpZW50U3RvcHMpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RvcC5wb3NpdGlv
biAqPSBhdmFpbGFibGVSYW5nZTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcC5wb3NpdGlvbiAr
PSBzdGFydFBvc2l0aW9uOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8v
IFJlc3RvcmUgdGhlICdzdGFydCcgcG9zaXRpb24KLSAgICAgICAgICAgICAgICBhdXRvIGZpcnN0
U3RvcCA9IGdyYWRpZW50U3RvcHMuZmlyc3QoKTsKLSAgICAgICAgICAgICAgICBpZiAoIVdURjo6
YXJlRXNzZW50aWFsbHlFcXVhbChmaXJzdFN0b3AucG9zaXRpb24sIDAuMGYpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGZpcnN0U3RvcC5wb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICAgICAgICAg
IGdyYWRpZW50U3RvcHMuaW5zZXJ0KDAsIGZpcnN0U3RvcCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IENvbmljRGF0YSYp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBc3Nlc3Mgd2hldGhlciBuZWVkZWQgZm9yIENvbmlj
IEdyYWRpZW50cy4KLSAgICAgICAgfQotICAgICk7Ci0KLSAgICBDT01QdHI8SUQyRDFHcmFkaWVu
dFN0b3BDb2xsZWN0aW9uPiBncmFkaWVudFN0b3BDb2xsZWN0aW9uOwotICAgIEhSRVNVTFQgaHIg
PSByZW5kZXJUYXJnZXQtPkNyZWF0ZUdyYWRpZW50U3RvcENvbGxlY3Rpb24oZ3JhZGllbnRTdG9w
cy5kYXRhKCksIGdyYWRpZW50U3RvcHMuc2l6ZSgpLCAmZ3JhZGllbnRTdG9wQ29sbGVjdGlvbik7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBXVEY6OnN3aXRjaE9u
KG1fZGF0YSwKLSAgICAgICAgWyZdIChjb25zdCBMaW5lYXJEYXRhJiBkYXRhKSB7Ci0gICAgICAg
ICAgICBJRDJEMUxpbmVhckdyYWRpZW50QnJ1c2gqIGxpbmVhckdyYWRpZW50ID0gbnVsbHB0cjsK
LSAgICAgICAgICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVMaW5lYXJHcmFkaWVudEJydXNo
KAotICAgICAgICAgICAgICAgIEQyRDE6OkxpbmVhckdyYWRpZW50QnJ1c2hQcm9wZXJ0aWVzKGRh
dGEucG9pbnQwLCBkYXRhLnBvaW50MSksCi0gICAgICAgICAgICAgICAgRDJEMTo6QnJ1c2hQcm9w
ZXJ0aWVzKCksIGdyYWRpZW50U3RvcENvbGxlY3Rpb24uZ2V0KCksCi0gICAgICAgICAgICAgICAg
JmxpbmVhckdyYWRpZW50KTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotICAgICAgICAgICAgbV9icnVzaCA9IGFkb3B0Q09NKGxpbmVhckdyYWRpZW50KTsKLSAg
ICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSYWRpYWxEYXRhJiBkYXRhKSB7Ci0gICAgICAg
ICAgICBGbG9hdFNpemUgb2Zmc2V0OwotICAgICAgICAgICAgaWYgKCFjaXJjbGVJc0VudGlyZWx5
Q29udGFpbmVkKGRhdGEucG9pbnQwLCBkYXRhLnN0YXJ0UmFkaXVzLCBkYXRhLnBvaW50MSwgZGF0
YS5lbmRSYWRpdXMpKQotICAgICAgICAgICAgICAgIG9mZnNldCA9IChkYXRhLnBvaW50MS5zY2Fs
ZWQoZGF0YS5zdGFydFJhZGl1cykgLSBkYXRhLnBvaW50MC5zY2FsZWQoZGF0YS5lbmRSYWRpdXMp
KSAvIChkYXRhLmVuZFJhZGl1cyAtIGRhdGEuc3RhcnRSYWRpdXMpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIG9mZnNldCA9IGRhdGEucG9pbnQwIC0gZGF0YS5wb2ludDE7Ci0K
LSAgICAgICAgICAgIEZsb2F0UG9pbnQgY2VudGVyID0gZGF0YS5wb2ludDE7Ci0gICAgICAgICAg
ICBmbG9hdCByYWRpdXNYID0gZGF0YS5lbmRSYWRpdXM7Ci0gICAgICAgICAgICBmbG9hdCByYWRp
dXNZID0gcmFkaXVzWCAvIGRhdGEuYXNwZWN0UmF0aW87Ci0KLSAgICAgICAgICAgIElEMkQxUmFk
aWFsR3JhZGllbnRCcnVzaCogcmFkaWFsR3JhZGllbnQgPSBudWxscHRyOwotICAgICAgICAgICAg
aHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZVJhZGlhbEdyYWRpZW50QnJ1c2goCi0gICAgICAgICAg
ICAgICAgRDJEMTo6UmFkaWFsR3JhZGllbnRCcnVzaFByb3BlcnRpZXMoY2VudGVyLCBEMkQxOjpQ
b2ludDJGKG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkpLCByYWRpdXNYLCByYWRpdXNZ
KSwKLSAgICAgICAgICAgICAgICBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKSwgZ3JhZGllbnRTdG9w
Q29sbGVjdGlvbi5nZXQoKSwKLSAgICAgICAgICAgICAgICAmcmFkaWFsR3JhZGllbnQpOwotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgICAgICBtX2Jy
dXNoID0gYWRvcHRDT00ocmFkaWFsR3JhZGllbnQpOwotICAgICAgICB9LAotICAgICAgICBbJl0g
KGNvbnN0IENvbmljRGF0YSYpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgY29u
aWMgZ3JhZGllbnQgcmVuZGVyaW5nLgotICAgICAgICAgICAgbV9icnVzaCA9IG51bGxwdHI7Ci0g
ICAgICAgIH0KLSAgICApOwotCi0gICAgcmV0dXJuIG1fYnJ1c2guZ2V0KCk7Ci19Ci0KLXZvaWQg
R3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgYXV0byBkMmRDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQo
KS0+cmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKLSAgICAgICAg
WyZdIChjb25zdCBMaW5lYXJEYXRhJiBkYXRhKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSWYg
d2UgaGF2ZSBhIGJydXNoLCB3aHkgY2FuIHdlIHJlLXVzZSBpdD8gV2hhdCBndWFyYW50ZWVzIGl0
J3MgcmlnaHQgZm9yIHRoaXMgY29udGV4dD8KLSAgICAgICAgICAgIGlmICghbV9icnVzaCkKLSAg
ICAgICAgICAgICAgICBjcmVhdGVCcnVzaChkMmRDb250ZXh0KTsKLQotI2lmIEFTU0VSVF9FTkFC
TEVECi0gICAgICAgICAgICBkMmRDb250ZXh0LT5TZXRUYWdzKEdSQURJRU5UX0RSQVdJTkcsIF9f
TElORV9fKTsKLSNlbmRpZgotCi0gICAgICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0
ID0gcmVjdDsKLSAgICAgICAgICAgIGQyZENvbnRleHQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3Qs
IG1fYnJ1c2guZ2V0KCkpOwotICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJhZGlhbERh
dGEmIGRhdGEpIHsKLSAgICAgICAgICAgIGJvb2wgbmVlZFNjYWxpbmcgPSBkYXRhLmFzcGVjdFJh
dGlvICE9IDE7Ci0gICAgICAgICAgICBpZiAobmVlZFNjYWxpbmcpIHsKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LnNhdmUoKTsKLSAgICAgICAgICAgICAgICAvLyBTY2FsZSBmcm9tIHRoZSBjZW50
ZXIgb2YgdGhlIGdyYWRpZW50LiBXZSBvbmx5IGV2ZXIgc2NhbGUgbm9uLWRlcHJlY2F0ZWQgZ3Jh
ZGllbnRzLAotICAgICAgICAgICAgICAgIC8vIGZvciB3aGljaCBtX3AwID09IG1fcDEuCi0gICAg
ICAgICAgICAgICAgQVNTRVJUKGRhdGEucG9pbnQwID09IGRhdGEucG9pbnQxKTsKLQotICAgICAg
ICAgICAgICAgIEQyRDFfTUFUUklYXzNYMl9GIGN0bSA9IHsgfTsKLSAgICAgICAgICAgICAgICBk
MmRDb250ZXh0LT5HZXRUcmFuc2Zvcm0oJmN0bSk7Ci0KLSAgICAgICAgICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNmb3JtKGN0bSk7Ci0gICAgICAgICAgICAgICAgdHJhbnNmb3JtLnRyYW5z
bGF0ZShkYXRhLnBvaW50MCk7Ci0gICAgICAgICAgICAgICAgdHJhbnNmb3JtLnNjYWxlTm9uVW5p
Zm9ybSgxLjAsIDEuMCAvIGRhdGEuYXNwZWN0UmF0aW8pOwotICAgICAgICAgICAgICAgIHRyYW5z
Zm9ybS50cmFuc2xhdGUoLWRhdGEucG9pbnQwKTsKLQotICAgICAgICAgICAgICAgIGQyZENvbnRl
eHQtPlNldFRyYW5zZm9ybShjdG0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBG
SVhNRTogSWYgd2UgaGF2ZSBhIGJydXNoLCB3aHkgY2FuIHdlIHJlLXVzZSBpdD8gV2hhdCBndWFy
YW50ZWVzIGl0J3MgcmlnaHQgZm9yIHRoaXMgY29udGV4dD8KLSAgICAgICAgICAgIGlmICghbV9i
cnVzaCkKLSAgICAgICAgICAgICAgICBjcmVhdGVCcnVzaChkMmRDb250ZXh0KTsKLQotI2lmIEFT
U0VSVF9FTkFCTEVECi0gICAgICAgICAgICBkMmRDb250ZXh0LT5TZXRUYWdzKEdSQURJRU5UX0RS
QVdJTkcsIF9fTElORV9fKTsKLSNlbmRpZgotCi0gICAgICAgICAgICBjb25zdCBEMkQxX1JFQ1Rf
RiBkMmRSZWN0ID0gcmVjdDsKLSAgICAgICAgICAgIGQyZENvbnRleHQtPkZpbGxSZWN0YW5nbGUo
JmQyZFJlY3QsIG1fYnJ1c2guZ2V0KCkpOwotCi0gICAgICAgICAgICBpZiAobmVlZFNjYWxpbmcp
Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgICAgIH0sCi0gICAgICAg
IFsmXSAoY29uc3QgQ29uaWNEYXRhJikgewotICAgICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVu
dCBjb25pYyBncmFkaWVudCByZW5kZXJpbmcuCi0gICAgICAgIH0KLSAgICApOwotfQotCi19Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJl
Y3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw5MTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5j
bHVkZSAiRGlyZWN0MkRPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMu
aCIKLSNpbmNsdWRlICJEaXNwbGF5TGlzdFJlY29yZGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRSb3Vu
ZGVkUmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVj
dDJELmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXJE
aXJlY3QyRC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8ZDJk
MS5oPgotI2luY2x1ZGUgPGQyZDFlZmZlY3RzLmg+Ci0jaW5jbHVkZSA8ZHdyaXRlXzMuaD4KLSNp
bmNsdWRlIDx3dGYvVVJMLmg+Ci0KLSNwcmFnbWEgd2FybmluZyAoZGlzYWJsZSA6IDQ3NTYpCi0K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0NvbnRleHREaXJlY3QyRDo6R3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKLXsKLSAgICBwbGF0Zm9y
bUluaXQoaGRjLCBoYXNBbHBoYSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpHcmFw
aGljc0NvbnRleHREaXJlY3QyRChIREMgaGRjLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiogcmVuZGVy
VGFyZ2V0LCBSRUNUIHJlY3QsIGJvb2wgaGFzQWxwaGEpCi17Ci0gICAgLy8gQ3JlYXRlIGEgREMg
cmVuZGVyIHRhcmdldC4KLSAgICBhdXRvIHRhcmdldFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6cmVu
ZGVyVGFyZ2V0UHJvcGVydGllcygpOwotCi0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZURDUmVuZGVyVGFyZ2V0KCZ0YXJnZXRQ
cm9wZXJ0aWVzLCByZW5kZXJUYXJnZXQpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgKCpyZW5kZXJUYXJnZXQpLT5CaW5kREMoaGRjLCAmcmVjdCk7Ci0KLSAgICBh
dXRvIG93bmVkUGxhdGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRD4oKnJlbmRlclRhcmdldCk7Ci0gICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZShXVEZNb3ZlKG93bmVkUGxhdGZvcm1Db250ZXh0KSwgQml0bWFwUmVuZGVy
aW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7Ci0gICAgbV9kYXRhLT5tX2hkYyA9IGhkYzsKLX0K
LQotR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgQml0bWFwUmVuZGVy
aW5nQ29udGV4dFR5cGUgcmVuZGVyZXJUeXBlKQotewotICAgIHBsYXRmb3JtSW5pdChwbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCwgcmVuZGVyZXJUeXBlKTsKLX0KLQotSUQyRDFGYWN0b3J5KiBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6c3lzdGVtRmFjdG9yeSgpCi17Ci0gICAgc3RhdGljIElEMkQx
RmFjdG9yeSogZGlyZWN0MkRGYWN0b3J5ID0gbnVsbHB0cjsKLSAgICBpZiAoIWRpcmVjdDJERmFj
dG9yeSkgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgRDJEMV9GQUNUT1JZX09QVElPTlMgb3B0
aW9ucyA9IHsgfTsKLSAgICAgICAgb3B0aW9ucy5kZWJ1Z0xldmVsID0gRDJEMV9ERUJVR19MRVZF
TF9JTkZPUk1BVElPTjsKLSAgICAgICAgSFJFU1VMVCBociA9IEQyRDFDcmVhdGVGYWN0b3J5KEQy
RDFfRkFDVE9SWV9UWVBFX01VTFRJX1RIUkVBREVELCBvcHRpb25zLCAmZGlyZWN0MkRGYWN0b3J5
KTsKLSNlbHNlCi0gICAgICAgIEhSRVNVTFQgaHIgPSBEMkQxQ3JlYXRlRmFjdG9yeShEMkQxX0ZB
Q1RPUllfVFlQRV9NVUxUSV9USFJFQURFRCwgJmRpcmVjdDJERmFjdG9yeSk7Ci0jZW5kaWYKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGRpcmVjdDJERmFjdG9yeTsKLX0KLQotSUQyRDFSZW5kZXJUYXJnZXQqIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBzdGF0aWMgSUQyRDFSZW5k
ZXJUYXJnZXQqIGRlZmF1bHRSZW5kZXJUYXJnZXQgPSBudWxscHRyOwotICAgIGlmICghZGVmYXVs
dFJlbmRlclRhcmdldCkgewotICAgICAgICBhdXRvIHJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBE
MkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIHJlbmRlclRhcmdldFByb3Bl
cnRpZXMudXNhZ2UgPSBEMkQxX1JFTkRFUl9UQVJHRVRfVVNBR0VfR0RJX0NPTVBBVElCTEU7Ci0g
ICAgICAgIGF1dG8gaHduZFJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpId25kUmVuZGVy
VGFyZ2V0UHJvcGVydGllcyg6OkdldERlc2t0b3BXaW5kb3coKSwgRDJEMTo6U2l6ZVUoMTAsIDEw
KSk7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUh3bmRSZW5k
ZXJUYXJnZXQoJnJlbmRlclRhcmdldFByb3BlcnRpZXMsICZod25kUmVuZGVyVGFyZ2V0UHJvcGVy
dGllcywgcmVpbnRlcnByZXRfY2FzdDxJRDJEMUh3bmRSZW5kZXJUYXJnZXQqKj4oJmRlZmF1bHRS
ZW5kZXJUYXJnZXQpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0g
ICAgICAgIGRlZmF1bHRSZW5kZXJUYXJnZXQtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVy
biBkZWZhdWx0UmVuZGVyVGFyZ2V0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpwbGF0Zm9ybUluaXQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKLXsKLSAgICBpZiAoIWhkYykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgSEJJVE1BUCBiaXRtYXAgPSBzdGF0aWNfY2FzdDxIQklU
TUFQPihHZXRDdXJyZW50T2JqZWN0KGhkYywgT0JKX0JJVE1BUCkpOwotCi0gICAgRElCUGl4ZWxE
YXRhIHBpeGVsRGF0YShiaXRtYXApOwotCi0gICAgYXV0byB0YXJnZXRQcm9wZXJ0aWVzID0gRGly
ZWN0MkQ6OnJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKLQotICAgIENPTVB0cjxJRDJEMURDUmVu
ZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IHN5c3RlbUZhY3Rvcnko
KS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRhcmdldFByb3BlcnRpZXMsICZyZW5kZXJUYXJnZXQp
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUkVDVCBj
bGllbnRSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBwaXhlbERhdGEuc2l6ZSgpKTsKLSAgICBo
ciA9IHJlbmRlclRhcmdldC0+QmluZERDKGhkYywgJmNsaWVudFJlY3QpOwotICAgIGlmICghU1VD
Q0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBvd25lZFBsYXRmb3JtQ29u
dGV4dCA9IG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+KHJlbmRlclRhcmdldC5n
ZXQoKSk7Ci0gICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShX
VEZNb3ZlKG93bmVkUGxhdGZvcm1Db250ZXh0KSwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6
OkdQVU1lbW9yeSk7Ci0gICAgbV9kYXRhLT5tX2hkYyA9IGhkYzsKLQotICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgY29udGV4dCBzdGFydHMgaW4gc3luYyB3aXRoIG91ciBzdGF0ZS4KLSAgICBzZXRQbGF0
Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3IoKSk7Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihz
dHJva2VDb2xvcigpKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlj
a25lc3MoKSk7Ci0gICAgLy8gRklYTUU6IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9u
UXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29u
dGV4dCkKLXsKLSAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJp
bmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRl
eHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCi17Ci0gICAgaWYg
KCFwbGF0Zm9ybUNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YSA9IG5ldyBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKnBsYXRmb3JtQ29udGV4dCwgcmVuZGVyaW5n
VHlwZSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5bmMgd2l0
aCBvdXIgc3RhdGUuCi0gICAgc2V0UGxhdGZvcm1GaWxsQ29sb3IoZmlsbENvbG9yKCkpOwotICAg
IHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7Ci0gICAgc2V0UGxhdGZvcm1T
dHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKCkpOwotICAgIC8vIEZJWE1FOiBtX3N0YXRl
LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHko
Q0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCkpKTsKLX0K
LQotR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6On5HcmFwaGljc0NvbnRleHREaXJlY3QyRCgpCi17
Ci0gICAgZGVsZXRlIG1fZGF0YTsKLX0KLQotUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVy
biAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OnN5bmNDb250ZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1JRDJEMVJlbmRlclRhcmdldCogR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyZW5kZXJUYXJnZXQoKQotewotICAgIGlmICghbV9wbGF0
Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG1fcGxhdGZvcm1Db250ZXh0Lm1fdHJhbnNwYXJlbmN5TGF5ZXJTdGFjay5sYXN0KCku
cmVuZGVyVGFyZ2V0LmdldCgpOwotCi0gICAgcmV0dXJuIG1fcGxhdGZvcm1Db250ZXh0LnJlbmRl
clRhcmdldCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0
QWxwaGEoZmxvYXQgYWxwaGEpCi17Ci0gICAgQVNTRVJUKG1fcGxhdGZvcm1Db250ZXh0Lm1fdHJh
bnNwYXJlbmN5TGF5ZXJTdGFjay5pc0VtcHR5KCkpOwotICAgIG1fYWxwaGEgPSBhbHBoYTsKLX0K
LQotZmxvYXQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjdXJyZW50R2xvYmFsQWxw
aGEoKSBjb25zdAotewotICAgIGlmICghbV9wbGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lM
YXllclN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fcGxhdGZvcm1Db250ZXh0Lm1f
dHJhbnNwYXJlbmN5TGF5ZXJTdGFjay5sYXN0KCkub3BhY2l0eTsKLQotICAgIHJldHVybiBtX2Fs
cGhhOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzYXZlKCkKLXsKLSAgICBH
cmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKLSAgICBEaXJlY3QyRDo6c2F2ZSgqcGxhdGZvcm1Db250
ZXh0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyZXN0b3JlKCkKLXsK
LSAgICBpZiAoIXN0YWNrU2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0Nv
bnRleHQ6OnJlc3RvcmUoKTsKLSAgICBEaXJlY3QyRDo6cmVzdG9yZSgqcGxhdGZvcm1Db250ZXh0
KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3TmF0aXZlSW1hZ2Uo
TmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZSgqcGxhdGZvcm1Db250ZXh0
KCksIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgaW1hZ2VTaXplLCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3B0aW9ucywgc3RhdGUuYWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyZWxlYXNlV2luZG93
c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxw
aGFCbGVuZCkKLXsKLSAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSAhbV9kYXRhLT5tX2hkYyB8fCBp
c0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBpZiAoIWNyZWF0ZWRCaXRtYXApIHsKLSAgICAg
ICAgRGlyZWN0MkQ6OnJlc3RvcmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghaGRjIHx8IGRzdFJlY3QuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvIHNvdXJjZUJpdG1hcCA9IGFkb3B0R0RJT2JqZWN0KHN0YXRpY19j
YXN0PEhCSVRNQVA+KDo6R2V0Q3VycmVudE9iamVjdChoZGMsIE9CSl9CSVRNQVApKSk7Ci0KLSAg
ICBESUJQaXhlbERhdGEgcGl4ZWxEYXRhKHNvdXJjZUJpdG1hcC5nZXQoKSk7Ci0gICAgQVNTRVJU
KHBpeGVsRGF0YS5iaXRzUGVyUGl4ZWwoKSA9PSAzMik7Ci0KLSAgICBhdXRvIGJpdG1hcFByb3Bl
cnRpZXMgPSBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpOwotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICBhdXRvJiBwbGF0Zm9ybUNvbnRleHQgPSAqdGhpcy0+cGxh
dGZvcm1Db250ZXh0KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKLSAgICBI
UkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5DcmVhdGVCaXRtYXAo
cGl4ZWxEYXRhLnNpemUoKSwgcGl4ZWxEYXRhLmJ1ZmZlcigpLCBwaXhlbERhdGEuYnl0ZXNQZXJS
b3coKSwgJmJpdG1hcFByb3BlcnRpZXMsICZiaXRtYXApOwotICAgIEFTU0VSVChTVUNDRUVERUQo
aHIpKTsKLQotICAgIFBsYXRmb3JtQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwbGF0Zm9y
bUNvbnRleHQpOwotCi0gICAgLy8gTm90ZTogVGhlIGNvbnRlbnQgaW4gdGhlIEhEQyBpcyBpbnZl
cnRlZCBjb21wYXJlZCB0byBEaXJlY3QyRCwgc28gaXQgbmVlZHMgdG8gYmUgZmxpcHBlZC4KLSAg
ICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBE
MkQxX01BVFJJWF8zWDJfRiBjdXJyZW50VHJhbnNmb3JtOwotICAgIGNvbnRleHQtPkdldFRyYW5z
Zm9ybSgmY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
KGN1cnJlbnRUcmFuc2Zvcm0pOwotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoZHN0UmVjdC5sb2Nh
dGlvbigpKTsKLSAgICB0cmFuc2Zvcm0uc2NhbGUoMS4wLCAtMS4wKTsKLSAgICB0cmFuc2Zvcm0u
dHJhbnNsYXRlKDAsIC1kc3RSZWN0LmhlaWdodCgpKTsKLQotICAgIGNvbnRleHQtPlNldFRyYW5z
Zm9ybSh0cmFuc2Zvcm0pOwotICAgIGNvbnRleHQtPkRyYXdCaXRtYXAoYml0bWFwLmdldCgpLCBE
MkQxOjpSZWN0RigwLCAwLCBkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkpKTsKLQot
ICAgIDo6RGVsZXRlREMoaGRjKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKLXsKLSAgICBEaXJl
Y3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwg
c3R5bGUpOwotfQotCi1HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250
ZXh0LCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUg
cmVuZGVyaW5nVHlwZSkKLSAgICA6IG1fcGxhdGZvcm1Db250ZXh0KHBsYXRmb3JtQ29udGV4dCkK
LSAgICAsIG1fcmVuZGVyZXJUeXBlKHJlbmRlcmluZ1R5cGUpCi17Ci0gICAgaWYgKCFtX3BsYXRm
b3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
cmVuZGVyZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpCaXRtYXBSZW5kZXJpbmdD
b250ZXh0VHlwZTo6R1BVTWVtb3J5KQotICAgICAgICBiZWdpbkRyYXcoKTsKLX0KLQotR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUo
c3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiYmIG93bmVkUGxhdGZvcm1D
b250ZXh0LCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5
cGUgcmVuZGVyaW5nVHlwZSkKLSAgICA6IG1fb3duZWRQbGF0Zm9ybUNvbnRleHQoV1RGTW92ZShv
d25lZFBsYXRmb3JtQ29udGV4dCkpCi0gICAgLCBtX3BsYXRmb3JtQ29udGV4dCgqbV9vd25lZFBs
YXRmb3JtQ29udGV4dCkKLSAgICAsIG1fcmVuZGVyZXJUeXBlKHJlbmRlcmluZ1R5cGUpCi17Ci0g
ICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fcmVuZGVyZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpC
aXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQotICAgICAgICBiZWdpbkRyYXco
KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKCkKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRh
cmdldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wbGF0Zm9ybUNvbnRleHQuYmVn
aW5EcmF3Q291bnQpCi0gICAgICAgIGVuZERyYXcoKTsKLX0KLQotSUQyRDFTb2xpZENvbG9yQnJ1
c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpicnVzaFdpdGhDb2xvcihjb25zdCBDb2xvciYg
Y29sb3IpCi17Ci0gICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5icnVzaFdpdGhDb2xvcihj
b2xvcldpdGhHbG9iYWxBbHBoYShjb2xvcikpLmdldCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGlwKGNvbnN0IFBhdGgmIHBh
dGgpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGlwKElE
MkQxR2VvbWV0cnkqIHBhdGgpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhZmZpbmVUcmFuc2Zvcm0p
Ci17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpmbHVzaCgpCi17
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpbkRyYXcoKQot
ewotICAgIG1fcGxhdGZvcm1Db250ZXh0LmJlZ2luRHJhdygpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kRHJhdygpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRl
eHQuZW5kRHJhdygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
cmVzdG9yZSgpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpz
YXZlKCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsK
LSAgICBBU1NFUlQobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIG1fcGxh
dGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5TZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnRyYW5zbGF0ZShmbG9hdCB4
LCBmbG9hdCB5KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
cm90YXRlKGZsb2F0IGFuZ2xlKQotewotfQotCi1EMkQxX0NPTE9SX0YgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QK
LXsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8
ZmxvYXQ+PigpLnJlc29sdmVkKCk7Ci0gICAgcmV0dXJuIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBh
ICogbV9kYXRhLT5jdXJyZW50R2xvYmFsQWxwaGEoKSk7Ci19Ci0KLUlEMkQxQnJ1c2gqIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpzb2xpZFN0cm9rZUJydXNoKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRTdHJva2VCcnVzaC5nZXQoKTsKLX0KLQotSUQy
RDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNvbGlkRmlsbEJydXNoKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRGaWxsQnJ1c2guZ2V0KCk7
Ci19Ci0KLUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwYXR0ZXJuU3Ryb2tl
QnJ1c2goKSBjb25zdAotewotICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJu
U3Ryb2tlQnJ1c2guZ2V0KCk7Ci19Ci0KLUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpwYXR0ZXJuRmlsbEJydXNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGxhdGZvcm1Db250
ZXh0KCktPm1fcGF0dGVybkZpbGxCcnVzaC5nZXQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6YmVnaW5EcmF3KCkKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+YmVnaW5E
cmF3KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmVuZERyYXcoKQotewot
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5lbmREcmF3KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmZsdXNoKCkKLXsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwotICAgIERpcmVjdDJEOjpmbHVzaCgqcGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3UGF0dGVybihjb25zdCBQbGF0Zm9ybUltYWdlUHRy
JiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
aWYgKCFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgYXV0byB0aWxlSW1hZ2UgPSBpbWFnZTsKLSAgICBEaXJlY3QyRDo6ZHJhd1BhdHRlcm4oKnBs
YXRmb3JtQ29udGV4dCgpLCBXVEZNb3ZlKHRpbGVJbWFnZSksIEludFNpemUoaW1hZ2Uuc2l6ZSgp
KSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucy5j
b21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKLX0KLQotLy8gRHJhd3Mg
YSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzKQotewotICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkpOwotICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJhd1JlY3QoKnBsYXRmb3Jt
Q29udGV4dCgpLCByZWN0LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUu
c3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6OnNldExpbmVDYXAoTGluZUNhcCkKLXsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldExpbmVKb2luKExpbmVKb2luKQotewotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0U3Ryb2tlU3R5bGUoU3Ry
b2tlU3R5bGUpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpz
ZXRNaXRlckxpbWl0KGZsb2F0IGNhbnZhc01pdGVyTGltaXQpCi17Ci0gICAgbV9wbGF0Zm9ybUNv
bnRleHQuc2V0RGFzaE9mZnNldChjYW52YXNNaXRlckxpbWl0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldERhc2hPZmZzZXQoZmxvYXQgZGFzaE9mZnNldCkK
LXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXREYXNoT2Zmc2V0KGRhc2hPZmZzZXQpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0UGF0dGVybldpZHRoKGZs
b2F0IHBhdHRlcm5XaWR0aCkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRQYXR0ZXJuV2lk
dGgocGF0dGVybldpZHRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU6OnNldFBhdHRlcm5PZmZzZXQoZmxvYXQgcGF0dGVybk9mZnNldCkKLXsKLSAgICBtX3BsYXRm
b3JtQ29udGV4dC5zZXRQYXR0ZXJuT2Zmc2V0KHBhdHRlcm5PZmZzZXQpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRo
aWNrbmVzcykKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRTdHJva2VUaGlja25lc3ModGhp
Y2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldERh
c2hlcyhjb25zdCBEYXNoQXJyYXkmIGRhc2hlcykKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5z
ZXREYXNoZXMoZGFzaGVzKTsKLX0KLQotRDJEMV9TVFJPS0VfU1RZTEVfUFJPUEVSVElFUyBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnN0cm9rZVN0eWxlUHJvcGVydGllcygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIEQyRDE6OlN0cm9rZVN0eWxlUHJvcGVydGllcyhtX3BsYXRmb3JtQ29u
dGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNv
bnRleHQubV9saW5lQ2FwLCBtX3BsYXRmb3JtQ29udGV4dC5tX2xpbmVKb2luLCBtX3BsYXRmb3Jt
Q29udGV4dC5tX21pdGVyTGltaXQsIEQyRDFfREFTSF9TVFlMRV9TT0xJRCwgMC4wZik7Ci19Ci0K
LUlEMkQxU3Ryb2tlU3R5bGUqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VTdHlsZSgp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICByZXR1cm4g
cGxhdGZvcm1Db250ZXh0KCktPnN0cm9rZVN0eWxlKCk7Ci19Ci0KLS8vIFRoaXMgaXMgb25seSB1
c2VkIHRvIGRyYXcgYm9yZGVycy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQot
ewotICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQotICAgICAgICByZXR1cm47Ci0g
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpkcmF3TGluZSgq
cGxhdGZvcm1Db250ZXh0KCksIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3Rh
dGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFs
aWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0VsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsK
LSAgICBEaXJlY3QyRDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBzdGF0
ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBw
bHlTdHJva2VQYXR0ZXJuKCkKLXsKLSAgICBpZiAoIW1fc3RhdGUuc3Ryb2tlUGF0dGVybikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7Ci0g
ICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBUaGlzIGlzbid0IHJl
YWxseSBuZWVkZWQgb24gV2luZG93cwotCi0gICAgY29uc3QgZmxvYXQgcGF0dGVybkFscGhhID0g
MTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuU3Ryb2tlQnJ1c2ggPSBhZG9wdENP
TShtX3N0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybigqdGhpcywgcGF0
dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RNKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OmFwcGx5RmlsbFBhdHRlcm4oKQotewotICAgIGlmICghbV9zdGF0ZS5maWxsUGF0dGVy
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBUaGlzIGlz
bid0IHJlYWxseSBuZWVkZWQgb24gV2luZG93cwotCi0gICAgY29uc3QgZmxvYXQgcGF0dGVybkFs
cGhhID0gMTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuRmlsbEJydXNoID0gYWRv
cHRDT00obV9zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKCp0aGlzLCBw
YXR0ZXJuQWxwaGEsIHVzZXJUb0Jhc2VDVE0pKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBpZiAocGF0aC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKLSAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwotICAgIERpcmVjdDJE
OjpkcmF3UGF0aChjb250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCAq
dGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGlmIChw
YXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgc3RhdGUgPSB0aGlz
LT5zdGF0ZSgpOwotICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAg
RGlyZWN0MkQ6OmZpbGxQYXRoKGNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0
YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0g
ICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQo
KTsKLSAgICBEaXJlY3QyRDo6c3Ryb2tlUGF0aChjb250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6U3Ry
b2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCi17Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGF1dG8m
IGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KGNv
bnRleHQsIHJlY3QsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJE
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsK
LSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXV0byYgY29udGV4dCA9ICpw
bGF0Zm9ybUNvbnRleHQoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3QoY29udGV4dCwgcmVjdCwg
Y29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50
JiBncmFkaWVudCkKLXsKLSAgICBhdXRvIGJydXNoID0gZ3JhZGllbnQuY3JlYXRlQnJ1c2gobV9w
bGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIGlmICghYnJ1c2gpCi0gICAgICAg
IHJldHVybjsKLQotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhHcmFkaWVudChtX3BsYXRmb3Jt
Q29udGV4dCwgcmVjdCwgYnJ1c2guZ2V0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
ciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAg
IENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVy
YXRvcjsKLQotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxh
dGZvcm1Db250ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLSAgICBEaXJlY3Qy
RDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hh
ZG93U3RhdGUoc3RhdGUpKTsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3Jt
YWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3RJ
bXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsK
LSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSb3Vu
ZGVkUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBhdXRv
JiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNv
bnRleHQoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29udGV4dCwg
cmVjdCwgcm91bmRlZEhvbGVSZWN0LCBEaXJlY3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgKnRoaXMp
LCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgRGlyZWN0MkQ6
OmNsaXAoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgRGlyZWN0
MkQ6OmNsaXBPdXQoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIERpcmVj
dDJEOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNs
aXBSdWxlKQotewotICAgIERpcmVjdDJEOjpjbGlwUGF0aCgqcGxhdGZvcm1Db250ZXh0KCksIHBh
dGgsIGNsaXBSdWxlKTsKLX0KLQotSW50UmVjdCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xp
cEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6Z2V0Q2xpcEJv
dW5kcygqcGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZs
b2F0IG9wYWNpdHkpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKG9wYWNpdHkpOwotICAgIHNhdmUoKTsKLQotICAgIG1fc3RhdGUuYWxwaGEgPSBvcGFjaXR5
OwotCi0gICAgRGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKnBsYXRmb3JtQ29udGV4
dCgpLCBvcGFjaXR5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6
OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBEaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KnBsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIG1fc3RhdGUuYWxwaGEgPSBtX2RhdGEtPmN1cnJl
bnRHbG9iYWxBbHBoYSgpOwotCi0gICAgcmVzdG9yZSgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpCi17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkaWRVcGRhdGVTdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0
ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VUaGlj
a25lc3MpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0
eWxlQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKG1fcGxh
dGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAgICAgIGlmIChzdGF0ZS5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMg
Z3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250
ZXh0Ci0gICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1
IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICAgICAgYXV0byYgbXV0YWJsZVN0
YXRlID0gY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHRTdGF0ZSY+KGdyYXBoaWNzQ29udGV4dCgp
LnN0YXRlKCkpOwotICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93
T2Zmc2V0OwotICAgICAgICAgICAgbXV0YWJsZVN0YXRlLnNoYWRvd09mZnNldCA9IHsgc2hhZG93
T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVy
YXRpb25DaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0
aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxl
bmRNb2RlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRB
bnRpYWxpYXNDaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFs
aWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotCi0gICAgaWYg
KGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkp
IHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUuc3Ryb2tlQ29sb3IgPT0gY29sb3IpOwotICAgICAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZFN0cm9rZUJydXNoID0gYnJ1c2hXaXRoQ29sb3Io
c3Ryb2tlQ29sb3IoKSk7ICAgIAotICAgIH0KLSAgICAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJU
KG1fc3RhdGUuZmlsbENvbG9yID09IGNvbG9yKTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCkt
Pm1fc29saWRGaWxsQnJ1c2ggPSBicnVzaFdpdGhDb2xvcihmaWxsQ29sb3IoKSk7Ci0gICAgfQot
Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9v
dGhGb250c0NoYW5nZSkpIHsKLSAgICAgICAgYXV0byBmb250U21vb3RoaW5nTW9kZSA9IGVuYWJs
ZSA/IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9DTEVBUlRZUEUgOiBEMkQxX1RFWFRfQU5USUFM
SUFTX01PREVfQUxJQVNFRDsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdl
dCgpLT5TZXRUZXh0QW50aWFsaWFzTW9kZShmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgfQotCi0g
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkp
IHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUuYWxwaGEgPT0gYWxwaGEpOwotICAgICAgICBtX2Rh
dGEtPnNldEFscGhhKGFscGhhKTsKLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKSB7Ci0g
ICAgICAgIEQyRDFfSU5URVJQT0xBVElPTl9NT0RFIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJ
T05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwotCi0gICAgICAgIHN3aXRjaCAobW9kZSkgewotICAg
ICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OgotICAgICAgICAgICAgcXVh
bGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRl
cnBvbGF0ZToKLSAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9O
RUFSRVNUX05FSUdIQk9SOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZXJw
b2xhdGlvblF1YWxpdHk6OkxvdzoKLSAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9M
QVRJT05fTU9ERV9MSU5FQVI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRl
cnBvbGF0aW9uUXVhbGl0eTo6TWVkaXVtOgotICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5U
RVJQT0xBVElPTl9NT0RFX0NVQklDOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SW50ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6Ci0gICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9J
TlRFUlBPTEFUSU9OX01PREVfSElHSF9RVUFMSVRZX0NVQklDOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IFNldEludGVycG9sYXRpb25RdWFsaXR5KHBs
YXRmb3JtQ29udGV4dCgpLCBxdWFsaXR5KTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgRGlyZWN0MkQ6
OnNldE1pdGVyTGltaXQoKnBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgRGlyZWN0MkQ6OmNsZWFyUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQotewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3Rh
dGUoKTsKLSAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwotICAgIERpcmVj
dDJEOjpzdHJva2VSZWN0KGNvbnRleHQsIHJlY3QsIGxpbmVXaWR0aCwgRGlyZWN0MkQ6OlN0cm9r
ZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkK
LXsKLSAgICBEaXJlY3QyRDo6c2V0TGluZUNhcCgqcGxhdGZvcm1Db250ZXh0KCksIGNhcCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIGlmIChkYXNoT2Zmc2V0IDwg
MCkgewotICAgICAgICBmbG9hdCBsZW5ndGggPSAwOwotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGRhc2hlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGxlbmd0aCArPSBzdGF0aWNf
Y2FzdDxmbG9hdD4oZGFzaGVzW2ldKTsKLSAgICAgICAgaWYgKGxlbmd0aCkKLSAgICAgICAgICAg
IGRhc2hPZmZzZXQgPSBmbW9kKGRhc2hPZmZzZXQsIGxlbmd0aCkgKyBsZW5ndGg7Ci0gICAgfQot
Ci0gICAgRGlyZWN0MkQ6OnNldExpbmVEYXNoKCpwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaGVzLCBk
YXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TGluZUpv
aW4oTGluZUpvaW4gam9pbikKLXsKLSAgICBEaXJlY3QyRDo6c2V0TGluZUpvaW4oKnBsYXRmb3Jt
Q29udGV4dCgpLCBqb2luKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2Nh
bGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIERpcmVjdDJEOjpzY2FsZSgqcGxhdGZv
cm1Db250ZXh0KCksIHNpemUpOwotICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNl
VHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6cm90YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIERpcmVjdDJEOjpyb3Rh
dGUoKnBsYXRmb3JtQ29udGV4dCgpLCBhbmdsZSk7Ci0gICAgLy8gRklYTUU6IG1fZGF0YS0+bV91
c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsK
LSAgICBEaXJlY3QyRDo6dHJhbnNsYXRlKCpwbGF0Zm9ybUNvbnRleHQoKSwgeCwgeSk7Ci0gICAg
Ly8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0
eSA9IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgRGlyZWN0MkQ6OmNvbmNh
dENUTSgqcGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7Ci0gICAgLy8gRklYTUU6IG1fZGF0
YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDVE0oKnBsYXRmb3Jt
Q29udGV4dCgpLCB0cmFuc2Zvcm0pOwotICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2
aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotQWZmaW5lVHJhbnNm
b3JtIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGlu
Y2x1ZGVTY2FsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpnZXRDVE0o
KnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdN
b2RlIHJvdW5kaW5nTW9kZSkKLXsKLSAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpyb3VuZFRv
RGV2aWNlUGl4ZWxzKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRp
bmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17Ci0g
ICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEaXJlY3QyRDo6
ZHJhd0xpbmVzRm9yVGV4dCgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50LCB0aGlja25lc3MsIHdp
ZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIG1fc3RhdGUuc3Ryb2tlQ29sb3IpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVS
TCYgbGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRJc0NBTGF5ZXJDb250
ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBwcm9i
YWJhbHkgbm90IG5lZWRlZC4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKLXsKLSAgICAvLyBU
aGlzIGZ1bmN0aW9uIGlzIHByb2JhYmFseSBub3QgbmVlZGVkLgotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0ZWQpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6aXNBY2Nl
bGVyYXRlZENvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6Omlz
QWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IpCi17Ci0gICAgLy8gVGhpcyBpcyBhIG5vLW9wIGZvciBEaXJlY3QyRC4KLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiBlbGxpcHNlKQotewotICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZp
bGxQYXR0ZXJuKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBmaWxs
IGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQyRC4KLSAgICAgICAg
ZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBEaXJlY3QyRDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0
YXRlLmZpbGxDb2xvciwgbV9zdGF0ZS5zdHJva2VTdHlsZSwgbV9zdGF0ZS5zdHJva2VDb2xvciwg
bV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKLXsKLSAgICBpZiAo
bV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4pIHsKLSAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHN0cm9rZSBlbGxpcHNlcyB3aXRoIHBh
dHRlcm4vZ3JhZGllbnQgYnJ1c2hlcyBpbiBEMkQuCi0gICAgICAgIHN0cm9rZUVsbGlwc2VBc1Bh
dGgoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBEaXJlY3QyRDo6ZHJh
d0VsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0YXRlLnN0cm9rZVN0eWxl
LCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250
U21vb3RoaW5nKQotewotICAgIFVOVVNFRF9QQVJBTShmb250U21vb3RoaW5nKTsKLSAgICBpZiAo
IWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
IHhPZmZzZXQgPSBwb2ludC54KCk7Ci0gICAgVmVjdG9yPHVuc2lnbmVkIHNob3J0PiBnbHlwaHMo
bnVtR2x5cGhzKTsKLSAgICBWZWN0b3I8ZmxvYXQ+IGhvcml6b250YWxBZHZhbmNlcyhudW1HbHlw
aHMpOwotICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiBnbHlwaE9mZnNldHMobnVtR2x5
cGhzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewot
ICAgICAgICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZmZXIuYWR2YW5jZXNDb3VudCgpKQotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYXV0byBhZHZhbmNlID0gZ2x5cGhCdWZmZXIuYWR2
YW5jZXMoaSArIGZyb20pOwotICAgICAgICBpZiAoIWFkdmFuY2UpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBnbHlwaHNbaV0gPSBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkgKyBmcm9t
KTsKLSAgICAgICAgaG9yaXpvbnRhbEFkdmFuY2VzW2ldID0gYWR2YW5jZS0+d2lkdGgoKTsKLSAg
ICAgICAgZ2x5cGhPZmZzZXRzW2ldLmFkdmFuY2VPZmZzZXQgPSBhZHZhbmNlLT53aWR0aCgpOwot
ICAgICAgICBnbHlwaE9mZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQgPSBhZHZhbmNlLT5oZWlnaHQo
KTsKLSAgICB9Ci0KLSAgICBkb3VibGUgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhl
dGljQm9sZE9mZnNldCgpOwotCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5z
dGF0ZSgpOwotICAgIERpcmVjdDJEOjpkcmF3R2x5cGhzKG1fcGxhdGZvcm1Db250ZXh0LCBEaXJl
Y3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U3Ry
b2tlU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksCi0gICAgICAgIERpcmVjdDJEOjpT
aGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBmb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBnbHlw
aHMsIGhvcml6b250YWxBZHZhbmNlcywgZ2x5cGhPZmZzZXRzLCB4T2Zmc2V0LAotICAgICAgICBz
dGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93
T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvcik7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6Q2xpcFRv
RHJhd2luZ0NvbW1hbmRzUmVzdWx0IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwVG9EcmF3
aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKLXsKLSAgICAvLyBGSVhNRTog
Tm90IGltcGxlbWVudGVkLgotICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6
OlN1Y2Nlc3M7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBUb0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17
Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5SW1hZ2UoRG9udENvcHlCYWNr
aW5nU3RvcmUpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8q
IGNvbnRleHQgPSAmZ3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGlt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb250ZXh0KSkKLSAgICAgICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVj
dCYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLSNlbmRpZgotCi0KLX0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRHTERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4Nzgx
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRHTERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCi0KLSNpZiBFTkFCTEUoV0VC
R0wpICYmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDxkMmQxZWZmZWN0cy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6On5HcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yKCkgPSBkZWZhdWx0OwotCi1ib29sIEdyYXBoaWNz
Q29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxw
aGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGJvb2wgaWdub3JlTmF0aXZlSW1h
Z2VBbHBoYVByZW11bHRpcGxpY2F0aW9uKQotewotICAgIGlmICghbV9pbWFnZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLQotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMR0w6OnBhaW50VG9DYW52YXMoY29uc3QgdW5z
aWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3Qg
SW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlm
ICghaW1hZ2VQaXhlbHMgfHwgaW1hZ2VTaXplLmlzRW1wdHkoKSB8fCBjYW52YXNTaXplLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSAmJiBVU0UoRElS
RUNUMkQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVk
OiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkRlbGV0ZWQ6IHN2bjprZXl3b3JkcwojIyAtMSArMCwwICMjCi1EYXRlIEF1
dGhvciBJZCBSZXZpc2lvbiBIZWFkVVJMClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJl
Y3QyRC5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaAkobm9uZXhp
c3RlbnQpCkBAIC0xLDE0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNs
dWRlICJDb2xvci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5j
bHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQyZDFfMS5oPgotI2luY2x1ZGUgPGQyZDFlZmZlY3Rz
Lmg+Ci0jaW5jbHVkZSA8ZDJkMWhlbHBlci5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNs
dWRlIDx3dGYvVGlueUxSVUNhY2hlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQmLCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRl
eHRUeXBlKTsKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3RkOjp1bmlxdWVf
cHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiYmLCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJl
bmRlcmluZ0NvbnRleHRUeXBlKTsKLSAgICB+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KCk7Ci0KLSAgICB2b2lkIHN5bmNDb250ZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci0K
LSAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7Ci0gICAgdm9p
ZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOwotCi0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVj
dCYpOwotICAgIHZvaWQgY2xpcChjb25zdCBQYXRoJik7Ci0gICAgdm9pZCBjbGlwKElEMkQxR2Vv
bWV0cnkqKTsKLQotICAgIHZvaWQgYmVnaW5EcmF3KCk7Ci0gICAgdm9pZCBlbmREcmF3KCk7Ci0g
ICAgdm9pZCBmbHVzaCgpOwotICAgIHZvaWQgc2F2ZSgpOwotICAgIHZvaWQgc2NhbGUoY29uc3Qg
RmxvYXRTaXplJik7Ci0gICAgdm9pZCByZXN0b3JlKCk7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQp
OwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCk7Ci0gICAgdm9pZCBjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJik7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCk7Ci0gICAgdm9pZCBzZXRM
aW5lSm9pbihMaW5lSm9pbik7Ci0gICAgdm9pZCBzZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSk7
Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KTsKLSAgICB2b2lkIHNldERhc2hPZmZzZXQo
ZmxvYXQpOwotICAgIHZvaWQgc2V0UGF0dGVybldpZHRoKGZsb2F0KTsKLSAgICB2b2lkIHNldFBh
dHRlcm5PZmZzZXQoZmxvYXQpOwotICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KTsK
LSAgICB2b2lkIHNldERhc2hlcyhjb25zdCBEYXNoQXJyYXkmKTsKLSAgICB2b2lkIHNldEFscGhh
KGZsb2F0KTsKLQotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQo
KSB7IHJldHVybiBtX3BsYXRmb3JtQ29udGV4dDsgfQotICAgIElEMkQxUmVuZGVyVGFyZ2V0KiBy
ZW5kZXJUYXJnZXQoKTsKLQotICAgIEhEQyBtX2hkYyB7IG51bGxwdHIgfTsKLQotICAgIGZsb2F0
IGN1cnJlbnRHbG9iYWxBbHBoYSgpIGNvbnN0OwotCi0gICAgRDJEMV9TVFJPS0VfU1RZTEVfUFJP
UEVSVElFUyBzdHJva2VTdHlsZVByb3BlcnRpZXMoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IG1fb3duZWRQbGF0Zm9ybUNv
bnRleHQ7Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIG1fcGxhdGZvcm1Db250ZXh0Owot
ICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgbV9y
ZW5kZXJlclR5cGU7Ci0KLSAgICB1bnNpZ25lZCBiZWdpbkRyYXdDb3VudCB7IDAgfTsKLQotICAg
IGZsb2F0IG1fYWxwaGEgeyAxLjAgfTsKLQotICAgIGZyaWVuZCBjbGFzcyBEMkRDb250ZXh0U3Rh
dGVTYXZlcjsKLX07Ci0KLWNsYXNzIEQyRENvbnRleHRTdGF0ZVNhdmVyIHsKLXB1YmxpYzoKLSAg
ICBEMkRDb250ZXh0U3RhdGVTYXZlcihHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUmIGNv
bnRleHQsIGJvb2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQotICAgICAgICA6IG1fY29udGV4dChj
b250ZXh0KQotICAgICAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCi0gICAg
ewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAgIG1fY29udGV4dC5t
X3BsYXRmb3JtQ29udGV4dC5zYXZlKCk7Ci0gICAgfQotCi0gICAgfkQyRENvbnRleHRTdGF0ZVNh
dmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAg
bV9jb250ZXh0Lm1fcGxhdGZvcm1Db250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHNhdmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAg
ICAgbV9jb250ZXh0Lm1fcGxhdGZvcm1Db250ZXh0LnNhdmUoKTsKLSAgICAgICAgbV9zYXZlQW5k
UmVzdG9yZSA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCByZXN0b3JlKCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAgbV9jb250ZXh0Lm1fcGxhdGZv
cm1Db250ZXh0LnJlc3RvcmUoKTsKLSAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IGZhbHNlOwot
ICAgIH0KLQotICAgIGJvb2wgZGlkU2F2ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9zYXZlQW5kUmVzdG9yZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBvd25lZFBsYXRmb3JtQ29udGV4dDsKLSAgICBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUmIG1fY29udGV4dDsKLSAgICBib29sIG1fc2F2ZUFu
ZFJlc3RvcmUgeyBmYWxzZSB9OwotfTsKLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAJ
KHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw2IEBA
CiAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
Q0cuaCIKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGVEaXJlY3QyRC5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKQEAgLTQwLDcgKzM4LDYgQEAKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+CiAKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBz
dGF0aWMgdm9pZCBmaWxsV2l0aENsZWFyQ29sb3IoSEJJVE1BUCBiaXRtYXApCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dFdpbi5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDExICszMCw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNkZWZpbmUgR3Jh
cGhpY3NDb250ZXh0V2luIEdyYXBoaWNzQ29udGV4dENHCiAKLSNlbGlmIFVTRShESVJFQ1QyRCkK
LQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dERpcmVjdDJELmgiCi0jZGVmaW5lIEdyYXBoaWNz
Q29udGV4dFdpbiBHcmFwaGljc0NvbnRleHREaXJlY3QyRAotCiAjZWxpZiBVU0UoQ0FJUk8pCiAK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJEaXJlY3QyRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJE
aXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAg
LTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJEaXJl
Y3QyRC5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0xheWVyRmFjdG9yeS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
LSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU2V0Rm9yU2Nv
cGUuaD4KLSNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi0KLSNpZiBDT01QSUxFUihNU1ZDKQotLy8gU2VlIGh0dHBzOi8vbXNk
bi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMXdlYTV6d2UuYXNweAotI3ByYWdtYSB3YXJu
aW5nKGRpc2FibGU6IDQ3MDEpCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWY8
R3JhcGhpY3NMYXllcj4gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJGYWN0b3J5
KiBmYWN0b3J5LCBHcmFwaGljc0xheWVyQ2xpZW50JiBjbGllbnQsIFR5cGUgbGF5ZXJUeXBlKQot
ewotICAgIGlmIChmYWN0b3J5KSB7Ci0gICAgICAgIGF1dG8gbGF5ZXIgPSBmYWN0b3J5LT5jcmVh
dGVHcmFwaGljc0xheWVyKGxheWVyVHlwZSwgY2xpZW50KTsKLSAgICAgICAgbGF5ZXItPmluaXRp
YWxpemUobGF5ZXJUeXBlKTsKLSAgICAgICAgcmV0dXJuIGxheWVyOwotICAgIH0KLQotICAgIC8v
IEZJWE1FOiBSZXR1cm4gYSByZWFsIERpcmVjdDJEIGdyYXBoaWNzIGxheWVyCi0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgR3JhcGhpY3NMYXllckRpcmVjdDJEKGxheWVyVHlwZSwgY2xpZW50KSk7
Ci19Ci0KLUdyYXBoaWNzTGF5ZXJEaXJlY3QyRDo6R3JhcGhpY3NMYXllckRpcmVjdDJEKFR5cGUg
bGF5ZXJUeXBlLCBHcmFwaGljc0xheWVyQ2xpZW50JiBjbGllbnQpCi0gICAgOiBHcmFwaGljc0xh
eWVyKGxheWVyVHlwZSwgY2xpZW50KQotewotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJEaXJlY3Qy
RDo6aW5pdGlhbGl6ZShUeXBlIGxheWVyVHlwZSkKLXsKLX0KLQotR3JhcGhpY3NMYXllckRpcmVj
dDJEOjp+R3JhcGhpY3NMYXllckRpcmVjdDJEKCkKLXsKLSAgICB3aWxsQmVEZXN0cm95ZWQoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0xheWVyRGlyZWN0MkQ6OnNldE5lZWRzRGlzcGxheSgpCi17Ci0g
ICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyRGlyZWN0MkQ6OnNldE5lZWRzRGlzcGxh
eUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHIsIFNob3VsZENsaXBUb0xheWVyIHNob3VsZENsaXAp
Ci17Ci0gICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGly
ZWN0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NMYXllckRpcmVjdDJELmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGlyZWN0MkQuaAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLQotI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKLWNsYXNzIERpc3BsYXlMaXN0OwotfQotCi1j
bGFzcyBGbG9hdFJvdW5kZWRSZWN0OwotY2xhc3MgSW1hZ2U7Ci1jbGFzcyBUcmFuc2Zvcm1TdGF0
ZTsKLQotY2xhc3MgR3JhcGhpY3NMYXllckRpcmVjdDJEIDogcHVibGljIEdyYXBoaWNzTGF5ZXIg
ewotcHVibGljOgotCi0gICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgR3JhcGhpY3NMYXllckRp
cmVjdDJEKFR5cGUsIEdyYXBoaWNzTGF5ZXJDbGllbnQmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5HcmFwaGljc0xheWVyRGlyZWN0MkQoKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGluaXRpYWxpemUoVHlwZSkgb3ZlcnJpZGU7Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldE5lZWRzRGlzcGxheSgpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYsIFNob3VsZENsaXBU
b0xheWVyID0gQ2xpcFRvTGF5ZXIpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc0dyYXBoaWNzTGF5
ZXJDQSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfR1JBUEhJQ1NMQVlFUihXZWJD
b3JlOjpHcmFwaGljc0xheWVyRGlyZWN0MkQsIGlzR3JhcGhpY3NMYXllckNBKCkpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMjMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKLQotI2lmIFVTRShESVJFQ1Qy
RCkKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5j
bHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIK
LSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERp
cmVjdDJELmgiCi0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1
ZGUgPHdpbmNvZGVjLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdURl9NQUtF
X0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCk7Ci0KLXN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3cpCi17Ci0gICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tl
bmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKGJhY2tlbmRTaXplLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvKiBwbGF0Zm9ybUNvbnRl
eHQgPSB0YXJnZXRDb250ZXh0ID8gdGFyZ2V0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiBu
dWxscHRyOwotICAgIGF1dG8qIHJlbmRlclRhcmdldCA9IHBsYXRmb3JtQ29udGV4dCA/IHBsYXRm
b3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkgOiBudWxscHRyOwotCi0gICAgaWYgKCFyZW5kZXJU
YXJnZXQpCi0gICAgICAgIHJlbmRlclRhcmdldCA9IEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJl
bmRlclRhcmdldCgpOwotCi0gICAgYXV0byBiaXRtYXBDb250ZXh0ID0gRGlyZWN0MkQ6OmNyZWF0
ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShzaXplLCByZW5kZXJUYXJnZXQsIHJlc29sdXRpb25T
Y2FsZSk7Ci0gICAgaWYgKCFiaXRtYXBDb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBQ
bGF0Zm9ybUltYWdlUHRyIGJpdG1hcDsKLSAgICBIUkVTVUxUIGhyID0gYml0bWFwQ29udGV4dC0+
R2V0Qml0bWFwKCZiaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byBwbGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5pcXVlPFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEPihiaXRtYXBDb250ZXh0LmdldCgpLCBbdGhpc10oKSB7Ci0gICAgICAgIG1f
ZGF0YS5sb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKLSAgICB9LCBbdGhpc10oKSB7Ci0gICAg
ICAgIG1fZGF0YS5tYXJrQnVmZmVyT3V0T2ZTeW5jKCk7Ci0gICAgfSk7Ci0KLSAgICBpZiAoIXBs
YXRmb3JtQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGNvbnRl
eHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dERpcmVjdDJEPihwbGF0Zm9ybUNvbnRleHQu
Z2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1l
bW9yeSk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+KG5ldyBJ
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChzaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHBsYXRmb3JtQ29udGV4dCksIFdURk1vdmUoY29udGV4
dCksIFdURk1vdmUoYml0bWFwKSkpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQ+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAg
cmV0dXJuIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgMSwgRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsKLX0KLQotSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8UGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ+JiYgcGxhdGZvcm1Db250ZXh0LCBzdGQ6OnVuaXF1ZV9wdHI8
R3JhcGhpY3NDb250ZXh0PiYmIGNvbnRleHQsIFBsYXRmb3JtSW1hZ2VQdHImJiBiaXRtYXApCi0g
ICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSkKLSAgICAsIG1fcGxhdGZvcm1Db250ZXh0KFdURk1vdmUo
cGxhdGZvcm1Db250ZXh0KSkKLSAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQotICAg
ICwgbV9iaXRtYXAoV1RGTW92ZShiaXRtYXApKQotewotfQotCi1HcmFwaGljc0NvbnRleHQmIElt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Km1fY29udGV4dDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Zmx1c2hD
b250ZXh0KCkKLXsKLSAgICBjb250ZXh0KCkuZmx1c2goKTsKLX0KLQotUmVmUHRyPE5hdGl2ZUlt
YWdlPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAotewotICAgIENPTVB0cjxJRDJEMUJpdG1hcFJl
bmRlclRhcmdldD4gYml0bWFwVGFyZ2V0OwotICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0KCkucGxh
dGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFjZSgmYml0bWFwVGFy
Z2V0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBpbWFnZTsKLSAgICBociA9IGJpdG1hcFRhcmdldC0+
R2V0Qml0bWFwKCZpbWFnZSk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgLy8g
RklYTUU6IG1fZGF0YS5kYXRhIGlzIG51bGxwdHIgZXZlbiB3aGVuIGFza2luZyB0byBjb3B5IGJh
Y2tpbmcgc3RvcmUgbGVhZGluZyB0byB0ZXN0IGZhaWx1cmVzLgotICAgIGlmIChjb3B5QmVoYXZp
b3IgPT0gQ29weUJhY2tpbmdTdG9yZSAmJiBtX2RhdGEuZGF0YS5pc0VtcHR5KCkpCi0gICAgICAg
IGNvcHlCZWhhdmlvciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOwotCi0gICAgQ2hlY2tlZFNpemUg
bnVtQnl0ZXMgPSBDaGVja2VkVWludDMyKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgp
KSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChjb3B5QmVoYXZpb3IgPT0gQ29w
eUJhY2tpbmdTdG9yZSkgewotICAgICAgICBEMkQxX1JFQ1RfVSBiYWNraW5nU3RvcmVEaW1lbnN0
aW9ucyA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUpOwotICAg
ICAgICBpbWFnZS0+Q29weUZyb21NZW1vcnkoJmJhY2tpbmdTdG9yZURpbWVuc3Rpb25zLCBtX2Rh
dGEuZGF0YS5kYXRhKCksIDMyKTsKLQotICAgIH0KLQotICAgIHJldHVybiBOYXRpdmVJbWFnZTo6
Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotc3RhdGljIFBsYXRmb3JtSW1hZ2VQdHIgY3Jl
YXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1h
cFRhcmdldCwgSUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCi17Ci0g
ICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IGltYWdlID8gbmF0aXZlSW1hZ2VTaXplKGltYWdlKSA6
IEZsb2F0U2l6ZSgpOwotCi0gICAgaWYgKGltYWdlICYmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGlt
YWdlU2l6ZS53aWR0aCgpKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8
fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6ZS5oZWlnaHQoKSkgIT0gc3RhdGljX2Nhc3Q8
c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkgewotICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+
IGNyb3BwZWRCaXRtYXAgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwKGJpdG1hcFRhcmdldCwgYm91
bmRzKTsKLSAgICAgICAgaWYgKGNyb3BwZWRCaXRtYXApIHsKLSAgICAgICAgICAgIGF1dG8gc291
cmNlUmVjdCA9IEQyRDE6OlJlY3RVKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0
KCkpOwotICAgICAgICAgICAgSFJFU1VMVCBociA9IGNyb3BwZWRCaXRtYXAtPkNvcHlGcm9tQml0
bWFwKG51bGxwdHIsIGltYWdlLCAmc291cmNlUmVjdCk7Ci0gICAgICAgICAgICBpZiAoU1VDQ0VF
REVEKGhyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JvcHBlZEJpdG1hcDsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiBpbWFnZTsKLX0KLQotc3RhdGljIFJlZlB0cjxJbWFnZT4g
Y3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChJRDJEMUJpdG1hcFJlbmRlclRh
cmdldCogYml0bWFwVGFyZ2V0LCBDT01QdHI8SUQyRDFCaXRtYXA+JiYgaW1hZ2UsIEludFNpemUg
aW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHBy
ZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1h
Z2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShiaXRtYXBUYXJnZXQsIGltYWdlLmdl
dCgpLCBpbnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAgICAgICAvLyBGSVhNRTogTmVlZCB0
byBpbXBsZW1lbnQgc2NhbGVkIHZlcnNpb24KLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICB9Ci0KLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJl
dHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotUmVmUHRyPElt
YWdlPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAotewotICAgIFBsYXRmb3JtSW1hZ2VQdHIgaW1hZ2U7Ci0gICAgaWYgKHJlc29sdXRpb25T
Y2FsZSgpID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpLT5wbGF0
Zm9ybUltYWdlKCk7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShE
b250Q29weUJhY2tpbmdTdG9yZSktPnBsYXRmb3JtSW1hZ2UoKTsKLQotICAgIGF1dG8gYml0bWFw
VGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDxJRDJEMUJpdG1hcFJlbmRlclRhcmdldCo+KGNvbnRl
eHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0
ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LCBXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxT
aXplKCksIHJlc29sdXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQ
dHI8SW1hZ2U+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgQ09NUHRyPElEMkQxQml0
bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IGNvbnRleHQo
KS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRt
YXBUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBQbGF0Zm9ybUltYWdlUHRyIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlKS0+cGxhdGZvcm1JbWFnZSgpOwotICAgIHJldHVybiBjcmVhdGVCaXRt
YXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdldC5nZXQoKSwgV1RGTW92ZShp
bWFnZSksIGludGVybmFsU2l6ZSgpLCByZXNvbHV0aW9uU2NhbGUoKSwgcHJlc2VydmVSZXNvbHV0
aW9uKTsKLX0KLQotUGxhdGZvcm1JbWFnZVB0ciBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
Y29tcGF0aWJsZUJpdG1hcChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQotewotICAg
IGxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOwotCi0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0g
ICAgICAgIHJldHVybiBiaXRtYXA7Ci0KLSAgICBpZiAobV9wbGF0Zm9ybUNvbnRleHQtPnJlbmRl
clRhcmdldCgpID09IHJlbmRlclRhcmdldCkgewotICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXBS
ZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldChRdWVyeSwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAg
aWYgKGJpdG1hcFRhcmdldCkgewotICAgICAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiYWNr
aW5nQml0bWFwOwotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChiaXRtYXBUYXJnZXQtPkdldEJp
dG1hcCgmYmFja2luZ0JpdG1hcCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJhY2tpbmdCaXRt
YXAgIT0gbV9iaXRtYXApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBiaXRtYXA7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBkcmF3IGFuIElEMkQxQml0bWFwIHRvIGl0c2VsZi4g
TXVzdCByZXR1cm4gYSBjb3B5LgotICAgICAgICAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4g
Y29waWVkQml0bWFwOwotICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVuZGVyVGFyZ2V0
LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgRGlyZWN0MkQ6OmJpdG1hcFBy
b3BlcnRpZXMoKSwgJmNvcGllZEJpdG1hcCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChT
VUNDRUVERUQoY29waWVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBtX2JpdG1hcC5n
ZXQoKSwgbnVsbHB0cikpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvcGllZEJp
dG1hcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBhdXRvIHNpemUgPSBtX2JpdG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0gICAgQVNTRVJU
KHNpemUuaGVpZ2h0ICYmIHNpemUud2lkdGgpOwotCi0gICAgQ2hlY2tlZFVpbnQzMiBudW1CeXRl
cyA9IHNpemUud2lkdGggKiBzaXplLmhlaWdodCAqIDQ7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092
ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDb3B5IHRoZSBi
aXRzIGZyb20gY3VycmVudCByZW5kZXJUYXJnZXQgdG8gdGhlIG91dHB1dCB0YXJnZXQuCi0gICAg
Ly8gV2UgY2Fubm90IGFjY2VzcyB0aGUgZGF0YSBiYWNraW5nIGFuIElXSUNCaXRtYXAgd2hpbGUg
YW4gYWN0aXZlIGRyYXcgc2Vzc2lvbiBpcyBvcGVuLgotICAgIGNvbnRleHQtPmVuZERyYXcoKTsK
LQotICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IHNvdXJjZURldmljZUNvbnRleHQgPSBt
X3BsYXRmb3JtQ29udGV4dC0+ZGV2aWNlQ29udGV4dCgpOwotICAgIGlmICghc291cmNlRGV2aWNl
Q29udGV4dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRt
YXAxPiBzb3VyY2VDUFVCaXRtYXA7Ci0gICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzEgYml0bWFw
UHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09QVElPTlNf
Q1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4
ZWxGb3JtYXQoKSk7Ci0gICAgSFJFU1VMVCBociA9IHNvdXJjZURldmljZUNvbnRleHQtPkNyZWF0
ZUJpdG1hcChtX2JpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG51bGxwdHIsIGJ5dGVzUGVyUm93LCBi
aXRtYXBQcm9wZXJ0aWVzLCAmc291cmNlQ1BVQml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRCho
cikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFzb3VyY2VDUFVCaXRtYXAp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPkNv
cHlGcm9tQml0bWFwKG51bGxwdHIsIG1fYml0bWFwLmdldCgpLCBudWxscHRyKTsKLSAgICBpZiAo
IVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRDJEMV9NQVBQ
RURfUkVDVCBtYXBwZWRTb3VyY2VEYXRhOwotICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5NYXAo
RDJEMV9NQVBfT1BUSU9OU19SRUFELCAmbWFwcGVkU291cmNlRGF0YSk7Ci0gICAgaWYgKCFTVUND
RUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJRDJEMURl
dmljZUNvbnRleHQ+IHRhcmdldERldmljZUNvbnRleHQ7Ci0gICAgaHIgPSByZW5kZXJUYXJnZXQt
PlF1ZXJ5SW50ZXJmYWNlKCZ0YXJnZXREZXZpY2VDb250ZXh0KTsKLSAgICBBU1NFUlQoU1VDQ0VF
REVEKGhyKSk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvbXBhdGlibGVCaXRtYXA7Ci0g
ICAgaHIgPSB0YXJnZXREZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQaXhl
bFNpemUoKSwgbWFwcGVkU291cmNlRGF0YS5iaXRzLCBtYXBwZWRTb3VyY2VEYXRhLnBpdGNoLCBE
aXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpLCAmY29tcGF0aWJsZUJpdG1hcCk7Ci0gICAgaWYg
KCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGhyID0gc291
cmNlQ1BVQml0bWFwLT5Vbm1hcCgpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAg
IGNvbnRleHQtPmJlZ2luRHJhdygpOwotCi0gICAgcmV0dXJuIGNvbXBhdGlibGVCaXRtYXA7Ci19
Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0
JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBG
bG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Qu
c2NhbGUocmVzb2x1dGlvblNjYWxlKCkpOwotCi0gICAgYXV0byBjb21wYXRpYmxlQml0bWFwID0g
Y29tcGF0aWJsZUJpdG1hcChkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFy
Z2V0KCkpOwotCi0gICAgRmxvYXRTaXplIGN1cnJlbnRJbWFnZVNpemUgPSBuYXRpdmVJbWFnZVNp
emUoY29tcGF0aWJsZUJpdG1hcCk7Ci0gICAgaWYgKGN1cnJlbnRJbWFnZVNpemUuaXNaZXJvKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShjb21w
YXRpYmxlQml0bWFwLCBjdXJyZW50SW1hZ2VTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0
LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEZs
b2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5z
Y2FsZShyZXNvbHV0aW9uU2NhbGUoKSk7Ci0KLSAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFn
ZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29w
eUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwg
ZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNp
bmcsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjbGlw
VG9NYXNrKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJiwgc3RkOjpvcHRpb25hbDxkb3VibGU+LCBQcmVzZXJ2ZVJlc29s
dXRpb24pIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gImRhdGE6
LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0
b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4geyB9OwotfQot
Ci1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwg
c3JjUmVjdCwgbnVsbHB0cik7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6
OnB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgSW1hZ2VC
dWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBv
aW50LCBkZXN0Rm9ybWF0LCBudWxscHRyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oCShub25leGlzdGVudCkKQEAg
LTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkltYWdl
QnVmZmVyQmFja2VuZC5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCA6IHB1YmxpYyBJ
bWFnZUJ1ZmZlckJhY2tlbmQgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQpOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kKTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7Ci0gICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gY3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwotCi0gICAgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQo
KSBvdmVycmlkZTsKLQotICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKLSAgICBS
ZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5LCBQcmVzZXJ2ZVJlc29sdXRp
b24pIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFBy
ZXNlcnZlUmVzb2x1dGlvbikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNsaXBUb01hc2soR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkgb3ZlcnJpZGU7Ci0KLSAgICBT
dHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOwotICAgIFZl
Y3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0UGl4
ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQp
IG92ZXJyaWRlOwotCi1wcm90ZWN0ZWQ6Ci0gICAgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQo
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UpOwotCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBtX3BsYXRmb3JtQ29udGV4dDsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Ci0gICAgUGxhdGZvcm1JbWFn
ZVB0ciBtX2JpdG1hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZURlY29kZXJEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAkocmV2aXNpb24g
Mjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVj
b2RlckRpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDMwNCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKLQotI2lmIFVTRShESVJF
Q1QyRCkKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlT3Jp
ZW50YXRpb24uaCIKLSNpbmNsdWRlICJJbnRQb2ludC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIK
LSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDxXaW5Db2RlYy5oPgotI2luY2x1ZGUgPGQy
ZDEuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1JbWFnZURlY29kZXJEaXJlY3QyRDo6SW1hZ2VEZWNvZGVyRGlyZWN0MkQoKQotewot
fQotCi1JV0lDSW1hZ2luZ0ZhY3RvcnkyKiBJbWFnZURlY29kZXJEaXJlY3QyRDo6c3lzdGVtSW1h
Z2luZ0ZhY3RvcnkoKQotewotICAgIHN0YXRpYyBJV0lDSW1hZ2luZ0ZhY3RvcnkyKiB3aWNJbWFn
aW5nRmFjdG9yeSA9IG51bGxwdHI7Ci0gICAgaWYgKCF3aWNJbWFnaW5nRmFjdG9yeSkgewotICAg
ICAgICBIUkVTVUxUIGhyID0gQ29DcmVhdGVJbnN0YW5jZShDTFNJRF9XSUNJbWFnaW5nRmFjdG9y
eSwgbnVsbHB0ciwgQ0xTQ1RYX0lOUFJPQ19TRVJWRVIsIElJRF9JV0lDSW1hZ2luZ0ZhY3Rvcnky
LCAoTFBWT0lEKikmd2ljSW1hZ2luZ0ZhY3RvcnkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChT
VUNDRUVERUQoaHIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gd2ljSW1hZ2luZ0ZhY3Rvcnk7Ci19
Ci0KLXNpemVfdCBJbWFnZURlY29kZXJEaXJlY3QyRDo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQ
cm9wZXJ0aWVzKCkgY29uc3QKLXsKLSAgICAvLyBTZXQgdG8gbWF0Y2ggdmFsdWUgdXNlZCBmb3Ig
Q29yZUdyYXBoaWNzLgotICAgIHJldHVybiAxMzA4ODsKLX0KLQotU3RyaW5nIEltYWdlRGVjb2Rl
ckRpcmVjdDJEOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLWJvb2wgSW1hZ2VEZWNvZGVyRGlyZWN0
MkQ6OmlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbmF0aXZlRGVjb2Rl
ciA/IHRydWUgOiBmYWxzZTsKLX0KLQotRW5jb2RlZERhdGFTdGF0dXMgSW1hZ2VEZWNvZGVyRGly
ZWN0MkQ6OmVuY29kZWREYXRhU3RhdHVzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbmF0aXZlRGVj
b2RlcikKLSAgICAgICAgcmV0dXJuIEVuY29kZWREYXRhU3RhdHVzOjpFcnJvcjsKLQotICAgIC8v
IEZJWE1FOiBIb29rIGludG8gV0lDIGRlY29kZXIgKGlmIGFzeW5jIGRlY29kZSBpcyBldmVuIHBv
c3NpYmxlKQotICAgIHJldHVybiBFbmNvZGVkRGF0YVN0YXR1czo6Q29tcGxldGU7Ci19Ci0KLUlu
dFNpemUgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnNpemUoKSBjb25zdAotewotICAgIGlmICghbV9u
YXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgQ09NUHRyPElX
SUNCaXRtYXBGcmFtZURlY29kZT4gZnJhbWU7Ci0gICAgSFJFU1VMVCBociA9IG1fbmF0aXZlRGVj
b2Rlci0+R2V0RnJhbWUoMCwgJmZyYW1lKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBVSU5UIHdpZHRoLCBoZWlnaHQ7Ci0gICAgaHIg
PSBmcmFtZS0+R2V0U2l6ZSgmd2lkdGgsICZoZWlnaHQpOwotICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIHJldHVybiBJbnRTaXplKHdpZHRo
LCBoZWlnaHQpOwotfQotCi1zaXplX3QgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmZyYW1lQ291bnQo
KSBjb25zdAotewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIFVJTlQgY291bnQ7Ci0gICAgSFJFU1VMVCBociA9IG1fbmF0aXZlRGVjb2Rlci0+R2V0
RnJhbWVDb3VudCgmY291bnQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLVJlcGV0aXRpb25Db3VudCBJbWFnZURl
Y29kZXJEaXJlY3QyRDo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbmF0
aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJuIFJlcGV0aXRpb25Db3VudE5vbmU7Ci0KLSAgICAv
LyBGSVhNRTogSWRlbnRpZnkgaW1hZ2UgdHlwZSwgYW5kIGRldGVybWluZSBwcm9wZXIgcmVwZXRp
dGlvbiBjb3VudC4KLSAgICByZXR1cm4gUmVwZXRpdGlvbkNvdW50Tm9uZTsKLX0KLQotc3RkOjpv
cHRpb25hbDxJbnRQb2ludD4gSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmhvdFNwb3QoKSBjb25zdAot
ewotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0KLUludFNpemUgSW1hZ2VEZWNvZGVyRGly
ZWN0MkQ6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1
YnNhbXBsaW5nTGV2ZWwpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX25hdGl2ZURlY29kZXIpCi0gICAg
ICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2Rl
PiBmcmFtZTsKLSAgICBIUkVTVUxUIGhyID0gbV9uYXRpdmVEZWNvZGVyLT5HZXRGcmFtZShpbmRl
eCwgJmZyYW1lKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBJbnRT
aXplKCk7Ci0KLSAgICBVSU5UIHdpZHRoLCBoZWlnaHQ7Ci0gICAgaHIgPSBmcmFtZS0+R2V0U2l6
ZSgmd2lkdGgsICZoZWlnaHQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0
dXJuIEludFNpemUoKTsKLQotICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwotfQot
Ci1ib29sIEltYWdlRGVjb2RlckRpcmVjdDJEOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVf
dCBpbmRleCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgQ09NUHRyPElXSUNCaXRtYXBGcmFtZURlY29kZT4gZnJhbWU7Ci0g
ICAgSFJFU1VMVCBociA9IG1fbmF0aXZlRGVjb2Rlci0+R2V0RnJhbWUoaW5kZXgsICZmcmFtZSk7
Ci0gICAgcmV0dXJuIFNVQ0NFRURFRChocik7Ci19Ci1JbWFnZURlY29kZXI6OkZyYW1lTWV0YWRh
dGEgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmZyYW1lTWV0YWRhdGFBdEluZGV4KHNpemVfdCkgY29u
c3QgZmluYWw7Ci17Ci0gICAgaWYgKCFtX25hdGl2ZURlY29kZXIpCi0gICAgICAgIHJldHVybiB7
IH07Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2RlPiBmcmFtZTsKLSAgICBIUkVT
VUxUIGhyID0gbV9uYXRpdmVEZWNvZGVyLT5HZXRGcmFtZShpbmRleCwgJmZyYW1lKTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBDT01QdHI8SVdJ
Q01ldGFkYXRhUXVlcnlSZWFkZXI+IG1ldGFkYXRhOwotICAgIGhyID0gZnJhbWUtPkdldE1ldGFk
YXRhUXVlcnlSZWFkZXIoJm1ldGFkYXRhKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgIHJldHVybiB7IH07Ci0KLSAgICBQUk9QVkFSSUFOVCB2YWx1ZTsKLSAgICBQcm9wVmFyaWFu
dEluaXQoJnZhbHVlKTsKLSAgICBociA9IG1ldGFkYXRhLT5HZXRNZXRhZGF0YUJ5TmFtZShMIlN5
c3RlbS5QaG90by5PcmllbnRhdGlvbiIsICZ2YWx1ZSk7Ci0gICAgaWYgKFNVQ0NFRURFRChocikp
Ci0gICAgICAgIHJldHVybiB7IEltYWdlT3JpZW50YXRpb24oc3RhdGljX2Nhc3Q8SW1hZ2VPcmll
bnRhdGlvbjo6T3JpZW50YXRpb24+KHZhbHVlLnVpVmFsKSksIHN0ZDo6bnVsbG9wdCB9OwotCi0g
ICAgcmV0dXJuIHsgfTsKLX0KLQotU2Vjb25kcyBJbWFnZURlY29kZXJEaXJlY3QyRDo6ZnJhbWVE
dXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAotewotICAgIGlmICghbV9uYXRpdmVE
ZWNvZGVyKQotICAgICAgICByZXR1cm4gU2Vjb25kcygwKTsKLQotICAgIENPTVB0cjxJV0lDQml0
bWFwRnJhbWVEZWNvZGU+IGZyYW1lOwotICAgIEhSRVNVTFQgaHIgPSBtX25hdGl2ZURlY29kZXIt
PkdldEZyYW1lKGluZGV4LCAmZnJhbWUpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgcmV0dXJuIFNlY29uZHMoMCk7Ci0KLSAgICAvLyBGSVhNRTogRmlndXJlIG91dCBjb3JyZWN0
IGltYWdlIGZvcm1hdC1zcGVjaWZpYyBxdWVyeSBmb3IgZnJhbWUgZHVyYXRpb24gY2hlY2suCi0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU2Vjb25kcygwKTsKLX0KLQotYm9vbCBJ
bWFnZURlY29kZXJEaXJlY3QyRDo6ZnJhbWVBbGxvd1N1YnNhbXBsaW5nQXRJbmRleChzaXplX3Qg
aW5kZXgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW1hZ2VEZWNvZGVy
RGlyZWN0MkQ6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ09N
UHRyPElXSUNCaXRtYXBGcmFtZURlY29kZT4gZnJhbWU7Ci0gICAgSFJFU1VMVCBociA9IG1fbmF0
aXZlRGVjb2Rlci0+R2V0RnJhbWUoaW5kZXgsICZmcmFtZSk7Ci0gICAgaWYgKCFTVUNDRUVERUQo
aHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDT01QdHI8SVdJQ01ldGFkYXRhUXVl
cnlSZWFkZXI+IG1ldGFkYXRhOwotICAgIGhyID0gZnJhbWUtPkdldE1ldGFkYXRhUXVlcnlSZWFk
ZXIoJm1ldGFkYXRhKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEdVSUQgY29udGFpbmVyRm9ybWF0OwotICAgIGhyID0gbWV0YWRhdGEtPkdl
dENvbnRhaW5lckZvcm1hdCgmY29udGFpbmVyRm9ybWF0KTsKLSAgICBpZiAoIVNVQ0NFRURFRCho
cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICg6OklzRXF1YWxHVUlEKEdVSURf
Q29udGFpbmVyRm9ybWF0SnBlZywgY29udGFpbmVyRm9ybWF0KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXVuc2lnbmVkIEltYWdlRGVjb2RlckRpcmVj
dDJEOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vi
c2FtcGxpbmdMZXZlbCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRleChpbmRleCwgc3Vic2Ft
cGxpbmdMZXZlbCkuYXJlYSgpICogNDsKLX0KLQotdm9pZCBJbWFnZURlY29kZXJEaXJlY3QyRDo6
c2V0VGFyZ2V0Q29udGV4dChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQotewotICAg
IG1fcmVuZGVyVGFyZ2V0ID0gcmVuZGVyVGFyZ2V0OwotfQotCi1QbGF0Zm9ybUltYWdlUHRyIElt
YWdlRGVjb2RlckRpcmVjdDJEOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgs
IFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgY29uc3QgRGVjb2RpbmdPcHRpb25z
JikKLXsKLSAgICBpZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBpZiAoIW1fcmVuZGVyVGFyZ2V0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIENPTVB0cjxJV0lDQml0bWFwRnJhbWVEZWNvZGU+IGZyYW1lOwotICAgIEhSRVNVTFQgaHIg
PSBtX25hdGl2ZURlY29kZXItPkdldEZyYW1lKDAsICZmcmFtZSk7Ci0gICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJV0lDRm9ybWF0
Q29udmVydGVyPiBjb252ZXJ0ZXI7Ci0gICAgaHIgPSBzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpLT5D
cmVhdGVGb3JtYXRDb252ZXJ0ZXIoJmNvbnZlcnRlcik7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGhyID0gY29udmVydGVyLT5Jbml0aWFs
aXplKGZyYW1lLmdldCgpLCBHVUlEX1dJQ1BpeGVsRm9ybWF0MzJicHBQUkdCQSwgV0lDQml0bWFw
RGl0aGVyVHlwZU5vbmUsIG51bGxwdHIsIDAuZiwgV0lDQml0bWFwUGFsZXR0ZVR5cGVDdXN0b20p
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBDT01QdHI8SVdJQ0JpdG1hcD4gd2ljQml0bWFwOwotICAgIGhyID0gc3lzdGVtSW1hZ2luZ0Zh
Y3RvcnkoKS0+Q3JlYXRlQml0bWFwRnJvbVNvdXJjZShjb252ZXJ0ZXIuZ2V0KCksIFdJQ0JpdG1h
cENhY2hlT25EZW1hbmQsICZ3aWNCaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsK
LSAgICBociA9IG1fcmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXBGcm9tV2ljQml0bWFwKHdpY0Jp
dG1hcC5nZXQoKSwgJmJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBiaXRtYXA7Ci19Ci0KLXZvaWQgSW1hZ2VEZWNv
ZGVyRGlyZWN0MkQ6OnNldERhdGEoY29uc3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciYgZGF0YSwg
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAgaWYgKCFhbGxEYXRhUmVjZWl2ZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV0lDU3RyZWFtPiBzdHJlYW07Ci0gICAgSFJFU1VM
VCBociA9IHN5c3RlbUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZVN0cmVhbSgmc3RyZWFtKTsKLSAg
ICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZjxTaGFyZWRC
dWZmZXI+IGJ1ZmZlciA9IGRhdGEubWFrZUNvbnRpZ3VvdXMoKTsKLSAgICBjaGFyKiBkYXRhUHRy
ID0gY29uc3RfY2FzdDxjaGFyKj4oYnVmZmVyLT5kYXRhKCkpOwotICAgIGhyID0gc3RyZWFtLT5J
bml0aWFsaXplRnJvbU1lbW9yeShyZWludGVycHJldF9jYXN0PEJZVEUqPihkYXRhUHRyKSwgZGF0
YS5zaXplKCkpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9uYXRpdmVEZWNvZGVyID0gbnVsbHB0cjsKLQotICAgIGhyID0gc3lzdGVtSW1hZ2luZ0Zh
Y3RvcnkoKS0+Q3JlYXRlRGVjb2RlckZyb21TdHJlYW0oc3RyZWFtLmdldCgpLCBudWxscHRyLCBX
SUNEZWNvZGVNZXRhZGF0YUNhY2hlT25EZW1hbmQsICZtX25hdGl2ZURlY29kZXIpOwotICAgIGlm
ICghU1VDQ0VFREVEKGhyKSkgewotICAgICAgICBtX25hdGl2ZURlY29kZXIgPSBudWxscHRyOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSW1hZ2Ugd2FzIHZhbGlkLgotfQotCi19
Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlRGVjb2RlckRpcmVjdDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgJKHJldmlzaW9uIDI4NzgxMikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJl
Y3QyRC5oCShub25leGlzdGVudCkKQEAgLTEsOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0Uo
RElSRUNUMkQpCi0KLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXIu
aCIKLQotaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNlIElXSUNCaXRtYXBE
ZWNvZGVyOwotaW50ZXJmYWNlIElXSUNJbWFnaW5nRmFjdG9yeTI7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgSW1hZ2VEZWNvZGVyRGlyZWN0MkQgZmluYWwgOiBwdWJsaWMgSW1hZ2VE
ZWNvZGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBJbWFn
ZURlY29kZXJEaXJlY3QyRCgpOwotCi0gICAgc3RhdGljIFJlZjxJbWFnZURlY29kZXJEaXJlY3Qy
RD4gY3JlYXRlKEZyYWdtZW50ZWRTaGFyZWRCdWZmZXImLCBBbHBoYU9wdGlvbiwgR2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb24pCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJ
bWFnZURlY29kZXJEaXJlY3QyRCgpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0
c01lZGlhVHlwZShNZWRpYVR5cGUgdHlwZSkgeyByZXR1cm4gdHlwZSA9PSBNZWRpYVR5cGU6Oklt
YWdlOyB9Ci0KLSAgICBzaXplX3QgYnl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkg
Y29uc3QgZmluYWw7Ci0KLSAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCBmaW5h
bDsKLSAgICBFbmNvZGVkRGF0YVN0YXR1cyBlbmNvZGVkRGF0YVN0YXR1cygpIGNvbnN0IGZpbmFs
OwotICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3QgZmluYWw7Ci0KLSAgICAvLyBBbHdh
eXMgb3JpZ2luYWwgc2l6ZSwgd2l0aG91dCBzdWJzYW1wbGluZy4KLSAgICBJbnRTaXplIHNpemUo
KSBjb25zdCBmaW5hbDsKLSAgICBzaXplX3QgZnJhbWVDb3VudCgpIGNvbnN0IGZpbmFsOwotCi0g
ICAgUmVwZXRpdGlvbkNvdW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0IGZpbmFsOwotICAgIHN0
ZDo6b3B0aW9uYWw8SW50UG9pbnQ+IGhvdFNwb3QoKSBjb25zdCBmaW5hbDsKLQotICAgIEludFNp
emUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGlu
Z0xldmVsOjpEZWZhdWx0KSBjb25zdCBmaW5hbDsKLSAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0
SW5kZXgoc2l6ZV90KSBjb25zdCBmaW5hbDsKLSAgICBJbWFnZURlY29kZXI6OkZyYW1lTWV0YWRh
dGEgZnJhbWVNZXRhZGF0YUF0SW5kZXgoc2l6ZV90KSBjb25zdCBmaW5hbDsKLQotICAgIFNlY29u
ZHMgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KSBjb25zdCBmaW5hbDsKLSAgICBib29sIGZy
YW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBmcmFtZUFs
bG93U3Vic2FtcGxpbmdBdEluZGV4KHNpemVfdCkgY29uc3QgZmluYWw7Ci0gICAgdW5zaWduZWQg
ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdM
ZXZlbDo6RGVmYXVsdCkgY29uc3QgZmluYWw7Ci0KLSAgICBQbGF0Zm9ybUltYWdlUHRyIGNyZWF0
ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5n
TGV2ZWw6OkRlZmF1bHQsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYgPSBEZWNvZGluZ09wdGlvbnMo
RGVjb2RpbmdNb2RlOjpTeW5jaHJvbm91cykpIGZpbmFsOwotCi0gICAgdm9pZCBzZXREYXRhKGNv
bnN0IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXImLCBib29sIGFsbERhdGFSZWNlaXZlZCkgZmluYWw7
Ci0gICAgYm9vbCBpc0FsbERhdGFSZWNlaXZlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faXNB
bGxEYXRhUmVjZWl2ZWQ7IH0KLSAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3Qp
IGZpbmFsIHsgfQotCi0gICAgdm9pZCBzZXRUYXJnZXRDb250ZXh0KElEMkQxUmVuZGVyVGFyZ2V0
Kik7Ci0KLSAgICBzdGF0aWMgSVdJQ0ltYWdpbmdGYWN0b3J5Miogc3lzdGVtSW1hZ2luZ0ZhY3Rv
cnkoKTsKLQotcHJpdmF0ZToKLSAgICBib29sIG1faXNBbGxEYXRhUmVjZWl2ZWQgeyBmYWxzZSB9
OwotICAgIG11dGFibGUgSW50U2l6ZSBtX3NpemU7Ci0gICAgQ09NUHRyPElXSUNCaXRtYXBEZWNv
ZGVyPiBtX25hdGl2ZURlY29kZXI7Ci0gICAgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBtX3Jl
bmRlclRhcmdldDsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGlyZWN0MkQuY3BwCShyZXZpc2lv
biAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VE
aXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LTIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkltYWdlLmgiCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1
ZGUgIkJpdG1hcEluZm8uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRl
IDxkMmQxLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1SZWZQdHI8Qml0bWFwSW1hZ2U+IEJpdG1hcEltYWdlOjpjcmVhdGUoSEJJVE1BUCBoQml0
bWFwKQotewotICAgIERJQlNFQ1RJT04gZGliU2VjdGlvbjsKLSAgICBpZiAoIUdldE9iamVjdCho
Qml0bWFwLCBzaXplb2YoRElCU0VDVElPTiksICZkaWJTZWN0aW9uKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBBU1NFUlQoZGliU2VjdGlvbi5kc0JtLmJtQml0c1BpeGVsID09IDMy
KTsKLSAgICBpZiAoZGliU2VjdGlvbi5kc0JtLmJtQml0c1BpeGVsICE9IDMyKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIEFTU0VSVChkaWJTZWN0aW9uLmRzQm0uYm1CaXRzKTsKLSAg
ICBpZiAoIWRpYlNlY3Rpb24uZHNCbS5ibUJpdHMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29s
IEJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKEhCSVRNQVAgYm1wLCBjb25zdCBJbnRTaXpl
KiBzaXplKQotewotICAgIEFTU0VSVChibXApOwotCi0gICAgQklUTUFQIGJtcEluZm87Ci0gICAg
R2V0T2JqZWN0KGJtcCwgc2l6ZW9mKEJJVE1BUCksICZibXBJbmZvKTsKLQotICAgIEFTU0VSVChi
bXBJbmZvLmJtQml0c1BpeGVsID09IDMyKTsKLSAgICBpbnQgYnVmZmVyU2l6ZSA9IGJtcEluZm8u
Ym1XaWR0aEJ5dGVzICogYm1wSW5mby5ibUhlaWdodDsKLSAgICAKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFt
ZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3ApCi17Ci0gICAgc2l6ZV90IGZyYW1lcyA9IGZyYW1lQ291bnQoKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGZyYW1lczsgKytpKSB7Ci0gICAgICAgIGF1dG8gaW1hZ2UgPSBm
cmFtZUltYWdlQXRJbmRleChpKS5nZXQoKTsKLSAgICAgICAgYXV0byBpbWFnZVNpemUgPSBuYXRp
dmVJbWFnZVNpemUoaW1hZ2UpOwotICAgICAgICBpZiAoaW1hZ2UgJiYgY2xhbXBUbzxpbnQ+KGlt
YWdlU2l6ZS5oZWlnaHQoKSkgPT0gc3RhdGljX2Nhc3Q8aW50PihzcmNTaXplLmhlaWdodCgpKSAm
JiBjbGFtcFRvPGludD4oaW1hZ2VTaXplLndpZHRoKCkpID09IHN0YXRpY19jYXN0PGludD4oc3Jj
U2l6ZS53aWR0aCgpKSkgewotICAgICAgICAgICAgc2l6ZV90IGN1cnJlbnRGcmFtZSA9IG1fY3Vy
cmVudEZyYW1lOwotICAgICAgICAgICAgbV9jdXJyZW50RnJhbWUgPSBpOwotICAgICAgICAgICAg
ZHJhdyhjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgc3JjU2l6ZS53aWR0aCgp
LCBzcmNTaXplLmhlaWdodCgpKSwgeyBjb21wb3NpdGVPcCB9KTsKLSAgICAgICAgICAgIG1fY3Vy
cmVudEZyYW1lID0gY3VycmVudEZyYW1lOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gTm8gaW1hZ2Ugb2YgdGhlIGNvcnJlY3Qgc2l6ZSB3YXMgZm91bmQs
IGZhbGxiYWNrIHRvIGRyYXdpbmcgdGhlIGN1cnJlbnQgZnJhbWUKLSAgICBGbG9hdFNpemUgaW1h
Z2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKLSAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZs
b2F0UmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgp
KSwgeyBjb21wb3NpdGVPcCB9KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9O
YXRpdmVJbWFnZURpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwCShub25leGlz
dGVudCkKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmF0aXZlSW1hZ2Uu
aCIKLQotI2luY2x1ZGUgIkRpcmVjdDJET3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkdlb21ldHJ5
VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3aW5j
b2RlYy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBJV0lDSW1hZ2luZ0ZhY3Rv
cnkqIGltYWdpbmdGYWN0b3J5KCkKLXsKLSAgICBzdGF0aWMgSVdJQ0ltYWdpbmdGYWN0b3J5KiBp
bWFnaW5nRmFjdG9yeSA9IG51bGxwdHI7Ci0gICAgaWYgKCFpbWFnaW5nRmFjdG9yeSkgewotICAg
ICAgICBIUkVTVUxUIGhyID0gQ29DcmVhdGVJbnN0YW5jZShDTFNJRF9XSUNJbWFnaW5nRmFjdG9y
eSwgbnVsbHB0ciwgQ0xTQ1RYX0lOUFJPQ19TRVJWRVIsIElJRF9QUFZfQVJHUygmaW1hZ2luZ0Zh
Y3RvcnkpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGltYWdpbmdGYWN0b3J5OwotfQotCi1JbnRTaXplIE5hdGl2ZUltYWdlOjpz
aXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUltYWdlLT5HZXRQaXhlbFNpemUo
KTsKLX0KLQotYm9vbCBOYXRpdmVJbWFnZTo6aGFzQWxwaGEoKSBjb25zdAotewotICAgIEQyRDFf
UElYRUxfRk9STUFUIHBpeGVsRm9ybWF0ID0gbV9wbGF0Zm9ybUltYWdlLT5HZXRQaXhlbEZvcm1h
dCgpOwotICAgIHJldHVybiBwaXhlbEZvcm1hdC5hbHBoYU1vZGUgIT0gRDJEMV9BTFBIQV9NT0RF
X0lHTk9SRTsKLX0KLQotQ29sb3IgTmF0aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigp
IGNvbnN0Ci17Ci0gICAgaWYgKHNpemUoKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1
cm4gQ29sb3IoKTsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIENvbG9yKCk7
Ci19Ci0KLURlc3RpbmF0aW9uQ29sb3JTcGFjZSBOYXRpdmVJbWFnZTo6Y29sb3JTcGFjZSgpIGNv
bnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCk7Ci19Ci0KLXZvaWQgTmF0aXZlSW1hZ2U6OmNsZWFyU3ViaW1hZ2VzKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAkocmV2aXNp
b24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhE
aXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw2NjcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5o
IgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBJRDJEMVJlbmRl
clRhcmdldCogc2NyYXRjaFJlbmRlclRhcmdldCgpCi17Ci0gICAgc3RhdGljIENPTVB0cjxJRDJE
MVJlbmRlclRhcmdldD4gcmVuZGVyVGFyZ2V0ID0gYWRvcHRDT00oR3JhcGhpY3NDb250ZXh0Ojpk
ZWZhdWx0UmVuZGVyVGFyZ2V0KCkpOwotICAgIHJldHVybiByZW5kZXJUYXJnZXQuZ2V0KCk7Ci19
Ci0KLVBhdGggUGF0aDo6cG9seWdvblBhdGhGcm9tUG9pbnRzKGNvbnN0IFZlY3RvcjxGbG9hdFBv
aW50PiYgcG9pbnRzKQotewotICAgIFBhdGggcGF0aDsKLSAgICBpZiAocG9pbnRzLnNpemUoKSA8
IDIpCi0gICAgICAgIHJldHVybiBwYXRoOwotCi0gICAgVmVjdG9yPEQyRDFfUE9JTlRfMkYsIDMy
PiBkMmRQb2ludHM7Ci0gICAgZDJkUG9pbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocG9pbnRz
LnNpemUoKSAtIDEpOwotICAgIGZvciAoYXV0byBwb2ludCA6IHBvaW50cykKLSAgICAgICAgZDJk
UG9pbnRzLnVuY2hlY2tlZEFwcGVuZChwb2ludCk7Ci0KLSAgICBwYXRoLm1vdmVUbyhwb2ludHMu
Zmlyc3QoKSk7Ci0KLSAgICBBU1NFUlQocGF0aC5tX2FjdGl2ZVBhdGgpOwotCi0gICAgcGF0aC5t
X2FjdGl2ZVBhdGgtPkFkZExpbmVzKGQyZFBvaW50cy5kYXRhKCksIGQyZFBvaW50cy5zaXplKCkp
OwotICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7Ci0KLSAgICByZXR1cm4gcGF0aDsKLX0KLQotUGF0
aDo6UGF0aCgpID0gZGVmYXVsdDsKLQotUGF0aDo6flBhdGgoKQotewotICAgIGNsZWFyR2VvbWV0
cmllcygpOwotfQotCi1QbGF0Zm9ybVBhdGhQdHIgUGF0aDo6ZW5zdXJlUGxhdGZvcm1QYXRoKCkK
LXsKLSAgICBpZiAoIW1fcGF0aCkgewotICAgICAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250
ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUdlb21ldHJ5R3JvdXAoRDJEMV9GSUxMX01PREVf
V0lORElORywgbnVsbHB0ciwgMCwgJm1fcGF0aCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQo
aHIpKTsKLSAgICAgICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgQVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkgPT0gMSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG1fcGF0aC5nZXQoKTsKLX0KLQotdm9pZCBQYXRoOjpjbGVhckdlb21ldHJp
ZXMoKQotewotICAgIC8vIE1hbnVhbGx5IGNsZWFuIHRoZXNlIHVwIHNvIHRoYXQgd2UgY2FuIHVz
ZSB0aGlzIHZlY3RvciB3aXRoIERpcmVjdDJEIEFQSXMuCi0gICAgZm9yIChhdXRvKiBnZW9tZXRy
eSA6IG1fZ2VvbWV0cmllcykKLSAgICAgICAgZ2VvbWV0cnktPlJlbGVhc2UoKTsKLSAgICBtX2dl
b21ldHJpZXMuY2xlYXIoKTsKLX0KLQotdm9pZCBQYXRoOjphcHBlbmRHZW9tZXRyeShJRDJEMUdl
b21ldHJ5KiBnZW9tZXRyeSkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHVuc2lnbmVkIGJl
Zm9yZSA9IHJlZkNvdW50KGdlb21ldHJ5KTsKLSNlbmRpZgotCi0gICAgdW5zaWduZWQgZ2VvbWV0
cnlDb3VudCA9IG1fcGF0aCA/IG1fcGF0aC0+R2V0U291cmNlR2VvbWV0cnlDb3VudCgpIDogMDsK
LQotICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2VvbWV0cmllcy5zaXplKCkgPT0gZ2VvbWV0cnlDb3Vu
dCk7Ci0KLSAgICBnZW9tZXRyeS0+QWRkUmVmKCk7Ci0gICAgbV9nZW9tZXRyaWVzLmFwcGVuZChn
ZW9tZXRyeSk7Ci0KLSAgICBhdXRvIGZpbGxNb2RlID0gbV9wYXRoID8gbV9wYXRoLT5HZXRGaWxs
TW9kZSgpIDogRDJEMV9GSUxMX01PREVfV0lORElORzsKLQotICAgIG1fcGF0aCA9IG51bGxwdHI7
Ci0KLSAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNy
ZWF0ZUdlb21ldHJ5R3JvdXAoZmlsbE1vZGUsIG1fZ2VvbWV0cmllcy5kYXRhKCksIG1fZ2VvbWV0
cmllcy5zaXplKCksICZtX3BhdGgpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OwotCi0gICAgQVNTRVJUKHJlZkNvdW50KGdlb21ldHJ5KSA9PSBiZWZvcmUgKyAxKTsKLX0KLQot
dm9pZCBQYXRoOjpjcmVhdGVHZW9tZXRyeVdpdGhGaWxsTW9kZShXaW5kUnVsZSB3ZWJraXRGaWxs
TW9kZSwgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4mIHBhdGgpIGNvbnN0Ci17Ci0gICAgUkVM
RUFTRV9BU1NFUlQobV9wYXRoKTsKLQotICAgIGF1dG8gZmlsbE1vZGUgPSAod2Via2l0RmlsbE1v
ZGUgPT0gV2luZFJ1bGU6OkV2ZW5PZGQpID8gRDJEMV9GSUxMX01PREVfQUxURVJOQVRFIDogRDJE
MV9GSUxMX01PREVfV0lORElORzsKLQotICAgIGlmIChmaWxsTW9kZSA9PSBtX3BhdGgtPkdldEZp
bGxNb2RlKCkpIHsKLSAgICAgICAgcGF0aCA9IG1fcGF0aDsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIHVuc2lnbmVkIGdlb21ldHJ5Q291bnQgPSBtX3BhdGgtPkdldFNvdXJjZUdlb21l
dHJ5Q291bnQoKTsKLQotICAgIEFTU0VSVChtX2dlb21ldHJpZXMuc2l6ZSgpID09IGdlb21ldHJ5
Q291bnQpOwotCi0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9y
eSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKGZpbGxNb2RlLCBjb25zdF9jYXN0PElEMkQxR2VvbWV0
cnkqKj4obV9nZW9tZXRyaWVzLmRhdGEoKSksIG1fZ2VvbWV0cmllcy5zaXplKCksICZwYXRoKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICBBU1NFUlQocmVmQ291bnQo
cGF0aC5nZXQoKSkgPT0gMSk7Ci19Ci0KLVBhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3RoZXIpCi17
Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB1bnNpZ25lZCBwYXRoQ291bnQgPSByZWZDb3VudChv
dGhlci5tX3BhdGguZ2V0KCkpOwotICAgIHVuc2lnbmVkIGFjdGl2ZVBhdGhDb3VudCA9IHJlZkNv
dW50KG90aGVyLm1fYWN0aXZlUGF0aC5nZXQoKSk7Ci0jZW5kaWYKLSAgICBtX3BhdGggPSBvdGhl
ci5tX3BhdGg7Ci0gICAgbV9hY3RpdmVQYXRoID0gb3RoZXIubV9hY3RpdmVQYXRoOwotICAgIG1f
Z2VvbWV0cmllcyA9IG90aGVyLm1fZ2VvbWV0cmllczsKLSAgICBmb3IgKGF1dG8qIGdlb21ldHJ5
IDogbV9nZW9tZXRyaWVzKQotICAgICAgICBnZW9tZXRyeS0+QWRkUmVmKCk7Ci0KLSAgICBBU1NF
UlQoIW1fcGF0aCB8fCByZWZDb3VudChtX3BhdGguZ2V0KCkpID09IHBhdGhDb3VudCArIDEpOwot
ICAgIEFTU0VSVCghbV9hY3RpdmVQYXRoIHx8IHJlZkNvdW50KG1fYWN0aXZlUGF0aC5nZXQoKSkg
PT0gYWN0aXZlUGF0aENvdW50ICsgMSk7Ci19Ci0gICAgCi1QYXRoOjpQYXRoKFBhdGgmJiBvdGhl
cikKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHVuc2lnbmVkIHBhdGhDb3VudCA9IHJlZkNv
dW50KG90aGVyLm1fcGF0aC5nZXQoKSk7Ci0gICAgdW5zaWduZWQgYWN0aXZlUGF0aENvdW50ID0g
cmVmQ291bnQob3RoZXIubV9hY3RpdmVQYXRoLmdldCgpKTsKLSNlbmRpZgotICAgIG1fcGF0aCA9
IFdURk1vdmUob3RoZXIubV9wYXRoKTsKLSAgICBtX2FjdGl2ZVBhdGggPSBXVEZNb3ZlKG90aGVy
Lm1fYWN0aXZlUGF0aCk7Ci0gICAgbV9nZW9tZXRyaWVzID0gV1RGTW92ZShvdGhlci5tX2dlb21l
dHJpZXMpOwotCi0gICAgQVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkgPT0gcGF0aENvdW50
KTsKLSAgICBBU1NFUlQocmVmQ291bnQobV9hY3RpdmVQYXRoLmdldCgpKSA9PSBhY3RpdmVQYXRo
Q291bnQpOwotfQotCi1QYXRoJiBQYXRoOjpvcGVyYXRvcj0oY29uc3QgUGF0aCYgb3RoZXIpCi17
Ci0gICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0jaWYgQVNT
RVJUX0VOQUJMRUQKLSAgICB1bnNpZ25lZCBwYXRoQ291bnQgPSByZWZDb3VudChvdGhlci5tX3Bh
dGguZ2V0KCkpOwotICAgIHVuc2lnbmVkIGFjdGl2ZVBhdGhDb3VudCA9IHJlZkNvdW50KG90aGVy
Lm1fYWN0aXZlUGF0aC5nZXQoKSk7Ci0jZW5kaWYKLSAgICBtX3BhdGggPSBvdGhlci5tX3BhdGg7
Ci0gICAgbV9hY3RpdmVQYXRoID0gb3RoZXIubV9hY3RpdmVQYXRoOwotICAgIG1fZ2VvbWV0cmll
cyA9IG90aGVyLm1fZ2VvbWV0cmllczsKLSAgICBmb3IgKGF1dG8qIGdlb21ldHJ5IDogbV9nZW9t
ZXRyaWVzKQotICAgICAgICBnZW9tZXRyeS0+QWRkUmVmKCk7Ci0KLSAgICBBU1NFUlQoIW1fcGF0
aCB8fCByZWZDb3VudChtX3BhdGguZ2V0KCkpID09IHBhdGhDb3VudCArIDEpOwotICAgIEFTU0VS
VCghbV9hY3RpdmVQYXRoIHx8IHJlZkNvdW50KG1fYWN0aXZlUGF0aC5nZXQoKSkgPT0gYWN0aXZl
UGF0aENvdW50ICsgMSk7Ci0KLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVBhdGgmIFBhdGg6Om9w
ZXJhdG9yPShQYXRoJiYgb3RoZXIpCi17Ci0gICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAg
ICByZXR1cm4gKnRoaXM7Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHVuc2lnbmVkIHBhdGhD
b3VudCA9IHJlZkNvdW50KG90aGVyLm1fcGF0aC5nZXQoKSk7Ci0gICAgdW5zaWduZWQgYWN0aXZl
UGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9hY3RpdmVQYXRoLmdldCgpKTsKLSNlbmRpZgot
ICAgIG1fcGF0aCA9IFdURk1vdmUob3RoZXIubV9wYXRoKTsKLSAgICBtX2FjdGl2ZVBhdGggPSBX
VEZNb3ZlKG90aGVyLm1fYWN0aXZlUGF0aCk7Ci0gICAgbV9nZW9tZXRyaWVzID0gV1RGTW92ZShv
dGhlci5tX2dlb21ldHJpZXMpOwotCi0gICAgQVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkg
PT0gcGF0aENvdW50KTsKLSAgICBBU1NFUlQocmVmQ291bnQobV9hY3RpdmVQYXRoLmdldCgpKSA9
PSBhY3RpdmVQYXRoQ291bnQpOwotCi0gICAgcmV0dXJuICp0aGlzOwotfQotCi1ib29sIFBhdGg6
OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAot
ewotICAgIGlmIChpc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFm
YXN0Qm91bmRpbmdSZWN0KCkuY29udGFpbnMocG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBCT09MIGNvbnRhaW5zOwotICAgIGlmICghU1VDQ0VFREVEKG1fcGF0aC0+RmlsbENv
bnRhaW5zUG9pbnQocG9pbnQsIG51bGxwdHIsICZjb250YWlucykpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gY29udGFpbnM7Ci19Ci0KLWJvb2wgUGF0aDo6c3Ryb2tlQ29u
dGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhp
Y3NDb250ZXh0Jik+JiBzdHJva2VTdHlsZUFwcGxpZXIpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHN0
cm9rZVN0eWxlQXBwbGllcik7Ci0KLSAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hDb250ZXh0RDJEKHNj
cmF0Y2hSZW5kZXJUYXJnZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQgc2NyYXRj
aENvbnRleHQoJnNjcmF0Y2hDb250ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRl
cmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwotICAgIHN0cm9rZVN0eWxlQXBwbGllcihzY3Jh
dGNoQ29udGV4dCk7Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHVuc2lnbmVkIGJlZm9yZSA9
IHJlZkNvdW50KG1fcGF0aC5nZXQoKSk7Ci0jZW5kaWYKLQotICAgIEJPT0wgY29udGFpbnNQb2lu
dCA9IGZhbHNlOwotICAgIEhSRVNVTFQgaHIgPSBtX3BhdGgtPlN0cm9rZUNvbnRhaW5zUG9pbnQo
cG9pbnQsIHNjcmF0Y2hDb250ZXh0LnN0cm9rZVRoaWNrbmVzcygpLCBzY3JhdGNoQ29udGV4dC5w
bGF0Zm9ybVN0cm9rZVN0eWxlKCksIG51bGxwdHIsIDEuMGYsICZjb250YWluc1BvaW50KTsKLSAg
ICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VS
VChyZWZDb3VudChtX3BhdGguZ2V0KCkpID09IGJlZm9yZSk7Ci0gICAgcmV0dXJuIGNvbnRhaW5z
UG9pbnQ7Ci19Ci0KLXZvaWQgUGF0aDo6Y2xvc2VBbnlPcGVuR2VvbWV0cmllcyh1bnNpZ25lZCBm
aWd1cmVFbmRTdHlsZSkgY29uc3QKLXsKLSAgICBpZiAobV9maWd1cmVJc09wZW5lZCkgewotICAg
ICAgICBBU1NFUlQobV9hY3RpdmVQYXRoKTsKLQotICAgICAgICBhdXRvIGVuZFN0eWxlID0gc3Rh
dGljX2Nhc3Q8RDJEMV9GSUdVUkVfRU5EPihmaWd1cmVFbmRTdHlsZSk7Ci0gICAgICAgIG1fYWN0
aXZlUGF0aC0+RW5kRmlndXJlKGVuZFN0eWxlKTsKLSAgICAgICAgbV9maWd1cmVJc09wZW5lZCA9
IGZhbHNlOwotCi0gICAgICAgIEhSRVNVTFQgaHIgPSBtX2FjdGl2ZVBhdGgtPkNsb3NlKCk7Ci0g
ICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9Ci0KLSAgICBtX2FjdGl2ZVBhdGgg
PSBudWxscHRyOwotfQotCi12b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNp
emUpCi17Ci0gICAgdHJhbnNmb3JtKEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAxLCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgaWYgKHRyYW5zZm9ybS5pc0lkZW50
aXR5KCkgfHwgaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9hY3RpdmVQ
YXRoKQotICAgICAgICBjbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9PUEVO
KTsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdW5zaWduZWQgYmVmb3JlID0gcmVmQ291bnQo
bV9wYXRoLmdldCgpKTsKLSNlbmRpZgotCi0gICAgQ09NUHRyPElEMkQxVHJhbnNmb3JtZWRHZW9t
ZXRyeT4gdHJhbnNmb3JtZWRQYXRoOwotICAgIGlmICghU1VDQ0VFREVEKEdyYXBoaWNzQ29udGV4
dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVUcmFuc2Zvcm1lZEdlb21ldHJ5KG1fcGF0aC5nZXQo
KSwgdHJhbnNmb3JtLCAmdHJhbnNmb3JtZWRQYXRoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVChyZWZDb3VudChtX3BhdGguZ2V0KCkpID09IGJlZm9yZSk7Ci0gICAgQVNTRVJUKHJl
ZkNvdW50KHRyYW5zZm9ybWVkUGF0aC5nZXQoKSkgPT0gMSk7Ci0KLSAgICBhdXRvIGZpbGxNb2Rl
ID0gbV9wYXRoLT5HZXRGaWxsTW9kZSgpOwotCi0gICAgbV9wYXRoID0gbnVsbHB0cjsKLQotICAg
IGNsZWFyR2VvbWV0cmllcygpOwotCi0gICAgdHJhbnNmb3JtZWRQYXRoLT5BZGRSZWYoKTsKLSAg
ICBtX2dlb21ldHJpZXMuYXBwZW5kKHRyYW5zZm9ybWVkUGF0aC5nZXQoKSk7Ci0KLSAgICBIUkVT
VUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUdlb21ldHJ5
R3JvdXAoZmlsbE1vZGUsIG1fZ2VvbWV0cmllcy5kYXRhKCksIG1fZ2VvbWV0cmllcy5zaXplKCks
ICZtX3BhdGgpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIEFTU0VS
VChyZWZDb3VudChtX3BhdGguZ2V0KCkpID09IDEpOwotfQotCi1GbG9hdFJlY3QgUGF0aDo6Ym91
bmRpbmdSZWN0U2xvd0Nhc2UoKSBjb25zdAotewotICAgIEQyRDFfUkVDVF9GIGJvdW5kcyA9IHsg
fTsKLSAgICBpZiAoIVNVQ0NFRURFRChtX3BhdGgtPkdldEJvdW5kcyhudWxscHRyLCAmYm91bmRz
KSkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIHJldHVybiBib3VuZHM7Ci19
Ci0KLUZsb2F0UmVjdCBQYXRoOjpmYXN0Qm91bmRpbmdSZWN0U2xvd0Nhc2UoKSBjb25zdAotewot
ICAgIEQyRDFfUkVDVF9GIGJvdW5kcyA9IHsgfTsKLSAgICBpZiAoIVNVQ0NFRURFRChtX3BhdGgt
PkdldEJvdW5kcyhudWxscHRyLCAmYm91bmRzKSkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKLQotICAgIHJldHVybiBib3VuZHM7Ci19Ci0KLUZsb2F0UmVjdCBQYXRoOjpmYXN0Qm91bmRp
bmdSZWN0Rm9yU3Ryb2tlKGNvbnN0IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNv
bnRleHQpIGNvbnN0Ci17Ci0gICAgaWYgKGlzTnVsbCgpKQotICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7Ci0KLSAgICBmbG9hdCB0b2xlcmFuY2UgPSAxMDsKLQotICAgIGF1dG8qIHN0cm9rZVN0
eWxlID0gY29uc3RfY2FzdDxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCY+KHBsYXRmb3JtQ29udGV4
dCkuc3Ryb2tlU3R5bGUoKTsKLQotICAgIEQyRDFfUkVDVF9GIGJvdW5kcyA9IHsgfTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChtX3BhdGgtPkdldFdpZGVuZWRCb3VuZHMocGxhdGZvcm1Db250ZXh0LnN0
cm9rZVRoaWNrbmVzcygpLCBzdHJva2VTdHlsZSwgbnVsbHB0ciwgdG9sZXJhbmNlLCAmYm91bmRz
KSkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIHJldHVybiBib3VuZHM7Ci19
Ci0KLUZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoY29uc3QgRnVuY3Rpb248dm9p
ZChHcmFwaGljc0NvbnRleHQmKT4mIHN0cm9rZVN0eWxlQXBwbGllcikgY29uc3QKLXsKLSAgICBp
ZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEIHNjcmF0Y2hDb250ZXh0RDJEKHNjcmF0Y2hSZW5kZXJUYXJnZXQoKSk7
Ci0gICAgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHQoJnNjcmF0Y2hDb250
ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVN
ZW1vcnkpOwotCi0gICAgaWYgKHN0cm9rZVN0eWxlQXBwbGllcikKLSAgICAgICAgc3Ryb2tlU3R5
bGVBcHBsaWVyKHNjcmF0Y2hDb250ZXh0KTsKLQotICAgIHJldHVybiBmYXN0Qm91bmRpbmdSZWN0
Rm9yU3Ryb2tlKHNjcmF0Y2hDb250ZXh0RDJEKTsKLX0KLQotdm9pZCBQYXRoOjpvcGVuRmlndXJl
QXRDdXJyZW50UG9pbnRJZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKG1fZmlndXJlSXNPcGVuZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9hY3RpdmVQYXRoKSB7Ci0gICAgICAgIENP
TVB0cjxJRDJEMVBhdGhHZW9tZXRyeT4gYWN0aXZlUGF0aEdlb21ldHJ5OwotICAgICAgICBHcmFw
aGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUGF0aEdlb21ldHJ5KCZhY3RpdmVQ
YXRoR2VvbWV0cnkpOwotICAgICAgICBIUkVTVUxUIGhyID0gYWN0aXZlUGF0aEdlb21ldHJ5LT5P
cGVuKCZtX2FjdGl2ZVBhdGgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKLSAgICAgICAgYXBwZW5kR2VvbWV0cnkoYWN0aXZlUGF0aEdlb21ldHJ5LmxlYWtSZWYoKSk7
Ci0gICAgICAgIEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0KCkpID09IDEpOwotICAg
IH0KLQotICAgIG1fYWN0aXZlUGF0aC0+U2V0RmlsbE1vZGUoRDJEMV9GSUxMX01PREVfV0lORElO
Ryk7Ci0gICAgbV9hY3RpdmVQYXRoLT5CZWdpbkZpZ3VyZShjdXJyZW50UG9pbnQoKSwgRDJEMV9G
SUdVUkVfQkVHSU5fRklMTEVEKTsKLSAgICBtX2ZpZ3VyZUlzT3BlbmVkID0gdHJ1ZTsKLX0KLQot
dm9pZCBQYXRoOjptb3ZlVG9TbG93Q2FzZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLXsKLSAg
ICBpZiAobV9hY3RpdmVQYXRoKQotICAgICAgICBjbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFf
RklHVVJFX0VORF9PUEVOKTsKLQotICAgIENPTVB0cjxJRDJEMVBhdGhHZW9tZXRyeT4gYWN0aXZl
UGF0aEdlb21ldHJ5OwotICAgIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVh
dGVQYXRoR2VvbWV0cnkoJmFjdGl2ZVBhdGhHZW9tZXRyeSk7Ci0KLSAgICBpZiAoIVNVQ0NFRURF
RChhY3RpdmVQYXRoR2VvbWV0cnktPk9wZW4oJm1fYWN0aXZlUGF0aCkpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhcHBlbmRHZW9tZXRyeShhY3RpdmVQYXRoR2VvbWV0cnkubGVha1JlZigpKTsK
LQotICAgIEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0KCkpID09IDEpOwotCi0gICAg
bV9hY3RpdmVQYXRoLT5TZXRGaWxsTW9kZShEMkQxX0ZJTExfTU9ERV9XSU5ESU5HKTsKLSAgICBt
X2FjdGl2ZVBhdGgtPkJlZ2luRmlndXJlKHBvaW50LCBEMkQxX0ZJR1VSRV9CRUdJTl9GSUxMRUQp
OwotICAgIG1fZmlndXJlSXNPcGVuZWQgPSB0cnVlOwotfQotCi12b2lkIFBhdGg6OmFkZExpbmVU
b1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIG9wZW5GaWd1cmVBdEN1
cnJlbnRQb2ludElmTmVjZXNzYXJ5KCk7Ci0gICAgbV9hY3RpdmVQYXRoLT5BZGRMaW5lKHBvaW50
KTsKLX0KLQotdm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUb1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9p
bnQmIGNwLCBjb25zdCBGbG9hdFBvaW50JiBwKQotewotICAgIG9wZW5GaWd1cmVBdEN1cnJlbnRQ
b2ludElmTmVjZXNzYXJ5KCk7Ci0gICAgbV9hY3RpdmVQYXRoLT5BZGRRdWFkcmF0aWNCZXppZXIo
RDJEMTo6UXVhZHJhdGljQmV6aWVyU2VnbWVudChjcCwgcCkpOwotfQotCi12b2lkIFBhdGg6OmFk
ZEJlemllckN1cnZlVG9TbG93Q2FzZShjb25zdCBGbG9hdFBvaW50JiBjcDEsIGNvbnN0IEZsb2F0
UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYgcCkKLXsKLSAgICBvcGVuRmlndXJlQXRDdXJy
ZW50UG9pbnRJZk5lY2Vzc2FyeSgpOwotICAgIG1fYWN0aXZlUGF0aC0+QWRkQmV6aWVyKEQyRDE6
OkJlemllclNlZ21lbnQoY3AxLCBjcDIsIHApKTsKLX0KLQotdm9pZCBQYXRoOjphZGRBcmNUbyhj
b25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHJhZGl1cykK
LXsKLSAgICBGbG9hdFBvaW50IHAwID0gY3VycmVudFBvaW50KCk7Ci0KLSAgICBpZiAocDEgPT0g
cDAgfHwgcDEgPT0gcDIgfHwgV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHJhZGl1cywgMC4wZikp
Ci0gICAgICAgIHJldHVybiBhZGRMaW5lVG8ocDEpOwotCi0gICAgZmxvYXQgZGlyZWN0aW9uID0g
KHAyLngoKSAtIHAxLngoKSkgKiAocDAueSgpIC0gcDEueSgpKSArIChwMi55KCkgLSBwMS55KCkp
ICogKHAxLngoKSAtIHAwLngoKSk7Ci0gICAgaWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChk
aXJlY3Rpb24sIDAuMGYpKQotICAgICAgICByZXR1cm4gYWRkTGluZVRvKHAxKTsKLQotICAgIGF1
dG8gYTIgPSB0b0Zsb2F0UG9pbnQocDAgLSBwMSkubGVuZ3RoU3F1YXJlZCgpOwotICAgIGF1dG8g
YjIgPSB0b0Zsb2F0UG9pbnQocDEgLSBwMikubGVuZ3RoU3F1YXJlZCgpOwotICAgIGF1dG8gYzIg
PSB0b0Zsb2F0UG9pbnQocDAgLSBwMikubGVuZ3RoU3F1YXJlZCgpOwotCi0gICAgZG91YmxlIGNv
c3ggPSAoYTIgKyBiMiAtIGMyKSAvICgyLjAgKiBzdGQ6OnNxcnQoYTIgKiBiMikpOwotICAgIGRv
dWJsZSBzaW54ID0gc3RkOjpzcXJ0KDEuMCAtIGNvc3ggKiBjb3N4KTsKLSAgICBkb3VibGUgZCA9
IHJhZGl1cyAvICgoMSAtIGNvc3gpIC8gc2lueCk7Ci0KLSAgICBhdXRvIGFuID0gdG9GbG9hdFBv
aW50KHAxIC0gcDApLnNjYWxlZCgxLjAgLyBzdGQ6OnNxcnQoYTIpKTsKLSAgICBhdXRvIGJuID0g
dG9GbG9hdFBvaW50KHAxIC0gcDIpLnNjYWxlZCgxLjAgLyBzdGQ6OnNxcnQoYjIpKTsKLQotICAg
IGF1dG8gc3RhcnRQb2ludCA9IHRvRmxvYXRQb2ludChwMSAtIGFuLnNjYWxlZChkKSk7Ci0gICAg
YXV0byBwNCA9IHRvRmxvYXRQb2ludChwMSAtIGJuLnNjYWxlZChkKSk7Ci0KLSAgICBib29sIGFu
dGljbG9ja3dpc2UgPSAoZGlyZWN0aW9uIDwgMCk7Ci0gICAgYW4uc2NhbGUocmFkaXVzICogKGFu
dGljbG9ja3dpc2UgPyAxIDogLTEpKTsKLQotICAgIEZsb2F0UG9pbnQgY2VudGVyKHN0YXJ0UG9p
bnQueCgpICsgYW4ueSgpLCBzdGFydFBvaW50LnkoKSAtIGFuLngoKSk7Ci0KLSAgICBkb3VibGUg
YW5nbGUwID0gYXRhbjIoc3RhcnRQb2ludC55KCkgLSBjZW50ZXIueSgpLCBzdGFydFBvaW50Lngo
KSAtIGNlbnRlci54KCkpOwotICAgIGRvdWJsZSBhbmdsZTEgPSBhdGFuMihwNC55KCkgLSBjZW50
ZXIueSgpLCBwNC54KCkgLSBjZW50ZXIueCgpKTsKLQotICAgIG9wZW5GaWd1cmVBdEN1cnJlbnRQ
b2ludElmTmVjZXNzYXJ5KCk7Ci0gICAgYWRkTGluZVRvKHN0YXJ0UG9pbnQpOwotICAgIGFkZEFy
YyhjZW50ZXIsIHJhZGl1cywgYW5nbGUwLCBhbmdsZTEsIGFudGljbG9ja3dpc2UpOwotfQotCi1z
dGF0aWMgYm9vbCBlcXVhbFJhZGl1c1dpZHRocyhjb25zdCBGbG9hdFNpemUmIHRvcExlZnRSYWRp
dXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90
dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdodFJhZGl1cykKLXsKLSAg
ICByZXR1cm4gdG9wTGVmdFJhZGl1cy53aWR0aCgpID09IHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkK
LSAgICAgICAgJiYgdG9wUmlnaHRSYWRpdXMud2lkdGgoKSA9PSBib3R0b21MZWZ0UmFkaXVzLndp
ZHRoKCkKLSAgICAgICAgJiYgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpID09IGJvdHRvbVJpZ2h0
UmFkaXVzLndpZHRoKCk7Ci19Ci0KLXN0YXRpYyBib29sIGVxdWFsUmFkaXVzSGVpZ2h0cyhjb25z
dCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRp
dXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBi
b3R0b21SaWdodFJhZGl1cykKLXsKLSAgICByZXR1cm4gdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSA9
PSBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpCi0gICAgICAgICYmIGJvdHRvbUxlZnRSYWRpdXMu
aGVpZ2h0KCkgPT0gdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkKLSAgICAgICAgJiYgdG9wUmlnaHRS
YWRpdXMuaGVpZ2h0KCkgPT0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCk7Ci19Ci0KLXZvaWQg
UGF0aDo6cGxhdGZvcm1BZGRQYXRoRm9yUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmln
aHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRT
aXplJiBib3R0b21SaWdodFJhZGl1cykKLXsKLSAgICBib29sIGVxdWFsV2lkdGhzID0gZXF1YWxS
YWRpdXNXaWR0aHModG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRp
dXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKLSAgICBib29sIGVxdWFsSGVpZ2h0cyA9IGVxdWFsUmFk
aXVzSGVpZ2h0cyh0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1
cywgYm90dG9tUmlnaHRSYWRpdXMpOwotCi0gICAgaWYgKGVxdWFsV2lkdGhzICYmIGVxdWFsSGVp
Z2h0cykgewotICAgICAgICAvLyBFbnN1cmUgdGhhdCBDRyBjYW4gcmVuZGVyIHRoZSByb3VuZGVk
IHJlY3QuCi0gICAgICAgIGZsb2F0IHJhZGl1c1dpZHRoID0gdG9wTGVmdFJhZGl1cy53aWR0aCgp
OwotICAgICAgICBmbG9hdCByYWRpdXNIZWlnaHQgPSB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpOwot
ICAgICAgICBhdXRvIHJlY3RUb0RyYXcgPSBEMkQxOjpSZWN0RihyZWN0LngoKSwgcmVjdC55KCks
IHJlY3QubWF4WCgpLCByZWN0Lm1heFkoKSk7Ci0KLSAgICAgICAgQ09NUHRyPElEMkQxUm91bmRl
ZFJlY3RhbmdsZUdlb21ldHJ5PiByb3VuZFJlY3Q7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBHcmFw
aGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUm91bmRlZFJlY3RhbmdsZUdlb21l
dHJ5KEQyRDE6OlJvdW5kZWRSZWN0KHJlY3RUb0RyYXcsIHJhZGl1c1dpZHRoLCByYWRpdXNIZWln
aHQpLCAmcm91bmRSZWN0KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0gICAgICAgIGFwcGVuZEdlb21ldHJ5KHJvdW5kUmVjdC5nZXQoKSk7Ci0gICAgICAgIEFTU0VS
VChyZWZDb3VudChyb3VuZFJlY3QuZ2V0KCkpID09IDIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgYWRkQmV6aWVyc0ZvclJvdW5kZWRSZWN0KHJlY3QsIHRvcExlZnRSYWRpdXMsIHRv
cFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7Ci19Ci0K
LXZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKLXsKLSAgICBpZiAoaXNOdWxsKCkpIHsKLSAgICAg
ICAgbV9hY3RpdmVQYXRoID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICghbV9hY3RpdmVQYXRoKSB7Ci0gICAgICAgIEFTU0VSVCghbV9maWd1cmVJc09wZW5lZCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQy
RDFfRklHVVJFX0VORF9DTE9TRUQpOwotfQotCi1zdGF0aWMgRmxvYXRQb2ludCBhcmNTdGFydChj
b25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSkK
LXsKLSAgICBGbG9hdFBvaW50IHN0YXJ0aW5nUG9pbnQgPSBjZW50ZXI7Ci0gICAgZmxvYXQgc3Rh
cnRYID0gcmFkaXVzICogc3RkOjpjb3Moc3RhcnRBbmdsZSk7Ci0gICAgZmxvYXQgc3RhcnRZID0g
cmFkaXVzICogc3RkOjpzaW4oc3RhcnRBbmdsZSk7Ci0gICAgc3RhcnRpbmdQb2ludC5tb3ZlKHN0
YXJ0WCwgc3RhcnRZKTsKLSAgICByZXR1cm4gc3RhcnRpbmdQb2ludDsKLX0KLQotY29uc3QgZmxv
YXQgdHdvUGkgPSAyLjBmICogcGlGbG9hdDsKLQotc3RhdGljIHZvaWQgZHJhd0FyY1NlY3Rpb24o
SUQyRDFHZW9tZXRyeVNpbmsqIHNpbmssIGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQg
cmFkaXVzLCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBhbnRpY2xvY2t3
aXNlKQotewotICAgIC8vIERpcmVjdDJEIHdhbnRzIHVzIHRvIHNwZWNpZnkgdGhlIGVuZCBwb2lu
dCBvZiB0aGUgYXJjLCBub3QgdGhlIGNlbnRlci4gSXQgd2lsbCBiZSBkcmF3biBmcm9tCi0gICAg
Ly8gd2hhdGV2ZXIgdGhlIGN1cnJlbnQgcG9pbnQgaW4gdGhlICdtX2FjdGl2ZVBhdGgnIGlzLgot
ICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQgPSBjZW50ZXI7Ci0gICAgZmxvYXQgZW5kWCA9IHJhZGl1
cyAqIHN0ZDo6Y29zKGVuZEFuZ2xlKTsKLSAgICBmbG9hdCBlbmRZID0gcmFkaXVzICogc3RkOjpz
aW4oZW5kQW5nbGUpOwotICAgIGVuZFBvaW50Lm1vdmUoZW5kWCwgZW5kWSk7Ci0KLSAgICBEMkQx
X1NXRUVQX0RJUkVDVElPTiBkaXJlY3Rpb24gPSBhbnRpY2xvY2t3aXNlID8gRDJEMV9TV0VFUF9E
SVJFQ1RJT05fQ09VTlRFUl9DTE9DS1dJU0UgOiBEMkQxX1NXRUVQX0RJUkVDVElPTl9DTE9DS1dJ
U0U7Ci0gICAgc2luay0+QWRkQXJjKEQyRDE6OkFyY1NlZ21lbnQoZW5kUG9pbnQsIEQyRDE6OlNp
emVGKHJhZGl1cywgcmFkaXVzKSwgMCwgZGlyZWN0aW9uLCBEMkQxX0FSQ19TSVpFX1NNQUxMKSk7
Ci19Ci0KLXZvaWQgUGF0aDo6YWRkQXJjU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYgY2VudGVy
LCBmbG9hdCByYWRpdXMsIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IGVuZEFuZ2xlLCBib29sIGFu
dGljbG9ja3dpc2UpCi17Ci0gICAgYXV0byBhcmNTdGFydFBvaW50ID0gYXJjU3RhcnQoY2VudGVy
LCByYWRpdXMsIHN0YXJ0QW5nbGUpOwotICAgIGlmICghbV9hY3RpdmVQYXRoKQotICAgICAgICBt
b3ZlVG8oYXJjU3RhcnRQb2ludCk7Ci0gICAgZWxzZSBpZiAoIWFyZUVzc2VudGlhbGx5RXF1YWwo
Y3VycmVudFBvaW50KCksIGFyY1N0YXJ0UG9pbnQpKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcmMg
ZGVmaW5lZCBieSB0aGUgY2VudGVyIGFuZCByYWRpdXMgZG9lcyBub3QgaW50ZXJzZWN0IHRoZSBj
dXJyZW50IHBvc2l0aW9uLAotICAgICAgICAvLyB3ZSBuZWVkIHRvIGRyYXcgYSBsaW5lIGZyb20g
dGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBhcmMuCi0g
ICAgICAgIGFkZExpbmVUbyhhcmNTdGFydFBvaW50KTsKLSAgICB9Ci0KLSAgICBpZiAoV1RGOjph
cmVFc3NlbnRpYWxseUVxdWFsKHN0ZDo6YWJzKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSksIHR3b1Bp
KSkKLSAgICAgICAgcmV0dXJuIGFkZEVsbGlwc2UoRmxvYXRSZWN0KGNlbnRlci54KCkgLSByYWRp
dXMsIGNlbnRlci55KCkgLSByYWRpdXMsIDIuMCAqIHJhZGl1cywgMi4wICogcmFkaXVzKSk7Ci0K
LSAgICBpZiAoYW50aWNsb2Nrd2lzZSkgewotICAgICAgICBpZiAoZW5kQW5nbGUgPiBzdGFydEFu
Z2xlKSB7Ci0gICAgICAgICAgICBlbmRBbmdsZSAtPSB0d29QaSAqIHN0ZDo6Y2VpbCgoZW5kQW5n
bGUgLSBzdGFydEFuZ2xlKSAvIHR3b1BpKTsKLSAgICAgICAgICAgIEFTU0VSVChlbmRBbmdsZSA8
PSBzdGFydEFuZ2xlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGFy
dEFuZ2xlID4gZW5kQW5nbGUpIHsKLSAgICAgICAgICAgIHN0YXJ0QW5nbGUgLT0gdHdvUGkgKiBz
dGQ6OmNlaWwoKHN0YXJ0QW5nbGUgLSBlbmRBbmdsZSkgLyB0d29QaSk7Ci0gICAgICAgICAgICBB
U1NFUlQoc3RhcnRBbmdsZSA8PSBlbmRBbmdsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBj
b25zdCBmbG9hdCBkZWx0YSA9IGFudGljbG9ja3dpc2UgPyAtcGlPdmVyVHdvRmxvYXQgOiBwaU92
ZXJUd29GbG9hdDsKLSAgICBmbG9hdCByZW1haW5pbmdBcmNBbmdsZSA9IGVuZEFuZ2xlIC0gc3Rh
cnRBbmdsZTsKLQotICAgIHdoaWxlICgocmVtYWluaW5nQXJjQW5nbGUgPiAwICYmIHJlbWFpbmlu
Z0FyY0FuZ2xlID4gZGVsdGEpIHx8IChyZW1haW5pbmdBcmNBbmdsZSA8IDAgJiYgcmVtYWluaW5n
QXJjQW5nbGUgPCBkZWx0YSkpIHsKLSAgICAgICAgY29uc3QgZG91YmxlIGN1cnJlbnRFbmRBbmds
ZSA9IHN0YXJ0QW5nbGUgKyBkZWx0YTsKLSAgICAgICAgZHJhd0FyY1NlY3Rpb24obV9hY3RpdmVQ
YXRoLmdldCgpLCBjZW50ZXIsIHJhZGl1cywgc3RhcnRBbmdsZSwgY3VycmVudEVuZEFuZ2xlLCBh
bnRpY2xvY2t3aXNlKTsKLSAgICAgICAgc3RhcnRBbmdsZSA9IGN1cnJlbnRFbmRBbmdsZTsKLSAg
ICAgICAgcmVtYWluaW5nQXJjQW5nbGUgLT0gZGVsdGE7Ci0gICAgfQotCi0gICAgLy8gSGFuZGxl
IGFueSByZW1haW5pbmcgcGFydCBvZiB0aGUgYXJjOgotICAgIGlmIChzdGQ6OmFicyhyZW1haW5p
bmdBcmNBbmdsZSkgPiAxZS02KQotICAgICAgICBkcmF3QXJjU2VjdGlvbihtX2FjdGl2ZVBhdGgu
Z2V0KCksIGNlbnRlciwgcmFkaXVzLCBzdGFydEFuZ2xlLCBzdGFydEFuZ2xlICsgcmVtYWluaW5n
QXJjQW5nbGUsIGFudGljbG9ja3dpc2UpOwotfQotCi12b2lkIFBhdGg6OmFkZFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByKQotewotICAgIGlmICghbV9hY3RpdmVQYXRoKQotICAgICAgICBtb3ZlVG8o
ci5sb2NhdGlvbigpKTsKLQotICAgIENPTVB0cjxJRDJEMVJlY3RhbmdsZUdlb21ldHJ5PiByZWN0
YW5nbGU7Ci0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgp
LT5DcmVhdGVSZWN0YW5nbGVHZW9tZXRyeShyLCAmcmVjdGFuZ2xlKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICBhcHBlbmRHZW9tZXRyeShyZWN0YW5nbGUuZ2V0KCkp
OwotICAgIEFTU0VSVChyZWZDb3VudChyZWN0YW5nbGUuZ2V0KCkpID09IDIpOwotfQotCi12b2lk
IFBhdGg6OmFkZEVsbGlwc2UoRmxvYXRQb2ludCBwLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRp
dXNZLCBmbG9hdCByb3RhdGlvbiwgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJv
b2wgYW50aWNsb2Nrd2lzZSkKLXsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwotICAg
IHRyYW5zZm9ybS50cmFuc2xhdGUocC54KCksIHAueSgpKS5yb3RhdGUocmFkMmRlZyhyb3RhdGlv
bikpLnNjYWxlKHJhZGl1c1gsIHJhZGl1c1kpOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcikKLXsKLSAgICBpZiAo
IW1fYWN0aXZlUGF0aCkKLSAgICAgICAgbW92ZVRvKHIubG9jYXRpb24oKSk7Ci0KLSAgICBDT01Q
dHI8SUQyRDFFbGxpcHNlR2VvbWV0cnk+IGVsbGlwc2U7Ci0gICAgLy8gTm90ZTogVGhlIHJhZGlp
IG9mIHRoZSBlbGxpcHNlIGNvbnRhaW5lZCB3aXRoaW4gYSByZWN0YW5nZSBhcmUgaGFsZiB0aGUg
d2lkdGggYW5kIGhlaWdodCBvZiB0aGUgcmVjdC4KLSAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3ND
b250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUVsbGlwc2VHZW9tZXRyeShEMkQxOjpFbGxp
cHNlKHIuY2VudGVyKCksIDAuNSAqIHIud2lkdGgoKSwgMC41ICogci5oZWlnaHQoKSksICZlbGxp
cHNlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICBhcHBlbmRHZW9t
ZXRyeShlbGxpcHNlLmdldCgpKTsKLSAgICBBU1NFUlQocmVmQ291bnQoZWxsaXBzZS5nZXQoKSkg
PT0gMik7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBpZiAoIXBhdGgucGxhdGZvcm1QYXRo
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghdHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0KLXZvaWQg
UGF0aDo6Y2xlYXIoKQotewotICAgIGlmIChpc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9wYXRoID0gbnVsbHB0cjsKLSAgICBtX2FjdGl2ZVBhdGggPSBudWxscHRyOwotICAgIGNs
ZWFyR2VvbWV0cmllcygpOwotfQotCi1ib29sIFBhdGg6OmlzRW1wdHlTbG93Q2FzZSgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX3BhdGgtPkdldFNvdXJjZUdlb21ldHJ5Q291bnQoKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBBU1NFUlQobV9wYXRoLT5HZXRTb3VyY2VHZW9tZXRyeUNvdW50
KCkgPT0gbV9nZW9tZXRyaWVzLnNpemUoKSk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUZs
b2F0UG9pbnQgUGF0aDo6Y3VycmVudFBvaW50U2xvd0Nhc2UoKSBjb25zdAotewotICAgIGZsb2F0
IGxlbmd0aCA9IDA7Ci0gICAgSFJFU1VMVCBociA9IG1fcGF0aC0+Q29tcHV0ZUxlbmd0aChudWxs
cHRyLCAmbGVuZ3RoKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBG
bG9hdFBvaW50KCk7Ci0KLSAgICBEMkQxX1BPSU5UXzJGIHBvaW50ID0geyB9OwotICAgIEQyRDFf
UE9JTlRfMkYgdGFuZ2VudCA9IHsgfTsKLSAgICBociA9IG1fcGF0aC0+Q29tcHV0ZVBvaW50QXRM
ZW5ndGgobGVuZ3RoLCBudWxscHRyLCAmcG9pbnQsICZ0YW5nZW50KTsKLSAgICBpZiAoIVNVQ0NF
RURFRChocikpCi0gICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7Ci0KLSAgICByZXR1cm4gcG9p
bnQ7Ci19Ci0KLWZsb2F0IFBhdGg6Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgZmxvYXQgbGVuZ3Ro
ID0gMDsKLSAgICBIUkVTVUxUIGhyID0gbV9wYXRoLT5Db21wdXRlTGVuZ3RoKG51bGxwdHIsICZs
ZW5ndGgpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICByZXR1cm4gbGVuZ3RoOwotfQotCi12b2lkIFBhdGg6OmFwcGx5U2xvd0Nhc2UoY29uc3QgUGF0
aEFwcGxpZXJGdW5jdGlvbiYpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
Ym9vbCBQYXRoOjppc051bGwoKSBjb25zdAotewotICAgIHJldHVybiAhbV9wYXRoOwotfQotCi19
Ci0KLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJELmNwcAkocmV2aXNp
b24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRl
cm5EaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUGF0dGVybi5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUlEMkQxQml0
bWFwQnJ1c2gqIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGZsb2F0IGFscGhhLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJT
cGFjZVRyYW5zZm9ybWF0aW9uKSBjb25zdAotewotICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJu
VHJhbnNmb3JtID0gdXNlclNwYWNlVHJhbnNmb3JtYXRpb24gKiBtX3BhdHRlcm5TcGFjZVRyYW5z
Zm9ybWF0aW9uOwotICAgIGF1dG8gYml0bWFwQnJ1c2hQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFw
QnJ1c2hQcm9wZXJ0aWVzKCk7Ci0gICAgYml0bWFwQnJ1c2hQcm9wZXJ0aWVzLmV4dGVuZE1vZGVY
ID0gbV9yZXBlYXRYID8gRDJEMV9FWFRFTkRfTU9ERV9XUkFQIDogRDJEMV9FWFRFTkRfTU9ERV9D
TEFNUDsKLSAgICBiaXRtYXBCcnVzaFByb3BlcnRpZXMuZXh0ZW5kTW9kZVkgPSBtX3JlcGVhdFkg
PyBEMkQxX0VYVEVORF9NT0RFX1dSQVAgOiBEMkQxX0VYVEVORF9NT0RFX0NMQU1QOwotCi0gICAg
YXV0byBicnVzaFByb3BlcnRpZXMgPSBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKTsKLSAgICBicnVz
aFByb3BlcnRpZXMudHJhbnNmb3JtID0gcGF0dGVyblRyYW5zZm9ybTsKLSAgICBicnVzaFByb3Bl
cnRpZXMub3BhY2l0eSA9IGFscGhhOwotCi0gICAgYXV0byYgcGF0dGVybkltYWdlID0gdGlsZUlt
YWdlKCk7Ci0gICAgYXV0byBuYXRpdmVJbWFnZSA9IHBhdHRlcm5JbWFnZS5uYXRpdmVJbWFnZSgm
Y29udGV4dCk7Ci0gICAgaWYgKCFuYXRpdmVJbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBhdXRvIHBsYXRmb3JtQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQocGxhdGZvcm1Db250ZXh0KTsKLQotICAgIElEMkQxQml0bWFw
QnJ1c2gqIHBhdHRlcm5CcnVzaCA9IG51bGxwdHI7Ci0gICAgSFJFU1VMVCBociA9IHBsYXRmb3Jt
Q29udGV4dC0+cmVuZGVyVGFyZ2V0KCktPkNyZWF0ZUJpdG1hcEJydXNoKG5hdGl2ZUltYWdlLmdl
dCgpLCAmYml0bWFwQnJ1c2hQcm9wZXJ0aWVzLCAmYnJ1c2hQcm9wZXJ0aWVzLCAmcGF0dGVybkJy
dXNoKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgcmV0dXJuIHBhdHRlcm5CcnVz
aDsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNw
cAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDM5NyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJE
LmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJlY3QyRE9wZXJhdGlvbnMu
aCIKLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBFbmNhcHN1bGF0ZXMgdGhlIGFkZGl0aW9uYWwgcGFp
bnRpbmcgc3RhdGUgaW5mb3JtYXRpb24gd2Ugc3RvcmUgZm9yIGVhY2gKLS8vIHB1c2hlZCBncmFw
aGljcyBzdGF0ZS4KLWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpTdGF0ZSB7Ci1wdWJs
aWM6Ci0gICAgU3RhdGUoKSA9IGRlZmF1bHQ7Ci0KLSAgICBDT01QdHI8SUQyRDFEcmF3aW5nU3Rh
dGVCbG9jaz4gbV9kcmF3aW5nU3RhdGVCbG9jazsKLSAgICBDT01QdHI8SUQyRDFMYXllcj4gbV9h
Y3RpdmVMYXllcjsKLSAgICBWZWN0b3I8RGlyZWN0MkRMYXllclR5cGU+IG1fY2xpcHM7Ci19Owot
Ci1QbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQoSUQyRDFS
ZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCwgRnVuY3Rpb248dm9pZCgpPiYmIHByZURyYXdIYW5k
bGVyLCBGdW5jdGlvbjx2b2lkKCk+JiYgcG9zdERyYXdIYW5kbGVyKQotICAgIDogbV9yZW5kZXJU
YXJnZXQocmVuZGVyVGFyZ2V0KQotICAgICwgbV9wcmVEcmF3SGFuZGxlcihXVEZNb3ZlKHByZURy
YXdIYW5kbGVyKSkKLSAgICAsIG1fcG9zdERyYXdIYW5kbGVyKFdURk1vdmUocG9zdERyYXdIYW5k
bGVyKSkKLXsKLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKFN0YXRlKCkpOwotICAgIG1fc3RhdGUg
PSAmbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLQotICAgIG1fZGV2aWNlQ29udGV4dC5xdWVyeShtX3Jl
bmRlclRhcmdldC5nZXQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoISFtX2RldmljZUNvbnRleHQp
OwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRSZW5kZXJUYXJnZXQoSUQy
RDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsKLSAgICBtX3JlbmRlclRhcmdldCA9IHJl
bmRlclRhcmdldDsKLQotICAgIG1fZGV2aWNlQ29udGV4dC5xdWVyeShtX3JlbmRlclRhcmdldC5n
ZXQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoISFtX2RldmljZUNvbnRleHQpOwotfQotCi1JRDJE
MUxheWVyKiBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6Y2xpcExheWVyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9zdGF0ZS0+bV9hY3RpdmVMYXllci5nZXQoKTsKLX0KLQotdm9pZCBQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRDo6Y2xlYXJDbGlwcyhWZWN0b3I8RGlyZWN0MkRMYXllclR5cGU+JiBj
bGlwcykKLXsKLSAgICBmb3IgKGF1dG8gY2xpcFR5cGUgPSBjbGlwcy5yYmVnaW4oKTsgY2xpcFR5
cGUgIT0gY2xpcHMucmVuZCgpOyArK2NsaXBUeXBlKSB7Ci0gICAgICAgIGlmICgqY2xpcFR5cGUg
PT0gQXhpc0FsaWduZWRDbGlwKQotICAgICAgICAgICAgbV9yZW5kZXJUYXJnZXQtPlBvcEF4aXNB
bGlnbmVkQ2xpcCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3JlbmRlclRhcmdldC0+
UG9wTGF5ZXIoKTsKLSAgICB9Ci0KLSAgICBjbGlwcy5jbGVhcigpOwotfQotCi12b2lkIFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEOjpyZXN0b3JlKCkKLXsKLSAgICBBU1NFUlQobV9yZW5kZXJUYXJn
ZXQpOwotCi0gICAgLy8gTm8gbmVlZCB0byByZXN0b3JlIGlmIHdlIGRvbid0IGhhdmUgYSBzYXZl
ZCBlbGVtZW50IG9uIHRoZSBzdGFjay4KLSAgICBpZiAobV9zdGF0ZVN0YWNrLnNpemUoKSA9PSAx
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiByZXN0b3JlU3RhdGUgPSBtX3N0YXRlU3Rh
Y2subGFzdCgpOwotICAgIGlmIChyZXN0b3JlU3RhdGUubV9kcmF3aW5nU3RhdGVCbG9jaykgewot
ICAgICAgICBtX3JlbmRlclRhcmdldC0+UmVzdG9yZURyYXdpbmdTdGF0ZShyZXN0b3JlU3RhdGUu
bV9kcmF3aW5nU3RhdGVCbG9jay5nZXQoKSk7Ci0gICAgICAgIHJlc3RvcmVTdGF0ZS5tX2RyYXdp
bmdTdGF0ZUJsb2NrID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBjbGVhckNsaXBzKHJlc3RvcmVT
dGF0ZS5tX2NsaXBzKTsKLQotICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgQVNT
RVJUKCFtX3N0YXRlU3RhY2suaXNFbXB0eSgpKTsKLSAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFj
ay5sYXN0KCk7Ci19Ci0KLVBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjp+UGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNh
dmUoKQotewotICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpID49IDEpOyAvLyBUaGVyZSBz
aG91bGQgYWx3YXlzIGJlIG9uZSBzdGF0ZSBvbiB0aGUgc3RhY2suCi0gICAgQVNTRVJUKG1fcmVu
ZGVyVGFyZ2V0KTsKLQotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoU3RhdGUoKSk7Ci0gICAgbV9z
dGF0ZSA9ICZtX3N0YXRlU3RhY2subGFzdCgpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0OjpzeXN0
ZW1GYWN0b3J5KCktPkNyZWF0ZURyYXdpbmdTdGF0ZUJsb2NrKCZtX3N0YXRlLT5tX2RyYXdpbmdT
dGF0ZUJsb2NrKTsKLQotICAgIG1fcmVuZGVyVGFyZ2V0LT5TYXZlRHJhd2luZ1N0YXRlKG1fc3Rh
dGUtPm1fZHJhd2luZ1N0YXRlQmxvY2suZ2V0KCkpOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEOjpwdXNoUmVuZGVyQ2xpcChEaXJlY3QyRExheWVyVHlwZSBjbGlwVHlwZSkKLXsK
LSAgICBBU1NFUlQoaGFzU2F2ZWRTdGF0ZSgpKTsKLSAgICBtX3N0YXRlLT5tX2NsaXBzLmFwcGVu
ZChjbGlwVHlwZSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldEFjdGl2
ZUxheWVyKENPTVB0cjxJRDJEMUxheWVyPiYmIGxheWVyKQotewotICAgIEFTU0VSVChoYXNTYXZl
ZFN0YXRlKCkpOwotICAgIG1fc3RhdGUtPm1fYWN0aXZlTGF5ZXIgPSBsYXllcjsKLX0KLQotQ09N
UHRyPElEMkQxU29saWRDb2xvckJydXNoPiBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6YnJ1c2hX
aXRoQ29sb3IoY29uc3QgRDJEMV9DT0xPUl9GJiBjb2xvcikKLXsKLSAgICBhdXRvIGNvbG9yS2V5
ID0gY29sb3JDb252ZXJ0PFNSR0JBPHVpbnQ4X3Q+PihTUkdCQTxmbG9hdD4geyBjb2xvci5yLCBj
b2xvci5nLCBjb2xvci5iLCBjb2xvci5hIH0pOwotCi0gICAgaWYgKCFjb2xvcktleSkgewotICAg
ICAgICBpZiAoIW1femVyb0JydXNoKQotICAgICAgICAgICAgbV9yZW5kZXJUYXJnZXQtPkNyZWF0
ZVNvbGlkQ29sb3JCcnVzaChjb2xvciwgJm1femVyb0JydXNoKTsKLSAgICAgICAgcmV0dXJuIG1f
emVyb0JydXNoOwotICAgIH0KLQotICAgIGlmIChjb2xvcktleSA9PSAweEZGRkZGRkZGKSB7Ci0g
ICAgICAgIGlmICghbV93aGl0ZUJydXNoKQotICAgICAgICAgICAgbV9yZW5kZXJUYXJnZXQtPkNy
ZWF0ZVNvbGlkQ29sb3JCcnVzaChjb2xvciwgJm1fd2hpdGVCcnVzaCk7Ci0gICAgICAgIHJldHVy
biBtX3doaXRlQnJ1c2g7Ci0gICAgfQotCi0gICAgYXV0byBleGlzdGluZ0JydXNoID0gbV9zb2xp
ZENvbG9yZWRCcnVzaENhY2hlLmVuc3VyZShjb2xvcktleSwgW3RoaXMsIGNvbG9yXSB7Ci0gICAg
ICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gY29sb3JCcnVzaDsKLSAgICAgICAgbV9y
ZW5kZXJUYXJnZXQtPkNyZWF0ZVNvbGlkQ29sb3JCcnVzaChjb2xvciwgJmNvbG9yQnJ1c2gpOwot
ICAgICAgICByZXR1cm4gY29sb3JCcnVzaDsKLSAgICB9KTsKLQotICAgIHJldHVybiBleGlzdGlu
Z0JydXNoLml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RDo6cmVjb21wdXRlU3Ryb2tlU3R5bGUoKQotewotICAgIGlmICghbV9zdHJva2VTeWxlSXNEaXJ0
eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kMmRTdHJva2VTdHlsZSA9IG51bGxwdHI7Ci0K
LSAgICBEYXNoQXJyYXkgZGFzaGVzOwotICAgIGZsb2F0IHBhdHRlcm5PZmZzZXQgPSAwOwotICAg
IGF1dG8gZGFzaFN0eWxlID0gRDJEMV9EQVNIX1NUWUxFX1NPTElEOwotCi0gICAgaWYgKChtX3N0
cm9rZVN0eWxlICE9IFNvbGlkU3Ryb2tlKSAmJiAobV9zdHJva2VTdHlsZSAhPSBOb1N0cm9rZSkp
IHsKLSAgICAgICAgZGFzaFN0eWxlID0gRDJEMV9EQVNIX1NUWUxFX0NVU1RPTTsKLSAgICAgICAg
cGF0dGVybk9mZnNldCA9IG1fcGF0dGVybk9mZnNldCAvIG1fc3Ryb2tlVGhpY2tuZXNzOwotICAg
ICAgICBkYXNoZXMgPSBtX2Rhc2hlczsKLQotICAgICAgICAvLyBJbiBEaXJlY3QyRCwgZGFzaGVz
IGFuZCBkb3RzIGFyZSBkZWZpbmVkIGluIHRlcm1zIG9mIHRoZSByYXRpbyBvZiB0aGUgZGFzaCBs
ZW5ndGggdG8gdGhlIGxpbmUgdGhpY2tuZXNzLgotICAgICAgICBmb3IgKGF1dG8mIGRhc2ggOiBk
YXNoZXMpCi0gICAgICAgICAgICBkYXNoIC89IG1fc3Ryb2tlVGhpY2tuZXNzOwotICAgIH0KLQot
ICAgIGF1dG8gc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzID0gRDJEMTo6U3Ryb2tlU3R5bGVQcm9wZXJ0
aWVzKG1fbGluZUNhcCwgbV9saW5lQ2FwLCBtX2xpbmVDYXAsIG1fbGluZUpvaW4sIG1fbWl0ZXJM
aW1pdCwgZGFzaFN0eWxlLCBwYXR0ZXJuT2Zmc2V0KTsKLSAgICBHcmFwaGljc0NvbnRleHQ6OnN5
c3RlbUZhY3RvcnkoKS0+Q3JlYXRlU3Ryb2tlU3R5bGUoJnN0cm9rZVN0eWxlUHJvcGVydGllcywg
ZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSwgJm1fZDJkU3Ryb2tlU3R5bGUpOwotCi0gICAg
bV9zdHJva2VTeWxlSXNEaXJ0eSA9IGZhbHNlOwotfQotCi1JRDJEMVN0cm9rZVN0eWxlKiBQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRDo6c3Ryb2tlU3R5bGUoKQotewotICAgIHJlY29tcHV0ZVN0cm9r
ZVN0eWxlKCk7Ci0gICAgcmV0dXJuIG1fZDJkU3Ryb2tlU3R5bGUuZ2V0KCk7Ci19Ci0KLUQyRDFf
U1RST0tFX1NUWUxFX1BST1BFUlRJRVMgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnN0cm9rZVN0
eWxlUHJvcGVydGllcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEQyRDE6OlN0cm9rZVN0eWxlUHJv
cGVydGllcyhtX2xpbmVDYXAsIG1fbGluZUNhcCwgbV9saW5lQ2FwLCBtX2xpbmVKb2luLCBtX21p
dGVyTGltaXQsIEQyRDFfREFTSF9TVFlMRV9TT0xJRCwgMC4wZik7Ci19Ci0KLXZvaWQgUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQ6OnNldExpbmVDYXAoRDJEMV9DQVBfU1RZTEUgbGluZUNhcCkKLXsK
LSAgICBpZiAobV9saW5lQ2FwID09IGxpbmVDYXApCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
bGluZUNhcCA9IGxpbmVDYXA7Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0K
LXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldExpbmVKb2luKEQyRDFfTElORV9KT0lO
IGpvaW4pCi17Ci0gICAgaWYgKG1fbGluZUpvaW4gPT0gam9pbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9saW5lSm9pbiA9IGpvaW47Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7
Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFN0cm9rZVN0eWxlKFN0cm9r
ZVN0eWxlIHN0cm9rZVN0eWxlKQotewotICAgIGlmIChtX3N0cm9rZVN0eWxlID09IHN0cm9rZVN0
eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0cm9rZVN0eWxlID0gc3Ryb2tlU3R5bGU7
Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ6OnNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCi17Ci0gICAg
aWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbCh0aGlja25lc3MsIG1fc3Ryb2tlVGhpY2tuZXNz
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdHJva2VUaGlja25lc3MgPSB0aGlja25lc3M7
Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoZmxvYXQgY2FudmFzTWl0ZXJMaW1pdCkKLXsKLSAg
ICAvLyBEaXJlY3QyRCBtaXRlciBsaW1pdCBpcyBpbiB0ZXJtcyBvZiBIQUxGIHRoZSBsaW5lIHRo
aWNrbmVzcy4KLSAgICBmbG9hdCBtaXRlckxpbWl0ID0gMC41ZiAqIGNhbnZhc01pdGVyTGltaXQ7
Ci0gICAgaWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChtaXRlckxpbWl0LCBtX21pdGVyTGlt
aXQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX21pdGVyTGltaXQgPSBtaXRlckxpbWl0Owot
ICAgIG1fc3Ryb2tlU3lsZUlzRGlydHkgPSB0cnVlOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEOjpzZXREYXNoT2Zmc2V0KGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgaWYgKFdU
Rjo6YXJlRXNzZW50aWFsbHlFcXVhbChkYXNoT2Zmc2V0LCBtX2Rhc2hPZmZzZXQpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2Rhc2hPZmZzZXQgPSBkYXNoT2Zmc2V0OwotICAgIG1fc3Ryb2tl
U3lsZUlzRGlydHkgPSB0cnVlOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpz
ZXREYXNoZXMoY29uc3QgRGFzaEFycmF5JiBkYXNoZXMpCi17Ci0gICAgaWYgKG1fZGFzaGVzID09
IGRhc2hlcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXNoZXMgPSBkYXNoZXM7Ci0gICAg
bV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQ6OnNldFBhdHRlcm5XaWR0aChmbG9hdCBwYXR0ZXJuV2lkdGgpCi17Ci0gICAgaWYgKFdU
Rjo6YXJlRXNzZW50aWFsbHlFcXVhbChwYXR0ZXJuV2lkdGgsIG1fcGF0dGVybldpZHRoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9wYXR0ZXJuV2lkdGggPSBwYXR0ZXJuV2lkdGg7Ci0gICAg
bV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQ6OnNldFBhdHRlcm5PZmZzZXQoZmxvYXQgcGF0dGVybk9mZnNldCkKLXsKLSAgICBpZiAo
V1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHBhdHRlcm5PZmZzZXQsIG1fcGF0dGVybk9mZnNldCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGF0dGVybk9mZnNldCA9IHBhdHRlcm5PZmZzZXQ7
Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ6OmJlZ2luRHJhdygpCi17Ci0gICAgQVNTRVJUKG1fcmVuZGVyVGFyZ2V0KTsK
LSAgICBtX3JlbmRlclRhcmdldC0+QmVnaW5EcmF3KCk7Ci0gICAgKytiZWdpbkRyYXdDb3VudDsK
LX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6ZW5kRHJhdygpCi17Ci0gICAgQVNT
RVJUKG1fcmVuZGVyVGFyZ2V0KTsKLQotICAgIGlmIChtX3N0YXRlU3RhY2suc2l6ZSgpID4gMSkK
LSAgICAgICAgcmVzdG9yZSgpOwotCi0gICAgY2xlYXJDbGlwcyhtX3N0YXRlLT5tX2NsaXBzKTsK
LQotICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpID49IDEpOwotCi0gICAgRDJEMV9UQUcg
Zmlyc3QsIHNlY29uZDsKLSAgICBIUkVTVUxUIGhyID0gbV9yZW5kZXJUYXJnZXQtPkVuZERyYXco
JmZpcnN0LCAmc2Vjb25kKTsKLQotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgV1RG
TG9nQWx3YXlzKCJGYWlsZWQgaW4gUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmVuZERyYXc6IGhy
PSV4ZCwgZmlyc3Q9JWxkLCBzZWNvbmQ9JWxkIiwgaHIsIGZpcnN0LCBzZWNvbmQpOwotCi0gICAg
LS1iZWdpbkRyYXdDb3VudDsKLQotICAgIGNvbXBvc2l0ZUlmTmVlZGVkKCk7Ci19Ci0KLXZvaWQg
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFRhZ3MoRDJEMV9UQUcgdGFnMSwgRDJEMV9UQUcg
dGFnMikKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIG1fcmVuZGVyVGFyZ2V0LT5TZXRUYWdz
KHRhZzEsIHRhZzIpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGFnMSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRhZzIpOwotI2VuZGlmCi19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6
Om5vdGlmeVByZURyYXdPYnNlcnZlcigpCi17Ci0gICAgbV9wcmVEcmF3SGFuZGxlcigpOwotfQot
Ci12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpub3RpZnlQb3N0RHJhd09ic2VydmVyKCkK
LXsKLSAgICBtX3Bvc3REcmF3SGFuZGxlcigpOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEOjpwdXNoQ2xpcChEaXJlY3QyRExheWVyVHlwZSBjbGlwVHlwZSkKLXsKLSAgICBtX3N0
YXRlLT5tX2NsaXBzLmFwcGVuZChjbGlwVHlwZSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQ6OmNvbXBvc2l0ZUlmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fY29tcG9zaXRlU291
cmNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJn
ZXQ+IGJpdG1hcFRhcmdldChRdWVyeSwgbV9yZW5kZXJUYXJnZXQuZ2V0KCkpOwotICAgIGlmICgh
Yml0bWFwVGFyZ2V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+
IGN1cnJlbnRDYW52YXMgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwQ29weUZyb21Db250ZXh0KGJp
dG1hcFRhcmdldC5nZXQoKSk7Ci0gICAgaWYgKCFjdXJyZW50Q2FudmFzKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBDT01QdHI8SUQyRDFFZmZlY3Q+IGVmZmVjdDsKLQotICAgIGlmIChtX2NvbXBv
c2l0ZU1vZGUgIT0gRDJEMV9DT01QT1NJVEVfTU9ERV9GT1JDRV9EV09SRCkgewotICAgICAgICBt
X2RldmljZUNvbnRleHQtPkNyZWF0ZUVmZmVjdChDTFNJRF9EMkQxQ29tcG9zaXRlLCAmZWZmZWN0
KTsKLSAgICAgICAgZWZmZWN0LT5TZXRJbnB1dCgwLCBtX2NvbXBvc2l0ZVNvdXJjZS5nZXQoKSk7
Ci0gICAgICAgIGVmZmVjdC0+U2V0SW5wdXQoMSwgY3VycmVudENhbnZhcy5nZXQoKSk7Ci0gICAg
ICAgIGVmZmVjdC0+U2V0VmFsdWUoRDJEMV9DT01QT1NJVEVfUFJPUF9NT0RFLCBtX2NvbXBvc2l0
ZU1vZGUpOwotICAgIH0gZWxzZSBpZiAobV9ibGVuZE1vZGUgIT0gRDJEMV9CTEVORF9NT0RFX0ZP
UkNFX0RXT1JEKSB7Ci0gICAgICAgIG1fZGV2aWNlQ29udGV4dC0+Q3JlYXRlRWZmZWN0KENMU0lE
X0QyRDFCbGVuZCwgJmVmZmVjdCk7Ci0gICAgICAgIGVmZmVjdC0+U2V0SW5wdXQoMCwgY3VycmVu
dENhbnZhcy5nZXQoKSk7Ci0gICAgICAgIGVmZmVjdC0+U2V0SW5wdXQoMSwgbV9jb21wb3NpdGVT
b3VyY2UuZ2V0KCkpOwotICAgICAgICBlZmZlY3QtPlNldFZhbHVlKEQyRDFfQkxFTkRfUFJPUF9N
T0RFLCBtX2JsZW5kTW9kZSk7Ci0gICAgfQotCi0gICAgaWYgKGVmZmVjdCkgewotICAgICAgICBt
X2RldmljZUNvbnRleHQtPkJlZ2luRHJhdygpOwotICAgICAgICBtX2RldmljZUNvbnRleHQtPkNs
ZWFyKEQyRDE6OkNvbG9yRigwLCAwLCAwLCAwKSk7Ci0gICAgICAgIG1fZGV2aWNlQ29udGV4dC0+
RHJhd0ltYWdlKGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIG1fZGV2aWNlQ29udGV4dC0+RW5kRHJh
dygpOwotICAgIH0KLQotICAgIG1fY29tcG9zaXRlU291cmNlID0gbnVsbHB0cjsKLX0KLQotdm9p
ZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0QmxlbmRBbmRDb21wb3NpdGVNb2RlKEQyRDFf
QkxFTkRfTU9ERSBibGVuZCwgRDJEMV9DT01QT1NJVEVfTU9ERSBtb2RlKQotewotICAgIGlmICht
b2RlID09IG1fY29tcG9zaXRlTW9kZSAmJiBibGVuZCA9PSBtX2JsZW5kTW9kZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gRGlyZWN0MkQgaGFuZGxlcyBjb21wb3NpdGluZyBiYXNlZCBvbiBi
aXRtYXBzLiBJZiB3ZSBhcmUgY2hhbmdpbmcgdGhlCi0gICAgLy8gY29tcG9zaXRpbmcgbW9kZSwg
d2UgbmVlZCB0byBjYXB0dXJlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSByZW5kZXJpbmcKLSAg
ICAvLyBpbiBhIGJpdG1hcCwgcGVyZm9ybSBkcmF3aW5nIG9wZXJhdGlvbnMgdW50aWwgd2UgZmlu
aXNoLCB0aGVuIGhhbmRsZQotICAgIC8vIHRoZSBjb21wb3N0aW5nIG9mIHRoZSB0d28gbGF5ZXJz
LgotICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0KFF1ZXJ5
LCBtX3JlbmRlclRhcmdldC5nZXQoKSk7Ci0gICAgaWYgKCFiaXRtYXBUYXJnZXQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGVuZERyYXcoKTsKLQotICAgIG1fY29tcG9zaXRlTW9kZSA9IG1vZGU7
Ci0gICAgbV9ibGVuZE1vZGUgPSBibGVuZDsKLQotICAgIG1fY29tcG9zaXRlU291cmNlID0gRGly
ZWN0MkQ6OmNyZWF0ZUJpdG1hcENvcHlGcm9tQ29udGV4dChiaXRtYXBUYXJnZXQuZ2V0KCkpOwot
Ci0gICAgYmVnaW5EcmF3KCk7Ci0KLSAgICBtX2RldmljZUNvbnRleHQtPkNsZWFyKEQyRDE6OkNv
bG9yRigwLCAwLCAwLCAwKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oCShyZXZp
c2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDIxMCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQyZDFfMS5o
PgotI2luY2x1ZGUgPGQyZDFlZmZlY3RzLmg+Ci0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsK
LXN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZTsKLQotbmFtZXNwYWNlIERpcmVjdDJEIHsKLXN0
cnVjdCBGaWxsU291cmNlOwotc3RydWN0IFN0cm9rZVNvdXJjZTsKLXN0cnVjdCBTaGFkb3dTdGF0
ZTsKLX0KLQotY2xhc3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgewotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEKTsKLXB1YmxpYzoKLSAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRChJRDJEMVJlbmRl
clRhcmdldCosIEZ1bmN0aW9uPHZvaWQoKT4mJiBwcmVEcmF3SGFuZGxlciA9IFtdKCkgeyB9LCBG
dW5jdGlvbjx2b2lkKCk+JiYgcG9zdERyYXdIYW5kbGVyID0gW10oKSB7IH0pOwotICAgIH5QbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCgpOwotCi0gICAgSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRh
cmdldCgpIHsgcmV0dXJuIG1fcmVuZGVyVGFyZ2V0LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRSZW5k
ZXJUYXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKLQotICAgIElEMkQxRGV2aWNlQ29udGV4dCog
ZGV2aWNlQ29udGV4dCgpIHsgcmV0dXJuIG1fZGV2aWNlQ29udGV4dC5nZXQoKTsgfQotCi0gICAg
SUQzRDExRGV2aWNlMSogZDNkRGV2aWNlKCkgY29uc3QgeyByZXR1cm4gbV9kM2REZXZpY2UuZ2V0
KCk7IH0KLSAgICB2b2lkIHNldEQzRERldmljZShJRDNEMTFEZXZpY2UxKiBkZXZpY2UpIHsgbV9k
M2REZXZpY2UgPSBkZXZpY2U7IH0KLQotICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZSogZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpIHsgcmV0dXJuIG1fZ3JhcGhpY3NDb250ZXh0UHJp
dmF0ZTsgfQotICAgIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUqIGdyYXBoaWNzQ29udGV4dFByaXZhdGUpIHsgbV9ncmFwaGljc0Nv
bnRleHRQcml2YXRlID0gZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZTsgfQotCi0gICAgSUQyRDFMYXll
ciogY2xpcExheWVyKCkgY29uc3Q7Ci0gICAgSUQyRDFTdHJva2VTdHlsZSogc3Ryb2tlU3R5bGUo
KTsKLSAgICBEMkQxX1NUUk9LRV9TVFlMRV9QUk9QRVJUSUVTIHN0cm9rZVN0eWxlUHJvcGVydGll
cygpIGNvbnN0OwotICAgIElEMkQxU3Ryb2tlU3R5bGUqIHBsYXRmb3JtU3Ryb2tlU3R5bGUoKSBj
b25zdDsKLQotICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gYnJ1c2hXaXRoQ29sb3Io
Y29uc3QgRDJEMV9DT0xPUl9GJik7Ci0KLSAgICB2b2lkIHNhdmUoKTsKLSAgICB2b2lkIHJlc3Rv
cmUoKTsKLQotICAgIGJvb2wgaGFzU2F2ZWRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuICFtX3N0YXRl
U3RhY2suaXNFbXB0eSgpOyB9Ci0KLSAgICB2b2lkIGJlZ2luRHJhdygpOwotICAgIHZvaWQgZW5k
RHJhdygpOwotCi0gICAgZW51bSBEaXJlY3QyRExheWVyVHlwZSB7IEF4aXNBbGlnbmVkQ2xpcCwg
TGF5ZXJDbGlwIH07Ci0gICAgdm9pZCBwdXNoUmVuZGVyQ2xpcChEaXJlY3QyRExheWVyVHlwZSk7
Ci0gICAgdm9pZCBzZXRBY3RpdmVMYXllcihDT01QdHI8SUQyRDFMYXllcj4mJik7Ci0KLSAgICB2
b2lkIHJlY29tcHV0ZVN0cm9rZVN0eWxlKCk7Ci0gICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJva2VUaGlja25lc3M7IH0KLQotICAgIHN0cnVjdCBUcmFuc3Bh
cmVuY3lMYXllclN0YXRlIHsKLSAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0
PiByZW5kZXJUYXJnZXQ7Ci0gICAgICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgICAgICBGbG9h
dFNpemUgc2hhZG93T2Zmc2V0OwotICAgICAgICBmbG9hdCBvcGFjaXR5IHsgMS4wIH07Ci0gICAg
ICAgIGZsb2F0IHNoYWRvd0JsdXIgeyAwIH07Ci0gICAgICAgIGJvb2wgaGFzU2hhZG93IHsgZmFs
c2UgfTsKLSAgICB9OwotICAgIFZlY3RvcjxUcmFuc3BhcmVuY3lMYXllclN0YXRlPiBtX3RyYW5z
cGFyZW5jeUxheWVyU3RhY2s7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoRDJEMV9DQVBfU1RZTEUp
OwotICAgIHZvaWQgc2V0TGluZUpvaW4oRDJEMV9MSU5FX0pPSU4pOwotICAgIHZvaWQgc2V0U3Ry
b2tlU3R5bGUoU3Ryb2tlU3R5bGUpOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0g
ICAgdm9pZCBzZXREYXNoT2Zmc2V0KGZsb2F0KTsKLSAgICB2b2lkIHNldFBhdHRlcm5XaWR0aChm
bG9hdCk7Ci0gICAgdm9pZCBzZXRQYXR0ZXJuT2Zmc2V0KGZsb2F0KTsKLSAgICB2b2lkIHNldFN0
cm9rZVRoaWNrbmVzcyhmbG9hdCk7Ci0gICAgdm9pZCBzZXREYXNoZXMoY29uc3QgRGFzaEFycmF5
Jik7Ci0KLSAgICB2b2lkIHNldEJsZW5kQW5kQ29tcG9zaXRlTW9kZShEMkQxX0JMRU5EX01PREUs
IEQyRDFfQ09NUE9TSVRFX01PREUpOwotCi0gICAgdm9pZCBzZXRUYWdzKEQyRDFfVEFHIHRhZzEs
IEQyRDFfVEFHIHRhZzIpOwotICAgIHZvaWQgbm90aWZ5UHJlRHJhd09ic2VydmVyKCk7Ci0gICAg
dm9pZCBub3RpZnlQb3N0RHJhd09ic2VydmVyKCk7Ci0KLSAgICB2b2lkIHB1c2hDbGlwKERpcmVj
dDJETGF5ZXJUeXBlKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNsZWFyQ2xpcHMoVmVjdG9yPERp
cmVjdDJETGF5ZXJUeXBlPiYpOwotICAgIHZvaWQgY29tcG9zaXRlSWZOZWVkZWQoKTsKLQotICAg
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogbV9ncmFwaGljc0NvbnRleHRQcml2YXRl
IHsgbnVsbHB0ciB9OwotCi0gICAgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBtX3JlbmRlclRh
cmdldDsKLSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBtX2RldmljZUNvbnRleHQ7Ci0g
ICAgQ09NUHRyPElEMkQxU3Ryb2tlU3R5bGU+IG1fZDJkU3Ryb2tlU3R5bGU7Ci0KLSAgICBIYXNo
TWFwPHVpbnQzMl90LCBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+PiBtX3NvbGlkQ29sb3Jl
ZEJydXNoQ2FjaGU7Ci0gICAgQ09NUHRyPElEMkQxU29saWRDb2xvckJydXNoPiBtX3doaXRlQnJ1
c2g7Ci0gICAgQ09NUHRyPElEMkQxU29saWRDb2xvckJydXNoPiBtX3plcm9CcnVzaDsKLSAgICBD
T01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IG1fc29saWRTdHJva2VCcnVzaDsKLSAgICBDT01Q
dHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IG1fc29saWRGaWxsQnJ1c2g7Ci0gICAgQ09NUHRyPElE
MkQxQml0bWFwQnJ1c2g+IG1fcGF0dGVyblN0cm9rZUJydXNoOwotICAgIENPTVB0cjxJRDJEMUJp
dG1hcEJydXNoPiBtX3BhdHRlcm5GaWxsQnJ1c2g7Ci0KLSAgICBDT01QdHI8SUQzRDExRGV2aWNl
MT4gbV9kM2REZXZpY2U7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IG1fY29tcG9zaXRlU291
cmNlOwotCi0gICAgRnVuY3Rpb248dm9pZCgpPiBtX3ByZURyYXdIYW5kbGVyOwotICAgIEZ1bmN0
aW9uPHZvaWQoKT4gbV9wb3N0RHJhd0hhbmRsZXI7Ci0KLSAgICBjbGFzcyBTdGF0ZTsKLSAgICBT
dGF0ZSogbV9zdGF0ZSB7IG51bGxwdHIgfTsKLSAgICBWZWN0b3I8U3RhdGU+IG1fc3RhdGVTdGFj
azsKLQotICAgIEQyRDFfQ0FQX1NUWUxFIG1fbGluZUNhcCB7IEQyRDFfQ0FQX1NUWUxFX0ZMQVQg
fTsKLSAgICBEMkQxX0xJTkVfSk9JTiBtX2xpbmVKb2luIHsgRDJEMV9MSU5FX0pPSU5fTUlURVIg
fTsKLSAgICBTdHJva2VTdHlsZSBtX3N0cm9rZVN0eWxlIHsgU29saWRTdHJva2UgfTsKLSAgICBE
YXNoQXJyYXkgbV9kYXNoZXM7Ci0KLSAgICB1bnNpZ25lZCBiZWdpbkRyYXdDb3VudCB7IDAgfTsK
LQotICAgIGZsb2F0IG1fbWl0ZXJMaW1pdCB7IDEwLjBmIH07Ci0gICAgZmxvYXQgbV9kYXNoT2Zm
c2V0IHsgMCB9OwotICAgIGZsb2F0IG1fcGF0dGVybldpZHRoIHsgMS4wZiB9OwotICAgIGZsb2F0
IG1fcGF0dGVybk9mZnNldCB7IDAgfTsKLSAgICBmbG9hdCBtX3N0cm9rZVRoaWNrbmVzcyB7IDAg
fTsKLSAgICBmbG9hdCBtX2FscGhhIHsgMS4wIH07Ci0KLSAgICBib29sIG1fc3Ryb2tlU3lsZUlz
RGlydHkgeyBmYWxzZSB9OwotCi0gICAgRDJEMV9CTEVORF9NT0RFIG1fYmxlbmRNb2RlIHsgRDJE
MV9CTEVORF9NT0RFX01VTFRJUExZIH07Ci0gICAgRDJEMV9DT01QT1NJVEVfTU9ERSBtX2NvbXBv
c2l0ZU1vZGUgeyBEMkQxX0NPTVBPU0lURV9NT0RFX1NPVVJDRV9PVkVSIH07Ci0KLSAgICBmcmll
bmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU7Ci19OwotCi1jbGFzcyBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVy
IHsKLXB1YmxpYzoKLSAgICBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVyKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBjb250ZXh0LCBib29sIHNhdmVBbmRSZXN0b3JlID0gdHJ1ZSkKLSAgICAgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX3NhdmVBbmRSZXN0b3JlKHNhdmVBbmRS
ZXN0b3JlKQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCi0gICAgICAgICAg
ICBtX2NvbnRleHQuc2F2ZSgpOwotICAgIH0KLQotICAgIH5QbGF0Zm9ybUNvbnRleHRTdGF0ZVNh
dmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAg
bV9jb250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNhdmUoKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKCFtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAgbV9jb250ZXh0LnNhdmUo
KTsKLSAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBy
ZXN0b3JlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAg
ICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKLSAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IGZhbHNl
OwotICAgIH0KLQotICAgIGJvb2wgZGlkU2F2ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gbV9zYXZlQW5kUmVzdG9yZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmIG1fY29udGV4dDsKLSAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmUgeyBmYWxz
ZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVD
VDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZv
bnREYXRhRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRh
RGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsMjE4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJGb250LmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJl
Y3RXcml0ZVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZv
bnRDYWNoZS5oIgotI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkdseXBo
UGFnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhXbmREQy5o
IgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8Y29tdXRpbC5oPgotI2lu
Y2x1ZGUgPGR3cml0ZV8zLmg+Ci0jaW5jbHVkZSA8bWxhbmcuaD4KLSNpbmNsdWRlIDx1bmljb2Rl
L3VjaGFyLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91bm9ybS5oPgotI2luY2x1ZGUgPHdpbnNvY2sy
Lmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RhdGljIFZlY3RvcjxXQ0hBUj4gZ2V0RmFjZU5hbWUoSURXcml0ZUZvbnQqIGZvbnQp
Ci17Ci0gICAgaWYgKCFmb250KQotICAgICAgICByZXR1cm4gVmVjdG9yPFdDSEFSPigpOwotCi0g
ICAgQ09NUHRyPElEV3JpdGVMb2NhbGl6ZWRTdHJpbmdzPiBsb2NhbGl6ZWRGYWNlTmFtZXM7Ci0g
ICAgSFJFU1VMVCBociA9IGZvbnQtPkdldEZhY2VOYW1lcygmbG9jYWxpemVkRmFjZU5hbWVzKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIFVJTlQzMiBsb2NhbGVJ
bmRleCA9IDA7Ci0gICAgQk9PTCBleGlzdHMgPSBmYWxzZTsKLQotICAgIHdjaGFyX3QgbG9jYWxl
TmFtZVtMT0NBTEVfTkFNRV9NQVhfTEVOR1RIXTsKLSAgICBpbnQgbG9jYWxlTGVuZ3RoID0gR2V0
VXNlckRlZmF1bHRMb2NhbGVOYW1lKGxvY2FsZU5hbWUsIExPQ0FMRV9OQU1FX01BWF9MRU5HVEgp
OwotICAgIGlmIChsb2NhbGVMZW5ndGgpCi0gICAgICAgIGhyID0gbG9jYWxpemVkRmFjZU5hbWVz
LT5GaW5kTG9jYWxlTmFtZShsb2NhbGVOYW1lLCAmbG9jYWxlSW5kZXgsICZleGlzdHMpOwotCi0g
ICAgaWYgKCFleGlzdHMgfHwgIVNVQ0NFRURFRChocikpCi0gICAgICAgIGhyID0gbG9jYWxpemVk
RmFjZU5hbWVzLT5GaW5kTG9jYWxlTmFtZShMImVuLXVzIiwgJmxvY2FsZUluZGV4LCAmZXhpc3Rz
KTsKLQotICAgIGlmICghZXhpc3RzIHx8ICFTVUNDRUVERUQoaHIpKQotICAgICAgICBsb2NhbGVJ
bmRleCA9IDA7Ci0KLSAgICBVSU5UMzIgZmFjZU5hbWVMZW5ndGggPSAwOwotICAgIGhyID0gbG9j
YWxpemVkRmFjZU5hbWVzLT5HZXRTdHJpbmdMZW5ndGgobG9jYWxlSW5kZXgsICZmYWNlTmFtZUxl
bmd0aCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gVmVjdG9yPFdD
SEFSPigpOwotCi0gICAgVmVjdG9yPFdDSEFSPiBmYWNlTmFtZShmYWNlTmFtZUxlbmd0aCArIDEp
OwotICAgIGhyID0gbG9jYWxpemVkRmFjZU5hbWVzLT5HZXRTdHJpbmcobG9jYWxlSW5kZXgsIGZh
Y2VOYW1lLmRhdGEoKSwgZmFjZU5hbWUuc2l6ZSgpKTsKLQotICAgIHJldHVybiBmYWNlTmFtZTsK
LX0KLQotdm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQotewotICAgIG1fc3ludGhldGljQm9sZE9m
ZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7Ci0gICAg
bV9zY3JpcHRDYWNoZSA9IDA7Ci0gICAgbV9zY3JpcHRGb250UHJvcGVydGllcyA9IDA7Ci0KLSAg
ICBpZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpCi0gICAgICAgIHJldHVybiBpbml0R0RJRm9u
dCgpOwotCi0gICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotCi0g
ICAgYXV0byBmb250ID0gbV9wbGF0Zm9ybURhdGEuZHdGb250KCk7Ci0gICAgUkVMRUFTRV9BU1NF
UlQoZm9udCk7Ci0KLSAgICBhdXRvIGZvbnRGYWNlID0gbV9wbGF0Zm9ybURhdGEuZHdGb250RmFj
ZSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGZvbnRGYWNlKTsKLQotICAgIERXUklURV9GT05UX01F
VFJJQ1MgZm9udE1ldHJpY3M7Ci0gICAgZm9udC0+R2V0TWV0cmljcygmZm9udE1ldHJpY3MpOwot
Ci0gICAgaW50IGlBc2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQ7Ci0gICAgaW50IGlEZXNjZW50
ID0gZm9udE1ldHJpY3MuZGVzY2VudDsKLSAgICBpbnQgaUxpbmVHYXAgPSBmb250TWV0cmljcy5s
aW5lR2FwOwotICAgIGludCBpQ2FwSGVpZ2h0ID0gZm9udE1ldHJpY3MuY2FwSGVpZ2h0OwotCi0g
ICAgdW5zaWduZWQgdW5pdHNQZXJFbSA9IGZvbnRNZXRyaWNzLmRlc2lnblVuaXRzUGVyRW07Ci0g
ICAgZmxvYXQgZkFzY2VudCA9IHNjYWxlRW1Ub1VuaXRzKGlBc2NlbnQsIHVuaXRzUGVyRW0pICog
cG9pbnRTaXplOwotICAgIGZsb2F0IGZEZXNjZW50ID0gc2NhbGVFbVRvVW5pdHMoaURlc2NlbnQs
IHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgIGZsb2F0IGZDYXBIZWlnaHQgPSBzY2FsZUVt
VG9Vbml0cyhpQ2FwSGVpZ2h0LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLSAgICBmbG9hdCBm
TGluZUdhcCA9IHNjYWxlRW1Ub1VuaXRzKGlMaW5lR2FwLCB1bml0c1BlckVtKSAqIHBvaW50U2l6
ZTsKLQotICAgIGlmIChvcmlnaW4oKSA9PSBPcmlnaW46OkxvY2FsKSB7Ci0gICAgICAgIFZlY3Rv
cjxXQ0hBUj4gZmFjZU5hbWUgPSBnZXRGYWNlTmFtZShmb250KTsKLSAgICAgICAgZkFzY2VudCA9
IGFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhmYWNlTmFtZS5kYXRhKCksIGZBc2NlbnQs
IGZEZXNjZW50KTsKLSAgICB9Ci0KLSAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChmQXNjZW50
KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZkRlc2NlbnQpOwotICAgIG1fZm9udE1l
dHJpY3Muc2V0Q2FwSGVpZ2h0KGZDYXBIZWlnaHQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGlu
ZUdhcChmTGluZUdhcCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhscm91bmRm
KGZBc2NlbnQpICsgbHJvdW5kZihmRGVzY2VudCkgKyBscm91bmRmKGZMaW5lR2FwKSk7Ci0KLSAg
ICBHbHlwaCB4R2x5cGggPSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoJ3gnKS5nbHlwaDsKLQotICAg
IGlmICh4R2x5cGgpIHsKLSAgICAgICAgLy8gTWVhc3VyZSB0aGUgYWN0dWFsIGNoYXJhY3RlciAi
eCIsIHNpbmNlIGl0J3MgcG9zc2libGUgZm9yIGl0IHRvIGV4dGVuZCBiZWxvdyB0aGUgYmFzZWxp
bmUsIGFuZCB3ZSBuZWVkIHRoZQotICAgICAgICAvLyByZXBvcnRlZCB4LWhlaWdodCB0byBvbmx5
IGluY2x1ZGUgdGhlIHBvcnRpb24gb2YgdGhlIGdseXBoIHRoYXQgaXMgYWJvdmUgdGhlIGJhc2Vs
aW5lLgotICAgICAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX01FVFJJQ1M+IGdseXBoTWV0cmljcygx
KTsKLSAgICAgICAgSFJFU1VMVCBociA9IGZvbnRGYWNlLT5HZXREZXNpZ25HbHlwaE1ldHJpY3Mo
JnhHbHlwaCwgMSwgZ2x5cGhNZXRyaWNzLmRhdGEoKSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRp
b24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKTsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodChzY2Fs
ZUVtVG9Vbml0cyhnbHlwaE1ldHJpY3MuZmlyc3QoKS52ZXJ0aWNhbE9yaWdpblksIHVuaXRzUGVy
RW0pICogcG9pbnRTaXplKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpbnQgaVhIZWlnaHQgPSBm
b250TWV0cmljcy54SGVpZ2h0OwotICAgICAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoc2Nh
bGVFbVRvVW5pdHMoaVhIZWlnaHQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplKTsKLSAgICB9Ci0K
LSAgICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7Ci19Ci0KLUZsb2F0
UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewot
ICAgIGlmICghcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0
KCk7Ci0KLSAgICBpZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpCi0gICAgICAgIHJldHVybiBi
b3VuZHNGb3JHRElHbHlwaChnbHlwaCk7Ci0KLSAgICBhdXRvIGZvbnQgPSBtX3BsYXRmb3JtRGF0
YS5kd0ZvbnQoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChmb250KTsKLQotICAgIGF1dG8gZm9udEZh
Y2UgPSBtX3BsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZm9u
dEZhY2UpOwotCi0gICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwot
ICAgIGJvb2wgdmVydGljYWwgPSBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRP
cmllbnRhdGlvbjo6VmVydGljYWw7Ci0KLSAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX01FVFJJQ1M+
IGdseXBoTWV0cmljcygxKTsKLSAgICBIUkVTVUxUIGhyID0gZm9udEZhY2UtPkdldERlc2lnbkds
eXBoTWV0cmljcygmZ2x5cGgsIDEsIGdseXBoTWV0cmljcy5kYXRhKCksIG1fcGxhdGZvcm1EYXRh
Lm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBjb25zdCBhdXRvJiBtZXRyaWNzID0gZ2x5
cGhNZXRyaWNzLmZpcnN0KCk7Ci0KLSAgICB1bnNpZ25lZCB1bml0c1BlckVtID0gbV9mb250TWV0
cmljcy51bml0c1BlckVtKCk7Ci0KLSAgICBGbG9hdFBvaW50IG9yaWdpbihzY2FsZUVtVG9Vbml0
cyhtZXRyaWNzLmxlZnRTaWRlQmVhcmluZywgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUsIHNjYWxl
RW1Ub1VuaXRzKG1ldHJpY3MudmVydGljYWxPcmlnaW5ZLCB1bml0c1BlckVtKSAqIHBvaW50U2l6
ZSk7Ci0gICAgRmxvYXRTaXplIHNpemUoc2NhbGVFbVRvVW5pdHMobWV0cmljcy5hZHZhbmNlV2lk
dGggLSBtZXRyaWNzLmxlZnRTaWRlQmVhcmluZyAtIG1ldHJpY3MucmlnaHRTaWRlQmVhcmluZywg
dW5pdHNQZXJFbSkgKiBwb2ludFNpemUsCi0gICAgICAgIHNjYWxlRW1Ub1VuaXRzKG1ldHJpY3Mu
YWR2YW5jZUhlaWdodCAtIG1ldHJpY3MudG9wU2lkZUJlYXJpbmcgLSBtZXRyaWNzLmJvdHRvbVNp
ZGVCZWFyaW5nLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7Ci0KLSAgICBGbG9hdFJlY3QgYm91
bmRpbmdCb3gob3JpZ2luLCBzaXplKTsKLSAgICBpZiAobV9zeW50aGV0aWNCb2xkT2Zmc2V0KQot
ICAgICAgICBib3VuZGluZ0JveC5zZXRXaWR0aChib3VuZGluZ0JveC53aWR0aCgpICsgbV9zeW50
aGV0aWNCb2xkT2Zmc2V0KTsKLQotICAgIHJldHVybiBib3VuZGluZ0JveDsKLX0KLQotZmxvYXQg
Rm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIGlm
ICghcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICht
X3BsYXRmb3JtRGF0YS51c2VHREkoKSkKLSAgICAgICAgcmV0dXJuIHdpZHRoRm9yR0RJR2x5cGgo
Z2x5cGgpOwotCi0gICAgYXV0byBmb250ID0gbV9wbGF0Zm9ybURhdGEuZHdGb250KCk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoZm9udCk7Ci0KLSAgICBhdXRvIGZvbnRGYWNlID0gbV9wbGF0Zm9ybURh
dGEuZHdGb250RmFjZSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGZvbnRGYWNlKTsKLQotICAgIGJv
b2wgaXNWZXJ0aWNhbCA9IG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVu
dGF0aW9uOjpWZXJ0aWNhbDsKLQotICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfTUVUUklDUz4gZ2x5
cGhNZXRyaWNzKDEpOwotICAgIEhSRVNVTFQgaHIgPSBmb250RmFjZS0+R2V0RGVzaWduR2x5cGhN
ZXRyaWNzKCZnbHlwaCwgMSwgZ2x5cGhNZXRyaWNzLmRhdGEoKSwgaXNWZXJ0aWNhbCk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBjb25zdCBhdXRvJiBtZXRyaWNz
ID0gZ2x5cGhNZXRyaWNzLmZpcnN0KCk7Ci0gICAgaW50IHdpZHRoSW5FbSA9IG1ldHJpY3MuYWR2
YW5jZVdpZHRoOwotCi0gICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgp
OwotICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0gPSBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKTsK
LSAgICBmbG9hdCB3aWR0aCA9IHNjYWxlRW1Ub1VuaXRzKHdpZHRoSW5FbSwgdW5pdHNQZXJFbSkg
KiBwb2ludFNpemU7Ci0KLSAgICByZXR1cm4gd2lkdGggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7
Ci19Ci0KLVBhdGggRm9udDo6cGxhdGZvcm1QYXRoRm9yR2x5cGgoR2x5cGgpIGNvbnN0Ci17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUGF0aCgpOwotfQotCi19Ci0KLSNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXpl
ckhlbHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1RleHRBbmFseXplckhlbHBlci5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuY3BwCShu
b25leGlzdGVudCkKQEAgLTEsMTQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0
QW5hbHl6ZXJIZWxwZXIuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1UZXh0QW5hbHl6ZXJIZWxwZXI6OlRleHRBbmFseXplckhlbHBlcihjb25zdCBXQ0hB
UiogbG9jYWxlTmFtZSwgY29uc3QgV0NIQVIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
KQotICAgIDogbV9sb2NhbGVOYW1lKGxvY2FsZU5hbWUpCi0gICAgLCBtX2J1ZmZlcihidWZmZXIp
Ci0gICAgLCBtX2J1ZmZlckxlbmd0aChidWZmZXJMZW5ndGgpCi17Ci19Ci0KLUhSRVNVTFQgVGV4
dEFuYWx5emVySGVscGVyOjpRdWVyeUludGVyZmFjZShfSW5fIFJFRklJRCByaWlkLCBfQ09NX091
dHB0cl8gdm9pZCoqIHBwdk9iamVjdCkKLXsKLSAgICBpZiAoIXBwdk9iamVjdCkKLSAgICAgICAg
cmV0dXJuIEVfUE9JTlRFUjsKLSAgICAqcHB2T2JqZWN0ID0gbnVsbHB0cjsKLSAgICBpZiAoSXNF
cXVhbEdVSUQocmlpZCwgX191dWlkb2YoSURXcml0ZVRleHRBbmFseXNpc1NpbmspKSkKLSAgICAg
ICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElEV3JpdGVUZXh0QW5hbHlzaXNTaW5rKj4odGhp
cyk7Ci0gICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlkb2YoSURXcml0ZVRleHRB
bmFseXNpc1NvdXJjZSkpKQotICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SURXcml0
ZVRleHRBbmFseXNpc1NpbmsqPih0aGlzKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBFX0ZB
SUw7Ci0KLSAgICBBZGRSZWYoKTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQotVUxPTkcgVGV4dEFu
YWx5emVySGVscGVyOjpBZGRSZWYoKQotewotICAgIHJldHVybiArK21fcmVmQ291bnQ7Ci19Ci0K
LVVMT05HIFRleHRBbmFseXplckhlbHBlcjo6UmVsZWFzZSgpCi17Ci0gICAgVUxPTkcgbmV3UmVm
ID0gLS1tX3JlZkNvdW50OwotICAgIGlmICghbmV3UmVmKQotICAgICAgICBkZWxldGUodGhpcyk7
Ci0KLSAgICByZXR1cm4gbmV3UmVmOwotfQotCi1IUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6
R2V0VGV4dEF0UG9zaXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgY29uc3QgV0NIQVIqKiB0ZXh0
U3RyaW5nLCBVSU5UMzIqIHRleHRMZW5ndGgpCi17Ci0gICAgaWYgKCF0ZXh0U3RyaW5nIHx8ICF0
ZXh0TGVuZ3RoKQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotCi0gICAgaWYgKHRleHRQb3Np
dGlvbiA+PSBtX2J1ZmZlckxlbmd0aCkgewotICAgICAgICAqdGV4dFN0cmluZyA9IG51bGxwdHI7
Ci0gICAgICAgICp0ZXh0TGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuIFNfT0s7Ci0gICAgfQot
Ci0gICAgKnRleHRTdHJpbmcgPSAmbV9idWZmZXJbdGV4dFBvc2l0aW9uXTsKLSAgICAqdGV4dExl
bmd0aCA9IG1fYnVmZmVyTGVuZ3RoIC0gdGV4dFBvc2l0aW9uOwotCi0gICAgcmV0dXJuIFNfT0s7
Ci19Ci0KLUhSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpHZXRUZXh0QmVmb3JlUG9zaXRpb24o
VUlOVDMyIHRleHRQb3NpdGlvbiwgY29uc3QgV0NIQVIqKiB0ZXh0U3RyaW5nLCBVSU5UMzIqIHRl
eHRMZW5ndGgpCi17Ci0gICAgaWYgKCF0ZXh0U3RyaW5nIHx8ICF0ZXh0TGVuZ3RoKQotICAgICAg
ICByZXR1cm4gRV9QT0lOVEVSOwotCi0gICAgaWYgKCF0ZXh0UG9zaXRpb24gfHwgdGV4dFBvc2l0
aW9uID4gbV9idWZmZXJMZW5ndGgpIHsKLSAgICAgICAgKnRleHRTdHJpbmcgPSBudWxscHRyOwot
ICAgICAgICAqdGV4dExlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybiBTX09LOwotICAgIH0KLQot
ICAgICp0ZXh0U3RyaW5nID0gJm1fYnVmZmVyWzBdOwotICAgICp0ZXh0TGVuZ3RoID0gdGV4dFBv
c2l0aW9uOwotCi0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgVGV4dEFuYWx5emVySGVs
cGVyOjpHZXRMb2NhbGVOYW1lKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiogdGV4dExlbmd0
aCwgY29uc3QgV0NIQVIqKiBsb2NhbGVOYW1lKQotewotICAgICpsb2NhbGVOYW1lID0gbV9sb2Nh
bGVOYW1lOwotICAgICp0ZXh0TGVuZ3RoID0gbV9idWZmZXJMZW5ndGggLSB0ZXh0UG9zaXRpb247
Ci0KLSAgICByZXR1cm4gU19PSzsKLX0KLQotSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6Okdl
dE51bWJlclN1YnN0aXR1dGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIqIHRleHRMZW5n
dGgsIElEV3JpdGVOdW1iZXJTdWJzdGl0dXRpb24qKiBudW1iZXJTdWJzdGl0dXRpb24pCi17Ci0g
ICAgKnRleHRMZW5ndGggPSBtX2J1ZmZlckxlbmd0aCAtIHRleHRQb3NpdGlvbjsKLSAgICByZXR1
cm4gU19PSzsKLX0KLQotSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6OlNldExpbmVCcmVha3Bv
aW50cyhVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgY29uc3QgRFdSSVRF
X0xJTkVfQlJFQUtQT0lOVCopCi17Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQotSFJFU1VM
VCBUZXh0QW5hbHl6ZXJIZWxwZXI6OlNldFNjcmlwdEFuYWx5c2lzKFVJTlQzMiB0ZXh0UG9zaXRp
b24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBjb25zdCBEV1JJVEVfU0NSSVBUX0FOQUxZU0lTKiBhbmFs
eXNpcykKLXsKLSAgICBBbmFseXplZFJ1biBjdXJyZW50ID0geyB0ZXh0UG9zaXRpb24sIHRleHRM
ZW5ndGgsICphbmFseXNpcyB9OwotICAgIG1fYW5hbHl6ZWRSdW5zLmFwcGVuZChXVEZNb3ZlKGN1
cnJlbnQpKTsKLQotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFRleHRBbmFseXplckhl
bHBlcjo6U2V0QmlkaUxldmVsKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3Ro
LCBVSU5UOCBleHBsaWNpdExldmVsLCBVSU5UOCByZXNvbHZlZExldmVsKQotewotICAgIHJldHVy
biBFX05PVElNUEw7Ci19Ci0KLUhSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpTZXROdW1iZXJT
dWJzdGl0dXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIElEV3Jp
dGVOdW1iZXJTdWJzdGl0dXRpb24qKQotewotICAgIHJldHVybiBFX05PVElNUEw7Ci19Ci0KLX0K
LQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4
dEFuYWx5emVySGVscGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhlbHBlci5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGR3cml0ZS5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1
Y3QgQW5hbHl6ZWRSdW4gewotICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24geyAwIH07Ci0gICAg
dW5zaWduZWQgbGVuZ3RoIHsgMCB9OwotICAgIERXUklURV9TQ1JJUFRfQU5BTFlTSVMgYW5hbHlz
aXM7Ci19OwotCi1zdHJ1Y3QgVGV4dEFuYWx5emVySGVscGVyIDogcHVibGljIElEV3JpdGVUZXh0
QW5hbHlzaXNTaW5rLCBJRFdyaXRlVGV4dEFuYWx5c2lzU291cmNlIHsKLSAgICBUZXh0QW5hbHl6
ZXJIZWxwZXIoY29uc3QgV0NIQVIqIGxvY2FsZU5hbWUsIGNvbnN0IFdDSEFSKiBidWZmZXIsIHVu
c2lnbmVkIGJ1ZmZlckxlbmd0aCk7Ci0KLSAgICAvLyBJVW5rbm93bgotICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShfSW5fIFJFRklJRCwgX0NPTV9P
dXRwdHJfIHZvaWQqKik7Ci0gICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBBZGRS
ZWYoKTsKLSAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2UoKTsKLQot
ICAgIC8vIElEV3JpdGVUZXh0QW5hbHlzaXNTb3VyY2UgCi0gICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIEdldFRleHRBdFBvc2l0aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIGNv
bnN0IFdDSEFSKiogdGV4dFN0cmluZywgVUlOVDMyKiB0ZXh0TGVuZ3RoKTsKLSAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0VGV4dEJlZm9yZVBvc2l0aW9uKFVJTlQzMiB0
ZXh0UG9zaXRpb24sIGNvbnN0IFdDSEFSKiogdGV4dFN0cmluZywgVUlOVDMyKiB0ZXh0TGVuZ3Ro
KTsKLSAgICB2aXJ0dWFsIERXUklURV9SRUFESU5HX0RJUkVDVElPTiBTVERNRVRIT0RDQUxMVFlQ
RSBHZXRQYXJhZ3JhcGhSZWFkaW5nRGlyZWN0aW9uKCkgeyByZXR1cm4gRFdSSVRFX1JFQURJTkdf
RElSRUNUSU9OX0xFRlRfVE9fUklHSFQ7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgR2V0TG9jYWxlTmFtZShVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIqIHRleHRM
ZW5ndGgsIGNvbnN0IFdDSEFSKiogbG9jYWxlTmFtZSk7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIEdldE51bWJlclN1YnN0aXR1dGlvbihVSU5UMzIgdGV4dFBvc2l0aW9u
LCBVSU5UMzIqIHRleHRMZW5ndGgsIElEV3JpdGVOdW1iZXJTdWJzdGl0dXRpb24qKik7Ci0KLSAg
ICAvLyBJRFdyaXRlVGV4dEFuYWx5c2lzU2luawotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBTZXRMaW5lQnJlYWtwb2ludHMoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMy
IHRleHRMZW5ndGgsIGNvbnN0IERXUklURV9MSU5FX0JSRUFLUE9JTlQqKTsKLSAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0U2NyaXB0QW5hbHlzaXMoVUlOVDMyIHRleHRQ
b3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIGNvbnN0IERXUklURV9TQ1JJUFRfQU5BTFlTSVMq
KTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0QmlkaUxldmVsKFVJ
TlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBVSU5UOCBleHBsaWNpdExldmVs
LCBVSU5UOCByZXNvbHZlZExldmVsKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgU2V0TnVtYmVyU3Vic3RpdHV0aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0
ZXh0TGVuZ3RoLCBJRFdyaXRlTnVtYmVyU3Vic3RpdHV0aW9uKik7Ci0KLSAgICBjb25zdCBXQ0hB
UiogbV9sb2NhbGVOYW1lIHsgbnVsbHB0ciB9OwotICAgIGNvbnN0IFdDSEFSKiBtX2J1ZmZlciB7
IG51bGxwdHIgfTsKLSAgICB1bnNpZ25lZCBtX2J1ZmZlckxlbmd0aCB7IDAgfTsKLSAgICBWZWN0
b3I8QW5hbHl6ZWRSdW4+IG1fYW5hbHl6ZWRSdW5zOwotICAgIFVMT05HIG1fcmVmQ291bnQgeyAw
IH07Ci19OwotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
VHJhbnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQu
Y3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAt
MSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTYgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgotCi0jaWYgUExBVEZPUk0oV0lOKQotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0KLSNpbmNsdWRlIDxkMmQxLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotVHJhbnNmb3JtYXRpb25NYXRyaXg6OlRyYW5zZm9ybWF0
aW9uTWF0cml4KGNvbnN0IEQyRDFfTUFUUklYXzNYMl9GJiB0KQotewotICAgIHNldEEodC5fMTEp
OwotICAgIHNldEIodC5fMTIpOwotICAgIHNldEModC5fMjEpOwotICAgIHNldEQodC5fMjIpOwot
ICAgIHNldEUodC5fMzEpOwotICAgIHNldEYodC5fMzIpOwotfQotCi1UcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6b3BlcmF0b3IgRDJEMV9NQVRSSVhfM1gyX0YoKSBjb25zdAotewotICAgIHJldHVybiBE
MkQxOjpNYXRyaXgzeDJGKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoYSgpKSwKLSAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChiKCkpLAotICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KGMoKSksCi0gICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZCgpKSwKLSAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChlKCkpLAotICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KGYoKSkpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm06OkFmZmluZVRyYW5zZm9ybShjb25zdCBEMkQx
X01BVFJJWF8zWDJfRiYgdCkKLXsKLSAgICBzZXRNYXRyaXgodC5fMTEsIHQuXzEyLCB0Ll8yMSwg
dC5fMjIsIHQuXzMxLCB0Ll8zMik7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3IgRDJE
MV9NQVRSSVhfM1gyX0YoKSBjb25zdAotewotICAgIHJldHVybiBEMkQxOjpNYXRyaXgzeDJGKG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoYSgpKSwKLSAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dChiKCkpLAotICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGMoKSksCi0gICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoZCgpKSwKLSAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dChlKCkpLAotICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGYoKSkpOwotfQotCi19Ci0K
LSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZURpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0lt
YWdlRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vRHJhZ0ltYWdlRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTA1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKLQotI2lmIFVTRShESVJF
Q1QyRCkKLQotI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhXbmREQy5oIgotI2lu
Y2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUg
PHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3dp
bi9HRElPYmplY3QuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIGRlYWxsb2NDb250
ZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgaWYg
KHBsYXRmb3JtQ29udGV4dCkgewotICAgICAgICBpZiAoYXV0byogcmVuZGVyVGFyZ2V0ID0gcGxh
dGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgICAgIHJlbmRlclRhcmdldC0+
UmVsZWFzZSgpOwotICAgIH0KLX0KLQotR0RJT2JqZWN0PEhCSVRNQVA+IGFsbG9jSW1hZ2UoSERD
IGRjLCBJbnRTaXplIHNpemUsIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiogcGxhdGZvcm1Db250
ZXh0KQotewotICAgIEJpdG1hcEluZm8gYm1wSW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZShzaXpl
KTsKLQotICAgIExQVk9JRCBiaXRzID0gbnVsbHB0cjsKLSAgICBhdXRvIGhibXAgPSBhZG9wdEdE
SU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24oZGMsICZibXBJbmZvLCBESUJfUkdCX0NPTE9SUywg
JmJpdHMsIDAsIDApKTsKLQotICAgIGlmICghcGxhdGZvcm1Db250ZXh0IHx8ICFoYm1wKQotICAg
ICAgICByZXR1cm4gaGJtcDsKLQotICAgIC8vIEZJWE1FOiBVc2UgR0RJIEludGVyb3AgbGF5ZXIg
dG8gY3JlYXRlIEhCSVRNQVAgZnJvbSBEMkQgQml0bWFwCi0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gaGJtcDsKLX0KLQotRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJ
bWFnZVJlZiBpbWFnZVJlZiwgRmxvYXRTaXplIHNjYWxlKQotewotICAgIC8vIEZJWE1FOiBkdWUg
dG8gdGhlIHdheSBkcmFnIGltYWdlcyBhcmUgZG9uZSBvbiB3aW5kb3dzIHdlIG5lZWQgCi0gICAg
Ly8gdG8gcHJlcHJvY2VzcyB0aGUgYWxwaGEgY2hhbm5lbCA8cmRhcjovL3Byb2JsZW0vNTAxNTk0
Nj4KLSAgICBpZiAoIWltYWdlUmVmKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEdE
SU9iamVjdDxIQklUTUFQPiBoYm1wOwotICAgIGF1dG8gaW1hZ2UgPSBhZG9wdEdESU9iamVjdChp
bWFnZVJlZik7Ci0KLSAgICBJbnRTaXplIHNyY1NpemUgPSBkcmFnSW1hZ2VTaXplKGltYWdlLmdl
dCgpKTsKLSAgICBJbnRTaXplIGRzdFNpemUoc3RhdGljX2Nhc3Q8aW50PihzcmNTaXplLndpZHRo
KCkgKiBzY2FsZS53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50PihzcmNTaXplLmhlaWdodCgpICog
c2NhbGUuaGVpZ2h0KCkpKTsKLQotICAgIEhXbmREQyBkYyhudWxscHRyKTsKLSAgICBhdXRvIGRz
dERDID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoZGMpKTsKLSAgICBpZiAo
ZHN0REMpCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0KLSAgICBpZiAoIWhibXApCi0gICAg
ICAgIGhibXAuc3dhcChpbWFnZSk7Ci0gICAgcmV0dXJuIGhibXAubGVhaygpOwotfQotCi1EcmFn
SW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWcsIEltYWdlT3JpZW50
YXRpb24pCi17Ci0gICAgSFduZERDIGRjKG51bGxwdHIpOwotICAgIGF1dG8gd29ya2luZ0RDID0g
YWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoZGMpKTsKLSAgICBpZiAoIXdvcmtp
bmdEQykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBudWxscHRyOwotfQotICAgIAotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIyNyw3ICszMjI3LDcgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllcjo6c2V0dXBGaWx0
ZQogCiAgICAgYXV0byByb290UmVsYXRpdmVCb3VuZHMgPSBjYWxjdWxhdGVMYXllckJvdW5kcyhw
YWludGluZ0luZm8ucm9vdExheWVyLCBvZmZzZXRGcm9tUm9vdCwgeyB9KTsKIAotICAgIEdyYXBo
aWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHBhaW50aW5nRmlsdGVycy0+YmVnaW5GaWx0ZXJF
ZmZlY3QoZGVzdGluYXRpb25Db250ZXh0LCByZW5kZXJlcigpLCBlbmNsb3NpbmdJbnRSZWN0KHJv
b3RSZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3QocGFpbnRpbmdJbmZvLnBhaW50RGly
dHlSZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBhaW50UmVjdCkpOworICAgIEdyYXBo
aWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHBhaW50aW5nRmlsdGVycy0+YmVnaW5GaWx0ZXJF
ZmZlY3QocmVuZGVyZXIoKSwgZW5jbG9zaW5nSW50UmVjdChyb290UmVsYXRpdmVCb3VuZHMpLCBl
bmNsb3NpbmdJbnRSZWN0KHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCksIGVuY2xvc2luZ0lu
dFJlY3QoZmlsdGVyUmVwYWludFJlY3QpKTsKICAgICBpZiAoIWZpbHRlckNvbnRleHQpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJGaWx0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyOSwyNCArMTI5LDE5IEBAIEdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpp
bnAKICAgICByZXR1cm4gbV9zb3VyY2VJbWFnZSA/ICZtX3NvdXJjZUltYWdlLT5jb250ZXh0KCkg
OiBudWxscHRyOwogfQogCi12b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YWxsb2NhdGVCYWNraW5n
U3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRleHQpCit2b2lk
IFJlbmRlckxheWVyRmlsdGVyczo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpCiB7CiAg
ICAgYXV0byYgZmlsdGVyID0gKm1fZmlsdGVyOwogICAgIGF1dG8gbG9naWNhbFNpemUgPSBmaWx0
ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZShtX2ZpbHRlclJlZ2lvbi5zaXplKCkpOwogCiAgICAgaWYg
KCFtX3NvdXJjZUltYWdlIHx8IG1fc291cmNlSW1hZ2UtPmxvZ2ljYWxTaXplKCkgIT0gbG9naWNh
bFNpemUpIHsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIG1fc291cmNlSW1hZ2UgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBmaWx0ZXIucmVuZGVyaW5nTW9kZSgpLCAmdGFy
Z2V0Q29udGV4dCwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0
OjpCR1JBOCk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0odGFyZ2V0Q29udGV4dCk7CiAg
ICAgICAgIG1fc291cmNlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBm
aWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBTaG91bGRVc2VEaXNwbGF5TGlzdDo6Tm8sIFJlbmRlcmlu
Z1B1cnBvc2U6OkRPTSwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9y
bWF0OjpCR1JBOCwgbV9sYXllci5yZW5kZXJlcigpLmhvc3RXaW5kb3coKSk7Ci0jZW5kaWYKICAg
ICAgICAgaWYgKGF1dG8gY29udGV4dCA9IGlucHV0Q29udGV4dCgpKQogICAgICAgICAgICAgY29u
dGV4dC0+c2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogICAgIH0KIH0KIAotR3JhcGhpY3ND
b250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29u
dGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3Qg
TGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBj
b25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KQorR3JhcGhpY3NDb250ZXh0KiBSZW5k
ZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
LCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0
eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCiB7CiAgICAgaWYgKCFt
X2ZpbHRlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMDAsNyArMTk1LDcgQEAgR3Jh
cGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZwogICAgIHJlc2V0RGlydHlTb3Vy
Y2VSZWN0KCk7CiAKICAgICBmaWx0ZXIuc2V0RmlsdGVyUmVnaW9uKG1fZmlsdGVyUmVnaW9uKTsK
LSAgICBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGRlc3RpbmF0aW9uQ29udGV4dCk7Cisg
ICAgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpOwogCiAgICAgYXV0byogc291cmNlR3Jh
cGhpY3NDb250ZXh0ID0gaW5wdXRDb250ZXh0KCk7CiAgICAgaWYgKCFzb3VyY2VHcmFwaGljc0Nv
bnRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVycy5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJGaWx0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDE0ICs2MywxNCBAQCBwdWJs
aWM6CiAgICAgLy8gUGVyIHJlbmRlcgogICAgIExheW91dFJlY3QgcmVwYWludFJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3JlcGFpbnRSZWN0OyB9CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGJlZ2lu
RmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBSZW5kZXJF
bGVtZW50JiwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVj
dCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KTsKKyAgICBH
cmFwaGljc0NvbnRleHQqIGJlZ2luRmlsdGVyRWZmZWN0KFJlbmRlckVsZW1lbnQmLCBjb25zdCBM
YXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNv
bnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpOwogICAgIHZvaWQgYXBwbHlGaWx0ZXJF
ZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQpOwogCiBwcml2YXRlOgog
ICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UmLCBjb25zdCBOZXR3b3JrTG9h
ZE1ldHJpY3MmKSBmaW5hbDsKICAgICB2b2lkIHJlc2V0RGlydHlTb3VyY2VSZWN0KCkgeyBtX2Rp
cnR5U291cmNlUmVjdCA9IExheW91dFJlY3QoKTsgfQogICAgIEdyYXBoaWNzQ29udGV4dCogaW5w
dXRDb250ZXh0KCk7Ci0gICAgdm9pZCBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYgdGFyZ2V0Q29udGV4dCk7CisgICAgdm9pZCBhbGxvY2F0ZUJhY2tp
bmdTdG9yZUlmTmVlZGVkKCk7CiAKICAgICBSZW5kZXJMYXllciYgbV9sYXllcjsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTQsNyArMTU0LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xp
cAogICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVt
KHJlbmRlcmVyKTsKICAgICBpZiAoIWNsaXBwZXJEYXRhLmlzVmFsaWRGb3JHZW9tZXRyeShvYmpl
Y3RCb3VuZGluZ0JveCwgY2xpcHBlZENvbnRlbnRCb3VuZHMsIGFic29sdXRlVHJhbnNmb3JtKSkg
ewogICAgICAgICAvLyBGSVhNRSAoMTQ5NDY5KTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxkIG5v
dCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBj
b250ZXh0IGJyZWFrcyBuZXN0ZWQgY2xpcHBpbmcsIHRob3VnaC4KLSAgICAgICAgYXV0byBtYXNr
SW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjbGlwcGVkQ29u
dGVudEJvdW5kcywgYWJzb2x1dGVUcmFuc2Zvcm0sIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBudWxscHRyLCAmY29udGV4dCk7Cisg
ICAgICAgIGF1dG8gbWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VC
dWZmZXIoY2xpcHBlZENvbnRlbnRCb3VuZHMsIGFic29sdXRlVHJhbnNmb3JtLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbnVsbHB0
cik7CiAgICAgICAgIGlmICghbWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1NCw3ICsxNTQsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBs
eVJlc291CiAjZWxzZQogICAgIGF1dG8gY29sb3JTcGFjZSA9IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpOwogI2VuZGlmCi0gICAgYXV0byBzb3VyY2VHcmFwaGljID0gU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgZWZm
ZWN0aXZlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCBmaWx0ZXJEYXRhLT5maWx0ZXItPnJlbmRlcmlu
Z01vZGUoKSwgcmVuZGVyZXIuaG9zdFdpbmRvdygpLCBjb250ZXh0KTsKKyAgICBhdXRvIHNvdXJj
ZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0ZXJE
YXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIGZpbHRl
ckRhdGEtPmZpbHRlci0+cmVuZGVyaW5nTW9kZSgpLCByZW5kZXJlci5ob3N0V2luZG93KCkpOwog
ICAgIGlmICghc291cmNlR3JhcGhpYykgewogICAgICAgICBBU1NFUlQobV9yZW5kZXJlckZpbHRl
ckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CiAgICAgICAgIGZpbHRlckRhdGEtPnNhdmVk
Q29udGV4dCA9IGNvbnRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAkocmV2aXNpb24gMjg3ODEy
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNv
dXJjZU1hc2tlcjo6YXBwbHlSZXNvdQogI2VuZGlmCiAKICAgICAgICAgLy8gRklYTUUgKDE0OTQ3
MCk6IFRoaXMgaW1hZ2UgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNj
ZWxlcmF0ZWQuIE1ha2luZyBpdCBtYXRjaCB0aGUgY29udGV4dCBicmVha3MgYWxwaGEgbWFza2lu
ZywgdGhvdWdoLgotICAgICAgICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0s
IG1hc2tDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBudWxscHRyLCBj
b250ZXh0KTsKKyAgICAgICAgbWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBt
YXNrQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbnVsbHB0cik7CiAg
ICAgICAgIGlmICghbWFza2VyRGF0YS0+bWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0Nv
bnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyNiw3ICsyMjYsNyBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2Fs
CiAgICAgcmV0dXJuIGFic29sdXRlVHJhbnNmb3JtOwogfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+
IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCkKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6
Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdp
bmRvdyogaG9zdFdpbmRvdykKIHsKICAgICBJbnRSZWN0IHBhaW50UmVjdCA9IGNhbGN1bGF0ZUlt
YWdlQnVmZmVyUmVjdCh0YXJnZXRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSk7CiAgICAgLy8gRG9u
J3QgY3JlYXRlIGVtcHR5IEltYWdlQnVmZmVycy4KQEAgLTIzOCwxMiArMjM4LDcgQEAgUmVmUHRy
PEltYWdlQnVmZmVyPiBTVkdSZW5kZXJpbmdDb250ZXh0OgogICAgIGlmIChJbWFnZUJ1ZmZlcjo6
c2l6ZU5lZWRzQ2xhbXBpbmcoY2xhbXBlZFNpemUsIHNjYWxlKSkKICAgICAgICAgY2xhbXBlZFNp
emUgPSBjbGFtcGVkU2l6ZSAqIHNjYWxlOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIGF1dG8g
aW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCByZW5kZXJpbmdN
b2RlLCBjb250ZXh0LCAxLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIFNob3VsZFVzZURpc3Bs
YXlMaXN0OjpObywgUmVuZGVyaW5nUHVycG9zZTo6RE9NLCAxLCBjb2xvclNwYWNlLCBQaXhlbEZv
cm1hdDo6QkdSQTgsIGhvc3RXaW5kb3cpOwotI2VuZGlmCiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTI1Niw3ICsyNTEsNyBAQCBSZWZQdHI8SW1h
Z2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6CiAgICAgcmV0dXJuIGltYWdlQnVmZmVyOwog
fQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFt
cGVkUmVjdCwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK1Jl
ZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIo
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRSZWN0
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSkKIHsKICAgICBJbnRTaXplIGNsYW1wZWRTaXplID0gcm91bmRlZEludFNp
emUoY2xhbXBlZFJlY3Quc2l6ZSgpKTsKICAgICBGbG9hdFNpemUgdW5jbGFtcGVkU2l6ZSA9IHJv
dW5kZWRJbnRTaXplKHRhcmdldFJlY3Quc2l6ZSgpKTsKQEAgLTI2NSwxMiArMjYwLDcgQEAgUmVm
UHRyPEltYWdlQnVmZmVyPiBTVkdSZW5kZXJpbmdDb250ZXh0OgogICAgIGlmIChjbGFtcGVkU2l6
ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0jaWYgVVNFKERJUkVDVDJE
KQotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXpl
LCByZW5kZXJpbmdNb2RlLCBjb250ZXh0LCAxLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdS
QTgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiAgICAgYXV0byBpbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIDEs
IGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0jZW5kaWYKICAgICBpZiAoIWltYWdl
QnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDI4
NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw4ICs2MCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHBy
ZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQoUmVuZGVyRWxlbWVudCYsIFBhaW50SW5mbyYsIE5lZWRz
R3JhcGhpY3NDb250ZXh0U2F2ZSA9IERvbnRTYXZlR3JhcGhpY3NDb250ZXh0KTsKICAgICBib29s
IGlzUmVuZGVyaW5nUHJlcGFyZWQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ0ZsYWdzICYg
UmVuZGVyaW5nUHJlcGFyZWQ7IH0KIAotICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyLCBjb25zdCBHcmFw
aGljc0NvbnRleHQqID0gbnVsbHB0cik7Ci0gICAgc3RhdGljIFJlZlB0cjxJbWFnZUJ1ZmZlcj4g
Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIGNsYW1wZWRSZWN0LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBSZW5kZXJp
bmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cik7CisgICAgc3RhdGljIFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJn
ZXRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiA9
IG51bGxwdHIpOworICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVk
UmVjdCwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgUmVuZGVyaW5nTW9kZSk7CiAKICAg
ICBzdGF0aWMgdm9pZCByZW5kZXJTdWJ0cmVlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYsIFJl
bmRlckVsZW1lbnQmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKICAgICBzdGF0aWMgdm9pZCBj
bGlwVG9JbWFnZUJ1ZmZlcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4mLCBib29sIHNhZmVUb0NsZWFyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTUgKzY2
LDYgQEAKICNpbmNsdWRlICJMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLmgiCiAjZW5kaWYK
IAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJEaXJl
Y3QyRFV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IkltYWdlRGVjb2RlckRpcmVjdDJELmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBTVkdJbWFnZTo6U1ZHSW1hZ2UoSW1hZ2VPYnNlcnZlciYgb2JzZXJ2ZXIpCkBAIC0yMTcsMTIg
KzIwOCwxMiBAQCBJbWFnZURyYXdSZXN1bHQgU1ZHSW1hZ2U6OmRyYXdGb3JDb250YWluCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPE5hdGl2ZUltYWdlPiBTVkdJbWFnZTo6bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0
KQorUmVmUHRyPE5hdGl2ZUltYWdlPiBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKQogewotICAgIHJldHVybiBuYXRpdmVJbWFnZSh0YXJnZXRDb250ZXh0KTsKKyAgICByZXR1
cm4gbmF0aXZlSW1hZ2UoKTsKIH0KIAotUmVmUHRyPE5hdGl2ZUltYWdlPiBTVkdJbWFnZTo6bmF0
aXZlSW1hZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0KikKK1JlZlB0cjxOYXRpdmVJbWFnZT4gU1ZH
SW1hZ2U6Om5hdGl2ZUltYWdlKCkKIHsKICAgICByZXR1cm4gbmF0aXZlSW1hZ2Uoc2l6ZSgpLCBG
bG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKCkpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkocmV2
aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg2LDggKzg2LDggQEAgcHJpdmF0ZToKICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRoaXMgdG8gYmUgbGVzcyBjb25zZXJ2YXRpdmUuCiAgICAgYm9vbCBjdXJyZW50
RnJhbWVLbm93blRvQmVPcGFxdWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCi0g
ICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBH
cmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgZmluYWw7Ci0gICAgUmVmUHRyPE5hdGl2ZUltYWdl
PiBuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgZmluYWw7Cisg
ICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIGZpbmFs
OworICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2UoKSBmaW5hbDsKICAgICBSZWZQ
dHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlKGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZVJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CiAKICAg
ICB2b2lkIHN0YXJ0QW5pbWF0aW9uVGltZXJGaXJlZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCShyZXZpc2lv
biAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250
YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5ICs1OSw5IEBAIHZvaWQgU1ZHSW1hZ2VG
b3JDb250YWluZXI6OmRyYXdQYXR0ZXJuKEcKICAgICBtX2ltYWdlLT5kcmF3UGF0dGVybkZvckNv
bnRhaW5lcihjb250ZXh0LCBtX2NvbnRhaW5lclNpemUsIG1fY29udGFpbmVyWm9vbSwgbV9pbml0
aWFsRnJhZ21lbnRVUkwsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5n
LCBkc3RSZWN0LCBvcHRpb25zKTsKIH0KIAotUmVmUHRyPE5hdGl2ZUltYWdlPiBTVkdJbWFnZUZv
ckNvbnRhaW5lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250
ZXh0KiB0YXJnZXRDb250ZXh0KQorUmVmUHRyPE5hdGl2ZUltYWdlPiBTVkdJbWFnZUZvckNvbnRh
aW5lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQogewotICAgIHJldHVybiBtX2ltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSh0YXJnZXRDb250ZXh0KTsKKyAgICByZXR1cm4g
bV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9y
Q29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlRm9yQ29udGFpbmVyLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgdG8gYmUg
bGVzcyBjb25zZXJ2YXRpdmUuCiAgICAgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgUmVmUHRyPE5hdGl2ZUltYWdl
PiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVs
bHB0cikgZmluYWw7CisgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpIGZpbmFsOwogCiBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIFNWR0ltYWdl
Rm9yQ29udGFpbmVyKFNWR0ltYWdlKiwgY29uc3QgRmxvYXRTaXplJiBjb250YWluZXJTaXplLCBm
bG9hdCBjb250YWluZXJab29tLCBjb25zdCBVUkwmIGluaXRpYWxGcmFnbWVudFVSTCk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw0OSBAQAorMjAyMi0wMS0wNyAgU2FtIFdlaW5pZyAgPHdl
aW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIERpcmVjdDJECisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5OTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3Jt
RlRXLmNtYWtlOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb246OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Q29uZmlndXJhdGlv
bjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpTaGFyZWFibGVC
aXRtYXApOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6On5TaGFyZWFibGVCaXRt
YXApOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6Om51bUJ5dGVzRm9yU2l6ZSk6
CisgICAgICAgICogU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oOgorICAgICAgICAoV2ViS2l0OjpT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZVBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpT
aGFyZWFibGVCaXRtYXA6OmR4U3VyZmFjZSk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL3dp
bi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL0JhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHA6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpkZXZpY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnNldERldmljZSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJQ
b3B1cE1lbnVQcm94eVdpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5
V2luOjpzaG93UG9wdXBNZW51KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlX
aW46OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OnNldHVw
U3dhcENoYWluKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlX
aW46OmNvbmZpZ3VyZUJhY2tpbmdTdG9yZSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNz
L3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2Vi
Vmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OldlYlZpZXcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3OjpvblNpemVFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OnNldHVwU3dhcENoYWluKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y29u
ZmlndXJlQmFja2luZ1N0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dl
YlZpZXcuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZDNkRGV2aWNlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZDNkSW1tZWRpYXRlQ29udGV4dCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQb3B1
cE1lbnUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnU6OnNob3cpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29v
cmRpbmF0ZWRHcmFwaGljcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhQ29vcmRp
bmF0ZWRHcmFwaGljczo6ZGlzcGxheSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Zp
bmRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OmdldElt
YWdlRm9yRmluZE1hdGNoKToKKwogMjAyMi0wMS0wOCAgVHlsZXIgV2lsY29jayAgPHR5bGVyX3dA
YXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRGb2N1c2Vk
KHRydWUpIHNob3VsZCBtYWtlIHRoZSB3ZWJwYWdlIGZvY3VzZWQsIGFuZCBtYWtlIHdlYiBjb250
ZW50IHRoZSBmaXJzdCByZXNwb25kZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm1GVFcu
Y21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZQkocmV2
aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhp
c3RlbnQpCkBAIC0xLDE5NSArMCwwIEBACi1zZXQoV2ViS2l0X09VVFBVVF9OQU1FIFdlYktpdDIp
Ci1zZXQoV2ViUHJvY2Vzc19PVVRQVVRfTkFNRSBXZWJLaXRXZWJQcm9jZXNzKQotc2V0KE5ldHdv
cmtQcm9jZXNzX09VVFBVVF9OQU1FIFdlYktpdE5ldHdvcmtQcm9jZXNzKQotc2V0KFBsdWdpblBy
b2Nlc3NfT1VUUFVUX05BTUUgV2ViS2l0UGx1Z2luUHJvY2VzcykKLXNldChHUFVQcm9jZXNzX09V
VFBVVF9OQU1FIFdlYktpdEdQVVByb2Nlc3MpCi0KLWluY2x1ZGUoSGVhZGVycy5jbWFrZSkKLQot
YWRkX2RlZmluaXRpb25zKC1EQlVJTERJTkdfV0VCS0lUKQotCi1saXN0KEFQUEVORCBXZWJLaXRf
U09VUkNFUwotICAgIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmNwcAotCi0gICAgTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdl
TWFuYWdlci5jcHAKLQotICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NNYWlu
Q3VybC5jcHAKLQotICAgIFBsYXRmb3JtL0lQQy93aW4vQXR0YWNobWVudFdpbi5jcHAKLSAgICBQ
bGF0Zm9ybS9JUEMvd2luL0Nvbm5lY3Rpb25XaW4uY3BwCi0KLSAgICBQbGF0Zm9ybS9jbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNwcAotCi0gICAgUGxhdGZvcm0v
d2luL0xvZ2dpbmdXaW4uY3BwCi0gICAgUGxhdGZvcm0vd2luL01vZHVsZVdpbi5jcHAKLSAgICBQ
bGF0Zm9ybS93aW4vU2hhcmVkTWVtb3J5V2luLmNwcAotCi0gICAgU2hhcmVkL0FQSS9jL2N1cmwv
V0tDZXJ0aWZpY2F0ZUluZm9DdXJsLmNwcAotCi0gICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUv
TmV0c2NhcGVQbHVnaW5Nb2R1bGVOb25lLmNwcAotCi0gICAgU2hhcmVkL3dpbi9BdXhpbGlhcnlQ
cm9jZXNzTWFpbldpbi5jcHAKLSAgICBTaGFyZWQvd2luL05hdGl2ZVdlYktleWJvYXJkRXZlbnRX
aW4uY3BwCi0gICAgU2hhcmVkL3dpbi9OYXRpdmVXZWJNb3VzZUV2ZW50V2luLmNwcAotICAgIFNo
YXJlZC93aW4vTmF0aXZlV2ViVG91Y2hFdmVudFdpbi5jcHAKLSAgICBTaGFyZWQvd2luL05hdGl2
ZVdlYldoZWVsRXZlbnRXaW4uY3BwCi0gICAgU2hhcmVkL3dpbi9XZWJFdmVudEZhY3RvcnkuY3Bw
Ci0KLSAgICBVSVByb2Nlc3MvQmFja2luZ1N0b3JlLmNwcAotICAgIFVJUHJvY2Vzcy9EZWZhdWx0
VW5kb0NvbnRyb2xsZXIuY3BwCi0gICAgVUlQcm9jZXNzL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGlu
Z05vbmUuY3BwCi0gICAgVUlQcm9jZXNzL1dlYkdyYW1tYXJEZXRhaWwuY3BwCi0gICAgVUlQcm9j
ZXNzL1dlYlZpZXdwb3J0QXR0cmlidXRlcy5jcHAKLQotICAgIFVJUHJvY2Vzcy9BUEkvQy9XS1Zp
ZXdwb3J0QXR0cmlidXRlcy5jcHAKLQotICAgIFVJUHJvY2Vzcy9BUEkvQy9jdXJsL1dLUHJvdGVj
dGlvblNwYWNlQ3VybC5jcHAKLSAgICBVSVByb2Nlc3MvQVBJL0MvY3VybC9XS1dlYnNpdGVEYXRh
U3RvcmVSZWZDdXJsLmNwcAotCi0gICAgVUlQcm9jZXNzL0FQSS9DL3dpbi9XS1ZpZXcuY3BwCi0K
LSAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYVByb3h5Q29vcmRp
bmF0ZWRHcmFwaGljcy5jcHAKLQotICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3Bl
Y3RvclVJUHJveHlXaW4uY3BwCi0KLSAgICBVSVByb2Nlc3MvTGF1bmNoZXIvd2luL1Byb2Nlc3NM
YXVuY2hlcldpbi5jcHAKLQotICAgIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVE
YXRhU3RvcmVDdXJsLmNwcAotCi0gICAgVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3dpbi9XZWJzaXRl
RGF0YVN0b3JlV2luLmNwcAotCi0gICAgVUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1wbC5jcHAK
LSAgICBVSVByb2Nlc3Mvd2luL1dlYkNvbnRleHRNZW51UHJveHlXaW4uY3BwCi0gICAgVUlQcm9j
ZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCi0gICAgVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1l
bnVQcm94eVdpbi5jcHAKLSAgICBVSVByb2Nlc3Mvd2luL1dlYlByb2Nlc3NQb29sV2luLmNwcAot
ICAgIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKLQotICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvd2luL0luamVjdGVkQnVuZGxlV2luLmNwcAotCi0gICAgV2ViUHJvY2Vzcy9JbnNwZWN0
b3Ivd2luL1dlYkluc3BlY3RvclVJV2luLmNwcAotCi0gICAgV2ViUHJvY2Vzcy9NZWRpYUNhY2hl
L1dlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuY3BwCi0KLSAgICBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L3dpbi9XZWJQb3B1cE1lbnVXaW4uY3BwCi0KLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
QWNjZWxlcmF0ZWRTdXJmYWNlLmNwcAotCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKLSAgICBXZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3Mu
Y3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
SG9zdC5jcHAKLQotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5jcHAKLQot
ICAgIFdlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NNYWluV2luLmNwcAotICAgIFdlYlByb2Nlc3Mv
d2luL1dlYlByb2Nlc3NXaW4uY3BwCi0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJ
UkVDVE9SSUVTCi0gICAgIiR7V0VCS0lUX0RJUn0vUGxhdGZvcm0vY2xhc3NpZmllciIKLSAgICAi
JHtXRUJLSVRfRElSfS9QbHVnaW5Qcm9jZXNzL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9TaGFy
ZWQvQVBJL2Mvd2luIgotICAgICIke1dFQktJVF9ESVJ9L1NoYXJlZC9Db29yZGluYXRlZEdyYXBo
aWNzIgotICAgICIke1dFQktJVF9ESVJ9L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVh
ZGVkY29tcG9zaXRvciIKLSAgICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvUGx1Z2lucy93aW4iCi0g
ICAgIiR7V0VCS0lUX0RJUn0vU2hhcmVkL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nl
c3MvQVBJL0MvY2Fpcm8iCi0gICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2N1cmwi
Ci0gICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9DL3dpbiIKLSAgICAiJHtXRUJLSVRf
RElSfS9VSVByb2Nlc3MvQVBJL2NwcC93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNz
L0FQSS93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MiCi0gICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQiCi0gICAg
IiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0luc3BlY3Rvci93aW4iCi0gICAgIiR7V0VCS0lUX0RJ
Un0vVUlQcm9jZXNzL1BsdWdpbnMvd2luIgotICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy93
aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvd2lu
IgotICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL3dpbi9E
T00iCi0gICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbnNwZWN0b3Ivd2luIgotICAgICIk
e1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvd2luIgotICAgICIke1dFQktJ
VF9ESVJ9L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzIgotICAgICIke1dF
QktJVF9ESVJ9L1dlYlByb2Nlc3MvV2ViUGFnZS93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vd2lu
IgotKQotCi1saXN0KEFQUEVORCBXZWJLaXRfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKLSkK
LQotc2V0KFdlYktpdENvbW1vbkluY2x1ZGVEaXJlY3RvcmllcyAke1dlYktpdF9JTkNMVURFX0RJ
UkVDVE9SSUVTfSkKLXNldChXZWJLaXRDb21tb25TeXN0ZW1JbmNsdWRlRGlyZWN0b3JpZXMgJHtX
ZWJLaXRfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVN9KQotCi1saXN0KEFQUEVORCBXZWJQcm9j
ZXNzX1NPVVJDRVMKLSAgICBXZWJQcm9jZXNzL0VudHJ5UG9pbnQvd2luL1dlYlByb2Nlc3NNYWlu
LmNwcAotKQotCi1saXN0KEFQUEVORCBOZXR3b3JrUHJvY2Vzc19TT1VSQ0VTCi0gICAgTmV0d29y
a1Byb2Nlc3MvRW50cnlQb2ludC93aW4vTmV0d29ya1Byb2Nlc3NNYWluLmNwcAotKQotCi1saXN0
KEFQUEVORCBHUFVQcm9jZXNzX1NPVVJDRVMKLSAgICBHUFVQcm9jZXNzL0VudHJ5UG9pbnQvd2lu
L0dQVVByb2Nlc3NNYWluLmNwcAotKQotCi1hZGRfZGVmaW5pdGlvbnMoLURVU0VfRElSRUNUMkQ9
MSAtRFVTRV9DVVJMPTEpCi0KLWxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCi0gICAgTmV0d29y
a1Byb2Nlc3MvQ29va2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcAotCi0gICAgTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCi0gICAgTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsQ3VybC5jcHAKLQotICAgIE5ldHdvcmtQ
cm9jZXNzL2N1cmwvTmV0d29ya0RhdGFUYXNrQ3VybC5jcHAKLSAgICBOZXR3b3JrUHJvY2Vzcy9j
dXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdv
cmtTZXNzaW9uQ3VybC5jcHAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL1JlbW90ZU5ldHdvcmtp
bmdDb250ZXh0Q3VybC5jcHAKLQotICAgIFNoYXJlZC9jdXJsL1dlYkNvcmVBcmd1bWVudENvZGVy
c0N1cmwuY3BwCi0KLSAgICBTaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAot
Ci0gICAgVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHAKLQotICAgIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvY3VybC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAot
KQotCi1saXN0KEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICIke1dFQktJ
VF9ESVJ9L05ldHdvcmtQcm9jZXNzL2N1cmwiCi0gICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9jdXJsIgotKQotCi1saXN0KEFQUEVORCBXZWJLaXRfUFJJVkFURV9M
SUJSQVJJRVMKLSAgICBPcGVuU1NMOjpTU0wKLSAgICBEMmQxLmxpYgotICAgIEQzZDExLmxpYgot
ICAgIER3cml0ZQotICAgIER4Z2kubGliCi0gICAgRHhndWlkCi0gICAgV2luZG93c0NvZGVjcwot
ICAgIG1mdXVpZC5saWIKLSAgICBzdHJtaWlkcy5saWIKLSkKLQotaWYgKEVOQUJMRV9SRU1PVEVf
SU5TUEVDVE9SKQotICAgIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCi0gICAgICAgIFVJUHJv
Y2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKLSAgICAgICAg
VUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVy
LmNwcAotCi0gICAgICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHlXaW4uY3BwCi0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVf
RElSRUNUT1JJRVMKLSAgICAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL3NvY2tldCIKLSAg
ICApCi1lbmRpZiAoKQotCi0jIFdpbmRvd3Mgc3BlY2lmaWMKLWxpc3QoQVBQRU5EIFdlYktpdF9Q
VUJMSUNfRlJBTUVXT1JLX0hFQURFUlMKLSAgICBTaGFyZWQvQVBJL2MvY3VybC9XS0NlcnRpZmlj
YXRlSW5mb0N1cmwuaAotCi0gICAgU2hhcmVkL0FQSS9jL3dpbi9XS0Jhc2VXaW4uaAotCi0gICAg
VUlQcm9jZXNzL0FQSS9DL2N1cmwvV0tQcm90ZWN0aW9uU3BhY2VDdXJsLmgKLSAgICBVSVByb2Nl
c3MvQVBJL0MvY3VybC9XS1dlYnNpdGVEYXRhU3RvcmVSZWZDdXJsLmgKLQotICAgIFVJUHJvY2Vz
cy9BUEkvQy93aW4vV0tWaWV3LmgKLSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJl
YWJsZUJpdG1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVh
YmxlQml0bWFwLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQv
U2hhcmVhYmxlQml0bWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTQgKzc1LDYgQEAgdm9p
ZCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZTo6Y2xlYXIoKQogdm9pZCBTaGFyZWFibGVCaXRtYXA6
OkNvbmZpZ3VyYXRpb246OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAg
ICAgZW5jb2RlciA8PCBjb2xvclNwYWNlIDw8IGlzT3BhcXVlOwotI2lmIFVTRShESVJFQ1QyRCkK
LSAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZW5jb2RlSGFuZGxlKGVuY29kZXIsIHNoYXJlZFJl
c291cmNlSGFuZGxlKTsKLQotICAgIC8vIEhhbmQgb2ZmIG93bmVyc2hpcCBvZiBvdXIgSEFORExF
IHRvIHRoZSByZWNlaXZpbmcgcHJvY2Vzcy4gSXQgd2lsbCBjbG9zZSBpdCBmb3IgdXMuCi0gICAg
Ly8gRklYTUU6IElmIHRoZSByZWNlaXZpbmcgcHJvY2VzcyBjcmFzaGVzIGJlZm9yZSBpdCByZWNl
aXZlcyB0aGUgbWVtb3J5LCB0aGUgbWVtb3J5IHdpbGwgYmUKLSAgICAvLyBsZWFrZWQuIFNlZSA8
aHR0cDovL3dlYmtpdC5vcmcvYi80NzUwMj4uCi0gICAgc2hhcmVkUmVzb3VyY2VIYW5kbGUgPSBu
dWxscHRyOwotI2VuZGlmCiB9CiAKIGJvb2wgU2hhcmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9u
OjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBDb25maWd1cmF0aW9uJiByZXN1bHQpCkBA
IC05OCwxNSArOTAsNiBAQCBib29sIFNoYXJlYWJsZUJpdG1hcDo6Q29uZmlndXJhdGlvbjo6ZGVj
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJlc3VsdCA9IENvbmZpZ3VyYXRpb24geyBX
VEZNb3ZlKCpjb2xvclNwYWNlKSwgKmlzT3BhcXVlIH07Ci0KLSNpZiBVU0UoRElSRUNUMkQpCi0g
ICAgYXV0byBwcm9jZXNzU3BlY2lmaWNIYW5kbGUgPSBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZGVj
b2RlSGFuZGxlKGRlY29kZXIpOwotICAgIGlmICghcHJvY2Vzc1NwZWNpZmljSGFuZGxlKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXN1bHQuc2hhcmVkUmVzb3VyY2VIYW5kbGUgPSBw
cm9jZXNzU3BlY2lmaWNIYW5kbGUudmFsdWUoKTsKLSNlbmRpZgotCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTE4NywxOCArMTcwLDEyIEBAIFNoYXJlYWJsZUJpdG1hcDo6U2hhcmVhYmxlQml0
bWFwKGNvbnN0IEkKICAgICAsIG1fc2hhcmVkTWVtb3J5KHNoYXJlZE1lbW9yeSkKICAgICAsIG1f
ZGF0YShudWxscHRyKQogewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBjcmVhdGVTaGFyZWRSZXNv
dXJjZSgpOwotI2VuZGlmCiB9CiAKIFNoYXJlYWJsZUJpdG1hcDo6flNoYXJlYWJsZUJpdG1hcCgp
CiB7CiAgICAgaWYgKCFpc0JhY2tlZEJ5U2hhcmVkTWVtb3J5KCkpCiAgICAgICAgIFNoYXJlYWJs
ZUJpdG1hcE1hbGxvYzo6ZnJlZShtX2RhdGEpOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBkaXNw
b3NlU2hhcmVkUmVzb3VyY2UoKTsKLSNlbmRpZgogfQogCiB2b2lkKiBTaGFyZWFibGVCaXRtYXA6
OmRhdGEoKSBjb25zdApAQCAtMjEyLDEyICsxODksNyBAQCB2b2lkKiBTaGFyZWFibGVCaXRtYXA6
OmRhdGEoKSBjb25zdAogCiBDaGVja2VkVWludDMyIFNoYXJlYWJsZUJpdG1hcDo6bnVtQnl0ZXNG
b3JTaXplKFdlYkNvcmU6OkludFNpemUgc2l6ZSwgY29uc3QgU2hhcmVhYmxlQml0bWFwOjpDb25m
aWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAvLyBX
ZSBwYXNzIHJlZmVyZW5jZXMgdG8gR1BVIHRleHR1cmVzLCBzbyBubyBuZWVkIHRvIGFsbG9jYXRl
IGZyYW1lIGJ1ZmZlcnMgaGVyZS4gSnVzdCBzZW5kIGEgc21hbGwgYml0IG9mIGRhdGEuCi0gICAg
cmV0dXJuIHNpemVvZih2b2lkKik7Ci0jZWxzZQogICAgIHJldHVybiBjYWxjdWxhdGVCeXRlc1Bl
clJvdyhzaXplLCBjb25maWd1cmF0aW9uKSAqIHNpemUuaGVpZ2h0KCk7Ci0jZW5kaWYKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWFi
bGVCaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWFibGVC
aXRtYXAuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVh
YmxlQml0bWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE2ICszMiw2IEBACiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCi0j
aWYgVVNFKERJUkVDVDJEKQotaW50ZXJmYWNlIElEMkQxQml0bWFwOwotaW50ZXJmYWNlIElEMkQx
UmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNlIElEM0QxMURldmljZTE7Ci1pbnRlcmZhY2UgSURYR0lL
ZXllZE11dGV4OwotaW50ZXJmYWNlIElEWEdJU3VyZmFjZTE7Ci0KLSNpbmNsdWRlIDxXZWJDb3Jl
L0NPTVB0ci5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEltYWdlOwog
Y2xhc3MgR3JhcGhpY3NDb250ZXh0OwpAQCAtNTQsOSArNDQsNiBAQCBwdWJsaWM6CiAgICAgc3Ry
dWN0IENvbmZpZ3VyYXRpb24gewogICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRlc3Rp
bmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZTsKICAgICAgICAgYm9vbCBpc09wYXF1ZSB7IGZh
bHNlIH07Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgICAgICBtdXRhYmxlIEhBTkRMRSBzaGFyZWRS
ZXNvdXJjZUhhbmRsZSB7IG51bGxwdHIgfTsKLSNlbmRpZgogCiAgICAgICAgIHZvaWQgZW5jb2Rl
KElQQzo6RW5jb2RlciYpIGNvbnN0OwogICAgICAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJO
IGJvb2wgZGVjb2RlKElQQzo6RGVjb2RlciYsIENvbmZpZ3VyYXRpb24mKTsKQEAgLTEzNywxNCAr
MTI0LDYgQEAgcHVibGljOgogICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNyZWF0ZUNhaXJv
U3VyZmFjZSgpOwogCiAgICAgV2ViQ29yZTo6UGxhdGZvcm1JbWFnZVB0ciBjcmVhdGVQbGF0Zm9y
bUltYWdlKCkgeyByZXR1cm4gY3JlYXRlQ2Fpcm9TdXJmYWNlKCk7IH0KLSNlbGlmIFVTRShESVJF
Q1QyRCkKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNyZWF0ZURpcmVjdDJEU3VyZmFjZShJRDNE
MTFEZXZpY2UxKiwgSUQyRDFSZW5kZXJUYXJnZXQqKTsKLSAgICBJRFhHSVN1cmZhY2UxKiBkeFN1
cmZhY2UoKSB7IHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7IH0KLSAgICB2b2lkIGNyZWF0ZVNoYXJl
ZFJlc291cmNlKCk7Ci0gICAgdm9pZCBkaXNwb3NlU2hhcmVkUmVzb3VyY2UoKTsKLSAgICB2b2lk
IGxlYWtTaGFyZWRSZXNvdXJjZSgpOwotCi0gICAgV2ViQ29yZTo6UGxhdGZvcm1JbWFnZVB0ciBj
cmVhdGVQbGF0Zm9ybUltYWdlKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKIHByaXZh
dGU6CkBAIC0xNzEsMTIgKzE1MCw2IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBt
X3NpemU7CiAgICAgQ29uZmlndXJhdGlvbiBtX2NvbmZpZ3VyYXRpb247CiAKLSNpZiBVU0UoRElS
RUNUMkQpCi0gICAgQ09NUHRyPElEWEdJU3VyZmFjZTE+IG1fc3VyZmFjZTsKLSAgICBDT01QdHI8
SURYR0lLZXllZE11dGV4PiBtX3N1cmZhY2VNdXRleDsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+
IG1fYml0bWFwOwotI2VuZGlmCi0KICNpZiBVU0UoQ0cpCiAgICAgYm9vbCBtX3JlbGVhc2VCaXRt
YXBDb250ZXh0RGF0YUNhbGxlZCB7IGZhbHNlIH07CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAkocmV2
aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1h
cERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDE3OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDExIEJyZW50IEZ1bGdoYW0gPGJmdWxnaGFtQHdlYmtpdC5vcmc+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotCi0jaW5jbHVkZSAiRGVjb2Rl
ci5oIgotI2luY2x1ZGUgIkVuY29kZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEltYWdl
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9ESUJQaXhlbERhdGEuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0RpcmVjdDJET3BlcmF0aW9ucy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGlsaXRp
ZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQuaD4KLSNpbmNsdWRlIDxkMmQxXzEuaD4KLSNpbmNsdWRlIDxkM2Qx
MV8xLmg+Ci0jaW5jbHVkZSA8ZHhnaTFfMi5oPgotI2luY2x1ZGUgPHdpbmNvZGVjLmg+Ci0jaW5j
bHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgotCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLXZvaWQgU2hhcmVhYmxlQml0bWFwOjp2YWxpZGF0ZUNvbmZpZ3Vy
YXRpb24oQ29uZmlndXJhdGlvbiYpCi17Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBzdHJpZGVGb3JX
aWR0aCh1bnNpZ25lZCB3aWR0aCkKLXsKLSAgICBzdGF0aWMgdW5zaWduZWQgYml0c1BlclBpeGVs
ID0gRGlyZWN0MkQ6OmJpdHNQZXJQaXhlbChEaXJlY3QyRDo6d2ljQml0bWFwRm9ybWF0KCkpOwot
ICAgIHJldHVybiBiaXRzUGVyUGl4ZWwgKiB3aWR0aCAvIDg7Ci19Ci0KLUNoZWNrZWRVaW50MzIg
U2hhcmVhYmxlQml0bWFwOjpjYWxjdWxhdGVCeXRlc1BlclJvdyhXZWJDb3JlOjpJbnRTaXplIHNp
emUsIGNvbnN0IENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJuIGNh
bGN1bGF0ZUJ5dGVzUGVyUGl4ZWwoY29uZmlndXJhdGlvbikgKiBzaXplLndpZHRoKCk7Ci19Ci0K
LUNoZWNrZWRVaW50MzIgU2hhcmVhYmxlQml0bWFwOjpjYWxjdWxhdGVCeXRlc1BlclBpeGVsKGNv
bnN0IENvbmZpZ3VyYXRpb24mKQotewotICAgIHJldHVybiA0OwotfQotCi12b2lkIFNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlU2hhcmVkUmVzb3VyY2UoKQotewotICAgIC8vIERvbid0IGNyZWF0ZSBh
IHNoYXJlZCByZXNvdXJjZSBpZiB0aGUgY29uZmlndXJhdGlvbiBpbnN0cnVjdHMgdXMgdG8gdXNl
IGFuIGV4aXN0aW5nIG9uZS4KLSAgICBpZiAobV9jb25maWd1cmF0aW9uLnNoYXJlZFJlc291cmNl
SGFuZGxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N1cmZhY2UgPSBEaXJlY3QyRDo6Y3Jl
YXRlRFhHSVN1cmZhY2VPZlNpemUobV9zaXplLCBudWxscHRyLCB0cnVlKTsKLQotICAgIENPTVB0
cjxJRFhHSVJlc291cmNlMT4gcmVzb3VyY2VEYXRhOwotICAgIEhSRVNVTFQgaHIgPSBtX3N1cmZh
Y2UtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEWEdJUmVzb3VyY2UpLCByZWludGVycHJldF9j
YXN0PHZvaWQqKj4oJnJlc291cmNlRGF0YSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURF
RChocikpOwotCi0gICAgaHIgPSByZXNvdXJjZURhdGEtPkNyZWF0ZVNoYXJlZEhhbmRsZShudWxs
cHRyLCBEWEdJX1NIQVJFRF9SRVNPVVJDRV9SRUFEIHwgRFhHSV9TSEFSRURfUkVTT1VSQ0VfV1JJ
VEUsIG51bGxwdHIsICZtX2NvbmZpZ3VyYXRpb24uc2hhcmVkUmVzb3VyY2VIYW5kbGUpOwotICAg
IFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotfQotCi12b2lkIFNoYXJlYWJsZUJpdG1h
cDo6ZGlzcG9zZVNoYXJlZFJlc291cmNlKCkKLXsKLSAgICBpZiAobV9zdXJmYWNlTXV0ZXgpCi0g
ICAgICAgIG1fc3VyZmFjZU11dGV4LT5SZWxlYXNlU3luYygxKTsKLSAgICBpZiAobV9jb25maWd1
cmF0aW9uLnNoYXJlZFJlc291cmNlSGFuZGxlKQotICAgICAgICA6OkNsb3NlSGFuZGxlKG1fY29u
ZmlndXJhdGlvbi5zaGFyZWRSZXNvdXJjZUhhbmRsZSk7Ci19Ci0KLXZvaWQgU2hhcmVhYmxlQml0
bWFwOjpsZWFrU2hhcmVkUmVzb3VyY2UoKQotewotICAgIG1fY29uZmlndXJhdGlvbi5zaGFyZWRS
ZXNvdXJjZUhhbmRsZSA9IG51bGxwdHI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0Nv
bnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKLXsKLSAgICAv
LyBMb2NrIHRoZSBzdXJmYWNlIHRvIHRoZSBjdXJyZW50IGRldmljZSB3aGlsZSByZW5kZXJpbmcu
Ci0gICAgSFJFU1VMVCBociA9IG1fc3VyZmFjZS0+UXVlcnlJbnRlcmZhY2UoJm1fc3VyZmFjZU11
dGV4KTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICBociA9IG1fc3Vy
ZmFjZU11dGV4LT5BY3F1aXJlU3luYygwLCBJTkZJTklURSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
U1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBhdXRvIHN1cmZhY2VDb250ZXh0ID0gRGlyZWN0MkQ6OmNy
ZWF0ZVN1cmZhY2VSZW5kZXJUYXJnZXQobV9zdXJmYWNlLmdldCgpKTsKLSAgICBpZiAoIXN1cmZh
Y2VDb250ZXh0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBtYWtlVW5p
cXVlPEdyYXBoaWNzQ29udGV4dERpcmVjdDJEPihzdXJmYWNlQ29udGV4dC5nZXQoKSk7Ci19Ci0K
LXZvaWQgU2hhcmVhYmxlQml0bWFwOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEludFBvaW50JiBkc3RQb2ludCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkKLXsKLSAgICBw
YWludChjb250ZXh0LCAxLCBkc3RQb2ludCwgc3JjUmVjdCk7Ci19Ci0KLXZvaWQgU2hhcmVhYmxl
Qml0bWFwOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IHNjYWxlRmFjdG9y
LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpCi17Ci0g
ICAgYXV0byBzdXJmYWNlID0gY3JlYXRlRGlyZWN0MkRTdXJmYWNlKGNvbnRleHQucGxhdGZvcm1D
b250ZXh0KCktPmQzZERldmljZSgpLCBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJU
YXJnZXQoKSk7Ci0KLSNpZm5kZWYgX05ERUJVRwotICAgIGF1dG8gYml0bWFwU2l6ZSA9IHN1cmZh
Y2UtPkdldFBpeGVsU2l6ZSgpOwotICAgIEFTU0VSVChiaXRtYXBTaXplLndpZHRoID09IG1fc2l6
ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQoYml0bWFwU2l6ZS5oZWlnaHQgPT0gbV9zaXplLmhlaWdo
dCgpKTsKLSNlbmRpZgotCi0gICAgRmxvYXRSZWN0IGRlc3RSZWN0KGRzdFBvaW50LCBzcmNSZWN0
LnNpemUoKSk7Ci0gICAgRmxvYXRSZWN0IHNyY1JlY3RTY2FsZWQoc3JjUmVjdCk7Ci0gICAgc3Jj
UmVjdFNjYWxlZC5zY2FsZShzY2FsZUZhY3Rvcik7Ci0KLSAgICBBU1NFUlQoY29udGV4dC5oYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgYXV0byYgc3RhdGUgPSBjb250ZXh0LnN0YXRlKCk7Ci0g
ICAgYXV0byYgcGxhdGZvcm1Db250ZXh0ID0gKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0K
LSAgICBJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zIHsgc3RhdGUuY29tcG9zaXRlT3BlcmF0
b3IsIHN0YXRlLmJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbigpLCBzdGF0ZS5pbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5IH07Ci0gICAgRGlyZWN0MkQ6OmRyYXdQbGF0Zm9ybUltYWdlKHBsYXRm
b3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgbV9zaXplLCBkZXN0UmVjdCwgc3JjUmVjdFNjYWxl
ZCwgb3B0aW9ucywgc3RhdGUuYWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwot
fQotCi1DT01QdHI8SUQyRDFCaXRtYXA+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlRGlyZWN0MkRT
dXJmYWNlKElEM0QxMURldmljZTEqIGRpcmVjdFhEZXZpY2UsIElEMkQxUmVuZGVyVGFyZ2V0KiBy
ZW5kZXJUYXJnZXQpCi17Ci0gICAgaWYgKCFkaXJlY3RYRGV2aWNlKQotICAgICAgICBkaXJlY3RY
RGV2aWNlID0gRGlyZWN0MkQ6OmRlZmF1bHREaXJlY3RYRGV2aWNlKCk7Ci0KLSAgICBpZiAoIW1f
Yml0bWFwKSB7Ci0gICAgICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IHRleHR1cmU7Ci0gICAg
ICAgIEhSRVNVTFQgaHIgPSBkaXJlY3RYRGV2aWNlLT5PcGVuU2hhcmVkUmVzb3VyY2UxKG1fY29u
ZmlndXJhdGlvbi5zaGFyZWRSZXNvdXJjZUhhbmRsZSwgX191dWlkb2YoSUQzRDExVGV4dHVyZTJE
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ0ZXh0dXJlKSk7Ci0gICAgICAgIGlmICghU1VD
Q0VFREVEKGhyKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGhyID0g
dGV4dHVyZS0+UXVlcnlJbnRlcmZhY2UoJm1fc3VyZmFjZSk7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgICAgIC8vIExvY2sgdGhlIHN1cmZhY2UgdG8gdGhl
IGN1cnJlbnQgZGV2aWNlIHdoaWxlIHJlbmRlcmluZy4KLSAgICAgICAgaHIgPSBtX3N1cmZhY2Ut
PlF1ZXJ5SW50ZXJmYWNlKCZtX3N1cmZhY2VNdXRleCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotICAgICAgICBociA9IG1fc3VyZmFjZU11dGV4LT5BY3F1aXJlU3lu
YygxLCBJTkZJTklURSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwot
Ci0gICAgICAgIGF1dG8gYml0bWFwUHJvcGVydGllcyA9IERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0
aWVzKCk7Ci0gICAgICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVTaGFyZWRCaXRtYXAoX191
dWlkb2YoSURYR0lTdXJmYWNlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fc3VyZmFjZS5n
ZXQoKSksICZiaXRtYXBQcm9wZXJ0aWVzLCAmbV9iaXRtYXApOwotICAgICAgICBpZiAoIVNVQ0NF
RURFRChocikpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1
cm4gbV9iaXRtYXA7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVJ
bWFnZSgpCi17Ci0gICAgYXV0byBzdXJmYWNlID0gY3JlYXRlRGlyZWN0MkRTdXJmYWNlKG51bGxw
dHIsIEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpKTsKLSAgICBpZiAoIXN1
cmZhY2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIEJpdG1hcEltYWdl
OjpjcmVhdGUoV1RGTW92ZShzdXJmYWNlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQmFja2luZ1N0b3JlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwCShyZXZpc2lvbiAy
ODc4MTIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwxMSArMjksNiBAQAogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5o
IgogI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRl
IDxkMmQxLmg+Ci0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJL
aXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc4LDEwICsy
NzgsNiBAQAogI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgiCiAjZW5kaWYK
IAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0jZW5kaWYKLQogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpICYmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAjaW5j
bHVkZSAiV2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlclByb3h5LmgiCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyODc4
MTIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtMTgzLDEwICsxODMsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUHJvbWlzZWRBdHRh
Y2htZW50SW5mby5oPgogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQz
RDExRGV2aWNlMTsKLSNlbmRpZgotCiAjaWYgRU5BQkxFKE1FRElBX1VTQUdFKQogI2luY2x1ZGUg
PFdlYkNvcmUvTWVkaWFTZXNzaW9uSWRlbnRpZmllci5oPgogI2VuZGlmCkBAIC0xMDE3LDEwICsx
MDEzLDYgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIFBsYXRmb3JtVmlld1dp
ZGdldCB2aWV3V2lkZ2V0KCk7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIElEM0QxMURldmljZTEq
IGRldmljZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0RGV2aWNlKElEM0QxMURldmljZTEqKTsKLSNl
bmRpZgogI2VuZGlmCiAjaWYgVVNFKExJQldQRSkKICAgICBzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2Vu
ZCogdmlld0JhY2tlbmQoKTsKQEAgLTMxMDUsOSArMzA5Nyw2IEBAIHByaXZhdGU6CiAgICAgUmVm
UHRyPFJlbW90ZU1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yUHJveHk+IG1fbWVkaWFTZXNzaW9uQ29v
cmRpbmF0b3JQcm94eTsKICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJ
RDNEMTFEZXZpY2UxPiBtX2RldmljZTsKLSNlbmRpZgogICAgIGJvb2wgbV9zZXNzaW9uU3RhdGVX
YXNSZXN0b3JlZEJ5QVBJUmVxdWVzdCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzUXVvdGFJbmNy
ZWFzZURlbmllZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzTGF5ZXJUcmVlRnJvemVuRHVlVG9T
d2lwZUFuaW1hdGlvbiB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93
aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHAJ
KG5vbmV4aXN0ZW50KQpAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKLQotI2luY2x1ZGUgIlNoYXJlYWJs
ZUJpdG1hcC5oIgotI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0
MkRVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dERpcmVjdDJE
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oPgotI2luY2x1
ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0jaW5jbHVkZSA8ZHhnaS5oPgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1zdGQ6OnVuaXF1
ZV9wdHI8QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJEPiBCYWNraW5nU3RvcmU6OmNyZWF0ZUJh
Y2tlbmQoKQotewotICAgIHJldHVybiBtYWtlVW5pcXVlPEJhY2tpbmdTdG9yZUJhY2tlbmREaXJl
Y3QyREltcGw+KG1fc2l6ZSwgbV9kZXZpY2VTY2FsZUZhY3RvciwgbV93ZWJQYWdlUHJveHkuZGV2
aWNlKCkpOwotfQotCi12b2lkIEJhY2tpbmdTdG9yZTo6cGFpbnQoRFhDb25uZWN0aW9ucyBkeENv
bm5lY3Rpb25zLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEFTU0VSVChtX2JhY2tlbmQp
OwotICAgIEFTU0VSVChtX2JhY2tlbmQtPnNpemUoKSA9PSBtX3NpemUpOwotCi0gICAgQ09NUHRy
PElEM0QxMVJlc291cmNlPiBiYWNrQnVmZmVyOwotICAgIEhSRVNVTFQgaHIgPSBkeENvbm5lY3Rp
b25zLmJhY2tCdWZmZXItPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEM0QxMVJlc291cmNlKSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZiYWNrQnVmZmVyKSk7Ci0gICAgUkVMRUFTRV9BU1NF
UlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBDT01QdHI8SUQzRDExUmVzb3VyY2U+IGJhY2tpbmdT
dG9yZTsKLSAgICBociA9IG1fYmFja2VuZC0+ZHhTdXJmYWNlKCktPlF1ZXJ5SW50ZXJmYWNlKF9f
dXVpZG9mKElEM0QxMVJlc291cmNlKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZiYWNraW5n
U3RvcmUpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENEM0Qx
MV9CT1ggc3JjQm94KHJlY3QueCgpLCByZWN0LnkoKSwgMCwgcmVjdC54KCkgKyByZWN0LndpZHRo
KCksIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSwgMSk7Ci0gICAgZHhDb25uZWN0aW9ucy5pbW1l
ZGlhdGVDb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24xKGJhY2tCdWZmZXIuZ2V0KCksIDAs
IHJlY3QueCgpLCByZWN0LnkoKSwgMCwgYmFja2luZ1N0b3JlLmdldCgpLCAwLCAmc3JjQm94LCBE
M0QxMV9DT1BZX0RJU0NBUkQpOwotfQotCi12b2lkIEJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVV
cGRhdGUoU2hhcmVhYmxlQml0bWFwKiBiaXRtYXAsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUlu
Zm8pCi17Ci0gICAgaWYgKCFtX2JhY2tlbmQpCi0gICAgICAgIG1fYmFja2VuZCA9IGNyZWF0ZUJh
Y2tlbmQoKTsKLQotICAgIHNjcm9sbCh1cGRhdGVJbmZvLnNjcm9sbFJlY3QsIHVwZGF0ZUluZm8u
c2Nyb2xsT2Zmc2V0KTsKLQotICAgIEludFBvaW50IHVwZGF0ZVJlY3RCb3VuZHNMb2NhdGlvbiA9
IHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy5sb2NhdGlvbigpOwotCi0gICAgQ09NUHRyPElE
MkQxQml0bWFwPiBkZXZpY2VVcGRhdGVCaXRtYXAgPSBiaXRtYXAtPmNyZWF0ZURpcmVjdDJEU3Vy
ZmFjZShtX3dlYlBhZ2VQcm94eS5kZXZpY2UoKSwgbV9iYWNrZW5kLT5yZW5kZXJUYXJnZXQoKSk7
Ci0gICAgaWYgKCFkZXZpY2VVcGRhdGVCaXRtYXApCi0gICAgICAgIHJldHVybjsKLQotI2lmbmRl
ZiBfTkRFQlVHCi0gICAgYXV0byBkZXZpY2VCaXRtYXBTaXplID0gZGV2aWNlVXBkYXRlQml0bWFw
LT5HZXRQaXhlbFNpemUoKTsKLSAgICBBU1NFUlQoZGV2aWNlQml0bWFwU2l6ZS53aWR0aCA9PSB1
cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMud2lkdGgoKSk7Ci0gICAgQVNTRVJUKGRldmljZUJp
dG1hcFNpemUuaGVpZ2h0ID09IHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy5oZWlnaHQoKSk7
Ci0jZW5kaWYKLQotICAgIGZvciAoY29uc3QgYXV0byYgdXBkYXRlUmVjdCA6IHVwZGF0ZUluZm8u
dXBkYXRlUmVjdHMpIHsKLSAgICAgICAgYXV0byBjdXJyZW50UmVjdExvY2F0aW9uID0gSW50U2l6
ZSh1cGRhdGVSZWN0LngoKSAtIHVwZGF0ZVJlY3RCb3VuZHNMb2NhdGlvbi54KCksIHVwZGF0ZVJl
Y3QueSgpIC0gdXBkYXRlUmVjdEJvdW5kc0xvY2F0aW9uLnkoKSk7Ci0gICAgICAgIGF1dG8gZGVz
dFJlY3RMb2NhdGlvbiA9IEludFNpemUodXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpKTsK
LSAgICAgICAgRGlyZWN0MkQ6OmNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoZGV2aWNl
VXBkYXRlQml0bWFwLmdldCgpLCBtX2JhY2tlbmQtPnN1cmZhY2UoKSwgY3VycmVudFJlY3RMb2Nh
dGlvbiwgdXBkYXRlUmVjdCwgZGVzdFJlY3RMb2NhdGlvbik7Ci0gICAgfQotfQotCi12b2lkIEJh
Y2tpbmdTdG9yZTo6c2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNp
emUmIHNjcm9sbE9mZnNldCkKLXsKLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LmlzWmVybygpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9iYWNrZW5kKTsKLSAgICBtX2JhY2tlbmQtPnNj
cm9sbChzY3JvbGxSZWN0LCBzY3JvbGxPZmZzZXQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlX
aW4uY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4v
V2ViUGFnZVByb3h5V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDYgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL1NlYXJjaFBvcHVwTWVudURCLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9V
c2VyQWdlbnQuaD4KIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0j
ZW5kaWYKLQogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpwbGF0Zm9y
bUluaXRpYWxpemUoKQpAQCAtNzksMTggKzc1LDYgQEAgUGxhdGZvcm1WaWV3V2lkZ2V0IFdlYlBh
Z2VQcm94eTo6dmlld1dpZAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50SW1wbCY+
KHBhZ2VDbGllbnQoKSkudmlld1dpZGdldCgpOwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotSUQz
RDExRGV2aWNlMSogV2ViUGFnZVByb3h5OjpkZXZpY2UoKSBjb25zdAotewotICAgIHJldHVybiBt
X2RldmljZS5nZXQoKTsKLX0KLQotdm9pZCBXZWJQYWdlUHJveHk6OnNldERldmljZShJRDNEMTFE
ZXZpY2UxKiBkZXZpY2UpCi17Ci0gICAgbV9kZXZpY2UgPSBkZXZpY2U7Ci19Ci0jZW5kaWYKLQog
dm9pZCBXZWJQYWdlUHJveHk6OmRpc3BhdGNoUGVuZGluZ0NoYXJFdmVudHMoY29uc3QgTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudCYga2V5ZG93bkV2ZW50KQogewogICAgIGF1dG8mIHBlbmRpbmdDaGFy
RXZlbnRzID0ga2V5ZG93bkV2ZW50LnBlbmRpbmdDaGFyRXZlbnRzKCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAJ
KHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1
cE1lbnVQcm94eVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEzICs0NSw2IEBACiAjaW5j
bHVkZSA8d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJEVXRpbGl0
aWVzLmg+Ci0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2luY2x1ZGUgPGRpcmVjdHhjb2xvcnMuaD4g
Ci0jaW5jbHVkZSA8ZHhnaS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTIxNSwxMSArMjA4LDYgQEAgdm9pZCBXZWJQb3B1cE1l
bnVQcm94eVdpbjo6c2hvd1BvcHVwTWVudQogCiAgICAgICAgIGlmICghbV9wb3B1cCkKICAgICAg
ICAgICAgIHJldHVybjsKLQotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgRGlyZWN0MkQ6OmNy
ZWF0ZURldmljZUFuZENvbnRleHQobV9kM2REZXZpY2UsIG1faW1tZWRpYXRlQ29udGV4dCk7Ci0g
ICAgICAgIHNldHVwU3dhcENoYWluKG1fd2luZG93UmVjdC5zaXplKCkpOwotI2VuZGlmCiAgICAg
fQogCiAgICAgQk9PTCBzaG91bGRBbmltYXRlID0gRkFMU0U7CkBAIC04MjgsNyArODE2LDYgQEAg
dm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6cGFpbnQoY29uc3QgSQogICAgIGlmICghbV9wb3B1
cCkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgIVVTRShESVJFQ1QyRCkKICAgICBpZiAoIW1fREMp
IHsKICAgICAgICAgbV9EQyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKEhX
bmREQyhtX3BvcHVwKSkpOwogICAgICAgICBpZiAoIW1fREMpCkBAIC04NTQsMjIgKzg0MSw2IEBA
IHZvaWQgV2ViUG9wdXBNZW51UHJveHlXaW46OnBhaW50KGNvbnN0IEkKICAgICB9CiAKICAgICBH
cmFwaGljc0NvbnRleHRXaW4gY29udGV4dChtX0RDLmdldCgpKTsKLSNlbHNlCi0gICAgQ09NUHRy
PElEM0QxMVRleHR1cmUyRD4gYmFja0J1ZmZlcjsgCi0gICAgSFJFU1VMVCBociA9IG1fc3dhcENo
YWluLT5HZXRCdWZmZXIoMCwgX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKio+KCZiYWNrQnVmZmVyKSk7IAotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElEWEdJU3VyZmFjZTE+IHN1cmZhY2UoUXVlcnks
IGJhY2tCdWZmZXIpOwotICAgIGlmICghc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byByZW5kZXJUYXJnZXQgPSBXZWJDb3JlOjpEaXJlY3QyRDo6Y3JlYXRlU3VyZmFjZVJlbmRl
clRhcmdldChzdXJmYWNlLmdldCgpKTsKLQotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHBs
YXRmb3JtQ29udGV4dChyZW5kZXJUYXJnZXQuZ2V0KCkpOwotICAgIHBsYXRmb3JtQ29udGV4dC5z
ZXREM0REZXZpY2UobV9kM2REZXZpY2UuZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dFdpbiBj
b250ZXh0KCZwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5n
Q29udGV4dFR5cGU6OkdQVU1lbW9yeSk7Ci0jZW5kaWYKIAogICAgIEludFJlY3QgdHJhbnNsYXRl
ZERhbWFnZVJlY3QgPSBkYW1hZ2VSZWN0OwogICAgIHRyYW5zbGF0ZWREYW1hZ2VSZWN0Lm1vdmUo
SW50U2l6ZSgwLCBtX3Njcm9sbE9mZnNldCAqIG1faXRlbUhlaWdodCkpOwpAQCAtODg0LDE1ICs4
NTUsMTAgQEAgdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6cGFpbnQoY29uc3QgSQogICAgIGlm
IChtX3Njcm9sbGJhcikKICAgICAgICAgbV9zY3JvbGxiYXItPnBhaW50KGNvbnRleHQsIGRhbWFn
ZVJlY3QpOwogCi0jaWYgIVVTRShESVJFQ1QyRCkKICAgICBIV25kREMgaFduZERDOwogICAgIEhE
QyBsb2NhbERDID0gaGRjID8gaGRjIDogaFduZERDLnNldEhXbmQobV9wb3B1cCk7CiAKICAgICA6
OkJpdEJsdChsb2NhbERDLCBkYW1hZ2VSZWN0LngoKSwgZGFtYWdlUmVjdC55KCksIGRhbWFnZVJl
Y3Qud2lkdGgoKSwgZGFtYWdlUmVjdC5oZWlnaHQoKSwgbV9EQy5nZXQoKSwgZGFtYWdlUmVjdC54
KCksIGRhbWFnZVJlY3QueSgpLCBTUkNDT1BZKTsKLSNlbHNlCi0gICAgY29udGV4dC5mbHVzaCgp
OwotICAgIG1fc3dhcENoYWluLT5QcmVzZW50KDAsIDApOyAKLSNlbmRpZgogfQogCiBib29sIFdl
YlBvcHVwTWVudVByb3h5V2luOjpzZXRGb2N1c2VkSW5kZXgoaW50IGksIGJvb2wgaG90VHJhY2tp
bmcpCkBAIC05OTUsNDggKzk2MSw2IEBAIGJvb2wgV2ViUG9wdXBNZW51UHJveHlXaW46OnNjcm9s
bFRvUmV2ZWEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi12b2lk
IFdlYlBvcHVwTWVudVByb3h5V2luOjpzZXR1cFN3YXBDaGFpbihjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBzaXplKQotewotICAgIG1fc3dhcENoYWluID0gRGlyZWN0MkQ6OnN3YXBDaGFpbk9mU2l6
ZUZvcldpbmRvd0FuZERldmljZShzaXplLCBtX3BvcHVwLCBtX2QzZERldmljZSk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQobV9zd2FwQ2hhaW4pOwotICAgIGF1dG8gZmFjdG9yeSA9IERpcmVjdDJEOjpm
YWN0b3J5Rm9yRFhHSURldmljZShEaXJlY3QyRDo6dG9EWEdJRGV2aWNlKG1fZDNkRGV2aWNlKSk7
Ci0KLSAgICBmYWN0b3J5LT5NYWtlV2luZG93QXNzb2NpYXRpb24obV9wb3B1cCwgMCk7Ci0gICAg
Y29uZmlndXJlQmFja2luZ1N0b3JlKHNpemUpOwotfQotCi12b2lkIFdlYlBvcHVwTWVudVByb3h5
V2luOjpjb25maWd1cmVCYWNraW5nU3RvcmUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkK
LXsKLSAgICBBU1NFUlQobV9zd2FwQ2hhaW4pOwotICAgIEFTU0VSVChtX2QzZERldmljZSk7Ci0g
ICAgQVNTRVJUKG1faW1tZWRpYXRlQ29udGV4dCk7Ci0KLSAgICAvLyBDcmVhdGUgYSByZW5kZXIg
dGFyZ2V0IHZpZXcgCi0gICAgQ09NUHRyPElEM0QxMVRleHR1cmUyRD4gYmFja0J1ZmZlcjsgCi0g
ICAgSFJFU1VMVCBociA9IG1fc3dhcENoYWluLT5HZXRCdWZmZXIoMCwgX191dWlkb2YoSUQzRDEx
VGV4dHVyZTJEKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZiYWNrQnVmZmVyKSk7IAotICAg
IFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgaHIgPSBtX2QzZERldmljZS0+
Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhiYWNrQnVmZmVyLmdldCgpLCBudWxscHRyLCAmbV9yZW5k
ZXJUYXJnZXRWaWV3KTsgCi0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAg
ICBhdXRvKiByZW5kZXJUYXJnZXRWaWV3ID0gbV9yZW5kZXJUYXJnZXRWaWV3LmdldCgpOwotICAg
IG1faW1tZWRpYXRlQ29udGV4dC0+T01TZXRSZW5kZXJUYXJnZXRzKDEsICZyZW5kZXJUYXJnZXRW
aWV3LCBudWxscHRyKTsKLQotICAgIC8vIFNldHVwIHRoZSB2aWV3cG9ydCAKLSAgICBEM0QxMV9W
SUVXUE9SVCB2aWV3cG9ydDsKLSAgICB2aWV3cG9ydC5XaWR0aCA9IChGTE9BVClzaXplLndpZHRo
KCk7Ci0gICAgdmlld3BvcnQuSGVpZ2h0ID0gKEZMT0FUKXNpemUuaGVpZ2h0KCk7Ci0gICAgdmll
d3BvcnQuTWluRGVwdGggPSAwLjBmOwotICAgIHZpZXdwb3J0Lk1heERlcHRoID0gMS4wZjsKLSAg
ICB2aWV3cG9ydC5Ub3BMZWZ0WCA9IDA7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFkgPSAwOwotICAg
IG1faW1tZWRpYXRlQ29udGV4dC0+UlNTZXRWaWV3cG9ydHMoMSwgJnZpZXdwb3J0KTsKLQotICAg
IG1faW1tZWRpYXRlQ29udGV4dC0+Q2xlYXJSZW5kZXJUYXJnZXRWaWV3KG1fcmVuZGVyVGFyZ2V0
Vmlldy5nZXQoKSwgRGlyZWN0WDo6Q29sb3JzOjpCbGFuY2hlZEFsbW9uZCk7IAotfQotI2VuZGlm
Ci0KIFN0cmluZyBXZWJQb3B1cE1lbnVQcm94eVdpbjo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIldlYlBvcHVwTWVudVByb3h5V2luIDB4IiwgaGV4
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4u
aAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBv
cHVwTWVudVByb3h5V2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEzICszMyw2IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9TY3JvbGxhYmxlQXJlYS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xs
YmFyLmg+CiAKLSNpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQzRDExRGV2aWNlMTsKLWlu
dGVyZmFjZSBJRDNEMTFEZXZpY2VDb250ZXh0MTsKLWludGVyZmFjZSBJRDNEMTFSZW5kZXJUYXJn
ZXRWaWV3OwotaW50ZXJmYWNlIElEWEdJU3dhcENoYWluOwotI2VuZGlmCi0KIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBjbGFzcyBXZWJWaWV3OwpAQCAtMTMxLDIzICsxMjQsMTIgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGluY3JlbWVudFdoZWVsRGVsdGEoaW50IGRlbHRhKTsKICAgICB2b2lkIHJlZHVj
ZVdoZWVsRGVsdGEoaW50IGRlbHRhKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIHNl
dHVwU3dhcENoYWluKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSAgICB2b2lkIGNvbmZpZ3Vy
ZUJhY2tpbmdTdG9yZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0jZW5kaWYKLQogICAgIFdl
YlZpZXcqIG1fd2ViVmlldzsKICAgICBWZWN0b3I8V2ViUG9wdXBJdGVtPiBtX2l0ZW1zOwogICAg
IFBsYXRmb3JtUG9wdXBNZW51RGF0YSBtX2RhdGE7CiAgICAgaW50IG1fbmV3U2VsZWN0ZWRJbmRl
eCB7IDAgfTsKIAogICAgIFJlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IG1fc2Nyb2xsYmFyOwot
I2lmIFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8SUQzRDExRGV2aWNlMT4gbV9kM2REZXZpY2U7
Ci0gICAgQ09NUHRyPElEM0QxMURldmljZUNvbnRleHQxPiBtX2ltbWVkaWF0ZUNvbnRleHQ7Ci0g
ICAgQ09NUHRyPElEM0QxMVJlbmRlclRhcmdldFZpZXc+IG1fcmVuZGVyVGFyZ2V0VmlldzsgCi0g
ICAgQ09NUHRyPElEWEdJU3dhcENoYWluPiBtX3N3YXBDaGFpbjsKLSNlbmRpZgogICAgIEdESU9i
amVjdDxIREM+IG1fREM7CiAgICAgR0RJT2JqZWN0PEhCSVRNQVA+IG1fYm1wOwogICAgIEhXTkQg
bV9wb3B1cCB7IG51bGxwdHIgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9X
ZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2Vi
Vmlldy5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dp
bi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTQgKzY4LDYgQEAKICNpbmNsdWRl
IDxjYWlyby5oPgogI2VuZGlmIAogCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPFdlYkNv
cmUvRGlyZWN0MkRVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0jaW5jbHVkZSA8
ZGlyZWN0eGNvbG9ycy5oPiAKLSNpbmNsdWRlIDxkeGdpLmg+Ci0jZW5kaWYKLQotCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0yNDMsMTEgKzIzNSw2
IEBAIFdlYlZpZXc6OldlYlZpZXcoUkVDVCByZWN0LCBjb25zdCBBUEk6OlAKICAgICBtX3BhZ2Ut
PmluaXRpYWxpemVXZWJQYWdlKCk7CiAKICAgICBJbnRTaXplIHdpbmRvd1NpemUocmVjdC5yaWdo
dCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCk7Ci0jaWYgVVNFKERJUkVDVDJE
KQotICAgIERpcmVjdDJEOjpjcmVhdGVEZXZpY2VBbmRDb250ZXh0KG1fZDNkRGV2aWNlLCBtX2lt
bWVkaWF0ZUNvbnRleHQpOwotICAgIG1fcGFnZS0+c2V0RGV2aWNlKG1fZDNkRGV2aWNlLmdldCgp
KTsKLSAgICBzZXR1cFN3YXBDaGFpbih3aW5kb3dTaXplKTsKLSNlbmRpZgogCiAgICAgaWYgKG1f
cGFnZS0+ZHJhd2luZ0FyZWEoKSkKICAgICAgICAgbV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5zZXRT
aXplKHdpbmRvd1NpemUpOwpAQCAtNTczLDIxICs1NjAsNiBAQCBMUkVTVUxUIFdlYlZpZXc6Om9u
U2l6ZUV2ZW50KEhXTkQgaHduZCwgCiAgICAgICAgIG1fbmV4dFJlc2l6ZVNjcm9sbE9mZnNldCA9
IEludFNpemUoKTsKICAgICB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgaWYgKG1fc3dhcENo
YWluKSB7Ci0gICAgICAgIG1faW1tZWRpYXRlQ29udGV4dC0+T01TZXRSZW5kZXJUYXJnZXRzKDAs
IG51bGxwdHIsIG51bGxwdHIpOwotCi0gICAgICAgIG1fcmVuZGVyVGFyZ2V0VmlldyA9IG51bGxw
dHI7Ci0KLSAgICAgICAgLy8gUHJlc2VydmUgdGhlIGV4aXN0aW5nIGJ1ZmZlciBjb3VudCAocGFz
cyB6ZXJvIGZvciBjb3VudCkgYW5kIGZvcm1hdCAoYnkgcGFzc2luZyBEWEdJX0ZPUk1BVF9VTktO
T1dOKS4KLSAgICAgICAgLy8gQXV0b21hdGljYWxseSBjaG9vc2UgdGhlIHdpZHRoIGFuZCBoZWln
aHQgdG8gbWF0Y2ggdGhlIGNsaWVudCByZWN0IGZvciB0aGUgYmFja2luZyB3aW5kb3cgKHBhc3Mg
emVyb3MgZm9yIHdpZHRoL2hlaWdodCkuCi0gICAgICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFp
bi0+UmVzaXplQnVmZmVycygwLCAwLCAwLCBEWEdJX0ZPUk1BVF9VTktOT1dOLCBEWEdJX1NXQVBf
Q0hBSU5fRkxBR19HRElfQ09NUEFUSUJMRSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NF
RURFRChocikpOwotCi0gICAgICAgIGNvbmZpZ3VyZUJhY2tpbmdTdG9yZSh3aW5kb3dTaXplKTsK
LSAgICB9Ci0jZW5kaWYKLQogICAgIGhhbmRsZWQgPSB0cnVlOwogICAgIHJldHVybiAwOwogfQpA
QCAtOTc0LDUwICs5NDYsNCBAQCB2b2lkIFdlYlZpZXc6OnNldFRvb2xUaXAoY29uc3QgU3RyaW5n
JiB0CiAgICAgOjpTZW5kTWVzc2FnZShtX3Rvb2xUaXBXaW5kb3csIFRUTV9BQ1RJVkFURSwgIXRv
b2xUaXAuaXNFbXB0eSgpLCAwKTsKIH0KIAotI2lmIFVTRShESVJFQ1QyRCkKLXZvaWQgV2ViVmll
dzo6c2V0dXBTd2FwQ2hhaW4oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBp
ZiAoIW1fZDNkRGV2aWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N3YXBDaGFpbiA9IERp
cmVjdDJEOjpzd2FwQ2hhaW5PZlNpemVGb3JXaW5kb3dBbmREZXZpY2Uoc2l6ZSwgbV93aW5kb3cs
IG1fZDNkRGV2aWNlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3N3YXBDaGFpbik7Ci0KLSAgICBh
dXRvIGZhY3RvcnkgPSBEaXJlY3QyRDo6ZmFjdG9yeUZvckRYR0lEZXZpY2UoRGlyZWN0MkQ6OnRv
RFhHSURldmljZShtX2QzZERldmljZSkpOwotCi0gICAgZmFjdG9yeS0+TWFrZVdpbmRvd0Fzc29j
aWF0aW9uKG1fd2luZG93LCAwKTsKLSAgICBjb25maWd1cmVCYWNraW5nU3RvcmUoc2l6ZSk7Ci19
Ci0KLXZvaWQgV2ViVmlldzo6Y29uZmlndXJlQmFja2luZ1N0b3JlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNpemUpCi17Ci0gICAgQVNTRVJUKG1fc3dhcENoYWluKTsKLSAgICBBU1NFUlQobV9k
M2REZXZpY2UpOwotICAgIEFTU0VSVChtX2ltbWVkaWF0ZUNvbnRleHQpOwotCi0gICAgLy8gQ3Jl
YXRlIGEgcmVuZGVyIHRhcmdldCB2aWV3IAotICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IGJh
Y2tCdWZmZXI7IAotICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9f
dXVpZG9mKElEM0QxMVRleHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja0J1
ZmZlcikpOyAKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0g
bV9kM2REZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcoYmFja0J1ZmZlci5nZXQoKSwgbnVs
bHB0ciwgJm1fcmVuZGVyVGFyZ2V0Vmlldyk7IAotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURF
RChocikpOwotCi0gICAgYXV0byogcmVuZGVyVGFyZ2V0VmlldyA9IG1fcmVuZGVyVGFyZ2V0Vmll
dy5nZXQoKTsKLSAgICBtX2ltbWVkaWF0ZUNvbnRleHQtPk9NU2V0UmVuZGVyVGFyZ2V0cygxLCAm
cmVuZGVyVGFyZ2V0VmlldywgbnVsbHB0cik7Ci0KLSAgICAvLyBTZXR1cCB0aGUgdmlld3BvcnQg
Ci0gICAgRDNEMTFfVklFV1BPUlQgdmlld3BvcnQ7Ci0gICAgdmlld3BvcnQuV2lkdGggPSAoRkxP
QVQpc2l6ZS53aWR0aCgpOwotICAgIHZpZXdwb3J0LkhlaWdodCA9IChGTE9BVClzaXplLmhlaWdo
dCgpOwotICAgIHZpZXdwb3J0Lk1pbkRlcHRoID0gMC4wZjsKLSAgICB2aWV3cG9ydC5NYXhEZXB0
aCA9IDEuMGY7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFggPSAwOwotICAgIHZpZXdwb3J0LlRvcExl
ZnRZID0gMDsKLSAgICBtX2ltbWVkaWF0ZUNvbnRleHQtPlJTU2V0Vmlld3BvcnRzKDEsICZ2aWV3
cG9ydCk7Ci0KLSAgICBtX2ltbWVkaWF0ZUNvbnRleHQtPkNsZWFyUmVuZGVyVGFyZ2V0Vmlldyht
X3JlbmRlclRhcmdldFZpZXcuZ2V0KCksIERpcmVjdFg6OkNvbG9yczo6TWlkbmlnaHRCbHVlKTsg
Ci19Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3dpbi9XZWJWaWV3LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSw2IEBA
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLSNp
ZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQzRDExRGV2aWNlMTsKLWludGVyZmFjZSBJRDNE
MTFEZXZpY2VDb250ZXh0MTsKLWludGVyZmFjZSBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3OwotaW50
ZXJmYWNlIElEWEdJU3dhcENoYWluOwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEludFNpemU7CiB9CkBAIC04MywxMSArNzYsNiBAQCBwdWJsaWM6CiAKICAgICBEcmF3aW5n
QXJlYVByb3h5KiBkcmF3aW5nQXJlYSgpIHsgcmV0dXJuIHBhZ2UoKSA/IHBhZ2UoKS0+ZHJhd2lu
Z0FyZWEoKSA6IG51bGxwdHI7IH0KIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBJRDNEMTFEZXZp
Y2UxKiBkM2REZXZpY2UoKSBjb25zdCB7IHJldHVybiBtX2QzZERldmljZS5nZXQoKTsgfQotICAg
IElEM0QxMURldmljZUNvbnRleHQxKiBkM2RJbW1lZGlhdGVDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9pbW1lZGlhdGVDb250ZXh0LmdldCgpOyB9Ci0jZW5kaWYKLQogcHJpdmF0ZToKICAgICBX
ZWJWaWV3KFJFQ1QsIGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mLCBIV05EIHBhcmVudFdp
bmRvdyk7CiAKQEAgLTE0NCwxMSArMTMyLDYgQEAgcHJpdmF0ZToKICAgICAvLyBXZWJDb3JlOjpX
aW5kb3dNZXNzYWdlTGlzdGVuZXIKICAgICB2aXJ0dWFsIHZvaWQgd2luZG93UmVjZWl2ZWRNZXNz
YWdlKEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0pOwogCi0jaWYgVVNFKERJUkVD
VDJEKQotICAgIHZvaWQgc2V0dXBTd2FwQ2hhaW4oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwot
ICAgIHZvaWQgY29uZmlndXJlQmFja2luZ1N0b3JlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsK
LSNlbmRpZgotCiAgICAgSFdORCBtX3dpbmRvdyB7IG51bGxwdHIgfTsKICAgICBIV05EIG1fdG9w
TGV2ZWxQYXJlbnRXaW5kb3cgeyBudWxscHRyIH07CiAgICAgSFdORCBtX3Rvb2xUaXBXaW5kb3cg
eyBudWxscHRyIH07CkBAIC0xNjgsMTIgKzE1MSw2IEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViS2l0OjpQYWdlQ2xpZW50SW1wbD4gbV9wYWdlQ2xpZW50OwogICAgIFJlZlB0
cjxXZWJQYWdlUHJveHk+IG1fcGFnZTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElE
M0QxMURldmljZTE+IG1fZDNkRGV2aWNlOwotICAgIENPTVB0cjxJRDNEMTFEZXZpY2VDb250ZXh0
MT4gbV9pbW1lZGlhdGVDb250ZXh0OwotICAgIENPTVB0cjxJRDNEMTFSZW5kZXJUYXJnZXRWaWV3
PiBtX3JlbmRlclRhcmdldFZpZXc7IAotICAgIENPTVB0cjxJRFhHSVN3YXBDaGFpbj4gbV9zd2Fw
Q2hhaW47Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVudS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBvcHVw
TWVudS5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTIg
KzExNSw2IEBAIHZvaWQgV2ViUG9wdXBNZW51OjpzaG93KGNvbnN0IEludFJlY3QmIHIKICAgICBz
ZXRVcFBsYXRmb3JtRGF0YShwYWdlQ29vcmRpbmF0ZXMsIHBsYXRmb3JtRGF0YSk7CiAKICAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dQb3B1cE1lbnUocGFnZUNvb3JkaW5hdGVzLCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4obV9wb3B1cENsaWVudC0+bWVudVN0eWxlKCkudGV4dERpcmVjdGlv
bigpKSwgaXRlbXMsIHNlbGVjdGVkSW5kZXgsIHBsYXRmb3JtRGF0YSksIG1fcGFnZS0+aWRlbnRp
ZmllcigpKTsKLQotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAvLyBEb24ndCBkZXN0cm95IHRoZSBz
aGFyZWQgaGFuZGxlIGluIHRoZSBXZWJDb250ZW50IHByb2Nlc3MuIEl0IHdpbGwgYmUgZGVzdHJv
eWVkIGluIHRoZSBVSVByb2Nlc3MuCi0gICAgcGxhdGZvcm1EYXRhLm1fbm90U2VsZWN0ZWRCYWNr
aW5nU3RvcmUtPmxlYWtTaGFyZWRSZXNvdXJjZSgpOwotICAgIHBsYXRmb3JtRGF0YS5tX3NlbGVj
dGVkQmFja2luZ1N0b3JlLT5sZWFrU2hhcmVkUmVzb3VyY2UoKTsKLSNlbmRpZgogfQogCiB2b2lk
IFdlYlBvcHVwTWVudTo6aGlkZSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9GaW5kQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1MSwxMCArMzUxLDYgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6Z2V0SW1h
Z2VGb3JGaW5kTWF0YwogICAgICAgICByZXR1cm47CiAKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkR2V0SW1hZ2VGb3JGaW5kTWF0Y2goaGFuZGxlLCBtYXRj
aEluZGV4KSk7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIC8vIERvbid0IGRlc3Ryb3kgdGhlIHNo
YXJlZCBoYW5kbGUgaW4gdGhlIFdlYkNvbnRlbnQgcHJvY2Vzcy4gSXQgd2lsbCBiZSBkZXN0cm95
ZWQgaW4gdGhlIFVJUHJvY2Vzcy4KLSAgICBzZWxlY3Rpb25TbmFwc2hvdC0+bGVha1NoYXJlZFJl
c291cmNlKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBGaW5kQ29udHJvbGxlcjo6c2VsZWN0RmluZE1h
dGNoKHVpbnQzMl90IG1hdGNoSW5kZXgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGlj
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCShyZXZp
c2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDE0ICs0Myw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpb24uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaD4KLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8
ZDNkMTFfMS5oPgotI2VuZGlmCi0KLQogI2lmIFVTRShHTElCX0VWRU5UX0xPT1ApCiAjaW5jbHVk
ZSA8d3RmL2dsaWIvUnVuTG9vcFNvdXJjZVByaW9yaXR5Lmg+CiAjZW5kaWYKQEAgLTg2MiwxMCAr
ODU0LDYgQEAgdm9pZCBEcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3M6OmRpcwogICAgICAg
ICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RzLmFwcGVuZChyZWN0KTsKICAgICB9CiAKLSNpZiBVU0Uo
RElSRUNUMkQpCi0gICAgYml0bWFwLT5sZWFrU2hhcmVkUmVzb3VyY2UoKTsgLy8gSXQgd2lsbCBi
ZSBkZXN0cm95ZWQgaW4gdGhlIFVJUHJvY2Vzcy4KLSNlbmRpZgotCiAgICAgbV93ZWJQYWdlLmRp
ZFVwZGF0ZVJlbmRlcmluZygpOwogCiAgICAgLy8gTGF5b3V0IGNhbiB0cmlnZ2VyIG1vcmUgY2Fs
bHMgdG8gc2V0TmVlZHNEaXNwbGF5IGFuZCB3ZSBkb24ndCB3YW50IHRvIHByb2Nlc3MgdGhlbQpJ
bmRleDogU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJL
aXRMZWdhY3kvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjIt
MDEtMDcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBz
dXBwb3J0IGZvciBEaXJlY3QyRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjM0OTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFrZTogUmVtb3ZlZC4KKwogMjAyMi0wMS0wNyAg
QWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJldmVydGluZyByMjg3Njk4LgpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9Q
bGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L1BsYXRm
b3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L1Bs
YXRmb3JtRlRXLmNtYWtlCShub25leGlzdGVudCkKQEAgLTEsNDM4ICswLDAgQEAKLWFkZF9kZWZp
bml0aW9ucygtRFVTRV9ESVJFQ1QyRD0xIC1EVVNFX0NVUkw9MSAtRFdFQktJVF9FWFBPUlRTPTEp
Ci1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCi0g
ICAgIiR7V0VCS0lUX0xJQlJBUklFU19ESVJ9L2luY2x1ZGUiCi0pCi1saXN0KEFQUEVORCBXZWJL
aXRMZWdhY3lfU09VUkNFU19DbGFzc2VzCi0gICAgd2luL1dlYkRvd25sb2FkQ1VSTC5jcHAKLSAg
ICB3aW4vV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTZW5kZXJDVVJMLmNwcAotKQotbGlz
dChBUFBFTkQgV2ViS2l0TGVnYWN5X1BSSVZBVEVfTElCUkFSSUVTCi0gICAgT3BlblNTTDo6U1NM
Ci0gICAgRDNEMTEubGliCi0gICAgRHhnaS5saWIKLSAgICBtZnV1aWQubGliCi0gICAgc3RybWlp
ZHMubGliCi0pCi0KLWFkZF9jdXN0b21fY29tbWFuZCgKLSAgICBPVVRQVVQgJHtXZWJLaXRMZWdh
Y3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2ViS2l0VmVyc2lvbi5oCi0gICAgTUFJTl9ERVBFTkRF
TkNZICR7V0VCS0lUTEVHQUNZX0RJUn0vc2NyaXB0cy9nZW5lcmF0ZS13ZWJraXR2ZXJzaW9uLnBs
Ci0gICAgREVQRU5EUyAke1dFQktJVExFR0FDWV9ESVJ9L21hYy9Db25maWd1cmF0aW9ucy9WZXJz
aW9uLnhjY29uZmlnCi0gICAgQ09NTUFORCAke1BFUkxfRVhFQ1VUQUJMRX0gJHtXRUJLSVRMRUdB
Q1lfRElSfS9zY3JpcHRzL2dlbmVyYXRlLXdlYmtpdHZlcnNpb24ucGwgLS1jb25maWcgJHtXRUJL
SVRMRUdBQ1lfRElSfS9tYWMvQ29uZmlndXJhdGlvbnMvVmVyc2lvbi54Y2NvbmZpZyAtLW91dHB1
dERpciAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfQotICAgIFZFUkJBVElNKQot
bGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X1NPVVJDRVMgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9T
T1VSQ0VTX0RJUn0vV2ViS2l0VmVyc2lvbi5oKQotCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lf
UFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgIiR7Q01BS0VfQklOQVJZX0RJUn0vLi4v
aW5jbHVkZS9wcml2YXRlIgotICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9Ly4uL2luY2x1ZGUvcHJp
dmF0ZS9KYXZhU2NyaXB0Q29yZSIKLSAgICAiJHtDTUFLRV9CSU5BUllfRElSfS8uLi9pbmNsdWRl
L3ByaXZhdGUvV2ViQ29yZSIKLSAgICAiJHtXRUJLSVRMRUdBQ1lfRElSfS93aW4iCi0gICAgIiR7
V0VCS0lUTEVHQUNZX0RJUn0vd2luL1dlYkNvcmVTdXBwb3J0IgotICAgICIke1dlYktpdExlZ2Fj
eV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbmNsdWRlIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJ
VkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzIgotKQotCi1saXN0KEFQUEVORCBXZWJLaXRMZWdh
Y3lfSU5DTFVERVMKLSAgICB3aW4vQ0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcuaAotICAgIHdpbi9D
T01FbnVtVmFyaWFudC5oCi0gICAgd2luL0NPTVByb3BlcnR5QmFnLmgKLSAgICB3aW4vQ09NVmFy
aWFudFNldHRlci5oCi0gICAgd2luL0NvZGVBbmFseXNpc0NvbmZpZy5oCi0gICAgd2luL0RPTUNT
U0NsYXNzZXMuaAotICAgIHdpbi9ET01Db3JlQ2xhc3Nlcy5oCi0gICAgd2luL0RPTUV2ZW50c0Ns
YXNzZXMuaAotICAgIHdpbi9ET01IVE1MQ2xhc3Nlcy5oCi0gICAgd2luL0RlZmF1bHREb3dubG9h
ZERlbGVnYXRlLmgKLSAgICB3aW4vRGVmYXVsdFBvbGljeURlbGVnYXRlLmgKLSAgICB3aW4vRm9y
RWFjaENvQ2xhc3MuaAotICAgIHdpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmgKLSAgICB3
aW4vTWFyc2hhbGxpbmdIZWxwZXJzLmgKLSAgICB3aW4vTWVtb3J5U3RyZWFtLmgKLSAgICB3aW4v
UHJvZ0lETWFjcm9zLmgKLSAgICB3aW4vV2ViQWN0aW9uUHJvcGVydHlCYWcuaAotICAgIHdpbi9X
ZWJBcHBsaWNhdGlvbkNhY2hlLmgKLSAgICB3aW4vV2ViQXJjaGl2ZS5oCi0gICAgd2luL1dlYkJh
Y2tGb3J3YXJkTGlzdC5oCi0gICAgd2luL1dlYkNhY2hlLmgKLSAgICB3aW4vV2ViQ2FjaGVkRnJh
bWVQbGF0Zm9ybURhdGEuaAotICAgIHdpbi9XZWJDb3JlU3RhdGlzdGljcy5oCi0gICAgd2luL1dl
YkRhdGFTb3VyY2UuaAotICAgIHdpbi9XZWJEYXRhYmFzZU1hbmFnZXIuaAotICAgIHdpbi9XZWJE
b2N1bWVudExvYWRlci5oCi0gICAgd2luL1dlYkRvd25sb2FkLmgKLSAgICB3aW4vV2ViRHJvcFNv
dXJjZS5oCi0gICAgd2luL1dlYkVsZW1lbnRQcm9wZXJ0eUJhZy5oCi0gICAgd2luL1dlYkVycm9y
LmgKLSAgICB3aW4vV2ViRnJhbWUuaAotICAgIHdpbi9XZWJGcmFtZVBvbGljeUxpc3RlbmVyLmgK
LSAgICB3aW4vV2ViR2VvbG9jYXRpb25Qb2xpY3lMaXN0ZW5lci5oCi0gICAgd2luL1dlYkdlb2xv
Y2F0aW9uUG9zaXRpb24uaAotICAgIHdpbi9XZWJIVE1MUmVwcmVzZW50YXRpb24uaAotICAgIHdp
bi9XZWJIaXN0b3J5LmgKLSAgICB3aW4vV2ViSGlzdG9yeUl0ZW0uaAotICAgIHdpbi9XZWJKYXZh
U2NyaXB0Q29sbGVjdG9yLmgKLSAgICB3aW4vV2ViS2l0Q09NQVBJLmgKLSAgICB3aW4vV2ViS2l0
Q2xhc3NGYWN0b3J5LmgKLSAgICB3aW4vV2ViS2l0RExMLmgKLSAgICB3aW4vV2ViS2l0R3JhcGhp
Y3MuaAotICAgIHdpbi9XZWJLaXRMb2dnaW5nLmgKLSAgICB3aW4vV2ViS2l0U3RhdGlzdGljcy5o
Ci0gICAgd2luL1dlYktpdFN0YXRpc3RpY3NQcml2YXRlLmgKLSAgICB3aW4vV2ViS2l0U3lzdGVt
Qml0cy5oCi0gICAgd2luL1dlYkxvY2FsaXphYmxlU3RyaW5ncy5oCi0gICAgd2luL1dlYk11dGFi
bGVVUkxSZXF1ZXN0LmgKLSAgICB3aW4vV2ViTmF2aWdhdGlvbkRhdGEuaAotICAgIHdpbi9XZWJO
b3RpZmljYXRpb24uaAotICAgIHdpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIuaAotICAgIHdpbi9X
ZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAotICAgIHdpbi9XZWJQcmVmZXJlbmNlcy5oCi0gICAg
d2luL1dlYlJlc291cmNlLmgKLSAgICB3aW4vV2ViU2NyaXB0T2JqZWN0LmgKLSAgICB3aW4vV2Vi
U2NyaXB0V29ybGQuaAotICAgIHdpbi9XZWJTZWN1cml0eU9yaWdpbi5oCi0gICAgd2luL1dlYlNl
cmlhbGl6ZWRKU1ZhbHVlLmgKLSAgICB3aW4vV2ViVGV4dFJlbmRlcmVyLmgKLSAgICB3aW4vV2Vi
VVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaAotICAgIHdpbi9XZWJVUkxBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZVNlbmRlci5oCi0gICAgd2luL1dlYlVSTENyZWRlbnRpYWwuaAotICAgIHdpbi9X
ZWJVUkxQcm90ZWN0aW9uU3BhY2UuaAotICAgIHdpbi9XZWJVUkxSZXNwb25zZS5oCi0gICAgd2lu
L1dlYlVzZXJDb250ZW50VVJMUGF0dGVybi5oCi0gICAgd2luL1dlYlZpZXcuaAotICAgIHdpbi9X
ZWJXb3JrZXJzUHJpdmF0ZS5oCi0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VT
X0NsYXNzZXMKLSAgICB3aW4vQWNjZXNzaWJsZUJhc2UuY3BwCi0gICAgd2luL0FjY2Vzc2libGVE
b2N1bWVudC5jcHAKLSAgICB3aW4vQWNjZXNzaWJsZUltYWdlLmNwcAotICAgIHdpbi9BY2Nlc3Np
YmxlVGV4dEltcGwuY3BwCi0gICAgd2luL0JhY2tGb3J3YXJkTGlzdC5jcHAKLSAgICB3aW4vQ0ZE
aWN0aW9uYXJ5UHJvcGVydHlCYWcuY3BwCi0gICAgd2luL0RPTUNTU0NsYXNzZXMuY3BwCi0gICAg
d2luL0RPTUNvcmVDbGFzc2VzLmNwcAotICAgIHdpbi9ET01FdmVudHNDbGFzc2VzLmNwcAotICAg
IHdpbi9ET01IVE1MQ2xhc3Nlcy5jcHAKLSAgICB3aW4vRGVmYXVsdERvd25sb2FkRGVsZWdhdGUu
Y3BwCi0gICAgd2luL0RlZmF1bHRQb2xpY3lEZWxlZ2F0ZS5jcHAKLSAgICB3aW4vRm9yRWFjaENv
Q2xhc3MuY3BwCi0gICAgd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwCi0gICAgd2lu
L01hcnNoYWxsaW5nSGVscGVycy5jcHAKLSAgICB3aW4vTWVtb3J5U3RyZWFtLmNwcAotICAgIHdp
bi9XZWJBY3Rpb25Qcm9wZXJ0eUJhZy5jcHAKLSAgICB3aW4vV2ViQXBwbGljYXRpb25DYWNoZS5j
cHAKLSAgICB3aW4vV2ViQXJjaGl2ZS5jcHAKLSAgICB3aW4vV2ViQmFja0ZvcndhcmRMaXN0LmNw
cAotICAgIHdpbi9XZWJDYWNoZS5jcHAKLSAgICB3aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCi0g
ICAgd2luL1dlYkRhdGFTb3VyY2UuY3BwCi0gICAgd2luL1dlYkRhdGFiYXNlTWFuYWdlci5jcHAK
LSAgICB3aW4vV2ViRG9jdW1lbnRMb2FkZXIuY3BwCi0gICAgd2luL1dlYkRvd25sb2FkLmNwcAot
ICAgIHdpbi9XZWJEcm9wU291cmNlLmNwcAotICAgIHdpbi9XZWJFbGVtZW50UHJvcGVydHlCYWcu
Y3BwCi0gICAgd2luL1dlYkVycm9yLmNwcAotICAgIHdpbi9XZWJGcmFtZS5jcHAKLSAgICB3aW4v
V2ViRnJhbWVQb2xpY3lMaXN0ZW5lci5jcHAKLSAgICB3aW4vV2ViR2VvbG9jYXRpb25Qb2xpY3lM
aXN0ZW5lci5jcHAKLSAgICB3aW4vV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5jcHAKLSAgICB3aW4v
V2ViSFRNTFJlcHJlc2VudGF0aW9uLmNwcAotICAgIHdpbi9XZWJIaXN0b3J5LmNwcAotICAgIHdp
bi9XZWJIaXN0b3J5SXRlbS5jcHAKLSAgICB3aW4vV2ViSW5zcGVjdG9yLmNwcAotICAgIHdpbi9X
ZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmNwcAotICAgIHdpbi9XZWJLaXRDT01BUEkuY3BwCi0gICAg
d2luL1dlYktpdENsYXNzRmFjdG9yeS5jcHAKLSAgICB3aW4vV2ViS2l0RExMLmNwcAotICAgIHdp
bi9XZWJLaXRMb2dnaW5nLmNwcAotICAgIHdpbi9XZWJLaXRNZXNzYWdlTG9vcC5jcHAKLSAgICB3
aW4vV2ViS2l0U3RhdGlzdGljcy5jcHAKLSAgICB3aW4vV2ViS2l0U3lzdGVtQml0cy5jcHAKLSAg
ICB3aW4vV2ViTG9jYWxpemFibGVTdHJpbmdzLmNwcAotICAgIHdpbi9XZWJNdXRhYmxlVVJMUmVx
dWVzdC5jcHAKLSAgICB3aW4vV2ViTmF2aWdhdGlvbkRhdGEuY3BwCi0gICAgd2luL1dlYk5vZGVI
aWdobGlnaHQuY3BwCi0gICAgd2luL1dlYk5vdGlmaWNhdGlvbi5jcHAKLSAgICB3aW4vV2ViTm90
aWZpY2F0aW9uQ2VudGVyLmNwcAotICAgIHdpbi9XZWJQcmVmZXJlbmNlcy5jcHAKLSAgICB3aW4v
V2ViUmVzb3VyY2UuY3BwCi0gICAgd2luL1dlYlNjcmlwdE9iamVjdC5jcHAKLSAgICB3aW4vV2Vi
U2NyaXB0V29ybGQuY3BwCi0gICAgd2luL1dlYlNlY3VyaXR5T3JpZ2luLmNwcAotICAgIHdpbi9X
ZWJTZXJpYWxpemVkSlNWYWx1ZS5jcHAKLSAgICB3aW4vV2ViVGV4dFJlbmRlcmVyLmNwcAotICAg
IHdpbi9XZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5jcHAKLSAgICB3aW4vV2ViVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VTZW5kZXIuY3BwCi0gICAgd2luL1dlYlVSTENyZWRlbnRpYWwu
Y3BwCi0gICAgd2luL1dlYlVSTFByb3RlY3Rpb25TcGFjZS5jcHAKLSAgICB3aW4vV2ViVVJMUmVz
cG9uc2UuY3BwCi0gICAgd2luL1dlYlVzZXJDb250ZW50VVJMUGF0dGVybi5jcHAKLSAgICB3aW4v
V2ViVmlldy5jcHAKLSAgICB3aW4vV2ViV29ya2Vyc1ByaXZhdGUuY3BwCi0KLSAgICB3aW4vc3Rv
cmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmNwcAotKQotCi1saXN0KEFQUEVORCBXZWJLaXRMZWdh
Y3lfU09VUkNFU19XZWJDb3JlU3VwcG9ydAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9BY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAot
ICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHAKLSAgICB3aW4v
V2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQuaAotICAgIHdpbi9XZWJDb3JlU3Vw
cG9ydC9XZWJEZXNrdG9wTm90aWZpY2F0aW9uc0RlbGVnYXRlLmNwcAotICAgIHdpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJEZXNrdG9wTm90aWZpY2F0aW9uc0RlbGVnYXRlLmgKLSAgICB3aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRHJh
Z0NsaWVudC5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKLSAg
ICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKLSAgICB3aW4vV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50LmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dC5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50
LmNwcAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5oCi0gICAg
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKLSAgICB3aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yRGVsZWdhdGUuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3Rv
ckRlbGVnYXRlLmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVz
LmNwcAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAotICAg
IHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbHVnaW5JbmZvUHJvdmlkZXIuY3BwCi0gICAgd2luL1dl
YkNvcmVTdXBwb3J0L1dlYlBsdWdpbkluZm9Qcm92aWRlci5oCi0gICAgd2luL1dlYkNvcmVTdXBw
b3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYlZp
c2l0ZWRMaW5rU3RvcmUuaAotKQotCi1pZiAoVVNFX0NGKQotICAgIGxpc3QoQVBQRU5EIFdlYktp
dExlZ2FjeV9TT1VSQ0VTX0NsYXNzZXMKLSAgICAgICAgY2YvV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50Q0YuY3BwCi0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5
X0xJQlJBUklFUwotICAgICAgICAke0NPUkVGT1VOREFUSU9OX0xJQlJBUll9Ci0gICAgKQotZW5k
aWYgKCkKLQotaWYgKENPTVBJTEVSX0lTX0dDQ19PUl9DTEFORykKLSAgICBXRUJLSVRfQUREX1RB
UkdFVF9DWFhfRkxBR1MoV2ViS2l0TGVnYWN5IC1Xbm8tb3ZlcmxvYWRlZC12aXJ0dWFsKQotZW5k
aWYgKCkKLQotbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X1NPVVJDRVMgJHtXZWJLaXRMZWdhY3lf
SU5DTFVERVN9ICR7V2ViS2l0TGVnYWN5X1NPVVJDRVNfQ2xhc3Nlc30gJHtXZWJLaXRMZWdhY3lf
U09VUkNFU19XZWJDb3JlU3VwcG9ydH0pCi0KLXNvdXJjZV9ncm91cChJbmNsdWRlcyBGSUxFUyAk
e1dlYktpdExlZ2FjeV9JTkNMVURFU30pCi1zb3VyY2VfZ3JvdXAoQ2xhc3NlcyBGSUxFUyAke1dl
YktpdExlZ2FjeV9TT1VSQ0VTX0NsYXNzZXN9KQotc291cmNlX2dyb3VwKFdlYkNvcmVTdXBwb3J0
IEZJTEVTICR7V2ViS2l0TGVnYWN5X1NPVVJDRVNfV2ViQ29yZVN1cHBvcnR9KQotCi0jIEJ1aWxk
IHRoZSBDT00gaW50ZXJmYWNlOgotbWFjcm8oR0VORVJBVEVfSU5URVJGQUNFIF9pbmZpbGUgX2Rl
ZmluZXMgX2RlcGVuZHMpCi0gICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfZmlsZXdlICR7X2lu
ZmlsZX0gTkFNRV9XRSkKLSAgICBhZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgICAgIE9VVFBVVCAg
JHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy8ke19maWxld2V9
LmgKLSAgICAgICAgTUFJTl9ERVBFTkRFTkNZICR7X2luZmlsZX0KLSAgICAgICAgREVQRU5EUyAk
e19kZXBlbmRzfQotICAgICAgICBDT01NQU5EIG1pZGwuZXhlIC9JICIke0NNQUtFX0NVUlJFTlRf
U09VUkNFX0RJUn0vd2luL0ludGVyZmFjZXMiIC9JICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJ
Un0vd2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIiIC9JICIke1dlYktpdExlZ2FjeV9ERVJJVkVE
X1NPVVJDRVNfRElSfS9pbmNsdWRlIiAvSSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dp
biIgL1dYIC9jaGFyIHNpZ25lZCAvZW52IHdpbjMyIC90bGIgIiR7Q01BS0VfUlVOVElNRV9PVVRQ
VVRfRElSRUNUT1JZfS8ke19maWxld2V9LnRsYiIgL291dCAiJHtXZWJLaXRMZWdhY3lfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcyIgL2ggIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09V
UkNFU19ESVJ9L0ludGVyZmFjZXMvJHtfZmlsZXdlfS5oIiAvaWlkICIke19maWxld2V9X2kuYyIg
JHtfZGVmaW5lc30gIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke19pbmZpbGV9IgotICAg
ICAgICBVU0VTX1RFUk1JTkFMIFZFUkJBVElNKQotICAgIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVy
dGllcygke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzLyR7X2Zp
bGV3ZX0uaCBQUk9QRVJUSUVTIEdFTkVSQVRFRCBUUlVFKQotICAgIHNldF9zb3VyY2VfZmlsZXNf
cHJvcGVydGllcygke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2Vz
LyR7X2ZpbGV3ZX1faS5jIFBST1BFUlRJRVMgR0VORVJBVEVEIFRSVUUpCi1lbmRtYWNybygpCi0K
LXNldChNSURMX0RFRklORVMgL0RcIFwiX19QUk9EVUNUSU9OX189MDFcIikKLQotc2V0KFdFQktJ
VExFR0FDWV9JRExfREVQRU5ERU5DSUVTCi0gICAgd2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZUNv
bXBhcmFibGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvRE9NQ1NTLmlkbAotICAgIHdpbi9JbnRl
cmZhY2VzL0RPTUNvcmUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvRE9NRXZlbnRzLmlkbAotICAg
IHdpbi9JbnRlcmZhY2VzL0RPTUV4dGVuc2lvbnMuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvRE9N
SFRNTC5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9ET01Qcml2YXRlLmlkbAotICAgIHdpbi9JbnRl
cmZhY2VzL0RPTVJhbmdlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0RPTVdpbmRvdy5pZGwKLSAg
ICB3aW4vSW50ZXJmYWNlcy9JR0VOX0RPTU9iamVjdC5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9J
V2ViQXJjaGl2ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViQmFja0ZvcndhcmRMaXN0Lmlk
bAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlLmlkbAotICAg
IHdpbi9JbnRlcmZhY2VzL0lXZWJDYWNoZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViQ29y
ZVN0YXRpc3RpY3MuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkRhdGFTb3VyY2UuaWRsCi0g
ICAgd2luL0ludGVyZmFjZXMvSVdlYkRhdGFiYXNlTWFuYWdlci5pZGwKLSAgICB3aW4vSW50ZXJm
YWNlcy9JV2ViRGVza3RvcE5vdGlmaWNhdGlvbnNEZWxlZ2F0ZS5pZGwKLSAgICB3aW4vSW50ZXJm
YWNlcy9JV2ViRG9jdW1lbnQuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkRvd25sb2FkLmlk
bAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJFZGl0aW5nRGVsZWdhdGUuaWRsCi0gICAgd2luL0lu
dGVyZmFjZXMvSVdlYkVtYmVkZGVkVmlldy5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRXJy
b3IuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkVycm9yUHJpdmF0ZS5pZGwKLSAgICB3aW4v
SW50ZXJmYWNlcy9JV2ViRm9ybURlbGVnYXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJG
cmFtZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRnJhbWVMb2FkRGVsZWdhdGUuaWRsCi0g
ICAgd2luL0ludGVyZmFjZXMvSVdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZS5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9JV2ViRnJhbWVMb2FkRGVsZWdhdGVQcml2YXRlMi5pZGwKLSAgICB3aW4v
SW50ZXJmYWNlcy9JV2ViRnJhbWVQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJG
cmFtZVZpZXcuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkdlb2xvY2F0aW9uUG9saWN5TGlz
dGVuZXIuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkdlb2xvY2F0aW9uUG9zaXRpb24uaWRs
Ci0gICAgd2luL0ludGVyZmFjZXMvSVdlYkdlb2xvY2F0aW9uUHJvdmlkZXIuaWRsCi0gICAgd2lu
L0ludGVyZmFjZXMvSVdlYkhUTUxSZXByZXNlbnRhdGlvbi5pZGwKLSAgICB3aW4vSW50ZXJmYWNl
cy9JV2ViSFRUUFVSTFJlc3BvbnNlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJIaXN0b3J5
LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJIaXN0b3J5RGVsZWdhdGUuaWRsCi0gICAgd2lu
L0ludGVyZmFjZXMvSVdlYkhpc3RvcnlJdGVtLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJI
aXN0b3J5SXRlbVByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkhpc3RvcnlQcml2
YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJJbnNwZWN0b3IuaWRsCi0gICAgd2luL0lu
dGVyZmFjZXMvSVdlYkluc3BlY3RvclByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdl
YkphdmFTY3JpcHRDb2xsZWN0b3IuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYktpdFN0YXRp
c3RpY3MuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYk11dGFibGVVUkxSZXF1ZXN0LmlkbAot
ICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJNdXRhYmxlVVJMUmVxdWVzdFByaXZhdGUuaWRsCi0gICAg
d2luL0ludGVyZmFjZXMvSVdlYk5hdmlnYXRpb25EYXRhLmlkbAotICAgIHdpbi9JbnRlcmZhY2Vz
L0lXZWJOb3RpZmljYXRpb24uaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYk5vdGlmaWNhdGlv
bkNlbnRlci5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViTm90aWZpY2F0aW9uT2JzZXJ2ZXIu
aWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlBvbGljeURlbGVnYXRlLmlkbAotICAgIHdpbi9J
bnRlcmZhY2VzL0lXZWJQb2xpY3lEZWxlZ2F0ZVByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFj
ZXMvSVdlYlByZWZlcmVuY2VzLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNl
c1ByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlJlc291cmNlLmlkbAotICAgIHdp
bi9JbnRlcmZhY2VzL0lXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZS5pZGwKLSAgICB3aW4vSW50ZXJm
YWNlcy9JV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGVQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZh
Y2VzL0lXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZVByaXZhdGUyLmlkbAotICAgIHdpbi9JbnRlcmZh
Y2VzL0lXZWJTY3JpcHRPYmplY3QuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlNjcmlwdFdv
cmxkLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJTZWN1cml0eU9yaWdpbi5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9JV2ViU2VyaWFsaXplZEpTVmFsdWUuaWRsCi0gICAgd2luL0ludGVyZmFj
ZXMvSVdlYlNlcmlhbGl6ZWRKU1ZhbHVlUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9J
V2ViVGV4dFJlbmRlcmVyLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJVSURlbGVnYXRlLmlk
bAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJVSURlbGVnYXRlMi5pZGwKLSAgICB3aW4vSW50ZXJm
YWNlcy9JV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlVS
TEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJVUkxS
ZXF1ZXN0LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJVUkxSZXNwb25zZS5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9JV2ViVVJMUmVzcG9uc2VQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZh
Y2VzL0lXZWJVbmRvTWFuYWdlci5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVW5kb1Rhcmdl
dC5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmlkbAot
ICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJWaWV3LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJW
aWV3UHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViV29ya2Vyc1ByaXZhdGUuaWRs
Ci0gICAgd2luL0ludGVyZmFjZXMvSmF2YVNjcmlwdENvcmVBUElUeXBlcy5pZGwKLSAgICB3aW4v
SW50ZXJmYWNlcy9XZWJLaXQuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvV2ViU2Nyb2xsYmFyVHlw
ZXMuaWRsCi0KLSAgICB3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlMi5pZGwK
LSAgICB3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlMl8yLmlkbAotICAgIHdp
bi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0FjY2Vzc2libGVBcHBsaWNhdGlvbi5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlRWRpdGFibGVUZXh0LmlkbAotICAg
IHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0FjY2Vzc2libGVSZWxhdGlvbi5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlU3RhdGVzLmlkbAotICAgIHdpbi9J
bnRlcmZhY2VzL0FjY2Vzc2libGUyL0FjY2Vzc2libGVUZXh0LmlkbAotICAgIHdpbi9JbnRlcmZh
Y2VzL0FjY2Vzc2libGUyL0FjY2Vzc2libGVUZXh0Mi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9B
Y2Nlc3NpYmxlMi9JQTJDb21tb25UeXBlcy5pZGwKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vaW5jbHVkZS9hdXRvdmVyc2lvbi5oIgotKQotCi1hZGRfY3VzdG9tX2Nv
bW1hbmQoCi0gICAgT1VUUFVUICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L2lu
Y2x1ZGUvYXV0b3ZlcnNpb24uaAotICAgIFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0VfU09VUkNF
X0RJUn0KLSAgICBDT01NQU5EICR7UEVSTF9FWEVDVVRBQkxFfSAke1dFQktJVF9MSUJSQVJJRVNf
RElSfS90b29scy9zY3JpcHRzL2F1dG8tdmVyc2lvbi5wbCAke1dlYktpdExlZ2FjeV9ERVJJVkVE
X1NPVVJDRVNfRElSfQotICAgIFZFUkJBVElNKQotCi1HRU5FUkFURV9JTlRFUkZBQ0Uod2luL0lu
dGVyZmFjZXMvV2ViS2l0LmlkbCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9E
RVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3Np
YmxlMi9BY2Nlc3NpYmxlQXBwbGljYXRpb24uaWRsICR7TUlETF9ERUZJTkVTfSAiJHtXRUJLSVRM
RUdBQ1lfSURMX0RFUEVOREVOQ0lFU30iKQotR0VORVJBVEVfSU5URVJGQUNFKHdpbi9JbnRlcmZh
Y2VzL0FjY2Vzc2libGUyL0FjY2Vzc2libGUyLmlkbCAke01JRExfREVGSU5FU30gIiR7V0VCS0lU
TEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50ZXJm
YWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlMl8yLmlkbCAke01JRExfREVGSU5FU30gIiR7V0VC
S0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50
ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlUmVsYXRpb24uaWRsICR7TUlETF9ERUZJTkVT
fSAiJHtXRUJLSVRMRUdBQ1lfSURMX0RFUEVOREVOQ0lFU30iKQotR0VORVJBVEVfSU5URVJGQUNF
KHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0FjY2Vzc2libGVTdGF0ZXMuaWRsICR7TUlETF9E
RUZJTkVTfSAiJHtXRUJLSVRMRUdBQ1lfSURMX0RFUEVOREVOQ0lFU30iKQotR0VORVJBVEVfSU5U
RVJGQUNFKHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0lBMkNvbW1vblR5cGVzLmlkbCAke01J
RExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLUdFTkVSQVRF
X0lOVEVSRkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlRWRpdGFibGVU
ZXh0LmlkbCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9
IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3Np
YmxlVGV4dC5pZGwgJHtNSURMX0RFRklORVN9ICIke1dFQktJVExFR0FDWV9JRExfREVQRU5ERU5D
SUVTfSIpCi1HRU5FUkFURV9JTlRFUkZBQ0Uod2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIvQWNj
ZXNzaWJsZVRleHQyLmlkbCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBF
TkRFTkNJRVN9IikKLQotYWRkX2xpYnJhcnkoV2ViS2l0TGVnYWN5R1VJRCBTVEFUSUMKLSAgICAi
JHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9XZWJLaXQuaCIK
LSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nl
c3NpYmxlQXBwbGljYXRpb24uaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VT
X0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi5oIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJ
VkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGUyXzIuaCIKLSAgICAiJHtXZWJL
aXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlUmVsYXRp
b24uaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNl
cy9BY2Nlc3NpYmxlU3RhdGVzLmgiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNF
U19ESVJ9L0ludGVyZmFjZXMvSUEyQ29tbW9uVHlwZXMuaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lf
REVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlRWRpdGFibGVUZXh0Lmgi
Ci0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNj
ZXNzaWJsZVRleHQuaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0v
SW50ZXJmYWNlcy9BY2Nlc3NpYmxlVGV4dDIuaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9XZWJLaXRfaS5jIgotICAgICIke1dlYktpdExlZ2Fj
eV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVBcHBsaWNhdGlvbl9p
LmMiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMv
QWNjZXNzaWJsZTJfaS5jIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElS
fS9JbnRlcmZhY2VzL0FjY2Vzc2libGUyXzJfaS5jIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJ
VkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVSZWxhdGlvbl9pLmMiCi0gICAg
IiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJs
ZUVkaXRhYmxlVGV4dF9pLmMiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19E
SVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZVRleHRfaS5jIgotICAgICIke1dlYktpdExlZ2FjeV9E
RVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVUZXh0Ml9pLmMiCi0pCi1z
ZXRfdGFyZ2V0X3Byb3BlcnRpZXMoV2ViS2l0TGVnYWN5R1VJRCBQUk9QRVJUSUVTIE9VVFBVVF9O
QU1FIFdlYktpdEdVSUQke0RFQlVHX1NVRkZJWH0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdExlZ2Fj
eV9QUklWQVRFX0xJQlJBUklFUwotICAgIENvbWN0bDMyCi0gICAgQ29tc3VwcAotICAgIENyeXB0
MzIKLSAgICBEMmQxCi0gICAgRHdyaXRlCi0gICAgRHhndWlkCi0gICAgSXBobHBhcGkKLSAgICBQ
c2FwaQotICAgIFJwY3J0NAotICAgIFNobHdhcGkKLSAgICBVc3AxMAotICAgIFZlcnNpb24KLSAg
ICBXZWJLaXRHVUlEJHtERUJVR19TVUZGSVh9Ci0gICAgV2luZG93c0NvZGVjcwotICAgIFdpbm1t
Ci0pCi0KLXNldChDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTICIke0NNQUtFX1NIQVJFRF9MSU5L
RVJfRkxBR1N9IC9TVUJTWVNURU06V0lORE9XUyIpCi1zZXQoQ01BS0VfRVhFX0xJTktFUl9GTEFH
UyAiJHtDTUFLRV9FWEVfTElOS0VSX0ZMQUdTfSAvU1VCU1lTVEVNOldJTkRPV1MiKQotCi0jIFdl
IG5lZWQgdGhlIHdlYmtpdCBsaWJyYXJpZXMgdG8gY29tZSBiZWZvcmUgdGhlIHN5c3RlbSBkZWZh
dWx0IGxpYnJhcmllcyB0byBwcmV2ZW50IHN5bWJvbCBjb25mbGljdHMgd2l0aCB1dWlkLmxpYi4K
LSMgVG8gZG8gdGhpcyB3ZSBhZGQgc3lzdGVtIGRlZmF1bHQgbGlicyBhcyB3ZWJraXQgbGlicyBh
bmQgemVybyBvdXQgc3lzdGVtIGRlZmF1bHQgbGlicy4KLXN0cmluZyhSRVBMQUNFICIgIiAiXDsi
IENYWF9MSUJTICR7Q01BS0VfQ1hYX1NUQU5EQVJEX0xJQlJBUklFU30pCi1saXN0KEFQUEVORCBX
ZWJLaXRMZWdhY3lfTElCUkFSSUVTICR7Q1hYX0xJQlN9KQotc2V0KENNQUtFX0NYWF9TVEFOREFS
RF9MSUJSQVJJRVMgIiIpCi0KLXNldChDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTICIke0NNQUtF
X1NIQVJFRF9MSU5LRVJfRkxBR1N9ICR7TVNWQ19SVU5USU1FX0xJTktFUl9GTEFHU30iKQotCi0j
IElmIHRoaXMgZGlyZWN0b3J5IGlzbid0IGNyZWF0ZWQgYmVmb3JlIG1pZGwgcnVucyBhbmQgYXR0
ZW1wdHMgdG8gb3V0cHV0IFdlYktpdC50bGIsCi0jIEl0IGZhaWxzIHdpdGggYW4gdW51c3VhbCBl
cnJvciAtIG1pZGwgZmFpbGVkIC0gZmFpbGVkIHRvIHNhdmUgYWxsIGNoYW5nZXMKLWZpbGUoTUFL
RV9ESVJFQ1RPUlkgJHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9KQotZmlsZShNQUtF
X0RJUkVDVE9SWSAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2Vz
KQotCi1zZXQoV2ViS2l0TGVnYWN5X1BVQkxJQ19GUkFNRVdPUktfSEVBREVSUwotICAgICR7V2Vi
S2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZTIuaAot
ICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNz
aWJsZTJfMi5oCi0gICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJm
YWNlcy9BY2Nlc3NpYmxlQXBwbGljYXRpb24uaAotICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURf
U09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZUVkaXRhYmxlVGV4dC5oCi0gICAgJHtX
ZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlUmVs
YXRpb24uaAotICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFj
ZXMvQWNjZXNzaWJsZVN0YXRlcy5oCi0gICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VT
X0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlVGV4dC5oCi0gICAgJHtXZWJLaXRMZWdhY3lfREVS
SVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlVGV4dDIuaAotICAgICR7V2Vi
S2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvSUEyQ29tbW9uVHlwZXMu
aAotICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvV2Vi
S2l0LmgKLQotICAgIHdpbi9BY2Nlc3NpYmxlQmFzZS5oCi0gICAgd2luL0FjY2Vzc2libGVEb2N1
bWVudC5oCi0gICAgd2luL0NGRGljdGlvbmFyeVByb3BlcnR5QmFnLmgKLSAgICB3aW4vV2ViRGF0
YVNvdXJjZS5oCi0gICAgd2luL1dlYkZyYW1lLmgKLSAgICB3aW4vV2ViS2l0Q09NQVBJLmgKLSkK
LQotV0VCS0lUX01BS0VfRk9SV0FSRElOR19IRUFERVJTKFdlYktpdExlZ2FjeUdVSUQKLSAgICBU
QVJHRVRfTkFNRSBXZWJLaXRMZWdhY3lGcmFtZXdvcmtIZWFkZXJzCi0gICAgREVTVElOQVRJT04g
JHtXZWJLaXRMZWdhY3lfRlJBTUVXT1JLX0hFQURFUlNfRElSfS9XZWJLaXRMZWdhY3kKLSAgICBG
SUxFUyAke1dlYktpdExlZ2FjeV9QVUJMSUNfRlJBTUVXT1JLX0hFQURFUlN9Ci0gICAgRkxBVFRF
TkVECi0pCi0KLXNldChXZWJLaXRMZWdhY3lfT1VUUFVUX05BTUUKLSAgICBXZWJLaXQke0RFQlVH
X1NVRkZJWH0KLSkKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4
NzgxMikKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIzIEBACisyMDIyLTAxLTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxl
LmNvbT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgRGlyZWN0MkQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDk5OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAg
ICAgIChXZWJWaWV3OjpkZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViVmlldzo6ZW5z
dXJlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYlZpZXc6OnNjcm9sbEJhY2tpbmdTdG9yZSk6
CisgICAgICAgIChXZWJWaWV3OjpzaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJWaWV3Ojp1cGRh
dGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViVmlldzo6cGFpbnQpOgorICAgICAgICAoV2Vi
Vmlldzo6cGFpbnRJbnRvQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYlZpZXc6OldlYlZpZXdX
bmRQcm9jKToKKyAgICAgICAgKFdlYlZpZXc6Om5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJWaWV3OjpwYWludFdpdGhEaXJlY3QyRCk6IERlbGV0ZWQuCisgICAgICAgICog
V2ViVmlldy5oOgorCiAyMDIyLTAxLTA2ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5j
b20+CiAKICAgICAgICAgSGF2ZSBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCBhbmQgcmVsYXRlZCBu
ZXR3b3JraW5nIGFjdG9ycyB1c2UgU2hhcmVkQnVmZmVyLgpJbmRleDogU291cmNlL1dlYktpdExl
Z2FjeS93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS93
aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksMTAgKzIwOSw2IEBACiAjaW5j
bHVkZSAiQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaCIKICNlbmRpZgogCi0jaWYgVVNF
KERJUkVDVDJEKQotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaD4K
LSNlbmRpZgotCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogI2luY2x1ZGUgPFdlYkNvcmUv
RnVsbFNjcmVlbkNvbnRyb2xsZXIuaD4KICNlbmRpZgpAQCAtODU1LDExICs4NTEsNiBAQCB2b2lk
IFdlYlZpZXc6OmRlbGV0ZUJhY2tpbmdTdG9yZSgpCiAgICAgICAgIG1fZGVsZXRlQmFja2luZ1N0
b3JlVGltZXJBY3RpdmUgPSBmYWxzZTsKICAgICB9CiAgICAgbV9iYWNraW5nU3RvcmVCaXRtYXAg
PSBudWxscHRyOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBtX2JhY2tpbmdTdG9yZUQyREJpdG1h
cCA9IG51bGxwdHI7Ci0gICAgbV9iYWNraW5nU3RvcmVHZGlJbnRlcm9wID0gbnVsbHB0cjsKLSAg
ICBtX2JhY2tpbmdTdG9yZVJlbmRlclRhcmdldCA9IG51bGxwdHI7Ci0jZW5kaWYKICAgICBtX2Jh
Y2tpbmdTdG9yZURpcnR5UmVnaW9uID0gbnVsbHB0cjsKICAgICBtX2JhY2tpbmdTdG9yZVNpemUu
Y3ggPSBtX2JhY2tpbmdTdG9yZVNpemUuY3kgPSAwOwogfQpAQCAtODczLDIwICs4NjQsNiBAQCBi
b29sIFdlYlZpZXc6OmVuc3VyZUJhY2tpbmdTdG9yZSgpCiAgICAgaWYgKHdpZHRoID4gMCAmJiBo
ZWlnaHQgPiAwICYmICh3aWR0aCAhPSBtX2JhY2tpbmdTdG9yZVNpemUuY3ggfHwgaGVpZ2h0ICE9
IG1fYmFja2luZ1N0b3JlU2l6ZS5jeSkpIHsKICAgICAgICAgZGVsZXRlQmFja2luZ1N0b3JlKCk7
CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIGF1dG8gYml0bWFwU2l6ZSA9IEQyRDE6OlNp
emVGKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBhdXRvIHBpeGVsU2l6ZSA9IEQyRDE6OlNpemVV
KHdpZHRoLCBoZWlnaHQpOwotCi0gICAgICAgIGlmICghbV9yZW5kZXJUYXJnZXQpIHsKLSAgICAg
ICAgICAgIC8vIENyZWF0ZSBhIERpcmVjdDJEIHJlbmRlciB0YXJnZXQuCi0gICAgICAgICAgICBh
dXRvIHJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVz
KCk7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLnVzYWdlID0gRDJEMV9SRU5E
RVJfVEFSR0VUX1VTQUdFX0dESV9DT01QQVRJQkxFOwotICAgICAgICAgICAgYXV0byBod25kUmVu
ZGVyVGFyZ2V0UHJvcGVydGllcyA9IEQyRDE6Okh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKG1f
dmlld1dpbmRvdywgcGl4ZWxTaXplKTsKLSAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBHcmFwaGlj
c0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlSHduZFJlbmRlclRhcmdldCgmcmVuZGVy
VGFyZ2V0UHJvcGVydGllcywgJmh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLCAmbV9yZW5kZXJU
YXJnZXQpOwotICAgICAgICAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotI2VuZGlmCiAgICAgICAgIG1fYmFja2luZ1N0b3Jl
U2l6ZS5jeCA9IHdpZHRoOwogICAgICAgICBtX2JhY2tpbmdTdG9yZVNpemUuY3kgPSBoZWlnaHQ7
CiAgICAgICAgIEJpdG1hcEluZm8gYml0bWFwSW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZUJvdHRv
bVVwKEludFNpemUobV9iYWNraW5nU3RvcmVTaXplKSk7CkBAIC04OTQsMTYgKzg3MSw2IEBAIGJv
b2wgV2ViVmlldzo6ZW5zdXJlQmFja2luZ1N0b3JlKCkKICAgICAgICAgdm9pZCogcGl4ZWxzID0g
TlVMTDsKICAgICAgICAgbV9iYWNraW5nU3RvcmVCaXRtYXAgPSBTaGFyZWRHRElPYmplY3Q8SEJJ
VE1BUD46OmNyZWF0ZShhZG9wdEdESU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24oMCwgJmJpdG1h
cEluZm8sIERJQl9SR0JfQ09MT1JTLCAmcGl4ZWxzLCAwLCAwKSkpOwogCi0jaWYgVVNFKERJUkVD
VDJEKQotICAgICAgICBIUkVTVUxUIGhyID0gbV9yZW5kZXJUYXJnZXQtPkNyZWF0ZUNvbXBhdGli
bGVSZW5kZXJUYXJnZXQoJmJpdG1hcFNpemUsICZwaXhlbFNpemUsIG51bGxwdHIsIEQyRDFfQ09N
UEFUSUJMRV9SRU5ERVJfVEFSR0VUX09QVElPTlNfR0RJX0NPTVBBVElCTEUsICZtX2JhY2tpbmdT
dG9yZVJlbmRlclRhcmdldCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OwotCi0gICAgICAgIGhyID0gbV9iYWNraW5nU3RvcmVSZW5kZXJUYXJnZXQtPkdldEJpdG1hcCgm
bV9iYWNraW5nU3RvcmVEMkRCaXRtYXApOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVE
RUQoaHIpKTsKLQotICAgICAgICBociA9IG1fYmFja2luZ1N0b3JlUmVuZGVyVGFyZ2V0LT5RdWVy
eUludGVyZmFjZShfX3V1aWRvZihJRDJEMUdkaUludGVyb3BSZW5kZXJUYXJnZXQpLCAodm9pZCoq
KSZtX2JhY2tpbmdTdG9yZUdkaUludGVyb3ApOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUND
RUVERUQoaHIpKTsKLSNlbmRpZgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTk3
OCwxNiArOTQ1LDYgQEAgdm9pZCBXZWJWaWV3OjpzY3JvbGxCYWNraW5nU3RvcmUoRnJhbWVWaQog
ICAgIEZsb2F0UmVjdCBjbGlwUmVjdChsb2dpY2FsQ2xpcFJlY3QpOwogICAgIGNsaXBSZWN0LnNj
YWxlKHNjYWxlRmFjdG9yKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBSRUNUIHNjcm9sbFJl
Y3RXaW4oc2Nyb2xsVmlld1JlY3QpOwotICAgIFJFQ1QgY2xpcFJlY3RXaW4oZW5jbG9zaW5nSW50
UmVjdChjbGlwUmVjdCkpOwotICAgIFJFQ1QgdXBkYXRlUmVjdDsKLSAgICA6OlNjcm9sbFdpbmRv
d0V4KG1fdmlld1dpbmRvdywgZHgsIGR5LCAmc2Nyb2xsUmVjdFdpbiwgJmNsaXBSZWN0V2luLCBu
dWxscHRyLCAmdXBkYXRlUmVjdCwgMCk7Ci0gICAgOjpJbnZhbGlkYXRlUmVjdChtX3ZpZXdXaW5k
b3csICZ1cGRhdGVSZWN0LCBGQUxTRSk7Ci0KLSAgICBpZiAobV91aURlbGVnYXRlUHJpdmF0ZSkK
LSAgICAgICAgbV91aURlbGVnYXRlUHJpdmF0ZS0+d2ViVmlld1Njcm9sbGVkKHRoaXMpOwotI2Vs
c2UKICAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBiZSBkb2luZyBzb21ldGhpbmcgc21hcnRlciBoZXJlLCBsaWtlIG1vdmlu
ZyB0aWxlcyBhcm91bmQgYW5kIHBhaW50aW5nCiAgICAgICAgIC8vIGFueSBuZXdseS1leHBvc2Vk
IHRpbGVzLiA8aHR0cDovL3dlYmtpdC5vcmcvYi81MjcxND4KQEAgLTEwMzksNyArOTk2LDYgQEAg
dm9pZCBXZWJWaWV3OjpzY3JvbGxCYWNraW5nU3RvcmUoRnJhbWVWaQogCiAgICAgLy8gQ2xlYW4g
dXAuCiAgICAgOjpTZWxlY3RPYmplY3QoYml0bWFwREMuZ2V0KCksIG9sZEJpdG1hcCk7Ci0jZW5k
aWYgLy8gVVNFKERJUkVDVDJEKQogfQogCiB2b2lkIFdlYlZpZXc6OnNpemVDaGFuZ2VkKGNvbnN0
IEludFNpemUmIG5ld1NpemUpCkBAIC0xMDY3LDIwICsxMDIzLDYgQEAgdm9pZCBXZWJWaWV3Ojpz
aXplQ2hhbmdlZChjb25zdCBJbnRTaXplJgogICAgIGlmIChtX2FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0KQogICAgICAgICBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5yZXNp
emVSb290TGF5ZXIobmV3U2l6ZSk7CiAjZW5kaWYKLQotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBp
ZiAobV9yZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgbV9yZW5kZXJUYXJnZXQtPlJlc2l6ZShuZXdT
aXplKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBhIERpcmVjdDJE
IHJlbmRlciB0YXJnZXQuCi0gICAgYXV0byByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gRDJEMTo6
UmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwotICAgIHJlbmRlclRhcmdldFByb3BlcnRpZXMudXNh
Z2UgPSBEMkQxX1JFTkRFUl9UQVJHRVRfVVNBR0VfR0RJX0NPTVBBVElCTEU7Ci0gICAgYXV0byBo
d25kUmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IEQyRDE6Okh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0
aWVzKG1fdmlld1dpbmRvdywgbmV3U2l6ZSwgRDJEMV9QUkVTRU5UX09QVElPTlNfSU1NRURJQVRF
TFkpOwotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+
Q3JlYXRlSHduZFJlbmRlclRhcmdldCgmcmVuZGVyVGFyZ2V0UHJvcGVydGllcywgJmh3bmRSZW5k
ZXJUYXJnZXRQcm9wZXJ0aWVzLCAmbV9yZW5kZXJUYXJnZXQpOwotICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpKTsKLSNlbmRpZgogfQogCiBib29sIFdlYlZpZXc6OmRwaUNoYW5nZWQoZmxvYXQsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpCkBAIC0xMTQxLDEzICsxMDgzLDYgQEAgdm9p
ZCBXZWJWaWV3Ojp1cGRhdGVCYWNraW5nU3RvcmUoRnJhbWVWaQogCiAgICAgTE9DQUxfR0RJX0NP
VU5URVIoMCwgX19GVU5DVElPTl9fKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBpZiAoIW1f
YmFja2luZ1N0b3JlR2RpSW50ZXJvcCkgewotICAgICAgICBIUkVTVUxUIGhyID0gbV9iYWNraW5n
U3RvcmVSZW5kZXJUYXJnZXQtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEMkQxR2RpSW50ZXJv
cFJlbmRlclRhcmdldCksICh2b2lkKiopJm1fYmFja2luZ1N0b3JlR2RpSW50ZXJvcCk7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIH0KLSNlbmRpZgotCiAgICAg
R0RJT2JqZWN0PEhEQz4gYml0bWFwRENPYmplY3Q7CiAKICAgICBIREMgYml0bWFwREMgPSBkYzsK
QEAgLTExNTgsMTAgKzEwOTMsNiBAQCB2b2lkIFdlYlZpZXc6OnVwZGF0ZUJhY2tpbmdTdG9yZShG
cmFtZVZpCiAgICAgICAgIGJpdG1hcERDID0gYml0bWFwRENPYmplY3QuZ2V0KCk7CiAgICAgICAg
IG9sZEJpdG1hcCA9IDo6U2VsZWN0T2JqZWN0KGJpdG1hcERDLCBtX2JhY2tpbmdTdG9yZUJpdG1h
cC0+Z2V0KCkpOwogICAgICAgICBBU1NFUlQob2xkQml0bWFwKTsKLSNpZiBVU0UoRElSRUNUMkQp
Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBtX2JhY2tpbmdTdG9yZUdkaUludGVyb3AtPkdldERDKEQy
RDFfRENfSU5JVElBTElaRV9NT0RFX0NPUFksICZiaXRtYXBEQyk7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKFNVQ0NFRURFRChocikpOwotI2VuZGlmCiAgICAgfQogCiAgICAgaWYgKG1fYmFja2lu
Z1N0b3JlQml0bWFwICYmIChtX2JhY2tpbmdTdG9yZURpcnR5UmVnaW9uIHx8IGJhY2tpbmdTdG9y
ZUNvbXBsZXRlbHlEaXJ0eSkpIHsKQEAgLTExODUsMTIgKzExMTYsOCBAQCB2b2lkIFdlYlZpZXc6
OnVwZGF0ZUJhY2tpbmdTdG9yZShGcmFtZVZpCiAgICAgICAgIG1fYmFja2luZ1N0b3JlRGlydHlS
ZWdpb24gPSBudWxscHRyOwogICAgIH0KIAotICAgIGlmICghZGMpIHsKKyAgICBpZiAoIWRjKQog
ICAgICAgICA6OlNlbGVjdE9iamVjdChiaXRtYXBEQywgb2xkQml0bWFwKTsKLSNpZiBVU0UoRElS
RUNUMkQpCi0gICAgICAgIG1fYmFja2luZ1N0b3JlR2RpSW50ZXJvcC0+UmVsZWFzZURDKG51bGxw
dHIpOwotI2VuZGlmCi0gICAgfQogCiAgICAgR2RpRmx1c2goKTsKIApAQCAtMTIyNSw2OSArMTE1
Miw2IEBAIHZvaWQgV2ViVmlldzo6cGVyZm9ybUxheWVyZWRXaW5kb3dVcGRhdGUKICAgICBtX25l
ZWRzRGlzcGxheSA9IGZhbHNlOwogfQogCi12b2lkIFdlYlZpZXc6OnBhaW50V2l0aERpcmVjdDJE
KCkKLXsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUobV9t
YWluRnJhbWUpOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgRnJh
bWVWaWV3KiBmcmFtZVZpZXcgPSBjb3JlRnJhbWUtPnZpZXcoKTsKLSAgICBmcmFtZVZpZXctPnVw
ZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKLQotICAgIGlmICghbV9yZW5k
ZXJUYXJnZXQpIHsKLSAgICAgICAgLy8gQ3JlYXRlIGEgRGlyZWN0MkQgcmVuZGVyIHRhcmdldC4K
LSAgICAgICAgYXV0byByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gRDJEMTo6UmVuZGVyVGFyZ2V0
UHJvcGVydGllcygpOwotICAgICAgICByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLnVzYWdlID0gRDJE
MV9SRU5ERVJfVEFSR0VUX1VTQUdFX0dESV9DT01QQVRJQkxFOwotCi0gICAgICAgIFJFQ1QgcmVj
dDsKLSAgICAgICAgOjpHZXRDbGllbnRSZWN0KG1fdmlld1dpbmRvdywgJnJlY3QpOwotCi0gICAg
ICAgIEludFJlY3QgY2xpZW50UmVjdChyZWN0KTsKLQotICAgICAgICBhdXRvIHBpeGVsU2l6ZSA9
IEQyRDE6OlNpemVVKGNsaWVudFJlY3Qud2lkdGgoKSwgY2xpZW50UmVjdC5oZWlnaHQoKSk7Ci0K
LSAgICAgICAgYXV0byBod25kUmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IEQyRDE6Okh3bmRSZW5k
ZXJUYXJnZXRQcm9wZXJ0aWVzKG1fdmlld1dpbmRvdywgcGl4ZWxTaXplLCBEMkQxX1BSRVNFTlRf
T1BUSU9OU19JTU1FRElBVEVMWSk7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRl
eHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlSHduZFJlbmRlclRhcmdldCgmcmVuZGVyVGFyZ2V0
UHJvcGVydGllcywgJmh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLCAmbV9yZW5kZXJUYXJnZXQp
OwotICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgUkVDVCBjbGllbnRSZWN0ID0ge307Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQgcGxhdGZvcm1Db250ZXh0KG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAgICBHcmFwaGljc0Nv
bnRleHRXaW4gZ2MoJnBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKLQotICAgIHsKLSAgICAgICAgbV9yZW5kZXJU
YXJnZXQtPlNldFRhZ3MoV0VCS0lUX0RSQVdJTkcsIF9fTElORV9fKTsKLSAgICAgICAgbV9yZW5k
ZXJUYXJnZXQtPkNsZWFyKCk7Ci0KLSAgICAgICAgLy8gRGlyZWN0MkQgaG9ub3JzIHRoZSBzY2Fs
ZSBmYWN0b3IgbmF0aXZlbHkuCi0gICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZjsKLSAg
ICAgICAgZmxvYXQgaW52ZXJzZVNjYWxlRmFjdG9yID0gMS4wZiAvIHNjYWxlRmFjdG9yOwotCi0g
ICAgICAgIEdldENsaWVudFJlY3QobV92aWV3V2luZG93LCAmY2xpZW50UmVjdCk7Ci0KLSAgICAg
ICAgSW50UmVjdCBkaXJ0eVJlY3RQaXhlbHMoMCwgMCwgY2xpZW50UmVjdC5yaWdodCwgY2xpZW50
UmVjdC5ib3R0b20pOwotICAgICAgICBGbG9hdFJlY3QgbG9naWNhbERpcnR5UmVjdEZsb2F0ID0g
ZGlydHlSZWN0UGl4ZWxzOwotICAgICAgICBsb2dpY2FsRGlydHlSZWN0RmxvYXQuc2NhbGUoaW52
ZXJzZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgSW50UmVjdCBsb2dpY2FsRGlydHlSZWN0KGVuY2xv
c2luZ0ludFJlY3QobG9naWNhbERpcnR5UmVjdEZsb2F0KSk7Ci0KLSAgICAgICAgaWYgKGZyYW1l
VmlldyAmJiBmcmFtZVZpZXctPmZyYW1lKCkuY29udGVudFJlbmRlcmVyKCkpIHsKLSAgICAgICAg
ICAgIGdjLnNhdmUoKTsKLSAgICAgICAgICAgIGdjLnNjYWxlKEZsb2F0U2l6ZShzY2FsZUZhY3Rv
ciwgc2NhbGVGYWN0b3IpKTsKLSAgICAgICAgICAgIGdjLmNsaXAobG9naWNhbERpcnR5UmVjdCk7
Ci0gICAgICAgICAgICBmcmFtZVZpZXctPnBhaW50KGdjLCBsb2dpY2FsRGlydHlSZWN0KTsKLSAg
ICAgICAgICAgIGlmIChtX3Nob3VsZEludmVydENvbG9ycykKLSAgICAgICAgICAgICAgICBnYy5m
aWxsUmVjdChsb2dpY2FsRGlydHlSZWN0LCBDb2xvcjo6d2hpdGUsIENvbXBvc2l0ZU9wZXJhdG9y
OjpEaWZmZXJlbmNlKTsKLSAgICAgICAgICAgIGdjLnJlc3RvcmUoKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIDo6VmFsaWRhdGVSZWN0KG1fdmlld1dpbmRvdywgJmNsaWVudFJlY3QpOwotI2Vs
c2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotfQotCiB2b2lkIFdlYlZpZXc6
OnBhaW50KEhEQyBkYywgTFBBUkFNIG9wdGlvbnMpCiB7CiAgICAgTE9DQUxfR0RJX0NPVU5URVIo
MCwgX19GVU5DVElPTl9fKTsKQEAgLTEzNDksMTggKzEyMTMsOCBAQCB2b2lkIFdlYlZpZXc6OnBh
aW50KEhEQyBkYywgTFBBUkFNIG9wdGlvCiAKICAgICA6OlNlbGVjdE9iamVjdChiaXRtYXBEQy5n
ZXQoKSwgb2xkQml0bWFwKTsKIAotICAgIGlmICghZGMpIHsKKyAgICBpZiAoIWRjKQogICAgICAg
ICBFbmRQYWludChtX3ZpZXdXaW5kb3csICZwcyk7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgICAg
ICBIUkVTVUxUIGhyID0gbV9iYWNraW5nU3RvcmVSZW5kZXJUYXJnZXQtPkVuZERyYXcoKTsKLSAg
ICAgICAgLy8gRklYTUU6IFJlY29nbml6ZSBhbmQgcmVjb3ZlciBmcm9tIGVycm9yIHN0YXRlOgot
ICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSNlbmRpZgotICAgIH0KLQot
I2lmIFVTRShESVJFQ1QyRCkKLSAgICBtX2JhY2tpbmdTdG9yZUdkaUludGVyb3AtPlJlbGVhc2VE
QyhudWxscHRyKTsKLSNlbmRpZgogCiAgICAgaWYgKGFjdGl2ZSgpKQogICAgICAgICBjYW5jZWxE
ZWxldGVCYWNraW5nU3RvcmVTb29uKCk7CkBAIC0xNDAzLDEwICsxMjU3LDYgQEAgdm9pZCBXZWJW
aWV3OjpwYWludEludG9CYWNraW5nU3RvcmUoRnJhbQogICAgIGxvZ2ljYWxEaXJ0eVJlY3RGbG9h
dC5zY2FsZShpbnZlcnNlU2NhbGVGYWN0b3IpOyAgICAKICAgICBJbnRSZWN0IGxvZ2ljYWxEaXJ0
eVJlY3QoZW5jbG9zaW5nSW50UmVjdChsb2dpY2FsRGlydHlSZWN0RmxvYXQpKTsKIAotI2lmIFVT
RShESVJFQ1QyRCkKLSAgICBtX2JhY2tpbmdTdG9yZVJlbmRlclRhcmdldCA9IG51bGxwdHI7Ci0j
ZW5kaWYKLQogICAgIEdyYXBoaWNzQ29udGV4dFdpbiBnYyhiaXRtYXBEQywgbV90cmFuc3BhcmVu
dCk7CiAgICAgZ2Muc2F2ZSgpOwogICAgIGlmIChtX3RyYW5zcGFyZW50KQpAQCAtMjUxMCwxMSAr
MjM2MCw3IEBAIExSRVNVTFQgQ0FMTEJBQ0sgV2ViVmlldzo6V2ViVmlld1duZFByb2MKIAogICAg
IHN3aXRjaCAobWVzc2FnZSkgewogICAgICAgICBjYXNlIFdNX1BBSU5UOiB7Ci0jaWYgVVNFKERJ
UkVDVDJEKQotICAgICAgICAgICAgd2ViVmlldy0+cGFpbnRXaXRoRGlyZWN0MkQoKTsKLSNlbHNl
CiAgICAgICAgICAgICB3ZWJWaWV3LT5wYWludCgwLCAwKTsKLSNlbmRpZgogICAgICAgICAgICAg
aWYgKHdlYlZpZXctPnVzZXNMYXllcmVkV2luZG93KCkpCiAgICAgICAgICAgICAgICAgd2ViVmll
dy0+cGVyZm9ybUxheWVyZWRXaW5kb3dVcGRhdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
NTQ0NCwxMCArNTI5MCw2IEBAIEhSRVNVTFQgV2ViVmlldzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFu
Z2UKICAgICBociA9IHByZWZzUHJpdmF0ZS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQo
JmVuYWJsZWQpOwogICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICByZXR1cm4gaHI7Ci0jaWYg
VVNFKERJUkVDVDJEKQotICAgIC8vIERpc2FibGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgZm9y
IG5vdy4KLSAgICBlbmFibGVkID0gZmFsc2U7Ci0jZW5kaWYKICAgICBzZXR0aW5ncy5zZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChlbmFibGVkKTsKIAogICAgIGhyID0gcHJlZnNQcml2
YXRlLT5zaG93RGVidWdCb3JkZXJzKCZlbmFibGVkKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL1dlYlZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9X
ZWJWaWV3LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dl
YlZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTMgKzc3LDYgQEAgV2ViVmlldyoga2l0KFdl
YkNvcmU6OlBhZ2UqKTsKIFdlYkNvcmU6OlBhZ2UqIGNvcmUoSVdlYlZpZXcqKTsKIAogaW50ZXJm
YWNlIElEcm9wVGFyZ2V0SGVscGVyOwotI2lmIFVTRShESVJFQ1QyRCkKLWludGVyZmFjZSBJRDJE
MUJpdG1hcDsKLWludGVyZmFjZSBJRDJEMUJpdG1hcFJlbmRlclRhcmdldDsKLWludGVyZmFjZSBJ
RDJEMUdkaUludGVyb3BSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFId25kUmVuZGVyVGFy
Z2V0OwotaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OwotI2VuZGlmCiAKIGNsYXNzIFdlYlZp
ZXcgZmluYWwKICAgICA6IHB1YmxpYyBJV2ViVmlldwpAQCAtNDI3LDcgKzQyMCw2IEBAIHB1Ymxp
YzoKICAgICBib29sIGtleURvd24oV1BBUkFNLCBMUEFSQU0sIGJvb2wgc3lzdGVtS2V5RG93biA9
IGZhbHNlKTsKICAgICBib29sIGtleVVwKFdQQVJBTSwgTFBBUkFNLCBib29sIHN5c3RlbUtleURv
d24gPSBmYWxzZSk7CiAgICAgYm9vbCBrZXlQcmVzcyhXUEFSQU0sIExQQVJBTSwgYm9vbCBzeXN0
ZW1LZXlEb3duID0gZmFsc2UpOwotICAgIHZvaWQgcGFpbnRXaXRoRGlyZWN0MkQoKTsKICAgICB2
b2lkIHBhaW50KEhEQywgTFBBUkFNKTsKICAgICB2b2lkIHBhaW50SW50b1dpbmRvdyhIREMgYml0
bWFwREMsIEhEQyB3aW5kb3dEQywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsK
ICAgICBib29sIGVuc3VyZUJhY2tpbmdTdG9yZSgpOwpAQCAtNjI2LDEyICs2MTgsNiBAQCBwcm90
ZWN0ZWQ6CiAKICAgICBITUVOVSBtX2N1cnJlbnRDb250ZXh0TWVudSB7IG51bGxwdHIgfTsKICAg
ICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkR0RJT2JqZWN0PEhCSVRNQVA+PiBtX2JhY2tpbmdTdG9y
ZUJpdG1hcDsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEMkQxSHduZFJlbmRlclRh
cmdldD4gbV9yZW5kZXJUYXJnZXQ7Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBtX2JhY2tpbmdT
dG9yZUQyREJpdG1hcDsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IG1fYmFj
a2luZ1N0b3JlUmVuZGVyVGFyZ2V0OwotICAgIENPTVB0cjxJRDJEMUdkaUludGVyb3BSZW5kZXJU
YXJnZXQ+IG1fYmFja2luZ1N0b3JlR2RpSW50ZXJvcDsKLSNlbmRpZgogICAgIFNJWkUgbV9iYWNr
aW5nU3RvcmVTaXplOwogICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRHRElPYmplY3Q8SFJHTj4+
IG1fYmFja2luZ1N0b3JlRGlydHlSZWdpb247CiAKSW5kZXg6IFNvdXJjZS9jbWFrZS9PcHRpb25z
RlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9jbWFrZS9PcHRpb25zRlRXLmNtYWtlCShy
ZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvY21ha2UvT3B0aW9uc0ZUVy5jbWFrZQkobm9uZXhp
c3RlbnQpCkBAIC0xLDIzNiArMCwwIEBACi1pZiAoQ01BS0VfVkVSU0lPTiBWRVJTSU9OX0xFU1Mg
My4xNCkKLSAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDTWFrZSAzLjE0IG9yIGdyZWF0ZXIgaXMg
cmVxdWlyZWQgdG8gY29tcGlsZSBXZWJLaXRGVFciKQotZW5kaWYgKCkKLQotaWYgKE1TVkNfVkVS
U0lPTiBWRVJTSU9OX0xFU1MgMTkyMCkKLSAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJWaXN1YWwg
U3R1ZGlvIDIwMTkgaXMgcmVxdWlyZWQgdG8gY29tcGlsZSBXZWJLaXRGVFciKQotZW5kaWYgKCkK
LQotaWYgKCR7V1RGX0NQVV9YODZ9KQotICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIldlYktpdEZU
VyBkb2VzIG5vdCBzdXBwb3J0IDMyLWJpdCBidWlsZHMiKQotZW5kaWYgKCkKLQotc2V0KFBPUlQg
RlRXKQotCi0jIENvbXBpbGF0aW9uIG9wdGlvbnMKLWluY2x1ZGUoT3B0aW9uc01TVkMpCi0KLWFk
ZF9kZWZpbml0aW9ucygtRFdURl9QTEFURk9STV9GVFc9MSkKLSMgUHJldmVudCBtaW4oKSBhbmQg
bWF4KCkgbWFjcm9zIGZyb20gYmVpbmcgZXhwb3NlZAotYWRkX2RlZmluaXRpb25zKC1ETk9NSU5N
QVgpCi0jIFVzZSB1bmljb2RlCi1hZGRfZGVmaW5pdGlvbnMoLURVTklDT0RFIC1EX1VOSUNPREUp
Ci0jIElmIDx3aW5zb2NrMi5oPiBpcyBub3QgaW5jbHVkZWQgYmVmb3JlIDx3aW5kb3dzLmg+IHJl
ZGVmaW5pdGlvbiBlcnJvcnMgb2NjdXIKLSMgdW5sZXNzIF9XSU5TT0NLQVBJXyBpcyBkZWZpbmVk
IGJlZm9yZSA8d2luZG93cy5oPiBpcyBpbmNsdWRlZAotYWRkX2RlZmluaXRpb25zKC1EX1dJTlNP
Q0tBUElfPSkKLQotIyBTZXR1cCBsaWJyYXJ5IHBhdGhzCi1pZiAoREVGSU5FRCBFTlZ7QXBwbGVB
cHBsaWNhdGlvblN1cHBvcnRTREt9KQotICAgIGZpbGUoVE9fQ01BS0VfUEFUSCAiJEVOVntBcHBs
ZUFwcGxpY2F0aW9uU3VwcG9ydFNES30vQXBwbGVJbnRlcm5hbCIgV0VCS0lUX0xJQlJBUklFU19E
SVIpCi0gICAgc2V0KFdFQktJVF9MSUJSQVJJRVNfSU5DTFVERV9ESVIgIiR7V0VCS0lUX0xJQlJB
UklFU19ESVJ9L2luY2x1ZGUiKQotICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtXRUJLSVRfTElC
UkFSSUVTX0lOQ0xVREVfRElSfSkKLSAgICBzZXQoQVBQTEVfQlVJTEQgMSkKLWVuZGlmICgpCi0K
LWlmIChOT1QgV0VCS0lUX0xJQlJBUklFU19ESVIpCi0gICAgaWYgKERFRklORUQgRU5We1dFQktJ
VF9MSUJSQVJJRVN9KQotICAgICAgICBmaWxlKFRPX0NNQUtFX1BBVEggIiRFTlZ7V0VCS0lUX0xJ
QlJBUklFU30iIFdFQktJVF9MSUJSQVJJRVNfRElSKQotICAgIGVsc2UgKCkKLSAgICAgICAgZmls
ZShUT19DTUFLRV9QQVRIICIke0NNQUtFX1NPVVJDRV9ESVJ9L1dlYktpdExpYnJhcmllcy93aW4i
IFdFQktJVF9MSUJSQVJJRVNfRElSKQotICAgIGVuZGlmICgpCi1lbmRpZiAoKQotCi1zZXQoQ01B
S0VfUFJFRklYX1BBVEggJHtXRUJLSVRfTElCUkFSSUVTX0RJUn0pCi0KLXNldF9wcm9wZXJ0eShH
TE9CQUwgUFJPUEVSVFkgRklORF9MSUJSQVJZX1VTRV9MSUIzMl9QQVRIUyBPRkYpCi1zZXRfcHJv
cGVydHkoR0xPQkFMIFBST1BFUlRZIEZJTkRfTElCUkFSWV9VU0VfTElCNjRfUEFUSFMgT04pCi0K
LXNldChXRUJLSVRfTElCUkFSSUVTX0xJTktfRElSICIke1dFQktJVF9MSUJSQVJJRVNfRElSfS9s
aWI2NCIpCi0jIEZJWE1FOiBSZW1vdmUgJHtXRUJLSVRfTElCUkFSSUVTX0xJTktfRElSfSB3aGVu
IGZpbmRfbGlicmFyeSBpcyB1c2VkIGZvciBldmVyeXRoaW5nCi1saW5rX2RpcmVjdG9yaWVzKCIk
e0NNQUtFX0JJTkFSWV9ESVJ9L2xpYjY0IiAiJHtXRUJLSVRfTElCUkFSSUVTX0xJTktfRElSfSIp
Ci1zZXQoQ01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQklOQVJZX0RJUn0v
bGliNjQpCi1zZXQoQ01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQklOQVJZ
X0RJUn0vbGliNjQpCi1zZXQoQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0Vf
QklOQVJZX0RJUn0vYmluNjQpCi0KLXNldChDTUFLRV9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUllf
REVCVUcgIiR7Q01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZfSIpCi1zZXQoQ01BS0VfQVJD
SElWRV9PVVRQVVRfRElSRUNUT1JZX1JFTEVBU0UgIiR7Q01BS0VfQVJDSElWRV9PVVRQVVRfRElS
RUNUT1JZfSIpCi1zZXQoQ01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZX0RFQlVHICIke0NN
QUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWX0iKQotc2V0KENNQUtFX0xJQlJBUllfT1VUUFVU
X0RJUkVDVE9SWV9SRUxFQVNFICIke0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWX0iKQot
c2V0KENNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWV9ERUJVRyAiJHtDTUFLRV9SVU5USU1F
X09VVFBVVF9ESVJFQ1RPUll9IikKLXNldChDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUllf
UkVMRUFTRSAiJHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9IikKLQotV0VCS0lUX09Q
VElPTl9CRUdJTigpCi0KLSMgRmVhdHVyZXMgaW4gdGhlIHNhbWUgc3RhdGUgb24gV2luQ2Fpcm8g
YW5kIEFwcGxlV2luCi0KLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV8z
RF9UUkFOU0ZPUk1TIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfQVRUQUNITUVOVF9FTEVNRU5UIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ0FDSEVfUEFSVElUSU9OSU5HIFBSSVZBVEUgT04pCi1X
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcg
UFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1Mz
X1RFWFQgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX0NPTklDX0dSQURJRU5UUyBQUklWQVRFIE9OKQot
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19ERVZJQ0VfQURBUFRB
VElPTiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9DU1NfSU1BR0VfUkVTT0xVVElPTiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1NfUEFJTlRJTkdfQVBJIFBSSVZBVEUgT04pCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX1NFTEVDVE9SU19MRVZFTDQgUFJJ
VkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DVVJTT1Jf
VklTSUJJTElUWSBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX0RSQUdfU1VQUE9SVCBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX0ZJTFRFUlNfTEVWRUxfMiBQUklWQVRFIE9OKQotV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0ZUTF9KSVQgUFJJVkFURSBPRkYpCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRlRQRElSIFBSSVZBVEUgT04pCi1XRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRlVMTFNDUkVFTl9BUEkgUFJJVkFU
RSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfR0VPTE9DQVRJ
T04gUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9N
QUNfR0VTVFVSRV9FVkVOVFMgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfTUFUSE1MIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfTUVESUFfQ09OVFJPTFNfU0NSSVBUIFBSSVZBVEUgT04pCi1XRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTUhUTUwgUFJJVkFURSBPRkYpCi1X
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTUlOSUJST1dTRVIgUFJJVkFU
RSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9NT1VTRV9DVVJT
T1JfU0NBTEUgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX09SSUVOVEFUSU9OX0VWRU5UUyBQUklWQVRFIE9GRikKLVdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9PVkVSRkxPV19TQ1JPTExJTkdf
VE9VQ0ggUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfUFVCTElDX1NVRkZJWF9MSVNUIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfU0FNUExJTkdfUFJPRklMRVIgUFJJVkFURSBPRkYpCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU1BFTExDSEVDSyBQUklWQVRFIE9GRikK
LVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9UT1VDSF9FVkVOVFMgUFJJ
VkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVE9VQ0hf
U0xJREVSIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX1VOSUZJRURfQlVJTERTIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfVklERU8gUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9XRUJBU1NFTUJMWSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJHTCBQUklWQVRFIE9OKQotV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCBQUklW
QVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9YU0xUIFBS
SVZBVEUgT04pCi0KLSMgTWVkaWEgdGhpbmdzIHRoYXQgc2hvdWxkIGJlIG9uCi1XRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQVZGX0NBUFRJT05TIFBSSVZBVEUgT0ZGKQot
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQl9BVURJTyBQUklWQVRF
IE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9MRUdBQ1lfRU5D
UllQVEVEX01FRElBIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX01FRElBX0NBUFRVUkUgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfTUVESUFfU09VUkNFIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MgUFJJVkFURSBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTUVESUFfU1RSRUFN
IFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1ZJ
REVPX1BSRVNFTlRBVElPTl9NT0RFIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOIFBSSVZBVEUg
T0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQl9SVEMgUFJJ
VkFURSBPRkYpCi0KLSMgUGF5bWVudCB0aGluZ3MKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9BUFBMRV9QQVkgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfUEFZTUVOVF9SRVFVRVNUIFBSSVZBVEUgT0ZGKQotCi0jIFdl
YkdMCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCR0wyIFBSSVZB
VEUgT0ZGKQotCi0jIE9mZiBmb3Igbm93LCBidXQgc2hvdWxkIGJlIG9uCi1XRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQVBJX1RFU1RTIFBSSVZBVEUgT0ZGKQotV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FQUExJQ0FUSU9OX01BTklGRVNUIFBS
SVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FTWU5D
X1NDUk9MTElORyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9DT05URU5UX0VYVEVOU0lPTlMgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ09OVEVOVF9GSUxURVJJTkcgUFJJVkFURSBPRkYpCi1X
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX1RZUEVEX09NIFBSSVZB
VEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0RBUktfTU9E
RV9DU1MgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfREFUQUNVRV9WQUxVRSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTiBQUklWQVRFIE9G
RikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ET1dOTE9BRF9BVFRS
SUJVVEUgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfRU5DUllQVEVEX01FRElBIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX0lOVEVMTElHRU5UX1RSQUNLSU5HX1BSRVZFTlRJT04gUFJJVkFURSBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTEFZRVJfQkFTRURf
U1ZHX0VOR0lORSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9MQVlPVVRfRk9STUFUVElOR19DT05URVhUIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0xFVFRFUlBSRVNTIFBSSVZBVEUgT0ZGKQot
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0xBWU9VVF9GT1JNQVRUSU5H
X0NPTlRFWFQgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfTEVUVEVSUFJFU1MgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfTUVNT1JZX1NBTVBMRVIgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZB
TElEQVRJT04gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfTkVUV09SS19DQUNIRV9TVEFMRV9XSElMRV9SRVZBTElEQVRFIFBSSVZBVEUgT0ZGKQot
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX05PVElGSUNBVElPTlMgUFJJ
VkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfT1ZFUkZM
T1dfU0NST0xMSU5HX1RPVUNIIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX1BERktJVF9QTFVHSU4gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUE9JTlRFUl9MT0NLIFBSSVZBVEUgT0ZGKQotV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFU09VUkNFX1VTQUdFIFBSSVZB
VEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JVQkJFUl9C
QU5ESU5HIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX1NBTkRCT1hfRVhURU5TSU9OUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9TRVJWRVJfUFJFQ09OTkVDVCBQUklWQVRFIE9GRikKLVdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TRVJWSUNFX0NPTlRST0xTIFBSSVZB
VEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NFUlZJQ0Vf
V09SS0VSIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX1NIQVJFQUJMRV9SRVNPVVJDRSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9TTU9PVEhfU0NST0xMSU5HIFBSSVZBVEUgT0ZGKQotV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NQRUVDSF9TWU5USEVTSVMgUFJJVkFU
RSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVEVMRVBIT05F
X05VTUJFUl9ERVRFQ1RJT04gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfVEVYVF9BVVRPU0laSU5HIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1VTRVJfTUVTU0FHRV9IQU5ETEVSUyBQUklWQVRF
IE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9WQVJJQVRJT05f
Rk9OVFMgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfV0VCRFJJVkVSIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX1dFQl9BVVRITiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9XRUJfQ1JZUFRPIFBSSVZBVEUgT0ZGKQotCi0jV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoVVNFX1ZFUlNJT05fU1RBTVBFUiBQUklWQVRFIE9OKQotCi0j
IEV4cGVyaW1lbnRhbCBmZWF0dXJlcwotI1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SIFBSSVZBVEUgJHtFTkFCTEVfRVhQRVJJTUVOVEFMX0ZF
QVRVUkVTfSkKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRU1PVEVf
SU5TUEVDVE9SIFBSSVZBVEUgT0ZGKQotI1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9SRVNPVVJDRV9VU0FHRSBQUklWQVRFICR7RU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFU
VVJFU30pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVTT1VSQ0Vf
VVNBR0UgUFJJVkFURSBPRkYpCi0KLSMgRmVhdHVyZXMgdG8gaW52ZXN0aWdhdGUKLSMKLSMgRmVh
dHVyZXMgdGhhdCBhcmUgdGVtcG9yYXJpbHkgdHVybmVkIG9mZiBiZWNhdXNlIGFuIGltcGxlbWVu
dGF0aW9uIGlzIG5vdAotIyBwcmVzZW50IGF0IHRoaXMgdGltZQotV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX0ZUTF9KSVQgUFJJVkFURSBPRkYpCi0KLSMgTm8gc3VwcG9y
dCBwbGFubmVkCi0KLSMgRklYTUU6IFBvcnQgYm1hbGxvYyB0byBXaW5kb3dzLiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzMzEwCi1XRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShVU0VfU1lTVEVNX01BTExPQyBQUklWQVRFIE9OKQotCi1XRUJLSVRfT1BU
SU9OX0VORCgpCi0KLWlmIChBUFBMRV9CVUlMRCkKLSAgICBzZXQoQ09SRUZPVU5EQVRJT05fTElC
UkFSWSBDb3JlRm91bmRhdGlvbiR7REVCVUdfU1VGRklYfSkKLSAgICBTRVRfQU5EX0VYUE9TRV9U
T19CVUlMRChVU0VfQ0YgT04pCi0gICAgZmluZF9wYWNrYWdlKExpYlhtbDIgMi45LjEgUkVRVUlS
RUQpCi0gICAgaWYgKEVOQUJMRV9YU0xUKQotICAgICAgICBmaW5kX3BhY2thZ2UoTGliWHNsdCAx
LjEuMjggUkVRVUlSRUQpCi0gICAgZW5kaWYgKCkKLWVsc2UgKCkKLSAgICBmaW5kX3BhY2thZ2Uo
TGliWG1sMiAyLjkuNyBSRVFVSVJFRCkKLSAgICBpZiAoRU5BQkxFX1hTTFQpCi0gICAgICAgIGZp
bmRfcGFja2FnZShMaWJYc2x0IDEuMS4zMiBSRVFVSVJFRCkKLSAgICBlbmRpZiAoKQotZW5kaWYg
KCkKLQotZmluZF9wYWNrYWdlKENVUkwgNy42MC4wIFJFUVVJUkVEKQotZmluZF9wYWNrYWdlKElD
VSA2MS4yIFJFUVVJUkVEIENPTVBPTkVOVFMgZGF0YSBpMThuIHVjKQotZmluZF9wYWNrYWdlKEpQ
RUcgMS41LjIgUkVRVUlSRUQpCi1maW5kX3BhY2thZ2UoT3BlblNTTCAyLjAuMCBSRVFVSVJFRCkK
LWZpbmRfcGFja2FnZShQTkcgMS42LjM0IFJFUVVJUkVEKQotZmluZF9wYWNrYWdlKFNRTGl0ZTMg
My4yMy4xIFJFUVVJUkVEKQotZmluZF9wYWNrYWdlKFpMSUIgMS4yLjExIFJFUVVJUkVEKQotZmlu
ZF9wYWNrYWdlKExpYlBTTCAwLjIwLjIgUkVRVUlSRUQpCi0KLSMgRklYTUU6IFdlIHNob3VsZCBh
ZGQgdGhlIGZvbGxvd2luZywgdG9vLgotIyBmaW5kX3BhY2thZ2UoV2ViUCBSRVFVSVJFRCBDT01Q
T05FTlRTIGRlbXV4KQotIyBpZiAoV2ViUF9GT1VORCkKLSMgICAgIFNFVF9BTkRfRVhQT1NFX1RP
X0JVSUxEKFVTRV9XRUJQIE9OKQotIyBlbmRpZiAoKQotCi1zZXQoVVNFX0FOR0xFX0VHTCBPTikK
LQotU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0NVUkwgT04pCi1TRVRfQU5EX0VYUE9TRV9U
T19CVUlMRChVU0VfRElSRUNUMkQgT04pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfRUdM
IE9OKQotU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX09QRU5HTF9FUyBPTikKLVNFVF9BTkRf
RVhQT1NFX1RPX0JVSUxEKEhBVkVfT1BFTkdMX0VTXzMgT04pCi1TRVRfQU5EX0VYUE9TRV9UT19C
VUlMRChVU0VfT1BFTlNTTCBPTikKLVNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9URVhUVVJF
X01BUFBFUiBPTikKLVNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9URVhUVVJFX01BUFBFUl9H
TCBPTikKLSNTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfSU5TUEVDVE9SX1NPQ0tFVF9TRVJW
RVIgJHtFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUn0pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChV
U0VfSU5TUEVDVE9SX1NPQ0tFVF9TRVJWRVIgT0ZGKQotCi1zZXQoV1RGX0xJQlJBUllfVFlQRSBT
SEFSRUQpCi1zZXQoSmF2YVNjcmlwdENvcmVfTElCUkFSWV9UWVBFIFNIQVJFRCkKLQotc2V0KEVO
QUJMRV9BUElfVEVTVFMgT0ZGKQotc2V0KEVOQUJMRV9XRUJDT1JFIE9OKQotc2V0KEVOQUJMRV9X
RUJLSVQgT04pCi1zZXQoRU5BQkxFX1dFQktJVF9MRUdBQ1kgT04pCkluZGV4OiBUb29scy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc4MTIpCisr
KyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAyMi0w
MS0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHN1
cHBvcnQgZm9yIERpcmVjdDJECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzQ5OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuY3BwOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL1BsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydFdpbi5jcHA6
CisgICAgICAgIChjcmVhdGVCaXRtYXBDb250ZXh0RnJvbVdlYlZpZXcpOgorICAgICAgICAqIFBs
YXRmb3JtRlRXLmNtYWtlOiBSZW1vdmVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGVQYWdlOjpkdW1wRE9NQXNXZWJBcmNoaXZlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL1BsYXRmb3JtRlRXLmNtYWtlOiBSZW1vdmVkLgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvUGxhdGZvcm1XZWJWaWV3Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4v
UGxhdGZvcm1XZWJWaWV3V2luLmNwcDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL3dpbi9U
ZXN0SW52b2NhdGlvbkRpcmVjdDJELmNwcDogUmVtb3ZlZC4KKwogMjAyMi0wMS0wOCAgVHlsZXIg
V2lsY29jayAgPHR5bGVyX3dAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpzZXRGb2N1c2VkKHRydWUpIHNob3VsZCBtYWtlIHRoZSB3ZWJwYWdlIGZvY3VzZWQs
IGFuZCBtYWtlIHdlYiBjb250ZW50IHRoZSBmaXJzdCByZXNwb25kZXIKSW5kZXg6IFRvb2xzL1Bs
YXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1BsYXRmb3JtRlRXLmNtYWtlCShy
ZXZpc2lvbiAyODc4MTIpCisrKyBUb29scy9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQp
CkBAIC0xLDExICswLDAgQEAKLSNhZGRfc3ViZGlyZWN0b3J5KEltYWdlRGlmZikKLQotaWYgKEVO
QUJMRV9XRUJLSVRfTEVHQUNZKQotICAgICNhZGRfc3ViZGlyZWN0b3J5KER1bXBSZW5kZXJUcmVl
KQotICAgIGFkZF9zdWJkaXJlY3RvcnkoTWluaUJyb3dzZXIvd2luKQotZW5kaWYgKCkKLQotaWYg
KEVOQUJMRV9XRUJLSVQpCi0gICAgYWRkX3N1YmRpcmVjdG9yeShUZXN0UnVubmVyU2hhcmVkKQot
ICAgIGFkZF9zdWJkaXJlY3RvcnkoV2ViS2l0VGVzdFJ1bm5lcikKLWVuZGlmICgpCkluZGV4OiBU
b29scy9EdW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0LmNwcAkocmV2aXNpb24gMjg3ODEy
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDggKzQxLDYgQEAKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0Q0cuaCIK
ICNlbGlmIFVTRShDQUlSTykKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0Q2Fpcm8uaCIKLSNl
bGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuaCIK
ICNlbmRpZgogCiB2b2lkIGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVk
KGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZEhhc2gpCkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS9QbGF0Zm9ybVdpbi5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJl
ZS9QbGF0Zm9ybVdpbi5jbWFrZQkocmV2aXNpb24gMjg3ODEyKQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvUGxhdGZvcm1XaW4uY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTUyLDI0ICs1MiwxNSBA
QCBlbHNlICgpCiAgICAgICAgIENGTmV0d29yawogICAgICAgICBDb3JlVGV4dAogICAgICkKLSAg
ICBpZiAoJHtVU0VfRElSRUNUMkR9KQotICAgICAgICBsaXN0KEFQUEVORCBEdW1wUmVuZGVyVHJl
ZV9TT1VSQ0VTCi0gICAgICAgICAgICB3aW4vUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmNwcAot
ICAgICAgICApCi0gICAgICAgIGxpc3QoQVBQRU5EIER1bXBSZW5kZXJUcmVlX0xJQlJBUklFUwot
ICAgICAgICAgICAgRDJkMQotICAgICAgICApCi0gICAgZWxzZSAoKQotICAgICAgICBsaXN0KEFQ
UEVORCBEdW1wUmVuZGVyVHJlZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAgICAg
ICAgICR7RHVtcFJlbmRlclRyZWVfRElSfS9jZwotICAgICAgICApCi0gICAgICAgIGxpc3QoQVBQ
RU5EIER1bXBSZW5kZXJUcmVlX1NPVVJDRVMKLSAgICAgICAgICAgIGNnL1BpeGVsRHVtcFN1cHBv
cnRDRy5jcHAKLSAgICAgICAgKQotICAgICAgICBsaXN0KEFQUEVORCBEdW1wUmVuZGVyVHJlZV9M
SUJSQVJJRVMKLSAgICAgICAgICAgIENvcmVHcmFwaGljcwotICAgICAgICApCi0gICAgZW5kaWYg
KCkKKyAgICBsaXN0KEFQUEVORCBEdW1wUmVuZGVyVHJlZV9QUklWQVRFX0lOQ0xVREVfRElSRUNU
T1JJRVMKKyAgICAgICAgJHtEdW1wUmVuZGVyVHJlZV9ESVJ9L2NnCisgICAgKQorICAgIGxpc3Qo
QVBQRU5EIER1bXBSZW5kZXJUcmVlX1NPVVJDRVMKKyAgICAgICAgY2cvUGl4ZWxEdW1wU3VwcG9y
dENHLmNwcAorICAgICkKKyAgICBsaXN0KEFQUEVORCBEdW1wUmVuZGVyVHJlZV9MSUJSQVJJRVMK
KyAgICAgICAgQ29yZUdyYXBoaWNzCisgICAgKQogZW5kaWYgKCkKIAogV0VCS0lUX0FERF9QUkVD
T01QSUxFRF9IRUFERVIoIkR1bXBSZW5kZXJUcmVlUHJlZml4LmgiICJ3aW4vRHVtcFJlbmRlclRy
ZWVQcmVmaXguY3BwIiBEdW1wUmVuZGVyVHJlZV9TT1VSQ0VTKQpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL1BpeGVsRHVtcFN1cHBvcnREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BpeGVsRHVtcFN1cHBvcnREaXJlY3QyRC5jcHAJKHJl
dmlzaW9uIDI4NzgxMikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBw
b3J0RGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsODEgKzAsMCBAQAotLyoKLSogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0q
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0q
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGl4ZWxEdW1wU3Vw
cG9ydERpcmVjdDJELmgiCi0KLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgotI2luY2x1ZGUg
IlBpeGVsRHVtcFN1cHBvcnQuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y3R5
cGUuaD4KLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KLQotCi1zdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VU
VHlwZVBORyA9IENGU1RSKCJwdWJsaWMucG5nIik7Ci0KLUlEMkQxRmFjdG9yeSogcGl4ZWxEdW1w
U3lzdGVtRmFjdG9yeSgpCi17Ci0gICAgc3RhdGljIElEMkQxRmFjdG9yeSogZGlyZWN0MkRGYWN0
b3J5ID0gbnVsbHB0cjsKLSAgICBpZiAoIWRpcmVjdDJERmFjdG9yeSkgewotI2lmbmRlZiBOREVC
VUcKLSAgICAgICAgRDJEMV9GQUNUT1JZX09QVElPTlMgb3B0aW9ucyA9IHsgfTsKLSAgICAgICAg
b3B0aW9ucy5kZWJ1Z0xldmVsID0gRDJEMV9ERUJVR19MRVZFTF9JTkZPUk1BVElPTjsKLSAgICAg
ICAgSFJFU1VMVCBociA9IEQyRDFDcmVhdGVGYWN0b3J5KEQyRDFfRkFDVE9SWV9UWVBFX01VTFRJ
X1RIUkVBREVELCBvcHRpb25zLCAmZGlyZWN0MkRGYWN0b3J5KTsKLSNlbHNlCi0gICAgICAgIEhS
RVNVTFQgaHIgPSBEMkQxQ3JlYXRlRmFjdG9yeShEMkQxX0ZBQ1RPUllfVFlQRV9NVUxUSV9USFJF
QURFRCwgJmRpcmVjdDJERmFjdG9yeSk7Ci0jZW5kaWYKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
U1VDQ0VFREVEKGhyKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRpcmVjdDJERmFjdG9yeTsKLX0K
LQotc3RhdGljIHZvaWQgcHJpbnRQTkcoSUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBjaGFyKiBj
aGVja3N1bSkKLXsKLSAgICBVTlVTRURfUEFSQU0oaW1hZ2UpOwotICAgIFVOVVNFRF9QQVJBTShj
aGVja3N1bSk7Ci0gICAgLy8gTm90IGltcGxlbWVudGVkLgotfQotCi12b2lkIGNvbXB1dGVTSEEx
SGFzaFN0cmluZ0ZvckJpdG1hcENvbnRleHQoQml0bWFwQ29udGV4dCogY29udGV4dCwgY2hhciBo
YXNoU3RyaW5nWzMzXSkKLXsKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGhhc2hTdHJpbmcpOwotICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KLX0KLQotdm9pZCBk
dW1wQml0bWFwKEJpdG1hcENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGNoZWNrc3VtKQot
ewotICAgIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElEMkQxQml0bWFwLCAmX191dWlkb2YoSUQyRDFC
aXRtYXApPj4gaW1hZ2U7Ci0gICAgSFJFU1VMVCBociA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5HZXRCaXRtYXAoJmltYWdlKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHByaW50UE5HKGltYWdlLkdldEludGVyZmFjZVB0cigpLCBjaGVja3N1
bSk7Ci19CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydERp
cmVjdDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BpeGVsRHVt
cFN1cHBvcnREaXJlY3QyRC5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2
NCArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlIDxjb21pcC5oPgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotdHlwZWRlZiBIQklUTUFQIFBsYXRm
b3JtQml0bWFwQnVmZmVyOwotCi1jbGFzcyBCaXRtYXBDb250ZXh0IDogcHVibGljIFJlZkNvdW50
ZWQ8Qml0bWFwQ29udGV4dD4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Qml0bWFwQ29udGV4
dD4gY3JlYXRlQnlBZG9wdGluZ0JpdG1hcEFuZENvbnRleHQoUGxhdGZvcm1CaXRtYXBCdWZmZXIg
YnVmZmVyLCBJRDJEMVJlbmRlclRhcmdldCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEJpdG1hcENvbnRleHQoYnVmZmVyLCBjb250ZXh0KSk7Ci0gICAgfQot
Ci0gICAgfkJpdG1hcENvbnRleHQoKQotICAgIHsKLSAgICAgICAgaWYgKG1fYnVmZmVyKQotICAg
ICAgICAgICAgRGVsZXRlT2JqZWN0KG1fYnVmZmVyKTsKLSAgICB9Ci0KLSAgICBJRDJEMUJpdG1h
cFJlbmRlclRhcmdldCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0
LkdldEludGVyZmFjZVB0cigpOyB9Ci0KLXByaXZhdGU6Ci0gICAgQml0bWFwQ29udGV4dChQbGF0
Zm9ybUJpdG1hcEJ1ZmZlciBidWZmZXIsIElEMkQxUmVuZGVyVGFyZ2V0KiBjb250ZXh0KQotICAg
ICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAg
ICB7Ci0gICAgfQotCi0gICAgUGxhdGZvcm1CaXRtYXBCdWZmZXIgbV9idWZmZXI7Ci0gICAgX2Nv
bV9wdHJfdDxfY29tX0lJSUQ8SUQyRDFCaXRtYXAsICZfX3V1aWRvZihJRDJEMUJpdG1hcCk+PiBt
X2JpdG1hcDsKLSAgICBfY29tX3B0cl90PF9jb21fSUlJRDxJRDJEMUJpdG1hcFJlbmRlclRhcmdl
dCwgJl9fdXVpZG9mKElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KT4+IG1fY29udGV4dDsKLX07Ci0K
LVJlZlB0cjxCaXRtYXBDb250ZXh0PiBjcmVhdGVCaXRtYXBDb250ZXh0RnJvbVdlYlZpZXcoYm9v
bCBvbnNjcmVlbiwgYm9vbCBpbmNyZW1lbnRhbFJlcGFpbnQsIGJvb2wgc3dlZXBIb3Jpem9udGFs
bHksIGJvb2wgZHJhd1NlbGVjdGlvblJlY3QpOwotSUQyRDFGYWN0b3J5KiBwaXhlbER1bXBTeXN0
ZW1GYWN0b3J5KCk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3Vw
cG9ydFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BpeGVs
RHVtcFN1cHBvcnRXaW4uY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDgg
KzMyLDYgQEAKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0Q0cuaCIKICNlbGlmIFVTRShDQUlS
TykKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0Q2Fpcm8uaCIKLSNlbGlmIFVTRShESVJFQ1Qy
RCkKLSNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuaCIKICNlbmRpZgogCiAjaW5j
bHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKQEAgLTk2LDE5ICs5NCw2IEBAIFJlZlB0cjxCaXRtYXBD
b250ZXh0PiBjcmVhdGVCaXRtYXBDb250ZXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uYm1XaWR0aCwgaW5mby5ibUhlaWdodCwgaW5m
by5ibVdpZHRoQnl0ZXMpOyAKICAgICBjYWlyb190KiBjb250ZXh0ID0gY2Fpcm9fY3JlYXRlKGlt
YWdlKTsgCiAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGltYWdlKTsKLSNlbGlmIFVTRShESVJF
Q1QyRCkKLSAgICBhdXRvIHRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQcm9w
ZXJ0aWVzKCk7Ci0gICAgdGFyZ2V0UHJvcGVydGllcy5waXhlbEZvcm1hdCA9IEQyRDE6OlBpeGVs
Rm9ybWF0KERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNLCBEMkQxX0FMUEhBX01PREVfSUdOT1JF
KTsKLQotICAgIENPTVB0cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7Ci0gICAg
SFJFU1VMVCBociA9IHBpeGVsRHVtcFN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJn
ZXQoJnRhcmdldFByb3BlcnRpZXMsICZyZW5kZXJUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVE
KGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBociA9IHJlbmRlclRhcmdldC0+
QmluZERDKG1lbW9yeURDLmdldCgpLCAmZnJhbWUpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBjb250ZXh0ID0gcmVuZGVyVGFyZ2V0
LmdldCgpOwogI2VuZGlmIAogCiAgICAgcmV0dXJuIEJpdG1hcENvbnRleHQ6OmNyZWF0ZUJ5QWRv
cHRpbmdCaXRtYXBBbmRDb250ZXh0KGJpdG1hcCwgV1RGTW92ZShjb250ZXh0KSk7CkluZGV4OiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1GVFcuY21ha2UJKHJldmlzaW9uIDI4NzgxMikK
KysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1GVFcuY21ha2UJKG5vbmV4aXN0ZW50
KQpAQCAtMSw0MCArMCwwIEBACi1saXN0KEFQUEVORCBXZWJLaXRUZXN0UnVubmVyX1NPVVJDRVMK
LSAgICB3aW4vRXZlbnRTZW5kZXJQcm94eVdpbi5jcHAKLSAgICB3aW4vUGxhdGZvcm1XZWJWaWV3
V2luLmNwcAotICAgIHdpbi9UZXN0Q29udHJvbGxlcldpbi5jcHAKLSAgICB3aW4vVGVzdEludm9j
YXRpb25EaXJlY3QyRC5jcHAKLSAgICB3aW4vVUlTY3JpcHRDb250cm9sbGVyV2luLmNwcAotICAg
IHdpbi9tYWluLmNwcAotKQotCi1zZXQod3JhcHBlcl9ERUZJTklUSU9OUwotICAgIFVTRV9DT05T
T0xFX0VOVFJZX1BPSU5UCi0gICAgV0lOX0NBSVJPCi0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdFRl
c3RSdW5uZXJJbmplY3RlZEJ1bmRsZV9TT1VSQ0VTCi0gICAgSW5qZWN0ZWRCdW5kbGUvd2luL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcAotICAgIEluamVjdGVkQnVuZGxlL3dpbi9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50V2luLmNwcAotICAgIEluamVjdGVkQnVuZGxlL3dpbi9BY3RpdmF0
ZUZvbnRzV2luLmNwcAotICAgIEluamVjdGVkQnVuZGxlL3dpbi9JbmplY3RlZEJ1bmRsZVdpbi5j
cHAKLSAgICBJbmplY3RlZEJ1bmRsZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAKLSkKLQotbGlzdChB
UFBFTkQgV2ViS2l0VGVzdFJ1bm5lcl9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgJHtXZWJLaXRU
ZXN0UnVubmVyX0RJUn0vSW5qZWN0ZWRCdW5kbGUvd2luCi0pCi0KLWxpc3QoQVBQRU5EIFdlYktp
dFRlc3RSdW5uZXJfTElCUkFSSUVTCi0gICAgQ29tc3VwcHcKLSAgICBPbGVhY2MKLSkKLQotV0VC
S0lUX0FERF9QUkVDT01QSUxFRF9IRUFERVIoIldlYktpdFRlc3RSdW5uZXJQcmVmaXguaCIgIndp
bi9XZWJLaXRUZXN0UnVubmVyUHJlZml4LmNwcCIgV2ViS2l0VGVzdFJ1bm5lcl9TT1VSQ0VTKQot
Ci1zZXQoQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHUyAiJHtDTUFLRV9TSEFSRURfTElOS0VSX0ZM
QUdTfSAke01TVkNfUlVOVElNRV9MSU5LRVJfRkxBR1N9IikKLQotV0VCS0lUX1dSQVBfRVhFQ1VU
QUJMRShXZWJLaXRUZXN0UnVubmVyCi0gICAgU09VUkNFUyAke1RPT0xTX0RJUn0vd2luL0RMTExh
dW5jaGVyL0RMTExhdW5jaGVyTWFpbi5jcHAKLSAgICBMSUJSQVJJRVMgc2hsd2FwaQotKQotdGFy
Z2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoV2ViS2l0VGVzdFJ1bm5lciBQUklWQVRFICR7d3JhcHBl
cl9ERUZJTklUSU9OU30pCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2Vi
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJW
aWV3LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZv
cm1XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDExICs1NCw3IEBAIGNsYXNzIEhlYWRs
ZXNzVmlld0JhY2tlbmQ7CiB0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdLVmlldzsKIHR5cGVk
ZWYgV1BFVG9vbGluZ0JhY2tlbmRzOjpIZWFkbGVzc1ZpZXdCYWNrZW5kKiBQbGF0Zm9ybVdpbmRv
dzsKICNlbGlmIFBMQVRGT1JNKFdJTikKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZDJk
MV8xLmg+Ci0jZWxzZQogI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYKIGNsYXNzIFRlc3RSdW5u
ZXJXaW5kb3c7CiB0eXBlZGVmIEhXTkQgUGxhdGZvcm1XaW5kb3c7CiB0eXBlZGVmIFdLVmlld1Jl
ZiBQbGF0Zm9ybVdLVmlldzsKQEAgLTY2LDEwICs2Miw2IEBAIHR5cGVkZWYgV0tWaWV3UmVmIFBs
YXRmb3JtV0tWaWV3OwogCiAjaWYgVVNFKENBSVJPKQogdHlwZWRlZiBjYWlyb19zdXJmYWNlX3Qq
IFBsYXRmb3JtSW1hZ2U7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQyRDFCaXRt
YXA7Ci0KLXR5cGVkZWYgSUQyRDFCaXRtYXAqIFBsYXRmb3JtSW1hZ2U7CiAjZW5kaWYKIAogbmFt
ZXNwYWNlIFdUUiB7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0luamVjdGVkQnVuZGxlUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCShyZXZpc2lvbiAyODc4
MTIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAKICNpbmNsdWRlIDx3
dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CiAjZW5kaWYKIAotI2lmIFVTRShDRikg
JiYgIVBMQVRGT1JNKFdJTl9DQUlSTykgJiYgIVVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0YpICYm
ICFQTEFURk9STShXSU5fQ0FJUk8pCiAjaW5jbHVkZSAiV2ViQXJjaGl2ZUR1bXBTdXBwb3J0Lmgi
CiAjZW5kaWYKIApAQCAtNzgwLDcgKzc4MCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpk
dW1wQWxsRnJhbWVzVGUKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBET01Bc1dlYkFy
Y2hpdmUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRl
cikKIHsKLSNpZiBVU0UoQ0YpICYmICFQTEFURk9STShXSU5fQ0FJUk8pICYmICFVU0UoRElSRUNU
MkQpCisjaWYgVVNFKENGKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKQogICAgIGF1dG8gd2tEYXRh
ID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVdlYkFyY2hpdmUoZnJhbWUpKTsKICAgICBhdXRv
IGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKDAsIFdLRGF0YUdldEJ5dGVzKHdrRGF0YS5n
ZXQoKSksIFdLRGF0YUdldFNpemUod2tEYXRhLmdldCgpKSkpOwogICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKFdlYkNvcmVUZXN0U3VwcG9ydDo6Y3JlYXRlWE1MU3RyaW5nRnJvbVdlYkFyY2hpdmVE
YXRhKGNmRGF0YS5nZXQoKSkuZ2V0KCkpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93
aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0
UnVubmVyL3dpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBU
b29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSwxMCArMzksNiBAQAogI2luY2x1ZGUgPGNhaXJvLmg+CiAjZW5kaWYKIAot
I2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkMmQxXzEuaD4KLSNlbmRpZgotCiBuYW1lc3Bh
Y2UgV1RSIHsKIAogc3RhdGljIExQQ1dTVFIgaG9zdFdpbmRvd0NsYXNzTmFtZSA9IEwiV1RSV2Vi
Vmlld0hvc3RXaW5kb3ciOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdElu
dm9jYXRpb25EaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci93aW4vVGVzdEludm9jYXRpb25EaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1Rlc3RJbnZvY2F0aW9uRGlyZWN0MkQuY3BwCShub25l
eGlzdGVudCkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICAgICAgICAgICAoQykgMjAxMSBC
cmVudCBGdWxnaGFtIDxiZnVsZ2hhbUB3ZWJraXQub3JnPi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqICAgICAgICAgICAoQykgMjAxMCwgMjAxMSBJZ2FsaWEgUy5MCi0gKiAgICAgICAgICAgKEMp
IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0SW52b2NhdGlvbi5oIgotCi0jaW5j
bHVkZSAiUGl4ZWxEdW1wU3VwcG9ydC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgot
I2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1l
bnRlZC5oPgotI2luY2x1ZGUgPGNzdGRpbz4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgot
I2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdUUiB7Ci0KLQotdm9p
ZCBUZXN0SW52b2NhdGlvbjo6ZHVtcFBpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoU25hcHNo
b3RSZXN1bHRUeXBlLCBXS0FycmF5UmVmIC8qIHJlcGFpbnRSZWN0cyAqLywgV0tJbWFnZVJlZikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVFIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448687</attachid>
            <date>2022-01-08 17:29:48 -0800</date>
            <delta_ts>2022-01-08 18:28:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234999-20220108172946.patch</filename>
            <type>text/plain</type>
            <size>502330</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI4Nzgx
MikKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAx
LTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3Vw
cG9ydCBmb3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2U6IFJlbW92ZWQuCisKIDIw
MjItMDEtMDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI4NzY5OC4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAxLTA3ICBTYW0g
V2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3Ig
RGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIFNhYW0gQmFyYXRp
ICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQXBwZWFzZSBhbiBh
c3NlcnRpb24gdGhhdCB3YXMgYnJva2VuIGJ5IHIyODc4MDEgYnkgc2xpZ2h0bHkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1GVFcuY21ha2UJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBA
IC0xLDQ0ICswLDAgQEAKLWxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKLSAgICBB
UEkvSlNTdHJpbmdSZWZCU1RSLmNwcAotKQotCi1saXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9Q
VUJMSUNfRlJBTUVXT1JLX0hFQURFUlMKLSAgICBBUEkvSlNTdHJpbmdSZWZCU1RSLmgKLSAgICBB
UEkvSmF2YVNjcmlwdENvcmUuaAotKQotCi1pZiAoVVNFX0NGKQotICAgIGxpc3QoQVBQRU5EIEph
dmFTY3JpcHRDb3JlX1NPVVJDRVMKLSAgICAgICAgQVBJL0pTU3RyaW5nUmVmQ0YuY3BwCi0gICAg
KQotCi0gICAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfUFVCTElDX0ZSQU1FV09SS19IRUFE
RVJTCi0gICAgICAgIEFQSS9KU1N0cmluZ1JlZkNGLmgKLSAgICApCi0KLSAgICBsaXN0KEFQUEVO
RCBKYXZhU2NyaXB0Q29yZV9MSUJSQVJJRVMKLSAgICAgICAgJHtDT1JFRk9VTkRBVElPTl9MSUJS
QVJZfQotICAgICkKLWVuZGlmICgpCi0KLWlmIChOT1QgV1RGX1BMQVRGT1JNX1dJTl9DQUlSTykK
LSAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9MSUJSQVJJRVMKLSAgICAgICAgd2lubW0K
LSAgICApCi1lbmRpZiAoKQotCi1pZiAoRU5BQkxFX1JFTU9URV9JTlNQRUNUT1IpCi0gICAgaW5j
bHVkZShpbnBzZWN0b3IvcmVtb3RlL1NvY2tldC5jbWFrZSkKLWVsc2UgKCkKLSAgICBsaXN0KFJF
TU9WRV9JVEVNIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKLSAgICAgICAgaW5zcGVjdG9yL0pTR2xv
YmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKLSAgICApCi1lbmRpZiAoKQotCi1maWxl
KENPUFkKLSAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUucmVzb3VyY2VzIgotICAgIERFU1RJTkFUSU9OCi0gICAgJHtDTUFLRV9S
VU5USU1FX09VVFBVVF9ESVJFQ1RPUll9Ci0pCi0KLXNldChKYXZhU2NyaXB0Q29yZV9PVVRQVVRf
TkFNRSBKYXZhU2NyaXB0Q29yZSR7REVCVUdfU1VGRklYfSkKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAxLTA3ICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBm
b3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCByZXZlcnRpbmcgcjI4NzY5OC4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL1BsYXRm
b3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL1BsYXRm
b3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDM1ICswLDAgQEAKLSMgV2Un
cmUgdGFyZ2V0aW5nIFdpbmRvd3MgMTAgd2hpY2ggd2lsbCBoYXZlIERpcmVjdFggMTEgb24gaXQg
c28gcmVxdWlyZSB0aGF0Ci0jIGJ1dCBtYWtlIERpcmVjdFggOSBvcHRpb25hbAotCi1saXN0KEFQ
UEVORCBBTkdMRV9ERUZJTklUSU9OUwotICAgIEdMX0FQSUNBTEw9Ci0gICAgR0xfQVBJPQotICAg
IE5PTUlOTUFYCi0pCi0KLSMgV2UncmUgdGFyZ2V0aW5nIFdpbmRvd3MgMTAgd2hpY2ggd2lsbCBo
YXZlIERpcmVjdFggMTEKLWxpc3QoQVBQRU5EIEFOR0xFX1NPVVJDRVMKLSAgICAke19kM2QxMV9i
YWNrZW5kX3NvdXJjZXN9Ci0gICAgJHtfZDNkX3NoYXJlZF9zb3VyY2VzfQotCi0gICAgJHthbmds
ZV90cmFuc2xhdG9yX2hsc2xfc291cmNlc30KLQotICAgICR7bGliYW5nbGVfZ3B1X2luZm9fdXRp
bF9zb3VyY2VzfQotICAgICR7bGliYW5nbGVfZ3B1X2luZm9fdXRpbF93aW5fc291cmNlc30KLSkK
LQotbGlzdChBUFBFTkQgQU5HTEVfREVGSU5JVElPTlMKLSAgICBBTkdMRV9FTkFCTEVfRDNEMTEK
LSAgICBBTkdMRV9FTkFCTEVfSExTTAotKQotCi1saXN0KEFQUEVORCBBTkdMRUdMRVN2Ml9MSUJS
QVJJRVMgZHhndWlkIGR4Z2kpCi0KLSMgRGlyZWN0WCA5IHN1cHBvcnQgc2hvdWxkIGJlIG9wdGlv
bmFsIGJ1dCBBTkdMRSB3aWxsIG5vdCBjb21waWxlIHdpdGhvdXQgaXQKLWxpc3QoQVBQRU5EIEFO
R0xFX1NPVVJDRVMgJHtfZDNkOV9iYWNrZW5kX3NvdXJjZXN9KQotbGlzdChBUFBFTkQgQU5HTEVf
REVGSU5JVElPTlMgQU5HTEVfRU5BQkxFX0QzRDkpCi1saXN0KEFQUEVORCBBTkdMRUdMRVN2Ml9M
SUJSQVJJRVMgZDNkOSkKLQotIyBVc2Ugc2hhcmVkIGxpYnJhcmllcwotc2V0KEdMRVN2Ml9MSUJS
QVJZX1RZUEUgU0hBUkVEKQotc2V0KEVHTF9MSUJSQVJZX1RZUEUgU0hBUkVEKQpJbmRleDogU291
cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMjItMDEtMDcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29t
PgorCisgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBEaXJlY3QyRAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0OTk5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1GVFcuY21ha2U6
IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRvcHQgbGlua2VkT25PckFmdGVyKCkgaW4gbW9yZSBwbGFjZXMK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDYxICswLDAg
QEAKLWxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwotICAgIHRleHQvd2luL1dDaGFyU3Ry
aW5nRXh0cmFzLmgKLQotICAgIHdpbi9EYmdIZWxwZXJXaW4uaAotICAgIHdpbi9HRElPYmplY3Qu
aAotICAgIHdpbi9Tb2Z0TGlua2luZy5oCi0gICAgd2luL1dpbjMySGFuZGxlLmgKLSkKLQotbGlz
dChBUFBFTkQgV1RGX1BSSVZBVEVfTElCUkFSSUVTCi0gICAgRGJnaGVscCAjIEZvciBzeW1ib2wg
aGFuZGxpbmcgPGRiZ2hlbHAuaD4KLSAgICBTaGx3YXBpICMgRm9yIGZpbGUgc3lzdGVtIG9wZXJh
dGlvbnMgPHNobHdhcGkuaD4KLSkKLQotbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwotICAgICBX
aW5tbSAjIEZvciBtdWx0aW1lZGlhIGZ1bmN0aW9ucywgYWxzbyB1c2VkIGluIDx0aW1lYXBpLmg+
Ci0pCi0KLWxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCi0gICAgdGV4dC93aW4vU3RyaW5nV2luLmNw
cAotICAgIHRleHQvd2luL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VXaW4uY3BwCi0KLSAg
ICB3aW4vQ1BVVGltZVdpbi5jcHAKLSAgICB3aW4vRGJnSGVscGVyV2luLmNwcAotICAgIHdpbi9G
aWxlU3lzdGVtV2luLmNwcAotICAgIHdpbi9MYW5ndWFnZVdpbi5jcHAKLSAgICB3aW4vTG9nZ2lu
Z1dpbi5jcHAKLSAgICB3aW4vTWFpblRocmVhZFdpbi5jcHAKLSAgICB3aW4vTWVtb3J5Rm9vdHBy
aW50V2luLmNwcAotICAgIHdpbi9NZW1vcnlQcmVzc3VyZUhhbmRsZXJXaW4uY3BwCi0gICAgd2lu
L09TQWxsb2NhdG9yV2luLmNwcAotICAgIHdpbi9QYXRoV2Fsa2VyLmNwcAotICAgIHdpbi9SdW5M
b29wV2luLmNwcAotICAgIHdpbi9UaHJlYWRpbmdXaW4uY3BwCi0gICAgd2luL1dvcmtRdWV1ZVdp
bi5jcHAKLSkKLQotaWYgKFVTRV9DRikKLSAgICBsaXN0KEFQUEVORCBXVEZfUFVCTElDX0hFQURF
UlMKLSAgICAgICAgY2YvQ0ZVUkxFeHRyYXMuaAotICAgICAgICBjZi9TcGFuQ0YuaAotICAgICAg
ICBjZi9UeXBlQ2FzdHNDRi5oCi0KLSAgICAgICAgdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNG
LmgKLSAgICAgICAgdGV4dC9jZi9UZXh0QnJlYWtJdGVyYXRvckNGLmgKLSAgICApCi0gICAgbGlz
dChBUFBFTkQgV1RGX1NPVVJDRVMKLSAgICAgICAgY2YvQ0ZVUkxFeHRyYXMuY3BwCi0gICAgICAg
IGNmL0ZpbGVTeXN0ZW1DRi5jcHAKLSAgICAgICAgY2YvVVJMQ0YuY3BwCi0KLSAgICAgICAgdGV4
dC9jZi9BdG9tU3RyaW5nSW1wbENGLmNwcAotICAgICAgICB0ZXh0L2NmL1N0cmluZ0NGLmNwcAot
ICAgICAgICB0ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAKLSAgICAgICAgdGV4dC9jZi9TdHJpbmdW
aWV3Q0YuY3BwCi0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUyAke0NPUkVG
T1VOREFUSU9OX0xJQlJBUll9KQotZW5kaWYgKCkKLQotc2V0KFdURl9PVVRQVVRfTkFNRSBXVEYk
e0RFQlVHX1NVRkZJWH0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMzQgQEAKKzIw
MjItMDEtMDcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92
ZSBzdXBwb3J0IGZvciBEaXJlY3QyRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM0OTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9y
bUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtRlRXLmNtYWtlOiBSZW1vdmVkLgor
ICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUYuY3BwOgorICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01lZGlhQUYuaDoKKyAgICAgICAgKiBwYWdlL3dpbi9GcmFtZVdpbkRpcmVjdDJELmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmNyZWF0ZU1JTUVUeXBlUmVnaXN0cnlUaHJl
YWRHbG9iYWxEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4
Q2FjaGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpwcmVUcmFuc2Zvcm1lZE5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJh
dyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
ZHdGb250IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmR3Rm9udEZhY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYWRpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OnByZVRy
YW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzdXBwb3J0c01lZGlhVHlwZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OnNldFRhcmdldENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdy
YXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGF0aDo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBhdGg6OmFkZFJvdW5kZWRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRo
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vY2YvQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbkNGLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNETVNlc3Npb25BVkZvdW5kYXRpb25DRjo6Z2VuZXJhdGVLZXlSZXF1ZXN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50
SW1hZ2U6OmRyYXdQREZQYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T3BlblR5
cGVNYXRoRGF0YTo6T3BlblR5cGVNYXRoRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVu
YW1lQW5kQWN0aXZhdGVGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Qml0bWFwVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjp1cGRh
dGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRl
eHR1cmVHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNv
bnRlbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFj
a2VuZERpcmVjdDJELmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4
dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGll
cy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJE
VXRpbGl0aWVzLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Rp
cmVjdFdyaXRlVXRpbGl0aWVzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFNpemVEaXJlY3QyRC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGly
ZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0
Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250UGxhdGZvcm1EYXRhRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dFdpbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dFdpbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGly
ZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0xheWVyRGlyZWN0MkQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3Qy
RC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVj
b2RlckRpcmVjdDJELmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9OYXRpdmVJbWFnZURpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVG
b250RGF0YURpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VEaXJlY3QyRC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRl
ckVmZmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZl
SW1hZ2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5oOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5oOgorCiAyMDIyLTAxLTA4ICBH
YWJyaWVsIE5hdmEgTWFyaW5vICA8Z25hdmFtYXJpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIG51
bGwgcHRyIGRlcmVmIGluIFdlYkNvcmU6Ok1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6
OmFwcGVuZFNpYmxpbmdOb2RlUmFuZ2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBw
bGVXaW4uY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdp
bi5jbWFrZQkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBs
ZVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtNzEsMTI5ICs3MSwxMDIgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRQogICAgIHBsYXRmb3JtL25ldHdvcmsvY2Yv
U29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCiApCiAKLWlmICgke1VTRV9ESVJFQ1QyRH0pCi0gICAg
bGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3dpbiIKLSAgICApCi0KLSAgICBsaXN0
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAgcGFnZS93aW4vRnJhbWVXaW5EaXJlY3Qy
RC5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3Qy
RC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJl
Y3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2Rl
RGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVj
dDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGly
ZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2Rl
ckRpcmVjdDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3Qy
RC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQu
Y3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3BwCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVjdDJELmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcAotCi0gICAgICAgIHBs
YXRmb3JtL3dpbi9EcmFnSW1hZ2VEaXJlY3QyRC5jcHAKLSAgICApCi1lbHNlICgpCi0gICAgbGlz
dChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbiIKLSAgICAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZiIKLSAgICAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2NhIgotICAgICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luIgotICAgICAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3MvY2ciCi0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCi0gICAgICAgIHBhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCi0KLSAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9MYXllclBvb2wuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRm
b3JtQ0FMYXllci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUNvbnRyb2xs
ZXIuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5jcHAK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuY3BwCi0gICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0EuY3BwCi0KLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vTGF5ZXJDaGFuZ2VzRmx1c2hlci5jcHAKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBRmlsdGVyc1dpbi5jcHAKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNw
cAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV0tDQUNGVmlld0xheWVyVHJlZUhv
c3QuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdM
YXllcldpbi5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNlQ0cuY3BwCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zs
b2F0U2l6ZUNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNw
cAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuY3BwCi0g
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCi0gICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlU291cmNlQ0dXaW4uY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ludFBvaW50Q0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFJlY3RD
Ry5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50U2l6ZUNHLmNwcAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5D
Ry5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1l
ci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhD
Ry5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwCi0KLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENvcmVUZXh0LmNwcAotICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQu
Y3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0dseXBoUGFnZUNvcmVUZXh0
LmNwcAotCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlQ0cuY3Bw
Ci0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vd2lu
L0RyYWdJbWFnZUNHV2luLmNwcAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBREVSUwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFw
aGljc0xheWVyQ0EuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuaAot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmgKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUZpbHRlcnMuaAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9UaWxlQ29udHJvbGxlci5oCi0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2lu
L0Fic3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93
aW4vQ0FDRkxheWVyVHJlZUhvc3RDbGllbnQuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9Db2xvclNwYWNlQ0cuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJl
bmRlcmVyQ0cuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5oCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCi0gICAgKQotZW5kaWYgKCkKK2xpc3QoQVBQRU5E
IFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbiIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9ncmFwaGljcy9jYSIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jZyIKKykKKwor
bGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAK
KworICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
UGxhdGZvcm1DQUxheWVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb250cm9s
bGVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlR3JpZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9UcmFuc2Zvcm1hdGlvbk1hdHJpeENBLmNwcAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9MYXllckNoYW5nZXNGbHVzaGVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9Q
bGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9Q
bGF0Zm9ybUNBRmlsdGVyc1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV0tD
QUNGVmlld0xheWVyVHJlZUhvc3QuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dl
YlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29s
b3JDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNlQ0cuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0Zsb2F0UmVjdENHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6
ZUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJm
YWNlUG9vbC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ludFBvaW50Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UmVjdENH
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFNpemVDRy5jcHAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BERkRvY3VtZW50SW1hZ2UuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvVVRJUmVnaXN0cnkuY3BwCisKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250
Q2FzY2FkZUNvcmVUZXh0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRD
b3JlVGV4dC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250UGxhdGZvcm1E
YXRhQ29yZVRleHQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdl
Q29yZVRleHQuY3BwCisKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZUNH
LmNwcAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxl
Rm9udERhdGFDR1dpbi5jcHAKKworICAgIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAK
KykKKworbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9MYXllclBvb2wuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FB
bmltYXRpb24uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllckNsaWVudC5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvVGlsZUNvbnRyb2xsZXIuaAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0Fi
c3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9D
QUNGTGF5ZXJUcmVlSG9zdC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXll
clRyZWVIb3N0Q2xpZW50LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUxheWVyV2luLmgKKworICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yU3BhY2VDRy5oCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSU9TdXJmYWNlUG9vbC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKKykKIAogaWYgKENNQUtFX1NJWkVPRl9WT0lE
X1AgRVFVQUwgNCkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMgJHtXZWJDb3JlX0RF
UklWRURfU09VUkNFU19ESVJ9L21ha2VzYWZlc2VoLm9iaikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZU
Vy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDI1MyArMCwwIEBACi1pbmNsdWRlKHBsYXRmb3Jt
L0N1cmwuY21ha2UpCi1pZiAoTk9UIEFQUExFX0JVSUxEKQotICAgIGluY2x1ZGUocGxhdGZvcm0v
SW1hZ2VEZWNvZGVycy5jbWFrZSkKLWVuZGlmICgpCi1pbmNsdWRlKHBsYXRmb3JtL09wZW5TU0wu
Y21ha2UpCi1pbmNsdWRlKHBsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UpCi0KLWxpc3QoQVBQ
RU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgIiR7RGlyZWN0WF9J
TkNMVURFX0RJUlN9IgotICAgICIke1dFQktJVF9MSUJSQVJJRVNfRElSfS9pbmNsdWRlIgotICAg
ICIke1dFQkNPUkVfRElSfS9hY2Nlc3NpYmlsaXR5L3dpbiIKLSAgICAiJHtXRUJDT1JFX0RJUn0v
cGFnZS93aW4iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2VnbCIKLSAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsIgotICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZSIKLSAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luIgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRp
YWNhcGFiaWxpdGllcyIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay93aW4i
Ci0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3dpbiIKLSkKLQotbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCi0gICAgYWNjZXNzaWJpbGl0eS93aW4vQVhPYmplY3RDYWNoZVdpbi5jcHAK
LSAgICBhY2Nlc3NpYmlsaXR5L3dpbi9BY2Nlc3NpYmlsaXR5T2JqZWN0V2luLmNwcAotICAgIGFj
Y2Vzc2liaWxpdHkvd2luL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyV2luLmNwcAotCi0gICAg
ZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcAotCi0gICAgaHRtbC9IVE1MU2VsZWN0RWxlbWVudFdp
bi5jcHAKLQotICAgIHBhZ2Uvd2luL0RyYWdDb250cm9sbGVyV2luLmNwcAotICAgIHBhZ2Uvd2lu
L0V2ZW50SGFuZGxlcldpbi5jcHAKLSAgICBwYWdlL3dpbi9GcmFtZVdpbi5jcHAKLSAgICBwYWdl
L3dpbi9GcmFtZVdpbkRpcmVjdDJELmNwcAotCi0gICAgcGxhdGZvcm0vQ3Vyc29yLmNwcAotICAg
IHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuY3BwCi0gICAgcGxhdGZvcm0vU3RhdGljUGFzdGVi
b2FyZC5jcHAKLQotICAgIHBsYXRmb3JtL2F1ZGlvL1BsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdl
ci5jcHAKLQotICAgIHBsYXRmb3JtL2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAKLSAg
ICBwbGF0Zm9ybS9nZW5lcmljL0tleWVkRW5jb2RlckdlbmVyaWMuY3BwCi0KLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9HTENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1E
aXNwbGF5LmNwcAotCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAK
LQotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcAot
Ci0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRElt
cGwuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlckRpcmVjdFdyaXRlLmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9h
dFBvaW50RGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UmVjdERp
cmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFNpemVEaXJlY3QyRC5j
cHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250RGVzY3JpcHRpb25XaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdp
bi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVEaXJlY3Qy
RC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlRGVjb2RlckRpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURp
cmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZVdpbi5jcHAKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW50UG9pbnRXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ludFJlY3RXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFNpemVX
aW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJl
Y3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
VGV4dEFuYWx5emVySGVscGVyLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFuc2Zv
cm1hdGlvbk1hdHJpeERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFu
c2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAKLQotICAgIHBsYXRmb3JtL25ldHdvcmsvd2luL0N1cmxT
U0xIYW5kbGVXaW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93aW4vRG93bmxvYWRCdW5kbGVX
aW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93aW4vTmV0d29ya1N0YXRlTm90aWZpZXJXaW4u
Y3BwCi0KLSAgICBwbGF0Zm9ybS90ZXh0L0h5cGhlbmF0aW9uLmNwcAotICAgIHBsYXRmb3JtL3Rl
eHQvd2luL0xvY2FsZVdpbi5jcHAKLQotICAgIHBsYXRmb3JtL3dpbi9CU3RyaW5nLmNwcAotICAg
IHBsYXRmb3JtL3dpbi9CaXRtYXBJbmZvLmNwcAotICAgIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRV
dGlsaXRpZXNXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL0N1cnNvcldpbi5jcHAKLSAgICBwbGF0
Zm9ybS93aW4vRGVmV25kUHJvY1dpbmRvd0NsYXNzLmNwcAotICAgIHBsYXRmb3JtL3dpbi9EZWxh
eUxvYWRlZE1vZHVsZXNFbnVtZXJhdG9yLmNwcAotICAgIHBsYXRmb3JtL3dpbi9EcmFnRGF0YVdp
bi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlRGlyZWN0MkQuY3BwCi0gICAgcGxhdGZv
cm0vd2luL0RyYWdJbWFnZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vR0RJT2JqZWN0Q291bnRl
ci5jcHAKLSAgICBwbGF0Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmNwcAotICAgIHBsYXRmb3JtL3dp
bi9JbXBvcnRlZEZ1bmN0aW9uc0VudW1lcmF0b3IuY3BwCi0gICAgcGxhdGZvcm0vd2luL0ltcG9y
dGVkTW9kdWxlc0VudW1lcmF0b3IuY3BwCi0gICAgcGxhdGZvcm0vd2luL0tleUV2ZW50V2luLmNw
cAotICAgIHBsYXRmb3JtL3dpbi9Mb2NhbGl6ZWRTdHJpbmdzV2luLmNwcAotICAgIHBsYXRmb3Jt
L3dpbi9Mb2dnaW5nV2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9NSU1FVHlwZVJlZ2lzdHJ5V2lu
LmNwcAotICAgIHBsYXRmb3JtL3dpbi9NYWluVGhyZWFkU2hhcmVkVGltZXJXaW4uY3BwCi0gICAg
cGxhdGZvcm0vd2luL1BFSW1hZ2UuY3BwCi0gICAgcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4u
Y3BwCi0gICAgcGxhdGZvcm0vd2luL1BsYXRmb3JtTW91c2VFdmVudFdpbi5jcHAKLSAgICBwbGF0
Zm9ybS93aW4vUGxhdGZvcm1TY3JlZW5XaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1BvcHVwTWVu
dVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJhdG9yV2luLmNwcAotICAgIHBs
YXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vU2VhcmNo
UG9wdXBNZW51REIuY3BwCi0gICAgcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudVdpbi5jcHAK
LSAgICBwbGF0Zm9ybS93aW4vU3RydWN0dXJlZEV4Y2VwdGlvbkhhbmRsZXJTdXBwcmVzc29yLmNw
cAotICAgIHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcAotICAgIHBsYXRmb3JtL3dpbi9Vc2Vy
QWdlbnRXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAKLSAgICBwbGF0
Zm9ybS93aW4vV2ViQ29yZUJ1bmRsZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZUlu
c3RhbmNlSGFuZGxlLmNwcAotICAgIHBsYXRmb3JtL3dpbi9XZWJDb3JlVGV4dFJlbmRlcmVyLmNw
cAotICAgIHBsYXRmb3JtL3dpbi9XaGVlbEV2ZW50V2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9X
aWRnZXRXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5j
cHAKLQotICAgIHJlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKLSkKLQotaWYgKFVTRV9DRikK
LSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUwotICAg
ICAgICAiJHtXRUJDT1JFX0RJUn0vbG9hZGVyL2FyY2hpdmUvY2YiCi0gICAgICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9jZiIKLSAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2Nm
L3dpbiIKLSAgICApCi0KLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAg
ZWRpdGluZy9TbWFydFJlcGxhY2VDRi5jcHAKLQotICAgICAgICBsb2FkZXIvYXJjaGl2ZS9jZi9M
ZWdhY3lXZWJBcmNoaXZlLmNwcAotCi0gICAgICAgIHBsYXRmb3JtL2NmL0tleWVkRGVjb2RlckNG
LmNwcAotICAgICAgICBwbGF0Zm9ybS9jZi9LZXllZEVuY29kZXJDRi5jcHAKLSAgICAgICAgcGxh
dGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vY2Yvd2luL0Nl
cnRpZmljYXRlQ0ZXaW4uY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vdGV4dC9jZi9IeXBoZW5hdGlv
bkNGLmNwcAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwotICAgICAgICBsb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmgK
LQotICAgICAgICBwbGF0Zm9ybS9jZi93aW4vQ2VydGlmaWNhdGVDRldpbi5oCi0gICAgKQotCi0g
ICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMgJHtDT1JFRk9VTkRBVElPTl9MSUJSQVJZ
fSkKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlVGVzdFN1cHBvcnRfTElCUkFSSUVTICR7Q09SRUZP
VU5EQVRJT05fTElCUkFSWX0pCi1lbHNlICgpCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCi0gICAgICAgIHBsYXRmb3JtL3RleHQvSHlwaGVuYXRpb24uY3BwCi0gICAgKQotZW5kaWYg
KCkKLQotbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCi0gICAg
YWNjZXNzaWJpbGl0eS93aW4vQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJXaW4uaAotCi0gICAg
cGFnZS93aW4vRnJhbWVXaW4uaAotCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyREltcGwuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQ
aXhlbERhdGEuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMu
aAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5oCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmgKLSAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dFdpbi5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
RGVjb2RlckRpcmVjdDJELmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxXaW5kb3dz
Q29udGV4dC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1
bGxzY3JlZW5XaW5kb3cuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NoYXJlZEdESU9iamVjdC5o
Ci0KLSAgICBwbGF0Zm9ybS93aW4vQlN0cmluZy5oCi0gICAgcGxhdGZvcm0vd2luL0JpdG1hcElu
Zm8uaAotICAgIHBsYXRmb3JtL3dpbi9DT01QdHIuaAotICAgIHBsYXRmb3JtL3dpbi9EZWZXbmRQ
cm9jV2luZG93Q2xhc3MuaAotICAgIHBsYXRmb3JtL3dpbi9HRElPYmplY3RDb3VudGVyLmgKLSAg
ICBwbGF0Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmgKLSAgICBwbGF0Zm9ybS93aW4vSFduZERDLmgK
LSAgICBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmgKLSAgICBwbGF0Zm9ybS93aW4vU2Nyb2xs
YmFyVGhlbWVXaW4uaAotICAgIHBsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVEQi5oCi0gICAg
cGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudVdpbi5oCi0gICAgcGxhdGZvcm0vd2luL1N5c3Rl
bUluZm8uaAotICAgIHBsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuaAotICAgIHBsYXRmb3JtL3dp
bi9XZWJDb3JlQnVuZGxlV2luLmgKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZUluc3RhbmNlSGFu
ZGxlLmgKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZVRleHRSZW5kZXJlci5oCi0gICAgcGxhdGZv
cm0vd2luL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5oCi0gICAgcGxhdGZvcm0vd2luL1dpbmRv
d01lc3NhZ2VMaXN0ZW5lci5oCi0gICAgcGxhdGZvcm0vd2luL1dpbmRvd3NUb3VjaC5oCi0pCi0K
LWxpc3QoQVBQRU5EIFdlYkNvcmVfVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMKLSAgICAke1dFQkNP
UkVfRElSfS9jc3MvdGhlbWVXaW4uY3NzCi0gICAgJHtXRUJDT1JFX0RJUn0vY3NzL3RoZW1lV2lu
UXVpcmtzLmNzcwotKQotCi1saXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUwotICAgICR7RGly
ZWN0WF9MSUJSQVJJRVN9Ci0gICAgY29tY3RsMzIKLSAgICBjcnlwdDMyCi0gICAgaXBobHBhcGkK
LSAgICBycGNydDQKLSAgICBzaGx3YXBpCi0gICAgdXNwMTAKLSAgICB2ZXJzaW9uCi0gICAgd2lu
bW0KLSAgICB3czJfMzIKLSkKLQotbGlzdChBUFBFTkQgV2ViQ29yZVRlc3RTdXBwb3J0X0xJQlJB
UklFUwotICAgIHNobHdhcGkKLSkKLQotbWFrZV9kaXJlY3RvcnkoJHtDTUFLRV9SVU5USU1FX09V
VFBVVF9ESVJFQ1RPUll9L1dlYktpdC5yZXNvdXJjZXMvZW4ubHByb2opCi1maWxlKENPUFkKLSAg
ICAiJHtXRUJDT1JFX0RJUn0vZW4ubHByb2ovTG9jYWxpemFibGUuc3RyaW5ncyIKLSAgICAiJHtX
RUJDT1JFX0RJUn0vZW4ubHByb2ovbWVkaWFDb250cm9sc0xvY2FsaXplZFN0cmluZ3MuanMiCi0g
ICAgREVTVElOQVRJT04KLSAgICAke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vV2Vi
S2l0LnJlc291cmNlcy9lbi5scHJvagotKQotZmlsZShDT1BZCi0gICAgIiR7V0VCQ09SRV9ESVJ9
L01vZHVsZXMvbWVkaWFjb250cm9scy9tZWRpYUNvbnRyb2xzQXBwbGUuY3NzIgotICAgICIke1dF
QkNPUkVfRElSfS9Nb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250cm9sc0FwcGxlLmpzIgot
ICAgIERFU1RJTkFUSU9OCi0gICAgJHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1dl
YktpdC5yZXNvdXJjZXMKLSkKLQotc2V0KFdlYkNvcmVfT1VUUFVUX05BTUUgV2ViQ29yZSR7REVC
VUdfU1VGRklYfSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCShyZXZpc2lvbiAyODc4
MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMzksMTQgKzM5LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAKIAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcldpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9h
dFJlY3REaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRTaXplRGly
ZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udERlc2NyaXB0aW9uV2luLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcApAQCAtNjAsNyArNTUsNiBA
QCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW50U2l6ZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2
YXRlRnVsbHNjcmVlbldpbmRvdy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxl
Rm9udERhdGFXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9u
TWF0cml4RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0
aW9uTWF0cml4V2luLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay93aW4vRG93bmxvYWRCdW5k
bGVXaW4uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxMikKKysrIFNv
dXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBA
QAorMjAyMi0wMS0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVtb3ZlIHN1cHBvcnQgZm9yIERpcmVjdDJECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHBhbC9QbGF0Zm9ybUZUVy5jbWFrZTogUmVtb3ZlZC4KKwog
MjAyMi0wMS0wNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjg3Njk4LgpJbmRleDogU291cmNlL1dl
YkNvcmUvUEFML3BhbC9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL1BsYXRmb3JtRlRXLmNtYWtlCShub25leGlzdGVudCkKQEAgLTEs
MjYgKzAsMCBAQAotbGlzdChBUFBFTkQgUEFMX1BVQkxJQ19IRUFERVJTCi0pCi0KLWxpc3QoQVBQ
RU5EIFBBTF9TT1VSQ0VTCi0gICAgY3J5cHRvL29wZW5zc2wvQ3J5cHRvRGlnZXN0T3BlblNTTC5j
cHAKLQotICAgIGNyeXB0by93aW4vQ3J5cHRvRGlnZXN0V2luLmNwcAotCi0gICAgc3lzdGVtL0Ns
b2NrR2VuZXJpYy5jcHAKLQotICAgIHN5c3RlbS93aW4vU291bmRXaW4uY3BwCi0KLSAgICB0ZXh0
L0tpbGxSaW5nLmNwcAotCi0gICAgd2luL0xvZ2dpbmdXaW4uY3BwCi0pCi0KLWxpc3QoQVBQRU5E
IFBBTF9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAiJHtXRUJLSVRfTElCUkFSSUVT
X0RJUn0vaW5jbHVkZSIKLSkKLQotbGlzdChBUFBFTkQgUEFMX1BSSVZBVEVfTElCUkFSSUVTCi0g
ICAgT3BlblNTTDo6Q3J5cHRvCi0pCi0KLXNldChQQUxfT1VUUFVUX05BTUUgUEFMJHtERUJVR19T
VUZGSVh9KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWVkaWFBRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNl
clByZWZlcmVuY2VzTWVkaWFBRi5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01lZGlhQUYuaCIKIAotI2lmIEVOQUJMRShWSURFTykgJiYgIVVTRShE
SVJFQ1QyRCkKKyNpZiBFTkFCTEUoVklERU8pCiAKICNpbmNsdWRlICJBdWRpb1RyYWNrTGlzdC5o
IgogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgpAQCAtOTk1LDQgKzk5NSw0IEBAIFZl
Y3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gQ2FwdGlvblVzZXJQcmUKICAgICAKIH0KIAotI2VuZGlm
IC8vIEVOQUJMRShWSURFTykgJiYgIVVTRShESVJFQ1QyRCkKKyNlbmRpZiAvLyBFTkFCTEUoVklE
RU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZl
cmVuY2VzTWVkaWFBRi5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcg
KzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoVklERU8pICYmICFVU0UoRElS
RUNUMkQpCisjaWYgRU5BQkxFKFZJREVPKQogCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5o
IgogI2luY2x1ZGUgIkNhcHRpb25QcmVmZXJlbmNlc0RlbGVnYXRlLmgiCkBAIC0xMjAsNCArMTIw
LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5B
QkxFKFZJREVPKSAmJiAhVVNFKERJUkVDVDJEKQorI2VuZGlmIC8vIEVOQUJMRShWSURFTykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luRGlyZWN0MkQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luRGlyZWN0MkQuY3BwCShyZXZp
c2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdpbkRpcmVjdDJE
LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZyYW1lV2luLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJCaXRtYXBJbmZv
LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgotI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgot
I2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
R0RJT2JqZWN0PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoY29uc3QgRnJhbWUqIGZyYW1lLCBJbnRS
ZWN0JiBpcikKLXsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGF1dG8gb2xkUGFpbnRCZWhhdmlvciA9IGZyYW1lLT52aWV3KCktPnBhaW50QmVoYXZpb3Io
KTsKLSAgICBmcmFtZS0+dmlldygpLT5zZXRQYWludEJlaGF2aW9yKG9sZFBhaW50QmVoYXZpb3Ig
fCBQYWludEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpOwotCi0gICAgdm9pZCog
Yml0cyA9IG51bGxwdHI7Ci0gICAgYXV0byBoZGMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNv
bXBhdGlibGVEQygwKSk7Ci0gICAgaW50IHcgPSBpci53aWR0aCgpOwotICAgIGludCBoID0gaXIu
aGVpZ2h0KCk7Ci0gICAgQml0bWFwSW5mbyBibXAgPSBCaXRtYXBJbmZvOjpjcmVhdGUoSW50U2l6
ZSh3LCBoKSk7Ci0KLSAgICBHRElPYmplY3Q8SEJJVE1BUD4gaGJtcCA9IGFkb3B0R0RJT2JqZWN0
KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYm1wLCBESUJfUkdCX0NPTE9SUywgc3RhdGljX2Nhc3Q8
dm9pZCoqPigmYml0cyksIDAsIDApKTsKLSAgICBpZiAoIWhibXApCi0gICAgICAgIHJldHVybiBo
Ym1wOwotCi0gICAgSEdESU9CSiBoYm1wT2xkID0gU2VsZWN0T2JqZWN0KGhkYy5nZXQoKSwgaGJt
cC5nZXQoKSk7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgU2VsZWN0T2JqZWN0KGhk
Yy5nZXQoKSwgaGJtcE9sZCk7Ci0KLSAgICBmcmFtZS0+dmlldygpLT5zZXRQYWludEJlaGF2aW9y
KG9sZFBhaW50QmVoYXZpb3IpOwotCi0gICAgcmV0dXJuIGhibXA7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1F
VHlwZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9N
SU1FVHlwZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2MSw3ICs0
NjEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8TUlNRVR5cGVSZWdpc3RyeVRocmVhZEdsCiAgICAgfQog
I2Vsc2UKICAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBzdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nID0gc3RkOjppbml0aWFsaXplcl9saXN0PFN0
cmluZz4gewotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykKICAgICAg
ICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVU
SSdzIHdoZW4gYSB3YXkgdG8gY29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVUSSByZWxpYWJseSBp
cyBmb3VuZC4KICAgICAgICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0IFBORywgSlBFRyBhbmQg
R0lGLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYwOTUyODY+LgogICAgICAgICAiaW1hZ2UvcG5nIl9z
LApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0VsbGkKICAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0VsbGlw
c2UocmVjdCk7CiB9CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cp
CiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7
CiAgICAgbV9wcmltYXJ5Q29udGV4dC5hcHBseVN0cm9rZVBhdHRlcm4oKTsKQEAgLTE4MCw3ICsx
ODAsNyBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsCiAgICAgbV9z
ZWNvbmRhcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CiB9CiAKLSNpZiBVU0UoQ0cp
IHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0NBTGF5ZXJDb250ZXh0KQogewogICAg
IG1fcHJpbWFyeUNvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogICAgIHZvaWQg
ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSNpZiBVU0UoQ0cpIHx8IFVT
RShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBm
aW5hbDsKICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKICNlbmRpZgpAQCAtNzQs
NyArNzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpIGZpbmFsOwogICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpIGZpbmFsOwogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNF
KENHKQogICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbDsKICAgICBib29s
IGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24gMjg3ODEy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjgsMzMgKzEyOCwyOCBAQCB2b2lkIEJpdG1hcEltYWdlOjpzZXRD
dXJyZW50RnJhbWVEZWNvZGluCiAgICAgbV9jdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1cyA9IGRl
Y29kaW5nU3RhdHVzOwogfQogCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpmcmFt
ZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVs
IHN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkK
K1JlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJ
Zk5lZWRlZChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkK
IHsKICAgICBpZiAoIWZyYW1lSGFzRnVsbFNpemVOYXRpdmVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1
YnNhbXBsaW5nTGV2ZWwpKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZTo6JXMg
LSAlcCAtIHVybDogJXMgW3N1YnNhbXBsaW5nTGV2ZWwgd2FzICVkLCByZXNhbXBsaW5nXSIsIF9f
RlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3Rh
dGljX2Nhc3Q8aW50PihmcmFtZVN1YnNhbXBsaW5nTGV2ZWxBdEluZGV4KGluZGV4KSkpOwogICAg
ICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgfQotI2lmIFVTRShESVJFQ1QyRCkK
LSAgICBtX3NvdXJjZS0+c2V0VGFyZ2V0Q29udGV4dCh0YXJnZXRDb250ZXh0KTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHRhcmdldENvbnRleHQpOwotI2VuZGlmCiAgICAgcmV0dXJuIG1fc291
cmNlLT5mcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoaW5kZXgsIHN1YnNhbXBsaW5nTGV2
ZWwpOwogfQogCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZShj
b25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCitSZWZQdHI8TmF0aXZlSW1hZ2U+
IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSgpCiB7Ci0gICAgcmV0dXJuIGZyYW1lSW1hZ2VBdElu
ZGV4Q2FjaGVJZk5lZWRlZCgwLCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0LCB0YXJnZXRDb250
ZXh0KTsKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKDAsIFN1YnNh
bXBsaW5nTGV2ZWw6OkRlZmF1bHQpOwogfQogCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcElt
YWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqIHRh
cmdldENvbnRleHQpCitSZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpCiB7Ci0gICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJ
Zk5lZWRlZChtX2N1cnJlbnRGcmFtZSwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgdGFyZ2V0
Q29udGV4dCk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChtX2N1
cnJlbnRGcmFtZSwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7CiB9CiAKLVJlZlB0cjxOYXRp
dmVJbWFnZT4gQml0bWFwSW1hZ2U6OnByZVRyYW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoYm9vbCByZXNwZWN0T3JpZW50YXRpb24sIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFy
Z2V0Q29udGV4dCkKK1JlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2U6OnByZVRyYW5zZm9y
bWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCByZXNwZWN0T3JpZW50YXRpb24pCiB7
Ci0gICAgYXV0byBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKHRhcmdldENvbnRl
eHQpOworICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAg
IGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBpbWFnZTsKIApAQCAtMTc4LDE4ICsxNzMsMTgg
QEAgUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6cHJlVHJhbgogfQogCiAjaWYgVVNF
KENHKQotUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0
KQorUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgYXV0byBp
bWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChpLCBTdWJzYW1wbGluZ0xldmVs
OjpEZWZhdWx0LCB0YXJnZXRDb250ZXh0KTsKKyAgICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1h
Z2VBdEluZGV4Q2FjaGVJZk5lZWRlZChpLCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKICAg
ICAgICAgaWYgKGltYWdlICYmIGltYWdlLT5zaXplKCkgPT0gc2l6ZSkKICAgICAgICAgICAgIHJl
dHVybiBpbWFnZTsKICAgICB9CiAKICAgICAvLyBGYWxsYmFjayB0byB0aGUgZmlyc3QgZnJhbWUg
aW1hZ2UgaWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQotICAgIHJldHVybiBmcmFtZUlt
YWdlQXRJbmRleENhY2hlSWZOZWVkZWQoMCwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgdGFy
Z2V0Q29udGV4dCk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZCgw
LCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKIH0KIAogVmVjdG9yPFJlZjxOYXRpdmVJbWFn
ZT4+IEJpdG1hcEltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKQpAQCAtMzAzLDcgKzI5OCw3IEBA
IEltYWdlRHJhd1Jlc3VsdCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGkKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlcXVlc3REZWNvZGluZzsK
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXhD
YWNoZUlmTmVlZGVkKG1fY3VycmVudEZyYW1lLCBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsLCAm
Y29udGV4dCk7CisgICAgICAgICAgICBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5l
ZWRlZChtX2N1cnJlbnRGcmFtZSwgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCk7CiAgICAgICAg
ICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAgLSB1cmw6ICVzIFthbiBpbWFn
ZSBmcmFtZSB3aWxsIGJlIGRlY29kZWQgc3luY2hyb25vdXNseV0iLCBfX0ZVTkNUSU9OX18sIHRo
aXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICB9CiAgICAg
ICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsMTEgKzE0MiwxMSBAQCBw
dWJsaWM6CiAjZW5kaWYKICNlbmRpZgogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5hdGl2
ZUltYWdlPiBuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgb3Zl
cnJpZGU7Ci0gICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRy
PE5hdGl2ZUltYWdlPiBwcmVUcmFuc2Zvcm1lZE5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGJv
b2wgcmVzcGVjdE9yaWVudGF0aW9uLCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikg
b3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJ
bWFnZSgpIG92ZXJyaWRlOworICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IHByZVRyYW5z
Zm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCByZXNwZWN0T3JpZW50YXRpb24p
IG92ZXJyaWRlOwogI2lmIFVTRShDRykKLSAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUlt
YWdlT2ZTaXplKGNvbnN0IEludFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0
cikgb3ZlcnJpZGU7CisgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZU9mU2l6ZShj
b25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPFJlZjxOYXRpdmVJbWFnZT4+IGZy
YW1lc05hdGl2ZUltYWdlcygpOwogI2VuZGlmCiAKQEAgLTE1OCw3ICsxNTgsNyBAQCBwcml2YXRl
OgogICAgIFdFQkNPUkVfRVhQT1JUIEJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gbnVsbHB0
cik7CiAKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBp
bmRleCkgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSW1hZ2VBdEluZGV4KGluZGV4KTsgfQotICAg
IFJlZlB0cjxOYXRpdmVJbWFnZT4gZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKHNpemVf
dCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogPSBudWxscHRyKTsKKyAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGZyYW1l
SW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJz
YW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKIAogICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNh
Y2hlZCBkYXRhLiBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAogICAgIC8v
IHRoZSBlbnRpcmUgZnJhbWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3VyY2Ug
dG8gZGVzdHJveQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UG9pbnQuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMSArNDMsNiBAQCB0
eXBlZGVmIHN0cnVjdCBfTlNQb2ludCBOU1BvaW50OwogI2VuZGlmCiAjZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQogCi0jaWYgUExBVEZPUk0oV0lOKQotc3RydWN0IEQyRF9QT0lOVF8yRjsKLXR5cGVk
ZWYgRDJEX1BPSU5UXzJGIEQyRDFfUE9JTlRfMkY7Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdURiB7
CiBjbGFzcyBUZXh0U3RyZWFtOwogfQpAQCAtMTkyLDExICsxODcsNiBAQCBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0OwogI2VuZGlmCiAKLSNpZiBQ
TEFURk9STShXSU4pCi0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRQb2ludChjb25zdCBEMkQxX1BP
SU5UXzJGJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgRDJEMV9QT0lOVF8yRigpIGNv
bnN0OwotI2VuZGlmCi0KICAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFBvaW50IG1hdHJpeFRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQ
T1JUIEZsb2F0UG9pbnQgbWF0cml4VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNv
bnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDYgQEAgdHlwZWRlZiBz
dHJ1Y3QgX2NhaXJvX3JlY3RhbmdsZSBjYWlyb19yZQogCiAjaWYgUExBVEZPUk0oV0lOKQogdHlw
ZWRlZiBzdHJ1Y3QgdGFnUkVDVCBSRUNUOwotc3RydWN0IEQyRF9SRUNUX0Y7Ci10eXBlZGVmIEQy
RF9SRUNUX0YgRDJEMV9SRUNUX0Y7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdURiB7CkBAIC0yMjQs
MTIgKzIyMiw2IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBjYWlyb19yZWN0YW5nbGVfdCgpIGNv
bnN0OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShXSU4pCi0gICAgV0VCQ09SRV9FWFBPUlQgRmxv
YXRSZWN0KGNvbnN0IFJFQ1QmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QoY29uc3Qg
RDJEMV9SRUNUX0YmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBvcGVyYXRvciBEMkQxX1JFQ1RfRigp
IGNvbnN0OwotI2VuZGlmCi0KICAgICBzdGF0aWMgRmxvYXRSZWN0IGluZmluaXRlUmVjdCgpOwog
ICAgIGJvb2wgaXNJbmZpbml0ZSgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDExICs0OCw2IEBAIHR5cGVkZWYgc3RydWN0IF9OU1NpemUgTlNTaXplOwogI2VuZGlmCiAj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCi0jaWYgUExBVEZPUk0oV0lOKQotc3RydWN0IEQyRF9T
SVpFX0Y7Ci10eXBlZGVmIEQyRF9TSVpFX0YgRDJEMV9TSVpFX0Y7Ci0jZW5kaWYKLQogbmFtZXNw
YWNlIFdURiB7CiBjbGFzcyBUZXh0U3RyZWFtOwogfQpAQCAtMTU5LDExICsxNTQsNiBAQCBwdWJs
aWM6CiAgICAgb3BlcmF0b3IgTlNTaXplKCkgY29uc3Q7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JN
KFdJTikKLSAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUoY29uc3QgRDJEMV9TSVpFX0YmKTsK
LSAgICBvcGVyYXRvciBEMkQxX1NJWkVfRigpIGNvbnN0OwotI2VuZGlmCi0KICAgICBTdHJpbmcg
dG9KU09OU3RyaW5nKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEpTT046Ok9iamVj
dD4gdG9KU09OT2JqZWN0KCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTEgKzQ5LDYgQEAKICNp
bmNsdWRlIDx1c3AxMC5oPgogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2Ug
SURXcml0ZUZhY3Rvcnk1OwotaW50ZXJmYWNlIElEV3JpdGVHZGlJbnRlcm9wOwotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udENhY2hlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAkocmV2
aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBs
YXRmb3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NywxMCArNjcsNiBAQCBpbnRlcmZhY2Ug
SURXcml0ZUZvbnQ7CiBpbnRlcmZhY2UgSURXcml0ZUZvbnRGYWNlOwogI2VuZGlmCiAKLSNpZiBV
U0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZHdyaXRlXzMuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKQEAgLTExOSw5ICsxMTUsNiBAQCBw
dWJsaWM6CiAjaWYgVVNFKENPUkVfVEVYVCkKICAgICBGb250UGxhdGZvcm1EYXRhKEdESU9iamVj
dDxIRk9OVD4sIENURm9udFJlZiwgQ0dGb250UmVmLCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRp
Y0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgYm9vbCB1c2VHREkpOwogI2VuZGlmCi0jaWYg
VVNFKERJUkVDVDJEKQotICAgIEZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiYmLCBD
T01QdHI8SURXcml0ZUZvbnQ+JiYsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9v
bCBzeW50aGV0aWNPYmxpcXVlLCBib29sIHVzZUdESSk7Ci0jZW5kaWYKICNpZiBVU0UoQ0FJUk8p
CiAgICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+LCBjYWlyb19mb250X2ZhY2Vf
dCosIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIGNvbnN0IENyZWF0aW9uRGF0
YSogPSBudWxscHRyKTsKICNlbmRpZgpAQCAtMTYzLDExICsxNTYsNiBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGhhc1ZhcmlhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2hhc1ZhcmlhdGlvbnM7IH0K
IAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBJRFdyaXRlRm9udCogZHdGb250KCkgY29uc3QgeyBy
ZXR1cm4gbV9kd0ZvbnQuZ2V0KCk7IH0KLSAgICBJRFdyaXRlRm9udEZhY2UqIGR3Rm9udEZhY2Uo
KSBjb25zdCB7IHJldHVybiBtX2R3Rm9udEZhY2UuZ2V0KCk7IH0KLSNlbmRpZgotCiAgICAgYm9v
bCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKICAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplOyB9CiAgICAgYm9vbCBzeW50aGV0aWNCb2xkKCkgY29uc3QgeyByZXR1cm4gbV9zeW50
aGV0aWNCb2xkOyB9CkBAIC0yNjgsMTEgKzI1Niw2IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBS
ZXRhaW5QdHI8Q1RGb250UmVmPiBtX2N0Rm9udDsKICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJE
KQotICAgIENPTVB0cjxJRFdyaXRlRm9udD4gbV9kd0ZvbnQ7Ci0gICAgQ09NUHRyPElEV3JpdGVG
b250RmFjZT4gbV9kd0ZvbnRGYWNlOwotI2VuZGlmCi0KICNpZiBVU0UoQ0FJUk8pCiAgICAgUmVm
UHRyPGNhaXJvX3NjYWxlZF9mb250X3Q+IG1fc2NhbGVkRm9udDsKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCShyZXZpc2lvbiAyODc4
MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSwxOSArMzksMTAgQEAKICNpbmNsdWRlICJHcmFkaWVudFJlbmRlcmVy
Q0cuaCIKICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIkNPTVB0ci5oIgot
I2VuZGlmCi0KICNpZiBVU0UoQ0cpCiB0eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQqIENHQ29udGV4
dFJlZjsKICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotaW50ZXJmYWNlIElEMkQxQnJ1c2g7
Ci1pbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7Ci0jZW5kaWYKLQogI2lmIFVTRShDQUlSTykK
IHR5cGVkZWYgc3RydWN0IF9jYWlyb19wYXR0ZXJuIGNhaXJvX3BhdHRlcm5fdDsKICNlbmRpZgpA
QCAtMTE4LDEwICsxMDksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludChDR0NvbnRleHRSZWYp
OwogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgSUQyRDFCcnVzaCogY3JlYXRlQnJ1
c2goSUQyRDFSZW5kZXJUYXJnZXQqKTsKLSNlbmRpZgotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxHcmFkaWVudD4+IGRlY29kZShE
ZWNvZGVyJik7CiAKQEAgLTEzOSwxMCArMTI2LDYgQEAgcHJpdmF0ZToKICNpZiBVU0UoQ0cpCiAg
ICAgc3RkOjpvcHRpb25hbDxHcmFkaWVudFJlbmRlcmVyQ0c+IG1fcGxhdGZvcm1SZW5kZXJlcjsK
ICNlbmRpZgotCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRDJEMUJydXNoPiBtX2Jy
dXNoOwotI2VuZGlmCiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIEdyYWRp
ZW50OjpMaW5lYXJEYXRhOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTUgKzQzLDYgQEAKIAogI2lm
IFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHQ29udGV4dCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLWludGVyZmFjZSBJRDJEMURDUmVuZGVyVGFyZ2V0Owot
aW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNlIElEMkQxRmFjdG9yeTsKLWlu
dGVyZmFjZSBJRDJEMVNvbGlkQ29sb3JCcnVzaDsKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNz
IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOwotfQotdHlwZWRlZiBXZWJDb3JlOjpQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKICNlbGlmIFVTRShDQUlSTykK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dENhaXJvOwpAQCAtMjY5
LDE1ICsyNjAsNiBAQCBwdWJsaWM6ICAgCiAgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250
ZXh0KCkgPSBkZWZhdWx0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkdyYXBoaWNzQ29u
dGV4dCgpOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBt
b3ZlIHRvIEdyYXBoaWNzQ29udGV4dERpcmVjdDJECi0gICAgZW51bSBjbGFzcyBCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0VHlwZSA6IHVpbnQ4X3QgewotICAgICAgICBDUFVNZW1vcnksCi0gICAgICAg
IEdQVU1lbW9yeQotICAgIH07Ci0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0KiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwotI2Vu
ZGlmCi0KICAgICB2aXJ0dWFsIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9y
bUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKQEAgLTM3Miw3ICszNTQsNyBA
QCBwdWJsaWM6ICAgCiAgICAgCiAgICAgdW5zaWduZWQgc3RhY2tTaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zdGFjay5zaXplKCk7IH0KIAotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lm
IFVTRShDRykKICAgICAvLyBGSVhNRTogU2hvdWxkIHRoZXNlIHJlYWxseSBiZSBwdWJsaWMgR3Jh
cGhpY3NDb250ZXh0IG1ldGhvZHM/CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVy
bigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpID0gMDsKQEAgLTU1
NywyNiArNTM5LDYgQEAgcHVibGljOiAgIAogICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBu
dWxscHRyOyB9CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBHcmFwaGljc0NvbnRl
eHQoSERDLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiosIFJFQ1QsIGJvb2wgaGFzQWxwaGEgPSBmYWxz
ZSk7IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkLgotCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IElEMkQxRmFjdG9yeSogc3lzdGVtRmFjdG9yeSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBJRDJEMVJlbmRlclRhcmdldCogZGVmYXVsdFJlbmRlclRhcmdldCgpOwotCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBiZWdpbkRyYXcoKTsKLSAgICBEMkQxX0NPTE9SX0YgY29sb3JXaXRoR2xv
YmFsQWxwaGEoY29uc3QgQ29sb3ImKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVu
ZERyYXcoKTsKLSAgICB2b2lkIGZsdXNoKCk7Ci0KLSAgICBJRDJEMUJydXNoKiBzb2xpZFN0cm9r
ZUJydXNoKCkgY29uc3Q7Ci0gICAgSUQyRDFCcnVzaCogc29saWRGaWxsQnJ1c2goKSBjb25zdDsK
LSAgICBJRDJEMUJydXNoKiBwYXR0ZXJuU3Ryb2tlQnJ1c2goKSBjb25zdDsKLSAgICBJRDJEMUJy
dXNoKiBwYXR0ZXJuRmlsbEJydXNoKCkgY29uc3Q7Ci0gICAgSUQyRDFTdHJva2VTdHlsZSogcGxh
dGZvcm1TdHJva2VTdHlsZSgpIGNvbnN0OwotCi0gICAgSUQyRDFTb2xpZENvbG9yQnJ1c2gqIGJy
dXNoV2l0aENvbG9yKGNvbnN0IENvbG9yJik7Ci0jZW5kaWYKLQogcHJpdmF0ZToKICAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkocmV2
aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDEwICsxNTYsMTAgQEAgcHVibGljOgogCiAgICAgZW51
bSBUaWxlUnVsZSB7IFN0cmV0Y2hUaWxlLCBSb3VuZFRpbGUsIFNwYWNlVGlsZSwgUmVwZWF0VGls
ZSB9OwogCi0gICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmly
dHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmly
dHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IHByZVRyYW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoYm9vbCA9IHRydWUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSB7
IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2
ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVs
bHB0cikgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdl
PiBuYXRpdmVJbWFnZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIFJlZlB0cjxO
YXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSB7IHJldHVybiBudWxscHRy
OyB9CisgICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IHByZVRyYW5zZm9ybWVkTmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCA9IHRydWUpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAg
ICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50
U2l6ZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIC8vIEFjY2Vzc29ycyBmb3IgbmF0aXZl
IGltYWdlIGZvcm1hdHMuCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsOCArMzAsNiBAQAogCiAjaWYgVVNFKENHKQogI2luY2x1ZGUgIkltYWdlRGVjb2RlckNH
LmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQu
aCIKICNlbHNlCiAjaW5jbHVkZSAiU2NhbGFibGVJbWFnZURlY29kZXIuaCIKICNlbmRpZgpAQCAt
MTA3LDggKzEwNSw2IEBAIFJlZlB0cjxJbWFnZURlY29kZXI+IEltYWdlRGVjb2Rlcjo6Y3JlYXQK
IAogI2lmIFVTRShDRykKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyQ0c6OmNyZWF0ZShkYXRhLCBh
bHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwotI2VsaWYgVVNFKERJUkVD
VDJEKQotICAgIHJldHVybiBJbWFnZURlY29kZXJEaXJlY3QyRDo6Y3JlYXRlKGRhdGEsIGFscGhh
T3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CiAjZWxzZQogICAgIHJldHVybiBT
Y2FsYWJsZUltYWdlRGVjb2Rlcjo6Y3JlYXRlKGRhdGEsIGFscGhhT3B0aW9uLCBnYW1tYUFuZENv
bG9yUHJvZmlsZU9wdGlvbik7CiAjZW5kaWYKQEAgLTExOSw5ICsxMTUsNiBAQCBib29sIEltYWdl
RGVjb2Rlcjo6c3VwcG9ydHNNZWRpYVR5cGUoTWVkCiAjaWYgVVNFKENHKQogICAgIGlmIChJbWFn
ZURlY29kZXJDRzo6c3VwcG9ydHNNZWRpYVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiB0cnVl
OwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIGlmIChJbWFnZURlY29kZXJEaXJlY3QyRDo6c3Vw
cG9ydHNNZWRpYVR5cGUodHlwZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwogI2Vsc2UKICAgICBp
ZiAoU2NhbGFibGVJbWFnZURlY29kZXI6OnN1cHBvcnRzTWVkaWFUeXBlKHR5cGUpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDEw
ICsxMzMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzQWxsRGF0YVJlY2VpdmVkKCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90
KSA9IDA7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgdmlydHVhbCB2b2lkIHNldFRhcmdldENv
bnRleHQoSUQyRDFSZW5kZXJUYXJnZXQqKSA9IDA7Ci0jZW5kaWYKLQogcHJvdGVjdGVkOgogICAg
IEltYWdlRGVjb2RlcigpID0gZGVmYXVsdDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCShyZXZpc2lvbiAyODc4MTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDExICszNCw2IEBACiAjaW5jbHVkZSA8d3RmL1N5c3RlbVRyYWNpbmcu
aD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIK
LSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEltYWdlU291cmNlOjpJbWFnZVNvdXJj
ZShCaXRtYXBJbWFnZSogaW1hZ2UsIEFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBHYW1tYUFuZENv
bG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKQEAgLTY5MywxNCAr
Njg4LDYgQEAgSW1hZ2VPcmllbnRhdGlvbiBJbWFnZVNvdXJjZTo6ZnJhbWVPcmllbgogICAgIHJl
dHVybiBmcmFtZUF0SW5kZXhDYWNoZUlmTmVlZGVkKGluZGV4LCBJbWFnZUZyYW1lOjpDYWNoaW5n
OjpNZXRhZGF0YSkub3JpZW50YXRpb24oKTsKIH0KIAotI2lmIFVTRShESVJFQ1QyRCkKLXZvaWQg
SW1hZ2VTb3VyY2U6OnNldFRhcmdldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJn
ZXRDb250ZXh0KQotewotICAgIGlmIChpc0RlY29kZXJBdmFpbGFibGUoKSAmJiB0YXJnZXRDb250
ZXh0KQotICAgICAgICBtX2RlY29kZXItPnNldFRhcmdldENvbnRleHQodGFyZ2V0Q29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpKTsKLX0KLSNlbmRpZgotCiBSZWZQdHI8
TmF0aXZlSW1hZ2U+IEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3Qg
aW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkKIHsKICAgICBpZiAoIWlz
RGVjb2RlckF2YWlsYWJsZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIs
OSArMTIyLDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFNlY29uZHMgZnJhbWVEdXJh
dGlvbkF0SW5kZXgoc2l6ZV90KTsKICAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRp
b25BdEluZGV4KHNpemVfdCk7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgdm9pZCBzZXRUYXJn
ZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCopOwotI2VuZGlmCiAgICAgUmVmUHRyPE5h
dGl2ZUltYWdlPiBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2
ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+
IGZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBmcmFt
ZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gU3Vi
c2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbnRQb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ludFBvaW50LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEyICs0
NSw2IEBAIHR5cGVkZWYgc3RydWN0IF9OU1BvaW50IE5TUG9pbnQ7CiAjaWYgUExBVEZPUk0oV0lO
KQogdHlwZWRlZiBzdHJ1Y3QgdGFnUE9JTlQgUE9JTlQ7CiB0eXBlZGVmIHN0cnVjdCB0YWdQT0lO
VFMgUE9JTlRTOwotCi1zdHJ1Y3QgRDJEX1BPSU5UXzJVOwotdHlwZWRlZiBEMkRfUE9JTlRfMlUg
RDJEMV9QT0lOVF8yVTsKLQotc3RydWN0IEQyRF9QT0lOVF8yRjsKLXR5cGVkZWYgRDJEX1BPSU5U
XzJGIEQyRDFfUE9JTlRfMkY7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdURiB7CkBAIC0xMzgsMTEg
KzEzMiw2IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBQT0lOVCgpIGNvbnN0OwogICAgIEludFBv
aW50KGNvbnN0IFBPSU5UUyYpOwogICAgIG9wZXJhdG9yIFBPSU5UUygpIGNvbnN0OwotCi0gICAg
SW50UG9pbnQoY29uc3QgRDJEMV9QT0lOVF8yVSYpOwotICAgIGV4cGxpY2l0IEludFBvaW50KGNv
bnN0IEQyRDFfUE9JTlRfMkYmKTsgLy8gRG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5LCBzaW5jZSBp
dCdzIGxvc3N5LgotICAgIG9wZXJhdG9yIEQyRDFfUE9JTlRfMkYoKSBjb25zdDsKLSAgICBvcGVy
YXRvciBEMkQxX1BPSU5UXzJVKCkgY29uc3Q7CiAjZW5kaWYKIAogcHJpdmF0ZToKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHJldmlzaW9uIDI4Nzgx
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgX05TUmVjdCBOU1JlY3Q7
CiAKICNpZiBQTEFURk9STShXSU4pCiB0eXBlZGVmIHN0cnVjdCB0YWdSRUNUIFJFQ1Q7Ci0KLXN0
cnVjdCBEMkRfUkVDVF9VOwotdHlwZWRlZiBEMkRfUkVDVF9VIEQyRDFfUkVDVF9VOwotCi1zdHJ1
Y3QgRDJEX1JFQ1RfRjsKLXR5cGVkZWYgRDJEX1JFQ1RfRiBEMkQxX1JFQ1RfRjsKICNlbmRpZgog
CiAjaWYgVVNFKENBSVJPKQpAQCAtMTk4LDEwICsxOTIsNiBAQCBwdWJsaWM6CiAjaWYgUExBVEZP
Uk0oV0lOKQogICAgIEludFJlY3QoY29uc3QgUkVDVCYpOwogICAgIG9wZXJhdG9yIFJFQ1QoKSBj
b25zdDsKLSAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEQyRDFfUkVDVF9GJik7Ci0gICAgSW50
UmVjdChjb25zdCBEMkQxX1JFQ1RfVSYpOwotICAgIG9wZXJhdG9yIEQyRDFfUkVDVF9GKCkgY29u
c3Q7Ci0gICAgb3BlcmF0b3IgRDJEMV9SRUNUX1UoKSBjb25zdDsKICNlbmRpZgogCiAjaWYgVVNF
KENBSVJPKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUu
aAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50U2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMiArNDksNiBAQCB0eXBlZGVmIHN0cnVj
dCBfTlNTaXplIE5TU2l6ZTsKIAogI2lmIFBMQVRGT1JNKFdJTikKIHR5cGVkZWYgc3RydWN0IHRh
Z1NJWkUgU0laRTsKLQotc3RydWN0IEQyRF9TSVpFX1U7Ci10eXBlZGVmIEQyRF9TSVpFX1UgRDJE
MV9TSVpFX1U7Ci0KLXN0cnVjdCBEMkRfU0laRV9GOwotdHlwZWRlZiBEMkRfU0laRV9GIEQyRDFf
U0laRV9GOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMTY2LDEwICsxNjAsNiBAQCBw
dWJsaWM6CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIEludFNpemUoY29uc3QgU0laRSYpOwogICAg
IG9wZXJhdG9yIFNJWkUoKSBjb25zdDsKLSAgICBJbnRTaXplKGNvbnN0IEQyRDFfU0laRV9VJik7
Ci0gICAgZXhwbGljaXQgSW50U2l6ZShjb25zdCBEMkQxX1NJWkVfRiYpOyAvLyBkb24ndCBkbyB0
aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeTsKLSAgICBvcGVyYXRvciBEMkQxX1NJWkVf
VSgpIGNvbnN0OwotICAgIG9wZXJhdG9yIEQyRDFfU0laRV9GKCkgY29uc3Q7CiAjZW5kaWYKIAog
ICAgIFN0cmluZyB0b0pTT05TdHJpbmcoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgJKHJldmlz
aW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFw
aGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiBwcml2YXRlOgotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShD
RykKICAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWwgeyB9CiAgICAgYm9v
bCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRp
ZgpAQCAtNTcsNyArNTcsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzKSBmaW5hbCB7IH0KIAotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lm
IFVTRShDRykKICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsg
fQogI2VuZGlmCiAKQEAgLTY3LDcgKzY3LDcgQEAgcHJpdmF0ZToKIAogICAgIEludFJlY3QgY2xp
cEJvdW5kcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQogCi0jaWYgVVNFKENHKSB8fCBV
U0UoRElSRUNUMkQpCisjaWYgVVNFKENHKQogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkg
ZmluYWwgeyB9CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWwgeyB9CiAgICAgdm9p
ZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgIVVTRShESVJFQ1QyRCkKIGZs
b2F0IFBhdGg6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZl
cnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxTdGF0ZTo6QWN0aW9uOjpUb3RhbExlbmd0aCk7CkBAIC01
MSw3ICs1MCw2IEBAIGZsb2F0IFBhdGg6Omxlbmd0aCgpIGNvbnN0CiAKICAgICByZXR1cm4gdHJh
dmVyc2FsU3RhdGUudG90YWxMZW5ndGgoKTsKIH0KLSNlbmRpZgogCiAjaWYgIUhBVkUoQ0dQQVRI
X0dFVF9OVU1CRVJfT0ZfRUxFTUVOVFMpCiAKQEAgLTEyNSw3ICsxMjMsNyBAQCB2b2lkIFBhdGg6
OmFkZFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91CiAgICAgfQogCiAgICAgaWYgKHN0cmF0ZWd5
ID09IFJvdW5kZWRSZWN0U3RyYXRlZ3k6OlByZWZlck5hdGl2ZSkgewotI2lmIFVTRShDRykgfHwg
VVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykKICAgICAgICAgcGxhdGZvcm1BZGRQYXRoRm9yUm91
bmRlZFJlY3QocmVjdCwgcmFkaWkudG9wTGVmdCgpLCByYWRpaS50b3BSaWdodCgpLCByYWRpaS5i
b3R0b21MZWZ0KCksIHJhZGlpLmJvdHRvbVJpZ2h0KCkpOwogICAgICAgICByZXR1cm47CiAjZW5k
aWYKQEAgLTUyNCw3ICs1MjIsNyBAQCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gUGF0aDo6Ym91
bmRpbmdSCiAKICNlbmRpZgogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkKKyNpZiAh
VVNFKENHKQogUGF0aCBQYXRoOjpwb2x5Z29uUGF0aEZyb21Qb2ludHMoY29uc3QgVmVjdG9yPEZs
b2F0UG9pbnQ+JiBwb2ludHMpCiB7CiAgICAgUGF0aCBwYXRoOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyMCAr
NDEsNiBAQAogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR1BhdGguaD4KIHR5cGVkZWYgc3RydWN0
IENHUGF0aCBQbGF0Zm9ybVBhdGg7CiAKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJD
T01QdHIuaCIKLQotaW50ZXJmYWNlIElEMkQxR2VvbWV0cnk7Ci1pbnRlcmZhY2UgSUQyRDFHZW9t
ZXRyeUdyb3VwOwotaW50ZXJmYWNlIElEMkQxUGF0aEdlb21ldHJ5OwotaW50ZXJmYWNlIElEMkQx
R2VvbWV0cnlTaW5rOwotCi10eXBlZGVmIElEMkQxR2VvbWV0cnlHcm91cCBQbGF0Zm9ybVBhdGg7
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOwot
fQotCiAjZWxpZiBVU0UoQ0FJUk8pCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKIApAQCAtNjks
OCArNTUsNiBAQCB0eXBlZGVmIFBsYXRmb3JtUGF0aCogUGxhdGZvcm1QYXRoUHRyOwogCiAjaWYg
VVNFKENHKQogdXNpbmcgUGxhdGZvcm1QYXRoU3RvcmFnZVR5cGUgPSBSZXRhaW5QdHI8Q0dNdXRh
YmxlUGF0aFJlZj47Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi11c2luZyBQbGF0Zm9ybVBhdGhTdG9y
YWdlVHlwZSA9IENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+OwogI2Vsc2UKIHVzaW5nIFBsYXRm
b3JtUGF0aFN0b3JhZ2VUeXBlID0gUGxhdGZvcm1QYXRoUHRyOwogI2VuZGlmCkBAIC0xODksMTAg
KzE3Myw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFRvIGtlZXAgUGF0aCgpIGNoZWFwLCBpdCBkb2Vz
IG5vdCBhbGxvY2F0ZSBhIFBsYXRmb3JtUGF0aCBpbW1lZGlhdGVseQogICAgIC8vIG1lYW5pbmcg
UGF0aDo6cGxhdGZvcm1QYXRoKCkgY2FuIHJldHVybiBudWxsLgotI2lmIFVTRShESVJFQ1QyRCkK
LSAgICBGbG9hdFJlY3QgZmFzdEJvdW5kaW5nUmVjdEZvclN0cm9rZShjb25zdCBQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYpIGNvbnN0OwotICAgIFBsYXRmb3JtUGF0aFB0ciBwbGF0Zm9ybVBhdGgo
KSBjb25zdCB7IHJldHVybiBtX3BhdGguZ2V0KCk7IH0KLSNlbGlmIFVTRShDRykKKyNpZiBVU0Uo
Q0cpCiAgICAgV0VCQ09SRV9FWFBPUlQgUGxhdGZvcm1QYXRoUHRyIHBsYXRmb3JtUGF0aCgpIGNv
bnN0OwogI2VsaWYgVVNFKENBSVJPKQogICAgIGNhaXJvX3QqIGNhaXJvUGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0aC5nZXQoKTsgfQpAQCAtMjE3LDE5ICsxOTgsMTAgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBhZGRCZXppZXJzRm9yUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVz
LCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90
dG9tUmlnaHRSYWRpdXMpOwogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNF
KENHKQogICAgIHZvaWQgcGxhdGZvcm1BZGRQYXRoRm9yUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRv
cFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZs
b2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpOwogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQp
Ci0gICAgdm9pZCBhcHBlbmRHZW9tZXRyeShJRDJEMUdlb21ldHJ5Kik7Ci0gICAgdm9pZCBjcmVh
dGVHZW9tZXRyeVdpdGhGaWxsTW9kZShXaW5kUnVsZSwgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91
cD4mKSBjb25zdDsKLQotICAgIHZvaWQgb3BlbkZpZ3VyZUF0Q3VycmVudFBvaW50SWZOZWNlc3Nh
cnkoKTsKLSAgICB2b2lkIGNsb3NlQW55T3Blbkdlb21ldHJpZXModW5zaWduZWQgZmlndXJlRW5k
U3R5bGUpIGNvbnN0OwotICAgIHZvaWQgY2xlYXJHZW9tZXRyaWVzKCk7Ci0jZW5kaWYKLQogI2lm
bmRlZiBOREVCVUcKICAgICB2b2lkIGR1bXAoKSBjb25zdDsKICNlbmRpZgpAQCAtMjgwLDEyICsy
NTIsNiBAQCBwcml2YXRlOgogICAgIG11dGFibGUgUGxhdGZvcm1QYXRoU3RvcmFnZVR5cGUgbV9w
YXRoOwogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgVmVjdG9yPElEMkQxR2VvbWV0
cnkqPiBtX2dlb21ldHJpZXM7Ci0gICAgbXV0YWJsZSBDT01QdHI8SUQyRDFHZW9tZXRyeVNpbms+
IG1fYWN0aXZlUGF0aDsKLSAgICBtdXRhYmxlIGJvb2wgbV9maWd1cmVJc09wZW5lZCB7IGZhbHNl
IH07Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIElubGluZVBh
dGhEYXRhIG1faW5saW5lRGF0YTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMyAr
MzYsNiBAQAogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHUGF0dGVybiogQ0dQYXR0ZXJu
UmVmOwogdHlwZWRlZiBSZXRhaW5QdHI8Q0dQYXR0ZXJuUmVmPiBQbGF0Zm9ybVBhdHRlcm5QdHI7
Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQyRDFCaXRtYXBCcnVzaDsKLXR5cGVk
ZWYgSUQyRDFCaXRtYXBCcnVzaCogUGxhdGZvcm1QYXR0ZXJuUHRyOwotbmFtZXNwYWNlIFdlYkNv
cmUgewotY2xhc3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ7Ci19Ci10eXBlZGVmIFdlYkNvcmU6
OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwogI2VsaWYg
VVNFKENBSVJPKQogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90
OwogdHlwZWRlZiBjYWlyb19wYXR0ZXJuX3QqIFBsYXRmb3JtUGF0dGVyblB0cjsKQEAgLTc3LDEx
ICs3MCw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CiAKICAgICAvLyBQYXR0ZXJuIHNwYWNlIGlzIGFu
IGFic3RyYWN0IHNwYWNlIHRoYXQgbWFwcyB0byB0aGUgZGVmYXVsdCB1c2VyIHNwYWNlIGJ5IHRo
ZSB0cmFuc2Zvcm1hdGlvbiAndXNlclNwYWNlVHJhbnNmb3JtJwotI2lmICFVU0UoRElSRUNUMkQp
CiAgICAgUGxhdGZvcm1QYXR0ZXJuUHRyIGNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW5zZm9ybSkgY29uc3Q7Ci0jZWxzZQotICAgIFBsYXRm
b3JtUGF0dGVyblB0ciBjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgR3JhcGhpY3NDb250ZXh0
JiwgZmxvYXQgYWxwaGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3Jt
KSBjb25zdDsKLSNlbmRpZgorCiAgICAgdm9pZCBzZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
U3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMucGF0dGVyblNwYWNl
VHJhbnNmb3JtOyB9OwogICAgIGJvb2wgcmVwZWF0WCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1l
dGVycy5yZXBlYXRYOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybUltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1JbWFnZS5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDggKzM2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgVVNFKENHKQogdXNpbmcgUGxh
dGZvcm1JbWFnZVB0ciA9IFJldGFpblB0cjxDR0ltYWdlUmVmPjsKLSNlbGlmIFVTRShESVJFQ1Qy
RCkKLXVzaW5nIFBsYXRmb3JtSW1hZ2VQdHIgPSBDT01QdHI8SUQyRDFCaXRtYXA+OwogI2VsaWYg
VVNFKENBSVJPKQogdXNpbmcgUGxhdGZvcm1JbWFnZVB0ciA9IFJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDggKzMwLDYgQEAKIAogI2lmIFVTRShDRykKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIgotI2VsaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUg
IkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgiCiAjZWxpZiBVU0UoQ0FJUk8pCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaCIKICNlbmRpZgpAQCAtNDQs
OCArNDIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoQ0cpCiB1c2luZyBVbmFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ7
Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi11c2luZyBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNr
ZW5kID0gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ7CiAjZWxpZiBVU0UoQ0FJUk8pCiB1c2lu
ZyBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQ7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaAko
cmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsNiBA
QAogCiAjaWYgVVNFKENHKQogI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCi0jZWxp
ZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIK
ICNlbGlmIFVTRShDQUlSTykKICNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgog
I2VuZGlmCkBAIC0zNyw4ICszNSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShD
RykKIHVzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0JhY2tl
bmQ7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi11c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2Vu
ZCA9IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOwogI2VsaWYgVVNFKENBSVJPKQogdXNpbmcg
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDsKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L2NmL0NETVNlc3Npb25BVkZvdW5kYXRpb25DRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL0NETVNlc3Npb25BVkZvdW5k
YXRpb25DRi5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9DRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0YuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MywxNCArNTMsNiBAQCBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0Y6
OkNETVNlc3Npb25BVkZvCiAKIFJlZlB0cjxVaW50OEFycmF5PiBDRE1TZXNzaW9uQVZGb3VuZGF0
aW9uQ0Y6OmdlbmVyYXRlS2V5UmVxdWVzdChjb25zdCBTdHJpbmcmLCBVaW50OEFycmF5KiBpbml0
RGF0YSwgU3RyaW5nJiBkZXN0aW5hdGlvblVSTCwgdW5zaWduZWQgc2hvcnQmIGVycm9yQ29kZSwg
dWludDMyX3QmIHN5c3RlbUNvZGUpCiB7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIFVOVVNFRF9Q
QVJBTShpbml0RGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uVVJMKTsKLSAgICBV
TlVTRURfUEFSQU0oZXJyb3JDb2RlKTsKLSAgICBVTlVTRURfUEFSQU0oc3lzdGVtQ29kZSk7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSNlbHNlCiAgICAgU3Ry
aW5nIGtleVVSSTsKICAgICBTdHJpbmcga2V5SUQ7CiAgICAgUmVmUHRyPFVpbnQ4QXJyYXk+IGNl
cnRpZmljYXRlOwpAQCAtMTAyLDcgKzk0LDYgQEAgUmVmUHRyPFVpbnQ4QXJyYXk+IENETVNlc3Np
b25BVkZvdW5kYXRpbwogCiAgICAgYXV0byBrZXlSZXF1ZXN0QnVmZmVyID0gQXJyYXlCdWZmZXI6
OmNyZWF0ZShDRkRhdGFHZXRCeXRlUHRyKGtleVJlcXVlc3QuZ2V0KCkpLCBDRkRhdGFHZXRMZW5n
dGgoa2V5UmVxdWVzdC5nZXQoKSkpOwogICAgIHJldHVybiBVaW50OEFycmF5Ojp0cnlDcmVhdGUo
V1RGTW92ZShrZXlSZXF1ZXN0QnVmZmVyKSwgMCwga2V5UmVxdWVzdEJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpKTsKLSNlbmRpZgogfQogCiB2b2lkIENETVNlc3Npb25BVkZvdW5kYXRpb25DRjo6cmVsZWFz
ZUtleXMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTQsMTEgKzg5NCw3
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnAKICAgICAgICAgY29u
dGV4dC5zY2FsZShGbG9hdFNpemUoMS4wZiwgLTEuMGYpKTsKICAgICAgICAgY29udGV4dC5zZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5OjpMb3cpOwogICAg
ICAgICBGbG9hdFJlY3QgcGFpbnRSZWN0KEZsb2F0UG9pbnQoKSwgcmVjdC5zaXplKCkpOwotI2lm
IFVTRShESVJFQ1QyRCkKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbHNlCiAgICAgICAg
IENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBDR1JlY3RNYWtl
KDAsIDAsIHBhaW50UmVjdC53aWR0aCgpLCBwYWludFJlY3QuaGVpZ2h0KCkpLCBpbWFnZS5nZXQo
KSk7Ci0jZW5kaWYKICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CiAgICAgICAgIGltYWdlID0g
MDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZE
b2N1bWVudEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2MiwxNiArMzYyLDEyIEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6
ZHJhd1BERlBhZ2UoR3JhcGgKIAogICAgIGNvbnRleHQudHJhbnNsYXRlKC1tX2Nyb3BCb3gubG9j
YXRpb24oKSk7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSNl
bHNlCiAgICAgLy8gQ0dQREYgcGFnZXMgYXJlIGluZGV4ZWQgZnJvbSAxLgogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIENHQ29udGV4dERyYXdQREZQYWdlV2l0aEFubm90YXRpb25zKGNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCksIENHUERGRG9jdW1lbnRHZXRQYWdlKG1fZG9jdW1lbnQuZ2V0KCks
IDEpLCBudWxscHRyKTsKICNlbHNlCiAgICAgQ0dDb250ZXh0RHJhd1BERlBhZ2UoY29udGV4dC5w
bGF0Zm9ybUNvbnRleHQoKSwgQ0dQREZEb2N1bWVudEdldFBhZ2UobV9kb2N1bWVudC5nZXQoKSwg
MSkpOwogI2VuZGlmCi0jZW5kaWYKIH0KIAogI2VuZGlmIC8vICFVU0UoUERGS0lUX0ZPUl9QREZE
T0NVTUVOVElNQUdFKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5o
CShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODks
NyArMTg5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KIAotI2lmIFVT
RShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykKICAgICB2b2lkIHNldElzQ0FMYXll
ckNvbnRleHQoYm9vbCkgZmluYWwgeyB9CiAgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29u
c3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250
ZXh0KGJvb2wpIGZpbmFsIHsgfQpAQCAtMjIwLDcgKzIyMCw3IEBAIHByaXZhdGU6CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNFKENHKQogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBl
L09wZW5UeXBlTWF0aERhdGEuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjU5LDEwICsyNTksNiBAQCBPcGVuVHlwZU1hdGhEYXRhOjpPcGVuVHlwZU1h
dGhEYXRhKGNvbnN0CiAgICAgOiBtX21hdGhGb250KGZvbnQuY3JlYXRlT3BlblR5cGVNYXRoSGFy
ZkJ1enpGb250KCkpCiB7CiB9Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi1PcGVuVHlwZU1hdGhEYXRh
OjpPcGVuVHlwZU1hdGhEYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnQpCi17Ci19CiAj
ZWxzZQogT3BlblR5cGVNYXRoRGF0YTo6T3BlblR5cGVNYXRoRGF0YShjb25zdCBGb250UGxhdGZv
cm1EYXRhJikgPSBkZWZhdWx0OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRp
ZXMuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDExICszMCw2IEBACiAjaW5jbHVkZSAiRm9udE1lbW9yeVJlc291cmNlLmgiCiAjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiRGlyZWN0V3Jp
dGVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgotI2VuZGlmCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RydWN0IEJpZ0VuZGlhblVTaG9ydCB7IApAQCAtMjgxLDExICsyNzYs
NiBAQCBSZWZQdHI8Rm9udE1lbW9yeVJlc291cmNlPiByZW5hbWVBbmRBY3RpCiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIEhSRVNVTFQgaHIgPSBE
aXJlY3RXcml0ZTo6YWRkRm9udEZyb21EYXRhVG9Qcm9jZXNzQ29sbGVjdGlvbihyZXdyaXR0ZW5G
b250RGF0YSk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotI2VuZGlmCi0KICAgICByZXR1
cm4gRm9udE1lbW9yeVJlc291cmNlOjpjcmVhdGUoZm9udEhhbmRsZSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0
bWFwVGV4dHVyZS5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsMTEgKzU0LDYgQEAgdm9pZCBCaXRtYXBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyhHcmFwaAog
CiAgICAgc291cmNlTGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIHNv
dXJjZVJlY3QpOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIC8vIFdlIGNhbid0IGFjY2VzcyB0
aGUgYml0cyBpbiB0aGUgaW1hZ2UgYnVmZmVyIHdpdGggYW4gYWN0aXZlIGJlZ2luRHJhdy4KLSAg
ICBjb250ZXh0LmVuZERyYXcoKTsKLSNlbmRpZgotCiAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9
IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgIGlmICgh
aW1hZ2UpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuY3BwCShyZXZp
c2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Qml0bWFwVGV4dHVyZUdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTEgKzQyLDYgQEAKICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkK
LSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d2luY29kZWMuaD4KLSNlbmRpZgotCiAjaWYg
T1MoREFSV0lOKQogI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYgMHg4MzY3CiAj
ZW5kaWYKQEAgLTE2Myw4ICsxNTgsNiBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29u
dGVudHMoSW1hCiAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gZnJhbWVJbWFnZS0+cGxh
dGZvcm1JbWFnZSgpLmdldCgpOwogICAgIGltYWdlRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2RhdGEoc3VyZmFjZSk7CiAgICAgYnl0ZXNQZXJMaW5lID0gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfc3RyaWRlKHN1cmZhY2UpOwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIG5vdEltcGxl
bWVudGVkKCk7CiAjZW5kaWYKIAogICAgIHVwZGF0ZUNvbnRlbnRzKGltYWdlRGF0YSwgdGFyZ2V0
UmVjdCwgb2Zmc2V0LCBieXRlc1BlckxpbmUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9y
bS5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSAr
MzYsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgQ0dBZmZpbmVUcmFuc2Zvcm0gQ0dBZmZpbmVUcmFuc2Zv
cm07CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFdJTikKLXN0cnVjdCBEMkRfTUFUUklYXzNYMl9G
OwotdHlwZWRlZiBEMkRfTUFUUklYXzNYMl9GIEQyRDFfTUFUUklYXzNYMl9GOwotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXVEYgewogY2xhc3MgVGV4dFN0cmVhbTsKIH0KQEAgLTY3LDEwICs2Miw2IEBA
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0oY29uc3QgQ0dBZmZp
bmVUcmFuc2Zvcm0mKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIEFmZmluZVRy
YW5zZm9ybShjb25zdCBEMkQxX01BVFJJWF8zWDJfRiYpOwotI2VuZGlmCi0KICAgICB2b2lkIHNl
dE1hdHJpeChkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIGUs
IGRvdWJsZSBmKTsKIAogICAgIHZvaWQgbWFwKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlJiB4
MiwgZG91YmxlJiB5MikgY29uc3Q7CkBAIC0xODksMTAgKzE4MCw2IEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCBvcGVyYXRvciBDR0FmZmluZVRyYW5zZm9ybSgpIGNvbnN0OwogI2VuZGlm
CiAKLSNpZiBQTEFURk9STShXSU4pCi0gICAgb3BlcmF0b3IgRDJEMV9NQVRSSVhfM1gyX0YoKSBj
b25zdDsKLSNlbmRpZgotCiAgICAgc3RhdGljIEFmZmluZVRyYW5zZm9ybSB0cmFuc2xhdGlvbihk
b3VibGUgeCwgZG91YmxlIHkpCiAgICAgewogICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3Jt
KDEsIDAsIDAsIDEsIHgsIHkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRy
aXguaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSwxMSArNDksNiBAQCB0eXBlZGVmIHN0cnVjdCB0YWdYRk9STSBYRk9STTsKICNlbmRpZgogI2Vu
ZGlmCiAKLSNpZiBQTEFURk9STShXSU4pCi1zdHJ1Y3QgRDJEX01BVFJJWF8zWDJfRjsKLXR5cGVk
ZWYgRDJEX01BVFJJWF8zWDJfRiBEMkQxX01BVFJJWF8zWDJfRjsKLSNlbmRpZgotCiBuYW1lc3Bh
Y2UgV1RGIHsKIGNsYXNzIFRleHRTdHJlYW07CiB9CkBAIC0zOTIsMTEgKzM4Nyw2IEBAIHB1Ymxp
YzoKICAgICBvcGVyYXRvciBYRk9STSgpIGNvbnN0OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShX
SU4pCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3QgRDJEMV9NQVRSSVhfM1gyX0YmKTsK
LSAgICBvcGVyYXRvciBEMkQxX01BVFJJWF8zWDJfRigpIGNvbnN0OwotI2VuZGlmCi0KICAgICBi
b29sIGlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVy
biBtX21hdHJpeFswXVswXSA9PSAxICYmIG1fbWF0cml4WzBdWzFdID09IDAgJiYgbV9tYXRyaXhb
MF1bMl0gPT0gMCAmJiBtX21hdHJpeFswXVszXSA9PSAwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJELmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9y
ZUJhY2tlbmREaXJlY3QyRC5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJELmgJKG5vbmV4
aXN0ZW50KQpAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5j
bHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHdpbmNvZGVj
Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLWludGVyZmFjZSBJRDJEMUJpdG1h
cDsKLWludGVyZmFjZSBJRDJEMUJpdG1hcEJydXNoOwotaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFy
Z2V0OwotaW50ZXJmYWNlIElEM0QxMURldmljZTE7Ci1pbnRlcmZhY2UgSURYR0lTdXJmYWNlMTsK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0
MkQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3Qy
RCk7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+
QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJEKCkgPSBkZWZhdWx0OwotCi0gICAgSUQyRDFSZW5k
ZXJUYXJnZXQqIHJlbmRlclRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyVGFyZ2V0Lmdl
dCgpOyB9Ci0gICAgSUQyRDFCaXRtYXAqIHN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3N1cmZh
Y2UuZ2V0KCk7IH0KLSAgICBJRFhHSVN1cmZhY2UxKiBkeFN1cmZhY2UoKSBjb25zdCB7IHJldHVy
biBtX2R4U3VyZmFjZS5nZXQoKTsgfQotICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoY29uc3QgSW50UmVj
dCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KSA9IDA7Ci0gICAgdmly
dHVhbCBJRDJEMUJpdG1hcEJydXNoKiBiaXRtYXBCcnVzaCgpID0gMDsKLQotcHJvdGVjdGVkOgot
ICAgIEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRChjb25zdCBJbnRTaXplJiBzaXplLCBJRDNE
MTFEZXZpY2UxKiBkZXZpY2UpCi0gICAgICAgIDogbV9kZXZpY2UoZGV2aWNlKQotICAgICAgICAs
IG1fc2l6ZShzaXplKQotICAgIHsKLSAgICB9Ci0KLSAgICBDT01QdHI8SUQzRDExRGV2aWNlMT4g
bV9kZXZpY2U7Ci0gICAgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBtX3JlbmRlclRhcmdldDsK
LSAgICBDT01QdHI8SURYR0lTdXJmYWNlMT4gbV9keFN1cmZhY2U7Ci0gICAgQ09NUHRyPElEMkQx
Qml0bWFwPiBtX3N1cmZhY2U7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci19OwotCi0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJ
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5jcHAJKHJldmlzaW9uIDI4NzgxMikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNr
ZW5kRGlyZWN0MkRJbXBsLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDEyNyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJhY2tpbmdTdG9yZUJhY2tl
bmREaXJlY3QyREltcGwuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkRpcmVj
dDJEVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0
U2l6ZS5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCi0jaW5jbHVkZSAiSW50
UmVjdC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0jaW5j
bHVkZSA8d2luY29kZWMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3Qg
U2Vjb25kcyBzY3JvbGxIeXN0ZXJlc2lzRHVyYXRpb24geyAzMDBfbXMgfTsKLQotQmFja2luZ1N0
b3JlQmFja2VuZERpcmVjdDJESW1wbDo6QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbChj
b25zdCBJbnRTaXplJiBzaXplLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgSUQzRDExRGV2aWNl
MSogZGV2aWNlKQotICAgIDogQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJEKHNpemUsIGRldmlj
ZSkKLSAgICAsIG1fc2Nyb2xsZWRIeXN0ZXJlc2lzKFt0aGlzXShQQUw6Okh5c3RlcmVzaXNTdGF0
ZSBzdGF0ZSkgewotICAgICAgICBpZiAoc3RhdGUgPT0gUEFMOjpIeXN0ZXJlc2lzU3RhdGU6OlN0
b3BwZWQpCi0gICAgICAgICAgICBtX3Njcm9sbFN1cmZhY2UgPSBudWxscHRyOwotICAgICAgICB9
LCBzY3JvbGxIeXN0ZXJlc2lzRHVyYXRpb24pCi17Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0g
bV9zaXplOwotICAgIHNjYWxlZFNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwotCi0gICAg
bV9keFN1cmZhY2UgPSBXZWJDb3JlOjpEaXJlY3QyRDo6Y3JlYXRlRFhHSVN1cmZhY2VPZlNpemUo
c2NhbGVkU2l6ZSwgbV9kZXZpY2UuZ2V0KCksIGZhbHNlKTsKLSAgICBtX3JlbmRlclRhcmdldCA9
IFdlYkNvcmU6OkRpcmVjdDJEOjpjcmVhdGVTdXJmYWNlUmVuZGVyVGFyZ2V0KG1fZHhTdXJmYWNl
LmdldCgpKTsKLQotICAgIGF1dG8gYml0bWFwUHJvcGVydGllcyA9IERpcmVjdDJEOjpiaXRtYXBQ
cm9wZXJ0aWVzKCk7Ci0gICAgSFJFU1VMVCBociA9IG1fcmVuZGVyVGFyZ2V0LT5DcmVhdGVTaGFy
ZWRCaXRtYXAoX191dWlkb2YoSURYR0lTdXJmYWNlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KG1fZHhTdXJmYWNlLmdldCgpKSwgJmJpdG1hcFByb3BlcnRpZXMsICZtX3N1cmZhY2UpOwotICAg
IFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotfQotCi1CYWNraW5nU3RvcmVCYWNrZW5k
RGlyZWN0MkRJbXBsOjp+QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbCgpCi17Ci19Ci0K
LXZvaWQgQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbDo6c2Nyb2xsKGNvbnN0IEludFJl
Y3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkKLXsKLSAgICBJbnRS
ZWN0IHNvdXJjZVJlY3QgPSBzY3JvbGxSZWN0OwotICAgIHNvdXJjZVJlY3QubW92ZSgtc2Nyb2xs
T2Zmc2V0KTsKLSAgICBzb3VyY2VSZWN0LmludGVyc2VjdChzY3JvbGxSZWN0KTsKLQotICAgIGlm
IChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3Nj
cm9sbFN1cmZhY2UgfHwgc2Nyb2xsUmVjdC5zaXplKCkgIT0gbV9zY3JvbGxTdXJmYWNlU2l6ZSkg
ewotI2lmbmRlZiBfTkRFQlVHCi0gICAgICAgIEFTU0VSVChtX3NpemUud2lkdGgoKSA+PSBzY3Jv
bGxSZWN0LnNpemUoKS53aWR0aCgpKTsKLSAgICAgICAgQVNTRVJUKG1fc2l6ZS5oZWlnaHQoKSA+
PSBzY3JvbGxSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0jZW5kaWYKLSAgICAgICAgbV9zY3JvbGxT
dXJmYWNlU2l6ZSA9IHNvdXJjZVJlY3Quc2l6ZSgpOwotICAgICAgICBtX2R4U2Nyb2xsU3VyZmFj
ZSA9IFdlYkNvcmU6OkRpcmVjdDJEOjpjcmVhdGVEWEdJU3VyZmFjZU9mU2l6ZShtX3Njcm9sbFN1
cmZhY2VTaXplLCBtX2RldmljZS5nZXQoKSwgZmFsc2UpOwotCi0gICAgICAgIG1fc2Nyb2xsU3Vy
ZmFjZSA9IG51bGxwdHI7Ci0gICAgICAgIGF1dG8gYml0bWFwUHJvcGVydGllcyA9IERpcmVjdDJE
OjpiaXRtYXBQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBtX3JlbmRlclRhcmdl
dC0+Q3JlYXRlU2hhcmVkQml0bWFwKF9fdXVpZG9mKElEWEdJU3VyZmFjZTEpLCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihtX2R4U2Nyb2xsU3VyZmFjZS5nZXQoKSksICZiaXRtYXBQcm9wZXJ0aWVz
LCAmbV9zY3JvbGxTdXJmYWNlKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0gICAgfQotCi0gICAgYXV0byBzb3VyY2VSZWN0TG9jYXRpb24gPSBJbnRTaXplKHNvdXJj
ZVJlY3QueCgpLCBzb3VyY2VSZWN0LnkoKSk7Ci0gICAgYXV0byBkZXN0UmVjdExvY2F0aW9uID0g
SW50U2l6ZSgpOyAvLyBUb3AgbGVmdCBjb3JuZXIgb2Ygc2Nyb2xsIHN1cmZhY2UKLSAgICBEaXJl
Y3QyRDo6Y29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihtX3N1cmZhY2UuZ2V0KCksIG1f
c2Nyb2xsU3VyZmFjZS5nZXQoKSwgc291cmNlUmVjdExvY2F0aW9uLCBzb3VyY2VSZWN0LCBkZXN0
UmVjdExvY2F0aW9uKTsKLQotICAgIEludFJlY3QgZGVzdFJlY3QgPSBzY3JvbGxSZWN0OwotICAg
IGRlc3RSZWN0LnNldEhlaWdodChzb3VyY2VSZWN0LmhlaWdodCgpKTsKLSAgICBkZXN0UmVjdC5z
ZXRXaWR0aChzb3VyY2VSZWN0LndpZHRoKCkpOwotCi0gICAgSW50U2l6ZSBkZXN0UG9zaXRpb247
Ci0gICAgaWYgKHNjcm9sbE9mZnNldC53aWR0aCgpID4gMCB8fCBzY3JvbGxPZmZzZXQuaGVpZ2h0
KCkgPiAwKSB7Ci0gICAgICAgIGRlc3RQb3NpdGlvbi5zZXRXaWR0aChzdGQ6Om1pbihzY3JvbGxS
ZWN0LndpZHRoKCksIHNjcm9sbE9mZnNldC53aWR0aCgpKSk7Ci0gICAgICAgIGRlc3RQb3NpdGlv
bi5zZXRIZWlnaHQoc3RkOjptaW4oc2Nyb2xsUmVjdC5oZWlnaHQoKSwgc2Nyb2xsT2Zmc2V0Lmhl
aWdodCgpKSk7Ci0gICAgfQotCi0gICAgYXV0byBzb3VyY2VTY3JvbGxTdXJmYWNlTG9jYXRpb24g
PSBJbnRTaXplKCk7IC8vIFRvcCBsZWZ0IGNvcm5lciBvZiBzY3JvbGwgc3VyZmFjZQotICAgIERp
cmVjdDJEOjpjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKG1fc2Nyb2xsU3VyZmFjZS5n
ZXQoKSwgbV9zdXJmYWNlLmdldCgpLCBzb3VyY2VTY3JvbGxTdXJmYWNlTG9jYXRpb24sIGRlc3RS
ZWN0LCBkZXN0UG9zaXRpb24pOwotCi0gICAgbV9zY3JvbGxlZEh5c3RlcmVzaXMuaW1wdWxzZSgp
OwotfQotCi1JRDJEMUJpdG1hcEJydXNoKiBCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBs
OjpiaXRtYXBCcnVzaCgpCi17Ci0gICAgaWYgKCFtX3JlbmRlclRhcmdldCB8fCAhbV9zdXJmYWNl
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghbV9iaXRtYXBCcnVzaCkgewot
ICAgICAgICBhdXRvIGJpdG1hcEJydXNoUHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcEJydXNoUHJv
cGVydGllcygpOwotICAgICAgICBhdXRvIGJydXNoUHJvcGVydGllcyA9IEQyRDE6OkJydXNoUHJv
cGVydGllcygpOwotCi0gICAgICAgIEhSRVNVTFQgaHIgPSBtX3JlbmRlclRhcmdldC0+Q3JlYXRl
Qml0bWFwQnJ1c2gobV9zdXJmYWNlLmdldCgpLCAmYml0bWFwQnJ1c2hQcm9wZXJ0aWVzLCAmYnJ1
c2hQcm9wZXJ0aWVzLCAmbV9iaXRtYXBCcnVzaCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQo
aHIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9iaXRtYXBCcnVzaC5nZXQoKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJl
Y3QyREltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5oCShyZXZpc2lvbiAyODc4MTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFj
a2VuZERpcmVjdDJESW1wbC5oCShub25leGlzdGVudCkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQmFj
a2luZ1N0b3JlQmFja2VuZERpcmVjdDJELmgiCi0jaW5jbHVkZSA8cGFsL0h5c3RlcmVzaXNBY3Rp
dml0eS5oPgotCi1pbnRlcmZhY2UgSUQyRDFCaXRtYXBCcnVzaDsKLWludGVyZmFjZSBJRFhHSVN1
cmZhY2UxOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEludFNpemU7Ci0KLWNsYXNz
IEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwgZmluYWwgOiBwdWJsaWMgQmFja2luZ1N0
b3JlQmFja2VuZERpcmVjdDJEIHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBCYWNraW5n
U3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsKGNvbnN0IEludFNpemUmLCBmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3RvciwgSUQzRDExRGV2aWNlMSopOwotICAgIHZpcnR1YWwgfkJhY2tpbmdTdG9yZUJhY2tl
bmREaXJlY3QyREltcGwoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHNjcm9sbChjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwotICAgIElEMkQxQml0bWFwQnJ1c2gqIGJp
dG1hcEJydXNoKCkgb3ZlcnJpZGU7Ci0KLSAgICBJbnRTaXplIG1fc2Nyb2xsU3VyZmFjZVNpemU7
Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBtX3Njcm9sbFN1cmZhY2U7Ci0gICAgQ09NUHRyPElE
WEdJU3VyZmFjZTE+IG1fZHhTY3JvbGxTdXJmYWNlOwotICAgIENPTVB0cjxJRDJEMUJpdG1hcEJy
dXNoPiBtX2JpdG1hcEJydXNoOwotCi0gICAgUEFMOjpIeXN0ZXJlc2lzQWN0aXZpdHkgbV9zY3Jv
bGxlZEh5c3RlcmVzaXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vQ29sb3JEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKG5v
bmV4aXN0ZW50KQpAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNv
bG9yLmgiCi0KLSNpZiBQTEFURk9STShXSU4pCi0KLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVk
ZSA8ZDJkMV8xaGVscGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ29sb3I6OkNvbG9y
KEQyRDFfQ09MT1JfRiBjb2xvcikKLSAgICA6IENvbG9yKGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50
OF90Pj4oU1JHQkE8ZmxvYXQ+IHsgY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSB9
KSkKLXsKLX0KLQotQ29sb3I6Om9wZXJhdG9yIEQyRDFfQ09MT1JfRigpIGNvbnN0Ci17Ci0gICAg
YXV0byBbciwgZywgYiwgYV0gPSB0b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNv
bHZlZCgpOwotICAgIHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwgYSk7Ci19Ci0KLUNvbG9y
OjpvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RigpIGNvbnN0Ci17Ci0gICAgYXV0byBbciwgZywgYiwg
YV0gPSB0b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwotICAgIHJl
dHVybiBEMkQxOjpWZWN0b3I0RihyLCBnLCBiLCBhKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gUExB
VEZPUk0oV0lOKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Nv
bXBsZXhUZXh0Q29udHJvbGxlckRpcmVjdFdyaXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyRGlyZWN0
V3JpdGUuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyRGlyZWN0V3JpdGUuY3BwCShub25leGlz
dGVudCkKQEAgLTEsMTgxICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KLSogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKLSogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29tcGxleFRl
eHRDb250cm9sbGVyLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJlY3RX
cml0ZVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZvbnRD
YXNjYWRlLmgiCi0jaW5jbHVkZSAiVGV4dEFuYWx5emVySGVscGVyLmgiCi0jaW5jbHVkZSA8ZHdy
aXRlXzMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgYm9vbCBzaGFwZShJRFdy
aXRlVGV4dEFuYWx5emVyKiBhbmFseXplciwgY29uc3QgRFdSSVRFX1NDUklQVF9BTkFMWVNJUyYg
YW5hbHlzaXMsIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnRQbGF0Zm9ybURhdGEsIGNvbnN0
IFdDSEFSKiB0ZXh0LCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN1Z2dlc3RlZENvdW50LCBW
ZWN0b3I8R2x5cGg+JiBnbHlwaHMsIFZlY3RvcjxHbHlwaD4mIGNsdXN0ZXJNYXAsIFZlY3RvcjxE
V1JJVEVfU0hBUElOR19URVhUX1BST1BFUlRJRVM+JiB0ZXh0UHJvcGVydGllcywgVmVjdG9yPERX
UklURV9TSEFQSU5HX0dMWVBIX1BST1BFUlRJRVM+JiBnbHlwaFByb3BlcnRpZXMsIHVuc2lnbmVk
JiBnbHlwaENvdW50KQotewotICAgIEhSRVNVTFQgc2hhcGVSZXN1bHQgPSBFX1BFTkRJTkc7Ci0K
LSAgICBkbyB7Ci0gICAgICAgIHNoYXBlUmVzdWx0ID0gYW5hbHl6ZXItPkdldEdseXBocyh0ZXh0
LCBsZW5ndGgsIGZvbnRQbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpLCBmb250UGxhdGZvcm1EYXRh
Lm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCwgZmFsc2UsCi0gICAg
ICAgICAgICAmYW5hbHlzaXMsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIDAs
IHN1Z2dlc3RlZENvdW50LCBjbHVzdGVyTWFwLmRhdGEoKSwgdGV4dFByb3BlcnRpZXMuZGF0YSgp
LAotICAgICAgICAgICAgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhQcm9wZXJ0aWVzLmRhdGEoKSwgJmds
eXBoQ291bnQpOwotCi0gICAgICAgIGlmIChzaGFwZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKSB7
Ci0gICAgICAgICAgICAvLyBOZWVkIHRvIHJlc2l6ZSBvdXIgYnVmZmVycyAoZXhjZXB0IGZvciBj
bHVzdGVyTWFwLiBJdCBpcyBhbHdheXMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nKS4KLSAgICAg
ICAgICAgIGdseXBocy5yZXNpemUoZ2x5cGhzLnNpemUoKSAqIDIpOwotICAgICAgICAgICAgdGV4
dFByb3BlcnRpZXMucmVzaXplKGdseXBocy5zaXplKCkpOwotICAgICAgICAgICAgZ2x5cGhQcm9w
ZXJ0aWVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKLSAgICAgICAgfQotICAgIH0gd2hpbGUgKHNo
YXBlUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotCi0gICAgaWYgKEZBSUxFRChzaGFwZVJlc3Vs
dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3Rl
cnMoY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0
aW9uLCBjb25zdCBGb250KiBmb250KQotewotICAgIGlmICghZm9udCkgewotICAgICAgICAvLyBD
cmVhdGUgYSBydW4gb2YgbWlzc2luZyBnbHlwaHMgZnJvbSB0aGUgcHJpbWFyeSBmb250LgotICAg
ICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShtX2Zv
bnQucHJpbWFyeUZvbnQoKSwgY3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5ndGgsIDAsIGxlbmd0aCwg
bV9ydW4ubHRyKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8mIGZvbnRQ
bGF0Zm9ybURhdGEgPSBmb250LT5wbGF0Zm9ybURhdGEoKTsKLQotICAgIHdjaGFyX3QgbG9jYWxl
TmFtZVtMT0NBTEVfTkFNRV9NQVhfTEVOR1RIXSA9IHsgfTsKLSAgICBpbnQgbG9jYWxlTGVuZ3Ro
ID0gR2V0VXNlckRlZmF1bHRMb2NhbGVOYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmbG9j
YWxlTmFtZSksIExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGxv
Y2FsZUxlbmd0aCA8IExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwotCi0gICAgVmVjdG9yPERXUklU
RV9GT05UX0ZFQVRVUkU+IGZvbnRGZWF0dXJlcygxKTsKLSAgICBmb250RmVhdHVyZXNbMF0ubmFt
ZVRhZyA9IERXUklURV9GT05UX0ZFQVRVUkVfVEFHX0tFUk5JTkc7Ci0gICAgZm9udEZlYXR1cmVz
WzBdLnBhcmFtZXRlciA9IG1fZm9udC5lbmFibGVLZXJuaW5nKCkgPyAxIDogMDsKLQotICAgIGlm
IChmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0
aWNhbCkKLSAgICAgICAgZm9udEZlYXR1cmVzLmFwcGVuZCh7RFdSSVRFX0ZPTlRfRkVBVFVSRV9U
QUdfVkVSVElDQUxfV1JJVElORywgMX0pOwotCi0gICAgRFdSSVRFX1RZUE9HUkFQSElDX0ZFQVRV
UkVTIHVzZWRGZWF0dXJlczsKLSAgICB1c2VkRmVhdHVyZXMuZmVhdHVyZXMgPSBmb250RmVhdHVy
ZXMuZGF0YSgpOwotICAgIHVzZWRGZWF0dXJlcy5mZWF0dXJlQ291bnQgPSBmb250RmVhdHVyZXMu
c2l6ZSgpOwotCi0gICAgVmVjdG9yPGNvbnN0IERXUklURV9UWVBPR1JBUEhJQ19GRUFUVVJFUyo+
IGZlYXR1cmVzOwotICAgIGZlYXR1cmVzLmFwcGVuZCgmdXNlZEZlYXR1cmVzKTsKLQotICAgIENP
TVB0cjxJRFdyaXRlVGV4dEFuYWx5emVyPiBhbmFseXplcjsKLSAgICBIUkVTVUxUIGhyID0gRGly
ZWN0V3JpdGU6OmZhY3RvcnkoKS0+Q3JlYXRlVGV4dEFuYWx5emVyKCZhbmFseXplcik7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBUZXh0QW5hbHl6ZXJIZWxwZXIg
aGVscGVyKHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmbG9jYWxlTmFtZSksIHJlaW50ZXJwcmV0
X2Nhc3Q8TFBDV1NUUj4oY3ApLCBsZW5ndGgpOwotCi0gICAgaHIgPSBhbmFseXplci0+QW5hbHl6
ZVNjcmlwdCgmaGVscGVyLCAwLCBsZW5ndGgsICZoZWxwZXIpOwotICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotCi0gICAgdW5zaWduZWQgdG90YWxTdWdnZXN0ZWRDb3VudCA9ICgz
ICogbGVuZ3RoIC8gMiArIDE2KTsKLQotICAgIFZlY3RvcjxHbHlwaD4gZ2x5cGhzOwotICAgIFZl
Y3RvcjxHbHlwaD4gY2x1c3Rlck1hcDsKLSAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfVEVYVF9Q
Uk9QRVJUSUVTPiB0ZXh0UHJvcGVydGllczsKLSAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfR0xZ
UEhfUFJPUEVSVElFUz4gZ2x5cGhQcm9wZXJ0aWVzOwotICAgIFZlY3RvcjxGTE9BVD4gZ2x5cGhB
ZHZhbmNlczsKLSAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4gZ2x5cGhPZmZzZXRzOwot
ICAgIFZlY3RvcjxGbG9hdFBvaW50PiBvcmlnaW5zOwotICAgIFZlY3RvcjxGbG9hdFNpemU+IGFk
dmFuY2VzOwotICAgIFZlY3Rvcjx1bnNpZ25lZD4gc3RyaW5nSW5kaWNlczsKLQotICAgIGdseXBo
cy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdnZXN0ZWRDb3VudCk7Ci0gICAgY2x1c3Rlck1hcC5y
ZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKLSAgICB0ZXh0UHJvcGVydGllcy5yZXNlcnZlQ2FwYWNp
dHkodG90YWxTdWdnZXN0ZWRDb3VudCk7Ci0gICAgZ2x5cGhQcm9wZXJ0aWVzLnJlc2VydmVDYXBh
Y2l0eSh0b3RhbFN1Z2dlc3RlZENvdW50KTsKLSAgICBnbHlwaEFkdmFuY2VzLnJlc2VydmVDYXBh
Y2l0eSh0b3RhbFN1Z2dlc3RlZENvdW50KTsKLSAgICBnbHlwaE9mZnNldHMucmVzZXJ2ZUNhcGFj
aXR5KHRvdGFsU3VnZ2VzdGVkQ291bnQpOwotICAgIG9yaWdpbnMucmVzZXJ2ZUNhcGFjaXR5KHRv
dGFsU3VnZ2VzdGVkQ291bnQpOwotICAgIGFkdmFuY2VzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1
Z2dlc3RlZENvdW50KTsKLSAgICBzdHJpbmdJbmRpY2VzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1
Z2dlc3RlZENvdW50KTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgcnVuIDogaGVscGVyLm1fYW5h
bHl6ZWRSdW5zKSB7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjdXJyZW50Q1AgPSBjcCArIHJ1bi5z
dGFydFBvc2l0aW9uOwotICAgICAgICBMUENXU1RSIHRleHRQb3NpdGlvbiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8TFBDV1NUUj4oY3VycmVudENQKTsKLQotICAgICAgICB1bnNpZ25lZCBzdWdnZXN0ZWRD
b3VudCA9ICgzICogcnVuLmxlbmd0aCAvIDIgKyAxNik7Ci0gICAgICAgIGdseXBocy5yZXNpemUo
c3VnZ2VzdGVkQ291bnQpOwotICAgICAgICBjbHVzdGVyTWFwLnJlc2l6ZShydW4ubGVuZ3RoKTsK
LSAgICAgICAgdGV4dFByb3BlcnRpZXMucmVzaXplKHN1Z2dlc3RlZENvdW50KTsKLSAgICAgICAg
Z2x5cGhQcm9wZXJ0aWVzLnJlc2l6ZShzdWdnZXN0ZWRDb3VudCk7Ci0KLSAgICAgICAgdW5zaWdu
ZWQgZ2x5cGhDb3VudCA9IDA7Ci0gICAgICAgIGlmICghc2hhcGUoYW5hbHl6ZXIuZ2V0KCksIHJ1
bi5hbmFseXNpcywgZm9udFBsYXRmb3JtRGF0YSwgdGV4dFBvc2l0aW9uLCBydW4ubGVuZ3RoLCBz
dWdnZXN0ZWRDb3VudCwgZ2x5cGhzLCBjbHVzdGVyTWFwLCB0ZXh0UHJvcGVydGllcywgZ2x5cGhQ
cm9wZXJ0aWVzLCBnbHlwaENvdW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBn
bHlwaHMuc2hyaW5rKGdseXBoQ291bnQpOwotICAgICAgICB0ZXh0UHJvcGVydGllcy5zaHJpbmso
Z2x5cGhDb3VudCk7Ci0gICAgICAgIGdseXBoUHJvcGVydGllcy5zaHJpbmsoZ2x5cGhDb3VudCk7
Ci0gICAgICAgIGdseXBoQWR2YW5jZXMucmVzaXplKGdseXBoQ291bnQpOwotICAgICAgICBnbHlw
aE9mZnNldHMucmVzaXplKGdseXBoQ291bnQpOwotCi0gICAgICAgIEhSRVNVTFQgcGxhY2VtZW50
UmVzdWx0ID0gYW5hbHl6ZXItPkdldEdseXBoUGxhY2VtZW50cyh0ZXh0UG9zaXRpb24sIGNsdXN0
ZXJNYXAuZGF0YSgpLCB0ZXh0UHJvcGVydGllcy5kYXRhKCksIHJ1bi5sZW5ndGgsCi0gICAgICAg
ICAgICBnbHlwaHMuZGF0YSgpLCBnbHlwaFByb3BlcnRpZXMuZGF0YSgpLCBnbHlwaENvdW50LCBm
b250UGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKSwKLSAgICAgICAgICAgIGZvbnRQbGF0Zm9ybURh
dGEuc2l6ZSgpLCBmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0
aW9uOjpWZXJ0aWNhbCwgbV9ydW4ubHRyKCksCi0gICAgICAgICAgICAmcnVuLmFuYWx5c2lzLCBy
ZWludGVycHJldF9jYXN0PExQQ1dTVFI+KGxvY2FsZU5hbWUpLCAKLSAgICAgICAgICAgIGZlYXR1
cmVzLmRhdGEoKSwgJnJ1bi5sZW5ndGgsIDEsCi0gICAgICAgICAgICBnbHlwaEFkdmFuY2VzLmRh
dGEoKSwgZ2x5cGhPZmZzZXRzLmRhdGEoKSk7Ci0gICAgICAgIGlmIChGQUlMRUQocGxhY2VtZW50
UmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBDb252ZXJ0IGFsbCBj
aGFycyB0aGF0IHNob3VsZCBiZSB0cmVhdGVkIGFzIHNwYWNlcyB0byB1c2UgdGhlIHNwYWNlIGds
eXBoLgotICAgICAgICAvLyBXZSBhbHNvIGNyZWF0ZSBhIG1hcCB0aGF0IGFsbG93cyB1cyB0byBx
dWlja2x5IGdvIGZyb20gc3BhY2UgZ2x5cGhzIGJhY2sgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBj
aGFyYWN0ZXJzLgotICAgICAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9udC0+c3BhY2VXaWR0aCgp
IC0gZm9udC0+c3ludGhldGljQm9sZE9mZnNldCgpOwotCi0gICAgICAgIGZvciAoaW50IGsgPSAw
OyBrIDwgcnVuLmxlbmd0aDsgKytrKSB7Ci0gICAgICAgICAgICBVQ2hhciBjaCA9ICooY3VycmVu
dENQICsgayk7Ci0gICAgICAgICAgICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnRDYXNjYWRlOjp0
cmVhdEFzU3BhY2UoY2gpOwotICAgICAgICAgICAgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2Ug
PSBGb250Q2FzY2FkZTo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoKTsKLSAgICAgICAgICAgIGlm
ICh0cmVhdEFzU3BhY2UgfHwgdHJlYXRBc1plcm9XaWR0aFNwYWNlKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gU3Vic3RpdHV0ZSBpbiB0aGUgc3BhY2UgZ2x5cGggYXQgdGhlIGFwcHJvcHJpYXRlIHBs
YWNlIGluIHRoZSBnbHlwaHMKLSAgICAgICAgICAgICAgICAvLyBhcnJheS4KLSAgICAgICAgICAg
ICAgICBnbHlwaHNbY2x1c3Rlck1hcFtrXV0gPSBmb250LT5zcGFjZUdseXBoKCk7Ci0gICAgICAg
ICAgICAgICAgZ2x5cGhBZHZhbmNlc1tjbHVzdGVyTWFwW2tdXSA9IHRyZWF0QXNTcGFjZSA/IHNw
YWNlV2lkdGggOiAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgb3JpZ2lu
cy5yZXNpemUoZ2x5cGhDb3VudCk7Ci0gICAgICAgIGFkdmFuY2VzLnJlc2l6ZShnbHlwaENvdW50
KTsKLSAgICAgICAgc3RyaW5nSW5kaWNlcy5yZXNpemUoZ2x5cGhDb3VudCk7Ci0KLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBnbHlwaENvdW50OyArK2kpIHsKLSAgICAgICAgICAgIHN0
cmluZ0luZGljZXNbaV0gPSBpOwotICAgICAgICAgICAgb3JpZ2luc1tpXSA9IEZsb2F0UG9pbnQo
Z2x5cGhPZmZzZXRzW2ldLmFkdmFuY2VPZmZzZXQsIGdseXBoT2Zmc2V0c1tpXS5hc2NlbmRlck9m
ZnNldCk7Ci0gICAgICAgICAgICBhZHZhbmNlc1tpXSA9IEZsb2F0U2l6ZShnbHlwaEFkdmFuY2Vz
W2ldLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChD
b21wbGV4VGV4dFJ1bjo6Y3JlYXRlKGFkdmFuY2VzLCBvcmlnaW5zLCBnbHlwaHMsIHN0cmluZ0lu
ZGljZXMsIEZsb2F0U2l6ZSgpLCAqZm9udCwgY3VycmVudENQLCAwLCBydW4ubGVuZ3RoLCAwLCBy
dW4ubGVuZ3RoLCBtX3J1bi5sdHIoKSkpOwotICAgIH0KLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xs
ZXJVbmlzY3JpYmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3BwCShyZXZpc2lvbiAy
ODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRl
eHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsNiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5o
IgogCi0jaWYgIVVTRShESVJFQ1QyRCkKLQogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiSFduZERDLmgiCkBAIC0yNzUsNSArMjczLDMg
QEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbAogfQogCiB9Ci0KLSNl
bmRpZiAvLyAhVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJl
Y3QyRE9wZXJhdGlvbnMuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTI0NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QnJlbnQgRnVsZ2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxMSBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEy
LCBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGlyZWN0MkRPcGVyYXRpb25z
LmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5o
IgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCi0jaW5j
bHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdl
RGVjb2RlckRpcmVjdDJELmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRl
ICJQYXRoLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRl
ICJTaGFkb3dCbHVyLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGQyZDEuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIERpcmVjdDJEIHsKLQotZW51bSBQYXR0
ZXJuQWRqdXN0bWVudCB7IE5vQWRqdXN0bWVudCwgQWRqdXN0UGF0dGVybkZvckdsb2JhbEFscGhh
IH07Ci1lbnVtIEFscGhhUHJlc2VydmF0aW9uIHsgRG9Ob3RQcmVzZXJ2ZUFscGhhLCBQcmVzZXJ2
ZUFscGhhIH07Ci0KLS8vIEZJWE1FOiBSZXBsYWNlIG9uY2UgR3JhcGhpY3NDb250ZXh0OjpkYXNo
ZWRMaW5lQ29ybmVyV2lkdGhGb3JTdHJva2VXaWR0aCgpCi0vLyBpcyByZWZhY3RvcmVkIGFzIGEg
c3RhdGljIHB1YmxpYyBmdW5jdGlvbi4KLXN0YXRpYyBmbG9hdCBkYXNoZWRMaW5lQ29ybmVyV2lk
dGhGb3JTdHJva2VXaWR0aChmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5
bGUsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKLXsKLSAgICByZXR1cm4gc3Ryb2tlU3R5bGUgPT0g
RG90dGVkU3Ryb2tlID8gc3Ryb2tlVGhpY2tuZXNzIDogc3RkOjptaW4oMi4wZiAqIHN0cm9rZVRo
aWNrbmVzcywgc3RkOjptYXgoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VXaWR0aCAvIDMuMGYpKTsK
LX0KLQotLy8gRklYTUU6IFJlcGxhY2Ugb25jZSBHcmFwaGljc0NvbnRleHQ6OmRhc2hlZExpbmVQ
YXR0ZXJuV2lkdGhGb3JTdHJva2VXaWR0aCgpCi0vLyBpcyByZWZhY3RvcmVkIGFzIGEgc3RhdGlj
IHB1YmxpYyBmdW5jdGlvbi4KLXN0YXRpYyBmbG9hdCBkYXNoZWRMaW5lUGF0dGVybldpZHRoRm9y
U3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlLCBm
bG9hdCBzdHJva2VUaGlja25lc3MpCi17Ci0gICAgcmV0dXJuIHN0cm9rZVN0eWxlID09IERvdHRl
ZFN0cm9rZSA/IHN0cm9rZVRoaWNrbmVzcyA6IHN0ZDo6bWluKDMuMGYgKiBzdHJva2VUaGlja25l
c3MsIHN0ZDo6bWF4KHN0cm9rZVRoaWNrbmVzcywgc3Ryb2tlV2lkdGggLyAzLjBmKSk7Ci19Ci0K
LS8vIEZJWE1FOiBSZXBsYWNlIG9uY2UgR3JhcGhpY3NDb250ZXh0OjpkYXNoZWRMaW5lUGF0dGVy
bk9mZnNldEZvclBhdHRlcm5BbmRTdHJva2VXaWR0aCgpCi0vLyBpcyByZWZhY3RvcmVkIGFzIGEg
c3RhdGljIHB1YmxpYyBmdW5jdGlvbi4KLXN0YXRpYyBmbG9hdCBkYXNoZWRMaW5lUGF0dGVybk9m
ZnNldEZvclBhdHRlcm5BbmRTdHJva2VXaWR0aChmbG9hdCBwYXR0ZXJuV2lkdGgsIGZsb2F0IHN0
cm9rZVdpZHRoKQotewotICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggZnVsbCBmaWxsIGFuZCBl
bmRzIHdpdGggdGhlIGVtcHR5IGZpbGwuCi0gICAgLy8gMS4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUg
ZW1wdHkgcGhhc2UgYWZ0ZXIgdGhlIGNvcm5lci4KLSAgICAvLyAyLiBDaGVjayBpZiB3ZSd2ZSBn
b3Qgb2RkIG9yIGV2ZW4gbnVtYmVyIG9mIHBhdHRlcm5zIGFuZCB3aGV0aGVyIHRoZXkgZnVsbHkg
Y292ZXIgdGhlIGxpbmUuCi0gICAgLy8gMy4gSW4gY2FzZSBvZiBldmVuIG51bWJlciBvZiBwYXR0
ZXJucyBhbmQvb3IgcmVtYWluZGVyLCBtb3ZlIHRoZSBwYXR0ZXJuIHN0YXJ0IHBvc2l0aW9uCi0g
ICAgLy8gc28gdGhhdCB0aGUgcGF0dGVybiBpcyBiYWxhbmNlZCBiZXR3ZWVuIHRoZSBjb3JuZXJz
LgotICAgIGZsb2F0IHBhdHRlcm5PZmZzZXQgPSBwYXR0ZXJuV2lkdGg7Ci0gICAgaW50IG51bWJl
ck9mU2VnbWVudHMgPSBzdGQ6OmZsb29yKHN0cm9rZVdpZHRoIC8gcGF0dGVybldpZHRoKTsKLSAg
ICBib29sIG9kZE51bWJlck9mU2VnbWVudHMgPSBudW1iZXJPZlNlZ21lbnRzICUgMjsKLSAgICBm
bG9hdCByZW1haW5kZXIgPSBzdHJva2VXaWR0aCAtIChudW1iZXJPZlNlZ21lbnRzICogcGF0dGVy
bldpZHRoKTsKLSAgICBpZiAob2RkTnVtYmVyT2ZTZWdtZW50cyAmJiByZW1haW5kZXIpCi0gICAg
ICAgIHBhdHRlcm5PZmZzZXQgLT0gcmVtYWluZGVyIC8gMi4wZjsKLSAgICBlbHNlIGlmICghb2Rk
TnVtYmVyT2ZTZWdtZW50cykgewotICAgICAgICBpZiAocmVtYWluZGVyKQotICAgICAgICAgICAg
cGF0dGVybk9mZnNldCArPSBwYXR0ZXJuT2Zmc2V0IC0gKHBhdHRlcm5XaWR0aCArIHJlbWFpbmRl
cikgLyAyLjBmOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYXR0ZXJuT2Zmc2V0ICs9IHBh
dHRlcm5XaWR0aCAvIDIuMGY7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhdHRlcm5PZmZzZXQ7Ci19
Ci0KLS8vIEZJWE1FOiBSZXBsYWNlIG9uY2UgR3JhcGhpY3NDb250ZXh0OjpjZW50ZXJMaW5lQW5k
Q3V0T2ZmQ29ybmVycygpCi0vLyBpcyByZWZhY3RvcmVkIGFzIGEgc3RhdGljIHB1YmxpYyBmdW5j
dGlvbi4KLXN0YXRpYyBWZWN0b3I8RmxvYXRQb2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5l
cnMoYm9vbCBpc1ZlcnRpY2FsTGluZSwgZmxvYXQgY29ybmVyV2lkdGgsIEZsb2F0UG9pbnQgcG9p
bnQxLCBGbG9hdFBvaW50IHBvaW50MikKLXsKLSAgICAvLyBDZW50ZXIgbGluZSBhbmQgY3V0IG9m
ZiBjb3JuZXJzIGZvciBwYXR0ZXJuIHBhaW50aW5nLgotICAgIGlmIChpc1ZlcnRpY2FsTGluZSkg
ewotICAgICAgICBmbG9hdCBjZW50ZXJPZmZzZXQgPSAocG9pbnQyLngoKSAtIHBvaW50MS54KCkp
IC8gMi4wZjsKLSAgICAgICAgcG9pbnQxLm1vdmUoY2VudGVyT2Zmc2V0LCBjb3JuZXJXaWR0aCk7
Ci0gICAgICAgIHBvaW50Mi5tb3ZlKC1jZW50ZXJPZmZzZXQsIC1jb3JuZXJXaWR0aCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgZmxvYXQgY2VudGVyT2Zmc2V0ID0gKHBvaW50Mi55KCkgLSBwb2lu
dDEueSgpKSAvIDIuMGY7Ci0gICAgICAgIHBvaW50MS5tb3ZlKGNvcm5lcldpZHRoLCBjZW50ZXJP
ZmZzZXQpOwotICAgICAgICBwb2ludDIubW92ZSgtY29ybmVyV2lkdGgsIC1jZW50ZXJPZmZzZXQp
OwotICAgIH0KLQotICAgIHJldHVybiB7IHBvaW50MSwgcG9pbnQyIH07Ci19Ci0KLQotbmFtZXNw
YWNlIFN0YXRlIHsKLQotdm9pZCBzZXRTdHJva2VUaGlja25lc3MoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQotewotICAgIHBs
YXRmb3JtQ29udGV4dC5zZXRTdHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKTsKLX0KLQot
dm9pZCBzZXRTdHJva2VTdHlsZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250
ZXh0LCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0
U3Ryb2tlU3R5bGUoc3Ryb2tlU3R5bGUpOwotfQotCi12b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlv
bihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBDb21wb3NpdGVPcGVy
YXRvciBjb21wb3NpdGVPcGVyYXRpb24sIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0KLSAgICBE
MkQxX0JMRU5EX01PREUgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX01VTFRJUExZ
OwotICAgIEQyRDFfQ09NUE9TSVRFX01PREUgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09N
UE9TSVRFX01PREVfRk9SQ0VfRFdPUkQ7Ci0KLSAgICBpZiAoYmxlbmRNb2RlICE9IEJsZW5kTW9k
ZTo6Tm9ybWFsKSB7Ci0gICAgICAgIHN3aXRjaCAoYmxlbmRNb2RlKSB7Ci0gICAgICAgIGNhc2Ug
QmxlbmRNb2RlOjpNdWx0aXBseToKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFf
QkxFTkRfTU9ERV9NVUxUSVBMWTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJs
ZW5kTW9kZTo6U2NyZWVuOgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVO
RF9NT0RFX1NDUkVFTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9k
ZTo6T3ZlcmxheToKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9E
RV9PVkVSTEFZOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpE
YXJrZW46Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfREFS
S0VOOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpMaWdodGVu
OgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0xJR0hURU47
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OkNvbG9yRG9kZ2U6
Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfQ09MT1JfRE9E
R0U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OkNvbG9yQnVy
bjoKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9DT0xPUl9C
VVJOOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpIYXJkTGln
aHQ6Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfSEFSRF9M
SUdIVDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6U29mdExp
Z2h0OgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX1NPRlRf
TElHSFQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OkRpZmZl
cmVuY2U6Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfRElG
RkVSRU5DRTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6RXhj
bHVzaW9uOgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0VY
Q0xVU0lPTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6SHVl
OgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0hVRTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6U2F0dXJhdGlvbjoKLSAg
ICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9TQVRVUkFUSU9OOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpDb2xvcjoKLSAgICAg
ICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9DT0xPUjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6THVtaW5vc2l0eToKLSAgICAgICAg
ICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9MVU1JTk9TSVRZOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpQbHVzRGFya2VyOgotICAgICAg
ICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0RBUktFUl9DT0xPUjsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6UGx1c0xpZ2h0ZXI6Ci0g
ICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfTElHSFRFUl9DT0xP
UjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2ggKGNvbXBvc2l0ZU9w
ZXJhdGlvbikgewotICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpDbGVhcjoKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfQ0xFQVI7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6Q29w
eToKLSAgICAgICAgICAgIHRhcmdldENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RF
X1NPVVJDRV9DT1BZOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRl
T3BlcmF0b3I6OlNvdXJjZU92ZXI6Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0g
RDJEMV9DT01QT1NJVEVfTU9ERV9TT1VSQ0VfT1ZFUjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbjoKLSAgICAgICAgICAgIHRhcmdl
dENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX1NPVVJDRV9JTjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdXQ6Ci0g
ICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVfTU9ERV9TT1VS
Q0VfT1VUOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRlT3BlcmF0
b3I6OlNvdXJjZUF0b3A6Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9D
T01QT1NJVEVfTU9ERV9TT1VSQ0VfQVRPUDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk92ZXI6Ci0gICAgICAgICAgICB0YXJn
ZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVfTU9ERV9ERVNUSU5BVElPTl9PVkVSOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3Rp
bmF0aW9uSW46Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJ
VEVfTU9ERV9ERVNUSU5BVElPTl9JTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk91dDoKLSAgICAgICAgICAgIHRhcmdldENv
bXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX0RFU1RJTkFUSU9OX09VVDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlv
bkF0b3A6Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVf
TU9ERV9ERVNUSU5BVElPTl9BVE9QOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q29tcG9zaXRlT3BlcmF0b3I6OlhPUjoKLSAgICAgICAgICAgIHRhcmdldENvbXBvc2l0ZU1vZGUg
PSBEMkQxX0NPTVBPU0lURV9NT0RFX1hPUjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpQbHVzRGFya2VyOgotICAgICAgICAgICAgdGFyZ2V0Qmxl
bmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0RBUktFTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpQbHVzTGlnaHRlcjoKLSAgICAgICAgICAgIHRh
cmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9MSUdIVEVOOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRlT3BlcmF0b3I6OkRpZmZlcmVuY2U6Ci0gICAgICAg
ICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfRElGRkVSRU5DRTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNl
dEJsZW5kQW5kQ29tcG9zaXRlTW9kZSh0YXJnZXRCbGVuZE1vZGUsIHRhcmdldENvbXBvc2l0ZU1v
ZGUpOwotfQotCi12b2lkIHNldFNob3VsZEFudGlhbGlhcyhQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYgcGxhdGZvcm1Db250ZXh0LCBib29sIGVuYWJsZSkKLXsKLSAgICBhdXRvIGFudGlhbGlhc01v
ZGUgPSBlbmFibGUgPyBEMkQxX0FOVElBTElBU19NT0RFX1BFUl9QUklNSVRJVkUgOiBEMkQxX0FO
VElBTElBU19NT0RFX0FMSUFTRUQ7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgp
LT5TZXRBbnRpYWxpYXNNb2RlKGFudGlhbGlhc01vZGUpOwotfQotCi12b2lkIHNldENUTShQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKLXsKLSAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdl
dCgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPlNldFRyYW5zZm9ybSh0
cmFuc2Zvcm0pOwotCi0gICAgaWYgKGF1dG8qIGdyYXBoaWNzQ29udGV4dFByaXZhdGUgPSBwbGF0
Zm9ybUNvbnRleHQuZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICAgICBncmFwaGljc0Nv
bnRleHRQcml2YXRlLT5zZXRDVE0odHJhbnNmb3JtKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIGdl
dENUTShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0KQotewotICAgIEFT
U0VSVChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIEQyRDFfTUFUUklYXzNY
Ml9GIGN1cnJlbnRUcmFuc2Zvcm07Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgp
LT5HZXRUcmFuc2Zvcm0oJmN1cnJlbnRUcmFuc2Zvcm0pOwotICAgIHJldHVybiBjdXJyZW50VHJh
bnNmb3JtOwotfQotCi1JbnRSZWN0IGdldENsaXBCb3VuZHMoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmIHBsYXRmb3JtQ29udGV4dCkKLXsKLSAgICBEMkQxX1NJWkVfRiBjbGlwU2l6ZTsKLSAgICBp
ZiAoYXV0byBjbGlwTGF5ZXIgPSBwbGF0Zm9ybUNvbnRleHQuY2xpcExheWVyKCkpCi0gICAgICAg
IGNsaXBTaXplID0gY2xpcExheWVyLT5HZXRTaXplKCk7Ci0gICAgZWxzZQotICAgICAgICBjbGlw
U2l6ZSA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+R2V0U2l6ZSgpOwotCi0gICAg
RmxvYXRSZWN0IGNsaXBCb3VuZHMoSW50UG9pbnQoKSwgY2xpcFNpemUpOwotCi0gICAgcmV0dXJu
IGVuY2xvc2luZ0ludFJlY3QoY2xpcEJvdW5kcyk7Ci19Ci0KLUZsb2F0UmVjdCByb3VuZFRvRGV2
aWNlUGl4ZWxzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgcmV0dXJu
IHJlY3Q7Ci19Ci0KLWJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkKLXsKLSAgICBhdXRvIHJlbmRlclByb3BlcnRpZXMgPSBE
MkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0gICAgcmVuZGVyUHJvcGVydGllcy50eXBl
ID0gRDJEMV9SRU5ERVJfVEFSR0VUX1RZUEVfSEFSRFdBUkU7Ci0gICAgcmV0dXJuIHBsYXRmb3Jt
Q29udGV4dC5yZW5kZXJUYXJnZXQoKS0+SXNTdXBwb3J0ZWQoJnJlbmRlclByb3BlcnRpZXMpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBTdGF0ZQotCi1GaWxsU291cmNlOjpGaWxsU291cmNlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQotICAgIDogZ2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEpCi0gICAgLCBjb2xvcihzdGF0ZS5m
aWxsQ29sb3IpCi0gICAgLCBmaWxsUnVsZShzdGF0ZS5maWxsUnVsZSkKLXsKLSAgICBBU1NFUlQo
Y29udGV4dC5oYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgYXV0byYgcGxhdGZvcm1Db250ZXh0
ID0gKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBpZiAoc3RhdGUuZmlsbFBhdHRl
cm4pIHsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBU
aGlzIGlzbid0IHJlYWxseSBuZWVkZWQgb24gV2luZG93cwotICAgICAgICBicnVzaCA9IHN0YXRl
LmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29udGV4dCwgc3RhdGUuYWxwaGEs
IHVzZXJUb0Jhc2VDVE0pOwotICAgIH0gZWxzZSBpZiAoc3RhdGUuZmlsbEdyYWRpZW50ICYmICFz
dGF0ZS5maWxsR3JhZGllbnQtPnN0b3BzKCkuaXNFbXB0eSgpKQotICAgICAgICBicnVzaCA9IHN0
YXRlLmZpbGxHcmFkaWVudC0+Y3JlYXRlQnJ1c2gocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdl
dCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGJydXNoID0gcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0
aENvbG9yKGNvbG9yKTsKLX0KLQotU3Ryb2tlU291cmNlOjpTdHJva2VTb3VyY2UoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Ci0gICAgOiBnbG9iYWxBbHBoYShzdGF0ZS5hbHBoYSkKLSAgICAsIHRoaWNrbmVzcyhzdGF0ZS5z
dHJva2VUaGlja25lc3MpCi0gICAgLCBjb2xvcihzdGF0ZS5zdHJva2VDb2xvcikKLXsKLSAgICBB
U1NFUlQoY29udGV4dC5oYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgYXV0byYgcGxhdGZvcm1D
b250ZXh0ID0gKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBpZiAoc3RhdGUuc3Ry
b2tlUGF0dGVybikgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8g
RklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCi0gICAgICAgIGJydXNo
ID0gc3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnRleHQsIHN0
YXRlLmFscGhhLCB1c2VyVG9CYXNlQ1RNKTsKLSAgICB9IGVsc2UgaWYgKHN0YXRlLnN0cm9rZUdy
YWRpZW50KQotICAgICAgICBicnVzaCA9IHN0YXRlLnN0cm9rZUdyYWRpZW50LT5jcmVhdGVCcnVz
aChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYnJ1
c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoY29sb3IpOwotfQotCi1TaGFkb3dT
dGF0ZTo6U2hhZG93U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQotICAg
IDogb2Zmc2V0KHN0YXRlLnNoYWRvd09mZnNldCkKLSAgICAsIGJsdXIoc3RhdGUuc2hhZG93Qmx1
cikKLSAgICAsIGNvbG9yKHN0YXRlLnNoYWRvd0NvbG9yKQotICAgICwgaWdub3JlVHJhbnNmb3Jt
cyhzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKLSAgICAsIGdsb2JhbEFscGhhKHN0YXRl
LmFscGhhKQotICAgICwgZ2xvYmFsQ29tcG9zaXRlT3BlcmF0b3Ioc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3IpCi17Ci19Ci0KLWJvb2wgU2hhZG93U3RhdGU6OmlzVmlzaWJsZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGNvbG9yLmlzVmlzaWJsZSgpICYmIChvZmZzZXQud2lkdGgoKSB8fCBvZmZzZXQu
aGVpZ2h0KCkgfHwgYmx1cik7Ci19Ci0KLWJvb2wgU2hhZG93U3RhdGU6OmlzUmVxdWlyZWQoUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkgY29uc3QKLXsKLSAgICAvLyBX
ZSBjYW4ndCBhdm9pZCBTaGFkb3dCbHVyIGlmIHRoZSBzaGFkb3cgaGFzIGJsdXIuCi0gICAgaWYg
KGNvbG9yLmlzVmlzaWJsZSgpICYmIGJsdXIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
Ly8gV2UgY2FuIGF2b2lkIFNoYWRvd0JsdXIgYW5kIG9wdGltaXplLCBzaW5jZSB3ZSdyZSBub3Qg
ZHJhd2luZyBvbiBhCi0gICAgLy8gY2FudmFzIGFuZCBib3ggc2hhZG93cyBhcmUgYWZmZWN0ZWQg
YnkgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4KLSAgICBpZiAoIWlnbm9yZVRyYW5zZm9ybXMp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdlIGNhbiBhdm9pZCBTaGFkb3dCbHVy
LCBzaW5jZSB0aGVyZSBhcmUgbm8gdHJhbnNmb3JtYXRpb25zIHRvIGFwcGx5IHRvIHRoZSBjYW52
YXMuCi0gICAgaWYgKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KS5pc0lkZW50aXR5KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE90aGVyd2lzZSwgbm8gY2hhbmNlIGF2
b2lkaW5nIFNoYWRvd0JsdXIuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgc2V0TGluZUNh
cChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBMaW5lQ2FwIGxpbmVD
YXApCi17Ci0gICAgRDJEMV9DQVBfU1RZTEUgY2FwU3R5bGUgPSBEMkQxX0NBUF9TVFlMRV9GTEFU
OwotICAgIHN3aXRjaCAobGluZUNhcCkgewotICAgIGNhc2UgTGluZUNhcDo6Um91bmQ6Ci0gICAg
ICAgIGNhcFN0eWxlID0gRDJEMV9DQVBfU1RZTEVfUk9VTkQ7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgTGluZUNhcDo6U3F1YXJlOgotICAgICAgICBjYXBTdHlsZSA9IEQyRDFfQ0FQX1NUWUxF
X1NRVUFSRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lQ2FwOjpCdXR0OgotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGNhcFN0eWxlID0gRDJEMV9DQVBfU1RZTEVfRkxBVDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldExpbmVDYXAoY2FwU3R5bGUp
OwotfQotCi12b2lkIHNldExpbmVEYXNoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQsIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQotewot
ICAgIHBsYXRmb3JtQ29udGV4dC5zZXREYXNoZXMoZGFzaGVzKTsKLSAgICBwbGF0Zm9ybUNvbnRl
eHQuc2V0RGFzaE9mZnNldChkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBzZXRMaW5lSm9pbihQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBMaW5lSm9pbiBsaW5lSm9pbikK
LXsKLSAgICBEMkQxX0xJTkVfSk9JTiBqb2luU3R5bGUgPSBEMkQxX0xJTkVfSk9JTl9NSVRFUjsK
LSAgICBzd2l0Y2ggKGxpbmVKb2luKSB7Ci0gICAgY2FzZSBMaW5lSm9pbjo6Um91bmQ6Ci0gICAg
ICAgIGpvaW5TdHlsZSA9IEQyRDFfTElORV9KT0lOX1JPVU5EOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIExpbmVKb2luOjpCZXZlbDoKLSAgICAgICAgam9pblN0eWxlID0gRDJEMV9MSU5FX0pP
SU5fQkVWRUw7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUpvaW46Ok1pdGVyOgotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGpvaW5TdHlsZSA9IEQyRDFfTElORV9KT0lOX01JVEVSOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0TGluZUpvaW4oam9p
blN0eWxlKTsKLX0KLQotdm9pZCBzZXRNaXRlckxpbWl0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
JiBwbGF0Zm9ybUNvbnRleHQsIGZsb2F0IG1pdGVyTGltaXQpCi17Ci0gICAgcGxhdGZvcm1Db250
ZXh0LnNldE1pdGVyTGltaXQobWl0ZXJMaW1pdCk7Ci19Ci0KLXZvaWQgZmlsbFJlY3QoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBGaWxsU291cmNlJiBmaWxsU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93
U3RhdGUpCi17Ci0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdl
dCgpOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwotICAgIGRy
YXdXaXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwgc2hhZG93U3RhdGUsIFsmcGxhdGZv
cm1Db250ZXh0LCByZWN0LCAmZmlsbFNvdXJjZV0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRh
cmdldCkgewotICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKLSAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBmaWxsU291cmNlLmJydXNo
LmdldCgpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBmaWxsUmVjdChQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvciwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAgIGF1dG8gY29u
dGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIHBsYXRmb3JtQ29u
dGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBkcmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNv
bnRleHQsIHJlY3QsIHNoYWRvd1N0YXRlLCBbJnBsYXRmb3JtQ29udGV4dCwgY29sb3IsIHJlY3Rd
KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgY29uc3QgRDJEMV9S
RUNUX0YgZDJkUmVjdCA9IHJlY3Q7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3Rhbmds
ZSgmZDJkUmVjdCwgcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKGNvbG9yKS5nZXQoKSk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgZmlsbFJvdW5kZWRSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvciwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAgIGF1
dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIHBsYXRm
b3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLQotICAgIGNvbnN0IEZsb2F0UmVjdCYg
ciA9IHJlY3QucmVjdCgpOwotICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpJiByYWRp
aSA9IHJlY3QucmFkaWkoKTsKLSAgICBib29sIGVxdWFsV2lkdGhzID0gKHJhZGlpLnRvcExlZnQo
KS53aWR0aCgpID09IHJhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSAmJiByYWRpaS50b3BSaWdodCgp
LndpZHRoKCkgPT0gcmFkaWkuYm90dG9tTGVmdCgpLndpZHRoKCkgJiYgcmFkaWkuYm90dG9tTGVm
dCgpLndpZHRoKCkgPT0gcmFkaWkuYm90dG9tUmlnaHQoKS53aWR0aCgpKTsKLSAgICBib29sIGVx
dWFsSGVpZ2h0cyA9IChyYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgPT0gcmFkaWkuYm90dG9tTGVm
dCgpLmhlaWdodCgpICYmIHJhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSA9PSByYWRpaS50b3BS
aWdodCgpLmhlaWdodCgpICYmIHJhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgPT0gcmFkaWkuYm90
dG9tUmlnaHQoKS5oZWlnaHQoKSk7Ci0gICAgYm9vbCBoYXNDdXN0b21GaWxsID0gZmFsc2U7IC8v
IEZJWE1FOiBXaHkgaXNuJ3QgYSBGaWxsU291cmNlIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uPwot
ICAgIGlmICghaGFzQ3VzdG9tRmlsbCAmJiBlcXVhbFdpZHRocyAmJiBlcXVhbEhlaWdodHMgJiYg
cmFkaWkudG9wTGVmdCgpLndpZHRoKCkgKiAyID09IHIud2lkdGgoKSAmJiByYWRpaS50b3BMZWZ0
KCkuaGVpZ2h0KCkgKiAyID09IHIuaGVpZ2h0KCkpIHsKLSAgICAgICAgZHJhd1dpdGhTaGFkb3co
cGxhdGZvcm1Db250ZXh0LCByLCBzaGFkb3dTdGF0ZSwgWyZwbGF0Zm9ybUNvbnRleHQsIGNvbG9y
LCByZWN0LCByYWRpaSwgcl0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAg
ICAgICAgICAgYXV0byByb3VuZGVkUmVjdCA9IEQyRDE6OlJvdW5kZWRSZWN0KHIsIHJhZGlpLnRv
cExlZnQoKS53aWR0aCgpLCByYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkpOwotICAgICAgICAgICAg
cmVuZGVyVGFyZ2V0LT5GaWxsUm91bmRlZFJlY3RhbmdsZSgmcm91bmRlZFJlY3QsIHBsYXRmb3Jt
Q29udGV4dC5icnVzaFdpdGhDb2xvcihjb2xvcikuZ2V0KCkpOwotICAgICAgICB9KTsKLSAgICB9
IGVsc2UgewotICAgICAgICBQYXRoIHBhdGg7Ci0gICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3Qo
cmVjdCk7Ci0gICAgICAgIGZpbGxQYXRoKHBsYXRmb3JtQ29udGV4dCwgcGF0aCwgY29sb3IsIHNo
YWRvd1N0YXRlKTsKLSAgICB9Ci19Ci0KLXZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IEZpbGxT
b3VyY2UmIGZpbGxTb3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAg
ICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBw
bGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0KLSAgICBQYXRoIHBhdGg7Ci0g
ICAgcGF0aC5hZGRSZWN0KHJlY3QpOwotCi0gICAgaWYgKCFyb3VuZGVkSG9sZVJlY3QucmFkaWko
KS5pc1plcm8oKSkKLSAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyb3VuZGVkSG9sZVJlY3Qp
OwotICAgIGVsc2UKLSAgICAgICAgcGF0aC5hZGRSZWN0KHJvdW5kZWRIb2xlUmVjdC5yZWN0KCkp
OwotCi0gICAgRmlsbFNvdXJjZSBmaWxsV2l0aEhvbGVTb3VyY2UgPSBmaWxsU291cmNlOwotICAg
IGZpbGxXaXRoSG9sZVNvdXJjZS5maWxsUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkOwotCi0gICAg
ZmlsbFBhdGgocGxhdGZvcm1Db250ZXh0LCBwYXRoLCBmaWxsV2l0aEhvbGVTb3VyY2UsIHNoYWRv
d1N0YXRlKTsKLX0KLQotdm9pZCBmaWxsUmVjdFdpdGhHcmFkaWVudChQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIElEMkQxQnJ1
c2gqIGdyYWRpZW50KQotewotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9f
KTsKLSAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1Db250
ZXh0LCByZWN0LCAmZ3JhZGllbnRdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsK
LSAgICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7Ci0gICAgICAgIHJlbmRl
clRhcmdldC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgZ3JhZGllbnQpOwotICAgIH0pOwotfQot
Ci12b2lkIGZpbGxQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQs
IGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IEZpbGxTb3VyY2UmIGZpbGxTb3VyY2UsIGNvbnN0IFNo
YWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBwYXRoLmNsb3NlQW55T3Blbkdlb21ldHJp
ZXMoRDJEMV9GSUdVUkVfRU5EX09QRU4pOwotCi0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwg
X19MSU5FX18pOwotCi0gICAgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4gcGF0aFRvRmlsbDsK
LSAgICBwYXRoLmNyZWF0ZUdlb21ldHJ5V2l0aEZpbGxNb2RlKGZpbGxTb3VyY2UuZmlsbFJ1bGUs
IHBhdGhUb0ZpbGwpOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18p
OwotICAgIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4gZHJhd0Z1bmN0aW9uID0g
WyZwbGF0Zm9ybUNvbnRleHQsICZwYXRoVG9GaWxsLCAmZmlsbFNvdXJjZV0oSUQyRDFSZW5kZXJU
YXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxHZW9tZXRy
eShwYXRoVG9GaWxsLmdldCgpLCBmaWxsU291cmNlLmJydXNoLmdldCgpKTsKLSAgICB9OwotCi0g
ICAgaWYgKHNoYWRvd1N0YXRlLmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBib3Vu
ZGluZ1JlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKLSAgICAgICAgZHJhd1dpdGhTaGFk
b3cocGxhdGZvcm1Db250ZXh0LCBib3VuZGluZ1JlY3QsIHNoYWRvd1N0YXRlLCBXVEZNb3ZlKGRy
YXdGdW5jdGlvbikpOwotICAgIH0gZWxzZQotICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0
Zm9ybUNvbnRleHQsIFdURk1vdmUoZHJhd0Z1bmN0aW9uKSk7Ci19Ci0KLXZvaWQgZmlsbFBhdGgo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgUGF0aCYgcGF0
aCwgY29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCi17
Ci0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0g
ICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwotCi0gICAgQ09NUHRyPElE
MkQxR2VvbWV0cnlHcm91cD4gcGF0aFRvRmlsbDsKLSAgICBwYXRoLmNyZWF0ZUdlb21ldHJ5V2l0
aEZpbGxNb2RlKFdpbmRSdWxlOjpFdmVuT2RkLCBwYXRoVG9GaWxsKTsKLQotICAgIHBsYXRmb3Jt
Q29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLQotICAgIEZ1bmN0aW9uPHZvaWQoSUQyRDFS
ZW5kZXJUYXJnZXQqKT4gZHJhd0Z1bmN0aW9uID0gWyZwbGF0Zm9ybUNvbnRleHQsICZwYXRoVG9G
aWxsLCBjb2xvcl0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICBy
ZW5kZXJUYXJnZXQtPkZpbGxHZW9tZXRyeShwYXRoVG9GaWxsLmdldCgpLCBwbGF0Zm9ybUNvbnRl
eHQuYnJ1c2hXaXRoQ29sb3IoY29sb3IpLmdldCgpKTsKLSAgICB9OwotCi0gICAgaWYgKHNoYWRv
d1N0YXRlLmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3QgPSBw
YXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKLSAgICAgICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1D
b250ZXh0LCBib3VuZGluZ1JlY3QsIHNoYWRvd1N0YXRlLCBXVEZNb3ZlKGRyYXdGdW5jdGlvbikp
OwotICAgIH0gZWxzZQotICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQs
IFdURk1vdmUoZHJhd0Z1bmN0aW9uKSk7Ci19Ci0KLXZvaWQgc3Ryb2tlUmVjdChQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGxpbmVXaWR0aCwgY29uc3QgU3Ryb2tlU291cmNlJiBzdHJva2VTb3VyY2UsIGNvbnN0IFNo
YWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBkcmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNv
bnRleHQsIHJlY3QsIHNoYWRvd1N0YXRlLCBbJnBsYXRmb3JtQ29udGV4dCwgJnN0cm9rZVNvdXJj
ZSwgcmVjdCwgbGluZVdpZHRoXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0g
ICAgICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICAgICAgY29u
c3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RHJh
d1JlY3RhbmdsZSgmZDJkUmVjdCwgc3Ryb2tlU291cmNlLmJydXNoLmdldCgpLCBsaW5lV2lkdGgs
IHBsYXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZSgpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBzdHJv
a2VQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFBh
dGgmIHBhdGgsIGNvbnN0IFN0cm9rZVNvdXJjZSYgc3Ryb2tlU291cmNlLCBjb25zdCBTaGFkb3dT
dGF0ZSYgc2hhZG93U3RhdGUpCi17Ci0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
LnJlbmRlclRhcmdldCgpOwotICAgIAotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9f
TElORV9fKTsKLQotICAgIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4gZHJhd0Z1
bmN0aW9uID0gWyZwbGF0Zm9ybUNvbnRleHQsICZwYXRoLCAmc3Ryb2tlU291cmNlXShJRDJEMVJl
bmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RHJhd0dl
b21ldHJ5KHBhdGgucGxhdGZvcm1QYXRoKCksIHN0cm9rZVNvdXJjZS5icnVzaC5nZXQoKSwgc3Ry
b2tlU291cmNlLnRoaWNrbmVzcywgcGxhdGZvcm1Db250ZXh0LnN0cm9rZVN0eWxlKCkpOwotICAg
IH07Ci0KLSAgICBpZiAoc2hhZG93U3RhdGUuaXNWaXNpYmxlKCkpIHsKLSAgICAgICAgYXV0byBi
b3VuZGluZ1JlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3RGb3JTdHJva2UocGxhdGZvcm1Db250
ZXh0KTsKLSAgICAgICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBib3VuZGluZ1Jl
Y3QsIHNoYWRvd1N0YXRlLCBXVEZNb3ZlKGRyYXdGdW5jdGlvbikpOwotICAgIH0gZWxzZQotICAg
ICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFdURk1vdmUoZHJhd0Z1bmN0
aW9uKSk7Ci19Ci0KLXZvaWQgZHJhd1BhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRm
b3JtQ29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCwgY29uc3QgU3Ryb2tlU291cmNlJiBzdHJva2VT
b3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJikKLXsKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBwYXRoLmNsb3NlQW55T3Blbkdlb21ldHJp
ZXMoRDJEMV9GSUdVUkVfRU5EX09QRU4pOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3Mo
MSwgX19MSU5FX18pOwotCi0gICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBb
JnBsYXRmb3JtQ29udGV4dCwgJnN0cm9rZVNvdXJjZSwgJnBhdGhdKElEMkQxUmVuZGVyVGFyZ2V0
KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3R2VvbWV0cnkocGF0
aC5wbGF0Zm9ybVBhdGgoKSwgc3Ryb2tlU291cmNlLmJydXNoLmdldCgpLCBzdHJva2VTb3VyY2Uu
dGhpY2tuZXNzLCBwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlU3R5bGUoKSk7Ci0gICAgfSk7Ci0KLSAg
ICBmbHVzaChwbGF0Zm9ybUNvbnRleHQpOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3V2l0aFNoYWRv
d0hlbHBlcihJRDJEMVJlbmRlclRhcmdldCogY29udGV4dCwgSUQyRDFCaXRtYXBSZW5kZXJUYXJn
ZXQqIGJpdG1hcFRhcmdldCwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ1JlY3QsIGNvbnN0IENv
bG9yJiBzaGFkb3dDb2xvciwgY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNo
YWRvd0JsdXIpCi17Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjdXJyZW50Q2FudmFzID0gRGly
ZWN0MkQ6OmNyZWF0ZUJpdG1hcENvcHlGcm9tQ29udGV4dChiaXRtYXBUYXJnZXQpOwotICAgIGlm
ICghY3VycmVudENhbnZhcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElEMkQxRGV2
aWNlQ29udGV4dD4gc2hhZG93RGV2aWNlQ29udGV4dDsKLSAgICBIUkVTVUxUIGhyID0gYml0bWFw
VGFyZ2V0LT5RdWVyeUludGVyZmFjZSgmc2hhZG93RGV2aWNlQ29udGV4dCk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIHNoYWRvdyBlZmZl
Y3QKLSAgICBDT01QdHI8SUQyRDFFZmZlY3Q+IHNoYWRvd0VmZmVjdDsKLSAgICBociA9IHNoYWRv
d0RldmljZUNvbnRleHQtPkNyZWF0ZUVmZmVjdChDTFNJRF9EMkQxU2hhZG93LCAmc2hhZG93RWZm
ZWN0KTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIHNoYWRvd0Vm
ZmVjdC0+U2V0SW5wdXQoMCwgY3VycmVudENhbnZhcy5nZXQoKSk7Ci0gICAgc2hhZG93RWZmZWN0
LT5TZXRWYWx1ZShEMkQxX1NIQURPV19QUk9QX0NPTE9SLCBzdGF0aWNfY2FzdDxEMkQxX1ZFQ1RP
Ul80Rj4oc2hhZG93Q29sb3IpKTsKLQotICAgIGZsb2F0IGJsdXJEZXZpYXRpb24gPSAwLjUgKiBz
aGFkb3dCbHVyOwotICAgIHNoYWRvd0VmZmVjdC0+U2V0VmFsdWUoRDJEMV9TSEFET1dfUFJPUF9C
TFVSX1NUQU5EQVJEX0RFVklBVElPTiwgYmx1ckRldmlhdGlvbik7Ci0KLSAgICBDT01QdHI8SUQy
RDFFZmZlY3Q+IHNoYWRvd1RyYW5zZm9ybUVmZmVjdDsKLSAgICBociA9IHNoYWRvd0RldmljZUNv
bnRleHQtPkNyZWF0ZUVmZmVjdChDTFNJRF9EMkQxMkRBZmZpbmVUcmFuc2Zvcm0sICZzaGFkb3dU
cmFuc2Zvcm1FZmZlY3QpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0g
ICAgc2hhZG93VHJhbnNmb3JtRWZmZWN0LT5TZXRJbnB1dEVmZmVjdCgwLCBzaGFkb3dFZmZlY3Qu
Z2V0KCkpOwotCi0gICAgLy8gTXVzdCBmbGlwIHRoZSBheGlzIGZvciB0aGUgc2hhZG93IG9mZnNl
dCwgc2luY2UgRGlyZWN0MkQncyBZIGF4aXMgaXMgaW52ZXJ0ZWQuCi0gICAgYXV0byBzaGFkb3dU
cmFuc2xhdGlvbiA9IEQyRDE6Ok1hdHJpeDN4MkY6OlRyYW5zbGF0aW9uKHNoYWRvd09mZnNldC53
aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsKLSAgICBzaGFkb3dUcmFuc2Zvcm1FZmZl
Y3QtPlNldFZhbHVlKEQyRDFfMkRBRkZJTkVUUkFOU0ZPUk1fUFJPUF9UUkFOU0ZPUk1fTUFUUklY
LCBzaGFkb3dUcmFuc2xhdGlvbik7Ci0KLSAgICBDT01QdHI8SUQyRDFFZmZlY3Q+IGNvbXBvc2l0
b3I7Ci0gICAgaHIgPSBzaGFkb3dEZXZpY2VDb250ZXh0LT5DcmVhdGVFZmZlY3QoQ0xTSURfRDJE
MUNvbXBvc2l0ZSwgJmNvbXBvc2l0b3IpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgY29tcG9zaXRvci0+U2V0SW5wdXRFZmZlY3QoMCwgc2hhZG93VHJhbnNmb3Jt
RWZmZWN0LmdldCgpKTsKLSAgICBjb21wb3NpdG9yLT5TZXRJbnB1dCgxLCBjdXJyZW50Q2FudmFz
LmdldCgpKTsKLQotICAgIHNoYWRvd0RldmljZUNvbnRleHQtPkJlZ2luRHJhdygpOwotICAgIHNo
YWRvd0RldmljZUNvbnRleHQtPkNsZWFyKEQyRDE6OkNvbG9yRigwLCAwLCAwLCAwKSk7Ci0gICAg
c2hhZG93RGV2aWNlQ29udGV4dC0+RHJhd0ltYWdlKGNvbXBvc2l0b3IuZ2V0KCkpOwotICAgIGhy
ID0gc2hhZG93RGV2aWNlQ29udGV4dC0+RW5kRHJhdygpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNV
Q0NFRURFRChocikpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7Ci0gICAgaHIg
PSBiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmYml0bWFwKTsKLSAgICBSRUxFQVNFX0FTU0VSVChT
VUNDRUVERUQoaHIpKTsKLQotICAgIEludFNpemUgcGl4ZWxTaXplID0gY29udGV4dC0+R2V0UGl4
ZWxTaXplKCk7Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjcm9wcGVkID0gRGlyZWN0MkQ6OmNy
ZWF0ZUJpdG1hcChiaXRtYXBUYXJnZXQsIHBpeGVsU2l6ZSk7Ci0gICAgaWYgKCFjcm9wcGVkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHNjYWxlRmFjdG9yID0gYml0bWFwUmVzb2x1dGlv
bihjb250ZXh0KTsKLQotICAgIEZsb2F0UmVjdCBzY2FsZWRCb3VuZGluZ1JlY3QoYm91bmRpbmdS
ZWN0KTsKLSAgICBzY2FsZWRCb3VuZGluZ1JlY3Quc2NhbGUoc2NhbGVGYWN0b3Iud2lkdGgoKSwg
c2NhbGVGYWN0b3IuaGVpZ2h0KCkpOwotCi0gICAgLy8gVGFrZSB0aGUgbWFnbml0dWRlIG9mIHRo
ZSBvZmZzZXQuIElmIHRoZSBvcmlnaW4gd2FzIG91dHNpZGUgdGhlIGRyYXdpbmcgY29udGV4dCwg
d2Ugc3RyZXRjaGVkIHRvIGluY2x1ZGUgdGhvc2UgcG9pbnRzLAotICAgIC8vIGFuZCBzbyB3ZSBu
ZWVkIHRvIGNyb3AgdGhlbSBvdXQuIElmIHRoZSBvcmlnaW4gd2FzIGluc2lkZSwgd2Ugd2FudCB0
byBob25vciB0aGUgb2Zmc2V0LgotICAgIGludCB4ID0gY2xhbXBUbzxpbnQ+KHN0ZDo6YWJzKHNj
YWxlZEJvdW5kaW5nUmVjdC54KCkpKTsKLSAgICBpbnQgeSA9IGNsYW1wVG88aW50PihzdGQ6OmFi
cyhzY2FsZWRCb3VuZGluZ1JlY3QueSgpKSk7Ci0gICAgaW50IHdpZHRoID0gY2xhbXBUbzxpbnQ+
KHNjYWxlZEJvdW5kaW5nUmVjdC53aWR0aCgpKTsKLSAgICBpbnQgaGVpZ2h0ID0gY2xhbXBUbzxp
bnQ+KHNjYWxlZEJvdW5kaW5nUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBJbnRSZWN0IG91dHB1dFJl
Y3QoSW50UG9pbnQoeCwgeSksIEludFNpemUod2lkdGgsIGhlaWdodCkpOwotICAgIEludFJlY3Qg
ZGVzdENvbnRleHRSZWN0KEludFBvaW50KCksIHBpeGVsU2l6ZSk7Ci0gICAgaWYgKG91dHB1dFJl
Y3QuaW50ZXJzZWN0cyhkZXN0Q29udGV4dFJlY3QpKQotICAgICAgICBvdXRwdXRSZWN0LmludGVy
c2VjdChkZXN0Q29udGV4dFJlY3QpOwotCi0gICAgRDJEMV9SRUNUX1UgY3JvcFJlY3QgPSBvdXRw
dXRSZWN0OwotICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBEMkQxOjpQb2ludDJVKCk7Ci0gICAgY3Jv
cHBlZC0+Q29weUZyb21CaXRtYXAoJnRhcmdldFBvaW50LCBiaXRtYXAuZ2V0KCksICZjcm9wUmVj
dCk7Ci0KLSAgICBjb250ZXh0LT5EcmF3Qml0bWFwKGNyb3BwZWQuZ2V0KCkpOwotfQotCi12b2lk
IGRyYXdXaXRoU2hhZG93KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQs
IEZsb2F0UmVjdCBib3VuZGluZ1JlY3QsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSwg
RnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiYmIGRyYXdDb21tYW5kcykKLXsKLSAg
ICBpZiAoIXNoYWRvd1N0YXRlLmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIGRyYXdXaXRob3V0U2hh
ZG93KHBsYXRmb3JtQ29udGV4dCwgV1RGTW92ZShkcmF3Q29tbWFuZHMpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHBsYXRmb3JtQ29udGV4dC5ub3RpZnlQcmVEcmF3T2JzZXJ2ZXIo
KTsKLQotICAgIGF1dG8qIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7
Ci0KLSAgICBGbG9hdFNpemUgcmVuZGVyVGFyZ2V0U2l6ZSA9IGNvbnRleHQtPkdldFNpemUoKTsK
LSAgICBjb25zdCBGbG9hdFJlY3QgY29udGV4dFJlY3QoRmxvYXRQb2ludCgpLCByZW5kZXJUYXJn
ZXRTaXplKTsKLSAgICBGbG9hdFJlY3Qgd29ya2luZ0NvbnRleHRSZWN0KGNvbnRleHRSZWN0KTsK
LQotICAgIGlmIChib3VuZGluZ1JlY3QuaXNJbmZpbml0ZSgpKQotICAgICAgICBib3VuZGluZ1Jl
Y3QgPSB3b3JraW5nQ29udGV4dFJlY3Q7Ci0KLSAgICBpZiAoIWNvbnRleHRSZWN0LmNvbnRhaW5z
KGJvdW5kaW5nUmVjdCkpCi0gICAgICAgIHdvcmtpbmdDb250ZXh0UmVjdC51bml0ZShib3VuZGlu
Z1JlY3QpOwotCi0gICAgd29ya2luZ0NvbnRleHRSZWN0LmV4cGFuZChzdGQ6OmFicyhzaGFkb3dT
dGF0ZS5vZmZzZXQud2lkdGgoKSkgKyBzaGFkb3dTdGF0ZS5ibHVyLCBzdGQ6OmFicyhzaGFkb3dT
dGF0ZS5vZmZzZXQuaGVpZ2h0KCkpICsgc2hhZG93U3RhdGUuYmx1cik7Ci0KLSAgICBhdXRvIHNj
YWxlRmFjdG9yID0gYml0bWFwUmVzb2x1dGlvbihjb250ZXh0KTsKLQotICAgIHdvcmtpbmdDb250
ZXh0UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7Ci0KLSAgICBJbnRTaXplIHBpeGVsRGltZW5zaW9u
cyhjbGFtcFRvPGludD4od29ya2luZ0NvbnRleHRSZWN0LndpZHRoKCkpLCBjbGFtcFRvPGludD4o
d29ya2luZ0NvbnRleHRSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICAvLyBSZW5kZXIgdGhlIGN1cnJl
bnQgZ2VvbWV0cnkgdG8gYSBiaXRtYXAgY29udGV4dAotICAgIENPTVB0cjxJRDJEMUJpdG1hcFJl
bmRlclRhcmdldD4gYml0bWFwVGFyZ2V0ID0gY3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0T2ZTaXpl
KHBpeGVsRGltZW5zaW9ucywgY29udGV4dCk7Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiBjdXJy
ZW50VHJhbnNmb3JtOwotICAgIGJpdG1hcFRhcmdldC0+R2V0VHJhbnNmb3JtKCZjdXJyZW50VHJh
bnNmb3JtKTsKLQotICAgIGlmICghY29udGV4dFJlY3QuY29udGFpbnMoYm91bmRpbmdSZWN0Lmxv
Y2F0aW9uKCkpKSB7Ci0gICAgICAgIGF1dG8gdHJhbnNsYXRpb24gPSBEMkQxOjpNYXRyaXgzeDJG
OjpUcmFuc2xhdGlvbigtYm91bmRpbmdSZWN0LmxvY2F0aW9uKCkueCgpLCAtYm91bmRpbmdSZWN0
LmxvY2F0aW9uKCkueSgpKTsKLSAgICAgICAgYml0bWFwVGFyZ2V0LT5TZXRUcmFuc2Zvcm0odHJh
bnNsYXRpb24gKiBjdXJyZW50VHJhbnNmb3JtKTsKLSAgICB9Ci0KLSAgICBiaXRtYXBUYXJnZXQt
PkJlZ2luRHJhdygpOwotICAgIGRyYXdDb21tYW5kcyhiaXRtYXBUYXJnZXQuZ2V0KCkpOwotICAg
IEhSRVNVTFQgaHIgPSBiaXRtYXBUYXJnZXQtPkVuZERyYXcoKTsKLSAgICBSRUxFQVNFX0FTU0VS
VChTVUNDRUVERUQoaHIpKTsKLQotICAgIGJpdG1hcFRhcmdldC0+U2V0VHJhbnNmb3JtKGN1cnJl
bnRUcmFuc2Zvcm0pOwotCi0gICAgZHJhd1dpdGhTaGFkb3dIZWxwZXIoY29udGV4dCwgYml0bWFw
VGFyZ2V0LmdldCgpLCBib3VuZGluZ1JlY3QsIHNoYWRvd1N0YXRlLmNvbG9yLCBzaGFkb3dTdGF0
ZS5vZmZzZXQsIHNoYWRvd1N0YXRlLmJsdXIpOwotICAgIHBsYXRmb3JtQ29udGV4dC5ub3RpZnlQ
b3N0RHJhd09ic2VydmVyKCk7Ci19Ci0KLXZvaWQgZHJhd1dpdGhvdXRTaGFkb3coUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgRnVuY3Rpb248dm9pZChJRDJEMVJlbmRl
clRhcmdldCopPiYmIGRyYXdDb21tYW5kcykKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQubm90aWZ5
UHJlRHJhd09ic2VydmVyKCk7Ci0gICAgZHJhd0NvbW1hbmRzKHBsYXRmb3JtQ29udGV4dC5yZW5k
ZXJUYXJnZXQoKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0Lm5vdGlmeVBvc3REcmF3T2JzZXJ2ZXIo
KTsKLX0KLQotdm9pZCBjbGVhclJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3Jt
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGRyYXdXaXRob3V0U2hhZG93
KHBsYXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9ybUNvbnRleHQsIHJlY3RdKElEMkQxUmVuZGVyVGFy
Z2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlbmRlclRhcmdldFJlY3Qo
RmxvYXRQb2ludCgpLCByZW5kZXJUYXJnZXQtPkdldFNpemUoKSk7Ci0KLSAgICAgICAgRDJEMTo6
TWF0cml4M3gyRiBtYXRyaXg7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+R2V0VHJhbnNmb3JtKCZt
YXRyaXgpOwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0obWF0cml4KTsKLQot
ICAgICAgICBGbG9hdFJlY3QgcmVjdFRvQ2xlYXIocmVjdCk7Ci0gICAgICAgIGlmICghdHJhbnNm
b3JtLnByZXNlcnZlc0F4aXNBbGlnbm1lbnQoKSkgewotICAgICAgICAgICAgQ09NUHRyPElEMkQx
UmVjdGFuZ2xlR2VvbWV0cnk+IHJlY3RhbmdsZTsKLSAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBH
cmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUmVjdGFuZ2xlR2VvbWV0cnko
cmVjdFRvQ2xlYXIsICZyZWN0YW5nbGUpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VD
Q0VFREVEKGhyKSk7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxHZW9tZXRyeShyZWN0
YW5nbGUuZ2V0KCksIHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihEMkQxOjpDb2xvckYo
MCwgMCwgMCwgMCkpLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJlY3RUb0NsZWFyID0gdHJhbnNmb3JtLm1hcFJlY3QocmVjdFRvQ2xlYXIpOwotCi0g
ICAgICAgIGlmIChyZWN0VG9DbGVhci5jb250YWlucyhyZW5kZXJUYXJnZXRSZWN0KSkgewotICAg
ICAgICAgICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwotICAgICAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5DbGVhcihEMkQxOjpDb2xvckYoMCwgMCwgMCwgMCkpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcGxhdGZvcm1Db250ZXh0LnNldFRh
Z3MoMSwgX19MSU5FX18pOwotICAgICAgICByZW5kZXJUYXJnZXQtPlB1c2hBeGlzQWxpZ25lZENs
aXAocmVjdFRvQ2xlYXIsIEQyRDFfQU5USUFMSUFTX01PREVfUEVSX1BSSU1JVElWRSk7Ci0gICAg
ICAgIHJlbmRlclRhcmdldC0+Q2xlYXIoRDJEMTo6Q29sb3JGKDAsIDAsIDAsIDApKTsKLSAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5Qb3BBeGlzQWxpZ25lZENsaXAoKTsKLSAgICB9KTsKLX0KLQotCi12
b2lkIGRyYXdHbHlwaHMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwg
Y29uc3QgRmlsbFNvdXJjZSYgZmlsbFNvdXJjZSwgY29uc3QgU3Ryb2tlU291cmNlJiBzdHJva2VT
b3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0LCBjb25z
dCBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+JiBnbHlwaHMsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGhv
cml6b250YWxBZHZhbmNlcywgY29uc3QgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+JiBnbHlw
aE9mZnNldHMsIGZsb2F0IHhPZmZzZXQsIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5n
TW9kZSwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNl
dCwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKQotewotICAgIGF1dG8gcmVuZGVyVGFyZ2V0ID0g
cGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBQbGF0Zm9ybUNv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGxhdGZvcm1Db250ZXh0KTsKLQotICAgIEQyRDFf
TUFUUklYXzNYMl9GIG1hdHJpeDsKLSAgICByZW5kZXJUYXJnZXQtPkdldFRyYW5zZm9ybSgmbWF0
cml4KTsKLQotICAgIC8qCi0gICAgLy8gRklYTUU6IEdldCBTeW50aGV0aWMgT2JsaXF1ZSB3b3Jr
aW5nCi0gICAgaWYgKHBsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkpIHsKLSAgICAgICAg
c3RhdGljIGZsb2F0IHNrZXcgPSAtdGFuZihzeW50aGV0aWNPYmxpcXVlQW5nbGUoKSAqIHBpRmxv
YXQgLyAxODAuMGYpOwotICAgICAgICBhdXRvIHNrZXdNYXRyaXggPSBEMkQxOjpNYXRyaXgzeDJG
OjpTa2V3KHNrZXcsIDApOwotICAgICAgICBjb250ZXh0LT5TZXRUcmFuc2Zvcm0obWF0cml4ICog
c2tld01hdHJpeCk7Ci0gICAgfQotICAgICovCi0KLSAgICBSRUxFQVNFX0FTU0VSVChwbGF0Zm9y
bURhdGEuZHdGb250KCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKHBsYXRmb3JtRGF0YS5kd0ZvbnRG
YWNlKCkpOwotCi0gICAgRFdSSVRFX0dMWVBIX1JVTiBnbHlwaFJ1bjsKLSAgICBnbHlwaFJ1bi5m
b250RmFjZSA9IHBsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCk7Ci0gICAgZ2x5cGhSdW4uZm9udEVt
U2l6ZSA9IHBsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAgZ2x5cGhSdW4uZ2x5cGhDb3VudCA9IGds
eXBocy5zaXplKCk7Ci0gICAgZ2x5cGhSdW4uZ2x5cGhJbmRpY2VzID0gZ2x5cGhzLmRhdGEoKTsK
LSAgICBnbHlwaFJ1bi5nbHlwaEFkdmFuY2VzID0gaG9yaXpvbnRhbEFkdmFuY2VzLmRhdGEoKTsK
LSAgICBnbHlwaFJ1bi5nbHlwaE9mZnNldHMgPSBudWxscHRyOwotICAgIGdseXBoUnVuLmlzU2lk
ZXdheXMgPSBwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZl
cnRpY2FsOwotICAgIGdseXBoUnVuLmJpZGlMZXZlbCA9IDA7Ci0KLSAgICAvKgotICAgIC8vIEZJ
WE1FKCk6IEdldCBTaGFkb3dzIHdvcmtpbmcKLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0Owot
ICAgIGZsb2F0IHNoYWRvd0JsdXI7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgZ3JhcGhp
Y3NDb250ZXh0LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9y
KTsKLQotICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnRleHREcmF3
aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlk
KCkgJiYgIXNoYWRvd0JsdXIgJiYgKCFncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMoKSB8fCBncmFwaGljc0NvbnRleHQuZ2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRp
b25PckZsaXBwZWQoKSk7Ci0gICAgaWYgKGhhc1NpbXBsZVNoYWRvdykgewotICAgICAgICAvLyBQ
YWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNo
YWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCi0gICAgICAgIGdy
YXBoaWNzQ29udGV4dC5jbGVhclNoYWRvdygpOwotICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBn
cmFwaGljc0NvbnRleHQuZmlsbENvbG9yKCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xv
ciA9IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBo
YUFzRmxvYXQoKSk7Ci0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgc2hh
ZG93T2Zmc2V0LndpZHRoKCk7Ci0gICAgICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRy
YW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5
ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUuCi0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9p
bnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpICogKGdyYXBoaWNzQ29udGV4dC5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKLQotICAgICAgICBhdXRvIHNoYWRvd0JydXNo
ID0gZ3JhcGhpY3NDb250ZXh0LmJydXNoV2l0aENvbG9yKHNoYWRvd0ZpbGxDb2xvcik7Ci0gICAg
ICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQxOjpQb2ludDJGKHNoYWRvd1RleHRYLCBzaGFk
b3dUZXh0WSksICZnbHlwaFJ1biwgc2hhZG93QnJ1c2gpOwotICAgICAgICBpZiAoZm9udC5zeW50
aGV0aWNCb2xkT2Zmc2V0KCkpCi0gICAgICAgICAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJE
MTo6UG9pbnQyRihzaGFkb3dUZXh0WCArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBzaGFk
b3dUZXh0WSksICZnbHlwaFJ1biwgc2hhZG93QnJ1c2gpOwotICAgIH0KLSAgICAqLwotCi0gICAg
cmVuZGVyVGFyZ2V0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihwb2ludC54KCksIHBvaW50
LnkoKSksICZnbHlwaFJ1biwgZmlsbFNvdXJjZS5icnVzaC5nZXQoKSk7Ci0gICAgLy8gaWYgKGZv
bnQuc3ludGhldGljQm9sZE9mZnNldCgpKQotICAgIC8vICAgICBjb250ZXh0LT5EcmF3R2x5cGhS
dW4oRDJEMTo6UG9pbnQyRihwb2ludC54KCkgKyBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwg
cG9pbnQueSgpKSwgJmdseXBoUnVuLCBncmFwaGljc0NvbnRleHQuc29saWRGaWxsQnJ1c2goKSk7
Ci0KLSAgICAvLyBpZiAoaGFzU2ltcGxlU2hhZG93KQotICAgIC8vICAgICBncmFwaGljc0NvbnRl
eHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOwotCi0g
ICAgc3RhdGVTYXZlci5yZXN0b3JlKCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0Lm5vdGlmeVBvc3RE
cmF3T2JzZXJ2ZXIoKTsKLX0KLQotCi12b2lkIGRyYXdQbGF0Zm9ybUltYWdlKFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIElXSUNCaXRtYXAqIGltYWdlLCBjb25zdCBG
bG9hdFNpemUmIG9yaWdpbmFsSW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zLCBmbG9hdCBnbG9iYWxBbHBoYSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQot
ewotICAgIGF1dG8gbmF0aXZlSW1hZ2VTaXplID0gYml0bWFwU2l6ZShpbWFnZSk7Ci0gICAgQ09N
UHRyPElEMkQxQml0bWFwPiBkZXZpY2VCaXRtYXA7Ci0gICAgSFJFU1VMVCBociA9IHBsYXRmb3Jt
Q29udGV4dC5yZW5kZXJUYXJnZXQoKS0+Q3JlYXRlQml0bWFwRnJvbVdpY0JpdG1hcChpbWFnZSwg
JmRldmljZUJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvIGltYWdlU2l6ZSA9IGJpdG1hcFNpemUoZGV2aWNlQml0bWFwLmdldCgpKTsK
LSAgICBkcmF3UGxhdGZvcm1JbWFnZShwbGF0Zm9ybUNvbnRleHQsIGRldmljZUJpdG1hcC5nZXQo
KSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywgZ2xvYmFsQWxwaGEsIHNo
YWRvd1N0YXRlKTsKLX0KLQotdm9pZCBkcmF3UGxhdGZvcm1JbWFnZShQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBJRDJEMUJpdG1hcCogaW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zLCBmbG9hdCBn
bG9iYWxBbHBoYSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAgIGF1dG8g
Yml0bWFwU2l6ZSA9IGltYWdlLT5HZXRTaXplKCk7Ci0KLSAgICBmbG9hdCBjdXJySGVpZ2h0ID0g
b3B0aW9ucy5vcmllbnRhdGlvbigpLnVzZXNXaWR0aEFzSGVpZ2h0KCkgPyBiaXRtYXBTaXplLndp
ZHRoIDogYml0bWFwU2l6ZS5oZWlnaHQ7Ci0gICAgaWYgKGN1cnJIZWlnaHQgPD0gc3JjUmVjdC55
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4
dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIEQyRDFfTUFUUklYXzNYMl9GIGN0bTsKLSAgICBjb250
ZXh0LT5HZXRUcmFuc2Zvcm0oJmN0bSk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
KGN0bSk7Ci0KLSAgICBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGxhdGZv
cm1Db250ZXh0KTsKLQotICAgIGJvb2wgc2hvdWxkVXNlU3ViaW1hZ2UgPSBmYWxzZTsKLQotICAg
IC8vIElmIHRoZSBzb3VyY2UgcmVjdCBpcyBhIHN1YnBvcnRpb24gb2YgdGhlIGltYWdlLCB0aGVu
IHdlIGNvbXB1dGUgYW4gaW5mbGF0ZWQgZGVzdGluYXRpb24gcmVjdCB0aGF0IHdpbGwgaG9sZCB0
aGUgZW50aXJlIGltYWdlCi0gICAgLy8gYW5kIHRoZW4gc2V0IGEgY2xpcCB0byB0aGUgcG9ydGlv
biB0aGF0IHdlIHdhbnQgdG8gZGlzcGxheS4KLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWREZXN0UmVj
dCA9IGRlc3RSZWN0OwotCi0gICAgaWYgKHNyY1JlY3Quc2l6ZSgpICE9IGltYWdlU2l6ZSkgewot
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGltYWdlIHNjYWxpbmcKLSAgICAgICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgaW1hZ2UgaXMgb25seSBwYXJ0aWFs
bHkgbG9hZGVkLCB0aGVuIHNocmluayB0aGUgZGVzdGluYXRpb24gcmVjdCB0aGF0IHdlJ3JlIGRy
YXdpbmcgaW50byBhY2NvcmRpbmdseS4KLSAgICBpZiAoIXNob3VsZFVzZVN1YmltYWdlICYmIGN1
cnJIZWlnaHQgPCBpbWFnZVNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGFkanVzdGVkRGVzdFJlY3Qu
c2V0SGVpZ2h0KGFkanVzdGVkRGVzdFJlY3QuaGVpZ2h0KCkgKiBjdXJySGVpZ2h0IC8gaW1hZ2VT
aXplLmhlaWdodCgpKTsKLQotICAgIFN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZv
cm1Db250ZXh0LCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2Rl
KCkpOwotCi0gICAgLy8gSW1hZ2VPcmllbnRhdGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUg
YXQgKDAsIDApLgotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoYWRqdXN0ZWREZXN0UmVjdC54KCks
IGFkanVzdGVkRGVzdFJlY3QueSgpKTsKLSAgICBjb250ZXh0LT5TZXRUcmFuc2Zvcm0odHJhbnNm
b3JtKTsKLSAgICBhZGp1c3RlZERlc3RSZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7Ci0K
LSAgICBpZiAob3B0aW9ucy5vcmllbnRhdGlvbigpICE9IEltYWdlT3JpZW50YXRpb246Ok5vbmUp
IHsKLSAgICAgICAgY29uY2F0Q1RNKHBsYXRmb3JtQ29udGV4dCwgb3B0aW9ucy5vcmllbnRhdGlv
bigpLnRyYW5zZm9ybUZyb21EZWZhdWx0KGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpKSk7Ci0gICAg
ICAgIGlmIChvcHRpb25zLm9yaWVudGF0aW9uKCkudXNlc1dpZHRoQXNIZWlnaHQoKSkgewotICAg
ICAgICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3Qgd2lsbCBoYXZlIGl0J3Mgd2lkdGggYW5k
IGhlaWdodCBhbHJlYWR5IHJldmVyc2VkIGZvciB0aGUgb3JpZW50YXRpb24gb2YKLSAgICAgICAg
ICAgIC8vIHRoZSBpbWFnZSwgYXMgaXQgd2FzIG5lZWRlZCBmb3IgcGFnZSBsYXlvdXQsIHNvIHdl
IG5lZWQgdG8gcmV2ZXJzZSBpdCBiYWNrIGhlcmUuCi0gICAgICAgICAgICBhZGp1c3RlZERlc3RS
ZWN0ID0gRmxvYXRSZWN0KGFkanVzdGVkRGVzdFJlY3QueCgpLCBhZGp1c3RlZERlc3RSZWN0Lnko
KSwgYWRqdXN0ZWREZXN0UmVjdC5oZWlnaHQoKSwgYWRqdXN0ZWREZXN0UmVjdC53aWR0aCgpKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElO
RV9fKTsKLSAgICBkcmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIGFkanVzdGVkRGVzdFJl
Y3QsIHNoYWRvd1N0YXRlLCBbaW1hZ2UsIGFkanVzdGVkRGVzdFJlY3QsIGdsb2JhbEFscGhhLCBz
cmNSZWN0XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIHJlbmRl
clRhcmdldC0+RHJhd0JpdG1hcChpbWFnZSwgYWRqdXN0ZWREZXN0UmVjdCwgZ2xvYmFsQWxwaGEs
IEQyRDFfQklUTUFQX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVIsIHNyY1JlY3QpOwotICAgIH0p
OwotCi0gICAgaWYgKCFzdGF0ZVNhdmVyLmRpZFNhdmUoKSkKLSAgICAgICAgY29udGV4dC0+U2V0
VHJhbnNmb3JtKGN0bSk7Ci19Ci0KLXZvaWQgZHJhd1BhdHRlcm4oUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgQ09NUHRyPElEMkQxQml0bWFwPiYmIHRpbGVJbWFnZSwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3Bl
cmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotICAgIFBsYXRmb3JtQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihwbGF0Zm9ybUNvbnRleHQpOwotCi0gICAgY2xpcChwbGF0Zm9ybUNvbnRleHQs
IGRlc3RSZWN0KTsKLQotICAgIFN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1D
b250ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLQotICAgIGF1dG8gYml0bWFw
QnJ1c2hQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwQnJ1c2hQcm9wZXJ0aWVzKCk7Ci0gICAgYml0
bWFwQnJ1c2hQcm9wZXJ0aWVzLmV4dGVuZE1vZGVYID0gRDJEMV9FWFRFTkRfTU9ERV9XUkFQOwot
ICAgIGJpdG1hcEJydXNoUHJvcGVydGllcy5leHRlbmRNb2RlWSA9IEQyRDFfRVhURU5EX01PREVf
V1JBUDsKLQotICAgIC8vIENyZWF0ZSBhIGJydXNoIHRyYW5zZm9ybWF0aW9uIHNvIHdlIHBhaW50
IHVzaW5nIHRoZSBzZWN0aW9uIG9mIHRoZSBpbWFnZSB3ZSBjYXJlIGFib3V0LgotICAgIEFmZmlu
ZVRyYW5zZm9ybSB0cmFuc2Zvcm1hdGlvbiA9IHBhdHRlcm5UcmFuc2Zvcm07Ci0gICAgdHJhbnNm
b3JtYXRpb24udHJhbnNsYXRlKGRlc3RSZWN0LmxvY2F0aW9uKCkpOwotCi0gICAgYXV0byBicnVz
aFByb3BlcnRpZXMgPSBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKTsKLSAgICBicnVzaFByb3BlcnRp
ZXMudHJhbnNmb3JtID0gdHJhbnNmb3JtYXRpb247Ci0gICAgYnJ1c2hQcm9wZXJ0aWVzLm9wYWNp
dHkgPSAxLjBmOwotCi0gICAgLy8gSWYgd2Ugb25seSB3YW50IGEgc3Vic2V0IG9mIHRoZSBiaXRt
YXAsIHdlIG5lZWQgdG8gY3JlYXRlIGEgY3JvcHBlZCBiaXRtYXAgaW1hZ2UuIEFjY29yZGluZyB0
byB0aGUgZG9jdW1lbnRhdGlvbiwKLSAgICAvLyB0aGlzIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBi
aXRtYXAgbWVtb3J5LgotICAgIGlmIChzaXplLndpZHRoKCkgPiBkZXN0UmVjdC53aWR0aCgpIHx8
IHNpemUuaGVpZ2h0KCkgPiBkZXN0UmVjdC5oZWlnaHQoKSkgewotICAgICAgICBmbG9hdCBkcGlY
ID0gMDsKLSAgICAgICAgZmxvYXQgZHBpWSA9IDA7Ci0gICAgICAgIHRpbGVJbWFnZS0+R2V0RHBp
KCZkcGlYLCAmZHBpWSk7Ci0gICAgICAgIGF1dG8gYml0bWFwUHJvcGVydGllcyA9IEQyRDE6OkJp
dG1hcFByb3BlcnRpZXModGlsZUltYWdlLT5HZXRQaXhlbEZvcm1hdCgpLCBkcGlYLCBkcGlZKTsK
LSAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBzdWJJbWFnZTsKLSAgICAgICAgSFJFU1VMVCBo
ciA9IGNvbnRleHQtPkNyZWF0ZUJpdG1hcChJbnRTaXplKHRpbGVSZWN0LnNpemUoKSksIGJpdG1h
cFByb3BlcnRpZXMsICZzdWJJbWFnZSk7Ci0gICAgICAgIGlmIChTVUNDRUVERUQoaHIpKSB7Ci0g
ICAgICAgICAgICBEMkQxX1JFQ1RfVSBmaW5pc2hSZWN0ID0gSW50UmVjdCh0aWxlUmVjdCk7Ci0g
ICAgICAgICAgICBociA9IHN1YkltYWdlLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCB0aWxlSW1h
Z2UuZ2V0KCksICZmaW5pc2hSZWN0KTsKLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQot
ICAgICAgICAgICAgICAgIHRpbGVJbWFnZSA9IHN1YkltYWdlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwQnJ1c2g+IHBhdHRlcm5CcnVzaDsKLSAgICBIUkVTVUxU
IGhyID0gY29udGV4dC0+Q3JlYXRlQml0bWFwQnJ1c2godGlsZUltYWdlLmdldCgpLCAmYml0bWFw
QnJ1c2hQcm9wZXJ0aWVzLCAmYnJ1c2hQcm9wZXJ0aWVzLCAmcGF0dGVybkJydXNoKTsKLSAgICBB
U1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFtkZXN0UmVj
dCwgcGF0dGVybkJydXNoXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAg
ICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSBkZXN0UmVjdDsKLSAgICAgICAgcmVuZGVy
VGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBwYXR0ZXJuQnJ1c2guZ2V0KCkpOwotICAg
IH0pOwotfQotCi12b2lkIGRyYXdSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzLCBj
b25zdCBDb2xvciYgZmlsbENvbG9yLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSwgY29uc3QgQ29s
b3ImIHN0cm9rZUNvbG9yKQotewotICAgIC8vIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90
IGhhbmRsZSBwYXR0ZXJucyBhbmQgZ3JhZGllbnRzIGxpa2UgZHJhd1BhdGggZG9lcywgaXQgcHJv
YmFibHkgc2hvdWxkLgotICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkpOwotCi0gICAgcGxhdGZv
cm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwotICAgIGRyYXdXaXRob3V0U2hhZG93KHBs
YXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGZpbGxDb2xvciwgc3Ryb2tl
Q29sb3IsIHN0cm9rZVN0eWxlXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0g
ICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwotICAgICAgICBhdXRvIGZp
bGxCcnVzaCA9IHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihmaWxsQ29sb3IpOwotICAg
ICAgICByZW5kZXJUYXJnZXQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIGZpbGxCcnVzaC5nZXQo
KSk7Ci0gICAgICAgIGlmIChzdHJva2VTdHlsZSAhPSBOb1N0cm9rZSkgewotICAgICAgICAgICAg
YXV0byBzdHJva2VCcnVzaCA9IHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihzdHJva2VD
b2xvcik7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdSZWN0YW5nbGUoJmQyZFJlY3Qs
IHN0cm9rZUJydXNoLmdldCgpLCBwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCksIHBs
YXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZSgpKTsKLSAgICAgICAgfQotICAgIH0pOwotfQotCi12
b2lkIGRyYXdMaW5lKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBTdHJva2VT
dHlsZSBzdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yLCBmbG9hdCBzdHJva2VU
aGlja25lc3MsIGJvb2wgc2hvdWxkQW50aWFsaWFzKQotewotICAgIGJvb2wgaXNWZXJ0aWNhbExp
bmUgPSAocG9pbnQxLngoKSArIHN0cm9rZVRoaWNrbmVzcyA9PSBwb2ludDIueCgpKTsKLSAgICBm
bG9hdCBzdHJva2VXaWR0aCA9IGlzVmVydGljYWxMaW5lID8gcG9pbnQyLnkoKSAtIHBvaW50MS55
KCkgOiBwb2ludDIueCgpIC0gcG9pbnQxLngoKTsKLSAgICBpZiAoIXN0cm9rZVRoaWNrbmVzcyB8
fCAhc3Ryb2tlV2lkdGgpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gY29udGV4dCA9IHBs
YXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIGZsb2F0IGNvcm5lcldpZHRoID0g
MDsKLSAgICBib29sIGRyYXdzRGFzaGVkTGluZSA9IHN0cm9rZVN0eWxlID09IERvdHRlZFN0cm9r
ZSB8fCBzdHJva2VTdHlsZSA9PSBEYXNoZWRTdHJva2U7Ci0KLSAgICBDT01QdHI8SUQyRDFTdHJv
a2VTdHlsZT4gZDJkU3Ryb2tlU3R5bGU7Ci0gICAgUGxhdGZvcm1Db250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKHBsYXRmb3JtQ29udGV4dCwgZHJhd3NEYXNoZWRMaW5lKTsKLSAgICBpZiAoZHJh
d3NEYXNoZWRMaW5lKSB7Ci0gICAgICAgIC8vIEZpZ3VyZSBvdXQgZW5kIHBvaW50cyB0byBlbnN1
cmUgd2UgYWx3YXlzIHBhaW50IGNvcm5lcnMuCi0gICAgICAgIGNvcm5lcldpZHRoID0gZGFzaGVk
TGluZUNvcm5lcldpZHRoRm9yU3Ryb2tlV2lkdGgoc3Ryb2tlV2lkdGgsIHN0cm9rZVN0eWxlLCBz
dHJva2VUaGlja25lc3MpOwotICAgICAgICBzdHJva2VXaWR0aCAtPSAyICogY29ybmVyV2lkdGg7
Ci0gICAgICAgIGZsb2F0IHBhdHRlcm5XaWR0aCA9IGRhc2hlZExpbmVQYXR0ZXJuV2lkdGhGb3JT
dHJva2VXaWR0aChzdHJva2VXaWR0aCwgc3Ryb2tlU3R5bGUsIHN0cm9rZVRoaWNrbmVzcyk7Ci0g
ICAgICAgIC8vIENoZWNrIGlmIGNvcm5lciBkcmF3aW5nIHN1ZmZpY2llbnRseSBjb3ZlcnMgdGhl
IGxpbmUuCi0gICAgICAgIGlmIChzdHJva2VXaWR0aCA8PSBwYXR0ZXJuV2lkdGggKyAxKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGZsb2F0IHBhdHRlcm5PZmZzZXQgPSBkYXNoZWRM
aW5lUGF0dGVybk9mZnNldEZvclBhdHRlcm5BbmRTdHJva2VXaWR0aChwYXR0ZXJuV2lkdGgsIHN0
cm9rZVdpZHRoKTsKLSAgICAgICAgY29uc3QgZmxvYXQgZGFzaGVzWzJdID0geyBwYXR0ZXJuV2lk
dGgsIHBhdHRlcm5XaWR0aCB9OwotICAgICAgICBhdXRvIHN0cm9rZVN0eWxlUHJvcGVydGllcyA9
IHBsYXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZVByb3BlcnRpZXMoKTsKLSAgICAgICAgR3JhcGhp
Y3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVN0cm9rZVN0eWxlKCZzdHJva2VTdHls
ZVByb3BlcnRpZXMsIGRhc2hlcywgQVJSQVlTSVpFKGRhc2hlcyksICZkMmRTdHJva2VTdHlsZSk7
Ci0KLSAgICAgICAgcGxhdGZvcm1Db250ZXh0LnNldFBhdHRlcm5XaWR0aChwYXR0ZXJuV2lkdGgp
OwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0UGF0dGVybk9mZnNldChwYXR0ZXJuT2Zmc2V0
KTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0LnNldERhc2hlcyhEYXNoQXJyYXkoMiwgcGF0dGVy
bldpZHRoKSk7Ci0KLSAgICAgICAgZDJkU3Ryb2tlU3R5bGUgPSBwbGF0Zm9ybUNvbnRleHQuc3Ry
b2tlU3R5bGUoKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNlbnRlcmVkUG9pbnRzID0gY2VudGVyTGlu
ZUFuZEN1dE9mZkNvcm5lcnMoaXNWZXJ0aWNhbExpbmUsIGNvcm5lcldpZHRoLCBwb2ludDEsIHBv
aW50Mik7Ci0gICAgYXV0byBwMSA9IGNlbnRlcmVkUG9pbnRzWzBdOwotICAgIGF1dG8gcDIgPSBj
ZW50ZXJlZFBvaW50c1sxXTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElO
RV9fKTsKLQotICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9y
bUNvbnRleHQsIHAxLCBwMiwgZDJkU3Ryb2tlU3R5bGUsIHN0cm9rZUNvbG9yLCBzdHJva2VUaGlj
a25lc3NdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgcmVuZGVy
VGFyZ2V0LT5EcmF3TGluZShwMSwgcDIsIHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihz
dHJva2VDb2xvcikuZ2V0KCksIHN0cm9rZVRoaWNrbmVzcywgZDJkU3Ryb2tlU3R5bGUuZ2V0KCkp
OwotICAgIH0pOwotfQotCi12b2lkIGRyYXdMaW5lc0ZvclRleHQoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmLCBjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIGNvbnN0IERhc2hBcnJheSYsIGJvb2ws
IGJvb2wsIGNvbnN0IENvbG9yJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25z
dCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIGZpbGxFbGxpcHNlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBw
bGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGZpbGxD
b2xvciwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvciwg
ZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQotewotICAgIGF1dG8gZWxsaXBzZSA9IEQyRDE6OkVsbGlw
c2UocmVjdC5jZW50ZXIoKSwgMC41ICogcmVjdC53aWR0aCgpLCAwLjUgKiByZWN0LmhlaWdodCgp
KTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBkcmF3
V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1Db250ZXh0LCBlbGxpcHNl
LCBmaWxsQ29sb3IsIHN0cm9rZVN0eWxlLCBzdHJva2VDb2xvciwgc3Ryb2tlVGhpY2tuZXNzXShJ
RDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIGF1dG8gZmlsbEJydXNo
ID0gcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKGZpbGxDb2xvcik7Ci0gICAgICAgIHJl
bmRlclRhcmdldC0+RmlsbEVsbGlwc2UoJmVsbGlwc2UsIGZpbGxCcnVzaC5nZXQoKSk7Ci0gICAg
ICAgIGlmIChzdHJva2VTdHlsZSAhPSBTdHJva2VTdHlsZTo6Tm9TdHJva2UpIHsKLSAgICAgICAg
ICAgIGF1dG8gc3Ryb2tlQnJ1c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3Ioc3Ry
b2tlQ29sb3IpOwotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3RWxsaXBzZSgmZWxsaXBz
ZSwgc3Ryb2tlQnJ1c2guZ2V0KCksIHN0cm9rZVRoaWNrbmVzcywgcGxhdGZvcm1Db250ZXh0LnN0
cm9rZVN0eWxlKCkpOwotICAgICAgICB9Ci0gICAgfSk7Ci19Ci0KLXZvaWQgZHJhd0VsbGlwc2Uo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9y
LCBmbG9hdCBzdHJva2VUaGlja25lc3MpCi17Ci0gICAgaWYgKHN0cm9rZVN0eWxlID09IFN0cm9r
ZVN0eWxlOjpOb1N0cm9rZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBlbGxpcHNlID0g
RDJEMTo6RWxsaXBzZShyZWN0LmNlbnRlcigpLCAwLjUgKiByZWN0LndpZHRoKCksIDAuNSAqIHJl
Y3QuaGVpZ2h0KCkpOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18p
OwotICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9ybUNvbnRl
eHQsIGVsbGlwc2UsIHN0cm9rZUNvbG9yLCBzdHJva2VUaGlja25lc3NdKElEMkQxUmVuZGVyVGFy
Z2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgYXV0byBzdHJva2VCcnVzaCA9IHBsYXRmb3Jt
Q29udGV4dC5icnVzaFdpdGhDb2xvcihzdHJva2VDb2xvcik7Ci0gICAgICAgIHJlbmRlclRhcmdl
dC0+RHJhd0VsbGlwc2UoJmVsbGlwc2UsIHN0cm9rZUJydXNoLmdldCgpLCBzdHJva2VUaGlja25l
c3MsIHBsYXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZSgpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBk
cmF3Rm9jdXNSaW5nKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgUGF0aCYsIGZsb2F0
LCBjb25zdCBDb2xvciYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBkcmF3
Rm9jdXNSaW5nKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mLCBmbG9hdCwgY29uc3QgQ29sb3ImKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgZmx1c2goUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkKLXsK
LSAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLSAgICBEMkQxX1RB
RyBmaXJzdCwgc2Vjb25kOwotICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVy
VGFyZ2V0KCktPkZsdXNoKCZmaXJzdCwgJnNlY29uZCk7Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChT
VUNDRUVERUQoaHIpKTsKLX0KLQotdm9pZCBzYXZlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBw
bGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNhdmUoKTsKLQotICAgIGlm
IChhdXRvKiBncmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxhdGZvcm1Db250ZXh0LmdyYXBoaWNz
Q29udGV4dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZS0+c2F2ZSgp
OwotfQotCi12b2lkIHJlc3RvcmUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29u
dGV4dCkKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVzdG9yZSgpOwotCi0gICAgaWYgKGF1dG8q
IGdyYXBoaWNzQ29udGV4dFByaXZhdGUgPSBwbGF0Zm9ybUNvbnRleHQuZ3JhcGhpY3NDb250ZXh0
UHJpdmF0ZSgpKQotICAgICAgICBncmFwaGljc0NvbnRleHRQcml2YXRlLT5yZXN0b3JlKCk7Ci19
Ci0KLXZvaWQgdHJhbnNsYXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRl
eHQsIGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgQVNTRVJUKHBsYXRmb3JtQ29udGV4dC5yZW5k
ZXJUYXJnZXQoKSk7Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiBjdXJyZW50VHJhbnNmb3JtOwot
ICAgIHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+R2V0VHJhbnNmb3JtKCZjdXJyZW50
VHJhbnNmb3JtKTsKLQotICAgIGF1dG8gdHJhbnNsYXRpb24gPSBEMkQxOjpNYXRyaXgzeDJGOjpU
cmFuc2xhdGlvbih4LCB5KTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPlNl
dFRyYW5zZm9ybSh0cmFuc2xhdGlvbiAqIGN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAgaWYgKGF1
dG8qIGdyYXBoaWNzQ29udGV4dFByaXZhdGUgPSBwbGF0Zm9ybUNvbnRleHQuZ3JhcGhpY3NDb250
ZXh0UHJpdmF0ZSgpKQotICAgICAgICBncmFwaGljc0NvbnRleHRQcml2YXRlLT50cmFuc2xhdGUo
eCwgeSk7Ci19Ci0KLXZvaWQgcm90YXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQsIGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQotewotICAgIEFTU0VSVChwbGF0Zm9ybUNv
bnRleHQucmVuZGVyVGFyZ2V0KCkpOwotCi0gICAgRDJEMV9NQVRSSVhfM1gyX0YgY3VycmVudFRy
YW5zZm9ybTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkdldFRyYW5zZm9y
bSgmY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBhdXRvIHJvdGF0aW9uID0gRDJEMTo6TWF0cml4
M3gyRjo6Um90YXRpb24ocmFkMmRlZyhhbmdsZUluUmFkaWFucykpOwotICAgIHBsYXRmb3JtQ29u
dGV4dC5yZW5kZXJUYXJnZXQoKS0+U2V0VHJhbnNmb3JtKHJvdGF0aW9uICogY3VycmVudFRyYW5z
Zm9ybSk7Ci0KLSAgICBpZiAoYXV0byogZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZSA9IHBsYXRmb3Jt
Q29udGV4dC5ncmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4
dFByaXZhdGUtPnJvdGF0ZShhbmdsZUluUmFkaWFucyk7Ci19Ci0KLXZvaWQgc2NhbGUoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJiBzaXpl
KQotewotICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotCi0gICAg
RDJEMV9NQVRSSVhfM1gyX0YgY3VycmVudFRyYW5zZm9ybTsKLSAgICBwbGF0Zm9ybUNvbnRleHQu
cmVuZGVyVGFyZ2V0KCktPkdldFRyYW5zZm9ybSgmY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBh
dXRvIHNjYWxlID0gRDJEMTo6TWF0cml4M3gyRjo6U2NhbGUoc2l6ZSk7Ci0gICAgcGxhdGZvcm1D
b250ZXh0LnJlbmRlclRhcmdldCgpLT5TZXRUcmFuc2Zvcm0oc2NhbGUgKiBjdXJyZW50VHJhbnNm
b3JtKTsKLQotICAgIGlmIChhdXRvKiBncmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxhdGZvcm1D
b250ZXh0LmdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0
UHJpdmF0ZS0+c2NhbGUoc2l6ZSk7Ci19Ci0KLXZvaWQgY29uY2F0Q1RNKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWZmaW5l
VHJhbnNmb3JtKQotewotICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkp
OwotCi0gICAgRDJEMV9NQVRSSVhfM1gyX0YgY3VycmVudFRyYW5zZm9ybTsKLSAgICBwbGF0Zm9y
bUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkdldFRyYW5zZm9ybSgmY3VycmVudFRyYW5zZm9ybSk7
Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiB0cmFuc2Zvcm1Ub0NvbmNhdCA9IGFmZmluZVRyYW5z
Zm9ybTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPlNldFRyYW5zZm9ybSh0
cmFuc2Zvcm1Ub0NvbmNhdCAqIGN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAgaWYgKGF1dG8qIGdy
YXBoaWNzQ29udGV4dFByaXZhdGUgPSBwbGF0Zm9ybUNvbnRleHQuZ3JhcGhpY3NDb250ZXh0UHJp
dmF0ZSgpKQotICAgICAgICBncmFwaGljc0NvbnRleHRQcml2YXRlLT5jb25jYXRDVE0oYWZmaW5l
VHJhbnNmb3JtKTsKLX0KLQotdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ6OlRyYW5zcGFyZW5jeUxheWVyU3RhdGUgdHJhbnNwYXJlbmN5
TGF5ZXI7Ci0gICAgdHJhbnNwYXJlbmN5TGF5ZXIub3BhY2l0eSA9IG9wYWNpdHk7Ci0KLSAgICB0
cmFuc3BhcmVuY3lMYXllci5yZW5kZXJUYXJnZXQgPSBjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXQo
cGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5t
X3RyYW5zcGFyZW5jeUxheWVyU3RhY2suYXBwZW5kKFdURk1vdmUodHJhbnNwYXJlbmN5TGF5ZXIp
KTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5tX3RyYW5zcGFyZW5jeUxheWVyU3RhY2subGFzdCgp
LnJlbmRlclRhcmdldC0+QmVnaW5EcmF3KCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0Lm1fdHJhbnNw
YXJlbmN5TGF5ZXJTdGFjay5sYXN0KCkucmVuZGVyVGFyZ2V0LT5DbGVhcihEMkQxOjpDb2xvckYo
MCwgMCwgMCwgMCkpOwotfQotCi12b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgYXV0byBjdXJyZW50TGF5ZXIg
PSBwbGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLnRha2VMYXN0KCk7Ci0g
ICAgYXV0byByZW5kZXJUYXJnZXQgPSBjdXJyZW50TGF5ZXIucmVuZGVyVGFyZ2V0OwotICAgIGlm
ICghcmVuZGVyVGFyZ2V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBIUkVTVUxUIGhyID0gcmVu
ZGVyVGFyZ2V0LT5FbmREcmF3KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0KLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0K
LSAgICBpZiAoY3VycmVudExheWVyLmhhc1NoYWRvdykKLSAgICAgICAgZHJhd1dpdGhTaGFkb3dI
ZWxwZXIoY29udGV4dCwgcmVuZGVyVGFyZ2V0LmdldCgpLCBGbG9hdFJlY3QoKSwgY3VycmVudExh
eWVyLnNoYWRvd0NvbG9yLCBjdXJyZW50TGF5ZXIuc2hhZG93T2Zmc2V0LCBjdXJyZW50TGF5ZXIu
c2hhZG93Qmx1cik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYml0
bWFwOwotICAgICAgICBociA9IHJlbmRlclRhcmdldC0+R2V0Qml0bWFwKCZiaXRtYXApOwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgICAgICBDT01QdHI8SUQy
RDFCaXRtYXBCcnVzaD4gYml0bWFwQnJ1c2g7Ci0gICAgICAgIGF1dG8gYml0bWFwQnJ1c2hQcm9w
ZXJ0aWVzID0gRDJEMTo6Qml0bWFwQnJ1c2hQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIGF1dG8gYnJ1
c2hQcm9wZXJ0aWVzID0gRDJEMTo6QnJ1c2hQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIEhSRVNVTFQg
aHIgPSBjb250ZXh0LT5DcmVhdGVCaXRtYXBCcnVzaChiaXRtYXAuZ2V0KCksIGJpdG1hcEJydXNo
UHJvcGVydGllcywgYnJ1c2hQcm9wZXJ0aWVzLCAmYml0bWFwQnJ1c2gpOwotICAgICAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgICAgICBhdXRvIHNpemUgPSBiaXRtYXAt
PkdldFNpemUoKTsKLSAgICAgICAgYXV0byByZWN0SW5ESVAgPSBEMkQxOjpSZWN0RigwLCAwLCBz
aXplLndpZHRoLCBzaXplLmhlaWdodCk7Ci0gICAgICAgIGNvbnRleHQtPkZpbGxSZWN0YW5nbGUo
cmVjdEluRElQLCBiaXRtYXBCcnVzaC5nZXQoKSk7Ci0gICAgfQotfQotCi12b2lkIGNsaXAoUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotewotICAgIHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+UHVzaEF4aXNBbGln
bmVkQ2xpcChyZWN0LCBEMkQxX0FOVElBTElBU19NT0RFX1BFUl9QUklNSVRJVkUpOwotICAgIHBs
YXRmb3JtQ29udGV4dC5wdXNoQ2xpcChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6QXhpc0FsaWdu
ZWRDbGlwKTsKLQotICAgIGlmIChhdXRvKiBncmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxhdGZv
cm1Db250ZXh0LmdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250
ZXh0UHJpdmF0ZS0+Y2xpcChyZWN0KTsKLX0KLQotdm9pZCBjbGlwT3V0KFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAg
ICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRSZWN0KHJlY3QpOwotCi0gICAgY2xpcE91dChwbGF0
Zm9ybUNvbnRleHQsIHBhdGgpOwotfQotCi12b2lkIGNsaXBPdXQoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICAvLyBUbyBj
bGlwIE91dCB3ZSBuZWVkIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGluZmluaXRlCi0gICAgLy8g
Y2xpcHBpbmcgcmVjdCBhbmQgdGhlIHBhdGggd2UganVzdCBjcmVhdGVkLgotICAgIEQyRDFfU0la
RV9GIHJlbmRlcmVyU2l6ZSA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+R2V0U2l6
ZSgpOwotICAgIEZsb2F0UmVjdCBjbGlwQm91bmRzKDAsIDAsIHJlbmRlcmVyU2l6ZS53aWR0aCwg
cmVuZGVyZXJTaXplLmhlaWdodCk7Ci0KLSAgICBQYXRoIGJvdW5kaW5nUmVjdDsKLSAgICBib3Vu
ZGluZ1JlY3QuYWRkUmVjdChjbGlwQm91bmRzKTsKLSAgICBib3VuZGluZ1JlY3QuYXBwZW5kR2Vv
bWV0cnkocGF0aC5wbGF0Zm9ybVBhdGgoKSk7Ci0KLSAgICBDT01QdHI8SUQyRDFHZW9tZXRyeUdy
b3VwPiBwYXRoVG9DbGlwOwotICAgIGJvdW5kaW5nUmVjdC5jcmVhdGVHZW9tZXRyeVdpdGhGaWxs
TW9kZShXaW5kUnVsZTo6RXZlbk9kZCwgcGF0aFRvQ2xpcCk7Ci0gICAgY2xpcFBhdGgocGxhdGZv
cm1Db250ZXh0LCBwYXRoVG9DbGlwLmdldCgpKTsKLX0KLQotdm9pZCBjbGlwUGF0aChQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBQYXRoJiBwYXRoLCBXaW5k
UnVsZSBjbGlwUnVsZSkKLXsKLSAgICBpZiAocGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgRGly
ZWN0MkQ6OmNsaXAocGxhdGZvcm1Db250ZXh0LCBGbG9hdFJlY3QoKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBDT01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiBwYXRoVG9DbGlwOwot
ICAgIHBhdGguY3JlYXRlR2VvbWV0cnlXaXRoRmlsbE1vZGUoY2xpcFJ1bGUsIHBhdGhUb0NsaXAp
OwotCi0gICAgY2xpcFBhdGgocGxhdGZvcm1Db250ZXh0LCBwYXRoVG9DbGlwLmdldCgpKTsKLQot
ICAgIGlmIChhdXRvKiBncmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxhdGZvcm1Db250ZXh0Lmdy
YXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZS0+
Y2xpcChwYXRoKTsKLX0KLQotdm9pZCBjbGlwUGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYg
cGxhdGZvcm1Db250ZXh0LCBJRDJEMUdlb21ldHJ5KiBwYXRoKQotewotICAgIENPTVB0cjxJRDJE
MUxheWVyPiBjbGlwTGF5ZXI7Ci0gICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC5yZW5k
ZXJUYXJnZXQoKS0+Q3JlYXRlTGF5ZXIoJmNsaXBMYXllcik7Ci0gICAgaWYgKCFTVUNDRUVERUQo
aHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0
KCktPlB1c2hMYXllcihEMkQxOjpMYXllclBhcmFtZXRlcnMoRDJEMTo6SW5maW5pdGVSZWN0KCks
IHBhdGgpLCBjbGlwTGF5ZXIuZ2V0KCkpOwotICAgIHBsYXRmb3JtQ29udGV4dC5wdXNoUmVuZGVy
Q2xpcChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6TGF5ZXJDbGlwKTsKLSAgICBwbGF0Zm9ybUNv
bnRleHQuc2V0QWN0aXZlTGF5ZXIoV1RGTW92ZShjbGlwTGF5ZXIpKTsKLX0KLQotdm9pZCBjbGlw
VG9JbWFnZUJ1ZmZlcihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIElEMkQxUmVuZGVyVGFyZ2V0
KiwgY29uc3QgRmxvYXRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0KLXZv
aWQgY29weUJpdHMoY29uc3QgdWludDhfdCogc3JjUm93cywgdW5zaWduZWQgcm93Q291bnQsIHVu
c2lnbmVkIGNvbENvdW50LCB1bnNpZ25lZCBzcmNTdHJpZGUsIHVuc2lnbmVkIGRlc3RTdHJpZGUs
IHVpbnQ4X3QqIGRlc3RSb3dzKQotewotICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCByb3dD
b3VudDsgKyt5KSB7Ci0gICAgICAgIC8vIFNvdXJjZSBkYXRhIG1heSBiZSBwb3dlci1vZi10d28g
c2l6ZWQsIHNvIHdlIG5lZWQgdG8gb25seSBjb3B5IHRoZSBiaXRzIHRoYXQKLSAgICAgICAgLy8g
Y29ycmVzcG9uZCB0byB0aGUgcmVjdGFuZ2xlIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIuCi0gICAg
ICAgIGNvbnN0IHVpbnQzMl90KiBzcmNSb3cgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQz
Ml90Kj4oc3JjUm93cyArIHNyY1N0cmlkZSAqIHkpOwotICAgICAgICB1aW50MzJfdCogZGVzdFJv
dyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGRlc3RTdHJpZGUgKiB5
KTsKLSAgICAgICAgbWVtY3B5KGRlc3RSb3csIHNyY1JvdywgY29sQ291bnQpOwotICAgIH0KLX0K
LQotfSAvLyBuYW1lc3BhY2UgRGlyZWN0MkQKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuaAkocmV2aXNpb24g
Mjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJE
T3BlcmF0aW9ucy5oCShub25leGlzdGVudCkKQEAgLTEsMTcyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBCcmVudCBG
dWxnaGFtIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEx
IElnYWxpYSBTLkwuCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEludGVs
IENvcnBvcmF0aW9uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiRGFzaEFycmF5
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBl
cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5j
bHVkZSA8ZDJkMS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEFmZmluZVRyYW5z
Zm9ybTsKLWNsYXNzIENvbG9yOwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgRmxvYXRSb3VuZGVk
UmVjdDsKLWNsYXNzIEZsb2F0U2l6ZTsKLWNsYXNzIFBhdGg7Ci0KLXN0cnVjdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTsKLQotbmFtZXNwYWNlIERpcmVjdDJEIHsKLQotbmFtZXNwYWNlIFN0YXRlIHsK
LQotdm9pZCBzZXRTdHJva2VUaGlja25lc3MoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBmbG9h
dCk7Ci12b2lkIHNldFN0cm9rZVN0eWxlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgU3Ryb2tl
U3R5bGUpOwotCi12b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOwotdm9pZCBzZXRTaG91bGRBbnRp
YWxpYXMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBib29sKTsKLQotdm9pZCBzZXRDVE0oUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLUFmZmluZVRy
YW5zZm9ybSBnZXRDVE0oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKTsKLQotSW50UmVjdCBnZXRD
bGlwQm91bmRzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci1GbG9hdFJlY3Qgcm91bmRUb0Rl
dmljZVBpeGVscyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYpOwot
Ci1ib29sIGlzQWNjZWxlcmF0ZWRDb250ZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci0K
LX0gLy8gbmFtZXNwYWNlIFN0YXRlCi0KLXN0cnVjdCBGaWxsU291cmNlIHsKLSAgICBGaWxsU291
cmNlKCkgPSBkZWZhdWx0OwotICAgIGV4cGxpY2l0IEZpbGxTb3VyY2UoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKLQotICAgIGZsb2F0IGdsb2Jh
bEFscGhhIHsgMCB9OwotICAgIENPTVB0cjxJRDJEMUJydXNoPiBicnVzaDsKLSAgICBDb2xvciBj
b2xvcjsKLQotICAgIFdpbmRSdWxlIGZpbGxSdWxlIHsgV2luZFJ1bGU6Ok5vblplcm8gfTsKLX07
Ci0KLXN0cnVjdCBTdHJva2VTb3VyY2UgewotICAgIFN0cm9rZVNvdXJjZSgpID0gZGVmYXVsdDsK
LSAgICBleHBsaWNpdCBTdHJva2VTb3VyY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBj
b25zdCBHcmFwaGljc0NvbnRleHQmKTsKLQotICAgIGZsb2F0IGdsb2JhbEFscGhhIHsgMCB9Owot
ICAgIGZsb2F0IHRoaWNrbmVzcyB7IDAgfTsKLSAgICBDT01QdHI8SUQyRDFCcnVzaD4gYnJ1c2g7
Ci0gICAgQ29sb3IgY29sb3I7Ci19OwotCi1zdHJ1Y3QgU2hhZG93U3RhdGUgewotICAgIFNoYWRv
d1N0YXRlKCkgPSBkZWZhdWx0OwotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IFNoYWRvd1N0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Ci0KLSAgICBib29sIGlzVmlzaWJsZSgp
IGNvbnN0OwotICAgIGJvb2wgaXNSZXF1aXJlZChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpIGNv
bnN0OwotCi0gICAgRmxvYXRTaXplIG9mZnNldDsKLSAgICBmbG9hdCBibHVyIHsgMCB9OwotICAg
IENvbG9yIGNvbG9yOwotICAgIGJvb2wgaWdub3JlVHJhbnNmb3JtcyB7IGZhbHNlIH07Ci0KLSAg
ICBmbG9hdCBnbG9iYWxBbHBoYSB7IDEuMCB9OwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGdsb2Jh
bENvbXBvc2l0ZU9wZXJhdG9yIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIgfTsKLX07
Ci0KLXZvaWQgc2V0TGluZUNhcChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIExpbmVDYXApOwot
dm9pZCBzZXRMaW5lRGFzaChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IERhc2hBcnJh
eSYsIGZsb2F0KTsKLXZvaWQgc2V0TGluZUpvaW4oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBM
aW5lSm9pbik7Ci12b2lkIHNldE1pdGVyTGltaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBm
bG9hdCk7Ci0KLXZvaWQgZmlsbFJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGaWxsU291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQg
ZmlsbFJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBDb2xvciYsIGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIGZpbGxSZWN0V2l0aEdyYWRpZW50
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgSUQyRDFCcnVzaCop
Owotdm9pZCBmaWxsUm91bmRlZFJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBjb25zdCBTaGFkb3dTdGF0ZSYpOwotdm9p
ZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBGaWxsU291cmNlJiwg
Y29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQgZmlsbFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmLCBjb25zdCBQYXRoJiwgY29uc3QgRmlsbFNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7
Ci12b2lkIGZpbGxQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgUGF0aCYsIGNv
bnN0IENvbG9yJiwgY29uc3QgU2hhZG93U3RhdGUmKTsKLQotdm9pZCBzdHJva2VSZWN0KFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQsIGNvbnN0IFN0cm9r
ZVNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIHN0cm9rZVBhdGgoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmLCBjb25zdCBQYXRoJiwgY29uc3QgU3Ryb2tlU291cmNlJiwgY29uc3Qg
U2hhZG93U3RhdGUmKTsKLXZvaWQgY2xlYXJSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwg
Y29uc3QgRmxvYXRSZWN0Jik7Ci0KLXZvaWQgZHJhd0dseXBocyhQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYsIGNvbnN0IEZpbGxTb3VyY2UmLCBjb25zdCBTdHJva2VTb3VyY2UmLCBjb25zdCBTaGFk
b3dTdGF0ZSYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGb250JiwgZG91YmxlLCBjb25zdCBW
ZWN0b3I8dW5zaWduZWQgc2hvcnQ+JiBnbHlwaHMsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGhvcml6
b250YWxBZHZhbmNlcywgY29uc3QgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+JiwgZmxvYXQs
IFRleHREcmF3aW5nTW9kZUZsYWdzLCBmbG9hdCwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgQ29s
b3ImKTsKLQotdm9pZCBkcmF3UGxhdGZvcm1JbWFnZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYs
IElXSUNCaXRtYXAqLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmLCBmbG9hdCwg
Y29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQgZHJhd1BsYXRmb3JtSW1hZ2UoUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmLCBJRDJEMUJpdG1hcCosIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYsIGZsb2F0LCBjb25zdCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBkcmF3UGF0aChQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IFBhdGgmLCBjb25zdCBTdHJva2VTb3VyY2UmLCBjb25z
dCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBkcmF3UGF0dGVybihQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYsIENPTVB0cjxJRDJEMUJpdG1hcD4mJiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKTsKLQotdm9pZCBkcmF3V2l0aG91
dFNoYWRvdyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5k
ZXJUYXJnZXQqKT4mJiBkcmF3Q29tbWFuZHMpOwotdm9pZCBkcmF3V2l0aFNoYWRvdyhQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCYsIEZsb2F0UmVjdCBib3VuZGluZ1JlY3QsIGNvbnN0IFNoYWRvd1N0
YXRlJiwgRnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiYmIGRyYXdDb21tYW5kcyk7
Ci0KLXZvaWQgZHJhd1JlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCwgY29uc3QgQ29sb3ImLCBTdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImKTsKLXZv
aWQgZHJhd0xpbmUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgRmxvYXRQb2ludCYsIFN0cm9rZVN0eWxlLCBjb25zdCBDb2xvciYsIGZsb2F0LCBib29s
KTsKLXZvaWQgZHJhd0xpbmVzRm9yVGV4dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJv
b2wsIGNvbnN0IENvbG9yJik7Ci12b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSk7Ci12b2lkIGRyYXdFbGxpcHNlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3Qg
RmxvYXRSZWN0JiwgU3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiwgZmxvYXQpOwotdm9pZCBmaWxs
RWxsaXBzZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IENvbG9yJiwgU3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiwgZmxvYXQpOwotCi12b2lkIGRyYXdG
b2N1c1JpbmcoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBQYXRoJiwgZmxvYXQsIGNv
bnN0IENvbG9yJik7Ci12b2lkIGRyYXdGb2N1c1JpbmcoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQm
LCBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBjb25zdCBDb2xvciYpOwotCi12b2lk
IGZsdXNoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci12b2lkIHNhdmUoUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmKTsKLXZvaWQgcmVzdG9yZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwot
Ci12b2lkIHRyYW5zbGF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGZsb2F0LCBmbG9hdCk7
Ci12b2lkIHJvdGF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGZsb2F0KTsKLXZvaWQgc2Nh
bGUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFNpemUmKTsKLXZvaWQgY29u
Y2F0Q1RNKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7
Ci0KLXZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYs
IGZsb2F0KTsKLXZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmKTsKLQotdm9pZCBjbGlwKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRS
ZWN0Jik7Ci0KLXZvaWQgY2xpcE91dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZs
b2F0UmVjdCYpOwotdm9pZCBjbGlwT3V0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3Qg
UGF0aCYpOwotdm9pZCBjbGlwUGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IFBh
dGgmLCBXaW5kUnVsZSk7Ci12b2lkIGNsaXBQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwg
SUQyRDFHZW9tZXRyeSogcGF0aCk7Ci0KLXZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmLCBJRDJEMVJlbmRlclRhcmdldCosIGNvbnN0IEZsb2F0UmVjdCYpOwot
Ci19IC8vIG5hbWVzcGFjZSBEaXJlY3QyRAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAy
ODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRV
dGlsaXRpZXMuY3BwCShub25leGlzdGVudCkKQEAgLTEsNTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lP
TiBlbWJlZGRlZCBzeXN0ZW1zCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5o
IgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCi0jaW5jbHVkZSAi
SW50UmVjdC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlIDxkMmQxXzEuaD4KLSNp
bmNsdWRlIDxkM2QxMV8xLmg+Ci0jaW5jbHVkZSA8c2hsd2FwaS5oPgotI2luY2x1ZGUgPHdpbmNv
ZGVjLmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgRGlyZWN0MkQgewot
Ci1jb25zdGV4cHIgRFhHSV9GT1JNQVQgd2Via2l0VGV4dHVyZUZvcm1hdCA9IERYR0lfRk9STUFU
X0I4RzhSOEE4X1VOT1JNOwotY29uc3RleHByIEQyRDFfQUxQSEFfTU9ERSB3ZWJraXRBbHBoYU1v
ZGUgPSBEMkQxX0FMUEhBX01PREVfUFJFTVVMVElQTElFRDsKLQotSW50U2l6ZSBiaXRtYXBTaXpl
KElXSUNCaXRtYXBTb3VyY2UqIGJpdG1hcFNvdXJjZSkKLXsKLSAgICBVSU5UIHdpZHRoLCBoZWln
aHQ7Ci0gICAgSFJFU1VMVCBociA9IGJpdG1hcFNvdXJjZS0+R2V0U2l6ZSgmd2lkdGgsICZoZWln
aHQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAg
IHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwotfQotCi1GbG9hdFNpemUgYml0bWFwU2l6
ZShJRDJEMUJpdG1hcCogYml0bWFwU291cmNlKQotewotICAgIHJldHVybiBiaXRtYXBTb3VyY2Ut
PkdldFNpemUoKTsKLX0KLQotRmxvYXRTaXplIGJpdG1hcFJlc29sdXRpb24oSVdJQ0JpdG1hcFNv
dXJjZSogYml0bWFwU291cmNlKQotewotICAgIGNvbnN0ZXhwciBkb3VibGUgZHBpQmFzZSA9IDk2
OwotCi0gICAgZG91YmxlIGRwaVgsIGRwaVk7Ci0gICAgSFJFU1VMVCBociA9IGJpdG1hcFNvdXJj
ZS0+R2V0UmVzb2x1dGlvbigmZHBpWCwgJmRwaVkpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
LSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIEZsb2F0U2l6ZSByZXN1bHQoZHBpWCwgZHBpWSk7
Ci0gICAgcmVzdWx0LnNjYWxlKDEuMCAvIGRwaUJhc2UpOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLUZsb2F0U2l6ZSBiaXRtYXBSZXNvbHV0aW9uKElEMkQxQml0bWFwKiBiaXRtYXApCi17Ci0g
ICAgY29uc3RleHByIGRvdWJsZSBkcGlCYXNlID0gOTY7Ci0KLSAgICBmbG9hdCBkcGlYLCBkcGlZ
OwotICAgIGJpdG1hcC0+R2V0RHBpKCZkcGlYLCAmZHBpWSk7Ci0KLSAgICBGbG9hdFNpemUgcmVz
dWx0KGRwaVgsIGRwaVkpOwotICAgIHJlc3VsdC5zY2FsZSgxLjAgLyBkcGlCYXNlKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotCi19Ci0KLUZsb2F0U2l6ZSBiaXRtYXBSZXNvbHV0aW9uKElEMkQxUmVu
ZGVyVGFyZ2V0KiB0YXJnZXQpCi17Ci0gICAgY29uc3RleHByIGRvdWJsZSBkcGlCYXNlID0gOTY7
Ci0KLSAgICBmbG9hdCBkcGlYLCBkcGlZOwotICAgIHRhcmdldC0+R2V0RHBpKCZkcGlYLCAmZHBp
WSk7Ci0KLSAgICBGbG9hdFNpemUgcmVzdWx0KGRwaVgsIGRwaVkpOwotICAgIHJlc3VsdC5zY2Fs
ZSgxLjAgLyBkcGlCYXNlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotCi19Ci11bnNpZ25lZCBiaXRz
UGVyUGl4ZWwoR1VJRCBiaXRtYXBGb3JtYXQpCi17Ci0gICAgQ09NUHRyPElXSUNDb21wb25lbnRJ
bmZvPiBjb21wb25lbnRJbmZvOwotICAgIEhSRVNVTFQgaHIgPSBJbWFnZURlY29kZXJEaXJlY3Qy
RDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlQ29tcG9uZW50SW5mbyhiaXRtYXBGb3Jt
YXQsICZjb21wb25lbnRJbmZvKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJl
dHVybiA0OwotCi0gICAgQ09NUHRyPElXSUNQaXhlbEZvcm1hdEluZm8+IHBpeGVsRm9ybWF0Owot
ICAgIHBpeGVsRm9ybWF0LnF1ZXJ5KGNvbXBvbmVudEluZm8pOwotICAgIGlmICghcGl4ZWxGb3Jt
YXQpCi0gICAgICAgIHJldHVybiA0OwotCi0gICAgVUlOVCBicHAgPSAwOwotICAgIGhyID0gcGl4
ZWxGb3JtYXQtPkdldEJpdHNQZXJQaXhlbCgmYnBwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikp
Ci0gICAgICAgIHJldHVybiA0OwotCi0gICAgcmV0dXJuIGJwcDsKLX0KLQotQ09NUHRyPElXSUNC
aXRtYXA+IGNyZWF0ZURpcmVjdDJESW1hZ2VTdXJmYWNlV2l0aERhdGEodm9pZCogZGF0YSwgY29u
c3QgSW50U2l6ZSYgc2l6ZSwgdW5zaWduZWQgc3RyaWRlKQotewotICAgIENoZWNrZWRTaXplIG51
bUJ5dGVzID0gQ2hlY2tlZFVpbnQzMihzaXplLmhlaWdodCgpKSAqIHN0cmlkZTsKLSAgICBpZiAo
bnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IENPTVB0cjxJV0lDQml0bWFwPiBzdXJmYWNlOwotICAgIEhSRVNVTFQgaHIgPSBJbWFnZURlY29k
ZXJEaXJlY3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlQml0bWFwRnJvbU1lbW9y
eShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHdpY0JpdG1hcEZvcm1hdCgpLCBzdHJpZGUs
IHN0YXRpY19jYXN0PFVJTlQ+KG51bUJ5dGVzLnZhbHVlKCkpLCByZWludGVycHJldF9jYXN0PEJZ
VEUqPihkYXRhKSwgJnN1cmZhY2UpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gc3VyZmFjZTsKLX0KLQotQ09NUHRyPElXSUNC
aXRtYXA+IGNyZWF0ZVdpY0JpdG1hcChjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIENPTVB0
cjxJV0lDQml0bWFwPiBzdXJmYWNlOwotICAgIEhSRVNVTFQgaHIgPSBJbWFnZURlY29kZXJEaXJl
Y3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlQml0bWFwKHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSwgd2ljQml0bWFwRm9ybWF0KCksIFdJQ0JpdG1hcENhY2hlT25EZW1hbmQs
ICZzdXJmYWNlKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgcmV0dXJuIHN1cmZhY2U7Ci19Ci0KLUQyRDFfUElYRUxfRk9STUFUIHBpeGVs
Rm9ybWF0Rm9yU29mdHdhcmVNYW5pcHVsYXRpb24oKQotewotICAgIHJldHVybiBEMkQxOjpQaXhl
bEZvcm1hdChEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSwgRDJEMV9BTFBIQV9NT0RFX1BSRU1V
TFRJUExJRUQpOwotfQotCi1EMkQxX1BJWEVMX0ZPUk1BVCBwaXhlbEZvcm1hdCgpCi17Ci0gICAg
Ly8gU2luY2Ugd2UgbmVlZCB0byBpbnRlcmFjdCB3aXRoIEhEQyBmcm9tIHRpbWUtdG8tdGltZSwg
d2UgYXJlIGZvcmNlZCB0byB1c2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0gYW5kIEQyRDFf
QUxQSEFfTU9ERV9QUkVNVUxUSVBMSUVECi0gICAgcmV0dXJuIEQyRDE6OlBpeGVsRm9ybWF0KHdl
YmtpdFRleHR1cmVGb3JtYXQsIHdlYmtpdEFscGhhTW9kZSk7Ci19Ci0KLUdVSUQgd2ljQml0bWFw
Rm9ybWF0KCkKLXsKLSAgICAvLyBUaGlzIGlzIHRoZSBXSUMgZm9ybWF0IGNvbXBhdGlibGUgd2l0
aCBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STS4gSXQgaXMgYWxzbyBzdXBwb3NlZGx5IHRoZSBt
b3N0IGVmZmljaWVudCBpbi1tZW1vcnkKLSAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgV0lDIGlt
YWdlcy4KLSAgICByZXR1cm4gR1VJRF9XSUNQaXhlbEZvcm1hdDMyYnBwUEJHUkE7Ci19Ci0KLUQy
RDFfQklUTUFQX1BST1BFUlRJRVMgYml0bWFwUHJvcGVydGllcygpCi17Ci0gICAgcmV0dXJuIEQy
RDE6OkJpdG1hcFByb3BlcnRpZXMocGl4ZWxGb3JtYXQoKSk7Ci19Ci0KLUNPTVB0cjxJRDJEMUJp
dG1hcD4gY3JlYXRlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQsIGNvbnN0
IEludFNpemUmIHNpemUpCi17Ci0gICAgYXV0byBiaXRtYXBDcmVhdGVQcm9wZXJ0aWVzID0gYml0
bWFwUHJvcGVydGllcygpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7Ci0gICAg
RDJEMV9TSVpFX1UgYml0bWFwU2l6ZSA9IHNpemU7Ci0gICAgSFJFU1VMVCBociA9IHJlbmRlclRh
cmdldC0+Q3JlYXRlQml0bWFwKGJpdG1hcFNpemUsIGJpdG1hcENyZWF0ZVByb3BlcnRpZXMsICZi
aXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICByZXR1cm4gYml0bWFwOwotfQotCi1EMkQxX1JFTkRFUl9UQVJHRVRfUFJPUEVSVElF
UyByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCkKLXsKLSAgICByZXR1cm4gRDJEMTo6UmVuZGVyVGFy
Z2V0UHJvcGVydGllcyhEMkQxX1JFTkRFUl9UQVJHRVRfVFlQRV9ERUZBVUxULAotICAgICAgICBw
aXhlbEZvcm1hdCgpLCAwLCAwLCBEMkQxX1JFTkRFUl9UQVJHRVRfVVNBR0VfR0RJX0NPTVBBVElC
TEUsIEQyRDFfRkVBVFVSRV9MRVZFTF9ERUZBVUxUKTsKLX0KLQotQ09NUHRyPElEMkQxUmVuZGVy
VGFyZ2V0PiBjcmVhdGVSZW5kZXJUYXJnZXRGcm9tV0lDQml0bWFwKElXSUNCaXRtYXAqIGJpdG1h
cFNvdXJjZSkKLXsKLSAgICBhdXRvIHRhcmdldFByb3BlcnRpZXMgPSByZW5kZXJUYXJnZXRQcm9w
ZXJ0aWVzKCk7Ci0KLSAgICBDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IGJpdG1hcENvbnRleHQ7
Ci0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVh
dGVXaWNCaXRtYXBSZW5kZXJUYXJnZXQoYml0bWFwU291cmNlLCAmdGFyZ2V0UHJvcGVydGllcywg
JmJpdG1hcENvbnRleHQpOwotICAgIGlmICghYml0bWFwQ29udGV4dCB8fCAhU1VDQ0VFREVEKGhy
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gYml0bWFwQ29udGV4dDsK
LX0KLQotQ09NUHRyPElEMkQxRENSZW5kZXJUYXJnZXQ+IGNyZWF0ZUdESVJlbmRlclRhcmdldCgp
Ci17Ci0gICAgYXV0byB0YXJnZXRQcm9wZXJ0aWVzID0gcmVuZGVyVGFyZ2V0UHJvcGVydGllcygp
OwotCi0gICAgQ09NUHRyPElEMkQxRENSZW5kZXJUYXJnZXQ+IHJlbmRlclRhcmdldDsKLSAgICBI
UkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZURDUmVu
ZGVyVGFyZ2V0KCZ0YXJnZXRQcm9wZXJ0aWVzLCAmcmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAoIXJl
bmRlclRhcmdldCB8fCAhU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJU
YXJnZXQ+IGNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVy
VGFyZ2V0KQotewotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgICAgICByZW5kZXJUYXJnZXQg
PSBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKLQotICAgIENPTVB0cjxJ
RDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwQ29udGV4dDsKLSAgICBIUkVTVUxUIGhyID0g
cmVuZGVyVGFyZ2V0LT5DcmVhdGVDb21wYXRpYmxlUmVuZGVyVGFyZ2V0KG51bGxwdHIsIG51bGxw
dHIsIG51bGxwdHIsIEQyRDFfQ09NUEFUSUJMRV9SRU5ERVJfVEFSR0VUX09QVElPTlNfR0RJX0NP
TVBBVElCTEUsICZiaXRtYXBDb250ZXh0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGJpdG1hcENvbnRleHQ7Ci19Ci0KLUNP
TVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gY3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0T2ZT
aXplKGNvbnN0IEludFNpemUmIHNpemUsIElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQs
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQotewotICAgIFVOVVNFRF9QQVJBTShkZXZpY2VTY2Fs
ZUZhY3Rvcik7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgcmVuZGVyVGFyZ2V0
ID0gR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBDT01QdHI8
SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcENvbnRleHQ7Ci0gICAgYXV0byBkZXNpcmVk
U2l6ZSA9IEQyRDE6OlNpemVGKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgRDJE
MV9TSVpFX1UgcGl4ZWxTaXplID0gRDJEMTo6U2l6ZVUoY2xhbXBUbzx1bnNpZ25lZD4oZGV2aWNl
U2NhbGVGYWN0b3IgKiBzaXplLndpZHRoKCkpLCBjbGFtcFRvPHVuc2lnbmVkPihkZXZpY2VTY2Fs
ZUZhY3RvciAqIHNpemUuaGVpZ2h0KCkpKTsKLSAgICBIUkVTVUxUIGhyID0gcmVuZGVyVGFyZ2V0
LT5DcmVhdGVDb21wYXRpYmxlUmVuZGVyVGFyZ2V0KCZkZXNpcmVkU2l6ZSwgJnBpeGVsU2l6ZSwg
bnVsbHB0ciwgRDJEMV9DT01QQVRJQkxFX1JFTkRFUl9UQVJHRVRfT1BUSU9OU19HRElfQ09NUEFU
SUJMRSwgJmJpdG1hcENvbnRleHQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gYml0bWFwQ29udGV4dDsKLX0KLQotQ09NUHRy
PElEWEdJU3VyZmFjZTE+IGNyZWF0ZURYR0lTdXJmYWNlT2ZTaXplKGNvbnN0IEludFNpemUmIHNp
emUsIElEM0QxMURldmljZTEqIGRpcmVjdFhEZXZpY2UsIGJvb2wgY3Jvc3NQcm9jZXNzKQotewot
ICAgIGlmICghZGlyZWN0WERldmljZSkKLSAgICAgICAgZGlyZWN0WERldmljZSA9IERpcmVjdDJE
OjpkZWZhdWx0RGlyZWN0WERldmljZSgpOwotCi0gICAgLy8gQ3JlYXRlIHRoZSByZW5kZXIgdGFy
Z2V0IHRleHR1cmUKLSAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOwotICAgIFplcm9NZW1v
cnkoJmRlc2MsIHNpemVvZihkZXNjKSk7Ci0gICAgZGVzYy5XaWR0aCA9IHNpemUud2lkdGgoKTsK
LSAgICBkZXNjLkhlaWdodCA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzYy5NaXBMZXZlbHMgPSAx
OwotICAgIGRlc2MuQXJyYXlTaXplID0gMTsKLSAgICBkZXNjLkZvcm1hdCA9IHdlYmtpdFRleHR1
cmVGb3JtYXQ7Ci0gICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKLSAgICBkZXNjLlVzYWdl
ID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKLSAgICBkZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRf
UkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFOwotICAgIGRlc2MuQ1BV
QWNjZXNzRmxhZ3MgPSAwOwotICAgIGRlc2MuTWlzY0ZsYWdzID0gRDNEMTFfUkVTT1VSQ0VfTUlT
Q19HRElfQ09NUEFUSUJMRTsKLSAgICBpZiAoY3Jvc3NQcm9jZXNzKQotICAgICAgICBkZXNjLk1p
c2NGbGFncyB8PSBEM0QxMV9SRVNPVVJDRV9NSVNDX1NIQVJFRF9OVEhBTkRMRSB8IEQzRDExX1JF
U09VUkNFX01JU0NfU0hBUkVEX0tFWUVETVVURVg7Ci0KLSAgICBDT01QdHI8SUQzRDExVGV4dHVy
ZTJEPiB0ZXh0dXJlOwotICAgIEhSRVNVTFQgaHIgPSBkaXJlY3RYRGV2aWNlLT5DcmVhdGVUZXh0
dXJlMkQoJmRlc2MsIG51bGxwdHIsICZ0ZXh0dXJlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUND
RUVERUQoaHIpKTsKLQotICAgIENPTVB0cjxJRFhHSVN1cmZhY2UxPiBzdXJmYWNlOwotICAgIGhy
ID0gdGV4dHVyZS0+UXVlcnlJbnRlcmZhY2UoJnN1cmZhY2UpOwotICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotCi0gICAgcmV0dXJuIHN1cmZhY2U7Ci19Ci0KLUNPTVB0cjxJRDJE
MVJlbmRlclRhcmdldD4gY3JlYXRlU3VyZmFjZVJlbmRlclRhcmdldChJRFhHSVN1cmZhY2UxKiBz
dXJmYWNlKQotewotICAgIGF1dG8gcGl4ZWxGb3JtYXQgPSBEMkQxOjpQaXhlbEZvcm1hdCh3ZWJr
aXRUZXh0dXJlRm9ybWF0LCB3ZWJraXRBbHBoYU1vZGUpOwotCi0gICAgYXV0byBwcm9wZXJ0aWVz
ID0gRDJEMTo6UmVuZGVyVGFyZ2V0UHJvcGVydGllcyhEMkQxX1JFTkRFUl9UQVJHRVRfVFlQRV9E
RUZBVUxULAotICAgICAgICBwaXhlbEZvcm1hdCwgMCwgMCwgRDJEMV9SRU5ERVJfVEFSR0VUX1VT
QUdFX0dESV9DT01QQVRJQkxFLCBEMkQxX0ZFQVRVUkVfTEVWRUxfMTApOwotCi0gICAgQ09NUHRy
PElEMkQxUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IEdyYXBo
aWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEeGdpU3VyZmFjZVJlbmRlclRhcmdl
dChzdXJmYWNlLCBwcm9wZXJ0aWVzLCAmcmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAoIVNVQ0NFRURF
RChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHJlbmRlclRhcmdl
dDsKLX0KLQotdm9pZCBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKElEMkQxQml0bWFw
KiBmcm9tLCBJRDJEMUJpdG1hcCogdG8sIGNvbnN0IEludFNpemUmIHNvdXJjZU9mZnNldCwgY29u
c3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgZGVzdE9mZnNldCkKLXsKLSAgICBJbnRT
aXplIHNvdXJjZUJpdG1hcFNpemUgPSBmcm9tLT5HZXRQaXhlbFNpemUoKTsKLSAgICBpZiAoc291
cmNlQml0bWFwU2l6ZS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSB0
YXJnZXRCaXRtYXBTaXplID0gdG8tPkdldFBpeGVsU2l6ZSgpOwotICAgIGlmICh0YXJnZXRCaXRt
YXBTaXplLmlzWmVybygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IHNvdXJjZVJl
Y3Qoc291cmNlT2Zmc2V0LndpZHRoKCksIHNvdXJjZU9mZnNldC5oZWlnaHQoKSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBJbnRSZWN0IHRhcmdldFJlY3QoZGVzdE9mZnNldC53
aWR0aCgpLCBkZXN0T2Zmc2V0LmhlaWdodCgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
OwotCi0gICAgSW50UmVjdCBzb3VyY2VCaXRtYXBSZWN0KEludFBvaW50KCksIHNvdXJjZUJpdG1h
cFNpemUpOwotICAgIEludFJlY3QgdGFyZ2V0Qml0bWFwUmVjdChJbnRQb2ludCgpLCB0YXJnZXRC
aXRtYXBTaXplKTsKLQotICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KHNvdXJjZUJpdG1hcFJlY3Qp
OwotICAgIHRhcmdldFJlY3QuaW50ZXJzZWN0KHRhcmdldEJpdG1hcFJlY3QpOwotCi0gICAgRDJE
MV9SRUNUX1UgZDJkU291cmNlUmVjdCA9IEQyRDE6OlJlY3RVKHNvdXJjZVJlY3QueCgpLCBzb3Vy
Y2VSZWN0LnkoKSwgc291cmNlUmVjdC54KCkgKyB0YXJnZXRSZWN0LndpZHRoKCksIHNvdXJjZVJl
Y3QueSgpICsgdGFyZ2V0UmVjdC5oZWlnaHQoKSk7Ci0gICAgYXV0byBvZmZzZXQgPSBEMkQxOjpQ
b2ludDJVKGRlc3RPZmZzZXQud2lkdGgoKSwgZGVzdE9mZnNldC5oZWlnaHQoKSk7Ci0KLSAgICBI
UkVTVUxUIGhyID0gdG8tPkNvcHlGcm9tQml0bWFwKCZvZmZzZXQsIGZyb20sICZkMmRTb3VyY2VS
ZWN0KTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci19Ci0KLXZvaWQgd3JpdGVEaWFnbm9z
dGljUE5HVG9QYXRoKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQsIElEMkQxQml0bWFw
KiBiaXRtYXAsIExQQ1dTVFIgZmlsZU5hbWUpCi17Ci0gICAgQ09NUHRyPElXSUNCaXRtYXBFbmNv
ZGVyPiB3aWNCaXRtYXBFbmNvZGVyOwotICAgIEhSRVNVTFQgaHIgPSBJbWFnZURlY29kZXJEaXJl
Y3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlRW5jb2RlcihHVUlEX0NvbnRhaW5l
ckZvcm1hdFBuZywgbnVsbHB0ciwgJndpY0JpdG1hcEVuY29kZXIpOwotICAgIEFTU0VSVChTVUND
RUVERUQoaHIpKTsKLQotICAgIERXT1JEIG1vZGUgPSBTVEdNX0NSRUFURSB8IFNUR01fUkVBRFdS
SVRFIHwgU1RHTV9TSEFSRV9ERU5ZX1dSSVRFOwotICAgIENPTVB0cjxJU3RyZWFtPiBzdHJlYW07
Ci0gICAgaHIgPSA6OlNIQ3JlYXRlU3RyZWFtT25GaWxlRXgoZmlsZU5hbWUsIG1vZGUsIEZJTEVf
QVRUUklCVVRFX05PUk1BTCwgVFJVRSwgbnVsbHB0ciwgJnN0cmVhbSk7Ci0gICAgQVNTRVJUKFNV
Q0NFRURFRChocikpOwotCi0gICAgaHIgPSB3aWNCaXRtYXBFbmNvZGVyLT5Jbml0aWFsaXplKHN0
cmVhbS5nZXQoKSwgV0lDQml0bWFwRW5jb2Rlck5vQ2FjaGUpOwotICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpKTsKLQotICAgIENPTVB0cjxJV0lDQml0bWFwRnJhbWVFbmNvZGU+IHdpY0ZyYW1lRW5j
b2RlOwotICAgIGhyID0gd2ljQml0bWFwRW5jb2Rlci0+Q3JlYXRlTmV3RnJhbWUoJndpY0ZyYW1l
RW5jb2RlLCBudWxscHRyKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBociA9
IHdpY0ZyYW1lRW5jb2RlLT5Jbml0aWFsaXplKG51bGxwdHIpOwotICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpKTsKLQotICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IGQyZERldmljZUNvbnRl
eHQ7Ci0gICAgaHIgPSByZW5kZXJUYXJnZXQtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEMkQx
RGV2aWNlQ29udGV4dCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmZDJkRGV2aWNlQ29udGV4
dCkpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENPTVB0cjxJRDJEMURldmlj
ZT4gZDJkRGV2aWNlOwotICAgIGQyZERldmljZUNvbnRleHQtPkdldERldmljZSgmZDJkRGV2aWNl
KTsKLQotICAgIENPTVB0cjxJV0lDSW1hZ2VFbmNvZGVyPiBpbWFnZUVuY29kZXI7Ci0gICAgaHIg
PSBJbWFnZURlY29kZXJEaXJlY3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlSW1h
Z2VFbmNvZGVyKGQyZERldmljZS5nZXQoKSwgJmltYWdlRW5jb2Rlcik7Ci0gICAgQVNTRVJUKFNV
Q0NFRURFRChocikpOwotCi0gICAgaHIgPSBpbWFnZUVuY29kZXItPldyaXRlRnJhbWUoYml0bWFw
LCB3aWNGcmFtZUVuY29kZS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgaHIgPSB3aWNGcmFtZUVuY29kZS0+Q29tbWl0KCk7Ci0gICAgQVNTRVJUKFNV
Q0NFRURFRChocikpOwotCi0gICAgaHIgPSB3aWNCaXRtYXBFbmNvZGVyLT5Db21taXQoKTsKLSAg
ICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBociA9IHN0cmVhbS0+Q29tbWl0KFNUR0Nf
REVGQVVMVCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotfQotCi1zdGF0aWMgSUQzRDEx
RGV2aWNlQ29udGV4dDEqIGltbWVkaWF0ZUNvbnRleHQgPSBudWxscHRyOwotCi1JRDNEMTFEZXZp
Y2VDb250ZXh0MSogZHhnaUltbWVkaWF0ZUNvbnRleHQoKQotewotICAgIGlmICghaW1tZWRpYXRl
Q29udGV4dCkKLSAgICAgICAgZGVmYXVsdERpcmVjdFhEZXZpY2UoKTsKLQotICAgIFJFTEVBU0Vf
QVNTRVJUKGltbWVkaWF0ZUNvbnRleHQpOwotICAgIHJldHVybiBpbW1lZGlhdGVDb250ZXh0Owot
fQotCi1JRDNEMTFEZXZpY2UxKiBkZWZhdWx0RGlyZWN0WERldmljZSgpCi17Ci0gICAgc3RhdGlj
IElEM0QxMURldmljZTEqIGRlZmF1bHREZXZpY2UxID0gbnVsbHB0cjsKLQotICAgIGlmICghZGVm
YXVsdERldmljZTEpIHsKLSAgICAgICAgaW50IGRldmljZUZsYWdzID0gRDNEMTFfQ1JFQVRFX0RF
VklDRV9CR1JBX1NVUFBPUlQ7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBkZXZpY2VGbGFncyB8
PSBEM0QxMV9DUkVBVEVfREVWSUNFX0RFQlVHOwotI2VuZGlmCi0KLSAgICAgICAgSUQzRDExRGV2
aWNlKiBkZWZhdWx0RGV2aWNlID0gbnVsbHB0cjsKLSAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUwg
ZmVhdHVyZUxldmVsID0geyB9OwotICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0KiBpbW1lZGlh
dGVEZXZpY2VDb250ZXh0ID0gbnVsbHB0cjsKLSAgICAgICAgSFJFU1VMVCBociA9IEQzRDExQ3Jl
YXRlRGV2aWNlKG51bGxwdHIsIEQzRF9EUklWRVJfVFlQRV9IQVJEV0FSRSwgbnVsbHB0ciwgZGV2
aWNlRmxhZ3MsIG51bGxwdHIsIDAsIEQzRDExX1NES19WRVJTSU9OLCAmZGVmYXVsdERldmljZSwg
JmZlYXR1cmVMZXZlbCwgJmltbWVkaWF0ZURldmljZUNvbnRleHQpOwotICAgICAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgICAgICBociA9IGRlZmF1bHREZXZpY2UtPlF1
ZXJ5SW50ZXJmYWNlKCZkZWZhdWx0RGV2aWNlMSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNV
Q0NFRURFRChocikpOwotICAgICAgICBkZWZhdWx0RGV2aWNlMS0+QWRkUmVmKCk7Ci0KLSAgICAg
ICAgaHIgPSBpbW1lZGlhdGVEZXZpY2VDb250ZXh0LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJ
RDNEMTFEZXZpY2VDb250ZXh0MSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmaW1tZWRpYXRl
Q29udGV4dCkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAg
ICAgaW1tZWRpYXRlQ29udGV4dC0+QWRkUmVmKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlZmF1
bHREZXZpY2UxOwotfQotCi1ib29sIGNyZWF0ZURldmljZUFuZENvbnRleHQoQ09NUHRyPElEM0Qx
MURldmljZTE+JiBkM2REZXZpY2UsIENPTVB0cjxJRDNEMTFEZXZpY2VDb250ZXh0MT4mIGltbWVk
aWF0ZUNvbnRleHQpCi17Ci0gICAgaW50IGRldmljZUZsYWdzID0gRDNEMTFfQ1JFQVRFX0RFVklD
RV9CR1JBX1NVUFBPUlQ7Ci0jaWZuZGVmIE5ERUJVRwotICAgIGRldmljZUZsYWdzIHw9IEQzRDEx
X0NSRUFURV9ERVZJQ0VfREVCVUc7Ci0jZW5kaWYKLQotICAgIEQzRF9GRUFUVVJFX0xFVkVMIGZl
YXR1cmVMZXZlbCA9IHsgfTsKLSAgICBJRDNEMTFEZXZpY2UqIGRlZmF1bHREZXZpY2UgPSBudWxs
cHRyOwotICAgIElEM0QxMURldmljZUNvbnRleHQqIGltbWVkaWF0ZURldmljZUNvbnRleHQgPSBu
dWxscHRyOwotICAgIEhSRVNVTFQgaHIgPSA6OkQzRDExQ3JlYXRlRGV2aWNlKG51bGxwdHIsIEQz
RF9EUklWRVJfVFlQRV9IQVJEV0FSRSwgbnVsbHB0ciwgZGV2aWNlRmxhZ3MsIG51bGxwdHIsIDAs
IEQzRDExX1NES19WRVJTSU9OLCAmZGVmYXVsdERldmljZSwgJmZlYXR1cmVMZXZlbCwgJmltbWVk
aWF0ZURldmljZUNvbnRleHQpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwot
Ci0gICAgaHIgPSBkZWZhdWx0RGV2aWNlLT5RdWVyeUludGVyZmFjZSgmZDNkRGV2aWNlKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICBkZWZhdWx0RGV2aWNlLT5SZWxl
YXNlKCk7Ci0KLSAgICBociA9IGltbWVkaWF0ZURldmljZUNvbnRleHQtPlF1ZXJ5SW50ZXJmYWNl
KCZpbW1lZGlhdGVDb250ZXh0KTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsK
LSAgICBpbW1lZGlhdGVDb250ZXh0LT5SZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LUNPTVB0cjxJRFhHSURldmljZTE+IHRvRFhHSURldmljZShjb25zdCBDT01QdHI8SUQzRDExRGV2
aWNlMT4mIGQzZERldmljZSkKLXsKLSAgICBpZiAoIWQzZERldmljZSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SURYR0lEZXZpY2UxPiBkeGdpRGV2aWNlOwotICAgIEhS
RVNVTFQgaHIgPSBkM2REZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEWEdJRGV2aWNl
MSksICh2b2lkICoqKSZkeGdpRGV2aWNlKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGR4Z2lEZXZpY2U7Ci19Ci0KLUNPTVB0
cjxJRFhHSUZhY3RvcnkyPiBmYWN0b3J5Rm9yRFhHSURldmljZShjb25zdCBDT01QdHI8SURYR0lE
ZXZpY2UxPiYgZGV2aWNlKQotewotICAgIGlmICghZGV2aWNlKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIENPTVB0cjxJRFhHSUFkYXB0ZXI+IGFkYXB0b3I7Ci0gICAgSFJFU1VMVCBo
ciA9IGRldmljZS0+R2V0UGFyZW50KF9fdXVpZG9mKElEWEdJQWRhcHRlciksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPigmYWRhcHRvcikpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgQ09NUHRyPElEWEdJRmFjdG9yeT4gZmFjdG9yeTsKLSAgICBociA9IGFkYXB0
b3ItPkdldFBhcmVudChfX3V1aWRvZihJRFhHSUZhY3RvcnkpLCByZWludGVycHJldF9jYXN0PHZv
aWQqKj4oJmZhY3RvcnkpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQot
ICAgIENPTVB0cjxJRFhHSUZhY3RvcnkyPiBmYWN0b3J5MjsKLSAgICBociA9IGZhY3RvcnktPlF1
ZXJ5SW50ZXJmYWNlKCZmYWN0b3J5Mik7IAotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotICAgIAotICAgIHJldHVybiBmYWN0b3J5MjsKLX0KLQotQ09NUHRyPElEWEdJU3dhcENo
YWluPiBzd2FwQ2hhaW5PZlNpemVGb3JXaW5kb3dBbmREZXZpY2UoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgc2l6ZSwgSFdORCB3aW5kb3csIGNvbnN0IENPTVB0cjxJRDNEMTFEZXZpY2UxPiYgZGV2
aWNlKQotewotICAgIGlmICghZGV2aWNlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IERYR0lfU1dBUF9DSEFJTl9ERVNDMSBzd2FwQ2hhaW5EZXNjcmlwdGlvbjsKLSAgICA6Olplcm9N
ZW1vcnkoJnN3YXBDaGFpbkRlc2NyaXB0aW9uLCBzaXplb2Yoc3dhcENoYWluRGVzY3JpcHRpb24p
KTsKLSAgICBzd2FwQ2hhaW5EZXNjcmlwdGlvbi5XaWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBz
d2FwQ2hhaW5EZXNjcmlwdGlvbi5IZWlnaHQgPSBzaXplLmhlaWdodCgpOwotICAgIHN3YXBDaGFp
bkRlc2NyaXB0aW9uLkZvcm1hdCA9IHdlYmtpdFRleHR1cmVGb3JtYXQ7Ci0gICAgc3dhcENoYWlu
RGVzY3JpcHRpb24uU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgc3dhcENoYWluRGVzY3JpcHRp
b24uU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICBzd2FwQ2hhaW5EZXNjcmlwdGlvbi5CdWZm
ZXJVc2FnZSA9IERYR0lfVVNBR0VfU0hBREVSX0lOUFVUIHwgRFhHSV9VU0FHRV9SRU5ERVJfVEFS
R0VUX09VVFBVVDsKLSAgICBzd2FwQ2hhaW5EZXNjcmlwdGlvbi5CdWZmZXJDb3VudCA9IDE7Ci0g
ICAgc3dhcENoYWluRGVzY3JpcHRpb24uRmxhZ3MgPSBEWEdJX1NXQVBfQ0hBSU5fRkxBR19HRElf
Q09NUEFUSUJMRTsKLQotICAgIGF1dG8gZmFjdG9yeSA9IERpcmVjdDJEOjpmYWN0b3J5Rm9yRFhH
SURldmljZShEaXJlY3QyRDo6dG9EWEdJRGV2aWNlKGRldmljZSkpOwotCi0gICAgQ09NUHRyPElE
WEdJU3dhcENoYWluMT4gc3dhcENoYWluMTsKLSAgICBIUkVTVUxUIGhyID0gZmFjdG9yeS0+Q3Jl
YXRlU3dhcENoYWluRm9ySHduZChkZXZpY2UuZ2V0KCksIHdpbmRvdywgJnN3YXBDaGFpbkRlc2Ny
aXB0aW9uLCBudWxscHRyLCBudWxscHRyLCAmc3dhcENoYWluMSk7Ci0gICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJRFhHSVN3YXBD
aGFpbj4gc3dhcENoYWluKFF1ZXJ5LCBzd2FwQ2hhaW4xKTsKLSAgICByZXR1cm4gc3dhcENoYWlu
OwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXA+IGNyZWF0ZUJpdG1hcENvcHlGcm9tQ29udGV4dChJ
RDJEMUJpdG1hcFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0KQotewotICAgIENPTVB0cjxJRDJE
MUJpdG1hcD4gY3VycmVudENhbnZhczsKLSAgICBIUkVTVUxUIGhyID0gYml0bWFwVGFyZ2V0LT5H
ZXRCaXRtYXAoJmN1cnJlbnRDYW52YXMpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGJpdG1hcENyZWF0ZVByb3BlcnRpZXMgPSBi
aXRtYXBQcm9wZXJ0aWVzKCk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKLSAg
ICBEMkQxX1NJWkVfVSBiaXRtYXBTaXplID0gY3VycmVudENhbnZhcy0+R2V0UGl4ZWxTaXplKCk7
Ci0gICAgaHIgPSBiaXRtYXBUYXJnZXQtPkNyZWF0ZUJpdG1hcChiaXRtYXBTaXplLCBiaXRtYXBD
cmVhdGVQcm9wZXJ0aWVzLCAmYml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byB0YXJnZXRQb3MgPSBEMkQxOjpQb2ludDJV
KCk7Ci0gICAgRDJEMV9SRUNUX1UgZGF0YVJlY3QgPSBEMkQxOjpSZWN0VSgwLCAwLCBiaXRtYXBT
aXplLndpZHRoLCBiaXRtYXBTaXplLmhlaWdodCk7Ci0gICAgaHIgPSBiaXRtYXAtPkNvcHlGcm9t
Qml0bWFwKCZ0YXJnZXRQb3MsIGN1cnJlbnRDYW52YXMuZ2V0KCksICZkYXRhUmVjdCk7Ci0gICAg
aWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
Yml0bWFwOwotfQotCi19IC8vIG5hbWVzcGFjZSBEaXJlY3QyRAotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuaAko
cmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RpcmVjdDJEVXRpbGl0aWVzLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMDUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAyMDEx
IFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1FeHBvcnRNYWNyb3MuaCIKLQotaW50ZXJmYWNlIElEMkQxQml0bWFwOwotaW50ZXJmYWNl
IElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNlIElEMkQxRENSZW5kZXJUYXJnZXQ7
Ci1pbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQzRDExRGV2aWNlMTsK
LWludGVyZmFjZSBJRDNEMTFEZXZpY2VDb250ZXh0MTsKLWludGVyZmFjZSBJRDNEMTFSZW5kZXJU
YXJnZXRWaWV3OwotaW50ZXJmYWNlIElEWEdJRGV2aWNlMTsKLWludGVyZmFjZSBJRFhHSUZhY3Rv
cnkyOwotaW50ZXJmYWNlIElEWEdJU3dhcENoYWluOwotaW50ZXJmYWNlIElEWEdJU3VyZmFjZTE7
Ci1pbnRlcmZhY2UgSVdJQ0JpdG1hcFNvdXJjZTsKLWludGVyZmFjZSBJV0lDQml0bWFwOwotCi1z
dHJ1Y3QgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzsKLXN0cnVjdCBEMkQxX1BJWEVMX0ZPUk1BVDsK
LXN0cnVjdCBEMkQxX1JFTkRFUl9UQVJHRVRfUFJPUEVSVElFUzsKLXN0cnVjdCBEM0QxMV9WSUVX
UE9SVDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3Mg
RmxvYXRTaXplOwotY2xhc3MgSW50UmVjdDsKLWNsYXNzIEludFNpemU7Ci0KLW5hbWVzcGFjZSBE
aXJlY3QyRCB7Ci0KLUdVSUQgd2ljQml0bWFwRm9ybWF0KCk7Ci1EMkQxX1BJWEVMX0ZPUk1BVCBw
aXhlbEZvcm1hdCgpOyAvLyBCR1JBCi1EMkQxX1BJWEVMX0ZPUk1BVCBwaXhlbEZvcm1hdEZvclNv
ZnR3YXJlTWFuaXB1bGF0aW9uKCk7IC8vIFJHQkEKLUQyRDFfQklUTUFQX1BST1BFUlRJRVMgYml0
bWFwUHJvcGVydGllcygpOwotRDJEMV9SRU5ERVJfVEFSR0VUX1BST1BFUlRJRVMgcmVuZGVyVGFy
Z2V0UHJvcGVydGllcygpOwotCi12b2lkIGluUGxhY2VTd2l6emxlKHVpbnQ4X3QqIGJ5dGVEYXRh
LCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgYXBwbHlQcmVtdWx0aXBsaWNhdGlvbiA9IGZhbHNlKTsK
LQotSW50U2l6ZSBiaXRtYXBTaXplKElXSUNCaXRtYXBTb3VyY2UqKTsKLUZsb2F0U2l6ZSBiaXRt
YXBTaXplKElEMkQxQml0bWFwKik7Ci1GbG9hdFNpemUgYml0bWFwUmVzb2x1dGlvbihJV0lDQml0
bWFwU291cmNlKik7Ci1GbG9hdFNpemUgYml0bWFwUmVzb2x1dGlvbihJRDJEMUJpdG1hcCopOwot
RmxvYXRTaXplIGJpdG1hcFJlc29sdXRpb24oSUQyRDFSZW5kZXJUYXJnZXQqKTsKLXVuc2lnbmVk
IGJpdHNQZXJQaXhlbChHVUlEKTsKLUNPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlQml0bWFwKElE
MkQxUmVuZGVyVGFyZ2V0KiwgY29uc3QgSW50U2l6ZSYpOwotQ09NUHRyPElXSUNCaXRtYXA+IGNy
ZWF0ZVdpY0JpdG1hcChjb25zdCBJbnRTaXplJik7Ci1DT01QdHI8SVdJQ0JpdG1hcD4gY3JlYXRl
RGlyZWN0MkRJbWFnZVN1cmZhY2VXaXRoRGF0YSh2b2lkKiBkYXRhLCBjb25zdCBJbnRTaXplJiwg
dW5zaWduZWQgc3RyaWRlKTsKLUNPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gY3JlYXRlUmVuZGVy
VGFyZ2V0RnJvbVdJQ0JpdG1hcChJV0lDQml0bWFwKik7Ci1DT01QdHI8SUQyRDFCaXRtYXBSZW5k
ZXJUYXJnZXQ+IGNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShjb25zdCBJbnRTaXplJiwg
SUQyRDFSZW5kZXJUYXJnZXQqID0gbnVsbHB0ciwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSAx
LjApOwotQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBjcmVhdGVCaXRtYXBSZW5kZXJU
YXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQqID0gbnVsbHB0cik7Ci1DT01QdHI8SUQyRDFEQ1JlbmRl
clRhcmdldD4gY3JlYXRlR0RJUmVuZGVyVGFyZ2V0KCk7Ci1DT01QdHI8SURYR0lTdXJmYWNlMT4g
Y3JlYXRlRFhHSVN1cmZhY2VPZlNpemUoY29uc3QgSW50U2l6ZSYsIElEM0QxMURldmljZTEqLCBi
b29sIGNyb3NzUHJvY2Vzcyk7Ci1DT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IGNyZWF0ZVN1cmZh
Y2VSZW5kZXJUYXJnZXQoSURYR0lTdXJmYWNlMSopOwotQ09NUHRyPElEMkQxQml0bWFwPiBjcmVh
dGVCaXRtYXBDb3B5RnJvbUNvbnRleHQoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqKTsKLQotdm9p
ZCBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKElEMkQxQml0bWFwKiBmcm9tLCBJRDJE
MUJpdG1hcCogdG8sIGNvbnN0IEludFNpemUmIHNvdXJjZU9mZnNldCwgY29uc3QgSW50UmVjdCYs
IGNvbnN0IEludFNpemUmIGRlc3RPZmZzZXQgPSBJbnRTaXplKCkpOwotCi1XRUJDT1JFX0VYUE9S
VCBJRDNEMTFEZXZpY2VDb250ZXh0MSogZHhnaUltbWVkaWF0ZUNvbnRleHQoKTsKLVdFQkNPUkVf
RVhQT1JUIElEM0QxMURldmljZTEqIGRlZmF1bHREaXJlY3RYRGV2aWNlKCk7Ci1XRUJDT1JFX0VY
UE9SVCBib29sIGNyZWF0ZURldmljZUFuZENvbnRleHQoQ09NUHRyPElEM0QxMURldmljZTE+Jiwg
Q09NUHRyPElEM0QxMURldmljZUNvbnRleHQxPiYpOwotV0VCQ09SRV9FWFBPUlQgQ09NUHRyPElE
WEdJRGV2aWNlMT4gdG9EWEdJRGV2aWNlKGNvbnN0IENPTVB0cjxJRDNEMTFEZXZpY2UxPiYpOwot
V0VCQ09SRV9FWFBPUlQgQ09NUHRyPElEWEdJRmFjdG9yeTI+IGZhY3RvcnlGb3JEWEdJRGV2aWNl
KGNvbnN0IENPTVB0cjxJRFhHSURldmljZTE+Jik7Ci1XRUJDT1JFX0VYUE9SVCBDT01QdHI8SURY
R0lTd2FwQ2hhaW4+IHN3YXBDaGFpbk9mU2l6ZUZvcldpbmRvd0FuZERldmljZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiwgSFdORCwgY29uc3QgQ09NUHRyPElEM0QxMURldmljZTE+Jik7Ci0KLXZv
aWQgd3JpdGVEaWFnbm9zdGljUE5HVG9QYXRoKElEMkQxUmVuZGVyVGFyZ2V0KiwgSUQyRDFCaXRt
YXAqLCBMUENXU1RSIGZpbGVOYW1lKTsKLQotfSAvLyBuYW1lc3BhY2UgRGlyZWN0MkQKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGly
ZWN0V3JpdGVVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuY3BwCShub25leGlz
dGVudCkKQEAgLTEsMjQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRpcmVjdFdyaXRl
VXRpbGl0aWVzLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJDT01QdHIuaCIK
LSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgotCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIERpcmVjdFdyaXRlIHsKLQotSURXcml0ZUZh
Y3Rvcnk1KiBmYWN0b3J5KCkKLXsKLSAgICBzdGF0aWMgSURXcml0ZUZhY3Rvcnk1KiBkaXJlY3RX
cml0ZUZhY3RvcnkgPSBudWxscHRyOwotICAgIGlmICghZGlyZWN0V3JpdGVGYWN0b3J5KSB7Ci0g
ICAgICAgIEhSRVNVTFQgaHIgPSBEV3JpdGVDcmVhdGVGYWN0b3J5KERXUklURV9GQUNUT1JZX1RZ
UEVfU0hBUkVELCBfX3V1aWRvZihkaXJlY3RXcml0ZUZhY3RvcnkpLCByZWludGVycHJldF9jYXN0
PElVbmtub3duKio+KCZkaXJlY3RXcml0ZUZhY3RvcnkpKTsKLSAgICAgICAgZGlyZWN0V3JpdGVG
YWN0b3J5LT5BZGRSZWYoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGRpcmVjdFdyaXRlRmFjdG9yeTsKLX0KLQotSURXcml0ZUdk
aUludGVyb3AqIGdkaUludGVyb3AoKQotewotICAgIHN0YXRpYyBJRFdyaXRlR2RpSW50ZXJvcCog
ZGlyZWN0V3JpdGVHZGlJbnRlcm9wID0gbnVsbHB0cjsKLSAgICBpZiAoIWRpcmVjdFdyaXRlR2Rp
SW50ZXJvcCkgewotICAgICAgICBIUkVTVUxUIGhyID0gZmFjdG9yeSgpLT5HZXRHZGlJbnRlcm9w
KCZkaXJlY3RXcml0ZUdkaUludGVyb3ApOwotICAgICAgICBkaXJlY3RXcml0ZUdkaUludGVyb3At
PkFkZFJlZigpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZGlyZWN0V3JpdGVHZGlJbnRlcm9wOwotfQotCi1zdGF0aWMgSURXcml0
ZUluTWVtb3J5Rm9udEZpbGVMb2FkZXIqIG1lbW9yeUZvbnRMb2FkZXIoKQotewotICAgIHN0YXRp
YyBJRFdyaXRlSW5NZW1vcnlGb250RmlsZUxvYWRlciogbWVtb3J5Rm9udExvYWRlciA9IG51bGxw
dHI7Ci0gICAgaWYgKCFtZW1vcnlGb250TG9hZGVyKSB7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBm
YWN0b3J5KCktPkNyZWF0ZUluTWVtb3J5Rm9udEZpbGVMb2FkZXIoJm1lbW9yeUZvbnRMb2FkZXIp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgbWVtb3J5
Rm9udExvYWRlci0+QWRkUmVmKCk7Ci0KLSAgICAgICAgaHIgPSBmYWN0b3J5KCktPlJlZ2lzdGVy
Rm9udEZpbGVMb2FkZXIobWVtb3J5Rm9udExvYWRlcik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotICAgIH0KLQotICAgIHJldHVybiBtZW1vcnlGb250TG9hZGVyOwot
fQotCi1zdGF0aWMgSURXcml0ZUZvbnRTZXRCdWlsZGVyMSogZm9udFNldEJ1aWxkZXIoKQotewot
ICAgIHN0YXRpYyBJRFdyaXRlRm9udFNldEJ1aWxkZXIxKiBmb250U2V0QnVpbGRlciA9IG51bGxw
dHI7Ci0gICAgaWYgKCFmb250U2V0QnVpbGRlcikgewotICAgICAgICBIUkVTVUxUIGhyID0gZmFj
dG9yeSgpLT5DcmVhdGVGb250U2V0QnVpbGRlcigmZm9udFNldEJ1aWxkZXIpOwotICAgICAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgZm9udFNldEJ1aWxkZXItPkFk
ZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBmb250U2V0QnVpbGRlcjsKLX0KLQotc3RhdGlj
IENPTVB0cjxJRFdyaXRlRm9udFNldD4gZm9udFNldDsKLXN0YXRpYyBDT01QdHI8SURXcml0ZUZv
bnRDb2xsZWN0aW9uMT4gZm9udENvbGxlY3Rpb247Ci1zdGF0aWMgVUlOVDMyIGZvbnRDb3VudCA9
IDA7Ci0KLUlEV3JpdGVGb250Q29sbGVjdGlvbjEqIHdlYlByb2Nlc3NGb250Q29sbGVjdGlvbigp
Ci17Ci0gICAgSFJFU1VMVCBociA9IFNfT0s7Ci0KLSAgICBpZiAoIWZvbnRTZXQpIHsKLSAgICAg
ICAgaHIgPSBmb250U2V0QnVpbGRlcigpLT5DcmVhdGVGb250U2V0KCZmb250U2V0KTsKLSAgICAg
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAgICAgZm9udENvbGxlY3Rpb24gPSBudWxscHRyOwotICAgICAgICBociA9IGZhY3RvcnkoKS0+
Q3JlYXRlRm9udENvbGxlY3Rpb25Gcm9tRm9udFNldChmb250U2V0LmdldCgpLCAmZm9udENvbGxl
Y3Rpb24pOwotICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgICAgICBBU1NFUlQoZm9udENvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHlD
b3VudCgpID09IGZvbnRDb3VudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZvbnRDb2xsZWN0aW9u
LmdldCgpOwotfQotCi1IUkVTVUxUIGFkZEZvbnRGcm9tRGF0YVRvUHJvY2Vzc0NvbGxlY3Rpb24o
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBmb250RGF0YSkKLXsKLSAgICBDT01QdHI8SURXcml0ZUZv
bnRGaWxlPiBmb250RmlsZTsKLSAgICBIUkVTVUxUIGhyID0gbWVtb3J5Rm9udExvYWRlcigpLT5D
cmVhdGVJbk1lbW9yeUZvbnRGaWxlUmVmZXJlbmNlKGZhY3RvcnkoKSwgZm9udERhdGEuZGF0YSgp
LCBmb250RGF0YS5zaXplKCksIG51bGxwdHIsICZmb250RmlsZSk7Ci0gICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICBociA9IGZvbnRTZXRCdWlsZGVyKCkt
PkFkZEZvbnRGaWxlKGZvbnRGaWxlLmdldCgpKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0g
ICAgICAgIHJldHVybiBocjsKLQotICAgIGZvbnRTZXQgPSBudWxscHRyOwotICAgICsrZm9udENv
dW50OwotCi0gICAgcmV0dXJuIGhyOwotfQotCi1WZWN0b3I8d2NoYXJfdD4gZmFtaWx5TmFtZUZv
ckxvY2FsZShJRFdyaXRlRm9udEZhbWlseSogZm9udEZhbWlseSwgY29uc3QgVmVjdG9yPHdjaGFy
X3Q+JiBsb2NhbGVOYW1lKQotewotICAgIENPTVB0cjxJRFdyaXRlTG9jYWxpemVkU3RyaW5ncz4g
ZmFtaWx5TmFtZXM7Ci0gICAgSFJFU1VMVCBociA9IGZvbnRGYW1pbHktPkdldEZhbWlseU5hbWVz
KCZmYW1pbHlOYW1lcyk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiB7IH07
Ci0KLSAgICBCT09MIGV4aXN0cyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxvY2FsZUluZGV4ID0g
MDsKLSAgICBpZiAoIWxvY2FsZU5hbWUuaXNFbXB0eSgpKQotICAgICAgICBociA9IGZhbWlseU5h
bWVzLT5GaW5kTG9jYWxlTmFtZShsb2NhbGVOYW1lLmRhdGEoKSwgJmxvY2FsZUluZGV4LCAmZXhp
c3RzKTsKLQotICAgIGlmIChTVUNDRUVERUQoaHIpICYmICFleGlzdHMpCi0gICAgICAgIGhyID0g
ZmFtaWx5TmFtZXMtPkZpbmRMb2NhbGVOYW1lKEwiZW4tdXMiLCAmbG9jYWxlSW5kZXgsICZleGlz
dHMpOwotCi0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICB1
bnNpZ25lZCBmYW1pbHlOYW1lTGVuZ3RoID0gMDsKLSAgICBociA9IGZhbWlseU5hbWVzLT5HZXRT
dHJpbmdMZW5ndGgobG9jYWxlSW5kZXgsICZmYW1pbHlOYW1lTGVuZ3RoKTsKLSAgICBpZiAoIVNV
Q0NFRURFRChocikpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBWZWN0b3I8d2NoYXJfdD4g
ZmFtaWx5TmFtZShmYW1pbHlOYW1lTGVuZ3RoICsgMSk7Ci0gICAgaHIgPSBmYW1pbHlOYW1lcy0+
R2V0U3RyaW5nKGxvY2FsZUluZGV4LCBmYW1pbHlOYW1lLmRhdGEoKSwgZmFtaWx5TmFtZS5zaXpl
KCkpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAg
IHJldHVybiBmYW1pbHlOYW1lOwotfQotCi1DT01QdHI8SURXcml0ZUZvbnRGYW1pbHk+IGZvbnRG
YW1pbHlGb3JDb2xsZWN0aW9uKElEV3JpdGVGb250Q29sbGVjdGlvbiogZm9udENvbGxlY3Rpb24s
IGNvbnN0IFZlY3Rvcjx3Y2hhcl90PiYgbG9jYWxlTmFtZSwgY29uc3QgTE9HRk9OVCYgbG9nRm9u
dCkKLXsKLSAgICBDT01QdHI8SURXcml0ZUZvbnRGYW1pbHk+IGZvbnRGYW1pbHk7Ci0KLSAgICB1
bnNpZ25lZCBmb250RmFtaWx5Q291bnQgPSBmb250Q29sbGVjdGlvbi0+R2V0Rm9udEZhbWlseUNv
dW50KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBmb250SW5kZXggPSAwOyBmb250SW5kZXggPCBmb250
RmFtaWx5Q291bnQ7ICsrZm9udEluZGV4KSB7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBmb250Q29s
bGVjdGlvbi0+R2V0Rm9udEZhbWlseShmb250SW5kZXgsICZmb250RmFtaWx5KTsKLSAgICAgICAg
aWYgKEZBSUxFRChocikpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBh
dXRvIGZhbWlseU5hbWUgPSBmYW1pbHlOYW1lRm9yTG9jYWxlKGZvbnRGYW1pbHkuZ2V0KCksIGxv
Y2FsZU5hbWUpOwotCi0gICAgICAgIGlmICghd2NzY21wKGxvZ0ZvbnQubGZGYWNlTmFtZSwgZmFt
aWx5TmFtZS5kYXRhKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZvbnRGYW1pbHk7Ci0KLSAgICAg
ICAgZm9udEZhbWlseSA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLUNPTVB0cjxJRFdyaXRlRm9udD4gY3JlYXRlV2l0aFBsYXRmb3JtRm9udChjb25zdCBMT0dG
T05UJiBsb2dGb250KQotewotICAgIENPTVB0cjxJRFdyaXRlRm9udENvbGxlY3Rpb24+IHN5c3Rl
bUZvbnRDb2xsZWN0aW9uOwotICAgIEhSRVNVTFQgaHIgPSBmYWN0b3J5KCktPkdldFN5c3RlbUZv
bnRDb2xsZWN0aW9uKCZzeXN0ZW1Gb250Q29sbGVjdGlvbik7Ci0gICAgaWYgKEZBSUxFRChocikp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVmVjdG9yPHdjaGFyX3Q+IGxvY2FsZU5h
bWUoTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7Ci0gICAgaW50IGxvY2FsZUxlbmd0aCA9IEdldFVz
ZXJEZWZhdWx0TG9jYWxlTmFtZShsb2NhbGVOYW1lLmRhdGEoKSwgTE9DQUxFX05BTUVfTUFYX0xF
TkdUSCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobG9jYWxlTGVuZ3RoIDw9IExPQ0FMRV9OQU1FX01B
WF9MRU5HVEgpOwotCi0gICAgQ09NUHRyPElEV3JpdGVGb250Q29sbGVjdGlvbjE+IGNvbGxlY3Rp
b24oUXVlcnksIHN5c3RlbUZvbnRDb2xsZWN0aW9uKTsKLQotICAgIENPTVB0cjxJRFdyaXRlRm9u
dEZhbWlseT4gZm9udEZhbWlseSA9IGZvbnRGYW1pbHlGb3JDb2xsZWN0aW9uKGNvbGxlY3Rpb24u
Z2V0KCksIGxvY2FsZU5hbWUsIGxvZ0ZvbnQpOwotICAgIGlmICghZm9udEZhbWlseSkgewotICAg
ICAgICBjb2xsZWN0aW9uID0gd2ViUHJvY2Vzc0ZvbnRDb2xsZWN0aW9uKCk7Ci0gICAgICAgIGZv
bnRGYW1pbHkgPSBmb250RmFtaWx5Rm9yQ29sbGVjdGlvbihjb2xsZWN0aW9uLmdldCgpLCBsb2Nh
bGVOYW1lLCBsb2dGb250KTsKLSAgICB9Ci0KLSAgICBpZiAoIWZvbnRGYW1pbHkpIHsKLSAgICAg
ICAgLy8gSnVzdCByZXR1cm4gdGhlIGZpcnN0IHN5c3RlbSBmb250LgotICAgICAgICBjb2xsZWN0
aW9uID0gQ09NUHRyPElEV3JpdGVGb250Q29sbGVjdGlvbjE+KFF1ZXJ5LCBzeXN0ZW1Gb250Q29s
bGVjdGlvbik7Ci0gICAgICAgIGhyID0gY29sbGVjdGlvbi0+R2V0Rm9udEZhbWlseSgwLCAmZm9u
dEZhbWlseSk7Ci0gICAgICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIGF1dG8gZmFtaWx5TmFtZSA9IGZhbWls
eU5hbWVGb3JMb2NhbGUoZm9udEZhbWlseS5nZXQoKSwgbG9jYWxlTmFtZSk7Ci0gICAgICAgIFVO
VVNFRF9WQVJJQUJMRShmYW1pbHlOYW1lKTsKLSNlbmRpZgotICAgIH0KLQotICAgIERXUklURV9G
T05UX1dFSUdIVCB3ZWlnaHQgPSBzdGF0aWNfY2FzdDxEV1JJVEVfRk9OVF9XRUlHSFQ+KGxvZ0Zv
bnQubGZXZWlnaHQpOwotICAgIERXUklURV9GT05UX1NUUkVUQ0ggc3RyZXRjaCA9IHN0YXRpY19j
YXN0PERXUklURV9GT05UX1NUUkVUQ0g+KGxvZ0ZvbnQubGZRdWFsaXR5KTsKLSAgICBEV1JJVEVf
Rk9OVF9TVFlMRSBzdHlsZSA9IGxvZ0ZvbnQubGZJdGFsaWMgPyBEV1JJVEVfRk9OVF9TVFlMRV9J
VEFMSUMgOiBEV1JJVEVfRk9OVF9TVFlMRV9OT1JNQUw7Ci0KLSAgICBDT01QdHI8SURXcml0ZUZv
bnQ+IGR3Rm9udDsKLSAgICBociA9IGZvbnRGYW1pbHktPkdldEZpcnN0TWF0Y2hpbmdGb250KHdl
aWdodCwgc3RyZXRjaCwgc3R5bGUsICZkd0ZvbnQpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIp
KTsKLQotICAgIHJldHVybiBkd0ZvbnQ7Ci19Ci0KLURXUklURV9GT05UX1dFSUdIVCBmb250V2Vp
Z2h0KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKQotewotICAgIHJldHVybiBEV1JJVEVfRk9OVF9X
RUlHSFRfUkVHVUxBUjsKLX0KLQotRFdSSVRFX0ZPTlRfU1RZTEUgZm9udFN0eWxlKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmKQotewotICAgIHJldHVybiBEV1JJVEVfRk9OVF9TVFlMRV9OT1JNQUw7
Ci19Ci0KLURXUklURV9GT05UX1NUUkVUQ0ggZm9udFN0cmV0Y2goY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYpCi17Ci0gICAgcmV0dXJuIERXUklURV9GT05UX1NUUkVUQ0hfTk9STUFMOwotfQotCi19
IC8vIG5hbWVzcGFjZSBEaXJlY3RXcml0ZQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuaAkocmV2aXNp
b24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVj
dFdyaXRlVXRpbGl0aWVzLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0KLWludGVyZmFjZSBJRFdy
aXRlRmFjdG9yeTU7Ci1pbnRlcmZhY2UgSURXcml0ZUZvbnQ7Ci1pbnRlcmZhY2UgSURXcml0ZUZv
bnRDb2xsZWN0aW9uOwotaW50ZXJmYWNlIElEV3JpdGVGb250Q29sbGVjdGlvbjE7Ci1pbnRlcmZh
Y2UgSURXcml0ZUZvbnRGYW1pbHk7Ci1pbnRlcmZhY2UgSURXcml0ZUdkaUludGVyb3A7Ci0KLWVu
dW0gRFdSSVRFX0ZPTlRfV0VJR0hUOwotZW51bSBEV1JJVEVfRk9OVF9TVFlMRTsKLWVudW0gRFdS
SVRFX0ZPTlRfU1RSRVRDSDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGb250UGxh
dGZvcm1EYXRhOwotY2xhc3MgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjsKLQotbmFtZXNwYWNlIERp
cmVjdFdyaXRlIHsKLQotSURXcml0ZUZhY3Rvcnk1KiBmYWN0b3J5KCk7Ci1JRFdyaXRlR2RpSW50
ZXJvcCogZ2RpSW50ZXJvcCgpOwotCi1JRFdyaXRlRm9udENvbGxlY3Rpb24xKiB3ZWJQcm9jZXNz
Rm9udENvbGxlY3Rpb24oKTsKLQotSFJFU1VMVCBhZGRGb250RnJvbURhdGFUb1Byb2Nlc3NDb2xs
ZWN0aW9uKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZm9udERhdGEpOwotQ09NUHRyPElEV3JpdGVG
b250RmFtaWx5PiBmb250RmFtaWx5Rm9yQ29sbGVjdGlvbihJRFdyaXRlRm9udENvbGxlY3Rpb24q
LCBjb25zdCBWZWN0b3I8d2NoYXJfdD4mIGxvY2FsZU5hbWUsIGNvbnN0IExPR0ZPTlQmKTsKLUNP
TVB0cjxJRFdyaXRlRm9udD4gY3JlYXRlV2l0aFBsYXRmb3JtRm9udChjb25zdCBMT0dGT05UJik7
Ci1WZWN0b3I8d2NoYXJfdD4gZmFtaWx5TmFtZUZvckxvY2FsZShJRFdyaXRlRm9udEZhbWlseSos
IGNvbnN0IFZlY3Rvcjx3Y2hhcl90PiYgbG9jYWxlTmFtZSk7Ci0KLURXUklURV9GT05UX1dFSUdI
VCBmb250V2VpZ2h0KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLURXUklURV9GT05UX1NUWUxF
IGZvbnRTdHlsZShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci1EV1JJVEVfRk9OVF9TVFJFVENI
IGZvbnRTdHJldGNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLQotfSAvLyBuYW1lc3BhY2Ug
RGlyZWN0V3JpdGUKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJ
UkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0
UG9pbnREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0Zsb2F0UG9pbnREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFBvaW50RGlyZWN0MkQu
Y3BwCShub25leGlzdGVudCkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgotCi0jaWYgUExBVEZPUk0oV0lOKQotCi0jaW5jbHVkZSA8ZDJk
MS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0UG9pbnQ6OkZsb2F0UG9pbnQoY29u
c3QgRDJEX1BPSU5UXzJGJiBwKQotICAgIDogbV94KHAueCkKLSAgICAsIG1feShwLnkpCi17Ci19
Ci0KLUZsb2F0UG9pbnQ6Om9wZXJhdG9yIEQyRF9QT0lOVF8yRigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIEQyRDE6OlBvaW50MkYobV94LCBtX3kpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBQTEFURk9S
TShXSU4pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRS
ZWN0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9GbG9hdFJlY3REaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFJlY3REaXJlY3QyRC5jcHAJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKLQotI2lmIFBMQVRGT1JNKFdJTikKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
LSNpbmNsdWRlIDxkMmQxLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGJvb2wg
aXNJbmZpbml0ZVJlY3QoY29uc3QgRDJEMV9SRUNUX0YmIHJlY3QpCi17Ci0gICAgaWYgKCFzdGQ6
OmlzaW5mKHJlY3QudG9wKSAmJiByZWN0LnRvcCAhPSAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9h
dD46Om1heCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXN0ZDo6aXNpbmYo
cmVjdC5sZWZ0KSAmJiByZWN0LmxlZnQgIT0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpt
YXgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFzdGQ6OmlzaW5mKHJlY3Qu
Ym90dG9tKSAmJiByZWN0LmJvdHRvbSAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc3RkOjppc2luZihyZWN0LnJp
Z2h0KSAmJiByZWN0LnJpZ2h0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUZsb2F0UmVj
dDo6RmxvYXRSZWN0KGNvbnN0IFJFQ1QmIHJlY3QpCi0gICAgOiBtX2xvY2F0aW9uKHJlY3QubGVm
dCwgcmVjdC50b3ApCi0gICAgLCBtX3NpemUocmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5i
b3R0b20gLSByZWN0LnRvcCkKLXsKLX0KLQotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgRDJE
MV9SRUNUX0YmIHIpCi17Ci0gICAgLy8gSW5maW5pdGUgUmVjdCBjYXNlOgotICAgIGlmIChpc0lu
ZmluaXRlUmVjdChyKSkgewotICAgICAgICAqdGhpcyA9IGluZmluaXRlUmVjdCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9sb2NhdGlvbiA9IEZsb2F0UG9pbnQoci5sZWZ0LCBy
LnRvcCk7Ci0gICAgbV9zaXplID0gRmxvYXRTaXplKHIucmlnaHQgLSByLmxlZnQsIHIuYm90dG9t
IC0gci50b3ApOwotfQotCi1GbG9hdFJlY3Q6Om9wZXJhdG9yIEQyRDFfUkVDVF9GKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gRDJEMTo6UmVjdEYoeCgpLCB5KCksIG1heFgoKSwgbWF4WSgpKTsKLX0K
LQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oV0lOKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0U2l6ZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRTaXplRGlyZWN0MkQuY3Bw
CShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRmxvYXRTaXplRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsNDggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0KLSNpZiBQTEFURk9STShX
SU4pCi0KLSNpbmNsdWRlIDxkMmQxLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRmxvYXRT
aXplOjpGbG9hdFNpemUoY29uc3QgRDJEMV9TSVpFX0YmIHMpCi0gICAgOiBtX3dpZHRoKHMud2lk
dGgpCi0gICAgLCBtX2hlaWdodChzLmhlaWdodCkKLXsKLX0KLQotRmxvYXRTaXplOjpvcGVyYXRv
ciBEMkQxX1NJWkVfRigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEQyRDE6OlNpemVGKG1fd2lkdGgs
IG1faGVpZ2h0KTsKLX0KLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oV0lOKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q2FzY2FkZURpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCShub25leGlzdGVu
dCkKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0j
aW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVk
ZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0
MkQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQuaCIKLSNpbmNsdWRlICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgiCi0jaW5jbHVkZSA8ZDJk
MS5oPgotI2luY2x1ZGUgPGR3cml0ZV8zLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdy
YXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCi0gICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3Ro
aW5nTW9kZSkKLXsKLSAgICBhdXRvIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1D
b250ZXh0KCktPnJlbmRlclRhcmdldCgpOwotICAgIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGlu
ZyA9IFdlYkNvcmVTaG91bGRVc2VGb250U21vb3RoaW5nKCk7Ci0KLSAgICBzd2l0Y2ggKHNtb290
aGluZ01vZGUpIHsKLSAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpBbnRpYWxpYXNlZDoKLSAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh0cnVlKTsKLSAgICAgICAg
c2hvdWxkVXNlRm9udFNtb290aGluZyA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZvbnRTbW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkOgotICAgICAgICBncmFwaGlj
c0NvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKHRydWUpOwotICAgICAgICBzaG91bGRVc2VGb250
U21vb3RoaW5nID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250U21vb3RoaW5n
TW9kZTo6Tm9TbW9vdGhpbmc6Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaG91bGRBbnRp
YWxpYXMoZmFsc2UpOwotICAgICAgICBzaG91bGRVc2VGb250U21vb3RoaW5nID0gZmFsc2U7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc6
Ci0gICAgICAgIC8vIEZvciB0aGUgQXV0b1Ntb290aCBjYXNlLCBkb24ndCBkbyBhbnl0aGluZyEg
S2VlcCB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKLQotICAgIGdy
YXBoaWNzQ29udGV4dC5zYXZlKCk7Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiBtYXRyaXg7Ci0g
ICAgY29udGV4dC0+R2V0VHJhbnNmb3JtKCZtYXRyaXgpOwotCi0gICAgaWYgKHBsYXRmb3JtRGF0
YS5zeW50aGV0aWNPYmxpcXVlKCkpIHsKLSAgICAgICAgc3RhdGljIGZsb2F0IHNrZXcgPSAtdGFu
ZihzeW50aGV0aWNPYmxpcXVlQW5nbGUoKSAqIHBpRmxvYXQgLyAxODAuMGYpOwotICAgICAgICBh
dXRvIHNrZXdNYXRyaXggPSBEMkQxOjpNYXRyaXgzeDJGOjpTa2V3KHNrZXcsIDApOwotICAgICAg
ICBjb250ZXh0LT5TZXRUcmFuc2Zvcm0obWF0cml4ICogc2tld01hdHJpeCk7Ci0gICAgfQotCi0g
ICAgUkVMRUFTRV9BU1NFUlQocGxhdGZvcm1EYXRhLmR3Rm9udCgpKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChwbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpKTsKLQotICAgIFZlY3RvcjxGTE9BVD4gaG9y
aXpvbnRhbEFkdmFuY2VzKG51bUdseXBocyk7Ci0gICAgVmVjdG9yPERXUklURV9HTFlQSF9PRkZT
RVQ+IG9mZnNldEFkdmFuY2VzKG51bUdseXBocyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAgICAgIGlmIChpICsgZnJvbSA+PSBnbHlwaEJ1ZmZl
ci5hZHZhbmNlc0NvdW50KCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBhdXRvIGFk
dmFuY2UgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhpICsgZnJvbSk7Ci0gICAgICAgIGlmICghYWR2
YW5jZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGhvcml6b250YWxBZHZhbmNl
c1tpXSA9IGFkdmFuY2UtPndpZHRoKCk7Ci0gICAgICAgIG9mZnNldEFkdmFuY2VzW2ldLmFkdmFu
Y2VPZmZzZXQgPSBhZHZhbmNlLT53aWR0aCgpOwotICAgICAgICBvZmZzZXRBZHZhbmNlc1tpXS5h
c2NlbmRlck9mZnNldCA9IGFkdmFuY2UtPmhlaWdodCgpOwotICAgIH0KLQotICAgIERXUklURV9H
TFlQSF9SVU4gZ2x5cGhSdW47Ci0gICAgZ2x5cGhSdW4uZm9udEZhY2UgPSBwbGF0Zm9ybURhdGEu
ZHdGb250RmFjZSgpOwotICAgIGdseXBoUnVuLmZvbnRFbVNpemUgPSBwbGF0Zm9ybURhdGEuc2l6
ZSgpOwotICAgIGdseXBoUnVuLmdseXBoQ291bnQgPSBudW1HbHlwaHM7Ci0gICAgZ2x5cGhSdW4u
Z2x5cGhJbmRpY2VzID0gZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pOwotICAgIGdseXBoUnVuLmds
eXBoQWR2YW5jZXMgPSBob3Jpem9udGFsQWR2YW5jZXMuZGF0YSgpOwotICAgIGdseXBoUnVuLmds
eXBoT2Zmc2V0cyA9IG51bGxwdHI7Ci0gICAgZ2x5cGhSdW4uaXNTaWRld2F5cyA9IHBsYXRmb3Jt
RGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWw7Ci0gICAgZ2x5
cGhSdW4uYmlkaUxldmVsID0gMDsKLQotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAg
ZmxvYXQgc2hhZG93Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBncmFwaGljc0Nv
bnRleHQuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOwot
Ci0gICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBncmFwaGljc0NvbnRleHQudGV4dERyYXdpbmdN
b2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIHNoYWRvd0NvbG9yLmlzVmFsaWQoKSAm
JiAhc2hhZG93Qmx1ciAmJiAoIWdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cygpIHx8IGdyYXBoaWNzQ29udGV4dC5nZXRDVE0oKS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9y
RmxpcHBlZCgpKTsKLSAgICBpZiAoaGFzU2ltcGxlU2hhZG93KSB7Ci0gICAgICAgIC8vIFBhaW50
IHNpbXBsZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93
cywgdG8gYXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KLSAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LmNsZWFyU2hhZG93KCk7Ci0gICAgICAgIENvbG9yIGZpbGxDb2xvciA9IGdyYXBo
aWNzQ29udGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0g
c2hhZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNG
bG9hdCgpKTsKLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dP
ZmZzZXQud2lkdGgoKTsKLSAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNm
b3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwg
c28gZG93biBpcyBuZWdhdGl2ZS4KLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55
KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOwotCi0gICAgICAgIGF1dG8gc2hhZG93QnJ1c2ggPSBn
cmFwaGljc0NvbnRleHQuYnJ1c2hXaXRoQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKLSAgICAgICAg
Y29udGV4dC0+RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50MkYoc2hhZG93VGV4dFgsIHNoYWRvd1Rl
eHRZKSwgJmdseXBoUnVuLCBzaGFkb3dCcnVzaCk7Ci0gICAgICAgIGlmIChmb250LnN5bnRoZXRp
Y0JvbGRPZmZzZXQoKSkKLSAgICAgICAgICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQxOjpQ
b2ludDJGKHNoYWRvd1RleHRYICsgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHNoYWRvd1Rl
eHRZKSwgJmdseXBoUnVuLCBzaGFkb3dCcnVzaCk7Ci0gICAgfQotCi0gICAgY29udGV4dC0+RHJh
d0dseXBoUnVuKEQyRDE6OlBvaW50MkYocG9pbnQueCgpLCBwb2ludC55KCkpLCAmZ2x5cGhSdW4s
IGdyYXBoaWNzQ29udGV4dC5zb2xpZEZpbGxCcnVzaCgpKTsKLSAgICBpZiAoZm9udC5zeW50aGV0
aWNCb2xkT2Zmc2V0KCkpCi0gICAgICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQxOjpQb2lu
dDJGKHBvaW50LngoKSArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkpLCAm
Z2x5cGhSdW4sIGdyYXBoaWNzQ29udGV4dC5zb2xpZEZpbGxCcnVzaCgpKTsKLQotICAgIGlmICho
YXNTaW1wbGVTaGFkb3cpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coc2hhZG93
T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7Ci0KLSAgICBncmFwaGljc0NvbnRleHQu
cmVzdG9yZSgpOwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwxMSArMzUsNiBAQAogI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAj
ZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJEaXJlY3RXcml0ZVV0aWxpdGll
cy5oIgotI2luY2x1ZGUgPGR3cml0ZV8zLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhKGNvbnN0
IFN0cmluZyYgbmFtZSwgRm9udFBsYXRmb3JtRGF0YTo6Q3JlYXRpb25EYXRhJiYgY3JlYXRpb25E
YXRhKQpAQCAtNzMsNyArNjgsNyBAQCBGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9y
bURhdGE6CiAgICAgbG9nRm9udC5sZlVuZGVybGluZSA9IGZhbHNlOwogICAgIGxvZ0ZvbnQubGZT
dHJpa2VPdXQgPSBmYWxzZTsKICAgICBsb2dGb250LmxmQ2hhclNldCA9IERFRkFVTFRfQ0hBUlNF
VDsKLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShD
RykgfHwgVVNFKENBSVJPKQogICAgIGxvZ0ZvbnQubGZPdXRQcmVjaXNpb24gPSBPVVRfVFRfT05M
WV9QUkVDSVM7CiAjZWxzZQogICAgIGxvZ0ZvbnQubGZPdXRQcmVjaXNpb24gPSBPVVRfVFRfUFJF
Q0lTOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0
Zm9ybURhdGFEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4
NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZv
cm1EYXRhRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTIxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLQotI2lmIFVTRShESVJF
Q1QyRCkKLQotI2luY2x1ZGUgIkRpcmVjdFdyaXRlVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFduZERDLmgiCi0jaW5jbHVkZSAiU2hhcmVkR0RJ
T2JqZWN0LmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGR3cml0ZV8zLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgRm9udFBs
YXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdChIRk9OVCBmb250LCBmbG9hdCBzaXplLCBIREMg
aGRjLCBXQ0hBUiogZmFjZU5hbWUpCi17Ci0gICAgTE9HRk9OVCBsb2dmb250OwotICAgIEhSRVNV
TFQgaHIgPSA6OkdldE9iamVjdChmb250LCBzaXplb2YoTE9HRk9OVCksICZsb2dmb250KTsKLSAg
ICBpZiAoU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgbV9kd0ZvbnQgPSBEaXJlY3RXcml0ZTo6Y3Jl
YXRlV2l0aFBsYXRmb3JtRm9udChsb2dmb250KTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2R3Rm9u
dCk7Ci0KLSAgICBociA9IG1fZHdGb250LT5DcmVhdGVGb250RmFjZSgmbV9kd0ZvbnRGYWNlKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGlmICghbV91c2VHREkp
Ci0gICAgICAgIG1faXNTeXN0ZW1Gb250ID0gIXdjc2NtcChmYWNlTmFtZSwgTCJMdWNpZGEgR3Jh
bmRlIik7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0
PEhGT05UPiYmIGhmb250LCBDT01QdHI8SURXcml0ZUZvbnQ+JiYgZm9udCwgZmxvYXQgc2l6ZSwg
Ym9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQotICAgIDogbV9zeW50aGV0aWNC
b2xkKGJvbGQpCi0gICAgLCBtX3N5bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkKLSAgICAsIG1fc2l6
ZShzaXplKQotICAgICwgbV9mb250KFNoYXJlZEdESU9iamVjdDxIRk9OVD46OmNyZWF0ZShXVEZN
b3ZlKGhmb250KSkpCi0gICAgLCBtX2R3Rm9udChXVEZNb3ZlKGZvbnQpKQotICAgICwgbV91c2VH
REkodXNlR0RJKQotewotICAgIEhSRVNVTFQgaHIgPSBtX2R3Rm9udC0+Q3JlYXRlRm9udEZhY2Uo
Jm1fZHdGb250RmFjZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci19Ci0K
LXN0YXRpYyBib29sIGZvbnRzQXJlRXF1YWwoSURXcml0ZUZvbnQqIGEsIElEV3JpdGVGb250KiBi
KQotewotICAgIGlmICghYSAmJiAhYikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
YSA9PSBiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoIWEgJiYgYikgfHwgKGEg
JiYgIWIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYS0+R2V0V2VpZ2h0KCkg
IT0gYi0+R2V0V2VpZ2h0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhLT5H
ZXRTdHlsZSgpICE9IGItPkdldFN0eWxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChhLT5HZXRTdHJldGNoKCkgIT0gYi0+R2V0U3RyZXRjaCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBEV1JJVEVfRk9OVF9NRVRSSUNTIGFNZXRyaWNzLCBiTWV0cmljczsKLSAg
ICBhLT5HZXRNZXRyaWNzKCZhTWV0cmljcyk7Ci0gICAgYi0+R2V0TWV0cmljcygmYk1ldHJpY3Mp
OwotCi0gICAgaWYgKChhTWV0cmljcy5kZXNpZ25Vbml0c1BlckVtICE9IGJNZXRyaWNzLmRlc2ln
blVuaXRzUGVyRW0pCi0gICAgICAgIHx8IChhTWV0cmljcy5hc2NlbnQgIT0gYk1ldHJpY3MuYXNj
ZW50KQotICAgICAgICB8fCAoYU1ldHJpY3MuZGVzY2VudCAhPSBiTWV0cmljcy5hc2NlbnQpCi0g
ICAgICAgIHx8IChhTWV0cmljcy5saW5lR2FwICE9IGJNZXRyaWNzLmxpbmVHYXApCi0gICAgICAg
IHx8IChhTWV0cmljcy5jYXBIZWlnaHQgIT0gYk1ldHJpY3MuY2FwSGVpZ2h0KQotICAgICAgICB8
fCAoYU1ldHJpY3MueEhlaWdodCAhPSBiTWV0cmljcy54SGVpZ2h0KQotICAgICAgICB8fCAoYU1l
dHJpY3MudW5kZXJsaW5lUG9zaXRpb24gIT0gYk1ldHJpY3MudW5kZXJsaW5lUG9zaXRpb24pCi0g
ICAgICAgIHx8IChhTWV0cmljcy51bmRlcmxpbmVUaGlja25lc3MgIT0gYk1ldHJpY3MudW5kZXJs
aW5lVGhpY2tuZXNzKQotICAgICAgICB8fCAoYU1ldHJpY3Muc3RyaWtldGhyb3VnaFBvc2l0aW9u
ICE9IGJNZXRyaWNzLnN0cmlrZXRocm91Z2hQb3NpdGlvbikKLSAgICAgICAgfHwgKGFNZXRyaWNz
LnN0cmlrZXRocm91Z2hUaGlja25lc3MgIT0gYk1ldHJpY3Muc3RyaWtldGhyb3VnaFRoaWNrbmVz
cykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi11bnNp
Z25lZCBGb250UGxhdGZvcm1EYXRhOjpoYXNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mb250
ID8gbV9mb250LT5oYXNoKCkgOiAwOwotfQotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRm
b3JtSXNFcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9mb250ID09IG90aGVyLm1fZm9udAotICAgICAgICAmJiBtX3VzZUdESSA9PSBvdGhl
ci5tX3VzZUdESQotICAgICAgICAmJiBmb250c0FyZUVxdWFsKG1fZHdGb250LmdldCgpLCBvdGhl
ci5tX2R3Rm9udC5nZXQoKSk7Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFn
ZVRyZWVOb2RlRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5jcHAJKG5v
bmV4aXN0ZW50KQpAQCAtMSwxMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBo
UGFnZS5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGls
aXRpZXMuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiVGV4dEFuYWx5emVySGVscGVy
LmgiCi0jaW5jbHVkZSA8ZHdyaXRlXzMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29s
IEdseXBoUGFnZTo6ZmlsbChVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpCi17
Ci0gICAgaWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgY29uc3QgRm9udCYgZm9udCA9IHRoaXMtPmZvbnQoKTsKLSAgICBib29s
IGhhdmVHbHlwaHMgPSBmYWxzZTsKLQotICAgIENPTVB0cjxJRFdyaXRlVGV4dEFuYWx5emVyPiBh
bmFseXplcjsKLSAgICBIUkVTVUxUIGhyID0gRGlyZWN0V3JpdGU6OmZhY3RvcnkoKS0+Q3JlYXRl
VGV4dEFuYWx5emVyKCZhbmFseXplcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0KLSAgICBhdXRvJiBmb250UGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsK
LQotICAgIFVDaGFyIGxvY2FsZU5hbWVbTE9DQUxFX05BTUVfTUFYX0xFTkdUSCArIDFdID0geyB9
OwotICAgIGludCBsb2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUocmVpbnRl
cnByZXRfY2FzdDxMUFdTVFI+KCZsb2NhbGVOYW1lKSwgTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQobG9jYWxlTGVuZ3RoIDw9IExPQ0FMRV9OQU1FX01BWF9MRU5H
VEgpOwotCi0gICAgVGV4dEFuYWx5emVySGVscGVyIGhlbHBlcihyZWludGVycHJldF9jYXN0PExQ
V1NUUj4oJmxvY2FsZU5hbWUpLCByZWludGVycHJldF9jYXN0PExQV1NUUj4oYnVmZmVyKSwgYnVm
ZmVyTGVuZ3RoKTsKLQotICAgIGhyID0gYW5hbHl6ZXItPkFuYWx5emVTY3JpcHQoJmhlbHBlciwg
MCwgYnVmZmVyTGVuZ3RoLCAmaGVscGVyKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQo
aHIpKTsKLQotICAgIFZlY3RvcjxHbHlwaD4gZ2x5cGhzKEdseXBoUGFnZTo6c2l6ZSwgMCk7Ci0g
ICAgVmVjdG9yPEdseXBoPiBjbHVzdGVyTWFwKEdseXBoUGFnZTo6c2l6ZSwgMCk7Ci0gICAgVmVj
dG9yPERXUklURV9TSEFQSU5HX1RFWFRfUFJPUEVSVElFUz4gdGV4dFByb3BlcnRpZXMoR2x5cGhQ
YWdlOjpzaXplKTsKLSAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfR0xZUEhfUFJPUEVSVElFUz4g
Z2x5cGhQcm9wZXJ0aWVzKEdseXBoUGFnZTo6c2l6ZSk7Ci0KLSAgICBjb25zdCBXQ0hBUiogdGV4
dFN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDxMUENXU1RSPihidWZmZXIpOwotICAgIEdseXBoKiBn
bHlwaERhdGEgPSBnbHlwaHMuZGF0YSgpOwotICAgIEdseXBoKiBjbHVzdGVyTWFwRGF0YSA9IGNs
dXN0ZXJNYXAuZGF0YSgpOwotICAgIERXUklURV9TSEFQSU5HX1RFWFRfUFJPUEVSVElFUyogdGV4
dFByb3BlcnRpZXNEYXRhID0gdGV4dFByb3BlcnRpZXMuZGF0YSgpOwotICAgIERXUklURV9TSEFQ
SU5HX0dMWVBIX1BST1BFUlRJRVMqIGdseXBoUHJvcGVydGllc0RhdGEgPSBnbHlwaFByb3BlcnRp
ZXMuZGF0YSgpOwotCi0gICAgdW5zaWduZWQgdG90YWwgPSAwOwotICAgIHVuc2lnbmVkIG1heEds
eXBoQ291bnQgPSBHbHlwaFBhZ2U6OnNpemU7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBydW4gOiBo
ZWxwZXIubV9hbmFseXplZFJ1bnMpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQodG90YWwgKyBy
dW4ubGVuZ3RoIDw9IGJ1ZmZlckxlbmd0aCk7Ci0KLSAgICAgICAgdW5zaWduZWQgcmV0dXJuZWRD
b3VudCA9IDA7Ci0gICAgICAgIGhyID0gYW5hbHl6ZXItPkdldEdseXBocyh0ZXh0U3RhcnQgKyBy
dW4uc3RhcnRQb3NpdGlvbiwgcnVuLmxlbmd0aCwgZm9udFBsYXRmb3JtRGF0YS5kd0ZvbnRGYWNl
KCksIGZvbnRQbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZl
cnRpY2FsLCBmYWxzZSwKLSAgICAgICAgICAgICZydW4uYW5hbHlzaXMsIG51bGxwdHIsIG51bGxw
dHIsIG51bGxwdHIsIG51bGxwdHIsIDAsIG1heEdseXBoQ291bnQsIGNsdXN0ZXJNYXBEYXRhLCB0
ZXh0UHJvcGVydGllc0RhdGEsCi0gICAgICAgICAgICBnbHlwaERhdGEsIGdseXBoUHJvcGVydGll
c0RhdGEsICZyZXR1cm5lZENvdW50KTsKLQotICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZ2x5cGhEYXRhICs9IHJldHVybmVk
Q291bnQ7Ci0gICAgICAgIGNsdXN0ZXJNYXBEYXRhICs9IHJldHVybmVkQ291bnQ7Ci0gICAgICAg
IHRleHRQcm9wZXJ0aWVzRGF0YSArPSByZXR1cm5lZENvdW50OwotICAgICAgICBnbHlwaFByb3Bl
cnRpZXNEYXRhICs9IHJldHVybmVkQ291bnQ7Ci0gICAgICAgIG1heEdseXBoQ291bnQgLT0gcmV0
dXJuZWRDb3VudDsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQ
YWdlOjpzaXplOyArK2kpIHsKLSAgICAgICAgR2x5cGggZ2x5cGggPSBnbHlwaHNbaV07Ci0gICAg
ICAgIGlmICghZ2x5cGgpCi0gICAgICAgICAgICBzZXRHbHlwaEZvckluZGV4KGksIDApOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNldEdseXBoRm9ySW5kZXgoaSwgZ2x5cGgpOwotICAg
ICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gaGF2ZUdseXBoczsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJ
KHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFkaWVudERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDIwNSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgotCi0jaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+Ci0KLSNkZWZpbmUgR1JBRElFTlRfRFJBV0lORyAzCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotdm9pZCBHcmFkaWVudDo6c3RvcHNDaGFuZ2VkKCkKLXsKLSAgICBtX2JydXNoID0g
bnVsbHB0cjsKLX0KLQotc3RhdGljIGJvb2wgY2lyY2xlSXNFbnRpcmVseUNvbnRhaW5lZChjb25z
dCBGbG9hdFBvaW50JiBjZW50ZXJBLCBmbG9hdCByYWRpdXNBLCBjb25zdCBGbG9hdFBvaW50JiBj
ZW50ZXJCLCBmbG9hdCByYWRpdXNCKQotewotICAgIGRvdWJsZSBkZWx0YVggPSBjZW50ZXJCLngo
KSAtIGNlbnRlckEueCgpOwotICAgIGRvdWJsZSBkZWx0YVkgPSBjZW50ZXJCLnkoKSAtIGNlbnRl
ckEueSgpOwotICAgIGRvdWJsZSBkZWx0YVJhZGl1cyA9IHJhZGl1c0IgLSByYWRpdXNBOwotCi0g
ICAgcmV0dXJuIGRlbHRhWCAqIGRlbHRhWCArIGRlbHRhWSAqIGRlbHRhWSA8IGRlbHRhUmFkaXVz
ICogZGVsdGFSYWRpdXMgJiYgcmFkaXVzQSA8IHJhZGl1c0I7Ci19Ci0KLUlEMkQxQnJ1c2gqIEdy
YWRpZW50OjpjcmVhdGVCcnVzaChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQotewot
ICAgIHNvcnRTdG9wcygpOwotCi0gICAgVmVjdG9yPEQyRDFfR1JBRElFTlRfU1RPUD4gZ3JhZGll
bnRTdG9wczsKLSAgICBncmFkaWVudFN0b3BzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9zdG9w
cy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKLSAgICAgICAgLy8g
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBub24tc1JHQkEgY29sb3Igc3BhY2VzLgotICAgICAgICBh
dXRvIFtyLCBnLCBiLCBhXSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+
PigpLnJlc29sdmVkKCk7Ci0gICAgICAgIGdyYWRpZW50U3RvcHMuZ3JhZGllbnRTdG9wcy51bmNo
ZWNrZWRBcHBlbmQoRDJEMTo6R3JhZGllbnRTdG9wKHN0b3Aub2Zmc2V0LCBEMkQxOjpDb2xvckYo
ciwgZywgYiwgYSkpKTsKLSAgICB9Ci0KLSAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKLSAgICAg
ICAgWyZdIChjb25zdCBMaW5lYXJEYXRhJikgewotICAgICAgICAgICAgLy8gTm8gYWN0aW9uIG5l
ZWRlZC4KLSAgICAgICAgfSwKLSAgICAgICAgWyZdIChSYWRpYWxEYXRhJiBkYXRhKSB7Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChkYXRhLnN0YXJ0UmFkaXVzID49IDApOwotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZGF0YS5lbmRSYWRpdXMgPj0gMCk7Ci0KLSAgICAgICAgICAgIGlm
IChkYXRhLnN0YXJ0UmFkaXVzID4gZGF0YS5lbmRSYWRpdXMpIHsKLSAgICAgICAgICAgICAgICBn
cmFkaWVudFN0b3BzLnJldmVyc2UoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHN0b3Ag
OiBncmFkaWVudFN0b3BzKQotICAgICAgICAgICAgICAgICAgICBzdG9wLnBvc2l0aW9uID0gMS4w
IC0gc3RvcC5wb3NpdGlvbjsKLQotICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChkYXRhLnN0YXJ0
UmFkaXVzLCBkYXRhLmVuZFJhZGl1cyk7Ci0gICAgICAgICAgICAgICAgc3RkOjpzd2FwKGRhdGEu
cG9pbnQwLCBkYXRhLnBvaW50MSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChk
YXRhLnN0YXJ0UmFkaXVzKSB7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YS5l
bmRSYWRpdXMgPiAwKTsKLSAgICAgICAgICAgICAgICBmbG9hdCBzdGFydFBvc2l0aW9uID0gZGF0
YS5zdGFydFJhZGl1cyAvIGRhdGEuZW5kUmFkaXVzOwotICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHN0YXJ0UG9zaXRpb24gPD0gMS4wKTsKLSAgICAgICAgICAgICAgICBmbG9hdCBhdmFp
bGFibGVSYW5nZSA9IDEuMCAtIHN0YXJ0UG9zaXRpb247Ci0gICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoYXZhaWxhYmxlUmFuZ2UgPD0gMS4wICYmIGF2YWlsYWJsZVJhbmdlID49IDApOwot
Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogZ3JhZGllbnRTdG9wcykgewotICAg
ICAgICAgICAgICAgICAgICBzdG9wLnBvc2l0aW9uICo9IGF2YWlsYWJsZVJhbmdlOwotICAgICAg
ICAgICAgICAgICAgICBzdG9wLnBvc2l0aW9uICs9IHN0YXJ0UG9zaXRpb247Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgJ3N0YXJ0JyBwb3NpdGlv
bgotICAgICAgICAgICAgICAgIGF1dG8gZmlyc3RTdG9wID0gZ3JhZGllbnRTdG9wcy5maXJzdCgp
OwotICAgICAgICAgICAgICAgIGlmICghV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGZpcnN0U3Rv
cC5wb3NpdGlvbiwgMC4wZikpIHsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RTdG9wLnBvc2l0
aW9uID0gMDsKLSAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnRTdG9wcy5pbnNlcnQoMCwgZmly
c3RTdG9wKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0g
ICAgICAgIFsmXSAoY29uc3QgQ29uaWNEYXRhJikgewotICAgICAgICAgICAgLy8gRklYTUU6IEFz
c2VzcyB3aGV0aGVyIG5lZWRlZCBmb3IgQ29uaWMgR3JhZGllbnRzLgotICAgICAgICB9Ci0gICAg
KTsKLQotICAgIENPTVB0cjxJRDJEMUdyYWRpZW50U3RvcENvbGxlY3Rpb24+IGdyYWRpZW50U3Rv
cENvbGxlY3Rpb247Ci0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlR3JhZGll
bnRTdG9wQ29sbGVjdGlvbihncmFkaWVudFN0b3BzLmRhdGEoKSwgZ3JhZGllbnRTdG9wcy5zaXpl
KCksICZncmFkaWVudFN0b3BDb2xsZWN0aW9uKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVE
RUQoaHIpKTsKLQotICAgIFdURjo6c3dpdGNoT24obV9kYXRhLAotICAgICAgICBbJl0gKGNvbnN0
IExpbmVhckRhdGEmIGRhdGEpIHsKLSAgICAgICAgICAgIElEMkQxTGluZWFyR3JhZGllbnRCcnVz
aCogbGluZWFyR3JhZGllbnQgPSBudWxscHRyOwotICAgICAgICAgICAgaHIgPSByZW5kZXJUYXJn
ZXQtPkNyZWF0ZUxpbmVhckdyYWRpZW50QnJ1c2goCi0gICAgICAgICAgICAgICAgRDJEMTo6TGlu
ZWFyR3JhZGllbnRCcnVzaFByb3BlcnRpZXMoZGF0YS5wb2ludDAsIGRhdGEucG9pbnQxKSwKLSAg
ICAgICAgICAgICAgICBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKSwgZ3JhZGllbnRTdG9wQ29sbGVj
dGlvbi5nZXQoKSwKLSAgICAgICAgICAgICAgICAmbGluZWFyR3JhZGllbnQpOwotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgICAgICBtX2JydXNoID0g
YWRvcHRDT00obGluZWFyR3JhZGllbnQpOwotICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0
IFJhZGlhbERhdGEmIGRhdGEpIHsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQ7Ci0gICAg
ICAgICAgICBpZiAoIWNpcmNsZUlzRW50aXJlbHlDb250YWluZWQoZGF0YS5wb2ludDAsIGRhdGEu
c3RhcnRSYWRpdXMsIGRhdGEucG9pbnQxLCBkYXRhLmVuZFJhZGl1cykpCi0gICAgICAgICAgICAg
ICAgb2Zmc2V0ID0gKGRhdGEucG9pbnQxLnNjYWxlZChkYXRhLnN0YXJ0UmFkaXVzKSAtIGRhdGEu
cG9pbnQwLnNjYWxlZChkYXRhLmVuZFJhZGl1cykpIC8gKGRhdGEuZW5kUmFkaXVzIC0gZGF0YS5z
dGFydFJhZGl1cyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgb2Zmc2V0ID0g
ZGF0YS5wb2ludDAgLSBkYXRhLnBvaW50MTsKLQotICAgICAgICAgICAgRmxvYXRQb2ludCBjZW50
ZXIgPSBkYXRhLnBvaW50MTsKLSAgICAgICAgICAgIGZsb2F0IHJhZGl1c1ggPSBkYXRhLmVuZFJh
ZGl1czsKLSAgICAgICAgICAgIGZsb2F0IHJhZGl1c1kgPSByYWRpdXNYIC8gZGF0YS5hc3BlY3RS
YXRpbzsKLQotICAgICAgICAgICAgSUQyRDFSYWRpYWxHcmFkaWVudEJydXNoKiByYWRpYWxHcmFk
aWVudCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlUmFk
aWFsR3JhZGllbnRCcnVzaCgKLSAgICAgICAgICAgICAgICBEMkQxOjpSYWRpYWxHcmFkaWVudEJy
dXNoUHJvcGVydGllcyhjZW50ZXIsIEQyRDE6OlBvaW50MkYob2Zmc2V0LndpZHRoKCksIG9mZnNl
dC5oZWlnaHQoKSksIHJhZGl1c1gsIHJhZGl1c1kpLAotICAgICAgICAgICAgICAgIEQyRDE6OkJy
dXNoUHJvcGVydGllcygpLCBncmFkaWVudFN0b3BDb2xsZWN0aW9uLmdldCgpLAotICAgICAgICAg
ICAgICAgICZyYWRpYWxHcmFkaWVudCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUND
RUVERUQoaHIpKTsKLSAgICAgICAgICAgIG1fYnJ1c2ggPSBhZG9wdENPTShyYWRpYWxHcmFkaWVu
dCk7Ci0gICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgQ29uaWNEYXRhJikgewotICAgICAg
ICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBjb25pYyBncmFkaWVudCByZW5kZXJpbmcuCi0gICAg
ICAgICAgICBtX2JydXNoID0gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICk7Ci0KLSAgICByZXR1
cm4gbV9icnVzaC5nZXQoKTsKLX0KLQotdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvIGQyZENvbnRl
eHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKTsKLQotICAgIFdU
Rjo6c3dpdGNoT24obV9kYXRhLAotICAgICAgICBbJl0gKGNvbnN0IExpbmVhckRhdGEmIGRhdGEp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBoYXZlIGEgYnJ1c2gsIHdoeSBjYW4gd2Ug
cmUtdXNlIGl0PyBXaGF0IGd1YXJhbnRlZXMgaXQncyByaWdodCBmb3IgdGhpcyBjb250ZXh0Pwot
ICAgICAgICAgICAgaWYgKCFtX2JydXNoKQotICAgICAgICAgICAgICAgIGNyZWF0ZUJydXNoKGQy
ZENvbnRleHQpOwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAgICAgICAgIGQyZENvbnRleHQt
PlNldFRhZ3MoR1JBRElFTlRfRFJBV0lORywgX19MSU5FX18pOwotI2VuZGlmCi0KLSAgICAgICAg
ICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwotICAgICAgICAgICAgZDJkQ29u
dGV4dC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgbV9icnVzaC5nZXQoKSk7Ci0gICAgICAgIH0s
Ci0gICAgICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYgZGF0YSkgewotICAgICAgICAgICAgYm9v
bCBuZWVkU2NhbGluZyA9IGRhdGEuYXNwZWN0UmF0aW8gIT0gMTsKLSAgICAgICAgICAgIGlmIChu
ZWVkU2NhbGluZykgewotICAgICAgICAgICAgICAgIGNvbnRleHQuc2F2ZSgpOwotICAgICAgICAg
ICAgICAgIC8vIFNjYWxlIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgZ3JhZGllbnQuIFdlIG9ubHkg
ZXZlciBzY2FsZSBub24tZGVwcmVjYXRlZCBncmFkaWVudHMsCi0gICAgICAgICAgICAgICAgLy8g
Zm9yIHdoaWNoIG1fcDAgPT0gbV9wMS4KLSAgICAgICAgICAgICAgICBBU1NFUlQoZGF0YS5wb2lu
dDAgPT0gZGF0YS5wb2ludDEpOwotCi0gICAgICAgICAgICAgICAgRDJEMV9NQVRSSVhfM1gyX0Yg
Y3RtID0geyB9OwotICAgICAgICAgICAgICAgIGQyZENvbnRleHQtPkdldFRyYW5zZm9ybSgmY3Rt
KTsKLQotICAgICAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0oY3RtKTsKLSAg
ICAgICAgICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKGRhdGEucG9pbnQwKTsKLSAgICAgICAg
ICAgICAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKDEuMCwgMS4wIC8gZGF0YS5hc3BlY3RS
YXRpbyk7Ci0gICAgICAgICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtZGF0YS5wb2ludDAp
OwotCi0gICAgICAgICAgICAgICAgZDJkQ29udGV4dC0+U2V0VHJhbnNmb3JtKGN0bSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBoYXZlIGEgYnJ1c2gsIHdo
eSBjYW4gd2UgcmUtdXNlIGl0PyBXaGF0IGd1YXJhbnRlZXMgaXQncyByaWdodCBmb3IgdGhpcyBj
b250ZXh0PwotICAgICAgICAgICAgaWYgKCFtX2JydXNoKQotICAgICAgICAgICAgICAgIGNyZWF0
ZUJydXNoKGQyZENvbnRleHQpOwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAgICAgICAgIGQy
ZENvbnRleHQtPlNldFRhZ3MoR1JBRElFTlRfRFJBV0lORywgX19MSU5FX18pOwotI2VuZGlmCi0K
LSAgICAgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwotICAgICAgICAg
ICAgZDJkQ29udGV4dC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgbV9icnVzaC5nZXQoKSk7Ci0K
LSAgICAgICAgICAgIGlmIChuZWVkU2NhbGluZykKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJl
c3RvcmUoKTsKLSAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBDb25pY0RhdGEmKSB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IGNvbmljIGdyYWRpZW50IHJlbmRlcmluZy4K
LSAgICAgICAgfQotICAgICk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVj
dDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0x
LDkxOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0KLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJEaXJlY3QyRE9wZXJhdGlvbnMuaCIK
LSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVj
b3JkZXIuaCIKLSNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCi0jaW5jbHVkZSAiTG9nZ2lu
Zy5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8ZDJkMWVmZmVjdHMu
aD4KLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4KLQotI3ByYWdt
YSB3YXJuaW5nIChkaXNhYmxlIDogNDc1NikKLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRChIREMgaGRjLCBi
b29sIGhhc0FscGhhKQotewotICAgIHBsYXRmb3JtSW5pdChoZGMsIGhhc0FscGhhKTsKLX0KLQot
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKEhEQyBoZGMs
IElEMkQxRENSZW5kZXJUYXJnZXQqKiByZW5kZXJUYXJnZXQsIFJFQ1QgcmVjdCwgYm9vbCBoYXNB
bHBoYSkKLXsKLSAgICAvLyBDcmVhdGUgYSBEQyByZW5kZXIgdGFyZ2V0LgotICAgIGF1dG8gdGFy
Z2V0UHJvcGVydGllcyA9IERpcmVjdDJEOjpyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0KLSAg
ICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN5c3RlbUZhY3RvcnkoKS0+
Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRhcmdldFByb3BlcnRpZXMsIHJlbmRlclRhcmdldCk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICAoKnJlbmRlclRhcmdldCkt
PkJpbmREQyhoZGMsICZyZWN0KTsKLQotICAgIGF1dG8gb3duZWRQbGF0Zm9ybUNvbnRleHQgPSBt
YWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPigqcmVuZGVyVGFyZ2V0KTsKLSAgICBt
X2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKFdURk1vdmUob3duZWRQ
bGF0Zm9ybUNvbnRleHQpLCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsK
LSAgICBtX2RhdGEtPm1faGRjID0gaGRjOwotfQotCi1HcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJlclR5cGUp
Ci17Ci0gICAgcGxhdGZvcm1Jbml0KHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LCByZW5kZXJlclR5
cGUpOwotfQotCi1JRDJEMUZhY3RvcnkqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzeXN0ZW1G
YWN0b3J5KCkKLXsKLSAgICBzdGF0aWMgSUQyRDFGYWN0b3J5KiBkaXJlY3QyREZhY3RvcnkgPSBu
dWxscHRyOwotICAgIGlmICghZGlyZWN0MkRGYWN0b3J5KSB7Ci0jaWZuZGVmIE5ERUJVRwotICAg
ICAgICBEMkQxX0ZBQ1RPUllfT1BUSU9OUyBvcHRpb25zID0geyB9OwotICAgICAgICBvcHRpb25z
LmRlYnVnTGV2ZWwgPSBEMkQxX0RFQlVHX0xFVkVMX0lORk9STUFUSU9OOwotICAgICAgICBIUkVT
VUxUIGhyID0gRDJEMUNyZWF0ZUZhY3RvcnkoRDJEMV9GQUNUT1JZX1RZUEVfTVVMVElfVEhSRUFE
RUQsIG9wdGlvbnMsICZkaXJlY3QyREZhY3RvcnkpOwotI2Vsc2UKLSAgICAgICAgSFJFU1VMVCBo
ciA9IEQyRDFDcmVhdGVGYWN0b3J5KEQyRDFfRkFDVE9SWV9UWVBFX01VTFRJX1RIUkVBREVELCAm
ZGlyZWN0MkRGYWN0b3J5KTsKLSNlbmRpZgotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVE
RUQoaHIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGlyZWN0MkRGYWN0b3J5OwotfQotCi1JRDJE
MVJlbmRlclRhcmdldCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRlZmF1bHRSZW5kZXJUYXJn
ZXQoKQotewotICAgIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdldCogZGVmYXVsdFJlbmRlclRhcmdl
dCA9IG51bGxwdHI7Ci0gICAgaWYgKCFkZWZhdWx0UmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIGF1
dG8gcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IEQyRDE6OlJlbmRlclRhcmdldFByb3BlcnRpZXMo
KTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy51c2FnZSA9IEQyRDFfUkVOREVSX1RB
UkdFVF9VU0FHRV9HRElfQ09NUEFUSUJMRTsKLSAgICAgICAgYXV0byBod25kUmVuZGVyVGFyZ2V0
UHJvcGVydGllcyA9IEQyRDE6Okh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKDo6R2V0RGVza3Rv
cFdpbmRvdygpLCBEMkQxOjpTaXplVSgxMCwgMTApKTsKLSAgICAgICAgSFJFU1VMVCBociA9IHN5
c3RlbUZhY3RvcnkoKS0+Q3JlYXRlSHduZFJlbmRlclRhcmdldCgmcmVuZGVyVGFyZ2V0UHJvcGVy
dGllcywgJmh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLCByZWludGVycHJldF9jYXN0PElEMkQx
SHduZFJlbmRlclRhcmdldCoqPigmZGVmYXVsdFJlbmRlclRhcmdldCkpOwotICAgICAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgZGVmYXVsdFJlbmRlclRhcmdldC0+
QWRkUmVmKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlZmF1bHRSZW5kZXJUYXJnZXQ7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtSW5pdChIREMgaGRjLCBib29s
IGhhc0FscGhhKQotewotICAgIGlmICghaGRjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIQklU
TUFQIGJpdG1hcCA9IHN0YXRpY19jYXN0PEhCSVRNQVA+KEdldEN1cnJlbnRPYmplY3QoaGRjLCBP
QkpfQklUTUFQKSk7Ci0KLSAgICBESUJQaXhlbERhdGEgcGl4ZWxEYXRhKGJpdG1hcCk7Ci0KLSAg
ICBhdXRvIHRhcmdldFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6cmVuZGVyVGFyZ2V0UHJvcGVydGll
cygpOwotCi0gICAgQ09NUHRyPElEMkQxRENSZW5kZXJUYXJnZXQ+IHJlbmRlclRhcmdldDsKLSAg
ICBIUkVTVUxUIGhyID0gc3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEQ1JlbmRlclRhcmdldCgmdGFy
Z2V0UHJvcGVydGllcywgJnJlbmRlclRhcmdldCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBSRUNUIGNsaWVudFJlY3QgPSBJbnRSZWN0KEludFBvaW50
KCksIHBpeGVsRGF0YS5zaXplKCkpOwotICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5CaW5kREMoaGRj
LCAmY2xpZW50UmVjdCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvIG93bmVkUGxhdGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRD4ocmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAgICBtX2RhdGEgPSBuZXcgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKFdURk1vdmUob3duZWRQbGF0Zm9ybUNvbnRleHQp
LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKLSAgICBtX2RhdGEtPm1f
aGRjID0gaGRjOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5j
IHdpdGggb3VyIHN0YXRlLgotICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxDb2xvcigpKTsK
LSAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwotICAgIHNldFBsYXRm
b3JtU3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcygpKTsKLSAgICAvLyBGSVhNRTogbV9z
dGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29udmVydEludGVycG9sYXRpb25RdWFs
aXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0KQotewotICAgIHBsYXRmb3JtSW5pdChw
bGF0Zm9ybUNvbnRleHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5
cGUgcmVuZGVyaW5nVHlwZSkKLXsKLSAgICBpZiAoIXBsYXRmb3JtQ29udGV4dCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZSgqcGxhdGZvcm1Db250ZXh0LCByZW5kZXJpbmdUeXBlKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0
aGUgY29udGV4dCBzdGFydHMgaW4gc3luYyB3aXRoIG91ciBzdGF0ZS4KLSAgICBzZXRQbGF0Zm9y
bUZpbGxDb2xvcihmaWxsQ29sb3IoKSk7Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihzdHJv
a2VDb2xvcigpKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25l
c3MoKSk7Ci0gICAgLy8gRklYTUU6IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9
IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVh
bGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwotfQotCi1HcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
fkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKCkKLXsKLSAgICBkZWxldGUgbV9kYXRhOwotfQotCi1Q
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICZtX2RhdGEtPnBsYXRmb3JtQ29udGV4dCgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c3luY0NvbnRleHQo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LUlEMkQxUmVuZGVyVGFyZ2V0KiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJlbmRl
clRhcmdldCgpCi17Ci0gICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dC5tX3RyYW5zcGFyZW5jeUxh
eWVyU3RhY2suaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9wbGF0Zm9ybUNvbnRleHQubV90
cmFuc3BhcmVuY3lMYXllclN0YWNrLmxhc3QoKS5yZW5kZXJUYXJnZXQuZ2V0KCk7Ci0KLSAgICBy
ZXR1cm4gbV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzZXRBbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBB
U1NFUlQobV9wbGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLmlzRW1wdHko
KSk7Ci0gICAgbV9hbHBoYSA9IGFscGhhOwotfQotCi1mbG9hdCBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6OmN1cnJlbnRHbG9iYWxBbHBoYSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3Bs
YXRmb3JtQ29udGV4dC5tX3RyYW5zcGFyZW5jeUxheWVyU3RhY2suaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gbV9wbGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLmxhc3Qo
KS5vcGFjaXR5OwotCi0gICAgcmV0dXJuIG1fYWxwaGE7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OnNhdmUoKQotewotICAgIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpOwotICAg
IERpcmVjdDJEOjpzYXZlKCpwbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnJlc3RvcmUoKQotewotICAgIGlmICghc3RhY2tTaXplKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpOwotICAgIERpcmVj
dDJEOjpyZXN0b3JlKCpwbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNv
bnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQotewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJh
d05hdGl2ZUltYWdlKCpwbGF0Zm9ybUNvbnRleHQoKSwgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFn
ZSgpLmdldCgpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zLCBzdGF0ZS5h
bHBoYSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRS
ZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKQotewotICAgIGJvb2wgY3JlYXRl
ZEJpdG1hcCA9ICFtX2RhdGEtPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpOwotICAg
IGlmICghY3JlYXRlZEJpdG1hcCkgewotICAgICAgICBEaXJlY3QyRDo6cmVzdG9yZSgqcGxhdGZv
cm1Db250ZXh0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFoZGMgfHwg
ZHN0UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gc291cmNlQml0
bWFwID0gYWRvcHRHRElPYmplY3Qoc3RhdGljX2Nhc3Q8SEJJVE1BUD4oOjpHZXRDdXJyZW50T2Jq
ZWN0KGhkYywgT0JKX0JJVE1BUCkpKTsKLQotICAgIERJQlBpeGVsRGF0YSBwaXhlbERhdGEoc291
cmNlQml0bWFwLmdldCgpKTsKLSAgICBBU1NFUlQocGl4ZWxEYXRhLmJpdHNQZXJQaXhlbCgpID09
IDMyKTsKLQotICAgIGF1dG8gYml0bWFwUHJvcGVydGllcyA9IERpcmVjdDJEOjpiaXRtYXBQcm9w
ZXJ0aWVzKCk7Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIGF1dG8m
IHBsYXRmb3JtQ29udGV4dCA9ICp0aGlzLT5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIENPTVB0
cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQu
cmVuZGVyVGFyZ2V0KCktPkNyZWF0ZUJpdG1hcChwaXhlbERhdGEuc2l6ZSgpLCBwaXhlbERhdGEu
YnVmZmVyKCksIHBpeGVsRGF0YS5ieXRlc1BlclJvdygpLCAmYml0bWFwUHJvcGVydGllcywgJmJp
dG1hcCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgUGxhdGZvcm1Db250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBsYXRmb3JtQ29udGV4dCk7Ci0KLSAgICAvLyBOb3RlOiBU
aGUgY29udGVudCBpbiB0aGUgSERDIGlzIGludmVydGVkIGNvbXBhcmVkIHRvIERpcmVjdDJELCBz
byBpdCBuZWVkcyB0byBiZSBmbGlwcGVkLgotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29u
dGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIEQyRDFfTUFUUklYXzNYMl9GIGN1cnJlbnRUcmFu
c2Zvcm07Ci0gICAgY29udGV4dC0+R2V0VHJhbnNmb3JtKCZjdXJyZW50VHJhbnNmb3JtKTsKLQot
ICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0oY3VycmVudFRyYW5zZm9ybSk7Ci0gICAgdHJh
bnNmb3JtLnRyYW5zbGF0ZShkc3RSZWN0LmxvY2F0aW9uKCkpOwotICAgIHRyYW5zZm9ybS5zY2Fs
ZSgxLjAsIC0xLjApOwotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoMCwgLWRzdFJlY3QuaGVpZ2h0
KCkpOwotCi0gICAgY29udGV4dC0+U2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0gICAgY29udGV4
dC0+RHJhd0JpdG1hcChiaXRtYXAuZ2V0KCksIEQyRDE6OlJlY3RGKDAsIDAsIGRzdFJlY3Qud2lk
dGgoKSwgZHN0UmVjdC5oZWlnaHQoKSkpOwotCi0gICAgOjpEZWxldGVEQyhoZGMpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBh
dGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlIHN0eWxlKQotewotICAgIERpcmVjdDJEOjpkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQotICAgIDogbV9wbGF0
Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0KQotICAgICwgbV9yZW5kZXJlclR5cGUocmVuZGVy
aW5nVHlwZSkKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0gR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpCi0gICAg
ICAgIGJlZ2luRHJhdygpOwotfQotCi1HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6Okdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ+JiYgb3duZWRQbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQotICAgIDogbV9v
d25lZFBsYXRmb3JtQ29udGV4dChXVEZNb3ZlKG93bmVkUGxhdGZvcm1Db250ZXh0KSkKLSAgICAs
IG1fcGxhdGZvcm1Db250ZXh0KCptX293bmVkUGxhdGZvcm1Db250ZXh0KQotICAgICwgbV9yZW5k
ZXJlclR5cGUocmVuZGVyaW5nVHlwZSkKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJl
bmRlclRhcmdldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9yZW5kZXJlclR5cGUg
PT0gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpH
UFVNZW1vcnkpCi0gICAgICAgIGJlZ2luRHJhdygpOwotfQotCi1HcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKQotewotICAgIGlm
ICghbV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX3BsYXRmb3JtQ29udGV4dC5iZWdpbkRyYXdDb3VudCkKLSAgICAgICAgZW5kRHJh
dygpOwotfQotCi1JRDJEMVNvbGlkQ29sb3JCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmJydXNoV2l0aENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICByZXR1cm4gcGxhdGZv
cm1Db250ZXh0KCktPmJydXNoV2l0aENvbG9yKGNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbG9yKSku
Z2V0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGlwKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGU6OmNsaXAoY29uc3QgUGF0aCYgcGF0aCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGU6OmNsaXAoSUQyRDFHZW9tZXRyeSogcGF0aCkKLXsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNvbmNhdENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGFmZmluZVRyYW5zZm9ybSkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6OmZsdXNoKCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OmJlZ2luRHJhdygpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuYmVn
aW5EcmF3KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmRE
cmF3KCkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5lbmREcmF3KCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyZXN0b3JlKCkKLXsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNhdmUoKQotewotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIEFTU0VSVChtX3BsYXRmb3JtQ29udGV4
dC5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkt
PlNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyb3RhdGUoZmxvYXQgYW5nbGUpCi17Ci19Ci0K
LUQyRDFfQ09MT1JfRiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y29sb3JXaXRoR2xvYmFsQWxw
aGEoY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAotewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
Y29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKLSAgICBy
ZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEgKiBtX2RhdGEtPmN1cnJlbnRHbG9iYWxBbHBo
YSgpKTsKLX0KLQotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNvbGlkU3Ry
b2tlQnJ1c2goKSBjb25zdAotewotICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xp
ZFN0cm9rZUJydXNoLmdldCgpOwotfQotCi1JRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6c29saWRGaWxsQnJ1c2goKSBjb25zdAotewotICAgIHJldHVybiBwbGF0Zm9ybUNvbnRl
eHQoKS0+bV9zb2xpZEZpbGxCcnVzaC5nZXQoKTsKLX0KLQotSUQyRDFCcnVzaCogR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5TdHJva2VCcnVzaC5nZXQoKTsKLX0KLQotSUQy
RDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5GaWxsQnJ1c2goKSBjb25z
dAotewotICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuRmlsbEJydXNoLmdl
dCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpiZWdpbkRyYXcoKQotewot
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5iZWdpbkRyYXcoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6ZW5kRHJhdygpCi17Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmVuZERy
YXcoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Zmx1c2goKQotewotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OmZsdXNoKCpwbGF0
Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdQ
YXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGlt
YWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZl
cnRpYmxlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvIHRpbGVJbWFnZSA9IGltYWdlOwot
ICAgIERpcmVjdDJEOjpkcmF3UGF0dGVybigqcGxhdGZvcm1Db250ZXh0KCksIFdURk1vdmUodGls
ZUltYWdlKSwgSW50U2l6ZShpbWFnZS5zaXplKCkpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMu
YmxlbmRNb2RlKCkpOwotfQotCi0vLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0
cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd1JlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi17Ci0gICAgQVNTRVJU
KCFyZWN0LmlzRW1wdHkoKSk7Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAg
IERpcmVjdDJEOjpkcmF3UmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGJvcmRlclRoaWNr
bmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29s
b3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0TGluZUNh
cChMaW5lQ2FwKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
c2V0TGluZUpvaW4oTGluZUpvaW4pCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpzZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSkKLXsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldE1pdGVyTGltaXQoZmxvYXQgY2FudmFzTWl0
ZXJMaW1pdCkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXREYXNoT2Zmc2V0KGNhbnZhc01p
dGVyTGltaXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0
RGFzaE9mZnNldChmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNl
dERhc2hPZmZzZXQoZGFzaE9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpzZXRQYXR0ZXJuV2lkdGgoZmxvYXQgcGF0dGVybldpZHRoKQotewotICAgIG1f
cGxhdGZvcm1Db250ZXh0LnNldFBhdHRlcm5XaWR0aChwYXR0ZXJuV2lkdGgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0UGF0dGVybk9mZnNldChmbG9hdCBw
YXR0ZXJuT2Zmc2V0KQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldFBhdHRlcm5PZmZzZXQo
cGF0dGVybk9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OjpzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQotewotICAgIG1fcGxhdGZvcm1D
b250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0RGFzaGVzKGNvbnN0IERhc2hBcnJheSYgZGFzaGVz
KQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldERhc2hlcyhkYXNoZXMpOwotfQotCi1EMkQx
X1NUUk9LRV9TVFlMRV9QUk9QRVJUSUVTIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
c3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRDJEMTo6U3Ryb2tl
U3R5bGVQcm9wZXJ0aWVzKG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNv
bnRleHQubV9saW5lQ2FwLCBtX3BsYXRmb3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1D
b250ZXh0Lm1fbGluZUpvaW4sIG1fcGxhdGZvcm1Db250ZXh0Lm1fbWl0ZXJMaW1pdCwgRDJEMV9E
QVNIX1NUWUxFX1NPTElELCAwLjBmKTsKLX0KLQotSUQyRDFTdHJva2VTdHlsZSogR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnN0cm9rZVN0eWxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwotICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+c3Ryb2tlU3R5
bGUoKTsKLX0KLQotLy8gVGhpcyBpcyBvbmx5IHVzZWQgdG8gZHJhdyBib3JkZXJzLgotdm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0g
Tm9TdHJva2UpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRl
KCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdMaW5lKCpwbGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQxLCBw
b2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tl
VGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAg
YXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpmaWxsRWxsaXBzZSgq
cGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5
bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjphcHBseVN0cm9rZVBhdHRlcm4oKQotewotICAgIGlm
ICghbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFz
ZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCi0KLSAg
ICBjb25zdCBmbG9hdCBwYXR0ZXJuQWxwaGEgPSAxOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5t
X3BhdHRlcm5TdHJva2VCcnVzaCA9IGFkb3B0Q09NKG1fc3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3Jl
YXRlUGxhdGZvcm1QYXR0ZXJuKCp0aGlzLCBwYXR0ZXJuQWxwaGEsIHVzZXJUb0Jhc2VDVE0pKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBwbHlGaWxsUGF0dGVybigpCi17
Ci0gICAgaWYgKCFtX3N0YXRlLmZpbGxQYXR0ZXJuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdXNl
clRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dz
Ci0KLSAgICBjb25zdCBmbG9hdCBwYXR0ZXJuQWxwaGEgPSAxOwotICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5tX3BhdHRlcm5GaWxsQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5j
cmVhdGVQbGF0Zm9ybVBhdHRlcm4oKnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3UGF0aChjb25zdCBQYXRo
JiBwYXRoKQotewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGF1dG8mIGNvbnRleHQgPSAqcGxh
dGZvcm1Db250ZXh0KCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdQYXRoKGNvbnRleHQsIHBhdGgsIERp
cmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRl
KHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXV0byYgY29udGV4
dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbFBhdGgoY29udGV4dCwg
cGF0aCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRv
d1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhdXRv
JiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwotICAgIERpcmVjdDJEOjpzdHJva2VQYXRo
KGNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGly
ZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQo
KTsKLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3QoY29udGV4dCwgcmVjdCwgRGlyZWN0MkQ6OkZpbGxT
b3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3Rh
dGUoKTsKLSAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwotICAgIERpcmVj
dDJEOjpmaWxsUmVjdChjb250ZXh0LCByZWN0LCBjb2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRl
KHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQotewotICAgIGF1dG8gYnJ1
c2ggPSBncmFkaWVudC5jcmVhdGVCcnVzaChtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQo
KSk7Ci0gICAgaWYgKCFicnVzaCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGlyZWN0MkQ6OmZp
bGxSZWN0V2l0aEdyYWRpZW50KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBicnVzaC5nZXQoKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdy
YXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNP
cGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotCi0gICAgRGlyZWN0MkQ6OlN0YXRl
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIGNvbXBvc2l0ZU9wZXJh
dG9yLCBibGVuZE1vZGUpOwotICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4
dCwgcmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotICAgIERpcmVj
dDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2
aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3Rh
dGUoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbFJvdW5kZWRSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwg
cmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQotewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAg
ICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwotICAgIERpcmVjdDJEOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb250ZXh0LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsIERpcmVj
dDJEOjpGaWxsU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcCgqcGxhdGZvcm1Db250ZXh0KCksIHJl
Y3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcE91dCgqcGxhdGZvcm1Db250ZXh0
KCksIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwT3V0KGNv
bnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXBPdXQoKnBsYXRmb3JtQ29udGV4
dCgpLCBwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17Ci0gICAgRGlyZWN0MkQ6OmNs
aXBQYXRoKCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCwgY2xpcFJ1bGUpOwotfQotCi1JbnRSZWN0
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwQm91bmRzKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gRGlyZWN0MkQ6OlN0YXRlOjpnZXRDbGlwQm91bmRzKCpwbGF0Zm9ybUNvbnRleHQoKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBHcmFwaGlj
c0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0gICAgc2F2ZSgpOwot
Ci0gICAgbV9zdGF0ZS5hbHBoYSA9IG9wYWNpdHk7Ci0KLSAgICBEaXJlY3QyRDo6YmVnaW5UcmFu
c3BhcmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0KCksIG9wYWNpdHkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcigp
Ci17Ci0gICAgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIERp
cmVjdDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAg
bV9zdGF0ZS5hbHBoYSA9IG1fZGF0YS0+Y3VycmVudEdsb2JhbEFscGhhKCk7Ci0KLSAgICByZXN0
b3JlKCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN1cHBvcnRzVHJhbnNw
YXJlbmN5TGF5ZXJzKCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi17
Ci0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0No
YW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9wbGF0
Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpCi0gICAgICAgIERpcmVjdDJE
OjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVN0
eWxlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFu
Z2UpIHsKLSAgICAgICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAg
ICAgICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0
ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKLSAgICAgICAgICAgIC8vIFdlIGZsaXAg
dGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlz
Ci0gICAgICAgICAgICBhdXRvJiBtdXRhYmxlU3RhdGUgPSBjb25zdF9jYXN0PEdyYXBoaWNzQ29u
dGV4dFN0YXRlJj4oZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSk7Ci0gICAgICAgICAgICBhdXRv
JiBzaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBtdXRhYmxl
U3RhdGUuc2hhZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNl
dC5oZWlnaHQoKSB9OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKLSAgICAgICAgRGlyZWN0
MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKGZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKLSAgICAgICAgRGly
ZWN0MkQ6OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRl
LnNob3VsZEFudGlhbGlhcyk7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkgewotICAgICAgICBBU1NFUlQobV9zdGF0ZS5z
dHJva2VDb2xvciA9PSBjb2xvcik7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3NvbGlk
U3Ryb2tlQnJ1c2ggPSBicnVzaFdpdGhDb2xvcihzdHJva2VDb2xvcigpKTsgICAgCi0gICAgfQot
ICAgIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENv
bG9yQ2hhbmdlKSkgewotICAgICAgICBBU1NFUlQobV9zdGF0ZS5maWxsQ29sb3IgPT0gY29sb3Ip
OwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZEZpbGxCcnVzaCA9IGJydXNoV2l0
aENvbG9yKGZpbGxDb2xvcigpKTsKLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkgewotICAgICAgICBh
dXRvIGZvbnRTbW9vdGhpbmdNb2RlID0gZW5hYmxlID8gRDJEMV9URVhUX0FOVElBTElBU19NT0RF
X0NMRUFSVFlQRSA6IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9BTElBU0VEOwotICAgICAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlNldFRleHRBbnRpYWxpYXNNb2RlKGZv
bnRTbW9vdGhpbmdNb2RlKTsKLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkgewotICAgICAgICBBU1NFUlQobV9zdGF0ZS5h
bHBoYSA9PSBhbHBoYSk7Ci0gICAgICAgIG1fZGF0YS0+c2V0QWxwaGEoYWxwaGEpOwotICAgIH0K
LQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpIHsKLSAgICAgICAgRDJEMV9JTlRFUlBPTEFUSU9OX01P
REUgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7Ci0K
LSAgICAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxp
dHk6OkRlZmF1bHQ6Ci0gICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01P
REVfTkVBUkVTVF9ORUlHSEJPUjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElu
dGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9sYXRlOgotICAgICAgICAgICAgcXVhbGl0
eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgotICAgICAg
ICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06Ci0g
ICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfQ1VCSUM7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoK
LSAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ISUdIX1FVQUxJ
VFlfQ1VCSUM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAvLyBGSVhN
RTogU2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCksIHF1YWxpdHkpOwot
ICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdChm
bG9hdCBsaW1pdCkKLXsKLSAgICBEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1Db250
ZXh0KCksIGxpbWl0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xlYXJSZWN0KCpw
bGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17
Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGF1dG8mIGNvbnRleHQgPSAq
cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgRGlyZWN0MkQ6OnN0cm9rZVJlY3QoY29udGV4dCwgcmVj
dCwgbGluZVdpZHRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVj
dDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lQ2Fw
KCpwbGF0Zm9ybUNvbnRleHQoKSwgY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZz
ZXQpCi17Ci0gICAgaWYgKGRhc2hPZmZzZXQgPCAwKSB7Ci0gICAgICAgIGZsb2F0IGxlbmd0aCA9
IDA7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgbGVuZ3RoICs9IHN0YXRpY19jYXN0PGZsb2F0PihkYXNoZXNbaV0pOwotICAg
ICAgICBpZiAobGVuZ3RoKQotICAgICAgICAgICAgZGFzaE9mZnNldCA9IGZtb2QoZGFzaE9mZnNl
dCwgbGVuZ3RoKSArIGxlbmd0aDsKLSAgICB9Ci0KLSAgICBEaXJlY3QyRDo6c2V0TGluZURhc2go
KnBsYXRmb3JtQ29udGV4dCgpLCBkYXNoZXMsIGRhc2hPZmZzZXQpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQotewotICAgIERp
cmVjdDJEOjpzZXRMaW5lSm9pbigqcGxhdGZvcm1Db250ZXh0KCksIGpvaW4pOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17
Ci0gICAgRGlyZWN0MkQ6OnNjYWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZSk7Ci0gICAgLy8g
RklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9
IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyb3RhdGUoZmxvYXQg
YW5nbGUpCi17Ci0gICAgRGlyZWN0MkQ6OnJvdGF0ZSgqcGxhdGZvcm1Db250ZXh0KCksIGFuZ2xl
KTsKLSAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9C
ZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnRy
YW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIERpcmVjdDJEOjp0cmFuc2xhdGUoKnBs
YXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKLSAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0Rl
dmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKLXsKLSAgICBEaXJlY3QyRDo6Y29uY2F0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJh
bnNmb3JtKTsKLSAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtu
b3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBEaXJl
Y3QyRDo6U3RhdGU6OnNldENUTSgqcGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7Ci0gICAg
Ly8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0
eSA9IGZhbHNlOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAotewotICAgIHJl
dHVybiBEaXJlY3QyRDo6U3RhdGU6OmdldENUTSgqcGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi1G
bG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQotewotICAgIHJl
dHVybiBEaXJlY3QyRDo6U3RhdGU6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKnBsYXRmb3JtQ29udGV4
dCgpLCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBT
dHJva2VTdHlsZSBzdHJva2VTdHlsZSkKLXsKLSAgICBpZiAoIXdpZHRocy5zaXplKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIERpcmVjdDJEOjpkcmF3TGluZXNGb3JUZXh0KCpwbGF0Zm9ybUNv
bnRleHQoKSwgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJs
aW5lcywgbV9zdGF0ZS5zdHJva2VDb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0xheWVyQ29udGV4dCkKLXsK
LSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmFseSBub3QgbmVlZGVkLgotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmlzQ0FMYXll
ckNvbnRleHQoKSBjb25zdAotewotICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFiYWx5IG5v
dCBuZWVkZWQuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJv
b2wgaXNBY2NlbGVyYXRlZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3Jt
Q29udGV4dCgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKLXsKLSAgICAvLyBUaGlzIGlz
IGEgbm8tb3AgZm9yIERpcmVjdDJELgotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgaWYgKG1fc3Rh
dGUuZmlsbEdyYWRpZW50IHx8IG1fc3RhdGUuZmlsbFBhdHRlcm4pIHsKLSAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGZpbGwgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRp
ZW50IGJydXNoZXMgaW4gRDJELgotICAgICAgICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIERpcmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxh
dGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3RhdGUuZmlsbENvbG9yLCBtX3N0YXRlLnN0cm9r
ZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQotewotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1f
c3RhdGUuc3Ryb2tlUGF0dGVybikgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFi
bGUgdG8gc3Ryb2tlIGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQy
RC4KLSAgICAgICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIERpcmVjdDJEOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCks
IGVsbGlwc2UsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3RhdGUuc3Ryb2tlQ29sb3IsIG1fc3Rh
dGUuc3Ryb2tlVGhpY2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZm
ZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGZvbnRTbW9vdGhpbmcpOwotICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKLSAgICBW
ZWN0b3I8dW5zaWduZWQgc2hvcnQ+IGdseXBocyhudW1HbHlwaHMpOwotICAgIFZlY3RvcjxmbG9h
dD4gaG9yaXpvbnRhbEFkdmFuY2VzKG51bUdseXBocyk7Ci0gICAgVmVjdG9yPERXUklURV9HTFlQ
SF9PRkZTRVQ+IGdseXBoT2Zmc2V0cyhudW1HbHlwaHMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAgICAgIGlmIChpICsgZnJvbSA+PSBnbHlw
aEJ1ZmZlci5hZHZhbmNlc0NvdW50KCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBh
dXRvIGFkdmFuY2UgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhpICsgZnJvbSk7Ci0gICAgICAgIGlm
ICghYWR2YW5jZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGdseXBoc1tpXSA9
IGdseXBoQnVmZmVyLmdseXBoQXQoaSArIGZyb20pOwotICAgICAgICBob3Jpem9udGFsQWR2YW5j
ZXNbaV0gPSBhZHZhbmNlLT53aWR0aCgpOwotICAgICAgICBnbHlwaE9mZnNldHNbaV0uYWR2YW5j
ZU9mZnNldCA9IGFkdmFuY2UtPndpZHRoKCk7Ci0gICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hc2Nl
bmRlck9mZnNldCA9IGFkdmFuY2UtPmhlaWdodCgpOwotICAgIH0KLQotICAgIGRvdWJsZSBzeW50
aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0KLSAgICBhdXRv
JiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdH
bHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCBncmFw
aGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29u
dGV4dCgpKSwKLSAgICAgICAgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIGZv
bnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGdseXBocywgaG9yaXpvbnRhbEFkdmFuY2VzLCBnbHlw
aE9mZnNldHMsIHhPZmZzZXQsCi0gICAgICAgIHN0YXRlLnRleHREcmF3aW5nTW9kZSwgc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yKTsK
LX0KLQotR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29u
dGV4dCYpPiYmKQotewotICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi0gICAgcmV0dXJu
IENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdDo6U3VjY2VzczsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0g
YnVmZmVyLmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgaWYgKCFpbWFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byogY29udGV4dCA9ICZncmFwaGljc0NvbnRleHQo
KTsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKGNvbnRleHQpKQotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0jaWYgRU5BQkxF
KFZJREVPKQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGFpbnRGcmFtZUZvck1lZGlh
KE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JikKLXsKLSAgICAvLyBGSVhNRTogTm90IGlt
cGxlbWVudGVkLgotfQotI2VuZGlmCi0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRH
TERpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCShub25leGlzdGVu
dCkKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuaCIKLQotI2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKERJUkVDVDJEKQotCi0jaW5j
bHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rv
ci5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2lu
Y2x1ZGUgPGQyZDFlZmZlY3RzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR3JhcGhpY3ND
b250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6fkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3Io
KSA9IGRlZmF1bHQ7Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0
cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9y
UHJvZmlsZSwgYm9vbCBpZ25vcmVOYXRpdmVJbWFnZUFscGhhUHJlbXVsdGlwbGljYXRpb24pCi17
Ci0gICAgaWYgKCFtX2ltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xHTDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgY29u
c3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKCFpbWFnZVBpeGVscyB8fCBpbWFnZVNpemUu
aXNFbXB0eSgpIHx8IGNhbnZhc1NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoV0VCR0wpICYmIFVTRShESVJFQ1QyRCkKClByb3BlcnR5IGNoYW5nZXMgb246
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERp
cmVjdDJELmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAj
IwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKRGVsZXRlZDogc3ZuOmtl
eXdvcmRzCiMjIC0xICswLDAgIyMKLURhdGUgQXV0aG9yIElkIFJldmlzaW9uIEhlYWRVUkwKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGVEaXJlY3QyRC5oCShub25leGlzdGVudCkKQEAgLTEsMTQwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8ZDJk
MV8xLmg+Ci0jaW5jbHVkZSA8ZDJkMWVmZmVjdHMuaD4KLSNpbmNsdWRlIDxkMmQxaGVscGVyLmg+
Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHd0Zi9UaW55TFJVQ2FjaGUuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIEdyYXBoaWNz
Q29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwotICAgIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZShzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+
JiYsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwotICAgIH5H
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKTsKLQotICAgIHZvaWQgc3luY0NvbnRleHQo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKTsKLQotICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCBvcGFjaXR5KTsKLSAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0K
LSAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBjbGlwKGNvbnN0IFBh
dGgmKTsKLSAgICB2b2lkIGNsaXAoSUQyRDFHZW9tZXRyeSopOwotCi0gICAgdm9pZCBiZWdpbkRy
YXcoKTsKLSAgICB2b2lkIGVuZERyYXcoKTsKLSAgICB2b2lkIGZsdXNoKCk7Ci0gICAgdm9pZCBz
YXZlKCk7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICB2b2lkIHJlc3Rv
cmUoKTsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCk7Ci0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQs
IGZsb2F0KTsKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAg
ICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLQotICAgIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwKTsKLSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKTsKLSAgICB2b2lk
IHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlKTsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxv
YXQpOwotICAgIHZvaWQgc2V0RGFzaE9mZnNldChmbG9hdCk7Ci0gICAgdm9pZCBzZXRQYXR0ZXJu
V2lkdGgoZmxvYXQpOwotICAgIHZvaWQgc2V0UGF0dGVybk9mZnNldChmbG9hdCk7Ci0gICAgdm9p
ZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQpOwotICAgIHZvaWQgc2V0RGFzaGVzKGNvbnN0IERh
c2hBcnJheSYpOwotICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQpOwotCi0gICAgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCgpIHsgcmV0dXJuIG1fcGxhdGZvcm1Db250ZXh0
OyB9Ci0gICAgSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCgpOwotCi0gICAgSERDIG1f
aGRjIHsgbnVsbHB0ciB9OwotCi0gICAgZmxvYXQgY3VycmVudEdsb2JhbEFscGhhKCkgY29uc3Q7
Ci0KLSAgICBEMkQxX1NUUk9LRV9TVFlMRV9QUk9QRVJUSUVTIHN0cm9rZVN0eWxlUHJvcGVydGll
cygpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRD4gbV9vd25lZFBsYXRmb3JtQ29udGV4dDsKLSAgICBQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYgbV9wbGF0Zm9ybUNvbnRleHQ7Ci0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0OjpC
aXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSBtX3JlbmRlcmVyVHlwZTsKLQotICAgIHVuc2lnbmVk
IGJlZ2luRHJhd0NvdW50IHsgMCB9OwotCi0gICAgZmxvYXQgbV9hbHBoYSB7IDEuMCB9OwotCi0g
ICAgZnJpZW5kIGNsYXNzIEQyRENvbnRleHRTdGF0ZVNhdmVyOwotfTsKLQotY2xhc3MgRDJEQ29u
dGV4dFN0YXRlU2F2ZXIgewotcHVibGljOgotICAgIEQyRENvbnRleHRTdGF0ZVNhdmVyKEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSYgY29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9
IHRydWUpCi0gICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgICAgICwgbV9zYXZlQW5k
UmVzdG9yZShzYXZlQW5kUmVzdG9yZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0
b3JlKQotICAgICAgICAgICAgbV9jb250ZXh0Lm1fcGxhdGZvcm1Db250ZXh0LnNhdmUoKTsKLSAg
ICB9Ci0KLSAgICB+RDJEQ29udGV4dFN0YXRlU2F2ZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1f
c2F2ZUFuZFJlc3RvcmUpCi0gICAgICAgICAgICBtX2NvbnRleHQubV9wbGF0Zm9ybUNvbnRleHQu
cmVzdG9yZSgpOwotICAgIH0KLQotICAgIHZvaWQgc2F2ZSgpCi0gICAgewotICAgICAgICBBU1NF
UlQoIW1fc2F2ZUFuZFJlc3RvcmUpOwotICAgICAgICBtX2NvbnRleHQubV9wbGF0Zm9ybUNvbnRl
eHQuc2F2ZSgpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHJlc3RvcmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUp
OwotICAgICAgICBtX2NvbnRleHQubV9wbGF0Zm9ybUNvbnRleHQucmVzdG9yZSgpOwotICAgICAg
ICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBkaWRTYXZlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3NhdmVBbmRSZXN0b3JlOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IG93
bmVkUGxhdGZvcm1Db250ZXh0OwotICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSYg
bV9jb250ZXh0OwotICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZSB7IGZhbHNlIH07Ci19OwotCi19
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDYgQEAKIAogI2lmIFVTRShDRykKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIgotI2VsaWYgVVNFKERJUkVDVDJEKQot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCiAjZW5k
aWYKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgpAQCAtNDAsNyArMzgsNiBAQAogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4K
IAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB2b2lkIGZpbGxXaXRoQ2xlYXJDb2xv
cihIQklUTUFQIGJpdG1hcCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmgJKHJldmlzaW9uIDI4Nzgx
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDYgQEAKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRDRy5oIgogI2RlZmluZSBHcmFwaGljc0NvbnRleHRXaW4gR3JhcGhpY3NDb250
ZXh0Q0cKIAotI2VsaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQuaCIKLSNkZWZpbmUgR3JhcGhpY3NDb250ZXh0V2luIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJECi0KICNlbGlmIFVTRShDQUlSTykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENh
aXJvLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NMYXllckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NMYXllckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJE
aXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw5MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NMYXllckRpcmVjdDJELmgiCi0KLSNpZiBVU0UoRElSRUNUMkQp
Ci0KLSNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJGYWN0
b3J5LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDxsaW1pdHMuaD4K
LSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgotI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgotI2luY2x1ZGUgPHd0Zi9TeXN0ZW1U
cmFjaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLQotI2lmIENPTVBJ
TEVSKE1TVkMpCi0vLyBTZWUgaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFy
eS8xd2VhNXp3ZS5hc3B4Ci0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMSkKLSNlbmRpZgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVy
OjpjcmVhdGUoR3JhcGhpY3NMYXllckZhY3RvcnkqIGZhY3RvcnksIEdyYXBoaWNzTGF5ZXJDbGll
bnQmIGNsaWVudCwgVHlwZSBsYXllclR5cGUpCi17Ci0gICAgaWYgKGZhY3RvcnkpIHsKLSAgICAg
ICAgYXV0byBsYXllciA9IGZhY3RvcnktPmNyZWF0ZUdyYXBoaWNzTGF5ZXIobGF5ZXJUeXBlLCBj
bGllbnQpOwotICAgICAgICBsYXllci0+aW5pdGlhbGl6ZShsYXllclR5cGUpOwotICAgICAgICBy
ZXR1cm4gbGF5ZXI7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFJldHVybiBhIHJlYWwgRGlyZWN0
MkQgZ3JhcGhpY3MgbGF5ZXIKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHcmFwaGljc0xheWVy
RGlyZWN0MkQobGF5ZXJUeXBlLCBjbGllbnQpKTsKLX0KLQotR3JhcGhpY3NMYXllckRpcmVjdDJE
OjpHcmFwaGljc0xheWVyRGlyZWN0MkQoVHlwZSBsYXllclR5cGUsIEdyYXBoaWNzTGF5ZXJDbGll
bnQmIGNsaWVudCkKLSAgICA6IEdyYXBoaWNzTGF5ZXIobGF5ZXJUeXBlLCBjbGllbnQpCi17Ci19
Ci0KLXZvaWQgR3JhcGhpY3NMYXllckRpcmVjdDJEOjppbml0aWFsaXplKFR5cGUgbGF5ZXJUeXBl
KQotewotfQotCi1HcmFwaGljc0xheWVyRGlyZWN0MkQ6On5HcmFwaGljc0xheWVyRGlyZWN0MkQo
KQotewotICAgIHdpbGxCZURlc3Ryb3llZCgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJEaXJl
Y3QyRDo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBpZiAoIWRyYXdzQ29udGVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNz
TGF5ZXJEaXJlY3QyRDo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgciwg
U2hvdWxkQ2xpcFRvTGF5ZXIgc2hvdWxkQ2xpcCkKLXsKLSAgICBpZiAoIWRyYXdzQ29udGVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJEaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGlyZWN0MkQuaAko
cmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzTGF5ZXJEaXJlY3QyRC5oCShub25leGlzdGVudCkKQEAgLTEsNjEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgRGlzcGxheUxpc3Qg
ewotY2xhc3MgRGlzcGxheUxpc3Q7Ci19Ci0KLWNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7Ci1jbGFz
cyBJbWFnZTsKLWNsYXNzIFRyYW5zZm9ybVN0YXRlOwotCi1jbGFzcyBHcmFwaGljc0xheWVyRGly
ZWN0MkQgOiBwdWJsaWMgR3JhcGhpY3NMYXllciB7Ci1wdWJsaWM6Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCBleHBsaWNpdCBHcmFwaGljc0xheWVyRGlyZWN0MkQoVHlwZSwgR3JhcGhpY3NMYXllckNs
aWVudCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkdyYXBoaWNzTGF5ZXJEaXJlY3Qy
RCgpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5pdGlhbGl6ZShUeXBl
KSBvdmVycmlkZTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkg
b3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgU2hvdWxkQ2xpcFRvTGF5ZXIgPSBDbGlwVG9MYXllcikgb3ZlcnJp
ZGU7Ci0KLSAgICBib29sIGlzR3JhcGhpY3NMYXllckNBKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19HUkFQSElDU0xBWUVSKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJEaXJlY3QyRCwg
aXNHcmFwaGljc0xheWVyQ0EoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAkobm9uZXhpc3RlbnQpCkBA
IC0xLDMyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZC5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2Uu
aCIKLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVj
dDJELmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxkMmQxXzEu
aD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8d2luY29kZWMuaD4KLSNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kKTsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKLXsKLSAgICBJbnRTaXpl
IGJhY2tlbmRTaXplID0gY2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
KTsKLSAgICBpZiAoYmFja2VuZFNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIGF1dG8qIHBsYXRmb3JtQ29udGV4dCA9IHRhcmdldENvbnRleHQgPyB0YXJnZXRD
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSA6IG51bGxwdHI7Ci0gICAgYXV0byogcmVuZGVyVGFy
Z2V0ID0gcGxhdGZvcm1Db250ZXh0ID8gcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSA6
IG51bGxwdHI7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgcmVuZGVyVGFyZ2V0
ID0gR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBhdXRvIGJp
dG1hcENvbnRleHQgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0T2ZTaXplKHNp
emUsIHJlbmRlclRhcmdldCwgcmVzb2x1dGlvblNjYWxlKTsKLSAgICBpZiAoIWJpdG1hcENvbnRl
eHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBsYXRmb3JtSW1hZ2VQdHIgYml0bWFwOwotICAg
IEhSRVNVTFQgaHIgPSBiaXRtYXBDb250ZXh0LT5HZXRCaXRtYXAoJmJpdG1hcCk7Ci0gICAgaWYg
KCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHBsYXRmb3JtQ29u
dGV4dCA9IG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+KGJpdG1hcENvbnRleHQu
Z2V0KCksIFt0aGlzXSgpIHsKLSAgICAgICAgbV9kYXRhLmxvYWREYXRhVG9CaXRtYXBJZk5lZWRl
ZCgpOwotICAgIH0sIFt0aGlzXSgpIHsKLSAgICAgICAgbV9kYXRhLm1hcmtCdWZmZXJPdXRPZlN5
bmMoKTsKLSAgICB9KTsKLQotICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ+KHBsYXRmb3JtQ29udGV4dC5nZXQoKSwgR3JhcGhpY3NDb250ZXh0OjpCaXRt
YXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKLSAgICBpZiAoIWNvbnRleHQpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4obmV3IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKHNp
emUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUocGxh
dGZvcm1Db250ZXh0KSwgV1RGTW92ZShjb250ZXh0KSwgV1RGTW92ZShiaXRtYXApKSk7Ci19Ci0K
LXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsIG51bGxw
dHIpOwotfQotCi1JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6SW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFj
a2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNv
bG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4mJiBwbGF0
Zm9ybUNvbnRleHQsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCwg
UGxhdGZvcm1JbWFnZVB0ciYmIGJpdG1hcCkKLSAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxv
Z2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQotICAg
ICwgbV9wbGF0Zm9ybUNvbnRleHQoV1RGTW92ZShwbGF0Zm9ybUNvbnRleHQpKQotICAgICwgbV9j
b250ZXh0KFdURk1vdmUoY29udGV4dCkpCi0gICAgLCBtX2JpdG1hcChXVEZNb3ZlKGJpdG1hcCkp
Ci17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNv
bnRleHQoKSBjb25zdAotewotICAgIHJldHVybiAqbV9jb250ZXh0OwotfQotCi12b2lkIEltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpmbHVzaENvbnRleHQoKQotewotICAgIGNvbnRleHQoKS5m
bHVzaCgpOwotfQotCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0
Ci17Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7Ci0g
ICAgSFJFU1VMVCBociA9IGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0
KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGlt
YWdlOwotICAgIGhyID0gYml0bWFwVGFyZ2V0LT5HZXRCaXRtYXAoJmltYWdlKTsKLSAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICAvLyBGSVhNRTogbV9kYXRhLmRhdGEgaXMgbnVsbHB0
ciBldmVuIHdoZW4gYXNraW5nIHRvIGNvcHkgYmFja2luZyBzdG9yZSBsZWFkaW5nIHRvIHRlc3Qg
ZmFpbHVyZXMuCi0gICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlICYmIG1f
ZGF0YS5kYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgY29weUJlaGF2aW9yID0gRG9udENvcHlCYWNr
aW5nU3RvcmU7Ci0KLSAgICBDaGVja2VkU2l6ZSBudW1CeXRlcyA9IENoZWNrZWRVaW50MzIobV9k
YXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93OwotICAg
IGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlKSB7Ci0gICAgICAgIEQy
RDFfUkVDVF9VIGJhY2tpbmdTdG9yZURpbWVuc3Rpb25zID0gSW50UmVjdChJbnRQb2ludCgpLCBt
X2RhdGEuYmFja2luZ1N0b3JlU2l6ZSk7Ci0gICAgICAgIGltYWdlLT5Db3B5RnJvbU1lbW9yeSgm
YmFja2luZ1N0b3JlRGltZW5zdGlvbnMsIG1fZGF0YS5kYXRhLmRhdGEoKSwgMzIpOwotCi0gICAg
fQotCi0gICAgcmV0dXJuIE5hdGl2ZUltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOwotfQot
Ci1zdGF0aWMgUGxhdGZvcm1JbWFnZVB0ciBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShJ
RDJEMUJpdG1hcFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0LCBJRDJEMUJpdG1hcCogaW1hZ2Us
IGNvbnN0IEludFNpemUmIGJvdW5kcykKLXsKLSAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gaW1h
Z2UgPyBuYXRpdmVJbWFnZVNpemUoaW1hZ2UpIDogRmxvYXRTaXplKCk7Ci0KLSAgICBpZiAoaW1h
Z2UgJiYgKHN0YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VTaXplLndpZHRoKCkpICE9IHN0YXRpY19j
YXN0PHNpemVfdD4oYm91bmRzLndpZHRoKCkpIHx8IHN0YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VT
aXplLmhlaWdodCgpKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKSB7
Ci0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY3JvcHBlZEJpdG1hcCA9IERpcmVjdDJEOjpj
cmVhdGVCaXRtYXAoYml0bWFwVGFyZ2V0LCBib3VuZHMpOwotICAgICAgICBpZiAoY3JvcHBlZEJp
dG1hcCkgewotICAgICAgICAgICAgYXV0byBzb3VyY2VSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwg
Ym91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBIUkVTVUxUIGhy
ID0gY3JvcHBlZEJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgaW1hZ2UsICZzb3VyY2VS
ZWN0KTsKLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBjcm9wcGVkQml0bWFwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGltYWdl
OwotfQotCi1zdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGlu
Z0lmTmVlZGVkKElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQsIENPTVB0cjxJ
RDJEMUJpdG1hcD4mJiBpbWFnZSwgSW50U2l6ZSBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBp
ZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZl
UmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVj
ZXNzYXJ5KGJpdG1hcFRhcmdldCwgaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBzY2FsZWQgdmVyc2lvbgot
ICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLQotICAgIGlmICghaW1hZ2UpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RG
TW92ZShpbWFnZSkpOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgUGxhdGZvcm1JbWFnZVB0
ciBpbWFnZTsKLSAgICBpZiAocmVzb2x1dGlvblNjYWxlKCkgPT0gMSB8fCBwcmVzZXJ2ZVJlc29s
dXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY29weU5h
dGl2ZUltYWdlKGNvcHlCZWhhdmlvciktPnBsYXRmb3JtSW1hZ2UoKTsKLSAgICBlbHNlCi0gICAg
ICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKS0+cGxhdGZv
cm1JbWFnZSgpOwotCi0gICAgYXV0byBiaXRtYXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PElE
MkQxQml0bWFwUmVuZGVyVGFyZ2V0Kj4oY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKLSAg
ICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJn
ZXQsIFdURk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgcmVzb2x1dGlvblNjYWxlKCksIHBy
ZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1
dGlvbikKLXsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdl
dDsKLSAgICBIUkVTVUxUIGhyID0gY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJU
YXJnZXQoKS0+UXVlcnlJbnRlcmZhY2UoJmJpdG1hcFRhcmdldCk7Ci0gICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFBsYXRmb3JtSW1hZ2VQdHIg
aW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpLT5wbGF0Zm9ybUlt
YWdlKCk7Ci0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQo
Yml0bWFwVGFyZ2V0LmdldCgpLCBXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCksIHJlc29s
dXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1QbGF0Zm9ybUltYWdlUHRy
IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb21wYXRpYmxlQml0bWFwKElEMkQxUmVuZGVy
VGFyZ2V0KiByZW5kZXJUYXJnZXQpCi17Ci0gICAgbG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCk7
Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgcmV0dXJuIGJpdG1hcDsKLQotICAg
IGlmIChtX3BsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkgPT0gcmVuZGVyVGFyZ2V0KSB7
Ci0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0KFF1
ZXJ5LCByZW5kZXJUYXJnZXQpOwotICAgICAgICBpZiAoYml0bWFwVGFyZ2V0KSB7Ci0gICAgICAg
ICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJhY2tpbmdCaXRtYXA7Ci0gICAgICAgICAgICBpZiAo
U1VDQ0VFREVEKGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZiYWNraW5nQml0bWFwKSkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoYmFja2luZ0JpdG1hcCAhPSBtX2JpdG1hcCkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGJpdG1hcDsKLQotICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGRy
YXcgYW4gSUQyRDFCaXRtYXAgdG8gaXRzZWxmLiBNdXN0IHJldHVybiBhIGNvcHkuCi0gICAgICAg
ICAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb3BpZWRCaXRtYXA7Ci0gICAgICAgICAgICAg
ICAgaWYgKFNVQ0NFRURFRChyZW5kZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBp
eGVsU2l6ZSgpLCBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpLCAmY29waWVkQml0bWFwKSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChjb3BpZWRCaXRtYXAtPkNvcHlG
cm9tQml0bWFwKG51bGxwdHIsIG1fYml0bWFwLmdldCgpLCBudWxscHRyKSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY29waWVkQml0bWFwOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gc2l6ZSA9IG1fYml0bWFw
LT5HZXRQaXhlbFNpemUoKTsKLSAgICBBU1NFUlQoc2l6ZS5oZWlnaHQgJiYgc2l6ZS53aWR0aCk7
Ci0KLSAgICBDaGVja2VkVWludDMyIG51bUJ5dGVzID0gc2l6ZS53aWR0aCAqIHNpemUuaGVpZ2h0
ICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIC8vIENvcHkgdGhlIGJpdHMgZnJvbSBjdXJyZW50IHJlbmRlclRhcmdl
dCB0byB0aGUgb3V0cHV0IHRhcmdldC4KLSAgICAvLyBXZSBjYW5ub3QgYWNjZXNzIHRoZSBkYXRh
IGJhY2tpbmcgYW4gSVdJQ0JpdG1hcCB3aGlsZSBhbiBhY3RpdmUgZHJhdyBzZXNzaW9uIGlzIG9w
ZW4uCi0gICAgY29udGV4dC0+ZW5kRHJhdygpOwotCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29u
dGV4dD4gc291cmNlRGV2aWNlQ29udGV4dCA9IG1fcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VDb250
ZXh0KCk7Ci0gICAgaWYgKCFzb3VyY2VEZXZpY2VDb250ZXh0KQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcDE+IHNvdXJjZUNQVUJpdG1hcDsKLSAgICBE
MkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJv
cGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElP
TlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKLSAgICBIUkVTVUxUIGhy
ID0gc291cmNlRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKG1fYml0bWFwLT5HZXRQaXhlbFNp
emUoKSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3csIGJpdG1hcFByb3BlcnRpZXMsICZzb3VyY2VDUFVC
aXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBpZiAoIXNvdXJjZUNQVUJpdG1hcCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgbV9iaXRt
YXAuZ2V0KCksIG51bGxwdHIpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBlZFNvdXJjZURhdGE7Ci0g
ICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZtYXBw
ZWRTb3VyY2VEYXRhKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gdGFyZ2V0RGV2aWNlQ29u
dGV4dDsKLSAgICBociA9IHJlbmRlclRhcmdldC0+UXVlcnlJbnRlcmZhY2UoJnRhcmdldERldmlj
ZUNvbnRleHQpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENPTVB0cjxJRDJE
MUJpdG1hcD4gY29tcGF0aWJsZUJpdG1hcDsKLSAgICBociA9IHRhcmdldERldmljZUNvbnRleHQt
PkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBtYXBwZWRTb3VyY2VEYXRhLmJp
dHMsIG1hcHBlZFNvdXJjZURhdGEucGl0Y2gsIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCks
ICZjb21wYXRpYmxlQml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPlVubWFwKCk7Ci0gICAg
QVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgY29udGV4dC0+YmVnaW5EcmF3KCk7Ci0KLSAg
ICByZXR1cm4gY29tcGF0aWJsZUJpdG1hcDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBz
cmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUoKSk7Ci0K
LSAgICBhdXRvIGNvbXBhdGlibGVCaXRtYXAgPSBjb21wYXRpYmxlQml0bWFwKGRlc3RDb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKSk7Ci0KLSAgICBGbG9hdFNpemUgY3Vy
cmVudEltYWdlU2l6ZSA9IG5hdGl2ZUltYWdlU2l6ZShjb21wYXRpYmxlQml0bWFwKTsKLSAgICBp
ZiAoY3VycmVudEltYWdlU2l6ZS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGVz
dENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGNvbXBhdGlibGVCaXRtYXAsIGN1cnJlbnRJbWFnZVNp
emUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNy
Y1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKHJlc29sdXRpb25TY2FsZSgpKTsKLQot
ICAgIGlmIChhdXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgp
ID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgaW1h
Z2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNsaXBUb01hc2soR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1TdHJpbmcgSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmLCBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4sIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWludDhfdD4g
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1
ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6
Z2V0UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBudWxscHRyKTsKLX0KLQotdm9p
ZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxC
dWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVy
KHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG51bGxwdHIpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaAkocmV2aXNpb24gMjg3ODEyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNF
KERJUkVDVDJEKQotCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCi0jaW5jbHVkZSA8
d3RmL0lzb01hbGxvYy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7Ci0gICAgV1RG
X01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCk7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQpOwotcHVibGljOgot
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IGNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqKTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0Jik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVy
cmlkZTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlOwotCi0gICAgUmVmUHRyPE5h
dGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5n
U3RvcmUpIGNvbnN0IG92ZXJyaWRlOwotICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tp
bmdTdG9yZUNvcHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBS
ZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlkZTsK
LQotICAgIHZvaWQgY2xpcFRvTWFzayhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KSBvdmVycmlkZTsKLQotICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1
dGlvbikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3Zl
cnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihj
b25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7Ci0KLXByb3RlY3RlZDoKLSAg
ICBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+
IG1fcGxhdGZvcm1Db250ZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+
IG1fY29udGV4dDsKLSAgICBQbGF0Zm9ybUltYWdlUHRyIG1fYml0bWFwOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VE
ZWNvZGVyRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3BwCShub25leGlzdGVu
dCkKQEAgLTEsMzA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZURlY29k
ZXJEaXJlY3QyRC5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgIkludFBv
aW50LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1
ZGUgPFdpbkNvZGVjLmg+Ci0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUltYWdlRGVjb2RlckRpcmVjdDJE
OjpJbWFnZURlY29kZXJEaXJlY3QyRCgpCi17Ci19Ci0KLUlXSUNJbWFnaW5nRmFjdG9yeTIqIElt
YWdlRGVjb2RlckRpcmVjdDJEOjpzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpCi17Ci0gICAgc3RhdGlj
IElXSUNJbWFnaW5nRmFjdG9yeTIqIHdpY0ltYWdpbmdGYWN0b3J5ID0gbnVsbHB0cjsKLSAgICBp
ZiAoIXdpY0ltYWdpbmdGYWN0b3J5KSB7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBDb0NyZWF0ZUlu
c3RhbmNlKENMU0lEX1dJQ0ltYWdpbmdGYWN0b3J5LCBudWxscHRyLCBDTFNDVFhfSU5QUk9DX1NF
UlZFUiwgSUlEX0lXSUNJbWFnaW5nRmFjdG9yeTIsIChMUFZPSUQqKSZ3aWNJbWFnaW5nRmFjdG9y
eSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIH0KLQotICAg
IHJldHVybiB3aWNJbWFnaW5nRmFjdG9yeTsKLX0KLQotc2l6ZV90IEltYWdlRGVjb2RlckRpcmVj
dDJEOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKSBjb25zdAotewotICAgIC8v
IFNldCB0byBtYXRjaCB2YWx1ZSB1c2VkIGZvciBDb3JlR3JhcGhpY3MuCi0gICAgcmV0dXJuIDEz
MDg4OwotfQotCi1TdHJpbmcgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmZpbGVuYW1lRXh0ZW5zaW9u
KCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsK
LX0KLQotYm9vbCBJbWFnZURlY29kZXJEaXJlY3QyRDo6aXNTaXplQXZhaWxhYmxlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9uYXRpdmVEZWNvZGVyID8gdHJ1ZSA6IGZhbHNlOwotfQotCi1FbmNv
ZGVkRGF0YVN0YXR1cyBJbWFnZURlY29kZXJEaXJlY3QyRDo6ZW5jb2RlZERhdGFTdGF0dXMoKSBj
b25zdAotewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4gRW5jb2Rl
ZERhdGFTdGF0dXM6OkVycm9yOwotCi0gICAgLy8gRklYTUU6IEhvb2sgaW50byBXSUMgZGVjb2Rl
ciAoaWYgYXN5bmMgZGVjb2RlIGlzIGV2ZW4gcG9zc2libGUpCi0gICAgcmV0dXJuIEVuY29kZWRE
YXRhU3RhdHVzOjpDb21wbGV0ZTsKLX0KLQotSW50U2l6ZSBJbWFnZURlY29kZXJEaXJlY3QyRDo6
c2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX25hdGl2ZURlY29kZXIpCi0gICAgICAgIHJldHVy
biBJbnRTaXplKCk7Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2RlPiBmcmFtZTsK
LSAgICBIUkVTVUxUIGhyID0gbV9uYXRpdmVEZWNvZGVyLT5HZXRGcmFtZSgwLCAmZnJhbWUpOwot
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAg
IFVJTlQgd2lkdGgsIGhlaWdodDsKLSAgICBociA9IGZyYW1lLT5HZXRTaXplKCZ3aWR0aCwgJmhl
aWdodCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgp
OwotCi0gICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7Ci19Ci0KLXNpemVfdCBJbWFn
ZURlY29kZXJEaXJlY3QyRDo6ZnJhbWVDb3VudCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX25hdGl2
ZURlY29kZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVUlOVCBjb3VudDsKLSAgICBIUkVT
VUxUIGhyID0gbV9uYXRpdmVEZWNvZGVyLT5HZXRGcmFtZUNvdW50KCZjb3VudCk7Ci0gICAgaWYg
KCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBjb3VudDsK
LX0KLQotUmVwZXRpdGlvbkNvdW50IEltYWdlRGVjb2RlckRpcmVjdDJEOjpyZXBldGl0aW9uQ291
bnQoKSBjb25zdAotewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4g
UmVwZXRpdGlvbkNvdW50Tm9uZTsKLQotICAgIC8vIEZJWE1FOiBJZGVudGlmeSBpbWFnZSB0eXBl
LCBhbmQgZGV0ZXJtaW5lIHByb3BlciByZXBldGl0aW9uIGNvdW50LgotICAgIHJldHVybiBSZXBl
dGl0aW9uQ291bnROb25lOwotfQotCi1zdGQ6Om9wdGlvbmFsPEludFBvaW50PiBJbWFnZURlY29k
ZXJEaXJlY3QyRDo6aG90U3BvdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LX0KLQotSW50U2l6ZSBJbWFnZURlY29kZXJEaXJlY3QyRDo6ZnJhbWVTaXplQXRJbmRleChzaXpl
X3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAg
IENPTVB0cjxJV0lDQml0bWFwRnJhbWVEZWNvZGU+IGZyYW1lOwotICAgIEhSRVNVTFQgaHIgPSBt
X25hdGl2ZURlY29kZXItPkdldEZyYW1lKGluZGV4LCAmZnJhbWUpOwotICAgIGlmICghU1VDQ0VF
REVEKGhyKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIFVJTlQgd2lkdGgsIGhl
aWdodDsKLSAgICBociA9IGZyYW1lLT5HZXRTaXplKCZ3aWR0aCwgJmhlaWdodCk7Ci0gICAgaWYg
KCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgcmV0dXJu
IEludFNpemUod2lkdGgsIGhlaWdodCk7Ci19Ci0KLWJvb2wgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6
OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAotewotICAgIGlmICgh
bV9uYXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDT01QdHI8SVdJ
Q0JpdG1hcEZyYW1lRGVjb2RlPiBmcmFtZTsKLSAgICBIUkVTVUxUIGhyID0gbV9uYXRpdmVEZWNv
ZGVyLT5HZXRGcmFtZShpbmRleCwgJmZyYW1lKTsKLSAgICByZXR1cm4gU1VDQ0VFREVEKGhyKTsK
LX0KLUltYWdlRGVjb2Rlcjo6RnJhbWVNZXRhZGF0YSBJbWFnZURlY29kZXJEaXJlY3QyRDo6ZnJh
bWVNZXRhZGF0YUF0SW5kZXgoc2l6ZV90KSBjb25zdCBmaW5hbDsKLXsKLSAgICBpZiAoIW1fbmF0
aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIENPTVB0cjxJV0lDQml0bWFw
RnJhbWVEZWNvZGU+IGZyYW1lOwotICAgIEhSRVNVTFQgaHIgPSBtX25hdGl2ZURlY29kZXItPkdl
dEZyYW1lKGluZGV4LCAmZnJhbWUpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAg
cmV0dXJuIHsgfTsKLQotICAgIENPTVB0cjxJV0lDTWV0YWRhdGFRdWVyeVJlYWRlcj4gbWV0YWRh
dGE7Ci0gICAgaHIgPSBmcmFtZS0+R2V0TWV0YWRhdGFRdWVyeVJlYWRlcigmbWV0YWRhdGEpOwot
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFBST1BW
QVJJQU5UIHZhbHVlOwotICAgIFByb3BWYXJpYW50SW5pdCgmdmFsdWUpOwotICAgIGhyID0gbWV0
YWRhdGEtPkdldE1ldGFkYXRhQnlOYW1lKEwiU3lzdGVtLlBob3RvLk9yaWVudGF0aW9uIiwgJnZh
bHVlKTsKLSAgICBpZiAoU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIHsgSW1hZ2VPcmll
bnRhdGlvbihzdGF0aWNfY2FzdDxJbWFnZU9yaWVudGF0aW9uOjpPcmllbnRhdGlvbj4odmFsdWUu
dWlWYWwpKSwgc3RkOjpudWxsb3B0IH07Ci0KLSAgICByZXR1cm4geyB9OwotfQotCi1TZWNvbmRz
IEltYWdlRGVjb2RlckRpcmVjdDJEOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX25hdGl2ZURlY29kZXIpCi0gICAgICAgIHJldHVybiBTZWNv
bmRzKDApOwotCi0gICAgQ09NUHRyPElXSUNCaXRtYXBGcmFtZURlY29kZT4gZnJhbWU7Ci0gICAg
SFJFU1VMVCBociA9IG1fbmF0aXZlRGVjb2Rlci0+R2V0RnJhbWUoaW5kZXgsICZmcmFtZSk7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gU2Vjb25kcygwKTsKLQotICAg
IC8vIEZJWE1FOiBGaWd1cmUgb3V0IGNvcnJlY3QgaW1hZ2UgZm9ybWF0LXNwZWNpZmljIHF1ZXJ5
IGZvciBmcmFtZSBkdXJhdGlvbiBjaGVjay4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBTZWNvbmRzKDApOwotfQotCi1ib29sIEltYWdlRGVjb2RlckRpcmVjdDJEOjpmcmFtZUFs
bG93U3Vic2FtcGxpbmdBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKLXsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBJbWFnZURlY29kZXJEaXJlY3QyRDo6ZnJhbWVIYXNBbHBoYUF0SW5k
ZXgoc2l6ZV90IGluZGV4KSBjb25zdAotewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2RlPiBm
cmFtZTsKLSAgICBIUkVTVUxUIGhyID0gbV9uYXRpdmVEZWNvZGVyLT5HZXRGcmFtZShpbmRleCwg
JmZyYW1lKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIENPTVB0cjxJV0lDTWV0YWRhdGFRdWVyeVJlYWRlcj4gbWV0YWRhdGE7Ci0gICAgaHIg
PSBmcmFtZS0+R2V0TWV0YWRhdGFRdWVyeVJlYWRlcigmbWV0YWRhdGEpOwotICAgIGlmICghU1VD
Q0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1VJRCBjb250YWluZXJG
b3JtYXQ7Ci0gICAgaHIgPSBtZXRhZGF0YS0+R2V0Q29udGFpbmVyRm9ybWF0KCZjb250YWluZXJG
b3JtYXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKDo6SXNFcXVhbEdVSUQoR1VJRF9Db250YWluZXJGb3JtYXRKcGVnLCBjb250YWlu
ZXJGb3JtYXQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdW5zaWduZWQgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVf
dCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAotewotICAg
IGlmICghbV9uYXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBm
cmFtZVNpemVBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKS5hcmVhKCkgKiA0OwotfQot
Ci12b2lkIEltYWdlRGVjb2RlckRpcmVjdDJEOjpzZXRUYXJnZXRDb250ZXh0KElEMkQxUmVuZGVy
VGFyZ2V0KiByZW5kZXJUYXJnZXQpCi17Ci0gICAgbV9yZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJn
ZXQ7Ci19Ci0KLVBsYXRmb3JtSW1hZ2VQdHIgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmNyZWF0ZUZy
YW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGlu
Z0xldmVsLCBjb25zdCBEZWNvZGluZ09wdGlvbnMmKQotewotICAgIGlmICghbV9uYXRpdmVEZWNv
ZGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghbV9yZW5kZXJUYXJnZXQp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ09NUHRyPElXSUNCaXRtYXBGcmFtZURl
Y29kZT4gZnJhbWU7Ci0gICAgSFJFU1VMVCBociA9IG1fbmF0aXZlRGVjb2Rlci0+R2V0RnJhbWUo
MCwgJmZyYW1lKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgQ09NUHRyPElXSUNGb3JtYXRDb252ZXJ0ZXI+IGNvbnZlcnRlcjsKLSAgICBo
ciA9IHN5c3RlbUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZUZvcm1hdENvbnZlcnRlcigmY29udmVy
dGVyKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgaHIgPSBjb252ZXJ0ZXItPkluaXRpYWxpemUoZnJhbWUuZ2V0KCksIEdVSURfV0lDUGl4
ZWxGb3JtYXQzMmJwcFBSR0JBLCBXSUNCaXRtYXBEaXRoZXJUeXBlTm9uZSwgbnVsbHB0ciwgMC5m
LCBXSUNCaXRtYXBQYWxldHRlVHlwZUN1c3RvbSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJV0lDQml0bWFwPiB3aWNCaXRt
YXA7Ci0gICAgaHIgPSBzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVCaXRtYXBGcm9tU291
cmNlKGNvbnZlcnRlci5nZXQoKSwgV0lDQml0bWFwQ2FjaGVPbkRlbWFuZCwgJndpY0JpdG1hcCk7
Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotICAgIGhyID0gbV9yZW5kZXJUYXJnZXQtPkNy
ZWF0ZUJpdG1hcEZyb21XaWNCaXRtYXAod2ljQml0bWFwLmdldCgpLCAmYml0bWFwKTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJu
IGJpdG1hcDsKLX0KLQotdm9pZCBJbWFnZURlY29kZXJEaXJlY3QyRDo6c2V0RGF0YShjb25zdCBG
cmFnbWVudGVkU2hhcmVkQnVmZmVyJiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSAg
ICBpZiAoIWFsbERhdGFSZWNlaXZlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElX
SUNTdHJlYW0+IHN0cmVhbTsKLSAgICBIUkVTVUxUIGhyID0gc3lzdGVtSW1hZ2luZ0ZhY3Rvcnko
KS0+Q3JlYXRlU3RyZWFtKCZzdHJlYW0pOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgUmVmPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gZGF0YS5tYWtlQ29u
dGlndW91cygpOwotICAgIGNoYXIqIGRhdGFQdHIgPSBjb25zdF9jYXN0PGNoYXIqPihidWZmZXIt
PmRhdGEoKSk7Ci0gICAgaHIgPSBzdHJlYW0tPkluaXRpYWxpemVGcm9tTWVtb3J5KHJlaW50ZXJw
cmV0X2Nhc3Q8QllURSo+KGRhdGFQdHIpLCBkYXRhLnNpemUoKSk7Ci0gICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX25hdGl2ZURlY29kZXIgPSBudWxscHRy
OwotCi0gICAgaHIgPSBzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVEZWNvZGVyRnJvbVN0
cmVhbShzdHJlYW0uZ2V0KCksIG51bGxwdHIsIFdJQ0RlY29kZU1ldGFkYXRhQ2FjaGVPbkRlbWFu
ZCwgJm1fbmF0aXZlRGVjb2Rlcik7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKSB7Ci0gICAgICAg
IG1fbmF0aXZlRGVjb2RlciA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBJbWFnZSB3YXMgdmFsaWQuCi19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVy
RGlyZWN0MkQuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw5
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0
ci5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgotCi1pbnRlcmZhY2UgSUQyRDFSZW5kZXJU
YXJnZXQ7Ci1pbnRlcmZhY2UgSVdJQ0JpdG1hcERlY29kZXI7Ci1pbnRlcmZhY2UgSVdJQ0ltYWdp
bmdGYWN0b3J5MjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbWFnZURlY29kZXJE
aXJlY3QyRCBmaW5hbCA6IHB1YmxpYyBJbWFnZURlY29kZXIgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIEltYWdlRGVjb2RlckRpcmVjdDJEKCk7Ci0KLSAgICBz
dGF0aWMgUmVmPEltYWdlRGVjb2RlckRpcmVjdDJEPiBjcmVhdGUoRnJhZ21lbnRlZFNoYXJlZEJ1
ZmZlciYsIEFscGhhT3B0aW9uLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEltYWdlRGVjb2RlckRpcmVjdDJEKCkpOwotICAg
IH0KLQotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzTWVkaWFUeXBlKE1lZGlhVHlwZSB0eXBlKSB7
IHJldHVybiB0eXBlID09IE1lZGlhVHlwZTo6SW1hZ2U7IH0KLQotICAgIHNpemVfdCBieXRlc0Rl
Y29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKSBjb25zdCBmaW5hbDsKLQotICAgIFN0cmluZyBm
aWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IGZpbmFsOwotICAgIEVuY29kZWREYXRhU3RhdHVzIGVu
Y29kZWREYXRhU3RhdHVzKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1NpemVBdmFpbGFibGUo
KSBjb25zdCBmaW5hbDsKLQotICAgIC8vIEFsd2F5cyBvcmlnaW5hbCBzaXplLCB3aXRob3V0IHN1
YnNhbXBsaW5nLgotICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IGZpbmFsOwotICAgIHNpemVfdCBm
cmFtZUNvdW50KCkgY29uc3QgZmluYWw7Ci0KLSAgICBSZXBldGl0aW9uQ291bnQgcmVwZXRpdGlv
bkNvdW50KCkgY29uc3QgZmluYWw7Ci0gICAgc3RkOjpvcHRpb25hbDxJbnRQb2ludD4gaG90U3Bv
dCgpIGNvbnN0IGZpbmFsOwotCi0gICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwg
U3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQpIGNvbnN0IGZpbmFs
OwotICAgIGJvb2wgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QpIGNvbnN0IGZpbmFsOwot
ICAgIEltYWdlRGVjb2Rlcjo6RnJhbWVNZXRhZGF0YSBmcmFtZU1ldGFkYXRhQXRJbmRleChzaXpl
X3QpIGNvbnN0IGZpbmFsOwotCi0gICAgU2Vjb25kcyBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXpl
X3QpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90KSBj
b25zdCBmaW5hbDsKLSAgICBib29sIGZyYW1lQWxsb3dTdWJzYW1wbGluZ0F0SW5kZXgoc2l6ZV90
KSBjb25zdCBmaW5hbDsKLSAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QsIFN1
YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KSBjb25zdCBmaW5hbDsK
LQotICAgIFBsYXRmb3JtSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBT
dWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgY29uc3QgRGVjb2Rp
bmdPcHRpb25zJiA9IERlY29kaW5nT3B0aW9ucyhEZWNvZGluZ01vZGU6OlN5bmNocm9ub3VzKSkg
ZmluYWw7Ci0KLSAgICB2b2lkIHNldERhdGEoY29uc3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciYs
IGJvb2wgYWxsRGF0YVJlY2VpdmVkKSBmaW5hbDsKLSAgICBib29sIGlzQWxsRGF0YVJlY2VpdmVk
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pc0FsbERhdGFSZWNlaXZlZDsgfQotICAgIHZvaWQg
Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCkgZmluYWwgeyB9Ci0KLSAgICB2b2lkIHNldFRh
cmdldENvbnRleHQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKLQotICAgIHN0YXRpYyBJV0lDSW1hZ2lu
Z0ZhY3RvcnkyKiBzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpOwotCi1wcml2YXRlOgotICAgIGJvb2wg
bV9pc0FsbERhdGFSZWNlaXZlZCB7IGZhbHNlIH07Ci0gICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6
ZTsKLSAgICBDT01QdHI8SVdJQ0JpdG1hcERlY29kZXI+IG1fbmF0aXZlRGVjb2RlcjsKLSAgICBD
T01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IG1fcmVuZGVyVGFyZ2V0OwotfTsKLQotfQotCi0jZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBA
IC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLQotI2lu
Y2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQml0bWFwSW5mby5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3aW5kb3dz
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZlB0cjxCaXRtYXBJbWFnZT4gQml0
bWFwSW1hZ2U6OmNyZWF0ZShIQklUTUFQIGhCaXRtYXApCi17Ci0gICAgRElCU0VDVElPTiBkaWJT
ZWN0aW9uOwotICAgIGlmICghR2V0T2JqZWN0KGhCaXRtYXAsIHNpemVvZihESUJTRUNUSU9OKSwg
JmRpYlNlY3Rpb24pKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEFTU0VSVChkaWJT
ZWN0aW9uLmRzQm0uYm1CaXRzUGl4ZWwgPT0gMzIpOwotICAgIGlmIChkaWJTZWN0aW9uLmRzQm0u
Ym1CaXRzUGl4ZWwgIT0gMzIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQVNTRVJU
KGRpYlNlY3Rpb24uZHNCbS5ibUJpdHMpOwotICAgIGlmICghZGliU2VjdGlvbi5kc0JtLmJtQml0
cykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNp
emUoSEJJVE1BUCBibXAsIGNvbnN0IEludFNpemUqIHNpemUpCi17Ci0gICAgQVNTRVJUKGJtcCk7
Ci0KLSAgICBCSVRNQVAgYm1wSW5mbzsKLSAgICBHZXRPYmplY3QoYm1wLCBzaXplb2YoQklUTUFQ
KSwgJmJtcEluZm8pOwotCi0gICAgQVNTRVJUKGJtcEluZm8uYm1CaXRzUGl4ZWwgPT0gMzIpOwot
ICAgIGludCBidWZmZXJTaXplID0gYm1wSW5mby5ibVdpZHRoQnl0ZXMgKiBibXBJbmZvLmJtSGVp
Z2h0OwotICAgIAotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNz
Q29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBz
cmNTaXplLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKLXsKLSAgICBzaXplX3QgZnJh
bWVzID0gZnJhbWVDb3VudCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVzOyAr
K2kpIHsKLSAgICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwot
ICAgICAgICBhdXRvIGltYWdlU2l6ZSA9IG5hdGl2ZUltYWdlU2l6ZShpbWFnZSk7Ci0gICAgICAg
IGlmIChpbWFnZSAmJiBjbGFtcFRvPGludD4oaW1hZ2VTaXplLmhlaWdodCgpKSA9PSBzdGF0aWNf
Y2FzdDxpbnQ+KHNyY1NpemUuaGVpZ2h0KCkpICYmIGNsYW1wVG88aW50PihpbWFnZVNpemUud2lk
dGgoKSkgPT0gc3RhdGljX2Nhc3Q8aW50PihzcmNTaXplLndpZHRoKCkpKSB7Ci0gICAgICAgICAg
ICBzaXplX3QgY3VycmVudEZyYW1lID0gbV9jdXJyZW50RnJhbWU7Ci0gICAgICAgICAgICBtX2N1
cnJlbnRGcmFtZSA9IGk7Ci0gICAgICAgICAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVj
dCgwLjBmLCAwLjBmLCBzcmNTaXplLndpZHRoKCksIHNyY1NpemUuaGVpZ2h0KCkpLCB7IGNvbXBv
c2l0ZU9wIH0pOwotICAgICAgICAgICAgbV9jdXJyZW50RnJhbWUgPSBjdXJyZW50RnJhbWU7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBObyBpbWFnZSBv
ZiB0aGUgY29ycmVjdCBzaXplIHdhcyBmb3VuZCwgZmFsbGJhY2sgdG8gZHJhd2luZyB0aGUgY3Vy
cmVudCBmcmFtZQotICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgp
OwotICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIGltYWdlU2l6
ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCB7IGNvbXBvc2l0ZU9wIH0pOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwCShyZXZp
c2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0
aXZlSW1hZ2VEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw4MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgotCi0jaW5jbHVkZSAiRGlyZWN0MkRPcGVy
YXRpb25zLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5j
bHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHdpbmNvZGVjLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RhdGljIElXSUNJbWFnaW5nRmFjdG9yeSogaW1hZ2luZ0ZhY3RvcnkoKQotewotICAg
IHN0YXRpYyBJV0lDSW1hZ2luZ0ZhY3RvcnkqIGltYWdpbmdGYWN0b3J5ID0gbnVsbHB0cjsKLSAg
ICBpZiAoIWltYWdpbmdGYWN0b3J5KSB7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBDb0NyZWF0ZUlu
c3RhbmNlKENMU0lEX1dJQ0ltYWdpbmdGYWN0b3J5LCBudWxscHRyLCBDTFNDVFhfSU5QUk9DX1NF
UlZFUiwgSUlEX1BQVl9BUkdTKCZpbWFnaW5nRmFjdG9yeSkpOwotICAgICAgICBSRUxFQVNFX0FT
U0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW1hZ2luZ0ZhY3Rvcnk7
Ci19Ci0KLUludFNpemUgTmF0aXZlSW1hZ2U6OnNpemUoKSBjb25zdAotewotICAgIHJldHVybiBt
X3BsYXRmb3JtSW1hZ2UtPkdldFBpeGVsU2l6ZSgpOwotfQotCi1ib29sIE5hdGl2ZUltYWdlOjpo
YXNBbHBoYSgpIGNvbnN0Ci17Ci0gICAgRDJEMV9QSVhFTF9GT1JNQVQgcGl4ZWxGb3JtYXQgPSBt
X3BsYXRmb3JtSW1hZ2UtPkdldFBpeGVsRm9ybWF0KCk7Ci0gICAgcmV0dXJuIHBpeGVsRm9ybWF0
LmFscGhhTW9kZSAhPSBEMkQxX0FMUEhBX01PREVfSUdOT1JFOwotfQotCi1Db2xvciBOYXRpdmVJ
bWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKLXsKLSAgICBpZiAoc2l6ZSgpICE9
IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gQ29sb3IoKTsKLX0KLQotRGVzdGluYXRpb25Db2xvclNwYWNl
IE5hdGl2ZUltYWdlOjpjb2xvclNwYWNlKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKTsKLX0KLQotdm9pZCBO
YXRpdmVJbWFnZTo6Y2xlYXJTdWJpbWFnZXMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGly
ZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9QYXRoRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBA
IC0xLDY2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYXRoLmgiCi0KLSNp
ZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRl
ICJDT01QdHIuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUgPGQyZDEu
aD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdGF0aWMgaW5saW5lIElEMkQxUmVuZGVyVGFyZ2V0KiBzY3JhdGNoUmVuZGVyVGFyZ2V0
KCkKLXsKLSAgICBzdGF0aWMgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQg
PSBhZG9wdENPTShHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKSk7Ci0gICAg
cmV0dXJuIHJlbmRlclRhcmdldC5nZXQoKTsKLX0KLQotUGF0aCBQYXRoOjpwb2x5Z29uUGF0aEZy
b21Qb2ludHMoY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQ+JiBwb2ludHMpCi17Ci0gICAgUGF0aCBw
YXRoOwotICAgIGlmIChwb2ludHMuc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0dXJuIHBhdGg7Ci0K
LSAgICBWZWN0b3I8RDJEMV9QT0lOVF8yRiwgMzI+IGQyZFBvaW50czsKLSAgICBkMmRQb2ludHMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwb2ludHMuc2l6ZSgpIC0gMSk7Ci0gICAgZm9yIChhdXRv
IHBvaW50IDogcG9pbnRzKQotICAgICAgICBkMmRQb2ludHMudW5jaGVja2VkQXBwZW5kKHBvaW50
KTsKLQotICAgIHBhdGgubW92ZVRvKHBvaW50cy5maXJzdCgpKTsKLQotICAgIEFTU0VSVChwYXRo
Lm1fYWN0aXZlUGF0aCk7Ci0KLSAgICBwYXRoLm1fYWN0aXZlUGF0aC0+QWRkTGluZXMoZDJkUG9p
bnRzLmRhdGEoKSwgZDJkUG9pbnRzLnNpemUoKSk7Ci0gICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsK
LQotICAgIHJldHVybiBwYXRoOwotfQotCi1QYXRoOjpQYXRoKCkgPSBkZWZhdWx0OwotCi1QYXRo
Ojp+UGF0aCgpCi17Ci0gICAgY2xlYXJHZW9tZXRyaWVzKCk7Ci19Ci0KLVBsYXRmb3JtUGF0aFB0
ciBQYXRoOjplbnN1cmVQbGF0Zm9ybVBhdGgoKQotewotICAgIGlmICghbV9wYXRoKSB7Ci0gICAg
ICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRl
R2VvbWV0cnlHcm91cChEMkQxX0ZJTExfTU9ERV9XSU5ESU5HLCBudWxscHRyLCAwLCAmbV9wYXRo
KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgICAgICBpZiAoRkFJTEVEKGhy
KSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBBU1NFUlQocmVmQ291bnQo
bV9wYXRoLmdldCgpKSA9PSAxKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9wYXRoLmdldCgpOwot
fQotCi12b2lkIFBhdGg6OmNsZWFyR2VvbWV0cmllcygpCi17Ci0gICAgLy8gTWFudWFsbHkgY2xl
YW4gdGhlc2UgdXAgc28gdGhhdCB3ZSBjYW4gdXNlIHRoaXMgdmVjdG9yIHdpdGggRGlyZWN0MkQg
QVBJcy4KLSAgICBmb3IgKGF1dG8qIGdlb21ldHJ5IDogbV9nZW9tZXRyaWVzKQotICAgICAgICBn
ZW9tZXRyeS0+UmVsZWFzZSgpOwotICAgIG1fZ2VvbWV0cmllcy5jbGVhcigpOwotfQotCi12b2lk
IFBhdGg6OmFwcGVuZEdlb21ldHJ5KElEMkQxR2VvbWV0cnkqIGdlb21ldHJ5KQotewotI2lmIEFT
U0VSVF9FTkFCTEVECi0gICAgdW5zaWduZWQgYmVmb3JlID0gcmVmQ291bnQoZ2VvbWV0cnkpOwot
I2VuZGlmCi0KLSAgICB1bnNpZ25lZCBnZW9tZXRyeUNvdW50ID0gbV9wYXRoID8gbV9wYXRoLT5H
ZXRTb3VyY2VHZW9tZXRyeUNvdW50KCkgOiAwOwotCi0gICAgUkVMRUFTRV9BU1NFUlQobV9nZW9t
ZXRyaWVzLnNpemUoKSA9PSBnZW9tZXRyeUNvdW50KTsKLQotICAgIGdlb21ldHJ5LT5BZGRSZWYo
KTsKLSAgICBtX2dlb21ldHJpZXMuYXBwZW5kKGdlb21ldHJ5KTsKLQotICAgIGF1dG8gZmlsbE1v
ZGUgPSBtX3BhdGggPyBtX3BhdGgtPkdldEZpbGxNb2RlKCkgOiBEMkQxX0ZJTExfTU9ERV9XSU5E
SU5HOwotCi0gICAgbV9wYXRoID0gbnVsbHB0cjsKLQotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGlj
c0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlR2VvbWV0cnlHcm91cChmaWxsTW9kZSwg
bV9nZW9tZXRyaWVzLmRhdGEoKSwgbV9nZW9tZXRyaWVzLnNpemUoKSwgJm1fcGF0aCk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBBU1NFUlQocmVmQ291bnQoZ2Vv
bWV0cnkpID09IGJlZm9yZSArIDEpOwotfQotCi12b2lkIFBhdGg6OmNyZWF0ZUdlb21ldHJ5V2l0
aEZpbGxNb2RlKFdpbmRSdWxlIHdlYmtpdEZpbGxNb2RlLCBDT01QdHI8SUQyRDFHZW9tZXRyeUdy
b3VwPiYgcGF0aCkgY29uc3QKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3BhdGgpOwotCi0gICAg
YXV0byBmaWxsTW9kZSA9ICh3ZWJraXRGaWxsTW9kZSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkgPyBE
MkQxX0ZJTExfTU9ERV9BTFRFUk5BVEUgOiBEMkQxX0ZJTExfTU9ERV9XSU5ESU5HOwotCi0gICAg
aWYgKGZpbGxNb2RlID09IG1fcGF0aC0+R2V0RmlsbE1vZGUoKSkgewotICAgICAgICBwYXRoID0g
bV9wYXRoOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdW5zaWduZWQgZ2VvbWV0cnlD
b3VudCA9IG1fcGF0aC0+R2V0U291cmNlR2VvbWV0cnlDb3VudCgpOwotCi0gICAgQVNTRVJUKG1f
Z2VvbWV0cmllcy5zaXplKCkgPT0gZ2VvbWV0cnlDb3VudCk7Ci0KLSAgICBIUkVTVUxUIGhyID0g
R3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUdlb21ldHJ5R3JvdXAoZmls
bE1vZGUsIGNvbnN0X2Nhc3Q8SUQyRDFHZW9tZXRyeSoqPihtX2dlb21ldHJpZXMuZGF0YSgpKSwg
bV9nZW9tZXRyaWVzLnNpemUoKSwgJnBhdGgpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURF
RChocikpOwotICAgIEFTU0VSVChyZWZDb3VudChwYXRoLmdldCgpKSA9PSAxKTsKLX0KLQotUGF0
aDo6UGF0aChjb25zdCBQYXRoJiBvdGhlcikKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHVu
c2lnbmVkIHBhdGhDb3VudCA9IHJlZkNvdW50KG90aGVyLm1fcGF0aC5nZXQoKSk7Ci0gICAgdW5z
aWduZWQgYWN0aXZlUGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9hY3RpdmVQYXRoLmdldCgp
KTsKLSNlbmRpZgotICAgIG1fcGF0aCA9IG90aGVyLm1fcGF0aDsKLSAgICBtX2FjdGl2ZVBhdGgg
PSBvdGhlci5tX2FjdGl2ZVBhdGg7Ci0gICAgbV9nZW9tZXRyaWVzID0gb3RoZXIubV9nZW9tZXRy
aWVzOwotICAgIGZvciAoYXV0byogZ2VvbWV0cnkgOiBtX2dlb21ldHJpZXMpCi0gICAgICAgIGdl
b21ldHJ5LT5BZGRSZWYoKTsKLQotICAgIEFTU0VSVCghbV9wYXRoIHx8IHJlZkNvdW50KG1fcGF0
aC5nZXQoKSkgPT0gcGF0aENvdW50ICsgMSk7Ci0gICAgQVNTRVJUKCFtX2FjdGl2ZVBhdGggfHwg
cmVmQ291bnQobV9hY3RpdmVQYXRoLmdldCgpKSA9PSBhY3RpdmVQYXRoQ291bnQgKyAxKTsKLX0K
LSAgICAKLVBhdGg6OlBhdGgoUGF0aCYmIG90aGVyKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0g
ICAgdW5zaWduZWQgcGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9wYXRoLmdldCgpKTsKLSAg
ICB1bnNpZ25lZCBhY3RpdmVQYXRoQ291bnQgPSByZWZDb3VudChvdGhlci5tX2FjdGl2ZVBhdGgu
Z2V0KCkpOwotI2VuZGlmCi0gICAgbV9wYXRoID0gV1RGTW92ZShvdGhlci5tX3BhdGgpOwotICAg
IG1fYWN0aXZlUGF0aCA9IFdURk1vdmUob3RoZXIubV9hY3RpdmVQYXRoKTsKLSAgICBtX2dlb21l
dHJpZXMgPSBXVEZNb3ZlKG90aGVyLm1fZ2VvbWV0cmllcyk7Ci0KLSAgICBBU1NFUlQocmVmQ291
bnQobV9wYXRoLmdldCgpKSA9PSBwYXRoQ291bnQpOwotICAgIEFTU0VSVChyZWZDb3VudChtX2Fj
dGl2ZVBhdGguZ2V0KCkpID09IGFjdGl2ZVBhdGhDb3VudCk7Ci19Ci0KLVBhdGgmIFBhdGg6Om9w
ZXJhdG9yPShjb25zdCBQYXRoJiBvdGhlcikKLXsKLSAgICBpZiAodGhpcyA9PSAmb3RoZXIpCi0g
ICAgICAgIHJldHVybiAqdGhpczsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHVuc2lnbmVkIHBh
dGhDb3VudCA9IHJlZkNvdW50KG90aGVyLm1fcGF0aC5nZXQoKSk7Ci0gICAgdW5zaWduZWQgYWN0
aXZlUGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9hY3RpdmVQYXRoLmdldCgpKTsKLSNlbmRp
ZgotICAgIG1fcGF0aCA9IG90aGVyLm1fcGF0aDsKLSAgICBtX2FjdGl2ZVBhdGggPSBvdGhlci5t
X2FjdGl2ZVBhdGg7Ci0gICAgbV9nZW9tZXRyaWVzID0gb3RoZXIubV9nZW9tZXRyaWVzOwotICAg
IGZvciAoYXV0byogZ2VvbWV0cnkgOiBtX2dlb21ldHJpZXMpCi0gICAgICAgIGdlb21ldHJ5LT5B
ZGRSZWYoKTsKLQotICAgIEFTU0VSVCghbV9wYXRoIHx8IHJlZkNvdW50KG1fcGF0aC5nZXQoKSkg
PT0gcGF0aENvdW50ICsgMSk7Ci0gICAgQVNTRVJUKCFtX2FjdGl2ZVBhdGggfHwgcmVmQ291bnQo
bV9hY3RpdmVQYXRoLmdldCgpKSA9PSBhY3RpdmVQYXRoQ291bnQgKyAxKTsKLQotICAgIHJldHVy
biAqdGhpczsKLX0KLQotUGF0aCYgUGF0aDo6b3BlcmF0b3I9KFBhdGgmJiBvdGhlcikKLXsKLSAg
ICBpZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgIHJldHVybiAqdGhpczsKLQotI2lmIEFTU0VS
VF9FTkFCTEVECi0gICAgdW5zaWduZWQgcGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9wYXRo
LmdldCgpKTsKLSAgICB1bnNpZ25lZCBhY3RpdmVQYXRoQ291bnQgPSByZWZDb3VudChvdGhlci5t
X2FjdGl2ZVBhdGguZ2V0KCkpOwotI2VuZGlmCi0gICAgbV9wYXRoID0gV1RGTW92ZShvdGhlci5t
X3BhdGgpOwotICAgIG1fYWN0aXZlUGF0aCA9IFdURk1vdmUob3RoZXIubV9hY3RpdmVQYXRoKTsK
LSAgICBtX2dlb21ldHJpZXMgPSBXVEZNb3ZlKG90aGVyLm1fZ2VvbWV0cmllcyk7Ci0KLSAgICBB
U1NFUlQocmVmQ291bnQobV9wYXRoLmdldCgpKSA9PSBwYXRoQ291bnQpOwotICAgIEFTU0VSVChy
ZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0KCkpID09IGFjdGl2ZVBhdGhDb3VudCk7Ci0KLSAgICBy
ZXR1cm4gKnRoaXM7Ci19Ci0KLWJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0Ci17Ci0gICAgaWYgKGlzTnVsbCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWZhc3RCb3VuZGluZ1JlY3QoKS5jb250YWlucyhw
b2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEJPT0wgY29udGFpbnM7Ci0gICAg
aWYgKCFTVUNDRUVERUQobV9wYXRoLT5GaWxsQ29udGFpbnNQb2ludChwb2ludCwgbnVsbHB0ciwg
JmNvbnRhaW5zKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBjb250YWlu
czsKLX0KLQotYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mIHN0cm9rZVN0eWxlQXBw
bGllcikgY29uc3QKLXsKLSAgICBBU1NFUlQoc3Ryb2tlU3R5bGVBcHBsaWVyKTsKLQotICAgIGlm
IChpc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQgc2NyYXRjaENvbnRleHREMkQoc2NyYXRjaFJlbmRlclRhcmdldCgpKTsKLSAgICBH
cmFwaGljc0NvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQs
IEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7
Ci0gICAgc3Ryb2tlU3R5bGVBcHBsaWVyKHNjcmF0Y2hDb250ZXh0KTsKLQotI2lmIEFTU0VSVF9F
TkFCTEVECi0gICAgdW5zaWduZWQgYmVmb3JlID0gcmVmQ291bnQobV9wYXRoLmdldCgpKTsKLSNl
bmRpZgotCi0gICAgQk9PTCBjb250YWluc1BvaW50ID0gZmFsc2U7Ci0gICAgSFJFU1VMVCBociA9
IG1fcGF0aC0+U3Ryb2tlQ29udGFpbnNQb2ludChwb2ludCwgc2NyYXRjaENvbnRleHQuc3Ryb2tl
VGhpY2tuZXNzKCksIHNjcmF0Y2hDb250ZXh0LnBsYXRmb3JtU3Ryb2tlU3R5bGUoKSwgbnVsbHB0
ciwgMS4wZiwgJmNvbnRhaW5zUG9pbnQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkgPT0g
YmVmb3JlKTsKLSAgICByZXR1cm4gY29udGFpbnNQb2ludDsKLX0KLQotdm9pZCBQYXRoOjpjbG9z
ZUFueU9wZW5HZW9tZXRyaWVzKHVuc2lnbmVkIGZpZ3VyZUVuZFN0eWxlKSBjb25zdAotewotICAg
IGlmIChtX2ZpZ3VyZUlzT3BlbmVkKSB7Ci0gICAgICAgIEFTU0VSVChtX2FjdGl2ZVBhdGgpOwot
Ci0gICAgICAgIGF1dG8gZW5kU3R5bGUgPSBzdGF0aWNfY2FzdDxEMkQxX0ZJR1VSRV9FTkQ+KGZp
Z3VyZUVuZFN0eWxlKTsKLSAgICAgICAgbV9hY3RpdmVQYXRoLT5FbmRGaWd1cmUoZW5kU3R5bGUp
OwotICAgICAgICBtX2ZpZ3VyZUlzT3BlbmVkID0gZmFsc2U7Ci0KLSAgICAgICAgSFJFU1VMVCBo
ciA9IG1fYWN0aXZlUGF0aC0+Q2xvc2UoKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikp
OwotICAgIH0KLQotICAgIG1fYWN0aXZlUGF0aCA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgUGF0aDo6
dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICB0cmFuc2Zvcm0oQWZmaW5l
VHJhbnNmb3JtKDEsIDAsIDAsIDEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwotfQot
Ci12b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
LXsKLSAgICBpZiAodHJhbnNmb3JtLmlzSWRlbnRpdHkoKSB8fCBpc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2FjdGl2ZVBhdGgpCi0gICAgICAgIGNsb3NlQW55T3Blbkdl
b21ldHJpZXMoRDJEMV9GSUdVUkVfRU5EX09QRU4pOwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAg
ICB1bnNpZ25lZCBiZWZvcmUgPSByZWZDb3VudChtX3BhdGguZ2V0KCkpOwotI2VuZGlmCi0KLSAg
ICBDT01QdHI8SUQyRDFUcmFuc2Zvcm1lZEdlb21ldHJ5PiB0cmFuc2Zvcm1lZFBhdGg7Ci0gICAg
aWYgKCFTVUNDRUVERUQoR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVRy
YW5zZm9ybWVkR2VvbWV0cnkobV9wYXRoLmdldCgpLCB0cmFuc2Zvcm0sICZ0cmFuc2Zvcm1lZFBh
dGgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQo
KSkgPT0gYmVmb3JlKTsKLSAgICBBU1NFUlQocmVmQ291bnQodHJhbnNmb3JtZWRQYXRoLmdldCgp
KSA9PSAxKTsKLQotICAgIGF1dG8gZmlsbE1vZGUgPSBtX3BhdGgtPkdldEZpbGxNb2RlKCk7Ci0K
LSAgICBtX3BhdGggPSBudWxscHRyOwotCi0gICAgY2xlYXJHZW9tZXRyaWVzKCk7Ci0KLSAgICB0
cmFuc2Zvcm1lZFBhdGgtPkFkZFJlZigpOwotICAgIG1fZ2VvbWV0cmllcy5hcHBlbmQodHJhbnNm
b3JtZWRQYXRoLmdldCgpKTsKLQotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5
c3RlbUZhY3RvcnkoKS0+Q3JlYXRlR2VvbWV0cnlHcm91cChmaWxsTW9kZSwgbV9nZW9tZXRyaWVz
LmRhdGEoKSwgbV9nZW9tZXRyaWVzLnNpemUoKSwgJm1fcGF0aCk7Ci0gICAgUkVMRUFTRV9BU1NF
UlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgQVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkgPT0g
MSk7Ci19Ci0KLUZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3RTbG93Q2FzZSgpIGNvbnN0Ci17
Ci0gICAgRDJEMV9SRUNUX0YgYm91bmRzID0geyB9OwotICAgIGlmICghU1VDQ0VFREVEKG1fcGF0
aC0+R2V0Qm91bmRzKG51bGxwdHIsICZib3VuZHMpKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dCgpOwotCi0gICAgcmV0dXJuIGJvdW5kczsKLX0KLQotRmxvYXRSZWN0IFBhdGg6OmZhc3RCb3Vu
ZGluZ1JlY3RTbG93Q2FzZSgpIGNvbnN0Ci17Ci0gICAgRDJEMV9SRUNUX0YgYm91bmRzID0geyB9
OwotICAgIGlmICghU1VDQ0VFREVEKG1fcGF0aC0+R2V0Qm91bmRzKG51bGxwdHIsICZib3VuZHMp
KSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgcmV0dXJuIGJvdW5kczsKLX0K
LQotRmxvYXRSZWN0IFBhdGg6OmZhc3RCb3VuZGluZ1JlY3RGb3JTdHJva2UoY29uc3QgUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkgY29uc3QKLXsKLSAgICBpZiAoaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIGZsb2F0IHRvbGVyYW5j
ZSA9IDEwOwotCi0gICAgYXV0byogc3Ryb2tlU3R5bGUgPSBjb25zdF9jYXN0PFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJj4ocGxhdGZvcm1Db250ZXh0KS5zdHJva2VTdHlsZSgpOwotCi0gICAgRDJE
MV9SRUNUX0YgYm91bmRzID0geyB9OwotICAgIGlmICghU1VDQ0VFREVEKG1fcGF0aC0+R2V0V2lk
ZW5lZEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0eWxl
LCBudWxscHRyLCB0b2xlcmFuY2UsICZib3VuZHMpKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dCgpOwotCi0gICAgcmV0dXJuIGJvdW5kczsKLX0KLQotRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJv
dW5kaW5nUmVjdChjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYgc3Ryb2tl
U3R5bGVBcHBsaWVyKSBjb25zdAotewotICAgIGlmIChpc051bGwoKSkKLSAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdCgpOwotCi0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRl
eHREMkQoc2NyYXRjaFJlbmRlclRhcmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0
bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7Ci0KLSAgICBpZiAoc3Ryb2tlU3R5
bGVBcHBsaWVyKQotICAgICAgICBzdHJva2VTdHlsZUFwcGxpZXIoc2NyYXRjaENvbnRleHQpOwot
Ci0gICAgcmV0dXJuIGZhc3RCb3VuZGluZ1JlY3RGb3JTdHJva2Uoc2NyYXRjaENvbnRleHREMkQp
OwotfQotCi12b2lkIFBhdGg6Om9wZW5GaWd1cmVBdEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5KCkK
LXsKLSAgICBpZiAobV9maWd1cmVJc09wZW5lZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFtX2FjdGl2ZVBhdGgpIHsKLSAgICAgICAgQ09NUHRyPElEMkQxUGF0aEdlb21ldHJ5PiBhY3Rp
dmVQYXRoR2VvbWV0cnk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgp
LT5DcmVhdGVQYXRoR2VvbWV0cnkoJmFjdGl2ZVBhdGhHZW9tZXRyeSk7Ci0gICAgICAgIEhSRVNV
TFQgaHIgPSBhY3RpdmVQYXRoR2VvbWV0cnktPk9wZW4oJm1fYWN0aXZlUGF0aCk7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgICAgICBhcHBlbmRHZW9tZXRyeShh
Y3RpdmVQYXRoR2VvbWV0cnkubGVha1JlZigpKTsKLSAgICAgICAgQVNTRVJUKHJlZkNvdW50KG1f
YWN0aXZlUGF0aC5nZXQoKSkgPT0gMSk7Ci0gICAgfQotCi0gICAgbV9hY3RpdmVQYXRoLT5TZXRG
aWxsTW9kZShEMkQxX0ZJTExfTU9ERV9XSU5ESU5HKTsKLSAgICBtX2FjdGl2ZVBhdGgtPkJlZ2lu
RmlndXJlKGN1cnJlbnRQb2ludCgpLCBEMkQxX0ZJR1VSRV9CRUdJTl9GSUxMRUQpOwotICAgIG1f
ZmlndXJlSXNPcGVuZWQgPSB0cnVlOwotfQotCi12b2lkIFBhdGg6Om1vdmVUb1Nsb3dDYXNlKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIGlmIChtX2FjdGl2ZVBhdGgpCi0gICAgICAg
IGNsb3NlQW55T3Blbkdlb21ldHJpZXMoRDJEMV9GSUdVUkVfRU5EX09QRU4pOwotCi0gICAgQ09N
UHRyPElEMkQxUGF0aEdlb21ldHJ5PiBhY3RpdmVQYXRoR2VvbWV0cnk7Ci0gICAgR3JhcGhpY3ND
b250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVBhdGhHZW9tZXRyeSgmYWN0aXZlUGF0aEdl
b21ldHJ5KTsKLQotICAgIGlmICghU1VDQ0VFREVEKGFjdGl2ZVBhdGhHZW9tZXRyeS0+T3Blbigm
bV9hY3RpdmVQYXRoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGFwcGVuZEdlb21ldHJ5KGFj
dGl2ZVBhdGhHZW9tZXRyeS5sZWFrUmVmKCkpOwotCi0gICAgQVNTRVJUKHJlZkNvdW50KG1fYWN0
aXZlUGF0aC5nZXQoKSkgPT0gMSk7Ci0KLSAgICBtX2FjdGl2ZVBhdGgtPlNldEZpbGxNb2RlKEQy
RDFfRklMTF9NT0RFX1dJTkRJTkcpOwotICAgIG1fYWN0aXZlUGF0aC0+QmVnaW5GaWd1cmUocG9p
bnQsIEQyRDFfRklHVVJFX0JFR0lOX0ZJTExFRCk7Ci0gICAgbV9maWd1cmVJc09wZW5lZCA9IHRy
dWU7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkTGluZVRvU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpCi17Ci0gICAgb3BlbkZpZ3VyZUF0Q3VycmVudFBvaW50SWZOZWNlc3NhcnkoKTsKLSAg
ICBtX2FjdGl2ZVBhdGgtPkFkZExpbmUocG9pbnQpOwotfQotCi12b2lkIFBhdGg6OmFkZFF1YWRD
dXJ2ZVRvU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYgY3AsIGNvbnN0IEZsb2F0UG9pbnQmIHAp
Ci17Ci0gICAgb3BlbkZpZ3VyZUF0Q3VycmVudFBvaW50SWZOZWNlc3NhcnkoKTsKLSAgICBtX2Fj
dGl2ZVBhdGgtPkFkZFF1YWRyYXRpY0JlemllcihEMkQxOjpRdWFkcmF0aWNCZXppZXJTZWdtZW50
KGNwLCBwKSk7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUb1Nsb3dDYXNlKGNvbnN0
IEZsb2F0UG9pbnQmIGNwMSwgY29uc3QgRmxvYXRQb2ludCYgY3AyLCBjb25zdCBGbG9hdFBvaW50
JiBwKQotewotICAgIG9wZW5GaWd1cmVBdEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5KCk7Ci0gICAg
bV9hY3RpdmVQYXRoLT5BZGRCZXppZXIoRDJEMTo6QmV6aWVyU2VnbWVudChjcDEsIGNwMiwgcCkp
OwotfQotCi12b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBG
bG9hdFBvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQotewotICAgIEZsb2F0UG9pbnQgcDAgPSBjdXJy
ZW50UG9pbnQoKTsKLQotICAgIGlmIChwMSA9PSBwMCB8fCBwMSA9PSBwMiB8fCBXVEY6OmFyZUVz
c2VudGlhbGx5RXF1YWwocmFkaXVzLCAwLjBmKSkKLSAgICAgICAgcmV0dXJuIGFkZExpbmVUbyhw
MSk7Ci0KLSAgICBmbG9hdCBkaXJlY3Rpb24gPSAocDIueCgpIC0gcDEueCgpKSAqIChwMC55KCkg
LSBwMS55KCkpICsgKHAyLnkoKSAtIHAxLnkoKSkgKiAocDEueCgpIC0gcDAueCgpKTsKLSAgICBp
ZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGRpcmVjdGlvbiwgMC4wZikpCi0gICAgICAgIHJl
dHVybiBhZGRMaW5lVG8ocDEpOwotCi0gICAgYXV0byBhMiA9IHRvRmxvYXRQb2ludChwMCAtIHAx
KS5sZW5ndGhTcXVhcmVkKCk7Ci0gICAgYXV0byBiMiA9IHRvRmxvYXRQb2ludChwMSAtIHAyKS5s
ZW5ndGhTcXVhcmVkKCk7Ci0gICAgYXV0byBjMiA9IHRvRmxvYXRQb2ludChwMCAtIHAyKS5sZW5n
dGhTcXVhcmVkKCk7Ci0KLSAgICBkb3VibGUgY29zeCA9IChhMiArIGIyIC0gYzIpIC8gKDIuMCAq
IHN0ZDo6c3FydChhMiAqIGIyKSk7Ci0gICAgZG91YmxlIHNpbnggPSBzdGQ6OnNxcnQoMS4wIC0g
Y29zeCAqIGNvc3gpOwotICAgIGRvdWJsZSBkID0gcmFkaXVzIC8gKCgxIC0gY29zeCkgLyBzaW54
KTsKLQotICAgIGF1dG8gYW4gPSB0b0Zsb2F0UG9pbnQocDEgLSBwMCkuc2NhbGVkKDEuMCAvIHN0
ZDo6c3FydChhMikpOwotICAgIGF1dG8gYm4gPSB0b0Zsb2F0UG9pbnQocDEgLSBwMikuc2NhbGVk
KDEuMCAvIHN0ZDo6c3FydChiMikpOwotCi0gICAgYXV0byBzdGFydFBvaW50ID0gdG9GbG9hdFBv
aW50KHAxIC0gYW4uc2NhbGVkKGQpKTsKLSAgICBhdXRvIHA0ID0gdG9GbG9hdFBvaW50KHAxIC0g
Ym4uc2NhbGVkKGQpKTsKLQotICAgIGJvb2wgYW50aWNsb2Nrd2lzZSA9IChkaXJlY3Rpb24gPCAw
KTsKLSAgICBhbi5zY2FsZShyYWRpdXMgKiAoYW50aWNsb2Nrd2lzZSA/IDEgOiAtMSkpOwotCi0g
ICAgRmxvYXRQb2ludCBjZW50ZXIoc3RhcnRQb2ludC54KCkgKyBhbi55KCksIHN0YXJ0UG9pbnQu
eSgpIC0gYW4ueCgpKTsKLQotICAgIGRvdWJsZSBhbmdsZTAgPSBhdGFuMihzdGFydFBvaW50Lnko
KSAtIGNlbnRlci55KCksIHN0YXJ0UG9pbnQueCgpIC0gY2VudGVyLngoKSk7Ci0gICAgZG91Ymxl
IGFuZ2xlMSA9IGF0YW4yKHA0LnkoKSAtIGNlbnRlci55KCksIHA0LngoKSAtIGNlbnRlci54KCkp
OwotCi0gICAgb3BlbkZpZ3VyZUF0Q3VycmVudFBvaW50SWZOZWNlc3NhcnkoKTsKLSAgICBhZGRM
aW5lVG8oc3RhcnRQb2ludCk7Ci0gICAgYWRkQXJjKGNlbnRlciwgcmFkaXVzLCBhbmdsZTAsIGFu
Z2xlMSwgYW50aWNsb2Nrd2lzZSk7Ci19Ci0KLXN0YXRpYyBib29sIGVxdWFsUmFkaXVzV2lkdGhz
KGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiB0b3BSaWdo
dFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNp
emUmIGJvdHRvbVJpZ2h0UmFkaXVzKQotewotICAgIHJldHVybiB0b3BMZWZ0UmFkaXVzLndpZHRo
KCkgPT0gdG9wUmlnaHRSYWRpdXMud2lkdGgoKQotICAgICAgICAmJiB0b3BSaWdodFJhZGl1cy53
aWR0aCgpID09IGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKQotICAgICAgICAmJiBib3R0b21MZWZ0
UmFkaXVzLndpZHRoKCkgPT0gYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKTsKLX0KLQotc3RhdGlj
IGJvb2wgZXF1YWxSYWRpdXNIZWlnaHRzKGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywg
Y29uc3QgRmxvYXRTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21M
ZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKQotewotICAgIHJl
dHVybiB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpID09IGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkK
LSAgICAgICAgJiYgYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSA9PSB0b3BSaWdodFJhZGl1cy5o
ZWlnaHQoKQotICAgICAgICAmJiB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSA9PSBib3R0b21SaWdo
dFJhZGl1cy5oZWlnaHQoKTsKLX0KLQotdm9pZCBQYXRoOjpwbGF0Zm9ybUFkZFBhdGhGb3JSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJh
ZGl1cywgY29uc3QgRmxvYXRTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBi
b3R0b21MZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKQotewot
ICAgIGJvb2wgZXF1YWxXaWR0aHMgPSBlcXVhbFJhZGl1c1dpZHRocyh0b3BMZWZ0UmFkaXVzLCB0
b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpOwotICAg
IGJvb2wgZXF1YWxIZWlnaHRzID0gZXF1YWxSYWRpdXNIZWlnaHRzKHRvcExlZnRSYWRpdXMsIHRv
cFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7Ci0KLSAg
ICBpZiAoZXF1YWxXaWR0aHMgJiYgZXF1YWxIZWlnaHRzKSB7Ci0gICAgICAgIC8vIEVuc3VyZSB0
aGF0IENHIGNhbiByZW5kZXIgdGhlIHJvdW5kZWQgcmVjdC4KLSAgICAgICAgZmxvYXQgcmFkaXVz
V2lkdGggPSB0b3BMZWZ0UmFkaXVzLndpZHRoKCk7Ci0gICAgICAgIGZsb2F0IHJhZGl1c0hlaWdo
dCA9IHRvcExlZnRSYWRpdXMuaGVpZ2h0KCk7Ci0gICAgICAgIGF1dG8gcmVjdFRvRHJhdyA9IEQy
RDE6OlJlY3RGKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC5tYXhYKCksIHJlY3QubWF4WSgpKTsK
LQotICAgICAgICBDT01QdHI8SUQyRDFSb3VuZGVkUmVjdGFuZ2xlR2VvbWV0cnk+IHJvdW5kUmVj
dDsKLSAgICAgICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgp
LT5DcmVhdGVSb3VuZGVkUmVjdGFuZ2xlR2VvbWV0cnkoRDJEMTo6Um91bmRlZFJlY3QocmVjdFRv
RHJhdywgcmFkaXVzV2lkdGgsIHJhZGl1c0hlaWdodCksICZyb3VuZFJlY3QpOwotICAgICAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgYXBwZW5kR2VvbWV0cnkocm91
bmRSZWN0LmdldCgpKTsKLSAgICAgICAgQVNTRVJUKHJlZkNvdW50KHJvdW5kUmVjdC5nZXQoKSkg
PT0gMik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhZGRCZXppZXJzRm9yUm91bmRl
ZFJlY3QocmVjdCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRp
dXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKLX0KLQotdm9pZCBQYXRoOjpjbG9zZVN1YnBhdGgoKQot
ewotICAgIGlmIChpc051bGwoKSkgewotICAgICAgICBtX2FjdGl2ZVBhdGggPSBudWxscHRyOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX2FjdGl2ZVBhdGgpIHsKLSAgICAg
ICAgQVNTRVJUKCFtX2ZpZ3VyZUlzT3BlbmVkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGNsb3NlQW55T3Blbkdlb21ldHJpZXMoRDJEMV9GSUdVUkVfRU5EX0NMT1NFRCk7Ci19Ci0K
LXN0YXRpYyBGbG9hdFBvaW50IGFyY1N0YXJ0KGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxv
YXQgcmFkaXVzLCBmbG9hdCBzdGFydEFuZ2xlKQotewotICAgIEZsb2F0UG9pbnQgc3RhcnRpbmdQ
b2ludCA9IGNlbnRlcjsKLSAgICBmbG9hdCBzdGFydFggPSByYWRpdXMgKiBzdGQ6OmNvcyhzdGFy
dEFuZ2xlKTsKLSAgICBmbG9hdCBzdGFydFkgPSByYWRpdXMgKiBzdGQ6OnNpbihzdGFydEFuZ2xl
KTsKLSAgICBzdGFydGluZ1BvaW50Lm1vdmUoc3RhcnRYLCBzdGFydFkpOwotICAgIHJldHVybiBz
dGFydGluZ1BvaW50OwotfQotCi1jb25zdCBmbG9hdCB0d29QaSA9IDIuMGYgKiBwaUZsb2F0Owot
Ci1zdGF0aWMgdm9pZCBkcmF3QXJjU2VjdGlvbihJRDJEMUdlb21ldHJ5U2luayogc2luaywgY29u
c3QgRmxvYXRQb2ludCYgY2VudGVyLCBmbG9hdCByYWRpdXMsIGZsb2F0IHN0YXJ0QW5nbGUsIGZs
b2F0IGVuZEFuZ2xlLCBib29sIGFudGljbG9ja3dpc2UpCi17Ci0gICAgLy8gRGlyZWN0MkQgd2Fu
dHMgdXMgdG8gc3BlY2lmeSB0aGUgZW5kIHBvaW50IG9mIHRoZSBhcmMsIG5vdCB0aGUgY2VudGVy
LiBJdCB3aWxsIGJlIGRyYXduIGZyb20KLSAgICAvLyB3aGF0ZXZlciB0aGUgY3VycmVudCBwb2lu
dCBpbiB0aGUgJ21fYWN0aXZlUGF0aCcgaXMuCi0gICAgRmxvYXRQb2ludCBlbmRQb2ludCA9IGNl
bnRlcjsKLSAgICBmbG9hdCBlbmRYID0gcmFkaXVzICogc3RkOjpjb3MoZW5kQW5nbGUpOwotICAg
IGZsb2F0IGVuZFkgPSByYWRpdXMgKiBzdGQ6OnNpbihlbmRBbmdsZSk7Ci0gICAgZW5kUG9pbnQu
bW92ZShlbmRYLCBlbmRZKTsKLQotICAgIEQyRDFfU1dFRVBfRElSRUNUSU9OIGRpcmVjdGlvbiA9
IGFudGljbG9ja3dpc2UgPyBEMkQxX1NXRUVQX0RJUkVDVElPTl9DT1VOVEVSX0NMT0NLV0lTRSA6
IEQyRDFfU1dFRVBfRElSRUNUSU9OX0NMT0NLV0lTRTsKLSAgICBzaW5rLT5BZGRBcmMoRDJEMTo6
QXJjU2VnbWVudChlbmRQb2ludCwgRDJEMTo6U2l6ZUYocmFkaXVzLCByYWRpdXMpLCAwLCBkaXJl
Y3Rpb24sIEQyRDFfQVJDX1NJWkVfU01BTEwpKTsKLX0KLQotdm9pZCBQYXRoOjphZGRBcmNTbG93
Q2FzZShjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRB
bmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJvb2wgYW50aWNsb2Nrd2lzZSkKLXsKLSAgICBhdXRvIGFy
Y1N0YXJ0UG9pbnQgPSBhcmNTdGFydChjZW50ZXIsIHJhZGl1cywgc3RhcnRBbmdsZSk7Ci0gICAg
aWYgKCFtX2FjdGl2ZVBhdGgpCi0gICAgICAgIG1vdmVUbyhhcmNTdGFydFBvaW50KTsKLSAgICBl
bHNlIGlmICghYXJlRXNzZW50aWFsbHlFcXVhbChjdXJyZW50UG9pbnQoKSwgYXJjU3RhcnRQb2lu
dCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGFyYyBkZWZpbmVkIGJ5IHRoZSBjZW50ZXIgYW5kIHJh
ZGl1cyBkb2VzIG5vdCBpbnRlcnNlY3QgdGhlIGN1cnJlbnQgcG9zaXRpb24sCi0gICAgICAgIC8v
IHdlIG5lZWQgdG8gZHJhdyBhIGxpbmUgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUg
c3RhcnRpbmcgcG9pbnQgb2YgdGhlIGFyYy4KLSAgICAgICAgYWRkTGluZVRvKGFyY1N0YXJ0UG9p
bnQpOwotICAgIH0KLQotICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc3RkOjphYnMo
ZW5kQW5nbGUgLSBzdGFydEFuZ2xlKSwgdHdvUGkpKQotICAgICAgICByZXR1cm4gYWRkRWxsaXBz
ZShGbG9hdFJlY3QoY2VudGVyLngoKSAtIHJhZGl1cywgY2VudGVyLnkoKSAtIHJhZGl1cywgMi4w
ICogcmFkaXVzLCAyLjAgKiByYWRpdXMpKTsKLQotICAgIGlmIChhbnRpY2xvY2t3aXNlKSB7Ci0g
ICAgICAgIGlmIChlbmRBbmdsZSA+IHN0YXJ0QW5nbGUpIHsKLSAgICAgICAgICAgIGVuZEFuZ2xl
IC09IHR3b1BpICogc3RkOjpjZWlsKChlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpIC8gdHdvUGkpOwot
ICAgICAgICAgICAgQVNTRVJUKGVuZEFuZ2xlIDw9IHN0YXJ0QW5nbGUpOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN0YXJ0QW5nbGUgPiBlbmRBbmdsZSkgewotICAgICAg
ICAgICAgc3RhcnRBbmdsZSAtPSB0d29QaSAqIHN0ZDo6Y2VpbCgoc3RhcnRBbmdsZSAtIGVuZEFu
Z2xlKSAvIHR3b1BpKTsKLSAgICAgICAgICAgIEFTU0VSVChzdGFydEFuZ2xlIDw9IGVuZEFuZ2xl
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0IGZsb2F0IGRlbHRhID0gYW50aWNsb2Nr
d2lzZSA/IC1waU92ZXJUd29GbG9hdCA6IHBpT3ZlclR3b0Zsb2F0OwotICAgIGZsb2F0IHJlbWFp
bmluZ0FyY0FuZ2xlID0gZW5kQW5nbGUgLSBzdGFydEFuZ2xlOwotCi0gICAgd2hpbGUgKChyZW1h
aW5pbmdBcmNBbmdsZSA+IDAgJiYgcmVtYWluaW5nQXJjQW5nbGUgPiBkZWx0YSkgfHwgKHJlbWFp
bmluZ0FyY0FuZ2xlIDwgMCAmJiByZW1haW5pbmdBcmNBbmdsZSA8IGRlbHRhKSkgewotICAgICAg
ICBjb25zdCBkb3VibGUgY3VycmVudEVuZEFuZ2xlID0gc3RhcnRBbmdsZSArIGRlbHRhOwotICAg
ICAgICBkcmF3QXJjU2VjdGlvbihtX2FjdGl2ZVBhdGguZ2V0KCksIGNlbnRlciwgcmFkaXVzLCBz
dGFydEFuZ2xlLCBjdXJyZW50RW5kQW5nbGUsIGFudGljbG9ja3dpc2UpOwotICAgICAgICBzdGFy
dEFuZ2xlID0gY3VycmVudEVuZEFuZ2xlOwotICAgICAgICByZW1haW5pbmdBcmNBbmdsZSAtPSBk
ZWx0YTsKLSAgICB9Ci0KLSAgICAvLyBIYW5kbGUgYW55IHJlbWFpbmluZyBwYXJ0IG9mIHRoZSBh
cmM6Ci0gICAgaWYgKHN0ZDo6YWJzKHJlbWFpbmluZ0FyY0FuZ2xlKSA+IDFlLTYpCi0gICAgICAg
IGRyYXdBcmNTZWN0aW9uKG1fYWN0aXZlUGF0aC5nZXQoKSwgY2VudGVyLCByYWRpdXMsIHN0YXJ0
QW5nbGUsIHN0YXJ0QW5nbGUgKyByZW1haW5pbmdBcmNBbmdsZSwgYW50aWNsb2Nrd2lzZSk7Ci19
Ci0KLXZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAgaWYgKCFt
X2FjdGl2ZVBhdGgpCi0gICAgICAgIG1vdmVUbyhyLmxvY2F0aW9uKCkpOwotCi0gICAgQ09NUHRy
PElEMkQxUmVjdGFuZ2xlR2VvbWV0cnk+IHJlY3RhbmdsZTsKLSAgICBIUkVTVUxUIGhyID0gR3Jh
cGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVJlY3RhbmdsZUdlb21ldHJ5KHIs
ICZyZWN0YW5nbGUpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIGFw
cGVuZEdlb21ldHJ5KHJlY3RhbmdsZS5nZXQoKSk7Ci0gICAgQVNTRVJUKHJlZkNvdW50KHJlY3Rh
bmdsZS5nZXQoKSkgPT0gMik7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkRWxsaXBzZShGbG9hdFBvaW50
IHAsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1ksIGZsb2F0IHJvdGF0aW9uLCBmbG9hdCBz
dGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBhbnRpY2xvY2t3aXNlKQotewotICAgIEFm
ZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShwLngoKSwg
cC55KCkpLnJvdGF0ZShyYWQyZGVnKHJvdGF0aW9uKSkuc2NhbGUocmFkaXVzWCwgcmFkaXVzWSk7
Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiByKQotewotICAgIGlmICghbV9hY3RpdmVQYXRoKQotICAgICAgICBtb3Zl
VG8oci5sb2NhdGlvbigpKTsKLQotICAgIENPTVB0cjxJRDJEMUVsbGlwc2VHZW9tZXRyeT4gZWxs
aXBzZTsKLSAgICAvLyBOb3RlOiBUaGUgcmFkaWkgb2YgdGhlIGVsbGlwc2UgY29udGFpbmVkIHdp
dGhpbiBhIHJlY3RhbmdlIGFyZSBoYWxmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSByZWN0
LgotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3Jl
YXRlRWxsaXBzZUdlb21ldHJ5KEQyRDE6OkVsbGlwc2Uoci5jZW50ZXIoKSwgMC41ICogci53aWR0
aCgpLCAwLjUgKiByLmhlaWdodCgpKSwgJmVsbGlwc2UpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNV
Q0NFRURFRChocikpOwotICAgIGFwcGVuZEdlb21ldHJ5KGVsbGlwc2UuZ2V0KCkpOwotICAgIEFT
U0VSVChyZWZDb3VudChlbGxpcHNlLmdldCgpKSA9PSAyKTsKLX0KLQotdm9pZCBQYXRoOjphZGRQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQot
ewotICAgIGlmICghcGF0aC5wbGF0Zm9ybVBhdGgoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCF0cmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLQotdm9pZCBQYXRoOjpjbGVhcigpCi17Ci0gICAgaWYgKGlz
TnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhdGggPSBudWxscHRyOwotICAgIG1f
YWN0aXZlUGF0aCA9IG51bGxwdHI7Ci0gICAgY2xlYXJHZW9tZXRyaWVzKCk7Ci19Ci0KLWJvb2wg
UGF0aDo6aXNFbXB0eVNsb3dDYXNlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGF0aC0+R2V0U291
cmNlR2VvbWV0cnlDb3VudCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEFTU0VSVCht
X3BhdGgtPkdldFNvdXJjZUdlb21ldHJ5Q291bnQoKSA9PSBtX2dlb21ldHJpZXMuc2l6ZSgpKTsK
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotRmxvYXRQb2ludCBQYXRoOjpjdXJyZW50UG9pbnRT
bG93Q2FzZSgpIGNvbnN0Ci17Ci0gICAgZmxvYXQgbGVuZ3RoID0gMDsKLSAgICBIUkVTVUxUIGhy
ID0gbV9wYXRoLT5Db21wdXRlTGVuZ3RoKG51bGxwdHIsICZsZW5ndGgpOwotICAgIGlmICghU1VD
Q0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKLQotICAgIEQyRDFfUE9J
TlRfMkYgcG9pbnQgPSB7IH07Ci0gICAgRDJEMV9QT0lOVF8yRiB0YW5nZW50ID0geyB9OwotICAg
IGhyID0gbV9wYXRoLT5Db21wdXRlUG9pbnRBdExlbmd0aChsZW5ndGgsIG51bGxwdHIsICZwb2lu
dCwgJnRhbmdlbnQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIEZs
b2F0UG9pbnQoKTsKLQotICAgIHJldHVybiBwb2ludDsKLX0KLQotZmxvYXQgUGF0aDo6bGVuZ3Ro
KCkgY29uc3QKLXsKLSAgICBmbG9hdCBsZW5ndGggPSAwOwotICAgIEhSRVNVTFQgaHIgPSBtX3Bh
dGgtPkNvbXB1dGVMZW5ndGgobnVsbHB0ciwgJmxlbmd0aCk7Ci0gICAgaWYgKCFTVUNDRUVERUQo
aHIpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBsZW5ndGg7Ci19Ci0KLXZvaWQg
UGF0aDo6YXBwbHlTbG93Q2FzZShjb25zdCBQYXRoQXBwbGllckZ1bmN0aW9uJikgY29uc3QKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFBhdGg6OmlzTnVsbCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuICFtX3BhdGg7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0
MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9QYXR0ZXJuRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQp
CkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCi0KLSNp
ZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5o
IgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotSUQyRDFCaXRtYXBCcnVzaCogUGF0dGVybjo6Y3JlYXRlUGxh
dGZvcm1QYXR0ZXJuKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgZmxvYXQgYWxwaGEs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtYXRpb24pIGNvbnN0Ci17
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0gPSB1c2VyU3BhY2VUcmFuc2Zv
cm1hdGlvbiAqIG1fcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb247Ci0gICAgYXV0byBiaXRtYXBC
cnVzaFByb3BlcnRpZXMgPSBEMkQxOjpCaXRtYXBCcnVzaFByb3BlcnRpZXMoKTsKLSAgICBiaXRt
YXBCcnVzaFByb3BlcnRpZXMuZXh0ZW5kTW9kZVggPSBtX3JlcGVhdFggPyBEMkQxX0VYVEVORF9N
T0RFX1dSQVAgOiBEMkQxX0VYVEVORF9NT0RFX0NMQU1QOwotICAgIGJpdG1hcEJydXNoUHJvcGVy
dGllcy5leHRlbmRNb2RlWSA9IG1fcmVwZWF0WSA/IEQyRDFfRVhURU5EX01PREVfV1JBUCA6IEQy
RDFfRVhURU5EX01PREVfQ0xBTVA7Ci0KLSAgICBhdXRvIGJydXNoUHJvcGVydGllcyA9IEQyRDE6
OkJydXNoUHJvcGVydGllcygpOwotICAgIGJydXNoUHJvcGVydGllcy50cmFuc2Zvcm0gPSBwYXR0
ZXJuVHJhbnNmb3JtOwotICAgIGJydXNoUHJvcGVydGllcy5vcGFjaXR5ID0gYWxwaGE7Ci0KLSAg
ICBhdXRvJiBwYXR0ZXJuSW1hZ2UgPSB0aWxlSW1hZ2UoKTsKLSAgICBhdXRvIG5hdGl2ZUltYWdl
ID0gcGF0dGVybkltYWdlLm5hdGl2ZUltYWdlKCZjb250ZXh0KTsKLSAgICBpZiAoIW5hdGl2ZUlt
YWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcGxhdGZvcm1Db250ZXh0
ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChwbGF0Zm9y
bUNvbnRleHQpOwotCi0gICAgSUQyRDFCaXRtYXBCcnVzaCogcGF0dGVybkJydXNoID0gbnVsbHB0
cjsKLSAgICBIUkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKS0+Q3Jl
YXRlQml0bWFwQnJ1c2gobmF0aXZlSW1hZ2UuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRpZXMs
ICZicnVzaFByb3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOwotICAgIEFTU0VSVChTVUNDRUVERUQo
aHIpKTsKLSAgICByZXR1cm4gcGF0dGVybkJydXNoOwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQu
Y3BwCShub25leGlzdGVudCkKQEAgLTEsMzk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQot
I2luY2x1ZGUgIkRpcmVjdDJET3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0
aWVzLmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEVu
Y2Fwc3VsYXRlcyB0aGUgYWRkaXRpb25hbCBwYWludGluZyBzdGF0ZSBpbmZvcm1hdGlvbiB3ZSBz
dG9yZSBmb3IgZWFjaAotLy8gcHVzaGVkIGdyYXBoaWNzIHN0YXRlLgotY2xhc3MgUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQ6OlN0YXRlIHsKLXB1YmxpYzoKLSAgICBTdGF0ZSgpID0gZGVmYXVsdDsK
LQotICAgIENPTVB0cjxJRDJEMURyYXdpbmdTdGF0ZUJsb2NrPiBtX2RyYXdpbmdTdGF0ZUJsb2Nr
OwotICAgIENPTVB0cjxJRDJEMUxheWVyPiBtX2FjdGl2ZUxheWVyOwotICAgIFZlY3RvcjxEaXJl
Y3QyRExheWVyVHlwZT4gbV9jbGlwczsKLX07Ci0KLVBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0LCBG
dW5jdGlvbjx2b2lkKCk+JiYgcHJlRHJhd0hhbmRsZXIsIEZ1bmN0aW9uPHZvaWQoKT4mJiBwb3N0
RHJhd0hhbmRsZXIpCi0gICAgOiBtX3JlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpCi0gICAgLCBt
X3ByZURyYXdIYW5kbGVyKFdURk1vdmUocHJlRHJhd0hhbmRsZXIpKQotICAgICwgbV9wb3N0RHJh
d0hhbmRsZXIoV1RGTW92ZShwb3N0RHJhd0hhbmRsZXIpKQotewotICAgIG1fc3RhdGVTdGFjay5h
cHBlbmQoU3RhdGUoKSk7Ci0gICAgbV9zdGF0ZSA9ICZtX3N0YXRlU3RhY2subGFzdCgpOwotCi0g
ICAgbV9kZXZpY2VDb250ZXh0LnF1ZXJ5KG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAgICBSRUxF
QVNFX0FTU0VSVCghIW1fZGV2aWNlQ29udGV4dCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQ6OnNldFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0
KQotewotICAgIG1fcmVuZGVyVGFyZ2V0ID0gcmVuZGVyVGFyZ2V0OwotCi0gICAgbV9kZXZpY2VD
b250ZXh0LnF1ZXJ5KG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVCgh
IW1fZGV2aWNlQ29udGV4dCk7Ci19Ci0KLUlEMkQxTGF5ZXIqIFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEOjpjbGlwTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX3N0YXRlLT5tX2FjdGl2ZUxh
eWVyLmdldCgpOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpjbGVhckNsaXBz
KFZlY3RvcjxEaXJlY3QyRExheWVyVHlwZT4mIGNsaXBzKQotewotICAgIGZvciAoYXV0byBjbGlw
VHlwZSA9IGNsaXBzLnJiZWdpbigpOyBjbGlwVHlwZSAhPSBjbGlwcy5yZW5kKCk7ICsrY2xpcFR5
cGUpIHsKLSAgICAgICAgaWYgKCpjbGlwVHlwZSA9PSBBeGlzQWxpZ25lZENsaXApCi0gICAgICAg
ICAgICBtX3JlbmRlclRhcmdldC0+UG9wQXhpc0FsaWduZWRDbGlwKCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG1fcmVuZGVyVGFyZ2V0LT5Qb3BMYXllcigpOwotICAgIH0KLQotICAgIGNs
aXBzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnJlc3RvcmUo
KQotewotICAgIEFTU0VSVChtX3JlbmRlclRhcmdldCk7Ci0KLSAgICAvLyBObyBuZWVkIHRvIHJl
c3RvcmUgaWYgd2UgZG9uJ3QgaGF2ZSBhIHNhdmVkIGVsZW1lbnQgb24gdGhlIHN0YWNrLgotICAg
IGlmIChtX3N0YXRlU3RhY2suc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1
dG8mIHJlc3RvcmVTdGF0ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7Ci0gICAgaWYgKHJlc3RvcmVT
dGF0ZS5tX2RyYXdpbmdTdGF0ZUJsb2NrKSB7Ci0gICAgICAgIG1fcmVuZGVyVGFyZ2V0LT5SZXN0
b3JlRHJhd2luZ1N0YXRlKHJlc3RvcmVTdGF0ZS5tX2RyYXdpbmdTdGF0ZUJsb2NrLmdldCgpKTsK
LSAgICAgICAgcmVzdG9yZVN0YXRlLm1fZHJhd2luZ1N0YXRlQmxvY2sgPSBudWxscHRyOwotICAg
IH0KLQotICAgIGNsZWFyQ2xpcHMocmVzdG9yZVN0YXRlLm1fY2xpcHMpOwotCi0gICAgbV9zdGF0
ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICBBU1NFUlQoIW1fc3RhdGVTdGFjay5pc0VtcHR5KCkp
OwotICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLX0KLQotUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ6On5QbGF0Zm9ybUNvbnRleHREaXJlY3QyRCgpID0gZGVmYXVsdDsKLQotdm9p
ZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2F2ZSgpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGVT
dGFjay5zaXplKCkgPj0gMSk7IC8vIFRoZXJlIHNob3VsZCBhbHdheXMgYmUgb25lIHN0YXRlIG9u
IHRoZSBzdGFjay4KLSAgICBBU1NFUlQobV9yZW5kZXJUYXJnZXQpOwotCi0gICAgbV9zdGF0ZVN0
YWNrLmFwcGVuZChTdGF0ZSgpKTsKLSAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFjay5sYXN0KCk7
Ci0KLSAgICBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRHJhd2luZ1N0
YXRlQmxvY2soJm1fc3RhdGUtPm1fZHJhd2luZ1N0YXRlQmxvY2spOwotCi0gICAgbV9yZW5kZXJU
YXJnZXQtPlNhdmVEcmF3aW5nU3RhdGUobV9zdGF0ZS0+bV9kcmF3aW5nU3RhdGVCbG9jay5nZXQo
KSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnB1c2hSZW5kZXJDbGlwKERp
cmVjdDJETGF5ZXJUeXBlIGNsaXBUeXBlKQotewotICAgIEFTU0VSVChoYXNTYXZlZFN0YXRlKCkp
OwotICAgIG1fc3RhdGUtPm1fY2xpcHMuYXBwZW5kKGNsaXBUeXBlKTsKLX0KLQotdm9pZCBQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0QWN0aXZlTGF5ZXIoQ09NUHRyPElEMkQxTGF5ZXI+JiYg
bGF5ZXIpCi17Ci0gICAgQVNTRVJUKGhhc1NhdmVkU3RhdGUoKSk7Ci0gICAgbV9zdGF0ZS0+bV9h
Y3RpdmVMYXllciA9IGxheWVyOwotfQotCi1DT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEOjpicnVzaFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9SX0Ym
IGNvbG9yKQotewotICAgIGF1dG8gY29sb3JLZXkgPSBjb2xvckNvbnZlcnQ8U1JHQkE8dWludDhf
dD4+KFNSR0JBPGZsb2F0PiB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSk7
Ci0KLSAgICBpZiAoIWNvbG9yS2V5KSB7Ci0gICAgICAgIGlmICghbV96ZXJvQnJ1c2gpCi0gICAg
ICAgICAgICBtX3JlbmRlclRhcmdldC0+Q3JlYXRlU29saWRDb2xvckJydXNoKGNvbG9yLCAmbV96
ZXJvQnJ1c2gpOwotICAgICAgICByZXR1cm4gbV96ZXJvQnJ1c2g7Ci0gICAgfQotCi0gICAgaWYg
KGNvbG9yS2V5ID09IDB4RkZGRkZGRkYpIHsKLSAgICAgICAgaWYgKCFtX3doaXRlQnJ1c2gpCi0g
ICAgICAgICAgICBtX3JlbmRlclRhcmdldC0+Q3JlYXRlU29saWRDb2xvckJydXNoKGNvbG9yLCAm
bV93aGl0ZUJydXNoKTsKLSAgICAgICAgcmV0dXJuIG1fd2hpdGVCcnVzaDsKLSAgICB9Ci0KLSAg
ICBhdXRvIGV4aXN0aW5nQnJ1c2ggPSBtX3NvbGlkQ29sb3JlZEJydXNoQ2FjaGUuZW5zdXJlKGNv
bG9yS2V5LCBbdGhpcywgY29sb3JdIHsKLSAgICAgICAgQ09NUHRyPElEMkQxU29saWRDb2xvckJy
dXNoPiBjb2xvckJydXNoOwotICAgICAgICBtX3JlbmRlclRhcmdldC0+Q3JlYXRlU29saWRDb2xv
ckJydXNoKGNvbG9yLCAmY29sb3JCcnVzaCk7Ci0gICAgICAgIHJldHVybiBjb2xvckJydXNoOwot
ICAgIH0pOwotCi0gICAgcmV0dXJuIGV4aXN0aW5nQnJ1c2guaXRlcmF0b3ItPnZhbHVlOwotfQot
Ci12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpyZWNvbXB1dGVTdHJva2VTdHlsZSgpCi17
Ci0gICAgaWYgKCFtX3N0cm9rZVN5bGVJc0RpcnR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2QyZFN0cm9rZVN0eWxlID0gbnVsbHB0cjsKLQotICAgIERhc2hBcnJheSBkYXNoZXM7Ci0gICAg
ZmxvYXQgcGF0dGVybk9mZnNldCA9IDA7Ci0gICAgYXV0byBkYXNoU3R5bGUgPSBEMkQxX0RBU0hf
U1RZTEVfU09MSUQ7Ci0KLSAgICBpZiAoKG1fc3Ryb2tlU3R5bGUgIT0gU29saWRTdHJva2UpICYm
IChtX3N0cm9rZVN0eWxlICE9IE5vU3Ryb2tlKSkgewotICAgICAgICBkYXNoU3R5bGUgPSBEMkQx
X0RBU0hfU1RZTEVfQ1VTVE9NOwotICAgICAgICBwYXR0ZXJuT2Zmc2V0ID0gbV9wYXR0ZXJuT2Zm
c2V0IC8gbV9zdHJva2VUaGlja25lc3M7Ci0gICAgICAgIGRhc2hlcyA9IG1fZGFzaGVzOwotCi0g
ICAgICAgIC8vIEluIERpcmVjdDJELCBkYXNoZXMgYW5kIGRvdHMgYXJlIGRlZmluZWQgaW4gdGVy
bXMgb2YgdGhlIHJhdGlvIG9mIHRoZSBkYXNoIGxlbmd0aCB0byB0aGUgbGluZSB0aGlja25lc3Mu
Ci0gICAgICAgIGZvciAoYXV0byYgZGFzaCA6IGRhc2hlcykKLSAgICAgICAgICAgIGRhc2ggLz0g
bV9zdHJva2VUaGlja25lc3M7Ci0gICAgfQotCi0gICAgYXV0byBzdHJva2VTdHlsZVByb3BlcnRp
ZXMgPSBEMkQxOjpTdHJva2VTdHlsZVByb3BlcnRpZXMobV9saW5lQ2FwLCBtX2xpbmVDYXAsIG1f
bGluZUNhcCwgbV9saW5lSm9pbiwgbV9taXRlckxpbWl0LCBkYXNoU3R5bGUsIHBhdHRlcm5PZmZz
ZXQpOwotICAgIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVTdHJva2VT
dHlsZSgmc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzLCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgp
LCAmbV9kMmRTdHJva2VTdHlsZSk7Ci0KLSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0gZmFsc2U7
Ci19Ci0KLUlEMkQxU3Ryb2tlU3R5bGUqIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzdHJva2VT
dHlsZSgpCi17Ci0gICAgcmVjb21wdXRlU3Ryb2tlU3R5bGUoKTsKLSAgICByZXR1cm4gbV9kMmRT
dHJva2VTdHlsZS5nZXQoKTsKLX0KLQotRDJEMV9TVFJPS0VfU1RZTEVfUFJPUEVSVElFUyBQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRDo6c3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gRDJEMTo6U3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKG1fbGluZUNhcCwgbV9saW5lQ2Fw
LCBtX2xpbmVDYXAsIG1fbGluZUpvaW4sIG1fbWl0ZXJMaW1pdCwgRDJEMV9EQVNIX1NUWUxFX1NP
TElELCAwLjBmKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0TGluZUNh
cChEMkQxX0NBUF9TVFlMRSBsaW5lQ2FwKQotewotICAgIGlmIChtX2xpbmVDYXAgPT0gbGluZUNh
cCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9saW5lQ2FwID0gbGluZUNhcDsKLSAgICBtX3N0
cm9rZVN5bGVJc0RpcnR5ID0gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RDo6c2V0TGluZUpvaW4oRDJEMV9MSU5FX0pPSU4gam9pbikKLXsKLSAgICBpZiAobV9saW5lSm9p
biA9PSBqb2luKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xpbmVKb2luID0gam9pbjsKLSAg
ICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRDo6c2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17Ci0gICAg
aWYgKG1fc3Ryb2tlU3R5bGUgPT0gc3Ryb2tlU3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fc3Ryb2tlU3R5bGUgPSBzdHJva2VTdHlsZTsKLSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0g
dHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0U3Ryb2tlVGhpY2tu
ZXNzKGZsb2F0IHRoaWNrbmVzcykKLXsKLSAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFs
KHRoaWNrbmVzcywgbV9zdHJva2VUaGlja25lc3MpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3N0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsKLSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0g
dHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdChm
bG9hdCBjYW52YXNNaXRlckxpbWl0KQotewotICAgIC8vIERpcmVjdDJEIG1pdGVyIGxpbWl0IGlz
IGluIHRlcm1zIG9mIEhBTEYgdGhlIGxpbmUgdGhpY2tuZXNzLgotICAgIGZsb2F0IG1pdGVyTGlt
aXQgPSAwLjVmICogY2FudmFzTWl0ZXJMaW1pdDsKLSAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxs
eUVxdWFsKG1pdGVyTGltaXQsIG1fbWl0ZXJMaW1pdCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fbWl0ZXJMaW1pdCA9IG1pdGVyTGltaXQ7Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRy
dWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldERhc2hPZmZzZXQoZmxv
YXQgZGFzaE9mZnNldCkKLXsKLSAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGRhc2hP
ZmZzZXQsIG1fZGFzaE9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGFzaE9mZnNl
dCA9IGRhc2hPZmZzZXQ7Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZv
aWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldERhc2hlcyhjb25zdCBEYXNoQXJyYXkmIGRh
c2hlcykKLXsKLSAgICBpZiAobV9kYXNoZXMgPT0gZGFzaGVzKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2Rhc2hlcyA9IGRhc2hlczsKLSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0gdHJ1ZTsK
LX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0UGF0dGVybldpZHRoKGZsb2F0
IHBhdHRlcm5XaWR0aCkKLXsKLSAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHBhdHRl
cm5XaWR0aCwgbV9wYXR0ZXJuV2lkdGgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhdHRl
cm5XaWR0aCA9IHBhdHRlcm5XaWR0aDsKLSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0gdHJ1ZTsK
LX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0UGF0dGVybk9mZnNldChmbG9h
dCBwYXR0ZXJuT2Zmc2V0KQotewotICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwocGF0
dGVybk9mZnNldCwgbV9wYXR0ZXJuT2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9w
YXR0ZXJuT2Zmc2V0ID0gcGF0dGVybk9mZnNldDsKLSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0g
dHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6YmVnaW5EcmF3KCkKLXsK
LSAgICBBU1NFUlQobV9yZW5kZXJUYXJnZXQpOwotICAgIG1fcmVuZGVyVGFyZ2V0LT5CZWdpbkRy
YXcoKTsKLSAgICArK2JlZ2luRHJhd0NvdW50OwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEOjplbmREcmF3KCkKLXsKLSAgICBBU1NFUlQobV9yZW5kZXJUYXJnZXQpOwotCi0gICAg
aWYgKG1fc3RhdGVTdGFjay5zaXplKCkgPiAxKQotICAgICAgICByZXN0b3JlKCk7Ci0KLSAgICBj
bGVhckNsaXBzKG1fc3RhdGUtPm1fY2xpcHMpOwotCi0gICAgQVNTRVJUKG1fc3RhdGVTdGFjay5z
aXplKCkgPj0gMSk7Ci0KLSAgICBEMkQxX1RBRyBmaXJzdCwgc2Vjb25kOwotICAgIEhSRVNVTFQg
aHIgPSBtX3JlbmRlclRhcmdldC0+RW5kRHJhdygmZmlyc3QsICZzZWNvbmQpOwotCi0gICAgaWYg
KCFTVUNDRUVERUQoaHIpKQotICAgICAgICBXVEZMb2dBbHdheXMoIkZhaWxlZCBpbiBQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRDo6ZW5kRHJhdzogaHI9JXhkLCBmaXJzdD0lbGQsIHNlY29uZD0lbGQi
LCBociwgZmlyc3QsIHNlY29uZCk7Ci0KLSAgICAtLWJlZ2luRHJhd0NvdW50OwotCi0gICAgY29t
cG9zaXRlSWZOZWVkZWQoKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0
VGFncyhEMkQxX1RBRyB0YWcxLCBEMkQxX1RBRyB0YWcyKQotewotI2lmIEFTU0VSVF9FTkFCTEVE
Ci0gICAgbV9yZW5kZXJUYXJnZXQtPlNldFRhZ3ModGFnMSwgdGFnMik7Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTSh0YWcxKTsKLSAgICBVTlVTRURfUEFSQU0odGFnMik7Ci0jZW5kaWYKLX0KLQot
dm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6bm90aWZ5UHJlRHJhd09ic2VydmVyKCkKLXsK
LSAgICBtX3ByZURyYXdIYW5kbGVyKCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQ6Om5vdGlmeVBvc3REcmF3T2JzZXJ2ZXIoKQotewotICAgIG1fcG9zdERyYXdIYW5kbGVyKCk7
Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnB1c2hDbGlwKERpcmVjdDJETGF5
ZXJUeXBlIGNsaXBUeXBlKQotewotICAgIG1fc3RhdGUtPm1fY2xpcHMuYXBwZW5kKGNsaXBUeXBl
KTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6Y29tcG9zaXRlSWZOZWVkZWQo
KQotewotICAgIGlmICghbV9jb21wb3NpdGVTb3VyY2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0KFF1ZXJ5LCBtX3Jl
bmRlclRhcmdldC5nZXQoKSk7Ci0gICAgaWYgKCFiaXRtYXBUYXJnZXQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY3VycmVudENhbnZhcyA9IERpcmVjdDJEOjpj
cmVhdGVCaXRtYXBDb3B5RnJvbUNvbnRleHQoYml0bWFwVGFyZ2V0LmdldCgpKTsKLSAgICBpZiAo
IWN1cnJlbnRDYW52YXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJRDJEMUVmZmVj
dD4gZWZmZWN0OwotCi0gICAgaWYgKG1fY29tcG9zaXRlTW9kZSAhPSBEMkQxX0NPTVBPU0lURV9N
T0RFX0ZPUkNFX0RXT1JEKSB7Ci0gICAgICAgIG1fZGV2aWNlQ29udGV4dC0+Q3JlYXRlRWZmZWN0
KENMU0lEX0QyRDFDb21wb3NpdGUsICZlZmZlY3QpOwotICAgICAgICBlZmZlY3QtPlNldElucHV0
KDAsIG1fY29tcG9zaXRlU291cmNlLmdldCgpKTsKLSAgICAgICAgZWZmZWN0LT5TZXRJbnB1dCgx
LCBjdXJyZW50Q2FudmFzLmdldCgpKTsKLSAgICAgICAgZWZmZWN0LT5TZXRWYWx1ZShEMkQxX0NP
TVBPU0lURV9QUk9QX01PREUsIG1fY29tcG9zaXRlTW9kZSk7Ci0gICAgfSBlbHNlIGlmIChtX2Js
ZW5kTW9kZSAhPSBEMkQxX0JMRU5EX01PREVfRk9SQ0VfRFdPUkQpIHsKLSAgICAgICAgbV9kZXZp
Y2VDb250ZXh0LT5DcmVhdGVFZmZlY3QoQ0xTSURfRDJEMUJsZW5kLCAmZWZmZWN0KTsKLSAgICAg
ICAgZWZmZWN0LT5TZXRJbnB1dCgwLCBjdXJyZW50Q2FudmFzLmdldCgpKTsKLSAgICAgICAgZWZm
ZWN0LT5TZXRJbnB1dCgxLCBtX2NvbXBvc2l0ZVNvdXJjZS5nZXQoKSk7Ci0gICAgICAgIGVmZmVj
dC0+U2V0VmFsdWUoRDJEMV9CTEVORF9QUk9QX01PREUsIG1fYmxlbmRNb2RlKTsKLSAgICB9Ci0K
LSAgICBpZiAoZWZmZWN0KSB7Ci0gICAgICAgIG1fZGV2aWNlQ29udGV4dC0+QmVnaW5EcmF3KCk7
Ci0gICAgICAgIG1fZGV2aWNlQ29udGV4dC0+Q2xlYXIoRDJEMTo6Q29sb3JGKDAsIDAsIDAsIDAp
KTsKLSAgICAgICAgbV9kZXZpY2VDb250ZXh0LT5EcmF3SW1hZ2UoZWZmZWN0LmdldCgpKTsKLSAg
ICAgICAgbV9kZXZpY2VDb250ZXh0LT5FbmREcmF3KCk7Ci0gICAgfQotCi0gICAgbV9jb21wb3Np
dGVTb3VyY2UgPSBudWxscHRyOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpz
ZXRCbGVuZEFuZENvbXBvc2l0ZU1vZGUoRDJEMV9CTEVORF9NT0RFIGJsZW5kLCBEMkQxX0NPTVBP
U0lURV9NT0RFIG1vZGUpCi17Ci0gICAgaWYgKG1vZGUgPT0gbV9jb21wb3NpdGVNb2RlICYmIGJs
ZW5kID09IG1fYmxlbmRNb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBEaXJlY3QyRCBo
YW5kbGVzIGNvbXBvc2l0aW5nIGJhc2VkIG9uIGJpdG1hcHMuIElmIHdlIGFyZSBjaGFuZ2luZyB0
aGUKLSAgICAvLyBjb21wb3NpdGluZyBtb2RlLCB3ZSBuZWVkIHRvIGNhcHR1cmUgdGhlIGN1cnJl
bnQgc3RhdGUgb2YgdGhlIHJlbmRlcmluZwotICAgIC8vIGluIGEgYml0bWFwLCBwZXJmb3JtIGRy
YXdpbmcgb3BlcmF0aW9ucyB1bnRpbCB3ZSBmaW5pc2gsIHRoZW4gaGFuZGxlCi0gICAgLy8gdGhl
IGNvbXBvc3Rpbmcgb2YgdGhlIHR3byBsYXllcnMuCi0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVu
ZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQoUXVlcnksIG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAg
ICBpZiAoIWJpdG1hcFRhcmdldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZW5kRHJhdygpOwot
Ci0gICAgbV9jb21wb3NpdGVNb2RlID0gbW9kZTsKLSAgICBtX2JsZW5kTW9kZSA9IGJsZW5kOwot
Ci0gICAgbV9jb21wb3NpdGVTb3VyY2UgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwQ29weUZyb21D
b250ZXh0KGJpdG1hcFRhcmdldC5nZXQoKSk7Ci0KLSAgICBiZWdpbkRyYXcoKTsKLQotICAgIG1f
ZGV2aWNlQ29udGV4dC0+Q2xlYXIoRDJEMTo6Q29sb3JGKDAsIDAsIDAsIDApKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJE
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Bs
YXRmb3JtQ29udGV4dERpcmVjdDJELmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oCShub25l
eGlzdGVudCkKQEAgLTEsMjEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNp
bmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
IDxkMmQxLmg+Ci0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jaW5jbHVkZSA8ZDJkMWVmZmVjdHMuaD4K
LSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
OwotCi1uYW1lc3BhY2UgRGlyZWN0MkQgewotc3RydWN0IEZpbGxTb3VyY2U7Ci1zdHJ1Y3QgU3Ry
b2tlU291cmNlOwotc3RydWN0IFNoYWRvd1N0YXRlOwotfQotCi1jbGFzcyBQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQpOwotcHVibGljOgotICAgIFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEKElEMkQxUmVuZGVyVGFyZ2V0KiwgRnVuY3Rpb248dm9pZCgpPiYm
IHByZURyYXdIYW5kbGVyID0gW10oKSB7IH0sIEZ1bmN0aW9uPHZvaWQoKT4mJiBwb3N0RHJhd0hh
bmRsZXIgPSBbXSgpIHsgfSk7Ci0gICAgflBsYXRmb3JtQ29udGV4dERpcmVjdDJEKCk7Ci0KLSAg
ICBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KCkgeyByZXR1cm4gbV9yZW5kZXJUYXJn
ZXQuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCop
OwotCi0gICAgSUQyRDFEZXZpY2VDb250ZXh0KiBkZXZpY2VDb250ZXh0KCkgeyByZXR1cm4gbV9k
ZXZpY2VDb250ZXh0LmdldCgpOyB9Ci0KLSAgICBJRDNEMTFEZXZpY2UxKiBkM2REZXZpY2UoKSBj
b25zdCB7IHJldHVybiBtX2QzZERldmljZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0RDNERGV2aWNl
KElEM0QxMURldmljZTEqIGRldmljZSkgeyBtX2QzZERldmljZSA9IGRldmljZTsgfQotCi0gICAg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBncmFwaGljc0NvbnRleHRQcml2YXRlKCkg
eyByZXR1cm4gbV9ncmFwaGljc0NvbnRleHRQcml2YXRlOyB9Ci0gICAgdm9pZCBzZXRHcmFwaGlj
c0NvbnRleHRQcml2YXRlKEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZ3JhcGhpY3ND
b250ZXh0UHJpdmF0ZSkgeyBtX2dyYXBoaWNzQ29udGV4dFByaXZhdGUgPSBncmFwaGljc0NvbnRl
eHRQcml2YXRlOyB9Ci0KLSAgICBJRDJEMUxheWVyKiBjbGlwTGF5ZXIoKSBjb25zdDsKLSAgICBJ
RDJEMVN0cm9rZVN0eWxlKiBzdHJva2VTdHlsZSgpOwotICAgIEQyRDFfU1RST0tFX1NUWUxFX1BS
T1BFUlRJRVMgc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKCkgY29uc3Q7Ci0gICAgSUQyRDFTdHJva2VT
dHlsZSogcGxhdGZvcm1TdHJva2VTdHlsZSgpIGNvbnN0OwotCi0gICAgQ09NUHRyPElEMkQxU29s
aWRDb2xvckJydXNoPiBicnVzaFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9SX0YmKTsKLQotICAg
IHZvaWQgc2F2ZSgpOwotICAgIHZvaWQgcmVzdG9yZSgpOwotCi0gICAgYm9vbCBoYXNTYXZlZFN0
YXRlKCkgY29uc3QgeyByZXR1cm4gIW1fc3RhdGVTdGFjay5pc0VtcHR5KCk7IH0KLQotICAgIHZv
aWQgYmVnaW5EcmF3KCk7Ci0gICAgdm9pZCBlbmREcmF3KCk7Ci0KLSAgICBlbnVtIERpcmVjdDJE
TGF5ZXJUeXBlIHsgQXhpc0FsaWduZWRDbGlwLCBMYXllckNsaXAgfTsKLSAgICB2b2lkIHB1c2hS
ZW5kZXJDbGlwKERpcmVjdDJETGF5ZXJUeXBlKTsKLSAgICB2b2lkIHNldEFjdGl2ZUxheWVyKENP
TVB0cjxJRDJEMUxheWVyPiYmKTsKLQotICAgIHZvaWQgcmVjb21wdXRlU3Ryb2tlU3R5bGUoKTsK
LSAgICBmbG9hdCBzdHJva2VUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZVRoaWNr
bmVzczsgfQotCi0gICAgc3RydWN0IFRyYW5zcGFyZW5jeUxheWVyU3RhdGUgewotICAgICAgICBD
T01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IHJlbmRlclRhcmdldDsKLSAgICAgICAgQ29s
b3Igc2hhZG93Q29sb3I7Ci0gICAgICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgICAg
IGZsb2F0IG9wYWNpdHkgeyAxLjAgfTsKLSAgICAgICAgZmxvYXQgc2hhZG93Qmx1ciB7IDAgfTsK
LSAgICAgICAgYm9vbCBoYXNTaGFkb3cgeyBmYWxzZSB9OwotICAgIH07Ci0gICAgVmVjdG9yPFRy
YW5zcGFyZW5jeUxheWVyU3RhdGU+IG1fdHJhbnNwYXJlbmN5TGF5ZXJTdGFjazsKLQotICAgIHZv
aWQgc2V0TGluZUNhcChEMkQxX0NBUF9TVFlMRSk7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihEMkQx
X0xJTkVfSk9JTik7Ci0gICAgdm9pZCBzZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSk7Ci0gICAg
dm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KTsKLSAgICB2b2lkIHNldERhc2hPZmZzZXQoZmxvYXQp
OwotICAgIHZvaWQgc2V0UGF0dGVybldpZHRoKGZsb2F0KTsKLSAgICB2b2lkIHNldFBhdHRlcm5P
ZmZzZXQoZmxvYXQpOwotICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KTsKLSAgICB2
b2lkIHNldERhc2hlcyhjb25zdCBEYXNoQXJyYXkmKTsKLQotICAgIHZvaWQgc2V0QmxlbmRBbmRD
b21wb3NpdGVNb2RlKEQyRDFfQkxFTkRfTU9ERSwgRDJEMV9DT01QT1NJVEVfTU9ERSk7Ci0KLSAg
ICB2b2lkIHNldFRhZ3MoRDJEMV9UQUcgdGFnMSwgRDJEMV9UQUcgdGFnMik7Ci0gICAgdm9pZCBu
b3RpZnlQcmVEcmF3T2JzZXJ2ZXIoKTsKLSAgICB2b2lkIG5vdGlmeVBvc3REcmF3T2JzZXJ2ZXIo
KTsKLQotICAgIHZvaWQgcHVzaENsaXAoRGlyZWN0MkRMYXllclR5cGUpOwotCi1wcml2YXRlOgot
ICAgIHZvaWQgY2xlYXJDbGlwcyhWZWN0b3I8RGlyZWN0MkRMYXllclR5cGU+Jik7Ci0gICAgdm9p
ZCBjb21wb3NpdGVJZk5lZWRlZCgpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKiBtX2dyYXBoaWNzQ29udGV4dFByaXZhdGUgeyBudWxscHRyIH07Ci0KLSAgICBDT01QdHI8
SUQyRDFSZW5kZXJUYXJnZXQ+IG1fcmVuZGVyVGFyZ2V0OwotICAgIENPTVB0cjxJRDJEMURldmlj
ZUNvbnRleHQ+IG1fZGV2aWNlQ29udGV4dDsKLSAgICBDT01QdHI8SUQyRDFTdHJva2VTdHlsZT4g
bV9kMmRTdHJva2VTdHlsZTsKLQotICAgIEhhc2hNYXA8dWludDMyX3QsIENPTVB0cjxJRDJEMVNv
bGlkQ29sb3JCcnVzaD4+IG1fc29saWRDb2xvcmVkQnJ1c2hDYWNoZTsKLSAgICBDT01QdHI8SUQy
RDFTb2xpZENvbG9yQnJ1c2g+IG1fd2hpdGVCcnVzaDsKLSAgICBDT01QdHI8SUQyRDFTb2xpZENv
bG9yQnJ1c2g+IG1femVyb0JydXNoOwotICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4g
bV9zb2xpZFN0cm9rZUJydXNoOwotICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gbV9z
b2xpZEZpbGxCcnVzaDsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXBCcnVzaD4gbV9wYXR0ZXJuU3Ry
b2tlQnJ1c2g7Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwQnJ1c2g+IG1fcGF0dGVybkZpbGxCcnVz
aDsKLQotICAgIENPTVB0cjxJRDNEMTFEZXZpY2UxPiBtX2QzZERldmljZTsKLQotICAgIENPTVB0
cjxJRDJEMUJpdG1hcD4gbV9jb21wb3NpdGVTb3VyY2U7Ci0KLSAgICBGdW5jdGlvbjx2b2lkKCk+
IG1fcHJlRHJhd0hhbmRsZXI7Ci0gICAgRnVuY3Rpb248dm9pZCgpPiBtX3Bvc3REcmF3SGFuZGxl
cjsKLQotICAgIGNsYXNzIFN0YXRlOwotICAgIFN0YXRlKiBtX3N0YXRlIHsgbnVsbHB0ciB9Owot
ICAgIFZlY3RvcjxTdGF0ZT4gbV9zdGF0ZVN0YWNrOwotCi0gICAgRDJEMV9DQVBfU1RZTEUgbV9s
aW5lQ2FwIHsgRDJEMV9DQVBfU1RZTEVfRkxBVCB9OwotICAgIEQyRDFfTElORV9KT0lOIG1fbGlu
ZUpvaW4geyBEMkQxX0xJTkVfSk9JTl9NSVRFUiB9OwotICAgIFN0cm9rZVN0eWxlIG1fc3Ryb2tl
U3R5bGUgeyBTb2xpZFN0cm9rZSB9OwotICAgIERhc2hBcnJheSBtX2Rhc2hlczsKLQotICAgIHVu
c2lnbmVkIGJlZ2luRHJhd0NvdW50IHsgMCB9OwotCi0gICAgZmxvYXQgbV9taXRlckxpbWl0IHsg
MTAuMGYgfTsKLSAgICBmbG9hdCBtX2Rhc2hPZmZzZXQgeyAwIH07Ci0gICAgZmxvYXQgbV9wYXR0
ZXJuV2lkdGggeyAxLjBmIH07Ci0gICAgZmxvYXQgbV9wYXR0ZXJuT2Zmc2V0IHsgMCB9OwotICAg
IGZsb2F0IG1fc3Ryb2tlVGhpY2tuZXNzIHsgMCB9OwotICAgIGZsb2F0IG1fYWxwaGEgeyAxLjAg
fTsKLQotICAgIGJvb2wgbV9zdHJva2VTeWxlSXNEaXJ0eSB7IGZhbHNlIH07Ci0KLSAgICBEMkQx
X0JMRU5EX01PREUgbV9ibGVuZE1vZGUgeyBEMkQxX0JMRU5EX01PREVfTVVMVElQTFkgfTsKLSAg
ICBEMkQxX0NPTVBPU0lURV9NT0RFIG1fY29tcG9zaXRlTW9kZSB7IEQyRDFfQ09NUE9TSVRFX01P
REVfU09VUkNFX09WRVIgfTsKLQotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0g
ICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKLX07Ci0KLWNs
YXNzIFBsYXRmb3JtQ29udGV4dFN0YXRlU2F2ZXIgewotcHVibGljOgotICAgIFBsYXRmb3JtQ29u
dGV4dFN0YXRlU2F2ZXIoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIGNvbnRleHQsIGJvb2wgc2F2
ZUFuZFJlc3RvcmUgPSB0cnVlKQotICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICAg
ICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCi0gICAgewotICAgICAgICBpZiAo
bV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAgIG1fY29udGV4dC5zYXZlKCk7Ci0gICAgfQot
Ci0gICAgflBsYXRmb3JtQ29udGV4dFN0YXRlU2F2ZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1f
c2F2ZUFuZFJlc3RvcmUpCi0gICAgICAgICAgICBtX2NvbnRleHQucmVzdG9yZSgpOwotICAgIH0K
LQotICAgIHZvaWQgc2F2ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fc2F2ZUFuZFJlc3Rv
cmUpOwotICAgICAgICBtX2NvbnRleHQuc2F2ZSgpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3Jl
ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc3RvcmUoKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKG1fc2F2ZUFuZFJlc3RvcmUpOwotICAgICAgICBtX2NvbnRleHQucmVzdG9yZSgpOwotICAg
ICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBkaWRTYXZl
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3NhdmVBbmRSZXN0b3JlOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgbV9jb250ZXh0OwotICAg
IGJvb2wgbV9zYXZlQW5kUmVzdG9yZSB7IGZhbHNlIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRh
RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpA
QCAtMSwyMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLQotI2lmIFVT
RShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkRpcmVjdFdyaXRlVXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udERl
c2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiSFduZERDLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlIDxjb211dGlsLmg+Ci0jaW5jbHVkZSA8ZHdyaXRlXzMuaD4KLSNpbmNsdWRl
IDxtbGFuZy5oPgotI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNsdWRlIDx1bmljb2Rl
L3Vub3JtLmg+Ci0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgVmVjdG9yPFdDSEFSPiBn
ZXRGYWNlTmFtZShJRFdyaXRlRm9udCogZm9udCkKLXsKLSAgICBpZiAoIWZvbnQpCi0gICAgICAg
IHJldHVybiBWZWN0b3I8V0NIQVI+KCk7Ci0KLSAgICBDT01QdHI8SURXcml0ZUxvY2FsaXplZFN0
cmluZ3M+IGxvY2FsaXplZEZhY2VOYW1lczsKLSAgICBIUkVTVUxUIGhyID0gZm9udC0+R2V0RmFj
ZU5hbWVzKCZsb2NhbGl6ZWRGYWNlTmFtZXMpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURF
RChocikpOwotCi0gICAgVUlOVDMyIGxvY2FsZUluZGV4ID0gMDsKLSAgICBCT09MIGV4aXN0cyA9
IGZhbHNlOwotCi0gICAgd2NoYXJfdCBsb2NhbGVOYW1lW0xPQ0FMRV9OQU1FX01BWF9MRU5HVEhd
OwotICAgIGludCBsb2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUobG9jYWxl
TmFtZSwgTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7Ci0gICAgaWYgKGxvY2FsZUxlbmd0aCkKLSAg
ICAgICAgaHIgPSBsb2NhbGl6ZWRGYWNlTmFtZXMtPkZpbmRMb2NhbGVOYW1lKGxvY2FsZU5hbWUs
ICZsb2NhbGVJbmRleCwgJmV4aXN0cyk7Ci0KLSAgICBpZiAoIWV4aXN0cyB8fCAhU1VDQ0VFREVE
KGhyKSkKLSAgICAgICAgaHIgPSBsb2NhbGl6ZWRGYWNlTmFtZXMtPkZpbmRMb2NhbGVOYW1lKEwi
ZW4tdXMiLCAmbG9jYWxlSW5kZXgsICZleGlzdHMpOwotCi0gICAgaWYgKCFleGlzdHMgfHwgIVNV
Q0NFRURFRChocikpCi0gICAgICAgIGxvY2FsZUluZGV4ID0gMDsKLQotICAgIFVJTlQzMiBmYWNl
TmFtZUxlbmd0aCA9IDA7Ci0gICAgaHIgPSBsb2NhbGl6ZWRGYWNlTmFtZXMtPkdldFN0cmluZ0xl
bmd0aChsb2NhbGVJbmRleCwgJmZhY2VOYW1lTGVuZ3RoKTsKLSAgICBpZiAoIVNVQ0NFRURFRCho
cikpCi0gICAgICAgIHJldHVybiBWZWN0b3I8V0NIQVI+KCk7Ci0KLSAgICBWZWN0b3I8V0NIQVI+
IGZhY2VOYW1lKGZhY2VOYW1lTGVuZ3RoICsgMSk7Ci0gICAgaHIgPSBsb2NhbGl6ZWRGYWNlTmFt
ZXMtPkdldFN0cmluZyhsb2NhbGVJbmRleCwgZmFjZU5hbWUuZGF0YSgpLCBmYWNlTmFtZS5zaXpl
KCkpOwotCi0gICAgcmV0dXJuIGZhY2VOYW1lOwotfQotCi12b2lkIEZvbnQ6OnBsYXRmb3JtSW5p
dCgpCi17Ci0gICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEuc3ludGhl
dGljQm9sZCgpID8gMS4wZiA6IDAuZjsKLSAgICBtX3NjcmlwdENhY2hlID0gMDsKLSAgICBtX3Nj
cmlwdEZvbnRQcm9wZXJ0aWVzID0gMDsKLQotICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREko
KSkKLSAgICAgICAgcmV0dXJuIGluaXRHRElGb250KCk7Ci0KLSAgICBmbG9hdCBwb2ludFNpemUg
PSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0KLSAgICBhdXRvIGZvbnQgPSBtX3BsYXRmb3JtRGF0
YS5kd0ZvbnQoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChmb250KTsKLQotICAgIGF1dG8gZm9udEZh
Y2UgPSBtX3BsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZm9u
dEZhY2UpOwotCi0gICAgRFdSSVRFX0ZPTlRfTUVUUklDUyBmb250TWV0cmljczsKLSAgICBmb250
LT5HZXRNZXRyaWNzKCZmb250TWV0cmljcyk7Ci0KLSAgICBpbnQgaUFzY2VudCA9IGZvbnRNZXRy
aWNzLmFzY2VudDsKLSAgICBpbnQgaURlc2NlbnQgPSBmb250TWV0cmljcy5kZXNjZW50OwotICAg
IGludCBpTGluZUdhcCA9IGZvbnRNZXRyaWNzLmxpbmVHYXA7Ci0gICAgaW50IGlDYXBIZWlnaHQg
PSBmb250TWV0cmljcy5jYXBIZWlnaHQ7Ci0KLSAgICB1bnNpZ25lZCB1bml0c1BlckVtID0gZm9u
dE1ldHJpY3MuZGVzaWduVW5pdHNQZXJFbTsKLSAgICBmbG9hdCBmQXNjZW50ID0gc2NhbGVFbVRv
VW5pdHMoaUFzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgZmxvYXQgZkRlc2Nl
bnQgPSBzY2FsZUVtVG9Vbml0cyhpRGVzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0g
ICAgZmxvYXQgZkNhcEhlaWdodCA9IHNjYWxlRW1Ub1VuaXRzKGlDYXBIZWlnaHQsIHVuaXRzUGVy
RW0pICogcG9pbnRTaXplOwotICAgIGZsb2F0IGZMaW5lR2FwID0gc2NhbGVFbVRvVW5pdHMoaUxp
bmVHYXAsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotCi0gICAgaWYgKG9yaWdpbigpID09IE9y
aWdpbjo6TG9jYWwpIHsKLSAgICAgICAgVmVjdG9yPFdDSEFSPiBmYWNlTmFtZSA9IGdldEZhY2VO
YW1lKGZvbnQpOwotICAgICAgICBmQXNjZW50ID0gYXNjZW50Q29uc2lkZXJpbmdNYWNBc2NlbnRI
YWNrKGZhY2VOYW1lLmRhdGEoKSwgZkFzY2VudCwgZkRlc2NlbnQpOwotICAgIH0KLQotICAgIG1f
Zm9udE1ldHJpY3Muc2V0QXNjZW50KGZBc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0RGVz
Y2VudChmRGVzY2VudCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRDYXBIZWlnaHQoZkNhcEhlaWdo
dCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGZMaW5lR2FwKTsKLSAgICBtX2ZvbnRN
ZXRyaWNzLnNldExpbmVTcGFjaW5nKGxyb3VuZGYoZkFzY2VudCkgKyBscm91bmRmKGZEZXNjZW50
KSArIGxyb3VuZGYoZkxpbmVHYXApKTsKLQotICAgIEdseXBoIHhHbHlwaCA9IGdseXBoRGF0YUZv
ckNoYXJhY3RlcigneCcpLmdseXBoOwotCi0gICAgaWYgKHhHbHlwaCkgewotICAgICAgICAvLyBN
ZWFzdXJlIHRoZSBhY3R1YWwgY2hhcmFjdGVyICJ4Iiwgc2luY2UgaXQncyBwb3NzaWJsZSBmb3Ig
aXQgdG8gZXh0ZW5kIGJlbG93IHRoZSBiYXNlbGluZSwgYW5kIHdlIG5lZWQgdGhlCi0gICAgICAg
IC8vIHJlcG9ydGVkIHgtaGVpZ2h0IHRvIG9ubHkgaW5jbHVkZSB0aGUgcG9ydGlvbiBvZiB0aGUg
Z2x5cGggdGhhdCBpcyBhYm92ZSB0aGUgYmFzZWxpbmUuCi0gICAgICAgIFZlY3RvcjxEV1JJVEVf
R0xZUEhfTUVUUklDUz4gZ2x5cGhNZXRyaWNzKDEpOwotICAgICAgICBIUkVTVUxUIGhyID0gZm9u
dEZhY2UtPkdldERlc2lnbkdseXBoTWV0cmljcygmeEdseXBoLCAxLCBnbHlwaE1ldHJpY3MuZGF0
YSgpLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVy
dGljYWwpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAg
bV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHNjYWxlRW1Ub1VuaXRzKGdseXBoTWV0cmljcy5maXJz
dCgpLnZlcnRpY2FsT3JpZ2luWSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGludCBpWEhlaWdodCA9IGZvbnRNZXRyaWNzLnhIZWlnaHQ7Ci0gICAgICAg
IG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodChzY2FsZUVtVG9Vbml0cyhpWEhlaWdodCwgdW5pdHNQ
ZXJFbSkgKiBwb2ludFNpemUpOwotICAgIH0KLQotICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQ
ZXJFbSh1bml0c1BlckVtKTsKLX0KLQotRmxvYXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9y
R2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5zaXpl
KCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIGlmIChtX3BsYXRmb3JtRGF0
YS51c2VHREkoKSkKLSAgICAgICAgcmV0dXJuIGJvdW5kc0ZvckdESUdseXBoKGdseXBoKTsKLQot
ICAgIGF1dG8gZm9udCA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9udCgpOwotICAgIFJFTEVBU0VfQVNT
RVJUKGZvbnQpOwotCi0gICAgYXV0byBmb250RmFjZSA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9udEZh
Y2UoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChmb250RmFjZSk7Ci0KLSAgICBmbG9hdCBwb2ludFNp
emUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAgYm9vbCB2ZXJ0aWNhbCA9IG1fcGxhdGZv
cm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbDsKLQotICAg
IFZlY3RvcjxEV1JJVEVfR0xZUEhfTUVUUklDUz4gZ2x5cGhNZXRyaWNzKDEpOwotICAgIEhSRVNV
TFQgaHIgPSBmb250RmFjZS0+R2V0RGVzaWduR2x5cGhNZXRyaWNzKCZnbHlwaCwgMSwgZ2x5cGhN
ZXRyaWNzLmRhdGEoKSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50
YXRpb246OlZlcnRpY2FsKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQot
ICAgIGNvbnN0IGF1dG8mIG1ldHJpY3MgPSBnbHlwaE1ldHJpY3MuZmlyc3QoKTsKLQotICAgIHVu
c2lnbmVkIHVuaXRzUGVyRW0gPSBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKTsKLQotICAgIEZs
b2F0UG9pbnQgb3JpZ2luKHNjYWxlRW1Ub1VuaXRzKG1ldHJpY3MubGVmdFNpZGVCZWFyaW5nLCB1
bml0c1BlckVtKSAqIHBvaW50U2l6ZSwgc2NhbGVFbVRvVW5pdHMobWV0cmljcy52ZXJ0aWNhbE9y
aWdpblksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplKTsKLSAgICBGbG9hdFNpemUgc2l6ZShzY2Fs
ZUVtVG9Vbml0cyhtZXRyaWNzLmFkdmFuY2VXaWR0aCAtIG1ldHJpY3MubGVmdFNpZGVCZWFyaW5n
IC0gbWV0cmljcy5yaWdodFNpZGVCZWFyaW5nLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSwKLSAg
ICAgICAgc2NhbGVFbVRvVW5pdHMobWV0cmljcy5hZHZhbmNlSGVpZ2h0IC0gbWV0cmljcy50b3BT
aWRlQmVhcmluZyAtIG1ldHJpY3MuYm90dG9tU2lkZUJlYXJpbmcsIHVuaXRzUGVyRW0pICogcG9p
bnRTaXplKTsKLQotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveChvcmlnaW4sIHNpemUpOwotICAg
IGlmIChtX3N5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgIGJvdW5kaW5nQm94LnNldFdpZHRo
KGJvdW5kaW5nQm94LndpZHRoKCkgKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQpOwotCi0gICAgcmV0
dXJuIGJvdW5kaW5nQm94OwotfQotCi1mbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgo
R2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5zaXplKCkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKQotICAg
ICAgICByZXR1cm4gd2lkdGhGb3JHRElHbHlwaChnbHlwaCk7Ci0KLSAgICBhdXRvIGZvbnQgPSBt
X3BsYXRmb3JtRGF0YS5kd0ZvbnQoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChmb250KTsKLQotICAg
IGF1dG8gZm9udEZhY2UgPSBtX3BsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoZm9udEZhY2UpOwotCi0gICAgYm9vbCBpc1ZlcnRpY2FsID0gbV9wbGF0Zm9ybURh
dGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsOwotCi0gICAgVmVj
dG9yPERXUklURV9HTFlQSF9NRVRSSUNTPiBnbHlwaE1ldHJpY3MoMSk7Ci0gICAgSFJFU1VMVCBo
ciA9IGZvbnRGYWNlLT5HZXREZXNpZ25HbHlwaE1ldHJpY3MoJmdseXBoLCAxLCBnbHlwaE1ldHJp
Y3MuZGF0YSgpLCBpc1ZlcnRpY2FsKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKLQotICAgIGNvbnN0IGF1dG8mIG1ldHJpY3MgPSBnbHlwaE1ldHJpY3MuZmlyc3QoKTsKLSAg
ICBpbnQgd2lkdGhJbkVtID0gbWV0cmljcy5hZHZhbmNlV2lkdGg7Ci0KLSAgICBmbG9hdCBwb2lu
dFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAgdW5zaWduZWQgdW5pdHNQZXJFbSA9
IG1fZm9udE1ldHJpY3MudW5pdHNQZXJFbSgpOwotICAgIGZsb2F0IHdpZHRoID0gc2NhbGVFbVRv
VW5pdHMod2lkdGhJbkVtLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLQotICAgIHJldHVybiB3
aWR0aCArIG1fc3ludGhldGljQm9sZE9mZnNldDsKLX0KLQotUGF0aCBGb250OjpwbGF0Zm9ybVBh
dGhGb3JHbHlwaChHbHlwaCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBQYXRoKCk7Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNw
cAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1RleHRBbmFseXplckhlbHBlci5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNDMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRleHRBbmFseXplckhlbHBlci5oIgotCi0jaWYgVVNF
KERJUkVDVDJEKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVRleHRBbmFseXplckhlbHBlcjo6
VGV4dEFuYWx5emVySGVscGVyKGNvbnN0IFdDSEFSKiBsb2NhbGVOYW1lLCBjb25zdCBXQ0hBUiog
YnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpCi0gICAgOiBtX2xvY2FsZU5hbWUobG9jYWxl
TmFtZSkKLSAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAsIG1fYnVmZmVyTGVuZ3RoKGJ1ZmZl
ckxlbmd0aCkKLXsKLX0KLQotSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6OlF1ZXJ5SW50ZXJm
YWNlKF9Jbl8gUkVGSUlEIHJpaWQsIF9DT01fT3V0cHRyXyB2b2lkKiogcHB2T2JqZWN0KQotewot
ICAgIGlmICghcHB2T2JqZWN0KQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotICAgICpwcHZP
YmplY3QgPSBudWxscHRyOwotICAgIGlmIChJc0VxdWFsR1VJRChyaWlkLCBfX3V1aWRvZihJRFdy
aXRlVGV4dEFuYWx5c2lzU2luaykpKQotICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SURXcml0ZVRleHRBbmFseXNpc1NpbmsqPih0aGlzKTsKLSAgICBlbHNlIGlmIChJc0VxdWFsR1VJ
RChyaWlkLCBfX3V1aWRvZihJRFdyaXRlVGV4dEFuYWx5c2lzU291cmNlKSkpCi0gICAgICAgICpw
cHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJRFdyaXRlVGV4dEFuYWx5c2lzU2luayo+KHRoaXMpOwot
ICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEVfRkFJTDsKLQotICAgIEFkZFJlZigpOwotICAgIHJl
dHVybiBTX09LOwotfQotCi1VTE9ORyBUZXh0QW5hbHl6ZXJIZWxwZXI6OkFkZFJlZigpCi17Ci0g
ICAgcmV0dXJuICsrbV9yZWZDb3VudDsKLX0KLQotVUxPTkcgVGV4dEFuYWx5emVySGVscGVyOjpS
ZWxlYXNlKCkKLXsKLSAgICBVTE9ORyBuZXdSZWYgPSAtLW1fcmVmQ291bnQ7Ci0gICAgaWYgKCFu
ZXdSZWYpCi0gICAgICAgIGRlbGV0ZSh0aGlzKTsKLQotICAgIHJldHVybiBuZXdSZWY7Ci19Ci0K
LUhSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpHZXRUZXh0QXRQb3NpdGlvbihVSU5UMzIgdGV4
dFBvc2l0aW9uLCBjb25zdCBXQ0hBUioqIHRleHRTdHJpbmcsIFVJTlQzMiogdGV4dExlbmd0aCkK
LXsKLSAgICBpZiAoIXRleHRTdHJpbmcgfHwgIXRleHRMZW5ndGgpCi0gICAgICAgIHJldHVybiBF
X1BPSU5URVI7Ci0KLSAgICBpZiAodGV4dFBvc2l0aW9uID49IG1fYnVmZmVyTGVuZ3RoKSB7Ci0g
ICAgICAgICp0ZXh0U3RyaW5nID0gbnVsbHB0cjsKLSAgICAgICAgKnRleHRMZW5ndGggPSAwOwot
ICAgICAgICByZXR1cm4gU19PSzsKLSAgICB9Ci0KLSAgICAqdGV4dFN0cmluZyA9ICZtX2J1ZmZl
clt0ZXh0UG9zaXRpb25dOwotICAgICp0ZXh0TGVuZ3RoID0gbV9idWZmZXJMZW5ndGggLSB0ZXh0
UG9zaXRpb247Ci0KLSAgICByZXR1cm4gU19PSzsKLX0KLQotSFJFU1VMVCBUZXh0QW5hbHl6ZXJI
ZWxwZXI6OkdldFRleHRCZWZvcmVQb3NpdGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBjb25zdCBX
Q0hBUioqIHRleHRTdHJpbmcsIFVJTlQzMiogdGV4dExlbmd0aCkKLXsKLSAgICBpZiAoIXRleHRT
dHJpbmcgfHwgIXRleHRMZW5ndGgpCi0gICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0KLSAgICBp
ZiAoIXRleHRQb3NpdGlvbiB8fCB0ZXh0UG9zaXRpb24gPiBtX2J1ZmZlckxlbmd0aCkgewotICAg
ICAgICAqdGV4dFN0cmluZyA9IG51bGxwdHI7Ci0gICAgICAgICp0ZXh0TGVuZ3RoID0gMDsKLSAg
ICAgICAgcmV0dXJuIFNfT0s7Ci0gICAgfQotCi0gICAgKnRleHRTdHJpbmcgPSAmbV9idWZmZXJb
MF07Ci0gICAgKnRleHRMZW5ndGggPSB0ZXh0UG9zaXRpb247Ci0KLSAgICByZXR1cm4gU19PSzsK
LX0KLQotSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6OkdldExvY2FsZU5hbWUoVUlOVDMyIHRl
eHRQb3NpdGlvbiwgVUlOVDMyKiB0ZXh0TGVuZ3RoLCBjb25zdCBXQ0hBUioqIGxvY2FsZU5hbWUp
Ci17Ci0gICAgKmxvY2FsZU5hbWUgPSBtX2xvY2FsZU5hbWU7Ci0gICAgKnRleHRMZW5ndGggPSBt
X2J1ZmZlckxlbmd0aCAtIHRleHRQb3NpdGlvbjsKLQotICAgIHJldHVybiBTX09LOwotfQotCi1I
UkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6R2V0TnVtYmVyU3Vic3RpdHV0aW9uKFVJTlQzMiB0
ZXh0UG9zaXRpb24sIFVJTlQzMiogdGV4dExlbmd0aCwgSURXcml0ZU51bWJlclN1YnN0aXR1dGlv
bioqIG51bWJlclN1YnN0aXR1dGlvbikKLXsKLSAgICAqdGV4dExlbmd0aCA9IG1fYnVmZmVyTGVu
Z3RoIC0gdGV4dFBvc2l0aW9uOwotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFRleHRB
bmFseXplckhlbHBlcjo6U2V0TGluZUJyZWFrcG9pbnRzKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJ
TlQzMiB0ZXh0TGVuZ3RoLCBjb25zdCBEV1JJVEVfTElORV9CUkVBS1BPSU5UKikKLXsKLSAgICBy
ZXR1cm4gRV9OT1RJTVBMOwotfQotCi1IUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6U2V0U2Ny
aXB0QW5hbHlzaXMoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIGNvbnN0
IERXUklURV9TQ1JJUFRfQU5BTFlTSVMqIGFuYWx5c2lzKQotewotICAgIEFuYWx5emVkUnVuIGN1
cnJlbnQgPSB7IHRleHRQb3NpdGlvbiwgdGV4dExlbmd0aCwgKmFuYWx5c2lzIH07Ci0gICAgbV9h
bmFseXplZFJ1bnMuYXBwZW5kKFdURk1vdmUoY3VycmVudCkpOwotCi0gICAgcmV0dXJuIFNfT0s7
Ci19Ci0KLUhSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpTZXRCaWRpTGV2ZWwoVUlOVDMyIHRl
eHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIFVJTlQ4IGV4cGxpY2l0TGV2ZWwsIFVJTlQ4
IHJlc29sdmVkTGV2ZWwpCi17Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQotSFJFU1VMVCBU
ZXh0QW5hbHl6ZXJIZWxwZXI6OlNldE51bWJlclN1YnN0aXR1dGlvbihVSU5UMzIgdGV4dFBvc2l0
aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgSURXcml0ZU51bWJlclN1YnN0aXR1dGlvbiopCi17Ci0g
ICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVs
cGVyLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDY3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSA8ZHdyaXRlLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBBbmFseXplZFJ1biB7Ci0gICAgdW5zaWdu
ZWQgc3RhcnRQb3NpdGlvbiB7IDAgfTsKLSAgICB1bnNpZ25lZCBsZW5ndGggeyAwIH07Ci0gICAg
RFdSSVRFX1NDUklQVF9BTkFMWVNJUyBhbmFseXNpczsKLX07Ci0KLXN0cnVjdCBUZXh0QW5hbHl6
ZXJIZWxwZXIgOiBwdWJsaWMgSURXcml0ZVRleHRBbmFseXNpc1NpbmssIElEV3JpdGVUZXh0QW5h
bHlzaXNTb3VyY2UgewotICAgIFRleHRBbmFseXplckhlbHBlcihjb25zdCBXQ0hBUiogbG9jYWxl
TmFtZSwgY29uc3QgV0NIQVIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKTsKLQotICAg
IC8vIElVbmtub3duCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5
SW50ZXJmYWNlKF9Jbl8gUkVGSUlELCBfQ09NX091dHB0cl8gdm9pZCoqKTsKLSAgICB2aXJ0dWFs
IFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJlZigpOwotICAgIHZpcnR1YWwgVUxPTkcgU1RE
TUVUSE9EQ0FMTFRZUEUgUmVsZWFzZSgpOwotCi0gICAgLy8gSURXcml0ZVRleHRBbmFseXNpc1Nv
dXJjZSAKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0VGV4dEF0UG9z
aXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgY29uc3QgV0NIQVIqKiB0ZXh0U3RyaW5nLCBVSU5U
MzIqIHRleHRMZW5ndGgpOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBH
ZXRUZXh0QmVmb3JlUG9zaXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgY29uc3QgV0NIQVIqKiB0
ZXh0U3RyaW5nLCBVSU5UMzIqIHRleHRMZW5ndGgpOwotICAgIHZpcnR1YWwgRFdSSVRFX1JFQURJ
TkdfRElSRUNUSU9OIFNURE1FVEhPRENBTExUWVBFIEdldFBhcmFncmFwaFJlYWRpbmdEaXJlY3Rp
b24oKSB7IHJldHVybiBEV1JJVEVfUkVBRElOR19ESVJFQ1RJT05fTEVGVF9UT19SSUdIVDsgfQot
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRMb2NhbGVOYW1lKFVJTlQz
MiB0ZXh0UG9zaXRpb24sIFVJTlQzMiogdGV4dExlbmd0aCwgY29uc3QgV0NIQVIqKiBsb2NhbGVO
YW1lKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0TnVtYmVyU3Vi
c3RpdHV0aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiogdGV4dExlbmd0aCwgSURXcml0
ZU51bWJlclN1YnN0aXR1dGlvbioqKTsKLQotICAgIC8vIElEV3JpdGVUZXh0QW5hbHlzaXNTaW5r
Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldExpbmVCcmVha3BvaW50
cyhVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgY29uc3QgRFdSSVRFX0xJ
TkVfQlJFQUtQT0lOVCopOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBT
ZXRTY3JpcHRBbmFseXNpcyhVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwg
Y29uc3QgRFdSSVRFX1NDUklQVF9BTkFMWVNJUyopOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBTZXRCaWRpTGV2ZWwoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRl
eHRMZW5ndGgsIFVJTlQ4IGV4cGxpY2l0TGV2ZWwsIFVJTlQ4IHJlc29sdmVkTGV2ZWwpOwotICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXROdW1iZXJTdWJzdGl0dXRpb24o
VUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIElEV3JpdGVOdW1iZXJTdWJz
dGl0dXRpb24qKTsKLQotICAgIGNvbnN0IFdDSEFSKiBtX2xvY2FsZU5hbWUgeyBudWxscHRyIH07
Ci0gICAgY29uc3QgV0NIQVIqIG1fYnVmZmVyIHsgbnVsbHB0ciB9OwotICAgIHVuc2lnbmVkIG1f
YnVmZmVyTGVuZ3RoIHsgMCB9OwotICAgIFZlY3RvcjxBbmFseXplZFJ1bj4gbV9hbmFseXplZFJ1
bnM7Ci0gICAgVUxPTkcgbV9yZWZDb3VudCB7IDAgfTsKLX07Ci0KLX0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeERpcmVjdDJE
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
VHJhbnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeERp
cmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDUtMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCi0KLSNpZiBQTEFURk9STShXSU4p
Ci0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNp
b24uaCIKLQotI2luY2x1ZGUgPGQyZDEuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1UcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6VHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3QgRDJEMV9NQVRSSVhf
M1gyX0YmIHQpCi17Ci0gICAgc2V0QSh0Ll8xMSk7Ci0gICAgc2V0Qih0Ll8xMik7Ci0gICAgc2V0
Qyh0Ll8yMSk7Ci0gICAgc2V0RCh0Ll8yMik7Ci0gICAgc2V0RSh0Ll8zMSk7Ci0gICAgc2V0Rih0
Ll8zMik7Ci19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvciBEMkQxX01BVFJJWF8z
WDJfRigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEQyRDE6Ok1hdHJpeDN4MkYobmFycm93UHJlY2lz
aW9uVG9GbG9hdChhKCkpLAotICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGIoKSksCi0g
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoYygpKSwKLSAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdChkKCkpLAotICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGUoKSksCi0g
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZigpKSk7Ci19Ci0KLUFmZmluZVRyYW5zZm9y
bTo6QWZmaW5lVHJhbnNmb3JtKGNvbnN0IEQyRDFfTUFUUklYXzNYMl9GJiB0KQotewotICAgIHNl
dE1hdHJpeCh0Ll8xMSwgdC5fMTIsIHQuXzIxLCB0Ll8yMiwgdC5fMzEsIHQuXzMyKTsKLX0KLQot
QWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciBEMkQxX01BVFJJWF8zWDJfRigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIEQyRDE6Ok1hdHJpeDN4MkYobmFycm93UHJlY2lzaW9uVG9GbG9hdChhKCkpLAot
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGIoKSksCi0gICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoYygpKSwKLSAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChkKCkpLAot
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGUoKSksCi0gICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoZigpKSk7Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4
NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VEaXJlY3QyRC5j
cHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkRyYWdJbWFnZS5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQml0bWFwSW5m
by5oIgotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW5jbHVkZSAiSFduZERDLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0K
LSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXZvaWQgZGVhbGxvY0NvbnRleHQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQq
IHBsYXRmb3JtQ29udGV4dCkKLXsKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KSB7Ci0gICAgICAg
IGlmIChhdXRvKiByZW5kZXJUYXJnZXQgPSBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgp
KQotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgfQotfQotCi1HRElP
YmplY3Q8SEJJVE1BUD4gYWxsb2NJbWFnZShIREMgZGMsIEludFNpemUgc2l6ZSwgUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQqKiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgQml0bWFwSW5mbyBibXBJ
bmZvID0gQml0bWFwSW5mbzo6Y3JlYXRlKHNpemUpOwotCi0gICAgTFBWT0lEIGJpdHMgPSBudWxs
cHRyOwotICAgIGF1dG8gaGJtcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlvbihk
YywgJmJtcEluZm8sIERJQl9SR0JfQ09MT1JTLCAmYml0cywgMCwgMCkpOwotCi0gICAgaWYgKCFw
bGF0Zm9ybUNvbnRleHQgfHwgIWhibXApCi0gICAgICAgIHJldHVybiBoYm1wOwotCi0gICAgLy8g
RklYTUU6IFVzZSBHREkgSW50ZXJvcCBsYXllciB0byBjcmVhdGUgSEJJVE1BUCBmcm9tIEQyRCBC
aXRtYXAKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBoYm1wOwotfQotCi1EcmFn
SW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlUmVmLCBGbG9hdFNpemUg
c2NhbGUpCi17Ci0gICAgLy8gRklYTUU6IGR1ZSB0byB0aGUgd2F5IGRyYWcgaW1hZ2VzIGFyZSBk
b25lIG9uIHdpbmRvd3Mgd2UgbmVlZCAKLSAgICAvLyB0byBwcmVwcm9jZXNzIHRoZSBhbHBoYSBj
aGFubmVsIDxyZGFyOi8vcHJvYmxlbS81MDE1OTQ2PgotICAgIGlmICghaW1hZ2VSZWYpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgR0RJT2JqZWN0PEhCSVRNQVA+IGhibXA7Ci0gICAg
YXV0byBpbWFnZSA9IGFkb3B0R0RJT2JqZWN0KGltYWdlUmVmKTsKLQotICAgIEludFNpemUgc3Jj
U2l6ZSA9IGRyYWdJbWFnZVNpemUoaW1hZ2UuZ2V0KCkpOwotICAgIEludFNpemUgZHN0U2l6ZShz
dGF0aWNfY2FzdDxpbnQ+KHNyY1NpemUud2lkdGgoKSAqIHNjYWxlLndpZHRoKCkpLCBzdGF0aWNf
Y2FzdDxpbnQ+KHNyY1NpemUuaGVpZ2h0KCkgKiBzY2FsZS5oZWlnaHQoKSkpOwotCi0gICAgSFdu
ZERDIGRjKG51bGxwdHIpOwotICAgIGF1dG8gZHN0REMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0
ZUNvbXBhdGlibGVEQyhkYykpOwotICAgIGlmIChkc3REQykKLSAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKLQotICAgIGlmICghaGJtcCkKLSAgICAgICAgaGJtcC5zd2FwKGltYWdlKTsKLSAgICBy
ZXR1cm4gaGJtcC5sZWFrKCk7Ci19Ci0KLURyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9t
SW1hZ2UoSW1hZ2UqIGltZywgSW1hZ2VPcmllbnRhdGlvbikKLXsKLSAgICBIV25kREMgZGMobnVs
bHB0cik7Ci0gICAgYXV0byB3b3JraW5nREMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBh
dGlibGVEQyhkYykpOwotICAgIGlmICghd29ya2luZ0RDKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0gICAg
Ci19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjI3LDcgKzMyMjcsNyBAQCBHcmFwaGljc0Nv
bnRleHQqIFJlbmRlckxheWVyOjpzZXR1cEZpbHRlCiAKICAgICBhdXRvIHJvb3RSZWxhdGl2ZUJv
dW5kcyA9IGNhbGN1bGF0ZUxheWVyQm91bmRzKHBhaW50aW5nSW5mby5yb290TGF5ZXIsIG9mZnNl
dEZyb21Sb290LCB7IH0pOwogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0g
cGFpbnRpbmdGaWx0ZXJzLT5iZWdpbkZpbHRlckVmZmVjdChkZXN0aW5hdGlvbkNvbnRleHQsIHJl
bmRlcmVyKCksIGVuY2xvc2luZ0ludFJlY3Qocm9vdFJlbGF0aXZlQm91bmRzKSwgZW5jbG9zaW5n
SW50UmVjdChwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QpLCBlbmNsb3NpbmdJbnRSZWN0KGZp
bHRlclJlcGFpbnRSZWN0KSk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0g
cGFpbnRpbmdGaWx0ZXJzLT5iZWdpbkZpbHRlckVmZmVjdChyZW5kZXJlcigpLCBlbmNsb3NpbmdJ
bnRSZWN0KHJvb3RSZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3QocGFpbnRpbmdJbmZv
LnBhaW50RGlydHlSZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBhaW50UmVjdCkpOwog
ICAgIGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCShy
ZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJG
aWx0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDI0ICsxMjksMTkgQEAgR3JhcGhpY3ND
b250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmlucAogICAgIHJldHVybiBtX3NvdXJjZUltYWdl
ID8gJm1fc291cmNlSW1hZ2UtPmNvbnRleHQoKSA6IG51bGxwdHI7CiB9CiAKLXZvaWQgUmVuZGVy
TGF5ZXJGaWx0ZXJzOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgdGFyZ2V0Q29udGV4dCkKK3ZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphbGxvY2F0
ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCkKIHsKICAgICBhdXRvJiBmaWx0ZXIgPSAqbV9maWx0ZXI7
CiAgICAgYXV0byBsb2dpY2FsU2l6ZSA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKG1fZmls
dGVyUmVnaW9uLnNpemUoKSk7CiAKICAgICBpZiAoIW1fc291cmNlSW1hZ2UgfHwgbV9zb3VyY2VJ
bWFnZS0+bG9naWNhbFNpemUoKSAhPSBsb2dpY2FsU2l6ZSkgewotI2lmIFVTRShESVJFQ1QyRCkK
LSAgICAgICAgbV9zb3VyY2VJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUs
IGZpbHRlci5yZW5kZXJpbmdNb2RlKCksICZ0YXJnZXRDb250ZXh0LCAxLCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSNlbHNlCi0gICAgICAgIFVO
VVNFRF9QQVJBTSh0YXJnZXRDb250ZXh0KTsKICAgICAgICAgbV9zb3VyY2VJbWFnZSA9IEltYWdl
QnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIGZpbHRlci5yZW5kZXJpbmdNb2RlKCksIFNob3Vs
ZFVzZURpc3BsYXlMaXN0OjpObywgUmVuZGVyaW5nUHVycG9zZTo6RE9NLCAxLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBtX2xheWVyLnJlbmRlcmVy
KCkuaG9zdFdpbmRvdygpKTsKLSNlbmRpZgogICAgICAgICBpZiAoYXV0byBjb250ZXh0ID0gaW5w
dXRDb250ZXh0KCkpCiAgICAgICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXIuZmlsdGVyU2Nh
bGUoKSk7CiAgICAgfQogfQogCi1HcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6
YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBj
b25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVwYWlu
dFJlY3QpCitHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJF
ZmZlY3QoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJv
eFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5
ZXJSZXBhaW50UmVjdCkKIHsKICAgICBpZiAoIW1fZmlsdGVyKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKQEAgLTIwMCw3ICsxOTUsNyBAQCBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmls
dGVyczo6YmVnCiAgICAgcmVzZXREaXJ0eVNvdXJjZVJlY3QoKTsKIAogICAgIGZpbHRlci5zZXRG
aWx0ZXJSZWdpb24obV9maWx0ZXJSZWdpb24pOwotICAgIGFsbG9jYXRlQmFja2luZ1N0b3JlSWZO
ZWVkZWQoZGVzdGluYXRpb25Db250ZXh0KTsKKyAgICBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVl
ZGVkKCk7CiAKICAgICBhdXRvKiBzb3VyY2VHcmFwaGljc0NvbnRleHQgPSBpbnB1dENvbnRleHQo
KTsKICAgICBpZiAoIXNvdXJjZUdyYXBoaWNzQ29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtNjMsMTQgKzYzLDE0IEBAIHB1YmxpYzoKICAgICAvLyBQZXIgcmVuZGVyCiAgICAg
TGF5b3V0UmVjdCByZXBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludFJlY3Q7IH0K
IAotICAgIEdyYXBoaWNzQ29udGV4dCogYmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0
JiBkZXN0aW5hdGlvbkNvbnRleHQsIFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBm
aWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJl
Y3QmIGxheWVyUmVwYWludFJlY3QpOworICAgIEdyYXBoaWNzQ29udGV4dCogYmVnaW5GaWx0ZXJF
ZmZlY3QoUmVuZGVyRWxlbWVudCYsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNv
bnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50
UmVjdCk7CiAgICAgdm9pZCBhcHBseUZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3Rp
bmF0aW9uQ29udGV4dCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNo
ZWRSZXNvdXJjZSYsIGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyYpIGZpbmFsOwogICAgIHZvaWQg
cmVzZXREaXJ0eVNvdXJjZVJlY3QoKSB7IG1fZGlydHlTb3VyY2VSZWN0ID0gTGF5b3V0UmVjdCgp
OyB9CiAgICAgR3JhcGhpY3NDb250ZXh0KiBpbnB1dENvbnRleHQoKTsKLSAgICB2b2lkIGFsbG9j
YXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250
ZXh0KTsKKyAgICB2b2lkIGFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoKTsKIAogICAgIFJl
bmRlckxheWVyJiBtX2xheWVyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCShyZXZpc2lvbiAy
ODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3ICsxNTQsNyBAQCBib29sIFJlbmRl
clNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwCiAgICAgQWZmaW5lVHJhbnNmb3JtIGFic29s
dXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRp
b25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIpOwogICAgIGlmICghY2xpcHBl
ckRhdGEuaXNWYWxpZEZvckdlb21ldHJ5KG9iamVjdEJvdW5kaW5nQm94LCBjbGlwcGVkQ29udGVu
dEJvdW5kcywgYWJzb2x1dGVUcmFuc2Zvcm0pKSB7CiAgICAgICAgIC8vIEZJWE1FICgxNDk0Njkp
OiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2Vs
ZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIG5lc3RlZCBjbGlwcGlu
ZywgdGhvdWdoLgotICAgICAgICBhdXRvIG1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZUltYWdlQnVmZmVyKGNsaXBwZWRDb250ZW50Qm91bmRzLCBhYnNvbHV0ZVRyYW5zZm9y
bSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQsIG51bGxwdHIsICZjb250ZXh0KTsKKyAgICAgICAgYXV0byBtYXNrSW1hZ2UgPSBTVkdS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjbGlwcGVkQ29udGVudEJvdW5kcywg
YWJzb2x1dGVUcmFuc2Zvcm0sIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBudWxscHRyKTsKICAgICAgICAgaWYgKCFtYXNrSW1hZ2Up
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCShyZXZp
c2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3IEBAIGJvb2wg
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3UKICNlbHNlCiAgICAgYXV0byBjb2xv
clNwYWNlID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCk7CiAjZW5kaWYKLSAgICBhdXRv
IHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIGNvbG9yU3BhY2Us
IGZpbHRlckRhdGEtPmZpbHRlci0+cmVuZGVyaW5nTW9kZSgpLCByZW5kZXJlci5ob3N0V2luZG93
KCksIGNvbnRleHQpOworICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2
ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgZmlsdGVyRGF0YS0+ZmlsdGVyLT5yZW5kZXJpbmdNb2Rl
KCksIHJlbmRlcmVyLmhvc3RXaW5kb3coKSk7CiAgICAgaWYgKCFzb3VyY2VHcmFwaGljKSB7CiAg
ICAgICAgIEFTU0VSVChtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIp
KTsKICAgICAgICAgZmlsdGVyRGF0YS0+c2F2ZWRDb250ZXh0ID0gY29udGV4dDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXIuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQs
NyArODQsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291CiAjZW5k
aWYKIAogICAgICAgICAvLyBGSVhNRSAoMTQ5NDcwKTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxk
IG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRo
ZSBjb250ZXh0IGJyZWFrcyBhbHBoYSBtYXNraW5nLCB0aG91Z2guCi0gICAgICAgIG1hc2tlckRh
dGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJl
cGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgbWFza0NvbG9yU3BhY2UsIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQsIG51bGxwdHIsIGNvbnRleHQpOworICAgICAgICBtYXNrZXJEYXRh
LT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBh
aW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIG1hc2tDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkLCBudWxscHRyKTsKICAgICAgICAgaWYgKCFtYXNrZXJEYXRhLT5tYXNr
SW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNp
b24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdD
b250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDcgKzIyNiw3IEBAIEFmZmluZVRyYW5z
Zm9ybSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWwKICAgICByZXR1cm4gYWJzb2x1dGVUcmFuc2Zv
cm07CiB9CiAKLVJlZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNv
bG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdywgY29uc3QgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQorUmVmUHRyPEltYWdl
QnVmZmVyPiBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zv
cm0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQogewogICAgIElu
dFJlY3QgcGFpbnRSZWN0ID0gY2FsY3VsYXRlSW1hZ2VCdWZmZXJSZWN0KHRhcmdldFJlY3QsIGFi
c29sdXRlVHJhbnNmb3JtKTsKICAgICAvLyBEb24ndCBjcmVhdGUgZW1wdHkgSW1hZ2VCdWZmZXJz
LgpAQCAtMjM4LDEyICsyMzgsNyBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0Nv
bnRleHQ6CiAgICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhjbGFtcGVkU2l6
ZSwgc2NhbGUpKQogICAgICAgICBjbGFtcGVkU2l6ZSA9IGNsYW1wZWRTaXplICogc2NhbGU7CiAK
LSNpZiBVU0UoRElSRUNUMkQpCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQsIDEsIGNvbG9yU3BhY2Us
IFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsK
ICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwg
cmVuZGVyaW5nTW9kZSwgU2hvdWxkVXNlRGlzcGxheUxpc3Q6Ok5vLCBSZW5kZXJpbmdQdXJwb3Nl
OjpET00sIDEsIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCwgaG9zdFdpbmRvdyk7Ci0j
ZW5kaWYKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApA
QCAtMjU2LDcgKzI1MSw3IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29udGV4
dDoKICAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9CiAKLVJlZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZH
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJn
ZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRSZWN0LCBjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQorUmVmUHRyPEltYWdlQnVmZmVyPiBTVkdSZW5kZXJp
bmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZFJlY3QsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewogICAgIEludFNp
emUgY2xhbXBlZFNpemUgPSByb3VuZGVkSW50U2l6ZShjbGFtcGVkUmVjdC5zaXplKCkpOwogICAg
IEZsb2F0U2l6ZSB1bmNsYW1wZWRTaXplID0gcm91bmRlZEludFNpemUodGFyZ2V0UmVjdC5zaXpl
KCkpOwpAQCAtMjY1LDEyICsyNjAsNyBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmlu
Z0NvbnRleHQ6CiAgICAgaWYgKGNsYW1wZWRTaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQsIDEs
IGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShjb250ZXh0KTsKICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShj
bGFtcGVkU2l6ZSwgcmVuZGVyaW5nTW9kZSwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJH
UkE4KTsKLSNlbmRpZgogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0Nv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDgg
KzYwLDggQEAgcHVibGljOgogICAgIHZvaWQgcHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudChSZW5k
ZXJFbGVtZW50JiwgUGFpbnRJbmZvJiwgTmVlZHNHcmFwaGljc0NvbnRleHRTYXZlID0gRG9udFNh
dmVHcmFwaGljc0NvbnRleHQpOwogICAgIGJvb2wgaXNSZW5kZXJpbmdQcmVwYXJlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVuZGVyaW5nRmxhZ3MgJiBSZW5kZXJpbmdQcmVwYXJlZDsgfQogCi0gICAg
c3RhdGljIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3Jt
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0
V2luZG93KiA9IG51bGxwdHIsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKTsKLSAg
ICBzdGF0aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZFJlY3QsIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCogPSBudWxscHRyKTsKKyAgICBzdGF0aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFJlbmRl
cmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7CisgICAgc3RhdGljIFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRSZWN0LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmLCBSZW5kZXJpbmdNb2RlKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlbmRlclN1YnRyZWVU
b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiwgUmVuZGVyRWxlbWVudCYsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpOwogICAgIHN0YXRpYyB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgUmVmUHRyPEltYWdlQnVmZmVyPiYsIGJvb2wgc2FmZVRvQ2xl
YXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCShyZXZp
c2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NiwxNSArNjYsNiBAQAogI2luY2x1ZGUgIkxvY2FsRGVmYXVs
dFN5c3RlbUFwcGVhcmFuY2UuaCIKICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1
ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNl
bmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR0ltYWdlOjpTVkdJbWFnZShJbWFnZU9i
c2VydmVyJiBvYnNlcnZlcikKQEAgLTIxNywxMiArMjA4LDEyIEBAIEltYWdlRHJhd1Jlc3VsdCBT
VkdJbWFnZTo6ZHJhd0ZvckNvbnRhaW4KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8
TmF0aXZlSW1hZ2U+IFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBH
cmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCitSZWZQdHI8TmF0aXZlSW1hZ2U+IFNWR0lt
YWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCiB7Ci0gICAgcmV0dXJuIG5hdGl2ZUlt
YWdlKHRhcmdldENvbnRleHQpOworICAgIHJldHVybiBuYXRpdmVJbWFnZSgpOwogfQogCi1SZWZQ
dHI8TmF0aXZlSW1hZ2U+IFNWR0ltYWdlOjpuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRl
eHQqKQorUmVmUHRyPE5hdGl2ZUltYWdlPiBTVkdJbWFnZTo6bmF0aXZlSW1hZ2UoKQogewogICAg
IHJldHVybiBuYXRpdmVJbWFnZShzaXplKCksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNpemUo
KSksIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtODYsOCArODYs
OCBAQCBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyB0byBiZSBsZXNzIGNv
bnNlcnZhdGl2ZS4KICAgICBib29sIGN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSBm
aW5hbDsKLSAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCogPSBudWxscHRyKSBmaW5hbDsKKyAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgZmluYWw7CisgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBu
YXRpdmVJbWFnZSgpIGZpbmFsOwogICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2Uo
Y29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlUmVjdCwg
RGVzdGluYXRpb25Db2xvclNwYWNlKTsKIAogICAgIHZvaWQgc3RhcnRBbmltYXRpb25UaW1lckZp
cmVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250
YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZUZvckNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDkgKzU5LDkgQEAgdm9pZCBTVkdJbWFnZUZvckNvbnRhaW5lcjo6ZHJhd1BhdHRlcm4oRwog
ICAgIG1faW1hZ2UtPmRyYXdQYXR0ZXJuRm9yQ29udGFpbmVyKGNvbnRleHQsIG1fY29udGFpbmVy
U2l6ZSwgbV9jb250YWluZXJab29tLCBtX2luaXRpYWxGcmFnbWVudFVSTCwgc3JjUmVjdCwgcGF0
dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIGRzdFJlY3QsIG9wdGlvbnMpOwogfQogCi1S
ZWZQdHI8TmF0aXZlSW1hZ2U+IFNWR0ltYWdlRm9yQ29udGFpbmVyOjpuYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCitSZWZQdHI8
TmF0aXZlSW1hZ2U+IFNWR0ltYWdlRm9yQ29udGFpbmVyOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpCiB7Ci0gICAgcmV0dXJuIG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KHRhcmdldENvbnRleHQpOworICAgIHJldHVybiBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuaAkocmV2aXNp
b24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29u
dGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcyB0byBiZSBsZXNzIGNvbnNlcnZhdGl2ZS4KICAgICBib29s
IGN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9CiAKLSAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSBmaW5hbDsKKyAgICBSZWZQdHI8TmF0
aXZlSW1hZ2U+IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgZmluYWw7CiAKIHByaXZhdGU6
CiAgICAgV0VCQ09SRV9FWFBPUlQgU1ZHSW1hZ2VGb3JDb250YWluZXIoU1ZHSW1hZ2UqLCBjb25z
dCBGbG9hdFNpemUmIGNvbnRhaW5lclNpemUsIGZsb2F0IGNvbnRhaW5lclpvb20sIGNvbnN0IFVS
TCYgaW5pdGlhbEZyYWdtZW50VVJMKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc4MTIpCisr
KyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDIyLTAxLTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW1vdmUgc3VwcG9ydCBmb3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQuCisgICAgICAg
ICogU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6Q29uZmlndXJhdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
U2hhcmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9uOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0
OjpTaGFyZWFibGVCaXRtYXA6OlNoYXJlYWJsZUJpdG1hcCk6CisgICAgICAgIChXZWJLaXQ6OlNo
YXJlYWJsZUJpdG1hcDo6flNoYXJlYWJsZUJpdG1hcCk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJl
YWJsZUJpdG1hcDo6bnVtQnl0ZXNGb3JTaXplKToKKyAgICAgICAgKiBTaGFyZWQvU2hhcmVhYmxl
Qml0bWFwLmg6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlUGxhdGZv
cm1JbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6ZHhTdXJmYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQmFja2luZ1N0b3JlLmNwcDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3Qy
RC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4u
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRldmljZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0RGV2aWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OnNob3dQb3B1cE1lbnUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2V0dXBTd2FwQ2hhaW4pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6Y29uZmlndXJlQmFja2luZ1N0b3JlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmg6
CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlldzo6V2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6Om9uU2l6ZUV2ZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0dXBTd2FwQ2hhaW4pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpjb25maWd1cmVCYWNraW5nU3RvcmUpOiBEZWxldGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5oOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3OjpkM2REZXZpY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3OjpkM2RJbW1lZGlhdGVDb250ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVudS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBvcHVwTWVudTo6c2hvdyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzOjpkaXNwbGF5KToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpGaW5kQ29udHJvbGxlcjo6Z2V0SW1hZ2VGb3JGaW5kTWF0Y2gpOgorCiAyMDIyLTAx
LTA4ICBUeWxlciBXaWxjb2NrICA8dHlsZXJfd0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OnNldEZvY3VzZWQodHJ1ZSkgc2hvdWxkIG1ha2UgdGhlIHdlYnBh
Z2UgZm9jdXNlZCwgYW5kIG1ha2Ugd2ViIGNvbnRlbnQgdGhlIGZpcnN0IHJlc3BvbmRlcgpJbmRl
eDogU291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtRlRXLmNtYWtlCShub25leGlzdGVudCkKQEAgLTEsMTk1ICswLDAgQEAKLXNl
dChXZWJLaXRfT1VUUFVUX05BTUUgV2ViS2l0MikKLXNldChXZWJQcm9jZXNzX09VVFBVVF9OQU1F
IFdlYktpdFdlYlByb2Nlc3MpCi1zZXQoTmV0d29ya1Byb2Nlc3NfT1VUUFVUX05BTUUgV2ViS2l0
TmV0d29ya1Byb2Nlc3MpCi1zZXQoUGx1Z2luUHJvY2Vzc19PVVRQVVRfTkFNRSBXZWJLaXRQbHVn
aW5Qcm9jZXNzKQotc2V0KEdQVVByb2Nlc3NfT1VUUFVUX05BTUUgV2ViS2l0R1BVUHJvY2VzcykK
LQotaW5jbHVkZShIZWFkZXJzLmNtYWtlKQotCi1hZGRfZGVmaW5pdGlvbnMoLURCVUlMRElOR19X
RUJLSVQpCi0KLWxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCi0gICAgTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCi0KLSAgICBOZXR3
b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAotCi0gICAgTmV0d29ya1By
b2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc01haW5DdXJsLmNwcAotCi0gICAgUGxhdGZvcm0vSVBD
L3dpbi9BdHRhY2htZW50V2luLmNwcAotICAgIFBsYXRmb3JtL0lQQy93aW4vQ29ubmVjdGlvbldp
bi5jcHAKLQotICAgIFBsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Ns
YXNzaWZpZXIuY3BwCi0KLSAgICBQbGF0Zm9ybS93aW4vTG9nZ2luZ1dpbi5jcHAKLSAgICBQbGF0
Zm9ybS93aW4vTW9kdWxlV2luLmNwcAotICAgIFBsYXRmb3JtL3dpbi9TaGFyZWRNZW1vcnlXaW4u
Y3BwCi0KLSAgICBTaGFyZWQvQVBJL2MvY3VybC9XS0NlcnRpZmljYXRlSW5mb0N1cmwuY3BwCi0K
LSAgICBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk1vZHVsZU5vbmUuY3Bw
Ci0KLSAgICBTaGFyZWQvd2luL0F1eGlsaWFyeVByb2Nlc3NNYWluV2luLmNwcAotICAgIFNoYXJl
ZC93aW4vTmF0aXZlV2ViS2V5Ym9hcmRFdmVudFdpbi5jcHAKLSAgICBTaGFyZWQvd2luL05hdGl2
ZVdlYk1vdXNlRXZlbnRXaW4uY3BwCi0gICAgU2hhcmVkL3dpbi9OYXRpdmVXZWJUb3VjaEV2ZW50
V2luLmNwcAotICAgIFNoYXJlZC93aW4vTmF0aXZlV2ViV2hlZWxFdmVudFdpbi5jcHAKLSAgICBT
aGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5jcHAKLQotICAgIFVJUHJvY2Vzcy9CYWNraW5nU3Rv
cmUuY3BwCi0gICAgVUlQcm9jZXNzL0RlZmF1bHRVbmRvQ29udHJvbGxlci5jcHAKLSAgICBVSVBy
b2Nlc3MvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nTm9uZS5jcHAKLSAgICBVSVByb2Nlc3MvV2Vi
R3JhbW1hckRldGFpbC5jcHAKLSAgICBVSVByb2Nlc3MvV2ViVmlld3BvcnRBdHRyaWJ1dGVzLmNw
cAotCi0gICAgVUlQcm9jZXNzL0FQSS9DL1dLVmlld3BvcnRBdHRyaWJ1dGVzLmNwcAotCi0gICAg
VUlQcm9jZXNzL0FQSS9DL2N1cmwvV0tQcm90ZWN0aW9uU3BhY2VDdXJsLmNwcAotICAgIFVJUHJv
Y2Vzcy9BUEkvQy9jdXJsL1dLV2Vic2l0ZURhdGFTdG9yZVJlZkN1cmwuY3BwCi0KLSAgICBVSVBy
b2Nlc3MvQVBJL0Mvd2luL1dLVmlldy5jcHAKLQotICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0RyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmNwcAotCi0gICAgVUlQ
cm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yVUlQcm94eVdpbi5jcHAKLQotICAgIFVJ
UHJvY2Vzcy9MYXVuY2hlci93aW4vUHJvY2Vzc0xhdW5jaGVyV2luLmNwcAotCi0gICAgVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCi0KLSAgICBVSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvd2luL1dlYnNpdGVEYXRhU3RvcmVXaW4uY3BwCi0KLSAgICBVSVBy
b2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcAotICAgIFVJUHJvY2Vzcy93aW4vV2ViQ29udGV4
dE1lbnVQcm94eVdpbi5jcHAKLSAgICBVSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5jcHAK
LSAgICBVSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcAotICAgIFVJUHJvY2Vz
cy93aW4vV2ViUHJvY2Vzc1Bvb2xXaW4uY3BwCi0gICAgVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNw
cAotCi0gICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS93aW4vSW5qZWN0ZWRCdW5kbGVXaW4u
Y3BwCi0KLSAgICBXZWJQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yVUlXaW4uY3Bw
Ci0KLSAgICBXZWJQcm9jZXNzL01lZGlhQ2FjaGUvV2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlci5j
cHAKLQotICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvd2luL1dlYlBvcHVwTWVudVdpbi5j
cHAKLQotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZFN1cmZhY2UuY3BwCi0KLSAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3Jk
aW5hdG9yLmNwcAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Ry
YXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmNwcAotCi0gICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL3dpbi9XZWJQYWdlV2luLmNwcAotCi0gICAgV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vz
c01haW5XaW4uY3BwCi0gICAgV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1dpbi5jcHAKLSkKLQot
bGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAiJHtXRUJLSVRfRElS
fS9QbGF0Zm9ybS9jbGFzc2lmaWVyIgotICAgICIke1dFQktJVF9ESVJ9L1BsdWdpblByb2Nlc3Mv
d2luIgotICAgICIke1dFQktJVF9ESVJ9L1NoYXJlZC9BUEkvYy93aW4iCi0gICAgIiR7V0VCS0lU
X0RJUn0vU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MiCi0gICAgIiR7V0VCS0lUX0RJUn0vU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yIgotICAgICIke1dFQktJ
VF9ESVJ9L1NoYXJlZC9QbHVnaW5zL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvd2lu
IgotICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvQy9jYWlybyIKLSAgICAiJHtXRUJL
SVRfRElSfS9VSVByb2Nlc3MvQVBJL0MvY3VybCIKLSAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nl
c3MvQVBJL0Mvd2luIgotICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvY3BwL3dpbiIK
LSAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL3dpbiIKLSAgICAiJHtXRUJLSVRfRElS
fS9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcyIKLSAgICAiJHtXRUJLSVRfRElSfS9VSVBy
b2Nlc3MvSW5zcGVjdG9yL3NvY2tldCIKLSAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvSW5z
cGVjdG9yL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvUGx1Z2lucy93aW4iCi0g
ICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvd2luL0RPTSIKLSAgICAiJHtXRUJLSVRfRElSfS9XZWJQ
cm9jZXNzL0luc3BlY3Rvci93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MiCi0gICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJQYWdl
L3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS93aW4iCi0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdF9T
WVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUwotKQotCi1zZXQoV2ViS2l0Q29tbW9uSW5jbHVkZURp
cmVjdG9yaWVzICR7V2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVN9KQotc2V0KFdlYktpdENvbW1v
blN5c3RlbUluY2x1ZGVEaXJlY3RvcmllcyAke1dlYktpdF9TWVNURU1fSU5DTFVERV9ESVJFQ1RP
UklFU30pCi0KLWxpc3QoQVBQRU5EIFdlYlByb2Nlc3NfU09VUkNFUwotICAgIFdlYlByb2Nlc3Mv
RW50cnlQb2ludC93aW4vV2ViUHJvY2Vzc01haW4uY3BwCi0pCi0KLWxpc3QoQVBQRU5EIE5ldHdv
cmtQcm9jZXNzX1NPVVJDRVMKLSAgICBOZXR3b3JrUHJvY2Vzcy9FbnRyeVBvaW50L3dpbi9OZXR3
b3JrUHJvY2Vzc01haW4uY3BwCi0pCi0KLWxpc3QoQVBQRU5EIEdQVVByb2Nlc3NfU09VUkNFUwot
ICAgIEdQVVByb2Nlc3MvRW50cnlQb2ludC93aW4vR1BVUHJvY2Vzc01haW4uY3BwCi0pCi0KLWFk
ZF9kZWZpbml0aW9ucygtRFVTRV9ESVJFQ1QyRD0xIC1EVVNFX0NVUkw9MSkKLQotbGlzdChBUFBF
TkQgV2ViS2l0X1NPVVJDRVMKLSAgICBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL2N1cmwvV2ViQ29v
a2llTWFuYWdlckN1cmwuY3BwCi0KLSAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVEYXRhQ3VybC5jcHAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0No
YW5uZWxDdXJsLmNwcAotCi0gICAgTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrRGF0YVRhc2tD
dXJsLmNwcAotICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAot
ICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25DdXJsLmNwcAotICAgIE5ldHdv
cmtQcm9jZXNzL2N1cmwvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRDdXJsLmNwcAotCi0gICAgU2hh
cmVkL2N1cmwvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ3VybC5jcHAKLQotICAgIFNoYXJlZC93aW4v
U2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwCi0KLSAgICBVSVByb2Nlc3Mvd2luL0JhY2tpbmdT
dG9yZURpcmVjdDJELmNwcAotCi0gICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9jdXJsL1dl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwCi0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdF9JTkNM
VURFX0RJUkVDVE9SSUVTCi0gICAgIiR7V0VCS0lUX0RJUn0vTmV0d29ya1Byb2Nlc3MvY3VybCIK
LSAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2N1cmwiCi0pCi0K
LWxpc3QoQVBQRU5EIFdlYktpdF9QUklWQVRFX0xJQlJBUklFUwotICAgIE9wZW5TU0w6OlNTTAot
ICAgIEQyZDEubGliCi0gICAgRDNkMTEubGliCi0gICAgRHdyaXRlCi0gICAgRHhnaS5saWIKLSAg
ICBEeGd1aWQKLSAgICBXaW5kb3dzQ29kZWNzCi0gICAgbWZ1dWlkLmxpYgotICAgIHN0cm1paWRz
LmxpYgotKQotCi1pZiAoRU5BQkxFX1JFTU9URV9JTlNQRUNUT1IpCi0gICAgbGlzdChBUFBFTkQg
V2ViS2l0X1NPVVJDRVMKLSAgICAgICAgVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50LmNwcAotICAgICAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9S
ZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwCi0KLSAgICAgICAgVUlQcm9jZXNzL0lu
c3BlY3Rvci93aW4vUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eVdpbi5jcHAKLSAgICApCi0KLSAg
ICBsaXN0KEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICAgICAiJHtXRUJL
SVRfRElSfS9VSVByb2Nlc3Mvc29ja2V0IgotICAgICkKLWVuZGlmICgpCi0KLSMgV2luZG93cyBz
cGVjaWZpYwotbGlzdChBUFBFTkQgV2ViS2l0X1BVQkxJQ19GUkFNRVdPUktfSEVBREVSUwotICAg
IFNoYXJlZC9BUEkvYy9jdXJsL1dLQ2VydGlmaWNhdGVJbmZvQ3VybC5oCi0KLSAgICBTaGFyZWQv
QVBJL2Mvd2luL1dLQmFzZVdpbi5oCi0KLSAgICBVSVByb2Nlc3MvQVBJL0MvY3VybC9XS1Byb3Rl
Y3Rpb25TcGFjZUN1cmwuaAotICAgIFVJUHJvY2Vzcy9BUEkvQy9jdXJsL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZkN1cmwuaAotCi0gICAgVUlQcm9jZXNzL0FQSS9DL3dpbi9XS1ZpZXcuaAotKQpJbmRl
eDogU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwCShyZXZpc2lvbiAyODc4
MTIpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NSwxNCArNzUsNiBAQCB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlOjpj
bGVhcigpCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6Q29uZmlndXJhdGlvbjo6ZW5jb2RlKElQQzo6
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IGNvbG9yU3BhY2UgPDwg
aXNPcGFxdWU7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjpl
bmNvZGVIYW5kbGUoZW5jb2Rlciwgc2hhcmVkUmVzb3VyY2VIYW5kbGUpOwotCi0gICAgLy8gSGFu
ZCBvZmYgb3duZXJzaGlwIG9mIG91ciBIQU5ETEUgdG8gdGhlIHJlY2VpdmluZyBwcm9jZXNzLiBJ
dCB3aWxsIGNsb3NlIGl0IGZvciB1cy4KLSAgICAvLyBGSVhNRTogSWYgdGhlIHJlY2VpdmluZyBw
cm9jZXNzIGNyYXNoZXMgYmVmb3JlIGl0IHJlY2VpdmVzIHRoZSBtZW1vcnksIHRoZSBtZW1vcnkg
d2lsbCBiZQotICAgIC8vIGxlYWtlZC4gU2VlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzQ3NTAyPi4K
LSAgICBzaGFyZWRSZXNvdXJjZUhhbmRsZSA9IG51bGxwdHI7Ci0jZW5kaWYKIH0KIAogYm9vbCBT
aGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb246OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29k
ZXIsIENvbmZpZ3VyYXRpb24mIHJlc3VsdCkKQEAgLTk4LDE1ICs5MCw2IEBAIGJvb2wgU2hhcmVh
YmxlQml0bWFwOjpDb25maWd1cmF0aW9uOjpkZWMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgcmVzdWx0ID0gQ29uZmlndXJhdGlvbiB7IFdURk1vdmUoKmNvbG9yU3BhY2UpLCAqaXNPcGFx
dWUgfTsKLQotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBhdXRvIHByb2Nlc3NTcGVjaWZpY0hhbmRs
ZSA9IFNoYXJlZE1lbW9yeTo6SGFuZGxlOjpkZWNvZGVIYW5kbGUoZGVjb2Rlcik7Ci0gICAgaWYg
KCFwcm9jZXNzU3BlY2lmaWNIYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
c3VsdC5zaGFyZWRSZXNvdXJjZUhhbmRsZSA9IHByb2Nlc3NTcGVjaWZpY0hhbmRsZS52YWx1ZSgp
OwotI2VuZGlmCi0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTg3LDE4ICsxNzAsMTIgQEAg
U2hhcmVhYmxlQml0bWFwOjpTaGFyZWFibGVCaXRtYXAoY29uc3QgSQogICAgICwgbV9zaGFyZWRN
ZW1vcnkoc2hhcmVkTWVtb3J5KQogICAgICwgbV9kYXRhKG51bGxwdHIpCiB7Ci0jaWYgVVNFKERJ
UkVDVDJEKQotICAgIGNyZWF0ZVNoYXJlZFJlc291cmNlKCk7Ci0jZW5kaWYKIH0KIAogU2hhcmVh
YmxlQml0bWFwOjp+U2hhcmVhYmxlQml0bWFwKCkKIHsKICAgICBpZiAoIWlzQmFja2VkQnlTaGFy
ZWRNZW1vcnkoKSkKICAgICAgICAgU2hhcmVhYmxlQml0bWFwTWFsbG9jOjpmcmVlKG1fZGF0YSk7
Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIGRpc3Bvc2VTaGFyZWRSZXNvdXJjZSgpOwotI2VuZGlm
CiB9CiAKIHZvaWQqIFNoYXJlYWJsZUJpdG1hcDo6ZGF0YSgpIGNvbnN0CkBAIC0yMTIsMTIgKzE4
OSw3IEBAIHZvaWQqIFNoYXJlYWJsZUJpdG1hcDo6ZGF0YSgpIGNvbnN0CiAKIENoZWNrZWRVaW50
MzIgU2hhcmVhYmxlQml0bWFwOjpudW1CeXRlc0ZvclNpemUoV2ViQ29yZTo6SW50U2l6ZSBzaXpl
LCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiB7
Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIC8vIFdlIHBhc3MgcmVmZXJlbmNlcyB0byBHUFUgdGV4
dHVyZXMsIHNvIG5vIG5lZWQgdG8gYWxsb2NhdGUgZnJhbWUgYnVmZmVycyBoZXJlLiBKdXN0IHNl
bmQgYSBzbWFsbCBiaXQgb2YgZGF0YS4KLSAgICByZXR1cm4gc2l6ZW9mKHZvaWQqKTsKLSNlbHNl
CiAgICAgcmV0dXJuIGNhbGN1bGF0ZUJ5dGVzUGVyUm93KHNpemUsIGNvbmZpZ3VyYXRpb24pICog
c2l6ZS5oZWlnaHQoKTsKLSNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCShyZXZpc2lvbiAyODc4MTIpCisr
KyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsMTYgKzMyLDYgQEAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKLSNpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2Ug
SUQyRDFCaXRtYXA7Ci1pbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQz
RDExRGV2aWNlMTsKLWludGVyZmFjZSBJRFhHSUtleWVkTXV0ZXg7Ci1pbnRlcmZhY2UgSURYR0lT
dXJmYWNlMTsKLQotI2luY2x1ZGUgPFdlYkNvcmUvQ09NUHRyLmg+Ci0jZW5kaWYKLQogbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgSW1hZ2U7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CkBAIC01
NCw5ICs0NCw2IEBAIHB1YmxpYzoKICAgICBzdHJ1Y3QgQ29uZmlndXJhdGlvbiB7CiAgICAgICAg
IHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNl
OwogICAgICAgICBib29sIGlzT3BhcXVlIHsgZmFsc2UgfTsKLSNpZiBVU0UoRElSRUNUMkQpCi0g
ICAgICAgIG11dGFibGUgSEFORExFIHNoYXJlZFJlc291cmNlSGFuZGxlIHsgbnVsbHB0ciB9Owot
I2VuZGlmCiAKICAgICAgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7CiAgICAg
ICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoSVBDOjpEZWNvZGVyJiwg
Q29uZmlndXJhdGlvbiYpOwpAQCAtMTM3LDE0ICsxMjQsNiBAQCBwdWJsaWM6CiAgICAgUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gY3JlYXRlQ2Fpcm9TdXJmYWNlKCk7CiAKICAgICBXZWJDb3JlOjpQ
bGF0Zm9ybUltYWdlUHRyIGNyZWF0ZVBsYXRmb3JtSW1hZ2UoKSB7IHJldHVybiBjcmVhdGVDYWly
b1N1cmZhY2UoKTsgfQotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRDJEMUJpdG1h
cD4gY3JlYXRlRGlyZWN0MkRTdXJmYWNlKElEM0QxMURldmljZTEqLCBJRDJEMVJlbmRlclRhcmdl
dCopOwotICAgIElEWEdJU3VyZmFjZTEqIGR4U3VyZmFjZSgpIHsgcmV0dXJuIG1fc3VyZmFjZS5n
ZXQoKTsgfQotICAgIHZvaWQgY3JlYXRlU2hhcmVkUmVzb3VyY2UoKTsKLSAgICB2b2lkIGRpc3Bv
c2VTaGFyZWRSZXNvdXJjZSgpOwotICAgIHZvaWQgbGVha1NoYXJlZFJlc291cmNlKCk7Ci0KLSAg
ICBXZWJDb3JlOjpQbGF0Zm9ybUltYWdlUHRyIGNyZWF0ZVBsYXRmb3JtSW1hZ2UoKSB7IHJldHVy
biBudWxscHRyOyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTE3MSwxMiArMTUwLDYgQEAgcHJp
dmF0ZToKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKICAgICBDb25maWd1cmF0aW9uIG1f
Y29uZmlndXJhdGlvbjsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8SURYR0lTdXJm
YWNlMT4gbV9zdXJmYWNlOwotICAgIENPTVB0cjxJRFhHSUtleWVkTXV0ZXg+IG1fc3VyZmFjZU11
dGV4OwotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gbV9iaXRtYXA7Ci0jZW5kaWYKLQogI2lmIFVT
RShDRykKICAgICBib29sIG1fcmVsZWFzZUJpdG1hcENvbnRleHREYXRhQ2FsbGVkIHsgZmFsc2Ug
fTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1h
cERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vU2hh
cmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkK
QEAgLTEsMTc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQnJlbnQgRnVs
Z2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEg
Uy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2hhcmVhYmxl
Qml0bWFwLmgiCi0KLSNpbmNsdWRlICJEZWNvZGVyLmgiCi0jaW5jbHVkZSAiRW5jb2Rlci5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvQml0bWFwSW1hZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RJQlBp
eGVsRGF0YS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRPcGVyYXRpb25zLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9EaXJlY3QyRFV0aWxpdGllcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oPgotI2luY2x1
ZGUgPGQyZDFfMS5oPgotI2luY2x1ZGUgPGQzZDExXzEuaD4KLSNpbmNsdWRlIDxkeGdpMV8yLmg+
Ci0jaW5jbHVkZSA8d2luY29kZWMuaD4KLSNpbmNsdWRlIDx3dGYvUHJvY2Vzc0lELmg+Ci0KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotdm9pZCBTaGFy
ZWFibGVCaXRtYXA6OnZhbGlkYXRlQ29uZmlndXJhdGlvbihDb25maWd1cmF0aW9uJikKLXsKLX0K
LQotc3RhdGljIHVuc2lnbmVkIHN0cmlkZUZvcldpZHRoKHVuc2lnbmVkIHdpZHRoKQotewotICAg
IHN0YXRpYyB1bnNpZ25lZCBiaXRzUGVyUGl4ZWwgPSBEaXJlY3QyRDo6Yml0c1BlclBpeGVsKERp
cmVjdDJEOjp3aWNCaXRtYXBGb3JtYXQoKSk7Ci0gICAgcmV0dXJuIGJpdHNQZXJQaXhlbCAqIHdp
ZHRoIC8gODsKLX0KLQotQ2hlY2tlZFVpbnQzMiBTaGFyZWFibGVCaXRtYXA6OmNhbGN1bGF0ZUJ5
dGVzUGVyUm93KFdlYkNvcmU6OkludFNpemUgc2l6ZSwgY29uc3QgQ29uZmlndXJhdGlvbiYgY29u
ZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gY2FsY3VsYXRlQnl0ZXNQZXJQaXhlbChjb25maWd1
cmF0aW9uKSAqIHNpemUud2lkdGgoKTsKLX0KLQotQ2hlY2tlZFVpbnQzMiBTaGFyZWFibGVCaXRt
YXA6OmNhbGN1bGF0ZUJ5dGVzUGVyUGl4ZWwoY29uc3QgQ29uZmlndXJhdGlvbiYpCi17Ci0gICAg
cmV0dXJuIDQ7Ci19Ci0KLXZvaWQgU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWRSZXNvdXJj
ZSgpCi17Ci0gICAgLy8gRG9uJ3QgY3JlYXRlIGEgc2hhcmVkIHJlc291cmNlIGlmIHRoZSBjb25m
aWd1cmF0aW9uIGluc3RydWN0cyB1cyB0byB1c2UgYW4gZXhpc3Rpbmcgb25lLgotICAgIGlmICht
X2NvbmZpZ3VyYXRpb24uc2hhcmVkUmVzb3VyY2VIYW5kbGUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fc3VyZmFjZSA9IERpcmVjdDJEOjpjcmVhdGVEWEdJU3VyZmFjZU9mU2l6ZShtX3NpemUs
IG51bGxwdHIsIHRydWUpOwotCi0gICAgQ09NUHRyPElEWEdJUmVzb3VyY2UxPiByZXNvdXJjZURh
dGE7Ci0gICAgSFJFU1VMVCBociA9IG1fc3VyZmFjZS0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2Yo
SURYR0lSZXNvdXJjZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmcmVzb3VyY2VEYXRhKSk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBociA9IHJlc291cmNl
RGF0YS0+Q3JlYXRlU2hhcmVkSGFuZGxlKG51bGxwdHIsIERYR0lfU0hBUkVEX1JFU09VUkNFX1JF
QUQgfCBEWEdJX1NIQVJFRF9SRVNPVVJDRV9XUklURSwgbnVsbHB0ciwgJm1fY29uZmlndXJhdGlv
bi5zaGFyZWRSZXNvdXJjZUhhbmRsZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci19Ci0KLXZvaWQgU2hhcmVhYmxlQml0bWFwOjpkaXNwb3NlU2hhcmVkUmVzb3VyY2UoKQot
ewotICAgIGlmIChtX3N1cmZhY2VNdXRleCkKLSAgICAgICAgbV9zdXJmYWNlTXV0ZXgtPlJlbGVh
c2VTeW5jKDEpOwotICAgIGlmIChtX2NvbmZpZ3VyYXRpb24uc2hhcmVkUmVzb3VyY2VIYW5kbGUp
Ci0gICAgICAgIDo6Q2xvc2VIYW5kbGUobV9jb25maWd1cmF0aW9uLnNoYXJlZFJlc291cmNlSGFu
ZGxlKTsKLX0KLQotdm9pZCBTaGFyZWFibGVCaXRtYXA6OmxlYWtTaGFyZWRSZXNvdXJjZSgpCi17
Ci0gICAgbV9jb25maWd1cmF0aW9uLnNoYXJlZFJlc291cmNlSGFuZGxlID0gbnVsbHB0cjsKLX0K
LQotc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVh
dGVHcmFwaGljc0NvbnRleHQoKQotewotICAgIC8vIExvY2sgdGhlIHN1cmZhY2UgdG8gdGhlIGN1
cnJlbnQgZGV2aWNlIHdoaWxlIHJlbmRlcmluZy4KLSAgICBIUkVTVUxUIGhyID0gbV9zdXJmYWNl
LT5RdWVyeUludGVyZmFjZSgmbV9zdXJmYWNlTXV0ZXgpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNV
Q0NFRURFRChocikpOwotICAgIGhyID0gbV9zdXJmYWNlTXV0ZXgtPkFjcXVpcmVTeW5jKDAsIElO
RklOSVRFKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGF1dG8g
c3VyZmFjZUNvbnRleHQgPSBEaXJlY3QyRDo6Y3JlYXRlU3VyZmFjZVJlbmRlclRhcmdldChtX3N1
cmZhY2UuZ2V0KCkpOwotICAgIGlmICghc3VyZmFjZUNvbnRleHQpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ+
KHN1cmZhY2VDb250ZXh0LmdldCgpKTsKLX0KLQotdm9pZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIGRzdFBvaW50LCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0KQotewotICAgIHBhaW50KGNvbnRleHQsIDEsIGRzdFBvaW50LCBz
cmNSZWN0KTsKLX0KLQotdm9pZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgZmxvYXQgc2NhbGVGYWN0b3IsIGNvbnN0IEludFBvaW50JiBkc3RQb2ludCwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCkKLXsKLSAgICBhdXRvIHN1cmZhY2UgPSBjcmVhdGVEaXJl
Y3QyRFN1cmZhY2UoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+ZDNkRGV2aWNlKCksIGNvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpKTsKLQotI2lmbmRlZiBfTkRFQlVH
Ci0gICAgYXV0byBiaXRtYXBTaXplID0gc3VyZmFjZS0+R2V0UGl4ZWxTaXplKCk7Ci0gICAgQVNT
RVJUKGJpdG1hcFNpemUud2lkdGggPT0gbV9zaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChiaXRt
YXBTaXplLmhlaWdodCA9PSBtX3NpemUuaGVpZ2h0KCkpOwotI2VuZGlmCi0KLSAgICBGbG9hdFJl
Y3QgZGVzdFJlY3QoZHN0UG9pbnQsIHNyY1JlY3Quc2l6ZSgpKTsKLSAgICBGbG9hdFJlY3Qgc3Jj
UmVjdFNjYWxlZChzcmNSZWN0KTsKLSAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKHNjYWxlRmFjdG9y
KTsKLQotICAgIEFTU0VSVChjb250ZXh0Lmhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBhdXRv
JiBzdGF0ZSA9IGNvbnRleHQuc3RhdGUoKTsKLSAgICBhdXRvJiBwbGF0Zm9ybUNvbnRleHQgPSAq
Y29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIEltYWdlUGFpbnRpbmdPcHRpb25zIG9w
dGlvbnMgeyBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlLCBJbWFnZU9y
aWVudGF0aW9uKCksIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfTsKLSAgICBEaXJl
Y3QyRDo6ZHJhd1BsYXRmb3JtSW1hZ2UocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBt
X3NpemUsIGRlc3RSZWN0LCBzcmNSZWN0U2NhbGVkLCBvcHRpb25zLCBzdGF0ZS5hbHBoYSwgRGly
ZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLUNPTVB0cjxJRDJEMUJpdG1hcD4gU2hh
cmVhYmxlQml0bWFwOjpjcmVhdGVEaXJlY3QyRFN1cmZhY2UoSUQzRDExRGV2aWNlMSogZGlyZWN0
WERldmljZSwgSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsKLSAgICBpZiAoIWRp
cmVjdFhEZXZpY2UpCi0gICAgICAgIGRpcmVjdFhEZXZpY2UgPSBEaXJlY3QyRDo6ZGVmYXVsdERp
cmVjdFhEZXZpY2UoKTsKLQotICAgIGlmICghbV9iaXRtYXApIHsKLSAgICAgICAgQ09NUHRyPElE
M0QxMVRleHR1cmUyRD4gdGV4dHVyZTsKLSAgICAgICAgSFJFU1VMVCBociA9IGRpcmVjdFhEZXZp
Y2UtPk9wZW5TaGFyZWRSZXNvdXJjZTEobV9jb25maWd1cmF0aW9uLnNoYXJlZFJlc291cmNlSGFu
ZGxlLCBfX3V1aWRvZihJRDNEMTFUZXh0dXJlMkQpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4o
JnRleHR1cmUpKTsKLSAgICAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgaHIgPSB0ZXh0dXJlLT5RdWVyeUludGVyZmFjZSgmbV9z
dXJmYWNlKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICAg
ICAgLy8gTG9jayB0aGUgc3VyZmFjZSB0byB0aGUgY3VycmVudCBkZXZpY2Ugd2hpbGUgcmVuZGVy
aW5nLgotICAgICAgICBociA9IG1fc3VyZmFjZS0+UXVlcnlJbnRlcmZhY2UoJm1fc3VyZmFjZU11
dGV4KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIGhy
ID0gbV9zdXJmYWNlTXV0ZXgtPkFjcXVpcmVTeW5jKDEsIElORklOSVRFKTsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICAgICAgYXV0byBiaXRtYXBQcm9wZXJ0
aWVzID0gRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKTsKLSAgICAgICAgaHIgPSByZW5kZXJU
YXJnZXQtPkNyZWF0ZVNoYXJlZEJpdG1hcChfX3V1aWRvZihJRFhHSVN1cmZhY2UxKSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4obV9zdXJmYWNlLmdldCgpKSwgJmJpdG1hcFByb3BlcnRpZXMsICZt
X2JpdG1hcCk7Ci0gICAgICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBtX2JpdG1hcDsKLX0KLQotUmVmUHRyPElt
YWdlPiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUltYWdlKCkKLXsKLSAgICBhdXRvIHN1cmZhY2Ug
PSBjcmVhdGVEaXJlY3QyRFN1cmZhY2UobnVsbHB0ciwgR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0
UmVuZGVyVGFyZ2V0KCkpOwotICAgIGlmICghc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKHN1cmZhY2UpKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9CYWNraW5nU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0JhY2tpbmdTdG9yZS5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0JhY2tpbmdTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSw2IEBA
CiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgog
Ci0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDxkM2QxMV8x
Lmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZp
c2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsMTAgKzI3OCw2IEBACiAjaW5jbHVkZSAiU09BdXRob3Jp
emF0aW9uQ29vcmRpbmF0b3IuaCIKICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1
ZGUgPGQzZDExXzEuaD4KLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5B
QkxFKERFVklDRV9PUklFTlRBVElPTikKICNpbmNsdWRlICJXZWJEZXZpY2VPcmllbnRhdGlvblVw
ZGF0ZVByb3ZpZGVyUHJveHkuaCIKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsMTAgKzE4Myw2IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9Qcm9taXNlZEF0dGFjaG1lbnRJbmZvLmg+CiAjZW5kaWYKIAotI2lm
IFVTRShESVJFQ1QyRCkKLWludGVyZmFjZSBJRDNEMTFEZXZpY2UxOwotI2VuZGlmCi0KICNpZiBF
TkFCTEUoTUVESUFfVVNBR0UpCiAjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNlc3Npb25JZGVudGlm
aWVyLmg+CiAjZW5kaWYKQEAgLTEwMTcsMTAgKzEwMTMsNiBAQCBwdWJsaWM6CiAKICNpZiBQTEFU
Rk9STShXSU4pCiAgICAgUGxhdGZvcm1WaWV3V2lkZ2V0IHZpZXdXaWRnZXQoKTsKLSNpZiBVU0Uo
RElSRUNUMkQpCi0gICAgSUQzRDExRGV2aWNlMSogZGV2aWNlKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXREZXZpY2UoSUQzRDExRGV2aWNlMSopOwotI2VuZGlmCiAjZW5kaWYKICNpZiBVU0UoTElCV1BF
KQogICAgIHN0cnVjdCB3cGVfdmlld19iYWNrZW5kKiB2aWV3QmFja2VuZCgpOwpAQCAtMzEwNSw5
ICszMDk3LDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8UmVtb3RlTWVkaWFTZXNzaW9uQ29vcmRp
bmF0b3JQcm94eT4gbV9tZWRpYVNlc3Npb25Db29yZGluYXRvclByb3h5OwogI2VuZGlmCiAKLSNp
ZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEM0QxMURldmljZTE+IG1fZGV2aWNlOwotI2Vu
ZGlmCiAgICAgYm9vbCBtX3Nlc3Npb25TdGF0ZVdhc1Jlc3RvcmVkQnlBUElSZXF1ZXN0IHsgZmFs
c2UgfTsKICAgICBib29sIG1faXNRdW90YUluY3JlYXNlRGVuaWVkIHsgZmFsc2UgfTsKICAgICBi
b29sIG1faXNMYXllclRyZWVGcm96ZW5EdWVUb1N3aXBlQW5pbWF0aW9uIHsgZmFsc2UgfTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9yZURp
cmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
d2luL0JhY2tpbmdTdG9yZURpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDEwMSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJhY2tpbmdT
dG9yZS5oIgotCi0jaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSAiVXBkYXRl
SW5mby5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQmFj
a2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ09NUHRy
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9EaXJlY3QyRFV0aWxpdGllcy5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRm
b3JtQ29udGV4dERpcmVjdDJELmg+Ci0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQzZDEx
XzEuaD4KLSNpbmNsdWRlIDxkeGdpLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxCYWNraW5nU3RvcmVCYWNrZW5kRGly
ZWN0MkQ+IEJhY2tpbmdTdG9yZTo6Y3JlYXRlQmFja2VuZCgpCi17Ci0gICAgcmV0dXJuIG1ha2VV
bmlxdWU8QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbD4obV9zaXplLCBtX2RldmljZVNj
YWxlRmFjdG9yLCBtX3dlYlBhZ2VQcm94eS5kZXZpY2UoKSk7Ci19Ci0KLXZvaWQgQmFja2luZ1N0
b3JlOjpwYWludChEWENvbm5lY3Rpb25zIGR4Q29ubmVjdGlvbnMsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCi17Ci0gICAgQVNTRVJUKG1fYmFja2VuZCk7Ci0gICAgQVNTRVJUKG1fYmFja2VuZC0+c2l6
ZSgpID09IG1fc2l6ZSk7Ci0KLSAgICBDT01QdHI8SUQzRDExUmVzb3VyY2U+IGJhY2tCdWZmZXI7
Ci0gICAgSFJFU1VMVCBociA9IGR4Q29ubmVjdGlvbnMuYmFja0J1ZmZlci0+UXVlcnlJbnRlcmZh
Y2UoX191dWlkb2YoSUQzRDExUmVzb3VyY2UpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmJh
Y2tCdWZmZXIpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENP
TVB0cjxJRDNEMTFSZXNvdXJjZT4gYmFja2luZ1N0b3JlOwotICAgIGhyID0gbV9iYWNrZW5kLT5k
eFN1cmZhY2UoKS0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQzRDExUmVzb3VyY2UpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oJmJhY2tpbmdTdG9yZSkpOwotICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotCi0gICAgQ0QzRDExX0JPWCBzcmNCb3gocmVjdC54KCksIHJlY3Qu
eSgpLCAwLCByZWN0LngoKSArIHJlY3Qud2lkdGgoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgp
LCAxKTsKLSAgICBkeENvbm5lY3Rpb25zLmltbWVkaWF0ZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJj
ZVJlZ2lvbjEoYmFja0J1ZmZlci5nZXQoKSwgMCwgcmVjdC54KCksIHJlY3QueSgpLCAwLCBiYWNr
aW5nU3RvcmUuZ2V0KCksIDAsICZzcmNCb3gsIEQzRDExX0NPUFlfRElTQ0FSRCk7Ci19Ci0KLXZv
aWQgQmFja2luZ1N0b3JlOjppbmNvcnBvcmF0ZVVwZGF0ZShTaGFyZWFibGVCaXRtYXAqIGJpdG1h
cCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKLXsKLSAgICBpZiAoIW1fYmFja2VuZCkK
LSAgICAgICAgbV9iYWNrZW5kID0gY3JlYXRlQmFja2VuZCgpOwotCi0gICAgc2Nyb2xsKHVwZGF0
ZUluZm8uc2Nyb2xsUmVjdCwgdXBkYXRlSW5mby5zY3JvbGxPZmZzZXQpOwotCi0gICAgSW50UG9p
bnQgdXBkYXRlUmVjdEJvdW5kc0xvY2F0aW9uID0gdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRz
LmxvY2F0aW9uKCk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGRldmljZVVwZGF0ZUJpdG1h
cCA9IGJpdG1hcC0+Y3JlYXRlRGlyZWN0MkRTdXJmYWNlKG1fd2ViUGFnZVByb3h5LmRldmljZSgp
LCBtX2JhY2tlbmQtPnJlbmRlclRhcmdldCgpKTsKLSAgICBpZiAoIWRldmljZVVwZGF0ZUJpdG1h
cCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWZuZGVmIF9OREVCVUcKLSAgICBhdXRvIGRldmljZUJp
dG1hcFNpemUgPSBkZXZpY2VVcGRhdGVCaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgIEFTU0VS
VChkZXZpY2VCaXRtYXBTaXplLndpZHRoID09IHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy53
aWR0aCgpKTsKLSAgICBBU1NFUlQoZGV2aWNlQml0bWFwU2l6ZS5oZWlnaHQgPT0gdXBkYXRlSW5m
by51cGRhdGVSZWN0Qm91bmRzLmhlaWdodCgpKTsKLSNlbmRpZgotCi0gICAgZm9yIChjb25zdCBh
dXRvJiB1cGRhdGVSZWN0IDogdXBkYXRlSW5mby51cGRhdGVSZWN0cykgewotICAgICAgICBhdXRv
IGN1cnJlbnRSZWN0TG9jYXRpb24gPSBJbnRTaXplKHVwZGF0ZVJlY3QueCgpIC0gdXBkYXRlUmVj
dEJvdW5kc0xvY2F0aW9uLngoKSwgdXBkYXRlUmVjdC55KCkgLSB1cGRhdGVSZWN0Qm91bmRzTG9j
YXRpb24ueSgpKTsKLSAgICAgICAgYXV0byBkZXN0UmVjdExvY2F0aW9uID0gSW50U2l6ZSh1cGRh
dGVSZWN0LngoKSwgdXBkYXRlUmVjdC55KCkpOwotICAgICAgICBEaXJlY3QyRDo6Y29weVJlY3RG
cm9tT25lU3VyZmFjZVRvQW5vdGhlcihkZXZpY2VVcGRhdGVCaXRtYXAuZ2V0KCksIG1fYmFja2Vu
ZC0+c3VyZmFjZSgpLCBjdXJyZW50UmVjdExvY2F0aW9uLCB1cGRhdGVSZWN0LCBkZXN0UmVjdExv
Y2F0aW9uKTsKLSAgICB9Ci19Ci0KLXZvaWQgQmFja2luZ1N0b3JlOjpzY3JvbGwoY29uc3QgSW50
UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQotewotICAgIGlm
IChzY3JvbGxPZmZzZXQuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCht
X2JhY2tlbmQpOwotICAgIG1fYmFja2VuZC0+c2Nyb2xsKHNjcm9sbFJlY3QsIHNjcm9sbE9mZnNl
dCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiwxMCArMzIsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2VhcmNoUG9wdXBN
ZW51REIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJBZ2VudC5oPgogCi0jaWYgVVNFKERJUkVD
VDJEKQotI2luY2x1ZGUgPGQzZDExXzEuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogdm9pZCBXZWJQYWdlUHJveHk6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCkBAIC03OSwxOCArNzUs
NiBAQCBQbGF0Zm9ybVZpZXdXaWRnZXQgV2ViUGFnZVByb3h5Ojp2aWV3V2lkCiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFBhZ2VDbGllbnRJbXBsJj4ocGFnZUNsaWVudCgpKS52aWV3V2lkZ2V0KCk7
CiB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi1JRDNEMTFEZXZpY2UxKiBXZWJQYWdlUHJveHk6OmRl
dmljZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGV2aWNlLmdldCgpOwotfQotCi12b2lkIFdl
YlBhZ2VQcm94eTo6c2V0RGV2aWNlKElEM0QxMURldmljZTEqIGRldmljZSkKLXsKLSAgICBtX2Rl
dmljZSA9IGRldmljZTsKLX0KLSNlbmRpZgotCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlzcGF0Y2hQ
ZW5kaW5nQ2hhckV2ZW50cyhjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBrZXlkb3duRXZl
bnQpCiB7CiAgICAgYXV0byYgcGVuZGluZ0NoYXJFdmVudHMgPSBrZXlkb3duRXZlbnQucGVuZGlu
Z0NoYXJFdmVudHMoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1
cE1lbnVQcm94eVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
d2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDUsMTMgKzQ1LDYgQEAKICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCi0jaWYgVVNFKERJUkVDVDJEKQotI2lu
Y2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxkM2QxMV8xLmg+
Ci0jaW5jbHVkZSA8ZGlyZWN0eGNvbG9ycy5oPiAKLSNpbmNsdWRlIDxkeGdpLmg+Ci0jZW5kaWYK
LQogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMjE1
LDExICsyMDgsNiBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpzaG93UG9wdXBNZW51CiAK
ICAgICAgICAgaWYgKCFtX3BvcHVwKQogICAgICAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKERJ
UkVDVDJEKQotICAgICAgICBEaXJlY3QyRDo6Y3JlYXRlRGV2aWNlQW5kQ29udGV4dChtX2QzZERl
dmljZSwgbV9pbW1lZGlhdGVDb250ZXh0KTsKLSAgICAgICAgc2V0dXBTd2FwQ2hhaW4obV93aW5k
b3dSZWN0LnNpemUoKSk7Ci0jZW5kaWYKICAgICB9CiAKICAgICBCT09MIHNob3VsZEFuaW1hdGUg
PSBGQUxTRTsKQEAgLTgyOCw3ICs4MTYsNiBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpw
YWludChjb25zdCBJCiAgICAgaWYgKCFtX3BvcHVwKQogICAgICAgICByZXR1cm47CiAKLSNpZiAh
VVNFKERJUkVDVDJEKQogICAgIGlmICghbV9EQykgewogICAgICAgICBtX0RDID0gYWRvcHRHRElP
YmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoSFduZERDKG1fcG9wdXApKSk7CiAgICAgICAgIGlm
ICghbV9EQykKQEAgLTg1NCwyMiArODQxLDYgQEAgdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6
cGFpbnQoY29uc3QgSQogICAgIH0KIAogICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250ZXh0KG1f
REMuZ2V0KCkpOwotI2Vsc2UKLSAgICBDT01QdHI8SUQzRDExVGV4dHVyZTJEPiBiYWNrQnVmZmVy
OyAKLSAgICBIUkVTVUxUIGhyID0gbV9zd2FwQ2hhaW4tPkdldEJ1ZmZlcigwLCBfX3V1aWRvZihJ
RDNEMTFUZXh0dXJlMkQpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmJhY2tCdWZmZXIpKTsg
Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8
SURYR0lTdXJmYWNlMT4gc3VyZmFjZShRdWVyeSwgYmFja0J1ZmZlcik7Ci0gICAgaWYgKCFzdXJm
YWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJlbmRlclRhcmdldCA9IFdlYkNvcmU6
OkRpcmVjdDJEOjpjcmVhdGVTdXJmYWNlUmVuZGVyVGFyZ2V0KHN1cmZhY2UuZ2V0KCkpOwotCi0g
ICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgcGxhdGZvcm1Db250ZXh0KHJlbmRlclRhcmdldC5n
ZXQoKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNldEQzRERldmljZShtX2QzZERldmljZS5nZXQo
KSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0V2luIGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCwgR3Jh
cGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKLSNl
bmRpZgogCiAgICAgSW50UmVjdCB0cmFuc2xhdGVkRGFtYWdlUmVjdCA9IGRhbWFnZVJlY3Q7CiAg
ICAgdHJhbnNsYXRlZERhbWFnZVJlY3QubW92ZShJbnRTaXplKDAsIG1fc2Nyb2xsT2Zmc2V0ICog
bV9pdGVtSGVpZ2h0KSk7CkBAIC04ODQsMTUgKzg1NSwxMCBAQCB2b2lkIFdlYlBvcHVwTWVudVBy
b3h5V2luOjpwYWludChjb25zdCBJCiAgICAgaWYgKG1fc2Nyb2xsYmFyKQogICAgICAgICBtX3Nj
cm9sbGJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7CiAKLSNpZiAhVVNFKERJUkVDVDJE
KQogICAgIEhXbmREQyBoV25kREM7CiAgICAgSERDIGxvY2FsREMgPSBoZGMgPyBoZGMgOiBoV25k
REMuc2V0SFduZChtX3BvcHVwKTsKIAogICAgIDo6Qml0Qmx0KGxvY2FsREMsIGRhbWFnZVJlY3Qu
eCgpLCBkYW1hZ2VSZWN0LnkoKSwgZGFtYWdlUmVjdC53aWR0aCgpLCBkYW1hZ2VSZWN0LmhlaWdo
dCgpLCBtX0RDLmdldCgpLCBkYW1hZ2VSZWN0LngoKSwgZGFtYWdlUmVjdC55KCksIFNSQ0NPUFkp
OwotI2Vsc2UKLSAgICBjb250ZXh0LmZsdXNoKCk7Ci0gICAgbV9zd2FwQ2hhaW4tPlByZXNlbnQo
MCwgMCk7IAotI2VuZGlmCiB9CiAKIGJvb2wgV2ViUG9wdXBNZW51UHJveHlXaW46OnNldEZvY3Vz
ZWRJbmRleChpbnQgaSwgYm9vbCBob3RUcmFja2luZykKQEAgLTk5NSw0OCArOTYxLDYgQEAgYm9v
bCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsVG9SZXZlYQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotI2lmIFVTRShESVJFQ1QyRCkKLXZvaWQgV2ViUG9wdXBNZW51UHJveHlXaW46OnNldHVw
U3dhcENoYWluKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi17Ci0gICAgbV9zd2FwQ2hh
aW4gPSBEaXJlY3QyRDo6c3dhcENoYWluT2ZTaXplRm9yV2luZG93QW5kRGV2aWNlKHNpemUsIG1f
cG9wdXAsIG1fZDNkRGV2aWNlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3N3YXBDaGFpbik7Ci0g
ICAgYXV0byBmYWN0b3J5ID0gRGlyZWN0MkQ6OmZhY3RvcnlGb3JEWEdJRGV2aWNlKERpcmVjdDJE
Ojp0b0RYR0lEZXZpY2UobV9kM2REZXZpY2UpKTsKLQotICAgIGZhY3RvcnktPk1ha2VXaW5kb3dB
c3NvY2lhdGlvbihtX3BvcHVwLCAwKTsKLSAgICBjb25maWd1cmVCYWNraW5nU3RvcmUoc2l6ZSk7
Ci19Ci0KLXZvaWQgV2ViUG9wdXBNZW51UHJveHlXaW46OmNvbmZpZ3VyZUJhY2tpbmdTdG9yZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotewotICAgIEFTU0VSVChtX3N3YXBDaGFpbik7
Ci0gICAgQVNTRVJUKG1fZDNkRGV2aWNlKTsKLSAgICBBU1NFUlQobV9pbW1lZGlhdGVDb250ZXh0
KTsKLQotICAgIC8vIENyZWF0ZSBhIHJlbmRlciB0YXJnZXQgdmlldyAKLSAgICBDT01QdHI8SUQz
RDExVGV4dHVyZTJEPiBiYWNrQnVmZmVyOyAKLSAgICBIUkVTVUxUIGhyID0gbV9zd2FwQ2hhaW4t
PkdldEJ1ZmZlcigwLCBfX3V1aWRvZihJRDNEMTFUZXh0dXJlMkQpLCByZWludGVycHJldF9jYXN0
PHZvaWQqKj4oJmJhY2tCdWZmZXIpKTsgCi0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0KLSAgICBociA9IG1fZDNkRGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KGJhY2tC
dWZmZXIuZ2V0KCksIG51bGxwdHIsICZtX3JlbmRlclRhcmdldFZpZXcpOyAKLSAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGF1dG8qIHJlbmRlclRhcmdldFZpZXcgPSBt
X3JlbmRlclRhcmdldFZpZXcuZ2V0KCk7Ci0gICAgbV9pbW1lZGlhdGVDb250ZXh0LT5PTVNldFJl
bmRlclRhcmdldHMoMSwgJnJlbmRlclRhcmdldFZpZXcsIG51bGxwdHIpOwotCi0gICAgLy8gU2V0
dXAgdGhlIHZpZXdwb3J0IAotICAgIEQzRDExX1ZJRVdQT1JUIHZpZXdwb3J0OwotICAgIHZpZXdw
b3J0LldpZHRoID0gKEZMT0FUKXNpemUud2lkdGgoKTsKLSAgICB2aWV3cG9ydC5IZWlnaHQgPSAo
RkxPQVQpc2l6ZS5oZWlnaHQoKTsKLSAgICB2aWV3cG9ydC5NaW5EZXB0aCA9IDAuMGY7Ci0gICAg
dmlld3BvcnQuTWF4RGVwdGggPSAxLjBmOwotICAgIHZpZXdwb3J0LlRvcExlZnRYID0gMDsKLSAg
ICB2aWV3cG9ydC5Ub3BMZWZ0WSA9IDA7Ci0gICAgbV9pbW1lZGlhdGVDb250ZXh0LT5SU1NldFZp
ZXdwb3J0cygxLCAmdmlld3BvcnQpOwotCi0gICAgbV9pbW1lZGlhdGVDb250ZXh0LT5DbGVhclJl
bmRlclRhcmdldFZpZXcobV9yZW5kZXJUYXJnZXRWaWV3LmdldCgpLCBEaXJlY3RYOjpDb2xvcnM6
OkJsYW5jaGVkQWxtb25kKTsgCi19Ci0jZW5kaWYKLQogU3RyaW5nIFdlYlBvcHVwTWVudVByb3h5
V2luOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbWFrZVN0cmluZygi
V2ViUG9wdXBNZW51UHJveHlXaW4gMHgiLCBoZXgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KHRoaXMpLCBMb3dlcmNhc2UpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9X
ZWJQb3B1cE1lbnVQcm94eVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaAkod29ya2luZyBj
b3B5KQpAQCAtMzMsMTMgKzMzLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGFibGVBcmVh
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxiYXIuaD4KIAotI2lmIFVTRShESVJFQ1QyRCkK
LWludGVyZmFjZSBJRDNEMTFEZXZpY2UxOwotaW50ZXJmYWNlIElEM0QxMURldmljZUNvbnRleHQx
OwotaW50ZXJmYWNlIElEM0QxMVJlbmRlclRhcmdldFZpZXc7Ci1pbnRlcmZhY2UgSURYR0lTd2Fw
Q2hhaW47Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlZpZXc7CkBA
IC0xMzEsMjMgKzEyNCwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5jcmVtZW50V2hlZWxEZWx0
YShpbnQgZGVsdGEpOwogICAgIHZvaWQgcmVkdWNlV2hlZWxEZWx0YShpbnQgZGVsdGEpOwogCi0j
aWYgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgc2V0dXBTd2FwQ2hhaW4oY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYpOwotICAgIHZvaWQgY29uZmlndXJlQmFja2luZ1N0b3JlKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmKTsKLSNlbmRpZgotCiAgICAgV2ViVmlldyogbV93ZWJWaWV3OwogICAgIFZlY3Rv
cjxXZWJQb3B1cEl0ZW0+IG1faXRlbXM7CiAgICAgUGxhdGZvcm1Qb3B1cE1lbnVEYXRhIG1fZGF0
YTsKICAgICBpbnQgbV9uZXdTZWxlY3RlZEluZGV4IHsgMCB9OwogCiAgICAgUmVmUHRyPFdlYkNv
cmU6OlNjcm9sbGJhcj4gbV9zY3JvbGxiYXI7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0
cjxJRDNEMTFEZXZpY2UxPiBtX2QzZERldmljZTsKLSAgICBDT01QdHI8SUQzRDExRGV2aWNlQ29u
dGV4dDE+IG1faW1tZWRpYXRlQ29udGV4dDsKLSAgICBDT01QdHI8SUQzRDExUmVuZGVyVGFyZ2V0
Vmlldz4gbV9yZW5kZXJUYXJnZXRWaWV3OyAKLSAgICBDT01QdHI8SURYR0lTd2FwQ2hhaW4+IG1f
c3dhcENoYWluOwotI2VuZGlmCiAgICAgR0RJT2JqZWN0PEhEQz4gbV9EQzsKICAgICBHRElPYmpl
Y3Q8SEJJVE1BUD4gbV9ibXA7CiAgICAgSFdORCBtX3BvcHVwIHsgbnVsbHB0ciB9OwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMjg3ODEyKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OCwxNCArNjgsNiBAQAogI2luY2x1ZGUgPGNhaXJvLmg+CiAjZW5kaWYgCiAKLSNpZiBV
U0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8V2ViQ29yZS9EaXJlY3QyRFV0aWxpdGllcy5oPgotI2lu
Y2x1ZGUgPGQzZDExXzEuaD4KLSNpbmNsdWRlIDxkaXJlY3R4Y29sb3JzLmg+IAotI2luY2x1ZGUg
PGR4Z2kuaD4KLSNlbmRpZgotCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKQEAgLTI0MywxMSArMjM1LDYgQEAgV2ViVmlldzo6V2ViVmlldyhSRUNUIHJl
Y3QsIGNvbnN0IEFQSTo6UAogICAgIG1fcGFnZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKIAogICAg
IEludFNpemUgd2luZG93U2l6ZShyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAt
IHJlY3QudG9wKTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgRGlyZWN0MkQ6OmNyZWF0ZURldmlj
ZUFuZENvbnRleHQobV9kM2REZXZpY2UsIG1faW1tZWRpYXRlQ29udGV4dCk7Ci0gICAgbV9wYWdl
LT5zZXREZXZpY2UobV9kM2REZXZpY2UuZ2V0KCkpOwotICAgIHNldHVwU3dhcENoYWluKHdpbmRv
d1NpemUpOwotI2VuZGlmCiAKICAgICBpZiAobV9wYWdlLT5kcmF3aW5nQXJlYSgpKQogICAgICAg
ICBtX3BhZ2UtPmRyYXdpbmdBcmVhKCktPnNldFNpemUod2luZG93U2l6ZSk7CkBAIC01NzMsMjEg
KzU2MCw2IEBAIExSRVNVTFQgV2ViVmlldzo6b25TaXplRXZlbnQoSFdORCBod25kLCAKICAgICAg
ICAgbV9uZXh0UmVzaXplU2Nyb2xsT2Zmc2V0ID0gSW50U2l6ZSgpOwogICAgIH0KIAotI2lmIFVT
RShESVJFQ1QyRCkKLSAgICBpZiAobV9zd2FwQ2hhaW4pIHsKLSAgICAgICAgbV9pbW1lZGlhdGVD
b250ZXh0LT5PTVNldFJlbmRlclRhcmdldHMoMCwgbnVsbHB0ciwgbnVsbHB0cik7Ci0KLSAgICAg
ICAgbV9yZW5kZXJUYXJnZXRWaWV3ID0gbnVsbHB0cjsKLQotICAgICAgICAvLyBQcmVzZXJ2ZSB0
aGUgZXhpc3RpbmcgYnVmZmVyIGNvdW50IChwYXNzIHplcm8gZm9yIGNvdW50KSBhbmQgZm9ybWF0
IChieSBwYXNzaW5nIERYR0lfRk9STUFUX1VOS05PV04pLgotICAgICAgICAvLyBBdXRvbWF0aWNh
bGx5IGNob29zZSB0aGUgd2lkdGggYW5kIGhlaWdodCB0byBtYXRjaCB0aGUgY2xpZW50IHJlY3Qg
Zm9yIHRoZSBiYWNraW5nIHdpbmRvdyAocGFzcyB6ZXJvcyBmb3Igd2lkdGgvaGVpZ2h0KS4KLSAg
ICAgICAgSFJFU1VMVCBociA9IG1fc3dhcENoYWluLT5SZXNpemVCdWZmZXJzKDAsIDAsIDAsIERY
R0lfRk9STUFUX1VOS05PV04sIERYR0lfU1dBUF9DSEFJTl9GTEFHX0dESV9DT01QQVRJQkxFKTsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICAgICAgY29uZmln
dXJlQmFja2luZ1N0b3JlKHdpbmRvd1NpemUpOwotICAgIH0KLSNlbmRpZgotCiAgICAgaGFuZGxl
ZCA9IHRydWU7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC05NzQsNTAgKzk0Niw0IEBAIHZvaWQgV2Vi
Vmlldzo6c2V0VG9vbFRpcChjb25zdCBTdHJpbmcmIHQKICAgICA6OlNlbmRNZXNzYWdlKG1fdG9v
bFRpcFdpbmRvdywgVFRNX0FDVElWQVRFLCAhdG9vbFRpcC5pc0VtcHR5KCksIDApOwogfQogCi0j
aWYgVVNFKERJUkVDVDJEKQotdm9pZCBXZWJWaWV3OjpzZXR1cFN3YXBDaGFpbihjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBzaXplKQotewotICAgIGlmICghbV9kM2REZXZpY2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fc3dhcENoYWluID0gRGlyZWN0MkQ6OnN3YXBDaGFpbk9mU2l6ZUZvcldp
bmRvd0FuZERldmljZShzaXplLCBtX3dpbmRvdywgbV9kM2REZXZpY2UpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKG1fc3dhcENoYWluKTsKLQotICAgIGF1dG8gZmFjdG9yeSA9IERpcmVjdDJEOjpmYWN0
b3J5Rm9yRFhHSURldmljZShEaXJlY3QyRDo6dG9EWEdJRGV2aWNlKG1fZDNkRGV2aWNlKSk7Ci0K
LSAgICBmYWN0b3J5LT5NYWtlV2luZG93QXNzb2NpYXRpb24obV93aW5kb3csIDApOwotICAgIGNv
bmZpZ3VyZUJhY2tpbmdTdG9yZShzaXplKTsKLX0KLQotdm9pZCBXZWJWaWV3Ojpjb25maWd1cmVC
YWNraW5nU3RvcmUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBBU1NFUlQo
bV9zd2FwQ2hhaW4pOwotICAgIEFTU0VSVChtX2QzZERldmljZSk7Ci0gICAgQVNTRVJUKG1faW1t
ZWRpYXRlQ29udGV4dCk7Ci0KLSAgICAvLyBDcmVhdGUgYSByZW5kZXIgdGFyZ2V0IHZpZXcgCi0g
ICAgQ09NUHRyPElEM0QxMVRleHR1cmUyRD4gYmFja0J1ZmZlcjsgCi0gICAgSFJFU1VMVCBociA9
IG1fc3dhcENoYWluLT5HZXRCdWZmZXIoMCwgX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZiYWNrQnVmZmVyKSk7IAotICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotCi0gICAgaHIgPSBtX2QzZERldmljZS0+Q3JlYXRlUmVuZGVyVGFy
Z2V0VmlldyhiYWNrQnVmZmVyLmdldCgpLCBudWxscHRyLCAmbV9yZW5kZXJUYXJnZXRWaWV3KTsg
Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBhdXRvKiByZW5kZXJU
YXJnZXRWaWV3ID0gbV9yZW5kZXJUYXJnZXRWaWV3LmdldCgpOwotICAgIG1faW1tZWRpYXRlQ29u
dGV4dC0+T01TZXRSZW5kZXJUYXJnZXRzKDEsICZyZW5kZXJUYXJnZXRWaWV3LCBudWxscHRyKTsK
LQotICAgIC8vIFNldHVwIHRoZSB2aWV3cG9ydCAKLSAgICBEM0QxMV9WSUVXUE9SVCB2aWV3cG9y
dDsKLSAgICB2aWV3cG9ydC5XaWR0aCA9IChGTE9BVClzaXplLndpZHRoKCk7Ci0gICAgdmlld3Bv
cnQuSGVpZ2h0ID0gKEZMT0FUKXNpemUuaGVpZ2h0KCk7Ci0gICAgdmlld3BvcnQuTWluRGVwdGgg
PSAwLjBmOwotICAgIHZpZXdwb3J0Lk1heERlcHRoID0gMS4wZjsKLSAgICB2aWV3cG9ydC5Ub3BM
ZWZ0WCA9IDA7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFkgPSAwOwotICAgIG1faW1tZWRpYXRlQ29u
dGV4dC0+UlNTZXRWaWV3cG9ydHMoMSwgJnZpZXdwb3J0KTsKLQotICAgIG1faW1tZWRpYXRlQ29u
dGV4dC0+Q2xlYXJSZW5kZXJUYXJnZXRWaWV3KG1fcmVuZGVyVGFyZ2V0Vmlldy5nZXQoKSwgRGly
ZWN0WDo6Q29sb3JzOjpNaWRuaWdodEJsdWUpOyAKLX0KLSNlbmRpZgotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuaAkocmV2aXNp
b24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDYgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotI2lmIFVTRShESVJFQ1QyRCkKLWludGVyZmFjZSBJ
RDNEMTFEZXZpY2UxOwotaW50ZXJmYWNlIElEM0QxMURldmljZUNvbnRleHQxOwotaW50ZXJmYWNl
IElEM0QxMVJlbmRlclRhcmdldFZpZXc7Ci1pbnRlcmZhY2UgSURYR0lTd2FwQ2hhaW47Ci0jZW5k
aWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50U2l6ZTsKIH0KQEAgLTgzLDExICs3
Niw2IEBAIHB1YmxpYzoKIAogICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhKCkgeyBy
ZXR1cm4gcGFnZSgpID8gcGFnZSgpLT5kcmF3aW5nQXJlYSgpIDogbnVsbHB0cjsgfQogCi0jaWYg
VVNFKERJUkVDVDJEKQotICAgIElEM0QxMURldmljZTEqIGQzZERldmljZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZDNkRGV2aWNlLmdldCgpOyB9Ci0gICAgSUQzRDExRGV2aWNlQ29udGV4dDEqIGQzZElt
bWVkaWF0ZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2ltbWVkaWF0ZUNvbnRleHQuZ2V0KCk7
IH0KLSNlbmRpZgotCiBwcml2YXRlOgogICAgIFdlYlZpZXcoUkVDVCwgY29uc3QgQVBJOjpQYWdl
Q29uZmlndXJhdGlvbiYsIEhXTkQgcGFyZW50V2luZG93KTsKIApAQCAtMTQ0LDExICsxMzIsNiBA
QCBwcml2YXRlOgogICAgIC8vIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VMaXN0ZW5lcgogICAgIHZp
cnR1YWwgdm9pZCB3aW5kb3dSZWNlaXZlZE1lc3NhZ2UoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFS
QU0sIExQQVJBTSk7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgdm9pZCBzZXR1cFN3YXBDaGFp
bihjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdm9pZCBjb25maWd1cmVCYWNraW5nU3Rv
cmUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotI2VuZGlmCi0KICAgICBIV05EIG1fd2luZG93
IHsgbnVsbHB0ciB9OwogICAgIEhXTkQgbV90b3BMZXZlbFBhcmVudFdpbmRvdyB7IG51bGxwdHIg
fTsKICAgICBIV05EIG1fdG9vbFRpcFdpbmRvdyB7IG51bGxwdHIgfTsKQEAgLTE2OCwxMiArMTUx
LDYgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OlBhZ2VDbGllbnRJ
bXBsPiBtX3BhZ2VDbGllbnQ7CiAgICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gbV9wYWdlOwotI2lm
IFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8SUQzRDExRGV2aWNlMT4gbV9kM2REZXZpY2U7Ci0g
ICAgQ09NUHRyPElEM0QxMURldmljZUNvbnRleHQxPiBtX2ltbWVkaWF0ZUNvbnRleHQ7Ci0gICAg
Q09NUHRyPElEM0QxMVJlbmRlclRhcmdldFZpZXc+IG1fcmVuZGVyVGFyZ2V0VmlldzsgCi0gICAg
Q09NUHRyPElEWEdJU3dhcENoYWluPiBtX3N3YXBDaGFpbjsKLSNlbmRpZgogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViUG9wdXBNZW51LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUG9wdXBNZW51LmNwcAkocmV2aXNpb24gMjg3ODEyKQor
KysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVudS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSwxMiArMTE1LDYgQEAgdm9pZCBXZWJQb3B1cE1lbnU6
OnNob3coY29uc3QgSW50UmVjdCYgcgogICAgIHNldFVwUGxhdGZvcm1EYXRhKHBhZ2VDb29yZGlu
YXRlcywgcGxhdGZvcm1EYXRhKTsKIAogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd1Bv
cHVwTWVudShwYWdlQ29vcmRpbmF0ZXMsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3BvcHVwQ2xp
ZW50LT5tZW51U3R5bGUoKS50ZXh0RGlyZWN0aW9uKCkpLCBpdGVtcywgc2VsZWN0ZWRJbmRleCwg
cGxhdGZvcm1EYXRhKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwotCi0jaWYgVVNFKERJUkVDVDJE
KQotICAgIC8vIERvbid0IGRlc3Ryb3kgdGhlIHNoYXJlZCBoYW5kbGUgaW4gdGhlIFdlYkNvbnRl
bnQgcHJvY2Vzcy4gSXQgd2lsbCBiZSBkZXN0cm95ZWQgaW4gdGhlIFVJUHJvY2Vzcy4KLSAgICBw
bGF0Zm9ybURhdGEubV9ub3RTZWxlY3RlZEJhY2tpbmdTdG9yZS0+bGVha1NoYXJlZFJlc291cmNl
KCk7Ci0gICAgcGxhdGZvcm1EYXRhLm1fc2VsZWN0ZWRCYWNraW5nU3RvcmUtPmxlYWtTaGFyZWRS
ZXNvdXJjZSgpOwotI2VuZGlmCiB9CiAKIHZvaWQgV2ViUG9wdXBNZW51OjpoaWRlKCkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0ZpbmRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDEwICszNTEsNiBA
QCB2b2lkIEZpbmRDb250cm9sbGVyOjpnZXRJbWFnZUZvckZpbmRNYXRjCiAgICAgICAgIHJldHVy
bjsKIAogICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRHZXRJ
bWFnZUZvckZpbmRNYXRjaChoYW5kbGUsIG1hdGNoSW5kZXgpKTsKLSNpZiBVU0UoRElSRUNUMkQp
Ci0gICAgLy8gRG9uJ3QgZGVzdHJveSB0aGUgc2hhcmVkIGhhbmRsZSBpbiB0aGUgV2ViQ29udGVu
dCBwcm9jZXNzLiBJdCB3aWxsIGJlIGRlc3Ryb3llZCBpbiB0aGUgVUlQcm9jZXNzLgotICAgIHNl
bGVjdGlvblNuYXBzaG90LT5sZWFrU2hhcmVkUmVzb3VyY2UoKTsKLSNlbmRpZgogfQogCiB2b2lk
IEZpbmRDb250cm9sbGVyOjpzZWxlY3RGaW5kTWF0Y2godWludDMyX3QgbWF0Y2hJbmRleCkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
RHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVh
Q29vcmRpbmF0ZWRHcmFwaGljcy5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29y
ZGluYXRlZEdyYXBoaWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTQgKzQzLDYgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL1JlZ2lvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4K
IAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dERp
cmVjdDJELmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oPgot
I2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0jZW5kaWYKLQotCiAjaWYg
VVNFKEdMSUJfRVZFTlRfTE9PUCkKICNpbmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJp
b3JpdHkuaD4KICNlbmRpZgpAQCAtODYyLDEwICs4NTQsNiBAQCB2b2lkIERyYXdpbmdBcmVhQ29v
cmRpbmF0ZWRHcmFwaGljczo6ZGlzCiAgICAgICAgIHVwZGF0ZUluZm8udXBkYXRlUmVjdHMuYXBw
ZW5kKHJlY3QpOwogICAgIH0KIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBiaXRtYXAtPmxlYWtT
aGFyZWRSZXNvdXJjZSgpOyAvLyBJdCB3aWxsIGJlIGRlc3Ryb3llZCBpbiB0aGUgVUlQcm9jZXNz
LgotI2VuZGlmCi0KICAgICBtX3dlYlBhZ2UuZGlkVXBkYXRlUmVuZGVyaW5nKCk7CiAKICAgICAv
LyBMYXlvdXQgY2FuIHRyaWdnZXIgbW9yZSBjYWxscyB0byBzZXROZWVkc0Rpc3BsYXkgYW5kIHdl
IGRvbid0IHdhbnQgdG8gcHJvY2VzcyB0aGVtCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwkocmV2
aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAyMi0wMS0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0Bh
cHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIERpcmVjdDJECisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5OTkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtRlRXLmNt
YWtlOiBSZW1vdmVkLgorCiAyMDIyLTAxLTA3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVu
c2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyODc2OTgu
CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvUGxhdGZvcm1GVFcuY21ha2UJKHJldmlzaW9uIDI4Nzgx
MikKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvUGxhdGZvcm1GVFcuY21ha2UJKG5vbmV4aXN0ZW50
KQpAQCAtMSw0MzggKzAsMCBAQAotYWRkX2RlZmluaXRpb25zKC1EVVNFX0RJUkVDVDJEPTEgLURV
U0VfQ1VSTD0xIC1EV0VCS0lUX0VYUE9SVFM9MSkKLWxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9Q
UklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAiJHtXRUJLSVRfTElCUkFSSUVTX0RJUn0v
aW5jbHVkZSIKLSkKLWxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VTX0NsYXNzZXMKLSAg
ICB3aW4vV2ViRG93bmxvYWRDVVJMLmNwcAotICAgIHdpbi9XZWJVUkxBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZVNlbmRlckNVUkwuY3BwCi0pCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfUFJJVkFU
RV9MSUJSQVJJRVMKLSAgICBPcGVuU1NMOjpTU0wKLSAgICBEM0QxMS5saWIKLSAgICBEeGdpLmxp
YgotICAgIG1mdXVpZC5saWIKLSAgICBzdHJtaWlkcy5saWIKLSkKLQotYWRkX2N1c3RvbV9jb21t
YW5kKAotICAgIE9VVFBVVCAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9XZWJL
aXRWZXJzaW9uLmgKLSAgICBNQUlOX0RFUEVOREVOQ1kgJHtXRUJLSVRMRUdBQ1lfRElSfS9zY3Jp
cHRzL2dlbmVyYXRlLXdlYmtpdHZlcnNpb24ucGwKLSAgICBERVBFTkRTICR7V0VCS0lUTEVHQUNZ
X0RJUn0vbWFjL0NvbmZpZ3VyYXRpb25zL1ZlcnNpb24ueGNjb25maWcKLSAgICBDT01NQU5EICR7
UEVSTF9FWEVDVVRBQkxFfSAke1dFQktJVExFR0FDWV9ESVJ9L3NjcmlwdHMvZ2VuZXJhdGUtd2Vi
a2l0dmVyc2lvbi5wbCAtLWNvbmZpZyAke1dFQktJVExFR0FDWV9ESVJ9L21hYy9Db25maWd1cmF0
aW9ucy9WZXJzaW9uLnhjY29uZmlnIC0tb3V0cHV0RGlyICR7V2ViS2l0TGVnYWN5X0RFUklWRURf
U09VUkNFU19ESVJ9Ci0gICAgVkVSQkFUSU0pCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfU09V
UkNFUyAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9XZWJLaXRWZXJzaW9uLmgp
Ci0KLWxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMK
LSAgICAiJHtDTUFLRV9CSU5BUllfRElSfS8uLi9pbmNsdWRlL3ByaXZhdGUiCi0gICAgIiR7Q01B
S0VfQklOQVJZX0RJUn0vLi4vaW5jbHVkZS9wcml2YXRlL0phdmFTY3JpcHRDb3JlIgotICAgICIk
e0NNQUtFX0JJTkFSWV9ESVJ9Ly4uL2luY2x1ZGUvcHJpdmF0ZS9XZWJDb3JlIgotICAgICIke1dF
QktJVExFR0FDWV9ESVJ9L3dpbiIKLSAgICAiJHtXRUJLSVRMRUdBQ1lfRElSfS93aW4vV2ViQ29y
ZVN1cHBvcnQiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L2luY2x1
ZGUiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMi
Ci0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9JTkNMVURFUwotICAgIHdpbi9DRkRpY3Rp
b25hcnlQcm9wZXJ0eUJhZy5oCi0gICAgd2luL0NPTUVudW1WYXJpYW50LmgKLSAgICB3aW4vQ09N
UHJvcGVydHlCYWcuaAotICAgIHdpbi9DT01WYXJpYW50U2V0dGVyLmgKLSAgICB3aW4vQ29kZUFu
YWx5c2lzQ29uZmlnLmgKLSAgICB3aW4vRE9NQ1NTQ2xhc3Nlcy5oCi0gICAgd2luL0RPTUNvcmVD
bGFzc2VzLmgKLSAgICB3aW4vRE9NRXZlbnRzQ2xhc3Nlcy5oCi0gICAgd2luL0RPTUhUTUxDbGFz
c2VzLmgKLSAgICB3aW4vRGVmYXVsdERvd25sb2FkRGVsZWdhdGUuaAotICAgIHdpbi9EZWZhdWx0
UG9saWN5RGVsZWdhdGUuaAotICAgIHdpbi9Gb3JFYWNoQ29DbGFzcy5oCi0gICAgd2luL0Z1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXIuaAotICAgIHdpbi9NYXJzaGFsbGluZ0hlbHBlcnMuaAotICAg
IHdpbi9NZW1vcnlTdHJlYW0uaAotICAgIHdpbi9Qcm9nSURNYWNyb3MuaAotICAgIHdpbi9XZWJB
Y3Rpb25Qcm9wZXJ0eUJhZy5oCi0gICAgd2luL1dlYkFwcGxpY2F0aW9uQ2FjaGUuaAotICAgIHdp
bi9XZWJBcmNoaXZlLmgKLSAgICB3aW4vV2ViQmFja0ZvcndhcmRMaXN0LmgKLSAgICB3aW4vV2Vi
Q2FjaGUuaAotICAgIHdpbi9XZWJDYWNoZWRGcmFtZVBsYXRmb3JtRGF0YS5oCi0gICAgd2luL1dl
YkNvcmVTdGF0aXN0aWNzLmgKLSAgICB3aW4vV2ViRGF0YVNvdXJjZS5oCi0gICAgd2luL1dlYkRh
dGFiYXNlTWFuYWdlci5oCi0gICAgd2luL1dlYkRvY3VtZW50TG9hZGVyLmgKLSAgICB3aW4vV2Vi
RG93bmxvYWQuaAotICAgIHdpbi9XZWJEcm9wU291cmNlLmgKLSAgICB3aW4vV2ViRWxlbWVudFBy
b3BlcnR5QmFnLmgKLSAgICB3aW4vV2ViRXJyb3IuaAotICAgIHdpbi9XZWJGcmFtZS5oCi0gICAg
d2luL1dlYkZyYW1lUG9saWN5TGlzdGVuZXIuaAotICAgIHdpbi9XZWJHZW9sb2NhdGlvblBvbGlj
eUxpc3RlbmVyLmgKLSAgICB3aW4vV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5oCi0gICAgd2luL1dl
YkhUTUxSZXByZXNlbnRhdGlvbi5oCi0gICAgd2luL1dlYkhpc3RvcnkuaAotICAgIHdpbi9XZWJI
aXN0b3J5SXRlbS5oCi0gICAgd2luL1dlYkphdmFTY3JpcHRDb2xsZWN0b3IuaAotICAgIHdpbi9X
ZWJLaXRDT01BUEkuaAotICAgIHdpbi9XZWJLaXRDbGFzc0ZhY3RvcnkuaAotICAgIHdpbi9XZWJL
aXRETEwuaAotICAgIHdpbi9XZWJLaXRHcmFwaGljcy5oCi0gICAgd2luL1dlYktpdExvZ2dpbmcu
aAotICAgIHdpbi9XZWJLaXRTdGF0aXN0aWNzLmgKLSAgICB3aW4vV2ViS2l0U3RhdGlzdGljc1By
aXZhdGUuaAotICAgIHdpbi9XZWJLaXRTeXN0ZW1CaXRzLmgKLSAgICB3aW4vV2ViTG9jYWxpemFi
bGVTdHJpbmdzLmgKLSAgICB3aW4vV2ViTXV0YWJsZVVSTFJlcXVlc3QuaAotICAgIHdpbi9XZWJO
YXZpZ2F0aW9uRGF0YS5oCi0gICAgd2luL1dlYk5vdGlmaWNhdGlvbi5oCi0gICAgd2luL1dlYk5v
dGlmaWNhdGlvbkNlbnRlci5oCi0gICAgd2luL1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCi0g
ICAgd2luL1dlYlByZWZlcmVuY2VzLmgKLSAgICB3aW4vV2ViUmVzb3VyY2UuaAotICAgIHdpbi9X
ZWJTY3JpcHRPYmplY3QuaAotICAgIHdpbi9XZWJTY3JpcHRXb3JsZC5oCi0gICAgd2luL1dlYlNl
Y3VyaXR5T3JpZ2luLmgKLSAgICB3aW4vV2ViU2VyaWFsaXplZEpTVmFsdWUuaAotICAgIHdpbi9X
ZWJUZXh0UmVuZGVyZXIuaAotICAgIHdpbi9XZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5o
Ci0gICAgd2luL1dlYlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2VuZGVyLmgKLSAgICB3aW4v
V2ViVVJMQ3JlZGVudGlhbC5oCi0gICAgd2luL1dlYlVSTFByb3RlY3Rpb25TcGFjZS5oCi0gICAg
d2luL1dlYlVSTFJlc3BvbnNlLmgKLSAgICB3aW4vV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmgK
LSAgICB3aW4vV2ViVmlldy5oCi0gICAgd2luL1dlYldvcmtlcnNQcml2YXRlLmgKLSkKLQotbGlz
dChBUFBFTkQgV2ViS2l0TGVnYWN5X1NPVVJDRVNfQ2xhc3NlcwotICAgIHdpbi9BY2Nlc3NpYmxl
QmFzZS5jcHAKLSAgICB3aW4vQWNjZXNzaWJsZURvY3VtZW50LmNwcAotICAgIHdpbi9BY2Nlc3Np
YmxlSW1hZ2UuY3BwCi0gICAgd2luL0FjY2Vzc2libGVUZXh0SW1wbC5jcHAKLSAgICB3aW4vQmFj
a0ZvcndhcmRMaXN0LmNwcAotICAgIHdpbi9DRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZy5jcHAKLSAg
ICB3aW4vRE9NQ1NTQ2xhc3Nlcy5jcHAKLSAgICB3aW4vRE9NQ29yZUNsYXNzZXMuY3BwCi0gICAg
d2luL0RPTUV2ZW50c0NsYXNzZXMuY3BwCi0gICAgd2luL0RPTUhUTUxDbGFzc2VzLmNwcAotICAg
IHdpbi9EZWZhdWx0RG93bmxvYWREZWxlZ2F0ZS5jcHAKLSAgICB3aW4vRGVmYXVsdFBvbGljeURl
bGVnYXRlLmNwcAotICAgIHdpbi9Gb3JFYWNoQ29DbGFzcy5jcHAKLSAgICB3aW4vRnVsbHNjcmVl
blZpZGVvQ29udHJvbGxlci5jcHAKLSAgICB3aW4vTWFyc2hhbGxpbmdIZWxwZXJzLmNwcAotICAg
IHdpbi9NZW1vcnlTdHJlYW0uY3BwCi0gICAgd2luL1dlYkFjdGlvblByb3BlcnR5QmFnLmNwcAot
ICAgIHdpbi9XZWJBcHBsaWNhdGlvbkNhY2hlLmNwcAotICAgIHdpbi9XZWJBcmNoaXZlLmNwcAot
ICAgIHdpbi9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCi0gICAgd2luL1dlYkNhY2hlLmNwcAotICAg
IHdpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAKLSAgICB3aW4vV2ViRGF0YVNvdXJjZS5jcHAKLSAg
ICB3aW4vV2ViRGF0YWJhc2VNYW5hZ2VyLmNwcAotICAgIHdpbi9XZWJEb2N1bWVudExvYWRlci5j
cHAKLSAgICB3aW4vV2ViRG93bmxvYWQuY3BwCi0gICAgd2luL1dlYkRyb3BTb3VyY2UuY3BwCi0g
ICAgd2luL1dlYkVsZW1lbnRQcm9wZXJ0eUJhZy5jcHAKLSAgICB3aW4vV2ViRXJyb3IuY3BwCi0g
ICAgd2luL1dlYkZyYW1lLmNwcAotICAgIHdpbi9XZWJGcmFtZVBvbGljeUxpc3RlbmVyLmNwcAot
ICAgIHdpbi9XZWJHZW9sb2NhdGlvblBvbGljeUxpc3RlbmVyLmNwcAotICAgIHdpbi9XZWJHZW9s
b2NhdGlvblBvc2l0aW9uLmNwcAotICAgIHdpbi9XZWJIVE1MUmVwcmVzZW50YXRpb24uY3BwCi0g
ICAgd2luL1dlYkhpc3RvcnkuY3BwCi0gICAgd2luL1dlYkhpc3RvcnlJdGVtLmNwcAotICAgIHdp
bi9XZWJJbnNwZWN0b3IuY3BwCi0gICAgd2luL1dlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwCi0g
ICAgd2luL1dlYktpdENPTUFQSS5jcHAKLSAgICB3aW4vV2ViS2l0Q2xhc3NGYWN0b3J5LmNwcAot
ICAgIHdpbi9XZWJLaXRETEwuY3BwCi0gICAgd2luL1dlYktpdExvZ2dpbmcuY3BwCi0gICAgd2lu
L1dlYktpdE1lc3NhZ2VMb29wLmNwcAotICAgIHdpbi9XZWJLaXRTdGF0aXN0aWNzLmNwcAotICAg
IHdpbi9XZWJLaXRTeXN0ZW1CaXRzLmNwcAotICAgIHdpbi9XZWJMb2NhbGl6YWJsZVN0cmluZ3Mu
Y3BwCi0gICAgd2luL1dlYk11dGFibGVVUkxSZXF1ZXN0LmNwcAotICAgIHdpbi9XZWJOYXZpZ2F0
aW9uRGF0YS5jcHAKLSAgICB3aW4vV2ViTm9kZUhpZ2hsaWdodC5jcHAKLSAgICB3aW4vV2ViTm90
aWZpY2F0aW9uLmNwcAotICAgIHdpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIuY3BwCi0gICAgd2lu
L1dlYlByZWZlcmVuY2VzLmNwcAotICAgIHdpbi9XZWJSZXNvdXJjZS5jcHAKLSAgICB3aW4vV2Vi
U2NyaXB0T2JqZWN0LmNwcAotICAgIHdpbi9XZWJTY3JpcHRXb3JsZC5jcHAKLSAgICB3aW4vV2Vi
U2VjdXJpdHlPcmlnaW4uY3BwCi0gICAgd2luL1dlYlNlcmlhbGl6ZWRKU1ZhbHVlLmNwcAotICAg
IHdpbi9XZWJUZXh0UmVuZGVyZXIuY3BwCi0gICAgd2luL1dlYlVSTEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlLmNwcAotICAgIHdpbi9XZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNlbmRlci5j
cHAKLSAgICB3aW4vV2ViVVJMQ3JlZGVudGlhbC5jcHAKLSAgICB3aW4vV2ViVVJMUHJvdGVjdGlv
blNwYWNlLmNwcAotICAgIHdpbi9XZWJVUkxSZXNwb25zZS5jcHAKLSAgICB3aW4vV2ViVXNlckNv
bnRlbnRVUkxQYXR0ZXJuLmNwcAotICAgIHdpbi9XZWJWaWV3LmNwcAotICAgIHdpbi9XZWJXb3Jr
ZXJzUHJpdmF0ZS5jcHAKLQotICAgIHdpbi9zdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3Bw
Ci0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VTX1dlYkNvcmVTdXBwb3J0Ci0g
ICAgd2luL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmNwcAot
ICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCi0gICAgd2luL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNv
bnRleHRNZW51Q2xpZW50LmNwcAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVu
dUNsaWVudC5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkRlc2t0b3BOb3RpZmljYXRpb25z
RGVsZWdhdGUuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkRlc2t0b3BOb3RpZmljYXRp
b25zRGVsZWdhdGUuaAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAot
ICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmgKLSAgICB3aW4vV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQuaAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5j
cHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAotICAgIHdp
bi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAotICAgIHdpbi9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgKLSAgICB3aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVj
dG9yQ2xpZW50LmNwcAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQu
aAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JEZWxlZ2F0ZS5jcHAKLSAgICB3
aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yRGVsZWdhdGUuaAotICAgIHdpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0
L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsdWdp
bkluZm9Qcm92aWRlci5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGx1Z2luSW5mb1By
b3ZpZGVyLmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5jcHAK
LSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5oCi0pCi0KLWlmIChV
U0VfQ0YpCi0gICAgbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X1NPVVJDRVNfQ2xhc3NlcwotICAg
ICAgICBjZi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnRDRi5jcHAKLSAgICApCi0K
LSAgICBsaXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfTElCUkFSSUVTCi0gICAgICAgICR7Q09SRUZP
VU5EQVRJT05fTElCUkFSWX0KLSAgICApCi1lbmRpZiAoKQotCi1pZiAoQ09NUElMRVJfSVNfR0ND
X09SX0NMQU5HKQotICAgIFdFQktJVF9BRERfVEFSR0VUX0NYWF9GTEFHUyhXZWJLaXRMZWdhY3kg
LVduby1vdmVybG9hZGVkLXZpcnR1YWwpCi1lbmRpZiAoKQotCi1saXN0KEFQUEVORCBXZWJLaXRM
ZWdhY3lfU09VUkNFUyAke1dlYktpdExlZ2FjeV9JTkNMVURFU30gJHtXZWJLaXRMZWdhY3lfU09V
UkNFU19DbGFzc2VzfSAke1dlYktpdExlZ2FjeV9TT1VSQ0VTX1dlYkNvcmVTdXBwb3J0fSkKLQot
c291cmNlX2dyb3VwKEluY2x1ZGVzIEZJTEVTICR7V2ViS2l0TGVnYWN5X0lOQ0xVREVTfSkKLXNv
dXJjZV9ncm91cChDbGFzc2VzIEZJTEVTICR7V2ViS2l0TGVnYWN5X1NPVVJDRVNfQ2xhc3Nlc30p
Ci1zb3VyY2VfZ3JvdXAoV2ViQ29yZVN1cHBvcnQgRklMRVMgJHtXZWJLaXRMZWdhY3lfU09VUkNF
U19XZWJDb3JlU3VwcG9ydH0pCi0KLSMgQnVpbGQgdGhlIENPTSBpbnRlcmZhY2U6Ci1tYWNybyhH
RU5FUkFURV9JTlRFUkZBQ0UgX2luZmlsZSBfZGVmaW5lcyBfZGVwZW5kcykKLSAgICBnZXRfZmls
ZW5hbWVfY29tcG9uZW50KF9maWxld2UgJHtfaW5maWxlfSBOQU1FX1dFKQotICAgIGFkZF9jdXN0
b21fY29tbWFuZCgKLSAgICAgICAgT1VUUFVUICAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJD
RVNfRElSfS9JbnRlcmZhY2VzLyR7X2ZpbGV3ZX0uaAotICAgICAgICBNQUlOX0RFUEVOREVOQ1kg
JHtfaW5maWxlfQotICAgICAgICBERVBFTkRTICR7X2RlcGVuZHN9Ci0gICAgICAgIENPTU1BTkQg
bWlkbC5leGUgL0kgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS93aW4vSW50ZXJmYWNlcyIg
L0kgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS93aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxl
MiIgL0kgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L2luY2x1ZGUiIC9JICIk
e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vd2luIiAvV1ggL2NoYXIgc2lnbmVkIC9lbnYgd2lu
MzIgL3RsYiAiJHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9LyR7X2ZpbGV3ZX0udGxi
IiAvb3V0ICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzIiAv
aCAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy8ke19maWxl
d2V9LmgiIC9paWQgIiR7X2ZpbGV3ZX1faS5jIiAke19kZWZpbmVzfSAiJHtDTUFLRV9DVVJSRU5U
X1NPVVJDRV9ESVJ9LyR7X2luZmlsZX0iCi0gICAgICAgIFVTRVNfVEVSTUlOQUwgVkVSQkFUSU0p
Ci0gICAgc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKCR7V2ViS2l0TGVnYWN5X0RFUklWRURf
U09VUkNFU19ESVJ9L0ludGVyZmFjZXMvJHtfZmlsZXdlfS5oIFBST1BFUlRJRVMgR0VORVJBVEVE
IFRSVUUpCi0gICAgc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKCR7V2ViS2l0TGVnYWN5X0RF
UklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvJHtfZmlsZXdlfV9pLmMgUFJPUEVSVElFUyBH
RU5FUkFURUQgVFJVRSkKLWVuZG1hY3JvKCkKLQotc2V0KE1JRExfREVGSU5FUyAvRFwgXCJfX1BS
T0RVQ1RJT05fXz0wMVwiKQotCi1zZXQoV0VCS0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVMKLSAg
ICB3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlQ29tcGFyYWJsZS5pZGwKLSAgICB3aW4vSW50ZXJm
YWNlcy9ET01DU1MuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvRE9NQ29yZS5pZGwKLSAgICB3aW4v
SW50ZXJmYWNlcy9ET01FdmVudHMuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvRE9NRXh0ZW5zaW9u
cy5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9ET01IVE1MLmlkbAotICAgIHdpbi9JbnRlcmZhY2Vz
L0RPTVByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvRE9NUmFuZ2UuaWRsCi0gICAgd2lu
L0ludGVyZmFjZXMvRE9NV2luZG93LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lHRU5fRE9NT2Jq
ZWN0LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJBcmNoaXZlLmlkbAotICAgIHdpbi9JbnRl
cmZhY2VzL0lXZWJCYWNrRm9yd2FyZExpc3QuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkJh
Y2tGb3J3YXJkTGlzdFByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkNhY2hlLmlk
bAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJDb3JlU3RhdGlzdGljcy5pZGwKLSAgICB3aW4vSW50
ZXJmYWNlcy9JV2ViRGF0YVNvdXJjZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRGF0YWJh
c2VNYW5hZ2VyLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJEZXNrdG9wTm90aWZpY2F0aW9u
c0RlbGVnYXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJEb2N1bWVudC5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9JV2ViRG93bmxvYWQuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkVk
aXRpbmdEZWxlZ2F0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRW1iZWRkZWRWaWV3Lmlk
bAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJFcnJvci5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9J
V2ViRXJyb3JQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJGb3JtRGVsZWdhdGUu
aWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkZyYW1lLmlkbAotICAgIHdpbi9JbnRlcmZhY2Vz
L0lXZWJGcmFtZUxvYWREZWxlZ2F0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRnJhbWVM
b2FkRGVsZWdhdGVQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJGcmFtZUxvYWRE
ZWxlZ2F0ZVByaXZhdGUyLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJGcmFtZVByaXZhdGUu
aWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkZyYW1lVmlldy5pZGwKLSAgICB3aW4vSW50ZXJm
YWNlcy9JV2ViR2VvbG9jYXRpb25Qb2xpY3lMaXN0ZW5lci5pZGwKLSAgICB3aW4vSW50ZXJmYWNl
cy9JV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViR2Vv
bG9jYXRpb25Qcm92aWRlci5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViSFRNTFJlcHJlc2Vu
dGF0aW9uLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJIVFRQVVJMUmVzcG9uc2UuaWRsCi0g
ICAgd2luL0ludGVyZmFjZXMvSVdlYkhpc3RvcnkuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdl
Ykhpc3RvcnlEZWxlZ2F0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViSGlzdG9yeUl0ZW0u
aWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkhpc3RvcnlJdGVtUHJpdmF0ZS5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9JV2ViSGlzdG9yeVByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMv
SVdlYkluc3BlY3Rvci5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViSW5zcGVjdG9yUHJpdmF0
ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViSmF2YVNjcmlwdENvbGxlY3Rvci5pZGwKLSAg
ICB3aW4vSW50ZXJmYWNlcy9JV2ViS2l0U3RhdGlzdGljcy5pZGwKLSAgICB3aW4vSW50ZXJmYWNl
cy9JV2ViTXV0YWJsZVVSTFJlcXVlc3QuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYk11dGFi
bGVVUkxSZXF1ZXN0UHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViTmF2aWdhdGlv
bkRhdGEuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYk5vdGlmaWNhdGlvbi5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9JV2ViTm90aWZpY2F0aW9uQ2VudGVyLmlkbAotICAgIHdpbi9JbnRlcmZh
Y2VzL0lXZWJOb3RpZmljYXRpb25PYnNlcnZlci5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2Vi
UG9saWN5RGVsZWdhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlBvbGljeURlbGVnYXRl
UHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViUHJlZmVyZW5jZXMuaWRsCi0gICAg
d2luL0ludGVyZmFjZXMvSVdlYlByZWZlcmVuY2VzUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJm
YWNlcy9JV2ViUmVzb3VyY2UuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlJlc291cmNlTG9h
ZERlbGVnYXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJSZXNvdXJjZUxvYWREZWxlZ2F0
ZVByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlJlc291cmNlTG9hZERlbGVnYXRl
UHJpdmF0ZTIuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlNjcmlwdE9iamVjdC5pZGwKLSAg
ICB3aW4vSW50ZXJmYWNlcy9JV2ViU2NyaXB0V29ybGQuaWRsCi0gICAgd2luL0ludGVyZmFjZXMv
SVdlYlNlY3VyaXR5T3JpZ2luLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJTZXJpYWxpemVk
SlNWYWx1ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViU2VyaWFsaXplZEpTVmFsdWVQcml2
YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJUZXh0UmVuZGVyZXIuaWRsCi0gICAgd2lu
L0ludGVyZmFjZXMvSVdlYlVJRGVsZWdhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlVJ
RGVsZWdhdGUyLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJVSURlbGVnYXRlUHJpdmF0ZS5p
ZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaWRs
Ci0gICAgd2luL0ludGVyZmFjZXMvSVdlYlVSTFJlcXVlc3QuaWRsCi0gICAgd2luL0ludGVyZmFj
ZXMvSVdlYlVSTFJlc3BvbnNlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJVUkxSZXNwb25z
ZVByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlVuZG9NYW5hZ2VyLmlkbAotICAg
IHdpbi9JbnRlcmZhY2VzL0lXZWJVbmRvVGFyZ2V0LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lX
ZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlZpZXcu
aWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlZpZXdQcml2YXRlLmlkbAotICAgIHdpbi9JbnRl
cmZhY2VzL0lXZWJXb3JrZXJzUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9KYXZhU2Ny
aXB0Q29yZUFQSVR5cGVzLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL1dlYktpdC5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9XZWJTY3JvbGxiYXJUeXBlcy5pZGwKLQotICAgIHdpbi9JbnRlcmZhY2Vz
L0FjY2Vzc2libGUyL0FjY2Vzc2libGUyLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2li
bGUyL0FjY2Vzc2libGUyXzIuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIvQWNj
ZXNzaWJsZUFwcGxpY2F0aW9uLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0Fj
Y2Vzc2libGVFZGl0YWJsZVRleHQuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIv
QWNjZXNzaWJsZVJlbGF0aW9uLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0Fj
Y2Vzc2libGVTdGF0ZXMuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIvQWNjZXNz
aWJsZVRleHQuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIvQWNjZXNzaWJsZVRl
eHQyLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0lBMkNvbW1vblR5cGVzLmlk
bAotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbmNsdWRlL2F1dG92
ZXJzaW9uLmgiCi0pCi0KLWFkZF9jdXN0b21fY29tbWFuZCgKLSAgICBPVVRQVVQgJHtXZWJLaXRM
ZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vaW5jbHVkZS9hdXRvdmVyc2lvbi5oCi0gICAgV09S
S0lOR19ESVJFQ1RPUlkgJHtDTUFLRV9TT1VSQ0VfRElSfQotICAgIENPTU1BTkQgJHtQRVJMX0VY
RUNVVEFCTEV9ICR7V0VCS0lUX0xJQlJBUklFU19ESVJ9L3Rvb2xzL3NjcmlwdHMvYXV0by12ZXJz
aW9uLnBsICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9Ci0gICAgVkVSQkFUSU0p
Ci0KLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50ZXJmYWNlcy9XZWJLaXQuaWRsICR7TUlETF9E
RUZJTkVTfSAiJHtXRUJLSVRMRUdBQ1lfSURMX0RFUEVOREVOQ0lFU30iKQotR0VORVJBVEVfSU5U
RVJGQUNFKHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0FjY2Vzc2libGVBcHBsaWNhdGlvbi5p
ZGwgJHtNSURMX0RFRklORVN9ICIke1dFQktJVExFR0FDWV9JRExfREVQRU5ERU5DSUVTfSIpCi1H
RU5FUkFURV9JTlRFUkZBQ0Uod2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIvQWNjZXNzaWJsZTIu
aWRsICR7TUlETF9ERUZJTkVTfSAiJHtXRUJLSVRMRUdBQ1lfSURMX0RFUEVOREVOQ0lFU30iKQot
R0VORVJBVEVfSU5URVJGQUNFKHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0FjY2Vzc2libGUy
XzIuaWRsICR7TUlETF9ERUZJTkVTfSAiJHtXRUJLSVRMRUdBQ1lfSURMX0RFUEVOREVOQ0lFU30i
KQotR0VORVJBVEVfSU5URVJGQUNFKHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0FjY2Vzc2li
bGVSZWxhdGlvbi5pZGwgJHtNSURMX0RFRklORVN9ICIke1dFQktJVExFR0FDWV9JRExfREVQRU5E
RU5DSUVTfSIpCi1HRU5FUkFURV9JTlRFUkZBQ0Uod2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIv
QWNjZXNzaWJsZVN0YXRlcy5pZGwgJHtNSURMX0RFRklORVN9ICIke1dFQktJVExFR0FDWV9JRExf
REVQRU5ERU5DSUVTfSIpCi1HRU5FUkFURV9JTlRFUkZBQ0Uod2luL0ludGVyZmFjZXMvQWNjZXNz
aWJsZTIvSUEyQ29tbW9uVHlwZXMuaWRsICR7TUlETF9ERUZJTkVTfSAiJHtXRUJLSVRMRUdBQ1lf
SURMX0RFUEVOREVOQ0lFU30iKQotR0VORVJBVEVfSU5URVJGQUNFKHdpbi9JbnRlcmZhY2VzL0Fj
Y2Vzc2libGUyL0FjY2Vzc2libGVFZGl0YWJsZVRleHQuaWRsICR7TUlETF9ERUZJTkVTfSAiJHtX
RUJLSVRMRUdBQ1lfSURMX0RFUEVOREVOQ0lFU30iKQotR0VORVJBVEVfSU5URVJGQUNFKHdpbi9J
bnRlcmZhY2VzL0FjY2Vzc2libGUyL0FjY2Vzc2libGVUZXh0LmlkbCAke01JRExfREVGSU5FU30g
IiR7V0VCS0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3
aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlVGV4dDIuaWRsICR7TUlETF9ERUZJ
TkVTfSAiJHtXRUJLSVRMRUdBQ1lfSURMX0RFUEVOREVOQ0lFU30iKQotCi1hZGRfbGlicmFyeShX
ZWJLaXRMZWdhY3lHVUlEIFNUQVRJQwotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJD
RVNfRElSfS9JbnRlcmZhY2VzL1dlYktpdC5oIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVE
X1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVBcHBsaWNhdGlvbi5oIgotICAgICIk
e1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGUy
LmgiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMv
QWNjZXNzaWJsZTJfMi5oIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElS
fS9JbnRlcmZhY2VzL0FjY2Vzc2libGVSZWxhdGlvbi5oIgotICAgICIke1dlYktpdExlZ2FjeV9E
RVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVTdGF0ZXMuaCIKLSAgICAi
JHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9JQTJDb21tb25U
eXBlcy5oIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZh
Y2VzL0FjY2Vzc2libGVFZGl0YWJsZVRleHQuaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlVGV4dC5oIgotICAgICIke1dlYktp
dExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVUZXh0Mi5o
IgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL1dl
YktpdF9pLmMiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVy
ZmFjZXMvQWNjZXNzaWJsZUFwcGxpY2F0aW9uX2kuYyIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVS
SVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMl9pLmMiCi0gICAgIiR7V2Vi
S2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZTJfMl9p
LmMiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMv
QWNjZXNzaWJsZVJlbGF0aW9uX2kuYyIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VS
Q0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlRWRpdGFibGVUZXh0X2kuYyIKLSAgICAiJHtX
ZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlVGV4
dF9pLmMiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFj
ZXMvQWNjZXNzaWJsZVRleHQyX2kuYyIKLSkKLXNldF90YXJnZXRfcHJvcGVydGllcyhXZWJLaXRM
ZWdhY3lHVUlEIFBST1BFUlRJRVMgT1VUUFVUX05BTUUgV2ViS2l0R1VJRCR7REVCVUdfU1VGRklY
fSkKLQotbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X1BSSVZBVEVfTElCUkFSSUVTCi0gICAgQ29t
Y3RsMzIKLSAgICBDb21zdXBwCi0gICAgQ3J5cHQzMgotICAgIEQyZDEKLSAgICBEd3JpdGUKLSAg
ICBEeGd1aWQKLSAgICBJcGhscGFwaQotICAgIFBzYXBpCi0gICAgUnBjcnQ0Ci0gICAgU2hsd2Fw
aQotICAgIFVzcDEwCi0gICAgVmVyc2lvbgotICAgIFdlYktpdEdVSUQke0RFQlVHX1NVRkZJWH0K
LSAgICBXaW5kb3dzQ29kZWNzCi0gICAgV2lubW0KLSkKLQotc2V0KENNQUtFX1NIQVJFRF9MSU5L
RVJfRkxBR1MgIiR7Q01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU30gL1NVQlNZU1RFTTpXSU5ET1dT
IikKLXNldChDTUFLRV9FWEVfTElOS0VSX0ZMQUdTICIke0NNQUtFX0VYRV9MSU5LRVJfRkxBR1N9
IC9TVUJTWVNURU06V0lORE9XUyIpCi0KLSMgV2UgbmVlZCB0aGUgd2Via2l0IGxpYnJhcmllcyB0
byBjb21lIGJlZm9yZSB0aGUgc3lzdGVtIGRlZmF1bHQgbGlicmFyaWVzIHRvIHByZXZlbnQgc3lt
Ym9sIGNvbmZsaWN0cyB3aXRoIHV1aWQubGliLgotIyBUbyBkbyB0aGlzIHdlIGFkZCBzeXN0ZW0g
ZGVmYXVsdCBsaWJzIGFzIHdlYmtpdCBsaWJzIGFuZCB6ZXJvIG91dCBzeXN0ZW0gZGVmYXVsdCBs
aWJzLgotc3RyaW5nKFJFUExBQ0UgIiAiICJcOyIgQ1hYX0xJQlMgJHtDTUFLRV9DWFhfU1RBTkRB
UkRfTElCUkFSSUVTfSkKLWxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9MSUJSQVJJRVMgJHtDWFhf
TElCU30pCi1zZXQoQ01BS0VfQ1hYX1NUQU5EQVJEX0xJQlJBUklFUyAiIikKLQotc2V0KENNQUtF
X1NIQVJFRF9MSU5LRVJfRkxBR1MgIiR7Q01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU30gJHtNU1ZD
X1JVTlRJTUVfTElOS0VSX0ZMQUdTfSIpCi0KLSMgSWYgdGhpcyBkaXJlY3RvcnkgaXNuJ3QgY3Jl
YXRlZCBiZWZvcmUgbWlkbCBydW5zIGFuZCBhdHRlbXB0cyB0byBvdXRwdXQgV2ViS2l0LnRsYiwK
LSMgSXQgZmFpbHMgd2l0aCBhbiB1bnVzdWFsIGVycm9yIC0gbWlkbCBmYWlsZWQgLSBmYWlsZWQg
dG8gc2F2ZSBhbGwgY2hhbmdlcwotZmlsZShNQUtFX0RJUkVDVE9SWSAke0NNQUtFX1JVTlRJTUVf
T1VUUFVUX0RJUkVDVE9SWX0pCi1maWxlKE1BS0VfRElSRUNUT1JZICR7V2ViS2l0TGVnYWN5X0RF
UklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMpCi0KLXNldChXZWJLaXRMZWdhY3lfUFVCTElD
X0ZSQU1FV09SS19IRUFERVJTCi0gICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJ
Un0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi5oCi0gICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9T
T1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMl8yLmgKLSAgICAke1dlYktpdExlZ2Fj
eV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVBcHBsaWNhdGlvbi5o
Ci0gICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nl
c3NpYmxlRWRpdGFibGVUZXh0LmgKLSAgICAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNf
RElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVSZWxhdGlvbi5oCi0gICAgJHtXZWJLaXRMZWdhY3lf
REVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlU3RhdGVzLmgKLSAgICAk
e1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVU
ZXh0LmgKLSAgICAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2Vz
L0FjY2Vzc2libGVUZXh0Mi5oCi0gICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJ
Un0vSW50ZXJmYWNlcy9JQTJDb21tb25UeXBlcy5oCi0gICAgJHtXZWJLaXRMZWdhY3lfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9XZWJLaXQuaAotCi0gICAgd2luL0FjY2Vzc2libGVC
YXNlLmgKLSAgICB3aW4vQWNjZXNzaWJsZURvY3VtZW50LmgKLSAgICB3aW4vQ0ZEaWN0aW9uYXJ5
UHJvcGVydHlCYWcuaAotICAgIHdpbi9XZWJEYXRhU291cmNlLmgKLSAgICB3aW4vV2ViRnJhbWUu
aAotICAgIHdpbi9XZWJLaXRDT01BUEkuaAotKQotCi1XRUJLSVRfTUFLRV9GT1JXQVJESU5HX0hF
QURFUlMoV2ViS2l0TGVnYWN5R1VJRAotICAgIFRBUkdFVF9OQU1FIFdlYktpdExlZ2FjeUZyYW1l
d29ya0hlYWRlcnMKLSAgICBERVNUSU5BVElPTiAke1dlYktpdExlZ2FjeV9GUkFNRVdPUktfSEVB
REVSU19ESVJ9L1dlYktpdExlZ2FjeQotICAgIEZJTEVTICR7V2ViS2l0TGVnYWN5X1BVQkxJQ19G
UkFNRVdPUktfSEVBREVSU30KLSAgICBGTEFUVEVORUQKLSkKLQotc2V0KFdlYktpdExlZ2FjeV9P
VVRQVVRfTkFNRQotICAgIFdlYktpdCR7REVCVUdfU1VGRklYfQotKQpJbmRleDogU291cmNlL1dl
YktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMjItMDEt
MDcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzdXBw
b3J0IGZvciBEaXJlY3QyRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM0OTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OmRlbGV0ZUJhY2tpbmdT
dG9yZSk6CisgICAgICAgIChXZWJWaWV3OjplbnN1cmVCYWNraW5nU3RvcmUpOgorICAgICAgICAo
V2ViVmlldzo6c2Nyb2xsQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYlZpZXc6OnNpemVDaGFu
Z2VkKToKKyAgICAgICAgKFdlYlZpZXc6OnVwZGF0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChX
ZWJWaWV3OjpwYWludCk6CisgICAgICAgIChXZWJWaWV3OjpwYWludEludG9CYWNraW5nU3RvcmUp
OgorICAgICAgICAoV2ViVmlldzo6V2ViVmlld1duZFByb2MpOgorICAgICAgICAoV2ViVmlldzo6
bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYlZpZXc6OnBhaW50V2l0aERp
cmVjdDJEKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJWaWV3Lmg6CisKIDIwMjItMDEtMDYgIEpl
YW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KIAogICAgICAgICBIYXZlIENhY2hlZFJh
d1Jlc291cmNlQ2xpZW50IGFuZCByZWxhdGVkIG5ldHdvcmtpbmcgYWN0b3JzIHVzZSBTaGFyZWRC
dWZmZXIuCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMjg3
ODEyKQorKysgU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIwOSwxMCArMjA5LDYgQEAKICNpbmNsdWRlICJBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dC5oIgogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oPgotI2VuZGlmCi0KICNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCiAjaW5jbHVkZSA8V2ViQ29yZS9GdWxsU2NyZWVuQ29udHJvbGxlci5oPgogI2Vu
ZGlmCkBAIC04NTUsMTEgKzg1MSw2IEBAIHZvaWQgV2ViVmlldzo6ZGVsZXRlQmFja2luZ1N0b3Jl
KCkKICAgICAgICAgbV9kZWxldGVCYWNraW5nU3RvcmVUaW1lckFjdGl2ZSA9IGZhbHNlOwogICAg
IH0KICAgICBtX2JhY2tpbmdTdG9yZUJpdG1hcCA9IG51bGxwdHI7Ci0jaWYgVVNFKERJUkVDVDJE
KQotICAgIG1fYmFja2luZ1N0b3JlRDJEQml0bWFwID0gbnVsbHB0cjsKLSAgICBtX2JhY2tpbmdT
dG9yZUdkaUludGVyb3AgPSBudWxscHRyOwotICAgIG1fYmFja2luZ1N0b3JlUmVuZGVyVGFyZ2V0
ID0gbnVsbHB0cjsKLSNlbmRpZgogICAgIG1fYmFja2luZ1N0b3JlRGlydHlSZWdpb24gPSBudWxs
cHRyOwogICAgIG1fYmFja2luZ1N0b3JlU2l6ZS5jeCA9IG1fYmFja2luZ1N0b3JlU2l6ZS5jeSA9
IDA7CiB9CkBAIC04NzMsMjAgKzg2NCw2IEBAIGJvb2wgV2ViVmlldzo6ZW5zdXJlQmFja2luZ1N0
b3JlKCkKICAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDAgJiYgKHdpZHRoICE9IG1fYmFj
a2luZ1N0b3JlU2l6ZS5jeCB8fCBoZWlnaHQgIT0gbV9iYWNraW5nU3RvcmVTaXplLmN5KSkgewog
ICAgICAgICBkZWxldGVCYWNraW5nU3RvcmUoKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAg
ICAgYXV0byBiaXRtYXBTaXplID0gRDJEMTo6U2l6ZUYod2lkdGgsIGhlaWdodCk7Ci0gICAgICAg
IGF1dG8gcGl4ZWxTaXplID0gRDJEMTo6U2l6ZVUod2lkdGgsIGhlaWdodCk7Ci0KLSAgICAgICAg
aWYgKCFtX3JlbmRlclRhcmdldCkgewotICAgICAgICAgICAgLy8gQ3JlYXRlIGEgRGlyZWN0MkQg
cmVuZGVyIHRhcmdldC4KLSAgICAgICAgICAgIGF1dG8gcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9
IEQyRDE6OlJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdl
dFByb3BlcnRpZXMudXNhZ2UgPSBEMkQxX1JFTkRFUl9UQVJHRVRfVVNBR0VfR0RJX0NPTVBBVElC
TEU7Ci0gICAgICAgICAgICBhdXRvIGh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gRDJEMTo6
SHduZFJlbmRlclRhcmdldFByb3BlcnRpZXMobV92aWV3V2luZG93LCBwaXhlbFNpemUpOwotICAg
ICAgICAgICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5D
cmVhdGVId25kUmVuZGVyVGFyZ2V0KCZyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLCAmaHduZFJlbmRl
clRhcmdldFByb3BlcnRpZXMsICZtX3JlbmRlclRhcmdldCk7Ci0gICAgICAgICAgICBpZiAoIVNV
Q0NFRURFRChocikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0j
ZW5kaWYKICAgICAgICAgbV9iYWNraW5nU3RvcmVTaXplLmN4ID0gd2lkdGg7CiAgICAgICAgIG1f
YmFja2luZ1N0b3JlU2l6ZS5jeSA9IGhlaWdodDsKICAgICAgICAgQml0bWFwSW5mbyBiaXRtYXBJ
bmZvID0gQml0bWFwSW5mbzo6Y3JlYXRlQm90dG9tVXAoSW50U2l6ZShtX2JhY2tpbmdTdG9yZVNp
emUpKTsKQEAgLTg5NCwxNiArODcxLDYgQEAgYm9vbCBXZWJWaWV3OjplbnN1cmVCYWNraW5nU3Rv
cmUoKQogICAgICAgICB2b2lkKiBwaXhlbHMgPSBOVUxMOwogICAgICAgICBtX2JhY2tpbmdTdG9y
ZUJpdG1hcCA9IFNoYXJlZEdESU9iamVjdDxIQklUTUFQPjo6Y3JlYXRlKGFkb3B0R0RJT2JqZWN0
KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYml0bWFwSW5mbywgRElCX1JHQl9DT0xPUlMsICZwaXhl
bHMsIDAsIDApKSk7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIEhSRVNVTFQgaHIgPSBt
X3JlbmRlclRhcmdldC0+Q3JlYXRlQ29tcGF0aWJsZVJlbmRlclRhcmdldCgmYml0bWFwU2l6ZSwg
JnBpeGVsU2l6ZSwgbnVsbHB0ciwgRDJEMV9DT01QQVRJQkxFX1JFTkRFUl9UQVJHRVRfT1BUSU9O
U19HRElfQ09NUEFUSUJMRSwgJm1fYmFja2luZ1N0b3JlUmVuZGVyVGFyZ2V0KTsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICAgICAgaHIgPSBtX2JhY2tpbmdT
dG9yZVJlbmRlclRhcmdldC0+R2V0Qml0bWFwKCZtX2JhY2tpbmdTdG9yZUQyREJpdG1hcCk7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgICAgIGhyID0gbV9i
YWNraW5nU3RvcmVSZW5kZXJUYXJnZXQtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEMkQxR2Rp
SW50ZXJvcFJlbmRlclRhcmdldCksICh2b2lkKiopJm1fYmFja2luZ1N0b3JlR2RpSW50ZXJvcCk7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotI2VuZGlmCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtOTc4LDE2ICs5NDUsNiBAQCB2b2lkIFdlYlZpZXc6
OnNjcm9sbEJhY2tpbmdTdG9yZShGcmFtZVZpCiAgICAgRmxvYXRSZWN0IGNsaXBSZWN0KGxvZ2lj
YWxDbGlwUmVjdCk7CiAgICAgY2xpcFJlY3Quc2NhbGUoc2NhbGVGYWN0b3IpOwogCi0jaWYgVVNF
KERJUkVDVDJEKQotICAgIFJFQ1Qgc2Nyb2xsUmVjdFdpbihzY3JvbGxWaWV3UmVjdCk7Ci0gICAg
UkVDVCBjbGlwUmVjdFdpbihlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KSk7Ci0gICAgUkVDVCB1
cGRhdGVSZWN0OwotICAgIDo6U2Nyb2xsV2luZG93RXgobV92aWV3V2luZG93LCBkeCwgZHksICZz
Y3JvbGxSZWN0V2luLCAmY2xpcFJlY3RXaW4sIG51bGxwdHIsICZ1cGRhdGVSZWN0LCAwKTsKLSAg
ICA6OkludmFsaWRhdGVSZWN0KG1fdmlld1dpbmRvdywgJnVwZGF0ZVJlY3QsIEZBTFNFKTsKLQot
ICAgIGlmIChtX3VpRGVsZWdhdGVQcml2YXRlKQotICAgICAgICBtX3VpRGVsZWdhdGVQcml2YXRl
LT53ZWJWaWV3U2Nyb2xsZWQodGhpcyk7Ci0jZWxzZQogICAgIGlmIChpc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmcoKSkgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGRvaW5nIHNvbWV0
aGluZyBzbWFydGVyIGhlcmUsIGxpa2UgbW92aW5nIHRpbGVzIGFyb3VuZCBhbmQgcGFpbnRpbmcK
ICAgICAgICAgLy8gYW55IG5ld2x5LWV4cG9zZWQgdGlsZXMuIDxodHRwOi8vd2Via2l0Lm9yZy9i
LzUyNzE0PgpAQCAtMTAzOSw3ICs5OTYsNiBAQCB2b2lkIFdlYlZpZXc6OnNjcm9sbEJhY2tpbmdT
dG9yZShGcmFtZVZpCiAKICAgICAvLyBDbGVhbiB1cC4KICAgICA6OlNlbGVjdE9iamVjdChiaXRt
YXBEQy5nZXQoKSwgb2xkQml0bWFwKTsKLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCiB9CiAKIHZv
aWQgV2ViVmlldzo6c2l6ZUNoYW5nZWQoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKQEAgLTEwNjcs
MjAgKzEwMjMsNiBAQCB2b2lkIFdlYlZpZXc6OnNpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmCiAg
ICAgaWYgKG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQpCiAgICAgICAgIG1fYWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPnJlc2l6ZVJvb3RMYXllcihuZXdTaXplKTsKICNlbmRp
ZgotCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIGlmIChtX3JlbmRlclRhcmdldCkgewotICAgICAg
ICBtX3JlbmRlclRhcmdldC0+UmVzaXplKG5ld1NpemUpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gQ3JlYXRlIGEgRGlyZWN0MkQgcmVuZGVyIHRhcmdldC4KLSAgICBhdXRvIHJl
bmRlclRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0g
ICAgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy51c2FnZSA9IEQyRDFfUkVOREVSX1RBUkdFVF9VU0FH
RV9HRElfQ09NUEFUSUJMRTsKLSAgICBhdXRvIGh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0g
RDJEMTo6SHduZFJlbmRlclRhcmdldFByb3BlcnRpZXMobV92aWV3V2luZG93LCBuZXdTaXplLCBE
MkQxX1BSRVNFTlRfT1BUSU9OU19JTU1FRElBVEVMWSk7Ci0gICAgSFJFU1VMVCBociA9IEdyYXBo
aWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVId25kUmVuZGVyVGFyZ2V0KCZyZW5k
ZXJUYXJnZXRQcm9wZXJ0aWVzLCAmaHduZFJlbmRlclRhcmdldFByb3BlcnRpZXMsICZtX3JlbmRl
clRhcmdldCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotI2VuZGlmCiB9CiAKIGJvb2wg
V2ViVmlldzo6ZHBpQ2hhbmdlZChmbG9hdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6
ZSkKQEAgLTExNDEsMTMgKzEwODMsNiBAQCB2b2lkIFdlYlZpZXc6OnVwZGF0ZUJhY2tpbmdTdG9y
ZShGcmFtZVZpCiAKICAgICBMT0NBTF9HRElfQ09VTlRFUigwLCBfX0ZVTkNUSU9OX18pOwogCi0j
aWYgVVNFKERJUkVDVDJEKQotICAgIGlmICghbV9iYWNraW5nU3RvcmVHZGlJbnRlcm9wKSB7Ci0g
ICAgICAgIEhSRVNVTFQgaHIgPSBtX2JhY2tpbmdTdG9yZVJlbmRlclRhcmdldC0+UXVlcnlJbnRl
cmZhY2UoX191dWlkb2YoSUQyRDFHZGlJbnRlcm9wUmVuZGVyVGFyZ2V0KSwgKHZvaWQqKikmbV9i
YWNraW5nU3RvcmVHZGlJbnRlcm9wKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7Ci0gICAgfQotI2VuZGlmCi0KICAgICBHRElPYmplY3Q8SERDPiBiaXRtYXBEQ09iamVj
dDsKIAogICAgIEhEQyBiaXRtYXBEQyA9IGRjOwpAQCAtMTE1OCwxMCArMTA5Myw2IEBAIHZvaWQg
V2ViVmlldzo6dXBkYXRlQmFja2luZ1N0b3JlKEZyYW1lVmkKICAgICAgICAgYml0bWFwREMgPSBi
aXRtYXBEQ09iamVjdC5nZXQoKTsKICAgICAgICAgb2xkQml0bWFwID0gOjpTZWxlY3RPYmplY3Qo
Yml0bWFwREMsIG1fYmFja2luZ1N0b3JlQml0bWFwLT5nZXQoKSk7CiAgICAgICAgIEFTU0VSVChv
bGRCaXRtYXApOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgSFJFU1VMVCBociA9IG1fYmFj
a2luZ1N0b3JlR2RpSW50ZXJvcC0+R2V0REMoRDJEMV9EQ19JTklUSUFMSVpFX01PREVfQ09QWSwg
JmJpdG1hcERDKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0jZW5k
aWYKICAgICB9CiAKICAgICBpZiAobV9iYWNraW5nU3RvcmVCaXRtYXAgJiYgKG1fYmFja2luZ1N0
b3JlRGlydHlSZWdpb24gfHwgYmFja2luZ1N0b3JlQ29tcGxldGVseURpcnR5KSkgewpAQCAtMTE4
NSwxMiArMTExNiw4IEBAIHZvaWQgV2ViVmlldzo6dXBkYXRlQmFja2luZ1N0b3JlKEZyYW1lVmkK
ICAgICAgICAgbV9iYWNraW5nU3RvcmVEaXJ0eVJlZ2lvbiA9IG51bGxwdHI7CiAgICAgfQogCi0g
ICAgaWYgKCFkYykgeworICAgIGlmICghZGMpCiAgICAgICAgIDo6U2VsZWN0T2JqZWN0KGJpdG1h
cERDLCBvbGRCaXRtYXApOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgbV9iYWNraW5nU3Rv
cmVHZGlJbnRlcm9wLT5SZWxlYXNlREMobnVsbHB0cik7Ci0jZW5kaWYKLSAgICB9CiAKICAgICBH
ZGlGbHVzaCgpOwogCkBAIC0xMjI1LDY5ICsxMTUyLDYgQEAgdm9pZCBXZWJWaWV3OjpwZXJmb3Jt
TGF5ZXJlZFdpbmRvd1VwZGF0ZQogICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9CiAKLXZv
aWQgV2ViVmlldzo6cGFpbnRXaXRoRGlyZWN0MkQoKQotewotI2lmIFVTRShESVJFQ1QyRCkKLSAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShtX21haW5GcmFtZSk7Ci0gICAgaWYgKCFjb3JlRnJh
bWUpCi0gICAgICAgIHJldHVybjsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGNvcmVGcmFt
ZS0+dmlldygpOwotICAgIGZyYW1lVmlldy0+dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJl
Y3Vyc2l2ZSgpOwotCi0gICAgaWYgKCFtX3JlbmRlclRhcmdldCkgewotICAgICAgICAvLyBDcmVh
dGUgYSBEaXJlY3QyRCByZW5kZXIgdGFyZ2V0LgotICAgICAgICBhdXRvIHJlbmRlclRhcmdldFBy
b3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIHJlbmRl
clRhcmdldFByb3BlcnRpZXMudXNhZ2UgPSBEMkQxX1JFTkRFUl9UQVJHRVRfVVNBR0VfR0RJX0NP
TVBBVElCTEU7Ci0KLSAgICAgICAgUkVDVCByZWN0OwotICAgICAgICA6OkdldENsaWVudFJlY3Qo
bV92aWV3V2luZG93LCAmcmVjdCk7Ci0KLSAgICAgICAgSW50UmVjdCBjbGllbnRSZWN0KHJlY3Qp
OwotCi0gICAgICAgIGF1dG8gcGl4ZWxTaXplID0gRDJEMTo6U2l6ZVUoY2xpZW50UmVjdC53aWR0
aCgpLCBjbGllbnRSZWN0LmhlaWdodCgpKTsKLQotICAgICAgICBhdXRvIGh3bmRSZW5kZXJUYXJn
ZXRQcm9wZXJ0aWVzID0gRDJEMTo6SHduZFJlbmRlclRhcmdldFByb3BlcnRpZXMobV92aWV3V2lu
ZG93LCBwaXhlbFNpemUsIEQyRDFfUFJFU0VOVF9PUFRJT05TX0lNTUVESUFURUxZKTsKLSAgICAg
ICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVI
d25kUmVuZGVyVGFyZ2V0KCZyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLCAmaHduZFJlbmRlclRhcmdl
dFByb3BlcnRpZXMsICZtX3JlbmRlclRhcmdldCk7Ci0gICAgICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSRUNUIGNsaWVudFJlY3QgPSB7
fTsKLSAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCBwbGF0Zm9ybUNvbnRleHQobV9yZW5kZXJU
YXJnZXQuZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dFdpbiBnYygmcGxhdGZvcm1Db250ZXh0
LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkp
OwotCi0gICAgewotICAgICAgICBtX3JlbmRlclRhcmdldC0+U2V0VGFncyhXRUJLSVRfRFJBV0lO
RywgX19MSU5FX18pOwotICAgICAgICBtX3JlbmRlclRhcmdldC0+Q2xlYXIoKTsKLQotICAgICAg
ICAvLyBEaXJlY3QyRCBob25vcnMgdGhlIHNjYWxlIGZhY3RvciBuYXRpdmVseS4KLSAgICAgICAg
ZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmOwotICAgICAgICBmbG9hdCBpbnZlcnNlU2NhbGVGYWN0
b3IgPSAxLjBmIC8gc2NhbGVGYWN0b3I7Ci0KLSAgICAgICAgR2V0Q2xpZW50UmVjdChtX3ZpZXdX
aW5kb3csICZjbGllbnRSZWN0KTsKLQotICAgICAgICBJbnRSZWN0IGRpcnR5UmVjdFBpeGVscygw
LCAwLCBjbGllbnRSZWN0LnJpZ2h0LCBjbGllbnRSZWN0LmJvdHRvbSk7Ci0gICAgICAgIEZsb2F0
UmVjdCBsb2dpY2FsRGlydHlSZWN0RmxvYXQgPSBkaXJ0eVJlY3RQaXhlbHM7Ci0gICAgICAgIGxv
Z2ljYWxEaXJ0eVJlY3RGbG9hdC5zY2FsZShpbnZlcnNlU2NhbGVGYWN0b3IpOwotICAgICAgICBJ
bnRSZWN0IGxvZ2ljYWxEaXJ0eVJlY3QoZW5jbG9zaW5nSW50UmVjdChsb2dpY2FsRGlydHlSZWN0
RmxvYXQpKTsKLQotICAgICAgICBpZiAoZnJhbWVWaWV3ICYmIGZyYW1lVmlldy0+ZnJhbWUoKS5j
b250ZW50UmVuZGVyZXIoKSkgewotICAgICAgICAgICAgZ2Muc2F2ZSgpOwotICAgICAgICAgICAg
Z2Muc2NhbGUoRmxvYXRTaXplKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3RvcikpOwotICAgICAgICAg
ICAgZ2MuY2xpcChsb2dpY2FsRGlydHlSZWN0KTsKLSAgICAgICAgICAgIGZyYW1lVmlldy0+cGFp
bnQoZ2MsIGxvZ2ljYWxEaXJ0eVJlY3QpOwotICAgICAgICAgICAgaWYgKG1fc2hvdWxkSW52ZXJ0
Q29sb3JzKQotICAgICAgICAgICAgICAgIGdjLmZpbGxSZWN0KGxvZ2ljYWxEaXJ0eVJlY3QsIENv
bG9yOjp3aGl0ZSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRpZmZlcmVuY2UpOwotICAgICAgICAgICAg
Z2MucmVzdG9yZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgOjpWYWxpZGF0ZVJlY3QobV92
aWV3V2luZG93LCAmY2xpZW50UmVjdCk7Ci0jZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotI2VuZGlmCi19Ci0KIHZvaWQgV2ViVmlldzo6cGFpbnQoSERDIGRjLCBMUEFSQU0gb3B0aW9u
cykKIHsKICAgICBMT0NBTF9HRElfQ09VTlRFUigwLCBfX0ZVTkNUSU9OX18pOwpAQCAtMTM0OSwx
OCArMTIxMyw4IEBAIHZvaWQgV2ViVmlldzo6cGFpbnQoSERDIGRjLCBMUEFSQU0gb3B0aW8KIAog
ICAgIDo6U2VsZWN0T2JqZWN0KGJpdG1hcERDLmdldCgpLCBvbGRCaXRtYXApOwogCi0gICAgaWYg
KCFkYykgeworICAgIGlmICghZGMpCiAgICAgICAgIEVuZFBhaW50KG1fdmlld1dpbmRvdywgJnBz
KTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIEhSRVNVTFQgaHIgPSBtX2JhY2tpbmdTdG9y
ZVJlbmRlclRhcmdldC0+RW5kRHJhdygpOwotICAgICAgICAvLyBGSVhNRTogUmVjb2duaXplIGFu
ZCByZWNvdmVyIGZyb20gZXJyb3Igc3RhdGU6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NF
RURFRChocikpOwotI2VuZGlmCi0gICAgfQotCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIG1fYmFj
a2luZ1N0b3JlR2RpSW50ZXJvcC0+UmVsZWFzZURDKG51bGxwdHIpOwotI2VuZGlmCiAKICAgICBp
ZiAoYWN0aXZlKCkpCiAgICAgICAgIGNhbmNlbERlbGV0ZUJhY2tpbmdTdG9yZVNvb24oKTsKQEAg
LTE0MDMsMTAgKzEyNTcsNiBAQCB2b2lkIFdlYlZpZXc6OnBhaW50SW50b0JhY2tpbmdTdG9yZShG
cmFtCiAgICAgbG9naWNhbERpcnR5UmVjdEZsb2F0LnNjYWxlKGludmVyc2VTY2FsZUZhY3Rvcik7
ICAgIAogICAgIEludFJlY3QgbG9naWNhbERpcnR5UmVjdChlbmNsb3NpbmdJbnRSZWN0KGxvZ2lj
YWxEaXJ0eVJlY3RGbG9hdCkpOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIG1fYmFja2luZ1N0
b3JlUmVuZGVyVGFyZ2V0ID0gbnVsbHB0cjsKLSNlbmRpZgotCiAgICAgR3JhcGhpY3NDb250ZXh0
V2luIGdjKGJpdG1hcERDLCBtX3RyYW5zcGFyZW50KTsKICAgICBnYy5zYXZlKCk7CiAgICAgaWYg
KG1fdHJhbnNwYXJlbnQpCkBAIC0yNTEwLDExICsyMzYwLDcgQEAgTFJFU1VMVCBDQUxMQkFDSyBX
ZWJWaWV3OjpXZWJWaWV3V25kUHJvYwogCiAgICAgc3dpdGNoIChtZXNzYWdlKSB7CiAgICAgICAg
IGNhc2UgV01fUEFJTlQ6IHsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgICAgICB3ZWJWaWV3
LT5wYWludFdpdGhEaXJlY3QyRCgpOwotI2Vsc2UKICAgICAgICAgICAgIHdlYlZpZXctPnBhaW50
KDAsIDApOwotI2VuZGlmCiAgICAgICAgICAgICBpZiAod2ViVmlldy0+dXNlc0xheWVyZWRXaW5k
b3coKSkKICAgICAgICAgICAgICAgICB3ZWJWaWV3LT5wZXJmb3JtTGF5ZXJlZFdpbmRvd1VwZGF0
ZSgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01NDQ0LDEwICs1MjkwLDYgQEAgSFJFU1VMVCBX
ZWJWaWV3Ojpub3RpZnlQcmVmZXJlbmNlc0NoYW5nZQogICAgIGhyID0gcHJlZnNQcml2YXRlLT5h
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgmZW5hYmxlZCk7CiAgICAgaWYgKEZBSUxFRCho
cikpCiAgICAgICAgIHJldHVybiBocjsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgLy8gRGlzYWJs
ZSBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBmb3Igbm93LgotICAgIGVuYWJsZWQgPSBmYWxzZTsK
LSNlbmRpZgogICAgIHNldHRpbmdzLnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKGVu
YWJsZWQpOwogCiAgICAgaHIgPSBwcmVmc1ByaXZhdGUtPnNob3dEZWJ1Z0JvcmRlcnMoJmVuYWJs
ZWQpOwpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuaAkocmV2aXNpb24gMjg3ODEyKQor
KysgU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC03
NywxMyArNzcsNiBAQCBXZWJWaWV3KiBraXQoV2ViQ29yZTo6UGFnZSopOwogV2ViQ29yZTo6UGFn
ZSogY29yZShJV2ViVmlldyopOwogCiBpbnRlcmZhY2UgSURyb3BUYXJnZXRIZWxwZXI7Ci0jaWYg
VVNFKERJUkVDVDJEKQotaW50ZXJmYWNlIElEMkQxQml0bWFwOwotaW50ZXJmYWNlIElEMkQxQml0
bWFwUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNlIElEMkQxR2RpSW50ZXJvcFJlbmRlclRhcmdldDsK
LWludGVyZmFjZSBJRDJEMUh3bmRSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFSZW5kZXJU
YXJnZXQ7Ci0jZW5kaWYKIAogY2xhc3MgV2ViVmlldyBmaW5hbAogICAgIDogcHVibGljIElXZWJW
aWV3CkBAIC00MjcsNyArNDIwLDYgQEAgcHVibGljOgogICAgIGJvb2wga2V5RG93bihXUEFSQU0s
IExQQVJBTSwgYm9vbCBzeXN0ZW1LZXlEb3duID0gZmFsc2UpOwogICAgIGJvb2wga2V5VXAoV1BB
UkFNLCBMUEFSQU0sIGJvb2wgc3lzdGVtS2V5RG93biA9IGZhbHNlKTsKICAgICBib29sIGtleVBy
ZXNzKFdQQVJBTSwgTFBBUkFNLCBib29sIHN5c3RlbUtleURvd24gPSBmYWxzZSk7Ci0gICAgdm9p
ZCBwYWludFdpdGhEaXJlY3QyRCgpOwogICAgIHZvaWQgcGFpbnQoSERDLCBMUEFSQU0pOwogICAg
IHZvaWQgcGFpbnRJbnRvV2luZG93KEhEQyBiaXRtYXBEQywgSERDIHdpbmRvd0RDLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwogICAgIGJvb2wgZW5zdXJlQmFja2luZ1N0b3Jl
KCk7CkBAIC02MjYsMTIgKzYxOCw2IEBAIHByb3RlY3RlZDoKIAogICAgIEhNRU5VIG1fY3VycmVu
dENvbnRleHRNZW51IHsgbnVsbHB0ciB9OwogICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRHRElP
YmplY3Q8SEJJVE1BUD4+IG1fYmFja2luZ1N0b3JlQml0bWFwOwotI2lmIFVTRShESVJFQ1QyRCkK
LSAgICBDT01QdHI8SUQyRDFId25kUmVuZGVyVGFyZ2V0PiBtX3JlbmRlclRhcmdldDsKLSAgICBD
T01QdHI8SUQyRDFCaXRtYXA+IG1fYmFja2luZ1N0b3JlRDJEQml0bWFwOwotICAgIENPTVB0cjxJ
RDJEMUJpdG1hcFJlbmRlclRhcmdldD4gbV9iYWNraW5nU3RvcmVSZW5kZXJUYXJnZXQ7Ci0gICAg
Q09NUHRyPElEMkQxR2RpSW50ZXJvcFJlbmRlclRhcmdldD4gbV9iYWNraW5nU3RvcmVHZGlJbnRl
cm9wOwotI2VuZGlmCiAgICAgU0laRSBtX2JhY2tpbmdTdG9yZVNpemU7CiAgICAgUmVmUHRyPFdl
YkNvcmU6OlNoYXJlZEdESU9iamVjdDxIUkdOPj4gbV9iYWNraW5nU3RvcmVEaXJ0eVJlZ2lvbjsK
IApJbmRleDogU291cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2UKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2UJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9j
bWFrZS9PcHRpb25zRlRXLmNtYWtlCShub25leGlzdGVudCkKQEAgLTEsMjM2ICswLDAgQEAKLWlm
IChDTUFLRV9WRVJTSU9OIFZFUlNJT05fTEVTUyAzLjE0KQotICAgIG1lc3NhZ2UoRkFUQUxfRVJS
T1IgIkNNYWtlIDMuMTQgb3IgZ3JlYXRlciBpcyByZXF1aXJlZCB0byBjb21waWxlIFdlYktpdEZU
VyIpCi1lbmRpZiAoKQotCi1pZiAoTVNWQ19WRVJTSU9OIFZFUlNJT05fTEVTUyAxOTIwKQotICAg
IG1lc3NhZ2UoRkFUQUxfRVJST1IgIlZpc3VhbCBTdHVkaW8gMjAxOSBpcyByZXF1aXJlZCB0byBj
b21waWxlIFdlYktpdEZUVyIpCi1lbmRpZiAoKQotCi1pZiAoJHtXVEZfQ1BVX1g4Nn0pCi0gICAg
bWVzc2FnZShGQVRBTF9FUlJPUiAiV2ViS2l0RlRXIGRvZXMgbm90IHN1cHBvcnQgMzItYml0IGJ1
aWxkcyIpCi1lbmRpZiAoKQotCi1zZXQoUE9SVCBGVFcpCi0KLSMgQ29tcGlsYXRpb24gb3B0aW9u
cwotaW5jbHVkZShPcHRpb25zTVNWQykKLQotYWRkX2RlZmluaXRpb25zKC1EV1RGX1BMQVRGT1JN
X0ZUVz0xKQotIyBQcmV2ZW50IG1pbigpIGFuZCBtYXgoKSBtYWNyb3MgZnJvbSBiZWluZyBleHBv
c2VkCi1hZGRfZGVmaW5pdGlvbnMoLUROT01JTk1BWCkKLSMgVXNlIHVuaWNvZGUKLWFkZF9kZWZp
bml0aW9ucygtRFVOSUNPREUgLURfVU5JQ09ERSkKLSMgSWYgPHdpbnNvY2syLmg+IGlzIG5vdCBp
bmNsdWRlZCBiZWZvcmUgPHdpbmRvd3MuaD4gcmVkZWZpbml0aW9uIGVycm9ycyBvY2N1cgotIyB1
bmxlc3MgX1dJTlNPQ0tBUElfIGlzIGRlZmluZWQgYmVmb3JlIDx3aW5kb3dzLmg+IGlzIGluY2x1
ZGVkCi1hZGRfZGVmaW5pdGlvbnMoLURfV0lOU09DS0FQSV89KQotCi0jIFNldHVwIGxpYnJhcnkg
cGF0aHMKLWlmIChERUZJTkVEIEVOVntBcHBsZUFwcGxpY2F0aW9uU3VwcG9ydFNES30pCi0gICAg
ZmlsZShUT19DTUFLRV9QQVRIICIkRU5We0FwcGxlQXBwbGljYXRpb25TdXBwb3J0U0RLfS9BcHBs
ZUludGVybmFsIiBXRUJLSVRfTElCUkFSSUVTX0RJUikKLSAgICBzZXQoV0VCS0lUX0xJQlJBUklF
U19JTkNMVURFX0RJUiAiJHtXRUJLSVRfTElCUkFSSUVTX0RJUn0vaW5jbHVkZSIpCi0gICAgaW5j
bHVkZV9kaXJlY3Rvcmllcygke1dFQktJVF9MSUJSQVJJRVNfSU5DTFVERV9ESVJ9KQotICAgIHNl
dChBUFBMRV9CVUlMRCAxKQotZW5kaWYgKCkKLQotaWYgKE5PVCBXRUJLSVRfTElCUkFSSUVTX0RJ
UikKLSAgICBpZiAoREVGSU5FRCBFTlZ7V0VCS0lUX0xJQlJBUklFU30pCi0gICAgICAgIGZpbGUo
VE9fQ01BS0VfUEFUSCAiJEVOVntXRUJLSVRfTElCUkFSSUVTfSIgV0VCS0lUX0xJQlJBUklFU19E
SVIpCi0gICAgZWxzZSAoKQotICAgICAgICBmaWxlKFRPX0NNQUtFX1BBVEggIiR7Q01BS0VfU09V
UkNFX0RJUn0vV2ViS2l0TGlicmFyaWVzL3dpbiIgV0VCS0lUX0xJQlJBUklFU19ESVIpCi0gICAg
ZW5kaWYgKCkKLWVuZGlmICgpCi0KLXNldChDTUFLRV9QUkVGSVhfUEFUSCAke1dFQktJVF9MSUJS
QVJJRVNfRElSfSkKLQotc2V0X3Byb3BlcnR5KEdMT0JBTCBQUk9QRVJUWSBGSU5EX0xJQlJBUllf
VVNFX0xJQjMyX1BBVEhTIE9GRikKLXNldF9wcm9wZXJ0eShHTE9CQUwgUFJPUEVSVFkgRklORF9M
SUJSQVJZX1VTRV9MSUI2NF9QQVRIUyBPTikKLQotc2V0KFdFQktJVF9MSUJSQVJJRVNfTElOS19E
SVIgIiR7V0VCS0lUX0xJQlJBUklFU19ESVJ9L2xpYjY0IikKLSMgRklYTUU6IFJlbW92ZSAke1dF
QktJVF9MSUJSQVJJRVNfTElOS19ESVJ9IHdoZW4gZmluZF9saWJyYXJ5IGlzIHVzZWQgZm9yIGV2
ZXJ5dGhpbmcKLWxpbmtfZGlyZWN0b3JpZXMoIiR7Q01BS0VfQklOQVJZX0RJUn0vbGliNjQiICIk
e1dFQktJVF9MSUJSQVJJRVNfTElOS19ESVJ9IikKLXNldChDTUFLRV9BUkNISVZFX09VVFBVVF9E
SVJFQ1RPUlkgJHtDTUFLRV9CSU5BUllfRElSfS9saWI2NCkKLXNldChDTUFLRV9MSUJSQVJZX09V
VFBVVF9ESVJFQ1RPUlkgJHtDTUFLRV9CSU5BUllfRElSfS9saWI2NCkKLXNldChDTUFLRV9SVU5U
SU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtDTUFLRV9CSU5BUllfRElSfS9iaW42NCkKLQotc2V0KENN
QUtFX0FSQ0hJVkVfT1VUUFVUX0RJUkVDVE9SWV9ERUJVRyAiJHtDTUFLRV9BUkNISVZFX09VVFBV
VF9ESVJFQ1RPUll9IikKLXNldChDTUFLRV9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUllfUkVMRUFT
RSAiJHtDTUFLRV9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUll9IikKLXNldChDTUFLRV9MSUJSQVJZ
X09VVFBVVF9ESVJFQ1RPUllfREVCVUcgIiR7Q01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZ
fSIpCi1zZXQoQ01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZX1JFTEVBU0UgIiR7Q01BS0Vf
TElCUkFSWV9PVVRQVVRfRElSRUNUT1JZfSIpCi1zZXQoQ01BS0VfUlVOVElNRV9PVVRQVVRfRElS
RUNUT1JZX0RFQlVHICIke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0iKQotc2V0KENN
QUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWV9SRUxFQVNFICIke0NNQUtFX1JVTlRJTUVfT1VU
UFVUX0RJUkVDVE9SWX0iKQotCi1XRUJLSVRfT1BUSU9OX0JFR0lOKCkKLQotIyBGZWF0dXJlcyBp
biB0aGUgc2FtZSBzdGF0ZSBvbiBXaW5DYWlybyBhbmQgQXBwbGVXaW4KLQotV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFXzNEX1RSQU5TRk9STVMgUFJJVkFURSBPTikKLVdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9BVFRBQ0hNRU5UX0VMRU1FTlQg
UFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DQUNI
RV9QQVJUSVRJT05JTkcgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORyBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTUzNfVEVYVCBQUklWQVRFIE9GRikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUsg
UFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1Nf
Q09OSUNfR1JBRElFTlRTIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfQ1NTX0RFVklDRV9BREFQVEFUSU9OIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OIFBSSVZB
VEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19QQUlO
VElOR19BUEkgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9DU1NfU0VMRUNUT1JTX0xFVkVMNCBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NVUlNPUl9WSVNJQklMSVRZIFBSSVZBVEUgT04pCi1XRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRFJBR19TVVBQT1JUIFBSSVZBVEUg
T04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRklMVEVSU19MRVZF
TF8yIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
RlRMX0pJVCBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9GVFBESVIgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9GVUxMU0NSRUVOX0FQSSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9HRU9MT0NBVElPTiBQUklWQVRFIE9OKQotV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UUyBQUklWQVRFIE9G
RikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9NQVRITUwgUFJJVkFU
RSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9NRURJQV9DT05U
Uk9MU19TQ1JJUFQgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9NSFRNTCBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9NSU5JQlJPV1NFUiBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX01PVVNFX0NVUlNPUl9TQ0FMRSBQUklWQVRFIE9OKQotV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkgUFJJ
VkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfT1JJRU5U
QVRJT05fRVZFTlRTIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX09WRVJGTE9XX1NDUk9MTElOR19UT1VDSCBQUklWQVRFIE9GRikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9QVUJMSUNfU1VGRklYX0xJU1QgUFJJVkFU
RSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TQU1QTElOR19Q
Uk9GSUxFUiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9TUEVMTENIRUNLIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX1RPVUNIX0VWRU5UUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVG
QVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9UT1VDSF9TTElERVIgUFJJVkFURSBPRkYpCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVU5JRklFRF9CVUlMRFMgUFJJVkFURSBP
TikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9WSURFTyBQUklWQVRF
IE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQkFTU0VNQkxZ
IFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dF
QkdMIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX1hTTFQgUFJJVkFURSBPTikKLQotIyBNZWRpYSB0aGluZ3Mg
dGhhdCBzaG91bGQgYmUgb24KLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9BVkZfQ0FQVElPTlMgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfV0VCX0FVRElPIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX0xFR0FDWV9FTkNSWVBURURfTUVESUEgUFJJVkFURSBPRkYpCi1X
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTUVESUFfQ0FQVFVSRSBQUklW
QVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9NRURJQV9T
T1VSQ0UgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfTUVESUFfU1RBVElTVElDUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9NRURJQV9TVFJFQU0gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVklERU9fUFJFU0VOVEFUSU9OX01PREUgUFJJVkFU
RSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVklERU9fVVNF
U19FTEVNRU5UX0ZVTExTQ1JFRU4gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfV0VCX1JUQyBQUklWQVRFIE9GRikKLQotIyBQYXltZW50IHRoaW5n
cwotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FQUExFX1BBWSBQUklW
QVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9QQVlNRU5U
X1JFUVVFU1QgUFJJVkFURSBPRkYpCi0KLSMgV2ViR0wKLVdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9XRUJHTDIgUFJJVkFURSBPRkYpCi0KLSMgT2ZmIGZvciBub3csIGJ1
dCBzaG91bGQgYmUgb24KLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9B
UElfVEVTVFMgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfQVBQTElDQVRJT05fTUFOSUZFU1QgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQVNZTkNfU0NST0xMSU5HIFBSSVZBVEUgT0ZGKQotV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NPTlRFTlRfRVhURU5TSU9OUyBQ
UklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DT05U
RU5UX0ZJTFRFUklORyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9DU1NfVFlQRURfT00gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfREFSS19NT0RFX0NTUyBQUklWQVRFIE9GRikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9EQVRBQ1VFX1ZBTFVFIFBSSVZBVEUgT0ZG
KQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0RBVEFMSVNUX0VMRU1F
TlQgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
REVWSUNFX09SSUVOVEFUSU9OIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX0RPV05MT0FEX0FUVFJJQlVURSBQUklWQVRFIE9GRikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9FTkNSWVBURURfTUVESUEgUFJJVkFURSBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfSU5URUxMSUdFTlRf
VFJBQ0tJTkdfUFJFVkVOVElPTiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9MQVlFUl9CQVNFRF9TVkdfRU5HSU5FIFBSSVZBVEUgT0ZGKQotV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0xBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfTEVUVEVSUFJFU1MgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCBQUklWQVRFIE9GRikKLVdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9MRVRURVJQUkVTUyBQUklWQVRFIE9G
RikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9NRU1PUllfU0FNUExF
UiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9O
RVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTiBQUklWQVRFIE9GRikKLVdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NUQUxFX1dI
SUxFX1JFVkFMSURBVEUgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfTk9USUZJQ0FUSU9OUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVG
QVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9PVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0ggUFJJVkFURSBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUERGS0lUX1BMVUdJ
TiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9Q
T0lOVEVSX0xPQ0sgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfUkVTT1VSQ0VfVVNBR0UgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfUlVCQkVSX0JBTkRJTkcgUFJJVkFURSBPRkYpCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0FOREJPWF9FWFRFTlNJT05TIFBSSVZB
VEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NFUlZFUl9Q
UkVDT05ORUNUIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX1NFUlZJQ0VfQ09OVFJPTFMgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfU0VSVklDRV9XT1JLRVIgUFJJVkFURSBPRkYpCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0hBUkVBQkxFX1JFU09VUkNFIFBSSVZB
VEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NNT09USF9T
Q1JPTExJTkcgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfU1BFRUNIX1NZTlRIRVNJUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9URUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTiBQUklWQVRFIE9G
RikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9URVhUX0FVVE9TSVpJ
TkcgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
VVNFUl9NRVNTQUdFX0hBTkRMRVJTIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX1ZBUklBVElPTl9GT05UUyBQUklWQVRFIE9GRikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJEUklWRVIgUFJJVkFURSBPRkYpCi1X
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCX0FVVEhOIFBSSVZBVEUg
T0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQl9DUllQVE8g
UFJJVkFURSBPRkYpCi0KLSNXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShVU0VfVkVS
U0lPTl9TVEFNUEVSIFBSSVZBVEUgT04pCi0KLSMgRXhwZXJpbWVudGFsIGZlYXR1cmVzCi0jV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFTU9URV9JTlNQRUNUT1IgUFJJ
VkFURSAke0VOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVN9KQotV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFTU9URV9JTlNQRUNUT1IgUFJJVkFURSBPRkYpCi0jV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFU09VUkNFX1VTQUdFIFBSSVZB
VEUgJHtFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTfSkKLVdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9SRVNPVVJDRV9VU0FHRSBQUklWQVRFIE9GRikKLQotIyBGZWF0
dXJlcyB0byBpbnZlc3RpZ2F0ZQotIwotIyBGZWF0dXJlcyB0aGF0IGFyZSB0ZW1wb3JhcmlseSB0
dXJuZWQgb2ZmIGJlY2F1c2UgYW4gaW1wbGVtZW50YXRpb24gaXMgbm90Ci0jIHByZXNlbnQgYXQg
dGhpcyB0aW1lCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRlRMX0pJ
VCBQUklWQVRFIE9GRikKLQotIyBObyBzdXBwb3J0IHBsYW5uZWQKLQotIyBGSVhNRTogUG9ydCBi
bWFsbG9jIHRvIFdpbmRvd3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDMzMTAKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKFVTRV9TWVNURU1fTUFM
TE9DIFBSSVZBVEUgT04pCi0KLVdFQktJVF9PUFRJT05fRU5EKCkKLQotaWYgKEFQUExFX0JVSUxE
KQotICAgIHNldChDT1JFRk9VTkRBVElPTl9MSUJSQVJZIENvcmVGb3VuZGF0aW9uJHtERUJVR19T
VUZGSVh9KQotICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DRiBPTikKLSAgICBmaW5k
X3BhY2thZ2UoTGliWG1sMiAyLjkuMSBSRVFVSVJFRCkKLSAgICBpZiAoRU5BQkxFX1hTTFQpCi0g
ICAgICAgIGZpbmRfcGFja2FnZShMaWJYc2x0IDEuMS4yOCBSRVFVSVJFRCkKLSAgICBlbmRpZiAo
KQotZWxzZSAoKQotICAgIGZpbmRfcGFja2FnZShMaWJYbWwyIDIuOS43IFJFUVVJUkVEKQotICAg
IGlmIChFTkFCTEVfWFNMVCkKLSAgICAgICAgZmluZF9wYWNrYWdlKExpYlhzbHQgMS4xLjMyIFJF
UVVJUkVEKQotICAgIGVuZGlmICgpCi1lbmRpZiAoKQotCi1maW5kX3BhY2thZ2UoQ1VSTCA3LjYw
LjAgUkVRVUlSRUQpCi1maW5kX3BhY2thZ2UoSUNVIDYxLjIgUkVRVUlSRUQgQ09NUE9ORU5UUyBk
YXRhIGkxOG4gdWMpCi1maW5kX3BhY2thZ2UoSlBFRyAxLjUuMiBSRVFVSVJFRCkKLWZpbmRfcGFj
a2FnZShPcGVuU1NMIDIuMC4wIFJFUVVJUkVEKQotZmluZF9wYWNrYWdlKFBORyAxLjYuMzQgUkVR
VUlSRUQpCi1maW5kX3BhY2thZ2UoU1FMaXRlMyAzLjIzLjEgUkVRVUlSRUQpCi1maW5kX3BhY2th
Z2UoWkxJQiAxLjIuMTEgUkVRVUlSRUQpCi1maW5kX3BhY2thZ2UoTGliUFNMIDAuMjAuMiBSRVFV
SVJFRCkKLQotIyBGSVhNRTogV2Ugc2hvdWxkIGFkZCB0aGUgZm9sbG93aW5nLCB0b28uCi0jIGZp
bmRfcGFja2FnZShXZWJQIFJFUVVJUkVEIENPTVBPTkVOVFMgZGVtdXgpCi0jIGlmIChXZWJQX0ZP
VU5EKQotIyAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX1dFQlAgT04pCi0jIGVuZGlm
ICgpCi0KLXNldChVU0VfQU5HTEVfRUdMIE9OKQotCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChV
U0VfQ1VSTCBPTikKLVNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9ESVJFQ1QyRCBPTikKLVNF
VF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9FR0wgT04pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlM
RChVU0VfT1BFTkdMX0VTIE9OKQotU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoSEFWRV9PUEVOR0xf
RVNfMyBPTikKLVNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9PUEVOU1NMIE9OKQotU0VUX0FO
RF9FWFBPU0VfVE9fQlVJTEQoVVNFX1RFWFRVUkVfTUFQUEVSIE9OKQotU0VUX0FORF9FWFBPU0Vf
VE9fQlVJTEQoVVNFX1RFWFRVUkVfTUFQUEVSX0dMIE9OKQotI1NFVF9BTkRfRVhQT1NFX1RPX0JV
SUxEKFVTRV9JTlNQRUNUT1JfU09DS0VUX1NFUlZFUiAke0VOQUJMRV9SRU1PVEVfSU5TUEVDVE9S
fSkKLVNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9JTlNQRUNUT1JfU09DS0VUX1NFUlZFUiBP
RkYpCi0KLXNldChXVEZfTElCUkFSWV9UWVBFIFNIQVJFRCkKLXNldChKYXZhU2NyaXB0Q29yZV9M
SUJSQVJZX1RZUEUgU0hBUkVEKQotCi1zZXQoRU5BQkxFX0FQSV9URVNUUyBPRkYpCi1zZXQoRU5B
QkxFX1dFQkNPUkUgT04pCi1zZXQoRU5BQkxFX1dFQktJVCBPTikKLXNldChFTkFCTEVfV0VCS0lU
X0xFR0FDWSBPTikKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDIyLTAxLTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFw
cGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgRGlyZWN0MkQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDk5OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
UGl4ZWxEdW1wU3VwcG9ydC5jcHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvUGxhdGZvcm1X
aW4uY21ha2U6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL1BpeGVsRHVtcFN1cHBvcnRE
aXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL1BpeGVs
RHVtcFN1cHBvcnREaXJlY3QyRC5oOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L3dpbi9QaXhlbER1bXBTdXBwb3J0V2luLmNwcDoKKyAgICAgICAgKGNyZWF0ZUJpdG1hcENvbnRl
eHRGcm9tV2ViVmlldyk6CisgICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQuCisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBh
Z2UuY3BwOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBET01Bc1dlYkFy
Y2hpdmUpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1GVFcuY21ha2U6IFJl
bW92ZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaDoKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL3dpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvd2luL1Rlc3RJbnZvY2F0aW9uRGlyZWN0MkQuY3BwOiBS
ZW1vdmVkLgorCiAyMDIyLTAxLTA4ICBUeWxlciBXaWxjb2NrICA8dHlsZXJfd0BhcHBsZS5jb20+
CiAKICAgICAgICAgQVg6IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNldEZvY3VzZWQodHJ1ZSkgc2hv
dWxkIG1ha2UgdGhlIHdlYnBhZ2UgZm9jdXNlZCwgYW5kIG1ha2Ugd2ViIGNvbnRlbnQgdGhlIGZp
cnN0IHJlc3BvbmRlcgpJbmRleDogVG9vbHMvUGxhdGZvcm1GVFcuY21ha2UKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvUGxhdGZvcm1GVFcuY21ha2UJKHJldmlzaW9uIDI4NzgxMikKKysrIFRvb2xzL1Bs
YXRmb3JtRlRXLmNtYWtlCShub25leGlzdGVudCkKQEAgLTEsMTEgKzAsMCBAQAotI2FkZF9zdWJk
aXJlY3RvcnkoSW1hZ2VEaWZmKQotCi1pZiAoRU5BQkxFX1dFQktJVF9MRUdBQ1kpCi0gICAgI2Fk
ZF9zdWJkaXJlY3RvcnkoRHVtcFJlbmRlclRyZWUpCi0gICAgYWRkX3N1YmRpcmVjdG9yeShNaW5p
QnJvd3Nlci93aW4pCi1lbmRpZiAoKQotCi1pZiAoRU5BQkxFX1dFQktJVCkKLSAgICBhZGRfc3Vi
ZGlyZWN0b3J5KFRlc3RSdW5uZXJTaGFyZWQpCi0gICAgYWRkX3N1YmRpcmVjdG9yeShXZWJLaXRU
ZXN0UnVubmVyKQotZW5kaWYgKCkKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVt
cFN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVt
cFN1cHBvcnQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9Q
aXhlbER1bXBTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsNiBAQAogI2lu
Y2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnRDRy5oIgogI2VsaWYgVVNFKENBSVJPKQogI2luY2x1ZGUg
IlBpeGVsRHVtcFN1cHBvcnRDYWlyby5oIgotI2VsaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUg
IlBpeGVsRHVtcFN1cHBvcnREaXJlY3QyRC5oIgogI2VuZGlmCiAKIHZvaWQgZHVtcFdlYlZpZXdB
c1BpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVk
SGFzaCkKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1BsYXRmb3JtV2luLmNtYWtlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1BsYXRmb3JtV2luLmNtYWtlCShyZXZpc2lv
biAyODc4MTIpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9QbGF0Zm9ybVdpbi5jbWFrZQkod29y
a2luZyBjb3B5KQpAQCAtNTIsMjQgKzUyLDE1IEBAIGVsc2UgKCkKICAgICAgICAgQ0ZOZXR3b3Jr
CiAgICAgICAgIENvcmVUZXh0CiAgICAgKQotICAgIGlmICgke1VTRV9ESVJFQ1QyRH0pCi0gICAg
ICAgIGxpc3QoQVBQRU5EIER1bXBSZW5kZXJUcmVlX1NPVVJDRVMKLSAgICAgICAgICAgIHdpbi9Q
aXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuY3BwCi0gICAgICAgICkKLSAgICAgICAgbGlzdChBUFBF
TkQgRHVtcFJlbmRlclRyZWVfTElCUkFSSUVTCi0gICAgICAgICAgICBEMmQxCi0gICAgICAgICkK
LSAgICBlbHNlICgpCi0gICAgICAgIGxpc3QoQVBQRU5EIER1bXBSZW5kZXJUcmVlX1BSSVZBVEVf
SU5DTFVERV9ESVJFQ1RPUklFUwotICAgICAgICAgICAgJHtEdW1wUmVuZGVyVHJlZV9ESVJ9L2Nn
Ci0gICAgICAgICkKLSAgICAgICAgbGlzdChBUFBFTkQgRHVtcFJlbmRlclRyZWVfU09VUkNFUwot
ICAgICAgICAgICAgY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAotICAgICAgICApCi0gICAgICAg
IGxpc3QoQVBQRU5EIER1bXBSZW5kZXJUcmVlX0xJQlJBUklFUwotICAgICAgICAgICAgQ29yZUdy
YXBoaWNzCi0gICAgICAgICkKLSAgICBlbmRpZiAoKQorICAgIGxpc3QoQVBQRU5EIER1bXBSZW5k
ZXJUcmVlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICAgICAke0R1bXBSZW5kZXJU
cmVlX0RJUn0vY2cKKyAgICApCisgICAgbGlzdChBUFBFTkQgRHVtcFJlbmRlclRyZWVfU09VUkNF
UworICAgICAgICBjZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3BwCisgICAgKQorICAgIGxpc3QoQVBQ
RU5EIER1bXBSZW5kZXJUcmVlX0xJQlJBUklFUworICAgICAgICBDb3JlR3JhcGhpY3MKKyAgICAp
CiBlbmRpZiAoKQogCiBXRUJLSVRfQUREX1BSRUNPTVBJTEVEX0hFQURFUigiRHVtcFJlbmRlclRy
ZWVQcmVmaXguaCIgIndpbi9EdW1wUmVuZGVyVHJlZVByZWZpeC5jcHAiIER1bXBSZW5kZXJUcmVl
X1NPVVJDRVMpCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9y
dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4
ZWxEdW1wU3VwcG9ydERpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL1BpeGVsRHVtcFN1cHBvcnREaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50
KQpAQCAtMSw4MSArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBt
ZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0q
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0q
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuaCIKLQotI2luY2x1ZGUg
IkR1bXBSZW5kZXJUcmVlLmgiCi0jaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydC5oIgotI2luY2x1
ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGQyZDEuaD4KLSNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgotCi0K
LXN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlUE5HID0gQ0ZTVFIoInB1YmxpYy5wbmci
KTsKLQotSUQyRDFGYWN0b3J5KiBwaXhlbER1bXBTeXN0ZW1GYWN0b3J5KCkKLXsKLSAgICBzdGF0
aWMgSUQyRDFGYWN0b3J5KiBkaXJlY3QyREZhY3RvcnkgPSBudWxscHRyOwotICAgIGlmICghZGly
ZWN0MkRGYWN0b3J5KSB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBEMkQxX0ZBQ1RPUllfT1BU
SU9OUyBvcHRpb25zID0geyB9OwotICAgICAgICBvcHRpb25zLmRlYnVnTGV2ZWwgPSBEMkQxX0RF
QlVHX0xFVkVMX0lORk9STUFUSU9OOwotICAgICAgICBIUkVTVUxUIGhyID0gRDJEMUNyZWF0ZUZh
Y3RvcnkoRDJEMV9GQUNUT1JZX1RZUEVfTVVMVElfVEhSRUFERUQsIG9wdGlvbnMsICZkaXJlY3Qy
REZhY3RvcnkpOwotI2Vsc2UKLSAgICAgICAgSFJFU1VMVCBociA9IEQyRDFDcmVhdGVGYWN0b3J5
KEQyRDFfRkFDVE9SWV9UWVBFX01VTFRJX1RIUkVBREVELCAmZGlyZWN0MkRGYWN0b3J5KTsKLSNl
bmRpZgotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZGlyZWN0MkRGYWN0b3J5OwotfQotCi1zdGF0aWMgdm9pZCBwcmludFBORyhJRDJE
MUJpdG1hcCogaW1hZ2UsIGNvbnN0IGNoYXIqIGNoZWNrc3VtKQotewotICAgIFVOVVNFRF9QQVJB
TShpbWFnZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGNoZWNrc3VtKTsKLSAgICAvLyBOb3QgaW1wbGVt
ZW50ZWQuCi19Ci0KLXZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQml0bWFwQ29udGV4dChC
aXRtYXBDb250ZXh0KiBjb250ZXh0LCBjaGFyIGhhc2hTdHJpbmdbMzNdKQotewotICAgIFVOVVNF
RF9QQVJBTShjb250ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0oaGFzaFN0cmluZyk7Ci0gICAgLy8g
Tm90IGltcGxlbWVudGVkLgotfQotCi12b2lkIGR1bXBCaXRtYXAoQml0bWFwQ29udGV4dCogY29u
dGV4dCwgY29uc3QgY2hhciogY2hlY2tzdW0pCi17Ci0gICAgX2NvbV9wdHJfdDxfY29tX0lJSUQ8
SUQyRDFCaXRtYXAsICZfX3V1aWRvZihJRDJEMUJpdG1hcCk+PiBpbWFnZTsKLSAgICBIUkVTVUxU
IGhyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPkdldEJpdG1hcCgmaW1hZ2UpOwotICAg
IGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJpbnRQTkcoaW1h
Z2UuR2V0SW50ZXJmYWNlUHRyKCksIGNoZWNrc3VtKTsKLX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmgJKHJldmlzaW9u
IDI4NzgxMikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBwb3J0RGly
ZWN0MkQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ki8KLQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGNvbWlwLmg+Ci0jaW5jbHVkZSA8ZDJk
MS5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgotCi10eXBlZGVmIEhCSVRNQVAgUGxhdGZvcm1CaXRtYXBCdWZmZXI7Ci0KLWNsYXNzIEJp
dG1hcENvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxCaXRtYXBDb250ZXh0PiB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxCaXRtYXBDb250ZXh0PiBjcmVhdGVCeUFkb3B0aW5nQml0bWFwQW5k
Q29udGV4dChQbGF0Zm9ybUJpdG1hcEJ1ZmZlciBidWZmZXIsIElEMkQxUmVuZGVyVGFyZ2V0KiBj
b250ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQml0bWFwQ29udGV4
dChidWZmZXIsIGNvbnRleHQpKTsKLSAgICB9Ci0KLSAgICB+Qml0bWFwQ29udGV4dCgpCi0gICAg
ewotICAgICAgICBpZiAobV9idWZmZXIpCi0gICAgICAgICAgICBEZWxldGVPYmplY3QobV9idWZm
ZXIpOwotICAgIH0KLQotICAgIElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBwbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuR2V0SW50ZXJmYWNlUHRyKCk7IH0KLQotcHJp
dmF0ZToKLSAgICBCaXRtYXBDb250ZXh0KFBsYXRmb3JtQml0bWFwQnVmZmVyIGJ1ZmZlciwgSUQy
RDFSZW5kZXJUYXJnZXQqIGNvbnRleHQpCi0gICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAg
ICAgICAsIG1fY29udGV4dChjb250ZXh0KQotICAgIHsKLSAgICB9Ci0KLSAgICBQbGF0Zm9ybUJp
dG1hcEJ1ZmZlciBtX2J1ZmZlcjsKLSAgICBfY29tX3B0cl90PF9jb21fSUlJRDxJRDJEMUJpdG1h
cCwgJl9fdXVpZG9mKElEMkQxQml0bWFwKT4+IG1fYml0bWFwOwotICAgIF9jb21fcHRyX3Q8X2Nv
bV9JSUlEPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0LCAmX191dWlkb2YoSUQyRDFCaXRtYXBSZW5k
ZXJUYXJnZXQpPj4gbV9jb250ZXh0OwotfTsKLQotUmVmUHRyPEJpdG1hcENvbnRleHQ+IGNyZWF0
ZUJpdG1hcENvbnRleHRGcm9tV2ViVmlldyhib29sIG9uc2NyZWVuLCBib29sIGluY3JlbWVudGFs
UmVwYWludCwgYm9vbCBzd2VlcEhvcml6b250YWxseSwgYm9vbCBkcmF3U2VsZWN0aW9uUmVjdCk7
Ci1JRDJEMUZhY3RvcnkqIHBpeGVsRHVtcFN5c3RlbUZhY3RvcnkoKTsKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBwb3J0V2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydFdpbi5jcHAJKHJldmlzaW9u
IDI4NzgxMikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBwb3J0V2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsNiBAQAogI2luY2x1ZGUgIlBpeGVsRHVt
cFN1cHBvcnRDRy5oIgogI2VsaWYgVVNFKENBSVJPKQogI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBv
cnRDYWlyby5oIgotI2VsaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBv
cnREaXJlY3QyRC5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgpAQCAt
OTYsMTkgKzk0LDYgQEAgUmVmUHRyPEJpdG1hcENvbnRleHQ+IGNyZWF0ZUJpdG1hcENvbnRleAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5m
by5ibVdpZHRoLCBpbmZvLmJtSGVpZ2h0LCBpbmZvLmJtV2lkdGhCeXRlcyk7IAogICAgIGNhaXJv
X3QqIGNvbnRleHQgPSBjYWlyb19jcmVhdGUoaW1hZ2UpOyAKICAgICBjYWlyb19zdXJmYWNlX2Rl
c3Ryb3koaW1hZ2UpOwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIGF1dG8gdGFyZ2V0UHJvcGVy
dGllcyA9IEQyRDE6OlJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKLSAgICB0YXJnZXRQcm9wZXJ0
aWVzLnBpeGVsRm9ybWF0ID0gRDJEMTo6UGl4ZWxGb3JtYXQoRFhHSV9GT1JNQVRfQjhHOFI4QThf
VU5PUk0sIEQyRDFfQUxQSEFfTU9ERV9JR05PUkUpOwotCi0gICAgQ09NUHRyPElEMkQxRENSZW5k
ZXJUYXJnZXQ+IHJlbmRlclRhcmdldDsKLSAgICBIUkVTVUxUIGhyID0gcGl4ZWxEdW1wU3lzdGVt
RmFjdG9yeSgpLT5DcmVhdGVEQ1JlbmRlclRhcmdldCgmdGFyZ2V0UHJvcGVydGllcywgJnJlbmRl
clRhcmdldCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5CaW5kREMobWVtb3J5REMuZ2V0KCksICZmcmFt
ZSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBhdXRvIGNvbnRleHQgPSByZW5kZXJUYXJnZXQuZ2V0KCk7CiAjZW5kaWYgCiAKICAgICByZXR1
cm4gQml0bWFwQ29udGV4dDo6Y3JlYXRlQnlBZG9wdGluZ0JpdG1hcEFuZENvbnRleHQoYml0bWFw
LCBXVEZNb3ZlKGNvbnRleHQpKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9BZmZpbmVUcmFuc2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9BZmZpbmVUcmFuc2Zvcm0uY3BwCShyZXZpc2lvbiAyODc4MTIpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQWZmaW5lVHJhbnNmb3JtLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzksMTAgKzM5LDYgQEAKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3Mv
Q29yZUdyYXBoaWNzLmg+CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxk
MmQxLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBzdGF0aWMgdm9p
ZCB0ZXN0R2V0QW5kU2V0KFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgYWZmaW5lVHJhbnNmb3Jt
KQpAQCAtMTM1LDE5ICsxMzEsNiBAQCBURVNUKEFmZmluZVRyYW5zZm9ybSwgQ0dBZmZpbmVUcmFu
c2Zvcm1DCiB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFdJTikKLVRFU1QoQWZmaW5lVHJhbnNm
b3JtLCBEMkQxTWF0cml4Q29uc3RydWN0aW9uKQotewotICAgIEQyRDFfTUFUUklYXzNYMl9GIGQy
ZFRyYW5zZm9ybSA9IEQyRDE6Ok1hdHJpeDN4MkYoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEu
MCk7Ci0gICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRlc3QoZDJkVHJhbnNmb3JtKTsKLQot
ICAgIHRlc3RWYWx1ZUNvbnN0cnVjdGlvbih0ZXN0KTsKLSAgICB0ZXN0R2V0QW5kU2V0KHRlc3Qp
OwotCi0gICAgQVNTRVJUX0ZBTFNFKHRlc3QuaXNJZGVudGl0eSgpKTsKLX0KLSNlbmRpZgotCiBU
RVNUKEFmZmluZVRyYW5zZm9ybSwgSWRlbnRpdHkpCiB7CiAgICAgV2ViQ29yZTo6QWZmaW5lVHJh
bnNmb3JtIHRlc3QoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7CkBAIC0xMDAyLDIzICs5
ODUsNCBAQCBURVNUKEFmZmluZVRyYW5zZm9ybSwgQ29yZUdyYXBoaWNzQ2FzdGluCiB9CiAjZW5k
aWYKIAotI2lmIFBMQVRGT1JNKFdJTikKLVRFU1QoQWZmaW5lVHJhbnNmb3JtLCBEaXJlY3QyRENh
c3RpbmcpCi17Ci0gICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSg2LjAsIDUu
MCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKLQotICAgIEQyRDFfTUFUUklYXzNYMl9GIHRlc3QgPSB0
cmFuc2Zvcm07Ci0gICAgRDJEMV9NQVRSSVhfM1gyX0YgdGVzdDIgPSBEMkQxOjpNYXRyaXgzeDJG
KDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOwotCi0gICAgc3RhdGljIGNvbnN0IGRvdWJs
ZSBlcHNpbG9uID0gMC4wMDAwMDAxOwotCi0gICAgRVhQRUNUX05FQVIodGVzdC5fMTEsIHRlc3Qy
Ll8xMSwgZXBzaWxvbik7Ci0gICAgRVhQRUNUX05FQVIodGVzdC5fMTIsIHRlc3QyLl8xMiwgZXBz
aWxvbik7Ci0gICAgRVhQRUNUX05FQVIodGVzdC5fMjEsIHRlc3QyLl8yMSwgZXBzaWxvbik7Ci0g
ICAgRVhQRUNUX05FQVIodGVzdC5fMjIsIHRlc3QyLl8yMiwgZXBzaWxvbik7Ci0gICAgRVhQRUNU
X05FQVIodGVzdC5fMzEsIHRlc3QyLl8zMSwgZXBzaWxvbik7Ci0gICAgRVhQRUNUX05FQVIodGVz
dC5fMzIsIHRlc3QyLl8zMiwgZXBzaWxvbik7Ci19Ci0jZW5kaWYKLQogfQpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Zsb2F0UG9pbnRUZXN0cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Zsb2F0UG9pbnRUZXN0cy5j
cHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9GbG9hdFBvaW50VGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMCArMzYsNiBAQAog
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KICNlbmRpZgogCi0jaWYgUExB
VEZPUk0oV0lOKQotI2luY2x1ZGUgPGQyZDEuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSSB7CiAKIHN0YXRpYyB2b2lkIHRlc3RHZXRBbmRTZXQoV2ViQ29yZTo6RmxvYXRQb2lu
dCBwb2ludCkKQEAgLTU3OSwyMCArNTc1LDYgQEAgVEVTVChGbG9hdFBvaW50LCBDYXN0aW5nKQog
ICAgIEVYUEVDVF9GTE9BVF9FUSgtMjIuM2YsIHRlc3RDRy54KCkpOwogICAgIEVYUEVDVF9GTE9B
VF9FUSgxNC4yZiwgdGVzdENHLnkoKSk7CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSAg
ICBEMkRfUE9JTlRfMkYgZDJkUG9pbnQgPSBhOwotCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDEwMC40
ZiwgZDJkUG9pbnQueCk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDE5OS45ZiwgZDJkUG9pbnQueSk7
Ci0KLSAgICBEMkRfUE9JTlRfMkYgZDJkUG9pbnQyID0gRDJEMTo6UG9pbnQyRigtMjIuM2YsIDE0
LjJmKTsKLQotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdGVzdEQyRChkMmRQb2ludDIpOwotCi0g
ICAgRVhQRUNUX0ZMT0FUX0VRKC0yMi4zZiwgdGVzdEQyRC54KCkpOwotICAgIEVYUEVDVF9GTE9B
VF9FUSgxNC4yZiwgdGVzdEQyRC55KCkpOwotI2VuZGlmCiB9CiAKIH0KSW5kZXg6IFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9GbG9hdFJlY3RUZXN0cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Zsb2F0UmVjdFRlc3RzLmNwcAko
cmV2aXNpb24gMjg3ODEyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Zs
b2F0UmVjdFRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDYgQEAKICNpbmNs
dWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JN
KFdJTikKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkgewogCiBzdGF0aWMgdm9pZCB0ZXN0R2V0QW5kU2V0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0
KQpAQCAtNjMxLDE5ICs2MjcsNiBAQCBURVNUKEZsb2F0UmVjdCwgQ2FzdGluZykKIAogICAgIGNo
ZWNrQ2FzdFJlY3QocmVjdEZyb21DR1JlY3QpOwogI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4p
Ci0gICAgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7Ci0KLSAgICBFWFBFQ1RfRkxPQVRfRVEo
MTAuMGYsIGQyZFJlY3QubGVmdCk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCBkMmRSZWN0
LnRvcCk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDQwLjBmLCBkMmRSZWN0LnJpZ2h0KTsKLSAgICBF
WFBFQ1RfRkxPQVRfRVEoNjAuMGYsIGQyZFJlY3QuYm90dG9tKTsKLQotICAgIFdlYkNvcmU6OkZs
b2F0UmVjdCByZWN0RnJvbUQyRFJlY3QoZDJkUmVjdCk7Ci0KLSAgICBjaGVja0Nhc3RSZWN0KHJl
Y3RGcm9tRDJEUmVjdCk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgY2hlY2tBZGRpdGlvblJl
c3VsdDEoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0KQpAQCAtNzA5LDcgKzY5Miw3IEBA
IFRFU1QoRmxvYXRSZWN0LCBJbmZpbml0ZVJlY3QpCiAKICAgICAvLyBGSVhNRTogV2UgaGF2ZSBh
biB1bnVzdWFsIHJlcHJlc2VudGF0aW9uIGZvciBvdXIgaW5maW5pdGUgcmVjdC4KICAgICAvLyBX
ZWJDb3JlOjpGbG9hdDo6aW5maW5pdGVSZWN0IGlzIChuZWdhdGl2ZSBpbmZpbml0eSkvMiBmb3Ig
dGhlIHVwcGVyIGxlZnQgY29ybmVyLAotICAgIC8vIHdoaWxlIENvcmVHcmFwaGljcyBhbmQgRDJE
IHVzZSAobmVnYXRpdmUgaW5maW5pdHkpLgorICAgIC8vIHdoaWxlIENvcmVHcmFwaGljcyB1c2Vz
IChuZWdhdGl2ZSBpbmZpbml0eSkuCiAKICNpZiBVU0UoQ0cpCiAgICAgQ0dSZWN0IGNnSW5maW5p
dGVSZWN0ID0gQ0dSZWN0SW5maW5pdGU7CkBAIC03MjcsMTYgKzcxMCw2IEBAIFRFU1QoRmxvYXRS
ZWN0LCBJbmZpbml0ZVJlY3QpCiAjZW5kaWYKICAgICAvLyBBU1NFUlRfVFJVRShpbmZpbml0ZSA9
PSBjZ0luZmluaXRlUmVjdCk7CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBEMkQx
X1JFQ1RfRiBkMmRJbmZpbml0ZVJlY3QgPSBEMkQxOjpJbmZpbml0ZVJlY3QoKTsKLQotICAgIEVY
UEVDVF9GTE9BVF9FUSgtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpLCBkMmRJbmZp
bml0ZVJlY3QubGVmdCk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKC1zdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6bWF4KCksIGQyZEluZmluaXRlUmVjdC50b3ApOwotICAgIEVYUEVDVF9GTE9BVF9F
UShzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCksIGQyZEluZmluaXRlUmVjdC5yaWdo
dCk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgo
KSwgZDJkSW5maW5pdGVSZWN0LmJvdHRvbSk7Ci0gICAgLy8gQVNTRVJUX1RSVUUoaW5maW5pdGUg
PT0gZDJkSW5maW5pdGVSZWN0KTsKLSNlbmRpZgogfQogCiBURVNUKEZsb2F0UmVjdCwgRW5jbG9z
aW5nQW5kUm91bmRpbmcpCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
RmxvYXRTaXplVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9GbG9hdFNpemVUZXN0cy5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9GbG9hdFNpemVUZXN0cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDEwICszMyw2IEBACiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFw
aGljcy5oPgogI2VuZGlmCiAKLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8ZDJkMS5oPgot
I2VuZGlmCi0KIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogc3RhdGljIHZvaWQgdGVzdEdl
dEFuZFNldChXZWJDb3JlOjpGbG9hdFNpemUgc2l6ZSkKQEAgLTIwOSwyMCArMjA1LDYgQEAgVEVT
VChGbG9hdFNpemUsIENhc3RpbmcpCiAgICAgRVhQRUNUX0ZMT0FUX0VRKC0yMi4zZiwgdGVzdENH
LndpZHRoKCkpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgxNC4yZiwgdGVzdENHLmhlaWdodCgpKTsK
ICNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIEQyRDFfU0laRV9GIGQyZFNpemUgPSB0
ZXN0OwotCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDEwMjQuMGYsIGQyZFNpemUud2lkdGgpOwotICAg
IEVYUEVDVF9GTE9BVF9FUSg3NjguMGYsIGQyZFNpemUuaGVpZ2h0KTsKLQotICAgIEQyRDFfU0la
RV9GIGQyZFNpemUyID0gRDJEMTo6U2l6ZUYoLTIyLjNmLCAxNC4yZik7Ci0KLSAgICBXZWJDb3Jl
OjpGbG9hdFNpemUgdGVzdEQyRChkMmRTaXplMik7Ci0KLSAgICBFWFBFQ1RfRkxPQVRfRVEoLTIy
LjNmLCB0ZXN0RDJELndpZHRoKCkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxNC4yZiwgdGVzdEQy
RC5oZWlnaHQoKSk7Ci0jZW5kaWYKIH0KIAogVEVTVChGbG9hdFNpemUsIEFkZFN1YnRyYWN0KQpJ
bmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0ludFBvaW50VGVzdHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JbnRQb2lu
dFRlc3RzLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0ludFBvaW50VGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMCArMzMs
NiBAQAogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KICNlbmRpZgogCi0j
aWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPGQyZDEuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSSB7CiAKIHN0YXRpYyB2b2lkIHRlc3RHZXRBbmRTZXQoV2ViQ29yZTo6SW50
UG9pbnQgcG9pbnQpCkBAIC0xOTcsMjYgKzE5Myw2IEBAIFRFU1QoSW50UG9pbnQsIENhc3QpCiAg
ICAgRVhQRUNUX0VRKDEwLCBmcm9tR0RJUG9pbnQueCgpKTsKICAgICBFWFBFQ1RfRVEoMjAsIGZy
b21HRElQb2ludC55KCkpOwogICAgIEFTU0VSVF9UUlVFKGEgPT0gZnJvbUdESVBvaW50KTsKLQot
ICAgIEQyRDFfUE9JTlRfMkYgZDJkUG9pbnRGID0gYTsKLQotICAgIEFTU0VSVF9GTE9BVF9FUSgx
MC4wZiwgZDJkUG9pbnRGLngpOwotICAgIEFTU0VSVF9GTE9BVF9FUSgyMC4wZiwgZDJkUG9pbnRG
LnkpOwotCi0gICAgV2ViQ29yZTo6SW50UG9pbnQgZnJvbUQyRFBvaW50RihkMmRQb2ludEYpOwot
ICAgIEVYUEVDVF9FUSgxMCwgZnJvbUQyRFBvaW50Ri54KCkpOwotICAgIEVYUEVDVF9FUSgyMCwg
ZnJvbUQyRFBvaW50Ri55KCkpOwotICAgIEFTU0VSVF9UUlVFKGEgPT0gZnJvbUQyRFBvaW50Rik7
Ci0KLSAgICBEMkQxX1BPSU5UXzJVIGQyZFBvaW50VSA9IGE7Ci0KLSAgICBBU1NFUlRfRkxPQVRf
RVEoMTAuMGYsIGQyZFBvaW50VS54KTsKLSAgICBBU1NFUlRfRkxPQVRfRVEoMjAuMGYsIGQyZFBv
aW50VS55KTsKLQotICAgIFdlYkNvcmU6OkludFBvaW50IGZyb21EMkRQb2ludFUoZDJkUG9pbnRV
KTsKLSAgICBFWFBFQ1RfRVEoMTAsIGZyb21EMkRQb2ludFUueCgpKTsKLSAgICBFWFBFQ1RfRVEo
MjAsIGZyb21EMkRQb2ludFUueSgpKTsKLSAgICBBU1NFUlRfVFJVRShhID09IGZyb21EMkRQb2lu
dFUpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9JbnRSZWN0VGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9JbnRSZWN0VGVzdHMuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSW50UmVjdFRlc3RzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsMTAgKzM0LDYgQEAKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNz
Lmg+CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jZW5k
aWYKLQogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBzdGF0aWMgdm9pZCB0ZXN0R2V0QW5k
U2V0KFdlYkNvcmU6OkludFJlY3QgcmVjdCkKQEAgLTUxNiwyOCArNTEyLDYgQEAgVEVTVChJbnRS
ZWN0LCBDYXN0aW5nKQogICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdEZyb21HRElSZWN0KGdkaVJl
Y3QpOwogCiAgICAgY2hlY2tDYXN0UmVjdChyZWN0RnJvbUdESVJlY3QpOwotCi0gICAgRDJEMV9S
RUNUX1UgZDJkUmVjdFUgPSByZWN0OwotCi0gICAgRVhQRUNUX0VRKDEwLCBkMmRSZWN0VS5sZWZ0
KTsKLSAgICBFWFBFQ1RfRVEoMjAsIGQyZFJlY3RVLnRvcCk7Ci0gICAgRVhQRUNUX0VRKDQwLCBk
MmRSZWN0VS5yaWdodCk7Ci0gICAgRVhQRUNUX0VRKDYwLCBkMmRSZWN0VS5ib3R0b20pOwotCi0g
ICAgV2ViQ29yZTo6SW50UmVjdCByZWN0RnJvbUQyRFJlY3RVKGQyZFJlY3RVKTsKLQotICAgIGNo
ZWNrQ2FzdFJlY3QocmVjdEZyb21EMkRSZWN0VSk7Ci0KLSAgICBEMkQxX1JFQ1RfRiBkMmRSZWN0
RiA9IHJlY3Q7Ci0KLSAgICBFWFBFQ1RfRkxPQVRfRVEoMTAuMGYsIGQyZFJlY3RGLmxlZnQpOwot
ICAgIEVYUEVDVF9GTE9BVF9FUSgyMC4wZiwgZDJkUmVjdEYudG9wKTsKLSAgICBFWFBFQ1RfRkxP
QVRfRVEoNDAuMGYsIGQyZFJlY3RGLnJpZ2h0KTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNjAuMGYs
IGQyZFJlY3RGLmJvdHRvbSk7Ci0KLSAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3RGcm9tRDJEUmVj
dEYoZDJkUmVjdEYpOwotCi0gICAgY2hlY2tDYXN0UmVjdChyZWN0RnJvbUQyRFJlY3RGKTsKICNl
bmRpZgogfQogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSW50U2l6
ZVRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvSW50U2l6ZVRlc3RzLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0ludFNpemVUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDEwICszMiw2IEBACiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2Vu
ZGlmCiAKLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2VuZGlmCi0KIG5h
bWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogc3RhdGljIHZvaWQgdGVzdEdldEFuZFNldChXZWJD
b3JlOjpJbnRTaXplIHJlY3QpCkBAIC0yMDgsMzAgKzIwNCw2IEBAIFRFU1QoSW50U2l6ZSwgQ2Fz
dGluZykKICAgICBFWFBFQ1RfRVEoLTIyLCB0ZXN0Q0cud2lkdGgoKSk7CiAgICAgRVhQRUNUX0VR
KDE0LCB0ZXN0Q0cuaGVpZ2h0KCkpOwogI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0gICAg
RDJEMV9TSVpFX1UgZDJkU2l6ZVUgPSB0ZXN0OwotICAgIEVYUEVDVF9FUSgxMDI0LCBkMmRTaXpl
VS53aWR0aCk7Ci0gICAgRVhQRUNUX0VRKDc2OCwgZDJkU2l6ZVUuaGVpZ2h0KTsKLQotICAgIEQy
RDFfU0laRV9GIGQyZFNpemVGID0gdGVzdDsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMTAyNC4wZiwg
ZDJkU2l6ZUYud2lkdGgpOwotICAgIEVYUEVDVF9GTE9BVF9FUSg3NjguMGYsIGQyZFNpemVGLmhl
aWdodCk7Ci0KLSAgICBEMkQxX1NJWkVfRiBkMmRTaXplRjIgPSBEMkQxOjpTaXplRigtMjIuM2Ys
IDE0LjZmKTsKLQotICAgIFdlYkNvcmU6OkludFNpemUgdGVzdEQyRChkMmRTaXplRjIpOwotCi0g
ICAgRVhQRUNUX0VRKC0yMiwgdGVzdEQyRC53aWR0aCgpKTsKLSAgICBFWFBFQ1RfRVEoMTQsIHRl
c3REMkQuaGVpZ2h0KCkpOwotCi0gICAgRDJEMV9TSVpFX0YgZDJkU2l6ZVUyID0gRDJEMTo6U2l6
ZUYoLTIzLCAxNik7Ci0KLSAgICBXZWJDb3JlOjpJbnRTaXplIHRlc3REMkQyKGQyZFNpemVVMik7
Ci0KLSAgICBFWFBFQ1RfRVEoLTIzLCB0ZXN0RDJEMi53aWR0aCgpKTsKLSAgICBFWFBFQ1RfRVEo
MTYsIHRlc3REMkQyLmhlaWdodCgpKTsKLSNlbmRpZgogfQogCiBURVNUKEludFNpemUsIEFkZFN1
YnRyYWN0KQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1RyYW5zZm9y
bWF0aW9uTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMCArNDIsNiBAQAogI2luY2x1ZGUgPFF1YXJ0ekNvcmUv
UXVhcnR6Q29yZS5oPgogI2VuZGlmCiAKLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8ZDJk
MS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogc3RhdGljIHZvaWQg
dGVzdElkZW50aXR5KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zv
cm0pCkBAIC0xOTgsMTkgKzE5NCw2IEBAIFRFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIENHQWZm
aW5lVHJhbnMKIH0KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oV0lOKQotVEVTVChUcmFuc2Zvcm1h
dGlvbk1hdHJpeCwgRDJEMU1hdHJpeENvbnN0cnVjdGlvbikKLXsKLSAgICBEMkQxX01BVFJJWF8z
WDJfRiBkMmRUcmFuc2Zvcm0gPSBEMkQxOjpNYXRyaXgzeDJGKDYuMCwgNS4wLCA0LjAsIDMuMCwg
Mi4wLCAxLjApOwotICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRlc3QoZDJkVHJh
bnNmb3JtKTsKLQotICAgIHRlc3RBZmZpbmVMaWtlQ29uc3RydWN0aW9uKHRlc3QpOwotICAgIHRl
c3RHZXRBbmRTZXQodGVzdCk7Ci0KLSAgICBBU1NFUlRfRkFMU0UodGVzdC5pc0lkZW50aXR5KCkp
OwotfQotI2VuZGlmCi0KIFRFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIEFmZmluZVRyYW5zZm9y
bUNvbnN0cnVjdGlvbikKIHsKICAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lVHJh
bnNmb3JtKDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOwpAQCAtMTI2NywyMSArMTI1MCw2
IEBAIFRFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIENhc3RpbmcpCiAgICAgRVhQRUNUX0RPVUJM
RV9FUSg0LjAsIGdkaUZyb21XSy5lRHgpOwogICAgIEVYUEVDVF9ET1VCTEVfRVEoMy4wLCBnZGlG
cm9tV0suZUR5KTsKICNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIEQyRDFfTUFUUklY
XzNYMl9GIGQyZFRyYW5zZm9ybSA9IEQyRDE6Ok1hdHJpeDN4MkYoNi4wLCA1LjAsIDQuMCwgMy4w
LCAyLjAsIDEuMCk7Ci0gICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggZnJvbUQyRFRy
YW5zZm9ybShkMmRUcmFuc2Zvcm0pOwotCi0gICAgdGVzdEFmZmluZUxpa2VDb25zdHJ1Y3Rpb24o
ZnJvbUQyRFRyYW5zZm9ybSk7Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiBkMmRGcm9tV0sgPSB0
ZXN0OwotICAgIEVYUEVDVF9ET1VCTEVfRVEoMTYuMCwgZDJkRnJvbVdLLl8xMSk7Ci0gICAgRVhQ
RUNUX0RPVUJMRV9FUSgxNS4wLCBkMmRGcm9tV0suXzEyKTsKLSAgICBFWFBFQ1RfRE9VQkxFX0VR
KDEyLjAsIGQyZEZyb21XSy5fMjEpOwotICAgIEVYUEVDVF9ET1VCTEVfRVEoMTEuMCwgZDJkRnJv
bVdLLl8yMik7Ci0gICAgRVhQRUNUX0RPVUJMRV9FUSg0LjAsIGQyZEZyb21XSy5fMzEpOwotICAg
IEVYUEVDVF9ET1VCTEVfRVEoMy4wLCBkMmRGcm9tV0suXzMyKTsKLSNlbmRpZgogfQogCiBURVNU
KFRyYW5zZm9ybWF0aW9uTWF0cml4LCBNYWtlTWFwQmV0d2VlblJlY3RzKQpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtRlRXLmNtYWtlCShub25leGlzdGVudCkKQEAg
LTEsNDAgKzAsMCBAQAotbGlzdChBUFBFTkQgV2ViS2l0VGVzdFJ1bm5lcl9TT1VSQ0VTCi0gICAg
d2luL0V2ZW50U2VuZGVyUHJveHlXaW4uY3BwCi0gICAgd2luL1BsYXRmb3JtV2ViVmlld1dpbi5j
cHAKLSAgICB3aW4vVGVzdENvbnRyb2xsZXJXaW4uY3BwCi0gICAgd2luL1Rlc3RJbnZvY2F0aW9u
RGlyZWN0MkQuY3BwCi0gICAgd2luL1VJU2NyaXB0Q29udHJvbGxlcldpbi5jcHAKLSAgICB3aW4v
bWFpbi5jcHAKLSkKLQotc2V0KHdyYXBwZXJfREVGSU5JVElPTlMKLSAgICBVU0VfQ09OU09MRV9F
TlRSWV9QT0lOVAotICAgIFdJTl9DQUlSTwotKQotCi1saXN0KEFQUEVORCBXZWJLaXRUZXN0UnVu
bmVySW5qZWN0ZWRCdW5kbGVfU09VUkNFUwotICAgIEluamVjdGVkQnVuZGxlL3dpbi9BY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcldpbi5jcHAKLSAgICBJbmplY3RlZEJ1bmRsZS93aW4vQWNjZXNzaWJp
bGl0eVVJRWxlbWVudFdpbi5jcHAKLSAgICBJbmplY3RlZEJ1bmRsZS93aW4vQWN0aXZhdGVGb250
c1dpbi5jcHAKLSAgICBJbmplY3RlZEJ1bmRsZS93aW4vSW5qZWN0ZWRCdW5kbGVXaW4uY3BwCi0g
ICAgSW5qZWN0ZWRCdW5kbGUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwCi0pCi0KLWxpc3QoQVBQRU5E
IFdlYktpdFRlc3RSdW5uZXJfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICR7V2ViS2l0VGVzdFJ1
bm5lcl9ESVJ9L0luamVjdGVkQnVuZGxlL3dpbgotKQotCi1saXN0KEFQUEVORCBXZWJLaXRUZXN0
UnVubmVyX0xJQlJBUklFUwotICAgIENvbXN1cHB3Ci0gICAgT2xlYWNjCi0pCi0KLVdFQktJVF9B
RERfUFJFQ09NUElMRURfSEVBREVSKCJXZWJLaXRUZXN0UnVubmVyUHJlZml4LmgiICJ3aW4vV2Vi
S2l0VGVzdFJ1bm5lclByZWZpeC5jcHAiIFdlYktpdFRlc3RSdW5uZXJfU09VUkNFUykKLQotc2V0
KENNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1MgIiR7Q01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU30g
JHtNU1ZDX1JVTlRJTUVfTElOS0VSX0ZMQUdTfSIpCi0KLVdFQktJVF9XUkFQX0VYRUNVVEFCTEUo
V2ViS2l0VGVzdFJ1bm5lcgotICAgIFNPVVJDRVMgJHtUT09MU19ESVJ9L3dpbi9ETExMYXVuY2hl
ci9ETExMYXVuY2hlck1haW4uY3BwCi0gICAgTElCUkFSSUVTIHNobHdhcGkKLSkKLXRhcmdldF9j
b21waWxlX2RlZmluaXRpb25zKFdlYktpdFRlc3RSdW5uZXIgUFJJVkFURSAke3dyYXBwZXJfREVG
SU5JVElPTlN9KQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5o
CShyZXZpc2lvbiAyODc4MTIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2Vi
Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMSArNTQsNyBAQCBjbGFzcyBIZWFkbGVzc1Zp
ZXdCYWNrZW5kOwogdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1ZpZXc7CiB0eXBlZGVmIFdQ
RVRvb2xpbmdCYWNrZW5kczo6SGVhZGxlc3NWaWV3QmFja2VuZCogUGxhdGZvcm1XaW5kb3c7CiAj
ZWxpZiBQTEFURk9STShXSU4pCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPGQyZDFfMS5o
PgotI2Vsc2UKICNpbmNsdWRlIDxjYWlyby5oPgotI2VuZGlmCiBjbGFzcyBUZXN0UnVubmVyV2lu
ZG93OwogdHlwZWRlZiBIV05EIFBsYXRmb3JtV2luZG93OwogdHlwZWRlZiBXS1ZpZXdSZWYgUGxh
dGZvcm1XS1ZpZXc7CkBAIC02NiwxMCArNjIsNiBAQCB0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9y
bVdLVmlldzsKIAogI2lmIFVTRShDQUlSTykKIHR5cGVkZWYgY2Fpcm9fc3VyZmFjZV90KiBQbGF0
Zm9ybUltYWdlOwotI2VsaWYgVVNFKERJUkVDVDJEKQotaW50ZXJmYWNlIElEMkQxQml0bWFwOwot
Ci10eXBlZGVmIElEMkQxQml0bWFwKiBQbGF0Zm9ybUltYWdlOwogI2VuZGlmCiAKIG5hbWVzcGFj
ZSBXVFIgewpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZVBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAkocmV2aXNpb24gMjg3ODEyKQor
KysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBh
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBACiAjaW5jbHVkZSA8d3RmL3Rl
eHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oPgogI2VuZGlmCiAKLSNpZiBVU0UoQ0YpICYmICFQ
TEFURk9STShXSU5fQ0FJUk8pICYmICFVU0UoRElSRUNUMkQpCisjaWYgVVNFKENGKSAmJiAhUExB
VEZPUk0oV0lOX0NBSVJPKQogI2luY2x1ZGUgIldlYkFyY2hpdmVEdW1wU3VwcG9ydC5oIgogI2Vu
ZGlmCiAKQEAgLTc4MCw3ICs3ODAsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEFs
bEZyYW1lc1RlCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wRE9NQXNXZWJBcmNoaXZl
KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7
Ci0jaWYgVVNFKENGKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKSAmJiAhVVNFKERJUkVDVDJEKQor
I2lmIFVTRShDRikgJiYgIVBMQVRGT1JNKFdJTl9DQUlSTykKICAgICBhdXRvIHdrRGF0YSA9IGFk
b3B0V0soV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlKGZyYW1lKSk7CiAgICAgYXV0byBjZkRh
dGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCBXS0RhdGFHZXRCeXRlcyh3a0RhdGEuZ2V0KCkp
LCBXS0RhdGFHZXRTaXplKHdrRGF0YS5nZXQoKSkpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChXZWJDb3JlVGVzdFN1cHBvcnQ6OmNyZWF0ZVhNTFN0cmluZ0Zyb21XZWJBcmNoaXZlRGF0YShj
ZkRhdGEuZ2V0KCkpLmdldCgpKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1Bs
YXRmb3JtV2ViVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci93aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci93aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksMTAgKzM5LDYgQEAKICNpbmNsdWRlIDxjYWlyby5oPgogI2VuZGlmCiAKLSNpZiBV
U0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdU
UiB7CiAKIHN0YXRpYyBMUENXU1RSIGhvc3RXaW5kb3dDbGFzc05hbWUgPSBMIldUUldlYlZpZXdI
b3N0V2luZG93IjsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1Rlc3RJbnZvY2F0
aW9uRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2lu
L1Rlc3RJbnZvY2F0aW9uRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL3dpbi9UZXN0SW52b2NhdGlvbkRpcmVjdDJELmNwcAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgICAgICAgICAgKEMpIDIwMTEgQnJlbnQg
RnVsZ2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAg
ICAgICAgICAgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMuTAotICogICAgICAgICAgIChDKSAyMDEy
IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEludm9jYXRpb24uaCIKLQotI2luY2x1ZGUg
IlBpeGVsRHVtcFN1cHBvcnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKLSNpbmNs
dWRlICJUZXN0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQu
aD4KLSNpbmNsdWRlIDxjc3RkaW8+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNs
dWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXVFIgewotCi0KLXZvaWQgVGVz
dEludm9jYXRpb246OmR1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKFNuYXBzaG90UmVz
dWx0VHlwZSwgV0tBcnJheVJlZiAvKiByZXBhaW50UmVjdHMgKi8sIFdLSW1hZ2VSZWYpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RSCg==
</data>
<flag name="commit-queue"
          id="474614"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448691</attachid>
            <date>2022-01-08 18:09:25 -0800</date>
            <delta_ts>2022-01-09 09:42:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234999-20220108180923.patch</filename>
            <type>text/plain</type>
            <size>505193</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI4Nzgx
MikKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAx
LTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3Vw
cG9ydCBmb3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2U6IFJlbW92ZWQuCisKIDIw
MjItMDEtMDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI4NzY5OC4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAxLTA3ICBTYW0g
V2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3Ig
RGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIFNhYW0gQmFyYXRp
ICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQXBwZWFzZSBhbiBh
c3NlcnRpb24gdGhhdCB3YXMgYnJva2VuIGJ5IHIyODc4MDEgYnkgc2xpZ2h0bHkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1GVFcuY21ha2UJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBA
IC0xLDQ0ICswLDAgQEAKLWxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKLSAgICBB
UEkvSlNTdHJpbmdSZWZCU1RSLmNwcAotKQotCi1saXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9Q
VUJMSUNfRlJBTUVXT1JLX0hFQURFUlMKLSAgICBBUEkvSlNTdHJpbmdSZWZCU1RSLmgKLSAgICBB
UEkvSmF2YVNjcmlwdENvcmUuaAotKQotCi1pZiAoVVNFX0NGKQotICAgIGxpc3QoQVBQRU5EIEph
dmFTY3JpcHRDb3JlX1NPVVJDRVMKLSAgICAgICAgQVBJL0pTU3RyaW5nUmVmQ0YuY3BwCi0gICAg
KQotCi0gICAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfUFVCTElDX0ZSQU1FV09SS19IRUFE
RVJTCi0gICAgICAgIEFQSS9KU1N0cmluZ1JlZkNGLmgKLSAgICApCi0KLSAgICBsaXN0KEFQUEVO
RCBKYXZhU2NyaXB0Q29yZV9MSUJSQVJJRVMKLSAgICAgICAgJHtDT1JFRk9VTkRBVElPTl9MSUJS
QVJZfQotICAgICkKLWVuZGlmICgpCi0KLWlmIChOT1QgV1RGX1BMQVRGT1JNX1dJTl9DQUlSTykK
LSAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9MSUJSQVJJRVMKLSAgICAgICAgd2lubW0K
LSAgICApCi1lbmRpZiAoKQotCi1pZiAoRU5BQkxFX1JFTU9URV9JTlNQRUNUT1IpCi0gICAgaW5j
bHVkZShpbnBzZWN0b3IvcmVtb3RlL1NvY2tldC5jbWFrZSkKLWVsc2UgKCkKLSAgICBsaXN0KFJF
TU9WRV9JVEVNIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKLSAgICAgICAgaW5zcGVjdG9yL0pTR2xv
YmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKLSAgICApCi1lbmRpZiAoKQotCi1maWxl
KENPUFkKLSAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUucmVzb3VyY2VzIgotICAgIERFU1RJTkFUSU9OCi0gICAgJHtDTUFLRV9S
VU5USU1FX09VVFBVVF9ESVJFQ1RPUll9Ci0pCi0KLXNldChKYXZhU2NyaXB0Q29yZV9PVVRQVVRf
TkFNRSBKYXZhU2NyaXB0Q29yZSR7REVCVUdfU1VGRklYfSkKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAxLTA3ICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBm
b3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCByZXZlcnRpbmcgcjI4NzY5OC4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL1BsYXRm
b3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL1BsYXRm
b3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDM1ICswLDAgQEAKLSMgV2Un
cmUgdGFyZ2V0aW5nIFdpbmRvd3MgMTAgd2hpY2ggd2lsbCBoYXZlIERpcmVjdFggMTEgb24gaXQg
c28gcmVxdWlyZSB0aGF0Ci0jIGJ1dCBtYWtlIERpcmVjdFggOSBvcHRpb25hbAotCi1saXN0KEFQ
UEVORCBBTkdMRV9ERUZJTklUSU9OUwotICAgIEdMX0FQSUNBTEw9Ci0gICAgR0xfQVBJPQotICAg
IE5PTUlOTUFYCi0pCi0KLSMgV2UncmUgdGFyZ2V0aW5nIFdpbmRvd3MgMTAgd2hpY2ggd2lsbCBo
YXZlIERpcmVjdFggMTEKLWxpc3QoQVBQRU5EIEFOR0xFX1NPVVJDRVMKLSAgICAke19kM2QxMV9i
YWNrZW5kX3NvdXJjZXN9Ci0gICAgJHtfZDNkX3NoYXJlZF9zb3VyY2VzfQotCi0gICAgJHthbmds
ZV90cmFuc2xhdG9yX2hsc2xfc291cmNlc30KLQotICAgICR7bGliYW5nbGVfZ3B1X2luZm9fdXRp
bF9zb3VyY2VzfQotICAgICR7bGliYW5nbGVfZ3B1X2luZm9fdXRpbF93aW5fc291cmNlc30KLSkK
LQotbGlzdChBUFBFTkQgQU5HTEVfREVGSU5JVElPTlMKLSAgICBBTkdMRV9FTkFCTEVfRDNEMTEK
LSAgICBBTkdMRV9FTkFCTEVfSExTTAotKQotCi1saXN0KEFQUEVORCBBTkdMRUdMRVN2Ml9MSUJS
QVJJRVMgZHhndWlkIGR4Z2kpCi0KLSMgRGlyZWN0WCA5IHN1cHBvcnQgc2hvdWxkIGJlIG9wdGlv
bmFsIGJ1dCBBTkdMRSB3aWxsIG5vdCBjb21waWxlIHdpdGhvdXQgaXQKLWxpc3QoQVBQRU5EIEFO
R0xFX1NPVVJDRVMgJHtfZDNkOV9iYWNrZW5kX3NvdXJjZXN9KQotbGlzdChBUFBFTkQgQU5HTEVf
REVGSU5JVElPTlMgQU5HTEVfRU5BQkxFX0QzRDkpCi1saXN0KEFQUEVORCBBTkdMRUdMRVN2Ml9M
SUJSQVJJRVMgZDNkOSkKLQotIyBVc2Ugc2hhcmVkIGxpYnJhcmllcwotc2V0KEdMRVN2Ml9MSUJS
QVJZX1RZUEUgU0hBUkVEKQotc2V0KEVHTF9MSUJSQVJZX1RZUEUgU0hBUkVEKQpJbmRleDogU291
cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMjItMDEtMDcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29t
PgorCisgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBEaXJlY3QyRAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0OTk5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1GVFcuY21ha2U6
IFJlbW92ZWQuCisKIDIwMjItMDEtMDcgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRvcHQgbGlua2VkT25PckFmdGVyKCkgaW4gbW9yZSBwbGFjZXMK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDYxICswLDAg
QEAKLWxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwotICAgIHRleHQvd2luL1dDaGFyU3Ry
aW5nRXh0cmFzLmgKLQotICAgIHdpbi9EYmdIZWxwZXJXaW4uaAotICAgIHdpbi9HRElPYmplY3Qu
aAotICAgIHdpbi9Tb2Z0TGlua2luZy5oCi0gICAgd2luL1dpbjMySGFuZGxlLmgKLSkKLQotbGlz
dChBUFBFTkQgV1RGX1BSSVZBVEVfTElCUkFSSUVTCi0gICAgRGJnaGVscCAjIEZvciBzeW1ib2wg
aGFuZGxpbmcgPGRiZ2hlbHAuaD4KLSAgICBTaGx3YXBpICMgRm9yIGZpbGUgc3lzdGVtIG9wZXJh
dGlvbnMgPHNobHdhcGkuaD4KLSkKLQotbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwotICAgICBX
aW5tbSAjIEZvciBtdWx0aW1lZGlhIGZ1bmN0aW9ucywgYWxzbyB1c2VkIGluIDx0aW1lYXBpLmg+
Ci0pCi0KLWxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCi0gICAgdGV4dC93aW4vU3RyaW5nV2luLmNw
cAotICAgIHRleHQvd2luL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VXaW4uY3BwCi0KLSAg
ICB3aW4vQ1BVVGltZVdpbi5jcHAKLSAgICB3aW4vRGJnSGVscGVyV2luLmNwcAotICAgIHdpbi9G
aWxlU3lzdGVtV2luLmNwcAotICAgIHdpbi9MYW5ndWFnZVdpbi5jcHAKLSAgICB3aW4vTG9nZ2lu
Z1dpbi5jcHAKLSAgICB3aW4vTWFpblRocmVhZFdpbi5jcHAKLSAgICB3aW4vTWVtb3J5Rm9vdHBy
aW50V2luLmNwcAotICAgIHdpbi9NZW1vcnlQcmVzc3VyZUhhbmRsZXJXaW4uY3BwCi0gICAgd2lu
L09TQWxsb2NhdG9yV2luLmNwcAotICAgIHdpbi9QYXRoV2Fsa2VyLmNwcAotICAgIHdpbi9SdW5M
b29wV2luLmNwcAotICAgIHdpbi9UaHJlYWRpbmdXaW4uY3BwCi0gICAgd2luL1dvcmtRdWV1ZVdp
bi5jcHAKLSkKLQotaWYgKFVTRV9DRikKLSAgICBsaXN0KEFQUEVORCBXVEZfUFVCTElDX0hFQURF
UlMKLSAgICAgICAgY2YvQ0ZVUkxFeHRyYXMuaAotICAgICAgICBjZi9TcGFuQ0YuaAotICAgICAg
ICBjZi9UeXBlQ2FzdHNDRi5oCi0KLSAgICAgICAgdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNG
LmgKLSAgICAgICAgdGV4dC9jZi9UZXh0QnJlYWtJdGVyYXRvckNGLmgKLSAgICApCi0gICAgbGlz
dChBUFBFTkQgV1RGX1NPVVJDRVMKLSAgICAgICAgY2YvQ0ZVUkxFeHRyYXMuY3BwCi0gICAgICAg
IGNmL0ZpbGVTeXN0ZW1DRi5jcHAKLSAgICAgICAgY2YvVVJMQ0YuY3BwCi0KLSAgICAgICAgdGV4
dC9jZi9BdG9tU3RyaW5nSW1wbENGLmNwcAotICAgICAgICB0ZXh0L2NmL1N0cmluZ0NGLmNwcAot
ICAgICAgICB0ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAKLSAgICAgICAgdGV4dC9jZi9TdHJpbmdW
aWV3Q0YuY3BwCi0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUyAke0NPUkVG
T1VOREFUSU9OX0xJQlJBUll9KQotZW5kaWYgKCkKLQotc2V0KFdURl9PVVRQVVRfTkFNRSBXVEYk
e0RFQlVHX1NVRkZJWH0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMzQgQEAKKzIw
MjItMDEtMDcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92
ZSBzdXBwb3J0IGZvciBEaXJlY3QyRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM0OTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9y
bUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtRlRXLmNtYWtlOiBSZW1vdmVkLgor
ICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUYuY3BwOgorICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01lZGlhQUYuaDoKKyAgICAgICAgKiBwYWdlL3dpbi9GcmFtZVdpbkRpcmVjdDJELmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmNyZWF0ZU1JTUVUeXBlUmVnaXN0cnlUaHJl
YWRHbG9iYWxEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4
Q2FjaGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpwcmVUcmFuc2Zvcm1lZE5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJh
dyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
ZHdGb250IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmR3Rm9udEZhY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYWRpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OnByZVRy
YW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzdXBwb3J0c01lZGlhVHlwZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OnNldFRhcmdldENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdy
YXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGF0aDo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBhdGg6OmFkZFJvdW5kZWRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRo
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vY2YvQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbkNGLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNETVNlc3Npb25BVkZvdW5kYXRpb25DRjo6Z2VuZXJhdGVLZXlSZXF1ZXN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50
SW1hZ2U6OmRyYXdQREZQYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T3BlblR5
cGVNYXRoRGF0YTo6T3BlblR5cGVNYXRoRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVu
YW1lQW5kQWN0aXZhdGVGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Qml0bWFwVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjp1cGRh
dGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRl
eHR1cmVHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNv
bnRlbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFj
a2VuZERpcmVjdDJELmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4
dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGll
cy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJE
VXRpbGl0aWVzLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Rp
cmVjdFdyaXRlVXRpbGl0aWVzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFNpemVEaXJlY3QyRC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGly
ZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0
Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250UGxhdGZvcm1EYXRhRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dFdpbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dFdpbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGly
ZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0xheWVyRGlyZWN0MkQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3Qy
RC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVj
b2RlckRpcmVjdDJELmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9OYXRpdmVJbWFnZURpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVG
b250RGF0YURpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VEaXJlY3QyRC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRl
ckVmZmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZl
SW1hZ2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5oOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5oOgorCiAyMDIyLTAxLTA4ICBH
YWJyaWVsIE5hdmEgTWFyaW5vICA8Z25hdmFtYXJpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIG51
bGwgcHRyIGRlcmVmIGluIFdlYkNvcmU6Ok1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6
OmFwcGVuZFNpYmxpbmdOb2RlUmFuZ2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBw
bGVXaW4uY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdp
bi5jbWFrZQkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBs
ZVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtNzEsMTI5ICs3MSwxMDIgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRQogICAgIHBsYXRmb3JtL25ldHdvcmsvY2Yv
U29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCiApCiAKLWlmICgke1VTRV9ESVJFQ1QyRH0pCi0gICAg
bGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3dpbiIKLSAgICApCi0KLSAgICBsaXN0
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAgcGFnZS93aW4vRnJhbWVXaW5EaXJlY3Qy
RC5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3Qy
RC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJl
Y3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2Rl
RGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVj
dDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGly
ZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2Rl
ckRpcmVjdDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3Qy
RC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQu
Y3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3BwCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVjdDJELmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcAotCi0gICAgICAgIHBs
YXRmb3JtL3dpbi9EcmFnSW1hZ2VEaXJlY3QyRC5jcHAKLSAgICApCi1lbHNlICgpCi0gICAgbGlz
dChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbiIKLSAgICAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZiIKLSAgICAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2NhIgotICAgICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luIgotICAgICAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3MvY2ciCi0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCi0gICAgICAgIHBhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCi0KLSAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9MYXllclBvb2wuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRm
b3JtQ0FMYXllci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUNvbnRyb2xs
ZXIuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5jcHAK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuY3BwCi0gICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0EuY3BwCi0KLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vTGF5ZXJDaGFuZ2VzRmx1c2hlci5jcHAKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBRmlsdGVyc1dpbi5jcHAKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNw
cAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV0tDQUNGVmlld0xheWVyVHJlZUhv
c3QuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdM
YXllcldpbi5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNlQ0cuY3BwCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zs
b2F0U2l6ZUNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNw
cAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuY3BwCi0g
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCi0gICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlU291cmNlQ0dXaW4uY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ludFBvaW50Q0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFJlY3RD
Ry5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50U2l6ZUNHLmNwcAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5D
Ry5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1l
ci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhD
Ry5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwCi0KLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENvcmVUZXh0LmNwcAotICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQu
Y3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0dseXBoUGFnZUNvcmVUZXh0
LmNwcAotCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlQ0cuY3Bw
Ci0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vd2lu
L0RyYWdJbWFnZUNHV2luLmNwcAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBREVSUwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFw
aGljc0xheWVyQ0EuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuaAot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmgKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUZpbHRlcnMuaAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9UaWxlQ29udHJvbGxlci5oCi0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2lu
L0Fic3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93
aW4vQ0FDRkxheWVyVHJlZUhvc3RDbGllbnQuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9Db2xvclNwYWNlQ0cuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJl
bmRlcmVyQ0cuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5oCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCi0gICAgKQotZW5kaWYgKCkKK2xpc3QoQVBQRU5E
IFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbiIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9ncmFwaGljcy9jYSIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jZyIKKykKKwor
bGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAK
KworICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
UGxhdGZvcm1DQUxheWVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb250cm9s
bGVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlR3JpZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9UcmFuc2Zvcm1hdGlvbk1hdHJpeENBLmNwcAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9MYXllckNoYW5nZXNGbHVzaGVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9Q
bGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9Q
bGF0Zm9ybUNBRmlsdGVyc1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV0tD
QUNGVmlld0xheWVyVHJlZUhvc3QuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dl
YlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29s
b3JDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNlQ0cuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0Zsb2F0UmVjdENHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6
ZUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJm
YWNlUG9vbC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ludFBvaW50Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UmVjdENH
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFNpemVDRy5jcHAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BERkRvY3VtZW50SW1hZ2UuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvVVRJUmVnaXN0cnkuY3BwCisKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250
Q2FzY2FkZUNvcmVUZXh0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRD
b3JlVGV4dC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250UGxhdGZvcm1E
YXRhQ29yZVRleHQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdl
Q29yZVRleHQuY3BwCisKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZUNH
LmNwcAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxl
Rm9udERhdGFDR1dpbi5jcHAKKworICAgIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAK
KykKKworbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9MYXllclBvb2wuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FB
bmltYXRpb24uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllckNsaWVudC5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvVGlsZUNvbnRyb2xsZXIuaAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0Fi
c3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9D
QUNGTGF5ZXJUcmVlSG9zdC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXll
clRyZWVIb3N0Q2xpZW50LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUxheWVyV2luLmgKKworICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yU3BhY2VDRy5oCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSU9TdXJmYWNlUG9vbC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKKykKIAogaWYgKENNQUtFX1NJWkVPRl9WT0lE
X1AgRVFVQUwgNCkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMgJHtXZWJDb3JlX0RF
UklWRURfU09VUkNFU19ESVJ9L21ha2VzYWZlc2VoLm9iaikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZU
Vy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDI1MyArMCwwIEBACi1pbmNsdWRlKHBsYXRmb3Jt
L0N1cmwuY21ha2UpCi1pZiAoTk9UIEFQUExFX0JVSUxEKQotICAgIGluY2x1ZGUocGxhdGZvcm0v
SW1hZ2VEZWNvZGVycy5jbWFrZSkKLWVuZGlmICgpCi1pbmNsdWRlKHBsYXRmb3JtL09wZW5TU0wu
Y21ha2UpCi1pbmNsdWRlKHBsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UpCi0KLWxpc3QoQVBQ
RU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgIiR7RGlyZWN0WF9J
TkNMVURFX0RJUlN9IgotICAgICIke1dFQktJVF9MSUJSQVJJRVNfRElSfS9pbmNsdWRlIgotICAg
ICIke1dFQkNPUkVfRElSfS9hY2Nlc3NpYmlsaXR5L3dpbiIKLSAgICAiJHtXRUJDT1JFX0RJUn0v
cGFnZS93aW4iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2VnbCIKLSAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsIgotICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZSIKLSAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luIgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRp
YWNhcGFiaWxpdGllcyIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay93aW4i
Ci0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3dpbiIKLSkKLQotbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCi0gICAgYWNjZXNzaWJpbGl0eS93aW4vQVhPYmplY3RDYWNoZVdpbi5jcHAK
LSAgICBhY2Nlc3NpYmlsaXR5L3dpbi9BY2Nlc3NpYmlsaXR5T2JqZWN0V2luLmNwcAotICAgIGFj
Y2Vzc2liaWxpdHkvd2luL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyV2luLmNwcAotCi0gICAg
ZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcAotCi0gICAgaHRtbC9IVE1MU2VsZWN0RWxlbWVudFdp
bi5jcHAKLQotICAgIHBhZ2Uvd2luL0RyYWdDb250cm9sbGVyV2luLmNwcAotICAgIHBhZ2Uvd2lu
L0V2ZW50SGFuZGxlcldpbi5jcHAKLSAgICBwYWdlL3dpbi9GcmFtZVdpbi5jcHAKLSAgICBwYWdl
L3dpbi9GcmFtZVdpbkRpcmVjdDJELmNwcAotCi0gICAgcGxhdGZvcm0vQ3Vyc29yLmNwcAotICAg
IHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuY3BwCi0gICAgcGxhdGZvcm0vU3RhdGljUGFzdGVi
b2FyZC5jcHAKLQotICAgIHBsYXRmb3JtL2F1ZGlvL1BsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdl
ci5jcHAKLQotICAgIHBsYXRmb3JtL2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAKLSAg
ICBwbGF0Zm9ybS9nZW5lcmljL0tleWVkRW5jb2RlckdlbmVyaWMuY3BwCi0KLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9HTENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1E
aXNwbGF5LmNwcAotCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAK
LQotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcAot
Ci0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRElt
cGwuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlckRpcmVjdFdyaXRlLmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9h
dFBvaW50RGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UmVjdERp
cmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFNpemVEaXJlY3QyRC5j
cHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250RGVzY3JpcHRpb25XaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdp
bi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVEaXJlY3Qy
RC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlRGVjb2RlckRpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURp
cmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZVdpbi5jcHAKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW50UG9pbnRXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ludFJlY3RXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFNpemVX
aW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJl
Y3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
VGV4dEFuYWx5emVySGVscGVyLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFuc2Zv
cm1hdGlvbk1hdHJpeERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFu
c2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAKLQotICAgIHBsYXRmb3JtL25ldHdvcmsvd2luL0N1cmxT
U0xIYW5kbGVXaW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93aW4vRG93bmxvYWRCdW5kbGVX
aW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93aW4vTmV0d29ya1N0YXRlTm90aWZpZXJXaW4u
Y3BwCi0KLSAgICBwbGF0Zm9ybS90ZXh0L0h5cGhlbmF0aW9uLmNwcAotICAgIHBsYXRmb3JtL3Rl
eHQvd2luL0xvY2FsZVdpbi5jcHAKLQotICAgIHBsYXRmb3JtL3dpbi9CU3RyaW5nLmNwcAotICAg
IHBsYXRmb3JtL3dpbi9CaXRtYXBJbmZvLmNwcAotICAgIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRV
dGlsaXRpZXNXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL0N1cnNvcldpbi5jcHAKLSAgICBwbGF0
Zm9ybS93aW4vRGVmV25kUHJvY1dpbmRvd0NsYXNzLmNwcAotICAgIHBsYXRmb3JtL3dpbi9EZWxh
eUxvYWRlZE1vZHVsZXNFbnVtZXJhdG9yLmNwcAotICAgIHBsYXRmb3JtL3dpbi9EcmFnRGF0YVdp
bi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlRGlyZWN0MkQuY3BwCi0gICAgcGxhdGZv
cm0vd2luL0RyYWdJbWFnZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vR0RJT2JqZWN0Q291bnRl
ci5jcHAKLSAgICBwbGF0Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmNwcAotICAgIHBsYXRmb3JtL3dp
bi9JbXBvcnRlZEZ1bmN0aW9uc0VudW1lcmF0b3IuY3BwCi0gICAgcGxhdGZvcm0vd2luL0ltcG9y
dGVkTW9kdWxlc0VudW1lcmF0b3IuY3BwCi0gICAgcGxhdGZvcm0vd2luL0tleUV2ZW50V2luLmNw
cAotICAgIHBsYXRmb3JtL3dpbi9Mb2NhbGl6ZWRTdHJpbmdzV2luLmNwcAotICAgIHBsYXRmb3Jt
L3dpbi9Mb2dnaW5nV2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9NSU1FVHlwZVJlZ2lzdHJ5V2lu
LmNwcAotICAgIHBsYXRmb3JtL3dpbi9NYWluVGhyZWFkU2hhcmVkVGltZXJXaW4uY3BwCi0gICAg
cGxhdGZvcm0vd2luL1BFSW1hZ2UuY3BwCi0gICAgcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4u
Y3BwCi0gICAgcGxhdGZvcm0vd2luL1BsYXRmb3JtTW91c2VFdmVudFdpbi5jcHAKLSAgICBwbGF0
Zm9ybS93aW4vUGxhdGZvcm1TY3JlZW5XaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1BvcHVwTWVu
dVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJhdG9yV2luLmNwcAotICAgIHBs
YXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vU2VhcmNo
UG9wdXBNZW51REIuY3BwCi0gICAgcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudVdpbi5jcHAK
LSAgICBwbGF0Zm9ybS93aW4vU3RydWN0dXJlZEV4Y2VwdGlvbkhhbmRsZXJTdXBwcmVzc29yLmNw
cAotICAgIHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcAotICAgIHBsYXRmb3JtL3dpbi9Vc2Vy
QWdlbnRXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAKLSAgICBwbGF0
Zm9ybS93aW4vV2ViQ29yZUJ1bmRsZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZUlu
c3RhbmNlSGFuZGxlLmNwcAotICAgIHBsYXRmb3JtL3dpbi9XZWJDb3JlVGV4dFJlbmRlcmVyLmNw
cAotICAgIHBsYXRmb3JtL3dpbi9XaGVlbEV2ZW50V2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9X
aWRnZXRXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5j
cHAKLQotICAgIHJlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKLSkKLQotaWYgKFVTRV9DRikK
LSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUwotICAg
ICAgICAiJHtXRUJDT1JFX0RJUn0vbG9hZGVyL2FyY2hpdmUvY2YiCi0gICAgICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9jZiIKLSAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2Nm
L3dpbiIKLSAgICApCi0KLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAg
ZWRpdGluZy9TbWFydFJlcGxhY2VDRi5jcHAKLQotICAgICAgICBsb2FkZXIvYXJjaGl2ZS9jZi9M
ZWdhY3lXZWJBcmNoaXZlLmNwcAotCi0gICAgICAgIHBsYXRmb3JtL2NmL0tleWVkRGVjb2RlckNG
LmNwcAotICAgICAgICBwbGF0Zm9ybS9jZi9LZXllZEVuY29kZXJDRi5jcHAKLSAgICAgICAgcGxh
dGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vY2Yvd2luL0Nl
cnRpZmljYXRlQ0ZXaW4uY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vdGV4dC9jZi9IeXBoZW5hdGlv
bkNGLmNwcAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwotICAgICAgICBsb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmgK
LQotICAgICAgICBwbGF0Zm9ybS9jZi93aW4vQ2VydGlmaWNhdGVDRldpbi5oCi0gICAgKQotCi0g
ICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMgJHtDT1JFRk9VTkRBVElPTl9MSUJSQVJZ
fSkKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlVGVzdFN1cHBvcnRfTElCUkFSSUVTICR7Q09SRUZP
VU5EQVRJT05fTElCUkFSWX0pCi1lbHNlICgpCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCi0gICAgICAgIHBsYXRmb3JtL3RleHQvSHlwaGVuYXRpb24uY3BwCi0gICAgKQotZW5kaWYg
KCkKLQotbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCi0gICAg
YWNjZXNzaWJpbGl0eS93aW4vQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJXaW4uaAotCi0gICAg
cGFnZS93aW4vRnJhbWVXaW4uaAotCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyREltcGwuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQ
aXhlbERhdGEuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMu
aAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5oCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmgKLSAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dFdpbi5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
RGVjb2RlckRpcmVjdDJELmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxXaW5kb3dz
Q29udGV4dC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1
bGxzY3JlZW5XaW5kb3cuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NoYXJlZEdESU9iamVjdC5o
Ci0KLSAgICBwbGF0Zm9ybS93aW4vQlN0cmluZy5oCi0gICAgcGxhdGZvcm0vd2luL0JpdG1hcElu
Zm8uaAotICAgIHBsYXRmb3JtL3dpbi9DT01QdHIuaAotICAgIHBsYXRmb3JtL3dpbi9EZWZXbmRQ
cm9jV2luZG93Q2xhc3MuaAotICAgIHBsYXRmb3JtL3dpbi9HRElPYmplY3RDb3VudGVyLmgKLSAg
ICBwbGF0Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmgKLSAgICBwbGF0Zm9ybS93aW4vSFduZERDLmgK
LSAgICBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmgKLSAgICBwbGF0Zm9ybS93aW4vU2Nyb2xs
YmFyVGhlbWVXaW4uaAotICAgIHBsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVEQi5oCi0gICAg
cGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudVdpbi5oCi0gICAgcGxhdGZvcm0vd2luL1N5c3Rl
bUluZm8uaAotICAgIHBsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuaAotICAgIHBsYXRmb3JtL3dp
bi9XZWJDb3JlQnVuZGxlV2luLmgKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZUluc3RhbmNlSGFu
ZGxlLmgKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZVRleHRSZW5kZXJlci5oCi0gICAgcGxhdGZv
cm0vd2luL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5oCi0gICAgcGxhdGZvcm0vd2luL1dpbmRv
d01lc3NhZ2VMaXN0ZW5lci5oCi0gICAgcGxhdGZvcm0vd2luL1dpbmRvd3NUb3VjaC5oCi0pCi0K
LWxpc3QoQVBQRU5EIFdlYkNvcmVfVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMKLSAgICAke1dFQkNP
UkVfRElSfS9jc3MvdGhlbWVXaW4uY3NzCi0gICAgJHtXRUJDT1JFX0RJUn0vY3NzL3RoZW1lV2lu
UXVpcmtzLmNzcwotKQotCi1saXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUwotICAgICR7RGly
ZWN0WF9MSUJSQVJJRVN9Ci0gICAgY29tY3RsMzIKLSAgICBjcnlwdDMyCi0gICAgaXBobHBhcGkK
LSAgICBycGNydDQKLSAgICBzaGx3YXBpCi0gICAgdXNwMTAKLSAgICB2ZXJzaW9uCi0gICAgd2lu
bW0KLSAgICB3czJfMzIKLSkKLQotbGlzdChBUFBFTkQgV2ViQ29yZVRlc3RTdXBwb3J0X0xJQlJB
UklFUwotICAgIHNobHdhcGkKLSkKLQotbWFrZV9kaXJlY3RvcnkoJHtDTUFLRV9SVU5USU1FX09V
VFBVVF9ESVJFQ1RPUll9L1dlYktpdC5yZXNvdXJjZXMvZW4ubHByb2opCi1maWxlKENPUFkKLSAg
ICAiJHtXRUJDT1JFX0RJUn0vZW4ubHByb2ovTG9jYWxpemFibGUuc3RyaW5ncyIKLSAgICAiJHtX
RUJDT1JFX0RJUn0vZW4ubHByb2ovbWVkaWFDb250cm9sc0xvY2FsaXplZFN0cmluZ3MuanMiCi0g
ICAgREVTVElOQVRJT04KLSAgICAke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vV2Vi
S2l0LnJlc291cmNlcy9lbi5scHJvagotKQotZmlsZShDT1BZCi0gICAgIiR7V0VCQ09SRV9ESVJ9
L01vZHVsZXMvbWVkaWFjb250cm9scy9tZWRpYUNvbnRyb2xzQXBwbGUuY3NzIgotICAgICIke1dF
QkNPUkVfRElSfS9Nb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250cm9sc0FwcGxlLmpzIgot
ICAgIERFU1RJTkFUSU9OCi0gICAgJHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1dl
YktpdC5yZXNvdXJjZXMKLSkKLQotc2V0KFdlYkNvcmVfT1VUUFVUX05BTUUgV2ViQ29yZSR7REVC
VUdfU1VGRklYfSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCShyZXZpc2lvbiAyODc4
MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMzksMTQgKzM5LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAKIAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcldpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9h
dFJlY3REaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRTaXplRGly
ZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udERlc2NyaXB0aW9uV2luLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcApAQCAtNjAsNyArNTUsNiBA
QCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW50U2l6ZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2
YXRlRnVsbHNjcmVlbldpbmRvdy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxl
Rm9udERhdGFXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9u
TWF0cml4RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0
aW9uTWF0cml4V2luLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay93aW4vRG93bmxvYWRCdW5k
bGVXaW4uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxMikKKysrIFNv
dXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBA
QAorMjAyMi0wMS0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVtb3ZlIHN1cHBvcnQgZm9yIERpcmVjdDJECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHBhbC9QbGF0Zm9ybUZUVy5jbWFrZTogUmVtb3ZlZC4KKwog
MjAyMi0wMS0wNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjg3Njk4LgpJbmRleDogU291cmNlL1dl
YkNvcmUvUEFML3BhbC9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL1BsYXRmb3JtRlRXLmNtYWtlCShub25leGlzdGVudCkKQEAgLTEs
MjYgKzAsMCBAQAotbGlzdChBUFBFTkQgUEFMX1BVQkxJQ19IRUFERVJTCi0pCi0KLWxpc3QoQVBQ
RU5EIFBBTF9TT1VSQ0VTCi0gICAgY3J5cHRvL29wZW5zc2wvQ3J5cHRvRGlnZXN0T3BlblNTTC5j
cHAKLQotICAgIGNyeXB0by93aW4vQ3J5cHRvRGlnZXN0V2luLmNwcAotCi0gICAgc3lzdGVtL0Ns
b2NrR2VuZXJpYy5jcHAKLQotICAgIHN5c3RlbS93aW4vU291bmRXaW4uY3BwCi0KLSAgICB0ZXh0
L0tpbGxSaW5nLmNwcAotCi0gICAgd2luL0xvZ2dpbmdXaW4uY3BwCi0pCi0KLWxpc3QoQVBQRU5E
IFBBTF9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAiJHtXRUJLSVRfTElCUkFSSUVT
X0RJUn0vaW5jbHVkZSIKLSkKLQotbGlzdChBUFBFTkQgUEFMX1BSSVZBVEVfTElCUkFSSUVTCi0g
ICAgT3BlblNTTDo6Q3J5cHRvCi0pCi0KLXNldChQQUxfT1VUUFVUX05BTUUgUEFMJHtERUJVR19T
VUZGSVh9KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWVkaWFBRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNl
clByZWZlcmVuY2VzTWVkaWFBRi5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01lZGlhQUYuaCIKIAotI2lmIEVOQUJMRShWSURFTykgJiYgIVVTRShE
SVJFQ1QyRCkKKyNpZiBFTkFCTEUoVklERU8pCiAKICNpbmNsdWRlICJBdWRpb1RyYWNrTGlzdC5o
IgogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgpAQCAtOTk1LDQgKzk5NSw0IEBAIFZl
Y3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gQ2FwdGlvblVzZXJQcmUKICAgICAKIH0KIAotI2VuZGlm
IC8vIEVOQUJMRShWSURFTykgJiYgIVVTRShESVJFQ1QyRCkKKyNlbmRpZiAvLyBFTkFCTEUoVklE
RU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZl
cmVuY2VzTWVkaWFBRi5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcg
KzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoVklERU8pICYmICFVU0UoRElS
RUNUMkQpCisjaWYgRU5BQkxFKFZJREVPKQogCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5o
IgogI2luY2x1ZGUgIkNhcHRpb25QcmVmZXJlbmNlc0RlbGVnYXRlLmgiCkBAIC0xMjAsNCArMTIw
LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5B
QkxFKFZJREVPKSAmJiAhVVNFKERJUkVDVDJEKQorI2VuZGlmIC8vIEVOQUJMRShWSURFTykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luRGlyZWN0MkQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luRGlyZWN0MkQuY3BwCShyZXZp
c2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdpbkRpcmVjdDJE
LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZyYW1lV2luLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJCaXRtYXBJbmZv
LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgotI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgot
I2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
R0RJT2JqZWN0PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoY29uc3QgRnJhbWUqIGZyYW1lLCBJbnRS
ZWN0JiBpcikKLXsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGF1dG8gb2xkUGFpbnRCZWhhdmlvciA9IGZyYW1lLT52aWV3KCktPnBhaW50QmVoYXZpb3Io
KTsKLSAgICBmcmFtZS0+dmlldygpLT5zZXRQYWludEJlaGF2aW9yKG9sZFBhaW50QmVoYXZpb3Ig
fCBQYWludEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpOwotCi0gICAgdm9pZCog
Yml0cyA9IG51bGxwdHI7Ci0gICAgYXV0byBoZGMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNv
bXBhdGlibGVEQygwKSk7Ci0gICAgaW50IHcgPSBpci53aWR0aCgpOwotICAgIGludCBoID0gaXIu
aGVpZ2h0KCk7Ci0gICAgQml0bWFwSW5mbyBibXAgPSBCaXRtYXBJbmZvOjpjcmVhdGUoSW50U2l6
ZSh3LCBoKSk7Ci0KLSAgICBHRElPYmplY3Q8SEJJVE1BUD4gaGJtcCA9IGFkb3B0R0RJT2JqZWN0
KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYm1wLCBESUJfUkdCX0NPTE9SUywgc3RhdGljX2Nhc3Q8
dm9pZCoqPigmYml0cyksIDAsIDApKTsKLSAgICBpZiAoIWhibXApCi0gICAgICAgIHJldHVybiBo
Ym1wOwotCi0gICAgSEdESU9CSiBoYm1wT2xkID0gU2VsZWN0T2JqZWN0KGhkYy5nZXQoKSwgaGJt
cC5nZXQoKSk7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgU2VsZWN0T2JqZWN0KGhk
Yy5nZXQoKSwgaGJtcE9sZCk7Ci0KLSAgICBmcmFtZS0+dmlldygpLT5zZXRQYWludEJlaGF2aW9y
KG9sZFBhaW50QmVoYXZpb3IpOwotCi0gICAgcmV0dXJuIGhibXA7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1F
VHlwZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9N
SU1FVHlwZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2MSw3ICs0
NjEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8TUlNRVR5cGVSZWdpc3RyeVRocmVhZEdsCiAgICAgfQog
I2Vsc2UKICAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBzdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nID0gc3RkOjppbml0aWFsaXplcl9saXN0PFN0
cmluZz4gewotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykKICAgICAg
ICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVU
SSdzIHdoZW4gYSB3YXkgdG8gY29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVUSSByZWxpYWJseSBp
cyBmb3VuZC4KICAgICAgICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0IFBORywgSlBFRyBhbmQg
R0lGLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYwOTUyODY+LgogICAgICAgICAiaW1hZ2UvcG5nIl9z
LApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0VsbGkKICAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0VsbGlw
c2UocmVjdCk7CiB9CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cp
CiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7
CiAgICAgbV9wcmltYXJ5Q29udGV4dC5hcHBseVN0cm9rZVBhdHRlcm4oKTsKQEAgLTE4MCw3ICsx
ODAsNyBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsCiAgICAgbV9z
ZWNvbmRhcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CiB9CiAKLSNpZiBVU0UoQ0cp
IHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0NBTGF5ZXJDb250ZXh0KQogewogICAg
IG1fcHJpbWFyeUNvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogICAgIHZvaWQg
ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSNpZiBVU0UoQ0cpIHx8IFVT
RShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBm
aW5hbDsKICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKICNlbmRpZgpAQCAtNzQs
NyArNzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpIGZpbmFsOwogICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpIGZpbmFsOwogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNF
KENHKQogICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbDsKICAgICBib29s
IGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24gMjg3ODEy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjgsMzMgKzEyOCwyOCBAQCB2b2lkIEJpdG1hcEltYWdlOjpzZXRD
dXJyZW50RnJhbWVEZWNvZGluCiAgICAgbV9jdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1cyA9IGRl
Y29kaW5nU3RhdHVzOwogfQogCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpmcmFt
ZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVs
IHN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkK
K1JlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJ
Zk5lZWRlZChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkK
IHsKICAgICBpZiAoIWZyYW1lSGFzRnVsbFNpemVOYXRpdmVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1
YnNhbXBsaW5nTGV2ZWwpKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZTo6JXMg
LSAlcCAtIHVybDogJXMgW3N1YnNhbXBsaW5nTGV2ZWwgd2FzICVkLCByZXNhbXBsaW5nXSIsIF9f
RlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3Rh
dGljX2Nhc3Q8aW50PihmcmFtZVN1YnNhbXBsaW5nTGV2ZWxBdEluZGV4KGluZGV4KSkpOwogICAg
ICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgfQotI2lmIFVTRShESVJFQ1QyRCkK
LSAgICBtX3NvdXJjZS0+c2V0VGFyZ2V0Q29udGV4dCh0YXJnZXRDb250ZXh0KTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHRhcmdldENvbnRleHQpOwotI2VuZGlmCiAgICAgcmV0dXJuIG1fc291
cmNlLT5mcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoaW5kZXgsIHN1YnNhbXBsaW5nTGV2
ZWwpOwogfQogCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZShj
b25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCitSZWZQdHI8TmF0aXZlSW1hZ2U+
IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZSgpCiB7Ci0gICAgcmV0dXJuIGZyYW1lSW1hZ2VBdElu
ZGV4Q2FjaGVJZk5lZWRlZCgwLCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0LCB0YXJnZXRDb250
ZXh0KTsKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKDAsIFN1YnNh
bXBsaW5nTGV2ZWw6OkRlZmF1bHQpOwogfQogCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcElt
YWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqIHRh
cmdldENvbnRleHQpCitSZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpCiB7Ci0gICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJ
Zk5lZWRlZChtX2N1cnJlbnRGcmFtZSwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgdGFyZ2V0
Q29udGV4dCk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChtX2N1
cnJlbnRGcmFtZSwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7CiB9CiAKLVJlZlB0cjxOYXRp
dmVJbWFnZT4gQml0bWFwSW1hZ2U6OnByZVRyYW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoYm9vbCByZXNwZWN0T3JpZW50YXRpb24sIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFy
Z2V0Q29udGV4dCkKK1JlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2U6OnByZVRyYW5zZm9y
bWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCByZXNwZWN0T3JpZW50YXRpb24pCiB7
Ci0gICAgYXV0byBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKHRhcmdldENvbnRl
eHQpOworICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAg
IGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBpbWFnZTsKIApAQCAtMTc4LDE4ICsxNzMsMTgg
QEAgUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6cHJlVHJhbgogfQogCiAjaWYgVVNF
KENHKQotUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0
KQorUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgYXV0byBp
bWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChpLCBTdWJzYW1wbGluZ0xldmVs
OjpEZWZhdWx0LCB0YXJnZXRDb250ZXh0KTsKKyAgICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1h
Z2VBdEluZGV4Q2FjaGVJZk5lZWRlZChpLCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKICAg
ICAgICAgaWYgKGltYWdlICYmIGltYWdlLT5zaXplKCkgPT0gc2l6ZSkKICAgICAgICAgICAgIHJl
dHVybiBpbWFnZTsKICAgICB9CiAKICAgICAvLyBGYWxsYmFjayB0byB0aGUgZmlyc3QgZnJhbWUg
aW1hZ2UgaWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQotICAgIHJldHVybiBmcmFtZUlt
YWdlQXRJbmRleENhY2hlSWZOZWVkZWQoMCwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgdGFy
Z2V0Q29udGV4dCk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZCgw
LCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKIH0KIAogVmVjdG9yPFJlZjxOYXRpdmVJbWFn
ZT4+IEJpdG1hcEltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKQpAQCAtMzAzLDcgKzI5OCw3IEBA
IEltYWdlRHJhd1Jlc3VsdCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGkKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlcXVlc3REZWNvZGluZzsK
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXhD
YWNoZUlmTmVlZGVkKG1fY3VycmVudEZyYW1lLCBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsLCAm
Y29udGV4dCk7CisgICAgICAgICAgICBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5l
ZWRlZChtX2N1cnJlbnRGcmFtZSwgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCk7CiAgICAgICAg
ICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAgLSB1cmw6ICVzIFthbiBpbWFn
ZSBmcmFtZSB3aWxsIGJlIGRlY29kZWQgc3luY2hyb25vdXNseV0iLCBfX0ZVTkNUSU9OX18sIHRo
aXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICB9CiAgICAg
ICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsMTEgKzE0MiwxMSBAQCBw
dWJsaWM6CiAjZW5kaWYKICNlbmRpZgogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5hdGl2
ZUltYWdlPiBuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgb3Zl
cnJpZGU7Ci0gICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRy
PE5hdGl2ZUltYWdlPiBwcmVUcmFuc2Zvcm1lZE5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGJv
b2wgcmVzcGVjdE9yaWVudGF0aW9uLCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikg
b3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJ
bWFnZSgpIG92ZXJyaWRlOworICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IHByZVRyYW5z
Zm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCByZXNwZWN0T3JpZW50YXRpb24p
IG92ZXJyaWRlOwogI2lmIFVTRShDRykKLSAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUlt
YWdlT2ZTaXplKGNvbnN0IEludFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0
cikgb3ZlcnJpZGU7CisgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZU9mU2l6ZShj
b25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPFJlZjxOYXRpdmVJbWFnZT4+IGZy
YW1lc05hdGl2ZUltYWdlcygpOwogI2VuZGlmCiAKQEAgLTE1OCw3ICsxNTgsNyBAQCBwcml2YXRl
OgogICAgIFdFQkNPUkVfRVhQT1JUIEJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gbnVsbHB0
cik7CiAKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBp
bmRleCkgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSW1hZ2VBdEluZGV4KGluZGV4KTsgfQotICAg
IFJlZlB0cjxOYXRpdmVJbWFnZT4gZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKHNpemVf
dCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogPSBudWxscHRyKTsKKyAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGZyYW1l
SW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJz
YW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKIAogICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNh
Y2hlZCBkYXRhLiBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAogICAgIC8v
IHRoZSBlbnRpcmUgZnJhbWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3VyY2Ug
dG8gZGVzdHJveQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UG9pbnQuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMSArNDMsNiBAQCB0
eXBlZGVmIHN0cnVjdCBfTlNQb2ludCBOU1BvaW50OwogI2VuZGlmCiAjZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQogCi0jaWYgUExBVEZPUk0oV0lOKQotc3RydWN0IEQyRF9QT0lOVF8yRjsKLXR5cGVk
ZWYgRDJEX1BPSU5UXzJGIEQyRDFfUE9JTlRfMkY7Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdURiB7
CiBjbGFzcyBUZXh0U3RyZWFtOwogfQpAQCAtMTkyLDExICsxODcsNiBAQCBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0OwogI2VuZGlmCiAKLSNpZiBQ
TEFURk9STShXSU4pCi0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRQb2ludChjb25zdCBEMkQxX1BP
SU5UXzJGJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgRDJEMV9QT0lOVF8yRigpIGNv
bnN0OwotI2VuZGlmCi0KICAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFBvaW50IG1hdHJpeFRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQ
T1JUIEZsb2F0UG9pbnQgbWF0cml4VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNv
bnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDYgQEAgdHlwZWRlZiBz
dHJ1Y3QgX2NhaXJvX3JlY3RhbmdsZSBjYWlyb19yZQogCiAjaWYgUExBVEZPUk0oV0lOKQogdHlw
ZWRlZiBzdHJ1Y3QgdGFnUkVDVCBSRUNUOwotc3RydWN0IEQyRF9SRUNUX0Y7Ci10eXBlZGVmIEQy
RF9SRUNUX0YgRDJEMV9SRUNUX0Y7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdURiB7CkBAIC0yMjQs
MTIgKzIyMiw2IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBjYWlyb19yZWN0YW5nbGVfdCgpIGNv
bnN0OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShXSU4pCi0gICAgV0VCQ09SRV9FWFBPUlQgRmxv
YXRSZWN0KGNvbnN0IFJFQ1QmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QoY29uc3Qg
RDJEMV9SRUNUX0YmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBvcGVyYXRvciBEMkQxX1JFQ1RfRigp
IGNvbnN0OwotI2VuZGlmCi0KICAgICBzdGF0aWMgRmxvYXRSZWN0IGluZmluaXRlUmVjdCgpOwog
ICAgIGJvb2wgaXNJbmZpbml0ZSgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDExICs0OCw2IEBAIHR5cGVkZWYgc3RydWN0IF9OU1NpemUgTlNTaXplOwogI2VuZGlmCiAj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCi0jaWYgUExBVEZPUk0oV0lOKQotc3RydWN0IEQyRF9T
SVpFX0Y7Ci10eXBlZGVmIEQyRF9TSVpFX0YgRDJEMV9TSVpFX0Y7Ci0jZW5kaWYKLQogbmFtZXNw
YWNlIFdURiB7CiBjbGFzcyBUZXh0U3RyZWFtOwogfQpAQCAtMTU5LDExICsxNTQsNiBAQCBwdWJs
aWM6CiAgICAgb3BlcmF0b3IgTlNTaXplKCkgY29uc3Q7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JN
KFdJTikKLSAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUoY29uc3QgRDJEMV9TSVpFX0YmKTsK
LSAgICBvcGVyYXRvciBEMkQxX1NJWkVfRigpIGNvbnN0OwotI2VuZGlmCi0KICAgICBTdHJpbmcg
dG9KU09OU3RyaW5nKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEpTT046Ok9iamVj
dD4gdG9KU09OT2JqZWN0KCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTEgKzQ5LDYgQEAKICNp
bmNsdWRlIDx1c3AxMC5oPgogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2Ug
SURXcml0ZUZhY3Rvcnk1OwotaW50ZXJmYWNlIElEV3JpdGVHZGlJbnRlcm9wOwotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udENhY2hlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAkocmV2
aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBs
YXRmb3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NywxMCArNjcsNiBAQCBpbnRlcmZhY2Ug
SURXcml0ZUZvbnQ7CiBpbnRlcmZhY2UgSURXcml0ZUZvbnRGYWNlOwogI2VuZGlmCiAKLSNpZiBV
U0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZHdyaXRlXzMuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKQEAgLTExOSw5ICsxMTUsNiBAQCBw
dWJsaWM6CiAjaWYgVVNFKENPUkVfVEVYVCkKICAgICBGb250UGxhdGZvcm1EYXRhKEdESU9iamVj
dDxIRk9OVD4sIENURm9udFJlZiwgQ0dGb250UmVmLCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRp
Y0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgYm9vbCB1c2VHREkpOwogI2VuZGlmCi0jaWYg
VVNFKERJUkVDVDJEKQotICAgIEZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiYmLCBD
T01QdHI8SURXcml0ZUZvbnQ+JiYsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9v
bCBzeW50aGV0aWNPYmxpcXVlLCBib29sIHVzZUdESSk7Ci0jZW5kaWYKICNpZiBVU0UoQ0FJUk8p
CiAgICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+LCBjYWlyb19mb250X2ZhY2Vf
dCosIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIGNvbnN0IENyZWF0aW9uRGF0
YSogPSBudWxscHRyKTsKICNlbmRpZgpAQCAtMTYzLDExICsxNTYsNiBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGhhc1ZhcmlhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2hhc1ZhcmlhdGlvbnM7IH0K
IAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBJRFdyaXRlRm9udCogZHdGb250KCkgY29uc3QgeyBy
ZXR1cm4gbV9kd0ZvbnQuZ2V0KCk7IH0KLSAgICBJRFdyaXRlRm9udEZhY2UqIGR3Rm9udEZhY2Uo
KSBjb25zdCB7IHJldHVybiBtX2R3Rm9udEZhY2UuZ2V0KCk7IH0KLSNlbmRpZgotCiAgICAgYm9v
bCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKICAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplOyB9CiAgICAgYm9vbCBzeW50aGV0aWNCb2xkKCkgY29uc3QgeyByZXR1cm4gbV9zeW50
aGV0aWNCb2xkOyB9CkBAIC0yNjgsMTEgKzI1Niw2IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBS
ZXRhaW5QdHI8Q1RGb250UmVmPiBtX2N0Rm9udDsKICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJE
KQotICAgIENPTVB0cjxJRFdyaXRlRm9udD4gbV9kd0ZvbnQ7Ci0gICAgQ09NUHRyPElEV3JpdGVG
b250RmFjZT4gbV9kd0ZvbnRGYWNlOwotI2VuZGlmCi0KICNpZiBVU0UoQ0FJUk8pCiAgICAgUmVm
UHRyPGNhaXJvX3NjYWxlZF9mb250X3Q+IG1fc2NhbGVkRm9udDsKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCShyZXZpc2lvbiAyODc4
MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSwxOSArMzksMTAgQEAKICNpbmNsdWRlICJHcmFkaWVudFJlbmRlcmVy
Q0cuaCIKICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIkNPTVB0ci5oIgot
I2VuZGlmCi0KICNpZiBVU0UoQ0cpCiB0eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQqIENHQ29udGV4
dFJlZjsKICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotaW50ZXJmYWNlIElEMkQxQnJ1c2g7
Ci1pbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7Ci0jZW5kaWYKLQogI2lmIFVTRShDQUlSTykK
IHR5cGVkZWYgc3RydWN0IF9jYWlyb19wYXR0ZXJuIGNhaXJvX3BhdHRlcm5fdDsKICNlbmRpZgpA
QCAtMTE4LDEwICsxMDksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludChDR0NvbnRleHRSZWYp
OwogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgSUQyRDFCcnVzaCogY3JlYXRlQnJ1
c2goSUQyRDFSZW5kZXJUYXJnZXQqKTsKLSNlbmRpZgotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxHcmFkaWVudD4+IGRlY29kZShE
ZWNvZGVyJik7CiAKQEAgLTEzOSwxMCArMTI2LDYgQEAgcHJpdmF0ZToKICNpZiBVU0UoQ0cpCiAg
ICAgc3RkOjpvcHRpb25hbDxHcmFkaWVudFJlbmRlcmVyQ0c+IG1fcGxhdGZvcm1SZW5kZXJlcjsK
ICNlbmRpZgotCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRDJEMUJydXNoPiBtX2Jy
dXNoOwotI2VuZGlmCiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIEdyYWRp
ZW50OjpMaW5lYXJEYXRhOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTUgKzQzLDYgQEAKIAogI2lm
IFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHQ29udGV4dCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLWludGVyZmFjZSBJRDJEMURDUmVuZGVyVGFyZ2V0Owot
aW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNlIElEMkQxRmFjdG9yeTsKLWlu
dGVyZmFjZSBJRDJEMVNvbGlkQ29sb3JCcnVzaDsKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNz
IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOwotfQotdHlwZWRlZiBXZWJDb3JlOjpQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKICNlbGlmIFVTRShDQUlSTykK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dENhaXJvOwpAQCAtMjY5
LDE1ICsyNjAsNiBAQCBwdWJsaWM6ICAgCiAgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250
ZXh0KCkgPSBkZWZhdWx0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkdyYXBoaWNzQ29u
dGV4dCgpOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBt
b3ZlIHRvIEdyYXBoaWNzQ29udGV4dERpcmVjdDJECi0gICAgZW51bSBjbGFzcyBCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0VHlwZSA6IHVpbnQ4X3QgewotICAgICAgICBDUFVNZW1vcnksCi0gICAgICAg
IEdQVU1lbW9yeQotICAgIH07Ci0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0KiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwotI2Vu
ZGlmCi0KICAgICB2aXJ0dWFsIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9y
bUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKQEAgLTM3Miw3ICszNTQsNyBA
QCBwdWJsaWM6ICAgCiAgICAgCiAgICAgdW5zaWduZWQgc3RhY2tTaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zdGFjay5zaXplKCk7IH0KIAotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lm
IFVTRShDRykKICAgICAvLyBGSVhNRTogU2hvdWxkIHRoZXNlIHJlYWxseSBiZSBwdWJsaWMgR3Jh
cGhpY3NDb250ZXh0IG1ldGhvZHM/CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVy
bigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpID0gMDsKQEAgLTU1
NywyNiArNTM5LDYgQEAgcHVibGljOiAgIAogICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBu
dWxscHRyOyB9CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBHcmFwaGljc0NvbnRl
eHQoSERDLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiosIFJFQ1QsIGJvb2wgaGFzQWxwaGEgPSBmYWxz
ZSk7IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkLgotCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IElEMkQxRmFjdG9yeSogc3lzdGVtRmFjdG9yeSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBJRDJEMVJlbmRlclRhcmdldCogZGVmYXVsdFJlbmRlclRhcmdldCgpOwotCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBiZWdpbkRyYXcoKTsKLSAgICBEMkQxX0NPTE9SX0YgY29sb3JXaXRoR2xv
YmFsQWxwaGEoY29uc3QgQ29sb3ImKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVu
ZERyYXcoKTsKLSAgICB2b2lkIGZsdXNoKCk7Ci0KLSAgICBJRDJEMUJydXNoKiBzb2xpZFN0cm9r
ZUJydXNoKCkgY29uc3Q7Ci0gICAgSUQyRDFCcnVzaCogc29saWRGaWxsQnJ1c2goKSBjb25zdDsK
LSAgICBJRDJEMUJydXNoKiBwYXR0ZXJuU3Ryb2tlQnJ1c2goKSBjb25zdDsKLSAgICBJRDJEMUJy
dXNoKiBwYXR0ZXJuRmlsbEJydXNoKCkgY29uc3Q7Ci0gICAgSUQyRDFTdHJva2VTdHlsZSogcGxh
dGZvcm1TdHJva2VTdHlsZSgpIGNvbnN0OwotCi0gICAgSUQyRDFTb2xpZENvbG9yQnJ1c2gqIGJy
dXNoV2l0aENvbG9yKGNvbnN0IENvbG9yJik7Ci0jZW5kaWYKLQogcHJpdmF0ZToKICAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkocmV2
aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDEwICsxNTYsMTAgQEAgcHVibGljOgogCiAgICAgZW51
bSBUaWxlUnVsZSB7IFN0cmV0Y2hUaWxlLCBSb3VuZFRpbGUsIFNwYWNlVGlsZSwgUmVwZWF0VGls
ZSB9OwogCi0gICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmly
dHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmly
dHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IHByZVRyYW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoYm9vbCA9IHRydWUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSB7
IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2
ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVs
bHB0cikgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdl
PiBuYXRpdmVJbWFnZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIFJlZlB0cjxO
YXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSB7IHJldHVybiBudWxscHRy
OyB9CisgICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IHByZVRyYW5zZm9ybWVkTmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCA9IHRydWUpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAg
ICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50
U2l6ZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIC8vIEFjY2Vzc29ycyBmb3IgbmF0aXZl
IGltYWdlIGZvcm1hdHMuCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsOCArMzAsNiBAQAogCiAjaWYgVVNFKENHKQogI2luY2x1ZGUgIkltYWdlRGVjb2RlckNH
LmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQu
aCIKICNlbHNlCiAjaW5jbHVkZSAiU2NhbGFibGVJbWFnZURlY29kZXIuaCIKICNlbmRpZgpAQCAt
MTA3LDggKzEwNSw2IEBAIFJlZlB0cjxJbWFnZURlY29kZXI+IEltYWdlRGVjb2Rlcjo6Y3JlYXQK
IAogI2lmIFVTRShDRykKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyQ0c6OmNyZWF0ZShkYXRhLCBh
bHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwotI2VsaWYgVVNFKERJUkVD
VDJEKQotICAgIHJldHVybiBJbWFnZURlY29kZXJEaXJlY3QyRDo6Y3JlYXRlKGRhdGEsIGFscGhh
T3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CiAjZWxzZQogICAgIHJldHVybiBT
Y2FsYWJsZUltYWdlRGVjb2Rlcjo6Y3JlYXRlKGRhdGEsIGFscGhhT3B0aW9uLCBnYW1tYUFuZENv
bG9yUHJvZmlsZU9wdGlvbik7CiAjZW5kaWYKQEAgLTExOSw5ICsxMTUsNiBAQCBib29sIEltYWdl
RGVjb2Rlcjo6c3VwcG9ydHNNZWRpYVR5cGUoTWVkCiAjaWYgVVNFKENHKQogICAgIGlmIChJbWFn
ZURlY29kZXJDRzo6c3VwcG9ydHNNZWRpYVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiB0cnVl
OwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIGlmIChJbWFnZURlY29kZXJEaXJlY3QyRDo6c3Vw
cG9ydHNNZWRpYVR5cGUodHlwZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwogI2Vsc2UKICAgICBp
ZiAoU2NhbGFibGVJbWFnZURlY29kZXI6OnN1cHBvcnRzTWVkaWFUeXBlKHR5cGUpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDEw
ICsxMzMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzQWxsRGF0YVJlY2VpdmVkKCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90
KSA9IDA7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgdmlydHVhbCB2b2lkIHNldFRhcmdldENv
bnRleHQoSUQyRDFSZW5kZXJUYXJnZXQqKSA9IDA7Ci0jZW5kaWYKLQogcHJvdGVjdGVkOgogICAg
IEltYWdlRGVjb2RlcigpID0gZGVmYXVsdDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCShyZXZpc2lvbiAyODc4MTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDExICszNCw2IEBACiAjaW5jbHVkZSA8d3RmL1N5c3RlbVRyYWNpbmcu
aD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIK
LSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEltYWdlU291cmNlOjpJbWFnZVNvdXJj
ZShCaXRtYXBJbWFnZSogaW1hZ2UsIEFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBHYW1tYUFuZENv
bG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKQEAgLTY5MywxNCAr
Njg4LDYgQEAgSW1hZ2VPcmllbnRhdGlvbiBJbWFnZVNvdXJjZTo6ZnJhbWVPcmllbgogICAgIHJl
dHVybiBmcmFtZUF0SW5kZXhDYWNoZUlmTmVlZGVkKGluZGV4LCBJbWFnZUZyYW1lOjpDYWNoaW5n
OjpNZXRhZGF0YSkub3JpZW50YXRpb24oKTsKIH0KIAotI2lmIFVTRShESVJFQ1QyRCkKLXZvaWQg
SW1hZ2VTb3VyY2U6OnNldFRhcmdldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJn
ZXRDb250ZXh0KQotewotICAgIGlmIChpc0RlY29kZXJBdmFpbGFibGUoKSAmJiB0YXJnZXRDb250
ZXh0KQotICAgICAgICBtX2RlY29kZXItPnNldFRhcmdldENvbnRleHQodGFyZ2V0Q29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpKTsKLX0KLSNlbmRpZgotCiBSZWZQdHI8
TmF0aXZlSW1hZ2U+IEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3Qg
aW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkKIHsKICAgICBpZiAoIWlz
RGVjb2RlckF2YWlsYWJsZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIs
OSArMTIyLDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFNlY29uZHMgZnJhbWVEdXJh
dGlvbkF0SW5kZXgoc2l6ZV90KTsKICAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRp
b25BdEluZGV4KHNpemVfdCk7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgdm9pZCBzZXRUYXJn
ZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCopOwotI2VuZGlmCiAgICAgUmVmUHRyPE5h
dGl2ZUltYWdlPiBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2
ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+
IGZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBmcmFt
ZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gU3Vi
c2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbnRQb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ludFBvaW50LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEyICs0
NSw2IEBAIHR5cGVkZWYgc3RydWN0IF9OU1BvaW50IE5TUG9pbnQ7CiAjaWYgUExBVEZPUk0oV0lO
KQogdHlwZWRlZiBzdHJ1Y3QgdGFnUE9JTlQgUE9JTlQ7CiB0eXBlZGVmIHN0cnVjdCB0YWdQT0lO
VFMgUE9JTlRTOwotCi1zdHJ1Y3QgRDJEX1BPSU5UXzJVOwotdHlwZWRlZiBEMkRfUE9JTlRfMlUg
RDJEMV9QT0lOVF8yVTsKLQotc3RydWN0IEQyRF9QT0lOVF8yRjsKLXR5cGVkZWYgRDJEX1BPSU5U
XzJGIEQyRDFfUE9JTlRfMkY7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdURiB7CkBAIC0xMzgsMTEg
KzEzMiw2IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBQT0lOVCgpIGNvbnN0OwogICAgIEludFBv
aW50KGNvbnN0IFBPSU5UUyYpOwogICAgIG9wZXJhdG9yIFBPSU5UUygpIGNvbnN0OwotCi0gICAg
SW50UG9pbnQoY29uc3QgRDJEMV9QT0lOVF8yVSYpOwotICAgIGV4cGxpY2l0IEludFBvaW50KGNv
bnN0IEQyRDFfUE9JTlRfMkYmKTsgLy8gRG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5LCBzaW5jZSBp
dCdzIGxvc3N5LgotICAgIG9wZXJhdG9yIEQyRDFfUE9JTlRfMkYoKSBjb25zdDsKLSAgICBvcGVy
YXRvciBEMkQxX1BPSU5UXzJVKCkgY29uc3Q7CiAjZW5kaWYKIAogcHJpdmF0ZToKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHJldmlzaW9uIDI4Nzgx
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgX05TUmVjdCBOU1JlY3Q7
CiAKICNpZiBQTEFURk9STShXSU4pCiB0eXBlZGVmIHN0cnVjdCB0YWdSRUNUIFJFQ1Q7Ci0KLXN0
cnVjdCBEMkRfUkVDVF9VOwotdHlwZWRlZiBEMkRfUkVDVF9VIEQyRDFfUkVDVF9VOwotCi1zdHJ1
Y3QgRDJEX1JFQ1RfRjsKLXR5cGVkZWYgRDJEX1JFQ1RfRiBEMkQxX1JFQ1RfRjsKICNlbmRpZgog
CiAjaWYgVVNFKENBSVJPKQpAQCAtMTk4LDEwICsxOTIsNiBAQCBwdWJsaWM6CiAjaWYgUExBVEZP
Uk0oV0lOKQogICAgIEludFJlY3QoY29uc3QgUkVDVCYpOwogICAgIG9wZXJhdG9yIFJFQ1QoKSBj
b25zdDsKLSAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEQyRDFfUkVDVF9GJik7Ci0gICAgSW50
UmVjdChjb25zdCBEMkQxX1JFQ1RfVSYpOwotICAgIG9wZXJhdG9yIEQyRDFfUkVDVF9GKCkgY29u
c3Q7Ci0gICAgb3BlcmF0b3IgRDJEMV9SRUNUX1UoKSBjb25zdDsKICNlbmRpZgogCiAjaWYgVVNF
KENBSVJPKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUu
aAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50U2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMiArNDksNiBAQCB0eXBlZGVmIHN0cnVj
dCBfTlNTaXplIE5TU2l6ZTsKIAogI2lmIFBMQVRGT1JNKFdJTikKIHR5cGVkZWYgc3RydWN0IHRh
Z1NJWkUgU0laRTsKLQotc3RydWN0IEQyRF9TSVpFX1U7Ci10eXBlZGVmIEQyRF9TSVpFX1UgRDJE
MV9TSVpFX1U7Ci0KLXN0cnVjdCBEMkRfU0laRV9GOwotdHlwZWRlZiBEMkRfU0laRV9GIEQyRDFf
U0laRV9GOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMTY2LDEwICsxNjAsNiBAQCBw
dWJsaWM6CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIEludFNpemUoY29uc3QgU0laRSYpOwogICAg
IG9wZXJhdG9yIFNJWkUoKSBjb25zdDsKLSAgICBJbnRTaXplKGNvbnN0IEQyRDFfU0laRV9VJik7
Ci0gICAgZXhwbGljaXQgSW50U2l6ZShjb25zdCBEMkQxX1NJWkVfRiYpOyAvLyBkb24ndCBkbyB0
aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeTsKLSAgICBvcGVyYXRvciBEMkQxX1NJWkVf
VSgpIGNvbnN0OwotICAgIG9wZXJhdG9yIEQyRDFfU0laRV9GKCkgY29uc3Q7CiAjZW5kaWYKIAog
ICAgIFN0cmluZyB0b0pTT05TdHJpbmcoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgJKHJldmlz
aW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFw
aGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiBwcml2YXRlOgotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShD
RykKICAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWwgeyB9CiAgICAgYm9v
bCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRp
ZgpAQCAtNTcsNyArNTcsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzKSBmaW5hbCB7IH0KIAotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lm
IFVTRShDRykKICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsg
fQogI2VuZGlmCiAKQEAgLTY3LDcgKzY3LDcgQEAgcHJpdmF0ZToKIAogICAgIEludFJlY3QgY2xp
cEJvdW5kcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQogCi0jaWYgVVNFKENHKSB8fCBV
U0UoRElSRUNUMkQpCisjaWYgVVNFKENHKQogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkg
ZmluYWwgeyB9CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWwgeyB9CiAgICAgdm9p
ZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgIVVTRShESVJFQ1QyRCkKIGZs
b2F0IFBhdGg6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZl
cnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxTdGF0ZTo6QWN0aW9uOjpUb3RhbExlbmd0aCk7CkBAIC01
MSw3ICs1MCw2IEBAIGZsb2F0IFBhdGg6Omxlbmd0aCgpIGNvbnN0CiAKICAgICByZXR1cm4gdHJh
dmVyc2FsU3RhdGUudG90YWxMZW5ndGgoKTsKIH0KLSNlbmRpZgogCiAjaWYgIUhBVkUoQ0dQQVRI
X0dFVF9OVU1CRVJfT0ZfRUxFTUVOVFMpCiAKQEAgLTEyNSw3ICsxMjMsNyBAQCB2b2lkIFBhdGg6
OmFkZFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91CiAgICAgfQogCiAgICAgaWYgKHN0cmF0ZWd5
ID09IFJvdW5kZWRSZWN0U3RyYXRlZ3k6OlByZWZlck5hdGl2ZSkgewotI2lmIFVTRShDRykgfHwg
VVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykKICAgICAgICAgcGxhdGZvcm1BZGRQYXRoRm9yUm91
bmRlZFJlY3QocmVjdCwgcmFkaWkudG9wTGVmdCgpLCByYWRpaS50b3BSaWdodCgpLCByYWRpaS5i
b3R0b21MZWZ0KCksIHJhZGlpLmJvdHRvbVJpZ2h0KCkpOwogICAgICAgICByZXR1cm47CiAjZW5k
aWYKQEAgLTUyNCw3ICs1MjIsNyBAQCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gUGF0aDo6Ym91
bmRpbmdSCiAKICNlbmRpZgogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkKKyNpZiAh
VVNFKENHKQogUGF0aCBQYXRoOjpwb2x5Z29uUGF0aEZyb21Qb2ludHMoY29uc3QgVmVjdG9yPEZs
b2F0UG9pbnQ+JiBwb2ludHMpCiB7CiAgICAgUGF0aCBwYXRoOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyMCAr
NDEsNiBAQAogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR1BhdGguaD4KIHR5cGVkZWYgc3RydWN0
IENHUGF0aCBQbGF0Zm9ybVBhdGg7CiAKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJD
T01QdHIuaCIKLQotaW50ZXJmYWNlIElEMkQxR2VvbWV0cnk7Ci1pbnRlcmZhY2UgSUQyRDFHZW9t
ZXRyeUdyb3VwOwotaW50ZXJmYWNlIElEMkQxUGF0aEdlb21ldHJ5OwotaW50ZXJmYWNlIElEMkQx
R2VvbWV0cnlTaW5rOwotCi10eXBlZGVmIElEMkQxR2VvbWV0cnlHcm91cCBQbGF0Zm9ybVBhdGg7
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOwot
fQotCiAjZWxpZiBVU0UoQ0FJUk8pCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKIApAQCAtNjks
OCArNTUsNiBAQCB0eXBlZGVmIFBsYXRmb3JtUGF0aCogUGxhdGZvcm1QYXRoUHRyOwogCiAjaWYg
VVNFKENHKQogdXNpbmcgUGxhdGZvcm1QYXRoU3RvcmFnZVR5cGUgPSBSZXRhaW5QdHI8Q0dNdXRh
YmxlUGF0aFJlZj47Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi11c2luZyBQbGF0Zm9ybVBhdGhTdG9y
YWdlVHlwZSA9IENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+OwogI2Vsc2UKIHVzaW5nIFBsYXRm
b3JtUGF0aFN0b3JhZ2VUeXBlID0gUGxhdGZvcm1QYXRoUHRyOwogI2VuZGlmCkBAIC0xODksMTAg
KzE3Myw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFRvIGtlZXAgUGF0aCgpIGNoZWFwLCBpdCBkb2Vz
IG5vdCBhbGxvY2F0ZSBhIFBsYXRmb3JtUGF0aCBpbW1lZGlhdGVseQogICAgIC8vIG1lYW5pbmcg
UGF0aDo6cGxhdGZvcm1QYXRoKCkgY2FuIHJldHVybiBudWxsLgotI2lmIFVTRShESVJFQ1QyRCkK
LSAgICBGbG9hdFJlY3QgZmFzdEJvdW5kaW5nUmVjdEZvclN0cm9rZShjb25zdCBQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYpIGNvbnN0OwotICAgIFBsYXRmb3JtUGF0aFB0ciBwbGF0Zm9ybVBhdGgo
KSBjb25zdCB7IHJldHVybiBtX3BhdGguZ2V0KCk7IH0KLSNlbGlmIFVTRShDRykKKyNpZiBVU0Uo
Q0cpCiAgICAgV0VCQ09SRV9FWFBPUlQgUGxhdGZvcm1QYXRoUHRyIHBsYXRmb3JtUGF0aCgpIGNv
bnN0OwogI2VsaWYgVVNFKENBSVJPKQogICAgIGNhaXJvX3QqIGNhaXJvUGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0aC5nZXQoKTsgfQpAQCAtMjE3LDE5ICsxOTgsMTAgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBhZGRCZXppZXJzRm9yUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVz
LCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90
dG9tUmlnaHRSYWRpdXMpOwogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNF
KENHKQogICAgIHZvaWQgcGxhdGZvcm1BZGRQYXRoRm9yUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRv
cFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZs
b2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpOwogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQp
Ci0gICAgdm9pZCBhcHBlbmRHZW9tZXRyeShJRDJEMUdlb21ldHJ5Kik7Ci0gICAgdm9pZCBjcmVh
dGVHZW9tZXRyeVdpdGhGaWxsTW9kZShXaW5kUnVsZSwgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91
cD4mKSBjb25zdDsKLQotICAgIHZvaWQgb3BlbkZpZ3VyZUF0Q3VycmVudFBvaW50SWZOZWNlc3Nh
cnkoKTsKLSAgICB2b2lkIGNsb3NlQW55T3Blbkdlb21ldHJpZXModW5zaWduZWQgZmlndXJlRW5k
U3R5bGUpIGNvbnN0OwotICAgIHZvaWQgY2xlYXJHZW9tZXRyaWVzKCk7Ci0jZW5kaWYKLQogI2lm
bmRlZiBOREVCVUcKICAgICB2b2lkIGR1bXAoKSBjb25zdDsKICNlbmRpZgpAQCAtMjgwLDEyICsy
NTIsNiBAQCBwcml2YXRlOgogICAgIG11dGFibGUgUGxhdGZvcm1QYXRoU3RvcmFnZVR5cGUgbV9w
YXRoOwogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgVmVjdG9yPElEMkQxR2VvbWV0
cnkqPiBtX2dlb21ldHJpZXM7Ci0gICAgbXV0YWJsZSBDT01QdHI8SUQyRDFHZW9tZXRyeVNpbms+
IG1fYWN0aXZlUGF0aDsKLSAgICBtdXRhYmxlIGJvb2wgbV9maWd1cmVJc09wZW5lZCB7IGZhbHNl
IH07Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIElubGluZVBh
dGhEYXRhIG1faW5saW5lRGF0YTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMyAr
MzYsNiBAQAogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHUGF0dGVybiogQ0dQYXR0ZXJu
UmVmOwogdHlwZWRlZiBSZXRhaW5QdHI8Q0dQYXR0ZXJuUmVmPiBQbGF0Zm9ybVBhdHRlcm5QdHI7
Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQyRDFCaXRtYXBCcnVzaDsKLXR5cGVk
ZWYgSUQyRDFCaXRtYXBCcnVzaCogUGxhdGZvcm1QYXR0ZXJuUHRyOwotbmFtZXNwYWNlIFdlYkNv
cmUgewotY2xhc3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ7Ci19Ci10eXBlZGVmIFdlYkNvcmU6
OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwogI2VsaWYg
VVNFKENBSVJPKQogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90
OwogdHlwZWRlZiBjYWlyb19wYXR0ZXJuX3QqIFBsYXRmb3JtUGF0dGVyblB0cjsKQEAgLTc3LDEx
ICs3MCw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CiAKICAgICAvLyBQYXR0ZXJuIHNwYWNlIGlzIGFu
IGFic3RyYWN0IHNwYWNlIHRoYXQgbWFwcyB0byB0aGUgZGVmYXVsdCB1c2VyIHNwYWNlIGJ5IHRo
ZSB0cmFuc2Zvcm1hdGlvbiAndXNlclNwYWNlVHJhbnNmb3JtJwotI2lmICFVU0UoRElSRUNUMkQp
CiAgICAgUGxhdGZvcm1QYXR0ZXJuUHRyIGNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW5zZm9ybSkgY29uc3Q7Ci0jZWxzZQotICAgIFBsYXRm
b3JtUGF0dGVyblB0ciBjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgR3JhcGhpY3NDb250ZXh0
JiwgZmxvYXQgYWxwaGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3Jt
KSBjb25zdDsKLSNlbmRpZgorCiAgICAgdm9pZCBzZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
U3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMucGF0dGVyblNwYWNl
VHJhbnNmb3JtOyB9OwogICAgIGJvb2wgcmVwZWF0WCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1l
dGVycy5yZXBlYXRYOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybUltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1JbWFnZS5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDggKzM2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgVVNFKENHKQogdXNpbmcgUGxh
dGZvcm1JbWFnZVB0ciA9IFJldGFpblB0cjxDR0ltYWdlUmVmPjsKLSNlbGlmIFVTRShESVJFQ1Qy
RCkKLXVzaW5nIFBsYXRmb3JtSW1hZ2VQdHIgPSBDT01QdHI8SUQyRDFCaXRtYXA+OwogI2VsaWYg
VVNFKENBSVJPKQogdXNpbmcgUGxhdGZvcm1JbWFnZVB0ciA9IFJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDggKzMwLDYgQEAKIAogI2lmIFVTRShDRykKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIgotI2VsaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUg
IkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgiCiAjZWxpZiBVU0UoQ0FJUk8pCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaCIKICNlbmRpZgpAQCAtNDQs
OCArNDIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoQ0cpCiB1c2luZyBVbmFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ7
Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi11c2luZyBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNr
ZW5kID0gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ7CiAjZWxpZiBVU0UoQ0FJUk8pCiB1c2lu
ZyBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQ7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaAko
cmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsNiBA
QAogCiAjaWYgVVNFKENHKQogI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCi0jZWxp
ZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIK
ICNlbGlmIFVTRShDQUlSTykKICNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgog
I2VuZGlmCkBAIC0zNyw4ICszNSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShD
RykKIHVzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0JhY2tl
bmQ7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi11c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2Vu
ZCA9IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOwogI2VsaWYgVVNFKENBSVJPKQogdXNpbmcg
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDsKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L2NmL0NETVNlc3Npb25BVkZvdW5kYXRpb25DRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL0NETVNlc3Npb25BVkZvdW5k
YXRpb25DRi5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9DRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0YuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MywxNCArNTMsNiBAQCBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0Y6
OkNETVNlc3Npb25BVkZvCiAKIFJlZlB0cjxVaW50OEFycmF5PiBDRE1TZXNzaW9uQVZGb3VuZGF0
aW9uQ0Y6OmdlbmVyYXRlS2V5UmVxdWVzdChjb25zdCBTdHJpbmcmLCBVaW50OEFycmF5KiBpbml0
RGF0YSwgU3RyaW5nJiBkZXN0aW5hdGlvblVSTCwgdW5zaWduZWQgc2hvcnQmIGVycm9yQ29kZSwg
dWludDMyX3QmIHN5c3RlbUNvZGUpCiB7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIFVOVVNFRF9Q
QVJBTShpbml0RGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uVVJMKTsKLSAgICBV
TlVTRURfUEFSQU0oZXJyb3JDb2RlKTsKLSAgICBVTlVTRURfUEFSQU0oc3lzdGVtQ29kZSk7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSNlbHNlCiAgICAgU3Ry
aW5nIGtleVVSSTsKICAgICBTdHJpbmcga2V5SUQ7CiAgICAgUmVmUHRyPFVpbnQ4QXJyYXk+IGNl
cnRpZmljYXRlOwpAQCAtMTAyLDcgKzk0LDYgQEAgUmVmUHRyPFVpbnQ4QXJyYXk+IENETVNlc3Np
b25BVkZvdW5kYXRpbwogCiAgICAgYXV0byBrZXlSZXF1ZXN0QnVmZmVyID0gQXJyYXlCdWZmZXI6
OmNyZWF0ZShDRkRhdGFHZXRCeXRlUHRyKGtleVJlcXVlc3QuZ2V0KCkpLCBDRkRhdGFHZXRMZW5n
dGgoa2V5UmVxdWVzdC5nZXQoKSkpOwogICAgIHJldHVybiBVaW50OEFycmF5Ojp0cnlDcmVhdGUo
V1RGTW92ZShrZXlSZXF1ZXN0QnVmZmVyKSwgMCwga2V5UmVxdWVzdEJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpKTsKLSNlbmRpZgogfQogCiB2b2lkIENETVNlc3Npb25BVkZvdW5kYXRpb25DRjo6cmVsZWFz
ZUtleXMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTQsMTEgKzg5NCw3
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnAKICAgICAgICAgY29u
dGV4dC5zY2FsZShGbG9hdFNpemUoMS4wZiwgLTEuMGYpKTsKICAgICAgICAgY29udGV4dC5zZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5OjpMb3cpOwogICAg
ICAgICBGbG9hdFJlY3QgcGFpbnRSZWN0KEZsb2F0UG9pbnQoKSwgcmVjdC5zaXplKCkpOwotI2lm
IFVTRShESVJFQ1QyRCkKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbHNlCiAgICAgICAg
IENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBDR1JlY3RNYWtl
KDAsIDAsIHBhaW50UmVjdC53aWR0aCgpLCBwYWludFJlY3QuaGVpZ2h0KCkpLCBpbWFnZS5nZXQo
KSk7Ci0jZW5kaWYKICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CiAgICAgICAgIGltYWdlID0g
MDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZE
b2N1bWVudEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2MiwxNiArMzYyLDEyIEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6
ZHJhd1BERlBhZ2UoR3JhcGgKIAogICAgIGNvbnRleHQudHJhbnNsYXRlKC1tX2Nyb3BCb3gubG9j
YXRpb24oKSk7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSNl
bHNlCiAgICAgLy8gQ0dQREYgcGFnZXMgYXJlIGluZGV4ZWQgZnJvbSAxLgogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIENHQ29udGV4dERyYXdQREZQYWdlV2l0aEFubm90YXRpb25zKGNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCksIENHUERGRG9jdW1lbnRHZXRQYWdlKG1fZG9jdW1lbnQuZ2V0KCks
IDEpLCBudWxscHRyKTsKICNlbHNlCiAgICAgQ0dDb250ZXh0RHJhd1BERlBhZ2UoY29udGV4dC5w
bGF0Zm9ybUNvbnRleHQoKSwgQ0dQREZEb2N1bWVudEdldFBhZ2UobV9kb2N1bWVudC5nZXQoKSwg
MSkpOwogI2VuZGlmCi0jZW5kaWYKIH0KIAogI2VuZGlmIC8vICFVU0UoUERGS0lUX0ZPUl9QREZE
T0NVTUVOVElNQUdFKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5o
CShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODks
NyArMTg5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KIAotI2lmIFVT
RShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykKICAgICB2b2lkIHNldElzQ0FMYXll
ckNvbnRleHQoYm9vbCkgZmluYWwgeyB9CiAgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29u
c3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250
ZXh0KGJvb2wpIGZpbmFsIHsgfQpAQCAtMjIwLDcgKzIyMCw3IEBAIHByaXZhdGU6CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNFKENHKQogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBl
L09wZW5UeXBlTWF0aERhdGEuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjU5LDEwICsyNTksNiBAQCBPcGVuVHlwZU1hdGhEYXRhOjpPcGVuVHlwZU1h
dGhEYXRhKGNvbnN0CiAgICAgOiBtX21hdGhGb250KGZvbnQuY3JlYXRlT3BlblR5cGVNYXRoSGFy
ZkJ1enpGb250KCkpCiB7CiB9Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi1PcGVuVHlwZU1hdGhEYXRh
OjpPcGVuVHlwZU1hdGhEYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnQpCi17Ci19CiAj
ZWxzZQogT3BlblR5cGVNYXRoRGF0YTo6T3BlblR5cGVNYXRoRGF0YShjb25zdCBGb250UGxhdGZv
cm1EYXRhJikgPSBkZWZhdWx0OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRp
ZXMuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDExICszMCw2IEBACiAjaW5jbHVkZSAiRm9udE1lbW9yeVJlc291cmNlLmgiCiAjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiRGlyZWN0V3Jp
dGVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgotI2VuZGlmCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RydWN0IEJpZ0VuZGlhblVTaG9ydCB7IApAQCAtMjgxLDExICsyNzYs
NiBAQCBSZWZQdHI8Rm9udE1lbW9yeVJlc291cmNlPiByZW5hbWVBbmRBY3RpCiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIEhSRVNVTFQgaHIgPSBE
aXJlY3RXcml0ZTo6YWRkRm9udEZyb21EYXRhVG9Qcm9jZXNzQ29sbGVjdGlvbihyZXdyaXR0ZW5G
b250RGF0YSk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotI2VuZGlmCi0KICAgICByZXR1
cm4gRm9udE1lbW9yeVJlc291cmNlOjpjcmVhdGUoZm9udEhhbmRsZSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0
bWFwVGV4dHVyZS5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsMTEgKzU0LDYgQEAgdm9pZCBCaXRtYXBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyhHcmFwaAog
CiAgICAgc291cmNlTGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIHNv
dXJjZVJlY3QpOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIC8vIFdlIGNhbid0IGFjY2VzcyB0
aGUgYml0cyBpbiB0aGUgaW1hZ2UgYnVmZmVyIHdpdGggYW4gYWN0aXZlIGJlZ2luRHJhdy4KLSAg
ICBjb250ZXh0LmVuZERyYXcoKTsKLSNlbmRpZgotCiAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9
IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgIGlmICgh
aW1hZ2UpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuY3BwCShyZXZp
c2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Qml0bWFwVGV4dHVyZUdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTEgKzQyLDYgQEAKICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkK
LSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d2luY29kZWMuaD4KLSNlbmRpZgotCiAjaWYg
T1MoREFSV0lOKQogI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYgMHg4MzY3CiAj
ZW5kaWYKQEAgLTE2Myw4ICsxNTgsNiBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29u
dGVudHMoSW1hCiAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gZnJhbWVJbWFnZS0+cGxh
dGZvcm1JbWFnZSgpLmdldCgpOwogICAgIGltYWdlRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2RhdGEoc3VyZmFjZSk7CiAgICAgYnl0ZXNQZXJMaW5lID0gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfc3RyaWRlKHN1cmZhY2UpOwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIG5vdEltcGxl
bWVudGVkKCk7CiAjZW5kaWYKIAogICAgIHVwZGF0ZUNvbnRlbnRzKGltYWdlRGF0YSwgdGFyZ2V0
UmVjdCwgb2Zmc2V0LCBieXRlc1BlckxpbmUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9y
bS5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSAr
MzYsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgQ0dBZmZpbmVUcmFuc2Zvcm0gQ0dBZmZpbmVUcmFuc2Zv
cm07CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFdJTikKLXN0cnVjdCBEMkRfTUFUUklYXzNYMl9G
OwotdHlwZWRlZiBEMkRfTUFUUklYXzNYMl9GIEQyRDFfTUFUUklYXzNYMl9GOwotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXVEYgewogY2xhc3MgVGV4dFN0cmVhbTsKIH0KQEAgLTY3LDEwICs2Miw2IEBA
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0oY29uc3QgQ0dBZmZp
bmVUcmFuc2Zvcm0mKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIEFmZmluZVRy
YW5zZm9ybShjb25zdCBEMkQxX01BVFJJWF8zWDJfRiYpOwotI2VuZGlmCi0KICAgICB2b2lkIHNl
dE1hdHJpeChkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIGUs
IGRvdWJsZSBmKTsKIAogICAgIHZvaWQgbWFwKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlJiB4
MiwgZG91YmxlJiB5MikgY29uc3Q7CkBAIC0xODksMTAgKzE4MCw2IEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCBvcGVyYXRvciBDR0FmZmluZVRyYW5zZm9ybSgpIGNvbnN0OwogI2VuZGlm
CiAKLSNpZiBQTEFURk9STShXSU4pCi0gICAgb3BlcmF0b3IgRDJEMV9NQVRSSVhfM1gyX0YoKSBj
b25zdDsKLSNlbmRpZgotCiAgICAgc3RhdGljIEFmZmluZVRyYW5zZm9ybSB0cmFuc2xhdGlvbihk
b3VibGUgeCwgZG91YmxlIHkpCiAgICAgewogICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3Jt
KDEsIDAsIDAsIDEsIHgsIHkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRy
aXguaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSwxMSArNDksNiBAQCB0eXBlZGVmIHN0cnVjdCB0YWdYRk9STSBYRk9STTsKICNlbmRpZgogI2Vu
ZGlmCiAKLSNpZiBQTEFURk9STShXSU4pCi1zdHJ1Y3QgRDJEX01BVFJJWF8zWDJfRjsKLXR5cGVk
ZWYgRDJEX01BVFJJWF8zWDJfRiBEMkQxX01BVFJJWF8zWDJfRjsKLSNlbmRpZgotCiBuYW1lc3Bh
Y2UgV1RGIHsKIGNsYXNzIFRleHRTdHJlYW07CiB9CkBAIC0zOTIsMTEgKzM4Nyw2IEBAIHB1Ymxp
YzoKICAgICBvcGVyYXRvciBYRk9STSgpIGNvbnN0OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShX
SU4pCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3QgRDJEMV9NQVRSSVhfM1gyX0YmKTsK
LSAgICBvcGVyYXRvciBEMkQxX01BVFJJWF8zWDJfRigpIGNvbnN0OwotI2VuZGlmCi0KICAgICBi
b29sIGlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVy
biBtX21hdHJpeFswXVswXSA9PSAxICYmIG1fbWF0cml4WzBdWzFdID09IDAgJiYgbV9tYXRyaXhb
MF1bMl0gPT0gMCAmJiBtX21hdHJpeFswXVszXSA9PSAwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJELmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9y
ZUJhY2tlbmREaXJlY3QyRC5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJELmgJKG5vbmV4
aXN0ZW50KQpAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5j
bHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHdpbmNvZGVj
Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLWludGVyZmFjZSBJRDJEMUJpdG1h
cDsKLWludGVyZmFjZSBJRDJEMUJpdG1hcEJydXNoOwotaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFy
Z2V0OwotaW50ZXJmYWNlIElEM0QxMURldmljZTE7Ci1pbnRlcmZhY2UgSURYR0lTdXJmYWNlMTsK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0
MkQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3Qy
RCk7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+
QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJEKCkgPSBkZWZhdWx0OwotCi0gICAgSUQyRDFSZW5k
ZXJUYXJnZXQqIHJlbmRlclRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyVGFyZ2V0Lmdl
dCgpOyB9Ci0gICAgSUQyRDFCaXRtYXAqIHN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3N1cmZh
Y2UuZ2V0KCk7IH0KLSAgICBJRFhHSVN1cmZhY2UxKiBkeFN1cmZhY2UoKSBjb25zdCB7IHJldHVy
biBtX2R4U3VyZmFjZS5nZXQoKTsgfQotICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoY29uc3QgSW50UmVj
dCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KSA9IDA7Ci0gICAgdmly
dHVhbCBJRDJEMUJpdG1hcEJydXNoKiBiaXRtYXBCcnVzaCgpID0gMDsKLQotcHJvdGVjdGVkOgot
ICAgIEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRChjb25zdCBJbnRTaXplJiBzaXplLCBJRDNE
MTFEZXZpY2UxKiBkZXZpY2UpCi0gICAgICAgIDogbV9kZXZpY2UoZGV2aWNlKQotICAgICAgICAs
IG1fc2l6ZShzaXplKQotICAgIHsKLSAgICB9Ci0KLSAgICBDT01QdHI8SUQzRDExRGV2aWNlMT4g
bV9kZXZpY2U7Ci0gICAgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBtX3JlbmRlclRhcmdldDsK
LSAgICBDT01QdHI8SURYR0lTdXJmYWNlMT4gbV9keFN1cmZhY2U7Ci0gICAgQ09NUHRyPElEMkQx
Qml0bWFwPiBtX3N1cmZhY2U7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci19OwotCi0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJ
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5jcHAJKHJldmlzaW9uIDI4NzgxMikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNr
ZW5kRGlyZWN0MkRJbXBsLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDEyNyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJhY2tpbmdTdG9yZUJhY2tl
bmREaXJlY3QyREltcGwuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkRpcmVj
dDJEVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0
U2l6ZS5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCi0jaW5jbHVkZSAiSW50
UmVjdC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0jaW5j
bHVkZSA8d2luY29kZWMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3Qg
U2Vjb25kcyBzY3JvbGxIeXN0ZXJlc2lzRHVyYXRpb24geyAzMDBfbXMgfTsKLQotQmFja2luZ1N0
b3JlQmFja2VuZERpcmVjdDJESW1wbDo6QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbChj
b25zdCBJbnRTaXplJiBzaXplLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgSUQzRDExRGV2aWNl
MSogZGV2aWNlKQotICAgIDogQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJEKHNpemUsIGRldmlj
ZSkKLSAgICAsIG1fc2Nyb2xsZWRIeXN0ZXJlc2lzKFt0aGlzXShQQUw6Okh5c3RlcmVzaXNTdGF0
ZSBzdGF0ZSkgewotICAgICAgICBpZiAoc3RhdGUgPT0gUEFMOjpIeXN0ZXJlc2lzU3RhdGU6OlN0
b3BwZWQpCi0gICAgICAgICAgICBtX3Njcm9sbFN1cmZhY2UgPSBudWxscHRyOwotICAgICAgICB9
LCBzY3JvbGxIeXN0ZXJlc2lzRHVyYXRpb24pCi17Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0g
bV9zaXplOwotICAgIHNjYWxlZFNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwotCi0gICAg
bV9keFN1cmZhY2UgPSBXZWJDb3JlOjpEaXJlY3QyRDo6Y3JlYXRlRFhHSVN1cmZhY2VPZlNpemUo
c2NhbGVkU2l6ZSwgbV9kZXZpY2UuZ2V0KCksIGZhbHNlKTsKLSAgICBtX3JlbmRlclRhcmdldCA9
IFdlYkNvcmU6OkRpcmVjdDJEOjpjcmVhdGVTdXJmYWNlUmVuZGVyVGFyZ2V0KG1fZHhTdXJmYWNl
LmdldCgpKTsKLQotICAgIGF1dG8gYml0bWFwUHJvcGVydGllcyA9IERpcmVjdDJEOjpiaXRtYXBQ
cm9wZXJ0aWVzKCk7Ci0gICAgSFJFU1VMVCBociA9IG1fcmVuZGVyVGFyZ2V0LT5DcmVhdGVTaGFy
ZWRCaXRtYXAoX191dWlkb2YoSURYR0lTdXJmYWNlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KG1fZHhTdXJmYWNlLmdldCgpKSwgJmJpdG1hcFByb3BlcnRpZXMsICZtX3N1cmZhY2UpOwotICAg
IFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotfQotCi1CYWNraW5nU3RvcmVCYWNrZW5k
RGlyZWN0MkRJbXBsOjp+QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbCgpCi17Ci19Ci0K
LXZvaWQgQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbDo6c2Nyb2xsKGNvbnN0IEludFJl
Y3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkKLXsKLSAgICBJbnRS
ZWN0IHNvdXJjZVJlY3QgPSBzY3JvbGxSZWN0OwotICAgIHNvdXJjZVJlY3QubW92ZSgtc2Nyb2xs
T2Zmc2V0KTsKLSAgICBzb3VyY2VSZWN0LmludGVyc2VjdChzY3JvbGxSZWN0KTsKLQotICAgIGlm
IChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3Nj
cm9sbFN1cmZhY2UgfHwgc2Nyb2xsUmVjdC5zaXplKCkgIT0gbV9zY3JvbGxTdXJmYWNlU2l6ZSkg
ewotI2lmbmRlZiBfTkRFQlVHCi0gICAgICAgIEFTU0VSVChtX3NpemUud2lkdGgoKSA+PSBzY3Jv
bGxSZWN0LnNpemUoKS53aWR0aCgpKTsKLSAgICAgICAgQVNTRVJUKG1fc2l6ZS5oZWlnaHQoKSA+
PSBzY3JvbGxSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0jZW5kaWYKLSAgICAgICAgbV9zY3JvbGxT
dXJmYWNlU2l6ZSA9IHNvdXJjZVJlY3Quc2l6ZSgpOwotICAgICAgICBtX2R4U2Nyb2xsU3VyZmFj
ZSA9IFdlYkNvcmU6OkRpcmVjdDJEOjpjcmVhdGVEWEdJU3VyZmFjZU9mU2l6ZShtX3Njcm9sbFN1
cmZhY2VTaXplLCBtX2RldmljZS5nZXQoKSwgZmFsc2UpOwotCi0gICAgICAgIG1fc2Nyb2xsU3Vy
ZmFjZSA9IG51bGxwdHI7Ci0gICAgICAgIGF1dG8gYml0bWFwUHJvcGVydGllcyA9IERpcmVjdDJE
OjpiaXRtYXBQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBtX3JlbmRlclRhcmdl
dC0+Q3JlYXRlU2hhcmVkQml0bWFwKF9fdXVpZG9mKElEWEdJU3VyZmFjZTEpLCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihtX2R4U2Nyb2xsU3VyZmFjZS5nZXQoKSksICZiaXRtYXBQcm9wZXJ0aWVz
LCAmbV9zY3JvbGxTdXJmYWNlKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0gICAgfQotCi0gICAgYXV0byBzb3VyY2VSZWN0TG9jYXRpb24gPSBJbnRTaXplKHNvdXJj
ZVJlY3QueCgpLCBzb3VyY2VSZWN0LnkoKSk7Ci0gICAgYXV0byBkZXN0UmVjdExvY2F0aW9uID0g
SW50U2l6ZSgpOyAvLyBUb3AgbGVmdCBjb3JuZXIgb2Ygc2Nyb2xsIHN1cmZhY2UKLSAgICBEaXJl
Y3QyRDo6Y29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihtX3N1cmZhY2UuZ2V0KCksIG1f
c2Nyb2xsU3VyZmFjZS5nZXQoKSwgc291cmNlUmVjdExvY2F0aW9uLCBzb3VyY2VSZWN0LCBkZXN0
UmVjdExvY2F0aW9uKTsKLQotICAgIEludFJlY3QgZGVzdFJlY3QgPSBzY3JvbGxSZWN0OwotICAg
IGRlc3RSZWN0LnNldEhlaWdodChzb3VyY2VSZWN0LmhlaWdodCgpKTsKLSAgICBkZXN0UmVjdC5z
ZXRXaWR0aChzb3VyY2VSZWN0LndpZHRoKCkpOwotCi0gICAgSW50U2l6ZSBkZXN0UG9zaXRpb247
Ci0gICAgaWYgKHNjcm9sbE9mZnNldC53aWR0aCgpID4gMCB8fCBzY3JvbGxPZmZzZXQuaGVpZ2h0
KCkgPiAwKSB7Ci0gICAgICAgIGRlc3RQb3NpdGlvbi5zZXRXaWR0aChzdGQ6Om1pbihzY3JvbGxS
ZWN0LndpZHRoKCksIHNjcm9sbE9mZnNldC53aWR0aCgpKSk7Ci0gICAgICAgIGRlc3RQb3NpdGlv
bi5zZXRIZWlnaHQoc3RkOjptaW4oc2Nyb2xsUmVjdC5oZWlnaHQoKSwgc2Nyb2xsT2Zmc2V0Lmhl
aWdodCgpKSk7Ci0gICAgfQotCi0gICAgYXV0byBzb3VyY2VTY3JvbGxTdXJmYWNlTG9jYXRpb24g
PSBJbnRTaXplKCk7IC8vIFRvcCBsZWZ0IGNvcm5lciBvZiBzY3JvbGwgc3VyZmFjZQotICAgIERp
cmVjdDJEOjpjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKG1fc2Nyb2xsU3VyZmFjZS5n
ZXQoKSwgbV9zdXJmYWNlLmdldCgpLCBzb3VyY2VTY3JvbGxTdXJmYWNlTG9jYXRpb24sIGRlc3RS
ZWN0LCBkZXN0UG9zaXRpb24pOwotCi0gICAgbV9zY3JvbGxlZEh5c3RlcmVzaXMuaW1wdWxzZSgp
OwotfQotCi1JRDJEMUJpdG1hcEJydXNoKiBCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBs
OjpiaXRtYXBCcnVzaCgpCi17Ci0gICAgaWYgKCFtX3JlbmRlclRhcmdldCB8fCAhbV9zdXJmYWNl
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghbV9iaXRtYXBCcnVzaCkgewot
ICAgICAgICBhdXRvIGJpdG1hcEJydXNoUHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcEJydXNoUHJv
cGVydGllcygpOwotICAgICAgICBhdXRvIGJydXNoUHJvcGVydGllcyA9IEQyRDE6OkJydXNoUHJv
cGVydGllcygpOwotCi0gICAgICAgIEhSRVNVTFQgaHIgPSBtX3JlbmRlclRhcmdldC0+Q3JlYXRl
Qml0bWFwQnJ1c2gobV9zdXJmYWNlLmdldCgpLCAmYml0bWFwQnJ1c2hQcm9wZXJ0aWVzLCAmYnJ1
c2hQcm9wZXJ0aWVzLCAmbV9iaXRtYXBCcnVzaCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQo
aHIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9iaXRtYXBCcnVzaC5nZXQoKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJl
Y3QyREltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5oCShyZXZpc2lvbiAyODc4MTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFj
a2VuZERpcmVjdDJESW1wbC5oCShub25leGlzdGVudCkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQmFj
a2luZ1N0b3JlQmFja2VuZERpcmVjdDJELmgiCi0jaW5jbHVkZSA8cGFsL0h5c3RlcmVzaXNBY3Rp
dml0eS5oPgotCi1pbnRlcmZhY2UgSUQyRDFCaXRtYXBCcnVzaDsKLWludGVyZmFjZSBJRFhHSVN1
cmZhY2UxOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEludFNpemU7Ci0KLWNsYXNz
IEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwgZmluYWwgOiBwdWJsaWMgQmFja2luZ1N0
b3JlQmFja2VuZERpcmVjdDJEIHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBCYWNraW5n
U3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsKGNvbnN0IEludFNpemUmLCBmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3RvciwgSUQzRDExRGV2aWNlMSopOwotICAgIHZpcnR1YWwgfkJhY2tpbmdTdG9yZUJhY2tl
bmREaXJlY3QyREltcGwoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHNjcm9sbChjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwotICAgIElEMkQxQml0bWFwQnJ1c2gqIGJp
dG1hcEJydXNoKCkgb3ZlcnJpZGU7Ci0KLSAgICBJbnRTaXplIG1fc2Nyb2xsU3VyZmFjZVNpemU7
Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBtX3Njcm9sbFN1cmZhY2U7Ci0gICAgQ09NUHRyPElE
WEdJU3VyZmFjZTE+IG1fZHhTY3JvbGxTdXJmYWNlOwotICAgIENPTVB0cjxJRDJEMUJpdG1hcEJy
dXNoPiBtX2JpdG1hcEJydXNoOwotCi0gICAgUEFMOjpIeXN0ZXJlc2lzQWN0aXZpdHkgbV9zY3Jv
bGxlZEh5c3RlcmVzaXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vQ29sb3JEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKG5v
bmV4aXN0ZW50KQpAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNv
bG9yLmgiCi0KLSNpZiBQTEFURk9STShXSU4pCi0KLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVk
ZSA8ZDJkMV8xaGVscGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ29sb3I6OkNvbG9y
KEQyRDFfQ09MT1JfRiBjb2xvcikKLSAgICA6IENvbG9yKGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50
OF90Pj4oU1JHQkE8ZmxvYXQ+IHsgY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSB9
KSkKLXsKLX0KLQotQ29sb3I6Om9wZXJhdG9yIEQyRDFfQ09MT1JfRigpIGNvbnN0Ci17Ci0gICAg
YXV0byBbciwgZywgYiwgYV0gPSB0b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNv
bHZlZCgpOwotICAgIHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwgYSk7Ci19Ci0KLUNvbG9y
OjpvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RigpIGNvbnN0Ci17Ci0gICAgYXV0byBbciwgZywgYiwg
YV0gPSB0b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwotICAgIHJl
dHVybiBEMkQxOjpWZWN0b3I0RihyLCBnLCBiLCBhKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gUExB
VEZPUk0oV0lOKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Nv
bXBsZXhUZXh0Q29udHJvbGxlckRpcmVjdFdyaXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyRGlyZWN0
V3JpdGUuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyRGlyZWN0V3JpdGUuY3BwCShub25leGlz
dGVudCkKQEAgLTEsMTgxICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KLSogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKLSogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29tcGxleFRl
eHRDb250cm9sbGVyLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJlY3RX
cml0ZVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZvbnRD
YXNjYWRlLmgiCi0jaW5jbHVkZSAiVGV4dEFuYWx5emVySGVscGVyLmgiCi0jaW5jbHVkZSA8ZHdy
aXRlXzMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgYm9vbCBzaGFwZShJRFdy
aXRlVGV4dEFuYWx5emVyKiBhbmFseXplciwgY29uc3QgRFdSSVRFX1NDUklQVF9BTkFMWVNJUyYg
YW5hbHlzaXMsIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnRQbGF0Zm9ybURhdGEsIGNvbnN0
IFdDSEFSKiB0ZXh0LCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN1Z2dlc3RlZENvdW50LCBW
ZWN0b3I8R2x5cGg+JiBnbHlwaHMsIFZlY3RvcjxHbHlwaD4mIGNsdXN0ZXJNYXAsIFZlY3RvcjxE
V1JJVEVfU0hBUElOR19URVhUX1BST1BFUlRJRVM+JiB0ZXh0UHJvcGVydGllcywgVmVjdG9yPERX
UklURV9TSEFQSU5HX0dMWVBIX1BST1BFUlRJRVM+JiBnbHlwaFByb3BlcnRpZXMsIHVuc2lnbmVk
JiBnbHlwaENvdW50KQotewotICAgIEhSRVNVTFQgc2hhcGVSZXN1bHQgPSBFX1BFTkRJTkc7Ci0K
LSAgICBkbyB7Ci0gICAgICAgIHNoYXBlUmVzdWx0ID0gYW5hbHl6ZXItPkdldEdseXBocyh0ZXh0
LCBsZW5ndGgsIGZvbnRQbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpLCBmb250UGxhdGZvcm1EYXRh
Lm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCwgZmFsc2UsCi0gICAg
ICAgICAgICAmYW5hbHlzaXMsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIDAs
IHN1Z2dlc3RlZENvdW50LCBjbHVzdGVyTWFwLmRhdGEoKSwgdGV4dFByb3BlcnRpZXMuZGF0YSgp
LAotICAgICAgICAgICAgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhQcm9wZXJ0aWVzLmRhdGEoKSwgJmds
eXBoQ291bnQpOwotCi0gICAgICAgIGlmIChzaGFwZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKSB7
Ci0gICAgICAgICAgICAvLyBOZWVkIHRvIHJlc2l6ZSBvdXIgYnVmZmVycyAoZXhjZXB0IGZvciBj
bHVzdGVyTWFwLiBJdCBpcyBhbHdheXMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nKS4KLSAgICAg
ICAgICAgIGdseXBocy5yZXNpemUoZ2x5cGhzLnNpemUoKSAqIDIpOwotICAgICAgICAgICAgdGV4
dFByb3BlcnRpZXMucmVzaXplKGdseXBocy5zaXplKCkpOwotICAgICAgICAgICAgZ2x5cGhQcm9w
ZXJ0aWVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKLSAgICAgICAgfQotICAgIH0gd2hpbGUgKHNo
YXBlUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotCi0gICAgaWYgKEZBSUxFRChzaGFwZVJlc3Vs
dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3Rl
cnMoY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0
aW9uLCBjb25zdCBGb250KiBmb250KQotewotICAgIGlmICghZm9udCkgewotICAgICAgICAvLyBD
cmVhdGUgYSBydW4gb2YgbWlzc2luZyBnbHlwaHMgZnJvbSB0aGUgcHJpbWFyeSBmb250LgotICAg
ICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShtX2Zv
bnQucHJpbWFyeUZvbnQoKSwgY3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5ndGgsIDAsIGxlbmd0aCwg
bV9ydW4ubHRyKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8mIGZvbnRQ
bGF0Zm9ybURhdGEgPSBmb250LT5wbGF0Zm9ybURhdGEoKTsKLQotICAgIHdjaGFyX3QgbG9jYWxl
TmFtZVtMT0NBTEVfTkFNRV9NQVhfTEVOR1RIXSA9IHsgfTsKLSAgICBpbnQgbG9jYWxlTGVuZ3Ro
ID0gR2V0VXNlckRlZmF1bHRMb2NhbGVOYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmbG9j
YWxlTmFtZSksIExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGxv
Y2FsZUxlbmd0aCA8IExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwotCi0gICAgVmVjdG9yPERXUklU
RV9GT05UX0ZFQVRVUkU+IGZvbnRGZWF0dXJlcygxKTsKLSAgICBmb250RmVhdHVyZXNbMF0ubmFt
ZVRhZyA9IERXUklURV9GT05UX0ZFQVRVUkVfVEFHX0tFUk5JTkc7Ci0gICAgZm9udEZlYXR1cmVz
WzBdLnBhcmFtZXRlciA9IG1fZm9udC5lbmFibGVLZXJuaW5nKCkgPyAxIDogMDsKLQotICAgIGlm
IChmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0
aWNhbCkKLSAgICAgICAgZm9udEZlYXR1cmVzLmFwcGVuZCh7RFdSSVRFX0ZPTlRfRkVBVFVSRV9U
QUdfVkVSVElDQUxfV1JJVElORywgMX0pOwotCi0gICAgRFdSSVRFX1RZUE9HUkFQSElDX0ZFQVRV
UkVTIHVzZWRGZWF0dXJlczsKLSAgICB1c2VkRmVhdHVyZXMuZmVhdHVyZXMgPSBmb250RmVhdHVy
ZXMuZGF0YSgpOwotICAgIHVzZWRGZWF0dXJlcy5mZWF0dXJlQ291bnQgPSBmb250RmVhdHVyZXMu
c2l6ZSgpOwotCi0gICAgVmVjdG9yPGNvbnN0IERXUklURV9UWVBPR1JBUEhJQ19GRUFUVVJFUyo+
IGZlYXR1cmVzOwotICAgIGZlYXR1cmVzLmFwcGVuZCgmdXNlZEZlYXR1cmVzKTsKLQotICAgIENP
TVB0cjxJRFdyaXRlVGV4dEFuYWx5emVyPiBhbmFseXplcjsKLSAgICBIUkVTVUxUIGhyID0gRGly
ZWN0V3JpdGU6OmZhY3RvcnkoKS0+Q3JlYXRlVGV4dEFuYWx5emVyKCZhbmFseXplcik7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBUZXh0QW5hbHl6ZXJIZWxwZXIg
aGVscGVyKHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmbG9jYWxlTmFtZSksIHJlaW50ZXJwcmV0
X2Nhc3Q8TFBDV1NUUj4oY3ApLCBsZW5ndGgpOwotCi0gICAgaHIgPSBhbmFseXplci0+QW5hbHl6
ZVNjcmlwdCgmaGVscGVyLCAwLCBsZW5ndGgsICZoZWxwZXIpOwotICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotCi0gICAgdW5zaWduZWQgdG90YWxTdWdnZXN0ZWRDb3VudCA9ICgz
ICogbGVuZ3RoIC8gMiArIDE2KTsKLQotICAgIFZlY3RvcjxHbHlwaD4gZ2x5cGhzOwotICAgIFZl
Y3RvcjxHbHlwaD4gY2x1c3Rlck1hcDsKLSAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfVEVYVF9Q
Uk9QRVJUSUVTPiB0ZXh0UHJvcGVydGllczsKLSAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfR0xZ
UEhfUFJPUEVSVElFUz4gZ2x5cGhQcm9wZXJ0aWVzOwotICAgIFZlY3RvcjxGTE9BVD4gZ2x5cGhB
ZHZhbmNlczsKLSAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4gZ2x5cGhPZmZzZXRzOwot
ICAgIFZlY3RvcjxGbG9hdFBvaW50PiBvcmlnaW5zOwotICAgIFZlY3RvcjxGbG9hdFNpemU+IGFk
dmFuY2VzOwotICAgIFZlY3Rvcjx1bnNpZ25lZD4gc3RyaW5nSW5kaWNlczsKLQotICAgIGdseXBo
cy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdnZXN0ZWRDb3VudCk7Ci0gICAgY2x1c3Rlck1hcC5y
ZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKLSAgICB0ZXh0UHJvcGVydGllcy5yZXNlcnZlQ2FwYWNp
dHkodG90YWxTdWdnZXN0ZWRDb3VudCk7Ci0gICAgZ2x5cGhQcm9wZXJ0aWVzLnJlc2VydmVDYXBh
Y2l0eSh0b3RhbFN1Z2dlc3RlZENvdW50KTsKLSAgICBnbHlwaEFkdmFuY2VzLnJlc2VydmVDYXBh
Y2l0eSh0b3RhbFN1Z2dlc3RlZENvdW50KTsKLSAgICBnbHlwaE9mZnNldHMucmVzZXJ2ZUNhcGFj
aXR5KHRvdGFsU3VnZ2VzdGVkQ291bnQpOwotICAgIG9yaWdpbnMucmVzZXJ2ZUNhcGFjaXR5KHRv
dGFsU3VnZ2VzdGVkQ291bnQpOwotICAgIGFkdmFuY2VzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1
Z2dlc3RlZENvdW50KTsKLSAgICBzdHJpbmdJbmRpY2VzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1
Z2dlc3RlZENvdW50KTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgcnVuIDogaGVscGVyLm1fYW5h
bHl6ZWRSdW5zKSB7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjdXJyZW50Q1AgPSBjcCArIHJ1bi5z
dGFydFBvc2l0aW9uOwotICAgICAgICBMUENXU1RSIHRleHRQb3NpdGlvbiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8TFBDV1NUUj4oY3VycmVudENQKTsKLQotICAgICAgICB1bnNpZ25lZCBzdWdnZXN0ZWRD
b3VudCA9ICgzICogcnVuLmxlbmd0aCAvIDIgKyAxNik7Ci0gICAgICAgIGdseXBocy5yZXNpemUo
c3VnZ2VzdGVkQ291bnQpOwotICAgICAgICBjbHVzdGVyTWFwLnJlc2l6ZShydW4ubGVuZ3RoKTsK
LSAgICAgICAgdGV4dFByb3BlcnRpZXMucmVzaXplKHN1Z2dlc3RlZENvdW50KTsKLSAgICAgICAg
Z2x5cGhQcm9wZXJ0aWVzLnJlc2l6ZShzdWdnZXN0ZWRDb3VudCk7Ci0KLSAgICAgICAgdW5zaWdu
ZWQgZ2x5cGhDb3VudCA9IDA7Ci0gICAgICAgIGlmICghc2hhcGUoYW5hbHl6ZXIuZ2V0KCksIHJ1
bi5hbmFseXNpcywgZm9udFBsYXRmb3JtRGF0YSwgdGV4dFBvc2l0aW9uLCBydW4ubGVuZ3RoLCBz
dWdnZXN0ZWRDb3VudCwgZ2x5cGhzLCBjbHVzdGVyTWFwLCB0ZXh0UHJvcGVydGllcywgZ2x5cGhQ
cm9wZXJ0aWVzLCBnbHlwaENvdW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBn
bHlwaHMuc2hyaW5rKGdseXBoQ291bnQpOwotICAgICAgICB0ZXh0UHJvcGVydGllcy5zaHJpbmso
Z2x5cGhDb3VudCk7Ci0gICAgICAgIGdseXBoUHJvcGVydGllcy5zaHJpbmsoZ2x5cGhDb3VudCk7
Ci0gICAgICAgIGdseXBoQWR2YW5jZXMucmVzaXplKGdseXBoQ291bnQpOwotICAgICAgICBnbHlw
aE9mZnNldHMucmVzaXplKGdseXBoQ291bnQpOwotCi0gICAgICAgIEhSRVNVTFQgcGxhY2VtZW50
UmVzdWx0ID0gYW5hbHl6ZXItPkdldEdseXBoUGxhY2VtZW50cyh0ZXh0UG9zaXRpb24sIGNsdXN0
ZXJNYXAuZGF0YSgpLCB0ZXh0UHJvcGVydGllcy5kYXRhKCksIHJ1bi5sZW5ndGgsCi0gICAgICAg
ICAgICBnbHlwaHMuZGF0YSgpLCBnbHlwaFByb3BlcnRpZXMuZGF0YSgpLCBnbHlwaENvdW50LCBm
b250UGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKSwKLSAgICAgICAgICAgIGZvbnRQbGF0Zm9ybURh
dGEuc2l6ZSgpLCBmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0
aW9uOjpWZXJ0aWNhbCwgbV9ydW4ubHRyKCksCi0gICAgICAgICAgICAmcnVuLmFuYWx5c2lzLCBy
ZWludGVycHJldF9jYXN0PExQQ1dTVFI+KGxvY2FsZU5hbWUpLCAKLSAgICAgICAgICAgIGZlYXR1
cmVzLmRhdGEoKSwgJnJ1bi5sZW5ndGgsIDEsCi0gICAgICAgICAgICBnbHlwaEFkdmFuY2VzLmRh
dGEoKSwgZ2x5cGhPZmZzZXRzLmRhdGEoKSk7Ci0gICAgICAgIGlmIChGQUlMRUQocGxhY2VtZW50
UmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBDb252ZXJ0IGFsbCBj
aGFycyB0aGF0IHNob3VsZCBiZSB0cmVhdGVkIGFzIHNwYWNlcyB0byB1c2UgdGhlIHNwYWNlIGds
eXBoLgotICAgICAgICAvLyBXZSBhbHNvIGNyZWF0ZSBhIG1hcCB0aGF0IGFsbG93cyB1cyB0byBx
dWlja2x5IGdvIGZyb20gc3BhY2UgZ2x5cGhzIGJhY2sgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBj
aGFyYWN0ZXJzLgotICAgICAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9udC0+c3BhY2VXaWR0aCgp
IC0gZm9udC0+c3ludGhldGljQm9sZE9mZnNldCgpOwotCi0gICAgICAgIGZvciAoaW50IGsgPSAw
OyBrIDwgcnVuLmxlbmd0aDsgKytrKSB7Ci0gICAgICAgICAgICBVQ2hhciBjaCA9ICooY3VycmVu
dENQICsgayk7Ci0gICAgICAgICAgICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnRDYXNjYWRlOjp0
cmVhdEFzU3BhY2UoY2gpOwotICAgICAgICAgICAgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2Ug
PSBGb250Q2FzY2FkZTo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoKTsKLSAgICAgICAgICAgIGlm
ICh0cmVhdEFzU3BhY2UgfHwgdHJlYXRBc1plcm9XaWR0aFNwYWNlKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gU3Vic3RpdHV0ZSBpbiB0aGUgc3BhY2UgZ2x5cGggYXQgdGhlIGFwcHJvcHJpYXRlIHBs
YWNlIGluIHRoZSBnbHlwaHMKLSAgICAgICAgICAgICAgICAvLyBhcnJheS4KLSAgICAgICAgICAg
ICAgICBnbHlwaHNbY2x1c3Rlck1hcFtrXV0gPSBmb250LT5zcGFjZUdseXBoKCk7Ci0gICAgICAg
ICAgICAgICAgZ2x5cGhBZHZhbmNlc1tjbHVzdGVyTWFwW2tdXSA9IHRyZWF0QXNTcGFjZSA/IHNw
YWNlV2lkdGggOiAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgb3JpZ2lu
cy5yZXNpemUoZ2x5cGhDb3VudCk7Ci0gICAgICAgIGFkdmFuY2VzLnJlc2l6ZShnbHlwaENvdW50
KTsKLSAgICAgICAgc3RyaW5nSW5kaWNlcy5yZXNpemUoZ2x5cGhDb3VudCk7Ci0KLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBnbHlwaENvdW50OyArK2kpIHsKLSAgICAgICAgICAgIHN0
cmluZ0luZGljZXNbaV0gPSBpOwotICAgICAgICAgICAgb3JpZ2luc1tpXSA9IEZsb2F0UG9pbnQo
Z2x5cGhPZmZzZXRzW2ldLmFkdmFuY2VPZmZzZXQsIGdseXBoT2Zmc2V0c1tpXS5hc2NlbmRlck9m
ZnNldCk7Ci0gICAgICAgICAgICBhZHZhbmNlc1tpXSA9IEZsb2F0U2l6ZShnbHlwaEFkdmFuY2Vz
W2ldLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChD
b21wbGV4VGV4dFJ1bjo6Y3JlYXRlKGFkdmFuY2VzLCBvcmlnaW5zLCBnbHlwaHMsIHN0cmluZ0lu
ZGljZXMsIEZsb2F0U2l6ZSgpLCAqZm9udCwgY3VycmVudENQLCAwLCBydW4ubGVuZ3RoLCAwLCBy
dW4ubGVuZ3RoLCBtX3J1bi5sdHIoKSkpOwotICAgIH0KLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xs
ZXJVbmlzY3JpYmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3BwCShyZXZpc2lvbiAy
ODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRl
eHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsNiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5o
IgogCi0jaWYgIVVTRShESVJFQ1QyRCkKLQogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiSFduZERDLmgiCkBAIC0yNzUsNSArMjczLDMg
QEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbAogfQogCiB9Ci0KLSNl
bmRpZiAvLyAhVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJl
Y3QyRE9wZXJhdGlvbnMuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTI0NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QnJlbnQgRnVsZ2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxMSBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEy
LCBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGlyZWN0MkRPcGVyYXRpb25z
LmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5o
IgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCi0jaW5j
bHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdl
RGVjb2RlckRpcmVjdDJELmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRl
ICJQYXRoLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRl
ICJTaGFkb3dCbHVyLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGQyZDEuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIERpcmVjdDJEIHsKLQotZW51bSBQYXR0
ZXJuQWRqdXN0bWVudCB7IE5vQWRqdXN0bWVudCwgQWRqdXN0UGF0dGVybkZvckdsb2JhbEFscGhh
IH07Ci1lbnVtIEFscGhhUHJlc2VydmF0aW9uIHsgRG9Ob3RQcmVzZXJ2ZUFscGhhLCBQcmVzZXJ2
ZUFscGhhIH07Ci0KLS8vIEZJWE1FOiBSZXBsYWNlIG9uY2UgR3JhcGhpY3NDb250ZXh0OjpkYXNo
ZWRMaW5lQ29ybmVyV2lkdGhGb3JTdHJva2VXaWR0aCgpCi0vLyBpcyByZWZhY3RvcmVkIGFzIGEg
c3RhdGljIHB1YmxpYyBmdW5jdGlvbi4KLXN0YXRpYyBmbG9hdCBkYXNoZWRMaW5lQ29ybmVyV2lk
dGhGb3JTdHJva2VXaWR0aChmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5
bGUsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKLXsKLSAgICByZXR1cm4gc3Ryb2tlU3R5bGUgPT0g
RG90dGVkU3Ryb2tlID8gc3Ryb2tlVGhpY2tuZXNzIDogc3RkOjptaW4oMi4wZiAqIHN0cm9rZVRo
aWNrbmVzcywgc3RkOjptYXgoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VXaWR0aCAvIDMuMGYpKTsK
LX0KLQotLy8gRklYTUU6IFJlcGxhY2Ugb25jZSBHcmFwaGljc0NvbnRleHQ6OmRhc2hlZExpbmVQ
YXR0ZXJuV2lkdGhGb3JTdHJva2VXaWR0aCgpCi0vLyBpcyByZWZhY3RvcmVkIGFzIGEgc3RhdGlj
IHB1YmxpYyBmdW5jdGlvbi4KLXN0YXRpYyBmbG9hdCBkYXNoZWRMaW5lUGF0dGVybldpZHRoRm9y
U3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlLCBm
bG9hdCBzdHJva2VUaGlja25lc3MpCi17Ci0gICAgcmV0dXJuIHN0cm9rZVN0eWxlID09IERvdHRl
ZFN0cm9rZSA/IHN0cm9rZVRoaWNrbmVzcyA6IHN0ZDo6bWluKDMuMGYgKiBzdHJva2VUaGlja25l
c3MsIHN0ZDo6bWF4KHN0cm9rZVRoaWNrbmVzcywgc3Ryb2tlV2lkdGggLyAzLjBmKSk7Ci19Ci0K
LS8vIEZJWE1FOiBSZXBsYWNlIG9uY2UgR3JhcGhpY3NDb250ZXh0OjpkYXNoZWRMaW5lUGF0dGVy
bk9mZnNldEZvclBhdHRlcm5BbmRTdHJva2VXaWR0aCgpCi0vLyBpcyByZWZhY3RvcmVkIGFzIGEg
c3RhdGljIHB1YmxpYyBmdW5jdGlvbi4KLXN0YXRpYyBmbG9hdCBkYXNoZWRMaW5lUGF0dGVybk9m
ZnNldEZvclBhdHRlcm5BbmRTdHJva2VXaWR0aChmbG9hdCBwYXR0ZXJuV2lkdGgsIGZsb2F0IHN0
cm9rZVdpZHRoKQotewotICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggZnVsbCBmaWxsIGFuZCBl
bmRzIHdpdGggdGhlIGVtcHR5IGZpbGwuCi0gICAgLy8gMS4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUg
ZW1wdHkgcGhhc2UgYWZ0ZXIgdGhlIGNvcm5lci4KLSAgICAvLyAyLiBDaGVjayBpZiB3ZSd2ZSBn
b3Qgb2RkIG9yIGV2ZW4gbnVtYmVyIG9mIHBhdHRlcm5zIGFuZCB3aGV0aGVyIHRoZXkgZnVsbHkg
Y292ZXIgdGhlIGxpbmUuCi0gICAgLy8gMy4gSW4gY2FzZSBvZiBldmVuIG51bWJlciBvZiBwYXR0
ZXJucyBhbmQvb3IgcmVtYWluZGVyLCBtb3ZlIHRoZSBwYXR0ZXJuIHN0YXJ0IHBvc2l0aW9uCi0g
ICAgLy8gc28gdGhhdCB0aGUgcGF0dGVybiBpcyBiYWxhbmNlZCBiZXR3ZWVuIHRoZSBjb3JuZXJz
LgotICAgIGZsb2F0IHBhdHRlcm5PZmZzZXQgPSBwYXR0ZXJuV2lkdGg7Ci0gICAgaW50IG51bWJl
ck9mU2VnbWVudHMgPSBzdGQ6OmZsb29yKHN0cm9rZVdpZHRoIC8gcGF0dGVybldpZHRoKTsKLSAg
ICBib29sIG9kZE51bWJlck9mU2VnbWVudHMgPSBudW1iZXJPZlNlZ21lbnRzICUgMjsKLSAgICBm
bG9hdCByZW1haW5kZXIgPSBzdHJva2VXaWR0aCAtIChudW1iZXJPZlNlZ21lbnRzICogcGF0dGVy
bldpZHRoKTsKLSAgICBpZiAob2RkTnVtYmVyT2ZTZWdtZW50cyAmJiByZW1haW5kZXIpCi0gICAg
ICAgIHBhdHRlcm5PZmZzZXQgLT0gcmVtYWluZGVyIC8gMi4wZjsKLSAgICBlbHNlIGlmICghb2Rk
TnVtYmVyT2ZTZWdtZW50cykgewotICAgICAgICBpZiAocmVtYWluZGVyKQotICAgICAgICAgICAg
cGF0dGVybk9mZnNldCArPSBwYXR0ZXJuT2Zmc2V0IC0gKHBhdHRlcm5XaWR0aCArIHJlbWFpbmRl
cikgLyAyLjBmOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYXR0ZXJuT2Zmc2V0ICs9IHBh
dHRlcm5XaWR0aCAvIDIuMGY7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhdHRlcm5PZmZzZXQ7Ci19
Ci0KLS8vIEZJWE1FOiBSZXBsYWNlIG9uY2UgR3JhcGhpY3NDb250ZXh0OjpjZW50ZXJMaW5lQW5k
Q3V0T2ZmQ29ybmVycygpCi0vLyBpcyByZWZhY3RvcmVkIGFzIGEgc3RhdGljIHB1YmxpYyBmdW5j
dGlvbi4KLXN0YXRpYyBWZWN0b3I8RmxvYXRQb2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5l
cnMoYm9vbCBpc1ZlcnRpY2FsTGluZSwgZmxvYXQgY29ybmVyV2lkdGgsIEZsb2F0UG9pbnQgcG9p
bnQxLCBGbG9hdFBvaW50IHBvaW50MikKLXsKLSAgICAvLyBDZW50ZXIgbGluZSBhbmQgY3V0IG9m
ZiBjb3JuZXJzIGZvciBwYXR0ZXJuIHBhaW50aW5nLgotICAgIGlmIChpc1ZlcnRpY2FsTGluZSkg
ewotICAgICAgICBmbG9hdCBjZW50ZXJPZmZzZXQgPSAocG9pbnQyLngoKSAtIHBvaW50MS54KCkp
IC8gMi4wZjsKLSAgICAgICAgcG9pbnQxLm1vdmUoY2VudGVyT2Zmc2V0LCBjb3JuZXJXaWR0aCk7
Ci0gICAgICAgIHBvaW50Mi5tb3ZlKC1jZW50ZXJPZmZzZXQsIC1jb3JuZXJXaWR0aCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgZmxvYXQgY2VudGVyT2Zmc2V0ID0gKHBvaW50Mi55KCkgLSBwb2lu
dDEueSgpKSAvIDIuMGY7Ci0gICAgICAgIHBvaW50MS5tb3ZlKGNvcm5lcldpZHRoLCBjZW50ZXJP
ZmZzZXQpOwotICAgICAgICBwb2ludDIubW92ZSgtY29ybmVyV2lkdGgsIC1jZW50ZXJPZmZzZXQp
OwotICAgIH0KLQotICAgIHJldHVybiB7IHBvaW50MSwgcG9pbnQyIH07Ci19Ci0KLQotbmFtZXNw
YWNlIFN0YXRlIHsKLQotdm9pZCBzZXRTdHJva2VUaGlja25lc3MoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQotewotICAgIHBs
YXRmb3JtQ29udGV4dC5zZXRTdHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKTsKLX0KLQot
dm9pZCBzZXRTdHJva2VTdHlsZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250
ZXh0LCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0
U3Ryb2tlU3R5bGUoc3Ryb2tlU3R5bGUpOwotfQotCi12b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlv
bihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBDb21wb3NpdGVPcGVy
YXRvciBjb21wb3NpdGVPcGVyYXRpb24sIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0KLSAgICBE
MkQxX0JMRU5EX01PREUgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX01VTFRJUExZ
OwotICAgIEQyRDFfQ09NUE9TSVRFX01PREUgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09N
UE9TSVRFX01PREVfRk9SQ0VfRFdPUkQ7Ci0KLSAgICBpZiAoYmxlbmRNb2RlICE9IEJsZW5kTW9k
ZTo6Tm9ybWFsKSB7Ci0gICAgICAgIHN3aXRjaCAoYmxlbmRNb2RlKSB7Ci0gICAgICAgIGNhc2Ug
QmxlbmRNb2RlOjpNdWx0aXBseToKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFf
QkxFTkRfTU9ERV9NVUxUSVBMWTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJs
ZW5kTW9kZTo6U2NyZWVuOgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVO
RF9NT0RFX1NDUkVFTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9k
ZTo6T3ZlcmxheToKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9E
RV9PVkVSTEFZOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpE
YXJrZW46Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfREFS
S0VOOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpMaWdodGVu
OgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0xJR0hURU47
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OkNvbG9yRG9kZ2U6
Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfQ09MT1JfRE9E
R0U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OkNvbG9yQnVy
bjoKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9DT0xPUl9C
VVJOOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpIYXJkTGln
aHQ6Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfSEFSRF9M
SUdIVDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6U29mdExp
Z2h0OgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX1NPRlRf
TElHSFQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OkRpZmZl
cmVuY2U6Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfRElG
RkVSRU5DRTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6RXhj
bHVzaW9uOgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0VY
Q0xVU0lPTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6SHVl
OgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0hVRTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6U2F0dXJhdGlvbjoKLSAg
ICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9TQVRVUkFUSU9OOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpDb2xvcjoKLSAgICAg
ICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9DT0xPUjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6THVtaW5vc2l0eToKLSAgICAgICAg
ICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9MVU1JTk9TSVRZOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpQbHVzRGFya2VyOgotICAgICAg
ICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0RBUktFUl9DT0xPUjsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6UGx1c0xpZ2h0ZXI6Ci0g
ICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfTElHSFRFUl9DT0xP
UjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2ggKGNvbXBvc2l0ZU9w
ZXJhdGlvbikgewotICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpDbGVhcjoKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfQ0xFQVI7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6Q29w
eToKLSAgICAgICAgICAgIHRhcmdldENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RF
X1NPVVJDRV9DT1BZOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRl
T3BlcmF0b3I6OlNvdXJjZU92ZXI6Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0g
RDJEMV9DT01QT1NJVEVfTU9ERV9TT1VSQ0VfT1ZFUjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbjoKLSAgICAgICAgICAgIHRhcmdl
dENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX1NPVVJDRV9JTjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdXQ6Ci0g
ICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVfTU9ERV9TT1VS
Q0VfT1VUOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRlT3BlcmF0
b3I6OlNvdXJjZUF0b3A6Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9D
T01QT1NJVEVfTU9ERV9TT1VSQ0VfQVRPUDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk92ZXI6Ci0gICAgICAgICAgICB0YXJn
ZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVfTU9ERV9ERVNUSU5BVElPTl9PVkVSOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3Rp
bmF0aW9uSW46Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJ
VEVfTU9ERV9ERVNUSU5BVElPTl9JTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk91dDoKLSAgICAgICAgICAgIHRhcmdldENv
bXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX0RFU1RJTkFUSU9OX09VVDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlv
bkF0b3A6Ci0gICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVf
TU9ERV9ERVNUSU5BVElPTl9BVE9QOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q29tcG9zaXRlT3BlcmF0b3I6OlhPUjoKLSAgICAgICAgICAgIHRhcmdldENvbXBvc2l0ZU1vZGUg
PSBEMkQxX0NPTVBPU0lURV9NT0RFX1hPUjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpQbHVzRGFya2VyOgotICAgICAgICAgICAgdGFyZ2V0Qmxl
bmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0RBUktFTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpQbHVzTGlnaHRlcjoKLSAgICAgICAgICAgIHRh
cmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9MSUdIVEVOOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRlT3BlcmF0b3I6OkRpZmZlcmVuY2U6Ci0gICAgICAg
ICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfRElGRkVSRU5DRTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNl
dEJsZW5kQW5kQ29tcG9zaXRlTW9kZSh0YXJnZXRCbGVuZE1vZGUsIHRhcmdldENvbXBvc2l0ZU1v
ZGUpOwotfQotCi12b2lkIHNldFNob3VsZEFudGlhbGlhcyhQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYgcGxhdGZvcm1Db250ZXh0LCBib29sIGVuYWJsZSkKLXsKLSAgICBhdXRvIGFudGlhbGlhc01v
ZGUgPSBlbmFibGUgPyBEMkQxX0FOVElBTElBU19NT0RFX1BFUl9QUklNSVRJVkUgOiBEMkQxX0FO
VElBTElBU19NT0RFX0FMSUFTRUQ7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgp
LT5TZXRBbnRpYWxpYXNNb2RlKGFudGlhbGlhc01vZGUpOwotfQotCi12b2lkIHNldENUTShQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKLXsKLSAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdl
dCgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPlNldFRyYW5zZm9ybSh0
cmFuc2Zvcm0pOwotCi0gICAgaWYgKGF1dG8qIGdyYXBoaWNzQ29udGV4dFByaXZhdGUgPSBwbGF0
Zm9ybUNvbnRleHQuZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICAgICBncmFwaGljc0Nv
bnRleHRQcml2YXRlLT5zZXRDVE0odHJhbnNmb3JtKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIGdl
dENUTShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0KQotewotICAgIEFT
U0VSVChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIEQyRDFfTUFUUklYXzNY
Ml9GIGN1cnJlbnRUcmFuc2Zvcm07Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgp
LT5HZXRUcmFuc2Zvcm0oJmN1cnJlbnRUcmFuc2Zvcm0pOwotICAgIHJldHVybiBjdXJyZW50VHJh
bnNmb3JtOwotfQotCi1JbnRSZWN0IGdldENsaXBCb3VuZHMoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmIHBsYXRmb3JtQ29udGV4dCkKLXsKLSAgICBEMkQxX1NJWkVfRiBjbGlwU2l6ZTsKLSAgICBp
ZiAoYXV0byBjbGlwTGF5ZXIgPSBwbGF0Zm9ybUNvbnRleHQuY2xpcExheWVyKCkpCi0gICAgICAg
IGNsaXBTaXplID0gY2xpcExheWVyLT5HZXRTaXplKCk7Ci0gICAgZWxzZQotICAgICAgICBjbGlw
U2l6ZSA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+R2V0U2l6ZSgpOwotCi0gICAg
RmxvYXRSZWN0IGNsaXBCb3VuZHMoSW50UG9pbnQoKSwgY2xpcFNpemUpOwotCi0gICAgcmV0dXJu
IGVuY2xvc2luZ0ludFJlY3QoY2xpcEJvdW5kcyk7Ci19Ci0KLUZsb2F0UmVjdCByb3VuZFRvRGV2
aWNlUGl4ZWxzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgcmV0dXJu
IHJlY3Q7Ci19Ci0KLWJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkKLXsKLSAgICBhdXRvIHJlbmRlclByb3BlcnRpZXMgPSBE
MkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0gICAgcmVuZGVyUHJvcGVydGllcy50eXBl
ID0gRDJEMV9SRU5ERVJfVEFSR0VUX1RZUEVfSEFSRFdBUkU7Ci0gICAgcmV0dXJuIHBsYXRmb3Jt
Q29udGV4dC5yZW5kZXJUYXJnZXQoKS0+SXNTdXBwb3J0ZWQoJnJlbmRlclByb3BlcnRpZXMpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBTdGF0ZQotCi1GaWxsU291cmNlOjpGaWxsU291cmNlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQotICAgIDogZ2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEpCi0gICAgLCBjb2xvcihzdGF0ZS5m
aWxsQ29sb3IpCi0gICAgLCBmaWxsUnVsZShzdGF0ZS5maWxsUnVsZSkKLXsKLSAgICBBU1NFUlQo
Y29udGV4dC5oYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgYXV0byYgcGxhdGZvcm1Db250ZXh0
ID0gKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBpZiAoc3RhdGUuZmlsbFBhdHRl
cm4pIHsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBU
aGlzIGlzbid0IHJlYWxseSBuZWVkZWQgb24gV2luZG93cwotICAgICAgICBicnVzaCA9IHN0YXRl
LmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29udGV4dCwgc3RhdGUuYWxwaGEs
IHVzZXJUb0Jhc2VDVE0pOwotICAgIH0gZWxzZSBpZiAoc3RhdGUuZmlsbEdyYWRpZW50ICYmICFz
dGF0ZS5maWxsR3JhZGllbnQtPnN0b3BzKCkuaXNFbXB0eSgpKQotICAgICAgICBicnVzaCA9IHN0
YXRlLmZpbGxHcmFkaWVudC0+Y3JlYXRlQnJ1c2gocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdl
dCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGJydXNoID0gcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0
aENvbG9yKGNvbG9yKTsKLX0KLQotU3Ryb2tlU291cmNlOjpTdHJva2VTb3VyY2UoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Ci0gICAgOiBnbG9iYWxBbHBoYShzdGF0ZS5hbHBoYSkKLSAgICAsIHRoaWNrbmVzcyhzdGF0ZS5z
dHJva2VUaGlja25lc3MpCi0gICAgLCBjb2xvcihzdGF0ZS5zdHJva2VDb2xvcikKLXsKLSAgICBB
U1NFUlQoY29udGV4dC5oYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgYXV0byYgcGxhdGZvcm1D
b250ZXh0ID0gKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBpZiAoc3RhdGUuc3Ry
b2tlUGF0dGVybikgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8g
RklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCi0gICAgICAgIGJydXNo
ID0gc3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnRleHQsIHN0
YXRlLmFscGhhLCB1c2VyVG9CYXNlQ1RNKTsKLSAgICB9IGVsc2UgaWYgKHN0YXRlLnN0cm9rZUdy
YWRpZW50KQotICAgICAgICBicnVzaCA9IHN0YXRlLnN0cm9rZUdyYWRpZW50LT5jcmVhdGVCcnVz
aChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYnJ1
c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoY29sb3IpOwotfQotCi1TaGFkb3dT
dGF0ZTo6U2hhZG93U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQotICAg
IDogb2Zmc2V0KHN0YXRlLnNoYWRvd09mZnNldCkKLSAgICAsIGJsdXIoc3RhdGUuc2hhZG93Qmx1
cikKLSAgICAsIGNvbG9yKHN0YXRlLnNoYWRvd0NvbG9yKQotICAgICwgaWdub3JlVHJhbnNmb3Jt
cyhzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKLSAgICAsIGdsb2JhbEFscGhhKHN0YXRl
LmFscGhhKQotICAgICwgZ2xvYmFsQ29tcG9zaXRlT3BlcmF0b3Ioc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3IpCi17Ci19Ci0KLWJvb2wgU2hhZG93U3RhdGU6OmlzVmlzaWJsZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGNvbG9yLmlzVmlzaWJsZSgpICYmIChvZmZzZXQud2lkdGgoKSB8fCBvZmZzZXQu
aGVpZ2h0KCkgfHwgYmx1cik7Ci19Ci0KLWJvb2wgU2hhZG93U3RhdGU6OmlzUmVxdWlyZWQoUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkgY29uc3QKLXsKLSAgICAvLyBX
ZSBjYW4ndCBhdm9pZCBTaGFkb3dCbHVyIGlmIHRoZSBzaGFkb3cgaGFzIGJsdXIuCi0gICAgaWYg
KGNvbG9yLmlzVmlzaWJsZSgpICYmIGJsdXIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
Ly8gV2UgY2FuIGF2b2lkIFNoYWRvd0JsdXIgYW5kIG9wdGltaXplLCBzaW5jZSB3ZSdyZSBub3Qg
ZHJhd2luZyBvbiBhCi0gICAgLy8gY2FudmFzIGFuZCBib3ggc2hhZG93cyBhcmUgYWZmZWN0ZWQg
YnkgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4KLSAgICBpZiAoIWlnbm9yZVRyYW5zZm9ybXMp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdlIGNhbiBhdm9pZCBTaGFkb3dCbHVy
LCBzaW5jZSB0aGVyZSBhcmUgbm8gdHJhbnNmb3JtYXRpb25zIHRvIGFwcGx5IHRvIHRoZSBjYW52
YXMuCi0gICAgaWYgKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KS5pc0lkZW50aXR5KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE90aGVyd2lzZSwgbm8gY2hhbmNlIGF2
b2lkaW5nIFNoYWRvd0JsdXIuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgc2V0TGluZUNh
cChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBMaW5lQ2FwIGxpbmVD
YXApCi17Ci0gICAgRDJEMV9DQVBfU1RZTEUgY2FwU3R5bGUgPSBEMkQxX0NBUF9TVFlMRV9GTEFU
OwotICAgIHN3aXRjaCAobGluZUNhcCkgewotICAgIGNhc2UgTGluZUNhcDo6Um91bmQ6Ci0gICAg
ICAgIGNhcFN0eWxlID0gRDJEMV9DQVBfU1RZTEVfUk9VTkQ7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgTGluZUNhcDo6U3F1YXJlOgotICAgICAgICBjYXBTdHlsZSA9IEQyRDFfQ0FQX1NUWUxF
X1NRVUFSRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lQ2FwOjpCdXR0OgotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGNhcFN0eWxlID0gRDJEMV9DQVBfU1RZTEVfRkxBVDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldExpbmVDYXAoY2FwU3R5bGUp
OwotfQotCi12b2lkIHNldExpbmVEYXNoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQsIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQotewot
ICAgIHBsYXRmb3JtQ29udGV4dC5zZXREYXNoZXMoZGFzaGVzKTsKLSAgICBwbGF0Zm9ybUNvbnRl
eHQuc2V0RGFzaE9mZnNldChkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBzZXRMaW5lSm9pbihQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBMaW5lSm9pbiBsaW5lSm9pbikK
LXsKLSAgICBEMkQxX0xJTkVfSk9JTiBqb2luU3R5bGUgPSBEMkQxX0xJTkVfSk9JTl9NSVRFUjsK
LSAgICBzd2l0Y2ggKGxpbmVKb2luKSB7Ci0gICAgY2FzZSBMaW5lSm9pbjo6Um91bmQ6Ci0gICAg
ICAgIGpvaW5TdHlsZSA9IEQyRDFfTElORV9KT0lOX1JPVU5EOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIExpbmVKb2luOjpCZXZlbDoKLSAgICAgICAgam9pblN0eWxlID0gRDJEMV9MSU5FX0pP
SU5fQkVWRUw7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUpvaW46Ok1pdGVyOgotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGpvaW5TdHlsZSA9IEQyRDFfTElORV9KT0lOX01JVEVSOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0TGluZUpvaW4oam9p
blN0eWxlKTsKLX0KLQotdm9pZCBzZXRNaXRlckxpbWl0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
JiBwbGF0Zm9ybUNvbnRleHQsIGZsb2F0IG1pdGVyTGltaXQpCi17Ci0gICAgcGxhdGZvcm1Db250
ZXh0LnNldE1pdGVyTGltaXQobWl0ZXJMaW1pdCk7Ci19Ci0KLXZvaWQgZmlsbFJlY3QoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBGaWxsU291cmNlJiBmaWxsU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93
U3RhdGUpCi17Ci0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdl
dCgpOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwotICAgIGRy
YXdXaXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwgc2hhZG93U3RhdGUsIFsmcGxhdGZv
cm1Db250ZXh0LCByZWN0LCAmZmlsbFNvdXJjZV0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRh
cmdldCkgewotICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKLSAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBmaWxsU291cmNlLmJydXNo
LmdldCgpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBmaWxsUmVjdChQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvciwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAgIGF1dG8gY29u
dGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIHBsYXRmb3JtQ29u
dGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBkcmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNv
bnRleHQsIHJlY3QsIHNoYWRvd1N0YXRlLCBbJnBsYXRmb3JtQ29udGV4dCwgY29sb3IsIHJlY3Rd
KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgY29uc3QgRDJEMV9S
RUNUX0YgZDJkUmVjdCA9IHJlY3Q7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3Rhbmds
ZSgmZDJkUmVjdCwgcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKGNvbG9yKS5nZXQoKSk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgZmlsbFJvdW5kZWRSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvciwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAgIGF1
dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIHBsYXRm
b3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLQotICAgIGNvbnN0IEZsb2F0UmVjdCYg
ciA9IHJlY3QucmVjdCgpOwotICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpJiByYWRp
aSA9IHJlY3QucmFkaWkoKTsKLSAgICBib29sIGVxdWFsV2lkdGhzID0gKHJhZGlpLnRvcExlZnQo
KS53aWR0aCgpID09IHJhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSAmJiByYWRpaS50b3BSaWdodCgp
LndpZHRoKCkgPT0gcmFkaWkuYm90dG9tTGVmdCgpLndpZHRoKCkgJiYgcmFkaWkuYm90dG9tTGVm
dCgpLndpZHRoKCkgPT0gcmFkaWkuYm90dG9tUmlnaHQoKS53aWR0aCgpKTsKLSAgICBib29sIGVx
dWFsSGVpZ2h0cyA9IChyYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgPT0gcmFkaWkuYm90dG9tTGVm
dCgpLmhlaWdodCgpICYmIHJhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSA9PSByYWRpaS50b3BS
aWdodCgpLmhlaWdodCgpICYmIHJhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgPT0gcmFkaWkuYm90
dG9tUmlnaHQoKS5oZWlnaHQoKSk7Ci0gICAgYm9vbCBoYXNDdXN0b21GaWxsID0gZmFsc2U7IC8v
IEZJWE1FOiBXaHkgaXNuJ3QgYSBGaWxsU291cmNlIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uPwot
ICAgIGlmICghaGFzQ3VzdG9tRmlsbCAmJiBlcXVhbFdpZHRocyAmJiBlcXVhbEhlaWdodHMgJiYg
cmFkaWkudG9wTGVmdCgpLndpZHRoKCkgKiAyID09IHIud2lkdGgoKSAmJiByYWRpaS50b3BMZWZ0
KCkuaGVpZ2h0KCkgKiAyID09IHIuaGVpZ2h0KCkpIHsKLSAgICAgICAgZHJhd1dpdGhTaGFkb3co
cGxhdGZvcm1Db250ZXh0LCByLCBzaGFkb3dTdGF0ZSwgWyZwbGF0Zm9ybUNvbnRleHQsIGNvbG9y
LCByZWN0LCByYWRpaSwgcl0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAg
ICAgICAgICAgYXV0byByb3VuZGVkUmVjdCA9IEQyRDE6OlJvdW5kZWRSZWN0KHIsIHJhZGlpLnRv
cExlZnQoKS53aWR0aCgpLCByYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkpOwotICAgICAgICAgICAg
cmVuZGVyVGFyZ2V0LT5GaWxsUm91bmRlZFJlY3RhbmdsZSgmcm91bmRlZFJlY3QsIHBsYXRmb3Jt
Q29udGV4dC5icnVzaFdpdGhDb2xvcihjb2xvcikuZ2V0KCkpOwotICAgICAgICB9KTsKLSAgICB9
IGVsc2UgewotICAgICAgICBQYXRoIHBhdGg7Ci0gICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3Qo
cmVjdCk7Ci0gICAgICAgIGZpbGxQYXRoKHBsYXRmb3JtQ29udGV4dCwgcGF0aCwgY29sb3IsIHNo
YWRvd1N0YXRlKTsKLSAgICB9Ci19Ci0KLXZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IEZpbGxT
b3VyY2UmIGZpbGxTb3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAg
ICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBw
bGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0KLSAgICBQYXRoIHBhdGg7Ci0g
ICAgcGF0aC5hZGRSZWN0KHJlY3QpOwotCi0gICAgaWYgKCFyb3VuZGVkSG9sZVJlY3QucmFkaWko
KS5pc1plcm8oKSkKLSAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyb3VuZGVkSG9sZVJlY3Qp
OwotICAgIGVsc2UKLSAgICAgICAgcGF0aC5hZGRSZWN0KHJvdW5kZWRIb2xlUmVjdC5yZWN0KCkp
OwotCi0gICAgRmlsbFNvdXJjZSBmaWxsV2l0aEhvbGVTb3VyY2UgPSBmaWxsU291cmNlOwotICAg
IGZpbGxXaXRoSG9sZVNvdXJjZS5maWxsUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkOwotCi0gICAg
ZmlsbFBhdGgocGxhdGZvcm1Db250ZXh0LCBwYXRoLCBmaWxsV2l0aEhvbGVTb3VyY2UsIHNoYWRv
d1N0YXRlKTsKLX0KLQotdm9pZCBmaWxsUmVjdFdpdGhHcmFkaWVudChQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIElEMkQxQnJ1
c2gqIGdyYWRpZW50KQotewotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9f
KTsKLSAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1Db250
ZXh0LCByZWN0LCAmZ3JhZGllbnRdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsK
LSAgICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7Ci0gICAgICAgIHJlbmRl
clRhcmdldC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgZ3JhZGllbnQpOwotICAgIH0pOwotfQot
Ci12b2lkIGZpbGxQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQs
IGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IEZpbGxTb3VyY2UmIGZpbGxTb3VyY2UsIGNvbnN0IFNo
YWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBwYXRoLmNsb3NlQW55T3Blbkdlb21ldHJp
ZXMoRDJEMV9GSUdVUkVfRU5EX09QRU4pOwotCi0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwg
X19MSU5FX18pOwotCi0gICAgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4gcGF0aFRvRmlsbDsK
LSAgICBwYXRoLmNyZWF0ZUdlb21ldHJ5V2l0aEZpbGxNb2RlKGZpbGxTb3VyY2UuZmlsbFJ1bGUs
IHBhdGhUb0ZpbGwpOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18p
OwotICAgIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4gZHJhd0Z1bmN0aW9uID0g
WyZwbGF0Zm9ybUNvbnRleHQsICZwYXRoVG9GaWxsLCAmZmlsbFNvdXJjZV0oSUQyRDFSZW5kZXJU
YXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxHZW9tZXRy
eShwYXRoVG9GaWxsLmdldCgpLCBmaWxsU291cmNlLmJydXNoLmdldCgpKTsKLSAgICB9OwotCi0g
ICAgaWYgKHNoYWRvd1N0YXRlLmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBib3Vu
ZGluZ1JlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKLSAgICAgICAgZHJhd1dpdGhTaGFk
b3cocGxhdGZvcm1Db250ZXh0LCBib3VuZGluZ1JlY3QsIHNoYWRvd1N0YXRlLCBXVEZNb3ZlKGRy
YXdGdW5jdGlvbikpOwotICAgIH0gZWxzZQotICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0
Zm9ybUNvbnRleHQsIFdURk1vdmUoZHJhd0Z1bmN0aW9uKSk7Ci19Ci0KLXZvaWQgZmlsbFBhdGgo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgUGF0aCYgcGF0
aCwgY29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCi17
Ci0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0g
ICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwotCi0gICAgQ09NUHRyPElE
MkQxR2VvbWV0cnlHcm91cD4gcGF0aFRvRmlsbDsKLSAgICBwYXRoLmNyZWF0ZUdlb21ldHJ5V2l0
aEZpbGxNb2RlKFdpbmRSdWxlOjpFdmVuT2RkLCBwYXRoVG9GaWxsKTsKLQotICAgIHBsYXRmb3Jt
Q29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLQotICAgIEZ1bmN0aW9uPHZvaWQoSUQyRDFS
ZW5kZXJUYXJnZXQqKT4gZHJhd0Z1bmN0aW9uID0gWyZwbGF0Zm9ybUNvbnRleHQsICZwYXRoVG9G
aWxsLCBjb2xvcl0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICBy
ZW5kZXJUYXJnZXQtPkZpbGxHZW9tZXRyeShwYXRoVG9GaWxsLmdldCgpLCBwbGF0Zm9ybUNvbnRl
eHQuYnJ1c2hXaXRoQ29sb3IoY29sb3IpLmdldCgpKTsKLSAgICB9OwotCi0gICAgaWYgKHNoYWRv
d1N0YXRlLmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3QgPSBw
YXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKLSAgICAgICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1D
b250ZXh0LCBib3VuZGluZ1JlY3QsIHNoYWRvd1N0YXRlLCBXVEZNb3ZlKGRyYXdGdW5jdGlvbikp
OwotICAgIH0gZWxzZQotICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQs
IFdURk1vdmUoZHJhd0Z1bmN0aW9uKSk7Ci19Ci0KLXZvaWQgc3Ryb2tlUmVjdChQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGxpbmVXaWR0aCwgY29uc3QgU3Ryb2tlU291cmNlJiBzdHJva2VTb3VyY2UsIGNvbnN0IFNo
YWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBkcmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNv
bnRleHQsIHJlY3QsIHNoYWRvd1N0YXRlLCBbJnBsYXRmb3JtQ29udGV4dCwgJnN0cm9rZVNvdXJj
ZSwgcmVjdCwgbGluZVdpZHRoXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0g
ICAgICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICAgICAgY29u
c3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RHJh
d1JlY3RhbmdsZSgmZDJkUmVjdCwgc3Ryb2tlU291cmNlLmJydXNoLmdldCgpLCBsaW5lV2lkdGgs
IHBsYXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZSgpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBzdHJv
a2VQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFBh
dGgmIHBhdGgsIGNvbnN0IFN0cm9rZVNvdXJjZSYgc3Ryb2tlU291cmNlLCBjb25zdCBTaGFkb3dT
dGF0ZSYgc2hhZG93U3RhdGUpCi17Ci0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
LnJlbmRlclRhcmdldCgpOwotICAgIAotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9f
TElORV9fKTsKLQotICAgIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4gZHJhd0Z1
bmN0aW9uID0gWyZwbGF0Zm9ybUNvbnRleHQsICZwYXRoLCAmc3Ryb2tlU291cmNlXShJRDJEMVJl
bmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RHJhd0dl
b21ldHJ5KHBhdGgucGxhdGZvcm1QYXRoKCksIHN0cm9rZVNvdXJjZS5icnVzaC5nZXQoKSwgc3Ry
b2tlU291cmNlLnRoaWNrbmVzcywgcGxhdGZvcm1Db250ZXh0LnN0cm9rZVN0eWxlKCkpOwotICAg
IH07Ci0KLSAgICBpZiAoc2hhZG93U3RhdGUuaXNWaXNpYmxlKCkpIHsKLSAgICAgICAgYXV0byBi
b3VuZGluZ1JlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3RGb3JTdHJva2UocGxhdGZvcm1Db250
ZXh0KTsKLSAgICAgICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBib3VuZGluZ1Jl
Y3QsIHNoYWRvd1N0YXRlLCBXVEZNb3ZlKGRyYXdGdW5jdGlvbikpOwotICAgIH0gZWxzZQotICAg
ICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFdURk1vdmUoZHJhd0Z1bmN0
aW9uKSk7Ci19Ci0KLXZvaWQgZHJhd1BhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRm
b3JtQ29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCwgY29uc3QgU3Ryb2tlU291cmNlJiBzdHJva2VT
b3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJikKLXsKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBwYXRoLmNsb3NlQW55T3Blbkdlb21ldHJp
ZXMoRDJEMV9GSUdVUkVfRU5EX09QRU4pOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3Mo
MSwgX19MSU5FX18pOwotCi0gICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBb
JnBsYXRmb3JtQ29udGV4dCwgJnN0cm9rZVNvdXJjZSwgJnBhdGhdKElEMkQxUmVuZGVyVGFyZ2V0
KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3R2VvbWV0cnkocGF0
aC5wbGF0Zm9ybVBhdGgoKSwgc3Ryb2tlU291cmNlLmJydXNoLmdldCgpLCBzdHJva2VTb3VyY2Uu
dGhpY2tuZXNzLCBwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlU3R5bGUoKSk7Ci0gICAgfSk7Ci0KLSAg
ICBmbHVzaChwbGF0Zm9ybUNvbnRleHQpOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3V2l0aFNoYWRv
d0hlbHBlcihJRDJEMVJlbmRlclRhcmdldCogY29udGV4dCwgSUQyRDFCaXRtYXBSZW5kZXJUYXJn
ZXQqIGJpdG1hcFRhcmdldCwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ1JlY3QsIGNvbnN0IENv
bG9yJiBzaGFkb3dDb2xvciwgY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNo
YWRvd0JsdXIpCi17Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjdXJyZW50Q2FudmFzID0gRGly
ZWN0MkQ6OmNyZWF0ZUJpdG1hcENvcHlGcm9tQ29udGV4dChiaXRtYXBUYXJnZXQpOwotICAgIGlm
ICghY3VycmVudENhbnZhcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElEMkQxRGV2
aWNlQ29udGV4dD4gc2hhZG93RGV2aWNlQ29udGV4dDsKLSAgICBIUkVTVUxUIGhyID0gYml0bWFw
VGFyZ2V0LT5RdWVyeUludGVyZmFjZSgmc2hhZG93RGV2aWNlQ29udGV4dCk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIHNoYWRvdyBlZmZl
Y3QKLSAgICBDT01QdHI8SUQyRDFFZmZlY3Q+IHNoYWRvd0VmZmVjdDsKLSAgICBociA9IHNoYWRv
d0RldmljZUNvbnRleHQtPkNyZWF0ZUVmZmVjdChDTFNJRF9EMkQxU2hhZG93LCAmc2hhZG93RWZm
ZWN0KTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIHNoYWRvd0Vm
ZmVjdC0+U2V0SW5wdXQoMCwgY3VycmVudENhbnZhcy5nZXQoKSk7Ci0gICAgc2hhZG93RWZmZWN0
LT5TZXRWYWx1ZShEMkQxX1NIQURPV19QUk9QX0NPTE9SLCBzdGF0aWNfY2FzdDxEMkQxX1ZFQ1RP
Ul80Rj4oc2hhZG93Q29sb3IpKTsKLQotICAgIGZsb2F0IGJsdXJEZXZpYXRpb24gPSAwLjUgKiBz
aGFkb3dCbHVyOwotICAgIHNoYWRvd0VmZmVjdC0+U2V0VmFsdWUoRDJEMV9TSEFET1dfUFJPUF9C
TFVSX1NUQU5EQVJEX0RFVklBVElPTiwgYmx1ckRldmlhdGlvbik7Ci0KLSAgICBDT01QdHI8SUQy
RDFFZmZlY3Q+IHNoYWRvd1RyYW5zZm9ybUVmZmVjdDsKLSAgICBociA9IHNoYWRvd0RldmljZUNv
bnRleHQtPkNyZWF0ZUVmZmVjdChDTFNJRF9EMkQxMkRBZmZpbmVUcmFuc2Zvcm0sICZzaGFkb3dU
cmFuc2Zvcm1FZmZlY3QpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0g
ICAgc2hhZG93VHJhbnNmb3JtRWZmZWN0LT5TZXRJbnB1dEVmZmVjdCgwLCBzaGFkb3dFZmZlY3Qu
Z2V0KCkpOwotCi0gICAgLy8gTXVzdCBmbGlwIHRoZSBheGlzIGZvciB0aGUgc2hhZG93IG9mZnNl
dCwgc2luY2UgRGlyZWN0MkQncyBZIGF4aXMgaXMgaW52ZXJ0ZWQuCi0gICAgYXV0byBzaGFkb3dU
cmFuc2xhdGlvbiA9IEQyRDE6Ok1hdHJpeDN4MkY6OlRyYW5zbGF0aW9uKHNoYWRvd09mZnNldC53
aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsKLSAgICBzaGFkb3dUcmFuc2Zvcm1FZmZl
Y3QtPlNldFZhbHVlKEQyRDFfMkRBRkZJTkVUUkFOU0ZPUk1fUFJPUF9UUkFOU0ZPUk1fTUFUUklY
LCBzaGFkb3dUcmFuc2xhdGlvbik7Ci0KLSAgICBDT01QdHI8SUQyRDFFZmZlY3Q+IGNvbXBvc2l0
b3I7Ci0gICAgaHIgPSBzaGFkb3dEZXZpY2VDb250ZXh0LT5DcmVhdGVFZmZlY3QoQ0xTSURfRDJE
MUNvbXBvc2l0ZSwgJmNvbXBvc2l0b3IpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgY29tcG9zaXRvci0+U2V0SW5wdXRFZmZlY3QoMCwgc2hhZG93VHJhbnNmb3Jt
RWZmZWN0LmdldCgpKTsKLSAgICBjb21wb3NpdG9yLT5TZXRJbnB1dCgxLCBjdXJyZW50Q2FudmFz
LmdldCgpKTsKLQotICAgIHNoYWRvd0RldmljZUNvbnRleHQtPkJlZ2luRHJhdygpOwotICAgIHNo
YWRvd0RldmljZUNvbnRleHQtPkNsZWFyKEQyRDE6OkNvbG9yRigwLCAwLCAwLCAwKSk7Ci0gICAg
c2hhZG93RGV2aWNlQ29udGV4dC0+RHJhd0ltYWdlKGNvbXBvc2l0b3IuZ2V0KCkpOwotICAgIGhy
ID0gc2hhZG93RGV2aWNlQ29udGV4dC0+RW5kRHJhdygpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNV
Q0NFRURFRChocikpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7Ci0gICAgaHIg
PSBiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmYml0bWFwKTsKLSAgICBSRUxFQVNFX0FTU0VSVChT
VUNDRUVERUQoaHIpKTsKLQotICAgIEludFNpemUgcGl4ZWxTaXplID0gY29udGV4dC0+R2V0UGl4
ZWxTaXplKCk7Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjcm9wcGVkID0gRGlyZWN0MkQ6OmNy
ZWF0ZUJpdG1hcChiaXRtYXBUYXJnZXQsIHBpeGVsU2l6ZSk7Ci0gICAgaWYgKCFjcm9wcGVkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHNjYWxlRmFjdG9yID0gYml0bWFwUmVzb2x1dGlv
bihjb250ZXh0KTsKLQotICAgIEZsb2F0UmVjdCBzY2FsZWRCb3VuZGluZ1JlY3QoYm91bmRpbmdS
ZWN0KTsKLSAgICBzY2FsZWRCb3VuZGluZ1JlY3Quc2NhbGUoc2NhbGVGYWN0b3Iud2lkdGgoKSwg
c2NhbGVGYWN0b3IuaGVpZ2h0KCkpOwotCi0gICAgLy8gVGFrZSB0aGUgbWFnbml0dWRlIG9mIHRo
ZSBvZmZzZXQuIElmIHRoZSBvcmlnaW4gd2FzIG91dHNpZGUgdGhlIGRyYXdpbmcgY29udGV4dCwg
d2Ugc3RyZXRjaGVkIHRvIGluY2x1ZGUgdGhvc2UgcG9pbnRzLAotICAgIC8vIGFuZCBzbyB3ZSBu
ZWVkIHRvIGNyb3AgdGhlbSBvdXQuIElmIHRoZSBvcmlnaW4gd2FzIGluc2lkZSwgd2Ugd2FudCB0
byBob25vciB0aGUgb2Zmc2V0LgotICAgIGludCB4ID0gY2xhbXBUbzxpbnQ+KHN0ZDo6YWJzKHNj
YWxlZEJvdW5kaW5nUmVjdC54KCkpKTsKLSAgICBpbnQgeSA9IGNsYW1wVG88aW50PihzdGQ6OmFi
cyhzY2FsZWRCb3VuZGluZ1JlY3QueSgpKSk7Ci0gICAgaW50IHdpZHRoID0gY2xhbXBUbzxpbnQ+
KHNjYWxlZEJvdW5kaW5nUmVjdC53aWR0aCgpKTsKLSAgICBpbnQgaGVpZ2h0ID0gY2xhbXBUbzxp
bnQ+KHNjYWxlZEJvdW5kaW5nUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBJbnRSZWN0IG91dHB1dFJl
Y3QoSW50UG9pbnQoeCwgeSksIEludFNpemUod2lkdGgsIGhlaWdodCkpOwotICAgIEludFJlY3Qg
ZGVzdENvbnRleHRSZWN0KEludFBvaW50KCksIHBpeGVsU2l6ZSk7Ci0gICAgaWYgKG91dHB1dFJl
Y3QuaW50ZXJzZWN0cyhkZXN0Q29udGV4dFJlY3QpKQotICAgICAgICBvdXRwdXRSZWN0LmludGVy
c2VjdChkZXN0Q29udGV4dFJlY3QpOwotCi0gICAgRDJEMV9SRUNUX1UgY3JvcFJlY3QgPSBvdXRw
dXRSZWN0OwotICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBEMkQxOjpQb2ludDJVKCk7Ci0gICAgY3Jv
cHBlZC0+Q29weUZyb21CaXRtYXAoJnRhcmdldFBvaW50LCBiaXRtYXAuZ2V0KCksICZjcm9wUmVj
dCk7Ci0KLSAgICBjb250ZXh0LT5EcmF3Qml0bWFwKGNyb3BwZWQuZ2V0KCkpOwotfQotCi12b2lk
IGRyYXdXaXRoU2hhZG93KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQs
IEZsb2F0UmVjdCBib3VuZGluZ1JlY3QsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSwg
RnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiYmIGRyYXdDb21tYW5kcykKLXsKLSAg
ICBpZiAoIXNoYWRvd1N0YXRlLmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIGRyYXdXaXRob3V0U2hh
ZG93KHBsYXRmb3JtQ29udGV4dCwgV1RGTW92ZShkcmF3Q29tbWFuZHMpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHBsYXRmb3JtQ29udGV4dC5ub3RpZnlQcmVEcmF3T2JzZXJ2ZXIo
KTsKLQotICAgIGF1dG8qIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7
Ci0KLSAgICBGbG9hdFNpemUgcmVuZGVyVGFyZ2V0U2l6ZSA9IGNvbnRleHQtPkdldFNpemUoKTsK
LSAgICBjb25zdCBGbG9hdFJlY3QgY29udGV4dFJlY3QoRmxvYXRQb2ludCgpLCByZW5kZXJUYXJn
ZXRTaXplKTsKLSAgICBGbG9hdFJlY3Qgd29ya2luZ0NvbnRleHRSZWN0KGNvbnRleHRSZWN0KTsK
LQotICAgIGlmIChib3VuZGluZ1JlY3QuaXNJbmZpbml0ZSgpKQotICAgICAgICBib3VuZGluZ1Jl
Y3QgPSB3b3JraW5nQ29udGV4dFJlY3Q7Ci0KLSAgICBpZiAoIWNvbnRleHRSZWN0LmNvbnRhaW5z
KGJvdW5kaW5nUmVjdCkpCi0gICAgICAgIHdvcmtpbmdDb250ZXh0UmVjdC51bml0ZShib3VuZGlu
Z1JlY3QpOwotCi0gICAgd29ya2luZ0NvbnRleHRSZWN0LmV4cGFuZChzdGQ6OmFicyhzaGFkb3dT
dGF0ZS5vZmZzZXQud2lkdGgoKSkgKyBzaGFkb3dTdGF0ZS5ibHVyLCBzdGQ6OmFicyhzaGFkb3dT
dGF0ZS5vZmZzZXQuaGVpZ2h0KCkpICsgc2hhZG93U3RhdGUuYmx1cik7Ci0KLSAgICBhdXRvIHNj
YWxlRmFjdG9yID0gYml0bWFwUmVzb2x1dGlvbihjb250ZXh0KTsKLQotICAgIHdvcmtpbmdDb250
ZXh0UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7Ci0KLSAgICBJbnRTaXplIHBpeGVsRGltZW5zaW9u
cyhjbGFtcFRvPGludD4od29ya2luZ0NvbnRleHRSZWN0LndpZHRoKCkpLCBjbGFtcFRvPGludD4o
d29ya2luZ0NvbnRleHRSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICAvLyBSZW5kZXIgdGhlIGN1cnJl
bnQgZ2VvbWV0cnkgdG8gYSBiaXRtYXAgY29udGV4dAotICAgIENPTVB0cjxJRDJEMUJpdG1hcFJl
bmRlclRhcmdldD4gYml0bWFwVGFyZ2V0ID0gY3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0T2ZTaXpl
KHBpeGVsRGltZW5zaW9ucywgY29udGV4dCk7Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiBjdXJy
ZW50VHJhbnNmb3JtOwotICAgIGJpdG1hcFRhcmdldC0+R2V0VHJhbnNmb3JtKCZjdXJyZW50VHJh
bnNmb3JtKTsKLQotICAgIGlmICghY29udGV4dFJlY3QuY29udGFpbnMoYm91bmRpbmdSZWN0Lmxv
Y2F0aW9uKCkpKSB7Ci0gICAgICAgIGF1dG8gdHJhbnNsYXRpb24gPSBEMkQxOjpNYXRyaXgzeDJG
OjpUcmFuc2xhdGlvbigtYm91bmRpbmdSZWN0LmxvY2F0aW9uKCkueCgpLCAtYm91bmRpbmdSZWN0
LmxvY2F0aW9uKCkueSgpKTsKLSAgICAgICAgYml0bWFwVGFyZ2V0LT5TZXRUcmFuc2Zvcm0odHJh
bnNsYXRpb24gKiBjdXJyZW50VHJhbnNmb3JtKTsKLSAgICB9Ci0KLSAgICBiaXRtYXBUYXJnZXQt
PkJlZ2luRHJhdygpOwotICAgIGRyYXdDb21tYW5kcyhiaXRtYXBUYXJnZXQuZ2V0KCkpOwotICAg
IEhSRVNVTFQgaHIgPSBiaXRtYXBUYXJnZXQtPkVuZERyYXcoKTsKLSAgICBSRUxFQVNFX0FTU0VS
VChTVUNDRUVERUQoaHIpKTsKLQotICAgIGJpdG1hcFRhcmdldC0+U2V0VHJhbnNmb3JtKGN1cnJl
bnRUcmFuc2Zvcm0pOwotCi0gICAgZHJhd1dpdGhTaGFkb3dIZWxwZXIoY29udGV4dCwgYml0bWFw
VGFyZ2V0LmdldCgpLCBib3VuZGluZ1JlY3QsIHNoYWRvd1N0YXRlLmNvbG9yLCBzaGFkb3dTdGF0
ZS5vZmZzZXQsIHNoYWRvd1N0YXRlLmJsdXIpOwotICAgIHBsYXRmb3JtQ29udGV4dC5ub3RpZnlQ
b3N0RHJhd09ic2VydmVyKCk7Ci19Ci0KLXZvaWQgZHJhd1dpdGhvdXRTaGFkb3coUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgRnVuY3Rpb248dm9pZChJRDJEMVJlbmRl
clRhcmdldCopPiYmIGRyYXdDb21tYW5kcykKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQubm90aWZ5
UHJlRHJhd09ic2VydmVyKCk7Ci0gICAgZHJhd0NvbW1hbmRzKHBsYXRmb3JtQ29udGV4dC5yZW5k
ZXJUYXJnZXQoKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0Lm5vdGlmeVBvc3REcmF3T2JzZXJ2ZXIo
KTsKLX0KLQotdm9pZCBjbGVhclJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3Jt
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGRyYXdXaXRob3V0U2hhZG93
KHBsYXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9ybUNvbnRleHQsIHJlY3RdKElEMkQxUmVuZGVyVGFy
Z2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlbmRlclRhcmdldFJlY3Qo
RmxvYXRQb2ludCgpLCByZW5kZXJUYXJnZXQtPkdldFNpemUoKSk7Ci0KLSAgICAgICAgRDJEMTo6
TWF0cml4M3gyRiBtYXRyaXg7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+R2V0VHJhbnNmb3JtKCZt
YXRyaXgpOwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0obWF0cml4KTsKLQot
ICAgICAgICBGbG9hdFJlY3QgcmVjdFRvQ2xlYXIocmVjdCk7Ci0gICAgICAgIGlmICghdHJhbnNm
b3JtLnByZXNlcnZlc0F4aXNBbGlnbm1lbnQoKSkgewotICAgICAgICAgICAgQ09NUHRyPElEMkQx
UmVjdGFuZ2xlR2VvbWV0cnk+IHJlY3RhbmdsZTsKLSAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBH
cmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUmVjdGFuZ2xlR2VvbWV0cnko
cmVjdFRvQ2xlYXIsICZyZWN0YW5nbGUpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VD
Q0VFREVEKGhyKSk7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxHZW9tZXRyeShyZWN0
YW5nbGUuZ2V0KCksIHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihEMkQxOjpDb2xvckYo
MCwgMCwgMCwgMCkpLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJlY3RUb0NsZWFyID0gdHJhbnNmb3JtLm1hcFJlY3QocmVjdFRvQ2xlYXIpOwotCi0g
ICAgICAgIGlmIChyZWN0VG9DbGVhci5jb250YWlucyhyZW5kZXJUYXJnZXRSZWN0KSkgewotICAg
ICAgICAgICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwotICAgICAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5DbGVhcihEMkQxOjpDb2xvckYoMCwgMCwgMCwgMCkpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcGxhdGZvcm1Db250ZXh0LnNldFRh
Z3MoMSwgX19MSU5FX18pOwotICAgICAgICByZW5kZXJUYXJnZXQtPlB1c2hBeGlzQWxpZ25lZENs
aXAocmVjdFRvQ2xlYXIsIEQyRDFfQU5USUFMSUFTX01PREVfUEVSX1BSSU1JVElWRSk7Ci0gICAg
ICAgIHJlbmRlclRhcmdldC0+Q2xlYXIoRDJEMTo6Q29sb3JGKDAsIDAsIDAsIDApKTsKLSAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5Qb3BBeGlzQWxpZ25lZENsaXAoKTsKLSAgICB9KTsKLX0KLQotCi12
b2lkIGRyYXdHbHlwaHMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwg
Y29uc3QgRmlsbFNvdXJjZSYgZmlsbFNvdXJjZSwgY29uc3QgU3Ryb2tlU291cmNlJiBzdHJva2VT
b3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0LCBjb25z
dCBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+JiBnbHlwaHMsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGhv
cml6b250YWxBZHZhbmNlcywgY29uc3QgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+JiBnbHlw
aE9mZnNldHMsIGZsb2F0IHhPZmZzZXQsIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5n
TW9kZSwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNl
dCwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKQotewotICAgIGF1dG8gcmVuZGVyVGFyZ2V0ID0g
cGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBQbGF0Zm9ybUNv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGxhdGZvcm1Db250ZXh0KTsKLQotICAgIEQyRDFf
TUFUUklYXzNYMl9GIG1hdHJpeDsKLSAgICByZW5kZXJUYXJnZXQtPkdldFRyYW5zZm9ybSgmbWF0
cml4KTsKLQotICAgIC8qCi0gICAgLy8gRklYTUU6IEdldCBTeW50aGV0aWMgT2JsaXF1ZSB3b3Jr
aW5nCi0gICAgaWYgKHBsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkpIHsKLSAgICAgICAg
c3RhdGljIGZsb2F0IHNrZXcgPSAtdGFuZihzeW50aGV0aWNPYmxpcXVlQW5nbGUoKSAqIHBpRmxv
YXQgLyAxODAuMGYpOwotICAgICAgICBhdXRvIHNrZXdNYXRyaXggPSBEMkQxOjpNYXRyaXgzeDJG
OjpTa2V3KHNrZXcsIDApOwotICAgICAgICBjb250ZXh0LT5TZXRUcmFuc2Zvcm0obWF0cml4ICog
c2tld01hdHJpeCk7Ci0gICAgfQotICAgICovCi0KLSAgICBSRUxFQVNFX0FTU0VSVChwbGF0Zm9y
bURhdGEuZHdGb250KCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKHBsYXRmb3JtRGF0YS5kd0ZvbnRG
YWNlKCkpOwotCi0gICAgRFdSSVRFX0dMWVBIX1JVTiBnbHlwaFJ1bjsKLSAgICBnbHlwaFJ1bi5m
b250RmFjZSA9IHBsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCk7Ci0gICAgZ2x5cGhSdW4uZm9udEVt
U2l6ZSA9IHBsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAgZ2x5cGhSdW4uZ2x5cGhDb3VudCA9IGds
eXBocy5zaXplKCk7Ci0gICAgZ2x5cGhSdW4uZ2x5cGhJbmRpY2VzID0gZ2x5cGhzLmRhdGEoKTsK
LSAgICBnbHlwaFJ1bi5nbHlwaEFkdmFuY2VzID0gaG9yaXpvbnRhbEFkdmFuY2VzLmRhdGEoKTsK
LSAgICBnbHlwaFJ1bi5nbHlwaE9mZnNldHMgPSBudWxscHRyOwotICAgIGdseXBoUnVuLmlzU2lk
ZXdheXMgPSBwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZl
cnRpY2FsOwotICAgIGdseXBoUnVuLmJpZGlMZXZlbCA9IDA7Ci0KLSAgICAvKgotICAgIC8vIEZJ
WE1FKCk6IEdldCBTaGFkb3dzIHdvcmtpbmcKLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0Owot
ICAgIGZsb2F0IHNoYWRvd0JsdXI7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgZ3JhcGhp
Y3NDb250ZXh0LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9y
KTsKLQotICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnRleHREcmF3
aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlk
KCkgJiYgIXNoYWRvd0JsdXIgJiYgKCFncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMoKSB8fCBncmFwaGljc0NvbnRleHQuZ2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRp
b25PckZsaXBwZWQoKSk7Ci0gICAgaWYgKGhhc1NpbXBsZVNoYWRvdykgewotICAgICAgICAvLyBQ
YWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNo
YWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCi0gICAgICAgIGdy
YXBoaWNzQ29udGV4dC5jbGVhclNoYWRvdygpOwotICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBn
cmFwaGljc0NvbnRleHQuZmlsbENvbG9yKCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xv
ciA9IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBo
YUFzRmxvYXQoKSk7Ci0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgc2hh
ZG93T2Zmc2V0LndpZHRoKCk7Ci0gICAgICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRy
YW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5
ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUuCi0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9p
bnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpICogKGdyYXBoaWNzQ29udGV4dC5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKLQotICAgICAgICBhdXRvIHNoYWRvd0JydXNo
ID0gZ3JhcGhpY3NDb250ZXh0LmJydXNoV2l0aENvbG9yKHNoYWRvd0ZpbGxDb2xvcik7Ci0gICAg
ICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQxOjpQb2ludDJGKHNoYWRvd1RleHRYLCBzaGFk
b3dUZXh0WSksICZnbHlwaFJ1biwgc2hhZG93QnJ1c2gpOwotICAgICAgICBpZiAoZm9udC5zeW50
aGV0aWNCb2xkT2Zmc2V0KCkpCi0gICAgICAgICAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJE
MTo6UG9pbnQyRihzaGFkb3dUZXh0WCArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBzaGFk
b3dUZXh0WSksICZnbHlwaFJ1biwgc2hhZG93QnJ1c2gpOwotICAgIH0KLSAgICAqLwotCi0gICAg
cmVuZGVyVGFyZ2V0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihwb2ludC54KCksIHBvaW50
LnkoKSksICZnbHlwaFJ1biwgZmlsbFNvdXJjZS5icnVzaC5nZXQoKSk7Ci0gICAgLy8gaWYgKGZv
bnQuc3ludGhldGljQm9sZE9mZnNldCgpKQotICAgIC8vICAgICBjb250ZXh0LT5EcmF3R2x5cGhS
dW4oRDJEMTo6UG9pbnQyRihwb2ludC54KCkgKyBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwg
cG9pbnQueSgpKSwgJmdseXBoUnVuLCBncmFwaGljc0NvbnRleHQuc29saWRGaWxsQnJ1c2goKSk7
Ci0KLSAgICAvLyBpZiAoaGFzU2ltcGxlU2hhZG93KQotICAgIC8vICAgICBncmFwaGljc0NvbnRl
eHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOwotCi0g
ICAgc3RhdGVTYXZlci5yZXN0b3JlKCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0Lm5vdGlmeVBvc3RE
cmF3T2JzZXJ2ZXIoKTsKLX0KLQotCi12b2lkIGRyYXdQbGF0Zm9ybUltYWdlKFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIElXSUNCaXRtYXAqIGltYWdlLCBjb25zdCBG
bG9hdFNpemUmIG9yaWdpbmFsSW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zLCBmbG9hdCBnbG9iYWxBbHBoYSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQot
ewotICAgIGF1dG8gbmF0aXZlSW1hZ2VTaXplID0gYml0bWFwU2l6ZShpbWFnZSk7Ci0gICAgQ09N
UHRyPElEMkQxQml0bWFwPiBkZXZpY2VCaXRtYXA7Ci0gICAgSFJFU1VMVCBociA9IHBsYXRmb3Jt
Q29udGV4dC5yZW5kZXJUYXJnZXQoKS0+Q3JlYXRlQml0bWFwRnJvbVdpY0JpdG1hcChpbWFnZSwg
JmRldmljZUJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvIGltYWdlU2l6ZSA9IGJpdG1hcFNpemUoZGV2aWNlQml0bWFwLmdldCgpKTsK
LSAgICBkcmF3UGxhdGZvcm1JbWFnZShwbGF0Zm9ybUNvbnRleHQsIGRldmljZUJpdG1hcC5nZXQo
KSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywgZ2xvYmFsQWxwaGEsIHNo
YWRvd1N0YXRlKTsKLX0KLQotdm9pZCBkcmF3UGxhdGZvcm1JbWFnZShQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBJRDJEMUJpdG1hcCogaW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zLCBmbG9hdCBn
bG9iYWxBbHBoYSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAgIGF1dG8g
Yml0bWFwU2l6ZSA9IGltYWdlLT5HZXRTaXplKCk7Ci0KLSAgICBmbG9hdCBjdXJySGVpZ2h0ID0g
b3B0aW9ucy5vcmllbnRhdGlvbigpLnVzZXNXaWR0aEFzSGVpZ2h0KCkgPyBiaXRtYXBTaXplLndp
ZHRoIDogYml0bWFwU2l6ZS5oZWlnaHQ7Ci0gICAgaWYgKGN1cnJIZWlnaHQgPD0gc3JjUmVjdC55
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4
dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIEQyRDFfTUFUUklYXzNYMl9GIGN0bTsKLSAgICBjb250
ZXh0LT5HZXRUcmFuc2Zvcm0oJmN0bSk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
KGN0bSk7Ci0KLSAgICBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGxhdGZv
cm1Db250ZXh0KTsKLQotICAgIGJvb2wgc2hvdWxkVXNlU3ViaW1hZ2UgPSBmYWxzZTsKLQotICAg
IC8vIElmIHRoZSBzb3VyY2UgcmVjdCBpcyBhIHN1YnBvcnRpb24gb2YgdGhlIGltYWdlLCB0aGVu
IHdlIGNvbXB1dGUgYW4gaW5mbGF0ZWQgZGVzdGluYXRpb24gcmVjdCB0aGF0IHdpbGwgaG9sZCB0
aGUgZW50aXJlIGltYWdlCi0gICAgLy8gYW5kIHRoZW4gc2V0IGEgY2xpcCB0byB0aGUgcG9ydGlv
biB0aGF0IHdlIHdhbnQgdG8gZGlzcGxheS4KLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWREZXN0UmVj
dCA9IGRlc3RSZWN0OwotCi0gICAgaWYgKHNyY1JlY3Quc2l6ZSgpICE9IGltYWdlU2l6ZSkgewot
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGltYWdlIHNjYWxpbmcKLSAgICAgICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgaW1hZ2UgaXMgb25seSBwYXJ0aWFs
bHkgbG9hZGVkLCB0aGVuIHNocmluayB0aGUgZGVzdGluYXRpb24gcmVjdCB0aGF0IHdlJ3JlIGRy
YXdpbmcgaW50byBhY2NvcmRpbmdseS4KLSAgICBpZiAoIXNob3VsZFVzZVN1YmltYWdlICYmIGN1
cnJIZWlnaHQgPCBpbWFnZVNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGFkanVzdGVkRGVzdFJlY3Qu
c2V0SGVpZ2h0KGFkanVzdGVkRGVzdFJlY3QuaGVpZ2h0KCkgKiBjdXJySGVpZ2h0IC8gaW1hZ2VT
aXplLmhlaWdodCgpKTsKLQotICAgIFN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZv
cm1Db250ZXh0LCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2Rl
KCkpOwotCi0gICAgLy8gSW1hZ2VPcmllbnRhdGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUg
YXQgKDAsIDApLgotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoYWRqdXN0ZWREZXN0UmVjdC54KCks
IGFkanVzdGVkRGVzdFJlY3QueSgpKTsKLSAgICBjb250ZXh0LT5TZXRUcmFuc2Zvcm0odHJhbnNm
b3JtKTsKLSAgICBhZGp1c3RlZERlc3RSZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7Ci0K
LSAgICBpZiAob3B0aW9ucy5vcmllbnRhdGlvbigpICE9IEltYWdlT3JpZW50YXRpb246Ok5vbmUp
IHsKLSAgICAgICAgY29uY2F0Q1RNKHBsYXRmb3JtQ29udGV4dCwgb3B0aW9ucy5vcmllbnRhdGlv
bigpLnRyYW5zZm9ybUZyb21EZWZhdWx0KGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpKSk7Ci0gICAg
ICAgIGlmIChvcHRpb25zLm9yaWVudGF0aW9uKCkudXNlc1dpZHRoQXNIZWlnaHQoKSkgewotICAg
ICAgICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3Qgd2lsbCBoYXZlIGl0J3Mgd2lkdGggYW5k
IGhlaWdodCBhbHJlYWR5IHJldmVyc2VkIGZvciB0aGUgb3JpZW50YXRpb24gb2YKLSAgICAgICAg
ICAgIC8vIHRoZSBpbWFnZSwgYXMgaXQgd2FzIG5lZWRlZCBmb3IgcGFnZSBsYXlvdXQsIHNvIHdl
IG5lZWQgdG8gcmV2ZXJzZSBpdCBiYWNrIGhlcmUuCi0gICAgICAgICAgICBhZGp1c3RlZERlc3RS
ZWN0ID0gRmxvYXRSZWN0KGFkanVzdGVkRGVzdFJlY3QueCgpLCBhZGp1c3RlZERlc3RSZWN0Lnko
KSwgYWRqdXN0ZWREZXN0UmVjdC5oZWlnaHQoKSwgYWRqdXN0ZWREZXN0UmVjdC53aWR0aCgpKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElO
RV9fKTsKLSAgICBkcmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIGFkanVzdGVkRGVzdFJl
Y3QsIHNoYWRvd1N0YXRlLCBbaW1hZ2UsIGFkanVzdGVkRGVzdFJlY3QsIGdsb2JhbEFscGhhLCBz
cmNSZWN0XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIHJlbmRl
clRhcmdldC0+RHJhd0JpdG1hcChpbWFnZSwgYWRqdXN0ZWREZXN0UmVjdCwgZ2xvYmFsQWxwaGEs
IEQyRDFfQklUTUFQX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVIsIHNyY1JlY3QpOwotICAgIH0p
OwotCi0gICAgaWYgKCFzdGF0ZVNhdmVyLmRpZFNhdmUoKSkKLSAgICAgICAgY29udGV4dC0+U2V0
VHJhbnNmb3JtKGN0bSk7Ci19Ci0KLXZvaWQgZHJhd1BhdHRlcm4oUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgQ09NUHRyPElEMkQxQml0bWFwPiYmIHRpbGVJbWFnZSwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3Bl
cmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotICAgIFBsYXRmb3JtQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihwbGF0Zm9ybUNvbnRleHQpOwotCi0gICAgY2xpcChwbGF0Zm9ybUNvbnRleHQs
IGRlc3RSZWN0KTsKLQotICAgIFN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1D
b250ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLQotICAgIGF1dG8gYml0bWFw
QnJ1c2hQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwQnJ1c2hQcm9wZXJ0aWVzKCk7Ci0gICAgYml0
bWFwQnJ1c2hQcm9wZXJ0aWVzLmV4dGVuZE1vZGVYID0gRDJEMV9FWFRFTkRfTU9ERV9XUkFQOwot
ICAgIGJpdG1hcEJydXNoUHJvcGVydGllcy5leHRlbmRNb2RlWSA9IEQyRDFfRVhURU5EX01PREVf
V1JBUDsKLQotICAgIC8vIENyZWF0ZSBhIGJydXNoIHRyYW5zZm9ybWF0aW9uIHNvIHdlIHBhaW50
IHVzaW5nIHRoZSBzZWN0aW9uIG9mIHRoZSBpbWFnZSB3ZSBjYXJlIGFib3V0LgotICAgIEFmZmlu
ZVRyYW5zZm9ybSB0cmFuc2Zvcm1hdGlvbiA9IHBhdHRlcm5UcmFuc2Zvcm07Ci0gICAgdHJhbnNm
b3JtYXRpb24udHJhbnNsYXRlKGRlc3RSZWN0LmxvY2F0aW9uKCkpOwotCi0gICAgYXV0byBicnVz
aFByb3BlcnRpZXMgPSBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKTsKLSAgICBicnVzaFByb3BlcnRp
ZXMudHJhbnNmb3JtID0gdHJhbnNmb3JtYXRpb247Ci0gICAgYnJ1c2hQcm9wZXJ0aWVzLm9wYWNp
dHkgPSAxLjBmOwotCi0gICAgLy8gSWYgd2Ugb25seSB3YW50IGEgc3Vic2V0IG9mIHRoZSBiaXRt
YXAsIHdlIG5lZWQgdG8gY3JlYXRlIGEgY3JvcHBlZCBiaXRtYXAgaW1hZ2UuIEFjY29yZGluZyB0
byB0aGUgZG9jdW1lbnRhdGlvbiwKLSAgICAvLyB0aGlzIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBi
aXRtYXAgbWVtb3J5LgotICAgIGlmIChzaXplLndpZHRoKCkgPiBkZXN0UmVjdC53aWR0aCgpIHx8
IHNpemUuaGVpZ2h0KCkgPiBkZXN0UmVjdC5oZWlnaHQoKSkgewotICAgICAgICBmbG9hdCBkcGlY
ID0gMDsKLSAgICAgICAgZmxvYXQgZHBpWSA9IDA7Ci0gICAgICAgIHRpbGVJbWFnZS0+R2V0RHBp
KCZkcGlYLCAmZHBpWSk7Ci0gICAgICAgIGF1dG8gYml0bWFwUHJvcGVydGllcyA9IEQyRDE6OkJp
dG1hcFByb3BlcnRpZXModGlsZUltYWdlLT5HZXRQaXhlbEZvcm1hdCgpLCBkcGlYLCBkcGlZKTsK
LSAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBzdWJJbWFnZTsKLSAgICAgICAgSFJFU1VMVCBo
ciA9IGNvbnRleHQtPkNyZWF0ZUJpdG1hcChJbnRTaXplKHRpbGVSZWN0LnNpemUoKSksIGJpdG1h
cFByb3BlcnRpZXMsICZzdWJJbWFnZSk7Ci0gICAgICAgIGlmIChTVUNDRUVERUQoaHIpKSB7Ci0g
ICAgICAgICAgICBEMkQxX1JFQ1RfVSBmaW5pc2hSZWN0ID0gSW50UmVjdCh0aWxlUmVjdCk7Ci0g
ICAgICAgICAgICBociA9IHN1YkltYWdlLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCB0aWxlSW1h
Z2UuZ2V0KCksICZmaW5pc2hSZWN0KTsKLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQot
ICAgICAgICAgICAgICAgIHRpbGVJbWFnZSA9IHN1YkltYWdlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwQnJ1c2g+IHBhdHRlcm5CcnVzaDsKLSAgICBIUkVTVUxU
IGhyID0gY29udGV4dC0+Q3JlYXRlQml0bWFwQnJ1c2godGlsZUltYWdlLmdldCgpLCAmYml0bWFw
QnJ1c2hQcm9wZXJ0aWVzLCAmYnJ1c2hQcm9wZXJ0aWVzLCAmcGF0dGVybkJydXNoKTsKLSAgICBB
U1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFtkZXN0UmVj
dCwgcGF0dGVybkJydXNoXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAg
ICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSBkZXN0UmVjdDsKLSAgICAgICAgcmVuZGVy
VGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBwYXR0ZXJuQnJ1c2guZ2V0KCkpOwotICAg
IH0pOwotfQotCi12b2lkIGRyYXdSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzLCBj
b25zdCBDb2xvciYgZmlsbENvbG9yLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSwgY29uc3QgQ29s
b3ImIHN0cm9rZUNvbG9yKQotewotICAgIC8vIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90
IGhhbmRsZSBwYXR0ZXJucyBhbmQgZ3JhZGllbnRzIGxpa2UgZHJhd1BhdGggZG9lcywgaXQgcHJv
YmFibHkgc2hvdWxkLgotICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkpOwotCi0gICAgcGxhdGZv
cm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwotICAgIGRyYXdXaXRob3V0U2hhZG93KHBs
YXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGZpbGxDb2xvciwgc3Ryb2tl
Q29sb3IsIHN0cm9rZVN0eWxlXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0g
ICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwotICAgICAgICBhdXRvIGZp
bGxCcnVzaCA9IHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihmaWxsQ29sb3IpOwotICAg
ICAgICByZW5kZXJUYXJnZXQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIGZpbGxCcnVzaC5nZXQo
KSk7Ci0gICAgICAgIGlmIChzdHJva2VTdHlsZSAhPSBOb1N0cm9rZSkgewotICAgICAgICAgICAg
YXV0byBzdHJva2VCcnVzaCA9IHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihzdHJva2VD
b2xvcik7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdSZWN0YW5nbGUoJmQyZFJlY3Qs
IHN0cm9rZUJydXNoLmdldCgpLCBwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCksIHBs
YXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZSgpKTsKLSAgICAgICAgfQotICAgIH0pOwotfQotCi12
b2lkIGRyYXdMaW5lKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBTdHJva2VT
dHlsZSBzdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yLCBmbG9hdCBzdHJva2VU
aGlja25lc3MsIGJvb2wgc2hvdWxkQW50aWFsaWFzKQotewotICAgIGJvb2wgaXNWZXJ0aWNhbExp
bmUgPSAocG9pbnQxLngoKSArIHN0cm9rZVRoaWNrbmVzcyA9PSBwb2ludDIueCgpKTsKLSAgICBm
bG9hdCBzdHJva2VXaWR0aCA9IGlzVmVydGljYWxMaW5lID8gcG9pbnQyLnkoKSAtIHBvaW50MS55
KCkgOiBwb2ludDIueCgpIC0gcG9pbnQxLngoKTsKLSAgICBpZiAoIXN0cm9rZVRoaWNrbmVzcyB8
fCAhc3Ryb2tlV2lkdGgpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gY29udGV4dCA9IHBs
YXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIGZsb2F0IGNvcm5lcldpZHRoID0g
MDsKLSAgICBib29sIGRyYXdzRGFzaGVkTGluZSA9IHN0cm9rZVN0eWxlID09IERvdHRlZFN0cm9r
ZSB8fCBzdHJva2VTdHlsZSA9PSBEYXNoZWRTdHJva2U7Ci0KLSAgICBDT01QdHI8SUQyRDFTdHJv
a2VTdHlsZT4gZDJkU3Ryb2tlU3R5bGU7Ci0gICAgUGxhdGZvcm1Db250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKHBsYXRmb3JtQ29udGV4dCwgZHJhd3NEYXNoZWRMaW5lKTsKLSAgICBpZiAoZHJh
d3NEYXNoZWRMaW5lKSB7Ci0gICAgICAgIC8vIEZpZ3VyZSBvdXQgZW5kIHBvaW50cyB0byBlbnN1
cmUgd2UgYWx3YXlzIHBhaW50IGNvcm5lcnMuCi0gICAgICAgIGNvcm5lcldpZHRoID0gZGFzaGVk
TGluZUNvcm5lcldpZHRoRm9yU3Ryb2tlV2lkdGgoc3Ryb2tlV2lkdGgsIHN0cm9rZVN0eWxlLCBz
dHJva2VUaGlja25lc3MpOwotICAgICAgICBzdHJva2VXaWR0aCAtPSAyICogY29ybmVyV2lkdGg7
Ci0gICAgICAgIGZsb2F0IHBhdHRlcm5XaWR0aCA9IGRhc2hlZExpbmVQYXR0ZXJuV2lkdGhGb3JT
dHJva2VXaWR0aChzdHJva2VXaWR0aCwgc3Ryb2tlU3R5bGUsIHN0cm9rZVRoaWNrbmVzcyk7Ci0g
ICAgICAgIC8vIENoZWNrIGlmIGNvcm5lciBkcmF3aW5nIHN1ZmZpY2llbnRseSBjb3ZlcnMgdGhl
IGxpbmUuCi0gICAgICAgIGlmIChzdHJva2VXaWR0aCA8PSBwYXR0ZXJuV2lkdGggKyAxKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGZsb2F0IHBhdHRlcm5PZmZzZXQgPSBkYXNoZWRM
aW5lUGF0dGVybk9mZnNldEZvclBhdHRlcm5BbmRTdHJva2VXaWR0aChwYXR0ZXJuV2lkdGgsIHN0
cm9rZVdpZHRoKTsKLSAgICAgICAgY29uc3QgZmxvYXQgZGFzaGVzWzJdID0geyBwYXR0ZXJuV2lk
dGgsIHBhdHRlcm5XaWR0aCB9OwotICAgICAgICBhdXRvIHN0cm9rZVN0eWxlUHJvcGVydGllcyA9
IHBsYXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZVByb3BlcnRpZXMoKTsKLSAgICAgICAgR3JhcGhp
Y3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVN0cm9rZVN0eWxlKCZzdHJva2VTdHls
ZVByb3BlcnRpZXMsIGRhc2hlcywgQVJSQVlTSVpFKGRhc2hlcyksICZkMmRTdHJva2VTdHlsZSk7
Ci0KLSAgICAgICAgcGxhdGZvcm1Db250ZXh0LnNldFBhdHRlcm5XaWR0aChwYXR0ZXJuV2lkdGgp
OwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0UGF0dGVybk9mZnNldChwYXR0ZXJuT2Zmc2V0
KTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0LnNldERhc2hlcyhEYXNoQXJyYXkoMiwgcGF0dGVy
bldpZHRoKSk7Ci0KLSAgICAgICAgZDJkU3Ryb2tlU3R5bGUgPSBwbGF0Zm9ybUNvbnRleHQuc3Ry
b2tlU3R5bGUoKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNlbnRlcmVkUG9pbnRzID0gY2VudGVyTGlu
ZUFuZEN1dE9mZkNvcm5lcnMoaXNWZXJ0aWNhbExpbmUsIGNvcm5lcldpZHRoLCBwb2ludDEsIHBv
aW50Mik7Ci0gICAgYXV0byBwMSA9IGNlbnRlcmVkUG9pbnRzWzBdOwotICAgIGF1dG8gcDIgPSBj
ZW50ZXJlZFBvaW50c1sxXTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElO
RV9fKTsKLQotICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9y
bUNvbnRleHQsIHAxLCBwMiwgZDJkU3Ryb2tlU3R5bGUsIHN0cm9rZUNvbG9yLCBzdHJva2VUaGlj
a25lc3NdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgcmVuZGVy
VGFyZ2V0LT5EcmF3TGluZShwMSwgcDIsIHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihz
dHJva2VDb2xvcikuZ2V0KCksIHN0cm9rZVRoaWNrbmVzcywgZDJkU3Ryb2tlU3R5bGUuZ2V0KCkp
OwotICAgIH0pOwotfQotCi12b2lkIGRyYXdMaW5lc0ZvclRleHQoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmLCBjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIGNvbnN0IERhc2hBcnJheSYsIGJvb2ws
IGJvb2wsIGNvbnN0IENvbG9yJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25z
dCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIGZpbGxFbGxpcHNlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBw
bGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGZpbGxD
b2xvciwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvciwg
ZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQotewotICAgIGF1dG8gZWxsaXBzZSA9IEQyRDE6OkVsbGlw
c2UocmVjdC5jZW50ZXIoKSwgMC41ICogcmVjdC53aWR0aCgpLCAwLjUgKiByZWN0LmhlaWdodCgp
KTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBkcmF3
V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1Db250ZXh0LCBlbGxpcHNl
LCBmaWxsQ29sb3IsIHN0cm9rZVN0eWxlLCBzdHJva2VDb2xvciwgc3Ryb2tlVGhpY2tuZXNzXShJ
RDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIGF1dG8gZmlsbEJydXNo
ID0gcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKGZpbGxDb2xvcik7Ci0gICAgICAgIHJl
bmRlclRhcmdldC0+RmlsbEVsbGlwc2UoJmVsbGlwc2UsIGZpbGxCcnVzaC5nZXQoKSk7Ci0gICAg
ICAgIGlmIChzdHJva2VTdHlsZSAhPSBTdHJva2VTdHlsZTo6Tm9TdHJva2UpIHsKLSAgICAgICAg
ICAgIGF1dG8gc3Ryb2tlQnJ1c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3Ioc3Ry
b2tlQ29sb3IpOwotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3RWxsaXBzZSgmZWxsaXBz
ZSwgc3Ryb2tlQnJ1c2guZ2V0KCksIHN0cm9rZVRoaWNrbmVzcywgcGxhdGZvcm1Db250ZXh0LnN0
cm9rZVN0eWxlKCkpOwotICAgICAgICB9Ci0gICAgfSk7Ci19Ci0KLXZvaWQgZHJhd0VsbGlwc2Uo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9y
LCBmbG9hdCBzdHJva2VUaGlja25lc3MpCi17Ci0gICAgaWYgKHN0cm9rZVN0eWxlID09IFN0cm9r
ZVN0eWxlOjpOb1N0cm9rZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBlbGxpcHNlID0g
RDJEMTo6RWxsaXBzZShyZWN0LmNlbnRlcigpLCAwLjUgKiByZWN0LndpZHRoKCksIDAuNSAqIHJl
Y3QuaGVpZ2h0KCkpOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18p
OwotICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9ybUNvbnRl
eHQsIGVsbGlwc2UsIHN0cm9rZUNvbG9yLCBzdHJva2VUaGlja25lc3NdKElEMkQxUmVuZGVyVGFy
Z2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgYXV0byBzdHJva2VCcnVzaCA9IHBsYXRmb3Jt
Q29udGV4dC5icnVzaFdpdGhDb2xvcihzdHJva2VDb2xvcik7Ci0gICAgICAgIHJlbmRlclRhcmdl
dC0+RHJhd0VsbGlwc2UoJmVsbGlwc2UsIHN0cm9rZUJydXNoLmdldCgpLCBzdHJva2VUaGlja25l
c3MsIHBsYXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZSgpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBk
cmF3Rm9jdXNSaW5nKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgUGF0aCYsIGZsb2F0
LCBjb25zdCBDb2xvciYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBkcmF3
Rm9jdXNSaW5nKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mLCBmbG9hdCwgY29uc3QgQ29sb3ImKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgZmx1c2goUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkKLXsK
LSAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLSAgICBEMkQxX1RB
RyBmaXJzdCwgc2Vjb25kOwotICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVy
VGFyZ2V0KCktPkZsdXNoKCZmaXJzdCwgJnNlY29uZCk7Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChT
VUNDRUVERUQoaHIpKTsKLX0KLQotdm9pZCBzYXZlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBw
bGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNhdmUoKTsKLQotICAgIGlm
IChhdXRvKiBncmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxhdGZvcm1Db250ZXh0LmdyYXBoaWNz
Q29udGV4dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZS0+c2F2ZSgp
OwotfQotCi12b2lkIHJlc3RvcmUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29u
dGV4dCkKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVzdG9yZSgpOwotCi0gICAgaWYgKGF1dG8q
IGdyYXBoaWNzQ29udGV4dFByaXZhdGUgPSBwbGF0Zm9ybUNvbnRleHQuZ3JhcGhpY3NDb250ZXh0
UHJpdmF0ZSgpKQotICAgICAgICBncmFwaGljc0NvbnRleHRQcml2YXRlLT5yZXN0b3JlKCk7Ci19
Ci0KLXZvaWQgdHJhbnNsYXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRl
eHQsIGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgQVNTRVJUKHBsYXRmb3JtQ29udGV4dC5yZW5k
ZXJUYXJnZXQoKSk7Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiBjdXJyZW50VHJhbnNmb3JtOwot
ICAgIHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+R2V0VHJhbnNmb3JtKCZjdXJyZW50
VHJhbnNmb3JtKTsKLQotICAgIGF1dG8gdHJhbnNsYXRpb24gPSBEMkQxOjpNYXRyaXgzeDJGOjpU
cmFuc2xhdGlvbih4LCB5KTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPlNl
dFRyYW5zZm9ybSh0cmFuc2xhdGlvbiAqIGN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAgaWYgKGF1
dG8qIGdyYXBoaWNzQ29udGV4dFByaXZhdGUgPSBwbGF0Zm9ybUNvbnRleHQuZ3JhcGhpY3NDb250
ZXh0UHJpdmF0ZSgpKQotICAgICAgICBncmFwaGljc0NvbnRleHRQcml2YXRlLT50cmFuc2xhdGUo
eCwgeSk7Ci19Ci0KLXZvaWQgcm90YXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQsIGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQotewotICAgIEFTU0VSVChwbGF0Zm9ybUNv
bnRleHQucmVuZGVyVGFyZ2V0KCkpOwotCi0gICAgRDJEMV9NQVRSSVhfM1gyX0YgY3VycmVudFRy
YW5zZm9ybTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkdldFRyYW5zZm9y
bSgmY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBhdXRvIHJvdGF0aW9uID0gRDJEMTo6TWF0cml4
M3gyRjo6Um90YXRpb24ocmFkMmRlZyhhbmdsZUluUmFkaWFucykpOwotICAgIHBsYXRmb3JtQ29u
dGV4dC5yZW5kZXJUYXJnZXQoKS0+U2V0VHJhbnNmb3JtKHJvdGF0aW9uICogY3VycmVudFRyYW5z
Zm9ybSk7Ci0KLSAgICBpZiAoYXV0byogZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZSA9IHBsYXRmb3Jt
Q29udGV4dC5ncmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4
dFByaXZhdGUtPnJvdGF0ZShhbmdsZUluUmFkaWFucyk7Ci19Ci0KLXZvaWQgc2NhbGUoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJiBzaXpl
KQotewotICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotCi0gICAg
RDJEMV9NQVRSSVhfM1gyX0YgY3VycmVudFRyYW5zZm9ybTsKLSAgICBwbGF0Zm9ybUNvbnRleHQu
cmVuZGVyVGFyZ2V0KCktPkdldFRyYW5zZm9ybSgmY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBh
dXRvIHNjYWxlID0gRDJEMTo6TWF0cml4M3gyRjo6U2NhbGUoc2l6ZSk7Ci0gICAgcGxhdGZvcm1D
b250ZXh0LnJlbmRlclRhcmdldCgpLT5TZXRUcmFuc2Zvcm0oc2NhbGUgKiBjdXJyZW50VHJhbnNm
b3JtKTsKLQotICAgIGlmIChhdXRvKiBncmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxhdGZvcm1D
b250ZXh0LmdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0
UHJpdmF0ZS0+c2NhbGUoc2l6ZSk7Ci19Ci0KLXZvaWQgY29uY2F0Q1RNKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWZmaW5l
VHJhbnNmb3JtKQotewotICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkp
OwotCi0gICAgRDJEMV9NQVRSSVhfM1gyX0YgY3VycmVudFRyYW5zZm9ybTsKLSAgICBwbGF0Zm9y
bUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkdldFRyYW5zZm9ybSgmY3VycmVudFRyYW5zZm9ybSk7
Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiB0cmFuc2Zvcm1Ub0NvbmNhdCA9IGFmZmluZVRyYW5z
Zm9ybTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPlNldFRyYW5zZm9ybSh0
cmFuc2Zvcm1Ub0NvbmNhdCAqIGN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAgaWYgKGF1dG8qIGdy
YXBoaWNzQ29udGV4dFByaXZhdGUgPSBwbGF0Zm9ybUNvbnRleHQuZ3JhcGhpY3NDb250ZXh0UHJp
dmF0ZSgpKQotICAgICAgICBncmFwaGljc0NvbnRleHRQcml2YXRlLT5jb25jYXRDVE0oYWZmaW5l
VHJhbnNmb3JtKTsKLX0KLQotdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ6OlRyYW5zcGFyZW5jeUxheWVyU3RhdGUgdHJhbnNwYXJlbmN5
TGF5ZXI7Ci0gICAgdHJhbnNwYXJlbmN5TGF5ZXIub3BhY2l0eSA9IG9wYWNpdHk7Ci0KLSAgICB0
cmFuc3BhcmVuY3lMYXllci5yZW5kZXJUYXJnZXQgPSBjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXQo
cGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5t
X3RyYW5zcGFyZW5jeUxheWVyU3RhY2suYXBwZW5kKFdURk1vdmUodHJhbnNwYXJlbmN5TGF5ZXIp
KTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5tX3RyYW5zcGFyZW5jeUxheWVyU3RhY2subGFzdCgp
LnJlbmRlclRhcmdldC0+QmVnaW5EcmF3KCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0Lm1fdHJhbnNw
YXJlbmN5TGF5ZXJTdGFjay5sYXN0KCkucmVuZGVyVGFyZ2V0LT5DbGVhcihEMkQxOjpDb2xvckYo
MCwgMCwgMCwgMCkpOwotfQotCi12b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgYXV0byBjdXJyZW50TGF5ZXIg
PSBwbGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLnRha2VMYXN0KCk7Ci0g
ICAgYXV0byByZW5kZXJUYXJnZXQgPSBjdXJyZW50TGF5ZXIucmVuZGVyVGFyZ2V0OwotICAgIGlm
ICghcmVuZGVyVGFyZ2V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBIUkVTVUxUIGhyID0gcmVu
ZGVyVGFyZ2V0LT5FbmREcmF3KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0KLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0K
LSAgICBpZiAoY3VycmVudExheWVyLmhhc1NoYWRvdykKLSAgICAgICAgZHJhd1dpdGhTaGFkb3dI
ZWxwZXIoY29udGV4dCwgcmVuZGVyVGFyZ2V0LmdldCgpLCBGbG9hdFJlY3QoKSwgY3VycmVudExh
eWVyLnNoYWRvd0NvbG9yLCBjdXJyZW50TGF5ZXIuc2hhZG93T2Zmc2V0LCBjdXJyZW50TGF5ZXIu
c2hhZG93Qmx1cik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYml0
bWFwOwotICAgICAgICBociA9IHJlbmRlclRhcmdldC0+R2V0Qml0bWFwKCZiaXRtYXApOwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgICAgICBDT01QdHI8SUQy
RDFCaXRtYXBCcnVzaD4gYml0bWFwQnJ1c2g7Ci0gICAgICAgIGF1dG8gYml0bWFwQnJ1c2hQcm9w
ZXJ0aWVzID0gRDJEMTo6Qml0bWFwQnJ1c2hQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIGF1dG8gYnJ1
c2hQcm9wZXJ0aWVzID0gRDJEMTo6QnJ1c2hQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIEhSRVNVTFQg
aHIgPSBjb250ZXh0LT5DcmVhdGVCaXRtYXBCcnVzaChiaXRtYXAuZ2V0KCksIGJpdG1hcEJydXNo
UHJvcGVydGllcywgYnJ1c2hQcm9wZXJ0aWVzLCAmYml0bWFwQnJ1c2gpOwotICAgICAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgICAgICBhdXRvIHNpemUgPSBiaXRtYXAt
PkdldFNpemUoKTsKLSAgICAgICAgYXV0byByZWN0SW5ESVAgPSBEMkQxOjpSZWN0RigwLCAwLCBz
aXplLndpZHRoLCBzaXplLmhlaWdodCk7Ci0gICAgICAgIGNvbnRleHQtPkZpbGxSZWN0YW5nbGUo
cmVjdEluRElQLCBiaXRtYXBCcnVzaC5nZXQoKSk7Ci0gICAgfQotfQotCi12b2lkIGNsaXAoUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotewotICAgIHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+UHVzaEF4aXNBbGln
bmVkQ2xpcChyZWN0LCBEMkQxX0FOVElBTElBU19NT0RFX1BFUl9QUklNSVRJVkUpOwotICAgIHBs
YXRmb3JtQ29udGV4dC5wdXNoQ2xpcChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6QXhpc0FsaWdu
ZWRDbGlwKTsKLQotICAgIGlmIChhdXRvKiBncmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxhdGZv
cm1Db250ZXh0LmdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250
ZXh0UHJpdmF0ZS0+Y2xpcChyZWN0KTsKLX0KLQotdm9pZCBjbGlwT3V0KFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAg
ICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRSZWN0KHJlY3QpOwotCi0gICAgY2xpcE91dChwbGF0
Zm9ybUNvbnRleHQsIHBhdGgpOwotfQotCi12b2lkIGNsaXBPdXQoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICAvLyBUbyBj
bGlwIE91dCB3ZSBuZWVkIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGluZmluaXRlCi0gICAgLy8g
Y2xpcHBpbmcgcmVjdCBhbmQgdGhlIHBhdGggd2UganVzdCBjcmVhdGVkLgotICAgIEQyRDFfU0la
RV9GIHJlbmRlcmVyU2l6ZSA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+R2V0U2l6
ZSgpOwotICAgIEZsb2F0UmVjdCBjbGlwQm91bmRzKDAsIDAsIHJlbmRlcmVyU2l6ZS53aWR0aCwg
cmVuZGVyZXJTaXplLmhlaWdodCk7Ci0KLSAgICBQYXRoIGJvdW5kaW5nUmVjdDsKLSAgICBib3Vu
ZGluZ1JlY3QuYWRkUmVjdChjbGlwQm91bmRzKTsKLSAgICBib3VuZGluZ1JlY3QuYXBwZW5kR2Vv
bWV0cnkocGF0aC5wbGF0Zm9ybVBhdGgoKSk7Ci0KLSAgICBDT01QdHI8SUQyRDFHZW9tZXRyeUdy
b3VwPiBwYXRoVG9DbGlwOwotICAgIGJvdW5kaW5nUmVjdC5jcmVhdGVHZW9tZXRyeVdpdGhGaWxs
TW9kZShXaW5kUnVsZTo6RXZlbk9kZCwgcGF0aFRvQ2xpcCk7Ci0gICAgY2xpcFBhdGgocGxhdGZv
cm1Db250ZXh0LCBwYXRoVG9DbGlwLmdldCgpKTsKLX0KLQotdm9pZCBjbGlwUGF0aChQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBQYXRoJiBwYXRoLCBXaW5k
UnVsZSBjbGlwUnVsZSkKLXsKLSAgICBpZiAocGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgRGly
ZWN0MkQ6OmNsaXAocGxhdGZvcm1Db250ZXh0LCBGbG9hdFJlY3QoKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBDT01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiBwYXRoVG9DbGlwOwot
ICAgIHBhdGguY3JlYXRlR2VvbWV0cnlXaXRoRmlsbE1vZGUoY2xpcFJ1bGUsIHBhdGhUb0NsaXAp
OwotCi0gICAgY2xpcFBhdGgocGxhdGZvcm1Db250ZXh0LCBwYXRoVG9DbGlwLmdldCgpKTsKLQot
ICAgIGlmIChhdXRvKiBncmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxhdGZvcm1Db250ZXh0Lmdy
YXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZS0+
Y2xpcChwYXRoKTsKLX0KLQotdm9pZCBjbGlwUGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYg
cGxhdGZvcm1Db250ZXh0LCBJRDJEMUdlb21ldHJ5KiBwYXRoKQotewotICAgIENPTVB0cjxJRDJE
MUxheWVyPiBjbGlwTGF5ZXI7Ci0gICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC5yZW5k
ZXJUYXJnZXQoKS0+Q3JlYXRlTGF5ZXIoJmNsaXBMYXllcik7Ci0gICAgaWYgKCFTVUNDRUVERUQo
aHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0
KCktPlB1c2hMYXllcihEMkQxOjpMYXllclBhcmFtZXRlcnMoRDJEMTo6SW5maW5pdGVSZWN0KCks
IHBhdGgpLCBjbGlwTGF5ZXIuZ2V0KCkpOwotICAgIHBsYXRmb3JtQ29udGV4dC5wdXNoUmVuZGVy
Q2xpcChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6TGF5ZXJDbGlwKTsKLSAgICBwbGF0Zm9ybUNv
bnRleHQuc2V0QWN0aXZlTGF5ZXIoV1RGTW92ZShjbGlwTGF5ZXIpKTsKLX0KLQotdm9pZCBjbGlw
VG9JbWFnZUJ1ZmZlcihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIElEMkQxUmVuZGVyVGFyZ2V0
KiwgY29uc3QgRmxvYXRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0KLXZv
aWQgY29weUJpdHMoY29uc3QgdWludDhfdCogc3JjUm93cywgdW5zaWduZWQgcm93Q291bnQsIHVu
c2lnbmVkIGNvbENvdW50LCB1bnNpZ25lZCBzcmNTdHJpZGUsIHVuc2lnbmVkIGRlc3RTdHJpZGUs
IHVpbnQ4X3QqIGRlc3RSb3dzKQotewotICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCByb3dD
b3VudDsgKyt5KSB7Ci0gICAgICAgIC8vIFNvdXJjZSBkYXRhIG1heSBiZSBwb3dlci1vZi10d28g
c2l6ZWQsIHNvIHdlIG5lZWQgdG8gb25seSBjb3B5IHRoZSBiaXRzIHRoYXQKLSAgICAgICAgLy8g
Y29ycmVzcG9uZCB0byB0aGUgcmVjdGFuZ2xlIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIuCi0gICAg
ICAgIGNvbnN0IHVpbnQzMl90KiBzcmNSb3cgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQz
Ml90Kj4oc3JjUm93cyArIHNyY1N0cmlkZSAqIHkpOwotICAgICAgICB1aW50MzJfdCogZGVzdFJv
dyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGRlc3RTdHJpZGUgKiB5
KTsKLSAgICAgICAgbWVtY3B5KGRlc3RSb3csIHNyY1JvdywgY29sQ291bnQpOwotICAgIH0KLX0K
LQotfSAvLyBuYW1lc3BhY2UgRGlyZWN0MkQKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuaAkocmV2aXNpb24g
Mjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJE
T3BlcmF0aW9ucy5oCShub25leGlzdGVudCkKQEAgLTEsMTcyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBCcmVudCBG
dWxnaGFtIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEx
IElnYWxpYSBTLkwuCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEludGVs
IENvcnBvcmF0aW9uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiRGFzaEFycmF5
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBl
cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5j
bHVkZSA8ZDJkMS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEFmZmluZVRyYW5z
Zm9ybTsKLWNsYXNzIENvbG9yOwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgRmxvYXRSb3VuZGVk
UmVjdDsKLWNsYXNzIEZsb2F0U2l6ZTsKLWNsYXNzIFBhdGg7Ci0KLXN0cnVjdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTsKLQotbmFtZXNwYWNlIERpcmVjdDJEIHsKLQotbmFtZXNwYWNlIFN0YXRlIHsK
LQotdm9pZCBzZXRTdHJva2VUaGlja25lc3MoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBmbG9h
dCk7Ci12b2lkIHNldFN0cm9rZVN0eWxlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgU3Ryb2tl
U3R5bGUpOwotCi12b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOwotdm9pZCBzZXRTaG91bGRBbnRp
YWxpYXMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBib29sKTsKLQotdm9pZCBzZXRDVE0oUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLUFmZmluZVRy
YW5zZm9ybSBnZXRDVE0oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKTsKLQotSW50UmVjdCBnZXRD
bGlwQm91bmRzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci1GbG9hdFJlY3Qgcm91bmRUb0Rl
dmljZVBpeGVscyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYpOwot
Ci1ib29sIGlzQWNjZWxlcmF0ZWRDb250ZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci0K
LX0gLy8gbmFtZXNwYWNlIFN0YXRlCi0KLXN0cnVjdCBGaWxsU291cmNlIHsKLSAgICBGaWxsU291
cmNlKCkgPSBkZWZhdWx0OwotICAgIGV4cGxpY2l0IEZpbGxTb3VyY2UoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKLQotICAgIGZsb2F0IGdsb2Jh
bEFscGhhIHsgMCB9OwotICAgIENPTVB0cjxJRDJEMUJydXNoPiBicnVzaDsKLSAgICBDb2xvciBj
b2xvcjsKLQotICAgIFdpbmRSdWxlIGZpbGxSdWxlIHsgV2luZFJ1bGU6Ok5vblplcm8gfTsKLX07
Ci0KLXN0cnVjdCBTdHJva2VTb3VyY2UgewotICAgIFN0cm9rZVNvdXJjZSgpID0gZGVmYXVsdDsK
LSAgICBleHBsaWNpdCBTdHJva2VTb3VyY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBj
b25zdCBHcmFwaGljc0NvbnRleHQmKTsKLQotICAgIGZsb2F0IGdsb2JhbEFscGhhIHsgMCB9Owot
ICAgIGZsb2F0IHRoaWNrbmVzcyB7IDAgfTsKLSAgICBDT01QdHI8SUQyRDFCcnVzaD4gYnJ1c2g7
Ci0gICAgQ29sb3IgY29sb3I7Ci19OwotCi1zdHJ1Y3QgU2hhZG93U3RhdGUgewotICAgIFNoYWRv
d1N0YXRlKCkgPSBkZWZhdWx0OwotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IFNoYWRvd1N0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Ci0KLSAgICBib29sIGlzVmlzaWJsZSgp
IGNvbnN0OwotICAgIGJvb2wgaXNSZXF1aXJlZChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpIGNv
bnN0OwotCi0gICAgRmxvYXRTaXplIG9mZnNldDsKLSAgICBmbG9hdCBibHVyIHsgMCB9OwotICAg
IENvbG9yIGNvbG9yOwotICAgIGJvb2wgaWdub3JlVHJhbnNmb3JtcyB7IGZhbHNlIH07Ci0KLSAg
ICBmbG9hdCBnbG9iYWxBbHBoYSB7IDEuMCB9OwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGdsb2Jh
bENvbXBvc2l0ZU9wZXJhdG9yIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIgfTsKLX07
Ci0KLXZvaWQgc2V0TGluZUNhcChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIExpbmVDYXApOwot
dm9pZCBzZXRMaW5lRGFzaChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IERhc2hBcnJh
eSYsIGZsb2F0KTsKLXZvaWQgc2V0TGluZUpvaW4oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBM
aW5lSm9pbik7Ci12b2lkIHNldE1pdGVyTGltaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBm
bG9hdCk7Ci0KLXZvaWQgZmlsbFJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGaWxsU291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQg
ZmlsbFJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBDb2xvciYsIGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIGZpbGxSZWN0V2l0aEdyYWRpZW50
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgSUQyRDFCcnVzaCop
Owotdm9pZCBmaWxsUm91bmRlZFJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBjb25zdCBTaGFkb3dTdGF0ZSYpOwotdm9p
ZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBGaWxsU291cmNlJiwg
Y29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQgZmlsbFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmLCBjb25zdCBQYXRoJiwgY29uc3QgRmlsbFNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7
Ci12b2lkIGZpbGxQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgUGF0aCYsIGNv
bnN0IENvbG9yJiwgY29uc3QgU2hhZG93U3RhdGUmKTsKLQotdm9pZCBzdHJva2VSZWN0KFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQsIGNvbnN0IFN0cm9r
ZVNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIHN0cm9rZVBhdGgoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmLCBjb25zdCBQYXRoJiwgY29uc3QgU3Ryb2tlU291cmNlJiwgY29uc3Qg
U2hhZG93U3RhdGUmKTsKLXZvaWQgY2xlYXJSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwg
Y29uc3QgRmxvYXRSZWN0Jik7Ci0KLXZvaWQgZHJhd0dseXBocyhQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYsIGNvbnN0IEZpbGxTb3VyY2UmLCBjb25zdCBTdHJva2VTb3VyY2UmLCBjb25zdCBTaGFk
b3dTdGF0ZSYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGb250JiwgZG91YmxlLCBjb25zdCBW
ZWN0b3I8dW5zaWduZWQgc2hvcnQ+JiBnbHlwaHMsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGhvcml6
b250YWxBZHZhbmNlcywgY29uc3QgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+JiwgZmxvYXQs
IFRleHREcmF3aW5nTW9kZUZsYWdzLCBmbG9hdCwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgQ29s
b3ImKTsKLQotdm9pZCBkcmF3UGxhdGZvcm1JbWFnZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYs
IElXSUNCaXRtYXAqLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmLCBmbG9hdCwg
Y29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQgZHJhd1BsYXRmb3JtSW1hZ2UoUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmLCBJRDJEMUJpdG1hcCosIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYsIGZsb2F0LCBjb25zdCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBkcmF3UGF0aChQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IFBhdGgmLCBjb25zdCBTdHJva2VTb3VyY2UmLCBjb25z
dCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBkcmF3UGF0dGVybihQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYsIENPTVB0cjxJRDJEMUJpdG1hcD4mJiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKTsKLQotdm9pZCBkcmF3V2l0aG91
dFNoYWRvdyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5k
ZXJUYXJnZXQqKT4mJiBkcmF3Q29tbWFuZHMpOwotdm9pZCBkcmF3V2l0aFNoYWRvdyhQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCYsIEZsb2F0UmVjdCBib3VuZGluZ1JlY3QsIGNvbnN0IFNoYWRvd1N0
YXRlJiwgRnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiYmIGRyYXdDb21tYW5kcyk7
Ci0KLXZvaWQgZHJhd1JlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCwgY29uc3QgQ29sb3ImLCBTdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImKTsKLXZv
aWQgZHJhd0xpbmUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgRmxvYXRQb2ludCYsIFN0cm9rZVN0eWxlLCBjb25zdCBDb2xvciYsIGZsb2F0LCBib29s
KTsKLXZvaWQgZHJhd0xpbmVzRm9yVGV4dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJv
b2wsIGNvbnN0IENvbG9yJik7Ci12b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSk7Ci12b2lkIGRyYXdFbGxpcHNlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3Qg
RmxvYXRSZWN0JiwgU3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiwgZmxvYXQpOwotdm9pZCBmaWxs
RWxsaXBzZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IENvbG9yJiwgU3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiwgZmxvYXQpOwotCi12b2lkIGRyYXdG
b2N1c1JpbmcoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBQYXRoJiwgZmxvYXQsIGNv
bnN0IENvbG9yJik7Ci12b2lkIGRyYXdGb2N1c1JpbmcoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQm
LCBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBjb25zdCBDb2xvciYpOwotCi12b2lk
IGZsdXNoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci12b2lkIHNhdmUoUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmKTsKLXZvaWQgcmVzdG9yZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwot
Ci12b2lkIHRyYW5zbGF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGZsb2F0LCBmbG9hdCk7
Ci12b2lkIHJvdGF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGZsb2F0KTsKLXZvaWQgc2Nh
bGUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFNpemUmKTsKLXZvaWQgY29u
Y2F0Q1RNKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7
Ci0KLXZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYs
IGZsb2F0KTsKLXZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmKTsKLQotdm9pZCBjbGlwKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRS
ZWN0Jik7Ci0KLXZvaWQgY2xpcE91dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZs
b2F0UmVjdCYpOwotdm9pZCBjbGlwT3V0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3Qg
UGF0aCYpOwotdm9pZCBjbGlwUGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IFBh
dGgmLCBXaW5kUnVsZSk7Ci12b2lkIGNsaXBQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwg
SUQyRDFHZW9tZXRyeSogcGF0aCk7Ci0KLXZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmLCBJRDJEMVJlbmRlclRhcmdldCosIGNvbnN0IEZsb2F0UmVjdCYpOwot
Ci19IC8vIG5hbWVzcGFjZSBEaXJlY3QyRAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAy
ODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRV
dGlsaXRpZXMuY3BwCShub25leGlzdGVudCkKQEAgLTEsNTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lP
TiBlbWJlZGRlZCBzeXN0ZW1zCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5o
IgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCi0jaW5jbHVkZSAi
SW50UmVjdC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlIDxkMmQxXzEuaD4KLSNp
bmNsdWRlIDxkM2QxMV8xLmg+Ci0jaW5jbHVkZSA8c2hsd2FwaS5oPgotI2luY2x1ZGUgPHdpbmNv
ZGVjLmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgRGlyZWN0MkQgewot
Ci1jb25zdGV4cHIgRFhHSV9GT1JNQVQgd2Via2l0VGV4dHVyZUZvcm1hdCA9IERYR0lfRk9STUFU
X0I4RzhSOEE4X1VOT1JNOwotY29uc3RleHByIEQyRDFfQUxQSEFfTU9ERSB3ZWJraXRBbHBoYU1v
ZGUgPSBEMkQxX0FMUEhBX01PREVfUFJFTVVMVElQTElFRDsKLQotSW50U2l6ZSBiaXRtYXBTaXpl
KElXSUNCaXRtYXBTb3VyY2UqIGJpdG1hcFNvdXJjZSkKLXsKLSAgICBVSU5UIHdpZHRoLCBoZWln
aHQ7Ci0gICAgSFJFU1VMVCBociA9IGJpdG1hcFNvdXJjZS0+R2V0U2l6ZSgmd2lkdGgsICZoZWln
aHQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAg
IHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwotfQotCi1GbG9hdFNpemUgYml0bWFwU2l6
ZShJRDJEMUJpdG1hcCogYml0bWFwU291cmNlKQotewotICAgIHJldHVybiBiaXRtYXBTb3VyY2Ut
PkdldFNpemUoKTsKLX0KLQotRmxvYXRTaXplIGJpdG1hcFJlc29sdXRpb24oSVdJQ0JpdG1hcFNv
dXJjZSogYml0bWFwU291cmNlKQotewotICAgIGNvbnN0ZXhwciBkb3VibGUgZHBpQmFzZSA9IDk2
OwotCi0gICAgZG91YmxlIGRwaVgsIGRwaVk7Ci0gICAgSFJFU1VMVCBociA9IGJpdG1hcFNvdXJj
ZS0+R2V0UmVzb2x1dGlvbigmZHBpWCwgJmRwaVkpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
LSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIEZsb2F0U2l6ZSByZXN1bHQoZHBpWCwgZHBpWSk7
Ci0gICAgcmVzdWx0LnNjYWxlKDEuMCAvIGRwaUJhc2UpOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLUZsb2F0U2l6ZSBiaXRtYXBSZXNvbHV0aW9uKElEMkQxQml0bWFwKiBiaXRtYXApCi17Ci0g
ICAgY29uc3RleHByIGRvdWJsZSBkcGlCYXNlID0gOTY7Ci0KLSAgICBmbG9hdCBkcGlYLCBkcGlZ
OwotICAgIGJpdG1hcC0+R2V0RHBpKCZkcGlYLCAmZHBpWSk7Ci0KLSAgICBGbG9hdFNpemUgcmVz
dWx0KGRwaVgsIGRwaVkpOwotICAgIHJlc3VsdC5zY2FsZSgxLjAgLyBkcGlCYXNlKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotCi19Ci0KLUZsb2F0U2l6ZSBiaXRtYXBSZXNvbHV0aW9uKElEMkQxUmVu
ZGVyVGFyZ2V0KiB0YXJnZXQpCi17Ci0gICAgY29uc3RleHByIGRvdWJsZSBkcGlCYXNlID0gOTY7
Ci0KLSAgICBmbG9hdCBkcGlYLCBkcGlZOwotICAgIHRhcmdldC0+R2V0RHBpKCZkcGlYLCAmZHBp
WSk7Ci0KLSAgICBGbG9hdFNpemUgcmVzdWx0KGRwaVgsIGRwaVkpOwotICAgIHJlc3VsdC5zY2Fs
ZSgxLjAgLyBkcGlCYXNlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotCi19Ci11bnNpZ25lZCBiaXRz
UGVyUGl4ZWwoR1VJRCBiaXRtYXBGb3JtYXQpCi17Ci0gICAgQ09NUHRyPElXSUNDb21wb25lbnRJ
bmZvPiBjb21wb25lbnRJbmZvOwotICAgIEhSRVNVTFQgaHIgPSBJbWFnZURlY29kZXJEaXJlY3Qy
RDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlQ29tcG9uZW50SW5mbyhiaXRtYXBGb3Jt
YXQsICZjb21wb25lbnRJbmZvKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJl
dHVybiA0OwotCi0gICAgQ09NUHRyPElXSUNQaXhlbEZvcm1hdEluZm8+IHBpeGVsRm9ybWF0Owot
ICAgIHBpeGVsRm9ybWF0LnF1ZXJ5KGNvbXBvbmVudEluZm8pOwotICAgIGlmICghcGl4ZWxGb3Jt
YXQpCi0gICAgICAgIHJldHVybiA0OwotCi0gICAgVUlOVCBicHAgPSAwOwotICAgIGhyID0gcGl4
ZWxGb3JtYXQtPkdldEJpdHNQZXJQaXhlbCgmYnBwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikp
Ci0gICAgICAgIHJldHVybiA0OwotCi0gICAgcmV0dXJuIGJwcDsKLX0KLQotQ09NUHRyPElXSUNC
aXRtYXA+IGNyZWF0ZURpcmVjdDJESW1hZ2VTdXJmYWNlV2l0aERhdGEodm9pZCogZGF0YSwgY29u
c3QgSW50U2l6ZSYgc2l6ZSwgdW5zaWduZWQgc3RyaWRlKQotewotICAgIENoZWNrZWRTaXplIG51
bUJ5dGVzID0gQ2hlY2tlZFVpbnQzMihzaXplLmhlaWdodCgpKSAqIHN0cmlkZTsKLSAgICBpZiAo
bnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IENPTVB0cjxJV0lDQml0bWFwPiBzdXJmYWNlOwotICAgIEhSRVNVTFQgaHIgPSBJbWFnZURlY29k
ZXJEaXJlY3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlQml0bWFwRnJvbU1lbW9y
eShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHdpY0JpdG1hcEZvcm1hdCgpLCBzdHJpZGUs
IHN0YXRpY19jYXN0PFVJTlQ+KG51bUJ5dGVzLnZhbHVlKCkpLCByZWludGVycHJldF9jYXN0PEJZ
VEUqPihkYXRhKSwgJnN1cmZhY2UpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gc3VyZmFjZTsKLX0KLQotQ09NUHRyPElXSUNC
aXRtYXA+IGNyZWF0ZVdpY0JpdG1hcChjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIENPTVB0
cjxJV0lDQml0bWFwPiBzdXJmYWNlOwotICAgIEhSRVNVTFQgaHIgPSBJbWFnZURlY29kZXJEaXJl
Y3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlQml0bWFwKHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSwgd2ljQml0bWFwRm9ybWF0KCksIFdJQ0JpdG1hcENhY2hlT25EZW1hbmQs
ICZzdXJmYWNlKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgcmV0dXJuIHN1cmZhY2U7Ci19Ci0KLUQyRDFfUElYRUxfRk9STUFUIHBpeGVs
Rm9ybWF0Rm9yU29mdHdhcmVNYW5pcHVsYXRpb24oKQotewotICAgIHJldHVybiBEMkQxOjpQaXhl
bEZvcm1hdChEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSwgRDJEMV9BTFBIQV9NT0RFX1BSRU1V
TFRJUExJRUQpOwotfQotCi1EMkQxX1BJWEVMX0ZPUk1BVCBwaXhlbEZvcm1hdCgpCi17Ci0gICAg
Ly8gU2luY2Ugd2UgbmVlZCB0byBpbnRlcmFjdCB3aXRoIEhEQyBmcm9tIHRpbWUtdG8tdGltZSwg
d2UgYXJlIGZvcmNlZCB0byB1c2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0gYW5kIEQyRDFf
QUxQSEFfTU9ERV9QUkVNVUxUSVBMSUVECi0gICAgcmV0dXJuIEQyRDE6OlBpeGVsRm9ybWF0KHdl
YmtpdFRleHR1cmVGb3JtYXQsIHdlYmtpdEFscGhhTW9kZSk7Ci19Ci0KLUdVSUQgd2ljQml0bWFw
Rm9ybWF0KCkKLXsKLSAgICAvLyBUaGlzIGlzIHRoZSBXSUMgZm9ybWF0IGNvbXBhdGlibGUgd2l0
aCBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STS4gSXQgaXMgYWxzbyBzdXBwb3NlZGx5IHRoZSBt
b3N0IGVmZmljaWVudCBpbi1tZW1vcnkKLSAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgV0lDIGlt
YWdlcy4KLSAgICByZXR1cm4gR1VJRF9XSUNQaXhlbEZvcm1hdDMyYnBwUEJHUkE7Ci19Ci0KLUQy
RDFfQklUTUFQX1BST1BFUlRJRVMgYml0bWFwUHJvcGVydGllcygpCi17Ci0gICAgcmV0dXJuIEQy
RDE6OkJpdG1hcFByb3BlcnRpZXMocGl4ZWxGb3JtYXQoKSk7Ci19Ci0KLUNPTVB0cjxJRDJEMUJp
dG1hcD4gY3JlYXRlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQsIGNvbnN0
IEludFNpemUmIHNpemUpCi17Ci0gICAgYXV0byBiaXRtYXBDcmVhdGVQcm9wZXJ0aWVzID0gYml0
bWFwUHJvcGVydGllcygpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7Ci0gICAg
RDJEMV9TSVpFX1UgYml0bWFwU2l6ZSA9IHNpemU7Ci0gICAgSFJFU1VMVCBociA9IHJlbmRlclRh
cmdldC0+Q3JlYXRlQml0bWFwKGJpdG1hcFNpemUsIGJpdG1hcENyZWF0ZVByb3BlcnRpZXMsICZi
aXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICByZXR1cm4gYml0bWFwOwotfQotCi1EMkQxX1JFTkRFUl9UQVJHRVRfUFJPUEVSVElF
UyByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCkKLXsKLSAgICByZXR1cm4gRDJEMTo6UmVuZGVyVGFy
Z2V0UHJvcGVydGllcyhEMkQxX1JFTkRFUl9UQVJHRVRfVFlQRV9ERUZBVUxULAotICAgICAgICBw
aXhlbEZvcm1hdCgpLCAwLCAwLCBEMkQxX1JFTkRFUl9UQVJHRVRfVVNBR0VfR0RJX0NPTVBBVElC
TEUsIEQyRDFfRkVBVFVSRV9MRVZFTF9ERUZBVUxUKTsKLX0KLQotQ09NUHRyPElEMkQxUmVuZGVy
VGFyZ2V0PiBjcmVhdGVSZW5kZXJUYXJnZXRGcm9tV0lDQml0bWFwKElXSUNCaXRtYXAqIGJpdG1h
cFNvdXJjZSkKLXsKLSAgICBhdXRvIHRhcmdldFByb3BlcnRpZXMgPSByZW5kZXJUYXJnZXRQcm9w
ZXJ0aWVzKCk7Ci0KLSAgICBDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IGJpdG1hcENvbnRleHQ7
Ci0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVh
dGVXaWNCaXRtYXBSZW5kZXJUYXJnZXQoYml0bWFwU291cmNlLCAmdGFyZ2V0UHJvcGVydGllcywg
JmJpdG1hcENvbnRleHQpOwotICAgIGlmICghYml0bWFwQ29udGV4dCB8fCAhU1VDQ0VFREVEKGhy
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gYml0bWFwQ29udGV4dDsK
LX0KLQotQ09NUHRyPElEMkQxRENSZW5kZXJUYXJnZXQ+IGNyZWF0ZUdESVJlbmRlclRhcmdldCgp
Ci17Ci0gICAgYXV0byB0YXJnZXRQcm9wZXJ0aWVzID0gcmVuZGVyVGFyZ2V0UHJvcGVydGllcygp
OwotCi0gICAgQ09NUHRyPElEMkQxRENSZW5kZXJUYXJnZXQ+IHJlbmRlclRhcmdldDsKLSAgICBI
UkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZURDUmVu
ZGVyVGFyZ2V0KCZ0YXJnZXRQcm9wZXJ0aWVzLCAmcmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAoIXJl
bmRlclRhcmdldCB8fCAhU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJU
YXJnZXQ+IGNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVy
VGFyZ2V0KQotewotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgICAgICByZW5kZXJUYXJnZXQg
PSBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKLQotICAgIENPTVB0cjxJ
RDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwQ29udGV4dDsKLSAgICBIUkVTVUxUIGhyID0g
cmVuZGVyVGFyZ2V0LT5DcmVhdGVDb21wYXRpYmxlUmVuZGVyVGFyZ2V0KG51bGxwdHIsIG51bGxw
dHIsIG51bGxwdHIsIEQyRDFfQ09NUEFUSUJMRV9SRU5ERVJfVEFSR0VUX09QVElPTlNfR0RJX0NP
TVBBVElCTEUsICZiaXRtYXBDb250ZXh0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGJpdG1hcENvbnRleHQ7Ci19Ci0KLUNP
TVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gY3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0T2ZT
aXplKGNvbnN0IEludFNpemUmIHNpemUsIElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQs
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQotewotICAgIFVOVVNFRF9QQVJBTShkZXZpY2VTY2Fs
ZUZhY3Rvcik7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgcmVuZGVyVGFyZ2V0
ID0gR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBDT01QdHI8
SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcENvbnRleHQ7Ci0gICAgYXV0byBkZXNpcmVk
U2l6ZSA9IEQyRDE6OlNpemVGKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgRDJE
MV9TSVpFX1UgcGl4ZWxTaXplID0gRDJEMTo6U2l6ZVUoY2xhbXBUbzx1bnNpZ25lZD4oZGV2aWNl
U2NhbGVGYWN0b3IgKiBzaXplLndpZHRoKCkpLCBjbGFtcFRvPHVuc2lnbmVkPihkZXZpY2VTY2Fs
ZUZhY3RvciAqIHNpemUuaGVpZ2h0KCkpKTsKLSAgICBIUkVTVUxUIGhyID0gcmVuZGVyVGFyZ2V0
LT5DcmVhdGVDb21wYXRpYmxlUmVuZGVyVGFyZ2V0KCZkZXNpcmVkU2l6ZSwgJnBpeGVsU2l6ZSwg
bnVsbHB0ciwgRDJEMV9DT01QQVRJQkxFX1JFTkRFUl9UQVJHRVRfT1BUSU9OU19HRElfQ09NUEFU
SUJMRSwgJmJpdG1hcENvbnRleHQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gYml0bWFwQ29udGV4dDsKLX0KLQotQ09NUHRy
PElEWEdJU3VyZmFjZTE+IGNyZWF0ZURYR0lTdXJmYWNlT2ZTaXplKGNvbnN0IEludFNpemUmIHNp
emUsIElEM0QxMURldmljZTEqIGRpcmVjdFhEZXZpY2UsIGJvb2wgY3Jvc3NQcm9jZXNzKQotewot
ICAgIGlmICghZGlyZWN0WERldmljZSkKLSAgICAgICAgZGlyZWN0WERldmljZSA9IERpcmVjdDJE
OjpkZWZhdWx0RGlyZWN0WERldmljZSgpOwotCi0gICAgLy8gQ3JlYXRlIHRoZSByZW5kZXIgdGFy
Z2V0IHRleHR1cmUKLSAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOwotICAgIFplcm9NZW1v
cnkoJmRlc2MsIHNpemVvZihkZXNjKSk7Ci0gICAgZGVzYy5XaWR0aCA9IHNpemUud2lkdGgoKTsK
LSAgICBkZXNjLkhlaWdodCA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzYy5NaXBMZXZlbHMgPSAx
OwotICAgIGRlc2MuQXJyYXlTaXplID0gMTsKLSAgICBkZXNjLkZvcm1hdCA9IHdlYmtpdFRleHR1
cmVGb3JtYXQ7Ci0gICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKLSAgICBkZXNjLlVzYWdl
ID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKLSAgICBkZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRf
UkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFOwotICAgIGRlc2MuQ1BV
QWNjZXNzRmxhZ3MgPSAwOwotICAgIGRlc2MuTWlzY0ZsYWdzID0gRDNEMTFfUkVTT1VSQ0VfTUlT
Q19HRElfQ09NUEFUSUJMRTsKLSAgICBpZiAoY3Jvc3NQcm9jZXNzKQotICAgICAgICBkZXNjLk1p
c2NGbGFncyB8PSBEM0QxMV9SRVNPVVJDRV9NSVNDX1NIQVJFRF9OVEhBTkRMRSB8IEQzRDExX1JF
U09VUkNFX01JU0NfU0hBUkVEX0tFWUVETVVURVg7Ci0KLSAgICBDT01QdHI8SUQzRDExVGV4dHVy
ZTJEPiB0ZXh0dXJlOwotICAgIEhSRVNVTFQgaHIgPSBkaXJlY3RYRGV2aWNlLT5DcmVhdGVUZXh0
dXJlMkQoJmRlc2MsIG51bGxwdHIsICZ0ZXh0dXJlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUND
RUVERUQoaHIpKTsKLQotICAgIENPTVB0cjxJRFhHSVN1cmZhY2UxPiBzdXJmYWNlOwotICAgIGhy
ID0gdGV4dHVyZS0+UXVlcnlJbnRlcmZhY2UoJnN1cmZhY2UpOwotICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotCi0gICAgcmV0dXJuIHN1cmZhY2U7Ci19Ci0KLUNPTVB0cjxJRDJE
MVJlbmRlclRhcmdldD4gY3JlYXRlU3VyZmFjZVJlbmRlclRhcmdldChJRFhHSVN1cmZhY2UxKiBz
dXJmYWNlKQotewotICAgIGF1dG8gcGl4ZWxGb3JtYXQgPSBEMkQxOjpQaXhlbEZvcm1hdCh3ZWJr
aXRUZXh0dXJlRm9ybWF0LCB3ZWJraXRBbHBoYU1vZGUpOwotCi0gICAgYXV0byBwcm9wZXJ0aWVz
ID0gRDJEMTo6UmVuZGVyVGFyZ2V0UHJvcGVydGllcyhEMkQxX1JFTkRFUl9UQVJHRVRfVFlQRV9E
RUZBVUxULAotICAgICAgICBwaXhlbEZvcm1hdCwgMCwgMCwgRDJEMV9SRU5ERVJfVEFSR0VUX1VT
QUdFX0dESV9DT01QQVRJQkxFLCBEMkQxX0ZFQVRVUkVfTEVWRUxfMTApOwotCi0gICAgQ09NUHRy
PElEMkQxUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IEdyYXBo
aWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEeGdpU3VyZmFjZVJlbmRlclRhcmdl
dChzdXJmYWNlLCBwcm9wZXJ0aWVzLCAmcmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAoIVNVQ0NFRURF
RChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHJlbmRlclRhcmdl
dDsKLX0KLQotdm9pZCBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKElEMkQxQml0bWFw
KiBmcm9tLCBJRDJEMUJpdG1hcCogdG8sIGNvbnN0IEludFNpemUmIHNvdXJjZU9mZnNldCwgY29u
c3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgZGVzdE9mZnNldCkKLXsKLSAgICBJbnRT
aXplIHNvdXJjZUJpdG1hcFNpemUgPSBmcm9tLT5HZXRQaXhlbFNpemUoKTsKLSAgICBpZiAoc291
cmNlQml0bWFwU2l6ZS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSB0
YXJnZXRCaXRtYXBTaXplID0gdG8tPkdldFBpeGVsU2l6ZSgpOwotICAgIGlmICh0YXJnZXRCaXRt
YXBTaXplLmlzWmVybygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IHNvdXJjZVJl
Y3Qoc291cmNlT2Zmc2V0LndpZHRoKCksIHNvdXJjZU9mZnNldC5oZWlnaHQoKSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBJbnRSZWN0IHRhcmdldFJlY3QoZGVzdE9mZnNldC53
aWR0aCgpLCBkZXN0T2Zmc2V0LmhlaWdodCgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
OwotCi0gICAgSW50UmVjdCBzb3VyY2VCaXRtYXBSZWN0KEludFBvaW50KCksIHNvdXJjZUJpdG1h
cFNpemUpOwotICAgIEludFJlY3QgdGFyZ2V0Qml0bWFwUmVjdChJbnRQb2ludCgpLCB0YXJnZXRC
aXRtYXBTaXplKTsKLQotICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KHNvdXJjZUJpdG1hcFJlY3Qp
OwotICAgIHRhcmdldFJlY3QuaW50ZXJzZWN0KHRhcmdldEJpdG1hcFJlY3QpOwotCi0gICAgRDJE
MV9SRUNUX1UgZDJkU291cmNlUmVjdCA9IEQyRDE6OlJlY3RVKHNvdXJjZVJlY3QueCgpLCBzb3Vy
Y2VSZWN0LnkoKSwgc291cmNlUmVjdC54KCkgKyB0YXJnZXRSZWN0LndpZHRoKCksIHNvdXJjZVJl
Y3QueSgpICsgdGFyZ2V0UmVjdC5oZWlnaHQoKSk7Ci0gICAgYXV0byBvZmZzZXQgPSBEMkQxOjpQ
b2ludDJVKGRlc3RPZmZzZXQud2lkdGgoKSwgZGVzdE9mZnNldC5oZWlnaHQoKSk7Ci0KLSAgICBI
UkVTVUxUIGhyID0gdG8tPkNvcHlGcm9tQml0bWFwKCZvZmZzZXQsIGZyb20sICZkMmRTb3VyY2VS
ZWN0KTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci19Ci0KLXZvaWQgd3JpdGVEaWFnbm9z
dGljUE5HVG9QYXRoKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQsIElEMkQxQml0bWFw
KiBiaXRtYXAsIExQQ1dTVFIgZmlsZU5hbWUpCi17Ci0gICAgQ09NUHRyPElXSUNCaXRtYXBFbmNv
ZGVyPiB3aWNCaXRtYXBFbmNvZGVyOwotICAgIEhSRVNVTFQgaHIgPSBJbWFnZURlY29kZXJEaXJl
Y3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlRW5jb2RlcihHVUlEX0NvbnRhaW5l
ckZvcm1hdFBuZywgbnVsbHB0ciwgJndpY0JpdG1hcEVuY29kZXIpOwotICAgIEFTU0VSVChTVUND
RUVERUQoaHIpKTsKLQotICAgIERXT1JEIG1vZGUgPSBTVEdNX0NSRUFURSB8IFNUR01fUkVBRFdS
SVRFIHwgU1RHTV9TSEFSRV9ERU5ZX1dSSVRFOwotICAgIENPTVB0cjxJU3RyZWFtPiBzdHJlYW07
Ci0gICAgaHIgPSA6OlNIQ3JlYXRlU3RyZWFtT25GaWxlRXgoZmlsZU5hbWUsIG1vZGUsIEZJTEVf
QVRUUklCVVRFX05PUk1BTCwgVFJVRSwgbnVsbHB0ciwgJnN0cmVhbSk7Ci0gICAgQVNTRVJUKFNV
Q0NFRURFRChocikpOwotCi0gICAgaHIgPSB3aWNCaXRtYXBFbmNvZGVyLT5Jbml0aWFsaXplKHN0
cmVhbS5nZXQoKSwgV0lDQml0bWFwRW5jb2Rlck5vQ2FjaGUpOwotICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpKTsKLQotICAgIENPTVB0cjxJV0lDQml0bWFwRnJhbWVFbmNvZGU+IHdpY0ZyYW1lRW5j
b2RlOwotICAgIGhyID0gd2ljQml0bWFwRW5jb2Rlci0+Q3JlYXRlTmV3RnJhbWUoJndpY0ZyYW1l
RW5jb2RlLCBudWxscHRyKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBociA9
IHdpY0ZyYW1lRW5jb2RlLT5Jbml0aWFsaXplKG51bGxwdHIpOwotICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpKTsKLQotICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IGQyZERldmljZUNvbnRl
eHQ7Ci0gICAgaHIgPSByZW5kZXJUYXJnZXQtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEMkQx
RGV2aWNlQ29udGV4dCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmZDJkRGV2aWNlQ29udGV4
dCkpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENPTVB0cjxJRDJEMURldmlj
ZT4gZDJkRGV2aWNlOwotICAgIGQyZERldmljZUNvbnRleHQtPkdldERldmljZSgmZDJkRGV2aWNl
KTsKLQotICAgIENPTVB0cjxJV0lDSW1hZ2VFbmNvZGVyPiBpbWFnZUVuY29kZXI7Ci0gICAgaHIg
PSBJbWFnZURlY29kZXJEaXJlY3QyRDo6c3lzdGVtSW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlSW1h
Z2VFbmNvZGVyKGQyZERldmljZS5nZXQoKSwgJmltYWdlRW5jb2Rlcik7Ci0gICAgQVNTRVJUKFNV
Q0NFRURFRChocikpOwotCi0gICAgaHIgPSBpbWFnZUVuY29kZXItPldyaXRlRnJhbWUoYml0bWFw
LCB3aWNGcmFtZUVuY29kZS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgaHIgPSB3aWNGcmFtZUVuY29kZS0+Q29tbWl0KCk7Ci0gICAgQVNTRVJUKFNV
Q0NFRURFRChocikpOwotCi0gICAgaHIgPSB3aWNCaXRtYXBFbmNvZGVyLT5Db21taXQoKTsKLSAg
ICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBociA9IHN0cmVhbS0+Q29tbWl0KFNUR0Nf
REVGQVVMVCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotfQotCi1zdGF0aWMgSUQzRDEx
RGV2aWNlQ29udGV4dDEqIGltbWVkaWF0ZUNvbnRleHQgPSBudWxscHRyOwotCi1JRDNEMTFEZXZp
Y2VDb250ZXh0MSogZHhnaUltbWVkaWF0ZUNvbnRleHQoKQotewotICAgIGlmICghaW1tZWRpYXRl
Q29udGV4dCkKLSAgICAgICAgZGVmYXVsdERpcmVjdFhEZXZpY2UoKTsKLQotICAgIFJFTEVBU0Vf
QVNTRVJUKGltbWVkaWF0ZUNvbnRleHQpOwotICAgIHJldHVybiBpbW1lZGlhdGVDb250ZXh0Owot
fQotCi1JRDNEMTFEZXZpY2UxKiBkZWZhdWx0RGlyZWN0WERldmljZSgpCi17Ci0gICAgc3RhdGlj
IElEM0QxMURldmljZTEqIGRlZmF1bHREZXZpY2UxID0gbnVsbHB0cjsKLQotICAgIGlmICghZGVm
YXVsdERldmljZTEpIHsKLSAgICAgICAgaW50IGRldmljZUZsYWdzID0gRDNEMTFfQ1JFQVRFX0RF
VklDRV9CR1JBX1NVUFBPUlQ7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBkZXZpY2VGbGFncyB8
PSBEM0QxMV9DUkVBVEVfREVWSUNFX0RFQlVHOwotI2VuZGlmCi0KLSAgICAgICAgSUQzRDExRGV2
aWNlKiBkZWZhdWx0RGV2aWNlID0gbnVsbHB0cjsKLSAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUwg
ZmVhdHVyZUxldmVsID0geyB9OwotICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0KiBpbW1lZGlh
dGVEZXZpY2VDb250ZXh0ID0gbnVsbHB0cjsKLSAgICAgICAgSFJFU1VMVCBociA9IEQzRDExQ3Jl
YXRlRGV2aWNlKG51bGxwdHIsIEQzRF9EUklWRVJfVFlQRV9IQVJEV0FSRSwgbnVsbHB0ciwgZGV2
aWNlRmxhZ3MsIG51bGxwdHIsIDAsIEQzRDExX1NES19WRVJTSU9OLCAmZGVmYXVsdERldmljZSwg
JmZlYXR1cmVMZXZlbCwgJmltbWVkaWF0ZURldmljZUNvbnRleHQpOwotICAgICAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgICAgICBociA9IGRlZmF1bHREZXZpY2UtPlF1
ZXJ5SW50ZXJmYWNlKCZkZWZhdWx0RGV2aWNlMSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNV
Q0NFRURFRChocikpOwotICAgICAgICBkZWZhdWx0RGV2aWNlMS0+QWRkUmVmKCk7Ci0KLSAgICAg
ICAgaHIgPSBpbW1lZGlhdGVEZXZpY2VDb250ZXh0LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJ
RDNEMTFEZXZpY2VDb250ZXh0MSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmaW1tZWRpYXRl
Q29udGV4dCkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAg
ICAgaW1tZWRpYXRlQ29udGV4dC0+QWRkUmVmKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlZmF1
bHREZXZpY2UxOwotfQotCi1ib29sIGNyZWF0ZURldmljZUFuZENvbnRleHQoQ09NUHRyPElEM0Qx
MURldmljZTE+JiBkM2REZXZpY2UsIENPTVB0cjxJRDNEMTFEZXZpY2VDb250ZXh0MT4mIGltbWVk
aWF0ZUNvbnRleHQpCi17Ci0gICAgaW50IGRldmljZUZsYWdzID0gRDNEMTFfQ1JFQVRFX0RFVklD
RV9CR1JBX1NVUFBPUlQ7Ci0jaWZuZGVmIE5ERUJVRwotICAgIGRldmljZUZsYWdzIHw9IEQzRDEx
X0NSRUFURV9ERVZJQ0VfREVCVUc7Ci0jZW5kaWYKLQotICAgIEQzRF9GRUFUVVJFX0xFVkVMIGZl
YXR1cmVMZXZlbCA9IHsgfTsKLSAgICBJRDNEMTFEZXZpY2UqIGRlZmF1bHREZXZpY2UgPSBudWxs
cHRyOwotICAgIElEM0QxMURldmljZUNvbnRleHQqIGltbWVkaWF0ZURldmljZUNvbnRleHQgPSBu
dWxscHRyOwotICAgIEhSRVNVTFQgaHIgPSA6OkQzRDExQ3JlYXRlRGV2aWNlKG51bGxwdHIsIEQz
RF9EUklWRVJfVFlQRV9IQVJEV0FSRSwgbnVsbHB0ciwgZGV2aWNlRmxhZ3MsIG51bGxwdHIsIDAs
IEQzRDExX1NES19WRVJTSU9OLCAmZGVmYXVsdERldmljZSwgJmZlYXR1cmVMZXZlbCwgJmltbWVk
aWF0ZURldmljZUNvbnRleHQpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwot
Ci0gICAgaHIgPSBkZWZhdWx0RGV2aWNlLT5RdWVyeUludGVyZmFjZSgmZDNkRGV2aWNlKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICBkZWZhdWx0RGV2aWNlLT5SZWxl
YXNlKCk7Ci0KLSAgICBociA9IGltbWVkaWF0ZURldmljZUNvbnRleHQtPlF1ZXJ5SW50ZXJmYWNl
KCZpbW1lZGlhdGVDb250ZXh0KTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsK
LSAgICBpbW1lZGlhdGVDb250ZXh0LT5SZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LUNPTVB0cjxJRFhHSURldmljZTE+IHRvRFhHSURldmljZShjb25zdCBDT01QdHI8SUQzRDExRGV2
aWNlMT4mIGQzZERldmljZSkKLXsKLSAgICBpZiAoIWQzZERldmljZSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SURYR0lEZXZpY2UxPiBkeGdpRGV2aWNlOwotICAgIEhS
RVNVTFQgaHIgPSBkM2REZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEWEdJRGV2aWNl
MSksICh2b2lkICoqKSZkeGdpRGV2aWNlKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGR4Z2lEZXZpY2U7Ci19Ci0KLUNPTVB0
cjxJRFhHSUZhY3RvcnkyPiBmYWN0b3J5Rm9yRFhHSURldmljZShjb25zdCBDT01QdHI8SURYR0lE
ZXZpY2UxPiYgZGV2aWNlKQotewotICAgIGlmICghZGV2aWNlKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIENPTVB0cjxJRFhHSUFkYXB0ZXI+IGFkYXB0b3I7Ci0gICAgSFJFU1VMVCBo
ciA9IGRldmljZS0+R2V0UGFyZW50KF9fdXVpZG9mKElEWEdJQWRhcHRlciksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPigmYWRhcHRvcikpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgQ09NUHRyPElEWEdJRmFjdG9yeT4gZmFjdG9yeTsKLSAgICBociA9IGFkYXB0
b3ItPkdldFBhcmVudChfX3V1aWRvZihJRFhHSUZhY3RvcnkpLCByZWludGVycHJldF9jYXN0PHZv
aWQqKj4oJmZhY3RvcnkpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQot
ICAgIENPTVB0cjxJRFhHSUZhY3RvcnkyPiBmYWN0b3J5MjsKLSAgICBociA9IGZhY3RvcnktPlF1
ZXJ5SW50ZXJmYWNlKCZmYWN0b3J5Mik7IAotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotICAgIAotICAgIHJldHVybiBmYWN0b3J5MjsKLX0KLQotQ09NUHRyPElEWEdJU3dhcENo
YWluPiBzd2FwQ2hhaW5PZlNpemVGb3JXaW5kb3dBbmREZXZpY2UoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgc2l6ZSwgSFdORCB3aW5kb3csIGNvbnN0IENPTVB0cjxJRDNEMTFEZXZpY2UxPiYgZGV2
aWNlKQotewotICAgIGlmICghZGV2aWNlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IERYR0lfU1dBUF9DSEFJTl9ERVNDMSBzd2FwQ2hhaW5EZXNjcmlwdGlvbjsKLSAgICA6Olplcm9N
ZW1vcnkoJnN3YXBDaGFpbkRlc2NyaXB0aW9uLCBzaXplb2Yoc3dhcENoYWluRGVzY3JpcHRpb24p
KTsKLSAgICBzd2FwQ2hhaW5EZXNjcmlwdGlvbi5XaWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBz
d2FwQ2hhaW5EZXNjcmlwdGlvbi5IZWlnaHQgPSBzaXplLmhlaWdodCgpOwotICAgIHN3YXBDaGFp
bkRlc2NyaXB0aW9uLkZvcm1hdCA9IHdlYmtpdFRleHR1cmVGb3JtYXQ7Ci0gICAgc3dhcENoYWlu
RGVzY3JpcHRpb24uU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgc3dhcENoYWluRGVzY3JpcHRp
b24uU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICBzd2FwQ2hhaW5EZXNjcmlwdGlvbi5CdWZm
ZXJVc2FnZSA9IERYR0lfVVNBR0VfU0hBREVSX0lOUFVUIHwgRFhHSV9VU0FHRV9SRU5ERVJfVEFS
R0VUX09VVFBVVDsKLSAgICBzd2FwQ2hhaW5EZXNjcmlwdGlvbi5CdWZmZXJDb3VudCA9IDE7Ci0g
ICAgc3dhcENoYWluRGVzY3JpcHRpb24uRmxhZ3MgPSBEWEdJX1NXQVBfQ0hBSU5fRkxBR19HRElf
Q09NUEFUSUJMRTsKLQotICAgIGF1dG8gZmFjdG9yeSA9IERpcmVjdDJEOjpmYWN0b3J5Rm9yRFhH
SURldmljZShEaXJlY3QyRDo6dG9EWEdJRGV2aWNlKGRldmljZSkpOwotCi0gICAgQ09NUHRyPElE
WEdJU3dhcENoYWluMT4gc3dhcENoYWluMTsKLSAgICBIUkVTVUxUIGhyID0gZmFjdG9yeS0+Q3Jl
YXRlU3dhcENoYWluRm9ySHduZChkZXZpY2UuZ2V0KCksIHdpbmRvdywgJnN3YXBDaGFpbkRlc2Ny
aXB0aW9uLCBudWxscHRyLCBudWxscHRyLCAmc3dhcENoYWluMSk7Ci0gICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJRFhHSVN3YXBD
aGFpbj4gc3dhcENoYWluKFF1ZXJ5LCBzd2FwQ2hhaW4xKTsKLSAgICByZXR1cm4gc3dhcENoYWlu
OwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXA+IGNyZWF0ZUJpdG1hcENvcHlGcm9tQ29udGV4dChJ
RDJEMUJpdG1hcFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0KQotewotICAgIENPTVB0cjxJRDJE
MUJpdG1hcD4gY3VycmVudENhbnZhczsKLSAgICBIUkVTVUxUIGhyID0gYml0bWFwVGFyZ2V0LT5H
ZXRCaXRtYXAoJmN1cnJlbnRDYW52YXMpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGJpdG1hcENyZWF0ZVByb3BlcnRpZXMgPSBi
aXRtYXBQcm9wZXJ0aWVzKCk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKLSAg
ICBEMkQxX1NJWkVfVSBiaXRtYXBTaXplID0gY3VycmVudENhbnZhcy0+R2V0UGl4ZWxTaXplKCk7
Ci0gICAgaHIgPSBiaXRtYXBUYXJnZXQtPkNyZWF0ZUJpdG1hcChiaXRtYXBTaXplLCBiaXRtYXBD
cmVhdGVQcm9wZXJ0aWVzLCAmYml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byB0YXJnZXRQb3MgPSBEMkQxOjpQb2ludDJV
KCk7Ci0gICAgRDJEMV9SRUNUX1UgZGF0YVJlY3QgPSBEMkQxOjpSZWN0VSgwLCAwLCBiaXRtYXBT
aXplLndpZHRoLCBiaXRtYXBTaXplLmhlaWdodCk7Ci0gICAgaHIgPSBiaXRtYXAtPkNvcHlGcm9t
Qml0bWFwKCZ0YXJnZXRQb3MsIGN1cnJlbnRDYW52YXMuZ2V0KCksICZkYXRhUmVjdCk7Ci0gICAg
aWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
Yml0bWFwOwotfQotCi19IC8vIG5hbWVzcGFjZSBEaXJlY3QyRAotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuaAko
cmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RpcmVjdDJEVXRpbGl0aWVzLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMDUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAyMDEx
IFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1FeHBvcnRNYWNyb3MuaCIKLQotaW50ZXJmYWNlIElEMkQxQml0bWFwOwotaW50ZXJmYWNl
IElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNlIElEMkQxRENSZW5kZXJUYXJnZXQ7
Ci1pbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQzRDExRGV2aWNlMTsK
LWludGVyZmFjZSBJRDNEMTFEZXZpY2VDb250ZXh0MTsKLWludGVyZmFjZSBJRDNEMTFSZW5kZXJU
YXJnZXRWaWV3OwotaW50ZXJmYWNlIElEWEdJRGV2aWNlMTsKLWludGVyZmFjZSBJRFhHSUZhY3Rv
cnkyOwotaW50ZXJmYWNlIElEWEdJU3dhcENoYWluOwotaW50ZXJmYWNlIElEWEdJU3VyZmFjZTE7
Ci1pbnRlcmZhY2UgSVdJQ0JpdG1hcFNvdXJjZTsKLWludGVyZmFjZSBJV0lDQml0bWFwOwotCi1z
dHJ1Y3QgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzsKLXN0cnVjdCBEMkQxX1BJWEVMX0ZPUk1BVDsK
LXN0cnVjdCBEMkQxX1JFTkRFUl9UQVJHRVRfUFJPUEVSVElFUzsKLXN0cnVjdCBEM0QxMV9WSUVX
UE9SVDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3Mg
RmxvYXRTaXplOwotY2xhc3MgSW50UmVjdDsKLWNsYXNzIEludFNpemU7Ci0KLW5hbWVzcGFjZSBE
aXJlY3QyRCB7Ci0KLUdVSUQgd2ljQml0bWFwRm9ybWF0KCk7Ci1EMkQxX1BJWEVMX0ZPUk1BVCBw
aXhlbEZvcm1hdCgpOyAvLyBCR1JBCi1EMkQxX1BJWEVMX0ZPUk1BVCBwaXhlbEZvcm1hdEZvclNv
ZnR3YXJlTWFuaXB1bGF0aW9uKCk7IC8vIFJHQkEKLUQyRDFfQklUTUFQX1BST1BFUlRJRVMgYml0
bWFwUHJvcGVydGllcygpOwotRDJEMV9SRU5ERVJfVEFSR0VUX1BST1BFUlRJRVMgcmVuZGVyVGFy
Z2V0UHJvcGVydGllcygpOwotCi12b2lkIGluUGxhY2VTd2l6emxlKHVpbnQ4X3QqIGJ5dGVEYXRh
LCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgYXBwbHlQcmVtdWx0aXBsaWNhdGlvbiA9IGZhbHNlKTsK
LQotSW50U2l6ZSBiaXRtYXBTaXplKElXSUNCaXRtYXBTb3VyY2UqKTsKLUZsb2F0U2l6ZSBiaXRt
YXBTaXplKElEMkQxQml0bWFwKik7Ci1GbG9hdFNpemUgYml0bWFwUmVzb2x1dGlvbihJV0lDQml0
bWFwU291cmNlKik7Ci1GbG9hdFNpemUgYml0bWFwUmVzb2x1dGlvbihJRDJEMUJpdG1hcCopOwot
RmxvYXRTaXplIGJpdG1hcFJlc29sdXRpb24oSUQyRDFSZW5kZXJUYXJnZXQqKTsKLXVuc2lnbmVk
IGJpdHNQZXJQaXhlbChHVUlEKTsKLUNPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlQml0bWFwKElE
MkQxUmVuZGVyVGFyZ2V0KiwgY29uc3QgSW50U2l6ZSYpOwotQ09NUHRyPElXSUNCaXRtYXA+IGNy
ZWF0ZVdpY0JpdG1hcChjb25zdCBJbnRTaXplJik7Ci1DT01QdHI8SVdJQ0JpdG1hcD4gY3JlYXRl
RGlyZWN0MkRJbWFnZVN1cmZhY2VXaXRoRGF0YSh2b2lkKiBkYXRhLCBjb25zdCBJbnRTaXplJiwg
dW5zaWduZWQgc3RyaWRlKTsKLUNPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gY3JlYXRlUmVuZGVy
VGFyZ2V0RnJvbVdJQ0JpdG1hcChJV0lDQml0bWFwKik7Ci1DT01QdHI8SUQyRDFCaXRtYXBSZW5k
ZXJUYXJnZXQ+IGNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShjb25zdCBJbnRTaXplJiwg
SUQyRDFSZW5kZXJUYXJnZXQqID0gbnVsbHB0ciwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSAx
LjApOwotQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBjcmVhdGVCaXRtYXBSZW5kZXJU
YXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQqID0gbnVsbHB0cik7Ci1DT01QdHI8SUQyRDFEQ1JlbmRl
clRhcmdldD4gY3JlYXRlR0RJUmVuZGVyVGFyZ2V0KCk7Ci1DT01QdHI8SURYR0lTdXJmYWNlMT4g
Y3JlYXRlRFhHSVN1cmZhY2VPZlNpemUoY29uc3QgSW50U2l6ZSYsIElEM0QxMURldmljZTEqLCBi
b29sIGNyb3NzUHJvY2Vzcyk7Ci1DT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IGNyZWF0ZVN1cmZh
Y2VSZW5kZXJUYXJnZXQoSURYR0lTdXJmYWNlMSopOwotQ09NUHRyPElEMkQxQml0bWFwPiBjcmVh
dGVCaXRtYXBDb3B5RnJvbUNvbnRleHQoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqKTsKLQotdm9p
ZCBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKElEMkQxQml0bWFwKiBmcm9tLCBJRDJE
MUJpdG1hcCogdG8sIGNvbnN0IEludFNpemUmIHNvdXJjZU9mZnNldCwgY29uc3QgSW50UmVjdCYs
IGNvbnN0IEludFNpemUmIGRlc3RPZmZzZXQgPSBJbnRTaXplKCkpOwotCi1XRUJDT1JFX0VYUE9S
VCBJRDNEMTFEZXZpY2VDb250ZXh0MSogZHhnaUltbWVkaWF0ZUNvbnRleHQoKTsKLVdFQkNPUkVf
RVhQT1JUIElEM0QxMURldmljZTEqIGRlZmF1bHREaXJlY3RYRGV2aWNlKCk7Ci1XRUJDT1JFX0VY
UE9SVCBib29sIGNyZWF0ZURldmljZUFuZENvbnRleHQoQ09NUHRyPElEM0QxMURldmljZTE+Jiwg
Q09NUHRyPElEM0QxMURldmljZUNvbnRleHQxPiYpOwotV0VCQ09SRV9FWFBPUlQgQ09NUHRyPElE
WEdJRGV2aWNlMT4gdG9EWEdJRGV2aWNlKGNvbnN0IENPTVB0cjxJRDNEMTFEZXZpY2UxPiYpOwot
V0VCQ09SRV9FWFBPUlQgQ09NUHRyPElEWEdJRmFjdG9yeTI+IGZhY3RvcnlGb3JEWEdJRGV2aWNl
KGNvbnN0IENPTVB0cjxJRFhHSURldmljZTE+Jik7Ci1XRUJDT1JFX0VYUE9SVCBDT01QdHI8SURY
R0lTd2FwQ2hhaW4+IHN3YXBDaGFpbk9mU2l6ZUZvcldpbmRvd0FuZERldmljZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiwgSFdORCwgY29uc3QgQ09NUHRyPElEM0QxMURldmljZTE+Jik7Ci0KLXZv
aWQgd3JpdGVEaWFnbm9zdGljUE5HVG9QYXRoKElEMkQxUmVuZGVyVGFyZ2V0KiwgSUQyRDFCaXRt
YXAqLCBMUENXU1RSIGZpbGVOYW1lKTsKLQotfSAvLyBuYW1lc3BhY2UgRGlyZWN0MkQKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGly
ZWN0V3JpdGVVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuY3BwCShub25leGlz
dGVudCkKQEAgLTEsMjQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRpcmVjdFdyaXRl
VXRpbGl0aWVzLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJDT01QdHIuaCIK
LSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgotCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIERpcmVjdFdyaXRlIHsKLQotSURXcml0ZUZh
Y3Rvcnk1KiBmYWN0b3J5KCkKLXsKLSAgICBzdGF0aWMgSURXcml0ZUZhY3Rvcnk1KiBkaXJlY3RX
cml0ZUZhY3RvcnkgPSBudWxscHRyOwotICAgIGlmICghZGlyZWN0V3JpdGVGYWN0b3J5KSB7Ci0g
ICAgICAgIEhSRVNVTFQgaHIgPSBEV3JpdGVDcmVhdGVGYWN0b3J5KERXUklURV9GQUNUT1JZX1RZ
UEVfU0hBUkVELCBfX3V1aWRvZihkaXJlY3RXcml0ZUZhY3RvcnkpLCByZWludGVycHJldF9jYXN0
PElVbmtub3duKio+KCZkaXJlY3RXcml0ZUZhY3RvcnkpKTsKLSAgICAgICAgZGlyZWN0V3JpdGVG
YWN0b3J5LT5BZGRSZWYoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGRpcmVjdFdyaXRlRmFjdG9yeTsKLX0KLQotSURXcml0ZUdk
aUludGVyb3AqIGdkaUludGVyb3AoKQotewotICAgIHN0YXRpYyBJRFdyaXRlR2RpSW50ZXJvcCog
ZGlyZWN0V3JpdGVHZGlJbnRlcm9wID0gbnVsbHB0cjsKLSAgICBpZiAoIWRpcmVjdFdyaXRlR2Rp
SW50ZXJvcCkgewotICAgICAgICBIUkVTVUxUIGhyID0gZmFjdG9yeSgpLT5HZXRHZGlJbnRlcm9w
KCZkaXJlY3RXcml0ZUdkaUludGVyb3ApOwotICAgICAgICBkaXJlY3RXcml0ZUdkaUludGVyb3At
PkFkZFJlZigpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZGlyZWN0V3JpdGVHZGlJbnRlcm9wOwotfQotCi1zdGF0aWMgSURXcml0
ZUluTWVtb3J5Rm9udEZpbGVMb2FkZXIqIG1lbW9yeUZvbnRMb2FkZXIoKQotewotICAgIHN0YXRp
YyBJRFdyaXRlSW5NZW1vcnlGb250RmlsZUxvYWRlciogbWVtb3J5Rm9udExvYWRlciA9IG51bGxw
dHI7Ci0gICAgaWYgKCFtZW1vcnlGb250TG9hZGVyKSB7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBm
YWN0b3J5KCktPkNyZWF0ZUluTWVtb3J5Rm9udEZpbGVMb2FkZXIoJm1lbW9yeUZvbnRMb2FkZXIp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgbWVtb3J5
Rm9udExvYWRlci0+QWRkUmVmKCk7Ci0KLSAgICAgICAgaHIgPSBmYWN0b3J5KCktPlJlZ2lzdGVy
Rm9udEZpbGVMb2FkZXIobWVtb3J5Rm9udExvYWRlcik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotICAgIH0KLQotICAgIHJldHVybiBtZW1vcnlGb250TG9hZGVyOwot
fQotCi1zdGF0aWMgSURXcml0ZUZvbnRTZXRCdWlsZGVyMSogZm9udFNldEJ1aWxkZXIoKQotewot
ICAgIHN0YXRpYyBJRFdyaXRlRm9udFNldEJ1aWxkZXIxKiBmb250U2V0QnVpbGRlciA9IG51bGxw
dHI7Ci0gICAgaWYgKCFmb250U2V0QnVpbGRlcikgewotICAgICAgICBIUkVTVUxUIGhyID0gZmFj
dG9yeSgpLT5DcmVhdGVGb250U2V0QnVpbGRlcigmZm9udFNldEJ1aWxkZXIpOwotICAgICAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgZm9udFNldEJ1aWxkZXItPkFk
ZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBmb250U2V0QnVpbGRlcjsKLX0KLQotc3RhdGlj
IENPTVB0cjxJRFdyaXRlRm9udFNldD4gZm9udFNldDsKLXN0YXRpYyBDT01QdHI8SURXcml0ZUZv
bnRDb2xsZWN0aW9uMT4gZm9udENvbGxlY3Rpb247Ci1zdGF0aWMgVUlOVDMyIGZvbnRDb3VudCA9
IDA7Ci0KLUlEV3JpdGVGb250Q29sbGVjdGlvbjEqIHdlYlByb2Nlc3NGb250Q29sbGVjdGlvbigp
Ci17Ci0gICAgSFJFU1VMVCBociA9IFNfT0s7Ci0KLSAgICBpZiAoIWZvbnRTZXQpIHsKLSAgICAg
ICAgaHIgPSBmb250U2V0QnVpbGRlcigpLT5DcmVhdGVGb250U2V0KCZmb250U2V0KTsKLSAgICAg
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAgICAgZm9udENvbGxlY3Rpb24gPSBudWxscHRyOwotICAgICAgICBociA9IGZhY3RvcnkoKS0+
Q3JlYXRlRm9udENvbGxlY3Rpb25Gcm9tRm9udFNldChmb250U2V0LmdldCgpLCAmZm9udENvbGxl
Y3Rpb24pOwotICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgICAgICBBU1NFUlQoZm9udENvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHlD
b3VudCgpID09IGZvbnRDb3VudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZvbnRDb2xsZWN0aW9u
LmdldCgpOwotfQotCi1IUkVTVUxUIGFkZEZvbnRGcm9tRGF0YVRvUHJvY2Vzc0NvbGxlY3Rpb24o
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBmb250RGF0YSkKLXsKLSAgICBDT01QdHI8SURXcml0ZUZv
bnRGaWxlPiBmb250RmlsZTsKLSAgICBIUkVTVUxUIGhyID0gbWVtb3J5Rm9udExvYWRlcigpLT5D
cmVhdGVJbk1lbW9yeUZvbnRGaWxlUmVmZXJlbmNlKGZhY3RvcnkoKSwgZm9udERhdGEuZGF0YSgp
LCBmb250RGF0YS5zaXplKCksIG51bGxwdHIsICZmb250RmlsZSk7Ci0gICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICBociA9IGZvbnRTZXRCdWlsZGVyKCkt
PkFkZEZvbnRGaWxlKGZvbnRGaWxlLmdldCgpKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0g
ICAgICAgIHJldHVybiBocjsKLQotICAgIGZvbnRTZXQgPSBudWxscHRyOwotICAgICsrZm9udENv
dW50OwotCi0gICAgcmV0dXJuIGhyOwotfQotCi1WZWN0b3I8d2NoYXJfdD4gZmFtaWx5TmFtZUZv
ckxvY2FsZShJRFdyaXRlRm9udEZhbWlseSogZm9udEZhbWlseSwgY29uc3QgVmVjdG9yPHdjaGFy
X3Q+JiBsb2NhbGVOYW1lKQotewotICAgIENPTVB0cjxJRFdyaXRlTG9jYWxpemVkU3RyaW5ncz4g
ZmFtaWx5TmFtZXM7Ci0gICAgSFJFU1VMVCBociA9IGZvbnRGYW1pbHktPkdldEZhbWlseU5hbWVz
KCZmYW1pbHlOYW1lcyk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiB7IH07
Ci0KLSAgICBCT09MIGV4aXN0cyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxvY2FsZUluZGV4ID0g
MDsKLSAgICBpZiAoIWxvY2FsZU5hbWUuaXNFbXB0eSgpKQotICAgICAgICBociA9IGZhbWlseU5h
bWVzLT5GaW5kTG9jYWxlTmFtZShsb2NhbGVOYW1lLmRhdGEoKSwgJmxvY2FsZUluZGV4LCAmZXhp
c3RzKTsKLQotICAgIGlmIChTVUNDRUVERUQoaHIpICYmICFleGlzdHMpCi0gICAgICAgIGhyID0g
ZmFtaWx5TmFtZXMtPkZpbmRMb2NhbGVOYW1lKEwiZW4tdXMiLCAmbG9jYWxlSW5kZXgsICZleGlz
dHMpOwotCi0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICB1
bnNpZ25lZCBmYW1pbHlOYW1lTGVuZ3RoID0gMDsKLSAgICBociA9IGZhbWlseU5hbWVzLT5HZXRT
dHJpbmdMZW5ndGgobG9jYWxlSW5kZXgsICZmYW1pbHlOYW1lTGVuZ3RoKTsKLSAgICBpZiAoIVNV
Q0NFRURFRChocikpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBWZWN0b3I8d2NoYXJfdD4g
ZmFtaWx5TmFtZShmYW1pbHlOYW1lTGVuZ3RoICsgMSk7Ci0gICAgaHIgPSBmYW1pbHlOYW1lcy0+
R2V0U3RyaW5nKGxvY2FsZUluZGV4LCBmYW1pbHlOYW1lLmRhdGEoKSwgZmFtaWx5TmFtZS5zaXpl
KCkpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAg
IHJldHVybiBmYW1pbHlOYW1lOwotfQotCi1DT01QdHI8SURXcml0ZUZvbnRGYW1pbHk+IGZvbnRG
YW1pbHlGb3JDb2xsZWN0aW9uKElEV3JpdGVGb250Q29sbGVjdGlvbiogZm9udENvbGxlY3Rpb24s
IGNvbnN0IFZlY3Rvcjx3Y2hhcl90PiYgbG9jYWxlTmFtZSwgY29uc3QgTE9HRk9OVCYgbG9nRm9u
dCkKLXsKLSAgICBDT01QdHI8SURXcml0ZUZvbnRGYW1pbHk+IGZvbnRGYW1pbHk7Ci0KLSAgICB1
bnNpZ25lZCBmb250RmFtaWx5Q291bnQgPSBmb250Q29sbGVjdGlvbi0+R2V0Rm9udEZhbWlseUNv
dW50KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBmb250SW5kZXggPSAwOyBmb250SW5kZXggPCBmb250
RmFtaWx5Q291bnQ7ICsrZm9udEluZGV4KSB7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBmb250Q29s
bGVjdGlvbi0+R2V0Rm9udEZhbWlseShmb250SW5kZXgsICZmb250RmFtaWx5KTsKLSAgICAgICAg
aWYgKEZBSUxFRChocikpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBh
dXRvIGZhbWlseU5hbWUgPSBmYW1pbHlOYW1lRm9yTG9jYWxlKGZvbnRGYW1pbHkuZ2V0KCksIGxv
Y2FsZU5hbWUpOwotCi0gICAgICAgIGlmICghd2NzY21wKGxvZ0ZvbnQubGZGYWNlTmFtZSwgZmFt
aWx5TmFtZS5kYXRhKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZvbnRGYW1pbHk7Ci0KLSAgICAg
ICAgZm9udEZhbWlseSA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLUNPTVB0cjxJRFdyaXRlRm9udD4gY3JlYXRlV2l0aFBsYXRmb3JtRm9udChjb25zdCBMT0dG
T05UJiBsb2dGb250KQotewotICAgIENPTVB0cjxJRFdyaXRlRm9udENvbGxlY3Rpb24+IHN5c3Rl
bUZvbnRDb2xsZWN0aW9uOwotICAgIEhSRVNVTFQgaHIgPSBmYWN0b3J5KCktPkdldFN5c3RlbUZv
bnRDb2xsZWN0aW9uKCZzeXN0ZW1Gb250Q29sbGVjdGlvbik7Ci0gICAgaWYgKEZBSUxFRChocikp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVmVjdG9yPHdjaGFyX3Q+IGxvY2FsZU5h
bWUoTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7Ci0gICAgaW50IGxvY2FsZUxlbmd0aCA9IEdldFVz
ZXJEZWZhdWx0TG9jYWxlTmFtZShsb2NhbGVOYW1lLmRhdGEoKSwgTE9DQUxFX05BTUVfTUFYX0xF
TkdUSCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobG9jYWxlTGVuZ3RoIDw9IExPQ0FMRV9OQU1FX01B
WF9MRU5HVEgpOwotCi0gICAgQ09NUHRyPElEV3JpdGVGb250Q29sbGVjdGlvbjE+IGNvbGxlY3Rp
b24oUXVlcnksIHN5c3RlbUZvbnRDb2xsZWN0aW9uKTsKLQotICAgIENPTVB0cjxJRFdyaXRlRm9u
dEZhbWlseT4gZm9udEZhbWlseSA9IGZvbnRGYW1pbHlGb3JDb2xsZWN0aW9uKGNvbGxlY3Rpb24u
Z2V0KCksIGxvY2FsZU5hbWUsIGxvZ0ZvbnQpOwotICAgIGlmICghZm9udEZhbWlseSkgewotICAg
ICAgICBjb2xsZWN0aW9uID0gd2ViUHJvY2Vzc0ZvbnRDb2xsZWN0aW9uKCk7Ci0gICAgICAgIGZv
bnRGYW1pbHkgPSBmb250RmFtaWx5Rm9yQ29sbGVjdGlvbihjb2xsZWN0aW9uLmdldCgpLCBsb2Nh
bGVOYW1lLCBsb2dGb250KTsKLSAgICB9Ci0KLSAgICBpZiAoIWZvbnRGYW1pbHkpIHsKLSAgICAg
ICAgLy8gSnVzdCByZXR1cm4gdGhlIGZpcnN0IHN5c3RlbSBmb250LgotICAgICAgICBjb2xsZWN0
aW9uID0gQ09NUHRyPElEV3JpdGVGb250Q29sbGVjdGlvbjE+KFF1ZXJ5LCBzeXN0ZW1Gb250Q29s
bGVjdGlvbik7Ci0gICAgICAgIGhyID0gY29sbGVjdGlvbi0+R2V0Rm9udEZhbWlseSgwLCAmZm9u
dEZhbWlseSk7Ci0gICAgICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIGF1dG8gZmFtaWx5TmFtZSA9IGZhbWls
eU5hbWVGb3JMb2NhbGUoZm9udEZhbWlseS5nZXQoKSwgbG9jYWxlTmFtZSk7Ci0gICAgICAgIFVO
VVNFRF9WQVJJQUJMRShmYW1pbHlOYW1lKTsKLSNlbmRpZgotICAgIH0KLQotICAgIERXUklURV9G
T05UX1dFSUdIVCB3ZWlnaHQgPSBzdGF0aWNfY2FzdDxEV1JJVEVfRk9OVF9XRUlHSFQ+KGxvZ0Zv
bnQubGZXZWlnaHQpOwotICAgIERXUklURV9GT05UX1NUUkVUQ0ggc3RyZXRjaCA9IHN0YXRpY19j
YXN0PERXUklURV9GT05UX1NUUkVUQ0g+KGxvZ0ZvbnQubGZRdWFsaXR5KTsKLSAgICBEV1JJVEVf
Rk9OVF9TVFlMRSBzdHlsZSA9IGxvZ0ZvbnQubGZJdGFsaWMgPyBEV1JJVEVfRk9OVF9TVFlMRV9J
VEFMSUMgOiBEV1JJVEVfRk9OVF9TVFlMRV9OT1JNQUw7Ci0KLSAgICBDT01QdHI8SURXcml0ZUZv
bnQ+IGR3Rm9udDsKLSAgICBociA9IGZvbnRGYW1pbHktPkdldEZpcnN0TWF0Y2hpbmdGb250KHdl
aWdodCwgc3RyZXRjaCwgc3R5bGUsICZkd0ZvbnQpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIp
KTsKLQotICAgIHJldHVybiBkd0ZvbnQ7Ci19Ci0KLURXUklURV9GT05UX1dFSUdIVCBmb250V2Vp
Z2h0KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKQotewotICAgIHJldHVybiBEV1JJVEVfRk9OVF9X
RUlHSFRfUkVHVUxBUjsKLX0KLQotRFdSSVRFX0ZPTlRfU1RZTEUgZm9udFN0eWxlKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmKQotewotICAgIHJldHVybiBEV1JJVEVfRk9OVF9TVFlMRV9OT1JNQUw7
Ci19Ci0KLURXUklURV9GT05UX1NUUkVUQ0ggZm9udFN0cmV0Y2goY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYpCi17Ci0gICAgcmV0dXJuIERXUklURV9GT05UX1NUUkVUQ0hfTk9STUFMOwotfQotCi19
IC8vIG5hbWVzcGFjZSBEaXJlY3RXcml0ZQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuaAkocmV2aXNp
b24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVj
dFdyaXRlVXRpbGl0aWVzLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0KLWludGVyZmFjZSBJRFdy
aXRlRmFjdG9yeTU7Ci1pbnRlcmZhY2UgSURXcml0ZUZvbnQ7Ci1pbnRlcmZhY2UgSURXcml0ZUZv
bnRDb2xsZWN0aW9uOwotaW50ZXJmYWNlIElEV3JpdGVGb250Q29sbGVjdGlvbjE7Ci1pbnRlcmZh
Y2UgSURXcml0ZUZvbnRGYW1pbHk7Ci1pbnRlcmZhY2UgSURXcml0ZUdkaUludGVyb3A7Ci0KLWVu
dW0gRFdSSVRFX0ZPTlRfV0VJR0hUOwotZW51bSBEV1JJVEVfRk9OVF9TVFlMRTsKLWVudW0gRFdS
SVRFX0ZPTlRfU1RSRVRDSDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGb250UGxh
dGZvcm1EYXRhOwotY2xhc3MgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjsKLQotbmFtZXNwYWNlIERp
cmVjdFdyaXRlIHsKLQotSURXcml0ZUZhY3Rvcnk1KiBmYWN0b3J5KCk7Ci1JRFdyaXRlR2RpSW50
ZXJvcCogZ2RpSW50ZXJvcCgpOwotCi1JRFdyaXRlRm9udENvbGxlY3Rpb24xKiB3ZWJQcm9jZXNz
Rm9udENvbGxlY3Rpb24oKTsKLQotSFJFU1VMVCBhZGRGb250RnJvbURhdGFUb1Byb2Nlc3NDb2xs
ZWN0aW9uKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZm9udERhdGEpOwotQ09NUHRyPElEV3JpdGVG
b250RmFtaWx5PiBmb250RmFtaWx5Rm9yQ29sbGVjdGlvbihJRFdyaXRlRm9udENvbGxlY3Rpb24q
LCBjb25zdCBWZWN0b3I8d2NoYXJfdD4mIGxvY2FsZU5hbWUsIGNvbnN0IExPR0ZPTlQmKTsKLUNP
TVB0cjxJRFdyaXRlRm9udD4gY3JlYXRlV2l0aFBsYXRmb3JtRm9udChjb25zdCBMT0dGT05UJik7
Ci1WZWN0b3I8d2NoYXJfdD4gZmFtaWx5TmFtZUZvckxvY2FsZShJRFdyaXRlRm9udEZhbWlseSos
IGNvbnN0IFZlY3Rvcjx3Y2hhcl90PiYgbG9jYWxlTmFtZSk7Ci0KLURXUklURV9GT05UX1dFSUdI
VCBmb250V2VpZ2h0KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLURXUklURV9GT05UX1NUWUxF
IGZvbnRTdHlsZShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci1EV1JJVEVfRk9OVF9TVFJFVENI
IGZvbnRTdHJldGNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLQotfSAvLyBuYW1lc3BhY2Ug
RGlyZWN0V3JpdGUKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJ
UkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0
UG9pbnREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0Zsb2F0UG9pbnREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFBvaW50RGlyZWN0MkQu
Y3BwCShub25leGlzdGVudCkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgotCi0jaWYgUExBVEZPUk0oV0lOKQotCi0jaW5jbHVkZSA8ZDJk
MS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0UG9pbnQ6OkZsb2F0UG9pbnQoY29u
c3QgRDJEX1BPSU5UXzJGJiBwKQotICAgIDogbV94KHAueCkKLSAgICAsIG1feShwLnkpCi17Ci19
Ci0KLUZsb2F0UG9pbnQ6Om9wZXJhdG9yIEQyRF9QT0lOVF8yRigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIEQyRDE6OlBvaW50MkYobV94LCBtX3kpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBQTEFURk9S
TShXSU4pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRS
ZWN0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9GbG9hdFJlY3REaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFJlY3REaXJlY3QyRC5jcHAJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKLQotI2lmIFBMQVRGT1JNKFdJTikKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
LSNpbmNsdWRlIDxkMmQxLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGJvb2wg
aXNJbmZpbml0ZVJlY3QoY29uc3QgRDJEMV9SRUNUX0YmIHJlY3QpCi17Ci0gICAgaWYgKCFzdGQ6
OmlzaW5mKHJlY3QudG9wKSAmJiByZWN0LnRvcCAhPSAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9h
dD46Om1heCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXN0ZDo6aXNpbmYo
cmVjdC5sZWZ0KSAmJiByZWN0LmxlZnQgIT0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpt
YXgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFzdGQ6OmlzaW5mKHJlY3Qu
Ym90dG9tKSAmJiByZWN0LmJvdHRvbSAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc3RkOjppc2luZihyZWN0LnJp
Z2h0KSAmJiByZWN0LnJpZ2h0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUZsb2F0UmVj
dDo6RmxvYXRSZWN0KGNvbnN0IFJFQ1QmIHJlY3QpCi0gICAgOiBtX2xvY2F0aW9uKHJlY3QubGVm
dCwgcmVjdC50b3ApCi0gICAgLCBtX3NpemUocmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5i
b3R0b20gLSByZWN0LnRvcCkKLXsKLX0KLQotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgRDJE
MV9SRUNUX0YmIHIpCi17Ci0gICAgLy8gSW5maW5pdGUgUmVjdCBjYXNlOgotICAgIGlmIChpc0lu
ZmluaXRlUmVjdChyKSkgewotICAgICAgICAqdGhpcyA9IGluZmluaXRlUmVjdCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9sb2NhdGlvbiA9IEZsb2F0UG9pbnQoci5sZWZ0LCBy
LnRvcCk7Ci0gICAgbV9zaXplID0gRmxvYXRTaXplKHIucmlnaHQgLSByLmxlZnQsIHIuYm90dG9t
IC0gci50b3ApOwotfQotCi1GbG9hdFJlY3Q6Om9wZXJhdG9yIEQyRDFfUkVDVF9GKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gRDJEMTo6UmVjdEYoeCgpLCB5KCksIG1heFgoKSwgbWF4WSgpKTsKLX0K
LQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oV0lOKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0U2l6ZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRTaXplRGlyZWN0MkQuY3Bw
CShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRmxvYXRTaXplRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsNDggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0KLSNpZiBQTEFURk9STShX
SU4pCi0KLSNpbmNsdWRlIDxkMmQxLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRmxvYXRT
aXplOjpGbG9hdFNpemUoY29uc3QgRDJEMV9TSVpFX0YmIHMpCi0gICAgOiBtX3dpZHRoKHMud2lk
dGgpCi0gICAgLCBtX2hlaWdodChzLmhlaWdodCkKLXsKLX0KLQotRmxvYXRTaXplOjpvcGVyYXRv
ciBEMkQxX1NJWkVfRigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEQyRDE6OlNpemVGKG1fd2lkdGgs
IG1faGVpZ2h0KTsKLX0KLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oV0lOKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q2FzY2FkZURpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCShub25leGlzdGVu
dCkKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0j
aW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVk
ZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0
MkQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQuaCIKLSNpbmNsdWRlICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgiCi0jaW5jbHVkZSA8ZDJk
MS5oPgotI2luY2x1ZGUgPGR3cml0ZV8zLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdy
YXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCi0gICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3Ro
aW5nTW9kZSkKLXsKLSAgICBhdXRvIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1D
b250ZXh0KCktPnJlbmRlclRhcmdldCgpOwotICAgIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGlu
ZyA9IFdlYkNvcmVTaG91bGRVc2VGb250U21vb3RoaW5nKCk7Ci0KLSAgICBzd2l0Y2ggKHNtb290
aGluZ01vZGUpIHsKLSAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpBbnRpYWxpYXNlZDoKLSAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh0cnVlKTsKLSAgICAgICAg
c2hvdWxkVXNlRm9udFNtb290aGluZyA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZvbnRTbW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkOgotICAgICAgICBncmFwaGlj
c0NvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKHRydWUpOwotICAgICAgICBzaG91bGRVc2VGb250
U21vb3RoaW5nID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250U21vb3RoaW5n
TW9kZTo6Tm9TbW9vdGhpbmc6Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaG91bGRBbnRp
YWxpYXMoZmFsc2UpOwotICAgICAgICBzaG91bGRVc2VGb250U21vb3RoaW5nID0gZmFsc2U7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc6
Ci0gICAgICAgIC8vIEZvciB0aGUgQXV0b1Ntb290aCBjYXNlLCBkb24ndCBkbyBhbnl0aGluZyEg
S2VlcCB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKLQotICAgIGdy
YXBoaWNzQ29udGV4dC5zYXZlKCk7Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiBtYXRyaXg7Ci0g
ICAgY29udGV4dC0+R2V0VHJhbnNmb3JtKCZtYXRyaXgpOwotCi0gICAgaWYgKHBsYXRmb3JtRGF0
YS5zeW50aGV0aWNPYmxpcXVlKCkpIHsKLSAgICAgICAgc3RhdGljIGZsb2F0IHNrZXcgPSAtdGFu
ZihzeW50aGV0aWNPYmxpcXVlQW5nbGUoKSAqIHBpRmxvYXQgLyAxODAuMGYpOwotICAgICAgICBh
dXRvIHNrZXdNYXRyaXggPSBEMkQxOjpNYXRyaXgzeDJGOjpTa2V3KHNrZXcsIDApOwotICAgICAg
ICBjb250ZXh0LT5TZXRUcmFuc2Zvcm0obWF0cml4ICogc2tld01hdHJpeCk7Ci0gICAgfQotCi0g
ICAgUkVMRUFTRV9BU1NFUlQocGxhdGZvcm1EYXRhLmR3Rm9udCgpKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChwbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpKTsKLQotICAgIFZlY3RvcjxGTE9BVD4gaG9y
aXpvbnRhbEFkdmFuY2VzKG51bUdseXBocyk7Ci0gICAgVmVjdG9yPERXUklURV9HTFlQSF9PRkZT
RVQ+IG9mZnNldEFkdmFuY2VzKG51bUdseXBocyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAgICAgIGlmIChpICsgZnJvbSA+PSBnbHlwaEJ1ZmZl
ci5hZHZhbmNlc0NvdW50KCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBhdXRvIGFk
dmFuY2UgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhpICsgZnJvbSk7Ci0gICAgICAgIGlmICghYWR2
YW5jZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGhvcml6b250YWxBZHZhbmNl
c1tpXSA9IGFkdmFuY2UtPndpZHRoKCk7Ci0gICAgICAgIG9mZnNldEFkdmFuY2VzW2ldLmFkdmFu
Y2VPZmZzZXQgPSBhZHZhbmNlLT53aWR0aCgpOwotICAgICAgICBvZmZzZXRBZHZhbmNlc1tpXS5h
c2NlbmRlck9mZnNldCA9IGFkdmFuY2UtPmhlaWdodCgpOwotICAgIH0KLQotICAgIERXUklURV9H
TFlQSF9SVU4gZ2x5cGhSdW47Ci0gICAgZ2x5cGhSdW4uZm9udEZhY2UgPSBwbGF0Zm9ybURhdGEu
ZHdGb250RmFjZSgpOwotICAgIGdseXBoUnVuLmZvbnRFbVNpemUgPSBwbGF0Zm9ybURhdGEuc2l6
ZSgpOwotICAgIGdseXBoUnVuLmdseXBoQ291bnQgPSBudW1HbHlwaHM7Ci0gICAgZ2x5cGhSdW4u
Z2x5cGhJbmRpY2VzID0gZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pOwotICAgIGdseXBoUnVuLmds
eXBoQWR2YW5jZXMgPSBob3Jpem9udGFsQWR2YW5jZXMuZGF0YSgpOwotICAgIGdseXBoUnVuLmds
eXBoT2Zmc2V0cyA9IG51bGxwdHI7Ci0gICAgZ2x5cGhSdW4uaXNTaWRld2F5cyA9IHBsYXRmb3Jt
RGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWw7Ci0gICAgZ2x5
cGhSdW4uYmlkaUxldmVsID0gMDsKLQotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAg
ZmxvYXQgc2hhZG93Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBncmFwaGljc0Nv
bnRleHQuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOwot
Ci0gICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBncmFwaGljc0NvbnRleHQudGV4dERyYXdpbmdN
b2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIHNoYWRvd0NvbG9yLmlzVmFsaWQoKSAm
JiAhc2hhZG93Qmx1ciAmJiAoIWdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cygpIHx8IGdyYXBoaWNzQ29udGV4dC5nZXRDVE0oKS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9y
RmxpcHBlZCgpKTsKLSAgICBpZiAoaGFzU2ltcGxlU2hhZG93KSB7Ci0gICAgICAgIC8vIFBhaW50
IHNpbXBsZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93
cywgdG8gYXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KLSAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LmNsZWFyU2hhZG93KCk7Ci0gICAgICAgIENvbG9yIGZpbGxDb2xvciA9IGdyYXBo
aWNzQ29udGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0g
c2hhZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNG
bG9hdCgpKTsKLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dP
ZmZzZXQud2lkdGgoKTsKLSAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNm
b3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwg
c28gZG93biBpcyBuZWdhdGl2ZS4KLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55
KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOwotCi0gICAgICAgIGF1dG8gc2hhZG93QnJ1c2ggPSBn
cmFwaGljc0NvbnRleHQuYnJ1c2hXaXRoQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKLSAgICAgICAg
Y29udGV4dC0+RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50MkYoc2hhZG93VGV4dFgsIHNoYWRvd1Rl
eHRZKSwgJmdseXBoUnVuLCBzaGFkb3dCcnVzaCk7Ci0gICAgICAgIGlmIChmb250LnN5bnRoZXRp
Y0JvbGRPZmZzZXQoKSkKLSAgICAgICAgICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQxOjpQ
b2ludDJGKHNoYWRvd1RleHRYICsgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHNoYWRvd1Rl
eHRZKSwgJmdseXBoUnVuLCBzaGFkb3dCcnVzaCk7Ci0gICAgfQotCi0gICAgY29udGV4dC0+RHJh
d0dseXBoUnVuKEQyRDE6OlBvaW50MkYocG9pbnQueCgpLCBwb2ludC55KCkpLCAmZ2x5cGhSdW4s
IGdyYXBoaWNzQ29udGV4dC5zb2xpZEZpbGxCcnVzaCgpKTsKLSAgICBpZiAoZm9udC5zeW50aGV0
aWNCb2xkT2Zmc2V0KCkpCi0gICAgICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQxOjpQb2lu
dDJGKHBvaW50LngoKSArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkpLCAm
Z2x5cGhSdW4sIGdyYXBoaWNzQ29udGV4dC5zb2xpZEZpbGxCcnVzaCgpKTsKLQotICAgIGlmICho
YXNTaW1wbGVTaGFkb3cpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coc2hhZG93
T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7Ci0KLSAgICBncmFwaGljc0NvbnRleHQu
cmVzdG9yZSgpOwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwxMSArMzUsNiBAQAogI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAj
ZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJEaXJlY3RXcml0ZVV0aWxpdGll
cy5oIgotI2luY2x1ZGUgPGR3cml0ZV8zLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhKGNvbnN0
IFN0cmluZyYgbmFtZSwgRm9udFBsYXRmb3JtRGF0YTo6Q3JlYXRpb25EYXRhJiYgY3JlYXRpb25E
YXRhKQpAQCAtNzMsNyArNjgsNyBAQCBGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9y
bURhdGE6CiAgICAgbG9nRm9udC5sZlVuZGVybGluZSA9IGZhbHNlOwogICAgIGxvZ0ZvbnQubGZT
dHJpa2VPdXQgPSBmYWxzZTsKICAgICBsb2dGb250LmxmQ2hhclNldCA9IERFRkFVTFRfQ0hBUlNF
VDsKLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShD
RykgfHwgVVNFKENBSVJPKQogICAgIGxvZ0ZvbnQubGZPdXRQcmVjaXNpb24gPSBPVVRfVFRfT05M
WV9QUkVDSVM7CiAjZWxzZQogICAgIGxvZ0ZvbnQubGZPdXRQcmVjaXNpb24gPSBPVVRfVFRfUFJF
Q0lTOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0
Zm9ybURhdGFEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4
NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZv
cm1EYXRhRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTIxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLQotI2lmIFVTRShESVJF
Q1QyRCkKLQotI2luY2x1ZGUgIkRpcmVjdFdyaXRlVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFduZERDLmgiCi0jaW5jbHVkZSAiU2hhcmVkR0RJ
T2JqZWN0LmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGR3cml0ZV8zLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgRm9udFBs
YXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdChIRk9OVCBmb250LCBmbG9hdCBzaXplLCBIREMg
aGRjLCBXQ0hBUiogZmFjZU5hbWUpCi17Ci0gICAgTE9HRk9OVCBsb2dmb250OwotICAgIEhSRVNV
TFQgaHIgPSA6OkdldE9iamVjdChmb250LCBzaXplb2YoTE9HRk9OVCksICZsb2dmb250KTsKLSAg
ICBpZiAoU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgbV9kd0ZvbnQgPSBEaXJlY3RXcml0ZTo6Y3Jl
YXRlV2l0aFBsYXRmb3JtRm9udChsb2dmb250KTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2R3Rm9u
dCk7Ci0KLSAgICBociA9IG1fZHdGb250LT5DcmVhdGVGb250RmFjZSgmbV9kd0ZvbnRGYWNlKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGlmICghbV91c2VHREkp
Ci0gICAgICAgIG1faXNTeXN0ZW1Gb250ID0gIXdjc2NtcChmYWNlTmFtZSwgTCJMdWNpZGEgR3Jh
bmRlIik7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0
PEhGT05UPiYmIGhmb250LCBDT01QdHI8SURXcml0ZUZvbnQ+JiYgZm9udCwgZmxvYXQgc2l6ZSwg
Ym9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQotICAgIDogbV9zeW50aGV0aWNC
b2xkKGJvbGQpCi0gICAgLCBtX3N5bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkKLSAgICAsIG1fc2l6
ZShzaXplKQotICAgICwgbV9mb250KFNoYXJlZEdESU9iamVjdDxIRk9OVD46OmNyZWF0ZShXVEZN
b3ZlKGhmb250KSkpCi0gICAgLCBtX2R3Rm9udChXVEZNb3ZlKGZvbnQpKQotICAgICwgbV91c2VH
REkodXNlR0RJKQotewotICAgIEhSRVNVTFQgaHIgPSBtX2R3Rm9udC0+Q3JlYXRlRm9udEZhY2Uo
Jm1fZHdGb250RmFjZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci19Ci0K
LXN0YXRpYyBib29sIGZvbnRzQXJlRXF1YWwoSURXcml0ZUZvbnQqIGEsIElEV3JpdGVGb250KiBi
KQotewotICAgIGlmICghYSAmJiAhYikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
YSA9PSBiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgoIWEgJiYgYikgfHwgKGEg
JiYgIWIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYS0+R2V0V2VpZ2h0KCkg
IT0gYi0+R2V0V2VpZ2h0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhLT5H
ZXRTdHlsZSgpICE9IGItPkdldFN0eWxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChhLT5HZXRTdHJldGNoKCkgIT0gYi0+R2V0U3RyZXRjaCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBEV1JJVEVfRk9OVF9NRVRSSUNTIGFNZXRyaWNzLCBiTWV0cmljczsKLSAg
ICBhLT5HZXRNZXRyaWNzKCZhTWV0cmljcyk7Ci0gICAgYi0+R2V0TWV0cmljcygmYk1ldHJpY3Mp
OwotCi0gICAgaWYgKChhTWV0cmljcy5kZXNpZ25Vbml0c1BlckVtICE9IGJNZXRyaWNzLmRlc2ln
blVuaXRzUGVyRW0pCi0gICAgICAgIHx8IChhTWV0cmljcy5hc2NlbnQgIT0gYk1ldHJpY3MuYXNj
ZW50KQotICAgICAgICB8fCAoYU1ldHJpY3MuZGVzY2VudCAhPSBiTWV0cmljcy5hc2NlbnQpCi0g
ICAgICAgIHx8IChhTWV0cmljcy5saW5lR2FwICE9IGJNZXRyaWNzLmxpbmVHYXApCi0gICAgICAg
IHx8IChhTWV0cmljcy5jYXBIZWlnaHQgIT0gYk1ldHJpY3MuY2FwSGVpZ2h0KQotICAgICAgICB8
fCAoYU1ldHJpY3MueEhlaWdodCAhPSBiTWV0cmljcy54SGVpZ2h0KQotICAgICAgICB8fCAoYU1l
dHJpY3MudW5kZXJsaW5lUG9zaXRpb24gIT0gYk1ldHJpY3MudW5kZXJsaW5lUG9zaXRpb24pCi0g
ICAgICAgIHx8IChhTWV0cmljcy51bmRlcmxpbmVUaGlja25lc3MgIT0gYk1ldHJpY3MudW5kZXJs
aW5lVGhpY2tuZXNzKQotICAgICAgICB8fCAoYU1ldHJpY3Muc3RyaWtldGhyb3VnaFBvc2l0aW9u
ICE9IGJNZXRyaWNzLnN0cmlrZXRocm91Z2hQb3NpdGlvbikKLSAgICAgICAgfHwgKGFNZXRyaWNz
LnN0cmlrZXRocm91Z2hUaGlja25lc3MgIT0gYk1ldHJpY3Muc3RyaWtldGhyb3VnaFRoaWNrbmVz
cykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi11bnNp
Z25lZCBGb250UGxhdGZvcm1EYXRhOjpoYXNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mb250
ID8gbV9mb250LT5oYXNoKCkgOiAwOwotfQotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRm
b3JtSXNFcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9mb250ID09IG90aGVyLm1fZm9udAotICAgICAgICAmJiBtX3VzZUdESSA9PSBvdGhl
ci5tX3VzZUdESQotICAgICAgICAmJiBmb250c0FyZUVxdWFsKG1fZHdGb250LmdldCgpLCBvdGhl
ci5tX2R3Rm9udC5nZXQoKSk7Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFn
ZVRyZWVOb2RlRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5jcHAJKG5v
bmV4aXN0ZW50KQpAQCAtMSwxMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBo
UGFnZS5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGls
aXRpZXMuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiVGV4dEFuYWx5emVySGVscGVy
LmgiCi0jaW5jbHVkZSA8ZHdyaXRlXzMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29s
IEdseXBoUGFnZTo6ZmlsbChVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpCi17
Ci0gICAgaWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgY29uc3QgRm9udCYgZm9udCA9IHRoaXMtPmZvbnQoKTsKLSAgICBib29s
IGhhdmVHbHlwaHMgPSBmYWxzZTsKLQotICAgIENPTVB0cjxJRFdyaXRlVGV4dEFuYWx5emVyPiBh
bmFseXplcjsKLSAgICBIUkVTVUxUIGhyID0gRGlyZWN0V3JpdGU6OmZhY3RvcnkoKS0+Q3JlYXRl
VGV4dEFuYWx5emVyKCZhbmFseXplcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0KLSAgICBhdXRvJiBmb250UGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsK
LQotICAgIFVDaGFyIGxvY2FsZU5hbWVbTE9DQUxFX05BTUVfTUFYX0xFTkdUSCArIDFdID0geyB9
OwotICAgIGludCBsb2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUocmVpbnRl
cnByZXRfY2FzdDxMUFdTVFI+KCZsb2NhbGVOYW1lKSwgTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQobG9jYWxlTGVuZ3RoIDw9IExPQ0FMRV9OQU1FX01BWF9MRU5H
VEgpOwotCi0gICAgVGV4dEFuYWx5emVySGVscGVyIGhlbHBlcihyZWludGVycHJldF9jYXN0PExQ
V1NUUj4oJmxvY2FsZU5hbWUpLCByZWludGVycHJldF9jYXN0PExQV1NUUj4oYnVmZmVyKSwgYnVm
ZmVyTGVuZ3RoKTsKLQotICAgIGhyID0gYW5hbHl6ZXItPkFuYWx5emVTY3JpcHQoJmhlbHBlciwg
MCwgYnVmZmVyTGVuZ3RoLCAmaGVscGVyKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQo
aHIpKTsKLQotICAgIFZlY3RvcjxHbHlwaD4gZ2x5cGhzKEdseXBoUGFnZTo6c2l6ZSwgMCk7Ci0g
ICAgVmVjdG9yPEdseXBoPiBjbHVzdGVyTWFwKEdseXBoUGFnZTo6c2l6ZSwgMCk7Ci0gICAgVmVj
dG9yPERXUklURV9TSEFQSU5HX1RFWFRfUFJPUEVSVElFUz4gdGV4dFByb3BlcnRpZXMoR2x5cGhQ
YWdlOjpzaXplKTsKLSAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfR0xZUEhfUFJPUEVSVElFUz4g
Z2x5cGhQcm9wZXJ0aWVzKEdseXBoUGFnZTo6c2l6ZSk7Ci0KLSAgICBjb25zdCBXQ0hBUiogdGV4
dFN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDxMUENXU1RSPihidWZmZXIpOwotICAgIEdseXBoKiBn
bHlwaERhdGEgPSBnbHlwaHMuZGF0YSgpOwotICAgIEdseXBoKiBjbHVzdGVyTWFwRGF0YSA9IGNs
dXN0ZXJNYXAuZGF0YSgpOwotICAgIERXUklURV9TSEFQSU5HX1RFWFRfUFJPUEVSVElFUyogdGV4
dFByb3BlcnRpZXNEYXRhID0gdGV4dFByb3BlcnRpZXMuZGF0YSgpOwotICAgIERXUklURV9TSEFQ
SU5HX0dMWVBIX1BST1BFUlRJRVMqIGdseXBoUHJvcGVydGllc0RhdGEgPSBnbHlwaFByb3BlcnRp
ZXMuZGF0YSgpOwotCi0gICAgdW5zaWduZWQgdG90YWwgPSAwOwotICAgIHVuc2lnbmVkIG1heEds
eXBoQ291bnQgPSBHbHlwaFBhZ2U6OnNpemU7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBydW4gOiBo
ZWxwZXIubV9hbmFseXplZFJ1bnMpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQodG90YWwgKyBy
dW4ubGVuZ3RoIDw9IGJ1ZmZlckxlbmd0aCk7Ci0KLSAgICAgICAgdW5zaWduZWQgcmV0dXJuZWRD
b3VudCA9IDA7Ci0gICAgICAgIGhyID0gYW5hbHl6ZXItPkdldEdseXBocyh0ZXh0U3RhcnQgKyBy
dW4uc3RhcnRQb3NpdGlvbiwgcnVuLmxlbmd0aCwgZm9udFBsYXRmb3JtRGF0YS5kd0ZvbnRGYWNl
KCksIGZvbnRQbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZl
cnRpY2FsLCBmYWxzZSwKLSAgICAgICAgICAgICZydW4uYW5hbHlzaXMsIG51bGxwdHIsIG51bGxw
dHIsIG51bGxwdHIsIG51bGxwdHIsIDAsIG1heEdseXBoQ291bnQsIGNsdXN0ZXJNYXBEYXRhLCB0
ZXh0UHJvcGVydGllc0RhdGEsCi0gICAgICAgICAgICBnbHlwaERhdGEsIGdseXBoUHJvcGVydGll
c0RhdGEsICZyZXR1cm5lZENvdW50KTsKLQotICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZ2x5cGhEYXRhICs9IHJldHVybmVk
Q291bnQ7Ci0gICAgICAgIGNsdXN0ZXJNYXBEYXRhICs9IHJldHVybmVkQ291bnQ7Ci0gICAgICAg
IHRleHRQcm9wZXJ0aWVzRGF0YSArPSByZXR1cm5lZENvdW50OwotICAgICAgICBnbHlwaFByb3Bl
cnRpZXNEYXRhICs9IHJldHVybmVkQ291bnQ7Ci0gICAgICAgIG1heEdseXBoQ291bnQgLT0gcmV0
dXJuZWRDb3VudDsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQ
YWdlOjpzaXplOyArK2kpIHsKLSAgICAgICAgR2x5cGggZ2x5cGggPSBnbHlwaHNbaV07Ci0gICAg
ICAgIGlmICghZ2x5cGgpCi0gICAgICAgICAgICBzZXRHbHlwaEZvckluZGV4KGksIDApOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNldEdseXBoRm9ySW5kZXgoaSwgZ2x5cGgpOwotICAg
ICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gaGF2ZUdseXBoczsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJ
KHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFkaWVudERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDIwNSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgotCi0jaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+Ci0KLSNkZWZpbmUgR1JBRElFTlRfRFJBV0lORyAzCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotdm9pZCBHcmFkaWVudDo6c3RvcHNDaGFuZ2VkKCkKLXsKLSAgICBtX2JydXNoID0g
bnVsbHB0cjsKLX0KLQotc3RhdGljIGJvb2wgY2lyY2xlSXNFbnRpcmVseUNvbnRhaW5lZChjb25z
dCBGbG9hdFBvaW50JiBjZW50ZXJBLCBmbG9hdCByYWRpdXNBLCBjb25zdCBGbG9hdFBvaW50JiBj
ZW50ZXJCLCBmbG9hdCByYWRpdXNCKQotewotICAgIGRvdWJsZSBkZWx0YVggPSBjZW50ZXJCLngo
KSAtIGNlbnRlckEueCgpOwotICAgIGRvdWJsZSBkZWx0YVkgPSBjZW50ZXJCLnkoKSAtIGNlbnRl
ckEueSgpOwotICAgIGRvdWJsZSBkZWx0YVJhZGl1cyA9IHJhZGl1c0IgLSByYWRpdXNBOwotCi0g
ICAgcmV0dXJuIGRlbHRhWCAqIGRlbHRhWCArIGRlbHRhWSAqIGRlbHRhWSA8IGRlbHRhUmFkaXVz
ICogZGVsdGFSYWRpdXMgJiYgcmFkaXVzQSA8IHJhZGl1c0I7Ci19Ci0KLUlEMkQxQnJ1c2gqIEdy
YWRpZW50OjpjcmVhdGVCcnVzaChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQotewot
ICAgIHNvcnRTdG9wcygpOwotCi0gICAgVmVjdG9yPEQyRDFfR1JBRElFTlRfU1RPUD4gZ3JhZGll
bnRTdG9wczsKLSAgICBncmFkaWVudFN0b3BzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9zdG9w
cy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKLSAgICAgICAgLy8g
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBub24tc1JHQkEgY29sb3Igc3BhY2VzLgotICAgICAgICBh
dXRvIFtyLCBnLCBiLCBhXSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+
PigpLnJlc29sdmVkKCk7Ci0gICAgICAgIGdyYWRpZW50U3RvcHMuZ3JhZGllbnRTdG9wcy51bmNo
ZWNrZWRBcHBlbmQoRDJEMTo6R3JhZGllbnRTdG9wKHN0b3Aub2Zmc2V0LCBEMkQxOjpDb2xvckYo
ciwgZywgYiwgYSkpKTsKLSAgICB9Ci0KLSAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKLSAgICAg
ICAgWyZdIChjb25zdCBMaW5lYXJEYXRhJikgewotICAgICAgICAgICAgLy8gTm8gYWN0aW9uIG5l
ZWRlZC4KLSAgICAgICAgfSwKLSAgICAgICAgWyZdIChSYWRpYWxEYXRhJiBkYXRhKSB7Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChkYXRhLnN0YXJ0UmFkaXVzID49IDApOwotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZGF0YS5lbmRSYWRpdXMgPj0gMCk7Ci0KLSAgICAgICAgICAgIGlm
IChkYXRhLnN0YXJ0UmFkaXVzID4gZGF0YS5lbmRSYWRpdXMpIHsKLSAgICAgICAgICAgICAgICBn
cmFkaWVudFN0b3BzLnJldmVyc2UoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHN0b3Ag
OiBncmFkaWVudFN0b3BzKQotICAgICAgICAgICAgICAgICAgICBzdG9wLnBvc2l0aW9uID0gMS4w
IC0gc3RvcC5wb3NpdGlvbjsKLQotICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChkYXRhLnN0YXJ0
UmFkaXVzLCBkYXRhLmVuZFJhZGl1cyk7Ci0gICAgICAgICAgICAgICAgc3RkOjpzd2FwKGRhdGEu
cG9pbnQwLCBkYXRhLnBvaW50MSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChk
YXRhLnN0YXJ0UmFkaXVzKSB7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YS5l
bmRSYWRpdXMgPiAwKTsKLSAgICAgICAgICAgICAgICBmbG9hdCBzdGFydFBvc2l0aW9uID0gZGF0
YS5zdGFydFJhZGl1cyAvIGRhdGEuZW5kUmFkaXVzOwotICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHN0YXJ0UG9zaXRpb24gPD0gMS4wKTsKLSAgICAgICAgICAgICAgICBmbG9hdCBhdmFp
bGFibGVSYW5nZSA9IDEuMCAtIHN0YXJ0UG9zaXRpb247Ci0gICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoYXZhaWxhYmxlUmFuZ2UgPD0gMS4wICYmIGF2YWlsYWJsZVJhbmdlID49IDApOwot
Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogZ3JhZGllbnRTdG9wcykgewotICAg
ICAgICAgICAgICAgICAgICBzdG9wLnBvc2l0aW9uICo9IGF2YWlsYWJsZVJhbmdlOwotICAgICAg
ICAgICAgICAgICAgICBzdG9wLnBvc2l0aW9uICs9IHN0YXJ0UG9zaXRpb247Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgJ3N0YXJ0JyBwb3NpdGlv
bgotICAgICAgICAgICAgICAgIGF1dG8gZmlyc3RTdG9wID0gZ3JhZGllbnRTdG9wcy5maXJzdCgp
OwotICAgICAgICAgICAgICAgIGlmICghV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGZpcnN0U3Rv
cC5wb3NpdGlvbiwgMC4wZikpIHsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RTdG9wLnBvc2l0
aW9uID0gMDsKLSAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnRTdG9wcy5pbnNlcnQoMCwgZmly
c3RTdG9wKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0g
ICAgICAgIFsmXSAoY29uc3QgQ29uaWNEYXRhJikgewotICAgICAgICAgICAgLy8gRklYTUU6IEFz
c2VzcyB3aGV0aGVyIG5lZWRlZCBmb3IgQ29uaWMgR3JhZGllbnRzLgotICAgICAgICB9Ci0gICAg
KTsKLQotICAgIENPTVB0cjxJRDJEMUdyYWRpZW50U3RvcENvbGxlY3Rpb24+IGdyYWRpZW50U3Rv
cENvbGxlY3Rpb247Ci0gICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlR3JhZGll
bnRTdG9wQ29sbGVjdGlvbihncmFkaWVudFN0b3BzLmRhdGEoKSwgZ3JhZGllbnRTdG9wcy5zaXpl
KCksICZncmFkaWVudFN0b3BDb2xsZWN0aW9uKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVE
RUQoaHIpKTsKLQotICAgIFdURjo6c3dpdGNoT24obV9kYXRhLAotICAgICAgICBbJl0gKGNvbnN0
IExpbmVhckRhdGEmIGRhdGEpIHsKLSAgICAgICAgICAgIElEMkQxTGluZWFyR3JhZGllbnRCcnVz
aCogbGluZWFyR3JhZGllbnQgPSBudWxscHRyOwotICAgICAgICAgICAgaHIgPSByZW5kZXJUYXJn
ZXQtPkNyZWF0ZUxpbmVhckdyYWRpZW50QnJ1c2goCi0gICAgICAgICAgICAgICAgRDJEMTo6TGlu
ZWFyR3JhZGllbnRCcnVzaFByb3BlcnRpZXMoZGF0YS5wb2ludDAsIGRhdGEucG9pbnQxKSwKLSAg
ICAgICAgICAgICAgICBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKSwgZ3JhZGllbnRTdG9wQ29sbGVj
dGlvbi5nZXQoKSwKLSAgICAgICAgICAgICAgICAmbGluZWFyR3JhZGllbnQpOwotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgICAgICBtX2JydXNoID0g
YWRvcHRDT00obGluZWFyR3JhZGllbnQpOwotICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0
IFJhZGlhbERhdGEmIGRhdGEpIHsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQ7Ci0gICAg
ICAgICAgICBpZiAoIWNpcmNsZUlzRW50aXJlbHlDb250YWluZWQoZGF0YS5wb2ludDAsIGRhdGEu
c3RhcnRSYWRpdXMsIGRhdGEucG9pbnQxLCBkYXRhLmVuZFJhZGl1cykpCi0gICAgICAgICAgICAg
ICAgb2Zmc2V0ID0gKGRhdGEucG9pbnQxLnNjYWxlZChkYXRhLnN0YXJ0UmFkaXVzKSAtIGRhdGEu
cG9pbnQwLnNjYWxlZChkYXRhLmVuZFJhZGl1cykpIC8gKGRhdGEuZW5kUmFkaXVzIC0gZGF0YS5z
dGFydFJhZGl1cyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgb2Zmc2V0ID0g
ZGF0YS5wb2ludDAgLSBkYXRhLnBvaW50MTsKLQotICAgICAgICAgICAgRmxvYXRQb2ludCBjZW50
ZXIgPSBkYXRhLnBvaW50MTsKLSAgICAgICAgICAgIGZsb2F0IHJhZGl1c1ggPSBkYXRhLmVuZFJh
ZGl1czsKLSAgICAgICAgICAgIGZsb2F0IHJhZGl1c1kgPSByYWRpdXNYIC8gZGF0YS5hc3BlY3RS
YXRpbzsKLQotICAgICAgICAgICAgSUQyRDFSYWRpYWxHcmFkaWVudEJydXNoKiByYWRpYWxHcmFk
aWVudCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlUmFk
aWFsR3JhZGllbnRCcnVzaCgKLSAgICAgICAgICAgICAgICBEMkQxOjpSYWRpYWxHcmFkaWVudEJy
dXNoUHJvcGVydGllcyhjZW50ZXIsIEQyRDE6OlBvaW50MkYob2Zmc2V0LndpZHRoKCksIG9mZnNl
dC5oZWlnaHQoKSksIHJhZGl1c1gsIHJhZGl1c1kpLAotICAgICAgICAgICAgICAgIEQyRDE6OkJy
dXNoUHJvcGVydGllcygpLCBncmFkaWVudFN0b3BDb2xsZWN0aW9uLmdldCgpLAotICAgICAgICAg
ICAgICAgICZyYWRpYWxHcmFkaWVudCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUND
RUVERUQoaHIpKTsKLSAgICAgICAgICAgIG1fYnJ1c2ggPSBhZG9wdENPTShyYWRpYWxHcmFkaWVu
dCk7Ci0gICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgQ29uaWNEYXRhJikgewotICAgICAg
ICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBjb25pYyBncmFkaWVudCByZW5kZXJpbmcuCi0gICAg
ICAgICAgICBtX2JydXNoID0gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICk7Ci0KLSAgICByZXR1
cm4gbV9icnVzaC5nZXQoKTsKLX0KLQotdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvIGQyZENvbnRl
eHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKTsKLQotICAgIFdU
Rjo6c3dpdGNoT24obV9kYXRhLAotICAgICAgICBbJl0gKGNvbnN0IExpbmVhckRhdGEmIGRhdGEp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBoYXZlIGEgYnJ1c2gsIHdoeSBjYW4gd2Ug
cmUtdXNlIGl0PyBXaGF0IGd1YXJhbnRlZXMgaXQncyByaWdodCBmb3IgdGhpcyBjb250ZXh0Pwot
ICAgICAgICAgICAgaWYgKCFtX2JydXNoKQotICAgICAgICAgICAgICAgIGNyZWF0ZUJydXNoKGQy
ZENvbnRleHQpOwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAgICAgICAgIGQyZENvbnRleHQt
PlNldFRhZ3MoR1JBRElFTlRfRFJBV0lORywgX19MSU5FX18pOwotI2VuZGlmCi0KLSAgICAgICAg
ICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwotICAgICAgICAgICAgZDJkQ29u
dGV4dC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgbV9icnVzaC5nZXQoKSk7Ci0gICAgICAgIH0s
Ci0gICAgICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYgZGF0YSkgewotICAgICAgICAgICAgYm9v
bCBuZWVkU2NhbGluZyA9IGRhdGEuYXNwZWN0UmF0aW8gIT0gMTsKLSAgICAgICAgICAgIGlmIChu
ZWVkU2NhbGluZykgewotICAgICAgICAgICAgICAgIGNvbnRleHQuc2F2ZSgpOwotICAgICAgICAg
ICAgICAgIC8vIFNjYWxlIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgZ3JhZGllbnQuIFdlIG9ubHkg
ZXZlciBzY2FsZSBub24tZGVwcmVjYXRlZCBncmFkaWVudHMsCi0gICAgICAgICAgICAgICAgLy8g
Zm9yIHdoaWNoIG1fcDAgPT0gbV9wMS4KLSAgICAgICAgICAgICAgICBBU1NFUlQoZGF0YS5wb2lu
dDAgPT0gZGF0YS5wb2ludDEpOwotCi0gICAgICAgICAgICAgICAgRDJEMV9NQVRSSVhfM1gyX0Yg
Y3RtID0geyB9OwotICAgICAgICAgICAgICAgIGQyZENvbnRleHQtPkdldFRyYW5zZm9ybSgmY3Rt
KTsKLQotICAgICAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0oY3RtKTsKLSAg
ICAgICAgICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKGRhdGEucG9pbnQwKTsKLSAgICAgICAg
ICAgICAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKDEuMCwgMS4wIC8gZGF0YS5hc3BlY3RS
YXRpbyk7Ci0gICAgICAgICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtZGF0YS5wb2ludDAp
OwotCi0gICAgICAgICAgICAgICAgZDJkQ29udGV4dC0+U2V0VHJhbnNmb3JtKGN0bSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBoYXZlIGEgYnJ1c2gsIHdo
eSBjYW4gd2UgcmUtdXNlIGl0PyBXaGF0IGd1YXJhbnRlZXMgaXQncyByaWdodCBmb3IgdGhpcyBj
b250ZXh0PwotICAgICAgICAgICAgaWYgKCFtX2JydXNoKQotICAgICAgICAgICAgICAgIGNyZWF0
ZUJydXNoKGQyZENvbnRleHQpOwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAgICAgICAgIGQy
ZENvbnRleHQtPlNldFRhZ3MoR1JBRElFTlRfRFJBV0lORywgX19MSU5FX18pOwotI2VuZGlmCi0K
LSAgICAgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwotICAgICAgICAg
ICAgZDJkQ29udGV4dC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgbV9icnVzaC5nZXQoKSk7Ci0K
LSAgICAgICAgICAgIGlmIChuZWVkU2NhbGluZykKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJl
c3RvcmUoKTsKLSAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBDb25pY0RhdGEmKSB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IGNvbmljIGdyYWRpZW50IHJlbmRlcmluZy4K
LSAgICAgICAgfQotICAgICk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVj
dDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0x
LDkxOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0KLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJEaXJlY3QyRE9wZXJhdGlvbnMuaCIK
LSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVj
b3JkZXIuaCIKLSNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCi0jaW5jbHVkZSAiTG9nZ2lu
Zy5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8ZDJkMWVmZmVjdHMu
aD4KLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4KLQotI3ByYWdt
YSB3YXJuaW5nIChkaXNhYmxlIDogNDc1NikKLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRChIREMgaGRjLCBi
b29sIGhhc0FscGhhKQotewotICAgIHBsYXRmb3JtSW5pdChoZGMsIGhhc0FscGhhKTsKLX0KLQot
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKEhEQyBoZGMs
IElEMkQxRENSZW5kZXJUYXJnZXQqKiByZW5kZXJUYXJnZXQsIFJFQ1QgcmVjdCwgYm9vbCBoYXNB
bHBoYSkKLXsKLSAgICAvLyBDcmVhdGUgYSBEQyByZW5kZXIgdGFyZ2V0LgotICAgIGF1dG8gdGFy
Z2V0UHJvcGVydGllcyA9IERpcmVjdDJEOjpyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0KLSAg
ICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN5c3RlbUZhY3RvcnkoKS0+
Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRhcmdldFByb3BlcnRpZXMsIHJlbmRlclRhcmdldCk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICAoKnJlbmRlclRhcmdldCkt
PkJpbmREQyhoZGMsICZyZWN0KTsKLQotICAgIGF1dG8gb3duZWRQbGF0Zm9ybUNvbnRleHQgPSBt
YWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPigqcmVuZGVyVGFyZ2V0KTsKLSAgICBt
X2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKFdURk1vdmUob3duZWRQ
bGF0Zm9ybUNvbnRleHQpLCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsK
LSAgICBtX2RhdGEtPm1faGRjID0gaGRjOwotfQotCi1HcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJlclR5cGUp
Ci17Ci0gICAgcGxhdGZvcm1Jbml0KHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LCByZW5kZXJlclR5
cGUpOwotfQotCi1JRDJEMUZhY3RvcnkqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzeXN0ZW1G
YWN0b3J5KCkKLXsKLSAgICBzdGF0aWMgSUQyRDFGYWN0b3J5KiBkaXJlY3QyREZhY3RvcnkgPSBu
dWxscHRyOwotICAgIGlmICghZGlyZWN0MkRGYWN0b3J5KSB7Ci0jaWZuZGVmIE5ERUJVRwotICAg
ICAgICBEMkQxX0ZBQ1RPUllfT1BUSU9OUyBvcHRpb25zID0geyB9OwotICAgICAgICBvcHRpb25z
LmRlYnVnTGV2ZWwgPSBEMkQxX0RFQlVHX0xFVkVMX0lORk9STUFUSU9OOwotICAgICAgICBIUkVT
VUxUIGhyID0gRDJEMUNyZWF0ZUZhY3RvcnkoRDJEMV9GQUNUT1JZX1RZUEVfTVVMVElfVEhSRUFE
RUQsIG9wdGlvbnMsICZkaXJlY3QyREZhY3RvcnkpOwotI2Vsc2UKLSAgICAgICAgSFJFU1VMVCBo
ciA9IEQyRDFDcmVhdGVGYWN0b3J5KEQyRDFfRkFDVE9SWV9UWVBFX01VTFRJX1RIUkVBREVELCAm
ZGlyZWN0MkRGYWN0b3J5KTsKLSNlbmRpZgotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVE
RUQoaHIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGlyZWN0MkRGYWN0b3J5OwotfQotCi1JRDJE
MVJlbmRlclRhcmdldCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRlZmF1bHRSZW5kZXJUYXJn
ZXQoKQotewotICAgIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdldCogZGVmYXVsdFJlbmRlclRhcmdl
dCA9IG51bGxwdHI7Ci0gICAgaWYgKCFkZWZhdWx0UmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIGF1
dG8gcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IEQyRDE6OlJlbmRlclRhcmdldFByb3BlcnRpZXMo
KTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy51c2FnZSA9IEQyRDFfUkVOREVSX1RB
UkdFVF9VU0FHRV9HRElfQ09NUEFUSUJMRTsKLSAgICAgICAgYXV0byBod25kUmVuZGVyVGFyZ2V0
UHJvcGVydGllcyA9IEQyRDE6Okh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKDo6R2V0RGVza3Rv
cFdpbmRvdygpLCBEMkQxOjpTaXplVSgxMCwgMTApKTsKLSAgICAgICAgSFJFU1VMVCBociA9IHN5
c3RlbUZhY3RvcnkoKS0+Q3JlYXRlSHduZFJlbmRlclRhcmdldCgmcmVuZGVyVGFyZ2V0UHJvcGVy
dGllcywgJmh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLCByZWludGVycHJldF9jYXN0PElEMkQx
SHduZFJlbmRlclRhcmdldCoqPigmZGVmYXVsdFJlbmRlclRhcmdldCkpOwotICAgICAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgZGVmYXVsdFJlbmRlclRhcmdldC0+
QWRkUmVmKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlZmF1bHRSZW5kZXJUYXJnZXQ7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtSW5pdChIREMgaGRjLCBib29s
IGhhc0FscGhhKQotewotICAgIGlmICghaGRjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIQklU
TUFQIGJpdG1hcCA9IHN0YXRpY19jYXN0PEhCSVRNQVA+KEdldEN1cnJlbnRPYmplY3QoaGRjLCBP
QkpfQklUTUFQKSk7Ci0KLSAgICBESUJQaXhlbERhdGEgcGl4ZWxEYXRhKGJpdG1hcCk7Ci0KLSAg
ICBhdXRvIHRhcmdldFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6cmVuZGVyVGFyZ2V0UHJvcGVydGll
cygpOwotCi0gICAgQ09NUHRyPElEMkQxRENSZW5kZXJUYXJnZXQ+IHJlbmRlclRhcmdldDsKLSAg
ICBIUkVTVUxUIGhyID0gc3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEQ1JlbmRlclRhcmdldCgmdGFy
Z2V0UHJvcGVydGllcywgJnJlbmRlclRhcmdldCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBSRUNUIGNsaWVudFJlY3QgPSBJbnRSZWN0KEludFBvaW50
KCksIHBpeGVsRGF0YS5zaXplKCkpOwotICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5CaW5kREMoaGRj
LCAmY2xpZW50UmVjdCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvIG93bmVkUGxhdGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRD4ocmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAgICBtX2RhdGEgPSBuZXcgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKFdURk1vdmUob3duZWRQbGF0Zm9ybUNvbnRleHQp
LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKLSAgICBtX2RhdGEtPm1f
aGRjID0gaGRjOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5j
IHdpdGggb3VyIHN0YXRlLgotICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxDb2xvcigpKTsK
LSAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwotICAgIHNldFBsYXRm
b3JtU3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcygpKTsKLSAgICAvLyBGSVhNRTogbV9z
dGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29udmVydEludGVycG9sYXRpb25RdWFs
aXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0KQotewotICAgIHBsYXRmb3JtSW5pdChw
bGF0Zm9ybUNvbnRleHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5
cGUgcmVuZGVyaW5nVHlwZSkKLXsKLSAgICBpZiAoIXBsYXRmb3JtQ29udGV4dCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZSgqcGxhdGZvcm1Db250ZXh0LCByZW5kZXJpbmdUeXBlKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0
aGUgY29udGV4dCBzdGFydHMgaW4gc3luYyB3aXRoIG91ciBzdGF0ZS4KLSAgICBzZXRQbGF0Zm9y
bUZpbGxDb2xvcihmaWxsQ29sb3IoKSk7Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihzdHJv
a2VDb2xvcigpKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25l
c3MoKSk7Ci0gICAgLy8gRklYTUU6IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9
IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVh
bGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwotfQotCi1HcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
fkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKCkKLXsKLSAgICBkZWxldGUgbV9kYXRhOwotfQotCi1Q
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICZtX2RhdGEtPnBsYXRmb3JtQ29udGV4dCgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c3luY0NvbnRleHQo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LUlEMkQxUmVuZGVyVGFyZ2V0KiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJlbmRl
clRhcmdldCgpCi17Ci0gICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dC5tX3RyYW5zcGFyZW5jeUxh
eWVyU3RhY2suaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9wbGF0Zm9ybUNvbnRleHQubV90
cmFuc3BhcmVuY3lMYXllclN0YWNrLmxhc3QoKS5yZW5kZXJUYXJnZXQuZ2V0KCk7Ci0KLSAgICBy
ZXR1cm4gbV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzZXRBbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBB
U1NFUlQobV9wbGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLmlzRW1wdHko
KSk7Ci0gICAgbV9hbHBoYSA9IGFscGhhOwotfQotCi1mbG9hdCBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6OmN1cnJlbnRHbG9iYWxBbHBoYSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3Bs
YXRmb3JtQ29udGV4dC5tX3RyYW5zcGFyZW5jeUxheWVyU3RhY2suaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gbV9wbGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lMYXllclN0YWNrLmxhc3Qo
KS5vcGFjaXR5OwotCi0gICAgcmV0dXJuIG1fYWxwaGE7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OnNhdmUoKQotewotICAgIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpOwotICAg
IERpcmVjdDJEOjpzYXZlKCpwbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnJlc3RvcmUoKQotewotICAgIGlmICghc3RhY2tTaXplKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpOwotICAgIERpcmVj
dDJEOjpyZXN0b3JlKCpwbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNv
bnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQotewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJh
d05hdGl2ZUltYWdlKCpwbGF0Zm9ybUNvbnRleHQoKSwgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFn
ZSgpLmdldCgpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zLCBzdGF0ZS5h
bHBoYSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRS
ZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKQotewotICAgIGJvb2wgY3JlYXRl
ZEJpdG1hcCA9ICFtX2RhdGEtPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpOwotICAg
IGlmICghY3JlYXRlZEJpdG1hcCkgewotICAgICAgICBEaXJlY3QyRDo6cmVzdG9yZSgqcGxhdGZv
cm1Db250ZXh0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFoZGMgfHwg
ZHN0UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gc291cmNlQml0
bWFwID0gYWRvcHRHRElPYmplY3Qoc3RhdGljX2Nhc3Q8SEJJVE1BUD4oOjpHZXRDdXJyZW50T2Jq
ZWN0KGhkYywgT0JKX0JJVE1BUCkpKTsKLQotICAgIERJQlBpeGVsRGF0YSBwaXhlbERhdGEoc291
cmNlQml0bWFwLmdldCgpKTsKLSAgICBBU1NFUlQocGl4ZWxEYXRhLmJpdHNQZXJQaXhlbCgpID09
IDMyKTsKLQotICAgIGF1dG8gYml0bWFwUHJvcGVydGllcyA9IERpcmVjdDJEOjpiaXRtYXBQcm9w
ZXJ0aWVzKCk7Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIGF1dG8m
IHBsYXRmb3JtQ29udGV4dCA9ICp0aGlzLT5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIENPTVB0
cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQu
cmVuZGVyVGFyZ2V0KCktPkNyZWF0ZUJpdG1hcChwaXhlbERhdGEuc2l6ZSgpLCBwaXhlbERhdGEu
YnVmZmVyKCksIHBpeGVsRGF0YS5ieXRlc1BlclJvdygpLCAmYml0bWFwUHJvcGVydGllcywgJmJp
dG1hcCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgUGxhdGZvcm1Db250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBsYXRmb3JtQ29udGV4dCk7Ci0KLSAgICAvLyBOb3RlOiBU
aGUgY29udGVudCBpbiB0aGUgSERDIGlzIGludmVydGVkIGNvbXBhcmVkIHRvIERpcmVjdDJELCBz
byBpdCBuZWVkcyB0byBiZSBmbGlwcGVkLgotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29u
dGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIEQyRDFfTUFUUklYXzNYMl9GIGN1cnJlbnRUcmFu
c2Zvcm07Ci0gICAgY29udGV4dC0+R2V0VHJhbnNmb3JtKCZjdXJyZW50VHJhbnNmb3JtKTsKLQot
ICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0oY3VycmVudFRyYW5zZm9ybSk7Ci0gICAgdHJh
bnNmb3JtLnRyYW5zbGF0ZShkc3RSZWN0LmxvY2F0aW9uKCkpOwotICAgIHRyYW5zZm9ybS5zY2Fs
ZSgxLjAsIC0xLjApOwotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoMCwgLWRzdFJlY3QuaGVpZ2h0
KCkpOwotCi0gICAgY29udGV4dC0+U2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0gICAgY29udGV4
dC0+RHJhd0JpdG1hcChiaXRtYXAuZ2V0KCksIEQyRDE6OlJlY3RGKDAsIDAsIGRzdFJlY3Qud2lk
dGgoKSwgZHN0UmVjdC5oZWlnaHQoKSkpOwotCi0gICAgOjpEZWxldGVEQyhoZGMpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBh
dGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlIHN0eWxlKQotewotICAgIERpcmVjdDJEOjpkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQotICAgIDogbV9wbGF0
Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0KQotICAgICwgbV9yZW5kZXJlclR5cGUocmVuZGVy
aW5nVHlwZSkKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0gR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpCi0gICAg
ICAgIGJlZ2luRHJhdygpOwotfQotCi1HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6Okdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ+JiYgb3duZWRQbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQotICAgIDogbV9v
d25lZFBsYXRmb3JtQ29udGV4dChXVEZNb3ZlKG93bmVkUGxhdGZvcm1Db250ZXh0KSkKLSAgICAs
IG1fcGxhdGZvcm1Db250ZXh0KCptX293bmVkUGxhdGZvcm1Db250ZXh0KQotICAgICwgbV9yZW5k
ZXJlclR5cGUocmVuZGVyaW5nVHlwZSkKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJl
bmRlclRhcmdldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9yZW5kZXJlclR5cGUg
PT0gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpH
UFVNZW1vcnkpCi0gICAgICAgIGJlZ2luRHJhdygpOwotfQotCi1HcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKQotewotICAgIGlm
ICghbV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX3BsYXRmb3JtQ29udGV4dC5iZWdpbkRyYXdDb3VudCkKLSAgICAgICAgZW5kRHJh
dygpOwotfQotCi1JRDJEMVNvbGlkQ29sb3JCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmJydXNoV2l0aENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICByZXR1cm4gcGxhdGZv
cm1Db250ZXh0KCktPmJydXNoV2l0aENvbG9yKGNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbG9yKSku
Z2V0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGlwKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGU6OmNsaXAoY29uc3QgUGF0aCYgcGF0aCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGU6OmNsaXAoSUQyRDFHZW9tZXRyeSogcGF0aCkKLXsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNvbmNhdENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGFmZmluZVRyYW5zZm9ybSkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6OmZsdXNoKCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OmJlZ2luRHJhdygpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuYmVn
aW5EcmF3KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmRE
cmF3KCkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5lbmREcmF3KCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyZXN0b3JlKCkKLXsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNhdmUoKQotewotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIEFTU0VSVChtX3BsYXRmb3JtQ29udGV4
dC5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkt
PlNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyb3RhdGUoZmxvYXQgYW5nbGUpCi17Ci19Ci0K
LUQyRDFfQ09MT1JfRiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y29sb3JXaXRoR2xvYmFsQWxw
aGEoY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAotewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
Y29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKLSAgICBy
ZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEgKiBtX2RhdGEtPmN1cnJlbnRHbG9iYWxBbHBo
YSgpKTsKLX0KLQotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNvbGlkU3Ry
b2tlQnJ1c2goKSBjb25zdAotewotICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xp
ZFN0cm9rZUJydXNoLmdldCgpOwotfQotCi1JRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6c29saWRGaWxsQnJ1c2goKSBjb25zdAotewotICAgIHJldHVybiBwbGF0Zm9ybUNvbnRl
eHQoKS0+bV9zb2xpZEZpbGxCcnVzaC5nZXQoKTsKLX0KLQotSUQyRDFCcnVzaCogR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5TdHJva2VCcnVzaC5nZXQoKTsKLX0KLQotSUQy
RDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5GaWxsQnJ1c2goKSBjb25z
dAotewotICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuRmlsbEJydXNoLmdl
dCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpiZWdpbkRyYXcoKQotewot
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5iZWdpbkRyYXcoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6ZW5kRHJhdygpCi17Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmVuZERy
YXcoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Zmx1c2goKQotewotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OmZsdXNoKCpwbGF0
Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdQ
YXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGlt
YWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZl
cnRpYmxlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvIHRpbGVJbWFnZSA9IGltYWdlOwot
ICAgIERpcmVjdDJEOjpkcmF3UGF0dGVybigqcGxhdGZvcm1Db250ZXh0KCksIFdURk1vdmUodGls
ZUltYWdlKSwgSW50U2l6ZShpbWFnZS5zaXplKCkpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMu
YmxlbmRNb2RlKCkpOwotfQotCi0vLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0
cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd1JlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi17Ci0gICAgQVNTRVJU
KCFyZWN0LmlzRW1wdHkoKSk7Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAg
IERpcmVjdDJEOjpkcmF3UmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGJvcmRlclRoaWNr
bmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29s
b3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0TGluZUNh
cChMaW5lQ2FwKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
c2V0TGluZUpvaW4oTGluZUpvaW4pCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpzZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSkKLXsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldE1pdGVyTGltaXQoZmxvYXQgY2FudmFzTWl0
ZXJMaW1pdCkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXREYXNoT2Zmc2V0KGNhbnZhc01p
dGVyTGltaXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0
RGFzaE9mZnNldChmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNl
dERhc2hPZmZzZXQoZGFzaE9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpzZXRQYXR0ZXJuV2lkdGgoZmxvYXQgcGF0dGVybldpZHRoKQotewotICAgIG1f
cGxhdGZvcm1Db250ZXh0LnNldFBhdHRlcm5XaWR0aChwYXR0ZXJuV2lkdGgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0UGF0dGVybk9mZnNldChmbG9hdCBw
YXR0ZXJuT2Zmc2V0KQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldFBhdHRlcm5PZmZzZXQo
cGF0dGVybk9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OjpzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQotewotICAgIG1fcGxhdGZvcm1D
b250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0RGFzaGVzKGNvbnN0IERhc2hBcnJheSYgZGFzaGVz
KQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldERhc2hlcyhkYXNoZXMpOwotfQotCi1EMkQx
X1NUUk9LRV9TVFlMRV9QUk9QRVJUSUVTIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
c3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRDJEMTo6U3Ryb2tl
U3R5bGVQcm9wZXJ0aWVzKG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNv
bnRleHQubV9saW5lQ2FwLCBtX3BsYXRmb3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1D
b250ZXh0Lm1fbGluZUpvaW4sIG1fcGxhdGZvcm1Db250ZXh0Lm1fbWl0ZXJMaW1pdCwgRDJEMV9E
QVNIX1NUWUxFX1NPTElELCAwLjBmKTsKLX0KLQotSUQyRDFTdHJva2VTdHlsZSogR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnN0cm9rZVN0eWxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwotICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+c3Ryb2tlU3R5
bGUoKTsKLX0KLQotLy8gVGhpcyBpcyBvbmx5IHVzZWQgdG8gZHJhdyBib3JkZXJzLgotdm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0g
Tm9TdHJva2UpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRl
KCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdMaW5lKCpwbGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQxLCBw
b2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tl
VGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAg
YXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpmaWxsRWxsaXBzZSgq
cGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5
bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjphcHBseVN0cm9rZVBhdHRlcm4oKQotewotICAgIGlm
ICghbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFz
ZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCi0KLSAg
ICBjb25zdCBmbG9hdCBwYXR0ZXJuQWxwaGEgPSAxOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5t
X3BhdHRlcm5TdHJva2VCcnVzaCA9IGFkb3B0Q09NKG1fc3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3Jl
YXRlUGxhdGZvcm1QYXR0ZXJuKCp0aGlzLCBwYXR0ZXJuQWxwaGEsIHVzZXJUb0Jhc2VDVE0pKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBwbHlGaWxsUGF0dGVybigpCi17
Ci0gICAgaWYgKCFtX3N0YXRlLmZpbGxQYXR0ZXJuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdXNl
clRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dz
Ci0KLSAgICBjb25zdCBmbG9hdCBwYXR0ZXJuQWxwaGEgPSAxOwotICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5tX3BhdHRlcm5GaWxsQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5j
cmVhdGVQbGF0Zm9ybVBhdHRlcm4oKnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3UGF0aChjb25zdCBQYXRo
JiBwYXRoKQotewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGF1dG8mIGNvbnRleHQgPSAqcGxh
dGZvcm1Db250ZXh0KCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdQYXRoKGNvbnRleHQsIHBhdGgsIERp
cmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRl
KHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXV0byYgY29udGV4
dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbFBhdGgoY29udGV4dCwg
cGF0aCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRv
d1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhdXRv
JiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwotICAgIERpcmVjdDJEOjpzdHJva2VQYXRo
KGNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGly
ZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQo
KTsKLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3QoY29udGV4dCwgcmVjdCwgRGlyZWN0MkQ6OkZpbGxT
b3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3Rh
dGUoKTsKLSAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwotICAgIERpcmVj
dDJEOjpmaWxsUmVjdChjb250ZXh0LCByZWN0LCBjb2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRl
KHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQotewotICAgIGF1dG8gYnJ1
c2ggPSBncmFkaWVudC5jcmVhdGVCcnVzaChtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQo
KSk7Ci0gICAgaWYgKCFicnVzaCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGlyZWN0MkQ6OmZp
bGxSZWN0V2l0aEdyYWRpZW50KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBicnVzaC5nZXQoKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdy
YXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNP
cGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotCi0gICAgRGlyZWN0MkQ6OlN0YXRl
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIGNvbXBvc2l0ZU9wZXJh
dG9yLCBibGVuZE1vZGUpOwotICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4
dCwgcmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotICAgIERpcmVj
dDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2
aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3Rh
dGUoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbFJvdW5kZWRSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwg
cmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQotewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAg
ICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwotICAgIERpcmVjdDJEOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb250ZXh0LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsIERpcmVj
dDJEOjpGaWxsU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcCgqcGxhdGZvcm1Db250ZXh0KCksIHJl
Y3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcE91dCgqcGxhdGZvcm1Db250ZXh0
KCksIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwT3V0KGNv
bnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXBPdXQoKnBsYXRmb3JtQ29udGV4
dCgpLCBwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17Ci0gICAgRGlyZWN0MkQ6OmNs
aXBQYXRoKCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCwgY2xpcFJ1bGUpOwotfQotCi1JbnRSZWN0
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwQm91bmRzKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gRGlyZWN0MkQ6OlN0YXRlOjpnZXRDbGlwQm91bmRzKCpwbGF0Zm9ybUNvbnRleHQoKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBHcmFwaGlj
c0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0gICAgc2F2ZSgpOwot
Ci0gICAgbV9zdGF0ZS5hbHBoYSA9IG9wYWNpdHk7Ci0KLSAgICBEaXJlY3QyRDo6YmVnaW5UcmFu
c3BhcmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0KCksIG9wYWNpdHkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcigp
Ci17Ci0gICAgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIERp
cmVjdDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAg
bV9zdGF0ZS5hbHBoYSA9IG1fZGF0YS0+Y3VycmVudEdsb2JhbEFscGhhKCk7Ci0KLSAgICByZXN0
b3JlKCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN1cHBvcnRzVHJhbnNw
YXJlbmN5TGF5ZXJzKCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi17
Ci0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0No
YW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9wbGF0
Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpCi0gICAgICAgIERpcmVjdDJE
OjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVN0
eWxlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFu
Z2UpIHsKLSAgICAgICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAg
ICAgICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0
ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKLSAgICAgICAgICAgIC8vIFdlIGZsaXAg
dGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlz
Ci0gICAgICAgICAgICBhdXRvJiBtdXRhYmxlU3RhdGUgPSBjb25zdF9jYXN0PEdyYXBoaWNzQ29u
dGV4dFN0YXRlJj4oZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSk7Ci0gICAgICAgICAgICBhdXRv
JiBzaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBtdXRhYmxl
U3RhdGUuc2hhZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNl
dC5oZWlnaHQoKSB9OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKLSAgICAgICAgRGlyZWN0
MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKGZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKLSAgICAgICAgRGly
ZWN0MkQ6OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRl
LnNob3VsZEFudGlhbGlhcyk7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkgewotICAgICAgICBBU1NFUlQobV9zdGF0ZS5z
dHJva2VDb2xvciA9PSBjb2xvcik7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3NvbGlk
U3Ryb2tlQnJ1c2ggPSBicnVzaFdpdGhDb2xvcihzdHJva2VDb2xvcigpKTsgICAgCi0gICAgfQot
ICAgIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENv
bG9yQ2hhbmdlKSkgewotICAgICAgICBBU1NFUlQobV9zdGF0ZS5maWxsQ29sb3IgPT0gY29sb3Ip
OwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZEZpbGxCcnVzaCA9IGJydXNoV2l0
aENvbG9yKGZpbGxDb2xvcigpKTsKLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkgewotICAgICAgICBh
dXRvIGZvbnRTbW9vdGhpbmdNb2RlID0gZW5hYmxlID8gRDJEMV9URVhUX0FOVElBTElBU19NT0RF
X0NMRUFSVFlQRSA6IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9BTElBU0VEOwotICAgICAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlNldFRleHRBbnRpYWxpYXNNb2RlKGZv
bnRTbW9vdGhpbmdNb2RlKTsKLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkgewotICAgICAgICBBU1NFUlQobV9zdGF0ZS5h
bHBoYSA9PSBhbHBoYSk7Ci0gICAgICAgIG1fZGF0YS0+c2V0QWxwaGEoYWxwaGEpOwotICAgIH0K
LQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpIHsKLSAgICAgICAgRDJEMV9JTlRFUlBPTEFUSU9OX01P
REUgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7Ci0K
LSAgICAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxp
dHk6OkRlZmF1bHQ6Ci0gICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01P
REVfTkVBUkVTVF9ORUlHSEJPUjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElu
dGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9sYXRlOgotICAgICAgICAgICAgcXVhbGl0
eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgotICAgICAg
ICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06Ci0g
ICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfQ1VCSUM7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoK
LSAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ISUdIX1FVQUxJ
VFlfQ1VCSUM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAvLyBGSVhN
RTogU2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCksIHF1YWxpdHkpOwot
ICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdChm
bG9hdCBsaW1pdCkKLXsKLSAgICBEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1Db250
ZXh0KCksIGxpbWl0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xlYXJSZWN0KCpw
bGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17
Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGF1dG8mIGNvbnRleHQgPSAq
cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgRGlyZWN0MkQ6OnN0cm9rZVJlY3QoY29udGV4dCwgcmVj
dCwgbGluZVdpZHRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVj
dDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lQ2Fw
KCpwbGF0Zm9ybUNvbnRleHQoKSwgY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZz
ZXQpCi17Ci0gICAgaWYgKGRhc2hPZmZzZXQgPCAwKSB7Ci0gICAgICAgIGZsb2F0IGxlbmd0aCA9
IDA7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgbGVuZ3RoICs9IHN0YXRpY19jYXN0PGZsb2F0PihkYXNoZXNbaV0pOwotICAg
ICAgICBpZiAobGVuZ3RoKQotICAgICAgICAgICAgZGFzaE9mZnNldCA9IGZtb2QoZGFzaE9mZnNl
dCwgbGVuZ3RoKSArIGxlbmd0aDsKLSAgICB9Ci0KLSAgICBEaXJlY3QyRDo6c2V0TGluZURhc2go
KnBsYXRmb3JtQ29udGV4dCgpLCBkYXNoZXMsIGRhc2hPZmZzZXQpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQotewotICAgIERp
cmVjdDJEOjpzZXRMaW5lSm9pbigqcGxhdGZvcm1Db250ZXh0KCksIGpvaW4pOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17
Ci0gICAgRGlyZWN0MkQ6OnNjYWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZSk7Ci0gICAgLy8g
RklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9
IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyb3RhdGUoZmxvYXQg
YW5nbGUpCi17Ci0gICAgRGlyZWN0MkQ6OnJvdGF0ZSgqcGxhdGZvcm1Db250ZXh0KCksIGFuZ2xl
KTsKLSAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9C
ZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnRy
YW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIERpcmVjdDJEOjp0cmFuc2xhdGUoKnBs
YXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKLSAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0Rl
dmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKLXsKLSAgICBEaXJlY3QyRDo6Y29uY2F0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJh
bnNmb3JtKTsKLSAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtu
b3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBEaXJl
Y3QyRDo6U3RhdGU6OnNldENUTSgqcGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7Ci0gICAg
Ly8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0
eSA9IGZhbHNlOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAotewotICAgIHJl
dHVybiBEaXJlY3QyRDo6U3RhdGU6OmdldENUTSgqcGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi1G
bG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQotewotICAgIHJl
dHVybiBEaXJlY3QyRDo6U3RhdGU6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKnBsYXRmb3JtQ29udGV4
dCgpLCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBT
dHJva2VTdHlsZSBzdHJva2VTdHlsZSkKLXsKLSAgICBpZiAoIXdpZHRocy5zaXplKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIERpcmVjdDJEOjpkcmF3TGluZXNGb3JUZXh0KCpwbGF0Zm9ybUNv
bnRleHQoKSwgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJs
aW5lcywgbV9zdGF0ZS5zdHJva2VDb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0xheWVyQ29udGV4dCkKLXsK
LSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmFseSBub3QgbmVlZGVkLgotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmlzQ0FMYXll
ckNvbnRleHQoKSBjb25zdAotewotICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFiYWx5IG5v
dCBuZWVkZWQuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJv
b2wgaXNBY2NlbGVyYXRlZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3Jt
Q29udGV4dCgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKLXsKLSAgICAvLyBUaGlzIGlz
IGEgbm8tb3AgZm9yIERpcmVjdDJELgotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgaWYgKG1fc3Rh
dGUuZmlsbEdyYWRpZW50IHx8IG1fc3RhdGUuZmlsbFBhdHRlcm4pIHsKLSAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGZpbGwgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRp
ZW50IGJydXNoZXMgaW4gRDJELgotICAgICAgICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIERpcmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxh
dGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3RhdGUuZmlsbENvbG9yLCBtX3N0YXRlLnN0cm9r
ZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQotewotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1f
c3RhdGUuc3Ryb2tlUGF0dGVybikgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFi
bGUgdG8gc3Ryb2tlIGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQy
RC4KLSAgICAgICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIERpcmVjdDJEOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCks
IGVsbGlwc2UsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3RhdGUuc3Ryb2tlQ29sb3IsIG1fc3Rh
dGUuc3Ryb2tlVGhpY2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZm
ZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGZvbnRTbW9vdGhpbmcpOwotICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKLSAgICBW
ZWN0b3I8dW5zaWduZWQgc2hvcnQ+IGdseXBocyhudW1HbHlwaHMpOwotICAgIFZlY3RvcjxmbG9h
dD4gaG9yaXpvbnRhbEFkdmFuY2VzKG51bUdseXBocyk7Ci0gICAgVmVjdG9yPERXUklURV9HTFlQ
SF9PRkZTRVQ+IGdseXBoT2Zmc2V0cyhudW1HbHlwaHMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAgICAgIGlmIChpICsgZnJvbSA+PSBnbHlw
aEJ1ZmZlci5hZHZhbmNlc0NvdW50KCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBh
dXRvIGFkdmFuY2UgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhpICsgZnJvbSk7Ci0gICAgICAgIGlm
ICghYWR2YW5jZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGdseXBoc1tpXSA9
IGdseXBoQnVmZmVyLmdseXBoQXQoaSArIGZyb20pOwotICAgICAgICBob3Jpem9udGFsQWR2YW5j
ZXNbaV0gPSBhZHZhbmNlLT53aWR0aCgpOwotICAgICAgICBnbHlwaE9mZnNldHNbaV0uYWR2YW5j
ZU9mZnNldCA9IGFkdmFuY2UtPndpZHRoKCk7Ci0gICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hc2Nl
bmRlck9mZnNldCA9IGFkdmFuY2UtPmhlaWdodCgpOwotICAgIH0KLQotICAgIGRvdWJsZSBzeW50
aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0KLSAgICBhdXRv
JiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdH
bHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCBncmFw
aGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29u
dGV4dCgpKSwKLSAgICAgICAgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIGZv
bnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGdseXBocywgaG9yaXpvbnRhbEFkdmFuY2VzLCBnbHlw
aE9mZnNldHMsIHhPZmZzZXQsCi0gICAgICAgIHN0YXRlLnRleHREcmF3aW5nTW9kZSwgc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yKTsK
LX0KLQotR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29u
dGV4dCYpPiYmKQotewotICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi0gICAgcmV0dXJu
IENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdDo6U3VjY2VzczsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0g
YnVmZmVyLmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgaWYgKCFpbWFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byogY29udGV4dCA9ICZncmFwaGljc0NvbnRleHQo
KTsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKGNvbnRleHQpKQotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0jaWYgRU5BQkxF
KFZJREVPKQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGFpbnRGcmFtZUZvck1lZGlh
KE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JikKLXsKLSAgICAvLyBGSVhNRTogTm90IGlt
cGxlbWVudGVkLgotfQotI2VuZGlmCi0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRH
TERpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCShub25leGlzdGVu
dCkKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuaCIKLQotI2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKERJUkVDVDJEKQotCi0jaW5j
bHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rv
ci5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2lu
Y2x1ZGUgPGQyZDFlZmZlY3RzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR3JhcGhpY3ND
b250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6fkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3Io
KSA9IGRlZmF1bHQ7Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0
cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9y
UHJvZmlsZSwgYm9vbCBpZ25vcmVOYXRpdmVJbWFnZUFscGhhUHJlbXVsdGlwbGljYXRpb24pCi17
Ci0gICAgaWYgKCFtX2ltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xHTDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgY29u
c3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKCFpbWFnZVBpeGVscyB8fCBpbWFnZVNpemUu
aXNFbXB0eSgpIHx8IGNhbnZhc1NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoV0VCR0wpICYmIFVTRShESVJFQ1QyRCkKClByb3BlcnR5IGNoYW5nZXMgb246
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERp
cmVjdDJELmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAj
IwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKRGVsZXRlZDogc3ZuOmtl
eXdvcmRzCiMjIC0xICswLDAgIyMKLURhdGUgQXV0aG9yIElkIFJldmlzaW9uIEhlYWRVUkwKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGVEaXJlY3QyRC5oCShub25leGlzdGVudCkKQEAgLTEsMTQwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8ZDJk
MV8xLmg+Ci0jaW5jbHVkZSA8ZDJkMWVmZmVjdHMuaD4KLSNpbmNsdWRlIDxkMmQxaGVscGVyLmg+
Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHd0Zi9UaW55TFJVQ2FjaGUuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIEdyYXBoaWNz
Q29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwotICAgIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZShzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+
JiYsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwotICAgIH5H
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKTsKLQotICAgIHZvaWQgc3luY0NvbnRleHQo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKTsKLQotICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCBvcGFjaXR5KTsKLSAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0K
LSAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBjbGlwKGNvbnN0IFBh
dGgmKTsKLSAgICB2b2lkIGNsaXAoSUQyRDFHZW9tZXRyeSopOwotCi0gICAgdm9pZCBiZWdpbkRy
YXcoKTsKLSAgICB2b2lkIGVuZERyYXcoKTsKLSAgICB2b2lkIGZsdXNoKCk7Ci0gICAgdm9pZCBz
YXZlKCk7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICB2b2lkIHJlc3Rv
cmUoKTsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCk7Ci0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQs
IGZsb2F0KTsKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAg
ICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLQotICAgIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwKTsKLSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKTsKLSAgICB2b2lk
IHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlKTsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxv
YXQpOwotICAgIHZvaWQgc2V0RGFzaE9mZnNldChmbG9hdCk7Ci0gICAgdm9pZCBzZXRQYXR0ZXJu
V2lkdGgoZmxvYXQpOwotICAgIHZvaWQgc2V0UGF0dGVybk9mZnNldChmbG9hdCk7Ci0gICAgdm9p
ZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQpOwotICAgIHZvaWQgc2V0RGFzaGVzKGNvbnN0IERh
c2hBcnJheSYpOwotICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQpOwotCi0gICAgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCgpIHsgcmV0dXJuIG1fcGxhdGZvcm1Db250ZXh0
OyB9Ci0gICAgSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCgpOwotCi0gICAgSERDIG1f
aGRjIHsgbnVsbHB0ciB9OwotCi0gICAgZmxvYXQgY3VycmVudEdsb2JhbEFscGhhKCkgY29uc3Q7
Ci0KLSAgICBEMkQxX1NUUk9LRV9TVFlMRV9QUk9QRVJUSUVTIHN0cm9rZVN0eWxlUHJvcGVydGll
cygpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRD4gbV9vd25lZFBsYXRmb3JtQ29udGV4dDsKLSAgICBQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYgbV9wbGF0Zm9ybUNvbnRleHQ7Ci0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0OjpC
aXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSBtX3JlbmRlcmVyVHlwZTsKLQotICAgIHVuc2lnbmVk
IGJlZ2luRHJhd0NvdW50IHsgMCB9OwotCi0gICAgZmxvYXQgbV9hbHBoYSB7IDEuMCB9OwotCi0g
ICAgZnJpZW5kIGNsYXNzIEQyRENvbnRleHRTdGF0ZVNhdmVyOwotfTsKLQotY2xhc3MgRDJEQ29u
dGV4dFN0YXRlU2F2ZXIgewotcHVibGljOgotICAgIEQyRENvbnRleHRTdGF0ZVNhdmVyKEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSYgY29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9
IHRydWUpCi0gICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgICAgICwgbV9zYXZlQW5k
UmVzdG9yZShzYXZlQW5kUmVzdG9yZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0
b3JlKQotICAgICAgICAgICAgbV9jb250ZXh0Lm1fcGxhdGZvcm1Db250ZXh0LnNhdmUoKTsKLSAg
ICB9Ci0KLSAgICB+RDJEQ29udGV4dFN0YXRlU2F2ZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1f
c2F2ZUFuZFJlc3RvcmUpCi0gICAgICAgICAgICBtX2NvbnRleHQubV9wbGF0Zm9ybUNvbnRleHQu
cmVzdG9yZSgpOwotICAgIH0KLQotICAgIHZvaWQgc2F2ZSgpCi0gICAgewotICAgICAgICBBU1NF
UlQoIW1fc2F2ZUFuZFJlc3RvcmUpOwotICAgICAgICBtX2NvbnRleHQubV9wbGF0Zm9ybUNvbnRl
eHQuc2F2ZSgpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHJlc3RvcmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUp
OwotICAgICAgICBtX2NvbnRleHQubV9wbGF0Zm9ybUNvbnRleHQucmVzdG9yZSgpOwotICAgICAg
ICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBkaWRTYXZlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3NhdmVBbmRSZXN0b3JlOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IG93
bmVkUGxhdGZvcm1Db250ZXh0OwotICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSYg
bV9jb250ZXh0OwotICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZSB7IGZhbHNlIH07Ci19OwotCi19
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDYgQEAKIAogI2lmIFVTRShDRykKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIgotI2VsaWYgVVNFKERJUkVDVDJEKQot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCiAjZW5k
aWYKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgpAQCAtNDAsNyArMzgsNiBAQAogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4K
IAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB2b2lkIGZpbGxXaXRoQ2xlYXJDb2xv
cihIQklUTUFQIGJpdG1hcCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmgJKHJldmlzaW9uIDI4Nzgx
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDYgQEAKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRDRy5oIgogI2RlZmluZSBHcmFwaGljc0NvbnRleHRXaW4gR3JhcGhpY3NDb250
ZXh0Q0cKIAotI2VsaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQuaCIKLSNkZWZpbmUgR3JhcGhpY3NDb250ZXh0V2luIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJECi0KICNlbGlmIFVTRShDQUlSTykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENh
aXJvLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NMYXllckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NMYXllckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJE
aXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw5MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NMYXllckRpcmVjdDJELmgiCi0KLSNpZiBVU0UoRElSRUNUMkQp
Ci0KLSNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJGYWN0
b3J5LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDxsaW1pdHMuaD4K
LSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgotI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgotI2luY2x1ZGUgPHd0Zi9TeXN0ZW1U
cmFjaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLQotI2lmIENPTVBJ
TEVSKE1TVkMpCi0vLyBTZWUgaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFy
eS8xd2VhNXp3ZS5hc3B4Ci0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMSkKLSNlbmRpZgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVy
OjpjcmVhdGUoR3JhcGhpY3NMYXllckZhY3RvcnkqIGZhY3RvcnksIEdyYXBoaWNzTGF5ZXJDbGll
bnQmIGNsaWVudCwgVHlwZSBsYXllclR5cGUpCi17Ci0gICAgaWYgKGZhY3RvcnkpIHsKLSAgICAg
ICAgYXV0byBsYXllciA9IGZhY3RvcnktPmNyZWF0ZUdyYXBoaWNzTGF5ZXIobGF5ZXJUeXBlLCBj
bGllbnQpOwotICAgICAgICBsYXllci0+aW5pdGlhbGl6ZShsYXllclR5cGUpOwotICAgICAgICBy
ZXR1cm4gbGF5ZXI7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFJldHVybiBhIHJlYWwgRGlyZWN0
MkQgZ3JhcGhpY3MgbGF5ZXIKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHcmFwaGljc0xheWVy
RGlyZWN0MkQobGF5ZXJUeXBlLCBjbGllbnQpKTsKLX0KLQotR3JhcGhpY3NMYXllckRpcmVjdDJE
OjpHcmFwaGljc0xheWVyRGlyZWN0MkQoVHlwZSBsYXllclR5cGUsIEdyYXBoaWNzTGF5ZXJDbGll
bnQmIGNsaWVudCkKLSAgICA6IEdyYXBoaWNzTGF5ZXIobGF5ZXJUeXBlLCBjbGllbnQpCi17Ci19
Ci0KLXZvaWQgR3JhcGhpY3NMYXllckRpcmVjdDJEOjppbml0aWFsaXplKFR5cGUgbGF5ZXJUeXBl
KQotewotfQotCi1HcmFwaGljc0xheWVyRGlyZWN0MkQ6On5HcmFwaGljc0xheWVyRGlyZWN0MkQo
KQotewotICAgIHdpbGxCZURlc3Ryb3llZCgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJEaXJl
Y3QyRDo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBpZiAoIWRyYXdzQ29udGVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNz
TGF5ZXJEaXJlY3QyRDo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgciwg
U2hvdWxkQ2xpcFRvTGF5ZXIgc2hvdWxkQ2xpcCkKLXsKLSAgICBpZiAoIWRyYXdzQ29udGVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJEaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGlyZWN0MkQuaAko
cmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzTGF5ZXJEaXJlY3QyRC5oCShub25leGlzdGVudCkKQEAgLTEsNjEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgRGlzcGxheUxpc3Qg
ewotY2xhc3MgRGlzcGxheUxpc3Q7Ci19Ci0KLWNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7Ci1jbGFz
cyBJbWFnZTsKLWNsYXNzIFRyYW5zZm9ybVN0YXRlOwotCi1jbGFzcyBHcmFwaGljc0xheWVyRGly
ZWN0MkQgOiBwdWJsaWMgR3JhcGhpY3NMYXllciB7Ci1wdWJsaWM6Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCBleHBsaWNpdCBHcmFwaGljc0xheWVyRGlyZWN0MkQoVHlwZSwgR3JhcGhpY3NMYXllckNs
aWVudCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkdyYXBoaWNzTGF5ZXJEaXJlY3Qy
RCgpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5pdGlhbGl6ZShUeXBl
KSBvdmVycmlkZTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkg
b3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgU2hvdWxkQ2xpcFRvTGF5ZXIgPSBDbGlwVG9MYXllcikgb3ZlcnJp
ZGU7Ci0KLSAgICBib29sIGlzR3JhcGhpY3NMYXllckNBKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19HUkFQSElDU0xBWUVSKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJEaXJlY3QyRCwg
aXNHcmFwaGljc0xheWVyQ0EoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAkobm9uZXhpc3RlbnQpCkBA
IC0xLDMyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZC5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2Uu
aCIKLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVj
dDJELmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxkMmQxXzEu
aD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8d2luY29kZWMuaD4KLSNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kKTsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKLXsKLSAgICBJbnRTaXpl
IGJhY2tlbmRTaXplID0gY2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
KTsKLSAgICBpZiAoYmFja2VuZFNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIGF1dG8qIHBsYXRmb3JtQ29udGV4dCA9IHRhcmdldENvbnRleHQgPyB0YXJnZXRD
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSA6IG51bGxwdHI7Ci0gICAgYXV0byogcmVuZGVyVGFy
Z2V0ID0gcGxhdGZvcm1Db250ZXh0ID8gcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSA6
IG51bGxwdHI7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgcmVuZGVyVGFyZ2V0
ID0gR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBhdXRvIGJp
dG1hcENvbnRleHQgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0T2ZTaXplKHNp
emUsIHJlbmRlclRhcmdldCwgcmVzb2x1dGlvblNjYWxlKTsKLSAgICBpZiAoIWJpdG1hcENvbnRl
eHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBsYXRmb3JtSW1hZ2VQdHIgYml0bWFwOwotICAg
IEhSRVNVTFQgaHIgPSBiaXRtYXBDb250ZXh0LT5HZXRCaXRtYXAoJmJpdG1hcCk7Ci0gICAgaWYg
KCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHBsYXRmb3JtQ29u
dGV4dCA9IG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+KGJpdG1hcENvbnRleHQu
Z2V0KCksIFt0aGlzXSgpIHsKLSAgICAgICAgbV9kYXRhLmxvYWREYXRhVG9CaXRtYXBJZk5lZWRl
ZCgpOwotICAgIH0sIFt0aGlzXSgpIHsKLSAgICAgICAgbV9kYXRhLm1hcmtCdWZmZXJPdXRPZlN5
bmMoKTsKLSAgICB9KTsKLQotICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ+KHBsYXRmb3JtQ29udGV4dC5nZXQoKSwgR3JhcGhpY3NDb250ZXh0OjpCaXRt
YXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKLSAgICBpZiAoIWNvbnRleHQpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4obmV3IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKHNp
emUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUocGxh
dGZvcm1Db250ZXh0KSwgV1RGTW92ZShjb250ZXh0KSwgV1RGTW92ZShiaXRtYXApKSk7Ci19Ci0K
LXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsIG51bGxw
dHIpOwotfQotCi1JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6SW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFj
a2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNv
bG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4mJiBwbGF0
Zm9ybUNvbnRleHQsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCwg
UGxhdGZvcm1JbWFnZVB0ciYmIGJpdG1hcCkKLSAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxv
Z2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQotICAg
ICwgbV9wbGF0Zm9ybUNvbnRleHQoV1RGTW92ZShwbGF0Zm9ybUNvbnRleHQpKQotICAgICwgbV9j
b250ZXh0KFdURk1vdmUoY29udGV4dCkpCi0gICAgLCBtX2JpdG1hcChXVEZNb3ZlKGJpdG1hcCkp
Ci17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNv
bnRleHQoKSBjb25zdAotewotICAgIHJldHVybiAqbV9jb250ZXh0OwotfQotCi12b2lkIEltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpmbHVzaENvbnRleHQoKQotewotICAgIGNvbnRleHQoKS5m
bHVzaCgpOwotfQotCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0
Ci17Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7Ci0g
ICAgSFJFU1VMVCBociA9IGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0
KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGlt
YWdlOwotICAgIGhyID0gYml0bWFwVGFyZ2V0LT5HZXRCaXRtYXAoJmltYWdlKTsKLSAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICAvLyBGSVhNRTogbV9kYXRhLmRhdGEgaXMgbnVsbHB0
ciBldmVuIHdoZW4gYXNraW5nIHRvIGNvcHkgYmFja2luZyBzdG9yZSBsZWFkaW5nIHRvIHRlc3Qg
ZmFpbHVyZXMuCi0gICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlICYmIG1f
ZGF0YS5kYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgY29weUJlaGF2aW9yID0gRG9udENvcHlCYWNr
aW5nU3RvcmU7Ci0KLSAgICBDaGVja2VkU2l6ZSBudW1CeXRlcyA9IENoZWNrZWRVaW50MzIobV9k
YXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93OwotICAg
IGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlKSB7Ci0gICAgICAgIEQy
RDFfUkVDVF9VIGJhY2tpbmdTdG9yZURpbWVuc3Rpb25zID0gSW50UmVjdChJbnRQb2ludCgpLCBt
X2RhdGEuYmFja2luZ1N0b3JlU2l6ZSk7Ci0gICAgICAgIGltYWdlLT5Db3B5RnJvbU1lbW9yeSgm
YmFja2luZ1N0b3JlRGltZW5zdGlvbnMsIG1fZGF0YS5kYXRhLmRhdGEoKSwgMzIpOwotCi0gICAg
fQotCi0gICAgcmV0dXJuIE5hdGl2ZUltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOwotfQot
Ci1zdGF0aWMgUGxhdGZvcm1JbWFnZVB0ciBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShJ
RDJEMUJpdG1hcFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0LCBJRDJEMUJpdG1hcCogaW1hZ2Us
IGNvbnN0IEludFNpemUmIGJvdW5kcykKLXsKLSAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gaW1h
Z2UgPyBuYXRpdmVJbWFnZVNpemUoaW1hZ2UpIDogRmxvYXRTaXplKCk7Ci0KLSAgICBpZiAoaW1h
Z2UgJiYgKHN0YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VTaXplLndpZHRoKCkpICE9IHN0YXRpY19j
YXN0PHNpemVfdD4oYm91bmRzLndpZHRoKCkpIHx8IHN0YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VT
aXplLmhlaWdodCgpKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKSB7
Ci0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY3JvcHBlZEJpdG1hcCA9IERpcmVjdDJEOjpj
cmVhdGVCaXRtYXAoYml0bWFwVGFyZ2V0LCBib3VuZHMpOwotICAgICAgICBpZiAoY3JvcHBlZEJp
dG1hcCkgewotICAgICAgICAgICAgYXV0byBzb3VyY2VSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwg
Ym91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBIUkVTVUxUIGhy
ID0gY3JvcHBlZEJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgaW1hZ2UsICZzb3VyY2VS
ZWN0KTsKLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBjcm9wcGVkQml0bWFwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGltYWdl
OwotfQotCi1zdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGlu
Z0lmTmVlZGVkKElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQsIENPTVB0cjxJ
RDJEMUJpdG1hcD4mJiBpbWFnZSwgSW50U2l6ZSBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBp
ZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZl
UmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVj
ZXNzYXJ5KGJpdG1hcFRhcmdldCwgaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBzY2FsZWQgdmVyc2lvbgot
ICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLQotICAgIGlmICghaW1hZ2UpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RG
TW92ZShpbWFnZSkpOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgUGxhdGZvcm1JbWFnZVB0
ciBpbWFnZTsKLSAgICBpZiAocmVzb2x1dGlvblNjYWxlKCkgPT0gMSB8fCBwcmVzZXJ2ZVJlc29s
dXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY29weU5h
dGl2ZUltYWdlKGNvcHlCZWhhdmlvciktPnBsYXRmb3JtSW1hZ2UoKTsKLSAgICBlbHNlCi0gICAg
ICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKS0+cGxhdGZv
cm1JbWFnZSgpOwotCi0gICAgYXV0byBiaXRtYXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PElE
MkQxQml0bWFwUmVuZGVyVGFyZ2V0Kj4oY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKLSAg
ICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJn
ZXQsIFdURk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgcmVzb2x1dGlvblNjYWxlKCksIHBy
ZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1
dGlvbikKLXsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdl
dDsKLSAgICBIUkVTVUxUIGhyID0gY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJU
YXJnZXQoKS0+UXVlcnlJbnRlcmZhY2UoJmJpdG1hcFRhcmdldCk7Ci0gICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFBsYXRmb3JtSW1hZ2VQdHIg
aW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpLT5wbGF0Zm9ybUlt
YWdlKCk7Ci0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQo
Yml0bWFwVGFyZ2V0LmdldCgpLCBXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCksIHJlc29s
dXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1QbGF0Zm9ybUltYWdlUHRy
IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb21wYXRpYmxlQml0bWFwKElEMkQxUmVuZGVy
VGFyZ2V0KiByZW5kZXJUYXJnZXQpCi17Ci0gICAgbG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCk7
Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgcmV0dXJuIGJpdG1hcDsKLQotICAg
IGlmIChtX3BsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkgPT0gcmVuZGVyVGFyZ2V0KSB7
Ci0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0KFF1
ZXJ5LCByZW5kZXJUYXJnZXQpOwotICAgICAgICBpZiAoYml0bWFwVGFyZ2V0KSB7Ci0gICAgICAg
ICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJhY2tpbmdCaXRtYXA7Ci0gICAgICAgICAgICBpZiAo
U1VDQ0VFREVEKGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZiYWNraW5nQml0bWFwKSkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoYmFja2luZ0JpdG1hcCAhPSBtX2JpdG1hcCkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGJpdG1hcDsKLQotICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGRy
YXcgYW4gSUQyRDFCaXRtYXAgdG8gaXRzZWxmLiBNdXN0IHJldHVybiBhIGNvcHkuCi0gICAgICAg
ICAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb3BpZWRCaXRtYXA7Ci0gICAgICAgICAgICAg
ICAgaWYgKFNVQ0NFRURFRChyZW5kZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBp
eGVsU2l6ZSgpLCBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpLCAmY29waWVkQml0bWFwKSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChjb3BpZWRCaXRtYXAtPkNvcHlG
cm9tQml0bWFwKG51bGxwdHIsIG1fYml0bWFwLmdldCgpLCBudWxscHRyKSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY29waWVkQml0bWFwOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gc2l6ZSA9IG1fYml0bWFw
LT5HZXRQaXhlbFNpemUoKTsKLSAgICBBU1NFUlQoc2l6ZS5oZWlnaHQgJiYgc2l6ZS53aWR0aCk7
Ci0KLSAgICBDaGVja2VkVWludDMyIG51bUJ5dGVzID0gc2l6ZS53aWR0aCAqIHNpemUuaGVpZ2h0
ICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIC8vIENvcHkgdGhlIGJpdHMgZnJvbSBjdXJyZW50IHJlbmRlclRhcmdl
dCB0byB0aGUgb3V0cHV0IHRhcmdldC4KLSAgICAvLyBXZSBjYW5ub3QgYWNjZXNzIHRoZSBkYXRh
IGJhY2tpbmcgYW4gSVdJQ0JpdG1hcCB3aGlsZSBhbiBhY3RpdmUgZHJhdyBzZXNzaW9uIGlzIG9w
ZW4uCi0gICAgY29udGV4dC0+ZW5kRHJhdygpOwotCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29u
dGV4dD4gc291cmNlRGV2aWNlQ29udGV4dCA9IG1fcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VDb250
ZXh0KCk7Ci0gICAgaWYgKCFzb3VyY2VEZXZpY2VDb250ZXh0KQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcDE+IHNvdXJjZUNQVUJpdG1hcDsKLSAgICBE
MkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJv
cGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElP
TlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKLSAgICBIUkVTVUxUIGhy
ID0gc291cmNlRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKG1fYml0bWFwLT5HZXRQaXhlbFNp
emUoKSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3csIGJpdG1hcFByb3BlcnRpZXMsICZzb3VyY2VDUFVC
aXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBpZiAoIXNvdXJjZUNQVUJpdG1hcCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgbV9iaXRt
YXAuZ2V0KCksIG51bGxwdHIpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBlZFNvdXJjZURhdGE7Ci0g
ICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZtYXBw
ZWRTb3VyY2VEYXRhKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gdGFyZ2V0RGV2aWNlQ29u
dGV4dDsKLSAgICBociA9IHJlbmRlclRhcmdldC0+UXVlcnlJbnRlcmZhY2UoJnRhcmdldERldmlj
ZUNvbnRleHQpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENPTVB0cjxJRDJE
MUJpdG1hcD4gY29tcGF0aWJsZUJpdG1hcDsKLSAgICBociA9IHRhcmdldERldmljZUNvbnRleHQt
PkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBtYXBwZWRTb3VyY2VEYXRhLmJp
dHMsIG1hcHBlZFNvdXJjZURhdGEucGl0Y2gsIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCks
ICZjb21wYXRpYmxlQml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPlVubWFwKCk7Ci0gICAg
QVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgY29udGV4dC0+YmVnaW5EcmF3KCk7Ci0KLSAg
ICByZXR1cm4gY29tcGF0aWJsZUJpdG1hcDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBz
cmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUoKSk7Ci0K
LSAgICBhdXRvIGNvbXBhdGlibGVCaXRtYXAgPSBjb21wYXRpYmxlQml0bWFwKGRlc3RDb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKSk7Ci0KLSAgICBGbG9hdFNpemUgY3Vy
cmVudEltYWdlU2l6ZSA9IG5hdGl2ZUltYWdlU2l6ZShjb21wYXRpYmxlQml0bWFwKTsKLSAgICBp
ZiAoY3VycmVudEltYWdlU2l6ZS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGVz
dENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGNvbXBhdGlibGVCaXRtYXAsIGN1cnJlbnRJbWFnZVNp
emUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNy
Y1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKHJlc29sdXRpb25TY2FsZSgpKTsKLQot
ICAgIGlmIChhdXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgp
ID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgaW1h
Z2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNsaXBUb01hc2soR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1TdHJpbmcgSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmLCBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4sIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWludDhfdD4g
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1
ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6
Z2V0UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBudWxscHRyKTsKLX0KLQotdm9p
ZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxC
dWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVy
KHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG51bGxwdHIpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaAkocmV2aXNpb24gMjg3ODEyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNF
KERJUkVDVDJEKQotCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCi0jaW5jbHVkZSA8
d3RmL0lzb01hbGxvYy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7Ci0gICAgV1RG
X01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCk7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQpOwotcHVibGljOgot
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IGNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqKTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0Jik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVy
cmlkZTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlOwotCi0gICAgUmVmUHRyPE5h
dGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5n
U3RvcmUpIGNvbnN0IG92ZXJyaWRlOwotICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tp
bmdTdG9yZUNvcHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBS
ZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlkZTsK
LQotICAgIHZvaWQgY2xpcFRvTWFzayhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KSBvdmVycmlkZTsKLQotICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1
dGlvbikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3Zl
cnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihj
b25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7Ci0KLXByb3RlY3RlZDoKLSAg
ICBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+
IG1fcGxhdGZvcm1Db250ZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+
IG1fY29udGV4dDsKLSAgICBQbGF0Zm9ybUltYWdlUHRyIG1fYml0bWFwOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VE
ZWNvZGVyRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3BwCShub25leGlzdGVu
dCkKQEAgLTEsMzA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZURlY29k
ZXJEaXJlY3QyRC5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgIkludFBv
aW50LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1
ZGUgPFdpbkNvZGVjLmg+Ci0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUltYWdlRGVjb2RlckRpcmVjdDJE
OjpJbWFnZURlY29kZXJEaXJlY3QyRCgpCi17Ci19Ci0KLUlXSUNJbWFnaW5nRmFjdG9yeTIqIElt
YWdlRGVjb2RlckRpcmVjdDJEOjpzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpCi17Ci0gICAgc3RhdGlj
IElXSUNJbWFnaW5nRmFjdG9yeTIqIHdpY0ltYWdpbmdGYWN0b3J5ID0gbnVsbHB0cjsKLSAgICBp
ZiAoIXdpY0ltYWdpbmdGYWN0b3J5KSB7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBDb0NyZWF0ZUlu
c3RhbmNlKENMU0lEX1dJQ0ltYWdpbmdGYWN0b3J5LCBudWxscHRyLCBDTFNDVFhfSU5QUk9DX1NF
UlZFUiwgSUlEX0lXSUNJbWFnaW5nRmFjdG9yeTIsIChMUFZPSUQqKSZ3aWNJbWFnaW5nRmFjdG9y
eSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIH0KLQotICAg
IHJldHVybiB3aWNJbWFnaW5nRmFjdG9yeTsKLX0KLQotc2l6ZV90IEltYWdlRGVjb2RlckRpcmVj
dDJEOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKSBjb25zdAotewotICAgIC8v
IFNldCB0byBtYXRjaCB2YWx1ZSB1c2VkIGZvciBDb3JlR3JhcGhpY3MuCi0gICAgcmV0dXJuIDEz
MDg4OwotfQotCi1TdHJpbmcgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmZpbGVuYW1lRXh0ZW5zaW9u
KCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsK
LX0KLQotYm9vbCBJbWFnZURlY29kZXJEaXJlY3QyRDo6aXNTaXplQXZhaWxhYmxlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9uYXRpdmVEZWNvZGVyID8gdHJ1ZSA6IGZhbHNlOwotfQotCi1FbmNv
ZGVkRGF0YVN0YXR1cyBJbWFnZURlY29kZXJEaXJlY3QyRDo6ZW5jb2RlZERhdGFTdGF0dXMoKSBj
b25zdAotewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4gRW5jb2Rl
ZERhdGFTdGF0dXM6OkVycm9yOwotCi0gICAgLy8gRklYTUU6IEhvb2sgaW50byBXSUMgZGVjb2Rl
ciAoaWYgYXN5bmMgZGVjb2RlIGlzIGV2ZW4gcG9zc2libGUpCi0gICAgcmV0dXJuIEVuY29kZWRE
YXRhU3RhdHVzOjpDb21wbGV0ZTsKLX0KLQotSW50U2l6ZSBJbWFnZURlY29kZXJEaXJlY3QyRDo6
c2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX25hdGl2ZURlY29kZXIpCi0gICAgICAgIHJldHVy
biBJbnRTaXplKCk7Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2RlPiBmcmFtZTsK
LSAgICBIUkVTVUxUIGhyID0gbV9uYXRpdmVEZWNvZGVyLT5HZXRGcmFtZSgwLCAmZnJhbWUpOwot
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAg
IFVJTlQgd2lkdGgsIGhlaWdodDsKLSAgICBociA9IGZyYW1lLT5HZXRTaXplKCZ3aWR0aCwgJmhl
aWdodCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgp
OwotCi0gICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7Ci19Ci0KLXNpemVfdCBJbWFn
ZURlY29kZXJEaXJlY3QyRDo6ZnJhbWVDb3VudCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX25hdGl2
ZURlY29kZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVUlOVCBjb3VudDsKLSAgICBIUkVT
VUxUIGhyID0gbV9uYXRpdmVEZWNvZGVyLT5HZXRGcmFtZUNvdW50KCZjb3VudCk7Ci0gICAgaWYg
KCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBjb3VudDsK
LX0KLQotUmVwZXRpdGlvbkNvdW50IEltYWdlRGVjb2RlckRpcmVjdDJEOjpyZXBldGl0aW9uQ291
bnQoKSBjb25zdAotewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4g
UmVwZXRpdGlvbkNvdW50Tm9uZTsKLQotICAgIC8vIEZJWE1FOiBJZGVudGlmeSBpbWFnZSB0eXBl
LCBhbmQgZGV0ZXJtaW5lIHByb3BlciByZXBldGl0aW9uIGNvdW50LgotICAgIHJldHVybiBSZXBl
dGl0aW9uQ291bnROb25lOwotfQotCi1zdGQ6Om9wdGlvbmFsPEludFBvaW50PiBJbWFnZURlY29k
ZXJEaXJlY3QyRDo6aG90U3BvdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LX0KLQotSW50U2l6ZSBJbWFnZURlY29kZXJEaXJlY3QyRDo6ZnJhbWVTaXplQXRJbmRleChzaXpl
X3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAg
IENPTVB0cjxJV0lDQml0bWFwRnJhbWVEZWNvZGU+IGZyYW1lOwotICAgIEhSRVNVTFQgaHIgPSBt
X25hdGl2ZURlY29kZXItPkdldEZyYW1lKGluZGV4LCAmZnJhbWUpOwotICAgIGlmICghU1VDQ0VF
REVEKGhyKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIFVJTlQgd2lkdGgsIGhl
aWdodDsKLSAgICBociA9IGZyYW1lLT5HZXRTaXplKCZ3aWR0aCwgJmhlaWdodCk7Ci0gICAgaWYg
KCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgcmV0dXJu
IEludFNpemUod2lkdGgsIGhlaWdodCk7Ci19Ci0KLWJvb2wgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6
OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAotewotICAgIGlmICgh
bV9uYXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDT01QdHI8SVdJ
Q0JpdG1hcEZyYW1lRGVjb2RlPiBmcmFtZTsKLSAgICBIUkVTVUxUIGhyID0gbV9uYXRpdmVEZWNv
ZGVyLT5HZXRGcmFtZShpbmRleCwgJmZyYW1lKTsKLSAgICByZXR1cm4gU1VDQ0VFREVEKGhyKTsK
LX0KLUltYWdlRGVjb2Rlcjo6RnJhbWVNZXRhZGF0YSBJbWFnZURlY29kZXJEaXJlY3QyRDo6ZnJh
bWVNZXRhZGF0YUF0SW5kZXgoc2l6ZV90KSBjb25zdCBmaW5hbDsKLXsKLSAgICBpZiAoIW1fbmF0
aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIENPTVB0cjxJV0lDQml0bWFw
RnJhbWVEZWNvZGU+IGZyYW1lOwotICAgIEhSRVNVTFQgaHIgPSBtX25hdGl2ZURlY29kZXItPkdl
dEZyYW1lKGluZGV4LCAmZnJhbWUpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAg
cmV0dXJuIHsgfTsKLQotICAgIENPTVB0cjxJV0lDTWV0YWRhdGFRdWVyeVJlYWRlcj4gbWV0YWRh
dGE7Ci0gICAgaHIgPSBmcmFtZS0+R2V0TWV0YWRhdGFRdWVyeVJlYWRlcigmbWV0YWRhdGEpOwot
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFBST1BW
QVJJQU5UIHZhbHVlOwotICAgIFByb3BWYXJpYW50SW5pdCgmdmFsdWUpOwotICAgIGhyID0gbWV0
YWRhdGEtPkdldE1ldGFkYXRhQnlOYW1lKEwiU3lzdGVtLlBob3RvLk9yaWVudGF0aW9uIiwgJnZh
bHVlKTsKLSAgICBpZiAoU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIHsgSW1hZ2VPcmll
bnRhdGlvbihzdGF0aWNfY2FzdDxJbWFnZU9yaWVudGF0aW9uOjpPcmllbnRhdGlvbj4odmFsdWUu
dWlWYWwpKSwgc3RkOjpudWxsb3B0IH07Ci0KLSAgICByZXR1cm4geyB9OwotfQotCi1TZWNvbmRz
IEltYWdlRGVjb2RlckRpcmVjdDJEOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX25hdGl2ZURlY29kZXIpCi0gICAgICAgIHJldHVybiBTZWNv
bmRzKDApOwotCi0gICAgQ09NUHRyPElXSUNCaXRtYXBGcmFtZURlY29kZT4gZnJhbWU7Ci0gICAg
SFJFU1VMVCBociA9IG1fbmF0aXZlRGVjb2Rlci0+R2V0RnJhbWUoaW5kZXgsICZmcmFtZSk7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gU2Vjb25kcygwKTsKLQotICAg
IC8vIEZJWE1FOiBGaWd1cmUgb3V0IGNvcnJlY3QgaW1hZ2UgZm9ybWF0LXNwZWNpZmljIHF1ZXJ5
IGZvciBmcmFtZSBkdXJhdGlvbiBjaGVjay4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBTZWNvbmRzKDApOwotfQotCi1ib29sIEltYWdlRGVjb2RlckRpcmVjdDJEOjpmcmFtZUFs
bG93U3Vic2FtcGxpbmdBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKLXsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBJbWFnZURlY29kZXJEaXJlY3QyRDo6ZnJhbWVIYXNBbHBoYUF0SW5k
ZXgoc2l6ZV90IGluZGV4KSBjb25zdAotewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2RlPiBm
cmFtZTsKLSAgICBIUkVTVUxUIGhyID0gbV9uYXRpdmVEZWNvZGVyLT5HZXRGcmFtZShpbmRleCwg
JmZyYW1lKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIENPTVB0cjxJV0lDTWV0YWRhdGFRdWVyeVJlYWRlcj4gbWV0YWRhdGE7Ci0gICAgaHIg
PSBmcmFtZS0+R2V0TWV0YWRhdGFRdWVyeVJlYWRlcigmbWV0YWRhdGEpOwotICAgIGlmICghU1VD
Q0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1VJRCBjb250YWluZXJG
b3JtYXQ7Ci0gICAgaHIgPSBtZXRhZGF0YS0+R2V0Q29udGFpbmVyRm9ybWF0KCZjb250YWluZXJG
b3JtYXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKDo6SXNFcXVhbEdVSUQoR1VJRF9Db250YWluZXJGb3JtYXRKcGVnLCBjb250YWlu
ZXJGb3JtYXQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdW5zaWduZWQgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVf
dCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAotewotICAg
IGlmICghbV9uYXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBm
cmFtZVNpemVBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKS5hcmVhKCkgKiA0OwotfQot
Ci12b2lkIEltYWdlRGVjb2RlckRpcmVjdDJEOjpzZXRUYXJnZXRDb250ZXh0KElEMkQxUmVuZGVy
VGFyZ2V0KiByZW5kZXJUYXJnZXQpCi17Ci0gICAgbV9yZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJn
ZXQ7Ci19Ci0KLVBsYXRmb3JtSW1hZ2VQdHIgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmNyZWF0ZUZy
YW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGlu
Z0xldmVsLCBjb25zdCBEZWNvZGluZ09wdGlvbnMmKQotewotICAgIGlmICghbV9uYXRpdmVEZWNv
ZGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghbV9yZW5kZXJUYXJnZXQp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ09NUHRyPElXSUNCaXRtYXBGcmFtZURl
Y29kZT4gZnJhbWU7Ci0gICAgSFJFU1VMVCBociA9IG1fbmF0aXZlRGVjb2Rlci0+R2V0RnJhbWUo
MCwgJmZyYW1lKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgQ09NUHRyPElXSUNGb3JtYXRDb252ZXJ0ZXI+IGNvbnZlcnRlcjsKLSAgICBo
ciA9IHN5c3RlbUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZUZvcm1hdENvbnZlcnRlcigmY29udmVy
dGVyKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgaHIgPSBjb252ZXJ0ZXItPkluaXRpYWxpemUoZnJhbWUuZ2V0KCksIEdVSURfV0lDUGl4
ZWxGb3JtYXQzMmJwcFBSR0JBLCBXSUNCaXRtYXBEaXRoZXJUeXBlTm9uZSwgbnVsbHB0ciwgMC5m
LCBXSUNCaXRtYXBQYWxldHRlVHlwZUN1c3RvbSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJV0lDQml0bWFwPiB3aWNCaXRt
YXA7Ci0gICAgaHIgPSBzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVCaXRtYXBGcm9tU291
cmNlKGNvbnZlcnRlci5nZXQoKSwgV0lDQml0bWFwQ2FjaGVPbkRlbWFuZCwgJndpY0JpdG1hcCk7
Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotICAgIGhyID0gbV9yZW5kZXJUYXJnZXQtPkNy
ZWF0ZUJpdG1hcEZyb21XaWNCaXRtYXAod2ljQml0bWFwLmdldCgpLCAmYml0bWFwKTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJu
IGJpdG1hcDsKLX0KLQotdm9pZCBJbWFnZURlY29kZXJEaXJlY3QyRDo6c2V0RGF0YShjb25zdCBG
cmFnbWVudGVkU2hhcmVkQnVmZmVyJiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSAg
ICBpZiAoIWFsbERhdGFSZWNlaXZlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElX
SUNTdHJlYW0+IHN0cmVhbTsKLSAgICBIUkVTVUxUIGhyID0gc3lzdGVtSW1hZ2luZ0ZhY3Rvcnko
KS0+Q3JlYXRlU3RyZWFtKCZzdHJlYW0pOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgUmVmPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gZGF0YS5tYWtlQ29u
dGlndW91cygpOwotICAgIGNoYXIqIGRhdGFQdHIgPSBjb25zdF9jYXN0PGNoYXIqPihidWZmZXIt
PmRhdGEoKSk7Ci0gICAgaHIgPSBzdHJlYW0tPkluaXRpYWxpemVGcm9tTWVtb3J5KHJlaW50ZXJw
cmV0X2Nhc3Q8QllURSo+KGRhdGFQdHIpLCBkYXRhLnNpemUoKSk7Ci0gICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX25hdGl2ZURlY29kZXIgPSBudWxscHRy
OwotCi0gICAgaHIgPSBzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVEZWNvZGVyRnJvbVN0
cmVhbShzdHJlYW0uZ2V0KCksIG51bGxwdHIsIFdJQ0RlY29kZU1ldGFkYXRhQ2FjaGVPbkRlbWFu
ZCwgJm1fbmF0aXZlRGVjb2Rlcik7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKSB7Ci0gICAgICAg
IG1fbmF0aXZlRGVjb2RlciA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBJbWFnZSB3YXMgdmFsaWQuCi19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVy
RGlyZWN0MkQuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw5
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0
ci5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgotCi1pbnRlcmZhY2UgSUQyRDFSZW5kZXJU
YXJnZXQ7Ci1pbnRlcmZhY2UgSVdJQ0JpdG1hcERlY29kZXI7Ci1pbnRlcmZhY2UgSVdJQ0ltYWdp
bmdGYWN0b3J5MjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbWFnZURlY29kZXJE
aXJlY3QyRCBmaW5hbCA6IHB1YmxpYyBJbWFnZURlY29kZXIgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIEltYWdlRGVjb2RlckRpcmVjdDJEKCk7Ci0KLSAgICBz
dGF0aWMgUmVmPEltYWdlRGVjb2RlckRpcmVjdDJEPiBjcmVhdGUoRnJhZ21lbnRlZFNoYXJlZEJ1
ZmZlciYsIEFscGhhT3B0aW9uLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEltYWdlRGVjb2RlckRpcmVjdDJEKCkpOwotICAg
IH0KLQotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzTWVkaWFUeXBlKE1lZGlhVHlwZSB0eXBlKSB7
IHJldHVybiB0eXBlID09IE1lZGlhVHlwZTo6SW1hZ2U7IH0KLQotICAgIHNpemVfdCBieXRlc0Rl
Y29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKSBjb25zdCBmaW5hbDsKLQotICAgIFN0cmluZyBm
aWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IGZpbmFsOwotICAgIEVuY29kZWREYXRhU3RhdHVzIGVu
Y29kZWREYXRhU3RhdHVzKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1NpemVBdmFpbGFibGUo
KSBjb25zdCBmaW5hbDsKLQotICAgIC8vIEFsd2F5cyBvcmlnaW5hbCBzaXplLCB3aXRob3V0IHN1
YnNhbXBsaW5nLgotICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IGZpbmFsOwotICAgIHNpemVfdCBm
cmFtZUNvdW50KCkgY29uc3QgZmluYWw7Ci0KLSAgICBSZXBldGl0aW9uQ291bnQgcmVwZXRpdGlv
bkNvdW50KCkgY29uc3QgZmluYWw7Ci0gICAgc3RkOjpvcHRpb25hbDxJbnRQb2ludD4gaG90U3Bv
dCgpIGNvbnN0IGZpbmFsOwotCi0gICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwg
U3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQpIGNvbnN0IGZpbmFs
OwotICAgIGJvb2wgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QpIGNvbnN0IGZpbmFsOwot
ICAgIEltYWdlRGVjb2Rlcjo6RnJhbWVNZXRhZGF0YSBmcmFtZU1ldGFkYXRhQXRJbmRleChzaXpl
X3QpIGNvbnN0IGZpbmFsOwotCi0gICAgU2Vjb25kcyBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXpl
X3QpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90KSBj
b25zdCBmaW5hbDsKLSAgICBib29sIGZyYW1lQWxsb3dTdWJzYW1wbGluZ0F0SW5kZXgoc2l6ZV90
KSBjb25zdCBmaW5hbDsKLSAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QsIFN1
YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KSBjb25zdCBmaW5hbDsK
LQotICAgIFBsYXRmb3JtSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBT
dWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgY29uc3QgRGVjb2Rp
bmdPcHRpb25zJiA9IERlY29kaW5nT3B0aW9ucyhEZWNvZGluZ01vZGU6OlN5bmNocm9ub3VzKSkg
ZmluYWw7Ci0KLSAgICB2b2lkIHNldERhdGEoY29uc3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciYs
IGJvb2wgYWxsRGF0YVJlY2VpdmVkKSBmaW5hbDsKLSAgICBib29sIGlzQWxsRGF0YVJlY2VpdmVk
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pc0FsbERhdGFSZWNlaXZlZDsgfQotICAgIHZvaWQg
Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCkgZmluYWwgeyB9Ci0KLSAgICB2b2lkIHNldFRh
cmdldENvbnRleHQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKLQotICAgIHN0YXRpYyBJV0lDSW1hZ2lu
Z0ZhY3RvcnkyKiBzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpOwotCi1wcml2YXRlOgotICAgIGJvb2wg
bV9pc0FsbERhdGFSZWNlaXZlZCB7IGZhbHNlIH07Ci0gICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6
ZTsKLSAgICBDT01QdHI8SVdJQ0JpdG1hcERlY29kZXI+IG1fbmF0aXZlRGVjb2RlcjsKLSAgICBD
T01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IG1fcmVuZGVyVGFyZ2V0OwotfTsKLQotfQotCi0jZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBA
IC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLQotI2lu
Y2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQml0bWFwSW5mby5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3aW5kb3dz
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZlB0cjxCaXRtYXBJbWFnZT4gQml0
bWFwSW1hZ2U6OmNyZWF0ZShIQklUTUFQIGhCaXRtYXApCi17Ci0gICAgRElCU0VDVElPTiBkaWJT
ZWN0aW9uOwotICAgIGlmICghR2V0T2JqZWN0KGhCaXRtYXAsIHNpemVvZihESUJTRUNUSU9OKSwg
JmRpYlNlY3Rpb24pKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEFTU0VSVChkaWJT
ZWN0aW9uLmRzQm0uYm1CaXRzUGl4ZWwgPT0gMzIpOwotICAgIGlmIChkaWJTZWN0aW9uLmRzQm0u
Ym1CaXRzUGl4ZWwgIT0gMzIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQVNTRVJU
KGRpYlNlY3Rpb24uZHNCbS5ibUJpdHMpOwotICAgIGlmICghZGliU2VjdGlvbi5kc0JtLmJtQml0
cykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNp
emUoSEJJVE1BUCBibXAsIGNvbnN0IEludFNpemUqIHNpemUpCi17Ci0gICAgQVNTRVJUKGJtcCk7
Ci0KLSAgICBCSVRNQVAgYm1wSW5mbzsKLSAgICBHZXRPYmplY3QoYm1wLCBzaXplb2YoQklUTUFQ
KSwgJmJtcEluZm8pOwotCi0gICAgQVNTRVJUKGJtcEluZm8uYm1CaXRzUGl4ZWwgPT0gMzIpOwot
ICAgIGludCBidWZmZXJTaXplID0gYm1wSW5mby5ibVdpZHRoQnl0ZXMgKiBibXBJbmZvLmJtSGVp
Z2h0OwotICAgIAotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNz
Q29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBz
cmNTaXplLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKLXsKLSAgICBzaXplX3QgZnJh
bWVzID0gZnJhbWVDb3VudCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVzOyAr
K2kpIHsKLSAgICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwot
ICAgICAgICBhdXRvIGltYWdlU2l6ZSA9IG5hdGl2ZUltYWdlU2l6ZShpbWFnZSk7Ci0gICAgICAg
IGlmIChpbWFnZSAmJiBjbGFtcFRvPGludD4oaW1hZ2VTaXplLmhlaWdodCgpKSA9PSBzdGF0aWNf
Y2FzdDxpbnQ+KHNyY1NpemUuaGVpZ2h0KCkpICYmIGNsYW1wVG88aW50PihpbWFnZVNpemUud2lk
dGgoKSkgPT0gc3RhdGljX2Nhc3Q8aW50PihzcmNTaXplLndpZHRoKCkpKSB7Ci0gICAgICAgICAg
ICBzaXplX3QgY3VycmVudEZyYW1lID0gbV9jdXJyZW50RnJhbWU7Ci0gICAgICAgICAgICBtX2N1
cnJlbnRGcmFtZSA9IGk7Ci0gICAgICAgICAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVj
dCgwLjBmLCAwLjBmLCBzcmNTaXplLndpZHRoKCksIHNyY1NpemUuaGVpZ2h0KCkpLCB7IGNvbXBv
c2l0ZU9wIH0pOwotICAgICAgICAgICAgbV9jdXJyZW50RnJhbWUgPSBjdXJyZW50RnJhbWU7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBObyBpbWFnZSBv
ZiB0aGUgY29ycmVjdCBzaXplIHdhcyBmb3VuZCwgZmFsbGJhY2sgdG8gZHJhd2luZyB0aGUgY3Vy
cmVudCBmcmFtZQotICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgp
OwotICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIGltYWdlU2l6
ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCB7IGNvbXBvc2l0ZU9wIH0pOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW50UG9pbnRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbnRQb2ludFdpbi5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbnRQb2ludFdpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJJbnRQb2ludC5oIgogCi0jaW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1ZGUgPHdpbmRvd3Mu
aD4KLQogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTU3LDI2ICs1NSw0IEBAIEludFBvaW50OjpvcGVyYXRvciBQT0lOVFMoKSBjb25zdAogICAg
IHJldHVybiBwOwogfQogCi1JbnRQb2ludDo6SW50UG9pbnQoY29uc3QgRDJEMV9QT0lOVF8yRiYg
cCkKLSAgICA6IG1feChjbGFtcFRvSW50ZWdlcihwLngpKQotICAgICwgbV95KGNsYW1wVG9JbnRl
Z2VyKHAueSkpCi17Ci19Ci0KLUludFBvaW50OjpJbnRQb2ludChjb25zdCBEMkQxX1BPSU5UXzJV
JiBwKQotICAgIDogbV94KHAueCkKLSAgICAsIG1feShwLnkpCi17Ci19Ci0KLUludFBvaW50Ojpv
cGVyYXRvciBEMkQxX1BPSU5UXzJGKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRDJEMTo6UG9pbnQy
RihtX3gsIG1feSk7Ci19Ci0KLUludFBvaW50OjpvcGVyYXRvciBEMkQxX1BPSU5UXzJVKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gRDJEMTo6UG9pbnQyVShtX3gsIG1feSk7Ci19Ci0KIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbnRSZWN0V2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW50UmVjdFdp
bi5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbnRSZWN0V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKIAotI2luY2x1ZGUgPGQy
ZDEuaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NSwyNiArNDMsNCBAQCBJbnRSZWN0OjpvcGVy
YXRvciBSRUNUKCkgY29uc3QKICAgICByZXR1cm4gcmVjdDsKIH0KIAotSW50UmVjdDo6SW50UmVj
dChjb25zdCBEMkQxX1JFQ1RfRiYgcikKLSAgICA6IG1fbG9jYXRpb24oSW50UG9pbnQoY2xhbXBU
b0ludGVnZXIoci5sZWZ0KSwgY2xhbXBUb0ludGVnZXIoci50b3ApKSkKLSAgICAsIG1fc2l6ZShJ
bnRTaXplKGNsYW1wVG9JbnRlZ2VyKHIucmlnaHQgLSByLmxlZnQpLCBjbGFtcFRvSW50ZWdlcihy
LmJvdHRvbSAtIHIudG9wKSkpCi17Ci19Ci0KLUludFJlY3Q6OkludFJlY3QoY29uc3QgRDJEMV9S
RUNUX1UmIHIpCi0gICAgOiBtX2xvY2F0aW9uKEludFBvaW50KHIubGVmdCwgci50b3ApKQotICAg
ICwgbV9zaXplKEludFNpemUoci5yaWdodCAtIHIubGVmdCwgci5ib3R0b20gLSByLnRvcCkpCi17
Ci19Ci0KLUludFJlY3Q6Om9wZXJhdG9yIEQyRDFfUkVDVF9GKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gRDJEMTo6UmVjdEYoeCgpLCB5KCksIG1heFgoKSwgbWF4WSgpKTsKLX0KLQotSW50UmVjdDo6
b3BlcmF0b3IgRDJEMV9SRUNUX1UoKSBjb25zdAotewotICAgIHJldHVybiBEMkQxOjpSZWN0VSh4
KCksIHkoKSwgbWF4WCgpLCBtYXhZKCkpOwotfQotCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW50U2l6ZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFNpemVXaW4uY3BwCShyZXZpc2lvbiAy
ODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW50U2l6ZVdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAKLSNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8
d2luZG93cy5oPgotCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDUsMjYgKzQzLDQgQEAgSW50U2l6ZTo6b3BlcmF0b3IgU0laRSgpIGNvbnN0
CiAgICAgcmV0dXJuIHM7CiB9CiAKLUludFNpemU6OkludFNpemUoY29uc3QgRDJEMV9TSVpFX1Um
IHMpCi0gICAgOiBtX3dpZHRoKHMud2lkdGgpCi0gICAgLCBtX2hlaWdodChzLmhlaWdodCkKLXsK
LX0KLQotSW50U2l6ZTo6SW50U2l6ZShjb25zdCBEMkQxX1NJWkVfRiYgcykKLSAgICA6IG1fd2lk
dGgoY2xhbXBUb0ludGVnZXIocy53aWR0aCkpCi0gICAgLCBtX2hlaWdodChjbGFtcFRvSW50ZWdl
cihzLmhlaWdodCkpCi17Ci19Ci0KLUludFNpemU6Om9wZXJhdG9yIEQyRDFfU0laRV9VKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gRDJEMTo6U2l6ZVUobV93aWR0aCwgbV9oZWlnaHQpOwotfQotCi1J
bnRTaXplOjpvcGVyYXRvciBEMkQxX1NJWkVfRigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEQyRDE6
OlNpemVGKG1fd2lkdGgsIG1faGVpZ2h0KTsKLX0KLQogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9OYXRpdmVJbWFnZURpcmVj
dDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsODAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKLQotI2luY2x1ZGUg
IkRpcmVjdDJET3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0j
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRC5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3aW5jb2RlYy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBJV0lDSW1hZ2luZ0ZhY3RvcnkqIGltYWdpbmdGYWN0
b3J5KCkKLXsKLSAgICBzdGF0aWMgSVdJQ0ltYWdpbmdGYWN0b3J5KiBpbWFnaW5nRmFjdG9yeSA9
IG51bGxwdHI7Ci0gICAgaWYgKCFpbWFnaW5nRmFjdG9yeSkgewotICAgICAgICBIUkVTVUxUIGhy
ID0gQ29DcmVhdGVJbnN0YW5jZShDTFNJRF9XSUNJbWFnaW5nRmFjdG9yeSwgbnVsbHB0ciwgQ0xT
Q1RYX0lOUFJPQ19TRVJWRVIsIElJRF9QUFZfQVJHUygmaW1hZ2luZ0ZhY3RvcnkpKTsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGlt
YWdpbmdGYWN0b3J5OwotfQotCi1JbnRTaXplIE5hdGl2ZUltYWdlOjpzaXplKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9wbGF0Zm9ybUltYWdlLT5HZXRQaXhlbFNpemUoKTsKLX0KLQotYm9vbCBO
YXRpdmVJbWFnZTo6aGFzQWxwaGEoKSBjb25zdAotewotICAgIEQyRDFfUElYRUxfRk9STUFUIHBp
eGVsRm9ybWF0ID0gbV9wbGF0Zm9ybUltYWdlLT5HZXRQaXhlbEZvcm1hdCgpOwotICAgIHJldHVy
biBwaXhlbEZvcm1hdC5hbHBoYU1vZGUgIT0gRDJEMV9BTFBIQV9NT0RFX0lHTk9SRTsKLX0KLQot
Q29sb3IgTmF0aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Ci17Ci0gICAg
aWYgKHNpemUoKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLQot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIENvbG9yKCk7Ci19Ci0KLURlc3RpbmF0
aW9uQ29sb3JTcGFjZSBOYXRpdmVJbWFnZTo6Y29sb3JTcGFjZSgpIGNvbnN0Ci17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCk7
Ci19Ci0KLXZvaWQgTmF0aXZlSW1hZ2U6OmNsZWFyU3ViaW1hZ2VzKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vUGF0aERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAJKG5v
bmV4aXN0ZW50KQpAQCAtMSw2NjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
UGF0aC5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNp
bmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBJRDJEMVJlbmRlclRhcmdldCogc2NyYXRj
aFJlbmRlclRhcmdldCgpCi17Ci0gICAgc3RhdGljIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4g
cmVuZGVyVGFyZ2V0ID0gYWRvcHRDT00oR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0UmVuZGVyVGFy
Z2V0KCkpOwotICAgIHJldHVybiByZW5kZXJUYXJnZXQuZ2V0KCk7Ci19Ci0KLVBhdGggUGF0aDo6
cG9seWdvblBhdGhGcm9tUG9pbnRzKGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50PiYgcG9pbnRzKQot
ewotICAgIFBhdGggcGF0aDsKLSAgICBpZiAocG9pbnRzLnNpemUoKSA8IDIpCi0gICAgICAgIHJl
dHVybiBwYXRoOwotCi0gICAgVmVjdG9yPEQyRDFfUE9JTlRfMkYsIDMyPiBkMmRQb2ludHM7Ci0g
ICAgZDJkUG9pbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocG9pbnRzLnNpemUoKSAtIDEpOwot
ICAgIGZvciAoYXV0byBwb2ludCA6IHBvaW50cykKLSAgICAgICAgZDJkUG9pbnRzLnVuY2hlY2tl
ZEFwcGVuZChwb2ludCk7Ci0KLSAgICBwYXRoLm1vdmVUbyhwb2ludHMuZmlyc3QoKSk7Ci0KLSAg
ICBBU1NFUlQocGF0aC5tX2FjdGl2ZVBhdGgpOwotCi0gICAgcGF0aC5tX2FjdGl2ZVBhdGgtPkFk
ZExpbmVzKGQyZFBvaW50cy5kYXRhKCksIGQyZFBvaW50cy5zaXplKCkpOwotICAgIHBhdGguY2xv
c2VTdWJwYXRoKCk7Ci0KLSAgICByZXR1cm4gcGF0aDsKLX0KLQotUGF0aDo6UGF0aCgpID0gZGVm
YXVsdDsKLQotUGF0aDo6flBhdGgoKQotewotICAgIGNsZWFyR2VvbWV0cmllcygpOwotfQotCi1Q
bGF0Zm9ybVBhdGhQdHIgUGF0aDo6ZW5zdXJlUGxhdGZvcm1QYXRoKCkKLXsKLSAgICBpZiAoIW1f
cGF0aCkgewotICAgICAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0
b3J5KCktPkNyZWF0ZUdlb21ldHJ5R3JvdXAoRDJEMV9GSUxMX01PREVfV0lORElORywgbnVsbHB0
ciwgMCwgJm1fcGF0aCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAg
aWYgKEZBSUxFRChocikpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgQVNT
RVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkgPT0gMSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1f
cGF0aC5nZXQoKTsKLX0KLQotdm9pZCBQYXRoOjpjbGVhckdlb21ldHJpZXMoKQotewotICAgIC8v
IE1hbnVhbGx5IGNsZWFuIHRoZXNlIHVwIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGlzIHZlY3RvciB3
aXRoIERpcmVjdDJEIEFQSXMuCi0gICAgZm9yIChhdXRvKiBnZW9tZXRyeSA6IG1fZ2VvbWV0cmll
cykKLSAgICAgICAgZ2VvbWV0cnktPlJlbGVhc2UoKTsKLSAgICBtX2dlb21ldHJpZXMuY2xlYXIo
KTsKLX0KLQotdm9pZCBQYXRoOjphcHBlbmRHZW9tZXRyeShJRDJEMUdlb21ldHJ5KiBnZW9tZXRy
eSkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHVuc2lnbmVkIGJlZm9yZSA9IHJlZkNvdW50
KGdlb21ldHJ5KTsKLSNlbmRpZgotCi0gICAgdW5zaWduZWQgZ2VvbWV0cnlDb3VudCA9IG1fcGF0
aCA/IG1fcGF0aC0+R2V0U291cmNlR2VvbWV0cnlDb3VudCgpIDogMDsKLQotICAgIFJFTEVBU0Vf
QVNTRVJUKG1fZ2VvbWV0cmllcy5zaXplKCkgPT0gZ2VvbWV0cnlDb3VudCk7Ci0KLSAgICBnZW9t
ZXRyeS0+QWRkUmVmKCk7Ci0gICAgbV9nZW9tZXRyaWVzLmFwcGVuZChnZW9tZXRyeSk7Ci0KLSAg
ICBhdXRvIGZpbGxNb2RlID0gbV9wYXRoID8gbV9wYXRoLT5HZXRGaWxsTW9kZSgpIDogRDJEMV9G
SUxMX01PREVfV0lORElORzsKLQotICAgIG1fcGF0aCA9IG51bGxwdHI7Ci0KLSAgICBIUkVTVUxU
IGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUdlb21ldHJ5R3Jv
dXAoZmlsbE1vZGUsIG1fZ2VvbWV0cmllcy5kYXRhKCksIG1fZ2VvbWV0cmllcy5zaXplKCksICZt
X3BhdGgpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgQVNTRVJU
KHJlZkNvdW50KGdlb21ldHJ5KSA9PSBiZWZvcmUgKyAxKTsKLX0KLQotdm9pZCBQYXRoOjpjcmVh
dGVHZW9tZXRyeVdpdGhGaWxsTW9kZShXaW5kUnVsZSB3ZWJraXRGaWxsTW9kZSwgQ09NUHRyPElE
MkQxR2VvbWV0cnlHcm91cD4mIHBhdGgpIGNvbnN0Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9w
YXRoKTsKLQotICAgIGF1dG8gZmlsbE1vZGUgPSAod2Via2l0RmlsbE1vZGUgPT0gV2luZFJ1bGU6
OkV2ZW5PZGQpID8gRDJEMV9GSUxMX01PREVfQUxURVJOQVRFIDogRDJEMV9GSUxMX01PREVfV0lO
RElORzsKLQotICAgIGlmIChmaWxsTW9kZSA9PSBtX3BhdGgtPkdldEZpbGxNb2RlKCkpIHsKLSAg
ICAgICAgcGF0aCA9IG1fcGF0aDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVuc2ln
bmVkIGdlb21ldHJ5Q291bnQgPSBtX3BhdGgtPkdldFNvdXJjZUdlb21ldHJ5Q291bnQoKTsKLQot
ICAgIEFTU0VSVChtX2dlb21ldHJpZXMuc2l6ZSgpID09IGdlb21ldHJ5Q291bnQpOwotCi0gICAg
SFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVHZW9t
ZXRyeUdyb3VwKGZpbGxNb2RlLCBjb25zdF9jYXN0PElEMkQxR2VvbWV0cnkqKj4obV9nZW9tZXRy
aWVzLmRhdGEoKSksIG1fZ2VvbWV0cmllcy5zaXplKCksICZwYXRoKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICBBU1NFUlQocmVmQ291bnQocGF0aC5nZXQoKSkgPT0g
MSk7Ci19Ci0KLVBhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3RoZXIpCi17Ci0jaWYgQVNTRVJUX0VO
QUJMRUQKLSAgICB1bnNpZ25lZCBwYXRoQ291bnQgPSByZWZDb3VudChvdGhlci5tX3BhdGguZ2V0
KCkpOwotICAgIHVuc2lnbmVkIGFjdGl2ZVBhdGhDb3VudCA9IHJlZkNvdW50KG90aGVyLm1fYWN0
aXZlUGF0aC5nZXQoKSk7Ci0jZW5kaWYKLSAgICBtX3BhdGggPSBvdGhlci5tX3BhdGg7Ci0gICAg
bV9hY3RpdmVQYXRoID0gb3RoZXIubV9hY3RpdmVQYXRoOwotICAgIG1fZ2VvbWV0cmllcyA9IG90
aGVyLm1fZ2VvbWV0cmllczsKLSAgICBmb3IgKGF1dG8qIGdlb21ldHJ5IDogbV9nZW9tZXRyaWVz
KQotICAgICAgICBnZW9tZXRyeS0+QWRkUmVmKCk7Ci0KLSAgICBBU1NFUlQoIW1fcGF0aCB8fCBy
ZWZDb3VudChtX3BhdGguZ2V0KCkpID09IHBhdGhDb3VudCArIDEpOwotICAgIEFTU0VSVCghbV9h
Y3RpdmVQYXRoIHx8IHJlZkNvdW50KG1fYWN0aXZlUGF0aC5nZXQoKSkgPT0gYWN0aXZlUGF0aENv
dW50ICsgMSk7Ci19Ci0gICAgCi1QYXRoOjpQYXRoKFBhdGgmJiBvdGhlcikKLXsKLSNpZiBBU1NF
UlRfRU5BQkxFRAotICAgIHVuc2lnbmVkIHBhdGhDb3VudCA9IHJlZkNvdW50KG90aGVyLm1fcGF0
aC5nZXQoKSk7Ci0gICAgdW5zaWduZWQgYWN0aXZlUGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIu
bV9hY3RpdmVQYXRoLmdldCgpKTsKLSNlbmRpZgotICAgIG1fcGF0aCA9IFdURk1vdmUob3RoZXIu
bV9wYXRoKTsKLSAgICBtX2FjdGl2ZVBhdGggPSBXVEZNb3ZlKG90aGVyLm1fYWN0aXZlUGF0aCk7
Ci0gICAgbV9nZW9tZXRyaWVzID0gV1RGTW92ZShvdGhlci5tX2dlb21ldHJpZXMpOwotCi0gICAg
QVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkgPT0gcGF0aENvdW50KTsKLSAgICBBU1NFUlQo
cmVmQ291bnQobV9hY3RpdmVQYXRoLmdldCgpKSA9PSBhY3RpdmVQYXRoQ291bnQpOwotfQotCi1Q
YXRoJiBQYXRoOjpvcGVyYXRvcj0oY29uc3QgUGF0aCYgb3RoZXIpCi17Ci0gICAgaWYgKHRoaXMg
PT0gJm90aGVyKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAg
ICB1bnNpZ25lZCBwYXRoQ291bnQgPSByZWZDb3VudChvdGhlci5tX3BhdGguZ2V0KCkpOwotICAg
IHVuc2lnbmVkIGFjdGl2ZVBhdGhDb3VudCA9IHJlZkNvdW50KG90aGVyLm1fYWN0aXZlUGF0aC5n
ZXQoKSk7Ci0jZW5kaWYKLSAgICBtX3BhdGggPSBvdGhlci5tX3BhdGg7Ci0gICAgbV9hY3RpdmVQ
YXRoID0gb3RoZXIubV9hY3RpdmVQYXRoOwotICAgIG1fZ2VvbWV0cmllcyA9IG90aGVyLm1fZ2Vv
bWV0cmllczsKLSAgICBmb3IgKGF1dG8qIGdlb21ldHJ5IDogbV9nZW9tZXRyaWVzKQotICAgICAg
ICBnZW9tZXRyeS0+QWRkUmVmKCk7Ci0KLSAgICBBU1NFUlQoIW1fcGF0aCB8fCByZWZDb3VudCht
X3BhdGguZ2V0KCkpID09IHBhdGhDb3VudCArIDEpOwotICAgIEFTU0VSVCghbV9hY3RpdmVQYXRo
IHx8IHJlZkNvdW50KG1fYWN0aXZlUGF0aC5nZXQoKSkgPT0gYWN0aXZlUGF0aENvdW50ICsgMSk7
Ci0KLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVBhdGgmIFBhdGg6Om9wZXJhdG9yPShQYXRoJiYg
b3RoZXIpCi17Ci0gICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAgICByZXR1cm4gKnRoaXM7
Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHVuc2lnbmVkIHBhdGhDb3VudCA9IHJlZkNvdW50
KG90aGVyLm1fcGF0aC5nZXQoKSk7Ci0gICAgdW5zaWduZWQgYWN0aXZlUGF0aENvdW50ID0gcmVm
Q291bnQob3RoZXIubV9hY3RpdmVQYXRoLmdldCgpKTsKLSNlbmRpZgotICAgIG1fcGF0aCA9IFdU
Rk1vdmUob3RoZXIubV9wYXRoKTsKLSAgICBtX2FjdGl2ZVBhdGggPSBXVEZNb3ZlKG90aGVyLm1f
YWN0aXZlUGF0aCk7Ci0gICAgbV9nZW9tZXRyaWVzID0gV1RGTW92ZShvdGhlci5tX2dlb21ldHJp
ZXMpOwotCi0gICAgQVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkgPT0gcGF0aENvdW50KTsK
LSAgICBBU1NFUlQocmVmQ291bnQobV9hY3RpdmVQYXRoLmdldCgpKSA9PSBhY3RpdmVQYXRoQ291
bnQpOwotCi0gICAgcmV0dXJuICp0aGlzOwotfQotCi1ib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAotewotICAgIGlmIChpc051
bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFmYXN0Qm91bmRpbmdSZWN0
KCkuY29udGFpbnMocG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBCT09MIGNv
bnRhaW5zOwotICAgIGlmICghU1VDQ0VFREVEKG1fcGF0aC0+RmlsbENvbnRhaW5zUG9pbnQocG9p
bnQsIG51bGxwdHIsICZjb250YWlucykpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gY29udGFpbnM7Ci19Ci0KLWJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiBz
dHJva2VTdHlsZUFwcGxpZXIpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHN0cm9rZVN0eWxlQXBwbGll
cik7Ci0KLSAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hDb250ZXh0RDJEKHNjcmF0Y2hSZW5kZXJUYXJn
ZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHQoJnNjcmF0
Y2hDb250ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBl
OjpHUFVNZW1vcnkpOwotICAgIHN0cm9rZVN0eWxlQXBwbGllcihzY3JhdGNoQ29udGV4dCk7Ci0K
LSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHVuc2lnbmVkIGJlZm9yZSA9IHJlZkNvdW50KG1fcGF0
aC5nZXQoKSk7Ci0jZW5kaWYKLQotICAgIEJPT0wgY29udGFpbnNQb2ludCA9IGZhbHNlOwotICAg
IEhSRVNVTFQgaHIgPSBtX3BhdGgtPlN0cm9rZUNvbnRhaW5zUG9pbnQocG9pbnQsIHNjcmF0Y2hD
b250ZXh0LnN0cm9rZVRoaWNrbmVzcygpLCBzY3JhdGNoQ29udGV4dC5wbGF0Zm9ybVN0cm9rZVN0
eWxlKCksIG51bGxwdHIsIDEuMGYsICZjb250YWluc1BvaW50KTsKLSAgICBpZiAoIVNVQ0NFRURF
RChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVChyZWZDb3VudChtX3Bh
dGguZ2V0KCkpID09IGJlZm9yZSk7Ci0gICAgcmV0dXJuIGNvbnRhaW5zUG9pbnQ7Ci19Ci0KLXZv
aWQgUGF0aDo6Y2xvc2VBbnlPcGVuR2VvbWV0cmllcyh1bnNpZ25lZCBmaWd1cmVFbmRTdHlsZSkg
Y29uc3QKLXsKLSAgICBpZiAobV9maWd1cmVJc09wZW5lZCkgewotICAgICAgICBBU1NFUlQobV9h
Y3RpdmVQYXRoKTsKLQotICAgICAgICBhdXRvIGVuZFN0eWxlID0gc3RhdGljX2Nhc3Q8RDJEMV9G
SUdVUkVfRU5EPihmaWd1cmVFbmRTdHlsZSk7Ci0gICAgICAgIG1fYWN0aXZlUGF0aC0+RW5kRmln
dXJlKGVuZFN0eWxlKTsKLSAgICAgICAgbV9maWd1cmVJc09wZW5lZCA9IGZhbHNlOwotCi0gICAg
ICAgIEhSRVNVTFQgaHIgPSBtX2FjdGl2ZVBhdGgtPkNsb3NlKCk7Ci0gICAgICAgIEFTU0VSVChT
VUNDRUVERUQoaHIpKTsKLSAgICB9Ci0KLSAgICBtX2FjdGl2ZVBhdGggPSBudWxscHRyOwotfQot
Ci12b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgdHJh
bnNmb3JtKEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAxLCBzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCkpKTsKLX0KLQotdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0pCi17Ci0gICAgaWYgKHRyYW5zZm9ybS5pc0lkZW50aXR5KCkgfHwgaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9hY3RpdmVQYXRoKQotICAgICAgICBj
bG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9PUEVOKTsKLQotI2lmIEFTU0VS
VF9FTkFCTEVECi0gICAgdW5zaWduZWQgYmVmb3JlID0gcmVmQ291bnQobV9wYXRoLmdldCgpKTsK
LSNlbmRpZgotCi0gICAgQ09NUHRyPElEMkQxVHJhbnNmb3JtZWRHZW9tZXRyeT4gdHJhbnNmb3Jt
ZWRQYXRoOwotICAgIGlmICghU1VDQ0VFREVEKEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9y
eSgpLT5DcmVhdGVUcmFuc2Zvcm1lZEdlb21ldHJ5KG1fcGF0aC5nZXQoKSwgdHJhbnNmb3JtLCAm
dHJhbnNmb3JtZWRQYXRoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChyZWZDb3Vu
dChtX3BhdGguZ2V0KCkpID09IGJlZm9yZSk7Ci0gICAgQVNTRVJUKHJlZkNvdW50KHRyYW5zZm9y
bWVkUGF0aC5nZXQoKSkgPT0gMSk7Ci0KLSAgICBhdXRvIGZpbGxNb2RlID0gbV9wYXRoLT5HZXRG
aWxsTW9kZSgpOwotCi0gICAgbV9wYXRoID0gbnVsbHB0cjsKLQotICAgIGNsZWFyR2VvbWV0cmll
cygpOwotCi0gICAgdHJhbnNmb3JtZWRQYXRoLT5BZGRSZWYoKTsKLSAgICBtX2dlb21ldHJpZXMu
YXBwZW5kKHRyYW5zZm9ybWVkUGF0aC5nZXQoKSk7Ci0KLSAgICBIUkVTVUxUIGhyID0gR3JhcGhp
Y3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUdlb21ldHJ5R3JvdXAoZmlsbE1vZGUs
IG1fZ2VvbWV0cmllcy5kYXRhKCksIG1fZ2VvbWV0cmllcy5zaXplKCksICZtX3BhdGgpOwotICAg
IFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIEFTU0VSVChyZWZDb3VudChtX3Bh
dGguZ2V0KCkpID09IDEpOwotfQotCi1GbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0U2xvd0Nh
c2UoKSBjb25zdAotewotICAgIEQyRDFfUkVDVF9GIGJvdW5kcyA9IHsgfTsKLSAgICBpZiAoIVNV
Q0NFRURFRChtX3BhdGgtPkdldEJvdW5kcyhudWxscHRyLCAmYm91bmRzKSkpCi0gICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKLQotICAgIHJldHVybiBib3VuZHM7Ci19Ci0KLUZsb2F0UmVjdCBQ
YXRoOjpmYXN0Qm91bmRpbmdSZWN0U2xvd0Nhc2UoKSBjb25zdAotewotICAgIEQyRDFfUkVDVF9G
IGJvdW5kcyA9IHsgfTsKLSAgICBpZiAoIVNVQ0NFRURFRChtX3BhdGgtPkdldEJvdW5kcyhudWxs
cHRyLCAmYm91bmRzKSkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIHJldHVy
biBib3VuZHM7Ci19Ci0KLUZsb2F0UmVjdCBQYXRoOjpmYXN0Qm91bmRpbmdSZWN0Rm9yU3Ryb2tl
KGNvbnN0IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpIGNvbnN0Ci17
Ci0gICAgaWYgKGlzTnVsbCgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBm
bG9hdCB0b2xlcmFuY2UgPSAxMDsKLQotICAgIGF1dG8qIHN0cm9rZVN0eWxlID0gY29uc3RfY2Fz
dDxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCY+KHBsYXRmb3JtQ29udGV4dCkuc3Ryb2tlU3R5bGUo
KTsKLQotICAgIEQyRDFfUkVDVF9GIGJvdW5kcyA9IHsgfTsKLSAgICBpZiAoIVNVQ0NFRURFRCht
X3BhdGgtPkdldFdpZGVuZWRCb3VuZHMocGxhdGZvcm1Db250ZXh0LnN0cm9rZVRoaWNrbmVzcygp
LCBzdHJva2VTdHlsZSwgbnVsbHB0ciwgdG9sZXJhbmNlLCAmYm91bmRzKSkpCi0gICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKLQotICAgIHJldHVybiBib3VuZHM7Ci19Ci0KLUZsb2F0UmVjdCBQ
YXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRl
eHQmKT4mIHN0cm9rZVN0eWxlQXBwbGllcikgY29uc3QKLXsKLSAgICBpZiAoaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
IHNjcmF0Y2hDb250ZXh0RDJEKHNjcmF0Y2hSZW5kZXJUYXJnZXQoKSk7Ci0gICAgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHQoJnNjcmF0Y2hDb250ZXh0RDJELCBHcmFwaGlj
c0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwotCi0gICAg
aWYgKHN0cm9rZVN0eWxlQXBwbGllcikKLSAgICAgICAgc3Ryb2tlU3R5bGVBcHBsaWVyKHNjcmF0
Y2hDb250ZXh0KTsKLQotICAgIHJldHVybiBmYXN0Qm91bmRpbmdSZWN0Rm9yU3Ryb2tlKHNjcmF0
Y2hDb250ZXh0RDJEKTsKLX0KLQotdm9pZCBQYXRoOjpvcGVuRmlndXJlQXRDdXJyZW50UG9pbnRJ
Zk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKG1fZmlndXJlSXNPcGVuZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghbV9hY3RpdmVQYXRoKSB7Ci0gICAgICAgIENPTVB0cjxJRDJEMVBhdGhH
ZW9tZXRyeT4gYWN0aXZlUGF0aEdlb21ldHJ5OwotICAgICAgICBHcmFwaGljc0NvbnRleHQ6OnN5
c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUGF0aEdlb21ldHJ5KCZhY3RpdmVQYXRoR2VvbWV0cnkpOwot
ICAgICAgICBIUkVTVUxUIGhyID0gYWN0aXZlUGF0aEdlb21ldHJ5LT5PcGVuKCZtX2FjdGl2ZVBh
dGgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgYXBw
ZW5kR2VvbWV0cnkoYWN0aXZlUGF0aEdlb21ldHJ5LmxlYWtSZWYoKSk7Ci0gICAgICAgIEFTU0VS
VChyZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0KCkpID09IDEpOwotICAgIH0KLQotICAgIG1fYWN0
aXZlUGF0aC0+U2V0RmlsbE1vZGUoRDJEMV9GSUxMX01PREVfV0lORElORyk7Ci0gICAgbV9hY3Rp
dmVQYXRoLT5CZWdpbkZpZ3VyZShjdXJyZW50UG9pbnQoKSwgRDJEMV9GSUdVUkVfQkVHSU5fRklM
TEVEKTsKLSAgICBtX2ZpZ3VyZUlzT3BlbmVkID0gdHJ1ZTsKLX0KLQotdm9pZCBQYXRoOjptb3Zl
VG9TbG93Q2FzZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLXsKLSAgICBpZiAobV9hY3RpdmVQ
YXRoKQotICAgICAgICBjbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9PUEVO
KTsKLQotICAgIENPTVB0cjxJRDJEMVBhdGhHZW9tZXRyeT4gYWN0aXZlUGF0aEdlb21ldHJ5Owot
ICAgIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVQYXRoR2VvbWV0cnko
JmFjdGl2ZVBhdGhHZW9tZXRyeSk7Ci0KLSAgICBpZiAoIVNVQ0NFRURFRChhY3RpdmVQYXRoR2Vv
bWV0cnktPk9wZW4oJm1fYWN0aXZlUGF0aCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhcHBl
bmRHZW9tZXRyeShhY3RpdmVQYXRoR2VvbWV0cnkubGVha1JlZigpKTsKLQotICAgIEFTU0VSVChy
ZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0KCkpID09IDEpOwotCi0gICAgbV9hY3RpdmVQYXRoLT5T
ZXRGaWxsTW9kZShEMkQxX0ZJTExfTU9ERV9XSU5ESU5HKTsKLSAgICBtX2FjdGl2ZVBhdGgtPkJl
Z2luRmlndXJlKHBvaW50LCBEMkQxX0ZJR1VSRV9CRUdJTl9GSUxMRUQpOwotICAgIG1fZmlndXJl
SXNPcGVuZWQgPSB0cnVlOwotfQotCi12b2lkIFBhdGg6OmFkZExpbmVUb1Nsb3dDYXNlKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIG9wZW5GaWd1cmVBdEN1cnJlbnRQb2ludElmTmVj
ZXNzYXJ5KCk7Ci0gICAgbV9hY3RpdmVQYXRoLT5BZGRMaW5lKHBvaW50KTsKLX0KLQotdm9pZCBQ
YXRoOjphZGRRdWFkQ3VydmVUb1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmIGNwLCBjb25zdCBG
bG9hdFBvaW50JiBwKQotewotICAgIG9wZW5GaWd1cmVBdEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5
KCk7Ci0gICAgbV9hY3RpdmVQYXRoLT5BZGRRdWFkcmF0aWNCZXppZXIoRDJEMTo6UXVhZHJhdGlj
QmV6aWVyU2VnbWVudChjcCwgcCkpOwotfQotCi12b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG9T
bG93Q2FzZShjb25zdCBGbG9hdFBvaW50JiBjcDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29u
c3QgRmxvYXRQb2ludCYgcCkKLXsKLSAgICBvcGVuRmlndXJlQXRDdXJyZW50UG9pbnRJZk5lY2Vz
c2FyeSgpOwotICAgIG1fYWN0aXZlUGF0aC0+QWRkQmV6aWVyKEQyRDE6OkJlemllclNlZ21lbnQo
Y3AxLCBjcDIsIHApKTsKLX0KLQotdm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50
JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHJhZGl1cykKLXsKLSAgICBGbG9hdFBv
aW50IHAwID0gY3VycmVudFBvaW50KCk7Ci0KLSAgICBpZiAocDEgPT0gcDAgfHwgcDEgPT0gcDIg
fHwgV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHJhZGl1cywgMC4wZikpCi0gICAgICAgIHJldHVy
biBhZGRMaW5lVG8ocDEpOwotCi0gICAgZmxvYXQgZGlyZWN0aW9uID0gKHAyLngoKSAtIHAxLngo
KSkgKiAocDAueSgpIC0gcDEueSgpKSArIChwMi55KCkgLSBwMS55KCkpICogKHAxLngoKSAtIHAw
LngoKSk7Ci0gICAgaWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChkaXJlY3Rpb24sIDAuMGYp
KQotICAgICAgICByZXR1cm4gYWRkTGluZVRvKHAxKTsKLQotICAgIGF1dG8gYTIgPSB0b0Zsb2F0
UG9pbnQocDAgLSBwMSkubGVuZ3RoU3F1YXJlZCgpOwotICAgIGF1dG8gYjIgPSB0b0Zsb2F0UG9p
bnQocDEgLSBwMikubGVuZ3RoU3F1YXJlZCgpOwotICAgIGF1dG8gYzIgPSB0b0Zsb2F0UG9pbnQo
cDAgLSBwMikubGVuZ3RoU3F1YXJlZCgpOwotCi0gICAgZG91YmxlIGNvc3ggPSAoYTIgKyBiMiAt
IGMyKSAvICgyLjAgKiBzdGQ6OnNxcnQoYTIgKiBiMikpOwotICAgIGRvdWJsZSBzaW54ID0gc3Rk
OjpzcXJ0KDEuMCAtIGNvc3ggKiBjb3N4KTsKLSAgICBkb3VibGUgZCA9IHJhZGl1cyAvICgoMSAt
IGNvc3gpIC8gc2lueCk7Ci0KLSAgICBhdXRvIGFuID0gdG9GbG9hdFBvaW50KHAxIC0gcDApLnNj
YWxlZCgxLjAgLyBzdGQ6OnNxcnQoYTIpKTsKLSAgICBhdXRvIGJuID0gdG9GbG9hdFBvaW50KHAx
IC0gcDIpLnNjYWxlZCgxLjAgLyBzdGQ6OnNxcnQoYjIpKTsKLQotICAgIGF1dG8gc3RhcnRQb2lu
dCA9IHRvRmxvYXRQb2ludChwMSAtIGFuLnNjYWxlZChkKSk7Ci0gICAgYXV0byBwNCA9IHRvRmxv
YXRQb2ludChwMSAtIGJuLnNjYWxlZChkKSk7Ci0KLSAgICBib29sIGFudGljbG9ja3dpc2UgPSAo
ZGlyZWN0aW9uIDwgMCk7Ci0gICAgYW4uc2NhbGUocmFkaXVzICogKGFudGljbG9ja3dpc2UgPyAx
IDogLTEpKTsKLQotICAgIEZsb2F0UG9pbnQgY2VudGVyKHN0YXJ0UG9pbnQueCgpICsgYW4ueSgp
LCBzdGFydFBvaW50LnkoKSAtIGFuLngoKSk7Ci0KLSAgICBkb3VibGUgYW5nbGUwID0gYXRhbjIo
c3RhcnRQb2ludC55KCkgLSBjZW50ZXIueSgpLCBzdGFydFBvaW50LngoKSAtIGNlbnRlci54KCkp
OwotICAgIGRvdWJsZSBhbmdsZTEgPSBhdGFuMihwNC55KCkgLSBjZW50ZXIueSgpLCBwNC54KCkg
LSBjZW50ZXIueCgpKTsKLQotICAgIG9wZW5GaWd1cmVBdEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5
KCk7Ci0gICAgYWRkTGluZVRvKHN0YXJ0UG9pbnQpOwotICAgIGFkZEFyYyhjZW50ZXIsIHJhZGl1
cywgYW5nbGUwLCBhbmdsZTEsIGFudGljbG9ja3dpc2UpOwotfQotCi1zdGF0aWMgYm9vbCBlcXVh
bFJhZGl1c1dpZHRocyhjb25zdCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0
U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywg
Y29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdodFJhZGl1cykKLXsKLSAgICByZXR1cm4gdG9wTGVm
dFJhZGl1cy53aWR0aCgpID09IHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkKLSAgICAgICAgJiYgdG9w
UmlnaHRSYWRpdXMud2lkdGgoKSA9PSBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCkKLSAgICAgICAg
JiYgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpID09IGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCk7
Ci19Ci0KLXN0YXRpYyBib29sIGVxdWFsUmFkaXVzSGVpZ2h0cyhjb25zdCBGbG9hdFNpemUmIHRv
cExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0
U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdodFJhZGl1
cykKLXsKLSAgICByZXR1cm4gdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSA9PSBib3R0b21MZWZ0UmFk
aXVzLmhlaWdodCgpCi0gICAgICAgICYmIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkgPT0gdG9w
UmlnaHRSYWRpdXMuaGVpZ2h0KCkKLSAgICAgICAgJiYgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkg
PT0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCk7Ci19Ci0KLXZvaWQgUGF0aDo6cGxhdGZvcm1B
ZGRQYXRoRm9yUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNp
emUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0
IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdo
dFJhZGl1cykKLXsKLSAgICBib29sIGVxdWFsV2lkdGhzID0gZXF1YWxSYWRpdXNXaWR0aHModG9w
TGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0
UmFkaXVzKTsKLSAgICBib29sIGVxdWFsSGVpZ2h0cyA9IGVxdWFsUmFkaXVzSGVpZ2h0cyh0b3BM
ZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRS
YWRpdXMpOwotCi0gICAgaWYgKGVxdWFsV2lkdGhzICYmIGVxdWFsSGVpZ2h0cykgewotICAgICAg
ICAvLyBFbnN1cmUgdGhhdCBDRyBjYW4gcmVuZGVyIHRoZSByb3VuZGVkIHJlY3QuCi0gICAgICAg
IGZsb2F0IHJhZGl1c1dpZHRoID0gdG9wTGVmdFJhZGl1cy53aWR0aCgpOwotICAgICAgICBmbG9h
dCByYWRpdXNIZWlnaHQgPSB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpOwotICAgICAgICBhdXRvIHJl
Y3RUb0RyYXcgPSBEMkQxOjpSZWN0RihyZWN0LngoKSwgcmVjdC55KCksIHJlY3QubWF4WCgpLCBy
ZWN0Lm1heFkoKSk7Ci0KLSAgICAgICAgQ09NUHRyPElEMkQxUm91bmRlZFJlY3RhbmdsZUdlb21l
dHJ5PiByb3VuZFJlY3Q7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5
c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUm91bmRlZFJlY3RhbmdsZUdlb21ldHJ5KEQyRDE6OlJvdW5k
ZWRSZWN0KHJlY3RUb0RyYXcsIHJhZGl1c1dpZHRoLCByYWRpdXNIZWlnaHQpLCAmcm91bmRSZWN0
KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIGFwcGVu
ZEdlb21ldHJ5KHJvdW5kUmVjdC5nZXQoKSk7Ci0gICAgICAgIEFTU0VSVChyZWZDb3VudChyb3Vu
ZFJlY3QuZ2V0KCkpID09IDIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYWRkQmV6
aWVyc0ZvclJvdW5kZWRSZWN0KHJlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBi
b3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7Ci19Ci0KLXZvaWQgUGF0aDo6Y2xv
c2VTdWJwYXRoKCkKLXsKLSAgICBpZiAoaXNOdWxsKCkpIHsKLSAgICAgICAgbV9hY3RpdmVQYXRo
ID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9hY3RpdmVQ
YXRoKSB7Ci0gICAgICAgIEFTU0VSVCghbV9maWd1cmVJc09wZW5lZCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBjbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9D
TE9TRUQpOwotfQotCi1zdGF0aWMgRmxvYXRQb2ludCBhcmNTdGFydChjb25zdCBGbG9hdFBvaW50
JiBjZW50ZXIsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSkKLXsKLSAgICBGbG9hdFBv
aW50IHN0YXJ0aW5nUG9pbnQgPSBjZW50ZXI7Ci0gICAgZmxvYXQgc3RhcnRYID0gcmFkaXVzICog
c3RkOjpjb3Moc3RhcnRBbmdsZSk7Ci0gICAgZmxvYXQgc3RhcnRZID0gcmFkaXVzICogc3RkOjpz
aW4oc3RhcnRBbmdsZSk7Ci0gICAgc3RhcnRpbmdQb2ludC5tb3ZlKHN0YXJ0WCwgc3RhcnRZKTsK
LSAgICByZXR1cm4gc3RhcnRpbmdQb2ludDsKLX0KLQotY29uc3QgZmxvYXQgdHdvUGkgPSAyLjBm
ICogcGlGbG9hdDsKLQotc3RhdGljIHZvaWQgZHJhd0FyY1NlY3Rpb24oSUQyRDFHZW9tZXRyeVNp
bmsqIHNpbmssIGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQgcmFkaXVzLCBmbG9hdCBz
dGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBhbnRpY2xvY2t3aXNlKQotewotICAgIC8v
IERpcmVjdDJEIHdhbnRzIHVzIHRvIHNwZWNpZnkgdGhlIGVuZCBwb2ludCBvZiB0aGUgYXJjLCBu
b3QgdGhlIGNlbnRlci4gSXQgd2lsbCBiZSBkcmF3biBmcm9tCi0gICAgLy8gd2hhdGV2ZXIgdGhl
IGN1cnJlbnQgcG9pbnQgaW4gdGhlICdtX2FjdGl2ZVBhdGgnIGlzLgotICAgIEZsb2F0UG9pbnQg
ZW5kUG9pbnQgPSBjZW50ZXI7Ci0gICAgZmxvYXQgZW5kWCA9IHJhZGl1cyAqIHN0ZDo6Y29zKGVu
ZEFuZ2xlKTsKLSAgICBmbG9hdCBlbmRZID0gcmFkaXVzICogc3RkOjpzaW4oZW5kQW5nbGUpOwot
ICAgIGVuZFBvaW50Lm1vdmUoZW5kWCwgZW5kWSk7Ci0KLSAgICBEMkQxX1NXRUVQX0RJUkVDVElP
TiBkaXJlY3Rpb24gPSBhbnRpY2xvY2t3aXNlID8gRDJEMV9TV0VFUF9ESVJFQ1RJT05fQ09VTlRF
Ul9DTE9DS1dJU0UgOiBEMkQxX1NXRUVQX0RJUkVDVElPTl9DTE9DS1dJU0U7Ci0gICAgc2luay0+
QWRkQXJjKEQyRDE6OkFyY1NlZ21lbnQoZW5kUG9pbnQsIEQyRDE6OlNpemVGKHJhZGl1cywgcmFk
aXVzKSwgMCwgZGlyZWN0aW9uLCBEMkQxX0FSQ19TSVpFX1NNQUxMKSk7Ci19Ci0KLXZvaWQgUGF0
aDo6YWRkQXJjU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyLCBmbG9hdCByYWRpdXMs
IGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IGVuZEFuZ2xlLCBib29sIGFudGljbG9ja3dpc2UpCi17
Ci0gICAgYXV0byBhcmNTdGFydFBvaW50ID0gYXJjU3RhcnQoY2VudGVyLCByYWRpdXMsIHN0YXJ0
QW5nbGUpOwotICAgIGlmICghbV9hY3RpdmVQYXRoKQotICAgICAgICBtb3ZlVG8oYXJjU3RhcnRQ
b2ludCk7Ci0gICAgZWxzZSBpZiAoIWFyZUVzc2VudGlhbGx5RXF1YWwoY3VycmVudFBvaW50KCks
IGFyY1N0YXJ0UG9pbnQpKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcmMgZGVmaW5lZCBieSB0aGUg
Y2VudGVyIGFuZCByYWRpdXMgZG9lcyBub3QgaW50ZXJzZWN0IHRoZSBjdXJyZW50IHBvc2l0aW9u
LAotICAgICAgICAvLyB3ZSBuZWVkIHRvIGRyYXcgYSBsaW5lIGZyb20gdGhlIGN1cnJlbnQgcG9z
aXRpb24gdG8gdGhlIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBhcmMuCi0gICAgICAgIGFkZExpbmVU
byhhcmNTdGFydFBvaW50KTsKLSAgICB9Ci0KLSAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVx
dWFsKHN0ZDo6YWJzKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSksIHR3b1BpKSkKLSAgICAgICAgcmV0
dXJuIGFkZEVsbGlwc2UoRmxvYXRSZWN0KGNlbnRlci54KCkgLSByYWRpdXMsIGNlbnRlci55KCkg
LSByYWRpdXMsIDIuMCAqIHJhZGl1cywgMi4wICogcmFkaXVzKSk7Ci0KLSAgICBpZiAoYW50aWNs
b2Nrd2lzZSkgewotICAgICAgICBpZiAoZW5kQW5nbGUgPiBzdGFydEFuZ2xlKSB7Ci0gICAgICAg
ICAgICBlbmRBbmdsZSAtPSB0d29QaSAqIHN0ZDo6Y2VpbCgoZW5kQW5nbGUgLSBzdGFydEFuZ2xl
KSAvIHR3b1BpKTsKLSAgICAgICAgICAgIEFTU0VSVChlbmRBbmdsZSA8PSBzdGFydEFuZ2xlKTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGFydEFuZ2xlID4gZW5kQW5n
bGUpIHsKLSAgICAgICAgICAgIHN0YXJ0QW5nbGUgLT0gdHdvUGkgKiBzdGQ6OmNlaWwoKHN0YXJ0
QW5nbGUgLSBlbmRBbmdsZSkgLyB0d29QaSk7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhcnRBbmds
ZSA8PSBlbmRBbmdsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBmbG9hdCBkZWx0
YSA9IGFudGljbG9ja3dpc2UgPyAtcGlPdmVyVHdvRmxvYXQgOiBwaU92ZXJUd29GbG9hdDsKLSAg
ICBmbG9hdCByZW1haW5pbmdBcmNBbmdsZSA9IGVuZEFuZ2xlIC0gc3RhcnRBbmdsZTsKLQotICAg
IHdoaWxlICgocmVtYWluaW5nQXJjQW5nbGUgPiAwICYmIHJlbWFpbmluZ0FyY0FuZ2xlID4gZGVs
dGEpIHx8IChyZW1haW5pbmdBcmNBbmdsZSA8IDAgJiYgcmVtYWluaW5nQXJjQW5nbGUgPCBkZWx0
YSkpIHsKLSAgICAgICAgY29uc3QgZG91YmxlIGN1cnJlbnRFbmRBbmdsZSA9IHN0YXJ0QW5nbGUg
KyBkZWx0YTsKLSAgICAgICAgZHJhd0FyY1NlY3Rpb24obV9hY3RpdmVQYXRoLmdldCgpLCBjZW50
ZXIsIHJhZGl1cywgc3RhcnRBbmdsZSwgY3VycmVudEVuZEFuZ2xlLCBhbnRpY2xvY2t3aXNlKTsK
LSAgICAgICAgc3RhcnRBbmdsZSA9IGN1cnJlbnRFbmRBbmdsZTsKLSAgICAgICAgcmVtYWluaW5n
QXJjQW5nbGUgLT0gZGVsdGE7Ci0gICAgfQotCi0gICAgLy8gSGFuZGxlIGFueSByZW1haW5pbmcg
cGFydCBvZiB0aGUgYXJjOgotICAgIGlmIChzdGQ6OmFicyhyZW1haW5pbmdBcmNBbmdsZSkgPiAx
ZS02KQotICAgICAgICBkcmF3QXJjU2VjdGlvbihtX2FjdGl2ZVBhdGguZ2V0KCksIGNlbnRlciwg
cmFkaXVzLCBzdGFydEFuZ2xlLCBzdGFydEFuZ2xlICsgcmVtYWluaW5nQXJjQW5nbGUsIGFudGlj
bG9ja3dpc2UpOwotfQotCi12b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQot
ewotICAgIGlmICghbV9hY3RpdmVQYXRoKQotICAgICAgICBtb3ZlVG8oci5sb2NhdGlvbigpKTsK
LQotICAgIENPTVB0cjxJRDJEMVJlY3RhbmdsZUdlb21ldHJ5PiByZWN0YW5nbGU7Ci0gICAgSFJF
U1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVSZWN0YW5n
bGVHZW9tZXRyeShyLCAmcmVjdGFuZ2xlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQo
aHIpKTsKLSAgICBhcHBlbmRHZW9tZXRyeShyZWN0YW5nbGUuZ2V0KCkpOwotICAgIEFTU0VSVChy
ZWZDb3VudChyZWN0YW5nbGUuZ2V0KCkpID09IDIpOwotfQotCi12b2lkIFBhdGg6OmFkZEVsbGlw
c2UoRmxvYXRQb2ludCBwLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZLCBmbG9hdCByb3Rh
dGlvbiwgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJvb2wgYW50aWNsb2Nrd2lz
ZSkKLXsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwotICAgIHRyYW5zZm9ybS50cmFu
c2xhdGUocC54KCksIHAueSgpKS5yb3RhdGUocmFkMmRlZyhyb3RhdGlvbikpLnNjYWxlKHJhZGl1
c1gsIHJhZGl1c1kpOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQYXRoOjph
ZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcikKLXsKLSAgICBpZiAoIW1fYWN0aXZlUGF0aCkK
LSAgICAgICAgbW92ZVRvKHIubG9jYXRpb24oKSk7Ci0KLSAgICBDT01QdHI8SUQyRDFFbGxpcHNl
R2VvbWV0cnk+IGVsbGlwc2U7Ci0gICAgLy8gTm90ZTogVGhlIHJhZGlpIG9mIHRoZSBlbGxpcHNl
IGNvbnRhaW5lZCB3aXRoaW4gYSByZWN0YW5nZSBhcmUgaGFsZiB0aGUgd2lkdGggYW5kIGhlaWdo
dCBvZiB0aGUgcmVjdC4KLSAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1G
YWN0b3J5KCktPkNyZWF0ZUVsbGlwc2VHZW9tZXRyeShEMkQxOjpFbGxpcHNlKHIuY2VudGVyKCks
IDAuNSAqIHIud2lkdGgoKSwgMC41ICogci5oZWlnaHQoKSksICZlbGxpcHNlKTsKLSAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICBhcHBlbmRHZW9tZXRyeShlbGxpcHNlLmdl
dCgpKTsKLSAgICBBU1NFUlQocmVmQ291bnQoZWxsaXBzZS5nZXQoKSkgPT0gMik7Ci19Ci0KLXZv
aWQgUGF0aDo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKLXsKLSAgICBpZiAoIXBhdGgucGxhdGZvcm1QYXRoKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghdHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0KLXZvaWQgUGF0aDo6Y2xlYXIoKQot
ewotICAgIGlmIChpc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYXRoID0gbnVs
bHB0cjsKLSAgICBtX2FjdGl2ZVBhdGggPSBudWxscHRyOwotICAgIGNsZWFyR2VvbWV0cmllcygp
OwotfQotCi1ib29sIFBhdGg6OmlzRW1wdHlTbG93Q2FzZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X3BhdGgtPkdldFNvdXJjZUdlb21ldHJ5Q291bnQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBBU1NFUlQobV9wYXRoLT5HZXRTb3VyY2VHZW9tZXRyeUNvdW50KCkgPT0gbV9nZW9tZXRy
aWVzLnNpemUoKSk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUZsb2F0UG9pbnQgUGF0aDo6
Y3VycmVudFBvaW50U2xvd0Nhc2UoKSBjb25zdAotewotICAgIGZsb2F0IGxlbmd0aCA9IDA7Ci0g
ICAgSFJFU1VMVCBociA9IG1fcGF0aC0+Q29tcHV0ZUxlbmd0aChudWxscHRyLCAmbGVuZ3RoKTsK
LSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7Ci0K
LSAgICBEMkQxX1BPSU5UXzJGIHBvaW50ID0geyB9OwotICAgIEQyRDFfUE9JTlRfMkYgdGFuZ2Vu
dCA9IHsgfTsKLSAgICBociA9IG1fcGF0aC0+Q29tcHV0ZVBvaW50QXRMZW5ndGgobGVuZ3RoLCBu
dWxscHRyLCAmcG9pbnQsICZ0YW5nZW50KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgIHJldHVybiBGbG9hdFBvaW50KCk7Ci0KLSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLWZsb2F0
IFBhdGg6Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgZmxvYXQgbGVuZ3RoID0gMDsKLSAgICBIUkVT
VUxUIGhyID0gbV9wYXRoLT5Db21wdXRlTGVuZ3RoKG51bGxwdHIsICZsZW5ndGgpOwotICAgIGlm
ICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbGVuZ3Ro
OwotfQotCi12b2lkIFBhdGg6OmFwcGx5U2xvd0Nhc2UoY29uc3QgUGF0aEFwcGxpZXJGdW5jdGlv
biYpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBQYXRoOjppc051
bGwoKSBjb25zdAotewotICAgIHJldHVybiAhbV9wYXRoOwotfQotCi19Ci0KLSNlbmRpZiAvLyBV
U0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
UGF0dGVybkRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdHRlcm5EaXJlY3QyRC5jcHAJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGF0
dGVybi5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUlEMkQxQml0bWFwQnJ1c2gqIFBhdHRl
cm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGZsb2F0IGFscGhhLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW5zZm9ybWF0
aW9uKSBjb25zdAotewotICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtID0gdXNl
clNwYWNlVHJhbnNmb3JtYXRpb24gKiBtX3BhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9uOwotICAg
IGF1dG8gYml0bWFwQnJ1c2hQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwQnJ1c2hQcm9wZXJ0aWVz
KCk7Ci0gICAgYml0bWFwQnJ1c2hQcm9wZXJ0aWVzLmV4dGVuZE1vZGVYID0gbV9yZXBlYXRYID8g
RDJEMV9FWFRFTkRfTU9ERV9XUkFQIDogRDJEMV9FWFRFTkRfTU9ERV9DTEFNUDsKLSAgICBiaXRt
YXBCcnVzaFByb3BlcnRpZXMuZXh0ZW5kTW9kZVkgPSBtX3JlcGVhdFkgPyBEMkQxX0VYVEVORF9N
T0RFX1dSQVAgOiBEMkQxX0VYVEVORF9NT0RFX0NMQU1QOwotCi0gICAgYXV0byBicnVzaFByb3Bl
cnRpZXMgPSBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKTsKLSAgICBicnVzaFByb3BlcnRpZXMudHJh
bnNmb3JtID0gcGF0dGVyblRyYW5zZm9ybTsKLSAgICBicnVzaFByb3BlcnRpZXMub3BhY2l0eSA9
IGFscGhhOwotCi0gICAgYXV0byYgcGF0dGVybkltYWdlID0gdGlsZUltYWdlKCk7Ci0gICAgYXV0
byBuYXRpdmVJbWFnZSA9IHBhdHRlcm5JbWFnZS5uYXRpdmVJbWFnZSgmY29udGV4dCk7Ci0gICAg
aWYgKCFuYXRpdmVJbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHBs
YXRmb3JtQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgUkVMRUFTRV9B
U1NFUlQocGxhdGZvcm1Db250ZXh0KTsKLQotICAgIElEMkQxQml0bWFwQnJ1c2gqIHBhdHRlcm5C
cnVzaCA9IG51bGxwdHI7Ci0gICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC0+cmVuZGVy
VGFyZ2V0KCktPkNyZWF0ZUJpdG1hcEJydXNoKG5hdGl2ZUltYWdlLmdldCgpLCAmYml0bWFwQnJ1
c2hQcm9wZXJ0aWVzLCAmYnJ1c2hQcm9wZXJ0aWVzLCAmcGF0dGVybkJydXNoKTsKLSAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgcmV0dXJuIHBhdHRlcm5CcnVzaDsKLX0KLQotfQotCi0j
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9y
bUNvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3
ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29u
dGV4dERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDM5NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0KLSNpZiBVU0Uo
RElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJlY3QyRE9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJE
aXJlY3QyRFV0aWxpdGllcy5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi0vLyBFbmNhcHN1bGF0ZXMgdGhlIGFkZGl0aW9uYWwgcGFpbnRpbmcgc3RhdGUgaW5m
b3JtYXRpb24gd2Ugc3RvcmUgZm9yIGVhY2gKLS8vIHB1c2hlZCBncmFwaGljcyBzdGF0ZS4KLWNs
YXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpTdGF0ZSB7Ci1wdWJsaWM6Ci0gICAgU3RhdGUo
KSA9IGRlZmF1bHQ7Ci0KLSAgICBDT01QdHI8SUQyRDFEcmF3aW5nU3RhdGVCbG9jaz4gbV9kcmF3
aW5nU3RhdGVCbG9jazsKLSAgICBDT01QdHI8SUQyRDFMYXllcj4gbV9hY3RpdmVMYXllcjsKLSAg
ICBWZWN0b3I8RGlyZWN0MkRMYXllclR5cGU+IG1fY2xpcHM7Ci19OwotCi1QbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRDo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQoSUQyRDFSZW5kZXJUYXJnZXQqIHJl
bmRlclRhcmdldCwgRnVuY3Rpb248dm9pZCgpPiYmIHByZURyYXdIYW5kbGVyLCBGdW5jdGlvbjx2
b2lkKCk+JiYgcG9zdERyYXdIYW5kbGVyKQotICAgIDogbV9yZW5kZXJUYXJnZXQocmVuZGVyVGFy
Z2V0KQotICAgICwgbV9wcmVEcmF3SGFuZGxlcihXVEZNb3ZlKHByZURyYXdIYW5kbGVyKSkKLSAg
ICAsIG1fcG9zdERyYXdIYW5kbGVyKFdURk1vdmUocG9zdERyYXdIYW5kbGVyKSkKLXsKLSAgICBt
X3N0YXRlU3RhY2suYXBwZW5kKFN0YXRlKCkpOwotICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNr
Lmxhc3QoKTsKLQotICAgIG1fZGV2aWNlQ29udGV4dC5xdWVyeShtX3JlbmRlclRhcmdldC5nZXQo
KSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoISFtX2RldmljZUNvbnRleHQpOwotfQotCi12b2lkIFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRSZW5kZXJUYXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQq
IHJlbmRlclRhcmdldCkKLXsKLSAgICBtX3JlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDsKLQot
ICAgIG1fZGV2aWNlQ29udGV4dC5xdWVyeShtX3JlbmRlclRhcmdldC5nZXQoKSk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoISFtX2RldmljZUNvbnRleHQpOwotfQotCi1JRDJEMUxheWVyKiBQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRDo6Y2xpcExheWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdGF0
ZS0+bV9hY3RpdmVMYXllci5nZXQoKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RDo6Y2xlYXJDbGlwcyhWZWN0b3I8RGlyZWN0MkRMYXllclR5cGU+JiBjbGlwcykKLXsKLSAgICBm
b3IgKGF1dG8gY2xpcFR5cGUgPSBjbGlwcy5yYmVnaW4oKTsgY2xpcFR5cGUgIT0gY2xpcHMucmVu
ZCgpOyArK2NsaXBUeXBlKSB7Ci0gICAgICAgIGlmICgqY2xpcFR5cGUgPT0gQXhpc0FsaWduZWRD
bGlwKQotICAgICAgICAgICAgbV9yZW5kZXJUYXJnZXQtPlBvcEF4aXNBbGlnbmVkQ2xpcCgpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3JlbmRlclRhcmdldC0+UG9wTGF5ZXIoKTsKLSAg
ICB9Ci0KLSAgICBjbGlwcy5jbGVhcigpOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEOjpyZXN0b3JlKCkKLXsKLSAgICBBU1NFUlQobV9yZW5kZXJUYXJnZXQpOwotCi0gICAgLy8g
Tm8gbmVlZCB0byByZXN0b3JlIGlmIHdlIGRvbid0IGhhdmUgYSBzYXZlZCBlbGVtZW50IG9uIHRo
ZSBzdGFjay4KLSAgICBpZiAobV9zdGF0ZVN0YWNrLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhdXRvJiByZXN0b3JlU3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAg
IGlmIChyZXN0b3JlU3RhdGUubV9kcmF3aW5nU3RhdGVCbG9jaykgewotICAgICAgICBtX3JlbmRl
clRhcmdldC0+UmVzdG9yZURyYXdpbmdTdGF0ZShyZXN0b3JlU3RhdGUubV9kcmF3aW5nU3RhdGVC
bG9jay5nZXQoKSk7Ci0gICAgICAgIHJlc3RvcmVTdGF0ZS5tX2RyYXdpbmdTdGF0ZUJsb2NrID0g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBjbGVhckNsaXBzKHJlc3RvcmVTdGF0ZS5tX2NsaXBzKTsK
LQotICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgQVNTRVJUKCFtX3N0YXRlU3Rh
Y2suaXNFbXB0eSgpKTsKLSAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFjay5sYXN0KCk7Ci19Ci0K
LVBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjp+UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQoKSA9IGRl
ZmF1bHQ7Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNhdmUoKQotewotICAgIEFT
U0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpID49IDEpOyAvLyBUaGVyZSBzaG91bGQgYWx3YXlzIGJl
IG9uZSBzdGF0ZSBvbiB0aGUgc3RhY2suCi0gICAgQVNTRVJUKG1fcmVuZGVyVGFyZ2V0KTsKLQot
ICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoU3RhdGUoKSk7Ci0gICAgbV9zdGF0ZSA9ICZtX3N0YXRl
U3RhY2subGFzdCgpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNy
ZWF0ZURyYXdpbmdTdGF0ZUJsb2NrKCZtX3N0YXRlLT5tX2RyYXdpbmdTdGF0ZUJsb2NrKTsKLQot
ICAgIG1fcmVuZGVyVGFyZ2V0LT5TYXZlRHJhd2luZ1N0YXRlKG1fc3RhdGUtPm1fZHJhd2luZ1N0
YXRlQmxvY2suZ2V0KCkpOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpwdXNo
UmVuZGVyQ2xpcChEaXJlY3QyRExheWVyVHlwZSBjbGlwVHlwZSkKLXsKLSAgICBBU1NFUlQoaGFz
U2F2ZWRTdGF0ZSgpKTsKLSAgICBtX3N0YXRlLT5tX2NsaXBzLmFwcGVuZChjbGlwVHlwZSk7Ci19
Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldEFjdGl2ZUxheWVyKENPTVB0cjxJ
RDJEMUxheWVyPiYmIGxheWVyKQotewotICAgIEFTU0VSVChoYXNTYXZlZFN0YXRlKCkpOwotICAg
IG1fc3RhdGUtPm1fYWN0aXZlTGF5ZXIgPSBsYXllcjsKLX0KLQotQ09NUHRyPElEMkQxU29saWRD
b2xvckJydXNoPiBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6YnJ1c2hXaXRoQ29sb3IoY29uc3Qg
RDJEMV9DT0xPUl9GJiBjb2xvcikKLXsKLSAgICBhdXRvIGNvbG9yS2V5ID0gY29sb3JDb252ZXJ0
PFNSR0JBPHVpbnQ4X3Q+PihTUkdCQTxmbG9hdD4geyBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5i
LCBjb2xvci5hIH0pOwotCi0gICAgaWYgKCFjb2xvcktleSkgewotICAgICAgICBpZiAoIW1femVy
b0JydXNoKQotICAgICAgICAgICAgbV9yZW5kZXJUYXJnZXQtPkNyZWF0ZVNvbGlkQ29sb3JCcnVz
aChjb2xvciwgJm1femVyb0JydXNoKTsKLSAgICAgICAgcmV0dXJuIG1femVyb0JydXNoOwotICAg
IH0KLQotICAgIGlmIChjb2xvcktleSA9PSAweEZGRkZGRkZGKSB7Ci0gICAgICAgIGlmICghbV93
aGl0ZUJydXNoKQotICAgICAgICAgICAgbV9yZW5kZXJUYXJnZXQtPkNyZWF0ZVNvbGlkQ29sb3JC
cnVzaChjb2xvciwgJm1fd2hpdGVCcnVzaCk7Ci0gICAgICAgIHJldHVybiBtX3doaXRlQnJ1c2g7
Ci0gICAgfQotCi0gICAgYXV0byBleGlzdGluZ0JydXNoID0gbV9zb2xpZENvbG9yZWRCcnVzaENh
Y2hlLmVuc3VyZShjb2xvcktleSwgW3RoaXMsIGNvbG9yXSB7Ci0gICAgICAgIENPTVB0cjxJRDJE
MVNvbGlkQ29sb3JCcnVzaD4gY29sb3JCcnVzaDsKLSAgICAgICAgbV9yZW5kZXJUYXJnZXQtPkNy
ZWF0ZVNvbGlkQ29sb3JCcnVzaChjb2xvciwgJmNvbG9yQnJ1c2gpOwotICAgICAgICByZXR1cm4g
Y29sb3JCcnVzaDsKLSAgICB9KTsKLQotICAgIHJldHVybiBleGlzdGluZ0JydXNoLml0ZXJhdG9y
LT52YWx1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6cmVjb21wdXRlU3Ry
b2tlU3R5bGUoKQotewotICAgIGlmICghbV9zdHJva2VTeWxlSXNEaXJ0eSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9kMmRTdHJva2VTdHlsZSA9IG51bGxwdHI7Ci0KLSAgICBEYXNoQXJyYXkg
ZGFzaGVzOwotICAgIGZsb2F0IHBhdHRlcm5PZmZzZXQgPSAwOwotICAgIGF1dG8gZGFzaFN0eWxl
ID0gRDJEMV9EQVNIX1NUWUxFX1NPTElEOwotCi0gICAgaWYgKChtX3N0cm9rZVN0eWxlICE9IFNv
bGlkU3Ryb2tlKSAmJiAobV9zdHJva2VTdHlsZSAhPSBOb1N0cm9rZSkpIHsKLSAgICAgICAgZGFz
aFN0eWxlID0gRDJEMV9EQVNIX1NUWUxFX0NVU1RPTTsKLSAgICAgICAgcGF0dGVybk9mZnNldCA9
IG1fcGF0dGVybk9mZnNldCAvIG1fc3Ryb2tlVGhpY2tuZXNzOwotICAgICAgICBkYXNoZXMgPSBt
X2Rhc2hlczsKLQotICAgICAgICAvLyBJbiBEaXJlY3QyRCwgZGFzaGVzIGFuZCBkb3RzIGFyZSBk
ZWZpbmVkIGluIHRlcm1zIG9mIHRoZSByYXRpbyBvZiB0aGUgZGFzaCBsZW5ndGggdG8gdGhlIGxp
bmUgdGhpY2tuZXNzLgotICAgICAgICBmb3IgKGF1dG8mIGRhc2ggOiBkYXNoZXMpCi0gICAgICAg
ICAgICBkYXNoIC89IG1fc3Ryb2tlVGhpY2tuZXNzOwotICAgIH0KLQotICAgIGF1dG8gc3Ryb2tl
U3R5bGVQcm9wZXJ0aWVzID0gRDJEMTo6U3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKG1fbGluZUNhcCwg
bV9saW5lQ2FwLCBtX2xpbmVDYXAsIG1fbGluZUpvaW4sIG1fbWl0ZXJMaW1pdCwgZGFzaFN0eWxl
LCBwYXR0ZXJuT2Zmc2V0KTsKLSAgICBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+
Q3JlYXRlU3Ryb2tlU3R5bGUoJnN0cm9rZVN0eWxlUHJvcGVydGllcywgZGFzaGVzLmRhdGEoKSwg
ZGFzaGVzLnNpemUoKSwgJm1fZDJkU3Ryb2tlU3R5bGUpOwotCi0gICAgbV9zdHJva2VTeWxlSXNE
aXJ0eSA9IGZhbHNlOwotfQotCi1JRDJEMVN0cm9rZVN0eWxlKiBQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRDo6c3Ryb2tlU3R5bGUoKQotewotICAgIHJlY29tcHV0ZVN0cm9rZVN0eWxlKCk7Ci0gICAg
cmV0dXJuIG1fZDJkU3Ryb2tlU3R5bGUuZ2V0KCk7Ci19Ci0KLUQyRDFfU1RST0tFX1NUWUxFX1BS
T1BFUlRJRVMgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnN0cm9rZVN0eWxlUHJvcGVydGllcygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIEQyRDE6OlN0cm9rZVN0eWxlUHJvcGVydGllcyhtX2xpbmVD
YXAsIG1fbGluZUNhcCwgbV9saW5lQ2FwLCBtX2xpbmVKb2luLCBtX21pdGVyTGltaXQsIEQyRDFf
REFTSF9TVFlMRV9TT0xJRCwgMC4wZik7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQ6OnNldExpbmVDYXAoRDJEMV9DQVBfU1RZTEUgbGluZUNhcCkKLXsKLSAgICBpZiAobV9saW5l
Q2FwID09IGxpbmVDYXApCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGluZUNhcCA9IGxpbmVD
YXA7Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQ6OnNldExpbmVKb2luKEQyRDFfTElORV9KT0lOIGpvaW4pCi17Ci0gICAg
aWYgKG1fbGluZUpvaW4gPT0gam9pbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9saW5lSm9p
biA9IGpvaW47Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0cm9rZVN0
eWxlKQotewotICAgIGlmIChtX3N0cm9rZVN0eWxlID09IHN0cm9rZVN0eWxlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3N0cm9rZVN0eWxlID0gc3Ryb2tlU3R5bGU7Ci0gICAgbV9zdHJva2VT
eWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNl
dFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCi17Ci0gICAgaWYgKFdURjo6YXJlRXNz
ZW50aWFsbHlFcXVhbCh0aGlja25lc3MsIG1fc3Ryb2tlVGhpY2tuZXNzKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9zdHJva2VUaGlja25lc3MgPSB0aGlja25lc3M7Ci0gICAgbV9zdHJva2VT
eWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNl
dE1pdGVyTGltaXQoZmxvYXQgY2FudmFzTWl0ZXJMaW1pdCkKLXsKLSAgICAvLyBEaXJlY3QyRCBt
aXRlciBsaW1pdCBpcyBpbiB0ZXJtcyBvZiBIQUxGIHRoZSBsaW5lIHRoaWNrbmVzcy4KLSAgICBm
bG9hdCBtaXRlckxpbWl0ID0gMC41ZiAqIGNhbnZhc01pdGVyTGltaXQ7Ci0gICAgaWYgKFdURjo6
YXJlRXNzZW50aWFsbHlFcXVhbChtaXRlckxpbWl0LCBtX21pdGVyTGltaXQpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX21pdGVyTGltaXQgPSBtaXRlckxpbWl0OwotICAgIG1fc3Ryb2tlU3ls
ZUlzRGlydHkgPSB0cnVlOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRE
YXNoT2Zmc2V0KGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgaWYgKFdURjo6YXJlRXNzZW50aWFs
bHlFcXVhbChkYXNoT2Zmc2V0LCBtX2Rhc2hPZmZzZXQpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2Rhc2hPZmZzZXQgPSBkYXNoT2Zmc2V0OwotICAgIG1fc3Ryb2tlU3lsZUlzRGlydHkgPSB0
cnVlOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXREYXNoZXMoY29uc3Qg
RGFzaEFycmF5JiBkYXNoZXMpCi17Ci0gICAgaWYgKG1fZGFzaGVzID09IGRhc2hlcykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9kYXNoZXMgPSBkYXNoZXM7Ci0gICAgbV9zdHJva2VTeWxlSXNE
aXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFBhdHRl
cm5XaWR0aChmbG9hdCBwYXR0ZXJuV2lkdGgpCi17Ci0gICAgaWYgKFdURjo6YXJlRXNzZW50aWFs
bHlFcXVhbChwYXR0ZXJuV2lkdGgsIG1fcGF0dGVybldpZHRoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9wYXR0ZXJuV2lkdGggPSBwYXR0ZXJuV2lkdGg7Ci0gICAgbV9zdHJva2VTeWxlSXNE
aXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFBhdHRl
cm5PZmZzZXQoZmxvYXQgcGF0dGVybk9mZnNldCkKLXsKLSAgICBpZiAoV1RGOjphcmVFc3NlbnRp
YWxseUVxdWFsKHBhdHRlcm5PZmZzZXQsIG1fcGF0dGVybk9mZnNldCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fcGF0dGVybk9mZnNldCA9IHBhdHRlcm5PZmZzZXQ7Ci0gICAgbV9zdHJva2VT
eWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmJl
Z2luRHJhdygpCi17Ci0gICAgQVNTRVJUKG1fcmVuZGVyVGFyZ2V0KTsKLSAgICBtX3JlbmRlclRh
cmdldC0+QmVnaW5EcmF3KCk7Ci0gICAgKytiZWdpbkRyYXdDb3VudDsKLX0KLQotdm9pZCBQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRDo6ZW5kRHJhdygpCi17Ci0gICAgQVNTRVJUKG1fcmVuZGVyVGFy
Z2V0KTsKLQotICAgIGlmIChtX3N0YXRlU3RhY2suc2l6ZSgpID4gMSkKLSAgICAgICAgcmVzdG9y
ZSgpOwotCi0gICAgY2xlYXJDbGlwcyhtX3N0YXRlLT5tX2NsaXBzKTsKLQotICAgIEFTU0VSVCht
X3N0YXRlU3RhY2suc2l6ZSgpID49IDEpOwotCi0gICAgRDJEMV9UQUcgZmlyc3QsIHNlY29uZDsK
LSAgICBIUkVTVUxUIGhyID0gbV9yZW5kZXJUYXJnZXQtPkVuZERyYXcoJmZpcnN0LCAmc2Vjb25k
KTsKLQotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJGYWls
ZWQgaW4gUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmVuZERyYXc6IGhyPSV4ZCwgZmlyc3Q9JWxk
LCBzZWNvbmQ9JWxkIiwgaHIsIGZpcnN0LCBzZWNvbmQpOwotCi0gICAgLS1iZWdpbkRyYXdDb3Vu
dDsKLQotICAgIGNvbXBvc2l0ZUlmTmVlZGVkKCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQ6OnNldFRhZ3MoRDJEMV9UQUcgdGFnMSwgRDJEMV9UQUcgdGFnMikKLXsKLSNpZiBB
U1NFUlRfRU5BQkxFRAotICAgIG1fcmVuZGVyVGFyZ2V0LT5TZXRUYWdzKHRhZzEsIHRhZzIpOwot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGFnMSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRhZzIpOwot
I2VuZGlmCi19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6Om5vdGlmeVByZURyYXdP
YnNlcnZlcigpCi17Ci0gICAgbV9wcmVEcmF3SGFuZGxlcigpOwotfQotCi12b2lkIFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEOjpub3RpZnlQb3N0RHJhd09ic2VydmVyKCkKLXsKLSAgICBtX3Bvc3RE
cmF3SGFuZGxlcigpOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpwdXNoQ2xp
cChEaXJlY3QyRExheWVyVHlwZSBjbGlwVHlwZSkKLXsKLSAgICBtX3N0YXRlLT5tX2NsaXBzLmFw
cGVuZChjbGlwVHlwZSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmNvbXBv
c2l0ZUlmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fY29tcG9zaXRlU291cmNlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdl
dChRdWVyeSwgbV9yZW5kZXJUYXJnZXQuZ2V0KCkpOwotICAgIGlmICghYml0bWFwVGFyZ2V0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGN1cnJlbnRDYW52YXMg
PSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwQ29weUZyb21Db250ZXh0KGJpdG1hcFRhcmdldC5nZXQo
KSk7Ci0gICAgaWYgKCFjdXJyZW50Q2FudmFzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01Q
dHI8SUQyRDFFZmZlY3Q+IGVmZmVjdDsKLQotICAgIGlmIChtX2NvbXBvc2l0ZU1vZGUgIT0gRDJE
MV9DT01QT1NJVEVfTU9ERV9GT1JDRV9EV09SRCkgewotICAgICAgICBtX2RldmljZUNvbnRleHQt
PkNyZWF0ZUVmZmVjdChDTFNJRF9EMkQxQ29tcG9zaXRlLCAmZWZmZWN0KTsKLSAgICAgICAgZWZm
ZWN0LT5TZXRJbnB1dCgwLCBtX2NvbXBvc2l0ZVNvdXJjZS5nZXQoKSk7Ci0gICAgICAgIGVmZmVj
dC0+U2V0SW5wdXQoMSwgY3VycmVudENhbnZhcy5nZXQoKSk7Ci0gICAgICAgIGVmZmVjdC0+U2V0
VmFsdWUoRDJEMV9DT01QT1NJVEVfUFJPUF9NT0RFLCBtX2NvbXBvc2l0ZU1vZGUpOwotICAgIH0g
ZWxzZSBpZiAobV9ibGVuZE1vZGUgIT0gRDJEMV9CTEVORF9NT0RFX0ZPUkNFX0RXT1JEKSB7Ci0g
ICAgICAgIG1fZGV2aWNlQ29udGV4dC0+Q3JlYXRlRWZmZWN0KENMU0lEX0QyRDFCbGVuZCwgJmVm
ZmVjdCk7Ci0gICAgICAgIGVmZmVjdC0+U2V0SW5wdXQoMCwgY3VycmVudENhbnZhcy5nZXQoKSk7
Ci0gICAgICAgIGVmZmVjdC0+U2V0SW5wdXQoMSwgbV9jb21wb3NpdGVTb3VyY2UuZ2V0KCkpOwot
ICAgICAgICBlZmZlY3QtPlNldFZhbHVlKEQyRDFfQkxFTkRfUFJPUF9NT0RFLCBtX2JsZW5kTW9k
ZSk7Ci0gICAgfQotCi0gICAgaWYgKGVmZmVjdCkgewotICAgICAgICBtX2RldmljZUNvbnRleHQt
PkJlZ2luRHJhdygpOwotICAgICAgICBtX2RldmljZUNvbnRleHQtPkNsZWFyKEQyRDE6OkNvbG9y
RigwLCAwLCAwLCAwKSk7Ci0gICAgICAgIG1fZGV2aWNlQ29udGV4dC0+RHJhd0ltYWdlKGVmZmVj
dC5nZXQoKSk7Ci0gICAgICAgIG1fZGV2aWNlQ29udGV4dC0+RW5kRHJhdygpOwotICAgIH0KLQot
ICAgIG1fY29tcG9zaXRlU291cmNlID0gbnVsbHB0cjsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRDo6c2V0QmxlbmRBbmRDb21wb3NpdGVNb2RlKEQyRDFfQkxFTkRfTU9ERSBibGVu
ZCwgRDJEMV9DT01QT1NJVEVfTU9ERSBtb2RlKQotewotICAgIGlmIChtb2RlID09IG1fY29tcG9z
aXRlTW9kZSAmJiBibGVuZCA9PSBtX2JsZW5kTW9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gRGlyZWN0MkQgaGFuZGxlcyBjb21wb3NpdGluZyBiYXNlZCBvbiBiaXRtYXBzLiBJZiB3ZSBh
cmUgY2hhbmdpbmcgdGhlCi0gICAgLy8gY29tcG9zaXRpbmcgbW9kZSwgd2UgbmVlZCB0byBjYXB0
dXJlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSByZW5kZXJpbmcKLSAgICAvLyBpbiBhIGJpdG1h
cCwgcGVyZm9ybSBkcmF3aW5nIG9wZXJhdGlvbnMgdW50aWwgd2UgZmluaXNoLCB0aGVuIGhhbmRs
ZQotICAgIC8vIHRoZSBjb21wb3N0aW5nIG9mIHRoZSB0d28gbGF5ZXJzLgotICAgIENPTVB0cjxJ
RDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0KFF1ZXJ5LCBtX3JlbmRlclRhcmdl
dC5nZXQoKSk7Ci0gICAgaWYgKCFiaXRtYXBUYXJnZXQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGVuZERyYXcoKTsKLQotICAgIG1fY29tcG9zaXRlTW9kZSA9IG1vZGU7Ci0gICAgbV9ibGVuZE1v
ZGUgPSBibGVuZDsKLQotICAgIG1fY29tcG9zaXRlU291cmNlID0gRGlyZWN0MkQ6OmNyZWF0ZUJp
dG1hcENvcHlGcm9tQ29udGV4dChiaXRtYXBUYXJnZXQuZ2V0KCkpOwotCi0gICAgYmVnaW5EcmF3
KCk7Ci0KLSAgICBtX2RldmljZUNvbnRleHQtPkNsZWFyKEQyRDE6OkNvbG9yRigwLCAwLCAwLCAw
KSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1Qy
RCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNv
bnRleHREaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oCShyZXZpc2lvbiAyODc4MTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDIxMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKERJ
UkVDVDJEKQotCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQyZDFfMS5oPgotI2luY2x1ZGUgPGQy
ZDFlZmZlY3RzLmg+Ci0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKLXN0cnVjdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTsKLQotbmFtZXNwYWNlIERpcmVjdDJEIHsKLXN0cnVjdCBGaWxsU291cmNl
Owotc3RydWN0IFN0cm9rZVNvdXJjZTsKLXN0cnVjdCBTaGFkb3dTdGF0ZTsKLX0KLQotY2xhc3Mg
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKTsKLXB1Ymxp
YzoKLSAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRChJRDJEMVJlbmRlclRhcmdldCosIEZ1bmN0
aW9uPHZvaWQoKT4mJiBwcmVEcmF3SGFuZGxlciA9IFtdKCkgeyB9LCBGdW5jdGlvbjx2b2lkKCk+
JiYgcG9zdERyYXdIYW5kbGVyID0gW10oKSB7IH0pOwotICAgIH5QbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCgpOwotCi0gICAgSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCgpIHsgcmV0dXJu
IG1fcmVuZGVyVGFyZ2V0LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRSZW5kZXJUYXJnZXQoSUQyRDFS
ZW5kZXJUYXJnZXQqKTsKLQotICAgIElEMkQxRGV2aWNlQ29udGV4dCogZGV2aWNlQ29udGV4dCgp
IHsgcmV0dXJuIG1fZGV2aWNlQ29udGV4dC5nZXQoKTsgfQotCi0gICAgSUQzRDExRGV2aWNlMSog
ZDNkRGV2aWNlKCkgY29uc3QgeyByZXR1cm4gbV9kM2REZXZpY2UuZ2V0KCk7IH0KLSAgICB2b2lk
IHNldEQzRERldmljZShJRDNEMTFEZXZpY2UxKiBkZXZpY2UpIHsgbV9kM2REZXZpY2UgPSBkZXZp
Y2U7IH0KLQotICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZ3JhcGhpY3NDb250
ZXh0UHJpdmF0ZSgpIHsgcmV0dXJuIG1fZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZTsgfQotICAgIHZv
aWQgc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUqIGdyYXBoaWNzQ29udGV4dFByaXZhdGUpIHsgbV9ncmFwaGljc0NvbnRleHRQcml2YXRlID0g
Z3JhcGhpY3NDb250ZXh0UHJpdmF0ZTsgfQotCi0gICAgSUQyRDFMYXllciogY2xpcExheWVyKCkg
Y29uc3Q7Ci0gICAgSUQyRDFTdHJva2VTdHlsZSogc3Ryb2tlU3R5bGUoKTsKLSAgICBEMkQxX1NU
Uk9LRV9TVFlMRV9QUk9QRVJUSUVTIHN0cm9rZVN0eWxlUHJvcGVydGllcygpIGNvbnN0OwotICAg
IElEMkQxU3Ryb2tlU3R5bGUqIHBsYXRmb3JtU3Ryb2tlU3R5bGUoKSBjb25zdDsKLQotICAgIENP
TVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gYnJ1c2hXaXRoQ29sb3IoY29uc3QgRDJEMV9DT0xP
Ul9GJik7Ci0KLSAgICB2b2lkIHNhdmUoKTsKLSAgICB2b2lkIHJlc3RvcmUoKTsKLQotICAgIGJv
b2wgaGFzU2F2ZWRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuICFtX3N0YXRlU3RhY2suaXNFbXB0eSgp
OyB9Ci0KLSAgICB2b2lkIGJlZ2luRHJhdygpOwotICAgIHZvaWQgZW5kRHJhdygpOwotCi0gICAg
ZW51bSBEaXJlY3QyRExheWVyVHlwZSB7IEF4aXNBbGlnbmVkQ2xpcCwgTGF5ZXJDbGlwIH07Ci0g
ICAgdm9pZCBwdXNoUmVuZGVyQ2xpcChEaXJlY3QyRExheWVyVHlwZSk7Ci0gICAgdm9pZCBzZXRB
Y3RpdmVMYXllcihDT01QdHI8SUQyRDFMYXllcj4mJik7Ci0KLSAgICB2b2lkIHJlY29tcHV0ZVN0
cm9rZVN0eWxlKCk7Ci0gICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4g
bV9zdHJva2VUaGlja25lc3M7IH0KLQotICAgIHN0cnVjdCBUcmFuc3BhcmVuY3lMYXllclN0YXRl
IHsKLSAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7
Ci0gICAgICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgICAgICBGbG9hdFNpemUgc2hhZG93T2Zm
c2V0OwotICAgICAgICBmbG9hdCBvcGFjaXR5IHsgMS4wIH07Ci0gICAgICAgIGZsb2F0IHNoYWRv
d0JsdXIgeyAwIH07Ci0gICAgICAgIGJvb2wgaGFzU2hhZG93IHsgZmFsc2UgfTsKLSAgICB9Owot
ICAgIFZlY3RvcjxUcmFuc3BhcmVuY3lMYXllclN0YXRlPiBtX3RyYW5zcGFyZW5jeUxheWVyU3Rh
Y2s7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoRDJEMV9DQVBfU1RZTEUpOwotICAgIHZvaWQgc2V0
TGluZUpvaW4oRDJEMV9MSU5FX0pPSU4pOwotICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ryb2tl
U3R5bGUpOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0gICAgdm9pZCBzZXREYXNo
T2Zmc2V0KGZsb2F0KTsKLSAgICB2b2lkIHNldFBhdHRlcm5XaWR0aChmbG9hdCk7Ci0gICAgdm9p
ZCBzZXRQYXR0ZXJuT2Zmc2V0KGZsb2F0KTsKLSAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhm
bG9hdCk7Ci0gICAgdm9pZCBzZXREYXNoZXMoY29uc3QgRGFzaEFycmF5Jik7Ci0KLSAgICB2b2lk
IHNldEJsZW5kQW5kQ29tcG9zaXRlTW9kZShEMkQxX0JMRU5EX01PREUsIEQyRDFfQ09NUE9TSVRF
X01PREUpOwotCi0gICAgdm9pZCBzZXRUYWdzKEQyRDFfVEFHIHRhZzEsIEQyRDFfVEFHIHRhZzIp
OwotICAgIHZvaWQgbm90aWZ5UHJlRHJhd09ic2VydmVyKCk7Ci0gICAgdm9pZCBub3RpZnlQb3N0
RHJhd09ic2VydmVyKCk7Ci0KLSAgICB2b2lkIHB1c2hDbGlwKERpcmVjdDJETGF5ZXJUeXBlKTsK
LQotcHJpdmF0ZToKLSAgICB2b2lkIGNsZWFyQ2xpcHMoVmVjdG9yPERpcmVjdDJETGF5ZXJUeXBl
PiYpOwotICAgIHZvaWQgY29tcG9zaXRlSWZOZWVkZWQoKTsKLQotICAgIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZSogbV9ncmFwaGljc0NvbnRleHRQcml2YXRlIHsgbnVsbHB0ciB9Owot
Ci0gICAgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBtX3JlbmRlclRhcmdldDsKLSAgICBDT01Q
dHI8SUQyRDFEZXZpY2VDb250ZXh0PiBtX2RldmljZUNvbnRleHQ7Ci0gICAgQ09NUHRyPElEMkQx
U3Ryb2tlU3R5bGU+IG1fZDJkU3Ryb2tlU3R5bGU7Ci0KLSAgICBIYXNoTWFwPHVpbnQzMl90LCBD
T01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+PiBtX3NvbGlkQ29sb3JlZEJydXNoQ2FjaGU7Ci0g
ICAgQ09NUHRyPElEMkQxU29saWRDb2xvckJydXNoPiBtX3doaXRlQnJ1c2g7Ci0gICAgQ09NUHRy
PElEMkQxU29saWRDb2xvckJydXNoPiBtX3plcm9CcnVzaDsKLSAgICBDT01QdHI8SUQyRDFTb2xp
ZENvbG9yQnJ1c2g+IG1fc29saWRTdHJva2VCcnVzaDsKLSAgICBDT01QdHI8SUQyRDFTb2xpZENv
bG9yQnJ1c2g+IG1fc29saWRGaWxsQnJ1c2g7Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwQnJ1c2g+
IG1fcGF0dGVyblN0cm9rZUJydXNoOwotICAgIENPTVB0cjxJRDJEMUJpdG1hcEJydXNoPiBtX3Bh
dHRlcm5GaWxsQnJ1c2g7Ci0KLSAgICBDT01QdHI8SUQzRDExRGV2aWNlMT4gbV9kM2REZXZpY2U7
Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IG1fY29tcG9zaXRlU291cmNlOwotCi0gICAgRnVu
Y3Rpb248dm9pZCgpPiBtX3ByZURyYXdIYW5kbGVyOwotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9w
b3N0RHJhd0hhbmRsZXI7Ci0KLSAgICBjbGFzcyBTdGF0ZTsKLSAgICBTdGF0ZSogbV9zdGF0ZSB7
IG51bGxwdHIgfTsKLSAgICBWZWN0b3I8U3RhdGU+IG1fc3RhdGVTdGFjazsKLQotICAgIEQyRDFf
Q0FQX1NUWUxFIG1fbGluZUNhcCB7IEQyRDFfQ0FQX1NUWUxFX0ZMQVQgfTsKLSAgICBEMkQxX0xJ
TkVfSk9JTiBtX2xpbmVKb2luIHsgRDJEMV9MSU5FX0pPSU5fTUlURVIgfTsKLSAgICBTdHJva2VT
dHlsZSBtX3N0cm9rZVN0eWxlIHsgU29saWRTdHJva2UgfTsKLSAgICBEYXNoQXJyYXkgbV9kYXNo
ZXM7Ci0KLSAgICB1bnNpZ25lZCBiZWdpbkRyYXdDb3VudCB7IDAgfTsKLQotICAgIGZsb2F0IG1f
bWl0ZXJMaW1pdCB7IDEwLjBmIH07Ci0gICAgZmxvYXQgbV9kYXNoT2Zmc2V0IHsgMCB9OwotICAg
IGZsb2F0IG1fcGF0dGVybldpZHRoIHsgMS4wZiB9OwotICAgIGZsb2F0IG1fcGF0dGVybk9mZnNl
dCB7IDAgfTsKLSAgICBmbG9hdCBtX3N0cm9rZVRoaWNrbmVzcyB7IDAgfTsKLSAgICBmbG9hdCBt
X2FscGhhIHsgMS4wIH07Ci0KLSAgICBib29sIG1fc3Ryb2tlU3lsZUlzRGlydHkgeyBmYWxzZSB9
OwotCi0gICAgRDJEMV9CTEVORF9NT0RFIG1fYmxlbmRNb2RlIHsgRDJEMV9CTEVORF9NT0RFX01V
TFRJUExZIH07Ci0gICAgRDJEMV9DT01QT1NJVEVfTU9ERSBtX2NvbXBvc2l0ZU1vZGUgeyBEMkQx
X0NPTVBPU0lURV9NT0RFX1NPVVJDRV9PVkVSIH07Ci0KLSAgICBmcmllbmQgY2xhc3MgR3JhcGhp
Y3NDb250ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU7Ci19OwotCi1jbGFzcyBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVyIHsKLXB1YmxpYzoKLSAg
ICBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVyKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBjb250
ZXh0LCBib29sIHNhdmVBbmRSZXN0b3JlID0gdHJ1ZSkKLSAgICAgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKLSAgICAgICAgLCBtX3NhdmVBbmRSZXN0b3JlKHNhdmVBbmRSZXN0b3JlKQotICAgIHsK
LSAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCi0gICAgICAgICAgICBtX2NvbnRleHQuc2F2
ZSgpOwotICAgIH0KLQotICAgIH5QbGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVyKCkKLSAgICB7Ci0g
ICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAgbV9jb250ZXh0LnJlc3Rv
cmUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNhdmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFt
X3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAgbV9jb250ZXh0LnNhdmUoKTsKLSAgICAgICAgbV9z
YXZlQW5kUmVzdG9yZSA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCByZXN0b3JlKCkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAgbV9jb250ZXh0LnJl
c3RvcmUoKTsKLSAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IGZhbHNlOwotICAgIH0KLQotICAg
IGJvb2wgZGlkU2F2ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zYXZlQW5kUmVz
dG9yZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIG1f
Y29udGV4dDsKLSAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmUgeyBmYWxzZSB9OwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhRGlyZWN0MkQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9T
aW1wbGVGb250RGF0YURpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhRGlyZWN0MkQuY3BwCShu
b25leGlzdGVudCkKQEAgLTEsMjE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250
LmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJlY3RXcml0ZVV0aWxpdGll
cy5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2lu
Y2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkdseXBoUGFnZS5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8Y29tdXRpbC5oPgotI2luY2x1ZGUgPGR3cml0ZV8z
Lmg+Ci0jaW5jbHVkZSA8bWxhbmcuaD4KLSNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+Ci0jaW5j
bHVkZSA8dW5pY29kZS91bm9ybS5oPgotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFZl
Y3RvcjxXQ0hBUj4gZ2V0RmFjZU5hbWUoSURXcml0ZUZvbnQqIGZvbnQpCi17Ci0gICAgaWYgKCFm
b250KQotICAgICAgICByZXR1cm4gVmVjdG9yPFdDSEFSPigpOwotCi0gICAgQ09NUHRyPElEV3Jp
dGVMb2NhbGl6ZWRTdHJpbmdzPiBsb2NhbGl6ZWRGYWNlTmFtZXM7Ci0gICAgSFJFU1VMVCBociA9
IGZvbnQtPkdldEZhY2VOYW1lcygmbG9jYWxpemVkRmFjZU5hbWVzKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIFVJTlQzMiBsb2NhbGVJbmRleCA9IDA7Ci0gICAg
Qk9PTCBleGlzdHMgPSBmYWxzZTsKLQotICAgIHdjaGFyX3QgbG9jYWxlTmFtZVtMT0NBTEVfTkFN
RV9NQVhfTEVOR1RIXTsKLSAgICBpbnQgbG9jYWxlTGVuZ3RoID0gR2V0VXNlckRlZmF1bHRMb2Nh
bGVOYW1lKGxvY2FsZU5hbWUsIExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwotICAgIGlmIChsb2Nh
bGVMZW5ndGgpCi0gICAgICAgIGhyID0gbG9jYWxpemVkRmFjZU5hbWVzLT5GaW5kTG9jYWxlTmFt
ZShsb2NhbGVOYW1lLCAmbG9jYWxlSW5kZXgsICZleGlzdHMpOwotCi0gICAgaWYgKCFleGlzdHMg
fHwgIVNVQ0NFRURFRChocikpCi0gICAgICAgIGhyID0gbG9jYWxpemVkRmFjZU5hbWVzLT5GaW5k
TG9jYWxlTmFtZShMImVuLXVzIiwgJmxvY2FsZUluZGV4LCAmZXhpc3RzKTsKLQotICAgIGlmICgh
ZXhpc3RzIHx8ICFTVUNDRUVERUQoaHIpKQotICAgICAgICBsb2NhbGVJbmRleCA9IDA7Ci0KLSAg
ICBVSU5UMzIgZmFjZU5hbWVMZW5ndGggPSAwOwotICAgIGhyID0gbG9jYWxpemVkRmFjZU5hbWVz
LT5HZXRTdHJpbmdMZW5ndGgobG9jYWxlSW5kZXgsICZmYWNlTmFtZUxlbmd0aCk7Ci0gICAgaWYg
KCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gVmVjdG9yPFdDSEFSPigpOwotCi0gICAg
VmVjdG9yPFdDSEFSPiBmYWNlTmFtZShmYWNlTmFtZUxlbmd0aCArIDEpOwotICAgIGhyID0gbG9j
YWxpemVkRmFjZU5hbWVzLT5HZXRTdHJpbmcobG9jYWxlSW5kZXgsIGZhY2VOYW1lLmRhdGEoKSwg
ZmFjZU5hbWUuc2l6ZSgpKTsKLQotICAgIHJldHVybiBmYWNlTmFtZTsKLX0KLQotdm9pZCBGb250
OjpwbGF0Zm9ybUluaXQoKQotewotICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZv
cm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7Ci0gICAgbV9zY3JpcHRDYWNoZSA9
IDA7Ci0gICAgbV9zY3JpcHRGb250UHJvcGVydGllcyA9IDA7Ci0KLSAgICBpZiAobV9wbGF0Zm9y
bURhdGEudXNlR0RJKCkpCi0gICAgICAgIHJldHVybiBpbml0R0RJRm9udCgpOwotCi0gICAgZmxv
YXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotCi0gICAgYXV0byBmb250ID0g
bV9wbGF0Zm9ybURhdGEuZHdGb250KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZm9udCk7Ci0KLSAg
ICBhdXRvIGZvbnRGYWNlID0gbV9wbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpOwotICAgIFJFTEVB
U0VfQVNTRVJUKGZvbnRGYWNlKTsKLQotICAgIERXUklURV9GT05UX01FVFJJQ1MgZm9udE1ldHJp
Y3M7Ci0gICAgZm9udC0+R2V0TWV0cmljcygmZm9udE1ldHJpY3MpOwotCi0gICAgaW50IGlBc2Nl
bnQgPSBmb250TWV0cmljcy5hc2NlbnQ7Ci0gICAgaW50IGlEZXNjZW50ID0gZm9udE1ldHJpY3Mu
ZGVzY2VudDsKLSAgICBpbnQgaUxpbmVHYXAgPSBmb250TWV0cmljcy5saW5lR2FwOwotICAgIGlu
dCBpQ2FwSGVpZ2h0ID0gZm9udE1ldHJpY3MuY2FwSGVpZ2h0OwotCi0gICAgdW5zaWduZWQgdW5p
dHNQZXJFbSA9IGZvbnRNZXRyaWNzLmRlc2lnblVuaXRzUGVyRW07Ci0gICAgZmxvYXQgZkFzY2Vu
dCA9IHNjYWxlRW1Ub1VuaXRzKGlBc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAg
IGZsb2F0IGZEZXNjZW50ID0gc2NhbGVFbVRvVW5pdHMoaURlc2NlbnQsIHVuaXRzUGVyRW0pICog
cG9pbnRTaXplOwotICAgIGZsb2F0IGZDYXBIZWlnaHQgPSBzY2FsZUVtVG9Vbml0cyhpQ2FwSGVp
Z2h0LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLSAgICBmbG9hdCBmTGluZUdhcCA9IHNjYWxl
RW1Ub1VuaXRzKGlMaW5lR2FwLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLQotICAgIGlmIChv
cmlnaW4oKSA9PSBPcmlnaW46OkxvY2FsKSB7Ci0gICAgICAgIFZlY3RvcjxXQ0hBUj4gZmFjZU5h
bWUgPSBnZXRGYWNlTmFtZShmb250KTsKLSAgICAgICAgZkFzY2VudCA9IGFzY2VudENvbnNpZGVy
aW5nTWFjQXNjZW50SGFjayhmYWNlTmFtZS5kYXRhKCksIGZBc2NlbnQsIGZEZXNjZW50KTsKLSAg
ICB9Ci0KLSAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChmQXNjZW50KTsKLSAgICBtX2ZvbnRN
ZXRyaWNzLnNldERlc2NlbnQoZkRlc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0Q2FwSGVp
Z2h0KGZDYXBIZWlnaHQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChmTGluZUdhcCk7
Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhscm91bmRmKGZBc2NlbnQpICsgbHJv
dW5kZihmRGVzY2VudCkgKyBscm91bmRmKGZMaW5lR2FwKSk7Ci0KLSAgICBHbHlwaCB4R2x5cGgg
PSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoJ3gnKS5nbHlwaDsKLQotICAgIGlmICh4R2x5cGgpIHsK
LSAgICAgICAgLy8gTWVhc3VyZSB0aGUgYWN0dWFsIGNoYXJhY3RlciAieCIsIHNpbmNlIGl0J3Mg
cG9zc2libGUgZm9yIGl0IHRvIGV4dGVuZCBiZWxvdyB0aGUgYmFzZWxpbmUsIGFuZCB3ZSBuZWVk
IHRoZQotICAgICAgICAvLyByZXBvcnRlZCB4LWhlaWdodCB0byBvbmx5IGluY2x1ZGUgdGhlIHBv
cnRpb24gb2YgdGhlIGdseXBoIHRoYXQgaXMgYWJvdmUgdGhlIGJhc2VsaW5lLgotICAgICAgICBW
ZWN0b3I8RFdSSVRFX0dMWVBIX01FVFJJQ1M+IGdseXBoTWV0cmljcygxKTsKLSAgICAgICAgSFJF
U1VMVCBociA9IGZvbnRGYWNlLT5HZXREZXNpZ25HbHlwaE1ldHJpY3MoJnhHbHlwaCwgMSwgZ2x5
cGhNZXRyaWNzLmRhdGEoKSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3Jp
ZW50YXRpb246OlZlcnRpY2FsKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0gICAgICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodChzY2FsZUVtVG9Vbml0cyhnbHlw
aE1ldHJpY3MuZmlyc3QoKS52ZXJ0aWNhbE9yaWdpblksIHVuaXRzUGVyRW0pICogcG9pbnRTaXpl
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpbnQgaVhIZWlnaHQgPSBmb250TWV0cmljcy54SGVp
Z2h0OwotICAgICAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoc2NhbGVFbVRvVW5pdHMoaVhI
ZWlnaHQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplKTsKLSAgICB9Ci0KLSAgICBtX2ZvbnRNZXRy
aWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7Ci19Ci0KLUZsb2F0UmVjdCBGb250OjpwbGF0
Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIGlmICghcGxhdGZv
cm1EYXRhKCkuc2l6ZSgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBpZiAo
bV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpCi0gICAgICAgIHJldHVybiBib3VuZHNGb3JHRElHbHlw
aChnbHlwaCk7Ci0KLSAgICBhdXRvIGZvbnQgPSBtX3BsYXRmb3JtRGF0YS5kd0ZvbnQoKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChmb250KTsKLQotICAgIGF1dG8gZm9udEZhY2UgPSBtX3BsYXRmb3Jt
RGF0YS5kd0ZvbnRGYWNlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZm9udEZhY2UpOwotCi0gICAg
ZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIGJvb2wgdmVydGlj
YWwgPSBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVy
dGljYWw7Ci0KLSAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX01FVFJJQ1M+IGdseXBoTWV0cmljcygx
KTsKLSAgICBIUkVTVUxUIGhyID0gZm9udEZhY2UtPkdldERlc2lnbkdseXBoTWV0cmljcygmZ2x5
cGgsIDEsIGdseXBoTWV0cmljcy5kYXRhKCksIG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkg
PT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VF
REVEKGhyKSk7Ci0KLSAgICBjb25zdCBhdXRvJiBtZXRyaWNzID0gZ2x5cGhNZXRyaWNzLmZpcnN0
KCk7Ci0KLSAgICB1bnNpZ25lZCB1bml0c1BlckVtID0gbV9mb250TWV0cmljcy51bml0c1BlckVt
KCk7Ci0KLSAgICBGbG9hdFBvaW50IG9yaWdpbihzY2FsZUVtVG9Vbml0cyhtZXRyaWNzLmxlZnRT
aWRlQmVhcmluZywgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUsIHNjYWxlRW1Ub1VuaXRzKG1ldHJp
Y3MudmVydGljYWxPcmlnaW5ZLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7Ci0gICAgRmxvYXRT
aXplIHNpemUoc2NhbGVFbVRvVW5pdHMobWV0cmljcy5hZHZhbmNlV2lkdGggLSBtZXRyaWNzLmxl
ZnRTaWRlQmVhcmluZyAtIG1ldHJpY3MucmlnaHRTaWRlQmVhcmluZywgdW5pdHNQZXJFbSkgKiBw
b2ludFNpemUsCi0gICAgICAgIHNjYWxlRW1Ub1VuaXRzKG1ldHJpY3MuYWR2YW5jZUhlaWdodCAt
IG1ldHJpY3MudG9wU2lkZUJlYXJpbmcgLSBtZXRyaWNzLmJvdHRvbVNpZGVCZWFyaW5nLCB1bml0
c1BlckVtKSAqIHBvaW50U2l6ZSk7Ci0KLSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3gob3JpZ2lu
LCBzaXplKTsKLSAgICBpZiAobV9zeW50aGV0aWNCb2xkT2Zmc2V0KQotICAgICAgICBib3VuZGlu
Z0JveC5zZXRXaWR0aChib3VuZGluZ0JveC53aWR0aCgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0
KTsKLQotICAgIHJldHVybiBib3VuZGluZ0JveDsKLX0KLQotZmxvYXQgRm9udDo6cGxhdGZvcm1X
aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIGlmICghcGxhdGZvcm1EYXRh
KCkuc2l6ZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChtX3BsYXRmb3JtRGF0YS51
c2VHREkoKSkKLSAgICAgICAgcmV0dXJuIHdpZHRoRm9yR0RJR2x5cGgoZ2x5cGgpOwotCi0gICAg
YXV0byBmb250ID0gbV9wbGF0Zm9ybURhdGEuZHdGb250KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
Zm9udCk7Ci0KLSAgICBhdXRvIGZvbnRGYWNlID0gbV9wbGF0Zm9ybURhdGEuZHdGb250RmFjZSgp
OwotICAgIFJFTEVBU0VfQVNTRVJUKGZvbnRGYWNlKTsKLQotICAgIGJvb2wgaXNWZXJ0aWNhbCA9
IG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNh
bDsKLQotICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfTUVUUklDUz4gZ2x5cGhNZXRyaWNzKDEpOwot
ICAgIEhSRVNVTFQgaHIgPSBmb250RmFjZS0+R2V0RGVzaWduR2x5cGhNZXRyaWNzKCZnbHlwaCwg
MSwgZ2x5cGhNZXRyaWNzLmRhdGEoKSwgaXNWZXJ0aWNhbCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
U1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBjb25zdCBhdXRvJiBtZXRyaWNzID0gZ2x5cGhNZXRyaWNz
LmZpcnN0KCk7Ci0gICAgaW50IHdpZHRoSW5FbSA9IG1ldHJpY3MuYWR2YW5jZVdpZHRoOwotCi0g
ICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIHVuc2lnbmVk
IHVuaXRzUGVyRW0gPSBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKTsKLSAgICBmbG9hdCB3aWR0
aCA9IHNjYWxlRW1Ub1VuaXRzKHdpZHRoSW5FbSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0K
LSAgICByZXR1cm4gd2lkdGggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7Ci19Ci0KLVBhdGggRm9u
dDo6cGxhdGZvcm1QYXRoRm9yR2x5cGgoR2x5cGgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gUGF0aCgpOwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhlbHBlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFs
eXplckhlbHBlci5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuY3BwCShub25leGlzdGVudCkKQEAg
LTEsMTQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0QW5hbHl6ZXJIZWxwZXIu
aCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1UZXh0QW5h
bHl6ZXJIZWxwZXI6OlRleHRBbmFseXplckhlbHBlcihjb25zdCBXQ0hBUiogbG9jYWxlTmFtZSwg
Y29uc3QgV0NIQVIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKQotICAgIDogbV9sb2Nh
bGVOYW1lKGxvY2FsZU5hbWUpCi0gICAgLCBtX2J1ZmZlcihidWZmZXIpCi0gICAgLCBtX2J1ZmZl
ckxlbmd0aChidWZmZXJMZW5ndGgpCi17Ci19Ci0KLUhSRVNVTFQgVGV4dEFuYWx5emVySGVscGVy
OjpRdWVyeUludGVyZmFjZShfSW5fIFJFRklJRCByaWlkLCBfQ09NX091dHB0cl8gdm9pZCoqIHBw
dk9iamVjdCkKLXsKLSAgICBpZiAoIXBwdk9iamVjdCkKLSAgICAgICAgcmV0dXJuIEVfUE9JTlRF
UjsKLSAgICAqcHB2T2JqZWN0ID0gbnVsbHB0cjsKLSAgICBpZiAoSXNFcXVhbEdVSUQocmlpZCwg
X191dWlkb2YoSURXcml0ZVRleHRBbmFseXNpc1NpbmspKSkKLSAgICAgICAgKnBwdk9iamVjdCA9
IHN0YXRpY19jYXN0PElEV3JpdGVUZXh0QW5hbHlzaXNTaW5rKj4odGhpcyk7Ci0gICAgZWxzZSBp
ZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlkb2YoSURXcml0ZVRleHRBbmFseXNpc1NvdXJjZSkp
KQotICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SURXcml0ZVRleHRBbmFseXNpc1Np
bmsqPih0aGlzKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBFX0ZBSUw7Ci0KLSAgICBBZGRS
ZWYoKTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQotVUxPTkcgVGV4dEFuYWx5emVySGVscGVyOjpB
ZGRSZWYoKQotewotICAgIHJldHVybiArK21fcmVmQ291bnQ7Ci19Ci0KLVVMT05HIFRleHRBbmFs
eXplckhlbHBlcjo6UmVsZWFzZSgpCi17Ci0gICAgVUxPTkcgbmV3UmVmID0gLS1tX3JlZkNvdW50
OwotICAgIGlmICghbmV3UmVmKQotICAgICAgICBkZWxldGUodGhpcyk7Ci0KLSAgICByZXR1cm4g
bmV3UmVmOwotfQotCi1IUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6R2V0VGV4dEF0UG9zaXRp
b24oVUlOVDMyIHRleHRQb3NpdGlvbiwgY29uc3QgV0NIQVIqKiB0ZXh0U3RyaW5nLCBVSU5UMzIq
IHRleHRMZW5ndGgpCi17Ci0gICAgaWYgKCF0ZXh0U3RyaW5nIHx8ICF0ZXh0TGVuZ3RoKQotICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOwotCi0gICAgaWYgKHRleHRQb3NpdGlvbiA+PSBtX2J1ZmZl
ckxlbmd0aCkgewotICAgICAgICAqdGV4dFN0cmluZyA9IG51bGxwdHI7Ci0gICAgICAgICp0ZXh0
TGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuIFNfT0s7Ci0gICAgfQotCi0gICAgKnRleHRTdHJp
bmcgPSAmbV9idWZmZXJbdGV4dFBvc2l0aW9uXTsKLSAgICAqdGV4dExlbmd0aCA9IG1fYnVmZmVy
TGVuZ3RoIC0gdGV4dFBvc2l0aW9uOwotCi0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQg
VGV4dEFuYWx5emVySGVscGVyOjpHZXRUZXh0QmVmb3JlUG9zaXRpb24oVUlOVDMyIHRleHRQb3Np
dGlvbiwgY29uc3QgV0NIQVIqKiB0ZXh0U3RyaW5nLCBVSU5UMzIqIHRleHRMZW5ndGgpCi17Ci0g
ICAgaWYgKCF0ZXh0U3RyaW5nIHx8ICF0ZXh0TGVuZ3RoKQotICAgICAgICByZXR1cm4gRV9QT0lO
VEVSOwotCi0gICAgaWYgKCF0ZXh0UG9zaXRpb24gfHwgdGV4dFBvc2l0aW9uID4gbV9idWZmZXJM
ZW5ndGgpIHsKLSAgICAgICAgKnRleHRTdHJpbmcgPSBudWxscHRyOwotICAgICAgICAqdGV4dExl
bmd0aCA9IDA7Ci0gICAgICAgIHJldHVybiBTX09LOwotICAgIH0KLQotICAgICp0ZXh0U3RyaW5n
ID0gJm1fYnVmZmVyWzBdOwotICAgICp0ZXh0TGVuZ3RoID0gdGV4dFBvc2l0aW9uOwotCi0gICAg
cmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpHZXRMb2NhbGVO
YW1lKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiogdGV4dExlbmd0aCwgY29uc3QgV0NIQVIq
KiBsb2NhbGVOYW1lKQotewotICAgICpsb2NhbGVOYW1lID0gbV9sb2NhbGVOYW1lOwotICAgICp0
ZXh0TGVuZ3RoID0gbV9idWZmZXJMZW5ndGggLSB0ZXh0UG9zaXRpb247Ci0KLSAgICByZXR1cm4g
U19PSzsKLX0KLQotSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6OkdldE51bWJlclN1YnN0aXR1
dGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIqIHRleHRMZW5ndGgsIElEV3JpdGVOdW1i
ZXJTdWJzdGl0dXRpb24qKiBudW1iZXJTdWJzdGl0dXRpb24pCi17Ci0gICAgKnRleHRMZW5ndGgg
PSBtX2J1ZmZlckxlbmd0aCAtIHRleHRQb3NpdGlvbjsKLSAgICByZXR1cm4gU19PSzsKLX0KLQot
SFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6OlNldExpbmVCcmVha3BvaW50cyhVSU5UMzIgdGV4
dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgY29uc3QgRFdSSVRFX0xJTkVfQlJFQUtQT0lO
VCopCi17Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQotSFJFU1VMVCBUZXh0QW5hbHl6ZXJI
ZWxwZXI6OlNldFNjcmlwdEFuYWx5c2lzKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0
TGVuZ3RoLCBjb25zdCBEV1JJVEVfU0NSSVBUX0FOQUxZU0lTKiBhbmFseXNpcykKLXsKLSAgICBB
bmFseXplZFJ1biBjdXJyZW50ID0geyB0ZXh0UG9zaXRpb24sIHRleHRMZW5ndGgsICphbmFseXNp
cyB9OwotICAgIG1fYW5hbHl6ZWRSdW5zLmFwcGVuZChXVEZNb3ZlKGN1cnJlbnQpKTsKLQotICAg
IHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6U2V0QmlkaUxl
dmVsKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBVSU5UOCBleHBsaWNp
dExldmVsLCBVSU5UOCByZXNvbHZlZExldmVsKQotewotICAgIHJldHVybiBFX05PVElNUEw7Ci19
Ci0KLUhSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpTZXROdW1iZXJTdWJzdGl0dXRpb24oVUlO
VDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIElEV3JpdGVOdW1iZXJTdWJzdGl0
dXRpb24qKQotewotICAgIHJldHVybiBFX05PVElNUEw7Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Rl
eHRBbmFseXplckhlbHBlci5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmgJKG5vbmV4aXN0ZW50KQpA
QCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGR3cml0ZS5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgQW5hbHl6ZWRSdW4g
ewotICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24geyAwIH07Ci0gICAgdW5zaWduZWQgbGVuZ3Ro
IHsgMCB9OwotICAgIERXUklURV9TQ1JJUFRfQU5BTFlTSVMgYW5hbHlzaXM7Ci19OwotCi1zdHJ1
Y3QgVGV4dEFuYWx5emVySGVscGVyIDogcHVibGljIElEV3JpdGVUZXh0QW5hbHlzaXNTaW5rLCBJ
RFdyaXRlVGV4dEFuYWx5c2lzU291cmNlIHsKLSAgICBUZXh0QW5hbHl6ZXJIZWxwZXIoY29uc3Qg
V0NIQVIqIGxvY2FsZU5hbWUsIGNvbnN0IFdDSEFSKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxl
bmd0aCk7Ci0KLSAgICAvLyBJVW5rbm93bgotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBRdWVyeUludGVyZmFjZShfSW5fIFJFRklJRCwgX0NPTV9PdXRwdHJfIHZvaWQqKik7
Ci0gICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBBZGRSZWYoKTsKLSAgICB2aXJ0
dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2UoKTsKLQotICAgIC8vIElEV3JpdGVU
ZXh0QW5hbHlzaXNTb3VyY2UgCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IEdldFRleHRBdFBvc2l0aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIGNvbnN0IFdDSEFSKiogdGV4
dFN0cmluZywgVUlOVDMyKiB0ZXh0TGVuZ3RoKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgR2V0VGV4dEJlZm9yZVBvc2l0aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIGNv
bnN0IFdDSEFSKiogdGV4dFN0cmluZywgVUlOVDMyKiB0ZXh0TGVuZ3RoKTsKLSAgICB2aXJ0dWFs
IERXUklURV9SRUFESU5HX0RJUkVDVElPTiBTVERNRVRIT0RDQUxMVFlQRSBHZXRQYXJhZ3JhcGhS
ZWFkaW5nRGlyZWN0aW9uKCkgeyByZXR1cm4gRFdSSVRFX1JFQURJTkdfRElSRUNUSU9OX0xFRlRf
VE9fUklHSFQ7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0TG9j
YWxlTmFtZShVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIqIHRleHRMZW5ndGgsIGNvbnN0IFdD
SEFSKiogbG9jYWxlTmFtZSk7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IEdldE51bWJlclN1YnN0aXR1dGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIqIHRleHRM
ZW5ndGgsIElEV3JpdGVOdW1iZXJTdWJzdGl0dXRpb24qKik7Ci0KLSAgICAvLyBJRFdyaXRlVGV4
dEFuYWx5c2lzU2luawotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXRM
aW5lQnJlYWtwb2ludHMoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIGNv
bnN0IERXUklURV9MSU5FX0JSRUFLUE9JTlQqKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgU2V0U2NyaXB0QW5hbHlzaXMoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMy
IHRleHRMZW5ndGgsIGNvbnN0IERXUklURV9TQ1JJUFRfQU5BTFlTSVMqKTsKLSAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0QmlkaUxldmVsKFVJTlQzMiB0ZXh0UG9zaXRp
b24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBVSU5UOCBleHBsaWNpdExldmVsLCBVSU5UOCByZXNvbHZl
ZExldmVsKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0TnVtYmVy
U3Vic3RpdHV0aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBJRFdy
aXRlTnVtYmVyU3Vic3RpdHV0aW9uKik7Ci0KLSAgICBjb25zdCBXQ0hBUiogbV9sb2NhbGVOYW1l
IHsgbnVsbHB0ciB9OwotICAgIGNvbnN0IFdDSEFSKiBtX2J1ZmZlciB7IG51bGxwdHIgfTsKLSAg
ICB1bnNpZ25lZCBtX2J1ZmZlckxlbmd0aCB7IDAgfTsKLSAgICBWZWN0b3I8QW5hbHl6ZWRSdW4+
IG1fYW5hbHl6ZWRSdW5zOwotICAgIFVMT05HIG1fcmVmQ291bnQgeyAwIH07Ci19OwotCi19Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJhbnNmb3JtYXRpb25N
YXRyaXhEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAy
ODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJhbnNmb3Jt
YXRpb25NYXRyaXhEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw3NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotCi0jaWYg
UExBVEZPUk0oV0lOKQotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAi
RmxvYXRDb252ZXJzaW9uLmgiCi0KLSNpbmNsdWRlIDxkMmQxLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotVHJhbnNmb3JtYXRpb25NYXRyaXg6OlRyYW5zZm9ybWF0aW9uTWF0cml4KGNvbnN0
IEQyRDFfTUFUUklYXzNYMl9GJiB0KQotewotICAgIHNldEEodC5fMTEpOwotICAgIHNldEIodC5f
MTIpOwotICAgIHNldEModC5fMjEpOwotICAgIHNldEQodC5fMjIpOwotICAgIHNldEUodC5fMzEp
OwotICAgIHNldEYodC5fMzIpOwotfQotCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3Ig
RDJEMV9NQVRSSVhfM1gyX0YoKSBjb25zdAotewotICAgIHJldHVybiBEMkQxOjpNYXRyaXgzeDJG
KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoYSgpKSwKLSAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdChiKCkpLAotICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGMoKSksCi0gICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZCgpKSwKLSAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdChlKCkpLAotICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGYoKSkpOwotfQotCi1B
ZmZpbmVUcmFuc2Zvcm06OkFmZmluZVRyYW5zZm9ybShjb25zdCBEMkQxX01BVFJJWF8zWDJfRiYg
dCkKLXsKLSAgICBzZXRNYXRyaXgodC5fMTEsIHQuXzEyLCB0Ll8yMSwgdC5fMjIsIHQuXzMxLCB0
Ll8zMik7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3IgRDJEMV9NQVRSSVhfM1gyX0Yo
KSBjb25zdAotewotICAgIHJldHVybiBEMkQxOjpNYXRyaXgzeDJGKG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoYSgpKSwKLSAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChiKCkpLAotICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGMoKSksCi0gICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoZCgpKSwKLSAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChlKCkpLAotICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGYoKSkpOwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZURpcmVjdDJELmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlRGlyZWN0MkQuY3Bw
CShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0lt
YWdlRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1
ZGUgIkJpdG1hcEluZm8uaCIKLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUgIkltYWdlLmgi
Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRC5oIgotCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIGRlYWxsb2NDb250ZXh0KFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgaWYgKHBsYXRmb3JtQ29udGV4
dCkgewotICAgICAgICBpZiAoYXV0byogcmVuZGVyVGFyZ2V0ID0gcGxhdGZvcm1Db250ZXh0LT5y
ZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAg
IH0KLX0KLQotR0RJT2JqZWN0PEhCSVRNQVA+IGFsbG9jSW1hZ2UoSERDIGRjLCBJbnRTaXplIHNp
emUsIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiogcGxhdGZvcm1Db250ZXh0KQotewotICAgIEJp
dG1hcEluZm8gYm1wSW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZShzaXplKTsKLQotICAgIExQVk9J
RCBiaXRzID0gbnVsbHB0cjsKLSAgICBhdXRvIGhibXAgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0
ZURJQlNlY3Rpb24oZGMsICZibXBJbmZvLCBESUJfUkdCX0NPTE9SUywgJmJpdHMsIDAsIDApKTsK
LQotICAgIGlmICghcGxhdGZvcm1Db250ZXh0IHx8ICFoYm1wKQotICAgICAgICByZXR1cm4gaGJt
cDsKLQotICAgIC8vIEZJWE1FOiBVc2UgR0RJIEludGVyb3AgbGF5ZXIgdG8gY3JlYXRlIEhCSVRN
QVAgZnJvbSBEMkQgQml0bWFwCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gaGJt
cDsKLX0KLQotRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZVJl
ZiwgRmxvYXRTaXplIHNjYWxlKQotewotICAgIC8vIEZJWE1FOiBkdWUgdG8gdGhlIHdheSBkcmFn
IGltYWdlcyBhcmUgZG9uZSBvbiB3aW5kb3dzIHdlIG5lZWQgCi0gICAgLy8gdG8gcHJlcHJvY2Vz
cyB0aGUgYWxwaGEgY2hhbm5lbCA8cmRhcjovL3Byb2JsZW0vNTAxNTk0Nj4KLSAgICBpZiAoIWlt
YWdlUmVmKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEdESU9iamVjdDxIQklUTUFQ
PiBoYm1wOwotICAgIGF1dG8gaW1hZ2UgPSBhZG9wdEdESU9iamVjdChpbWFnZVJlZik7Ci0KLSAg
ICBJbnRTaXplIHNyY1NpemUgPSBkcmFnSW1hZ2VTaXplKGltYWdlLmdldCgpKTsKLSAgICBJbnRT
aXplIGRzdFNpemUoc3RhdGljX2Nhc3Q8aW50PihzcmNTaXplLndpZHRoKCkgKiBzY2FsZS53aWR0
aCgpKSwgc3RhdGljX2Nhc3Q8aW50PihzcmNTaXplLmhlaWdodCgpICogc2NhbGUuaGVpZ2h0KCkp
KTsKLQotICAgIEhXbmREQyBkYyhudWxscHRyKTsKLSAgICBhdXRvIGRzdERDID0gYWRvcHRHRElP
YmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoZGMpKTsKLSAgICBpZiAoZHN0REMpCi0gICAgICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0KLSAgICBpZiAoIWhibXApCi0gICAgICAgIGhibXAuc3dhcChp
bWFnZSk7Ci0gICAgcmV0dXJuIGhibXAubGVhaygpOwotfQotCi1EcmFnSW1hZ2VSZWYgY3JlYXRl
RHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWcsIEltYWdlT3JpZW50YXRpb24pCi17Ci0gICAg
SFduZERDIGRjKG51bGxwdHIpOwotICAgIGF1dG8gd29ya2luZ0RDID0gYWRvcHRHRElPYmplY3Qo
OjpDcmVhdGVDb21wYXRpYmxlREMoZGMpKTsKLSAgICBpZiAoIXdvcmtpbmdEQykKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBudWxs
cHRyOwotfQotICAgIAotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIyNyw3ICszMjI3LDcg
QEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllcjo6c2V0dXBGaWx0ZQogCiAgICAgYXV0byBy
b290UmVsYXRpdmVCb3VuZHMgPSBjYWxjdWxhdGVMYXllckJvdW5kcyhwYWludGluZ0luZm8ucm9v
dExheWVyLCBvZmZzZXRGcm9tUm9vdCwgeyB9KTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogZmls
dGVyQ29udGV4dCA9IHBhaW50aW5nRmlsdGVycy0+YmVnaW5GaWx0ZXJFZmZlY3QoZGVzdGluYXRp
b25Db250ZXh0LCByZW5kZXJlcigpLCBlbmNsb3NpbmdJbnRSZWN0KHJvb3RSZWxhdGl2ZUJvdW5k
cyksIGVuY2xvc2luZ0ludFJlY3QocGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0KSwgZW5jbG9z
aW5nSW50UmVjdChmaWx0ZXJSZXBhaW50UmVjdCkpOworICAgIEdyYXBoaWNzQ29udGV4dCogZmls
dGVyQ29udGV4dCA9IHBhaW50aW5nRmlsdGVycy0+YmVnaW5GaWx0ZXJFZmZlY3QocmVuZGVyZXIo
KSwgZW5jbG9zaW5nSW50UmVjdChyb290UmVsYXRpdmVCb3VuZHMpLCBlbmNsb3NpbmdJbnRSZWN0
KHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCksIGVuY2xvc2luZ0ludFJlY3QoZmlsdGVyUmVw
YWludFJlY3QpKTsKICAgICBpZiAoIWZpbHRlckNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJG
aWx0ZXJzLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyRmlsdGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSwyNCArMTI5LDE5
IEBAIEdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjppbnAKICAgICByZXR1cm4g
bV9zb3VyY2VJbWFnZSA/ICZtX3NvdXJjZUltYWdlLT5jb250ZXh0KCkgOiBudWxscHRyOwogfQog
Ci12b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChj
b25zdCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRleHQpCit2b2lkIFJlbmRlckxheWVyRmls
dGVyczo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpCiB7CiAgICAgYXV0byYgZmlsdGVy
ID0gKm1fZmlsdGVyOwogICAgIGF1dG8gbG9naWNhbFNpemUgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0
ZXJTY2FsZShtX2ZpbHRlclJlZ2lvbi5zaXplKCkpOwogCiAgICAgaWYgKCFtX3NvdXJjZUltYWdl
IHx8IG1fc291cmNlSW1hZ2UtPmxvZ2ljYWxTaXplKCkgIT0gbG9naWNhbFNpemUpIHsKLSNpZiBV
U0UoRElSRUNUMkQpCi0gICAgICAgIG1fc291cmNlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGxvZ2ljYWxTaXplLCBmaWx0ZXIucmVuZGVyaW5nTW9kZSgpLCAmdGFyZ2V0Q29udGV4dCwgMSwg
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0jZWxz
ZQotICAgICAgICBVTlVTRURfUEFSQU0odGFyZ2V0Q29udGV4dCk7CiAgICAgICAgIG1fc291cmNl
SW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBmaWx0ZXIucmVuZGVyaW5n
TW9kZSgpLCBTaG91bGRVc2VEaXNwbGF5TGlzdDo6Tm8sIFJlbmRlcmluZ1B1cnBvc2U6OkRPTSwg
MSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCwgbV9s
YXllci5yZW5kZXJlcigpLmhvc3RXaW5kb3coKSk7Ci0jZW5kaWYKICAgICAgICAgaWYgKGF1dG8g
Y29udGV4dCA9IGlucHV0Q29udGV4dCgpKQogICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoZmls
dGVyLmZpbHRlclNjYWxlKCkpOwogICAgIH0KIH0KIAotR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJM
YXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRp
b25Db250ZXh0LCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgTGF5b3V0UmVjdCYgZmls
dGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0
JiBsYXllclJlcGFpbnRSZWN0KQorR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6
OmJlZ2luRmlsdGVyRWZmZWN0KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBMYXlvdXRS
ZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExh
eW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCiB7CiAgICAgaWYgKCFtX2ZpbHRlcikKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMDAsNyArMTk1LDcgQEAgR3JhcGhpY3NDb250ZXh0KiBS
ZW5kZXJMYXllckZpbHRlcnM6OmJlZwogICAgIHJlc2V0RGlydHlTb3VyY2VSZWN0KCk7CiAKICAg
ICBmaWx0ZXIuc2V0RmlsdGVyUmVnaW9uKG1fZmlsdGVyUmVnaW9uKTsKLSAgICBhbGxvY2F0ZUJh
Y2tpbmdTdG9yZUlmTmVlZGVkKGRlc3RpbmF0aW9uQ29udGV4dCk7CisgICAgYWxsb2NhdGVCYWNr
aW5nU3RvcmVJZk5lZWRlZCgpOwogCiAgICAgYXV0byogc291cmNlR3JhcGhpY3NDb250ZXh0ID0g
aW5wdXRDb250ZXh0KCk7CiAgICAgaWYgKCFzb3VyY2VHcmFwaGljc0NvbnRleHQpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCShyZXZpc2lv
biAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDE0ICs2MywxNCBAQCBwdWJsaWM6CiAgICAgLy8gUGVy
IHJlbmRlcgogICAgIExheW91dFJlY3QgcmVwYWludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
cGFpbnRSZWN0OyB9CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGJlZ2luRmlsdGVyRWZmZWN0KEdy
YXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBSZW5kZXJFbGVtZW50JiwgY29uc3Qg
TGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBj
b25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KTsKKyAgICBHcmFwaGljc0NvbnRleHQq
IGJlZ2luRmlsdGVyRWZmZWN0KFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0
ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3Qm
IGxheWVyUmVwYWludFJlY3QpOwogICAgIHZvaWQgYXBwbHlGaWx0ZXJFZmZlY3QoR3JhcGhpY3ND
b250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQpOwogCiBwcml2YXRlOgogICAgIHZvaWQgbm90aWZ5
RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UmLCBjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmKSBmaW5h
bDsKICAgICB2b2lkIHJlc2V0RGlydHlTb3VyY2VSZWN0KCkgeyBtX2RpcnR5U291cmNlUmVjdCA9
IExheW91dFJlY3QoKTsgfQogICAgIEdyYXBoaWNzQ29udGV4dCogaW5wdXRDb250ZXh0KCk7Ci0g
ICAgdm9pZCBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYgdGFyZ2V0Q29udGV4dCk7CisgICAgdm9pZCBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVk
KCk7CiAKICAgICBSZW5kZXJMYXllciYgbV9sYXllcjsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNw
cAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0LDcg
QEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcAogICAgIEFmZmluZVRy
YW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0
ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKICAg
ICBpZiAoIWNsaXBwZXJEYXRhLmlzVmFsaWRGb3JHZW9tZXRyeShvYmplY3RCb3VuZGluZ0JveCwg
Y2xpcHBlZENvbnRlbnRCb3VuZHMsIGFic29sdXRlVHJhbnNmb3JtKSkgewogICAgICAgICAvLyBG
SVhNRSAoMTQ5NDY5KTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlv
bmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBu
ZXN0ZWQgY2xpcHBpbmcsIHRob3VnaC4KLSAgICAgICAgYXV0byBtYXNrSW1hZ2UgPSBTVkdSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjbGlwcGVkQ29udGVudEJvdW5kcywgYWJz
b2x1dGVUcmFuc2Zvcm0sIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkLCBudWxscHRyLCAmY29udGV4dCk7CisgICAgICAgIGF1dG8gbWFz
a0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY2xpcHBlZENv
bnRlbnRCb3VuZHMsIGFic29sdXRlVHJhbnNmb3JtLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbnVsbHB0cik7CiAgICAgICAgIGlm
ICghbWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3ICsx
NTQsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291CiAjZWxzZQog
ICAgIGF1dG8gY29sb3JTcGFjZSA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpOwogI2Vu
ZGlmCi0gICAgYXV0byBzb3VyY2VHcmFwaGljID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
SW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgZWZmZWN0aXZlVHJhbnNmb3Jt
LCBjb2xvclNwYWNlLCBmaWx0ZXJEYXRhLT5maWx0ZXItPnJlbmRlcmluZ01vZGUoKSwgcmVuZGVy
ZXIuaG9zdFdpbmRvdygpLCBjb250ZXh0KTsKKyAgICBhdXRvIHNvdXJjZUdyYXBoaWMgPSBTVkdS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0ZXJEYXRhLT5kcmF3aW5nUmVn
aW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIGZpbHRlckRhdGEtPmZpbHRlci0+
cmVuZGVyaW5nTW9kZSgpLCByZW5kZXJlci5ob3N0V2luZG93KCkpOwogICAgIGlmICghc291cmNl
R3JhcGhpYykgewogICAgICAgICBBU1NFUlQobV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFp
bnMoJnJlbmRlcmVyKSk7CiAgICAgICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dCA9IGNvbnRl
eHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
TWFza2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg0LDcgKzg0LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBw
bHlSZXNvdQogI2VuZGlmCiAKICAgICAgICAgLy8gRklYTUUgKDE0OTQ3MCk6IFRoaXMgaW1hZ2Ug
YnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2lu
ZyBpdCBtYXRjaCB0aGUgY29udGV4dCBicmVha3MgYWxwaGEgbWFza2luZywgdGhvdWdoLgotICAg
ICAgICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJ
bWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIG1hc2tDb2xvclNwYWNl
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBudWxscHRyLCBjb250ZXh0KTsKKyAgICAg
ICAgbWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1h
Z2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBtYXNrQ29sb3JTcGFjZSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbnVsbHB0cik7CiAgICAgICAgIGlmICghbWFz
a2VyRGF0YS0+bWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4
dC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNiw3ICsyMjYsNyBA
QCBBZmZpbmVUcmFuc2Zvcm0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsCiAgICAgcmV0dXJuIGFi
c29sdXRlVHJhbnNmb3JtOwogfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkK
K1JlZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFi
c29sdXRlVHJhbnNmb3JtLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2Us
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dykKIHsKICAgICBJbnRSZWN0IHBhaW50UmVjdCA9IGNhbGN1bGF0ZUltYWdlQnVmZmVyUmVjdCh0
YXJnZXRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSk7CiAgICAgLy8gRG9uJ3QgY3JlYXRlIGVtcHR5
IEltYWdlQnVmZmVycy4KQEAgLTIzOCwxMiArMjM4LDcgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBT
VkdSZW5kZXJpbmdDb250ZXh0OgogICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBp
bmcoY2xhbXBlZFNpemUsIHNjYWxlKSkKICAgICAgICAgY2xhbXBlZFNpemUgPSBjbGFtcGVkU2l6
ZSAqIHNjYWxlOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0LCAx
LCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0oY29udGV4dCk7CiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
Y2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIFNob3VsZFVzZURpc3BsYXlMaXN0OjpObywgUmVu
ZGVyaW5nUHVycG9zZTo6RE9NLCAxLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgsIGhv
c3RXaW5kb3cpOwotI2VuZGlmCiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKQEAgLTI1Niw3ICsyNTEsNyBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1Jl
bmRlcmluZ0NvbnRleHQ6CiAgICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQogCi1SZWZQdHI8SW1h
Z2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkUmVjdCwgY29uc3Qg
RGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK1JlZlB0cjxJbWFnZUJ1ZmZl
cj4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0
JiB0YXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRSZWN0LCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkK
IHsKICAgICBJbnRTaXplIGNsYW1wZWRTaXplID0gcm91bmRlZEludFNpemUoY2xhbXBlZFJlY3Qu
c2l6ZSgpKTsKICAgICBGbG9hdFNpemUgdW5jbGFtcGVkU2l6ZSA9IHJvdW5kZWRJbnRTaXplKHRh
cmdldFJlY3Quc2l6ZSgpKTsKQEAgLTI2NSwxMiArMjYwLDcgQEAgUmVmUHRyPEltYWdlQnVmZmVy
PiBTVkdSZW5kZXJpbmdDb250ZXh0OgogICAgIGlmIChjbGFtcGVkU2l6ZS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIGF1dG8gaW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCByZW5kZXJpbmdNb2Rl
LCBjb250ZXh0LCAxLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIDEsIGNvbG9yU3BhY2UsIFBp
eGVsRm9ybWF0OjpCR1JBOCk7Ci0jZW5kaWYKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MCw4ICs2MCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmVUb1JlbmRlclNW
R0NvbnRlbnQoUmVuZGVyRWxlbWVudCYsIFBhaW50SW5mbyYsIE5lZWRzR3JhcGhpY3NDb250ZXh0
U2F2ZSA9IERvbnRTYXZlR3JhcGhpY3NDb250ZXh0KTsKICAgICBib29sIGlzUmVuZGVyaW5nUHJl
cGFyZWQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ0ZsYWdzICYgUmVuZGVyaW5nUHJlcGFy
ZWQ7IH0KIAotICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNv
bHV0ZVRyYW5zZm9ybSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgUmVuZGVyaW5nTW9k
ZSwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyLCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0g
bnVsbHB0cik7Ci0gICAgc3RhdGljIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRS
ZWN0LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBH
cmFwaGljc0NvbnRleHQqID0gbnVsbHB0cik7CisgICAgc3RhdGljIFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOworICAg
IHN0YXRpYyBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkUmVjdCwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiwgUmVuZGVyaW5nTW9kZSk7CiAKICAgICBzdGF0aWMgdm9pZCBy
ZW5kZXJTdWJ0cmVlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYsIFJlbmRlckVsZW1lbnQmLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKICAgICBzdGF0aWMgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZl
cihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4mLCBi
b29sIHNhZmVUb0NsZWFyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTUgKzY2LDYgQEAKICNpbmNsdWRl
ICJMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLmgiCiAjZW5kaWYKIAotI2lmIFVTRShESVJF
Q1QyRCkKLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2RlckRp
cmVjdDJELmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRl
IDxkMmQxLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdJbWFnZTo6U1ZH
SW1hZ2UoSW1hZ2VPYnNlcnZlciYgb2JzZXJ2ZXIpCkBAIC0yMTcsMTIgKzIwOCwxMiBAQCBJbWFn
ZURyYXdSZXN1bHQgU1ZHSW1hZ2U6OmRyYXdGb3JDb250YWluCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotUmVmUHRyPE5hdGl2ZUltYWdlPiBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQorUmVmUHRyPE5hdGl2
ZUltYWdlPiBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQogewotICAgIHJl
dHVybiBuYXRpdmVJbWFnZSh0YXJnZXRDb250ZXh0KTsKKyAgICByZXR1cm4gbmF0aXZlSW1hZ2Uo
KTsKIH0KIAotUmVmUHRyPE5hdGl2ZUltYWdlPiBTVkdJbWFnZTo6bmF0aXZlSW1hZ2UoY29uc3Qg
R3JhcGhpY3NDb250ZXh0KikKK1JlZlB0cjxOYXRpdmVJbWFnZT4gU1ZHSW1hZ2U6Om5hdGl2ZUlt
YWdlKCkKIHsKICAgICByZXR1cm4gbmF0aXZlSW1hZ2Uoc2l6ZSgpLCBGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCBzaXplKCkpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gMjg3ODEyKQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTg2LDggKzg2LDggQEAgcHJpdmF0ZToKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMg
dG8gYmUgbGVzcyBjb25zZXJ2YXRpdmUuCiAgICAgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVP
cGFxdWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgUmVmUHRyPE5hdGl2
ZUltYWdlPiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQq
ID0gbnVsbHB0cikgZmluYWw7Ci0gICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZShj
b25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgZmluYWw7CisgICAgUmVmUHRyPE5hdGl2
ZUltYWdlPiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIGZpbmFsOworICAgIFJlZlB0cjxO
YXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2UoKSBmaW5hbDsKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+
IG5hdGl2ZUltYWdlKGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZVJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CiAKICAgICB2b2lkIHN0YXJ0QW5p
bWF0aW9uVGltZXJGaXJlZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlRm9yQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSw5ICs1OSw5IEBAIHZvaWQgU1ZHSW1hZ2VGb3JDb250YWluZXI6OmRy
YXdQYXR0ZXJuKEcKICAgICBtX2ltYWdlLT5kcmF3UGF0dGVybkZvckNvbnRhaW5lcihjb250ZXh0
LCBtX2NvbnRhaW5lclNpemUsIG1fY29udGFpbmVyWm9vbSwgbV9pbml0aWFsRnJhZ21lbnRVUkws
IHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBkc3RSZWN0LCBvcHRp
b25zKTsKIH0KIAotUmVmUHRyPE5hdGl2ZUltYWdlPiBTVkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250
ZXh0KQorUmVmUHRyPE5hdGl2ZUltYWdlPiBTVkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKQogewotICAgIHJldHVybiBtX2ltYWdlLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSh0YXJnZXRDb250ZXh0KTsKKyAgICByZXR1cm4gbV9pbWFnZS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFp
bmVyLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZUZvckNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1
YmxpYzoKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgdG8gYmUgbGVzcyBjb25zZXJ2YXRp
dmUuCiAgICAgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBmYWxzZTsgfQogCi0gICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cikgZmluYWw7Cisg
ICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIGZpbmFs
OwogCiBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIFNWR0ltYWdlRm9yQ29udGFpbmVyKFNW
R0ltYWdlKiwgY29uc3QgRmxvYXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWluZXJa
b29tLCBjb25zdCBVUkwmIGluaXRpYWxGcmFnbWVudFVSTCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNp
b24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSw0OSBAQAorMjAyMi0wMS0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIERpcmVjdDJECisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5OTkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtRlRXLmNtYWtlOiBSZW1v
dmVkLgorICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb246OmVuY29kZSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Q29uZmlndXJhdGlvbjo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpTaGFyZWFibGVCaXRtYXApOgorICAgICAg
ICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6On5TaGFyZWFibGVCaXRtYXApOgorICAgICAgICAo
V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6Om51bUJ5dGVzRm9yU2l6ZSk6CisgICAgICAgICogU2hh
cmVkL1NoYXJlYWJsZUJpdG1hcC5oOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6
OmNyZWF0ZVBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6
OmR4U3VyZmFjZSk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRt
YXBEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0JhY2tpbmdTdG9y
ZS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vQmFja2lu
Z1N0b3JlRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2Vi
UGFnZVByb3h5V2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkZXZpY2Ug
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldERldmlj
ZSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdp
bi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpzaG93UG9wdXBN
ZW51KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OnBhaW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OnNldHVwU3dhcENoYWluKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OmNvbmZpZ3VyZUJh
Y2tpbmdTdG9yZSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1l
bnVQcm94eVdpbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6OldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
OjpvblNpemVFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldHVwU3dhcENoYWlu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y29uZmlndXJlQmFja2luZ1N0
b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuaDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlldzo6ZDNkRGV2aWNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6ZDNkSW1tZWRpYXRlQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnU6OnNob3cpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGlj
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljczo6
ZGlzcGxheSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OmdldEltYWdlRm9yRmluZE1hdGNo
KToKKwogMjAyMi0wMS0wOCAgVHlsZXIgV2lsY29jayAgPHR5bGVyX3dAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFYOiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRGb2N1c2VkKHRydWUpIHNob3VsZCBt
YWtlIHRoZSB3ZWJwYWdlIGZvY3VzZWQsIGFuZCBtYWtlIHdlYiBjb250ZW50IHRoZSBmaXJzdCBy
ZXNwb25kZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm1GVFcuY21ha2UKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZQkocmV2aXNpb24gMjg3ODEyKQor
KysgU291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDE5
NSArMCwwIEBACi1zZXQoV2ViS2l0X09VVFBVVF9OQU1FIFdlYktpdDIpCi1zZXQoV2ViUHJvY2Vz
c19PVVRQVVRfTkFNRSBXZWJLaXRXZWJQcm9jZXNzKQotc2V0KE5ldHdvcmtQcm9jZXNzX09VVFBV
VF9OQU1FIFdlYktpdE5ldHdvcmtQcm9jZXNzKQotc2V0KFBsdWdpblByb2Nlc3NfT1VUUFVUX05B
TUUgV2ViS2l0UGx1Z2luUHJvY2VzcykKLXNldChHUFVQcm9jZXNzX09VVFBVVF9OQU1FIFdlYktp
dEdQVVByb2Nlc3MpCi0KLWluY2x1ZGUoSGVhZGVycy5jbWFrZSkKLQotYWRkX2RlZmluaXRpb25z
KC1EQlVJTERJTkdfV0VCS0lUKQotCi1saXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwotICAgIE5l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNw
cAotCi0gICAgTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKLQot
ICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NNYWluQ3VybC5jcHAKLQotICAg
IFBsYXRmb3JtL0lQQy93aW4vQXR0YWNobWVudFdpbi5jcHAKLSAgICBQbGF0Zm9ybS9JUEMvd2lu
L0Nvbm5lY3Rpb25XaW4uY3BwCi0KLSAgICBQbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNwcAotCi0gICAgUGxhdGZvcm0vd2luL0xvZ2dpbmdXaW4u
Y3BwCi0gICAgUGxhdGZvcm0vd2luL01vZHVsZVdpbi5jcHAKLSAgICBQbGF0Zm9ybS93aW4vU2hh
cmVkTWVtb3J5V2luLmNwcAotCi0gICAgU2hhcmVkL0FQSS9jL2N1cmwvV0tDZXJ0aWZpY2F0ZUlu
Zm9DdXJsLmNwcAotCi0gICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5N
b2R1bGVOb25lLmNwcAotCi0gICAgU2hhcmVkL3dpbi9BdXhpbGlhcnlQcm9jZXNzTWFpbldpbi5j
cHAKLSAgICBTaGFyZWQvd2luL05hdGl2ZVdlYktleWJvYXJkRXZlbnRXaW4uY3BwCi0gICAgU2hh
cmVkL3dpbi9OYXRpdmVXZWJNb3VzZUV2ZW50V2luLmNwcAotICAgIFNoYXJlZC93aW4vTmF0aXZl
V2ViVG91Y2hFdmVudFdpbi5jcHAKLSAgICBTaGFyZWQvd2luL05hdGl2ZVdlYldoZWVsRXZlbnRX
aW4uY3BwCi0gICAgU2hhcmVkL3dpbi9XZWJFdmVudEZhY3RvcnkuY3BwCi0KLSAgICBVSVByb2Nl
c3MvQmFja2luZ1N0b3JlLmNwcAotICAgIFVJUHJvY2Vzcy9EZWZhdWx0VW5kb0NvbnRyb2xsZXIu
Y3BwCi0gICAgVUlQcm9jZXNzL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZ05vbmUuY3BwCi0gICAg
VUlQcm9jZXNzL1dlYkdyYW1tYXJEZXRhaWwuY3BwCi0gICAgVUlQcm9jZXNzL1dlYlZpZXdwb3J0
QXR0cmlidXRlcy5jcHAKLQotICAgIFVJUHJvY2Vzcy9BUEkvQy9XS1ZpZXdwb3J0QXR0cmlidXRl
cy5jcHAKLQotICAgIFVJUHJvY2Vzcy9BUEkvQy9jdXJsL1dLUHJvdGVjdGlvblNwYWNlQ3VybC5j
cHAKLSAgICBVSVByb2Nlc3MvQVBJL0MvY3VybC9XS1dlYnNpdGVEYXRhU3RvcmVSZWZDdXJsLmNw
cAotCi0gICAgVUlQcm9jZXNzL0FQSS9DL3dpbi9XS1ZpZXcuY3BwCi0KLSAgICBVSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5j
cHAKLQotICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclVJUHJveHlXaW4u
Y3BwCi0KLSAgICBVSVByb2Nlc3MvTGF1bmNoZXIvd2luL1Byb2Nlc3NMYXVuY2hlcldpbi5jcHAK
LQotICAgIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNw
cAotCi0gICAgVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3dpbi9XZWJzaXRlRGF0YVN0b3JlV2luLmNw
cAotCi0gICAgVUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1wbC5jcHAKLSAgICBVSVByb2Nlc3Mv
d2luL1dlYkNvbnRleHRNZW51UHJveHlXaW4uY3BwCi0gICAgVUlQcm9jZXNzL3dpbi9XZWJQYWdl
UHJveHlXaW4uY3BwCi0gICAgVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAK
LSAgICBVSVByb2Nlc3Mvd2luL1dlYlByb2Nlc3NQb29sV2luLmNwcAotICAgIFVJUHJvY2Vzcy93
aW4vV2ViVmlldy5jcHAKLQotICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvd2luL0luamVj
dGVkQnVuZGxlV2luLmNwcAotCi0gICAgV2ViUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3Bl
Y3RvclVJV2luLmNwcAotCi0gICAgV2ViUHJvY2Vzcy9NZWRpYUNhY2hlL1dlYk1lZGlhS2V5U3Rv
cmFnZU1hbmFnZXIuY3BwCi0KLSAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dpbi9XZWJQ
b3B1cE1lbnVXaW4uY3BwCi0KLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWRTdXJm
YWNlLmNwcAotCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29t
cG9zaXRpbmdDb29yZGluYXRvci5jcHAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCi0gICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5jcHAKLQotICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5jcHAKLQotICAgIFdlYlByb2Nlc3Mv
d2luL1dlYlByb2Nlc3NNYWluV2luLmNwcAotICAgIFdlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NX
aW4uY3BwCi0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAg
IiR7V0VCS0lUX0RJUn0vUGxhdGZvcm0vY2xhc3NpZmllciIKLSAgICAiJHtXRUJLSVRfRElSfS9Q
bHVnaW5Qcm9jZXNzL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvQVBJL2Mvd2luIgot
ICAgICIke1dFQktJVF9ESVJ9L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzIgotICAgICIke1dF
QktJVF9ESVJ9L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvciIK
LSAgICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvUGx1Z2lucy93aW4iCi0gICAgIiR7V0VCS0lUX0RJ
Un0vU2hhcmVkL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL0MvY2Fpcm8i
Ci0gICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2N1cmwiCi0gICAgIiR7V0VCS0lU
X0RJUn0vVUlQcm9jZXNzL0FQSS9DL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3Mv
QVBJL2NwcC93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS93aW4iCi0gICAg
IiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MiCi0gICAgIiR7V0VC
S0lUX0RJUn0vVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQiCi0gICAgIiR7V0VCS0lUX0RJUn0v
VUlQcm9jZXNzL0luc3BlY3Rvci93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL1Bs
dWdpbnMvd2luIgotICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy93aW4iCi0gICAgIiR7V0VC
S0lUX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvd2luIgotICAgICIke1dFQktJ
VF9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL3dpbi9ET00iCi0gICAgIiR7V0VC
S0lUX0RJUn0vV2ViUHJvY2Vzcy9JbnNwZWN0b3Ivd2luIgotICAgICIke1dFQktJVF9ESVJ9L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvd2luIgotICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzIgotICAgICIke1dFQktJVF9ESVJ9L1dlYlBy
b2Nlc3MvV2ViUGFnZS93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vd2luIgotKQotCi1saXN0KEFQ
UEVORCBXZWJLaXRfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKLSkKLQotc2V0KFdlYktpdENv
bW1vbkluY2x1ZGVEaXJlY3RvcmllcyAke1dlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTfSkKLXNl
dChXZWJLaXRDb21tb25TeXN0ZW1JbmNsdWRlRGlyZWN0b3JpZXMgJHtXZWJLaXRfU1lTVEVNX0lO
Q0xVREVfRElSRUNUT1JJRVN9KQotCi1saXN0KEFQUEVORCBXZWJQcm9jZXNzX1NPVVJDRVMKLSAg
ICBXZWJQcm9jZXNzL0VudHJ5UG9pbnQvd2luL1dlYlByb2Nlc3NNYWluLmNwcAotKQotCi1saXN0
KEFQUEVORCBOZXR3b3JrUHJvY2Vzc19TT1VSQ0VTCi0gICAgTmV0d29ya1Byb2Nlc3MvRW50cnlQ
b2ludC93aW4vTmV0d29ya1Byb2Nlc3NNYWluLmNwcAotKQotCi1saXN0KEFQUEVORCBHUFVQcm9j
ZXNzX1NPVVJDRVMKLSAgICBHUFVQcm9jZXNzL0VudHJ5UG9pbnQvd2luL0dQVVByb2Nlc3NNYWlu
LmNwcAotKQotCi1hZGRfZGVmaW5pdGlvbnMoLURVU0VfRElSRUNUMkQ9MSAtRFVTRV9DVVJMPTEp
Ci0KLWxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCi0gICAgTmV0d29ya1Byb2Nlc3MvQ29va2ll
cy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJDdXJsLmNwcAotCi0gICAgTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCi0gICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlSU9DaGFubmVsQ3VybC5jcHAKLQotICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0
d29ya0RhdGFUYXNrQ3VybC5jcHAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9j
ZXNzQ3VybC5jcHAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtTZXNzaW9uQ3VybC5j
cHAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Q3VybC5j
cHAKLQotICAgIFNoYXJlZC9jdXJsL1dlYkNvcmVBcmd1bWVudENvZGVyc0N1cmwuY3BwCi0KLSAg
ICBTaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAotCi0gICAgVUlQcm9jZXNz
L3dpbi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHAKLQotICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvY3VybC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAotKQotCi1saXN0KEFQUEVO
RCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQ
cm9jZXNzL2N1cmwiCi0gICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9jdXJsIgotKQotCi1saXN0KEFQUEVORCBXZWJLaXRfUFJJVkFURV9MSUJSQVJJRVMKLSAgICBP
cGVuU1NMOjpTU0wKLSAgICBEMmQxLmxpYgotICAgIEQzZDExLmxpYgotICAgIER3cml0ZQotICAg
IER4Z2kubGliCi0gICAgRHhndWlkCi0gICAgV2luZG93c0NvZGVjcwotICAgIG1mdXVpZC5saWIK
LSAgICBzdHJtaWlkcy5saWIKLSkKLQotaWYgKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SKQotICAg
IGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCi0gICAgICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Iv
c29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKLSAgICAgICAgVUlQcm9jZXNzL0luc3Bl
Y3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmNwcAotCi0gICAgICAg
IFVJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlXaW4uY3Bw
Ci0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKLSAg
ICAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL3NvY2tldCIKLSAgICApCi1lbmRpZiAoKQot
Ci0jIFdpbmRvd3Mgc3BlY2lmaWMKLWxpc3QoQVBQRU5EIFdlYktpdF9QVUJMSUNfRlJBTUVXT1JL
X0hFQURFUlMKLSAgICBTaGFyZWQvQVBJL2MvY3VybC9XS0NlcnRpZmljYXRlSW5mb0N1cmwuaAot
Ci0gICAgU2hhcmVkL0FQSS9jL3dpbi9XS0Jhc2VXaW4uaAotCi0gICAgVUlQcm9jZXNzL0FQSS9D
L2N1cmwvV0tQcm90ZWN0aW9uU3BhY2VDdXJsLmgKLSAgICBVSVByb2Nlc3MvQVBJL0MvY3VybC9X
S1dlYnNpdGVEYXRhU3RvcmVSZWZDdXJsLmgKLQotICAgIFVJUHJvY2Vzcy9BUEkvQy93aW4vV0tW
aWV3LmgKLSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcAko
cmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTQgKzc1LDYgQEAgdm9pZCBTaGFyZWFibGVCaXRt
YXA6OkhhbmRsZTo6Y2xlYXIoKQogdm9pZCBTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb246
OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBj
b2xvclNwYWNlIDw8IGlzT3BhcXVlOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBTaGFyZWRNZW1v
cnk6OkhhbmRsZTo6ZW5jb2RlSGFuZGxlKGVuY29kZXIsIHNoYXJlZFJlc291cmNlSGFuZGxlKTsK
LQotICAgIC8vIEhhbmQgb2ZmIG93bmVyc2hpcCBvZiBvdXIgSEFORExFIHRvIHRoZSByZWNlaXZp
bmcgcHJvY2Vzcy4gSXQgd2lsbCBjbG9zZSBpdCBmb3IgdXMuCi0gICAgLy8gRklYTUU6IElmIHRo
ZSByZWNlaXZpbmcgcHJvY2VzcyBjcmFzaGVzIGJlZm9yZSBpdCByZWNlaXZlcyB0aGUgbWVtb3J5
LCB0aGUgbWVtb3J5IHdpbGwgYmUKLSAgICAvLyBsZWFrZWQuIFNlZSA8aHR0cDovL3dlYmtpdC5v
cmcvYi80NzUwMj4uCi0gICAgc2hhcmVkUmVzb3VyY2VIYW5kbGUgPSBudWxscHRyOwotI2VuZGlm
CiB9CiAKIGJvb2wgU2hhcmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9uOjpkZWNvZGUoSVBDOjpE
ZWNvZGVyJiBkZWNvZGVyLCBDb25maWd1cmF0aW9uJiByZXN1bHQpCkBAIC05OCwxNSArOTAsNiBA
QCBib29sIFNoYXJlYWJsZUJpdG1hcDo6Q29uZmlndXJhdGlvbjo6ZGVjCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIHJlc3VsdCA9IENvbmZpZ3VyYXRpb24geyBXVEZNb3ZlKCpjb2xvclNw
YWNlKSwgKmlzT3BhcXVlIH07Ci0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgYXV0byBwcm9jZXNz
U3BlY2lmaWNIYW5kbGUgPSBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZGVjb2RlSGFuZGxlKGRlY29k
ZXIpOwotICAgIGlmICghcHJvY2Vzc1NwZWNpZmljSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXN1bHQuc2hhcmVkUmVzb3VyY2VIYW5kbGUgPSBwcm9jZXNzU3BlY2lmaWNI
YW5kbGUudmFsdWUoKTsKLSNlbmRpZgotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE4Nywx
OCArMTcwLDEyIEBAIFNoYXJlYWJsZUJpdG1hcDo6U2hhcmVhYmxlQml0bWFwKGNvbnN0IEkKICAg
ICAsIG1fc2hhcmVkTWVtb3J5KHNoYXJlZE1lbW9yeSkKICAgICAsIG1fZGF0YShudWxscHRyKQog
ewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBjcmVhdGVTaGFyZWRSZXNvdXJjZSgpOwotI2VuZGlm
CiB9CiAKIFNoYXJlYWJsZUJpdG1hcDo6flNoYXJlYWJsZUJpdG1hcCgpCiB7CiAgICAgaWYgKCFp
c0JhY2tlZEJ5U2hhcmVkTWVtb3J5KCkpCiAgICAgICAgIFNoYXJlYWJsZUJpdG1hcE1hbGxvYzo6
ZnJlZShtX2RhdGEpOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBkaXNwb3NlU2hhcmVkUmVzb3Vy
Y2UoKTsKLSNlbmRpZgogfQogCiB2b2lkKiBTaGFyZWFibGVCaXRtYXA6OmRhdGEoKSBjb25zdApA
QCAtMjEyLDEyICsxODksNyBAQCB2b2lkKiBTaGFyZWFibGVCaXRtYXA6OmRhdGEoKSBjb25zdAog
CiBDaGVja2VkVWludDMyIFNoYXJlYWJsZUJpdG1hcDo6bnVtQnl0ZXNGb3JTaXplKFdlYkNvcmU6
OkludFNpemUgc2l6ZSwgY29uc3QgU2hhcmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9uJiBjb25m
aWd1cmF0aW9uKQogewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAvLyBXZSBwYXNzIHJlZmVyZW5j
ZXMgdG8gR1BVIHRleHR1cmVzLCBzbyBubyBuZWVkIHRvIGFsbG9jYXRlIGZyYW1lIGJ1ZmZlcnMg
aGVyZS4gSnVzdCBzZW5kIGEgc21hbGwgYml0IG9mIGRhdGEuCi0gICAgcmV0dXJuIHNpemVvZih2
b2lkKik7Ci0jZWxzZQogICAgIHJldHVybiBjYWxjdWxhdGVCeXRlc1BlclJvdyhzaXplLCBjb25m
aWd1cmF0aW9uKSAqIHNpemUuaGVpZ2h0KCk7Ci0jZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaAkocmV2aXNp
b24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDE2ICszMiw2IEBACiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCi0jaWYgVVNFKERJUkVDVDJE
KQotaW50ZXJmYWNlIElEMkQxQml0bWFwOwotaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0Owot
aW50ZXJmYWNlIElEM0QxMURldmljZTE7Ci1pbnRlcmZhY2UgSURYR0lLZXllZE11dGV4OwotaW50
ZXJmYWNlIElEWEdJU3VyZmFjZTE7Ci0KLSNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgotI2Vu
ZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEltYWdlOwogY2xhc3MgR3JhcGhpY3ND
b250ZXh0OwpAQCAtNTQsOSArNDQsNiBAQCBwdWJsaWM6CiAgICAgc3RydWN0IENvbmZpZ3VyYXRp
b24gewogICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFj
ZT4gY29sb3JTcGFjZTsKICAgICAgICAgYm9vbCBpc09wYXF1ZSB7IGZhbHNlIH07Ci0jaWYgVVNF
KERJUkVDVDJEKQotICAgICAgICBtdXRhYmxlIEhBTkRMRSBzaGFyZWRSZXNvdXJjZUhhbmRsZSB7
IG51bGxwdHIgfTsKLSNlbmRpZgogCiAgICAgICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYp
IGNvbnN0OwogICAgICAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKElQ
Qzo6RGVjb2RlciYsIENvbmZpZ3VyYXRpb24mKTsKQEAgLTEzNywxNCArMTI0LDYgQEAgcHVibGlj
OgogICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNyZWF0ZUNhaXJvU3VyZmFjZSgpOwogCiAg
ICAgV2ViQ29yZTo6UGxhdGZvcm1JbWFnZVB0ciBjcmVhdGVQbGF0Zm9ybUltYWdlKCkgeyByZXR1
cm4gY3JlYXRlQ2Fpcm9TdXJmYWNlKCk7IH0KLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBDT01Q
dHI8SUQyRDFCaXRtYXA+IGNyZWF0ZURpcmVjdDJEU3VyZmFjZShJRDNEMTFEZXZpY2UxKiwgSUQy
RDFSZW5kZXJUYXJnZXQqKTsKLSAgICBJRFhHSVN1cmZhY2UxKiBkeFN1cmZhY2UoKSB7IHJldHVy
biBtX3N1cmZhY2UuZ2V0KCk7IH0KLSAgICB2b2lkIGNyZWF0ZVNoYXJlZFJlc291cmNlKCk7Ci0g
ICAgdm9pZCBkaXNwb3NlU2hhcmVkUmVzb3VyY2UoKTsKLSAgICB2b2lkIGxlYWtTaGFyZWRSZXNv
dXJjZSgpOwotCi0gICAgV2ViQ29yZTo6UGxhdGZvcm1JbWFnZVB0ciBjcmVhdGVQbGF0Zm9ybUlt
YWdlKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0xNzEsMTIg
KzE1MCw2IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7CiAgICAgQ29u
ZmlndXJhdGlvbiBtX2NvbmZpZ3VyYXRpb247CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09N
UHRyPElEWEdJU3VyZmFjZTE+IG1fc3VyZmFjZTsKLSAgICBDT01QdHI8SURYR0lLZXllZE11dGV4
PiBtX3N1cmZhY2VNdXRleDsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IG1fYml0bWFwOwotI2Vu
ZGlmCi0KICNpZiBVU0UoQ0cpCiAgICAgYm9vbCBtX3JlbGVhc2VCaXRtYXBDb250ZXh0RGF0YUNh
bGxlZCB7IGZhbHNlIH07CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9T
aGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9T
aGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQor
KysgU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAko
bm9uZXhpc3RlbnQpCkBAIC0xLDE3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDExIEJyZW50IEZ1bGdoYW0gPGJmdWxnaGFtQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotCi0jaW5jbHVkZSAiRGVjb2Rlci5oIgotI2luY2x1ZGUg
IkVuY29kZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEltYWdlLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9ESUJQaXhlbERhdGEuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJET3BlcmF0
aW9ucy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGlsaXRpZXMuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9O
b3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQuaD4KLSNpbmNsdWRlIDxkMmQxXzEuaD4KLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0jaW5jbHVk
ZSA8ZHhnaTFfMi5oPgotI2luY2x1ZGUgPHdpbmNvZGVjLmg+Ci0jaW5jbHVkZSA8d3RmL1Byb2Nl
c3NJRC5oPgotCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Ci0KLXZvaWQgU2hhcmVhYmxlQml0bWFwOjp2YWxpZGF0ZUNvbmZpZ3VyYXRpb24oQ29uZmlndXJh
dGlvbiYpCi17Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBzdHJpZGVGb3JXaWR0aCh1bnNpZ25lZCB3
aWR0aCkKLXsKLSAgICBzdGF0aWMgdW5zaWduZWQgYml0c1BlclBpeGVsID0gRGlyZWN0MkQ6OmJp
dHNQZXJQaXhlbChEaXJlY3QyRDo6d2ljQml0bWFwRm9ybWF0KCkpOwotICAgIHJldHVybiBiaXRz
UGVyUGl4ZWwgKiB3aWR0aCAvIDg7Ci19Ci0KLUNoZWNrZWRVaW50MzIgU2hhcmVhYmxlQml0bWFw
OjpjYWxjdWxhdGVCeXRlc1BlclJvdyhXZWJDb3JlOjpJbnRTaXplIHNpemUsIGNvbnN0IENvbmZp
Z3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJuIGNhbGN1bGF0ZUJ5dGVzUGVy
UGl4ZWwoY29uZmlndXJhdGlvbikgKiBzaXplLndpZHRoKCk7Ci19Ci0KLUNoZWNrZWRVaW50MzIg
U2hhcmVhYmxlQml0bWFwOjpjYWxjdWxhdGVCeXRlc1BlclBpeGVsKGNvbnN0IENvbmZpZ3VyYXRp
b24mKQotewotICAgIHJldHVybiA0OwotfQotCi12b2lkIFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
U2hhcmVkUmVzb3VyY2UoKQotewotICAgIC8vIERvbid0IGNyZWF0ZSBhIHNoYXJlZCByZXNvdXJj
ZSBpZiB0aGUgY29uZmlndXJhdGlvbiBpbnN0cnVjdHMgdXMgdG8gdXNlIGFuIGV4aXN0aW5nIG9u
ZS4KLSAgICBpZiAobV9jb25maWd1cmF0aW9uLnNoYXJlZFJlc291cmNlSGFuZGxlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3N1cmZhY2UgPSBEaXJlY3QyRDo6Y3JlYXRlRFhHSVN1cmZhY2VP
ZlNpemUobV9zaXplLCBudWxscHRyLCB0cnVlKTsKLQotICAgIENPTVB0cjxJRFhHSVJlc291cmNl
MT4gcmVzb3VyY2VEYXRhOwotICAgIEhSRVNVTFQgaHIgPSBtX3N1cmZhY2UtPlF1ZXJ5SW50ZXJm
YWNlKF9fdXVpZG9mKElEWEdJUmVzb3VyY2UpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJnJl
c291cmNlRGF0YSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAg
aHIgPSByZXNvdXJjZURhdGEtPkNyZWF0ZVNoYXJlZEhhbmRsZShudWxscHRyLCBEWEdJX1NIQVJF
RF9SRVNPVVJDRV9SRUFEIHwgRFhHSV9TSEFSRURfUkVTT1VSQ0VfV1JJVEUsIG51bGxwdHIsICZt
X2NvbmZpZ3VyYXRpb24uc2hhcmVkUmVzb3VyY2VIYW5kbGUpOwotICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotfQotCi12b2lkIFNoYXJlYWJsZUJpdG1hcDo6ZGlzcG9zZVNoYXJl
ZFJlc291cmNlKCkKLXsKLSAgICBpZiAobV9zdXJmYWNlTXV0ZXgpCi0gICAgICAgIG1fc3VyZmFj
ZU11dGV4LT5SZWxlYXNlU3luYygxKTsKLSAgICBpZiAobV9jb25maWd1cmF0aW9uLnNoYXJlZFJl
c291cmNlSGFuZGxlKQotICAgICAgICA6OkNsb3NlSGFuZGxlKG1fY29uZmlndXJhdGlvbi5zaGFy
ZWRSZXNvdXJjZUhhbmRsZSk7Ci19Ci0KLXZvaWQgU2hhcmVhYmxlQml0bWFwOjpsZWFrU2hhcmVk
UmVzb3VyY2UoKQotewotICAgIG1fY29uZmlndXJhdGlvbi5zaGFyZWRSZXNvdXJjZUhhbmRsZSA9
IG51bGxwdHI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKLXsKLSAgICAvLyBMb2NrIHRoZSBzdXJm
YWNlIHRvIHRoZSBjdXJyZW50IGRldmljZSB3aGlsZSByZW5kZXJpbmcuCi0gICAgSFJFU1VMVCBo
ciA9IG1fc3VyZmFjZS0+UXVlcnlJbnRlcmZhY2UoJm1fc3VyZmFjZU11dGV4KTsKLSAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICBociA9IG1fc3VyZmFjZU11dGV4LT5BY3F1
aXJlU3luYygwLCBJTkZJTklURSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0KLSAgICBhdXRvIHN1cmZhY2VDb250ZXh0ID0gRGlyZWN0MkQ6OmNyZWF0ZVN1cmZhY2VSZW5k
ZXJUYXJnZXQobV9zdXJmYWNlLmdldCgpKTsKLSAgICBpZiAoIXN1cmZhY2VDb250ZXh0KQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEPihzdXJmYWNlQ29udGV4dC5nZXQoKSk7Ci19Ci0KLXZvaWQgU2hhcmVhYmxl
Qml0bWFwOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBk
c3RQb2ludCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkKLXsKLSAgICBwYWludChjb250ZXh0LCAx
LCBkc3RQb2ludCwgc3JjUmVjdCk7Ci19Ci0KLXZvaWQgU2hhcmVhYmxlQml0bWFwOjpwYWludChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IHNjYWxlRmFjdG9yLCBjb25zdCBJbnRQb2lu
dCYgZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpCi17Ci0gICAgYXV0byBzdXJmYWNl
ID0gY3JlYXRlRGlyZWN0MkRTdXJmYWNlKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmQzZERl
dmljZSgpLCBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKSk7Ci0KLSNp
Zm5kZWYgX05ERUJVRwotICAgIGF1dG8gYml0bWFwU2l6ZSA9IHN1cmZhY2UtPkdldFBpeGVsU2l6
ZSgpOwotICAgIEFTU0VSVChiaXRtYXBTaXplLndpZHRoID09IG1fc2l6ZS53aWR0aCgpKTsKLSAg
ICBBU1NFUlQoYml0bWFwU2l6ZS5oZWlnaHQgPT0gbV9zaXplLmhlaWdodCgpKTsKLSNlbmRpZgot
Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0KGRzdFBvaW50LCBzcmNSZWN0LnNpemUoKSk7Ci0gICAg
RmxvYXRSZWN0IHNyY1JlY3RTY2FsZWQoc3JjUmVjdCk7Ci0gICAgc3JjUmVjdFNjYWxlZC5zY2Fs
ZShzY2FsZUZhY3Rvcik7Ci0KLSAgICBBU1NFUlQoY29udGV4dC5oYXNQbGF0Zm9ybUNvbnRleHQo
KSk7Ci0gICAgYXV0byYgc3RhdGUgPSBjb250ZXh0LnN0YXRlKCk7Ci0gICAgYXV0byYgcGxhdGZv
cm1Db250ZXh0ID0gKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBJbWFnZVBhaW50
aW5nT3B0aW9ucyBvcHRpb25zIHsgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5k
TW9kZSwgSW1hZ2VPcmllbnRhdGlvbigpLCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5
IH07Ci0gICAgRGlyZWN0MkQ6OmRyYXdQbGF0Zm9ybUltYWdlKHBsYXRmb3JtQ29udGV4dCwgc3Vy
ZmFjZS5nZXQoKSwgbV9zaXplLCBkZXN0UmVjdCwgc3JjUmVjdFNjYWxlZCwgb3B0aW9ucywgc3Rh
dGUuYWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi1DT01QdHI8SUQy
RDFCaXRtYXA+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlRGlyZWN0MkRTdXJmYWNlKElEM0QxMURl
dmljZTEqIGRpcmVjdFhEZXZpY2UsIElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCi17
Ci0gICAgaWYgKCFkaXJlY3RYRGV2aWNlKQotICAgICAgICBkaXJlY3RYRGV2aWNlID0gRGlyZWN0
MkQ6OmRlZmF1bHREaXJlY3RYRGV2aWNlKCk7Ci0KLSAgICBpZiAoIW1fYml0bWFwKSB7Ci0gICAg
ICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IHRleHR1cmU7Ci0gICAgICAgIEhSRVNVTFQgaHIg
PSBkaXJlY3RYRGV2aWNlLT5PcGVuU2hhcmVkUmVzb3VyY2UxKG1fY29uZmlndXJhdGlvbi5zaGFy
ZWRSZXNvdXJjZUhhbmRsZSwgX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKio+KCZ0ZXh0dXJlKSk7Ci0gICAgICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGhyID0gdGV4dHVyZS0+UXVlcnlJ
bnRlcmZhY2UoJm1fc3VyZmFjZSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgICAgIC8vIExvY2sgdGhlIHN1cmZhY2UgdG8gdGhlIGN1cnJlbnQgZGV2aWNl
IHdoaWxlIHJlbmRlcmluZy4KLSAgICAgICAgaHIgPSBtX3N1cmZhY2UtPlF1ZXJ5SW50ZXJmYWNl
KCZtX3N1cmZhY2VNdXRleCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OwotICAgICAgICBociA9IG1fc3VyZmFjZU11dGV4LT5BY3F1aXJlU3luYygxLCBJTkZJTklURSk7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgICAgIGF1dG8g
Yml0bWFwUHJvcGVydGllcyA9IERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCk7Ci0gICAgICAg
IGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVTaGFyZWRCaXRtYXAoX191dWlkb2YoSURYR0lTdXJm
YWNlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fc3VyZmFjZS5nZXQoKSksICZiaXRtYXBQ
cm9wZXJ0aWVzLCAmbV9iaXRtYXApOwotICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9iaXRtYXA7Ci19
Ci0KLVJlZlB0cjxJbWFnZT4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVJbWFnZSgpCi17Ci0gICAg
YXV0byBzdXJmYWNlID0gY3JlYXRlRGlyZWN0MkRTdXJmYWNlKG51bGxwdHIsIEdyYXBoaWNzQ29u
dGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpKTsKLSAgICBpZiAoIXN1cmZhY2UpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92
ZShzdXJmYWNlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQmFja2luZ1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxMSArMjksNiBAQAogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIlVw
ZGF0ZUluZm8uaCIKIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5j
bHVkZSA8ZDNkMTFfMS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc4LDEwICsyNzgsNiBAQAogI2luY2x1
ZGUgIlNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgiCiAjZW5kaWYKIAotI2lmIFVTRShESVJF
Q1QyRCkKLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpICYmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAjaW5jbHVkZSAiV2ViRGV2aWNl
T3JpZW50YXRpb25VcGRhdGVQcm92aWRlclByb3h5LmgiCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDEw
ICsxODMsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUHJvbWlzZWRBdHRhY2htZW50SW5mby5oPgog
I2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQzRDExRGV2aWNlMTsKLSNl
bmRpZgotCiAjaWYgRU5BQkxFKE1FRElBX1VTQUdFKQogI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFT
ZXNzaW9uSWRlbnRpZmllci5oPgogI2VuZGlmCkBAIC0xMDE3LDEwICsxMDEzLDYgQEAgcHVibGlj
OgogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIFBsYXRmb3JtVmlld1dpZGdldCB2aWV3V2lkZ2V0
KCk7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIElEM0QxMURldmljZTEqIGRldmljZSgpIGNvbnN0
OwotICAgIHZvaWQgc2V0RGV2aWNlKElEM0QxMURldmljZTEqKTsKLSNlbmRpZgogI2VuZGlmCiAj
aWYgVVNFKExJQldQRSkKICAgICBzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCogdmlld0JhY2tlbmQo
KTsKQEAgLTMxMDUsOSArMzA5Nyw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFJlbW90ZU1lZGlh
U2Vzc2lvbkNvb3JkaW5hdG9yUHJveHk+IG1fbWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JQcm94eTsK
ICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRDNEMTFEZXZpY2UxPiBt
X2RldmljZTsKLSNlbmRpZgogICAgIGJvb2wgbV9zZXNzaW9uU3RhdGVXYXNSZXN0b3JlZEJ5QVBJ
UmVxdWVzdCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzUXVvdGFJbmNyZWFzZURlbmllZCB7IGZh
bHNlIH07CiAgICAgYm9vbCBtX2lzTGF5ZXJUcmVlRnJvemVuRHVlVG9Td2lwZUFuaW1hdGlvbiB7
IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3Jl
RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9C
YWNraW5nU3RvcmVEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpA
QCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJCYWNraW5nU3RvcmUuaCIKLQotI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2lu
Y2x1ZGUgIlVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0NPTVB0ci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGlsaXRpZXMuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oPgotI2luY2x1ZGUgPGQyZDEuaD4KLSNp
bmNsdWRlIDxkM2QxMV8xLmg+Ci0jaW5jbHVkZSA8ZHhnaS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1zdGQ6OnVuaXF1ZV9wdHI8QmFja2luZ1N0
b3JlQmFja2VuZERpcmVjdDJEPiBCYWNraW5nU3RvcmU6OmNyZWF0ZUJhY2tlbmQoKQotewotICAg
IHJldHVybiBtYWtlVW5pcXVlPEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGw+KG1fc2l6
ZSwgbV9kZXZpY2VTY2FsZUZhY3RvciwgbV93ZWJQYWdlUHJveHkuZGV2aWNlKCkpOwotfQotCi12
b2lkIEJhY2tpbmdTdG9yZTo6cGFpbnQoRFhDb25uZWN0aW9ucyBkeENvbm5lY3Rpb25zLCBjb25z
dCBJbnRSZWN0JiByZWN0KQotewotICAgIEFTU0VSVChtX2JhY2tlbmQpOwotICAgIEFTU0VSVCht
X2JhY2tlbmQtPnNpemUoKSA9PSBtX3NpemUpOwotCi0gICAgQ09NUHRyPElEM0QxMVJlc291cmNl
PiBiYWNrQnVmZmVyOwotICAgIEhSRVNVTFQgaHIgPSBkeENvbm5lY3Rpb25zLmJhY2tCdWZmZXIt
PlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEM0QxMVJlc291cmNlKSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KCZiYWNrQnVmZmVyKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0KLSAgICBDT01QdHI8SUQzRDExUmVzb3VyY2U+IGJhY2tpbmdTdG9yZTsKLSAgICBociA9
IG1fYmFja2VuZC0+ZHhTdXJmYWNlKCktPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEM0QxMVJl
c291cmNlKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZiYWNraW5nU3RvcmUpKTsKLSAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENEM0QxMV9CT1ggc3JjQm94KHJl
Y3QueCgpLCByZWN0LnkoKSwgMCwgcmVjdC54KCkgKyByZWN0LndpZHRoKCksIHJlY3QueSgpICsg
cmVjdC5oZWlnaHQoKSwgMSk7Ci0gICAgZHhDb25uZWN0aW9ucy5pbW1lZGlhdGVDb250ZXh0LT5D
b3B5U3VicmVzb3VyY2VSZWdpb24xKGJhY2tCdWZmZXIuZ2V0KCksIDAsIHJlY3QueCgpLCByZWN0
LnkoKSwgMCwgYmFja2luZ1N0b3JlLmdldCgpLCAwLCAmc3JjQm94LCBEM0QxMV9DT1BZX0RJU0NB
UkQpOwotfQotCi12b2lkIEJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUoU2hhcmVhYmxl
Qml0bWFwKiBiaXRtYXAsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgaWYg
KCFtX2JhY2tlbmQpCi0gICAgICAgIG1fYmFja2VuZCA9IGNyZWF0ZUJhY2tlbmQoKTsKLQotICAg
IHNjcm9sbCh1cGRhdGVJbmZvLnNjcm9sbFJlY3QsIHVwZGF0ZUluZm8uc2Nyb2xsT2Zmc2V0KTsK
LQotICAgIEludFBvaW50IHVwZGF0ZVJlY3RCb3VuZHNMb2NhdGlvbiA9IHVwZGF0ZUluZm8udXBk
YXRlUmVjdEJvdW5kcy5sb2NhdGlvbigpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBkZXZp
Y2VVcGRhdGVCaXRtYXAgPSBiaXRtYXAtPmNyZWF0ZURpcmVjdDJEU3VyZmFjZShtX3dlYlBhZ2VQ
cm94eS5kZXZpY2UoKSwgbV9iYWNrZW5kLT5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgaWYgKCFkZXZp
Y2VVcGRhdGVCaXRtYXApCi0gICAgICAgIHJldHVybjsKLQotI2lmbmRlZiBfTkRFQlVHCi0gICAg
YXV0byBkZXZpY2VCaXRtYXBTaXplID0gZGV2aWNlVXBkYXRlQml0bWFwLT5HZXRQaXhlbFNpemUo
KTsKLSAgICBBU1NFUlQoZGV2aWNlQml0bWFwU2l6ZS53aWR0aCA9PSB1cGRhdGVJbmZvLnVwZGF0
ZVJlY3RCb3VuZHMud2lkdGgoKSk7Ci0gICAgQVNTRVJUKGRldmljZUJpdG1hcFNpemUuaGVpZ2h0
ID09IHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy5oZWlnaHQoKSk7Ci0jZW5kaWYKLQotICAg
IGZvciAoY29uc3QgYXV0byYgdXBkYXRlUmVjdCA6IHVwZGF0ZUluZm8udXBkYXRlUmVjdHMpIHsK
LSAgICAgICAgYXV0byBjdXJyZW50UmVjdExvY2F0aW9uID0gSW50U2l6ZSh1cGRhdGVSZWN0Lngo
KSAtIHVwZGF0ZVJlY3RCb3VuZHNMb2NhdGlvbi54KCksIHVwZGF0ZVJlY3QueSgpIC0gdXBkYXRl
UmVjdEJvdW5kc0xvY2F0aW9uLnkoKSk7Ci0gICAgICAgIGF1dG8gZGVzdFJlY3RMb2NhdGlvbiA9
IEludFNpemUodXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpKTsKLSAgICAgICAgRGlyZWN0
MkQ6OmNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoZGV2aWNlVXBkYXRlQml0bWFwLmdl
dCgpLCBtX2JhY2tlbmQtPnN1cmZhY2UoKSwgY3VycmVudFJlY3RMb2NhdGlvbiwgdXBkYXRlUmVj
dCwgZGVzdFJlY3RMb2NhdGlvbik7Ci0gICAgfQotfQotCi12b2lkIEJhY2tpbmdTdG9yZTo6c2Ny
b2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNl
dCkKLXsKLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LmlzWmVybygpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBBU1NFUlQobV9iYWNrZW5kKTsKLSAgICBtX2JhY2tlbmQtPnNjcm9sbChzY3JvbGxSZWN0
LCBzY3JvbGxPZmZzZXQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCShyZXZpc2lv
biAyODc4MTIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDYgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L1NlYXJjaFBvcHVwTWVudURCLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyQWdlbnQuaD4KIAot
I2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0jZW5kaWYKLQogbmFtZXNw
YWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpwbGF0Zm9ybUluaXRpYWxpemUoKQpA
QCAtNzksMTggKzc1LDYgQEAgUGxhdGZvcm1WaWV3V2lkZ2V0IFdlYlBhZ2VQcm94eTo6dmlld1dp
ZAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50SW1wbCY+KHBhZ2VDbGllbnQoKSku
dmlld1dpZGdldCgpOwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotSUQzRDExRGV2aWNlMSogV2Vi
UGFnZVByb3h5OjpkZXZpY2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2RldmljZS5nZXQoKTsK
LX0KLQotdm9pZCBXZWJQYWdlUHJveHk6OnNldERldmljZShJRDNEMTFEZXZpY2UxKiBkZXZpY2Up
Ci17Ci0gICAgbV9kZXZpY2UgPSBkZXZpY2U7Ci19Ci0jZW5kaWYKLQogdm9pZCBXZWJQYWdlUHJv
eHk6OmRpc3BhdGNoUGVuZGluZ0NoYXJFdmVudHMoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dCYga2V5ZG93bkV2ZW50KQogewogICAgIGF1dG8mIHBlbmRpbmdDaGFyRXZlbnRzID0ga2V5ZG93
bkV2ZW50LnBlbmRpbmdDaGFyRXZlbnRzKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAJKHJldmlzaW9uIDI4Nzgx
MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEzICs0NSw2IEBACiAjaW5jbHVkZSA8d3RmL0hleE51
bWJlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAotI2lmIFVTRShE
SVJFQ1QyRCkKLSNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJEVXRpbGl0aWVzLmg+Ci0jaW5jbHVk
ZSA8ZDNkMTFfMS5oPgotI2luY2x1ZGUgPGRpcmVjdHhjb2xvcnMuaD4gCi0jaW5jbHVkZSA8ZHhn
aS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKQEAgLTIxNSwxMSArMjA4LDYgQEAgdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2hv
d1BvcHVwTWVudQogCiAgICAgICAgIGlmICghbV9wb3B1cCkKICAgICAgICAgICAgIHJldHVybjsK
LQotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgRGlyZWN0MkQ6OmNyZWF0ZURldmljZUFuZENv
bnRleHQobV9kM2REZXZpY2UsIG1faW1tZWRpYXRlQ29udGV4dCk7Ci0gICAgICAgIHNldHVwU3dh
cENoYWluKG1fd2luZG93UmVjdC5zaXplKCkpOwotI2VuZGlmCiAgICAgfQogCiAgICAgQk9PTCBz
aG91bGRBbmltYXRlID0gRkFMU0U7CkBAIC04MjgsNyArODE2LDYgQEAgdm9pZCBXZWJQb3B1cE1l
bnVQcm94eVdpbjo6cGFpbnQoY29uc3QgSQogICAgIGlmICghbV9wb3B1cCkKICAgICAgICAgcmV0
dXJuOwogCi0jaWYgIVVTRShESVJFQ1QyRCkKICAgICBpZiAoIW1fREMpIHsKICAgICAgICAgbV9E
QyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKEhXbmREQyhtX3BvcHVwKSkp
OwogICAgICAgICBpZiAoIW1fREMpCkBAIC04NTQsMjIgKzg0MSw2IEBAIHZvaWQgV2ViUG9wdXBN
ZW51UHJveHlXaW46OnBhaW50KGNvbnN0IEkKICAgICB9CiAKICAgICBHcmFwaGljc0NvbnRleHRX
aW4gY29udGV4dChtX0RDLmdldCgpKTsKLSNlbHNlCi0gICAgQ09NUHRyPElEM0QxMVRleHR1cmUy
RD4gYmFja0J1ZmZlcjsgCi0gICAgSFJFU1VMVCBociA9IG1fc3dhcENoYWluLT5HZXRCdWZmZXIo
MCwgX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZi
YWNrQnVmZmVyKSk7IAotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQ09NUHRyPElEWEdJU3VyZmFjZTE+IHN1cmZhY2UoUXVlcnksIGJhY2tCdWZmZXIpOwot
ICAgIGlmICghc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZW5kZXJUYXJn
ZXQgPSBXZWJDb3JlOjpEaXJlY3QyRDo6Y3JlYXRlU3VyZmFjZVJlbmRlclRhcmdldChzdXJmYWNl
LmdldCgpKTsKLQotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHBsYXRmb3JtQ29udGV4dChy
ZW5kZXJUYXJnZXQuZ2V0KCkpOwotICAgIHBsYXRmb3JtQ29udGV4dC5zZXREM0REZXZpY2UobV9k
M2REZXZpY2UuZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250ZXh0KCZwbGF0Zm9y
bUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQ
VU1lbW9yeSk7Ci0jZW5kaWYKIAogICAgIEludFJlY3QgdHJhbnNsYXRlZERhbWFnZVJlY3QgPSBk
YW1hZ2VSZWN0OwogICAgIHRyYW5zbGF0ZWREYW1hZ2VSZWN0Lm1vdmUoSW50U2l6ZSgwLCBtX3Nj
cm9sbE9mZnNldCAqIG1faXRlbUhlaWdodCkpOwpAQCAtODg0LDE1ICs4NTUsMTAgQEAgdm9pZCBX
ZWJQb3B1cE1lbnVQcm94eVdpbjo6cGFpbnQoY29uc3QgSQogICAgIGlmIChtX3Njcm9sbGJhcikK
ICAgICAgICAgbV9zY3JvbGxiYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOwogCi0jaWYg
IVVTRShESVJFQ1QyRCkKICAgICBIV25kREMgaFduZERDOwogICAgIEhEQyBsb2NhbERDID0gaGRj
ID8gaGRjIDogaFduZERDLnNldEhXbmQobV9wb3B1cCk7CiAKICAgICA6OkJpdEJsdChsb2NhbERD
LCBkYW1hZ2VSZWN0LngoKSwgZGFtYWdlUmVjdC55KCksIGRhbWFnZVJlY3Qud2lkdGgoKSwgZGFt
YWdlUmVjdC5oZWlnaHQoKSwgbV9EQy5nZXQoKSwgZGFtYWdlUmVjdC54KCksIGRhbWFnZVJlY3Qu
eSgpLCBTUkNDT1BZKTsKLSNlbHNlCi0gICAgY29udGV4dC5mbHVzaCgpOwotICAgIG1fc3dhcENo
YWluLT5QcmVzZW50KDAsIDApOyAKLSNlbmRpZgogfQogCiBib29sIFdlYlBvcHVwTWVudVByb3h5
V2luOjpzZXRGb2N1c2VkSW5kZXgoaW50IGksIGJvb2wgaG90VHJhY2tpbmcpCkBAIC05OTUsNDgg
Kzk2MSw2IEBAIGJvb2wgV2ViUG9wdXBNZW51UHJveHlXaW46OnNjcm9sbFRvUmV2ZWEKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi12b2lkIFdlYlBvcHVwTWVudVBy
b3h5V2luOjpzZXR1cFN3YXBDaGFpbihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotewot
ICAgIG1fc3dhcENoYWluID0gRGlyZWN0MkQ6OnN3YXBDaGFpbk9mU2l6ZUZvcldpbmRvd0FuZERl
dmljZShzaXplLCBtX3BvcHVwLCBtX2QzZERldmljZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9z
d2FwQ2hhaW4pOwotICAgIGF1dG8gZmFjdG9yeSA9IERpcmVjdDJEOjpmYWN0b3J5Rm9yRFhHSURl
dmljZShEaXJlY3QyRDo6dG9EWEdJRGV2aWNlKG1fZDNkRGV2aWNlKSk7Ci0KLSAgICBmYWN0b3J5
LT5NYWtlV2luZG93QXNzb2NpYXRpb24obV9wb3B1cCwgMCk7Ci0gICAgY29uZmlndXJlQmFja2lu
Z1N0b3JlKHNpemUpOwotfQotCi12b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpjb25maWd1cmVC
YWNraW5nU3RvcmUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBBU1NFUlQo
bV9zd2FwQ2hhaW4pOwotICAgIEFTU0VSVChtX2QzZERldmljZSk7Ci0gICAgQVNTRVJUKG1faW1t
ZWRpYXRlQ29udGV4dCk7Ci0KLSAgICAvLyBDcmVhdGUgYSByZW5kZXIgdGFyZ2V0IHZpZXcgCi0g
ICAgQ09NUHRyPElEM0QxMVRleHR1cmUyRD4gYmFja0J1ZmZlcjsgCi0gICAgSFJFU1VMVCBociA9
IG1fc3dhcENoYWluLT5HZXRCdWZmZXIoMCwgX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZiYWNrQnVmZmVyKSk7IAotICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotCi0gICAgaHIgPSBtX2QzZERldmljZS0+Q3JlYXRlUmVuZGVyVGFy
Z2V0VmlldyhiYWNrQnVmZmVyLmdldCgpLCBudWxscHRyLCAmbV9yZW5kZXJUYXJnZXRWaWV3KTsg
Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBhdXRvKiByZW5kZXJU
YXJnZXRWaWV3ID0gbV9yZW5kZXJUYXJnZXRWaWV3LmdldCgpOwotICAgIG1faW1tZWRpYXRlQ29u
dGV4dC0+T01TZXRSZW5kZXJUYXJnZXRzKDEsICZyZW5kZXJUYXJnZXRWaWV3LCBudWxscHRyKTsK
LQotICAgIC8vIFNldHVwIHRoZSB2aWV3cG9ydCAKLSAgICBEM0QxMV9WSUVXUE9SVCB2aWV3cG9y
dDsKLSAgICB2aWV3cG9ydC5XaWR0aCA9IChGTE9BVClzaXplLndpZHRoKCk7Ci0gICAgdmlld3Bv
cnQuSGVpZ2h0ID0gKEZMT0FUKXNpemUuaGVpZ2h0KCk7Ci0gICAgdmlld3BvcnQuTWluRGVwdGgg
PSAwLjBmOwotICAgIHZpZXdwb3J0Lk1heERlcHRoID0gMS4wZjsKLSAgICB2aWV3cG9ydC5Ub3BM
ZWZ0WCA9IDA7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFkgPSAwOwotICAgIG1faW1tZWRpYXRlQ29u
dGV4dC0+UlNTZXRWaWV3cG9ydHMoMSwgJnZpZXdwb3J0KTsKLQotICAgIG1faW1tZWRpYXRlQ29u
dGV4dC0+Q2xlYXJSZW5kZXJUYXJnZXRWaWV3KG1fcmVuZGVyVGFyZ2V0Vmlldy5nZXQoKSwgRGly
ZWN0WDo6Q29sb3JzOjpCbGFuY2hlZEFsbW9uZCk7IAotfQotI2VuZGlmCi0KIFN0cmluZyBXZWJQ
b3B1cE1lbnVQcm94eVdpbjo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1ha2VTdHJpbmcoIldlYlBvcHVwTWVudVByb3h5V2luIDB4IiwgaGV4KHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaAkocmV2aXNpb24gMjg3
ODEyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2lu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEzICszMyw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9T
Y3JvbGxhYmxlQXJlYS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYmFyLmg+CiAKLSNpZiBV
U0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQzRDExRGV2aWNlMTsKLWludGVyZmFjZSBJRDNEMTFE
ZXZpY2VDb250ZXh0MTsKLWludGVyZmFjZSBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3OwotaW50ZXJm
YWNlIElEWEdJU3dhcENoYWluOwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFz
cyBXZWJWaWV3OwpAQCAtMTMxLDIzICsxMjQsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGluY3Jl
bWVudFdoZWVsRGVsdGEoaW50IGRlbHRhKTsKICAgICB2b2lkIHJlZHVjZVdoZWVsRGVsdGEoaW50
IGRlbHRhKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIHNldHVwU3dhcENoYWluKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSAgICB2b2lkIGNvbmZpZ3VyZUJhY2tpbmdTdG9yZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0jZW5kaWYKLQogICAgIFdlYlZpZXcqIG1fd2ViVmll
dzsKICAgICBWZWN0b3I8V2ViUG9wdXBJdGVtPiBtX2l0ZW1zOwogICAgIFBsYXRmb3JtUG9wdXBN
ZW51RGF0YSBtX2RhdGE7CiAgICAgaW50IG1fbmV3U2VsZWN0ZWRJbmRleCB7IDAgfTsKIAogICAg
IFJlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IG1fc2Nyb2xsYmFyOwotI2lmIFVTRShESVJFQ1Qy
RCkKLSAgICBDT01QdHI8SUQzRDExRGV2aWNlMT4gbV9kM2REZXZpY2U7Ci0gICAgQ09NUHRyPElE
M0QxMURldmljZUNvbnRleHQxPiBtX2ltbWVkaWF0ZUNvbnRleHQ7Ci0gICAgQ09NUHRyPElEM0Qx
MVJlbmRlclRhcmdldFZpZXc+IG1fcmVuZGVyVGFyZ2V0VmlldzsgCi0gICAgQ09NUHRyPElEWEdJ
U3dhcENoYWluPiBtX3N3YXBDaGFpbjsKLSNlbmRpZgogICAgIEdESU9iamVjdDxIREM+IG1fREM7
CiAgICAgR0RJT2JqZWN0PEhCSVRNQVA+IG1fYm1wOwogICAgIEhXTkQgbV9wb3B1cCB7IG51bGxw
dHIgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAJKHJldmlz
aW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjgsMTQgKzY4LDYgQEAKICNpbmNsdWRlIDxjYWlyby5oPgogI2Vu
ZGlmIAogCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGls
aXRpZXMuaD4KLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0jaW5jbHVkZSA8ZGlyZWN0eGNvbG9ycy5o
PiAKLSNpbmNsdWRlIDxkeGdpLmg+Ci0jZW5kaWYKLQotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0yNDMsMTEgKzIzNSw2IEBAIFdlYlZpZXc6Oldl
YlZpZXcoUkVDVCByZWN0LCBjb25zdCBBUEk6OlAKICAgICBtX3BhZ2UtPmluaXRpYWxpemVXZWJQ
YWdlKCk7CiAKICAgICBJbnRTaXplIHdpbmRvd1NpemUocmVjdC5yaWdodCAtIHJlY3QubGVmdCwg
cmVjdC5ib3R0b20gLSByZWN0LnRvcCk7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIERpcmVjdDJE
OjpjcmVhdGVEZXZpY2VBbmRDb250ZXh0KG1fZDNkRGV2aWNlLCBtX2ltbWVkaWF0ZUNvbnRleHQp
OwotICAgIG1fcGFnZS0+c2V0RGV2aWNlKG1fZDNkRGV2aWNlLmdldCgpKTsKLSAgICBzZXR1cFN3
YXBDaGFpbih3aW5kb3dTaXplKTsKLSNlbmRpZgogCiAgICAgaWYgKG1fcGFnZS0+ZHJhd2luZ0Fy
ZWEoKSkKICAgICAgICAgbV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5zZXRTaXplKHdpbmRvd1NpemUp
OwpAQCAtNTczLDIxICs1NjAsNiBAQCBMUkVTVUxUIFdlYlZpZXc6Om9uU2l6ZUV2ZW50KEhXTkQg
aHduZCwgCiAgICAgICAgIG1fbmV4dFJlc2l6ZVNjcm9sbE9mZnNldCA9IEludFNpemUoKTsKICAg
ICB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgaWYgKG1fc3dhcENoYWluKSB7Ci0gICAgICAg
IG1faW1tZWRpYXRlQ29udGV4dC0+T01TZXRSZW5kZXJUYXJnZXRzKDAsIG51bGxwdHIsIG51bGxw
dHIpOwotCi0gICAgICAgIG1fcmVuZGVyVGFyZ2V0VmlldyA9IG51bGxwdHI7Ci0KLSAgICAgICAg
Ly8gUHJlc2VydmUgdGhlIGV4aXN0aW5nIGJ1ZmZlciBjb3VudCAocGFzcyB6ZXJvIGZvciBjb3Vu
dCkgYW5kIGZvcm1hdCAoYnkgcGFzc2luZyBEWEdJX0ZPUk1BVF9VTktOT1dOKS4KLSAgICAgICAg
Ly8gQXV0b21hdGljYWxseSBjaG9vc2UgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gbWF0Y2ggdGhl
IGNsaWVudCByZWN0IGZvciB0aGUgYmFja2luZyB3aW5kb3cgKHBhc3MgemVyb3MgZm9yIHdpZHRo
L2hlaWdodCkuCi0gICAgICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+UmVzaXplQnVmZmVy
cygwLCAwLCAwLCBEWEdJX0ZPUk1BVF9VTktOT1dOLCBEWEdJX1NXQVBfQ0hBSU5fRkxBR19HRElf
Q09NUEFUSUJMRSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0g
ICAgICAgIGNvbmZpZ3VyZUJhY2tpbmdTdG9yZSh3aW5kb3dTaXplKTsKLSAgICB9Ci0jZW5kaWYK
LQogICAgIGhhbmRsZWQgPSB0cnVlOwogICAgIHJldHVybiAwOwogfQpAQCAtOTc0LDUwICs5NDYs
NCBAQCB2b2lkIFdlYlZpZXc6OnNldFRvb2xUaXAoY29uc3QgU3RyaW5nJiB0CiAgICAgOjpTZW5k
TWVzc2FnZShtX3Rvb2xUaXBXaW5kb3csIFRUTV9BQ1RJVkFURSwgIXRvb2xUaXAuaXNFbXB0eSgp
LCAwKTsKIH0KIAotI2lmIFVTRShESVJFQ1QyRCkKLXZvaWQgV2ViVmlldzo6c2V0dXBTd2FwQ2hh
aW4oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAoIW1fZDNkRGV2aWNl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N3YXBDaGFpbiA9IERpcmVjdDJEOjpzd2FwQ2hh
aW5PZlNpemVGb3JXaW5kb3dBbmREZXZpY2Uoc2l6ZSwgbV93aW5kb3csIG1fZDNkRGV2aWNlKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChtX3N3YXBDaGFpbik7Ci0KLSAgICBhdXRvIGZhY3RvcnkgPSBE
aXJlY3QyRDo6ZmFjdG9yeUZvckRYR0lEZXZpY2UoRGlyZWN0MkQ6OnRvRFhHSURldmljZShtX2Qz
ZERldmljZSkpOwotCi0gICAgZmFjdG9yeS0+TWFrZVdpbmRvd0Fzc29jaWF0aW9uKG1fd2luZG93
LCAwKTsKLSAgICBjb25maWd1cmVCYWNraW5nU3RvcmUoc2l6ZSk7Ci19Ci0KLXZvaWQgV2ViVmll
dzo6Y29uZmlndXJlQmFja2luZ1N0b3JlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi17
Ci0gICAgQVNTRVJUKG1fc3dhcENoYWluKTsKLSAgICBBU1NFUlQobV9kM2REZXZpY2UpOwotICAg
IEFTU0VSVChtX2ltbWVkaWF0ZUNvbnRleHQpOwotCi0gICAgLy8gQ3JlYXRlIGEgcmVuZGVyIHRh
cmdldCB2aWV3IAotICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IGJhY2tCdWZmZXI7IAotICAg
IEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVpZG9mKElEM0QxMVRl
eHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja0J1ZmZlcikpOyAKLSAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0gbV9kM2REZXZpY2UtPkNy
ZWF0ZVJlbmRlclRhcmdldFZpZXcoYmFja0J1ZmZlci5nZXQoKSwgbnVsbHB0ciwgJm1fcmVuZGVy
VGFyZ2V0Vmlldyk7IAotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAg
YXV0byogcmVuZGVyVGFyZ2V0VmlldyA9IG1fcmVuZGVyVGFyZ2V0Vmlldy5nZXQoKTsKLSAgICBt
X2ltbWVkaWF0ZUNvbnRleHQtPk9NU2V0UmVuZGVyVGFyZ2V0cygxLCAmcmVuZGVyVGFyZ2V0Vmll
dywgbnVsbHB0cik7Ci0KLSAgICAvLyBTZXR1cCB0aGUgdmlld3BvcnQgCi0gICAgRDNEMTFfVklF
V1BPUlQgdmlld3BvcnQ7Ci0gICAgdmlld3BvcnQuV2lkdGggPSAoRkxPQVQpc2l6ZS53aWR0aCgp
OwotICAgIHZpZXdwb3J0LkhlaWdodCA9IChGTE9BVClzaXplLmhlaWdodCgpOwotICAgIHZpZXdw
b3J0Lk1pbkRlcHRoID0gMC4wZjsKLSAgICB2aWV3cG9ydC5NYXhEZXB0aCA9IDEuMGY7Ci0gICAg
dmlld3BvcnQuVG9wTGVmdFggPSAwOwotICAgIHZpZXdwb3J0LlRvcExlZnRZID0gMDsKLSAgICBt
X2ltbWVkaWF0ZUNvbnRleHQtPlJTU2V0Vmlld3BvcnRzKDEsICZ2aWV3cG9ydCk7Ci0KLSAgICBt
X2ltbWVkaWF0ZUNvbnRleHQtPkNsZWFyUmVuZGVyVGFyZ2V0VmlldyhtX3JlbmRlclRhcmdldFZp
ZXcuZ2V0KCksIERpcmVjdFg6OkNvbG9yczo6TWlkbmlnaHRCbHVlKTsgCi19Ci0jZW5kaWYKLQog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4v
V2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJW
aWV3LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9X
ZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSw2IEBACiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLSNpZiBVU0UoRElSRUNUMkQp
Ci1pbnRlcmZhY2UgSUQzRDExRGV2aWNlMTsKLWludGVyZmFjZSBJRDNEMTFEZXZpY2VDb250ZXh0
MTsKLWludGVyZmFjZSBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3OwotaW50ZXJmYWNlIElEWEdJU3dh
cENoYWluOwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEludFNpemU7CiB9
CkBAIC04MywxMSArNzYsNiBAQCBwdWJsaWM6CiAKICAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3
aW5nQXJlYSgpIHsgcmV0dXJuIHBhZ2UoKSA/IHBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSA6IG51bGxw
dHI7IH0KIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBJRDNEMTFEZXZpY2UxKiBkM2REZXZpY2Uo
KSBjb25zdCB7IHJldHVybiBtX2QzZERldmljZS5nZXQoKTsgfQotICAgIElEM0QxMURldmljZUNv
bnRleHQxKiBkM2RJbW1lZGlhdGVDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbW1lZGlhdGVD
b250ZXh0LmdldCgpOyB9Ci0jZW5kaWYKLQogcHJpdmF0ZToKICAgICBXZWJWaWV3KFJFQ1QsIGNv
bnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mLCBIV05EIHBhcmVudFdpbmRvdyk7CiAKQEAgLTE0
NCwxMSArMTMyLDYgQEAgcHJpdmF0ZToKICAgICAvLyBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlTGlz
dGVuZXIKICAgICB2aXJ0dWFsIHZvaWQgd2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQg
bWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0pOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIHZvaWQg
c2V0dXBTd2FwQ2hhaW4oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIHZvaWQgY29uZmln
dXJlQmFja2luZ1N0b3JlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSNlbmRpZgotCiAgICAg
SFdORCBtX3dpbmRvdyB7IG51bGxwdHIgfTsKICAgICBIV05EIG1fdG9wTGV2ZWxQYXJlbnRXaW5k
b3cgeyBudWxscHRyIH07CiAgICAgSFdORCBtX3Rvb2xUaXBXaW5kb3cgeyBudWxscHRyIH07CkBA
IC0xNjgsMTIgKzE1MSw2IEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0
OjpQYWdlQ2xpZW50SW1wbD4gbV9wYWdlQ2xpZW50OwogICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+
IG1fcGFnZTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEM0QxMURldmljZTE+IG1f
ZDNkRGV2aWNlOwotICAgIENPTVB0cjxJRDNEMTFEZXZpY2VDb250ZXh0MT4gbV9pbW1lZGlhdGVD
b250ZXh0OwotICAgIENPTVB0cjxJRDNEMTFSZW5kZXJUYXJnZXRWaWV3PiBtX3JlbmRlclRhcmdl
dFZpZXc7IAotICAgIENPTVB0cjxJRFhHSVN3YXBDaGFpbj4gbV9zd2FwQ2hhaW47Ci0jZW5kaWYK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVudS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVudS5jcHAJKHJldmlz
aW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJQb3B1cE1lbnUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTIgKzExNSw2IEBAIHZvaWQg
V2ViUG9wdXBNZW51OjpzaG93KGNvbnN0IEludFJlY3QmIHIKICAgICBzZXRVcFBsYXRmb3JtRGF0
YShwYWdlQ29vcmRpbmF0ZXMsIHBsYXRmb3JtRGF0YSk7CiAKICAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlNob3dQb3B1cE1lbnUocGFnZUNvb3JkaW5hdGVzLCBzdGF0aWNfY2FzdDx1aW50NjRf
dD4obV9wb3B1cENsaWVudC0+bWVudVN0eWxlKCkudGV4dERpcmVjdGlvbigpKSwgaXRlbXMsIHNl
bGVjdGVkSW5kZXgsIHBsYXRmb3JtRGF0YSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKLQotI2lm
IFVTRShESVJFQ1QyRCkKLSAgICAvLyBEb24ndCBkZXN0cm95IHRoZSBzaGFyZWQgaGFuZGxlIGlu
IHRoZSBXZWJDb250ZW50IHByb2Nlc3MuIEl0IHdpbGwgYmUgZGVzdHJveWVkIGluIHRoZSBVSVBy
b2Nlc3MuCi0gICAgcGxhdGZvcm1EYXRhLm1fbm90U2VsZWN0ZWRCYWNraW5nU3RvcmUtPmxlYWtT
aGFyZWRSZXNvdXJjZSgpOwotICAgIHBsYXRmb3JtRGF0YS5tX3NlbGVjdGVkQmFja2luZ1N0b3Jl
LT5sZWFrU2hhcmVkUmVzb3VyY2UoKTsKLSNlbmRpZgogfQogCiB2b2lkIFdlYlBvcHVwTWVudTo6
aGlkZSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RmluZENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
MSwxMCArMzUxLDYgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6Z2V0SW1hZ2VGb3JGaW5kTWF0Ywog
ICAgICAgICByZXR1cm47CiAKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkR2V0SW1hZ2VGb3JGaW5kTWF0Y2goaGFuZGxlLCBtYXRjaEluZGV4KSk7Ci0jaWYg
VVNFKERJUkVDVDJEKQotICAgIC8vIERvbid0IGRlc3Ryb3kgdGhlIHNoYXJlZCBoYW5kbGUgaW4g
dGhlIFdlYkNvbnRlbnQgcHJvY2Vzcy4gSXQgd2lsbCBiZSBkZXN0cm95ZWQgaW4gdGhlIFVJUHJv
Y2Vzcy4KLSAgICBzZWxlY3Rpb25TbmFwc2hvdC0+bGVha1NoYXJlZFJlc291cmNlKCk7Ci0jZW5k
aWYKIH0KIAogdm9pZCBGaW5kQ29udHJvbGxlcjo6c2VsZWN0RmluZE1hdGNoKHVpbnQzMl90IG1h
dGNoSW5kZXgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCShyZXZpc2lvbiAyODc4MTIpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Ry
YXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE0
ICs0Myw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpb24uaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1NldHRpbmdzLmg+CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHREaXJlY3QyRC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQuaD4KLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2Vu
ZGlmCi0KLQogI2lmIFVTRShHTElCX0VWRU5UX0xPT1ApCiAjaW5jbHVkZSA8d3RmL2dsaWIvUnVu
TG9vcFNvdXJjZVByaW9yaXR5Lmg+CiAjZW5kaWYKQEAgLTg2MiwxMCArODU0LDYgQEAgdm9pZCBE
cmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3M6OmRpcwogICAgICAgICB1cGRhdGVJbmZvLnVw
ZGF0ZVJlY3RzLmFwcGVuZChyZWN0KTsKICAgICB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAg
Yml0bWFwLT5sZWFrU2hhcmVkUmVzb3VyY2UoKTsgLy8gSXQgd2lsbCBiZSBkZXN0cm95ZWQgaW4g
dGhlIFVJUHJvY2Vzcy4KLSNlbmRpZgotCiAgICAgbV93ZWJQYWdlLmRpZFVwZGF0ZVJlbmRlcmlu
ZygpOwogCiAgICAgLy8gTGF5b3V0IGNhbiB0cmlnZ2VyIG1vcmUgY2FsbHMgdG8gc2V0TmVlZHNE
aXNwbGF5IGFuZCB3ZSBkb24ndCB3YW50IHRvIHByb2Nlc3MgdGhlbQpJbmRleDogU291cmNlL1dl
YktpdExlZ2FjeS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjItMDEtMDcgIFNhbSBXZWlu
aWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBEaXJl
Y3QyRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0
OTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQ
bGF0Zm9ybUZUVy5jbWFrZTogUmVtb3ZlZC4KKwogMjAyMi0wMS0wNyAgQWxleCBDaHJpc3RlbnNl
biAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVy
dGluZyByMjg3Njk4LgpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9QbGF0Zm9ybUZUVy5jbWFr
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L1BsYXRmb3JtRlRXLmNtYWtlCShy
ZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L1BsYXRmb3JtRlRXLmNtYWtl
CShub25leGlzdGVudCkKQEAgLTEsNDM4ICswLDAgQEAKLWFkZF9kZWZpbml0aW9ucygtRFVTRV9E
SVJFQ1QyRD0xIC1EVVNFX0NVUkw9MSAtRFdFQktJVF9FWFBPUlRTPTEpCi1saXN0KEFQUEVORCBX
ZWJLaXRMZWdhY3lfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgIiR7V0VCS0lUX0xJ
QlJBUklFU19ESVJ9L2luY2x1ZGUiCi0pCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfU09VUkNF
U19DbGFzc2VzCi0gICAgd2luL1dlYkRvd25sb2FkQ1VSTC5jcHAKLSAgICB3aW4vV2ViVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VTZW5kZXJDVVJMLmNwcAotKQotbGlzdChBUFBFTkQgV2ViS2l0
TGVnYWN5X1BSSVZBVEVfTElCUkFSSUVTCi0gICAgT3BlblNTTDo6U1NMCi0gICAgRDNEMTEubGli
Ci0gICAgRHhnaS5saWIKLSAgICBtZnV1aWQubGliCi0gICAgc3RybWlpZHMubGliCi0pCi0KLWFk
ZF9jdXN0b21fY29tbWFuZCgKLSAgICBPVVRQVVQgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VS
Q0VTX0RJUn0vV2ViS2l0VmVyc2lvbi5oCi0gICAgTUFJTl9ERVBFTkRFTkNZICR7V0VCS0lUTEVH
QUNZX0RJUn0vc2NyaXB0cy9nZW5lcmF0ZS13ZWJraXR2ZXJzaW9uLnBsCi0gICAgREVQRU5EUyAk
e1dFQktJVExFR0FDWV9ESVJ9L21hYy9Db25maWd1cmF0aW9ucy9WZXJzaW9uLnhjY29uZmlnCi0g
ICAgQ09NTUFORCAke1BFUkxfRVhFQ1VUQUJMRX0gJHtXRUJLSVRMRUdBQ1lfRElSfS9zY3JpcHRz
L2dlbmVyYXRlLXdlYmtpdHZlcnNpb24ucGwgLS1jb25maWcgJHtXRUJLSVRMRUdBQ1lfRElSfS9t
YWMvQ29uZmlndXJhdGlvbnMvVmVyc2lvbi54Y2NvbmZpZyAtLW91dHB1dERpciAke1dlYktpdExl
Z2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfQotICAgIFZFUkJBVElNKQotbGlzdChBUFBFTkQgV2Vi
S2l0TGVnYWN5X1NPVVJDRVMgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2Vi
S2l0VmVyc2lvbi5oKQotCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfUFJJVkFURV9JTkNMVURF
X0RJUkVDVE9SSUVTCi0gICAgIiR7Q01BS0VfQklOQVJZX0RJUn0vLi4vaW5jbHVkZS9wcml2YXRl
IgotICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9Ly4uL2luY2x1ZGUvcHJpdmF0ZS9KYXZhU2NyaXB0
Q29yZSIKLSAgICAiJHtDTUFLRV9CSU5BUllfRElSfS8uLi9pbmNsdWRlL3ByaXZhdGUvV2ViQ29y
ZSIKLSAgICAiJHtXRUJLSVRMRUdBQ1lfRElSfS93aW4iCi0gICAgIiR7V0VCS0lUTEVHQUNZX0RJ
Un0vd2luL1dlYkNvcmVTdXBwb3J0IgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJD
RVNfRElSfS9pbmNsdWRlIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElS
fS9JbnRlcmZhY2VzIgotKQotCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfSU5DTFVERVMKLSAg
ICB3aW4vQ0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcuaAotICAgIHdpbi9DT01FbnVtVmFyaWFudC5o
Ci0gICAgd2luL0NPTVByb3BlcnR5QmFnLmgKLSAgICB3aW4vQ09NVmFyaWFudFNldHRlci5oCi0g
ICAgd2luL0NvZGVBbmFseXNpc0NvbmZpZy5oCi0gICAgd2luL0RPTUNTU0NsYXNzZXMuaAotICAg
IHdpbi9ET01Db3JlQ2xhc3Nlcy5oCi0gICAgd2luL0RPTUV2ZW50c0NsYXNzZXMuaAotICAgIHdp
bi9ET01IVE1MQ2xhc3Nlcy5oCi0gICAgd2luL0RlZmF1bHREb3dubG9hZERlbGVnYXRlLmgKLSAg
ICB3aW4vRGVmYXVsdFBvbGljeURlbGVnYXRlLmgKLSAgICB3aW4vRm9yRWFjaENvQ2xhc3MuaAot
ICAgIHdpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmgKLSAgICB3aW4vTWFyc2hhbGxpbmdI
ZWxwZXJzLmgKLSAgICB3aW4vTWVtb3J5U3RyZWFtLmgKLSAgICB3aW4vUHJvZ0lETWFjcm9zLmgK
LSAgICB3aW4vV2ViQWN0aW9uUHJvcGVydHlCYWcuaAotICAgIHdpbi9XZWJBcHBsaWNhdGlvbkNh
Y2hlLmgKLSAgICB3aW4vV2ViQXJjaGl2ZS5oCi0gICAgd2luL1dlYkJhY2tGb3J3YXJkTGlzdC5o
Ci0gICAgd2luL1dlYkNhY2hlLmgKLSAgICB3aW4vV2ViQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEu
aAotICAgIHdpbi9XZWJDb3JlU3RhdGlzdGljcy5oCi0gICAgd2luL1dlYkRhdGFTb3VyY2UuaAot
ICAgIHdpbi9XZWJEYXRhYmFzZU1hbmFnZXIuaAotICAgIHdpbi9XZWJEb2N1bWVudExvYWRlci5o
Ci0gICAgd2luL1dlYkRvd25sb2FkLmgKLSAgICB3aW4vV2ViRHJvcFNvdXJjZS5oCi0gICAgd2lu
L1dlYkVsZW1lbnRQcm9wZXJ0eUJhZy5oCi0gICAgd2luL1dlYkVycm9yLmgKLSAgICB3aW4vV2Vi
RnJhbWUuaAotICAgIHdpbi9XZWJGcmFtZVBvbGljeUxpc3RlbmVyLmgKLSAgICB3aW4vV2ViR2Vv
bG9jYXRpb25Qb2xpY3lMaXN0ZW5lci5oCi0gICAgd2luL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24u
aAotICAgIHdpbi9XZWJIVE1MUmVwcmVzZW50YXRpb24uaAotICAgIHdpbi9XZWJIaXN0b3J5LmgK
LSAgICB3aW4vV2ViSGlzdG9yeUl0ZW0uaAotICAgIHdpbi9XZWJKYXZhU2NyaXB0Q29sbGVjdG9y
LmgKLSAgICB3aW4vV2ViS2l0Q09NQVBJLmgKLSAgICB3aW4vV2ViS2l0Q2xhc3NGYWN0b3J5LmgK
LSAgICB3aW4vV2ViS2l0RExMLmgKLSAgICB3aW4vV2ViS2l0R3JhcGhpY3MuaAotICAgIHdpbi9X
ZWJLaXRMb2dnaW5nLmgKLSAgICB3aW4vV2ViS2l0U3RhdGlzdGljcy5oCi0gICAgd2luL1dlYktp
dFN0YXRpc3RpY3NQcml2YXRlLmgKLSAgICB3aW4vV2ViS2l0U3lzdGVtQml0cy5oCi0gICAgd2lu
L1dlYkxvY2FsaXphYmxlU3RyaW5ncy5oCi0gICAgd2luL1dlYk11dGFibGVVUkxSZXF1ZXN0LmgK
LSAgICB3aW4vV2ViTmF2aWdhdGlvbkRhdGEuaAotICAgIHdpbi9XZWJOb3RpZmljYXRpb24uaAot
ICAgIHdpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIuaAotICAgIHdpbi9XZWJQcmVmZXJlbmNlS2V5
c1ByaXZhdGUuaAotICAgIHdpbi9XZWJQcmVmZXJlbmNlcy5oCi0gICAgd2luL1dlYlJlc291cmNl
LmgKLSAgICB3aW4vV2ViU2NyaXB0T2JqZWN0LmgKLSAgICB3aW4vV2ViU2NyaXB0V29ybGQuaAot
ICAgIHdpbi9XZWJTZWN1cml0eU9yaWdpbi5oCi0gICAgd2luL1dlYlNlcmlhbGl6ZWRKU1ZhbHVl
LmgKLSAgICB3aW4vV2ViVGV4dFJlbmRlcmVyLmgKLSAgICB3aW4vV2ViVVJMQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UuaAotICAgIHdpbi9XZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNlbmRl
ci5oCi0gICAgd2luL1dlYlVSTENyZWRlbnRpYWwuaAotICAgIHdpbi9XZWJVUkxQcm90ZWN0aW9u
U3BhY2UuaAotICAgIHdpbi9XZWJVUkxSZXNwb25zZS5oCi0gICAgd2luL1dlYlVzZXJDb250ZW50
VVJMUGF0dGVybi5oCi0gICAgd2luL1dlYlZpZXcuaAotICAgIHdpbi9XZWJXb3JrZXJzUHJpdmF0
ZS5oCi0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VTX0NsYXNzZXMKLSAgICB3
aW4vQWNjZXNzaWJsZUJhc2UuY3BwCi0gICAgd2luL0FjY2Vzc2libGVEb2N1bWVudC5jcHAKLSAg
ICB3aW4vQWNjZXNzaWJsZUltYWdlLmNwcAotICAgIHdpbi9BY2Nlc3NpYmxlVGV4dEltcGwuY3Bw
Ci0gICAgd2luL0JhY2tGb3J3YXJkTGlzdC5jcHAKLSAgICB3aW4vQ0ZEaWN0aW9uYXJ5UHJvcGVy
dHlCYWcuY3BwCi0gICAgd2luL0RPTUNTU0NsYXNzZXMuY3BwCi0gICAgd2luL0RPTUNvcmVDbGFz
c2VzLmNwcAotICAgIHdpbi9ET01FdmVudHNDbGFzc2VzLmNwcAotICAgIHdpbi9ET01IVE1MQ2xh
c3Nlcy5jcHAKLSAgICB3aW4vRGVmYXVsdERvd25sb2FkRGVsZWdhdGUuY3BwCi0gICAgd2luL0Rl
ZmF1bHRQb2xpY3lEZWxlZ2F0ZS5jcHAKLSAgICB3aW4vRm9yRWFjaENvQ2xhc3MuY3BwCi0gICAg
d2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwCi0gICAgd2luL01hcnNoYWxsaW5nSGVs
cGVycy5jcHAKLSAgICB3aW4vTWVtb3J5U3RyZWFtLmNwcAotICAgIHdpbi9XZWJBY3Rpb25Qcm9w
ZXJ0eUJhZy5jcHAKLSAgICB3aW4vV2ViQXBwbGljYXRpb25DYWNoZS5jcHAKLSAgICB3aW4vV2Vi
QXJjaGl2ZS5jcHAKLSAgICB3aW4vV2ViQmFja0ZvcndhcmRMaXN0LmNwcAotICAgIHdpbi9XZWJD
YWNoZS5jcHAKLSAgICB3aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCi0gICAgd2luL1dlYkRhdGFT
b3VyY2UuY3BwCi0gICAgd2luL1dlYkRhdGFiYXNlTWFuYWdlci5jcHAKLSAgICB3aW4vV2ViRG9j
dW1lbnRMb2FkZXIuY3BwCi0gICAgd2luL1dlYkRvd25sb2FkLmNwcAotICAgIHdpbi9XZWJEcm9w
U291cmNlLmNwcAotICAgIHdpbi9XZWJFbGVtZW50UHJvcGVydHlCYWcuY3BwCi0gICAgd2luL1dl
YkVycm9yLmNwcAotICAgIHdpbi9XZWJGcmFtZS5jcHAKLSAgICB3aW4vV2ViRnJhbWVQb2xpY3lM
aXN0ZW5lci5jcHAKLSAgICB3aW4vV2ViR2VvbG9jYXRpb25Qb2xpY3lMaXN0ZW5lci5jcHAKLSAg
ICB3aW4vV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5jcHAKLSAgICB3aW4vV2ViSFRNTFJlcHJlc2Vu
dGF0aW9uLmNwcAotICAgIHdpbi9XZWJIaXN0b3J5LmNwcAotICAgIHdpbi9XZWJIaXN0b3J5SXRl
bS5jcHAKLSAgICB3aW4vV2ViSW5zcGVjdG9yLmNwcAotICAgIHdpbi9XZWJKYXZhU2NyaXB0Q29s
bGVjdG9yLmNwcAotICAgIHdpbi9XZWJLaXRDT01BUEkuY3BwCi0gICAgd2luL1dlYktpdENsYXNz
RmFjdG9yeS5jcHAKLSAgICB3aW4vV2ViS2l0RExMLmNwcAotICAgIHdpbi9XZWJLaXRMb2dnaW5n
LmNwcAotICAgIHdpbi9XZWJLaXRNZXNzYWdlTG9vcC5jcHAKLSAgICB3aW4vV2ViS2l0U3RhdGlz
dGljcy5jcHAKLSAgICB3aW4vV2ViS2l0U3lzdGVtQml0cy5jcHAKLSAgICB3aW4vV2ViTG9jYWxp
emFibGVTdHJpbmdzLmNwcAotICAgIHdpbi9XZWJNdXRhYmxlVVJMUmVxdWVzdC5jcHAKLSAgICB3
aW4vV2ViTmF2aWdhdGlvbkRhdGEuY3BwCi0gICAgd2luL1dlYk5vZGVIaWdobGlnaHQuY3BwCi0g
ICAgd2luL1dlYk5vdGlmaWNhdGlvbi5jcHAKLSAgICB3aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVy
LmNwcAotICAgIHdpbi9XZWJQcmVmZXJlbmNlcy5jcHAKLSAgICB3aW4vV2ViUmVzb3VyY2UuY3Bw
Ci0gICAgd2luL1dlYlNjcmlwdE9iamVjdC5jcHAKLSAgICB3aW4vV2ViU2NyaXB0V29ybGQuY3Bw
Ci0gICAgd2luL1dlYlNlY3VyaXR5T3JpZ2luLmNwcAotICAgIHdpbi9XZWJTZXJpYWxpemVkSlNW
YWx1ZS5jcHAKLSAgICB3aW4vV2ViVGV4dFJlbmRlcmVyLmNwcAotICAgIHdpbi9XZWJVUkxBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZS5jcHAKLSAgICB3aW4vV2ViVVJMQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VTZW5kZXIuY3BwCi0gICAgd2luL1dlYlVSTENyZWRlbnRpYWwuY3BwCi0gICAgd2luL1dl
YlVSTFByb3RlY3Rpb25TcGFjZS5jcHAKLSAgICB3aW4vV2ViVVJMUmVzcG9uc2UuY3BwCi0gICAg
d2luL1dlYlVzZXJDb250ZW50VVJMUGF0dGVybi5jcHAKLSAgICB3aW4vV2ViVmlldy5jcHAKLSAg
ICB3aW4vV2ViV29ya2Vyc1ByaXZhdGUuY3BwCi0KLSAgICB3aW4vc3RvcmFnZS9XZWJEYXRhYmFz
ZVByb3ZpZGVyLmNwcAotKQotCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfU09VUkNFU19XZWJD
b3JlU3VwcG9ydAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAot
ICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAotICAgIHdpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQv
V2ViQ29udGV4dE1lbnVDbGllbnQuaAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJEZXNrdG9w
Tm90aWZpY2F0aW9uc0RlbGVnYXRlLmNwcAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJEZXNr
dG9wTm90aWZpY2F0aW9uc0RlbGVnYXRlLmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRHJh
Z0NsaWVudC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCi0gICAg
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVM
b2FkZXJDbGllbnQuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50LmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5j
cHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCi0g
ICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmNwcAotICAgIHdpbi9X
ZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5oCi0gICAgd2luL1dlYkNvcmVTdXBw
b3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50LmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yRGVsZWdh
dGUuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckRlbGVnYXRlLmgKLSAg
ICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAotICAgIHdpbi9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAotICAgIHdpbi9XZWJDb3JlU3Vw
cG9ydC9XZWJQbHVnaW5JbmZvUHJvdmlkZXIuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dl
YlBsdWdpbkluZm9Qcm92aWRlci5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRM
aW5rU3RvcmUuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUu
aAotKQotCi1pZiAoVVNFX0NGKQotICAgIGxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VT
X0NsYXNzZXMKLSAgICAgICAgY2YvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Q0Yu
Y3BwCi0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X0xJQlJBUklFUwotICAg
ICAgICAke0NPUkVGT1VOREFUSU9OX0xJQlJBUll9Ci0gICAgKQotZW5kaWYgKCkKLQotaWYgKENP
TVBJTEVSX0lTX0dDQ19PUl9DTEFORykKLSAgICBXRUJLSVRfQUREX1RBUkdFVF9DWFhfRkxBR1Mo
V2ViS2l0TGVnYWN5IC1Xbm8tb3ZlcmxvYWRlZC12aXJ0dWFsKQotZW5kaWYgKCkKLQotbGlzdChB
UFBFTkQgV2ViS2l0TGVnYWN5X1NPVVJDRVMgJHtXZWJLaXRMZWdhY3lfSU5DTFVERVN9ICR7V2Vi
S2l0TGVnYWN5X1NPVVJDRVNfQ2xhc3Nlc30gJHtXZWJLaXRMZWdhY3lfU09VUkNFU19XZWJDb3Jl
U3VwcG9ydH0pCi0KLXNvdXJjZV9ncm91cChJbmNsdWRlcyBGSUxFUyAke1dlYktpdExlZ2FjeV9J
TkNMVURFU30pCi1zb3VyY2VfZ3JvdXAoQ2xhc3NlcyBGSUxFUyAke1dlYktpdExlZ2FjeV9TT1VS
Q0VTX0NsYXNzZXN9KQotc291cmNlX2dyb3VwKFdlYkNvcmVTdXBwb3J0IEZJTEVTICR7V2ViS2l0
TGVnYWN5X1NPVVJDRVNfV2ViQ29yZVN1cHBvcnR9KQotCi0jIEJ1aWxkIHRoZSBDT00gaW50ZXJm
YWNlOgotbWFjcm8oR0VORVJBVEVfSU5URVJGQUNFIF9pbmZpbGUgX2RlZmluZXMgX2RlcGVuZHMp
Ci0gICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfZmlsZXdlICR7X2luZmlsZX0gTkFNRV9XRSkK
LSAgICBhZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgICAgIE9VVFBVVCAgJHtXZWJLaXRMZWdhY3lf
REVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy8ke19maWxld2V9LmgKLSAgICAgICAgTUFJ
Tl9ERVBFTkRFTkNZICR7X2luZmlsZX0KLSAgICAgICAgREVQRU5EUyAke19kZXBlbmRzfQotICAg
ICAgICBDT01NQU5EIG1pZGwuZXhlIC9JICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vd2lu
L0ludGVyZmFjZXMiIC9JICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vd2luL0ludGVyZmFj
ZXMvQWNjZXNzaWJsZTIiIC9JICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9p
bmNsdWRlIiAvSSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dpbiIgL1dYIC9jaGFyIHNp
Z25lZCAvZW52IHdpbjMyIC90bGIgIiR7Q01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfS8k
e19maWxld2V9LnRsYiIgL291dCAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0v
SW50ZXJmYWNlcyIgL2ggIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVy
ZmFjZXMvJHtfZmlsZXdlfS5oIiAvaWlkICIke19maWxld2V9X2kuYyIgJHtfZGVmaW5lc30gIiR7
Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke19pbmZpbGV9IgotICAgICAgICBVU0VTX1RFUk1J
TkFMIFZFUkJBVElNKQotICAgIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcygke1dlYktpdExl
Z2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzLyR7X2ZpbGV3ZX0uaCBQUk9QRVJU
SUVTIEdFTkVSQVRFRCBUUlVFKQotICAgIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcygke1dl
YktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzLyR7X2ZpbGV3ZX1faS5j
IFBST1BFUlRJRVMgR0VORVJBVEVEIFRSVUUpCi1lbmRtYWNybygpCi0KLXNldChNSURMX0RFRklO
RVMgL0RcIFwiX19QUk9EVUNUSU9OX189MDFcIikKLQotc2V0KFdFQktJVExFR0FDWV9JRExfREVQ
RU5ERU5DSUVTCi0gICAgd2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZUNvbXBhcmFibGUuaWRsCi0g
ICAgd2luL0ludGVyZmFjZXMvRE9NQ1NTLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0RPTUNvcmUu
aWRsCi0gICAgd2luL0ludGVyZmFjZXMvRE9NRXZlbnRzLmlkbAotICAgIHdpbi9JbnRlcmZhY2Vz
L0RPTUV4dGVuc2lvbnMuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvRE9NSFRNTC5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9ET01Qcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0RPTVJhbmdl
LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0RPTVdpbmRvdy5pZGwKLSAgICB3aW4vSW50ZXJmYWNl
cy9JR0VOX0RPTU9iamVjdC5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViQXJjaGl2ZS5pZGwK
LSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViQmFja0ZvcndhcmRMaXN0LmlkbAotICAgIHdpbi9JbnRl
cmZhY2VzL0lXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2Vz
L0lXZWJDYWNoZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViQ29yZVN0YXRpc3RpY3MuaWRs
Ci0gICAgd2luL0ludGVyZmFjZXMvSVdlYkRhdGFTb3VyY2UuaWRsCi0gICAgd2luL0ludGVyZmFj
ZXMvSVdlYkRhdGFiYXNlTWFuYWdlci5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRGVza3Rv
cE5vdGlmaWNhdGlvbnNEZWxlZ2F0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRG9jdW1l
bnQuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkRvd25sb2FkLmlkbAotICAgIHdpbi9JbnRl
cmZhY2VzL0lXZWJFZGl0aW5nRGVsZWdhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkVt
YmVkZGVkVmlldy5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRXJyb3IuaWRsCi0gICAgd2lu
L0ludGVyZmFjZXMvSVdlYkVycm9yUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2Vi
Rm9ybURlbGVnYXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJGcmFtZS5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9JV2ViRnJhbWVMb2FkRGVsZWdhdGUuaWRsCi0gICAgd2luL0ludGVyZmFj
ZXMvSVdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9J
V2ViRnJhbWVMb2FkRGVsZWdhdGVQcml2YXRlMi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2Vi
RnJhbWVQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJGcmFtZVZpZXcuaWRsCi0g
ICAgd2luL0ludGVyZmFjZXMvSVdlYkdlb2xvY2F0aW9uUG9saWN5TGlzdGVuZXIuaWRsCi0gICAg
d2luL0ludGVyZmFjZXMvSVdlYkdlb2xvY2F0aW9uUG9zaXRpb24uaWRsCi0gICAgd2luL0ludGVy
ZmFjZXMvSVdlYkdlb2xvY2F0aW9uUHJvdmlkZXIuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdl
YkhUTUxSZXByZXNlbnRhdGlvbi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViSFRUUFVSTFJl
c3BvbnNlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJIaXN0b3J5LmlkbAotICAgIHdpbi9J
bnRlcmZhY2VzL0lXZWJIaXN0b3J5RGVsZWdhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdl
Ykhpc3RvcnlJdGVtLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJIaXN0b3J5SXRlbVByaXZh
dGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkhpc3RvcnlQcml2YXRlLmlkbAotICAgIHdp
bi9JbnRlcmZhY2VzL0lXZWJJbnNwZWN0b3IuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYklu
c3BlY3RvclByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkphdmFTY3JpcHRDb2xs
ZWN0b3IuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYktpdFN0YXRpc3RpY3MuaWRsCi0gICAg
d2luL0ludGVyZmFjZXMvSVdlYk11dGFibGVVUkxSZXF1ZXN0LmlkbAotICAgIHdpbi9JbnRlcmZh
Y2VzL0lXZWJNdXRhYmxlVVJMUmVxdWVzdFByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMv
SVdlYk5hdmlnYXRpb25EYXRhLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJOb3RpZmljYXRp
b24uaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYk5vdGlmaWNhdGlvbkNlbnRlci5pZGwKLSAg
ICB3aW4vSW50ZXJmYWNlcy9JV2ViTm90aWZpY2F0aW9uT2JzZXJ2ZXIuaWRsCi0gICAgd2luL0lu
dGVyZmFjZXMvSVdlYlBvbGljeURlbGVnYXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJQ
b2xpY3lEZWxlZ2F0ZVByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlByZWZlcmVu
Y2VzLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaWRsCi0g
ICAgd2luL0ludGVyZmFjZXMvSVdlYlJlc291cmNlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lX
ZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViUmVzb3Vy
Y2VMb2FkRGVsZWdhdGVQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJSZXNvdXJj
ZUxvYWREZWxlZ2F0ZVByaXZhdGUyLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJTY3JpcHRP
YmplY3QuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlNjcmlwdFdvcmxkLmlkbAotICAgIHdp
bi9JbnRlcmZhY2VzL0lXZWJTZWN1cml0eU9yaWdpbi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9J
V2ViU2VyaWFsaXplZEpTVmFsdWUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlNlcmlhbGl6
ZWRKU1ZhbHVlUHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVGV4dFJlbmRlcmVy
LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJVSURlbGVnYXRlLmlkbAotICAgIHdpbi9JbnRl
cmZhY2VzL0lXZWJVSURlbGVnYXRlMi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVUlEZWxl
Z2F0ZVByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlVSTEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJVUkxSZXF1ZXN0LmlkbAotICAg
IHdpbi9JbnRlcmZhY2VzL0lXZWJVUkxSZXNwb25zZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9J
V2ViVVJMUmVzcG9uc2VQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJVbmRvTWFu
YWdlci5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVW5kb1RhcmdldC5pZGwKLSAgICB3aW4v
SW50ZXJmYWNlcy9JV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmlkbAotICAgIHdpbi9JbnRlcmZh
Y2VzL0lXZWJWaWV3LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJWaWV3UHJpdmF0ZS5pZGwK
LSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViV29ya2Vyc1ByaXZhdGUuaWRsCi0gICAgd2luL0ludGVy
ZmFjZXMvSmF2YVNjcmlwdENvcmVBUElUeXBlcy5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9XZWJL
aXQuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvV2ViU2Nyb2xsYmFyVHlwZXMuaWRsCi0KLSAgICB3
aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlMi5pZGwKLSAgICB3aW4vSW50ZXJm
YWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlMl8yLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0Fj
Y2Vzc2libGUyL0FjY2Vzc2libGVBcHBsaWNhdGlvbi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9B
Y2Nlc3NpYmxlMi9BY2Nlc3NpYmxlRWRpdGFibGVUZXh0LmlkbAotICAgIHdpbi9JbnRlcmZhY2Vz
L0FjY2Vzc2libGUyL0FjY2Vzc2libGVSZWxhdGlvbi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9B
Y2Nlc3NpYmxlMi9BY2Nlc3NpYmxlU3RhdGVzLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0FjY2Vz
c2libGUyL0FjY2Vzc2libGVUZXh0LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUy
L0FjY2Vzc2libGVUZXh0Mi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9JQTJD
b21tb25UeXBlcy5pZGwKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0v
aW5jbHVkZS9hdXRvdmVyc2lvbi5oIgotKQotCi1hZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgT1VU
UFVUICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L2luY2x1ZGUvYXV0b3ZlcnNp
b24uaAotICAgIFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0VfU09VUkNFX0RJUn0KLSAgICBDT01N
QU5EICR7UEVSTF9FWEVDVVRBQkxFfSAke1dFQktJVF9MSUJSQVJJRVNfRElSfS90b29scy9zY3Jp
cHRzL2F1dG8tdmVyc2lvbi5wbCAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfQot
ICAgIFZFUkJBVElNKQotCi1HRU5FUkFURV9JTlRFUkZBQ0Uod2luL0ludGVyZmFjZXMvV2ViS2l0
LmlkbCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikK
LUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxl
QXBwbGljYXRpb24uaWRsICR7TUlETF9ERUZJTkVTfSAiJHtXRUJLSVRMRUdBQ1lfSURMX0RFUEVO
REVOQ0lFU30iKQotR0VORVJBVEVfSU5URVJGQUNFKHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUy
L0FjY2Vzc2libGUyLmlkbCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBF
TkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxl
Mi9BY2Nlc3NpYmxlMl8yLmlkbCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9E
RVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3Np
YmxlMi9BY2Nlc3NpYmxlUmVsYXRpb24uaWRsICR7TUlETF9ERUZJTkVTfSAiJHtXRUJLSVRMRUdB
Q1lfSURMX0RFUEVOREVOQ0lFU30iKQotR0VORVJBVEVfSU5URVJGQUNFKHdpbi9JbnRlcmZhY2Vz
L0FjY2Vzc2libGUyL0FjY2Vzc2libGVTdGF0ZXMuaWRsICR7TUlETF9ERUZJTkVTfSAiJHtXRUJL
SVRMRUdBQ1lfSURMX0RFUEVOREVOQ0lFU30iKQotR0VORVJBVEVfSU5URVJGQUNFKHdpbi9JbnRl
cmZhY2VzL0FjY2Vzc2libGUyL0lBMkNvbW1vblR5cGVzLmlkbCAke01JRExfREVGSU5FU30gIiR7
V0VCS0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4v
SW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlRWRpdGFibGVUZXh0LmlkbCAke01JRExf
REVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lO
VEVSRkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlVGV4dC5pZGwgJHtN
SURMX0RFRklORVN9ICIke1dFQktJVExFR0FDWV9JRExfREVQRU5ERU5DSUVTfSIpCi1HRU5FUkFU
RV9JTlRFUkZBQ0Uod2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIvQWNjZXNzaWJsZVRleHQyLmlk
bCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLQot
YWRkX2xpYnJhcnkoV2ViS2l0TGVnYWN5R1VJRCBTVEFUSUMKLSAgICAiJHtXZWJLaXRMZWdhY3lf
REVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9XZWJLaXQuaCIKLSAgICAiJHtXZWJLaXRM
ZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlQXBwbGljYXRp
b24uaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNl
cy9BY2Nlc3NpYmxlMi5oIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElS
fS9JbnRlcmZhY2VzL0FjY2Vzc2libGUyXzIuaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlUmVsYXRpb24uaCIKLSAgICAiJHtX
ZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlU3Rh
dGVzLmgiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFj
ZXMvSUEyQ29tbW9uVHlwZXMuaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VT
X0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlRWRpdGFibGVUZXh0LmgiCi0gICAgIiR7V2ViS2l0
TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZVRleHQuaCIK
LSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nl
c3NpYmxlVGV4dDIuaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0v
SW50ZXJmYWNlcy9XZWJLaXRfaS5jIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJD
RVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVBcHBsaWNhdGlvbl9pLmMiCi0gICAgIiR7V2Vi
S2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZTJfaS5j
IgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0Fj
Y2Vzc2libGUyXzJfaS5jIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElS
fS9JbnRlcmZhY2VzL0FjY2Vzc2libGVSZWxhdGlvbl9pLmMiCi0gICAgIiR7V2ViS2l0TGVnYWN5
X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZUVkaXRhYmxlVGV4dF9p
LmMiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMv
QWNjZXNzaWJsZVRleHRfaS5jIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNf
RElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVUZXh0Ml9pLmMiCi0pCi1zZXRfdGFyZ2V0X3Byb3Bl
cnRpZXMoV2ViS2l0TGVnYWN5R1VJRCBQUk9QRVJUSUVTIE9VVFBVVF9OQU1FIFdlYktpdEdVSUQk
e0RFQlVHX1NVRkZJWH0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9QUklWQVRFX0xJQlJB
UklFUwotICAgIENvbWN0bDMyCi0gICAgQ29tc3VwcAotICAgIENyeXB0MzIKLSAgICBEMmQxCi0g
ICAgRHdyaXRlCi0gICAgRHhndWlkCi0gICAgSXBobHBhcGkKLSAgICBQc2FwaQotICAgIFJwY3J0
NAotICAgIFNobHdhcGkKLSAgICBVc3AxMAotICAgIFZlcnNpb24KLSAgICBXZWJLaXRHVUlEJHtE
RUJVR19TVUZGSVh9Ci0gICAgV2luZG93c0NvZGVjcwotICAgIFdpbm1tCi0pCi0KLXNldChDTUFL
RV9TSEFSRURfTElOS0VSX0ZMQUdTICIke0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1N9IC9TVUJT
WVNURU06V0lORE9XUyIpCi1zZXQoQ01BS0VfRVhFX0xJTktFUl9GTEFHUyAiJHtDTUFLRV9FWEVf
TElOS0VSX0ZMQUdTfSAvU1VCU1lTVEVNOldJTkRPV1MiKQotCi0jIFdlIG5lZWQgdGhlIHdlYmtp
dCBsaWJyYXJpZXMgdG8gY29tZSBiZWZvcmUgdGhlIHN5c3RlbSBkZWZhdWx0IGxpYnJhcmllcyB0
byBwcmV2ZW50IHN5bWJvbCBjb25mbGljdHMgd2l0aCB1dWlkLmxpYi4KLSMgVG8gZG8gdGhpcyB3
ZSBhZGQgc3lzdGVtIGRlZmF1bHQgbGlicyBhcyB3ZWJraXQgbGlicyBhbmQgemVybyBvdXQgc3lz
dGVtIGRlZmF1bHQgbGlicy4KLXN0cmluZyhSRVBMQUNFICIgIiAiXDsiIENYWF9MSUJTICR7Q01B
S0VfQ1hYX1NUQU5EQVJEX0xJQlJBUklFU30pCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfTElC
UkFSSUVTICR7Q1hYX0xJQlN9KQotc2V0KENNQUtFX0NYWF9TVEFOREFSRF9MSUJSQVJJRVMgIiIp
Ci0KLXNldChDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTICIke0NNQUtFX1NIQVJFRF9MSU5LRVJf
RkxBR1N9ICR7TVNWQ19SVU5USU1FX0xJTktFUl9GTEFHU30iKQotCi0jIElmIHRoaXMgZGlyZWN0
b3J5IGlzbid0IGNyZWF0ZWQgYmVmb3JlIG1pZGwgcnVucyBhbmQgYXR0ZW1wdHMgdG8gb3V0cHV0
IFdlYktpdC50bGIsCi0jIEl0IGZhaWxzIHdpdGggYW4gdW51c3VhbCBlcnJvciAtIG1pZGwgZmFp
bGVkIC0gZmFpbGVkIHRvIHNhdmUgYWxsIGNoYW5nZXMKLWZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtD
TUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9KQotZmlsZShNQUtFX0RJUkVDVE9SWSAke1dl
YktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzKQotCi1zZXQoV2ViS2l0
TGVnYWN5X1BVQkxJQ19GUkFNRVdPUktfSEVBREVSUwotICAgICR7V2ViS2l0TGVnYWN5X0RFUklW
RURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZTIuaAotICAgICR7V2ViS2l0TGVn
YWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZTJfMi5oCi0gICAg
JHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxl
QXBwbGljYXRpb24uaAotICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0lu
dGVyZmFjZXMvQWNjZXNzaWJsZUVkaXRhYmxlVGV4dC5oCi0gICAgJHtXZWJLaXRMZWdhY3lfREVS
SVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlUmVsYXRpb24uaAotICAgICR7
V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZVN0
YXRlcy5oCi0gICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNl
cy9BY2Nlc3NpYmxlVGV4dC5oCi0gICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJ
Un0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlVGV4dDIuaAotICAgICR7V2ViS2l0TGVnYWN5X0RFUklW
RURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvSUEyQ29tbW9uVHlwZXMuaAotICAgICR7V2ViS2l0
TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvV2ViS2l0LmgKLQotICAgIHdp
bi9BY2Nlc3NpYmxlQmFzZS5oCi0gICAgd2luL0FjY2Vzc2libGVEb2N1bWVudC5oCi0gICAgd2lu
L0NGRGljdGlvbmFyeVByb3BlcnR5QmFnLmgKLSAgICB3aW4vV2ViRGF0YVNvdXJjZS5oCi0gICAg
d2luL1dlYkZyYW1lLmgKLSAgICB3aW4vV2ViS2l0Q09NQVBJLmgKLSkKLQotV0VCS0lUX01BS0Vf
Rk9SV0FSRElOR19IRUFERVJTKFdlYktpdExlZ2FjeUdVSUQKLSAgICBUQVJHRVRfTkFNRSBXZWJL
aXRMZWdhY3lGcmFtZXdvcmtIZWFkZXJzCi0gICAgREVTVElOQVRJT04gJHtXZWJLaXRMZWdhY3lf
RlJBTUVXT1JLX0hFQURFUlNfRElSfS9XZWJLaXRMZWdhY3kKLSAgICBGSUxFUyAke1dlYktpdExl
Z2FjeV9QVUJMSUNfRlJBTUVXT1JLX0hFQURFUlN9Ci0gICAgRkxBVFRFTkVECi0pCi0KLXNldChX
ZWJLaXRMZWdhY3lfT1VUUFVUX05BTUUKLSAgICBXZWJLaXQke0RFQlVHX1NVRkZJWH0KLSkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIz
IEBACisyMDIyLTAxLTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZW1vdmUgc3VwcG9ydCBmb3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3Ojpk
ZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViVmlldzo6ZW5zdXJlQmFja2luZ1N0b3Jl
KToKKyAgICAgICAgKFdlYlZpZXc6OnNjcm9sbEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJW
aWV3OjpzaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJWaWV3Ojp1cGRhdGVCYWNraW5nU3RvcmUp
OgorICAgICAgICAoV2ViVmlldzo6cGFpbnQpOgorICAgICAgICAoV2ViVmlldzo6cGFpbnRJbnRv
QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYlZpZXc6OldlYlZpZXdXbmRQcm9jKToKKyAgICAg
ICAgKFdlYlZpZXc6Om5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJWaWV3
OjpwYWludFdpdGhEaXJlY3QyRCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViVmlldy5oOgorCiAy
MDIyLTAxLTA2ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAgICAgICAg
SGF2ZSBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCBhbmQgcmVsYXRlZCBuZXR3b3JraW5nIGFjdG9y
cyB1c2UgU2hhcmVkQnVmZmVyLgpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAJ
KHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDksMTAgKzIwOSw2IEBACiAjaW5jbHVkZSAiQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQuaCIKICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotI2lu
Y2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaD4KLSNlbmRpZgotCiAjaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogI2luY2x1ZGUgPFdlYkNvcmUvRnVsbFNjcmVlbkNvbnRy
b2xsZXIuaD4KICNlbmRpZgpAQCAtODU1LDExICs4NTEsNiBAQCB2b2lkIFdlYlZpZXc6OmRlbGV0
ZUJhY2tpbmdTdG9yZSgpCiAgICAgICAgIG1fZGVsZXRlQmFja2luZ1N0b3JlVGltZXJBY3RpdmUg
PSBmYWxzZTsKICAgICB9CiAgICAgbV9iYWNraW5nU3RvcmVCaXRtYXAgPSBudWxscHRyOwotI2lm
IFVTRShESVJFQ1QyRCkKLSAgICBtX2JhY2tpbmdTdG9yZUQyREJpdG1hcCA9IG51bGxwdHI7Ci0g
ICAgbV9iYWNraW5nU3RvcmVHZGlJbnRlcm9wID0gbnVsbHB0cjsKLSAgICBtX2JhY2tpbmdTdG9y
ZVJlbmRlclRhcmdldCA9IG51bGxwdHI7Ci0jZW5kaWYKICAgICBtX2JhY2tpbmdTdG9yZURpcnR5
UmVnaW9uID0gbnVsbHB0cjsKICAgICBtX2JhY2tpbmdTdG9yZVNpemUuY3ggPSBtX2JhY2tpbmdT
dG9yZVNpemUuY3kgPSAwOwogfQpAQCAtODczLDIwICs4NjQsNiBAQCBib29sIFdlYlZpZXc6OmVu
c3VyZUJhY2tpbmdTdG9yZSgpCiAgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwICYmICh3
aWR0aCAhPSBtX2JhY2tpbmdTdG9yZVNpemUuY3ggfHwgaGVpZ2h0ICE9IG1fYmFja2luZ1N0b3Jl
U2l6ZS5jeSkpIHsKICAgICAgICAgZGVsZXRlQmFja2luZ1N0b3JlKCk7CiAKLSNpZiBVU0UoRElS
RUNUMkQpCi0gICAgICAgIGF1dG8gYml0bWFwU2l6ZSA9IEQyRDE6OlNpemVGKHdpZHRoLCBoZWln
aHQpOwotICAgICAgICBhdXRvIHBpeGVsU2l6ZSA9IEQyRDE6OlNpemVVKHdpZHRoLCBoZWlnaHQp
OwotCi0gICAgICAgIGlmICghbV9yZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgICAgIC8vIENyZWF0
ZSBhIERpcmVjdDJEIHJlbmRlciB0YXJnZXQuCi0gICAgICAgICAgICBhdXRvIHJlbmRlclRhcmdl
dFByb3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAg
ICByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLnVzYWdlID0gRDJEMV9SRU5ERVJfVEFSR0VUX1VTQUdF
X0dESV9DT01QQVRJQkxFOwotICAgICAgICAgICAgYXV0byBod25kUmVuZGVyVGFyZ2V0UHJvcGVy
dGllcyA9IEQyRDE6Okh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKG1fdmlld1dpbmRvdywgcGl4
ZWxTaXplKTsKLSAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3Rl
bUZhY3RvcnkoKS0+Q3JlYXRlSHduZFJlbmRlclRhcmdldCgmcmVuZGVyVGFyZ2V0UHJvcGVydGll
cywgJmh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLCAmbV9yZW5kZXJUYXJnZXQpOwotICAgICAg
ICAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotI2VuZGlmCiAgICAgICAgIG1fYmFja2luZ1N0b3JlU2l6ZS5jeCA9IHdpZHRo
OwogICAgICAgICBtX2JhY2tpbmdTdG9yZVNpemUuY3kgPSBoZWlnaHQ7CiAgICAgICAgIEJpdG1h
cEluZm8gYml0bWFwSW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZUJvdHRvbVVwKEludFNpemUobV9i
YWNraW5nU3RvcmVTaXplKSk7CkBAIC04OTQsMTYgKzg3MSw2IEBAIGJvb2wgV2ViVmlldzo6ZW5z
dXJlQmFja2luZ1N0b3JlKCkKICAgICAgICAgdm9pZCogcGl4ZWxzID0gTlVMTDsKICAgICAgICAg
bV9iYWNraW5nU3RvcmVCaXRtYXAgPSBTaGFyZWRHRElPYmplY3Q8SEJJVE1BUD46OmNyZWF0ZShh
ZG9wdEdESU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24oMCwgJmJpdG1hcEluZm8sIERJQl9SR0Jf
Q09MT1JTLCAmcGl4ZWxzLCAwLCAwKSkpOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgICAgICBI
UkVTVUxUIGhyID0gbV9yZW5kZXJUYXJnZXQtPkNyZWF0ZUNvbXBhdGlibGVSZW5kZXJUYXJnZXQo
JmJpdG1hcFNpemUsICZwaXhlbFNpemUsIG51bGxwdHIsIEQyRDFfQ09NUEFUSUJMRV9SRU5ERVJf
VEFSR0VUX09QVElPTlNfR0RJX0NPTVBBVElCTEUsICZtX2JhY2tpbmdTdG9yZVJlbmRlclRhcmdl
dCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgICAgIGhy
ID0gbV9iYWNraW5nU3RvcmVSZW5kZXJUYXJnZXQtPkdldEJpdG1hcCgmbV9iYWNraW5nU3RvcmVE
MkRCaXRtYXApOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAg
ICAgICBociA9IG1fYmFja2luZ1N0b3JlUmVuZGVyVGFyZ2V0LT5RdWVyeUludGVyZmFjZShfX3V1
aWRvZihJRDJEMUdkaUludGVyb3BSZW5kZXJUYXJnZXQpLCAodm9pZCoqKSZtX2JhY2tpbmdTdG9y
ZUdkaUludGVyb3ApOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSNl
bmRpZgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTk3OCwxNiArOTQ1LDYgQEAg
dm9pZCBXZWJWaWV3OjpzY3JvbGxCYWNraW5nU3RvcmUoRnJhbWVWaQogICAgIEZsb2F0UmVjdCBj
bGlwUmVjdChsb2dpY2FsQ2xpcFJlY3QpOwogICAgIGNsaXBSZWN0LnNjYWxlKHNjYWxlRmFjdG9y
KTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBSRUNUIHNjcm9sbFJlY3RXaW4oc2Nyb2xsVmll
d1JlY3QpOwotICAgIFJFQ1QgY2xpcFJlY3RXaW4oZW5jbG9zaW5nSW50UmVjdChjbGlwUmVjdCkp
OwotICAgIFJFQ1QgdXBkYXRlUmVjdDsKLSAgICA6OlNjcm9sbFdpbmRvd0V4KG1fdmlld1dpbmRv
dywgZHgsIGR5LCAmc2Nyb2xsUmVjdFdpbiwgJmNsaXBSZWN0V2luLCBudWxscHRyLCAmdXBkYXRl
UmVjdCwgMCk7Ci0gICAgOjpJbnZhbGlkYXRlUmVjdChtX3ZpZXdXaW5kb3csICZ1cGRhdGVSZWN0
LCBGQUxTRSk7Ci0KLSAgICBpZiAobV91aURlbGVnYXRlUHJpdmF0ZSkKLSAgICAgICAgbV91aURl
bGVnYXRlUHJpdmF0ZS0+d2ViVmlld1Njcm9sbGVkKHRoaXMpOwotI2Vsc2UKICAgICBpZiAoaXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBi
ZSBkb2luZyBzb21ldGhpbmcgc21hcnRlciBoZXJlLCBsaWtlIG1vdmluZyB0aWxlcyBhcm91bmQg
YW5kIHBhaW50aW5nCiAgICAgICAgIC8vIGFueSBuZXdseS1leHBvc2VkIHRpbGVzLiA8aHR0cDov
L3dlYmtpdC5vcmcvYi81MjcxND4KQEAgLTEwMzksNyArOTk2LDYgQEAgdm9pZCBXZWJWaWV3Ojpz
Y3JvbGxCYWNraW5nU3RvcmUoRnJhbWVWaQogCiAgICAgLy8gQ2xlYW4gdXAuCiAgICAgOjpTZWxl
Y3RPYmplY3QoYml0bWFwREMuZ2V0KCksIG9sZEJpdG1hcCk7Ci0jZW5kaWYgLy8gVVNFKERJUkVD
VDJEKQogfQogCiB2b2lkIFdlYlZpZXc6OnNpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmIG5ld1Np
emUpCkBAIC0xMDY3LDIwICsxMDIzLDYgQEAgdm9pZCBXZWJWaWV3OjpzaXplQ2hhbmdlZChjb25z
dCBJbnRTaXplJgogICAgIGlmIChtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KQogICAg
ICAgICBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5yZXNpemVSb290TGF5ZXIobmV3
U2l6ZSk7CiAjZW5kaWYKLQotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBpZiAobV9yZW5kZXJUYXJn
ZXQpIHsKLSAgICAgICAgbV9yZW5kZXJUYXJnZXQtPlJlc2l6ZShuZXdTaXplKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBhIERpcmVjdDJEIHJlbmRlciB0YXJnZXQu
Ci0gICAgYXV0byByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gRDJEMTo6UmVuZGVyVGFyZ2V0UHJv
cGVydGllcygpOwotICAgIHJlbmRlclRhcmdldFByb3BlcnRpZXMudXNhZ2UgPSBEMkQxX1JFTkRF
Ul9UQVJHRVRfVVNBR0VfR0RJX0NPTVBBVElCTEU7Ci0gICAgYXV0byBod25kUmVuZGVyVGFyZ2V0
UHJvcGVydGllcyA9IEQyRDE6Okh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKG1fdmlld1dpbmRv
dywgbmV3U2l6ZSwgRDJEMV9QUkVTRU5UX09QVElPTlNfSU1NRURJQVRFTFkpOwotICAgIEhSRVNV
TFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlSHduZFJlbmRl
clRhcmdldCgmcmVuZGVyVGFyZ2V0UHJvcGVydGllcywgJmh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0
aWVzLCAmbV9yZW5kZXJUYXJnZXQpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLSNlbmRp
ZgogfQogCiBib29sIFdlYlZpZXc6OmRwaUNoYW5nZWQoZmxvYXQsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIG5ld1NpemUpCkBAIC0xMTQxLDEzICsxMDgzLDYgQEAgdm9pZCBXZWJWaWV3Ojp1cGRh
dGVCYWNraW5nU3RvcmUoRnJhbWVWaQogCiAgICAgTE9DQUxfR0RJX0NPVU5URVIoMCwgX19GVU5D
VElPTl9fKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlR2Rp
SW50ZXJvcCkgewotICAgICAgICBIUkVTVUxUIGhyID0gbV9iYWNraW5nU3RvcmVSZW5kZXJUYXJn
ZXQtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEMkQxR2RpSW50ZXJvcFJlbmRlclRhcmdldCks
ICh2b2lkKiopJm1fYmFja2luZ1N0b3JlR2RpSW50ZXJvcCk7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKFNVQ0NFRURFRChocikpOwotICAgIH0KLSNlbmRpZgotCiAgICAgR0RJT2JqZWN0PEhEQz4g
Yml0bWFwRENPYmplY3Q7CiAKICAgICBIREMgYml0bWFwREMgPSBkYzsKQEAgLTExNTgsMTAgKzEw
OTMsNiBAQCB2b2lkIFdlYlZpZXc6OnVwZGF0ZUJhY2tpbmdTdG9yZShGcmFtZVZpCiAgICAgICAg
IGJpdG1hcERDID0gYml0bWFwRENPYmplY3QuZ2V0KCk7CiAgICAgICAgIG9sZEJpdG1hcCA9IDo6
U2VsZWN0T2JqZWN0KGJpdG1hcERDLCBtX2JhY2tpbmdTdG9yZUJpdG1hcC0+Z2V0KCkpOwogICAg
ICAgICBBU1NFUlQob2xkQml0bWFwKTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIEhSRVNV
TFQgaHIgPSBtX2JhY2tpbmdTdG9yZUdkaUludGVyb3AtPkdldERDKEQyRDFfRENfSU5JVElBTEla
RV9NT0RFX0NPUFksICZiaXRtYXBEQyk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURF
RChocikpOwotI2VuZGlmCiAgICAgfQogCiAgICAgaWYgKG1fYmFja2luZ1N0b3JlQml0bWFwICYm
IChtX2JhY2tpbmdTdG9yZURpcnR5UmVnaW9uIHx8IGJhY2tpbmdTdG9yZUNvbXBsZXRlbHlEaXJ0
eSkpIHsKQEAgLTExODUsMTIgKzExMTYsOCBAQCB2b2lkIFdlYlZpZXc6OnVwZGF0ZUJhY2tpbmdT
dG9yZShGcmFtZVZpCiAgICAgICAgIG1fYmFja2luZ1N0b3JlRGlydHlSZWdpb24gPSBudWxscHRy
OwogICAgIH0KIAotICAgIGlmICghZGMpIHsKKyAgICBpZiAoIWRjKQogICAgICAgICA6OlNlbGVj
dE9iamVjdChiaXRtYXBEQywgb2xkQml0bWFwKTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAg
IG1fYmFja2luZ1N0b3JlR2RpSW50ZXJvcC0+UmVsZWFzZURDKG51bGxwdHIpOwotI2VuZGlmCi0g
ICAgfQogCiAgICAgR2RpRmx1c2goKTsKIApAQCAtMTIyNSw2OSArMTE1Miw2IEBAIHZvaWQgV2Vi
Vmlldzo6cGVyZm9ybUxheWVyZWRXaW5kb3dVcGRhdGUKICAgICBtX25lZWRzRGlzcGxheSA9IGZh
bHNlOwogfQogCi12b2lkIFdlYlZpZXc6OnBhaW50V2l0aERpcmVjdDJEKCkKLXsKLSNpZiBVU0Uo
RElSRUNUMkQpCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUobV9tYWluRnJhbWUpOwotICAg
IGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSBjb3JlRnJhbWUtPnZpZXcoKTsKLSAgICBmcmFtZVZpZXctPnVwZGF0ZUxheW91dEFuZFN0
eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKLQotICAgIGlmICghbV9yZW5kZXJUYXJnZXQpIHsKLSAg
ICAgICAgLy8gQ3JlYXRlIGEgRGlyZWN0MkQgcmVuZGVyIHRhcmdldC4KLSAgICAgICAgYXV0byBy
ZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gRDJEMTo6UmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwot
ICAgICAgICByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLnVzYWdlID0gRDJEMV9SRU5ERVJfVEFSR0VU
X1VTQUdFX0dESV9DT01QQVRJQkxFOwotCi0gICAgICAgIFJFQ1QgcmVjdDsKLSAgICAgICAgOjpH
ZXRDbGllbnRSZWN0KG1fdmlld1dpbmRvdywgJnJlY3QpOwotCi0gICAgICAgIEludFJlY3QgY2xp
ZW50UmVjdChyZWN0KTsKLQotICAgICAgICBhdXRvIHBpeGVsU2l6ZSA9IEQyRDE6OlNpemVVKGNs
aWVudFJlY3Qud2lkdGgoKSwgY2xpZW50UmVjdC5oZWlnaHQoKSk7Ci0KLSAgICAgICAgYXV0byBo
d25kUmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IEQyRDE6Okh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0
aWVzKG1fdmlld1dpbmRvdywgcGl4ZWxTaXplLCBEMkQxX1BSRVNFTlRfT1BUSU9OU19JTU1FRElB
VEVMWSk7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3Rv
cnkoKS0+Q3JlYXRlSHduZFJlbmRlclRhcmdldCgmcmVuZGVyVGFyZ2V0UHJvcGVydGllcywgJmh3
bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLCAmbV9yZW5kZXJUYXJnZXQpOwotICAgICAgICBpZiAo
IVNVQ0NFRURFRChocikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUkVDVCBj
bGllbnRSZWN0ID0ge307Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgcGxhdGZvcm1Db250
ZXh0KG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHRXaW4gZ2MoJnBs
YXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlw
ZTo6R1BVTWVtb3J5KTsKLQotICAgIHsKLSAgICAgICAgbV9yZW5kZXJUYXJnZXQtPlNldFRhZ3Mo
V0VCS0lUX0RSQVdJTkcsIF9fTElORV9fKTsKLSAgICAgICAgbV9yZW5kZXJUYXJnZXQtPkNsZWFy
KCk7Ci0KLSAgICAgICAgLy8gRGlyZWN0MkQgaG9ub3JzIHRoZSBzY2FsZSBmYWN0b3IgbmF0aXZl
bHkuCi0gICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZjsKLSAgICAgICAgZmxvYXQgaW52
ZXJzZVNjYWxlRmFjdG9yID0gMS4wZiAvIHNjYWxlRmFjdG9yOwotCi0gICAgICAgIEdldENsaWVu
dFJlY3QobV92aWV3V2luZG93LCAmY2xpZW50UmVjdCk7Ci0KLSAgICAgICAgSW50UmVjdCBkaXJ0
eVJlY3RQaXhlbHMoMCwgMCwgY2xpZW50UmVjdC5yaWdodCwgY2xpZW50UmVjdC5ib3R0b20pOwot
ICAgICAgICBGbG9hdFJlY3QgbG9naWNhbERpcnR5UmVjdEZsb2F0ID0gZGlydHlSZWN0UGl4ZWxz
OwotICAgICAgICBsb2dpY2FsRGlydHlSZWN0RmxvYXQuc2NhbGUoaW52ZXJzZVNjYWxlRmFjdG9y
KTsKLSAgICAgICAgSW50UmVjdCBsb2dpY2FsRGlydHlSZWN0KGVuY2xvc2luZ0ludFJlY3QobG9n
aWNhbERpcnR5UmVjdEZsb2F0KSk7Ci0KLSAgICAgICAgaWYgKGZyYW1lVmlldyAmJiBmcmFtZVZp
ZXctPmZyYW1lKCkuY29udGVudFJlbmRlcmVyKCkpIHsKLSAgICAgICAgICAgIGdjLnNhdmUoKTsK
LSAgICAgICAgICAgIGdjLnNjYWxlKEZsb2F0U2l6ZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3Ip
KTsKLSAgICAgICAgICAgIGdjLmNsaXAobG9naWNhbERpcnR5UmVjdCk7Ci0gICAgICAgICAgICBm
cmFtZVZpZXctPnBhaW50KGdjLCBsb2dpY2FsRGlydHlSZWN0KTsKLSAgICAgICAgICAgIGlmICht
X3Nob3VsZEludmVydENvbG9ycykKLSAgICAgICAgICAgICAgICBnYy5maWxsUmVjdChsb2dpY2Fs
RGlydHlSZWN0LCBDb2xvcjo6d2hpdGUsIENvbXBvc2l0ZU9wZXJhdG9yOjpEaWZmZXJlbmNlKTsK
LSAgICAgICAgICAgIGdjLnJlc3RvcmUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIDo6VmFs
aWRhdGVSZWN0KG1fdmlld1dpbmRvdywgJmNsaWVudFJlY3QpOwotI2Vsc2UKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotfQotCiB2b2lkIFdlYlZpZXc6OnBhaW50KEhEQyBkYywg
TFBBUkFNIG9wdGlvbnMpCiB7CiAgICAgTE9DQUxfR0RJX0NPVU5URVIoMCwgX19GVU5DVElPTl9f
KTsKQEAgLTEzNDksMTggKzEyMTMsOCBAQCB2b2lkIFdlYlZpZXc6OnBhaW50KEhEQyBkYywgTFBB
UkFNIG9wdGlvCiAKICAgICA6OlNlbGVjdE9iamVjdChiaXRtYXBEQy5nZXQoKSwgb2xkQml0bWFw
KTsKIAotICAgIGlmICghZGMpIHsKKyAgICBpZiAoIWRjKQogICAgICAgICBFbmRQYWludChtX3Zp
ZXdXaW5kb3csICZwcyk7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgICAgICBIUkVTVUxUIGhyID0g
bV9iYWNraW5nU3RvcmVSZW5kZXJUYXJnZXQtPkVuZERyYXcoKTsKLSAgICAgICAgLy8gRklYTUU6
IFJlY29nbml6ZSBhbmQgcmVjb3ZlciBmcm9tIGVycm9yIHN0YXRlOgotICAgICAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSNlbmRpZgotICAgIH0KLQotI2lmIFVTRShESVJFQ1Qy
RCkKLSAgICBtX2JhY2tpbmdTdG9yZUdkaUludGVyb3AtPlJlbGVhc2VEQyhudWxscHRyKTsKLSNl
bmRpZgogCiAgICAgaWYgKGFjdGl2ZSgpKQogICAgICAgICBjYW5jZWxEZWxldGVCYWNraW5nU3Rv
cmVTb29uKCk7CkBAIC0xNDAzLDEwICsxMjU3LDYgQEAgdm9pZCBXZWJWaWV3OjpwYWludEludG9C
YWNraW5nU3RvcmUoRnJhbQogICAgIGxvZ2ljYWxEaXJ0eVJlY3RGbG9hdC5zY2FsZShpbnZlcnNl
U2NhbGVGYWN0b3IpOyAgICAKICAgICBJbnRSZWN0IGxvZ2ljYWxEaXJ0eVJlY3QoZW5jbG9zaW5n
SW50UmVjdChsb2dpY2FsRGlydHlSZWN0RmxvYXQpKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAg
ICBtX2JhY2tpbmdTdG9yZVJlbmRlclRhcmdldCA9IG51bGxwdHI7Ci0jZW5kaWYKLQogICAgIEdy
YXBoaWNzQ29udGV4dFdpbiBnYyhiaXRtYXBEQywgbV90cmFuc3BhcmVudCk7CiAgICAgZ2Muc2F2
ZSgpOwogICAgIGlmIChtX3RyYW5zcGFyZW50KQpAQCAtMjUxMCwxMSArMjM2MCw3IEBAIExSRVNV
TFQgQ0FMTEJBQ0sgV2ViVmlldzo6V2ViVmlld1duZFByb2MKIAogICAgIHN3aXRjaCAobWVzc2Fn
ZSkgewogICAgICAgICBjYXNlIFdNX1BBSU5UOiB7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgICAg
ICAgICAgd2ViVmlldy0+cGFpbnRXaXRoRGlyZWN0MkQoKTsKLSNlbHNlCiAgICAgICAgICAgICB3
ZWJWaWV3LT5wYWludCgwLCAwKTsKLSNlbmRpZgogICAgICAgICAgICAgaWYgKHdlYlZpZXctPnVz
ZXNMYXllcmVkV2luZG93KCkpCiAgICAgICAgICAgICAgICAgd2ViVmlldy0+cGVyZm9ybUxheWVy
ZWRXaW5kb3dVcGRhdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTQ0NCwxMCArNTI5MCw2
IEBAIEhSRVNVTFQgV2ViVmlldzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2UKICAgICBociA9IHBy
ZWZzUHJpdmF0ZS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoJmVuYWJsZWQpOwogICAg
IGlmIChGQUlMRUQoaHIpKQogICAgICAgICByZXR1cm4gaHI7Ci0jaWYgVVNFKERJUkVDVDJEKQot
ICAgIC8vIERpc2FibGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgZm9yIG5vdy4KLSAgICBlbmFi
bGVkID0gZmFsc2U7Ci0jZW5kaWYKICAgICBzZXR0aW5ncy5zZXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nRW5hYmxlZChlbmFibGVkKTsKIAogICAgIGhyID0gcHJlZnNQcml2YXRlLT5zaG93RGVidWdC
b3JkZXJzKCZlbmFibGVkKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmgJKHJldmlz
aW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsMTMgKzc3LDYgQEAgV2ViVmlldyoga2l0KFdlYkNvcmU6OlBhZ2UqKTsK
IFdlYkNvcmU6OlBhZ2UqIGNvcmUoSVdlYlZpZXcqKTsKIAogaW50ZXJmYWNlIElEcm9wVGFyZ2V0
SGVscGVyOwotI2lmIFVTRShESVJFQ1QyRCkKLWludGVyZmFjZSBJRDJEMUJpdG1hcDsKLWludGVy
ZmFjZSBJRDJEMUJpdG1hcFJlbmRlclRhcmdldDsKLWludGVyZmFjZSBJRDJEMUdkaUludGVyb3BS
ZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFId25kUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNl
IElEMkQxUmVuZGVyVGFyZ2V0OwotI2VuZGlmCiAKIGNsYXNzIFdlYlZpZXcgZmluYWwKICAgICA6
IHB1YmxpYyBJV2ViVmlldwpAQCAtNDI3LDcgKzQyMCw2IEBAIHB1YmxpYzoKICAgICBib29sIGtl
eURvd24oV1BBUkFNLCBMUEFSQU0sIGJvb2wgc3lzdGVtS2V5RG93biA9IGZhbHNlKTsKICAgICBi
b29sIGtleVVwKFdQQVJBTSwgTFBBUkFNLCBib29sIHN5c3RlbUtleURvd24gPSBmYWxzZSk7CiAg
ICAgYm9vbCBrZXlQcmVzcyhXUEFSQU0sIExQQVJBTSwgYm9vbCBzeXN0ZW1LZXlEb3duID0gZmFs
c2UpOwotICAgIHZvaWQgcGFpbnRXaXRoRGlyZWN0MkQoKTsKICAgICB2b2lkIHBhaW50KEhEQywg
TFBBUkFNKTsKICAgICB2b2lkIHBhaW50SW50b1dpbmRvdyhIREMgYml0bWFwREMsIEhEQyB3aW5k
b3dEQywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKICAgICBib29sIGVuc3Vy
ZUJhY2tpbmdTdG9yZSgpOwpAQCAtNjI2LDEyICs2MTgsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBI
TUVOVSBtX2N1cnJlbnRDb250ZXh0TWVudSB7IG51bGxwdHIgfTsKICAgICBSZWZQdHI8V2ViQ29y
ZTo6U2hhcmVkR0RJT2JqZWN0PEhCSVRNQVA+PiBtX2JhY2tpbmdTdG9yZUJpdG1hcDsKLSNpZiBV
U0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEMkQxSHduZFJlbmRlclRhcmdldD4gbV9yZW5kZXJU
YXJnZXQ7Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBtX2JhY2tpbmdTdG9yZUQyREJpdG1hcDsK
LSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IG1fYmFja2luZ1N0b3JlUmVuZGVy
VGFyZ2V0OwotICAgIENPTVB0cjxJRDJEMUdkaUludGVyb3BSZW5kZXJUYXJnZXQ+IG1fYmFja2lu
Z1N0b3JlR2RpSW50ZXJvcDsKLSNlbmRpZgogICAgIFNJWkUgbV9iYWNraW5nU3RvcmVTaXplOwog
ICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRHRElPYmplY3Q8SFJHTj4+IG1fYmFja2luZ1N0b3Jl
RGlydHlSZWdpb247CiAKSW5kZXg6IFNvdXJjZS9jbWFrZS9PcHRpb25zRlRXLmNtYWtlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9jbWFrZS9PcHRpb25zRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIp
CisrKyBTb3VyY2UvY21ha2UvT3B0aW9uc0ZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDIz
NiArMCwwIEBACi1pZiAoQ01BS0VfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy4xNCkKLSAgICBtZXNz
YWdlKEZBVEFMX0VSUk9SICJDTWFrZSAzLjE0IG9yIGdyZWF0ZXIgaXMgcmVxdWlyZWQgdG8gY29t
cGlsZSBXZWJLaXRGVFciKQotZW5kaWYgKCkKLQotaWYgKE1TVkNfVkVSU0lPTiBWRVJTSU9OX0xF
U1MgMTkyMCkKLSAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJWaXN1YWwgU3R1ZGlvIDIwMTkgaXMg
cmVxdWlyZWQgdG8gY29tcGlsZSBXZWJLaXRGVFciKQotZW5kaWYgKCkKLQotaWYgKCR7V1RGX0NQ
VV9YODZ9KQotICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIldlYktpdEZUVyBkb2VzIG5vdCBzdXBw
b3J0IDMyLWJpdCBidWlsZHMiKQotZW5kaWYgKCkKLQotc2V0KFBPUlQgRlRXKQotCi0jIENvbXBp
bGF0aW9uIG9wdGlvbnMKLWluY2x1ZGUoT3B0aW9uc01TVkMpCi0KLWFkZF9kZWZpbml0aW9ucygt
RFdURl9QTEFURk9STV9GVFc9MSkKLSMgUHJldmVudCBtaW4oKSBhbmQgbWF4KCkgbWFjcm9zIGZy
b20gYmVpbmcgZXhwb3NlZAotYWRkX2RlZmluaXRpb25zKC1ETk9NSU5NQVgpCi0jIFVzZSB1bmlj
b2RlCi1hZGRfZGVmaW5pdGlvbnMoLURVTklDT0RFIC1EX1VOSUNPREUpCi0jIElmIDx3aW5zb2Nr
Mi5oPiBpcyBub3QgaW5jbHVkZWQgYmVmb3JlIDx3aW5kb3dzLmg+IHJlZGVmaW5pdGlvbiBlcnJv
cnMgb2NjdXIKLSMgdW5sZXNzIF9XSU5TT0NLQVBJXyBpcyBkZWZpbmVkIGJlZm9yZSA8d2luZG93
cy5oPiBpcyBpbmNsdWRlZAotYWRkX2RlZmluaXRpb25zKC1EX1dJTlNPQ0tBUElfPSkKLQotIyBT
ZXR1cCBsaWJyYXJ5IHBhdGhzCi1pZiAoREVGSU5FRCBFTlZ7QXBwbGVBcHBsaWNhdGlvblN1cHBv
cnRTREt9KQotICAgIGZpbGUoVE9fQ01BS0VfUEFUSCAiJEVOVntBcHBsZUFwcGxpY2F0aW9uU3Vw
cG9ydFNES30vQXBwbGVJbnRlcm5hbCIgV0VCS0lUX0xJQlJBUklFU19ESVIpCi0gICAgc2V0KFdF
QktJVF9MSUJSQVJJRVNfSU5DTFVERV9ESVIgIiR7V0VCS0lUX0xJQlJBUklFU19ESVJ9L2luY2x1
ZGUiKQotICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtXRUJLSVRfTElCUkFSSUVTX0lOQ0xVREVf
RElSfSkKLSAgICBzZXQoQVBQTEVfQlVJTEQgMSkKLWVuZGlmICgpCi0KLWlmIChOT1QgV0VCS0lU
X0xJQlJBUklFU19ESVIpCi0gICAgaWYgKERFRklORUQgRU5We1dFQktJVF9MSUJSQVJJRVN9KQot
ICAgICAgICBmaWxlKFRPX0NNQUtFX1BBVEggIiRFTlZ7V0VCS0lUX0xJQlJBUklFU30iIFdFQktJ
VF9MSUJSQVJJRVNfRElSKQotICAgIGVsc2UgKCkKLSAgICAgICAgZmlsZShUT19DTUFLRV9QQVRI
ICIke0NNQUtFX1NPVVJDRV9ESVJ9L1dlYktpdExpYnJhcmllcy93aW4iIFdFQktJVF9MSUJSQVJJ
RVNfRElSKQotICAgIGVuZGlmICgpCi1lbmRpZiAoKQotCi1zZXQoQ01BS0VfUFJFRklYX1BBVEgg
JHtXRUJLSVRfTElCUkFSSUVTX0RJUn0pCi0KLXNldF9wcm9wZXJ0eShHTE9CQUwgUFJPUEVSVFkg
RklORF9MSUJSQVJZX1VTRV9MSUIzMl9QQVRIUyBPRkYpCi1zZXRfcHJvcGVydHkoR0xPQkFMIFBS
T1BFUlRZIEZJTkRfTElCUkFSWV9VU0VfTElCNjRfUEFUSFMgT04pCi0KLXNldChXRUJLSVRfTElC
UkFSSUVTX0xJTktfRElSICIke1dFQktJVF9MSUJSQVJJRVNfRElSfS9saWI2NCIpCi0jIEZJWE1F
OiBSZW1vdmUgJHtXRUJLSVRfTElCUkFSSUVTX0xJTktfRElSfSB3aGVuIGZpbmRfbGlicmFyeSBp
cyB1c2VkIGZvciBldmVyeXRoaW5nCi1saW5rX2RpcmVjdG9yaWVzKCIke0NNQUtFX0JJTkFSWV9E
SVJ9L2xpYjY0IiAiJHtXRUJLSVRfTElCUkFSSUVTX0xJTktfRElSfSIpCi1zZXQoQ01BS0VfQVJD
SElWRV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQklOQVJZX0RJUn0vbGliNjQpCi1zZXQoQ01B
S0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQklOQVJZX0RJUn0vbGliNjQpCi1z
ZXQoQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQklOQVJZX0RJUn0vYmlu
NjQpCi0KLXNldChDTUFLRV9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUllfREVCVUcgIiR7Q01BS0Vf
QVJDSElWRV9PVVRQVVRfRElSRUNUT1JZfSIpCi1zZXQoQ01BS0VfQVJDSElWRV9PVVRQVVRfRElS
RUNUT1JZX1JFTEVBU0UgIiR7Q01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZfSIpCi1zZXQo
Q01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZX0RFQlVHICIke0NNQUtFX0xJQlJBUllfT1VU
UFVUX0RJUkVDVE9SWX0iKQotc2V0KENNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWV9SRUxF
QVNFICIke0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWX0iKQotc2V0KENNQUtFX1JVTlRJ
TUVfT1VUUFVUX0RJUkVDVE9SWV9ERUJVRyAiJHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RP
Ull9IikKLXNldChDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUllfUkVMRUFTRSAiJHtDTUFL
RV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9IikKLQotV0VCS0lUX09QVElPTl9CRUdJTigpCi0K
LSMgRmVhdHVyZXMgaW4gdGhlIHNhbWUgc3RhdGUgb24gV2luQ2Fpcm8gYW5kIEFwcGxlV2luCi0K
LVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV8zRF9UUkFOU0ZPUk1TIFBS
SVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQVRUQUNI
TUVOVF9FTEVNRU5UIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfQ0FDSEVfUEFSVElUSU9OSU5HIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcgUFJJVkFURSBPTikKLVdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1MzX1RFWFQgUFJJVkFURSBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX0JPWF9ERUNP
UkFUSU9OX0JSRUFLIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfQ1NTX0NPTklDX0dSQURJRU5UUyBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19ERVZJQ0VfQURBUFRBVElPTiBQUklWQVRFIE9G
RikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1NfSU1BR0VfUkVT
T0xVVElPTiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9DU1NfUEFJTlRJTkdfQVBJIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfQ1NTX1NFTEVDVE9SU19MRVZFTDQgUFJJVkFURSBPTikKLVdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DVVJTT1JfVklTSUJJTElUWSBQUklW
QVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0RSQUdfU1VQ
UE9SVCBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X0ZJTFRFUlNfTEVWRUxfMiBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX0ZUTF9KSVQgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfRlRQRElSIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfRlVMTFNDUkVFTl9BUEkgUFJJVkFURSBPRkYpCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfR0VPTE9DQVRJT04gUFJJVkFURSBPTikK
LVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9NQUNfR0VTVFVSRV9FVkVO
VFMgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
TUFUSE1MIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfTUVESUFfQ09OVFJPTFNfU0NSSVBUIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfTUhUTUwgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTUlOSUJST1dTRVIgUFJJVkFURSBPTikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9NT1VTRV9DVVJTT1JfU0NBTEUgUFJJVkFU
RSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ORVRTQ0FQRV9Q
TFVHSU5fQVBJIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX09SSUVOVEFUSU9OX0VWRU5UUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVG
QVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9PVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0ggUFJJVkFURSBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUFVCTElDX1NVRkZJ
WF9MSVNUIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfU0FNUExJTkdfUFJPRklMRVIgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfU1BFTExDSEVDSyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9UT1VDSF9FVkVOVFMgUFJJVkFURSBPRkYpCi1XRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVE9VQ0hfU0xJREVSIFBSSVZBVEUg
T0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1VOSUZJRURfQlVJ
TERTIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
VklERU8gUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9XRUJBU1NFTUJMWSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9XRUJHTCBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCBQUklWQVRFIE9GRikKLVdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9YU0xUIFBSSVZBVEUgT04pCi0KLSMg
TWVkaWEgdGhpbmdzIHRoYXQgc2hvdWxkIGJlIG9uCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfQVZGX0NBUFRJT05TIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQl9BVURJTyBQUklWQVRFIE9GRikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9MRUdBQ1lfRU5DUllQVEVEX01FRElBIFBS
SVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX01FRElB
X0NBUFRVUkUgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfTUVESUFfU09VUkNFIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTUVESUFfU1RSRUFNIFBSSVZBVEUgT0ZGKQot
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1ZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQl9SVEMgUFJJVkFURSBPRkYpCi0KLSMg
UGF5bWVudCB0aGluZ3MKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9B
UFBMRV9QQVkgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfUEFZTUVOVF9SRVFVRVNUIFBSSVZBVEUgT0ZGKQotCi0jIFdlYkdMCi1XRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCR0wyIFBSSVZBVEUgT0ZGKQotCi0jIE9m
ZiBmb3Igbm93LCBidXQgc2hvdWxkIGJlIG9uCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfQVBJX1RFU1RTIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX0FQUExJQ0FUSU9OX01BTklGRVNUIFBSSVZBVEUgT0ZGKQotV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FTWU5DX1NDUk9MTElORyBQUklW
QVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DT05URU5U
X0VYVEVOU0lPTlMgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfQ09OVEVOVF9GSUxURVJJTkcgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX1RZUEVEX09NIFBSSVZBVEUgT0ZGKQotV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0RBUktfTU9ERV9DU1MgUFJJVkFURSBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfREFUQUNVRV9WQUxV
RSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9E
QVRBTElTVF9FTEVNRU5UIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ET1dOTE9BRF9BVFRSSUJVVEUgUFJJVkFURSBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRU5DUllQVEVEX01F
RElBIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X0lOVEVMTElHRU5UX1RSQUNLSU5HX1BSRVZFTlRJT04gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTEFZRVJfQkFTRURfU1ZHX0VOR0lORSBQUklW
QVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9MQVlPVVRf
Rk9STUFUVElOR19DT05URVhUIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX0xFVFRFUlBSRVNTIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0xBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQgUFJJVkFU
RSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTEVUVEVSUFJF
U1MgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
TUVNT1JZX1NBTVBMRVIgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04gUFJJVkFU
RSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTkVUV09SS19D
QUNIRV9TVEFMRV9XSElMRV9SRVZBTElEQVRFIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX05PVElGSUNBVElPTlMgUFJJVkFURSBPRkYpCi1XRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfT1ZFUkZMT1dfU0NST0xMSU5HX1RP
VUNIIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X1BERktJVF9QTFVHSU4gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfUE9JTlRFUl9MT0NLIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFU09VUkNFX1VTQUdFIFBSSVZBVEUgT0ZGKQotV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JVQkJFUl9CQU5ESU5HIFBSSVZBVEUg
T0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NBTkRCT1hfRVhU
RU5TSU9OUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9TRVJWRVJfUFJFQ09OTkVDVCBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9TRVJWSUNFX0NPTlRST0xTIFBSSVZBVEUgT0ZGKQotV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NFUlZJQ0VfV09SS0VSIFBSSVZBVEUg
T0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NIQVJFQUJMRV9S
RVNPVVJDRSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9TTU9PVEhfU0NST0xMSU5HIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX1NQRUVDSF9TWU5USEVTSVMgUFJJVkFURSBPRkYpCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJ
T04gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
VEVYVF9BVVRPU0laSU5HIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX1VTRVJfTUVTU0FHRV9IQU5ETEVSUyBQUklWQVRFIE9GRikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9WQVJJQVRJT05fRk9OVFMgUFJJVkFURSBP
RkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCRFJJVkVSIFBS
SVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQl9B
VVRITiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9XRUJfQ1JZUFRPIFBSSVZBVEUgT0ZGKQotCi0jV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoVVNFX1ZFUlNJT05fU1RBTVBFUiBQUklWQVRFIE9OKQotCi0jIEV4cGVyaW1lbnRhbCBm
ZWF0dXJlcwotI1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRU1PVEVf
SU5TUEVDVE9SIFBSSVZBVEUgJHtFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTfSkKLVdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SIFBSSVZB
VEUgT0ZGKQotI1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRVNPVVJD
RV9VU0FHRSBQUklWQVRFICR7RU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFU30pCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVTT1VSQ0VfVVNBR0UgUFJJVkFURSBP
RkYpCi0KLSMgRmVhdHVyZXMgdG8gaW52ZXN0aWdhdGUKLSMKLSMgRmVhdHVyZXMgdGhhdCBhcmUg
dGVtcG9yYXJpbHkgdHVybmVkIG9mZiBiZWNhdXNlIGFuIGltcGxlbWVudGF0aW9uIGlzIG5vdAot
IyBwcmVzZW50IGF0IHRoaXMgdGltZQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX0ZUTF9KSVQgUFJJVkFURSBPRkYpCi0KLSMgTm8gc3VwcG9ydCBwbGFubmVkCi0KLSMg
RklYTUU6IFBvcnQgYm1hbGxvYyB0byBXaW5kb3dzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQzMzEwCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShV
U0VfU1lTVEVNX01BTExPQyBQUklWQVRFIE9OKQotCi1XRUJLSVRfT1BUSU9OX0VORCgpCi0KLWlm
IChBUFBMRV9CVUlMRCkKLSAgICBzZXQoQ09SRUZPVU5EQVRJT05fTElCUkFSWSBDb3JlRm91bmRh
dGlvbiR7REVCVUdfU1VGRklYfSkKLSAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ0Yg
T04pCi0gICAgZmluZF9wYWNrYWdlKExpYlhtbDIgMi45LjEgUkVRVUlSRUQpCi0gICAgaWYgKEVO
QUJMRV9YU0xUKQotICAgICAgICBmaW5kX3BhY2thZ2UoTGliWHNsdCAxLjEuMjggUkVRVUlSRUQp
Ci0gICAgZW5kaWYgKCkKLWVsc2UgKCkKLSAgICBmaW5kX3BhY2thZ2UoTGliWG1sMiAyLjkuNyBS
RVFVSVJFRCkKLSAgICBpZiAoRU5BQkxFX1hTTFQpCi0gICAgICAgIGZpbmRfcGFja2FnZShMaWJY
c2x0IDEuMS4zMiBSRVFVSVJFRCkKLSAgICBlbmRpZiAoKQotZW5kaWYgKCkKLQotZmluZF9wYWNr
YWdlKENVUkwgNy42MC4wIFJFUVVJUkVEKQotZmluZF9wYWNrYWdlKElDVSA2MS4yIFJFUVVJUkVE
IENPTVBPTkVOVFMgZGF0YSBpMThuIHVjKQotZmluZF9wYWNrYWdlKEpQRUcgMS41LjIgUkVRVUlS
RUQpCi1maW5kX3BhY2thZ2UoT3BlblNTTCAyLjAuMCBSRVFVSVJFRCkKLWZpbmRfcGFja2FnZShQ
TkcgMS42LjM0IFJFUVVJUkVEKQotZmluZF9wYWNrYWdlKFNRTGl0ZTMgMy4yMy4xIFJFUVVJUkVE
KQotZmluZF9wYWNrYWdlKFpMSUIgMS4yLjExIFJFUVVJUkVEKQotZmluZF9wYWNrYWdlKExpYlBT
TCAwLjIwLjIgUkVRVUlSRUQpCi0KLSMgRklYTUU6IFdlIHNob3VsZCBhZGQgdGhlIGZvbGxvd2lu
ZywgdG9vLgotIyBmaW5kX3BhY2thZ2UoV2ViUCBSRVFVSVJFRCBDT01QT05FTlRTIGRlbXV4KQot
IyBpZiAoV2ViUF9GT1VORCkKLSMgICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9XRUJQ
IE9OKQotIyBlbmRpZiAoKQotCi1zZXQoVVNFX0FOR0xFX0VHTCBPTikKLQotU0VUX0FORF9FWFBP
U0VfVE9fQlVJTEQoVVNFX0NVUkwgT04pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfRElS
RUNUMkQgT04pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfRUdMIE9OKQotU0VUX0FORF9F
WFBPU0VfVE9fQlVJTEQoVVNFX09QRU5HTF9FUyBPTikKLVNFVF9BTkRfRVhQT1NFX1RPX0JVSUxE
KEhBVkVfT1BFTkdMX0VTXzMgT04pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfT1BFTlNT
TCBPTikKLVNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9URVhUVVJFX01BUFBFUiBPTikKLVNF
VF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9URVhUVVJFX01BUFBFUl9HTCBPTikKLSNTRVRfQU5E
X0VYUE9TRV9UT19CVUlMRChVU0VfSU5TUEVDVE9SX1NPQ0tFVF9TRVJWRVIgJHtFTkFCTEVfUkVN
T1RFX0lOU1BFQ1RPUn0pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfSU5TUEVDVE9SX1NP
Q0tFVF9TRVJWRVIgT0ZGKQotCi1zZXQoV1RGX0xJQlJBUllfVFlQRSBTSEFSRUQpCi1zZXQoSmF2
YVNjcmlwdENvcmVfTElCUkFSWV9UWVBFIFNIQVJFRCkKLQotc2V0KEVOQUJMRV9BUElfVEVTVFMg
T0ZGKQotc2V0KEVOQUJMRV9XRUJDT1JFIE9OKQotc2V0KEVOQUJMRV9XRUJLSVQgT04pCi1zZXQo
RU5BQkxFX1dFQktJVF9MRUdBQ1kgT04pCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc4MTIpCisrKyBUb29scy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAyMi0wMS0wNyAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIERpcmVj
dDJECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5
OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL1BsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9QaXhl
bER1bXBTdXBwb3J0RGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL3dpbi9QaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydFdpbi5jcHA6CisgICAgICAgIChjcmVh
dGVCaXRtYXBDb250ZXh0RnJvbVdlYlZpZXcpOgorICAgICAgICAqIFBsYXRmb3JtRlRXLmNtYWtl
OiBSZW1vdmVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpk
dW1wRE9NQXNXZWJBcmNoaXZlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1BsYXRmb3Jt
RlRXLmNtYWtlOiBSZW1vdmVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1X
ZWJWaWV3Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4vUGxhdGZvcm1XZWJWaWV3
V2luLmNwcDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL3dpbi9UZXN0SW52b2NhdGlvbkRp
cmVjdDJELmNwcDogUmVtb3ZlZC4KKwogMjAyMi0wMS0wOCAgVHlsZXIgV2lsY29jayAgPHR5bGVy
X3dAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRGb2N1
c2VkKHRydWUpIHNob3VsZCBtYWtlIHRoZSB3ZWJwYWdlIGZvY3VzZWQsIGFuZCBtYWtlIHdlYiBj
b250ZW50IHRoZSBmaXJzdCByZXNwb25kZXIKSW5kZXg6IFRvb2xzL1BsYXRmb3JtRlRXLmNtYWtl
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIp
CisrKyBUb29scy9QbGF0Zm9ybUZUVy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDExICswLDAg
QEAKLSNhZGRfc3ViZGlyZWN0b3J5KEltYWdlRGlmZikKLQotaWYgKEVOQUJMRV9XRUJLSVRfTEVH
QUNZKQotICAgICNhZGRfc3ViZGlyZWN0b3J5KER1bXBSZW5kZXJUcmVlKQotICAgIGFkZF9zdWJk
aXJlY3RvcnkoTWluaUJyb3dzZXIvd2luKQotZW5kaWYgKCkKLQotaWYgKEVOQUJMRV9XRUJLSVQp
Ci0gICAgYWRkX3N1YmRpcmVjdG9yeShUZXN0UnVubmVyU2hhcmVkKQotICAgIGFkZF9zdWJkaXJl
Y3RvcnkoV2ViS2l0VGVzdFJ1bm5lcikKLWVuZGlmICgpCkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS9QaXhlbER1bXBTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS9QaXhlbER1bXBTdXBwb3J0LmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDgg
KzQxLDYgQEAKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0Q0cuaCIKICNlbGlmIFVTRShDQUlS
TykKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0Q2Fpcm8uaCIKLSNlbGlmIFVTRShESVJFQ1Qy
RCkKLSNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuaCIKICNlbmRpZgogCiB2b2lk
IGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBleHBlY3RlZEhhc2gpCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9QbGF0Zm9ybVdp
bi5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9QbGF0Zm9ybVdpbi5j
bWFrZQkocmV2aXNpb24gMjg3ODEyKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvUGxhdGZvcm1X
aW4uY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTUyLDI0ICs1MiwxNSBAQCBlbHNlICgpCiAgICAg
ICAgIENGTmV0d29yawogICAgICAgICBDb3JlVGV4dAogICAgICkKLSAgICBpZiAoJHtVU0VfRElS
RUNUMkR9KQotICAgICAgICBsaXN0KEFQUEVORCBEdW1wUmVuZGVyVHJlZV9TT1VSQ0VTCi0gICAg
ICAgICAgICB3aW4vUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmNwcAotICAgICAgICApCi0gICAg
ICAgIGxpc3QoQVBQRU5EIER1bXBSZW5kZXJUcmVlX0xJQlJBUklFUwotICAgICAgICAgICAgRDJk
MQotICAgICAgICApCi0gICAgZWxzZSAoKQotICAgICAgICBsaXN0KEFQUEVORCBEdW1wUmVuZGVy
VHJlZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAgICAgICAgICR7RHVtcFJlbmRl
clRyZWVfRElSfS9jZwotICAgICAgICApCi0gICAgICAgIGxpc3QoQVBQRU5EIER1bXBSZW5kZXJU
cmVlX1NPVVJDRVMKLSAgICAgICAgICAgIGNnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAKLSAgICAg
ICAgKQotICAgICAgICBsaXN0KEFQUEVORCBEdW1wUmVuZGVyVHJlZV9MSUJSQVJJRVMKLSAgICAg
ICAgICAgIENvcmVHcmFwaGljcwotICAgICAgICApCi0gICAgZW5kaWYgKCkKKyAgICBsaXN0KEFQ
UEVORCBEdW1wUmVuZGVyVHJlZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAg
JHtEdW1wUmVuZGVyVHJlZV9ESVJ9L2NnCisgICAgKQorICAgIGxpc3QoQVBQRU5EIER1bXBSZW5k
ZXJUcmVlX1NPVVJDRVMKKyAgICAgICAgY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmNwcAorICAgICkK
KyAgICBsaXN0KEFQUEVORCBEdW1wUmVuZGVyVHJlZV9MSUJSQVJJRVMKKyAgICAgICAgQ29yZUdy
YXBoaWNzCisgICAgKQogZW5kaWYgKCkKIAogV0VCS0lUX0FERF9QUkVDT01QSUxFRF9IRUFERVIo
IkR1bXBSZW5kZXJUcmVlUHJlZml4LmgiICJ3aW4vRHVtcFJlbmRlclRyZWVQcmVmaXguY3BwIiBE
dW1wUmVuZGVyVHJlZV9TT1VSQ0VTKQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Bp
eGVsRHVtcFN1cHBvcnREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL1BpeGVsRHVtcFN1cHBvcnREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikK
KysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuY3Bw
CShub25leGlzdGVudCkKQEAgLTEsODEgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0q
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmgi
Ci0KLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgotI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBv
cnQuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRl
IDxkMmQxLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdF
eHRyYXMuaD4KLQotCi1zdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZVBORyA9IENGU1RS
KCJwdWJsaWMucG5nIik7Ci0KLUlEMkQxRmFjdG9yeSogcGl4ZWxEdW1wU3lzdGVtRmFjdG9yeSgp
Ci17Ci0gICAgc3RhdGljIElEMkQxRmFjdG9yeSogZGlyZWN0MkRGYWN0b3J5ID0gbnVsbHB0cjsK
LSAgICBpZiAoIWRpcmVjdDJERmFjdG9yeSkgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgRDJE
MV9GQUNUT1JZX09QVElPTlMgb3B0aW9ucyA9IHsgfTsKLSAgICAgICAgb3B0aW9ucy5kZWJ1Z0xl
dmVsID0gRDJEMV9ERUJVR19MRVZFTF9JTkZPUk1BVElPTjsKLSAgICAgICAgSFJFU1VMVCBociA9
IEQyRDFDcmVhdGVGYWN0b3J5KEQyRDFfRkFDVE9SWV9UWVBFX01VTFRJX1RIUkVBREVELCBvcHRp
b25zLCAmZGlyZWN0MkRGYWN0b3J5KTsKLSNlbHNlCi0gICAgICAgIEhSRVNVTFQgaHIgPSBEMkQx
Q3JlYXRlRmFjdG9yeShEMkQxX0ZBQ1RPUllfVFlQRV9NVUxUSV9USFJFQURFRCwgJmRpcmVjdDJE
RmFjdG9yeSk7Ci0jZW5kaWYKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGRpcmVjdDJERmFjdG9yeTsKLX0KLQotc3RhdGljIHZvaWQg
cHJpbnRQTkcoSUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBjaGFyKiBjaGVja3N1bSkKLXsKLSAg
ICBVTlVTRURfUEFSQU0oaW1hZ2UpOwotICAgIFVOVVNFRF9QQVJBTShjaGVja3N1bSk7Ci0gICAg
Ly8gTm90IGltcGxlbWVudGVkLgotfQotCi12b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckJp
dG1hcENvbnRleHQoQml0bWFwQ29udGV4dCogY29udGV4dCwgY2hhciBoYXNoU3RyaW5nWzMzXSkK
LXsKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGhhc2hTdHJp
bmcpOwotICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KLX0KLQotdm9pZCBkdW1wQml0bWFwKEJpdG1h
cENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGNoZWNrc3VtKQotewotICAgIF9jb21fcHRy
X3Q8X2NvbV9JSUlEPElEMkQxQml0bWFwLCAmX191dWlkb2YoSUQyRDFCaXRtYXApPj4gaW1hZ2U7
Ci0gICAgSFJFU1VMVCBociA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5HZXRCaXRtYXAo
JmltYWdlKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHByaW50UE5HKGltYWdlLkdldEludGVyZmFjZVB0cigpLCBjaGVja3N1bSk7Ci19CkluZGV4OiBU
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BpeGVsRHVtcFN1cHBvcnREaXJlY3Qy
RC5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxE
dW1wU3VwcG9ydERpcmVjdDJELmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2NCArMCwwIEBACi0vKgot
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgot
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgot
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSovCi0KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxjb21pcC5oPgot
I2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLQotdHlwZWRlZiBIQklUTUFQIFBsYXRmb3JtQml0bWFwQnVmZmVy
OwotCi1jbGFzcyBCaXRtYXBDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8Qml0bWFwQ29udGV4
dD4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Qml0bWFwQ29udGV4dD4gY3JlYXRlQnlBZG9w
dGluZ0JpdG1hcEFuZENvbnRleHQoUGxhdGZvcm1CaXRtYXBCdWZmZXIgYnVmZmVyLCBJRDJEMVJl
bmRlclRhcmdldCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEJpdG1hcENvbnRleHQoYnVmZmVyLCBjb250ZXh0KSk7Ci0gICAgfQotCi0gICAgfkJpdG1hcENv
bnRleHQoKQotICAgIHsKLSAgICAgICAgaWYgKG1fYnVmZmVyKQotICAgICAgICAgICAgRGVsZXRl
T2JqZWN0KG1fYnVmZmVyKTsKLSAgICB9Ci0KLSAgICBJRDJEMUJpdG1hcFJlbmRlclRhcmdldCog
cGxhdGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LkdldEludGVyZmFjZVB0
cigpOyB9Ci0KLXByaXZhdGU6Ci0gICAgQml0bWFwQ29udGV4dChQbGF0Zm9ybUJpdG1hcEJ1ZmZl
ciBidWZmZXIsIElEMkQxUmVuZGVyVGFyZ2V0KiBjb250ZXh0KQotICAgICAgICA6IG1fYnVmZmVy
KGJ1ZmZlcikKLSAgICAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgUGxhdGZvcm1CaXRtYXBCdWZmZXIgbV9idWZmZXI7Ci0gICAgX2NvbV9wdHJfdDxfY29tX0lJ
SUQ8SUQyRDFCaXRtYXAsICZfX3V1aWRvZihJRDJEMUJpdG1hcCk+PiBtX2JpdG1hcDsKLSAgICBf
Y29tX3B0cl90PF9jb21fSUlJRDxJRDJEMUJpdG1hcFJlbmRlclRhcmdldCwgJl9fdXVpZG9mKElE
MkQxQml0bWFwUmVuZGVyVGFyZ2V0KT4+IG1fY29udGV4dDsKLX07Ci0KLVJlZlB0cjxCaXRtYXBD
b250ZXh0PiBjcmVhdGVCaXRtYXBDb250ZXh0RnJvbVdlYlZpZXcoYm9vbCBvbnNjcmVlbiwgYm9v
bCBpbmNyZW1lbnRhbFJlcGFpbnQsIGJvb2wgc3dlZXBIb3Jpem9udGFsbHksIGJvb2wgZHJhd1Nl
bGVjdGlvblJlY3QpOwotSUQyRDFGYWN0b3J5KiBwaXhlbER1bXBTeXN0ZW1GYWN0b3J5KCk7Cklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydFdpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BpeGVsRHVtcFN1cHBvcnRXaW4u
Y3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxE
dW1wU3VwcG9ydFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDYgQEAKICNpbmNs
dWRlICJQaXhlbER1bXBTdXBwb3J0Q0cuaCIKICNlbGlmIFVTRShDQUlSTykKICNpbmNsdWRlICJQ
aXhlbER1bXBTdXBwb3J0Q2Fpcm8uaCIKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJQ
aXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAiRHVtcFJlbmRl
clRyZWUuaCIKQEAgLTk2LDE5ICs5NCw2IEBAIFJlZlB0cjxCaXRtYXBDb250ZXh0PiBjcmVhdGVC
aXRtYXBDb250ZXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZm8uYm1XaWR0aCwgaW5mby5ibUhlaWdodCwgaW5mby5ibVdpZHRoQnl0ZXMp
OyAKICAgICBjYWlyb190KiBjb250ZXh0ID0gY2Fpcm9fY3JlYXRlKGltYWdlKTsgCiAgICAgY2Fp
cm9fc3VyZmFjZV9kZXN0cm95KGltYWdlKTsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBhdXRv
IHRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0gICAg
dGFyZ2V0UHJvcGVydGllcy5waXhlbEZvcm1hdCA9IEQyRDE6OlBpeGVsRm9ybWF0KERYR0lfRk9S
TUFUX0I4RzhSOEE4X1VOT1JNLCBEMkQxX0FMUEhBX01PREVfSUdOT1JFKTsKLQotICAgIENPTVB0
cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IHBp
eGVsRHVtcFN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRhcmdldFByb3Bl
cnRpZXMsICZyZW5kZXJUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBociA9IHJlbmRlclRhcmdldC0+QmluZERDKG1lbW9yeURD
LmdldCgpLCAmZnJhbWUpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgYXV0byBjb250ZXh0ID0gcmVuZGVyVGFyZ2V0LmdldCgpOwogI2VuZGlm
IAogCiAgICAgcmV0dXJuIEJpdG1hcENvbnRleHQ6OmNyZWF0ZUJ5QWRvcHRpbmdCaXRtYXBBbmRD
b250ZXh0KGJpdG1hcCwgV1RGTW92ZShjb250ZXh0KSk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvQWZmaW5lVHJhbnNmb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQWZmaW5lVHJhbnNmb3JtLmNwcAkocmV2aXNp
b24gMjg3ODEyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FmZmluZVRy
YW5zZm9ybS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEwICszOSw2IEBACiAjaW5jbHVkZSA8
Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2VuZGlmCiAKLSNpZiBQTEFURk9STShXSU4p
Ci0jaW5jbHVkZSA8ZDJkMS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsK
IAogc3RhdGljIHZvaWQgdGVzdEdldEFuZFNldChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIGFm
ZmluZVRyYW5zZm9ybSkKQEAgLTEzNSwxOSArMTMxLDYgQEAgVEVTVChBZmZpbmVUcmFuc2Zvcm0s
IENHQWZmaW5lVHJhbnNmb3JtQwogfQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShXSU4pCi1URVNU
KEFmZmluZVRyYW5zZm9ybSwgRDJEMU1hdHJpeENvbnN0cnVjdGlvbikKLXsKLSAgICBEMkQxX01B
VFJJWF8zWDJfRiBkMmRUcmFuc2Zvcm0gPSBEMkQxOjpNYXRyaXgzeDJGKDYuMCwgNS4wLCA0LjAs
IDMuMCwgMi4wLCAxLjApOwotICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0KGQyZFRy
YW5zZm9ybSk7Ci0KLSAgICB0ZXN0VmFsdWVDb25zdHJ1Y3Rpb24odGVzdCk7Ci0gICAgdGVzdEdl
dEFuZFNldCh0ZXN0KTsKLQotICAgIEFTU0VSVF9GQUxTRSh0ZXN0LmlzSWRlbnRpdHkoKSk7Ci19
Ci0jZW5kaWYKLQogVEVTVChBZmZpbmVUcmFuc2Zvcm0sIElkZW50aXR5KQogewogICAgIFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybSB0ZXN0KDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOwpA
QCAtMTAwMiwyMyArOTg1LDQgQEAgVEVTVChBZmZpbmVUcmFuc2Zvcm0sIENvcmVHcmFwaGljc0Nh
c3RpbgogfQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShXSU4pCi1URVNUKEFmZmluZVRyYW5zZm9y
bSwgRGlyZWN0MkRDYXN0aW5nKQotewotICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm0oNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7Ci0KLSAgICBEMkQxX01BVFJJWF8z
WDJfRiB0ZXN0ID0gdHJhbnNmb3JtOwotICAgIEQyRDFfTUFUUklYXzNYMl9GIHRlc3QyID0gRDJE
MTo6TWF0cml4M3gyRig2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKLQotICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgZXBzaWxvbiA9IDAuMDAwMDAwMTsKLQotICAgIEVYUEVDVF9ORUFSKHRl
c3QuXzExLCB0ZXN0Mi5fMTEsIGVwc2lsb24pOwotICAgIEVYUEVDVF9ORUFSKHRlc3QuXzEyLCB0
ZXN0Mi5fMTIsIGVwc2lsb24pOwotICAgIEVYUEVDVF9ORUFSKHRlc3QuXzIxLCB0ZXN0Mi5fMjEs
IGVwc2lsb24pOwotICAgIEVYUEVDVF9ORUFSKHRlc3QuXzIyLCB0ZXN0Mi5fMjIsIGVwc2lsb24p
OwotICAgIEVYUEVDVF9ORUFSKHRlc3QuXzMxLCB0ZXN0Mi5fMzEsIGVwc2lsb24pOwotICAgIEVY
UEVDVF9ORUFSKHRlc3QuXzMyLCB0ZXN0Mi5fMzIsIGVwc2lsb24pOwotfQotI2VuZGlmCi0KIH0K
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9GbG9hdFBvaW50VGVzdHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9GbG9h
dFBvaW50VGVzdHMuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvRmxvYXRQb2ludFRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYs
MTAgKzM2LDYgQEAKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CiAjZW5k
aWYKIAotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jZW5kaWYKLQogbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBzdGF0aWMgdm9pZCB0ZXN0R2V0QW5kU2V0KFdlYkNv
cmU6OkZsb2F0UG9pbnQgcG9pbnQpCkBAIC01NzksMjAgKzU3NSw2IEBAIFRFU1QoRmxvYXRQb2lu
dCwgQ2FzdGluZykKICAgICBFWFBFQ1RfRkxPQVRfRVEoLTIyLjNmLCB0ZXN0Q0cueCgpKTsKICAg
ICBFWFBFQ1RfRkxPQVRfRVEoMTQuMmYsIHRlc3RDRy55KCkpOwogI2VuZGlmCi0KLSNpZiBQTEFU
Rk9STShXSU4pCi0gICAgRDJEX1BPSU5UXzJGIGQyZFBvaW50ID0gYTsKLQotICAgIEVYUEVDVF9G
TE9BVF9FUSgxMDAuNGYsIGQyZFBvaW50LngpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxOTkuOWYs
IGQyZFBvaW50LnkpOwotCi0gICAgRDJEX1BPSU5UXzJGIGQyZFBvaW50MiA9IEQyRDE6OlBvaW50
MkYoLTIyLjNmLCAxNC4yZik7Ci0KLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRlc3REMkQoZDJk
UG9pbnQyKTsKLQotICAgIEVYUEVDVF9GTE9BVF9FUSgtMjIuM2YsIHRlc3REMkQueCgpKTsKLSAg
ICBFWFBFQ1RfRkxPQVRfRVEoMTQuMmYsIHRlc3REMkQueSgpKTsKLSNlbmRpZgogfQogCiB9Cklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmxvYXRSZWN0VGVzdHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9GbG9hdFJl
Y3RUZXN0cy5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9GbG9hdFJlY3RUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICsz
NCw2IEBACiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2VuZGlmCiAK
LSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2VuZGlmCi0KIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJIHsKIAogc3RhdGljIHZvaWQgdGVzdEdldEFuZFNldChXZWJDb3JlOjpG
bG9hdFJlY3QgcmVjdCkKQEAgLTYzMSwxOSArNjI3LDYgQEAgVEVTVChGbG9hdFJlY3QsIENhc3Rp
bmcpCiAKICAgICBjaGVja0Nhc3RSZWN0KHJlY3RGcm9tQ0dSZWN0KTsKICNlbmRpZgotCi0jaWYg
UExBVEZPUk0oV0lOKQotICAgIEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwotCi0gICAgRVhQ
RUNUX0ZMT0FUX0VRKDEwLjBmLCBkMmRSZWN0LmxlZnQpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgy
MC4wZiwgZDJkUmVjdC50b3ApOwotICAgIEVYUEVDVF9GTE9BVF9FUSg0MC4wZiwgZDJkUmVjdC5y
aWdodCk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDYwLjBmLCBkMmRSZWN0LmJvdHRvbSk7Ci0KLSAg
ICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdEZyb21EMkRSZWN0KGQyZFJlY3QpOwotCi0gICAgY2hl
Y2tDYXN0UmVjdChyZWN0RnJvbUQyRFJlY3QpOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIGNo
ZWNrQWRkaXRpb25SZXN1bHQxKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVjdCkKQEAgLTcw
OSw3ICs2OTIsNyBAQCBURVNUKEZsb2F0UmVjdCwgSW5maW5pdGVSZWN0KQogCiAgICAgLy8gRklY
TUU6IFdlIGhhdmUgYW4gdW51c3VhbCByZXByZXNlbnRhdGlvbiBmb3Igb3VyIGluZmluaXRlIHJl
Y3QuCiAgICAgLy8gV2ViQ29yZTo6RmxvYXQ6OmluZmluaXRlUmVjdCBpcyAobmVnYXRpdmUgaW5m
aW5pdHkpLzIgZm9yIHRoZSB1cHBlciBsZWZ0IGNvcm5lciwKLSAgICAvLyB3aGlsZSBDb3JlR3Jh
cGhpY3MgYW5kIEQyRCB1c2UgKG5lZ2F0aXZlIGluZmluaXR5KS4KKyAgICAvLyB3aGlsZSBDb3Jl
R3JhcGhpY3MgdXNlcyAobmVnYXRpdmUgaW5maW5pdHkpLgogCiAjaWYgVVNFKENHKQogICAgIENH
UmVjdCBjZ0luZmluaXRlUmVjdCA9IENHUmVjdEluZmluaXRlOwpAQCAtNzI3LDE2ICs3MTAsNiBA
QCBURVNUKEZsb2F0UmVjdCwgSW5maW5pdGVSZWN0KQogI2VuZGlmCiAgICAgLy8gQVNTRVJUX1RS
VUUoaW5maW5pdGUgPT0gY2dJbmZpbml0ZVJlY3QpOwogI2VuZGlmCi0KLSNpZiBQTEFURk9STShX
SU4pCi0gICAgRDJEMV9SRUNUX0YgZDJkSW5maW5pdGVSZWN0ID0gRDJEMTo6SW5maW5pdGVSZWN0
KCk7Ci0KLSAgICBFWFBFQ1RfRkxPQVRfRVEoLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpt
YXgoKSwgZDJkSW5maW5pdGVSZWN0LmxlZnQpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgtc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpLCBkMmRJbmZpbml0ZVJlY3QudG9wKTsKLSAgICBF
WFBFQ1RfRkxPQVRfRVEoc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpLCBkMmRJbmZp
bml0ZVJlY3QucmlnaHQpOwotICAgIEVYUEVDVF9GTE9BVF9FUShzdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6bWF4KCksIGQyZEluZmluaXRlUmVjdC5ib3R0b20pOwotICAgIC8vIEFTU0VSVF9U
UlVFKGluZmluaXRlID09IGQyZEluZmluaXRlUmVjdCk7Ci0jZW5kaWYKIH0KIAogVEVTVChGbG9h
dFJlY3QsIEVuY2xvc2luZ0FuZFJvdW5kaW5nKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0Zsb2F0U2l6ZVRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmxvYXRTaXplVGVzdHMuY3BwCShyZXZpc2lvbiAyODc4
MTIpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmxvYXRTaXplVGVzdHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMCArMzMsNiBAQAogI2luY2x1ZGUgPENvcmVHcmFw
aGljcy9Db3JlR3JhcGhpY3MuaD4KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oV0lOKQotI2luY2x1
ZGUgPGQyZDEuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIHN0YXRp
YyB2b2lkIHRlc3RHZXRBbmRTZXQoV2ViQ29yZTo6RmxvYXRTaXplIHNpemUpCkBAIC0yMDksMjAg
KzIwNSw2IEBAIFRFU1QoRmxvYXRTaXplLCBDYXN0aW5nKQogICAgIEVYUEVDVF9GTE9BVF9FUSgt
MjIuM2YsIHRlc3RDRy53aWR0aCgpKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMTQuMmYsIHRlc3RD
Ry5oZWlnaHQoKSk7CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBEMkQxX1NJWkVf
RiBkMmRTaXplID0gdGVzdDsKLQotICAgIEVYUEVDVF9GTE9BVF9FUSgxMDI0LjBmLCBkMmRTaXpl
LndpZHRoKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNzY4LjBmLCBkMmRTaXplLmhlaWdodCk7Ci0K
LSAgICBEMkQxX1NJWkVfRiBkMmRTaXplMiA9IEQyRDE6OlNpemVGKC0yMi4zZiwgMTQuMmYpOwot
Ci0gICAgV2ViQ29yZTo6RmxvYXRTaXplIHRlc3REMkQoZDJkU2l6ZTIpOwotCi0gICAgRVhQRUNU
X0ZMT0FUX0VRKC0yMi4zZiwgdGVzdEQyRC53aWR0aCgpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
MTQuMmYsIHRlc3REMkQuaGVpZ2h0KCkpOwotI2VuZGlmCiB9CiAKIFRFU1QoRmxvYXRTaXplLCBB
ZGRTdWJ0cmFjdCkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JbnRQ
b2ludFRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvSW50UG9pbnRUZXN0cy5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JbnRQb2ludFRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsMTAgKzMzLDYgQEAKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+
CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jZW5kaWYK
LQogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBzdGF0aWMgdm9pZCB0ZXN0R2V0QW5kU2V0
KFdlYkNvcmU6OkludFBvaW50IHBvaW50KQpAQCAtMTk3LDI2ICsxOTMsNiBAQCBURVNUKEludFBv
aW50LCBDYXN0KQogICAgIEVYUEVDVF9FUSgxMCwgZnJvbUdESVBvaW50LngoKSk7CiAgICAgRVhQ
RUNUX0VRKDIwLCBmcm9tR0RJUG9pbnQueSgpKTsKICAgICBBU1NFUlRfVFJVRShhID09IGZyb21H
RElQb2ludCk7Ci0KLSAgICBEMkQxX1BPSU5UXzJGIGQyZFBvaW50RiA9IGE7Ci0KLSAgICBBU1NF
UlRfRkxPQVRfRVEoMTAuMGYsIGQyZFBvaW50Ri54KTsKLSAgICBBU1NFUlRfRkxPQVRfRVEoMjAu
MGYsIGQyZFBvaW50Ri55KTsKLQotICAgIFdlYkNvcmU6OkludFBvaW50IGZyb21EMkRQb2ludEYo
ZDJkUG9pbnRGKTsKLSAgICBFWFBFQ1RfRVEoMTAsIGZyb21EMkRQb2ludEYueCgpKTsKLSAgICBF
WFBFQ1RfRVEoMjAsIGZyb21EMkRQb2ludEYueSgpKTsKLSAgICBBU1NFUlRfVFJVRShhID09IGZy
b21EMkRQb2ludEYpOwotCi0gICAgRDJEMV9QT0lOVF8yVSBkMmRQb2ludFUgPSBhOwotCi0gICAg
QVNTRVJUX0ZMT0FUX0VRKDEwLjBmLCBkMmRQb2ludFUueCk7Ci0gICAgQVNTRVJUX0ZMT0FUX0VR
KDIwLjBmLCBkMmRQb2ludFUueSk7Ci0KLSAgICBXZWJDb3JlOjpJbnRQb2ludCBmcm9tRDJEUG9p
bnRVKGQyZFBvaW50VSk7Ci0gICAgRVhQRUNUX0VRKDEwLCBmcm9tRDJEUG9pbnRVLngoKSk7Ci0g
ICAgRVhQRUNUX0VRKDIwLCBmcm9tRDJEUG9pbnRVLnkoKSk7Ci0gICAgQVNTRVJUX1RSVUUoYSA9
PSBmcm9tRDJEUG9pbnRVKTsKICNlbmRpZgogfQogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvSW50UmVjdFRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSW50UmVjdFRlc3RzLmNwcAkocmV2aXNpb24gMjg3ODEy
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0ludFJlY3RUZXN0cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCw2IEBACiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NvcmVHcmFwaGljcy5oPgogI2VuZGlmCiAKLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8
ZDJkMS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogc3RhdGljIHZv
aWQgdGVzdEdldEFuZFNldChXZWJDb3JlOjpJbnRSZWN0IHJlY3QpCkBAIC01MTYsMjggKzUxMiw2
IEBAIFRFU1QoSW50UmVjdCwgQ2FzdGluZykKICAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3RGcm9t
R0RJUmVjdChnZGlSZWN0KTsKIAogICAgIGNoZWNrQ2FzdFJlY3QocmVjdEZyb21HRElSZWN0KTsK
LQotICAgIEQyRDFfUkVDVF9VIGQyZFJlY3RVID0gcmVjdDsKLQotICAgIEVYUEVDVF9FUSgxMCwg
ZDJkUmVjdFUubGVmdCk7Ci0gICAgRVhQRUNUX0VRKDIwLCBkMmRSZWN0VS50b3ApOwotICAgIEVY
UEVDVF9FUSg0MCwgZDJkUmVjdFUucmlnaHQpOwotICAgIEVYUEVDVF9FUSg2MCwgZDJkUmVjdFUu
Ym90dG9tKTsKLQotICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdEZyb21EMkRSZWN0VShkMmRSZWN0
VSk7Ci0KLSAgICBjaGVja0Nhc3RSZWN0KHJlY3RGcm9tRDJEUmVjdFUpOwotCi0gICAgRDJEMV9S
RUNUX0YgZDJkUmVjdEYgPSByZWN0OwotCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDEwLjBmLCBkMmRS
ZWN0Ri5sZWZ0KTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMjAuMGYsIGQyZFJlY3RGLnRvcCk7Ci0g
ICAgRVhQRUNUX0ZMT0FUX0VRKDQwLjBmLCBkMmRSZWN0Ri5yaWdodCk7Ci0gICAgRVhQRUNUX0ZM
T0FUX0VRKDYwLjBmLCBkMmRSZWN0Ri5ib3R0b20pOwotCi0gICAgV2ViQ29yZTo6SW50UmVjdCBy
ZWN0RnJvbUQyRFJlY3RGKGQyZFJlY3RGKTsKLQotICAgIGNoZWNrQ2FzdFJlY3QocmVjdEZyb21E
MkRSZWN0Rik7CiAjZW5kaWYKIH0KIApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0ludFNpemVUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0ludFNpemVUZXN0cy5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JbnRTaXplVGVzdHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiwxMCArMzIsNiBAQAogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3Jh
cGhpY3MuaD4KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPGQyZDEuaD4K
LSNlbmRpZgotCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIHN0YXRpYyB2b2lkIHRlc3RH
ZXRBbmRTZXQoV2ViQ29yZTo6SW50U2l6ZSByZWN0KQpAQCAtMjA4LDMwICsyMDQsNiBAQCBURVNU
KEludFNpemUsIENhc3RpbmcpCiAgICAgRVhQRUNUX0VRKC0yMiwgdGVzdENHLndpZHRoKCkpOwog
ICAgIEVYUEVDVF9FUSgxNCwgdGVzdENHLmhlaWdodCgpKTsKICNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oV0lOKQotICAgIEQyRDFfU0laRV9VIGQyZFNpemVVID0gdGVzdDsKLSAgICBFWFBFQ1RfRVEo
MTAyNCwgZDJkU2l6ZVUud2lkdGgpOwotICAgIEVYUEVDVF9FUSg3NjgsIGQyZFNpemVVLmhlaWdo
dCk7Ci0KLSAgICBEMkQxX1NJWkVfRiBkMmRTaXplRiA9IHRlc3Q7Ci0gICAgRVhQRUNUX0ZMT0FU
X0VRKDEwMjQuMGYsIGQyZFNpemVGLndpZHRoKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNzY4LjBm
LCBkMmRTaXplRi5oZWlnaHQpOwotCi0gICAgRDJEMV9TSVpFX0YgZDJkU2l6ZUYyID0gRDJEMTo6
U2l6ZUYoLTIyLjNmLCAxNC42Zik7Ci0KLSAgICBXZWJDb3JlOjpJbnRTaXplIHRlc3REMkQoZDJk
U2l6ZUYyKTsKLQotICAgIEVYUEVDVF9FUSgtMjIsIHRlc3REMkQud2lkdGgoKSk7Ci0gICAgRVhQ
RUNUX0VRKDE0LCB0ZXN0RDJELmhlaWdodCgpKTsKLQotICAgIEQyRDFfU0laRV9GIGQyZFNpemVV
MiA9IEQyRDE6OlNpemVGKC0yMywgMTYpOwotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSB0ZXN0RDJE
MihkMmRTaXplVTIpOwotCi0gICAgRVhQRUNUX0VRKC0yMywgdGVzdEQyRDIud2lkdGgoKSk7Ci0g
ICAgRVhQRUNUX0VRKDE2LCB0ZXN0RDJEMi5oZWlnaHQoKSk7Ci0jZW5kaWYKIH0KIAogVEVTVChJ
bnRTaXplLCBBZGRTdWJ0cmFjdCkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAkocmV2aXNpb24g
Mjg3ODEyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1RyYW5zZm9ybWF0
aW9uTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTAgKzQyLDYgQEAKICNpbmNsdWRl
IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oV0lOKQot
I2luY2x1ZGUgPGQyZDEuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAK
IHN0YXRpYyB2b2lkIHRlc3RJZGVudGl0eShjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtKQpAQCAtMTk4LDE5ICsxOTQsNiBAQCBURVNUKFRyYW5zZm9ybWF0aW9u
TWF0cml4LCBDR0FmZmluZVRyYW5zCiB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFdJTikKLVRF
U1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIEQyRDFNYXRyaXhDb25zdHJ1Y3Rpb24pCi17Ci0gICAg
RDJEMV9NQVRSSVhfM1gyX0YgZDJkVHJhbnNmb3JtID0gRDJEMTo6TWF0cml4M3gyRig2LjAsIDUu
MCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKLSAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0ZXN0KGQyZFRyYW5zZm9ybSk7Ci0KLSAgICB0ZXN0QWZmaW5lTGlrZUNvbnN0cnVjdGlvbih0
ZXN0KTsKLSAgICB0ZXN0R2V0QW5kU2V0KHRlc3QpOwotCi0gICAgQVNTRVJUX0ZBTFNFKHRlc3Qu
aXNJZGVudGl0eSgpKTsKLX0KLSNlbmRpZgotCiBURVNUKFRyYW5zZm9ybWF0aW9uTWF0cml4LCBB
ZmZpbmVUcmFuc2Zvcm1Db25zdHJ1Y3Rpb24pCiB7CiAgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtIGFmZmluZVRyYW5zZm9ybSg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKQEAgLTEy
NjcsMjEgKzEyNTAsNiBAQCBURVNUKFRyYW5zZm9ybWF0aW9uTWF0cml4LCBDYXN0aW5nKQogICAg
IEVYUEVDVF9ET1VCTEVfRVEoNC4wLCBnZGlGcm9tV0suZUR4KTsKICAgICBFWFBFQ1RfRE9VQkxF
X0VRKDMuMCwgZ2RpRnJvbVdLLmVEeSk7CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSAg
ICBEMkQxX01BVFJJWF8zWDJfRiBkMmRUcmFuc2Zvcm0gPSBEMkQxOjpNYXRyaXgzeDJGKDYuMCwg
NS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOwotICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0
cml4IGZyb21EMkRUcmFuc2Zvcm0oZDJkVHJhbnNmb3JtKTsKLQotICAgIHRlc3RBZmZpbmVMaWtl
Q29uc3RydWN0aW9uKGZyb21EMkRUcmFuc2Zvcm0pOwotCi0gICAgRDJEMV9NQVRSSVhfM1gyX0Yg
ZDJkRnJvbVdLID0gdGVzdDsKLSAgICBFWFBFQ1RfRE9VQkxFX0VRKDE2LjAsIGQyZEZyb21XSy5f
MTEpOwotICAgIEVYUEVDVF9ET1VCTEVfRVEoMTUuMCwgZDJkRnJvbVdLLl8xMik7Ci0gICAgRVhQ
RUNUX0RPVUJMRV9FUSgxMi4wLCBkMmRGcm9tV0suXzIxKTsKLSAgICBFWFBFQ1RfRE9VQkxFX0VR
KDExLjAsIGQyZEZyb21XSy5fMjIpOwotICAgIEVYUEVDVF9ET1VCTEVfRVEoNC4wLCBkMmRGcm9t
V0suXzMxKTsKLSAgICBFWFBFQ1RfRE9VQkxFX0VRKDMuMCwgZDJkRnJvbVdLLl8zMik7Ci0jZW5k
aWYKIH0KIAogVEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgTWFrZU1hcEJldHdlZW5SZWN0cykK
SW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1GVFcuY21ha2UKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUZUVy5jbWFrZQkocmV2aXNpb24g
Mjg3ODEyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUZUVy5jbWFrZQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDQwICswLDAgQEAKLWxpc3QoQVBQRU5EIFdlYktpdFRlc3RSdW5uZXJf
U09VUkNFUwotICAgIHdpbi9FdmVudFNlbmRlclByb3h5V2luLmNwcAotICAgIHdpbi9QbGF0Zm9y
bVdlYlZpZXdXaW4uY3BwCi0gICAgd2luL1Rlc3RDb250cm9sbGVyV2luLmNwcAotICAgIHdpbi9U
ZXN0SW52b2NhdGlvbkRpcmVjdDJELmNwcAotICAgIHdpbi9VSVNjcmlwdENvbnRyb2xsZXJXaW4u
Y3BwCi0gICAgd2luL21haW4uY3BwCi0pCi0KLXNldCh3cmFwcGVyX0RFRklOSVRJT05TCi0gICAg
VVNFX0NPTlNPTEVfRU5UUllfUE9JTlQKLSAgICBXSU5fQ0FJUk8KLSkKLQotbGlzdChBUFBFTkQg
V2ViS2l0VGVzdFJ1bm5lckluamVjdGVkQnVuZGxlX1NPVVJDRVMKLSAgICBJbmplY3RlZEJ1bmRs
ZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCi0gICAgSW5qZWN0ZWRCdW5kbGUv
d2luL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwCi0gICAgSW5qZWN0ZWRCdW5kbGUvd2lu
L0FjdGl2YXRlRm9udHNXaW4uY3BwCi0gICAgSW5qZWN0ZWRCdW5kbGUvd2luL0luamVjdGVkQnVu
ZGxlV2luLmNwcAotICAgIEluamVjdGVkQnVuZGxlL3dpbi9UZXN0UnVubmVyV2luLmNwcAotKQot
Ci1saXN0KEFQUEVORCBXZWJLaXRUZXN0UnVubmVyX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAk
e1dlYktpdFRlc3RSdW5uZXJfRElSfS9JbmplY3RlZEJ1bmRsZS93aW4KLSkKLQotbGlzdChBUFBF
TkQgV2ViS2l0VGVzdFJ1bm5lcl9MSUJSQVJJRVMKLSAgICBDb21zdXBwdwotICAgIE9sZWFjYwot
KQotCi1XRUJLSVRfQUREX1BSRUNPTVBJTEVEX0hFQURFUigiV2ViS2l0VGVzdFJ1bm5lclByZWZp
eC5oIiAid2luL1dlYktpdFRlc3RSdW5uZXJQcmVmaXguY3BwIiBXZWJLaXRUZXN0UnVubmVyX1NP
VVJDRVMpCi0KLXNldChDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTICIke0NNQUtFX1NIQVJFRF9M
SU5LRVJfRkxBR1N9ICR7TVNWQ19SVU5USU1FX0xJTktFUl9GTEFHU30iKQotCi1XRUJLSVRfV1JB
UF9FWEVDVVRBQkxFKFdlYktpdFRlc3RSdW5uZXIKLSAgICBTT1VSQ0VTICR7VE9PTFNfRElSfS93
aW4vRExMTGF1bmNoZXIvRExMTGF1bmNoZXJNYWluLmNwcAotICAgIExJQlJBUklFUyBzaGx3YXBp
Ci0pCi10YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhXZWJLaXRUZXN0UnVubmVyIFBSSVZBVEUg
JHt3cmFwcGVyX0RFRklOSVRJT05TfSkKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxh
dGZvcm1XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0
Zm9ybVdlYlZpZXcuaAkocmV2aXNpb24gMjg3ODEyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9QbGF0Zm9ybVdlYlZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0LDcgQEAgY2xh
c3MgSGVhZGxlc3NWaWV3QmFja2VuZDsKIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3
OwogdHlwZWRlZiBXUEVUb29saW5nQmFja2VuZHM6OkhlYWRsZXNzVmlld0JhY2tlbmQqIFBsYXRm
b3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oV0lOKQotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNs
dWRlIDxkMmQxXzEuaD4KLSNlbHNlCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KLSNlbmRpZgogY2xhc3Mg
VGVzdFJ1bm5lcldpbmRvdzsKIHR5cGVkZWYgSFdORCBQbGF0Zm9ybVdpbmRvdzsKIHR5cGVkZWYg
V0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwpAQCAtNjYsMTAgKzYyLDYgQEAgdHlwZWRlZiBXS1Zp
ZXdSZWYgUGxhdGZvcm1XS1ZpZXc7CiAKICNpZiBVU0UoQ0FJUk8pCiB0eXBlZGVmIGNhaXJvX3N1
cmZhY2VfdCogUGxhdGZvcm1JbWFnZTsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLWludGVyZmFjZSBJ
RDJEMUJpdG1hcDsKLQotdHlwZWRlZiBJRDJEMUJpdG1hcCogUGxhdGZvcm1JbWFnZTsKICNlbmRp
ZgogCiBuYW1lc3BhY2UgV1RSIHsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAJKHJldmlz
aW9uIDI4NzgxMikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGVQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L2NmL1N0cmluZ0NvbmNhdGVuYXRlQ0YuaD4KICNlbmRpZgogCi0jaWYg
VVNFKENGKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKSAmJiAhVVNFKERJUkVDVDJEKQorI2lmIFVT
RShDRikgJiYgIVBMQVRGT1JNKFdJTl9DQUlSTykKICNpbmNsdWRlICJXZWJBcmNoaXZlRHVtcFN1
cHBvcnQuaCIKICNlbmRpZgogCkBAIC03ODAsNyArNzgwLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmR1bXBBbGxGcmFtZXNUZQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcERP
TUFzV2ViQXJjaGl2ZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJp
bmdCdWlsZGVyKQogewotI2lmIFVTRShDRikgJiYgIVBMQVRGT1JNKFdJTl9DQUlSTykgJiYgIVVT
RShESVJFQ1QyRCkKKyNpZiBVU0UoQ0YpICYmICFQTEFURk9STShXSU5fQ0FJUk8pCiAgICAgYXV0
byB3a0RhdGEgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5V2ViQXJjaGl2ZShmcmFtZSkpOwog
ICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGUoMCwgV0tEYXRhR2V0Qnl0ZXMo
d2tEYXRhLmdldCgpKSwgV0tEYXRhR2V0U2l6ZSh3a0RhdGEuZ2V0KCkpKSk7CiAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoV2ViQ29yZVRlc3RTdXBwb3J0OjpjcmVhdGVYTUxTdHJpbmdGcm9tV2Vi
QXJjaGl2ZURhdGEoY2ZEYXRhLmdldCgpKS5nZXQoKSk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL3dpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvd2luL1BsYXRmb3JtV2ViVmlld1dpbi5jcHAJKHJldmlzaW9uIDI4Nzgx
MikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1BsYXRmb3JtV2ViVmlld1dpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDEwICszOSw2IEBACiAjaW5jbHVkZSA8Y2Fpcm8uaD4KICNl
bmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPGQyZDFfMS5oPgotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXVFIgewogCiBzdGF0aWMgTFBDV1NUUiBob3N0V2luZG93Q2xhc3NOYW1lID0g
TCJXVFJXZWJWaWV3SG9zdFdpbmRvdyI7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dp
bi9UZXN0SW52b2NhdGlvbkRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL3dpbi9UZXN0SW52b2NhdGlvbkRpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEy
KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdEludm9jYXRpb25EaXJlY3QyRC5j
cHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogICAgICAgICAgIChD
KSAyMDExIEJyZW50IEZ1bGdoYW0gPGJmdWxnaGFtQHdlYmtpdC5vcmc+LiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogICAgICAgICAgIChDKSAyMDEwLCAyMDExIElnYWxpYSBTLkwKLSAqICAgICAg
ICAgICAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RJbnZvY2F0aW9uLmgi
Ci0KLSNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1XZWJW
aWV3LmgiCi0jaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL05v
dEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8Y3N0ZGlvPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgotCi1uYW1lc3BhY2UgV1RSIHsK
LQotCi12b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1wUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3Rl
ZChTbmFwc2hvdFJlc3VsdFR5cGUsIFdLQXJyYXlSZWYgLyogcmVwYWludFJlY3RzICovLCBXS0lt
YWdlUmVmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdU
Ugo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448709</attachid>
            <date>2022-01-09 09:43:07 -0800</date>
            <delta_ts>2022-01-09 19:40:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234999-20220109094305.patch</filename>
            <type>text/plain</type>
            <size>505998</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI4Nzgx
MikKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAx
LTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3Vw
cG9ydCBmb3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2U6IFJlbW92ZWQuCisKIDIw
MjItMDEtMDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI4NzY5OC4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDIyLTAxLTA3ICBTYW0g
V2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3Ig
RGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IERpcmVjdDJEIGFuZCBGVFcgaGF2ZSBub3QgYmVlbiBidWlsZGluZyBmb3Igb3ZlciBhIHllYXIu
IEl0IGlzCisgICAgICAgIHRpbWUgdG8gcmVtb3ZlIHRoZW0uCisKKyAgICAgICAgKiBQbGF0Zm9y
bUZUVy5jbWFrZTogUmVtb3ZlZC4KKwogMjAyMi0wMS0wNyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRp
QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBBcHBlYXNlIGFuIGFzc2VydGlvbiB0
aGF0IHdhcyBicm9rZW4gYnkgcjI4NzgwMSBieSBzbGlnaHRseQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9QbGF0Zm9ybUZUVy5jbWFrZQkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCShub25leGlzdGVudCkKQEAgLTEsNDQgKzAs
MCBAQAotbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfU09VUkNFUwotICAgIEFQSS9KU1N0cmlu
Z1JlZkJTVFIuY3BwCi0pCi0KLWxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1BVQkxJQ19GUkFN
RVdPUktfSEVBREVSUwotICAgIEFQSS9KU1N0cmluZ1JlZkJTVFIuaAotICAgIEFQSS9KYXZhU2Ny
aXB0Q29yZS5oCi0pCi0KLWlmIChVU0VfQ0YpCi0gICAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENv
cmVfU09VUkNFUwotICAgICAgICBBUEkvSlNTdHJpbmdSZWZDRi5jcHAKLSAgICApCi0KLSAgICBs
aXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9QVUJMSUNfRlJBTUVXT1JLX0hFQURFUlMKLSAgICAg
ICAgQVBJL0pTU3RyaW5nUmVmQ0YuaAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIEphdmFTY3Jp
cHRDb3JlX0xJQlJBUklFUwotICAgICAgICAke0NPUkVGT1VOREFUSU9OX0xJQlJBUll9Ci0gICAg
KQotZW5kaWYgKCkKLQotaWYgKE5PVCBXVEZfUExBVEZPUk1fV0lOX0NBSVJPKQotICAgIGxpc3Qo
QVBQRU5EIEphdmFTY3JpcHRDb3JlX0xJQlJBUklFUwotICAgICAgICB3aW5tbQotICAgICkKLWVu
ZGlmICgpCi0KLWlmIChFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUikKLSAgICBpbmNsdWRlKGlucHNl
Y3Rvci9yZW1vdGUvU29ja2V0LmNtYWtlKQotZWxzZSAoKQotICAgIGxpc3QoUkVNT1ZFX0lURU0g
SmF2YVNjcmlwdENvcmVfU09VUkNFUwotICAgICAgICBpbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJ
bnNwZWN0b3JDb250cm9sbGVyLmNwcAotICAgICkKLWVuZGlmICgpCi0KLWZpbGUoQ09QWQotICAg
ICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS5yZXNvdXJjZXMiCi0gICAgREVTVElOQVRJT04KLSAgICAke0NNQUtFX1JVTlRJTUVfT1VU
UFVUX0RJUkVDVE9SWX0KLSkKLQotc2V0KEphdmFTY3JpcHRDb3JlX09VVFBVVF9OQU1FIEphdmFT
Y3JpcHRDb3JlJHtERUJVR19TVUZGSVh9KQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDEtMDcgIFNhbSBXZWluaWcg
IDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBEaXJlY3Qy
RAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0OTk5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGlyZWN0
MkQgYW5kIEZUVyBoYXZlIG5vdCBiZWVuIGJ1aWxkaW5nIGZvciBvdmVyIGEgeWVhci4gSXQgaXMK
KyAgICAgICAgdGltZSB0byByZW1vdmUgdGhlbS4KKworICAgICAgICAqIFBsYXRmb3JtRlRXLmNt
YWtlOiBSZW1vdmVkLgorCiAyMDIyLTAxLTA3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVu
c2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyODc2OTgu
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9QbGF0Zm9ybUZUVy5jbWFrZQkocmV2aXNp
b24gMjg3ODEyKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvUGxhdGZvcm1GVFcuY21ha2UJ
KG5vbmV4aXN0ZW50KQpAQCAtMSwzNSArMCwwIEBACi0jIFdlJ3JlIHRhcmdldGluZyBXaW5kb3dz
IDEwIHdoaWNoIHdpbGwgaGF2ZSBEaXJlY3RYIDExIG9uIGl0IHNvIHJlcXVpcmUgdGhhdAotIyBi
dXQgbWFrZSBEaXJlY3RYIDkgb3B0aW9uYWwKLQotbGlzdChBUFBFTkQgQU5HTEVfREVGSU5JVElP
TlMKLSAgICBHTF9BUElDQUxMPQotICAgIEdMX0FQST0KLSAgICBOT01JTk1BWAotKQotCi0jIFdl
J3JlIHRhcmdldGluZyBXaW5kb3dzIDEwIHdoaWNoIHdpbGwgaGF2ZSBEaXJlY3RYIDExCi1saXN0
KEFQUEVORCBBTkdMRV9TT1VSQ0VTCi0gICAgJHtfZDNkMTFfYmFja2VuZF9zb3VyY2VzfQotICAg
ICR7X2QzZF9zaGFyZWRfc291cmNlc30KLQotICAgICR7YW5nbGVfdHJhbnNsYXRvcl9obHNsX3Nv
dXJjZXN9Ci0KLSAgICAke2xpYmFuZ2xlX2dwdV9pbmZvX3V0aWxfc291cmNlc30KLSAgICAke2xp
YmFuZ2xlX2dwdV9pbmZvX3V0aWxfd2luX3NvdXJjZXN9Ci0pCi0KLWxpc3QoQVBQRU5EIEFOR0xF
X0RFRklOSVRJT05TCi0gICAgQU5HTEVfRU5BQkxFX0QzRDExCi0gICAgQU5HTEVfRU5BQkxFX0hM
U0wKLSkKLQotbGlzdChBUFBFTkQgQU5HTEVHTEVTdjJfTElCUkFSSUVTIGR4Z3VpZCBkeGdpKQot
Ci0jIERpcmVjdFggOSBzdXBwb3J0IHNob3VsZCBiZSBvcHRpb25hbCBidXQgQU5HTEUgd2lsbCBu
b3QgY29tcGlsZSB3aXRob3V0IGl0Ci1saXN0KEFQUEVORCBBTkdMRV9TT1VSQ0VTICR7X2QzZDlf
YmFja2VuZF9zb3VyY2VzfSkKLWxpc3QoQVBQRU5EIEFOR0xFX0RFRklOSVRJT05TIEFOR0xFX0VO
QUJMRV9EM0Q5KQotbGlzdChBUFBFTkQgQU5HTEVHTEVTdjJfTElCUkFSSUVTIGQzZDkpCi0KLSMg
VXNlIHNoYXJlZCBsaWJyYXJpZXMKLXNldChHTEVTdjJfTElCUkFSWV9UWVBFIFNIQVJFRCkKLXNl
dChFR0xfTElCUkFSWV9UWVBFIFNIQVJFRCkKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc4MTIpCisrKyBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIy
LTAxLTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUg
c3VwcG9ydCBmb3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL1BsYXRmb3JtRlRXLmNtYWtlOiBSZW1vdmVkLgorCiAyMDIyLTAx
LTA3ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIEFk
b3B0IGxpbmtlZE9uT3JBZnRlcigpIGluIG1vcmUgcGxhY2VzCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bUZUVy5jbWFrZQkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm1G
VFcuY21ha2UJKG5vbmV4aXN0ZW50KQpAQCAtMSw2MSArMCwwIEBACi1saXN0KEFQUEVORCBXVEZf
UFVCTElDX0hFQURFUlMKLSAgICB0ZXh0L3dpbi9XQ2hhclN0cmluZ0V4dHJhcy5oCi0KLSAgICB3
aW4vRGJnSGVscGVyV2luLmgKLSAgICB3aW4vR0RJT2JqZWN0LmgKLSAgICB3aW4vU29mdExpbmtp
bmcuaAotICAgIHdpbi9XaW4zMkhhbmRsZS5oCi0pCi0KLWxpc3QoQVBQRU5EIFdURl9QUklWQVRF
X0xJQlJBUklFUwotICAgIERiZ2hlbHAgIyBGb3Igc3ltYm9sIGhhbmRsaW5nIDxkYmdoZWxwLmg+
Ci0gICAgU2hsd2FwaSAjIEZvciBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIDxzaGx3YXBpLmg+Ci0p
Ci0KLWxpc3QoQVBQRU5EIFdURl9MSUJSQVJJRVMKLSAgICAgV2lubW0gIyBGb3IgbXVsdGltZWRp
YSBmdW5jdGlvbnMsIGFsc28gdXNlZCBpbiA8dGltZWFwaS5oPgotKQotCi1saXN0KEFQUEVORCBX
VEZfU09VUkNFUwotICAgIHRleHQvd2luL1N0cmluZ1dpbi5jcHAKLSAgICB0ZXh0L3dpbi9UZXh0
QnJlYWtJdGVyYXRvckludGVybmFsSUNVV2luLmNwcAotCi0gICAgd2luL0NQVVRpbWVXaW4uY3Bw
Ci0gICAgd2luL0RiZ0hlbHBlcldpbi5jcHAKLSAgICB3aW4vRmlsZVN5c3RlbVdpbi5jcHAKLSAg
ICB3aW4vTGFuZ3VhZ2VXaW4uY3BwCi0gICAgd2luL0xvZ2dpbmdXaW4uY3BwCi0gICAgd2luL01h
aW5UaHJlYWRXaW4uY3BwCi0gICAgd2luL01lbW9yeUZvb3RwcmludFdpbi5jcHAKLSAgICB3aW4v
TWVtb3J5UHJlc3N1cmVIYW5kbGVyV2luLmNwcAotICAgIHdpbi9PU0FsbG9jYXRvcldpbi5jcHAK
LSAgICB3aW4vUGF0aFdhbGtlci5jcHAKLSAgICB3aW4vUnVuTG9vcFdpbi5jcHAKLSAgICB3aW4v
VGhyZWFkaW5nV2luLmNwcAotICAgIHdpbi9Xb3JrUXVldWVXaW4uY3BwCi0pCi0KLWlmIChVU0Vf
Q0YpCi0gICAgbGlzdChBUFBFTkQgV1RGX1BVQkxJQ19IRUFERVJTCi0gICAgICAgIGNmL0NGVVJM
RXh0cmFzLmgKLSAgICAgICAgY2YvU3BhbkNGLmgKLSAgICAgICAgY2YvVHlwZUNhc3RzQ0YuaAot
Ci0gICAgICAgIHRleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oCi0gICAgICAgIHRleHQvY2Yv
VGV4dEJyZWFrSXRlcmF0b3JDRi5oCi0gICAgKQotICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VT
Ci0gICAgICAgIGNmL0NGVVJMRXh0cmFzLmNwcAotICAgICAgICBjZi9GaWxlU3lzdGVtQ0YuY3Bw
Ci0gICAgICAgIGNmL1VSTENGLmNwcAotCi0gICAgICAgIHRleHQvY2YvQXRvbVN0cmluZ0ltcGxD
Ri5jcHAKLSAgICAgICAgdGV4dC9jZi9TdHJpbmdDRi5jcHAKLSAgICAgICAgdGV4dC9jZi9TdHJp
bmdJbXBsQ0YuY3BwCi0gICAgICAgIHRleHQvY2YvU3RyaW5nVmlld0NGLmNwcAotICAgICkKLQot
ICAgIGxpc3QoQVBQRU5EIFdURl9MSUJSQVJJRVMgJHtDT1JFRk9VTkRBVElPTl9MSUJSQVJZfSkK
LWVuZGlmICgpCi0KLXNldChXVEZfT1VUUFVUX05BTUUgV1RGJHtERUJVR19TVUZGSVh9KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTM1IEBACisyMDIyLTAxLTA3ICBTYW0gV2Vpbmln
ICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgRGlyZWN0
MkQgLyBGVFcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IERpcmVjdDJEIGFuZCBGVFcgaGF2ZSBub3QgYmVlbiBidWlsZGluZyBmb3Igb3ZlciBhIHllYXIu
IEl0IGlzCisgICAgICAgIHRpbWUgdG8gcmVtb3ZlIHRoZW0uCisKKyAgICAgICAgKiBQbGF0Zm9y
bUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtRlRXLmNtYWtlOiBSZW1vdmVkLgor
ICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUYuY3BwOgorICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01lZGlhQUYuaDoKKyAgICAgICAgKiBwYWdlL3dpbi9GcmFtZVdpbkRpcmVjdDJELmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmNyZWF0ZU1JTUVUeXBlUmVnaXN0cnlUaHJl
YWRHbG9iYWxEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4
Q2FjaGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpwcmVUcmFuc2Zvcm1lZE5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJh
dyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
ZHdGb250IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmR3Rm9udEZhY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYWRpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OnByZVRy
YW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzdXBwb3J0c01lZGlhVHlwZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OnNldFRhcmdldENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdy
YXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGF0aDo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBhdGg6OmFkZFJvdW5kZWRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRo
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vY2YvQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbkNGLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNETVNlc3Npb25BVkZvdW5kYXRpb25DRjo6Z2VuZXJhdGVLZXlSZXF1ZXN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50
SW1hZ2U6OmRyYXdQREZQYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T3BlblR5
cGVNYXRoRGF0YTo6T3BlblR5cGVNYXRoRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVu
YW1lQW5kQWN0aXZhdGVGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Qml0bWFwVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjp1cGRh
dGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRl
eHR1cmVHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNv
bnRlbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFj
a2VuZERpcmVjdDJELmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4
dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGll
cy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJE
VXRpbGl0aWVzLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Rp
cmVjdFdyaXRlVXRpbGl0aWVzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFNpemVEaXJlY3QyRC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGly
ZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0
Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250UGxhdGZvcm1EYXRhRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dFdpbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dFdpbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGly
ZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0xheWVyRGlyZWN0MkQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3Qy
RC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVj
b2RlckRpcmVjdDJELmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9OYXRpdmVJbWFnZURpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVG
b250RGF0YURpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VEaXJlY3QyRC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRl
ckVmZmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZl
SW1hZ2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5oOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5oOgorCiAyMDIyLTAxLTA4ICBH
YWJyaWVsIE5hdmEgTWFyaW5vICA8Z25hdmFtYXJpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIG51
bGwgcHRyIGRlcmVmIGluIFdlYkNvcmU6Ok1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6
OmFwcGVuZFNpYmxpbmdOb2RlUmFuZ2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBw
bGVXaW4uY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdp
bi5jbWFrZQkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBs
ZVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtNzEsMTI5ICs3MSwxMDIgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRQogICAgIHBsYXRmb3JtL25ldHdvcmsvY2Yv
U29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCiApCiAKLWlmICgke1VTRV9ESVJFQ1QyRH0pCi0gICAg
bGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3dpbiIKLSAgICApCi0KLSAgICBsaXN0
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAgcGFnZS93aW4vRnJhbWVXaW5EaXJlY3Qy
RC5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3Qy
RC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJl
Y3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2Rl
RGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVj
dDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGly
ZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2Rl
ckRpcmVjdDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3Qy
RC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQu
Y3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3BwCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVjdDJELmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcAotCi0gICAgICAgIHBs
YXRmb3JtL3dpbi9EcmFnSW1hZ2VEaXJlY3QyRC5jcHAKLSAgICApCi1lbHNlICgpCi0gICAgbGlz
dChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbiIKLSAgICAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZiIKLSAgICAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2NhIgotICAgICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luIgotICAgICAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3MvY2ciCi0gICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCi0gICAgICAgIHBhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCi0KLSAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9MYXllclBvb2wuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRm
b3JtQ0FMYXllci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUNvbnRyb2xs
ZXIuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5jcHAK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuY3BwCi0gICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0EuY3BwCi0KLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vTGF5ZXJDaGFuZ2VzRmx1c2hlci5jcHAKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBRmlsdGVyc1dpbi5jcHAKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNw
cAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV0tDQUNGVmlld0xheWVyVHJlZUhv
c3QuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdM
YXllcldpbi5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNlQ0cuY3BwCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zs
b2F0U2l6ZUNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNw
cAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuY3BwCi0g
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCi0gICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlU291cmNlQ0dXaW4uY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ludFBvaW50Q0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFJlY3RD
Ry5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50U2l6ZUNHLmNwcAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5D
Ry5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1l
ci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhD
Ry5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwCi0KLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENvcmVUZXh0LmNwcAotICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQu
Y3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0dseXBoUGFnZUNvcmVUZXh0
LmNwcAotCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlQ0cuY3Bw
Ci0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vd2lu
L0RyYWdJbWFnZUNHV2luLmNwcAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBREVSUwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFw
aGljc0xheWVyQ0EuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuaAot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmgKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUZpbHRlcnMuaAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9UaWxlQ29udHJvbGxlci5oCi0KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2lu
L0Fic3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93
aW4vQ0FDRkxheWVyVHJlZUhvc3RDbGllbnQuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9Db2xvclNwYWNlQ0cuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJl
bmRlcmVyQ0cuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5oCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCi0gICAgKQotZW5kaWYgKCkKK2xpc3QoQVBQRU5E
IFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbiIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9ncmFwaGljcy9jYSIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jZyIKKykKKwor
bGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAK
KworICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYS9MYXllclBvb2wuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
UGxhdGZvcm1DQUxheWVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb250cm9s
bGVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlR3JpZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9UcmFuc2Zvcm1hdGlvbk1hdHJpeENBLmNwcAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9MYXllckNoYW5nZXNGbHVzaGVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9Q
bGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9Q
bGF0Zm9ybUNBRmlsdGVyc1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV0tD
QUNGVmlld0xheWVyVHJlZUhvc3QuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dl
YlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29s
b3JDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNlQ0cuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0Zsb2F0UmVjdENHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6
ZUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJm
YWNlUG9vbC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ludFBvaW50Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UmVjdENH
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFNpemVDRy5jcHAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BERkRvY3VtZW50SW1hZ2UuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvVVRJUmVnaXN0cnkuY3BwCisKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250
Q2FzY2FkZUNvcmVUZXh0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRD
b3JlVGV4dC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250UGxhdGZvcm1E
YXRhQ29yZVRleHQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdl
Q29yZVRleHQuY3BwCisKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZUNH
LmNwcAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxl
Rm9udERhdGFDR1dpbi5jcHAKKworICAgIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAK
KykKKworbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9MYXllclBvb2wuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FB
bmltYXRpb24uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllckNsaWVudC5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvVGlsZUNvbnRyb2xsZXIuaAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0Fi
c3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9D
QUNGTGF5ZXJUcmVlSG9zdC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXll
clRyZWVIb3N0Q2xpZW50LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUxheWVyV2luLmgKKworICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yU3BhY2VDRy5oCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSU9TdXJmYWNlUG9vbC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKKykKIAogaWYgKENNQUtFX1NJWkVPRl9WT0lE
X1AgRVFVQUwgNCkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMgJHtXZWJDb3JlX0RF
UklWRURfU09VUkNFU19ESVJ9L21ha2VzYWZlc2VoLm9iaikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZU
Vy5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDI1MyArMCwwIEBACi1pbmNsdWRlKHBsYXRmb3Jt
L0N1cmwuY21ha2UpCi1pZiAoTk9UIEFQUExFX0JVSUxEKQotICAgIGluY2x1ZGUocGxhdGZvcm0v
SW1hZ2VEZWNvZGVycy5jbWFrZSkKLWVuZGlmICgpCi1pbmNsdWRlKHBsYXRmb3JtL09wZW5TU0wu
Y21ha2UpCi1pbmNsdWRlKHBsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UpCi0KLWxpc3QoQVBQ
RU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgIiR7RGlyZWN0WF9J
TkNMVURFX0RJUlN9IgotICAgICIke1dFQktJVF9MSUJSQVJJRVNfRElSfS9pbmNsdWRlIgotICAg
ICIke1dFQkNPUkVfRElSfS9hY2Nlc3NpYmlsaXR5L3dpbiIKLSAgICAiJHtXRUJDT1JFX0RJUn0v
cGFnZS93aW4iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2VnbCIKLSAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsIgotICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZSIKLSAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luIgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRp
YWNhcGFiaWxpdGllcyIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay93aW4i
Ci0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3dpbiIKLSkKLQotbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCi0gICAgYWNjZXNzaWJpbGl0eS93aW4vQVhPYmplY3RDYWNoZVdpbi5jcHAK
LSAgICBhY2Nlc3NpYmlsaXR5L3dpbi9BY2Nlc3NpYmlsaXR5T2JqZWN0V2luLmNwcAotICAgIGFj
Y2Vzc2liaWxpdHkvd2luL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyV2luLmNwcAotCi0gICAg
ZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcAotCi0gICAgaHRtbC9IVE1MU2VsZWN0RWxlbWVudFdp
bi5jcHAKLQotICAgIHBhZ2Uvd2luL0RyYWdDb250cm9sbGVyV2luLmNwcAotICAgIHBhZ2Uvd2lu
L0V2ZW50SGFuZGxlcldpbi5jcHAKLSAgICBwYWdlL3dpbi9GcmFtZVdpbi5jcHAKLSAgICBwYWdl
L3dpbi9GcmFtZVdpbkRpcmVjdDJELmNwcAotCi0gICAgcGxhdGZvcm0vQ3Vyc29yLmNwcAotICAg
IHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuY3BwCi0gICAgcGxhdGZvcm0vU3RhdGljUGFzdGVi
b2FyZC5jcHAKLQotICAgIHBsYXRmb3JtL2F1ZGlvL1BsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdl
ci5jcHAKLQotICAgIHBsYXRmb3JtL2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAKLSAg
ICBwbGF0Zm9ybS9nZW5lcmljL0tleWVkRW5jb2RlckdlbmVyaWMuY3BwCi0KLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9HTENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1E
aXNwbGF5LmNwcAotCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAK
LQotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcAot
Ci0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRElt
cGwuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlckRpcmVjdFdyaXRlLmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9h
dFBvaW50RGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UmVjdERp
cmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFNpemVEaXJlY3QyRC5j
cHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250RGVzY3JpcHRpb25XaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdp
bi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVEaXJlY3Qy
RC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlRGVjb2RlckRpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURp
cmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZVdpbi5jcHAKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW50UG9pbnRXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ludFJlY3RXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFNpemVX
aW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
Rm91bmRhdGlvbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJl
Y3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
VGV4dEFuYWx5emVySGVscGVyLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFuc2Zv
cm1hdGlvbk1hdHJpeERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFu
c2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAKLQotICAgIHBsYXRmb3JtL25ldHdvcmsvd2luL0N1cmxT
U0xIYW5kbGVXaW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93aW4vRG93bmxvYWRCdW5kbGVX
aW4uY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay93aW4vTmV0d29ya1N0YXRlTm90aWZpZXJXaW4u
Y3BwCi0KLSAgICBwbGF0Zm9ybS90ZXh0L0h5cGhlbmF0aW9uLmNwcAotICAgIHBsYXRmb3JtL3Rl
eHQvd2luL0xvY2FsZVdpbi5jcHAKLQotICAgIHBsYXRmb3JtL3dpbi9CU3RyaW5nLmNwcAotICAg
IHBsYXRmb3JtL3dpbi9CaXRtYXBJbmZvLmNwcAotICAgIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRV
dGlsaXRpZXNXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL0N1cnNvcldpbi5jcHAKLSAgICBwbGF0
Zm9ybS93aW4vRGVmV25kUHJvY1dpbmRvd0NsYXNzLmNwcAotICAgIHBsYXRmb3JtL3dpbi9EZWxh
eUxvYWRlZE1vZHVsZXNFbnVtZXJhdG9yLmNwcAotICAgIHBsYXRmb3JtL3dpbi9EcmFnRGF0YVdp
bi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlRGlyZWN0MkQuY3BwCi0gICAgcGxhdGZv
cm0vd2luL0RyYWdJbWFnZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vR0RJT2JqZWN0Q291bnRl
ci5jcHAKLSAgICBwbGF0Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmNwcAotICAgIHBsYXRmb3JtL3dp
bi9JbXBvcnRlZEZ1bmN0aW9uc0VudW1lcmF0b3IuY3BwCi0gICAgcGxhdGZvcm0vd2luL0ltcG9y
dGVkTW9kdWxlc0VudW1lcmF0b3IuY3BwCi0gICAgcGxhdGZvcm0vd2luL0tleUV2ZW50V2luLmNw
cAotICAgIHBsYXRmb3JtL3dpbi9Mb2NhbGl6ZWRTdHJpbmdzV2luLmNwcAotICAgIHBsYXRmb3Jt
L3dpbi9Mb2dnaW5nV2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9NSU1FVHlwZVJlZ2lzdHJ5V2lu
LmNwcAotICAgIHBsYXRmb3JtL3dpbi9NYWluVGhyZWFkU2hhcmVkVGltZXJXaW4uY3BwCi0gICAg
cGxhdGZvcm0vd2luL1BFSW1hZ2UuY3BwCi0gICAgcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4u
Y3BwCi0gICAgcGxhdGZvcm0vd2luL1BsYXRmb3JtTW91c2VFdmVudFdpbi5jcHAKLSAgICBwbGF0
Zm9ybS93aW4vUGxhdGZvcm1TY3JlZW5XaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1BvcHVwTWVu
dVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vU1NMS2V5R2VuZXJhdG9yV2luLmNwcAotICAgIHBs
YXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vU2VhcmNo
UG9wdXBNZW51REIuY3BwCi0gICAgcGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudVdpbi5jcHAK
LSAgICBwbGF0Zm9ybS93aW4vU3RydWN0dXJlZEV4Y2VwdGlvbkhhbmRsZXJTdXBwcmVzc29yLmNw
cAotICAgIHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmNwcAotICAgIHBsYXRmb3JtL3dpbi9Vc2Vy
QWdlbnRXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHAKLSAgICBwbGF0
Zm9ybS93aW4vV2ViQ29yZUJ1bmRsZVdpbi5jcHAKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZUlu
c3RhbmNlSGFuZGxlLmNwcAotICAgIHBsYXRmb3JtL3dpbi9XZWJDb3JlVGV4dFJlbmRlcmVyLmNw
cAotICAgIHBsYXRmb3JtL3dpbi9XaGVlbEV2ZW50V2luLmNwcAotICAgIHBsYXRmb3JtL3dpbi9X
aWRnZXRXaW4uY3BwCi0gICAgcGxhdGZvcm0vd2luL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5j
cHAKLQotICAgIHJlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKLSkKLQotaWYgKFVTRV9DRikK
LSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUwotICAg
ICAgICAiJHtXRUJDT1JFX0RJUn0vbG9hZGVyL2FyY2hpdmUvY2YiCi0gICAgICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9jZiIKLSAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2Nm
L3dpbiIKLSAgICApCi0KLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAg
ZWRpdGluZy9TbWFydFJlcGxhY2VDRi5jcHAKLQotICAgICAgICBsb2FkZXIvYXJjaGl2ZS9jZi9M
ZWdhY3lXZWJBcmNoaXZlLmNwcAotCi0gICAgICAgIHBsYXRmb3JtL2NmL0tleWVkRGVjb2RlckNG
LmNwcAotICAgICAgICBwbGF0Zm9ybS9jZi9LZXllZEVuY29kZXJDRi5jcHAKLSAgICAgICAgcGxh
dGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vY2Yvd2luL0Nl
cnRpZmljYXRlQ0ZXaW4uY3BwCi0KLSAgICAgICAgcGxhdGZvcm0vdGV4dC9jZi9IeXBoZW5hdGlv
bkNGLmNwcAotICAgICkKLQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwotICAgICAgICBsb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmgK
LQotICAgICAgICBwbGF0Zm9ybS9jZi93aW4vQ2VydGlmaWNhdGVDRldpbi5oCi0gICAgKQotCi0g
ICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMgJHtDT1JFRk9VTkRBVElPTl9MSUJSQVJZ
fSkKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlVGVzdFN1cHBvcnRfTElCUkFSSUVTICR7Q09SRUZP
VU5EQVRJT05fTElCUkFSWX0pCi1lbHNlICgpCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCi0gICAgICAgIHBsYXRmb3JtL3RleHQvSHlwaGVuYXRpb24uY3BwCi0gICAgKQotZW5kaWYg
KCkKLQotbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCi0gICAg
YWNjZXNzaWJpbGl0eS93aW4vQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJXaW4uaAotCi0gICAg
cGFnZS93aW4vRnJhbWVXaW4uaAotCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyREltcGwuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQ
aXhlbERhdGEuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMu
aAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5oCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmgKLSAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dFdpbi5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
RGVjb2RlckRpcmVjdDJELmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxXaW5kb3dz
Q29udGV4dC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1
bGxzY3JlZW5XaW5kb3cuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NoYXJlZEdESU9iamVjdC5o
Ci0KLSAgICBwbGF0Zm9ybS93aW4vQlN0cmluZy5oCi0gICAgcGxhdGZvcm0vd2luL0JpdG1hcElu
Zm8uaAotICAgIHBsYXRmb3JtL3dpbi9DT01QdHIuaAotICAgIHBsYXRmb3JtL3dpbi9EZWZXbmRQ
cm9jV2luZG93Q2xhc3MuaAotICAgIHBsYXRmb3JtL3dpbi9HRElPYmplY3RDb3VudGVyLmgKLSAg
ICBwbGF0Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmgKLSAgICBwbGF0Zm9ybS93aW4vSFduZERDLmgK
LSAgICBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmgKLSAgICBwbGF0Zm9ybS93aW4vU2Nyb2xs
YmFyVGhlbWVXaW4uaAotICAgIHBsYXRmb3JtL3dpbi9TZWFyY2hQb3B1cE1lbnVEQi5oCi0gICAg
cGxhdGZvcm0vd2luL1NlYXJjaFBvcHVwTWVudVdpbi5oCi0gICAgcGxhdGZvcm0vd2luL1N5c3Rl
bUluZm8uaAotICAgIHBsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuaAotICAgIHBsYXRmb3JtL3dp
bi9XZWJDb3JlQnVuZGxlV2luLmgKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZUluc3RhbmNlSGFu
ZGxlLmgKLSAgICBwbGF0Zm9ybS93aW4vV2ViQ29yZVRleHRSZW5kZXJlci5oCi0gICAgcGxhdGZv
cm0vd2luL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5oCi0gICAgcGxhdGZvcm0vd2luL1dpbmRv
d01lc3NhZ2VMaXN0ZW5lci5oCi0gICAgcGxhdGZvcm0vd2luL1dpbmRvd3NUb3VjaC5oCi0pCi0K
LWxpc3QoQVBQRU5EIFdlYkNvcmVfVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMKLSAgICAke1dFQkNP
UkVfRElSfS9jc3MvdGhlbWVXaW4uY3NzCi0gICAgJHtXRUJDT1JFX0RJUn0vY3NzL3RoZW1lV2lu
UXVpcmtzLmNzcwotKQotCi1saXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUwotICAgICR7RGly
ZWN0WF9MSUJSQVJJRVN9Ci0gICAgY29tY3RsMzIKLSAgICBjcnlwdDMyCi0gICAgaXBobHBhcGkK
LSAgICBycGNydDQKLSAgICBzaGx3YXBpCi0gICAgdXNwMTAKLSAgICB2ZXJzaW9uCi0gICAgd2lu
bW0KLSAgICB3czJfMzIKLSkKLQotbGlzdChBUFBFTkQgV2ViQ29yZVRlc3RTdXBwb3J0X0xJQlJB
UklFUwotICAgIHNobHdhcGkKLSkKLQotbWFrZV9kaXJlY3RvcnkoJHtDTUFLRV9SVU5USU1FX09V
VFBVVF9ESVJFQ1RPUll9L1dlYktpdC5yZXNvdXJjZXMvZW4ubHByb2opCi1maWxlKENPUFkKLSAg
ICAiJHtXRUJDT1JFX0RJUn0vZW4ubHByb2ovTG9jYWxpemFibGUuc3RyaW5ncyIKLSAgICAiJHtX
RUJDT1JFX0RJUn0vZW4ubHByb2ovbWVkaWFDb250cm9sc0xvY2FsaXplZFN0cmluZ3MuanMiCi0g
ICAgREVTVElOQVRJT04KLSAgICAke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vV2Vi
S2l0LnJlc291cmNlcy9lbi5scHJvagotKQotZmlsZShDT1BZCi0gICAgIiR7V0VCQ09SRV9ESVJ9
L01vZHVsZXMvbWVkaWFjb250cm9scy9tZWRpYUNvbnRyb2xzQXBwbGUuY3NzIgotICAgICIke1dF
QkNPUkVfRElSfS9Nb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250cm9sc0FwcGxlLmpzIgot
ICAgIERFU1RJTkFUSU9OCi0gICAgJHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1dl
YktpdC5yZXNvdXJjZXMKLSkKLQotc2V0KFdlYkNvcmVfT1VUUFVUX05BTUUgV2ViQ29yZSR7REVC
VUdfU1VGRklYfSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCShyZXZpc2lvbiAyODc4
MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMzksMTQgKzM5LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAKIAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcldpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9h
dFJlY3REaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRTaXplRGly
ZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udERlc2NyaXB0aW9uV2luLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcApAQCAtNjAsNyArNTUsNiBA
QCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW50U2l6ZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2
YXRlRnVsbHNjcmVlbldpbmRvdy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxl
Rm9udERhdGFXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9u
TWF0cml4RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0
aW9uTWF0cml4V2luLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay93aW4vRG93bmxvYWRCdW5k
bGVXaW4uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxMikKKysrIFNv
dXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBA
QAorMjAyMi0wMS0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVtb3ZlIHN1cHBvcnQgZm9yIERpcmVjdDJECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBEaXJlY3QyRCBhbmQgRlRXIGhhdmUgbm90IGJlZW4gYnVpbGRp
bmcgZm9yIG92ZXIgYSB5ZWFyLiBJdCBpcworICAgICAgICB0aW1lIHRvIHJlbW92ZSB0aGVtLgor
CisgICAgICAgICogcGFsL1BsYXRmb3JtRlRXLmNtYWtlOiBSZW1vdmVkLgorCiAyMDIyLTAxLTA3
ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyODc2OTguCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvUGxhdGZvcm1GVFcuY21ha2UJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvUGxhdGZvcm1GVFcuY21ha2UJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNiArMCwwIEBA
Ci1saXN0KEFQUEVORCBQQUxfUFVCTElDX0hFQURFUlMKLSkKLQotbGlzdChBUFBFTkQgUEFMX1NP
VVJDRVMKLSAgICBjcnlwdG8vb3BlbnNzbC9DcnlwdG9EaWdlc3RPcGVuU1NMLmNwcAotCi0gICAg
Y3J5cHRvL3dpbi9DcnlwdG9EaWdlc3RXaW4uY3BwCi0KLSAgICBzeXN0ZW0vQ2xvY2tHZW5lcmlj
LmNwcAotCi0gICAgc3lzdGVtL3dpbi9Tb3VuZFdpbi5jcHAKLQotICAgIHRleHQvS2lsbFJpbmcu
Y3BwCi0KLSAgICB3aW4vTG9nZ2luZ1dpbi5jcHAKLSkKLQotbGlzdChBUFBFTkQgUEFMX1BSSVZB
VEVfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICIke1dFQktJVF9MSUJSQVJJRVNfRElSfS9pbmNs
dWRlIgotKQotCi1saXN0KEFQUEVORCBQQUxfUFJJVkFURV9MSUJSQVJJRVMKLSAgICBPcGVuU1NM
OjpDcnlwdG8KLSkKLQotc2V0KFBBTF9PVVRQVVRfTkFNRSBQQUwke0RFQlVHX1NVRkZJWH0pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9D
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYXB0aW9uVXNlclByZWZl
cmVuY2VzTWVkaWFBRi5oIgogCi0jaWYgRU5BQkxFKFZJREVPKSAmJiAhVVNFKERJUkVDVDJEKQor
I2lmIEVOQUJMRShWSURFTykKIAogI2luY2x1ZGUgIkF1ZGlvVHJhY2tMaXN0LmgiCiAjaW5jbHVk
ZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCkBAIC05OTUsNCArOTk1LDQgQEAgVmVjdG9yPFJlZlB0
cjxUZXh0VHJhY2s+PiBDYXB0aW9uVXNlclByZQogICAgIAogfQogCi0jZW5kaWYgLy8gRU5BQkxF
KFZJREVPKSAmJiAhVVNFKERJUkVDVDJEKQorI2VuZGlmIC8vIEVOQUJMRShWSURFTykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlc01lZGlhQUYuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAog
CiAjcHJhZ21hIG9uY2UKIAotI2lmIEVOQUJMRShWSURFTykgJiYgIVVTRShESVJFQ1QyRCkKKyNp
ZiBFTkFCTEUoVklERU8pCiAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVk
ZSAiQ2FwdGlvblByZWZlcmVuY2VzRGVsZWdhdGUuaCIKQEAgLTEyMCw0ICsxMjAsNCBAQCBwcml2
YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoVklERU8p
ICYmICFVU0UoRElSRUNUMkQpCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS93aW4vRnJhbWVXaW5EaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVXaW5EaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4Nzgx
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luRGlyZWN0MkQuY3BwCShub25l
eGlzdGVudCkKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRnJhbWVXaW4u
aCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKLSNpbmNs
dWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCi0jaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJTZXR0aW5n
cy5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8
d3RmL3dpbi9HRElPYmplY3QuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HRElPYmplY3Q8
SEJJVE1BUD4gaW1hZ2VGcm9tUmVjdChjb25zdCBGcmFtZSogZnJhbWUsIEludFJlY3QmIGlyKQot
ewotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBv
bGRQYWludEJlaGF2aW9yID0gZnJhbWUtPnZpZXcoKS0+cGFpbnRCZWhhdmlvcigpOwotICAgIGZy
YW1lLT52aWV3KCktPnNldFBhaW50QmVoYXZpb3Iob2xkUGFpbnRCZWhhdmlvciB8IFBhaW50QmVo
YXZpb3I6OkZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyk7Ci0KLSAgICB2b2lkKiBiaXRzID0gbnVs
bHB0cjsKLSAgICBhdXRvIGhkYyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURD
KDApKTsKLSAgICBpbnQgdyA9IGlyLndpZHRoKCk7Ci0gICAgaW50IGggPSBpci5oZWlnaHQoKTsK
LSAgICBCaXRtYXBJbmZvIGJtcCA9IEJpdG1hcEluZm86OmNyZWF0ZShJbnRTaXplKHcsIGgpKTsK
LQotICAgIEdESU9iamVjdDxIQklUTUFQPiBoYm1wID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVE
SUJTZWN0aW9uKDAsICZibXAsIERJQl9SR0JfQ09MT1JTLCBzdGF0aWNfY2FzdDx2b2lkKio+KCZi
aXRzKSwgMCwgMCkpOwotICAgIGlmICghaGJtcCkKLSAgICAgICAgcmV0dXJuIGhibXA7Ci0KLSAg
ICBIR0RJT0JKIGhibXBPbGQgPSBTZWxlY3RPYmplY3QoaGRjLmdldCgpLCBoYm1wLmdldCgpKTsK
LQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0KLSAgICBTZWxlY3RPYmplY3QoaGRjLmdldCgpLCBo
Ym1wT2xkKTsKLQotICAgIGZyYW1lLT52aWV3KCktPnNldFBhaW50QmVoYXZpb3Iob2xkUGFpbnRC
ZWhhdmlvcik7Ci0KLSAgICByZXR1cm4gaGJtcDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVn
aXN0cnkuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9N
SU1FVHlwZVJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYxLDcgKzQ2MSw3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxNSU1FVHlwZVJlZ2lzdHJ5VGhyZWFkR2wKICAgICB9CiAjZWxzZQogICAg
IEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IHN1cHBvcnRlZEltYWdl
TUlNRVR5cGVzRm9yRW5jb2RpbmcgPSBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8U3RyaW5nPiB7Ci0j
aWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNFKENHKQogICAgICAgICAvLyBGSVhN
RTogQWRkIFdpbmRvd3Mgc3VwcG9ydCBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQgVVRJJ3Mgd2hlbiBh
IHdheSB0byBjb252ZXJ0IGZyb20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlzIGZvdW5kLgog
ICAgICAgICAvLyBGb3Igbm93LCBvbmx5IHN1cHBvcnQgUE5HLCBKUEVHIGFuZCBHSUYuIFNlZSA8
cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCiAgICAgICAgICJpbWFnZS9wbmciX3MsCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3RWxsaQogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3RWxsaXBzZShyZWN0KTsK
IH0KIAotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorI2lmIFVTRShDRykKIHZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKICAgICBtX3By
aW1hcnlDb250ZXh0LmFwcGx5U3Ryb2tlUGF0dGVybigpOwpAQCAtMTgwLDcgKzE4MCw3IEBAIHZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWwKICAgICBtX3NlY29uZGFyeUNv
bnRleHQuc3Ryb2tlRWxsaXBzZShlbGxpcHNlKTsKIH0KIAotI2lmIFVTRShDRykgfHwgVVNFKERJ
UkVDVDJEKQorI2lmIFVTRShDRykKIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0
SXNDQUxheWVyQ29udGV4dChib29sIGlzQ0FMYXllckNvbnRleHQpCiB7CiAgICAgbV9wcmltYXJ5
Q29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KGlzQ0FMYXllckNvbnRleHQpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CiAgICAgdm9pZCBkcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJE
KQorI2lmIFVTRShDRykKICAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwogICAg
IHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwogI2VuZGlmCkBAIC03NCw3ICs3NCw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkg
ZmluYWw7CiAgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkg
ZmluYWw7CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpCiAgICAg
dm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwogICAgIGJvb2wgaXNDQUxheWVy
Q29udGV4dCgpIGNvbnN0IGZpbmFsOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyOCwzMyArMTI4LDI4IEBAIHZvaWQgQml0bWFwSW1hZ2U6OnNldEN1cnJlbnRGcmFt
ZURlY29kaW4KICAgICBtX2N1cnJlbnRGcmFtZURlY29kaW5nU3RhdHVzID0gZGVjb2RpbmdTdGF0
dXM7CiB9CiAKLVJlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdElu
ZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxp
bmdMZXZlbCwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQorUmVmUHRyPE5h
dGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKHNp
emVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKQogewogICAgIGlm
ICghZnJhbWVIYXNGdWxsU2l6ZU5hdGl2ZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdM
ZXZlbCkpIHsKICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlOjolcyAtICVwIC0gdXJs
OiAlcyBbc3Vic2FtcGxpbmdMZXZlbCB3YXMgJWQsIHJlc2FtcGxpbmddIiwgX19GVU5DVElPTl9f
LCB0aGlzLCBzb3VyY2VVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzdGF0aWNfY2FzdDxp
bnQ+KGZyYW1lU3Vic2FtcGxpbmdMZXZlbEF0SW5kZXgoaW5kZXgpKSk7CiAgICAgICAgIGludmFs
aWRhdGVQbGF0Zm9ybURhdGEoKTsKICAgICB9Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIG1fc291
cmNlLT5zZXRUYXJnZXRDb250ZXh0KHRhcmdldENvbnRleHQpOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0odGFyZ2V0Q29udGV4dCk7Ci0jZW5kaWYKICAgICByZXR1cm4gbV9zb3VyY2UtPmZyYW1l
SW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CiB9CiAK
LVJlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkKK1JlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1h
Z2U6Om5hdGl2ZUltYWdlKCkKIHsKLSAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlm
TmVlZGVkKDAsIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQsIHRhcmdldENvbnRleHQpOworICAg
IHJldHVybiBmcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoMCwgU3Vic2FtcGxpbmdMZXZl
bDo6RGVmYXVsdCk7CiB9CiAKLVJlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2U6Om5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4
dCkKK1JlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCkKIHsKLSAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKG1f
Y3VycmVudEZyYW1lLCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0LCB0YXJnZXRDb250ZXh0KTsK
KyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKG1fY3VycmVudEZyYW1l
LCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKIH0KIAotUmVmUHRyPE5hdGl2ZUltYWdlPiBC
aXRtYXBJbWFnZTo6cHJlVHJhbnNmb3JtZWROYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShib29s
IHJlc3BlY3RPcmllbnRhdGlvbiwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0
KQorUmVmUHRyPE5hdGl2ZUltYWdlPiBCaXRtYXBJbWFnZTo6cHJlVHJhbnNmb3JtZWROYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZShib29sIHJlc3BlY3RPcmllbnRhdGlvbikKIHsKLSAgICBhdXRv
IGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUodGFyZ2V0Q29udGV4dCk7CisgICAg
YXV0byBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgaWYgKCFpbWFn
ZSkKICAgICAgICAgcmV0dXJuIGltYWdlOwogCkBAIC0xNzgsMTggKzE3MywxOCBAQCBSZWZQdHI8
TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpwcmVUcmFuCiB9CiAKICNpZiBVU0UoQ0cpCi1SZWZQ
dHI8TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRT
aXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCitSZWZQdHI8
TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplKQogewogICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBhdXRvIGltYWdlID0gZnJh
bWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKGksIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQs
IHRhcmdldENvbnRleHQpOworICAgICAgICBhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXhD
YWNoZUlmTmVlZGVkKGksIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQpOwogICAgICAgICBpZiAo
aW1hZ2UgJiYgaW1hZ2UtPnNpemUoKSA9PSBzaXplKQogICAgICAgICAgICAgcmV0dXJuIGltYWdl
OwogICAgIH0KIAogICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBmaXJzdCBmcmFtZSBpbWFnZSBpZiB3
ZSBjYW4ndCBmaW5kIHRoZSByaWdodCBzaXplCi0gICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4
Q2FjaGVJZk5lZWRlZCgwLCBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0LCB0YXJnZXRDb250ZXh0
KTsKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKDAsIFN1YnNhbXBs
aW5nTGV2ZWw6OkRlZmF1bHQpOwogfQogCiBWZWN0b3I8UmVmPE5hdGl2ZUltYWdlPj4gQml0bWFw
SW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcygpCkBAIC0zMDMsNyArMjk4LDcgQEAgSW1hZ2VEcmF3
UmVzdWx0IEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaQogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVxdWVzdERlY29kaW5nOwogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgaW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVk
ZWQobV9jdXJyZW50RnJhbWUsIG1fY3VycmVudFN1YnNhbXBsaW5nTGV2ZWwsICZjb250ZXh0KTsK
KyAgICAgICAgICAgIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKG1fY3Vy
cmVudEZyYW1lLCBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsKTsKICAgICAgICAgICAgIExPRyhJ
bWFnZXMsICJCaXRtYXBJbWFnZTo6JXMgLSAlcCAtIHVybDogJXMgW2FuIGltYWdlIGZyYW1lIHdp
bGwgYmUgZGVjb2RlZCBzeW5jaHJvbm91c2x5XSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNl
VVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHJl
dmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MiwxMSArMTQyLDExIEBAIHB1YmxpYzoKICNl
bmRpZgogI2VuZGlmCiAKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5h
dGl2ZUltYWdlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSBvdmVycmlkZTsKLSAg
ICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogPSBudWxscHRyKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8TmF0aXZlSW1h
Z2U+IHByZVRyYW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoYm9vbCByZXNwZWN0
T3JpZW50YXRpb24sIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSBvdmVycmlkZTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlKCkgb3Zl
cnJpZGU7CisgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpIG92ZXJyaWRlOworICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gcHJlVHJhbnNmb3JtZWROYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZShib29sIHJlc3BlY3RPcmllbnRhdGlvbikgb3ZlcnJpZGU7
CiAjaWYgVVNFKENHKQotICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VPZlNpemUo
Y29uc3QgSW50U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSBvdmVycmlk
ZTsKKyAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNp
emUmKSBvdmVycmlkZTsKICAgICBWZWN0b3I8UmVmPE5hdGl2ZUltYWdlPj4gZnJhbWVzTmF0aXZl
SW1hZ2VzKCk7CiAjZW5kaWYKIApAQCAtMTU4LDcgKzE1OCw3IEBAIHByaXZhdGU6CiAgICAgV0VC
Q09SRV9FWFBPUlQgQml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogPSBudWxscHRyKTsKIAogICAg
IFJlZlB0cjxOYXRpdmVJbWFnZT4gZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4KSB7IHJl
dHVybiBtX3NvdXJjZS0+ZnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgpOyB9Ci0gICAgUmVmUHRyPE5h
dGl2ZUltYWdlPiBmcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90LCBTdWJzYW1w
bGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgY29uc3QgR3JhcGhpY3NDb250
ZXh0KiA9IG51bGxwdHIpOworICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gZnJhbWVJbWFnZUF0SW5k
ZXhDYWNoZUlmTmVlZGVkKHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2
ZWw6OkRlZmF1bHQpOwogCiAgICAgLy8gQ2FsbGVkIHRvIGludmFsaWRhdGUgY2FjaGVkIGRhdGEu
IFdoZW4gfGRlc3Ryb3lBbGx8IGlzIHRydWUsIHdlIHdpcGUgb3V0CiAgICAgLy8gdGhlIGVudGly
ZSBmcmFtZSBidWZmZXIgY2FjaGUgYW5kIHRlbGwgdGhlIGltYWdlIHNvdXJjZSB0byBkZXN0cm95
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5o
CShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0Myw2IEBAIHR5cGVkZWYgc3Ry
dWN0IF9OU1BvaW50IE5TUG9pbnQ7CiAjZW5kaWYKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAK
LSNpZiBQTEFURk9STShXSU4pCi1zdHJ1Y3QgRDJEX1BPSU5UXzJGOwotdHlwZWRlZiBEMkRfUE9J
TlRfMkYgRDJEMV9QT0lOVF8yRjsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFRl
eHRTdHJlYW07CiB9CkBAIC0xOTIsMTEgKzE4Nyw2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCBvcGVyYXRvciBOU1BvaW50KCkgY29uc3Q7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFdJ
TikKLSAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFBvaW50KGNvbnN0IEQyRDFfUE9JTlRfMkYmKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBvcGVyYXRvciBEMkQxX1BPSU5UXzJGKCkgY29uc3Q7Ci0jZW5k
aWYKLQogICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UG9pbnQgbWF0cml4VHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRQ
b2ludCBtYXRyaXhUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgY29uc3Q7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCShyZXZp
c2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsNiBAQCB0eXBlZGVmIHN0cnVjdCBfY2Fp
cm9fcmVjdGFuZ2xlIGNhaXJvX3JlCiAKICNpZiBQTEFURk9STShXSU4pCiB0eXBlZGVmIHN0cnVj
dCB0YWdSRUNUIFJFQ1Q7Ci1zdHJ1Y3QgRDJEX1JFQ1RfRjsKLXR5cGVkZWYgRDJEX1JFQ1RfRiBE
MkQxX1JFQ1RfRjsKICNlbmRpZgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTIyNCwxMiArMjIyLDYg
QEAgcHVibGljOgogICAgIG9wZXJhdG9yIGNhaXJvX3JlY3RhbmdsZV90KCkgY29uc3Q7CiAjZW5k
aWYKIAotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QoY29u
c3QgUkVDVCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UmVjdChjb25zdCBEMkQxX1JFQ1Rf
RiYpOwotICAgIFdFQkNPUkVfRVhQT1JUIG9wZXJhdG9yIEQyRDFfUkVDVF9GKCkgY29uc3Q7Ci0j
ZW5kaWYKLQogICAgIHN0YXRpYyBGbG9hdFJlY3QgaW5maW5pdGVSZWN0KCk7CiAgICAgYm9vbCBp
c0luZmluaXRlKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0U2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0U2l6ZS5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTEgKzQ4
LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgX05TU2l6ZSBOU1NpemU7CiAjZW5kaWYKICNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCiAKLSNpZiBQTEFURk9STShXSU4pCi1zdHJ1Y3QgRDJEX1NJWkVfRjsKLXR5
cGVkZWYgRDJEX1NJWkVfRiBEMkQxX1NJWkVfRjsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV1RGIHsK
IGNsYXNzIFRleHRTdHJlYW07CiB9CkBAIC0xNTksMTEgKzE1NCw2IEBAIHB1YmxpYzoKICAgICBv
cGVyYXRvciBOU1NpemUoKSBjb25zdDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oV0lOKQotICAg
IFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZShjb25zdCBEMkQxX1NJWkVfRiYpOwotICAgIG9wZXJh
dG9yIEQyRDFfU0laRV9GKCkgY29uc3Q7Ci0jZW5kaWYKLQogICAgIFN0cmluZyB0b0pTT05TdHJp
bmcoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8SlNPTjo6T2JqZWN0PiB0b0pTT05P
YmplY3QoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMSArNDksNiBAQAogI2luY2x1ZGUgPHVz
cDEwLmg+CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLWludGVyZmFjZSBJRFdyaXRlRmFj
dG9yeTU7Ci1pbnRlcmZhY2UgSURXcml0ZUdkaUludGVyb3A7Ci0jZW5kaWYKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBGb250Q2FjaGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCShyZXZpc2lvbiAyODc4
MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDEwICs2Nyw2IEBAIGludGVyZmFjZSBJRFdyaXRlRm9u
dDsKIGludGVyZmFjZSBJRFdyaXRlRm9udEZhY2U7CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1Qy
RCkKLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRm9udERlc2NyaXB0aW9uOwpAQCAtMTE5LDkgKzExNSw2IEBAIHB1YmxpYzoKICNp
ZiBVU0UoQ09SRV9URVhUKQogICAgIEZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiwg
Q1RGb250UmVmLCBDR0ZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9v
bCBzeW50aGV0aWNPYmxpcXVlLCBib29sIHVzZUdESSk7CiAjZW5kaWYKLSNpZiBVU0UoRElSRUNU
MkQpCi0gICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+JiYsIENPTVB0cjxJRFdy
aXRlRm9udD4mJiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRp
Y09ibGlxdWUsIGJvb2wgdXNlR0RJKTsKLSNlbmRpZgogI2lmIFVTRShDQUlSTykKICAgICBGb250
UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4sIGNhaXJvX2ZvbnRfZmFjZV90KiwgZmxvYXQg
c2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgY29uc3QgQ3JlYXRpb25EYXRhKiA9IG51bGxw
dHIpOwogI2VuZGlmCkBAIC0xNjMsMTEgKzE1Niw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFz
VmFyaWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFyaWF0aW9uczsgfQogCi0jaWYgVVNF
KERJUkVDVDJEKQotICAgIElEV3JpdGVGb250KiBkd0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX2R3
Rm9udC5nZXQoKTsgfQotICAgIElEV3JpdGVGb250RmFjZSogZHdGb250RmFjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZHdGb250RmFjZS5nZXQoKTsgfQotI2VuZGlmCi0KICAgICBib29sIGlzRml4ZWRQ
aXRjaCgpIGNvbnN0OwogICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
ICAgICBib29sIHN5bnRoZXRpY0JvbGQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY0JvbGQ7
IH0KQEAgLTI2OCwxMSArMjU2LDYgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIFJldGFpblB0cjxD
VEZvbnRSZWY+IG1fY3RGb250OwogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09N
UHRyPElEV3JpdGVGb250PiBtX2R3Rm9udDsKLSAgICBDT01QdHI8SURXcml0ZUZvbnRGYWNlPiBt
X2R3Rm9udEZhY2U7Ci0jZW5kaWYKLQogI2lmIFVTRShDQUlSTykKICAgICBSZWZQdHI8Y2Fpcm9f
c2NhbGVkX2ZvbnRfdD4gbV9zY2FsZWRGb250OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDE5ICszOSwxMCBAQAogI2luY2x1ZGUgIkdyYWRpZW50UmVuZGVyZXJDRy5oIgogI2Vu
ZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jZW5kaWYKLQog
I2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHQ29udGV4dCogQ0dDb250ZXh0UmVmOwogI2Vu
ZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi1pbnRlcmZhY2UgSUQyRDFCcnVzaDsKLWludGVyZmFj
ZSBJRDJEMVJlbmRlclRhcmdldDsKLSNlbmRpZgotCiAjaWYgVVNFKENBSVJPKQogdHlwZWRlZiBz
dHJ1Y3QgX2NhaXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90OwogI2VuZGlmCkBAIC0xMTgsMTAg
KzEwOSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50KENHQ29udGV4dFJlZik7CiAjZW5kaWYK
IAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBJRDJEMUJydXNoKiBjcmVhdGVCcnVzaChJRDJEMVJl
bmRlclRhcmdldCopOwotI2VuZGlmCi0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rl
cj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEdyYWRpZW50Pj4gZGVjb2RlKERlY29kZXImKTsK
IApAQCAtMTM5LDEwICsxMjYsNiBAQCBwcml2YXRlOgogI2lmIFVTRShDRykKICAgICBzdGQ6Om9w
dGlvbmFsPEdyYWRpZW50UmVuZGVyZXJDRz4gbV9wbGF0Zm9ybVJlbmRlcmVyOwogI2VuZGlmCi0K
LSNpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEMkQxQnJ1c2g+IG1fYnJ1c2g7Ci0jZW5k
aWYKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgR3JhZGllbnQ6OkxpbmVh
ckRhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9u
IDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNSArNDMsNiBAQAogCiAjaWYgVVNFKENHKQog
dHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwotI2VsaWYg
VVNFKERJUkVDVDJEKQotaW50ZXJmYWNlIElEMkQxRENSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2Ug
SUQyRDFSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFGYWN0b3J5OwotaW50ZXJmYWNlIElE
MkQxU29saWRDb2xvckJydXNoOwotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQ7Ci19Ci10eXBlZGVmIFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dERpcmVj
dDJEIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwogI2VsaWYgVVNFKENBSVJPKQogbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87CkBAIC0yNjksMTUgKzI2MCw2
IEBAIHB1YmxpYzogICAKICAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoKSA9IGRl
ZmF1bHQ7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0KCk7CiAK
LSNpZiBVU0UoRElSRUNUMkQpCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG1vdmUgdG8gR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQKLSAgICBlbnVtIGNsYXNzIEJpdG1hcFJlbmRlcmluZ0NvbnRl
eHRUeXBlIDogdWludDhfdCB7Ci0gICAgICAgIENQVU1lbW9yeSwKLSAgICAgICAgR1BVTWVtb3J5
Ci0gICAgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqLCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSk7Ci0jZW5kaWYKLQogICAg
IHZpcnR1YWwgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KIApAQCAtMzcyLDcgKzM1NCw3IEBAIHB1YmxpYzog
ICAKICAgICAKICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNr
LnNpemUoKTsgfQogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNFKENHKQog
ICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1YmxpYyBHcmFwaGljc0NvbnRl
eHQgbWV0aG9kcz8KICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAwOwpAQCAtNTU3LDI2ICs1Mzks
NiBAQCBwdWJsaWM6ICAgCiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0K
ICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIEdyYXBoaWNzQ29udGV4dChIREMsIElE
MkQxRENSZW5kZXJUYXJnZXQqKiwgUkVDVCwgYm9vbCBoYXNBbHBoYSA9IGZhbHNlKTsgLy8gRklY
TUU6IFRvIGJlIHJlbW92ZWQuCi0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSUQyRDFGYWN0
b3J5KiBzeXN0ZW1GYWN0b3J5KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxUmVu
ZGVyVGFyZ2V0KiBkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGJlZ2luRHJhdygpOwotICAgIEQyRDFfQ09MT1JfRiBjb2xvcldpdGhHbG9iYWxBbHBoYShj
b25zdCBDb2xvciYpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kRHJhdygpOwot
ICAgIHZvaWQgZmx1c2goKTsKLQotICAgIElEMkQxQnJ1c2gqIHNvbGlkU3Ryb2tlQnJ1c2goKSBj
b25zdDsKLSAgICBJRDJEMUJydXNoKiBzb2xpZEZpbGxCcnVzaCgpIGNvbnN0OwotICAgIElEMkQx
QnJ1c2gqIHBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0OwotICAgIElEMkQxQnJ1c2gqIHBhdHRl
cm5GaWxsQnJ1c2goKSBjb25zdDsKLSAgICBJRDJEMVN0cm9rZVN0eWxlKiBwbGF0Zm9ybVN0cm9r
ZVN0eWxlKCkgY29uc3Q7Ci0KLSAgICBJRDJEMVNvbGlkQ29sb3JCcnVzaCogYnJ1c2hXaXRoQ29s
b3IoY29uc3QgQ29sb3ImKTsKLSNlbmRpZgotCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCShyZXZpc2lvbiAyODc4
MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTYsMTAgKzE1NiwxMCBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFRpbGVSdWxl
IHsgU3RyZXRjaFRpbGUsIFJvdW5kVGlsZSwgU3BhY2VUaWxlLCBSZXBlYXRUaWxlIH07CiAKLSAg
ICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2UoY29uc3QgR3JhcGhpY3ND
b250ZXh0KiA9IG51bGxwdHIpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJlZlB0
cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3ND
b250ZXh0KiA9IG51bGxwdHIpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJlZlB0
cjxOYXRpdmVJbWFnZT4gcHJlVHJhbnNmb3JtZWROYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShi
b29sID0gdHJ1ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpIHsgcmV0dXJuIG51
bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VPZlNp
emUoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSB7IHJl
dHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUlt
YWdlKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdl
PiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2
aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gcHJlVHJhbnNmb3JtZWROYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZShib29sID0gdHJ1ZSkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwg
UmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgeyBy
ZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgLy8gQWNjZXNzb3JzIGZvciBuYXRpdmUgaW1hZ2UgZm9y
bWF0cy4KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNv
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICsz
MCw2IEBACiAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyQ0cuaCIKLSNlbGlm
IFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgogI2Vsc2UK
ICNpbmNsdWRlICJTY2FsYWJsZUltYWdlRGVjb2Rlci5oIgogI2VuZGlmCkBAIC0xMDcsOCArMTA1
LDYgQEAgUmVmUHRyPEltYWdlRGVjb2Rlcj4gSW1hZ2VEZWNvZGVyOjpjcmVhdAogCiAjaWYgVVNF
KENHKQogICAgIHJldHVybiBJbWFnZURlY29kZXJDRzo6Y3JlYXRlKGRhdGEsIGFscGhhT3B0aW9u
LCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAg
cmV0dXJuIEltYWdlRGVjb2RlckRpcmVjdDJEOjpjcmVhdGUoZGF0YSwgYWxwaGFPcHRpb24sIGdh
bW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKICNlbHNlCiAgICAgcmV0dXJuIFNjYWxhYmxlSW1h
Z2VEZWNvZGVyOjpjcmVhdGUoZGF0YSwgYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxl
T3B0aW9uKTsKICNlbmRpZgpAQCAtMTE5LDkgKzExNSw2IEBAIGJvb2wgSW1hZ2VEZWNvZGVyOjpz
dXBwb3J0c01lZGlhVHlwZShNZWQKICNpZiBVU0UoQ0cpCiAgICAgaWYgKEltYWdlRGVjb2RlckNH
OjpzdXBwb3J0c01lZGlhVHlwZSh0eXBlKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZWxpZiBV
U0UoRElSRUNUMkQpCi0gICAgaWYgKEltYWdlRGVjb2RlckRpcmVjdDJEOjpzdXBwb3J0c01lZGlh
VHlwZSh0eXBlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQogICAgIGlmIChTY2FsYWJs
ZUltYWdlRGVjb2Rlcjo6c3VwcG9ydHNNZWRpYVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiB0
cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VE
ZWNvZGVyLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsMTAgKzEzMyw2IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpID0gMDsKIAot
I2lmIFVTRShESVJFQ1QyRCkKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VGFyZ2V0Q29udGV4dChJRDJE
MVJlbmRlclRhcmdldCopID0gMDsKLSNlbmRpZgotCiBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VEZWNv
ZGVyKCkgPSBkZWZhdWx0OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsMTEgKzM0LDYgQEAKICNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgogI2luY2x1
ZGUgPHd0Zi9VUkwuaD4KIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKEJpdG1hcElt
YWdlKiBpbWFnZSwgQWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEdhbW1hQW5kQ29sb3JQcm9maWxl
T3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQpAQCAtNjkzLDE0ICs2ODgsNiBAQCBJ
bWFnZU9yaWVudGF0aW9uIEltYWdlU291cmNlOjpmcmFtZU9yaWVuCiAgICAgcmV0dXJuIGZyYW1l
QXRJbmRleENhY2hlSWZOZWVkZWQoaW5kZXgsIEltYWdlRnJhbWU6OkNhY2hpbmc6Ok1ldGFkYXRh
KS5vcmllbnRhdGlvbigpOwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotdm9pZCBJbWFnZVNvdXJj
ZTo6c2V0VGFyZ2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQp
Ci17Ci0gICAgaWYgKGlzRGVjb2RlckF2YWlsYWJsZSgpICYmIHRhcmdldENvbnRleHQpCi0gICAg
ICAgIG1fZGVjb2Rlci0+c2V0VGFyZ2V0Q29udGV4dCh0YXJnZXRDb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkpOwotfQotI2VuZGlmCi0KIFJlZlB0cjxOYXRpdmVJbWFn
ZT4gSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vi
c2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKQogewogICAgIGlmICghaXNEZWNvZGVyQXZh
aWxhYmxlKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlU291cmNlLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw5ICsxMjIsNiBA
QCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgU2Vjb25kcyBmcmFtZUR1cmF0aW9uQXRJbmRl
eChzaXplX3QpOwogICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgo
c2l6ZV90KTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIHNldFRhcmdldENvbnRleHQo
Y29uc3QgR3JhcGhpY3NDb250ZXh0Kik7Ci0jZW5kaWYKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+
IGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNh
bXBsaW5nTGV2ZWw6OkRlZmF1bHQpOwogICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gZnJhbWVJbWFn
ZUF0SW5kZXgoc2l6ZV90KTsKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGZyYW1lSW1hZ2VBdElu
ZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xl
dmVsOjpEZWZhdWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50UG9pbnQuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW50UG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDYgQEAgdHlw
ZWRlZiBzdHJ1Y3QgX05TUG9pbnQgTlNQb2ludDsKICNpZiBQTEFURk9STShXSU4pCiB0eXBlZGVm
IHN0cnVjdCB0YWdQT0lOVCBQT0lOVDsKIHR5cGVkZWYgc3RydWN0IHRhZ1BPSU5UUyBQT0lOVFM7
Ci0KLXN0cnVjdCBEMkRfUE9JTlRfMlU7Ci10eXBlZGVmIEQyRF9QT0lOVF8yVSBEMkQxX1BPSU5U
XzJVOwotCi1zdHJ1Y3QgRDJEX1BPSU5UXzJGOwotdHlwZWRlZiBEMkRfUE9JTlRfMkYgRDJEMV9Q
T0lOVF8yRjsKICNlbmRpZgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTEzOCwxMSArMTMyLDYgQEAg
cHVibGljOgogICAgIG9wZXJhdG9yIFBPSU5UKCkgY29uc3Q7CiAgICAgSW50UG9pbnQoY29uc3Qg
UE9JTlRTJik7CiAgICAgb3BlcmF0b3IgUE9JTlRTKCkgY29uc3Q7Ci0KLSAgICBJbnRQb2ludChj
b25zdCBEMkQxX1BPSU5UXzJVJik7Ci0gICAgZXhwbGljaXQgSW50UG9pbnQoY29uc3QgRDJEMV9Q
T0lOVF8yRiYpOyAvLyBEb24ndCBkbyB0aGlzIGltcGxpY2l0bHksIHNpbmNlIGl0J3MgbG9zc3ku
Ci0gICAgb3BlcmF0b3IgRDJEMV9QT0lOVF8yRigpIGNvbnN0OwotICAgIG9wZXJhdG9yIEQyRDFf
UE9JTlRfMlUoKSBjb25zdDsKICNlbmRpZgogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OCwxMiArNDgsNiBAQCB0eXBlZGVmIHN0cnVjdCBfTlNSZWN0IE5TUmVjdDsKIAogI2lmIFBM
QVRGT1JNKFdJTikKIHR5cGVkZWYgc3RydWN0IHRhZ1JFQ1QgUkVDVDsKLQotc3RydWN0IEQyRF9S
RUNUX1U7Ci10eXBlZGVmIEQyRF9SRUNUX1UgRDJEMV9SRUNUX1U7Ci0KLXN0cnVjdCBEMkRfUkVD
VF9GOwotdHlwZWRlZiBEMkRfUkVDVF9GIEQyRDFfUkVDVF9GOwogI2VuZGlmCiAKICNpZiBVU0Uo
Q0FJUk8pCkBAIC0xOTgsMTAgKzE5Miw2IEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShXSU4pCiAg
ICAgSW50UmVjdChjb25zdCBSRUNUJik7CiAgICAgb3BlcmF0b3IgUkVDVCgpIGNvbnN0OwotICAg
IGV4cGxpY2l0IEludFJlY3QoY29uc3QgRDJEMV9SRUNUX0YmKTsKLSAgICBJbnRSZWN0KGNvbnN0
IEQyRDFfUkVDVF9VJik7Ci0gICAgb3BlcmF0b3IgRDJEMV9SRUNUX0YoKSBjb25zdDsKLSAgICBv
cGVyYXRvciBEMkQxX1JFQ1RfVSgpIGNvbnN0OwogI2VuZGlmCiAKICNpZiBVU0UoQ0FJUk8pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCShyZXZpc2lv
biAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDEyICs0OSw2IEBAIHR5cGVkZWYgc3RydWN0IF9OU1NpemUg
TlNTaXplOwogCiAjaWYgUExBVEZPUk0oV0lOKQogdHlwZWRlZiBzdHJ1Y3QgdGFnU0laRSBTSVpF
OwotCi1zdHJ1Y3QgRDJEX1NJWkVfVTsKLXR5cGVkZWYgRDJEX1NJWkVfVSBEMkQxX1NJWkVfVTsK
LQotc3RydWN0IEQyRF9TSVpFX0Y7Ci10eXBlZGVmIEQyRF9TSVpFX0YgRDJEMV9TSVpFX0Y7CiAj
ZW5kaWYKIAogbmFtZXNwYWNlIFdURiB7CkBAIC0xNjYsMTAgKzE2MCw2IEBAIHB1YmxpYzoKICNp
ZiBQTEFURk9STShXSU4pCiAgICAgSW50U2l6ZShjb25zdCBTSVpFJik7CiAgICAgb3BlcmF0b3Ig
U0laRSgpIGNvbnN0OwotICAgIEludFNpemUoY29uc3QgRDJEMV9TSVpFX1UmKTsKLSAgICBleHBs
aWNpdCBJbnRTaXplKGNvbnN0IEQyRDFfU0laRV9GJik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGlj
aXRseSBzaW5jZSBpdCdzIGxvc3N5OwotICAgIG9wZXJhdG9yIEQyRDFfU0laRV9VKCkgY29uc3Q7
Ci0gICAgb3BlcmF0b3IgRDJEMV9TSVpFX0YoKSBjb25zdDsKICNlbmRpZgogCiAgICAgU3RyaW5n
IHRvSlNPTlN0cmluZygpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gMjg3ODEy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHBy
aXZhdGU6Ci0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNFKENHKQogICAgIHZv
aWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KICAgICBib29sIGlzQ0FMYXll
ckNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCkBAIC01Nyw3
ICs1Nyw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3Mp
IGZpbmFsIHsgfQogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNFKENHKQog
ICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWwgeyB9CiAjZW5kaWYK
IApAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRlOgogCiAgICAgSW50UmVjdCBjbGlwQm91bmRzKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4geyB9OyB9CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1Qy
RCkKKyNpZiBVU0UoQ0cpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbCB7IH0K
ICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbCB7IH0KICAgICB2b2lkIGRyYXdQYXRo
KGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGguY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZiAhVVNFKERJUkVDVDJEKQogZmxvYXQgUGF0aDo6
bGVuZ3RoKCkgY29uc3QKIHsKICAgICBQYXRoVHJhdmVyc2FsU3RhdGUgdHJhdmVyc2FsU3RhdGUo
UGF0aFRyYXZlcnNhbFN0YXRlOjpBY3Rpb246OlRvdGFsTGVuZ3RoKTsKQEAgLTUxLDcgKzUwLDYg
QEAgZmxvYXQgUGF0aDo6bGVuZ3RoKCkgY29uc3QKIAogICAgIHJldHVybiB0cmF2ZXJzYWxTdGF0
ZS50b3RhbExlbmd0aCgpOwogfQotI2VuZGlmCiAKICNpZiAhSEFWRShDR1BBVEhfR0VUX05VTUJF
Ul9PRl9FTEVNRU5UUykKIApAQCAtMTI1LDcgKzEyMyw3IEBAIHZvaWQgUGF0aDo6YWRkUm91bmRl
ZFJlY3QoY29uc3QgRmxvYXRSb3UKICAgICB9CiAKICAgICBpZiAoc3RyYXRlZ3kgPT0gUm91bmRl
ZFJlY3RTdHJhdGVneTo6UHJlZmVyTmF0aXZlKSB7Ci0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNU
MkQpCisjaWYgVVNFKENHKQogICAgICAgICBwbGF0Zm9ybUFkZFBhdGhGb3JSb3VuZGVkUmVjdChy
ZWN0LCByYWRpaS50b3BMZWZ0KCksIHJhZGlpLnRvcFJpZ2h0KCksIHJhZGlpLmJvdHRvbUxlZnQo
KSwgcmFkaWkuYm90dG9tUmlnaHQoKSk7CiAgICAgICAgIHJldHVybjsKICNlbmRpZgpAQCAtNTI0
LDcgKzUyMiw3IEBAIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBQYXRoOjpib3VuZGluZ1IKIAog
I2VuZGlmCiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJEKQorI2lmICFVU0UoQ0cpCiBQ
YXRoIFBhdGg6OnBvbHlnb25QYXRoRnJvbVBvaW50cyhjb25zdCBWZWN0b3I8RmxvYXRQb2ludD4m
IHBvaW50cykKIHsKICAgICBQYXRoIHBhdGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0aC5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDIwICs0MSw2IEBACiAj
aW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHUGF0aC5oPgogdHlwZWRlZiBzdHJ1Y3QgQ0dQYXRoIFBs
YXRmb3JtUGF0aDsKIAotI2VsaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIkNPTVB0ci5oIgot
Ci1pbnRlcmZhY2UgSUQyRDFHZW9tZXRyeTsKLWludGVyZmFjZSBJRDJEMUdlb21ldHJ5R3JvdXA7
Ci1pbnRlcmZhY2UgSUQyRDFQYXRoR2VvbWV0cnk7Ci1pbnRlcmZhY2UgSUQyRDFHZW9tZXRyeVNp
bms7Ci0KLXR5cGVkZWYgSUQyRDFHZW9tZXRyeUdyb3VwIFBsYXRmb3JtUGF0aDsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotY2xhc3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ7Ci19Ci0KICNlbGlm
IFVTRShDQUlSTykKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgogCkBAIC02OSw4ICs1NSw2IEBA
IHR5cGVkZWYgUGxhdGZvcm1QYXRoKiBQbGF0Zm9ybVBhdGhQdHI7CiAKICNpZiBVU0UoQ0cpCiB1
c2luZyBQbGF0Zm9ybVBhdGhTdG9yYWdlVHlwZSA9IFJldGFpblB0cjxDR011dGFibGVQYXRoUmVm
PjsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLXVzaW5nIFBsYXRmb3JtUGF0aFN0b3JhZ2VUeXBlID0g
Q09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD47CiAjZWxzZQogdXNpbmcgUGxhdGZvcm1QYXRoU3Rv
cmFnZVR5cGUgPSBQbGF0Zm9ybVBhdGhQdHI7CiAjZW5kaWYKQEAgLTE4OSwxMCArMTczLDcgQEAg
cHVibGljOgogCiAgICAgLy8gVG8ga2VlcCBQYXRoKCkgY2hlYXAsIGl0IGRvZXMgbm90IGFsbG9j
YXRlIGEgUGxhdGZvcm1QYXRoIGltbWVkaWF0ZWx5CiAgICAgLy8gbWVhbmluZyBQYXRoOjpwbGF0
Zm9ybVBhdGgoKSBjYW4gcmV0dXJuIG51bGwuCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIEZsb2F0
UmVjdCBmYXN0Qm91bmRpbmdSZWN0Rm9yU3Ryb2tlKGNvbnN0IFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJikgY29uc3Q7Ci0gICAgUGxhdGZvcm1QYXRoUHRyIHBsYXRmb3JtUGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0aC5nZXQoKTsgfQotI2VsaWYgVVNFKENHKQorI2lmIFVTRShDRykKICAgICBX
RUJDT1JFX0VYUE9SVCBQbGF0Zm9ybVBhdGhQdHIgcGxhdGZvcm1QYXRoKCkgY29uc3Q7CiAjZWxp
ZiBVU0UoQ0FJUk8pCiAgICAgY2Fpcm9fdCogY2Fpcm9QYXRoKCkgY29uc3QgeyByZXR1cm4gbV9w
YXRoLmdldCgpOyB9CkBAIC0yMTcsMTkgKzE5OCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFk
ZEJlemllcnNGb3JSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUm
IHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEZs
b2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdodFJh
ZGl1cyk7CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpCiAgICAg
dm9pZCBwbGF0Zm9ybUFkZFBhdGhGb3JSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRp
dXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBi
b3R0b21SaWdodFJhZGl1cyk7CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2b2lk
IGFwcGVuZEdlb21ldHJ5KElEMkQxR2VvbWV0cnkqKTsKLSAgICB2b2lkIGNyZWF0ZUdlb21ldHJ5
V2l0aEZpbGxNb2RlKFdpbmRSdWxlLCBDT01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiYpIGNvbnN0
OwotCi0gICAgdm9pZCBvcGVuRmlndXJlQXRDdXJyZW50UG9pbnRJZk5lY2Vzc2FyeSgpOwotICAg
IHZvaWQgY2xvc2VBbnlPcGVuR2VvbWV0cmllcyh1bnNpZ25lZCBmaWd1cmVFbmRTdHlsZSkgY29u
c3Q7Ci0gICAgdm9pZCBjbGVhckdlb21ldHJpZXMoKTsKLSNlbmRpZgotCiAjaWZuZGVmIE5ERUJV
RwogICAgIHZvaWQgZHVtcCgpIGNvbnN0OwogI2VuZGlmCkBAIC0yODAsMTIgKzI1Miw2IEBAIHBy
aXZhdGU6CiAgICAgbXV0YWJsZSBQbGF0Zm9ybVBhdGhTdG9yYWdlVHlwZSBtX3BhdGg7CiAjZW5k
aWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBWZWN0b3I8SUQyRDFHZW9tZXRyeSo+IG1fZ2Vv
bWV0cmllczsKLSAgICBtdXRhYmxlIENPTVB0cjxJRDJEMUdlb21ldHJ5U2luaz4gbV9hY3RpdmVQ
YXRoOwotICAgIG11dGFibGUgYm9vbCBtX2ZpZ3VyZUlzT3BlbmVkIHsgZmFsc2UgfTsKLSNlbmRp
ZgotCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgSW5saW5lUGF0aERhdGEgbV9p
bmxpbmVEYXRhOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QYXR0ZXJuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0dGVybi5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXR0ZXJuLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEzICszNiw2IEBACiAj
aWYgVVNFKENHKQogdHlwZWRlZiBzdHJ1Y3QgQ0dQYXR0ZXJuKiBDR1BhdHRlcm5SZWY7CiB0eXBl
ZGVmIFJldGFpblB0cjxDR1BhdHRlcm5SZWY+IFBsYXRmb3JtUGF0dGVyblB0cjsKLSNlbGlmIFVT
RShESVJFQ1QyRCkKLWludGVyZmFjZSBJRDJEMUJpdG1hcEJydXNoOwotdHlwZWRlZiBJRDJEMUJp
dG1hcEJydXNoKiBQbGF0Zm9ybVBhdHRlcm5QdHI7Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFz
cyBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDsKLX0KLXR5cGVkZWYgV2ViQ29yZTo6UGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7CiAjZWxpZiBVU0UoQ0FJUk8p
CiB0eXBlZGVmIHN0cnVjdCBfY2Fpcm9fcGF0dGVybiBjYWlyb19wYXR0ZXJuX3Q7CiB0eXBlZGVm
IGNhaXJvX3BhdHRlcm5fdCogUGxhdGZvcm1QYXR0ZXJuUHRyOwpAQCAtNzcsMTEgKzcwLDggQEAg
cHVibGljOgogICAgIGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVy
biBtX3BhcmFtZXRlcnM7IH0KIAogICAgIC8vIFBhdHRlcm4gc3BhY2UgaXMgYW4gYWJzdHJhY3Qg
c3BhY2UgdGhhdCBtYXBzIHRvIHRoZSBkZWZhdWx0IHVzZXIgc3BhY2UgYnkgdGhlIHRyYW5zZm9y
bWF0aW9uICd1c2VyU3BhY2VUcmFuc2Zvcm0nCi0jaWYgIVVTRShESVJFQ1QyRCkKICAgICBQbGF0
Zm9ybVBhdHRlcm5QdHIgY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdXNlclNwYWNlVHJhbnNmb3JtKSBjb25zdDsKLSNlbHNlCi0gICAgUGxhdGZvcm1QYXR0ZXJu
UHRyIGNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBHcmFwaGljc0NvbnRleHQmLCBmbG9hdCBh
bHBoYSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1c2VyU3BhY2VUcmFuc2Zvcm0pIGNvbnN0Owot
I2VuZGlmCisKICAgICB2b2lkIHNldFBhdHRlcm5TcGFjZVRyYW5zZm9ybShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mKTsKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5TcGFjZVRyYW5z
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy5wYXR0ZXJuU3BhY2VUcmFuc2Zvcm07
IH07CiAgICAgYm9vbCByZXBlYXRYKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLnJlcGVh
dFg7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1h
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUltYWdlLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoQ0cpCiB1c2luZyBQbGF0Zm9ybUltYWdl
UHRyID0gUmV0YWluUHRyPENHSW1hZ2VSZWY+OwotI2VsaWYgVVNFKERJUkVDVDJEKQotdXNpbmcg
UGxhdGZvcm1JbWFnZVB0ciA9IENPTVB0cjxJRDJEMUJpdG1hcD47CiAjZWxpZiBVU0UoQ0FJUk8p
CiB1c2luZyBQbGF0Zm9ybUltYWdlUHRyID0gUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD47CiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VC
dWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybUltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzAsOCArMzAsNiBAQAogCiAjaWYgVVNFKENHKQogI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQuaCIKICNlbGlmIFVTRShDQUlSTykKICNpbmNsdWRlICJJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oIgogI2VuZGlmCkBAIC00NCw4ICs0Miw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShDRykKIHVzaW5nIFVuYWNjZWxlcmF0ZWRJ
bWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDsKLSNlbGlmIFVT
RShESVJFQ1QyRCkKLXVzaW5nIFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDsKICNlbGlmIFVTRShDQUlSTykKIHVzaW5nIFVuYWNjZWxl
cmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFj
a2VuZDsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oCShyZXZpc2lvbiAy
ODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdl
QnVmZmVyQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw2IEBACiAKICNpZiBV
U0UoQ0cpCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKLSNlbGlmIFVTRShESVJF
Q1QyRCkKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgogI2VsaWYgVVNF
KENBSVJPKQogI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgiCiAjZW5kaWYKQEAg
LTM3LDggKzM1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgVVNFKENHKQogdXNpbmcg
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNHQmFja2VuZDsKLSNlbGlm
IFVTRShESVJFQ1QyRCkKLXVzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQ7CiAjZWxpZiBVU0UoQ0FJUk8pCiB1c2luZyBQbGF0Zm9ybUlt
YWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOwogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvQ0RNU2Vz
c2lvbkFWRm91bmRhdGlvbkNGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbkNGLmNw
cAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL2NmL0NETVNlc3Npb25BVkZvdW5kYXRpb25DRi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDE0ICs1Myw2IEBAIENETVNlc3Npb25BVkZvdW5kYXRpb25DRjo6Q0RNU2Vzc2lv
bkFWRm8KIAogUmVmUHRyPFVpbnQ4QXJyYXk+IENETVNlc3Npb25BVkZvdW5kYXRpb25DRjo6Z2Vu
ZXJhdGVLZXlSZXF1ZXN0KGNvbnN0IFN0cmluZyYsIFVpbnQ4QXJyYXkqIGluaXREYXRhLCBTdHJp
bmcmIGRlc3RpbmF0aW9uVVJMLCB1bnNpZ25lZCBzaG9ydCYgZXJyb3JDb2RlLCB1aW50MzJfdCYg
c3lzdGVtQ29kZSkKIHsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgVU5VU0VEX1BBUkFNKGluaXRE
YXRhKTsKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25VUkwpOwotICAgIFVOVVNFRF9QQVJB
TShlcnJvckNvZGUpOwotICAgIFVOVVNFRF9QQVJBTShzeXN0ZW1Db2RlKTsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBudWxscHRyOwotI2Vsc2UKICAgICBTdHJpbmcga2V5VVJJ
OwogICAgIFN0cmluZyBrZXlJRDsKICAgICBSZWZQdHI8VWludDhBcnJheT4gY2VydGlmaWNhdGU7
CkBAIC0xMDIsNyArOTQsNiBAQCBSZWZQdHI8VWludDhBcnJheT4gQ0RNU2Vzc2lvbkFWRm91bmRh
dGlvCiAKICAgICBhdXRvIGtleVJlcXVlc3RCdWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKENG
RGF0YUdldEJ5dGVQdHIoa2V5UmVxdWVzdC5nZXQoKSksIENGRGF0YUdldExlbmd0aChrZXlSZXF1
ZXN0LmdldCgpKSk7CiAgICAgcmV0dXJuIFVpbnQ4QXJyYXk6OnRyeUNyZWF0ZShXVEZNb3ZlKGtl
eVJlcXVlc3RCdWZmZXIpLCAwLCBrZXlSZXF1ZXN0QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwotI2Vu
ZGlmCiB9CiAKIHZvaWQgQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbkNGOjpyZWxlYXNlS2V5cygpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25DRi5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25DRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5NCwxMSArODk0LDcgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6cAogICAgICAgICBjb250ZXh0LnNjYWxl
KEZsb2F0U2l6ZSgxLjBmLCAtMS4wZikpOwogICAgICAgICBjb250ZXh0LnNldEltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHk6Okxvdyk7CiAgICAgICAgIEZsb2F0
UmVjdCBwYWludFJlY3QoRmxvYXRQb2ludCgpLCByZWN0LnNpemUoKSk7Ci0jaWYgVVNFKERJUkVD
VDJEKQotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotI2Vsc2UKICAgICAgICAgQ0dDb250ZXh0
RHJhd0ltYWdlKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIENHUmVjdE1ha2UoMCwgMCwgcGFp
bnRSZWN0LndpZHRoKCksIHBhaW50UmVjdC5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKLSNlbmRp
ZgogICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKICAgICAgICAgaW1hZ2UgPSAwOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1h
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BERkRvY3VtZW50SW1hZ2UuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYyLDE2ICszNjIsMTIgQEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjpkcmF3UERGUGFn
ZShHcmFwaAogCiAgICAgY29udGV4dC50cmFuc2xhdGUoLW1fY3JvcEJveC5sb2NhdGlvbigpKTsK
IAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotI2Vsc2UKICAgICAv
LyBDR1BERiBwYWdlcyBhcmUgaW5kZXhlZCBmcm9tIDEuCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgQ0dDb250ZXh0RHJhd1BERlBhZ2VXaXRoQW5ub3RhdGlvbnMoY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKSwgQ0dQREZEb2N1bWVudEdldFBhZ2UobV9kb2N1bWVudC5nZXQoKSwgMSksIG51bGxw
dHIpOwogI2Vsc2UKICAgICBDR0NvbnRleHREcmF3UERGUGFnZShjb250ZXh0LnBsYXRmb3JtQ29u
dGV4dCgpLCBDR1BERkRvY3VtZW50R2V0UGFnZShtX2RvY3VtZW50LmdldCgpLCAxKSk7CiAjZW5k
aWYKLSNlbmRpZgogfQogCiAjZW5kaWYgLy8gIVVTRShQREZLSVRfRk9SX1BERkRPQ1VNRU5USU1B
R0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgJKHJldmlzaW9u
IDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw3ICsxODksNyBA
QCBwcml2YXRlOgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250
ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQogCi0jaWYgVVNFKENHKSB8fCBV
U0UoRElSRUNUMkQpCisjaWYgVVNFKENHKQogICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChi
b29sKSBmaW5hbCB7IH0KICAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkg
ZmluYWwgeyB9CkBAIC0yMjAsNyArMjIwLDcgQEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSNpZiBV
U0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyNpZiBVU0UoQ0cpCiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVN
YXRoRGF0YS5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTksMTAgKzI1OSw2IEBAIE9wZW5UeXBlTWF0aERhdGE6Ok9wZW5UeXBlTWF0aERhdGEoY29u
c3QKICAgICA6IG1fbWF0aEZvbnQoZm9udC5jcmVhdGVPcGVuVHlwZU1hdGhIYXJmQnV6ekZvbnQo
KSkKIHsKIH0KLSNlbGlmIFVTRShESVJFQ1QyRCkKLU9wZW5UeXBlTWF0aERhdGE6Ok9wZW5UeXBl
TWF0aERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udCkKLXsKLX0KICNlbHNlCiBPcGVu
VHlwZU1hdGhEYXRhOjpPcGVuVHlwZU1hdGhEYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKSA9
IGRlZmF1bHQ7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAJKHJl
dmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50
eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDYg
QEAKICNpbmNsdWRlICJGb250TWVtb3J5UmVzb3VyY2UuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJEaXJlY3RXcml0ZVV0aWxpdGll
cy5oIgotI2luY2x1ZGUgPGR3cml0ZV8zLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBzdHJ1Y3QgQmlnRW5kaWFuVVNob3J0IHsgCkBAIC0yODEsMTEgKzI3Niw2IEBAIFJlZlB0
cjxGb250TWVtb3J5UmVzb3VyY2U+IHJlbmFtZUFuZEFjdGkKICAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgSFJFU1VMVCBociA9IERpcmVjdFdyaXRl
OjphZGRGb250RnJvbURhdGFUb1Byb2Nlc3NDb2xsZWN0aW9uKHJld3JpdHRlbkZvbnREYXRhKTsK
LSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0jZW5kaWYKLQogICAgIHJldHVybiBGb250TWVt
b3J5UmVzb3VyY2U6OmNyZWF0ZShmb250SGFuZGxlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJl
LmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMSArNTQs
NiBAQCB2b2lkIEJpdG1hcFRleHR1cmU6OnVwZGF0ZUNvbnRlbnRzKEdyYXBoCiAKICAgICBzb3Vy
Y2VMYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgc291cmNlUmVjdCk7
CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgLy8gV2UgY2FuJ3QgYWNjZXNzIHRoZSBiaXRzIGlu
IHRoZSBpbWFnZSBidWZmZXIgd2l0aCBhbiBhY3RpdmUgYmVnaW5EcmF3LgotICAgIGNvbnRleHQu
ZW5kRHJhdygpOwotI2VuZGlmCi0KICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gaW1hZ2VCdWZm
ZXItPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CiAgICAgaWYgKCFpbWFnZSkKICAg
ICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0JpdG1hcFRleHR1cmVHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVHTC5jcHAJKHJldmlzaW9uIDI4Nzgx
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0
dXJlR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsNiBAQAogI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUg
PGQyZDEuaD4KLSNpbmNsdWRlIDx3aW5jb2RlYy5oPgotI2VuZGlmCi0KICNpZiBPUyhEQVJXSU4p
CiAjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViAweDgzNjcKICNlbmRpZgpAQCAt
MTYzLDggKzE1OCw2IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhJbWEK
ICAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBmcmFtZUltYWdlLT5wbGF0Zm9ybUltYWdl
KCkuZ2V0KCk7CiAgICAgaW1hZ2VEYXRhID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShz
dXJmYWNlKTsKICAgICBieXRlc1BlckxpbmUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJp
ZGUoc3VyZmFjZSk7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgbm90SW1wbGVtZW50ZWQoKTsK
ICNlbmRpZgogCiAgICAgdXBkYXRlQ29udGVudHMoaW1hZ2VEYXRhLCB0YXJnZXRSZWN0LCBvZmZz
ZXQsIGJ5dGVzUGVyTGluZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmgJKHJldmlz
aW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvQWZmaW5lVHJhbnNmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDExICszNiw2IEBACiB0
eXBlZGVmIHN0cnVjdCBDR0FmZmluZVRyYW5zZm9ybSBDR0FmZmluZVRyYW5zZm9ybTsKICNlbmRp
ZgogCi0jaWYgUExBVEZPUk0oV0lOKQotc3RydWN0IEQyRF9NQVRSSVhfM1gyX0Y7Ci10eXBlZGVm
IEQyRF9NQVRSSVhfM1gyX0YgRDJEMV9NQVRSSVhfM1gyX0Y7Ci0jZW5kaWYKLQogbmFtZXNwYWNl
IFdURiB7CiBjbGFzcyBUZXh0U3RyZWFtOwogfQpAQCAtNjcsMTAgKzYyLDYgQEAgcHVibGljOgog
ICAgIFdFQkNPUkVfRVhQT1JUIEFmZmluZVRyYW5zZm9ybShjb25zdCBDR0FmZmluZVRyYW5zZm9y
bSYpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShXSU4pCi0gICAgQWZmaW5lVHJhbnNmb3JtKGNv
bnN0IEQyRDFfTUFUUklYXzNYMl9GJik7Ci0jZW5kaWYKLQogICAgIHZvaWQgc2V0TWF0cml4KGRv
dWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYp
OwogCiAgICAgdm9pZCBtYXAoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUmIHgyLCBkb3VibGUm
IHkyKSBjb25zdDsKQEAgLTE4OSwxMCArMTgwLDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQ
T1JUIG9wZXJhdG9yIENHQWZmaW5lVHJhbnNmb3JtKCkgY29uc3Q7CiAjZW5kaWYKIAotI2lmIFBM
QVRGT1JNKFdJTikKLSAgICBvcGVyYXRvciBEMkQxX01BVFJJWF8zWDJfRigpIGNvbnN0OwotI2Vu
ZGlmCi0KICAgICBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0aW9uKGRvdWJsZSB4LCBk
b3VibGUgeSkKICAgICB7CiAgICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwg
MSwgeCwgeSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCShyZXZp
c2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDExICs0OSw2
IEBAIHR5cGVkZWYgc3RydWN0IHRhZ1hGT1JNIFhGT1JNOwogI2VuZGlmCiAjZW5kaWYKIAotI2lm
IFBMQVRGT1JNKFdJTikKLXN0cnVjdCBEMkRfTUFUUklYXzNYMl9GOwotdHlwZWRlZiBEMkRfTUFU
UklYXzNYMl9GIEQyRDFfTUFUUklYXzNYMl9GOwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXVEYgewog
Y2xhc3MgVGV4dFN0cmVhbTsKIH0KQEAgLTM5MiwxMSArMzg3LDYgQEAgcHVibGljOgogICAgIG9w
ZXJhdG9yIFhGT1JNKCkgY29uc3Q7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeChjb25zdCBEMkQxX01BVFJJWF8zWDJfRiYpOwotICAgIG9wZXJh
dG9yIEQyRDFfTUFUUklYXzNYMl9GKCkgY29uc3Q7Ci0jZW5kaWYKLQogICAgIGJvb2wgaXNJZGVu
dGl0eU9yVHJhbnNsYXRpb24oKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbWF0cml4
WzBdWzBdID09IDEgJiYgbV9tYXRyaXhbMF1bMV0gPT0gMCAmJiBtX21hdHJpeFswXVsyXSA9PSAw
ICYmIG1fbWF0cml4WzBdWzNdID09IDAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERp
cmVjdDJELmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkQuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJDT01Q
dHIuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8d2luY29kZWMuaD4KLSNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotaW50ZXJmYWNlIElEMkQxQml0bWFwOwotaW50ZXJm
YWNlIElEMkQxQml0bWFwQnJ1c2g7Ci1pbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7Ci1pbnRl
cmZhY2UgSUQzRDExRGV2aWNlMTsKLWludGVyZmFjZSBJRFhHSVN1cmZhY2UxOwotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRCB7Ci0gICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJEKTsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5CYWNraW5nU3Rv
cmVCYWNrZW5kRGlyZWN0MkQoKSA9IGRlZmF1bHQ7Ci0KLSAgICBJRDJEMVJlbmRlclRhcmdldCog
cmVuZGVyVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJUYXJnZXQuZ2V0KCk7IH0KLSAg
ICBJRDJEMUJpdG1hcCogc3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZS5nZXQoKTsg
fQotICAgIElEWEdJU3VyZmFjZTEqIGR4U3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fZHhTdXJm
YWNlLmdldCgpOyB9Ci0gICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHNjcm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxS
ZWN0LCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZzZXQpID0gMDsKLSAgICB2aXJ0dWFsIElEMkQx
Qml0bWFwQnJ1c2gqIGJpdG1hcEJydXNoKCkgPSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAgQmFja2lu
Z1N0b3JlQmFja2VuZERpcmVjdDJEKGNvbnN0IEludFNpemUmIHNpemUsIElEM0QxMURldmljZTEq
IGRldmljZSkKLSAgICAgICAgOiBtX2RldmljZShkZXZpY2UpCi0gICAgICAgICwgbV9zaXplKHNp
emUpCi0gICAgewotICAgIH0KLQotICAgIENPTVB0cjxJRDNEMTFEZXZpY2UxPiBtX2RldmljZTsK
LSAgICBDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IG1fcmVuZGVyVGFyZ2V0OwotICAgIENPTVB0
cjxJRFhHSVN1cmZhY2UxPiBtX2R4U3VyZmFjZTsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IG1f
c3VyZmFjZTsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLX07Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5n
U3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3Qy
REltcGwuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJE
SW1wbC5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRp
ZXMuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0j
aW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0j
aW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgPGQzZDExXzEuaD4KLSNpbmNsdWRlIDx3aW5j
b2RlYy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBTZWNvbmRzIHNj
cm9sbEh5c3RlcmVzaXNEdXJhdGlvbiB7IDMwMF9tcyB9OwotCi1CYWNraW5nU3RvcmVCYWNrZW5k
RGlyZWN0MkRJbXBsOjpCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsKGNvbnN0IEludFNp
emUmIHNpemUsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBJRDNEMTFEZXZpY2UxKiBkZXZpY2Up
Ci0gICAgOiBCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkQoc2l6ZSwgZGV2aWNlKQotICAgICwg
bV9zY3JvbGxlZEh5c3RlcmVzaXMoW3RoaXNdKFBBTDo6SHlzdGVyZXNpc1N0YXRlIHN0YXRlKSB7
Ci0gICAgICAgIGlmIChzdGF0ZSA9PSBQQUw6Okh5c3RlcmVzaXNTdGF0ZTo6U3RvcHBlZCkKLSAg
ICAgICAgICAgIG1fc2Nyb2xsU3VyZmFjZSA9IG51bGxwdHI7Ci0gICAgICAgIH0sIHNjcm9sbEh5
c3RlcmVzaXNEdXJhdGlvbikKLXsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBtX3NpemU7Ci0g
ICAgc2NhbGVkU2l6ZS5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7Ci0KLSAgICBtX2R4U3VyZmFj
ZSA9IFdlYkNvcmU6OkRpcmVjdDJEOjpjcmVhdGVEWEdJU3VyZmFjZU9mU2l6ZShzY2FsZWRTaXpl
LCBtX2RldmljZS5nZXQoKSwgZmFsc2UpOwotICAgIG1fcmVuZGVyVGFyZ2V0ID0gV2ViQ29yZTo6
RGlyZWN0MkQ6OmNyZWF0ZVN1cmZhY2VSZW5kZXJUYXJnZXQobV9keFN1cmZhY2UuZ2V0KCkpOwot
Ci0gICAgYXV0byBiaXRtYXBQcm9wZXJ0aWVzID0gRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMo
KTsKLSAgICBIUkVTVUxUIGhyID0gbV9yZW5kZXJUYXJnZXQtPkNyZWF0ZVNoYXJlZEJpdG1hcChf
X3V1aWRvZihJRFhHSVN1cmZhY2UxKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9keFN1cmZh
Y2UuZ2V0KCkpLCAmYml0bWFwUHJvcGVydGllcywgJm1fc3VyZmFjZSk7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci19Ci0KLUJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRElt
cGw6On5CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsKCkKLXsKLX0KLQotdm9pZCBCYWNr
aW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsOjpzY3JvbGwoY29uc3QgSW50UmVjdCYgc2Nyb2xs
UmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQotewotICAgIEludFJlY3Qgc291cmNl
UmVjdCA9IHNjcm9sbFJlY3Q7Ci0gICAgc291cmNlUmVjdC5tb3ZlKC1zY3JvbGxPZmZzZXQpOwot
ICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KHNjcm9sbFJlY3QpOwotCi0gICAgaWYgKHNvdXJjZVJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fc2Nyb2xsU3VyZmFj
ZSB8fCBzY3JvbGxSZWN0LnNpemUoKSAhPSBtX3Njcm9sbFN1cmZhY2VTaXplKSB7Ci0jaWZuZGVm
IF9OREVCVUcKLSAgICAgICAgQVNTRVJUKG1fc2l6ZS53aWR0aCgpID49IHNjcm9sbFJlY3Quc2l6
ZSgpLndpZHRoKCkpOwotICAgICAgICBBU1NFUlQobV9zaXplLmhlaWdodCgpID49IHNjcm9sbFJl
Y3Quc2l6ZSgpLmhlaWdodCgpKTsKLSNlbmRpZgotICAgICAgICBtX3Njcm9sbFN1cmZhY2VTaXpl
ID0gc291cmNlUmVjdC5zaXplKCk7Ci0gICAgICAgIG1fZHhTY3JvbGxTdXJmYWNlID0gV2ViQ29y
ZTo6RGlyZWN0MkQ6OmNyZWF0ZURYR0lTdXJmYWNlT2ZTaXplKG1fc2Nyb2xsU3VyZmFjZVNpemUs
IG1fZGV2aWNlLmdldCgpLCBmYWxzZSk7Ci0KLSAgICAgICAgbV9zY3JvbGxTdXJmYWNlID0gbnVs
bHB0cjsKLSAgICAgICAgYXV0byBiaXRtYXBQcm9wZXJ0aWVzID0gRGlyZWN0MkQ6OmJpdG1hcFBy
b3BlcnRpZXMoKTsKLSAgICAgICAgSFJFU1VMVCBociA9IG1fcmVuZGVyVGFyZ2V0LT5DcmVhdGVT
aGFyZWRCaXRtYXAoX191dWlkb2YoSURYR0lTdXJmYWNlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KG1fZHhTY3JvbGxTdXJmYWNlLmdldCgpKSwgJmJpdG1hcFByb3BlcnRpZXMsICZtX3Njcm9s
bFN1cmZhY2UpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9
Ci0KLSAgICBhdXRvIHNvdXJjZVJlY3RMb2NhdGlvbiA9IEludFNpemUoc291cmNlUmVjdC54KCks
IHNvdXJjZVJlY3QueSgpKTsKLSAgICBhdXRvIGRlc3RSZWN0TG9jYXRpb24gPSBJbnRTaXplKCk7
IC8vIFRvcCBsZWZ0IGNvcm5lciBvZiBzY3JvbGwgc3VyZmFjZQotICAgIERpcmVjdDJEOjpjb3B5
UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKG1fc3VyZmFjZS5nZXQoKSwgbV9zY3JvbGxTdXJm
YWNlLmdldCgpLCBzb3VyY2VSZWN0TG9jYXRpb24sIHNvdXJjZVJlY3QsIGRlc3RSZWN0TG9jYXRp
b24pOwotCi0gICAgSW50UmVjdCBkZXN0UmVjdCA9IHNjcm9sbFJlY3Q7Ci0gICAgZGVzdFJlY3Qu
c2V0SGVpZ2h0KHNvdXJjZVJlY3QuaGVpZ2h0KCkpOwotICAgIGRlc3RSZWN0LnNldFdpZHRoKHNv
dXJjZVJlY3Qud2lkdGgoKSk7Ci0KLSAgICBJbnRTaXplIGRlc3RQb3NpdGlvbjsKLSAgICBpZiAo
c2Nyb2xsT2Zmc2V0LndpZHRoKCkgPiAwIHx8IHNjcm9sbE9mZnNldC5oZWlnaHQoKSA+IDApIHsK
LSAgICAgICAgZGVzdFBvc2l0aW9uLnNldFdpZHRoKHN0ZDo6bWluKHNjcm9sbFJlY3Qud2lkdGgo
KSwgc2Nyb2xsT2Zmc2V0LndpZHRoKCkpKTsKLSAgICAgICAgZGVzdFBvc2l0aW9uLnNldEhlaWdo
dChzdGQ6Om1pbihzY3JvbGxSZWN0LmhlaWdodCgpLCBzY3JvbGxPZmZzZXQuaGVpZ2h0KCkpKTsK
LSAgICB9Ci0KLSAgICBhdXRvIHNvdXJjZVNjcm9sbFN1cmZhY2VMb2NhdGlvbiA9IEludFNpemUo
KTsgLy8gVG9wIGxlZnQgY29ybmVyIG9mIHNjcm9sbCBzdXJmYWNlCi0gICAgRGlyZWN0MkQ6OmNv
cHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIobV9zY3JvbGxTdXJmYWNlLmdldCgpLCBtX3N1
cmZhY2UuZ2V0KCksIHNvdXJjZVNjcm9sbFN1cmZhY2VMb2NhdGlvbiwgZGVzdFJlY3QsIGRlc3RQ
b3NpdGlvbik7Ci0KLSAgICBtX3Njcm9sbGVkSHlzdGVyZXNpcy5pbXB1bHNlKCk7Ci19Ci0KLUlE
MkQxQml0bWFwQnJ1c2gqIEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGw6OmJpdG1hcEJy
dXNoKCkKLXsKLSAgICBpZiAoIW1fcmVuZGVyVGFyZ2V0IHx8ICFtX3N1cmZhY2UpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFtX2JpdG1hcEJydXNoKSB7Ci0gICAgICAgIGF1
dG8gYml0bWFwQnJ1c2hQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwQnJ1c2hQcm9wZXJ0aWVzKCk7
Ci0gICAgICAgIGF1dG8gYnJ1c2hQcm9wZXJ0aWVzID0gRDJEMTo6QnJ1c2hQcm9wZXJ0aWVzKCk7
Ci0KLSAgICAgICAgSFJFU1VMVCBociA9IG1fcmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXBCcnVz
aChtX3N1cmZhY2UuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRpZXMsICZicnVzaFByb3BlcnRp
ZXMsICZtX2JpdG1hcEJydXNoKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAg
IH0KLQotICAgIHJldHVybiBtX2JpdG1hcEJydXNoLmdldCgpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNr
aW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0
MkRJbXBsLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJCYWNraW5nU3RvcmVC
YWNrZW5kRGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxwYWwvSHlzdGVyZXNpc0FjdGl2aXR5Lmg+Ci0K
LWludGVyZmFjZSBJRDJEMUJpdG1hcEJydXNoOwotaW50ZXJmYWNlIElEWEdJU3VyZmFjZTE7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW50U2l6ZTsKLQotY2xhc3MgQmFja2luZ1N0
b3JlQmFja2VuZERpcmVjdDJESW1wbCBmaW5hbCA6IHB1YmxpYyBCYWNraW5nU3RvcmVCYWNrZW5k
RGlyZWN0MkQgewotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEJhY2tpbmdTdG9yZUJhY2tl
bmREaXJlY3QyREltcGwoY29uc3QgSW50U2l6ZSYsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBJ
RDNEMTFEZXZpY2UxKik7Ci0gICAgdmlydHVhbCB+QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJE
SW1wbCgpOwotCi1wcml2YXRlOgotICAgIHZvaWQgc2Nyb2xsKGNvbnN0IEludFJlY3QmLCBjb25z
dCBJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgSUQyRDFCaXRtYXBCcnVzaCogYml0bWFwQnJ1c2go
KSBvdmVycmlkZTsKLQotICAgIEludFNpemUgbV9zY3JvbGxTdXJmYWNlU2l6ZTsKLSAgICBDT01Q
dHI8SUQyRDFCaXRtYXA+IG1fc2Nyb2xsU3VyZmFjZTsKLSAgICBDT01QdHI8SURYR0lTdXJmYWNl
MT4gbV9keFNjcm9sbFN1cmZhY2U7Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwQnJ1c2g+IG1fYml0
bWFwQnJ1c2g7Ci0KLSAgICBQQUw6Okh5c3RlcmVzaXNBY3Rpdml0eSBtX3Njcm9sbGVkSHlzdGVy
ZXNpczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJF
Q1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRp
cmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQp
CkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIKLQot
I2lmIFBMQVRGT1JNKFdJTikKLQotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDxkMmQxXzFo
ZWxwZXIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Db2xvcjo6Q29sb3IoRDJEMV9DT0xP
Ul9GIGNvbG9yKQotICAgIDogQ29sb3IoY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+PihTUkdC
QTxmbG9hdD4geyBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hIH0pKQotewotfQot
Ci1Db2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9GKCkgY29uc3QKLXsKLSAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7Ci0g
ICAgcmV0dXJuIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhKTsKLX0KLQotQ29sb3I6Om9wZXJhdG9y
IEQyRDFfVkVDVE9SXzRGKCkgY29uc3QKLXsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvQ29s
b3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7Ci0gICAgcmV0dXJuIEQyRDE6
OlZlY3RvcjRGKHIsIGcsIGIsIGEpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShXSU4p
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRD
b250cm9sbGVyRGlyZWN0V3JpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHAJ
KHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAt
MSwxODEgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBt
ZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0qIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgotKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xs
ZXIuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkRpcmVjdFdyaXRlVXRpbGl0
aWVzLmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
LSNpbmNsdWRlICJUZXh0QW5hbHl6ZXJIZWxwZXIuaCIKLSNpbmNsdWRlIDxkd3JpdGVfMy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBib29sIHNoYXBlKElEV3JpdGVUZXh0QW5h
bHl6ZXIqIGFuYWx5emVyLCBjb25zdCBEV1JJVEVfU0NSSVBUX0FOQUxZU0lTJiBhbmFseXNpcywg
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udFBsYXRmb3JtRGF0YSwgY29uc3QgV0NIQVIqIHRl
eHQsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3VnZ2VzdGVkQ291bnQsIFZlY3RvcjxHbHlw
aD4mIGdseXBocywgVmVjdG9yPEdseXBoPiYgY2x1c3Rlck1hcCwgVmVjdG9yPERXUklURV9TSEFQ
SU5HX1RFWFRfUFJPUEVSVElFUz4mIHRleHRQcm9wZXJ0aWVzLCBWZWN0b3I8RFdSSVRFX1NIQVBJ
TkdfR0xZUEhfUFJPUEVSVElFUz4mIGdseXBoUHJvcGVydGllcywgdW5zaWduZWQmIGdseXBoQ291
bnQpCi17Ci0gICAgSFJFU1VMVCBzaGFwZVJlc3VsdCA9IEVfUEVORElORzsKLQotICAgIGRvIHsK
LSAgICAgICAgc2hhcGVSZXN1bHQgPSBhbmFseXplci0+R2V0R2x5cGhzKHRleHQsIGxlbmd0aCwg
Zm9udFBsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCksIGZvbnRQbGF0Zm9ybURhdGEub3JpZW50YXRp
b24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsLCBmYWxzZSwKLSAgICAgICAgICAgICZh
bmFseXNpcywgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgMCwgc3VnZ2VzdGVk
Q291bnQsIGNsdXN0ZXJNYXAuZGF0YSgpLCB0ZXh0UHJvcGVydGllcy5kYXRhKCksCi0gICAgICAg
ICAgICBnbHlwaHMuZGF0YSgpLCBnbHlwaFByb3BlcnRpZXMuZGF0YSgpLCAmZ2x5cGhDb3VudCk7
Ci0KLSAgICAgICAgaWYgKHNoYXBlUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpIHsKLSAgICAgICAg
ICAgIC8vIE5lZWQgdG8gcmVzaXplIG91ciBidWZmZXJzIChleGNlcHQgZm9yIGNsdXN0ZXJNYXAu
IEl0IGlzIGFsd2F5cyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcpLgotICAgICAgICAgICAgZ2x5
cGhzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpICogMik7Ci0gICAgICAgICAgICB0ZXh0UHJvcGVydGll
cy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7Ci0gICAgICAgICAgICBnbHlwaFByb3BlcnRpZXMucmVz
aXplKGdseXBocy5zaXplKCkpOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoc2hhcGVSZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSk7Ci0KLSAgICBpZiAoRkFJTEVEKHNoYXBlUmVzdWx0KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29tcGxleFRl
eHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBV
Q2hhciogY3AsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIGNvbnN0
IEZvbnQqIGZvbnQpCi17Ci0gICAgaWYgKCFmb250KSB7Ci0gICAgICAgIC8vIENyZWF0ZSBhIHJ1
biBvZiBtaXNzaW5nIGdseXBocyBmcm9tIHRoZSBwcmltYXJ5IGZvbnQuCi0gICAgICAgIG1fY29t
cGxleFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5
Rm9udCgpLCBjcCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwgMCwgbGVuZ3RoLCBtX3J1bi5sdHIo
KSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byYgZm9udFBsYXRmb3JtRGF0
YSA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpOwotCi0gICAgd2NoYXJfdCBsb2NhbGVOYW1lW0xPQ0FM
RV9OQU1FX01BWF9MRU5HVEhdID0geyB9OwotICAgIGludCBsb2NhbGVMZW5ndGggPSBHZXRVc2Vy
RGVmYXVsdExvY2FsZU5hbWUocmVpbnRlcnByZXRfY2FzdDxMUFdTVFI+KCZsb2NhbGVOYW1lKSwg
TE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobG9jYWxlTGVuZ3Ro
IDwgTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7Ci0KLSAgICBWZWN0b3I8RFdSSVRFX0ZPTlRfRkVB
VFVSRT4gZm9udEZlYXR1cmVzKDEpOwotICAgIGZvbnRGZWF0dXJlc1swXS5uYW1lVGFnID0gRFdS
SVRFX0ZPTlRfRkVBVFVSRV9UQUdfS0VSTklORzsKLSAgICBmb250RmVhdHVyZXNbMF0ucGFyYW1l
dGVyID0gbV9mb250LmVuYWJsZUtlcm5pbmcoKSA/IDEgOiAwOwotCi0gICAgaWYgKGZvbnRQbGF0
Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKQotICAg
ICAgICBmb250RmVhdHVyZXMuYXBwZW5kKHtEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19WRVJUSUNB
TF9XUklUSU5HLCAxfSk7Ci0KLSAgICBEV1JJVEVfVFlQT0dSQVBISUNfRkVBVFVSRVMgdXNlZEZl
YXR1cmVzOwotICAgIHVzZWRGZWF0dXJlcy5mZWF0dXJlcyA9IGZvbnRGZWF0dXJlcy5kYXRhKCk7
Ci0gICAgdXNlZEZlYXR1cmVzLmZlYXR1cmVDb3VudCA9IGZvbnRGZWF0dXJlcy5zaXplKCk7Ci0K
LSAgICBWZWN0b3I8Y29uc3QgRFdSSVRFX1RZUE9HUkFQSElDX0ZFQVRVUkVTKj4gZmVhdHVyZXM7
Ci0gICAgZmVhdHVyZXMuYXBwZW5kKCZ1c2VkRmVhdHVyZXMpOwotCi0gICAgQ09NUHRyPElEV3Jp
dGVUZXh0QW5hbHl6ZXI+IGFuYWx5emVyOwotICAgIEhSRVNVTFQgaHIgPSBEaXJlY3RXcml0ZTo6
ZmFjdG9yeSgpLT5DcmVhdGVUZXh0QW5hbHl6ZXIoJmFuYWx5emVyKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIFRleHRBbmFseXplckhlbHBlciBoZWxwZXIocmVp
bnRlcnByZXRfY2FzdDxMUFdTVFI+KCZsb2NhbGVOYW1lKSwgcmVpbnRlcnByZXRfY2FzdDxMUENX
U1RSPihjcCksIGxlbmd0aCk7Ci0KLSAgICBociA9IGFuYWx5emVyLT5BbmFseXplU2NyaXB0KCZo
ZWxwZXIsIDAsIGxlbmd0aCwgJmhlbHBlcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7Ci0KLSAgICB1bnNpZ25lZCB0b3RhbFN1Z2dlc3RlZENvdW50ID0gKDMgKiBsZW5ndGgg
LyAyICsgMTYpOwotCi0gICAgVmVjdG9yPEdseXBoPiBnbHlwaHM7Ci0gICAgVmVjdG9yPEdseXBo
PiBjbHVzdGVyTWFwOwotICAgIFZlY3RvcjxEV1JJVEVfU0hBUElOR19URVhUX1BST1BFUlRJRVM+
IHRleHRQcm9wZXJ0aWVzOwotICAgIFZlY3RvcjxEV1JJVEVfU0hBUElOR19HTFlQSF9QUk9QRVJU
SUVTPiBnbHlwaFByb3BlcnRpZXM7Ci0gICAgVmVjdG9yPEZMT0FUPiBnbHlwaEFkdmFuY2VzOwot
ICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiBnbHlwaE9mZnNldHM7Ci0gICAgVmVjdG9y
PEZsb2F0UG9pbnQ+IG9yaWdpbnM7Ci0gICAgVmVjdG9yPEZsb2F0U2l6ZT4gYWR2YW5jZXM7Ci0g
ICAgVmVjdG9yPHVuc2lnbmVkPiBzdHJpbmdJbmRpY2VzOwotCi0gICAgZ2x5cGhzLnJlc2VydmVD
YXBhY2l0eSh0b3RhbFN1Z2dlc3RlZENvdW50KTsKLSAgICBjbHVzdGVyTWFwLnJlc2VydmVDYXBh
Y2l0eShsZW5ndGgpOwotICAgIHRleHRQcm9wZXJ0aWVzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1
Z2dlc3RlZENvdW50KTsKLSAgICBnbHlwaFByb3BlcnRpZXMucmVzZXJ2ZUNhcGFjaXR5KHRvdGFs
U3VnZ2VzdGVkQ291bnQpOwotICAgIGdseXBoQWR2YW5jZXMucmVzZXJ2ZUNhcGFjaXR5KHRvdGFs
U3VnZ2VzdGVkQ291bnQpOwotICAgIGdseXBoT2Zmc2V0cy5yZXNlcnZlQ2FwYWNpdHkodG90YWxT
dWdnZXN0ZWRDb3VudCk7Ci0gICAgb3JpZ2lucy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdnZXN0
ZWRDb3VudCk7Ci0gICAgYWR2YW5jZXMucmVzZXJ2ZUNhcGFjaXR5KHRvdGFsU3VnZ2VzdGVkQ291
bnQpOwotICAgIHN0cmluZ0luZGljZXMucmVzZXJ2ZUNhcGFjaXR5KHRvdGFsU3VnZ2VzdGVkQ291
bnQpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBydW4gOiBoZWxwZXIubV9hbmFseXplZFJ1bnMp
IHsKLSAgICAgICAgY29uc3QgVUNoYXIqIGN1cnJlbnRDUCA9IGNwICsgcnVuLnN0YXJ0UG9zaXRp
b247Ci0gICAgICAgIExQQ1dTVFIgdGV4dFBvc2l0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxMUENX
U1RSPihjdXJyZW50Q1ApOwotCi0gICAgICAgIHVuc2lnbmVkIHN1Z2dlc3RlZENvdW50ID0gKDMg
KiBydW4ubGVuZ3RoIC8gMiArIDE2KTsKLSAgICAgICAgZ2x5cGhzLnJlc2l6ZShzdWdnZXN0ZWRD
b3VudCk7Ci0gICAgICAgIGNsdXN0ZXJNYXAucmVzaXplKHJ1bi5sZW5ndGgpOwotICAgICAgICB0
ZXh0UHJvcGVydGllcy5yZXNpemUoc3VnZ2VzdGVkQ291bnQpOwotICAgICAgICBnbHlwaFByb3Bl
cnRpZXMucmVzaXplKHN1Z2dlc3RlZENvdW50KTsKLQotICAgICAgICB1bnNpZ25lZCBnbHlwaENv
dW50ID0gMDsKLSAgICAgICAgaWYgKCFzaGFwZShhbmFseXplci5nZXQoKSwgcnVuLmFuYWx5c2lz
LCBmb250UGxhdGZvcm1EYXRhLCB0ZXh0UG9zaXRpb24sIHJ1bi5sZW5ndGgsIHN1Z2dlc3RlZENv
dW50LCBnbHlwaHMsIGNsdXN0ZXJNYXAsIHRleHRQcm9wZXJ0aWVzLCBnbHlwaFByb3BlcnRpZXMs
IGdseXBoQ291bnQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGdseXBocy5zaHJp
bmsoZ2x5cGhDb3VudCk7Ci0gICAgICAgIHRleHRQcm9wZXJ0aWVzLnNocmluayhnbHlwaENvdW50
KTsKLSAgICAgICAgZ2x5cGhQcm9wZXJ0aWVzLnNocmluayhnbHlwaENvdW50KTsKLSAgICAgICAg
Z2x5cGhBZHZhbmNlcy5yZXNpemUoZ2x5cGhDb3VudCk7Ci0gICAgICAgIGdseXBoT2Zmc2V0cy5y
ZXNpemUoZ2x5cGhDb3VudCk7Ci0KLSAgICAgICAgSFJFU1VMVCBwbGFjZW1lbnRSZXN1bHQgPSBh
bmFseXplci0+R2V0R2x5cGhQbGFjZW1lbnRzKHRleHRQb3NpdGlvbiwgY2x1c3Rlck1hcC5kYXRh
KCksIHRleHRQcm9wZXJ0aWVzLmRhdGEoKSwgcnVuLmxlbmd0aCwKLSAgICAgICAgICAgIGdseXBo
cy5kYXRhKCksIGdseXBoUHJvcGVydGllcy5kYXRhKCksIGdseXBoQ291bnQsIGZvbnRQbGF0Zm9y
bURhdGEuZHdGb250RmFjZSgpLAotICAgICAgICAgICAgZm9udFBsYXRmb3JtRGF0YS5zaXplKCks
IGZvbnRQbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRp
Y2FsLCBtX3J1bi5sdHIoKSwKLSAgICAgICAgICAgICZydW4uYW5hbHlzaXMsIHJlaW50ZXJwcmV0
X2Nhc3Q8TFBDV1NUUj4obG9jYWxlTmFtZSksIAotICAgICAgICAgICAgZmVhdHVyZXMuZGF0YSgp
LCAmcnVuLmxlbmd0aCwgMSwKLSAgICAgICAgICAgIGdseXBoQWR2YW5jZXMuZGF0YSgpLCBnbHlw
aE9mZnNldHMuZGF0YSgpKTsKLSAgICAgICAgaWYgKEZBSUxFRChwbGFjZW1lbnRSZXN1bHQpKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIENvbnZlcnQgYWxsIGNoYXJzIHRoYXQg
c2hvdWxkIGJlIHRyZWF0ZWQgYXMgc3BhY2VzIHRvIHVzZSB0aGUgc3BhY2UgZ2x5cGguCi0gICAg
ICAgIC8vIFdlIGFsc28gY3JlYXRlIGEgbWFwIHRoYXQgYWxsb3dzIHVzIHRvIHF1aWNrbHkgZ28g
ZnJvbSBzcGFjZSBnbHlwaHMgYmFjayB0byB0aGVpciBjb3JyZXNwb25kaW5nIGNoYXJhY3RlcnMu
Ci0gICAgICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250LT5zcGFjZVdpZHRoKCkgLSBmb250LT5z
eW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0KLSAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBydW4u
bGVuZ3RoOyArK2spIHsKLSAgICAgICAgICAgIFVDaGFyIGNoID0gKihjdXJyZW50Q1AgKyBrKTsK
LSAgICAgICAgICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFj
ZShjaCk7Ci0gICAgICAgICAgICBib29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZSA9IEZvbnRDYXNj
YWRlOjp0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2gpOwotICAgICAgICAgICAgaWYgKHRyZWF0QXNT
cGFjZSB8fCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UpIHsKLSAgICAgICAgICAgICAgICAvLyBTdWJz
dGl0dXRlIGluIHRoZSBzcGFjZSBnbHlwaCBhdCB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4gdGhl
IGdseXBocwotICAgICAgICAgICAgICAgIC8vIGFycmF5LgotICAgICAgICAgICAgICAgIGdseXBo
c1tjbHVzdGVyTWFwW2tdXSA9IGZvbnQtPnNwYWNlR2x5cGgoKTsKLSAgICAgICAgICAgICAgICBn
bHlwaEFkdmFuY2VzW2NsdXN0ZXJNYXBba11dID0gdHJlYXRBc1NwYWNlID8gc3BhY2VXaWR0aCA6
IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBvcmlnaW5zLnJlc2l6ZShn
bHlwaENvdW50KTsKLSAgICAgICAgYWR2YW5jZXMucmVzaXplKGdseXBoQ291bnQpOwotICAgICAg
ICBzdHJpbmdJbmRpY2VzLnJlc2l6ZShnbHlwaENvdW50KTsKLQotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGdseXBoQ291bnQ7ICsraSkgewotICAgICAgICAgICAgc3RyaW5nSW5kaWNl
c1tpXSA9IGk7Ci0gICAgICAgICAgICBvcmlnaW5zW2ldID0gRmxvYXRQb2ludChnbHlwaE9mZnNl
dHNbaV0uYWR2YW5jZU9mZnNldCwgZ2x5cGhPZmZzZXRzW2ldLmFzY2VuZGVyT2Zmc2V0KTsKLSAg
ICAgICAgICAgIGFkdmFuY2VzW2ldID0gRmxvYXRTaXplKGdseXBoQWR2YW5jZXNbaV0sIDApOwot
ICAgICAgICB9Ci0KLSAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0
UnVuOjpjcmVhdGUoYWR2YW5jZXMsIG9yaWdpbnMsIGdseXBocywgc3RyaW5nSW5kaWNlcywgRmxv
YXRTaXplKCksICpmb250LCBjdXJyZW50Q1AsIDAsIHJ1bi5sZW5ndGgsIDAsIHJ1bi5sZW5ndGgs
IG1fcnVuLmx0cigpKSk7Ci0gICAgfQotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmli
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xs
ZXJVbmlzY3JpYmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw2IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCiAKLSNpZiAh
VVNFKERJUkVDVDJEKQotCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udENh
c2NhZGUuaCIKICNpbmNsdWRlICJIV25kREMuaCIKQEAgLTI3NSw1ICsyNzMsMyBAQCB2b2lkIENv
bXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiB9CiAKIH0KLQotI2VuZGlmIC8vICFV
U0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
RGlyZWN0MkRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjg3ODEy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0
aW9ucy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBCcmVudCBGdWxn
aGFtIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEln
YWxpYSBTLkwuCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEludGVsIENv
cnBvcmF0aW9uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEaXJlY3QyRE9wZXJhdGlvbnMuaCIKLQotI2lm
IFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaCIKLSNpbmNsdWRlICJJbWFn
ZS5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGly
ZWN0MkQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhdGguaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUgIlNoYWRvd0Js
dXIuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8ZDJkMS5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgRGlyZWN0MkQgewotCi1lbnVtIFBhdHRlcm5BZGp1c3Rt
ZW50IHsgTm9BZGp1c3RtZW50LCBBZGp1c3RQYXR0ZXJuRm9yR2xvYmFsQWxwaGEgfTsKLWVudW0g
QWxwaGFQcmVzZXJ2YXRpb24geyBEb05vdFByZXNlcnZlQWxwaGEsIFByZXNlcnZlQWxwaGEgfTsK
LQotLy8gRklYTUU6IFJlcGxhY2Ugb25jZSBHcmFwaGljc0NvbnRleHQ6OmRhc2hlZExpbmVDb3Ju
ZXJXaWR0aEZvclN0cm9rZVdpZHRoKCkKLS8vIGlzIHJlZmFjdG9yZWQgYXMgYSBzdGF0aWMgcHVi
bGljIGZ1bmN0aW9uLgotc3RhdGljIGZsb2F0IGRhc2hlZExpbmVDb3JuZXJXaWR0aEZvclN0cm9r
ZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSwgZmxvYXQg
c3Ryb2tlVGhpY2tuZXNzKQotewotICAgIHJldHVybiBzdHJva2VTdHlsZSA9PSBEb3R0ZWRTdHJv
a2UgPyBzdHJva2VUaGlja25lc3MgOiBzdGQ6Om1pbigyLjBmICogc3Ryb2tlVGhpY2tuZXNzLCBz
dGQ6Om1heChzdHJva2VUaGlja25lc3MsIHN0cm9rZVdpZHRoIC8gMy4wZikpOwotfQotCi0vLyBG
SVhNRTogUmVwbGFjZSBvbmNlIEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZVBhdHRlcm5XaWR0
aEZvclN0cm9rZVdpZHRoKCkKLS8vIGlzIHJlZmFjdG9yZWQgYXMgYSBzdGF0aWMgcHVibGljIGZ1
bmN0aW9uLgotc3RhdGljIGZsb2F0IGRhc2hlZExpbmVQYXR0ZXJuV2lkdGhGb3JTdHJva2VXaWR0
aChmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUsIGZsb2F0IHN0cm9r
ZVRoaWNrbmVzcykKLXsKLSAgICByZXR1cm4gc3Ryb2tlU3R5bGUgPT0gRG90dGVkU3Ryb2tlID8g
c3Ryb2tlVGhpY2tuZXNzIDogc3RkOjptaW4oMy4wZiAqIHN0cm9rZVRoaWNrbmVzcywgc3RkOjpt
YXgoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VXaWR0aCAvIDMuMGYpKTsKLX0KLQotLy8gRklYTUU6
IFJlcGxhY2Ugb25jZSBHcmFwaGljc0NvbnRleHQ6OmRhc2hlZExpbmVQYXR0ZXJuT2Zmc2V0Rm9y
UGF0dGVybkFuZFN0cm9rZVdpZHRoKCkKLS8vIGlzIHJlZmFjdG9yZWQgYXMgYSBzdGF0aWMgcHVi
bGljIGZ1bmN0aW9uLgotc3RhdGljIGZsb2F0IGRhc2hlZExpbmVQYXR0ZXJuT2Zmc2V0Rm9yUGF0
dGVybkFuZFN0cm9rZVdpZHRoKGZsb2F0IHBhdHRlcm5XaWR0aCwgZmxvYXQgc3Ryb2tlV2lkdGgp
Ci17Ci0gICAgLy8gUGF0dGVybiBzdGFydHMgd2l0aCBmdWxsIGZpbGwgYW5kIGVuZHMgd2l0aCB0
aGUgZW1wdHkgZmlsbC4KLSAgICAvLyAxLiBMZXQncyBzdGFydCB3aXRoIHRoZSBlbXB0eSBwaGFz
ZSBhZnRlciB0aGUgY29ybmVyLgotICAgIC8vIDIuIENoZWNrIGlmIHdlJ3ZlIGdvdCBvZGQgb3Ig
ZXZlbiBudW1iZXIgb2YgcGF0dGVybnMgYW5kIHdoZXRoZXIgdGhleSBmdWxseSBjb3ZlciB0aGUg
bGluZS4KLSAgICAvLyAzLiBJbiBjYXNlIG9mIGV2ZW4gbnVtYmVyIG9mIHBhdHRlcm5zIGFuZC9v
ciByZW1haW5kZXIsIG1vdmUgdGhlIHBhdHRlcm4gc3RhcnQgcG9zaXRpb24KLSAgICAvLyBzbyB0
aGF0IHRoZSBwYXR0ZXJuIGlzIGJhbGFuY2VkIGJldHdlZW4gdGhlIGNvcm5lcnMuCi0gICAgZmxv
YXQgcGF0dGVybk9mZnNldCA9IHBhdHRlcm5XaWR0aDsKLSAgICBpbnQgbnVtYmVyT2ZTZWdtZW50
cyA9IHN0ZDo6Zmxvb3Ioc3Ryb2tlV2lkdGggLyBwYXR0ZXJuV2lkdGgpOwotICAgIGJvb2wgb2Rk
TnVtYmVyT2ZTZWdtZW50cyA9IG51bWJlck9mU2VnbWVudHMgJSAyOwotICAgIGZsb2F0IHJlbWFp
bmRlciA9IHN0cm9rZVdpZHRoIC0gKG51bWJlck9mU2VnbWVudHMgKiBwYXR0ZXJuV2lkdGgpOwot
ICAgIGlmIChvZGROdW1iZXJPZlNlZ21lbnRzICYmIHJlbWFpbmRlcikKLSAgICAgICAgcGF0dGVy
bk9mZnNldCAtPSByZW1haW5kZXIgLyAyLjBmOwotICAgIGVsc2UgaWYgKCFvZGROdW1iZXJPZlNl
Z21lbnRzKSB7Ci0gICAgICAgIGlmIChyZW1haW5kZXIpCi0gICAgICAgICAgICBwYXR0ZXJuT2Zm
c2V0ICs9IHBhdHRlcm5PZmZzZXQgLSAocGF0dGVybldpZHRoICsgcmVtYWluZGVyKSAvIDIuMGY7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhdHRlcm5PZmZzZXQgKz0gcGF0dGVybldpZHRo
IC8gMi4wZjsKLSAgICB9Ci0KLSAgICByZXR1cm4gcGF0dGVybk9mZnNldDsKLX0KLQotLy8gRklY
TUU6IFJlcGxhY2Ugb25jZSBHcmFwaGljc0NvbnRleHQ6OmNlbnRlckxpbmVBbmRDdXRPZmZDb3Ju
ZXJzKCkKLS8vIGlzIHJlZmFjdG9yZWQgYXMgYSBzdGF0aWMgcHVibGljIGZ1bmN0aW9uLgotc3Rh
dGljIFZlY3RvcjxGbG9hdFBvaW50PiBjZW50ZXJMaW5lQW5kQ3V0T2ZmQ29ybmVycyhib29sIGlz
VmVydGljYWxMaW5lLCBmbG9hdCBjb3JuZXJXaWR0aCwgRmxvYXRQb2ludCBwb2ludDEsIEZsb2F0
UG9pbnQgcG9pbnQyKQotewotICAgIC8vIENlbnRlciBsaW5lIGFuZCBjdXQgb2ZmIGNvcm5lcnMg
Zm9yIHBhdHRlcm4gcGFpbnRpbmcuCi0gICAgaWYgKGlzVmVydGljYWxMaW5lKSB7Ci0gICAgICAg
IGZsb2F0IGNlbnRlck9mZnNldCA9IChwb2ludDIueCgpIC0gcG9pbnQxLngoKSkgLyAyLjBmOwot
ICAgICAgICBwb2ludDEubW92ZShjZW50ZXJPZmZzZXQsIGNvcm5lcldpZHRoKTsKLSAgICAgICAg
cG9pbnQyLm1vdmUoLWNlbnRlck9mZnNldCwgLWNvcm5lcldpZHRoKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBmbG9hdCBjZW50ZXJPZmZzZXQgPSAocG9pbnQyLnkoKSAtIHBvaW50MS55KCkpIC8g
Mi4wZjsKLSAgICAgICAgcG9pbnQxLm1vdmUoY29ybmVyV2lkdGgsIGNlbnRlck9mZnNldCk7Ci0g
ICAgICAgIHBvaW50Mi5tb3ZlKC1jb3JuZXJXaWR0aCwgLWNlbnRlck9mZnNldCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHsgcG9pbnQxLCBwb2ludDIgfTsKLX0KLQotCi1uYW1lc3BhY2UgU3RhdGUg
ewotCi12b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxh
dGZvcm1Db250ZXh0LCBmbG9hdCBzdHJva2VUaGlja25lc3MpCi17Ci0gICAgcGxhdGZvcm1Db250
ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3MpOwotfQotCi12b2lkIHNldFN0
cm9rZVN0eWxlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIFN0cm9r
ZVN0eWxlIHN0cm9rZVN0eWxlKQotewotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRTdHJva2VTdHls
ZShzdHJva2VTdHlsZSk7Ci19Ci0KLXZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLQotICAgIEQyRDFfQkxFTkRf
TU9ERSB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfTVVMVElQTFk7Ci0gICAgRDJE
MV9DT01QT1NJVEVfTU9ERSB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVfTU9E
RV9GT1JDRV9EV09SRDsKLQotICAgIGlmIChibGVuZE1vZGUgIT0gQmxlbmRNb2RlOjpOb3JtYWwp
IHsKLSAgICAgICAgc3dpdGNoIChibGVuZE1vZGUpIHsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6
Ok11bHRpcGx5OgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RF
X01VTFRJUExZOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpT
Y3JlZW46Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfU0NS
RUVOOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpPdmVybGF5
OgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX09WRVJMQVk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OkRhcmtlbjoKLSAg
ICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9EQVJLRU47Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OkxpZ2h0ZW46Ci0gICAgICAg
ICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfTElHSFRFTjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6Q29sb3JEb2RnZToKLSAgICAgICAg
ICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9DT0xPUl9ET0RHRTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6Q29sb3JCdXJuOgotICAgICAg
ICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0NPTE9SX0JVUk47Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OkhhcmRMaWdodDoKLSAgICAg
ICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9IQVJEX0xJR0hUOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpTb2Z0TGlnaHQ6Ci0gICAg
ICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfU09GVF9MSUdIVDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZTo6RGlmZmVyZW5jZToKLSAg
ICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9ESUZGRVJFTkNFOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpFeGNsdXNpb246Ci0g
ICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfRVhDTFVTSU9OOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpIdWU6Ci0gICAgICAg
ICAgICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfSFVFOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpTYXR1cmF0aW9uOgotICAgICAgICAgICAg
dGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX1NBVFVSQVRJT047Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OkNvbG9yOgotICAgICAgICAgICAgdGFy
Z2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0NPTE9SOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpMdW1pbm9zaXR5OgotICAgICAgICAgICAgdGFyZ2V0
QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0xVTUlOT1NJVFk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGU6OlBsdXNEYXJrZXI6Ci0gICAgICAgICAgICB0YXJn
ZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfREFSS0VSX0NPTE9SOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlOjpQbHVzTGlnaHRlcjoKLSAgICAgICAgICAg
IHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9MSUdIVEVSX0NPTE9SOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAoY29tcG9zaXRlT3BlcmF0aW9uKSB7
Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRlT3BlcmF0b3I6OkNsZWFyOgotICAgICAgICAgICAgLy8g
RklYTUU6IHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9DTEVBUjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZU9wZXJhdG9yOjpDb3B5OgotICAgICAg
ICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfU09VUkNFX0NP
UFk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6
U291cmNlT3ZlcjoKLSAgICAgICAgICAgIHRhcmdldENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBP
U0lURV9NT0RFX1NPVVJDRV9PVkVSOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluOgotICAgICAgICAgICAgdGFyZ2V0Q29tcG9zaXRl
TW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfU09VUkNFX0lOOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU91dDoKLSAgICAgICAgICAg
IHRhcmdldENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX1NPVVJDRV9PVVQ7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNl
QXRvcDoKLSAgICAgICAgICAgIHRhcmdldENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9N
T0RFX1NPVVJDRV9BVE9QOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcG9z
aXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3ZlcjoKLSAgICAgICAgICAgIHRhcmdldENvbXBvc2l0
ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX0RFU1RJTkFUSU9OX09WRVI7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25JbjoK
LSAgICAgICAgICAgIHRhcmdldENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX0RF
U1RJTkFUSU9OX0lOOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRl
T3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0OgotICAgICAgICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9k
ZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfREVTVElOQVRJT05fT1VUOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uQXRvcDoKLSAg
ICAgICAgICAgIHRhcmdldENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX0RFU1RJ
TkFUSU9OX0FUT1A7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVP
cGVyYXRvcjo6WE9SOgotICAgICAgICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09N
UE9TSVRFX01PREVfWE9SOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcG9z
aXRlT3BlcmF0b3I6OlBsdXNEYXJrZXI6Ci0gICAgICAgICAgICB0YXJnZXRCbGVuZE1vZGUgPSBE
MkQxX0JMRU5EX01PREVfREFSS0VOOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q29tcG9zaXRlT3BlcmF0b3I6OlBsdXNMaWdodGVyOgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRN
b2RlID0gRDJEMV9CTEVORF9NT0RFX0xJR0hURU47Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDb21wb3NpdGVPcGVyYXRvcjo6RGlmZmVyZW5jZToKLSAgICAgICAgICAgIHRhcmdl
dEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9ESUZGRVJFTkNFOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0QmxlbmRBbmRD
b21wb3NpdGVNb2RlKHRhcmdldEJsZW5kTW9kZSwgdGFyZ2V0Q29tcG9zaXRlTW9kZSk7Ci19Ci0K
LXZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQsIGJvb2wgZW5hYmxlKQotewotICAgIGF1dG8gYW50aWFsaWFzTW9kZSA9IGVuYWJs
ZSA/IEQyRDFfQU5USUFMSUFTX01PREVfUEVSX1BSSU1JVElWRSA6IEQyRDFfQU5USUFMSUFTX01P
REVfQUxJQVNFRDsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPlNldEFudGlh
bGlhc01vZGUoYW50aWFsaWFzTW9kZSk7Ci19Ci0KLXZvaWQgc2V0Q1RNKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKQotewotICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAg
IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+U2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7
Ci0KLSAgICBpZiAoYXV0byogZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZSA9IHBsYXRmb3JtQ29udGV4
dC5ncmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dFByaXZh
dGUtPnNldENUTSh0cmFuc2Zvcm0pOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgQVNTRVJUKHBsYXRm
b3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgRDJEMV9NQVRSSVhfM1gyX0YgY3VycmVu
dFRyYW5zZm9ybTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCktPkdldFRyYW5z
Zm9ybSgmY3VycmVudFRyYW5zZm9ybSk7Ci0gICAgcmV0dXJuIGN1cnJlbnRUcmFuc2Zvcm07Ci19
Ci0KLUludFJlY3QgZ2V0Q2xpcEJvdW5kcyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZv
cm1Db250ZXh0KQotewotICAgIEQyRDFfU0laRV9GIGNsaXBTaXplOwotICAgIGlmIChhdXRvIGNs
aXBMYXllciA9IHBsYXRmb3JtQ29udGV4dC5jbGlwTGF5ZXIoKSkKLSAgICAgICAgY2xpcFNpemUg
PSBjbGlwTGF5ZXItPkdldFNpemUoKTsKLSAgICBlbHNlCi0gICAgICAgIGNsaXBTaXplID0gcGxh
dGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5HZXRTaXplKCk7Ci0KLSAgICBGbG9hdFJlY3Qg
Y2xpcEJvdW5kcyhJbnRQb2ludCgpLCBjbGlwU2l6ZSk7Ci0KLSAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdChjbGlwQm91bmRzKTsKLX0KLQotRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0KLSAgICByZXR1cm4gcmVjdDsKLX0K
LQotYm9vbCBpc0FjY2VsZXJhdGVkQ29udGV4dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxh
dGZvcm1Db250ZXh0KQotewotICAgIGF1dG8gcmVuZGVyUHJvcGVydGllcyA9IEQyRDE6OlJlbmRl
clRhcmdldFByb3BlcnRpZXMoKTsKLSAgICByZW5kZXJQcm9wZXJ0aWVzLnR5cGUgPSBEMkQxX1JF
TkRFUl9UQVJHRVRfVFlQRV9IQVJEV0FSRTsKLSAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0LnJl
bmRlclRhcmdldCgpLT5Jc1N1cHBvcnRlZCgmcmVuZGVyUHJvcGVydGllcyk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFN0YXRlCi0KLUZpbGxTb3VyY2U6OkZpbGxTb3VyY2UoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAg
OiBnbG9iYWxBbHBoYShzdGF0ZS5hbHBoYSkKLSAgICAsIGNvbG9yKHN0YXRlLmZpbGxDb2xvcikK
LSAgICAsIGZpbGxSdWxlKHN0YXRlLmZpbGxSdWxlKQotewotICAgIEFTU0VSVChjb250ZXh0Lmhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBhdXRvJiBwbGF0Zm9ybUNvbnRleHQgPSAqY29udGV4
dC5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIGlmIChzdGF0ZS5maWxsUGF0dGVybikgewotICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3Qg
cmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCi0gICAgICAgIGJydXNoID0gc3RhdGUuZmlsbFBhdHRl
cm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb250ZXh0LCBzdGF0ZS5hbHBoYSwgdXNlclRvQmFz
ZUNUTSk7Ci0gICAgfSBlbHNlIGlmIChzdGF0ZS5maWxsR3JhZGllbnQgJiYgIXN0YXRlLmZpbGxH
cmFkaWVudC0+c3RvcHMoKS5pc0VtcHR5KCkpCi0gICAgICAgIGJydXNoID0gc3RhdGUuZmlsbEdy
YWRpZW50LT5jcmVhdGVCcnVzaChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAg
IGVsc2UKLSAgICAgICAgYnJ1c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoY29s
b3IpOwotfQotCi1TdHJva2VTb3VyY2U6OlN0cm9rZVNvdXJjZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICA6IGds
b2JhbEFscGhhKHN0YXRlLmFscGhhKQotICAgICwgdGhpY2tuZXNzKHN0YXRlLnN0cm9rZVRoaWNr
bmVzcykKLSAgICAsIGNvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKQotewotICAgIEFTU0VSVChjb250
ZXh0Lmhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBhdXRvJiBwbGF0Zm9ybUNvbnRleHQgPSAq
Y29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIGlmIChzdGF0ZS5zdHJva2VQYXR0ZXJu
KSB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNOyAvLyBGSVhNRTogVGhp
cyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdpbmRvd3MKLSAgICAgICAgYnJ1c2ggPSBzdGF0ZS5z
dHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29udGV4dCwgc3RhdGUuYWxwaGEs
IHVzZXJUb0Jhc2VDVE0pOwotICAgIH0gZWxzZSBpZiAoc3RhdGUuc3Ryb2tlR3JhZGllbnQpCi0g
ICAgICAgIGJydXNoID0gc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZUJydXNoKHBsYXRmb3Jt
Q29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBicnVzaCA9IHBsYXRm
b3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihjb2xvcik7Ci19Ci0KLVNoYWRvd1N0YXRlOjpTaGFk
b3dTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCi0gICAgOiBvZmZzZXQo
c3RhdGUuc2hhZG93T2Zmc2V0KQotICAgICwgYmx1cihzdGF0ZS5zaGFkb3dCbHVyKQotICAgICwg
Y29sb3Ioc3RhdGUuc2hhZG93Q29sb3IpCi0gICAgLCBpZ25vcmVUcmFuc2Zvcm1zKHN0YXRlLnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotICAgICwgZ2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEpCi0g
ICAgLCBnbG9iYWxDb21wb3NpdGVPcGVyYXRvcihzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcikKLXsK
LX0KLQotYm9vbCBTaGFkb3dTdGF0ZTo6aXNWaXNpYmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Y29sb3IuaXNWaXNpYmxlKCkgJiYgKG9mZnNldC53aWR0aCgpIHx8IG9mZnNldC5oZWlnaHQoKSB8
fCBibHVyKTsKLX0KLQotYm9vbCBTaGFkb3dTdGF0ZTo6aXNSZXF1aXJlZChQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0KSBjb25zdAotewotICAgIC8vIFdlIGNhbid0IGF2
b2lkIFNoYWRvd0JsdXIgaWYgdGhlIHNoYWRvdyBoYXMgYmx1ci4KLSAgICBpZiAoY29sb3IuaXNW
aXNpYmxlKCkgJiYgYmx1cikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBXZSBjYW4g
YXZvaWQgU2hhZG93Qmx1ciBhbmQgb3B0aW1pemUsIHNpbmNlIHdlJ3JlIG5vdCBkcmF3aW5nIG9u
IGEKLSAgICAvLyBjYW52YXMgYW5kIGJveCBzaGFkb3dzIGFyZSBhZmZlY3RlZCBieSB0aGUgdHJh
bnNmb3JtYXRpb24gbWF0cml4LgotICAgIGlmICghaWdub3JlVHJhbnNmb3JtcykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgLy8gV2UgY2FuIGF2b2lkIFNoYWRvd0JsdXIsIHNpbmNlIHRo
ZXJlIGFyZSBubyB0cmFuc2Zvcm1hdGlvbnMgdG8gYXBwbHkgdG8gdGhlIGNhbnZhcy4KLSAgICBp
ZiAoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQpLmlzSWRlbnRpdHkoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgLy8gT3RoZXJ3aXNlLCBubyBjaGFuY2UgYXZvaWRpbmcgU2hh
ZG93Qmx1ci4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBzZXRMaW5lQ2FwKFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIExpbmVDYXAgbGluZUNhcCkKLXsKLSAg
ICBEMkQxX0NBUF9TVFlMRSBjYXBTdHlsZSA9IEQyRDFfQ0FQX1NUWUxFX0ZMQVQ7Ci0gICAgc3dp
dGNoIChsaW5lQ2FwKSB7Ci0gICAgY2FzZSBMaW5lQ2FwOjpSb3VuZDoKLSAgICAgICAgY2FwU3R5
bGUgPSBEMkQxX0NBUF9TVFlMRV9ST1VORDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5l
Q2FwOjpTcXVhcmU6Ci0gICAgICAgIGNhcFN0eWxlID0gRDJEMV9DQVBfU1RZTEVfU1FVQVJFOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIExpbmVDYXA6OkJ1dHQ6Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgY2FwU3R5bGUgPSBEMkQxX0NBUF9TVFlMRV9GTEFUOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0TGluZUNhcChjYXBTdHlsZSk7Ci19Ci0KLXZv
aWQgc2V0TGluZURhc2goUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwg
Y29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgcGxhdGZv
cm1Db250ZXh0LnNldERhc2hlcyhkYXNoZXMpOwotICAgIHBsYXRmb3JtQ29udGV4dC5zZXREYXNo
T2Zmc2V0KGRhc2hPZmZzZXQpOwotfQotCi12b2lkIHNldExpbmVKb2luKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIExpbmVKb2luIGxpbmVKb2luKQotewotICAgIEQy
RDFfTElORV9KT0lOIGpvaW5TdHlsZSA9IEQyRDFfTElORV9KT0lOX01JVEVSOwotICAgIHN3aXRj
aCAobGluZUpvaW4pIHsKLSAgICBjYXNlIExpbmVKb2luOjpSb3VuZDoKLSAgICAgICAgam9pblN0
eWxlID0gRDJEMV9MSU5FX0pPSU5fUk9VTkQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGlu
ZUpvaW46OkJldmVsOgotICAgICAgICBqb2luU3R5bGUgPSBEMkQxX0xJTkVfSk9JTl9CRVZFTDsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lSm9pbjo6TWl0ZXI6Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgam9pblN0eWxlID0gRDJEMV9MSU5FX0pPSU5fTUlURVI7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRMaW5lSm9pbihqb2luU3R5bGUpOwot
fQotCi12b2lkIHNldE1pdGVyTGltaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3Jt
Q29udGV4dCwgZmxvYXQgbWl0ZXJMaW1pdCkKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0TWl0
ZXJMaW1pdChtaXRlckxpbWl0KTsKLX0KLQotdm9pZCBmaWxsUmVjdChQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZp
bGxTb3VyY2UmIGZpbGxTb3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKLXsK
LSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0KLSAg
ICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgZHJhd1dpdGhTaGFk
b3cocGxhdGZvcm1Db250ZXh0LCByZWN0LCBzaGFkb3dTdGF0ZSwgWyZwbGF0Zm9ybUNvbnRleHQs
IHJlY3QsICZmaWxsU291cmNlXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0g
ICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwotICAgICAgICByZW5kZXJU
YXJnZXQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIGZpbGxTb3VyY2UuYnJ1c2guZ2V0KCkpOwot
ICAgIH0pOwotfQotCi12b2lkIGZpbGxSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0
Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBj
b25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCi17Ci0gICAgYXV0byBjb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRh
Z3MoMSwgX19MSU5FX18pOwotICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgcmVj
dCwgc2hhZG93U3RhdGUsIFsmcGxhdGZvcm1Db250ZXh0LCBjb2xvciwgcmVjdF0oSUQyRDFSZW5k
ZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRS
ZWN0ID0gcmVjdDsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0
LCBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoY29sb3IpLmdldCgpKTsKLSAgICB9KTsK
LX0KLQotdm9pZCBmaWxsUm91bmRlZFJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRm
b3JtQ29udGV4dCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCi17Ci0gICAgYXV0byBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCi0gICAgcGxhdGZvcm1Db250ZXh0
LnNldFRhZ3MoMSwgX19MSU5FX18pOwotCi0gICAgY29uc3QgRmxvYXRSZWN0JiByID0gcmVjdC5y
ZWN0KCk7Ci0gICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpID0gcmVjdC5y
YWRpaSgpOwotICAgIGJvb2wgZXF1YWxXaWR0aHMgPSAocmFkaWkudG9wTGVmdCgpLndpZHRoKCkg
PT0gcmFkaWkudG9wUmlnaHQoKS53aWR0aCgpICYmIHJhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSA9
PSByYWRpaS5ib3R0b21MZWZ0KCkud2lkdGgoKSAmJiByYWRpaS5ib3R0b21MZWZ0KCkud2lkdGgo
KSA9PSByYWRpaS5ib3R0b21SaWdodCgpLndpZHRoKCkpOwotICAgIGJvb2wgZXF1YWxIZWlnaHRz
ID0gKHJhZGlpLnRvcExlZnQoKS5oZWlnaHQoKSA9PSByYWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0
KCkgJiYgcmFkaWkuYm90dG9tTGVmdCgpLmhlaWdodCgpID09IHJhZGlpLnRvcFJpZ2h0KCkuaGVp
Z2h0KCkgJiYgcmFkaWkudG9wUmlnaHQoKS5oZWlnaHQoKSA9PSByYWRpaS5ib3R0b21SaWdodCgp
LmhlaWdodCgpKTsKLSAgICBib29sIGhhc0N1c3RvbUZpbGwgPSBmYWxzZTsgLy8gRklYTUU6IFdo
eSBpc24ndCBhIEZpbGxTb3VyY2UgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24/Ci0gICAgaWYgKCFo
YXNDdXN0b21GaWxsICYmIGVxdWFsV2lkdGhzICYmIGVxdWFsSGVpZ2h0cyAmJiByYWRpaS50b3BM
ZWZ0KCkud2lkdGgoKSAqIDIgPT0gci53aWR0aCgpICYmIHJhZGlpLnRvcExlZnQoKS5oZWlnaHQo
KSAqIDIgPT0gci5oZWlnaHQoKSkgewotICAgICAgICBkcmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNv
bnRleHQsIHIsIHNoYWRvd1N0YXRlLCBbJnBsYXRmb3JtQ29udGV4dCwgY29sb3IsIHJlY3QsIHJh
ZGlpLCByXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgICAgICBh
dXRvIHJvdW5kZWRSZWN0ID0gRDJEMTo6Um91bmRlZFJlY3QociwgcmFkaWkudG9wTGVmdCgpLndp
ZHRoKCksIHJhZGlpLnRvcExlZnQoKS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICByZW5kZXJUYXJn
ZXQtPkZpbGxSb3VuZGVkUmVjdGFuZ2xlKCZyb3VuZGVkUmVjdCwgcGxhdGZvcm1Db250ZXh0LmJy
dXNoV2l0aENvbG9yKGNvbG9yKS5nZXQoKSk7Ci0gICAgICAgIH0pOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIFBhdGggcGF0aDsKLSAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKLSAg
ICAgICAgZmlsbFBhdGgocGxhdGZvcm1Db250ZXh0LCBwYXRoLCBjb2xvciwgc2hhZG93U3RhdGUp
OwotICAgIH0KLX0KLQotdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgRmlsbFNvdXJjZSYgZmls
bFNvdXJjZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQotewotICAgIGF1dG8gY29u
dGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIHBsYXRmb3JtQ29u
dGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLQotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFk
ZFJlY3QocmVjdCk7Ci0KLSAgICBpZiAoIXJvdW5kZWRIb2xlUmVjdC5yYWRpaSgpLmlzWmVybygp
KQotICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJvdW5kZWRIb2xlUmVjdCk7Ci0gICAgZWxz
ZQotICAgICAgICBwYXRoLmFkZFJlY3Qocm91bmRlZEhvbGVSZWN0LnJlY3QoKSk7Ci0KLSAgICBG
aWxsU291cmNlIGZpbGxXaXRoSG9sZVNvdXJjZSA9IGZpbGxTb3VyY2U7Ci0gICAgZmlsbFdpdGhI
b2xlU291cmNlLmZpbGxSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQ7Ci0KLSAgICBmaWxsUGF0aChw
bGF0Zm9ybUNvbnRleHQsIHBhdGgsIGZpbGxXaXRoSG9sZVNvdXJjZSwgc2hhZG93U3RhdGUpOwot
fQotCi12b2lkIGZpbGxSZWN0V2l0aEdyYWRpZW50KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBw
bGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgSUQyRDFCcnVzaCogZ3JhZGll
bnQpCi17Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwotICAgIGRy
YXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9ybUNvbnRleHQsIHJlY3Qs
ICZncmFkaWVudF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICBj
b25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5G
aWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBncmFkaWVudCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgZmls
bFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgUGF0
aCYgcGF0aCwgY29uc3QgRmlsbFNvdXJjZSYgZmlsbFNvdXJjZSwgY29uc3QgU2hhZG93U3RhdGUm
IHNoYWRvd1N0YXRlKQotewotICAgIHBhdGguY2xvc2VBbnlPcGVuR2VvbWV0cmllcyhEMkQxX0ZJ
R1VSRV9FTkRfT1BFTik7Ci0KLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVu
ZGVyVGFyZ2V0KCk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7
Ci0KLSAgICBDT01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiBwYXRoVG9GaWxsOwotICAgIHBhdGgu
Y3JlYXRlR2VvbWV0cnlXaXRoRmlsbE1vZGUoZmlsbFNvdXJjZS5maWxsUnVsZSwgcGF0aFRvRmls
bCk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgRnVu
Y3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiBkcmF3RnVuY3Rpb24gPSBbJnBsYXRmb3Jt
Q29udGV4dCwgJnBhdGhUb0ZpbGwsICZmaWxsU291cmNlXShJRDJEMVJlbmRlclRhcmdldCogcmVu
ZGVyVGFyZ2V0KSB7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RmlsbEdlb21ldHJ5KHBhdGhUb0Zp
bGwuZ2V0KCksIGZpbGxTb3VyY2UuYnJ1c2guZ2V0KCkpOwotICAgIH07Ci0KLSAgICBpZiAoc2hh
ZG93U3RhdGUuaXNWaXNpYmxlKCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCA9
IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwotICAgICAgICBkcmF3V2l0aFNoYWRvdyhwbGF0Zm9y
bUNvbnRleHQsIGJvdW5kaW5nUmVjdCwgc2hhZG93U3RhdGUsIFdURk1vdmUoZHJhd0Z1bmN0aW9u
KSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4
dCwgV1RGTW92ZShkcmF3RnVuY3Rpb24pKTsKLX0KLQotdm9pZCBmaWxsUGF0aChQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBD
b2xvciYgY29sb3IsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKLXsKLSAgICBhdXRv
IGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBwbGF0Zm9y
bUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0KLSAgICBDT01QdHI8SUQyRDFHZW9tZXRy
eUdyb3VwPiBwYXRoVG9GaWxsOwotICAgIHBhdGguY3JlYXRlR2VvbWV0cnlXaXRoRmlsbE1vZGUo
V2luZFJ1bGU6OkV2ZW5PZGQsIHBhdGhUb0ZpbGwpOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNl
dFRhZ3MoMSwgX19MSU5FX18pOwotCi0gICAgRnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdl
dCopPiBkcmF3RnVuY3Rpb24gPSBbJnBsYXRmb3JtQ29udGV4dCwgJnBhdGhUb0ZpbGwsIGNvbG9y
XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIHJlbmRlclRhcmdl
dC0+RmlsbEdlb21ldHJ5KHBhdGhUb0ZpbGwuZ2V0KCksIHBsYXRmb3JtQ29udGV4dC5icnVzaFdp
dGhDb2xvcihjb2xvcikuZ2V0KCkpOwotICAgIH07Ci0KLSAgICBpZiAoc2hhZG93U3RhdGUuaXNW
aXNpYmxlKCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCA9IHBhdGguZmFzdEJv
dW5kaW5nUmVjdCgpOwotICAgICAgICBkcmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIGJv
dW5kaW5nUmVjdCwgc2hhZG93U3RhdGUsIFdURk1vdmUoZHJhd0Z1bmN0aW9uKSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgV1RGTW92ZShk
cmF3RnVuY3Rpb24pKTsKLX0KLQotdm9pZCBzdHJva2VSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdp
ZHRoLCBjb25zdCBTdHJva2VTb3VyY2UmIHN0cm9rZVNvdXJjZSwgY29uc3QgU2hhZG93U3RhdGUm
IHNoYWRvd1N0YXRlKQotewotICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgcmVj
dCwgc2hhZG93U3RhdGUsIFsmcGxhdGZvcm1Db250ZXh0LCAmc3Ryb2tlU291cmNlLCByZWN0LCBs
aW5lV2lkdGhdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgcGxh
dGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwotICAgICAgICBjb25zdCBEMkQxX1JF
Q1RfRiBkMmRSZWN0ID0gcmVjdDsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3UmVjdGFuZ2xl
KCZkMmRSZWN0LCBzdHJva2VTb3VyY2UuYnJ1c2guZ2V0KCksIGxpbmVXaWR0aCwgcGxhdGZvcm1D
b250ZXh0LnN0cm9rZVN0eWxlKCkpOwotICAgIH0pOwotfQotCi12b2lkIHN0cm9rZVBhdGgoUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCwg
Y29uc3QgU3Ryb2tlU291cmNlJiBzdHJva2VTb3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFk
b3dTdGF0ZSkKLXsKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFy
Z2V0KCk7Ci0gICAgCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwot
Ci0gICAgRnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiBkcmF3RnVuY3Rpb24gPSBb
JnBsYXRmb3JtQ29udGV4dCwgJnBhdGgsICZzdHJva2VTb3VyY2VdKElEMkQxUmVuZGVyVGFyZ2V0
KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3R2VvbWV0cnkocGF0
aC5wbGF0Zm9ybVBhdGgoKSwgc3Ryb2tlU291cmNlLmJydXNoLmdldCgpLCBzdHJva2VTb3VyY2Uu
dGhpY2tuZXNzLCBwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlU3R5bGUoKSk7Ci0gICAgfTsKLQotICAg
IGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2libGUoKSkgewotICAgICAgICBhdXRvIGJvdW5kaW5nUmVj
dCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdEZvclN0cm9rZShwbGF0Zm9ybUNvbnRleHQpOwotICAg
ICAgICBkcmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIGJvdW5kaW5nUmVjdCwgc2hhZG93
U3RhdGUsIFdURk1vdmUoZHJhd0Z1bmN0aW9uKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGRyYXdX
aXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgV1RGTW92ZShkcmF3RnVuY3Rpb24pKTsKLX0K
LQotdm9pZCBkcmF3UGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0
LCBjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBTdHJva2VTb3VyY2UmIHN0cm9rZVNvdXJjZSwgY29u
c3QgU2hhZG93U3RhdGUmKQotewotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5y
ZW5kZXJUYXJnZXQoKTsKLQotICAgIHBhdGguY2xvc2VBbnlPcGVuR2VvbWV0cmllcyhEMkQxX0ZJ
R1VSRV9FTkRfT1BFTik7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVf
Xyk7Ci0KLSAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1D
b250ZXh0LCAmc3Ryb2tlU291cmNlLCAmcGF0aF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRh
cmdldCkgewotICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdHZW9tZXRyeShwYXRoLnBsYXRmb3Jt
UGF0aCgpLCBzdHJva2VTb3VyY2UuYnJ1c2guZ2V0KCksIHN0cm9rZVNvdXJjZS50aGlja25lc3Ms
IHBsYXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZSgpKTsKLSAgICB9KTsKLQotICAgIGZsdXNoKHBs
YXRmb3JtQ29udGV4dCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRyYXdXaXRoU2hhZG93SGVscGVyKElE
MkQxUmVuZGVyVGFyZ2V0KiBjb250ZXh0LCBJRDJEMUJpdG1hcFJlbmRlclRhcmdldCogYml0bWFw
VGFyZ2V0LCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nUmVjdCwgY29uc3QgQ29sb3ImIHNoYWRv
d0NvbG9yLCBjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNldCwgZmxvYXQgc2hhZG93Qmx1cikK
LXsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGN1cnJlbnRDYW52YXMgPSBEaXJlY3QyRDo6Y3Jl
YXRlQml0bWFwQ29weUZyb21Db250ZXh0KGJpdG1hcFRhcmdldCk7Ci0gICAgaWYgKCFjdXJyZW50
Q2FudmFzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0
PiBzaGFkb3dEZXZpY2VDb250ZXh0OwotICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBUYXJnZXQtPlF1
ZXJ5SW50ZXJmYWNlKCZzaGFkb3dEZXZpY2VDb250ZXh0KTsKLSAgICBSRUxFQVNFX0FTU0VSVChT
VUNDRUVERUQoaHIpKTsKLQotICAgIC8vIENyZWF0ZSB0aGUgc2hhZG93IGVmZmVjdAotICAgIENP
TVB0cjxJRDJEMUVmZmVjdD4gc2hhZG93RWZmZWN0OwotICAgIGhyID0gc2hhZG93RGV2aWNlQ29u
dGV4dC0+Q3JlYXRlRWZmZWN0KENMU0lEX0QyRDFTaGFkb3csICZzaGFkb3dFZmZlY3QpOwotICAg
IFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgc2hhZG93RWZmZWN0LT5TZXRJ
bnB1dCgwLCBjdXJyZW50Q2FudmFzLmdldCgpKTsKLSAgICBzaGFkb3dFZmZlY3QtPlNldFZhbHVl
KEQyRDFfU0hBRE9XX1BST1BfQ09MT1IsIHN0YXRpY19jYXN0PEQyRDFfVkVDVE9SXzRGPihzaGFk
b3dDb2xvcikpOwotCi0gICAgZmxvYXQgYmx1ckRldmlhdGlvbiA9IDAuNSAqIHNoYWRvd0JsdXI7
Ci0gICAgc2hhZG93RWZmZWN0LT5TZXRWYWx1ZShEMkQxX1NIQURPV19QUk9QX0JMVVJfU1RBTkRB
UkRfREVWSUFUSU9OLCBibHVyRGV2aWF0aW9uKTsKLQotICAgIENPTVB0cjxJRDJEMUVmZmVjdD4g
c2hhZG93VHJhbnNmb3JtRWZmZWN0OwotICAgIGhyID0gc2hhZG93RGV2aWNlQ29udGV4dC0+Q3Jl
YXRlRWZmZWN0KENMU0lEX0QyRDEyREFmZmluZVRyYW5zZm9ybSwgJnNoYWRvd1RyYW5zZm9ybUVm
ZmVjdCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBzaGFkb3dU
cmFuc2Zvcm1FZmZlY3QtPlNldElucHV0RWZmZWN0KDAsIHNoYWRvd0VmZmVjdC5nZXQoKSk7Ci0K
LSAgICAvLyBNdXN0IGZsaXAgdGhlIGF4aXMgZm9yIHRoZSBzaGFkb3cgb2Zmc2V0LCBzaW5jZSBE
aXJlY3QyRCdzIFkgYXhpcyBpcyBpbnZlcnRlZC4KLSAgICBhdXRvIHNoYWRvd1RyYW5zbGF0aW9u
ID0gRDJEMTo6TWF0cml4M3gyRjo6VHJhbnNsYXRpb24oc2hhZG93T2Zmc2V0LndpZHRoKCksIC1z
aGFkb3dPZmZzZXQuaGVpZ2h0KCkpOwotICAgIHNoYWRvd1RyYW5zZm9ybUVmZmVjdC0+U2V0VmFs
dWUoRDJEMV8yREFGRklORVRSQU5TRk9STV9QUk9QX1RSQU5TRk9STV9NQVRSSVgsIHNoYWRvd1Ry
YW5zbGF0aW9uKTsKLQotICAgIENPTVB0cjxJRDJEMUVmZmVjdD4gY29tcG9zaXRvcjsKLSAgICBo
ciA9IHNoYWRvd0RldmljZUNvbnRleHQtPkNyZWF0ZUVmZmVjdChDTFNJRF9EMkQxQ29tcG9zaXRl
LCAmY29tcG9zaXRvcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAg
ICBjb21wb3NpdG9yLT5TZXRJbnB1dEVmZmVjdCgwLCBzaGFkb3dUcmFuc2Zvcm1FZmZlY3QuZ2V0
KCkpOwotICAgIGNvbXBvc2l0b3ItPlNldElucHV0KDEsIGN1cnJlbnRDYW52YXMuZ2V0KCkpOwot
Ci0gICAgc2hhZG93RGV2aWNlQ29udGV4dC0+QmVnaW5EcmF3KCk7Ci0gICAgc2hhZG93RGV2aWNl
Q29udGV4dC0+Q2xlYXIoRDJEMTo6Q29sb3JGKDAsIDAsIDAsIDApKTsKLSAgICBzaGFkb3dEZXZp
Y2VDb250ZXh0LT5EcmF3SW1hZ2UoY29tcG9zaXRvci5nZXQoKSk7Ci0gICAgaHIgPSBzaGFkb3dE
ZXZpY2VDb250ZXh0LT5FbmREcmF3KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKLSAgICBociA9IGJpdG1hcFRh
cmdldC0+R2V0Qml0bWFwKCZiaXRtYXApOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgSW50U2l6ZSBwaXhlbFNpemUgPSBjb250ZXh0LT5HZXRQaXhlbFNpemUoKTsK
LSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNyb3BwZWQgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFw
KGJpdG1hcFRhcmdldCwgcGl4ZWxTaXplKTsKLSAgICBpZiAoIWNyb3BwZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8gc2NhbGVGYWN0b3IgPSBiaXRtYXBSZXNvbHV0aW9uKGNvbnRleHQp
OwotCi0gICAgRmxvYXRSZWN0IHNjYWxlZEJvdW5kaW5nUmVjdChib3VuZGluZ1JlY3QpOwotICAg
IHNjYWxlZEJvdW5kaW5nUmVjdC5zY2FsZShzY2FsZUZhY3Rvci53aWR0aCgpLCBzY2FsZUZhY3Rv
ci5oZWlnaHQoKSk7Ci0KLSAgICAvLyBUYWtlIHRoZSBtYWduaXR1ZGUgb2YgdGhlIG9mZnNldC4g
SWYgdGhlIG9yaWdpbiB3YXMgb3V0c2lkZSB0aGUgZHJhd2luZyBjb250ZXh0LCB3ZSBzdHJldGNo
ZWQgdG8gaW5jbHVkZSB0aG9zZSBwb2ludHMsCi0gICAgLy8gYW5kIHNvIHdlIG5lZWQgdG8gY3Jv
cCB0aGVtIG91dC4gSWYgdGhlIG9yaWdpbiB3YXMgaW5zaWRlLCB3ZSB3YW50IHRvIGhvbm9yIHRo
ZSBvZmZzZXQuCi0gICAgaW50IHggPSBjbGFtcFRvPGludD4oc3RkOjphYnMoc2NhbGVkQm91bmRp
bmdSZWN0LngoKSkpOwotICAgIGludCB5ID0gY2xhbXBUbzxpbnQ+KHN0ZDo6YWJzKHNjYWxlZEJv
dW5kaW5nUmVjdC55KCkpKTsKLSAgICBpbnQgd2lkdGggPSBjbGFtcFRvPGludD4oc2NhbGVkQm91
bmRpbmdSZWN0LndpZHRoKCkpOwotICAgIGludCBoZWlnaHQgPSBjbGFtcFRvPGludD4oc2NhbGVk
Qm91bmRpbmdSZWN0LmhlaWdodCgpKTsKLQotICAgIEludFJlY3Qgb3V0cHV0UmVjdChJbnRQb2lu
dCh4LCB5KSwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgSW50UmVjdCBkZXN0Q29udGV4
dFJlY3QoSW50UG9pbnQoKSwgcGl4ZWxTaXplKTsKLSAgICBpZiAob3V0cHV0UmVjdC5pbnRlcnNl
Y3RzKGRlc3RDb250ZXh0UmVjdCkpCi0gICAgICAgIG91dHB1dFJlY3QuaW50ZXJzZWN0KGRlc3RD
b250ZXh0UmVjdCk7Ci0KLSAgICBEMkQxX1JFQ1RfVSBjcm9wUmVjdCA9IG91dHB1dFJlY3Q7Ci0g
ICAgYXV0byB0YXJnZXRQb2ludCA9IEQyRDE6OlBvaW50MlUoKTsKLSAgICBjcm9wcGVkLT5Db3B5
RnJvbUJpdG1hcCgmdGFyZ2V0UG9pbnQsIGJpdG1hcC5nZXQoKSwgJmNyb3BSZWN0KTsKLQotICAg
IGNvbnRleHQtPkRyYXdCaXRtYXAoY3JvcHBlZC5nZXQoKSk7Ci19Ci0KLXZvaWQgZHJhd1dpdGhT
aGFkb3coUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgRmxvYXRSZWN0
IGJvdW5kaW5nUmVjdCwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlLCBGdW5jdGlvbjx2
b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+JiYgZHJhd0NvbW1hbmRzKQotewotICAgIGlmICghc2hh
ZG93U3RhdGUuaXNWaXNpYmxlKCkpIHsKLSAgICAgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZv
cm1Db250ZXh0LCBXVEZNb3ZlKGRyYXdDb21tYW5kcykpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgcGxhdGZvcm1Db250ZXh0Lm5vdGlmeVByZURyYXdPYnNlcnZlcigpOwotCi0gICAg
YXV0byogY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIEZs
b2F0U2l6ZSByZW5kZXJUYXJnZXRTaXplID0gY29udGV4dC0+R2V0U2l6ZSgpOwotICAgIGNvbnN0
IEZsb2F0UmVjdCBjb250ZXh0UmVjdChGbG9hdFBvaW50KCksIHJlbmRlclRhcmdldFNpemUpOwot
ICAgIEZsb2F0UmVjdCB3b3JraW5nQ29udGV4dFJlY3QoY29udGV4dFJlY3QpOwotCi0gICAgaWYg
KGJvdW5kaW5nUmVjdC5pc0luZmluaXRlKCkpCi0gICAgICAgIGJvdW5kaW5nUmVjdCA9IHdvcmtp
bmdDb250ZXh0UmVjdDsKLQotICAgIGlmICghY29udGV4dFJlY3QuY29udGFpbnMoYm91bmRpbmdS
ZWN0KSkKLSAgICAgICAgd29ya2luZ0NvbnRleHRSZWN0LnVuaXRlKGJvdW5kaW5nUmVjdCk7Ci0K
LSAgICB3b3JraW5nQ29udGV4dFJlY3QuZXhwYW5kKHN0ZDo6YWJzKHNoYWRvd1N0YXRlLm9mZnNl
dC53aWR0aCgpKSArIHNoYWRvd1N0YXRlLmJsdXIsIHN0ZDo6YWJzKHNoYWRvd1N0YXRlLm9mZnNl
dC5oZWlnaHQoKSkgKyBzaGFkb3dTdGF0ZS5ibHVyKTsKLQotICAgIGF1dG8gc2NhbGVGYWN0b3Ig
PSBiaXRtYXBSZXNvbHV0aW9uKGNvbnRleHQpOwotCi0gICAgd29ya2luZ0NvbnRleHRSZWN0LnNj
YWxlKHNjYWxlRmFjdG9yKTsKLQotICAgIEludFNpemUgcGl4ZWxEaW1lbnNpb25zKGNsYW1wVG88
aW50Pih3b3JraW5nQ29udGV4dFJlY3Qud2lkdGgoKSksIGNsYW1wVG88aW50Pih3b3JraW5nQ29u
dGV4dFJlY3QuaGVpZ2h0KCkpKTsKLQotICAgIC8vIFJlbmRlciB0aGUgY3VycmVudCBnZW9tZXRy
eSB0byBhIGJpdG1hcCBjb250ZXh0Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0
PiBiaXRtYXBUYXJnZXQgPSBjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUocGl4ZWxEaW1l
bnNpb25zLCBjb250ZXh0KTsKLQotICAgIEQyRDFfTUFUUklYXzNYMl9GIGN1cnJlbnRUcmFuc2Zv
cm07Ci0gICAgYml0bWFwVGFyZ2V0LT5HZXRUcmFuc2Zvcm0oJmN1cnJlbnRUcmFuc2Zvcm0pOwot
Ci0gICAgaWYgKCFjb250ZXh0UmVjdC5jb250YWlucyhib3VuZGluZ1JlY3QubG9jYXRpb24oKSkp
IHsKLSAgICAgICAgYXV0byB0cmFuc2xhdGlvbiA9IEQyRDE6Ok1hdHJpeDN4MkY6OlRyYW5zbGF0
aW9uKC1ib3VuZGluZ1JlY3QubG9jYXRpb24oKS54KCksIC1ib3VuZGluZ1JlY3QubG9jYXRpb24o
KS55KCkpOwotICAgICAgICBiaXRtYXBUYXJnZXQtPlNldFRyYW5zZm9ybSh0cmFuc2xhdGlvbiAq
IGN1cnJlbnRUcmFuc2Zvcm0pOwotICAgIH0KLQotICAgIGJpdG1hcFRhcmdldC0+QmVnaW5EcmF3
KCk7Ci0gICAgZHJhd0NvbW1hbmRzKGJpdG1hcFRhcmdldC5nZXQoKSk7Ci0gICAgSFJFU1VMVCBo
ciA9IGJpdG1hcFRhcmdldC0+RW5kRHJhdygpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURF
RChocikpOwotCi0gICAgYml0bWFwVGFyZ2V0LT5TZXRUcmFuc2Zvcm0oY3VycmVudFRyYW5zZm9y
bSk7Ci0KLSAgICBkcmF3V2l0aFNoYWRvd0hlbHBlcihjb250ZXh0LCBiaXRtYXBUYXJnZXQuZ2V0
KCksIGJvdW5kaW5nUmVjdCwgc2hhZG93U3RhdGUuY29sb3IsIHNoYWRvd1N0YXRlLm9mZnNldCwg
c2hhZG93U3RhdGUuYmx1cik7Ci0gICAgcGxhdGZvcm1Db250ZXh0Lm5vdGlmeVBvc3REcmF3T2Jz
ZXJ2ZXIoKTsKLX0KLQotdm9pZCBkcmF3V2l0aG91dFNoYWRvdyhQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYgcGxhdGZvcm1Db250ZXh0LCBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+
JiYgZHJhd0NvbW1hbmRzKQotewotICAgIHBsYXRmb3JtQ29udGV4dC5ub3RpZnlQcmVEcmF3T2Jz
ZXJ2ZXIoKTsKLSAgICBkcmF3Q29tbWFuZHMocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgp
KTsKLSAgICBwbGF0Zm9ybUNvbnRleHQubm90aWZ5UG9zdERyYXdPYnNlcnZlcigpOwotfQotCi12
b2lkIGNsZWFyUmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1D
b250ZXh0LCBbJnBsYXRmb3JtQ29udGV4dCwgcmVjdF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRl
clRhcmdldCkgewotICAgICAgICBGbG9hdFJlY3QgcmVuZGVyVGFyZ2V0UmVjdChGbG9hdFBvaW50
KCksIHJlbmRlclRhcmdldC0+R2V0U2l6ZSgpKTsKLQotICAgICAgICBEMkQxOjpNYXRyaXgzeDJG
IG1hdHJpeDsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5HZXRUcmFuc2Zvcm0oJm1hdHJpeCk7Ci0K
LSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybShtYXRyaXgpOwotCi0gICAgICAgIEZs
b2F0UmVjdCByZWN0VG9DbGVhcihyZWN0KTsKLSAgICAgICAgaWYgKCF0cmFuc2Zvcm0ucHJlc2Vy
dmVzQXhpc0FsaWdubWVudCgpKSB7Ci0gICAgICAgICAgICBDT01QdHI8SUQyRDFSZWN0YW5nbGVH
ZW9tZXRyeT4gcmVjdGFuZ2xlOwotICAgICAgICAgICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29u
dGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVSZWN0YW5nbGVHZW9tZXRyeShyZWN0VG9DbGVh
ciwgJnJlY3RhbmdsZSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldC0+RmlsbEdlb21ldHJ5KHJlY3RhbmdsZS5nZXQo
KSwgcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKEQyRDE6OkNvbG9yRigwLCAwLCAwLCAw
KSkuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVj
dFRvQ2xlYXIgPSB0cmFuc2Zvcm0ubWFwUmVjdChyZWN0VG9DbGVhcik7Ci0KLSAgICAgICAgaWYg
KHJlY3RUb0NsZWFyLmNvbnRhaW5zKHJlbmRlclRhcmdldFJlY3QpKSB7Ci0gICAgICAgICAgICBw
bGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgICAgICAgICByZW5kZXJU
YXJnZXQtPkNsZWFyKEQyRDE6OkNvbG9yRigwLCAwLCAwLCAwKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJ
TkVfXyk7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+UHVzaEF4aXNBbGlnbmVkQ2xpcChyZWN0VG9D
bGVhciwgRDJEMV9BTlRJQUxJQVNfTU9ERV9QRVJfUFJJTUlUSVZFKTsKLSAgICAgICAgcmVuZGVy
VGFyZ2V0LT5DbGVhcihEMkQxOjpDb2xvckYoMCwgMCwgMCwgMCkpOwotICAgICAgICByZW5kZXJU
YXJnZXQtPlBvcEF4aXNBbGlnbmVkQ2xpcCgpOwotICAgIH0pOwotfQotCi0KLXZvaWQgZHJhd0ds
eXBocyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGaWxs
U291cmNlJiBmaWxsU291cmNlLCBjb25zdCBTdHJva2VTb3VyY2UmIHN0cm9rZVNvdXJjZSwgY29u
c3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29u
c3QgRm9udCYgZm9udCwgZG91YmxlIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGNvbnN0IFZlY3Rvcjx1
bnNpZ25lZCBzaG9ydD4mIGdseXBocywgY29uc3QgVmVjdG9yPGZsb2F0PiYgaG9yaXpvbnRhbEFk
dmFuY2VzLCBjb25zdCBWZWN0b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4mIGdseXBoT2Zmc2V0cywg
ZmxvYXQgeE9mZnNldCwgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlLCBmbG9h
dCBzdHJva2VUaGlja25lc3MsIGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBjb25zdCBD
b2xvciYgc2hhZG93Q29sb3IpCi17Ci0gICAgYXV0byByZW5kZXJUYXJnZXQgPSBwbGF0Zm9ybUNv
bnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0gICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZv
cm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKLQotICAgIFBsYXRmb3JtQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcihwbGF0Zm9ybUNvbnRleHQpOwotCi0gICAgRDJEMV9NQVRSSVhfM1gy
X0YgbWF0cml4OwotICAgIHJlbmRlclRhcmdldC0+R2V0VHJhbnNmb3JtKCZtYXRyaXgpOwotCi0g
ICAgLyoKLSAgICAvLyBGSVhNRTogR2V0IFN5bnRoZXRpYyBPYmxpcXVlIHdvcmtpbmcKLSAgICBp
ZiAocGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSkgewotICAgICAgICBzdGF0aWMgZmxv
YXQgc2tldyA9IC10YW5mKHN5bnRoZXRpY09ibGlxdWVBbmdsZSgpICogcGlGbG9hdCAvIDE4MC4w
Zik7Ci0gICAgICAgIGF1dG8gc2tld01hdHJpeCA9IEQyRDE6Ok1hdHJpeDN4MkY6OlNrZXcoc2tl
dywgMCk7Ci0gICAgICAgIGNvbnRleHQtPlNldFRyYW5zZm9ybShtYXRyaXggKiBza2V3TWF0cml4
KTsKLSAgICB9Ci0gICAgKi8KLQotICAgIFJFTEVBU0VfQVNTRVJUKHBsYXRmb3JtRGF0YS5kd0Zv
bnQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKSk7Ci0K
LSAgICBEV1JJVEVfR0xZUEhfUlVOIGdseXBoUnVuOwotICAgIGdseXBoUnVuLmZvbnRGYWNlID0g
cGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKTsKLSAgICBnbHlwaFJ1bi5mb250RW1TaXplID0gcGxh
dGZvcm1EYXRhLnNpemUoKTsKLSAgICBnbHlwaFJ1bi5nbHlwaENvdW50ID0gZ2x5cGhzLnNpemUo
KTsKLSAgICBnbHlwaFJ1bi5nbHlwaEluZGljZXMgPSBnbHlwaHMuZGF0YSgpOwotICAgIGdseXBo
UnVuLmdseXBoQWR2YW5jZXMgPSBob3Jpem9udGFsQWR2YW5jZXMuZGF0YSgpOwotICAgIGdseXBo
UnVuLmdseXBoT2Zmc2V0cyA9IG51bGxwdHI7Ci0gICAgZ2x5cGhSdW4uaXNTaWRld2F5cyA9IHBs
YXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWw7Ci0g
ICAgZ2x5cGhSdW4uYmlkaUxldmVsID0gMDsKLQotICAgIC8qCi0gICAgLy8gRklYTUUoKTogR2V0
IFNoYWRvd3Mgd29ya2luZwotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQg
c2hhZG93Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBncmFwaGljc0NvbnRleHQu
Z2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOwotCi0gICAg
Ym9vbCBoYXNTaW1wbGVTaGFkb3cgPSBncmFwaGljc0NvbnRleHQudGV4dERyYXdpbmdNb2RlKCkg
PT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIHNoYWRvd0NvbG9yLmlzVmFsaWQoKSAmJiAhc2hh
ZG93Qmx1ciAmJiAoIWdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8
IGdyYXBoaWNzQ29udGV4dC5nZXRDVE0oKS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBl
ZCgpKTsKLSAgICBpZiAoaGFzU2ltcGxlU2hhZG93KSB7Ci0gICAgICAgIC8vIFBhaW50IHNpbXBs
ZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93cywgdG8g
YXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KLSAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LmNsZWFyU2hhZG93KCk7Ci0gICAgICAgIENvbG9yIGZpbGxDb2xvciA9IGdyYXBoaWNzQ29u
dGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gc2hhZG93
Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgp
KTsKLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQu
d2lkdGgoKTsKLSAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3Jtcywg
dGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93
biBpcyBuZWdhdGl2ZS4KLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBz
aGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zKCkgPyAtMSA6IDEpOwotCi0gICAgICAgIGF1dG8gc2hhZG93QnJ1c2ggPSBncmFwaGlj
c0NvbnRleHQuYnJ1c2hXaXRoQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKLSAgICAgICAgY29udGV4
dC0+RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50MkYoc2hhZG93VGV4dFgsIHNoYWRvd1RleHRZKSwg
JmdseXBoUnVuLCBzaGFkb3dCcnVzaCk7Ci0gICAgICAgIGlmIChmb250LnN5bnRoZXRpY0JvbGRP
ZmZzZXQoKSkKLSAgICAgICAgICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQxOjpQb2ludDJG
KHNoYWRvd1RleHRYICsgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHNoYWRvd1RleHRZKSwg
JmdseXBoUnVuLCBzaGFkb3dCcnVzaCk7Ci0gICAgfQotICAgICovCi0KLSAgICByZW5kZXJUYXJn
ZXQtPkRyYXdHbHlwaFJ1bihEMkQxOjpQb2ludDJGKHBvaW50LngoKSwgcG9pbnQueSgpKSwgJmds
eXBoUnVuLCBmaWxsU291cmNlLmJydXNoLmdldCgpKTsKLSAgICAvLyBpZiAoZm9udC5zeW50aGV0
aWNCb2xkT2Zmc2V0KCkpCi0gICAgLy8gICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQxOjpQ
b2ludDJGKHBvaW50LngoKSArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkp
LCAmZ2x5cGhSdW4sIGdyYXBoaWNzQ29udGV4dC5zb2xpZEZpbGxCcnVzaCgpKTsKLQotICAgIC8v
IGlmIChoYXNTaW1wbGVTaGFkb3cpCi0gICAgLy8gICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFk
b3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7Ci0KLSAgICBzdGF0ZVNh
dmVyLnJlc3RvcmUoKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQubm90aWZ5UG9zdERyYXdPYnNlcnZl
cigpOwotfQotCi0KLXZvaWQgZHJhd1BsYXRmb3JtSW1hZ2UoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmIHBsYXRmb3JtQ29udGV4dCwgSVdJQ0JpdG1hcCogaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYg
b3JpZ2luYWxJbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMsIGZsb2F0
IGdsb2JhbEFscGhhLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCi17Ci0gICAgYXV0
byBuYXRpdmVJbWFnZVNpemUgPSBiaXRtYXBTaXplKGltYWdlKTsKLSAgICBDT01QdHI8SUQyRDFC
aXRtYXA+IGRldmljZUJpdG1hcDsKLSAgICBIUkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0LnJl
bmRlclRhcmdldCgpLT5DcmVhdGVCaXRtYXBGcm9tV2ljQml0bWFwKGltYWdlLCAmZGV2aWNlQml0
bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1
dG8gaW1hZ2VTaXplID0gYml0bWFwU2l6ZShkZXZpY2VCaXRtYXAuZ2V0KCkpOwotICAgIGRyYXdQ
bGF0Zm9ybUltYWdlKHBsYXRmb3JtQ29udGV4dCwgZGV2aWNlQml0bWFwLmdldCgpLCBpbWFnZVNp
emUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zLCBnbG9iYWxBbHBoYSwgc2hhZG93U3RhdGUp
OwotfQotCi12b2lkIGRyYXdQbGF0Zm9ybUltYWdlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBw
bGF0Zm9ybUNvbnRleHQsIElEMkQxQml0bWFwKiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMsIGZsb2F0IGdsb2JhbEFscGhh
LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCi17Ci0gICAgYXV0byBiaXRtYXBTaXpl
ID0gaW1hZ2UtPkdldFNpemUoKTsKLQotICAgIGZsb2F0IGN1cnJIZWlnaHQgPSBvcHRpb25zLm9y
aWVudGF0aW9uKCkudXNlc1dpZHRoQXNIZWlnaHQoKSA/IGJpdG1hcFNpemUud2lkdGggOiBiaXRt
YXBTaXplLmhlaWdodDsKLSAgICBpZiAoY3VyckhlaWdodCA8PSBzcmNSZWN0LnkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRh
cmdldCgpOwotCi0gICAgRDJEMV9NQVRSSVhfM1gyX0YgY3RtOwotICAgIGNvbnRleHQtPkdldFRy
YW5zZm9ybSgmY3RtKTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0oY3RtKTsKLQot
ICAgIFBsYXRmb3JtQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwbGF0Zm9ybUNvbnRleHQp
OwotCi0gICAgYm9vbCBzaG91bGRVc2VTdWJpbWFnZSA9IGZhbHNlOwotCi0gICAgLy8gSWYgdGhl
IHNvdXJjZSByZWN0IGlzIGEgc3VicG9ydGlvbiBvZiB0aGUgaW1hZ2UsIHRoZW4gd2UgY29tcHV0
ZSBhbiBpbmZsYXRlZCBkZXN0aW5hdGlvbiByZWN0IHRoYXQgd2lsbCBob2xkIHRoZSBlbnRpcmUg
aW1hZ2UKLSAgICAvLyBhbmQgdGhlbiBzZXQgYSBjbGlwIHRvIHRoZSBwb3J0aW9uIHRoYXQgd2Ug
d2FudCB0byBkaXNwbGF5LgotICAgIEZsb2F0UmVjdCBhZGp1c3RlZERlc3RSZWN0ID0gZGVzdFJl
Y3Q7Ci0KLSAgICBpZiAoc3JjUmVjdC5zaXplKCkgIT0gaW1hZ2VTaXplKSB7Ci0gICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgaW1hZ2Ugc2NhbGluZwotICAgICAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIH0KLQotICAgIC8vIElmIHRoZSBpbWFnZSBpcyBvbmx5IHBhcnRpYWxseSBsb2FkZWQs
IHRoZW4gc2hyaW5rIHRoZSBkZXN0aW5hdGlvbiByZWN0IHRoYXQgd2UncmUgZHJhd2luZyBpbnRv
IGFjY29yZGluZ2x5LgotICAgIGlmICghc2hvdWxkVXNlU3ViaW1hZ2UgJiYgY3VyckhlaWdodCA8
IGltYWdlU2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQo
YWRqdXN0ZWREZXN0UmVjdC5oZWlnaHQoKSAqIGN1cnJIZWlnaHQgLyBpbWFnZVNpemUuaGVpZ2h0
KCkpOwotCi0gICAgU3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQs
IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7Ci0KLSAg
ICAvLyBJbWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAoMCwgMCku
Ci0gICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShhZGp1c3RlZERlc3RSZWN0LngoKSwgYWRqdXN0ZWRE
ZXN0UmVjdC55KCkpOwotICAgIGNvbnRleHQtPlNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwotICAg
IGFkanVzdGVkRGVzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKLQotICAgIGlmIChv
cHRpb25zLm9yaWVudGF0aW9uKCkgIT0gSW1hZ2VPcmllbnRhdGlvbjo6Tm9uZSkgewotICAgICAg
ICBjb25jYXRDVE0ocGxhdGZvcm1Db250ZXh0LCBvcHRpb25zLm9yaWVudGF0aW9uKCkudHJhbnNm
b3JtRnJvbURlZmF1bHQoYWRqdXN0ZWREZXN0UmVjdC5zaXplKCkpKTsKLSAgICAgICAgaWYgKG9w
dGlvbnMub3JpZW50YXRpb24oKS51c2VzV2lkdGhBc0hlaWdodCgpKSB7Ci0gICAgICAgICAgICAv
LyBUaGUgZGVzdGluYXRpb24gcmVjdCB3aWxsIGhhdmUgaXQncyB3aWR0aCBhbmQgaGVpZ2h0IGFs
cmVhZHkgcmV2ZXJzZWQgZm9yIHRoZSBvcmllbnRhdGlvbiBvZgotICAgICAgICAgICAgLy8gdGhl
IGltYWdlLCBhcyBpdCB3YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwgc28gd2UgbmVlZCB0byBy
ZXZlcnNlIGl0IGJhY2sgaGVyZS4KLSAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3QgPSBGbG9h
dFJlY3QoYWRqdXN0ZWREZXN0UmVjdC54KCksIGFkanVzdGVkRGVzdFJlY3QueSgpLCBhZGp1c3Rl
ZERlc3RSZWN0LmhlaWdodCgpLCBhZGp1c3RlZERlc3RSZWN0LndpZHRoKCkpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwotICAg
IGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgYWRqdXN0ZWREZXN0UmVjdCwgc2hhZG93
U3RhdGUsIFtpbWFnZSwgYWRqdXN0ZWREZXN0UmVjdCwgZ2xvYmFsQWxwaGEsIHNyY1JlY3RdKElE
MkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5E
cmF3Qml0bWFwKGltYWdlLCBhZGp1c3RlZERlc3RSZWN0LCBnbG9iYWxBbHBoYSwgRDJEMV9CSVRN
QVBfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUiwgc3JjUmVjdCk7Ci0gICAgfSk7Ci0KLSAgICBp
ZiAoIXN0YXRlU2F2ZXIuZGlkU2F2ZSgpKQotICAgICAgICBjb250ZXh0LT5TZXRUcmFuc2Zvcm0o
Y3RtKTsKLX0KLQotdm9pZCBkcmF3UGF0dGVybihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxh
dGZvcm1Db250ZXh0LCBDT01QdHI8SUQyRDFCaXRtYXA+JiYgdGlsZUltYWdlLCBjb25zdCBJbnRT
aXplJiBzaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQu
cmVuZGVyVGFyZ2V0KCk7Ci0gICAgUGxhdGZvcm1Db250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KHBsYXRmb3JtQ29udGV4dCk7Ci0KLSAgICBjbGlwKHBsYXRmb3JtQ29udGV4dCwgZGVzdFJlY3Qp
OwotCi0gICAgU3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQsIGNv
bXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpOwotCi0gICAgYXV0byBiaXRtYXBCcnVzaFByb3Bl
cnRpZXMgPSBEMkQxOjpCaXRtYXBCcnVzaFByb3BlcnRpZXMoKTsKLSAgICBiaXRtYXBCcnVzaFBy
b3BlcnRpZXMuZXh0ZW5kTW9kZVggPSBEMkQxX0VYVEVORF9NT0RFX1dSQVA7Ci0gICAgYml0bWFw
QnJ1c2hQcm9wZXJ0aWVzLmV4dGVuZE1vZGVZID0gRDJEMV9FWFRFTkRfTU9ERV9XUkFQOwotCi0g
ICAgLy8gQ3JlYXRlIGEgYnJ1c2ggdHJhbnNmb3JtYXRpb24gc28gd2UgcGFpbnQgdXNpbmcgdGhl
IHNlY3Rpb24gb2YgdGhlIGltYWdlIHdlIGNhcmUgYWJvdXQuCi0gICAgQWZmaW5lVHJhbnNmb3Jt
IHRyYW5zZm9ybWF0aW9uID0gcGF0dGVyblRyYW5zZm9ybTsKLSAgICB0cmFuc2Zvcm1hdGlvbi50
cmFuc2xhdGUoZGVzdFJlY3QubG9jYXRpb24oKSk7Ci0KLSAgICBhdXRvIGJydXNoUHJvcGVydGll
cyA9IEQyRDE6OkJydXNoUHJvcGVydGllcygpOwotICAgIGJydXNoUHJvcGVydGllcy50cmFuc2Zv
cm0gPSB0cmFuc2Zvcm1hdGlvbjsKLSAgICBicnVzaFByb3BlcnRpZXMub3BhY2l0eSA9IDEuMGY7
Ci0KLSAgICAvLyBJZiB3ZSBvbmx5IHdhbnQgYSBzdWJzZXQgb2YgdGhlIGJpdG1hcCwgd2UgbmVl
ZCB0byBjcmVhdGUgYSBjcm9wcGVkIGJpdG1hcCBpbWFnZS4gQWNjb3JkaW5nIHRvIHRoZSBkb2N1
bWVudGF0aW9uLAotICAgIC8vIHRoaXMgZG9lcyBub3QgYWxsb2NhdGUgbmV3IGJpdG1hcCBtZW1v
cnkuCi0gICAgaWYgKHNpemUud2lkdGgoKSA+IGRlc3RSZWN0LndpZHRoKCkgfHwgc2l6ZS5oZWln
aHQoKSA+IGRlc3RSZWN0LmhlaWdodCgpKSB7Ci0gICAgICAgIGZsb2F0IGRwaVggPSAwOwotICAg
ICAgICBmbG9hdCBkcGlZID0gMDsKLSAgICAgICAgdGlsZUltYWdlLT5HZXREcGkoJmRwaVgsICZk
cGlZKTsKLSAgICAgICAgYXV0byBiaXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVy
dGllcyh0aWxlSW1hZ2UtPkdldFBpeGVsRm9ybWF0KCksIGRwaVgsIGRwaVkpOwotICAgICAgICBD
T01QdHI8SUQyRDFCaXRtYXA+IHN1YkltYWdlOwotICAgICAgICBIUkVTVUxUIGhyID0gY29udGV4
dC0+Q3JlYXRlQml0bWFwKEludFNpemUodGlsZVJlY3Quc2l6ZSgpKSwgYml0bWFwUHJvcGVydGll
cywgJnN1YkltYWdlKTsKLSAgICAgICAgaWYgKFNVQ0NFRURFRChocikpIHsKLSAgICAgICAgICAg
IEQyRDFfUkVDVF9VIGZpbmlzaFJlY3QgPSBJbnRSZWN0KHRpbGVSZWN0KTsKLSAgICAgICAgICAg
IGhyID0gc3ViSW1hZ2UtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIHRpbGVJbWFnZS5nZXQoKSwg
JmZpbmlzaFJlY3QpOwotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCi0gICAgICAgICAg
ICAgICAgdGlsZUltYWdlID0gc3ViSW1hZ2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBDT01Q
dHI8SUQyRDFCaXRtYXBCcnVzaD4gcGF0dGVybkJydXNoOwotICAgIEhSRVNVTFQgaHIgPSBjb250
ZXh0LT5DcmVhdGVCaXRtYXBCcnVzaCh0aWxlSW1hZ2UuZ2V0KCksICZiaXRtYXBCcnVzaFByb3Bl
cnRpZXMsICZicnVzaFByb3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOwotICAgIEFTU0VSVChTVUND
RUVERUQoaHIpKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgW2Rlc3RSZWN0LCBwYXR0ZXJu
QnJ1c2hdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgY29uc3Qg
RDJEMV9SRUNUX0YgZDJkUmVjdCA9IGRlc3RSZWN0OwotICAgICAgICByZW5kZXJUYXJnZXQtPkZp
bGxSZWN0YW5nbGUoJmQyZFJlY3QsIHBhdHRlcm5CcnVzaC5nZXQoKSk7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgZHJhd1JlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MsIGNvbnN0IENvbG9y
JiBmaWxsQ29sb3IsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlLCBjb25zdCBDb2xvciYgc3Ryb2tl
Q29sb3IpCi17Ci0gICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaGFuZGxlIHBh
dHRlcm5zIGFuZCBncmFkaWVudHMgbGlrZSBkcmF3UGF0aCBkb2VzLCBpdCBwcm9iYWJseSBzaG91
bGQuCi0gICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQu
c2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250
ZXh0LCBbJnBsYXRmb3JtQ29udGV4dCwgcmVjdCwgZmlsbENvbG9yLCBzdHJva2VDb2xvciwgc3Ry
b2tlU3R5bGVdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgY29u
c3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7Ci0gICAgICAgIGF1dG8gZmlsbEJydXNoID0g
cGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKGZpbGxDb2xvcik7Ci0gICAgICAgIHJlbmRl
clRhcmdldC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgZmlsbEJydXNoLmdldCgpKTsKLSAgICAg
ICAgaWYgKHN0cm9rZVN0eWxlICE9IE5vU3Ryb2tlKSB7Ci0gICAgICAgICAgICBhdXRvIHN0cm9r
ZUJydXNoID0gcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKHN0cm9rZUNvbG9yKTsKLSAg
ICAgICAgICAgIHJlbmRlclRhcmdldC0+RHJhd1JlY3RhbmdsZSgmZDJkUmVjdCwgc3Ryb2tlQnJ1
c2guZ2V0KCksIHBsYXRmb3JtQ29udGV4dC5zdHJva2VUaGlja25lc3MoKSwgcGxhdGZvcm1Db250
ZXh0LnN0cm9rZVN0eWxlKCkpOwotICAgICAgICB9Ci0gICAgfSk7Ci19Ci0KLXZvaWQgZHJhd0xp
bmUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIFN0cm9rZVN0eWxlIHN0cm9r
ZVN0eWxlLCBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3IsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcywg
Ym9vbCBzaG91bGRBbnRpYWxpYXMpCi17Ci0gICAgYm9vbCBpc1ZlcnRpY2FsTGluZSA9IChwb2lu
dDEueCgpICsgc3Ryb2tlVGhpY2tuZXNzID09IHBvaW50Mi54KCkpOwotICAgIGZsb2F0IHN0cm9r
ZVdpZHRoID0gaXNWZXJ0aWNhbExpbmUgPyBwb2ludDIueSgpIC0gcG9pbnQxLnkoKSA6IHBvaW50
Mi54KCkgLSBwb2ludDEueCgpOwotICAgIGlmICghc3Ryb2tlVGhpY2tuZXNzIHx8ICFzdHJva2VX
aWR0aCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0LnJlbmRlclRhcmdldCgpOwotCi0gICAgZmxvYXQgY29ybmVyV2lkdGggPSAwOwotICAgIGJv
b2wgZHJhd3NEYXNoZWRMaW5lID0gc3Ryb2tlU3R5bGUgPT0gRG90dGVkU3Ryb2tlIHx8IHN0cm9r
ZVN0eWxlID09IERhc2hlZFN0cm9rZTsKLQotICAgIENPTVB0cjxJRDJEMVN0cm9rZVN0eWxlPiBk
MmRTdHJva2VTdHlsZTsKLSAgICBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
cGxhdGZvcm1Db250ZXh0LCBkcmF3c0Rhc2hlZExpbmUpOwotICAgIGlmIChkcmF3c0Rhc2hlZExp
bmUpIHsKLSAgICAgICAgLy8gRmlndXJlIG91dCBlbmQgcG9pbnRzIHRvIGVuc3VyZSB3ZSBhbHdh
eXMgcGFpbnQgY29ybmVycy4KLSAgICAgICAgY29ybmVyV2lkdGggPSBkYXNoZWRMaW5lQ29ybmVy
V2lkdGhGb3JTdHJva2VXaWR0aChzdHJva2VXaWR0aCwgc3Ryb2tlU3R5bGUsIHN0cm9rZVRoaWNr
bmVzcyk7Ci0gICAgICAgIHN0cm9rZVdpZHRoIC09IDIgKiBjb3JuZXJXaWR0aDsKLSAgICAgICAg
ZmxvYXQgcGF0dGVybldpZHRoID0gZGFzaGVkTGluZVBhdHRlcm5XaWR0aEZvclN0cm9rZVdpZHRo
KHN0cm9rZVdpZHRoLCBzdHJva2VTdHlsZSwgc3Ryb2tlVGhpY2tuZXNzKTsKLSAgICAgICAgLy8g
Q2hlY2sgaWYgY29ybmVyIGRyYXdpbmcgc3VmZmljaWVudGx5IGNvdmVycyB0aGUgbGluZS4KLSAg
ICAgICAgaWYgKHN0cm9rZVdpZHRoIDw9IHBhdHRlcm5XaWR0aCArIDEpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgZmxvYXQgcGF0dGVybk9mZnNldCA9IGRhc2hlZExpbmVQYXR0ZXJu
T2Zmc2V0Rm9yUGF0dGVybkFuZFN0cm9rZVdpZHRoKHBhdHRlcm5XaWR0aCwgc3Ryb2tlV2lkdGgp
OwotICAgICAgICBjb25zdCBmbG9hdCBkYXNoZXNbMl0gPSB7IHBhdHRlcm5XaWR0aCwgcGF0dGVy
bldpZHRoIH07Ci0gICAgICAgIGF1dG8gc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzID0gcGxhdGZvcm1D
b250ZXh0LnN0cm9rZVN0eWxlUHJvcGVydGllcygpOwotICAgICAgICBHcmFwaGljc0NvbnRleHQ6
OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlU3Ryb2tlU3R5bGUoJnN0cm9rZVN0eWxlUHJvcGVydGll
cywgZGFzaGVzLCBBUlJBWVNJWkUoZGFzaGVzKSwgJmQyZFN0cm9rZVN0eWxlKTsKLQotICAgICAg
ICBwbGF0Zm9ybUNvbnRleHQuc2V0UGF0dGVybldpZHRoKHBhdHRlcm5XaWR0aCk7Ci0gICAgICAg
IHBsYXRmb3JtQ29udGV4dC5zZXRQYXR0ZXJuT2Zmc2V0KHBhdHRlcm5PZmZzZXQpOwotICAgICAg
ICBwbGF0Zm9ybUNvbnRleHQuc2V0RGFzaGVzKERhc2hBcnJheSgyLCBwYXR0ZXJuV2lkdGgpKTsK
LQotICAgICAgICBkMmRTdHJva2VTdHlsZSA9IHBsYXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZSgp
OwotICAgIH0KLQotICAgIGF1dG8gY2VudGVyZWRQb2ludHMgPSBjZW50ZXJMaW5lQW5kQ3V0T2Zm
Q29ybmVycyhpc1ZlcnRpY2FsTGluZSwgY29ybmVyV2lkdGgsIHBvaW50MSwgcG9pbnQyKTsKLSAg
ICBhdXRvIHAxID0gY2VudGVyZWRQb2ludHNbMF07Ci0gICAgYXV0byBwMiA9IGNlbnRlcmVkUG9p
bnRzWzFdOwotCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwotCi0g
ICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBbJnBsYXRmb3JtQ29udGV4dCwg
cDEsIHAyLCBkMmRTdHJva2VTdHlsZSwgc3Ryb2tlQ29sb3IsIHN0cm9rZVRoaWNrbmVzc10oSUQy
RDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewotICAgICAgICByZW5kZXJUYXJnZXQtPkRy
YXdMaW5lKHAxLCBwMiwgcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKHN0cm9rZUNvbG9y
KS5nZXQoKSwgc3Ryb2tlVGhpY2tuZXNzLCBkMmRTdHJva2VTdHlsZS5nZXQoKSk7Ci0gICAgfSk7
Ci19Ci0KLXZvaWQgZHJhd0xpbmVzRm9yVGV4dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgY29u
c3QgQ29sb3ImKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVj
dCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgZmlsbEVsbGlwc2UoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZmlsbENvbG9yLCBTdHJv
a2VTdHlsZSBzdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yLCBmbG9hdCBzdHJv
a2VUaGlja25lc3MpCi17Ci0gICAgYXV0byBlbGxpcHNlID0gRDJEMTo6RWxsaXBzZShyZWN0LmNl
bnRlcigpLCAwLjUgKiByZWN0LndpZHRoKCksIDAuNSAqIHJlY3QuaGVpZ2h0KCkpOwotCi0gICAg
cGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwotICAgIGRyYXdXaXRob3V0U2hh
ZG93KHBsYXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9ybUNvbnRleHQsIGVsbGlwc2UsIGZpbGxDb2xv
ciwgc3Ryb2tlU3R5bGUsIHN0cm9rZUNvbG9yLCBzdHJva2VUaGlja25lc3NdKElEMkQxUmVuZGVy
VGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgYXV0byBmaWxsQnJ1c2ggPSBwbGF0Zm9y
bUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoZmlsbENvbG9yKTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0
LT5GaWxsRWxsaXBzZSgmZWxsaXBzZSwgZmlsbEJydXNoLmdldCgpKTsKLSAgICAgICAgaWYgKHN0
cm9rZVN0eWxlICE9IFN0cm9rZVN0eWxlOjpOb1N0cm9rZSkgewotICAgICAgICAgICAgYXV0byBz
dHJva2VCcnVzaCA9IHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihzdHJva2VDb2xvcik7
Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdFbGxpcHNlKCZlbGxpcHNlLCBzdHJva2VC
cnVzaC5nZXQoKSwgc3Ryb2tlVGhpY2tuZXNzLCBwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlU3R5bGUo
KSk7Ci0gICAgICAgIH0KLSAgICB9KTsKLX0KLQotdm9pZCBkcmF3RWxsaXBzZShQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFN0
cm9rZVN0eWxlIHN0cm9rZVN0eWxlLCBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3IsIGZsb2F0IHN0
cm9rZVRoaWNrbmVzcykKLXsKLSAgICBpZiAoc3Ryb2tlU3R5bGUgPT0gU3Ryb2tlU3R5bGU6Ok5v
U3Ryb2tlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGVsbGlwc2UgPSBEMkQxOjpFbGxp
cHNlKHJlY3QuY2VudGVyKCksIDAuNSAqIHJlY3Qud2lkdGgoKSwgMC41ICogcmVjdC5oZWlnaHQo
KSk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgZHJh
d1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBbJnBsYXRmb3JtQ29udGV4dCwgZWxsaXBz
ZSwgc3Ryb2tlQ29sb3IsIHN0cm9rZVRoaWNrbmVzc10oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRl
clRhcmdldCkgewotICAgICAgICBhdXRvIHN0cm9rZUJydXNoID0gcGxhdGZvcm1Db250ZXh0LmJy
dXNoV2l0aENvbG9yKHN0cm9rZUNvbG9yKTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3RWxs
aXBzZSgmZWxsaXBzZSwgc3Ryb2tlQnJ1c2guZ2V0KCksIHN0cm9rZVRoaWNrbmVzcywgcGxhdGZv
cm1Db250ZXh0LnN0cm9rZVN0eWxlKCkpOwotICAgIH0pOwotfQotCi12b2lkIGRyYXdGb2N1c1Jp
bmcoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBQYXRoJiwgZmxvYXQsIGNvbnN0IENv
bG9yJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIGRyYXdGb2N1c1Jpbmco
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0
LCBjb25zdCBDb2xvciYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBmbHVz
aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0KQotewotICAgIEFTU0VS
VChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIEQyRDFfVEFHIGZpcnN0LCBz
ZWNvbmQ7Ci0gICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+
Rmx1c2goJmZpcnN0LCAmc2Vjb25kKTsKLQotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotfQotCi12b2lkIHNhdmUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29u
dGV4dCkKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2F2ZSgpOwotCi0gICAgaWYgKGF1dG8qIGdy
YXBoaWNzQ29udGV4dFByaXZhdGUgPSBwbGF0Zm9ybUNvbnRleHQuZ3JhcGhpY3NDb250ZXh0UHJp
dmF0ZSgpKQotICAgICAgICBncmFwaGljc0NvbnRleHRQcml2YXRlLT5zYXZlKCk7Ci19Ci0KLXZv
aWQgcmVzdG9yZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0KQotewot
ICAgIHBsYXRmb3JtQ29udGV4dC5yZXN0b3JlKCk7Ci0KLSAgICBpZiAoYXV0byogZ3JhcGhpY3ND
b250ZXh0UHJpdmF0ZSA9IHBsYXRmb3JtQ29udGV4dC5ncmFwaGljc0NvbnRleHRQcml2YXRlKCkp
Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dFByaXZhdGUtPnJlc3RvcmUoKTsKLX0KLQotdm9pZCB0
cmFuc2xhdGUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgZmxvYXQg
eCwgZmxvYXQgeSkKLXsKLSAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgp
KTsKLQotICAgIEQyRDFfTUFUUklYXzNYMl9GIGN1cnJlbnRUcmFuc2Zvcm07Ci0gICAgcGxhdGZv
cm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5HZXRUcmFuc2Zvcm0oJmN1cnJlbnRUcmFuc2Zvcm0p
OwotCi0gICAgYXV0byB0cmFuc2xhdGlvbiA9IEQyRDE6Ok1hdHJpeDN4MkY6OlRyYW5zbGF0aW9u
KHgsIHkpOwotICAgIHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+U2V0VHJhbnNmb3Jt
KHRyYW5zbGF0aW9uICogY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBpZiAoYXV0byogZ3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZSA9IHBsYXRmb3JtQ29udGV4dC5ncmFwaGljc0NvbnRleHRQcml2YXRl
KCkpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dFByaXZhdGUtPnRyYW5zbGF0ZSh4LCB5KTsKLX0K
LQotdm9pZCByb3RhdGUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwg
ZmxvYXQgYW5nbGVJblJhZGlhbnMpCi17Ci0gICAgQVNTRVJUKHBsYXRmb3JtQ29udGV4dC5yZW5k
ZXJUYXJnZXQoKSk7Ci0KLSAgICBEMkQxX01BVFJJWF8zWDJfRiBjdXJyZW50VHJhbnNmb3JtOwot
ICAgIHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+R2V0VHJhbnNmb3JtKCZjdXJyZW50
VHJhbnNmb3JtKTsKLQotICAgIGF1dG8gcm90YXRpb24gPSBEMkQxOjpNYXRyaXgzeDJGOjpSb3Rh
dGlvbihyYWQyZGVnKGFuZ2xlSW5SYWRpYW5zKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJlbmRl
clRhcmdldCgpLT5TZXRUcmFuc2Zvcm0ocm90YXRpb24gKiBjdXJyZW50VHJhbnNmb3JtKTsKLQot
ICAgIGlmIChhdXRvKiBncmFwaGljc0NvbnRleHRQcml2YXRlID0gcGxhdGZvcm1Db250ZXh0Lmdy
YXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZS0+
cm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLX0KLQotdm9pZCBzY2FsZShQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAg
QVNTRVJUKHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0KLSAgICBEMkQxX01BVFJJ
WF8zWDJfRiBjdXJyZW50VHJhbnNmb3JtOwotICAgIHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJn
ZXQoKS0+R2V0VHJhbnNmb3JtKCZjdXJyZW50VHJhbnNmb3JtKTsKLQotICAgIGF1dG8gc2NhbGUg
PSBEMkQxOjpNYXRyaXgzeDJGOjpTY2FsZShzaXplKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQucmVu
ZGVyVGFyZ2V0KCktPlNldFRyYW5zZm9ybShzY2FsZSAqIGN1cnJlbnRUcmFuc2Zvcm0pOwotCi0g
ICAgaWYgKGF1dG8qIGdyYXBoaWNzQ29udGV4dFByaXZhdGUgPSBwbGF0Zm9ybUNvbnRleHQuZ3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICAgICBncmFwaGljc0NvbnRleHRQcml2YXRlLT5z
Y2FsZShzaXplKTsKLX0KLQotdm9pZCBjb25jYXRDVE0oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQm
IHBsYXRmb3JtQ29udGV4dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhZmZpbmVUcmFuc2Zvcm0p
Ci17Ci0gICAgQVNTRVJUKHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0KLSAgICBE
MkQxX01BVFJJWF8zWDJfRiBjdXJyZW50VHJhbnNmb3JtOwotICAgIHBsYXRmb3JtQ29udGV4dC5y
ZW5kZXJUYXJnZXQoKS0+R2V0VHJhbnNmb3JtKCZjdXJyZW50VHJhbnNmb3JtKTsKLQotICAgIEQy
RDFfTUFUUklYXzNYMl9GIHRyYW5zZm9ybVRvQ29uY2F0ID0gYWZmaW5lVHJhbnNmb3JtOwotICAg
IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+U2V0VHJhbnNmb3JtKHRyYW5zZm9ybVRv
Q29uY2F0ICogY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBpZiAoYXV0byogZ3JhcGhpY3NDb250
ZXh0UHJpdmF0ZSA9IHBsYXRmb3JtQ29udGV4dC5ncmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0g
ICAgICAgIGdyYXBoaWNzQ29udGV4dFByaXZhdGUtPmNvbmNhdENUTShhZmZpbmVUcmFuc2Zvcm0p
OwotfQotCi12b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmIHBsYXRmb3JtQ29udGV4dCwgZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRDo6VHJhbnNwYXJlbmN5TGF5ZXJTdGF0ZSB0cmFuc3BhcmVuY3lMYXllcjsKLSAg
ICB0cmFuc3BhcmVuY3lMYXllci5vcGFjaXR5ID0gb3BhY2l0eTsKLQotICAgIHRyYW5zcGFyZW5j
eUxheWVyLnJlbmRlclRhcmdldCA9IGNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldChwbGF0Zm9ybUNv
bnRleHQucmVuZGVyVGFyZ2V0KCkpOwotCi0gICAgcGxhdGZvcm1Db250ZXh0Lm1fdHJhbnNwYXJl
bmN5TGF5ZXJTdGFjay5hcHBlbmQoV1RGTW92ZSh0cmFuc3BhcmVuY3lMYXllcikpOwotCi0gICAg
cGxhdGZvcm1Db250ZXh0Lm1fdHJhbnNwYXJlbmN5TGF5ZXJTdGFjay5sYXN0KCkucmVuZGVyVGFy
Z2V0LT5CZWdpbkRyYXcoKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQubV90cmFuc3BhcmVuY3lMYXll
clN0YWNrLmxhc3QoKS5yZW5kZXJUYXJnZXQtPkNsZWFyKEQyRDE6OkNvbG9yRigwLCAwLCAwLCAw
KSk7Ci19Ci0KLXZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmIHBsYXRmb3JtQ29udGV4dCkKLXsKLSAgICBhdXRvIGN1cnJlbnRMYXllciA9IHBsYXRmb3Jt
Q29udGV4dC5tX3RyYW5zcGFyZW5jeUxheWVyU3RhY2sudGFrZUxhc3QoKTsKLSAgICBhdXRvIHJl
bmRlclRhcmdldCA9IGN1cnJlbnRMYXllci5yZW5kZXJUYXJnZXQ7Ci0gICAgaWYgKCFyZW5kZXJU
YXJnZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhSRVNVTFQgaHIgPSByZW5kZXJUYXJnZXQt
PkVuZERyYXcoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGF1
dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQotICAgIGlmIChj
dXJyZW50TGF5ZXIuaGFzU2hhZG93KQotICAgICAgICBkcmF3V2l0aFNoYWRvd0hlbHBlcihjb250
ZXh0LCByZW5kZXJUYXJnZXQuZ2V0KCksIEZsb2F0UmVjdCgpLCBjdXJyZW50TGF5ZXIuc2hhZG93
Q29sb3IsIGN1cnJlbnRMYXllci5zaGFkb3dPZmZzZXQsIGN1cnJlbnRMYXllci5zaGFkb3dCbHVy
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7Ci0gICAg
ICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5HZXRCaXRtYXAoJmJpdG1hcCk7Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcEJy
dXNoPiBiaXRtYXBCcnVzaDsKLSAgICAgICAgYXV0byBiaXRtYXBCcnVzaFByb3BlcnRpZXMgPSBE
MkQxOjpCaXRtYXBCcnVzaFByb3BlcnRpZXMoKTsKLSAgICAgICAgYXV0byBicnVzaFByb3BlcnRp
ZXMgPSBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKTsKLSAgICAgICAgSFJFU1VMVCBociA9IGNvbnRl
eHQtPkNyZWF0ZUJpdG1hcEJydXNoKGJpdG1hcC5nZXQoKSwgYml0bWFwQnJ1c2hQcm9wZXJ0aWVz
LCBicnVzaFByb3BlcnRpZXMsICZiaXRtYXBCcnVzaCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotCi0gICAgICAgIGF1dG8gc2l6ZSA9IGJpdG1hcC0+R2V0U2l6ZSgp
OwotICAgICAgICBhdXRvIHJlY3RJbkRJUCA9IEQyRDE6OlJlY3RGKDAsIDAsIHNpemUud2lkdGgs
IHNpemUuaGVpZ2h0KTsKLSAgICAgICAgY29udGV4dC0+RmlsbFJlY3RhbmdsZShyZWN0SW5ESVAs
IGJpdG1hcEJydXNoLmdldCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgY2xpcChQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0g
ICAgcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5QdXNoQXhpc0FsaWduZWRDbGlwKHJl
Y3QsIEQyRDFfQU5USUFMSUFTX01PREVfUEVSX1BSSU1JVElWRSk7Ci0gICAgcGxhdGZvcm1Db250
ZXh0LnB1c2hDbGlwKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpBeGlzQWxpZ25lZENsaXApOwot
Ci0gICAgaWYgKGF1dG8qIGdyYXBoaWNzQ29udGV4dFByaXZhdGUgPSBwbGF0Zm9ybUNvbnRleHQu
Z3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICAgICBncmFwaGljc0NvbnRleHRQcml2YXRl
LT5jbGlwKHJlY3QpOwotfQotCi12b2lkIGNsaXBPdXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQm
IHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIFBhdGggcGF0
aDsKLSAgICBwYXRoLmFkZFJlY3QocmVjdCk7Ci0KLSAgICBjbGlwT3V0KHBsYXRmb3JtQ29udGV4
dCwgcGF0aCk7Ci19Ci0KLXZvaWQgY2xpcE91dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxh
dGZvcm1Db250ZXh0LCBjb25zdCBQYXRoJiBwYXRoKQotewotICAgIC8vIFRvIGNsaXAgT3V0IHdl
IG5lZWQgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgaW5maW5pdGUKLSAgICAvLyBjbGlwcGluZyBy
ZWN0IGFuZCB0aGUgcGF0aCB3ZSBqdXN0IGNyZWF0ZWQuCi0gICAgRDJEMV9TSVpFX0YgcmVuZGVy
ZXJTaXplID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpLT5HZXRTaXplKCk7Ci0gICAg
RmxvYXRSZWN0IGNsaXBCb3VuZHMoMCwgMCwgcmVuZGVyZXJTaXplLndpZHRoLCByZW5kZXJlclNp
emUuaGVpZ2h0KTsKLQotICAgIFBhdGggYm91bmRpbmdSZWN0OwotICAgIGJvdW5kaW5nUmVjdC5h
ZGRSZWN0KGNsaXBCb3VuZHMpOwotICAgIGJvdW5kaW5nUmVjdC5hcHBlbmRHZW9tZXRyeShwYXRo
LnBsYXRmb3JtUGF0aCgpKTsKLQotICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+IHBhdGhU
b0NsaXA7Ci0gICAgYm91bmRpbmdSZWN0LmNyZWF0ZUdlb21ldHJ5V2l0aEZpbGxNb2RlKFdpbmRS
dWxlOjpFdmVuT2RkLCBwYXRoVG9DbGlwKTsKLSAgICBjbGlwUGF0aChwbGF0Zm9ybUNvbnRleHQs
IHBhdGhUb0NsaXAuZ2V0KCkpOwotfQotCi12b2lkIGNsaXBQYXRoKFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBS
dWxlKQotewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkgewotICAgICAgICBEaXJlY3QyRDo6Y2xp
cChwbGF0Zm9ybUNvbnRleHQsIEZsb2F0UmVjdCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+IHBhdGhUb0NsaXA7Ci0gICAgcGF0aC5j
cmVhdGVHZW9tZXRyeVdpdGhGaWxsTW9kZShjbGlwUnVsZSwgcGF0aFRvQ2xpcCk7Ci0KLSAgICBj
bGlwUGF0aChwbGF0Zm9ybUNvbnRleHQsIHBhdGhUb0NsaXAuZ2V0KCkpOwotCi0gICAgaWYgKGF1
dG8qIGdyYXBoaWNzQ29udGV4dFByaXZhdGUgPSBwbGF0Zm9ybUNvbnRleHQuZ3JhcGhpY3NDb250
ZXh0UHJpdmF0ZSgpKQotICAgICAgICBncmFwaGljc0NvbnRleHRQcml2YXRlLT5jbGlwKHBhdGgp
OwotfQotCi12b2lkIGNsaXBQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNv
bnRleHQsIElEMkQxR2VvbWV0cnkqIHBhdGgpCi17Ci0gICAgQ09NUHRyPElEMkQxTGF5ZXI+IGNs
aXBMYXllcjsKLSAgICBIUkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgp
LT5DcmVhdGVMYXllcigmY2xpcExheWVyKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+UHVzaExh
eWVyKEQyRDE6OkxheWVyUGFyYW1ldGVycyhEMkQxOjpJbmZpbml0ZVJlY3QoKSwgcGF0aCksIGNs
aXBMYXllci5nZXQoKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnB1c2hSZW5kZXJDbGlwKFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEOjpMYXllckNsaXApOwotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRB
Y3RpdmVMYXllcihXVEZNb3ZlKGNsaXBMYXllcikpOwotfQotCi12b2lkIGNsaXBUb0ltYWdlQnVm
ZmVyKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgSUQyRDFSZW5kZXJUYXJnZXQqLCBjb25zdCBG
bG9hdFJlY3QmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLQotdm9pZCBjb3B5Qml0
cyhjb25zdCB1aW50OF90KiBzcmNSb3dzLCB1bnNpZ25lZCByb3dDb3VudCwgdW5zaWduZWQgY29s
Q291bnQsIHVuc2lnbmVkIHNyY1N0cmlkZSwgdW5zaWduZWQgZGVzdFN0cmlkZSwgdWludDhfdCog
ZGVzdFJvd3MpCi17Ci0gICAgZm9yICh1bnNpZ25lZCB5ID0gMDsgeSA8IHJvd0NvdW50OyArK3kp
IHsKLSAgICAgICAgLy8gU291cmNlIGRhdGEgbWF5IGJlIHBvd2VyLW9mLXR3byBzaXplZCwgc28g
d2UgbmVlZCB0byBvbmx5IGNvcHkgdGhlIGJpdHMgdGhhdAotICAgICAgICAvLyBjb3JyZXNwb25k
IHRvIHRoZSByZWN0YW5nbGUgc3VwcGxpZWQgYnkgdGhlIGNhbGxlci4KLSAgICAgICAgY29uc3Qg
dWludDMyX3QqIHNyY1JvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNS
b3dzICsgc3JjU3RyaWRlICogeSk7Ci0gICAgICAgIHVpbnQzMl90KiBkZXN0Um93ID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgZGVzdFN0cmlkZSAqIHkpOwotICAgICAg
ICBtZW1jcHkoZGVzdFJvdywgc3JjUm93LCBjb2xDb3VudCk7Ci0gICAgfQotfQotCi19IC8vIG5h
bWVzcGFjZSBEaXJlY3QyRAotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBV
U0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
RGlyZWN0MkRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyODc4MTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25z
LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNi0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykg
MjAwOCBOdWFudGkgTHRkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEJyZW50IEZ1bGdoYW0gPGJm
dWxnaGFtQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMu
TC4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiwgSW50ZWwgQ29ycG9yYXRp
b24KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJEYXNoQXJyYXkuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDxkMmQx
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwotY2xh
c3MgQ29sb3I7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBGbG9hdFJvdW5kZWRSZWN0OwotY2xh
c3MgRmxvYXRTaXplOwotY2xhc3MgUGF0aDsKLQotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
OwotCi1uYW1lc3BhY2UgRGlyZWN0MkQgewotCi1uYW1lc3BhY2UgU3RhdGUgewotCi12b2lkIHNl
dFN0cm9rZVRoaWNrbmVzcyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGZsb2F0KTsKLXZvaWQg
c2V0U3Ryb2tlU3R5bGUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBTdHJva2VTdHlsZSk7Ci0K
LXZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgQ29t
cG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSk7Ci12b2lkIHNldFNob3VsZEFudGlhbGlhcyhQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYsIGJvb2wpOwotCi12b2lkIHNldENUTShQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotQWZmaW5lVHJhbnNmb3JtIGdl
dENUTShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotCi1JbnRSZWN0IGdldENsaXBCb3VuZHMo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKTsKLUZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxz
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0KLWJvb2wgaXNB
Y2NlbGVyYXRlZENvbnRleHQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKTsKLQotfSAvLyBuYW1l
c3BhY2UgU3RhdGUKLQotc3RydWN0IEZpbGxTb3VyY2UgewotICAgIEZpbGxTb3VyY2UoKSA9IGRl
ZmF1bHQ7Ci0gICAgZXhwbGljaXQgRmlsbFNvdXJjZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwotCi0gICAgZmxvYXQgZ2xvYmFsQWxwaGEgeyAw
IH07Ci0gICAgQ09NUHRyPElEMkQxQnJ1c2g+IGJydXNoOwotICAgIENvbG9yIGNvbG9yOwotCi0g
ICAgV2luZFJ1bGUgZmlsbFJ1bGUgeyBXaW5kUnVsZTo6Tm9uWmVybyB9OwotfTsKLQotc3RydWN0
IFN0cm9rZVNvdXJjZSB7Ci0gICAgU3Ryb2tlU291cmNlKCkgPSBkZWZhdWx0OwotICAgIGV4cGxp
Y2l0IFN0cm9rZVNvdXJjZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpOwotCi0gICAgZmxvYXQgZ2xvYmFsQWxwaGEgeyAwIH07Ci0gICAgZmxvYXQg
dGhpY2tuZXNzIHsgMCB9OwotICAgIENPTVB0cjxJRDJEMUJydXNoPiBicnVzaDsKLSAgICBDb2xv
ciBjb2xvcjsKLX07Ci0KLXN0cnVjdCBTaGFkb3dTdGF0ZSB7Ci0gICAgU2hhZG93U3RhdGUoKSA9
IGRlZmF1bHQ7Ci0gICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgU2hhZG93U3RhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLQotICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Q7Ci0g
ICAgYm9vbCBpc1JlcXVpcmVkKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJikgY29uc3Q7Ci0KLSAg
ICBGbG9hdFNpemUgb2Zmc2V0OwotICAgIGZsb2F0IGJsdXIgeyAwIH07Ci0gICAgQ29sb3IgY29s
b3I7Ci0gICAgYm9vbCBpZ25vcmVUcmFuc2Zvcm1zIHsgZmFsc2UgfTsKLQotICAgIGZsb2F0IGds
b2JhbEFscGhhIHsgMS4wIH07Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgZ2xvYmFsQ29tcG9zaXRl
T3BlcmF0b3IgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciB9OwotfTsKLQotdm9pZCBz
ZXRMaW5lQ2FwKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgTGluZUNhcCk7Ci12b2lkIHNldExp
bmVEYXNoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRGFzaEFycmF5JiwgZmxvYXQp
Owotdm9pZCBzZXRMaW5lSm9pbihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIExpbmVKb2luKTsK
LXZvaWQgc2V0TWl0ZXJMaW1pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGZsb2F0KTsKLQot
dm9pZCBmaWxsUmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZpbGxTb3VyY2UmLCBjb25zdCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBmaWxsUmVjdChQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwg
Y29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQgZmlsbFJlY3RXaXRoR3JhZGllbnQoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmLCBJRDJEMUJydXNoKik7Ci12b2lkIGZp
bGxSb3VuZGVkUmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmLCBjb25zdCBDb2xvciYsIGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIGZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IEZpbGxTb3VyY2UmLCBjb25zdCBTaGFk
b3dTdGF0ZSYpOwotdm9pZCBmaWxsUGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0
IFBhdGgmLCBjb25zdCBGaWxsU291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQgZmls
bFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBQYXRoJiwgY29uc3QgQ29sb3Im
LCBjb25zdCBTaGFkb3dTdGF0ZSYpOwotCi12b2lkIHN0cm9rZVJlY3QoUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwgY29uc3QgU3Ryb2tlU291cmNlJiwg
Y29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQgc3Ryb2tlUGF0aChQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYsIGNvbnN0IFBhdGgmLCBjb25zdCBTdHJva2VTb3VyY2UmLCBjb25zdCBTaGFkb3dTdGF0
ZSYpOwotdm9pZCBjbGVhclJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9h
dFJlY3QmKTsKLQotdm9pZCBkcmF3R2x5cGhzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29u
c3QgRmlsbFNvdXJjZSYsIGNvbnN0IFN0cm9rZVNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJiwg
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZvbnQmLCBkb3VibGUsIGNvbnN0IFZlY3Rvcjx1bnNp
Z25lZCBzaG9ydD4mIGdseXBocywgY29uc3QgVmVjdG9yPGZsb2F0PiYgaG9yaXpvbnRhbEFkdmFu
Y2VzLCBjb25zdCBWZWN0b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4mLCBmbG9hdCwgVGV4dERyYXdp
bmdNb2RlRmxhZ3MsIGZsb2F0LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBDb2xvciYpOwotCi12
b2lkIGRyYXdQbGF0Zm9ybUltYWdlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgSVdJQ0JpdG1h
cCosIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYsIGZsb2F0LCBjb25zdCBTaGFk
b3dTdGF0ZSYpOwotdm9pZCBkcmF3UGxhdGZvcm1JbWFnZShQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYsIElEMkQxQml0bWFwKiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiwgZmxv
YXQsIGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIGRyYXdQYXRoKFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiwgY29uc3QgUGF0aCYsIGNvbnN0IFN0cm9rZVNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0
YXRlJik7Ci12b2lkIGRyYXdQYXR0ZXJuKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgQ09NUHRy
PElEMkQxQml0bWFwPiYmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIENv
bXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOwotCi12b2lkIGRyYXdXaXRob3V0U2hhZG93KFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiwgRnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCop
PiYmIGRyYXdDb21tYW5kcyk7Ci12b2lkIGRyYXdXaXRoU2hhZG93KFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiwgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCwgY29uc3QgU2hhZG93U3RhdGUmLCBGdW5j
dGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+JiYgZHJhd0NvbW1hbmRzKTsKLQotdm9pZCBk
cmF3UmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
LCBjb25zdCBDb2xvciYsIFN0cm9rZVN0eWxlLCBjb25zdCBDb2xvciYpOwotdm9pZCBkcmF3TGlu
ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50JiwgU3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGJvb2wpOwotdm9pZCBk
cmF3TGluZXNGb3JUZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRQb2lu
dCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgY29uc3Qg
Q29sb3ImKTsKLXZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKTsKLXZv
aWQgZHJhd0VsbGlwc2UoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3Qm
LCBTdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImLCBmbG9hdCk7Ci12b2lkIGZpbGxFbGxpcHNlKFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBT
dHJva2VTdHlsZSwgY29uc3QgQ29sb3ImLCBmbG9hdCk7Ci0KLXZvaWQgZHJhd0ZvY3VzUmluZyhQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IFBhdGgmLCBmbG9hdCwgY29uc3QgQ29sb3Im
KTsKLXZvaWQgZHJhd0ZvY3VzUmluZyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IFZl
Y3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGNvbnN0IENvbG9yJik7Ci0KLXZvaWQgZmx1c2goUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmKTsKLXZvaWQgc2F2ZShQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYpOwotdm9pZCByZXN0b3JlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci0KLXZvaWQgdHJh
bnNsYXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgZmxvYXQsIGZsb2F0KTsKLXZvaWQgcm90
YXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgZmxvYXQpOwotdm9pZCBzY2FsZShQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0U2l6ZSYpOwotdm9pZCBjb25jYXRDVE0oUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLQotdm9pZCBi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgZmxvYXQpOwot
dm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotCi12
b2lkIGNsaXAoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmKTsKLQot
dm9pZCBjbGlwT3V0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0Jik7
Ci12b2lkIGNsaXBPdXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBQYXRoJik7Ci12
b2lkIGNsaXBQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgUGF0aCYsIFdpbmRS
dWxlKTsKLXZvaWQgY2xpcFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBJRDJEMUdlb21l
dHJ5KiBwYXRoKTsKLQotdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYsIElEMkQxUmVuZGVyVGFyZ2V0KiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0KLX0gLy8gbmFt
ZXNwYWNlIERpcmVjdDJECi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0Uo
RElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGly
ZWN0MkRVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5j
cHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw1MTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEwIElnYWxpYSBTLkwuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUHJvRlVTSU9OIGVtYmVkZGVk
IHN5c3RlbXMKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVzLmgiCi0KLSNpZiBV
U0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50
LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKLSNpbmNsdWRlICJJbnRSZWN0Lmgi
Ci0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgPGQyZDFfMS5oPgotI2luY2x1ZGUgPGQz
ZDExXzEuaD4KLSNpbmNsdWRlIDxzaGx3YXBpLmg+Ci0jaW5jbHVkZSA8d2luY29kZWMuaD4KLQot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSBEaXJlY3QyRCB7Ci0KLWNvbnN0ZXhw
ciBEWEdJX0ZPUk1BVCB3ZWJraXRUZXh0dXJlRm9ybWF0ID0gRFhHSV9GT1JNQVRfQjhHOFI4QThf
VU5PUk07Ci1jb25zdGV4cHIgRDJEMV9BTFBIQV9NT0RFIHdlYmtpdEFscGhhTW9kZSA9IEQyRDFf
QUxQSEFfTU9ERV9QUkVNVUxUSVBMSUVEOwotCi1JbnRTaXplIGJpdG1hcFNpemUoSVdJQ0JpdG1h
cFNvdXJjZSogYml0bWFwU291cmNlKQotewotICAgIFVJTlQgd2lkdGgsIGhlaWdodDsKLSAgICBI
UkVTVUxUIGhyID0gYml0bWFwU291cmNlLT5HZXRTaXplKCZ3aWR0aCwgJmhlaWdodCk7Ci0gICAg
aWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgcmV0dXJuIElu
dFNpemUod2lkdGgsIGhlaWdodCk7Ci19Ci0KLUZsb2F0U2l6ZSBiaXRtYXBTaXplKElEMkQxQml0
bWFwKiBiaXRtYXBTb3VyY2UpCi17Ci0gICAgcmV0dXJuIGJpdG1hcFNvdXJjZS0+R2V0U2l6ZSgp
OwotfQotCi1GbG9hdFNpemUgYml0bWFwUmVzb2x1dGlvbihJV0lDQml0bWFwU291cmNlKiBiaXRt
YXBTb3VyY2UpCi17Ci0gICAgY29uc3RleHByIGRvdWJsZSBkcGlCYXNlID0gOTY7Ci0KLSAgICBk
b3VibGUgZHBpWCwgZHBpWTsKLSAgICBIUkVTVUxUIGhyID0gYml0bWFwU291cmNlLT5HZXRSZXNv
bHV0aW9uKCZkcGlYLCAmZHBpWSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICBy
ZXR1cm4geyB9OwotCi0gICAgRmxvYXRTaXplIHJlc3VsdChkcGlYLCBkcGlZKTsKLSAgICByZXN1
bHQuc2NhbGUoMS4wIC8gZHBpQmFzZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotRmxvYXRT
aXplIGJpdG1hcFJlc29sdXRpb24oSUQyRDFCaXRtYXAqIGJpdG1hcCkKLXsKLSAgICBjb25zdGV4
cHIgZG91YmxlIGRwaUJhc2UgPSA5NjsKLQotICAgIGZsb2F0IGRwaVgsIGRwaVk7Ci0gICAgYml0
bWFwLT5HZXREcGkoJmRwaVgsICZkcGlZKTsKLQotICAgIEZsb2F0U2l6ZSByZXN1bHQoZHBpWCwg
ZHBpWSk7Ci0gICAgcmVzdWx0LnNjYWxlKDEuMCAvIGRwaUJhc2UpOwotICAgIHJldHVybiByZXN1
bHQ7Ci0KLX0KLQotRmxvYXRTaXplIGJpdG1hcFJlc29sdXRpb24oSUQyRDFSZW5kZXJUYXJnZXQq
IHRhcmdldCkKLXsKLSAgICBjb25zdGV4cHIgZG91YmxlIGRwaUJhc2UgPSA5NjsKLQotICAgIGZs
b2F0IGRwaVgsIGRwaVk7Ci0gICAgdGFyZ2V0LT5HZXREcGkoJmRwaVgsICZkcGlZKTsKLQotICAg
IEZsb2F0U2l6ZSByZXN1bHQoZHBpWCwgZHBpWSk7Ci0gICAgcmVzdWx0LnNjYWxlKDEuMCAvIGRw
aUJhc2UpOwotICAgIHJldHVybiByZXN1bHQ7Ci0KLX0KLXVuc2lnbmVkIGJpdHNQZXJQaXhlbChH
VUlEIGJpdG1hcEZvcm1hdCkKLXsKLSAgICBDT01QdHI8SVdJQ0NvbXBvbmVudEluZm8+IGNvbXBv
bmVudEluZm87Ci0gICAgSFJFU1VMVCBociA9IEltYWdlRGVjb2RlckRpcmVjdDJEOjpzeXN0ZW1J
bWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVDb21wb25lbnRJbmZvKGJpdG1hcEZvcm1hdCwgJmNvbXBv
bmVudEluZm8pOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIDQ7Ci0K
LSAgICBDT01QdHI8SVdJQ1BpeGVsRm9ybWF0SW5mbz4gcGl4ZWxGb3JtYXQ7Ci0gICAgcGl4ZWxG
b3JtYXQucXVlcnkoY29tcG9uZW50SW5mbyk7Ci0gICAgaWYgKCFwaXhlbEZvcm1hdCkKLSAgICAg
ICAgcmV0dXJuIDQ7Ci0KLSAgICBVSU5UIGJwcCA9IDA7Ci0gICAgaHIgPSBwaXhlbEZvcm1hdC0+
R2V0Qml0c1BlclBpeGVsKCZicHApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAg
cmV0dXJuIDQ7Ci0KLSAgICByZXR1cm4gYnBwOwotfQotCi1DT01QdHI8SVdJQ0JpdG1hcD4gY3Jl
YXRlRGlyZWN0MkRJbWFnZVN1cmZhY2VXaXRoRGF0YSh2b2lkKiBkYXRhLCBjb25zdCBJbnRTaXpl
JiBzaXplLCB1bnNpZ25lZCBzdHJpZGUpCi17Ci0gICAgQ2hlY2tlZFNpemUgbnVtQnl0ZXMgPSBD
aGVja2VkVWludDMyKHNpemUuaGVpZ2h0KCkpICogc3RyaWRlOwotICAgIGlmIChudW1CeXRlcy5o
YXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ09NUHRyPElX
SUNCaXRtYXA+IHN1cmZhY2U7Ci0gICAgSFJFU1VMVCBociA9IEltYWdlRGVjb2RlckRpcmVjdDJE
OjpzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVCaXRtYXBGcm9tTWVtb3J5KHNpemUud2lk
dGgoKSwgc2l6ZS5oZWlnaHQoKSwgd2ljQml0bWFwRm9ybWF0KCksIHN0cmlkZSwgc3RhdGljX2Nh
c3Q8VUlOVD4obnVtQnl0ZXMudmFsdWUoKSksIHJlaW50ZXJwcmV0X2Nhc3Q8QllURSo+KGRhdGEp
LCAmc3VyZmFjZSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIHJldHVybiBzdXJmYWNlOwotfQotCi1DT01QdHI8SVdJQ0JpdG1hcD4gY3Jl
YXRlV2ljQml0bWFwKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgQ09NUHRyPElXSUNCaXRt
YXA+IHN1cmZhY2U7Ci0gICAgSFJFU1VMVCBociA9IEltYWdlRGVjb2RlckRpcmVjdDJEOjpzeXN0
ZW1JbWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVCaXRtYXAoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpLCB3aWNCaXRtYXBGb3JtYXQoKSwgV0lDQml0bWFwQ2FjaGVPbkRlbWFuZCwgJnN1cmZhY2Up
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICByZXR1cm4gc3VyZmFjZTsKLX0KLQotRDJEMV9QSVhFTF9GT1JNQVQgcGl4ZWxGb3JtYXRGb3JT
b2Z0d2FyZU1hbmlwdWxhdGlvbigpCi17Ci0gICAgcmV0dXJuIEQyRDE6OlBpeGVsRm9ybWF0KERY
R0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNLCBEMkQxX0FMUEhBX01PREVfUFJFTVVMVElQTElFRCk7
Ci19Ci0KLUQyRDFfUElYRUxfRk9STUFUIHBpeGVsRm9ybWF0KCkKLXsKLSAgICAvLyBTaW5jZSB3
ZSBuZWVkIHRvIGludGVyYWN0IHdpdGggSERDIGZyb20gdGltZS10by10aW1lLCB3ZSBhcmUgZm9y
Y2VkIHRvIHVzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSBhbmQgRDJEMV9BTFBIQV9NT0RF
X1BSRU1VTFRJUExJRUQKLSAgICByZXR1cm4gRDJEMTo6UGl4ZWxGb3JtYXQod2Via2l0VGV4dHVy
ZUZvcm1hdCwgd2Via2l0QWxwaGFNb2RlKTsKLX0KLQotR1VJRCB3aWNCaXRtYXBGb3JtYXQoKQot
ewotICAgIC8vIFRoaXMgaXMgdGhlIFdJQyBmb3JtYXQgY29tcGF0aWJsZSB3aXRoIERYR0lfRk9S
TUFUX0I4RzhSOEE4X1VOT1JNLiBJdCBpcyBhbHNvIHN1cHBvc2VkbHkgdGhlIG1vc3QgZWZmaWNp
ZW50IGluLW1lbW9yeQotICAgIC8vIHJlcHJlc2VudGF0aW9uIGZvciBXSUMgaW1hZ2VzLgotICAg
IHJldHVybiBHVUlEX1dJQ1BpeGVsRm9ybWF0MzJicHBQQkdSQTsKLX0KLQotRDJEMV9CSVRNQVBf
UFJPUEVSVElFUyBiaXRtYXBQcm9wZXJ0aWVzKCkKLXsKLSAgICByZXR1cm4gRDJEMTo6Qml0bWFw
UHJvcGVydGllcyhwaXhlbEZvcm1hdCgpKTsKLX0KLQotQ09NUHRyPElEMkQxQml0bWFwPiBjcmVh
dGVCaXRtYXAoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKLXsKLSAgICBhdXRvIGJpdG1hcENyZWF0ZVByb3BlcnRpZXMgPSBiaXRtYXBQcm9wZXJ0
aWVzKCk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKLSAgICBEMkQxX1NJWkVf
VSBiaXRtYXBTaXplID0gc2l6ZTsKLSAgICBIUkVTVUxUIGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVh
dGVCaXRtYXAoYml0bWFwU2l6ZSwgYml0bWFwQ3JlYXRlUHJvcGVydGllcywgJmJpdG1hcCk7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJl
dHVybiBiaXRtYXA7Ci19Ci0KLUQyRDFfUkVOREVSX1RBUkdFVF9QUk9QRVJUSUVTIHJlbmRlclRh
cmdldFByb3BlcnRpZXMoKQotewotICAgIHJldHVybiBEMkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0
aWVzKEQyRDFfUkVOREVSX1RBUkdFVF9UWVBFX0RFRkFVTFQsCi0gICAgICAgIHBpeGVsRm9ybWF0
KCksIDAsIDAsIEQyRDFfUkVOREVSX1RBUkdFVF9VU0FHRV9HRElfQ09NUEFUSUJMRSwgRDJEMV9G
RUFUVVJFX0xFVkVMX0RFRkFVTFQpOwotfQotCi1DT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IGNy
ZWF0ZVJlbmRlclRhcmdldEZyb21XSUNCaXRtYXAoSVdJQ0JpdG1hcCogYml0bWFwU291cmNlKQot
ewotICAgIGF1dG8gdGFyZ2V0UHJvcGVydGllcyA9IHJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsK
LQotICAgIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gYml0bWFwQ29udGV4dDsKLSAgICBIUkVT
VUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVdpY0JpdG1h
cFJlbmRlclRhcmdldChiaXRtYXBTb3VyY2UsICZ0YXJnZXRQcm9wZXJ0aWVzLCAmYml0bWFwQ29u
dGV4dCk7Ci0gICAgaWYgKCFiaXRtYXBDb250ZXh0IHx8ICFTVUNDRUVERUQoaHIpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBiaXRtYXBDb250ZXh0OwotfQotCi1DT01Q
dHI8SUQyRDFEQ1JlbmRlclRhcmdldD4gY3JlYXRlR0RJUmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBh
dXRvIHRhcmdldFByb3BlcnRpZXMgPSByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0KLSAgICBD
T01QdHI8SUQyRDFEQ1JlbmRlclRhcmdldD4gcmVuZGVyVGFyZ2V0OwotICAgIEhSRVNVTFQgaHIg
PSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQo
JnRhcmdldFByb3BlcnRpZXMsICZyZW5kZXJUYXJnZXQpOwotICAgIGlmICghcmVuZGVyVGFyZ2V0
IHx8ICFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVy
biByZW5kZXJUYXJnZXQ7Ci19Ci0KLUNPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gY3Jl
YXRlQml0bWFwUmVuZGVyVGFyZ2V0KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCi17
Ci0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgICAgIHJlbmRlclRhcmdldCA9IEdyYXBoaWNz
Q29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFw
UmVuZGVyVGFyZ2V0PiBiaXRtYXBDb250ZXh0OwotICAgIEhSRVNVTFQgaHIgPSByZW5kZXJUYXJn
ZXQtPkNyZWF0ZUNvbXBhdGlibGVSZW5kZXJUYXJnZXQobnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0
ciwgRDJEMV9DT01QQVRJQkxFX1JFTkRFUl9UQVJHRVRfT1BUSU9OU19HRElfQ09NUEFUSUJMRSwg
JmJpdG1hcENvbnRleHQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICByZXR1cm4gYml0bWFwQ29udGV4dDsKLX0KLQotQ09NUHRyPElEMkQx
Qml0bWFwUmVuZGVyVGFyZ2V0PiBjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCwgZmxvYXQgZGV2
aWNlU2NhbGVGYWN0b3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGRldmljZVNjYWxlRmFjdG9yKTsK
LQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgICAgICByZW5kZXJUYXJnZXQgPSBHcmFwaGlj
c0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1h
cFJlbmRlclRhcmdldD4gYml0bWFwQ29udGV4dDsKLSAgICBhdXRvIGRlc2lyZWRTaXplID0gRDJE
MTo6U2l6ZUYoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLSAgICBEMkQxX1NJWkVfVSBw
aXhlbFNpemUgPSBEMkQxOjpTaXplVShjbGFtcFRvPHVuc2lnbmVkPihkZXZpY2VTY2FsZUZhY3Rv
ciAqIHNpemUud2lkdGgoKSksIGNsYW1wVG88dW5zaWduZWQ+KGRldmljZVNjYWxlRmFjdG9yICog
c2l6ZS5oZWlnaHQoKSkpOwotICAgIEhSRVNVTFQgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZUNv
bXBhdGlibGVSZW5kZXJUYXJnZXQoJmRlc2lyZWRTaXplLCAmcGl4ZWxTaXplLCBudWxscHRyLCBE
MkQxX0NPTVBBVElCTEVfUkVOREVSX1RBUkdFVF9PUFRJT05TX0dESV9DT01QQVRJQkxFLCAmYml0
bWFwQ29udGV4dCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIHJldHVybiBiaXRtYXBDb250ZXh0OwotfQotCi1DT01QdHI8SURYR0lTdXJm
YWNlMT4gY3JlYXRlRFhHSVN1cmZhY2VPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSUQzRDEx
RGV2aWNlMSogZGlyZWN0WERldmljZSwgYm9vbCBjcm9zc1Byb2Nlc3MpCi17Ci0gICAgaWYgKCFk
aXJlY3RYRGV2aWNlKQotICAgICAgICBkaXJlY3RYRGV2aWNlID0gRGlyZWN0MkQ6OmRlZmF1bHRE
aXJlY3RYRGV2aWNlKCk7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIHJlbmRlciB0YXJnZXQgdGV4dHVy
ZQotICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7Ci0gICAgWmVyb01lbW9yeSgmZGVzYywg
c2l6ZW9mKGRlc2MpKTsKLSAgICBkZXNjLldpZHRoID0gc2l6ZS53aWR0aCgpOwotICAgIGRlc2Mu
SGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBkZXNjLk1pcExldmVscyA9IDE7Ci0gICAgZGVz
Yy5BcnJheVNpemUgPSAxOwotICAgIGRlc2MuRm9ybWF0ID0gd2Via2l0VGV4dHVyZUZvcm1hdDsK
LSAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOwotICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9V
U0FHRV9ERUZBVUxUOwotICAgIGRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9SRU5ERVJfVEFS
R0VUIHwgRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0U7Ci0gICAgZGVzYy5DUFVBY2Nlc3NGbGFn
cyA9IDA7Ci0gICAgZGVzYy5NaXNjRmxhZ3MgPSBEM0QxMV9SRVNPVVJDRV9NSVNDX0dESV9DT01Q
QVRJQkxFOwotICAgIGlmIChjcm9zc1Byb2Nlc3MpCi0gICAgICAgIGRlc2MuTWlzY0ZsYWdzIHw9
IEQzRDExX1JFU09VUkNFX01JU0NfU0hBUkVEX05USEFORExFIHwgRDNEMTFfUkVTT1VSQ0VfTUlT
Q19TSEFSRURfS0VZRURNVVRFWDsKLQotICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IHRleHR1
cmU7Ci0gICAgSFJFU1VMVCBociA9IGRpcmVjdFhEZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVz
YywgbnVsbHB0ciwgJnRleHR1cmUpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OwotCi0gICAgQ09NUHRyPElEWEdJU3VyZmFjZTE+IHN1cmZhY2U7Ci0gICAgaHIgPSB0ZXh0dXJl
LT5RdWVyeUludGVyZmFjZSgmc3VyZmFjZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7Ci0KLSAgICByZXR1cm4gc3VyZmFjZTsKLX0KLQotQ09NUHRyPElEMkQxUmVuZGVyVGFy
Z2V0PiBjcmVhdGVTdXJmYWNlUmVuZGVyVGFyZ2V0KElEWEdJU3VyZmFjZTEqIHN1cmZhY2UpCi17
Ci0gICAgYXV0byBwaXhlbEZvcm1hdCA9IEQyRDE6OlBpeGVsRm9ybWF0KHdlYmtpdFRleHR1cmVG
b3JtYXQsIHdlYmtpdEFscGhhTW9kZSk7Ci0KLSAgICBhdXRvIHByb3BlcnRpZXMgPSBEMkQxOjpS
ZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKEQyRDFfUkVOREVSX1RBUkdFVF9UWVBFX0RFRkFVTFQsCi0g
ICAgICAgIHBpeGVsRm9ybWF0LCAwLCAwLCBEMkQxX1JFTkRFUl9UQVJHRVRfVVNBR0VfR0RJX0NP
TVBBVElCTEUsIEQyRDFfRkVBVFVSRV9MRVZFTF8xMCk7Ci0KLSAgICBDT01QdHI8SUQyRDFSZW5k
ZXJUYXJnZXQ+IHJlbmRlclRhcmdldDsKLSAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0
OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUR4Z2lTdXJmYWNlUmVuZGVyVGFyZ2V0KHN1cmZhY2Us
IHByb3BlcnRpZXMsICZyZW5kZXJUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OwotfQotCi12
b2lkIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoSUQyRDFCaXRtYXAqIGZyb20sIElE
MkQxQml0bWFwKiB0bywgY29uc3QgSW50U2l6ZSYgc291cmNlT2Zmc2V0LCBjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBJbnRTaXplJiBkZXN0T2Zmc2V0KQotewotICAgIEludFNpemUgc291cmNl
Qml0bWFwU2l6ZSA9IGZyb20tPkdldFBpeGVsU2l6ZSgpOwotICAgIGlmIChzb3VyY2VCaXRtYXBT
aXplLmlzWmVybygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRTaXplIHRhcmdldEJpdG1h
cFNpemUgPSB0by0+R2V0UGl4ZWxTaXplKCk7Ci0gICAgaWYgKHRhcmdldEJpdG1hcFNpemUuaXNa
ZXJvKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3Qgc291cmNlUmVjdChzb3VyY2VP
ZmZzZXQud2lkdGgoKSwgc291cmNlT2Zmc2V0LmhlaWdodCgpLCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkpOwotICAgIEludFJlY3QgdGFyZ2V0UmVjdChkZXN0T2Zmc2V0LndpZHRoKCksIGRl
c3RPZmZzZXQuaGVpZ2h0KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBJ
bnRSZWN0IHNvdXJjZUJpdG1hcFJlY3QoSW50UG9pbnQoKSwgc291cmNlQml0bWFwU2l6ZSk7Ci0g
ICAgSW50UmVjdCB0YXJnZXRCaXRtYXBSZWN0KEludFBvaW50KCksIHRhcmdldEJpdG1hcFNpemUp
OwotCi0gICAgc291cmNlUmVjdC5pbnRlcnNlY3Qoc291cmNlQml0bWFwUmVjdCk7Ci0gICAgdGFy
Z2V0UmVjdC5pbnRlcnNlY3QodGFyZ2V0Qml0bWFwUmVjdCk7Ci0KLSAgICBEMkQxX1JFQ1RfVSBk
MmRTb3VyY2VSZWN0ID0gRDJEMTo6UmVjdFUoc291cmNlUmVjdC54KCksIHNvdXJjZVJlY3QueSgp
LCBzb3VyY2VSZWN0LngoKSArIHRhcmdldFJlY3Qud2lkdGgoKSwgc291cmNlUmVjdC55KCkgKyB0
YXJnZXRSZWN0LmhlaWdodCgpKTsKLSAgICBhdXRvIG9mZnNldCA9IEQyRDE6OlBvaW50MlUoZGVz
dE9mZnNldC53aWR0aCgpLCBkZXN0T2Zmc2V0LmhlaWdodCgpKTsKLQotICAgIEhSRVNVTFQgaHIg
PSB0by0+Q29weUZyb21CaXRtYXAoJm9mZnNldCwgZnJvbSwgJmQyZFNvdXJjZVJlY3QpOwotICAg
IEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLX0KLQotdm9pZCB3cml0ZURpYWdub3N0aWNQTkdUb1Bh
dGgoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCwgSUQyRDFCaXRtYXAqIGJpdG1hcCwg
TFBDV1NUUiBmaWxlTmFtZSkKLXsKLSAgICBDT01QdHI8SVdJQ0JpdG1hcEVuY29kZXI+IHdpY0Jp
dG1hcEVuY29kZXI7Ci0gICAgSFJFU1VMVCBociA9IEltYWdlRGVjb2RlckRpcmVjdDJEOjpzeXN0
ZW1JbWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVFbmNvZGVyKEdVSURfQ29udGFpbmVyRm9ybWF0UG5n
LCBudWxscHRyLCAmd2ljQml0bWFwRW5jb2Rlcik7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikp
OwotCi0gICAgRFdPUkQgbW9kZSA9IFNUR01fQ1JFQVRFIHwgU1RHTV9SRUFEV1JJVEUgfCBTVEdN
X1NIQVJFX0RFTllfV1JJVEU7Ci0gICAgQ09NUHRyPElTdHJlYW0+IHN0cmVhbTsKLSAgICBociA9
IDo6U0hDcmVhdGVTdHJlYW1PbkZpbGVFeChmaWxlTmFtZSwgbW9kZSwgRklMRV9BVFRSSUJVVEVf
Tk9STUFMLCBUUlVFLCBudWxscHRyLCAmc3RyZWFtKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0KLSAgICBociA9IHdpY0JpdG1hcEVuY29kZXItPkluaXRpYWxpemUoc3RyZWFtLmdldCgp
LCBXSUNCaXRtYXBFbmNvZGVyTm9DYWNoZSk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwot
Ci0gICAgQ09NUHRyPElXSUNCaXRtYXBGcmFtZUVuY29kZT4gd2ljRnJhbWVFbmNvZGU7Ci0gICAg
aHIgPSB3aWNCaXRtYXBFbmNvZGVyLT5DcmVhdGVOZXdGcmFtZSgmd2ljRnJhbWVFbmNvZGUsIG51
bGxwdHIpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0gd2ljRnJhbWVF
bmNvZGUtPkluaXRpYWxpemUobnVsbHB0cik7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwot
Ci0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gZDJkRGV2aWNlQ29udGV4dDsKLSAgICBo
ciA9IHJlbmRlclRhcmdldC0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQyRDFEZXZpY2VDb250
ZXh0KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZkMmREZXZpY2VDb250ZXh0KSk7Ci0gICAg
QVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlPiBkMmREZXZp
Y2U7Ci0gICAgZDJkRGV2aWNlQ29udGV4dC0+R2V0RGV2aWNlKCZkMmREZXZpY2UpOwotCi0gICAg
Q09NUHRyPElXSUNJbWFnZUVuY29kZXI+IGltYWdlRW5jb2RlcjsKLSAgICBociA9IEltYWdlRGVj
b2RlckRpcmVjdDJEOjpzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVJbWFnZUVuY29kZXIo
ZDJkRGV2aWNlLmdldCgpLCAmaW1hZ2VFbmNvZGVyKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0KLSAgICBociA9IGltYWdlRW5jb2Rlci0+V3JpdGVGcmFtZShiaXRtYXAsIHdpY0ZyYW1l
RW5jb2RlLmdldCgpLCBudWxscHRyKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAg
ICBociA9IHdpY0ZyYW1lRW5jb2RlLT5Db21taXQoKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0KLSAgICBociA9IHdpY0JpdG1hcEVuY29kZXItPkNvbW1pdCgpOwotICAgIEFTU0VSVChT
VUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0gc3RyZWFtLT5Db21taXQoU1RHQ19ERUZBVUxUKTsK
LSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci19Ci0KLXN0YXRpYyBJRDNEMTFEZXZpY2VDb250
ZXh0MSogaW1tZWRpYXRlQ29udGV4dCA9IG51bGxwdHI7Ci0KLUlEM0QxMURldmljZUNvbnRleHQx
KiBkeGdpSW1tZWRpYXRlQ29udGV4dCgpCi17Ci0gICAgaWYgKCFpbW1lZGlhdGVDb250ZXh0KQot
ICAgICAgICBkZWZhdWx0RGlyZWN0WERldmljZSgpOwotCi0gICAgUkVMRUFTRV9BU1NFUlQoaW1t
ZWRpYXRlQ29udGV4dCk7Ci0gICAgcmV0dXJuIGltbWVkaWF0ZUNvbnRleHQ7Ci19Ci0KLUlEM0Qx
MURldmljZTEqIGRlZmF1bHREaXJlY3RYRGV2aWNlKCkKLXsKLSAgICBzdGF0aWMgSUQzRDExRGV2
aWNlMSogZGVmYXVsdERldmljZTEgPSBudWxscHRyOwotCi0gICAgaWYgKCFkZWZhdWx0RGV2aWNl
MSkgewotICAgICAgICBpbnQgZGV2aWNlRmxhZ3MgPSBEM0QxMV9DUkVBVEVfREVWSUNFX0JHUkFf
U1VQUE9SVDsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIGRldmljZUZsYWdzIHw9IEQzRDExX0NS
RUFURV9ERVZJQ0VfREVCVUc7Ci0jZW5kaWYKLQotICAgICAgICBJRDNEMTFEZXZpY2UqIGRlZmF1
bHREZXZpY2UgPSBudWxscHRyOwotICAgICAgICBEM0RfRkVBVFVSRV9MRVZFTCBmZWF0dXJlTGV2
ZWwgPSB7IH07Ci0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQqIGltbWVkaWF0ZURldmljZUNv
bnRleHQgPSBudWxscHRyOwotICAgICAgICBIUkVTVUxUIGhyID0gRDNEMTFDcmVhdGVEZXZpY2Uo
bnVsbHB0ciwgRDNEX0RSSVZFUl9UWVBFX0hBUkRXQVJFLCBudWxscHRyLCBkZXZpY2VGbGFncywg
bnVsbHB0ciwgMCwgRDNEMTFfU0RLX1ZFUlNJT04sICZkZWZhdWx0RGV2aWNlLCAmZmVhdHVyZUxl
dmVsLCAmaW1tZWRpYXRlRGV2aWNlQ29udGV4dCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNV
Q0NFRURFRChocikpOwotCi0gICAgICAgIGhyID0gZGVmYXVsdERldmljZS0+UXVlcnlJbnRlcmZh
Y2UoJmRlZmF1bHREZXZpY2UxKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0gICAgICAgIGRlZmF1bHREZXZpY2UxLT5BZGRSZWYoKTsKLQotICAgICAgICBociA9IGlt
bWVkaWF0ZURldmljZUNvbnRleHQtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEM0QxMURldmlj
ZUNvbnRleHQxKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZpbW1lZGlhdGVDb250ZXh0KSk7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgICAgICBpbW1lZGlh
dGVDb250ZXh0LT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmYXVsdERldmljZTE7
Ci19Ci0KLWJvb2wgY3JlYXRlRGV2aWNlQW5kQ29udGV4dChDT01QdHI8SUQzRDExRGV2aWNlMT4m
IGQzZERldmljZSwgQ09NUHRyPElEM0QxMURldmljZUNvbnRleHQxPiYgaW1tZWRpYXRlQ29udGV4
dCkKLXsKLSAgICBpbnQgZGV2aWNlRmxhZ3MgPSBEM0QxMV9DUkVBVEVfREVWSUNFX0JHUkFfU1VQ
UE9SVDsKLSNpZm5kZWYgTkRFQlVHCi0gICAgZGV2aWNlRmxhZ3MgfD0gRDNEMTFfQ1JFQVRFX0RF
VklDRV9ERUJVRzsKLSNlbmRpZgotCi0gICAgRDNEX0ZFQVRVUkVfTEVWRUwgZmVhdHVyZUxldmVs
ID0geyB9OwotICAgIElEM0QxMURldmljZSogZGVmYXVsdERldmljZSA9IG51bGxwdHI7Ci0gICAg
SUQzRDExRGV2aWNlQ29udGV4dCogaW1tZWRpYXRlRGV2aWNlQ29udGV4dCA9IG51bGxwdHI7Ci0g
ICAgSFJFU1VMVCBociA9IDo6RDNEMTFDcmVhdGVEZXZpY2UobnVsbHB0ciwgRDNEX0RSSVZFUl9U
WVBFX0hBUkRXQVJFLCBudWxscHRyLCBkZXZpY2VGbGFncywgbnVsbHB0ciwgMCwgRDNEMTFfU0RL
X1ZFUlNJT04sICZkZWZhdWx0RGV2aWNlLCAmZmVhdHVyZUxldmVsLCAmaW1tZWRpYXRlRGV2aWNl
Q29udGV4dCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBociA9
IGRlZmF1bHREZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKCZkM2REZXZpY2UpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIGRlZmF1bHREZXZpY2UtPlJlbGVhc2UoKTsKLQot
ICAgIGhyID0gaW1tZWRpYXRlRGV2aWNlQ29udGV4dC0+UXVlcnlJbnRlcmZhY2UoJmltbWVkaWF0
ZUNvbnRleHQpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIGltbWVk
aWF0ZUNvbnRleHQtPlJlbGVhc2UoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotQ09NUHRyPElE
WEdJRGV2aWNlMT4gdG9EWEdJRGV2aWNlKGNvbnN0IENPTVB0cjxJRDNEMTFEZXZpY2UxPiYgZDNk
RGV2aWNlKQotewotICAgIGlmICghZDNkRGV2aWNlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIENPTVB0cjxJRFhHSURldmljZTE+IGR4Z2lEZXZpY2U7Ci0gICAgSFJFU1VMVCBociA9
IGQzZERldmljZS0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSURYR0lEZXZpY2UxKSwgKHZvaWQg
KiopJmR4Z2lEZXZpY2UpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICByZXR1cm4gZHhnaURldmljZTsKLX0KLQotQ09NUHRyPElEWEdJRmFj
dG9yeTI+IGZhY3RvcnlGb3JEWEdJRGV2aWNlKGNvbnN0IENPTVB0cjxJRFhHSURldmljZTE+JiBk
ZXZpY2UpCi17Ci0gICAgaWYgKCFkZXZpY2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgQ09NUHRyPElEWEdJQWRhcHRlcj4gYWRhcHRvcjsKLSAgICBIUkVTVUxUIGhyID0gZGV2aWNl
LT5HZXRQYXJlbnQoX191dWlkb2YoSURYR0lBZGFwdGVyKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kio+KCZhZGFwdG9yKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAg
ICBDT01QdHI8SURYR0lGYWN0b3J5PiBmYWN0b3J5OwotICAgIGhyID0gYWRhcHRvci0+R2V0UGFy
ZW50KF9fdXVpZG9mKElEWEdJRmFjdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmZmFj
dG9yeSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgQ09NUHRy
PElEWEdJRmFjdG9yeTI+IGZhY3RvcnkyOwotICAgIGhyID0gZmFjdG9yeS0+UXVlcnlJbnRlcmZh
Y2UoJmZhY3RvcnkyKTsgCi0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAg
Ci0gICAgcmV0dXJuIGZhY3RvcnkyOwotfQotCi1DT01QdHI8SURYR0lTd2FwQ2hhaW4+IHN3YXBD
aGFpbk9mU2l6ZUZvcldpbmRvd0FuZERldmljZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXpl
LCBIV05EIHdpbmRvdywgY29uc3QgQ09NUHRyPElEM0QxMURldmljZTE+JiBkZXZpY2UpCi17Ci0g
ICAgaWYgKCFkZXZpY2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRFhHSV9TV0FQ
X0NIQUlOX0RFU0MxIHN3YXBDaGFpbkRlc2NyaXB0aW9uOwotICAgIDo6WmVyb01lbW9yeSgmc3dh
cENoYWluRGVzY3JpcHRpb24sIHNpemVvZihzd2FwQ2hhaW5EZXNjcmlwdGlvbikpOwotICAgIHN3
YXBDaGFpbkRlc2NyaXB0aW9uLldpZHRoID0gc2l6ZS53aWR0aCgpOwotICAgIHN3YXBDaGFpbkRl
c2NyaXB0aW9uLkhlaWdodCA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgc3dhcENoYWluRGVzY3JpcHRp
b24uRm9ybWF0ID0gd2Via2l0VGV4dHVyZUZvcm1hdDsKLSAgICBzd2FwQ2hhaW5EZXNjcmlwdGlv
bi5TYW1wbGVEZXNjLkNvdW50ID0gMTsKLSAgICBzd2FwQ2hhaW5EZXNjcmlwdGlvbi5TYW1wbGVE
ZXNjLlF1YWxpdHkgPSAwOwotICAgIHN3YXBDaGFpbkRlc2NyaXB0aW9uLkJ1ZmZlclVzYWdlID0g
RFhHSV9VU0FHRV9TSEFERVJfSU5QVVQgfCBEWEdJX1VTQUdFX1JFTkRFUl9UQVJHRVRfT1VUUFVU
OwotICAgIHN3YXBDaGFpbkRlc2NyaXB0aW9uLkJ1ZmZlckNvdW50ID0gMTsKLSAgICBzd2FwQ2hh
aW5EZXNjcmlwdGlvbi5GbGFncyA9IERYR0lfU1dBUF9DSEFJTl9GTEFHX0dESV9DT01QQVRJQkxF
OwotCi0gICAgYXV0byBmYWN0b3J5ID0gRGlyZWN0MkQ6OmZhY3RvcnlGb3JEWEdJRGV2aWNlKERp
cmVjdDJEOjp0b0RYR0lEZXZpY2UoZGV2aWNlKSk7Ci0KLSAgICBDT01QdHI8SURYR0lTd2FwQ2hh
aW4xPiBzd2FwQ2hhaW4xOwotICAgIEhSRVNVTFQgaHIgPSBmYWN0b3J5LT5DcmVhdGVTd2FwQ2hh
aW5Gb3JId25kKGRldmljZS5nZXQoKSwgd2luZG93LCAmc3dhcENoYWluRGVzY3JpcHRpb24sIG51
bGxwdHIsIG51bGxwdHIsICZzd2FwQ2hhaW4xKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ09NUHRyPElEWEdJU3dhcENoYWluPiBzd2Fw
Q2hhaW4oUXVlcnksIHN3YXBDaGFpbjEpOwotICAgIHJldHVybiBzd2FwQ2hhaW47Ci19Ci0KLUNP
TVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlQml0bWFwQ29weUZyb21Db250ZXh0KElEMkQxQml0bWFw
UmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQpCi17Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBj
dXJyZW50Q2FudmFzOwotICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgm
Y3VycmVudENhbnZhcyk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGF1dG8gYml0bWFwQ3JlYXRlUHJvcGVydGllcyA9IGJpdG1hcFByb3Bl
cnRpZXMoKTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotICAgIEQyRDFfU0la
RV9VIGJpdG1hcFNpemUgPSBjdXJyZW50Q2FudmFzLT5HZXRQaXhlbFNpemUoKTsKLSAgICBociA9
IGJpdG1hcFRhcmdldC0+Q3JlYXRlQml0bWFwKGJpdG1hcFNpemUsIGJpdG1hcENyZWF0ZVByb3Bl
cnRpZXMsICZiaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBhdXRvIHRhcmdldFBvcyA9IEQyRDE6OlBvaW50MlUoKTsKLSAgICBE
MkQxX1JFQ1RfVSBkYXRhUmVjdCA9IEQyRDE6OlJlY3RVKDAsIDAsIGJpdG1hcFNpemUud2lkdGgs
IGJpdG1hcFNpemUuaGVpZ2h0KTsKLSAgICBociA9IGJpdG1hcC0+Q29weUZyb21CaXRtYXAoJnRh
cmdldFBvcywgY3VycmVudENhbnZhcy5nZXQoKSwgJmRhdGFSZWN0KTsKLSAgICBpZiAoIVNVQ0NF
RURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBiaXRtYXA7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIERpcmVjdDJECi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5oCShyZXZpc2lvbiAy
ODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRV
dGlsaXRpZXMuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUHJvRlVTSU9O
IGVtYmVkZGVkIHN5c3RlbXMKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NUeXBlcy5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUV4cG9y
dE1hY3Jvcy5oIgotCi1pbnRlcmZhY2UgSUQyRDFCaXRtYXA7Ci1pbnRlcmZhY2UgSUQyRDFCaXRt
YXBSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFEQ1JlbmRlclRhcmdldDsKLWludGVyZmFj
ZSBJRDJEMVJlbmRlclRhcmdldDsKLWludGVyZmFjZSBJRDNEMTFEZXZpY2UxOwotaW50ZXJmYWNl
IElEM0QxMURldmljZUNvbnRleHQxOwotaW50ZXJmYWNlIElEM0QxMVJlbmRlclRhcmdldFZpZXc7
Ci1pbnRlcmZhY2UgSURYR0lEZXZpY2UxOwotaW50ZXJmYWNlIElEWEdJRmFjdG9yeTI7Ci1pbnRl
cmZhY2UgSURYR0lTd2FwQ2hhaW47Ci1pbnRlcmZhY2UgSURYR0lTdXJmYWNlMTsKLWludGVyZmFj
ZSBJV0lDQml0bWFwU291cmNlOwotaW50ZXJmYWNlIElXSUNCaXRtYXA7Ci0KLXN0cnVjdCBEMkQx
X0JJVE1BUF9QUk9QRVJUSUVTOwotc3RydWN0IEQyRDFfUElYRUxfRk9STUFUOwotc3RydWN0IEQy
RDFfUkVOREVSX1RBUkdFVF9QUk9QRVJUSUVTOwotc3RydWN0IEQzRDExX1ZJRVdQT1JUOwotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFNpemU7
Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgSW50U2l6ZTsKLQotbmFtZXNwYWNlIERpcmVjdDJEIHsK
LQotR1VJRCB3aWNCaXRtYXBGb3JtYXQoKTsKLUQyRDFfUElYRUxfRk9STUFUIHBpeGVsRm9ybWF0
KCk7IC8vIEJHUkEKLUQyRDFfUElYRUxfRk9STUFUIHBpeGVsRm9ybWF0Rm9yU29mdHdhcmVNYW5p
cHVsYXRpb24oKTsgLy8gUkdCQQotRDJEMV9CSVRNQVBfUFJPUEVSVElFUyBiaXRtYXBQcm9wZXJ0
aWVzKCk7Ci1EMkQxX1JFTkRFUl9UQVJHRVRfUFJPUEVSVElFUyByZW5kZXJUYXJnZXRQcm9wZXJ0
aWVzKCk7Ci0KLXZvaWQgaW5QbGFjZVN3aXp6bGUodWludDhfdCogYnl0ZURhdGEsIHVuc2lnbmVk
IGxlbmd0aCwgYm9vbCBhcHBseVByZW11bHRpcGxpY2F0aW9uID0gZmFsc2UpOwotCi1JbnRTaXpl
IGJpdG1hcFNpemUoSVdJQ0JpdG1hcFNvdXJjZSopOwotRmxvYXRTaXplIGJpdG1hcFNpemUoSUQy
RDFCaXRtYXAqKTsKLUZsb2F0U2l6ZSBiaXRtYXBSZXNvbHV0aW9uKElXSUNCaXRtYXBTb3VyY2Uq
KTsKLUZsb2F0U2l6ZSBiaXRtYXBSZXNvbHV0aW9uKElEMkQxQml0bWFwKik7Ci1GbG9hdFNpemUg
Yml0bWFwUmVzb2x1dGlvbihJRDJEMVJlbmRlclRhcmdldCopOwotdW5zaWduZWQgYml0c1BlclBp
eGVsKEdVSUQpOwotQ09NUHRyPElEMkQxQml0bWFwPiBjcmVhdGVCaXRtYXAoSUQyRDFSZW5kZXJU
YXJnZXQqLCBjb25zdCBJbnRTaXplJik7Ci1DT01QdHI8SVdJQ0JpdG1hcD4gY3JlYXRlV2ljQml0
bWFwKGNvbnN0IEludFNpemUmKTsKLUNPTVB0cjxJV0lDQml0bWFwPiBjcmVhdGVEaXJlY3QyRElt
YWdlU3VyZmFjZVdpdGhEYXRhKHZvaWQqIGRhdGEsIGNvbnN0IEludFNpemUmLCB1bnNpZ25lZCBz
dHJpZGUpOwotQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBjcmVhdGVSZW5kZXJUYXJnZXRGcm9t
V0lDQml0bWFwKElXSUNCaXRtYXAqKTsKLUNPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4g
Y3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0T2ZTaXplKGNvbnN0IEludFNpemUmLCBJRDJEMVJlbmRl
clRhcmdldCogPSBudWxscHRyLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IDEuMCk7Ci1DT01Q
dHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldChJRDJE
MVJlbmRlclRhcmdldCogPSBudWxscHRyKTsKLUNPTVB0cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiBj
cmVhdGVHRElSZW5kZXJUYXJnZXQoKTsKLUNPTVB0cjxJRFhHSVN1cmZhY2UxPiBjcmVhdGVEWEdJ
U3VyZmFjZU9mU2l6ZShjb25zdCBJbnRTaXplJiwgSUQzRDExRGV2aWNlMSosIGJvb2wgY3Jvc3NQ
cm9jZXNzKTsKLUNPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gY3JlYXRlU3VyZmFjZVJlbmRlclRh
cmdldChJRFhHSVN1cmZhY2UxKik7Ci1DT01QdHI8SUQyRDFCaXRtYXA+IGNyZWF0ZUJpdG1hcENv
cHlGcm9tQ29udGV4dChJRDJEMUJpdG1hcFJlbmRlclRhcmdldCopOwotCi12b2lkIGNvcHlSZWN0
RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoSUQyRDFCaXRtYXAqIGZyb20sIElEMkQxQml0bWFwKiB0
bywgY29uc3QgSW50U2l6ZSYgc291cmNlT2Zmc2V0LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50
U2l6ZSYgZGVzdE9mZnNldCA9IEludFNpemUoKSk7Ci0KLVdFQkNPUkVfRVhQT1JUIElEM0QxMURl
dmljZUNvbnRleHQxKiBkeGdpSW1tZWRpYXRlQ29udGV4dCgpOwotV0VCQ09SRV9FWFBPUlQgSUQz
RDExRGV2aWNlMSogZGVmYXVsdERpcmVjdFhEZXZpY2UoKTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wg
Y3JlYXRlRGV2aWNlQW5kQ29udGV4dChDT01QdHI8SUQzRDExRGV2aWNlMT4mLCBDT01QdHI8SUQz
RDExRGV2aWNlQ29udGV4dDE+Jik7Ci1XRUJDT1JFX0VYUE9SVCBDT01QdHI8SURYR0lEZXZpY2Ux
PiB0b0RYR0lEZXZpY2UoY29uc3QgQ09NUHRyPElEM0QxMURldmljZTE+Jik7Ci1XRUJDT1JFX0VY
UE9SVCBDT01QdHI8SURYR0lGYWN0b3J5Mj4gZmFjdG9yeUZvckRYR0lEZXZpY2UoY29uc3QgQ09N
UHRyPElEWEdJRGV2aWNlMT4mKTsKLVdFQkNPUkVfRVhQT1JUIENPTVB0cjxJRFhHSVN3YXBDaGFp
bj4gc3dhcENoYWluT2ZTaXplRm9yV2luZG93QW5kRGV2aWNlKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmLCBIV05ELCBjb25zdCBDT01QdHI8SUQzRDExRGV2aWNlMT4mKTsKLQotdm9pZCB3cml0ZURp
YWdub3N0aWNQTkdUb1BhdGgoSUQyRDFSZW5kZXJUYXJnZXQqLCBJRDJEMUJpdG1hcCosIExQQ1dT
VFIgZmlsZU5hbWUpOwotCi19IC8vIG5hbWVzcGFjZSBEaXJlY3QyRAotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0
aWxpdGllcy5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAt
MSwyNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMu
aCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPGR3cml0ZV8zLmg+Ci0KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1uYW1lc3BhY2UgRGlyZWN0V3JpdGUgewotCi1JRFdyaXRlRmFjdG9yeTUqIGZh
Y3RvcnkoKQotewotICAgIHN0YXRpYyBJRFdyaXRlRmFjdG9yeTUqIGRpcmVjdFdyaXRlRmFjdG9y
eSA9IG51bGxwdHI7Ci0gICAgaWYgKCFkaXJlY3RXcml0ZUZhY3RvcnkpIHsKLSAgICAgICAgSFJF
U1VMVCBociA9IERXcml0ZUNyZWF0ZUZhY3RvcnkoRFdSSVRFX0ZBQ1RPUllfVFlQRV9TSEFSRUQs
IF9fdXVpZG9mKGRpcmVjdFdyaXRlRmFjdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8SVVua25vd24q
Kj4oJmRpcmVjdFdyaXRlRmFjdG9yeSkpOwotICAgICAgICBkaXJlY3RXcml0ZUZhY3RvcnktPkFk
ZFJlZigpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gZGlyZWN0V3JpdGVGYWN0b3J5OwotfQotCi1JRFdyaXRlR2RpSW50ZXJvcCog
Z2RpSW50ZXJvcCgpCi17Ci0gICAgc3RhdGljIElEV3JpdGVHZGlJbnRlcm9wKiBkaXJlY3RXcml0
ZUdkaUludGVyb3AgPSBudWxscHRyOwotICAgIGlmICghZGlyZWN0V3JpdGVHZGlJbnRlcm9wKSB7
Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBmYWN0b3J5KCktPkdldEdkaUludGVyb3AoJmRpcmVjdFdy
aXRlR2RpSW50ZXJvcCk7Ci0gICAgICAgIGRpcmVjdFdyaXRlR2RpSW50ZXJvcC0+QWRkUmVmKCk7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIH0KLQotICAgIHJl
dHVybiBkaXJlY3RXcml0ZUdkaUludGVyb3A7Ci19Ci0KLXN0YXRpYyBJRFdyaXRlSW5NZW1vcnlG
b250RmlsZUxvYWRlciogbWVtb3J5Rm9udExvYWRlcigpCi17Ci0gICAgc3RhdGljIElEV3JpdGVJ
bk1lbW9yeUZvbnRGaWxlTG9hZGVyKiBtZW1vcnlGb250TG9hZGVyID0gbnVsbHB0cjsKLSAgICBp
ZiAoIW1lbW9yeUZvbnRMb2FkZXIpIHsKLSAgICAgICAgSFJFU1VMVCBociA9IGZhY3RvcnkoKS0+
Q3JlYXRlSW5NZW1vcnlGb250RmlsZUxvYWRlcigmbWVtb3J5Rm9udExvYWRlcik7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgICAgICBtZW1vcnlGb250TG9hZGVy
LT5BZGRSZWYoKTsKLQotICAgICAgICBociA9IGZhY3RvcnkoKS0+UmVnaXN0ZXJGb250RmlsZUxv
YWRlcihtZW1vcnlGb250TG9hZGVyKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1lbW9yeUZvbnRMb2FkZXI7Ci19Ci0KLXN0YXRp
YyBJRFdyaXRlRm9udFNldEJ1aWxkZXIxKiBmb250U2V0QnVpbGRlcigpCi17Ci0gICAgc3RhdGlj
IElEV3JpdGVGb250U2V0QnVpbGRlcjEqIGZvbnRTZXRCdWlsZGVyID0gbnVsbHB0cjsKLSAgICBp
ZiAoIWZvbnRTZXRCdWlsZGVyKSB7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBmYWN0b3J5KCktPkNy
ZWF0ZUZvbnRTZXRCdWlsZGVyKCZmb250U2V0QnVpbGRlcik7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKFNVQ0NFRURFRChocikpOwotICAgICAgICBmb250U2V0QnVpbGRlci0+QWRkUmVmKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZvbnRTZXRCdWlsZGVyOwotfQotCi1zdGF0aWMgQ09NUHRyPElE
V3JpdGVGb250U2V0PiBmb250U2V0Owotc3RhdGljIENPTVB0cjxJRFdyaXRlRm9udENvbGxlY3Rp
b24xPiBmb250Q29sbGVjdGlvbjsKLXN0YXRpYyBVSU5UMzIgZm9udENvdW50ID0gMDsKLQotSURX
cml0ZUZvbnRDb2xsZWN0aW9uMSogd2ViUHJvY2Vzc0ZvbnRDb2xsZWN0aW9uKCkKLXsKLSAgICBI
UkVTVUxUIGhyID0gU19PSzsKLQotICAgIGlmICghZm9udFNldCkgewotICAgICAgICBociA9IGZv
bnRTZXRCdWlsZGVyKCktPkNyZWF0ZUZvbnRTZXQoJmZvbnRTZXQpOwotICAgICAgICBpZiAoIVNV
Q0NFRURFRChocikpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBmb250
Q29sbGVjdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgIGhyID0gZmFjdG9yeSgpLT5DcmVhdGVGb250
Q29sbGVjdGlvbkZyb21Gb250U2V0KGZvbnRTZXQuZ2V0KCksICZmb250Q29sbGVjdGlvbik7Ci0g
ICAgICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgICAgIEFTU0VSVChmb250Q29sbGVjdGlvbi0+R2V0Rm9udEZhbWlseUNvdW50KCkgPT0g
Zm9udENvdW50KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZm9udENvbGxlY3Rpb24uZ2V0KCk7Ci19
Ci0KLUhSRVNVTFQgYWRkRm9udEZyb21EYXRhVG9Qcm9jZXNzQ29sbGVjdGlvbihjb25zdCBWZWN0
b3I8dWludDhfdD4mIGZvbnREYXRhKQotewotICAgIENPTVB0cjxJRFdyaXRlRm9udEZpbGU+IGZv
bnRGaWxlOwotICAgIEhSRVNVTFQgaHIgPSBtZW1vcnlGb250TG9hZGVyKCktPkNyZWF0ZUluTWVt
b3J5Rm9udEZpbGVSZWZlcmVuY2UoZmFjdG9yeSgpLCBmb250RGF0YS5kYXRhKCksIGZvbnREYXRh
LnNpemUoKSwgbnVsbHB0ciwgJmZvbnRGaWxlKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0g
ICAgICAgIHJldHVybiBocjsKLQotICAgIGhyID0gZm9udFNldEJ1aWxkZXIoKS0+QWRkRm9udEZp
bGUoZm9udEZpbGUuZ2V0KCkpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0
dXJuIGhyOwotCi0gICAgZm9udFNldCA9IG51bGxwdHI7Ci0gICAgKytmb250Q291bnQ7Ci0KLSAg
ICByZXR1cm4gaHI7Ci19Ci0KLVZlY3Rvcjx3Y2hhcl90PiBmYW1pbHlOYW1lRm9yTG9jYWxlKElE
V3JpdGVGb250RmFtaWx5KiBmb250RmFtaWx5LCBjb25zdCBWZWN0b3I8d2NoYXJfdD4mIGxvY2Fs
ZU5hbWUpCi17Ci0gICAgQ09NUHRyPElEV3JpdGVMb2NhbGl6ZWRTdHJpbmdzPiBmYW1pbHlOYW1l
czsKLSAgICBIUkVTVUxUIGhyID0gZm9udEZhbWlseS0+R2V0RmFtaWx5TmFtZXMoJmZhbWlseU5h
bWVzKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIEJP
T0wgZXhpc3RzID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgbG9jYWxlSW5kZXggPSAwOwotICAgIGlm
ICghbG9jYWxlTmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIGhyID0gZmFtaWx5TmFtZXMtPkZpbmRM
b2NhbGVOYW1lKGxvY2FsZU5hbWUuZGF0YSgpLCAmbG9jYWxlSW5kZXgsICZleGlzdHMpOwotCi0g
ICAgaWYgKFNVQ0NFRURFRChocikgJiYgIWV4aXN0cykKLSAgICAgICAgaHIgPSBmYW1pbHlOYW1l
cy0+RmluZExvY2FsZU5hbWUoTCJlbi11cyIsICZsb2NhbGVJbmRleCwgJmV4aXN0cyk7Ci0KLSAg
ICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIHVuc2lnbmVkIGZh
bWlseU5hbWVMZW5ndGggPSAwOwotICAgIGhyID0gZmFtaWx5TmFtZXMtPkdldFN0cmluZ0xlbmd0
aChsb2NhbGVJbmRleCwgJmZhbWlseU5hbWVMZW5ndGgpOwotICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFZlY3Rvcjx3Y2hhcl90PiBmYW1pbHlOYW1l
KGZhbWlseU5hbWVMZW5ndGggKyAxKTsKLSAgICBociA9IGZhbWlseU5hbWVzLT5HZXRTdHJpbmco
bG9jYWxlSW5kZXgsIGZhbWlseU5hbWUuZGF0YSgpLCBmYW1pbHlOYW1lLnNpemUoKSk7Ci0gICAg
aWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgcmV0dXJuIGZh
bWlseU5hbWU7Ci19Ci0KLUNPTVB0cjxJRFdyaXRlRm9udEZhbWlseT4gZm9udEZhbWlseUZvckNv
bGxlY3Rpb24oSURXcml0ZUZvbnRDb2xsZWN0aW9uKiBmb250Q29sbGVjdGlvbiwgY29uc3QgVmVj
dG9yPHdjaGFyX3Q+JiBsb2NhbGVOYW1lLCBjb25zdCBMT0dGT05UJiBsb2dGb250KQotewotICAg
IENPTVB0cjxJRFdyaXRlRm9udEZhbWlseT4gZm9udEZhbWlseTsKLQotICAgIHVuc2lnbmVkIGZv
bnRGYW1pbHlDb3VudCA9IGZvbnRDb2xsZWN0aW9uLT5HZXRGb250RmFtaWx5Q291bnQoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGZvbnRJbmRleCA9IDA7IGZvbnRJbmRleCA8IGZvbnRGYW1pbHlDb3Vu
dDsgKytmb250SW5kZXgpIHsKLSAgICAgICAgSFJFU1VMVCBociA9IGZvbnRDb2xsZWN0aW9uLT5H
ZXRGb250RmFtaWx5KGZvbnRJbmRleCwgJmZvbnRGYW1pbHkpOwotICAgICAgICBpZiAoRkFJTEVE
KGhyKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGF1dG8gZmFtaWx5
TmFtZSA9IGZhbWlseU5hbWVGb3JMb2NhbGUoZm9udEZhbWlseS5nZXQoKSwgbG9jYWxlTmFtZSk7
Ci0KLSAgICAgICAgaWYgKCF3Y3NjbXAobG9nRm9udC5sZkZhY2VOYW1lLCBmYW1pbHlOYW1lLmRh
dGEoKSkpCi0gICAgICAgICAgICByZXR1cm4gZm9udEZhbWlseTsKLQotICAgICAgICBmb250RmFt
aWx5ID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotQ09NUHRy
PElEV3JpdGVGb250PiBjcmVhdGVXaXRoUGxhdGZvcm1Gb250KGNvbnN0IExPR0ZPTlQmIGxvZ0Zv
bnQpCi17Ci0gICAgQ09NUHRyPElEV3JpdGVGb250Q29sbGVjdGlvbj4gc3lzdGVtRm9udENvbGxl
Y3Rpb247Ci0gICAgSFJFU1VMVCBociA9IGZhY3RvcnkoKS0+R2V0U3lzdGVtRm9udENvbGxlY3Rp
b24oJnN5c3RlbUZvbnRDb2xsZWN0aW9uKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBWZWN0b3I8d2NoYXJfdD4gbG9jYWxlTmFtZShMT0NBTEVf
TkFNRV9NQVhfTEVOR1RIKTsKLSAgICBpbnQgbG9jYWxlTGVuZ3RoID0gR2V0VXNlckRlZmF1bHRM
b2NhbGVOYW1lKGxvY2FsZU5hbWUuZGF0YSgpLCBMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChsb2NhbGVMZW5ndGggPD0gTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7
Ci0KLSAgICBDT01QdHI8SURXcml0ZUZvbnRDb2xsZWN0aW9uMT4gY29sbGVjdGlvbihRdWVyeSwg
c3lzdGVtRm9udENvbGxlY3Rpb24pOwotCi0gICAgQ09NUHRyPElEV3JpdGVGb250RmFtaWx5PiBm
b250RmFtaWx5ID0gZm9udEZhbWlseUZvckNvbGxlY3Rpb24oY29sbGVjdGlvbi5nZXQoKSwgbG9j
YWxlTmFtZSwgbG9nRm9udCk7Ci0gICAgaWYgKCFmb250RmFtaWx5KSB7Ci0gICAgICAgIGNvbGxl
Y3Rpb24gPSB3ZWJQcm9jZXNzRm9udENvbGxlY3Rpb24oKTsKLSAgICAgICAgZm9udEZhbWlseSA9
IGZvbnRGYW1pbHlGb3JDb2xsZWN0aW9uKGNvbGxlY3Rpb24uZ2V0KCksIGxvY2FsZU5hbWUsIGxv
Z0ZvbnQpOwotICAgIH0KLQotICAgIGlmICghZm9udEZhbWlseSkgewotICAgICAgICAvLyBKdXN0
IHJldHVybiB0aGUgZmlyc3Qgc3lzdGVtIGZvbnQuCi0gICAgICAgIGNvbGxlY3Rpb24gPSBDT01Q
dHI8SURXcml0ZUZvbnRDb2xsZWN0aW9uMT4oUXVlcnksIHN5c3RlbUZvbnRDb2xsZWN0aW9uKTsK
LSAgICAgICAgaHIgPSBjb2xsZWN0aW9uLT5HZXRGb250RmFtaWx5KDAsICZmb250RmFtaWx5KTsK
LSAgICAgICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
I2lmbmRlZiBOREVCVUcKLSAgICAgICAgYXV0byBmYW1pbHlOYW1lID0gZmFtaWx5TmFtZUZvckxv
Y2FsZShmb250RmFtaWx5LmdldCgpLCBsb2NhbGVOYW1lKTsKLSAgICAgICAgVU5VU0VEX1ZBUklB
QkxFKGZhbWlseU5hbWUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgRFdSSVRFX0ZPTlRfV0VJR0hU
IHdlaWdodCA9IHN0YXRpY19jYXN0PERXUklURV9GT05UX1dFSUdIVD4obG9nRm9udC5sZldlaWdo
dCk7Ci0gICAgRFdSSVRFX0ZPTlRfU1RSRVRDSCBzdHJldGNoID0gc3RhdGljX2Nhc3Q8RFdSSVRF
X0ZPTlRfU1RSRVRDSD4obG9nRm9udC5sZlF1YWxpdHkpOwotICAgIERXUklURV9GT05UX1NUWUxF
IHN0eWxlID0gbG9nRm9udC5sZkl0YWxpYyA/IERXUklURV9GT05UX1NUWUxFX0lUQUxJQyA6IERX
UklURV9GT05UX1NUWUxFX05PUk1BTDsKLQotICAgIENPTVB0cjxJRFdyaXRlRm9udD4gZHdGb250
OwotICAgIGhyID0gZm9udEZhbWlseS0+R2V0Rmlyc3RNYXRjaGluZ0ZvbnQod2VpZ2h0LCBzdHJl
dGNoLCBzdHlsZSwgJmR3Rm9udCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAg
cmV0dXJuIGR3Rm9udDsKLX0KLQotRFdSSVRFX0ZPTlRfV0VJR0hUIGZvbnRXZWlnaHQoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYpCi17Ci0gICAgcmV0dXJuIERXUklURV9GT05UX1dFSUdIVF9SRUdV
TEFSOwotfQotCi1EV1JJVEVfRk9OVF9TVFlMRSBmb250U3R5bGUoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYpCi17Ci0gICAgcmV0dXJuIERXUklURV9GT05UX1NUWUxFX05PUk1BTDsKLX0KLQotRFdS
SVRFX0ZPTlRfU1RSRVRDSCBmb250U3RyZXRjaChjb25zdCBGb250UGxhdGZvcm1EYXRhJikKLXsK
LSAgICByZXR1cm4gRFdSSVRFX0ZPTlRfU1RSRVRDSF9OT1JNQUw7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIERpcmVjdFdyaXRlCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVT
RShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9E
aXJlY3RXcml0ZVV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5oCShyZXZpc2lvbiAyODc4MTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGls
aXRpZXMuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoRElS
RUNUMkQpCi0KLSNpbmNsdWRlICJDT01QdHIuaCIKLQotaW50ZXJmYWNlIElEV3JpdGVGYWN0b3J5
NTsKLWludGVyZmFjZSBJRFdyaXRlRm9udDsKLWludGVyZmFjZSBJRFdyaXRlRm9udENvbGxlY3Rp
b247Ci1pbnRlcmZhY2UgSURXcml0ZUZvbnRDb2xsZWN0aW9uMTsKLWludGVyZmFjZSBJRFdyaXRl
Rm9udEZhbWlseTsKLWludGVyZmFjZSBJRFdyaXRlR2RpSW50ZXJvcDsKLQotZW51bSBEV1JJVEVf
Rk9OVF9XRUlHSFQ7Ci1lbnVtIERXUklURV9GT05UX1NUWUxFOwotZW51bSBEV1JJVEVfRk9OVF9T
VFJFVENIOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7
Ci1jbGFzcyBGcmFnbWVudGVkU2hhcmVkQnVmZmVyOwotCi1uYW1lc3BhY2UgRGlyZWN0V3JpdGUg
ewotCi1JRFdyaXRlRmFjdG9yeTUqIGZhY3RvcnkoKTsKLUlEV3JpdGVHZGlJbnRlcm9wKiBnZGlJ
bnRlcm9wKCk7Ci0KLUlEV3JpdGVGb250Q29sbGVjdGlvbjEqIHdlYlByb2Nlc3NGb250Q29sbGVj
dGlvbigpOwotCi1IUkVTVUxUIGFkZEZvbnRGcm9tRGF0YVRvUHJvY2Vzc0NvbGxlY3Rpb24oY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBmb250RGF0YSk7Ci1DT01QdHI8SURXcml0ZUZvbnRGYW1pbHk+
IGZvbnRGYW1pbHlGb3JDb2xsZWN0aW9uKElEV3JpdGVGb250Q29sbGVjdGlvbiosIGNvbnN0IFZl
Y3Rvcjx3Y2hhcl90PiYgbG9jYWxlTmFtZSwgY29uc3QgTE9HRk9OVCYpOwotQ09NUHRyPElEV3Jp
dGVGb250PiBjcmVhdGVXaXRoUGxhdGZvcm1Gb250KGNvbnN0IExPR0ZPTlQmKTsKLVZlY3Rvcjx3
Y2hhcl90PiBmYW1pbHlOYW1lRm9yTG9jYWxlKElEV3JpdGVGb250RmFtaWx5KiwgY29uc3QgVmVj
dG9yPHdjaGFyX3Q+JiBsb2NhbGVOYW1lKTsKLQotRFdSSVRFX0ZPTlRfV0VJR0hUIGZvbnRXZWln
aHQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotRFdSSVRFX0ZPTlRfU1RZTEUgZm9udFN0eWxl
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLURXUklURV9GT05UX1NUUkVUQ0ggZm9udFN0cmV0
Y2goY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotCi19IC8vIG5hbWVzcGFjZSBEaXJlY3RXcml0
ZQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRQb2ludERpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UG9pbnREaXJlY3QyRC5jcHAJKG5vbmV4
aXN0ZW50KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTYg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCi0KLSNpZiBQTEFURk9STShXSU4pCi0KLSNpbmNsdWRlIDxkMmQxLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotRmxvYXRQb2ludDo6RmxvYXRQb2ludChjb25zdCBEMkRfUE9J
TlRfMkYmIHApCi0gICAgOiBtX3gocC54KQotICAgICwgbV95KHAueSkKLXsKLX0KLQotRmxvYXRQ
b2ludDo6b3BlcmF0b3IgRDJEX1BPSU5UXzJGKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRDJEMTo6
UG9pbnQyRihtX3gsIG1feSk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFJlY3REaXJlY3Qy
RC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0Zsb2F0UmVjdERpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UmVjdERpcmVjdDJELmNwcAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgot
Ci0jaWYgUExBVEZPUk0oV0lOKQotCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUg
PGQyZDEuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgYm9vbCBpc0luZmluaXRl
UmVjdChjb25zdCBEMkQxX1JFQ1RfRiYgcmVjdCkKLXsKLSAgICBpZiAoIXN0ZDo6aXNpbmYocmVj
dC50b3ApICYmIHJlY3QudG9wICE9IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc3RkOjppc2luZihyZWN0LmxlZnQp
ICYmIHJlY3QubGVmdCAhPSAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXN0ZDo6aXNpbmYocmVjdC5ib3R0b20pICYm
IHJlY3QuYm90dG9tICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFzdGQ6OmlzaW5mKHJlY3QucmlnaHQpICYmIHJl
Y3QucmlnaHQgIT0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotRmxvYXRSZWN0OjpGbG9hdFJl
Y3QoY29uc3QgUkVDVCYgcmVjdCkKLSAgICA6IG1fbG9jYXRpb24ocmVjdC5sZWZ0LCByZWN0LnRv
cCkKLSAgICAsIG1fc2l6ZShyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJl
Y3QudG9wKQotewotfQotCi1GbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBEMkQxX1JFQ1RfRiYg
cikKLXsKLSAgICAvLyBJbmZpbml0ZSBSZWN0IGNhc2U6Ci0gICAgaWYgKGlzSW5maW5pdGVSZWN0
KHIpKSB7Ci0gICAgICAgICp0aGlzID0gaW5maW5pdGVSZWN0KCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtX2xvY2F0aW9uID0gRmxvYXRQb2ludChyLmxlZnQsIHIudG9wKTsKLSAg
ICBtX3NpemUgPSBGbG9hdFNpemUoci5yaWdodCAtIHIubGVmdCwgci5ib3R0b20gLSByLnRvcCk7
Ci19Ci0KLUZsb2F0UmVjdDo6b3BlcmF0b3IgRDJEMV9SRUNUX0YoKSBjb25zdAotewotICAgIHJl
dHVybiBEMkQxOjpSZWN0Rih4KCksIHkoKSwgbWF4WCgpLCBtYXhZKCkpOwotfQotCi19Ci0KLSNl
bmRpZiAvLyBQTEFURk9STShXSU4pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRmxvYXRTaXplRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFNpemVEaXJlY3QyRC5jcHAJKHJldmlzaW9u
IDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFNp
emVEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLQotI2lmIFBMQVRGT1JNKFdJTikKLQotI2lu
Y2x1ZGUgPGQyZDEuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GbG9hdFNpemU6OkZsb2F0
U2l6ZShjb25zdCBEMkQxX1NJWkVfRiYgcykKLSAgICA6IG1fd2lkdGgocy53aWR0aCkKLSAgICAs
IG1faGVpZ2h0KHMuaGVpZ2h0KQotewotfQotCi1GbG9hdFNpemU6Om9wZXJhdG9yIEQyRDFfU0la
RV9GKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRDJEMTo6U2l6ZUYobV93aWR0aCwgbV9oZWlnaHQp
OwotfQotCi19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShXSU4pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGly
ZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwx
NDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0KLSNpZiBV
U0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJD
T01QdHIuaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGb250Lmgi
Ci0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oIgotI2lu
Y2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgot
I2luY2x1ZGUgIldlYkNvcmVUZXh0UmVuZGVyZXIuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5j
bHVkZSA8ZHdyaXRlXzMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
JiBnbHlwaEJ1ZmZlciwKLSAgICB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQot
ewotICAgIGF1dG8gY29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+
cmVuZGVyVGFyZ2V0KCk7Ci0gICAgYm9vbCBzaG91bGRVc2VGb250U21vb3RoaW5nID0gV2ViQ29y
ZVNob3VsZFVzZUZvbnRTbW9vdGhpbmcoKTsKLQotICAgIHN3aXRjaCAoc21vb3RoaW5nTW9kZSkg
ewotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkFudGlhbGlhc2VkOgotICAgICAgICBncmFw
aGljc0NvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKHRydWUpOwotICAgICAgICBzaG91bGRVc2VG
b250U21vb3RoaW5nID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFNtb290
aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQ6Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5z
ZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7Ci0gICAgICAgIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcg
PSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpOb1Nt
b290aGluZzoKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyhmYWxz
ZSk7Ci0gICAgICAgIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBmYWxzZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZzoKLSAgICAgICAg
Ly8gRm9yIHRoZSBBdXRvU21vb3RoIGNhc2UsIGRvbid0IGRvIGFueXRoaW5nISBLZWVwIHRoZSBk
ZWZhdWx0IHNldHRpbmdzLgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBwbGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3JtRGF0YSgpOwotCi0gICAgZ3JhcGhpY3NDb250
ZXh0LnNhdmUoKTsKLQotICAgIEQyRDFfTUFUUklYXzNYMl9GIG1hdHJpeDsKLSAgICBjb250ZXh0
LT5HZXRUcmFuc2Zvcm0oJm1hdHJpeCk7Ci0KLSAgICBpZiAocGxhdGZvcm1EYXRhLnN5bnRoZXRp
Y09ibGlxdWUoKSkgewotICAgICAgICBzdGF0aWMgZmxvYXQgc2tldyA9IC10YW5mKHN5bnRoZXRp
Y09ibGlxdWVBbmdsZSgpICogcGlGbG9hdCAvIDE4MC4wZik7Ci0gICAgICAgIGF1dG8gc2tld01h
dHJpeCA9IEQyRDE6Ok1hdHJpeDN4MkY6OlNrZXcoc2tldywgMCk7Ci0gICAgICAgIGNvbnRleHQt
PlNldFRyYW5zZm9ybShtYXRyaXggKiBza2V3TWF0cml4KTsKLSAgICB9Ci0KLSAgICBSRUxFQVNF
X0FTU0VSVChwbGF0Zm9ybURhdGEuZHdGb250KCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKHBsYXRm
b3JtRGF0YS5kd0ZvbnRGYWNlKCkpOwotCi0gICAgVmVjdG9yPEZMT0FUPiBob3Jpem9udGFsQWR2
YW5jZXMobnVtR2x5cGhzKTsKLSAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4gb2Zmc2V0
QWR2YW5jZXMobnVtR2x5cGhzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5
cGhzOyArK2kpIHsKLSAgICAgICAgaWYgKGkgKyBmcm9tID49IGdseXBoQnVmZmVyLmFkdmFuY2Vz
Q291bnQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGF1dG8gYWR2YW5jZSA9IGds
eXBoQnVmZmVyLmFkdmFuY2VzKGkgKyBmcm9tKTsKLSAgICAgICAgaWYgKCFhZHZhbmNlKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaG9yaXpvbnRhbEFkdmFuY2VzW2ldID0gYWR2
YW5jZS0+d2lkdGgoKTsKLSAgICAgICAgb2Zmc2V0QWR2YW5jZXNbaV0uYWR2YW5jZU9mZnNldCA9
IGFkdmFuY2UtPndpZHRoKCk7Ci0gICAgICAgIG9mZnNldEFkdmFuY2VzW2ldLmFzY2VuZGVyT2Zm
c2V0ID0gYWR2YW5jZS0+aGVpZ2h0KCk7Ci0gICAgfQotCi0gICAgRFdSSVRFX0dMWVBIX1JVTiBn
bHlwaFJ1bjsKLSAgICBnbHlwaFJ1bi5mb250RmFjZSA9IHBsYXRmb3JtRGF0YS5kd0ZvbnRGYWNl
KCk7Ci0gICAgZ2x5cGhSdW4uZm9udEVtU2l6ZSA9IHBsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAg
Z2x5cGhSdW4uZ2x5cGhDb3VudCA9IG51bUdseXBoczsKLSAgICBnbHlwaFJ1bi5nbHlwaEluZGlj
ZXMgPSBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSk7Ci0gICAgZ2x5cGhSdW4uZ2x5cGhBZHZhbmNl
cyA9IGhvcml6b250YWxBZHZhbmNlcy5kYXRhKCk7Ci0gICAgZ2x5cGhSdW4uZ2x5cGhPZmZzZXRz
ID0gbnVsbHB0cjsKLSAgICBnbHlwaFJ1bi5pc1NpZGV3YXlzID0gcGxhdGZvcm1EYXRhLm9yaWVu
dGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbDsKLSAgICBnbHlwaFJ1bi5iaWRp
TGV2ZWwgPSAwOwotCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBzaGFk
b3dCbHVyOwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgIGdyYXBoaWNzQ29udGV4dC5nZXRT
aGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7Ci0KLSAgICBib29s
IGhhc1NpbXBsZVNoYWRvdyA9IGdyYXBoaWNzQ29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBU
ZXh0RHJhd2luZ01vZGU6OkZpbGwgJiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmICFzaGFkb3dC
bHVyICYmICghZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgZ3Jh
cGhpY3NDb250ZXh0LmdldENUTSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkp
OwotICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpIHsKLSAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNo
YWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9p
ZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgotICAgICAgICBncmFwaGljc0NvbnRleHQu
Y2xlYXJTaGFkb3coKTsKLSAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gZ3JhcGhpY3NDb250ZXh0
LmZpbGxDb2xvcigpOwotICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xv
ci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOwot
ICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0
aCgpOwotICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVu
IHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlz
IG5lZ2F0aXZlLgotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRv
d09mZnNldC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMoKSA/IC0xIDogMSk7Ci0KLSAgICAgICAgYXV0byBzaGFkb3dCcnVzaCA9IGdyYXBoaWNzQ29u
dGV4dC5icnVzaFdpdGhDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAgICAgICBjb250ZXh0LT5E
cmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCAmZ2x5
cGhSdW4sIHNoYWRvd0JydXNoKTsKLSAgICAgICAgaWYgKGZvbnQuc3ludGhldGljQm9sZE9mZnNl
dCgpKQotICAgICAgICAgICAgY29udGV4dC0+RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50MkYoc2hh
ZG93VGV4dFggKyBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwgc2hhZG93VGV4dFkpLCAmZ2x5
cGhSdW4sIHNoYWRvd0JydXNoKTsKLSAgICB9Ci0KLSAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4o
RDJEMTo6UG9pbnQyRihwb2ludC54KCksIHBvaW50LnkoKSksICZnbHlwaFJ1biwgZ3JhcGhpY3ND
b250ZXh0LnNvbGlkRmlsbEJydXNoKCkpOwotICAgIGlmIChmb250LnN5bnRoZXRpY0JvbGRPZmZz
ZXQoKSkKLSAgICAgICAgY29udGV4dC0+RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50MkYocG9pbnQu
eCgpICsgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSksICZnbHlwaFJ1biwg
Z3JhcGhpY3NDb250ZXh0LnNvbGlkRmlsbEJydXNoKCkpOwotCi0gICAgaWYgKGhhc1NpbXBsZVNo
YWRvdykKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNo
YWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKLQotICAgIGdyYXBoaWNzQ29udGV4dC5yZXN0b3JlKCk7
Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShy
ZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSw2
IEBACiAjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNlbmRpZgogCi0j
aWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIkRpcmVjdFdyaXRlVXRpbGl0aWVzLmgiCi0jaW5j
bHVkZSA8ZHdyaXRlXzMuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZvbnRD
dXN0b21QbGF0Zm9ybURhdGE6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGEoY29uc3QgU3RyaW5nJiBu
YW1lLCBGb250UGxhdGZvcm1EYXRhOjpDcmVhdGlvbkRhdGEmJiBjcmVhdGlvbkRhdGEpCkBAIC03
Myw3ICs2OCw3IEBAIEZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YToKICAg
ICBsb2dGb250LmxmVW5kZXJsaW5lID0gZmFsc2U7CiAgICAgbG9nRm9udC5sZlN0cmlrZU91dCA9
IGZhbHNlOwogICAgIGxvZ0ZvbnQubGZDaGFyU2V0ID0gREVGQVVMVF9DSEFSU0VUOwotI2lmIFVT
RShDRykgfHwgVVNFKENBSVJPKSB8fCBVU0UoRElSRUNUMkQpCisjaWYgVVNFKENHKSB8fCBVU0Uo
Q0FJUk8pCiAgICAgbG9nRm9udC5sZk91dFByZWNpc2lvbiA9IE9VVF9UVF9PTkxZX1BSRUNJUzsK
ICNlbHNlCiAgICAgbG9nRm9udC5sZk91dFByZWNpc2lvbiA9IE9VVF9UVF9QUkVDSVM7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YURp
cmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udFBsYXRmb3JtRGF0YURpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJl
Y3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0j
aW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJIV25kREMuaCIKLSNpbmNsdWRlICJTaGFyZWRHRElPYmplY3QuaCIK
LSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8ZHdyaXRlXzMuaD4KLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBGb250UGxhdGZvcm1EYXRh
OjpwbGF0Zm9ybURhdGFJbml0KEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIEhEQyBoZGMsIFdDSEFS
KiBmYWNlTmFtZSkKLXsKLSAgICBMT0dGT05UIGxvZ2ZvbnQ7Ci0gICAgSFJFU1VMVCBociA9IDo6
R2V0T2JqZWN0KGZvbnQsIHNpemVvZihMT0dGT05UKSwgJmxvZ2ZvbnQpOwotICAgIGlmIChTVUND
RUVERUQoaHIpKQotICAgICAgICBtX2R3Rm9udCA9IERpcmVjdFdyaXRlOjpjcmVhdGVXaXRoUGxh
dGZvcm1Gb250KGxvZ2ZvbnQpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fZHdGb250KTsKLQotICAg
IGhyID0gbV9kd0ZvbnQtPkNyZWF0ZUZvbnRGYWNlKCZtX2R3Rm9udEZhY2UpOwotICAgIFJFTEVB
U0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgaWYgKCFtX3VzZUdESSkKLSAgICAgICAg
bV9pc1N5c3RlbUZvbnQgPSAhd2NzY21wKGZhY2VOYW1lLCBMIkx1Y2lkYSBHcmFuZGUiKTsKLX0K
LQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+JiYg
aGZvbnQsIENPTVB0cjxJRFdyaXRlRm9udD4mJiBmb250LCBmbG9hdCBzaXplLCBib29sIGJvbGQs
IGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpCi0gICAgOiBtX3N5bnRoZXRpY0JvbGQoYm9sZCkK
LSAgICAsIG1fc3ludGhldGljT2JsaXF1ZShvYmxpcXVlKQotICAgICwgbV9zaXplKHNpemUpCi0g
ICAgLCBtX2ZvbnQoU2hhcmVkR0RJT2JqZWN0PEhGT05UPjo6Y3JlYXRlKFdURk1vdmUoaGZvbnQp
KSkKLSAgICAsIG1fZHdGb250KFdURk1vdmUoZm9udCkpCi0gICAgLCBtX3VzZUdESSh1c2VHREkp
Ci17Ci0gICAgSFJFU1VMVCBociA9IG1fZHdGb250LT5DcmVhdGVGb250RmFjZSgmbV9kd0ZvbnRG
YWNlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLX0KLQotc3RhdGljIGJv
b2wgZm9udHNBcmVFcXVhbChJRFdyaXRlRm9udCogYSwgSURXcml0ZUZvbnQqIGIpCi17Ci0gICAg
aWYgKCFhICYmICFiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChhID09IGIpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCghYSAmJiBiKSB8fCAoYSAmJiAhYikpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhLT5HZXRXZWlnaHQoKSAhPSBiLT5HZXRX
ZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGEtPkdldFN0eWxlKCkg
IT0gYi0+R2V0U3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGEtPkdl
dFN0cmV0Y2goKSAhPSBiLT5HZXRTdHJldGNoKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIERXUklURV9GT05UX01FVFJJQ1MgYU1ldHJpY3MsIGJNZXRyaWNzOwotICAgIGEtPkdldE1l
dHJpY3MoJmFNZXRyaWNzKTsKLSAgICBiLT5HZXRNZXRyaWNzKCZiTWV0cmljcyk7Ci0KLSAgICBp
ZiAoKGFNZXRyaWNzLmRlc2lnblVuaXRzUGVyRW0gIT0gYk1ldHJpY3MuZGVzaWduVW5pdHNQZXJF
bSkKLSAgICAgICAgfHwgKGFNZXRyaWNzLmFzY2VudCAhPSBiTWV0cmljcy5hc2NlbnQpCi0gICAg
ICAgIHx8IChhTWV0cmljcy5kZXNjZW50ICE9IGJNZXRyaWNzLmFzY2VudCkKLSAgICAgICAgfHwg
KGFNZXRyaWNzLmxpbmVHYXAgIT0gYk1ldHJpY3MubGluZUdhcCkKLSAgICAgICAgfHwgKGFNZXRy
aWNzLmNhcEhlaWdodCAhPSBiTWV0cmljcy5jYXBIZWlnaHQpCi0gICAgICAgIHx8IChhTWV0cmlj
cy54SGVpZ2h0ICE9IGJNZXRyaWNzLnhIZWlnaHQpCi0gICAgICAgIHx8IChhTWV0cmljcy51bmRl
cmxpbmVQb3NpdGlvbiAhPSBiTWV0cmljcy51bmRlcmxpbmVQb3NpdGlvbikKLSAgICAgICAgfHwg
KGFNZXRyaWNzLnVuZGVybGluZVRoaWNrbmVzcyAhPSBiTWV0cmljcy51bmRlcmxpbmVUaGlja25l
c3MpCi0gICAgICAgIHx8IChhTWV0cmljcy5zdHJpa2V0aHJvdWdoUG9zaXRpb24gIT0gYk1ldHJp
Y3Muc3RyaWtldGhyb3VnaFBvc2l0aW9uKQotICAgICAgICB8fCAoYU1ldHJpY3Muc3RyaWtldGhy
b3VnaFRoaWNrbmVzcyAhPSBiTWV0cmljcy5zdHJpa2V0aHJvdWdoVGhpY2tuZXNzKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXVuc2lnbmVkIEZvbnRQ
bGF0Zm9ybURhdGE6Omhhc2goKSBjb25zdAotewotICAgIHJldHVybiBtX2ZvbnQgPyBtX2ZvbnQt
Pmhhc2goKSA6IDA7Ci19Ci0KLWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1Jc0VxdWFs
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiBtX2Zv
bnQgPT0gb3RoZXIubV9mb250Ci0gICAgICAgICYmIG1fdXNlR0RJID09IG90aGVyLm1fdXNlR0RJ
Ci0gICAgICAgICYmIGZvbnRzQXJlRXF1YWwobV9kd0ZvbnQuZ2V0KCksIG90aGVyLm1fZHdGb250
LmdldCgpKTsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVE
aXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQp
CkBAIC0xLDEwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdlLmgiCi0K
LSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJlY3RXcml0ZVV0aWxpdGllcy5oIgot
I2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJUZXh0QW5hbHl6ZXJIZWxwZXIuaCIKLSNpbmNs
dWRlIDxkd3JpdGVfMy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgR2x5cGhQYWdl
OjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkKLXsKLSAgICBpZiAo
YnVmZmVyTGVuZ3RoID4gR2x5cGhQYWdlOjpzaXplKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBjb25zdCBGb250JiBmb250ID0gdGhpcy0+Zm9udCgpOwotICAgIGJvb2wgaGF2ZUdseXBo
cyA9IGZhbHNlOwotCi0gICAgQ09NUHRyPElEV3JpdGVUZXh0QW5hbHl6ZXI+IGFuYWx5emVyOwot
ICAgIEhSRVNVTFQgaHIgPSBEaXJlY3RXcml0ZTo6ZmFjdG9yeSgpLT5DcmVhdGVUZXh0QW5hbHl6
ZXIoJmFuYWx5emVyKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAg
IGF1dG8mIGZvbnRQbGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3JtRGF0YSgpOwotCi0gICAgVUNo
YXIgbG9jYWxlTmFtZVtMT0NBTEVfTkFNRV9NQVhfTEVOR1RIICsgMV0gPSB7IH07Ci0gICAgaW50
IGxvY2FsZUxlbmd0aCA9IEdldFVzZXJEZWZhdWx0TG9jYWxlTmFtZShyZWludGVycHJldF9jYXN0
PExQV1NUUj4oJmxvY2FsZU5hbWUpLCBMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKLSAgICBSRUxF
QVNFX0FTU0VSVChsb2NhbGVMZW5ndGggPD0gTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7Ci0KLSAg
ICBUZXh0QW5hbHl6ZXJIZWxwZXIgaGVscGVyKHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmbG9j
YWxlTmFtZSksIHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPihidWZmZXIpLCBidWZmZXJMZW5ndGgp
OwotCi0gICAgaHIgPSBhbmFseXplci0+QW5hbHl6ZVNjcmlwdCgmaGVscGVyLCAwLCBidWZmZXJM
ZW5ndGgsICZoZWxwZXIpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0g
ICAgVmVjdG9yPEdseXBoPiBnbHlwaHMoR2x5cGhQYWdlOjpzaXplLCAwKTsKLSAgICBWZWN0b3I8
R2x5cGg+IGNsdXN0ZXJNYXAoR2x5cGhQYWdlOjpzaXplLCAwKTsKLSAgICBWZWN0b3I8RFdSSVRF
X1NIQVBJTkdfVEVYVF9QUk9QRVJUSUVTPiB0ZXh0UHJvcGVydGllcyhHbHlwaFBhZ2U6OnNpemUp
OwotICAgIFZlY3RvcjxEV1JJVEVfU0hBUElOR19HTFlQSF9QUk9QRVJUSUVTPiBnbHlwaFByb3Bl
cnRpZXMoR2x5cGhQYWdlOjpzaXplKTsKLQotICAgIGNvbnN0IFdDSEFSKiB0ZXh0U3RhcnQgPSBy
ZWludGVycHJldF9jYXN0PExQQ1dTVFI+KGJ1ZmZlcik7Ci0gICAgR2x5cGgqIGdseXBoRGF0YSA9
IGdseXBocy5kYXRhKCk7Ci0gICAgR2x5cGgqIGNsdXN0ZXJNYXBEYXRhID0gY2x1c3Rlck1hcC5k
YXRhKCk7Ci0gICAgRFdSSVRFX1NIQVBJTkdfVEVYVF9QUk9QRVJUSUVTKiB0ZXh0UHJvcGVydGll
c0RhdGEgPSB0ZXh0UHJvcGVydGllcy5kYXRhKCk7Ci0gICAgRFdSSVRFX1NIQVBJTkdfR0xZUEhf
UFJPUEVSVElFUyogZ2x5cGhQcm9wZXJ0aWVzRGF0YSA9IGdseXBoUHJvcGVydGllcy5kYXRhKCk7
Ci0KLSAgICB1bnNpZ25lZCB0b3RhbCA9IDA7Ci0gICAgdW5zaWduZWQgbWF4R2x5cGhDb3VudCA9
IEdseXBoUGFnZTo6c2l6ZTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHJ1biA6IGhlbHBlci5tX2Fu
YWx5emVkUnVucykgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCh0b3RhbCArIHJ1bi5sZW5ndGgg
PD0gYnVmZmVyTGVuZ3RoKTsKLQotICAgICAgICB1bnNpZ25lZCByZXR1cm5lZENvdW50ID0gMDsK
LSAgICAgICAgaHIgPSBhbmFseXplci0+R2V0R2x5cGhzKHRleHRTdGFydCArIHJ1bi5zdGFydFBv
c2l0aW9uLCBydW4ubGVuZ3RoLCBmb250UGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKSwgZm9udFBs
YXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwsIGZh
bHNlLAotICAgICAgICAgICAgJnJ1bi5hbmFseXNpcywgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0
ciwgbnVsbHB0ciwgMCwgbWF4R2x5cGhDb3VudCwgY2x1c3Rlck1hcERhdGEsIHRleHRQcm9wZXJ0
aWVzRGF0YSwKLSAgICAgICAgICAgIGdseXBoRGF0YSwgZ2x5cGhQcm9wZXJ0aWVzRGF0YSwgJnJl
dHVybmVkQ291bnQpOwotCi0gICAgICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICBnbHlwaERhdGEgKz0gcmV0dXJuZWRDb3VudDsKLSAg
ICAgICAgY2x1c3Rlck1hcERhdGEgKz0gcmV0dXJuZWRDb3VudDsKLSAgICAgICAgdGV4dFByb3Bl
cnRpZXNEYXRhICs9IHJldHVybmVkQ291bnQ7Ci0gICAgICAgIGdseXBoUHJvcGVydGllc0RhdGEg
Kz0gcmV0dXJuZWRDb3VudDsKLSAgICAgICAgbWF4R2x5cGhDb3VudCAtPSByZXR1cm5lZENvdW50
OwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7
ICsraSkgewotICAgICAgICBHbHlwaCBnbHlwaCA9IGdseXBoc1tpXTsKLSAgICAgICAgaWYgKCFn
bHlwaCkKLSAgICAgICAgICAgIHNldEdseXBoRm9ySW5kZXgoaSwgMCk7Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCBnbHlwaCk7Ci0gICAgICAgICAgICBo
YXZlR2x5cGhzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBoYXZlR2x5
cGhzOwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkocmV2aXNpb24g
Mjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50
RGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsMjA1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkdyYWRpZW50LmgiCi0KLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
LQotI2RlZmluZSBHUkFESUVOVF9EUkFXSU5HIDMKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12
b2lkIEdyYWRpZW50OjpzdG9wc0NoYW5nZWQoKQotewotICAgIG1fYnJ1c2ggPSBudWxscHRyOwot
fQotCi1zdGF0aWMgYm9vbCBjaXJjbGVJc0VudGlyZWx5Q29udGFpbmVkKGNvbnN0IEZsb2F0UG9p
bnQmIGNlbnRlckEsIGZsb2F0IHJhZGl1c0EsIGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlckIsIGZs
b2F0IHJhZGl1c0IpCi17Ci0gICAgZG91YmxlIGRlbHRhWCA9IGNlbnRlckIueCgpIC0gY2VudGVy
QS54KCk7Ci0gICAgZG91YmxlIGRlbHRhWSA9IGNlbnRlckIueSgpIC0gY2VudGVyQS55KCk7Ci0g
ICAgZG91YmxlIGRlbHRhUmFkaXVzID0gcmFkaXVzQiAtIHJhZGl1c0E7Ci0KLSAgICByZXR1cm4g
ZGVsdGFYICogZGVsdGFYICsgZGVsdGFZICogZGVsdGFZIDwgZGVsdGFSYWRpdXMgKiBkZWx0YVJh
ZGl1cyAmJiByYWRpdXNBIDwgcmFkaXVzQjsKLX0KLQotSUQyRDFCcnVzaCogR3JhZGllbnQ6OmNy
ZWF0ZUJydXNoKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCi17Ci0gICAgc29ydFN0
b3BzKCk7Ci0KLSAgICBWZWN0b3I8RDJEMV9HUkFESUVOVF9TVE9QPiBncmFkaWVudFN0b3BzOwot
ICAgIGdyYWRpZW50U3RvcHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3N0b3BzLnNpemUoKSk7
Ci0gICAgZm9yIChhdXRvJiBzdG9wIDogbV9zdG9wcykgewotICAgICAgICAvLyBGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIG5vbi1zUkdCQSBjb2xvciBzcGFjZXMuCi0gICAgICAgIGF1dG8gW3IsIGcs
IGIsIGFdIHN0b3AuY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2
ZWQoKTsKLSAgICAgICAgZ3JhZGllbnRTdG9wcy5ncmFkaWVudFN0b3BzLnVuY2hlY2tlZEFwcGVu
ZChEMkQxOjpHcmFkaWVudFN0b3Aoc3RvcC5vZmZzZXQsIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBh
KSkpOwotICAgIH0KLQotICAgIFdURjo6c3dpdGNoT24obV9kYXRhLAotICAgICAgICBbJl0gKGNv
bnN0IExpbmVhckRhdGEmKSB7Ci0gICAgICAgICAgICAvLyBObyBhY3Rpb24gbmVlZGVkLgotICAg
ICAgICB9LAotICAgICAgICBbJl0gKFJhZGlhbERhdGEmIGRhdGEpIHsKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGRhdGEuc3RhcnRSYWRpdXMgPj0gMCk7Ci0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChkYXRhLmVuZFJhZGl1cyA+PSAwKTsKLQotICAgICAgICAgICAgaWYgKGRhdGEuc3Rh
cnRSYWRpdXMgPiBkYXRhLmVuZFJhZGl1cykgewotICAgICAgICAgICAgICAgIGdyYWRpZW50U3Rv
cHMucmV2ZXJzZSgpOwotICAgICAgICAgICAgICAgIGZvciAoYXV0byYgc3RvcCA6IGdyYWRpZW50
U3RvcHMpCi0gICAgICAgICAgICAgICAgICAgIHN0b3AucG9zaXRpb24gPSAxLjAgLSBzdG9wLnBv
c2l0aW9uOwotCi0gICAgICAgICAgICAgICAgc3RkOjpzd2FwKGRhdGEuc3RhcnRSYWRpdXMsIGRh
dGEuZW5kUmFkaXVzKTsKLSAgICAgICAgICAgICAgICBzdGQ6OnN3YXAoZGF0YS5wb2ludDAsIGRh
dGEucG9pbnQxKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGRhdGEuc3RhcnRS
YWRpdXMpIHsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChkYXRhLmVuZFJhZGl1cyA+
IDApOwotICAgICAgICAgICAgICAgIGZsb2F0IHN0YXJ0UG9zaXRpb24gPSBkYXRhLnN0YXJ0UmFk
aXVzIC8gZGF0YS5lbmRSYWRpdXM7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3Rh
cnRQb3NpdGlvbiA8PSAxLjApOwotICAgICAgICAgICAgICAgIGZsb2F0IGF2YWlsYWJsZVJhbmdl
ID0gMS4wIC0gc3RhcnRQb3NpdGlvbjsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChh
dmFpbGFibGVSYW5nZSA8PSAxLjAgJiYgYXZhaWxhYmxlUmFuZ2UgPj0gMCk7Ci0KLSAgICAgICAg
ICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiBncmFkaWVudFN0b3BzKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHN0b3AucG9zaXRpb24gKj0gYXZhaWxhYmxlUmFuZ2U7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0b3AucG9zaXRpb24gKz0gc3RhcnRQb3NpdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSAnc3RhcnQnIHBvc2l0aW9uCi0gICAgICAg
ICAgICAgICAgYXV0byBmaXJzdFN0b3AgPSBncmFkaWVudFN0b3BzLmZpcnN0KCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoZmlyc3RTdG9wLnBvc2l0aW9u
LCAwLjBmKSkgewotICAgICAgICAgICAgICAgICAgICBmaXJzdFN0b3AucG9zaXRpb24gPSAwOwot
ICAgICAgICAgICAgICAgICAgICBncmFkaWVudFN0b3BzLmluc2VydCgwLCBmaXJzdFN0b3ApOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgWyZd
IChjb25zdCBDb25pY0RhdGEmKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQXNzZXNzIHdoZXRo
ZXIgbmVlZGVkIGZvciBDb25pYyBHcmFkaWVudHMuCi0gICAgICAgIH0KLSAgICApOwotCi0gICAg
Q09NUHRyPElEMkQxR3JhZGllbnRTdG9wQ29sbGVjdGlvbj4gZ3JhZGllbnRTdG9wQ29sbGVjdGlv
bjsKLSAgICBIUkVTVUxUIGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVHcmFkaWVudFN0b3BDb2xs
ZWN0aW9uKGdyYWRpZW50U3RvcHMuZGF0YSgpLCBncmFkaWVudFN0b3BzLnNpemUoKSwgJmdyYWRp
ZW50U3RvcENvbGxlY3Rpb24pOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwot
Ci0gICAgV1RGOjpzd2l0Y2hPbihtX2RhdGEsCi0gICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0
YSYgZGF0YSkgewotICAgICAgICAgICAgSUQyRDFMaW5lYXJHcmFkaWVudEJydXNoKiBsaW5lYXJH
cmFkaWVudCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRl
TGluZWFyR3JhZGllbnRCcnVzaCgKLSAgICAgICAgICAgICAgICBEMkQxOjpMaW5lYXJHcmFkaWVu
dEJydXNoUHJvcGVydGllcyhkYXRhLnBvaW50MCwgZGF0YS5wb2ludDEpLAotICAgICAgICAgICAg
ICAgIEQyRDE6OkJydXNoUHJvcGVydGllcygpLCBncmFkaWVudFN0b3BDb2xsZWN0aW9uLmdldCgp
LAotICAgICAgICAgICAgICAgICZsaW5lYXJHcmFkaWVudCk7Ci0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgICAgIG1fYnJ1c2ggPSBhZG9wdENPTShs
aW5lYXJHcmFkaWVudCk7Ci0gICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0
YSYgZGF0YSkgewotICAgICAgICAgICAgRmxvYXRTaXplIG9mZnNldDsKLSAgICAgICAgICAgIGlm
ICghY2lyY2xlSXNFbnRpcmVseUNvbnRhaW5lZChkYXRhLnBvaW50MCwgZGF0YS5zdGFydFJhZGl1
cywgZGF0YS5wb2ludDEsIGRhdGEuZW5kUmFkaXVzKSkKLSAgICAgICAgICAgICAgICBvZmZzZXQg
PSAoZGF0YS5wb2ludDEuc2NhbGVkKGRhdGEuc3RhcnRSYWRpdXMpIC0gZGF0YS5wb2ludDAuc2Nh
bGVkKGRhdGEuZW5kUmFkaXVzKSkgLyAoZGF0YS5lbmRSYWRpdXMgLSBkYXRhLnN0YXJ0UmFkaXVz
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBkYXRhLnBvaW50
MCAtIGRhdGEucG9pbnQxOwotCi0gICAgICAgICAgICBGbG9hdFBvaW50IGNlbnRlciA9IGRhdGEu
cG9pbnQxOwotICAgICAgICAgICAgZmxvYXQgcmFkaXVzWCA9IGRhdGEuZW5kUmFkaXVzOwotICAg
ICAgICAgICAgZmxvYXQgcmFkaXVzWSA9IHJhZGl1c1ggLyBkYXRhLmFzcGVjdFJhdGlvOwotCi0g
ICAgICAgICAgICBJRDJEMVJhZGlhbEdyYWRpZW50QnJ1c2gqIHJhZGlhbEdyYWRpZW50ID0gbnVs
bHB0cjsKLSAgICAgICAgICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVSYWRpYWxHcmFkaWVu
dEJydXNoKAotICAgICAgICAgICAgICAgIEQyRDE6OlJhZGlhbEdyYWRpZW50QnJ1c2hQcm9wZXJ0
aWVzKGNlbnRlciwgRDJEMTo6UG9pbnQyRihvZmZzZXQud2lkdGgoKSwgb2Zmc2V0LmhlaWdodCgp
KSwgcmFkaXVzWCwgcmFkaXVzWSksCi0gICAgICAgICAgICAgICAgRDJEMTo6QnJ1c2hQcm9wZXJ0
aWVzKCksIGdyYWRpZW50U3RvcENvbGxlY3Rpb24uZ2V0KCksCi0gICAgICAgICAgICAgICAgJnJh
ZGlhbEdyYWRpZW50KTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OwotICAgICAgICAgICAgbV9icnVzaCA9IGFkb3B0Q09NKHJhZGlhbEdyYWRpZW50KTsKLSAgICAg
ICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBDb25pY0RhdGEmKSB7Ci0gICAgICAgICAgICAvLyBG
SVhNRTogaW1wbGVtZW50IGNvbmljIGdyYWRpZW50IHJlbmRlcmluZy4KLSAgICAgICAgICAgIG1f
YnJ1c2ggPSBudWxscHRyOwotICAgICAgICB9Ci0gICAgKTsKLQotICAgIHJldHVybiBtX2JydXNo
LmdldCgpOwotfQotCi12b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8gZDJkQ29udGV4dCA9IGNvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpOwotCi0gICAgV1RGOjpzd2l0Y2hP
bihtX2RhdGEsCi0gICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgewotICAgICAg
ICAgICAgLy8gRklYTUU6IElmIHdlIGhhdmUgYSBicnVzaCwgd2h5IGNhbiB3ZSByZS11c2UgaXQ/
IFdoYXQgZ3VhcmFudGVlcyBpdCdzIHJpZ2h0IGZvciB0aGlzIGNvbnRleHQ/Ci0gICAgICAgICAg
ICBpZiAoIW1fYnJ1c2gpCi0gICAgICAgICAgICAgICAgY3JlYXRlQnJ1c2goZDJkQ29udGV4dCk7
Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICAgICAgZDJkQ29udGV4dC0+U2V0VGFncyhH
UkFESUVOVF9EUkFXSU5HLCBfX0xJTkVfXyk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgY29uc3Qg
RDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7Ci0gICAgICAgICAgICBkMmRDb250ZXh0LT5GaWxs
UmVjdGFuZ2xlKCZkMmRSZWN0LCBtX2JydXNoLmdldCgpKTsKLSAgICAgICAgfSwKLSAgICAgICAg
WyZdIChjb25zdCBSYWRpYWxEYXRhJiBkYXRhKSB7Ci0gICAgICAgICAgICBib29sIG5lZWRTY2Fs
aW5nID0gZGF0YS5hc3BlY3RSYXRpbyAhPSAxOwotICAgICAgICAgICAgaWYgKG5lZWRTY2FsaW5n
KSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5zYXZlKCk7Ci0gICAgICAgICAgICAgICAgLy8g
U2NhbGUgZnJvbSB0aGUgY2VudGVyIG9mIHRoZSBncmFkaWVudC4gV2Ugb25seSBldmVyIHNjYWxl
IG5vbi1kZXByZWNhdGVkIGdyYWRpZW50cywKLSAgICAgICAgICAgICAgICAvLyBmb3Igd2hpY2gg
bV9wMCA9PSBtX3AxLgotICAgICAgICAgICAgICAgIEFTU0VSVChkYXRhLnBvaW50MCA9PSBkYXRh
LnBvaW50MSk7Ci0KLSAgICAgICAgICAgICAgICBEMkQxX01BVFJJWF8zWDJfRiBjdG0gPSB7IH07
Ci0gICAgICAgICAgICAgICAgZDJkQ29udGV4dC0+R2V0VHJhbnNmb3JtKCZjdG0pOwotCi0gICAg
ICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybShjdG0pOwotICAgICAgICAgICAg
ICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoZGF0YS5wb2ludDApOwotICAgICAgICAgICAgICAgIHRy
YW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oMS4wLCAxLjAgLyBkYXRhLmFzcGVjdFJhdGlvKTsKLSAg
ICAgICAgICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1kYXRhLnBvaW50MCk7Ci0KLSAgICAg
ICAgICAgICAgICBkMmRDb250ZXh0LT5TZXRUcmFuc2Zvcm0oY3RtKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gRklYTUU6IElmIHdlIGhhdmUgYSBicnVzaCwgd2h5IGNhbiB3ZSBy
ZS11c2UgaXQ/IFdoYXQgZ3VhcmFudGVlcyBpdCdzIHJpZ2h0IGZvciB0aGlzIGNvbnRleHQ/Ci0g
ICAgICAgICAgICBpZiAoIW1fYnJ1c2gpCi0gICAgICAgICAgICAgICAgY3JlYXRlQnJ1c2goZDJk
Q29udGV4dCk7Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICAgICAgZDJkQ29udGV4dC0+
U2V0VGFncyhHUkFESUVOVF9EUkFXSU5HLCBfX0xJTkVfXyk7Ci0jZW5kaWYKLQotICAgICAgICAg
ICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7Ci0gICAgICAgICAgICBkMmRDb250
ZXh0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBtX2JydXNoLmdldCgpKTsKLQotICAgICAgICAg
ICAgaWYgKG5lZWRTY2FsaW5nKQotICAgICAgICAgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwot
ICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IENvbmljRGF0YSYpIHsKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQgY29uaWMgZ3JhZGllbnQgcmVuZGVyaW5nLgotICAgICAgICB9
Ci0gICAgKTsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCShy
ZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsOTE5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLQotI2luY2x1
ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkRpcmVjdDJET3BlcmF0aW9ucy5oIgotI2luY2x1ZGUg
IkRpcmVjdDJEVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNvcmRlci5oIgot
I2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5j
bHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RC5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDxkMmQxZWZmZWN0cy5oPgotI2luY2x1
ZGUgPGR3cml0ZV8zLmg+Ci0jaW5jbHVkZSA8d3RmL1VSTC5oPgotCi0jcHJhZ21hIHdhcm5pbmcg
KGRpc2FibGUgOiA0NzU2KQotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKEhEQyBoZGMsIGJvb2wgaGFzQWxw
aGEpCi17Ci0gICAgcGxhdGZvcm1Jbml0KGhkYywgaGFzQWxwaGEpOwotfQotCi1HcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQoSERDIGhkYywgSUQyRDFEQ1Jl
bmRlclRhcmdldCoqIHJlbmRlclRhcmdldCwgUkVDVCByZWN0LCBib29sIGhhc0FscGhhKQotewot
ICAgIC8vIENyZWF0ZSBhIERDIHJlbmRlciB0YXJnZXQuCi0gICAgYXV0byB0YXJnZXRQcm9wZXJ0
aWVzID0gRGlyZWN0MkQ6OnJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKLQotICAgIEhSRVNVTFQg
aHIgPSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEQ1Jl
bmRlclRhcmdldCgmdGFyZ2V0UHJvcGVydGllcywgcmVuZGVyVGFyZ2V0KTsKLSAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgICgqcmVuZGVyVGFyZ2V0KS0+QmluZERDKGhk
YywgJnJlY3QpOwotCi0gICAgYXV0byBvd25lZFBsYXRmb3JtQ29udGV4dCA9IG1ha2VVbmlxdWU8
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+KCpyZW5kZXJUYXJnZXQpOwotICAgIG1fZGF0YSA9IG5l
dyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoV1RGTW92ZShvd25lZFBsYXRmb3JtQ29u
dGV4dCksIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwotICAgIG1fZGF0
YS0+bV9oZGMgPSBoZGM7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpHcmFwaGljc0Nv
bnRleHREaXJlY3QyRChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmVyVHlwZSkKLXsKLSAgICBw
bGF0Zm9ybUluaXQocGxhdGZvcm1HcmFwaGljc0NvbnRleHQsIHJlbmRlcmVyVHlwZSk7Ci19Ci0K
LUlEMkQxRmFjdG9yeSogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN5c3RlbUZhY3RvcnkoKQot
ewotICAgIHN0YXRpYyBJRDJEMUZhY3RvcnkqIGRpcmVjdDJERmFjdG9yeSA9IG51bGxwdHI7Ci0g
ICAgaWYgKCFkaXJlY3QyREZhY3RvcnkpIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIEQyRDFf
RkFDVE9SWV9PUFRJT05TIG9wdGlvbnMgPSB7IH07Ci0gICAgICAgIG9wdGlvbnMuZGVidWdMZXZl
bCA9IEQyRDFfREVCVUdfTEVWRUxfSU5GT1JNQVRJT047Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBE
MkQxQ3JlYXRlRmFjdG9yeShEMkQxX0ZBQ1RPUllfVFlQRV9NVUxUSV9USFJFQURFRCwgb3B0aW9u
cywgJmRpcmVjdDJERmFjdG9yeSk7Ci0jZWxzZQotICAgICAgICBIUkVTVUxUIGhyID0gRDJEMUNy
ZWF0ZUZhY3RvcnkoRDJEMV9GQUNUT1JZX1RZUEVfTVVMVElfVEhSRUFERUQsICZkaXJlY3QyREZh
Y3RvcnkpOwotI2VuZGlmCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwot
ICAgIH0KLQotICAgIHJldHVybiBkaXJlY3QyREZhY3Rvcnk7Ci19Ci0KLUlEMkQxUmVuZGVyVGFy
Z2V0KiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpCi17Ci0g
ICAgc3RhdGljIElEMkQxUmVuZGVyVGFyZ2V0KiBkZWZhdWx0UmVuZGVyVGFyZ2V0ID0gbnVsbHB0
cjsKLSAgICBpZiAoIWRlZmF1bHRSZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgYXV0byByZW5kZXJU
YXJnZXRQcm9wZXJ0aWVzID0gRDJEMTo6UmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwotICAgICAg
ICByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLnVzYWdlID0gRDJEMV9SRU5ERVJfVEFSR0VUX1VTQUdF
X0dESV9DT01QQVRJQkxFOwotICAgICAgICBhdXRvIGh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVz
ID0gRDJEMTo6SHduZFJlbmRlclRhcmdldFByb3BlcnRpZXMoOjpHZXREZXNrdG9wV2luZG93KCks
IEQyRDE6OlNpemVVKDEwLCAxMCkpOwotICAgICAgICBIUkVTVUxUIGhyID0gc3lzdGVtRmFjdG9y
eSgpLT5DcmVhdGVId25kUmVuZGVyVGFyZ2V0KCZyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLCAmaHdu
ZFJlbmRlclRhcmdldFByb3BlcnRpZXMsIHJlaW50ZXJwcmV0X2Nhc3Q8SUQyRDFId25kUmVuZGVy
VGFyZ2V0Kio+KCZkZWZhdWx0UmVuZGVyVGFyZ2V0KSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotICAgICAgICBkZWZhdWx0UmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZGVmYXVsdFJlbmRlclRhcmdldDsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEp
Ci17Ci0gICAgaWYgKCFoZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhCSVRNQVAgYml0bWFw
ID0gc3RhdGljX2Nhc3Q8SEJJVE1BUD4oR2V0Q3VycmVudE9iamVjdChoZGMsIE9CSl9CSVRNQVAp
KTsKLQotICAgIERJQlBpeGVsRGF0YSBwaXhlbERhdGEoYml0bWFwKTsKLQotICAgIGF1dG8gdGFy
Z2V0UHJvcGVydGllcyA9IERpcmVjdDJEOjpyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0KLSAg
ICBDT01QdHI8SUQyRDFEQ1JlbmRlclRhcmdldD4gcmVuZGVyVGFyZ2V0OwotICAgIEhSRVNVTFQg
aHIgPSBzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZURDUmVuZGVyVGFyZ2V0KCZ0YXJnZXRQcm9wZXJ0
aWVzLCAmcmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFJFQ1QgY2xpZW50UmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgcGl4ZWxE
YXRhLnNpemUoKSk7Ci0gICAgaHIgPSByZW5kZXJUYXJnZXQtPkJpbmREQyhoZGMsICZjbGllbnRS
ZWN0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1
dG8gb3duZWRQbGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEPihyZW5kZXJUYXJnZXQuZ2V0KCkpOwotICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUoV1RGTW92ZShvd25lZFBsYXRmb3JtQ29udGV4dCksIEJpdG1hcFJl
bmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwotICAgIG1fZGF0YS0+bV9oZGMgPSBoZGM7
Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5bmMgd2l0aCBvdXIg
c3RhdGUuCi0gICAgc2V0UGxhdGZvcm1GaWxsQ29sb3IoZmlsbENvbG9yKCkpOwotICAgIHNldFBs
YXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VU
aGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKCkpOwotICAgIC8vIEZJWE1FOiBtX3N0YXRlLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250
ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCkpKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgcGxhdGZvcm1Jbml0KHBsYXRmb3JtQ29u
dGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCogcGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJp
bmdUeXBlKQotewotICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCpwbGF0Zm9y
bUNvbnRleHQsIHJlbmRlcmluZ1R5cGUpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0
IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgotICAgIHNldFBsYXRmb3JtRmlsbENvbG9y
KGZpbGxDb2xvcigpKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkp
OwotICAgIHNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcygpKTsKLSAg
ICAvLyBGSVhNRTogbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29udmVydElu
dGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRm
b3JtQ29udGV4dCgpKSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjp+R3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQoKQotewotICAgIGRlbGV0ZSBtX2RhdGE7Ci19Ci0KLVBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZvcm1Db250ZXh0KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gJm1fZGF0YS0+cGxhdGZvcm1Db250ZXh0KCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzeW5jQ29udGV4dChQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotSUQyRDFSZW5k
ZXJUYXJnZXQqIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cmVuZGVyVGFyZ2V0KCkK
LXsKLSAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0Lm1fdHJhbnNwYXJlbmN5TGF5ZXJTdGFjay5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3BsYXRmb3JtQ29udGV4dC5tX3RyYW5zcGFyZW5j
eUxheWVyU3RhY2subGFzdCgpLnJlbmRlclRhcmdldC5nZXQoKTsKLQotICAgIHJldHVybiBtX3Bs
YXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OnNldEFscGhhKGZsb2F0IGFscGhhKQotewotICAgIEFTU0VSVChtX3Bs
YXRmb3JtQ29udGV4dC5tX3RyYW5zcGFyZW5jeUxheWVyU3RhY2suaXNFbXB0eSgpKTsKLSAgICBt
X2FscGhhID0gYWxwaGE7Ci19Ci0KLWZsb2F0IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZTo6Y3VycmVudEdsb2JhbEFscGhhKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1Db250
ZXh0Lm1fdHJhbnNwYXJlbmN5TGF5ZXJTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBt
X3BsYXRmb3JtQ29udGV4dC5tX3RyYW5zcGFyZW5jeUxheWVyU3RhY2subGFzdCgpLm9wYWNpdHk7
Ci0KLSAgICByZXR1cm4gbV9hbHBoYTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6c2F2ZSgpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7Ci0gICAgRGlyZWN0MkQ6
OnNhdmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6cmVzdG9yZSgpCi17Ci0gICAgaWYgKCFzdGFja1NpemUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7Ci0gICAgRGlyZWN0MkQ6OnJlc3Rv
cmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
YXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpkcmF3TmF0aXZlSW1h
Z2UoKnBsYXRmb3JtQ29udGV4dCgpLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCks
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMsIHN0YXRlLmFscGhhLCBEaXJl
Y3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJl
Y3QsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpCi17Ci0gICAgYm9vbCBjcmVhdGVkQml0bWFwID0g
IW1fZGF0YS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgaWYgKCFjcmVh
dGVkQml0bWFwKSB7Ci0gICAgICAgIERpcmVjdDJEOjpyZXN0b3JlKCpwbGF0Zm9ybUNvbnRleHQo
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWhkYyB8fCBkc3RSZWN0Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBzb3VyY2VCaXRtYXAgPSBhZG9w
dEdESU9iamVjdChzdGF0aWNfY2FzdDxIQklUTUFQPig6OkdldEN1cnJlbnRPYmplY3QoaGRjLCBP
QkpfQklUTUFQKSkpOwotCi0gICAgRElCUGl4ZWxEYXRhIHBpeGVsRGF0YShzb3VyY2VCaXRtYXAu
Z2V0KCkpOwotICAgIEFTU0VSVChwaXhlbERhdGEuYml0c1BlclBpeGVsKCkgPT0gMzIpOwotCi0g
ICAgYXV0byBiaXRtYXBQcm9wZXJ0aWVzID0gRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKTsK
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgYXV0byYgcGxhdGZvcm1D
b250ZXh0ID0gKnRoaXMtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgQ09NUHRyPElEMkQxQml0
bWFwPiBiaXRtYXA7Ci0gICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJn
ZXQoKS0+Q3JlYXRlQml0bWFwKHBpeGVsRGF0YS5zaXplKCksIHBpeGVsRGF0YS5idWZmZXIoKSwg
cGl4ZWxEYXRhLmJ5dGVzUGVyUm93KCksICZiaXRtYXBQcm9wZXJ0aWVzLCAmYml0bWFwKTsKLSAg
ICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIocGxhdGZvcm1Db250ZXh0KTsKLQotICAgIC8vIE5vdGU6IFRoZSBjb250ZW50
IGluIHRoZSBIREMgaXMgaW52ZXJ0ZWQgY29tcGFyZWQgdG8gRGlyZWN0MkQsIHNvIGl0IG5lZWRz
IHRvIGJlIGZsaXBwZWQuCi0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRl
clRhcmdldCgpOwotCi0gICAgRDJEMV9NQVRSSVhfM1gyX0YgY3VycmVudFRyYW5zZm9ybTsKLSAg
ICBjb250ZXh0LT5HZXRUcmFuc2Zvcm0oJmN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAgQWZmaW5l
VHJhbnNmb3JtIHRyYW5zZm9ybShjdXJyZW50VHJhbnNmb3JtKTsKLSAgICB0cmFuc2Zvcm0udHJh
bnNsYXRlKGRzdFJlY3QubG9jYXRpb24oKSk7Ci0gICAgdHJhbnNmb3JtLnNjYWxlKDEuMCwgLTEu
MCk7Ci0gICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgwLCAtZHN0UmVjdC5oZWlnaHQoKSk7Ci0KLSAg
ICBjb250ZXh0LT5TZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKLSAgICBjb250ZXh0LT5EcmF3Qml0
bWFwKGJpdG1hcC5nZXQoKSwgRDJEMTo6UmVjdEYoMCwgMCwgZHN0UmVjdC53aWR0aCgpLCBkc3RS
ZWN0LmhlaWdodCgpKSk7Ci0KLSAgICA6OkRlbGV0ZURDKGhkYyk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUg
c3R5bGUpCi17Ci0gICAgRGlyZWN0MkQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIobV9wbGF0
Zm9ybUNvbnRleHQsIHJlY3QsIHN0eWxlKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkJpdG1hcFJl
bmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCi0gICAgOiBtX3BsYXRmb3JtQ29udGV4
dChwbGF0Zm9ybUNvbnRleHQpCi0gICAgLCBtX3JlbmRlcmVyVHlwZShyZW5kZXJpbmdUeXBlKQot
ewotICAgIGlmICghbV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX3JlbmRlcmVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkKLSAgICAgICAgYmVnaW5E
cmF3KCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlKHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RD4mJiBvd25lZFBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkJpdG1h
cFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCi0gICAgOiBtX293bmVkUGxhdGZv
cm1Db250ZXh0KFdURk1vdmUob3duZWRQbGF0Zm9ybUNvbnRleHQpKQotICAgICwgbV9wbGF0Zm9y
bUNvbnRleHQoKm1fb3duZWRQbGF0Zm9ybUNvbnRleHQpCi0gICAgLCBtX3JlbmRlcmVyVHlwZShy
ZW5kZXJpbmdUeXBlKQotewotICAgIGlmICghbV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3JlbmRlcmVyVHlwZSA9PSBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkK
LSAgICAgICAgYmVnaW5EcmF3KCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpCi17Ci0gICAgaWYgKCFtX3BsYXRm
b3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
cGxhdGZvcm1Db250ZXh0LmJlZ2luRHJhd0NvdW50KQotICAgICAgICBlbmREcmF3KCk7Ci19Ci0K
LUlEMkQxU29saWRDb2xvckJydXNoKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YnJ1c2hXaXRo
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQo
KS0+YnJ1c2hXaXRoQ29sb3IoY29sb3JXaXRoR2xvYmFsQWxwaGEoY29sb3IpKS5nZXQoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
Y2xpcChjb25zdCBQYXRoJiBwYXRoKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6Y2xpcChJRDJEMUdlb21ldHJ5KiBwYXRoKQotewotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgYWZmaW5lVHJhbnNmb3JtKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZTo6Zmx1c2goKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZTo6YmVnaW5EcmF3KCkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5iZWdpbkRyYXcoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmVuZERyYXcoKQotewot
ICAgIG1fcGxhdGZvcm1Db250ZXh0LmVuZERyYXcoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6OnJlc3RvcmUoKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6c2F2ZSgpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQVNTRVJUKG1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRh
cmdldCgpKTsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+U2V0VHJhbnNm
b3JtKHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6OnJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLX0KLQotRDJEMV9DT0xP
Ul9GIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjb2xvcldpdGhHbG9iYWxBbHBoYShjb25zdCBD
b2xvciYgY29sb3IpIGNvbnN0Ci17Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b0Nv
bG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwotICAgIHJldHVybiBEMkQx
OjpDb2xvckYociwgZywgYiwgYSAqIG1fZGF0YS0+Y3VycmVudEdsb2JhbEFscGhhKCkpOwotfQot
Ci1JRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c29saWRTdHJva2VCcnVzaCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5tX3NvbGlkU3Ryb2tlQnJ1
c2guZ2V0KCk7Ci19Ci0KLUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzb2xp
ZEZpbGxCcnVzaCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5tX3Nv
bGlkRmlsbEJydXNoLmdldCgpOwotfQotCi1JRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6cGF0dGVyblN0cm9rZUJydXNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGxhdGZvcm1D
b250ZXh0KCktPm1fcGF0dGVyblN0cm9rZUJydXNoLmdldCgpOwotfQotCi1JRDJEMUJydXNoKiBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGF0dGVybkZpbGxCcnVzaCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5GaWxsQnJ1c2guZ2V0KCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmJlZ2luRHJhdygpCi17Ci0gICAgcGxhdGZv
cm1Db250ZXh0KCktPmJlZ2luRHJhdygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjplbmREcmF3KCkKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZW5kRHJhdygpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmbHVzaCgpCi17Ci0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6Zmx1c2goKnBsYXRmb3JtQ29udGV4
dCgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd1BhdHRlcm4oY29u
c3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotewotICAgIGlmICghcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gdGlsZUltYWdlID0gaW1hZ2U7Ci0gICAgRGlyZWN0
MkQ6OmRyYXdQYXR0ZXJuKCpwbGF0Zm9ybUNvbnRleHQoKSwgV1RGTW92ZSh0aWxlSW1hZ2UpLCBJ
bnRTaXplKGltYWdlLnNpemUoKSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUo
KSk7Ci19Ci0KLS8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3Jk
ZXIuCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3UmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLXsKLSAgICBBU1NFUlQoIXJlY3QuaXNF
bXB0eSgpKTsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6
OmRyYXdSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0
ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzZXRMaW5lQ2FwKExpbmVDYXAp
Ci17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzZXRMaW5lSm9p
bihMaW5lSm9pbikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6
OnNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6c2V0TWl0ZXJMaW1pdChmbG9hdCBjYW52YXNNaXRlckxpbWl0KQot
ewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldERhc2hPZmZzZXQoY2FudmFzTWl0ZXJMaW1pdCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzZXREYXNoT2Zmc2V0
KGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0RGFzaE9mZnNl
dChkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6
OnNldFBhdHRlcm5XaWR0aChmbG9hdCBwYXR0ZXJuV2lkdGgpCi17Ci0gICAgbV9wbGF0Zm9ybUNv
bnRleHQuc2V0UGF0dGVybldpZHRoKHBhdHRlcm5XaWR0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzZXRQYXR0ZXJuT2Zmc2V0KGZsb2F0IHBhdHRlcm5PZmZz
ZXQpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0UGF0dGVybk9mZnNldChwYXR0ZXJuT2Zm
c2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldFN0cm9r
ZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0
U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlOjpzZXREYXNoZXMoY29uc3QgRGFzaEFycmF5JiBkYXNoZXMpCi17Ci0gICAg
bV9wbGF0Zm9ybUNvbnRleHQuc2V0RGFzaGVzKGRhc2hlcyk7Ci19Ci0KLUQyRDFfU1RST0tFX1NU
WUxFX1BST1BFUlRJRVMgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzdHJva2VTdHls
ZVByb3BlcnRpZXMoKSBjb25zdAotewotICAgIHJldHVybiBEMkQxOjpTdHJva2VTdHlsZVByb3Bl
cnRpZXMobV9wbGF0Zm9ybUNvbnRleHQubV9saW5lQ2FwLCBtX3BsYXRmb3JtQ29udGV4dC5tX2xp
bmVDYXAsIG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNvbnRleHQubV9s
aW5lSm9pbiwgbV9wbGF0Zm9ybUNvbnRleHQubV9taXRlckxpbWl0LCBEMkQxX0RBU0hfU1RZTEVf
U09MSUQsIDAuMGYpOwotfQotCi1JRDJEMVN0cm9rZVN0eWxlKiBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6c3Ryb2tlU3R5bGUoKSBjb25zdAotewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5zdHJva2VTdHlsZSgpOwotfQot
Ci0vLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMuCi12b2lkIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MikKLXsKLSAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBE
aXJlY3QyRDo6ZHJhd0xpbmUoKnBsYXRmb3JtQ29udGV4dCgpLCBwb2ludDEsIHBvaW50Miwgc3Rh
dGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3Ms
IHN0YXRlLnNob3VsZEFudGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNv
bnRleHQoKSwgcmVjdCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUu
c3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCi17Ci0gICAgaWYgKCFtX3N0YXRl
LnN0cm9rZVBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gY29udGV4dCA9IHBs
YXRmb3JtQ29udGV4dCgpOwotICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNOyAvLyBG
SVhNRTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdpbmRvd3MKLQotICAgIGNvbnN0IGZs
b2F0IHBhdHRlcm5BbHBoYSA9IDE7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVyblN0
cm9rZUJydXNoID0gYWRvcHRDT00obV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9y
bVBhdHRlcm4oKnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjphcHBseUZpbGxQYXR0ZXJuKCkKLXsKLSAgICBpZiAo
IW1fc3RhdGUuZmlsbFBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gY29udGV4
dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RN
OyAvLyBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdpbmRvd3MKLQotICAgIGNv
bnN0IGZsb2F0IHBhdHRlcm5BbHBoYSA9IDE7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0
dGVybkZpbGxCcnVzaCA9IGFkb3B0Q09NKG1fc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRm
b3JtUGF0dGVybigqdGhpcywgcGF0dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RNKSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17
Ci0gICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRl
eHQoKTsKLSAgICBEaXJlY3QyRDo6ZHJhd1BhdGgoY29udGV4dCwgcGF0aCwgRGlyZWN0MkQ6OlN0
cm9rZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKLXsKLSAgICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRm
b3JtQ29udGV4dCgpOwotICAgIERpcmVjdDJEOjpmaWxsUGF0aChjb250ZXh0LCBwYXRoLCBEaXJl
Y3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3Rh
dGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3Ryb2tlUGF0aChjb25z
dCBQYXRoJiBwYXRoKQotewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGF1dG8mIGNvbnRleHQg
PSAqcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgRGlyZWN0MkQ6OnN0cm9rZVBhdGgoY29udGV4dCwg
cGF0aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hh
ZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKLSAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwotICAgIERp
cmVjdDJEOjpmaWxsUmVjdChjb250ZXh0LCByZWN0LCBEaXJlY3QyRDo6RmlsbFNvdXJjZShzdGF0
ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCi17Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAg
IGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxS
ZWN0KGNvbnRleHQsIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi17Ci0gICAgYXV0byBicnVzaCA9IGdyYWRp
ZW50LmNyZWF0ZUJydXNoKG1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLSAgICBp
ZiAoIWJydXNoKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRo
R3JhZGllbnQobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGJydXNoLmdldCgpKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250
ZXh0KCkuc3RhdGUoKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0g
c3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5k
TW9kZSk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBj
b2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRl
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0
b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCi17Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAg
IERpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBjb2xv
ciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IpCi17Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGF1dG8mIGNv
bnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnRleHQsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgRGlyZWN0MkQ6OkZpbGxT
b3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQotewotICAgIERpcmVjdDJEOjpjbGlwKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotewotICAgIERpcmVjdDJEOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBPdXQoY29uc3QgUGF0aCYg
cGF0aCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcE91dCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwUGF0aChjb25zdCBQYXRo
JiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcFBhdGgoKnBs
YXRmb3JtQ29udGV4dCgpLCBwYXRoLCBjbGlwUnVsZSk7Ci19Ci0KLUludFJlY3QgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmNsaXBCb3VuZHMoKSBjb25zdAotewotICAgIHJldHVybiBEaXJlY3Qy
RDo6U3RhdGU6OmdldENsaXBCb3VuZHMoKnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQgb3BhY2l0eSkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIEdyYXBoaWNzQ29udGV4dDo6
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAgICBzYXZlKCk7Ci0KLSAgICBtX3N0
YXRlLmFscGhhID0gb3BhY2l0eTsKLQotICAgIERpcmVjdDJEOjpiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKCpwbGF0Zm9ybUNvbnRleHQoKSwgb3BhY2l0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCi17Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLSAgICBH
cmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgRGlyZWN0MkQ6OmVu
ZFRyYW5zcGFyZW5jeUxheWVyKCpwbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBtX3N0YXRlLmFs
cGhhID0gbV9kYXRhLT5jdXJyZW50R2xvYmFsQWxwaGEoKTsKLQotICAgIHJlc3RvcmUoKTsKLX0K
LQotYm9vbCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXll
cnMoKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBpZiAo
ZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQotICAg
ICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4
dCwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpz
ZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0g
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewotICAg
ICAgICBpZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAgIC8v
IE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dAotICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0
IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAg
ICAgIGF1dG8mIG11dGFibGVTdGF0ZSA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUm
PihncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKTsKLSAgICAgICAgICAgIGF1dG8mIHNoYWRvd09m
ZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFk
b3dPZmZzZXQgPSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgp
IH07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3RhdGU6
OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuY29tcG9zaXRl
T3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3Rh
dGU6OnNldFNob3VsZEFudGlhbGlhcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc2hvdWxkQW50
aWFsaWFzKTsKLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlQ29sb3JDaGFuZ2UpKSB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXRlLnN0cm9rZUNvbG9y
ID09IGNvbG9yKTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRTdHJva2VCcnVz
aCA9IGJydXNoV2l0aENvbG9yKHN0cm9rZUNvbG9yKCkpOyAgICAKLSAgICB9Ci0gICAgCi0gICAg
aWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2Up
KSB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXRlLmZpbGxDb2xvciA9PSBjb2xvcik7Ci0gICAgICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5tX3NvbGlkRmlsbEJydXNoID0gYnJ1c2hXaXRoQ29sb3IoZmls
bENvbG9yKCkpOwotICAgIH0KLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKSB7Ci0gICAgICAgIGF1dG8gZm9udFNt
b290aGluZ01vZGUgPSBlbmFibGUgPyBEMkQxX1RFWFRfQU5USUFMSUFTX01PREVfQ0xFQVJUWVBF
IDogRDJEMV9URVhUX0FOVElBTElBU19NT0RFX0FMSUFTRUQ7Ci0gICAgICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+U2V0VGV4dEFudGlhbGlhc01vZGUoZm9udFNtb290aGlu
Z01vZGUpOwotICAgIH0KLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6QWxwaGFDaGFuZ2UpKSB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXRlLmFscGhhID09IGFs
cGhhKTsKLSAgICAgICAgbV9kYXRhLT5zZXRBbHBoYShhbHBoYSk7Ci0gICAgfQotCi0gICAgaWYg
KGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5Q2hhbmdlKSkgewotICAgICAgICBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERSBxdWFsaXR5
ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKLQotICAgICAgICBz
d2l0Y2ggKG1vZGUpIHsKLSAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVs
dDoKLSAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNU
X05FSUdIQk9SOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZXJwb2xhdGlv
blF1YWxpdHk6OkRvTm90SW50ZXJwb2xhdGU6Ci0gICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9J
TlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpMb3c6Ci0gICAgICAgICAgICBxdWFs
aXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTElORUFSOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6Ok1lZGl1bToKLSAgICAgICAgICAg
IHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9DVUJJQzsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpIaWdoOgotICAgICAgICAg
ICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX0hJR0hfUVVBTElUWV9DVUJJQzsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZJWE1FOiBTZXRJbnRl
cnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSwgcXVhbGl0eSk7Ci0gICAgfQotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0
KQotewotICAgIERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KCpwbGF0Zm9ybUNvbnRleHQoKSwgbGlt
aXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGVhclJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQotewotICAgIERpcmVjdDJEOjpjbGVhclJlY3QoKnBsYXRmb3JtQ29u
dGV4dCgpLCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLXsKLSAgICBhdXRv
JiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNv
bnRleHQoKTsKLSAgICBEaXJlY3QyRDo6c3Ryb2tlUmVjdChjb250ZXh0LCByZWN0LCBsaW5lV2lk
dGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRv
d1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExp
bmVDYXAoTGluZUNhcCBjYXApCi17Ci0gICAgRGlyZWN0MkQ6OnNldExpbmVDYXAoKnBsYXRmb3Jt
Q29udGV4dCgpLCBjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRM
aW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAg
ICBpZiAoZGFzaE9mZnNldCA8IDApIHsKLSAgICAgICAgZmxvYXQgbGVuZ3RoID0gMDsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAg
ICBsZW5ndGggKz0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhc2hlc1tpXSk7Ci0gICAgICAgIGlmIChs
ZW5ndGgpCi0gICAgICAgICAgICBkYXNoT2Zmc2V0ID0gZm1vZChkYXNoT2Zmc2V0LCBsZW5ndGgp
ICsgbGVuZ3RoOwotICAgIH0KLQotICAgIERpcmVjdDJEOjpzZXRMaW5lRGFzaCgqcGxhdGZvcm1D
b250ZXh0KCksIGRhc2hlcywgZGFzaE9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCi17Ci0gICAgRGlyZWN0MkQ6OnNl
dExpbmVKb2luKCpwbGF0Zm9ybUNvbnRleHQoKSwgam9pbik7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBEaXJl
Y3QyRDo6c2NhbGUoKnBsYXRmb3JtQ29udGV4dCgpLCBzaXplKTsKLSAgICAvLyBGSVhNRTogbV9k
YXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJvdGF0ZShmbG9hdCBhbmdsZSkKLXsK
LSAgICBEaXJlY3QyRDo6cm90YXRlKCpwbGF0Zm9ybUNvbnRleHQoKSwgYW5nbGUpOwotICAgIC8v
IEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkg
PSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6dHJhbnNsYXRlKGZs
b2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgRGlyZWN0MkQ6OnRyYW5zbGF0ZSgqcGxhdGZvcm1Db250
ZXh0KCksIHgsIHkpOwotICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNm
b3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewot
ICAgIERpcmVjdDJEOjpjb25jYXRDVE0oKnBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwot
ICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRl
bnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIERpcmVjdDJEOjpTdGF0
ZTo6c2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKLSAgICAvLyBGSVhNRTog
bV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7
Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Z2V0Q1RNKElu
Y2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIERpcmVj
dDJEOjpTdGF0ZTo6Z2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLUZsb2F0UmVjdCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCi17Ci0gICAgcmV0dXJuIERpcmVj
dDJEOjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVscygqcGxhdGZvcm1Db250ZXh0KCksIHJlY3Qp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYg
d2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxl
IHN0cm9rZVN0eWxlKQotewotICAgIGlmICghd2lkdGhzLnNpemUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgRGlyZWN0MkQ6OmRyYXdMaW5lc0ZvclRleHQoKnBsYXRmb3JtQ29udGV4dCgpLCBw
b2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBtX3N0
YXRlLnN0cm9rZUNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0
VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlzTGF5ZXJDb250ZXh0KQotewotICAgIC8vIFRo
aXMgZnVuY3Rpb24gaXMgcHJvYmFiYWx5IG5vdCBuZWVkZWQuCi0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6aXNDQUxheWVyQ29udGV4dCgp
IGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJhbHkgbm90IG5lZWRlZC4K
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0FjY2Vs
ZXJhdGVkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
RGlyZWN0MkQ6OlN0YXRlOjppc0FjY2VsZXJhdGVkQ29udGV4dCgqcGxhdGZvcm1Db250ZXh0KCkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjphcHBseURldmljZVNjYWxlRmFj
dG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQotewotICAgIC8vIFRoaXMgaXMgYSBuby1vcCBm
b3IgRGlyZWN0MkQuCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKLXsKLSAgICBpZiAobV9zdGF0ZS5maWxsR3Jh
ZGllbnQgfHwgbV9zdGF0ZS5maWxsUGF0dGVybikgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGJlIGFibGUgdG8gZmlsbCBlbGxpcHNlcyB3aXRoIHBhdHRlcm4vZ3JhZGllbnQgYnJ1c2hl
cyBpbiBEMkQuCi0gICAgICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgRGlyZWN0MkQ6OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgZWxsaXBzZSwgbV9zdGF0ZS5maWxsQ29sb3IsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1f
c3RhdGUuc3Ryb2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVs
bGlwc2UpCi17Ci0gICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgfHwgbV9zdGF0ZS5zdHJv
a2VQYXR0ZXJuKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBzdHJv
a2UgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMgaW4gRDJELgotICAgICAg
ICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgRGlyZWN0MkQ6OmRyYXdFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgZWxsaXBzZSwg
bV9zdGF0ZS5zdHJva2VTdHlsZSwgbV9zdGF0ZS5zdHJva2VDb2xvciwgbV9zdGF0ZS5zdHJva2VU
aGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3R2x5cGhz
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWdu
ZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9u
dFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKLXsKLSAgICBVTlVTRURfUEFSQU0oZm9udFNt
b290aGluZyk7Ci0gICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYXV0byB4T2Zmc2V0ID0gcG9pbnQueCgpOwotICAgIFZlY3Rvcjx1bnNp
Z25lZCBzaG9ydD4gZ2x5cGhzKG51bUdseXBocyk7Ci0gICAgVmVjdG9yPGZsb2F0PiBob3Jpem9u
dGFsQWR2YW5jZXMobnVtR2x5cGhzKTsKLSAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4g
Z2x5cGhPZmZzZXRzKG51bUdseXBocyk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgaWYgKGkgKyBmcm9tID49IGdseXBoQnVmZmVyLmFk
dmFuY2VzQ291bnQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGF1dG8gYWR2YW5j
ZSA9IGdseXBoQnVmZmVyLmFkdmFuY2VzKGkgKyBmcm9tKTsKLSAgICAgICAgaWYgKCFhZHZhbmNl
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZ2x5cGhzW2ldID0gZ2x5cGhCdWZm
ZXIuZ2x5cGhBdChpICsgZnJvbSk7Ci0gICAgICAgIGhvcml6b250YWxBZHZhbmNlc1tpXSA9IGFk
dmFuY2UtPndpZHRoKCk7Ci0gICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hZHZhbmNlT2Zmc2V0ID0g
YWR2YW5jZS0+d2lkdGgoKTsKLSAgICAgICAgZ2x5cGhPZmZzZXRzW2ldLmFzY2VuZGVyT2Zmc2V0
ID0gYWR2YW5jZS0+aGVpZ2h0KCk7Ci0gICAgfQotCi0gICAgZG91YmxlIHN5bnRoZXRpY0JvbGRP
ZmZzZXQgPSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLQotICAgIGF1dG8mIHN0YXRlID0g
Z3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJhd0dseXBocyhtX3Bs
YXRmb3JtQ29udGV4dCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4
dCgpKSwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLAot
ICAgICAgICBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwgZm9udCwgc3ludGhl
dGljQm9sZE9mZnNldCwgZ2x5cGhzLCBob3Jpem9udGFsQWR2YW5jZXMsIGdseXBoT2Zmc2V0cywg
eE9mZnNldCwKLSAgICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlj
a25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IpOwotfQotCi1HcmFw
aGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYp
Ci17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLSAgICByZXR1cm4gQ2xpcFRvRHJh
d2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0KQotewotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXIuY29w
eUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvKiBjb250ZXh0ID0gJmdyYXBoaWNzQ29udGV4dCgpOwotICAgIGlm
IChhdXRvIHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29udGV4
dCkpCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi12
b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5
ZXImLCBjb25zdCBGbG9hdFJlY3QmKQotewotICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQu
Ci19Ci0jZW5kaWYKLQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQu
Y3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw2
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5o
IgotCi0jaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJDT01Q
dHIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmgiCi0jaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8ZDJk
MWVmZmVjdHMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0NvbnRleHRHTElt
YWdlRXh0cmFjdG9yOjp+R3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3RvcigpID0gZGVmYXVs
dDsKLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2Uo
Ym9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBi
b29sIGlnbm9yZU5hdGl2ZUltYWdlQWxwaGFQcmVtdWx0aXBsaWNhdGlvbikKLXsKLSAgICBpZiAo
IW1faW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTEdMOjpwYWlu
dFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBjb25zdCBJbnRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKLXsKLSAgICBpZiAoIWltYWdlUGl4ZWxzIHx8IGltYWdlU2l6ZS5pc0VtcHR5KCkg
fHwgY2FudmFzU2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShXRUJHTCkgJiYgVVNFKERJUkVDVDJEKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3Bw
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpEZWxldGVkOiBzdm46a2V5d29yZHMKIyMg
LTEgKzAsMCAjIwotRGF0ZSBBdXRob3IgSWQgUmV2aXNpb24gSGVhZFVSTApcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZURpcmVjdDJELmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNDAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRC5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDxkMmQxXzEuaD4KLSNp
bmNsdWRlIDxkMmQxZWZmZWN0cy5oPgotI2luY2x1ZGUgPGQyZDFoZWxwZXIuaD4KLSNpbmNsdWRl
IDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8d3RmL1RpbnlMUlVDYWNoZS5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSB7Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgR3JhcGhpY3NDb250ZXh0OjpC
aXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4mJiwgR3JhcGhp
Y3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSk7Ci0gICAgfkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZSgpOwotCi0gICAgdm9pZCBzeW5jQ29udGV4dChQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYpOwotCi0gICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpOwotICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLQotICAgIHZvaWQg
Y2xpcChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIGNsaXAoY29uc3QgUGF0aCYpOwotICAg
IHZvaWQgY2xpcChJRDJEMUdlb21ldHJ5Kik7Ci0KLSAgICB2b2lkIGJlZ2luRHJhdygpOwotICAg
IHZvaWQgZW5kRHJhdygpOwotICAgIHZvaWQgZmx1c2goKTsKLSAgICB2b2lkIHNhdmUoKTsKLSAg
ICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHZvaWQgcmVzdG9yZSgpOwotICAg
IHZvaWQgcm90YXRlKGZsb2F0KTsKLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpOwot
ICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgIHZvaWQgc2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotCi0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVD
YXApOwotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pOwotICAgIHZvaWQgc2V0U3Ryb2tl
U3R5bGUoU3Ryb2tlU3R5bGUpOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0gICAg
dm9pZCBzZXREYXNoT2Zmc2V0KGZsb2F0KTsKLSAgICB2b2lkIHNldFBhdHRlcm5XaWR0aChmbG9h
dCk7Ci0gICAgdm9pZCBzZXRQYXR0ZXJuT2Zmc2V0KGZsb2F0KTsKLSAgICB2b2lkIHNldFN0cm9r
ZVRoaWNrbmVzcyhmbG9hdCk7Ci0gICAgdm9pZCBzZXREYXNoZXMoY29uc3QgRGFzaEFycmF5Jik7
Ci0gICAgdm9pZCBzZXRBbHBoYShmbG9hdCk7Ci0KLSAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYgcGxhdGZvcm1Db250ZXh0KCkgeyByZXR1cm4gbV9wbGF0Zm9ybUNvbnRleHQ7IH0KLSAgICBJ
RDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBIREMgbV9oZGMgeyBudWxs
cHRyIH07Ci0KLSAgICBmbG9hdCBjdXJyZW50R2xvYmFsQWxwaGEoKSBjb25zdDsKLQotICAgIEQy
RDFfU1RST0tFX1NUWUxFX1BST1BFUlRJRVMgc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKCkgY29uc3Q7
Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
PiBtX293bmVkUGxhdGZvcm1Db250ZXh0OwotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBt
X3BsYXRmb3JtQ29udGV4dDsKLSAgICBjb25zdCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRl
cmluZ0NvbnRleHRUeXBlIG1fcmVuZGVyZXJUeXBlOwotCi0gICAgdW5zaWduZWQgYmVnaW5EcmF3
Q291bnQgeyAwIH07Ci0KLSAgICBmbG9hdCBtX2FscGhhIHsgMS4wIH07Ci0KLSAgICBmcmllbmQg
Y2xhc3MgRDJEQ29udGV4dFN0YXRlU2F2ZXI7Ci19OwotCi1jbGFzcyBEMkRDb250ZXh0U3RhdGVT
YXZlciB7Ci1wdWJsaWM6Ci0gICAgRDJEQ29udGV4dFN0YXRlU2F2ZXIoR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlJiBjb250ZXh0LCBib29sIHNhdmVBbmRSZXN0b3JlID0gdHJ1ZSkKLSAg
ICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX3NhdmVBbmRSZXN0b3JlKHNh
dmVBbmRSZXN0b3JlKQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCi0gICAg
ICAgICAgICBtX2NvbnRleHQubV9wbGF0Zm9ybUNvbnRleHQuc2F2ZSgpOwotICAgIH0KLQotICAg
IH5EMkRDb250ZXh0U3RhdGVTYXZlcigpCi0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVz
dG9yZSkKLSAgICAgICAgICAgIG1fY29udGV4dC5tX3BsYXRmb3JtQ29udGV4dC5yZXN0b3JlKCk7
Ci0gICAgfQotCi0gICAgdm9pZCBzYXZlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9zYXZl
QW5kUmVzdG9yZSk7Ci0gICAgICAgIG1fY29udGV4dC5tX3BsYXRmb3JtQ29udGV4dC5zYXZlKCk7
Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgcmVz
dG9yZSgpCi0gICAgewotICAgICAgICBBU1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAg
IG1fY29udGV4dC5tX3BsYXRmb3JtQ29udGV4dC5yZXN0b3JlKCk7Ci0gICAgICAgIG1fc2F2ZUFu
ZFJlc3RvcmUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIGRpZFNhdmUoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fc2F2ZUFuZFJlc3RvcmU7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4gb3duZWRQbGF0Zm9y
bUNvbnRleHQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlJiBtX2NvbnRleHQ7
Ci0gICAgYm9vbCBtX3NhdmVBbmRSZXN0b3JlIHsgZmFsc2UgfTsKLX07Ci0KLX0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHRXaW4uY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsOCArMjgsNiBAQAogCiAjaWYgVVNFKENHKQogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaCIKICNlbmRpZgogCiAjaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCkBAIC00MCw3ICszOCw2IEBACiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgogCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIHZvaWQgZmlsbFdpdGhDbGVhckNvbG9yKEhCSVRNQVAg
Yml0bWFwKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dFdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dENHLmgiCiAjZGVmaW5lIEdyYXBoaWNzQ29udGV4dFdpbiBHcmFwaGljc0NvbnRleHRDRwogCi0j
ZWxpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHREaXJlY3QyRC5o
IgotI2RlZmluZSBHcmFwaGljc0NvbnRleHRXaW4gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQKLQog
I2VsaWYgVVNFKENBSVJPKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGly
ZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0xheWVyRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NMYXllckRpcmVjdDJELmNw
cAkobm9uZXhpc3RlbnQpCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0xheWVyRGlyZWN0MkQuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1
ZGUgIkRpc3BsYXlMaXN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllckZhY3RvcnkuaCIKLSNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5j
bHVkZSA8d3RmL1NldEZvclNjb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL1N5c3RlbVRyYWNpbmcuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotCi0jaWYgQ09NUElMRVIoTVNWQykK
LS8vIFNlZSBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzF3ZWE1endl
LmFzcHgKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotUmVmPEdyYXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShH
cmFwaGljc0xheWVyRmFjdG9yeSogZmFjdG9yeSwgR3JhcGhpY3NMYXllckNsaWVudCYgY2xpZW50
LCBUeXBlIGxheWVyVHlwZSkKLXsKLSAgICBpZiAoZmFjdG9yeSkgewotICAgICAgICBhdXRvIGxh
eWVyID0gZmFjdG9yeS0+Y3JlYXRlR3JhcGhpY3NMYXllcihsYXllclR5cGUsIGNsaWVudCk7Ci0g
ICAgICAgIGxheWVyLT5pbml0aWFsaXplKGxheWVyVHlwZSk7Ci0gICAgICAgIHJldHVybiBsYXll
cjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogUmV0dXJuIGEgcmVhbCBEaXJlY3QyRCBncmFwaGlj
cyBsYXllcgotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdyYXBoaWNzTGF5ZXJEaXJlY3QyRChs
YXllclR5cGUsIGNsaWVudCkpOwotfQotCi1HcmFwaGljc0xheWVyRGlyZWN0MkQ6OkdyYXBoaWNz
TGF5ZXJEaXJlY3QyRChUeXBlIGxheWVyVHlwZSwgR3JhcGhpY3NMYXllckNsaWVudCYgY2xpZW50
KQotICAgIDogR3JhcGhpY3NMYXllcihsYXllclR5cGUsIGNsaWVudCkKLXsKLX0KLQotdm9pZCBH
cmFwaGljc0xheWVyRGlyZWN0MkQ6OmluaXRpYWxpemUoVHlwZSBsYXllclR5cGUpCi17Ci19Ci0K
LUdyYXBoaWNzTGF5ZXJEaXJlY3QyRDo6fkdyYXBoaWNzTGF5ZXJEaXJlY3QyRCgpCi17Ci0gICAg
d2lsbEJlRGVzdHJveWVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckRpcmVjdDJEOjpzZXRO
ZWVkc0Rpc3BsYXkoKQotewotICAgIGlmICghZHJhd3NDb250ZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckRpcmVj
dDJEOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByLCBTaG91bGRDbGlw
VG9MYXllciBzaG91bGRDbGlwKQotewotICAgIGlmICghZHJhd3NDb250ZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NMYXllckRpcmVjdDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJEaXJlY3QyRC5oCShyZXZpc2lvbiAy
ODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NM
YXllckRpcmVjdDJELmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2MSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0KLSNp
bmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7Ci1jbGFzcyBE
aXNwbGF5TGlzdDsKLX0KLQotY2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKLWNsYXNzIEltYWdlOwot
Y2xhc3MgVHJhbnNmb3JtU3RhdGU7Ci0KLWNsYXNzIEdyYXBoaWNzTGF5ZXJEaXJlY3QyRCA6IHB1
YmxpYyBHcmFwaGljc0xheWVyIHsKLXB1YmxpYzoKLQotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxp
Y2l0IEdyYXBoaWNzTGF5ZXJEaXJlY3QyRChUeXBlLCBHcmFwaGljc0xheWVyQ2xpZW50Jik7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+R3JhcGhpY3NMYXllckRpcmVjdDJEKCk7Ci0KLXBy
aXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbml0aWFsaXplKFR5cGUpIG92ZXJyaWRl
OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBvdmVycmlkZTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9h
dFJlY3QmLCBTaG91bGRDbGlwVG9MYXllciA9IENsaXBUb0xheWVyKSBvdmVycmlkZTsKLQotICAg
IGJvb2wgaXNHcmFwaGljc0xheWVyQ0EoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0dSQVBISUNTTEFZRVIoV2ViQ29yZTo6R3JhcGhpY3NMYXllckRpcmVjdDJELCBpc0dyYXBoaWNz
TGF5ZXJDQSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCShy
ZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCShub25leGlzdGVudCkKQEAgLTEsMzIzICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgi
Ci0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1
ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKLSNp
bmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRl
ICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUgPGQyZDFfMS5oPgotI2luY2x1
ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDx3aW5jb2RlYy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQpOwotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+
IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQotewotICAgIEludFNpemUgYmFja2VuZFNp
emUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOwotICAgIGlm
IChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
YXV0byogcGxhdGZvcm1Db250ZXh0ID0gdGFyZ2V0Q29udGV4dCA/IHRhcmdldENvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpIDogbnVsbHB0cjsKLSAgICBhdXRvKiByZW5kZXJUYXJnZXQgPSBwbGF0
Zm9ybUNvbnRleHQgPyBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpIDogbnVsbHB0cjsK
LQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgICAgICByZW5kZXJUYXJnZXQgPSBHcmFwaGlj
c0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKLQotICAgIGF1dG8gYml0bWFwQ29udGV4
dCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUoc2l6ZSwgcmVuZGVy
VGFyZ2V0LCByZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmICghYml0bWFwQ29udGV4dCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgUGxhdGZvcm1JbWFnZVB0ciBiaXRtYXA7Ci0gICAgSFJFU1VMVCBo
ciA9IGJpdG1hcENvbnRleHQtPkdldEJpdG1hcCgmYml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURF
RChocikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcGxhdGZvcm1Db250ZXh0ID0gbWFr
ZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4oYml0bWFwQ29udGV4dC5nZXQoKSwgW3Ro
aXNdKCkgewotICAgICAgICBtX2RhdGEubG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCk7Ci0gICAg
fSwgW3RoaXNdKCkgewotICAgICAgICBtX2RhdGEubWFya0J1ZmZlck91dE9mU3luYygpOwotICAg
IH0pOwotCi0gICAgaWYgKCFwbGF0Zm9ybUNvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHREaXJlY3Qy
RD4ocGxhdGZvcm1Db250ZXh0LmdldCgpLCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmlu
Z0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQoc2l6ZSwgYmFja2Vu
ZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShwbGF0Zm9ybUNvbnRl
eHQpLCBXVEZNb3ZlKGNvbnRleHQpLCBXVEZNb3ZlKGJpdG1hcCkpKTsKLX0KLQotc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQotewotICAgIHJldHVybiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y3Jl
YXRlKHNpemUsIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7Ci19Ci0K
LUltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwg
c3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiYmIHBsYXRmb3JtQ29udGV4
dCwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJiBjb250ZXh0LCBQbGF0Zm9ybUlt
YWdlUHRyJiYgYml0bWFwKQotICAgIDogSW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNpemUs
IGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCi0gICAgLCBtX3BsYXRm
b3JtQ29udGV4dChXVEZNb3ZlKHBsYXRmb3JtQ29udGV4dCkpCi0gICAgLCBtX2NvbnRleHQoV1RG
TW92ZShjb250ZXh0KSkKLSAgICAsIG1fYml0bWFwKFdURk1vdmUoYml0bWFwKSkKLXsKLX0KLQot
R3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29udGV4dCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuICptX2NvbnRleHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQ6OmZsdXNoQ29udGV4dCgpCi17Ci0gICAgY29udGV4dCgpLmZsdXNoKCk7Ci19
Ci0KLVJlZlB0cjxOYXRpdmVJbWFnZT4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKLXsKLSAgICBD
T01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldDsKLSAgICBIUkVTVUxU
IGhyID0gY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+UXVlcnlJ
bnRlcmZhY2UoJmJpdG1hcFRhcmdldCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gaW1hZ2U7Ci0gICAg
aHIgPSBiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmaW1hZ2UpOwotICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpKTsKLQotICAgIC8vIEZJWE1FOiBtX2RhdGEuZGF0YSBpcyBudWxscHRyIGV2ZW4gd2hl
biBhc2tpbmcgdG8gY29weSBiYWNraW5nIHN0b3JlIGxlYWRpbmcgdG8gdGVzdCBmYWlsdXJlcy4K
LSAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUgJiYgbV9kYXRhLmRhdGEu
aXNFbXB0eSgpKQotICAgICAgICBjb3B5QmVoYXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9yZTsK
LQotICAgIENoZWNrZWRTaXplIG51bUJ5dGVzID0gQ2hlY2tlZFVpbnQzMihtX2RhdGEuYmFja2lu
Z1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0gICAgaWYgKG51bUJ5
dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAo
Y29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUpIHsKLSAgICAgICAgRDJEMV9SRUNUX1Ug
YmFja2luZ1N0b3JlRGltZW5zdGlvbnMgPSBJbnRSZWN0KEludFBvaW50KCksIG1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplKTsKLSAgICAgICAgaW1hZ2UtPkNvcHlGcm9tTWVtb3J5KCZiYWNraW5nU3Rv
cmVEaW1lbnN0aW9ucywgbV9kYXRhLmRhdGEuZGF0YSgpLCAzMik7Ci0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gTmF0aXZlSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Ci19Ci0KLXN0YXRpYyBQ
bGF0Zm9ybUltYWdlUHRyIGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KElEMkQxQml0bWFw
UmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQsIElEMkQxQml0bWFwKiBpbWFnZSwgY29uc3QgSW50
U2l6ZSYgYm91bmRzKQotewotICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBpbWFnZSA/IG5hdGl2
ZUltYWdlU2l6ZShpbWFnZSkgOiBGbG9hdFNpemUoKTsKLQotICAgIGlmIChpbWFnZSAmJiAoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihpbWFnZVNpemUud2lkdGgoKSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90
Pihib3VuZHMud2lkdGgoKSkgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbWFnZVNpemUuaGVpZ2h0
KCkpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLmhlaWdodCgpKSkpIHsKLSAgICAgICAg
Q09NUHRyPElEMkQxQml0bWFwPiBjcm9wcGVkQml0bWFwID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1h
cChiaXRtYXBUYXJnZXQsIGJvdW5kcyk7Ci0gICAgICAgIGlmIChjcm9wcGVkQml0bWFwKSB7Ci0g
ICAgICAgICAgICBhdXRvIHNvdXJjZVJlY3QgPSBEMkQxOjpSZWN0VSgwLCAwLCBib3VuZHMud2lk
dGgoKSwgYm91bmRzLmhlaWdodCgpKTsKLSAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBjcm9wcGVk
Qml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBpbWFnZSwgJnNvdXJjZVJlY3QpOwotICAg
ICAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNyb3Bw
ZWRCaXRtYXA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXN0
YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQo
SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1hcFRhcmdldCwgQ09NUHRyPElEMkQxQml0bWFw
PiYmIGltYWdlLCBJbnRTaXplIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQ
cmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIGlmIChyZXNvbHV0
aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9u
OjpZZXMpCi0gICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoYml0
bWFwVGFyZ2V0LCBpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgLy8gRklYTUU6IE5lZWQgdG8gaW1wbGVtZW50IHNjYWxlZCB2ZXJzaW9uCi0gICAgICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdl
KSk7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvcHlJ
bWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHBy
ZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBQbGF0Zm9ybUltYWdlUHRyIGltYWdlOwot
ICAgIGlmIChyZXNvbHV0aW9uU2NhbGUoKSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQ
cmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2Uo
Y29weUJlaGF2aW9yKS0+cGxhdGZvcm1JbWFnZSgpOwotICAgIGVsc2UKLSAgICAgICAgaW1hZ2Ug
PSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpLT5wbGF0Zm9ybUltYWdlKCk7
Ci0KLSAgICBhdXRvIGJpdG1hcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SUQyRDFCaXRtYXBS
ZW5kZXJUYXJnZXQqPihjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOwotICAgIHJldHVybiBj
cmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdldCwgV1RGTW92
ZShpbWFnZSksIGludGVybmFsU2l6ZSgpLCByZXNvbHV0aW9uU2NhbGUoKSwgcHJlc2VydmVSZXNv
bHV0aW9uKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewot
ICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0OwotICAgIEhS
RVNVTFQgaHIgPSBjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5R
dWVyeUludGVyZmFjZSgmYml0bWFwVGFyZ2V0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUGxhdGZvcm1JbWFnZVB0ciBpbWFnZSA9IGNv
cHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSktPnBsYXRmb3JtSW1hZ2UoKTsKLSAg
ICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJn
ZXQuZ2V0KCksIFdURk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgcmVzb2x1dGlvblNjYWxl
KCksIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVBsYXRmb3JtSW1hZ2VQdHIgSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQ6OmNvbXBhdGlibGVCaXRtYXAoSUQyRDFSZW5kZXJUYXJnZXQqIHJl
bmRlclRhcmdldCkKLXsKLSAgICBsb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKLQotICAgIGlm
ICghcmVuZGVyVGFyZ2V0KQotICAgICAgICByZXR1cm4gYml0bWFwOwotCi0gICAgaWYgKG1fcGxh
dGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSA9PSByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAg
Q09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQoUXVlcnksIHJlbmRl
clRhcmdldCk7Ci0gICAgICAgIGlmIChiaXRtYXBUYXJnZXQpIHsKLSAgICAgICAgICAgIENPTVB0
cjxJRDJEMUJpdG1hcD4gYmFja2luZ0JpdG1hcDsKLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQo
Yml0bWFwVGFyZ2V0LT5HZXRCaXRtYXAoJmJhY2tpbmdCaXRtYXApKSkgewotICAgICAgICAgICAg
ICAgIGlmIChiYWNraW5nQml0bWFwICE9IG1fYml0bWFwKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gYml0bWFwOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgZHJhdyBhbiBJRDJE
MUJpdG1hcCB0byBpdHNlbGYuIE11c3QgcmV0dXJuIGEgY29weS4KLSAgICAgICAgICAgICAgICBD
T01QdHI8SUQyRDFCaXRtYXA+IGNvcGllZEJpdG1hcDsKLSAgICAgICAgICAgICAgICBpZiAoU1VD
Q0VFREVEKHJlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCks
IERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCksICZjb3BpZWRCaXRtYXApKSkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGNvcGllZEJpdG1hcC0+Q29weUZyb21CaXRtYXAo
bnVsbHB0ciwgbV9iaXRtYXAuZ2V0KCksIG51bGxwdHIpKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjb3BpZWRCaXRtYXA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byBzaXplID0gbV9iaXRtYXAtPkdldFBpeGVs
U2l6ZSgpOwotICAgIEFTU0VSVChzaXplLmhlaWdodCAmJiBzaXplLndpZHRoKTsKLQotICAgIENo
ZWNrZWRVaW50MzIgbnVtQnl0ZXMgPSBzaXplLndpZHRoICogc2l6ZS5oZWlnaHQgKiA0OwotICAg
IGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgLy8gQ29weSB0aGUgYml0cyBmcm9tIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRvIHRoZSBv
dXRwdXQgdGFyZ2V0LgotICAgIC8vIFdlIGNhbm5vdCBhY2Nlc3MgdGhlIGRhdGEgYmFja2luZyBh
biBJV0lDQml0bWFwIHdoaWxlIGFuIGFjdGl2ZSBkcmF3IHNlc3Npb24gaXMgb3Blbi4KLSAgICBj
b250ZXh0LT5lbmREcmF3KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBzb3Vy
Y2VEZXZpY2VDb250ZXh0ID0gbV9wbGF0Zm9ybUNvbnRleHQtPmRldmljZUNvbnRleHQoKTsKLSAg
ICBpZiAoIXNvdXJjZURldmljZUNvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgQ09NUHRyPElEMkQxQml0bWFwMT4gc291cmNlQ1BVQml0bWFwOwotICAgIEQyRDFfQklUTUFQ
X1BST1BFUlRJRVMxIGJpdG1hcFByb3BlcnRpZXMgPSBEMkQxOjpCaXRtYXBQcm9wZXJ0aWVzMShE
MkQxX0JJVE1BUF9PUFRJT05TX0NQVV9SRUFEIHwgRDJEMV9CSVRNQVBfT1BUSU9OU19DQU5OT1Rf
RFJBVywgRGlyZWN0MkQ6OnBpeGVsRm9ybWF0KCkpOwotICAgIEhSRVNVTFQgaHIgPSBzb3VyY2VE
ZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAobV9iaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBudWxs
cHRyLCBieXRlc1BlclJvdywgYml0bWFwUHJvcGVydGllcywgJnNvdXJjZUNQVUJpdG1hcCk7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlm
ICghc291cmNlQ1BVQml0bWFwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGhyID0g
c291cmNlQ1BVQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBtX2JpdG1hcC5nZXQoKSwg
bnVsbHB0cik7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFwcGVkU291cmNlRGF0YTsKLSAgICBociA9IHNv
dXJjZUNQVUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZFNvdXJjZURh
dGEpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiB0YXJnZXREZXZpY2VDb250ZXh0OwotICAg
IGhyID0gcmVuZGVyVGFyZ2V0LT5RdWVyeUludGVyZmFjZSgmdGFyZ2V0RGV2aWNlQ29udGV4dCk7
Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBj
b21wYXRpYmxlQml0bWFwOwotICAgIGhyID0gdGFyZ2V0RGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0
bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG1hcHBlZFNvdXJjZURhdGEuYml0cywgbWFwcGVk
U291cmNlRGF0YS5waXRjaCwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvbXBhdGli
bGVCaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+VW5tYXAoKTsKLSAgICBBU1NFUlQoU1VD
Q0VFREVEKGhyKSk7Ci0KLSAgICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKLQotICAgIHJldHVybiBj
b21wYXRpYmxlQml0bWFwOwotfQotCi12b2lkIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0g
ICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKHJlc29sdXRpb25TY2FsZSgpKTsKLQotICAgIGF1dG8g
Y29tcGF0aWJsZUJpdG1hcCA9IGNvbXBhdGlibGVCaXRtYXAoZGVzdENvbnRleHQucGxhdGZvcm1D
b250ZXh0KCktPnJlbmRlclRhcmdldCgpKTsKLQotICAgIEZsb2F0U2l6ZSBjdXJyZW50SW1hZ2VT
aXplID0gbmF0aXZlSW1hZ2VTaXplKGNvbXBhdGlibGVCaXRtYXApOwotICAgIGlmIChjdXJyZW50
SW1hZ2VTaXplLmlzWmVybygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkZXN0Q29udGV4dC5k
cmF3TmF0aXZlSW1hZ2UoY29tcGF0aWJsZUJpdG1hcCwgY3VycmVudEltYWdlU2l6ZSwgZGVzdFJl
Y3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKLXsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAg
ICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKCkpOwotCi0gICAgaWYgKGF1
dG8gaW1hZ2UgPSBjb3B5SW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFj
a2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICBpbWFnZS0+ZHJhd1Bh
dHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZDo6Y2xpcFRvTWFzayhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJl
Y3QmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYsIHN0ZDo6b3B0aW9uYWw8ZG91
YmxlPiwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIHsgfTsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0
JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Ci17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1
ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG51bGxwdHIpOwotfQotCi12b2lkIEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYgcGl4
ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZm
ZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgbnVsbHB0cik7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQu
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoRElSRUNUMkQp
Ci0KLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKLSAgICBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEKEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKTsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gY3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9z
dFdpbmRvdyopOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQm
KTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotICAg
IHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGU7Ci0KLSAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+
IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKLQotICAgIFJlZlB0cjxJbWFn
ZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pIG92ZXJyaWRlOwotCi0gICAgdm9p
ZCBjbGlwVG9NYXNrKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qp
IG92ZXJyaWRlOwotCi0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dCBvdmVycmlkZTsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsKLQot
ICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVs
QnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKLQotcHJvdGVjdGVkOgotICAgIEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IElu
dFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlKTsK
LQotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4gbV9wbGF0Zm9y
bUNvbnRleHQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0
OwotICAgIFBsYXRmb3JtSW1hZ2VQdHIgbV9iaXRtYXA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJl
Y3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwz
MDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJE
LmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLSNp
bmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSA8V2luQ29k
ZWMuaD4KLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OkltYWdlRGVj
b2RlckRpcmVjdDJEKCkKLXsKLX0KLQotSVdJQ0ltYWdpbmdGYWN0b3J5MiogSW1hZ2VEZWNvZGVy
RGlyZWN0MkQ6OnN5c3RlbUltYWdpbmdGYWN0b3J5KCkKLXsKLSAgICBzdGF0aWMgSVdJQ0ltYWdp
bmdGYWN0b3J5Miogd2ljSW1hZ2luZ0ZhY3RvcnkgPSBudWxscHRyOwotICAgIGlmICghd2ljSW1h
Z2luZ0ZhY3RvcnkpIHsKLSAgICAgICAgSFJFU1VMVCBociA9IENvQ3JlYXRlSW5zdGFuY2UoQ0xT
SURfV0lDSW1hZ2luZ0ZhY3RvcnksIG51bGxwdHIsIENMU0NUWF9JTlBST0NfU0VSVkVSLCBJSURf
SVdJQ0ltYWdpbmdGYWN0b3J5MiwgKExQVk9JRCopJndpY0ltYWdpbmdGYWN0b3J5KTsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHdp
Y0ltYWdpbmdGYWN0b3J5OwotfQotCi1zaXplX3QgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmJ5dGVz
RGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcygpIGNvbnN0Ci17Ci0gICAgLy8gU2V0IHRvIG1h
dGNoIHZhbHVlIHVzZWQgZm9yIENvcmVHcmFwaGljcy4KLSAgICByZXR1cm4gMTMwODg7Ci19Ci0K
LVN0cmluZyBJbWFnZURlY29kZXJEaXJlY3QyRDo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1ib29s
IEltYWdlRGVjb2RlckRpcmVjdDJEOjppc1NpemVBdmFpbGFibGUoKSBjb25zdAotewotICAgIHJl
dHVybiBtX25hdGl2ZURlY29kZXIgPyB0cnVlIDogZmFsc2U7Ci19Ci0KLUVuY29kZWREYXRhU3Rh
dHVzIEltYWdlRGVjb2RlckRpcmVjdDJEOjplbmNvZGVkRGF0YVN0YXR1cygpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX25hdGl2ZURlY29kZXIpCi0gICAgICAgIHJldHVybiBFbmNvZGVkRGF0YVN0YXR1
czo6RXJyb3I7Ci0KLSAgICAvLyBGSVhNRTogSG9vayBpbnRvIFdJQyBkZWNvZGVyIChpZiBhc3lu
YyBkZWNvZGUgaXMgZXZlbiBwb3NzaWJsZSkKLSAgICByZXR1cm4gRW5jb2RlZERhdGFTdGF0dXM6
OkNvbXBsZXRlOwotfQotCi1JbnRTaXplIEltYWdlRGVjb2RlckRpcmVjdDJEOjpzaXplKCkgY29u
c3QKLXsKLSAgICBpZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJuIEludFNpemUo
KTsKLQotICAgIENPTVB0cjxJV0lDQml0bWFwRnJhbWVEZWNvZGU+IGZyYW1lOwotICAgIEhSRVNV
TFQgaHIgPSBtX25hdGl2ZURlY29kZXItPkdldEZyYW1lKDAsICZmcmFtZSk7Ci0gICAgaWYgKCFT
VUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgVUlOVCB3aWR0
aCwgaGVpZ2h0OwotICAgIGhyID0gZnJhbWUtPkdldFNpemUoJndpZHRoLCAmaGVpZ2h0KTsKLSAg
ICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBy
ZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLX0KLQotc2l6ZV90IEltYWdlRGVjb2RlckRp
cmVjdDJEOjpmcmFtZUNvdW50KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbmF0aXZlRGVjb2RlcikK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBVSU5UIGNvdW50OwotICAgIEhSRVNVTFQgaHIgPSBt
X25hdGl2ZURlY29kZXItPkdldEZyYW1lQ291bnQoJmNvdW50KTsKLSAgICBpZiAoIVNVQ0NFRURF
RChocikpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGNvdW50OwotfQotCi1SZXBl
dGl0aW9uQ291bnQgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OnJlcGV0aXRpb25Db3VudCgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX25hdGl2ZURlY29kZXIpCi0gICAgICAgIHJldHVybiBSZXBldGl0aW9u
Q291bnROb25lOwotCi0gICAgLy8gRklYTUU6IElkZW50aWZ5IGltYWdlIHR5cGUsIGFuZCBkZXRl
cm1pbmUgcHJvcGVyIHJlcGV0aXRpb24gY291bnQuCi0gICAgcmV0dXJuIFJlcGV0aXRpb25Db3Vu
dE5vbmU7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8SW50UG9pbnQ+IEltYWdlRGVjb2RlckRpcmVjdDJE
Ojpob3RTcG90KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQotCi1JbnRT
aXplIEltYWdlRGVjb2RlckRpcmVjdDJEOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCwg
U3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAotewotICAgIGlmICghbV9u
YXRpdmVEZWNvZGVyKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgQ09NUHRyPElX
SUNCaXRtYXBGcmFtZURlY29kZT4gZnJhbWU7Ci0gICAgSFJFU1VMVCBociA9IG1fbmF0aXZlRGVj
b2Rlci0+R2V0RnJhbWUoaW5kZXgsICZmcmFtZSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQot
ICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgVUlOVCB3aWR0aCwgaGVpZ2h0OwotICAg
IGhyID0gZnJhbWUtPkdldFNpemUoJndpZHRoLCAmaGVpZ2h0KTsKLSAgICBpZiAoIVNVQ0NFRURF
RChocikpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICByZXR1cm4gSW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KTsKLX0KLQotYm9vbCBJbWFnZURlY29kZXJEaXJlY3QyRDo6ZnJhbWVJc0Nv
bXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX25hdGl2ZURl
Y29kZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENPTVB0cjxJV0lDQml0bWFwRnJh
bWVEZWNvZGU+IGZyYW1lOwotICAgIEhSRVNVTFQgaHIgPSBtX25hdGl2ZURlY29kZXItPkdldEZy
YW1lKGluZGV4LCAmZnJhbWUpOwotICAgIHJldHVybiBTVUNDRUVERUQoaHIpOwotfQotSW1hZ2VE
ZWNvZGVyOjpGcmFtZU1ldGFkYXRhIEltYWdlRGVjb2RlckRpcmVjdDJEOjpmcmFtZU1ldGFkYXRh
QXRJbmRleChzaXplX3QpIGNvbnN0IGZpbmFsOwotewotICAgIGlmICghbV9uYXRpdmVEZWNvZGVy
KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgQ09NUHRyPElXSUNCaXRtYXBGcmFtZURlY29k
ZT4gZnJhbWU7Ci0gICAgSFJFU1VMVCBociA9IG1fbmF0aXZlRGVjb2Rlci0+R2V0RnJhbWUoaW5k
ZXgsICZmcmFtZSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4geyB9
OwotCi0gICAgQ09NUHRyPElXSUNNZXRhZGF0YVF1ZXJ5UmVhZGVyPiBtZXRhZGF0YTsKLSAgICBo
ciA9IGZyYW1lLT5HZXRNZXRhZGF0YVF1ZXJ5UmVhZGVyKCZtZXRhZGF0YSk7Ci0gICAgaWYgKCFT
VUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgUFJPUFZBUklBTlQgdmFs
dWU7Ci0gICAgUHJvcFZhcmlhbnRJbml0KCZ2YWx1ZSk7Ci0gICAgaHIgPSBtZXRhZGF0YS0+R2V0
TWV0YWRhdGFCeU5hbWUoTCJTeXN0ZW0uUGhvdG8uT3JpZW50YXRpb24iLCAmdmFsdWUpOwotICAg
IGlmIChTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4geyBJbWFnZU9yaWVudGF0aW9uKHN0
YXRpY19jYXN0PEltYWdlT3JpZW50YXRpb246Ok9yaWVudGF0aW9uPih2YWx1ZS51aVZhbCkpLCBz
dGQ6Om51bGxvcHQgfTsKLQotICAgIHJldHVybiB7IH07Ci19Ci0KLVNlY29uZHMgSW1hZ2VEZWNv
ZGVyRGlyZWN0MkQ6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKLXsK
LSAgICBpZiAoIW1fbmF0aXZlRGVjb2RlcikKLSAgICAgICAgcmV0dXJuIFNlY29uZHMoMCk7Ci0K
LSAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2RlPiBmcmFtZTsKLSAgICBIUkVTVUxUIGhy
ID0gbV9uYXRpdmVEZWNvZGVyLT5HZXRGcmFtZShpbmRleCwgJmZyYW1lKTsKLSAgICBpZiAoIVNV
Q0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBTZWNvbmRzKDApOwotCi0gICAgLy8gRklYTUU6
IEZpZ3VyZSBvdXQgY29ycmVjdCBpbWFnZSBmb3JtYXQtc3BlY2lmaWMgcXVlcnkgZm9yIGZyYW1l
IGR1cmF0aW9uIGNoZWNrLgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFNlY29u
ZHMoMCk7Ci19Ci0KLWJvb2wgSW1hZ2VEZWNvZGVyRGlyZWN0MkQ6OmZyYW1lQWxsb3dTdWJzYW1w
bGluZ0F0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIEltYWdlRGVjb2RlckRpcmVjdDJEOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3Qg
aW5kZXgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX25hdGl2ZURlY29kZXIpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIENPTVB0cjxJV0lDQml0bWFwRnJhbWVEZWNvZGU+IGZyYW1lOwotICAg
IEhSRVNVTFQgaHIgPSBtX25hdGl2ZURlY29kZXItPkdldEZyYW1lKGluZGV4LCAmZnJhbWUpOwot
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ09N
UHRyPElXSUNNZXRhZGF0YVF1ZXJ5UmVhZGVyPiBtZXRhZGF0YTsKLSAgICBociA9IGZyYW1lLT5H
ZXRNZXRhZGF0YVF1ZXJ5UmVhZGVyKCZtZXRhZGF0YSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHVUlEIGNvbnRhaW5lckZvcm1hdDsKLSAg
ICBociA9IG1ldGFkYXRhLT5HZXRDb250YWluZXJGb3JtYXQoJmNvbnRhaW5lckZvcm1hdCk7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
OjpJc0VxdWFsR1VJRChHVUlEX0NvbnRhaW5lckZvcm1hdEpwZWcsIGNvbnRhaW5lckZvcm1hdCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi11bnNpZ25l
ZCBJbWFnZURlY29kZXJEaXJlY3QyRDo6ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4LCBT
dWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX25h
dGl2ZURlY29kZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGZyYW1lU2l6ZUF0
SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpLmFyZWEoKSAqIDQ7Ci19Ci0KLXZvaWQgSW1h
Z2VEZWNvZGVyRGlyZWN0MkQ6OnNldFRhcmdldENvbnRleHQoSUQyRDFSZW5kZXJUYXJnZXQqIHJl
bmRlclRhcmdldCkKLXsKLSAgICBtX3JlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDsKLX0KLQot
UGxhdGZvcm1JbWFnZVB0ciBJbWFnZURlY29kZXJEaXJlY3QyRDo6Y3JlYXRlRnJhbWVJbWFnZUF0
SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIGNv
bnN0IERlY29kaW5nT3B0aW9ucyYpCi17Ci0gICAgaWYgKCFtX25hdGl2ZURlY29kZXIpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFtX3JlbmRlclRhcmdldCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SVdJQ0JpdG1hcEZyYW1lRGVjb2RlPiBmcmFt
ZTsKLSAgICBIUkVTVUxUIGhyID0gbV9uYXRpdmVEZWNvZGVyLT5HZXRGcmFtZSgwLCAmZnJhbWUp
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBDT01QdHI8SVdJQ0Zvcm1hdENvbnZlcnRlcj4gY29udmVydGVyOwotICAgIGhyID0gc3lzdGVt
SW1hZ2luZ0ZhY3RvcnkoKS0+Q3JlYXRlRm9ybWF0Q29udmVydGVyKCZjb252ZXJ0ZXIpOwotICAg
IGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBociA9
IGNvbnZlcnRlci0+SW5pdGlhbGl6ZShmcmFtZS5nZXQoKSwgR1VJRF9XSUNQaXhlbEZvcm1hdDMy
YnBwUFJHQkEsIFdJQ0JpdG1hcERpdGhlclR5cGVOb25lLCBudWxscHRyLCAwLmYsIFdJQ0JpdG1h
cFBhbGV0dGVUeXBlQ3VzdG9tKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgQ09NUHRyPElXSUNCaXRtYXA+IHdpY0JpdG1hcDsKLSAgICBo
ciA9IHN5c3RlbUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZUJpdG1hcEZyb21Tb3VyY2UoY29udmVy
dGVyLmdldCgpLCBXSUNCaXRtYXBDYWNoZU9uRGVtYW5kLCAmd2ljQml0bWFwKTsKLSAgICBpZiAo
IVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ09NUHRyPElE
MkQxQml0bWFwPiBiaXRtYXA7Ci0gICAgaHIgPSBtX3JlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFw
RnJvbVdpY0JpdG1hcCh3aWNCaXRtYXAuZ2V0KCksICZiaXRtYXApOwotICAgIGlmICghU1VDQ0VF
REVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gYml0bWFwOwot
fQotCi12b2lkIEltYWdlRGVjb2RlckRpcmVjdDJEOjpzZXREYXRhKGNvbnN0IEZyYWdtZW50ZWRT
aGFyZWRCdWZmZXImIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQotewotICAgIGlmICghYWxs
RGF0YVJlY2VpdmVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdJQ1N0cmVhbT4g
c3RyZWFtOwotICAgIEhSRVNVTFQgaHIgPSBzeXN0ZW1JbWFnaW5nRmFjdG9yeSgpLT5DcmVhdGVT
dHJlYW0oJnN0cmVhbSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBSZWY8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBkYXRhLm1ha2VDb250aWd1b3VzKCk7
Ci0gICAgY2hhciogZGF0YVB0ciA9IGNvbnN0X2Nhc3Q8Y2hhcio+KGJ1ZmZlci0+ZGF0YSgpKTsK
LSAgICBociA9IHN0cmVhbS0+SW5pdGlhbGl6ZUZyb21NZW1vcnkocmVpbnRlcnByZXRfY2FzdDxC
WVRFKj4oZGF0YVB0ciksIGRhdGEuc2l6ZSgpKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fbmF0aXZlRGVjb2RlciA9IG51bGxwdHI7Ci0KLSAgICBo
ciA9IHN5c3RlbUltYWdpbmdGYWN0b3J5KCktPkNyZWF0ZURlY29kZXJGcm9tU3RyZWFtKHN0cmVh
bS5nZXQoKSwgbnVsbHB0ciwgV0lDRGVjb2RlTWV0YWRhdGFDYWNoZU9uRGVtYW5kLCAmbV9uYXRp
dmVEZWNvZGVyKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpIHsKLSAgICAgICAgbV9uYXRpdmVE
ZWNvZGVyID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEltYWdl
IHdhcyB2YWxpZC4KLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5o
CShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDkyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5j
bHVkZSAiSW1hZ2VEZWNvZGVyLmgiCi0KLWludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLWlu
dGVyZmFjZSBJV0lDQml0bWFwRGVjb2RlcjsKLWludGVyZmFjZSBJV0lDSW1hZ2luZ0ZhY3Rvcnky
OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEltYWdlRGVjb2RlckRpcmVjdDJEIGZp
bmFsIDogcHVibGljIEltYWdlRGVjb2RlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgSW1hZ2VEZWNvZGVyRGlyZWN0MkQoKTsKLQotICAgIHN0YXRpYyBSZWY8
SW1hZ2VEZWNvZGVyRGlyZWN0MkQ+IGNyZWF0ZShGcmFnbWVudGVkU2hhcmVkQnVmZmVyJiwgQWxw
aGFPcHRpb24sIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEZWNvZGVyRGlyZWN0MkQoKSk7Ci0gICAgfQotCi0gICAg
c3RhdGljIGJvb2wgc3VwcG9ydHNNZWRpYVR5cGUoTWVkaWFUeXBlIHR5cGUpIHsgcmV0dXJuIHR5
cGUgPT0gTWVkaWFUeXBlOjpJbWFnZTsgfQotCi0gICAgc2l6ZV90IGJ5dGVzRGVjb2RlZFRvRGV0
ZXJtaW5lUHJvcGVydGllcygpIGNvbnN0IGZpbmFsOwotCi0gICAgU3RyaW5nIGZpbGVuYW1lRXh0
ZW5zaW9uKCkgY29uc3QgZmluYWw7Ci0gICAgRW5jb2RlZERhdGFTdGF0dXMgZW5jb2RlZERhdGFT
dGF0dXMoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0IGZp
bmFsOwotCi0gICAgLy8gQWx3YXlzIG9yaWdpbmFsIHNpemUsIHdpdGhvdXQgc3Vic2FtcGxpbmcu
Ci0gICAgSW50U2l6ZSBzaXplKCkgY29uc3QgZmluYWw7Ci0gICAgc2l6ZV90IGZyYW1lQ291bnQo
KSBjb25zdCBmaW5hbDsKLQotICAgIFJlcGV0aXRpb25Db3VudCByZXBldGl0aW9uQ291bnQoKSBj
b25zdCBmaW5hbDsKLSAgICBzdGQ6Om9wdGlvbmFsPEludFBvaW50PiBob3RTcG90KCkgY29uc3Qg
ZmluYWw7Ci0KLSAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGlu
Z0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCkgY29uc3QgZmluYWw7Ci0gICAgYm9v
bCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCkgY29uc3QgZmluYWw7Ci0gICAgSW1hZ2VE
ZWNvZGVyOjpGcmFtZU1ldGFkYXRhIGZyYW1lTWV0YWRhdGFBdEluZGV4KHNpemVfdCkgY29uc3Qg
ZmluYWw7Ci0KLSAgICBTZWNvbmRzIGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCkgY29uc3Qg
ZmluYWw7Ci0gICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QpIGNvbnN0IGZpbmFs
OwotICAgIGJvb2wgZnJhbWVBbGxvd1N1YnNhbXBsaW5nQXRJbmRleChzaXplX3QpIGNvbnN0IGZp
bmFsOwotICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdM
ZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQpIGNvbnN0IGZpbmFsOwotCi0gICAgUGxh
dGZvcm1JbWFnZVB0ciBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5n
TGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0LCBjb25zdCBEZWNvZGluZ09wdGlvbnMm
ID0gRGVjb2RpbmdPcHRpb25zKERlY29kaW5nTW9kZTo6U3luY2hyb25vdXMpKSBmaW5hbDsKLQot
ICAgIHZvaWQgc2V0RGF0YShjb25zdCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyJiwgYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpIGZpbmFsOwotICAgIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX2lzQWxsRGF0YVJlY2VpdmVkOyB9Ci0gICAgdm9pZCBjbGVhckZyYW1l
QnVmZmVyQ2FjaGUoc2l6ZV90KSBmaW5hbCB7IH0KLQotICAgIHZvaWQgc2V0VGFyZ2V0Q29udGV4
dChJRDJEMVJlbmRlclRhcmdldCopOwotCi0gICAgc3RhdGljIElXSUNJbWFnaW5nRmFjdG9yeTIq
IHN5c3RlbUltYWdpbmdGYWN0b3J5KCk7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX2lzQWxsRGF0
YVJlY2VpdmVkIHsgZmFsc2UgfTsKLSAgICBtdXRhYmxlIEludFNpemUgbV9zaXplOwotICAgIENP
TVB0cjxJV0lDQml0bWFwRGVjb2Rlcj4gbV9uYXRpdmVEZWNvZGVyOwotICAgIENPTVB0cjxJRDJE
MVJlbmRlclRhcmdldD4gbV9yZW5kZXJUYXJnZXQ7Ci19OwotCi19Ci0KLSNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGlyZWN0MkQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURp
cmVjdDJELmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsOTUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE4IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotCi0jaW5jbHVkZSAiQml0
bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJCaXRtYXBJbmZvLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmUHRyPEJpdG1hcEltYWdlPiBCaXRtYXBJbWFnZTo6
Y3JlYXRlKEhCSVRNQVAgaEJpdG1hcCkKLXsKLSAgICBESUJTRUNUSU9OIGRpYlNlY3Rpb247Ci0g
ICAgaWYgKCFHZXRPYmplY3QoaEJpdG1hcCwgc2l6ZW9mKERJQlNFQ1RJT04pLCAmZGliU2VjdGlv
bikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQVNTRVJUKGRpYlNlY3Rpb24uZHNC
bS5ibUJpdHNQaXhlbCA9PSAzMik7Ci0gICAgaWYgKGRpYlNlY3Rpb24uZHNCbS5ibUJpdHNQaXhl
bCAhPSAzMikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBBU1NFUlQoZGliU2VjdGlv
bi5kc0JtLmJtQml0cyk7Ci0gICAgaWYgKCFkaWJTZWN0aW9uLmRzQm0uYm1CaXRzKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0KLSAgICByZXR1cm4g
bnVsbHB0cjsKLX0KLQotYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQ
IGJtcCwgY29uc3QgSW50U2l6ZSogc2l6ZSkKLXsKLSAgICBBU1NFUlQoYm1wKTsKLQotICAgIEJJ
VE1BUCBibXBJbmZvOwotICAgIEdldE9iamVjdChibXAsIHNpemVvZihCSVRNQVApLCAmYm1wSW5m
byk7Ci0KLSAgICBBU1NFUlQoYm1wSW5mby5ibUJpdHNQaXhlbCA9PSAzMik7Ci0gICAgaW50IGJ1
ZmZlclNpemUgPSBibXBJbmZvLmJtV2lkdGhCeXRlcyAqIGJtcEluZm8uYm1IZWlnaHQ7Ci0gICAg
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEJp
dG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0JiBj
dHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQotewotICAgIHNpemVfdCBmcmFtZXMgPSBmcmFt
ZUNvdW50KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZXM7ICsraSkgewotICAg
ICAgICBhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCk7Ci0gICAgICAgIGF1
dG8gaW1hZ2VTaXplID0gbmF0aXZlSW1hZ2VTaXplKGltYWdlKTsKLSAgICAgICAgaWYgKGltYWdl
ICYmIGNsYW1wVG88aW50PihpbWFnZVNpemUuaGVpZ2h0KCkpID09IHN0YXRpY19jYXN0PGludD4o
c3JjU2l6ZS5oZWlnaHQoKSkgJiYgY2xhbXBUbzxpbnQ+KGltYWdlU2l6ZS53aWR0aCgpKSA9PSBz
dGF0aWNfY2FzdDxpbnQ+KHNyY1NpemUud2lkdGgoKSkpIHsKLSAgICAgICAgICAgIHNpemVfdCBj
dXJyZW50RnJhbWUgPSBtX2N1cnJlbnRGcmFtZTsKLSAgICAgICAgICAgIG1fY3VycmVudEZyYW1l
ID0gaTsKLSAgICAgICAgICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAuMGYsIDAu
MGYsIHNyY1NpemUud2lkdGgoKSwgc3JjU2l6ZS5oZWlnaHQoKSksIHsgY29tcG9zaXRlT3AgfSk7
Ci0gICAgICAgICAgICBtX2N1cnJlbnRGcmFtZSA9IGN1cnJlbnRGcmFtZTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vIGltYWdlIG9mIHRoZSBjb3Jy
ZWN0IHNpemUgd2FzIGZvdW5kLCBmYWxsYmFjayB0byBkcmF3aW5nIHRoZSBjdXJyZW50IGZyYW1l
Ci0gICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKCk7Ci0gICAgZHJh
dyhjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgaW1hZ2VTaXplLndpZHRoKCks
IGltYWdlU2l6ZS5oZWlnaHQoKSksIHsgY29tcG9zaXRlT3AgfSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bnRQb2ludFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ludFBvaW50V2luLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFBvaW50V2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsOSArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkludFBv
aW50LmgiCiAKLSNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8d2luZG93cy5oPgotCiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTcsMjYg
KzU1LDQgQEAgSW50UG9pbnQ6Om9wZXJhdG9yIFBPSU5UUygpIGNvbnN0CiAgICAgcmV0dXJuIHA7
CiB9CiAKLUludFBvaW50OjpJbnRQb2ludChjb25zdCBEMkQxX1BPSU5UXzJGJiBwKQotICAgIDog
bV94KGNsYW1wVG9JbnRlZ2VyKHAueCkpCi0gICAgLCBtX3koY2xhbXBUb0ludGVnZXIocC55KSkK
LXsKLX0KLQotSW50UG9pbnQ6OkludFBvaW50KGNvbnN0IEQyRDFfUE9JTlRfMlUmIHApCi0gICAg
OiBtX3gocC54KQotICAgICwgbV95KHAueSkKLXsKLX0KLQotSW50UG9pbnQ6Om9wZXJhdG9yIEQy
RDFfUE9JTlRfMkYoKSBjb25zdAotewotICAgIHJldHVybiBEMkQxOjpQb2ludDJGKG1feCwgbV95
KTsKLX0KLQotSW50UG9pbnQ6Om9wZXJhdG9yIEQyRDFfUE9JTlRfMlUoKSBjb25zdAotewotICAg
IHJldHVybiBEMkQxOjpQb2ludDJVKG1feCwgbV95KTsKLX0KLQogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFJlY3RXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbnRSZWN0V2luLmNwcAkocmV2
aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lu
dFJlY3RXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogCi0jaW5jbHVkZSA8ZDJkMS5oPgogI2lu
Y2x1ZGUgPHdpbmRvd3MuaD4KLQogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTQ1LDI2ICs0Myw0IEBAIEludFJlY3Q6Om9wZXJhdG9yIFJFQ1Qo
KSBjb25zdAogICAgIHJldHVybiByZWN0OwogfQogCi1JbnRSZWN0OjpJbnRSZWN0KGNvbnN0IEQy
RDFfUkVDVF9GJiByKQotICAgIDogbV9sb2NhdGlvbihJbnRQb2ludChjbGFtcFRvSW50ZWdlcihy
LmxlZnQpLCBjbGFtcFRvSW50ZWdlcihyLnRvcCkpKQotICAgICwgbV9zaXplKEludFNpemUoY2xh
bXBUb0ludGVnZXIoci5yaWdodCAtIHIubGVmdCksIGNsYW1wVG9JbnRlZ2VyKHIuYm90dG9tIC0g
ci50b3ApKSkKLXsKLX0KLQotSW50UmVjdDo6SW50UmVjdChjb25zdCBEMkQxX1JFQ1RfVSYgcikK
LSAgICA6IG1fbG9jYXRpb24oSW50UG9pbnQoci5sZWZ0LCByLnRvcCkpCi0gICAgLCBtX3NpemUo
SW50U2l6ZShyLnJpZ2h0IC0gci5sZWZ0LCByLmJvdHRvbSAtIHIudG9wKSkKLXsKLX0KLQotSW50
UmVjdDo6b3BlcmF0b3IgRDJEMV9SRUNUX0YoKSBjb25zdAotewotICAgIHJldHVybiBEMkQxOjpS
ZWN0Rih4KCksIHkoKSwgbWF4WCgpLCBtYXhZKCkpOwotfQotCi1JbnRSZWN0OjpvcGVyYXRvciBE
MkQxX1JFQ1RfVSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEQyRDE6OlJlY3RVKHgoKSwgeSgpLCBt
YXhYKCksIG1heFkoKSk7Ci19Ci0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbnRTaXplV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW50U2l6ZVdpbi5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbnRTaXplV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsOSArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkludFNpemUuaCIKIAotI2luY2x1ZGUgPGQyZDEuaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+
Ci0KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC00NSwyNiArNDMsNCBAQCBJbnRTaXplOjpvcGVyYXRvciBTSVpFKCkgY29uc3QKICAgICByZXR1
cm4gczsKIH0KIAotSW50U2l6ZTo6SW50U2l6ZShjb25zdCBEMkQxX1NJWkVfVSYgcykKLSAgICA6
IG1fd2lkdGgocy53aWR0aCkKLSAgICAsIG1faGVpZ2h0KHMuaGVpZ2h0KQotewotfQotCi1JbnRT
aXplOjpJbnRTaXplKGNvbnN0IEQyRDFfU0laRV9GJiBzKQotICAgIDogbV93aWR0aChjbGFtcFRv
SW50ZWdlcihzLndpZHRoKSkKLSAgICAsIG1faGVpZ2h0KGNsYW1wVG9JbnRlZ2VyKHMuaGVpZ2h0
KSkKLXsKLX0KLQotSW50U2l6ZTo6b3BlcmF0b3IgRDJEMV9TSVpFX1UoKSBjb25zdAotewotICAg
IHJldHVybiBEMkQxOjpTaXplVShtX3dpZHRoLCBtX2hlaWdodCk7Ci19Ci0KLUludFNpemU6Om9w
ZXJhdG9yIEQyRDFfU0laRV9GKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRDJEMTo6U2l6ZUYobV93
aWR0aCwgbV9oZWlnaHQpOwotfQotCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwCShy
ZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
TmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw4MCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgotCi0jaW5jbHVkZSAiRGlyZWN0MkRP
cGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0j
aW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHdpbmNvZGVjLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIElXSUNJbWFnaW5nRmFjdG9yeSogaW1hZ2luZ0ZhY3RvcnkoKQotewot
ICAgIHN0YXRpYyBJV0lDSW1hZ2luZ0ZhY3RvcnkqIGltYWdpbmdGYWN0b3J5ID0gbnVsbHB0cjsK
LSAgICBpZiAoIWltYWdpbmdGYWN0b3J5KSB7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBDb0NyZWF0
ZUluc3RhbmNlKENMU0lEX1dJQ0ltYWdpbmdGYWN0b3J5LCBudWxscHRyLCBDTFNDVFhfSU5QUk9D
X1NFUlZFUiwgSUlEX1BQVl9BUkdTKCZpbWFnaW5nRmFjdG9yeSkpOwotICAgICAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW1hZ2luZ0ZhY3Rv
cnk7Ci19Ci0KLUludFNpemUgTmF0aXZlSW1hZ2U6OnNpemUoKSBjb25zdAotewotICAgIHJldHVy
biBtX3BsYXRmb3JtSW1hZ2UtPkdldFBpeGVsU2l6ZSgpOwotfQotCi1ib29sIE5hdGl2ZUltYWdl
OjpoYXNBbHBoYSgpIGNvbnN0Ci17Ci0gICAgRDJEMV9QSVhFTF9GT1JNQVQgcGl4ZWxGb3JtYXQg
PSBtX3BsYXRmb3JtSW1hZ2UtPkdldFBpeGVsRm9ybWF0KCk7Ci0gICAgcmV0dXJuIHBpeGVsRm9y
bWF0LmFscGhhTW9kZSAhPSBEMkQxX0FMUEhBX01PREVfSUdOT1JFOwotfQotCi1Db2xvciBOYXRp
dmVJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKLXsKLSAgICBpZiAoc2l6ZSgp
ICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gQ29sb3IoKTsKLX0KLQotRGVzdGluYXRpb25Db2xvclNw
YWNlIE5hdGl2ZUltYWdlOjpjb2xvclNwYWNlKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKTsKLX0KLQotdm9p
ZCBOYXRpdmVJbWFnZTo6Y2xlYXJTdWJpbWFnZXMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRo
RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQp
CkBAIC0xLDY2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYXRoLmgiCi0K
LSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNs
dWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUgPGQy
ZDEuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1zdGF0aWMgaW5saW5lIElEMkQxUmVuZGVyVGFyZ2V0KiBzY3JhdGNoUmVuZGVyVGFy
Z2V0KCkKLXsKLSAgICBzdGF0aWMgQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiByZW5kZXJUYXJn
ZXQgPSBhZG9wdENPTShHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKSk7Ci0g
ICAgcmV0dXJuIHJlbmRlclRhcmdldC5nZXQoKTsKLX0KLQotUGF0aCBQYXRoOjpwb2x5Z29uUGF0
aEZyb21Qb2ludHMoY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQ+JiBwb2ludHMpCi17Ci0gICAgUGF0
aCBwYXRoOwotICAgIGlmIChwb2ludHMuc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0dXJuIHBhdGg7
Ci0KLSAgICBWZWN0b3I8RDJEMV9QT0lOVF8yRiwgMzI+IGQyZFBvaW50czsKLSAgICBkMmRQb2lu
dHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwb2ludHMuc2l6ZSgpIC0gMSk7Ci0gICAgZm9yIChh
dXRvIHBvaW50IDogcG9pbnRzKQotICAgICAgICBkMmRQb2ludHMudW5jaGVja2VkQXBwZW5kKHBv
aW50KTsKLQotICAgIHBhdGgubW92ZVRvKHBvaW50cy5maXJzdCgpKTsKLQotICAgIEFTU0VSVChw
YXRoLm1fYWN0aXZlUGF0aCk7Ci0KLSAgICBwYXRoLm1fYWN0aXZlUGF0aC0+QWRkTGluZXMoZDJk
UG9pbnRzLmRhdGEoKSwgZDJkUG9pbnRzLnNpemUoKSk7Ci0gICAgcGF0aC5jbG9zZVN1YnBhdGgo
KTsKLQotICAgIHJldHVybiBwYXRoOwotfQotCi1QYXRoOjpQYXRoKCkgPSBkZWZhdWx0OwotCi1Q
YXRoOjp+UGF0aCgpCi17Ci0gICAgY2xlYXJHZW9tZXRyaWVzKCk7Ci19Ci0KLVBsYXRmb3JtUGF0
aFB0ciBQYXRoOjplbnN1cmVQbGF0Zm9ybVBhdGgoKQotewotICAgIGlmICghbV9wYXRoKSB7Ci0g
ICAgICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3Jl
YXRlR2VvbWV0cnlHcm91cChEMkQxX0ZJTExfTU9ERV9XSU5ESU5HLCBudWxscHRyLCAwLCAmbV9w
YXRoKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgICAgICBpZiAoRkFJTEVE
KGhyKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBBU1NFUlQocmVmQ291
bnQobV9wYXRoLmdldCgpKSA9PSAxKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9wYXRoLmdldCgp
OwotfQotCi12b2lkIFBhdGg6OmNsZWFyR2VvbWV0cmllcygpCi17Ci0gICAgLy8gTWFudWFsbHkg
Y2xlYW4gdGhlc2UgdXAgc28gdGhhdCB3ZSBjYW4gdXNlIHRoaXMgdmVjdG9yIHdpdGggRGlyZWN0
MkQgQVBJcy4KLSAgICBmb3IgKGF1dG8qIGdlb21ldHJ5IDogbV9nZW9tZXRyaWVzKQotICAgICAg
ICBnZW9tZXRyeS0+UmVsZWFzZSgpOwotICAgIG1fZ2VvbWV0cmllcy5jbGVhcigpOwotfQotCi12
b2lkIFBhdGg6OmFwcGVuZEdlb21ldHJ5KElEMkQxR2VvbWV0cnkqIGdlb21ldHJ5KQotewotI2lm
IEFTU0VSVF9FTkFCTEVECi0gICAgdW5zaWduZWQgYmVmb3JlID0gcmVmQ291bnQoZ2VvbWV0cnkp
OwotI2VuZGlmCi0KLSAgICB1bnNpZ25lZCBnZW9tZXRyeUNvdW50ID0gbV9wYXRoID8gbV9wYXRo
LT5HZXRTb3VyY2VHZW9tZXRyeUNvdW50KCkgOiAwOwotCi0gICAgUkVMRUFTRV9BU1NFUlQobV9n
ZW9tZXRyaWVzLnNpemUoKSA9PSBnZW9tZXRyeUNvdW50KTsKLQotICAgIGdlb21ldHJ5LT5BZGRS
ZWYoKTsKLSAgICBtX2dlb21ldHJpZXMuYXBwZW5kKGdlb21ldHJ5KTsKLQotICAgIGF1dG8gZmls
bE1vZGUgPSBtX3BhdGggPyBtX3BhdGgtPkdldEZpbGxNb2RlKCkgOiBEMkQxX0ZJTExfTU9ERV9X
SU5ESU5HOwotCi0gICAgbV9wYXRoID0gbnVsbHB0cjsKLQotICAgIEhSRVNVTFQgaHIgPSBHcmFw
aGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlR2VvbWV0cnlHcm91cChmaWxsTW9k
ZSwgbV9nZW9tZXRyaWVzLmRhdGEoKSwgbV9nZW9tZXRyaWVzLnNpemUoKSwgJm1fcGF0aCk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBBU1NFUlQocmVmQ291bnQo
Z2VvbWV0cnkpID09IGJlZm9yZSArIDEpOwotfQotCi12b2lkIFBhdGg6OmNyZWF0ZUdlb21ldHJ5
V2l0aEZpbGxNb2RlKFdpbmRSdWxlIHdlYmtpdEZpbGxNb2RlLCBDT01QdHI8SUQyRDFHZW9tZXRy
eUdyb3VwPiYgcGF0aCkgY29uc3QKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3BhdGgpOwotCi0g
ICAgYXV0byBmaWxsTW9kZSA9ICh3ZWJraXRGaWxsTW9kZSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkg
PyBEMkQxX0ZJTExfTU9ERV9BTFRFUk5BVEUgOiBEMkQxX0ZJTExfTU9ERV9XSU5ESU5HOwotCi0g
ICAgaWYgKGZpbGxNb2RlID09IG1fcGF0aC0+R2V0RmlsbE1vZGUoKSkgewotICAgICAgICBwYXRo
ID0gbV9wYXRoOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdW5zaWduZWQgZ2VvbWV0
cnlDb3VudCA9IG1fcGF0aC0+R2V0U291cmNlR2VvbWV0cnlDb3VudCgpOwotCi0gICAgQVNTRVJU
KG1fZ2VvbWV0cmllcy5zaXplKCkgPT0gZ2VvbWV0cnlDb3VudCk7Ci0KLSAgICBIUkVTVUxUIGhy
ID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUdlb21ldHJ5R3JvdXAo
ZmlsbE1vZGUsIGNvbnN0X2Nhc3Q8SUQyRDFHZW9tZXRyeSoqPihtX2dlb21ldHJpZXMuZGF0YSgp
KSwgbV9nZW9tZXRyaWVzLnNpemUoKSwgJnBhdGgpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NF
RURFRChocikpOwotICAgIEFTU0VSVChyZWZDb3VudChwYXRoLmdldCgpKSA9PSAxKTsKLX0KLQot
UGF0aDo6UGF0aChjb25zdCBQYXRoJiBvdGhlcikKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAg
IHVuc2lnbmVkIHBhdGhDb3VudCA9IHJlZkNvdW50KG90aGVyLm1fcGF0aC5nZXQoKSk7Ci0gICAg
dW5zaWduZWQgYWN0aXZlUGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9hY3RpdmVQYXRoLmdl
dCgpKTsKLSNlbmRpZgotICAgIG1fcGF0aCA9IG90aGVyLm1fcGF0aDsKLSAgICBtX2FjdGl2ZVBh
dGggPSBvdGhlci5tX2FjdGl2ZVBhdGg7Ci0gICAgbV9nZW9tZXRyaWVzID0gb3RoZXIubV9nZW9t
ZXRyaWVzOwotICAgIGZvciAoYXV0byogZ2VvbWV0cnkgOiBtX2dlb21ldHJpZXMpCi0gICAgICAg
IGdlb21ldHJ5LT5BZGRSZWYoKTsKLQotICAgIEFTU0VSVCghbV9wYXRoIHx8IHJlZkNvdW50KG1f
cGF0aC5nZXQoKSkgPT0gcGF0aENvdW50ICsgMSk7Ci0gICAgQVNTRVJUKCFtX2FjdGl2ZVBhdGgg
fHwgcmVmQ291bnQobV9hY3RpdmVQYXRoLmdldCgpKSA9PSBhY3RpdmVQYXRoQ291bnQgKyAxKTsK
LX0KLSAgICAKLVBhdGg6OlBhdGgoUGF0aCYmIG90aGVyKQotewotI2lmIEFTU0VSVF9FTkFCTEVE
Ci0gICAgdW5zaWduZWQgcGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9wYXRoLmdldCgpKTsK
LSAgICB1bnNpZ25lZCBhY3RpdmVQYXRoQ291bnQgPSByZWZDb3VudChvdGhlci5tX2FjdGl2ZVBh
dGguZ2V0KCkpOwotI2VuZGlmCi0gICAgbV9wYXRoID0gV1RGTW92ZShvdGhlci5tX3BhdGgpOwot
ICAgIG1fYWN0aXZlUGF0aCA9IFdURk1vdmUob3RoZXIubV9hY3RpdmVQYXRoKTsKLSAgICBtX2dl
b21ldHJpZXMgPSBXVEZNb3ZlKG90aGVyLm1fZ2VvbWV0cmllcyk7Ci0KLSAgICBBU1NFUlQocmVm
Q291bnQobV9wYXRoLmdldCgpKSA9PSBwYXRoQ291bnQpOwotICAgIEFTU0VSVChyZWZDb3VudCht
X2FjdGl2ZVBhdGguZ2V0KCkpID09IGFjdGl2ZVBhdGhDb3VudCk7Ci19Ci0KLVBhdGgmIFBhdGg6
Om9wZXJhdG9yPShjb25zdCBQYXRoJiBvdGhlcikKLXsKLSAgICBpZiAodGhpcyA9PSAmb3RoZXIp
Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHVuc2lnbmVk
IHBhdGhDb3VudCA9IHJlZkNvdW50KG90aGVyLm1fcGF0aC5nZXQoKSk7Ci0gICAgdW5zaWduZWQg
YWN0aXZlUGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9hY3RpdmVQYXRoLmdldCgpKTsKLSNl
bmRpZgotICAgIG1fcGF0aCA9IG90aGVyLm1fcGF0aDsKLSAgICBtX2FjdGl2ZVBhdGggPSBvdGhl
ci5tX2FjdGl2ZVBhdGg7Ci0gICAgbV9nZW9tZXRyaWVzID0gb3RoZXIubV9nZW9tZXRyaWVzOwot
ICAgIGZvciAoYXV0byogZ2VvbWV0cnkgOiBtX2dlb21ldHJpZXMpCi0gICAgICAgIGdlb21ldHJ5
LT5BZGRSZWYoKTsKLQotICAgIEFTU0VSVCghbV9wYXRoIHx8IHJlZkNvdW50KG1fcGF0aC5nZXQo
KSkgPT0gcGF0aENvdW50ICsgMSk7Ci0gICAgQVNTRVJUKCFtX2FjdGl2ZVBhdGggfHwgcmVmQ291
bnQobV9hY3RpdmVQYXRoLmdldCgpKSA9PSBhY3RpdmVQYXRoQ291bnQgKyAxKTsKLQotICAgIHJl
dHVybiAqdGhpczsKLX0KLQotUGF0aCYgUGF0aDo6b3BlcmF0b3I9KFBhdGgmJiBvdGhlcikKLXsK
LSAgICBpZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgIHJldHVybiAqdGhpczsKLQotI2lmIEFT
U0VSVF9FTkFCTEVECi0gICAgdW5zaWduZWQgcGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9w
YXRoLmdldCgpKTsKLSAgICB1bnNpZ25lZCBhY3RpdmVQYXRoQ291bnQgPSByZWZDb3VudChvdGhl
ci5tX2FjdGl2ZVBhdGguZ2V0KCkpOwotI2VuZGlmCi0gICAgbV9wYXRoID0gV1RGTW92ZShvdGhl
ci5tX3BhdGgpOwotICAgIG1fYWN0aXZlUGF0aCA9IFdURk1vdmUob3RoZXIubV9hY3RpdmVQYXRo
KTsKLSAgICBtX2dlb21ldHJpZXMgPSBXVEZNb3ZlKG90aGVyLm1fZ2VvbWV0cmllcyk7Ci0KLSAg
ICBBU1NFUlQocmVmQ291bnQobV9wYXRoLmdldCgpKSA9PSBwYXRoQ291bnQpOwotICAgIEFTU0VS
VChyZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0KCkpID09IGFjdGl2ZVBhdGhDb3VudCk7Ci0KLSAg
ICByZXR1cm4gKnRoaXM7Ci19Ci0KLWJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0Ci17Ci0gICAgaWYgKGlzTnVsbCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWZhc3RCb3VuZGluZ1JlY3QoKS5jb250YWlu
cyhwb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEJPT0wgY29udGFpbnM7Ci0g
ICAgaWYgKCFTVUNDRUVERUQobV9wYXRoLT5GaWxsQ29udGFpbnNQb2ludChwb2ludCwgbnVsbHB0
ciwgJmNvbnRhaW5zKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBjb250
YWluczsKLX0KLQotYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mIHN0cm9rZVN0eWxl
QXBwbGllcikgY29uc3QKLXsKLSAgICBBU1NFUlQoc3Ryb2tlU3R5bGVBcHBsaWVyKTsKLQotICAg
IGlmIChpc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHREMkQoc2NyYXRjaFJlbmRlclRhcmdldCgpKTsKLSAg
ICBHcmFwaGljc0NvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHRE
MkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9y
eSk7Ci0gICAgc3Ryb2tlU3R5bGVBcHBsaWVyKHNjcmF0Y2hDb250ZXh0KTsKLQotI2lmIEFTU0VS
VF9FTkFCTEVECi0gICAgdW5zaWduZWQgYmVmb3JlID0gcmVmQ291bnQobV9wYXRoLmdldCgpKTsK
LSNlbmRpZgotCi0gICAgQk9PTCBjb250YWluc1BvaW50ID0gZmFsc2U7Ci0gICAgSFJFU1VMVCBo
ciA9IG1fcGF0aC0+U3Ryb2tlQ29udGFpbnNQb2ludChwb2ludCwgc2NyYXRjaENvbnRleHQuc3Ry
b2tlVGhpY2tuZXNzKCksIHNjcmF0Y2hDb250ZXh0LnBsYXRmb3JtU3Ryb2tlU3R5bGUoKSwgbnVs
bHB0ciwgMS4wZiwgJmNvbnRhaW5zUG9pbnQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkg
PT0gYmVmb3JlKTsKLSAgICByZXR1cm4gY29udGFpbnNQb2ludDsKLX0KLQotdm9pZCBQYXRoOjpj
bG9zZUFueU9wZW5HZW9tZXRyaWVzKHVuc2lnbmVkIGZpZ3VyZUVuZFN0eWxlKSBjb25zdAotewot
ICAgIGlmIChtX2ZpZ3VyZUlzT3BlbmVkKSB7Ci0gICAgICAgIEFTU0VSVChtX2FjdGl2ZVBhdGgp
OwotCi0gICAgICAgIGF1dG8gZW5kU3R5bGUgPSBzdGF0aWNfY2FzdDxEMkQxX0ZJR1VSRV9FTkQ+
KGZpZ3VyZUVuZFN0eWxlKTsKLSAgICAgICAgbV9hY3RpdmVQYXRoLT5FbmRGaWd1cmUoZW5kU3R5
bGUpOwotICAgICAgICBtX2ZpZ3VyZUlzT3BlbmVkID0gZmFsc2U7Ci0KLSAgICAgICAgSFJFU1VM
VCBociA9IG1fYWN0aXZlUGF0aC0+Q2xvc2UoKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotICAgIH0KLQotICAgIG1fYWN0aXZlUGF0aCA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgUGF0
aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICB0cmFuc2Zvcm0oQWZm
aW5lVHJhbnNmb3JtKDEsIDAsIDAsIDEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwot
fQotCi12b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKLXsKLSAgICBpZiAodHJhbnNmb3JtLmlzSWRlbnRpdHkoKSB8fCBpc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2FjdGl2ZVBhdGgpCi0gICAgICAgIGNsb3NlQW55T3Bl
bkdlb21ldHJpZXMoRDJEMV9GSUdVUkVfRU5EX09QRU4pOwotCi0jaWYgQVNTRVJUX0VOQUJMRUQK
LSAgICB1bnNpZ25lZCBiZWZvcmUgPSByZWZDb3VudChtX3BhdGguZ2V0KCkpOwotI2VuZGlmCi0K
LSAgICBDT01QdHI8SUQyRDFUcmFuc2Zvcm1lZEdlb21ldHJ5PiB0cmFuc2Zvcm1lZFBhdGg7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0
ZVRyYW5zZm9ybWVkR2VvbWV0cnkobV9wYXRoLmdldCgpLCB0cmFuc2Zvcm0sICZ0cmFuc2Zvcm1l
ZFBhdGgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHJlZkNvdW50KG1fcGF0aC5n
ZXQoKSkgPT0gYmVmb3JlKTsKLSAgICBBU1NFUlQocmVmQ291bnQodHJhbnNmb3JtZWRQYXRoLmdl
dCgpKSA9PSAxKTsKLQotICAgIGF1dG8gZmlsbE1vZGUgPSBtX3BhdGgtPkdldEZpbGxNb2RlKCk7
Ci0KLSAgICBtX3BhdGggPSBudWxscHRyOwotCi0gICAgY2xlYXJHZW9tZXRyaWVzKCk7Ci0KLSAg
ICB0cmFuc2Zvcm1lZFBhdGgtPkFkZFJlZigpOwotICAgIG1fZ2VvbWV0cmllcy5hcHBlbmQodHJh
bnNmb3JtZWRQYXRoLmdldCgpKTsKLQotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6
OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlR2VvbWV0cnlHcm91cChmaWxsTW9kZSwgbV9nZW9tZXRy
aWVzLmRhdGEoKSwgbV9nZW9tZXRyaWVzLnNpemUoKSwgJm1fcGF0aCk7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgQVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkg
PT0gMSk7Ci19Ci0KLUZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3RTbG93Q2FzZSgpIGNvbnN0
Ci17Ci0gICAgRDJEMV9SRUNUX0YgYm91bmRzID0geyB9OwotICAgIGlmICghU1VDQ0VFREVEKG1f
cGF0aC0+R2V0Qm91bmRzKG51bGxwdHIsICZib3VuZHMpKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0
UmVjdCgpOwotCi0gICAgcmV0dXJuIGJvdW5kczsKLX0KLQotRmxvYXRSZWN0IFBhdGg6OmZhc3RC
b3VuZGluZ1JlY3RTbG93Q2FzZSgpIGNvbnN0Ci17Ci0gICAgRDJEMV9SRUNUX0YgYm91bmRzID0g
eyB9OwotICAgIGlmICghU1VDQ0VFREVEKG1fcGF0aC0+R2V0Qm91bmRzKG51bGxwdHIsICZib3Vu
ZHMpKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgcmV0dXJuIGJvdW5kczsK
LX0KLQotRmxvYXRSZWN0IFBhdGg6OmZhc3RCb3VuZGluZ1JlY3RGb3JTdHJva2UoY29uc3QgUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkgY29uc3QKLXsKLSAgICBpZiAo
aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIGZsb2F0IHRvbGVy
YW5jZSA9IDEwOwotCi0gICAgYXV0byogc3Ryb2tlU3R5bGUgPSBjb25zdF9jYXN0PFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJj4ocGxhdGZvcm1Db250ZXh0KS5zdHJva2VTdHlsZSgpOwotCi0gICAg
RDJEMV9SRUNUX0YgYm91bmRzID0geyB9OwotICAgIGlmICghU1VDQ0VFREVEKG1fcGF0aC0+R2V0
V2lkZW5lZEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0
eWxlLCBudWxscHRyLCB0b2xlcmFuY2UsICZib3VuZHMpKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0
UmVjdCgpOwotCi0gICAgcmV0dXJuIGJvdW5kczsKLX0KLQotRmxvYXRSZWN0IFBhdGg6OnN0cm9r
ZUJvdW5kaW5nUmVjdChjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYgc3Ry
b2tlU3R5bGVBcHBsaWVyKSBjb25zdAotewotICAgIGlmIChpc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgc2NyYXRjaENv
bnRleHREMkQoc2NyYXRjaFJlbmRlclRhcmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6
Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7Ci0KLSAgICBpZiAoc3Ryb2tl
U3R5bGVBcHBsaWVyKQotICAgICAgICBzdHJva2VTdHlsZUFwcGxpZXIoc2NyYXRjaENvbnRleHQp
OwotCi0gICAgcmV0dXJuIGZhc3RCb3VuZGluZ1JlY3RGb3JTdHJva2Uoc2NyYXRjaENvbnRleHRE
MkQpOwotfQotCi12b2lkIFBhdGg6Om9wZW5GaWd1cmVBdEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5
KCkKLXsKLSAgICBpZiAobV9maWd1cmVJc09wZW5lZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCFtX2FjdGl2ZVBhdGgpIHsKLSAgICAgICAgQ09NUHRyPElEMkQxUGF0aEdlb21ldHJ5PiBh
Y3RpdmVQYXRoR2VvbWV0cnk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9y
eSgpLT5DcmVhdGVQYXRoR2VvbWV0cnkoJmFjdGl2ZVBhdGhHZW9tZXRyeSk7Ci0gICAgICAgIEhS
RVNVTFQgaHIgPSBhY3RpdmVQYXRoR2VvbWV0cnktPk9wZW4oJm1fYWN0aXZlUGF0aCk7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgICAgICBhcHBlbmRHZW9tZXRy
eShhY3RpdmVQYXRoR2VvbWV0cnkubGVha1JlZigpKTsKLSAgICAgICAgQVNTRVJUKHJlZkNvdW50
KG1fYWN0aXZlUGF0aC5nZXQoKSkgPT0gMSk7Ci0gICAgfQotCi0gICAgbV9hY3RpdmVQYXRoLT5T
ZXRGaWxsTW9kZShEMkQxX0ZJTExfTU9ERV9XSU5ESU5HKTsKLSAgICBtX2FjdGl2ZVBhdGgtPkJl
Z2luRmlndXJlKGN1cnJlbnRQb2ludCgpLCBEMkQxX0ZJR1VSRV9CRUdJTl9GSUxMRUQpOwotICAg
IG1fZmlndXJlSXNPcGVuZWQgPSB0cnVlOwotfQotCi12b2lkIFBhdGg6Om1vdmVUb1Nsb3dDYXNl
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIGlmIChtX2FjdGl2ZVBhdGgpCi0gICAg
ICAgIGNsb3NlQW55T3Blbkdlb21ldHJpZXMoRDJEMV9GSUdVUkVfRU5EX09QRU4pOwotCi0gICAg
Q09NUHRyPElEMkQxUGF0aEdlb21ldHJ5PiBhY3RpdmVQYXRoR2VvbWV0cnk7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVBhdGhHZW9tZXRyeSgmYWN0aXZlUGF0
aEdlb21ldHJ5KTsKLQotICAgIGlmICghU1VDQ0VFREVEKGFjdGl2ZVBhdGhHZW9tZXRyeS0+T3Bl
bigmbV9hY3RpdmVQYXRoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGFwcGVuZEdlb21ldHJ5
KGFjdGl2ZVBhdGhHZW9tZXRyeS5sZWFrUmVmKCkpOwotCi0gICAgQVNTRVJUKHJlZkNvdW50KG1f
YWN0aXZlUGF0aC5nZXQoKSkgPT0gMSk7Ci0KLSAgICBtX2FjdGl2ZVBhdGgtPlNldEZpbGxNb2Rl
KEQyRDFfRklMTF9NT0RFX1dJTkRJTkcpOwotICAgIG1fYWN0aXZlUGF0aC0+QmVnaW5GaWd1cmUo
cG9pbnQsIEQyRDFfRklHVVJFX0JFR0lOX0ZJTExFRCk7Ci0gICAgbV9maWd1cmVJc09wZW5lZCA9
IHRydWU7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkTGluZVRvU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpCi17Ci0gICAgb3BlbkZpZ3VyZUF0Q3VycmVudFBvaW50SWZOZWNlc3NhcnkoKTsK
LSAgICBtX2FjdGl2ZVBhdGgtPkFkZExpbmUocG9pbnQpOwotfQotCi12b2lkIFBhdGg6OmFkZFF1
YWRDdXJ2ZVRvU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYgY3AsIGNvbnN0IEZsb2F0UG9pbnQm
IHApCi17Ci0gICAgb3BlbkZpZ3VyZUF0Q3VycmVudFBvaW50SWZOZWNlc3NhcnkoKTsKLSAgICBt
X2FjdGl2ZVBhdGgtPkFkZFF1YWRyYXRpY0JlemllcihEMkQxOjpRdWFkcmF0aWNCZXppZXJTZWdt
ZW50KGNwLCBwKSk7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUb1Nsb3dDYXNlKGNv
bnN0IEZsb2F0UG9pbnQmIGNwMSwgY29uc3QgRmxvYXRQb2ludCYgY3AyLCBjb25zdCBGbG9hdFBv
aW50JiBwKQotewotICAgIG9wZW5GaWd1cmVBdEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5KCk7Ci0g
ICAgbV9hY3RpdmVQYXRoLT5BZGRCZXppZXIoRDJEMTo6QmV6aWVyU2VnbWVudChjcDEsIGNwMiwg
cCkpOwotfQotCi12b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25z
dCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQotewotICAgIEZsb2F0UG9pbnQgcDAgPSBj
dXJyZW50UG9pbnQoKTsKLQotICAgIGlmIChwMSA9PSBwMCB8fCBwMSA9PSBwMiB8fCBXVEY6OmFy
ZUVzc2VudGlhbGx5RXF1YWwocmFkaXVzLCAwLjBmKSkKLSAgICAgICAgcmV0dXJuIGFkZExpbmVU
byhwMSk7Ci0KLSAgICBmbG9hdCBkaXJlY3Rpb24gPSAocDIueCgpIC0gcDEueCgpKSAqIChwMC55
KCkgLSBwMS55KCkpICsgKHAyLnkoKSAtIHAxLnkoKSkgKiAocDEueCgpIC0gcDAueCgpKTsKLSAg
ICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGRpcmVjdGlvbiwgMC4wZikpCi0gICAgICAg
IHJldHVybiBhZGRMaW5lVG8ocDEpOwotCi0gICAgYXV0byBhMiA9IHRvRmxvYXRQb2ludChwMCAt
IHAxKS5sZW5ndGhTcXVhcmVkKCk7Ci0gICAgYXV0byBiMiA9IHRvRmxvYXRQb2ludChwMSAtIHAy
KS5sZW5ndGhTcXVhcmVkKCk7Ci0gICAgYXV0byBjMiA9IHRvRmxvYXRQb2ludChwMCAtIHAyKS5s
ZW5ndGhTcXVhcmVkKCk7Ci0KLSAgICBkb3VibGUgY29zeCA9IChhMiArIGIyIC0gYzIpIC8gKDIu
MCAqIHN0ZDo6c3FydChhMiAqIGIyKSk7Ci0gICAgZG91YmxlIHNpbnggPSBzdGQ6OnNxcnQoMS4w
IC0gY29zeCAqIGNvc3gpOwotICAgIGRvdWJsZSBkID0gcmFkaXVzIC8gKCgxIC0gY29zeCkgLyBz
aW54KTsKLQotICAgIGF1dG8gYW4gPSB0b0Zsb2F0UG9pbnQocDEgLSBwMCkuc2NhbGVkKDEuMCAv
IHN0ZDo6c3FydChhMikpOwotICAgIGF1dG8gYm4gPSB0b0Zsb2F0UG9pbnQocDEgLSBwMikuc2Nh
bGVkKDEuMCAvIHN0ZDo6c3FydChiMikpOwotCi0gICAgYXV0byBzdGFydFBvaW50ID0gdG9GbG9h
dFBvaW50KHAxIC0gYW4uc2NhbGVkKGQpKTsKLSAgICBhdXRvIHA0ID0gdG9GbG9hdFBvaW50KHAx
IC0gYm4uc2NhbGVkKGQpKTsKLQotICAgIGJvb2wgYW50aWNsb2Nrd2lzZSA9IChkaXJlY3Rpb24g
PCAwKTsKLSAgICBhbi5zY2FsZShyYWRpdXMgKiAoYW50aWNsb2Nrd2lzZSA/IDEgOiAtMSkpOwot
Ci0gICAgRmxvYXRQb2ludCBjZW50ZXIoc3RhcnRQb2ludC54KCkgKyBhbi55KCksIHN0YXJ0UG9p
bnQueSgpIC0gYW4ueCgpKTsKLQotICAgIGRvdWJsZSBhbmdsZTAgPSBhdGFuMihzdGFydFBvaW50
LnkoKSAtIGNlbnRlci55KCksIHN0YXJ0UG9pbnQueCgpIC0gY2VudGVyLngoKSk7Ci0gICAgZG91
YmxlIGFuZ2xlMSA9IGF0YW4yKHA0LnkoKSAtIGNlbnRlci55KCksIHA0LngoKSAtIGNlbnRlci54
KCkpOwotCi0gICAgb3BlbkZpZ3VyZUF0Q3VycmVudFBvaW50SWZOZWNlc3NhcnkoKTsKLSAgICBh
ZGRMaW5lVG8oc3RhcnRQb2ludCk7Ci0gICAgYWRkQXJjKGNlbnRlciwgcmFkaXVzLCBhbmdsZTAs
IGFuZ2xlMSwgYW50aWNsb2Nrd2lzZSk7Ci19Ci0KLXN0YXRpYyBib29sIGVxdWFsUmFkaXVzV2lk
dGhzKGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiB0b3BS
aWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBGbG9h
dFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKQotewotICAgIHJldHVybiB0b3BMZWZ0UmFkaXVzLndp
ZHRoKCkgPT0gdG9wUmlnaHRSYWRpdXMud2lkdGgoKQotICAgICAgICAmJiB0b3BSaWdodFJhZGl1
cy53aWR0aCgpID09IGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKQotICAgICAgICAmJiBib3R0b21M
ZWZ0UmFkaXVzLndpZHRoKCkgPT0gYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKTsKLX0KLQotc3Rh
dGljIGJvb2wgZXF1YWxSYWRpdXNIZWlnaHRzKGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1
cywgY29uc3QgRmxvYXRTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0
b21MZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKQotewotICAg
IHJldHVybiB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpID09IGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0
KCkKLSAgICAgICAgJiYgYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSA9PSB0b3BSaWdodFJhZGl1
cy5oZWlnaHQoKQotICAgICAgICAmJiB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSA9PSBib3R0b21S
aWdodFJhZGl1cy5oZWlnaHQoKTsKLX0KLQotdm9pZCBQYXRoOjpwbGF0Zm9ybUFkZFBhdGhGb3JS
b3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVm
dFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXpl
JiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKQot
ewotICAgIGJvb2wgZXF1YWxXaWR0aHMgPSBlcXVhbFJhZGl1c1dpZHRocyh0b3BMZWZ0UmFkaXVz
LCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpOwot
ICAgIGJvb2wgZXF1YWxIZWlnaHRzID0gZXF1YWxSYWRpdXNIZWlnaHRzKHRvcExlZnRSYWRpdXMs
IHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7Ci0K
LSAgICBpZiAoZXF1YWxXaWR0aHMgJiYgZXF1YWxIZWlnaHRzKSB7Ci0gICAgICAgIC8vIEVuc3Vy
ZSB0aGF0IENHIGNhbiByZW5kZXIgdGhlIHJvdW5kZWQgcmVjdC4KLSAgICAgICAgZmxvYXQgcmFk
aXVzV2lkdGggPSB0b3BMZWZ0UmFkaXVzLndpZHRoKCk7Ci0gICAgICAgIGZsb2F0IHJhZGl1c0hl
aWdodCA9IHRvcExlZnRSYWRpdXMuaGVpZ2h0KCk7Ci0gICAgICAgIGF1dG8gcmVjdFRvRHJhdyA9
IEQyRDE6OlJlY3RGKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC5tYXhYKCksIHJlY3QubWF4WSgp
KTsKLQotICAgICAgICBDT01QdHI8SUQyRDFSb3VuZGVkUmVjdGFuZ2xlR2VvbWV0cnk+IHJvdW5k
UmVjdDsKLSAgICAgICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9y
eSgpLT5DcmVhdGVSb3VuZGVkUmVjdGFuZ2xlR2VvbWV0cnkoRDJEMTo6Um91bmRlZFJlY3QocmVj
dFRvRHJhdywgcmFkaXVzV2lkdGgsIHJhZGl1c0hlaWdodCksICZyb3VuZFJlY3QpOwotICAgICAg
ICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgYXBwZW5kR2VvbWV0cnko
cm91bmRSZWN0LmdldCgpKTsKLSAgICAgICAgQVNTRVJUKHJlZkNvdW50KHJvdW5kUmVjdC5nZXQo
KSkgPT0gMik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhZGRCZXppZXJzRm9yUm91
bmRlZFJlY3QocmVjdCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRS
YWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKLX0KLQotdm9pZCBQYXRoOjpjbG9zZVN1YnBhdGgo
KQotewotICAgIGlmIChpc051bGwoKSkgewotICAgICAgICBtX2FjdGl2ZVBhdGggPSBudWxscHRy
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX2FjdGl2ZVBhdGgpIHsKLSAg
ICAgICAgQVNTRVJUKCFtX2ZpZ3VyZUlzT3BlbmVkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGNsb3NlQW55T3Blbkdlb21ldHJpZXMoRDJEMV9GSUdVUkVfRU5EX0NMT1NFRCk7Ci19
Ci0KLXN0YXRpYyBGbG9hdFBvaW50IGFyY1N0YXJ0KGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwg
ZmxvYXQgcmFkaXVzLCBmbG9hdCBzdGFydEFuZ2xlKQotewotICAgIEZsb2F0UG9pbnQgc3RhcnRp
bmdQb2ludCA9IGNlbnRlcjsKLSAgICBmbG9hdCBzdGFydFggPSByYWRpdXMgKiBzdGQ6OmNvcyhz
dGFydEFuZ2xlKTsKLSAgICBmbG9hdCBzdGFydFkgPSByYWRpdXMgKiBzdGQ6OnNpbihzdGFydEFu
Z2xlKTsKLSAgICBzdGFydGluZ1BvaW50Lm1vdmUoc3RhcnRYLCBzdGFydFkpOwotICAgIHJldHVy
biBzdGFydGluZ1BvaW50OwotfQotCi1jb25zdCBmbG9hdCB0d29QaSA9IDIuMGYgKiBwaUZsb2F0
OwotCi1zdGF0aWMgdm9pZCBkcmF3QXJjU2VjdGlvbihJRDJEMUdlb21ldHJ5U2luayogc2luaywg
Y29uc3QgRmxvYXRQb2ludCYgY2VudGVyLCBmbG9hdCByYWRpdXMsIGZsb2F0IHN0YXJ0QW5nbGUs
IGZsb2F0IGVuZEFuZ2xlLCBib29sIGFudGljbG9ja3dpc2UpCi17Ci0gICAgLy8gRGlyZWN0MkQg
d2FudHMgdXMgdG8gc3BlY2lmeSB0aGUgZW5kIHBvaW50IG9mIHRoZSBhcmMsIG5vdCB0aGUgY2Vu
dGVyLiBJdCB3aWxsIGJlIGRyYXduIGZyb20KLSAgICAvLyB3aGF0ZXZlciB0aGUgY3VycmVudCBw
b2ludCBpbiB0aGUgJ21fYWN0aXZlUGF0aCcgaXMuCi0gICAgRmxvYXRQb2ludCBlbmRQb2ludCA9
IGNlbnRlcjsKLSAgICBmbG9hdCBlbmRYID0gcmFkaXVzICogc3RkOjpjb3MoZW5kQW5nbGUpOwot
ICAgIGZsb2F0IGVuZFkgPSByYWRpdXMgKiBzdGQ6OnNpbihlbmRBbmdsZSk7Ci0gICAgZW5kUG9p
bnQubW92ZShlbmRYLCBlbmRZKTsKLQotICAgIEQyRDFfU1dFRVBfRElSRUNUSU9OIGRpcmVjdGlv
biA9IGFudGljbG9ja3dpc2UgPyBEMkQxX1NXRUVQX0RJUkVDVElPTl9DT1VOVEVSX0NMT0NLV0lT
RSA6IEQyRDFfU1dFRVBfRElSRUNUSU9OX0NMT0NLV0lTRTsKLSAgICBzaW5rLT5BZGRBcmMoRDJE
MTo6QXJjU2VnbWVudChlbmRQb2ludCwgRDJEMTo6U2l6ZUYocmFkaXVzLCByYWRpdXMpLCAwLCBk
aXJlY3Rpb24sIEQyRDFfQVJDX1NJWkVfU01BTEwpKTsKLX0KLQotdm9pZCBQYXRoOjphZGRBcmNT
bG93Q2FzZShjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3Rh
cnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJvb2wgYW50aWNsb2Nrd2lzZSkKLXsKLSAgICBhdXRv
IGFyY1N0YXJ0UG9pbnQgPSBhcmNTdGFydChjZW50ZXIsIHJhZGl1cywgc3RhcnRBbmdsZSk7Ci0g
ICAgaWYgKCFtX2FjdGl2ZVBhdGgpCi0gICAgICAgIG1vdmVUbyhhcmNTdGFydFBvaW50KTsKLSAg
ICBlbHNlIGlmICghYXJlRXNzZW50aWFsbHlFcXVhbChjdXJyZW50UG9pbnQoKSwgYXJjU3RhcnRQ
b2ludCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGFyYyBkZWZpbmVkIGJ5IHRoZSBjZW50ZXIgYW5k
IHJhZGl1cyBkb2VzIG5vdCBpbnRlcnNlY3QgdGhlIGN1cnJlbnQgcG9zaXRpb24sCi0gICAgICAg
IC8vIHdlIG5lZWQgdG8gZHJhdyBhIGxpbmUgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0
aGUgc3RhcnRpbmcgcG9pbnQgb2YgdGhlIGFyYy4KLSAgICAgICAgYWRkTGluZVRvKGFyY1N0YXJ0
UG9pbnQpOwotICAgIH0KLQotICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc3RkOjph
YnMoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKSwgdHdvUGkpKQotICAgICAgICByZXR1cm4gYWRkRWxs
aXBzZShGbG9hdFJlY3QoY2VudGVyLngoKSAtIHJhZGl1cywgY2VudGVyLnkoKSAtIHJhZGl1cywg
Mi4wICogcmFkaXVzLCAyLjAgKiByYWRpdXMpKTsKLQotICAgIGlmIChhbnRpY2xvY2t3aXNlKSB7
Ci0gICAgICAgIGlmIChlbmRBbmdsZSA+IHN0YXJ0QW5nbGUpIHsKLSAgICAgICAgICAgIGVuZEFu
Z2xlIC09IHR3b1BpICogc3RkOjpjZWlsKChlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpIC8gdHdvUGkp
OwotICAgICAgICAgICAgQVNTRVJUKGVuZEFuZ2xlIDw9IHN0YXJ0QW5nbGUpOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN0YXJ0QW5nbGUgPiBlbmRBbmdsZSkgewotICAg
ICAgICAgICAgc3RhcnRBbmdsZSAtPSB0d29QaSAqIHN0ZDo6Y2VpbCgoc3RhcnRBbmdsZSAtIGVu
ZEFuZ2xlKSAvIHR3b1BpKTsKLSAgICAgICAgICAgIEFTU0VSVChzdGFydEFuZ2xlIDw9IGVuZEFu
Z2xlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0IGZsb2F0IGRlbHRhID0gYW50aWNs
b2Nrd2lzZSA/IC1waU92ZXJUd29GbG9hdCA6IHBpT3ZlclR3b0Zsb2F0OwotICAgIGZsb2F0IHJl
bWFpbmluZ0FyY0FuZ2xlID0gZW5kQW5nbGUgLSBzdGFydEFuZ2xlOwotCi0gICAgd2hpbGUgKChy
ZW1haW5pbmdBcmNBbmdsZSA+IDAgJiYgcmVtYWluaW5nQXJjQW5nbGUgPiBkZWx0YSkgfHwgKHJl
bWFpbmluZ0FyY0FuZ2xlIDwgMCAmJiByZW1haW5pbmdBcmNBbmdsZSA8IGRlbHRhKSkgewotICAg
ICAgICBjb25zdCBkb3VibGUgY3VycmVudEVuZEFuZ2xlID0gc3RhcnRBbmdsZSArIGRlbHRhOwot
ICAgICAgICBkcmF3QXJjU2VjdGlvbihtX2FjdGl2ZVBhdGguZ2V0KCksIGNlbnRlciwgcmFkaXVz
LCBzdGFydEFuZ2xlLCBjdXJyZW50RW5kQW5nbGUsIGFudGljbG9ja3dpc2UpOwotICAgICAgICBz
dGFydEFuZ2xlID0gY3VycmVudEVuZEFuZ2xlOwotICAgICAgICByZW1haW5pbmdBcmNBbmdsZSAt
PSBkZWx0YTsKLSAgICB9Ci0KLSAgICAvLyBIYW5kbGUgYW55IHJlbWFpbmluZyBwYXJ0IG9mIHRo
ZSBhcmM6Ci0gICAgaWYgKHN0ZDo6YWJzKHJlbWFpbmluZ0FyY0FuZ2xlKSA+IDFlLTYpCi0gICAg
ICAgIGRyYXdBcmNTZWN0aW9uKG1fYWN0aXZlUGF0aC5nZXQoKSwgY2VudGVyLCByYWRpdXMsIHN0
YXJ0QW5nbGUsIHN0YXJ0QW5nbGUgKyByZW1haW5pbmdBcmNBbmdsZSwgYW50aWNsb2Nrd2lzZSk7
Ci19Ci0KLXZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAgaWYg
KCFtX2FjdGl2ZVBhdGgpCi0gICAgICAgIG1vdmVUbyhyLmxvY2F0aW9uKCkpOwotCi0gICAgQ09N
UHRyPElEMkQxUmVjdGFuZ2xlR2VvbWV0cnk+IHJlY3RhbmdsZTsKLSAgICBIUkVTVUxUIGhyID0g
R3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVJlY3RhbmdsZUdlb21ldHJ5
KHIsICZyZWN0YW5nbGUpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAg
IGFwcGVuZEdlb21ldHJ5KHJlY3RhbmdsZS5nZXQoKSk7Ci0gICAgQVNTRVJUKHJlZkNvdW50KHJl
Y3RhbmdsZS5nZXQoKSkgPT0gMik7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkRWxsaXBzZShGbG9hdFBv
aW50IHAsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1ksIGZsb2F0IHJvdGF0aW9uLCBmbG9h
dCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBhbnRpY2xvY2t3aXNlKQotewotICAg
IEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShwLngo
KSwgcC55KCkpLnJvdGF0ZShyYWQyZGVnKHJvdGF0aW9uKSkuc2NhbGUocmFkaXVzWCwgcmFkaXVz
WSk7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBhdGg6OmFkZEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByKQotewotICAgIGlmICghbV9hY3RpdmVQYXRoKQotICAgICAgICBt
b3ZlVG8oci5sb2NhdGlvbigpKTsKLQotICAgIENPTVB0cjxJRDJEMUVsbGlwc2VHZW9tZXRyeT4g
ZWxsaXBzZTsKLSAgICAvLyBOb3RlOiBUaGUgcmFkaWkgb2YgdGhlIGVsbGlwc2UgY29udGFpbmVk
IHdpdGhpbiBhIHJlY3RhbmdlIGFyZSBoYWxmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBy
ZWN0LgotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+
Q3JlYXRlRWxsaXBzZUdlb21ldHJ5KEQyRDE6OkVsbGlwc2Uoci5jZW50ZXIoKSwgMC41ICogci53
aWR0aCgpLCAwLjUgKiByLmhlaWdodCgpKSwgJmVsbGlwc2UpOwotICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotICAgIGFwcGVuZEdlb21ldHJ5KGVsbGlwc2UuZ2V0KCkpOwotICAg
IEFTU0VSVChyZWZDb3VudChlbGxpcHNlLmdldCgpKSA9PSAyKTsKLX0KLQotdm9pZCBQYXRoOjph
ZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KQotewotICAgIGlmICghcGF0aC5wbGF0Zm9ybVBhdGgoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCF0cmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLQotdm9pZCBQYXRoOjpjbGVhcigpCi17Ci0gICAgaWYg
KGlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhdGggPSBudWxscHRyOwotICAg
IG1fYWN0aXZlUGF0aCA9IG51bGxwdHI7Ci0gICAgY2xlYXJHZW9tZXRyaWVzKCk7Ci19Ci0KLWJv
b2wgUGF0aDo6aXNFbXB0eVNsb3dDYXNlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGF0aC0+R2V0
U291cmNlR2VvbWV0cnlDb3VudCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEFTU0VS
VChtX3BhdGgtPkdldFNvdXJjZUdlb21ldHJ5Q291bnQoKSA9PSBtX2dlb21ldHJpZXMuc2l6ZSgp
KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotRmxvYXRQb2ludCBQYXRoOjpjdXJyZW50UG9p
bnRTbG93Q2FzZSgpIGNvbnN0Ci17Ci0gICAgZmxvYXQgbGVuZ3RoID0gMDsKLSAgICBIUkVTVUxU
IGhyID0gbV9wYXRoLT5Db21wdXRlTGVuZ3RoKG51bGxwdHIsICZsZW5ndGgpOwotICAgIGlmICgh
U1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKLQotICAgIEQyRDFf
UE9JTlRfMkYgcG9pbnQgPSB7IH07Ci0gICAgRDJEMV9QT0lOVF8yRiB0YW5nZW50ID0geyB9Owot
ICAgIGhyID0gbV9wYXRoLT5Db21wdXRlUG9pbnRBdExlbmd0aChsZW5ndGgsIG51bGxwdHIsICZw
b2ludCwgJnRhbmdlbnQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJu
IEZsb2F0UG9pbnQoKTsKLQotICAgIHJldHVybiBwb2ludDsKLX0KLQotZmxvYXQgUGF0aDo6bGVu
Z3RoKCkgY29uc3QKLXsKLSAgICBmbG9hdCBsZW5ndGggPSAwOwotICAgIEhSRVNVTFQgaHIgPSBt
X3BhdGgtPkNvbXB1dGVMZW5ndGgobnVsbHB0ciwgJmxlbmd0aCk7Ci0gICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBsZW5ndGg7Ci19Ci0KLXZv
aWQgUGF0aDo6YXBwbHlTbG93Q2FzZShjb25zdCBQYXRoQXBwbGllckZ1bmN0aW9uJikgY29uc3QK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFBhdGg6OmlzTnVsbCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuICFtX3BhdGg7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShESVJFQ1Qy
RCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXR0ZXJuRGly
ZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9QYXR0ZXJuRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0dGVybkRpcmVjdDJELmNwcAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCi0K
LSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RC5oIgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSUQyRDFCaXRtYXBCcnVzaCogUGF0dGVybjo6Y3JlYXRl
UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgZmxvYXQgYWxw
aGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbnNmb3JtYXRpb24pIGNvbnN0
Ci17Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0gPSB1c2VyU3BhY2VUcmFu
c2Zvcm1hdGlvbiAqIG1fcGF0dGVyblNwYWNlVHJhbnNmb3JtYXRpb247Ci0gICAgYXV0byBiaXRt
YXBCcnVzaFByb3BlcnRpZXMgPSBEMkQxOjpCaXRtYXBCcnVzaFByb3BlcnRpZXMoKTsKLSAgICBi
aXRtYXBCcnVzaFByb3BlcnRpZXMuZXh0ZW5kTW9kZVggPSBtX3JlcGVhdFggPyBEMkQxX0VYVEVO
RF9NT0RFX1dSQVAgOiBEMkQxX0VYVEVORF9NT0RFX0NMQU1QOwotICAgIGJpdG1hcEJydXNoUHJv
cGVydGllcy5leHRlbmRNb2RlWSA9IG1fcmVwZWF0WSA/IEQyRDFfRVhURU5EX01PREVfV1JBUCA6
IEQyRDFfRVhURU5EX01PREVfQ0xBTVA7Ci0KLSAgICBhdXRvIGJydXNoUHJvcGVydGllcyA9IEQy
RDE6OkJydXNoUHJvcGVydGllcygpOwotICAgIGJydXNoUHJvcGVydGllcy50cmFuc2Zvcm0gPSBw
YXR0ZXJuVHJhbnNmb3JtOwotICAgIGJydXNoUHJvcGVydGllcy5vcGFjaXR5ID0gYWxwaGE7Ci0K
LSAgICBhdXRvJiBwYXR0ZXJuSW1hZ2UgPSB0aWxlSW1hZ2UoKTsKLSAgICBhdXRvIG5hdGl2ZUlt
YWdlID0gcGF0dGVybkltYWdlLm5hdGl2ZUltYWdlKCZjb250ZXh0KTsKLSAgICBpZiAoIW5hdGl2
ZUltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcGxhdGZvcm1Db250
ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChwbGF0
Zm9ybUNvbnRleHQpOwotCi0gICAgSUQyRDFCaXRtYXBCcnVzaCogcGF0dGVybkJydXNoID0gbnVs
bHB0cjsKLSAgICBIUkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKS0+
Q3JlYXRlQml0bWFwQnJ1c2gobmF0aXZlSW1hZ2UuZ2V0KCksICZiaXRtYXBCcnVzaFByb3BlcnRp
ZXMsICZicnVzaFByb3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOwotICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpKTsKLSAgICByZXR1cm4gcGF0dGVybkJydXNoOwotfQotCi19Ci0KLSNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERp
cmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsMzk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkK
LQotI2luY2x1ZGUgIkRpcmVjdDJET3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkRpcmVjdDJEVXRp
bGl0aWVzLmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8v
IEVuY2Fwc3VsYXRlcyB0aGUgYWRkaXRpb25hbCBwYWludGluZyBzdGF0ZSBpbmZvcm1hdGlvbiB3
ZSBzdG9yZSBmb3IgZWFjaAotLy8gcHVzaGVkIGdyYXBoaWNzIHN0YXRlLgotY2xhc3MgUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQ6OlN0YXRlIHsKLXB1YmxpYzoKLSAgICBTdGF0ZSgpID0gZGVmYXVs
dDsKLQotICAgIENPTVB0cjxJRDJEMURyYXdpbmdTdGF0ZUJsb2NrPiBtX2RyYXdpbmdTdGF0ZUJs
b2NrOwotICAgIENPTVB0cjxJRDJEMUxheWVyPiBtX2FjdGl2ZUxheWVyOwotICAgIFZlY3RvcjxE
aXJlY3QyRExheWVyVHlwZT4gbV9jbGlwczsKLX07Ci0KLVBsYXRmb3JtQ29udGV4dERpcmVjdDJE
OjpQbGF0Zm9ybUNvbnRleHREaXJlY3QyRChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0
LCBGdW5jdGlvbjx2b2lkKCk+JiYgcHJlRHJhd0hhbmRsZXIsIEZ1bmN0aW9uPHZvaWQoKT4mJiBw
b3N0RHJhd0hhbmRsZXIpCi0gICAgOiBtX3JlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpCi0gICAg
LCBtX3ByZURyYXdIYW5kbGVyKFdURk1vdmUocHJlRHJhd0hhbmRsZXIpKQotICAgICwgbV9wb3N0
RHJhd0hhbmRsZXIoV1RGTW92ZShwb3N0RHJhd0hhbmRsZXIpKQotewotICAgIG1fc3RhdGVTdGFj
ay5hcHBlbmQoU3RhdGUoKSk7Ci0gICAgbV9zdGF0ZSA9ICZtX3N0YXRlU3RhY2subGFzdCgpOwot
Ci0gICAgbV9kZXZpY2VDb250ZXh0LnF1ZXJ5KG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAgICBS
RUxFQVNFX0FTU0VSVCghIW1fZGV2aWNlQ29udGV4dCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ6OnNldFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFy
Z2V0KQotewotICAgIG1fcmVuZGVyVGFyZ2V0ID0gcmVuZGVyVGFyZ2V0OwotCi0gICAgbV9kZXZp
Y2VDb250ZXh0LnF1ZXJ5KG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAgICBSRUxFQVNFX0FTU0VS
VCghIW1fZGV2aWNlQ29udGV4dCk7Ci19Ci0KLUlEMkQxTGF5ZXIqIFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEOjpjbGlwTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX3N0YXRlLT5tX2FjdGl2
ZUxheWVyLmdldCgpOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpjbGVhckNs
aXBzKFZlY3RvcjxEaXJlY3QyRExheWVyVHlwZT4mIGNsaXBzKQotewotICAgIGZvciAoYXV0byBj
bGlwVHlwZSA9IGNsaXBzLnJiZWdpbigpOyBjbGlwVHlwZSAhPSBjbGlwcy5yZW5kKCk7ICsrY2xp
cFR5cGUpIHsKLSAgICAgICAgaWYgKCpjbGlwVHlwZSA9PSBBeGlzQWxpZ25lZENsaXApCi0gICAg
ICAgICAgICBtX3JlbmRlclRhcmdldC0+UG9wQXhpc0FsaWduZWRDbGlwKCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1fcmVuZGVyVGFyZ2V0LT5Qb3BMYXllcigpOwotICAgIH0KLQotICAg
IGNsaXBzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnJlc3Rv
cmUoKQotewotICAgIEFTU0VSVChtX3JlbmRlclRhcmdldCk7Ci0KLSAgICAvLyBObyBuZWVkIHRv
IHJlc3RvcmUgaWYgd2UgZG9uJ3QgaGF2ZSBhIHNhdmVkIGVsZW1lbnQgb24gdGhlIHN0YWNrLgot
ICAgIGlmIChtX3N0YXRlU3RhY2suc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGF1dG8mIHJlc3RvcmVTdGF0ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7Ci0gICAgaWYgKHJlc3Rv
cmVTdGF0ZS5tX2RyYXdpbmdTdGF0ZUJsb2NrKSB7Ci0gICAgICAgIG1fcmVuZGVyVGFyZ2V0LT5S
ZXN0b3JlRHJhd2luZ1N0YXRlKHJlc3RvcmVTdGF0ZS5tX2RyYXdpbmdTdGF0ZUJsb2NrLmdldCgp
KTsKLSAgICAgICAgcmVzdG9yZVN0YXRlLm1fZHJhd2luZ1N0YXRlQmxvY2sgPSBudWxscHRyOwot
ICAgIH0KLQotICAgIGNsZWFyQ2xpcHMocmVzdG9yZVN0YXRlLm1fY2xpcHMpOwotCi0gICAgbV9z
dGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICBBU1NFUlQoIW1fc3RhdGVTdGFjay5pc0VtcHR5
KCkpOwotICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLX0KLQotUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQ6On5QbGF0Zm9ybUNvbnRleHREaXJlY3QyRCgpID0gZGVmYXVsdDsKLQot
dm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2F2ZSgpCi17Ci0gICAgQVNTRVJUKG1fc3Rh
dGVTdGFjay5zaXplKCkgPj0gMSk7IC8vIFRoZXJlIHNob3VsZCBhbHdheXMgYmUgb25lIHN0YXRl
IG9uIHRoZSBzdGFjay4KLSAgICBBU1NFUlQobV9yZW5kZXJUYXJnZXQpOwotCi0gICAgbV9zdGF0
ZVN0YWNrLmFwcGVuZChTdGF0ZSgpKTsKLSAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFjay5sYXN0
KCk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRHJhd2lu
Z1N0YXRlQmxvY2soJm1fc3RhdGUtPm1fZHJhd2luZ1N0YXRlQmxvY2spOwotCi0gICAgbV9yZW5k
ZXJUYXJnZXQtPlNhdmVEcmF3aW5nU3RhdGUobV9zdGF0ZS0+bV9kcmF3aW5nU3RhdGVCbG9jay5n
ZXQoKSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnB1c2hSZW5kZXJDbGlw
KERpcmVjdDJETGF5ZXJUeXBlIGNsaXBUeXBlKQotewotICAgIEFTU0VSVChoYXNTYXZlZFN0YXRl
KCkpOwotICAgIG1fc3RhdGUtPm1fY2xpcHMuYXBwZW5kKGNsaXBUeXBlKTsKLX0KLQotdm9pZCBQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0QWN0aXZlTGF5ZXIoQ09NUHRyPElEMkQxTGF5ZXI+
JiYgbGF5ZXIpCi17Ci0gICAgQVNTRVJUKGhhc1NhdmVkU3RhdGUoKSk7Ci0gICAgbV9zdGF0ZS0+
bV9hY3RpdmVMYXllciA9IGxheWVyOwotfQotCi1DT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+
IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpicnVzaFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9S
X0YmIGNvbG9yKQotewotICAgIGF1dG8gY29sb3JLZXkgPSBjb2xvckNvbnZlcnQ8U1JHQkE8dWlu
dDhfdD4+KFNSR0JBPGZsb2F0PiB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEg
fSk7Ci0KLSAgICBpZiAoIWNvbG9yS2V5KSB7Ci0gICAgICAgIGlmICghbV96ZXJvQnJ1c2gpCi0g
ICAgICAgICAgICBtX3JlbmRlclRhcmdldC0+Q3JlYXRlU29saWRDb2xvckJydXNoKGNvbG9yLCAm
bV96ZXJvQnJ1c2gpOwotICAgICAgICByZXR1cm4gbV96ZXJvQnJ1c2g7Ci0gICAgfQotCi0gICAg
aWYgKGNvbG9yS2V5ID09IDB4RkZGRkZGRkYpIHsKLSAgICAgICAgaWYgKCFtX3doaXRlQnJ1c2gp
Ci0gICAgICAgICAgICBtX3JlbmRlclRhcmdldC0+Q3JlYXRlU29saWRDb2xvckJydXNoKGNvbG9y
LCAmbV93aGl0ZUJydXNoKTsKLSAgICAgICAgcmV0dXJuIG1fd2hpdGVCcnVzaDsKLSAgICB9Ci0K
LSAgICBhdXRvIGV4aXN0aW5nQnJ1c2ggPSBtX3NvbGlkQ29sb3JlZEJydXNoQ2FjaGUuZW5zdXJl
KGNvbG9yS2V5LCBbdGhpcywgY29sb3JdIHsKLSAgICAgICAgQ09NUHRyPElEMkQxU29saWRDb2xv
ckJydXNoPiBjb2xvckJydXNoOwotICAgICAgICBtX3JlbmRlclRhcmdldC0+Q3JlYXRlU29saWRD
b2xvckJydXNoKGNvbG9yLCAmY29sb3JCcnVzaCk7Ci0gICAgICAgIHJldHVybiBjb2xvckJydXNo
OwotICAgIH0pOwotCi0gICAgcmV0dXJuIGV4aXN0aW5nQnJ1c2guaXRlcmF0b3ItPnZhbHVlOwot
fQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpyZWNvbXB1dGVTdHJva2VTdHlsZSgp
Ci17Ci0gICAgaWYgKCFtX3N0cm9rZVN5bGVJc0RpcnR5KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2QyZFN0cm9rZVN0eWxlID0gbnVsbHB0cjsKLQotICAgIERhc2hBcnJheSBkYXNoZXM7Ci0g
ICAgZmxvYXQgcGF0dGVybk9mZnNldCA9IDA7Ci0gICAgYXV0byBkYXNoU3R5bGUgPSBEMkQxX0RB
U0hfU1RZTEVfU09MSUQ7Ci0KLSAgICBpZiAoKG1fc3Ryb2tlU3R5bGUgIT0gU29saWRTdHJva2Up
ICYmIChtX3N0cm9rZVN0eWxlICE9IE5vU3Ryb2tlKSkgewotICAgICAgICBkYXNoU3R5bGUgPSBE
MkQxX0RBU0hfU1RZTEVfQ1VTVE9NOwotICAgICAgICBwYXR0ZXJuT2Zmc2V0ID0gbV9wYXR0ZXJu
T2Zmc2V0IC8gbV9zdHJva2VUaGlja25lc3M7Ci0gICAgICAgIGRhc2hlcyA9IG1fZGFzaGVzOwot
Ci0gICAgICAgIC8vIEluIERpcmVjdDJELCBkYXNoZXMgYW5kIGRvdHMgYXJlIGRlZmluZWQgaW4g
dGVybXMgb2YgdGhlIHJhdGlvIG9mIHRoZSBkYXNoIGxlbmd0aCB0byB0aGUgbGluZSB0aGlja25l
c3MuCi0gICAgICAgIGZvciAoYXV0byYgZGFzaCA6IGRhc2hlcykKLSAgICAgICAgICAgIGRhc2gg
Lz0gbV9zdHJva2VUaGlja25lc3M7Ci0gICAgfQotCi0gICAgYXV0byBzdHJva2VTdHlsZVByb3Bl
cnRpZXMgPSBEMkQxOjpTdHJva2VTdHlsZVByb3BlcnRpZXMobV9saW5lQ2FwLCBtX2xpbmVDYXAs
IG1fbGluZUNhcCwgbV9saW5lSm9pbiwgbV9taXRlckxpbWl0LCBkYXNoU3R5bGUsIHBhdHRlcm5P
ZmZzZXQpOwotICAgIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVTdHJv
a2VTdHlsZSgmc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzLCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6
ZSgpLCAmbV9kMmRTdHJva2VTdHlsZSk7Ci0KLSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0gZmFs
c2U7Ci19Ci0KLUlEMkQxU3Ryb2tlU3R5bGUqIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzdHJv
a2VTdHlsZSgpCi17Ci0gICAgcmVjb21wdXRlU3Ryb2tlU3R5bGUoKTsKLSAgICByZXR1cm4gbV9k
MmRTdHJva2VTdHlsZS5nZXQoKTsKLX0KLQotRDJEMV9TVFJPS0VfU1RZTEVfUFJPUEVSVElFUyBQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gRDJEMTo6U3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKG1fbGluZUNhcCwgbV9saW5l
Q2FwLCBtX2xpbmVDYXAsIG1fbGluZUpvaW4sIG1fbWl0ZXJMaW1pdCwgRDJEMV9EQVNIX1NUWUxF
X1NPTElELCAwLjBmKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0TGlu
ZUNhcChEMkQxX0NBUF9TVFlMRSBsaW5lQ2FwKQotewotICAgIGlmIChtX2xpbmVDYXAgPT0gbGlu
ZUNhcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9saW5lQ2FwID0gbGluZUNhcDsKLSAgICBt
X3N0cm9rZVN5bGVJc0RpcnR5ID0gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRDo6c2V0TGluZUpvaW4oRDJEMV9MSU5FX0pPSU4gam9pbikKLXsKLSAgICBpZiAobV9saW5l
Sm9pbiA9PSBqb2luKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xpbmVKb2luID0gam9pbjsK
LSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRDo6c2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17Ci0g
ICAgaWYgKG1fc3Ryb2tlU3R5bGUgPT0gc3Ryb2tlU3R5bGUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fc3Ryb2tlU3R5bGUgPSBzdHJva2VTdHlsZTsKLSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5
ID0gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0U3Ryb2tlVGhp
Y2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKLXsKLSAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVx
dWFsKHRoaWNrbmVzcywgbV9zdHJva2VUaGlja25lc3MpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3N0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsKLSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5
ID0gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0TWl0ZXJMaW1p
dChmbG9hdCBjYW52YXNNaXRlckxpbWl0KQotewotICAgIC8vIERpcmVjdDJEIG1pdGVyIGxpbWl0
IGlzIGluIHRlcm1zIG9mIEhBTEYgdGhlIGxpbmUgdGhpY2tuZXNzLgotICAgIGZsb2F0IG1pdGVy
TGltaXQgPSAwLjVmICogY2FudmFzTWl0ZXJMaW1pdDsKLSAgICBpZiAoV1RGOjphcmVFc3NlbnRp
YWxseUVxdWFsKG1pdGVyTGltaXQsIG1fbWl0ZXJMaW1pdCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fbWl0ZXJMaW1pdCA9IG1pdGVyTGltaXQ7Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9
IHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldERhc2hPZmZzZXQo
ZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGRh
c2hPZmZzZXQsIG1fZGFzaE9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGFzaE9m
ZnNldCA9IGRhc2hPZmZzZXQ7Ci0gICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IHRydWU7Ci19Ci0K
LXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldERhc2hlcyhjb25zdCBEYXNoQXJyYXkm
IGRhc2hlcykKLXsKLSAgICBpZiAobV9kYXNoZXMgPT0gZGFzaGVzKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2Rhc2hlcyA9IGRhc2hlczsKLSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0gdHJ1
ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0UGF0dGVybldpZHRoKGZs
b2F0IHBhdHRlcm5XaWR0aCkKLXsKLSAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHBh
dHRlcm5XaWR0aCwgbV9wYXR0ZXJuV2lkdGgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Bh
dHRlcm5XaWR0aCA9IHBhdHRlcm5XaWR0aDsKLSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0gdHJ1
ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0UGF0dGVybk9mZnNldChm
bG9hdCBwYXR0ZXJuT2Zmc2V0KQotewotICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwo
cGF0dGVybk9mZnNldCwgbV9wYXR0ZXJuT2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9wYXR0ZXJuT2Zmc2V0ID0gcGF0dGVybk9mZnNldDsKLSAgICBtX3N0cm9rZVN5bGVJc0RpcnR5
ID0gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6YmVnaW5EcmF3KCkK
LXsKLSAgICBBU1NFUlQobV9yZW5kZXJUYXJnZXQpOwotICAgIG1fcmVuZGVyVGFyZ2V0LT5CZWdp
bkRyYXcoKTsKLSAgICArK2JlZ2luRHJhd0NvdW50OwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEOjplbmREcmF3KCkKLXsKLSAgICBBU1NFUlQobV9yZW5kZXJUYXJnZXQpOwotCi0g
ICAgaWYgKG1fc3RhdGVTdGFjay5zaXplKCkgPiAxKQotICAgICAgICByZXN0b3JlKCk7Ci0KLSAg
ICBjbGVhckNsaXBzKG1fc3RhdGUtPm1fY2xpcHMpOwotCi0gICAgQVNTRVJUKG1fc3RhdGVTdGFj
ay5zaXplKCkgPj0gMSk7Ci0KLSAgICBEMkQxX1RBRyBmaXJzdCwgc2Vjb25kOwotICAgIEhSRVNV
TFQgaHIgPSBtX3JlbmRlclRhcmdldC0+RW5kRHJhdygmZmlyc3QsICZzZWNvbmQpOwotCi0gICAg
aWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICBXVEZMb2dBbHdheXMoIkZhaWxlZCBpbiBQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRDo6ZW5kRHJhdzogaHI9JXhkLCBmaXJzdD0lbGQsIHNlY29uZD0l
bGQiLCBociwgZmlyc3QsIHNlY29uZCk7Ci0KLSAgICAtLWJlZ2luRHJhd0NvdW50OwotCi0gICAg
Y29tcG9zaXRlSWZOZWVkZWQoKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6
c2V0VGFncyhEMkQxX1RBRyB0YWcxLCBEMkQxX1RBRyB0YWcyKQotewotI2lmIEFTU0VSVF9FTkFC
TEVECi0gICAgbV9yZW5kZXJUYXJnZXQtPlNldFRhZ3ModGFnMSwgdGFnMik7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTSh0YWcxKTsKLSAgICBVTlVTRURfUEFSQU0odGFnMik7Ci0jZW5kaWYKLX0K
LQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6bm90aWZ5UHJlRHJhd09ic2VydmVyKCkK
LXsKLSAgICBtX3ByZURyYXdIYW5kbGVyKCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQ6Om5vdGlmeVBvc3REcmF3T2JzZXJ2ZXIoKQotewotICAgIG1fcG9zdERyYXdIYW5kbGVy
KCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnB1c2hDbGlwKERpcmVjdDJE
TGF5ZXJUeXBlIGNsaXBUeXBlKQotewotICAgIG1fc3RhdGUtPm1fY2xpcHMuYXBwZW5kKGNsaXBU
eXBlKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6Y29tcG9zaXRlSWZOZWVk
ZWQoKQotewotICAgIGlmICghbV9jb21wb3NpdGVTb3VyY2UpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0KFF1ZXJ5LCBt
X3JlbmRlclRhcmdldC5nZXQoKSk7Ci0gICAgaWYgKCFiaXRtYXBUYXJnZXQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY3VycmVudENhbnZhcyA9IERpcmVjdDJE
OjpjcmVhdGVCaXRtYXBDb3B5RnJvbUNvbnRleHQoYml0bWFwVGFyZ2V0LmdldCgpKTsKLSAgICBp
ZiAoIWN1cnJlbnRDYW52YXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJRDJEMUVm
ZmVjdD4gZWZmZWN0OwotCi0gICAgaWYgKG1fY29tcG9zaXRlTW9kZSAhPSBEMkQxX0NPTVBPU0lU
RV9NT0RFX0ZPUkNFX0RXT1JEKSB7Ci0gICAgICAgIG1fZGV2aWNlQ29udGV4dC0+Q3JlYXRlRWZm
ZWN0KENMU0lEX0QyRDFDb21wb3NpdGUsICZlZmZlY3QpOwotICAgICAgICBlZmZlY3QtPlNldElu
cHV0KDAsIG1fY29tcG9zaXRlU291cmNlLmdldCgpKTsKLSAgICAgICAgZWZmZWN0LT5TZXRJbnB1
dCgxLCBjdXJyZW50Q2FudmFzLmdldCgpKTsKLSAgICAgICAgZWZmZWN0LT5TZXRWYWx1ZShEMkQx
X0NPTVBPU0lURV9QUk9QX01PREUsIG1fY29tcG9zaXRlTW9kZSk7Ci0gICAgfSBlbHNlIGlmICht
X2JsZW5kTW9kZSAhPSBEMkQxX0JMRU5EX01PREVfRk9SQ0VfRFdPUkQpIHsKLSAgICAgICAgbV9k
ZXZpY2VDb250ZXh0LT5DcmVhdGVFZmZlY3QoQ0xTSURfRDJEMUJsZW5kLCAmZWZmZWN0KTsKLSAg
ICAgICAgZWZmZWN0LT5TZXRJbnB1dCgwLCBjdXJyZW50Q2FudmFzLmdldCgpKTsKLSAgICAgICAg
ZWZmZWN0LT5TZXRJbnB1dCgxLCBtX2NvbXBvc2l0ZVNvdXJjZS5nZXQoKSk7Ci0gICAgICAgIGVm
ZmVjdC0+U2V0VmFsdWUoRDJEMV9CTEVORF9QUk9QX01PREUsIG1fYmxlbmRNb2RlKTsKLSAgICB9
Ci0KLSAgICBpZiAoZWZmZWN0KSB7Ci0gICAgICAgIG1fZGV2aWNlQ29udGV4dC0+QmVnaW5EcmF3
KCk7Ci0gICAgICAgIG1fZGV2aWNlQ29udGV4dC0+Q2xlYXIoRDJEMTo6Q29sb3JGKDAsIDAsIDAs
IDApKTsKLSAgICAgICAgbV9kZXZpY2VDb250ZXh0LT5EcmF3SW1hZ2UoZWZmZWN0LmdldCgpKTsK
LSAgICAgICAgbV9kZXZpY2VDb250ZXh0LT5FbmREcmF3KCk7Ci0gICAgfQotCi0gICAgbV9jb21w
b3NpdGVTb3VyY2UgPSBudWxscHRyOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
OjpzZXRCbGVuZEFuZENvbXBvc2l0ZU1vZGUoRDJEMV9CTEVORF9NT0RFIGJsZW5kLCBEMkQxX0NP
TVBPU0lURV9NT0RFIG1vZGUpCi17Ci0gICAgaWYgKG1vZGUgPT0gbV9jb21wb3NpdGVNb2RlICYm
IGJsZW5kID09IG1fYmxlbmRNb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBEaXJlY3Qy
RCBoYW5kbGVzIGNvbXBvc2l0aW5nIGJhc2VkIG9uIGJpdG1hcHMuIElmIHdlIGFyZSBjaGFuZ2lu
ZyB0aGUKLSAgICAvLyBjb21wb3NpdGluZyBtb2RlLCB3ZSBuZWVkIHRvIGNhcHR1cmUgdGhlIGN1
cnJlbnQgc3RhdGUgb2YgdGhlIHJlbmRlcmluZwotICAgIC8vIGluIGEgYml0bWFwLCBwZXJmb3Jt
IGRyYXdpbmcgb3BlcmF0aW9ucyB1bnRpbCB3ZSBmaW5pc2gsIHRoZW4gaGFuZGxlCi0gICAgLy8g
dGhlIGNvbXBvc3Rpbmcgb2YgdGhlIHR3byBsYXllcnMuCi0gICAgQ09NUHRyPElEMkQxQml0bWFw
UmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQoUXVlcnksIG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsK
LSAgICBpZiAoIWJpdG1hcFRhcmdldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZW5kRHJhdygp
OwotCi0gICAgbV9jb21wb3NpdGVNb2RlID0gbW9kZTsKLSAgICBtX2JsZW5kTW9kZSA9IGJsZW5k
OwotCi0gICAgbV9jb21wb3NpdGVTb3VyY2UgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwQ29weUZy
b21Db250ZXh0KGJpdG1hcFRhcmdldC5nZXQoKSk7Ci0KLSAgICBiZWdpbkRyYXcoKTsKLQotICAg
IG1fZGV2aWNlQ29udGV4dC0+Q2xlYXIoRDJEMTo6Q29sb3JGKDAsIDAsIDAsIDApKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVj
dDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oCShu
b25leGlzdGVudCkKQEAgLTEsMjEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0K
LSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jaW5jbHVkZSA8ZDJkMWVmZmVjdHMu
aD4KLSNpbmNsdWRlIDxkM2QxMV8xLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlOwotCi1uYW1lc3BhY2UgRGlyZWN0MkQgewotc3RydWN0IEZpbGxTb3VyY2U7Ci1zdHJ1Y3Qg
U3Ryb2tlU291cmNlOwotc3RydWN0IFNoYWRvd1N0YXRlOwotfQotCi1jbGFzcyBQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQpOwotcHVibGljOgotICAgIFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEKElEMkQxUmVuZGVyVGFyZ2V0KiwgRnVuY3Rpb248dm9pZCgp
PiYmIHByZURyYXdIYW5kbGVyID0gW10oKSB7IH0sIEZ1bmN0aW9uPHZvaWQoKT4mJiBwb3N0RHJh
d0hhbmRsZXIgPSBbXSgpIHsgfSk7Ci0gICAgflBsYXRmb3JtQ29udGV4dERpcmVjdDJEKCk7Ci0K
LSAgICBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KCkgeyByZXR1cm4gbV9yZW5kZXJU
YXJnZXQuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdl
dCopOwotCi0gICAgSUQyRDFEZXZpY2VDb250ZXh0KiBkZXZpY2VDb250ZXh0KCkgeyByZXR1cm4g
bV9kZXZpY2VDb250ZXh0LmdldCgpOyB9Ci0KLSAgICBJRDNEMTFEZXZpY2UxKiBkM2REZXZpY2Uo
KSBjb25zdCB7IHJldHVybiBtX2QzZERldmljZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0RDNERGV2
aWNlKElEM0QxMURldmljZTEqIGRldmljZSkgeyBtX2QzZERldmljZSA9IGRldmljZTsgfQotCi0g
ICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBncmFwaGljc0NvbnRleHRQcml2YXRl
KCkgeyByZXR1cm4gbV9ncmFwaGljc0NvbnRleHRQcml2YXRlOyB9Ci0gICAgdm9pZCBzZXRHcmFw
aGljc0NvbnRleHRQcml2YXRlKEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZ3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZSkgeyBtX2dyYXBoaWNzQ29udGV4dFByaXZhdGUgPSBncmFwaGljc0Nv
bnRleHRQcml2YXRlOyB9Ci0KLSAgICBJRDJEMUxheWVyKiBjbGlwTGF5ZXIoKSBjb25zdDsKLSAg
ICBJRDJEMVN0cm9rZVN0eWxlKiBzdHJva2VTdHlsZSgpOwotICAgIEQyRDFfU1RST0tFX1NUWUxF
X1BST1BFUlRJRVMgc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKCkgY29uc3Q7Ci0gICAgSUQyRDFTdHJv
a2VTdHlsZSogcGxhdGZvcm1TdHJva2VTdHlsZSgpIGNvbnN0OwotCi0gICAgQ09NUHRyPElEMkQx
U29saWRDb2xvckJydXNoPiBicnVzaFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9SX0YmKTsKLQot
ICAgIHZvaWQgc2F2ZSgpOwotICAgIHZvaWQgcmVzdG9yZSgpOwotCi0gICAgYm9vbCBoYXNTYXZl
ZFN0YXRlKCkgY29uc3QgeyByZXR1cm4gIW1fc3RhdGVTdGFjay5pc0VtcHR5KCk7IH0KLQotICAg
IHZvaWQgYmVnaW5EcmF3KCk7Ci0gICAgdm9pZCBlbmREcmF3KCk7Ci0KLSAgICBlbnVtIERpcmVj
dDJETGF5ZXJUeXBlIHsgQXhpc0FsaWduZWRDbGlwLCBMYXllckNsaXAgfTsKLSAgICB2b2lkIHB1
c2hSZW5kZXJDbGlwKERpcmVjdDJETGF5ZXJUeXBlKTsKLSAgICB2b2lkIHNldEFjdGl2ZUxheWVy
KENPTVB0cjxJRDJEMUxheWVyPiYmKTsKLQotICAgIHZvaWQgcmVjb21wdXRlU3Ryb2tlU3R5bGUo
KTsKLSAgICBmbG9hdCBzdHJva2VUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZVRo
aWNrbmVzczsgfQotCi0gICAgc3RydWN0IFRyYW5zcGFyZW5jeUxheWVyU3RhdGUgewotICAgICAg
ICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IHJlbmRlclRhcmdldDsKLSAgICAgICAg
Q29sb3Igc2hhZG93Q29sb3I7Ci0gICAgICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAg
ICAgIGZsb2F0IG9wYWNpdHkgeyAxLjAgfTsKLSAgICAgICAgZmxvYXQgc2hhZG93Qmx1ciB7IDAg
fTsKLSAgICAgICAgYm9vbCBoYXNTaGFkb3cgeyBmYWxzZSB9OwotICAgIH07Ci0gICAgVmVjdG9y
PFRyYW5zcGFyZW5jeUxheWVyU3RhdGU+IG1fdHJhbnNwYXJlbmN5TGF5ZXJTdGFjazsKLQotICAg
IHZvaWQgc2V0TGluZUNhcChEMkQxX0NBUF9TVFlMRSk7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihE
MkQxX0xJTkVfSk9JTik7Ci0gICAgdm9pZCBzZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSk7Ci0g
ICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KTsKLSAgICB2b2lkIHNldERhc2hPZmZzZXQoZmxv
YXQpOwotICAgIHZvaWQgc2V0UGF0dGVybldpZHRoKGZsb2F0KTsKLSAgICB2b2lkIHNldFBhdHRl
cm5PZmZzZXQoZmxvYXQpOwotICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KTsKLSAg
ICB2b2lkIHNldERhc2hlcyhjb25zdCBEYXNoQXJyYXkmKTsKLQotICAgIHZvaWQgc2V0QmxlbmRB
bmRDb21wb3NpdGVNb2RlKEQyRDFfQkxFTkRfTU9ERSwgRDJEMV9DT01QT1NJVEVfTU9ERSk7Ci0K
LSAgICB2b2lkIHNldFRhZ3MoRDJEMV9UQUcgdGFnMSwgRDJEMV9UQUcgdGFnMik7Ci0gICAgdm9p
ZCBub3RpZnlQcmVEcmF3T2JzZXJ2ZXIoKTsKLSAgICB2b2lkIG5vdGlmeVBvc3REcmF3T2JzZXJ2
ZXIoKTsKLQotICAgIHZvaWQgcHVzaENsaXAoRGlyZWN0MkRMYXllclR5cGUpOwotCi1wcml2YXRl
OgotICAgIHZvaWQgY2xlYXJDbGlwcyhWZWN0b3I8RGlyZWN0MkRMYXllclR5cGU+Jik7Ci0gICAg
dm9pZCBjb21wb3NpdGVJZk5lZWRlZCgpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKiBtX2dyYXBoaWNzQ29udGV4dFByaXZhdGUgeyBudWxscHRyIH07Ci0KLSAgICBDT01Q
dHI8SUQyRDFSZW5kZXJUYXJnZXQ+IG1fcmVuZGVyVGFyZ2V0OwotICAgIENPTVB0cjxJRDJEMURl
dmljZUNvbnRleHQ+IG1fZGV2aWNlQ29udGV4dDsKLSAgICBDT01QdHI8SUQyRDFTdHJva2VTdHls
ZT4gbV9kMmRTdHJva2VTdHlsZTsKLQotICAgIEhhc2hNYXA8dWludDMyX3QsIENPTVB0cjxJRDJE
MVNvbGlkQ29sb3JCcnVzaD4+IG1fc29saWRDb2xvcmVkQnJ1c2hDYWNoZTsKLSAgICBDT01QdHI8
SUQyRDFTb2xpZENvbG9yQnJ1c2g+IG1fd2hpdGVCcnVzaDsKLSAgICBDT01QdHI8SUQyRDFTb2xp
ZENvbG9yQnJ1c2g+IG1femVyb0JydXNoOwotICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVz
aD4gbV9zb2xpZFN0cm9rZUJydXNoOwotICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4g
bV9zb2xpZEZpbGxCcnVzaDsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXBCcnVzaD4gbV9wYXR0ZXJu
U3Ryb2tlQnJ1c2g7Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwQnJ1c2g+IG1fcGF0dGVybkZpbGxC
cnVzaDsKLQotICAgIENPTVB0cjxJRDNEMTFEZXZpY2UxPiBtX2QzZERldmljZTsKLQotICAgIENP
TVB0cjxJRDJEMUJpdG1hcD4gbV9jb21wb3NpdGVTb3VyY2U7Ci0KLSAgICBGdW5jdGlvbjx2b2lk
KCk+IG1fcHJlRHJhd0hhbmRsZXI7Ci0gICAgRnVuY3Rpb248dm9pZCgpPiBtX3Bvc3REcmF3SGFu
ZGxlcjsKLQotICAgIGNsYXNzIFN0YXRlOwotICAgIFN0YXRlKiBtX3N0YXRlIHsgbnVsbHB0ciB9
OwotICAgIFZlY3RvcjxTdGF0ZT4gbV9zdGF0ZVN0YWNrOwotCi0gICAgRDJEMV9DQVBfU1RZTEUg
bV9saW5lQ2FwIHsgRDJEMV9DQVBfU1RZTEVfRkxBVCB9OwotICAgIEQyRDFfTElORV9KT0lOIG1f
bGluZUpvaW4geyBEMkQxX0xJTkVfSk9JTl9NSVRFUiB9OwotICAgIFN0cm9rZVN0eWxlIG1fc3Ry
b2tlU3R5bGUgeyBTb2xpZFN0cm9rZSB9OwotICAgIERhc2hBcnJheSBtX2Rhc2hlczsKLQotICAg
IHVuc2lnbmVkIGJlZ2luRHJhd0NvdW50IHsgMCB9OwotCi0gICAgZmxvYXQgbV9taXRlckxpbWl0
IHsgMTAuMGYgfTsKLSAgICBmbG9hdCBtX2Rhc2hPZmZzZXQgeyAwIH07Ci0gICAgZmxvYXQgbV9w
YXR0ZXJuV2lkdGggeyAxLjBmIH07Ci0gICAgZmxvYXQgbV9wYXR0ZXJuT2Zmc2V0IHsgMCB9Owot
ICAgIGZsb2F0IG1fc3Ryb2tlVGhpY2tuZXNzIHsgMCB9OwotICAgIGZsb2F0IG1fYWxwaGEgeyAx
LjAgfTsKLQotICAgIGJvb2wgbV9zdHJva2VTeWxlSXNEaXJ0eSB7IGZhbHNlIH07Ci0KLSAgICBE
MkQxX0JMRU5EX01PREUgbV9ibGVuZE1vZGUgeyBEMkQxX0JMRU5EX01PREVfTVVMVElQTFkgfTsK
LSAgICBEMkQxX0NPTVBPU0lURV9NT0RFIG1fY29tcG9zaXRlTW9kZSB7IEQyRDFfQ09NUE9TSVRF
X01PREVfU09VUkNFX09WRVIgfTsKLQotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7
Ci0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKLX07Ci0K
LWNsYXNzIFBsYXRmb3JtQ29udGV4dFN0YXRlU2F2ZXIgewotcHVibGljOgotICAgIFBsYXRmb3Jt
Q29udGV4dFN0YXRlU2F2ZXIoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIGNvbnRleHQsIGJvb2wg
c2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQotICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAg
ICAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCi0gICAgewotICAgICAgICBp
ZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAgIG1fY29udGV4dC5zYXZlKCk7Ci0gICAg
fQotCi0gICAgflBsYXRmb3JtQ29udGV4dFN0YXRlU2F2ZXIoKQotICAgIHsKLSAgICAgICAgaWYg
KG1fc2F2ZUFuZFJlc3RvcmUpCi0gICAgICAgICAgICBtX2NvbnRleHQucmVzdG9yZSgpOwotICAg
IH0KLQotICAgIHZvaWQgc2F2ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fc2F2ZUFuZFJl
c3RvcmUpOwotICAgICAgICBtX2NvbnRleHQuc2F2ZSgpOwotICAgICAgICBtX3NhdmVBbmRSZXN0
b3JlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc3RvcmUoKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUpOwotICAgICAgICBtX2NvbnRleHQucmVzdG9yZSgpOwot
ICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBkaWRT
YXZlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3NhdmVBbmRSZXN0b3JlOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgbV9jb250ZXh0Owot
ICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZSB7IGZhbHNlIH07Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnRE
YXRhRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50
KQpAQCAtMSwyMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLQotI2lm
IFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkRpcmVjdFdyaXRlVXRpbGl0aWVzLmgiCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9u
dERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFduZERDLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlIDxjb211dGlsLmg+Ci0jaW5jbHVkZSA8ZHdyaXRlXzMuaD4KLSNpbmNs
dWRlIDxtbGFuZy5oPgotI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNsdWRlIDx1bmlj
b2RlL3Vub3JtLmg+Ci0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgVmVjdG9yPFdDSEFS
PiBnZXRGYWNlTmFtZShJRFdyaXRlRm9udCogZm9udCkKLXsKLSAgICBpZiAoIWZvbnQpCi0gICAg
ICAgIHJldHVybiBWZWN0b3I8V0NIQVI+KCk7Ci0KLSAgICBDT01QdHI8SURXcml0ZUxvY2FsaXpl
ZFN0cmluZ3M+IGxvY2FsaXplZEZhY2VOYW1lczsKLSAgICBIUkVTVUxUIGhyID0gZm9udC0+R2V0
RmFjZU5hbWVzKCZsb2NhbGl6ZWRGYWNlTmFtZXMpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NF
RURFRChocikpOwotCi0gICAgVUlOVDMyIGxvY2FsZUluZGV4ID0gMDsKLSAgICBCT09MIGV4aXN0
cyA9IGZhbHNlOwotCi0gICAgd2NoYXJfdCBsb2NhbGVOYW1lW0xPQ0FMRV9OQU1FX01BWF9MRU5H
VEhdOwotICAgIGludCBsb2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUobG9j
YWxlTmFtZSwgTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7Ci0gICAgaWYgKGxvY2FsZUxlbmd0aCkK
LSAgICAgICAgaHIgPSBsb2NhbGl6ZWRGYWNlTmFtZXMtPkZpbmRMb2NhbGVOYW1lKGxvY2FsZU5h
bWUsICZsb2NhbGVJbmRleCwgJmV4aXN0cyk7Ci0KLSAgICBpZiAoIWV4aXN0cyB8fCAhU1VDQ0VF
REVEKGhyKSkKLSAgICAgICAgaHIgPSBsb2NhbGl6ZWRGYWNlTmFtZXMtPkZpbmRMb2NhbGVOYW1l
KEwiZW4tdXMiLCAmbG9jYWxlSW5kZXgsICZleGlzdHMpOwotCi0gICAgaWYgKCFleGlzdHMgfHwg
IVNVQ0NFRURFRChocikpCi0gICAgICAgIGxvY2FsZUluZGV4ID0gMDsKLQotICAgIFVJTlQzMiBm
YWNlTmFtZUxlbmd0aCA9IDA7Ci0gICAgaHIgPSBsb2NhbGl6ZWRGYWNlTmFtZXMtPkdldFN0cmlu
Z0xlbmd0aChsb2NhbGVJbmRleCwgJmZhY2VOYW1lTGVuZ3RoKTsKLSAgICBpZiAoIVNVQ0NFRURF
RChocikpCi0gICAgICAgIHJldHVybiBWZWN0b3I8V0NIQVI+KCk7Ci0KLSAgICBWZWN0b3I8V0NI
QVI+IGZhY2VOYW1lKGZhY2VOYW1lTGVuZ3RoICsgMSk7Ci0gICAgaHIgPSBsb2NhbGl6ZWRGYWNl
TmFtZXMtPkdldFN0cmluZyhsb2NhbGVJbmRleCwgZmFjZU5hbWUuZGF0YSgpLCBmYWNlTmFtZS5z
aXplKCkpOwotCi0gICAgcmV0dXJuIGZhY2VOYW1lOwotfQotCi12b2lkIEZvbnQ6OnBsYXRmb3Jt
SW5pdCgpCi17Ci0gICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEuc3lu
dGhldGljQm9sZCgpID8gMS4wZiA6IDAuZjsKLSAgICBtX3NjcmlwdENhY2hlID0gMDsKLSAgICBt
X3NjcmlwdEZvbnRQcm9wZXJ0aWVzID0gMDsKLQotICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VH
REkoKSkKLSAgICAgICAgcmV0dXJuIGluaXRHRElGb250KCk7Ci0KLSAgICBmbG9hdCBwb2ludFNp
emUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0KLSAgICBhdXRvIGZvbnQgPSBtX3BsYXRmb3Jt
RGF0YS5kd0ZvbnQoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChmb250KTsKLQotICAgIGF1dG8gZm9u
dEZhY2UgPSBtX3BsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
Zm9udEZhY2UpOwotCi0gICAgRFdSSVRFX0ZPTlRfTUVUUklDUyBmb250TWV0cmljczsKLSAgICBm
b250LT5HZXRNZXRyaWNzKCZmb250TWV0cmljcyk7Ci0KLSAgICBpbnQgaUFzY2VudCA9IGZvbnRN
ZXRyaWNzLmFzY2VudDsKLSAgICBpbnQgaURlc2NlbnQgPSBmb250TWV0cmljcy5kZXNjZW50Owot
ICAgIGludCBpTGluZUdhcCA9IGZvbnRNZXRyaWNzLmxpbmVHYXA7Ci0gICAgaW50IGlDYXBIZWln
aHQgPSBmb250TWV0cmljcy5jYXBIZWlnaHQ7Ci0KLSAgICB1bnNpZ25lZCB1bml0c1BlckVtID0g
Zm9udE1ldHJpY3MuZGVzaWduVW5pdHNQZXJFbTsKLSAgICBmbG9hdCBmQXNjZW50ID0gc2NhbGVF
bVRvVW5pdHMoaUFzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgZmxvYXQgZkRl
c2NlbnQgPSBzY2FsZUVtVG9Vbml0cyhpRGVzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7
Ci0gICAgZmxvYXQgZkNhcEhlaWdodCA9IHNjYWxlRW1Ub1VuaXRzKGlDYXBIZWlnaHQsIHVuaXRz
UGVyRW0pICogcG9pbnRTaXplOwotICAgIGZsb2F0IGZMaW5lR2FwID0gc2NhbGVFbVRvVW5pdHMo
aUxpbmVHYXAsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotCi0gICAgaWYgKG9yaWdpbigpID09
IE9yaWdpbjo6TG9jYWwpIHsKLSAgICAgICAgVmVjdG9yPFdDSEFSPiBmYWNlTmFtZSA9IGdldEZh
Y2VOYW1lKGZvbnQpOwotICAgICAgICBmQXNjZW50ID0gYXNjZW50Q29uc2lkZXJpbmdNYWNBc2Nl
bnRIYWNrKGZhY2VOYW1lLmRhdGEoKSwgZkFzY2VudCwgZkRlc2NlbnQpOwotICAgIH0KLQotICAg
IG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KGZBc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0
RGVzY2VudChmRGVzY2VudCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRDYXBIZWlnaHQoZkNhcEhl
aWdodCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGZMaW5lR2FwKTsKLSAgICBtX2Zv
bnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxyb3VuZGYoZkFzY2VudCkgKyBscm91bmRmKGZEZXNj
ZW50KSArIGxyb3VuZGYoZkxpbmVHYXApKTsKLQotICAgIEdseXBoIHhHbHlwaCA9IGdseXBoRGF0
YUZvckNoYXJhY3RlcigneCcpLmdseXBoOwotCi0gICAgaWYgKHhHbHlwaCkgewotICAgICAgICAv
LyBNZWFzdXJlIHRoZSBhY3R1YWwgY2hhcmFjdGVyICJ4Iiwgc2luY2UgaXQncyBwb3NzaWJsZSBm
b3IgaXQgdG8gZXh0ZW5kIGJlbG93IHRoZSBiYXNlbGluZSwgYW5kIHdlIG5lZWQgdGhlCi0gICAg
ICAgIC8vIHJlcG9ydGVkIHgtaGVpZ2h0IHRvIG9ubHkgaW5jbHVkZSB0aGUgcG9ydGlvbiBvZiB0
aGUgZ2x5cGggdGhhdCBpcyBhYm92ZSB0aGUgYmFzZWxpbmUuCi0gICAgICAgIFZlY3RvcjxEV1JJ
VEVfR0xZUEhfTUVUUklDUz4gZ2x5cGhNZXRyaWNzKDEpOwotICAgICAgICBIUkVTVUxUIGhyID0g
Zm9udEZhY2UtPkdldERlc2lnbkdseXBoTWV0cmljcygmeEdseXBoLCAxLCBnbHlwaE1ldHJpY3Mu
ZGF0YSgpLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6
VmVydGljYWwpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAg
ICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHNjYWxlRW1Ub1VuaXRzKGdseXBoTWV0cmljcy5m
aXJzdCgpLnZlcnRpY2FsT3JpZ2luWSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGludCBpWEhlaWdodCA9IGZvbnRNZXRyaWNzLnhIZWlnaHQ7Ci0gICAg
ICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodChzY2FsZUVtVG9Vbml0cyhpWEhlaWdodCwgdW5p
dHNQZXJFbSkgKiBwb2ludFNpemUpOwotICAgIH0KLQotICAgIG1fZm9udE1ldHJpY3Muc2V0VW5p
dHNQZXJFbSh1bml0c1BlckVtKTsKLX0KLQotRmxvYXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRz
Rm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5z
aXplKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIGlmIChtX3BsYXRmb3Jt
RGF0YS51c2VHREkoKSkKLSAgICAgICAgcmV0dXJuIGJvdW5kc0ZvckdESUdseXBoKGdseXBoKTsK
LQotICAgIGF1dG8gZm9udCA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9udCgpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKGZvbnQpOwotCi0gICAgYXV0byBmb250RmFjZSA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9u
dEZhY2UoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChmb250RmFjZSk7Ci0KLSAgICBmbG9hdCBwb2lu
dFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAgYm9vbCB2ZXJ0aWNhbCA9IG1fcGxh
dGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbDsKLQot
ICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfTUVUUklDUz4gZ2x5cGhNZXRyaWNzKDEpOwotICAgIEhS
RVNVTFQgaHIgPSBmb250RmFjZS0+R2V0RGVzaWduR2x5cGhNZXRyaWNzKCZnbHlwaCwgMSwgZ2x5
cGhNZXRyaWNzLmRhdGEoKSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3Jp
ZW50YXRpb246OlZlcnRpY2FsKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsK
LQotICAgIGNvbnN0IGF1dG8mIG1ldHJpY3MgPSBnbHlwaE1ldHJpY3MuZmlyc3QoKTsKLQotICAg
IHVuc2lnbmVkIHVuaXRzUGVyRW0gPSBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKTsKLQotICAg
IEZsb2F0UG9pbnQgb3JpZ2luKHNjYWxlRW1Ub1VuaXRzKG1ldHJpY3MubGVmdFNpZGVCZWFyaW5n
LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSwgc2NhbGVFbVRvVW5pdHMobWV0cmljcy52ZXJ0aWNh
bE9yaWdpblksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplKTsKLSAgICBGbG9hdFNpemUgc2l6ZShz
Y2FsZUVtVG9Vbml0cyhtZXRyaWNzLmFkdmFuY2VXaWR0aCAtIG1ldHJpY3MubGVmdFNpZGVCZWFy
aW5nIC0gbWV0cmljcy5yaWdodFNpZGVCZWFyaW5nLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSwK
LSAgICAgICAgc2NhbGVFbVRvVW5pdHMobWV0cmljcy5hZHZhbmNlSGVpZ2h0IC0gbWV0cmljcy50
b3BTaWRlQmVhcmluZyAtIG1ldHJpY3MuYm90dG9tU2lkZUJlYXJpbmcsIHVuaXRzUGVyRW0pICog
cG9pbnRTaXplKTsKLQotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveChvcmlnaW4sIHNpemUpOwot
ICAgIGlmIChtX3N5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgIGJvdW5kaW5nQm94LnNldFdp
ZHRoKGJvdW5kaW5nQm94LndpZHRoKCkgKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQpOwotCi0gICAg
cmV0dXJuIGJvdW5kaW5nQm94OwotfQotCi1mbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5
cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5zaXplKCkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKQot
ICAgICAgICByZXR1cm4gd2lkdGhGb3JHRElHbHlwaChnbHlwaCk7Ci0KLSAgICBhdXRvIGZvbnQg
PSBtX3BsYXRmb3JtRGF0YS5kd0ZvbnQoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChmb250KTsKLQot
ICAgIGF1dG8gZm9udEZhY2UgPSBtX3BsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoZm9udEZhY2UpOwotCi0gICAgYm9vbCBpc1ZlcnRpY2FsID0gbV9wbGF0Zm9y
bURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsOwotCi0gICAg
VmVjdG9yPERXUklURV9HTFlQSF9NRVRSSUNTPiBnbHlwaE1ldHJpY3MoMSk7Ci0gICAgSFJFU1VM
VCBociA9IGZvbnRGYWNlLT5HZXREZXNpZ25HbHlwaE1ldHJpY3MoJmdseXBoLCAxLCBnbHlwaE1l
dHJpY3MuZGF0YSgpLCBpc1ZlcnRpY2FsKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQo
aHIpKTsKLQotICAgIGNvbnN0IGF1dG8mIG1ldHJpY3MgPSBnbHlwaE1ldHJpY3MuZmlyc3QoKTsK
LSAgICBpbnQgd2lkdGhJbkVtID0gbWV0cmljcy5hZHZhbmNlV2lkdGg7Ci0KLSAgICBmbG9hdCBw
b2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAgdW5zaWduZWQgdW5pdHNQZXJF
bSA9IG1fZm9udE1ldHJpY3MudW5pdHNQZXJFbSgpOwotICAgIGZsb2F0IHdpZHRoID0gc2NhbGVF
bVRvVW5pdHMod2lkdGhJbkVtLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLQotICAgIHJldHVy
biB3aWR0aCArIG1fc3ludGhldGljQm9sZE9mZnNldDsKLX0KLQotUGF0aCBGb250OjpwbGF0Zm9y
bVBhdGhGb3JHbHlwaChHbHlwaCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBQYXRoKCk7Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVy
LmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1RleHRBbmFseXplckhlbHBlci5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNDMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRleHRBbmFseXplckhlbHBlci5oIgotCi0jaWYg
VVNFKERJUkVDVDJEKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVRleHRBbmFseXplckhlbHBl
cjo6VGV4dEFuYWx5emVySGVscGVyKGNvbnN0IFdDSEFSKiBsb2NhbGVOYW1lLCBjb25zdCBXQ0hB
UiogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpCi0gICAgOiBtX2xvY2FsZU5hbWUobG9j
YWxlTmFtZSkKLSAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAsIG1fYnVmZmVyTGVuZ3RoKGJ1
ZmZlckxlbmd0aCkKLXsKLX0KLQotSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6OlF1ZXJ5SW50
ZXJmYWNlKF9Jbl8gUkVGSUlEIHJpaWQsIF9DT01fT3V0cHRyXyB2b2lkKiogcHB2T2JqZWN0KQot
ewotICAgIGlmICghcHB2T2JqZWN0KQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotICAgICpw
cHZPYmplY3QgPSBudWxscHRyOwotICAgIGlmIChJc0VxdWFsR1VJRChyaWlkLCBfX3V1aWRvZihJ
RFdyaXRlVGV4dEFuYWx5c2lzU2luaykpKQotICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nh
c3Q8SURXcml0ZVRleHRBbmFseXNpc1NpbmsqPih0aGlzKTsKLSAgICBlbHNlIGlmIChJc0VxdWFs
R1VJRChyaWlkLCBfX3V1aWRvZihJRFdyaXRlVGV4dEFuYWx5c2lzU291cmNlKSkpCi0gICAgICAg
ICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJRFdyaXRlVGV4dEFuYWx5c2lzU2luayo+KHRoaXMp
OwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEVfRkFJTDsKLQotICAgIEFkZFJlZigpOwotICAg
IHJldHVybiBTX09LOwotfQotCi1VTE9ORyBUZXh0QW5hbHl6ZXJIZWxwZXI6OkFkZFJlZigpCi17
Ci0gICAgcmV0dXJuICsrbV9yZWZDb3VudDsKLX0KLQotVUxPTkcgVGV4dEFuYWx5emVySGVscGVy
OjpSZWxlYXNlKCkKLXsKLSAgICBVTE9ORyBuZXdSZWYgPSAtLW1fcmVmQ291bnQ7Ci0gICAgaWYg
KCFuZXdSZWYpCi0gICAgICAgIGRlbGV0ZSh0aGlzKTsKLQotICAgIHJldHVybiBuZXdSZWY7Ci19
Ci0KLUhSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpHZXRUZXh0QXRQb3NpdGlvbihVSU5UMzIg
dGV4dFBvc2l0aW9uLCBjb25zdCBXQ0hBUioqIHRleHRTdHJpbmcsIFVJTlQzMiogdGV4dExlbmd0
aCkKLXsKLSAgICBpZiAoIXRleHRTdHJpbmcgfHwgIXRleHRMZW5ndGgpCi0gICAgICAgIHJldHVy
biBFX1BPSU5URVI7Ci0KLSAgICBpZiAodGV4dFBvc2l0aW9uID49IG1fYnVmZmVyTGVuZ3RoKSB7
Ci0gICAgICAgICp0ZXh0U3RyaW5nID0gbnVsbHB0cjsKLSAgICAgICAgKnRleHRMZW5ndGggPSAw
OwotICAgICAgICByZXR1cm4gU19PSzsKLSAgICB9Ci0KLSAgICAqdGV4dFN0cmluZyA9ICZtX2J1
ZmZlclt0ZXh0UG9zaXRpb25dOwotICAgICp0ZXh0TGVuZ3RoID0gbV9idWZmZXJMZW5ndGggLSB0
ZXh0UG9zaXRpb247Ci0KLSAgICByZXR1cm4gU19PSzsKLX0KLQotSFJFU1VMVCBUZXh0QW5hbHl6
ZXJIZWxwZXI6OkdldFRleHRCZWZvcmVQb3NpdGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBjb25z
dCBXQ0hBUioqIHRleHRTdHJpbmcsIFVJTlQzMiogdGV4dExlbmd0aCkKLXsKLSAgICBpZiAoIXRl
eHRTdHJpbmcgfHwgIXRleHRMZW5ndGgpCi0gICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0KLSAg
ICBpZiAoIXRleHRQb3NpdGlvbiB8fCB0ZXh0UG9zaXRpb24gPiBtX2J1ZmZlckxlbmd0aCkgewot
ICAgICAgICAqdGV4dFN0cmluZyA9IG51bGxwdHI7Ci0gICAgICAgICp0ZXh0TGVuZ3RoID0gMDsK
LSAgICAgICAgcmV0dXJuIFNfT0s7Ci0gICAgfQotCi0gICAgKnRleHRTdHJpbmcgPSAmbV9idWZm
ZXJbMF07Ci0gICAgKnRleHRMZW5ndGggPSB0ZXh0UG9zaXRpb247Ci0KLSAgICByZXR1cm4gU19P
SzsKLX0KLQotSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6OkdldExvY2FsZU5hbWUoVUlOVDMy
IHRleHRQb3NpdGlvbiwgVUlOVDMyKiB0ZXh0TGVuZ3RoLCBjb25zdCBXQ0hBUioqIGxvY2FsZU5h
bWUpCi17Ci0gICAgKmxvY2FsZU5hbWUgPSBtX2xvY2FsZU5hbWU7Ci0gICAgKnRleHRMZW5ndGgg
PSBtX2J1ZmZlckxlbmd0aCAtIHRleHRQb3NpdGlvbjsKLQotICAgIHJldHVybiBTX09LOwotfQot
Ci1IUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6R2V0TnVtYmVyU3Vic3RpdHV0aW9uKFVJTlQz
MiB0ZXh0UG9zaXRpb24sIFVJTlQzMiogdGV4dExlbmd0aCwgSURXcml0ZU51bWJlclN1YnN0aXR1
dGlvbioqIG51bWJlclN1YnN0aXR1dGlvbikKLXsKLSAgICAqdGV4dExlbmd0aCA9IG1fYnVmZmVy
TGVuZ3RoIC0gdGV4dFBvc2l0aW9uOwotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFRl
eHRBbmFseXplckhlbHBlcjo6U2V0TGluZUJyZWFrcG9pbnRzKFVJTlQzMiB0ZXh0UG9zaXRpb24s
IFVJTlQzMiB0ZXh0TGVuZ3RoLCBjb25zdCBEV1JJVEVfTElORV9CUkVBS1BPSU5UKikKLXsKLSAg
ICByZXR1cm4gRV9OT1RJTVBMOwotfQotCi1IUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6U2V0
U2NyaXB0QW5hbHlzaXMoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIGNv
bnN0IERXUklURV9TQ1JJUFRfQU5BTFlTSVMqIGFuYWx5c2lzKQotewotICAgIEFuYWx5emVkUnVu
IGN1cnJlbnQgPSB7IHRleHRQb3NpdGlvbiwgdGV4dExlbmd0aCwgKmFuYWx5c2lzIH07Ci0gICAg
bV9hbmFseXplZFJ1bnMuYXBwZW5kKFdURk1vdmUoY3VycmVudCkpOwotCi0gICAgcmV0dXJuIFNf
T0s7Ci19Ci0KLUhSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpTZXRCaWRpTGV2ZWwoVUlOVDMy
IHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIFVJTlQ4IGV4cGxpY2l0TGV2ZWwsIFVJ
TlQ4IHJlc29sdmVkTGV2ZWwpCi17Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQotSFJFU1VM
VCBUZXh0QW5hbHl6ZXJIZWxwZXI6OlNldE51bWJlclN1YnN0aXR1dGlvbihVSU5UMzIgdGV4dFBv
c2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgSURXcml0ZU51bWJlclN1YnN0aXR1dGlvbiopCi17
Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVy
SGVscGVyLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDY3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSA8ZHdyaXRlLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBBbmFseXplZFJ1biB7Ci0gICAgdW5z
aWduZWQgc3RhcnRQb3NpdGlvbiB7IDAgfTsKLSAgICB1bnNpZ25lZCBsZW5ndGggeyAwIH07Ci0g
ICAgRFdSSVRFX1NDUklQVF9BTkFMWVNJUyBhbmFseXNpczsKLX07Ci0KLXN0cnVjdCBUZXh0QW5h
bHl6ZXJIZWxwZXIgOiBwdWJsaWMgSURXcml0ZVRleHRBbmFseXNpc1NpbmssIElEV3JpdGVUZXh0
QW5hbHlzaXNTb3VyY2UgewotICAgIFRleHRBbmFseXplckhlbHBlcihjb25zdCBXQ0hBUiogbG9j
YWxlTmFtZSwgY29uc3QgV0NIQVIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKTsKLQot
ICAgIC8vIElVbmtub3duCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1
ZXJ5SW50ZXJmYWNlKF9Jbl8gUkVGSUlELCBfQ09NX091dHB0cl8gdm9pZCoqKTsKLSAgICB2aXJ0
dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJlZigpOwotICAgIHZpcnR1YWwgVUxPTkcg
U1RETUVUSE9EQ0FMTFRZUEUgUmVsZWFzZSgpOwotCi0gICAgLy8gSURXcml0ZVRleHRBbmFseXNp
c1NvdXJjZSAKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0VGV4dEF0
UG9zaXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgY29uc3QgV0NIQVIqKiB0ZXh0U3RyaW5nLCBV
SU5UMzIqIHRleHRMZW5ndGgpOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBHZXRUZXh0QmVmb3JlUG9zaXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgY29uc3QgV0NIQVIq
KiB0ZXh0U3RyaW5nLCBVSU5UMzIqIHRleHRMZW5ndGgpOwotICAgIHZpcnR1YWwgRFdSSVRFX1JF
QURJTkdfRElSRUNUSU9OIFNURE1FVEhPRENBTExUWVBFIEdldFBhcmFncmFwaFJlYWRpbmdEaXJl
Y3Rpb24oKSB7IHJldHVybiBEV1JJVEVfUkVBRElOR19ESVJFQ1RJT05fTEVGVF9UT19SSUdIVDsg
fQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRMb2NhbGVOYW1lKFVJ
TlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiogdGV4dExlbmd0aCwgY29uc3QgV0NIQVIqKiBsb2Nh
bGVOYW1lKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0TnVtYmVy
U3Vic3RpdHV0aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiogdGV4dExlbmd0aCwgSURX
cml0ZU51bWJlclN1YnN0aXR1dGlvbioqKTsKLQotICAgIC8vIElEV3JpdGVUZXh0QW5hbHlzaXNT
aW5rCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldExpbmVCcmVha3Bv
aW50cyhVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgY29uc3QgRFdSSVRF
X0xJTkVfQlJFQUtQT0lOVCopOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBTZXRTY3JpcHRBbmFseXNpcyhVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0
aCwgY29uc3QgRFdSSVRFX1NDUklQVF9BTkFMWVNJUyopOwotICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBTZXRCaWRpTGV2ZWwoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMy
IHRleHRMZW5ndGgsIFVJTlQ4IGV4cGxpY2l0TGV2ZWwsIFVJTlQ4IHJlc29sdmVkTGV2ZWwpOwot
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXROdW1iZXJTdWJzdGl0dXRp
b24oVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIElEV3JpdGVOdW1iZXJT
dWJzdGl0dXRpb24qKTsKLQotICAgIGNvbnN0IFdDSEFSKiBtX2xvY2FsZU5hbWUgeyBudWxscHRy
IH07Ci0gICAgY29uc3QgV0NIQVIqIG1fYnVmZmVyIHsgbnVsbHB0ciB9OwotICAgIHVuc2lnbmVk
IG1fYnVmZmVyTGVuZ3RoIHsgMCB9OwotICAgIFZlY3RvcjxBbmFseXplZFJ1bj4gbV9hbmFseXpl
ZFJ1bnM7Ci0gICAgVUxPTkcgbV9yZWZDb3VudCB7IDAgfTsKLX07Ci0KLX0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeERpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJp
eERpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDUtMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCi0KLSNpZiBQTEFURk9STShX
SU4pCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdENvbnZl
cnNpb24uaCIKLQotI2luY2x1ZGUgPGQyZDEuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1U
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6VHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3QgRDJEMV9NQVRS
SVhfM1gyX0YmIHQpCi17Ci0gICAgc2V0QSh0Ll8xMSk7Ci0gICAgc2V0Qih0Ll8xMik7Ci0gICAg
c2V0Qyh0Ll8yMSk7Ci0gICAgc2V0RCh0Ll8yMik7Ci0gICAgc2V0RSh0Ll8zMSk7Ci0gICAgc2V0
Rih0Ll8zMik7Ci19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvciBEMkQxX01BVFJJ
WF8zWDJfRigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEQyRDE6Ok1hdHJpeDN4MkYobmFycm93UHJl
Y2lzaW9uVG9GbG9hdChhKCkpLAotICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGIoKSks
Ci0gICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoYygpKSwKLSAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdChkKCkpLAotICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGUoKSks
Ci0gICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZigpKSk7Ci19Ci0KLUFmZmluZVRyYW5z
Zm9ybTo6QWZmaW5lVHJhbnNmb3JtKGNvbnN0IEQyRDFfTUFUUklYXzNYMl9GJiB0KQotewotICAg
IHNldE1hdHJpeCh0Ll8xMSwgdC5fMTIsIHQuXzIxLCB0Ll8yMiwgdC5fMzEsIHQuXzMyKTsKLX0K
LQotQWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciBEMkQxX01BVFJJWF8zWDJfRigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIEQyRDE6Ok1hdHJpeDN4MkYobmFycm93UHJlY2lzaW9uVG9GbG9hdChhKCkp
LAotICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGIoKSksCi0gICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoYygpKSwKLSAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChkKCkp
LAotICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGUoKSksCi0gICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoZigpKSk7Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VEaXJlY3QyRC5jcHAJKHJldmlzaW9u
IDI4NzgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VEaXJlY3Qy
RC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkRyYWdJbWFnZS5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQml0bWFw
SW5mby5oIgotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiSFduZERDLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgi
Ci0KLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXZvaWQgZGVhbGxvY0NvbnRleHQoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQqIHBsYXRmb3JtQ29udGV4dCkKLXsKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KSB7Ci0gICAg
ICAgIGlmIChhdXRvKiByZW5kZXJUYXJnZXQgPSBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdl
dCgpKQotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgfQotfQotCi1H
RElPYmplY3Q8SEJJVE1BUD4gYWxsb2NJbWFnZShIREMgZGMsIEludFNpemUgc2l6ZSwgUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQqKiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgQml0bWFwSW5mbyBi
bXBJbmZvID0gQml0bWFwSW5mbzo6Y3JlYXRlKHNpemUpOwotCi0gICAgTFBWT0lEIGJpdHMgPSBu
dWxscHRyOwotICAgIGF1dG8gaGJtcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlv
bihkYywgJmJtcEluZm8sIERJQl9SR0JfQ09MT1JTLCAmYml0cywgMCwgMCkpOwotCi0gICAgaWYg
KCFwbGF0Zm9ybUNvbnRleHQgfHwgIWhibXApCi0gICAgICAgIHJldHVybiBoYm1wOwotCi0gICAg
Ly8gRklYTUU6IFVzZSBHREkgSW50ZXJvcCBsYXllciB0byBjcmVhdGUgSEJJVE1BUCBmcm9tIEQy
RCBCaXRtYXAKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBoYm1wOwotfQotCi1E
cmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlUmVmLCBGbG9hdFNp
emUgc2NhbGUpCi17Ci0gICAgLy8gRklYTUU6IGR1ZSB0byB0aGUgd2F5IGRyYWcgaW1hZ2VzIGFy
ZSBkb25lIG9uIHdpbmRvd3Mgd2UgbmVlZCAKLSAgICAvLyB0byBwcmVwcm9jZXNzIHRoZSBhbHBo
YSBjaGFubmVsIDxyZGFyOi8vcHJvYmxlbS81MDE1OTQ2PgotICAgIGlmICghaW1hZ2VSZWYpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgR0RJT2JqZWN0PEhCSVRNQVA+IGhibXA7Ci0g
ICAgYXV0byBpbWFnZSA9IGFkb3B0R0RJT2JqZWN0KGltYWdlUmVmKTsKLQotICAgIEludFNpemUg
c3JjU2l6ZSA9IGRyYWdJbWFnZVNpemUoaW1hZ2UuZ2V0KCkpOwotICAgIEludFNpemUgZHN0U2l6
ZShzdGF0aWNfY2FzdDxpbnQ+KHNyY1NpemUud2lkdGgoKSAqIHNjYWxlLndpZHRoKCkpLCBzdGF0
aWNfY2FzdDxpbnQ+KHNyY1NpemUuaGVpZ2h0KCkgKiBzY2FsZS5oZWlnaHQoKSkpOwotCi0gICAg
SFduZERDIGRjKG51bGxwdHIpOwotICAgIGF1dG8gZHN0REMgPSBhZG9wdEdESU9iamVjdCg6OkNy
ZWF0ZUNvbXBhdGlibGVEQyhkYykpOwotICAgIGlmIChkc3REQykKLSAgICAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKLQotICAgIGlmICghaGJtcCkKLSAgICAgICAgaGJtcC5zd2FwKGltYWdlKTsKLSAg
ICByZXR1cm4gaGJtcC5sZWFrKCk7Ci19Ci0KLURyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VG
cm9tSW1hZ2UoSW1hZ2UqIGltZywgSW1hZ2VPcmllbnRhdGlvbikKLXsKLSAgICBIV25kREMgZGMo
bnVsbHB0cik7Ci0gICAgYXV0byB3b3JraW5nREMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNv
bXBhdGlibGVEQyhkYykpOwotICAgIGlmICghd29ya2luZ0RDKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0g
ICAgCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjI3LDcgKzMyMjcsNyBAQCBHcmFwaGlj
c0NvbnRleHQqIFJlbmRlckxheWVyOjpzZXR1cEZpbHRlCiAKICAgICBhdXRvIHJvb3RSZWxhdGl2
ZUJvdW5kcyA9IGNhbGN1bGF0ZUxheWVyQm91bmRzKHBhaW50aW5nSW5mby5yb290TGF5ZXIsIG9m
ZnNldEZyb21Sb290LCB7IH0pOwogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0
ID0gcGFpbnRpbmdGaWx0ZXJzLT5iZWdpbkZpbHRlckVmZmVjdChkZXN0aW5hdGlvbkNvbnRleHQs
IHJlbmRlcmVyKCksIGVuY2xvc2luZ0ludFJlY3Qocm9vdFJlbGF0aXZlQm91bmRzKSwgZW5jbG9z
aW5nSW50UmVjdChwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QpLCBlbmNsb3NpbmdJbnRSZWN0
KGZpbHRlclJlcGFpbnRSZWN0KSk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0
ID0gcGFpbnRpbmdGaWx0ZXJzLT5iZWdpbkZpbHRlckVmZmVjdChyZW5kZXJlcigpLCBlbmNsb3Np
bmdJbnRSZWN0KHJvb3RSZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3QocGFpbnRpbmdJ
bmZvLnBhaW50RGlydHlSZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBhaW50UmVjdCkp
OwogICAgIGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3Bw
CShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJGaWx0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDI0ICsxMjksMTkgQEAgR3JhcGhp
Y3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmlucAogICAgIHJldHVybiBtX3NvdXJjZUlt
YWdlID8gJm1fc291cmNlSW1hZ2UtPmNvbnRleHQoKSA6IG51bGxwdHI7CiB9CiAKLXZvaWQgUmVu
ZGVyTGF5ZXJGaWx0ZXJzOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgdGFyZ2V0Q29udGV4dCkKK3ZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphbGxv
Y2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCkKIHsKICAgICBhdXRvJiBmaWx0ZXIgPSAqbV9maWx0
ZXI7CiAgICAgYXV0byBsb2dpY2FsU2l6ZSA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKG1f
ZmlsdGVyUmVnaW9uLnNpemUoKSk7CiAKICAgICBpZiAoIW1fc291cmNlSW1hZ2UgfHwgbV9zb3Vy
Y2VJbWFnZS0+bG9naWNhbFNpemUoKSAhPSBsb2dpY2FsU2l6ZSkgewotI2lmIFVTRShESVJFQ1Qy
RCkKLSAgICAgICAgbV9zb3VyY2VJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNp
emUsIGZpbHRlci5yZW5kZXJpbmdNb2RlKCksICZ0YXJnZXRDb250ZXh0LCAxLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSNlbHNlCi0gICAgICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXRDb250ZXh0KTsKICAgICAgICAgbV9zb3VyY2VJbWFnZSA9IElt
YWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIGZpbHRlci5yZW5kZXJpbmdNb2RlKCksIFNo
b3VsZFVzZURpc3BsYXlMaXN0OjpObywgUmVuZGVyaW5nUHVycG9zZTo6RE9NLCAxLCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBtX2xheWVyLnJlbmRl
cmVyKCkuaG9zdFdpbmRvdygpKTsKLSNlbmRpZgogICAgICAgICBpZiAoYXV0byBjb250ZXh0ID0g
aW5wdXRDb250ZXh0KCkpCiAgICAgICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXIuZmlsdGVy
U2NhbGUoKSk7CiAgICAgfQogfQogCi1HcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVy
czo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQs
IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0
LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVw
YWludFJlY3QpCitHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0
ZXJFZmZlY3QoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IExheW91dFJlY3QmIGZpbHRl
ckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYg
bGF5ZXJSZXBhaW50UmVjdCkKIHsKICAgICBpZiAoIW1fZmlsdGVyKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTIwMCw3ICsxOTUsNyBAQCBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVy
RmlsdGVyczo6YmVnCiAgICAgcmVzZXREaXJ0eVNvdXJjZVJlY3QoKTsKIAogICAgIGZpbHRlci5z
ZXRGaWx0ZXJSZWdpb24obV9maWx0ZXJSZWdpb24pOwotICAgIGFsbG9jYXRlQmFja2luZ1N0b3Jl
SWZOZWVkZWQoZGVzdGluYXRpb25Db250ZXh0KTsKKyAgICBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlm
TmVlZGVkKCk7CiAKICAgICBhdXRvKiBzb3VyY2VHcmFwaGljc0NvbnRleHQgPSBpbnB1dENvbnRl
eHQoKTsKICAgICBpZiAoIXNvdXJjZUdyYXBoaWNzQ29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgJKHJldmlzaW9uIDI4NzgxMikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMsMTQgKzYzLDE0IEBAIHB1YmxpYzoKICAgICAvLyBQZXIgcmVuZGVyCiAg
ICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludFJlY3Q7
IH0KIAotICAgIEdyYXBoaWNzQ29udGV4dCogYmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250
ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlvdXRSZWN0
JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91
dFJlY3QmIGxheWVyUmVwYWludFJlY3QpOworICAgIEdyYXBoaWNzQ29udGV4dCogYmVnaW5GaWx0
ZXJFZmZlY3QoUmVuZGVyRWxlbWVudCYsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3Qs
IGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBh
aW50UmVjdCk7CiAgICAgdm9pZCBhcHBseUZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRl
c3RpbmF0aW9uQ29udGV4dCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBub3RpZnlGaW5pc2hlZChD
YWNoZWRSZXNvdXJjZSYsIGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyYpIGZpbmFsOwogICAgIHZv
aWQgcmVzZXREaXJ0eVNvdXJjZVJlY3QoKSB7IG1fZGlydHlTb3VyY2VSZWN0ID0gTGF5b3V0UmVj
dCgpOyB9CiAgICAgR3JhcGhpY3NDb250ZXh0KiBpbnB1dENvbnRleHQoKTsKLSAgICB2b2lkIGFs
bG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRD
b250ZXh0KTsKKyAgICB2b2lkIGFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoKTsKIAogICAg
IFJlbmRlckxheWVyJiBtX2xheWVyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCShyZXZpc2lv
biAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3ICsxNTQsNyBAQCBib29sIFJl
bmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwCiAgICAgQWZmaW5lVHJhbnNmb3JtIGFi
c29sdXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3Jt
YXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIpOwogICAgIGlmICghY2xp
cHBlckRhdGEuaXNWYWxpZEZvckdlb21ldHJ5KG9iamVjdEJvdW5kaW5nQm94LCBjbGlwcGVkQ29u
dGVudEJvdW5kcywgYWJzb2x1dGVUcmFuc2Zvcm0pKSB7CiAgICAgICAgIC8vIEZJWE1FICgxNDk0
NjkpOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFj
Y2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIG5lc3RlZCBjbGlw
cGluZywgdGhvdWdoLgotICAgICAgICBhdXRvIG1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNsaXBwZWRDb250ZW50Qm91bmRzLCBhYnNvbHV0ZVRyYW5z
Zm9ybSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQsIG51bGxwdHIsICZjb250ZXh0KTsKKyAgICAgICAgYXV0byBtYXNrSW1hZ2UgPSBT
VkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjbGlwcGVkQ29udGVudEJvdW5k
cywgYWJzb2x1dGVUcmFuc2Zvcm0sIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBudWxscHRyKTsKICAgICAgICAgaWYgKCFtYXNrSW1h
Z2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCShy
ZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3IEBAIGJv
b2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3UKICNlbHNlCiAgICAgYXV0byBj
b2xvclNwYWNlID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCk7CiAjZW5kaWYKLSAgICBh
dXRvIHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZl
cihmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIGNvbG9yU3Bh
Y2UsIGZpbHRlckRhdGEtPmZpbHRlci0+cmVuZGVyaW5nTW9kZSgpLCByZW5kZXJlci5ob3N0V2lu
ZG93KCksIGNvbnRleHQpOworICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVj
dGl2ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgZmlsdGVyRGF0YS0+ZmlsdGVyLT5yZW5kZXJpbmdN
b2RlKCksIHJlbmRlcmVyLmhvc3RXaW5kb3coKSk7CiAgICAgaWYgKCFzb3VyY2VHcmFwaGljKSB7
CiAgICAgICAgIEFTU0VSVChtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVy
ZXIpKTsKICAgICAgICAgZmlsdGVyRGF0YS0+c2F2ZWRDb250ZXh0ID0gY29udGV4dDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXIuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODQsNyArODQsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291CiAj
ZW5kaWYKIAogICAgICAgICAvLyBGSVhNRSAoMTQ5NDcwKTogVGhpcyBpbWFnZSBidWZmZXIgc2hv
dWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNo
IHRoZSBjb250ZXh0IGJyZWFrcyBhbHBoYSBtYXNraW5nLCB0aG91Z2guCi0gICAgICAgIG1hc2tl
ckRhdGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVy
KHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgbWFza0NvbG9yU3BhY2UsIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQsIG51bGxwdHIsIGNvbnRleHQpOworICAgICAgICBtYXNrZXJE
YXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihy
ZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIG1hc2tDb2xvclNwYWNlLCBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkLCBudWxscHRyKTsKICAgICAgICAgaWYgKCFtYXNrZXJEYXRhLT5t
YXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2
aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJp
bmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDcgKzIyNiw3IEBAIEFmZmluZVRy
YW5zZm9ybSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWwKICAgICByZXR1cm4gYWJzb2x1dGVUcmFu
c2Zvcm07CiB9CiAKLVJlZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3Jl
YXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
IGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRv
dyogaG9zdFdpbmRvdywgY29uc3QgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQorUmVmUHRyPElt
YWdlQnVmZmVyPiBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBG
bG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFu
c2Zvcm0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQogewogICAg
IEludFJlY3QgcGFpbnRSZWN0ID0gY2FsY3VsYXRlSW1hZ2VCdWZmZXJSZWN0KHRhcmdldFJlY3Qs
IGFic29sdXRlVHJhbnNmb3JtKTsKICAgICAvLyBEb24ndCBjcmVhdGUgZW1wdHkgSW1hZ2VCdWZm
ZXJzLgpAQCAtMjM4LDEyICsyMzgsNyBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmlu
Z0NvbnRleHQ6CiAgICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhjbGFtcGVk
U2l6ZSwgc2NhbGUpKQogICAgICAgICBjbGFtcGVkU2l6ZSA9IGNsYW1wZWRTaXplICogc2NhbGU7
CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQsIDEsIGNvbG9yU3Bh
Y2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0
KTsKICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6
ZSwgcmVuZGVyaW5nTW9kZSwgU2hvdWxkVXNlRGlzcGxheUxpc3Q6Ok5vLCBSZW5kZXJpbmdQdXJw
b3NlOjpET00sIDEsIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCwgaG9zdFdpbmRvdyk7
Ci0jZW5kaWYKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IApAQCAtMjU2LDcgKzI1MSw3IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29u
dGV4dDoKICAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9CiAKLVJlZlB0cjxJbWFnZUJ1ZmZlcj4g
U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0
YXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRSZWN0LCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29u
c3QgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQorUmVmUHRyPEltYWdlQnVmZmVyPiBTVkdSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZFJlY3QsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewogICAgIElu
dFNpemUgY2xhbXBlZFNpemUgPSByb3VuZGVkSW50U2l6ZShjbGFtcGVkUmVjdC5zaXplKCkpOwog
ICAgIEZsb2F0U2l6ZSB1bmNsYW1wZWRTaXplID0gcm91bmRlZEludFNpemUodGFyZ2V0UmVjdC5z
aXplKCkpOwpAQCAtMjY1LDEyICsyNjAsNyBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRl
cmluZ0NvbnRleHQ6CiAgICAgaWYgKGNsYW1wZWRTaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQs
IDEsIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShjb250ZXh0KTsKICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShjbGFtcGVkU2l6ZSwgcmVuZGVyaW5nTW9kZSwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6
OkJHUkE4KTsKLSNlbmRpZgogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmlu
Z0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYw
LDggKzYwLDggQEAgcHVibGljOgogICAgIHZvaWQgcHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudChS
ZW5kZXJFbGVtZW50JiwgUGFpbnRJbmZvJiwgTmVlZHNHcmFwaGljc0NvbnRleHRTYXZlID0gRG9u
dFNhdmVHcmFwaGljc0NvbnRleHQpOwogICAgIGJvb2wgaXNSZW5kZXJpbmdQcmVwYXJlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nRmxhZ3MgJiBSZW5kZXJpbmdQcmVwYXJlZDsgfQogCi0g
ICAgc3RhdGljIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNm
b3JtLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBI
b3N0V2luZG93KiA9IG51bGxwdHIsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKTsK
LSAgICBzdGF0aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBG
bG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZFJlY3QsIGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCogPSBudWxscHRyKTsKKyAgICBzdGF0aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFJl
bmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7CisgICAgc3RhdGljIFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJn
ZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRSZWN0LCBjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmLCBSZW5kZXJpbmdNb2RlKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlbmRlclN1YnRy
ZWVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiwgUmVuZGVyRWxlbWVudCYsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpOwogICAgIHN0YXRpYyB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgUmVmUHRyPEltYWdlQnVmZmVyPiYsIGJvb2wgc2FmZVRv
Q2xlYXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCShy
ZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxNSArNjYsNiBAQAogI2luY2x1ZGUgIkxvY2FsRGVm
YXVsdFN5c3RlbUFwcGVhcmFuY2UuaCIKICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotI2lu
Y2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUgPGQyZDEuaD4K
LSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR0ltYWdlOjpTVkdJbWFnZShJbWFn
ZU9ic2VydmVyJiBvYnNlcnZlcikKQEAgLTIxNywxMiArMjA4LDEyIEBAIEltYWdlRHJhd1Jlc3Vs
dCBTVkdJbWFnZTo6ZHJhd0ZvckNvbnRhaW4KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQ
dHI8TmF0aXZlSW1hZ2U+IFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25z
dCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCitSZWZQdHI8TmF0aXZlSW1hZ2U+IFNW
R0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCiB7Ci0gICAgcmV0dXJuIG5hdGl2
ZUltYWdlKHRhcmdldENvbnRleHQpOworICAgIHJldHVybiBuYXRpdmVJbWFnZSgpOwogfQogCi1S
ZWZQdHI8TmF0aXZlSW1hZ2U+IFNWR0ltYWdlOjpuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0Nv
bnRleHQqKQorUmVmUHRyPE5hdGl2ZUltYWdlPiBTVkdJbWFnZTo6bmF0aXZlSW1hZ2UoKQogewog
ICAgIHJldHVybiBuYXRpdmVJbWFnZShzaXplKCksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNp
emUoKSksIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtODYsOCAr
ODYsOCBAQCBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyB0byBiZSBsZXNz
IGNvbnNlcnZhdGl2ZS4KICAgICBib29sIGN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRy
KSBmaW5hbDsKLSAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCogPSBudWxscHRyKSBmaW5hbDsKKyAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgZmluYWw7CisgICAgUmVmUHRyPE5hdGl2ZUltYWdl
PiBuYXRpdmVJbWFnZSgpIGZpbmFsOwogICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1h
Z2UoY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlUmVj
dCwgRGVzdGluYXRpb25Db2xvclNwYWNlKTsKIAogICAgIHZvaWQgc3RhcnRBbmltYXRpb25UaW1l
ckZpcmVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JD
b250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZUZvckNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDkgKzU5LDkgQEAgdm9pZCBTVkdJbWFnZUZvckNvbnRhaW5lcjo6ZHJhd1BhdHRlcm4o
RwogICAgIG1faW1hZ2UtPmRyYXdQYXR0ZXJuRm9yQ29udGFpbmVyKGNvbnRleHQsIG1fY29udGFp
bmVyU2l6ZSwgbV9jb250YWluZXJab29tLCBtX2luaXRpYWxGcmFnbWVudFVSTCwgc3JjUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIGRzdFJlY3QsIG9wdGlvbnMpOwogfQog
Ci1SZWZQdHI8TmF0aXZlSW1hZ2U+IFNWR0ltYWdlRm9yQ29udGFpbmVyOjpuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCitSZWZQ
dHI8TmF0aXZlSW1hZ2U+IFNWR0ltYWdlRm9yQ29udGFpbmVyOjpuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpCiB7Ci0gICAgcmV0dXJuIG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKHRhcmdldENvbnRleHQpOworICAgIHJldHVybiBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuaAkocmV2
aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9y
Q29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyB0byBiZSBsZXNzIGNvbnNlcnZhdGl2ZS4KICAgICBi
b29sIGN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZh
bHNlOyB9CiAKLSAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKSBmaW5hbDsKKyAgICBSZWZQdHI8
TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgZmluYWw7CiAKIHByaXZh
dGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgU1ZHSW1hZ2VGb3JDb250YWluZXIoU1ZHSW1hZ2UqLCBj
b25zdCBGbG9hdFNpemUmIGNvbnRhaW5lclNpemUsIGZsb2F0IGNvbnRhaW5lclpvb20sIGNvbnN0
IFVSTCYgaW5pdGlhbEZyYWdtZW50VVJMKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc4MTIp
CisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUy
IEBACisyMDIyLTAxLTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZW1vdmUgc3VwcG9ydCBmb3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIERpcmVjdDJEIGFuZCBGVFcgaGF2ZSBub3QgYmVlbiBidWls
ZGluZyBmb3Igb3ZlciBhIHllYXIuIEl0IGlzCisgICAgICAgIHRpbWUgdG8gcmVtb3ZlIHRoZW0u
CisKKyAgICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFrZTogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFy
ZWQvU2hhcmVhYmxlQml0bWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFw
OjpDb25maWd1cmF0aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFi
bGVCaXRtYXA6OkNvbmZpZ3VyYXRpb246OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJl
YWJsZUJpdG1hcDo6U2hhcmVhYmxlQml0bWFwKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxl
Qml0bWFwOjp+U2hhcmVhYmxlQml0bWFwKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0
bWFwOjpudW1CeXRlc0ZvclNpemUpOgorICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAu
aDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpjcmVhdGVQbGF0Zm9ybUltYWdl
KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpkeFN1cmZhY2UpOiBEZWxldGVk
LgorICAgICAgICAqIFNoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9yZURpcmVjdDJELmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGV2aWNlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXREZXZpY2UpOiBEZWxldGVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2hvd1BvcHVwTWVudSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBv
cHVwTWVudVByb3h5V2luOjpzZXR1cFN3YXBDaGFpbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpjb25maWd1cmVCYWNraW5nU3RvcmUpOiBEZWxldGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
OjpXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6b25TaXplRXZlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzZXR1cFN3YXBDaGFpbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXc6OmNvbmZpZ3VyZUJhY2tpbmdTdG9yZSk6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL3dpbi9XZWJWaWV3Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OmQzZERldmljZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmQz
ZEltbWVkaWF0ZUNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViUG9wdXBNZW51LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUG9w
dXBNZW51OjpzaG93KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpEcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3M6OmRpc3BsYXkpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkZpbmRDb250cm9sbGVyOjpnZXRJbWFnZUZvckZpbmRNYXRjaCk6CisKIDIwMjItMDEtMDggIFR5
bGVyIFdpbGNvY2sgIDx0eWxlcl93QGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogQWNjZXNzaWJp
bGl0eU9iamVjdDo6c2V0Rm9jdXNlZCh0cnVlKSBzaG91bGQgbWFrZSB0aGUgd2VicGFnZSBmb2N1
c2VkLCBhbmQgbWFrZSB3ZWIgY29udGVudCB0aGUgZmlyc3QgcmVzcG9uZGVyCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
UGxhdGZvcm1GVFcuY21ha2UJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm1GVFcuY21ha2UJKG5vbmV4aXN0ZW50KQpAQCAtMSwxOTUgKzAsMCBAQAotc2V0KFdlYktp
dF9PVVRQVVRfTkFNRSBXZWJLaXQyKQotc2V0KFdlYlByb2Nlc3NfT1VUUFVUX05BTUUgV2ViS2l0
V2ViUHJvY2VzcykKLXNldChOZXR3b3JrUHJvY2Vzc19PVVRQVVRfTkFNRSBXZWJLaXROZXR3b3Jr
UHJvY2VzcykKLXNldChQbHVnaW5Qcm9jZXNzX09VVFBVVF9OQU1FIFdlYktpdFBsdWdpblByb2Nl
c3MpCi1zZXQoR1BVUHJvY2Vzc19PVVRQVVRfTkFNRSBXZWJLaXRHUFVQcm9jZXNzKQotCi1pbmNs
dWRlKEhlYWRlcnMuY21ha2UpCi0KLWFkZF9kZWZpbml0aW9ucygtREJVSUxESU5HX1dFQktJVCkK
LQotbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKLSAgICBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKLQotICAgIE5ldHdvcmtQcm9j
ZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCi0KLSAgICBOZXR3b3JrUHJvY2Vzcy9j
dXJsL05ldHdvcmtQcm9jZXNzTWFpbkN1cmwuY3BwCi0KLSAgICBQbGF0Zm9ybS9JUEMvd2luL0F0
dGFjaG1lbnRXaW4uY3BwCi0gICAgUGxhdGZvcm0vSVBDL3dpbi9Db25uZWN0aW9uV2luLmNwcAot
Ci0gICAgUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmll
ci5jcHAKLQotICAgIFBsYXRmb3JtL3dpbi9Mb2dnaW5nV2luLmNwcAotICAgIFBsYXRmb3JtL3dp
bi9Nb2R1bGVXaW4uY3BwCi0gICAgUGxhdGZvcm0vd2luL1NoYXJlZE1lbW9yeVdpbi5jcHAKLQot
ICAgIFNoYXJlZC9BUEkvYy9jdXJsL1dLQ2VydGlmaWNhdGVJbmZvQ3VybC5jcHAKLQotICAgIFNo
YXJlZC9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luTW9kdWxlTm9uZS5jcHAKLQotICAg
IFNoYXJlZC93aW4vQXV4aWxpYXJ5UHJvY2Vzc01haW5XaW4uY3BwCi0gICAgU2hhcmVkL3dpbi9O
YXRpdmVXZWJLZXlib2FyZEV2ZW50V2luLmNwcAotICAgIFNoYXJlZC93aW4vTmF0aXZlV2ViTW91
c2VFdmVudFdpbi5jcHAKLSAgICBTaGFyZWQvd2luL05hdGl2ZVdlYlRvdWNoRXZlbnRXaW4uY3Bw
Ci0gICAgU2hhcmVkL3dpbi9OYXRpdmVXZWJXaGVlbEV2ZW50V2luLmNwcAotICAgIFNoYXJlZC93
aW4vV2ViRXZlbnRGYWN0b3J5LmNwcAotCi0gICAgVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5jcHAK
LSAgICBVSVByb2Nlc3MvRGVmYXVsdFVuZG9Db250cm9sbGVyLmNwcAotICAgIFVJUHJvY2Vzcy9M
ZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmdOb25lLmNwcAotICAgIFVJUHJvY2Vzcy9XZWJHcmFtbWFy
RGV0YWlsLmNwcAotICAgIFVJUHJvY2Vzcy9XZWJWaWV3cG9ydEF0dHJpYnV0ZXMuY3BwCi0KLSAg
ICBVSVByb2Nlc3MvQVBJL0MvV0tWaWV3cG9ydEF0dHJpYnV0ZXMuY3BwCi0KLSAgICBVSVByb2Nl
c3MvQVBJL0MvY3VybC9XS1Byb3RlY3Rpb25TcGFjZUN1cmwuY3BwCi0gICAgVUlQcm9jZXNzL0FQ
SS9DL2N1cmwvV0tXZWJzaXRlRGF0YVN0b3JlUmVmQ3VybC5jcHAKLQotICAgIFVJUHJvY2Vzcy9B
UEkvQy93aW4vV0tWaWV3LmNwcAotCi0gICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
RHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCi0KLSAgICBVSVByb2Nlc3Mv
SW5zcGVjdG9yL3dpbi9XZWJJbnNwZWN0b3JVSVByb3h5V2luLmNwcAotCi0gICAgVUlQcm9jZXNz
L0xhdW5jaGVyL3dpbi9Qcm9jZXNzTGF1bmNoZXJXaW4uY3BwCi0KLSAgICBVSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5jcHAKLQotICAgIFVJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS93aW4vV2Vic2l0ZURhdGFTdG9yZVdpbi5jcHAKLQotICAgIFVJUHJvY2Vzcy93
aW4vUGFnZUNsaWVudEltcGwuY3BwCi0gICAgVUlQcm9jZXNzL3dpbi9XZWJDb250ZXh0TWVudVBy
b3h5V2luLmNwcAotICAgIFVJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcAotICAgIFVJ
UHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCi0gICAgVUlQcm9jZXNzL3dpbi9X
ZWJQcm9jZXNzUG9vbFdpbi5jcHAKLSAgICBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCi0KLSAg
ICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL3dpbi9JbmplY3RlZEJ1bmRsZVdpbi5jcHAKLQot
ICAgIFdlYlByb2Nlc3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNwZWN0b3JVSVdpbi5jcHAKLQotICAg
IFdlYlByb2Nlc3MvTWVkaWFDYWNoZS9XZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyLmNwcAotCi0g
ICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2ViUG9wdXBNZW51V2luLmNwcAotCi0g
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkU3VyZmFjZS5jcHAKLQotICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3Iu
Y3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0Fy
ZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuY3BwCi0KLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
d2luL1dlYlBhZ2VXaW4uY3BwCi0KLSAgICBXZWJQcm9jZXNzL3dpbi9XZWJQcm9jZXNzTWFpbldp
bi5jcHAKLSAgICBXZWJQcm9jZXNzL3dpbi9XZWJQcm9jZXNzV2luLmNwcAotKQotCi1saXN0KEFQ
UEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICIke1dFQktJVF9ESVJ9L1BsYXRm
b3JtL2NsYXNzaWZpZXIiCi0gICAgIiR7V0VCS0lUX0RJUn0vUGx1Z2luUHJvY2Vzcy93aW4iCi0g
ICAgIiR7V0VCS0lUX0RJUn0vU2hhcmVkL0FQSS9jL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcyIKLSAgICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvQ29v
cmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IiCi0gICAgIiR7V0VCS0lUX0RJUn0v
U2hhcmVkL1BsdWdpbnMvd2luIgotICAgICIke1dFQktJVF9ESVJ9L1NoYXJlZC93aW4iCi0gICAg
IiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2NhaXJvIgotICAgICIke1dFQktJVF9ESVJ9
L1VJUHJvY2Vzcy9BUEkvQy9jdXJsIgotICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkv
Qy93aW4iCi0gICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9jcHAvd2luIgotICAgICIk
e1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvd2luIgotICAgICIke1dFQktJVF9ESVJ9L1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzIgotICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9J
bnNwZWN0b3Ivc29ja2V0IgotICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
d2luIgotICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9QbHVnaW5zL3dpbiIKLSAgICAiJHtX
RUJLSVRfRElSfS9VSVByb2Nlc3Mvd2luIgotICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS93aW4vRE9NIgotICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3Mv
SW5zcGVjdG9yL3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcyIKLSAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2luIgot
ICAgICIke1dFQktJVF9ESVJ9L3dpbiIKLSkKLQotbGlzdChBUFBFTkQgV2ViS2l0X1NZU1RFTV9J
TkNMVURFX0RJUkVDVE9SSUVTCi0pCi0KLXNldChXZWJLaXRDb21tb25JbmNsdWRlRGlyZWN0b3Jp
ZXMgJHtXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFU30pCi1zZXQoV2ViS2l0Q29tbW9uU3lzdGVt
SW5jbHVkZURpcmVjdG9yaWVzICR7V2ViS2l0X1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTfSkK
LQotbGlzdChBUFBFTkQgV2ViUHJvY2Vzc19TT1VSQ0VTCi0gICAgV2ViUHJvY2Vzcy9FbnRyeVBv
aW50L3dpbi9XZWJQcm9jZXNzTWFpbi5jcHAKLSkKLQotbGlzdChBUFBFTkQgTmV0d29ya1Byb2Nl
c3NfU09VUkNFUwotICAgIE5ldHdvcmtQcm9jZXNzL0VudHJ5UG9pbnQvd2luL05ldHdvcmtQcm9j
ZXNzTWFpbi5jcHAKLSkKLQotbGlzdChBUFBFTkQgR1BVUHJvY2Vzc19TT1VSQ0VTCi0gICAgR1BV
UHJvY2Vzcy9FbnRyeVBvaW50L3dpbi9HUFVQcm9jZXNzTWFpbi5jcHAKLSkKLQotYWRkX2RlZmlu
aXRpb25zKC1EVVNFX0RJUkVDVDJEPTEgLURVU0VfQ1VSTD0xKQotCi1saXN0KEFQUEVORCBXZWJL
aXRfU09VUkNFUwotICAgIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvY3VybC9XZWJDb29raWVNYW5h
Z2VyQ3VybC5jcHAKLQotICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFD
dXJsLmNwcAotICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbEN1
cmwuY3BwCi0KLSAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtEYXRhVGFza0N1cmwuY3Bw
Ci0gICAgTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCi0gICAgTmV0
d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrU2Vzc2lvbkN1cmwuY3BwCi0gICAgTmV0d29ya1Byb2Nl
c3MvY3VybC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dEN1cmwuY3BwCi0KLSAgICBTaGFyZWQvY3Vy
bC9XZWJDb3JlQXJndW1lbnRDb2RlcnNDdXJsLmNwcAotCi0gICAgU2hhcmVkL3dpbi9TaGFyZWFi
bGVCaXRtYXBEaXJlY3QyRC5jcHAKLQotICAgIFVJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGly
ZWN0MkQuY3BwCi0KLSAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2N1cmwvV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dC5jcHAKLSkKLQotbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElS
RUNUT1JJRVMKLSAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJvY2Vzcy9jdXJsIgotICAgICIk
e1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvY3VybCIKLSkKLQotbGlzdChB
UFBFTkQgV2ViS2l0X1BSSVZBVEVfTElCUkFSSUVTCi0gICAgT3BlblNTTDo6U1NMCi0gICAgRDJk
MS5saWIKLSAgICBEM2QxMS5saWIKLSAgICBEd3JpdGUKLSAgICBEeGdpLmxpYgotICAgIER4Z3Vp
ZAotICAgIFdpbmRvd3NDb2RlY3MKLSAgICBtZnV1aWQubGliCi0gICAgc3RybWlpZHMubGliCi0p
Ci0KLWlmIChFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUikKLSAgICBsaXN0KEFQUEVORCBXZWJLaXRf
U09VUkNFUwotICAgICAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0
b3JDbGllbnQuY3BwCi0gICAgICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUlu
c3BlY3RvclByb3RvY29sSGFuZGxlci5jcHAKLQotICAgICAgICBVSVByb2Nlc3MvSW5zcGVjdG9y
L3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5V2luLmNwcAotICAgICkKLQotICAgIGxpc3Qo
QVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgICAgICIke1dFQktJVF9ESVJ9
L1VJUHJvY2Vzcy9zb2NrZXQiCi0gICAgKQotZW5kaWYgKCkKLQotIyBXaW5kb3dzIHNwZWNpZmlj
Ci1saXN0KEFQUEVORCBXZWJLaXRfUFVCTElDX0ZSQU1FV09SS19IRUFERVJTCi0gICAgU2hhcmVk
L0FQSS9jL2N1cmwvV0tDZXJ0aWZpY2F0ZUluZm9DdXJsLmgKLQotICAgIFNoYXJlZC9BUEkvYy93
aW4vV0tCYXNlV2luLmgKLQotICAgIFVJUHJvY2Vzcy9BUEkvQy9jdXJsL1dLUHJvdGVjdGlvblNw
YWNlQ3VybC5oCi0gICAgVUlQcm9jZXNzL0FQSS9DL2N1cmwvV0tXZWJzaXRlRGF0YVN0b3JlUmVm
Q3VybC5oCi0KLSAgICBVSVByb2Nlc3MvQVBJL0Mvd2luL1dLVmlldy5oCi0pCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysr
IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc1LDE0ICs3NSw2IEBAIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGU6OmNsZWFyKCkK
IHZvaWQgU2hhcmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9uOjplbmNvZGUoSVBDOjpFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgY29sb3JTcGFjZSA8PCBpc09wYXF1
ZTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZUhh
bmRsZShlbmNvZGVyLCBzaGFyZWRSZXNvdXJjZUhhbmRsZSk7Ci0KLSAgICAvLyBIYW5kIG9mZiBv
d25lcnNoaXAgb2Ygb3VyIEhBTkRMRSB0byB0aGUgcmVjZWl2aW5nIHByb2Nlc3MuIEl0IHdpbGwg
Y2xvc2UgaXQgZm9yIHVzLgotICAgIC8vIEZJWE1FOiBJZiB0aGUgcmVjZWl2aW5nIHByb2Nlc3Mg
Y3Jhc2hlcyBiZWZvcmUgaXQgcmVjZWl2ZXMgdGhlIG1lbW9yeSwgdGhlIG1lbW9yeSB3aWxsIGJl
Ci0gICAgLy8gbGVha2VkLiBTZWUgPGh0dHA6Ly93ZWJraXQub3JnL2IvNDc1MDI+LgotICAgIHNo
YXJlZFJlc291cmNlSGFuZGxlID0gbnVsbHB0cjsKLSNlbmRpZgogfQogCiBib29sIFNoYXJlYWJs
ZUJpdG1hcDo6Q29uZmlndXJhdGlvbjo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgQ29u
ZmlndXJhdGlvbiYgcmVzdWx0KQpAQCAtOTgsMTUgKzkwLDYgQEAgYm9vbCBTaGFyZWFibGVCaXRt
YXA6OkNvbmZpZ3VyYXRpb246OmRlYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXN1
bHQgPSBDb25maWd1cmF0aW9uIHsgV1RGTW92ZSgqY29sb3JTcGFjZSksICppc09wYXF1ZSB9Owot
Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIGF1dG8gcHJvY2Vzc1NwZWNpZmljSGFuZGxlID0gU2hh
cmVkTWVtb3J5OjpIYW5kbGU6OmRlY29kZUhhbmRsZShkZWNvZGVyKTsKLSAgICBpZiAoIXByb2Nl
c3NTcGVjaWZpY0hhbmRsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVzdWx0LnNo
YXJlZFJlc291cmNlSGFuZGxlID0gcHJvY2Vzc1NwZWNpZmljSGFuZGxlLnZhbHVlKCk7Ci0jZW5k
aWYKLQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xODcsMTggKzE3MCwxMiBAQCBTaGFyZWFi
bGVCaXRtYXA6OlNoYXJlYWJsZUJpdG1hcChjb25zdCBJCiAgICAgLCBtX3NoYXJlZE1lbW9yeShz
aGFyZWRNZW1vcnkpCiAgICAgLCBtX2RhdGEobnVsbHB0cikKIHsKLSNpZiBVU0UoRElSRUNUMkQp
Ci0gICAgY3JlYXRlU2hhcmVkUmVzb3VyY2UoKTsKLSNlbmRpZgogfQogCiBTaGFyZWFibGVCaXRt
YXA6On5TaGFyZWFibGVCaXRtYXAoKQogewogICAgIGlmICghaXNCYWNrZWRCeVNoYXJlZE1lbW9y
eSgpKQogICAgICAgICBTaGFyZWFibGVCaXRtYXBNYWxsb2M6OmZyZWUobV9kYXRhKTsKLSNpZiBV
U0UoRElSRUNUMkQpCi0gICAgZGlzcG9zZVNoYXJlZFJlc291cmNlKCk7Ci0jZW5kaWYKIH0KIAog
dm9pZCogU2hhcmVhYmxlQml0bWFwOjpkYXRhKCkgY29uc3QKQEAgLTIxMiwxMiArMTg5LDcgQEAg
dm9pZCogU2hhcmVhYmxlQml0bWFwOjpkYXRhKCkgY29uc3QKIAogQ2hlY2tlZFVpbnQzMiBTaGFy
ZWFibGVCaXRtYXA6Om51bUJ5dGVzRm9yU2l6ZShXZWJDb3JlOjpJbnRTaXplIHNpemUsIGNvbnN0
IFNoYXJlYWJsZUJpdG1hcDo6Q29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKIHsKLSNpZiBV
U0UoRElSRUNUMkQpCi0gICAgLy8gV2UgcGFzcyByZWZlcmVuY2VzIHRvIEdQVSB0ZXh0dXJlcywg
c28gbm8gbmVlZCB0byBhbGxvY2F0ZSBmcmFtZSBidWZmZXJzIGhlcmUuIEp1c3Qgc2VuZCBhIHNt
YWxsIGJpdCBvZiBkYXRhLgotICAgIHJldHVybiBzaXplb2Yodm9pZCopOwotI2Vsc2UKICAgICBy
ZXR1cm4gY2FsY3VsYXRlQnl0ZXNQZXJSb3coc2l6ZSwgY29uZmlndXJhdGlvbikgKiBzaXplLmhl
aWdodCgpOwotI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNl
L1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwx
NiArMzIsNiBAQAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFk
U2FmZVJlZkNvdW50ZWQuaD4KIAotI2lmIFVTRShESVJFQ1QyRCkKLWludGVyZmFjZSBJRDJEMUJp
dG1hcDsKLWludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLWludGVyZmFjZSBJRDNEMTFEZXZp
Y2UxOwotaW50ZXJmYWNlIElEWEdJS2V5ZWRNdXRleDsKLWludGVyZmFjZSBJRFhHSVN1cmZhY2Ux
OwotCi0jaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKQEAgLTU0LDkgKzQ0
LDYgQEAgcHVibGljOgogICAgIHN0cnVjdCBDb25maWd1cmF0aW9uIHsKICAgICAgICAgc3RkOjpv
cHRpb25hbDxXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2U7CiAgICAg
ICAgIGJvb2wgaXNPcGFxdWUgeyBmYWxzZSB9OwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAg
bXV0YWJsZSBIQU5ETEUgc2hhcmVkUmVzb3VyY2VIYW5kbGUgeyBudWxscHRyIH07Ci0jZW5kaWYK
IAogICAgICAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKICAgICAgICAgc3Rh
dGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShJUEM6OkRlY29kZXImLCBDb25maWd1
cmF0aW9uJik7CkBAIC0xMzcsMTQgKzEyNCw2IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiBjcmVhdGVDYWlyb1N1cmZhY2UoKTsKIAogICAgIFdlYkNvcmU6OlBsYXRmb3Jt
SW1hZ2VQdHIgY3JlYXRlUGxhdGZvcm1JbWFnZSgpIHsgcmV0dXJuIGNyZWF0ZUNhaXJvU3VyZmFj
ZSgpOyB9Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjcmVh
dGVEaXJlY3QyRFN1cmZhY2UoSUQzRDExRGV2aWNlMSosIElEMkQxUmVuZGVyVGFyZ2V0Kik7Ci0g
ICAgSURYR0lTdXJmYWNlMSogZHhTdXJmYWNlKCkgeyByZXR1cm4gbV9zdXJmYWNlLmdldCgpOyB9
Ci0gICAgdm9pZCBjcmVhdGVTaGFyZWRSZXNvdXJjZSgpOwotICAgIHZvaWQgZGlzcG9zZVNoYXJl
ZFJlc291cmNlKCk7Ci0gICAgdm9pZCBsZWFrU2hhcmVkUmVzb3VyY2UoKTsKLQotICAgIFdlYkNv
cmU6OlBsYXRmb3JtSW1hZ2VQdHIgY3JlYXRlUGxhdGZvcm1JbWFnZSgpIHsgcmV0dXJuIG51bGxw
dHI7IH0KICNlbmRpZgogCiBwcml2YXRlOgpAQCAtMTcxLDEyICsxNTAsNiBAQCBwcml2YXRlOgog
ICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOwogICAgIENvbmZpZ3VyYXRpb24gbV9jb25maWd1
cmF0aW9uOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRFhHSVN1cmZhY2UxPiBt
X3N1cmZhY2U7Ci0gICAgQ09NUHRyPElEWEdJS2V5ZWRNdXRleD4gbV9zdXJmYWNlTXV0ZXg7Ci0g
ICAgQ09NUHRyPElEMkQxQml0bWFwPiBtX2JpdG1hcDsKLSNlbmRpZgotCiAjaWYgVVNFKENHKQog
ICAgIGJvb2wgbV9yZWxlYXNlQml0bWFwQ29udGV4dERhdGFDYWxsZWQgeyBmYWxzZSB9OwogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0
MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9TaGFyZWFibGVC
aXRtYXBEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXQvU2hh
cmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwx
NzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBCcmVudCBGdWxnaGFtIDxi
ZnVsZ2hhbUB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAu
aCIKLQotI2luY2x1ZGUgIkRlY29kZXIuaCIKLSNpbmNsdWRlICJFbmNvZGVyLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9CaXRtYXBJbWFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRElCUGl4ZWxEYXRh
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9EaXJlY3QyRE9wZXJhdGlvbnMuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0RpcmVjdDJEVXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHREaXJlY3QyRC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+Ci0jaW5jbHVkZSA8ZDJk
MV8xLmg+Ci0jaW5jbHVkZSA8ZDNkMTFfMS5oPgotI2luY2x1ZGUgPGR4Z2kxXzIuaD4KLSNpbmNs
dWRlIDx3aW5jb2RlYy5oPgotI2luY2x1ZGUgPHd0Zi9Qcm9jZXNzSUQuaD4KLQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi12b2lkIFNoYXJlYWJsZUJp
dG1hcDo6dmFsaWRhdGVDb25maWd1cmF0aW9uKENvbmZpZ3VyYXRpb24mKQotewotfQotCi1zdGF0
aWMgdW5zaWduZWQgc3RyaWRlRm9yV2lkdGgodW5zaWduZWQgd2lkdGgpCi17Ci0gICAgc3RhdGlj
IHVuc2lnbmVkIGJpdHNQZXJQaXhlbCA9IERpcmVjdDJEOjpiaXRzUGVyUGl4ZWwoRGlyZWN0MkQ6
OndpY0JpdG1hcEZvcm1hdCgpKTsKLSAgICByZXR1cm4gYml0c1BlclBpeGVsICogd2lkdGggLyA4
OwotfQotCi1DaGVja2VkVWludDMyIFNoYXJlYWJsZUJpdG1hcDo6Y2FsY3VsYXRlQnl0ZXNQZXJS
b3coV2ViQ29yZTo6SW50U2l6ZSBzaXplLCBjb25zdCBDb25maWd1cmF0aW9uJiBjb25maWd1cmF0
aW9uKQotewotICAgIHJldHVybiBjYWxjdWxhdGVCeXRlc1BlclBpeGVsKGNvbmZpZ3VyYXRpb24p
ICogc2l6ZS53aWR0aCgpOwotfQotCi1DaGVja2VkVWludDMyIFNoYXJlYWJsZUJpdG1hcDo6Y2Fs
Y3VsYXRlQnl0ZXNQZXJQaXhlbChjb25zdCBDb25maWd1cmF0aW9uJikKLXsKLSAgICByZXR1cm4g
NDsKLX0KLQotdm9pZCBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlZFJlc291cmNlKCkKLXsK
LSAgICAvLyBEb24ndCBjcmVhdGUgYSBzaGFyZWQgcmVzb3VyY2UgaWYgdGhlIGNvbmZpZ3VyYXRp
b24gaW5zdHJ1Y3RzIHVzIHRvIHVzZSBhbiBleGlzdGluZyBvbmUuCi0gICAgaWYgKG1fY29uZmln
dXJhdGlvbi5zaGFyZWRSZXNvdXJjZUhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9z
dXJmYWNlID0gRGlyZWN0MkQ6OmNyZWF0ZURYR0lTdXJmYWNlT2ZTaXplKG1fc2l6ZSwgbnVsbHB0
ciwgdHJ1ZSk7Ci0KLSAgICBDT01QdHI8SURYR0lSZXNvdXJjZTE+IHJlc291cmNlRGF0YTsKLSAg
ICBIUkVTVUxUIGhyID0gbV9zdXJmYWNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRFhHSVJl
c291cmNlKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZyZXNvdXJjZURhdGEpKTsKLSAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGhyID0gcmVzb3VyY2VEYXRhLT5D
cmVhdGVTaGFyZWRIYW5kbGUobnVsbHB0ciwgRFhHSV9TSEFSRURfUkVTT1VSQ0VfUkVBRCB8IERY
R0lfU0hBUkVEX1JFU09VUkNFX1dSSVRFLCBudWxscHRyLCAmbV9jb25maWd1cmF0aW9uLnNoYXJl
ZFJlc291cmNlSGFuZGxlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLX0K
LQotdm9pZCBTaGFyZWFibGVCaXRtYXA6OmRpc3Bvc2VTaGFyZWRSZXNvdXJjZSgpCi17Ci0gICAg
aWYgKG1fc3VyZmFjZU11dGV4KQotICAgICAgICBtX3N1cmZhY2VNdXRleC0+UmVsZWFzZVN5bmMo
MSk7Ci0gICAgaWYgKG1fY29uZmlndXJhdGlvbi5zaGFyZWRSZXNvdXJjZUhhbmRsZSkKLSAgICAg
ICAgOjpDbG9zZUhhbmRsZShtX2NvbmZpZ3VyYXRpb24uc2hhcmVkUmVzb3VyY2VIYW5kbGUpOwot
fQotCi12b2lkIFNoYXJlYWJsZUJpdG1hcDo6bGVha1NoYXJlZFJlc291cmNlKCkKLXsKLSAgICBt
X2NvbmZpZ3VyYXRpb24uc2hhcmVkUmVzb3VyY2VIYW5kbGUgPSBudWxscHRyOwotfQotCi1zdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBo
aWNzQ29udGV4dCgpCi17Ci0gICAgLy8gTG9jayB0aGUgc3VyZmFjZSB0byB0aGUgY3VycmVudCBk
ZXZpY2Ugd2hpbGUgcmVuZGVyaW5nLgotICAgIEhSRVNVTFQgaHIgPSBtX3N1cmZhY2UtPlF1ZXJ5
SW50ZXJmYWNlKCZtX3N1cmZhY2VNdXRleCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7Ci0gICAgaHIgPSBtX3N1cmZhY2VNdXRleC0+QWNxdWlyZVN5bmMoMCwgSU5GSU5JVEUp
OwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgYXV0byBzdXJmYWNl
Q29udGV4dCA9IERpcmVjdDJEOjpjcmVhdGVTdXJmYWNlUmVuZGVyVGFyZ2V0KG1fc3VyZmFjZS5n
ZXQoKSk7Ci0gICAgaWYgKCFzdXJmYWNlQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHREaXJlY3QyRD4oc3VyZmFj
ZUNvbnRleHQuZ2V0KCkpOwotfQotCi12b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QpCi17Ci0gICAgcGFpbnQoY29udGV4dCwgMSwgZHN0UG9pbnQsIHNyY1JlY3Qp
OwotfQotCi12b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBmbG9hdCBzY2FsZUZhY3RvciwgY29uc3QgSW50UG9pbnQmIGRzdFBvaW50LCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0KQotewotICAgIGF1dG8gc3VyZmFjZSA9IGNyZWF0ZURpcmVjdDJEU3Vy
ZmFjZShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5kM2REZXZpY2UoKSwgY29udGV4dC5wbGF0
Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkpOwotCi0jaWZuZGVmIF9OREVCVUcKLSAgICBh
dXRvIGJpdG1hcFNpemUgPSBzdXJmYWNlLT5HZXRQaXhlbFNpemUoKTsKLSAgICBBU1NFUlQoYml0
bWFwU2l6ZS53aWR0aCA9PSBtX3NpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKGJpdG1hcFNpemUu
aGVpZ2h0ID09IG1fc2l6ZS5oZWlnaHQoKSk7Ci0jZW5kaWYKLQotICAgIEZsb2F0UmVjdCBkZXN0
UmVjdChkc3RQb2ludCwgc3JjUmVjdC5zaXplKCkpOwotICAgIEZsb2F0UmVjdCBzcmNSZWN0U2Nh
bGVkKHNyY1JlY3QpOwotICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUoc2NhbGVGYWN0b3IpOwotCi0g
ICAgQVNTRVJUKGNvbnRleHQuaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIGF1dG8mIHN0YXRl
ID0gY29udGV4dC5zdGF0ZSgpOwotICAgIGF1dG8mIHBsYXRmb3JtQ29udGV4dCA9ICpjb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgSW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucyB7
IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUsIEltYWdlT3JpZW50YXRp
b24oKSwgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9OwotICAgIERpcmVjdDJEOjpk
cmF3UGxhdGZvcm1JbWFnZShwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwg
ZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMsIHN0YXRlLmFscGhhLCBEaXJlY3QyRDo6
U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotQ09NUHRyPElEMkQxQml0bWFwPiBTaGFyZWFibGVC
aXRtYXA6OmNyZWF0ZURpcmVjdDJEU3VyZmFjZShJRDNEMTFEZXZpY2UxKiBkaXJlY3RYRGV2aWNl
LCBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQotewotICAgIGlmICghZGlyZWN0WERl
dmljZSkKLSAgICAgICAgZGlyZWN0WERldmljZSA9IERpcmVjdDJEOjpkZWZhdWx0RGlyZWN0WERl
dmljZSgpOwotCi0gICAgaWYgKCFtX2JpdG1hcCkgewotICAgICAgICBDT01QdHI8SUQzRDExVGV4
dHVyZTJEPiB0ZXh0dXJlOwotICAgICAgICBIUkVTVUxUIGhyID0gZGlyZWN0WERldmljZS0+T3Bl
blNoYXJlZFJlc291cmNlMShtX2NvbmZpZ3VyYXRpb24uc2hhcmVkUmVzb3VyY2VIYW5kbGUsIF9f
dXVpZG9mKElEM0QxMVRleHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmdGV4dHVy
ZSkpOwotICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgICAgICBociA9IHRleHR1cmUtPlF1ZXJ5SW50ZXJmYWNlKCZtX3N1cmZhY2Up
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgICAgICAvLyBM
b2NrIHRoZSBzdXJmYWNlIHRvIHRoZSBjdXJyZW50IGRldmljZSB3aGlsZSByZW5kZXJpbmcuCi0g
ICAgICAgIGhyID0gbV9zdXJmYWNlLT5RdWVyeUludGVyZmFjZSgmbV9zdXJmYWNlTXV0ZXgpOwot
ICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgaHIgPSBtX3N1
cmZhY2VNdXRleC0+QWNxdWlyZVN5bmMoMSwgSU5GSU5JVEUpOwotICAgICAgICBSRUxFQVNFX0FT
U0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgICAgICBhdXRvIGJpdG1hcFByb3BlcnRpZXMgPSBE
aXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpOwotICAgICAgICBociA9IHJlbmRlclRhcmdldC0+
Q3JlYXRlU2hhcmVkQml0bWFwKF9fdXVpZG9mKElEWEdJU3VyZmFjZTEpLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihtX3N1cmZhY2UuZ2V0KCkpLCAmYml0bWFwUHJvcGVydGllcywgJm1fYml0bWFw
KTsKLSAgICAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fYml0bWFwOwotfQotCi1SZWZQdHI8SW1hZ2U+IFNo
YXJlYWJsZUJpdG1hcDo6Y3JlYXRlSW1hZ2UoKQotewotICAgIGF1dG8gc3VyZmFjZSA9IGNyZWF0
ZURpcmVjdDJEU3VyZmFjZShudWxscHRyLCBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJU
YXJnZXQoKSk7Ci0gICAgaWYgKCFzdXJmYWNlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoc3VyZmFjZSkpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0JhY2tp
bmdTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQmFja2lu
Z1N0b3JlLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QmFja2luZ1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDYgQEAKICNpbmNs
dWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCiAKLSNpZiBV
U0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQzZDExXzEuaD4KLSNl
bmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDI4
NzgxMikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3OCwxMCArMjc4LDYgQEAKICNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25D
b29yZGluYXRvci5oIgogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZDNk
MTFfMS5oPgotI2VuZGlmCi0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoREVW
SUNFX09SSUVOVEFUSU9OKQogI2luY2x1ZGUgIldlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJv
dmlkZXJQcm94eS5oIgogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MywxMCArMTgzLDYgQEAKICNpbmNsdWRl
IDxXZWJDb3JlL1Byb21pc2VkQXR0YWNobWVudEluZm8uaD4KICNlbmRpZgogCi0jaWYgVVNFKERJ
UkVDVDJEKQotaW50ZXJmYWNlIElEM0QxMURldmljZTE7Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShN
RURJQV9VU0FHRSkKICNpbmNsdWRlIDxXZWJDb3JlL01lZGlhU2Vzc2lvbklkZW50aWZpZXIuaD4K
ICNlbmRpZgpAQCAtMTAxNywxMCArMTAxMyw2IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKFdJ
TikKICAgICBQbGF0Zm9ybVZpZXdXaWRnZXQgdmlld1dpZGdldCgpOwotI2lmIFVTRShESVJFQ1Qy
RCkKLSAgICBJRDNEMTFEZXZpY2UxKiBkZXZpY2UoKSBjb25zdDsKLSAgICB2b2lkIHNldERldmlj
ZShJRDNEMTFEZXZpY2UxKik7Ci0jZW5kaWYKICNlbmRpZgogI2lmIFVTRShMSUJXUEUpCiAgICAg
c3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIHZpZXdCYWNrZW5kKCk7CkBAIC0zMTA1LDkgKzMwOTcs
NiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxSZW1vdGVNZWRpYVNlc3Npb25Db29yZGluYXRvclBy
b3h5PiBtX21lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yUHJveHk7CiAjZW5kaWYKIAotI2lmIFVTRShE
SVJFQ1QyRCkKLSAgICBDT01QdHI8SUQzRDExRGV2aWNlMT4gbV9kZXZpY2U7Ci0jZW5kaWYKICAg
ICBib29sIG1fc2Vzc2lvblN0YXRlV2FzUmVzdG9yZWRCeUFQSVJlcXVlc3QgeyBmYWxzZSB9Owog
ICAgIGJvb2wgbV9pc1F1b3RhSW5jcmVhc2VEZW5pZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9p
c0xheWVyVHJlZUZyb3plbkR1ZVRvU3dpcGVBbmltYXRpb24geyBmYWxzZSB9OwpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9yZURpcmVjdDJELmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQu
Y3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFj
a2luZ1N0b3JlRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTAxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgi
Ci0KLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlICJVcGRhdGVJbmZvLmgi
Ci0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9CYWNraW5nU3Rv
cmVCYWNrZW5kRGlyZWN0MkRJbXBsLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJEVXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHREaXJlY3QyRC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQuaD4KLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8ZDNkMTFfMS5oPgot
I2luY2x1ZGUgPGR4Z2kuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotc3RkOjp1bmlxdWVfcHRyPEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRD4g
QmFja2luZ1N0b3JlOjpjcmVhdGVCYWNrZW5kKCkKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxC
YWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsPihtX3NpemUsIG1fZGV2aWNlU2NhbGVGYWN0
b3IsIG1fd2ViUGFnZVByb3h5LmRldmljZSgpKTsKLX0KLQotdm9pZCBCYWNraW5nU3RvcmU6OnBh
aW50KERYQ29ubmVjdGlvbnMgZHhDb25uZWN0aW9ucywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsK
LSAgICBBU1NFUlQobV9iYWNrZW5kKTsKLSAgICBBU1NFUlQobV9iYWNrZW5kLT5zaXplKCkgPT0g
bV9zaXplKTsKLQotICAgIENPTVB0cjxJRDNEMTFSZXNvdXJjZT4gYmFja0J1ZmZlcjsKLSAgICBI
UkVTVUxUIGhyID0gZHhDb25uZWN0aW9ucy5iYWNrQnVmZmVyLT5RdWVyeUludGVyZmFjZShfX3V1
aWRvZihJRDNEMTFSZXNvdXJjZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja0J1ZmZl
cikpOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgQ09NUHRyPElE
M0QxMVJlc291cmNlPiBiYWNraW5nU3RvcmU7Ci0gICAgaHIgPSBtX2JhY2tlbmQtPmR4U3VyZmFj
ZSgpLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNEMTFSZXNvdXJjZSksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPigmYmFja2luZ1N0b3JlKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VF
REVEKGhyKSk7Ci0KLSAgICBDRDNEMTFfQk9YIHNyY0JveChyZWN0LngoKSwgcmVjdC55KCksIDAs
IHJlY3QueCgpICsgcmVjdC53aWR0aCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCksIDEpOwot
ICAgIGR4Q29ubmVjdGlvbnMuaW1tZWRpYXRlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9u
MShiYWNrQnVmZmVyLmdldCgpLCAwLCByZWN0LngoKSwgcmVjdC55KCksIDAsIGJhY2tpbmdTdG9y
ZS5nZXQoKSwgMCwgJnNyY0JveCwgRDNEMTFfQ09QWV9ESVNDQVJEKTsKLX0KLQotdm9pZCBCYWNr
aW5nU3RvcmU6OmluY29ycG9yYXRlVXBkYXRlKFNoYXJlYWJsZUJpdG1hcCogYml0bWFwLCBjb25z
dCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQotewotICAgIGlmICghbV9iYWNrZW5kKQotICAgICAg
ICBtX2JhY2tlbmQgPSBjcmVhdGVCYWNrZW5kKCk7Ci0KLSAgICBzY3JvbGwodXBkYXRlSW5mby5z
Y3JvbGxSZWN0LCB1cGRhdGVJbmZvLnNjcm9sbE9mZnNldCk7Ci0KLSAgICBJbnRQb2ludCB1cGRh
dGVSZWN0Qm91bmRzTG9jYXRpb24gPSB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMubG9jYXRp
b24oKTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gZGV2aWNlVXBkYXRlQml0bWFwID0gYml0
bWFwLT5jcmVhdGVEaXJlY3QyRFN1cmZhY2UobV93ZWJQYWdlUHJveHkuZGV2aWNlKCksIG1fYmFj
a2VuZC0+cmVuZGVyVGFyZ2V0KCkpOwotICAgIGlmICghZGV2aWNlVXBkYXRlQml0bWFwKQotICAg
ICAgICByZXR1cm47Ci0KLSNpZm5kZWYgX05ERUJVRwotICAgIGF1dG8gZGV2aWNlQml0bWFwU2l6
ZSA9IGRldmljZVVwZGF0ZUJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0gICAgQVNTRVJUKGRldmlj
ZUJpdG1hcFNpemUud2lkdGggPT0gdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzLndpZHRoKCkp
OwotICAgIEFTU0VSVChkZXZpY2VCaXRtYXBTaXplLmhlaWdodCA9PSB1cGRhdGVJbmZvLnVwZGF0
ZVJlY3RCb3VuZHMuaGVpZ2h0KCkpOwotI2VuZGlmCi0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHVw
ZGF0ZVJlY3QgOiB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RzKSB7Ci0gICAgICAgIGF1dG8gY3VycmVu
dFJlY3RMb2NhdGlvbiA9IEludFNpemUodXBkYXRlUmVjdC54KCkgLSB1cGRhdGVSZWN0Qm91bmRz
TG9jYXRpb24ueCgpLCB1cGRhdGVSZWN0LnkoKSAtIHVwZGF0ZVJlY3RCb3VuZHNMb2NhdGlvbi55
KCkpOwotICAgICAgICBhdXRvIGRlc3RSZWN0TG9jYXRpb24gPSBJbnRTaXplKHVwZGF0ZVJlY3Qu
eCgpLCB1cGRhdGVSZWN0LnkoKSk7Ci0gICAgICAgIERpcmVjdDJEOjpjb3B5UmVjdEZyb21PbmVT
dXJmYWNlVG9Bbm90aGVyKGRldmljZVVwZGF0ZUJpdG1hcC5nZXQoKSwgbV9iYWNrZW5kLT5zdXJm
YWNlKCksIGN1cnJlbnRSZWN0TG9jYXRpb24sIHVwZGF0ZVJlY3QsIGRlc3RSZWN0TG9jYXRpb24p
OwotICAgIH0KLX0KLQotdm9pZCBCYWNraW5nU3RvcmU6OnNjcm9sbChjb25zdCBJbnRSZWN0JiBz
Y3JvbGxSZWN0LCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZzZXQpCi17Ci0gICAgaWYgKHNjcm9s
bE9mZnNldC5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fYmFja2Vu
ZCk7Ci0gICAgbV9iYWNrZW5kLT5zY3JvbGwoc2Nyb2xsUmVjdCwgc2Nyb2xsT2Zmc2V0KTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93
aW4vV2ViUGFnZVByb3h5V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDEwICszMiw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TZWFyY2hQb3B1cE1lbnVEQi5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckFnZW50Lmg+CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0j
aW5jbHVkZSA8ZDNkMTFfMS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKQEAgLTc5LDE4ICs3NSw2IEBAIFBs
YXRmb3JtVmlld1dpZGdldCBXZWJQYWdlUHJveHk6OnZpZXdXaWQKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8UGFnZUNsaWVudEltcGwmPihwYWdlQ2xpZW50KCkpLnZpZXdXaWRnZXQoKTsKIH0KIAot
I2lmIFVTRShESVJFQ1QyRCkKLUlEM0QxMURldmljZTEqIFdlYlBhZ2VQcm94eTo6ZGV2aWNlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9kZXZpY2UuZ2V0KCk7Ci19Ci0KLXZvaWQgV2ViUGFnZVBy
b3h5OjpzZXREZXZpY2UoSUQzRDExRGV2aWNlMSogZGV2aWNlKQotewotICAgIG1fZGV2aWNlID0g
ZGV2aWNlOwotfQotI2VuZGlmCi0KIHZvaWQgV2ViUGFnZVByb3h5OjpkaXNwYXRjaFBlbmRpbmdD
aGFyRXZlbnRzKGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGtleWRvd25FdmVudCkKIHsK
ICAgICBhdXRvJiBwZW5kaW5nQ2hhckV2ZW50cyA9IGtleWRvd25FdmVudC5wZW5kaW5nQ2hhckV2
ZW50cygpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVBy
b3h5V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2Vi
UG9wdXBNZW51UHJveHlXaW4uY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NSwxMyArNDUsNiBAQAogI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8
V2ViQ29yZS9EaXJlY3QyRFV0aWxpdGllcy5oPgotI2luY2x1ZGUgPGQzZDExXzEuaD4KLSNpbmNs
dWRlIDxkaXJlY3R4Y29sb3JzLmg+IAotI2luY2x1ZGUgPGR4Z2kuaD4KLSNlbmRpZgotCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0yMTUsMTEgKzIw
OCw2IEBAIHZvaWQgV2ViUG9wdXBNZW51UHJveHlXaW46OnNob3dQb3B1cE1lbnUKIAogICAgICAg
ICBpZiAoIW1fcG9wdXApCiAgICAgICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoRElSRUNUMkQp
Ci0gICAgICAgIERpcmVjdDJEOjpjcmVhdGVEZXZpY2VBbmRDb250ZXh0KG1fZDNkRGV2aWNlLCBt
X2ltbWVkaWF0ZUNvbnRleHQpOwotICAgICAgICBzZXR1cFN3YXBDaGFpbihtX3dpbmRvd1JlY3Qu
c2l6ZSgpKTsKLSNlbmRpZgogICAgIH0KIAogICAgIEJPT0wgc2hvdWxkQW5pbWF0ZSA9IEZBTFNF
OwpAQCAtODI4LDcgKzgxNiw2IEBAIHZvaWQgV2ViUG9wdXBNZW51UHJveHlXaW46OnBhaW50KGNv
bnN0IEkKICAgICBpZiAoIW1fcG9wdXApCiAgICAgICAgIHJldHVybjsKIAotI2lmICFVU0UoRElS
RUNUMkQpCiAgICAgaWYgKCFtX0RDKSB7CiAgICAgICAgIG1fREMgPSBhZG9wdEdESU9iamVjdCg6
OkNyZWF0ZUNvbXBhdGlibGVEQyhIV25kREMobV9wb3B1cCkpKTsKICAgICAgICAgaWYgKCFtX0RD
KQpAQCAtODU0LDIyICs4NDEsNiBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpwYWludChj
b25zdCBJCiAgICAgfQogCiAgICAgR3JhcGhpY3NDb250ZXh0V2luIGNvbnRleHQobV9EQy5nZXQo
KSk7Ci0jZWxzZQotICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IGJhY2tCdWZmZXI7IAotICAg
IEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVpZG9mKElEM0QxMVRl
eHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja0J1ZmZlcikpOyAKLSAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJRFhHSVN1
cmZhY2UxPiBzdXJmYWNlKFF1ZXJ5LCBiYWNrQnVmZmVyKTsKLSAgICBpZiAoIXN1cmZhY2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVuZGVyVGFyZ2V0ID0gV2ViQ29yZTo6RGlyZWN0
MkQ6OmNyZWF0ZVN1cmZhY2VSZW5kZXJUYXJnZXQoc3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCBwbGF0Zm9ybUNvbnRleHQocmVuZGVyVGFyZ2V0LmdldCgpKTsK
LSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0RDNERGV2aWNlKG1fZDNkRGV2aWNlLmdldCgpKTsKLSAg
ICBHcmFwaGljc0NvbnRleHRXaW4gY29udGV4dCgmcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0Nv
bnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwotI2VuZGlmCiAK
ICAgICBJbnRSZWN0IHRyYW5zbGF0ZWREYW1hZ2VSZWN0ID0gZGFtYWdlUmVjdDsKICAgICB0cmFu
c2xhdGVkRGFtYWdlUmVjdC5tb3ZlKEludFNpemUoMCwgbV9zY3JvbGxPZmZzZXQgKiBtX2l0ZW1I
ZWlnaHQpKTsKQEAgLTg4NCwxNSArODU1LDEwIEBAIHZvaWQgV2ViUG9wdXBNZW51UHJveHlXaW46
OnBhaW50KGNvbnN0IEkKICAgICBpZiAobV9zY3JvbGxiYXIpCiAgICAgICAgIG1fc2Nyb2xsYmFy
LT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKIAotI2lmICFVU0UoRElSRUNUMkQpCiAgICAg
SFduZERDIGhXbmREQzsKICAgICBIREMgbG9jYWxEQyA9IGhkYyA/IGhkYyA6IGhXbmREQy5zZXRI
V25kKG1fcG9wdXApOwogCiAgICAgOjpCaXRCbHQobG9jYWxEQywgZGFtYWdlUmVjdC54KCksIGRh
bWFnZVJlY3QueSgpLCBkYW1hZ2VSZWN0LndpZHRoKCksIGRhbWFnZVJlY3QuaGVpZ2h0KCksIG1f
REMuZ2V0KCksIGRhbWFnZVJlY3QueCgpLCBkYW1hZ2VSZWN0LnkoKSwgU1JDQ09QWSk7Ci0jZWxz
ZQotICAgIGNvbnRleHQuZmx1c2goKTsKLSAgICBtX3N3YXBDaGFpbi0+UHJlc2VudCgwLCAwKTsg
Ci0jZW5kaWYKIH0KIAogYm9vbCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2V0Rm9jdXNlZEluZGV4
KGludCBpLCBib29sIGhvdFRyYWNraW5nKQpAQCAtOTk1LDQ4ICs5NjEsNiBAQCBib29sIFdlYlBv
cHVwTWVudVByb3h5V2luOjpzY3JvbGxUb1JldmVhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0j
aWYgVVNFKERJUkVDVDJEKQotdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2V0dXBTd2FwQ2hh
aW4oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX3N3YXBDaGFpbiA9IERp
cmVjdDJEOjpzd2FwQ2hhaW5PZlNpemVGb3JXaW5kb3dBbmREZXZpY2Uoc2l6ZSwgbV9wb3B1cCwg
bV9kM2REZXZpY2UpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fc3dhcENoYWluKTsKLSAgICBhdXRv
IGZhY3RvcnkgPSBEaXJlY3QyRDo6ZmFjdG9yeUZvckRYR0lEZXZpY2UoRGlyZWN0MkQ6OnRvRFhH
SURldmljZShtX2QzZERldmljZSkpOwotCi0gICAgZmFjdG9yeS0+TWFrZVdpbmRvd0Fzc29jaWF0
aW9uKG1fcG9wdXAsIDApOwotICAgIGNvbmZpZ3VyZUJhY2tpbmdTdG9yZShzaXplKTsKLX0KLQot
dm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6Y29uZmlndXJlQmFja2luZ1N0b3JlKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIHNpemUpCi17Ci0gICAgQVNTRVJUKG1fc3dhcENoYWluKTsKLSAgICBB
U1NFUlQobV9kM2REZXZpY2UpOwotICAgIEFTU0VSVChtX2ltbWVkaWF0ZUNvbnRleHQpOwotCi0g
ICAgLy8gQ3JlYXRlIGEgcmVuZGVyIHRhcmdldCB2aWV3IAotICAgIENPTVB0cjxJRDNEMTFUZXh0
dXJlMkQ+IGJhY2tCdWZmZXI7IAotICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVm
ZmVyKDAsIF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoq
PigmYmFja0J1ZmZlcikpOyAKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQot
ICAgIGhyID0gbV9kM2REZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcoYmFja0J1ZmZlci5n
ZXQoKSwgbnVsbHB0ciwgJm1fcmVuZGVyVGFyZ2V0Vmlldyk7IAotICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotCi0gICAgYXV0byogcmVuZGVyVGFyZ2V0VmlldyA9IG1fcmVuZGVy
VGFyZ2V0Vmlldy5nZXQoKTsKLSAgICBtX2ltbWVkaWF0ZUNvbnRleHQtPk9NU2V0UmVuZGVyVGFy
Z2V0cygxLCAmcmVuZGVyVGFyZ2V0VmlldywgbnVsbHB0cik7Ci0KLSAgICAvLyBTZXR1cCB0aGUg
dmlld3BvcnQgCi0gICAgRDNEMTFfVklFV1BPUlQgdmlld3BvcnQ7Ci0gICAgdmlld3BvcnQuV2lk
dGggPSAoRkxPQVQpc2l6ZS53aWR0aCgpOwotICAgIHZpZXdwb3J0LkhlaWdodCA9IChGTE9BVClz
aXplLmhlaWdodCgpOwotICAgIHZpZXdwb3J0Lk1pbkRlcHRoID0gMC4wZjsKLSAgICB2aWV3cG9y
dC5NYXhEZXB0aCA9IDEuMGY7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFggPSAwOwotICAgIHZpZXdw
b3J0LlRvcExlZnRZID0gMDsKLSAgICBtX2ltbWVkaWF0ZUNvbnRleHQtPlJTU2V0Vmlld3BvcnRz
KDEsICZ2aWV3cG9ydCk7Ci0KLSAgICBtX2ltbWVkaWF0ZUNvbnRleHQtPkNsZWFyUmVuZGVyVGFy
Z2V0VmlldyhtX3JlbmRlclRhcmdldFZpZXcuZ2V0KCksIERpcmVjdFg6OkNvbG9yczo6QmxhbmNo
ZWRBbG1vbmQpOyAKLX0KLSNlbmRpZgotCiBTdHJpbmcgV2ViUG9wdXBNZW51UHJveHlXaW46OmRl
YnVnRGVzY3JpcHRpb24oKSBjb25zdAogewogICAgIHJldHVybiBtYWtlU3RyaW5nKCJXZWJQb3B1
cE1lbnVQcm94eVdpbiAweCIsIGhleChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odGhpcyks
IExvd2VyY2FzZSkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBvcHVw
TWVudVByb3h5V2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2lu
L1dlYlBvcHVwTWVudVByb3h5V2luLmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMywxMyArMzMsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYWJsZUFyZWEuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhci5oPgogCi0jaWYgVVNFKERJUkVDVDJEKQotaW50ZXJm
YWNlIElEM0QxMURldmljZTE7Ci1pbnRlcmZhY2UgSUQzRDExRGV2aWNlQ29udGV4dDE7Ci1pbnRl
cmZhY2UgSUQzRDExUmVuZGVyVGFyZ2V0VmlldzsKLWludGVyZmFjZSBJRFhHSVN3YXBDaGFpbjsK
LSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViVmlldzsKQEAgLTEzMSwy
MyArMTI0LDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbmNyZW1lbnRXaGVlbERlbHRhKGludCBk
ZWx0YSk7CiAgICAgdm9pZCByZWR1Y2VXaGVlbERlbHRhKGludCBkZWx0YSk7CiAKLSNpZiBVU0Uo
RElSRUNUMkQpCi0gICAgdm9pZCBzZXR1cFN3YXBDaGFpbihjb25zdCBXZWJDb3JlOjpJbnRTaXpl
Jik7Ci0gICAgdm9pZCBjb25maWd1cmVCYWNraW5nU3RvcmUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYpOwotI2VuZGlmCi0KICAgICBXZWJWaWV3KiBtX3dlYlZpZXc7CiAgICAgVmVjdG9yPFdlYlBv
cHVwSXRlbT4gbV9pdGVtczsKICAgICBQbGF0Zm9ybVBvcHVwTWVudURhdGEgbV9kYXRhOwogICAg
IGludCBtX25ld1NlbGVjdGVkSW5kZXggeyAwIH07CiAKICAgICBSZWZQdHI8V2ViQ29yZTo6U2Ny
b2xsYmFyPiBtX3Njcm9sbGJhcjsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEM0Qx
MURldmljZTE+IG1fZDNkRGV2aWNlOwotICAgIENPTVB0cjxJRDNEMTFEZXZpY2VDb250ZXh0MT4g
bV9pbW1lZGlhdGVDb250ZXh0OwotICAgIENPTVB0cjxJRDNEMTFSZW5kZXJUYXJnZXRWaWV3PiBt
X3JlbmRlclRhcmdldFZpZXc7IAotICAgIENPTVB0cjxJRFhHSVN3YXBDaGFpbj4gbV9zd2FwQ2hh
aW47Ci0jZW5kaWYKICAgICBHRElPYmplY3Q8SERDPiBtX0RDOwogICAgIEdESU9iamVjdDxIQklU
TUFQPiBtX2JtcDsKICAgICBIV05EIG1fcG9wdXAgeyBudWxscHRyIH07CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4
LDE0ICs2OCw2IEBACiAjaW5jbHVkZSA8Y2Fpcm8uaD4KICNlbmRpZiAKIAotI2lmIFVTRShESVJF
Q1QyRCkKLSNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJEVXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8
ZDNkMTFfMS5oPgotI2luY2x1ZGUgPGRpcmVjdHhjb2xvcnMuaD4gCi0jaW5jbHVkZSA8ZHhnaS5o
PgotI2VuZGlmCi0KLQogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIApAQCAtMjQzLDExICsyMzUsNiBAQCBXZWJWaWV3OjpXZWJWaWV3KFJFQ1QgcmVjdCwgY29u
c3QgQVBJOjpQCiAgICAgbV9wYWdlLT5pbml0aWFsaXplV2ViUGFnZSgpOwogCiAgICAgSW50U2l6
ZSB3aW5kb3dTaXplKHJlY3QucmlnaHQgLSByZWN0LmxlZnQsIHJlY3QuYm90dG9tIC0gcmVjdC50
b3ApOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBEaXJlY3QyRDo6Y3JlYXRlRGV2aWNlQW5kQ29u
dGV4dChtX2QzZERldmljZSwgbV9pbW1lZGlhdGVDb250ZXh0KTsKLSAgICBtX3BhZ2UtPnNldERl
dmljZShtX2QzZERldmljZS5nZXQoKSk7Ci0gICAgc2V0dXBTd2FwQ2hhaW4od2luZG93U2l6ZSk7
Ci0jZW5kaWYKIAogICAgIGlmIChtX3BhZ2UtPmRyYXdpbmdBcmVhKCkpCiAgICAgICAgIG1fcGFn
ZS0+ZHJhd2luZ0FyZWEoKS0+c2V0U2l6ZSh3aW5kb3dTaXplKTsKQEAgLTU3MywyMSArNTYwLDYg
QEAgTFJFU1VMVCBXZWJWaWV3OjpvblNpemVFdmVudChIV05EIGh3bmQsIAogICAgICAgICBtX25l
eHRSZXNpemVTY3JvbGxPZmZzZXQgPSBJbnRTaXplKCk7CiAgICAgfQogCi0jaWYgVVNFKERJUkVD
VDJEKQotICAgIGlmIChtX3N3YXBDaGFpbikgewotICAgICAgICBtX2ltbWVkaWF0ZUNvbnRleHQt
Pk9NU2V0UmVuZGVyVGFyZ2V0cygwLCBudWxscHRyLCBudWxscHRyKTsKLQotICAgICAgICBtX3Jl
bmRlclRhcmdldFZpZXcgPSBudWxscHRyOwotCi0gICAgICAgIC8vIFByZXNlcnZlIHRoZSBleGlz
dGluZyBidWZmZXIgY291bnQgKHBhc3MgemVybyBmb3IgY291bnQpIGFuZCBmb3JtYXQgKGJ5IHBh
c3NpbmcgRFhHSV9GT1JNQVRfVU5LTk9XTikuCi0gICAgICAgIC8vIEF1dG9tYXRpY2FsbHkgY2hv
b3NlIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHRvIG1hdGNoIHRoZSBjbGllbnQgcmVjdCBmb3IgdGhl
IGJhY2tpbmcgd2luZG93IChwYXNzIHplcm9zIGZvciB3aWR0aC9oZWlnaHQpLgotICAgICAgICBI
UkVTVUxUIGhyID0gbV9zd2FwQ2hhaW4tPlJlc2l6ZUJ1ZmZlcnMoMCwgMCwgMCwgRFhHSV9GT1JN
QVRfVU5LTk9XTiwgRFhHSV9TV0FQX0NIQUlOX0ZMQUdfR0RJX0NPTVBBVElCTEUpOwotICAgICAg
ICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgICAgICBjb25maWd1cmVCYWNr
aW5nU3RvcmUod2luZG93U2l6ZSk7Ci0gICAgfQotI2VuZGlmCi0KICAgICBoYW5kbGVkID0gdHJ1
ZTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTk3NCw1MCArOTQ2LDQgQEAgdm9pZCBXZWJWaWV3Ojpz
ZXRUb29sVGlwKGNvbnN0IFN0cmluZyYgdAogICAgIDo6U2VuZE1lc3NhZ2UobV90b29sVGlwV2lu
ZG93LCBUVE1fQUNUSVZBVEUsICF0b29sVGlwLmlzRW1wdHkoKSwgMCk7CiB9CiAKLSNpZiBVU0Uo
RElSRUNUMkQpCi12b2lkIFdlYlZpZXc6OnNldHVwU3dhcENoYWluKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNpemUpCi17Ci0gICAgaWYgKCFtX2QzZERldmljZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9zd2FwQ2hhaW4gPSBEaXJlY3QyRDo6c3dhcENoYWluT2ZTaXplRm9yV2luZG93QW5k
RGV2aWNlKHNpemUsIG1fd2luZG93LCBtX2QzZERldmljZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
bV9zd2FwQ2hhaW4pOwotCi0gICAgYXV0byBmYWN0b3J5ID0gRGlyZWN0MkQ6OmZhY3RvcnlGb3JE
WEdJRGV2aWNlKERpcmVjdDJEOjp0b0RYR0lEZXZpY2UobV9kM2REZXZpY2UpKTsKLQotICAgIGZh
Y3RvcnktPk1ha2VXaW5kb3dBc3NvY2lhdGlvbihtX3dpbmRvdywgMCk7Ci0gICAgY29uZmlndXJl
QmFja2luZ1N0b3JlKHNpemUpOwotfQotCi12b2lkIFdlYlZpZXc6OmNvbmZpZ3VyZUJhY2tpbmdT
dG9yZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotewotICAgIEFTU0VSVChtX3N3YXBD
aGFpbik7Ci0gICAgQVNTRVJUKG1fZDNkRGV2aWNlKTsKLSAgICBBU1NFUlQobV9pbW1lZGlhdGVD
b250ZXh0KTsKLQotICAgIC8vIENyZWF0ZSBhIHJlbmRlciB0YXJnZXQgdmlldyAKLSAgICBDT01Q
dHI8SUQzRDExVGV4dHVyZTJEPiBiYWNrQnVmZmVyOyAKLSAgICBIUkVTVUxUIGhyID0gbV9zd2Fw
Q2hhaW4tPkdldEJ1ZmZlcigwLCBfX3V1aWRvZihJRDNEMTFUZXh0dXJlMkQpLCByZWludGVycHJl
dF9jYXN0PHZvaWQqKj4oJmJhY2tCdWZmZXIpKTsgCi0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VF
REVEKGhyKSk7Ci0KLSAgICBociA9IG1fZDNkRGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3
KGJhY2tCdWZmZXIuZ2V0KCksIG51bGxwdHIsICZtX3JlbmRlclRhcmdldFZpZXcpOyAKLSAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGF1dG8qIHJlbmRlclRhcmdldFZp
ZXcgPSBtX3JlbmRlclRhcmdldFZpZXcuZ2V0KCk7Ci0gICAgbV9pbW1lZGlhdGVDb250ZXh0LT5P
TVNldFJlbmRlclRhcmdldHMoMSwgJnJlbmRlclRhcmdldFZpZXcsIG51bGxwdHIpOwotCi0gICAg
Ly8gU2V0dXAgdGhlIHZpZXdwb3J0IAotICAgIEQzRDExX1ZJRVdQT1JUIHZpZXdwb3J0OwotICAg
IHZpZXdwb3J0LldpZHRoID0gKEZMT0FUKXNpemUud2lkdGgoKTsKLSAgICB2aWV3cG9ydC5IZWln
aHQgPSAoRkxPQVQpc2l6ZS5oZWlnaHQoKTsKLSAgICB2aWV3cG9ydC5NaW5EZXB0aCA9IDAuMGY7
Ci0gICAgdmlld3BvcnQuTWF4RGVwdGggPSAxLjBmOwotICAgIHZpZXdwb3J0LlRvcExlZnRYID0g
MDsKLSAgICB2aWV3cG9ydC5Ub3BMZWZ0WSA9IDA7Ci0gICAgbV9pbW1lZGlhdGVDb250ZXh0LT5S
U1NldFZpZXdwb3J0cygxLCAmdmlld3BvcnQpOwotCi0gICAgbV9pbW1lZGlhdGVDb250ZXh0LT5D
bGVhclJlbmRlclRhcmdldFZpZXcobV9yZW5kZXJUYXJnZXRWaWV3LmdldCgpLCBEaXJlY3RYOjpD
b2xvcnM6Ok1pZG5pZ2h0Qmx1ZSk7IAotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCShyZXZpc2lvbiAyODc4
MTIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSwxMyArMzUsNiBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogCi0jaWYgVVNFKERJUkVDVDJEKQotaW50ZXJmYWNlIElEM0QxMURl
dmljZTE7Ci1pbnRlcmZhY2UgSUQzRDExRGV2aWNlQ29udGV4dDE7Ci1pbnRlcmZhY2UgSUQzRDEx
UmVuZGVyVGFyZ2V0VmlldzsKLWludGVyZmFjZSBJRFhHSVN3YXBDaGFpbjsKLSNlbmRpZgotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRTaXplOwogfQpAQCAtODMsMTEgKzc2LDYgQEAg
cHVibGljOgogCiAgICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEoKSB7IHJldHVybiBw
YWdlKCkgPyBwYWdlKCktPmRyYXdpbmdBcmVhKCkgOiBudWxscHRyOyB9CiAKLSNpZiBVU0UoRElS
RUNUMkQpCi0gICAgSUQzRDExRGV2aWNlMSogZDNkRGV2aWNlKCkgY29uc3QgeyByZXR1cm4gbV9k
M2REZXZpY2UuZ2V0KCk7IH0KLSAgICBJRDNEMTFEZXZpY2VDb250ZXh0MSogZDNkSW1tZWRpYXRl
Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faW1tZWRpYXRlQ29udGV4dC5nZXQoKTsgfQotI2Vu
ZGlmCi0KIHByaXZhdGU6CiAgICAgV2ViVmlldyhSRUNULCBjb25zdCBBUEk6OlBhZ2VDb25maWd1
cmF0aW9uJiwgSFdORCBwYXJlbnRXaW5kb3cpOwogCkBAIC0xNDQsMTEgKzEzMiw2IEBAIHByaXZh
dGU6CiAgICAgLy8gV2ViQ29yZTo6V2luZG93TWVzc2FnZUxpc3RlbmVyCiAgICAgdmlydHVhbCB2
b2lkIHdpbmRvd1JlY2VpdmVkTWVzc2FnZShIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBB
UkFNKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIHNldHVwU3dhcENoYWluKGNvbnN0
IFdlYkNvcmU6OkludFNpemUmKTsKLSAgICB2b2lkIGNvbmZpZ3VyZUJhY2tpbmdTdG9yZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJik7Ci0jZW5kaWYKLQogICAgIEhXTkQgbV93aW5kb3cgeyBudWxs
cHRyIH07CiAgICAgSFdORCBtX3RvcExldmVsUGFyZW50V2luZG93IHsgbnVsbHB0ciB9OwogICAg
IEhXTkQgbV90b29sVGlwV2luZG93IHsgbnVsbHB0ciB9OwpAQCAtMTY4LDEyICsxNTEsNiBAQCBw
cml2YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6UGFnZUNsaWVudEltcGw+IG1f
cGFnZUNsaWVudDsKICAgICBSZWZQdHI8V2ViUGFnZVByb3h5PiBtX3BhZ2U7Ci0jaWYgVVNFKERJ
UkVDVDJEKQotICAgIENPTVB0cjxJRDNEMTFEZXZpY2UxPiBtX2QzZERldmljZTsKLSAgICBDT01Q
dHI8SUQzRDExRGV2aWNlQ29udGV4dDE+IG1faW1tZWRpYXRlQ29udGV4dDsKLSAgICBDT01QdHI8
SUQzRDExUmVuZGVyVGFyZ2V0Vmlldz4gbV9yZW5kZXJUYXJnZXRWaWV3OyAKLSAgICBDT01QdHI8
SURYR0lTd2FwQ2hhaW4+IG1fc3dhcENoYWluOwotI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJQb3B1cE1lbnUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUG9wdXBNZW51LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE1LDEyICsxMTUsNiBAQCB2b2lkIFdlYlBvcHVwTWVudTo6c2hvdyhj
b25zdCBJbnRSZWN0JiByCiAgICAgc2V0VXBQbGF0Zm9ybURhdGEocGFnZUNvb3JkaW5hdGVzLCBw
bGF0Zm9ybURhdGEpOwogCiAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93UG9wdXBNZW51
KHBhZ2VDb29yZGluYXRlcywgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fcG9wdXBDbGllbnQtPm1l
bnVTdHlsZSgpLnRleHREaXJlY3Rpb24oKSksIGl0ZW1zLCBzZWxlY3RlZEluZGV4LCBwbGF0Zm9y
bURhdGEpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7Ci0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAg
Ly8gRG9uJ3QgZGVzdHJveSB0aGUgc2hhcmVkIGhhbmRsZSBpbiB0aGUgV2ViQ29udGVudCBwcm9j
ZXNzLiBJdCB3aWxsIGJlIGRlc3Ryb3llZCBpbiB0aGUgVUlQcm9jZXNzLgotICAgIHBsYXRmb3Jt
RGF0YS5tX25vdFNlbGVjdGVkQmFja2luZ1N0b3JlLT5sZWFrU2hhcmVkUmVzb3VyY2UoKTsKLSAg
ICBwbGF0Zm9ybURhdGEubV9zZWxlY3RlZEJhY2tpbmdTdG9yZS0+bGVha1NoYXJlZFJlc291cmNl
KCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBXZWJQb3B1cE1lbnU6OmhpZGUoKQpJbmRleDogU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmlu
ZENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTEsMTAgKzM1MSw2IEBAIHZvaWQg
RmluZENvbnRyb2xsZXI6OmdldEltYWdlRm9yRmluZE1hdGMKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEdldEltYWdlRm9y
RmluZE1hdGNoKGhhbmRsZSwgbWF0Y2hJbmRleCkpOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAv
LyBEb24ndCBkZXN0cm95IHRoZSBzaGFyZWQgaGFuZGxlIGluIHRoZSBXZWJDb250ZW50IHByb2Nl
c3MuIEl0IHdpbGwgYmUgZGVzdHJveWVkIGluIHRoZSBVSVByb2Nlc3MuCi0gICAgc2VsZWN0aW9u
U25hcHNob3QtPmxlYWtTaGFyZWRSZXNvdXJjZSgpOwotI2VuZGlmCiB9CiAKIHZvaWQgRmluZENv
bnRyb2xsZXI6OnNlbGVjdEZpbmRNYXRjaCh1aW50MzJfdCBtYXRjaEluZGV4KQpJbmRleDogU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5n
QXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGlu
YXRlZEdyYXBoaWNzLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVk
R3JhcGhpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNCArNDMsNiBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvUmVnaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgogCi0jaWYg
VVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+Ci0jaW5jbHVk
ZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQzZDExXzEuaD4KLSNlbmRpZgotCi0KICNpZiBVU0UoR0xJ
Ql9FVkVOVF9MT09QKQogI2luY2x1ZGUgPHd0Zi9nbGliL1J1bkxvb3BTb3VyY2VQcmlvcml0eS5o
PgogI2VuZGlmCkBAIC04NjIsMTAgKzg1NCw2IEBAIHZvaWQgRHJhd2luZ0FyZWFDb29yZGluYXRl
ZEdyYXBoaWNzOjpkaXMKICAgICAgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0cy5hcHBlbmQocmVj
dCk7CiAgICAgfQogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIGJpdG1hcC0+bGVha1NoYXJlZFJl
c291cmNlKCk7IC8vIEl0IHdpbGwgYmUgZGVzdHJveWVkIGluIHRoZSBVSVByb2Nlc3MuCi0jZW5k
aWYKLQogICAgIG1fd2ViUGFnZS5kaWRVcGRhdGVSZW5kZXJpbmcoKTsKIAogICAgIC8vIExheW91
dCBjYW4gdHJpZ2dlciBtb3JlIGNhbGxzIHRvIHNldE5lZWRzRGlzcGxheSBhbmQgd2UgZG9uJ3Qg
d2FudCB0byBwcm9jZXNzIHRoZW0KSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
ODc4MTIpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDIyLTAxLTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDk5OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERpcmVjdDJEIGFuZCBGVFcgaGF2ZSBu
b3QgYmVlbiBidWlsZGluZyBmb3Igb3ZlciBhIHllYXIuIEl0IGlzCisgICAgICAgIHRpbWUgdG8g
cmVtb3ZlIHRoZW0uCisKKyAgICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFrZTogUmVtb3ZlZC4KKwog
MjAyMi0wMS0wNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjg3Njk4LgpJbmRleDogU291cmNlL1dl
YktpdExlZ2FjeS9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
TGVnYWN5L1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyODc4MTIpCisrKyBTb3VyY2UvV2Vi
S2l0TGVnYWN5L1BsYXRmb3JtRlRXLmNtYWtlCShub25leGlzdGVudCkKQEAgLTEsNDM4ICswLDAg
QEAKLWFkZF9kZWZpbml0aW9ucygtRFVTRV9ESVJFQ1QyRD0xIC1EVVNFX0NVUkw9MSAtRFdFQktJ
VF9FWFBPUlRTPTEpCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfUFJJVkFURV9JTkNMVURFX0RJ
UkVDVE9SSUVTCi0gICAgIiR7V0VCS0lUX0xJQlJBUklFU19ESVJ9L2luY2x1ZGUiCi0pCi1saXN0
KEFQUEVORCBXZWJLaXRMZWdhY3lfU09VUkNFU19DbGFzc2VzCi0gICAgd2luL1dlYkRvd25sb2Fk
Q1VSTC5jcHAKLSAgICB3aW4vV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTZW5kZXJDVVJM
LmNwcAotKQotbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X1BSSVZBVEVfTElCUkFSSUVTCi0gICAg
T3BlblNTTDo6U1NMCi0gICAgRDNEMTEubGliCi0gICAgRHhnaS5saWIKLSAgICBtZnV1aWQubGli
Ci0gICAgc3RybWlpZHMubGliCi0pCi0KLWFkZF9jdXN0b21fY29tbWFuZCgKLSAgICBPVVRQVVQg
JHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2ViS2l0VmVyc2lvbi5oCi0gICAg
TUFJTl9ERVBFTkRFTkNZICR7V0VCS0lUTEVHQUNZX0RJUn0vc2NyaXB0cy9nZW5lcmF0ZS13ZWJr
aXR2ZXJzaW9uLnBsCi0gICAgREVQRU5EUyAke1dFQktJVExFR0FDWV9ESVJ9L21hYy9Db25maWd1
cmF0aW9ucy9WZXJzaW9uLnhjY29uZmlnCi0gICAgQ09NTUFORCAke1BFUkxfRVhFQ1VUQUJMRX0g
JHtXRUJLSVRMRUdBQ1lfRElSfS9zY3JpcHRzL2dlbmVyYXRlLXdlYmtpdHZlcnNpb24ucGwgLS1j
b25maWcgJHtXRUJLSVRMRUdBQ1lfRElSfS9tYWMvQ29uZmlndXJhdGlvbnMvVmVyc2lvbi54Y2Nv
bmZpZyAtLW91dHB1dERpciAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfQotICAg
IFZFUkJBVElNKQotbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X1NPVVJDRVMgJHtXZWJLaXRMZWdh
Y3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2ViS2l0VmVyc2lvbi5oKQotCi1saXN0KEFQUEVORCBX
ZWJLaXRMZWdhY3lfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgIiR7Q01BS0VfQklO
QVJZX0RJUn0vLi4vaW5jbHVkZS9wcml2YXRlIgotICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9Ly4u
L2luY2x1ZGUvcHJpdmF0ZS9KYXZhU2NyaXB0Q29yZSIKLSAgICAiJHtDTUFLRV9CSU5BUllfRElS
fS8uLi9pbmNsdWRlL3ByaXZhdGUvV2ViQ29yZSIKLSAgICAiJHtXRUJLSVRMRUdBQ1lfRElSfS93
aW4iCi0gICAgIiR7V0VCS0lUTEVHQUNZX0RJUn0vd2luL1dlYkNvcmVTdXBwb3J0IgotICAgICIk
e1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbmNsdWRlIgotICAgICIke1dlYktp
dExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzIgotKQotCi1saXN0KEFQUEVO
RCBXZWJLaXRMZWdhY3lfSU5DTFVERVMKLSAgICB3aW4vQ0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcu
aAotICAgIHdpbi9DT01FbnVtVmFyaWFudC5oCi0gICAgd2luL0NPTVByb3BlcnR5QmFnLmgKLSAg
ICB3aW4vQ09NVmFyaWFudFNldHRlci5oCi0gICAgd2luL0NvZGVBbmFseXNpc0NvbmZpZy5oCi0g
ICAgd2luL0RPTUNTU0NsYXNzZXMuaAotICAgIHdpbi9ET01Db3JlQ2xhc3Nlcy5oCi0gICAgd2lu
L0RPTUV2ZW50c0NsYXNzZXMuaAotICAgIHdpbi9ET01IVE1MQ2xhc3Nlcy5oCi0gICAgd2luL0Rl
ZmF1bHREb3dubG9hZERlbGVnYXRlLmgKLSAgICB3aW4vRGVmYXVsdFBvbGljeURlbGVnYXRlLmgK
LSAgICB3aW4vRm9yRWFjaENvQ2xhc3MuaAotICAgIHdpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9s
bGVyLmgKLSAgICB3aW4vTWFyc2hhbGxpbmdIZWxwZXJzLmgKLSAgICB3aW4vTWVtb3J5U3RyZWFt
LmgKLSAgICB3aW4vUHJvZ0lETWFjcm9zLmgKLSAgICB3aW4vV2ViQWN0aW9uUHJvcGVydHlCYWcu
aAotICAgIHdpbi9XZWJBcHBsaWNhdGlvbkNhY2hlLmgKLSAgICB3aW4vV2ViQXJjaGl2ZS5oCi0g
ICAgd2luL1dlYkJhY2tGb3J3YXJkTGlzdC5oCi0gICAgd2luL1dlYkNhY2hlLmgKLSAgICB3aW4v
V2ViQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEuaAotICAgIHdpbi9XZWJDb3JlU3RhdGlzdGljcy5o
Ci0gICAgd2luL1dlYkRhdGFTb3VyY2UuaAotICAgIHdpbi9XZWJEYXRhYmFzZU1hbmFnZXIuaAot
ICAgIHdpbi9XZWJEb2N1bWVudExvYWRlci5oCi0gICAgd2luL1dlYkRvd25sb2FkLmgKLSAgICB3
aW4vV2ViRHJvcFNvdXJjZS5oCi0gICAgd2luL1dlYkVsZW1lbnRQcm9wZXJ0eUJhZy5oCi0gICAg
d2luL1dlYkVycm9yLmgKLSAgICB3aW4vV2ViRnJhbWUuaAotICAgIHdpbi9XZWJGcmFtZVBvbGlj
eUxpc3RlbmVyLmgKLSAgICB3aW4vV2ViR2VvbG9jYXRpb25Qb2xpY3lMaXN0ZW5lci5oCi0gICAg
d2luL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uaAotICAgIHdpbi9XZWJIVE1MUmVwcmVzZW50YXRp
b24uaAotICAgIHdpbi9XZWJIaXN0b3J5LmgKLSAgICB3aW4vV2ViSGlzdG9yeUl0ZW0uaAotICAg
IHdpbi9XZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmgKLSAgICB3aW4vV2ViS2l0Q09NQVBJLmgKLSAg
ICB3aW4vV2ViS2l0Q2xhc3NGYWN0b3J5LmgKLSAgICB3aW4vV2ViS2l0RExMLmgKLSAgICB3aW4v
V2ViS2l0R3JhcGhpY3MuaAotICAgIHdpbi9XZWJLaXRMb2dnaW5nLmgKLSAgICB3aW4vV2ViS2l0
U3RhdGlzdGljcy5oCi0gICAgd2luL1dlYktpdFN0YXRpc3RpY3NQcml2YXRlLmgKLSAgICB3aW4v
V2ViS2l0U3lzdGVtQml0cy5oCi0gICAgd2luL1dlYkxvY2FsaXphYmxlU3RyaW5ncy5oCi0gICAg
d2luL1dlYk11dGFibGVVUkxSZXF1ZXN0LmgKLSAgICB3aW4vV2ViTmF2aWdhdGlvbkRhdGEuaAot
ICAgIHdpbi9XZWJOb3RpZmljYXRpb24uaAotICAgIHdpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIu
aAotICAgIHdpbi9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAotICAgIHdpbi9XZWJQcmVmZXJl
bmNlcy5oCi0gICAgd2luL1dlYlJlc291cmNlLmgKLSAgICB3aW4vV2ViU2NyaXB0T2JqZWN0LmgK
LSAgICB3aW4vV2ViU2NyaXB0V29ybGQuaAotICAgIHdpbi9XZWJTZWN1cml0eU9yaWdpbi5oCi0g
ICAgd2luL1dlYlNlcmlhbGl6ZWRKU1ZhbHVlLmgKLSAgICB3aW4vV2ViVGV4dFJlbmRlcmVyLmgK
LSAgICB3aW4vV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaAotICAgIHdpbi9XZWJVUkxB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZVNlbmRlci5oCi0gICAgd2luL1dlYlVSTENyZWRlbnRpYWwu
aAotICAgIHdpbi9XZWJVUkxQcm90ZWN0aW9uU3BhY2UuaAotICAgIHdpbi9XZWJVUkxSZXNwb25z
ZS5oCi0gICAgd2luL1dlYlVzZXJDb250ZW50VVJMUGF0dGVybi5oCi0gICAgd2luL1dlYlZpZXcu
aAotICAgIHdpbi9XZWJXb3JrZXJzUHJpdmF0ZS5oCi0pCi0KLWxpc3QoQVBQRU5EIFdlYktpdExl
Z2FjeV9TT1VSQ0VTX0NsYXNzZXMKLSAgICB3aW4vQWNjZXNzaWJsZUJhc2UuY3BwCi0gICAgd2lu
L0FjY2Vzc2libGVEb2N1bWVudC5jcHAKLSAgICB3aW4vQWNjZXNzaWJsZUltYWdlLmNwcAotICAg
IHdpbi9BY2Nlc3NpYmxlVGV4dEltcGwuY3BwCi0gICAgd2luL0JhY2tGb3J3YXJkTGlzdC5jcHAK
LSAgICB3aW4vQ0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcuY3BwCi0gICAgd2luL0RPTUNTU0NsYXNz
ZXMuY3BwCi0gICAgd2luL0RPTUNvcmVDbGFzc2VzLmNwcAotICAgIHdpbi9ET01FdmVudHNDbGFz
c2VzLmNwcAotICAgIHdpbi9ET01IVE1MQ2xhc3Nlcy5jcHAKLSAgICB3aW4vRGVmYXVsdERvd25s
b2FkRGVsZWdhdGUuY3BwCi0gICAgd2luL0RlZmF1bHRQb2xpY3lEZWxlZ2F0ZS5jcHAKLSAgICB3
aW4vRm9yRWFjaENvQ2xhc3MuY3BwCi0gICAgd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIu
Y3BwCi0gICAgd2luL01hcnNoYWxsaW5nSGVscGVycy5jcHAKLSAgICB3aW4vTWVtb3J5U3RyZWFt
LmNwcAotICAgIHdpbi9XZWJBY3Rpb25Qcm9wZXJ0eUJhZy5jcHAKLSAgICB3aW4vV2ViQXBwbGlj
YXRpb25DYWNoZS5jcHAKLSAgICB3aW4vV2ViQXJjaGl2ZS5jcHAKLSAgICB3aW4vV2ViQmFja0Zv
cndhcmRMaXN0LmNwcAotICAgIHdpbi9XZWJDYWNoZS5jcHAKLSAgICB3aW4vV2ViQ29yZVN0YXRp
c3RpY3MuY3BwCi0gICAgd2luL1dlYkRhdGFTb3VyY2UuY3BwCi0gICAgd2luL1dlYkRhdGFiYXNl
TWFuYWdlci5jcHAKLSAgICB3aW4vV2ViRG9jdW1lbnRMb2FkZXIuY3BwCi0gICAgd2luL1dlYkRv
d25sb2FkLmNwcAotICAgIHdpbi9XZWJEcm9wU291cmNlLmNwcAotICAgIHdpbi9XZWJFbGVtZW50
UHJvcGVydHlCYWcuY3BwCi0gICAgd2luL1dlYkVycm9yLmNwcAotICAgIHdpbi9XZWJGcmFtZS5j
cHAKLSAgICB3aW4vV2ViRnJhbWVQb2xpY3lMaXN0ZW5lci5jcHAKLSAgICB3aW4vV2ViR2VvbG9j
YXRpb25Qb2xpY3lMaXN0ZW5lci5jcHAKLSAgICB3aW4vV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5j
cHAKLSAgICB3aW4vV2ViSFRNTFJlcHJlc2VudGF0aW9uLmNwcAotICAgIHdpbi9XZWJIaXN0b3J5
LmNwcAotICAgIHdpbi9XZWJIaXN0b3J5SXRlbS5jcHAKLSAgICB3aW4vV2ViSW5zcGVjdG9yLmNw
cAotICAgIHdpbi9XZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmNwcAotICAgIHdpbi9XZWJLaXRDT01B
UEkuY3BwCi0gICAgd2luL1dlYktpdENsYXNzRmFjdG9yeS5jcHAKLSAgICB3aW4vV2ViS2l0RExM
LmNwcAotICAgIHdpbi9XZWJLaXRMb2dnaW5nLmNwcAotICAgIHdpbi9XZWJLaXRNZXNzYWdlTG9v
cC5jcHAKLSAgICB3aW4vV2ViS2l0U3RhdGlzdGljcy5jcHAKLSAgICB3aW4vV2ViS2l0U3lzdGVt
Qml0cy5jcHAKLSAgICB3aW4vV2ViTG9jYWxpemFibGVTdHJpbmdzLmNwcAotICAgIHdpbi9XZWJN
dXRhYmxlVVJMUmVxdWVzdC5jcHAKLSAgICB3aW4vV2ViTmF2aWdhdGlvbkRhdGEuY3BwCi0gICAg
d2luL1dlYk5vZGVIaWdobGlnaHQuY3BwCi0gICAgd2luL1dlYk5vdGlmaWNhdGlvbi5jcHAKLSAg
ICB3aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcAotICAgIHdpbi9XZWJQcmVmZXJlbmNlcy5j
cHAKLSAgICB3aW4vV2ViUmVzb3VyY2UuY3BwCi0gICAgd2luL1dlYlNjcmlwdE9iamVjdC5jcHAK
LSAgICB3aW4vV2ViU2NyaXB0V29ybGQuY3BwCi0gICAgd2luL1dlYlNlY3VyaXR5T3JpZ2luLmNw
cAotICAgIHdpbi9XZWJTZXJpYWxpemVkSlNWYWx1ZS5jcHAKLSAgICB3aW4vV2ViVGV4dFJlbmRl
cmVyLmNwcAotICAgIHdpbi9XZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5jcHAKLSAgICB3
aW4vV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTZW5kZXIuY3BwCi0gICAgd2luL1dlYlVS
TENyZWRlbnRpYWwuY3BwCi0gICAgd2luL1dlYlVSTFByb3RlY3Rpb25TcGFjZS5jcHAKLSAgICB3
aW4vV2ViVVJMUmVzcG9uc2UuY3BwCi0gICAgd2luL1dlYlVzZXJDb250ZW50VVJMUGF0dGVybi5j
cHAKLSAgICB3aW4vV2ViVmlldy5jcHAKLSAgICB3aW4vV2ViV29ya2Vyc1ByaXZhdGUuY3BwCi0K
LSAgICB3aW4vc3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmNwcAotKQotCi1saXN0KEFQUEVO
RCBXZWJLaXRMZWdhY3lfU09VUkNFU19XZWJDb3JlU3VwcG9ydAotICAgIHdpbi9XZWJDb3JlU3Vw
cG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5j
cHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQuaAotICAgIHdp
bi9XZWJDb3JlU3VwcG9ydC9XZWJEZXNrdG9wTm90aWZpY2F0aW9uc0RlbGVnYXRlLmNwcAotICAg
IHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJEZXNrdG9wTm90aWZpY2F0aW9uc0RlbGVnYXRlLmgKLSAg
ICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1
cHBvcnQvV2ViRHJhZ0NsaWVudC5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKLSAgICB3
aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCi0gICAgd2luL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xv
Y2F0aW9uQ2xpZW50LmNwcAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNs
aWVudC5oCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKLSAg
ICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKLSAgICB3aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViSW5zcGVjdG9yRGVsZWdhdGUuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckRlbGVnYXRlLmgKLSAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZv
cm1TdHJhdGVnaWVzLmNwcAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0
ZWdpZXMuaAotICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbHVnaW5JbmZvUHJvdmlkZXIuY3Bw
Ci0gICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsdWdpbkluZm9Qcm92aWRlci5oCi0gICAgd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUuY3BwCi0gICAgd2luL1dlYkNvcmVT
dXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUuaAotKQotCi1pZiAoVVNFX0NGKQotICAgIGxpc3Qo
QVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VTX0NsYXNzZXMKLSAgICAgICAgY2YvV2ViQ29yZVN1
cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Q0YuY3BwCi0gICAgKQotCi0gICAgbGlzdChBUFBFTkQg
V2ViS2l0TGVnYWN5X0xJQlJBUklFUwotICAgICAgICAke0NPUkVGT1VOREFUSU9OX0xJQlJBUll9
Ci0gICAgKQotZW5kaWYgKCkKLQotaWYgKENPTVBJTEVSX0lTX0dDQ19PUl9DTEFORykKLSAgICBX
RUJLSVRfQUREX1RBUkdFVF9DWFhfRkxBR1MoV2ViS2l0TGVnYWN5IC1Xbm8tb3ZlcmxvYWRlZC12
aXJ0dWFsKQotZW5kaWYgKCkKLQotbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X1NPVVJDRVMgJHtX
ZWJLaXRMZWdhY3lfSU5DTFVERVN9ICR7V2ViS2l0TGVnYWN5X1NPVVJDRVNfQ2xhc3Nlc30gJHtX
ZWJLaXRMZWdhY3lfU09VUkNFU19XZWJDb3JlU3VwcG9ydH0pCi0KLXNvdXJjZV9ncm91cChJbmNs
dWRlcyBGSUxFUyAke1dlYktpdExlZ2FjeV9JTkNMVURFU30pCi1zb3VyY2VfZ3JvdXAoQ2xhc3Nl
cyBGSUxFUyAke1dlYktpdExlZ2FjeV9TT1VSQ0VTX0NsYXNzZXN9KQotc291cmNlX2dyb3VwKFdl
YkNvcmVTdXBwb3J0IEZJTEVTICR7V2ViS2l0TGVnYWN5X1NPVVJDRVNfV2ViQ29yZVN1cHBvcnR9
KQotCi0jIEJ1aWxkIHRoZSBDT00gaW50ZXJmYWNlOgotbWFjcm8oR0VORVJBVEVfSU5URVJGQUNF
IF9pbmZpbGUgX2RlZmluZXMgX2RlcGVuZHMpCi0gICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChf
ZmlsZXdlICR7X2luZmlsZX0gTkFNRV9XRSkKLSAgICBhZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAg
ICAgIE9VVFBVVCAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNl
cy8ke19maWxld2V9LmgKLSAgICAgICAgTUFJTl9ERVBFTkRFTkNZICR7X2luZmlsZX0KLSAgICAg
ICAgREVQRU5EUyAke19kZXBlbmRzfQotICAgICAgICBDT01NQU5EIG1pZGwuZXhlIC9JICIke0NN
QUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vd2luL0ludGVyZmFjZXMiIC9JICIke0NNQUtFX0NVUlJF
TlRfU09VUkNFX0RJUn0vd2luL0ludGVyZmFjZXMvQWNjZXNzaWJsZTIiIC9JICIke1dlYktpdExl
Z2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbmNsdWRlIiAvSSAiJHtDTUFLRV9DVVJSRU5UX1NP
VVJDRV9ESVJ9L3dpbiIgL1dYIC9jaGFyIHNpZ25lZCAvZW52IHdpbjMyIC90bGIgIiR7Q01BS0Vf
UlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfS8ke19maWxld2V9LnRsYiIgL291dCAiJHtXZWJLaXRM
ZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcyIgL2ggIiR7V2ViS2l0TGVnYWN5
X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvJHtfZmlsZXdlfS5oIiAvaWlkICIke19m
aWxld2V9X2kuYyIgJHtfZGVmaW5lc30gIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke19p
bmZpbGV9IgotICAgICAgICBVU0VTX1RFUk1JTkFMIFZFUkJBVElNKQotICAgIHNldF9zb3VyY2Vf
ZmlsZXNfcHJvcGVydGllcygke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRl
cmZhY2VzLyR7X2ZpbGV3ZX0uaCBQUk9QRVJUSUVTIEdFTkVSQVRFRCBUUlVFKQotICAgIHNldF9z
b3VyY2VfZmlsZXNfcHJvcGVydGllcygke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElS
fS9JbnRlcmZhY2VzLyR7X2ZpbGV3ZX1faS5jIFBST1BFUlRJRVMgR0VORVJBVEVEIFRSVUUpCi1l
bmRtYWNybygpCi0KLXNldChNSURMX0RFRklORVMgL0RcIFwiX19QUk9EVUNUSU9OX189MDFcIikK
LQotc2V0KFdFQktJVExFR0FDWV9JRExfREVQRU5ERU5DSUVTCi0gICAgd2luL0ludGVyZmFjZXMv
QWNjZXNzaWJsZUNvbXBhcmFibGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvRE9NQ1NTLmlkbAot
ICAgIHdpbi9JbnRlcmZhY2VzL0RPTUNvcmUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvRE9NRXZl
bnRzLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0RPTUV4dGVuc2lvbnMuaWRsCi0gICAgd2luL0lu
dGVyZmFjZXMvRE9NSFRNTC5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9ET01Qcml2YXRlLmlkbAot
ICAgIHdpbi9JbnRlcmZhY2VzL0RPTVJhbmdlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0RPTVdp
bmRvdy5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JR0VOX0RPTU9iamVjdC5pZGwKLSAgICB3aW4v
SW50ZXJmYWNlcy9JV2ViQXJjaGl2ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViQmFja0Zv
cndhcmRMaXN0LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJCYWNrRm9yd2FyZExpc3RQcml2
YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJDYWNoZS5pZGwKLSAgICB3aW4vSW50ZXJm
YWNlcy9JV2ViQ29yZVN0YXRpc3RpY3MuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkRhdGFT
b3VyY2UuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkRhdGFiYXNlTWFuYWdlci5pZGwKLSAg
ICB3aW4vSW50ZXJmYWNlcy9JV2ViRGVza3RvcE5vdGlmaWNhdGlvbnNEZWxlZ2F0ZS5pZGwKLSAg
ICB3aW4vSW50ZXJmYWNlcy9JV2ViRG9jdW1lbnQuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdl
YkRvd25sb2FkLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJFZGl0aW5nRGVsZWdhdGUuaWRs
Ci0gICAgd2luL0ludGVyZmFjZXMvSVdlYkVtYmVkZGVkVmlldy5pZGwKLSAgICB3aW4vSW50ZXJm
YWNlcy9JV2ViRXJyb3IuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkVycm9yUHJpdmF0ZS5p
ZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRm9ybURlbGVnYXRlLmlkbAotICAgIHdpbi9JbnRl
cmZhY2VzL0lXZWJGcmFtZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRnJhbWVMb2FkRGVs
ZWdhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0
ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRnJhbWVMb2FkRGVsZWdhdGVQcml2YXRlMi5p
ZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViRnJhbWVQcml2YXRlLmlkbAotICAgIHdpbi9JbnRl
cmZhY2VzL0lXZWJGcmFtZVZpZXcuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkdlb2xvY2F0
aW9uUG9saWN5TGlzdGVuZXIuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkdlb2xvY2F0aW9u
UG9zaXRpb24uaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkdlb2xvY2F0aW9uUHJvdmlkZXIu
aWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkhUTUxSZXByZXNlbnRhdGlvbi5pZGwKLSAgICB3
aW4vSW50ZXJmYWNlcy9JV2ViSFRUUFVSTFJlc3BvbnNlLmlkbAotICAgIHdpbi9JbnRlcmZhY2Vz
L0lXZWJIaXN0b3J5LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJIaXN0b3J5RGVsZWdhdGUu
aWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYkhpc3RvcnlJdGVtLmlkbAotICAgIHdpbi9JbnRl
cmZhY2VzL0lXZWJIaXN0b3J5SXRlbVByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdl
Ykhpc3RvcnlQcml2YXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJJbnNwZWN0b3IuaWRs
Ci0gICAgd2luL0ludGVyZmFjZXMvSVdlYkluc3BlY3RvclByaXZhdGUuaWRsCi0gICAgd2luL0lu
dGVyZmFjZXMvSVdlYkphdmFTY3JpcHRDb2xsZWN0b3IuaWRsCi0gICAgd2luL0ludGVyZmFjZXMv
SVdlYktpdFN0YXRpc3RpY3MuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYk11dGFibGVVUkxS
ZXF1ZXN0LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJNdXRhYmxlVVJMUmVxdWVzdFByaXZh
dGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYk5hdmlnYXRpb25EYXRhLmlkbAotICAgIHdp
bi9JbnRlcmZhY2VzL0lXZWJOb3RpZmljYXRpb24uaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdl
Yk5vdGlmaWNhdGlvbkNlbnRlci5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViTm90aWZpY2F0
aW9uT2JzZXJ2ZXIuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlBvbGljeURlbGVnYXRlLmlk
bAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJQb2xpY3lEZWxlZ2F0ZVByaXZhdGUuaWRsCi0gICAg
d2luL0ludGVyZmFjZXMvSVdlYlByZWZlcmVuY2VzLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lX
ZWJQcmVmZXJlbmNlc1ByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSVdlYlJlc291cmNl
LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZS5pZGwKLSAg
ICB3aW4vSW50ZXJmYWNlcy9JV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGVQcml2YXRlLmlkbAotICAg
IHdpbi9JbnRlcmZhY2VzL0lXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZVByaXZhdGUyLmlkbAotICAg
IHdpbi9JbnRlcmZhY2VzL0lXZWJTY3JpcHRPYmplY3QuaWRsCi0gICAgd2luL0ludGVyZmFjZXMv
SVdlYlNjcmlwdFdvcmxkLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJTZWN1cml0eU9yaWdp
bi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViU2VyaWFsaXplZEpTVmFsdWUuaWRsCi0gICAg
d2luL0ludGVyZmFjZXMvSVdlYlNlcmlhbGl6ZWRKU1ZhbHVlUHJpdmF0ZS5pZGwKLSAgICB3aW4v
SW50ZXJmYWNlcy9JV2ViVGV4dFJlbmRlcmVyLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJV
SURlbGVnYXRlLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJVSURlbGVnYXRlMi5pZGwKLSAg
ICB3aW4vSW50ZXJmYWNlcy9JV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaWRsCi0gICAgd2luL0ludGVy
ZmFjZXMvSVdlYlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmlkbAotICAgIHdpbi9JbnRlcmZh
Y2VzL0lXZWJVUkxSZXF1ZXN0LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJVUkxSZXNwb25z
ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVVJMUmVzcG9uc2VQcml2YXRlLmlkbAotICAg
IHdpbi9JbnRlcmZhY2VzL0lXZWJVbmRvTWFuYWdlci5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9J
V2ViVW5kb1RhcmdldC5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViVXNlckNvbnRlbnRVUkxQ
YXR0ZXJuLmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0lXZWJWaWV3LmlkbAotICAgIHdpbi9JbnRl
cmZhY2VzL0lXZWJWaWV3UHJpdmF0ZS5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9JV2ViV29ya2Vy
c1ByaXZhdGUuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvSmF2YVNjcmlwdENvcmVBUElUeXBlcy5p
ZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9XZWJLaXQuaWRsCi0gICAgd2luL0ludGVyZmFjZXMvV2Vi
U2Nyb2xsYmFyVHlwZXMuaWRsCi0KLSAgICB3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nl
c3NpYmxlMi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlMl8y
LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0FjY2Vzc2libGVBcHBsaWNhdGlv
bi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlRWRpdGFibGVU
ZXh0LmlkbAotICAgIHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0FjY2Vzc2libGVSZWxhdGlv
bi5pZGwKLSAgICB3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlU3RhdGVzLmlk
bAotICAgIHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0FjY2Vzc2libGVUZXh0LmlkbAotICAg
IHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0FjY2Vzc2libGVUZXh0Mi5pZGwKLSAgICB3aW4v
SW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9JQTJDb21tb25UeXBlcy5pZGwKLSAgICAiJHtXZWJLaXRM
ZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vaW5jbHVkZS9hdXRvdmVyc2lvbi5oIgotKQotCi1h
ZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgT1VUUFVUICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09V
UkNFU19ESVJ9L2luY2x1ZGUvYXV0b3ZlcnNpb24uaAotICAgIFdPUktJTkdfRElSRUNUT1JZICR7
Q01BS0VfU09VUkNFX0RJUn0KLSAgICBDT01NQU5EICR7UEVSTF9FWEVDVVRBQkxFfSAke1dFQktJ
VF9MSUJSQVJJRVNfRElSfS90b29scy9zY3JpcHRzL2F1dG8tdmVyc2lvbi5wbCAke1dlYktpdExl
Z2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfQotICAgIFZFUkJBVElNKQotCi1HRU5FUkFURV9JTlRF
UkZBQ0Uod2luL0ludGVyZmFjZXMvV2ViS2l0LmlkbCAke01JRExfREVGSU5FU30gIiR7V0VCS0lU
TEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50ZXJm
YWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlQXBwbGljYXRpb24uaWRsICR7TUlETF9ERUZJTkVT
fSAiJHtXRUJLSVRMRUdBQ1lfSURMX0RFUEVOREVOQ0lFU30iKQotR0VORVJBVEVfSU5URVJGQUNF
KHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0FjY2Vzc2libGUyLmlkbCAke01JRExfREVGSU5F
U30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFD
RSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlMl8yLmlkbCAke01JRExfREVG
SU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVS
RkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3NpYmxlUmVsYXRpb24uaWRsICR7
TUlETF9ERUZJTkVTfSAiJHtXRUJLSVRMRUdBQ1lfSURMX0RFUEVOREVOQ0lFU30iKQotR0VORVJB
VEVfSU5URVJGQUNFKHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0FjY2Vzc2libGVTdGF0ZXMu
aWRsICR7TUlETF9ERUZJTkVTfSAiJHtXRUJLSVRMRUdBQ1lfSURMX0RFUEVOREVOQ0lFU30iKQot
R0VORVJBVEVfSU5URVJGQUNFKHdpbi9JbnRlcmZhY2VzL0FjY2Vzc2libGUyL0lBMkNvbW1vblR5
cGVzLmlkbCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9ERVBFTkRFTkNJRVN9
IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi9BY2Nlc3Np
YmxlRWRpdGFibGVUZXh0LmlkbCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVHQUNZX0lETF9E
RVBFTkRFTkNJRVN9IikKLUdFTkVSQVRFX0lOVEVSRkFDRSh3aW4vSW50ZXJmYWNlcy9BY2Nlc3Np
YmxlMi9BY2Nlc3NpYmxlVGV4dC5pZGwgJHtNSURMX0RFRklORVN9ICIke1dFQktJVExFR0FDWV9J
RExfREVQRU5ERU5DSUVTfSIpCi1HRU5FUkFURV9JTlRFUkZBQ0Uod2luL0ludGVyZmFjZXMvQWNj
ZXNzaWJsZTIvQWNjZXNzaWJsZVRleHQyLmlkbCAke01JRExfREVGSU5FU30gIiR7V0VCS0lUTEVH
QUNZX0lETF9ERVBFTkRFTkNJRVN9IikKLQotYWRkX2xpYnJhcnkoV2ViS2l0TGVnYWN5R1VJRCBT
VEFUSUMKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNl
cy9XZWJLaXQuaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50
ZXJmYWNlcy9BY2Nlc3NpYmxlQXBwbGljYXRpb24uaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVS
SVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlMi5oIgotICAgICIke1dlYktp
dExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGUyXzIuaCIK
LSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nl
c3NpYmxlUmVsYXRpb24uaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJ
Un0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlU3RhdGVzLmgiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RF
UklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvSUEyQ29tbW9uVHlwZXMuaCIKLSAgICAiJHtX
ZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlRWRp
dGFibGVUZXh0LmgiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0lu
dGVyZmFjZXMvQWNjZXNzaWJsZVRleHQuaCIKLSAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9T
T1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlVGV4dDIuaCIKLSAgICAiJHtXZWJLaXRM
ZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9XZWJLaXRfaS5jIgotICAgICIk
e1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVB
cHBsaWNhdGlvbl9pLmMiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9
L0ludGVyZmFjZXMvQWNjZXNzaWJsZTJfaS5jIgotICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVE
X1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGUyXzJfaS5jIgotICAgICIke1dlYktp
dExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVSZWxhdGlv
bl9pLmMiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFj
ZXMvQWNjZXNzaWJsZUVkaXRhYmxlVGV4dF9pLmMiCi0gICAgIiR7V2ViS2l0TGVnYWN5X0RFUklW
RURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZVRleHRfaS5jIgotICAgICIke1dl
YktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzL0FjY2Vzc2libGVUZXh0
Ml9pLmMiCi0pCi1zZXRfdGFyZ2V0X3Byb3BlcnRpZXMoV2ViS2l0TGVnYWN5R1VJRCBQUk9QRVJU
SUVTIE9VVFBVVF9OQU1FIFdlYktpdEdVSUQke0RFQlVHX1NVRkZJWH0pCi0KLWxpc3QoQVBQRU5E
IFdlYktpdExlZ2FjeV9QUklWQVRFX0xJQlJBUklFUwotICAgIENvbWN0bDMyCi0gICAgQ29tc3Vw
cAotICAgIENyeXB0MzIKLSAgICBEMmQxCi0gICAgRHdyaXRlCi0gICAgRHhndWlkCi0gICAgSXBo
bHBhcGkKLSAgICBQc2FwaQotICAgIFJwY3J0NAotICAgIFNobHdhcGkKLSAgICBVc3AxMAotICAg
IFZlcnNpb24KLSAgICBXZWJLaXRHVUlEJHtERUJVR19TVUZGSVh9Ci0gICAgV2luZG93c0NvZGVj
cwotICAgIFdpbm1tCi0pCi0KLXNldChDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTICIke0NNQUtF
X1NIQVJFRF9MSU5LRVJfRkxBR1N9IC9TVUJTWVNURU06V0lORE9XUyIpCi1zZXQoQ01BS0VfRVhF
X0xJTktFUl9GTEFHUyAiJHtDTUFLRV9FWEVfTElOS0VSX0ZMQUdTfSAvU1VCU1lTVEVNOldJTkRP
V1MiKQotCi0jIFdlIG5lZWQgdGhlIHdlYmtpdCBsaWJyYXJpZXMgdG8gY29tZSBiZWZvcmUgdGhl
IHN5c3RlbSBkZWZhdWx0IGxpYnJhcmllcyB0byBwcmV2ZW50IHN5bWJvbCBjb25mbGljdHMgd2l0
aCB1dWlkLmxpYi4KLSMgVG8gZG8gdGhpcyB3ZSBhZGQgc3lzdGVtIGRlZmF1bHQgbGlicyBhcyB3
ZWJraXQgbGlicyBhbmQgemVybyBvdXQgc3lzdGVtIGRlZmF1bHQgbGlicy4KLXN0cmluZyhSRVBM
QUNFICIgIiAiXDsiIENYWF9MSUJTICR7Q01BS0VfQ1hYX1NUQU5EQVJEX0xJQlJBUklFU30pCi1s
aXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfTElCUkFSSUVTICR7Q1hYX0xJQlN9KQotc2V0KENNQUtF
X0NYWF9TVEFOREFSRF9MSUJSQVJJRVMgIiIpCi0KLXNldChDTUFLRV9TSEFSRURfTElOS0VSX0ZM
QUdTICIke0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1N9ICR7TVNWQ19SVU5USU1FX0xJTktFUl9G
TEFHU30iKQotCi0jIElmIHRoaXMgZGlyZWN0b3J5IGlzbid0IGNyZWF0ZWQgYmVmb3JlIG1pZGwg
cnVucyBhbmQgYXR0ZW1wdHMgdG8gb3V0cHV0IFdlYktpdC50bGIsCi0jIEl0IGZhaWxzIHdpdGgg
YW4gdW51c3VhbCBlcnJvciAtIG1pZGwgZmFpbGVkIC0gZmFpbGVkIHRvIHNhdmUgYWxsIGNoYW5n
ZXMKLWZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9
KQotZmlsZShNQUtFX0RJUkVDVE9SWSAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElS
fS9JbnRlcmZhY2VzKQotCi1zZXQoV2ViS2l0TGVnYWN5X1BVQkxJQ19GUkFNRVdPUktfSEVBREVS
UwotICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNj
ZXNzaWJsZTIuaAotICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVy
ZmFjZXMvQWNjZXNzaWJsZTJfMi5oCi0gICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VT
X0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlQXBwbGljYXRpb24uaAotICAgICR7V2ViS2l0TGVn
YWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZUVkaXRhYmxlVGV4
dC5oCi0gICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9B
Y2Nlc3NpYmxlUmVsYXRpb24uaAotICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19E
SVJ9L0ludGVyZmFjZXMvQWNjZXNzaWJsZVN0YXRlcy5oCi0gICAgJHtXZWJLaXRMZWdhY3lfREVS
SVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlVGV4dC5oCi0gICAgJHtXZWJL
aXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNlcy9BY2Nlc3NpYmxlVGV4dDIu
aAotICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMvSUEy
Q29tbW9uVHlwZXMuaAotICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0lu
dGVyZmFjZXMvV2ViS2l0LmgKLQotICAgIHdpbi9BY2Nlc3NpYmxlQmFzZS5oCi0gICAgd2luL0Fj
Y2Vzc2libGVEb2N1bWVudC5oCi0gICAgd2luL0NGRGljdGlvbmFyeVByb3BlcnR5QmFnLmgKLSAg
ICB3aW4vV2ViRGF0YVNvdXJjZS5oCi0gICAgd2luL1dlYkZyYW1lLmgKLSAgICB3aW4vV2ViS2l0
Q09NQVBJLmgKLSkKLQotV0VCS0lUX01BS0VfRk9SV0FSRElOR19IRUFERVJTKFdlYktpdExlZ2Fj
eUdVSUQKLSAgICBUQVJHRVRfTkFNRSBXZWJLaXRMZWdhY3lGcmFtZXdvcmtIZWFkZXJzCi0gICAg
REVTVElOQVRJT04gJHtXZWJLaXRMZWdhY3lfRlJBTUVXT1JLX0hFQURFUlNfRElSfS9XZWJLaXRM
ZWdhY3kKLSAgICBGSUxFUyAke1dlYktpdExlZ2FjeV9QVUJMSUNfRlJBTUVXT1JLX0hFQURFUlN9
Ci0gICAgRkxBVFRFTkVECi0pCi0KLXNldChXZWJLaXRMZWdhY3lfT1VUUFVUX05BTUUKLSAgICBX
ZWJLaXQke0RFQlVHX1NVRkZJWH0KLSkKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDIyLTAxLTA3ICBTYW0gV2VpbmlnICA8
d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgRGlyZWN0MkQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDk5OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERpcmVjdDJE
IGFuZCBGVFcgaGF2ZSBub3QgYmVlbiBidWlsZGluZyBmb3Igb3ZlciBhIHllYXIuIEl0IGlzCisg
ICAgICAgIHRpbWUgdG8gcmVtb3ZlIHRoZW0uCisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYlZpZXc6OmRlbGV0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJWaWV3Ojpl
bnN1cmVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViVmlldzo6c2Nyb2xsQmFja2luZ1N0b3Jl
KToKKyAgICAgICAgKFdlYlZpZXc6OnNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYlZpZXc6OnVw
ZGF0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJWaWV3OjpwYWludCk6CisgICAgICAgIChX
ZWJWaWV3OjpwYWludEludG9CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViVmlldzo6V2ViVmll
d1duZFByb2MpOgorICAgICAgICAoV2ViVmlldzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKToK
KyAgICAgICAgKFdlYlZpZXc6OnBhaW50V2l0aERpcmVjdDJEKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJWaWV3Lmg6CisKIDIwMjItMDEtMDYgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxl
LmNvbT4KIAogICAgICAgICBIYXZlIENhY2hlZFJhd1Jlc291cmNlQ2xpZW50IGFuZCByZWxhdGVk
IG5ldHdvcmtpbmcgYWN0b3JzIHVzZSBTaGFyZWRCdWZmZXIuCkluZGV4OiBTb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSwxMCArMjA5LDYgQEAKICNp
bmNsdWRlICJBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oIgogI2VuZGlmCiAKLSNpZiBV
U0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5o
PgotI2VuZGlmCi0KICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAjaW5jbHVkZSA8V2ViQ29y
ZS9GdWxsU2NyZWVuQ29udHJvbGxlci5oPgogI2VuZGlmCkBAIC04NTUsMTEgKzg1MSw2IEBAIHZv
aWQgV2ViVmlldzo6ZGVsZXRlQmFja2luZ1N0b3JlKCkKICAgICAgICAgbV9kZWxldGVCYWNraW5n
U3RvcmVUaW1lckFjdGl2ZSA9IGZhbHNlOwogICAgIH0KICAgICBtX2JhY2tpbmdTdG9yZUJpdG1h
cCA9IG51bGxwdHI7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIG1fYmFja2luZ1N0b3JlRDJEQml0
bWFwID0gbnVsbHB0cjsKLSAgICBtX2JhY2tpbmdTdG9yZUdkaUludGVyb3AgPSBudWxscHRyOwot
ICAgIG1fYmFja2luZ1N0b3JlUmVuZGVyVGFyZ2V0ID0gbnVsbHB0cjsKLSNlbmRpZgogICAgIG1f
YmFja2luZ1N0b3JlRGlydHlSZWdpb24gPSBudWxscHRyOwogICAgIG1fYmFja2luZ1N0b3JlU2l6
ZS5jeCA9IG1fYmFja2luZ1N0b3JlU2l6ZS5jeSA9IDA7CiB9CkBAIC04NzMsMjAgKzg2NCw2IEBA
IGJvb2wgV2ViVmlldzo6ZW5zdXJlQmFja2luZ1N0b3JlKCkKICAgICBpZiAod2lkdGggPiAwICYm
IGhlaWdodCA+IDAgJiYgKHdpZHRoICE9IG1fYmFja2luZ1N0b3JlU2l6ZS5jeCB8fCBoZWlnaHQg
IT0gbV9iYWNraW5nU3RvcmVTaXplLmN5KSkgewogICAgICAgICBkZWxldGVCYWNraW5nU3RvcmUo
KTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgYXV0byBiaXRtYXBTaXplID0gRDJEMTo6
U2l6ZUYod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGF1dG8gcGl4ZWxTaXplID0gRDJEMTo6U2l6
ZVUod2lkdGgsIGhlaWdodCk7Ci0KLSAgICAgICAgaWYgKCFtX3JlbmRlclRhcmdldCkgewotICAg
ICAgICAgICAgLy8gQ3JlYXRlIGEgRGlyZWN0MkQgcmVuZGVyIHRhcmdldC4KLSAgICAgICAgICAg
IGF1dG8gcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IEQyRDE6OlJlbmRlclRhcmdldFByb3BlcnRp
ZXMoKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldFByb3BlcnRpZXMudXNhZ2UgPSBEMkQxX1JF
TkRFUl9UQVJHRVRfVVNBR0VfR0RJX0NPTVBBVElCTEU7Ci0gICAgICAgICAgICBhdXRvIGh3bmRS
ZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gRDJEMTo6SHduZFJlbmRlclRhcmdldFByb3BlcnRpZXMo
bV92aWV3V2luZG93LCBwaXhlbFNpemUpOwotICAgICAgICAgICAgSFJFU1VMVCBociA9IEdyYXBo
aWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVId25kUmVuZGVyVGFyZ2V0KCZyZW5k
ZXJUYXJnZXRQcm9wZXJ0aWVzLCAmaHduZFJlbmRlclRhcmdldFByb3BlcnRpZXMsICZtX3JlbmRl
clRhcmdldCk7Ci0gICAgICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgbV9iYWNraW5nU3Rv
cmVTaXplLmN4ID0gd2lkdGg7CiAgICAgICAgIG1fYmFja2luZ1N0b3JlU2l6ZS5jeSA9IGhlaWdo
dDsKICAgICAgICAgQml0bWFwSW5mbyBiaXRtYXBJbmZvID0gQml0bWFwSW5mbzo6Y3JlYXRlQm90
dG9tVXAoSW50U2l6ZShtX2JhY2tpbmdTdG9yZVNpemUpKTsKQEAgLTg5NCwxNiArODcxLDYgQEAg
Ym9vbCBXZWJWaWV3OjplbnN1cmVCYWNraW5nU3RvcmUoKQogICAgICAgICB2b2lkKiBwaXhlbHMg
PSBOVUxMOwogICAgICAgICBtX2JhY2tpbmdTdG9yZUJpdG1hcCA9IFNoYXJlZEdESU9iamVjdDxI
QklUTUFQPjo6Y3JlYXRlKGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYml0
bWFwSW5mbywgRElCX1JHQl9DT0xPUlMsICZwaXhlbHMsIDAsIDApKSk7CiAKLSNpZiBVU0UoRElS
RUNUMkQpCi0gICAgICAgIEhSRVNVTFQgaHIgPSBtX3JlbmRlclRhcmdldC0+Q3JlYXRlQ29tcGF0
aWJsZVJlbmRlclRhcmdldCgmYml0bWFwU2l6ZSwgJnBpeGVsU2l6ZSwgbnVsbHB0ciwgRDJEMV9D
T01QQVRJQkxFX1JFTkRFUl9UQVJHRVRfT1BUSU9OU19HRElfQ09NUEFUSUJMRSwgJm1fYmFja2lu
Z1N0b3JlUmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0KLSAgICAgICAgaHIgPSBtX2JhY2tpbmdTdG9yZVJlbmRlclRhcmdldC0+R2V0Qml0bWFw
KCZtX2JhY2tpbmdTdG9yZUQyREJpdG1hcCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NF
RURFRChocikpOwotCi0gICAgICAgIGhyID0gbV9iYWNraW5nU3RvcmVSZW5kZXJUYXJnZXQtPlF1
ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEMkQxR2RpSW50ZXJvcFJlbmRlclRhcmdldCksICh2b2lk
KiopJm1fYmFja2luZ1N0b3JlR2RpSW50ZXJvcCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNV
Q0NFRURFRChocikpOwotI2VuZGlmCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAt
OTc4LDE2ICs5NDUsNiBAQCB2b2lkIFdlYlZpZXc6OnNjcm9sbEJhY2tpbmdTdG9yZShGcmFtZVZp
CiAgICAgRmxvYXRSZWN0IGNsaXBSZWN0KGxvZ2ljYWxDbGlwUmVjdCk7CiAgICAgY2xpcFJlY3Qu
c2NhbGUoc2NhbGVGYWN0b3IpOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIFJFQ1Qgc2Nyb2xs
UmVjdFdpbihzY3JvbGxWaWV3UmVjdCk7Ci0gICAgUkVDVCBjbGlwUmVjdFdpbihlbmNsb3NpbmdJ
bnRSZWN0KGNsaXBSZWN0KSk7Ci0gICAgUkVDVCB1cGRhdGVSZWN0OwotICAgIDo6U2Nyb2xsV2lu
ZG93RXgobV92aWV3V2luZG93LCBkeCwgZHksICZzY3JvbGxSZWN0V2luLCAmY2xpcFJlY3RXaW4s
IG51bGxwdHIsICZ1cGRhdGVSZWN0LCAwKTsKLSAgICA6OkludmFsaWRhdGVSZWN0KG1fdmlld1dp
bmRvdywgJnVwZGF0ZVJlY3QsIEZBTFNFKTsKLQotICAgIGlmIChtX3VpRGVsZWdhdGVQcml2YXRl
KQotICAgICAgICBtX3VpRGVsZWdhdGVQcml2YXRlLT53ZWJWaWV3U2Nyb2xsZWQodGhpcyk7Ci0j
ZWxzZQogICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgewogICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGJlIGRvaW5nIHNvbWV0aGluZyBzbWFydGVyIGhlcmUsIGxpa2UgbW92
aW5nIHRpbGVzIGFyb3VuZCBhbmQgcGFpbnRpbmcKICAgICAgICAgLy8gYW55IG5ld2x5LWV4cG9z
ZWQgdGlsZXMuIDxodHRwOi8vd2Via2l0Lm9yZy9iLzUyNzE0PgpAQCAtMTAzOSw3ICs5OTYsNiBA
QCB2b2lkIFdlYlZpZXc6OnNjcm9sbEJhY2tpbmdTdG9yZShGcmFtZVZpCiAKICAgICAvLyBDbGVh
biB1cC4KICAgICA6OlNlbGVjdE9iamVjdChiaXRtYXBEQy5nZXQoKSwgb2xkQml0bWFwKTsKLSNl
bmRpZiAvLyBVU0UoRElSRUNUMkQpCiB9CiAKIHZvaWQgV2ViVmlldzo6c2l6ZUNoYW5nZWQoY29u
c3QgSW50U2l6ZSYgbmV3U2l6ZSkKQEAgLTEwNjcsMjAgKzEwMjMsNiBAQCB2b2lkIFdlYlZpZXc6
OnNpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmCiAgICAgaWYgKG1fYWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHQpCiAgICAgICAgIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPnJl
c2l6ZVJvb3RMYXllcihuZXdTaXplKTsKICNlbmRpZgotCi0jaWYgVVNFKERJUkVDVDJEKQotICAg
IGlmIChtX3JlbmRlclRhcmdldCkgewotICAgICAgICBtX3JlbmRlclRhcmdldC0+UmVzaXplKG5l
d1NpemUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIGEgRGlyZWN0
MkQgcmVuZGVyIHRhcmdldC4KLSAgICBhdXRvIHJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBEMkQx
OjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7Ci0gICAgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy51
c2FnZSA9IEQyRDFfUkVOREVSX1RBUkdFVF9VU0FHRV9HRElfQ09NUEFUSUJMRTsKLSAgICBhdXRv
IGh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gRDJEMTo6SHduZFJlbmRlclRhcmdldFByb3Bl
cnRpZXMobV92aWV3V2luZG93LCBuZXdTaXplLCBEMkQxX1BSRVNFTlRfT1BUSU9OU19JTU1FRElB
VEVMWSk7Ci0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgp
LT5DcmVhdGVId25kUmVuZGVyVGFyZ2V0KCZyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLCAmaHduZFJl
bmRlclRhcmdldFByb3BlcnRpZXMsICZtX3JlbmRlclRhcmdldCk7Ci0gICAgQVNTRVJUKFNVQ0NF
RURFRChocikpOwotI2VuZGlmCiB9CiAKIGJvb2wgV2ViVmlldzo6ZHBpQ2hhbmdlZChmbG9hdCwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKQEAgLTExNDEsMTMgKzEwODMsNiBAQCB2
b2lkIFdlYlZpZXc6OnVwZGF0ZUJhY2tpbmdTdG9yZShGcmFtZVZpCiAKICAgICBMT0NBTF9HRElf
Q09VTlRFUigwLCBfX0ZVTkNUSU9OX18pOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIGlmICgh
bV9iYWNraW5nU3RvcmVHZGlJbnRlcm9wKSB7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBtX2JhY2tp
bmdTdG9yZVJlbmRlclRhcmdldC0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQyRDFHZGlJbnRl
cm9wUmVuZGVyVGFyZ2V0KSwgKHZvaWQqKikmbV9iYWNraW5nU3RvcmVHZGlJbnRlcm9wKTsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQotI2VuZGlmCi0KICAg
ICBHRElPYmplY3Q8SERDPiBiaXRtYXBEQ09iamVjdDsKIAogICAgIEhEQyBiaXRtYXBEQyA9IGRj
OwpAQCAtMTE1OCwxMCArMTA5Myw2IEBAIHZvaWQgV2ViVmlldzo6dXBkYXRlQmFja2luZ1N0b3Jl
KEZyYW1lVmkKICAgICAgICAgYml0bWFwREMgPSBiaXRtYXBEQ09iamVjdC5nZXQoKTsKICAgICAg
ICAgb2xkQml0bWFwID0gOjpTZWxlY3RPYmplY3QoYml0bWFwREMsIG1fYmFja2luZ1N0b3JlQml0
bWFwLT5nZXQoKSk7CiAgICAgICAgIEFTU0VSVChvbGRCaXRtYXApOwotI2lmIFVTRShESVJFQ1Qy
RCkKLSAgICAgICAgSFJFU1VMVCBociA9IG1fYmFja2luZ1N0b3JlR2RpSW50ZXJvcC0+R2V0REMo
RDJEMV9EQ19JTklUSUFMSVpFX01PREVfQ09QWSwgJmJpdG1hcERDKTsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0jZW5kaWYKICAgICB9CiAKICAgICBpZiAobV9iYWNr
aW5nU3RvcmVCaXRtYXAgJiYgKG1fYmFja2luZ1N0b3JlRGlydHlSZWdpb24gfHwgYmFja2luZ1N0
b3JlQ29tcGxldGVseURpcnR5KSkgewpAQCAtMTE4NSwxMiArMTExNiw4IEBAIHZvaWQgV2ViVmll
dzo6dXBkYXRlQmFja2luZ1N0b3JlKEZyYW1lVmkKICAgICAgICAgbV9iYWNraW5nU3RvcmVEaXJ0
eVJlZ2lvbiA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKCFkYykgeworICAgIGlmICghZGMp
CiAgICAgICAgIDo6U2VsZWN0T2JqZWN0KGJpdG1hcERDLCBvbGRCaXRtYXApOwotI2lmIFVTRShE
SVJFQ1QyRCkKLSAgICAgICAgbV9iYWNraW5nU3RvcmVHZGlJbnRlcm9wLT5SZWxlYXNlREMobnVs
bHB0cik7Ci0jZW5kaWYKLSAgICB9CiAKICAgICBHZGlGbHVzaCgpOwogCkBAIC0xMjI1LDY5ICsx
MTUyLDYgQEAgdm9pZCBXZWJWaWV3OjpwZXJmb3JtTGF5ZXJlZFdpbmRvd1VwZGF0ZQogICAgIG1f
bmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9CiAKLXZvaWQgV2ViVmlldzo6cGFpbnRXaXRoRGlyZWN0
MkQoKQotewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZSht
X21haW5GcmFtZSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IGNvcmVGcmFtZS0+dmlldygpOwotICAgIGZyYW1lVmlldy0+
dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZSgpOwotCi0gICAgaWYgKCFtX3Jl
bmRlclRhcmdldCkgewotICAgICAgICAvLyBDcmVhdGUgYSBEaXJlY3QyRCByZW5kZXIgdGFyZ2V0
LgotICAgICAgICBhdXRvIHJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJn
ZXRQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIHJlbmRlclRhcmdldFByb3BlcnRpZXMudXNhZ2UgPSBE
MkQxX1JFTkRFUl9UQVJHRVRfVVNBR0VfR0RJX0NPTVBBVElCTEU7Ci0KLSAgICAgICAgUkVDVCBy
ZWN0OwotICAgICAgICA6OkdldENsaWVudFJlY3QobV92aWV3V2luZG93LCAmcmVjdCk7Ci0KLSAg
ICAgICAgSW50UmVjdCBjbGllbnRSZWN0KHJlY3QpOwotCi0gICAgICAgIGF1dG8gcGl4ZWxTaXpl
ID0gRDJEMTo6U2l6ZVUoY2xpZW50UmVjdC53aWR0aCgpLCBjbGllbnRSZWN0LmhlaWdodCgpKTsK
LQotICAgICAgICBhdXRvIGh3bmRSZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gRDJEMTo6SHduZFJl
bmRlclRhcmdldFByb3BlcnRpZXMobV92aWV3V2luZG93LCBwaXhlbFNpemUsIEQyRDFfUFJFU0VO
VF9PUFRJT05TX0lNTUVESUFURUxZKTsKLSAgICAgICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29u
dGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVId25kUmVuZGVyVGFyZ2V0KCZyZW5kZXJUYXJn
ZXRQcm9wZXJ0aWVzLCAmaHduZFJlbmRlclRhcmdldFByb3BlcnRpZXMsICZtX3JlbmRlclRhcmdl
dCk7Ci0gICAgICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBSRUNUIGNsaWVudFJlY3QgPSB7fTsKLSAgICBQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCBwbGF0Zm9ybUNvbnRleHQobV9yZW5kZXJUYXJnZXQuZ2V0KCkpOwotICAgIEdyYXBoaWNz
Q29udGV4dFdpbiBnYygmcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJl
bmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwotCi0gICAgewotICAgICAgICBtX3JlbmRl
clRhcmdldC0+U2V0VGFncyhXRUJLSVRfRFJBV0lORywgX19MSU5FX18pOwotICAgICAgICBtX3Jl
bmRlclRhcmdldC0+Q2xlYXIoKTsKLQotICAgICAgICAvLyBEaXJlY3QyRCBob25vcnMgdGhlIHNj
YWxlIGZhY3RvciBuYXRpdmVseS4KLSAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmOwot
ICAgICAgICBmbG9hdCBpbnZlcnNlU2NhbGVGYWN0b3IgPSAxLjBmIC8gc2NhbGVGYWN0b3I7Ci0K
LSAgICAgICAgR2V0Q2xpZW50UmVjdChtX3ZpZXdXaW5kb3csICZjbGllbnRSZWN0KTsKLQotICAg
ICAgICBJbnRSZWN0IGRpcnR5UmVjdFBpeGVscygwLCAwLCBjbGllbnRSZWN0LnJpZ2h0LCBjbGll
bnRSZWN0LmJvdHRvbSk7Ci0gICAgICAgIEZsb2F0UmVjdCBsb2dpY2FsRGlydHlSZWN0RmxvYXQg
PSBkaXJ0eVJlY3RQaXhlbHM7Ci0gICAgICAgIGxvZ2ljYWxEaXJ0eVJlY3RGbG9hdC5zY2FsZShp
bnZlcnNlU2NhbGVGYWN0b3IpOwotICAgICAgICBJbnRSZWN0IGxvZ2ljYWxEaXJ0eVJlY3QoZW5j
bG9zaW5nSW50UmVjdChsb2dpY2FsRGlydHlSZWN0RmxvYXQpKTsKLQotICAgICAgICBpZiAoZnJh
bWVWaWV3ICYmIGZyYW1lVmlldy0+ZnJhbWUoKS5jb250ZW50UmVuZGVyZXIoKSkgewotICAgICAg
ICAgICAgZ2Muc2F2ZSgpOwotICAgICAgICAgICAgZ2Muc2NhbGUoRmxvYXRTaXplKHNjYWxlRmFj
dG9yLCBzY2FsZUZhY3RvcikpOwotICAgICAgICAgICAgZ2MuY2xpcChsb2dpY2FsRGlydHlSZWN0
KTsKLSAgICAgICAgICAgIGZyYW1lVmlldy0+cGFpbnQoZ2MsIGxvZ2ljYWxEaXJ0eVJlY3QpOwot
ICAgICAgICAgICAgaWYgKG1fc2hvdWxkSW52ZXJ0Q29sb3JzKQotICAgICAgICAgICAgICAgIGdj
LmZpbGxSZWN0KGxvZ2ljYWxEaXJ0eVJlY3QsIENvbG9yOjp3aGl0ZSwgQ29tcG9zaXRlT3BlcmF0
b3I6OkRpZmZlcmVuY2UpOwotICAgICAgICAgICAgZ2MucmVzdG9yZSgpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgOjpWYWxpZGF0ZVJlY3QobV92aWV3V2luZG93LCAmY2xpZW50UmVjdCk7Ci0j
ZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi19Ci0KIHZvaWQgV2ViVmll
dzo6cGFpbnQoSERDIGRjLCBMUEFSQU0gb3B0aW9ucykKIHsKICAgICBMT0NBTF9HRElfQ09VTlRF
UigwLCBfX0ZVTkNUSU9OX18pOwpAQCAtMTM0OSwxOCArMTIxMyw4IEBAIHZvaWQgV2ViVmlldzo6
cGFpbnQoSERDIGRjLCBMUEFSQU0gb3B0aW8KIAogICAgIDo6U2VsZWN0T2JqZWN0KGJpdG1hcERD
LmdldCgpLCBvbGRCaXRtYXApOwogCi0gICAgaWYgKCFkYykgeworICAgIGlmICghZGMpCiAgICAg
ICAgIEVuZFBhaW50KG1fdmlld1dpbmRvdywgJnBzKTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAg
ICAgIEhSRVNVTFQgaHIgPSBtX2JhY2tpbmdTdG9yZVJlbmRlclRhcmdldC0+RW5kRHJhdygpOwot
ICAgICAgICAvLyBGSVhNRTogUmVjb2duaXplIGFuZCByZWNvdmVyIGZyb20gZXJyb3Igc3RhdGU6
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotI2VuZGlmCi0gICAgfQot
Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIG1fYmFja2luZ1N0b3JlR2RpSW50ZXJvcC0+UmVsZWFz
ZURDKG51bGxwdHIpOwotI2VuZGlmCiAKICAgICBpZiAoYWN0aXZlKCkpCiAgICAgICAgIGNhbmNl
bERlbGV0ZUJhY2tpbmdTdG9yZVNvb24oKTsKQEAgLTE0MDMsMTAgKzEyNTcsNiBAQCB2b2lkIFdl
YlZpZXc6OnBhaW50SW50b0JhY2tpbmdTdG9yZShGcmFtCiAgICAgbG9naWNhbERpcnR5UmVjdEZs
b2F0LnNjYWxlKGludmVyc2VTY2FsZUZhY3Rvcik7ICAgIAogICAgIEludFJlY3QgbG9naWNhbERp
cnR5UmVjdChlbmNsb3NpbmdJbnRSZWN0KGxvZ2ljYWxEaXJ0eVJlY3RGbG9hdCkpOwogCi0jaWYg
VVNFKERJUkVDVDJEKQotICAgIG1fYmFja2luZ1N0b3JlUmVuZGVyVGFyZ2V0ID0gbnVsbHB0cjsK
LSNlbmRpZgotCiAgICAgR3JhcGhpY3NDb250ZXh0V2luIGdjKGJpdG1hcERDLCBtX3RyYW5zcGFy
ZW50KTsKICAgICBnYy5zYXZlKCk7CiAgICAgaWYgKG1fdHJhbnNwYXJlbnQpCkBAIC0yNTEwLDEx
ICsyMzYwLDcgQEAgTFJFU1VMVCBDQUxMQkFDSyBXZWJWaWV3OjpXZWJWaWV3V25kUHJvYwogCiAg
ICAgc3dpdGNoIChtZXNzYWdlKSB7CiAgICAgICAgIGNhc2UgV01fUEFJTlQ6IHsKLSNpZiBVU0Uo
RElSRUNUMkQpCi0gICAgICAgICAgICB3ZWJWaWV3LT5wYWludFdpdGhEaXJlY3QyRCgpOwotI2Vs
c2UKICAgICAgICAgICAgIHdlYlZpZXctPnBhaW50KDAsIDApOwotI2VuZGlmCiAgICAgICAgICAg
ICBpZiAod2ViVmlldy0+dXNlc0xheWVyZWRXaW5kb3coKSkKICAgICAgICAgICAgICAgICB3ZWJW
aWV3LT5wZXJmb3JtTGF5ZXJlZFdpbmRvd1VwZGF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CkBA
IC01NDQ0LDEwICs1MjkwLDYgQEAgSFJFU1VMVCBXZWJWaWV3Ojpub3RpZnlQcmVmZXJlbmNlc0No
YW5nZQogICAgIGhyID0gcHJlZnNQcml2YXRlLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxl
ZCgmZW5hYmxlZCk7CiAgICAgaWYgKEZBSUxFRChocikpCiAgICAgICAgIHJldHVybiBocjsKLSNp
ZiBVU0UoRElSRUNUMkQpCi0gICAgLy8gRGlzYWJsZSBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBm
b3Igbm93LgotICAgIGVuYWJsZWQgPSBmYWxzZTsKLSNlbmRpZgogICAgIHNldHRpbmdzLnNldEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKGVuYWJsZWQpOwogCiAgICAgaHIgPSBwcmVmc1By
aXZhdGUtPnNob3dEZWJ1Z0JvcmRlcnMoJmVuYWJsZWQpOwpJbmRleDogU291cmNlL1dlYktpdExl
Z2FjeS93aW4vV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L1dlYlZpZXcuaAkocmV2aXNpb24gMjg3ODEyKQorKysgU291cmNlL1dlYktpdExlZ2FjeS93aW4v
V2ViVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NywxMyArNzcsNiBAQCBXZWJWaWV3KiBraXQo
V2ViQ29yZTo6UGFnZSopOwogV2ViQ29yZTo6UGFnZSogY29yZShJV2ViVmlldyopOwogCiBpbnRl
cmZhY2UgSURyb3BUYXJnZXRIZWxwZXI7Ci0jaWYgVVNFKERJUkVDVDJEKQotaW50ZXJmYWNlIElE
MkQxQml0bWFwOwotaW50ZXJmYWNlIElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNl
IElEMkQxR2RpSW50ZXJvcFJlbmRlclRhcmdldDsKLWludGVyZmFjZSBJRDJEMUh3bmRSZW5kZXJU
YXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7Ci0jZW5kaWYKIAogY2xhc3MgV2Vi
VmlldyBmaW5hbAogICAgIDogcHVibGljIElXZWJWaWV3CkBAIC00MjcsNyArNDIwLDYgQEAgcHVi
bGljOgogICAgIGJvb2wga2V5RG93bihXUEFSQU0sIExQQVJBTSwgYm9vbCBzeXN0ZW1LZXlEb3du
ID0gZmFsc2UpOwogICAgIGJvb2wga2V5VXAoV1BBUkFNLCBMUEFSQU0sIGJvb2wgc3lzdGVtS2V5
RG93biA9IGZhbHNlKTsKICAgICBib29sIGtleVByZXNzKFdQQVJBTSwgTFBBUkFNLCBib29sIHN5
c3RlbUtleURvd24gPSBmYWxzZSk7Ci0gICAgdm9pZCBwYWludFdpdGhEaXJlY3QyRCgpOwogICAg
IHZvaWQgcGFpbnQoSERDLCBMUEFSQU0pOwogICAgIHZvaWQgcGFpbnRJbnRvV2luZG93KEhEQyBi
aXRtYXBEQywgSERDIHdpbmRvd0RDLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3Qp
OwogICAgIGJvb2wgZW5zdXJlQmFja2luZ1N0b3JlKCk7CkBAIC02MjYsMTIgKzYxOCw2IEBAIHBy
b3RlY3RlZDoKIAogICAgIEhNRU5VIG1fY3VycmVudENvbnRleHRNZW51IHsgbnVsbHB0ciB9Owog
ICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRHRElPYmplY3Q8SEJJVE1BUD4+IG1fYmFja2luZ1N0
b3JlQml0bWFwOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8SUQyRDFId25kUmVuZGVy
VGFyZ2V0PiBtX3JlbmRlclRhcmdldDsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IG1fYmFja2lu
Z1N0b3JlRDJEQml0bWFwOwotICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gbV9i
YWNraW5nU3RvcmVSZW5kZXJUYXJnZXQ7Ci0gICAgQ09NUHRyPElEMkQxR2RpSW50ZXJvcFJlbmRl
clRhcmdldD4gbV9iYWNraW5nU3RvcmVHZGlJbnRlcm9wOwotI2VuZGlmCiAgICAgU0laRSBtX2Jh
Y2tpbmdTdG9yZVNpemU7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEdESU9iamVjdDxIUkdO
Pj4gbV9iYWNraW5nU3RvcmVEaXJ0eVJlZ2lvbjsKIApJbmRleDogU291cmNlL2NtYWtlL09wdGlv
bnNGVFcuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2UJ
KHJldmlzaW9uIDI4NzgxMikKKysrIFNvdXJjZS9jbWFrZS9PcHRpb25zRlRXLmNtYWtlCShub25l
eGlzdGVudCkKQEAgLTEsMjM2ICswLDAgQEAKLWlmIChDTUFLRV9WRVJTSU9OIFZFUlNJT05fTEVT
UyAzLjE0KQotICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNNYWtlIDMuMTQgb3IgZ3JlYXRlciBp
cyByZXF1aXJlZCB0byBjb21waWxlIFdlYktpdEZUVyIpCi1lbmRpZiAoKQotCi1pZiAoTVNWQ19W
RVJTSU9OIFZFUlNJT05fTEVTUyAxOTIwKQotICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlZpc3Vh
bCBTdHVkaW8gMjAxOSBpcyByZXF1aXJlZCB0byBjb21waWxlIFdlYktpdEZUVyIpCi1lbmRpZiAo
KQotCi1pZiAoJHtXVEZfQ1BVX1g4Nn0pCi0gICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiV2ViS2l0
RlRXIGRvZXMgbm90IHN1cHBvcnQgMzItYml0IGJ1aWxkcyIpCi1lbmRpZiAoKQotCi1zZXQoUE9S
VCBGVFcpCi0KLSMgQ29tcGlsYXRpb24gb3B0aW9ucwotaW5jbHVkZShPcHRpb25zTVNWQykKLQot
YWRkX2RlZmluaXRpb25zKC1EV1RGX1BMQVRGT1JNX0ZUVz0xKQotIyBQcmV2ZW50IG1pbigpIGFu
ZCBtYXgoKSBtYWNyb3MgZnJvbSBiZWluZyBleHBvc2VkCi1hZGRfZGVmaW5pdGlvbnMoLUROT01J
Tk1BWCkKLSMgVXNlIHVuaWNvZGUKLWFkZF9kZWZpbml0aW9ucygtRFVOSUNPREUgLURfVU5JQ09E
RSkKLSMgSWYgPHdpbnNvY2syLmg+IGlzIG5vdCBpbmNsdWRlZCBiZWZvcmUgPHdpbmRvd3MuaD4g
cmVkZWZpbml0aW9uIGVycm9ycyBvY2N1cgotIyB1bmxlc3MgX1dJTlNPQ0tBUElfIGlzIGRlZmlu
ZWQgYmVmb3JlIDx3aW5kb3dzLmg+IGlzIGluY2x1ZGVkCi1hZGRfZGVmaW5pdGlvbnMoLURfV0lO
U09DS0FQSV89KQotCi0jIFNldHVwIGxpYnJhcnkgcGF0aHMKLWlmIChERUZJTkVEIEVOVntBcHBs
ZUFwcGxpY2F0aW9uU3VwcG9ydFNES30pCi0gICAgZmlsZShUT19DTUFLRV9QQVRIICIkRU5We0Fw
cGxlQXBwbGljYXRpb25TdXBwb3J0U0RLfS9BcHBsZUludGVybmFsIiBXRUJLSVRfTElCUkFSSUVT
X0RJUikKLSAgICBzZXQoV0VCS0lUX0xJQlJBUklFU19JTkNMVURFX0RJUiAiJHtXRUJLSVRfTElC
UkFSSUVTX0RJUn0vaW5jbHVkZSIpCi0gICAgaW5jbHVkZV9kaXJlY3Rvcmllcygke1dFQktJVF9M
SUJSQVJJRVNfSU5DTFVERV9ESVJ9KQotICAgIHNldChBUFBMRV9CVUlMRCAxKQotZW5kaWYgKCkK
LQotaWYgKE5PVCBXRUJLSVRfTElCUkFSSUVTX0RJUikKLSAgICBpZiAoREVGSU5FRCBFTlZ7V0VC
S0lUX0xJQlJBUklFU30pCi0gICAgICAgIGZpbGUoVE9fQ01BS0VfUEFUSCAiJEVOVntXRUJLSVRf
TElCUkFSSUVTfSIgV0VCS0lUX0xJQlJBUklFU19ESVIpCi0gICAgZWxzZSAoKQotICAgICAgICBm
aWxlKFRPX0NNQUtFX1BBVEggIiR7Q01BS0VfU09VUkNFX0RJUn0vV2ViS2l0TGlicmFyaWVzL3dp
biIgV0VCS0lUX0xJQlJBUklFU19ESVIpCi0gICAgZW5kaWYgKCkKLWVuZGlmICgpCi0KLXNldChD
TUFLRV9QUkVGSVhfUEFUSCAke1dFQktJVF9MSUJSQVJJRVNfRElSfSkKLQotc2V0X3Byb3BlcnR5
KEdMT0JBTCBQUk9QRVJUWSBGSU5EX0xJQlJBUllfVVNFX0xJQjMyX1BBVEhTIE9GRikKLXNldF9w
cm9wZXJ0eShHTE9CQUwgUFJPUEVSVFkgRklORF9MSUJSQVJZX1VTRV9MSUI2NF9QQVRIUyBPTikK
LQotc2V0KFdFQktJVF9MSUJSQVJJRVNfTElOS19ESVIgIiR7V0VCS0lUX0xJQlJBUklFU19ESVJ9
L2xpYjY0IikKLSMgRklYTUU6IFJlbW92ZSAke1dFQktJVF9MSUJSQVJJRVNfTElOS19ESVJ9IHdo
ZW4gZmluZF9saWJyYXJ5IGlzIHVzZWQgZm9yIGV2ZXJ5dGhpbmcKLWxpbmtfZGlyZWN0b3JpZXMo
IiR7Q01BS0VfQklOQVJZX0RJUn0vbGliNjQiICIke1dFQktJVF9MSUJSQVJJRVNfTElOS19ESVJ9
IikKLXNldChDTUFLRV9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUlkgJHtDTUFLRV9CSU5BUllfRElS
fS9saWI2NCkKLXNldChDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUlkgJHtDTUFLRV9CSU5B
UllfRElSfS9saWI2NCkKLXNldChDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtDTUFL
RV9CSU5BUllfRElSfS9iaW42NCkKLQotc2V0KENNQUtFX0FSQ0hJVkVfT1VUUFVUX0RJUkVDVE9S
WV9ERUJVRyAiJHtDTUFLRV9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUll9IikKLXNldChDTUFLRV9B
UkNISVZFX09VVFBVVF9ESVJFQ1RPUllfUkVMRUFTRSAiJHtDTUFLRV9BUkNISVZFX09VVFBVVF9E
SVJFQ1RPUll9IikKLXNldChDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUllfREVCVUcgIiR7
Q01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZfSIpCi1zZXQoQ01BS0VfTElCUkFSWV9PVVRQ
VVRfRElSRUNUT1JZX1JFTEVBU0UgIiR7Q01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZfSIp
Ci1zZXQoQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZX0RFQlVHICIke0NNQUtFX1JVTlRJ
TUVfT1VUUFVUX0RJUkVDVE9SWX0iKQotc2V0KENNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9S
WV9SRUxFQVNFICIke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0iKQotCi1XRUJLSVRf
T1BUSU9OX0JFR0lOKCkKLQotIyBGZWF0dXJlcyBpbiB0aGUgc2FtZSBzdGF0ZSBvbiBXaW5DYWly
byBhbmQgQXBwbGVXaW4KLQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
XzNEX1RSQU5TRk9STVMgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9BVFRBQ0hNRU5UX0VMRU1FTlQgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DQUNIRV9QQVJUSVRJT05JTkcgUFJJVkFURSBPTikK
LVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lO
RyBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NT
UzNfVEVYVCBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUsgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1NfQ09OSUNfR1JBRElFTlRTIFBSSVZBVEUgT04p
Ci1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX0RFVklDRV9BREFQ
VEFUSU9OIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19QQUlOVElOR19BUEkgUFJJVkFURSBPTikKLVdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1NfU0VMRUNUT1JTX0xFVkVMNCBQ
UklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NVUlNP
Ul9WSVNJQklMSVRZIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfRFJBR19TVVBQT1JUIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfRklMVEVSU19MRVZFTF8yIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRlRMX0pJVCBQUklWQVRFIE9GRikKLVdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9GVFBESVIgUFJJVkFURSBPTikKLVdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSBQUklW
QVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9HRU9MT0NB
VElPTiBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X01BQ19HRVNUVVJFX0VWRU5UUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9NQVRITUwgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9NRURJQV9DT05UUk9MU19TQ1JJUFQgUFJJVkFURSBPTikKLVdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9NSFRNTCBQUklWQVRFIE9GRikK
LVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9NSU5JQlJPV1NFUiBQUklW
QVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX01PVVNFX0NV
UlNPUl9TQ0FMRSBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfT1JJRU5UQVRJT05fRVZFTlRTIFBSSVZBVEUgT0ZGKQot
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX09WRVJGTE9XX1NDUk9MTElO
R19UT1VDSCBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9QVUJMSUNfU1VGRklYX0xJU1QgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9TQU1QTElOR19QUk9GSUxFUiBQUklWQVRFIE9GRikKLVdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TUEVMTENIRUNLIFBSSVZBVEUgT0ZG
KQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1RPVUNIX0VWRU5UUyBQ
UklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9UT1VD
SF9TTElERVIgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfVU5JRklFRF9CVUlMRFMgUFJJVkFURSBPTikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9WSURFTyBQUklWQVRFIE9OKQotV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX1dFQkFTU0VNQkxZIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQkdMIFBSSVZBVEUgT04pCi1XRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUIFBS
SVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1hTTFQg
UFJJVkFURSBPTikKLQotIyBNZWRpYSB0aGluZ3MgdGhhdCBzaG91bGQgYmUgb24KLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9BVkZfQ0FQVElPTlMgUFJJVkFURSBPRkYp
Ci1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCX0FVRElPIFBSSVZB
VEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0xFR0FDWV9F
TkNSWVBURURfTUVESUEgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfTUVESUFfQ0FQVFVSRSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVG
QVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9NRURJQV9TT1VSQ0UgUFJJVkFURSBPRkYpCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTUVESUFfU1RBVElTVElDUyBQUklWQVRF
IE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9NRURJQV9TVFJF
QU0gUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
VklERU9fUFJFU0VOVEFUSU9OX01PREUgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfVklERU9fVVNFU19FTEVNRU5UX0ZVTExTQ1JFRU4gUFJJVkFU
RSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCX1JUQyBQ
UklWQVRFIE9GRikKLQotIyBQYXltZW50IHRoaW5ncwotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX0FQUExFX1BBWSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVG
QVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9QQVlNRU5UX1JFUVVFU1QgUFJJVkFURSBPRkYpCi0KLSMg
V2ViR0wKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJHTDIgUFJJ
VkFURSBPRkYpCi0KLSMgT2ZmIGZvciBub3csIGJ1dCBzaG91bGQgYmUgb24KLVdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9BUElfVEVTVFMgUFJJVkFURSBPRkYpCi1XRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQVBQTElDQVRJT05fTUFOSUZFU1Qg
UFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQVNZ
TkNfU0NST0xMSU5HIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX0NPTlRFTlRfRVhURU5TSU9OUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DT05URU5UX0ZJTFRFUklORyBQUklWQVRFIE9GRikK
LVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1NfVFlQRURfT00gUFJJ
VkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfREFSS19N
T0RFX0NTUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9EQVRBQ1VFX1ZBTFVFIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OIFBSSVZBVEUg
T0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0RPV05MT0FEX0FU
VFJJQlVURSBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9FTkNSWVBURURfTUVESUEgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfSU5URUxMSUdFTlRfVFJBQ0tJTkdfUFJFVkVOVElPTiBQUklWQVRF
IE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9MQVlFUl9CQVNF
RF9TVkdfRU5HSU5FIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX0xBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQgUFJJVkFURSBPRkYpCi1XRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTEVUVEVSUFJFU1MgUFJJVkFURSBPRkYp
Ci1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTEFZT1VUX0ZPUk1BVFRJ
TkdfQ09OVEVYVCBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9MRVRURVJQUkVTUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9NRU1PUllfU0FNUExFUiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JF
VkFMSURBVElPTiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NUQUxFX1dISUxFX1JFVkFMSURBVEUgUFJJVkFURSBPRkYp
Ci1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTk9USUZJQ0FUSU9OUyBQ
UklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9PVkVS
RkxPV19TQ1JPTExJTkdfVE9VQ0ggUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfUERGS0lUX1BMVUdJTiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9QT0lOVEVSX0xPQ0sgUFJJVkFURSBPRkYpCi1X
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVTT1VSQ0VfVVNBR0UgUFJJ
VkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUlVCQkVS
X0JBTkRJTkcgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfU0FOREJPWF9FWFRFTlNJT05TIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NFUlZFUl9QUkVDT05ORUNUIFBSSVZBVEUgT0ZGKQotV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NFUlZJQ0VfQ09OVFJPTFMgUFJJ
VkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0VSVklD
RV9XT1JLRVIgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfU0hBUkVBQkxFX1JFU09VUkNFIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NNT09USF9TQ1JPTExJTkcgUFJJVkFURSBPRkYpCi1XRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU1BFRUNIX1NZTlRIRVNJUyBQUklW
QVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9URUxFUEhP
TkVfTlVNQkVSX0RFVEVDVElPTiBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9URVhUX0FVVE9TSVpJTkcgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVVNFUl9NRVNTQUdFX0hBTkRMRVJTIFBSSVZB
VEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1ZBUklBVElP
Tl9GT05UUyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9XRUJEUklWRVIgUFJJVkFURSBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfV0VCX0FVVEhOIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX1dFQl9DUllQVE8gUFJJVkFURSBPRkYpCi0KLSNXRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShVU0VfVkVSU0lPTl9TVEFNUEVSIFBSSVZBVEUgT04pCi0K
LSMgRXhwZXJpbWVudGFsIGZlYXR1cmVzCi0jV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX1JFTU9URV9JTlNQRUNUT1IgUFJJVkFURSAke0VOQUJMRV9FWFBFUklNRU5UQUxf
RkVBVFVSRVN9KQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFTU9U
RV9JTlNQRUNUT1IgUFJJVkFURSBPRkYpCi0jV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX1JFU09VUkNFX1VTQUdFIFBSSVZBVEUgJHtFTkFCTEVfRVhQRVJJTUVOVEFMX0ZF
QVRVUkVTfSkKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRVNPVVJD
RV9VU0FHRSBQUklWQVRFIE9GRikKLQotIyBGZWF0dXJlcyB0byBpbnZlc3RpZ2F0ZQotIwotIyBG
ZWF0dXJlcyB0aGF0IGFyZSB0ZW1wb3JhcmlseSB0dXJuZWQgb2ZmIGJlY2F1c2UgYW4gaW1wbGVt
ZW50YXRpb24gaXMgbm90Ci0jIHByZXNlbnQgYXQgdGhpcyB0aW1lCi1XRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRlRMX0pJVCBQUklWQVRFIE9GRikKLQotIyBObyBzdXBw
b3J0IHBsYW5uZWQKLQotIyBGSVhNRTogUG9ydCBibWFsbG9jIHRvIFdpbmRvd3MuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMzMTAKLVdFQktJVF9PUFRJT05fREVG
QVVMVF9QT1JUX1ZBTFVFKFVTRV9TWVNURU1fTUFMTE9DIFBSSVZBVEUgT04pCi0KLVdFQktJVF9P
UFRJT05fRU5EKCkKLQotaWYgKEFQUExFX0JVSUxEKQotICAgIHNldChDT1JFRk9VTkRBVElPTl9M
SUJSQVJZIENvcmVGb3VuZGF0aW9uJHtERUJVR19TVUZGSVh9KQotICAgIFNFVF9BTkRfRVhQT1NF
X1RPX0JVSUxEKFVTRV9DRiBPTikKLSAgICBmaW5kX3BhY2thZ2UoTGliWG1sMiAyLjkuMSBSRVFV
SVJFRCkKLSAgICBpZiAoRU5BQkxFX1hTTFQpCi0gICAgICAgIGZpbmRfcGFja2FnZShMaWJYc2x0
IDEuMS4yOCBSRVFVSVJFRCkKLSAgICBlbmRpZiAoKQotZWxzZSAoKQotICAgIGZpbmRfcGFja2Fn
ZShMaWJYbWwyIDIuOS43IFJFUVVJUkVEKQotICAgIGlmIChFTkFCTEVfWFNMVCkKLSAgICAgICAg
ZmluZF9wYWNrYWdlKExpYlhzbHQgMS4xLjMyIFJFUVVJUkVEKQotICAgIGVuZGlmICgpCi1lbmRp
ZiAoKQotCi1maW5kX3BhY2thZ2UoQ1VSTCA3LjYwLjAgUkVRVUlSRUQpCi1maW5kX3BhY2thZ2Uo
SUNVIDYxLjIgUkVRVUlSRUQgQ09NUE9ORU5UUyBkYXRhIGkxOG4gdWMpCi1maW5kX3BhY2thZ2Uo
SlBFRyAxLjUuMiBSRVFVSVJFRCkKLWZpbmRfcGFja2FnZShPcGVuU1NMIDIuMC4wIFJFUVVJUkVE
KQotZmluZF9wYWNrYWdlKFBORyAxLjYuMzQgUkVRVUlSRUQpCi1maW5kX3BhY2thZ2UoU1FMaXRl
MyAzLjIzLjEgUkVRVUlSRUQpCi1maW5kX3BhY2thZ2UoWkxJQiAxLjIuMTEgUkVRVUlSRUQpCi1m
aW5kX3BhY2thZ2UoTGliUFNMIDAuMjAuMiBSRVFVSVJFRCkKLQotIyBGSVhNRTogV2Ugc2hvdWxk
IGFkZCB0aGUgZm9sbG93aW5nLCB0b28uCi0jIGZpbmRfcGFja2FnZShXZWJQIFJFUVVJUkVEIENP
TVBPTkVOVFMgZGVtdXgpCi0jIGlmIChXZWJQX0ZPVU5EKQotIyAgICAgU0VUX0FORF9FWFBPU0Vf
VE9fQlVJTEQoVVNFX1dFQlAgT04pCi0jIGVuZGlmICgpCi0KLXNldChVU0VfQU5HTEVfRUdMIE9O
KQotCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ1VSTCBPTikKLVNFVF9BTkRfRVhQT1NF
X1RPX0JVSUxEKFVTRV9ESVJFQ1QyRCBPTikKLVNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9F
R0wgT04pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfT1BFTkdMX0VTIE9OKQotU0VUX0FO
RF9FWFBPU0VfVE9fQlVJTEQoSEFWRV9PUEVOR0xfRVNfMyBPTikKLVNFVF9BTkRfRVhQT1NFX1RP
X0JVSUxEKFVTRV9PUEVOU1NMIE9OKQotU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX1RFWFRV
UkVfTUFQUEVSIE9OKQotU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX1RFWFRVUkVfTUFQUEVS
X0dMIE9OKQotI1NFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9JTlNQRUNUT1JfU09DS0VUX1NF
UlZFUiAke0VOQUJMRV9SRU1PVEVfSU5TUEVDVE9SfSkKLVNFVF9BTkRfRVhQT1NFX1RPX0JVSUxE
KFVTRV9JTlNQRUNUT1JfU09DS0VUX1NFUlZFUiBPRkYpCi0KLXNldChXVEZfTElCUkFSWV9UWVBF
IFNIQVJFRCkKLXNldChKYXZhU2NyaXB0Q29yZV9MSUJSQVJZX1RZUEUgU0hBUkVEKQotCi1zZXQo
RU5BQkxFX0FQSV9URVNUUyBPRkYpCi1zZXQoRU5BQkxFX1dFQkNPUkUgT04pCi1zZXQoRU5BQkxF
X1dFQktJVCBPTikKLXNldChFTkFCTEVfV0VCS0lUX0xFR0FDWSBPTikKSW5kZXg6IFRvb2xzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxMikK
KysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDIy
LTAxLTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUg
c3VwcG9ydCBmb3IgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzNDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIERpcmVjdDJEIGFuZCBGVFcgaGF2ZSBub3QgYmVlbiBidWlsZGluZyBmb3Ig
b3ZlciBhIHllYXIuIEl0IGlzCisgICAgICAgIHRpbWUgdG8gcmVtb3ZlIHRoZW0uCisKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0LmNwcDoKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9QbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93
aW4vUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmg6IFJlbW92ZWQuCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvd2luL1BpeGVsRHVtcFN1cHBvcnRXaW4uY3BwOgorICAgICAg
ICAoY3JlYXRlQml0bWFwQ29udGV4dEZyb21XZWJWaWV3KToKKyAgICAgICAgKiBQbGF0Zm9ybUZU
Vy5jbWFrZTogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHA6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxl
UGFnZTo6ZHVtcERPTUFzV2ViQXJjaGl2ZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Q
bGF0Zm9ybUZUVy5jbWFrZTogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Bs
YXRmb3JtV2ViVmlldy5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvd2luL1BsYXRmb3Jt
V2ViVmlld1dpbi5jcHA6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdEludm9j
YXRpb25EaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisKIDIwMjItMDEtMDggIFR5bGVyIFdpbGNvY2sg
IDx0eWxlcl93QGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogQWNjZXNzaWJpbGl0eU9iamVjdDo6
c2V0Rm9jdXNlZCh0cnVlKSBzaG91bGQgbWFrZSB0aGUgd2VicGFnZSBmb2N1c2VkLCBhbmQgbWFr
ZSB3ZWIgY29udGVudCB0aGUgZmlyc3QgcmVzcG9uZGVyCkluZGV4OiBUb29scy9QbGF0Zm9ybUZU
Vy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9QbGF0Zm9ybUZUVy5jbWFrZQkocmV2aXNpb24g
Mjg3ODEyKQorKysgVG9vbHMvUGxhdGZvcm1GVFcuY21ha2UJKG5vbmV4aXN0ZW50KQpAQCAtMSwx
MSArMCwwIEBACi0jYWRkX3N1YmRpcmVjdG9yeShJbWFnZURpZmYpCi0KLWlmIChFTkFCTEVfV0VC
S0lUX0xFR0FDWSkKLSAgICAjYWRkX3N1YmRpcmVjdG9yeShEdW1wUmVuZGVyVHJlZSkKLSAgICBh
ZGRfc3ViZGlyZWN0b3J5KE1pbmlCcm93c2VyL3dpbikKLWVuZGlmICgpCi0KLWlmIChFTkFCTEVf
V0VCS0lUKQotICAgIGFkZF9zdWJkaXJlY3RvcnkoVGVzdFJ1bm5lclNoYXJlZCkKLSAgICBhZGRf
c3ViZGlyZWN0b3J5KFdlYktpdFRlc3RSdW5uZXIpCi1lbmRpZiAoKQpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAJKHJldmlzaW9uIDI4NzgxMikKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw4ICs0MSw2IEBACiAjaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydENHLmgiCiAjZWxpZiBV
U0UoQ0FJUk8pCiAjaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmgiCi0jZWxpZiBVU0Uo
RElSRUNUMkQpCi0jaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmgiCiAjZW5kaWYK
IAogdm9pZCBkdW1wV2ViVmlld0FzUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChjb25zdCBz
dGQ6OnN0cmluZyYgZXhwZWN0ZWRIYXNoKQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvUGxh
dGZvcm1XaW4uY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvUGxhdGZv
cm1XaW4uY21ha2UJKHJldmlzaW9uIDI4NzgxMikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Bs
YXRmb3JtV2luLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC01MiwyNCArNTIsMTUgQEAgZWxzZSAo
KQogICAgICAgICBDRk5ldHdvcmsKICAgICAgICAgQ29yZVRleHQKICAgICApCi0gICAgaWYgKCR7
VVNFX0RJUkVDVDJEfSkKLSAgICAgICAgbGlzdChBUFBFTkQgRHVtcFJlbmRlclRyZWVfU09VUkNF
UwotICAgICAgICAgICAgd2luL1BpeGVsRHVtcFN1cHBvcnREaXJlY3QyRC5jcHAKLSAgICAgICAg
KQotICAgICAgICBsaXN0KEFQUEVORCBEdW1wUmVuZGVyVHJlZV9MSUJSQVJJRVMKLSAgICAgICAg
ICAgIEQyZDEKLSAgICAgICAgKQotICAgIGVsc2UgKCkKLSAgICAgICAgbGlzdChBUFBFTkQgRHVt
cFJlbmRlclRyZWVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgICAgICAgICAke0R1
bXBSZW5kZXJUcmVlX0RJUn0vY2cKLSAgICAgICAgKQotICAgICAgICBsaXN0KEFQUEVORCBEdW1w
UmVuZGVyVHJlZV9TT1VSQ0VTCi0gICAgICAgICAgICBjZy9QaXhlbER1bXBTdXBwb3J0Q0cuY3Bw
Ci0gICAgICAgICkKLSAgICAgICAgbGlzdChBUFBFTkQgRHVtcFJlbmRlclRyZWVfTElCUkFSSUVT
Ci0gICAgICAgICAgICBDb3JlR3JhcGhpY3MKLSAgICAgICAgKQotICAgIGVuZGlmICgpCisgICAg
bGlzdChBUFBFTkQgRHVtcFJlbmRlclRyZWVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisg
ICAgICAgICR7RHVtcFJlbmRlclRyZWVfRElSfS9jZworICAgICkKKyAgICBsaXN0KEFQUEVORCBE
dW1wUmVuZGVyVHJlZV9TT1VSQ0VTCisgICAgICAgIGNnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHAK
KyAgICApCisgICAgbGlzdChBUFBFTkQgRHVtcFJlbmRlclRyZWVfTElCUkFSSUVTCisgICAgICAg
IENvcmVHcmFwaGljcworICAgICkKIGVuZGlmICgpCiAKIFdFQktJVF9BRERfUFJFQ09NUElMRURf
SEVBREVSKCJEdW1wUmVuZGVyVHJlZVByZWZpeC5oIiAid2luL0R1bXBSZW5kZXJUcmVlUHJlZml4
LmNwcCIgRHVtcFJlbmRlclRyZWVfU09VUkNFUykKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9QaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBwb3J0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAy
ODc4MTIpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydERpcmVj
dDJELmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDgxICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnREaXJl
Y3QyRC5oIgotCi0jaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKLSNpbmNsdWRlICJQaXhlbER1
bXBTdXBwb3J0LmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0j
aW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
U3RyaW5nRXh0cmFzLmg+Ci0KLQotc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcg
PSBDRlNUUigicHVibGljLnBuZyIpOwotCi1JRDJEMUZhY3RvcnkqIHBpeGVsRHVtcFN5c3RlbUZh
Y3RvcnkoKQotewotICAgIHN0YXRpYyBJRDJEMUZhY3RvcnkqIGRpcmVjdDJERmFjdG9yeSA9IG51
bGxwdHI7Ci0gICAgaWYgKCFkaXJlY3QyREZhY3RvcnkpIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAg
ICAgIEQyRDFfRkFDVE9SWV9PUFRJT05TIG9wdGlvbnMgPSB7IH07Ci0gICAgICAgIG9wdGlvbnMu
ZGVidWdMZXZlbCA9IEQyRDFfREVCVUdfTEVWRUxfSU5GT1JNQVRJT047Ci0gICAgICAgIEhSRVNV
TFQgaHIgPSBEMkQxQ3JlYXRlRmFjdG9yeShEMkQxX0ZBQ1RPUllfVFlQRV9NVUxUSV9USFJFQURF
RCwgb3B0aW9ucywgJmRpcmVjdDJERmFjdG9yeSk7Ci0jZWxzZQotICAgICAgICBIUkVTVUxUIGhy
ID0gRDJEMUNyZWF0ZUZhY3RvcnkoRDJEMV9GQUNUT1JZX1RZUEVfTVVMVElfVEhSRUFERUQsICZk
aXJlY3QyREZhY3RvcnkpOwotI2VuZGlmCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURF
RChocikpOwotICAgIH0KLQotICAgIHJldHVybiBkaXJlY3QyREZhY3Rvcnk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHByaW50UE5HKElEMkQxQml0bWFwKiBpbWFnZSwgY29uc3QgY2hhciogY2hlY2tzdW0p
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGltYWdlKTsKLSAgICBVTlVTRURfUEFSQU0oY2hlY2tzdW0p
OwotICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KLX0KLQotdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJp
bmdGb3JCaXRtYXBDb250ZXh0KEJpdG1hcENvbnRleHQqIGNvbnRleHQsIGNoYXIgaGFzaFN0cmlu
Z1szM10pCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotICAgIFVOVVNFRF9QQVJBTSho
YXNoU3RyaW5nKTsKLSAgICAvLyBOb3QgaW1wbGVtZW50ZWQuCi19Ci0KLXZvaWQgZHVtcEJpdG1h
cChCaXRtYXBDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBjaGVja3N1bSkKLXsKLSAgICBf
Y29tX3B0cl90PF9jb21fSUlJRDxJRDJEMUJpdG1hcCwgJl9fdXVpZG9mKElEMkQxQml0bWFwKT4+
IGltYWdlOwotICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+R2V0
Qml0bWFwKCZpbWFnZSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBwcmludFBORyhpbWFnZS5HZXRJbnRlcmZhY2VQdHIoKSwgY2hlY2tzdW0pOwotfQpJ
bmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BpeGVsRHVtcFN1cHBvcnREaXJlY3QyRC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBwb3J0
RGlyZWN0MkQuaAkocmV2aXNpb24gMjg3ODEyKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L1BpeGVsRHVtcFN1cHBvcnREaXJlY3QyRC5oCShub25leGlzdGVudCkKQEAgLTEsNjQgKzAsMCBA
QAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8Y29t
aXAuaD4KLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLXR5cGVkZWYgSEJJVE1BUCBQbGF0Zm9ybUJpdG1h
cEJ1ZmZlcjsKLQotY2xhc3MgQml0bWFwQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEJpdG1h
cENvbnRleHQ+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEJpdG1hcENvbnRleHQ+IGNyZWF0
ZUJ5QWRvcHRpbmdCaXRtYXBBbmRDb250ZXh0KFBsYXRmb3JtQml0bWFwQnVmZmVyIGJ1ZmZlciwg
SUQyRDFSZW5kZXJUYXJnZXQqIGNvbnRleHQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBCaXRtYXBDb250ZXh0KGJ1ZmZlciwgY29udGV4dCkpOwotICAgIH0KLQotICAgIH5C
aXRtYXBDb250ZXh0KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2J1ZmZlcikKLSAgICAgICAgICAg
IERlbGV0ZU9iamVjdChtX2J1ZmZlcik7Ci0gICAgfQotCi0gICAgSUQyRDFCaXRtYXBSZW5kZXJU
YXJnZXQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5HZXRJbnRl
cmZhY2VQdHIoKTsgfQotCi1wcml2YXRlOgotICAgIEJpdG1hcENvbnRleHQoUGxhdGZvcm1CaXRt
YXBCdWZmZXIgYnVmZmVyLCBJRDJEMVJlbmRlclRhcmdldCogY29udGV4dCkKLSAgICAgICAgOiBt
X2J1ZmZlcihidWZmZXIpCi0gICAgICAgICwgbV9jb250ZXh0KGNvbnRleHQpCi0gICAgewotICAg
IH0KLQotICAgIFBsYXRmb3JtQml0bWFwQnVmZmVyIG1fYnVmZmVyOwotICAgIF9jb21fcHRyX3Q8
X2NvbV9JSUlEPElEMkQxQml0bWFwLCAmX191dWlkb2YoSUQyRDFCaXRtYXApPj4gbV9iaXRtYXA7
Ci0gICAgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQsICZfX3V1
aWRvZihJRDJEMUJpdG1hcFJlbmRlclRhcmdldCk+PiBtX2NvbnRleHQ7Ci19OwotCi1SZWZQdHI8
Qml0bWFwQ29udGV4dD4gY3JlYXRlQml0bWFwQ29udGV4dEZyb21XZWJWaWV3KGJvb2wgb25zY3Jl
ZW4sIGJvb2wgaW5jcmVtZW50YWxSZXBhaW50LCBib29sIHN3ZWVwSG9yaXpvbnRhbGx5LCBib29s
IGRyYXdTZWxlY3Rpb25SZWN0KTsKLUlEMkQxRmFjdG9yeSogcGl4ZWxEdW1wU3lzdGVtRmFjdG9y
eSgpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BpeGVsRHVtcFN1cHBvcnRXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBw
b3J0V2luLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L1BpeGVsRHVtcFN1cHBvcnRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw2IEBA
CiAjaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydENHLmgiCiAjZWxpZiBVU0UoQ0FJUk8pCiAjaW5j
bHVkZSAiUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5j
bHVkZSAiUGl4ZWxEdW1wU3VwcG9ydERpcmVjdDJELmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgIkR1
bXBSZW5kZXJUcmVlLmgiCkBAIC05NiwxOSArOTQsNiBAQCBSZWZQdHI8Qml0bWFwQ29udGV4dD4g
Y3JlYXRlQml0bWFwQ29udGV4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmZvLmJtV2lkdGgsIGluZm8uYm1IZWlnaHQsIGluZm8uYm1XaWR0
aEJ5dGVzKTsgCiAgICAgY2Fpcm9fdCogY29udGV4dCA9IGNhaXJvX2NyZWF0ZShpbWFnZSk7IAog
ICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShpbWFnZSk7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0g
ICAgYXV0byB0YXJnZXRQcm9wZXJ0aWVzID0gRDJEMTo6UmVuZGVyVGFyZ2V0UHJvcGVydGllcygp
OwotICAgIHRhcmdldFByb3BlcnRpZXMucGl4ZWxGb3JtYXQgPSBEMkQxOjpQaXhlbEZvcm1hdChE
WEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSwgRDJEMV9BTFBIQV9NT0RFX0lHTk9SRSk7Ci0KLSAg
ICBDT01QdHI8SUQyRDFEQ1JlbmRlclRhcmdldD4gcmVuZGVyVGFyZ2V0OwotICAgIEhSRVNVTFQg
aHIgPSBwaXhlbER1bXBTeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZURDUmVuZGVyVGFyZ2V0KCZ0YXJn
ZXRQcm9wZXJ0aWVzLCAmcmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaHIgPSByZW5kZXJUYXJnZXQtPkJpbmREQyht
ZW1vcnlEQy5nZXQoKSwgJmZyYW1lKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIGF1dG8gY29udGV4dCA9IHJlbmRlclRhcmdldC5nZXQoKTsK
ICNlbmRpZiAKIAogICAgIHJldHVybiBCaXRtYXBDb250ZXh0OjpjcmVhdGVCeUFkb3B0aW5nQml0
bWFwQW5kQ29udGV4dChiaXRtYXAsIFdURk1vdmUoY29udGV4dCkpOwpJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5jcHAJ
KHJldmlzaW9uIDI4NzgxMikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9B
ZmZpbmVUcmFuc2Zvcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMCArMzksNiBAQAogI2lu
Y2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KICNlbmRpZgogCi0jaWYgUExBVEZP
Uk0oV0lOKQotI2luY2x1ZGUgPGQyZDEuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgVGVzdFdlYktp
dEFQSSB7CiAKIHN0YXRpYyB2b2lkIHRlc3RHZXRBbmRTZXQoV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtJiBhZmZpbmVUcmFuc2Zvcm0pCkBAIC0xMzUsMTkgKzEzMSw2IEBAIFRFU1QoQWZmaW5lVHJh
bnNmb3JtLCBDR0FmZmluZVRyYW5zZm9ybUMKIH0KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oV0lO
KQotVEVTVChBZmZpbmVUcmFuc2Zvcm0sIEQyRDFNYXRyaXhDb25zdHJ1Y3Rpb24pCi17Ci0gICAg
RDJEMV9NQVRSSVhfM1gyX0YgZDJkVHJhbnNmb3JtID0gRDJEMTo6TWF0cml4M3gyRig2LjAsIDUu
MCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKLSAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVz
dChkMmRUcmFuc2Zvcm0pOwotCi0gICAgdGVzdFZhbHVlQ29uc3RydWN0aW9uKHRlc3QpOwotICAg
IHRlc3RHZXRBbmRTZXQodGVzdCk7Ci0KLSAgICBBU1NFUlRfRkFMU0UodGVzdC5pc0lkZW50aXR5
KCkpOwotfQotI2VuZGlmCi0KIFRFU1QoQWZmaW5lVHJhbnNmb3JtLCBJZGVudGl0eSkKIHsKICAg
ICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdGVzdCg2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwg
MS4wKTsKQEAgLTEwMDIsMjMgKzk4NSw0IEBAIFRFU1QoQWZmaW5lVHJhbnNmb3JtLCBDb3JlR3Jh
cGhpY3NDYXN0aW4KIH0KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oV0lOKQotVEVTVChBZmZpbmVU
cmFuc2Zvcm0sIERpcmVjdDJEQ2FzdGluZykKLXsKLSAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zv
cm0gdHJhbnNmb3JtKDYuMCwgNS4wLCA0LjAsIDMuMCwgMi4wLCAxLjApOwotCi0gICAgRDJEMV9N
QVRSSVhfM1gyX0YgdGVzdCA9IHRyYW5zZm9ybTsKLSAgICBEMkQxX01BVFJJWF8zWDJfRiB0ZXN0
MiA9IEQyRDE6Ok1hdHJpeDN4MkYoNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7Ci0KLSAg
ICBzdGF0aWMgY29uc3QgZG91YmxlIGVwc2lsb24gPSAwLjAwMDAwMDE7Ci0KLSAgICBFWFBFQ1Rf
TkVBUih0ZXN0Ll8xMSwgdGVzdDIuXzExLCBlcHNpbG9uKTsKLSAgICBFWFBFQ1RfTkVBUih0ZXN0
Ll8xMiwgdGVzdDIuXzEyLCBlcHNpbG9uKTsKLSAgICBFWFBFQ1RfTkVBUih0ZXN0Ll8yMSwgdGVz
dDIuXzIxLCBlcHNpbG9uKTsKLSAgICBFWFBFQ1RfTkVBUih0ZXN0Ll8yMiwgdGVzdDIuXzIyLCBl
cHNpbG9uKTsKLSAgICBFWFBFQ1RfTkVBUih0ZXN0Ll8zMSwgdGVzdDIuXzMxLCBlcHNpbG9uKTsK
LSAgICBFWFBFQ1RfTkVBUih0ZXN0Ll8zMiwgdGVzdDIuXzMyLCBlcHNpbG9uKTsKLX0KLSNlbmRp
ZgotCiB9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmxvYXRQb2lu
dFRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvRmxvYXRQb2ludFRlc3RzLmNwcAkocmV2aXNpb24gMjg3ODEyKQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0Zsb2F0UG9pbnRUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDEwICszNiw2IEBACiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5o
PgogI2VuZGlmCiAKLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2VuZGlm
Ci0KIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogc3RhdGljIHZvaWQgdGVzdEdldEFuZFNl
dChXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50KQpAQCAtNTc5LDIwICs1NzUsNiBAQCBURVNUKEZs
b2F0UG9pbnQsIENhc3RpbmcpCiAgICAgRVhQRUNUX0ZMT0FUX0VRKC0yMi4zZiwgdGVzdENHLngo
KSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDE0LjJmLCB0ZXN0Q0cueSgpKTsKICNlbmRpZgotCi0j
aWYgUExBVEZPUk0oV0lOKQotICAgIEQyRF9QT0lOVF8yRiBkMmRQb2ludCA9IGE7Ci0KLSAgICBF
WFBFQ1RfRkxPQVRfRVEoMTAwLjRmLCBkMmRQb2ludC54KTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
MTk5LjlmLCBkMmRQb2ludC55KTsKLQotICAgIEQyRF9QT0lOVF8yRiBkMmRQb2ludDIgPSBEMkQx
OjpQb2ludDJGKC0yMi4zZiwgMTQuMmYpOwotCi0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZXN0
RDJEKGQyZFBvaW50Mik7Ci0KLSAgICBFWFBFQ1RfRkxPQVRfRVEoLTIyLjNmLCB0ZXN0RDJELngo
KSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDE0LjJmLCB0ZXN0RDJELnkoKSk7Ci0jZW5kaWYKIH0K
IAogfQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Zsb2F0UmVjdFRl
c3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
RmxvYXRSZWN0VGVzdHMuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvRmxvYXRSZWN0VGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCwxMCArMzQsNiBAQAogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KICNl
bmRpZgogCi0jaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPGQyZDEuaD4KLSNlbmRpZgotCiBu
YW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIHN0YXRpYyB2b2lkIHRlc3RHZXRBbmRTZXQoV2Vi
Q29yZTo6RmxvYXRSZWN0IHJlY3QpCkBAIC02MzEsMTkgKzYyNyw2IEBAIFRFU1QoRmxvYXRSZWN0
LCBDYXN0aW5nKQogCiAgICAgY2hlY2tDYXN0UmVjdChyZWN0RnJvbUNHUmVjdCk7CiAjZW5kaWYK
LQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKLQot
ICAgIEVYUEVDVF9GTE9BVF9FUSgxMC4wZiwgZDJkUmVjdC5sZWZ0KTsKLSAgICBFWFBFQ1RfRkxP
QVRfRVEoMjAuMGYsIGQyZFJlY3QudG9wKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNDAuMGYsIGQy
ZFJlY3QucmlnaHQpOwotICAgIEVYUEVDVF9GTE9BVF9FUSg2MC4wZiwgZDJkUmVjdC5ib3R0b20p
OwotCi0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3RGcm9tRDJEUmVjdChkMmRSZWN0KTsKLQot
ICAgIGNoZWNrQ2FzdFJlY3QocmVjdEZyb21EMkRSZWN0KTsKLSNlbmRpZgogfQogCiBzdGF0aWMg
dm9pZCBjaGVja0FkZGl0aW9uUmVzdWx0MShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3Qp
CkBAIC03MDksNyArNjkyLDcgQEAgVEVTVChGbG9hdFJlY3QsIEluZmluaXRlUmVjdCkKIAogICAg
IC8vIEZJWE1FOiBXZSBoYXZlIGFuIHVudXN1YWwgcmVwcmVzZW50YXRpb24gZm9yIG91ciBpbmZp
bml0ZSByZWN0LgogICAgIC8vIFdlYkNvcmU6OkZsb2F0OjppbmZpbml0ZVJlY3QgaXMgKG5lZ2F0
aXZlIGluZmluaXR5KS8yIGZvciB0aGUgdXBwZXIgbGVmdCBjb3JuZXIsCi0gICAgLy8gd2hpbGUg
Q29yZUdyYXBoaWNzIGFuZCBEMkQgdXNlIChuZWdhdGl2ZSBpbmZpbml0eSkuCisgICAgLy8gd2hp
bGUgQ29yZUdyYXBoaWNzIHVzZXMgKG5lZ2F0aXZlIGluZmluaXR5KS4KIAogI2lmIFVTRShDRykK
ICAgICBDR1JlY3QgY2dJbmZpbml0ZVJlY3QgPSBDR1JlY3RJbmZpbml0ZTsKQEAgLTcyNywxNiAr
NzEwLDYgQEAgVEVTVChGbG9hdFJlY3QsIEluZmluaXRlUmVjdCkKICNlbmRpZgogICAgIC8vIEFT
U0VSVF9UUlVFKGluZmluaXRlID09IGNnSW5maW5pdGVSZWN0KTsKICNlbmRpZgotCi0jaWYgUExB
VEZPUk0oV0lOKQotICAgIEQyRDFfUkVDVF9GIGQyZEluZmluaXRlUmVjdCA9IEQyRDE6OkluZmlu
aXRlUmVjdCgpOwotCi0gICAgRVhQRUNUX0ZMT0FUX0VRKC1zdGQ6Om51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6bWF4KCksIGQyZEluZmluaXRlUmVjdC5sZWZ0KTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
LXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSwgZDJkSW5maW5pdGVSZWN0LnRvcCk7
Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSwg
ZDJkSW5maW5pdGVSZWN0LnJpZ2h0KTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoc3RkOjpudW1lcmlj
X2xpbWl0czxmbG9hdD46Om1heCgpLCBkMmRJbmZpbml0ZVJlY3QuYm90dG9tKTsKLSAgICAvLyBB
U1NFUlRfVFJVRShpbmZpbml0ZSA9PSBkMmRJbmZpbml0ZVJlY3QpOwotI2VuZGlmCiB9CiAKIFRF
U1QoRmxvYXRSZWN0LCBFbmNsb3NpbmdBbmRSb3VuZGluZykKSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9GbG9hdFNpemVUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Zsb2F0U2l6ZVRlc3RzLmNwcAkocmV2aXNp
b24gMjg3ODEyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Zsb2F0U2l6
ZVRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTAgKzMzLDYgQEAKICNpbmNsdWRlIDxD
b3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFdJTikK
LSNpbmNsdWRlIDxkMmQxLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewog
CiBzdGF0aWMgdm9pZCB0ZXN0R2V0QW5kU2V0KFdlYkNvcmU6OkZsb2F0U2l6ZSBzaXplKQpAQCAt
MjA5LDIwICsyMDUsNiBAQCBURVNUKEZsb2F0U2l6ZSwgQ2FzdGluZykKICAgICBFWFBFQ1RfRkxP
QVRfRVEoLTIyLjNmLCB0ZXN0Q0cud2lkdGgoKSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDE0LjJm
LCB0ZXN0Q0cuaGVpZ2h0KCkpOwogI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgRDJE
MV9TSVpFX0YgZDJkU2l6ZSA9IHRlc3Q7Ci0KLSAgICBFWFBFQ1RfRkxPQVRfRVEoMTAyNC4wZiwg
ZDJkU2l6ZS53aWR0aCk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDc2OC4wZiwgZDJkU2l6ZS5oZWln
aHQpOwotCi0gICAgRDJEMV9TSVpFX0YgZDJkU2l6ZTIgPSBEMkQxOjpTaXplRigtMjIuM2YsIDE0
LjJmKTsKLQotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSB0ZXN0RDJEKGQyZFNpemUyKTsKLQotICAg
IEVYUEVDVF9GTE9BVF9FUSgtMjIuM2YsIHRlc3REMkQud2lkdGgoKSk7Ci0gICAgRVhQRUNUX0ZM
T0FUX0VRKDE0LjJmLCB0ZXN0RDJELmhlaWdodCgpKTsKLSNlbmRpZgogfQogCiBURVNUKEZsb2F0
U2l6ZSwgQWRkU3VidHJhY3QpCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvSW50UG9pbnRUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0ludFBvaW50VGVzdHMuY3BwCShyZXZpc2lvbiAyODc4MTIpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSW50UG9pbnRUZXN0cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDEwICszMyw2IEBACiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFw
aGljcy5oPgogI2VuZGlmCiAKLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8ZDJkMS5oPgot
I2VuZGlmCi0KIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogc3RhdGljIHZvaWQgdGVzdEdl
dEFuZFNldChXZWJDb3JlOjpJbnRQb2ludCBwb2ludCkKQEAgLTE5NywyNiArMTkzLDYgQEAgVEVT
VChJbnRQb2ludCwgQ2FzdCkKICAgICBFWFBFQ1RfRVEoMTAsIGZyb21HRElQb2ludC54KCkpOwog
ICAgIEVYUEVDVF9FUSgyMCwgZnJvbUdESVBvaW50LnkoKSk7CiAgICAgQVNTRVJUX1RSVUUoYSA9
PSBmcm9tR0RJUG9pbnQpOwotCi0gICAgRDJEMV9QT0lOVF8yRiBkMmRQb2ludEYgPSBhOwotCi0g
ICAgQVNTRVJUX0ZMT0FUX0VRKDEwLjBmLCBkMmRQb2ludEYueCk7Ci0gICAgQVNTRVJUX0ZMT0FU
X0VRKDIwLjBmLCBkMmRQb2ludEYueSk7Ci0KLSAgICBXZWJDb3JlOjpJbnRQb2ludCBmcm9tRDJE
UG9pbnRGKGQyZFBvaW50Rik7Ci0gICAgRVhQRUNUX0VRKDEwLCBmcm9tRDJEUG9pbnRGLngoKSk7
Ci0gICAgRVhQRUNUX0VRKDIwLCBmcm9tRDJEUG9pbnRGLnkoKSk7Ci0gICAgQVNTRVJUX1RSVUUo
YSA9PSBmcm9tRDJEUG9pbnRGKTsKLQotICAgIEQyRDFfUE9JTlRfMlUgZDJkUG9pbnRVID0gYTsK
LQotICAgIEFTU0VSVF9GTE9BVF9FUSgxMC4wZiwgZDJkUG9pbnRVLngpOwotICAgIEFTU0VSVF9G
TE9BVF9FUSgyMC4wZiwgZDJkUG9pbnRVLnkpOwotCi0gICAgV2ViQ29yZTo6SW50UG9pbnQgZnJv
bUQyRFBvaW50VShkMmRQb2ludFUpOwotICAgIEVYUEVDVF9FUSgxMCwgZnJvbUQyRFBvaW50VS54
KCkpOwotICAgIEVYUEVDVF9FUSgyMCwgZnJvbUQyRFBvaW50VS55KCkpOwotICAgIEFTU0VSVF9U
UlVFKGEgPT0gZnJvbUQyRFBvaW50VSk7CiAjZW5kaWYKIH0KIApJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0ludFJlY3RUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0ludFJlY3RUZXN0cy5jcHAJKHJldmlzaW9u
IDI4NzgxMikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JbnRSZWN0VGVz
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsNiBAQAogI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oV0lOKQotI2lu
Y2x1ZGUgPGQyZDEuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIHN0
YXRpYyB2b2lkIHRlc3RHZXRBbmRTZXQoV2ViQ29yZTo6SW50UmVjdCByZWN0KQpAQCAtNTE2LDI4
ICs1MTIsNiBAQCBURVNUKEludFJlY3QsIENhc3RpbmcpCiAgICAgV2ViQ29yZTo6SW50UmVjdCBy
ZWN0RnJvbUdESVJlY3QoZ2RpUmVjdCk7CiAKICAgICBjaGVja0Nhc3RSZWN0KHJlY3RGcm9tR0RJ
UmVjdCk7Ci0KLSAgICBEMkQxX1JFQ1RfVSBkMmRSZWN0VSA9IHJlY3Q7Ci0KLSAgICBFWFBFQ1Rf
RVEoMTAsIGQyZFJlY3RVLmxlZnQpOwotICAgIEVYUEVDVF9FUSgyMCwgZDJkUmVjdFUudG9wKTsK
LSAgICBFWFBFQ1RfRVEoNDAsIGQyZFJlY3RVLnJpZ2h0KTsKLSAgICBFWFBFQ1RfRVEoNjAsIGQy
ZFJlY3RVLmJvdHRvbSk7Ci0KLSAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3RGcm9tRDJEUmVjdFUo
ZDJkUmVjdFUpOwotCi0gICAgY2hlY2tDYXN0UmVjdChyZWN0RnJvbUQyRFJlY3RVKTsKLQotICAg
IEQyRDFfUkVDVF9GIGQyZFJlY3RGID0gcmVjdDsKLQotICAgIEVYUEVDVF9GTE9BVF9FUSgxMC4w
ZiwgZDJkUmVjdEYubGVmdCk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDIwLjBmLCBkMmRSZWN0Ri50
b3ApOwotICAgIEVYUEVDVF9GTE9BVF9FUSg0MC4wZiwgZDJkUmVjdEYucmlnaHQpOwotICAgIEVY
UEVDVF9GTE9BVF9FUSg2MC4wZiwgZDJkUmVjdEYuYm90dG9tKTsKLQotICAgIFdlYkNvcmU6Oklu
dFJlY3QgcmVjdEZyb21EMkRSZWN0RihkMmRSZWN0Rik7Ci0KLSAgICBjaGVja0Nhc3RSZWN0KHJl
Y3RGcm9tRDJEUmVjdEYpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9JbnRTaXplVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JbnRTaXplVGVzdHMuY3BwCShyZXZpc2lvbiAyODc4MTIp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSW50U2l6ZVRlc3RzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDYgQEAKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3Mv
Q29yZUdyYXBoaWNzLmg+CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxk
MmQxLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBzdGF0aWMgdm9p
ZCB0ZXN0R2V0QW5kU2V0KFdlYkNvcmU6OkludFNpemUgcmVjdCkKQEAgLTIwOCwzMCArMjA0LDYg
QEAgVEVTVChJbnRTaXplLCBDYXN0aW5nKQogICAgIEVYUEVDVF9FUSgtMjIsIHRlc3RDRy53aWR0
aCgpKTsKICAgICBFWFBFQ1RfRVEoMTQsIHRlc3RDRy5oZWlnaHQoKSk7CiAjZW5kaWYKLQotI2lm
IFBMQVRGT1JNKFdJTikKLSAgICBEMkQxX1NJWkVfVSBkMmRTaXplVSA9IHRlc3Q7Ci0gICAgRVhQ
RUNUX0VRKDEwMjQsIGQyZFNpemVVLndpZHRoKTsKLSAgICBFWFBFQ1RfRVEoNzY4LCBkMmRTaXpl
VS5oZWlnaHQpOwotCi0gICAgRDJEMV9TSVpFX0YgZDJkU2l6ZUYgPSB0ZXN0OwotICAgIEVYUEVD
VF9GTE9BVF9FUSgxMDI0LjBmLCBkMmRTaXplRi53aWR0aCk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VR
KDc2OC4wZiwgZDJkU2l6ZUYuaGVpZ2h0KTsKLQotICAgIEQyRDFfU0laRV9GIGQyZFNpemVGMiA9
IEQyRDE6OlNpemVGKC0yMi4zZiwgMTQuNmYpOwotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSB0ZXN0
RDJEKGQyZFNpemVGMik7Ci0KLSAgICBFWFBFQ1RfRVEoLTIyLCB0ZXN0RDJELndpZHRoKCkpOwot
ICAgIEVYUEVDVF9FUSgxNCwgdGVzdEQyRC5oZWlnaHQoKSk7Ci0KLSAgICBEMkQxX1NJWkVfRiBk
MmRTaXplVTIgPSBEMkQxOjpTaXplRigtMjMsIDE2KTsKLQotICAgIFdlYkNvcmU6OkludFNpemUg
dGVzdEQyRDIoZDJkU2l6ZVUyKTsKLQotICAgIEVYUEVDVF9FUSgtMjMsIHRlc3REMkQyLndpZHRo
KCkpOwotICAgIEVYUEVDVF9FUSgxNiwgdGVzdEQyRDIuaGVpZ2h0KCkpOwotI2VuZGlmCiB9CiAK
IFRFU1QoSW50U2l6ZSwgQWRkU3VidHJhY3QpCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAJKHJl
dmlzaW9uIDI4NzgxMikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9UcmFu
c2Zvcm1hdGlvbk1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEwICs0Miw2IEBACiAj
aW5jbHVkZSA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JN
KFdJTikKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkgewogCiBzdGF0aWMgdm9pZCB0ZXN0SWRlbnRpdHkoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKQEAgLTE5OCwxOSArMTk0LDYgQEAgVEVTVChUcmFuc2Zv
cm1hdGlvbk1hdHJpeCwgQ0dBZmZpbmVUcmFucwogfQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShX
SU4pCi1URVNUKFRyYW5zZm9ybWF0aW9uTWF0cml4LCBEMkQxTWF0cml4Q29uc3RydWN0aW9uKQot
ewotICAgIEQyRDFfTUFUUklYXzNYMl9GIGQyZFRyYW5zZm9ybSA9IEQyRDE6Ok1hdHJpeDN4MkYo
Ni4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7Ci0gICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRp
b25NYXRyaXggdGVzdChkMmRUcmFuc2Zvcm0pOwotCi0gICAgdGVzdEFmZmluZUxpa2VDb25zdHJ1
Y3Rpb24odGVzdCk7Ci0gICAgdGVzdEdldEFuZFNldCh0ZXN0KTsKLQotICAgIEFTU0VSVF9GQUxT
RSh0ZXN0LmlzSWRlbnRpdHkoKSk7Ci19Ci0jZW5kaWYKLQogVEVTVChUcmFuc2Zvcm1hdGlvbk1h
dHJpeCwgQWZmaW5lVHJhbnNmb3JtQ29uc3RydWN0aW9uKQogewogICAgIFdlYkNvcmU6OkFmZmlu
ZVRyYW5zZm9ybSBhZmZpbmVUcmFuc2Zvcm0oNi4wLCA1LjAsIDQuMCwgMy4wLCAyLjAsIDEuMCk7
CkBAIC0xMjY3LDIxICsxMjUwLDYgQEAgVEVTVChUcmFuc2Zvcm1hdGlvbk1hdHJpeCwgQ2FzdGlu
ZykKICAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuMCwgZ2RpRnJvbVdLLmVEeCk7CiAgICAgRVhQRUNU
X0RPVUJMRV9FUSgzLjAsIGdkaUZyb21XSy5lRHkpOwogI2VuZGlmCi0KLSNpZiBQTEFURk9STShX
SU4pCi0gICAgRDJEMV9NQVRSSVhfM1gyX0YgZDJkVHJhbnNmb3JtID0gRDJEMTo6TWF0cml4M3gy
Rig2LjAsIDUuMCwgNC4wLCAzLjAsIDIuMCwgMS4wKTsKLSAgICBXZWJDb3JlOjpUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBmcm9tRDJEVHJhbnNmb3JtKGQyZFRyYW5zZm9ybSk7Ci0KLSAgICB0ZXN0QWZm
aW5lTGlrZUNvbnN0cnVjdGlvbihmcm9tRDJEVHJhbnNmb3JtKTsKLQotICAgIEQyRDFfTUFUUklY
XzNYMl9GIGQyZEZyb21XSyA9IHRlc3Q7Ci0gICAgRVhQRUNUX0RPVUJMRV9FUSgxNi4wLCBkMmRG
cm9tV0suXzExKTsKLSAgICBFWFBFQ1RfRE9VQkxFX0VRKDE1LjAsIGQyZEZyb21XSy5fMTIpOwot
ICAgIEVYUEVDVF9ET1VCTEVfRVEoMTIuMCwgZDJkRnJvbVdLLl8yMSk7Ci0gICAgRVhQRUNUX0RP
VUJMRV9FUSgxMS4wLCBkMmRGcm9tV0suXzIyKTsKLSAgICBFWFBFQ1RfRE9VQkxFX0VRKDQuMCwg
ZDJkRnJvbVdLLl8zMSk7Ci0gICAgRVhQRUNUX0RPVUJMRV9FUSgzLjAsIGQyZEZyb21XSy5fMzIp
OwotI2VuZGlmCiB9CiAKIFRFU1QoVHJhbnNmb3JtYXRpb25NYXRyaXgsIE1ha2VNYXBCZXR3ZWVu
UmVjdHMpCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtRlRXLmNtYWtlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1GVFcuY21ha2UJKHJl
dmlzaW9uIDI4NzgxMikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1GVFcuY21h
a2UJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MCArMCwwIEBACi1saXN0KEFQUEVORCBXZWJLaXRUZXN0
UnVubmVyX1NPVVJDRVMKLSAgICB3aW4vRXZlbnRTZW5kZXJQcm94eVdpbi5jcHAKLSAgICB3aW4v
UGxhdGZvcm1XZWJWaWV3V2luLmNwcAotICAgIHdpbi9UZXN0Q29udHJvbGxlcldpbi5jcHAKLSAg
ICB3aW4vVGVzdEludm9jYXRpb25EaXJlY3QyRC5jcHAKLSAgICB3aW4vVUlTY3JpcHRDb250cm9s
bGVyV2luLmNwcAotICAgIHdpbi9tYWluLmNwcAotKQotCi1zZXQod3JhcHBlcl9ERUZJTklUSU9O
UwotICAgIFVTRV9DT05TT0xFX0VOVFJZX1BPSU5UCi0gICAgV0lOX0NBSVJPCi0pCi0KLWxpc3Qo
QVBQRU5EIFdlYktpdFRlc3RSdW5uZXJJbmplY3RlZEJ1bmRsZV9TT1VSQ0VTCi0gICAgSW5qZWN0
ZWRCdW5kbGUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcAotICAgIEluamVjdGVk
QnVuZGxlL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2luLmNwcAotICAgIEluamVjdGVkQnVu
ZGxlL3dpbi9BY3RpdmF0ZUZvbnRzV2luLmNwcAotICAgIEluamVjdGVkQnVuZGxlL3dpbi9Jbmpl
Y3RlZEJ1bmRsZVdpbi5jcHAKLSAgICBJbmplY3RlZEJ1bmRsZS93aW4vVGVzdFJ1bm5lcldpbi5j
cHAKLSkKLQotbGlzdChBUFBFTkQgV2ViS2l0VGVzdFJ1bm5lcl9JTkNMVURFX0RJUkVDVE9SSUVT
Ci0gICAgJHtXZWJLaXRUZXN0UnVubmVyX0RJUn0vSW5qZWN0ZWRCdW5kbGUvd2luCi0pCi0KLWxp
c3QoQVBQRU5EIFdlYktpdFRlc3RSdW5uZXJfTElCUkFSSUVTCi0gICAgQ29tc3VwcHcKLSAgICBP
bGVhY2MKLSkKLQotV0VCS0lUX0FERF9QUkVDT01QSUxFRF9IRUFERVIoIldlYktpdFRlc3RSdW5u
ZXJQcmVmaXguaCIgIndpbi9XZWJLaXRUZXN0UnVubmVyUHJlZml4LmNwcCIgV2ViS2l0VGVzdFJ1
bm5lcl9TT1VSQ0VTKQotCi1zZXQoQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHUyAiJHtDTUFLRV9T
SEFSRURfTElOS0VSX0ZMQUdTfSAke01TVkNfUlVOVElNRV9MSU5LRVJfRkxBR1N9IikKLQotV0VC
S0lUX1dSQVBfRVhFQ1VUQUJMRShXZWJLaXRUZXN0UnVubmVyCi0gICAgU09VUkNFUyAke1RPT0xT
X0RJUn0vd2luL0RMTExhdW5jaGVyL0RMTExhdW5jaGVyTWFpbi5jcHAKLSAgICBMSUJSQVJJRVMg
c2hsd2FwaQotKQotdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoV2ViS2l0VGVzdFJ1bm5lciBQ
UklWQVRFICR7d3JhcHBlcl9ERUZJTklUSU9OU30pCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL1BsYXRmb3JtV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvUGxhdGZvcm1XZWJWaWV3LmgJKHJldmlzaW9uIDI4NzgxMikKKysrIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDExICs1NCw3
IEBAIGNsYXNzIEhlYWRsZXNzVmlld0JhY2tlbmQ7CiB0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9y
bVdLVmlldzsKIHR5cGVkZWYgV1BFVG9vbGluZ0JhY2tlbmRzOjpIZWFkbGVzc1ZpZXdCYWNrZW5k
KiBQbGF0Zm9ybVdpbmRvdzsKICNlbGlmIFBMQVRGT1JNKFdJTikKLSNpZiBVU0UoRElSRUNUMkQp
Ci0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jZWxzZQogI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYK
IGNsYXNzIFRlc3RSdW5uZXJXaW5kb3c7CiB0eXBlZGVmIEhXTkQgUGxhdGZvcm1XaW5kb3c7CiB0
eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdLVmlldzsKQEAgLTY2LDEwICs2Miw2IEBAIHR5cGVk
ZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogCiAjaWYgVVNFKENBSVJPKQogdHlwZWRlZiBj
YWlyb19zdXJmYWNlX3QqIFBsYXRmb3JtSW1hZ2U7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi1pbnRl
cmZhY2UgSUQyRDFCaXRtYXA7Ci0KLXR5cGVkZWYgSUQyRDFCaXRtYXAqIFBsYXRmb3JtSW1hZ2U7
CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdUUiB7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3Bw
CShyZXZpc2lvbiAyODc4MTIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcg
QEAKICNpbmNsdWRlIDx3dGYvdGV4dC9jZi9TdHJpbmdDb25jYXRlbmF0ZUNGLmg+CiAjZW5kaWYK
IAotI2lmIFVTRShDRikgJiYgIVBMQVRGT1JNKFdJTl9DQUlSTykgJiYgIVVTRShESVJFQ1QyRCkK
KyNpZiBVU0UoQ0YpICYmICFQTEFURk9STShXSU5fQ0FJUk8pCiAjaW5jbHVkZSAiV2ViQXJjaGl2
ZUR1bXBTdXBwb3J0LmgiCiAjZW5kaWYKIApAQCAtNzgwLDcgKzc4MCw3IEBAIHZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpkdW1wQWxsRnJhbWVzVGUKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OmR1bXBET01Bc1dlYkFyY2hpdmUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRl
ciYgc3RyaW5nQnVpbGRlcikKIHsKLSNpZiBVU0UoQ0YpICYmICFQTEFURk9STShXSU5fQ0FJUk8p
ICYmICFVU0UoRElSRUNUMkQpCisjaWYgVVNFKENGKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKQog
ICAgIGF1dG8gd2tEYXRhID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVdlYkFyY2hpdmUoZnJh
bWUpKTsKICAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKDAsIFdLRGF0YUdl
dEJ5dGVzKHdrRGF0YS5nZXQoKSksIFdLRGF0YUdldFNpemUod2tEYXRhLmdldCgpKSkpOwogICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKFdlYkNvcmVUZXN0U3VwcG9ydDo6Y3JlYXRlWE1MU3RyaW5n
RnJvbVdlYkFyY2hpdmVEYXRhKGNmRGF0YS5nZXQoKSkuZ2V0KCkpOwpJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci93aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCShyZXZpc2lv
biAyODc4MTIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9QbGF0Zm9ybVdlYlZpZXdX
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMCArMzksNiBAQAogI2luY2x1ZGUgPGNhaXJv
Lmg+CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkMmQxXzEuaD4KLSNl
bmRpZgotCiBuYW1lc3BhY2UgV1RSIHsKIAogc3RhdGljIExQQ1dTVFIgaG9zdFdpbmRvd0NsYXNz
TmFtZSA9IEwiV1RSV2ViVmlld0hvc3RXaW5kb3ciOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci93aW4vVGVzdEludm9jYXRpb25EaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdEludm9jYXRpb25EaXJlY3QyRC5jcHAJKHJldmlzaW9u
IDI4NzgxMikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1Rlc3RJbnZvY2F0aW9uRGly
ZWN0MkQuY3BwCShub25leGlzdGVudCkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICAgICAg
ICAgICAoQykgMjAxMSBCcmVudCBGdWxnaGFtIDxiZnVsZ2hhbUB3ZWJraXQub3JnPi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqICAgICAgICAgICAoQykgMjAxMCwgMjAxMSBJZ2FsaWEgUy5MCi0g
KiAgICAgICAgICAgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0SW52b2Nh
dGlvbi5oIgotCi0jaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydC5oIgotI2luY2x1ZGUgIlBsYXRm
b3JtV2ViVmlldy5oIgotI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPGNzdGRpbz4KLSNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KLQotbmFtZXNwYWNl
IFdUUiB7Ci0KLQotdm9pZCBUZXN0SW52b2NhdGlvbjo6ZHVtcFBpeGVsc0FuZENvbXBhcmVXaXRo
RXhwZWN0ZWQoU25hcHNob3RSZXN1bHRUeXBlLCBXS0FycmF5UmVmIC8qIHJlcGFpbnRSZWN0cyAq
LywgV0tJbWFnZVJlZikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXVFIK
</data>

          </attachment>
      

    </bug>

</bugzilla>