<?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>185423</bug_id>
          
          <creation_ts>2018-05-08 07:17:41 -0700</creation_ts>
          <short_desc>[ARMv7] Drop ARMv7 disassembler in favor of capstone</short_desc>
          <delta_ts>2018-05-09 08:44:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>185283</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>clopez</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>msaboff</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1421718</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-05-08 07:17:41 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1422219</commentid>
    <comment_count>1</comment_count>
      <attachid>339955</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-05-09 04:53:08 -0700</bug_when>
    <thetext>Created attachment 339955
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1422266</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-05-09 08:43:55 -0700</bug_when>
    <thetext>Committed r231560: &lt;https://trac.webkit.org/changeset/231560&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1422267</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-05-09 08:44:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/40093121&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339955</attachid>
            <date>2018-05-09 04:53:08 -0700</date>
            <delta_ts>2018-05-09 08:30:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185423-20180509205307.patch</filename>
            <type>text/plain</type>
            <size>103086</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMxNTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
MTI5YWFhMzk1MmZmNWE4YjMyMTUyODM1MWQwNTdmYTVlMmVkODg1Li4yZDkzNGZkYzc1ZTA4ZjRl
ODIwNGUxODZkYzExNWRkM2E3ODdiYzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAxOC0wNS0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbQVJNdjddIERyb3AgQVJNdjcgZGlzYXNzZW1ibGVyIGluIGZhdm9y
IG9mIGNhcHN0b25lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xODU0MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgQVJNdjdEaXNhc3NlbWJsZXIgaW4gb3VyIHRyZWUuCisg
ICAgICAgIFdlIGFscmVhZHkgYWRvcHRlZCBDYXBzdG9uZSwgYW5kIGl0IGlzIGFscmVhZHkgdXNl
ZCBpbiBBUk12NyBKSVQgZW52aXJvbm1lbnRzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBkaXNhc3NlbWJsZXIvQVJNdjcvQVJNdjdE
T3Bjb2RlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBkaXNhc3NlbWJsZXIvQVJNdjcvQVJNdjdE
T3Bjb2RlLmg6IFJlbW92ZWQuCisgICAgICAgICogZGlzYXNzZW1ibGVyL0FSTXY3RGlzYXNzZW1i
bGVyLmNwcDogUmVtb3ZlZC4KKwogMjAxOC0wNS0wNiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXVtHVEtdW0pTQ09OTFldIFVzZSBjYXBzdG9u
ZSBkaXNhc3NlbWJsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNl
L1dURi9DaGFuZ2VMb2cKaW5kZXggNmRkNzBlMjAyZDQwZmJjNmFkOGM5NTQ5MTEzZGJjODNiYzlj
MTM2Yy4uOWMzYjA3MTI3NDhlMjU5ZTlkOTQ3YTQzMGNmZjA1NmM0NWYyYWRmNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxOC0wNS0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbQVJNdjddIERyb3AgQVJNdjcgZGlzYXNzZW1ibGVyIGluIGZhdm9y
IG9mIGNhcHN0b25lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xODU0MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZW1vdmUgVVNFX0FSTVY3X0RJU0FTU0VNQkxFUi4gSnVzdCB1c2UgQ2Fwc3RvbmUuCisK
KyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAxOC0wNS0wNiAgWXVzdWtlIFN1enVraSAg
PHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXVtHVEtdW0pTQ09OTFldIFVz
ZSBjYXBzdG9uZSBkaXNhc3NlbWJsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApp
bmRleCAzYTRlMjZlOGU3YmY5YWRjZmU3ZjQ0ZTljYTE5OWI5NWExMzg3MDYzLi4zZmY2ZGZlOGJm
YTkxMDRhMjc1YTE2YjI2MDU4YjA3NjkzNmUzYzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CkBAIC0yNCw3ICsyNCw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0lO
Q0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2RmZyIKICAgICAi
JHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2Rpc2Fzc2VtYmxlciIKICAgICAiJHtKQVZBU0NSSVBUQ09S
RV9ESVJ9L2Rpc2Fzc2VtYmxlci9BUk02NCIKLSAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2Rp
c2Fzc2VtYmxlci9BUk12NyIKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2Rpc2Fzc2VtYmxl
ci91ZGlzODYiCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9kb21qaXQiCiAgICAgIiR7SkFW
QVNDUklQVENPUkVfRElSfS9mdGwiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDJm
ZWY1NGYzYjQ5NTE5MjEwYThiNDk0ZTU5MzAyNGMyY2ZhODk4ZDkuLjEyMjMwMzg2MzYyOGMwMGMy
ZDkxNDEyMGMzNDgwZTlkNDY1ZGIyOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xMDY2LDcgKzEwNjYsNiBAQAogCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyogVk1FbnRy
eVJlY29yZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjU4RDNBNTUxOTYzODI2ODAwM0M0NUQ2IC8qIFZNRW50cnlSZWNvcmQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2NTlDREE1QjFGNjc1M0YyMDBE
M0U1M0YgLyogWWFyclVuaWNvZGVQcm9wZXJ0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTlDREE1QTFGNjc1MDk4MDBEM0U1M0YgLyogWWFyclVu
aWNvZGVQcm9wZXJ0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUI4MzkyQzFC
QUNBOTJBMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuaCAqLzsgfTsKLQkJNjVDMDI4NUQxNzE3
OTY2ODAwMzUxRTM1IC8qIEFSTXY3RE9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjVDMDI4NUIxNzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3RE9w
Y29kZS5oICovOyB9OwogCQk2QTM4Q0ZBQTFFMzJCNUFCMDA2MDIwNkYgLyogQXN5bmNTdGFja1Ry
YWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QTM4
Q0ZBODFFMzJCNThCMDA2MDIwNkYgLyogQXN5bmNTdGFja1RyYWNlLmggKi87IH07CiAJCTZBRDJD
QjREMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QUQyQ0I0QzE5QjkxNDAxMDAwNjU3
MTkgLyogRGVidWdnZXJFdmFsRW5hYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTcwMTEzRDRDMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRv
ck9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcwMTEzRDRBMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzUzNiw5ICsz
NTM1LDYgQEAKIAkJNjVBOTQ2MTQxQzhFOUY2RjAwQTcyMDlBIC8qIFlhcnJDYW5vbmljYWxpemVV
bmljb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFlhcnJDYW5v
bmljYWxpemVVbmljb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVCODM5
MkMxQkFDQTkyQTAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENhY2hlZFJlY292ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTY1QjgzOTJEMUJBQ0E5RDMwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWRSZWNvdmVyeS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTY1QzAyODRGMTcxNzk1RTIwMDM1MUUzNSAvKiBB
Uk12N0Rpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBUk12N0Rpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvQVJNdjdEaXNhc3Nl
bWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2NUMwMjg1QTE3MTc5NjY4
MDAzNTFFMzUgLyogQVJNdjdET3Bjb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEFSTXY3RE9wY29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTY1QzAyODVCMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQVJNdjdET3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTY1QzAyRkJCMDYzNzQ2MkEwMDNFN0VFNiAvKiBQcm90ZWN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3RlY3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk2NUM3QTE3MTBBOEVBQUNC
MDBGQTM3RUEgLyogSlNXcmFwcGVyT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1dyYXBwZXJPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2NUM3QTE3MjBBOEVBQUNCMDBGQTM3RUEgLyogSlNXcmFwcGVyT2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dyYXBwZXJPYmplY3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUzNjEsMTAgKzUzNTcsOCBAQAogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk2NTJBM0ExQTE2NTFBOTI0MDBBODBBRkUgLyog
QVJNNjQgKi8sCi0JCQkJNjVDMDI4NTkxNzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3ICovLAogCQkJ
CTBGRjQyNzMzMTU4RUJENjQwMDRDQjlGRiAvKiB1ZGlzODYgKi8sCiAJCQkJNjUyQTNBMjAxNjUx
QzY2MTAwQTgwQUZFIC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCAqLywKLQkJCQk2NUMwMjg0RjE3
MTc5NUUyMDAzNTFFMzUgLyogQVJNdjdEaXNhc3NlbWJsZXIuY3BwICovLAogCQkJCTBGOUQzMzZF
MTY1REJCOEQwMDVBRDM4NyAvKiBEaXNhc3NlbWJsZXIuY3BwICovLAogCQkJCTBGRjQyNzJGMTU4
RUJENDQwMDRDQjlGRiAvKiBEaXNhc3NlbWJsZXIuaCAqLywKIAkJCQkwRkY0MjczMDE1OEVCRDQ0
MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLywKQEAgLTYyMzYsMTYgKzYyMzAs
NiBAQAogCQkJbmFtZSA9IEFSTTY0OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
LQkJNjVDMDI4NTkxNzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3ICovID0gewotCQkJaXNhID0gUEJY
R3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQk2NUMwMjg1QTE3MTc5NjY4MDAzNTFFMzUgLyog
QVJNdjdET3Bjb2RlLmNwcCAqLywKLQkJCQk2NUMwMjg1QjE3MTc5NjY4MDAzNTFFMzUgLyogQVJN
djdET3Bjb2RlLmggKi8sCi0JCQkpOwotCQkJbmFtZSA9IEFSTXY3OwotCQkJcGF0aCA9IGRpc2Fz
c2VtYmxlci9BUk12NzsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAJCTdBQ0RE
RUNGMUUyNTJBQ0EwMDk3QUZFQiAvKiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCkBAIC02NTk5LDkgKzY1ODMsOSBAQAogCQkJCUUxNzg2MzNGMEQ5QkVD
MDAwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggKi8sCiAJCQkJRTM1RTAzNUQxQjdB
QjQzRTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAgKi8sCiAJ
CQkJRTM1RTAzNUUxQjdBQjQzRTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9i
amVjdC5oICovLAotCQkJCUE3QThBRjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAq
LywKIAkJCQlBN0E4QUYyQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovLAogCQkJ
CUE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8sCisJCQkJQTdBOEFG
MkIxN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJheS5oICovLAogCQkJCUJDOUJCOTVCMEUxOTY4
MDYwMERGODg1NSAvKiBJbnRlcm5hbEZ1bmN0aW9uLmNwcCAqLywKIAkJCQlCQzExNjY3QTBFMTk5
QzA1MDA4MDY2REQgLyogSW50ZXJuYWxGdW5jdGlvbi5oICovLAogCQkJCUExQjlFMjMzMUI0RTBE
NjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3IuY3BwICovLApAQCAtNjcwOSw5ICs2NjkzLDkgQEAK
IAkJCQlCQzc1NkZDNjBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
Y3BwICovLAogCQkJCUJDNzU2RkM3MEUyMDMxQjIwMERFN0QxMiAvKiBKU0dsb2JhbE9iamVjdEZ1
bmN0aW9ucy5oICovLAogCQkJCTc5QjgxOTkyMUREMjVDRjUwMEREQzcxNCAvKiBKU0dsb2JhbE9i
amVjdElubGluZXMuaCAqLywKLQkJCQkwRjJCNjZDOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQ4
QXJyYXkuaCAqLywKIAkJCQkwRjJCNjZDQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQxNkFycmF5
LmggKi8sCiAJCQkJMEYyQjY2Q0IxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJBcnJheS5oICov
LAorCQkJCTBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oICovLAogCQkJ
CUUzM0Y1MDdFMUI4NDI5QTQwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZS5jcHAgKi8sCiAJ
CQkJRTMzRjUwN0YxQjg0MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggKi8sCiAJ
CQkJRTMzRjUwNzYxQjg0MjI1NzAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0
b3IuY3BwICovLApAQCAtNjgwMCwxMCArNjc4NCwxMCBAQAogCQkJCTUzRjI1NkUxMUI4N0UyODAw
MEI0Qjc2OCAvKiBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcCAqLywKIAkJCQk1MzkxN0U3
QzFCNzkxMTA2MDAwRUJEMzMgLyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oICovLAogCQkJ
CTY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmggKi8sCi0JCQkJMEYyQjY2
RDIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhBcnJheS5oICovLAotCQkJCTBGMkI2NkQzMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi8sCiAJCQkJMEYyQjY2RDQx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXkuaCAqLywKIAkJCQkwRjJCNjZENTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oICovLAorCQkJCTBGMkI2NkQyMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLywKKwkJCQkwRjJCNjZEMzE3QjZCNUFCMDBBN0FF
M0YgLyogSlNVaW50OENsYW1wZWRBcnJheS5oICovLAogCQkJCUE3Q0EzQUUxMTdEQTQxQUUwMDY1
MzhBRiAvKiBKU1dlYWtNYXAuY3BwICovLAogCQkJCUE3Q0EzQUUyMTdEQTQxQUUwMDY1MzhBRiAv
KiBKU1dlYWtNYXAuaCAqLywKIAkJCQk3MDlGQjg2MTFBRTMzNUM2MDAzOUQwNjkgLyogSlNXZWFr
U2V0LmNwcCAqLywKQEAgLTcwMTIsMTEgKzY5OTYsMTEgQEAKIAkJCQkwRjJENERFMDE5ODMyRDkx
MDA3RDRCMTkgLyogVHlwZVByb2ZpbGVyTG9nLmggKi8sCiAJCQkJMEYyRDRERTMxOTgzMkQ5MTAw
N0Q0QjE5IC8qIFR5cGVTZXQuY3BwICovLAogCQkJCTBGMkQ0REU0MTk4MzJEOTEwMDdENEIxOSAv
KiBUeXBlU2V0LmggKi8sCi0JCQkJQTdBOEFGMzAxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4QXJy
YXkuaCAqLywKLQkJCQlBN0E4QUYzMTE3QURCNUYzMDA1QUIxNzQgLyogVWludDhDbGFtcGVkQXJy
YXkuaCAqLywKIAkJCQlBN0E4QUYzMjE3QURCNUYzMDA1QUIxNzQgLyogVWludDE2QXJyYXkuaCAq
LywKIAkJCQk4NjY3MzlEMTEzQkZERTcxMDAyM0Q4N0MgLyogVWludDE2V2l0aEZyYWN0aW9uLmgg
Ki8sCiAJCQkJQTdBOEFGMzMxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQzMkFycmF5LmggKi8sCisJ
CQkJQTdBOEFGMzAxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4QXJyYXkuaCAqLywKKwkJCQlBN0E4
QUYzMTE3QURCNUYzMDA1QUIxNzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCAqLywKIAkJCQkwRkUw
NTAyMzFBQTkwOTU2MDBEMzNCMzMgLyogVmFyT2Zmc2V0LmNwcCAqLywKIAkJCQkwRkUwNTAyNDFB
QTkwOTU2MDBEMzNCMzMgLyogVmFyT2Zmc2V0LmggKi8sCiAJCQkJRTE4RTNBNTcwREY5Mjc4QzAw
RDkwQjM0IC8qIFZNLmNwcCAqLywKQEAgLTgyMTEsNyArODE5NSw2IEBACiAJCQkJQTFBMDA5QzEx
ODMxQTI2RTAwQ0Y4NzExIC8qIEFSTTY0QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9j
YXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzNTE3QURCNUYzMDA1QUIx
NzQgLyogQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkM5OUQ1MTg0RUUzMTgw
MDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtODQzNiw2ICs4NDE5LDcgQEAKIAkJCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyog
Q29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUzQTMzMjE3QTFGMUVFMDA4
Q0Y2RjMgLyogQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdFNUEzQTgxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjRGMTFFODIwOUJDREFCMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29w
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQ0UxMkExRkFGQTg1RjAwNkYzOTAxIC8qIENvbXBs
ZXRlU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y0MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBDb21wbGV0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZGQzc1MTE5NjExMEE4MDBF
MUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCkBAIC04NDg5LDYgKzg0
NzMsNyBAQAogCQkJCTBGNUUwRkQ4MjA3QzcyNzMwMDk3RjBERSAvKiBERkdBYnN0cmFjdEludGVy
cHJldGVyQ2xvYmJlclN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNDE3QTBCQUE4
MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjRGMTFFQjIwOUQ0MjY2MDA3MDk2NTQgLyogREZHQWJzdHJhY3RW
YWx1ZUNsb2JiZXJFcG9jaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0MDIxQjYxOEFBRjAw
QzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYxOEQzRDAxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NkUxNkIxNERGM0Yx
NjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtODc4Myw3
ICs4NzY4LDYgQEAKIAkJCQkwRjJCNjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1Jl
ZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAv
KiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2
NkFFMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMEY0RjExRTgyMDlCQ0RBQjAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5nU2Nv
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkFGMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBQUJDREU3
MThFRjI5NDIwMDAwMjA5NiAvKiBHQ0xvZ2dpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTcx
NTMxMUVCMjhCRUUwMEExNjQ1RCAvKiBHQ1JlcXVlc3QuaCBpbiBIZWFkZXJzICovLApAQCAtOTA0
NSw3ICs5MDI5LDYgQEAKIAkJCQlBNTEzRTVDMjE4NUJGQUNDMDA3RTk1QUQgLyogSlNJbmplY3Rl
ZFNjcmlwdEhvc3RQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY4MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY5
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTBG
NEYxMUVCMjA5RDQyNjYwMDcwOTY1NCAvKiBERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQ4QXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkM1MTc2MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0lu
dGVyZmFjZUpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODExQjg0MjlBNDAwNDEzODU2
IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dAppbmRleCBlNGYwMWFkOGY2YjE1NGRjN2FhNDMyZjQyZjg1MmIzZjUxNmIxZmNjLi42
YzQwYTk0NWY4ZThiYWE4YzRkODVkMGZiMWVlZjc0MDkyYjMyOGM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0CkBAIC00MTEsNyArNDExLDYgQEAgZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0
aW9uUGhhc2UuY3BwCiBkZmcvREZHV29ya2xpc3QuY3BwCiAKIGRpc2Fzc2VtYmxlci9BUk02NERp
c2Fzc2VtYmxlci5jcHAKLWRpc2Fzc2VtYmxlci9BUk12N0Rpc2Fzc2VtYmxlci5jcHAKIGRpc2Fz
c2VtYmxlci9DYXBzdG9uZURpc2Fzc2VtYmxlci5jcHAKIGRpc2Fzc2VtYmxlci9EaXNhc3NlbWJs
ZXIuY3BwCiBkaXNhc3NlbWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmNwcApAQCAtNDE5LDggKzQx
OCw2IEBAIGRpc2Fzc2VtYmxlci9YODZEaXNhc3NlbWJsZXIuY3BwCiAKIGRpc2Fzc2VtYmxlci9B
Uk02NC9BNjRET3Bjb2RlLmNwcAogCi1kaXNhc3NlbWJsZXIvQVJNdjcvQVJNdjdET3Bjb2RlLmNw
cAotCiBkaXNhc3NlbWJsZXIvdWRpczg2L3VkaXM4Ni5jCiBkaXNhc3NlbWJsZXIvdWRpczg2L3Vk
aXM4Nl9kZWNvZGUuYwogZGlzYXNzZW1ibGVyL3VkaXM4Ni91ZGlzODZfaXRhYl9ob2xkZXIuYwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk12Ny9BUk12
N0RPcGNvZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk12Ny9B
Uk12N0RPcGNvZGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2I4MmNiZjNh
ZDBmZWM2NTRiZmM2YjI3NzA1MjQ5MjZlY2UxNjk2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIv
QVJNdjcvQVJNdjdET3Bjb2RlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3MzMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2lmIFVTRShBUk1WN19ESVNBU1NFTUJMRVIpCi0KLSNpbmNsdWRlICJBUk12
N0RPcGNvZGUuaCIKLQotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgot
I2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQVJNdjdEaXNhc3NlbWJsZXIgewotCi1BUk12N0QxNkJpdE9wY29kZTo6T3Bj
b2RlR3JvdXAqIEFSTXY3RDE2Qml0T3Bjb2RlOjpvcGNvZGVUYWJsZVszMl07Ci1BUk12N0QzMkJp
dE9wY29kZTo6T3Bjb2RlR3JvdXAqIEFSTXY3RDMyQml0T3Bjb2RlOjpvcGNvZGVUYWJsZVsxNl07
Ci0KLWNvbnN0IGNoYXIqIGNvbnN0IEFSTXY3RE9wY29kZTo6c19jb25kaXRpb25OYW1lc1sxNl0g
PSB7Ci0gICAgImVxIiwgIm5lIiwgImhzIiwgImxvIiwgIm1pIiwgInBsIiwgInZzIiwgInZjIiwK
LSAgICAiaGkiLCAibHMiLCAiZ2UiLCAibHQiLCAiZ3QiLCAibGUiLCAiYWwiLCAiYWwiCi19Owot
Ci1jb25zdCBjaGFyKiBjb25zdCBBUk12N0RPcGNvZGU6OnNfb3B0aW9uTmFtZVs4XSA9IHsKLSAg
ICAidXh0YiIsICJ1eHRoIiwgInV4dHciLCAidXh0eCIsICJzeHRiIiwgInN4dGgiLCAic3h0dyIs
ICJzeHR4IgotfTsKLQotY29uc3QgY2hhciogY29uc3QgQVJNdjdET3Bjb2RlOjpzX3NoaWZ0TmFt
ZXNbNF0gPSB7Ci0gICAgImxzbCIsICJsc3IiLCAiYXNyIiwgInJvciIKLX07Ci0KLWNvbnN0IGNo
YXIqIGNvbnN0IEFSTXY3RE9wY29kZTo6c19zcGVjaWFsUmVnaXN0ZXJOYW1lc1szXSA9IHsgInNw
IiwgImxyIiwgInBjIiB9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5h
bWUgSW5zdHJ1Y3Rpb25UeXBlPgotc3RydWN0IE9wY29kZUdyb3VwSW5pdGlhbGl6ZXIgewotICAg
IHVuc2lnbmVkIG1fb3Bjb2RlR3JvdXBOdW1iZXI7Ci0gICAgSW5zdHJ1Y3Rpb25UeXBlIG1fbWFz
azsKLSAgICBJbnN0cnVjdGlvblR5cGUgbV9wYXR0ZXJuOwotICAgIGNvbnN0IGNoYXIqICgqbV9m
b3JtYXQpKE9wY29kZVR5cGUqKTsKLX07Ci0KLSNkZWZpbmUgT1BDT0RFX0dST1VQX0VOVFJZKGdy
b3VwSW5kZXgsIGdyb3VwQ2xhc3MpIFwKLXsgZ3JvdXBJbmRleCwgZ3JvdXBDbGFzczo6c19tYXNr
LCBncm91cENsYXNzOjpzX3BhdHRlcm4sIGdyb3VwQ2xhc3M6OmZvcm1hdCB9Ci0KLXR5cGVkZWYg
T3Bjb2RlR3JvdXBJbml0aWFsaXplcjxBUk12N0QxNkJpdE9wY29kZSwgdWludDE2X3Q+IE9wY29k
ZTE2R3JvdXBJbml0aWFsaXplcjsKLXR5cGVkZWYgT3Bjb2RlR3JvdXBJbml0aWFsaXplcjxBUk12
N0QzMkJpdE9wY29kZSwgdWludDMyX3Q+IE9wY29kZTMyR3JvdXBJbml0aWFsaXplcjsKLQotc3Rh
dGljIE9wY29kZTE2R3JvdXBJbml0aWFsaXplciBvcGNvZGUxNkJpdEdyb3VwTGlzdFtdID0gewot
ICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweDAsIEFSTXY3RE9wY29kZUxvZ2ljYWxJbW1lZGlhdGVU
MSksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4MSwgQVJNdjdET3Bjb2RlTG9naWNhbEltbWVk
aWF0ZVQxKSwKLSAgICBPUENPREVfR1JPVVBfRU5UUlkoMHgyLCBBUk12N0RPcGNvZGVMb2dpY2Fs
SW1tZWRpYXRlVDEpLAotICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweDMsIEFSTXY3RE9wY29kZUFk
ZFN1YnRyYWN0VDEpLAotICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweDMsIEFSTXY3RE9wY29kZUFk
ZFN1YnRyYWN0SW1tZWRpYXRlMyksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4NCwgQVJNdjdE
T3Bjb2RlTW92ZUltbWVkaWF0ZVQxKSwKLSAgICBPUENPREVfR1JPVVBfRU5UUlkoMHg1LCBBUk12
N0RPcGNvZGVDb21wYXJlSW1tZWRpYXRlVDEpLAotICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweDYs
IEFSTXY3RE9wY29kZUFkZFN1YnRyYWN0SW1tZWRpYXRlOCksCi0gICAgT1BDT0RFX0dST1VQX0VO
VFJZKDB4NywgQVJNdjdET3Bjb2RlQWRkU3VidHJhY3RJbW1lZGlhdGU4KSwKLSAgICBPUENPREVf
R1JPVVBfRU5UUlkoMHg4LCBBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ2lzdGVyVDEpLAot
ICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweDgsIEFSTXY3RE9wY29kZUFkZFJlZ2lzdGVyVDIpLAot
ICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweDgsIEFSTXY3RE9wY29kZUNvbXBhcmVSZWdpc3RlclQy
KSwKLSAgICBPUENPREVfR1JPVVBfRU5UUlkoMHg4LCBBUk12N0RPcGNvZGVDb21wYXJlUmVnaXN0
ZXJUMSksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4OCwgQVJNdjdET3Bjb2RlTW92ZVJlZ2lz
dGVyVDEpLAotICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweDgsIEFSTXY3RE9wY29kZUJyYW5jaEV4
Y2hhbmdlVDEpLAotICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweDksIEFSTXY3RE9wY29kZUxvYWRG
cm9tTGl0ZXJhbFBvb2wpLAotICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweGEsIEFSTXY3RE9wY29k
ZUxvYWRTdG9yZVJlZ2lzdGVyT2Zmc2V0VDEpLAotICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweGIs
IEFSTXY3RE9wY29kZUxvYWRTdG9yZVJlZ2lzdGVyT2Zmc2V0VDEpLAotICAgIE9QQ09ERV9HUk9V
UF9FTlRSWSgweGMsIEFSTXY3RE9wY29kZUxvYWRTdG9yZVJlZ2lzdGVySW1tZWRpYXRlV29yZEFu
ZEJ5dGUpLAotICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweGQsIEFSTXY3RE9wY29kZUxvYWRTdG9y
ZVJlZ2lzdGVySW1tZWRpYXRlV29yZEFuZEJ5dGUpLAotICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgw
eGUsIEFSTXY3RE9wY29kZUxvYWRTdG9yZVJlZ2lzdGVySW1tZWRpYXRlV29yZEFuZEJ5dGUpLAot
ICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweGYsIEFSTXY3RE9wY29kZUxvYWRTdG9yZVJlZ2lzdGVy
SW1tZWRpYXRlV29yZEFuZEJ5dGUpLAotICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweDEwLCBBUk12
N0RPcGNvZGVTdG9yZVJlZ2lzdGVySW1tZWRpYXRlSGFsZldvcmQpLAotICAgIE9QQ09ERV9HUk9V
UF9FTlRSWSgweDExLCBBUk12N0RPcGNvZGVMb2FkUmVnaXN0ZXJJbW1lZGlhdGVIYWxmV29yZCks
Ci0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4MTIsIEFSTXY3RE9wY29kZUxvYWRTdG9yZVJlZ2lz
dGVyU1BSZWxhdGl2ZSksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4MTMsIEFSTXY3RE9wY29k
ZUxvYWRTdG9yZVJlZ2lzdGVyU1BSZWxhdGl2ZSksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4
MTQsIEFSTXY3RE9wY29kZUdlbmVyYXRlUENSZWxhdGl2ZUFkZHJlc3MpLAotICAgIE9QQ09ERV9H
Uk9VUF9FTlRSWSgweDE1LCBBUk12N0RPcGNvZGVBZGRTUFBsdXNJbW1lZGlhdGUpLAotICAgIE9Q
Q09ERV9HUk9VUF9FTlRSWSgweDE2LCBBUk12N0RPcGNvZGVNaXNjQ29tcGFyZUFuZEJyYW5jaCks
Ci0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4MTYsIEFSTXY3RE9wY29kZU1pc2NCeXRlSGFsZndv
cmRPcHMpLAotICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweDE2LCBBUk12N0RPcGNvZGVNaXNjUHVz
aFBvcCksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4MTYsIEFSTXY3RE9wY29kZU1pc2NBZGRT
dWJTUCksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4MTcsIEFSTXY3RE9wY29kZU1pc2NIaW50
MTYpLCAvLyBOZWVkcyB0byBiZSBiZWZvcmUgSWZUaGVuVDEKLSAgICBPUENPREVfR1JPVVBfRU5U
UlkoMHgxNywgQVJNdjdET3Bjb2RlTWlzY0lmVGhlblQxKSwKLSAgICBPUENPREVfR1JPVVBfRU5U
UlkoMHgxNywgQVJNdjdET3Bjb2RlTWlzY0J5dGVIYWxmd29yZE9wcyksCi0gICAgT1BDT0RFX0dS
T1VQX0VOVFJZKDB4MTcsIEFSTXY3RE9wY29kZU1pc2NDb21wYXJlQW5kQnJhbmNoKSwKLSAgICBP
UENPREVfR1JPVVBfRU5UUlkoMHgxNywgQVJNdjdET3Bjb2RlTWlzY1B1c2hQb3ApLAotICAgIE9Q
Q09ERV9HUk9VUF9FTlRSWSgweDE3LCBBUk12N0RPcGNvZGVNaXNjQnJlYWtwb2ludFQxKSwKLSAg
ICBPUENPREVfR1JPVVBfRU5UUlkoMHgxYSwgQVJNdjdET3Bjb2RlQnJhbmNoQ29uZGl0aW9uYWxU
MSksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4MWIsIEFSTXY3RE9wY29kZUJyYW5jaENvbmRp
dGlvbmFsVDEpLAotICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweDFjLCBBUk12N0RPcGNvZGVCcmFu
Y2hUMikKLX07Ci0KLXN0YXRpYyBPcGNvZGUzMkdyb3VwSW5pdGlhbGl6ZXIgb3Bjb2RlMzJCaXRH
cm91cExpc3RbXSA9IHsKLSAgICBPUENPREVfR1JPVVBfRU5UUlkoMHg0LCBBUk12N0RPcGNvZGVE
YXRhUG9wTXVsdGlwbGUpLAotICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweDQsIEFSTXY3RE9wY29k
ZURhdGFQdXNoTXVsdGlwbGUpLAotICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweDUsIEFSTXY3RE9w
Y29kZURhdGFQcm9jZXNzaW5nU2hpZnRlZFJlZyksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4
NiwgQVJNdjdET3Bjb2RlVkxEUlNUUiksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4NiwgQVJN
djdET3Bjb2RlVk1PVlNpbmdsZVByZWNpc2lvbiksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4
NiwgQVJNdjdET3Bjb2RlVk1PVkRvdWJsZVByZWNpc2lvbiksCi0gICAgT1BDT0RFX0dST1VQX0VO
VFJZKDB4NywgQVJNdjdET3Bjb2RlRlBUcmFuc2ZlciksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZ
KDB4NywgQVJNdjdET3Bjb2RlVk1TUiksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4NywgQVJN
djdET3Bjb2RlVkNNUCksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4NywgQVJNdjdET3Bjb2Rl
VkNWVEJldHdlZW5GUEFuZEludCksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4OCwgQVJNdjdE
T3Bjb2RlRGF0YVByb2Nlc3NpbmdNb2RpZmllZEltbWVkaWF0ZSksCi0gICAgT1BDT0RFX0dST1VQ
X0VOVFJZKDB4OCwgQVJNdjdET3Bjb2RlQ29uZGl0aW9uYWxCcmFuY2hUMyksCi0gICAgT1BDT0RF
X0dST1VQX0VOVFJZKDB4OCwgQVJNdjdET3Bjb2RlQnJhbmNoT3JCcmFuY2hMaW5rKSwKLSAgICBP
UENPREVfR1JPVVBfRU5UUlkoMHg5LCBBUk12N0RPcGNvZGVVbm1vZGlmaWVkSW1tZWRpYXRlKSwK
LSAgICBPUENPREVfR1JPVVBfRU5UUlkoMHg5LCBBUk12N0RPcGNvZGVIaW50MzIpLAotICAgIE9Q
Q09ERV9HUk9VUF9FTlRSWSgweDksIEFSTXY3RE9wY29kZUNvbmRpdGlvbmFsQnJhbmNoVDMpLAot
ICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweDksIEFSTXY3RE9wY29kZUJyYW5jaE9yQnJhbmNoTGlu
ayksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4YSwgQVJNdjdET3Bjb2RlRGF0YVByb2Nlc3Np
bmdNb2RpZmllZEltbWVkaWF0ZSksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4YSwgQVJNdjdE
T3Bjb2RlQ29uZGl0aW9uYWxCcmFuY2hUMyksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4YSwg
QVJNdjdET3Bjb2RlQnJhbmNoT3JCcmFuY2hMaW5rKSwKLSAgICBPUENPREVfR1JPVVBfRU5UUlko
MHhiLCBBUk12N0RPcGNvZGVVbm1vZGlmaWVkSW1tZWRpYXRlKSwKLSAgICBPUENPREVfR1JPVVBf
RU5UUlkoMHhiLCBBUk12N0RPcGNvZGVDb25kaXRpb25hbEJyYW5jaFQzKSwKLSAgICBPUENPREVf
R1JPVVBfRU5UUlkoMHhiLCBBUk12N0RPcGNvZGVCcmFuY2hPckJyYW5jaExpbmspLAotICAgIE9Q
Q09ERV9HUk9VUF9FTlRSWSgweGMsIEFSTXY3RE9wY29kZUxvYWRSZWdpc3RlciksCi0gICAgT1BD
T0RFX0dST1VQX0VOVFJZKDB4YywgQVJNdjdET3Bjb2RlRGF0YVB1c2hQb3BTaW5nbGUpLCAvLyBT
aG91bGQgYmUgYmVmb3JlIFN0b3JlU2luZ2xlKgotICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweGMs
IEFSTXY3RE9wY29kZURhdGFQb3BNdWx0aXBsZSksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4
YywgQVJNdjdET3Bjb2RlRGF0YVB1c2hNdWx0aXBsZSksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZ
KDB4YywgQVJNdjdET3Bjb2RlU3RvcmVTaW5nbGVSZWdpc3RlciksCi0gICAgT1BDT0RFX0dST1VQ
X0VOVFJZKDB4YywgQVJNdjdET3Bjb2RlU3RvcmVTaW5nbGVJbW1lZGlhdGUxMiksCi0gICAgT1BD
T0RFX0dST1VQX0VOVFJZKDB4YywgQVJNdjdET3Bjb2RlU3RvcmVTaW5nbGVJbW1lZGlhdGU4KSwK
LSAgICBPUENPREVfR1JPVVBfRU5UUlkoMHhjLCBBUk12N0RPcGNvZGVMb2FkU2lnbmVkSW1tZWRp
YXRlKSwKLSAgICBPUENPREVfR1JPVVBfRU5UUlkoMHhjLCBBUk12N0RPcGNvZGVMb2FkVW5zaWdu
ZWRJbW1lZGlhdGUpLAotICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweGQsIEFSTXY3RE9wY29kZUxv
bmdNdWx0aXBsZURpdmlkZSksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4ZCwgQVJNdjdET3Bj
b2RlRGF0YVByb2Nlc3NpbmdSZWdTaGlmdCksCi0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4ZCwg
QVJNdjdET3Bjb2RlRGF0YVByb2Nlc3NpbmdSZWdFeHRlbmQpLAotICAgIE9QQ09ERV9HUk9VUF9F
TlRSWSgweGQsIEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnUGFyYWxsZWwpLAotICAgIE9Q
Q09ERV9HUk9VUF9FTlRSWSgweGQsIEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnTWlzYyks
Ci0gICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4ZSwgQVJNdjdET3Bjb2RlVkxEUlNUUiksCi0gICAg
T1BDT0RFX0dST1VQX0VOVFJZKDB4ZiwgQVJNdjdET3Bjb2RlVkNNUCksCi0gICAgT1BDT0RFX0dS
T1VQX0VOVFJZKDB4ZiwgQVJNdjdET3Bjb2RlVkNWVEJldHdlZW5GUEFuZEludCksCi19OwotCi1i
b29sIEFSTXY3RE9wY29kZTo6c19pbml0aWFsaXplZCA9IGZhbHNlOwotCi12b2lkIEFSTXY3RE9w
Y29kZTo6aW5pdCgpCi17Ci0gICAgaWYgKHNfaW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFSTXY3RDE2Qml0T3Bjb2RlOjppbml0KCk7Ci0gICAgQVJNdjdEMzJCaXRPcGNvZGU6
OmluaXQoKTsKLQotICAgIHNfaW5pdGlhbGl6ZWQgPSB0cnVlOwotfQotCi12b2lkIEFSTXY3RE9w
Y29kZTo6c3RhcnRJVEJsb2NrKHVuc2lnbmVkIGJsb2Nrc2l6ZSwgdW5zaWduZWQgZmlyc3RDb25k
aXRpb24pCi17Ci0gICAgQVNTRVJUKGJsb2Nrc2l6ZSA+IDAgJiYgYmxvY2tzaXplIDw9IE1heElU
QmxvY2tTaXplKTsKLSAgICBtX0lUQmxvY2tzaXplID0gYmxvY2tzaXplOwotICAgIG1fSVRDb25k
aXRpb25JbmRleCA9IG1fSVRCbG9ja3NpemUgKyAxOwotICAgIG1fY3VycmVudElUQ29uZGl0aW9u
ID0gMDsKLSAgICBtX2lmVGhlbkNvbmRpdGlvbnNbMF0gPSBmaXJzdENvbmRpdGlvbjsKLX0KLQot
dm9pZCBBUk12N0RPcGNvZGU6OnNhdmVJVENvbmRpdGlvbkF0KHVuc2lnbmVkIGJsb2NrUG9zaXRp
b24sIHVuc2lnbmVkIGNvbmRpdGlvbikKLXsKLSAgICBpZiAoYmxvY2tQb3NpdGlvbiA8IG1fSVRC
bG9ja3NpemUpCi0gICAgICAgIG1faWZUaGVuQ29uZGl0aW9uc1tibG9ja1Bvc2l0aW9uXSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGNvbmRpdGlvbik7Ci19Ci0KLXZvaWQgQVJNdjdET3Bj
b2RlOjpmZXRjaE9wY29kZSh1aW50MTZfdComIG5ld1BDKQotewotICAgIG1fYnVmZmVyT2Zmc2V0
ID0gMDsKLSAgICBtX2Zvcm1hdEJ1ZmZlclswXSA9ICdcMCc7Ci0gICAgbV9jdXJyZW50UEMgPSBu
ZXdQQzsKLQotICAgIG1fb3Bjb2RlID0gKm5ld1BDKys7Ci0KLSAgICBpZiAoaXMzMkJpdEluc3Ry
dWN0aW9uKCkpIHsKLSAgICAgICAgbV9vcGNvZGUgPDw9IDE2OwotICAgICAgICBtX29wY29kZSB8
PSAqbmV3UEMrKzsKLSAgICB9Ci0KLSAgICBpZiAobV9JVENvbmRpdGlvbkluZGV4IDwgbV9JVEJs
b2Nrc2l6ZSkKLSAgICAgICAgbV9jdXJyZW50SVRDb25kaXRpb24gPSBtX2lmVGhlbkNvbmRpdGlv
bnNbbV9JVENvbmRpdGlvbkluZGV4XTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VycmVudElUQ29u
ZGl0aW9uID0gQ29uZE5vbmU7Ci19Ci0KLWNvbnN0IGNoYXIqIEFSTXY3RE9wY29kZTo6ZGlzYXNz
ZW1ibGUodWludDE2X3QqJiBjdXJyZW50UEMpCi17Ci0gICAgY29uc3QgY2hhciogcmVzdWx0Owot
ICAgIGZldGNoT3Bjb2RlKGN1cnJlbnRQQyk7Ci0KLSAgICBpZiAoaXMzMkJpdEluc3RydWN0aW9u
KCkpCi0gICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8QVJNdjdEMzJCaXRPcGNvZGUq
Pih0aGlzKS0+ZG9EaXNhc3NlbWJsZSgpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gcmVp
bnRlcnByZXRfY2FzdDxBUk12N0QxNkJpdE9wY29kZSo+KHRoaXMpLT5kb0Rpc2Fzc2VtYmxlKCk7
Ci0KLSAgICBpZiAoc3RhcnRpbmdJVEJsb2NrKCkpCi0gICAgICAgIG1fSVRDb25kaXRpb25JbmRl
eCA9IDA7Ci0gICAgZWxzZSBpZiAoaW5JVEJsb2NrKCkgJiYgKCsrbV9JVENvbmRpdGlvbkluZGV4
ID49IG1fSVRCbG9ja3NpemUpKQotICAgICAgICBlbmRJVEJsb2NrKCk7Ci0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi12b2lkIEFSTXY3RE9wY29kZTo6YnVmZmVyUHJpbnRmKGNvbnN0IGNoYXIq
IGZvcm1hdCwgLi4uKQotewotICAgIGlmIChtX2J1ZmZlck9mZnNldCA+PSBidWZmZXJTaXplKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICB2YV9saXN0IGFyZ0xpc3Q7Ci0gICAgdmFfc3RhcnQoYXJn
TGlzdCwgZm9ybWF0KTsKLQotICAgIG1fYnVmZmVyT2Zmc2V0ICs9IHZzbnByaW50ZihtX2Zvcm1h
dEJ1ZmZlciArIG1fYnVmZmVyT2Zmc2V0LCBidWZmZXJTaXplIC0gbV9idWZmZXJPZmZzZXQsIGZv
cm1hdCwgYXJnTGlzdCk7Ci0KLSAgICB2YV9lbmQoYXJnTGlzdCk7Ci19Ci0KLXZvaWQgQVJNdjdE
T3Bjb2RlOjphcHBlbmRJbnN0cnVjdGlvbk5hbWUoY29uc3QgY2hhciogaW5zdHJ1Y3Rpb25OYW1l
LCBib29sIGFkZFMpCi17Ci0gICAgaWYgKCFpbklUQmxvY2soKSAgJiYgIWFkZFMpIHsKLSAgICAg
ICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lTm9JVEJsb2NrKGluc3RydWN0aW9uTmFtZSk7Ci0KLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIgc2V2ZW5TcGFjZXNbOF0gPSAi
ICAgICAgICI7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJsZW4oaW5zdHJ1Y3Rpb25OYW1l
KTsKLQotICAgIGJ1ZmZlclByaW50ZigiICAgJXMiLCBpbnN0cnVjdGlvbk5hbWUpOwotICAgIGlm
IChpbklUQmxvY2soKSkgewotICAgICAgICBjb25zdCBjaGFyKiBjb25kaXRpb24gPSBjb25kaXRp
b25OYW1lKG1fY3VycmVudElUQ29uZGl0aW9uKTsKLSAgICAgICAgbGVuZ3RoICs9IHN0cmxlbihj
b25kaXRpb24pOwotICAgICAgICBhcHBlbmRTdHJpbmcoY29uZGl0aW9uKTsKLSAgICB9IGVsc2Ug
aWYgKGFkZFMpIHsKLSAgICAgICAgbGVuZ3RoKys7Ci0gICAgICAgIGFwcGVuZENoYXJhY3Rlcign
cycpOwotICAgIH0KLQotICAgIGlmIChsZW5ndGggPj0gNykKLSAgICAgICAgbGVuZ3RoID0gNjsK
LQotICAgIGFwcGVuZFN0cmluZyhzZXZlblNwYWNlcyArIGxlbmd0aCk7Ci19Ci0KLXZvaWQgQVJN
djdET3Bjb2RlOjphcHBlbmRSZWdpc3Rlck5hbWUodW5zaWduZWQgcmVnaXN0ZXJOdW1iZXIpCi17
Ci0gICAgcmVnaXN0ZXJOdW1iZXIgJj0gMHhmOwotCi0gICAgaWYgKHJlZ2lzdGVyTnVtYmVyID4g
MTIpIHsKLSAgICAgICAgYXBwZW5kU3RyaW5nKHNfc3BlY2lhbFJlZ2lzdGVyTmFtZXNbcmVnaXN0
ZXJOdW1iZXIgLSAxM10pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYnVmZmVyUHJp
bnRmKCJyJXUiLCByZWdpc3Rlck51bWJlcik7Ci19Ci0KLXZvaWQgQVJNdjdET3Bjb2RlOjphcHBl
bmRSZWdpc3Rlckxpc3QodW5zaWduZWQgcmVnaXN0ZXJzKQotewotICAgIHVuc2lnbmVkIG51bWJl
clByaW50ZWQgPSAwOwotCi0gICAgYXBwZW5kQ2hhcmFjdGVyKCd7Jyk7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgMTY7IGkrKykgewotICAgICAgICBpZiAocmVnaXN0ZXJzICYgKDEg
PDwgaSkpIHsKLSAgICAgICAgICAgIGlmIChudW1iZXJQcmludGVkKyspCi0gICAgICAgICAgICAg
ICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAgICAgICBhcHBlbmRSZWdpc3Rlck5hbWUoaSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhcHBlbmRDaGFyYWN0ZXIoJ30nKTsKLX0KLQotdm9p
ZCBBUk12N0RPcGNvZGU6OmFwcGVuZEZQUmVnaXN0ZXJOYW1lKGNoYXIgcmVnaXN0ZXJQcmVmaXgs
IHVuc2lnbmVkIHJlZ2lzdGVyTnVtYmVyKQotewotICAgIGJ1ZmZlclByaW50ZigiJWMldSIsIHJl
Z2lzdGVyUHJlZml4LCByZWdpc3Rlck51bWJlcik7Ci19Ci0KLS8vIDE2IEJpdCBJbnN0cnVjdGlv
bnMKLQotdm9pZCBBUk12N0QxNkJpdE9wY29kZTo6aW5pdCgpCi17Ci0gICAgT3Bjb2RlR3JvdXAq
IGxhc3RHcm91cHNbT3Bjb2RlR3JvdXA6Om9wY29kZVRhYmxlU2l6ZV07Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgT3Bjb2RlR3JvdXA6Om9wY29kZVRhYmxlU2l6ZTsgaSsrKSB7Ci0g
ICAgICAgIG9wY29kZVRhYmxlW2ldID0gMDsKLSAgICAgICAgbGFzdEdyb3Vwc1tpXSA9IDA7Ci0g
ICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihvcGNvZGUxNkJpdEdy
b3VwTGlzdCkgLyBzaXplb2YoT3Bjb2RlMTZHcm91cEluaXRpYWxpemVyKTsgaSsrKSB7Ci0gICAg
ICAgIE9wY29kZUdyb3VwKiBuZXdPcGNvZGVHcm91cCA9IG5ldyBPcGNvZGVHcm91cChvcGNvZGUx
NkJpdEdyb3VwTGlzdFtpXS5tX21hc2ssIG9wY29kZTE2Qml0R3JvdXBMaXN0W2ldLm1fcGF0dGVy
biwgb3Bjb2RlMTZCaXRHcm91cExpc3RbaV0ubV9mb3JtYXQpOwotICAgICAgICB1aW50MTZfdCBv
cGNvZGVHcm91cE51bWJlciA9IG9wY29kZTE2Qml0R3JvdXBMaXN0W2ldLm1fb3Bjb2RlR3JvdXBO
dW1iZXI7Ci0KLSAgICAgICAgaWYgKCFvcGNvZGVUYWJsZVtvcGNvZGVHcm91cE51bWJlcl0pCi0g
ICAgICAgICAgICBvcGNvZGVUYWJsZVtvcGNvZGVHcm91cE51bWJlcl0gPSBuZXdPcGNvZGVHcm91
cDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbGFzdEdyb3Vwc1tvcGNvZGVHcm91cE51bWJl
cl0tPnNldE5leHQobmV3T3Bjb2RlR3JvdXApOwotICAgICAgICBsYXN0R3JvdXBzW29wY29kZUdy
b3VwTnVtYmVyXSA9IG5ld09wY29kZUdyb3VwOwotICAgIH0KLX0KLQotY29uc3QgY2hhciogQVJN
djdEMTZCaXRPcGNvZGU6OmRvRGlzYXNzZW1ibGUoKQotewotICAgIE9wY29kZUdyb3VwKiBvcEdy
b3VwID0gb3Bjb2RlVGFibGVbb3Bjb2RlR3JvdXBOdW1iZXIobV9vcGNvZGUpXTsKLQotICAgIHdo
aWxlIChvcEdyb3VwKSB7Ci0gICAgICAgIGlmIChvcEdyb3VwLT5tYXRjaGVzKHN0YXRpY19jYXN0
PHVpbnQxNl90PihtX29wY29kZSkpKQotICAgICAgICAgICAgcmV0dXJuIG9wR3JvdXAtPmZvcm1h
dCh0aGlzKTsKLSAgICAgICAgb3BHcm91cCA9IG9wR3JvdXAtPm5leHQoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZGVmYXVsdEZvcm1hdCgpOwotfQotCi1jb25zdCBjaGFyKiBBUk12N0QxNkJpdE9w
Y29kZTo6ZGVmYXVsdEZvcm1hdCgpCi17Ci0gICAgYnVmZmVyUHJpbnRmKCIgICAud29yZCAgJTA0
eCIsIG1fb3Bjb2RlKTsKLSAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Ci19Ci0KLWNvbnN0IGNo
YXIqIEFSTXY3RE9wY29kZUFkZFJlZ2lzdGVyVDI6OmZvcm1hdCgpCi17Ci0gICAgYXBwZW5kSW5z
dHJ1Y3Rpb25OYW1lKCJhZGQiKTsKLSAgICBhcHBlbmRSZWdpc3Rlck5hbWUocmRuKCkpOwotICAg
IGFwcGVuZFNlcGFyYXRvcigpOwotICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybSgpKTsKLQotICAg
IHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKLX0KLQotY29uc3QgY2hhciogQVJNdjdET3Bjb2RlQWRk
U1BQbHVzSW1tZWRpYXRlOjpmb3JtYXQoKQotewotICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZSgi
YWRkIik7Ci0gICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJkKCkpOwotICAgIGFwcGVuZFNlcGFyYXRv
cigpOwotICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShSZWdTUCk7Ci0gICAgYXBwZW5kU2VwYXJhdG9y
KCk7Ci0gICAgYXBwZW5kVW5zaWduZWRJbW1lZGlhdGUoaW1tZWRpYXRlOCgpKTsKLQotICAgIHJl
dHVybiBtX2Zvcm1hdEJ1ZmZlcjsKLX0KLQotY29uc3QgY2hhciogY29uc3QgQVJNdjdET3Bjb2Rl
QWRkU3VidHJhY3Q6OnNfb3BOYW1lc1syXSA9IHsgImFkZCIsICJzdWIiIH07Ci0KLWNvbnN0IGNo
YXIqIEFSTXY3RE9wY29kZUFkZFN1YnRyYWN0VDE6OmZvcm1hdCgpCi17Ci0gICAgYXBwZW5kSW5z
dHJ1Y3Rpb25OYW1lKG9wTmFtZSgpLCAhaW5JVEJsb2NrKCkpOwotICAgIGFwcGVuZFJlZ2lzdGVy
TmFtZShyZCgpKTsKLSAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICBhcHBlbmRSZWdpc3Rlck5h
bWUocm4oKSk7Ci0gICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgYXBwZW5kUmVnaXN0ZXJOYW1l
KHJtKCkpOwotCi0gICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwotfQotCi1jb25zdCBjaGFyKiBB
Uk12N0RPcGNvZGVBZGRTdWJ0cmFjdEltbWVkaWF0ZTM6OmZvcm1hdCgpCi17Ci0gICAgYXBwZW5k
SW5zdHJ1Y3Rpb25OYW1lKG9wTmFtZSgpLCAhaW5JVEJsb2NrKCkpOwotICAgIGFwcGVuZFJlZ2lz
dGVyTmFtZShyZCgpKTsKLSAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICBhcHBlbmRSZWdpc3Rl
ck5hbWUocm4oKSk7Ci0gICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgYXBwZW5kVW5zaWduZWRJ
bW1lZGlhdGUoaW1tZWRpYXRlMygpKTsKLQotICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKLX0K
LQotY29uc3QgY2hhciogQVJNdjdET3Bjb2RlQWRkU3VidHJhY3RJbW1lZGlhdGU4Ojpmb3JtYXQo
KQotewotICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZShvcE5hbWUoKSwgIWluSVRCbG9jaygpKTsK
LSAgICBhcHBlbmRSZWdpc3Rlck5hbWUocmRuKCkpOwotICAgIGFwcGVuZFNlcGFyYXRvcigpOwot
ICAgIGFwcGVuZFVuc2lnbmVkSW1tZWRpYXRlKGltbWVkaWF0ZTgoKSk7Ci0KLSAgICByZXR1cm4g
bV9mb3JtYXRCdWZmZXI7Ci19Ci0KLWNvbnN0IGNoYXIqIEFSTXY3RE9wY29kZUJyYW5jaENvbmRp
dGlvbmFsVDE6OmZvcm1hdCgpCi17Ci0gICAgaWYgKGNvbmRpdGlvbigpID09IDB4ZSkKLSAgICAg
ICAgcmV0dXJuIGRlZmF1bHRGb3JtYXQoKTsKLQotICAgIGlmIChjb25kaXRpb24oKSA9PSAweGYp
IHsKLSAgICAgICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKCJzdmMiKTsKLSAgICAgICAgYXBwZW5k
VW5zaWduZWRJbW1lZGlhdGUob2Zmc2V0KCkpOwotCi0gICAgICAgIHJldHVybiBtX2Zvcm1hdEJ1
ZmZlcjsKLSAgICB9Ci0KLSAgICBidWZmZXJQcmludGYoIiAgIGIlLTYuNnMiLCBjb25kaXRpb25O
YW1lKGNvbmRpdGlvbigpKSk7Ci0gICAgYXBwZW5kUENSZWxhdGl2ZU9mZnNldChzdGF0aWNfY2Fz
dDxpbnQzMl90PihvZmZzZXQoKSkgKyAyKTsKLQotICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsK
LX0KLQotY29uc3QgY2hhciogQVJNdjdET3Bjb2RlQnJhbmNoRXhjaGFuZ2VUMTo6Zm9ybWF0KCkK
LXsKLSAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUob3BOYW1lKCkpOwotICAgIGFwcGVuZFJlZ2lz
dGVyTmFtZShybSgpKTsKLQotICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKLX0KLQotY29uc3Qg
Y2hhciogQVJNdjdET3Bjb2RlQnJhbmNoVDI6OmZvcm1hdCgpCi17Ci0gICAgYXBwZW5kSW5zdHJ1
Y3Rpb25OYW1lKCJiIik7Ci0gICAgYXBwZW5kUENSZWxhdGl2ZU9mZnNldChzdGF0aWNfY2FzdDxp
bnQzMl90PihpbW1lZGlhdGUxMSgpKSArIDIpOwotCi0gICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVy
OwotfQotCi1jb25zdCBjaGFyKiBBUk12N0RPcGNvZGVDb21wYXJlSW1tZWRpYXRlVDE6OmZvcm1h
dCgpCi17Ci0gICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKCJjbXAiKTsKLSAgICBhcHBlbmRSZWdp
c3Rlck5hbWUocm4oKSk7Ci0gICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgYXBwZW5kVW5zaWdu
ZWRJbW1lZGlhdGUoaW1tZWRpYXRlOCgpKTsKLQotICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsK
LX0KLQotY29uc3QgY2hhciogQVJNdjdET3Bjb2RlQ29tcGFyZVJlZ2lzdGVyVDE6OmZvcm1hdCgp
Ci17Ci0gICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKCJjbXAiKTsKLSAgICBhcHBlbmRSZWdpc3Rl
ck5hbWUocm4oKSk7Ci0gICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgYXBwZW5kUmVnaXN0ZXJO
YW1lKHJtKCkpOwotCi0gICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwotfQotCi1jb25zdCBjaGFy
KiBBUk12N0RPcGNvZGVDb21wYXJlUmVnaXN0ZXJUMjo6Zm9ybWF0KCkKLXsKLSAgICBhcHBlbmRJ
bnN0cnVjdGlvbk5hbWUoImNvbXBhcmUiKTsKLSAgICBhcHBlbmRSZWdpc3Rlck5hbWUocm4oKSk7
Ci0gICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJtKCkpOwot
Ci0gICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwotfQotCi1jb25zdCBjaGFyKiBjb25zdCBBUk12
N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ2lzdGVyVDE6OnNfb3BOYW1lc1sxNl0gPSB7Ci0gICAg
ImFuZCIsICJlb3IiLCAibHNsIiwgImxzciIsICJhc3IiLCAiYWRjIiwgInNiYyIsICJyb3IiLCAi
dHN0IiwgInJzYiIsICJjbXAiLCAiY21uIiwgIm9yciIsICJtdWwiLCAiYmljIiwgIm12biIKLX07
Ci0KLWNvbnN0IGNoYXIqIEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnaXN0ZXJUMTo6Zm9y
bWF0KCkKLXsKLSAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUob3BOYW1lKCksIGluSVRCbG9jaygp
ICYmICghKG9wKCkgPT0gMHg4KSB8fCAob3AoKSA9PSAweGEpIHx8IChvcCgpID09IDB4YikpKTsK
LSAgICBhcHBlbmRSZWdpc3Rlck5hbWUocmRuKCkpOwotICAgIGFwcGVuZFNlcGFyYXRvcigpOwot
ICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybSgpKTsKLSAgICBpZiAob3AoKSA9PSAweDkpIC8vIHJz
YiBUMQotICAgICAgICBhcHBlbmRTdHJpbmcoIiwgIzAiKTsKLSAgICBlbHNlIGlmIChvcCgpID09
IDB4ZCkgeyAvLyBtdWwgVDEKLSAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAgIGFw
cGVuZFJlZ2lzdGVyTmFtZShyZG4oKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fZm9ybWF0QnVm
ZmVyOwotfQotCi1jb25zdCBjaGFyKiBBUk12N0RPcGNvZGVHZW5lcmF0ZVBDUmVsYXRpdmVBZGRy
ZXNzOjpmb3JtYXQoKQotewotICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZSgiYWRyIik7Ci0gICAg
YXBwZW5kUmVnaXN0ZXJOYW1lKHJkKCkpOwotICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAgIGFw
cGVuZFBDUmVsYXRpdmVPZmZzZXQoc3RhdGljX2Nhc3Q8aW50MzJfdD4oaW1tZWRpYXRlOCgpKSk7
Ci0KLSAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Ci19Ci0KLWNvbnN0IGNoYXIqIEFSTXY3RE9w
Y29kZUxvYWRGcm9tTGl0ZXJhbFBvb2w6OmZvcm1hdCgpCi17Ci0gICAgYXBwZW5kSW5zdHJ1Y3Rp
b25OYW1lKCJsZHIiKTsKLSAgICBhcHBlbmRSZWdpc3Rlck5hbWUocnQoKSk7Ci0gICAgYXBwZW5k
U2VwYXJhdG9yKCk7Ci0gICAgYXBwZW5kUENSZWxhdGl2ZU9mZnNldChzdGF0aWNfY2FzdDxpbnQz
Ml90PihpbW1lZGlhdGU4KCkpKTsKLQotICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKLX0KLQot
Y29uc3QgY2hhciogY29uc3QgQVJNdjdET3Bjb2RlTG9hZFN0b3JlUmVnaXN0ZXJJbW1lZGlhdGU6
OnNfb3BOYW1lc1s2XSA9IHsKLSAgICAic3RyIiwgImxkciIsICJzdHJiIiwgICJsZHJiIiwgInN0
cmgiLCAibGRyaCIKLX07Ci0KLWNvbnN0IGNoYXIqIEFSTXY3RE9wY29kZUxvYWRTdG9yZVJlZ2lz
dGVySW1tZWRpYXRlOjpmb3JtYXQoKQotewotICAgIGNvbnN0IGNoYXIqIGluc3RydWN0aW9uTmFt
ZSA9IG9wTmFtZSgpOwotCi0gICAgaWYgKCFpbnN0cnVjdGlvbk5hbWUpCi0gICAgICAgIHJldHVy
biBkZWZhdWx0Rm9ybWF0KCk7Ci0KLSAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUob3BOYW1lKCkp
OwotICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShydCgpKTsKLSAgICBhcHBlbmRTZXBhcmF0b3IoKTsK
LSAgICBhcHBlbmRDaGFyYWN0ZXIoJ1snKTsKLSAgICBhcHBlbmRSZWdpc3Rlck5hbWUocm4oKSk7
Ci0gICAgaWYgKGltbWVkaWF0ZTUoKSkgewotICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAg
ICAgICAgYXBwZW5kVW5zaWduZWRJbW1lZGlhdGUoaW1tZWRpYXRlNSgpIDw8IHNjYWxlKCkpOwot
ICAgIH0KLSAgICBhcHBlbmRDaGFyYWN0ZXIoJ10nKTsKLQotICAgIHJldHVybiBtX2Zvcm1hdEJ1
ZmZlcjsKLX0KLQotdW5zaWduZWQgQVJNdjdET3Bjb2RlTG9hZFN0b3JlUmVnaXN0ZXJJbW1lZGlh
dGU6OnNjYWxlKCkKLXsKLSAgICBzd2l0Y2ggKG9wKCkpIHsKLSAgICBjYXNlIDA6Ci0gICAgY2Fz
ZSAxOgotICAgICAgICByZXR1cm4gMjsKLSAgICBjYXNlIDI6Ci0gICAgY2FzZSAzOgotICAgICAg
ICByZXR1cm4gMDsKLSAgICBjYXNlIDQ6Ci0gICAgY2FzZSA1OgotICAgICAgICByZXR1cm4gMTsK
LSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWNvbnN0IGNoYXIqIGNvbnN0IEFSTXY3RE9wY29k
ZUxvYWRTdG9yZVJlZ2lzdGVyT2Zmc2V0VDE6OnNfb3BOYW1lc1s4XSA9IHsKLSAgICAic3RyIiwg
InN0cmgiLCAic3RyYiIsICJsZHJzYiIsICJsZHIiLCAibGRyaCIsICJsZHJiIiwgImxkcnNoIgot
fTsKLQotY29uc3QgY2hhciogQVJNdjdET3Bjb2RlTG9hZFN0b3JlUmVnaXN0ZXJPZmZzZXRUMTo6
Zm9ybWF0KCkKLXsKLSAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUob3BOYW1lKCkpOwotICAgIGFw
cGVuZFJlZ2lzdGVyTmFtZShydCgpKTsKLSAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICBhcHBl
bmRDaGFyYWN0ZXIoJ1snKTsKLSAgICBhcHBlbmRSZWdpc3Rlck5hbWUocm4oKSk7Ci0gICAgYXBw
ZW5kU2VwYXJhdG9yKCk7Ci0gICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJtKCkpOwotICAgIGFwcGVu
ZENoYXJhY3RlcignXScpOwotCi0gICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwotfQotCi1jb25z
dCBjaGFyKiBBUk12N0RPcGNvZGVMb2FkU3RvcmVSZWdpc3RlclNQUmVsYXRpdmU6OmZvcm1hdCgp
Ci17Ci0gICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKG9wTmFtZSgpKTsKLSAgICBhcHBlbmRSZWdp
c3Rlck5hbWUocnQoKSk7Ci0gICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgYXBwZW5kQ2hhcmFj
dGVyKCdbJyk7Ci0gICAgYXBwZW5kUmVnaXN0ZXJOYW1lKFJlZ1NQKTsKLSAgICBpZiAoaW1tZWRp
YXRlOCgpKSB7Ci0gICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAgICAgICBhcHBlbmRVbnNp
Z25lZEltbWVkaWF0ZShpbW1lZGlhdGU4KCkgPDwgMik7Ci0gICAgfQotICAgIGFwcGVuZENoYXJh
Y3RlcignXScpOwotCi0gICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwotfQotCi1jb25zdCBjaGFy
KiBBUk12N0RPcGNvZGVMb2dpY2FsSW1tZWRpYXRlVDE6OmZvcm1hdCgpCi17Ci0gICAgaWYgKCFv
cCgpICYmICFpbW1lZGlhdGU1KCkpIHsKLSAgICAgICAgLy8gbW92IFQyCi0gICAgICAgIGFwcGVu
ZEluc3RydWN0aW9uTmFtZSgibW92cyIpOwotICAgICAgICBhcHBlbmRSZWdpc3Rlck5hbWUocmQo
KSk7Ci0gICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAgICAgICBhcHBlbmRSZWdpc3Rlck5h
bWUocm0oKSk7Ci0KLSAgICAgICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwotICAgIH0KLQotICAg
IGFwcGVuZEluc3RydWN0aW9uTmFtZShvcE5hbWUoKSwgIWluSVRCbG9jaygpKTsKLSAgICBhcHBl
bmRSZWdpc3Rlck5hbWUocmQoKSk7Ci0gICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgYXBwZW5k
UmVnaXN0ZXJOYW1lKHJtKCkpOwotICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAgIGFwcGVuZFVu
c2lnbmVkSW1tZWRpYXRlKChvcCgpICYmICFpbW1lZGlhdGU1KCkpID8gMzIgOiBpbW1lZGlhdGU1
KCkpOwotCi0gICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwotfQotCi1jb25zdCBjaGFyKiBBUk12
N0RPcGNvZGVNaXNjQWRkU3ViU1A6OmZvcm1hdCgpCi17Ci0gICAgYXBwZW5kSW5zdHJ1Y3Rpb25O
YW1lKG9wTmFtZSgpKTsKLSAgICBhcHBlbmRSZWdpc3Rlck5hbWUoUmVnU1ApOwotICAgIGFwcGVu
ZFNlcGFyYXRvcigpOwotICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShSZWdTUCk7Ci0gICAgYXBwZW5k
U2VwYXJhdG9yKCk7Ci0gICAgYXBwZW5kVW5zaWduZWRJbW1lZGlhdGUoaW1tZWRpYXRlNygpKTsK
LQotICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKLX0KLQotY29uc3QgY2hhciogQVJNdjdET3Bj
b2RlTWlzY0JyZWFrcG9pbnRUMTo6Zm9ybWF0KCkKLXsKLSAgICBhcHBlbmRJbnN0cnVjdGlvbk5h
bWVOb0lUQmxvY2soImJrcHQiKTsKLSAgICBhcHBlbmRVbnNpZ25lZEltbWVkaWF0ZShpbW1lZGlh
dGU4KCkpOwotCi0gICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwotfQotCi1jb25zdCBjaGFyKiBj
b25zdCBBUk12N0RPcGNvZGVNaXNjQnl0ZUhhbGZ3b3JkT3BzOjpzX29wTmFtZXNbOF0gPSB7Ci0g
ICAgInN4dGgiLCAic3hiIiwgInV4dGgiLCAidXh0YiIsICJyZXYiLCAicmV2MTYiLCAicmV2c2gi
Ci19OwotCi1jb25zdCBjaGFyKiBBUk12N0RPcGNvZGVNaXNjQnl0ZUhhbGZ3b3JkT3BzOjpmb3Jt
YXQoKQotewotICAgIGNvbnN0IGNoYXIqIGluc3RydWN0aW9uTmFtZSA9IG9wTmFtZSgpOwotCi0g
ICAgaWYgKCFpbnN0cnVjdGlvbk5hbWUpCi0gICAgICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0KCk7
Ci0KLSAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUoaW5zdHJ1Y3Rpb25OYW1lKTsKLSAgICBhcHBl
bmRSZWdpc3Rlck5hbWUocmQoKSk7Ci0gICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgYXBwZW5k
UmVnaXN0ZXJOYW1lKHJtKCkpOwotCi0gICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwotfQotCi1j
b25zdCBjaGFyKiBBUk12N0RPcGNvZGVNaXNjQ29tcGFyZUFuZEJyYW5jaDo6Zm9ybWF0KCkKLXsK
LSAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUob3BOYW1lKCkpOwotICAgIGFwcGVuZFBDUmVsYXRp
dmVPZmZzZXQoaW1tZWRpYXRlNigpICsgMik7Ci0KLSAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7
Ci19Ci0KLWNvbnN0IGNoYXIqIGNvbnN0IEFSTXY3RE9wY29kZU1pc2NIaW50MTY6OnNfb3BOYW1l
c1sxNl0gPSB7Ci0gICAgIm5vcCIsICJ5aWVsZCIsICJ3ZmUiLCAid2ZpIiwgInNldiIKLX07Ci0K
LWNvbnN0IGNoYXIqIEFSTXY3RE9wY29kZU1pc2NIaW50MTY6OmZvcm1hdCgpCi17Ci0gICAgaWYg
KG9wQSgpID4gNCkKLSAgICAgICAgcmV0dXJuIGRlZmF1bHRGb3JtYXQoKTsKLQotICAgIGFwcGVu
ZEluc3RydWN0aW9uTmFtZShvcE5hbWUoKSk7Ci0KLSAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7
Ci19Ci0KLWNvbnN0IGNoYXIqIEFSTXY3RE9wY29kZU1pc2NJZlRoZW5UMTo6Zm9ybWF0KCkKLXsK
LSAgICBjaGFyIG9wTmFtZVs2XTsKLSAgICBvcE5hbWVbMF0gPSAnaSc7Ci0gICAgb3BOYW1lWzFd
ID0gJ3QnOwotCi0gICAgdW5zaWduZWQgY29uZGl0aW9uID0gZmlyc3RDb25kaXRpb24oKTsKLSAg
ICB1bnNpZ25lZCBtYXNrQml0cyA9IG1hc2soKTsKLSAgICB1bnNpZ25lZCBibG9ja0xlbmd0aCA9
IDA7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICAgIGlm
IChtYXNrQml0cyAmICgxIDw8IGkpKSB7Ci0gICAgICAgICAgICBibG9ja0xlbmd0aCA9IDQgLSBp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGFydElUQmxv
Y2soYmxvY2tMZW5ndGgsIGNvbmRpdGlvbik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgYmxvY2tMZW5ndGg7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBjdXJyTWFza0JpdCA9ICht
YXNrQml0cyA+PiAoNC1pKSkgJiAweDE7Ci0gICAgICAgIG9wTmFtZVtpICsgMV0gPSAoY3Vyck1h
c2tCaXQgXiAoY29uZGl0aW9uICYgMSkpID8gJ2UnIDogJ3QnOwotICAgICAgICBzYXZlSVRDb25k
aXRpb25BdChpLCAoY29uZGl0aW9uICYgfjEpIHwgY3Vyck1hc2tCaXQpOwotICAgIH0KLSAgICBv
cE5hbWVbYmxvY2tMZW5ndGggKyAxXSA9ICdcMCc7Ci0KLSAgICBhcHBlbmRJbnN0cnVjdGlvbk5h
bWVOb0lUQmxvY2sob3BOYW1lKTsKLSAgICBhcHBlbmRTdHJpbmcoY29uZGl0aW9uTmFtZShjb25k
aXRpb24pKTsKLQotICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKLX0KLQotY29uc3QgY2hhciog
QVJNdjdET3Bjb2RlTWlzY1B1c2hQb3A6OmZvcm1hdCgpCi17Ci0gICAgYXBwZW5kSW5zdHJ1Y3Rp
b25OYW1lKG9wTmFtZSgpKTsKLSAgICBhcHBlbmRSZWdpc3Rlckxpc3QocmVnaXN0ZXJNYXNrKCkp
OwotCi0gICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwotfQotCi1jb25zdCBjaGFyKiBBUk12N0RP
cGNvZGVNb3ZlSW1tZWRpYXRlVDE6OmZvcm1hdCgpCi17Ci0gICAgYXBwZW5kSW5zdHJ1Y3Rpb25O
YW1lKCJtb3YiLCAhaW5JVEJsb2NrKCkpOwotICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShyZCgpKTsK
LSAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICBhcHBlbmRVbnNpZ25lZEltbWVkaWF0ZShpbW1l
ZGlhdGU4KCkpOwotCi0gICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwotfQotCi1jb25zdCBjaGFy
KiBBUk12N0RPcGNvZGVNb3ZlUmVnaXN0ZXJUMTo6Zm9ybWF0KCkKLXsKLSAgICBhcHBlbmRJbnN0
cnVjdGlvbk5hbWUoIm1vdiIpOwotICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShyZCgpKTsKLSAgICBh
cHBlbmRTZXBhcmF0b3IoKTsKLSAgICBhcHBlbmRSZWdpc3Rlck5hbWUocm0oKSk7Ci0KLSAgICBy
ZXR1cm4gbV9mb3JtYXRCdWZmZXI7Ci19Ci0KLS8vIDMyIGJpdCBJbnRydWN0aW9ucwotCi12b2lk
IEFSTXY3RDMyQml0T3Bjb2RlOjppbml0KCkKLXsKLSAgICBPcGNvZGVHcm91cCogbGFzdEdyb3Vw
c1tPcGNvZGVHcm91cDo6b3Bjb2RlVGFibGVTaXplXTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBPcGNvZGVHcm91cDo6b3Bjb2RlVGFibGVTaXplOyBpKyspIHsKLSAgICAgICAgb3Bj
b2RlVGFibGVbaV0gPSAwOwotICAgICAgICBsYXN0R3JvdXBzW2ldID0gMDsKLSAgICB9Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mKG9wY29kZTMyQml0R3JvdXBMaXN0KSAv
IHNpemVvZihPcGNvZGUzMkdyb3VwSW5pdGlhbGl6ZXIpOyBpKyspIHsKLSAgICAgICAgT3Bjb2Rl
R3JvdXAqIG5ld09wY29kZUdyb3VwID0gbmV3IE9wY29kZUdyb3VwKG9wY29kZTMyQml0R3JvdXBM
aXN0W2ldLm1fbWFzaywgb3Bjb2RlMzJCaXRHcm91cExpc3RbaV0ubV9wYXR0ZXJuLCBvcGNvZGUz
MkJpdEdyb3VwTGlzdFtpXS5tX2Zvcm1hdCk7Ci0gICAgICAgIHVpbnQxNl90IG9wY29kZUdyb3Vw
TnVtYmVyID0gb3Bjb2RlMzJCaXRHcm91cExpc3RbaV0ubV9vcGNvZGVHcm91cE51bWJlcjsKLQot
ICAgICAgICBpZiAoIW9wY29kZVRhYmxlW29wY29kZUdyb3VwTnVtYmVyXSkKLSAgICAgICAgICAg
IG9wY29kZVRhYmxlW29wY29kZUdyb3VwTnVtYmVyXSA9IG5ld09wY29kZUdyb3VwOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBsYXN0R3JvdXBzW29wY29kZUdyb3VwTnVtYmVyXS0+c2V0TmV4
dChuZXdPcGNvZGVHcm91cCk7Ci0gICAgICAgIGxhc3RHcm91cHNbb3Bjb2RlR3JvdXBOdW1iZXJd
ID0gbmV3T3Bjb2RlR3JvdXA7Ci0gICAgfQotfQotCi1jb25zdCBjaGFyKiBBUk12N0QzMkJpdE9w
Y29kZTo6ZG9EaXNhc3NlbWJsZSgpCi17Ci0gICAgT3Bjb2RlR3JvdXAqIG9wR3JvdXAgPSBvcGNv
ZGVUYWJsZVtvcGNvZGVHcm91cE51bWJlcihtX29wY29kZSldOwotCi0gICAgd2hpbGUgKG9wR3Jv
dXApIHsKLSAgICAgICAgaWYgKG9wR3JvdXAtPm1hdGNoZXMobV9vcGNvZGUpKQotICAgICAgICAg
ICAgcmV0dXJuIG9wR3JvdXAtPmZvcm1hdCh0aGlzKTsKLSAgICAgICAgb3BHcm91cCA9IG9wR3Jv
dXAtPm5leHQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmYXVsdEZvcm1hdCgpOwotfQotCi1j
b25zdCBjaGFyKiBBUk12N0QzMkJpdE9wY29kZTo6ZGVmYXVsdEZvcm1hdCgpCi17Ci0gICAgYnVm
ZmVyUHJpbnRmKCIgICAubG9uZyAgJTA4eCIsIG1fb3Bjb2RlKTsKLSAgICByZXR1cm4gbV9mb3Jt
YXRCdWZmZXI7Ci19Ci0KLWNvbnN0IGNoYXIqIEFSTXY3RE9wY29kZUNvbmRpdGlvbmFsQnJhbmNo
VDM6OmZvcm1hdCgpCi17Ci0gICAgaWYgKGNvbmRpdGlvbigpIDwgMHhlKQotICAgICAgICBidWZm
ZXJQcmludGYoIiAgIGIlLTYuNnMiLCBjb25kaXRpb25OYW1lKGNvbmRpdGlvbigpKSk7Ci0gICAg
ZWxzZQotICAgICAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUoImIiKTsKLSAgICBhcHBlbmRQQ1Jl
bGF0aXZlT2Zmc2V0KG9mZnNldCgpICsgMik7Ci0KLSAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7
Ci19Ci0KLWNvbnN0IGNoYXIqIEFSTXY3RE9wY29kZUJyYW5jaE9yQnJhbmNoTGluazo6Zm9ybWF0
KCkKLXsKLSAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUoaXNCTCgpID8gImJsIiA6ICJiIik7Ci0g
ICAgYXBwZW5kUENSZWxhdGl2ZU9mZnNldChvZmZzZXQoKSArIDIpOwotCi0gICAgcmV0dXJuIG1f
Zm9ybWF0QnVmZmVyOwotfQotCi1jb25zdCBjaGFyKiBjb25zdCBBUk12N0RPcGNvZGVEYXRhUHJv
Y2Vzc2luZ0xvZ2ljYWxBbmRSaXRobWV0aWM6OnNfb3BOYW1lc1sxNl0gPSB7Ci0gICAgImFuZCIs
ICJiaWMiLCAib3JyIiwgIm9ybiIsICJlb3IiLCAwLCAicGtoIiwgMCwgImFkZCIsIDAsICJhZGMi
LCAic2JjIiwgMCwgInN1YiIsICJyc2IiLCAwCi19OwotCi12b2lkIEFSTXY3RE9wY29kZURhdGFQ
cm9jZXNzaW5nTW9kaWZpZWRJbW1lZGlhdGU6OmFwcGVuZE1vZGlmaWVkSW1tZWRpYXRlKHVuc2ln
bmVkIGltbWVkaWF0ZTEyKQotewotICAgIGlmICghKGltbWVkaWF0ZTEyICYgMHhjMDApKSB7Ci0g
ICAgICAgIHVuc2lnbmVkIGltbWVkaWF0ZSA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGxvd2VyOEJp
dHMgPSBpbW1lZGlhdGUxMiAmIDB4ZmY7Ci0KLSAgICAgICAgc3dpdGNoICgoaW1tZWRpYXRlMTIg
Pj4gOCkgJiAzKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIGltbWVkaWF0ZSA9IGxv
d2VyOEJpdHM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAg
ICAgaW1tZWRpYXRlID0gKGxvd2VyOEJpdHMgPDwgMTYpIHwgbG93ZXI4Qml0czsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBpbW1lZGlhdGUgPSAobG93
ZXI4Qml0cyA8PCAyNCkgfCAobG93ZXI4Qml0cyA8PCA4KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBpbW1lZGlhdGUgPSAobG93ZXI4Qml0cyA8PCAy
NCkgfCAobG93ZXI4Qml0cyA8PCAxNikgfCAobG93ZXI4Qml0cyA8PCA4KSB8IGxvd2VyOEJpdHM7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBhcHBlbmRVbnNpZ25lZElt
bWVkaWF0ZShpbW1lZGlhdGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdW5zaWdu
ZWQgaW1tZWRpYXRlOCA9IDB4ODAgfCAoaW1tZWRpYXRlMTIgJiAweDdmKTsKLSAgICB1bnNpZ25l
ZCBzaGlmdEFtb3VudCA9IDMyIC0gKChpbW1lZGlhdGUxMiA+PiA3KSAmIDB4MWYpOwotCi0gICAg
YXBwZW5kVW5zaWduZWRJbW1lZGlhdGUoaW1tZWRpYXRlOCA8PCBzaGlmdEFtb3VudCk7Ci19Ci0K
LWNvbnN0IGNoYXIqIEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nTW9kaWZpZWRJbW1lZGlhdGU6
OmZvcm1hdCgpCi17Ci0gICAgaWYgKChvcCgpID09IDB4NSkgfHwgKG9wKCkgPT0gMHg2KSB8fCAo
b3AoKSA9PSAweDcpIHx8IChvcCgpID09IDB4OSkgfHwgKG9wKCkgPT0gMHhjKSB8fCAob3AoKSA9
PSAweGYpKQotICAgICAgICByZXR1cm4gZGVmYXVsdEZvcm1hdCgpOwotCi0gICAgY29uc3QgY2hh
ciogaW5zdHJ1Y3Rpb25OYW1lID0gb3BOYW1lKCk7Ci0KLSAgICBpZiAocm4oKSA9PSAxNSkgewot
ICAgICAgICBpZiAob3AoKSA9PSAyKSB7Ci0gICAgICAgICAgICAvLyBNT1YgVDIKLSAgICAgICAg
ICAgIGluc3RydWN0aW9uTmFtZSA9IHNCaXQoKSA/ICJtb3ZzIiA6ICJtb3YiOwotICAgICAgICAg
ICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKGluc3RydWN0aW9uTmFtZSk7Ci0gICAgICAgICAgICBh
cHBlbmRSZWdpc3Rlck5hbWUocmQoKSk7Ci0gICAgICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsK
LSAgICAgICAgICAgIGFwcGVuZE1vZGlmaWVkSW1tZWRpYXRlKGltbWVkaWF0ZTEyKCkpOwotCi0g
ICAgICAgICAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAob3AoKSA9PSAzKSB7Ci0gICAgICAgICAgICAvLyBNVk4gVDEKLSAgICAgICAgICAgIGluc3Ry
dWN0aW9uTmFtZSA9IHNCaXQoKSA/ICJtdm5zIiA6ICJtdm4iOwotICAgICAgICAgICAgYXBwZW5k
SW5zdHJ1Y3Rpb25OYW1lKGluc3RydWN0aW9uTmFtZSk7Ci0gICAgICAgICAgICBhcHBlbmRSZWdp
c3Rlck5hbWUocmQoKSk7Ci0gICAgICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAg
ICAgIGFwcGVuZE1vZGlmaWVkSW1tZWRpYXRlKGltbWVkaWF0ZTEyKCkpOwotCi0gICAgICAgICAg
ICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmQo
KSA9PSAxNSkgewotICAgICAgICBpZiAoc0JpdCgpKSB7Ci0gICAgICAgICAgICBib29sIHRlc3RP
ckNtcEluc3RydWN0aW9uID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAob3AoKSkgewot
ICAgICAgICAgICAgY2FzZSAweDA6Ci0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25OYW1lID0g
InRzdCI7Ci0gICAgICAgICAgICAgICAgdGVzdE9yQ21wSW5zdHJ1Y3Rpb24gPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAweDQ6Ci0gICAgICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25OYW1lID0gInRlcSI7Ci0gICAgICAgICAgICAgICAgdGVzdE9yQ21wSW5z
dHJ1Y3Rpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSAweDg6Ci0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25OYW1lID0gImNtbiI7Ci0gICAgICAg
ICAgICAgICAgdGVzdE9yQ21wSW5zdHJ1Y3Rpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSAweGQ6Ci0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25O
YW1lID0gImNtcCI7Ci0gICAgICAgICAgICAgICAgdGVzdE9yQ21wSW5zdHJ1Y3Rpb24gPSB0cnVl
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAodGVzdE9yQ21wSW5zdHJ1Y3Rpb24pIHsKLSAgICAgICAgICAgICAgICBhcHBlbmRJbnN0cnVj
dGlvbk5hbWUoaW5zdHJ1Y3Rpb25OYW1lKTsKLSAgICAgICAgICAgICAgICBhcHBlbmRSZWdpc3Rl
ck5hbWUocm4oKSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAg
ICAgICAgICAgYXBwZW5kTW9kaWZpZWRJbW1lZGlhdGUoaW1tZWRpYXRlMTIoKSk7Ci0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUoaW5zdHJ1Y3Rpb25OYW1lKTsK
LSAgICBhcHBlbmRSZWdpc3Rlck5hbWUocmQoKSk7Ci0gICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0g
ICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJuKCkpOwotICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAg
IGFwcGVuZE1vZGlmaWVkSW1tZWRpYXRlKGltbWVkaWF0ZTEyKCkpOwotCi0gICAgcmV0dXJuIG1f
Zm9ybWF0QnVmZmVyOwotfQotCi12b2lkIEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nU2hpZnRl
ZFJlZzo6YXBwZW5kSW1tU2hpZnQodW5zaWduZWQgdHlwZSwgdW5zaWduZWQgaW1tZWRpYXRlKQot
ewotICAgIGlmICh0eXBlIHx8IGltbWVkaWF0ZSkgewotICAgICAgICBhcHBlbmRTZXBhcmF0b3Io
KTsKLQotICAgICAgICBpZiAoIWltbWVkaWF0ZSkgewotICAgICAgICAgICAgc3dpdGNoICh0eXBl
KSB7Ci0gICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAg
ICAgICAgaW1tZWRpYXRlID0gMzI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgYXBwZW5kU3RyaW5nKCJycngiKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBhcHBl
bmRTaGlmdFR5cGUodHlwZSk7Ci0gICAgICAgIGFwcGVuZFVuc2lnbmVkSW1tZWRpYXRlKGltbWVk
aWF0ZSk7Ci0gICAgfQotfQotCi1jb25zdCBjaGFyKiBBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2lu
Z1NoaWZ0ZWRSZWc6OmZvcm1hdCgpCi17Ci0gICAgaWYgKChvcCgpID09IDB4NSkgfHwgKG9wKCkg
PT0gMHg3KSB8fCAob3AoKSA9PSAweDkpIHx8IChvcCgpID09IDB4YykgfHwgKG9wKCkgPT0gMHhm
KSkKLSAgICAgICAgcmV0dXJuIGRlZmF1bHRGb3JtYXQoKTsKLQotICAgIGlmIChvcCgpID09IDYp
IHsKLSAgICAgICAgLy8gcGtoYnQgb3IgcGtodGIKLSAgICAgICAgaWYgKHNCaXQoKSB8fCB0Qml0
KCkpCi0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZvcm1hdCgpOwotCi0gICAgICAgIGlmICh0
YkJpdCgpKQotICAgICAgICAgICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKCJwa2h0YiIpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUoInBraGJ0Iik7Ci0g
ICAgICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShyZCgpKTsKLSAgICAgICAgYXBwZW5kU2VwYXJhdG9y
KCk7Ci0gICAgICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybigpKTsKLSAgICAgICAgYXBwZW5kU2Vw
YXJhdG9yKCk7Ci0gICAgICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybSgpKTsKLSAgICAgICAgYXBw
ZW5kSW1tU2hpZnQodGJCaXQoKSA8PCAxLCBpbW1lZGlhdGU1KCkpOwotCi0gICAgICAgIHJldHVy
biBtX2Zvcm1hdEJ1ZmZlcjsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiBpbnN0cnVjdGlvbk5h
bWUgPSBvcE5hbWUoKTsKLQotICAgIGlmIChybigpID09IDE1KSB7Ci0gICAgICAgIGlmIChvcCgp
ID09IDIpIHsKLSAgICAgICAgICAgIGlmICghdHlwZSgpICYmICFpbW1lZGlhdGU1KCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBNT1YgVDMKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbk5hbWUg
PSBzQml0KCkgPyAibW92cyIgOiAibW92IjsKLSAgICAgICAgICAgICAgICBhcHBlbmRJbnN0cnVj
dGlvbk5hbWUoaW5zdHJ1Y3Rpb25OYW1lKTsKLSAgICAgICAgICAgICAgICBhcHBlbmRSZWdpc3Rl
ck5hbWUocmQoKSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAg
ICAgICAgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJtKCkpOwotCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG1fZm9ybWF0QnVmZmVyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodHlw
ZSgpID09IDMgJiYgIWltbWVkaWF0ZTUoKSkgewotICAgICAgICAgICAgICAgIC8vIFJSWCBUMQot
ICAgICAgICAgICAgICAgIGluc3RydWN0aW9uTmFtZSA9IHNCaXQoKSA/ICJycngiIDogInJyeCI7
Ci0gICAgICAgICAgICAgICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKGluc3RydWN0aW9uTmFtZSk7
Ci0gICAgICAgICAgICAgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJkKCkpOwotICAgICAgICAgICAg
ICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAgICAgICAgICAgICAgIGFwcGVuZFJlZ2lzdGVyTmFt
ZShybSgpKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8gTG9naWNhbAotICAgICAgICAgICAgaWYgKHNCaXQo
KSkKLSAgICAgICAgICAgICAgICBidWZmZXJQcmludGYoIiVzcyAiLCBzaGlmdE5hbWUodHlwZSgp
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXBwZW5kSW5zdHJ1Y3Rpb25O
YW1lKHNoaWZ0TmFtZSh0eXBlKCkpKTsKLSAgICAgICAgICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShy
ZCgpKTsKLSAgICAgICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAgICAgICAgICAgYXBwZW5k
UmVnaXN0ZXJOYW1lKHJtKCkpOwotICAgICAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAg
ICAgICAgICBhcHBlbmRVbnNpZ25lZEltbWVkaWF0ZShpbW1lZGlhdGU1KCkpOwotCi0gICAgICAg
ICAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAob3Ao
KSA9PSAzKSB7Ci0gICAgICAgICAgICAvLyBNVk4gVDIKLSAgICAgICAgICAgIGluc3RydWN0aW9u
TmFtZSA9IHNCaXQoKSA/ICJtdm5zIiA6ICJtdm4iOwotICAgICAgICAgICAgYXBwZW5kSW5zdHJ1
Y3Rpb25OYW1lKGluc3RydWN0aW9uTmFtZSk7Ci0gICAgICAgICAgICBhcHBlbmRSZWdpc3Rlck5h
bWUocmQoKSk7Ci0gICAgICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAgICAgIGFw
cGVuZFJlZ2lzdGVyTmFtZShybSgpKTsKLSAgICAgICAgICAgIGFwcGVuZEltbVNoaWZ0KHR5cGUo
KSwgaW1tZWRpYXRlNSgpKTsKLQotICAgICAgICAgICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJkKCkgPT0gMTUpIHsKLSAgICAgICAgaWYgKHNC
aXQoKSkgewotICAgICAgICAgICAgYm9vbCB0ZXN0T3JDbXBJbnN0cnVjdGlvbiA9IGZhbHNlOwot
Ci0gICAgICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgMHgwOgotICAg
ICAgICAgICAgICAgIGluc3RydWN0aW9uTmFtZSA9ICJ0c3QiOwotICAgICAgICAgICAgICAgIHRl
c3RPckNtcEluc3RydWN0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgMHg0OgotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uTmFtZSA9ICJ0ZXEi
OwotICAgICAgICAgICAgICAgIHRlc3RPckNtcEluc3RydWN0aW9uID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMHg4OgotICAgICAgICAgICAgICAgIGlu
c3RydWN0aW9uTmFtZSA9ICJjbW4iOwotICAgICAgICAgICAgICAgIHRlc3RPckNtcEluc3RydWN0
aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMHhk
OgotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uTmFtZSA9ICJjbXAiOwotICAgICAgICAgICAg
ICAgIHRlc3RPckNtcEluc3RydWN0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRlc3RPckNtcEluc3RydWN0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKGluc3RydWN0aW9uTmFtZSk7
Ci0gICAgICAgICAgICAgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJuKCkpOwotICAgICAgICAgICAg
ICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAgICAgICAgICAgICAgIGFwcGVuZFJlZ2lzdGVyTmFt
ZShybSgpKTsKLSAgICAgICAgICAgICAgICBhcHBlbmRJbW1TaGlmdCh0eXBlKCksIGltbWVkaWF0
ZTUoKSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUoaW5z
dHJ1Y3Rpb25OYW1lKTsKLSAgICBhcHBlbmRSZWdpc3Rlck5hbWUocmQoKSk7Ci0gICAgYXBwZW5k
U2VwYXJhdG9yKCk7Ci0gICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJuKCkpOwotICAgIGFwcGVuZFNl
cGFyYXRvcigpOwotICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybSgpKTsKLSAgICBhcHBlbmRJbW1T
aGlmdCh0eXBlKCksIGltbWVkaWF0ZTUoKSk7Ci0KLSAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7
Ci19Ci0KLWNvbnN0IGNoYXIqIEFSTXY3RE9wY29kZUZQVHJhbnNmZXI6OmZvcm1hdCgpCi17Ci0g
ICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKCJ2bW92Iik7Ci0KLSAgICBpZiAob3BMKCkpIHsKLSAg
ICAgICAgYXBwZW5kRlBSZWdpc3RlcigpOwotICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAg
ICB9Ci0KLSAgICBhcHBlbmRSZWdpc3Rlck5hbWUocnQoKSk7Ci0KLSAgICBpZiAoIW9wTCgpKSB7
Ci0gICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAgICAgICBhcHBlbmRGUFJlZ2lzdGVyKCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwotfQotCi12b2lkIEFSTXY3RE9w
Y29kZUZQVHJhbnNmZXI6OmFwcGVuZEZQUmVnaXN0ZXIoKQotewotICAgIGlmIChvcEMoKSkgewot
ICAgICAgICBhcHBlbmRGUFJlZ2lzdGVyTmFtZSgnZCcsIHZkKCkpOwotICAgICAgICBidWZmZXJQ
cmludGYoIlsldV0iLCBvcEgoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGFwcGVuZEZQUmVnaXN0
ZXJOYW1lKCdzJywgdm4oKSk7Ci19Ci0KLWNvbnN0IGNoYXIqIEFSTXY3RE9wY29kZURhdGFQcm9j
ZXNzaW5nUmVnU2hpZnQ6OmZvcm1hdCgpCi17Ci0gICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKG9w
TmFtZSgpKTsKLSAgICBhcHBlbmRSZWdpc3Rlck5hbWUocmQoKSk7Ci0gICAgYXBwZW5kU2VwYXJh
dG9yKCk7Ci0gICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJuKCkpOwotICAgIGFwcGVuZFNlcGFyYXRv
cigpOwotICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybSgpKTsKLQotICAgIHJldHVybiBtX2Zvcm1h
dEJ1ZmZlcjsKLX0KLQotY29uc3QgY2hhciogY29uc3QgQVJNdjdET3Bjb2RlRGF0YVByb2Nlc3Np
bmdSZWdFeHRlbmQ6OnNfb3BFeHRlbmROYW1lc1s4XSA9IHsKLSAgICAic3h0aCIsICJ1eHRoIiwg
InN4dGIxNiIsICJ1eHRiMTYiLCAic3h0YiIsICJ1eHRiIgotfTsKLQotY29uc3QgY2hhciogY29u
c3QgQVJNdjdET3Bjb2RlRGF0YVByb2Nlc3NpbmdSZWdFeHRlbmQ6OnNfb3BFeHRlbmRBbmRBZGRO
YW1lc1s4XSA9IHsKLSAgICAic3h0YWgiLCAidXh0YWgiLCAic3h0YWIxNiIsICJ1eHRhYjE2Iiwg
InN4dGFiIiwgInV4dGFiIgotfTsKLQotY29uc3QgY2hhciogQVJNdjdET3Bjb2RlRGF0YVByb2Nl
c3NpbmdSZWdFeHRlbmQ6OmZvcm1hdCgpCi17Ci0gICAgY29uc3QgY2hhciogaW5zdHJ1Y3Rpb25O
YW1lOwotCi0gICAgaWYgKHJuKCkgPT0gMHhmKQotICAgICAgICBpbnN0cnVjdGlvbk5hbWUgPSBv
cEV4dGVuZE5hbWUoKTsKLSAgICBlbHNlCi0gICAgICAgIGluc3RydWN0aW9uTmFtZSA9IG9wRXh0
ZW5kQW5kQWRkTmFtZSgpOwotCi0gICAgaWYgKCFpbnN0cnVjdGlvbk5hbWUpCi0gICAgICAgIHJl
dHVybiBkZWZhdWx0Rm9ybWF0KCk7Ci0KLSAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUoaW5zdHJ1
Y3Rpb25OYW1lKTsKLSAgICBhcHBlbmRSZWdpc3Rlck5hbWUocmQoKSk7Ci0gICAgYXBwZW5kU2Vw
YXJhdG9yKCk7Ci0gICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJuKCkpOwotICAgIGFwcGVuZFNlcGFy
YXRvcigpOwotICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybSgpKTsKLQotICAgIGlmIChyb3RhdGUo
KSkgewotICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAgYXBwZW5kU3RyaW5nKCJy
b3IgIik7Ci0gICAgICAgIGFwcGVuZFVuc2lnbmVkSW1tZWRpYXRlKHJvdGF0ZSgpICogOCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwotfQotCi1jb25zdCBjaGFyKiBjb25z
dCBBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ1BhcmFsbGVsOjpzX29wTmFtZXNbMTZdID0g
ewotICAgICJzYWRkOCIsICJzYWRkMTYiLCAic2FzeCIsIDAsICJzc3ViOCIsICJzc3ViMTYiLCAi
c3NheCIsIDAsCi0gICAgInFhZGQ4IiwgInFhZGQxNiIsICJxYXN4IiwgMCwgInFzdWI4IiwgInFz
dWIxNiIsICJxc2F4IiwgMAotfTsKLQotY29uc3QgY2hhciogQVJNdjdET3Bjb2RlRGF0YVByb2Nl
c3NpbmdSZWdQYXJhbGxlbDo6Zm9ybWF0KCkKLXsKLSAgICBjb25zdCBjaGFyKiBpbnN0cnVjdGlv
bk5hbWU7Ci0KLSAgICBpbnN0cnVjdGlvbk5hbWUgPSBvcE5hbWUoKTsKLQotICAgIGlmICghaW5z
dHJ1Y3Rpb25OYW1lKQotICAgICAgICByZXR1cm4gZGVmYXVsdEZvcm1hdCgpOwotCi0gICAgYXBw
ZW5kSW5zdHJ1Y3Rpb25OYW1lKGluc3RydWN0aW9uTmFtZSk7Ci0gICAgYXBwZW5kUmVnaXN0ZXJO
YW1lKHJkKCkpOwotICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAgIGFwcGVuZFJlZ2lzdGVyTmFt
ZShybigpKTsKLSAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICBhcHBlbmRSZWdpc3Rlck5hbWUo
cm0oKSk7Ci0KLSAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Ci19Ci0KLWNvbnN0IGNoYXIqIGNv
bnN0IEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnTWlzYzo6c19vcE5hbWVzWzE2XSA9IHsK
LSAgICAicWFkZCIsICJxZGFkZCIsICJxc3ViIiwgInFkc3ViIiwgInJldiIsICJyZXYxNiIsICJy
Yml0IiwgInJldnNoIiwKLSAgICAic2VsIiwgMCwgMCwgMCwgImNseiIKLX07Ci0KLWNvbnN0IGNo
YXIqIEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnTWlzYzo6Zm9ybWF0KCkKLXsKLSAgICBj
b25zdCBjaGFyKiBpbnN0cnVjdGlvbk5hbWU7Ci0KLSAgICBpbnN0cnVjdGlvbk5hbWUgPSBvcE5h
bWUoKTsKLQotICAgIGlmICghaW5zdHJ1Y3Rpb25OYW1lKQotICAgICAgICByZXR1cm4gZGVmYXVs
dEZvcm1hdCgpOwotCi0gICAgaWYgKChvcDEoKSAmIDB4MSkgJiYgKHJuKCkgIT0gcm0oKSkpCi0g
ICAgICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0KCk7Ci0KLSAgICBhcHBlbmRJbnN0cnVjdGlvbk5h
bWUoaW5zdHJ1Y3Rpb25OYW1lKTsKLSAgICBhcHBlbmRSZWdpc3Rlck5hbWUocmQoKSk7Ci0gICAg
YXBwZW5kU2VwYXJhdG9yKCk7Ci0KLSAgICBpZiAob3AxKCkgPT0gMHgyKSB7IC8vIHNlbAotICAg
ICAgICBhcHBlbmRSZWdpc3Rlck5hbWUocm4oKSk7Ci0gICAgICAgIGFwcGVuZFNlcGFyYXRvcigp
OwotICAgICAgICBhcHBlbmRSZWdpc3Rlck5hbWUocm0oKSk7Ci0KLSAgICAgICAgcmV0dXJuIG1f
Zm9ybWF0QnVmZmVyOwotICAgIH0KLQotICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybSgpKTsKLQot
ICAgIGlmICghKG9wMSgpICYgMHgxKSkgewotICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAg
ICAgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJuKCkpOwotICAgIH0KLQotICAgIHJldHVybiBtX2Zv
cm1hdEJ1ZmZlcjsKLX0KLQotY29uc3QgY2hhciogY29uc3QgQVJNdjdET3Bjb2RlSGludDMyOjpz
X29wTmFtZXNbOF0gPSB7Ci0gICAgIm5vcCIsICJ5aWVsZCIsICJ3ZmUiLCAid2ZpIiwgInNldiIK
LX07Ci0KLWNvbnN0IGNoYXIqIEFSTXY3RE9wY29kZUhpbnQzMjo6Zm9ybWF0KCkKLXsKLSAgICBp
ZiAoaXNEZWJ1Z0hpbnQoKSkgewotICAgICAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUoImRlYnVn
Iik7Ci0gICAgICAgIGFwcGVuZFVuc2lnbmVkSW1tZWRpYXRlKGRlYnVnT3B0aW9uKCkpOwotCi0g
ICAgICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKLSAgICB9Ci0KLSAgICBpZiAob3AoKSA+IDB4
NCkKLSAgICAgICAgcmV0dXJuIGRlZmF1bHRGb3JtYXQoKTsKLQotICAgIGFwcGVuZEluc3RydWN0
aW9uTmFtZShvcE5hbWUoKSk7Ci0KLSAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Ci19Ci0KLWNv
bnN0IGNoYXIqIGNvbnN0IEFSTXY3RE9wY29kZURhdGFMb2FkOjpzX29wTmFtZXNbOF0gPSB7Ci0g
ICAgImxkcmIiLCAibGRyaCIsICJsZHIiLCAwLCAibGRyc2IiLCAibGRyc2giCi19OwotCi1jb25z
dCBjaGFyKiBBUk12N0RPcGNvZGVMb2FkUmVnaXN0ZXI6OmZvcm1hdCgpCi17Ci0gICAgYXBwZW5k
SW5zdHJ1Y3Rpb25OYW1lKG9wTmFtZSgpKTsKLSAgICBhcHBlbmRSZWdpc3Rlck5hbWUocnQoKSk7
Ci0gICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgYXBwZW5kQ2hhcmFjdGVyKCdbJyk7Ci0gICAg
YXBwZW5kUmVnaXN0ZXJOYW1lKHJuKCkpOwotICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAgIGFw
cGVuZFJlZ2lzdGVyTmFtZShybSgpKTsKLSAgICBpZiAoaW1tZWRpYXRlMigpKSB7Ci0gICAgICAg
IGFwcGVuZFNlcGFyYXRvcigpOwotICAgICAgICBhcHBlbmRVbnNpZ25lZEltbWVkaWF0ZShpbW1l
ZGlhdGUyKCkpOwotICAgIH0KLSAgICBhcHBlbmRDaGFyYWN0ZXIoJ10nKTsKLQotICAgIHJldHVy
biBtX2Zvcm1hdEJ1ZmZlcjsKLX0KLQotY29uc3QgY2hhciogQVJNdjdET3Bjb2RlTG9hZFNpZ25l
ZEltbWVkaWF0ZTo6Zm9ybWF0KCkKLXsKLSAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUob3BOYW1l
KCkpOwotICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShydCgpKTsKLSAgICBhcHBlbmRTZXBhcmF0b3Io
KTsKLSAgICBhcHBlbmRDaGFyYWN0ZXIoJ1snKTsKLSAgICBhcHBlbmRSZWdpc3Rlck5hbWUocm4o
KSk7Ci0gICAgaWYgKHBCaXQoKSkgewotICAgICAgICBpZiAod0JpdCgpIHx8IGltbWVkaWF0ZTgo
KSkgewotICAgICAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAgICAgICBpZiAodUJp
dCgpKQotICAgICAgICAgICAgICAgIGFwcGVuZFVuc2lnbmVkSW1tZWRpYXRlKGltbWVkaWF0ZTgo
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXBwZW5kU2lnbmVkSW1tZWRp
YXRlKDAgLSBzdGF0aWNfY2FzdDxpbnQ+KGltbWVkaWF0ZTgoKSkpOwotICAgICAgICB9Ci0gICAg
ICAgIGFwcGVuZENoYXJhY3RlcignXScpOwotICAgICAgICBpZiAod0JpdCgpKQotICAgICAgICAg
ICAgYXBwZW5kQ2hhcmFjdGVyKCchJyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXBwZW5kQ2hh
cmFjdGVyKCddJyk7Ci0gICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAgICAgICBpZiAodUJp
dCgpKQotICAgICAgICAgICAgYXBwZW5kVW5zaWduZWRJbW1lZGlhdGUoaW1tZWRpYXRlOCgpKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXBwZW5kU2lnbmVkSW1tZWRpYXRlKDAgLSBzdGF0
aWNfY2FzdDxpbnQ+KGltbWVkaWF0ZTgoKSkpOwotICAgIH0KLQotICAgIHJldHVybiBtX2Zvcm1h
dEJ1ZmZlcjsKLX0KLQotY29uc3QgY2hhciogQVJNdjdET3Bjb2RlTG9hZFVuc2lnbmVkSW1tZWRp
YXRlOjpmb3JtYXQoKQotewotICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZShvcE5hbWUoKSk7Ci0g
ICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJ0KCkpOwotICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAg
IGFwcGVuZENoYXJhY3RlcignWycpOwotICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybigpKTsKLSAg
ICBpZiAoaW1tZWRpYXRlMTIoKSkgewotICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAg
ICAgYXBwZW5kVW5zaWduZWRJbW1lZGlhdGUoaW1tZWRpYXRlMTIoKSk7Ci0gICAgfQotICAgIGFw
cGVuZENoYXJhY3RlcignXScpOwotCi0gICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwotfQotCi1j
b25zdCBjaGFyKiBjb25zdCBBUk12N0RPcGNvZGVMb25nTXVsdGlwbGVEaXZpZGU6OnNfb3BOYW1l
c1s4XSA9IHsKLSAgICAic211bGwiLCAic2RpdiIsICJ1bXVsbCIsICJ1ZGl2IiwgInNtbGFsIiwg
InNtbHNsZCIsICJ1bWxhbCIsIDAKLX07Ci0KLWNvbnN0IGNoYXIqIGNvbnN0IEFSTXY3RE9wY29k
ZUxvbmdNdWx0aXBsZURpdmlkZTo6c19zbWxhbE9wTmFtZXNbNF0gPSB7Ci0gICAgInNtbGFsYmIi
LCAic21sYWxidCIsICJzbWxhbHRiIiwgInNtbGFsdHQiCi19OwotCi1jb25zdCBjaGFyKiBjb25z
dCBBUk12N0RPcGNvZGVMb25nTXVsdGlwbGVEaXZpZGU6OnNfc21sYWxkT3BOYW1lc1syXSA9IHsK
LSAgICAic21sYWxkIiwgInNtbGFsZHgiCi19OwotCi1jb25zdCBjaGFyKiBjb25zdCBBUk12N0RP
cGNvZGVMb25nTXVsdGlwbGVEaXZpZGU6OnNfc21sc2xkT3BOYW1lc1syXSA9IHsKLSAgICAic21s
c2xkIiwgInNtbHNsZHgiCi19OwotCi1jb25zdCBjaGFyKiBBUk12N0RPcGNvZGVMb25nTXVsdGlw
bGVEaXZpZGU6OmZvcm1hdCgpCi17Ci0gICAgY29uc3QgY2hhciogaW5zdHJ1Y3Rpb25OYW1lID0g
b3BOYW1lKCk7Ci0KLSAgICBzd2l0Y2ggKG9wMSgpKSB7Ci0gICAgY2FzZSAweDA6Ci0gICAgY2Fz
ZSAweDI6Ci0gICAgICAgIGlmIChvcDIoKSkKLSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Rm9y
bWF0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMHgxOgotICAgIGNhc2UgMHgzOgotICAg
ICAgICBpZiAob3AyKCkgIT0gMHhmKQotICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGb3JtYXQo
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAweDQ6Ci0gICAgICAgIGlmICgob3AyKCkgJiAw
eGMpID09IDB4OCkKLSAgICAgICAgICAgIGluc3RydWN0aW9uTmFtZSA9IHNtbGFsT3BOYW1lKCk7
Ci0gICAgICAgIGVsc2UgaWYgKChvcDIoKSAmIDB4ZSkgPT0gMHhjKQotICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25OYW1lID0gc21sYWxkT3BOYW1lKCk7Ci0gICAgICAgIGVsc2UgaWYgKG9wMigpKQot
ICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGb3JtYXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSAweDU6Ci0gICAgICAgIGlmICgob3AyKCkgJiAweGUpID09IDB4YykKLSAgICAgICAgICAg
IGluc3RydWN0aW9uTmFtZSA9IHNtbGFsZE9wTmFtZSgpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICByZXR1cm4gZGVmYXVsdEZvcm1hdCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDB4
NjoKLSAgICAgICAgaWYgKG9wMigpID09IDB4NSkKLSAgICAgICAgICAgIGluc3RydWN0aW9uTmFt
ZSA9ICJ1bWFhbCI7Ci0gICAgICAgIGVsc2UgaWYgKG9wMigpKQotICAgICAgICAgICAgcmV0dXJu
IGRlZmF1bHRGb3JtYXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAweDc6Ci0gICAgICAg
IHJldHVybiBkZWZhdWx0Rm9ybWF0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGFw
cGVuZEluc3RydWN0aW9uTmFtZShpbnN0cnVjdGlvbk5hbWUpOwotICAgIGlmICgob3AxKCkgJiAw
eDUpID09IDB4MSkgeyAvLyBzZGl2IGFuZCB1ZGl2Ci0gICAgICAgIGlmIChydCgpICE9IDB4ZikK
LSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJkTG8oKSk7Ci0gICAgICAgIGFwcGVuZFNlcGFyYXRvcigp
OwotICAgIH0KLSAgICBhcHBlbmRSZWdpc3Rlck5hbWUocmRIaSgpKTsKLSAgICBhcHBlbmRTZXBh
cmF0b3IoKTsKLSAgICBhcHBlbmRSZWdpc3Rlck5hbWUocm4oKSk7Ci0gICAgYXBwZW5kU2VwYXJh
dG9yKCk7Ci0gICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJtKCkpOwotCi0gICAgcmV0dXJuIG1fZm9y
bWF0QnVmZmVyOwotfQotCi1jb25zdCBjaGFyKiBjb25zdCBBUk12N0RPcGNvZGVVbm1vZGlmaWVk
SW1tZWRpYXRlOjpzX29wTmFtZXNbMTZdID0gewotICAgICJhZGR3IiwgMCwgIm1vdnciLCAwLCAw
LCAic3VidyIsICJtb3Z0IiwgMCwKLSAgICAic3NhdCIsICJzc2F0MTYiLCAic2JmeCIsICJiZmki
LCAidXNhdCIgLCAidXNhdDE2IiwgInViZngiLCAwCi19OwotCi1jb25zdCBjaGFyKiBBUk12N0RP
cGNvZGVVbm1vZGlmaWVkSW1tZWRpYXRlOjpmb3JtYXQoKQotewotICAgIGNvbnN0IGNoYXIqIGlu
c3RydWN0aW9uTmFtZSA9IG9wTmFtZSgpOwotCi0gICAgc3dpdGNoIChvcCgpID4+IDEpIHsKLSAg
ICBjYXNlIDB4MDoKLSAgICBjYXNlIDB4NToKLSAgICAgICAgaWYgKHJuKCkgPT0gMHhmKQotICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25OYW1lID0gImFkciI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgMHg5OgotICAgICAgICBpZiAoaW1tZWRpYXRlNSgpKQotICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25OYW1lID0gInNzYXQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDB4YjoKLSAgICAgICAg
aWYgKHJuKCkgPT0gMHhmKQotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25OYW1lID0gImJmYyI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgMHhkOgotICAgICAgICBpZiAoaW1tZWRpYXRlNSgpKQot
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25OYW1lID0gInVzYXQiOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBpZiAoIWluc3RydWN0aW9uTmFtZSkKLSAgICAgICAgcmV0dXJuIGRlZmF1bHRG
b3JtYXQoKTsKLQotICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZShpbnN0cnVjdGlvbk5hbWUpOwot
ICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShyZCgpKTsKLSAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLQot
ICAgIGlmICgob3AoKSAmIDB4MTcpID09IDB4NCkgeyAvLyBtb3Z3IG9yIG1vdnQKLSAgICAgICAg
YXBwZW5kVW5zaWduZWRJbW1lZGlhdGUoaW1tZWRpYXRlMTYoKSk7Ci0KLSAgICAgICAgcmV0dXJu
IG1fZm9ybWF0QnVmZmVyOwotICAgIH0KLQotICAgIGlmICghb3AoKSB8fCAob3AoKSA9PSAweGEp
KSB7IC8vIGFkZHcsIHN1YncgYW5kIGFkcgotICAgICAgICBpZiAocm4oKSA9PSAweGYpIHsKLSAg
ICAgICAgICAgIGludDMyX3Qgb2Zmc2V0OwotCi0gICAgICAgICAgICBpZiAoKG9wKCkgPT0gMHhh
KSAmJiAocm4oKSA9PSAweGYpKQotICAgICAgICAgICAgICAgIG9mZnNldCA9IDAgLSBzdGF0aWNf
Y2FzdDxpbnQzMl90PihpbW1lZGlhdGUxMigpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBvZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihpbW1lZGlhdGUxMigpKTsKLQot
ICAgICAgICAgICAgYXBwZW5kUENSZWxhdGl2ZU9mZnNldChvZmZzZXQpOwotCi0gICAgICAgICAg
ICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBhcHBlbmRSZWdp
c3Rlck5hbWUocm4oKSk7Ci0gICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAgICAgICBhcHBl
bmRVbnNpZ25lZEltbWVkaWF0ZShpbW1lZGlhdGUxMigpKTsKLQotICAgICAgICByZXR1cm4gbV9m
b3JtYXRCdWZmZXI7Ci0gICAgfQotCi0gICAgaWYgKCgob3AoKSAmIDB4MTUpID09IDB4MTApIHx8
ICgoKG9wKCkgJiAweDE3KSA9PSAweDEyKSAmJiBpbW1lZGlhdGU1KCkpKSB7IC8vIHNzYXQsIHVz
YXQsIHNzYXQxNiAmIHVzYXQxNgotICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAg
YXBwZW5kVW5zaWduZWRJbW1lZGlhdGUoYml0TnVtT3JTYXRJbW1lZGlhdGUoKSArIDEpOwotICAg
ICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJuKCkp
OwotICAgICAgICBpZiAoc2hCaXQoKSB8fCBpbW1lZGlhdGU1KCkpIHsKLSAgICAgICAgICAgIGFw
cGVuZFNlcGFyYXRvcigpOwotICAgICAgICAgICAgYXBwZW5kU2hpZnRUeXBlKHNoQml0KCkgPDwg
MSk7Ci0gICAgICAgICAgICBhcHBlbmRVbnNpZ25lZEltbWVkaWF0ZShpbW1lZGlhdGU1KCkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwotICAgIH0KLQotICAg
IGlmIChvcCgpID09IDB4MTYpIHsgLy8gYmZpIG9yIGJmYwotICAgICAgICBpbnQgd2lkdGggPSBz
dGF0aWNfY2FzdDxpbnQ+KGJpdE51bU9yU2F0SW1tZWRpYXRlKCkpIC0gc3RhdGljX2Nhc3Q8aW50
PihpbW1lZGlhdGU1KCkpICsgMTsKLQotICAgICAgICBpZiAod2lkdGggPCAwKQotICAgICAgICAg
ICAgcmV0dXJuIGRlZmF1bHRGb3JtYXQoKTsKLQotICAgICAgICBpZiAocm4oKSAhPSAweGYpIHsK
LSAgICAgICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAgICAgICAgICAgYXBwZW5kUmVnaXN0
ZXJOYW1lKHJuKCkpOwotICAgICAgICB9Ci0gICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAg
ICAgICBhcHBlbmRVbnNpZ25lZEltbWVkaWF0ZShpbW1lZGlhdGU1KCkpOwotICAgICAgICBhcHBl
bmRTZXBhcmF0b3IoKTsKLSAgICAgICAgYXBwZW5kU2lnbmVkSW1tZWRpYXRlKHdpZHRoKTsKLQot
ICAgICAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Ci0gICAgfQotCi0gICAgLy8gTXVzdCBiZSBz
YmZ4IG9yIHViZngKLSAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICBhcHBlbmRSZWdpc3Rlck5h
bWUocm4oKSk7Ci0gICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgYXBwZW5kVW5zaWduZWRJbW1l
ZGlhdGUoaW1tZWRpYXRlNSgpKTsKLSAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICBhcHBlbmRV
bnNpZ25lZEltbWVkaWF0ZShiaXROdW1PclNhdEltbWVkaWF0ZSgpICsgMSk7Ci0KLSAgICByZXR1
cm4gbV9mb3JtYXRCdWZmZXI7Ci19Ci0KLWNvbnN0IGNoYXIqIGNvbnN0IEFSTXY3RE9wY29kZURh
dGFTdG9yZVNpbmdsZTo6c19vcE5hbWVzWzRdID0gewotICAgICJzdHJiIiwgInN0cmgiLCAic3Ry
IiwgMAotfTsKLQotY29uc3QgY2hhciogQVJNdjdET3Bjb2RlRGF0YVB1c2hQb3BTaW5nbGU6OmZv
cm1hdCgpCi17Ci0gICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKG9wTmFtZSgpKTsKLSAgICBhcHBl
bmRSZWdpc3Rlck5hbWUocnQoKSk7Ci0KLSAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Ci19Ci0K
LXZvaWQgQVJNdjdET3Bjb2RlRGF0YVB1c2hQb3BNdWx0aXBsZTo6YXBwZW5kUmVnaXN0ZXJMaXN0
KCkKLXsKLSAgICB1bnNpZ25lZCByZWdpc3RlcnMgPSByZWdpc3Rlckxpc3QoKTsKLQotICAgIGFw
cGVuZENoYXJhY3RlcigneycpOwotICAgIGJvb2wgbmVlZFNlcGFyYXRvciA9IGZhbHNlOwotCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDE2OyBpKyspIHsKLSAgICAgICAgaWYgKHJlZ2lz
dGVycyAmICgxIDw8IGkpKSB7Ci0gICAgICAgICAgICBpZiAobmVlZFNlcGFyYXRvcikKLSAgICAg
ICAgICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAgICAgIGFwcGVuZFJlZ2lzdGVy
TmFtZShpKTsKLSAgICAgICAgICAgIG5lZWRTZXBhcmF0b3IgPSB0cnVlOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGFwcGVuZENoYXJhY3RlcignfScpOwotfQotCi1jb25zdCBjaGFyKiBBUk12N0RP
cGNvZGVEYXRhUG9wTXVsdGlwbGU6OmZvcm1hdCgpCi17Ci0gICAgaWYgKGNvbmRpdGlvbigpICE9
IDB4ZSkKLSAgICAgICAgYnVmZmVyUHJpbnRmKCIgICBwb3AlLTQuNHMiLCBjb25kaXRpb25OYW1l
KGNvbmRpdGlvbigpKSk7Ci0gICAgZWxzZQotICAgICAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUo
InBvcCIpOwotICAgIGFwcGVuZFJlZ2lzdGVyTGlzdCgpOwotCi0gICAgcmV0dXJuIG1fZm9ybWF0
QnVmZmVyOwotfQotCi1jb25zdCBjaGFyKiBBUk12N0RPcGNvZGVEYXRhUHVzaE11bHRpcGxlOjpm
b3JtYXQoKQotewotICAgIGlmIChjb25kaXRpb24oKSAhPSAweGUpCi0gICAgICAgIGJ1ZmZlclBy
aW50ZigiICAgcHVzaCUtMy4zcyIsIGNvbmRpdGlvbk5hbWUoY29uZGl0aW9uKCkpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZSgicHVzaCIpOwotICAgIGFwcGVuZFJl
Z2lzdGVyTGlzdCgpOwotCi0gICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwotfQotCi1jb25zdCBj
aGFyKiBBUk12N0RPcGNvZGVTdG9yZVNpbmdsZUltbWVkaWF0ZTEyOjpmb3JtYXQoKQotewotICAg
IGFwcGVuZEluc3RydWN0aW9uTmFtZShvcE5hbWUoKSk7Ci0gICAgYXBwZW5kUmVnaXN0ZXJOYW1l
KHJ0KCkpOwotICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAgIGFwcGVuZENoYXJhY3RlcignWycp
OwotICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybigpKTsKLSAgICBpZiAoaW1tZWRpYXRlMTIoKSkg
ewotICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAgYXBwZW5kVW5zaWduZWRJbW1l
ZGlhdGUoaW1tZWRpYXRlMTIoKSk7Ci0gICAgfQotICAgIGFwcGVuZENoYXJhY3RlcignXScpOwot
Ci0gICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwotfQotCi1jb25zdCBjaGFyKiBBUk12N0RPcGNv
ZGVTdG9yZVNpbmdsZUltbWVkaWF0ZTg6OmZvcm1hdCgpCi17Ci0gICAgaWYgKHBCaXQoKSAmJiB1
Qml0KCkgJiYgIXdCaXQoKSkgLy8gUmVhbGx5IHVuZGVjb2RlZCBzdHJ0Ci0gICAgICAgIHJldHVy
biBkZWZhdWx0Rm9ybWF0KCk7Ci0KLSAgICBpZiAoKHJuKCkgPT0gMHhmKSB8fCAoIXBCaXQoKSAm
JiAhd0JpdCgpKSkKLSAgICAgICAgcmV0dXJuIGRlZmF1bHRGb3JtYXQoKTsKLQotICAgIGFwcGVu
ZEluc3RydWN0aW9uTmFtZShvcE5hbWUoKSk7Ci0gICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJ0KCkp
OwotICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAgIGFwcGVuZENoYXJhY3RlcignWycpOwotICAg
IGFwcGVuZFJlZ2lzdGVyTmFtZShybigpKTsKLQotICAgIGlmICghcEJpdCgpKSB7Ci0gICAgICAg
IGFwcGVuZENoYXJhY3RlcignXScpOwotICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAg
ICAgYXBwZW5kU2lnbmVkSW1tZWRpYXRlKHVCaXQoKSA/IHN0YXRpY19jYXN0PGludDMyX3Q+KGlt
bWVkaWF0ZTgoKSkgOiAoMCAtIHN0YXRpY19jYXN0PGludDMyX3Q+KGltbWVkaWF0ZTgoKSkpKTsK
LQotICAgICAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Ci0gICAgfQotCi0gICAgaWYgKGltbWVk
aWF0ZTgoKSkgewotICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAgYXBwZW5kU2ln
bmVkSW1tZWRpYXRlKHVCaXQoKSA/IHN0YXRpY19jYXN0PGludDMyX3Q+KGltbWVkaWF0ZTgoKSkg
OiAoMCAtIHN0YXRpY19jYXN0PGludDMyX3Q+KGltbWVkaWF0ZTgoKSkpKTsKLSAgICB9Ci0gICAg
YXBwZW5kQ2hhcmFjdGVyKCddJyk7Ci0KLSAgICBpZiAod0JpdCgpKQotICAgICAgICBhcHBlbmRD
aGFyYWN0ZXIoJyEnKTsKLQotICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKLX0KLQotY29uc3Qg
Y2hhciogQVJNdjdET3Bjb2RlU3RvcmVTaW5nbGVSZWdpc3Rlcjo6Zm9ybWF0KCkKLXsKLSAgICBh
cHBlbmRJbnN0cnVjdGlvbk5hbWUob3BOYW1lKCkpOwotICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShy
dCgpKTsKLSAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICBhcHBlbmRDaGFyYWN0ZXIoJ1snKTsK
LSAgICBhcHBlbmRSZWdpc3Rlck5hbWUocm4oKSk7Ci0gICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0g
ICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJtKCkpOwotICAgIGlmIChpbW1lZGlhdGUyKCkpIHsKLSAg
ICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAgIGFwcGVuZFN0cmluZygibHNsICIpOwot
ICAgICAgICBhcHBlbmRVbnNpZ25lZEltbWVkaWF0ZShpbW1lZGlhdGUyKCkpOwotICAgIH0KLSAg
ICBhcHBlbmRDaGFyYWN0ZXIoJ10nKTsKLQotICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKLX0K
LQotY29uc3QgY2hhciogQVJNdjdET3Bjb2RlVkNNUDo6Zm9ybWF0KCkKLXsKLSAgICBidWZmZXJQ
cmludGYoIiAgIHZjbXAiKTsKLQotICAgIGlmIChlQml0KCkpCi0gICAgICAgIGFwcGVuZENoYXJh
Y3RlcignZScpOyAvLyBSYWlzZSBleGNlcHRpb24gb24gcU5hTgotCi0gICAgaWYgKGNvbmRpdGlv
bigpICE9IDB4ZSkKLSAgICAgICAgYXBwZW5kU3RyaW5nKGNvbmRpdGlvbk5hbWUoY29uZGl0aW9u
KCkpKTsKLQotICAgIGFwcGVuZENoYXJhY3RlcignLicpOwotICAgIGFwcGVuZFN0cmluZyhzekJp
dCgpID8gImY2NCIgOiAiZjMyIik7Ci0gICAgYXBwZW5kQ2hhcmFjdGVyKCcgJyk7Ci0gICAgaWYg
KHN6Qml0KCkpIHsKLSAgICAgICAgYXBwZW5kRlBSZWdpc3Rlck5hbWUoJ2QnLCAoZEJpdCgpIDw8
IDQpIHwgdmQoKSk7Ci0gICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAgICAgICBhcHBlbmRG
UFJlZ2lzdGVyTmFtZSgnZCcsIChtQml0KCkgPDwgNCkgfCB2bSgpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBhcHBlbmRGUFJlZ2lzdGVyTmFtZSgncycsICh2ZCgpIDw8IDEpIHwgZEJpdCgpKTsK
LSAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAgIGFwcGVuZEZQUmVnaXN0ZXJOYW1l
KCdzJywgKHZtKCkgPDwgMSkgfCBtQml0KCkpOwotICAgIH0KLQotICAgIHJldHVybiBtX2Zvcm1h
dEJ1ZmZlcjsKLX0KLQotY29uc3QgY2hhciogQVJNdjdET3Bjb2RlVkNWVEJldHdlZW5GUEFuZElu
dDo6Zm9ybWF0KCkKLXsKLSAgICBidWZmZXJQcmludGYoIiAgIHZjdnQiKTsKLSAgICBib29sIGNv
bnZlcnRUb0ludGVnZXIgPSBvcDIoKSAmIDB4NDsKLQotICAgIGlmIChjb252ZXJ0VG9JbnRlZ2Vy
KSB7Ci0gICAgICAgIGlmICghb3AoKSkKLSAgICAgICAgICAgIGFwcGVuZENoYXJhY3Rlcigncicp
OyAvLyBSb3VuZCB1c2luZyBtb2RlIGluIEZQU0NSCi0gICAgICAgIGlmIChjb25kaXRpb24oKSAh
PSAweGUpCi0gICAgICAgICAgICBhcHBlbmRTdHJpbmcoY29uZGl0aW9uTmFtZShjb25kaXRpb24o
KSkpOwotICAgICAgICBhcHBlbmRDaGFyYWN0ZXIoJy4nKTsKLSAgICAgICAgYXBwZW5kQ2hhcmFj
dGVyKChvcDIoKSAmIDEpID8gJ3MnIDogJ3UnKTsKLSAgICAgICAgYXBwZW5kU3RyaW5nKCIzMi5m
Iik7Ci0gICAgICAgIGFwcGVuZFN0cmluZyhzekJpdCgpID8gIjY0IiA6ICIzMiIpOwotICAgICAg
ICBhcHBlbmRDaGFyYWN0ZXIoJyAnKTsKLSAgICAgICAgYXBwZW5kRlBSZWdpc3Rlck5hbWUoJ3Mn
LCAodmQoKSA8PCAxKSB8IGRCaXQoKSk7Ci0gICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOwotICAg
ICAgICBpZiAoc3pCaXQoKSkKLSAgICAgICAgICAgIGFwcGVuZEZQUmVnaXN0ZXJOYW1lKCdkJywg
KG1CaXQoKSA8PCA0KSB8IHZtKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBlbmRG
UFJlZ2lzdGVyTmFtZSgncycsICh2bSgpIDw8IDEpIHwgbUJpdCgpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoY29uZGl0aW9uKCkgIT0gMHhlKQotICAgICAgICAgICAgYXBwZW5kU3RyaW5n
KGNvbmRpdGlvbk5hbWUoY29uZGl0aW9uKCkpKTsKLSAgICAgICAgYXBwZW5kQ2hhcmFjdGVyKCcu
Jyk7Ci0gICAgICAgIGFwcGVuZFN0cmluZyhzekJpdCgpID8gImY2NC4iIDogImYzMi4iKTsKLSAg
ICAgICAgYXBwZW5kU3RyaW5nKG9wKCkgPyAiczMyIiA6ICJ1MzIiKTsKLSAgICAgICAgYXBwZW5k
Q2hhcmFjdGVyKCcgJyk7Ci0gICAgICAgIGlmIChzekJpdCgpKQotICAgICAgICAgICAgYXBwZW5k
RlBSZWdpc3Rlck5hbWUoJ2QnLCAoZEJpdCgpIDw8IDQpIHwgdmQoKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGFwcGVuZEZQUmVnaXN0ZXJOYW1lKCdzJywgKHZkKCkgPDwgMSkgfCBkQml0
KCkpOwotICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAgYXBwZW5kRlBSZWdpc3Rl
ck5hbWUoJ3MnLCAodm0oKSA8PCAxKSB8IG1CaXQoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1f
Zm9ybWF0QnVmZmVyOwotfQotCi1jb25zdCBjaGFyKiBBUk12N0RPcGNvZGVWTERSU1RSOjpmb3Jt
YXQoKQotewotICAgIGlmIChjb25kaXRpb24oKSAhPSAweGUpCi0gICAgICAgIGJ1ZmZlclByaW50
ZigiICAgJXMlLTMuM3MiLCBvcE5hbWUoKSwgY29uZGl0aW9uTmFtZShjb25kaXRpb24oKSkpOwot
ICAgIGVsc2UKLSAgICAgICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKG9wTmFtZSgpKTsKLQotICAg
IGFwcGVuZEZQUmVnaXN0ZXJOYW1lKGRvdWJsZVJlZygpID8gJ2QnIDogJ3MnLCB2ZCgpKTsKLSAg
ICBhcHBlbmRTZXBhcmF0b3IoKTsKLQotICAgIGludCBpbW1lZGlhdGUgPSBpbW1lZGlhdGU4KCkg
KiA0OwotCi0gICAgaWYgKCF1Qml0KCkpCi0gICAgICAgIGltbWVkaWF0ZSA9IC1pbW1lZGlhdGU7
Ci0KLSAgICBhcHBlbmRDaGFyYWN0ZXIoJ1snKTsKLQotICAgIGlmIChybigpID09IFJlZ1BDKQot
ICAgICAgICBhcHBlbmRQQ1JlbGF0aXZlT2Zmc2V0KGltbWVkaWF0ZSk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybigpKTsKLQotICAgICAgICBpZiAoaW1tZWRpYXRl
KSB7Ci0gICAgICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAgICAgIGFwcGVuZFNp
Z25lZEltbWVkaWF0ZShpbW1lZGlhdGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXBwZW5k
Q2hhcmFjdGVyKCddJyk7Ci0KLSAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Ci19Ci0KLWNvbnN0
IGNoYXIqIEFSTXY3RE9wY29kZVZNT1ZEb3VibGVQcmVjaXNpb246OmZvcm1hdCgpCi17Ci0gICAg
YXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKCJ2bW92Iik7Ci0gICAgaWYgKG9wKCkpIHsKLSAgICAgICAg
YXBwZW5kUmVnaXN0ZXJOYW1lKHJ0KCkpOwotICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAg
ICAgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJ0MigpKTsKLSAgICAgICAgYXBwZW5kU2VwYXJhdG9y
KCk7Ci0gICAgfQotCi0gICAgYXBwZW5kRlBSZWdpc3Rlck5hbWUoJ2QnLCB2bSgpKTsKLQotICAg
IGlmICghb3AoKSkgewotICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAgYXBwZW5k
UmVnaXN0ZXJOYW1lKHJ0KCkpOwotICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAg
YXBwZW5kUmVnaXN0ZXJOYW1lKHJ0MigpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9mb3JtYXRC
dWZmZXI7Ci19Ci0KLWNvbnN0IGNoYXIqIEFSTXY3RE9wY29kZVZNT1ZTaW5nbGVQcmVjaXNpb246
OmZvcm1hdCgpCi17Ci0gICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKCJ2bW92Iik7Ci0gICAgaWYg
KG9wKCkpIHsKLSAgICAgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJ0KCkpOwotICAgICAgICBhcHBl
bmRTZXBhcmF0b3IoKTsKLSAgICAgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJ0MigpKTsKLSAgICAg
ICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgfQotCi0gICAgYXBwZW5kRlBSZWdpc3Rlck5hbWUo
J3MnLCB2bSgpKTsKLSAgICBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICBhcHBlbmRGUFJlZ2lzdGVy
TmFtZSgncycsICh2bSgpICsgMSkgJSAzMik7Ci0KLSAgICBpZiAoIW9wKCkpIHsKLSAgICAgICAg
YXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShydCgpKTsKLSAg
ICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShydDIo
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwotfQotCi1jb25zdCBjaGFy
KiBBUk12N0RPcGNvZGVWTVNSOjpmb3JtYXQoKQotewotICAgIGFwcGVuZEluc3RydWN0aW9uTmFt
ZSgidm1ycyIpOwotICAgIGlmIChvcEwoKSkgewotICAgICAgICBpZiAocnQoKSA9PSAweGYpCi0g
ICAgICAgICAgICBhcHBlbmRTdHJpbmcoImFwc3JfbnpjdiIpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBhcHBlbmRSZWdpc3Rlck5hbWUocnQoKSk7Ci0gICAgICAgIGFwcGVuZFNlcGFyYXRv
cigpOwotICAgIH0KLQotICAgIGFwcGVuZFN0cmluZygiZnBzY3IiKTsKLQotICAgIGlmICghb3BM
KCkpIHsKLSAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAgIGFwcGVuZFJlZ2lzdGVy
TmFtZShydCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Ci19Ci0KLX0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcgotCi0jZW5kaWYgLy8gI2lmIFVT
RShBUk1WN19ESVNBU1NFTUJMRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGlzYXNzZW1ibGVyL0FSTXY3L0FSTXY3RE9wY29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Rpc2Fzc2VtYmxlci9BUk12Ny9BUk12N0RPcGNvZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMzY1OTdhZjVkOGM0ZGQ4NTFmNWM3OGI2NzMxYzBmZWViYjQwYzBiNy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGlzYXNzZW1ibGVyL0FSTXY3L0FSTXY3RE9wY29kZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTIzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoQVJNVjdfRElTQVNTRU1CTEVSKQotCi0jaW5j
bHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBBUk12N0Rpc2Fzc2VtYmxlciB7Ci0KLWNsYXNzIEFSTXY3RE9wY29k
ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgaW5pdCgpOwotCi0gICAgQVJNdjdET3Bjb2Rl
KCkKLSAgICAgICAgOiBtX29wY29kZSgwKQotICAgICAgICAsIG1fYnVmZmVyT2Zmc2V0KDApCi0g
ICAgewotICAgICAgICBpbml0KCk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDQ7IGkrKykKLSAgICAgICAgICAgIG1faWZUaGVuQ29uZGl0aW9uc1tpXSA9IENvbmROb25lOwot
Ci0gICAgICAgIGVuZElUQmxvY2soKTsKLQotICAgICAgICBtX2Zvcm1hdEJ1ZmZlclswXSA9ICdc
MCc7Ci0gICAgfQotCi0gICAgY29uc3QgY2hhciogZGlzYXNzZW1ibGUodWludDE2X3QqJiBjdXJy
ZW50UEMpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgY29uc3QgdW5zaWduZWQgUmVnU1AgPSAweGQ7Ci0g
ICAgY29uc3QgdW5zaWduZWQgUmVnTFIgPSAweGU7Ci0gICAgY29uc3QgdW5zaWduZWQgUmVnUEMg
PSAweGY7Ci0KLSAgICB2b2lkIGZldGNoT3Bjb2RlKHVpbnQxNl90KiYpOwotICAgIGJvb2wgaXMz
MkJpdEluc3RydWN0aW9uKCkgeyByZXR1cm4gKG1fb3Bjb2RlICYgMHhmZmZmZjgwMCkgPiAweGUw
MDA7IH0KLSAgICBib29sIGlzRlBJbnN0cnVjdGlvbigpIHsgcmV0dXJuIChtX29wY29kZSAmIDB4
ZmMwMDBlMDApID09IDB4ZWMwMDBhMDA7IH0KLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBzX2NvbmRpdGlvbk5hbWVzWzE2XTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc19z
aGlmdE5hbWVzWzRdOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX29wdGlvbk5hbWVb
OF07Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfc3BlY2lhbFJlZ2lzdGVyTmFtZXNb
M107Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uZGl0aW9uTmFtZSh1bnNpZ25lZCBjb25k
aXRpb24pIHsgcmV0dXJuIHNfY29uZGl0aW9uTmFtZXNbY29uZGl0aW9uICYgMHhmXTsgfQotICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBzaGlmdE5hbWUodW5zaWduZWQgc2hpZnRWYWx1ZSkgeyByZXR1
cm4gc19zaGlmdE5hbWVzW3NoaWZ0VmFsdWUgJiAweDNdOyB9Ci0KLSAgICBib29sIGluSVRCbG9j
aygpIHsgcmV0dXJuIG1fSVRDb25kaXRpb25JbmRleCA8IG1fSVRCbG9ja3NpemU7IH0KLSAgICBi
b29sIHN0YXJ0aW5nSVRCbG9jaygpIHsgcmV0dXJuIG1fSVRDb25kaXRpb25JbmRleCA9PSBtX0lU
QmxvY2tzaXplICsgMTsgfQotCi0gICAgdm9pZCBzdGFydElUQmxvY2sodW5zaWduZWQsIHVuc2ln
bmVkKTsKLSAgICB2b2lkIHNhdmVJVENvbmRpdGlvbkF0KHVuc2lnbmVkLCB1bnNpZ25lZCk7Ci0g
ICAgdm9pZCBlbmRJVEJsb2NrKCkKLSAgICB7Ci0gICAgICAgIG1fY3VycmVudElUQ29uZGl0aW9u
ID0gQ29uZE5vbmU7Ci0gICAgICAgIG1fSVRDb25kaXRpb25JbmRleCA9IDA7Ci0gICAgICAgIG1f
SVRCbG9ja3NpemUgPSAwOwotICAgIH0KLQotICAgIHZvaWQgYnVmZmVyUHJpbnRmKGNvbnN0IGNo
YXIqIGZvcm1hdCwgLi4uKSBXVEZfQVRUUklCVVRFX1BSSU5URigyLCAzKTsKLSAgICB2b2lkIGFw
cGVuZEluc3RydWN0aW9uTmFtZShjb25zdCBjaGFyKiwgYm9vbCBhZGRTID0gZmFsc2UpOwotCi0g
ICAgdm9pZCBhcHBlbmRJbnN0cnVjdGlvbk5hbWVOb0lUQmxvY2soY29uc3QgY2hhciogaW5zdHJ1
Y3Rpb25OYW1lKQotICAgIHsKLSAgICAgICAgYnVmZmVyUHJpbnRmKCIgICAlLTcuN3MiLCBpbnN0
cnVjdGlvbk5hbWUpOwotICAgIH0KLQotICAgIHZvaWQgYXBwZW5kUmVnaXN0ZXJOYW1lKHVuc2ln
bmVkKTsKLSAgICB2b2lkIGFwcGVuZFJlZ2lzdGVyTGlzdCh1bnNpZ25lZCk7Ci0gICAgdm9pZCBh
cHBlbmRGUFJlZ2lzdGVyTmFtZShjaGFyLCB1bnNpZ25lZCk7Ci0KLSAgICB2b2lkIGFwcGVuZFNl
cGFyYXRvcigpCi0gICAgewotICAgICAgICBidWZmZXJQcmludGYoIiwgIik7Ci0gICAgfQotCi0g
ICAgdm9pZCBhcHBlbmRDaGFyYWN0ZXIoY29uc3QgY2hhciBjKQotICAgIHsKLSAgICAgICAgYnVm
ZmVyUHJpbnRmKCIlYyIsIGMpOwotICAgIH0KLQotICAgIHZvaWQgYXBwZW5kU3RyaW5nKGNvbnN0
IGNoYXIqIHN0cmluZykKLSAgICB7Ci0gICAgICAgIGJ1ZmZlclByaW50ZigiJXMiLCBzdHJpbmcp
OwotICAgIH0KLQotICAgIHZvaWQgYXBwZW5kU2hpZnRUeXBlKHVuc2lnbmVkIHNoaWZ0VmFsdWUp
Ci0gICAgewotICAgICAgICBidWZmZXJQcmludGYoIiVzICIsIHNoaWZ0TmFtZShzaGlmdFZhbHVl
KSk7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBlbmRTaWduZWRJbW1lZGlhdGUoaW50IGltbWVkaWF0
ZSkKLSAgICB7Ci0gICAgICAgIGJ1ZmZlclByaW50ZigiIyVkIiwgaW1tZWRpYXRlKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGFwcGVuZFVuc2lnbmVkSW1tZWRpYXRlKHVuc2lnbmVkIGltbWVkaWF0ZSkK
LSAgICB7Ci0gICAgICAgIGJ1ZmZlclByaW50ZigiIyV1IiwgaW1tZWRpYXRlKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGFwcGVuZFBDUmVsYXRpdmVPZmZzZXQoaW50MzJfdCBpbW1lZGlhdGUpCi0gICAg
ewotICAgICAgICBidWZmZXJQcmludGYoIjB4JXgiLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90
PihtX2N1cnJlbnRQQyArIGltbWVkaWF0ZSkpOwotICAgIH0KLQotICAgIHZvaWQgYXBwZW5kU2hp
ZnRBbW91bnQodW5zaWduZWQgYW1vdW50KQotICAgIHsKLSAgICAgICAgYnVmZmVyUHJpbnRmKCJs
c2wgIyV1IiwgMTYgKiBhbW91bnQpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBpbnQgYnVm
ZmVyU2l6ZSA9IDgxOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIENvbmROb25lID0g
MHhlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBNYXhJVEJsb2NrU2l6ZSA9IDQ7Ci0KLSAg
ICBjaGFyIG1fZm9ybWF0QnVmZmVyW2J1ZmZlclNpemVdOwotICAgIHVuc2lnbmVkIGNoYXIgbV9p
ZlRoZW5Db25kaXRpb25zW01heElUQmxvY2tTaXplXTsKLSAgICB1aW50MTZfdCogbV9jdXJyZW50
UEM7Ci0gICAgdWludDMyX3QgbV9vcGNvZGU7Ci0gICAgaW50IG1fYnVmZmVyT2Zmc2V0OwotICAg
IGludCBtX2N1cnJlbnRJVENvbmRpdGlvbjsKLSAgICB1bnNpZ25lZCBtX0lUQ29uZGl0aW9uSW5k
ZXg7Ci0gICAgdW5zaWduZWQgbV9JVEJsb2Nrc2l6ZTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMg
Ym9vbCBzX2luaXRpYWxpemVkOwotfTsKLQotI2RlZmluZSBERUZJTkVfU1RBVElDX0ZPUk1BVDE2
KGtsYXNzLCB0aGlzT2JqKSBcCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZvcm1hdChBUk12N0Qx
NkJpdE9wY29kZSogdGhpc09iaikgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwga2xhc3MgKj4o
dGhpc09iaiktPmZvcm1hdCgpOyB9Ci0KLWNsYXNzIEFSTXY3RDE2Qml0T3Bjb2RlIDogcHVibGlj
IEFSTXY3RE9wY29kZSB7Ci1wcml2YXRlOgotICAgIGNsYXNzIE9wY29kZUdyb3VwIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIE9wY29kZUdyb3VwKHVpbnQxNl90IG9wY29kZU1hc2ssIHVpbnQxNl90
IG9wY29kZVBhdHRlcm4sIGNvbnN0IGNoYXIqICgqZm9ybWF0KShBUk12N0QxNkJpdE9wY29kZSop
KQotICAgICAgICAgICAgOiBtX29wY29kZU1hc2sob3Bjb2RlTWFzaykKLSAgICAgICAgICAgICwg
bV9vcGNvZGVQYXR0ZXJuKG9wY29kZVBhdHRlcm4pCi0gICAgICAgICAgICAsIG1fZm9ybWF0KGZv
cm1hdCkKLSAgICAgICAgICAgICwgbV9uZXh0KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZvaWQgc2V0TmV4dChPcGNvZGVHcm91cCogbmV4dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgbV9uZXh0ID0gbmV4dDsKLSAgICAgICAgfQotCi0gICAgICAgIE9wY29kZUdyb3VwKiBu
ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fbmV4dDsKLSAgICAgICAgfQot
Ci0gICAgICAgIGJvb2wgbWF0Y2hlcyh1aW50MTZfdCBvcGNvZGUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiAob3Bjb2RlICYgbV9vcGNvZGVNYXNrKSA9PSBtX29wY29kZVBhdHRlcm47
Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBjaGFyKiBmb3JtYXQoQVJNdjdEMTZCaXRPcGNv
ZGUqIHRoaXNPYmopCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2Zvcm1hdCh0aGlz
T2JqKTsKLSAgICAgICAgfQotCi0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgb3Bjb2RlVGFibGVTaXplID0gMzI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBvcGNvZGVUYWJsZU1hc2sgPSBvcGNvZGVUYWJsZVNpemUtMTsKLQotICAgICAgICAvLyBwcml2
YXRlOgotICAgICAgICB1aW50MTZfdCBtX29wY29kZU1hc2s7Ci0gICAgICAgIHVpbnQxNl90IG1f
b3Bjb2RlUGF0dGVybjsKLSAgICAgICAgY29uc3QgY2hhciogKCptX2Zvcm1hdCkoQVJNdjdEMTZC
aXRPcGNvZGUqKTsKLSAgICAgICAgT3Bjb2RlR3JvdXAqIG1fbmV4dDsKLSAgICB9OwotCi1wdWJs
aWM6Ci0gICAgc3RhdGljIHZvaWQgaW5pdCgpOwotCi0gICAgY29uc3QgY2hhciogZGVmYXVsdEZv
cm1hdCgpOwotICAgIGNvbnN0IGNoYXIqIGRvRGlzYXNzZW1ibGUoKTsKLQotcHJvdGVjdGVkOgot
ICAgIHVuc2lnbmVkIHJtKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDMpICYgMHg3OyB9Ci0gICAg
dW5zaWduZWQgcmQoKSB7IHJldHVybiBtX29wY29kZSAmIDB4NzsgfQotICAgIHVuc2lnbmVkIG9w
Y29kZUdyb3VwTnVtYmVyKHVuc2lnbmVkIG9wY29kZSkgeyByZXR1cm4gKG9wY29kZSA+PiAxMSkg
JiBPcGNvZGVHcm91cDo6b3Bjb2RlVGFibGVNYXNrOyB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGlj
IE9wY29kZUdyb3VwKiBvcGNvZGVUYWJsZVtPcGNvZGVHcm91cDo6b3Bjb2RlVGFibGVTaXplXTsK
LX07Ci0KLWNsYXNzIEFSTXY3RE9wY29kZUFkZFJlZ2lzdGVyVDIgOiBwdWJsaWMgQVJNdjdEMTZC
aXRPcGNvZGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBzX21hc2sgPSAw
eGZmMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfcGF0dGVybiA9IDB4NDQwMDsKLQot
ICAgIERFRklORV9TVEFUSUNfRk9STUFUMTYoQVJNdjdET3Bjb2RlQWRkUmVnaXN0ZXJUMiwgdGhp
c09iaik7Ci0KLXByb3RlY3RlZDoKLSAgICBjb25zdCBjaGFyKiBmb3JtYXQoKTsKLQotICAgIHVu
c2lnbmVkIHJkbigpIHsgcmV0dXJuICgobV9vcGNvZGUgPj4gNCkgJiAweDgpIHwgKG1fb3Bjb2Rl
ICYgMHg3KTsgfQotICAgIHVuc2lnbmVkIHJtKCkgeyByZXR1cm4gKChtX29wY29kZSA+PiAzKSAm
IDB4Zik7IH0KLX07Ci0KLWNsYXNzIEFSTXY3RE9wY29kZUFkZFNQUGx1c0ltbWVkaWF0ZSA6IHB1
YmxpYyBBUk12N0QxNkJpdE9wY29kZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQx
Nl90IHNfbWFzayA9IDB4ZjgwMDsKLSAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19wYXR0ZXJu
ID0gMHhjODAwOwotCi0gICAgREVGSU5FX1NUQVRJQ19GT1JNQVQxNihBUk12N0RPcGNvZGVBZGRT
UFBsdXNJbW1lZGlhdGUsIHRoaXNPYmopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgY29uc3QgY2hhciog
Zm9ybWF0KCk7Ci0KLSAgICB1bnNpZ25lZCByZCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiA4KSAm
IDB4NzsgfQotICAgIHVuc2lnbmVkIGltbWVkaWF0ZTgoKSB7IHJldHVybiBtX29wY29kZSAmIDB4
MGZmOyB9Ci19OwotCi1jbGFzcyBBUk12N0RPcGNvZGVBZGRTdWJ0cmFjdCA6IHB1YmxpYyBBUk12
N0QxNkJpdE9wY29kZSB7Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IHNfb3BOYW1lc1syXTsKLX07Ci0KLWNsYXNzIEFSTXY3RE9wY29kZUFkZFN1YnRyYWN0VDEgOiBw
dWJsaWMgQVJNdjdET3Bjb2RlQWRkU3VidHJhY3QgewotcHVibGljOgotICAgIHN0YXRpYyBjb25z
dCB1aW50MTZfdCBzX21hc2sgPSAweGZjMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNf
cGF0dGVybiA9IDB4MTgwMDsKLQotICAgIERFRklORV9TVEFUSUNfRk9STUFUMTYoQVJNdjdET3Bj
b2RlQWRkU3VidHJhY3RUMSwgdGhpc09iaik7Ci0KLXByb3RlY3RlZDoKLSAgICBjb25zdCBjaGFy
KiBmb3JtYXQoKTsKLQotICAgIGNvbnN0IGNoYXIqIG9wTmFtZSgpIHsgcmV0dXJuIHNfb3BOYW1l
c1tvcCgpXTsgfQotCi0gICAgdW5zaWduZWQgb3AoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gOSkg
JiAweDE7IH0KLSAgICB1bnNpZ25lZCBybSgpIHsgcmV0dXJuIChtX29wY29kZSA+PiA2KSAmIDB4
NzsgfQotICAgIHVuc2lnbmVkIHJuKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDMpICYgMHg3OyB9
Ci19OwotCi1jbGFzcyBBUk12N0RPcGNvZGVBZGRTdWJ0cmFjdEltbWVkaWF0ZTMgOiBwdWJsaWMg
QVJNdjdET3Bjb2RlQWRkU3VidHJhY3QgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1aW50
MTZfdCBzX21hc2sgPSAweGZjMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfcGF0dGVy
biA9IDB4MWMwMDsKLQotICAgIERFRklORV9TVEFUSUNfRk9STUFUMTYoQVJNdjdET3Bjb2RlQWRk
U3VidHJhY3RJbW1lZGlhdGUzLCB0aGlzT2JqKTsKLQotcHJvdGVjdGVkOgotICAgIGNvbnN0IGNo
YXIqIGZvcm1hdCgpOwotCi0gICAgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gc19vcE5h
bWVzW29wKCldOyB9Ci0KLSAgICB1bnNpZ25lZCBvcCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiA5
KSAmIDB4MTsgfQotICAgIHVuc2lnbmVkIGltbWVkaWF0ZTMoKSB7IHJldHVybiAobV9vcGNvZGUg
Pj4gNikgJiAweDc7IH0KLSAgICB1bnNpZ25lZCBybigpIHsgcmV0dXJuIChtX29wY29kZSA+PiAz
KSAmIDB4NzsgfQotfTsKLQotY2xhc3MgQVJNdjdET3Bjb2RlQWRkU3VidHJhY3RJbW1lZGlhdGU4
IDogcHVibGljIEFSTXY3RE9wY29kZUFkZFN1YnRyYWN0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
Y29uc3QgdWludDE2X3Qgc19tYXNrID0gMHhmMDAwOwotICAgIHN0YXRpYyBjb25zdCB1aW50MTZf
dCBzX3BhdHRlcm4gPSAweDMwMDA7Ci0KLSAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDE2KEFSTXY3
RE9wY29kZUFkZFN1YnRyYWN0SW1tZWRpYXRlOCwgdGhpc09iaik7Ci0KLXByb3RlY3RlZDoKLSAg
ICBjb25zdCBjaGFyKiBmb3JtYXQoKTsKLQotICAgIGNvbnN0IGNoYXIqIG9wTmFtZSgpIHsgcmV0
dXJuIHNfb3BOYW1lc1tvcCgpXTsgfQotCi0gICAgdW5zaWduZWQgb3AoKSB7IHJldHVybiAobV9v
cGNvZGUgPj4gMTEpICYgMHgxOyB9Ci0gICAgdW5zaWduZWQgcmRuKCkgeyByZXR1cm4gKG1fb3Bj
b2RlID4+IDgpICYgMHg3OyB9Ci0gICAgdW5zaWduZWQgaW1tZWRpYXRlOCgpIHsgcmV0dXJuIG1f
b3Bjb2RlICYgMHhmZjsgfQotfTsKLQotY2xhc3MgQVJNdjdET3Bjb2RlQnJhbmNoQ29uZGl0aW9u
YWxUMSA6IHB1YmxpYyBBUk12N0QxNkJpdE9wY29kZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNv
bnN0IHVpbnQxNl90IHNfbWFzayA9IDB4ZjAwMDsKLSAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qg
c19wYXR0ZXJuID0gMHhkMDAwOwotCi0gICAgREVGSU5FX1NUQVRJQ19GT1JNQVQxNihBUk12N0RP
cGNvZGVCcmFuY2hDb25kaXRpb25hbFQxLCB0aGlzT2JqKTsKLQotcHJvdGVjdGVkOgotICAgIGNv
bnN0IGNoYXIqIGZvcm1hdCgpOwotCi0gICAgdW5zaWduZWQgY29uZGl0aW9uKCkgeyByZXR1cm4g
KG1fb3Bjb2RlID4+IDgpICYgMHhmOyB9Ci0gICAgaW50IG9mZnNldCgpIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGludD4obV9vcGNvZGUgJiAweGZmKTsgfQotfTsKLQotY2xhc3MgQVJNdjdET3Bjb2Rl
QnJhbmNoRXhjaGFuZ2VUMSA6IHB1YmxpYyBBUk12N0QxNkJpdE9wY29kZSB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfbWFzayA9IDB4ZmYwMDsKLSAgICBzdGF0aWMgY29u
c3QgdWludDE2X3Qgc19wYXR0ZXJuID0gMHg0NzAwOwotCi0gICAgREVGSU5FX1NUQVRJQ19GT1JN
QVQxNihBUk12N0RPcGNvZGVCcmFuY2hFeGNoYW5nZVQxLCB0aGlzT2JqKTsKLQotcHJvdGVjdGVk
OgotICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOwotCi0gICAgY29uc3QgY2hhciogb3BOYW1lKCkg
eyByZXR1cm4gKG1fb3Bjb2RlICYgMHg4MCkgPyAiYmx4IiA6ICJieCI7IH0KLSAgICB1bnNpZ25l
ZCBybSgpIHsgcmV0dXJuICgobV9vcGNvZGUgPj4gMykgJiAweGYpOyB9Ci19OwotCi1jbGFzcyBB
Uk12N0RPcGNvZGVCcmFuY2hUMiA6IHB1YmxpYyBBUk12N0QxNkJpdE9wY29kZSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfbWFzayA9IDB4ZjgwMDsKLSAgICBzdGF0aWMg
Y29uc3QgdWludDE2X3Qgc19wYXR0ZXJuID0gMHhlMDAwOwotCi0gICAgREVGSU5FX1NUQVRJQ19G
T1JNQVQxNihBUk12N0RPcGNvZGVCcmFuY2hUMiwgdGhpc09iaik7Ci0KLXByb3RlY3RlZDoKLSAg
ICBjb25zdCBjaGFyKiBmb3JtYXQoKTsKLQotICAgIGludCBpbW1lZGlhdGUxMSgpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4obV9vcGNvZGUgJiAweDdmZik7IH0KLX07Ci0KLWNsYXNzIEFSTXY3
RE9wY29kZUNvbXBhcmVJbW1lZGlhdGVUMSA6IHB1YmxpYyBBUk12N0QxNkJpdE9wY29kZSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfbWFzayA9IDB4ZjgwMDsKLSAgICBz
dGF0aWMgY29uc3QgdWludDE2X3Qgc19wYXR0ZXJuID0gMHgyODAwOwotCi0gICAgREVGSU5FX1NU
QVRJQ19GT1JNQVQxNihBUk12N0RPcGNvZGVDb21wYXJlSW1tZWRpYXRlVDEsIHRoaXNPYmopOwot
Ci1wcm90ZWN0ZWQ6Ci0gICAgY29uc3QgY2hhciogZm9ybWF0KCk7Ci0KLSAgICB1bnNpZ25lZCBy
bigpIHsgcmV0dXJuIChtX29wY29kZSA+PiA4KSAmIDB4MzsgfQotICAgIHVuc2lnbmVkIGltbWVk
aWF0ZTgoKSB7IHJldHVybiBtX29wY29kZSAmIDB4ZmY7IH0KLX07Ci0KLWNsYXNzIEFSTXY3RE9w
Y29kZUNvbXBhcmVSZWdpc3RlclQxIDogcHVibGljIEFSTXY3RDE2Qml0T3Bjb2RlIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19tYXNrID0gMHhmZmMwOwotICAgIHN0YXRp
YyBjb25zdCB1aW50MTZfdCBzX3BhdHRlcm4gPSAweDQyODA7Ci0KLSAgICBERUZJTkVfU1RBVElD
X0ZPUk1BVDE2KEFSTXY3RE9wY29kZUNvbXBhcmVSZWdpc3RlclQxLCB0aGlzT2JqKTsKLQotcHJv
dGVjdGVkOgotICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOwotCi0gICAgdW5zaWduZWQgcm4oKSB7
IHJldHVybiBtX29wY29kZSAmIDB4NzsgfQotfTsKLQotY2xhc3MgQVJNdjdET3Bjb2RlQ29tcGFy
ZVJlZ2lzdGVyVDIgOiBwdWJsaWMgQVJNdjdEMTZCaXRPcGNvZGUgewotcHVibGljOgotICAgIHN0
YXRpYyBjb25zdCB1aW50MTZfdCBzX21hc2sgPSAweGZmMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVp
bnQxNl90IHNfcGF0dGVybiA9IDB4NDUwMDsKLQotICAgIERFRklORV9TVEFUSUNfRk9STUFUMTYo
QVJNdjdET3Bjb2RlQ29tcGFyZVJlZ2lzdGVyVDIsIHRoaXNPYmopOwotCi1wcm90ZWN0ZWQ6Ci0g
ICAgY29uc3QgY2hhciogZm9ybWF0KCk7Ci0KLSAgICB1bnNpZ25lZCBybigpIHsgcmV0dXJuICgo
bV9vcGNvZGUgPj4gNCkgJiAweDgpIHwgKG1fb3Bjb2RlICYgMHg3KTsgfQotICAgIHVuc2lnbmVk
IHJtKCkgeyByZXR1cm4gKChtX29wY29kZSA+PiAzKSAmIDB4Zik7IH0KLX07Ci0KLWNsYXNzIEFS
TXY3RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnaXN0ZXJUMSA6IHB1YmxpYyBBUk12N0QxNkJpdE9w
Y29kZSB7Ci1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX29wTmFtZXNb
MTZdOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfbWFzayA9IDB4ZmMw
MDsKLSAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19wYXR0ZXJuID0gMHg0MDAwOwotCi0gICAg
REVGSU5FX1NUQVRJQ19GT1JNQVQxNihBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ2lzdGVy
VDEsIHRoaXNPYmopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgY29uc3QgY2hhciogZm9ybWF0KCk7Ci0K
LSAgICBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiBzX29wTmFtZXNbb3AoKV07IH0KLQot
ICAgIHVuc2lnbmVkIG9wKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDYpICYgMHhmOyB9Ci0KLSAg
ICB1bnNpZ25lZCBybSgpIHsgcmV0dXJuIChtX29wY29kZSA+PiAzKSAmIDB4NzsgfQotICAgIHVu
c2lnbmVkIHJkbigpIHsgcmV0dXJuIG1fb3Bjb2RlICYgMHg3OyB9Ci19OwotCi1jbGFzcyBBUk12
N0RPcGNvZGVHZW5lcmF0ZVBDUmVsYXRpdmVBZGRyZXNzIDogcHVibGljIEFSTXY3RDE2Qml0T3Bj
b2RlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19tYXNrID0gMHhmODAw
OwotICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBzX3BhdHRlcm4gPSAweGEwMDA7Ci0KLSAgICBE
RUZJTkVfU1RBVElDX0ZPUk1BVDE2KEFSTXY3RE9wY29kZUdlbmVyYXRlUENSZWxhdGl2ZUFkZHJl
c3MsIHRoaXNPYmopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgY29uc3QgY2hhciogZm9ybWF0KCk7Ci0K
LSAgICB1bnNpZ25lZCByZCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiA4KSAmIDB4NzsgfQotICAg
IHVuc2lnbmVkIGltbWVkaWF0ZTgoKSB7IHJldHVybiBtX29wY29kZSAmIDB4MGZmOyB9Ci19Owot
Ci1jbGFzcyBBUk12N0RPcGNvZGVMb2FkRnJvbUxpdGVyYWxQb29sIDogcHVibGljIEFSTXY3RDE2
Qml0T3Bjb2RlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19tYXNrID0g
MHhmODAwOwotICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBzX3BhdHRlcm4gPSAweDQ4MDA7Ci0K
LSAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDE2KEFSTXY3RE9wY29kZUxvYWRGcm9tTGl0ZXJhbFBv
b2wsIHRoaXNPYmopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgY29uc3QgY2hhciogZm9ybWF0KCk7Ci0K
LSAgICB1bnNpZ25lZCBydCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiA4KSAmIDB4NzsgfQotICAg
IHVuc2lnbmVkIGltbWVkaWF0ZTgoKSB7IHJldHVybiBtX29wY29kZSAmIDB4MGZmOyB9Ci19Owot
Ci1jbGFzcyBBUk12N0RPcGNvZGVMb2FkU3RvcmVSZWdpc3RlckltbWVkaWF0ZSA6IHB1YmxpYyBB
Uk12N0QxNkJpdE9wY29kZSB7Ci1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBzX29wTmFtZXNbNl07Ci0KLXB1YmxpYzoKLSAgICBjb25zdCBjaGFyKiBmb3JtYXQoKTsKLQot
cHJvdGVjdGVkOgotICAgIGNvbnN0IGNoYXIqIG9wTmFtZSgpIHsgcmV0dXJuIHNfb3BOYW1lc1tv
cCgpXTsgfQotCi0gICAgdW5zaWduZWQgb3AoKSB7IHJldHVybiAoKG1fb3Bjb2RlID4+IDExKSAm
IDB4MWYpIC0gMHhjOyB9Ci0gICAgdW5zaWduZWQgaW1tZWRpYXRlNSgpIHsgcmV0dXJuIChtX29w
Y29kZSA+PiA2KSAmIDB4MDFmOyB9Ci0gICAgdW5zaWduZWQgcm4oKSB7IHJldHVybiAobV9vcGNv
ZGUgPj4gMykgJiAweDc7IH0KLSAgICB1bnNpZ25lZCBydCgpIHsgcmV0dXJuIG1fb3Bjb2RlICYg
MHg3OyB9Ci0gICAgdW5zaWduZWQgc2NhbGUoKTsKLX07Ci0KLWNsYXNzIEFSTXY3RE9wY29kZUxv
YWRTdG9yZVJlZ2lzdGVySW1tZWRpYXRlV29yZEFuZEJ5dGUgOiBwdWJsaWMgQVJNdjdET3Bjb2Rl
TG9hZFN0b3JlUmVnaXN0ZXJJbW1lZGlhdGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1
aW50MTZfdCBzX21hc2sgPSAweGUwMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfcGF0
dGVybiA9IDB4NjAwMDsKLQotICAgIERFRklORV9TVEFUSUNfRk9STUFUMTYoQVJNdjdET3Bjb2Rl
TG9hZFN0b3JlUmVnaXN0ZXJJbW1lZGlhdGUsIHRoaXNPYmopOwotfTsKLQotY2xhc3MgQVJNdjdE
T3Bjb2RlU3RvcmVSZWdpc3RlckltbWVkaWF0ZUhhbGZXb3JkIDogcHVibGljIEFSTXY3RE9wY29k
ZUxvYWRTdG9yZVJlZ2lzdGVySW1tZWRpYXRlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3Qg
dWludDE2X3Qgc19tYXNrID0gMHhmODAwOwotICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBzX3Bh
dHRlcm4gPSAweDgwMDA7Ci0KLSAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDE2KEFSTXY3RE9wY29k
ZUxvYWRTdG9yZVJlZ2lzdGVySW1tZWRpYXRlLCB0aGlzT2JqKTsKLX07Ci0KLWNsYXNzIEFSTXY3
RE9wY29kZUxvYWRSZWdpc3RlckltbWVkaWF0ZUhhbGZXb3JkIDogcHVibGljIEFSTXY3RE9wY29k
ZUxvYWRTdG9yZVJlZ2lzdGVySW1tZWRpYXRlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3Qg
dWludDE2X3Qgc19tYXNrID0gMHhmODAwOwotICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBzX3Bh
dHRlcm4gPSAweDg4MDA7Ci0KLSAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDE2KEFSTXY3RE9wY29k
ZUxvYWRTdG9yZVJlZ2lzdGVySW1tZWRpYXRlLCB0aGlzT2JqKTsKLX07Ci0KLWNsYXNzIEFSTXY3
RE9wY29kZUxvYWRTdG9yZVJlZ2lzdGVyT2Zmc2V0VDEgOiBwdWJsaWMgQVJNdjdEMTZCaXRPcGNv
ZGUgewotcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc19vcE5hbWVzWzhd
OwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfbWFzayA9IDB4ZjAwMDsK
LSAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19wYXR0ZXJuID0gMHg1MDAwOwotCi0gICAgREVG
SU5FX1NUQVRJQ19GT1JNQVQxNihBUk12N0RPcGNvZGVMb2FkU3RvcmVSZWdpc3Rlck9mZnNldFQx
LCB0aGlzT2JqKTsKLQotcHJvdGVjdGVkOgotICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOwotCi0g
ICAgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gc19vcE5hbWVzW29wQigpXTsgfQotCi0g
ICAgdW5zaWduZWQgb3BCKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDkpICYgMHg3OyB9Ci0gICAg
dW5zaWduZWQgcm0oKSB7IHJldHVybiAobV9vcGNvZGUgPj4gNikgJiAweDc7IH0KLSAgICB1bnNp
Z25lZCBybigpIHsgcmV0dXJuIChtX29wY29kZSA+PiAzKSAmIDB4NzsgfQotICAgIHVuc2lnbmVk
IHJ0KCkgeyByZXR1cm4gbV9vcGNvZGUgJiAweDc7IH0KLX07Ci0KLWNsYXNzIEFSTXY3RE9wY29k
ZUxvYWRTdG9yZVJlZ2lzdGVyU1BSZWxhdGl2ZSA6IHB1YmxpYyBBUk12N0QxNkJpdE9wY29kZSB7
Ci1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX29wTmFtZXNbOF07Ci0K
LXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19tYXNrID0gMHhmMDAwOwotICAg
IHN0YXRpYyBjb25zdCB1aW50MTZfdCBzX3BhdHRlcm4gPSAweDkwMDA7Ci0KLSAgICBERUZJTkVf
U1RBVElDX0ZPUk1BVDE2KEFSTXY3RE9wY29kZUxvYWRTdG9yZVJlZ2lzdGVyU1BSZWxhdGl2ZSwg
dGhpc09iaik7Ci0KLXByb3RlY3RlZDoKLSAgICBjb25zdCBjaGFyKiBmb3JtYXQoKTsKLQotICAg
IGNvbnN0IGNoYXIqIG9wTmFtZSgpIHsgcmV0dXJuIG9wKCkgPyAibGRyIiA6ICJzdHIiOyB9Ci0K
LSAgICB1bnNpZ25lZCBvcCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiAxMSkgJiAweDE7IH0KLSAg
ICB1bnNpZ25lZCBydCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiA4KSAmIDB4NzsgfQotICAgIHVu
c2lnbmVkIGltbWVkaWF0ZTgoKSB7IHJldHVybiBtX29wY29kZSAmIDB4ZmY7IH0KLX07Ci0KLWNs
YXNzIEFSTXY3RE9wY29kZUxvZ2ljYWxJbW1lZGlhdGVUMSA6IHB1YmxpYyBBUk12N0QxNkJpdE9w
Y29kZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfbWFzayA9IDB4ZTAw
MDsKLSAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19wYXR0ZXJuID0gMHgwMDAwOwotCi0gICAg
REVGSU5FX1NUQVRJQ19GT1JNQVQxNihBUk12N0RPcGNvZGVMb2dpY2FsSW1tZWRpYXRlVDEsIHRo
aXNPYmopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgY29uc3QgY2hhciogZm9ybWF0KCk7Ci0KLSAgICBj
b25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiBzaGlmdE5hbWUob3AoKSk7IH0KLQotICAgIHVu
c2lnbmVkIG9wKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDEyKSAmIDB4MzsgfQotICAgIHVuc2ln
bmVkIGltbWVkaWF0ZTUoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gNikgJiAweDFmOyB9Ci19Owot
Ci1jbGFzcyBBUk12N0RPcGNvZGVNaXNjQWRkU3ViU1AgOiBwdWJsaWMgQVJNdjdEMTZCaXRPcGNv
ZGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBzX21hc2sgPSAweGZmMDA7
Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfcGF0dGVybiA9IDB4YjAwMDsKLQotICAgIERF
RklORV9TVEFUSUNfRk9STUFUMTYoQVJNdjdET3Bjb2RlTWlzY0FkZFN1YlNQLCB0aGlzT2JqKTsK
LQotcHJvdGVjdGVkOgotICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOwotCi0gICAgY29uc3QgY2hh
ciogb3BOYW1lKCkgeyByZXR1cm4gb3AoKSA/ICJzdWIiIDogImFkZCI7IH0KLSAgICB1bnNpZ25l
ZCBvcCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiA3KSAmIDB4MTsgfQotICAgIHVuc2lnbmVkIGlt
bWVkaWF0ZTcoKSB7IHJldHVybiBtX29wY29kZSAmIDB4N2Y7IH0KLX07Ci0KLWNsYXNzIEFSTXY3
RE9wY29kZU1pc2NCeXRlSGFsZndvcmRPcHMgOiBwdWJsaWMgQVJNdjdEMTZCaXRPcGNvZGUgewot
cHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc19vcE5hbWVzWzhdOwotCi1w
dWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfbWFzayA9IDB4ZjcwMDsKLSAgICBz
dGF0aWMgY29uc3QgdWludDE2X3Qgc19wYXR0ZXJuID0gMHhiMjAwOwotCi0gICAgREVGSU5FX1NU
QVRJQ19GT1JNQVQxNihBUk12N0RPcGNvZGVNaXNjQnl0ZUhhbGZ3b3JkT3BzLCB0aGlzT2JqKTsK
LQotcHJvdGVjdGVkOgotICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOwotCi0gICAgY29uc3QgY2hh
ciogb3BOYW1lKCkgeyByZXR1cm4gc19vcE5hbWVzW29wKCldOyB9Ci0gICAgdW5zaWduZWQgb3Ao
KSB7IHJldHVybiAoKG1fb3Bjb2RlID4+IDkpICYgMHg0KSB8fCAoKG1fb3Bjb2RlID4+IDYpICYg
MHgzKTsgfQotfTsKLQotY2xhc3MgQVJNdjdET3Bjb2RlTWlzY0JyZWFrcG9pbnRUMSA6IHB1Ymxp
YyBBUk12N0QxNkJpdE9wY29kZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQxNl90
IHNfbWFzayA9IDB4ZmYwMDsKLSAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19wYXR0ZXJuID0g
MHhiZTAwOwotCi0gICAgREVGSU5FX1NUQVRJQ19GT1JNQVQxNihBUk12N0RPcGNvZGVNaXNjQnJl
YWtwb2ludFQxLCB0aGlzT2JqKTsKLQotcHJvdGVjdGVkOgotICAgIGNvbnN0IGNoYXIqIGZvcm1h
dCgpOwotCi0gICAgdW5zaWduZWQgaW1tZWRpYXRlOCgpIHsgcmV0dXJuIG1fb3Bjb2RlICYgMHhm
ZjsgfQotfTsKLQotY2xhc3MgQVJNdjdET3Bjb2RlTWlzY0NvbXBhcmVBbmRCcmFuY2ggOiBwdWJs
aWMgQVJNdjdEMTZCaXRPcGNvZGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1aW50MTZf
dCBzX21hc2sgPSAweGY1MDA7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfcGF0dGVybiA9
IDB4YjEwMDsKLQotICAgIERFRklORV9TVEFUSUNfRk9STUFUMTYoQVJNdjdET3Bjb2RlTWlzY0Nv
bXBhcmVBbmRCcmFuY2gsIHRoaXNPYmopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgY29uc3QgY2hhciog
Zm9ybWF0KCk7Ci0KLSAgICBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiBvcCgpID8gImNi
bnoiIDogImNieiI7IH0KLSAgICB1bnNpZ25lZCBvcCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiAx
MSkgJiAweDE7IH0KLSAgICBpbnQzMl90IGltbWVkaWF0ZTYoKSB7IHJldHVybiAoKG1fb3Bjb2Rl
ID4+IDQpICYgMHgyMCkgfCAoKG1fb3Bjb2RlID4+IDMpICYgMHgxZik7IH0KLSAgICB1bnNpZ25l
ZCBybigpIHsgcmV0dXJuIG1fb3Bjb2RlICYgMHg3OyB9Ci19OwotCi1jbGFzcyBBUk12N0RPcGNv
ZGVNaXNjSGludDE2IDogcHVibGljIEFSTXY3RDE2Qml0T3Bjb2RlIHsKLXByaXZhdGU6Ci0gICAg
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfb3BOYW1lc1sxNl07Ci0KLXB1YmxpYzoKLSAgICBz
dGF0aWMgY29uc3QgdWludDE2X3Qgc19tYXNrID0gMHhmZjBmOwotICAgIHN0YXRpYyBjb25zdCB1
aW50MTZfdCBzX3BhdHRlcm4gPSAweGJmMDA7Ci0KLSAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDE2
KEFSTXY3RE9wY29kZU1pc2NIaW50MTYsIHRoaXNPYmopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgY29u
c3QgY2hhciogZm9ybWF0KCk7Ci0KLSAgICBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiBz
X29wTmFtZXNbb3BBKCldOyB9Ci0gICAgdW5zaWduZWQgb3BBKCkgeyByZXR1cm4gKG1fb3Bjb2Rl
ID4+IDQpICYgMHhmOyB9Ci19OwotCi1jbGFzcyBBUk12N0RPcGNvZGVNaXNjSWZUaGVuVDEgOiBw
dWJsaWMgQVJNdjdEMTZCaXRPcGNvZGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1aW50
MTZfdCBzX21hc2sgPSAweGZmMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfcGF0dGVy
biA9IDB4YmYwMDsKLQotICAgIERFRklORV9TVEFUSUNfRk9STUFUMTYoQVJNdjdET3Bjb2RlTWlz
Y0lmVGhlblQxLCB0aGlzT2JqKTsKLQotcHJvdGVjdGVkOgotICAgIGNvbnN0IGNoYXIqIGZvcm1h
dCgpOwotCi0gICAgdW5zaWduZWQgZmlyc3RDb25kaXRpb24oKSB7IHJldHVybiAobV9vcGNvZGUg
Pj4gNCkgJiAweGY7IH0KLSAgICB1bnNpZ25lZCBtYXNrKCkgeyByZXR1cm4gbV9vcGNvZGUgJiAw
eGY7IH0KLX07Ci0KLWNsYXNzIEFSTXY3RE9wY29kZU1pc2NQdXNoUG9wIDogcHVibGljIEFSTXY3
RDE2Qml0T3Bjb2RlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19tYXNr
ID0gMHhmNjAwOwotICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBzX3BhdHRlcm4gPSAweGI0MDA7
Ci0KLSAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDE2KEFSTXY3RE9wY29kZU1pc2NQdXNoUG9wLCB0
aGlzT2JqKTsKLQotcHJvdGVjdGVkOgotICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOwotCi0gICAg
Y29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gb3AoKSA/ICJwb3AiIDogInB1c2giOyB9Ci0g
ICAgdW5zaWduZWQgb3AoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gMTEpICYgMHgxOyB9Ci0gICAg
dW5zaWduZWQgcmVnaXN0ZXJNYXNrKCkgeyByZXR1cm4gKChtX29wY29kZSA8PCA2KSAmIDB4NDAw
MCkgfCAobV9vcGNvZGUgJiAweGZmKTsgfQotfTsKLQotY2xhc3MgQVJNdjdET3Bjb2RlTW92ZUlt
bWVkaWF0ZVQxIDogcHVibGljIEFSTXY3RDE2Qml0T3Bjb2RlIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgY29uc3QgdWludDE2X3Qgc19tYXNrID0gMHhmODAwOwotICAgIHN0YXRpYyBjb25zdCB1aW50
MTZfdCBzX3BhdHRlcm4gPSAweDIwMDA7Ci0KLSAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDE2KEFS
TXY3RE9wY29kZU1vdmVJbW1lZGlhdGVUMSwgdGhpc09iaik7Ci0KLXByb3RlY3RlZDoKLSAgICBj
b25zdCBjaGFyKiBmb3JtYXQoKTsKLQotICAgIHVuc2lnbmVkIHJkKCkgeyByZXR1cm4gKG1fb3Bj
b2RlID4+IDgpICYgMHgzOyB9Ci0gICAgdW5zaWduZWQgaW1tZWRpYXRlOCgpIHsgcmV0dXJuIG1f
b3Bjb2RlICYgMHhmZjsgfQotfTsKLQotY2xhc3MgQVJNdjdET3Bjb2RlTW92ZVJlZ2lzdGVyVDEg
OiBwdWJsaWMgQVJNdjdEMTZCaXRPcGNvZGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1
aW50MTZfdCBzX21hc2sgPSAweGZmMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfcGF0
dGVybiA9IDB4NDYwMDsKLQotICAgIERFRklORV9TVEFUSUNfRk9STUFUMTYoQVJNdjdET3Bjb2Rl
TW92ZVJlZ2lzdGVyVDEsIHRoaXNPYmopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgY29uc3QgY2hhciog
Zm9ybWF0KCk7Ci0KLSAgICB1bnNpZ25lZCByZCgpIHsgcmV0dXJuICgobV9vcGNvZGUgPj4gNCkg
JiAweDgpIHwgKG1fb3Bjb2RlICYgMHg3KTsgfQotICAgIHVuc2lnbmVkIHJtKCkgeyByZXR1cm4g
KChtX29wY29kZSA+PiAzKSAmIDB4Zik7IH0KLX07Ci0KLS8vIDMyIEJpdCBpbnN0cnVjdGlvbnMK
LQotI2RlZmluZSBERUZJTkVfU1RBVElDX0ZPUk1BVDMyKGtsYXNzLCB0aGlzT2JqKSBcCi0gICAg
c3RhdGljIGNvbnN0IGNoYXIqIGZvcm1hdChBUk12N0QzMkJpdE9wY29kZSogdGhpc09iaikgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwga2xhc3MgKj4odGhpc09iaiktPmZvcm1hdCgpOyB9Ci0K
LWNsYXNzIEFSTXY3RDMyQml0T3Bjb2RlIDogcHVibGljIEFSTXY3RE9wY29kZSB7Ci1wcml2YXRl
OgotICAgIGNsYXNzIE9wY29kZUdyb3VwIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIE9wY29kZUdy
b3VwKHVpbnQzMl90IG9wY29kZU1hc2ssIHVpbnQzMl90IG9wY29kZVBhdHRlcm4sIGNvbnN0IGNo
YXIqICgqZm9ybWF0KShBUk12N0QzMkJpdE9wY29kZSopKQotICAgICAgICAgICAgOiBtX29wY29k
ZU1hc2sob3Bjb2RlTWFzaykKLSAgICAgICAgICAgICwgbV9vcGNvZGVQYXR0ZXJuKG9wY29kZVBh
dHRlcm4pCi0gICAgICAgICAgICAsIG1fZm9ybWF0KGZvcm1hdCkKLSAgICAgICAgICAgICwgbV9u
ZXh0KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0TmV4dChPcGNv
ZGVHcm91cCogbmV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9uZXh0ID0gbmV4dDsKLSAg
ICAgICAgfQotCi0gICAgICAgIE9wY29kZUdyb3VwKiBuZXh0KCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG1fbmV4dDsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgbWF0Y2hlcyh1
aW50MzJfdCBvcGNvZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAob3Bjb2RlICYg
bV9vcGNvZGVNYXNrKSA9PSBtX29wY29kZVBhdHRlcm47Ci0gICAgICAgIH0KLQotICAgICAgICBj
b25zdCBjaGFyKiBmb3JtYXQoQVJNdjdEMzJCaXRPcGNvZGUqIHRoaXNPYmopCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBtX2Zvcm1hdCh0aGlzT2JqKTsKLSAgICAgICAgfQotCi0gICAg
cHVibGljOgotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgb3Bjb2RlVGFibGVTaXplID0g
MTY7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBvcGNvZGVUYWJsZU1hc2sgPSBvcGNv
ZGVUYWJsZVNpemUtMTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQzMl90IG1fb3Bjb2Rl
TWFzazsKLSAgICAgICAgdWludDMyX3QgbV9vcGNvZGVQYXR0ZXJuOwotICAgICAgICBjb25zdCBj
aGFyKiAoKm1fZm9ybWF0KShBUk12N0QzMkJpdE9wY29kZSopOwotICAgICAgICBPcGNvZGVHcm91
cCogbV9uZXh0OwotICAgIH07Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBpbml0KCk7Ci0K
LSAgICBjb25zdCBjaGFyKiBkZWZhdWx0Rm9ybWF0KCk7Ci0gICAgY29uc3QgY2hhciogZG9EaXNh
c3NlbWJsZSgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdW5zaWduZWQgcmQoKSB7IHJldHVybiAobV9v
cGNvZGUgPj4gOCkgJiAweGY7IH0KLSAgICB1bnNpZ25lZCBybSgpIHsgcmV0dXJuIG1fb3Bjb2Rl
ICYgMHhmOyB9Ci0gICAgdW5zaWduZWQgcm4oKSB7IHJldHVybiAobV9vcGNvZGUgPj4gMTYpICYg
MHhmOyB9Ci0gICAgdW5zaWduZWQgcnQoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gMTIpICYgMHhm
OyB9Ci0KLSAgICB1bnNpZ25lZCBvcGNvZGVHcm91cE51bWJlcih1bnNpZ25lZCBvcGNvZGUpIHsg
cmV0dXJuIChvcGNvZGUgPj4gMjUpICYgT3Bjb2RlR3JvdXA6Om9wY29kZVRhYmxlTWFzazsgfQot
Ci1wcml2YXRlOgotICAgIHN0YXRpYyBPcGNvZGVHcm91cCogb3Bjb2RlVGFibGVbT3Bjb2RlR3Jv
dXA6Om9wY29kZVRhYmxlU2l6ZV07Ci19OwotCi1jbGFzcyBBUk12N0RPcGNvZGVCcmFuY2hSZWxh
dGl2ZSA6IHB1YmxpYyBBUk12N0QzMkJpdE9wY29kZSB7Ci1wcm90ZWN0ZWQ6Ci0gICAgdW5zaWdu
ZWQgc0JpdCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiAyNikgJiAweDE7IH0KLSAgICB1bnNpZ25l
ZCBqMSgpIHsgcmV0dXJuIChtX29wY29kZSA+PiAxMykgJiAweDE7IH0KLSAgICB1bnNpZ25lZCBq
MigpIHsgcmV0dXJuIChtX29wY29kZSA+PiAxMSkgJiAweDE7IH0KLSAgICB1bnNpZ25lZCBpbW1l
ZGlhdGUxMSgpIHsgcmV0dXJuIG1fb3Bjb2RlICYgMHg3ZmY7IH0KLX07Ci0KLWNsYXNzIEFSTXY3
RE9wY29kZUNvbmRpdGlvbmFsQnJhbmNoVDMgOiBwdWJsaWMgQVJNdjdET3Bjb2RlQnJhbmNoUmVs
YXRpdmUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX21hc2sgPSAweGY4
MDBkMDAwOwotICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX3BhdHRlcm4gPSAweGYwMDA4MDAw
OwotCi0gICAgREVGSU5FX1NUQVRJQ19GT1JNQVQzMihBUk12N0RPcGNvZGVDb25kaXRpb25hbEJy
YW5jaFQzLCB0aGlzT2JqKTsKLQotcHJvdGVjdGVkOgotICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgp
OwotCi0gICAgaW50MzJfdCBvZmZzZXQoKSB7IHJldHVybiAoKHN0YXRpY19jYXN0PGludDMyX3Q+
KHNCaXQoKSA8PCAzMSkpID4+IDEyKSB8IHN0YXRpY19jYXN0PGludDMyX3Q+KChqMSgpIDw8IDE4
KSB8IChqMigpIDw8IDE3KSB8IChpbW1lZGlhdGU2KCkgPDwgMTEpIHwgaW1tZWRpYXRlMTEoKSk7
IH0KLSAgICB1bnNpZ25lZCBjb25kaXRpb24oKSB7IHJldHVybiAobV9vcGNvZGUgPj4gMjIpICYg
MHhmOyB9Ci0gICAgdW5zaWduZWQgaW1tZWRpYXRlNigpIHsgcmV0dXJuIChtX29wY29kZSA+PiAx
NikgJiAweDNmOyB9Ci19OwotCi1jbGFzcyBBUk12N0RPcGNvZGVCcmFuY2hPckJyYW5jaExpbmsg
OiBwdWJsaWMgQVJNdjdET3Bjb2RlQnJhbmNoUmVsYXRpdmUgewotcHVibGljOgotICAgIHN0YXRp
YyBjb25zdCB1aW50MzJfdCBzX21hc2sgPSAweGY4MDA5MDAwOwotICAgIHN0YXRpYyBjb25zdCB1
aW50MzJfdCBzX3BhdHRlcm4gPSAweGYwMDA5MDAwOwotCi0gICAgREVGSU5FX1NUQVRJQ19GT1JN
QVQzMihBUk12N0RPcGNvZGVCcmFuY2hPckJyYW5jaExpbmssIHRoaXNPYmopOwotCi1wcm90ZWN0
ZWQ6Ci0gICAgY29uc3QgY2hhciogZm9ybWF0KCk7Ci0KLSAgICBpbnQzMl90IG9mZnNldCgpIHsg
cmV0dXJuICgoc3RhdGljX2Nhc3Q8aW50MzJfdD4oc0JpdCgpIDw8IDMxKSkgPj4gOCkgfCBzdGF0
aWNfY2FzdDxpbnQzMl90PigofihqMSgpIF4gc0JpdCgpKSA8PCAyMikgfCAofihqMigpIF4gc0Jp
dCgpKSA8PCAyMSkgfCAoaW1tZWRpYXRlMTAoKSA8PCAxMSkgfCBpbW1lZGlhdGUxMSgpKTsgfQot
ICAgIHVuc2lnbmVkIGltbWVkaWF0ZTEwKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDE2KSAmIDB4
M2ZmOyB9Ci0gICAgYm9vbCBpc0JMKCkgeyByZXR1cm4gISEoKG1fb3Bjb2RlID4+IDE0KSAmIDB4
MSk7IH0KLX07Ci0KLWNsYXNzIEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nTG9naWNhbEFuZFJp
dGhtZXRpYyA6IHB1YmxpYyBBUk12N0QzMkJpdE9wY29kZSB7Ci1wcm90ZWN0ZWQ6Ci0gICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfb3BOYW1lc1sxNl07Ci19OwotCi1jbGFzcyBBUk12N0RP
cGNvZGVEYXRhUHJvY2Vzc2luZ01vZGlmaWVkSW1tZWRpYXRlIDogcHVibGljIEFSTXY3RE9wY29k
ZURhdGFQcm9jZXNzaW5nTG9naWNhbEFuZFJpdGhtZXRpYyB7Ci1wcml2YXRlOgotICAgIHZvaWQg
YXBwZW5kSW1tU2hpZnQodW5zaWduZWQsIHVuc2lnbmVkKTsKLQotcHVibGljOgotICAgIHN0YXRp
YyBjb25zdCB1aW50MzJfdCBzX21hc2sgPSAweGZhMDA4MDAwOwotICAgIHN0YXRpYyBjb25zdCB1
aW50MzJfdCBzX3BhdHRlcm4gPSAweGYwMDAwMDAwOwotCi0gICAgREVGSU5FX1NUQVRJQ19GT1JN
QVQzMihBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ01vZGlmaWVkSW1tZWRpYXRlLCB0aGlzT2Jq
KTsKLQotcHJvdGVjdGVkOgotICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOwotICAgIHZvaWQgYXBw
ZW5kTW9kaWZpZWRJbW1lZGlhdGUodW5zaWduZWQpOwotCi0gICAgY29uc3QgY2hhciogb3BOYW1l
KCkgeyByZXR1cm4gc19vcE5hbWVzW29wKCldOyB9Ci0KLSAgICB1bnNpZ25lZCBvcCgpIHsgcmV0
dXJuIChtX29wY29kZSA+PiAyMSkgJiAweGY7IH0KLSAgICB1bnNpZ25lZCBzQml0KCkgeyByZXR1
cm4gKG1fb3Bjb2RlID4+IDIwKSAmIDB4MTsgfQotICAgIHVuc2lnbmVkIGltbWVkaWF0ZTEyKCkg
eyByZXR1cm4gKChtX29wY29kZSA+PiAxNSkgJiAweDA4MDApIHwgKChtX29wY29kZSA+PiA0KSAm
IDB4MDcwMCkgfCAobV9vcGNvZGUgJiAweDAwZmYpOyB9Ci19OwotCi1jbGFzcyBBUk12N0RPcGNv
ZGVEYXRhUHJvY2Vzc2luZ1NoaWZ0ZWRSZWcgOiBwdWJsaWMgQVJNdjdET3Bjb2RlRGF0YVByb2Nl
c3NpbmdMb2dpY2FsQW5kUml0aG1ldGljIHsKLXByaXZhdGU6Ci0gICAgdm9pZCBhcHBlbmRJbW1T
aGlmdCh1bnNpZ25lZCwgdW5zaWduZWQpOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVp
bnQzMl90IHNfbWFzayA9IDB4ZmUwMDAwMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNf
cGF0dGVybiA9IDB4ZWEwMDAwMDA7Ci0KLSAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDMyKEFSTXY3
RE9wY29kZURhdGFQcm9jZXNzaW5nU2hpZnRlZFJlZywgdGhpc09iaik7Ci0KLXByb3RlY3RlZDoK
LSAgICBjb25zdCBjaGFyKiBmb3JtYXQoKTsKLQotICAgIGNvbnN0IGNoYXIqIG9wTmFtZSgpIHsg
cmV0dXJuIHNfb3BOYW1lc1tvcCgpXTsgfQotCi0gICAgdW5zaWduZWQgc0JpdCgpIHsgcmV0dXJu
IChtX29wY29kZSA+PiAyMCkgJiAweDE7IH0KLSAgICB1bnNpZ25lZCBvcCgpIHsgcmV0dXJuICht
X29wY29kZSA+PiAyMSkgJiAweGY7IH0KLSAgICB1bnNpZ25lZCBpbW1lZGlhdGU1KCkgeyByZXR1
cm4gKChtX29wY29kZSA+PiAxMCkgJiAweDFjKSB8ICgobV9vcGNvZGUgPj4gNikgJiAweDMpOyB9
Ci0gICAgdW5zaWduZWQgdHlwZSgpIHsgcmV0dXJuIChtX29wY29kZSA+PiA0KSAmIDB4MzsgfQot
ICAgIHVuc2lnbmVkIHRiQml0KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDUpICYgMHgxOyB9Ci0g
ICAgdW5zaWduZWQgdEJpdCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiA0KSAmIDB4MTsgfQotfTsK
LQotY2xhc3MgQVJNdjdET3Bjb2RlRGF0YVByb2Nlc3NpbmdSZWcgOiBwdWJsaWMgQVJNdjdEMzJC
aXRPcGNvZGUgewotcHJvdGVjdGVkOgotICAgIHVuc2lnbmVkIG9wMSgpIHsgcmV0dXJuIChtX29w
Y29kZSA+PiAyMCkgJiAweGY7IH0KLSAgICB1bnNpZ25lZCBvcDIoKSB7IHJldHVybiAobV9vcGNv
ZGUgPj4gNCkgJiAweGY7IH0KLX07Ci0KLWNsYXNzIEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5n
UmVnU2hpZnQgOiBwdWJsaWMgQVJNdjdET3Bjb2RlRGF0YVByb2Nlc3NpbmdSZWcgewotcHVibGlj
OgotICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX21hc2sgPSAweGZmZTBmMGYwOwotICAgIHN0
YXRpYyBjb25zdCB1aW50MzJfdCBzX3BhdHRlcm4gPSAweGZhMDBmMDAwOwotCi0gICAgREVGSU5F
X1NUQVRJQ19GT1JNQVQzMihBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ1NoaWZ0LCB0aGlz
T2JqKTsKLQotcHJvdGVjdGVkOgotICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOwotCi0gICAgY29u
c3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gc2hpZnROYW1lKChvcDEoKSA+PiAxKSAmIDB4Myk7
IH0KLX07Ci0KLWNsYXNzIEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnRXh0ZW5kIDogcHVi
bGljIEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnIHsKLXByaXZhdGU6Ci0gICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGNvbnN0IHNfb3BFeHRlbmROYW1lc1s4XTsKLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3Qgc19vcEV4dGVuZEFuZEFkZE5hbWVzWzhdOwotCi1wdWJsaWM6Ci0gICAgc3Rh
dGljIGNvbnN0IHVpbnQzMl90IHNfbWFzayA9IDB4ZmY4MGYwYzA7Ci0gICAgc3RhdGljIGNvbnN0
IHVpbnQzMl90IHNfcGF0dGVybiA9IDB4ZmEwMGYwODA7Ci0KLSAgICBERUZJTkVfU1RBVElDX0ZP
Uk1BVDMyKEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnRXh0ZW5kLCB0aGlzT2JqKTsKLQot
cHJvdGVjdGVkOgotICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOwotCi0gICAgY29uc3QgY2hhciog
b3BFeHRlbmROYW1lKCkgeyByZXR1cm4gc19vcEV4dGVuZE5hbWVzW29wMSgpXTsgfQotICAgIGNv
bnN0IGNoYXIqIG9wRXh0ZW5kQW5kQWRkTmFtZSgpIHsgcmV0dXJuIHNfb3BFeHRlbmRBbmRBZGRO
YW1lc1tvcDEoKV07IH0KLSAgICB1bnNpZ25lZCByb3RhdGUoKSB7IHJldHVybiAobV9vcGNvZGUg
Pj4gNCkgJiAweDM7IH0KLX07Ci0KLWNsYXNzIEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nUmVn
UGFyYWxsZWwgOiBwdWJsaWMgQVJNdjdET3Bjb2RlRGF0YVByb2Nlc3NpbmdSZWcgewotcHJpdmF0
ZToKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc19vcE5hbWVzWzE2XTsKLQotcHVibGlj
OgotICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX21hc2sgPSAweGZmODBmMGUwOwotICAgIHN0
YXRpYyBjb25zdCB1aW50MzJfdCBzX3BhdHRlcm4gPSAweGZhMDBmMDAwOwotCi0gICAgREVGSU5F
X1NUQVRJQ19GT1JNQVQzMihBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ1BhcmFsbGVsLCB0
aGlzT2JqKTsKLQotcHJvdGVjdGVkOgotICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOwotCi0gICAg
Y29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gc19vcE5hbWVzWygob3AxKCkgJiAweDcpIDw8
IDEpIHwgKG9wMigpICYgMHgxKV07IH0KLX07Ci0KLWNsYXNzIEFSTXY3RE9wY29kZURhdGFQcm9j
ZXNzaW5nUmVnTWlzYyA6IHB1YmxpYyBBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZyB7Ci1w
cml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX29wTmFtZXNbMTZdOwotCi1w
dWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfbWFzayA9IDB4ZmZjMGYwYzA7Ci0g
ICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfcGF0dGVybiA9IDB4ZmE4MGYwODA7Ci0KLSAgICBE
RUZJTkVfU1RBVElDX0ZPUk1BVDMyKEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnTWlzYywg
dGhpc09iaik7Ci0KLXByb3RlY3RlZDoKLSAgICBjb25zdCBjaGFyKiBmb3JtYXQoKTsKLQotICAg
IGNvbnN0IGNoYXIqIG9wTmFtZSgpIHsgcmV0dXJuIHNfb3BOYW1lc1soKG9wMSgpICYgMHgzKSA8
PCAyKSB8IChvcDIoKSAmIDB4MyldOyB9Ci19OwotCi1jbGFzcyBBUk12N0RPcGNvZGVIaW50MzIg
OiBwdWJsaWMgQVJNdjdEMzJCaXRPcGNvZGUgewotcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3Qgc19vcE5hbWVzWzhdOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVp
bnQzMl90IHNfbWFzayA9IDB4ZmZmMGQwMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNf
cGF0dGVybiA9IDB4ZjNhMDgwMDA7Ci0KLSAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDMyKEFSTXY3
RE9wY29kZUhpbnQzMiwgdGhpc09iaik7Ci0KLXByb3RlY3RlZDoKLSAgICBjb25zdCBjaGFyKiBm
b3JtYXQoKTsKLQotICAgIGNvbnN0IGNoYXIqIG9wTmFtZSgpIHsgcmV0dXJuIHNfb3BOYW1lc1tv
cCgpXTsgfQotCi0gICAgYm9vbCBpc0RlYnVnSGludCgpIHsgcmV0dXJuIChtX29wY29kZSAmIDB4
ZjApID09IDB4ZjA7IH0KLSAgICB1bnNpZ25lZCBkZWJ1Z09wdGlvbigpIHsgcmV0dXJuIG1fb3Bj
b2RlICYgMHhmOyB9Ci0gICAgdW5zaWduZWQgb3AoKSB7IHJldHVybiBtX29wY29kZSAmIDB4Nzsg
fQotfTsKLQotY2xhc3MgQVJNdjdET3Bjb2RlRlBUcmFuc2ZlciA6IHB1YmxpYyBBUk12N0QzMkJp
dE9wY29kZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfbWFzayA9IDB4
ZmZjMDBlN2Y7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfcGF0dGVybiA9IDB4ZWUwMDBh
MTA7Ci0KLSAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDMyKEFSTXY3RE9wY29kZUZQVHJhbnNmZXIs
IHRoaXNPYmopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgY29uc3QgY2hhciogZm9ybWF0KCk7Ci0KLSAg
ICB2b2lkIGFwcGVuZEZQUmVnaXN0ZXIoKTsKLQotICAgIHVuc2lnbmVkIG9wSCgpIHsgcmV0dXJu
IChtX29wY29kZSA+PiAyMSkgJiAweDE7IH0KLSAgICB1bnNpZ25lZCBvcEwoKSB7IHJldHVybiAo
bV9vcGNvZGUgPj4gMjApICYgMHgxOyB9Ci0gICAgdW5zaWduZWQgcnQoKSB7IHJldHVybiAobV9v
cGNvZGUgPj4gMTIpICYgMHhmOyB9Ci0gICAgdW5zaWduZWQgb3BDKCkgeyByZXR1cm4gKG1fb3Bj
b2RlID4+IDgpICYgMHgxOyB9Ci0gICAgdW5zaWduZWQgb3BCKCkgeyByZXR1cm4gKG1fb3Bjb2Rl
ID4+IDUpICYgMHgzOyB9Ci0gICAgdW5zaWduZWQgdmQoKSB7IHJldHVybiAoKG1fb3Bjb2RlID4+
IDMpICYgMHgxMCkgfCAoKG1fb3Bjb2RlID4+IDE2KSAmIDB4Zik7IH0KLSAgICB1bnNpZ25lZCB2
bigpIHsgcmV0dXJuICgobV9vcGNvZGUgPj4gNykgJiAweDEpIHwgKChtX29wY29kZSA+PiAxNSkg
JiAweDFlKTsgfQotfTsKLQotY2xhc3MgQVJNdjdET3Bjb2RlRGF0YUxvYWQgOiBwdWJsaWMgQVJN
djdEMzJCaXRPcGNvZGUgewotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBzX29wTmFtZXNbOF07Ci0KLXByb3RlY3RlZDoKLSAgICBjb25zdCBjaGFyKiBvcE5hbWUoKSB7
IHJldHVybiBzX29wTmFtZXNbb3AoKV07IH0KLQotICAgIHVuc2lnbmVkIG9wKCkgeyByZXR1cm4g
KChtX29wY29kZSA+PiAyMikgJiAweDQpIHwgKChtX29wY29kZSA+PiAyMSkgJiAweDMpOyB9Ci19
OwotCi1jbGFzcyBBUk12N0RPcGNvZGVMb2FkUmVnaXN0ZXIgOiBwdWJsaWMgQVJNdjdET3Bjb2Rl
RGF0YUxvYWQgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX21hc2sgPSAw
eGZlOTAwODAwOwotICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX3BhdHRlcm4gPSAweGY4MTAw
MDAwOwotCi0gICAgREVGSU5FX1NUQVRJQ19GT1JNQVQzMihBUk12N0RPcGNvZGVMb2FkUmVnaXN0
ZXIsIHRoaXNPYmopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgY29uc3QgY2hhciogZm9ybWF0KCk7Ci0K
LSAgICB1bnNpZ25lZCBpbW1lZGlhdGUyKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDQpICYgMHgz
OyB9Ci19OwotCi1jbGFzcyBBUk12N0RPcGNvZGVMb2FkU2lnbmVkSW1tZWRpYXRlIDogcHVibGlj
IEFSTXY3RE9wY29kZURhdGFMb2FkIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgdWludDMy
X3Qgc19tYXNrID0gMHhmZTkwMDgwMDsKLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19wYXR0
ZXJuID0gMHhmODEwMDgwMDsKLQotICAgIERFRklORV9TVEFUSUNfRk9STUFUMzIoQVJNdjdET3Bj
b2RlTG9hZFNpZ25lZEltbWVkaWF0ZSwgdGhpc09iaik7Ci0KLXByb3RlY3RlZDoKLSAgICBjb25z
dCBjaGFyKiBmb3JtYXQoKTsKLQotICAgIHVuc2lnbmVkIHBCaXQoKSB7IHJldHVybiAobV9vcGNv
ZGUgPj4gMTApICYgMHgxOyB9Ci0gICAgdW5zaWduZWQgdUJpdCgpIHsgcmV0dXJuIChtX29wY29k
ZSA+PiA5KSAmIDB4MTsgfQotICAgIHVuc2lnbmVkIHdCaXQoKSB7IHJldHVybiAobV9vcGNvZGUg
Pj4gOCkgJiAweDE7IH0KLSAgICB1bnNpZ25lZCBpbW1lZGlhdGU4KCkgeyByZXR1cm4gbV9vcGNv
ZGUgJiAweGZmOyB9Ci19OwotCi1jbGFzcyBBUk12N0RPcGNvZGVMb2FkVW5zaWduZWRJbW1lZGlh
dGUgOiBwdWJsaWMgQVJNdjdET3Bjb2RlRGF0YUxvYWQgewotcHVibGljOgotICAgIHN0YXRpYyBj
b25zdCB1aW50MzJfdCBzX21hc2sgPSAweGZlOTAwMDAwOwotICAgIHN0YXRpYyBjb25zdCB1aW50
MzJfdCBzX3BhdHRlcm4gPSAweGY4OTAwMDAwOwotCi0gICAgREVGSU5FX1NUQVRJQ19GT1JNQVQz
MihBUk12N0RPcGNvZGVMb2FkVW5zaWduZWRJbW1lZGlhdGUsIHRoaXNPYmopOwotCi1wcm90ZWN0
ZWQ6Ci0gICAgY29uc3QgY2hhciogZm9ybWF0KCk7Ci0KLSAgICB1bnNpZ25lZCBpbW1lZGlhdGUx
MigpIHsgcmV0dXJuIG1fb3Bjb2RlICYgMHhmZmY7IH0KLX07Ci0KLWNsYXNzIEFSTXY3RE9wY29k
ZUxvbmdNdWx0aXBsZURpdmlkZSA6IHB1YmxpYyBBUk12N0QzMkJpdE9wY29kZSB7Ci1wcm90ZWN0
ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfb3BOYW1lc1s4XTsKLSAgICBzdGF0
aWMgY29uc3QgY2hhciogY29uc3Qgc19zbWxhbE9wTmFtZXNbNF07Ci0gICAgc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IHNfc21sYWxkT3BOYW1lc1syXTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciog
Y29uc3Qgc19zbWxzbGRPcE5hbWVzWzJdOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVp
bnQzMl90IHNfbWFzayA9IDB4ZmY4MDAwMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNf
cGF0dGVybiA9IDB4ZmI4MDAwMDA7Ci0KLSAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDMyKEFSTXY3
RE9wY29kZUxvbmdNdWx0aXBsZURpdmlkZSwgdGhpc09iaik7Ci0KLXByb3RlY3RlZDoKLSAgICBj
b25zdCBjaGFyKiBmb3JtYXQoKTsKLQotICAgIGNvbnN0IGNoYXIqIG9wTmFtZSgpIHsgcmV0dXJu
IHNfb3BOYW1lc1tvcDEoKV07IH0KLSAgICBjb25zdCBjaGFyKiBzbWxhbE9wTmFtZSgpIHsgcmV0
dXJuIHNfc21sYWxPcE5hbWVzWyhuQml0KCkgPDwgMSkgfCBtQml0KCldOyB9Ci0gICAgY29uc3Qg
Y2hhciogc21sYWxkT3BOYW1lKCkgeyByZXR1cm4gc19zbWxhbGRPcE5hbWVzW21CaXQoKV07IH0K
LSAgICBjb25zdCBjaGFyKiBzbWxzbGRPcE5hbWUoKSB7IHJldHVybiBzX3NtbHNsZE9wTmFtZXNb
bUJpdCgpXTsgfQotCi0gICAgdW5zaWduZWQgcmRMbygpIHsgcmV0dXJuIHJ0KCk7IH0KLSAgICB1
bnNpZ25lZCByZEhpKCkgeyByZXR1cm4gcmQoKTsgfQotICAgIHVuc2lnbmVkIG9wMSgpIHsgcmV0
dXJuIChtX29wY29kZSA+PiAyMCkgJiAweDc7IH0KLSAgICB1bnNpZ25lZCBvcDIoKSB7IHJldHVy
biAobV9vcGNvZGUgPj4gNCkgJiAweGY7IH0KLSAgICB1bnNpZ25lZCBuQml0KCkgeyByZXR1cm4g
KG1fb3Bjb2RlID4+IDUpICYgMHgxOyB9Ci0gICAgdW5zaWduZWQgbUJpdCgpIHsgcmV0dXJuICht
X29wY29kZSA+PiA0KSAmIDB4MTsgfQotfTsKLQotY2xhc3MgQVJNdjdET3Bjb2RlRGF0YVB1c2hQ
b3BTaW5nbGUgOiBwdWJsaWMgQVJNdjdEMzJCaXRPcGNvZGUgewotcHVibGljOgotICAgIHN0YXRp
YyBjb25zdCB1aW50MzJfdCBzX21hc2sgPSAweGZmZWYwZmZmOwotICAgIHN0YXRpYyBjb25zdCB1
aW50MzJfdCBzX3BhdHRlcm4gPSAweGY4NGQwZDA0OwotCi0gICAgREVGSU5FX1NUQVRJQ19GT1JN
QVQzMihBUk12N0RPcGNvZGVEYXRhUHVzaFBvcFNpbmdsZSwgdGhpc09iaik7Ci0KLXByb3RlY3Rl
ZDoKLSAgICBjb25zdCBjaGFyKiBmb3JtYXQoKTsKLQotICAgIGNvbnN0IGNoYXIqIG9wTmFtZSgp
IHsgcmV0dXJuIG9wKCkgPyAicG9wIiA6ICJwdXNoIjsgfQotICAgIHVuc2lnbmVkIG9wKCkgeyBy
ZXR1cm4gKG1fb3Bjb2RlID4+IDIwKSAmIDB4MTsgfQotfTsKLQotY2xhc3MgQVJNdjdET3Bjb2Rl
RGF0YVB1c2hQb3BNdWx0aXBsZSA6IHB1YmxpYyBBUk12N0QzMkJpdE9wY29kZSB7Ci1wcm90ZWN0
ZWQ6Ci0gICAgdm9pZCBhcHBlbmRSZWdpc3Rlckxpc3QoKTsKLQotICAgIHVuc2lnbmVkIHJlZ2lz
dGVyTGlzdCgpIHsgcmV0dXJuIG1fb3Bjb2RlICYgMHhmZmZmOyB9Ci0gICAgdW5zaWduZWQgY29u
ZGl0aW9uKCkgeyByZXR1cm4gbV9vcGNvZGUgPj4gMjg7IH0KLX07Ci0KLWNsYXNzIEFSTXY3RE9w
Y29kZURhdGFQb3BNdWx0aXBsZSA6IHB1YmxpYyBBUk12N0RPcGNvZGVEYXRhUHVzaFBvcE11bHRp
cGxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19tYXNrID0gMHgwZmZm
MDAwMDsKLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19wYXR0ZXJuID0gMHgwOGJkMDAwMDsK
LQotICAgIERFRklORV9TVEFUSUNfRk9STUFUMzIoQVJNdjdET3Bjb2RlRGF0YVBvcE11bHRpcGxl
LCB0aGlzT2JqKTsKLQotcHJvdGVjdGVkOgotICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOwotfTsK
LQotY2xhc3MgQVJNdjdET3Bjb2RlRGF0YVB1c2hNdWx0aXBsZSA6IHB1YmxpYyBBUk12N0RPcGNv
ZGVEYXRhUHVzaFBvcE11bHRpcGxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgdWludDMy
X3Qgc19tYXNrID0gMHhmZTdmMDAwMDsKLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19wYXR0
ZXJuID0gMHhlODJkMDAwMDsKLQotICAgIERFRklORV9TVEFUSUNfRk9STUFUMzIoQVJNdjdET3Bj
b2RlRGF0YVB1c2hNdWx0aXBsZSwgdGhpc09iaik7Ci0KLXByb3RlY3RlZDoKLSAgICBjb25zdCBj
aGFyKiBmb3JtYXQoKTsKLX07Ci0KLWNsYXNzIEFSTXY3RE9wY29kZURhdGFTdG9yZVNpbmdsZSA6
IHB1YmxpYyBBUk12N0QzMkJpdE9wY29kZSB7Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IHNfb3BOYW1lc1s0XTsKLQotcHJvdGVjdGVkOgotICAgIGNvbnN0IGNoYXIq
IG9wTmFtZSgpIHsgcmV0dXJuIHNfb3BOYW1lc1tvcCgpXTsgfQotCi0gICAgdW5zaWduZWQgb3Ao
KSB7IHJldHVybiAobV9vcGNvZGUgPj4gMjEpICYgMHgzOyB9Ci19OwotCi1jbGFzcyBBUk12N0RP
cGNvZGVTdG9yZVNpbmdsZUltbWVkaWF0ZTEyIDogcHVibGljIEFSTXY3RE9wY29kZURhdGFTdG9y
ZVNpbmdsZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfbWFzayA9IDB4
ZmZmMDAwMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfcGF0dGVybiA9IDB4ZjhjMDAw
MDA7Ci0KLSAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDMyKEFSTXY3RE9wY29kZVN0b3JlU2luZ2xl
SW1tZWRpYXRlMTIsIHRoaXNPYmopOwotCi0gICAgY29uc3QgY2hhciogZm9ybWF0KCk7Ci0KLXBy
b3RlY3RlZDoKLSAgICB1bnNpZ25lZCBpbW1lZGlhdGUxMigpIHsgcmV0dXJuIG1fb3Bjb2RlICYg
MHhmZmY7IH0KLX07Ci0KLWNsYXNzIEFSTXY3RE9wY29kZVN0b3JlU2luZ2xlSW1tZWRpYXRlOCA6
IHB1YmxpYyBBUk12N0RPcGNvZGVEYXRhU3RvcmVTaW5nbGUgewotcHVibGljOgotICAgIHN0YXRp
YyBjb25zdCB1aW50MzJfdCBzX21hc2sgPSAweGZmZjAwODAwOwotICAgIHN0YXRpYyBjb25zdCB1
aW50MzJfdCBzX3BhdHRlcm4gPSAweGY4NDAwODAwOwotCi0gICAgREVGSU5FX1NUQVRJQ19GT1JN
QVQzMihBUk12N0RPcGNvZGVTdG9yZVNpbmdsZUltbWVkaWF0ZTgsIHRoaXNPYmopOwotCi0gICAg
Y29uc3QgY2hhciogZm9ybWF0KCk7Ci0KLXByb3RlY3RlZDoKLSAgICB1bnNpZ25lZCBwQml0KCkg
eyByZXR1cm4gKG1fb3Bjb2RlID4+IDEwKSAmIDB4MTsgfQotICAgIHVuc2lnbmVkIHVCaXQoKSB7
IHJldHVybiAobV9vcGNvZGUgPj4gOSkgJiAweDE7IH0KLSAgICB1bnNpZ25lZCB3Qml0KCkgeyBy
ZXR1cm4gKG1fb3Bjb2RlID4+IDgpICYgMHgxOyB9Ci0gICAgdW5zaWduZWQgaW1tZWRpYXRlOCgp
IHsgcmV0dXJuIG1fb3Bjb2RlICYgMHhmZjsgfQotfTsKLQotY2xhc3MgQVJNdjdET3Bjb2RlU3Rv
cmVTaW5nbGVSZWdpc3RlciA6IHB1YmxpYyBBUk12N0RPcGNvZGVEYXRhU3RvcmVTaW5nbGUgewot
cHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX21hc2sgPSAweGZmZjAwZmMwOwot
ICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX3BhdHRlcm4gPSAweGY4NDAwMDAwOwotCi0gICAg
REVGSU5FX1NUQVRJQ19GT1JNQVQzMihBUk12N0RPcGNvZGVTdG9yZVNpbmdsZVJlZ2lzdGVyLCB0
aGlzT2JqKTsKLQotcHJvdGVjdGVkOgotICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOwotCi0gICAg
dW5zaWduZWQgaW1tZWRpYXRlMigpIHsgcmV0dXJuIChtX29wY29kZSA+PiA0KSAmIDB4MzsgfQot
fTsKLQotY2xhc3MgQVJNdjdET3Bjb2RlVW5tb2RpZmllZEltbWVkaWF0ZSA6IHB1YmxpYyBBUk12
N0QzMkJpdE9wY29kZSB7Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IHNfb3BOYW1lc1sxNl07Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19t
YXNrID0gMHhmYTAwODAwMDsKLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19wYXR0ZXJuID0g
MHhmMjAwMDAwMDsKLQotICAgIERFRklORV9TVEFUSUNfRk9STUFUMzIoQVJNdjdET3Bjb2RlVW5t
b2RpZmllZEltbWVkaWF0ZSwgdGhpc09iaik7Ci0KLXByb3RlY3RlZDoKLSAgICBjb25zdCBjaGFy
KiBmb3JtYXQoKTsKLQotICAgIGNvbnN0IGNoYXIqIG9wTmFtZSgpIHsgcmV0dXJuIHNfb3BOYW1l
c1tvcCgpID4+IDFdOyB9Ci0KLSAgICB1bnNpZ25lZCBvcCgpIHsgcmV0dXJuIChtX29wY29kZSA+
PiAyMCkgJiAweDFmOyB9Ci0gICAgdW5zaWduZWQgc2hCaXQoKSB7IHJldHVybiAobV9vcGNvZGUg
Pj4gMjEpICYgMHgxOyB9Ci0gICAgdW5zaWduZWQgYml0TnVtT3JTYXRJbW1lZGlhdGUoKSB7IHJl
dHVybiBtX29wY29kZSAmIDB4MWY7IH0KLSAgICB1bnNpZ25lZCBpbW1lZGlhdGU1KCkgeyByZXR1
cm4gKChtX29wY29kZSA+PiA5KSAmIDB4MWMpIHwgKChtX29wY29kZSA+PiA2KSAmIDB4Myk7IH0K
LSAgICB1bnNpZ25lZCBpbW1lZGlhdGUxMigpIHsgcmV0dXJuICgobV9vcGNvZGUgPj4gMTUpICYg
MHgwODAwKSB8ICgobV9vcGNvZGUgPj4gNCkgJiAweDA3MDApIHwgKG1fb3Bjb2RlICYgMHgwMGZm
KTsgfQotICAgIHVuc2lnbmVkIGltbWVkaWF0ZTE2KCkgeyByZXR1cm4gKChtX29wY29kZSA+PiA0
KSAmIDB4ZjAwMCkgfCAoKG1fb3Bjb2RlID4+IDE1KSAmIDB4MDgwMCkgfCAoKG1fb3Bjb2RlID4+
IDQpICYgMHgwNzAwKSB8IChtX29wY29kZSAmIDB4MDBmZik7IH0KLX07Ci0KLWNsYXNzIEFSTXY3
RE9wY29kZVZDTVAgOiBwdWJsaWMgQVJNdjdEMzJCaXRPcGNvZGUgewotcHVibGljOgotICAgIHN0
YXRpYyBjb25zdCB1aW50MzJfdCBzX21hc2sgPSAweDBmYmYwZTUwOwotICAgIHN0YXRpYyBjb25z
dCB1aW50MzJfdCBzX3BhdHRlcm4gPSAweDBlYjQwYTQwOwotCi0gICAgREVGSU5FX1NUQVRJQ19G
T1JNQVQzMihBUk12N0RPcGNvZGVWQ01QLCB0aGlzT2JqKTsKLQotcHJvdGVjdGVkOgotICAgIGNv
bnN0IGNoYXIqIGZvcm1hdCgpOwotCi0gICAgdW5zaWduZWQgY29uZGl0aW9uKCkgeyByZXR1cm4g
bV9vcGNvZGUgPj4gMjg7IH0KLSAgICB1bnNpZ25lZCBkQml0KCkgeyByZXR1cm4gKG1fb3Bjb2Rl
ID4+IDIyKSAmIDB4MTsgfQotICAgIHVuc2lnbmVkIHZkKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+
IDEyKSAmIDB4ZjsgfQotICAgIHVuc2lnbmVkIHN6Qml0KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+
IDgpICYgMHgxOyB9Ci0gICAgdW5zaWduZWQgZUJpdCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiA3
KSAmIDB4MTsgfQotICAgIHVuc2lnbmVkIG1CaXQoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gNSkg
JiAweDE7IH0KLSAgICB1bnNpZ25lZCB2bSgpIHsgcmV0dXJuIG1fb3Bjb2RlICYgMHhmOyB9Ci19
OwotCi1jbGFzcyBBUk12N0RPcGNvZGVWQ1ZUQmV0d2VlbkZQQW5kSW50IDogcHVibGljIEFSTXY3
RDMyQml0T3Bjb2RlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19tYXNr
ID0gMHgwZmI4MGU1MDsKLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19wYXR0ZXJuID0gMHgw
ZWI4MGE0MDsKLQotICAgIERFRklORV9TVEFUSUNfRk9STUFUMzIoQVJNdjdET3Bjb2RlVkNWVEJl
dHdlZW5GUEFuZEludCwgdGhpc09iaik7Ci0KLXByb3RlY3RlZDoKLSAgICBjb25zdCBjaGFyKiBm
b3JtYXQoKTsKLQotICAgIHVuc2lnbmVkIGNvbmRpdGlvbigpIHsgcmV0dXJuIG1fb3Bjb2RlID4+
IDI4OyB9Ci0gICAgdW5zaWduZWQgZEJpdCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiAyMikgJiAw
eDE7IH0KLSAgICB1bnNpZ25lZCBvcDIoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gMTYpICYgMHg3
OyB9Ci0gICAgdW5zaWduZWQgdmQoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gMTIpICYgMHhmOyB9
Ci0gICAgdW5zaWduZWQgc3pCaXQoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gOCkgJiAweDE7IH0K
LSAgICB1bnNpZ25lZCBvcCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiA3KSAmIDB4MTsgfQotICAg
IHVuc2lnbmVkIG1CaXQoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gNSkgJiAweDE7IH0KLSAgICB1
bnNpZ25lZCB2bSgpIHsgcmV0dXJuIG1fb3Bjb2RlICYgMHhmOyB9Ci19OwotCi1jbGFzcyBBUk12
N0RPcGNvZGVWTERSU1RSIDogcHVibGljIEFSTXY3RDMyQml0T3Bjb2RlIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19tYXNrID0gMHgwZjIwMGUwMDsKLSAgICBzdGF0aWMg
Y29uc3QgdWludDMyX3Qgc19wYXR0ZXJuID0gMHgwZDAwMGEwMDsKLQotICAgIERFRklORV9TVEFU
SUNfRk9STUFUMzIoQVJNdjdET3Bjb2RlVkxEUlNUUiwgdGhpc09iaik7Ci0KLXByb3RlY3RlZDoK
LSAgICBjb25zdCBjaGFyKiBmb3JtYXQoKTsKLQotICAgIGNvbnN0IGNoYXIgKm9wTmFtZSgpIHsg
cmV0dXJuIChtX29wY29kZSA+PiAyMCkgJiAweDEgPyAidmxkciIgOiAidnN0ciI7IH0KLSAgICB1
bnNpZ25lZCBjb25kaXRpb24oKSB7IHJldHVybiBtX29wY29kZSA+PiAyODsgfQotICAgIHVuc2ln
bmVkIHVCaXQoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gMjMpICYgMHgxOyB9Ci0gICAgdW5zaWdu
ZWQgcm4oKSB7IHJldHVybiAobV9vcGNvZGUgPj4gMTYpICYgMHhmOyB9Ci0gICAgdW5zaWduZWQg
dmQoKSB7IHJldHVybiAoKG1fb3Bjb2RlID4+IDE4KSAmIDB4MTApIHwgKChtX29wY29kZSA+PiAx
MikgJiAweGYpOyB9Ci0gICAgYm9vbCBkb3VibGVSZWcoKSB7IHJldHVybiAhIShtX29wY29kZSAm
IDB4MTAwKTsgfQotICAgIHVuc2lnbmVkIGltbWVkaWF0ZTgoKSB7IHJldHVybiBtX29wY29kZSAm
IDB4ZmY7IH0KLX07Ci0KLWNsYXNzIEFSTXY3RE9wY29kZVZNT1ZEb3VibGVQcmVjaXNpb24gOiBw
dWJsaWMgQVJNdjdEMzJCaXRPcGNvZGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1aW50
MzJfdCBzX21hc2sgPSAweGZmZTAwZmQwOwotICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX3Bh
dHRlcm4gPSAweGVjNDAwYjEwOwotCi0gICAgREVGSU5FX1NUQVRJQ19GT1JNQVQzMihBUk12N0RP
cGNvZGVWTU9WRG91YmxlUHJlY2lzaW9uLCB0aGlzT2JqKTsKLQotcHJvdGVjdGVkOgotICAgIGNv
bnN0IGNoYXIqIGZvcm1hdCgpOwotCi0gICAgdW5zaWduZWQgb3AoKSB7IHJldHVybiAobV9vcGNv
ZGUgPj4gMjApICYgMHgxOyB9Ci0gICAgdW5zaWduZWQgcnQyKCkgeyByZXR1cm4gKG1fb3Bjb2Rl
ID4+IDE2KSAmIDB4ZjsgfQotICAgIHVuc2lnbmVkIHJ0KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+
IDEyKSAmIDB4ZjsgfQotICAgIHVuc2lnbmVkIHZtKCkgeyByZXR1cm4gKG1fb3Bjb2RlICYgMHhm
KSB8ICgobV9vcGNvZGUgPj4gMSkgJiAweDEwKTsgfQotfTsKLQotY2xhc3MgQVJNdjdET3Bjb2Rl
Vk1PVlNpbmdsZVByZWNpc2lvbiA6IHB1YmxpYyBBUk12N0QzMkJpdE9wY29kZSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfbWFzayA9IDB4ZmZlMDBmZDA7Ci0gICAgc3Rh
dGljIGNvbnN0IHVpbnQzMl90IHNfcGF0dGVybiA9IDB4ZWM0MDBhMTA7Ci0KLSAgICBERUZJTkVf
U1RBVElDX0ZPUk1BVDMyKEFSTXY3RE9wY29kZVZNT1ZTaW5nbGVQcmVjaXNpb24sIHRoaXNPYmop
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgY29uc3QgY2hhciogZm9ybWF0KCk7Ci0KLSAgICB1bnNpZ25l
ZCBvcCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiAyMCkgJiAweDE7IH0KLSAgICB1bnNpZ25lZCBy
dDIoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gMTYpICYgMHhmOyB9Ci0gICAgdW5zaWduZWQgcnQo
KSB7IHJldHVybiAobV9vcGNvZGUgPj4gMTIpICYgMHhmOyB9Ci0gICAgdW5zaWduZWQgdm0oKSB7
IHJldHVybiAoKG1fb3Bjb2RlIDw8IDEpICYgMHgxZSkgfCAoKG1fb3Bjb2RlID4+IDUpICYgMHgx
KTsgfQotfTsKLQotY2xhc3MgQVJNdjdET3Bjb2RlVk1TUiA6IHB1YmxpYyBBUk12N0QzMkJpdE9w
Y29kZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfbWFzayA9IDB4ZmZl
ZjBmZmY7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfcGF0dGVybiA9IDB4ZWVlMTBhMTA7
Ci0KLSAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDMyKEFSTXY3RE9wY29kZVZNU1IsIHRoaXNPYmop
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgY29uc3QgY2hhciogZm9ybWF0KCk7Ci0KLSAgICB1bnNpZ25l
ZCBvcEwoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gMjApICYgMHgxOyB9Ci0gICAgdW5zaWduZWQg
cnQoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gMTIpICYgMHhmOyB9Ci19OwotCi0KLX0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcgotCi11c2luZyBKU0M6OkFSTXY3RGlzYXNz
ZW1ibGVyOjpBUk12N0RPcGNvZGU7Ci0KLSNlbmRpZiAvLyAjaWYgVVNFKEFSTVY3X0RJU0FTU0VN
QkxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJN
djdEaXNhc3NlbWJsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9B
Uk12N0Rpc2Fzc2VtYmxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiZTMx
YzhlNmJjMmMxODE3MDk0ZGJlMzhmMjYxYzIxNjU4MTJkMDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2Vt
Ymxlci9BUk12N0Rpc2Fzc2VtYmxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCi0KLSNpZiBVU0UoQVJN
VjdfRElTQVNTRU1CTEVSKQotCi0jaW5jbHVkZSAiQVJNdjdET3Bjb2RlLmgiCi0jaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1ib29sIHRyeVRv
RGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFn
PiYgY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0m
IG91dCkKLXsKLSAgICBBUk12N0RPcGNvZGUgYXJtT3Bjb2RlOwotCi0gICAgdWludDE2X3QqIGN1
cnJlbnRQQyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oY29kZVB0ci51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpJn4xKTsKLSAgICB1
aW50MTZfdCogZW5kUEMgPSBjdXJyZW50UEMgKyAoc2l6ZSAvIHNpemVvZih1aW50MTZfdCkpOwot
Ci0gICAgd2hpbGUgKGN1cnJlbnRQQyA8IGVuZFBDKSB7Ci0gICAgICAgIGNoYXIgcGNTdHJpbmdb
MTJdOwotICAgICAgICBzbnByaW50ZihwY1N0cmluZywgc2l6ZW9mKHBjU3RyaW5nKSwgIjB4JXgi
LCByZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihjdXJyZW50UEMpKTsKLSAgICAgICAgb3V0LnBy
aW50ZigiJXMlMTBzOiAlc1xuIiwgcHJlZml4LCBwY1N0cmluZywgYXJtT3Bjb2RlLmRpc2Fzc2Vt
YmxlKGN1cnJlbnRQQykpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFVTRShBUk1WN19ESVNBU1NFTUJMRVIpCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bS5oCmluZGV4IDhhZWE3NGZkYWIzOGY3MjVlNDU5OGE0NjA0MTFjMWNiOTllODlmN2IuLmFkNzlm
Mjg4MzdiNjlhOGY0NzAwZjEzNjYyYzZiZGRiMzM0NTE3NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtNzU1
LDExICs3NTUsNyBAQAogI2RlZmluZSBVU0VfQVJNNjRfRElTQVNTRU1CTEVSIDEKICNlbmRpZgog
Ci0jaWYgIWRlZmluZWQoVVNFX0FSTVY3X0RJU0FTU0VNQkxFUikgJiYgRU5BQkxFKEpJVCkgJiYg
Q1BVKEFSTV9USFVNQjIpICYmICFVU0UoQ0FQU1RPTkUpCi0jZGVmaW5lIFVTRV9BUk1WN19ESVNB
U1NFTUJMRVIgMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfRElTQVNTRU1CTEVSKSAm
JiAoVVNFKFVESVM4NikgfHwgVVNFKEFSTVY3X0RJU0FTU0VNQkxFUikgfHwgVVNFKEFSTTY0X0RJ
U0FTU0VNQkxFUikgfHwgKEVOQUJMRShKSVQpICYmIFVTRShDQVBTVE9ORSkpKQorI2lmICFkZWZp
bmVkKEVOQUJMRV9ESVNBU1NFTUJMRVIpICYmIChVU0UoVURJUzg2KSB8fCBVU0UoQVJNNjRfRElT
QVNTRU1CTEVSKSB8fCAoRU5BQkxFKEpJVCkgJiYgVVNFKENBUFNUT05FKSkpCiAjZGVmaW5lIEVO
QUJMRV9ESVNBU1NFTUJMRVIgMQogI2VuZGlmCiAK
</data>
<flag name="review"
          id="358187"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>