<?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>166797</bug_id>
          
          <creation_ts>2017-01-06 21:33:02 -0800</creation_ts>
          <short_desc>Remove PassRefPtr use from &quot;inspector&quot;, &quot;platform/sql&quot;, and &quot;platform/text&quot;</short_desc>
          <delta_ts>2017-01-07 14:09:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1264650</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-01-06 21:33:02 -0800</bug_when>
    <thetext>Remove PassRefPtr use from &quot;inspector&quot;, &quot;platform/sql&quot;, and &quot;platform/text&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264651</commentid>
    <comment_count>1</comment_count>
      <attachid>298257</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-01-06 21:48:48 -0800</bug_when>
    <thetext>Created attachment 298257
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264652</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-06 21:49:56 -0800</bug_when>
    <thetext>Attachment 298257 did not pass style-queue:


ERROR: Source/WebCore/loader/EmptyClients.cpp:210:  Declaration has space between type name and * in NSString *userVisibleString  [whitespace/declaration] [3]
ERROR: Source/WebCore/loader/EmptyClients.cpp:212:  Declaration has space between type name and * in NSURL *canonicalizeURL  [whitespace/declaration] [3]
ERROR: Source/WebCore/loader/EmptyClients.cpp:213:  Declaration has space between type name and * in NSURL *canonicalizeURLString  [whitespace/declaration] [3]
ERROR: Source/WebCore/loader/EmptyClients.cpp:427:  Declaration has space between type name and * in NSCachedURLResponse *willCacheResponse  [whitespace/declaration] [3]
Total errors found: 4 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264706</commentid>
    <comment_count>3</comment_count>
      <attachid>298279</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-01-07 09:25:37 -0800</bug_when>
    <thetext>Created attachment 298279
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264707</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-07 09:27:05 -0800</bug_when>
    <thetext>Attachment 298279 did not pass style-queue:


ERROR: Source/WebCore/loader/EmptyClients.cpp:211:  Declaration has space between type name and * in NSString *userVisibleString  [whitespace/declaration] [3]
ERROR: Source/WebCore/loader/EmptyClients.cpp:213:  Declaration has space between type name and * in NSURL *canonicalizeURL  [whitespace/declaration] [3]
ERROR: Source/WebCore/loader/EmptyClients.cpp:214:  Declaration has space between type name and * in NSURL *canonicalizeURLString  [whitespace/declaration] [3]
ERROR: Source/WebCore/loader/EmptyClients.cpp:428:  Declaration has space between type name and * in NSCachedURLResponse *willCacheResponse  [whitespace/declaration] [3]
Total errors found: 4 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264756</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-01-07 14:09:29 -0800</bug_when>
    <thetext>Committed r210492: &lt;http://trac.webkit.org/changeset/210492&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298257</attachid>
            <date>2017-01-06 21:48:48 -0800</date>
            <delta_ts>2017-01-07 09:25:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166797-20170106214717.patch</filename>
            <type>text/plain</type>
            <size>128138</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwNDY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTY0YWU4MTJiMDJhYzg1
NjA1NzdjYzZkYjE4MDgzYzVlZDE0MjY1NC4uNTZlNDlmZDc4MDBmMzM5ZWIzNjQ0NTNlN2FiZjA5
NzI4MmNlMzk1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDE3LTAxLTA2ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgUGFzc1JlZlB0ciB1
c2UgZnJvbSAiaW5zcGVjdG9yIiwgInBsYXRmb3JtL3NxbCIsIGFuZCAicGxhdGZvcm0vdGV4dCIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Njc5Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6
cGVyZm9ybU9wZW5BbmRWZXJpZnkpOiBQYXNzIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2lu
dGVyLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNh
bm9uaWNhbGl6ZWRUaXRsZSk6IE1hcCBiYWNrc2xhc2hlcyB0byBjdXJyZW5jeSBzeW1ib2xzIGlu
c2lkZSB0aGUKKyAgICAgICAgZXhpc3RpbmcgbG9vcCB0aHJvdWdoIHRoZSBjaGFyYWN0ZXJzIGlu
c3RlYWQgb2YgY2FsbGluZyBhIGZ1bmN0aW9uIGNvbmZ1c2luZ2x5CisgICAgICAgIG5hbWVkICJk
aXNwbGF5QnVmZmVyIiB0byBkbyBpdC4gTW9yZSBzdHJhaWdodGZvcndhcmQsIHBvc3NpYmx5IG1v
cmUgZWZmaWNpZW50LAorICAgICAgICBvbmUgbGVzcyBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpkaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKTogQ2FsbCByZXBs
YWNlIHRvIG1hcAorICAgICAgICBiYWNrc2xhc2hlcyB0byBjdXJyZW5jeSBzeW1ib2xzIGluc3Rl
YWQgb2YgY2FsbGluZyBhIHNwZWNpYWwgZGlzcGxheVN0cmluZworICAgICAgICBmdW5jdGlvbi4g
VGhlcmUgd2FzIG5vIHJlYWwgYmVuZWZpdCB0byB1c2luZyB0aGF0IGZ1bmN0aW9uOyB0aGUgU3Ry
aW5nOjpyZXBsYWNlCisgICAgICAgIGZ1bmN0aW9uIGhhcyBhbGwgdGhlIHNhbWUgb3B0aW1pemF0
aW9ucywgYW5kIHRoaXMgd2FzIGFsc28gdGhlIG9ubHkgY2FsbCBzaXRlLgorCisgICAgICAgICog
ZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2Vy
OjppbnZva2VSZXF1ZXN0KTogUGFzcyBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGEgcG9pbnRlci4K
KworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6Om92ZXJsYXlQYWdlKTogQ2FsbCBjcmVhdGVFbXB0eUVk
aXRvckNsaWVudCBpbnN0ZWFkCisgICAgICAgIG9mIHVzaW5nIHRoZSBjbGFzcyBFbXB0eUVkaXRv
ckNsaWVudCBkaXJlY3RseS4KKworICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuY3BwOiBN
b3ZlZCBtb3N0IG9mIHRoZSBlbXB0eSBjbGllbnRzIGhlcmUgZnJvbSB0aGUgaGVhZGVyLgorICAg
ICAgICBBbHNvIG1hZGUgbG90cyBtb3JlIHRoaW5ncyBwcml2YXRlLgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlRW1wdHlFZGl0b3JDbGllbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVt
cHR5RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQpOiBBZGRlZC4KKyAgICAgICAgKiBsb2FkZXIvRW1w
dHlDbGllbnRzLmg6IFVwZGF0ZWQgZm9yIGFib3ZlIGNoYW5nZXMuIE1hZGUgbW9yZSB0aGluZ3Mg
cHJpdmF0ZS4KKworICAgICAgICAqIHBhZ2UvRGF0YWJhc2VQcm92aWRlci5oOiBSZW1vdmVkIHVu
bmVlZGVkIGluY2x1ZGUuCisgICAgICAgICogcGFnZS9NYWluRnJhbWUuY3BwOiBEaXR0by4KKwor
ICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpkaWFnbm9z
dGljTG9nZ2luZ0NsaWVudCk6IENhbGwgZW1wdHlEaWFnbm9zdGljTG9nZ2luZ0NsaWVudAorICAg
ICAgICBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBjbGFzcyBFbXB0eURpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50IGRpcmVjdGx5LgorCisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpzZXRBdXRob3JpemVyKTogVGFr
ZSBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGEKKyAgICAgICAgUGFzc1JlZlB0ci4KKyAgICAgICAg
KiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaDogVXBkYXRlZCBmb3IgYWJvdmUuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkJpZGlDb250ZXh0OjpCaWRpQ29udGV4dCk6IE1vdmVkIHRoaXMgZnVuY3Rpb24gaGVyZSBmcm9t
IHRoZSBoZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpjb3B5Q29udGV4dEFuZFJlYmFzZWxpbmVM
ZXZlbCk6IFJldHVybiBhIFJlZiBpbnN0ZWFkIG9mIGEgUGFzc1JlZlB0ciwKKyAgICAgICAgYW5k
IHRha2UgYSByZWZlcmVuY2UgcmF0aGVyIHRoYW4gYSByYXcgcG9pbnRlci4KKyAgICAgICAgKFdl
YkNvcmU6OkJpZGlDb250ZXh0Ojpjb3B5U3RhY2tSZW1vdmluZ1VuaWNvZGVFbWJlZGRpbmdDb250
ZXh0cyk6IFJldHVybiBhCisgICAgICAgIFJlZiBpbnN0ZWFkIG9mIGEgUGFzc1JlZlB0ci4KKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92
ZSBjaGFuZ2VzLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaDogU2lt
cGxpZnkgaW5pdGlhbGl6YXRpb24sIHVzZSBtb3JlIHJlZmVyZW5jZXMsCisgICAgICAgIGF1dG8s
IG1vZGVybiBmb3IgbG9vcHMsIHJlZmVyIHRvIGRlcml2ZWQgY2xhc3MgYXMgdGhhdCByYXRoZXIg
dGhhbiB0aGUgbm9uLUMrKworICAgICAgICB0ZXJtIHN1YmNsYXNzLgorCisgICAgICAgICogcGxh
dGZvcm0vdGV4dC9UZXh0Q2hlY2tlckNsaWVudC5oOiBDaGFuZ2QgYXJndW1lbnQgZnJvbSBQYXNz
UmVmUHRyIHRvIGEKKyAgICAgICAgcmVmZXJlbmNlLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4
dC9UZXh0RW5jb2RpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFbmNvZGluZzo6ZGlzcGxh
eVN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0RW5jb2Rpbmc6OmRpc3Bs
YXlCdWZmZXIpOiBEZWxldGVkLgorCisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3gu
Y3BwOiBTdHlsZSB0d2Vha3MgYW5kIHVzZSBhIG1vZGVybiBmb3IgbG9vcC4KKworICAgICAgICAq
IHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6
ZGF0YUNoYW5nZWQpOiBDYWxsIGNyZWF0ZUVtcHR5RWRpdG9yQ2xpZW50IGluc3RlYWQKKyAgICAg
ICAgb2YgdXNpbmcgdGhlIGNsYXNzIEVtcHR5RWRpdG9yQ2xpZW50IGRpcmVjdGx5LgorCiAyMDE3
LTAxLTA1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUg
UGFzc1JlZlB0ciB1c2UgZnJvbSAicmVuZGVyaW5nIiBkaXJlY3RvcnksIG90aGVyIGltcHJvdmVt
ZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDVmMTRhMWRmYWFkYmEyYTI5ZGZjYWY4NWYyMmE3OWRl
ZDE0NzgwZmUuLjg4NTY4YTc3Y2FmZWNmOGNjOTZlODhlNjRhMzI5ZTA4OTEwYjM5YzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNy0wMS0wNiAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFBhc3NSZWZQdHIgdXNlIGZyb20gImlu
c3BlY3RvciIsICJwbGF0Zm9ybS9zcWwiLCBhbmQgInBsYXRmb3JtL3RleHQiCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY3OTcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5oOiBVcGRhdGVkIHRvIHRha2UgYSByZWZlcmVuY2UuCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xp
ZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyk6IFRha2UgYSByZWZlcmVuY2UKKyAgICAgICAg
aW5zdGVhZCBvZiBhIFBhc3NSZWZQdHIuCisKIDIwMTctMDEtMDUgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBUdXJuIHByZWZlckxvd1Bvd2VyV2ViR0xSZW5kZXJp
bmcgc2V0dGluZyBvbiBieSBkZWZhdWx0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggZWM0NWIyZTM3YmM2
NmI5OTg3NjljZDQwZTQ4M2E0OWY5ODNhZGI3YS4uZWM5MGZkMDJjODExY2Y1OTZkNTZkYTQ2ZmYw
MTQ4MWQ4YzcwNmYxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE3LTAx
LTA2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgUGFz
c1JlZlB0ciB1c2UgZnJvbSAiaW5zcGVjdG9yIiwgInBsYXRmb3JtL3NxbCIsIGFuZCAicGxhdGZv
cm0vdGV4dCIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2Njc5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6IFVwZGF0ZSBhcmd1bWVudCB0byB0
YWtlIGEgcmVmZXJlbmNlCisgICAgICAgIGluc3RlYWQgb2YgYSBQYXNzUmVmUHRyLgorCiAyMDE3
LTAxLTA1ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1v
dmUgQ2hyb21lQ2xpZW50OjpuZWVkVG91Y2hFdmVudHMoKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjNWNmMGQx
OTJhNGRjYmVhM2FmOTNkNjU4Y2M4NWZiNGYzZjAxZmM2Li5mMmJlMGExYTlkYzE0NDI3ZGQ0YTE1
ZDZmOWYzY2E2NjgzMDlhYzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTctMDEt
MDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBQYXNz
UmVmUHRyIHVzZSBmcm9tICJpbnNwZWN0b3IiLCAicGxhdGZvcm0vc3FsIiwgYW5kICJwbGF0Zm9y
bS90ZXh0IgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY2Nzk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOiBUYWtl
IGEgcmVmZXJlbmNlCisgICAgICAgIGluc3RlYWQgb2YgYSBQYXNzUmVmUHRyLgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6IFVwZGF0ZWQgZm9y
IGFib3ZlIGNoYW5nZS4KKwogMjAxNy0wMS0wNiAgTWF0dCBSYWpjYSAgPG1yYWpjYUBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIGluZnJhc3RydWN0dXJlIGZvciBzZW5kaW5nIGF1dG9wbGF5IHdl
YnNpdGUgcG9saWNpZXMgdG8gV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2UuY3BwCmluZGV4IGYwMTYyYjVlNjE0MzMxYzRlY2Y4YTE3NWExNDk5
YjkzYjRhM2E5MWUuLjUxYTMzN2ZmMWRiYmNjMjIwMzlkOWIxYTBiY2NiZmYwMTZjY2ZkNGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCkBA
IC00MjIsNyArNDIyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRGF0YWJhc2U6OnBlcmZvcm1PcGVu
QW5kVmVyaWZ5KGJvb2wgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWIKICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSLCAidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2Us
IHZlcnNpb24gbWlzbWF0Y2gsICciICsgbV9leHBlY3RlZFZlcnNpb24gKyAiJyBkb2VzIG5vdCBt
YXRjaCB0aGUgY3VycmVudFZlcnNpb24gb2YgJyIgKyBjdXJyZW50VmVyc2lvbiArICInIiB9Owog
ICAgIH0KIAotICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QXV0aG9yaXplcihtX2RhdGFiYXNlQXV0
aG9yaXplci5wdHIoKSk7CisgICAgbV9zcWxpdGVEYXRhYmFzZS5zZXRBdXRob3JpemVyKG1fZGF0
YWJhc2VBdXRob3JpemVyLmdldCgpKTsKIAogICAgIERhdGFiYXNlVHJhY2tlcjo6c2luZ2xldG9u
KCkuYWRkT3BlbkRhdGFiYXNlKCp0aGlzKTsKICAgICBtX29wZW5lZCA9IHRydWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAppbmRleCBjYWQ4ZmMyMzA3ODI2MWM3ZjkyOWRlNWNhNTdjZTFhNGRhNTEx
ZjhkLi5hYjk2ZGNlMDQyZDk2MjA4ZDhmMGVkYWYwMmMyZDE5YmY3OTk3NGI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKQEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGly
ayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5
IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDExLCAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCkBAIC0xNDUy
LDcgKzE0NTIsNyBAQCBFbGVtZW50KiBEb2N1bWVudDo6c2Nyb2xsaW5nRWxlbWVudCgpCiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgU3RyaW5nIGNhbm9u
aWNhbGl6ZWRUaXRsZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7
Ci0gICAgLy8gRklYTUU6IENvbXBpbGluZyBhIHNlcGFyYXRlIGNvcHkgb2YgdGhpcyBmb3IgZWFj
aCBjaGFyYWN0ZXIgdHlwZSBpcyBsaWtlbHkgdW5uZWNlc3NhcnkuCisgICAgLy8gRklYTUU6IENv
bXBpbGluZyBhIHNlcGFyYXRlIGNvcHkgb2YgdGhpcyBmb3IgTENoYXIgYW5kIFVDaGFyIGlzIGxp
a2VseSB1bm5lY2Vzc2FyeS4KICAgICAvLyBGSVhNRTogTWlzc2luZyBhbiBvcHRpbWl6ZWQgY2Fz
ZSBmb3Igd2hlbiB0aXRsZSBpcyBmaW5lIGFzLWlzLiBUaGlzIHVubmVjZXNzYXJpbHkgYWxsb2Nh
dGVzCiAgICAgLy8gYW5kIGtlZXBzIGFyb3VuZCBhIG5ldyBjb3B5LCBhbmQgaXQncyBldmVuIHRo
ZSBsZXNzIG9wdGltYWwgdHlwZSBvZiBTdHJpbmdJbXBsIHdpdGggYSBzZXBhcmF0ZSBidWZmZXIu
CiAgICAgLy8gQ291bGQgcHJvYmFibHkganVzdCB1c2UgU3RyaW5nQnVpbGRlciBpbnN0ZWFkLgpA
QCAtMTQ2MywxMyArMTQ2MywyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBz
dGF0aWMgaW5saW5lIFN0cmluZyBjYW5vbmljYWxpemVkVGl0bGUoRG9jdW1lbgogICAgIFN0cmlu
Z0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBidWZmZXIgeyBsZW5ndGggfTsKICAgICB1bnNpZ25lZCBi
dWZmZXJMZW5ndGggPSAwOwogCi0gICAgLy8gQ29sbGFwc2UgcnVucyBvZiBIVE1MIHNwYWNlcyBp
bnRvIHNpbmdsZSBzcGFjZSBjaGFyYWN0ZXJzOyBzdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBz
cGFjZXMuCisgICAgYXV0byogZGVjb2RlciA9IGRvY3VtZW50LmRlY29kZXIoKTsKKyAgICBhdXRv
IGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2wgPSBkZWNvZGVyID8gZGVjb2Rlci0+ZW5jb2Rpbmco
KS5iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkgOiAnXFwnOworCisgICAgLy8gQ29sbGFwc2Ug
cnVucyBvZiBIVE1MIHNwYWNlcyBpbnRvIHNpbmdsZSBzcGFjZSBjaGFyYWN0ZXJzLgorICAgIC8v
IFN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcy4KKyAgICAvLyBSZXBsYWNlIGJhY2tz
bGFzaGVzIHdpdGggY3VycmVuY3kgc3ltYm9scy4KICAgICBib29sIHByZXZpb3VzQ2hhcmFjdGVy
V2FzSFRNTFNwYWNlID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CiAgICAgICAgIGF1dG8gY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tpXTsKICAgICAg
ICAgaWYgKGlzSFRNTFNwYWNlKGNoYXJhY3RlcikpCiAgICAgICAgICAgICBwcmV2aW91c0NoYXJh
Y3Rlcldhc0hUTUxTcGFjZSA9IHRydWU7CiAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYg
KGNoYXJhY3RlciA9PSAnXFwnKQorICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9IGJhY2tzbGFz
aEFzQ3VycmVuY3lTeW1ib2w7CiAgICAgICAgICAgICBpZiAocHJldmlvdXNDaGFyYWN0ZXJXYXNI
VE1MU3BhY2UgJiYgYnVmZmVyTGVuZ3RoKQogICAgICAgICAgICAgICAgIGJ1ZmZlcltidWZmZXJM
ZW5ndGgrK10gPSAnICc7CiAgICAgICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gY2hh
cmFjdGVyOwpAQCAtMTQ3OCwxMiArMTQ4NSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYyBpbmxpbmUgU3RyaW5nIGNhbm9uaWNhbGl6ZWRUaXRsZShEb2N1bWVuCiAg
ICAgfQogICAgIGlmICghYnVmZmVyTGVuZ3RoKQogICAgICAgICByZXR1cm4geyB9OwotICAgIGJ1
ZmZlci5zaHJpbmsoYnVmZmVyTGVuZ3RoKTsKLQotICAgIC8vIFJlcGxhY2UgYmFja3NsYXNoZXMg
d2l0aCBjdXJyZW5jeSBzeW1ib2xzIGlmIHRoZSBlbmNvZGluZyByZXF1aXJlcyBpdC4KLSAgICBp
ZiAoYXV0byogZGVjb2RlciA9IGRvY3VtZW50LmRlY29kZXIoKSkKLSAgICAgICAgZGVjb2Rlci0+
ZW5jb2RpbmcoKS5kaXNwbGF5QnVmZmVyKGJ1ZmZlci5jaGFyYWN0ZXJzKCksIGJ1ZmZlckxlbmd0
aCk7CiAKKyAgICBidWZmZXIuc2hyaW5rKGJ1ZmZlckxlbmd0aCk7CiAgICAgcmV0dXJuIFN0cmlu
Zzo6YWRvcHQoV1RGTW92ZShidWZmZXIpKTsKIH0KIApAQCAtNTQ1Nyw4ICs1NDYwLDYgQEAgdm9p
ZCBEb2N1bWVudDo6c2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyU2V0VGhyb3R0bGVkKGJvb2wg
aXNUaHJvdHRsZWQpCiAKIHZvaWQgRG9jdW1lbnQ6OndpbmRvd1NjcmVlbkRpZENoYW5nZShQbGF0
Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGRpc3BsYXlJRCk7
Ci0KICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAgICAgaWYgKG1fc2NyaXB0
ZWRBbmltYXRpb25Db250cm9sbGVyKQogICAgICAgICBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlci0+d2luZG93U2NyZWVuRGlkQ2hhbmdlKGRpc3BsYXlJRCk7CkBAIC01NDcwLDExICs1NDcx
LDExIEBAIHZvaWQgRG9jdW1lbnQ6OndpbmRvd1NjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3Bs
YXlJRCBkaXNwbGF5SUQpCiAgICAgfQogfQogCi1TdHJpbmcgRG9jdW1lbnQ6OmRpc3BsYXlTdHJp
bmdNb2RpZmllZEJ5RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBzdHIpIGNvbnN0CitTdHJpbmcgRG9j
dW1lbnQ6OmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBzdHJp
bmcpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIG1fZGVjb2Rl
ci0+ZW5jb2RpbmcoKS5kaXNwbGF5U3RyaW5nKHN0ci5pbXBsKCkpLmdldCgpOwotICAgIHJldHVy
biBzdHI7CisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybiBzdHJpbmc7CisgICAg
cmV0dXJuIFN0cmluZyB7IHN0cmluZyB9LnJlcGxhY2UoJ1xcJywgbV9kZWNvZGVyLT5lbmNvZGlu
ZygpLmJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OmVu
cXVldWVQYWdlc2hvd0V2ZW50KFBhZ2VzaG93RXZlbnRQZXJzaXN0ZW5jZSBwZXJzaXN0ZWQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKaW5kZXggOWQwZjg3MzZlMDgxYzNk
ZjRmY2E3ZTIxYTdmZjY1YzE4NWM0MWZkNC4uN2NiNjIzN2E0ZGI5ODI1MzNkMjA3ZTAzNjA3OGQw
ZjY1NWE0ZDcxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNr
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApAQCAt
MTgyLDcgKzE4Miw3IEBAIHZvaWQgU3BlbGxDaGVja2VyOjppbnZva2VSZXF1ZXN0KFBhc3NSZWZQ
dHI8U3BlbGxDaGVja1JlcXVlc3Q+IHJlcXVlc3QpCiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIG1fcHJvY2Vzc2luZ1JlcXVlc3QgPSByZXF1ZXN0OwotICAgIGNsaWVu
dCgpLT5yZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LCBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBjbGllbnQoKS0+cmVxdWVzdENoZWNraW5n
T2ZTdHJpbmcoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOwogfQogCiB2b2lkIFNwZWxsQ2hlY2tlcjo6ZW5xdWV1ZVJlcXVlc3QoUGFzc1JlZlB0
cjxTcGVsbENoZWNrUmVxdWVzdD4gcmVxdWVzdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JPdmVybGF5LmNwcAppbmRleCA1ZmNhMzEwZDAwYWMyMWRjN2I2MWJlMGE5ZmUw
NTVjOGI3ZjdhYWQ4Li42NWFmMDcyNWQxNjkzNTU3NjhkYzJmZGY3MjI2NmQxYzM5NWViNTlhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCkBAIC0z
MCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yT3ZlcmxheS5oIgogCiAjaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJF
bGVtZW50LmgiCiAjaW5jbHVkZSAiRW1wdHlDbGllbnRzLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCkBAIC01NCw2ICs1NSw3IEBACiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1
ZGUgIlNvY2tldFByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgogI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaD4KICNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CkBAIC04NTcsNyArODU5LDcgQEAgUGFnZSogSW5zcGVj
dG9yT3ZlcmxheTo6b3ZlcmxheVBhZ2UoKQogICAgIGlmIChtX292ZXJsYXlQYWdlKQogICAgICAg
ICByZXR1cm4gbV9vdmVybGF5UGFnZS5nZXQoKTsKIAotICAgIFBhZ2VDb25maWd1cmF0aW9uIHBh
Z2VDb25maWd1cmF0aW9uKG1ha2VVbmlxdWVSZWY8RW1wdHlFZGl0b3JDbGllbnQ+KCksIFNvY2tl
dFByb3ZpZGVyOjpjcmVhdGUoKSk7CisgICAgUGFnZUNvbmZpZ3VyYXRpb24gcGFnZUNvbmZpZ3Vy
YXRpb24oY3JlYXRlRW1wdHlFZGl0b3JDbGllbnQoKSwgU29ja2V0UHJvdmlkZXI6OmNyZWF0ZSgp
KTsKICAgICBmaWxsV2l0aEVtcHR5Q2xpZW50cyhwYWdlQ29uZmlndXJhdGlvbik7CiAgICAgbV9v
dmVybGF5UGFnZSA9IHN0ZDo6bWFrZV91bmlxdWU8UGFnZT4oV1RGTW92ZShwYWdlQ29uZmlndXJh
dGlvbikpOwogICAgIG1fb3ZlcmxheVBhZ2UtPnNldERldmljZVNjYWxlRmFjdG9yKG1fcGFnZS5k
ZXZpY2VTY2FsZUZhY3RvcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9F
bXB0eUNsaWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAK
aW5kZXggNTc4N2M4NGVlMzIyZTE1NTJkY2JjOTM0MDZkZTlhY2Q5YTYzMDI4MS4uNmVmMmMwNTZi
Mjk2NWQ0OWQwMzc2MTBjN2JkM2ZmN2M5NTU0ZDAyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Vt
cHR5Q2xpZW50cy5jcHAKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzEsNTIgKzMxLDc5IEBACiAjaW5jbHVkZSAiQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZENsaWVudC5oIgogI2lu
Y2x1ZGUgIkNvbG9yQ2hvb3Nlci5oIgotI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgorI2lu
Y2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VQcm92aWRlci5o
IgorI2luY2x1ZGUgIkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnRMb2FkZXIuaCIKKyNpbmNsdWRlICJEcmFnQ2xpZW50LmgiCisjaW5jbHVkZSAiRWRpdG9yQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKICNpbmNsdWRlICJGb3JtU3RhdGUuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkluUHJvY2Vzc0lEQlNlcnZlci5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
ckNsaWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlQ29uZmlndXJhdGlv
bi5oIgogI2luY2x1ZGUgIlBheW1lbnRDb29yZGluYXRvckNsaWVudC5oIgogI2luY2x1ZGUgIlBs
dWdpbkluZm9Qcm92aWRlci5oIgorI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlckNsaWVudC5oIgog
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luRGF0YS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgi
CiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3Bh
Y2VQcm92aWRlci5oIgorI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAi
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCIKICNpbmNsdWRlICJVc2VyQ29udGVudFByb3Zp
ZGVyLmgiCisjaW5jbHVkZSAiVmlzaXRlZExpbmtTdG9yZS5oIgogI2luY2x1ZGUgPGhlYXAvSGVh
cElubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAorI2lmIEVOQUJM
RShDT05URU5UX0VYVEVOU0lPTlMpCisjaW5jbHVkZSAiQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgRU5BQkxFKEFQUExFX1BB
WSkKLWNsYXNzIEVtcHR5UGF5bWVudENvb3JkaW5hdG9yQ2xpZW50IGZpbmFsIDogcHVibGljIFBh
eW1lbnRDb29yZGluYXRvckNsaWVudCB7Ci0gICAgYm9vbCBzdXBwb3J0c1ZlcnNpb24odW5zaWdu
ZWQpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBjYW5NYWtlUGF5bWVudHMo
KSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQgY2FuTWFrZVBheW1lbnRzV2l0
aEFjdGl2ZUNhcmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgc3RkOjpmdW5jdGlvbjx2
b2lkIChib29sKT4gY29tcGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlIHsgY2FsbE9uTWFpblRocmVh
ZChbY29tcGxldGlvbkhhbmRsZXJdIHsgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOyB9KTsgfQot
ICAgIHZvaWQgb3BlblBheW1lbnRTZXR1cChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBjb21wbGV0aW9uSGFuZGxlcikgb3ZlcnJpZGUgeyBj
YWxsT25NYWluVGhyZWFkKFtjb21wbGV0aW9uSGFuZGxlcl0geyBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7IH0pOyB9Ci0KLSAgICBib29sIHNob3dQYXltZW50VUkoY29uc3QgVVJMJiwgY29uc3Qg
VmVjdG9yPFVSTD4mLCBjb25zdCBQYXltZW50UmVxdWVzdCYpIG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgdm9pZCBjb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihjb25zdCBQYXltZW50
TWVyY2hhbnRTZXNzaW9uJikgb3ZlcnJpZGUgeyB9Ci0KLSAgICB2b2lkIGNvbXBsZXRlU2hpcHBp
bmdNZXRob2RTZWxlY3Rpb24oUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXMsIHN0ZDo6b3B0aW9u
YWw8UGF5bWVudFJlcXVlc3Q6OlRvdGFsQW5kTGluZUl0ZW1zPikgb3ZlcnJpZGUgeyB9Ci0gICAg
dm9pZCBjb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNlbGVjdGlvbihQYXltZW50QXV0aG9yaXphdGlv
blN0YXR1cywgY29uc3QgVmVjdG9yPFBheW1lbnRSZXF1ZXN0OjpTaGlwcGluZ01ldGhvZD4mLCBz
dGQ6Om9wdGlvbmFsPFBheW1lbnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcz4pIG92ZXJyaWRl
IHsgfQotICAgIHZvaWQgY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OlRvdGFsQW5kTGluZUl0ZW1zPikgb3ZlcnJpZGUg
eyB9Ci0gICAgdm9pZCBjb21wbGV0ZVBheW1lbnRTZXNzaW9uKFBheW1lbnRBdXRob3JpemF0aW9u
U3RhdHVzKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGFib3J0UGF5bWVudFNlc3Npb24oKSBvdmVy
cmlkZSB7IH0KLSAgICB2b2lkIHBheW1lbnRDb29yZGluYXRvckRlc3Ryb3llZCgpIG92ZXJyaWRl
IHsgfQorY2xhc3MgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcjsKKworY2xhc3MgRW1wdHlC
YWNrRm9yd2FyZENsaWVudCBmaW5hbCA6IHB1YmxpYyBCYWNrRm9yd2FyZENsaWVudCB7CisgICAg
dm9pZCBhZGRJdGVtKFJlZjxIaXN0b3J5SXRlbT4mJikgZmluYWwgeyB9CisgICAgdm9pZCBnb1Rv
SXRlbShIaXN0b3J5SXRlbSopIGZpbmFsIHsgfQorICAgIEhpc3RvcnlJdGVtKiBpdGVtQXRJbmRl
eChpbnQpIGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBpbnQgYmFja0xpc3RDb3VudCgp
IGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBpbnQgZm9yd2FyZExpc3RDb3VudCgpIGZpbmFsIHsg
cmV0dXJuIDA7IH0KKyAgICB2b2lkIGNsb3NlKCkgZmluYWwgeyB9CiB9OworCisjaWYgRU5BQkxF
KENPTlRFWFRfTUVOVVMpCisKK2NsYXNzIEVtcHR5Q29udGV4dE1lbnVDbGllbnQgZmluYWwgOiBw
dWJsaWMgQ29udGV4dE1lbnVDbGllbnQgeworICAgIHZvaWQgY29udGV4dE1lbnVEZXN0cm95ZWQo
KSBmaW5hbCB7IH0KKworICAgIHZvaWQgZG93bmxvYWRVUkwoY29uc3QgVVJMJikgZmluYWwgeyB9
CisgICAgdm9pZCBzZWFyY2hXaXRoR29vZ2xlKGNvbnN0IEZyYW1lKikgZmluYWwgeyB9CisgICAg
dm9pZCBsb29rVXBJbkRpY3Rpb25hcnkoRnJhbWUqKSBmaW5hbCB7IH0KKyAgICBib29sIGlzU3Bl
YWtpbmcoKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgc3BlYWsoY29uc3QgU3Ry
aW5nJikgZmluYWwgeyB9CisgICAgdm9pZCBzdG9wU3BlYWtpbmcoKSBmaW5hbCB7IH0KKworI2lm
IFBMQVRGT1JNKENPQ09BKQorICAgIHZvaWQgc2VhcmNoV2l0aFNwb3RsaWdodCgpIGZpbmFsIHsg
fQogI2VuZGlmCiAKKyNpZiBVU0UoQUNDRVNTSUJJTElUWV9DT05URVhUX01FTlVTKQorICAgIHZv
aWQgc2hvd0NvbnRleHRNZW51KCkgZmluYWwgeyB9CisjZW5kaWYKK307CisKKyNlbmRpZiAvLyBF
TkFCTEUoQ09OVEVYVF9NRU5VUykKKwogY2xhc3MgRW1wdHlEYXRhYmFzZVByb3ZpZGVyIGZpbmFs
IDogcHVibGljIERhdGFiYXNlUHJvdmlkZXIgewogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotICAgIHZpcnR1YWwgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGlkYkNvbm5l
Y3Rpb25Ub1NlcnZlckZvclNlc3Npb24oY29uc3QgU2Vzc2lvbklEJikKKyAgICBJREJDbGllbnQ6
OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYgaWRiQ29ubmVjdGlvblRvU2VydmVyRm9yU2Vzc2lvbihj
b25zdCBTZXNzaW9uSUQmKSBmaW5hbAogICAgIHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFJlZjxJblByb2Nlc3NJREJTZXJ2ZXI+PiBzaGFyZWRDb25uZWN0aW9uKEluUHJvY2Vzc0lE
QlNlcnZlcjo6Y3JlYXRlKCkpOwogICAgICAgICByZXR1cm4gc2hhcmVkQ29ubmVjdGlvbi5nZXQo
KS0+Y29ubmVjdGlvblRvU2VydmVyKCk7CkBAIC04NCwxNDcgKzExMSw0NjEgQEAgY2xhc3MgRW1w
dHlEYXRhYmFzZVByb3ZpZGVyIGZpbmFsIDogcHVibGljIERhdGFiYXNlUHJvdmlkZXIgewogI2Vu
ZGlmCiB9OwogCi1jbGFzcyBFbXB0eVBsdWdpbkluZm9Qcm92aWRlciBmaW5hbCA6IHB1YmxpYyBQ
bHVnaW5JbmZvUHJvdmlkZXIgewotICAgIHZvaWQgcmVmcmVzaFBsdWdpbnMoKSBvdmVycmlkZSB7
IH07Ci0gICAgdm9pZCBnZXRQbHVnaW5JbmZvKFBhZ2UmLCBWZWN0b3I8UGx1Z2luSW5mbz4mKSBv
dmVycmlkZSB7IH0KLSAgICB2b2lkIGdldFdlYlZpc2libGVQbHVnaW5JbmZvKFBhZ2UmLCBWZWN0
b3I8UGx1Z2luSW5mbz4mKSBvdmVycmlkZSB7IH0KK2NsYXNzIEVtcHR5RGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQgZmluYWwgOiBwdWJsaWMgRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQgeworICAgIHZv
aWQgbG9nRGlhZ25vc3RpY01lc3NhZ2UoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgU2hv
dWxkU2FtcGxlKSBmaW5hbCB7IH0KKyAgICB2b2lkIGxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFJl
c3VsdChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBEaWFnbm9zdGljTG9nZ2luZ1Jlc3Vs
dFR5cGUsIFNob3VsZFNhbXBsZSkgZmluYWwgeyB9CisgICAgdm9pZCBsb2dEaWFnbm9zdGljTWVz
c2FnZVdpdGhWYWx1ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBTaG91bGRTYW1wbGUpIGZpbmFsIHsgfQogfTsKIAotY2xhc3MgRW1wdHlTdG9yYWdlTmFtZXNw
YWNlUHJvdmlkZXIgZmluYWwgOiBwdWJsaWMgU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyIHsKLSAg
ICBzdHJ1Y3QgRW1wdHlTdG9yYWdlQXJlYSA6IHB1YmxpYyBTdG9yYWdlQXJlYSB7Ci0gICAgICAg
IHVuc2lnbmVkIGxlbmd0aCgpIG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KLSAgICAgICAgU3RyaW5n
IGtleSh1bnNpZ25lZCkgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICAgICAgU3Ry
aW5nIGl0ZW0oY29uc3QgU3RyaW5nJikgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSAg
ICAgICAgdm9pZCBzZXRJdGVtKEZyYW1lKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwg
Ym9vbCYpIG92ZXJyaWRlIHsgfQotICAgICAgICB2b2lkIHJlbW92ZUl0ZW0oRnJhbWUqLCBjb25z
dCBTdHJpbmcmKSBvdmVycmlkZSB7IH0KLSAgICAgICAgdm9pZCBjbGVhcihGcmFtZSopIG92ZXJy
aWRlIHsgfQotICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQWNjZXNzU3RvcmFnZShGcmFtZSopIG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gTG9jYWxTdG9yYWdlOyB9Ci0gICAgICAgIHNpemVf
dCBtZW1vcnlCeXRlc1VzZWRCeUNhY2hlKCkgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQotICAgICAg
ICBTZWN1cml0eU9yaWdpbkRhdGEgc2VjdXJpdHlPcmlnaW4oKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB7IH07IH0KLSAgICB9OworI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAKLSAgICBzdHJ1
Y3QgRW1wdHlTdG9yYWdlTmFtZXNwYWNlIGZpbmFsIDogcHVibGljIFN0b3JhZ2VOYW1lc3BhY2Ug
ewotICAgICAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKGNvbnN0IFNlY3VyaXR5
T3JpZ2luRGF0YSYpIG92ZXJyaWRlIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBFbXB0eVN0b3JhZ2VB
cmVhKTsgfQotICAgICAgICBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gY29weShQYWdlKikgb3Zl
cnJpZGUgeyByZXR1cm4gYWRvcHRSZWYobmV3IEVtcHR5U3RvcmFnZU5hbWVzcGFjZSk7IH0KLSAg
ICB9OworY2xhc3MgRW1wdHlEcmFnQ2xpZW50IGZpbmFsIDogcHVibGljIERyYWdDbGllbnQgewor
ICAgIHZvaWQgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uLCBjb25zdCBEcmFnRGF0YSYpIGZpbmFsIHsgfQorICAgIHZvaWQgd2lsbFBlcmZvcm1E
cmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IEludFBvaW50JiwgRGF0YVRy
YW5zZmVyJikgZmluYWwgeyB9CisgICAgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tG
b3JEcmFnKGNvbnN0IERyYWdEYXRhJikgZmluYWwgeyByZXR1cm4gRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uTm9uZTsgfQorICAgIERyYWdTb3VyY2VBY3Rpb24gZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQ
b2ludChjb25zdCBJbnRQb2ludCYpIGZpbmFsIHsgcmV0dXJuIERyYWdTb3VyY2VBY3Rpb25Ob25l
OyB9CisgICAgdm9pZCBzdGFydERyYWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYsIGNv
bnN0IEludFBvaW50JiwgRGF0YVRyYW5zZmVyJiwgRnJhbWUmLCBib29sKSBmaW5hbCB7IH0KKyAg
ICB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJveWVkKCkgZmluYWwgeyB9Cit9OwogCi0gICAgUmVm
UHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGNyZWF0ZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKFBhZ2Um
LCB1bnNpZ25lZCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
RW1wdHlTdG9yYWdlTmFtZXNwYWNlKTsKLSAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQ
UE9SVCkKIAotICAgIFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBjcmVhdGVMb2NhbFN0b3JhZ2VO
YW1lc3BhY2UodW5zaWduZWQpIG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEVtcHR5U3RvcmFnZU5hbWVzcGFjZSk7Ci0gICAgfQorY2xhc3MgRW1wdHlFZGl0b3JD
bGllbnQgZmluYWwgOiBwdWJsaWMgRWRpdG9yQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIAotICAgIFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBjcmVhdGVUcmFuc2llbnRM
b2NhbFN0b3JhZ2VOYW1lc3BhY2UoU2VjdXJpdHlPcmlnaW4mLCB1bnNpZ25lZCkgb3ZlcnJpZGUK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRW1wdHlTdG9yYWdlTmFtZXNwYWNl
KTsKLSAgICB9Ci19OworcHVibGljOgorICAgIEVtcHR5RWRpdG9yQ2xpZW50KCkgPSBkZWZhdWx0
OwogCi1jbGFzcyBFbXB0eVVzZXJDb250ZW50UHJvdmlkZXIgZmluYWwgOiBwdWJsaWMgVXNlckNv
bnRlbnRQcm92aWRlciB7Ci0gICAgdm9pZCBmb3JFYWNoVXNlclNjcmlwdChjb25zdCBzdGQ6OmZ1
bmN0aW9uPHZvaWQoRE9NV3JhcHBlcldvcmxkJiwgY29uc3QgVXNlclNjcmlwdCYpPiYpIGNvbnN0
IG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZm9yRWFjaFVzZXJTdHlsZVNoZWV0KGNvbnN0IHN0ZDo6
ZnVuY3Rpb248dm9pZChjb25zdCBVc2VyU3R5bGVTaGVldCYpPiYpIGNvbnN0IG92ZXJyaWRlIHsg
fQotI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCi0gICAgdm9pZCBmb3JFYWNoVXNl
ck1lc3NhZ2VIYW5kbGVyKGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBVc2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9yJik+JikgY29uc3Qgb3ZlcnJpZGUgeyB9Citwcml2YXRlOgorICAg
IGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQor
ICAgIGJvb2wgc21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkgZmluYWwgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIGlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpIGZpbmFsIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCgpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCB0b2dnbGVDb250aW51b3VzU3Bl
bGxDaGVja2luZygpIGZpbmFsIHsgfQorICAgIGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHRvZ2dsZUdyYW1tYXJDaGVja2lu
ZygpIGZpbmFsIHsgfQorICAgIGludCBzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIGZpbmFsIHsg
cmV0dXJuIC0xOyB9CisKKyAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhSYW5nZSopIGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFJhbmdlKikgZmlu
YWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3VsZEluc2VydE5vZGUoTm9kZSosIFJh
bmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBSYW5nZSosIEVkaXRvckluc2VydEFj
dGlvbikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3VsZENoYW5nZVNlbGVj
dGVkUmFuZ2UoUmFuZ2UqLCBSYW5nZSosIEVBZmZpbml0eSwgYm9vbCkgZmluYWwgeyByZXR1cm4g
ZmFsc2U7IH0KKworICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqLCBS
YW5nZSopIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBkaWRBcHBseVN0eWxlKCkg
ZmluYWwgeyB9CisgICAgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShSYW5nZSosIFJh
bmdlKikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZvaWQgZGlkQmVnaW5FZGl0aW5n
KCkgZmluYWwgeyB9CisgICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKSBmaW5hbCB7
IH0KKyAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oRnJhbWUqKSBmaW5hbCB7IH0K
KyAgICB2b2lkIGRpZENoYW5nZVNlbGVjdGlvbkFuZFVwZGF0ZUxheW91dCgpIGZpbmFsIHsgfQor
ICAgIHZvaWQgdXBkYXRlRWRpdG9yU3RhdGVBZnRlckxheW91dElmRWRpdGFiaWxpdHlDaGFuZ2Vk
KCkgZmluYWwgeyB9CisgICAgdm9pZCBkaXNjYXJkZWRDb21wb3NpdGlvbihGcmFtZSopIGZpbmFs
IHsgfQorICAgIHZvaWQgY2FuY2VsZWRDb21wb3NpdGlvbigpIGZpbmFsIHsgfQorICAgIHZvaWQg
ZGlkRW5kRWRpdGluZygpIGZpbmFsIHsgfQorICAgIHZvaWQgd2lsbFdyaXRlU2VsZWN0aW9uVG9Q
YXN0ZWJvYXJkKFJhbmdlKikgZmluYWwgeyB9CisgICAgdm9pZCBkaWRXcml0ZVNlbGVjdGlvblRv
UGFzdGVib2FyZCgpIGZpbmFsIHsgfQorICAgIHZvaWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGFG
b3JSYW5nZShSYW5nZSosIFZlY3RvcjxTdHJpbmc+JiwgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZm
ZXI+PiYpIGZpbmFsIHsgfQorICAgIHZvaWQgcmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGZpbmFsIHsgfQorICAgIHZvaWQgaGFuZGxlQWNjZXB0
ZWRDYW5kaWRhdGVXaXRoU29mdFNwYWNlcyhUZXh0Q2hlY2tpbmdSZXN1bHQpIGZpbmFsIHsgfQor
CisgICAgdm9pZCByZWdpc3RlclVuZG9TdGVwKFBhc3NSZWZQdHI8VW5kb1N0ZXA+KSBmaW5hbDsK
KyAgICB2b2lkIHJlZ2lzdGVyUmVkb1N0ZXAoUGFzc1JlZlB0cjxVbmRvU3RlcD4pIGZpbmFsOwor
ICAgIHZvaWQgY2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKSBmaW5hbCB7IH0KKworICAgIGJvb2wg
Y2FuQ29weUN1dChGcmFtZSosIGJvb2wgZGVmYXVsdFZhbHVlKSBjb25zdCBmaW5hbCB7IHJldHVy
biBkZWZhdWx0VmFsdWU7IH0KKyAgICBib29sIGNhblBhc3RlKEZyYW1lKiwgYm9vbCBkZWZhdWx0
VmFsdWUpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGRlZmF1bHRWYWx1ZTsgfQorICAgIGJvb2wgY2Fu
VW5kbygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBjYW5SZWRvKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZvaWQgdW5kbygpIGZpbmFsIHsg
fQorICAgIHZvaWQgcmVkbygpIGZpbmFsIHsgfQorCisgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2
ZW50KEtleWJvYXJkRXZlbnQqKSBmaW5hbCB7IH0KKyAgICB2b2lkIGhhbmRsZUlucHV0TWV0aG9k
S2V5ZG93bihLZXlib2FyZEV2ZW50KikgZmluYWwgeyB9CisKKyAgICB2b2lkIHRleHRGaWVsZERp
ZEJlZ2luRWRpdGluZyhFbGVtZW50KikgZmluYWwgeyB9CisgICAgdm9pZCB0ZXh0RmllbGREaWRF
bmRFZGl0aW5nKEVsZW1lbnQqKSBmaW5hbCB7IH0KKyAgICB2b2lkIHRleHREaWRDaGFuZ2VJblRl
eHRGaWVsZChFbGVtZW50KikgZmluYWwgeyB9CisgICAgYm9vbCBkb1RleHRGaWVsZENvbW1hbmRG
cm9tRXZlbnQoRWxlbWVudCosIEtleWJvYXJkRXZlbnQqKSBmaW5hbCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZvaWQgdGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZChFbGVtZW50KikgZmluYWwg
eyB9CisgICAgdm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtZW50KikgZmluYWwgeyB9
CisgICAgdm9pZCBvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZCgpIGZpbmFsIHsgfQorCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgc3RhcnREZWxheWluZ0FuZENvYWxlc2NpbmdDb250
ZW50Q2hhbmdlTm90aWZpY2F0aW9ucygpIGZpbmFsIHsgfQorICAgIHZvaWQgc3RvcERlbGF5aW5n
QW5kQ29hbGVzY2luZ0NvbnRlbnRDaGFuZ2VOb3RpZmljYXRpb25zKCkgZmluYWwgeyB9CisgICAg
dm9pZCB3cml0ZURhdGFUb1Bhc3RlYm9hcmQoTlNEaWN0aW9uYXJ5KikgZmluYWwgeyB9CisgICAg
TlNBcnJheSogc3VwcG9ydGVkUGFzdGVib2FyZFR5cGVzRm9yQ3VycmVudFNlbGVjdGlvbigpIGZp
bmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBOU0FycmF5KiByZWFkRGF0YUZyb21QYXN0ZWJv
YXJkKE5TU3RyaW5nKiwgaW50KSBmaW5hbCB7IHJldHVybiBudWxscHRyOyB9CisgICAgYm9vbCBo
YXNSaWNobHlFZGl0YWJsZVNlbGVjdGlvbigpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
aW50IGdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCkgZmluYWwgeyByZXR1cm4gMDsgfQorICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50RnJvbURlbGVnYXRlKGludCkg
ZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIGJvb2wgcGVyZm9ybXNUd29TdGVwUGFzdGUo
RG9jdW1lbnRGcmFnbWVudCopIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgaW50IHBhc3Rl
Ym9hcmRDaGFuZ2VDb3VudCgpIGZpbmFsIHsgcmV0dXJuIDA7IH0KICNlbmRpZgotI2lmIEVOQUJM
RShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRl
bnNpb25zQmFja2VuZCYgdXNlckNvbnRlbnRFeHRlbnNpb25CYWNrZW5kKCkgb3ZlcnJpZGUgeyBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25z
QmFja2VuZD4gYmFja2VuZDsgcmV0dXJuIGJhY2tlbmQuZ2V0KCk7IH07CisKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyAgICBOU1N0cmluZyAqdXNlclZpc2libGVTdHJpbmcoTlNVUkwgKikgZmluYWwg
eyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZvaWQgc2V0SW5zZXJ0aW9uUGFzdGVib2FyZChjb25z
dCBTdHJpbmcmKSBmaW5hbCB7IH07CisgICAgTlNVUkwgKmNhbm9uaWNhbGl6ZVVSTChOU1VSTCAq
KSBmaW5hbCB7IHJldHVybiBudWxscHRyOyB9CisgICAgTlNVUkwgKmNhbm9uaWNhbGl6ZVVSTFN0
cmluZyhOU1N0cmluZyAqKSBmaW5hbCB7IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKLX07CiAK
LWNsYXNzIEVtcHR5VmlzaXRlZExpbmtTdG9yZSBmaW5hbCA6IHB1YmxpYyBWaXNpdGVkTGlua1N0
b3JlIHsKLSAgICBib29sIGlzTGlua1Zpc2l0ZWQoUGFnZSYsIExpbmtIYXNoLCBjb25zdCBVUkwm
LCBjb25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZv
aWQgYWRkVmlzaXRlZExpbmsoUGFnZSYsIExpbmtIYXNoKSBvdmVycmlkZSB7IH0KLX07CisjaWYg
VVNFKEFQUEtJVCkKKyAgICB2b2lkIHVwcGVyY2FzZVdvcmQoKSBmaW5hbCB7IH0KKyAgICB2b2lk
IGxvd2VyY2FzZVdvcmQoKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNhcGl0YWxpemVXb3JkKCkgZmlu
YWwgeyB9CisjZW5kaWYKIAotY2xhc3MgRW1wdHlCYWNrRm9yd2FyZENsaWVudCBmaW5hbCA6IHB1
YmxpYyBCYWNrRm9yd2FyZENsaWVudCB7Ci0gICAgdm9pZCBhZGRJdGVtKFJlZjxIaXN0b3J5SXRl
bT4mJikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBnb1RvSXRlbShIaXN0b3J5SXRlbSopIG92ZXJy
aWRlIHsgfQotICAgIEhpc3RvcnlJdGVtKiBpdGVtQXRJbmRleChpbnQpIG92ZXJyaWRlIHsgcmV0
dXJuIG51bGxwdHI7IH0KLSAgICBpbnQgYmFja0xpc3RDb3VudCgpIG92ZXJyaWRlIHsgcmV0dXJu
IDA7IH0KLSAgICBpbnQgZm9yd2FyZExpc3RDb3VudCgpIG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0K
LSAgICB2b2lkIGNsb3NlKCkgb3ZlcnJpZGUgeyB9CisjaWYgVVNFKEFVVE9NQVRJQ19URVhUX1JF
UExBQ0VNRU5UKQorICAgIHZvaWQgc2hvd1N1YnN0aXR1dGlvbnNQYW5lbChib29sKSBmaW5hbCB7
IH0KKyAgICBib29sIHN1YnN0aXR1dGlvbnNQYW5lbElzU2hvd2luZygpIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdm9pZCB0b2dnbGVTbWFydEluc2VydERlbGV0ZSgpIGZpbmFsIHsgfQor
ICAgIGJvb2wgaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQoKSBmaW5hbCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZvaWQgdG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb24o
KSBmaW5hbCB7IH0KKyAgICBib29sIGlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoKSBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgdG9nZ2xlQXV0b21hdGljTGlua0RldGVj
dGlvbigpIGZpbmFsIHsgfQorICAgIGJvb2wgaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5h
YmxlZCgpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCB0b2dnbGVBdXRvbWF0aWNE
YXNoU3Vic3RpdHV0aW9uKCkgZmluYWwgeyB9CisgICAgYm9vbCBpc0F1dG9tYXRpY1RleHRSZXBs
YWNlbWVudEVuYWJsZWQoKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgdG9nZ2xl
QXV0b21hdGljVGV4dFJlcGxhY2VtZW50KCkgZmluYWwgeyB9CisgICAgYm9vbCBpc0F1dG9tYXRp
Y1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZvaWQgdG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uKCkgZmluYWwgeyB9CisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBib29sIHNob3VsZFNob3dVbmljb2RlTWVudSgp
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKKworICAgIFRleHRDaGVja2VyQ2xpZW50
KiB0ZXh0Q2hlY2tlcigpIGZpbmFsIHsgcmV0dXJuICZtX3RleHRDaGVja2VyQ2xpZW50OyB9CisK
KyAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcm
LCBjb25zdCBHcmFtbWFyRGV0YWlsJikgZmluYWwgeyB9CisgICAgdm9pZCB1cGRhdGVTcGVsbGlu
Z1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgfQorICAgIHZvaWQg
c2hvd1NwZWxsaW5nVUkoYm9vbCkgZmluYWwgeyB9CisgICAgYm9vbCBzcGVsbGluZ1VJSXNTaG93
aW5nKCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZvaWQgd2lsbFNldElucHV0TWV0
aG9kU3RhdGUoKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCkg
ZmluYWwgeyB9CisKKyAgICBjbGFzcyBFbXB0eVRleHRDaGVja2VyQ2xpZW50IGZpbmFsIDogcHVi
bGljIFRleHRDaGVja2VyQ2xpZW50IHsKKyAgICAgICAgYm9vbCBzaG91bGRFcmFzZU1hcmtlcnNB
ZnRlckNoYW5nZVNlbGVjdGlvbihUZXh0Q2hlY2tpbmdUeXBlKSBjb25zdCBmaW5hbCB7IHJldHVy
biB0cnVlOyB9CisgICAgICAgIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBT
dHJpbmcmKSBmaW5hbCB7IH0KKyAgICAgICAgdm9pZCBsZWFybldvcmQoY29uc3QgU3RyaW5nJikg
ZmluYWwgeyB9CisgICAgICAgIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKFN0cmluZ1ZpZXcs
IGludCosIGludCopIGZpbmFsIHsgfQorICAgICAgICBTdHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdn
ZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikgZmluYWwgeyByZXR1cm4geyB9
OyB9CisgICAgICAgIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldywgVmVjdG9y
PEdyYW1tYXJEZXRhaWw+JiwgaW50KiwgaW50KikgZmluYWwgeyB9CisKKyNpZiBVU0UoVU5JRklF
RF9URVhUX0NIRUNLSU5HKQorICAgICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBjaGVj
a1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3LCBUZXh0Q2hlY2tpbmdUeXBlTWFzaywgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYpIGZpbmFsIHsgcmV0dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1
bHQ+KCk7IH0KKyNlbmRpZgorCisgICAgICAgIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIFZlY3RvcjxT
dHJpbmc+JikgZmluYWwgeyB9CisgICAgICAgIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmco
VGV4dENoZWNraW5nUmVxdWVzdCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBmaW5hbDsKKyAg
ICB9OworCisgICAgRW1wdHlUZXh0Q2hlY2tlckNsaWVudCBtX3RleHRDaGVja2VyQ2xpZW50Owog
fTsKIAotdm9pZCBmaWxsV2l0aEVtcHR5Q2xpZW50cyhQYWdlQ29uZmlndXJhdGlvbiYgcGFnZUNv
bmZpZ3VyYXRpb24pCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEVtcHR5Q2hyb21lQ2xp
ZW50PiBkdW1teUNocm9tZUNsaWVudDsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi5jaHJvbWVDbGll
bnQgPSAmZHVtbXlDaHJvbWVDbGllbnQuZ2V0KCk7CitjbGFzcyBFbXB0eUZyYW1lTG9hZGVyQ2xp
ZW50IGZpbmFsIDogcHVibGljIEZyYW1lTG9hZGVyQ2xpZW50IHsKKyAgICB2b2lkIGZyYW1lTG9h
ZGVyRGVzdHJveWVkKCkgZmluYWwgeyB9CiAKLSNpZiBFTkFCTEUoQVBQTEVfUEFZKQotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxFbXB0eVBheW1lbnRDb29yZGluYXRvckNsaWVudD4gZHVtbXlQ
YXltZW50Q29vcmRpbmF0b3JDbGllbnQ7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24ucGF5bWVudENv
b3JkaW5hdG9yQ2xpZW50ID0gJmR1bW15UGF5bWVudENvb3JkaW5hdG9yQ2xpZW50LmdldCgpOwor
ICAgIGJvb2wgaGFzV2ViVmlldygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0gLy8gbWFp
bmx5IGZvciBhc3NlcnRpb25zCisKKyAgICB2b2lkIG1ha2VSZXByZXNlbnRhdGlvbihEb2N1bWVu
dExvYWRlciopIGZpbmFsIHsgfQorI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIGZvcmNlTGF5
b3V0T25SZXN0b3JlRnJvbVBhZ2VDYWNoZSgpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5k
aWYKKyAgICB2b2lkIGZvcmNlTGF5b3V0Rm9yTm9uSFRNTCgpIGZpbmFsIHsgfQogCi0jaWYgRU5B
QkxFKENPTlRFWFRfTUVOVVMpCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEVtcHR5Q29udGV4
dE1lbnVDbGllbnQ+IGR1bW15Q29udGV4dE1lbnVDbGllbnQ7Ci0gICAgcGFnZUNvbmZpZ3VyYXRp
b24uY29udGV4dE1lbnVDbGllbnQgPSAmZHVtbXlDb250ZXh0TWVudUNsaWVudC5nZXQoKTsKKyAg
ICB2b2lkIHNldENvcGllc09uU2Nyb2xsKCkgZmluYWwgeyB9CisKKyAgICB2b2lkIGRldGFjaGVk
RnJvbVBhcmVudDIoKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRldGFjaGVkRnJvbVBhcmVudDMoKSBm
aW5hbCB7IH0KKworICAgIHZvaWQgY29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKERv
Y3VtZW50TG9hZGVyKiwgU2Vzc2lvbklELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJikgZmluYWwgeyB9CisKKyAgICB2b2lkIGFzc2lnbklkZW50aWZpZXJU
b0luaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcsIERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JikgZmluYWwgeyB9CisgICAgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcpIGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdm9pZCBkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdChEb2N1bWVudExvYWRlciosIHVu
c2lnbmVkIGxvbmcsIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBm
aW5hbCB7IH0KKyAgICB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgY29uc3QgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmKSBmaW5hbCB7IH0KKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExC
QUNLKQorICAgIGJvb2wgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShEb2N1
bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYpIGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCi0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEVtcHR5RHJhZ0NsaWVudD4gZHVtbXlEcmFnQ2xpZW50
OwotICAgIHBhZ2VDb25maWd1cmF0aW9uLmRyYWdDbGllbnQgPSAmZHVtbXlEcmFnQ2xpZW50Lmdl
dCgpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBj
b25uZWN0aW9uUHJvcGVydGllcyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcpIGZpbmFs
IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEVtcHR5SW5zcGVjdG9yQ2xpZW50PiBkdW1teUluc3BlY3RvckNsaWVudDsKLSAgICBwYWdlQ29u
ZmlndXJhdGlvbi5pbnNwZWN0b3JDbGllbnQgPSAmZHVtbXlJbnNwZWN0b3JDbGllbnQuZ2V0KCk7
CisgICAgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZShEb2N1bWVudExvYWRlciosIHVu
c2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBmaW5hbCB7IH0KKyAgICB2b2lk
IGRpc3BhdGNoRGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25l
ZCBsb25nLCBpbnQpIGZpbmFsIHsgfQorICAgIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2FkaW5n
KERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZykgZmluYWwgeyB9CisjaWYgRU5BQkxFKERB
VEFfREVURUNUSU9OKQorICAgIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hEYXRhRGV0ZWN0aW9uKE5T
QXJyYXkgKikgZmluYWwgeyB9CisjZW5kaWYKKyAgICB2b2lkIGRpc3BhdGNoRGlkRmFpbExvYWRp
bmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBSZXNvdXJjZUVycm9yJikg
ZmluYWwgeyB9CisgICAgYm9vbCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNo
ZShEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmLCBpbnQpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2b2lkIGRpc3Bh
dGNoRGlkRGlzcGF0Y2hPbmxvYWRFdmVudHMoKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRpc3BhdGNo
RGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkKCkgZmluYWwgeyB9Cisg
ICAgdm9pZCBkaXNwYXRjaERpZENhbmNlbENsaWVudFJlZGlyZWN0KCkgZmluYWwgeyB9CisgICAg
dm9pZCBkaXNwYXRjaFdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QoY29uc3QgVVJMJiwgZG91Ymxl
LCBkb3VibGUpIGZpbmFsIHsgfQorICAgIHZvaWQgZGlzcGF0Y2hEaWRDaGFuZ2VMb2NhdGlvbldp
dGhpblBhZ2UoKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRpc3BhdGNoRGlkUHVzaFN0YXRlV2l0aGlu
UGFnZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgZGlzcGF0Y2hEaWRSZXBsYWNlU3RhdGVXaXRoaW5Q
YWdlKCkgZmluYWwgeyB9CisgICAgdm9pZCBkaXNwYXRjaERpZFBvcFN0YXRlV2l0aGluUGFnZSgp
IGZpbmFsIHsgfQorICAgIHZvaWQgZGlzcGF0Y2hXaWxsQ2xvc2UoKSBmaW5hbCB7IH0KKyAgICB2
b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRpc3BhdGNo
RGlkU3RhcnRQcm92aXNpb25hbExvYWQoKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRpc3BhdGNoRGlk
UmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mKSBmaW5hbCB7IH0KKyAgICB2
b2lkIGRpc3BhdGNoRGlkQ29tbWl0TG9hZChzdGQ6Om9wdGlvbmFsPEhhc0luc2VjdXJlQ29udGVu
dD4pIGZpbmFsIHsgfQorICAgIHZvaWQgZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNv
bnN0IFJlc291cmNlRXJyb3ImKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRpc3BhdGNoRGlkRmFpbExv
YWQoY29uc3QgUmVzb3VyY2VFcnJvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgZGlzcGF0Y2hEaWRG
aW5pc2hEb2N1bWVudExvYWQoKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRpc3BhdGNoRGlkRmluaXNo
TG9hZCgpIGZpbmFsIHsgfQorICAgIHZvaWQgZGlzcGF0Y2hEaWRSZWFjaExheW91dE1pbGVzdG9u
ZShMYXlvdXRNaWxlc3RvbmVzKSBmaW5hbCB7IH0KKworICAgIEZyYW1lKiBkaXNwYXRjaENyZWF0
ZVBhZ2UoY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYpIGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0K
KyAgICB2b2lkIGRpc3BhdGNoU2hvdygpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkaXNwYXRjaERl
Y2lkZVBvbGljeUZvclJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBGcmFtZVBvbGljeUZ1bmN0aW9uKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRp
c3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKGNvbnN0IE5hdmlnYXRpb25BY3Rp
b24mLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIGNvbnN0
IFN0cmluZyYsIEZyYW1lUG9saWN5RnVuY3Rpb24pIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2hE
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIEZyYW1lUG9saWN5
RnVuY3Rpb24pIGZpbmFsOworICAgIHZvaWQgY2FuY2VsUG9saWN5Q2hlY2soKSBmaW5hbCB7IH0K
KworICAgIHZvaWQgZGlzcGF0Y2hVbmFibGVUb0ltcGxlbWVudFBvbGljeShjb25zdCBSZXNvdXJj
ZUVycm9yJikgZmluYWwgeyB9CisKKyAgICB2b2lkIGRpc3BhdGNoV2lsbFNlbmRTdWJtaXRFdmVu
dChQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2hXaWxsU3Vi
bWl0Rm9ybShQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIEZyYW1lUG9saWN5RnVuY3Rpb24pIGZpbmFs
OworCisgICAgdm9pZCByZXZlcnRUb1Byb3Zpc2lvbmFsU3RhdGUoRG9jdW1lbnRMb2FkZXIqKSBm
aW5hbCB7IH0KKyAgICB2b2lkIHNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwg
Y29uc3QgUmVzb3VyY2VFcnJvciYpIGZpbmFsIHsgfQorCisgICAgdm9pZCBzZXRNYWluRnJhbWVE
b2N1bWVudFJlYWR5KGJvb2wpIGZpbmFsIHsgfQorCisgICAgdm9pZCBzdGFydERvd25sb2FkKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgfQorCisgICAgdm9p
ZCB3aWxsQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRp
ZENoYW5nZVRpdGxlKERvY3VtZW50TG9hZGVyKikgZmluYWwgeyB9CisKKyAgICB2b2lkIHdpbGxS
ZXBsYWNlTXVsdGlwYXJ0Q29udGVudCgpIGZpbmFsIHsgfQorICAgIHZvaWQgZGlkUmVwbGFjZU11
bHRpcGFydENvbnRlbnQoKSBmaW5hbCB7IH0KKworICAgIHZvaWQgY29tbWl0dGVkTG9hZChEb2N1
bWVudExvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpIGZpbmFsIHsgfQorICAgIHZvaWQgZmluaXNo
ZWRMb2FkaW5nKERvY3VtZW50TG9hZGVyKikgZmluYWwgeyB9CisKKyAgICBSZXNvdXJjZUVycm9y
IGNhbmNlbGxlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIGZpbmFsIHsgcmV0dXJuIHsg
UmVzb3VyY2VFcnJvcjo6VHlwZTo6Q2FuY2VsbGF0aW9uIH07IH0KKyAgICBSZXNvdXJjZUVycm9y
IGJsb2NrZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBmaW5hbCB7IHJldHVybiB7IH07
IH0KKyAgICBSZXNvdXJjZUVycm9yIGJsb2NrZWRCeUNvbnRlbnRCbG9ja2VyRXJyb3IoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JikgZmluYWwgeyByZXR1cm4geyB9OyB9CisgICAgUmVzb3VyY2VFcnJv
ciBjYW5ub3RTaG93VVJMRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgZmluYWwgeyByZXR1
cm4geyB9OyB9CisgICAgUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRlZEZvclBvbGljeUNoYW5nZUVy
cm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorI2lmIEVO
QUJMRShDT05URU5UX0ZJTFRFUklORykKKyAgICBSZXNvdXJjZUVycm9yIGJsb2NrZWRCeUNvbnRl
bnRGaWx0ZXJFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBmaW5hbCB7IHJldHVybiB7IH07
IH0KKyNlbmRpZgogCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEVtcHR5RnJhbWVMb2FkZXJD
bGllbnQ+IGR1bW15RnJhbWVMb2FkZXJDbGllbnQ7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24ubG9h
ZGVyQ2xpZW50Rm9yTWFpbkZyYW1lID0gJmR1bW15RnJhbWVMb2FkZXJDbGllbnQuZ2V0KCk7Cisg
ICAgUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJikgZmluYWwgeyByZXR1cm4geyB9OyB9CisgICAgUmVzb3VyY2VFcnJvciBmaWxlRG9l
c05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIGZpbmFsIHsgcmV0dXJuIHsg
fTsgfQorICAgIFJlc291cmNlRXJyb3IgcGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcihjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJikgZmluYWwgeyByZXR1cm4geyB9OyB9CiAKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8RW1wdHlQcm9ncmVzc1RyYWNrZXJDbGllbnQ+IGR1bW15UHJvZ3Jlc3NUcmFj
a2VyQ2xpZW50OwotICAgIHBhZ2VDb25maWd1cmF0aW9uLnByb2dyZXNzVHJhY2tlckNsaWVudCA9
ICZkdW1teVByb2dyZXNzVHJhY2tlckNsaWVudC5nZXQoKTsKKyAgICBib29sIHNob3VsZEZhbGxC
YWNrKGNvbnN0IFJlc291cmNlRXJyb3ImKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAg
cGFnZUNvbmZpZ3VyYXRpb24uYmFja0ZvcndhcmRDbGllbnQgPSBhZG9wdFJlZihuZXcgRW1wdHlC
YWNrRm9yd2FyZENsaWVudCk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24uZGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEVtcHR5RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ+
KCk7CisgICAgYm9vbCBjYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBjYW5TaG93TUlNRVR5cGUoY29u
c3QgU3RyaW5nJikgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGNhblNo
b3dNSU1FVHlwZUFzSFRNTChjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGJvb2wgcmVwcmVzZW50YXRpb25FeGlzdHNGb3JVUkxTY2hlbWUoY29uc3QgU3Ry
aW5nJikgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBTdHJpbmcgZ2VuZXJhdGVk
TUlNRVR5cGVGb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJikgY29uc3QgZmluYWwgeyByZXR1cm4g
ZW1wdHlTdHJpbmcoKTsgfQogCi0gICAgcGFnZUNvbmZpZ3VyYXRpb24uYXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2UgPSBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y3JlYXRlKFN0cmluZygpLCBTdHJp
bmcoKSk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQcm92aWRlciA9IGFkb3B0UmVm
KG5ldyBFbXB0eURhdGFiYXNlUHJvdmlkZXIpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLnBsdWdp
bkluZm9Qcm92aWRlciA9IGFkb3B0UmVmKG5ldyBFbXB0eVBsdWdpbkluZm9Qcm92aWRlcik7Ci0g
ICAgcGFnZUNvbmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyID0gYWRvcHRSZWYo
bmV3IEVtcHR5U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKTsKLSAgICBwYWdlQ29uZmlndXJhdGlv
bi51c2VyQ29udGVudFByb3ZpZGVyID0gYWRvcHRSZWYobmV3IEVtcHR5VXNlckNvbnRlbnRQcm92
aWRlcik7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24udmlzaXRlZExpbmtTdG9yZSA9IGFkb3B0UmVm
KG5ldyBFbXB0eVZpc2l0ZWRMaW5rU3RvcmUpOwotfQorICAgIHZvaWQgZnJhbWVMb2FkQ29tcGxl
dGVkKCkgZmluYWwgeyB9CisgICAgdm9pZCByZXN0b3JlVmlld1N0YXRlKCkgZmluYWwgeyB9Cisg
ICAgdm9pZCBwcm92aXNpb25hbExvYWRTdGFydGVkKCkgZmluYWwgeyB9CisgICAgdm9pZCBkaWRG
aW5pc2hMb2FkKCkgZmluYWwgeyB9CisgICAgdm9pZCBwcmVwYXJlRm9yRGF0YVNvdXJjZVJlcGxh
Y2VtZW50KCkgZmluYWwgeyB9CisKKyAgICBSZWY8RG9jdW1lbnRMb2FkZXI+IGNyZWF0ZURvY3Vt
ZW50TG9hZGVyKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJikg
ZmluYWw7CisgICAgdm9pZCB1cGRhdGVDYWNoZWREb2N1bWVudExvYWRlcihEb2N1bWVudExvYWRl
ciYpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlv
biYsIGNvbnN0IFVSTCYpIGZpbmFsIHsgfQorCisgICAgU3RyaW5nIHVzZXJBZ2VudChjb25zdCBV
UkwmKSBmaW5hbCB7IHJldHVybiBlbXB0eVN0cmluZygpOyB9CisKKyAgICB2b2lkIHNhdmVQbGF0
Zm9ybURhdGFUb0NhY2hlZEZyYW1lKENhY2hlZEZyYW1lKikgZmluYWwgeyB9CisgICAgdm9pZCB0
cmFuc2l0aW9uVG9Db21taXR0ZWRGcm9tQ2FjaGVkRnJhbWUoQ2FjaGVkRnJhbWUqKSBmaW5hbCB7
IH0KKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCBkaWRSZXN0b3JlRnJhbWVIaWVyYXJjaHlG
b3JDYWNoZWRGcmFtZSgpIGZpbmFsIHsgfQorI2VuZGlmCisgICAgdm9pZCB0cmFuc2l0aW9uVG9D
b21taXR0ZWRGb3JOZXdQYWdlKCkgZmluYWwgeyB9CisKKyAgICB2b2lkIGRpZFNhdmVUb1BhZ2VD
YWNoZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgZGlkUmVzdG9yZUZyb21QYWdlQ2FjaGUoKSBmaW5h
bCB7IH0KKworICAgIHZvaWQgZGlzcGF0Y2hEaWRCZWNvbWVGcmFtZXNldChib29sKSBmaW5hbCB7
IH0KKworICAgIHZvaWQgdXBkYXRlR2xvYmFsSGlzdG9yeSgpIGZpbmFsIHsgfQorICAgIHZvaWQg
dXBkYXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3MoKSBmaW5hbCB7IH0KKyAgICBib29sIHNo
b3VsZEdvVG9IaXN0b3J5SXRlbShIaXN0b3J5SXRlbSopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdm9pZCB1cGRhdGVHbG9iYWxIaXN0b3J5SXRlbUZvclBhZ2UoKSBmaW5hbCB7
IH0KKyAgICB2b2lkIHNhdmVWaWV3U3RhdGVUb0l0ZW0oSGlzdG9yeUl0ZW0mKSBmaW5hbCB7IH0K
KyAgICBib29sIGNhbkNhY2hlUGFnZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdm9pZCBkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50KCkgZmluYWwgeyB9CisgICAgdm9pZCBk
aWRSdW5JbnNlY3VyZUNvbnRlbnQoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBVUkwmKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGRpZERldGVjdFhTUyhjb25zdCBVUkwmLCBib29sKSBmaW5hbCB7IH0KKyAg
ICBSZWZQdHI8RnJhbWU+IGNyZWF0ZUZyYW1lKGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYsIEhU
TUxGcmFtZU93bmVyRWxlbWVudCosIGNvbnN0IFN0cmluZyYsIGJvb2wsIGludCwgaW50KSBmaW5h
bDsKKyAgICBSZWZQdHI8V2lkZ2V0PiBjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYsIEhUTUxQ
bHVnSW5FbGVtZW50KiwgY29uc3QgVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYsIGJvb2wpIGZpbmFsOworICAgIHZvaWQgcmVj
cmVhdGVQbHVnaW4oV2lkZ2V0KikgZmluYWw7CisgICAgUGFzc1JlZlB0cjxXaWRnZXQ+IGNyZWF0
ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEhUTUxBcHBsZXRFbGVtZW50KiwgY29u
c3QgVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpIGZp
bmFsOworCisgICAgT2JqZWN0Q29udGVudFR5cGUgb2JqZWN0Q29udGVudFR5cGUoY29uc3QgVVJM
JiwgY29uc3QgU3RyaW5nJikgZmluYWwgeyByZXR1cm4gT2JqZWN0Q29udGVudFR5cGU6Ok5vbmU7
IH0KKyAgICBTdHJpbmcgb3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB7
IH07IH0KKworICAgIHZvaWQgcmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KikgZmluYWwgeyB9
CisgICAgdm9pZCBkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChET01XcmFwcGVy
V29ybGQmKSBmaW5hbCB7IH0KKworICAgIHZvaWQgcmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9u
KGJvb2wpIGZpbmFsIHsgfQorCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgUmVtb3RlQVhPYmpl
Y3RSZWYgYWNjZXNzaWJpbGl0eVJlbW90ZU9iamVjdCgpIGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7
IH0KKyAgICBOU0NhY2hlZFVSTFJlc3BvbnNlICp3aWxsQ2FjaGVSZXNwb25zZShEb2N1bWVudExv
YWRlciosIHVuc2lnbmVkIGxvbmcsIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKnJlc3BvbnNlKSBjb25z
dCBmaW5hbCB7IHJldHVybiByZXNwb25zZTsgfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4p
ICYmIFVTRShDRlVSTENPTk5FQ1RJT04pCisgICAgYm9vbCBzaG91bGRDYWNoZVJlc3BvbnNlKERv
Y3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGNv
bnN0IHVuc2lnbmVkIGNoYXIqLCB1bnNpZ25lZCBsb25nIGxvbmcpIGZpbmFsIHsgcmV0dXJuIHRy
dWU7IH0KKyNlbmRpZgorCisgICAgUGFzc1JlZlB0cjxGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBj
cmVhdGVOZXR3b3JraW5nQ29udGV4dCgpIGZpbmFsOworCisjaWYgRU5BQkxFKFJFUVVFU1RfQVVU
T0NPTVBMRVRFKQorICAgIHZvaWQgZGlkUmVxdWVzdEF1dG9jb21wbGV0ZShQYXNzUmVmUHRyPEZv
cm1TdGF0ZT4pIGZpbmFsIHsgfQorI2VuZGlmCisKKyAgICBib29sIGlzRW1wdHlGcmFtZUxvYWRl
ckNsaWVudCgpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIHByZWZldGNoRE5TKGNv
bnN0IFN0cmluZyYpIGZpbmFsIHsgfQorfTsKKworY2xhc3MgRW1wdHlJbnNwZWN0b3JDbGllbnQg
ZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQ2xpZW50IHsKKyAgICB2b2lkIGluc3BlY3RlZFBhZ2VE
ZXN0cm95ZWQoKSBmaW5hbCB7IH0KKyAgICBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCogb3Bl
bkxvY2FsRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJvbGxlciopIGZpbmFsIHsgcmV0dXJuIG51bGxw
dHI7IH0KKyAgICB2b2lkIGJyaW5nRnJvbnRlbmRUb0Zyb250KCkgZmluYWwgeyB9CisgICAgdm9p
ZCBoaWdobGlnaHQoKSBmaW5hbCB7IH0KKyAgICB2b2lkIGhpZGVIaWdobGlnaHQoKSBmaW5hbCB7
IH0KK307CisKKyNpZiBFTkFCTEUoQVBQTEVfUEFZKQorCitjbGFzcyBFbXB0eVBheW1lbnRDb29y
ZGluYXRvckNsaWVudCBmaW5hbCA6IHB1YmxpYyBQYXltZW50Q29vcmRpbmF0b3JDbGllbnQgewor
ICAgIGJvb2wgc3VwcG9ydHNWZXJzaW9uKHVuc2lnbmVkKSBmaW5hbCB7IHJldHVybiBmYWxzZTsg
fQorICAgIGJvb2wgY2FuTWFrZVBheW1lbnRzKCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2b2lkIGNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYsIHN0ZDo6ZnVuY3Rpb248dm9pZChib29sKT4gY29tcGxldGlvbkhhbmRsZXIpIGZp
bmFsIHsgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkhhbmRsZXJdIHsgY29tcGxldGlvbkhh
bmRsZXIoZmFsc2UpOyB9KTsgfQorICAgIHZvaWQgb3BlblBheW1lbnRTZXR1cChjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoYm9vbCk+IGNvbXBsZXRpb25I
YW5kbGVyKSBmaW5hbCB7IGNhbGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25IYW5kbGVyXSB7IGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsgfSk7IH0KKyAgICBib29sIHNob3dQYXltZW50VUkoY29u
c3QgVVJMJiwgY29uc3QgVmVjdG9yPFVSTD4mLCBjb25zdCBQYXltZW50UmVxdWVzdCYpIGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBjb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihj
b25zdCBQYXltZW50TWVyY2hhbnRTZXNzaW9uJikgZmluYWwgeyB9CisgICAgdm9pZCBjb21wbGV0
ZVNoaXBwaW5nTWV0aG9kU2VsZWN0aW9uKFBheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzLCBzdGQ6
Om9wdGlvbmFsPFBheW1lbnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcz4pIGZpbmFsIHsgfQor
ICAgIHZvaWQgY29tcGxldGVTaGlwcGluZ0NvbnRhY3RTZWxlY3Rpb24oUGF5bWVudEF1dGhvcml6
YXRpb25TdGF0dXMsIGNvbnN0IFZlY3RvcjxQYXltZW50UmVxdWVzdDo6U2hpcHBpbmdNZXRob2Q+
Jiwgc3RkOjpvcHRpb25hbDxQYXltZW50UmVxdWVzdDo6VG90YWxBbmRMaW5lSXRlbXM+KSBmaW5h
bCB7IH0KKyAgICB2b2lkIGNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbihzdGQ6Om9wdGlv
bmFsPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcz4pIGZpbmFsIHsg
fQorICAgIHZvaWQgY29tcGxldGVQYXltZW50U2Vzc2lvbihQYXltZW50QXV0aG9yaXphdGlvblN0
YXR1cykgZmluYWwgeyB9CisgICAgdm9pZCBhYm9ydFBheW1lbnRTZXNzaW9uKCkgZmluYWwgeyB9
CisgICAgdm9pZCBwYXltZW50Q29vcmRpbmF0b3JEZXN0cm95ZWQoKSBmaW5hbCB7IH0KK307CisK
KyNlbmRpZgorCitjbGFzcyBFbXB0eVBsdWdpbkluZm9Qcm92aWRlciBmaW5hbCA6IHB1YmxpYyBQ
bHVnaW5JbmZvUHJvdmlkZXIgeworICAgIHZvaWQgcmVmcmVzaFBsdWdpbnMoKSBmaW5hbCB7IH07
CisgICAgdm9pZCBnZXRQbHVnaW5JbmZvKFBhZ2UmLCBWZWN0b3I8UGx1Z2luSW5mbz4mKSBmaW5h
bCB7IH0KKyAgICB2b2lkIGdldFdlYlZpc2libGVQbHVnaW5JbmZvKFBhZ2UmLCBWZWN0b3I8UGx1
Z2luSW5mbz4mKSBmaW5hbCB7IH0KK307CiAKIGNsYXNzIEVtcHR5UG9wdXBNZW51IDogcHVibGlj
IFBvcHVwTWVudSB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzaG93KGNvbnN0IEludFJlY3QmLCBGcmFt
ZVZpZXcqLCBpbnQpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgaGlkZSgpIG92ZXJyaWRlIHsgfQot
ICAgIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGRpc2Nv
bm5lY3RDbGllbnQoKSBvdmVycmlkZSB7IH0KKyAgICBFbXB0eVBvcHVwTWVudSgpID0gZGVmYXVs
dDsKK3ByaXZhdGU6CisgICAgdm9pZCBzaG93KGNvbnN0IEludFJlY3QmLCBGcmFtZVZpZXcqLCBp
bnQpIGZpbmFsIHsgfQorICAgIHZvaWQgaGlkZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgdXBkYXRl
RnJvbUVsZW1lbnQoKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRpc2Nvbm5lY3RDbGllbnQoKSBmaW5h
bCB7IH0KK307CisKK2NsYXNzIEVtcHR5UHJvZ3Jlc3NUcmFja2VyQ2xpZW50IGZpbmFsIDogcHVi
bGljIFByb2dyZXNzVHJhY2tlckNsaWVudCB7CisgICAgdm9pZCB3aWxsQ2hhbmdlRXN0aW1hdGVk
UHJvZ3Jlc3MoKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRpZENoYW5nZUVzdGltYXRlZFByb2dyZXNz
KCkgZmluYWwgeyB9CisgICAgdm9pZCBwcm9ncmVzc1N0YXJ0ZWQoRnJhbWUmKSBmaW5hbCB7IH0K
KyAgICB2b2lkIHByb2dyZXNzRXN0aW1hdGVDaGFuZ2VkKEZyYW1lJikgZmluYWwgeyB9CisgICAg
dm9pZCBwcm9ncmVzc0ZpbmlzaGVkKEZyYW1lJikgZmluYWwgeyB9CiB9OwogCiBjbGFzcyBFbXB0
eVNlYXJjaFBvcHVwTWVudSA6IHB1YmxpYyBTZWFyY2hQb3B1cE1lbnUgewogcHVibGljOgotICAg
IFBvcHVwTWVudSogcG9wdXBNZW51KCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wb3B1cC5nZXQoKTsg
fQotICAgIHZvaWQgc2F2ZVJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0
IFZlY3RvcjxSZWNlbnRTZWFyY2g+Jikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBsb2FkUmVjZW50
U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPFJlY2VudFNlYXJjaD4mKSBvdmVy
cmlkZSB7IH0KLSAgICBib29sIGVuYWJsZWQoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIEVtcHR5U2VhcmNoUG9wdXBNZW51KCkKKyAgICAgICAgOiBtX3BvcHVwKGFkb3B0UmVmKCpu
ZXcgRW1wdHlQb3B1cE1lbnUpKQorICAgIHsKKyAgICB9CiAKIHByaXZhdGU6Ci0gICAgUmVmUHRy
PEVtcHR5UG9wdXBNZW51PiBtX3BvcHVwOworICAgIFBvcHVwTWVudSogcG9wdXBNZW51KCkgZmlu
YWwgeyByZXR1cm4gbV9wb3B1cC5wdHIoKTsgfQorICAgIHZvaWQgc2F2ZVJlY2VudFNlYXJjaGVz
KGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IFZlY3RvcjxSZWNlbnRTZWFyY2g+JikgZmluYWwg
eyB9CisgICAgdm9pZCBsb2FkUmVjZW50U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVj
dG9yPFJlY2VudFNlYXJjaD4mKSBmaW5hbCB7IH0KKyAgICBib29sIGVuYWJsZWQoKSBmaW5hbCB7
IHJldHVybiBmYWxzZTsgfQorCisgICAgUmVmPEVtcHR5UG9wdXBNZW51PiBtX3BvcHVwOworfTsK
KworY2xhc3MgRW1wdHlTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIgZmluYWwgOiBwdWJsaWMgU3Rv
cmFnZU5hbWVzcGFjZVByb3ZpZGVyIHsKKyAgICBzdHJ1Y3QgRW1wdHlTdG9yYWdlQXJlYSA6IHB1
YmxpYyBTdG9yYWdlQXJlYSB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGZpbmFsIHsgcmV0
dXJuIDA7IH0KKyAgICAgICAgU3RyaW5nIGtleSh1bnNpZ25lZCkgZmluYWwgeyByZXR1cm4geyB9
OyB9CisgICAgICAgIFN0cmluZyBpdGVtKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgcmV0dXJuIHsg
fTsgfQorICAgICAgICB2b2lkIHNldEl0ZW0oRnJhbWUqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmLCBib29sJikgZmluYWwgeyB9CisgICAgICAgIHZvaWQgcmVtb3ZlSXRlbShGcmFtZSos
IGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgfQorICAgICAgICB2b2lkIGNsZWFyKEZyYW1lKikgZmlu
YWwgeyB9CisgICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJikgZmluYWwgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICAgICAgYm9vbCBjYW5BY2Nlc3NTdG9yYWdlKEZyYW1lKikgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBMb2NhbFN0b3JhZ2U7IH0KKyAgICAgICAgc2l6ZV90IG1lbW9yeUJ5
dGVzVXNlZEJ5Q2FjaGUoKSBmaW5hbCB7IHJldHVybiAwOyB9CisgICAgICAgIFNlY3VyaXR5T3Jp
Z2luRGF0YSBzZWN1cml0eU9yaWdpbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorICAg
IH07CisKKyAgICBzdHJ1Y3QgRW1wdHlTdG9yYWdlTmFtZXNwYWNlIGZpbmFsIDogcHVibGljIFN0
b3JhZ2VOYW1lc3BhY2UgeworICAgICAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVh
KGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYpIGZpbmFsIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RW1wdHlTdG9yYWdlQXJlYSk7IH0KKyAgICAgICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGNv
cHkoUGFnZSopIGZpbmFsIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW1wdHlTdG9yYWdlTmFtZXNw
YWNlKTsgfQorICAgIH07CisKKyAgICBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gY3JlYXRlU2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UoUGFnZSYsIHVuc2lnbmVkKSBmaW5hbDsKKyAgICBSZWZQdHI8
U3RvcmFnZU5hbWVzcGFjZT4gY3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKHVuc2lnbmVkKSBm
aW5hbDsKKyAgICBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gY3JlYXRlVHJhbnNpZW50TG9jYWxT
dG9yYWdlTmFtZXNwYWNlKFNlY3VyaXR5T3JpZ2luJiwgdW5zaWduZWQpIGZpbmFsOworfTsKKwor
Y2xhc3MgRW1wdHlVc2VyQ29udGVudFByb3ZpZGVyIGZpbmFsIDogcHVibGljIFVzZXJDb250ZW50
UHJvdmlkZXIgeworICAgIHZvaWQgZm9yRWFjaFVzZXJTY3JpcHQoY29uc3Qgc3RkOjpmdW5jdGlv
bjx2b2lkKERPTVdyYXBwZXJXb3JsZCYsIGNvbnN0IFVzZXJTY3JpcHQmKT4mKSBjb25zdCBmaW5h
bCB7IH0KKyAgICB2b2lkIGZvckVhY2hVc2VyU3R5bGVTaGVldChjb25zdCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoY29uc3QgVXNlclN0eWxlU2hlZXQmKT4mKSBjb25zdCBmaW5hbCB7IH0KKyNpZiBFTkFC
TEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorICAgIHZvaWQgZm9yRWFjaFVzZXJNZXNzYWdlSGFu
ZGxlcihjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgVXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvciYpPiYpIGNvbnN0IGZpbmFsIHsgfQorI2VuZGlmCisjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNr
ZW5kJiB1c2VyQ29udGVudEV4dGVuc2lvbkJhY2tlbmQoKSBmaW5hbCB7IHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kPiBiYWNr
ZW5kOyByZXR1cm4gYmFja2VuZC5nZXQoKTsgfTsKKyNlbmRpZgorfTsKKworY2xhc3MgRW1wdHlW
aXNpdGVkTGlua1N0b3JlIGZpbmFsIDogcHVibGljIFZpc2l0ZWRMaW5rU3RvcmUgeworICAgIGJv
b2wgaXNMaW5rVmlzaXRlZChQYWdlJiwgTGlua0hhc2gsIGNvbnN0IFVSTCYsIGNvbnN0IEF0b21p
Y1N0cmluZyYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBhZGRWaXNpdGVkTGlu
ayhQYWdlJiwgTGlua0hhc2gpIGZpbmFsIHsgfQogfTsKIAogUmVmUHRyPFBvcHVwTWVudT4gRW1w
dHlDaHJvbWVDbGllbnQ6OmNyZWF0ZVBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqKSBjb25zdAog
ewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRW1wdHlQb3B1cE1lbnUoKSk7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRW1wdHlQb3B1cE1lbnUpOwogfQogCiBSZWZQdHI8U2VhcmNoUG9wdXBN
ZW51PiBFbXB0eUNocm9tZUNsaWVudDo6Y3JlYXRlU2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNs
aWVudCopIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFbXB0eVNlYXJjaFBvcHVw
TWVudSgpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFbXB0eVNlYXJjaFBvcHVwTWVudSk7
CiB9CiAKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKKwogc3RkOjp1bmlxdWVfcHRyPENv
bG9yQ2hvb3Nlcj4gRW1wdHlDaHJvbWVDbGllbnQ6OmNyZWF0ZUNvbG9yQ2hvb3NlcihDb2xvckNo
b29zZXJDbGllbnQqLCBjb25zdCBDb2xvciYpCiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CisK
ICNlbmRpZgogCiB2b2lkIEVtcHR5Q2hyb21lQ2xpZW50OjpydW5PcGVuUGFuZWwoRnJhbWUqLCBQ
YXNzUmVmUHRyPEZpbGVDaG9vc2VyPikKQEAgLTI3Niw3ICs2MTcsNyBAQCBQYXNzUmVmUHRyPEZy
YW1lTmV0d29ya2luZ0NvbnRleHQ+IEVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZU5ldHdv
cmtpbmdDb250ZQogICAgIHJldHVybiBQYXNzUmVmUHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHQ+
KCk7CiB9CiAKLXZvaWQgRW1wdHlUZXh0Q2hlY2tlckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZT
dHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0PiwgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYpCit2b2lkIEVtcHR5RWRpdG9yQ2xpZW50OjpFbXB0eVRleHRDaGVja2VyQ2xpZW50Ojpy
ZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhUZXh0Q2hlY2tpbmdSZXF1ZXN0JiwgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYpCiB7CiB9CiAKQEAgLTI4OCw0ICs2MjksNzAgQEAgdm9pZCBFbXB0eUVkaXRv
ckNsaWVudDo6cmVnaXN0ZXJSZWRvU3RlcChQYXNzUmVmUHRyPFVuZG9TdGVwPikKIHsKIH0KIAor
UmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IEVtcHR5U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyOjpj
cmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShQYWdlJiwgdW5zaWduZWQpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRW1wdHlTdG9yYWdlTmFtZXNwYWNlKTsKK30KKworUmVmUHRyPFN0
b3JhZ2VOYW1lc3BhY2U+IEVtcHR5U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyOjpjcmVhdGVMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UodW5zaWduZWQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RW1wdHlTdG9yYWdlTmFtZXNwYWNlKTsKK30KKworUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IEVt
cHR5U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyOjpjcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VO
YW1lc3BhY2UoU2VjdXJpdHlPcmlnaW4mLCB1bnNpZ25lZCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBFbXB0eVN0b3JhZ2VOYW1lc3BhY2UpOworfQorCit2b2lkIGZpbGxXaXRoRW1wdHlD
bGllbnRzKFBhZ2VDb25maWd1cmF0aW9uJiBwYWdlQ29uZmlndXJhdGlvbikKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8RW1wdHlDaHJvbWVDbGllbnQ+IGR1bW15Q2hyb21lQ2xpZW50Owor
ICAgIHBhZ2VDb25maWd1cmF0aW9uLmNocm9tZUNsaWVudCA9ICZkdW1teUNocm9tZUNsaWVudC5n
ZXQoKTsKKworI2lmIEVOQUJMRShBUFBMRV9QQVkpCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEVtcHR5UGF5bWVudENvb3JkaW5hdG9yQ2xpZW50PiBkdW1teVBheW1lbnRDb29yZGluYXRvckNs
aWVudDsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi5wYXltZW50Q29vcmRpbmF0b3JDbGllbnQgPSAm
ZHVtbXlQYXltZW50Q29vcmRpbmF0b3JDbGllbnQuZ2V0KCk7CisjZW5kaWYKKworI2lmIEVOQUJM
RShDT05URVhUX01FTlVTKQorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxFbXB0eUNvbnRleHRN
ZW51Q2xpZW50PiBkdW1teUNvbnRleHRNZW51Q2xpZW50OworICAgIHBhZ2VDb25maWd1cmF0aW9u
LmNvbnRleHRNZW51Q2xpZW50ID0gJmR1bW15Q29udGV4dE1lbnVDbGllbnQuZ2V0KCk7CisjZW5k
aWYKKworI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEVtcHR5RHJhZ0NsaWVudD4gZHVtbXlEcmFnQ2xpZW50OworICAgIHBhZ2VDb25maWd1cmF0aW9u
LmRyYWdDbGllbnQgPSAmZHVtbXlEcmFnQ2xpZW50LmdldCgpOworI2VuZGlmCisKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8RW1wdHlJbnNwZWN0b3JDbGllbnQ+IGR1bW15SW5zcGVjdG9yQ2xp
ZW50OworICAgIHBhZ2VDb25maWd1cmF0aW9uLmluc3BlY3RvckNsaWVudCA9ICZkdW1teUluc3Bl
Y3RvckNsaWVudC5nZXQoKTsKKworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxFbXB0eUZyYW1l
TG9hZGVyQ2xpZW50PiBkdW1teUZyYW1lTG9hZGVyQ2xpZW50OworICAgIHBhZ2VDb25maWd1cmF0
aW9uLmxvYWRlckNsaWVudEZvck1haW5GcmFtZSA9ICZkdW1teUZyYW1lTG9hZGVyQ2xpZW50Lmdl
dCgpOworCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEVtcHR5UHJvZ3Jlc3NUcmFja2VyQ2xp
ZW50PiBkdW1teVByb2dyZXNzVHJhY2tlckNsaWVudDsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi5w
cm9ncmVzc1RyYWNrZXJDbGllbnQgPSAmZHVtbXlQcm9ncmVzc1RyYWNrZXJDbGllbnQuZ2V0KCk7
CisKKyAgICBwYWdlQ29uZmlndXJhdGlvbi5iYWNrRm9yd2FyZENsaWVudCA9IGFkb3B0UmVmKCpu
ZXcgRW1wdHlCYWNrRm9yd2FyZENsaWVudCk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24uZGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEVtcHR5RGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQ+KCk7CisKKyAgICBwYWdlQ29uZmlndXJhdGlvbi5hcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZSA9IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjcmVhdGUoeyB9LCB7IH0pOworICAgIHBh
Z2VDb25maWd1cmF0aW9uLmRhdGFiYXNlUHJvdmlkZXIgPSBhZG9wdFJlZigqbmV3IEVtcHR5RGF0
YWJhc2VQcm92aWRlcik7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24ucGx1Z2luSW5mb1Byb3ZpZGVy
ID0gYWRvcHRSZWYoKm5ldyBFbXB0eVBsdWdpbkluZm9Qcm92aWRlcik7CisgICAgcGFnZUNvbmZp
Z3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyID0gYWRvcHRSZWYoKm5ldyBFbXB0eVN0
b3JhZ2VOYW1lc3BhY2VQcm92aWRlcik7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRl
bnRQcm92aWRlciA9IGFkb3B0UmVmKCpuZXcgRW1wdHlVc2VyQ29udGVudFByb3ZpZGVyKTsKKyAg
ICBwYWdlQ29uZmlndXJhdGlvbi52aXNpdGVkTGlua1N0b3JlID0gYWRvcHRSZWYoKm5ldyBFbXB0
eVZpc2l0ZWRMaW5rU3RvcmUpOworfQorCitVbmlxdWVSZWY8RWRpdG9yQ2xpZW50PiBjcmVhdGVF
bXB0eUVkaXRvckNsaWVudCgpCit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8RW1wdHlFZGl0
b3JDbGllbnQ+KCk7Cit9CisKK0RpYWdub3N0aWNMb2dnaW5nQ2xpZW50JiBlbXB0eURpYWdub3N0
aWNMb2dnaW5nQ2xpZW50KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RW1wdHlEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudD4gY2xpZW50OworICAgIHJldHVybiBjbGllbnQ7Cit9CisKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAppbmRleCA0OWM5YWY2NDBhMTRhNDA5YmU1
MTE2ZmViMWNmZjg5ZjZlMWNmMzYwLi4xYTFkNTNjMzc0MDhhYjk5YzYwZGYwZTJmN2Q4MmE0MWMx
YWVkNjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCkBAIC0yOSw2MjAgKzI5
LDE4MCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKLSNpbmNs
dWRlICJDb250ZXh0TWVudUNsaWVudC5oIgotI2luY2x1ZGUgIkRldmljZU1vdGlvbkNsaWVudC5o
IgotI2luY2x1ZGUgIkRldmljZU9yaWVudGF0aW9uQ2xpZW50LmgiCi0jaW5jbHVkZSAiRGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCi0jaW5j
bHVkZSAiRHJhZ0NsaWVudC5oIgotI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgotI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZvY3VzRGlyZWN0aW9uLmgiCi0jaW5jbHVkZSAiRnJh
bWVMb2FkZXJDbGllbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKLSNpbmNsdWRl
ICJQcm9ncmVzc1RyYWNrZXJDbGllbnQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCi0j
aW5jbHVkZSAiU2Vzc2lvbklELmgiCi0jaW5jbHVkZSAiU29ja2V0UHJvdmlkZXIuaCIKLSNpbmNs
dWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgotI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RvcmUuaCIK
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+Ci0KLSNpZiBFTkFCTEUoVVNFUl9NRVNT
QUdFX0hBTkRMRVJTKQotI2luY2x1ZGUgIlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IuaCIK
LSNlbmRpZgotCi0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSNpbmNsdWRlICJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb24uaCIKLSNlbmRpZgotCi0vKgotIFRoaXMgZmlsZSBob2xkcyBl
bXB0eSBDbGllbnQgc3R1YnMgZm9yIHVzZSBieSBXZWJDb3JlLgotIFZpZXdsZXNzIGVsZW1lbnQg
bmVlZHMgdG8gY3JlYXRlIGEgZHVtbXkgUGFnZS0+RnJhbWUtPkZyYW1lVmlldyB0cmVlIGZvciB1
c2UgaW4gcGFyc2luZyBvciBleGVjdXRpbmcgSmF2YVNjcmlwdC4KLSBUaGlzIHRyZWUgZGVwZW5k
cyBoZWF2aWx5IG9uIENsaWVudHMgKHVzdWFsbHkgcHJvdmlkZWQgYnkgV2ViS2l0IGNsYXNzZXMp
LgotCi0gVGhpcyBmaWxlIHdhcyBmaXJzdCBjcmVhdGVkIGZvciBTVkdJbWFnZSBhcyBpdCBoYWQg
bm8gd2F5IHRvIGFjY2VzcyB0aGUgY3VycmVudCBQYWdlIChub3Igc2hvdWxkIGl0LAotIHNpbmNl
IEltYWdlcyBhcmUgbm90IHRpZWQgdG8gYSBwYWdlKS4KLSBTZWUgaHR0cDovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk3MSBmb3IgdGhlIG9yaWdpbmFsIGRpc2N1c3Npb24gYWJv
dXQgdGhpcyBmaWxlLgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAotIElkZWFsbHksIHdo
ZW5ldmVyIHlvdSBjaGFuZ2UgYSBDbGllbnQgY2xhc3MsIHlvdSBzaG91bGQgYWRkIGEgc3R1YiBo
ZXJlLgotIEJyaXR0bGUsIHllcy4gIFVuZm9ydHVuYXRlLCB5ZXMuICBIb3BlZnVsbHkgdGVtcG9y
YXJ5LgotKi8KKy8vIEVtcHR5IGNsaWVudCBjbGFzc2VzIGZvciB1c2UgYnkgV2ViQ29yZS4KKy8v
CisvLyBGaXJzdCBjcmVhdGVkIGZvciBTVkdJbWFnZSBhcyBpdCBoYWQgbm8gd2F5IHRvIGFjY2Vz
cyB0aGUgY3VycmVudCBQYWdlIChub3Igc2hvdWxkIGl0LCBzaW5jZSBJbWFnZXMgYXJlIG5vdCB0
aWVkIHRvIGEgcGFnZSkuCisvLyBTZWUgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTk3MSBmb3IgdGhlIG9yaWdpbmFsIGRpc2N1c3Npb24gYWJvdXQgdGhpcyBmaWxlLgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFBhZ2U7CitjbGFzcyBEaWFnbm9zdGljTG9n
Z2luZ0NsaWVudDsKK2NsYXNzIEVkaXRvckNsaWVudDsKIGNsYXNzIFBhZ2VDb25maWd1cmF0aW9u
OwogCiBjbGFzcyBFbXB0eUNocm9tZUNsaWVudCA6IHB1YmxpYyBDaHJvbWVDbGllbnQgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHZpcnR1YWwgfkVtcHR5Q2hy
b21lQ2xpZW50KCkgeyB9CisKICAgICB2b2lkIGNocm9tZURlc3Ryb3llZCgpIG92ZXJyaWRlIHsg
fQogCi0gICAgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlIHsg
fQotICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0
KCk7IH0KKyAgICB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9
CisgICAgRmxvYXRSZWN0IHdpbmRvd1JlY3QoKSBmaW5hbCB7IHJldHVybiBGbG9hdFJlY3QoKTsg
fQogCi0gICAgRmxvYXRSZWN0IHBhZ2VSZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0
KCk7IH0KKyAgICBGbG9hdFJlY3QgcGFnZVJlY3QoKSBmaW5hbCB7IHJldHVybiBGbG9hdFJlY3Qo
KTsgfQogCi0gICAgdm9pZCBmb2N1cygpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgdW5mb2N1cygp
IG92ZXJyaWRlIHsgfQorICAgIHZvaWQgZm9jdXMoKSBmaW5hbCB7IH0KKyAgICB2b2lkIHVuZm9j
dXMoKSBmaW5hbCB7IH0KIAotICAgIGJvb2wgY2FuVGFrZUZvY3VzKEZvY3VzRGlyZWN0aW9uKSBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQgdGFrZUZvY3VzKEZvY3VzRGlyZWN0
aW9uKSBvdmVycmlkZSB7IH0KKyAgICBib29sIGNhblRha2VGb2N1cyhGb2N1c0RpcmVjdGlvbikg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHRha2VGb2N1cyhGb2N1c0RpcmVjdGlv
bikgZmluYWwgeyB9CiAKLSAgICB2b2lkIGZvY3VzZWRFbGVtZW50Q2hhbmdlZChFbGVtZW50Kikg
b3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBmb2N1c2VkRnJhbWVDaGFuZ2VkKEZyYW1lKikgb3ZlcnJp
ZGUgeyB9CisgICAgdm9pZCBmb2N1c2VkRWxlbWVudENoYW5nZWQoRWxlbWVudCopIGZpbmFsIHsg
fQorICAgIHZvaWQgZm9jdXNlZEZyYW1lQ2hhbmdlZChGcmFtZSopIGZpbmFsIHsgfQogCi0gICAg
UGFnZSogY3JlYXRlV2luZG93KEZyYW1lKiwgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGNvbnN0
IFdpbmRvd0ZlYXR1cmVzJiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYpIG92ZXJyaWRlIHsgcmV0
dXJuIG51bGxwdHI7IH0KLSAgICB2b2lkIHNob3coKSBvdmVycmlkZSB7IH0KKyAgICBQYWdlKiBj
cmVhdGVXaW5kb3coRnJhbWUqLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgY29uc3QgV2luZG93
RmVhdHVyZXMmLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJikgZmluYWwgeyByZXR1cm4gbnVsbHB0
cjsgfQorICAgIHZvaWQgc2hvdygpIGZpbmFsIHsgfQogCi0gICAgYm9vbCBjYW5SdW5Nb2RhbCgp
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBydW5Nb2RhbCgpIG92ZXJyaWRl
IHsgfQorICAgIGJvb2wgY2FuUnVuTW9kYWwoKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZvaWQgcnVuTW9kYWwoKSBmaW5hbCB7IH0KIAotICAgIHZvaWQgc2V0VG9vbGJhcnNWaXNpYmxl
KGJvb2wpIG92ZXJyaWRlIHsgfQotICAgIGJvb2wgdG9vbGJhcnNWaXNpYmxlKCkgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNldFRvb2xiYXJzVmlzaWJsZShib29sKSBmaW5h
bCB7IH0KKyAgICBib29sIHRvb2xiYXJzVmlzaWJsZSgpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9
CiAKLSAgICB2b2lkIHNldFN0YXR1c2JhclZpc2libGUoYm9vbCkgb3ZlcnJpZGUgeyB9Ci0gICAg
Ym9vbCBzdGF0dXNiYXJWaXNpYmxlKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
b2lkIHNldFN0YXR1c2JhclZpc2libGUoYm9vbCkgZmluYWwgeyB9CisgICAgYm9vbCBzdGF0dXNi
YXJWaXNpYmxlKCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZvaWQgc2V0U2Nyb2xs
YmFyc1Zpc2libGUoYm9vbCkgb3ZlcnJpZGUgeyB9Ci0gICAgYm9vbCBzY3JvbGxiYXJzVmlzaWJs
ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBzZXRTY3JvbGxiYXJzVmlz
aWJsZShib29sKSBmaW5hbCB7IH0KKyAgICBib29sIHNjcm9sbGJhcnNWaXNpYmxlKCkgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZvaWQgc2V0TWVudWJhclZpc2libGUoYm9vbCkgb3Zl
cnJpZGUgeyB9Ci0gICAgYm9vbCBtZW51YmFyVmlzaWJsZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdm9pZCBzZXRNZW51YmFyVmlzaWJsZShib29sKSBmaW5hbCB7IH0KKyAgICBi
b29sIG1lbnViYXJWaXNpYmxlKCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZvaWQg
c2V0UmVzaXphYmxlKGJvb2wpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgc2V0UmVzaXphYmxlKGJv
b2wpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3Vy
Y2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25z
dCBTdHJpbmcmKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVz
c2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCwgdW5zaWdu
ZWQsIGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgfQogCi0gICAgYm9vbCBjYW5SdW5CZWZvcmVVbmxv
YWRDb25maXJtUGFuZWwoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgcnVu
QmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKGNvbnN0IFN0cmluZyYsIEZyYW1lKikgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgY2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVs
KCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHJ1bkJlZm9yZVVubG9hZENvbmZp
cm1QYW5lbChjb25zdCBTdHJpbmcmLCBGcmFtZSopIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIAot
ICAgIHZvaWQgY2xvc2VXaW5kb3dTb29uKCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBjbG9zZVdp
bmRvd1Nvb24oKSBmaW5hbCB7IH0KIAotICAgIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KEZyYW1l
KiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGUgeyB9Ci0gICAgYm9vbCBydW5KYXZhU2NyaXB0Q29u
ZmlybShGcmFtZSosIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgYm9vbCBydW5KYXZhU2NyaXB0UHJvbXB0KEZyYW1lKiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiwgU3RyaW5nJikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHJ1
bkphdmFTY3JpcHRBbGVydChGcmFtZSosIGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgfQorICAgIGJv
b2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oRnJhbWUqLCBjb25zdCBTdHJpbmcmKSBmaW5hbCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIGJvb2wgcnVuSmF2YVNjcmlwdFByb21wdChGcmFtZSosIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFN0cmluZyYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9
CiAKLSAgICBib29sIHNlbGVjdEl0ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHNlbGVjdEl0ZW1BbGlnbm1lbnRGb2xsb3dz
TWVudVdyaXRpbmdEaXJlY3Rpb24oKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJv
b2wgaGFzT3BlbmVkUG9wdXAoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAg
IFJlZlB0cjxQb3B1cE1lbnU+IGNyZWF0ZVBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqKSBjb25z
dCBvdmVycmlkZTsKLSAgICBSZWZQdHI8U2VhcmNoUG9wdXBNZW51PiBjcmVhdGVTZWFyY2hQb3B1
cE1lbnUoUG9wdXBNZW51Q2xpZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBzZWxlY3RJ
dGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJhbCgpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgYm9vbCBzZWxlY3RJdGVtQWxpZ25tZW50Rm9sbG93c01lbnVXcml0aW5nRGlyZWN0aW9uKCkg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGhhc09wZW5lZFBvcHVwKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBSZWZQdHI8UG9wdXBNZW51PiBjcmVhdGVQb3B1
cE1lbnUoUG9wdXBNZW51Q2xpZW50KikgY29uc3QgZmluYWw7CisgICAgUmVmUHRyPFNlYXJjaFBv
cHVwTWVudT4gY3JlYXRlU2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCopIGNvbnN0IGZp
bmFsOwogCi0gICAgdm9pZCBzZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRl
IHsgfQorICAgIHZvaWQgc2V0U3RhdHVzYmFyVGV4dChjb25zdCBTdHJpbmcmKSBmaW5hbCB7IH0K
IAotICAgIEtleWJvYXJkVUlNb2RlIGtleWJvYXJkVUlNb2RlKCkgb3ZlcnJpZGUgeyByZXR1cm4g
S2V5Ym9hcmRBY2Nlc3NEZWZhdWx0OyB9CisgICAgS2V5Ym9hcmRVSU1vZGUga2V5Ym9hcmRVSU1v
ZGUoKSBmaW5hbCB7IHJldHVybiBLZXlib2FyZEFjY2Vzc0RlZmF1bHQ7IH0KIAotICAgIHZvaWQg
aW52YWxpZGF0ZVJvb3RWaWV3KGNvbnN0IEludFJlY3QmKSBvdmVycmlkZSB7IH0KKyAgICB2b2lk
IGludmFsaWRhdGVSb290Vmlldyhjb25zdCBJbnRSZWN0JikgZmluYWwgeyB9CiAgICAgdm9pZCBp
bnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyhjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGUgeyB9
Ci0gICAgdm9pZCBpbnZhbGlkYXRlQ29udGVudHNGb3JTbG93U2Nyb2xsKGNvbnN0IEludFJlY3Qm
KSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHNjcm9sbChjb25zdCBJbnRTaXplJiwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGludmFsaWRhdGVD
b250ZW50c0ZvclNsb3dTY3JvbGwoY29uc3QgSW50UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQg
c2Nyb2xsKGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpIGZp
bmFsIHsgfQogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICB2b2lkIGRlbGVnYXRl
ZFNjcm9sbFJlcXVlc3RlZChjb25zdCBJbnRQb2ludCYpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQg
ZGVsZWdhdGVkU2Nyb2xsUmVxdWVzdGVkKGNvbnN0IEludFBvaW50JikgZmluYWwgeyB9CiAjZW5k
aWYKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICYmICFVU0UoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUVfVElNRVIpCi0gICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIG92ZXJy
aWRlIHsgfQorICAgIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSBmaW5hbCB7IH0KICNlbmRpZgog
Ci0gICAgSW50UG9pbnQgc2NyZWVuVG9Sb290Vmlldyhjb25zdCBJbnRQb2ludCYgcCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gcDsgfQotICAgIEludFJlY3Qgcm9vdFZpZXdUb1NjcmVlbihjb25z
dCBJbnRSZWN0JiByKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiByOyB9CisgICAgSW50UG9pbnQg
c2NyZWVuVG9Sb290Vmlldyhjb25zdCBJbnRQb2ludCYgcCkgY29uc3QgZmluYWwgeyByZXR1cm4g
cDsgfQorICAgIEludFJlY3Qgcm9vdFZpZXdUb1NjcmVlbihjb25zdCBJbnRSZWN0JiByKSBjb25z
dCBmaW5hbCB7IHJldHVybiByOyB9CiAjaWYgUExBVEZPUk0oSU9TKQotICAgIEludFBvaW50IGFj
Y2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JiBwKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBwOyB9OwotICAgIEludFJlY3Qgcm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlT
Y3JlZW4oY29uc3QgSW50UmVjdCYgcikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gcjsgfTsKKyAg
ICBJbnRQb2ludCBhY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyhjb25zdCBJbnRQb2ludCYg
cCkgY29uc3QgZmluYWwgeyByZXR1cm4gcDsgfTsKKyAgICBJbnRSZWN0IHJvb3RWaWV3VG9BY2Nl
c3NpYmlsaXR5U2NyZWVuKGNvbnN0IEludFJlY3QmIHIpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHI7
IH07CiAjZW5kaWYKLSAgICBQbGF0Zm9ybVBhZ2VDbGllbnQgcGxhdGZvcm1QYWdlQ2xpZW50KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQotICAgIHZvaWQgY29udGVudHNTaXplQ2hhbmdl
ZChGcmFtZSosIGNvbnN0IEludFNpemUmKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICBQbGF0Zm9y
bVBhZ2VDbGllbnQgcGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3QgZmluYWwgeyByZXR1cm4gMDsg
fQorICAgIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChGcmFtZSosIGNvbnN0IEludFNpemUmKSBj
b25zdCBmaW5hbCB7IH0KIAotICAgIHZvaWQgc2Nyb2xsYmFyc01vZGVEaWRDaGFuZ2UoKSBjb25z
dCBvdmVycmlkZSB7IH0KLSAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhp
dFRlc3RSZXN1bHQmLCB1bnNpZ25lZCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBzY3JvbGxiYXJz
TW9kZURpZENoYW5nZSgpIGNvbnN0IGZpbmFsIHsgfQorICAgIHZvaWQgbW91c2VEaWRNb3ZlT3Zl
ckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkKSBmaW5hbCB7IH0KIAotICAg
IHZvaWQgc2V0VG9vbFRpcChjb25zdCBTdHJpbmcmLCBUZXh0RGlyZWN0aW9uKSBvdmVycmlkZSB7
IH0KKyAgICB2b2lkIHNldFRvb2xUaXAoY29uc3QgU3RyaW5nJiwgVGV4dERpcmVjdGlvbikgZmlu
YWwgeyB9CiAKLSAgICB2b2lkIHByaW50KEZyYW1lKikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBw
cmludChGcmFtZSopIGZpbmFsIHsgfQogCi0gICAgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEo
RnJhbWUqLCBjb25zdCBTdHJpbmcmLCBEYXRhYmFzZURldGFpbHMpIG92ZXJyaWRlIHsgfQorICAg
IHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiwgY29uc3QgU3RyaW5nJiwgRGF0YWJh
c2VEZXRhaWxzKSBmaW5hbCB7IH0KIAotICAgIHZvaWQgcmVhY2hlZE1heEFwcENhY2hlU2l6ZShp
bnQ2NF90KSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3Jp
Z2luUXVvdGEoU2VjdXJpdHlPcmlnaW4qLCBpbnQ2NF90KSBvdmVycmlkZSB7IH0KKyAgICB2b2lk
IHJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCkgZmluYWwgeyB9CisgICAgdm9pZCByZWFj
aGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKFNlY3VyaXR5T3JpZ2luKiwgaW50NjRfdCkg
ZmluYWwgeyB9CiAKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29sb3JDaG9vc2VyPiBjcmVhdGVDb2xvckNob29zZXIoQ29sb3JDaG9vc2VyQ2xpZW50
KiwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29sb3JDaG9v
c2VyPiBjcmVhdGVDb2xvckNob29zZXIoQ29sb3JDaG9vc2VyQ2xpZW50KiwgY29uc3QgQ29sb3Im
KSBmaW5hbDsKICNlbmRpZgogCi0gICAgdm9pZCBydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVm
UHRyPEZpbGVDaG9vc2VyPikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBsb2FkSWNvbkZvckZpbGVzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiwgRmlsZUljb25Mb2FkZXImKSBvdmVycmlkZSB7IH0KKyAgICB2
b2lkIHJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQdHI8RmlsZUNob29zZXI+KSBmaW5hbDsK
KyAgICB2b2lkIGxvYWRJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBGaWxlSWNv
bkxvYWRlciYpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBlbGVtZW50RGlkRm9jdXMoY29uc3QgTm9k
ZSopIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZWxlbWVudERpZEJsdXIoY29uc3QgTm9kZSopIG92
ZXJyaWRlIHsgfQorICAgIHZvaWQgZWxlbWVudERpZEZvY3VzKGNvbnN0IE5vZGUqKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGVsZW1lbnREaWRCbHVyKGNvbnN0IE5vZGUqKSBmaW5hbCB7IH0KIAogI2lm
ICFQTEFURk9STShJT1MpCi0gICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikgb3ZlcnJp
ZGUgeyB9Ci0gICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3Zl
cnJpZGUgeyB9CisgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikgZmluYWwgeyB9Cisg
ICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgZmluYWwgeyB9CiAj
ZW5kaWYKIAotICAgIHZvaWQgc2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmKSBjb25z
dCBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0
JikgY29uc3QgZmluYWwgeyB9CiAKLSAgICB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZy
YW1lKiwgR3JhcGhpY3NMYXllciopIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgYXR0YWNoVmlld092
ZXJsYXlHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopIG92ZXJyaWRlIHsgfQot
ICAgIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpIG92ZXJyaWRl
IHsgfQotICAgIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKSBvdmVycmlkZSB7
IH0KKyAgICB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXll
ciopIGZpbmFsIHsgfQorICAgIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEZy
YW1lKiwgR3JhcGhpY3NMYXllciopIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0TmVlZHNPbmVTaG90
RHJhd2luZ1N5bmNocm9uaXphdGlvbigpIGZpbmFsIHsgfQorICAgIHZvaWQgc2NoZWR1bGVDb21w
b3NpdGluZ0xheWVyRmx1c2goKSBmaW5hbCB7IH0KIAogI2lmIFBMQVRGT1JNKFdJTikKLSAgICB2
b2lkIHNldExhc3RTZXRDdXJzb3JUb0N1cnJlbnRDdXJzb3IoKSBvdmVycmlkZSB7IH0KLSAgICB2
b2lkIEFYU3RhcnRGcmFtZUxvYWQoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIEFYRmluaXNoRnJh
bWVMb2FkKCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBzZXRMYXN0U2V0Q3Vyc29yVG9DdXJyZW50
Q3Vyc29yKCkgZmluYWwgeyB9CisgICAgdm9pZCBBWFN0YXJ0RnJhbWVMb2FkKCkgZmluYWwgeyB9
CisgICAgdm9pZCBBWEZpbmlzaEZyYW1lTG9hZCgpIGZpbmFsIHsgfQogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShJT1MpCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgdm9pZCBkaWRQ
cmV2ZW50RGVmYXVsdEZvckV2ZW50KCkgb3ZlcnJpZGUgeyB9Ci0jZW5kaWYKLSAgICB2b2lkIGRp
ZFJlY2VpdmVNb2JpbGVEb2NUeXBlKGJvb2wpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgc2V0TmVl
ZHNTY3JvbGxOb3RpZmljYXRpb25zKEZyYW1lKiwgYm9vbCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9p
ZCBvYnNlcnZlZENvbnRlbnRDaGFuZ2UoRnJhbWUqKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGNs
ZWFyQ29udGVudENoYW5nZU9ic2VydmVycyhGcmFtZSopIG92ZXJyaWRlIHsgfQotICAgIHZvaWQg
bm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1lKEZyYW1lKikgb3ZlcnJpZGUg
eyB9Ci0gICAgdm9pZCBkaWRMYXlvdXQoTGF5b3V0VHlwZSkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9p
ZCBkaWRTdGFydE92ZXJmbG93U2Nyb2xsKCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBkaWRFbmRP
dmVyZmxvd1Njcm9sbCgpIG92ZXJyaWRlIHsgfQotCi0gICAgdm9pZCBzdXBwcmVzc0Zvcm1Ob3Rp
ZmljYXRpb25zKCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCByZXN0b3JlRm9ybU5vdGlmaWNhdGlv
bnMoKSBvdmVycmlkZSB7IH0KLQotICAgIHZvaWQgYWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcihO
b2RlKiwgUGxhdGZvcm1MYXllciosIFBsYXRmb3JtTGF5ZXIqLCBjb25zdCBJbnRTaXplJiwgYm9v
bCwgYm9vbCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCByZW1vdmVTY3JvbGxpbmdMYXllcihOb2Rl
KiwgUGxhdGZvcm1MYXllciosIFBsYXRmb3JtTGF5ZXIqKSBvdmVycmlkZSB7IH0KLQotICAgIHZv
aWQgd2ViQXBwT3JpZW50YXRpb25zVXBkYXRlZCgpIG92ZXJyaWRlIHsgfTsKLSAgICB2b2lkIHNo
b3dQbGF5YmFja1RhcmdldFBpY2tlcihib29sKSBvdmVycmlkZSB7IH07Ci0jZW5kaWYgLy8gUExB
VEZPUk0oSU9TKQotCi0jaWYgRU5BQkxFKE9SSUVOVEFUSU9OX0VWRU5UUykKLSAgICBpbnQgZGV2
aWNlT3JpZW50YXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9Ci0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKElPUykKLSAgICBib29sIGlzU3RvcHBpbmcoKSBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQotI2VuZGlmCi0KLSAgICB2b2lkIHdoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQo
Ym9vbCkgb3ZlcnJpZGUgeyB9Ci0gICAgCi0gICAgYm9vbCBpc0VtcHR5Q2hyb21lQ2xpZW50KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCBkaWRBc3NvY2lhdGVG
b3JtQ29udHJvbHMoY29uc3QgVmVjdG9yPFJlZlB0cjxFbGVtZW50Pj4mKSBvdmVycmlkZSB7IH0K
LSAgICBib29sIHNob3VsZE5vdGlmeU9uRm9ybUNoYW5nZXMoKSBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQotfTsKLQotLy8gRklYTUUgKGJ1ZyAxMTYyMzMpOiBHZXQgcmlkIG9mIEVtcHR5RnJh
bWVMb2FkZXJDbGllbnQuIEl0IGlzIGEgdHJhdmVzdHkuCi0KLWNsYXNzIEVtcHR5RnJhbWVMb2Fk
ZXJDbGllbnQgOiBwdWJsaWMgRnJhbWVMb2FkZXJDbGllbnQgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEVtcHR5RnJhbWVMb2FkZXJDbGllbnQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB+
RW1wdHlGcmFtZUxvYWRlckNsaWVudCgpIHsgIH0KLSAgICB2b2lkIGZyYW1lTG9hZGVyRGVzdHJv
eWVkKCkgb3ZlcnJpZGUgeyB9Ci0KLSAgICBib29sIGhhc1dlYlZpZXcoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9IC8vIG1haW5seSBmb3IgYXNzZXJ0aW9ucwotCi0gICAgdm9pZCBt
YWtlUmVwcmVzZW50YXRpb24oRG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZSB7IH0KLSNpZiBQTEFU
Rk9STShJT1MpCi0gICAgYm9vbCBmb3JjZUxheW91dE9uUmVzdG9yZUZyb21QYWdlQ2FjaGUoKSBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCi0gICAgdm9pZCBmb3JjZUxheW91dEZv
ck5vbkhUTUwoKSBvdmVycmlkZSB7IH0KLQotICAgIHZvaWQgc2V0Q29waWVzT25TY3JvbGwoKSBv
dmVycmlkZSB7IH0KLQotICAgIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50MigpIG92ZXJyaWRlIHsg
fQotICAgIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50MygpIG92ZXJyaWRlIHsgfQotCi0gICAgdm9p
ZCBjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoRG9jdW1lbnRMb2FkZXIqLCBTZXNz
aW9uSUQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBv
dmVycmlkZSB7IH0KLQotICAgIHZvaWQgYXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3Qo
dW5zaWduZWQgbG9uZywgRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBv
dmVycmlkZSB7IH0KLSAgICBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKERvY3VtZW50
TG9hZGVyKiwgdW5zaWduZWQgbG9uZykgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
b2lkIGRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9u
ZywgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIG92ZXJyaWRlIHsg
fQotICAgIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9j
dW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYpIG92ZXJyaWRlIHsgfQotI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0sp
Ci0gICAgYm9vbCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKERvY3VtZW50
TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgY29uc3QgUHJvdGVjdGlvblNwYWNlJikgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIFJldGFp
blB0cjxDRkRpY3Rpb25hcnlSZWY+IGNvbm5lY3Rpb25Qcm9wZXJ0aWVzKERvY3VtZW50TG9hZGVy
KiwgdW5zaWduZWQgbG9uZykgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQotI2VuZGlmCi0K
LSAgICB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVJlc3BvbnNlKERvY3VtZW50TG9hZGVyKiwgdW5z
aWduZWQgbG9uZywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIG92ZXJyaWRlIHsgfQotICAgIHZv
aWQgZGlzcGF0Y2hEaWRSZWNlaXZlQ29udGVudExlbmd0aChEb2N1bWVudExvYWRlciosIHVuc2ln
bmVkIGxvbmcsIGludCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExv
YWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nKSBvdmVycmlkZSB7IH0KLSNpZiBF
TkFCTEUoREFUQV9ERVRFQ1RJT04pCi0gICAgdm9pZCBkaXNwYXRjaERpZEZpbmlzaERhdGFEZXRl
Y3Rpb24oTlNBcnJheSAqKSBvdmVycmlkZSB7IH0KLSNlbmRpZgotICAgIHZvaWQgZGlzcGF0Y2hE
aWRGYWlsTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291
cmNlRXJyb3ImKSBvdmVycmlkZSB7IH0KLSAgICBib29sIGRpc3BhdGNoRGlkTG9hZFJlc291cmNl
RnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGludCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
LQotICAgIHZvaWQgZGlzcGF0Y2hEaWREaXNwYXRjaE9ubG9hZEV2ZW50cygpIG92ZXJyaWRlIHsg
fQotICAgIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25h
bExvYWQoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGRpc3BhdGNoRGlkQ2FuY2VsQ2xpZW50UmVk
aXJlY3QoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGRpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRS
ZWRpcmVjdChjb25zdCBVUkwmLCBkb3VibGUsIGRvdWJsZSkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9p
ZCBkaXNwYXRjaERpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZSgpIG92ZXJyaWRlIHsgfQotICAg
IHZvaWQgZGlzcGF0Y2hEaWRQdXNoU3RhdGVXaXRoaW5QYWdlKCkgb3ZlcnJpZGUgeyB9Ci0gICAg
dm9pZCBkaXNwYXRjaERpZFJlcGxhY2VTdGF0ZVdpdGhpblBhZ2UoKSBvdmVycmlkZSB7IH0KLSAg
ICB2b2lkIGRpc3BhdGNoRGlkUG9wU3RhdGVXaXRoaW5QYWdlKCkgb3ZlcnJpZGUgeyB9Ci0gICAg
dm9pZCBkaXNwYXRjaFdpbGxDbG9zZSgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZGlzcGF0Y2hE
aWRSZWNlaXZlSWNvbigpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZGlzcGF0Y2hEaWRTdGFydFBy
b3Zpc2lvbmFsTG9hZCgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZl
VGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQg
ZGlzcGF0Y2hEaWRDb21taXRMb2FkKHN0ZDo6b3B0aW9uYWw8SGFzSW5zZWN1cmVDb250ZW50Pikg
b3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQoY29u
c3QgUmVzb3VyY2VFcnJvciYpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZGlzcGF0Y2hEaWRGYWls
TG9hZChjb25zdCBSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBkaXNwYXRj
aERpZEZpbmlzaERvY3VtZW50TG9hZCgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZGlzcGF0Y2hE
aWRGaW5pc2hMb2FkKCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBkaXNwYXRjaERpZFJlYWNoTGF5
b3V0TWlsZXN0b25lKExheW91dE1pbGVzdG9uZXMpIG92ZXJyaWRlIHsgfQotCi0gICAgRnJhbWUq
IGRpc3BhdGNoQ3JlYXRlUGFnZShjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJikgb3ZlcnJpZGUgeyBy
ZXR1cm4gbnVsbHB0cjsgfQotICAgIHZvaWQgZGlzcGF0Y2hTaG93KCkgb3ZlcnJpZGUgeyB9Ci0K
LSAgICB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIEZyYW1lUG9saWN5RnVuY3Rpb24pIG92
ZXJyaWRlIHsgfQotICAgIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rp
b24oY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3NS
ZWZQdHI8Rm9ybVN0YXRlPiwgY29uc3QgU3RyaW5nJiwgRnJhbWVQb2xpY3lGdW5jdGlvbikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24o
Y29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3NSZWZQ
dHI8Rm9ybVN0YXRlPiwgRnJhbWVQb2xpY3lGdW5jdGlvbikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBj
YW5jZWxQb2xpY3lDaGVjaygpIG92ZXJyaWRlIHsgfQotCi0gICAgdm9pZCBkaXNwYXRjaFVuYWJs
ZVRvSW1wbGVtZW50UG9saWN5KGNvbnN0IFJlc291cmNlRXJyb3ImKSBvdmVycmlkZSB7IH0KLQot
ICAgIHZvaWQgZGlzcGF0Y2hXaWxsU2VuZFN1Ym1pdEV2ZW50KFBhc3NSZWZQdHI8Rm9ybVN0YXRl
Pikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKFBhc3NSZWZQdHI8
Rm9ybVN0YXRlPiwgRnJhbWVQb2xpY3lGdW5jdGlvbikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHJl
dmVydFRvUHJvdmlzaW9uYWxTdGF0ZShEb2N1bWVudExvYWRlciopIG92ZXJyaWRlIHsgfQotICAg
IHZvaWQgc2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJj
ZUVycm9yJikgb3ZlcnJpZGUgeyB9Ci0KLSAgICB2b2lkIHNldE1haW5GcmFtZURvY3VtZW50UmVh
ZHkoYm9vbCkgb3ZlcnJpZGUgeyB9Ci0KLSAgICB2b2lkIHN0YXJ0RG93bmxvYWQoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lID0gU3RyaW5nKCkpIG92
ZXJyaWRlIHsgVU5VU0VEX1BBUkFNKHN1Z2dlc3RlZE5hbWUpOyB9Ci0KLSAgICB2b2lkIHdpbGxD
aGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciopIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZGlkQ2hh
bmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZSB7IH0KLQotICAgIHZvaWQgd2lsbFJl
cGxhY2VNdWx0aXBhcnRDb250ZW50KCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBkaWRSZXBsYWNl
TXVsdGlwYXJ0Q29udGVudCgpIG92ZXJyaWRlIHsgfQotCi0gICAgdm9pZCBjb21taXR0ZWRMb2Fk
KERvY3VtZW50TG9hZGVyKiwgY29uc3QgY2hhciosIGludCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9p
ZCBmaW5pc2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZSB7IH0KLQotICAgIFJl
c291cmNlRXJyb3IgY2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jikgb3ZlcnJp
ZGUgeyByZXR1cm4gUmVzb3VyY2VFcnJvcihSZXNvdXJjZUVycm9yOjpUeXBlOjpDYW5jZWxsYXRp
b24pOyB9Ci0gICAgUmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0Jikgb3ZlcnJpZGUgeyByZXR1cm4geyB9OyB9Ci0gICAgUmVzb3VyY2VFcnJvciBibG9ja2Vk
QnlDb250ZW50QmxvY2tlckVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIG92ZXJyaWRlIHsg
cmV0dXJuIHsgfTsgfQotICAgIFJlc291cmNlRXJyb3IgY2Fubm90U2hvd1VSTEVycm9yKGNvbnN0
IFJlc291cmNlUmVxdWVzdCYpIG92ZXJyaWRlIHsgcmV0dXJuIHsgfTsgfQotICAgIFJlc291cmNl
RXJyb3IgaW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVl
c3QmKSBvdmVycmlkZSB7IHJldHVybiB7IH07IH0KLSNpZiBFTkFCTEUoQ09OVEVOVF9GSUxURVJJ
TkcpCi0gICAgUmVzb3VyY2VFcnJvciBibG9ja2VkQnlDb250ZW50RmlsdGVyRXJyb3IoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0Jikgb3ZlcnJpZGUgeyByZXR1cm4geyB9OyB9Ci0jZW5kaWYKLQotICAg
IFJlc291cmNlRXJyb3IgY2Fubm90U2hvd01JTUVUeXBlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpIG92ZXJyaWRlIHsgcmV0dXJuIHsgfTsgfQotICAgIFJlc291cmNlRXJyb3IgZmlsZURv
ZXNOb3RFeGlzdEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBvdmVycmlkZSB7IHJldHVy
biB7IH07IH0KLSAgICBSZXNvdXJjZUVycm9yIHBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYpIG92ZXJyaWRlIHsgcmV0dXJuIHsgfTsgfQotCi0gICAgYm9v
bCBzaG91bGRGYWxsQmFjayhjb25zdCBSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KLQotICAgIGJvb2wgY2FuSGFuZGxlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVl
c3QmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgY2FuU2hvd01J
TUVUeXBlKGNvbnN0IFN0cmluZyYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgYm9vbCBjYW5TaG93TUlNRVR5cGVBc0hUTUwoY29uc3QgU3RyaW5nJikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJM
U2NoZW1lKGNvbnN0IFN0cmluZyYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgU3RyaW5nIGdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KLQotICAgIHZvaWQgZnJhbWVM
b2FkQ29tcGxldGVkKCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCByZXN0b3JlVmlld1N0YXRlKCkg
b3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBwcm92aXNpb25hbExvYWRTdGFydGVkKCkgb3ZlcnJpZGUg
eyB9Ci0gICAgdm9pZCBkaWRGaW5pc2hMb2FkKCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBwcmVw
YXJlRm9yRGF0YVNvdXJjZVJlcGxhY2VtZW50KCkgb3ZlcnJpZGUgeyB9Ci0KLSAgICBSZWY8RG9j
dW1lbnRMb2FkZXI+IGNyZWF0ZURvY3VtZW50TG9hZGVyKGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFN1YnN0aXR1dGVEYXRhJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1cGRhdGVDYWNoZWRE
b2N1bWVudExvYWRlcihEb2N1bWVudExvYWRlciYpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgc2V0
VGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYsIGNvbnN0IFVSTCYpIG92ZXJyaWRlIHsg
fQotCi0gICAgU3RyaW5nIHVzZXJBZ2VudChjb25zdCBVUkwmKSBvdmVycmlkZSB7IHJldHVybiBl
bXB0eVN0cmluZygpOyB9Ci0KLSAgICB2b2lkIHNhdmVQbGF0Zm9ybURhdGFUb0NhY2hlZEZyYW1l
KENhY2hlZEZyYW1lKikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCB0cmFuc2l0aW9uVG9Db21taXR0
ZWRGcm9tQ2FjaGVkRnJhbWUoQ2FjaGVkRnJhbWUqKSBvdmVycmlkZSB7IH0KLSNpZiBQTEFURk9S
TShJT1MpCi0gICAgdm9pZCBkaWRSZXN0b3JlRnJhbWVIaWVyYXJjaHlGb3JDYWNoZWRGcmFtZSgp
IG92ZXJyaWRlIHsgfQotI2VuZGlmCi0gICAgdm9pZCB0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JO
ZXdQYWdlKCkgb3ZlcnJpZGUgeyB9Ci0KLSAgICB2b2lkIGRpZFNhdmVUb1BhZ2VDYWNoZSgpIG92
ZXJyaWRlIHsgfQotICAgIHZvaWQgZGlkUmVzdG9yZUZyb21QYWdlQ2FjaGUoKSBvdmVycmlkZSB7
IH0KLQotICAgIHZvaWQgZGlzcGF0Y2hEaWRCZWNvbWVGcmFtZXNldChib29sKSBvdmVycmlkZSB7
IH0KLQotICAgIHZvaWQgdXBkYXRlR2xvYmFsSGlzdG9yeSgpIG92ZXJyaWRlIHsgfQotICAgIHZv
aWQgdXBkYXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3MoKSBvdmVycmlkZSB7IH0KLSAgICBi
b29sIHNob3VsZEdvVG9IaXN0b3J5SXRlbShIaXN0b3J5SXRlbSopIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCB1cGRhdGVHbG9iYWxIaXN0b3J5SXRlbUZvclBhZ2Uo
KSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHNhdmVWaWV3U3RhdGVUb0l0ZW0oSGlzdG9yeUl0ZW0m
KSBvdmVycmlkZSB7IH0KLSAgICBib29sIGNhbkNhY2hlUGFnZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50KCkgb3Zl
cnJpZGUgeyB9Ci0gICAgdm9pZCBkaWRSdW5JbnNlY3VyZUNvbnRlbnQoU2VjdXJpdHlPcmlnaW4q
LCBjb25zdCBVUkwmKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGRpZERldGVjdFhTUyhjb25zdCBV
UkwmLCBib29sKSBvdmVycmlkZSB7IH0KLSAgICBSZWZQdHI8RnJhbWU+IGNyZWF0ZUZyYW1lKGNv
bnN0IFVSTCYsIGNvbnN0IFN0cmluZyYsIEhUTUxGcmFtZU93bmVyRWxlbWVudCosIGNvbnN0IFN0
cmluZyYsIGJvb2wsIGludCwgaW50KSBvdmVycmlkZTsKLSAgICBSZWZQdHI8V2lkZ2V0PiBjcmVh
dGVQbHVnaW4oY29uc3QgSW50U2l6ZSYsIEhUTUxQbHVnSW5FbGVtZW50KiwgY29uc3QgVVJMJiwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmlu
ZyYsIGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVjcmVhdGVQbHVnaW4oV2lkZ2V0Kikgb3Zl
cnJpZGU7Ci0gICAgUGFzc1JlZlB0cjxXaWRnZXQ+IGNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29u
c3QgSW50U2l6ZSYsIEhUTUxBcHBsZXRFbGVtZW50KiwgY29uc3QgVVJMJiwgY29uc3QgVmVjdG9y
PFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpIG92ZXJyaWRlOwotCi0gICAgT2JqZWN0
Q29udGVudFR5cGUgb2JqZWN0Q29udGVudFR5cGUoY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJikg
b3ZlcnJpZGUgeyByZXR1cm4gT2JqZWN0Q29udGVudFR5cGU6Ok5vbmU7IH0KLSAgICBTdHJpbmcg
b3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQot
Ci0gICAgdm9pZCByZWRpcmVjdERhdGFUb1BsdWdpbihXaWRnZXQqKSBvdmVycmlkZSB7IH0KLSAg
ICB2b2lkIGRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKERPTVdyYXBwZXJXb3Js
ZCYpIG92ZXJyaWRlIHsgfQotCi0gICAgdm9pZCByZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24o
Ym9vbCkgb3ZlcnJpZGUgeyB9Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBSZW1vdGVBWE9i
amVjdFJlZiBhY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVs
bHB0cjsgfQotICAgIE5TQ2FjaGVkVVJMUmVzcG9uc2UqIHdpbGxDYWNoZVJlc3BvbnNlKERvY3Vt
ZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgTlNDYWNoZWRVUkxSZXNwb25zZSogcmVzcG9uc2Up
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHJlc3BvbnNlOyB9CisgICAgdm9pZCBkaWRQcmV2ZW50
RGVmYXVsdEZvckV2ZW50KCkgZmluYWwgeyB9CiAjZW5kaWYKLSNpZiBQTEFURk9STShXSU4pICYm
IFVTRShDRlVSTENPTk5FQ1RJT04pCi0gICAgLy8gRklYTUU6IFdpbmRvd3Mgc2hvdWxkIHVzZSB3
aWxsQ2FjaGVSZXNwb25zZSAtIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTcyNTc+LgotICAgIGJvb2wgc2hvdWxkQ2FjaGVSZXNwb25zZShEb2N1bWVudExvYWRlcios
IHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBjb25zdCB1bnNpZ25lZCBj
aGFyKiwgdW5zaWduZWQgbG9uZyBsb25nKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0jZW5k
aWYKLQotICAgIFBhc3NSZWZQdHI8RnJhbWVOZXR3b3JraW5nQ29udGV4dD4gY3JlYXRlTmV0d29y
a2luZ0NvbnRleHQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNb2JpbGVEb2NUeXBl
KGJvb2wpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0TmVlZHNTY3JvbGxOb3RpZmljYXRpb25zKEZy
YW1lKiwgYm9vbCkgZmluYWwgeyB9CisgICAgdm9pZCBvYnNlcnZlZENvbnRlbnRDaGFuZ2UoRnJh
bWUqKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsZWFyQ29udGVudENoYW5nZU9ic2VydmVycyhGcmFt
ZSopIGZpbmFsIHsgfQorICAgIHZvaWQgbm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGlu
Z0ZyYW1lKEZyYW1lKikgZmluYWwgeyB9CisgICAgdm9pZCBkaWRMYXlvdXQoTGF5b3V0VHlwZSkg
ZmluYWwgeyB9CisgICAgdm9pZCBkaWRTdGFydE92ZXJmbG93U2Nyb2xsKCkgZmluYWwgeyB9Cisg
ICAgdm9pZCBkaWRFbmRPdmVyZmxvd1Njcm9sbCgpIGZpbmFsIHsgfQogCi0jaWYgRU5BQkxFKFJF
UVVFU1RfQVVUT0NPTVBMRVRFKQotICAgIHZvaWQgZGlkUmVxdWVzdEF1dG9jb21wbGV0ZShQYXNz
UmVmUHRyPEZvcm1TdGF0ZT4pIG92ZXJyaWRlIHsgfQotI2VuZGlmCisgICAgdm9pZCBzdXBwcmVz
c0Zvcm1Ob3RpZmljYXRpb25zKCkgZmluYWwgeyB9CisgICAgdm9pZCByZXN0b3JlRm9ybU5vdGlm
aWNhdGlvbnMoKSBmaW5hbCB7IH0KIAotICAgIGJvb2wgaXNFbXB0eUZyYW1lTG9hZGVyQ2xpZW50
KCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgYWRkT3JVcGRhdGVTY3JvbGxp
bmdMYXllcihOb2RlKiwgUGxhdGZvcm1MYXllciosIFBsYXRmb3JtTGF5ZXIqLCBjb25zdCBJbnRT
aXplJiwgYm9vbCwgYm9vbCkgZmluYWwgeyB9CisgICAgdm9pZCByZW1vdmVTY3JvbGxpbmdMYXll
cihOb2RlKiwgUGxhdGZvcm1MYXllciosIFBsYXRmb3JtTGF5ZXIqKSBmaW5hbCB7IH0KIAotICAg
IHZvaWQgcHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGUgeyB9Ci19OworICAgIHZv
aWQgd2ViQXBwT3JpZW50YXRpb25zVXBkYXRlZCgpIGZpbmFsIHsgfTsKKyAgICB2b2lkIHNob3dQ
bGF5YmFja1RhcmdldFBpY2tlcihib29sKSBmaW5hbCB7IH07CisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQogCi1jbGFzcyBFbXB0eVRleHRDaGVja2VyQ2xpZW50IDogcHVibGljIFRleHRDaGVja2Vy
Q2xpZW50IHsKLXB1YmxpYzoKLSAgICBib29sIHNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdl
U2VsZWN0aW9uKFRleHRDaGVja2luZ1R5cGUpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KLSAgICB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJikgb3Zl
cnJpZGUgeyB9Ci0gICAgdm9pZCBsZWFybldvcmQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGUgeyB9
Ci0gICAgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nVmlldywgaW50KiwgaW50Kikg
b3ZlcnJpZGUgeyB9Ci0gICAgU3RyaW5nIGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3Nw
ZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0g
ICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3LCBWZWN0b3I8R3JhbW1hckRl
dGFpbD4mLCBpbnQqLCBpbnQqKSBvdmVycmlkZSB7IH0KLQotI2lmIFVTRShVTklGSUVEX1RFWFRf
Q0hFQ0tJTkcpCi0gICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlwZU1hc2ssIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mKSBvdmVycmlkZSB7IHJldHVybiBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PigpOyB9
CisjaWYgRU5BQkxFKE9SSUVOVEFUSU9OX0VWRU5UUykKKyAgICBpbnQgZGV2aWNlT3JpZW50YXRp
b24oKSBjb25zdCBmaW5hbCB7IHJldHVybiAwOyB9CiAjZW5kaWYKIAotICAgIHZvaWQgZ2V0R3Vl
c3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYsIFZlY3RvcjxTdHJpbmc+Jikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCByZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+LCBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJikgb3ZlcnJpZGU7Ci19OwotCi1jbGFzcyBFbXB0eUVkaXRvckNsaWVu
dCA6IHB1YmxpYyBFZGl0b3JDbGllbnQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEVtcHR5
RWRpdG9yQ2xpZW50KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRW1w
dHlFZGl0b3JDbGllbnQoKSB7IH0KLSAgICB2aXJ0dWFsIH5FbXB0eUVkaXRvckNsaWVudCgpIHsg
fQotCi0gICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShSYW5nZSopIG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgYm9vbCBzbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKSBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgaXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFi
bGVkKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lk
IHRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCkgb3ZlcnJpZGUgeyB9Ci0gICAgYm9vbCBp
c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCkgb3ZlcnJpZGUgeyB9Ci0gICAgaW50IHNwZWxs
Q2hlY2tlckRvY3VtZW50VGFnKCkgb3ZlcnJpZGUgeyByZXR1cm4gLTE7IH0KLQotCi0gICAgYm9v
bCBzaG91bGRCZWdpbkVkaXRpbmcoUmFuZ2UqKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQot
ICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhSYW5nZSopIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgYm9vbCBzaG91bGRJbnNlcnROb2RlKE5vZGUqLCBSYW5nZSosIEVkaXRvckluc2Vy
dEFjdGlvbikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHNob3VsZEluc2Vy
dFRleHQoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pIG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFJh
bmdlKiwgUmFuZ2UqLCBFQWZmaW5pdHksIGJvb2wpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
Ci0KLSAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiwgUmFuZ2UqKSBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQgZGlkQXBwbHlTdHlsZSgpIG92ZXJy
aWRlIHsgfQotICAgIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoUmFuZ2UqLCBSYW5n
ZSopIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2b2lkIGRpZEJlZ2luRWRpdGlu
ZygpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkgb3Zl
cnJpZGUgeyB9Ci0gICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKEZyYW1lKikgb3Zl
cnJpZGUgeyB9Ci0gICAgdm9pZCBkaWRDaGFuZ2VTZWxlY3Rpb25BbmRVcGRhdGVMYXlvdXQoKSBv
dmVycmlkZSB7IH0KLSAgICB2b2lkIHVwZGF0ZUVkaXRvclN0YXRlQWZ0ZXJMYXlvdXRJZkVkaXRh
YmlsaXR5Q2hhbmdlZCgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZGlzY2FyZGVkQ29tcG9zaXRp
b24oRnJhbWUqKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGNhbmNlbGVkQ29tcG9zaXRpb24oKSBv
dmVycmlkZSB7IH0KLSAgICB2b2lkIGRpZEVuZEVkaXRpbmcoKSBvdmVycmlkZSB7IH0KLSAgICB2
b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChSYW5nZSopIG92ZXJyaWRlIHsgfQot
ICAgIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKSBvdmVycmlkZSB7IH0KLSAg
ICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoUmFuZ2UqLCBWZWN0b3I8U3Ry
aW5nPiYsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mKSBvdmVycmlkZSB7IH0KLSAgICB2
b2lkIHJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
KSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlV2l0aFNvZnRT
cGFjZXMoVGV4dENoZWNraW5nUmVzdWx0KSBvdmVycmlkZSB7IH0KLQotICAgIHZvaWQgcmVnaXN0
ZXJVbmRvU3RlcChQYXNzUmVmUHRyPFVuZG9TdGVwPikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWdp
c3RlclJlZG9TdGVwKFBhc3NSZWZQdHI8VW5kb1N0ZXA+KSBvdmVycmlkZTsKLSAgICB2b2lkIGNs
ZWFyVW5kb1JlZG9PcGVyYXRpb25zKCkgb3ZlcnJpZGUgeyB9Ci0KLSAgICBib29sIGNhbkNvcHlD
dXQoRnJhbWUqLCBib29sIGRlZmF1bHRWYWx1ZSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZGVm
YXVsdFZhbHVlOyB9Ci0gICAgYm9vbCBjYW5QYXN0ZShGcmFtZSosIGJvb2wgZGVmYXVsdFZhbHVl
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBkZWZhdWx0VmFsdWU7IH0KLSAgICBib29sIGNhblVu
ZG8oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgY2FuUmVkbygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2b2lkIHVuZG8oKSBvdmVy
cmlkZSB7IH0KLSAgICB2b2lkIHJlZG8oKSBvdmVycmlkZSB7IH0KLQotICAgIHZvaWQgaGFuZGxl
S2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50Kikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBoYW5k
bGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVudCopIG92ZXJyaWRlIHsgfQotCi0gICAg
dm9pZCB0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCopIG92ZXJyaWRlIHsgfQotICAg
IHZvaWQgdGV4dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50Kikgb3ZlcnJpZGUgeyB9Ci0gICAg
dm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoRWxlbWVudCopIG92ZXJyaWRlIHsgfQotICAg
IGJvb2wgZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KEVsZW1lbnQqLCBLZXlib2FyZEV2ZW50
Kikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIHRleHRXaWxsQmVEZWxldGVk
SW5UZXh0RmllbGQoRWxlbWVudCopIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgdGV4dERpZENoYW5n
ZUluVGV4dEFyZWEoRWxlbWVudCopIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgb3ZlcmZsb3dTY3Jv
bGxQb3NpdGlvbkNoYW5nZWQoKSBvdmVycmlkZSB7IH0KLQogI2lmIFBMQVRGT1JNKElPUykKLSAg
ICB2b2lkIHN0YXJ0RGVsYXlpbmdBbmRDb2FsZXNjaW5nQ29udGVudENoYW5nZU5vdGlmaWNhdGlv
bnMoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHN0b3BEZWxheWluZ0FuZENvYWxlc2NpbmdDb250
ZW50Q2hhbmdlTm90aWZpY2F0aW9ucygpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgd3JpdGVEYXRh
VG9QYXN0ZWJvYXJkKE5TRGljdGlvbmFyeSopIG92ZXJyaWRlIHsgfQotICAgIE5TQXJyYXkqIHN1
cHBvcnRlZFBhc3RlYm9hcmRUeXBlc0ZvckN1cnJlbnRTZWxlY3Rpb24oKSBvdmVycmlkZSB7IHJl
dHVybiBudWxscHRyOyB9Ci0gICAgTlNBcnJheSogcmVhZERhdGFGcm9tUGFzdGVib2FyZChOU1N0
cmluZyosIGludCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIGJvb2wgaGFzUmlj
aGx5RWRpdGFibGVTZWxlY3Rpb24oKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGlu
dCBnZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCgpIG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KLSAgICBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1lbnRGcmFnbWVudEZyb21EZWxlZ2F0ZShpbnQp
IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICBib29sIHBlcmZvcm1zVHdvU3RlcFBh
c3RlKERvY3VtZW50RnJhZ21lbnQqKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGlu
dCBwYXN0ZWJvYXJkQ2hhbmdlQ291bnQoKSBvdmVycmlkZSB7IHJldHVybiAwOyB9Ci0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIE5TU3RyaW5nICp1c2VyVmlzaWJsZVN0cmluZyhO
U1VSTCAqKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgdm9pZCBzZXRJbnNlcnRp
b25QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsgfTsKLSAgICBOU1VSTCAqY2Fu
b25pY2FsaXplVVJMKE5TVVJMICopIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICBO
U1VSTCAqY2Fub25pY2FsaXplVVJMU3RyaW5nKE5TU3RyaW5nICopIG92ZXJyaWRlIHsgcmV0dXJu
IG51bGxwdHI7IH0KLSNlbmRpZgotCi0jaWYgVVNFKEFQUEtJVCkKLSAgICB2b2lkIHVwcGVyY2Fz
ZVdvcmQoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGxvd2VyY2FzZVdvcmQoKSBvdmVycmlkZSB7
IH0KLSAgICB2b2lkIGNhcGl0YWxpemVXb3JkKCkgb3ZlcnJpZGUgeyB9Ci0jZW5kaWYKLQotI2lm
IFVTRShBVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVOVCkKLSAgICB2b2lkIHNob3dTdWJzdGl0dXRp
b25zUGFuZWwoYm9vbCkgb3ZlcnJpZGUgeyB9Ci0gICAgYm9vbCBzdWJzdGl0dXRpb25zUGFuZWxJ
c1Nob3dpbmcoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQgdG9nZ2xlU21h
cnRJbnNlcnREZWxldGUoKSBvdmVycmlkZSB7IH0KLSAgICBib29sIGlzQXV0b21hdGljUXVvdGVT
dWJzdGl0dXRpb25FbmFibGVkKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lk
IHRvZ2dsZUF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uKCkgb3ZlcnJpZGUgeyB9Ci0gICAgYm9v
bCBpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2b2lkIHRvZ2dsZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb24oKSBvdmVycmlkZSB7
IH0KLSAgICBib29sIGlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKSBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQgdG9nZ2xlQXV0b21hdGljRGFzaFN1YnN0aXR1
dGlvbigpIG92ZXJyaWRlIHsgfQotICAgIGJvb2wgaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRF
bmFibGVkKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIHRvZ2dsZUF1dG9t
YXRpY1RleHRSZXBsYWNlbWVudCgpIG92ZXJyaWRlIHsgfQotICAgIGJvb2wgaXNBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2b2lkIHRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbigpIG92ZXJyaWRlIHsgfQot
I2VuZGlmCi0KLSNpZiBQTEFURk9STShHVEspCi0gICAgYm9vbCBzaG91bGRTaG93VW5pY29kZU1l
bnUoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCi0gICAgVGV4dENoZWNrZXJD
bGllbnQqIHRleHRDaGVja2VyKCkgb3ZlcnJpZGUgeyByZXR1cm4gJm1fdGV4dENoZWNrZXJDbGll
bnQ7IH0KLQotICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0
IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRhaWwmKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHVw
ZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGUg
eyB9Ci0gICAgdm9pZCBzaG93U3BlbGxpbmdVSShib29sKSBvdmVycmlkZSB7IH0KLSAgICBib29s
IHNwZWxsaW5nVUlJc1Nob3dpbmcoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotCi0gICAg
dm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgc2V0
SW5wdXRNZXRob2RTdGF0ZShib29sKSBvdmVycmlkZSB7IH0KLQotcHJpdmF0ZToKLSAgICBFbXB0
eVRleHRDaGVja2VyQ2xpZW50IG1fdGV4dENoZWNrZXJDbGllbnQ7Ci19OwotCi0jaWYgRU5BQkxF
KENPTlRFWFRfTUVOVVMpCi1jbGFzcyBFbXB0eUNvbnRleHRNZW51Q2xpZW50IDogcHVibGljIENv
bnRleHRNZW51Q2xpZW50IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFbXB0eUNvbnRleHRN
ZW51Q2xpZW50KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRW1wdHlD
b250ZXh0TWVudUNsaWVudCgpIHsgfQotICAgIHZpcnR1YWwgfkVtcHR5Q29udGV4dE1lbnVDbGll
bnQoKSB7ICB9Ci0gICAgdm9pZCBjb250ZXh0TWVudURlc3Ryb3llZCgpIG92ZXJyaWRlIHsgfQot
Ci0gICAgdm9pZCBkb3dubG9hZFVSTChjb25zdCBVUkwmKSBvdmVycmlkZSB7IH0KLSAgICB2b2lk
IHNlYXJjaFdpdGhHb29nbGUoY29uc3QgRnJhbWUqKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGxv
b2tVcEluRGljdGlvbmFyeShGcmFtZSopIG92ZXJyaWRlIHsgfQotICAgIGJvb2wgaXNTcGVha2lu
ZygpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBzcGVhayhjb25zdCBTdHJp
bmcmKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHN0b3BTcGVha2luZygpIG92ZXJyaWRlIHsgfQot
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCBzZWFyY2hXaXRoU3BvdGxpZ2h0KCkgb3Zl
cnJpZGUgeyB9CisgICAgYm9vbCBpc1N0b3BwaW5nKCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0K
ICNlbmRpZgogCi0jaWYgVVNFKEFDQ0VTU0lCSUxJVFlfQ09OVEVYVF9NRU5VUykKLSAgICB2b2lk
IHNob3dDb250ZXh0TWVudSgpIG92ZXJyaWRlIHsgfQotI2VuZGlmCi19OwotI2VuZGlmIC8vIEVO
QUJMRShDT05URVhUX01FTlVTKQotCi0jaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKLWNsYXNzIEVt
cHR5RHJhZ0NsaWVudCA6IHB1YmxpYyBEcmFnQ2xpZW50IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShFbXB0eURyYWdDbGllbnQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICBFbXB0eURyYWdDbGllbnQoKSB7IH0KLSAgICB2aXJ0dWFsIH5FbXB0eURyYWdDbGllbnQo
KSB7fQotICAgIHZvaWQgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uLCBjb25zdCBEcmFnRGF0YSYpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgd2ls
bFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IEludFBvaW50
JiwgRGF0YVRyYW5zZmVyJikgb3ZlcnJpZGUgeyB9Ci0gICAgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
IGFjdGlvbk1hc2tGb3JEcmFnKGNvbnN0IERyYWdEYXRhJikgb3ZlcnJpZGUgeyByZXR1cm4gRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uTm9uZTsgfQotICAgIERyYWdTb3VyY2VBY3Rpb24gZHJhZ1NvdXJj
ZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBJbnRQb2ludCYpIG92ZXJyaWRlIHsgcmV0dXJuIERy
YWdTb3VyY2VBY3Rpb25Ob25lOyB9Ci0gICAgdm9pZCBzdGFydERyYWcoRHJhZ0ltYWdlUmVmLCBj
b25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgRGF0YVRyYW5zZmVyJiwgRnJhbWUmLCBi
b29sKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJveWVkKCkgb3Zl
cnJpZGUgeyB9Ci19OwotI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCi0KLWNsYXNzIEVt
cHR5SW5zcGVjdG9yQ2xpZW50IDogcHVibGljIEluc3BlY3RvckNsaWVudCB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRW1wdHlJbnNwZWN0b3JDbGllbnQpOyBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBFbXB0eUluc3BlY3RvckNsaWVudCgpIHsgfQotICAgIHZpcnR1
YWwgfkVtcHR5SW5zcGVjdG9yQ2xpZW50KCkgeyB9Ci0KLSAgICB2b2lkIGluc3BlY3RlZFBhZ2VE
ZXN0cm95ZWQoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHdoZWVsRXZlbnRIYW5kbGVyc0NoYW5n
ZWQoYm9vbCkgZmluYWwgeyB9CiAgICAgCi0gICAgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwq
IG9wZW5Mb2NhbEZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqKSBvdmVycmlkZSB7IHJldHVy
biBudWxscHRyOyB9Ci0gICAgdm9pZCBicmluZ0Zyb250ZW5kVG9Gcm9udCgpIG92ZXJyaWRlIHsg
fQotCi0gICAgdm9pZCBoaWdobGlnaHQoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGhpZGVIaWdo
bGlnaHQoKSBvdmVycmlkZSB7IH0KLX07Ci0KLWNsYXNzIEVtcHR5RGV2aWNlQ2xpZW50IDogcHVi
bGljIERldmljZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzdGFydFVwZGF0aW5nKCkgb3Zl
cnJpZGUgeyB9Ci0gICAgdm9pZCBzdG9wVXBkYXRpbmcoKSBvdmVycmlkZSB7IH0KLX07Ci0KLWNs
YXNzIEVtcHR5RGV2aWNlTW90aW9uQ2xpZW50IDogcHVibGljIERldmljZU1vdGlvbkNsaWVudCB7
Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRDb250cm9sbGVyKERldmljZU1vdGlvbkNvbnRyb2xsZXIq
KSBvdmVycmlkZSB7IH0KLSAgICBEZXZpY2VNb3Rpb25EYXRhKiBsYXN0TW90aW9uKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHZvaWQgZGV2aWNlTW90aW9uQ29udHJv
bGxlckRlc3Ryb3llZCgpIG92ZXJyaWRlIHsgfQotfTsKLQotY2xhc3MgRW1wdHlEZXZpY2VPcmll
bnRhdGlvbkNsaWVudCA6IHB1YmxpYyBEZXZpY2VPcmllbnRhdGlvbkNsaWVudCB7Ci1wdWJsaWM6
Ci0gICAgdm9pZCBzZXRDb250cm9sbGVyKERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlciopIG92
ZXJyaWRlIHsgfQotICAgIERldmljZU9yaWVudGF0aW9uRGF0YSogbGFzdE9yaWVudGF0aW9uKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHZvaWQgZGV2aWNlT3JpZW50
YXRpb25Db250cm9sbGVyRGVzdHJveWVkKCkgb3ZlcnJpZGUgeyB9Ci19OwotCi1jbGFzcyBFbXB0
eVByb2dyZXNzVHJhY2tlckNsaWVudCA6IHB1YmxpYyBQcm9ncmVzc1RyYWNrZXJDbGllbnQgewot
ICAgIHZvaWQgd2lsbENoYW5nZUVzdGltYXRlZFByb2dyZXNzKCkgb3ZlcnJpZGUgeyB9Ci0gICAg
dm9pZCBkaWRDaGFuZ2VFc3RpbWF0ZWRQcm9ncmVzcygpIG92ZXJyaWRlIHsgfQotCi0gICAgdm9p
ZCBwcm9ncmVzc1N0YXJ0ZWQoRnJhbWUmKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHByb2dyZXNz
RXN0aW1hdGVDaGFuZ2VkKEZyYW1lJikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBwcm9ncmVzc0Zp
bmlzaGVkKEZyYW1lJikgb3ZlcnJpZGUgeyB9Ci19OworICAgIGJvb2wgaXNFbXB0eUNocm9tZUNs
aWVudCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIAotY2xhc3MgRW1wdHlEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudCBmaW5hbCA6IHB1YmxpYyBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudCB7
Ci0gICAgdm9pZCBsb2dEaWFnbm9zdGljTWVzc2FnZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmLCBTaG91bGRTYW1wbGUpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgbG9nRGlhZ25vc3RpY01l
c3NhZ2VXaXRoUmVzdWx0KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIERpYWdub3N0aWNM
b2dnaW5nUmVzdWx0VHlwZSwgU2hvdWxkU2FtcGxlKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGxv
Z0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYsIFNob3VsZFNhbXBsZSkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBkaWRB
c3NvY2lhdGVGb3JtQ29udHJvbHMoY29uc3QgVmVjdG9yPFJlZlB0cjxFbGVtZW50Pj4mKSBmaW5h
bCB7IH0KKyAgICBib29sIHNob3VsZE5vdGlmeU9uRm9ybUNoYW5nZXMoKSBmaW5hbCB7IHJldHVy
biBmYWxzZTsgfQogfTsKIAogdm9pZCBmaWxsV2l0aEVtcHR5Q2xpZW50cyhQYWdlQ29uZmlndXJh
dGlvbiYpOworVW5pcXVlUmVmPEVkaXRvckNsaWVudD4gY3JlYXRlRW1wdHlFZGl0b3JDbGllbnQo
KTsKK0RpYWdub3N0aWNMb2dnaW5nQ2xpZW50JiBlbXB0eURpYWdub3N0aWNMb2dnaW5nQ2xpZW50
KCk7CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGF0YWJhc2VQcm92aWRl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EYXRhYmFzZVByb3ZpZGVyLmgKaW5kZXggNTRlNDYx
MzIyMDg4ZDFiYzE1NGZmNjFiZWMxYWY1N2I5YzgxNjk0MS4uYTc2Yzc5MWM4Njg4NmFhOWM0Y2Ri
Mjc3ZTA0MDcyYmUwNzRkZTRlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EYXRh
YmFzZVByb3ZpZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EYXRhYmFzZVByb3ZpZGVy
LmgKQEAgLTI2LDcgKzI2LDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuY3BwCmluZGV4IDA2Y2I2MmQxZGNjMmM3NzA3YmVhODU4
Y2U2NmVmYjk5NDM5MzVkYjkuLjQ4MTc0Y2IyNDM3ZDU5NjBiMjFjNTM4MzZjNTI3MWI2NjBkODg2
YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1lLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL01haW5GcmFtZS5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNs
dWRlICJNYWluRnJhbWUuaCIKIAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJFbXB0
eUNsaWVudHMuaCIKICNpbmNsdWRlICJQYWdlQ29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgIlBh
Z2VPdmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBheW1lbnRDb29yZGluYXRvci5oIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAKaW5kZXggZmVjYmMzYmVmMGFhODU1OWE0MjY5MWJiNzFjMTM1Y2YyNDQy
YzRmZi4uOTMzMWIzMDI5MDdlNzliN2MxMWI1ZWMwODQ2YmFmZDVjM2ZlYzQ5NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwCkBAIC04Myw2ICs4Myw3IEBACiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgor
I2luY2x1ZGUgIlNvY2tldFByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKICNp
bmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyLmgiCkBAIC03NzQsMTAgKzc3NSw4IEBAIHZvaWQgUGFnZTo6c2V0SW5Mb3dRdWFsaXR5
SW1hZ2VJbnRlcnBvbGF0aW9uTW9kZShib29sIG1vZGUpCiAKIERpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50JiBQYWdlOjpkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpIGNvbnN0CiB7Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEVtcHR5RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ+IGR1bW15Q2xpZW50
OwogICAgIGlmICghc2V0dGluZ3MoKS5kaWFnbm9zdGljTG9nZ2luZ0VuYWJsZWQoKSB8fCAhbV9k
aWFnbm9zdGljTG9nZ2luZ0NsaWVudCkKLSAgICAgICAgcmV0dXJuIGR1bW15Q2xpZW50OwotCisg
ICAgICAgIHJldHVybiBlbXB0eURpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCk7CiAgICAgcmV0dXJu
ICptX2RpYWdub3N0aWNMb2dnaW5nQ2xpZW50OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAppbmRleCBhZjlhNDU0OTBlYTE1ZDUwOTA3ZDE0
ZjA0NGQ4OWQ3NzdlYzljZjg1Li5kMDNkYzBlNDkwYTJhOGZhZTZkNmY0MGZmMTE3ZDhkNDYzN2Y2
ZmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5j
cHAKQEAgLTQ1NCw3ICs0NTQsNyBAQCBpbnQgU1FMaXRlRGF0YWJhc2U6OmF1dGhvcml6ZXJGdW5j
dGlvbih2b2lkKiB1c2VyRGF0YSwgaW50IGFjdGlvbkNvZGUsIGNvbnN0IGNoYQogICAgIH0KIH0K
IAotdm9pZCBTUUxpdGVEYXRhYmFzZTo6c2V0QXV0aG9yaXplcihQYXNzUmVmUHRyPERhdGFiYXNl
QXV0aG9yaXplcj4gYXV0aCkKK3ZvaWQgU1FMaXRlRGF0YWJhc2U6OnNldEF1dGhvcml6ZXIoRGF0
YWJhc2VBdXRob3JpemVyJiBhdXRob3JpemVyKQogewogICAgIGlmICghbV9kYikgewogICAgICAg
ICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gc2V0IGFuIGF1dGhvcml6ZXIgb24gYSBub24tb3BlbiBT
UUwgZGF0YWJhc2UiKTsKQEAgLTQ2NCw3ICs0NjQsNyBAQCB2b2lkIFNRTGl0ZURhdGFiYXNlOjpz
ZXRBdXRob3JpemVyKFBhc3NSZWZQdHI8RGF0YWJhc2VBdXRob3JpemVyPiBhdXRoKQogCiAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9hdXRob3JpemVyTG9jayk7CiAKLSAgICBtX2F1dGhvcml6ZXIg
PSBhdXRoOworICAgIG1fYXV0aG9yaXplciA9ICZhdXRob3JpemVyOwogICAgIAogICAgIGVuYWJs
ZUF1dGhvcml6ZXIodHJ1ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVEYXRhYmFzZS5oCmluZGV4IGJmMzM2MWE4MDBkMDk3NGU1MjUyYWVjOTA4OGZiNTU0NDVkOGJh
ODQuLmVlOWJhMmJlMWUyNTA0NWY5YzNhNjE1ZTY2ZTc3YmZmNzUzYzQyODggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCkBAIC0yNCw4ICsyNCw3IEBA
CiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFNRTGl0ZURhdGFiYXNlX2gKLSNkZWZp
bmUgU1FMaXRlRGF0YWJhc2VfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxmdW5jdGlvbmFs
PgogI2luY2x1ZGUgPHNxbGl0ZTMuaD4KQEAgLTEwMSwxNCArMTAwLDE1IEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCBpbnQgbGFzdEVycm9yKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgY29u
c3QgY2hhciogbGFzdEVycm9yTXNnKCk7CiAgICAgCi0gICAgc3FsaXRlMyogc3FsaXRlM0hhbmRs
ZSgpIGNvbnN0IHsKKyAgICBzcWxpdGUzKiBzcWxpdGUzSGFuZGxlKCkgY29uc3QKKyAgICB7CiAj
aWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgQVNTRVJUKG1fc2hhcmFibGUgfHwgY3VycmVudFRo
cmVhZCgpID09IG1fb3BlbmluZ1RocmVhZCB8fCAhbV9kYik7CiAjZW5kaWYKICAgICAgICAgcmV0
dXJuIG1fZGI7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0QXV0aG9yaXplcihQYXNzUmVmUHRy
PERhdGFiYXNlQXV0aG9yaXplcj4pOworICAgIHZvaWQgc2V0QXV0aG9yaXplcihEYXRhYmFzZUF1
dGhvcml6ZXImKTsKIAogICAgIExvY2smIGRhdGFiYXNlTXV0ZXgoKSB7IHJldHVybiBtX2xvY2tp
bmdNdXRleDsgfQogICAgIGJvb2wgaXNBdXRvQ29tbWl0T24oKSBjb25zdDsKQEAgLTE2Niw1ICsx
NjYsMyBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKaW5kZXggOTc3
ZGJmZDc5N2Q1Nzg1N2Y0N2U0ODExNmIxM2Q0MWNhYTM4ODZlNy4uYzlmMGY4MTNiY2I2MzY2MTU0
YmMwNGJlYTUwM2M2MjRmYWVhMDFiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9CaWRpQ29udGV4dC5jcHAKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDQsIDIwMDYsIDIwMDcsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodCByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiQmlkaUNvbnRleHQuaCIKKwogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzIsNiArMzMsMTUgQEAgc3RydWN0IFNhbWVT
aXplQXNCaWRpQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPFNhbWVTaXplQXNCaWRpQ29udGV4
dD4gewogCiBDT01QSUxFX0FTU0VSVChzaXplb2YoQmlkaUNvbnRleHQpID09IHNpemVvZihTYW1l
U2l6ZUFzQmlkaUNvbnRleHQpLCBCaWRpQ29udGV4dF9zaG91bGRfc3RheV9zbWFsbCk7CiAKK2lu
bGluZSBCaWRpQ29udGV4dDo6QmlkaUNvbnRleHQodW5zaWduZWQgY2hhciBsZXZlbCwgVUNoYXJE
aXJlY3Rpb24gZGlyZWN0aW9uLCBib29sIG92ZXJyaWRlLCBCaWRpRW1iZWRkaW5nU291cmNlIHNv
dXJjZSwgQmlkaUNvbnRleHQqIHBhcmVudCkKKyAgICA6IG1fbGV2ZWwobGV2ZWwpCisgICAgLCBt
X2RpcmVjdGlvbihkaXJlY3Rpb24pCisgICAgLCBtX292ZXJyaWRlKG92ZXJyaWRlKQorICAgICwg
bV9zb3VyY2Uoc291cmNlKQorICAgICwgbV9wYXJlbnQocGFyZW50KQoreworfQorCiBpbmxpbmUg
UmVmPEJpZGlDb250ZXh0PiBCaWRpQ29udGV4dDo6Y3JlYXRlVW5jYWNoZWQodW5zaWduZWQgY2hh
ciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sIG92ZXJyaWRlLCBCaWRpRW1i
ZWRkaW5nU291cmNlIHNvdXJjZSwgQmlkaUNvbnRleHQqIHBhcmVudCkKIHsKICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBCaWRpQ29udGV4dChsZXZlbCwgZGlyZWN0aW9uLCBvdmVycmlkZSwgc291
cmNlLCBwYXJlbnQpKTsKQEAgLTY0LDM1ICs3NCwzMSBAQCBSZWY8QmlkaUNvbnRleHQ+IEJpZGlD
b250ZXh0OjpjcmVhdGUodW5zaWduZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24gZGlyZWN0
aQogICAgIHJldHVybiBydGxPdmVycmlkZUNvbnRleHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxCaWRpQ29udGV4dD4gY29weUNvbnRleHRBbmRSZWJhc2VsaW5lTGV2ZWwoQmlkaUNv
bnRleHQqIGNvbnRleHQsIEJpZGlDb250ZXh0KiBwYXJlbnQpCitzdGF0aWMgaW5saW5lIFJlZjxC
aWRpQ29udGV4dD4gY29weUNvbnRleHRBbmRSZWJhc2VsaW5lTGV2ZWwoQmlkaUNvbnRleHQmIGNv
bnRleHQsIEJpZGlDb250ZXh0KiBwYXJlbnQpCiB7Ci0gICAgQVNTRVJUKGNvbnRleHQpOwotICAg
IHVuc2lnbmVkIGNoYXIgbmV3TGV2ZWwgPSBwYXJlbnQgPyBwYXJlbnQtPmxldmVsKCkgOiAwOwot
ICAgIGlmIChjb250ZXh0LT5kaXIoKSA9PSBVX1JJR0hUX1RPX0xFRlQpCisgICAgYXV0byBuZXdM
ZXZlbCA9IHBhcmVudCA/IHBhcmVudC0+bGV2ZWwoKSA6IDA7CisgICAgaWYgKGNvbnRleHQuZGly
KCkgPT0gVV9SSUdIVF9UT19MRUZUKQogICAgICAgICBuZXdMZXZlbCA9IG5leHRHcmVhdGVyT2Rk
TGV2ZWwobmV3TGV2ZWwpOwogICAgIGVsc2UgaWYgKHBhcmVudCkKICAgICAgICAgbmV3TGV2ZWwg
PSBuZXh0R3JlYXRlckV2ZW5MZXZlbChuZXdMZXZlbCk7Ci0KLSAgICByZXR1cm4gQmlkaUNvbnRl
eHQ6OmNyZWF0ZShuZXdMZXZlbCwgY29udGV4dC0+ZGlyKCksIGNvbnRleHQtPm92ZXJyaWRlKCks
IGNvbnRleHQtPnNvdXJjZSgpLCBwYXJlbnQpOworICAgIHJldHVybiBCaWRpQ29udGV4dDo6Y3Jl
YXRlKG5ld0xldmVsLCBjb250ZXh0LmRpcigpLCBjb250ZXh0Lm92ZXJyaWRlKCksIGNvbnRleHQu
c291cmNlKCksIHBhcmVudCk7CiB9CiAKIC8vIFRoZSBCaWRpQ29udGV4dCBzdGFjayBtdXN0IGJl
IGltbXV0YWJsZSAtLSB0aGV5J3JlIHJlLXVzZWQgZm9yIHJlLWxheW91dCBhZnRlcgotLy8gRE9N
IG1vZGlmaWNhdGlvbi9lZGl0aW5nIC0tIHNvIHdlIGNvcHkgYWxsIHRoZSBub24tdW5pY29kZSBj
b250ZXh0cywgYW5kCisvLyBET00gbW9kaWZpY2F0aW9uL2VkaXRpbmcgLS0gc28gd2UgY29weSBh
bGwgdGhlIG5vbi1Vbmljb2RlIGNvbnRleHRzLCBhbmQKIC8vIHJlY2FsY3VsYXRlIHRoZWlyIGxl
dmVscy4KLVBhc3NSZWZQdHI8QmlkaUNvbnRleHQ+IEJpZGlDb250ZXh0Ojpjb3B5U3RhY2tSZW1v
dmluZ1VuaWNvZGVFbWJlZGRpbmdDb250ZXh0cygpCitSZWY8QmlkaUNvbnRleHQ+IEJpZGlDb250
ZXh0Ojpjb3B5U3RhY2tSZW1vdmluZ1VuaWNvZGVFbWJlZGRpbmdDb250ZXh0cygpCiB7CiAgICAg
VmVjdG9yPEJpZGlDb250ZXh0KiwgNjQ+IGNvbnRleHRzOwotICAgIGZvciAoQmlkaUNvbnRleHQq
IGl0ZXIgPSB0aGlzOyBpdGVyOyBpdGVyID0gaXRlci0+cGFyZW50KCkpIHsKLSAgICAgICAgaWYg
KGl0ZXItPnNvdXJjZSgpICE9IEZyb21Vbmljb2RlKQotICAgICAgICAgICAgY29udGV4dHMuYXBw
ZW5kKGl0ZXIpOworICAgIGZvciAoYXV0byogYW5jZXN0b3IgPSB0aGlzOyBhbmNlc3RvcjsgYW5j
ZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50KCkpIHsKKyAgICAgICAgaWYgKGFuY2VzdG9yLT5zb3Vy
Y2UoKSAhPSBGcm9tVW5pY29kZSkKKyAgICAgICAgICAgIGNvbnRleHRzLmFwcGVuZChhbmNlc3Rv
cik7CiAgICAgfQogICAgIEFTU0VSVChjb250ZXh0cy5zaXplKCkpOwotIAotICAgIFJlZlB0cjxC
aWRpQ29udGV4dD4gdG9wQ29udGV4dCA9IGNvcHlDb250ZXh0QW5kUmViYXNlbGluZUxldmVsKGNv
bnRleHRzLmxhc3QoKSwgMCk7Ci0gICAgZm9yIChpbnQgaSA9IGNvbnRleHRzLnNpemUoKSAtIDE7
IGkgPiAwOyAtLWkpCi0gICAgICAgIHRvcENvbnRleHQgPSBjb3B5Q29udGV4dEFuZFJlYmFzZWxp
bmVMZXZlbChjb250ZXh0c1tpIC0gMV0sIHRvcENvbnRleHQuZ2V0KCkpOwotCi0gICAgcmV0dXJu
IFdURk1vdmUodG9wQ29udGV4dCk7CisgICAgYXV0byB0b3BDb250ZXh0ID0gY29weUNvbnRleHRB
bmRSZWJhc2VsaW5lTGV2ZWwoKmNvbnRleHRzLmxhc3QoKSwgbnVsbHB0cik7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gY29udGV4dHMuc2l6ZSgpIC0gMTsgaTsgLS1pKQorICAgICAgICB0b3BDb250
ZXh0ID0gY29weUNvbnRleHRBbmRSZWJhc2VsaW5lTGV2ZWwoKmNvbnRleHRzW2kgLSAxXSwgdG9w
Q29udGV4dC5wdHIoKSk7CisgICAgcmV0dXJuIHRvcENvbnRleHQ7CiB9CiAKIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBCaWRpQ29udGV4dCYgYzEsIGNvbnN0IEJpZGlDb250ZXh0JiBjMikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaAppbmRleCA2MGIxMTg4MGIwOTE0
OTNjYjM5NTAyOTM5ZTM2MDg1ODQ3NzU2NTJkLi5kNGM0ZTU3MDhhMGQ0MmNiOWNiNDcxYTJjMDY5
NjcwZDM5YmQzNGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0Jp
ZGlDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4
dC5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA2LCAyMDA3
LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTE5LDI2ICsxOSwyMCBAQAogICoKICAqLwogCi0jaWZuZGVmIEJpZGlDb250
ZXh0X2gKLSNkZWZpbmUgQmlkaUNvbnRleHRfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx1
bmljb2RlL3VjaGFyLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVudW0gQmlkaUVtYmVkZGlu
Z1NvdXJjZSB7Ci0gICAgRnJvbVN0eWxlT3JET00sCi0gICAgRnJvbVVuaWNvZGUKLX07CitlbnVt
IEJpZGlFbWJlZGRpbmdTb3VyY2UgeyBGcm9tU3R5bGVPckRPTSwgRnJvbVVuaWNvZGUgfTsKIAog
Ly8gVXNlZCB0byBrZWVwIHRyYWNrIG9mIGV4cGxpY2l0IGVtYmVkZGluZ3MuCiBjbGFzcyBCaWRp
Q29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEJpZGlDb250ZXh0PiB7CiBwdWJsaWM6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxCaWRpQ29udGV4dD4gY3JlYXRlKHVuc2lnbmVkIGNo
YXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9uLCBib29sIG92ZXJyaWRlID0gZmFsc2UsIEJpZGlFbWJl
ZGRpbmdTb3VyY2UgPSBGcm9tU3R5bGVPckRPTSwgQmlkaUNvbnRleHQqIHBhcmVudCA9IDApOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8QmlkaUNvbnRleHQ+IGNyZWF0ZSh1bnNpZ25l
ZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSA9IGZhbHNlLCBCaWRp
RW1iZWRkaW5nU291cmNlID0gRnJvbVN0eWxlT3JET00sIEJpZGlDb250ZXh0KiBwYXJlbnQgPSBu
dWxscHRyKTsKIAogICAgIEJpZGlDb250ZXh0KiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3Bh
cmVudC5nZXQoKTsgfQogICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwoKSBjb25zdCB7IHJldHVybiBt
X2xldmVsOyB9CkBAIC00NiwxNiArNDAsMTAgQEAgcHVibGljOgogICAgIGJvb2wgb3ZlcnJpZGUo
KSBjb25zdCB7IHJldHVybiBtX292ZXJyaWRlOyB9CiAgICAgQmlkaUVtYmVkZGluZ1NvdXJjZSBz
b3VyY2UoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxCaWRpRW1iZWRkaW5nU291cmNlPiht
X3NvdXJjZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIFBhc3NSZWZQdHI8QmlkaUNvbnRleHQ+
IGNvcHlTdGFja1JlbW92aW5nVW5pY29kZUVtYmVkZGluZ0NvbnRleHRzKCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgUmVmPEJpZGlDb250ZXh0PiBjb3B5U3RhY2tSZW1vdmluZ1VuaWNvZGVFbWJlZGRp
bmdDb250ZXh0cygpOworCiBwcml2YXRlOgotICAgIEJpZGlDb250ZXh0KHVuc2lnbmVkIGNoYXIg
bGV2ZWwsIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSwgQmlkaUVtYmVk
ZGluZ1NvdXJjZSBzb3VyY2UsIEJpZGlDb250ZXh0KiBwYXJlbnQpCi0gICAgICAgIDogbV9sZXZl
bChsZXZlbCkKLSAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCi0gICAgICAgICwgbV9v
dmVycmlkZShvdmVycmlkZSkKLSAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgICAgICwg
bV9wYXJlbnQocGFyZW50KQotICAgIHsKLSAgICB9CisgICAgQmlkaUNvbnRleHQodW5zaWduZWQg
Y2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRpbmdT
b3VyY2UsIEJpZGlDb250ZXh0KiBwYXJlbnQpOwogCiAgICAgc3RhdGljIFJlZjxCaWRpQ29udGV4
dD4gY3JlYXRlVW5jYWNoZWQodW5zaWduZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24sIGJv
b2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRpbmdTb3VyY2UsIEJpZGlDb250ZXh0KiBwYXJlbnQpOwog
CkBAIC03OSw1ICs2NywzIEBAIGlubGluZSB1bnNpZ25lZCBjaGFyIG5leHRHcmVhdGVyRXZlbkxl
dmVsKHVuc2lnbmVkIGNoYXIgbGV2ZWwpCiBib29sIG9wZXJhdG9yPT0oY29uc3QgQmlkaUNvbnRl
eHQmLCBjb25zdCBCaWRpQ29udGV4dCYpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBCaWRpQ29udGV4dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L0JpZGlSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRp
UmVzb2x2ZXIuaAppbmRleCA0OWNmZDIzNDE5ODM2M2M4M2VhYjQxYjE5YzVhNWMyNDQ1NzQ5ZGFi
Li4xYjEzZWYzYjdlYTlmZmE0NGVhMmY4OGI3MTAzOTAyNmU5NDM2Nzc2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVyLmgKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTYgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOSwyMiArMTks
MjAgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBCaWRpUmVzb2x2ZXJfaAotI2RlZmluZSBCaWRpUmVz
b2x2ZXJfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJCaWRpQ29udGV4dC5oIgogI2luY2x1
ZGUgIkJpZGlSdW5MaXN0LmgiCiAjaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIFJlbmRlck9iamVjdDsKIAotdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9y
PiBjbGFzcyBXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlIHsKK3RlbXBsYXRlPHR5cGVuYW1lIEl0
ZXJhdG9yPiBjbGFzcyBXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlIHsKIHB1YmxpYzoKICAgICB2
b2lkIHJlc2V0KCkKICAgICB7CkBAIC04Myw0OSArODEsNDEgQEAgcHJpdmF0ZToKIC8vIFRoZSBC
aWRpU3RhdHVzIGF0IGEgZ2l2ZW4gcG9zaXRpb24gKHR5cGljYWxseSB0aGUgZW5kIG9mIGEgbGlu
ZSkgY2FuCiAvLyBiZSBjYWNoZWQgYW5kIHRoZW4gdXNlZCB0byByZXN0YXJ0IGJpZGkgcmVzb2x1
dGlvbiBhdCB0aGF0IHBvc2l0aW9uLgogc3RydWN0IEJpZGlTdGF0dXMgewotICAgIEJpZGlTdGF0
dXMoKQotICAgICAgICA6IGVvcihVX09USEVSX05FVVRSQUwpCi0gICAgICAgICwgbGFzdFN0cm9u
ZyhVX09USEVSX05FVVRSQUwpCi0gICAgICAgICwgbGFzdChVX09USEVSX05FVVRSQUwpCi0gICAg
ewotICAgIH0KKyAgICBCaWRpU3RhdHVzKCkgPSBkZWZhdWx0OwogCiAgICAgLy8gQ3JlYXRlcyBh
IEJpZGlTdGF0dXMgcmVwcmVzZW50aW5nIGEgbmV3IHBhcmFncmFwaCByb290IHdpdGggYSBkZWZh
dWx0IGRpcmVjdGlvbi4KICAgICAvLyBVc2VzIFRleHREaXJlY3Rpb24gYXMgaXQgb25seSBoYXMg
dHdvIHBvc3NpYmlsaXRpZXMgaW5zdGVhZCBvZiBVQ2hhckRpcmVjdGlvbiB3aGljaCBoYXMgYXQg
bGVhc3QgMTkuCi0gICAgQmlkaVN0YXR1cyhUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24sIGJv
b2wgaXNPdmVycmlkZSkKKyAgICBCaWRpU3RhdHVzKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBi
b29sIGlzT3ZlcnJpZGUpCisgICAgICAgIDogZW9yKGRpcmVjdGlvbiA9PSBMVFIgPyBVX0xFRlRf
VE9fUklHSFQgOiBVX1JJR0hUX1RPX0xFRlQpCisgICAgICAgICwgbGFzdFN0cm9uZyhlb3IpCisg
ICAgICAgICwgbGFzdChlb3IpCisgICAgICAgICwgY29udGV4dChCaWRpQ29udGV4dDo6Y3JlYXRl
KGRpcmVjdGlvbiA9PSBMVFIgPyAwIDogMSwgZW9yLCBpc092ZXJyaWRlKSkKICAgICB7Ci0gICAg
ICAgIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbiA9IHRleHREaXJlY3Rpb24gPT0gTFRSID8gVV9M
RUZUX1RPX1JJR0hUIDogVV9SSUdIVF9UT19MRUZUOwotICAgICAgICBlb3IgPSBsYXN0U3Ryb25n
ID0gbGFzdCA9IGRpcmVjdGlvbjsKLSAgICAgICAgY29udGV4dCA9IEJpZGlDb250ZXh0OjpjcmVh
dGUodGV4dERpcmVjdGlvbiA9PSBMVFIgPyAwIDogMSwgZGlyZWN0aW9uLCBpc092ZXJyaWRlKTsK
ICAgICB9CiAKLSAgICBCaWRpU3RhdHVzKFVDaGFyRGlyZWN0aW9uIGVvckRpciwgVUNoYXJEaXJl
Y3Rpb24gbGFzdFN0cm9uZ0RpciwgVUNoYXJEaXJlY3Rpb24gbGFzdERpciwgUGFzc1JlZlB0cjxC
aWRpQ29udGV4dD4gYmlkaUNvbnRleHQpCi0gICAgICAgIDogZW9yKGVvckRpcikKLSAgICAgICAg
LCBsYXN0U3Ryb25nKGxhc3RTdHJvbmdEaXIpCi0gICAgICAgICwgbGFzdChsYXN0RGlyKQotICAg
ICAgICAsIGNvbnRleHQoYmlkaUNvbnRleHQpCisgICAgQmlkaVN0YXR1cyhVQ2hhckRpcmVjdGlv
biBlb3IsIFVDaGFyRGlyZWN0aW9uIGxhc3RTdHJvbmcsIFVDaGFyRGlyZWN0aW9uIGxhc3QsIFJl
ZlB0cjxCaWRpQ29udGV4dD4mJiBjb250ZXh0KQorICAgICAgICA6IGVvcihlb3IpCisgICAgICAg
ICwgbGFzdFN0cm9uZyhsYXN0U3Ryb25nKQorICAgICAgICAsIGxhc3QobGFzdCkKKyAgICAgICAg
LCBjb250ZXh0KFdURk1vdmUoY29udGV4dCkpCiAgICAgewogICAgIH0KIAotICAgIFVDaGFyRGly
ZWN0aW9uIGVvcjsKLSAgICBVQ2hhckRpcmVjdGlvbiBsYXN0U3Ryb25nOwotICAgIFVDaGFyRGly
ZWN0aW9uIGxhc3Q7CisgICAgVUNoYXJEaXJlY3Rpb24gZW9yIHsgVV9PVEhFUl9ORVVUUkFMIH07
CisgICAgVUNoYXJEaXJlY3Rpb24gbGFzdFN0cm9uZyB7IFVfT1RIRVJfTkVVVFJBTCB9OworICAg
IFVDaGFyRGlyZWN0aW9uIGxhc3QgeyBVX09USEVSX05FVVRSQUwgfTsKICAgICBSZWZQdHI8Qmlk
aUNvbnRleHQ+IGNvbnRleHQ7CiB9OwogCi1jbGFzcyBCaWRpRW1iZWRkaW5nIHsKLXB1YmxpYzoK
K3N0cnVjdCBCaWRpRW1iZWRkaW5nIHsKICAgICBCaWRpRW1iZWRkaW5nKFVDaGFyRGlyZWN0aW9u
IGRpcmVjdGlvbiwgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UpCi0gICAgOiBtX2RpcmVjdGlv
bihkaXJlY3Rpb24pCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgICAgIDogZGlyZWN0aW9u
KGRpcmVjdGlvbikKKyAgICAgICAgLCBzb3VyY2Uoc291cmNlKQogICAgIHsKICAgICB9CiAKLSAg
ICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsg
fQotICAgIEJpZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2U7IH0KLXByaXZhdGU6Ci0gICAgVUNoYXJEaXJlY3Rpb24gbV9kaXJlY3Rpb247Ci0gICAgQmlk
aUVtYmVkZGluZ1NvdXJjZSBtX3NvdXJjZTsKKyAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb247
CisgICAgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2U7CiB9OwogCiBpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czEsIGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1
czIpCkBAIC0yMDAsMTcgKzE5MCw5IEBAIGVudW0gVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgewog
CiAvLyBCaWRpUmVzb2x2ZXIgaXMgV2ViS2l0J3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIFVuaWNv
ZGUgQmlkaSBBbGdvcml0aG0KIC8vIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyOQotdGVt
cGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBSdW4sIGNsYXNzIFN1YmNsYXNzPiBjbGFzcyBC
aWRpUmVzb2x2ZXJCYXNlIHsKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBS
dW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4gY2xhc3MgQmlkaVJlc29sdmVyQmFzZSB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQmlkaVJlc29sdmVyQmFzZSk7CiBwdWJsaWM6Ci0gICAgQmlk
aVJlc29sdmVyQmFzZSgpCi0gICAgICAgIDogbV9kaXJlY3Rpb24oVV9PVEhFUl9ORVVUUkFMKQot
ICAgICAgICAsIG1fcmVhY2hlZEVuZE9mTGluZShmYWxzZSkKLSAgICAgICAgLCBtX2VtcHR5UnVu
KHRydWUpCi0gICAgICAgICwgbV9uZXN0ZWRJc29sYXRlQ291bnQoMCkKLSAgICB7Ci0gICAgfQot
CiAgICAgY29uc3QgSXRlcmF0b3ImIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50
OyB9CiAgICAgdm9pZCBzZXRQb3NpdGlvbklnbm9yaW5nTmVzdGVkSXNvbGF0ZXMoY29uc3QgSXRl
cmF0b3ImIHBvc2l0aW9uKSB7IG1fY3VycmVudCA9IHBvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRQ
b3NpdGlvbihjb25zdCBJdGVyYXRvciYgcG9zaXRpb24sIHVuc2lnbmVkIG5lc3RlZElzb2xhdGVk
Q291bnQpCkBAIC0yMTksMjAgKzIwMSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIG1fbmVzdGVkSXNv
bGF0ZUNvdW50ID0gbmVzdGVkSXNvbGF0ZWRDb3VudDsKICAgICB9CiAKLSAgICB2b2lkIGluY3Jl
bWVudCgpIHsgc3RhdGljX2Nhc3Q8U3ViY2xhc3MqPih0aGlzKS0+aW5jcmVtZW50SW50ZXJuYWwo
KTsgfQorICAgIHZvaWQgaW5jcmVtZW50KCkgeyBzdGF0aWNfY2FzdDxEZXJpdmVkQ2xhc3MmPigq
dGhpcykuaW5jcmVtZW50SW50ZXJuYWwoKTsgfQogCiAgICAgQmlkaUNvbnRleHQqIGNvbnRleHQo
KSBjb25zdCB7IHJldHVybiBtX3N0YXR1cy5jb250ZXh0LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRD
b250ZXh0KFBhc3NSZWZQdHI8QmlkaUNvbnRleHQ+IGMpIHsgbV9zdGF0dXMuY29udGV4dCA9IGM7
IH0KKyAgICB2b2lkIHNldENvbnRleHQoUmVmUHRyPEJpZGlDb250ZXh0PiYmIGNvbnRleHQpIHsg
bV9zdGF0dXMuY29udGV4dCA9IFdURk1vdmUoY29udGV4dCk7IH0KIAogICAgIHZvaWQgc2V0TGFz
dERpcihVQ2hhckRpcmVjdGlvbiBsYXN0RGlyKSB7IG1fc3RhdHVzLmxhc3QgPSBsYXN0RGlyOyB9
CiAgICAgdm9pZCBzZXRMYXN0U3Ryb25nRGlyKFVDaGFyRGlyZWN0aW9uIGxhc3RTdHJvbmdEaXIp
IHsgbV9zdGF0dXMubGFzdFN0cm9uZyA9IGxhc3RTdHJvbmdEaXI7IH0KICAgICB2b2lkIHNldEVv
ckRpcihVQ2hhckRpcmVjdGlvbiBlb3JEaXIpIHsgbV9zdGF0dXMuZW9yID0gZW9yRGlyOyB9CiAK
ICAgICBVQ2hhckRpcmVjdGlvbiBkaXIoKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQot
ICAgIHZvaWQgc2V0RGlyKFVDaGFyRGlyZWN0aW9uIGQpIHsgbV9kaXJlY3Rpb24gPSBkOyB9Cisg
ICAgdm9pZCBzZXREaXIoVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uKSB7IG1fZGlyZWN0aW9uID0g
ZGlyZWN0aW9uOyB9CiAKICAgICBjb25zdCBCaWRpU3RhdHVzJiBzdGF0dXMoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXR1czsgfQotICAgIHZvaWQgc2V0U3RhdHVzKGNvbnN0IEJpZGlTdGF0dXMgcykg
eyBtX3N0YXR1cyA9IHM7IH0KKyAgICB2b2lkIHNldFN0YXR1cyhCaWRpU3RhdHVzIHN0YXR1cykg
eyBtX3N0YXR1cyA9IHN0YXR1czsgfQogCiAgICAgV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTxJ
dGVyYXRvcj4mIHdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUoKSB7IHJldHVybiBtX3doaXRlc3Bh
Y2VDb2xsYXBzaW5nU3RhdGU7IH0KIApAQCAtMjU4LDkgKzI0MCwxMSBAQCBwdWJsaWM6CiAgICAg
dW5zaWduZWQgd2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4oUnVu
Jik7CiAKIHByb3RlY3RlZDoKKyAgICBCaWRpUmVzb2x2ZXJCYXNlKCkgPSBkZWZhdWx0OworCiAg
ICAgLy8gRklYTUU6IEluc3RlYWQgb2YgSW5saW5lQmlkaVJlc29sdmVycyBzdWJjbGFzc2luZyB0
aGlzIG1ldGhvZCwgd2Ugc2hvdWxkCiAgICAgLy8gcGFzcyBpbiBzb21lIHNvcnQgb2YgVHJhaXRz
IG9iamVjdCB3aGljaCBrbm93cyBob3cgdG8gY3JlYXRlIHJ1bnMgZm9yIGFwcGVuZGluZy4KLSAg
ICB2b2lkIGFwcGVuZFJ1bigpIHsgc3RhdGljX2Nhc3Q8U3ViY2xhc3MqPih0aGlzKS0+YXBwZW5k
UnVuSW50ZXJuYWwoKTsgfQorICAgIHZvaWQgYXBwZW5kUnVuKCkgeyBzdGF0aWNfY2FzdDxEZXJp
dmVkQ2xhc3MmPigqdGhpcykuYXBwZW5kUnVuSW50ZXJuYWwoKTsgfQogCiAgICAgSXRlcmF0b3Ig
bV9jdXJyZW50OwogICAgIC8vIHNvciBhbmQgZW9yIGFyZSAic3RhcnQgb2YgcnVuIiBhbmQgImVu
ZCBvZiBydW4iIHJlc3BlY3RpdmVseSBhbmQgY29ycmVwb25kCkBAIC0yNjksMTEgKzI1MywxMSBA
QCBwcm90ZWN0ZWQ6CiAgICAgSXRlcmF0b3IgbV9lb3I7IC8vIFBvaW50cyB0byB0aGUgbGFzdCBj
aGFyYWN0ZXIgaW4gdGhlIGN1cnJlbnQgcnVuLgogICAgIEl0ZXJhdG9yIG1fbGFzdDsKICAgICBC
aWRpU3RhdHVzIG1fc3RhdHVzOwotICAgIFVDaGFyRGlyZWN0aW9uIG1fZGlyZWN0aW9uOworICAg
IFVDaGFyRGlyZWN0aW9uIG1fZGlyZWN0aW9uIHsgVV9PVEhFUl9ORVVUUkFMIH07CiAgICAgSXRl
cmF0b3IgZW5kT2ZMaW5lOwotICAgIGJvb2wgbV9yZWFjaGVkRW5kT2ZMaW5lOworICAgIGJvb2wg
bV9yZWFjaGVkRW5kT2ZMaW5lIHsgZmFsc2UgfTsKICAgICBJdGVyYXRvciBtX2xhc3RCZWZvcmVF
VDsgLy8gQmVmb3JlIGEgVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUgotICAgIGJvb2wgbV9l
bXB0eVJ1bjsKKyAgICBib29sIG1fZW1wdHlSdW4geyB0cnVlIH07CiAKICAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgbm90IGJlbG9uZyB0byB0aGUgcmVzb2x2ZXIsIGJ1dCByYXRoZXIgYmUgcGFz
c2VkCiAgICAgLy8gaW50byBjcmVhdGVCaWRpUnVuc0ZvckxpbmUgYnkgdGhlIGNhbGxlci4KQEAg
LTI4MSw3ICsyNjUsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0
YXRlPEl0ZXJhdG9yPiBtX3doaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU7CiAKLSAgICB1bnNpZ25l
ZCBtX25lc3RlZElzb2xhdGVDb3VudDsKKyAgICB1bnNpZ25lZCBtX25lc3RlZElzb2xhdGVDb3Vu
dCB7IDAgfTsKICAgICBIYXNoTWFwPFJ1biosIHVuc2lnbmVkPiBtX3doaXRlc3BhY2VDb2xsYXBz
aW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuOwogCiBwcml2YXRlOgpAQCAtMjk3LDE2ICsyODEs
MTQgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8QmlkaUVtYmVkZGluZywgOD4gbV9jdXJyZW50RXhw
bGljaXRFbWJlZGRpbmdTZXF1ZW5jZTsKIH07CiAKLXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvciwg
Y2xhc3MgUnVuPgordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1bj4KIGNs
YXNzIEJpZGlSZXNvbHZlciA6IHB1YmxpYyBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4s
IEJpZGlSZXNvbHZlcjxJdGVyYXRvciwgUnVuPj4gewogfTsKIAotdGVtcGxhdGUgPGNsYXNzIEl0
ZXJhdG9yLCBjbGFzcyBSdW4sIGNsYXNzIElzb2xhdGVSdW4+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJ
dGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBJc29sYXRlUnVuPgogY2xhc3MgQmlkaVJl
c29sdmVyV2l0aElzb2xhdGUgOiBwdWJsaWMgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVu
LCBCaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZTxJdGVyYXRvciwgUnVuLCBJc29sYXRlUnVuPj4gewog
cHVibGljOgotI2lmbmRlZiBOREVCVUcKICAgICB+QmlkaVJlc29sdmVyV2l0aElzb2xhdGUoKTsK
LSNlbmRpZgogCiAgICAgdm9pZCBpbmNyZW1lbnRJbnRlcm5hbCgpOwogICAgIHZvaWQgYXBwZW5k
UnVuSW50ZXJuYWwoKTsKQEAgLTMxNiwxNyArMjk4LDE1IEBAIHByaXZhdGU6CiAgICAgVmVjdG9y
PElzb2xhdGVSdW4+IG1faXNvbGF0ZWRSdW5zOwogfTsKIAotI2lmbmRlZiBOREVCVUcKLXRlbXBs
YXRlIDxjbGFzcyBJdGVyYXRvciwgY2xhc3MgUnVuLCBjbGFzcyBJc29sYXRlUnVuPgotQmlkaVJl
c29sdmVyV2l0aElzb2xhdGU8SXRlcmF0b3IsIFJ1biwgSXNvbGF0ZVJ1bj46On5CaWRpUmVzb2x2
ZXJXaXRoSXNvbGF0ZSgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVu
LCB0eXBlbmFtZSBJc29sYXRlUnVuPgoraW5saW5lIEJpZGlSZXNvbHZlcldpdGhJc29sYXRlPEl0
ZXJhdG9yLCBSdW4sIElzb2xhdGVSdW4+Ojp+QmlkaVJlc29sdmVyV2l0aElzb2xhdGUoKQogewog
ICAgIC8vIFRoZSBvd25lciBvZiB0aGlzIHJlc29sdmVyIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhl
IGlzb2xhdGVkIHJ1bnMuCiAgICAgQVNTRVJUKG1faXNvbGF0ZWRSdW5zLmlzRW1wdHkoKSk7CiB9
Ci0jZW5kaWYKIAotdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBSdW4sIGNsYXNzIFN1
YmNsYXNzPgotdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIFN1YmNsYXNzPjo6
YXBwZW5kUnVuSW50ZXJuYWwoKQordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1l
IFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgordm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJh
dG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OmFwcGVuZFJ1bkludGVybmFsKCkKIHsKICAgICBpZiAo
IW1fZW1wdHlSdW4gJiYgIW1fZW9yLmF0RW5kKCkpIHsKICAgICAgICAgdW5zaWduZWQgc3RhcnRP
ZmZzZXQgPSBtX3Nvci5vZmZzZXQoKTsKQEAgLTM0OCw4ICszMjgsOCBAQCB2b2lkIEJpZGlSZXNv
bHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgU3ViY2xhc3M+OjphcHBlbmRSdW5JbnRlcm5hbCgpCiAg
ICAgbV9zdGF0dXMuZW9yID0gVV9PVEhFUl9ORVVUUkFMOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3Mg
SXRlcmF0b3IsIGNsYXNzIFJ1biwgY2xhc3MgU3ViY2xhc3M+Ci12b2lkIEJpZGlSZXNvbHZlckJh
c2U8SXRlcmF0b3IsIFJ1biwgU3ViY2xhc3M+OjplbWJlZChVQ2hhckRpcmVjdGlvbiBkaXIsIEJp
ZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNlKQordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5
cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgordm9pZCBCaWRpUmVzb2x2ZXJCYXNl
PEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OmVtYmVkKFVDaGFyRGlyZWN0aW9uIGRpciwg
QmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UpCiB7CiAgICAgLy8gSXNvbGF0ZWQgc3BhbnMgY29t
cHV0ZSBiYXNlIGRpcmVjdGlvbmFsaXR5IGR1cmluZyB0aGVpciBvd24gVUJBIHJ1bi4KICAgICAv
LyBEbyBub3QgaW5zZXJ0IGZha2UgZW1iZWQgY2hhcmFjdGVycyBvbmNlIHdlIGVudGVyIGFuIGlz
b2xhdGVkIHNwYW4uCkBAIC0zNTksOCArMzM5LDggQEAgdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0
ZXJhdG9yLCBSdW4sIFN1YmNsYXNzPjo6ZW1iZWQoVUNoYXJEaXJlY3Rpb24gZGlyLCBCaWRpRW0K
ICAgICBtX2N1cnJlbnRFeHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlLmFwcGVuZChCaWRpRW1iZWRk
aW5nKGRpciwgc291cmNlKSk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvciwgY2xhc3Mg
UnVuLCBjbGFzcyBTdWJjbGFzcz4KLXZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVu
LCBTdWJjbGFzcz46OmNoZWNrRGlyZWN0aW9uSW5Mb3dlclJhaXNlRW1iZWRkaW5nTGV2ZWwoKQor
dGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZl
ZENsYXNzPgordm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFz
cz46OmNoZWNrRGlyZWN0aW9uSW5Mb3dlclJhaXNlRW1iZWRkaW5nTGV2ZWwoKQogewogICAgIEFT
U0VSVChtX3N0YXR1cy5lb3IgIT0gVV9PVEhFUl9ORVVUUkFMIHx8IG1fZW9yLmF0RW5kKCkpOwog
ICAgIEFTU0VSVChtX3N0YXR1cy5sYXN0ICE9IFVfRElSX05PTl9TUEFDSU5HX01BUksKQEAgLTM3
NCw4ICszNTQsOCBAQCB2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgU3ViY2xh
c3M+OjpjaGVja0RpcmVjdGlvbkluTG93ZXJSYWlzZUVtYmVkZAogICAgICAgICBtX2RpcmVjdGlv
biA9IG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9MRUZUX1RPX1JJR0hUID8gVV9MRUZUX1RPX1JJ
R0hUIDogVV9SSUdIVF9UT19MRUZUOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3IsIGNs
YXNzIFJ1biwgY2xhc3MgU3ViY2xhc3M+Ci12b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3Is
IFJ1biwgU3ViY2xhc3M+Ojpsb3dlckV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwoVUNoYXJEaXJlY3Rp
b24gZnJvbSkKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVu
YW1lIERlcml2ZWRDbGFzcz4KK3ZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBE
ZXJpdmVkQ2xhc3M+Ojpsb3dlckV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwoVUNoYXJEaXJlY3Rpb24g
ZnJvbSkKIHsKICAgICBpZiAoIW1fZW1wdHlSdW4gJiYgbV9lb3IgIT0gbV9sYXN0KSB7CiAgICAg
ICAgIGNoZWNrRGlyZWN0aW9uSW5Mb3dlclJhaXNlRW1iZWRkaW5nTGV2ZWwoKTsKQEAgLTQxMCw4
ICszOTAsOCBAQCB2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgU3ViY2xhc3M+
Ojpsb3dlckV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwoVUNoYQogICAgIG1fZW9yID0gSXRlcmF0b3Io
KTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBSdW4sIGNsYXNzIFN1YmNs
YXNzPgotdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIFN1YmNsYXNzPjo6cmFp
c2VFeHBsaWNpdEVtYmVkZGluZ0xldmVsKFVDaGFyRGlyZWN0aW9uIGZyb20sIFVDaGFyRGlyZWN0
aW9uIHRvKQordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5h
bWUgRGVyaXZlZENsYXNzPgordm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERl
cml2ZWRDbGFzcz46OnJhaXNlRXhwbGljaXRFbWJlZGRpbmdMZXZlbChVQ2hhckRpcmVjdGlvbiBm
cm9tLCBVQ2hhckRpcmVjdGlvbiB0bykKIHsKICAgICBpZiAoIW1fZW1wdHlSdW4gJiYgbV9lb3Ig
IT0gbV9sYXN0KSB7CiAgICAgICAgIGNoZWNrRGlyZWN0aW9uSW5Mb3dlclJhaXNlRW1iZWRkaW5n
TGV2ZWwoKTsKQEAgLTQ0Nyw1MSArNDI3LDUwIEBAIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVy
YXRvciwgUnVuLCBTdWJjbGFzcz46OnJhaXNlRXhwbGljaXRFbWJlZGRpbmdMZXZlbChVQ2hhCiAg
ICAgbV9lb3IgPSBJdGVyYXRvcigpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3IsIGNs
YXNzIFJ1biwgY2xhc3MgU3ViY2xhc3M+Ci1ib29sIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3Is
IFJ1biwgU3ViY2xhc3M+Ojpjb21taXRFeHBsaWNpdEVtYmVkZGluZygpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Citib29s
IEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6Y29tbWl0RXhw
bGljaXRFbWJlZGRpbmcoKQogewogICAgIC8vIFdoZW4gd2UncmUgImluSXNvbGF0ZSgpIiB3ZSdy
ZSByZXNvbHZpbmcgdGhlIHBhcmVudCBjb250ZXh0IHdoaWNoCiAgICAgLy8gaWdub3JlcyAoc2tp
cHMgb3ZlcikgdGhlIGlzb2xhdGVkIGNvbnRlbnQsIGluY2x1ZGluZyBlbWJlZGRpbmcgbGV2ZWxz
LgogICAgIC8vIFdlIHNob3VsZCBuZXZlciBhY2NydWUgZW1iZWRkaW5nIGxldmVscyB3aGlsZSBz
a2lwcGluZyBvdmVyIGlzb2xhdGVkIGNvbnRlbnQuCiAgICAgQVNTRVJUKCFpbklzb2xhdGUoKSB8
fCBtX2N1cnJlbnRFeHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlLmlzRW1wdHkoKSk7CiAKLSAgICB1
bnNpZ25lZCBjaGFyIGZyb21MZXZlbCA9IGNvbnRleHQoKS0+bGV2ZWwoKTsKKyAgICBhdXRvIGZy
b21MZXZlbCA9IGNvbnRleHQoKS0+bGV2ZWwoKTsKICAgICBSZWZQdHI8QmlkaUNvbnRleHQ+IHRv
Q29udGV4dCA9IGNvbnRleHQoKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJy
ZW50RXhwbGljaXRFbWJlZGRpbmdTZXF1ZW5jZS5zaXplKCk7ICsraSkgewotICAgICAgICBCaWRp
RW1iZWRkaW5nIGVtYmVkZGluZyA9IG1fY3VycmVudEV4cGxpY2l0RW1iZWRkaW5nU2VxdWVuY2Vb
aV07Ci0gICAgICAgIGlmIChlbWJlZGRpbmcuZGlyZWN0aW9uKCkgPT0gVV9QT1BfRElSRUNUSU9O
QUxfRk9STUFUKSB7Ci0gICAgICAgICAgICBpZiAoQmlkaUNvbnRleHQqIHBhcmVudENvbnRleHQg
PSB0b0NvbnRleHQtPnBhcmVudCgpKQorICAgIGZvciAoYXV0byYgZW1iZWRkaW5nIDogbV9jdXJy
ZW50RXhwbGljaXRFbWJlZGRpbmdTZXF1ZW5jZSkgeworICAgICAgICBpZiAoZW1iZWRkaW5nLmRp
cmVjdGlvbiA9PSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQpIHsKKyAgICAgICAgICAgIGlmIChh
dXRvKiBwYXJlbnRDb250ZXh0ID0gdG9Db250ZXh0LT5wYXJlbnQoKSkKICAgICAgICAgICAgICAg
ICB0b0NvbnRleHQgPSBwYXJlbnRDb250ZXh0OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uID0gKGVtYmVkZGluZy5kaXJlY3Rpb24oKSA9PSBV
X1JJR0hUX1RPX0xFRlRfRU1CRURESU5HIHx8IGVtYmVkZGluZy5kaXJlY3Rpb24oKSA9PSBVX1JJ
R0hUX1RPX0xFRlRfT1ZFUlJJREUpID8gVV9SSUdIVF9UT19MRUZUIDogVV9MRUZUX1RPX1JJR0hU
OwotICAgICAgICAgICAgYm9vbCBvdmVycmlkZSA9IGVtYmVkZGluZy5kaXJlY3Rpb24oKSA9PSBV
X0xFRlRfVE9fUklHSFRfT1ZFUlJJREUgfHwgZW1iZWRkaW5nLmRpcmVjdGlvbigpID09IFVfUklH
SFRfVE9fTEVGVF9PVkVSUklERTsKKyAgICAgICAgICAgIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlv
biA9IChlbWJlZGRpbmcuZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcgfHwg
ZW1iZWRkaW5nLmRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREUpID8gVV9SSUdI
VF9UT19MRUZUIDogVV9MRUZUX1RPX1JJR0hUOworICAgICAgICAgICAgYm9vbCBvdmVycmlkZSA9
IGVtYmVkZGluZy5kaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUX09WRVJSSURFIHx8IGVtYmVk
ZGluZy5kaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFOwogICAgICAgICAgICAg
dW5zaWduZWQgY2hhciBsZXZlbCA9IHRvQ29udGV4dC0+bGV2ZWwoKTsKICAgICAgICAgICAgIGlm
IChkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUKQogICAgICAgICAgICAgICAgIGxldmVsID0g
bmV4dEdyZWF0ZXJPZGRMZXZlbChsZXZlbCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgbGV2ZWwgPSBuZXh0R3JlYXRlckV2ZW5MZXZlbChsZXZlbCk7CiAgICAgICAgICAgICBp
ZiAobGV2ZWwgPCA2MSkKLSAgICAgICAgICAgICAgICB0b0NvbnRleHQgPSBCaWRpQ29udGV4dDo6
Y3JlYXRlKGxldmVsLCBkaXJlY3Rpb24sIG92ZXJyaWRlLCBlbWJlZGRpbmcuc291cmNlKCksIHRv
Q29udGV4dC5nZXQoKSk7CisgICAgICAgICAgICAgICAgdG9Db250ZXh0ID0gQmlkaUNvbnRleHQ6
OmNyZWF0ZShsZXZlbCwgZGlyZWN0aW9uLCBvdmVycmlkZSwgZW1iZWRkaW5nLnNvdXJjZSwgdG9D
b250ZXh0LmdldCgpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHVuc2lnbmVkIGNoYXIgdG9M
ZXZlbCA9IHRvQ29udGV4dC0+bGV2ZWwoKTsKKyAgICBhdXRvIHRvTGV2ZWwgPSB0b0NvbnRleHQt
PmxldmVsKCk7CiAKICAgICBpZiAodG9MZXZlbCA+IGZyb21MZXZlbCkKICAgICAgICAgcmFpc2VF
eHBsaWNpdEVtYmVkZGluZ0xldmVsKGZyb21MZXZlbCAlIDIgPyBVX1JJR0hUX1RPX0xFRlQgOiBV
X0xFRlRfVE9fUklHSFQsIHRvTGV2ZWwgJSAyID8gVV9SSUdIVF9UT19MRUZUIDogVV9MRUZUX1RP
X1JJR0hUKTsKICAgICBlbHNlIGlmICh0b0xldmVsIDwgZnJvbUxldmVsKQogICAgICAgICBsb3dl
ckV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwoZnJvbUxldmVsICUgMiA/IFVfUklHSFRfVE9fTEVGVCA6
IFVfTEVGVF9UT19SSUdIVCk7CiAKLSAgICBzZXRDb250ZXh0KHRvQ29udGV4dCk7CisgICAgc2V0
Q29udGV4dChXVEZNb3ZlKHRvQ29udGV4dCkpOwogCiAgICAgbV9jdXJyZW50RXhwbGljaXRFbWJl
ZGRpbmdTZXF1ZW5jZS5jbGVhcigpOwogCiAgICAgcmV0dXJuIGZyb21MZXZlbCAhPSB0b0xldmVs
OwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3IsIGNsYXNzIFJ1biwgY2xhc3MgU3ViY2xh
c3M+Ci1pbmxpbmUgdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIFN1YmNsYXNz
Pjo6dXBkYXRlU3RhdHVzTGFzdEZyb21DdXJyZW50RGlyZWN0aW9uKFVDaGFyRGlyZWN0aW9uIGRp
ckN1cnJlbnQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBl
bmFtZSBEZXJpdmVkQ2xhc3M+CitpbmxpbmUgdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9y
LCBSdW4sIERlcml2ZWRDbGFzcz46OnVwZGF0ZVN0YXR1c0xhc3RGcm9tQ3VycmVudERpcmVjdGlv
bihVQ2hhckRpcmVjdGlvbiBkaXJDdXJyZW50KQogewogICAgIHN3aXRjaCAoZGlyQ3VycmVudCkg
ewogICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUjoKQEAgLTUzMSw4ICs1MTAs
OCBAQCBpbmxpbmUgdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIFN1YmNsYXNz
Pjo6dXBkYXRlU3RhdHVzTGFzdEZyb21DdXJyZQogICAgIH0KIH0KIAotdGVtcGxhdGUgPGNsYXNz
IEl0ZXJhdG9yLCBjbGFzcyBSdW4sIGNsYXNzIFN1YmNsYXNzPgotaW5saW5lIHZvaWQgQmlkaVJl
c29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBTdWJjbGFzcz46OnJlb3JkZXJSdW5zRnJvbUxldmVs
cygpCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBE
ZXJpdmVkQ2xhc3M+CitpbmxpbmUgdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4s
IERlcml2ZWRDbGFzcz46OnJlb3JkZXJSdW5zRnJvbUxldmVscygpCiB7CiAgICAgdW5zaWduZWQg
Y2hhciBsZXZlbExvdyA9IDEyODsKICAgICB1bnNpZ25lZCBjaGFyIGxldmVsSGlnaCA9IDA7CkBA
IC01NjgsOCArNTQ3LDggQEAgaW5saW5lIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwg
UnVuLCBTdWJjbGFzcz46OnJlb3JkZXJSdW5zRnJvbUxldmVscygpCiAgICAgfQogfQogCi10ZW1w
bGF0ZSA8Y2xhc3MgSXRlcmF0b3IsIGNsYXNzIFJ1biwgY2xhc3MgU3ViY2xhc3M+Ci12b2lkIEJp
ZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgU3ViY2xhc3M+OjpjcmVhdGVCaWRpUnVuc0Zv
ckxpbmUoY29uc3QgSXRlcmF0b3ImIGVuZCwgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgb3ZlcnJp
ZGUsIGJvb2wgaGFyZExpbmVCcmVhaykKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBl
bmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KK3ZvaWQgQmlkaVJlc29sdmVyQmFzZTxJ
dGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+OjpjcmVhdGVCaWRpUnVuc0ZvckxpbmUoY29uc3Qg
SXRlcmF0b3ImIGVuZCwgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgb3ZlcnJpZGUsIGJvb2wgaGFy
ZExpbmVCcmVhaykKIHsKICAgICBBU1NFUlQobV9kaXJlY3Rpb24gPT0gVV9PVEhFUl9ORVVUUkFM
KTsKIApAQCAtNTk1LDcgKzU3NCw3IEBAIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwg
UnVuLCBTdWJjbGFzcz46OmNyZWF0ZUJpZGlSdW5zRm9yTGluZShjb25zdCBJdGVyCiAKICAgICBt
X2xhc3QgPSBtX2N1cnJlbnQ7CiAgICAgYm9vbCBwYXN0RW5kID0gZmFsc2U7Ci0gICAgQmlkaVJl
c29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBTdWJjbGFzcz4gc3RhdGVBdEVuZDsKKyAgICBCaWRp
UmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz4gc3RhdGVBdEVuZDsKIAog
ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIFVDaGFyRGlyZWN0aW9uIGRpckN1cnJlbnQ7CkBA
IC05NzUsMTkgKzk1NCwxNyBAQCB2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwg
U3ViY2xhc3M+OjpjcmVhdGVCaWRpUnVuc0ZvckxpbmUoY29uc3QgSXRlcgogICAgIGVuZE9mTGlu
ZSA9IEl0ZXJhdG9yKCk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvciwgY2xhc3MgUnVu
LCBjbGFzcyBTdWJjbGFzcz4KLXZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBT
dWJjbGFzcz46OnNldFdoaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVu
KFJ1biYgcnVuLCBzaXplX3QgdHJhbnNpdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9y
LCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KK3ZvaWQgQmlkaVJlc29sdmVy
QmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+OjpzZXRXaGl0ZXNwYWNlQ29sbGFwc2lu
Z1RyYW5zaXRpb25Gb3JJc29sYXRlZFJ1bihSdW4mIHJ1biwgc2l6ZV90IHRyYW5zaXRpb24pCiB7
CiAgICAgQVNTRVJUKCFtX3doaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVk
UnVuLmNvbnRhaW5zKCZydW4pKTsKICAgICBtX3doaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlv
bkZvcklzb2xhdGVkUnVuLmFkZCgmcnVuLCB0cmFuc2l0aW9uKTsKIH0KIAotdGVtcGxhdGU8Y2xh
c3MgSXRlcmF0b3IsIGNsYXNzIFJ1biwgY2xhc3MgU3ViY2xhc3M+Ci11bnNpZ25lZCBCaWRpUmVz
b2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIFN1YmNsYXNzPjo6d2hpdGVzcGFjZUNvbGxhcHNpbmdU
cmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4oUnVuJiBydW4pCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVy
YXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Cit1bnNpZ25lZCBCaWRp
UmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OndoaXRlc3BhY2VDb2xs
YXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuKFJ1biYgcnVuKQogewogICAgIHJldHVybiBt
X3doaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuLnRha2UoJnJ1bik7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEJpZGlSZXNvbHZlcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDaGVja2VyQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDaGVja2VyQ2xpZW50LmgK
aW5kZXggZWM0NTg3MGMzZGFhMTdiZTBhM2ViNDI3MWM0ODEwN2UzZThjNDEyZS4uMzllMzIxMWU4
Mzk0NTFlMDRiYzc3MDVhNDk0ZTdjYTY2YTRlNTFlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q2hlY2tlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJDbGllbnQuaApAQCAtMjUsMjMgKzI1LDE3IEBACiAg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgVGV4dENoZWNrZXJDbGllbnRfaAotI2RlZmlu
ZSBUZXh0Q2hlY2tlckNsaWVudF9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlRleHRDaGVj
a2luZy5oIgogCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9u
OwogCiBjbGFzcyBUZXh0Q2hlY2tlckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+VGV4
dENoZWNrZXJDbGllbnQoKSB7fQorICAgIHZpcnR1YWwgflRleHRDaGVja2VyQ2xpZW50KCkgeyB9
CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rp
b24oVGV4dENoZWNraW5nVHlwZSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVX
b3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYpID0gMDsKQEAgLTU4LDkgKzUyLDcgQEAg
cHVibGljOgogICAgIC8vIHByb3ZpZGUgbW9yZSBhY2N1cmF0ZSBjb3JyZWN0aW9uIHN1Z2dlc3Rp
b25zLiBDYWxsZXIgY2FuIHBhc3MgaW4gbW9yZSB0ZXh0IGluICJjb250ZXh0IiB0byBhaWQgc3Vj
aCBzcGVsbGNoZWNrZXJzIG9uIGxhbmd1YWdlCiAgICAgLy8gaWRlbnRpZmljYXRpb24uIE5vcmFt
bGx5IGl0J3MgdGhlIHRleHQgc3Vycm91bmRpbmcgdGhlICJ3b3JkIiBmb3Igd2hpY2ggd2UgYXJl
IGdldHRpbmcgY29ycmVjdGlvbiBzdWdnZXN0aW9ucy4KICAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vl
c3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24sIFZlY3RvcjxTdHJpbmc+JiBn
dWVzc2VzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBh
c3NSZWZQdHI8VGV4dENoZWNraW5nUmVxdWVzdD4sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1
cnJlbnRTZWxlY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZT
dHJpbmcoVGV4dENoZWNraW5nUmVxdWVzdCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJl
bnRTZWxlY3Rpb24pID0gMDsKIH07CiAKIH0KLQotI2VuZGlmIC8vIFRleHRDaGVja2VyQ2xpZW50
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5n
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oCmluZGV4IDRi
ZmU5MzIwOWMyMjE3ZTkyY2Q4MmY1NTNhNDhjMjQzNGExMzY0MDQuLmEzNDljMzgyOGQ3YmE4Zjdh
MWU0Mzg4NGU2MTRkODQ2YTI4NjQ3ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dEVuY29kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0RW5jb2RpbmcuaApAQCAtMjMsNzcgKzIzLDU5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAq
LwogCi0jaWZuZGVmIFRleHRFbmNvZGluZ19oCi0jZGVmaW5lIFRleHRFbmNvZGluZ19oCisjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIlRleHRDb2RlYy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFRleHRFbmNvZGluZyB7Ci0g
ICAgcHVibGljOgotICAgICAgICBUZXh0RW5jb2RpbmcoKSA6IG1fbmFtZSgwKSB7IH0KLSAgICAg
ICAgVGV4dEVuY29kaW5nKGNvbnN0IGNoYXIqIG5hbWUpOwotICAgICAgICBXRUJDT1JFX0VYUE9S
VCBUZXh0RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBuYW1lKTsKK2NsYXNzIFRleHRFbmNvZGluZyB7
CitwdWJsaWM6CisgICAgVGV4dEVuY29kaW5nKCkgPSBkZWZhdWx0OworICAgIFRleHRFbmNvZGlu
Zyhjb25zdCBjaGFyKiBuYW1lKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBUZXh0RW5jb2RpbmcoY29u
c3QgU3RyaW5nJiBuYW1lKTsKIAotICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVy
biBtX25hbWU7IH0KLSAgICAgICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmFtZTsgfQotICAgICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBjaGFyKiBkb21OYW1lKCkgY29u
c3Q7IC8vIG5hbWUgZXhwb3NlZCB2aWEgRE9NCi0gICAgICAgIGJvb2wgdXNlc1Zpc3VhbE9yZGVy
aW5nKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaXNKYXBhbmVzZSgpIGNvbnN0OwotICAgICAgICAK
LSAgICAgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBkaXNwbGF5U3RyaW5nKFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gc3RyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9iYWNr
c2xhc2hBc0N1cnJlbmN5U3ltYm9sID09ICdcXCcgfHwgIXN0cikKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RyOwotICAgICAgICAgICAgcmV0dXJuIHN0ci0+cmVwbGFjZSgnXFwnLCBtX2JhY2tz
bGFzaEFzQ3VycmVuY3lTeW1ib2wpOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgICAgICB2b2lkIGRpc3BsYXlCdWZmZXIoQ2hhcmFjdGVy
VHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuKSBjb25zdAotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobV9iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sID09ICdcXCcpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJ1xcJykKLSAgICAg
ICAgICAgICAgICAgICAgY2hhcmFjdGVyc1tpXSA9IG1fYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJv
bDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuIG1fbmFtZTsgfQorICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCB7IHJldHVybiBt
X25hbWU7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBjaGFyKiBkb21OYW1lKCkgY29uc3Q7
IC8vIG5hbWUgZXhwb3NlZCB2aWEgRE9NCisgICAgYm9vbCB1c2VzVmlzdWFsT3JkZXJpbmcoKSBj
b25zdDsKKyAgICBib29sIGlzSmFwYW5lc2UoKSBjb25zdDsKIAotICAgICAgICBjb25zdCBUZXh0
RW5jb2RpbmcmIGNsb3Nlc3RCeXRlQmFzZWRFcXVpdmFsZW50KCkgY29uc3Q7Ci0gICAgICAgIGNv
bnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmdGb3JGb3JtU3VibWlzc2lvbigpIGNvbnN0OworICAg
IGNvbnN0IFRleHRFbmNvZGluZyYgY2xvc2VzdEJ5dGVCYXNlZEVxdWl2YWxlbnQoKSBjb25zdDsK
KyAgICBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nRm9yRm9ybVN1Ym1pc3Npb24oKSBjb25z
dDsKIAotICAgICAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqIHN0ciwgc2l6ZV90IGxlbmd0
aCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbCBpZ25vcmVkOwotICAgICAgICAg
ICAgcmV0dXJuIGRlY29kZShzdHIsIGxlbmd0aCwgZmFsc2UsIGlnbm9yZWQpOwotICAgICAgICB9
Ci0gICAgICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVf
dCBsZW5ndGgsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKSBjb25zdDsKLSAgICAg
ICAgQ1N0cmluZyBlbmNvZGUoU3RyaW5nVmlldywgVW5lbmNvZGFibGVIYW5kbGluZykgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxl
bmd0aCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpIGNvbnN0OworICAgIFN0cmlu
ZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgpIGNvbnN0OworICAgIENTdHJpbmcg
ZW5jb2RlKFN0cmluZ1ZpZXcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIGNvbnN0OwogCi0gICAgICAg
IFVDaGFyIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSBjb25zdDsKLSAgICAgICAgYm9vbCBp
c0J5dGVCYXNlZEVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gIWlzTm9uQnl0ZUJhc2VkRW5jb2Rp
bmcoKTsgfQorICAgIFVDaGFyIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSBjb25zdDsKKyAg
ICBib29sIGlzQnl0ZUJhc2VkRW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiAhaXNOb25CeXRlQmFz
ZWRFbmNvZGluZygpOyB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICBib29sIGlzTm9uQnl0ZUJh
c2VkRW5jb2RpbmcoKSBjb25zdDsKLSAgICAgICAgYm9vbCBpc1VURjdFbmNvZGluZygpIGNvbnN0
OworcHJpdmF0ZToKKyAgICBib29sIGlzTm9uQnl0ZUJhc2VkRW5jb2RpbmcoKSBjb25zdDsKKyAg
ICBib29sIGlzVVRGN0VuY29kaW5nKCkgY29uc3Q7CiAKLSAgICAgICAgY29uc3QgY2hhciogbV9u
YW1lOwotICAgICAgICBVQ2hhciBtX2JhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2w7Ci0gICAgfTsK
KyAgICBjb25zdCBjaGFyKiBtX25hbWUgeyBudWxscHRyIH07CisgICAgVUNoYXIgbV9iYWNrc2xh
c2hBc0N1cnJlbmN5U3ltYm9sOworfTsKIAotICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgVGV4dEVuY29kaW5nJiBhLCBjb25zdCBUZXh0RW5jb2RpbmcmIGIpIHsgcmV0dXJuIGEubmFt
ZSgpID09IGIubmFtZSgpOyB9Ci0gICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUZXh0
RW5jb2RpbmcmIGEsIGNvbnN0IFRleHRFbmNvZGluZyYgYikgeyByZXR1cm4gYS5uYW1lKCkgIT0g
Yi5uYW1lKCk7IH0KK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVGV4dEVuY29kaW5nJiBh
LCBjb25zdCBUZXh0RW5jb2RpbmcmIGIpIHsgcmV0dXJuIGEubmFtZSgpID09IGIubmFtZSgpOyB9
CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRleHRFbmNvZGluZyYgYSwgY29uc3QgVGV4
dEVuY29kaW5nJiBiKSB7IHJldHVybiBhLm5hbWUoKSAhPSBiLm5hbWUoKTsgfQogCi0gICAgY29u
c3QgVGV4dEVuY29kaW5nJiBBU0NJSUVuY29kaW5nKCk7Ci0gICAgY29uc3QgVGV4dEVuY29kaW5n
JiBMYXRpbjFFbmNvZGluZygpOwotICAgIGNvbnN0IFRleHRFbmNvZGluZyYgVVRGMTZCaWdFbmRp
YW5FbmNvZGluZygpOwotICAgIGNvbnN0IFRleHRFbmNvZGluZyYgVVRGMTZMaXR0bGVFbmRpYW5F
bmNvZGluZygpOwotICAgIGNvbnN0IFRleHRFbmNvZGluZyYgVVRGMzJCaWdFbmRpYW5FbmNvZGlu
ZygpOwotICAgIGNvbnN0IFRleHRFbmNvZGluZyYgVVRGMzJMaXR0bGVFbmRpYW5FbmNvZGluZygp
OwotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IFRleHRFbmNvZGluZyYgVVRGOEVuY29kaW5nKCk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgVGV4dEVuY29kaW5nJiBXaW5kb3dzTGF0aW4xRW5j
b2RpbmcoKTsKK2NvbnN0IFRleHRFbmNvZGluZyYgQVNDSUlFbmNvZGluZygpOworY29uc3QgVGV4
dEVuY29kaW5nJiBMYXRpbjFFbmNvZGluZygpOworY29uc3QgVGV4dEVuY29kaW5nJiBVVEYxNkJp
Z0VuZGlhbkVuY29kaW5nKCk7Citjb25zdCBUZXh0RW5jb2RpbmcmIFVURjE2TGl0dGxlRW5kaWFu
RW5jb2RpbmcoKTsKK2NvbnN0IFRleHRFbmNvZGluZyYgVVRGMzJCaWdFbmRpYW5FbmNvZGluZygp
OworY29uc3QgVGV4dEVuY29kaW5nJiBVVEYzMkxpdHRsZUVuZGlhbkVuY29kaW5nKCk7CitXRUJD
T1JFX0VYUE9SVCBjb25zdCBUZXh0RW5jb2RpbmcmIFVURjhFbmNvZGluZygpOworV0VCQ09SRV9F
WFBPUlQgY29uc3QgVGV4dEVuY29kaW5nJiBXaW5kb3dzTGF0aW4xRW5jb2RpbmcoKTsKIAotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQoraW5saW5lIFN0cmluZyBUZXh0RW5jb2Rpbmc6OmRlY29kZShj
b25zdCBjaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25zdAoreworICAgIGJvb2wg
aWdub3JlZDsKKyAgICByZXR1cm4gZGVjb2RlKGNoYXJhY3RlcnMsIGxlbmd0aCwgZmFsc2UsIGln
bm9yZWQpOworfQogCi0jZW5kaWYgLy8gVGV4dEVuY29kaW5nX2gKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAppbmRleCAw
NmQ5MTQyMjQwNzlhZmJhNzE1MTNhYzBkMjE4ODVjMmQ1MzFkYmNhLi5kN2RlYzczNTg5OGMyMzI4
ZDA0Y2JhNzQyNjdhYjQyOGJmY2JjNDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jv
b3RJbmxpbmVCb3guY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTUwLDcgKzUwLDcgQEAgc3RydWN0IFNhbWVTaXplQXNSb290SW5saW5l
Qm94IDogcHVibGljIElubGluZUZsb3dCb3ggewogQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJvb3RJ
bmxpbmVCb3gpID09IHNpemVvZihTYW1lU2l6ZUFzUm9vdElubGluZUJveCksIFJvb3RJbmxpbmVC
b3hfc2hvdWxkX3N0YXlfc21hbGwpOwogCiB0eXBlZGVmIFdURjo6SGFzaE1hcDxjb25zdCBSb290
SW5saW5lQm94Kiwgc3RkOjp1bmlxdWVfcHRyPEVsbGlwc2lzQm94Pj4gRWxsaXBzaXNCb3hNYXA7
Ci1zdGF0aWMgRWxsaXBzaXNCb3hNYXAqIGdFbGxpcHNpc0JveE1hcCA9IDA7CitzdGF0aWMgRWxs
aXBzaXNCb3hNYXAqIGdFbGxpcHNpc0JveE1hcDsKIAogc3RhdGljIENvbnRhaW5pbmdSZWdpb25N
YXAmIGNvbnRhaW5pbmdSZWdpb25NYXAoUmVuZGVyQmxvY2tGbG93JiBibG9jaykKIHsKQEAgLTIw
OCwxMCArMjA4LDEwIEBAIHZvaWQgUm9vdElubGluZUJveDo6YWRqdXN0UG9zaXRpb24oZmxvYXQg
ZHgsIGZsb2F0IGR5KQogdm9pZCBSb290SW5saW5lQm94OjpjaGlsZFJlbW92ZWQoSW5saW5lQm94
KiBib3gpCiB7CiAgICAgaWYgKCZib3gtPnJlbmRlcmVyKCkgPT0gbV9saW5lQnJlYWtPYmopCi0g
ICAgICAgIHNldExpbmVCcmVha0luZm8oMCwgMCwgQmlkaVN0YXR1cygpKTsKKyAgICAgICAgc2V0
TGluZUJyZWFrSW5mbyhudWxscHRyLCAwLCBCaWRpU3RhdHVzKCkpOwogCiAgICAgZm9yIChSb290
SW5saW5lQm94KiBwcmV2ID0gcHJldlJvb3RCb3goKTsgcHJldiAmJiBwcmV2LT5saW5lQnJlYWtP
YmooKSA9PSAmYm94LT5yZW5kZXJlcigpOyBwcmV2ID0gcHJldi0+cHJldlJvb3RCb3goKSkgewot
ICAgICAgICBwcmV2LT5zZXRMaW5lQnJlYWtJbmZvKDAsIDAsIEJpZGlTdGF0dXMoKSk7CisgICAg
ICAgIHByZXYtPnNldExpbmVCcmVha0luZm8obnVsbHB0ciwgMCwgQmlkaVN0YXR1cygpKTsKICAg
ICAgICAgcHJldi0+bWFya0RpcnR5KCk7CiAgICAgfQogfQpAQCAtNTY2LDIyICs1NjYsMjAgQEAg
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBSb290SW5saW5lQm94OjpzZWxlY3Rpb25TdGF0
ZSgpCiAKIElubGluZUJveCogUm9vdElubGluZUJveDo6Zmlyc3RTZWxlY3RlZEJveCgpCiB7Ci0g
ICAgZm9yIChJbmxpbmVCb3gqIGJveCA9IGZpcnN0TGVhZkNoaWxkKCk7IGJveDsgYm94ID0gYm94
LT5uZXh0TGVhZkNoaWxkKCkpIHsKKyAgICBmb3IgKGF1dG8qIGJveCA9IGZpcnN0TGVhZkNoaWxk
KCk7IGJveDsgYm94ID0gYm94LT5uZXh0TGVhZkNoaWxkKCkpIHsKICAgICAgICAgaWYgKGJveC0+
c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpCiAgICAgICAg
ICAgICByZXR1cm4gYm94OwogICAgIH0KLQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxs
cHRyOwogfQogCiBJbmxpbmVCb3gqIFJvb3RJbmxpbmVCb3g6Omxhc3RTZWxlY3RlZEJveCgpCiB7
Ci0gICAgZm9yIChJbmxpbmVCb3gqIGJveCA9IGxhc3RMZWFmQ2hpbGQoKTsgYm94OyBib3ggPSBi
b3gtPnByZXZMZWFmQ2hpbGQoKSkgeworICAgIGZvciAoYXV0byogYm94ID0gbGFzdExlYWZDaGls
ZCgpOyBib3g7IGJveCA9IGJveC0+cHJldkxlYWZDaGlsZCgpKSB7CiAgICAgICAgIGlmIChib3gt
PnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKQogICAgICAg
ICAgICAgcmV0dXJuIGJveDsKICAgICB9Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAogTGF5b3V0VW5pdCBSb290SW5saW5lQm94OjpzZWxlY3Rpb25Ub3AoKSBjb25z
dApAQCAtODA1LDcgKzgwMyw3IEBAIElubGluZUJveCogUm9vdElubGluZUJveDo6Y2xvc2VzdExl
YWZDaGlsZEZvckxvZ2ljYWxMZWZ0UG9zaXRpb24oaW50IGxlZnRQb3NpdGlvCiAgICAgICAgIC8v
IFJldHVybiBpdC4KICAgICAgICAgcmV0dXJuIGxhc3RMZWFmOwogCi0gICAgSW5saW5lQm94KiBj
bG9zZXN0TGVhZiA9IDA7CisgICAgSW5saW5lQm94KiBjbG9zZXN0TGVhZiA9IG51bGxwdHI7CiAg
ICAgZm9yIChJbmxpbmVCb3gqIGxlYWYgPSBmaXJzdExlYWY7IGxlYWY7IGxlYWYgPSBsZWFmLT5u
ZXh0TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKSkgewogICAgICAgICBpZiAoIWxlYWYtPnJl
bmRlcmVyKCkuaXNMaXN0TWFya2VyKCkgJiYgKCFvbmx5RWRpdGFibGVMZWF2ZXMgfHwgaXNFZGl0
YWJsZUxlYWYobGVhZikpKSB7CiAgICAgICAgICAgICBjbG9zZXN0TGVhZiA9IGxlYWY7CkBAIC04
MjEsMTMgKzgxOSwxMyBAQCBJbmxpbmVCb3gqIFJvb3RJbmxpbmVCb3g6OmNsb3Nlc3RMZWFmQ2hp
bGRGb3JMb2dpY2FsTGVmdFBvc2l0aW9uKGludCBsZWZ0UG9zaXRpbwogCiBCaWRpU3RhdHVzIFJv
b3RJbmxpbmVCb3g6OmxpbmVCcmVha0JpZGlTdGF0dXMoKSBjb25zdAogeyAKLSAgICByZXR1cm4g
QmlkaVN0YXR1cyhzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4obV9saW5lQnJlYWtCaWRpU3Rh
dHVzRW9yKSwgc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KG1fbGluZUJyZWFrQmlkaVN0YXR1
c0xhc3RTdHJvbmcpLCBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4obV9saW5lQnJlYWtCaWRp
U3RhdHVzTGFzdCksIG1fbGluZUJyZWFrQ29udGV4dCk7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8VUNoYXJEaXJlY3Rpb24+KG1fbGluZUJyZWFrQmlkaVN0YXR1c0VvciksIHN0YXRpY19jYXN0
PFVDaGFyRGlyZWN0aW9uPihtX2xpbmVCcmVha0JpZGlTdGF0dXNMYXN0U3Ryb25nKSwgc3RhdGlj
X2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KG1fbGluZUJyZWFrQmlkaVN0YXR1c0xhc3QpLCBtX2xpbmVC
cmVha0NvbnRleHQuY29weVJlZigpIH07CiB9CiAKLXZvaWQgUm9vdElubGluZUJveDo6c2V0TGlu
ZUJyZWFrSW5mbyhSZW5kZXJPYmplY3QqIG9iaiwgdW5zaWduZWQgYnJlYWtQb3MsIGNvbnN0IEJp
ZGlTdGF0dXMmIHN0YXR1cykKK3ZvaWQgUm9vdElubGluZUJveDo6c2V0TGluZUJyZWFrSW5mbyhS
ZW5kZXJPYmplY3QqIG9iamVjdCwgdW5zaWduZWQgYnJlYWtQb3NpdGlvbiwgY29uc3QgQmlkaVN0
YXR1cyYgc3RhdHVzKQogewotICAgIG1fbGluZUJyZWFrT2JqID0gb2JqOwotICAgIG1fbGluZUJy
ZWFrUG9zID0gYnJlYWtQb3M7CisgICAgbV9saW5lQnJlYWtPYmogPSBvYmplY3Q7CisgICAgbV9s
aW5lQnJlYWtQb3MgPSBicmVha1Bvc2l0aW9uOwogICAgIG1fbGluZUJyZWFrQmlkaVN0YXR1c0Vv
ciA9IHN0YXR1cy5lb3I7CiAgICAgbV9saW5lQnJlYWtCaWRpU3RhdHVzTGFzdFN0cm9uZyA9IHN0
YXR1cy5sYXN0U3Ryb25nOwogICAgIG1fbGluZUJyZWFrQmlkaVN0YXR1c0xhc3QgPSBzdGF0dXMu
bGFzdDsKQEAgLTgzNyw3ICs4MzUsNyBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OnNldExpbmVCcmVh
a0luZm8oUmVuZGVyT2JqZWN0KiBvYmosIHVuc2lnbmVkIGJyZWFrUG9zLCBjb25zdAogRWxsaXBz
aXNCb3gqIFJvb3RJbmxpbmVCb3g6OmVsbGlwc2lzQm94KCkgY29uc3QKIHsKICAgICBpZiAoIWhh
c0VsbGlwc2lzQm94KCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICByZXR1cm4gZ0VsbGlwc2lzQm94TWFwLT5nZXQodGhpcyk7CiB9CiAKQEAgLTkzNiw4
ICs5MzQsOCBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JCb3goSW5s
aW5lQm94JiBib3gsIEdseXBoT3ZlcmZsb3dBbmRGYWxsYgogICAgIGNvbnN0IFJlbmRlclN0eWxl
JiBib3hMaW5lU3R5bGUgPSBib3gubGluZVN0eWxlKCk7CiAgICAgaWYgKHVzZWRGb250cyAmJiAh
dXNlZEZvbnRzLT5pc0VtcHR5KCkgJiYgKGluY2x1ZGVGb250IHx8IChib3hMaW5lU3R5bGUubGlu
ZUhlaWdodCgpLmlzTmVnYXRpdmUoKSAmJiBpbmNsdWRlTGVhZGluZykpKSB7CiAgICAgICAgIHVz
ZWRGb250cy0+YXBwZW5kKCZib3hMaW5lU3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgp
KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1c2VkRm9udHMtPnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MgPSB1c2VkRm9u
dHMtPmF0KGkpLT5mb250TWV0cmljcygpOworICAgICAgICBmb3IgKGF1dG8mIGZvbnQgOiAqdXNl
ZEZvbnRzKSB7CisgICAgICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IGZvbnQtPmZvbnRNZXRy
aWNzKCk7CiAgICAgICAgICAgICBpbnQgdXNlZEZvbnRBc2NlbnQgPSBmb250TWV0cmljcy5hc2Nl
bnQoYmFzZWxpbmVUeXBlKCkpOwogICAgICAgICAgICAgaW50IHVzZWRGb250RGVzY2VudCA9IGZv
bnRNZXRyaWNzLmRlc2NlbnQoYmFzZWxpbmVUeXBlKCkpOwogICAgICAgICAgICAgaW50IGhhbGZM
ZWFkaW5nID0gKGZvbnRNZXRyaWNzLmxpbmVTcGFjaW5nKCkgLSBmb250TWV0cmljcy5oZWlnaHQo
KSkgLyAyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKaW5kZXggYjM0
MWQ2YzMzMDIzZTBhYzJhMTNmODY4NDZmOTc5YmJhYWFhNTZlMS4uMTQxMTVhMWI5NmMwMzE3NzE1
Y2EwYzMxNDMxMTQzODZkN2RjZWUxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2UuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNs
dWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUg
IkVkaXRvckNsaWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC01MSw2ICs1Miw3IEBA
CiAjaW5jbHVkZSAiU1ZHSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU29ja2V0UHJvdmlkZXIuaCIKICNp
bmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KQEAgLTQxMiw3ICs0MTQsNyBAQCBib29sIFNWR0lt
YWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICBpZiAoYWxsRGF0YVJlY2VpdmVkKSB7Ci0gICAgICAgIFBhZ2VDb25maWd1cmF0
aW9uIHBhZ2VDb25maWd1cmF0aW9uKG1ha2VVbmlxdWVSZWY8RW1wdHlFZGl0b3JDbGllbnQ+KCks
IFNvY2tldFByb3ZpZGVyOjpjcmVhdGUoKSk7CisgICAgICAgIFBhZ2VDb25maWd1cmF0aW9uIHBh
Z2VDb25maWd1cmF0aW9uKGNyZWF0ZUVtcHR5RWRpdG9yQ2xpZW50KCksIFNvY2tldFByb3ZpZGVy
OjpjcmVhdGUoKSk7CiAgICAgICAgIGZpbGxXaXRoRW1wdHlDbGllbnRzKHBhZ2VDb25maWd1cmF0
aW9uKTsKICAgICAgICAgbV9jaHJvbWVDbGllbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0ltYWdl
Q2hyb21lQ2xpZW50Pih0aGlzKTsKICAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24uY2hyb21lQ2xp
ZW50ID0gbV9jaHJvbWVDbGllbnQuZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCmluZGV4IDEyZWVlMmIyYmM1ZmEwYTZhZjI1
MWVhNTc0NjNiNWZlYjI0OWY3MjcuLjNiMzVkNGQyMTEwZjQ5ZjFjNDkzZmVhY2NkMDg0NzM4Yjgy
MzhhZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5oCkBAIC0xNjYsNyArMTY2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgd2ls
bFNldElucHV0TWV0aG9kU3RhdGUoKSBmaW5hbDsKICAgICB2b2lkIHNldElucHV0TWV0aG9kU3Rh
dGUoYm9vbCBlbmFibGVkKSBmaW5hbDsKLSAgICB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5n
KFBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4sIGNvbnN0IFdlYkNvcmU6
OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pIGZpbmFsOworICAgIHZvaWQgcmVx
dWVzdENoZWNraW5nT2ZTdHJpbmcoV2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdCYsIGNvbnN0
IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pIGZpbmFsOwogCiAj
aWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
MTIwMAogICAgIHZvaWQgcmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29uc3QgV2ViQ29y
ZTo6VmlzaWJsZVNlbGVjdGlvbiYpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCmluZGV4IGQ4NmYzOGNjMzFhYTVjOTA3
MjI5NGVhMTg4YzhiMjY0ODdiMWNiYWIuLjdmOWY0MTdhZDFjNDNhODZhYTI1ZDIxNDhlNTQ2OTVl
MWRiNzAyOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQubW0KQEAgLTEzMjMsMTEgKzEzMjMsMTEgQEAgdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OmRpZENoZWNrU3VjY2VlZChpbnQgc2VxdWVuY2UsIE5TQXJyYXkqIHJlc3VsdHMpCiAK
ICNlbmRpZgogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmco
UGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0PiByZXF1ZXN0LCBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6
OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCiB7CiAjaWYg
IVBMQVRGT1JNKElPUykKICAgICBBU1NFUlQoIW1fdGV4dENoZWNraW5nUmVxdWVzdCk7Ci0gICAg
bV90ZXh0Q2hlY2tpbmdSZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICBtX3RleHRDaGVja2luZ1JlcXVl
c3QgPSAmcmVxdWVzdDsKIAogICAgIGludCBzZXF1ZW5jZSA9IG1fdGV4dENoZWNraW5nUmVxdWVz
dC0+ZGF0YSgpLnNlcXVlbmNlKCk7CiAgICAgTlNSYW5nZSByYW5nZSA9IE5TTWFrZVJhbmdlKDAs
IG1fdGV4dENoZWNraW5nUmVxdWVzdC0+ZGF0YSgpLnRleHQoKS5sZW5ndGgoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaCBi
L1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCmluZGV4
IDU5NGM0OGQzYzVhNjQ4MzhjNDk0OTdmNjY0Y2RlNDJlNTg0MDJmYjEuLmIxNDhiZTcyYWZmYWIx
YmYzNDVlMDExMDdmYmY1Mjc1OGI4NjNlNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCkBAIC0xMTMsNyArMTEzLDcgQEAgcHVi
bGljOgogCiAgICAgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpIG92ZXJyaWRlOwogICAg
IHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVl
c3RDaGVja2luZ09mU3RyaW5nKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdS
ZXF1ZXN0PiwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYpIG92ZXJyaWRlIHsgfQor
ICAgIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV2ViQ29yZTo6VGV4dENoZWNraW5nUmVx
dWVzdCYsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mKSBvdmVycmlkZSB7IH0KIAog
ICAgIFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpIG92ZXJyaWRlIHsg
cmV0dXJuIHRoaXM7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCmluZGV4IDIyMTJhY2Q5MTE0
M2ExNDIzNDc4MDcwNjdhNTJlYTA5ZjlkMjQ4ZGMuLjU0YjI3YjQ0MDQ4NTI2OWU1ZTg3ZjgyZDBm
YjUwMmExZjAyMmFjMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKQEAgLTUyNiwxNCArNTI2
LDEyIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJp
bmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4CiAgICAgbV9wYWdlLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpHZXRHdWVzc2VzRm9yV29yZCh3b3JkLCBjb250ZXh0LCBpbnNl
cnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pKSwgTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6R2V0R3Vlc3Nlc0ZvcldvcmQ6OlJlcGx5KGd1ZXNzZXMpKTsKIH0K
IAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdURjo6UGFz
c1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0PiBwcnBSZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpW
aXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6
OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFRleHRDaGVja2luZ1JlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCiB7Ci0gICAg
UmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+IHJlcXVlc3QgPSBwcnBSZXF1ZXN0OwotCiAgICAg
dWludDY0X3QgcmVxdWVzdElEID0gZ2VuZXJhdGVUZXh0Q2hlY2tpbmdSZXF1ZXN0SUQoKTsKLSAg
ICBtX3BhZ2UtPmFkZFRleHRDaGVja2luZ1JlcXVlc3QocmVxdWVzdElELCByZXF1ZXN0KTsKKyAg
ICBtX3BhZ2UtPmFkZFRleHRDaGVja2luZ1JlcXVlc3QocmVxdWVzdElELCAmcmVxdWVzdCk7CiAK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVxdWVzdENoZWNraW5n
T2ZTdHJpbmcocmVxdWVzdElELCByZXF1ZXN0LT5kYXRhKCksIGluc2VydGlvblBvaW50RnJvbUN1
cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbikpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6UmVxdWVzdENoZWNraW5nT2ZTdHJpbmcocmVxdWVzdElELCBy
ZXF1ZXN0LmRhdGEoKSwgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50
U2VsZWN0aW9uKSkpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6d2lsbFNldElucHV0TWV0
aG9kU3RhdGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKaW5kZXggNmIzYTIwZjU0NmNhMjVjZGQxMjJi
YmNmZjkyZGVkMGQ0NjNhNjYzMi4uOGQ4MTc0ZGM5MTNhZjVlMmNiMzAxODA3NDIwNWFkOTU4MTk2
NGE2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCkBAIC0xNDksNyArMTQ5LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3Ry
aW5nJiBjb250ZXh0LCBjb25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2Vs
ZWN0aW9uLCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykgZmluYWw7CiAgICAgdm9pZCB3aWxsU2V0
SW5wdXRNZXRob2RTdGF0ZSgpIGZpbmFsOwogICAgIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShi
b29sIGVuYWJsZWQpIGZpbmFsOwotICAgIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV1RG
OjpQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+LCBjb25zdCBXZWJDb3Jl
OjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKSBmaW5hbDsKKyAgICB2b2lkIHJl
cXVlc3RDaGVja2luZ09mU3RyaW5nKFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3QmLCBjb25z
dCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKSBmaW5hbDsKIAog
I2lmIFBMQVRGT1JNKEdUSykKICAgICBib29sIHNob3VsZFNob3dVbmljb2RlTWVudSgpIGZpbmFs
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298279</attachid>
            <date>2017-01-07 09:25:37 -0800</date>
            <delta_ts>2017-01-07 11:37:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166797-20170107092405.patch</filename>
            <type>text/plain</type>
            <size>128187</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwNDc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGI2ZTFjZWVlMGVmMjc2
OTBiNDZlYzA2ZWU5MWFkYjNiZGIzNDQyMC4uMDVjZGRiMzBkYmE2MTE2MjhkMGM4MDgxYmVlOGNl
ZGVlMzYzZDY2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDE3LTAxLTA2ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgUGFzc1JlZlB0ciB1
c2UgZnJvbSAiaW5zcGVjdG9yIiwgInBsYXRmb3JtL3NxbCIsIGFuZCAicGxhdGZvcm0vdGV4dCIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Njc5Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6
cGVyZm9ybU9wZW5BbmRWZXJpZnkpOiBQYXNzIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2lu
dGVyLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNh
bm9uaWNhbGl6ZWRUaXRsZSk6IE1hcCBiYWNrc2xhc2hlcyB0byBjdXJyZW5jeSBzeW1ib2xzIGlu
c2lkZSB0aGUKKyAgICAgICAgZXhpc3RpbmcgbG9vcCB0aHJvdWdoIHRoZSBjaGFyYWN0ZXJzIGlu
c3RlYWQgb2YgY2FsbGluZyBhIGZ1bmN0aW9uIGNvbmZ1c2luZ2x5CisgICAgICAgIG5hbWVkICJk
aXNwbGF5QnVmZmVyIiB0byBkbyBpdC4gTW9yZSBzdHJhaWdodGZvcndhcmQsIHBvc3NpYmx5IG1v
cmUgZWZmaWNpZW50LAorICAgICAgICBvbmUgbGVzcyBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpkaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKTogQ2FsbCByZXBs
YWNlIHRvIG1hcAorICAgICAgICBiYWNrc2xhc2hlcyB0byBjdXJyZW5jeSBzeW1ib2xzIGluc3Rl
YWQgb2YgY2FsbGluZyBhIHNwZWNpYWwgZGlzcGxheVN0cmluZworICAgICAgICBmdW5jdGlvbi4g
VGhlcmUgd2FzIG5vIHJlYWwgYmVuZWZpdCB0byB1c2luZyB0aGF0IGZ1bmN0aW9uOyB0aGUgU3Ry
aW5nOjpyZXBsYWNlCisgICAgICAgIGZ1bmN0aW9uIGhhcyBhbGwgdGhlIHNhbWUgb3B0aW1pemF0
aW9ucywgYW5kIHRoaXMgd2FzIGFsc28gdGhlIG9ubHkgY2FsbCBzaXRlLgorCisgICAgICAgICog
ZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2Vy
OjppbnZva2VSZXF1ZXN0KTogUGFzcyBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGEgcG9pbnRlci4K
KworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6Om92ZXJsYXlQYWdlKTogQ2FsbCBjcmVhdGVFbXB0eUVk
aXRvckNsaWVudCBpbnN0ZWFkCisgICAgICAgIG9mIHVzaW5nIHRoZSBjbGFzcyBFbXB0eUVkaXRv
ckNsaWVudCBkaXJlY3RseS4KKworICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuY3BwOiBN
b3ZlZCBtb3N0IG9mIHRoZSBlbXB0eSBjbGllbnRzIGhlcmUgZnJvbSB0aGUgaGVhZGVyLgorICAg
ICAgICBBbHNvIG1hZGUgbG90cyBtb3JlIHRoaW5ncyBwcml2YXRlLgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlRW1wdHlFZGl0b3JDbGllbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVt
cHR5RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQpOiBBZGRlZC4KKyAgICAgICAgKiBsb2FkZXIvRW1w
dHlDbGllbnRzLmg6IFVwZGF0ZWQgZm9yIGFib3ZlIGNoYW5nZXMuIE1hZGUgbW9yZSB0aGluZ3Mg
cHJpdmF0ZS4KKworICAgICAgICAqIHBhZ2UvRGF0YWJhc2VQcm92aWRlci5oOiBSZW1vdmVkIHVu
bmVlZGVkIGluY2x1ZGUuCisgICAgICAgICogcGFnZS9NYWluRnJhbWUuY3BwOiBEaXR0by4KKwor
ICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpkaWFnbm9z
dGljTG9nZ2luZ0NsaWVudCk6IENhbGwgZW1wdHlEaWFnbm9zdGljTG9nZ2luZ0NsaWVudAorICAg
ICAgICBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBjbGFzcyBFbXB0eURpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50IGRpcmVjdGx5LgorCisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpzZXRBdXRob3JpemVyKTogVGFr
ZSBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGEKKyAgICAgICAgUGFzc1JlZlB0ci4KKyAgICAgICAg
KiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaDogVXBkYXRlZCBmb3IgYWJvdmUuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkJpZGlDb250ZXh0OjpCaWRpQ29udGV4dCk6IE1vdmVkIHRoaXMgZnVuY3Rpb24gaGVyZSBmcm9t
IHRoZSBoZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpjb3B5Q29udGV4dEFuZFJlYmFzZWxpbmVM
ZXZlbCk6IFJldHVybiBhIFJlZiBpbnN0ZWFkIG9mIGEgUGFzc1JlZlB0ciwKKyAgICAgICAgYW5k
IHRha2UgYSByZWZlcmVuY2UgcmF0aGVyIHRoYW4gYSByYXcgcG9pbnRlci4KKyAgICAgICAgKFdl
YkNvcmU6OkJpZGlDb250ZXh0Ojpjb3B5U3RhY2tSZW1vdmluZ1VuaWNvZGVFbWJlZGRpbmdDb250
ZXh0cyk6IFJldHVybiBhCisgICAgICAgIFJlZiBpbnN0ZWFkIG9mIGEgUGFzc1JlZlB0ci4KKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92
ZSBjaGFuZ2VzLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaDogU2lt
cGxpZnkgaW5pdGlhbGl6YXRpb24sIHVzZSBtb3JlIHJlZmVyZW5jZXMsCisgICAgICAgIGF1dG8s
IG1vZGVybiBmb3IgbG9vcHMsIHJlZmVyIHRvIGRlcml2ZWQgY2xhc3MgYXMgdGhhdCByYXRoZXIg
dGhhbiB0aGUgbm9uLUMrKworICAgICAgICB0ZXJtIHN1YmNsYXNzLgorCisgICAgICAgICogcGxh
dGZvcm0vdGV4dC9UZXh0Q2hlY2tlckNsaWVudC5oOiBDaGFuZ2QgYXJndW1lbnQgZnJvbSBQYXNz
UmVmUHRyIHRvIGEKKyAgICAgICAgcmVmZXJlbmNlLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4
dC9UZXh0RW5jb2RpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFbmNvZGluZzo6ZGlzcGxh
eVN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0RW5jb2Rpbmc6OmRpc3Bs
YXlCdWZmZXIpOiBEZWxldGVkLgorCisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3gu
Y3BwOiBTdHlsZSB0d2Vha3MgYW5kIHVzZSBhIG1vZGVybiBmb3IgbG9vcC4KKworICAgICAgICAq
IHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6
ZGF0YUNoYW5nZWQpOiBDYWxsIGNyZWF0ZUVtcHR5RWRpdG9yQ2xpZW50IGluc3RlYWQKKyAgICAg
ICAgb2YgdXNpbmcgdGhlIGNsYXNzIEVtcHR5RWRpdG9yQ2xpZW50IGRpcmVjdGx5LgorCiAyMDE3
LTAxLTA2ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBFbnN1
cmUgbmF2aWdhdGlvbiBvbmx5IGFsbG93ZWQgZm9yIGRvY3VtZW50cyBub3QgaW4gdGhlIHBhZ2Ug
Y2FjaGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA1ZjE0YTFkZmFhZGJhMmEyOWRmY2FmODVmMjJhNzlk
ZWQxNDc4MGZlLi44ODU2OGE3N2NhZmVjZjhjYzk2ZTg4ZTY0YTMyOWUwODkxMGIzOWMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTctMDEtMDYgIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBQYXNzUmVmUHRyIHVzZSBmcm9tICJp
bnNwZWN0b3IiLCAicGxhdGZvcm0vc3FsIiwgYW5kICJwbGF0Zm9ybS90ZXh0IgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2Nzk3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQuaDogVXBkYXRlZCB0byB0YWtlIGEgcmVmZXJlbmNlLgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbToKKyAgICAgICAgKFdlYkVkaXRvckNs
aWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOiBUYWtlIGEgcmVmZXJlbmNlCisgICAgICAg
IGluc3RlYWQgb2YgYSBQYXNzUmVmUHRyLgorCiAyMDE3LTAxLTA1ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVHVybiBwcmVmZXJMb3dQb3dlcldlYkdMUmVuZGVy
aW5nIHNldHRpbmcgb24gYnkgZGVmYXVsdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IGVjNDViMmUzN2Jj
NjZiOTk4NzY5Y2Q0MGU0ODNhNDlmOTgzYWRiN2EuLmVjOTBmZDAyYzgxMWNmNTk2ZDU2ZGE0NmZm
MDE0ODFkOGM3MDZmMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNy0w
MS0wNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFBh
c3NSZWZQdHIgdXNlIGZyb20gImluc3BlY3RvciIsICJwbGF0Zm9ybS9zcWwiLCBhbmQgInBsYXRm
b3JtL3RleHQiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjY3OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOiBVcGRhdGUgYXJndW1lbnQgdG8g
dGFrZSBhIHJlZmVyZW5jZQorICAgICAgICBpbnN0ZWFkIG9mIGEgUGFzc1JlZlB0ci4KKwogMjAx
Ny0wMS0wNSAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVt
b3ZlIENocm9tZUNsaWVudDo6bmVlZFRvdWNoRXZlbnRzKCkuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMWY0NGQ3
NDg2YmRlYzZjOWE0N2E1MTFiMzAyZDdmMTY0MGM4MGVjYS4uNDNhMjMwYjU0YzAxYmRmMjE0MDE5
MTE0YWIyOWU1NzU3M2IyY2RlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE3LTAx
LTA2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgUGFz
c1JlZlB0ciB1c2UgZnJvbSAiaW5zcGVjdG9yIiwgInBsYXRmb3JtL3NxbCIsIGFuZCAicGxhdGZv
cm0vdGV4dCIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2Njc5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKTogVGFr
ZSBhIHJlZmVyZW5jZQorICAgICAgICBpbnN0ZWFkIG9mIGEgUGFzc1JlZlB0ci4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOiBVcGRhdGVkIGZv
ciBhYm92ZSBjaGFuZ2UuCisKIDIwMTctMDEtMDYgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBw
bGUuY29tPgogCiAgICAgICAgIEF0dGVtcHQgdG8gZml4IHRoZSBFRkwgYnVpbGQgZm9sbG93aW5n
IDxodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yMTA0NjE+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCmluZGV4IGYwMTYyYjVlNjE0
MzMxYzRlY2Y4YTE3NWExNDk5YjkzYjRhM2E5MWUuLjUxYTMzN2ZmMWRiYmNjMjIwMzlkOWIxYTBi
Y2NiZmYwMTZjY2ZkNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2UuY3BwCkBAIC00MjIsNyArNDIyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRGF0
YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0
YWIKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSLCAidW5hYmxl
IHRvIG9wZW4gZGF0YWJhc2UsIHZlcnNpb24gbWlzbWF0Y2gsICciICsgbV9leHBlY3RlZFZlcnNp
b24gKyAiJyBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudFZlcnNpb24gb2YgJyIgKyBjdXJyZW50
VmVyc2lvbiArICInIiB9OwogICAgIH0KIAotICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QXV0aG9y
aXplcihtX2RhdGFiYXNlQXV0aG9yaXplci5wdHIoKSk7CisgICAgbV9zcWxpdGVEYXRhYmFzZS5z
ZXRBdXRob3JpemVyKG1fZGF0YWJhc2VBdXRob3JpemVyLmdldCgpKTsKIAogICAgIERhdGFiYXNl
VHJhY2tlcjo6c2luZ2xldG9uKCkuYWRkT3BlbkRhdGFiYXNlKCp0aGlzKTsKICAgICBtX29wZW5l
ZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBhMDA2Yzg3YWZkNWQzNGE5ZWY4
YzAyOTZkNGU5Y2UzZjhhYzBiNjAyLi5lNDEyZWI1YWU1YTBhNzhkYzg1MmM0MGYzYWFjNzBiNGE2
ZGFmNzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTMsNyArMyw3IEBACiAgKiAgICAg
ICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAqIENvcHly
aWdodCAoQykgMjAwNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5LCAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCkBAIC0xNDUyLDcgKzE0NTIsNyBAQCBFbGVtZW50KiBEb2N1bWVudDo6c2Nyb2xs
aW5nRWxlbWVudCgpCiAKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBp
bmxpbmUgU3RyaW5nIGNhbm9uaWNhbGl6ZWRUaXRsZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0
IFN0cmluZyYgdGl0bGUpCiB7Ci0gICAgLy8gRklYTUU6IENvbXBpbGluZyBhIHNlcGFyYXRlIGNv
cHkgb2YgdGhpcyBmb3IgZWFjaCBjaGFyYWN0ZXIgdHlwZSBpcyBsaWtlbHkgdW5uZWNlc3Nhcnku
CisgICAgLy8gRklYTUU6IENvbXBpbGluZyBhIHNlcGFyYXRlIGNvcHkgb2YgdGhpcyBmb3IgTENo
YXIgYW5kIFVDaGFyIGlzIGxpa2VseSB1bm5lY2Vzc2FyeS4KICAgICAvLyBGSVhNRTogTWlzc2lu
ZyBhbiBvcHRpbWl6ZWQgY2FzZSBmb3Igd2hlbiB0aXRsZSBpcyBmaW5lIGFzLWlzLiBUaGlzIHVu
bmVjZXNzYXJpbHkgYWxsb2NhdGVzCiAgICAgLy8gYW5kIGtlZXBzIGFyb3VuZCBhIG5ldyBjb3B5
LCBhbmQgaXQncyBldmVuIHRoZSBsZXNzIG9wdGltYWwgdHlwZSBvZiBTdHJpbmdJbXBsIHdpdGgg
YSBzZXBhcmF0ZSBidWZmZXIuCiAgICAgLy8gQ291bGQgcHJvYmFibHkganVzdCB1c2UgU3RyaW5n
QnVpbGRlciBpbnN0ZWFkLgpAQCAtMTQ2MywxMyArMTQ2MywyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgaW5saW5lIFN0cmluZyBjYW5vbmljYWxpemVkVGl0bGUo
RG9jdW1lbgogICAgIFN0cmluZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBidWZmZXIgeyBsZW5ndGgg
fTsKICAgICB1bnNpZ25lZCBidWZmZXJMZW5ndGggPSAwOwogCi0gICAgLy8gQ29sbGFwc2UgcnVu
cyBvZiBIVE1MIHNwYWNlcyBpbnRvIHNpbmdsZSBzcGFjZSBjaGFyYWN0ZXJzOyBzdHJpcCBsZWFk
aW5nIGFuZCB0cmFpbGluZyBzcGFjZXMuCisgICAgYXV0byogZGVjb2RlciA9IGRvY3VtZW50LmRl
Y29kZXIoKTsKKyAgICBhdXRvIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2wgPSBkZWNvZGVyID8g
ZGVjb2Rlci0+ZW5jb2RpbmcoKS5iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkgOiAnXFwnOwor
CisgICAgLy8gQ29sbGFwc2UgcnVucyBvZiBIVE1MIHNwYWNlcyBpbnRvIHNpbmdsZSBzcGFjZSBj
aGFyYWN0ZXJzLgorICAgIC8vIFN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcy4KKyAg
ICAvLyBSZXBsYWNlIGJhY2tzbGFzaGVzIHdpdGggY3VycmVuY3kgc3ltYm9scy4KICAgICBib29s
IHByZXZpb3VzQ2hhcmFjdGVyV2FzSFRNTFNwYWNlID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGF1dG8gY2hhcmFjdGVyID0gY2hh
cmFjdGVyc1tpXTsKICAgICAgICAgaWYgKGlzSFRNTFNwYWNlKGNoYXJhY3RlcikpCiAgICAgICAg
ICAgICBwcmV2aW91c0NoYXJhY3Rlcldhc0hUTUxTcGFjZSA9IHRydWU7CiAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXFwnKQorICAgICAgICAgICAgICAgIGNo
YXJhY3RlciA9IGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2w7CiAgICAgICAgICAgICBpZiAocHJl
dmlvdXNDaGFyYWN0ZXJXYXNIVE1MU3BhY2UgJiYgYnVmZmVyTGVuZ3RoKQogICAgICAgICAgICAg
ICAgIGJ1ZmZlcltidWZmZXJMZW5ndGgrK10gPSAnICc7CiAgICAgICAgICAgICBidWZmZXJbYnVm
ZmVyTGVuZ3RoKytdID0gY2hhcmFjdGVyOwpAQCAtMTQ3OCwxMiArMTQ4NSw4IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgU3RyaW5nIGNhbm9uaWNhbGl6
ZWRUaXRsZShEb2N1bWVuCiAgICAgfQogICAgIGlmICghYnVmZmVyTGVuZ3RoKQogICAgICAgICBy
ZXR1cm4geyB9OwotICAgIGJ1ZmZlci5zaHJpbmsoYnVmZmVyTGVuZ3RoKTsKLQotICAgIC8vIFJl
cGxhY2UgYmFja3NsYXNoZXMgd2l0aCBjdXJyZW5jeSBzeW1ib2xzIGlmIHRoZSBlbmNvZGluZyBy
ZXF1aXJlcyBpdC4KLSAgICBpZiAoYXV0byogZGVjb2RlciA9IGRvY3VtZW50LmRlY29kZXIoKSkK
LSAgICAgICAgZGVjb2Rlci0+ZW5jb2RpbmcoKS5kaXNwbGF5QnVmZmVyKGJ1ZmZlci5jaGFyYWN0
ZXJzKCksIGJ1ZmZlckxlbmd0aCk7CiAKKyAgICBidWZmZXIuc2hyaW5rKGJ1ZmZlckxlbmd0aCk7
CiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoV1RGTW92ZShidWZmZXIpKTsKIH0KIApAQCAtNTQ2
MCw4ICs1NDYzLDYgQEAgdm9pZCBEb2N1bWVudDo6c2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVy
U2V0VGhyb3R0bGVkKGJvb2wgaXNUaHJvdHRsZWQpCiAKIHZvaWQgRG9jdW1lbnQ6OndpbmRvd1Nj
cmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKGRpc3BsYXlJRCk7Ci0KICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUp
CiAgICAgaWYgKG1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKQogICAgICAgICBtX3Njcmlw
dGVkQW5pbWF0aW9uQ29udHJvbGxlci0+d2luZG93U2NyZWVuRGlkQ2hhbmdlKGRpc3BsYXlJRCk7
CkBAIC01NDczLDExICs1NDc0LDExIEBAIHZvaWQgRG9jdW1lbnQ6OndpbmRvd1NjcmVlbkRpZENo
YW5nZShQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpCiAgICAgfQogfQogCi1TdHJpbmcgRG9j
dW1lbnQ6OmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBzdHIp
IGNvbnN0CitTdHJpbmcgRG9jdW1lbnQ6OmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmco
Y29uc3QgU3RyaW5nJiBzdHJpbmcpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZGVjb2RlcikKLSAgICAg
ICAgcmV0dXJuIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5kaXNwbGF5U3RyaW5nKHN0ci5pbXBsKCkp
LmdldCgpOwotICAgIHJldHVybiBzdHI7CisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJl
dHVybiBzdHJpbmc7CisgICAgcmV0dXJuIFN0cmluZyB7IHN0cmluZyB9LnJlcGxhY2UoJ1xcJywg
bV9kZWNvZGVyLT5lbmNvZGluZygpLmJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CiB9CiAK
IHZvaWQgRG9jdW1lbnQ6OmVucXVldWVQYWdlc2hvd0V2ZW50KFBhZ2VzaG93RXZlbnRQZXJzaXN0
ZW5jZSBwZXJzaXN0ZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKaW5k
ZXggOWQwZjg3MzZlMDgxYzNkZjRmY2E3ZTIxYTdmZjY1YzE4NWM0MWZkNC4uN2NiNjIzN2E0ZGI5
ODI1MzNkMjA3ZTAzNjA3OGQwZjY1NWE0ZDcxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bl
bGxDaGVja2VyLmNwcApAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgU3BlbGxDaGVja2VyOjppbnZv
a2VSZXF1ZXN0KFBhc3NSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+IHJlcXVlc3QpCiAgICAgaWYg
KCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fcHJvY2Vzc2luZ1JlcXVlc3QgPSBy
ZXF1ZXN0OwotICAgIGNsaWVudCgpLT5yZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhtX3Byb2Nlc3Np
bmdSZXF1ZXN0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBjbGllbnQo
KS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiB2b2lkIFNwZWxsQ2hlY2tlcjo6ZW5xdWV1
ZVJlcXVlc3QoUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gcmVxdWVzdCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAppbmRleCA1ZmNhMzEwZDAw
YWMyMWRjN2I2MWJlMGE5ZmUwNTVjOGI3ZjdhYWQ4Li42NWFmMDcyNWQxNjkzNTU3NjhkYzJmZGY3
MjI2NmQxYzM5NWViNTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yT3ZlcmxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ck92ZXJsYXkuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yT3Zlcmxh
eS5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFZGl0b3JDbGll
bnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRW1wdHlDbGllbnRzLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC01NCw2ICs1NSw3IEBACiAjaW5jbHVkZSAiU2NyaXB0
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgorI2luY2x1ZGUgIlNvY2tldFByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVk
RWxlbWVudC5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbE9iamVjdHMu
aD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CkBAIC04NTcsNyArODU5
LDcgQEAgUGFnZSogSW5zcGVjdG9yT3ZlcmxheTo6b3ZlcmxheVBhZ2UoKQogICAgIGlmIChtX292
ZXJsYXlQYWdlKQogICAgICAgICByZXR1cm4gbV9vdmVybGF5UGFnZS5nZXQoKTsKIAotICAgIFBh
Z2VDb25maWd1cmF0aW9uIHBhZ2VDb25maWd1cmF0aW9uKG1ha2VVbmlxdWVSZWY8RW1wdHlFZGl0
b3JDbGllbnQ+KCksIFNvY2tldFByb3ZpZGVyOjpjcmVhdGUoKSk7CisgICAgUGFnZUNvbmZpZ3Vy
YXRpb24gcGFnZUNvbmZpZ3VyYXRpb24oY3JlYXRlRW1wdHlFZGl0b3JDbGllbnQoKSwgU29ja2V0
UHJvdmlkZXI6OmNyZWF0ZSgpKTsKICAgICBmaWxsV2l0aEVtcHR5Q2xpZW50cyhwYWdlQ29uZmln
dXJhdGlvbik7CiAgICAgbV9vdmVybGF5UGFnZSA9IHN0ZDo6bWFrZV91bmlxdWU8UGFnZT4oV1RG
TW92ZShwYWdlQ29uZmlndXJhdGlvbikpOwogICAgIG1fb3ZlcmxheVBhZ2UtPnNldERldmljZVNj
YWxlRmFjdG9yKG1fcGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0VtcHR5Q2xpZW50cy5jcHAKaW5kZXggNTc4N2M4NGVlMzIyZTE1NTJkY2JjOTM0MDZkZTlhY2Q5
YTYzMDI4MS4uZTBmNmU1YjNlMzRhOGExZThkMzE0OWMwNDJlMWRhMGEzNzNkNGRhOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDA2IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzEsNTIgKzMxLDgwIEBA
CiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJCYWNrRm9y
d2FyZENsaWVudC5oIgogI2luY2x1ZGUgIkNvbG9yQ2hvb3Nlci5oIgotI2luY2x1ZGUgIkRPTVdy
YXBwZXJXb3JsZC5oIgorI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAi
RGF0YWJhc2VQcm92aWRlci5oIgorI2luY2x1ZGUgIkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmgi
CisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVy
LmgiCisjaW5jbHVkZSAiRHJhZ0NsaWVudC5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgog
I2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCiAjaW5jbHVkZSAiRm9ybVN0YXRlLmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZy
YW1lTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNp
bmNsdWRlICJJblByb2Nlc3NJREJTZXJ2ZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUNvbmZpZ3VyYXRpb24uaCIKICNp
bmNsdWRlICJQYXltZW50Q29vcmRpbmF0b3JDbGllbnQuaCIKICNpbmNsdWRlICJQbHVnaW5JbmZv
UHJvdmlkZXIuaCIKKyNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXJDbGllbnQuaCIKICNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbkRhdGEuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgogI2luY2x1
ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKICNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlUHJvdmlk
ZXIuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIlRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsLmgiCiAjaW5jbHVkZSAiVXNlckNvbnRlbnRQcm92aWRlci5oIgor
I2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RvcmUuaCIKICNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKKyNpZiBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQorI2luY2x1ZGUgIkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgorI2Vu
ZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIEVOQUJMRShBUFBMRV9QQVkpCi1jbGFz
cyBFbXB0eVBheW1lbnRDb29yZGluYXRvckNsaWVudCBmaW5hbCA6IHB1YmxpYyBQYXltZW50Q29v
cmRpbmF0b3JDbGllbnQgewotICAgIGJvb2wgc3VwcG9ydHNWZXJzaW9uKHVuc2lnbmVkKSBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgY2FuTWFrZVBheW1lbnRzKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIGNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVD
YXJkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9v
bCk+IGNvbXBsZXRpb25IYW5kbGVyKSBvdmVycmlkZSB7IGNhbGxPbk1haW5UaHJlYWQoW2NvbXBs
ZXRpb25IYW5kbGVyXSB7IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsgfSk7IH0KLSAgICB2b2lk
IG9wZW5QYXltZW50U2V0dXAoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgc3RkOjpmdW5j
dGlvbjx2b2lkIChib29sKT4gY29tcGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlIHsgY2FsbE9uTWFp
blRocmVhZChbY29tcGxldGlvbkhhbmRsZXJdIHsgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOyB9
KTsgfQotCi0gICAgYm9vbCBzaG93UGF5bWVudFVJKGNvbnN0IFVSTCYsIGNvbnN0IFZlY3RvcjxV
Ukw+JiwgY29uc3QgUGF5bWVudFJlcXVlc3QmKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZvaWQgY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24oY29uc3QgUGF5bWVudE1lcmNoYW50
U2Vzc2lvbiYpIG92ZXJyaWRlIHsgfQotCi0gICAgdm9pZCBjb21wbGV0ZVNoaXBwaW5nTWV0aG9k
U2VsZWN0aW9uKFBheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzLCBzdGQ6Om9wdGlvbmFsPFBheW1l
bnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcz4pIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgY29t
cGxldGVTaGlwcGluZ0NvbnRhY3RTZWxlY3Rpb24oUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXMs
IGNvbnN0IFZlY3RvcjxQYXltZW50UmVxdWVzdDo6U2hpcHBpbmdNZXRob2Q+Jiwgc3RkOjpvcHRp
b25hbDxQYXltZW50UmVxdWVzdDo6VG90YWxBbmRMaW5lSXRlbXM+KSBvdmVycmlkZSB7IH0KLSAg
ICB2b2lkIGNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbihzdGQ6Om9wdGlvbmFsPFdlYkNv
cmU6OlBheW1lbnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcz4pIG92ZXJyaWRlIHsgfQotICAg
IHZvaWQgY29tcGxldGVQYXltZW50U2Vzc2lvbihQYXltZW50QXV0aG9yaXphdGlvblN0YXR1cykg
b3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBhYm9ydFBheW1lbnRTZXNzaW9uKCkgb3ZlcnJpZGUgeyB9
Ci0gICAgdm9pZCBwYXltZW50Q29vcmRpbmF0b3JEZXN0cm95ZWQoKSBvdmVycmlkZSB7IH0KK2Ns
YXNzIFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I7CisKK2NsYXNzIEVtcHR5QmFja0Zvcndh
cmRDbGllbnQgZmluYWwgOiBwdWJsaWMgQmFja0ZvcndhcmRDbGllbnQgeworICAgIHZvaWQgYWRk
SXRlbShSZWY8SGlzdG9yeUl0ZW0+JiYpIGZpbmFsIHsgfQorICAgIHZvaWQgZ29Ub0l0ZW0oSGlz
dG9yeUl0ZW0qKSBmaW5hbCB7IH0KKyAgICBIaXN0b3J5SXRlbSogaXRlbUF0SW5kZXgoaW50KSBm
aW5hbCB7IHJldHVybiBudWxscHRyOyB9CisgICAgaW50IGJhY2tMaXN0Q291bnQoKSBmaW5hbCB7
IHJldHVybiAwOyB9CisgICAgaW50IGZvcndhcmRMaXN0Q291bnQoKSBmaW5hbCB7IHJldHVybiAw
OyB9CisgICAgdm9pZCBjbG9zZSgpIGZpbmFsIHsgfQogfTsKKworI2lmIEVOQUJMRShDT05URVhU
X01FTlVTKQorCitjbGFzcyBFbXB0eUNvbnRleHRNZW51Q2xpZW50IGZpbmFsIDogcHVibGljIENv
bnRleHRNZW51Q2xpZW50IHsKKyAgICB2b2lkIGNvbnRleHRNZW51RGVzdHJveWVkKCkgZmluYWwg
eyB9CisKKyAgICB2b2lkIGRvd25sb2FkVVJMKGNvbnN0IFVSTCYpIGZpbmFsIHsgfQorICAgIHZv
aWQgc2VhcmNoV2l0aEdvb2dsZShjb25zdCBGcmFtZSopIGZpbmFsIHsgfQorICAgIHZvaWQgbG9v
a1VwSW5EaWN0aW9uYXJ5KEZyYW1lKikgZmluYWwgeyB9CisgICAgYm9vbCBpc1NwZWFraW5nKCkg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNwZWFrKGNvbnN0IFN0cmluZyYpIGZp
bmFsIHsgfQorICAgIHZvaWQgc3RvcFNwZWFraW5nKCkgZmluYWwgeyB9CisKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyAgICB2b2lkIHNlYXJjaFdpdGhTcG90bGlnaHQoKSBmaW5hbCB7IH0KICNlbmRp
ZgogCisjaWYgVVNFKEFDQ0VTU0lCSUxJVFlfQ09OVEVYVF9NRU5VUykKKyAgICB2b2lkIHNob3dD
b250ZXh0TWVudSgpIGZpbmFsIHsgfQorI2VuZGlmCit9OworCisjZW5kaWYgLy8gRU5BQkxFKENP
TlRFWFRfTUVOVVMpCisKIGNsYXNzIEVtcHR5RGF0YWJhc2VQcm92aWRlciBmaW5hbCA6IHB1Ymxp
YyBEYXRhYmFzZVByb3ZpZGVyIHsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICB2
aXJ0dWFsIElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiBpZGJDb25uZWN0aW9uVG9T
ZXJ2ZXJGb3JTZXNzaW9uKGNvbnN0IFNlc3Npb25JRCYpCisgICAgSURCQ2xpZW50OjpJREJDb25u
ZWN0aW9uVG9TZXJ2ZXImIGlkYkNvbm5lY3Rpb25Ub1NlcnZlckZvclNlc3Npb24oY29uc3QgU2Vz
c2lvbklEJikgZmluYWwKICAgICB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWY8
SW5Qcm9jZXNzSURCU2VydmVyPj4gc2hhcmVkQ29ubmVjdGlvbihJblByb2Nlc3NJREJTZXJ2ZXI6
OmNyZWF0ZSgpKTsKICAgICAgICAgcmV0dXJuIHNoYXJlZENvbm5lY3Rpb24uZ2V0KCktPmNvbm5l
Y3Rpb25Ub1NlcnZlcigpOwpAQCAtODQsMTQ3ICsxMTIsNDYxIEBAIGNsYXNzIEVtcHR5RGF0YWJh
c2VQcm92aWRlciBmaW5hbCA6IHB1YmxpYyBEYXRhYmFzZVByb3ZpZGVyIHsKICNlbmRpZgogfTsK
IAotY2xhc3MgRW1wdHlQbHVnaW5JbmZvUHJvdmlkZXIgZmluYWwgOiBwdWJsaWMgUGx1Z2luSW5m
b1Byb3ZpZGVyIHsKLSAgICB2b2lkIHJlZnJlc2hQbHVnaW5zKCkgb3ZlcnJpZGUgeyB9OwotICAg
IHZvaWQgZ2V0UGx1Z2luSW5mbyhQYWdlJiwgVmVjdG9yPFBsdWdpbkluZm8+Jikgb3ZlcnJpZGUg
eyB9Ci0gICAgdm9pZCBnZXRXZWJWaXNpYmxlUGx1Z2luSW5mbyhQYWdlJiwgVmVjdG9yPFBsdWdp
bkluZm8+Jikgb3ZlcnJpZGUgeyB9CitjbGFzcyBFbXB0eURpYWdub3N0aWNMb2dnaW5nQ2xpZW50
IGZpbmFsIDogcHVibGljIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50IHsKKyAgICB2b2lkIGxvZ0Rp
YWdub3N0aWNNZXNzYWdlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFNob3VsZFNhbXBs
ZSkgZmluYWwgeyB9CisgICAgdm9pZCBsb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhSZXN1bHQoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgRGlhZ25vc3RpY0xvZ2dpbmdSZXN1bHRUeXBlLCBT
aG91bGRTYW1wbGUpIGZpbmFsIHsgfQorICAgIHZvaWQgbG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRo
VmFsdWUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgU2hvdWxk
U2FtcGxlKSBmaW5hbCB7IH0KIH07CiAKLWNsYXNzIEVtcHR5U3RvcmFnZU5hbWVzcGFjZVByb3Zp
ZGVyIGZpbmFsIDogcHVibGljIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciB7Ci0gICAgc3RydWN0
IEVtcHR5U3RvcmFnZUFyZWEgOiBwdWJsaWMgU3RvcmFnZUFyZWEgewotICAgICAgICB1bnNpZ25l
ZCBsZW5ndGgoKSBvdmVycmlkZSB7IHJldHVybiAwOyB9Ci0gICAgICAgIFN0cmluZyBrZXkodW5z
aWduZWQpIG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgICAgIFN0cmluZyBpdGVt
KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgICAgIHZv
aWQgc2V0SXRlbShGcmFtZSosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wmKSBv
dmVycmlkZSB7IH0KLSAgICAgICAgdm9pZCByZW1vdmVJdGVtKEZyYW1lKiwgY29uc3QgU3RyaW5n
Jikgb3ZlcnJpZGUgeyB9Ci0gICAgICAgIHZvaWQgY2xlYXIoRnJhbWUqKSBvdmVycmlkZSB7IH0K
LSAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBTdHJpbmcmKSBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQotICAgICAgICBib29sIGNhbkFjY2Vzc1N0b3JhZ2UoRnJhbWUqKSBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQotICAgICAgICBTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIExvY2FsU3RvcmFnZTsgfQotICAgICAgICBzaXplX3QgbWVtb3J5
Qnl0ZXNVc2VkQnlDYWNoZSgpIG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KLSAgICAgICAgU2VjdXJp
dHlPcmlnaW5EYXRhIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4geyB9
OyB9Ci0gICAgfTsKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogCi0gICAgc3RydWN0IEVtcHR5
U3RvcmFnZU5hbWVzcGFjZSBmaW5hbCA6IHB1YmxpYyBTdG9yYWdlTmFtZXNwYWNlIHsKLSAgICAg
ICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYShjb25zdCBTZWN1cml0eU9yaWdpbkRh
dGEmKSBvdmVycmlkZSB7IHJldHVybiBhZG9wdFJlZihuZXcgRW1wdHlTdG9yYWdlQXJlYSk7IH0K
LSAgICAgICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGNvcHkoUGFnZSopIG92ZXJyaWRlIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBFbXB0eVN0b3JhZ2VOYW1lc3BhY2UpOyB9Ci0gICAgfTsKK2Ns
YXNzIEVtcHR5RHJhZ0NsaWVudCBmaW5hbCA6IHB1YmxpYyBEcmFnQ2xpZW50IHsKKyAgICB2b2lk
IHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiwg
Y29uc3QgRHJhZ0RhdGEmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJj
ZUFjdGlvbihEcmFnU291cmNlQWN0aW9uLCBjb25zdCBJbnRQb2ludCYsIERhdGFUcmFuc2ZlciYp
IGZpbmFsIHsgfQorICAgIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhj
b25zdCBEcmFnRGF0YSYpIGZpbmFsIHsgcmV0dXJuIERyYWdEZXN0aW5hdGlvbkFjdGlvbk5vbmU7
IH0KKyAgICBEcmFnU291cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29u
c3QgSW50UG9pbnQmKSBmaW5hbCB7IHJldHVybiBEcmFnU291cmNlQWN0aW9uTm9uZTsgfQorICAg
IHZvaWQgc3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQ
b2ludCYsIERhdGFUcmFuc2ZlciYsIEZyYW1lJiwgYm9vbCkgZmluYWwgeyB9CisgICAgdm9pZCBk
cmFnQ29udHJvbGxlckRlc3Ryb3llZCgpIGZpbmFsIHsgfQorfTsKIAotICAgIFJlZlB0cjxTdG9y
YWdlTmFtZXNwYWNlPiBjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShQYWdlJiwgdW5zaWdu
ZWQpIG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEVtcHR5U3Rv
cmFnZU5hbWVzcGFjZSk7Ci0gICAgfQorI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAK
LSAgICBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gY3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNl
KHVuc2lnbmVkKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBF
bXB0eVN0b3JhZ2VOYW1lc3BhY2UpOwotICAgIH0KK2NsYXNzIEVtcHR5RWRpdG9yQ2xpZW50IGZp
bmFsIDogcHVibGljIEVkaXRvckNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiAKLSAgICBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gY3JlYXRlVHJhbnNpZW50TG9jYWxTdG9y
YWdlTmFtZXNwYWNlKFNlY3VyaXR5T3JpZ2luJiwgdW5zaWduZWQpIG92ZXJyaWRlCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEVtcHR5U3RvcmFnZU5hbWVzcGFjZSk7Ci0gICAg
fQotfTsKK3B1YmxpYzoKKyAgICBFbXB0eUVkaXRvckNsaWVudCgpID0gZGVmYXVsdDsKIAotY2xh
c3MgRW1wdHlVc2VyQ29udGVudFByb3ZpZGVyIGZpbmFsIDogcHVibGljIFVzZXJDb250ZW50UHJv
dmlkZXIgewotICAgIHZvaWQgZm9yRWFjaFVzZXJTY3JpcHQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2
b2lkKERPTVdyYXBwZXJXb3JsZCYsIGNvbnN0IFVzZXJTY3JpcHQmKT4mKSBjb25zdCBvdmVycmlk
ZSB7IH0KLSAgICB2b2lkIGZvckVhY2hVc2VyU3R5bGVTaGVldChjb25zdCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoY29uc3QgVXNlclN0eWxlU2hlZXQmKT4mKSBjb25zdCBvdmVycmlkZSB7IH0KLSNpZiBF
TkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQotICAgIHZvaWQgZm9yRWFjaFVzZXJNZXNzYWdl
SGFuZGxlcihjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgVXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvciYpPiYpIGNvbnN0IG92ZXJyaWRlIHsgfQorcHJpdmF0ZToKKyAgICBib29sIHNo
b3VsZERlbGV0ZVJhbmdlKFJhbmdlKikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
Ym9vbCBpc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKSBmaW5hbCB7IHJldHVybiBm
YWxzZTsgfQorICAgIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSBmaW5h
bCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgdG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tp
bmcoKSBmaW5hbCB7IH0KKyAgICBib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpIGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCB0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKSBmaW5h
bCB7IH0KKyAgICBpbnQgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSBmaW5hbCB7IHJldHVybiAt
MTsgfQorCisgICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoUmFuZ2UqKSBmaW5hbCB7IHJldHVy
biBmYWxzZTsgfQorICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhSYW5nZSopIGZpbmFsIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzaG91bGRJbnNlcnROb2RlKE5vZGUqLCBSYW5nZSosIEVk
aXRvckluc2VydEFjdGlvbikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3Vs
ZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pIGZp
bmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdl
KFJhbmdlKiwgUmFuZ2UqLCBFQWZmaW5pdHksIGJvb2wpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9
CisKKyAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiwgUmFuZ2UqKSBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgZGlkQXBwbHlTdHlsZSgpIGZpbmFsIHsg
fQorICAgIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoUmFuZ2UqLCBSYW5nZSopIGZp
bmFsIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2b2lkIGRpZEJlZ2luRWRpdGluZygpIGZpbmFs
IHsgfQorICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkgZmluYWwgeyB9CisgICAg
dm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKEZyYW1lKikgZmluYWwgeyB9CisgICAgdm9p
ZCBkaWRDaGFuZ2VTZWxlY3Rpb25BbmRVcGRhdGVMYXlvdXQoKSBmaW5hbCB7IH0KKyAgICB2b2lk
IHVwZGF0ZUVkaXRvclN0YXRlQWZ0ZXJMYXlvdXRJZkVkaXRhYmlsaXR5Q2hhbmdlZCgpIGZpbmFs
IHsgfQorICAgIHZvaWQgZGlzY2FyZGVkQ29tcG9zaXRpb24oRnJhbWUqKSBmaW5hbCB7IH0KKyAg
ICB2b2lkIGNhbmNlbGVkQ29tcG9zaXRpb24oKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRpZEVuZEVk
aXRpbmcoKSBmaW5hbCB7IH0KKyAgICB2b2lkIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZChSYW5nZSopIGZpbmFsIHsgfQorICAgIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoKSBmaW5hbCB7IH0KKyAgICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uo
UmFuZ2UqLCBWZWN0b3I8U3RyaW5nPiYsIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mKSBm
aW5hbCB7IH0KKyAgICB2b2lkIHJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mKSBmaW5hbCB7IH0KKyAgICB2b2lkIGhhbmRsZUFjY2VwdGVkQ2FuZGlk
YXRlV2l0aFNvZnRTcGFjZXMoVGV4dENoZWNraW5nUmVzdWx0KSBmaW5hbCB7IH0KKworICAgIHZv
aWQgcmVnaXN0ZXJVbmRvU3RlcChQYXNzUmVmUHRyPFVuZG9TdGVwPikgZmluYWw7CisgICAgdm9p
ZCByZWdpc3RlclJlZG9TdGVwKFBhc3NSZWZQdHI8VW5kb1N0ZXA+KSBmaW5hbDsKKyAgICB2b2lk
IGNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCkgZmluYWwgeyB9CisKKyAgICBib29sIGNhbkNvcHlD
dXQoRnJhbWUqLCBib29sIGRlZmF1bHRWYWx1ZSkgY29uc3QgZmluYWwgeyByZXR1cm4gZGVmYXVs
dFZhbHVlOyB9CisgICAgYm9vbCBjYW5QYXN0ZShGcmFtZSosIGJvb2wgZGVmYXVsdFZhbHVlKSBj
b25zdCBmaW5hbCB7IHJldHVybiBkZWZhdWx0VmFsdWU7IH0KKyAgICBib29sIGNhblVuZG8oKSBj
b25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgY2FuUmVkbygpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2b2lkIHVuZG8oKSBmaW5hbCB7IH0KKyAgICB2
b2lkIHJlZG8oKSBmaW5hbCB7IH0KKworICAgIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChLZXli
b2FyZEV2ZW50KikgZmluYWwgeyB9CisgICAgdm9pZCBoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24o
S2V5Ym9hcmRFdmVudCopIGZpbmFsIHsgfQorCisgICAgdm9pZCB0ZXh0RmllbGREaWRCZWdpbkVk
aXRpbmcoRWxlbWVudCopIGZpbmFsIHsgfQorICAgIHZvaWQgdGV4dEZpZWxkRGlkRW5kRWRpdGlu
ZyhFbGVtZW50KikgZmluYWwgeyB9CisgICAgdm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQo
RWxlbWVudCopIGZpbmFsIHsgfQorICAgIGJvb2wgZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50
KEVsZW1lbnQqLCBLZXlib2FyZEV2ZW50KikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
b2lkIHRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQoRWxlbWVudCopIGZpbmFsIHsgfQorICAg
IHZvaWQgdGV4dERpZENoYW5nZUluVGV4dEFyZWEoRWxlbWVudCopIGZpbmFsIHsgfQorICAgIHZv
aWQgb3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5nZWQoKSBmaW5hbCB7IH0KKworI2lmIFBMQVRG
T1JNKElPUykKKyAgICB2b2lkIHN0YXJ0RGVsYXlpbmdBbmRDb2FsZXNjaW5nQ29udGVudENoYW5n
ZU5vdGlmaWNhdGlvbnMoKSBmaW5hbCB7IH0KKyAgICB2b2lkIHN0b3BEZWxheWluZ0FuZENvYWxl
c2NpbmdDb250ZW50Q2hhbmdlTm90aWZpY2F0aW9ucygpIGZpbmFsIHsgfQorICAgIHZvaWQgd3Jp
dGVEYXRhVG9QYXN0ZWJvYXJkKE5TRGljdGlvbmFyeSopIGZpbmFsIHsgfQorICAgIE5TQXJyYXkq
IHN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlc0ZvckN1cnJlbnRTZWxlY3Rpb24oKSBmaW5hbCB7IHJl
dHVybiBudWxscHRyOyB9CisgICAgTlNBcnJheSogcmVhZERhdGFGcm9tUGFzdGVib2FyZChOU1N0
cmluZyosIGludCkgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIGJvb2wgaGFzUmljaGx5
RWRpdGFibGVTZWxlY3Rpb24oKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGludCBnZXRQ
YXN0ZWJvYXJkSXRlbXNDb3VudCgpIGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gZG9jdW1lbnRGcmFnbWVudEZyb21EZWxlZ2F0ZShpbnQpIGZpbmFsIHsg
cmV0dXJuIG51bGxwdHI7IH0KKyAgICBib29sIHBlcmZvcm1zVHdvU3RlcFBhc3RlKERvY3VtZW50
RnJhZ21lbnQqKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGludCBwYXN0ZWJvYXJkQ2hh
bmdlQ291bnQoKSBmaW5hbCB7IHJldHVybiAwOyB9CiAjZW5kaWYKLSNpZiBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQotICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0Jh
Y2tlbmQmIHVzZXJDb250ZW50RXh0ZW5zaW9uQmFja2VuZCgpIG92ZXJyaWRlIHsgc3RhdGljIE5l
dmVyRGVzdHJveWVkPENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ+
IGJhY2tlbmQ7IHJldHVybiBiYWNrZW5kLmdldCgpOyB9OworCisjaWYgUExBVEZPUk0oQ09DT0Ep
CisgICAgTlNTdHJpbmcgKnVzZXJWaXNpYmxlU3RyaW5nKE5TVVJMICopIGZpbmFsIHsgcmV0dXJu
IG51bGxwdHI7IH0KKyAgICB2b2lkIHNldEluc2VydGlvblBhc3RlYm9hcmQoY29uc3QgU3RyaW5n
JikgZmluYWwgeyB9OworICAgIE5TVVJMICpjYW5vbmljYWxpemVVUkwoTlNVUkwgKikgZmluYWwg
eyByZXR1cm4gbnVsbHB0cjsgfQorICAgIE5TVVJMICpjYW5vbmljYWxpemVVUkxTdHJpbmcoTlNT
dHJpbmcgKikgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCi19OwogCi1jbGFzcyBF
bXB0eVZpc2l0ZWRMaW5rU3RvcmUgZmluYWwgOiBwdWJsaWMgVmlzaXRlZExpbmtTdG9yZSB7Ci0g
ICAgYm9vbCBpc0xpbmtWaXNpdGVkKFBhZ2UmLCBMaW5rSGFzaCwgY29uc3QgVVJMJiwgY29uc3Qg
QXRvbWljU3RyaW5nJikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIGFkZFZp
c2l0ZWRMaW5rKFBhZ2UmLCBMaW5rSGFzaCkgb3ZlcnJpZGUgeyB9Ci19OworI2lmIFVTRShBUFBL
SVQpCisgICAgdm9pZCB1cHBlcmNhc2VXb3JkKCkgZmluYWwgeyB9CisgICAgdm9pZCBsb3dlcmNh
c2VXb3JkKCkgZmluYWwgeyB9CisgICAgdm9pZCBjYXBpdGFsaXplV29yZCgpIGZpbmFsIHsgfQor
I2VuZGlmCiAKLWNsYXNzIEVtcHR5QmFja0ZvcndhcmRDbGllbnQgZmluYWwgOiBwdWJsaWMgQmFj
a0ZvcndhcmRDbGllbnQgewotICAgIHZvaWQgYWRkSXRlbShSZWY8SGlzdG9yeUl0ZW0+JiYpIG92
ZXJyaWRlIHsgfQotICAgIHZvaWQgZ29Ub0l0ZW0oSGlzdG9yeUl0ZW0qKSBvdmVycmlkZSB7IH0K
LSAgICBIaXN0b3J5SXRlbSogaXRlbUF0SW5kZXgoaW50KSBvdmVycmlkZSB7IHJldHVybiBudWxs
cHRyOyB9Ci0gICAgaW50IGJhY2tMaXN0Q291bnQoKSBvdmVycmlkZSB7IHJldHVybiAwOyB9Ci0g
ICAgaW50IGZvcndhcmRMaXN0Q291bnQoKSBvdmVycmlkZSB7IHJldHVybiAwOyB9Ci0gICAgdm9p
ZCBjbG9zZSgpIG92ZXJyaWRlIHsgfQorI2lmIFVTRShBVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVO
VCkKKyAgICB2b2lkIHNob3dTdWJzdGl0dXRpb25zUGFuZWwoYm9vbCkgZmluYWwgeyB9CisgICAg
Ym9vbCBzdWJzdGl0dXRpb25zUGFuZWxJc1Nob3dpbmcoKSBmaW5hbCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZvaWQgdG9nZ2xlU21hcnRJbnNlcnREZWxldGUoKSBmaW5hbCB7IH0KKyAgICBib29s
IGlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkgZmluYWwgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2b2lkIHRvZ2dsZUF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uKCkgZmluYWwg
eyB9CisgICAgYm9vbCBpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkgZmluYWwgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHRvZ2dsZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb24oKSBm
aW5hbCB7IH0KKyAgICBib29sIGlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKSBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgdG9nZ2xlQXV0b21hdGljRGFzaFN1YnN0
aXR1dGlvbigpIGZpbmFsIHsgfQorICAgIGJvb2wgaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRF
bmFibGVkKCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHRvZ2dsZUF1dG9tYXRp
Y1RleHRSZXBsYWNlbWVudCgpIGZpbmFsIHsgfQorICAgIGJvb2wgaXNBdXRvbWF0aWNTcGVsbGlu
Z0NvcnJlY3Rpb25FbmFibGVkKCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHRv
Z2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbigpIGZpbmFsIHsgfQorI2VuZGlmCisKKyNp
ZiBQTEFURk9STShHVEspCisgICAgYm9vbCBzaG91bGRTaG93VW5pY29kZU1lbnUoKSBmaW5hbCB7
IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisKKyAgICBUZXh0Q2hlY2tlckNsaWVudCogdGV4dENo
ZWNrZXIoKSBmaW5hbCB7IHJldHVybiAmbV90ZXh0Q2hlY2tlckNsaWVudDsgfQorCisgICAgdm9p
ZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3Qg
R3JhbW1hckRldGFpbCYpIGZpbmFsIHsgfQorICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhN
aXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNob3dTcGVs
bGluZ1VJKGJvb2wpIGZpbmFsIHsgfQorICAgIGJvb2wgc3BlbGxpbmdVSUlzU2hvd2luZygpIGZp
bmFsIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRl
KCkgZmluYWwgeyB9CisgICAgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wpIGZpbmFsIHsg
fQorCisgICAgY2xhc3MgRW1wdHlUZXh0Q2hlY2tlckNsaWVudCBmaW5hbCA6IHB1YmxpYyBUZXh0
Q2hlY2tlckNsaWVudCB7CisgICAgICAgIGJvb2wgc2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFu
Z2VTZWxlY3Rpb24oVGV4dENoZWNraW5nVHlwZSkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQorICAgICAgICB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJikg
ZmluYWwgeyB9CisgICAgICAgIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsg
fQorICAgICAgICB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhTdHJpbmdWaWV3LCBpbnQqLCBp
bnQqKSBmaW5hbCB7IH0KKyAgICAgICAgU3RyaW5nIGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZv
ck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorICAg
ICAgICB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcsIFZlY3RvcjxHcmFtbWFy
RGV0YWlsPiYsIGludCosIGludCopIGZpbmFsIHsgfQorCisjaWYgVVNFKFVOSUZJRURfVEVYVF9D
SEVDS0lORykKKyAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQ
YXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlwZU1hc2ssIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mKSBmaW5hbCB7IHJldHVybiBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PigpOyB9
CisjZW5kaWYKKworICAgICAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBWZWN0b3I8U3RyaW5nPiYp
IGZpbmFsIHsgfQorICAgICAgICB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFRleHRDaGVj
a2luZ1JlcXVlc3QmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgZmluYWw7CisgICAgfTsKKwor
ICAgIEVtcHR5VGV4dENoZWNrZXJDbGllbnQgbV90ZXh0Q2hlY2tlckNsaWVudDsKIH07CiAKLXZv
aWQgZmlsbFdpdGhFbXB0eUNsaWVudHMoUGFnZUNvbmZpZ3VyYXRpb24mIHBhZ2VDb25maWd1cmF0
aW9uKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxFbXB0eUNocm9tZUNsaWVudD4gZHVt
bXlDaHJvbWVDbGllbnQ7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24uY2hyb21lQ2xpZW50ID0gJmR1
bW15Q2hyb21lQ2xpZW50LmdldCgpOworY2xhc3MgRW1wdHlGcmFtZUxvYWRlckNsaWVudCBmaW5h
bCA6IHB1YmxpYyBGcmFtZUxvYWRlckNsaWVudCB7CisgICAgdm9pZCBmcmFtZUxvYWRlckRlc3Ry
b3llZCgpIGZpbmFsIHsgfQogCi0jaWYgRU5BQkxFKEFQUExFX1BBWSkKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8RW1wdHlQYXltZW50Q29vcmRpbmF0b3JDbGllbnQ+IGR1bW15UGF5bWVudENv
b3JkaW5hdG9yQ2xpZW50OwotICAgIHBhZ2VDb25maWd1cmF0aW9uLnBheW1lbnRDb29yZGluYXRv
ckNsaWVudCA9ICZkdW1teVBheW1lbnRDb29yZGluYXRvckNsaWVudC5nZXQoKTsKKyAgICBib29s
IGhhc1dlYlZpZXcoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9IC8vIG1haW5seSBmb3Ig
YXNzZXJ0aW9ucworCisgICAgdm9pZCBtYWtlUmVwcmVzZW50YXRpb24oRG9jdW1lbnRMb2FkZXIq
KSBmaW5hbCB7IH0KKyNpZiBQTEFURk9STShJT1MpCisgICAgYm9vbCBmb3JjZUxheW91dE9uUmVz
dG9yZUZyb21QYWdlQ2FjaGUoKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCisgICAg
dm9pZCBmb3JjZUxheW91dEZvck5vbkhUTUwoKSBmaW5hbCB7IH0KIAotI2lmIEVOQUJMRShDT05U
RVhUX01FTlVTKQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxFbXB0eUNvbnRleHRNZW51Q2xp
ZW50PiBkdW1teUNvbnRleHRNZW51Q2xpZW50OwotICAgIHBhZ2VDb25maWd1cmF0aW9uLmNvbnRl
eHRNZW51Q2xpZW50ID0gJmR1bW15Q29udGV4dE1lbnVDbGllbnQuZ2V0KCk7CisgICAgdm9pZCBz
ZXRDb3BpZXNPblNjcm9sbCgpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkZXRhY2hlZEZyb21QYXJl
bnQyKCkgZmluYWwgeyB9CisgICAgdm9pZCBkZXRhY2hlZEZyb21QYXJlbnQzKCkgZmluYWwgeyB9
CisKKyAgICB2b2lkIGNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZChEb2N1bWVudExv
YWRlciosIFNlc3Npb25JRCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpIGZpbmFsIHsgfQorCisgICAgdm9pZCBhc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFs
UmVxdWVzdCh1bnNpZ25lZCBsb25nLCBEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYpIGZpbmFsIHsgfQorICAgIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoRG9j
dW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZvaWQgZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBs
b25nLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgZmluYWwgeyB9
CisgICAgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1
bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JikgZmluYWwgeyB9CisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKyAg
ICBib29sIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoRG9jdW1lbnRMb2Fk
ZXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmKSBmaW5hbCB7IHJldHVy
biBmYWxzZTsgfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxFbXB0eURyYWdDbGllbnQ+IGR1bW15RHJhZ0NsaWVudDsKLSAgICBw
YWdlQ29uZmlndXJhdGlvbi5kcmFnQ2xpZW50ID0gJmR1bW15RHJhZ0NsaWVudC5nZXQoKTsKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY29ubmVjdGlv
blByb3BlcnRpZXMoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nKSBmaW5hbCB7IHJldHVy
biBudWxscHRyOyB9CiAjZW5kaWYKIAotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxFbXB0eUlu
c3BlY3RvckNsaWVudD4gZHVtbXlJbnNwZWN0b3JDbGllbnQ7Ci0gICAgcGFnZUNvbmZpZ3VyYXRp
b24uaW5zcGVjdG9yQ2xpZW50ID0gJmR1bW15SW5zcGVjdG9yQ2xpZW50LmdldCgpOworICAgIHZv
aWQgZGlzcGF0Y2hEaWRSZWNlaXZlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBs
b25nLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgZmluYWwgeyB9CisgICAgdm9pZCBkaXNwYXRj
aERpZFJlY2VpdmVDb250ZW50TGVuZ3RoKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywg
aW50KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyhEb2N1bWVu
dExvYWRlciosIHVuc2lnbmVkIGxvbmcpIGZpbmFsIHsgfQorI2lmIEVOQUJMRShEQVRBX0RFVEVD
VElPTikKKyAgICB2b2lkIGRpc3BhdGNoRGlkRmluaXNoRGF0YURldGVjdGlvbihOU0FycmF5ICop
IGZpbmFsIHsgfQorI2VuZGlmCisgICAgdm9pZCBkaXNwYXRjaERpZEZhaWxMb2FkaW5nKERvY3Vt
ZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgY29uc3QgUmVzb3VyY2VFcnJvciYpIGZpbmFsIHsg
fQorICAgIGJvb2wgZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1l
bnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiwgaW50KSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdm9pZCBkaXNwYXRjaERpZERp
c3BhdGNoT25sb2FkRXZlbnRzKCkgZmluYWwgeyB9CisgICAgdm9pZCBkaXNwYXRjaERpZFJlY2Vp
dmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZCgpIGZpbmFsIHsgfQorICAgIHZvaWQg
ZGlzcGF0Y2hEaWRDYW5jZWxDbGllbnRSZWRpcmVjdCgpIGZpbmFsIHsgfQorICAgIHZvaWQgZGlz
cGF0Y2hXaWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KGNvbnN0IFVSTCYsIGRvdWJsZSwgZG91Ymxl
KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRpc3BhdGNoRGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdl
KCkgZmluYWwgeyB9CisgICAgdm9pZCBkaXNwYXRjaERpZFB1c2hTdGF0ZVdpdGhpblBhZ2UoKSBm
aW5hbCB7IH0KKyAgICB2b2lkIGRpc3BhdGNoRGlkUmVwbGFjZVN0YXRlV2l0aGluUGFnZSgpIGZp
bmFsIHsgfQorICAgIHZvaWQgZGlzcGF0Y2hEaWRQb3BTdGF0ZVdpdGhpblBhZ2UoKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGRpc3BhdGNoV2lsbENsb3NlKCkgZmluYWwgeyB9CisgICAgdm9pZCBkaXNw
YXRjaERpZFJlY2VpdmVJY29uKCkgZmluYWwgeyB9CisgICAgdm9pZCBkaXNwYXRjaERpZFN0YXJ0
UHJvdmlzaW9uYWxMb2FkKCkgZmluYWwgeyB9CisgICAgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVU
aXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJikgZmluYWwgeyB9CisgICAgdm9pZCBkaXNw
YXRjaERpZENvbW1pdExvYWQoc3RkOjpvcHRpb25hbDxIYXNJbnNlY3VyZUNvbnRlbnQ+KSBmaW5h
bCB7IH0KKyAgICB2b2lkIGRpc3BhdGNoRGlkRmFpbFByb3Zpc2lvbmFsTG9hZChjb25zdCBSZXNv
dXJjZUVycm9yJikgZmluYWwgeyB9CisgICAgdm9pZCBkaXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0
IFJlc291cmNlRXJyb3ImKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRpc3BhdGNoRGlkRmluaXNoRG9j
dW1lbnRMb2FkKCkgZmluYWwgeyB9CisgICAgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWQoKSBm
aW5hbCB7IH0KKyAgICB2b2lkIGRpc3BhdGNoRGlkUmVhY2hMYXlvdXRNaWxlc3RvbmUoTGF5b3V0
TWlsZXN0b25lcykgZmluYWwgeyB9CisKKyAgICBGcmFtZSogZGlzcGF0Y2hDcmVhdGVQYWdlKGNv
bnN0IE5hdmlnYXRpb25BY3Rpb24mKSBmaW5hbCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdm9p
ZCBkaXNwYXRjaFNob3coKSBmaW5hbCB7IH0KKworICAgIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xp
Y3lGb3JSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgRnJhbWVQb2xpY3lGdW5jdGlvbikgZmluYWwgeyB9CisgICAgdm9pZCBkaXNwYXRjaERl
Y2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBjb25zdCBTdHJpbmcm
LCBGcmFtZVBvbGljeUZ1bmN0aW9uKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoRGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBGcmFtZVBvbGljeUZ1bmN0aW9u
KSBmaW5hbDsKKyAgICB2b2lkIGNhbmNlbFBvbGljeUNoZWNrKCkgZmluYWwgeyB9CisKKyAgICB2
b2lkIGRpc3BhdGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3koY29uc3QgUmVzb3VyY2VFcnJvciYp
IGZpbmFsIHsgfQorCisgICAgdm9pZCBkaXNwYXRjaFdpbGxTZW5kU3VibWl0RXZlbnQoUGFzc1Jl
ZlB0cjxGb3JtU3RhdGU+KSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0o
UGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBGcmFtZVBvbGljeUZ1bmN0aW9uKSBmaW5hbDsKKworICAg
IHZvaWQgcmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRlKERvY3VtZW50TG9hZGVyKikgZmluYWwgeyB9
CisgICAgdm9pZCBzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJl
c291cmNlRXJyb3ImKSBmaW5hbCB7IH0KKworICAgIHZvaWQgc2V0TWFpbkZyYW1lRG9jdW1lbnRS
ZWFkeShib29sKSBmaW5hbCB7IH0KKworICAgIHZvaWQgc3RhcnREb3dubG9hZChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmKSBmaW5hbCB7IH0KKworICAgIHZvaWQgd2lsbENo
YW5nZVRpdGxlKERvY3VtZW50TG9hZGVyKikgZmluYWwgeyB9CisgICAgdm9pZCBkaWRDaGFuZ2VU
aXRsZShEb2N1bWVudExvYWRlciopIGZpbmFsIHsgfQorCisgICAgdm9pZCB3aWxsUmVwbGFjZU11
bHRpcGFydENvbnRlbnQoKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRpZFJlcGxhY2VNdWx0aXBhcnRD
b250ZW50KCkgZmluYWwgeyB9CisKKyAgICB2b2lkIGNvbW1pdHRlZExvYWQoRG9jdW1lbnRMb2Fk
ZXIqLCBjb25zdCBjaGFyKiwgaW50KSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbmlzaGVkTG9hZGlu
ZyhEb2N1bWVudExvYWRlciopIGZpbmFsIHsgfQorCisgICAgUmVzb3VyY2VFcnJvciBjYW5jZWxs
ZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBmaW5hbCB7IHJldHVybiB7IFJlc291cmNl
RXJyb3I6OlR5cGU6OkNhbmNlbGxhdGlvbiB9OyB9CisgICAgUmVzb3VyY2VFcnJvciBibG9ja2Vk
RXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgZmluYWwgeyByZXR1cm4geyB9OyB9CisgICAg
UmVzb3VyY2VFcnJvciBibG9ja2VkQnlDb250ZW50QmxvY2tlckVycm9yKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYpIGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorICAgIFJlc291cmNlRXJyb3IgY2Fubm90
U2hvd1VSTEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIGZpbmFsIHsgcmV0dXJuIHsgfTsg
fQorICAgIFJlc291cmNlRXJyb3IgaW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25z
dCBSZXNvdXJjZVJlcXVlc3QmKSBmaW5hbCB7IHJldHVybiB7IH07IH0KKyNpZiBFTkFCTEUoQ09O
VEVOVF9GSUxURVJJTkcpCisgICAgUmVzb3VyY2VFcnJvciBibG9ja2VkQnlDb250ZW50RmlsdGVy
RXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgZmluYWwgeyByZXR1cm4geyB9OyB9CisjZW5k
aWYKIAotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxFbXB0eUZyYW1lTG9hZGVyQ2xpZW50PiBk
dW1teUZyYW1lTG9hZGVyQ2xpZW50OwotICAgIHBhZ2VDb25maWd1cmF0aW9uLmxvYWRlckNsaWVu
dEZvck1haW5GcmFtZSA9ICZkdW1teUZyYW1lTG9hZGVyQ2xpZW50LmdldCgpOworICAgIFJlc291
cmNlRXJyb3IgY2Fubm90U2hvd01JTUVUeXBlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYp
IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorICAgIFJlc291cmNlRXJyb3IgZmlsZURvZXNOb3RFeGlz
dEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAg
ICBSZXNvdXJjZUVycm9yIHBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpIGZpbmFsIHsgcmV0dXJuIHsgfTsgfQogCi0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEVtcHR5UHJvZ3Jlc3NUcmFja2VyQ2xpZW50PiBkdW1teVByb2dyZXNzVHJhY2tlckNsaWVu
dDsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi5wcm9ncmVzc1RyYWNrZXJDbGllbnQgPSAmZHVtbXlQ
cm9ncmVzc1RyYWNrZXJDbGllbnQuZ2V0KCk7CisgICAgYm9vbCBzaG91bGRGYWxsQmFjayhjb25z
dCBSZXNvdXJjZUVycm9yJikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHBhZ2VDb25m
aWd1cmF0aW9uLmJhY2tGb3J3YXJkQ2xpZW50ID0gYWRvcHRSZWYobmV3IEVtcHR5QmFja0Zvcndh
cmRDbGllbnQpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50
ID0gc3RkOjptYWtlX3VuaXF1ZTxFbXB0eURpYWdub3N0aWNMb2dnaW5nQ2xpZW50PigpOworICAg
IGJvb2wgY2FuSGFuZGxlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBjb25zdCBmaW5h
bCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgY2FuU2hvd01JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBjYW5TaG93TUlNRVR5
cGVBc0hUTUwoY29uc3QgU3RyaW5nJikgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICBib29sIHJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgU3RyaW5nIGdlbmVyYXRlZE1JTUVUeXBl
Rm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7IH0KIAotICAgIHBhZ2VDb25maWd1cmF0aW9uLmFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
ID0gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNyZWF0ZShTdHJpbmcoKSwgU3RyaW5nKCkpOwot
ICAgIHBhZ2VDb25maWd1cmF0aW9uLmRhdGFiYXNlUHJvdmlkZXIgPSBhZG9wdFJlZihuZXcgRW1w
dHlEYXRhYmFzZVByb3ZpZGVyKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi5wbHVnaW5JbmZvUHJv
dmlkZXIgPSBhZG9wdFJlZihuZXcgRW1wdHlQbHVnaW5JbmZvUHJvdmlkZXIpOwotICAgIHBhZ2VD
b25maWd1cmF0aW9uLnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciA9IGFkb3B0UmVmKG5ldyBFbXB0
eVN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcik7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24udXNlckNv
bnRlbnRQcm92aWRlciA9IGFkb3B0UmVmKG5ldyBFbXB0eVVzZXJDb250ZW50UHJvdmlkZXIpOwot
ICAgIHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUgPSBhZG9wdFJlZihuZXcgRW1w
dHlWaXNpdGVkTGlua1N0b3JlKTsKLX0KKyAgICB2b2lkIGZyYW1lTG9hZENvbXBsZXRlZCgpIGZp
bmFsIHsgfQorICAgIHZvaWQgcmVzdG9yZVZpZXdTdGF0ZSgpIGZpbmFsIHsgfQorICAgIHZvaWQg
cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpIGZpbmFsIHsgfQorICAgIHZvaWQgZGlkRmluaXNoTG9h
ZCgpIGZpbmFsIHsgfQorICAgIHZvaWQgcHJlcGFyZUZvckRhdGFTb3VyY2VSZXBsYWNlbWVudCgp
IGZpbmFsIHsgfQorCisgICAgUmVmPERvY3VtZW50TG9hZGVyPiBjcmVhdGVEb2N1bWVudExvYWRl
cihjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdWJzdGl0dXRlRGF0YSYpIGZpbmFsOwor
ICAgIHZvaWQgdXBkYXRlQ2FjaGVkRG9jdW1lbnRMb2FkZXIoRG9jdW1lbnRMb2FkZXImKSBmaW5h
bCB7IH0KKyAgICB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mLCBjb25z
dCBVUkwmKSBmaW5hbCB7IH0KKworICAgIFN0cmluZyB1c2VyQWdlbnQoY29uc3QgVVJMJikgZmlu
YWwgeyByZXR1cm4gZW1wdHlTdHJpbmcoKTsgfQorCisgICAgdm9pZCBzYXZlUGxhdGZvcm1EYXRh
VG9DYWNoZWRGcmFtZShDYWNoZWRGcmFtZSopIGZpbmFsIHsgfQorICAgIHZvaWQgdHJhbnNpdGlv
blRvQ29tbWl0dGVkRnJvbUNhY2hlZEZyYW1lKENhY2hlZEZyYW1lKikgZmluYWwgeyB9CisjaWYg
UExBVEZPUk0oSU9TKQorICAgIHZvaWQgZGlkUmVzdG9yZUZyYW1lSGllcmFyY2h5Rm9yQ2FjaGVk
RnJhbWUoKSBmaW5hbCB7IH0KKyNlbmRpZgorICAgIHZvaWQgdHJhbnNpdGlvblRvQ29tbWl0dGVk
Rm9yTmV3UGFnZSgpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkaWRTYXZlVG9QYWdlQ2FjaGUoKSBm
aW5hbCB7IH0KKyAgICB2b2lkIGRpZFJlc3RvcmVGcm9tUGFnZUNhY2hlKCkgZmluYWwgeyB9CisK
KyAgICB2b2lkIGRpc3BhdGNoRGlkQmVjb21lRnJhbWVzZXQoYm9vbCkgZmluYWwgeyB9CisKKyAg
ICB2b2lkIHVwZGF0ZUdsb2JhbEhpc3RvcnkoKSBmaW5hbCB7IH0KKyAgICB2b2lkIHVwZGF0ZUds
b2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKCkgZmluYWwgeyB9CisgICAgYm9vbCBzaG91bGRHb1Rv
SGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0qKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZvaWQgdXBkYXRlR2xvYmFsSGlzdG9yeUl0ZW1Gb3JQYWdlKCkgZmluYWwgeyB9CisgICAg
dm9pZCBzYXZlVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtJikgZmluYWwgeyB9CisgICAgYm9v
bCBjYW5DYWNoZVBhZ2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQg
ZGlkRGlzcGxheUluc2VjdXJlQ29udGVudCgpIGZpbmFsIHsgfQorICAgIHZvaWQgZGlkUnVuSW5z
ZWN1cmVDb250ZW50KFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgVVJMJikgZmluYWwgeyB9CisgICAg
dm9pZCBkaWREZXRlY3RYU1MoY29uc3QgVVJMJiwgYm9vbCkgZmluYWwgeyB9CisgICAgUmVmUHRy
PEZyYW1lPiBjcmVhdGVGcmFtZShjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmLCBIVE1MRnJhbWVP
d25lckVsZW1lbnQqLCBjb25zdCBTdHJpbmcmLCBib29sLCBpbnQsIGludCkgZmluYWw7CisgICAg
UmVmUHRyPFdpZGdldD4gY3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmLCBIVE1MUGx1Z0luRWxl
bWVudCosIGNvbnN0IFVSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0
cmluZz4mLCBjb25zdCBTdHJpbmcmLCBib29sKSBmaW5hbDsKKyAgICB2b2lkIHJlY3JlYXRlUGx1
Z2luKFdpZGdldCopIGZpbmFsOworICAgIFBhc3NSZWZQdHI8V2lkZ2V0PiBjcmVhdGVKYXZhQXBw
bGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBIVE1MQXBwbGV0RWxlbWVudCosIGNvbnN0IFVSTCYs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKSBmaW5hbDsKKwor
ICAgIE9iamVjdENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNvbnN0IFVSTCYsIGNvbnN0
IFN0cmluZyYpIGZpbmFsIHsgcmV0dXJuIE9iamVjdENvbnRlbnRUeXBlOjpOb25lOyB9CisgICAg
U3RyaW5nIG92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4geyB9OyB9CisK
KyAgICB2b2lkIHJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdldCopIGZpbmFsIHsgfQorICAgIHZv
aWQgZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRE9NV3JhcHBlcldvcmxkJikg
ZmluYWwgeyB9CisKKyAgICB2b2lkIHJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29sKSBm
aW5hbCB7IH0KKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFJlbW90ZUFYT2JqZWN0UmVmIGFj
Y2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKSBmaW5hbCB7IHJldHVybiBudWxscHRyOyB9CisgICAg
TlNDYWNoZWRVUkxSZXNwb25zZSAqd2lsbENhY2hlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1
bnNpZ25lZCBsb25nLCBOU0NhY2hlZFVSTFJlc3BvbnNlICpyZXNwb25zZSkgY29uc3QgZmluYWwg
eyByZXR1cm4gcmVzcG9uc2U7IH0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lOKSAmJiBVU0Uo
Q0ZVUkxDT05ORUNUSU9OKQorICAgIGJvb2wgc2hvdWxkQ2FjaGVSZXNwb25zZShEb2N1bWVudExv
YWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBjb25zdCB1bnNp
Z25lZCBjaGFyKiwgdW5zaWduZWQgbG9uZyBsb25nKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9Cisj
ZW5kaWYKKworICAgIFBhc3NSZWZQdHI8RnJhbWVOZXR3b3JraW5nQ29udGV4dD4gY3JlYXRlTmV0
d29ya2luZ0NvbnRleHQoKSBmaW5hbDsKKworI2lmIEVOQUJMRShSRVFVRVNUX0FVVE9DT01QTEVU
RSkKKyAgICB2b2lkIGRpZFJlcXVlc3RBdXRvY29tcGxldGUoUGFzc1JlZlB0cjxGb3JtU3RhdGU+
KSBmaW5hbCB7IH0KKyNlbmRpZgorCisgICAgYm9vbCBpc0VtcHR5RnJhbWVMb2FkZXJDbGllbnQo
KSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBwcmVmZXRjaEROUyhjb25zdCBTdHJp
bmcmKSBmaW5hbCB7IH0KK307CisKK2NsYXNzIEVtcHR5SW5zcGVjdG9yQ2xpZW50IGZpbmFsIDog
cHVibGljIEluc3BlY3RvckNsaWVudCB7CisgICAgdm9pZCBpbnNwZWN0ZWRQYWdlRGVzdHJveWVk
KCkgZmluYWwgeyB9CisgICAgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIG9wZW5Mb2NhbEZy
b250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqKSBmaW5hbCB7IHJldHVybiBudWxscHRyOyB9Cisg
ICAgdm9pZCBicmluZ0Zyb250ZW5kVG9Gcm9udCgpIGZpbmFsIHsgfQorICAgIHZvaWQgaGlnaGxp
Z2h0KCkgZmluYWwgeyB9CisgICAgdm9pZCBoaWRlSGlnaGxpZ2h0KCkgZmluYWwgeyB9Cit9Owor
CisjaWYgRU5BQkxFKEFQUExFX1BBWSkKKworY2xhc3MgRW1wdHlQYXltZW50Q29vcmRpbmF0b3JD
bGllbnQgZmluYWwgOiBwdWJsaWMgUGF5bWVudENvb3JkaW5hdG9yQ2xpZW50IHsKKyAgICBib29s
IHN1cHBvcnRzVmVyc2lvbih1bnNpZ25lZCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIGNhbk1ha2VQYXltZW50cygpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBj
YW5NYWtlUGF5bWVudHNXaXRoQWN0aXZlQ2FyZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoYm9vbCk+IGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbCB7IGNh
bGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25IYW5kbGVyXSB7IGNvbXBsZXRpb25IYW5kbGVyKGZh
bHNlKTsgfSk7IH0KKyAgICB2b2lkIG9wZW5QYXltZW50U2V0dXAoY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiwgc3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wpPiBjb21wbGV0aW9uSGFuZGxlcikg
ZmluYWwgeyBjYWxsT25NYWluVGhyZWFkKFtjb21wbGV0aW9uSGFuZGxlcl0geyBjb21wbGV0aW9u
SGFuZGxlcihmYWxzZSk7IH0pOyB9CisgICAgYm9vbCBzaG93UGF5bWVudFVJKGNvbnN0IFVSTCYs
IGNvbnN0IFZlY3RvcjxVUkw+JiwgY29uc3QgUGF5bWVudFJlcXVlc3QmKSBmaW5hbCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZvaWQgY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24oY29uc3QgUGF5
bWVudE1lcmNoYW50U2Vzc2lvbiYpIGZpbmFsIHsgfQorICAgIHZvaWQgY29tcGxldGVTaGlwcGlu
Z01ldGhvZFNlbGVjdGlvbihQYXltZW50QXV0aG9yaXphdGlvblN0YXR1cywgc3RkOjpvcHRpb25h
bDxQYXltZW50UmVxdWVzdDo6VG90YWxBbmRMaW5lSXRlbXM+KSBmaW5hbCB7IH0KKyAgICB2b2lk
IGNvbXBsZXRlU2hpcHBpbmdDb250YWN0U2VsZWN0aW9uKFBheW1lbnRBdXRob3JpemF0aW9uU3Rh
dHVzLCBjb25zdCBWZWN0b3I8UGF5bWVudFJlcXVlc3Q6OlNoaXBwaW5nTWV0aG9kPiYsIHN0ZDo6
b3B0aW9uYWw8UGF5bWVudFJlcXVlc3Q6OlRvdGFsQW5kTGluZUl0ZW1zPikgZmluYWwgeyB9Cisg
ICAgdm9pZCBjb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oc3RkOjpvcHRpb25hbDxXZWJD
b3JlOjpQYXltZW50UmVxdWVzdDo6VG90YWxBbmRMaW5lSXRlbXM+KSBmaW5hbCB7IH0KKyAgICB2
b2lkIGNvbXBsZXRlUGF5bWVudFNlc3Npb24oUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXMpIGZp
bmFsIHsgfQorICAgIHZvaWQgYWJvcnRQYXltZW50U2Vzc2lvbigpIGZpbmFsIHsgfQorICAgIHZv
aWQgcGF5bWVudENvb3JkaW5hdG9yRGVzdHJveWVkKCkgZmluYWwgeyB9Cit9OworCisjZW5kaWYK
KworY2xhc3MgRW1wdHlQbHVnaW5JbmZvUHJvdmlkZXIgZmluYWwgOiBwdWJsaWMgUGx1Z2luSW5m
b1Byb3ZpZGVyIHsKKyAgICB2b2lkIHJlZnJlc2hQbHVnaW5zKCkgZmluYWwgeyB9OworICAgIHZv
aWQgZ2V0UGx1Z2luSW5mbyhQYWdlJiwgVmVjdG9yPFBsdWdpbkluZm8+JikgZmluYWwgeyB9Cisg
ICAgdm9pZCBnZXRXZWJWaXNpYmxlUGx1Z2luSW5mbyhQYWdlJiwgVmVjdG9yPFBsdWdpbkluZm8+
JikgZmluYWwgeyB9Cit9OwogCiBjbGFzcyBFbXB0eVBvcHVwTWVudSA6IHB1YmxpYyBQb3B1cE1l
bnUgewogcHVibGljOgotICAgIHZvaWQgc2hvdyhjb25zdCBJbnRSZWN0JiwgRnJhbWVWaWV3Kiwg
aW50KSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGhpZGUoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lk
IHVwZGF0ZUZyb21FbGVtZW50KCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBkaXNjb25uZWN0Q2xp
ZW50KCkgb3ZlcnJpZGUgeyB9CisgICAgRW1wdHlQb3B1cE1lbnUoKSA9IGRlZmF1bHQ7Citwcml2
YXRlOgorICAgIHZvaWQgc2hvdyhjb25zdCBJbnRSZWN0JiwgRnJhbWVWaWV3KiwgaW50KSBmaW5h
bCB7IH0KKyAgICB2b2lkIGhpZGUoKSBmaW5hbCB7IH0KKyAgICB2b2lkIHVwZGF0ZUZyb21FbGVt
ZW50KCkgZmluYWwgeyB9CisgICAgdm9pZCBkaXNjb25uZWN0Q2xpZW50KCkgZmluYWwgeyB9Cit9
OworCitjbGFzcyBFbXB0eVByb2dyZXNzVHJhY2tlckNsaWVudCBmaW5hbCA6IHB1YmxpYyBQcm9n
cmVzc1RyYWNrZXJDbGllbnQgeworICAgIHZvaWQgd2lsbENoYW5nZUVzdGltYXRlZFByb2dyZXNz
KCkgZmluYWwgeyB9CisgICAgdm9pZCBkaWRDaGFuZ2VFc3RpbWF0ZWRQcm9ncmVzcygpIGZpbmFs
IHsgfQorICAgIHZvaWQgcHJvZ3Jlc3NTdGFydGVkKEZyYW1lJikgZmluYWwgeyB9CisgICAgdm9p
ZCBwcm9ncmVzc0VzdGltYXRlQ2hhbmdlZChGcmFtZSYpIGZpbmFsIHsgfQorICAgIHZvaWQgcHJv
Z3Jlc3NGaW5pc2hlZChGcmFtZSYpIGZpbmFsIHsgfQogfTsKIAogY2xhc3MgRW1wdHlTZWFyY2hQ
b3B1cE1lbnUgOiBwdWJsaWMgU2VhcmNoUG9wdXBNZW51IHsKIHB1YmxpYzoKLSAgICBQb3B1cE1l
bnUqIHBvcHVwTWVudSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcG9wdXAuZ2V0KCk7IH0KLSAgICB2
b2lkIHNhdmVSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBWZWN0b3I8
UmVjZW50U2VhcmNoPiYpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgbG9hZFJlY2VudFNlYXJjaGVz
KGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3RvcjxSZWNlbnRTZWFyY2g+Jikgb3ZlcnJpZGUgeyB9
Ci0gICAgYm9vbCBlbmFibGVkKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBFbXB0
eVNlYXJjaFBvcHVwTWVudSgpCisgICAgICAgIDogbV9wb3B1cChhZG9wdFJlZigqbmV3IEVtcHR5
UG9wdXBNZW51KSkKKyAgICB7CisgICAgfQogCiBwcml2YXRlOgotICAgIFJlZlB0cjxFbXB0eVBv
cHVwTWVudT4gbV9wb3B1cDsKKyAgICBQb3B1cE1lbnUqIHBvcHVwTWVudSgpIGZpbmFsIHsgcmV0
dXJuIG1fcG9wdXAucHRyKCk7IH0KKyAgICB2b2lkIHNhdmVSZWNlbnRTZWFyY2hlcyhjb25zdCBB
dG9taWNTdHJpbmcmLCBjb25zdCBWZWN0b3I8UmVjZW50U2VhcmNoPiYpIGZpbmFsIHsgfQorICAg
IHZvaWQgbG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3RvcjxSZWNl
bnRTZWFyY2g+JikgZmluYWwgeyB9CisgICAgYm9vbCBlbmFibGVkKCkgZmluYWwgeyByZXR1cm4g
ZmFsc2U7IH0KKworICAgIFJlZjxFbXB0eVBvcHVwTWVudT4gbV9wb3B1cDsKK307CisKK2NsYXNz
IEVtcHR5U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyIGZpbmFsIDogcHVibGljIFN0b3JhZ2VOYW1l
c3BhY2VQcm92aWRlciB7CisgICAgc3RydWN0IEVtcHR5U3RvcmFnZUFyZWEgOiBwdWJsaWMgU3Rv
cmFnZUFyZWEgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBmaW5hbCB7IHJldHVybiAwOyB9
CisgICAgICAgIFN0cmluZyBrZXkodW5zaWduZWQpIGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorICAg
ICAgICBTdHJpbmcgaXRlbShjb25zdCBTdHJpbmcmKSBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAg
ICAgICAgdm9pZCBzZXRJdGVtKEZyYW1lKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwg
Ym9vbCYpIGZpbmFsIHsgfQorICAgICAgICB2b2lkIHJlbW92ZUl0ZW0oRnJhbWUqLCBjb25zdCBT
dHJpbmcmKSBmaW5hbCB7IH0KKyAgICAgICAgdm9pZCBjbGVhcihGcmFtZSopIGZpbmFsIHsgfQor
ICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgICAgIGJvb2wgY2FuQWNjZXNzU3RvcmFnZShGcmFtZSopIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgICAgIFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gTG9jYWxTdG9yYWdlOyB9CisgICAgICAgIHNpemVfdCBtZW1vcnlCeXRlc1VzZWRC
eUNhY2hlKCkgZmluYWwgeyByZXR1cm4gMDsgfQorICAgICAgICBTZWN1cml0eU9yaWdpbkRhdGEg
c2VjdXJpdHlPcmlnaW4oKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAgICB9OworCisg
ICAgc3RydWN0IEVtcHR5U3RvcmFnZU5hbWVzcGFjZSBmaW5hbCA6IHB1YmxpYyBTdG9yYWdlTmFt
ZXNwYWNlIHsKKyAgICAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYShjb25zdCBT
ZWN1cml0eU9yaWdpbkRhdGEmKSBmaW5hbCB7IHJldHVybiBhZG9wdFJlZigqbmV3IEVtcHR5U3Rv
cmFnZUFyZWEpOyB9CisgICAgICAgIFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBjb3B5KFBhZ2Uq
KSBmaW5hbCB7IHJldHVybiBhZG9wdFJlZigqbmV3IEVtcHR5U3RvcmFnZU5hbWVzcGFjZSk7IH0K
KyAgICB9OworCisgICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGNyZWF0ZVNlc3Npb25TdG9y
YWdlTmFtZXNwYWNlKFBhZ2UmLCB1bnNpZ25lZCkgZmluYWw7CisgICAgUmVmUHRyPFN0b3JhZ2VO
YW1lc3BhY2U+IGNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZSh1bnNpZ25lZCkgZmluYWw7Cisg
ICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGNyZWF0ZVRyYW5zaWVudExvY2FsU3RvcmFnZU5h
bWVzcGFjZShTZWN1cml0eU9yaWdpbiYsIHVuc2lnbmVkKSBmaW5hbDsKK307CisKK2NsYXNzIEVt
cHR5VXNlckNvbnRlbnRQcm92aWRlciBmaW5hbCA6IHB1YmxpYyBVc2VyQ29udGVudFByb3ZpZGVy
IHsKKyAgICB2b2lkIGZvckVhY2hVc2VyU2NyaXB0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChE
T01XcmFwcGVyV29ybGQmLCBjb25zdCBVc2VyU2NyaXB0Jik+JikgY29uc3QgZmluYWwgeyB9Cisg
ICAgdm9pZCBmb3JFYWNoVXNlclN0eWxlU2hlZXQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKGNv
bnN0IFVzZXJTdHlsZVNoZWV0Jik+JikgY29uc3QgZmluYWwgeyB9CisjaWYgRU5BQkxFKFVTRVJf
TUVTU0FHRV9IQU5ETEVSUykKKyAgICB2b2lkIGZvckVhY2hVc2VyTWVzc2FnZUhhbmRsZXIoY29u
c3Qgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3Im
KT4mKSBjb25zdCBmaW5hbCB7IH0KKyNlbmRpZgorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCisgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCYgdXNl
ckNvbnRlbnRFeHRlbnNpb25CYWNrZW5kKCkgZmluYWwgeyBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZD4gYmFja2VuZDsgcmV0
dXJuIGJhY2tlbmQuZ2V0KCk7IH07CisjZW5kaWYKK307CisKK2NsYXNzIEVtcHR5VmlzaXRlZExp
bmtTdG9yZSBmaW5hbCA6IHB1YmxpYyBWaXNpdGVkTGlua1N0b3JlIHsKKyAgICBib29sIGlzTGlu
a1Zpc2l0ZWQoUGFnZSYsIExpbmtIYXNoLCBjb25zdCBVUkwmLCBjb25zdCBBdG9taWNTdHJpbmcm
KSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgYWRkVmlzaXRlZExpbmsoUGFnZSYs
IExpbmtIYXNoKSBmaW5hbCB7IH0KIH07CiAKIFJlZlB0cjxQb3B1cE1lbnU+IEVtcHR5Q2hyb21l
Q2xpZW50OjpjcmVhdGVQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KikgY29uc3QKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEVtcHR5UG9wdXBNZW51KCkpOworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEVtcHR5UG9wdXBNZW51KTsKIH0KIAogUmVmUHRyPFNlYXJjaFBvcHVwTWVudT4gRW1w
dHlDaHJvbWVDbGllbnQ6OmNyZWF0ZVNlYXJjaFBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqKSBj
b25zdAogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRW1wdHlTZWFyY2hQb3B1cE1lbnUoKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW1wdHlTZWFyY2hQb3B1cE1lbnUpOwogfQogCiAj
aWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCisKIHN0ZDo6dW5pcXVlX3B0cjxDb2xvckNob29z
ZXI+IEVtcHR5Q2hyb21lQ2xpZW50OjpjcmVhdGVDb2xvckNob29zZXIoQ29sb3JDaG9vc2VyQ2xp
ZW50KiwgY29uc3QgQ29sb3ImKQogewogICAgIHJldHVybiBudWxscHRyOwogfQorCiAjZW5kaWYK
IAogdm9pZCBFbXB0eUNocm9tZUNsaWVudDo6cnVuT3BlblBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0
cjxGaWxlQ2hvb3Nlcj4pCkBAIC0yNzYsNyArNjE4LDcgQEAgUGFzc1JlZlB0cjxGcmFtZU5ldHdv
cmtpbmdDb250ZXh0PiBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVOZXR3b3JraW5nQ29u
dGUKICAgICByZXR1cm4gUGFzc1JlZlB0cjxGcmFtZU5ldHdvcmtpbmdDb250ZXh0PigpOwogfQog
Ci12b2lkIEVtcHR5VGV4dENoZWNrZXJDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBh
c3NSZWZQdHI8VGV4dENoZWNraW5nUmVxdWVzdD4sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKQor
dm9pZCBFbXB0eUVkaXRvckNsaWVudDo6RW1wdHlUZXh0Q2hlY2tlckNsaWVudDo6cmVxdWVzdENo
ZWNraW5nT2ZTdHJpbmcoVGV4dENoZWNraW5nUmVxdWVzdCYsIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mKQogewogfQogCkBAIC0yODgsNCArNjMwLDcwIEBAIHZvaWQgRW1wdHlFZGl0b3JDbGllbnQ6
OnJlZ2lzdGVyUmVkb1N0ZXAoUGFzc1JlZlB0cjxVbmRvU3RlcD4pCiB7CiB9CiAKK1JlZlB0cjxT
dG9yYWdlTmFtZXNwYWNlPiBFbXB0eVN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcjo6Y3JlYXRlU2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UoUGFnZSYsIHVuc2lnbmVkKQoreworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEVtcHR5U3RvcmFnZU5hbWVzcGFjZSk7Cit9CisKK1JlZlB0cjxTdG9yYWdlTmFt
ZXNwYWNlPiBFbXB0eVN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcjo6Y3JlYXRlTG9jYWxTdG9yYWdl
TmFtZXNwYWNlKHVuc2lnbmVkKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVtcHR5U3Rv
cmFnZU5hbWVzcGFjZSk7Cit9CisKK1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBFbXB0eVN0b3Jh
Z2VOYW1lc3BhY2VQcm92aWRlcjo6Y3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNl
KFNlY3VyaXR5T3JpZ2luJiwgdW5zaWduZWQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RW1wdHlTdG9yYWdlTmFtZXNwYWNlKTsKK30KKwordm9pZCBmaWxsV2l0aEVtcHR5Q2xpZW50cyhQ
YWdlQ29uZmlndXJhdGlvbiYgcGFnZUNvbmZpZ3VyYXRpb24pCit7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEVtcHR5Q2hyb21lQ2xpZW50PiBkdW1teUNocm9tZUNsaWVudDsKKyAgICBwYWdl
Q29uZmlndXJhdGlvbi5jaHJvbWVDbGllbnQgPSAmZHVtbXlDaHJvbWVDbGllbnQuZ2V0KCk7CisK
KyNpZiBFTkFCTEUoQVBQTEVfUEFZKQorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxFbXB0eVBh
eW1lbnRDb29yZGluYXRvckNsaWVudD4gZHVtbXlQYXltZW50Q29vcmRpbmF0b3JDbGllbnQ7Cisg
ICAgcGFnZUNvbmZpZ3VyYXRpb24ucGF5bWVudENvb3JkaW5hdG9yQ2xpZW50ID0gJmR1bW15UGF5
bWVudENvb3JkaW5hdG9yQ2xpZW50LmdldCgpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoQ09OVEVY
VF9NRU5VUykKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RW1wdHlDb250ZXh0TWVudUNsaWVu
dD4gZHVtbXlDb250ZXh0TWVudUNsaWVudDsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi5jb250ZXh0
TWVudUNsaWVudCA9ICZkdW1teUNvbnRleHRNZW51Q2xpZW50LmdldCgpOworI2VuZGlmCisKKyNp
ZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxFbXB0eURy
YWdDbGllbnQ+IGR1bW15RHJhZ0NsaWVudDsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi5kcmFnQ2xp
ZW50ID0gJmR1bW15RHJhZ0NsaWVudC5nZXQoKTsKKyNlbmRpZgorCisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEVtcHR5SW5zcGVjdG9yQ2xpZW50PiBkdW1teUluc3BlY3RvckNsaWVudDsKKyAg
ICBwYWdlQ29uZmlndXJhdGlvbi5pbnNwZWN0b3JDbGllbnQgPSAmZHVtbXlJbnNwZWN0b3JDbGll
bnQuZ2V0KCk7CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RW1wdHlGcmFtZUxvYWRlckNs
aWVudD4gZHVtbXlGcmFtZUxvYWRlckNsaWVudDsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi5sb2Fk
ZXJDbGllbnRGb3JNYWluRnJhbWUgPSAmZHVtbXlGcmFtZUxvYWRlckNsaWVudC5nZXQoKTsKKwor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxFbXB0eVByb2dyZXNzVHJhY2tlckNsaWVudD4gZHVt
bXlQcm9ncmVzc1RyYWNrZXJDbGllbnQ7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24ucHJvZ3Jlc3NU
cmFja2VyQ2xpZW50ID0gJmR1bW15UHJvZ3Jlc3NUcmFja2VyQ2xpZW50LmdldCgpOworCisgICAg
cGFnZUNvbmZpZ3VyYXRpb24uYmFja0ZvcndhcmRDbGllbnQgPSBhZG9wdFJlZigqbmV3IEVtcHR5
QmFja0ZvcndhcmRDbGllbnQpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLmRpYWdub3N0aWNMb2dn
aW5nQ2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxFbXB0eURpYWdub3N0aWNMb2dnaW5nQ2xpZW50
PigpOworCisgICAgcGFnZUNvbmZpZ3VyYXRpb24uYXBwbGljYXRpb25DYWNoZVN0b3JhZ2UgPSBB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y3JlYXRlKHsgfSwgeyB9KTsKKyAgICBwYWdlQ29uZmln
dXJhdGlvbi5kYXRhYmFzZVByb3ZpZGVyID0gYWRvcHRSZWYoKm5ldyBFbXB0eURhdGFiYXNlUHJv
dmlkZXIpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLnBsdWdpbkluZm9Qcm92aWRlciA9IGFkb3B0
UmVmKCpuZXcgRW1wdHlQbHVnaW5JbmZvUHJvdmlkZXIpOworICAgIHBhZ2VDb25maWd1cmF0aW9u
LnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciA9IGFkb3B0UmVmKCpuZXcgRW1wdHlTdG9yYWdlTmFt
ZXNwYWNlUHJvdmlkZXIpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLnVzZXJDb250ZW50UHJvdmlk
ZXIgPSBhZG9wdFJlZigqbmV3IEVtcHR5VXNlckNvbnRlbnRQcm92aWRlcik7CisgICAgcGFnZUNv
bmZpZ3VyYXRpb24udmlzaXRlZExpbmtTdG9yZSA9IGFkb3B0UmVmKCpuZXcgRW1wdHlWaXNpdGVk
TGlua1N0b3JlKTsKK30KKworVW5pcXVlUmVmPEVkaXRvckNsaWVudD4gY3JlYXRlRW1wdHlFZGl0
b3JDbGllbnQoKQoreworICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEVtcHR5RWRpdG9yQ2xpZW50
PigpOworfQorCitEaWFnbm9zdGljTG9nZ2luZ0NsaWVudCYgZW1wdHlEaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEVtcHR5RGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQ+IGNsaWVudDsKKyAgICByZXR1cm4gY2xpZW50OworfQorCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKaW5kZXggNDljOWFmNjQwYTE0YTQwOWJlNTExNmZlYjFj
ZmY4OWY2ZTFjZjM2MC4uMWExZDUzYzM3NDA4YWI5OWM2MGRmMGUyZjdkODJhNDFjMWFlZDY2OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaApAQCAtMjksNjIwICsyOSwxODAgQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ29u
dGV4dE1lbnVDbGllbnQuaCIKLSNpbmNsdWRlICJEZXZpY2VNb3Rpb25DbGllbnQuaCIKLSNpbmNs
dWRlICJEZXZpY2VPcmllbnRhdGlvbkNsaWVudC5oIgotI2luY2x1ZGUgIkRpYWdub3N0aWNMb2dn
aW5nQ2xpZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUgIkRy
YWdDbGllbnQuaCIKLSNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKLSNpbmNsdWRlICJGb2N1c0RpcmVjdGlvbi5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVy
Q2xpZW50LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAiUHJvZ3Jl
c3NUcmFja2VyQ2xpZW50LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgotI2luY2x1ZGUg
IlNlc3Npb25JRC5oIgotI2luY2x1ZGUgIlNvY2tldFByb3ZpZGVyLmgiCi0jaW5jbHVkZSAiVGV4
dENoZWNrZXJDbGllbnQuaCIKLSNpbmNsdWRlICJWaXNpdGVkTGlua1N0b3JlLmgiCi0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgotCi0jaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5E
TEVSUykKLSNpbmNsdWRlICJVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yLmgiCi0jZW5kaWYK
LQotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0jaW5jbHVkZSAiQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uLmgiCi0jZW5kaWYKLQotLyoKLSBUaGlzIGZpbGUgaG9sZHMgZW1wdHkgQ2xp
ZW50IHN0dWJzIGZvciB1c2UgYnkgV2ViQ29yZS4KLSBWaWV3bGVzcyBlbGVtZW50IG5lZWRzIHRv
IGNyZWF0ZSBhIGR1bW15IFBhZ2UtPkZyYW1lLT5GcmFtZVZpZXcgdHJlZSBmb3IgdXNlIGluIHBh
cnNpbmcgb3IgZXhlY3V0aW5nIEphdmFTY3JpcHQuCi0gVGhpcyB0cmVlIGRlcGVuZHMgaGVhdmls
eSBvbiBDbGllbnRzICh1c3VhbGx5IHByb3ZpZGVkIGJ5IFdlYktpdCBjbGFzc2VzKS4KLQotIFRo
aXMgZmlsZSB3YXMgZmlyc3QgY3JlYXRlZCBmb3IgU1ZHSW1hZ2UgYXMgaXQgaGFkIG5vIHdheSB0
byBhY2Nlc3MgdGhlIGN1cnJlbnQgUGFnZSAobm9yIHNob3VsZCBpdCwKLSBzaW5jZSBJbWFnZXMg
YXJlIG5vdCB0aWVkIHRvIGEgcGFnZSkuCi0gU2VlIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU5NzEgZm9yIHRoZSBvcmlnaW5hbCBkaXNjdXNzaW9uIGFib3V0IHRoaXMg
ZmlsZS4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKLSBJZGVhbGx5LCB3aGVuZXZlciB5
b3UgY2hhbmdlIGEgQ2xpZW50IGNsYXNzLCB5b3Ugc2hvdWxkIGFkZCBhIHN0dWIgaGVyZS4KLSBC
cml0dGxlLCB5ZXMuICBVbmZvcnR1bmF0ZSwgeWVzLiAgSG9wZWZ1bGx5IHRlbXBvcmFyeS4KLSov
CisvLyBFbXB0eSBjbGllbnQgY2xhc3NlcyBmb3IgdXNlIGJ5IFdlYkNvcmUuCisvLworLy8gRmly
c3QgY3JlYXRlZCBmb3IgU1ZHSW1hZ2UgYXMgaXQgaGFkIG5vIHdheSB0byBhY2Nlc3MgdGhlIGN1
cnJlbnQgUGFnZSAobm9yIHNob3VsZCBpdCwgc2luY2UgSW1hZ2VzIGFyZSBub3QgdGllZCB0byBh
IHBhZ2UpLgorLy8gU2VlIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5
NzEgZm9yIHRoZSBvcmlnaW5hbCBkaXNjdXNzaW9uIGFib3V0IHRoaXMgZmlsZS4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBQYWdlOworY2xhc3MgRGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQ7CitjbGFzcyBFZGl0b3JDbGllbnQ7CiBjbGFzcyBQYWdlQ29uZmlndXJhdGlvbjsKIAogY2xh
c3MgRW1wdHlDaHJvbWVDbGllbnQgOiBwdWJsaWMgQ2hyb21lQ2xpZW50IHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5FbXB0eUNocm9tZUNsaWVu
dCgpIHsgfQorCiAgICAgdm9pZCBjaHJvbWVEZXN0cm95ZWQoKSBvdmVycmlkZSB7IH0KIAotICAg
IHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZSB7IH0KLSAgICBG
bG9hdFJlY3Qgd2luZG93UmVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9Cisg
ICAgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIEZs
b2F0UmVjdCB3aW5kb3dSZWN0KCkgZmluYWwgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAotICAg
IEZsb2F0UmVjdCBwYWdlUmVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9Cisg
ICAgRmxvYXRSZWN0IHBhZ2VSZWN0KCkgZmluYWwgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAot
ICAgIHZvaWQgZm9jdXMoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHVuZm9jdXMoKSBvdmVycmlk
ZSB7IH0KKyAgICB2b2lkIGZvY3VzKCkgZmluYWwgeyB9CisgICAgdm9pZCB1bmZvY3VzKCkgZmlu
YWwgeyB9CiAKLSAgICBib29sIGNhblRha2VGb2N1cyhGb2N1c0RpcmVjdGlvbikgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIHRha2VGb2N1cyhGb2N1c0RpcmVjdGlvbikgb3Zl
cnJpZGUgeyB9CisgICAgYm9vbCBjYW5UYWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pIGZpbmFsIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCB0YWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pIGZpbmFs
IHsgfQogCi0gICAgdm9pZCBmb2N1c2VkRWxlbWVudENoYW5nZWQoRWxlbWVudCopIG92ZXJyaWRl
IHsgfQotICAgIHZvaWQgZm9jdXNlZEZyYW1lQ2hhbmdlZChGcmFtZSopIG92ZXJyaWRlIHsgfQor
ICAgIHZvaWQgZm9jdXNlZEVsZW1lbnRDaGFuZ2VkKEVsZW1lbnQqKSBmaW5hbCB7IH0KKyAgICB2
b2lkIGZvY3VzZWRGcmFtZUNoYW5nZWQoRnJhbWUqKSBmaW5hbCB7IH0KIAotICAgIFBhZ2UqIGNy
ZWF0ZVdpbmRvdyhGcmFtZSosIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBjb25zdCBXaW5kb3dG
ZWF0dXJlcyYsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mKSBvdmVycmlkZSB7IHJldHVybiBudWxs
cHRyOyB9Ci0gICAgdm9pZCBzaG93KCkgb3ZlcnJpZGUgeyB9CisgICAgUGFnZSogY3JlYXRlV2lu
ZG93KEZyYW1lKiwgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGNvbnN0IFdpbmRvd0ZlYXR1cmVz
JiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYpIGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAg
ICB2b2lkIHNob3coKSBmaW5hbCB7IH0KIAotICAgIGJvb2wgY2FuUnVuTW9kYWwoKSBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQgcnVuTW9kYWwoKSBvdmVycmlkZSB7IH0KKyAg
ICBib29sIGNhblJ1bk1vZGFsKCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHJ1
bk1vZGFsKCkgZmluYWwgeyB9CiAKLSAgICB2b2lkIHNldFRvb2xiYXJzVmlzaWJsZShib29sKSBv
dmVycmlkZSB7IH0KLSAgICBib29sIHRvb2xiYXJzVmlzaWJsZSgpIG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdm9pZCBzZXRUb29sYmFyc1Zpc2libGUoYm9vbCkgZmluYWwgeyB9Cisg
ICAgYm9vbCB0b29sYmFyc1Zpc2libGUoKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAg
dm9pZCBzZXRTdGF0dXNiYXJWaXNpYmxlKGJvb2wpIG92ZXJyaWRlIHsgfQotICAgIGJvb2wgc3Rh
dHVzYmFyVmlzaWJsZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBzZXRT
dGF0dXNiYXJWaXNpYmxlKGJvb2wpIGZpbmFsIHsgfQorICAgIGJvb2wgc3RhdHVzYmFyVmlzaWJs
ZSgpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2b2lkIHNldFNjcm9sbGJhcnNWaXNp
YmxlKGJvb2wpIG92ZXJyaWRlIHsgfQotICAgIGJvb2wgc2Nyb2xsYmFyc1Zpc2libGUoKSBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgc2V0U2Nyb2xsYmFyc1Zpc2libGUoYm9v
bCkgZmluYWwgeyB9CisgICAgYm9vbCBzY3JvbGxiYXJzVmlzaWJsZSgpIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CiAKLSAgICB2b2lkIHNldE1lbnViYXJWaXNpYmxlKGJvb2wpIG92ZXJyaWRlIHsg
fQotICAgIGJvb2wgbWVudWJhclZpc2libGUoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZvaWQgc2V0TWVudWJhclZpc2libGUoYm9vbCkgZmluYWwgeyB9CisgICAgYm9vbCBtZW51
YmFyVmlzaWJsZSgpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2b2lkIHNldFJlc2l6
YWJsZShib29sKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHNldFJlc2l6YWJsZShib29sKSBmaW5h
bCB7IH0KIAotICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNz
YWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5n
Jikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3Vy
Y2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25z
dCBTdHJpbmcmKSBmaW5hbCB7IH0KIAotICAgIGJvb2wgY2FuUnVuQmVmb3JlVW5sb2FkQ29uZmly
bVBhbmVsKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHJ1bkJlZm9yZVVu
bG9hZENvbmZpcm1QYW5lbChjb25zdCBTdHJpbmcmLCBGcmFtZSopIG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KKyAgICBib29sIGNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCgpIGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwo
Y29uc3QgU3RyaW5nJiwgRnJhbWUqKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2b2lk
IGNsb3NlV2luZG93U29vbigpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgY2xvc2VXaW5kb3dTb29u
KCkgZmluYWwgeyB9CiAKLSAgICB2b2lkIHJ1bkphdmFTY3JpcHRBbGVydChGcmFtZSosIGNvbnN0
IFN0cmluZyYpIG92ZXJyaWRlIHsgfQotICAgIGJvb2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oRnJh
bWUqLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wg
cnVuSmF2YVNjcmlwdFByb21wdChGcmFtZSosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYs
IFN0cmluZyYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBydW5KYXZhU2Ny
aXB0QWxlcnQoRnJhbWUqLCBjb25zdCBTdHJpbmcmKSBmaW5hbCB7IH0KKyAgICBib29sIHJ1bkph
dmFTY3JpcHRDb25maXJtKEZyYW1lKiwgY29uc3QgU3RyaW5nJikgZmluYWwgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICBib29sIHJ1bkphdmFTY3JpcHRQcm9tcHQoRnJhbWUqLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmLCBTdHJpbmcmKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAg
Ym9vbCBzZWxlY3RJdGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJhbCgpIG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBzZWxlY3RJdGVtQWxpZ25tZW50Rm9sbG93c01lbnVXcml0
aW5nRGlyZWN0aW9uKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGhhc09w
ZW5lZFBvcHVwKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBSZWZQdHI8
UG9wdXBNZW51PiBjcmVhdGVQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KikgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgUmVmUHRyPFNlYXJjaFBvcHVwTWVudT4gY3JlYXRlU2VhcmNoUG9wdXBNZW51KFBv
cHVwTWVudUNsaWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgc2VsZWN0SXRlbVdyaXRp
bmdEaXJlY3Rpb25Jc05hdHVyYWwoKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wg
c2VsZWN0SXRlbUFsaWdubWVudEZvbGxvd3NNZW51V3JpdGluZ0RpcmVjdGlvbigpIGZpbmFsIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBoYXNPcGVuZWRQb3B1cCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgUmVmUHRyPFBvcHVwTWVudT4gY3JlYXRlUG9wdXBNZW51KFBv
cHVwTWVudUNsaWVudCopIGNvbnN0IGZpbmFsOworICAgIFJlZlB0cjxTZWFyY2hQb3B1cE1lbnU+
IGNyZWF0ZVNlYXJjaFBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqKSBjb25zdCBmaW5hbDsKIAot
ICAgIHZvaWQgc2V0U3RhdHVzYmFyVGV4dChjb25zdCBTdHJpbmcmKSBvdmVycmlkZSB7IH0KKyAg
ICB2b2lkIHNldFN0YXR1c2JhclRleHQoY29uc3QgU3RyaW5nJikgZmluYWwgeyB9CiAKLSAgICBL
ZXlib2FyZFVJTW9kZSBrZXlib2FyZFVJTW9kZSgpIG92ZXJyaWRlIHsgcmV0dXJuIEtleWJvYXJk
QWNjZXNzRGVmYXVsdDsgfQorICAgIEtleWJvYXJkVUlNb2RlIGtleWJvYXJkVUlNb2RlKCkgZmlu
YWwgeyByZXR1cm4gS2V5Ym9hcmRBY2Nlc3NEZWZhdWx0OyB9CiAKLSAgICB2b2lkIGludmFsaWRh
dGVSb290Vmlldyhjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBpbnZhbGlk
YXRlUm9vdFZpZXcoY29uc3QgSW50UmVjdCYpIGZpbmFsIHsgfQogICAgIHZvaWQgaW52YWxpZGF0
ZUNvbnRlbnRzQW5kUm9vdFZpZXcoY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlIHsgfQotICAgIHZv
aWQgaW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBJbnRSZWN0Jikgb3ZlcnJp
ZGUgeyB9Ci0gICAgdm9pZCBzY3JvbGwoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJlY3QmLCBj
b25zdCBJbnRSZWN0Jikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBpbnZhbGlkYXRlQ29udGVudHNG
b3JTbG93U2Nyb2xsKGNvbnN0IEludFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNjcm9sbChj
b25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmKSBmaW5hbCB7IH0K
ICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgdm9pZCBkZWxlZ2F0ZWRTY3JvbGxS
ZXF1ZXN0ZWQoY29uc3QgSW50UG9pbnQmKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGRlbGVnYXRl
ZFNjcm9sbFJlcXVlc3RlZChjb25zdCBJbnRQb2ludCYpIGZpbmFsIHsgfQogI2VuZGlmCiAjaWYg
RU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAmJiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FX1RJTUVSKQotICAgIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSBvdmVycmlkZSB7IH0K
KyAgICB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgZmluYWwgeyB9CiAjZW5kaWYKIAotICAgIElu
dFBvaW50IHNjcmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHApIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHA7IH0KLSAgICBJbnRSZWN0IHJvb3RWaWV3VG9TY3JlZW4oY29uc3QgSW50UmVj
dCYgcikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gcjsgfQorICAgIEludFBvaW50IHNjcmVlblRv
Um9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHApIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHA7IH0KKyAg
ICBJbnRSZWN0IHJvb3RWaWV3VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcikgY29uc3QgZmluYWwg
eyByZXR1cm4gcjsgfQogI2lmIFBMQVRGT1JNKElPUykKLSAgICBJbnRQb2ludCBhY2Nlc3NpYmls
aXR5U2NyZWVuVG9Sb290Vmlldyhjb25zdCBJbnRQb2ludCYgcCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gcDsgfTsKLSAgICBJbnRSZWN0IHJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNv
bnN0IEludFJlY3QmIHIpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHI7IH07CisgICAgSW50UG9p
bnQgYWNjZXNzaWJpbGl0eVNjcmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHApIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIHA7IH07CisgICAgSW50UmVjdCByb290Vmlld1RvQWNjZXNzaWJpbGl0
eVNjcmVlbihjb25zdCBJbnRSZWN0JiByKSBjb25zdCBmaW5hbCB7IHJldHVybiByOyB9OwogI2Vu
ZGlmCi0gICAgUGxhdGZvcm1QYWdlQ2xpZW50IHBsYXRmb3JtUGFnZUNsaWVudCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIDA7IH0KLSAgICB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoRnJhbWUq
LCBjb25zdCBJbnRTaXplJikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgUGxhdGZvcm1QYWdlQ2xp
ZW50IHBsYXRmb3JtUGFnZUNsaWVudCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICB2
b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoRnJhbWUqLCBjb25zdCBJbnRTaXplJikgY29uc3QgZmlu
YWwgeyB9CiAKLSAgICB2b2lkIHNjcm9sbGJhcnNNb2RlRGlkQ2hhbmdlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyB9Ci0gICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVz
dWx0JiwgdW5zaWduZWQpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgc2Nyb2xsYmFyc01vZGVEaWRD
aGFuZ2UoKSBjb25zdCBmaW5hbCB7IH0KKyAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50
KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCkgZmluYWwgeyB9CiAKLSAgICB2b2lkIHNl
dFRvb2xUaXAoY29uc3QgU3RyaW5nJiwgVGV4dERpcmVjdGlvbikgb3ZlcnJpZGUgeyB9CisgICAg
dm9pZCBzZXRUb29sVGlwKGNvbnN0IFN0cmluZyYsIFRleHREaXJlY3Rpb24pIGZpbmFsIHsgfQog
Ci0gICAgdm9pZCBwcmludChGcmFtZSopIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgcHJpbnQoRnJh
bWUqKSBmaW5hbCB7IH0KIAotICAgIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiwg
Y29uc3QgU3RyaW5nJiwgRGF0YWJhc2VEZXRhaWxzKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGV4
Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSosIGNvbnN0IFN0cmluZyYsIERhdGFiYXNlRGV0YWls
cykgZmluYWwgeyB9CiAKLSAgICB2b2lkIHJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCkg
b3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCByZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3Rh
KFNlY3VyaXR5T3JpZ2luKiwgaW50NjRfdCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCByZWFjaGVk
TWF4QXBwQ2FjaGVTaXplKGludDY0X3QpIGZpbmFsIHsgfQorICAgIHZvaWQgcmVhY2hlZEFwcGxp
Y2F0aW9uQ2FjaGVPcmlnaW5RdW90YShTZWN1cml0eU9yaWdpbiosIGludDY0X3QpIGZpbmFsIHsg
fQogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCi0gICAgc3RkOjp1bmlxdWVfcHRyPENv
bG9yQ2hvb3Nlcj4gY3JlYXRlQ29sb3JDaG9vc2VyKENvbG9yQ2hvb3NlckNsaWVudCosIGNvbnN0
IENvbG9yJikgb3ZlcnJpZGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbG9yQ2hvb3Nlcj4gY3Jl
YXRlQ29sb3JDaG9vc2VyKENvbG9yQ2hvb3NlckNsaWVudCosIGNvbnN0IENvbG9yJikgZmluYWw7
CiAjZW5kaWYKIAotICAgIHZvaWQgcnVuT3BlblBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0cjxGaWxl
Q2hvb3Nlcj4pIG92ZXJyaWRlOwotICAgIHZvaWQgbG9hZEljb25Gb3JGaWxlcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYsIEZpbGVJY29uTG9hZGVyJikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBydW5P
cGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPikgZmluYWw7CisgICAgdm9p
ZCBsb2FkSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgRmlsZUljb25Mb2FkZXIm
KSBmaW5hbCB7IH0KIAotICAgIHZvaWQgZWxlbWVudERpZEZvY3VzKGNvbnN0IE5vZGUqKSBvdmVy
cmlkZSB7IH0KLSAgICB2b2lkIGVsZW1lbnREaWRCbHVyKGNvbnN0IE5vZGUqKSBvdmVycmlkZSB7
IH0KKyAgICB2b2lkIGVsZW1lbnREaWRGb2N1cyhjb25zdCBOb2RlKikgZmluYWwgeyB9CisgICAg
dm9pZCBlbGVtZW50RGlkQmx1cihjb25zdCBOb2RlKikgZmluYWwgeyB9CiAKICNpZiAhUExBVEZP
Uk0oSU9TKQotICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpIG92ZXJyaWRlIHsgfQot
ICAgIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpIG92ZXJyaWRlIHsg
fQorICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpIGZpbmFsIHsgfQorICAgIHZvaWQg
c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpIGZpbmFsIHsgfQogI2VuZGlmCiAK
LSAgICB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJp
ZGUgeyB9CisgICAgdm9pZCBzY3JvbGxSZWN0SW50b1ZpZXcoY29uc3QgSW50UmVjdCYpIGNvbnN0
IGZpbmFsIHsgfQogCi0gICAgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSosIEdy
YXBoaWNzTGF5ZXIqKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3Jh
cGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZSB7IH0KLSAgICB2b2lk
IHNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKSBvdmVycmlkZSB7IH0KLSAg
ICB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCkgb3ZlcnJpZGUgeyB9CisgICAg
dm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKSBmaW5h
bCB7IH0KKyAgICB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSosIEdy
YXBoaWNzTGF5ZXIqKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdpbmdT
eW5jaHJvbml6YXRpb24oKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdM
YXllckZsdXNoKCkgZmluYWwgeyB9CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgdm9pZCBzZXRM
YXN0U2V0Q3Vyc29yVG9DdXJyZW50Q3Vyc29yKCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBBWFN0
YXJ0RnJhbWVMb2FkKCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBBWEZpbmlzaEZyYW1lTG9hZCgp
IG92ZXJyaWRlIHsgfQorICAgIHZvaWQgc2V0TGFzdFNldEN1cnNvclRvQ3VycmVudEN1cnNvcigp
IGZpbmFsIHsgfQorICAgIHZvaWQgQVhTdGFydEZyYW1lTG9hZCgpIGZpbmFsIHsgfQorICAgIHZv
aWQgQVhGaW5pc2hGcmFtZUxvYWQoKSBmaW5hbCB7IH0KICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
SU9TKQogI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIHZvaWQgZGlkUHJldmVudERl
ZmF1bHRGb3JFdmVudCgpIG92ZXJyaWRlIHsgfQotI2VuZGlmCi0gICAgdm9pZCBkaWRSZWNlaXZl
TW9iaWxlRG9jVHlwZShib29sKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHNldE5lZWRzU2Nyb2xs
Tm90aWZpY2F0aW9ucyhGcmFtZSosIGJvb2wpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgb2JzZXJ2
ZWRDb250ZW50Q2hhbmdlKEZyYW1lKikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBjbGVhckNvbnRl
bnRDaGFuZ2VPYnNlcnZlcnMoRnJhbWUqKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIG5vdGlmeVJl
dmVhbGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZShGcmFtZSopIG92ZXJyaWRlIHsgfQotICAg
IHZvaWQgZGlkTGF5b3V0KExheW91dFR5cGUpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZGlkU3Rh
cnRPdmVyZmxvd1Njcm9sbCgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZGlkRW5kT3ZlcmZsb3dT
Y3JvbGwoKSBvdmVycmlkZSB7IH0KLQotICAgIHZvaWQgc3VwcHJlc3NGb3JtTm90aWZpY2F0aW9u
cygpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgcmVzdG9yZUZvcm1Ob3RpZmljYXRpb25zKCkgb3Zl
cnJpZGUgeyB9Ci0KLSAgICB2b2lkIGFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIoTm9kZSosIFBs
YXRmb3JtTGF5ZXIqLCBQbGF0Zm9ybUxheWVyKiwgY29uc3QgSW50U2l6ZSYsIGJvb2wsIGJvb2wp
IG92ZXJyaWRlIHsgfQotICAgIHZvaWQgcmVtb3ZlU2Nyb2xsaW5nTGF5ZXIoTm9kZSosIFBsYXRm
b3JtTGF5ZXIqLCBQbGF0Zm9ybUxheWVyKikgb3ZlcnJpZGUgeyB9Ci0KLSAgICB2b2lkIHdlYkFw
cE9yaWVudGF0aW9uc1VwZGF0ZWQoKSBvdmVycmlkZSB7IH07Ci0gICAgdm9pZCBzaG93UGxheWJh
Y2tUYXJnZXRQaWNrZXIoYm9vbCkgb3ZlcnJpZGUgeyB9OwotI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykKLQotI2lmIEVOQUJMRShPUklFTlRBVElPTl9FVkVOVFMpCi0gICAgaW50IGRldmljZU9yaWVu
dGF0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQotI2VuZGlmCi0KLSNpZiBQTEFU
Rk9STShJT1MpCi0gICAgYm9vbCBpc1N0b3BwaW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KLSNlbmRpZgotCi0gICAgdm9pZCB3aGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKGJvb2wpIG92
ZXJyaWRlIHsgfQotICAgIAotICAgIGJvb2wgaXNFbXB0eUNocm9tZUNsaWVudCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZvaWQgZGlkQXNzb2NpYXRlRm9ybUNvbnRy
b2xzKGNvbnN0IFZlY3RvcjxSZWZQdHI8RWxlbWVudD4+Jikgb3ZlcnJpZGUgeyB9Ci0gICAgYm9v
bCBzaG91bGROb3RpZnlPbkZvcm1DaGFuZ2VzKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
LX07Ci0KLS8vIEZJWE1FIChidWcgMTE2MjMzKTogR2V0IHJpZCBvZiBFbXB0eUZyYW1lTG9hZGVy
Q2xpZW50LiBJdCBpcyBhIHRyYXZlc3R5LgotCi1jbGFzcyBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50
IDogcHVibGljIEZyYW1lTG9hZGVyQ2xpZW50IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShF
bXB0eUZyYW1lTG9hZGVyQ2xpZW50KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
Ci0gICAgRW1wdHlGcmFtZUxvYWRlckNsaWVudCgpIHsgfQotICAgIHZpcnR1YWwgfkVtcHR5RnJh
bWVMb2FkZXJDbGllbnQoKSB7ICB9Ci0gICAgdm9pZCBmcmFtZUxvYWRlckRlc3Ryb3llZCgpIG92
ZXJyaWRlIHsgfQotCi0gICAgYm9vbCBoYXNXZWJWaWV3KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfSAvLyBtYWlubHkgZm9yIGFzc2VydGlvbnMKLQotICAgIHZvaWQgbWFrZVJlcHJl
c2VudGF0aW9uKERvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGUgeyB9Ci0jaWYgUExBVEZPUk0oSU9T
KQotICAgIGJvb2wgZm9yY2VMYXlvdXRPblJlc3RvcmVGcm9tUGFnZUNhY2hlKCkgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotICAgIHZvaWQgZm9yY2VMYXlvdXRGb3JOb25IVE1M
KCkgb3ZlcnJpZGUgeyB9Ci0KLSAgICB2b2lkIHNldENvcGllc09uU2Nyb2xsKCkgb3ZlcnJpZGUg
eyB9Ci0KLSAgICB2b2lkIGRldGFjaGVkRnJvbVBhcmVudDIoKSBvdmVycmlkZSB7IH0KLSAgICB2
b2lkIGRldGFjaGVkRnJvbVBhcmVudDMoKSBvdmVycmlkZSB7IH0KLQotICAgIHZvaWQgY29udmVy
dE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKERvY3VtZW50TG9hZGVyKiwgU2Vzc2lvbklELCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGUg
eyB9Ci0KLSAgICB2b2lkIGFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KHVuc2lnbmVk
IGxvbmcsIERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jikgb3ZlcnJpZGUg
eyB9Ci0gICAgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShEb2N1bWVudExvYWRlcios
IHVuc2lnbmVkIGxvbmcpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBkaXNw
YXRjaFdpbGxTZW5kUmVxdWVzdChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIFJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBvdmVycmlkZSB7IH0KLSAgICB2
b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9h
ZGVyKiwgdW5zaWduZWQgbG9uZywgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSBvdmVy
cmlkZSB7IH0KLSNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQotICAgIGJv
b2wgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShEb2N1bWVudExvYWRlcios
IHVuc2lnbmVkIGxvbmcsIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYpIG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiBjb25uZWN0aW9uUHJvcGVydGllcyhEb2N1bWVudExvYWRlciosIHVuc2ln
bmVkIGxvbmcpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KLSNlbmRpZgotCi0gICAgdm9p
ZCBkaXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxv
bmcsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGRpc3Bh
dGNoRGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25n
LCBpbnQpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2FkaW5nKERv
Y3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZykgb3ZlcnJpZGUgeyB9Ci0jaWYgRU5BQkxFKERB
VEFfREVURUNUSU9OKQotICAgIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hEYXRhRGV0ZWN0aW9uKE5T
QXJyYXkgKikgb3ZlcnJpZGUgeyB9Ci0jZW5kaWYKLSAgICB2b2lkIGRpc3BhdGNoRGlkRmFpbExv
YWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBSZXNvdXJjZUVycm9y
Jikgb3ZlcnJpZGUgeyB9Ci0gICAgYm9vbCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1v
cnlDYWNoZShEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmLCBpbnQpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2
b2lkIGRpc3BhdGNoRGlkRGlzcGF0Y2hPbmxvYWRFdmVudHMoKSBvdmVycmlkZSB7IH0KLSAgICB2
b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkKCkg
b3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBkaXNwYXRjaERpZENhbmNlbENsaWVudFJlZGlyZWN0KCkg
b3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBkaXNwYXRjaFdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3Qo
Y29uc3QgVVJMJiwgZG91YmxlLCBkb3VibGUpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZGlzcGF0
Y2hEaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2UoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGRp
c3BhdGNoRGlkUHVzaFN0YXRlV2l0aGluUGFnZSgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZGlz
cGF0Y2hEaWRSZXBsYWNlU3RhdGVXaXRoaW5QYWdlKCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBk
aXNwYXRjaERpZFBvcFN0YXRlV2l0aGluUGFnZSgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZGlz
cGF0Y2hXaWxsQ2xvc2UoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2
ZUljb24oKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25h
bExvYWQoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNv
bnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGRpc3BhdGNo
RGlkQ29tbWl0TG9hZChzdGQ6Om9wdGlvbmFsPEhhc0luc2VjdXJlQ29udGVudD4pIG92ZXJyaWRl
IHsgfQotICAgIHZvaWQgZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNvbnN0IFJlc291
cmNlRXJyb3ImKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGRpc3BhdGNoRGlkRmFpbExvYWQoY29u
c3QgUmVzb3VyY2VFcnJvciYpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZGlzcGF0Y2hEaWRGaW5p
c2hEb2N1bWVudExvYWQoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGRpc3BhdGNoRGlkRmluaXNo
TG9hZCgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZGlzcGF0Y2hEaWRSZWFjaExheW91dE1pbGVz
dG9uZShMYXlvdXRNaWxlc3RvbmVzKSBvdmVycmlkZSB7IH0KLQotICAgIEZyYW1lKiBkaXNwYXRj
aENyZWF0ZVBhZ2UoY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYpIG92ZXJyaWRlIHsgcmV0dXJuIG51
bGxwdHI7IH0KLSAgICB2b2lkIGRpc3BhdGNoU2hvdygpIG92ZXJyaWRlIHsgfQotCi0gICAgdm9p
ZCBkaXNwYXRjaERlY2lkZVBvbGljeUZvclJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBGcmFtZVBvbGljeUZ1bmN0aW9uKSBvdmVycmlkZSB7
IH0KLSAgICB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKGNvbnN0
IE5hdmlnYXRpb25BY3Rpb24mLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZv
cm1TdGF0ZT4sIGNvbnN0IFN0cmluZyYsIEZyYW1lUG9saWN5RnVuY3Rpb24pIG92ZXJyaWRlOwot
ICAgIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKGNvbnN0IE5h
dmlnYXRpb25BY3Rpb24mLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1T
dGF0ZT4sIEZyYW1lUG9saWN5RnVuY3Rpb24pIG92ZXJyaWRlOwotICAgIHZvaWQgY2FuY2VsUG9s
aWN5Q2hlY2soKSBvdmVycmlkZSB7IH0KLQotICAgIHZvaWQgZGlzcGF0Y2hVbmFibGVUb0ltcGxl
bWVudFBvbGljeShjb25zdCBSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGUgeyB9Ci0KLSAgICB2b2lk
IGRpc3BhdGNoV2lsbFNlbmRTdWJtaXRFdmVudChQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pIG92ZXJy
aWRlOwotICAgIHZvaWQgZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShQYXNzUmVmUHRyPEZvcm1TdGF0
ZT4sIEZyYW1lUG9saWN5RnVuY3Rpb24pIG92ZXJyaWRlOwotCi0gICAgdm9pZCByZXZlcnRUb1By
b3Zpc2lvbmFsU3RhdGUoRG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHNl
dE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYp
IG92ZXJyaWRlIHsgfQotCi0gICAgdm9pZCBzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KGJvb2wp
IG92ZXJyaWRlIHsgfQotCi0gICAgdm9pZCBzdGFydERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkTmFtZSA9IFN0cmluZygpKSBvdmVycmlkZSB7
IFVOVVNFRF9QQVJBTShzdWdnZXN0ZWROYW1lKTsgfQotCi0gICAgdm9pZCB3aWxsQ2hhbmdlVGl0
bGUoRG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGRpZENoYW5nZVRpdGxl
KERvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGUgeyB9Ci0KLSAgICB2b2lkIHdpbGxSZXBsYWNlTXVs
dGlwYXJ0Q29udGVudCgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZGlkUmVwbGFjZU11bHRpcGFy
dENvbnRlbnQoKSBvdmVycmlkZSB7IH0KLQotICAgIHZvaWQgY29tbWl0dGVkTG9hZChEb2N1bWVu
dExvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZmluaXNo
ZWRMb2FkaW5nKERvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGUgeyB9Ci0KLSAgICBSZXNvdXJjZUVy
cm9yIGNhbmNlbGxlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIG92ZXJyaWRlIHsgcmV0
dXJuIFJlc291cmNlRXJyb3IoUmVzb3VyY2VFcnJvcjo6VHlwZTo6Q2FuY2VsbGF0aW9uKTsgfQot
ICAgIFJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIG92
ZXJyaWRlIHsgcmV0dXJuIHsgfTsgfQotICAgIFJlc291cmNlRXJyb3IgYmxvY2tlZEJ5Q29udGVu
dEJsb2NrZXJFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBvdmVycmlkZSB7IHJldHVybiB7
IH07IH0KLSAgICBSZXNvdXJjZUVycm9yIGNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmKSBvdmVycmlkZSB7IHJldHVybiB7IH07IH0KLSAgICBSZXNvdXJjZUVycm9yIGlu
dGVycnVwdGVkRm9yUG9saWN5Q2hhbmdlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jikgb3Zl
cnJpZGUgeyByZXR1cm4geyB9OyB9Ci0jaWYgRU5BQkxFKENPTlRFTlRfRklMVEVSSU5HKQotICAg
IFJlc291cmNlRXJyb3IgYmxvY2tlZEJ5Q29udGVudEZpbHRlckVycm9yKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYpIG92ZXJyaWRlIHsgcmV0dXJuIHsgfTsgfQotI2VuZGlmCi0KLSAgICBSZXNvdXJj
ZUVycm9yIGNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBv
dmVycmlkZSB7IHJldHVybiB7IH07IH0KLSAgICBSZXNvdXJjZUVycm9yIGZpbGVEb2VzTm90RXhp
c3RFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGUgeyByZXR1cm4geyB9OyB9
Ci0gICAgUmVzb3VyY2VFcnJvciBwbHVnaW5XaWxsSGFuZGxlTG9hZEVycm9yKGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKSBvdmVycmlkZSB7IHJldHVybiB7IH07IH0KLQotICAgIGJvb2wgc2hvdWxk
RmFsbEJhY2soY29uc3QgUmVzb3VyY2VFcnJvciYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
Ci0KLSAgICBib29sIGNhbkhhbmRsZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGNhblNob3dNSU1FVHlwZShj
b25zdCBTdHJpbmcmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wg
Y2FuU2hvd01JTUVUeXBlQXNIVE1MKGNvbnN0IFN0cmluZyYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCByZXByZXNlbnRhdGlvbkV4aXN0c0ZvclVSTFNjaGVtZShj
b25zdCBTdHJpbmcmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIFN0cmlu
ZyBnZW5lcmF0ZWRNSU1FVHlwZUZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBlbXB0eVN0cmluZygpOyB9Ci0KLSAgICB2b2lkIGZyYW1lTG9hZENvbXBs
ZXRlZCgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgcmVzdG9yZVZpZXdTdGF0ZSgpIG92ZXJyaWRl
IHsgfQotICAgIHZvaWQgcHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpIG92ZXJyaWRlIHsgfQotICAg
IHZvaWQgZGlkRmluaXNoTG9hZCgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgcHJlcGFyZUZvckRh
dGFTb3VyY2VSZXBsYWNlbWVudCgpIG92ZXJyaWRlIHsgfQotCi0gICAgUmVmPERvY3VtZW50TG9h
ZGVyPiBjcmVhdGVEb2N1bWVudExvYWRlcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBT
dWJzdGl0dXRlRGF0YSYpIG92ZXJyaWRlOwotICAgIHZvaWQgdXBkYXRlQ2FjaGVkRG9jdW1lbnRM
b2FkZXIoRG9jdW1lbnRMb2FkZXImKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHNldFRpdGxlKGNv
bnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mLCBjb25zdCBVUkwmKSBvdmVycmlkZSB7IH0KLQotICAg
IFN0cmluZyB1c2VyQWdlbnQoY29uc3QgVVJMJikgb3ZlcnJpZGUgeyByZXR1cm4gZW1wdHlTdHJp
bmcoKTsgfQotCi0gICAgdm9pZCBzYXZlUGxhdGZvcm1EYXRhVG9DYWNoZWRGcmFtZShDYWNoZWRG
cmFtZSopIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgdHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNh
Y2hlZEZyYW1lKENhY2hlZEZyYW1lKikgb3ZlcnJpZGUgeyB9Ci0jaWYgUExBVEZPUk0oSU9TKQot
ICAgIHZvaWQgZGlkUmVzdG9yZUZyYW1lSGllcmFyY2h5Rm9yQ2FjaGVkRnJhbWUoKSBvdmVycmlk
ZSB7IH0KLSNlbmRpZgotICAgIHZvaWQgdHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgp
IG92ZXJyaWRlIHsgfQotCi0gICAgdm9pZCBkaWRTYXZlVG9QYWdlQ2FjaGUoKSBvdmVycmlkZSB7
IH0KLSAgICB2b2lkIGRpZFJlc3RvcmVGcm9tUGFnZUNhY2hlKCkgb3ZlcnJpZGUgeyB9Ci0KLSAg
ICB2b2lkIGRpc3BhdGNoRGlkQmVjb21lRnJhbWVzZXQoYm9vbCkgb3ZlcnJpZGUgeyB9Ci0KLSAg
ICB2b2lkIHVwZGF0ZUdsb2JhbEhpc3RvcnkoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHVwZGF0
ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKCkgb3ZlcnJpZGUgeyB9Ci0gICAgYm9vbCBzaG91
bGRHb1RvSGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0qKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZvaWQgdXBkYXRlR2xvYmFsSGlzdG9yeUl0ZW1Gb3JQYWdlKCkgb3ZlcnJp
ZGUgeyB9Ci0gICAgdm9pZCBzYXZlVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtJikgb3ZlcnJp
ZGUgeyB9Ci0gICAgYm9vbCBjYW5DYWNoZVBhZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZvaWQgZGlkRGlzcGxheUluc2VjdXJlQ29udGVudCgpIG92ZXJyaWRlIHsg
fQotICAgIHZvaWQgZGlkUnVuSW5zZWN1cmVDb250ZW50KFNlY3VyaXR5T3JpZ2luKiwgY29uc3Qg
VVJMJikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBkaWREZXRlY3RYU1MoY29uc3QgVVJMJiwgYm9v
bCkgb3ZlcnJpZGUgeyB9Ci0gICAgUmVmUHRyPEZyYW1lPiBjcmVhdGVGcmFtZShjb25zdCBVUkwm
LCBjb25zdCBTdHJpbmcmLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBjb25zdCBTdHJpbmcmLCBi
b29sLCBpbnQsIGludCkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPFdpZGdldD4gY3JlYXRlUGx1Z2lu
KGNvbnN0IEludFNpemUmLCBIVE1MUGx1Z0luRWxlbWVudCosIGNvbnN0IFVSTCYsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmLCBib29s
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlY3JlYXRlUGx1Z2luKFdpZGdldCopIG92ZXJyaWRlOwot
ICAgIFBhc3NSZWZQdHI8V2lkZ2V0PiBjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNp
emUmLCBIVE1MQXBwbGV0RWxlbWVudCosIGNvbnN0IFVSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKSBvdmVycmlkZTsKLQotICAgIE9iamVjdENvbnRlbnRU
eXBlIG9iamVjdENvbnRlbnRUeXBlKGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRl
IHsgcmV0dXJuIE9iamVjdENvbnRlbnRUeXBlOjpOb25lOyB9Ci0gICAgU3RyaW5nIG92ZXJyaWRl
TWVkaWFUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KLQotICAgIHZv
aWQgcmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0Kikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBk
aXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChET01XcmFwcGVyV29ybGQmKSBvdmVy
cmlkZSB7IH0KLQotICAgIHZvaWQgcmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wpIG92
ZXJyaWRlIHsgfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgUmVtb3RlQVhPYmplY3RSZWYg
YWNjZXNzaWJpbGl0eVJlbW90ZU9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0K
LSAgICBOU0NhY2hlZFVSTFJlc3BvbnNlKiB3aWxsQ2FjaGVSZXNwb25zZShEb2N1bWVudExvYWRl
ciosIHVuc2lnbmVkIGxvbmcsIE5TQ2FjaGVkVVJMUmVzcG9uc2UqIHJlc3BvbnNlKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiByZXNwb25zZTsgfQorICAgIHZvaWQgZGlkUHJldmVudERlZmF1bHRG
b3JFdmVudCgpIGZpbmFsIHsgfQogI2VuZGlmCi0jaWYgUExBVEZPUk0oV0lOKSAmJiBVU0UoQ0ZV
UkxDT05ORUNUSU9OKQotICAgIC8vIEZJWE1FOiBXaW5kb3dzIHNob3VsZCB1c2Ugd2lsbENhY2hl
UmVzcG9uc2UgLSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3MjU3
Pi4KLSAgICBib29sIHNob3VsZENhY2hlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25l
ZCBsb25nLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgdW5zaWduZWQgY2hhciosIHVu
c2lnbmVkIGxvbmcgbG9uZykgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAg
ICBQYXNzUmVmUHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IGNyZWF0ZU5ldHdvcmtpbmdDb250
ZXh0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRSZWNlaXZlTW9iaWxlRG9jVHlwZShib29sKSBm
aW5hbCB7IH0KKyAgICB2b2lkIHNldE5lZWRzU2Nyb2xsTm90aWZpY2F0aW9ucyhGcmFtZSosIGJv
b2wpIGZpbmFsIHsgfQorICAgIHZvaWQgb2JzZXJ2ZWRDb250ZW50Q2hhbmdlKEZyYW1lKikgZmlu
YWwgeyB9CisgICAgdm9pZCBjbGVhckNvbnRlbnRDaGFuZ2VPYnNlcnZlcnMoRnJhbWUqKSBmaW5h
bCB7IH0KKyAgICB2b2lkIG5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZShG
cmFtZSopIGZpbmFsIHsgfQorICAgIHZvaWQgZGlkTGF5b3V0KExheW91dFR5cGUpIGZpbmFsIHsg
fQorICAgIHZvaWQgZGlkU3RhcnRPdmVyZmxvd1Njcm9sbCgpIGZpbmFsIHsgfQorICAgIHZvaWQg
ZGlkRW5kT3ZlcmZsb3dTY3JvbGwoKSBmaW5hbCB7IH0KIAotI2lmIEVOQUJMRShSRVFVRVNUX0FV
VE9DT01QTEVURSkKLSAgICB2b2lkIGRpZFJlcXVlc3RBdXRvY29tcGxldGUoUGFzc1JlZlB0cjxG
b3JtU3RhdGU+KSBvdmVycmlkZSB7IH0KLSNlbmRpZgorICAgIHZvaWQgc3VwcHJlc3NGb3JtTm90
aWZpY2F0aW9ucygpIGZpbmFsIHsgfQorICAgIHZvaWQgcmVzdG9yZUZvcm1Ob3RpZmljYXRpb25z
KCkgZmluYWwgeyB9CiAKLSAgICBib29sIGlzRW1wdHlGcmFtZUxvYWRlckNsaWVudCgpIG92ZXJy
aWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIGFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIo
Tm9kZSosIFBsYXRmb3JtTGF5ZXIqLCBQbGF0Zm9ybUxheWVyKiwgY29uc3QgSW50U2l6ZSYsIGJv
b2wsIGJvb2wpIGZpbmFsIHsgfQorICAgIHZvaWQgcmVtb3ZlU2Nyb2xsaW5nTGF5ZXIoTm9kZSos
IFBsYXRmb3JtTGF5ZXIqLCBQbGF0Zm9ybUxheWVyKikgZmluYWwgeyB9CiAKLSAgICB2b2lkIHBy
ZWZldGNoRE5TKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsgfQotfTsKKyAgICB2b2lkIHdlYkFw
cE9yaWVudGF0aW9uc1VwZGF0ZWQoKSBmaW5hbCB7IH07CisgICAgdm9pZCBzaG93UGxheWJhY2tU
YXJnZXRQaWNrZXIoYm9vbCkgZmluYWwgeyB9OworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKIAot
Y2xhc3MgRW1wdHlUZXh0Q2hlY2tlckNsaWVudCA6IHB1YmxpYyBUZXh0Q2hlY2tlckNsaWVudCB7
Ci1wdWJsaWM6Ci0gICAgYm9vbCBzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlv
bihUZXh0Q2hlY2tpbmdUeXBlKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAg
dm9pZCBpZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsg
fQotICAgIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsgfQotICAgIHZv
aWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKFN0cmluZ1ZpZXcsIGludCosIGludCopIG92ZXJyaWRl
IHsgfQotICAgIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29y
ZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQotICAgIHZvaWQg
Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldywgVmVjdG9yPEdyYW1tYXJEZXRhaWw+Jiwg
aW50KiwgaW50Kikgb3ZlcnJpZGUgeyB9Ci0KLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5H
KQotICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0
cmluZ1ZpZXcsIFRleHRDaGVja2luZ1R5cGVNYXNrLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikg
b3ZlcnJpZGUgeyByZXR1cm4gVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4oKTsgfQorI2lmIEVO
QUJMRShPUklFTlRBVElPTl9FVkVOVFMpCisgICAgaW50IGRldmljZU9yaWVudGF0aW9uKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAKLSAgICB2b2lkIGdldEd1ZXNzZXNGb3JX
b3JkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
LCBWZWN0b3I8U3RyaW5nPiYpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgcmVxdWVzdENoZWNraW5n
T2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0PiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpIG92ZXJyaWRlOwotfTsKLQotY2xhc3MgRW1wdHlFZGl0b3JDbGllbnQgOiBwdWJs
aWMgRWRpdG9yQ2xpZW50IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFbXB0eUVkaXRvckNs
aWVudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEVtcHR5RWRpdG9y
Q2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB+RW1wdHlFZGl0b3JDbGllbnQoKSB7IH0KLQotICAg
IGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQotICAgIGJvb2wgc21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICBib29sIGlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpIG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCgpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCB0b2dnbGVD
b250aW51b3VzU3BlbGxDaGVja2luZygpIG92ZXJyaWRlIHsgfQotICAgIGJvb2wgaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIHRv
Z2dsZUdyYW1tYXJDaGVja2luZygpIG92ZXJyaWRlIHsgfQotICAgIGludCBzcGVsbENoZWNrZXJE
b2N1bWVudFRhZygpIG92ZXJyaWRlIHsgcmV0dXJuIC0xOyB9Ci0KLQotICAgIGJvb2wgc2hvdWxk
QmVnaW5FZGl0aW5nKFJhbmdlKikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29s
IHNob3VsZEVuZEVkaXRpbmcoUmFuZ2UqKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAg
IGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShOb2RlKiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24p
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNv
bnN0IFN0cmluZyYsIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQotICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShSYW5nZSosIFJh
bmdlKiwgRUFmZmluaXR5LCBib29sKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotCi0gICAg
Ym9vbCBzaG91bGRBcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyosIFJhbmdlKikgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIGRpZEFwcGx5U3R5bGUoKSBvdmVycmlkZSB7IH0K
LSAgICBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFJhbmdlKiwgUmFuZ2UqKSBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgdm9pZCBkaWRCZWdpbkVkaXRpbmcoKSBvdmVy
cmlkZSB7IH0KLSAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpIG92ZXJyaWRlIHsg
fQotICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihGcmFtZSopIG92ZXJyaWRlIHsg
fQotICAgIHZvaWQgZGlkQ2hhbmdlU2VsZWN0aW9uQW5kVXBkYXRlTGF5b3V0KCkgb3ZlcnJpZGUg
eyB9Ci0gICAgdm9pZCB1cGRhdGVFZGl0b3JTdGF0ZUFmdGVyTGF5b3V0SWZFZGl0YWJpbGl0eUNo
YW5nZWQoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGRpc2NhcmRlZENvbXBvc2l0aW9uKEZyYW1l
Kikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBjYW5jZWxlZENvbXBvc2l0aW9uKCkgb3ZlcnJpZGUg
eyB9Ci0gICAgdm9pZCBkaWRFbmRFZGl0aW5nKCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCB3aWxs
V3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUmFuZ2UqKSBvdmVycmlkZSB7IH0KLSAgICB2b2lk
IGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBn
ZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFJhbmdlKiwgVmVjdG9yPFN0cmluZz4mLCBW
ZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+Jikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCByZXF1
ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgb3ZlcnJp
ZGUgeyB9Ci0gICAgdm9pZCBoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZVdpdGhTb2Z0U3BhY2VzKFRl
eHRDaGVja2luZ1Jlc3VsdCkgb3ZlcnJpZGUgeyB9Ci0KLSAgICB2b2lkIHJlZ2lzdGVyVW5kb1N0
ZXAoUGFzc1JlZlB0cjxVbmRvU3RlcD4pIG92ZXJyaWRlOwotICAgIHZvaWQgcmVnaXN0ZXJSZWRv
U3RlcChQYXNzUmVmUHRyPFVuZG9TdGVwPikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclVuZG9S
ZWRvT3BlcmF0aW9ucygpIG92ZXJyaWRlIHsgfQotCi0gICAgYm9vbCBjYW5Db3B5Q3V0KEZyYW1l
KiwgYm9vbCBkZWZhdWx0VmFsdWUpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGRlZmF1bHRWYWx1
ZTsgfQotICAgIGJvb2wgY2FuUGFzdGUoRnJhbWUqLCBib29sIGRlZmF1bHRWYWx1ZSkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZGVmYXVsdFZhbHVlOyB9Ci0gICAgYm9vbCBjYW5VbmRvKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGNhblJlZG8oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgdm9pZCB1bmRvKCkgb3ZlcnJpZGUgeyB9
Ci0gICAgdm9pZCByZWRvKCkgb3ZlcnJpZGUgeyB9Ci0KLSAgICB2b2lkIGhhbmRsZUtleWJvYXJk
RXZlbnQoS2V5Ym9hcmRFdmVudCopIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgaGFuZGxlSW5wdXRN
ZXRob2RLZXlkb3duKEtleWJvYXJkRXZlbnQqKSBvdmVycmlkZSB7IH0KLQotICAgIHZvaWQgdGV4
dEZpZWxkRGlkQmVnaW5FZGl0aW5nKEVsZW1lbnQqKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHRl
eHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCopIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgdGV4
dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1lbnQqKSBvdmVycmlkZSB7IH0KLSAgICBib29sIGRv
VGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChFbGVtZW50KiwgS2V5Ym9hcmRFdmVudCopIG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCB0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZp
ZWxkKEVsZW1lbnQqKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRB
cmVhKEVsZW1lbnQqKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIG92ZXJmbG93U2Nyb2xsUG9zaXRp
b25DaGFuZ2VkKCkgb3ZlcnJpZGUgeyB9Ci0KICNpZiBQTEFURk9STShJT1MpCi0gICAgdm9pZCBz
dGFydERlbGF5aW5nQW5kQ29hbGVzY2luZ0NvbnRlbnRDaGFuZ2VOb3RpZmljYXRpb25zKCkgb3Zl
cnJpZGUgeyB9Ci0gICAgdm9pZCBzdG9wRGVsYXlpbmdBbmRDb2FsZXNjaW5nQ29udGVudENoYW5n
ZU5vdGlmaWNhdGlvbnMoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHdyaXRlRGF0YVRvUGFzdGVi
b2FyZChOU0RpY3Rpb25hcnkqKSBvdmVycmlkZSB7IH0KLSAgICBOU0FycmF5KiBzdXBwb3J0ZWRQ
YXN0ZWJvYXJkVHlwZXNGb3JDdXJyZW50U2VsZWN0aW9uKCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVs
bHB0cjsgfQotICAgIE5TQXJyYXkqIHJlYWREYXRhRnJvbVBhc3RlYm9hcmQoTlNTdHJpbmcqLCBp
bnQpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICBib29sIGhhc1JpY2hseUVkaXRh
YmxlU2VsZWN0aW9uKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBpbnQgZ2V0UGFz
dGVib2FyZEl0ZW1zQ291bnQoKSBvdmVycmlkZSB7IHJldHVybiAwOyB9Ci0gICAgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGRvY3VtZW50RnJhZ21lbnRGcm9tRGVsZWdhdGUoaW50KSBvdmVycmlk
ZSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgYm9vbCBwZXJmb3Jtc1R3b1N0ZXBQYXN0ZShEb2N1
bWVudEZyYWdtZW50Kikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBpbnQgcGFzdGVi
b2FyZENoYW5nZUNvdW50KCkgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICBOU1N0cmluZyAqdXNlclZpc2libGVTdHJpbmcoTlNVUkwgKikg
b3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHZvaWQgc2V0SW5zZXJ0aW9uUGFzdGVi
b2FyZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZSB7IH07Ci0gICAgTlNVUkwgKmNhbm9uaWNhbGl6
ZVVSTChOU1VSTCAqKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgTlNVUkwgKmNh
bm9uaWNhbGl6ZVVSTFN0cmluZyhOU1N0cmluZyAqKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRy
OyB9Ci0jZW5kaWYKLQotI2lmIFVTRShBUFBLSVQpCi0gICAgdm9pZCB1cHBlcmNhc2VXb3JkKCkg
b3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBsb3dlcmNhc2VXb3JkKCkgb3ZlcnJpZGUgeyB9Ci0gICAg
dm9pZCBjYXBpdGFsaXplV29yZCgpIG92ZXJyaWRlIHsgfQotI2VuZGlmCi0KLSNpZiBVU0UoQVVU
T01BVElDX1RFWFRfUkVQTEFDRU1FTlQpCi0gICAgdm9pZCBzaG93U3Vic3RpdHV0aW9uc1BhbmVs
KGJvb2wpIG92ZXJyaWRlIHsgfQotICAgIGJvb2wgc3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5n
KCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIHRvZ2dsZVNtYXJ0SW5zZXJ0
RGVsZXRlKCkgb3ZlcnJpZGUgeyB9Ci0gICAgYm9vbCBpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0
aW9uRW5hYmxlZCgpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCB0b2dnbGVB
dXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbigpIG92ZXJyaWRlIHsgfQotICAgIGJvb2wgaXNBdXRv
bWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdm9pZCB0b2dnbGVBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uKCkgb3ZlcnJpZGUgeyB9Ci0gICAg
Ym9vbCBpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCkgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2b2lkIHRvZ2dsZUF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb24oKSBv
dmVycmlkZSB7IH0KLSAgICBib29sIGlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZCgp
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCB0b2dnbGVBdXRvbWF0aWNUZXh0
UmVwbGFjZW1lbnQoKSBvdmVycmlkZSB7IH0KLSAgICBib29sIGlzQXV0b21hdGljU3BlbGxpbmdD
b3JyZWN0aW9uRW5hYmxlZCgpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCB0
b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb24oKSBvdmVycmlkZSB7IH0KLSNlbmRpZgot
Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgIGJvb2wgc2hvdWxkU2hvd1VuaWNvZGVNZW51KCkgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotICAgIFRleHRDaGVja2VyQ2xpZW50KiB0
ZXh0Q2hlY2tlcigpIG92ZXJyaWRlIHsgcmV0dXJuICZtX3RleHRDaGVja2VyQ2xpZW50OyB9Ci0K
LSAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcm
LCBjb25zdCBHcmFtbWFyRGV0YWlsJikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCB1cGRhdGVTcGVs
bGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsgfQotICAg
IHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCkgb3ZlcnJpZGUgeyB9Ci0gICAgYm9vbCBzcGVsbGlu
Z1VJSXNTaG93aW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZvaWQgd2ls
bFNldElucHV0TWV0aG9kU3RhdGUoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHNldElucHV0TWV0
aG9kU3RhdGUoYm9vbCkgb3ZlcnJpZGUgeyB9Ci0KLXByaXZhdGU6Ci0gICAgRW1wdHlUZXh0Q2hl
Y2tlckNsaWVudCBtX3RleHRDaGVja2VyQ2xpZW50OwotfTsKLQotI2lmIEVOQUJMRShDT05URVhU
X01FTlVTKQotY2xhc3MgRW1wdHlDb250ZXh0TWVudUNsaWVudCA6IHB1YmxpYyBDb250ZXh0TWVu
dUNsaWVudCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRW1wdHlDb250ZXh0TWVudUNsaWVu
dCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEVtcHR5Q29udGV4dE1l
bnVDbGllbnQoKSB7IH0KLSAgICB2aXJ0dWFsIH5FbXB0eUNvbnRleHRNZW51Q2xpZW50KCkgeyAg
fQotICAgIHZvaWQgY29udGV4dE1lbnVEZXN0cm95ZWQoKSBvdmVycmlkZSB7IH0KLQotICAgIHZv
aWQgZG93bmxvYWRVUkwoY29uc3QgVVJMJikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBzZWFyY2hX
aXRoR29vZ2xlKGNvbnN0IEZyYW1lKikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBsb29rVXBJbkRp
Y3Rpb25hcnkoRnJhbWUqKSBvdmVycmlkZSB7IH0KLSAgICBib29sIGlzU3BlYWtpbmcoKSBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQgc3BlYWsoY29uc3QgU3RyaW5nJikgb3Zl
cnJpZGUgeyB9Ci0gICAgdm9pZCBzdG9wU3BlYWtpbmcoKSBvdmVycmlkZSB7IH0KLQotI2lmIFBM
QVRGT1JNKENPQ09BKQotICAgIHZvaWQgc2VhcmNoV2l0aFNwb3RsaWdodCgpIG92ZXJyaWRlIHsg
fQorICAgIGJvb2wgaXNTdG9wcGluZygpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYK
IAotI2lmIFVTRShBQ0NFU1NJQklMSVRZX0NPTlRFWFRfTUVOVVMpCi0gICAgdm9pZCBzaG93Q29u
dGV4dE1lbnUoKSBvdmVycmlkZSB7IH0KLSNlbmRpZgotfTsKLSNlbmRpZiAvLyBFTkFCTEUoQ09O
VEVYVF9NRU5VUykKLQotI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCi1jbGFzcyBFbXB0eURyYWdD
bGllbnQgOiBwdWJsaWMgRHJhZ0NsaWVudCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRW1w
dHlEcmFnQ2xpZW50KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRW1w
dHlEcmFnQ2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB+RW1wdHlEcmFnQ2xpZW50KCkge30KLSAg
ICB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFj
dGlvbiwgY29uc3QgRHJhZ0RhdGEmKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHdpbGxQZXJmb3Jt
RHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uLCBjb25zdCBJbnRQb2ludCYsIERhdGFU
cmFuc2ZlciYpIG92ZXJyaWRlIHsgfQotICAgIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb25N
YXNrRm9yRHJhZyhjb25zdCBEcmFnRGF0YSYpIG92ZXJyaWRlIHsgcmV0dXJuIERyYWdEZXN0aW5h
dGlvbkFjdGlvbk5vbmU7IH0KLSAgICBEcmFnU291cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rpb25N
YXNrRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKSBvdmVycmlkZSB7IHJldHVybiBEcmFnU291cmNl
QWN0aW9uTm9uZTsgfQotICAgIHZvaWQgc3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3QgSW50
UG9pbnQmLCBjb25zdCBJbnRQb2ludCYsIERhdGFUcmFuc2ZlciYsIEZyYW1lJiwgYm9vbCkgb3Zl
cnJpZGUgeyB9Ci0gICAgdm9pZCBkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpIG92ZXJyaWRlIHsg
fQotfTsKLSNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQotCi1jbGFzcyBFbXB0eUluc3Bl
Y3RvckNsaWVudCA6IHB1YmxpYyBJbnNwZWN0b3JDbGllbnQgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEVtcHR5SW5zcGVjdG9yQ2xpZW50KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgRW1wdHlJbnNwZWN0b3JDbGllbnQoKSB7IH0KLSAgICB2aXJ0dWFsIH5FbXB0
eUluc3BlY3RvckNsaWVudCgpIHsgfQotCi0gICAgdm9pZCBpbnNwZWN0ZWRQYWdlRGVzdHJveWVk
KCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCB3aGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKGJvb2wp
IGZpbmFsIHsgfQogICAgIAotICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiBvcGVuTG9j
YWxGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKikgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0
cjsgfQotICAgIHZvaWQgYnJpbmdGcm9udGVuZFRvRnJvbnQoKSBvdmVycmlkZSB7IH0KLQotICAg
IHZvaWQgaGlnaGxpZ2h0KCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBoaWRlSGlnaGxpZ2h0KCkg
b3ZlcnJpZGUgeyB9Ci19OwotCi1jbGFzcyBFbXB0eURldmljZUNsaWVudCA6IHB1YmxpYyBEZXZp
Y2VDbGllbnQgewotcHVibGljOgotICAgIHZvaWQgc3RhcnRVcGRhdGluZygpIG92ZXJyaWRlIHsg
fQotICAgIHZvaWQgc3RvcFVwZGF0aW5nKCkgb3ZlcnJpZGUgeyB9Ci19OwotCi1jbGFzcyBFbXB0
eURldmljZU1vdGlvbkNsaWVudCA6IHB1YmxpYyBEZXZpY2VNb3Rpb25DbGllbnQgewotcHVibGlj
OgotICAgIHZvaWQgc2V0Q29udHJvbGxlcihEZXZpY2VNb3Rpb25Db250cm9sbGVyKikgb3ZlcnJp
ZGUgeyB9Ci0gICAgRGV2aWNlTW90aW9uRGF0YSogbGFzdE1vdGlvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2b2lkIGRldmljZU1vdGlvbkNvbnRyb2xsZXJEZXN0
cm95ZWQoKSBvdmVycmlkZSB7IH0KLX07Ci0KLWNsYXNzIEVtcHR5RGV2aWNlT3JpZW50YXRpb25D
bGllbnQgOiBwdWJsaWMgRGV2aWNlT3JpZW50YXRpb25DbGllbnQgewotcHVibGljOgotICAgIHZv
aWQgc2V0Q29udHJvbGxlcihEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIqKSBvdmVycmlkZSB7
IH0KLSAgICBEZXZpY2VPcmllbnRhdGlvbkRhdGEqIGxhc3RPcmllbnRhdGlvbigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2b2lkIGRldmljZU9yaWVudGF0aW9uQ29u
dHJvbGxlckRlc3Ryb3llZCgpIG92ZXJyaWRlIHsgfQotfTsKLQotY2xhc3MgRW1wdHlQcm9ncmVz
c1RyYWNrZXJDbGllbnQgOiBwdWJsaWMgUHJvZ3Jlc3NUcmFja2VyQ2xpZW50IHsKLSAgICB2b2lk
IHdpbGxDaGFuZ2VFc3RpbWF0ZWRQcm9ncmVzcygpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgZGlk
Q2hhbmdlRXN0aW1hdGVkUHJvZ3Jlc3MoKSBvdmVycmlkZSB7IH0KLQotICAgIHZvaWQgcHJvZ3Jl
c3NTdGFydGVkKEZyYW1lJikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBwcm9ncmVzc0VzdGltYXRl
Q2hhbmdlZChGcmFtZSYpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgcHJvZ3Jlc3NGaW5pc2hlZChG
cmFtZSYpIG92ZXJyaWRlIHsgfQotfTsKKyAgICBib29sIGlzRW1wdHlDaHJvbWVDbGllbnQoKSBj
b25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKLWNsYXNzIEVtcHR5RGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQgZmluYWwgOiBwdWJsaWMgRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQgewotICAgIHZv
aWQgbG9nRGlhZ25vc3RpY01lc3NhZ2UoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgU2hv
dWxkU2FtcGxlKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0
aFJlc3VsdChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBEaWFnbm9zdGljTG9nZ2luZ1Jl
c3VsdFR5cGUsIFNob3VsZFNhbXBsZSkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBsb2dEaWFnbm9z
dGljTWVzc2FnZVdpdGhWYWx1ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmLCBTaG91bGRTYW1wbGUpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgZGlkQXNzb2NpYXRl
Rm9ybUNvbnRyb2xzKGNvbnN0IFZlY3RvcjxSZWZQdHI8RWxlbWVudD4+JikgZmluYWwgeyB9Cisg
ICAgYm9vbCBzaG91bGROb3RpZnlPbkZvcm1DaGFuZ2VzKCkgZmluYWwgeyByZXR1cm4gZmFsc2U7
IH0KIH07CiAKIHZvaWQgZmlsbFdpdGhFbXB0eUNsaWVudHMoUGFnZUNvbmZpZ3VyYXRpb24mKTsK
K1VuaXF1ZVJlZjxFZGl0b3JDbGllbnQ+IGNyZWF0ZUVtcHR5RWRpdG9yQ2xpZW50KCk7CitEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudCYgZW1wdHlEaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpOwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RhdGFiYXNlUHJvdmlkZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRGF0YWJhc2VQcm92aWRlci5oCmluZGV4IDU0ZTQ2MTMyMjA4OGQx
YmMxNTRmZjYxYmVjMWFmNTdiOWM4MTY5NDEuLmE3NmM3OTFjODY4ODZhYTljNGNkYjI3N2UwNDA3
MmJlMDc0ZGU0ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGF0YWJhc2VQcm92
aWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGF0YWJhc2VQcm92aWRlci5oCkBAIC0y
Niw3ICsyNiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvTWFpbkZyYW1lLmNwcAppbmRleCAwNmNiNjJkMWRjYzJjNzcwN2JlYTg1OGNlNjZlZmI5
OTQzOTM1ZGI5Li40ODE3NGNiMjQzN2Q1OTYwYjIxYzUzODM2YzUyNzFiNjYwZDg4NmMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01haW5GcmFtZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9NYWluRnJhbWUuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiTWFp
bkZyYW1lLmgiCiAKICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRW1wdHlDbGllbnRz
LmgiCiAjaW5jbHVkZSAiUGFnZUNvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJQYWdlT3Zlcmxh
eUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQYXltZW50Q29vcmRpbmF0b3IuaCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwCmluZGV4IGZlY2JjM2JlZjBhYTg1NTlhNDI2OTFiYjcxYzEzNWNmMjQ0MmM0ZmYuLjkz
MzFiMzAyOTA3ZTc5YjdjMTFiNWVjMDg0NmJhZmQ1YzNmZWM0OTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNw
cApAQCAtODMsNiArODMsNyBAQAogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRl
ICJTb2NrZXRQcm92aWRlci5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAjaW5jbHVkZSAi
U3RvcmFnZU5hbWVzcGFjZS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5o
IgpAQCAtNzc0LDEwICs3NzUsOCBAQCB2b2lkIFBhZ2U6OnNldEluTG93UXVhbGl0eUltYWdlSW50
ZXJwb2xhdGlvbk1vZGUoYm9vbCBtb2RlKQogCiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudCYgUGFn
ZTo6ZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoKSBjb25zdAogewotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxFbXB0eURpYWdub3N0aWNMb2dnaW5nQ2xpZW50PiBkdW1teUNsaWVudDsKICAgICBp
ZiAoIXNldHRpbmdzKCkuZGlhZ25vc3RpY0xvZ2dpbmdFbmFibGVkKCkgfHwgIW1fZGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQpCi0gICAgICAgIHJldHVybiBkdW1teUNsaWVudDsKLQorICAgICAgICBy
ZXR1cm4gZW1wdHlEaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpOwogICAgIHJldHVybiAqbV9kaWFn
bm9zdGljTG9nZ2luZ0NsaWVudDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVEYXRhYmFzZS5jcHAKaW5kZXggYWY5YTQ1NDkwZWExNWQ1MDkwN2QxNGYwNDRkODlk
Nzc3ZWM5Y2Y4NS4uZDAzZGMwZTQ5MGEyYThmYWU2ZDZmNDBmZjExN2Q4ZDQ2MzdmNmZiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCkBAIC00
NTQsNyArNDU0LDcgQEAgaW50IFNRTGl0ZURhdGFiYXNlOjphdXRob3JpemVyRnVuY3Rpb24odm9p
ZCogdXNlckRhdGEsIGludCBhY3Rpb25Db2RlLCBjb25zdCBjaGEKICAgICB9CiB9CiAKLXZvaWQg
U1FMaXRlRGF0YWJhc2U6OnNldEF1dGhvcml6ZXIoUGFzc1JlZlB0cjxEYXRhYmFzZUF1dGhvcml6
ZXI+IGF1dGgpCit2b2lkIFNRTGl0ZURhdGFiYXNlOjpzZXRBdXRob3JpemVyKERhdGFiYXNlQXV0
aG9yaXplciYgYXV0aG9yaXplcikKIHsKICAgICBpZiAoIW1fZGIpIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJBdHRlbXB0IHRvIHNldCBhbiBhdXRob3JpemVyIG9uIGEgbm9uLW9wZW4gU1FMIGRhdGFi
YXNlIik7CkBAIC00NjQsNyArNDY0LDcgQEAgdm9pZCBTUUxpdGVEYXRhYmFzZTo6c2V0QXV0aG9y
aXplcihQYXNzUmVmUHRyPERhdGFiYXNlQXV0aG9yaXplcj4gYXV0aCkKIAogICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOwogCi0gICAgbV9hdXRob3JpemVyID0gYXV0aDsK
KyAgICBtX2F1dGhvcml6ZXIgPSAmYXV0aG9yaXplcjsKICAgICAKICAgICBlbmFibGVBdXRob3Jp
emVyKHRydWUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZURhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJh
c2UuaAppbmRleCBiZjMzNjFhODAwZDA5NzRlNTI1MmFlYzkwODhmYjU1NDQ1ZDhiYTg0Li5lZTli
YTJiZTFlMjUwNDVmOWMzYTYxNWU2NmU3N2JmZjc1M2M0Mjg4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaApAQCAtMjQsOCArMjQsNyBAQAogICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBTUUxpdGVEYXRhYmFzZV9oCi0jZGVmaW5lIFNRTGl0
ZURhdGFiYXNlX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNs
dWRlIDxzcWxpdGUzLmg+CkBAIC0xMDEsMTQgKzEwMCwxNSBAQCBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgaW50IGxhc3RFcnJvcigpOwogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IGNoYXIq
IGxhc3RFcnJvck1zZygpOwogICAgIAotICAgIHNxbGl0ZTMqIHNxbGl0ZTNIYW5kbGUoKSBjb25z
dCB7CisgICAgc3FsaXRlMyogc3FsaXRlM0hhbmRsZSgpIGNvbnN0CisgICAgewogI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgICAgIEFTU0VSVChtX3NoYXJhYmxlIHx8IGN1cnJlbnRUaHJlYWQoKSA9
PSBtX29wZW5pbmdUaHJlYWQgfHwgIW1fZGIpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBtX2Ri
OwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldEF1dGhvcml6ZXIoUGFzc1JlZlB0cjxEYXRhYmFz
ZUF1dGhvcml6ZXI+KTsKKyAgICB2b2lkIHNldEF1dGhvcml6ZXIoRGF0YWJhc2VBdXRob3JpemVy
Jik7CiAKICAgICBMb2NrJiBkYXRhYmFzZU11dGV4KCkgeyByZXR1cm4gbV9sb2NraW5nTXV0ZXg7
IH0KICAgICBib29sIGlzQXV0b0NvbW1pdE9uKCkgY29uc3Q7CkBAIC0xNjYsNSArMTY2LDMgQEAg
cHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCmluZGV4IDk3N2RiZmQ3OTdk
NTc4NTdmNDdlNDgxMTZiMTNkNDFjYWEzODg2ZTcuLmM5ZjBmODEzYmNiNjM2NjE1NGJjMDRiZWE1
MDNjNjI0ZmFlYTAxYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
QmlkaUNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNv
bnRleHQuY3BwCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA2
LCAyMDA3LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkJpZGlDb250ZXh0LmgiCisKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMyLDYgKzMzLDE1IEBAIHN0cnVjdCBTYW1lU2l6ZUFzQmlk
aUNvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxTYW1lU2l6ZUFzQmlkaUNvbnRleHQ+IHsKIAog
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKEJpZGlDb250ZXh0KSA9PSBzaXplb2YoU2FtZVNpemVBc0Jp
ZGlDb250ZXh0KSwgQmlkaUNvbnRleHRfc2hvdWxkX3N0YXlfc21hbGwpOwogCitpbmxpbmUgQmlk
aUNvbnRleHQ6OkJpZGlDb250ZXh0KHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9u
IGRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSwgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UsIEJp
ZGlDb250ZXh0KiBwYXJlbnQpCisgICAgOiBtX2xldmVsKGxldmVsKQorICAgICwgbV9kaXJlY3Rp
b24oZGlyZWN0aW9uKQorICAgICwgbV9vdmVycmlkZShvdmVycmlkZSkKKyAgICAsIG1fc291cmNl
KHNvdXJjZSkKKyAgICAsIG1fcGFyZW50KHBhcmVudCkKK3sKK30KKwogaW5saW5lIFJlZjxCaWRp
Q29udGV4dD4gQmlkaUNvbnRleHQ6OmNyZWF0ZVVuY2FjaGVkKHVuc2lnbmVkIGNoYXIgbGV2ZWws
IFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSwgQmlkaUVtYmVkZGluZ1Nv
dXJjZSBzb3VyY2UsIEJpZGlDb250ZXh0KiBwYXJlbnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQmlkaUNvbnRleHQobGV2ZWwsIGRpcmVjdGlvbiwgb3ZlcnJpZGUsIHNvdXJjZSwgcGFy
ZW50KSk7CkBAIC02NCwzNSArNzQsMzEgQEAgUmVmPEJpZGlDb250ZXh0PiBCaWRpQ29udGV4dDo6
Y3JlYXRlKHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGkKICAgICBy
ZXR1cm4gcnRsT3ZlcnJpZGVDb250ZXh0OwogfQogCi1zdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
QmlkaUNvbnRleHQ+IGNvcHlDb250ZXh0QW5kUmViYXNlbGluZUxldmVsKEJpZGlDb250ZXh0KiBj
b250ZXh0LCBCaWRpQ29udGV4dCogcGFyZW50KQorc3RhdGljIGlubGluZSBSZWY8QmlkaUNvbnRl
eHQ+IGNvcHlDb250ZXh0QW5kUmViYXNlbGluZUxldmVsKEJpZGlDb250ZXh0JiBjb250ZXh0LCBC
aWRpQ29udGV4dCogcGFyZW50KQogewotICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICB1bnNpZ25l
ZCBjaGFyIG5ld0xldmVsID0gcGFyZW50ID8gcGFyZW50LT5sZXZlbCgpIDogMDsKLSAgICBpZiAo
Y29udGV4dC0+ZGlyKCkgPT0gVV9SSUdIVF9UT19MRUZUKQorICAgIGF1dG8gbmV3TGV2ZWwgPSBw
YXJlbnQgPyBwYXJlbnQtPmxldmVsKCkgOiAwOworICAgIGlmIChjb250ZXh0LmRpcigpID09IFVf
UklHSFRfVE9fTEVGVCkKICAgICAgICAgbmV3TGV2ZWwgPSBuZXh0R3JlYXRlck9kZExldmVsKG5l
d0xldmVsKTsKICAgICBlbHNlIGlmIChwYXJlbnQpCiAgICAgICAgIG5ld0xldmVsID0gbmV4dEdy
ZWF0ZXJFdmVuTGV2ZWwobmV3TGV2ZWwpOwotCi0gICAgcmV0dXJuIEJpZGlDb250ZXh0OjpjcmVh
dGUobmV3TGV2ZWwsIGNvbnRleHQtPmRpcigpLCBjb250ZXh0LT5vdmVycmlkZSgpLCBjb250ZXh0
LT5zb3VyY2UoKSwgcGFyZW50KTsKKyAgICByZXR1cm4gQmlkaUNvbnRleHQ6OmNyZWF0ZShuZXdM
ZXZlbCwgY29udGV4dC5kaXIoKSwgY29udGV4dC5vdmVycmlkZSgpLCBjb250ZXh0LnNvdXJjZSgp
LCBwYXJlbnQpOwogfQogCiAvLyBUaGUgQmlkaUNvbnRleHQgc3RhY2sgbXVzdCBiZSBpbW11dGFi
bGUgLS0gdGhleSdyZSByZS11c2VkIGZvciByZS1sYXlvdXQgYWZ0ZXIKLS8vIERPTSBtb2RpZmlj
YXRpb24vZWRpdGluZyAtLSBzbyB3ZSBjb3B5IGFsbCB0aGUgbm9uLXVuaWNvZGUgY29udGV4dHMs
IGFuZAorLy8gRE9NIG1vZGlmaWNhdGlvbi9lZGl0aW5nIC0tIHNvIHdlIGNvcHkgYWxsIHRoZSBu
b24tVW5pY29kZSBjb250ZXh0cywgYW5kCiAvLyByZWNhbGN1bGF0ZSB0aGVpciBsZXZlbHMuCi1Q
YXNzUmVmUHRyPEJpZGlDb250ZXh0PiBCaWRpQ29udGV4dDo6Y29weVN0YWNrUmVtb3ZpbmdVbmlj
b2RlRW1iZWRkaW5nQ29udGV4dHMoKQorUmVmPEJpZGlDb250ZXh0PiBCaWRpQ29udGV4dDo6Y29w
eVN0YWNrUmVtb3ZpbmdVbmljb2RlRW1iZWRkaW5nQ29udGV4dHMoKQogewogICAgIFZlY3RvcjxC
aWRpQ29udGV4dCosIDY0PiBjb250ZXh0czsKLSAgICBmb3IgKEJpZGlDb250ZXh0KiBpdGVyID0g
dGhpczsgaXRlcjsgaXRlciA9IGl0ZXItPnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChpdGVyLT5z
b3VyY2UoKSAhPSBGcm9tVW5pY29kZSkKLSAgICAgICAgICAgIGNvbnRleHRzLmFwcGVuZChpdGVy
KTsKKyAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gdGhpczsgYW5jZXN0b3I7IGFuY2VzdG9yID0g
YW5jZXN0b3ItPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChhbmNlc3Rvci0+c291cmNlKCkgIT0g
RnJvbVVuaWNvZGUpCisgICAgICAgICAgICBjb250ZXh0cy5hcHBlbmQoYW5jZXN0b3IpOwogICAg
IH0KICAgICBBU1NFUlQoY29udGV4dHMuc2l6ZSgpKTsKLSAKLSAgICBSZWZQdHI8QmlkaUNvbnRl
eHQ+IHRvcENvbnRleHQgPSBjb3B5Q29udGV4dEFuZFJlYmFzZWxpbmVMZXZlbChjb250ZXh0cy5s
YXN0KCksIDApOwotICAgIGZvciAoaW50IGkgPSBjb250ZXh0cy5zaXplKCkgLSAxOyBpID4gMDsg
LS1pKQotICAgICAgICB0b3BDb250ZXh0ID0gY29weUNvbnRleHRBbmRSZWJhc2VsaW5lTGV2ZWwo
Y29udGV4dHNbaSAtIDFdLCB0b3BDb250ZXh0LmdldCgpKTsKLQotICAgIHJldHVybiBXVEZNb3Zl
KHRvcENvbnRleHQpOworICAgIGF1dG8gdG9wQ29udGV4dCA9IGNvcHlDb250ZXh0QW5kUmViYXNl
bGluZUxldmVsKCpjb250ZXh0cy5sYXN0KCksIG51bGxwdHIpOworICAgIGZvciAodW5zaWduZWQg
aSA9IGNvbnRleHRzLnNpemUoKSAtIDE7IGk7IC0taSkKKyAgICAgICAgdG9wQ29udGV4dCA9IGNv
cHlDb250ZXh0QW5kUmViYXNlbGluZUxldmVsKCpjb250ZXh0c1tpIC0gMV0sIHRvcENvbnRleHQu
cHRyKCkpOworICAgIHJldHVybiB0b3BDb250ZXh0OwogfQogCiBib29sIG9wZXJhdG9yPT0oY29u
c3QgQmlkaUNvbnRleHQmIGMxLCBjb25zdCBCaWRpQ29udGV4dCYgYzIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmgKaW5kZXggNjBiMTE4ODBiMDkxNDkzY2IzOTUw
MjkzOWUzNjA4NTg0Nzc1NjUyZC4uZDRjNGU1NzA4YTBkNDJjYjljYjQ3MWEyYzA2OTY3MGQzOWJk
MzRkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaApAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNiwgMjAwNywgMjAwOSwg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodCByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
My0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0xOSwyNiArMTksMjAgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBCaWRpQ29udGV4dF9oCi0j
ZGVmaW5lIEJpZGlDb250ZXh0X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8dW5pY29kZS91
Y2hhci5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1lbnVtIEJpZGlFbWJlZGRpbmdTb3VyY2Ug
ewotICAgIEZyb21TdHlsZU9yRE9NLAotICAgIEZyb21Vbmljb2RlCi19OworZW51bSBCaWRpRW1i
ZWRkaW5nU291cmNlIHsgRnJvbVN0eWxlT3JET00sIEZyb21Vbmljb2RlIH07CiAKIC8vIFVzZWQg
dG8ga2VlcCB0cmFjayBvZiBleHBsaWNpdCBlbWJlZGRpbmdzLgogY2xhc3MgQmlkaUNvbnRleHQg
OiBwdWJsaWMgUmVmQ291bnRlZDxCaWRpQ29udGV4dD4gewogcHVibGljOgotICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZWY8QmlkaUNvbnRleHQ+IGNyZWF0ZSh1bnNpZ25lZCBjaGFyIGxldmVs
LCBVQ2hhckRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSA9IGZhbHNlLCBCaWRpRW1iZWRkaW5nU291
cmNlID0gRnJvbVN0eWxlT3JET00sIEJpZGlDb250ZXh0KiBwYXJlbnQgPSAwKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmVmPEJpZGlDb250ZXh0PiBjcmVhdGUodW5zaWduZWQgY2hhciBs
ZXZlbCwgVUNoYXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUgPSBmYWxzZSwgQmlkaUVtYmVkZGlu
Z1NvdXJjZSA9IEZyb21TdHlsZU9yRE9NLCBCaWRpQ29udGV4dCogcGFyZW50ID0gbnVsbHB0cik7
CiAKICAgICBCaWRpQ29udGV4dCogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQuZ2V0
KCk7IH0KICAgICB1bnNpZ25lZCBjaGFyIGxldmVsKCkgY29uc3QgeyByZXR1cm4gbV9sZXZlbDsg
fQpAQCAtNDYsMTYgKzQwLDEwIEBAIHB1YmxpYzoKICAgICBib29sIG92ZXJyaWRlKCkgY29uc3Qg
eyByZXR1cm4gbV9vdmVycmlkZTsgfQogICAgIEJpZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNlKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmlkaUVtYmVkZGluZ1NvdXJjZT4obV9zb3VyY2Up
OyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBQYXNzUmVmUHRyPEJpZGlDb250ZXh0PiBjb3B5U3Rh
Y2tSZW1vdmluZ1VuaWNvZGVFbWJlZGRpbmdDb250ZXh0cygpOworICAgIFdFQkNPUkVfRVhQT1JU
IFJlZjxCaWRpQ29udGV4dD4gY29weVN0YWNrUmVtb3ZpbmdVbmljb2RlRW1iZWRkaW5nQ29udGV4
dHMoKTsKKwogcHJpdmF0ZToKLSAgICBCaWRpQ29udGV4dCh1bnNpZ25lZCBjaGFyIGxldmVsLCBV
Q2hhckRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRpbmdTb3Vy
Y2Ugc291cmNlLCBCaWRpQ29udGV4dCogcGFyZW50KQotICAgICAgICA6IG1fbGV2ZWwobGV2ZWwp
Ci0gICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQotICAgICAgICAsIG1fb3ZlcnJpZGUo
b3ZlcnJpZGUpCi0gICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICAgICAsIG1fcGFyZW50
KHBhcmVudCkKLSAgICB7Ci0gICAgfQorICAgIEJpZGlDb250ZXh0KHVuc2lnbmVkIGNoYXIgbGV2
ZWwsIFVDaGFyRGlyZWN0aW9uLCBib29sIG92ZXJyaWRlLCBCaWRpRW1iZWRkaW5nU291cmNlLCBC
aWRpQ29udGV4dCogcGFyZW50KTsKIAogICAgIHN0YXRpYyBSZWY8QmlkaUNvbnRleHQ+IGNyZWF0
ZVVuY2FjaGVkKHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9uLCBib29sIG92ZXJy
aWRlLCBCaWRpRW1iZWRkaW5nU291cmNlLCBCaWRpQ29udGV4dCogcGFyZW50KTsKIApAQCAtNzks
NSArNjcsMyBAQCBpbmxpbmUgdW5zaWduZWQgY2hhciBuZXh0R3JlYXRlckV2ZW5MZXZlbCh1bnNp
Z25lZCBjaGFyIGxldmVsKQogYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpZGlDb250ZXh0JiwgY29u
c3QgQmlkaUNvbnRleHQmKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
QmlkaUNvbnRleHRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9C
aWRpUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVy
LmgKaW5kZXggNDljZmQyMzQxOTgzNjNjODNlYWI0MWIxOWM1YTVjMjQ0NTc0OWRhYi4uMWIxM2Vm
M2I3ZWE5ZmZhNDRlYTJmODhiNzEwMzkwMjZlOTQzNjc3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdo
dCByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTksMjIgKzE5LDIwIEBACiAg
KgogICovCiAKLSNpZm5kZWYgQmlkaVJlc29sdmVyX2gKLSNkZWZpbmUgQmlkaVJlc29sdmVyX2gK
KyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQmlkaUNvbnRleHQuaCIKICNpbmNsdWRlICJCaWRp
UnVuTGlzdC5oIgogI2luY2x1ZGUgIldyaXRpbmdNb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiAKLXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4gY2xhc3Mg
V2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4g
Y2xhc3MgV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSB7CiBwdWJsaWM6CiAgICAgdm9pZCByZXNl
dCgpCiAgICAgewpAQCAtODMsNDkgKzgxLDQxIEBAIHByaXZhdGU6CiAvLyBUaGUgQmlkaVN0YXR1
cyBhdCBhIGdpdmVuIHBvc2l0aW9uICh0eXBpY2FsbHkgdGhlIGVuZCBvZiBhIGxpbmUpIGNhbgog
Ly8gYmUgY2FjaGVkIGFuZCB0aGVuIHVzZWQgdG8gcmVzdGFydCBiaWRpIHJlc29sdXRpb24gYXQg
dGhhdCBwb3NpdGlvbi4KIHN0cnVjdCBCaWRpU3RhdHVzIHsKLSAgICBCaWRpU3RhdHVzKCkKLSAg
ICAgICAgOiBlb3IoVV9PVEhFUl9ORVVUUkFMKQotICAgICAgICAsIGxhc3RTdHJvbmcoVV9PVEhF
Ul9ORVVUUkFMKQotICAgICAgICAsIGxhc3QoVV9PVEhFUl9ORVVUUkFMKQotICAgIHsKLSAgICB9
CisgICAgQmlkaVN0YXR1cygpID0gZGVmYXVsdDsKIAogICAgIC8vIENyZWF0ZXMgYSBCaWRpU3Rh
dHVzIHJlcHJlc2VudGluZyBhIG5ldyBwYXJhZ3JhcGggcm9vdCB3aXRoIGEgZGVmYXVsdCBkaXJl
Y3Rpb24uCiAgICAgLy8gVXNlcyBUZXh0RGlyZWN0aW9uIGFzIGl0IG9ubHkgaGFzIHR3byBwb3Nz
aWJpbGl0aWVzIGluc3RlYWQgb2YgVUNoYXJEaXJlY3Rpb24gd2hpY2ggaGFzIGF0IGxlYXN0IDE5
LgotICAgIEJpZGlTdGF0dXMoVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLCBib29sIGlzT3Zl
cnJpZGUpCisgICAgQmlkaVN0YXR1cyhUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBpc092
ZXJyaWRlKQorICAgICAgICA6IGVvcihkaXJlY3Rpb24gPT0gTFRSID8gVV9MRUZUX1RPX1JJR0hU
IDogVV9SSUdIVF9UT19MRUZUKQorICAgICAgICAsIGxhc3RTdHJvbmcoZW9yKQorICAgICAgICAs
IGxhc3QoZW9yKQorICAgICAgICAsIGNvbnRleHQoQmlkaUNvbnRleHQ6OmNyZWF0ZShkaXJlY3Rp
b24gPT0gTFRSID8gMCA6IDEsIGVvciwgaXNPdmVycmlkZSkpCiAgICAgewotICAgICAgICBVQ2hh
ckRpcmVjdGlvbiBkaXJlY3Rpb24gPSB0ZXh0RGlyZWN0aW9uID09IExUUiA/IFVfTEVGVF9UT19S
SUdIVCA6IFVfUklHSFRfVE9fTEVGVDsKLSAgICAgICAgZW9yID0gbGFzdFN0cm9uZyA9IGxhc3Qg
PSBkaXJlY3Rpb247Ci0gICAgICAgIGNvbnRleHQgPSBCaWRpQ29udGV4dDo6Y3JlYXRlKHRleHRE
aXJlY3Rpb24gPT0gTFRSID8gMCA6IDEsIGRpcmVjdGlvbiwgaXNPdmVycmlkZSk7CiAgICAgfQog
Ci0gICAgQmlkaVN0YXR1cyhVQ2hhckRpcmVjdGlvbiBlb3JEaXIsIFVDaGFyRGlyZWN0aW9uIGxh
c3RTdHJvbmdEaXIsIFVDaGFyRGlyZWN0aW9uIGxhc3REaXIsIFBhc3NSZWZQdHI8QmlkaUNvbnRl
eHQ+IGJpZGlDb250ZXh0KQotICAgICAgICA6IGVvcihlb3JEaXIpCi0gICAgICAgICwgbGFzdFN0
cm9uZyhsYXN0U3Ryb25nRGlyKQotICAgICAgICAsIGxhc3QobGFzdERpcikKLSAgICAgICAgLCBj
b250ZXh0KGJpZGlDb250ZXh0KQorICAgIEJpZGlTdGF0dXMoVUNoYXJEaXJlY3Rpb24gZW9yLCBV
Q2hhckRpcmVjdGlvbiBsYXN0U3Ryb25nLCBVQ2hhckRpcmVjdGlvbiBsYXN0LCBSZWZQdHI8Qmlk
aUNvbnRleHQ+JiYgY29udGV4dCkKKyAgICAgICAgOiBlb3IoZW9yKQorICAgICAgICAsIGxhc3RT
dHJvbmcobGFzdFN0cm9uZykKKyAgICAgICAgLCBsYXN0KGxhc3QpCisgICAgICAgICwgY29udGV4
dChXVEZNb3ZlKGNvbnRleHQpKQogICAgIHsKICAgICB9CiAKLSAgICBVQ2hhckRpcmVjdGlvbiBl
b3I7Ci0gICAgVUNoYXJEaXJlY3Rpb24gbGFzdFN0cm9uZzsKLSAgICBVQ2hhckRpcmVjdGlvbiBs
YXN0OworICAgIFVDaGFyRGlyZWN0aW9uIGVvciB7IFVfT1RIRVJfTkVVVFJBTCB9OworICAgIFVD
aGFyRGlyZWN0aW9uIGxhc3RTdHJvbmcgeyBVX09USEVSX05FVVRSQUwgfTsKKyAgICBVQ2hhckRp
cmVjdGlvbiBsYXN0IHsgVV9PVEhFUl9ORVVUUkFMIH07CiAgICAgUmVmUHRyPEJpZGlDb250ZXh0
PiBjb250ZXh0OwogfTsKIAotY2xhc3MgQmlkaUVtYmVkZGluZyB7Ci1wdWJsaWM6CitzdHJ1Y3Qg
QmlkaUVtYmVkZGluZyB7CiAgICAgQmlkaUVtYmVkZGluZyhVQ2hhckRpcmVjdGlvbiBkaXJlY3Rp
b24sIEJpZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNlKQotICAgIDogbV9kaXJlY3Rpb24oZGlyZWN0
aW9uKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICAgICA6IGRpcmVjdGlvbihkaXJlY3Rp
b24pCisgICAgICAgICwgc291cmNlKHNvdXJjZSkKICAgICB7CiAgICAgfQogCi0gICAgVUNoYXJE
aXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KLSAgICBC
aWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9Ci1w
cml2YXRlOgotICAgIFVDaGFyRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwotICAgIEJpZGlFbWJlZGRp
bmdTb3VyY2UgbV9zb3VyY2U7CisgICAgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uOworICAgIEJp
ZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNlOwogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBCaWRpU3RhdHVzJiBzdGF0dXMxLCBjb25zdCBCaWRpU3RhdHVzJiBzdGF0dXMyKQpAQCAt
MjAwLDE3ICsxOTAsOSBAQCBlbnVtIFZpc3VhbERpcmVjdGlvbk92ZXJyaWRlIHsKIAogLy8gQmlk
aVJlc29sdmVyIGlzIFdlYktpdCdzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBVbmljb2RlIEJpZGkg
QWxnb3JpdGhtCiAvLyBodHRwOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjkKLXRlbXBsYXRlIDxj
bGFzcyBJdGVyYXRvciwgY2xhc3MgUnVuLCBjbGFzcyBTdWJjbGFzcz4gY2xhc3MgQmlkaVJlc29s
dmVyQmFzZSB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBl
bmFtZSBEZXJpdmVkQ2xhc3M+IGNsYXNzIEJpZGlSZXNvbHZlckJhc2UgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEJpZGlSZXNvbHZlckJhc2UpOwogcHVibGljOgotICAgIEJpZGlSZXNvbHZl
ckJhc2UoKQotICAgICAgICA6IG1fZGlyZWN0aW9uKFVfT1RIRVJfTkVVVFJBTCkKLSAgICAgICAg
LCBtX3JlYWNoZWRFbmRPZkxpbmUoZmFsc2UpCi0gICAgICAgICwgbV9lbXB0eVJ1bih0cnVlKQot
ICAgICAgICAsIG1fbmVzdGVkSXNvbGF0ZUNvdW50KDApCi0gICAgewotICAgIH0KLQogICAgIGNv
bnN0IEl0ZXJhdG9yJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudDsgfQogICAg
IHZvaWQgc2V0UG9zaXRpb25JZ25vcmluZ05lc3RlZElzb2xhdGVzKGNvbnN0IEl0ZXJhdG9yJiBw
b3NpdGlvbikgeyBtX2N1cnJlbnQgPSBwb3NpdGlvbjsgfQogICAgIHZvaWQgc2V0UG9zaXRpb24o
Y29uc3QgSXRlcmF0b3ImIHBvc2l0aW9uLCB1bnNpZ25lZCBuZXN0ZWRJc29sYXRlZENvdW50KQpA
QCAtMjE5LDIwICsyMDEsMjAgQEAgcHVibGljOgogICAgICAgICBtX25lc3RlZElzb2xhdGVDb3Vu
dCA9IG5lc3RlZElzb2xhdGVkQ291bnQ7CiAgICAgfQogCi0gICAgdm9pZCBpbmNyZW1lbnQoKSB7
IHN0YXRpY19jYXN0PFN1YmNsYXNzKj4odGhpcyktPmluY3JlbWVudEludGVybmFsKCk7IH0KKyAg
ICB2b2lkIGluY3JlbWVudCgpIHsgc3RhdGljX2Nhc3Q8RGVyaXZlZENsYXNzJj4oKnRoaXMpLmlu
Y3JlbWVudEludGVybmFsKCk7IH0KIAogICAgIEJpZGlDb250ZXh0KiBjb250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0dXMuY29udGV4dC5nZXQoKTsgfQotICAgIHZvaWQgc2V0Q29udGV4dChQ
YXNzUmVmUHRyPEJpZGlDb250ZXh0PiBjKSB7IG1fc3RhdHVzLmNvbnRleHQgPSBjOyB9CisgICAg
dm9pZCBzZXRDb250ZXh0KFJlZlB0cjxCaWRpQ29udGV4dD4mJiBjb250ZXh0KSB7IG1fc3RhdHVz
LmNvbnRleHQgPSBXVEZNb3ZlKGNvbnRleHQpOyB9CiAKICAgICB2b2lkIHNldExhc3REaXIoVUNo
YXJEaXJlY3Rpb24gbGFzdERpcikgeyBtX3N0YXR1cy5sYXN0ID0gbGFzdERpcjsgfQogICAgIHZv
aWQgc2V0TGFzdFN0cm9uZ0RpcihVQ2hhckRpcmVjdGlvbiBsYXN0U3Ryb25nRGlyKSB7IG1fc3Rh
dHVzLmxhc3RTdHJvbmcgPSBsYXN0U3Ryb25nRGlyOyB9CiAgICAgdm9pZCBzZXRFb3JEaXIoVUNo
YXJEaXJlY3Rpb24gZW9yRGlyKSB7IG1fc3RhdHVzLmVvciA9IGVvckRpcjsgfQogCiAgICAgVUNo
YXJEaXJlY3Rpb24gZGlyKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KLSAgICB2b2lk
IHNldERpcihVQ2hhckRpcmVjdGlvbiBkKSB7IG1fZGlyZWN0aW9uID0gZDsgfQorICAgIHZvaWQg
c2V0RGlyKFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbikgeyBtX2RpcmVjdGlvbiA9IGRpcmVjdGlv
bjsgfQogCiAgICAgY29uc3QgQmlkaVN0YXR1cyYgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0dXM7IH0KLSAgICB2b2lkIHNldFN0YXR1cyhjb25zdCBCaWRpU3RhdHVzIHMpIHsgbV9zdGF0
dXMgPSBzOyB9CisgICAgdm9pZCBzZXRTdGF0dXMoQmlkaVN0YXR1cyBzdGF0dXMpIHsgbV9zdGF0
dXMgPSBzdGF0dXM7IH0KIAogICAgIFdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU8SXRlcmF0b3I+
JiB3aGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlKCkgeyByZXR1cm4gbV93aGl0ZXNwYWNlQ29sbGFw
c2luZ1N0YXRlOyB9CiAKQEAgLTI1OCw5ICsyNDAsMTEgQEAgcHVibGljOgogICAgIHVuc2lnbmVk
IHdoaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuKFJ1biYpOwogCiBw
cm90ZWN0ZWQ6CisgICAgQmlkaVJlc29sdmVyQmFzZSgpID0gZGVmYXVsdDsKKwogICAgIC8vIEZJ
WE1FOiBJbnN0ZWFkIG9mIElubGluZUJpZGlSZXNvbHZlcnMgc3ViY2xhc3NpbmcgdGhpcyBtZXRo
b2QsIHdlIHNob3VsZAogICAgIC8vIHBhc3MgaW4gc29tZSBzb3J0IG9mIFRyYWl0cyBvYmplY3Qg
d2hpY2gga25vd3MgaG93IHRvIGNyZWF0ZSBydW5zIGZvciBhcHBlbmRpbmcuCi0gICAgdm9pZCBh
cHBlbmRSdW4oKSB7IHN0YXRpY19jYXN0PFN1YmNsYXNzKj4odGhpcyktPmFwcGVuZFJ1bkludGVy
bmFsKCk7IH0KKyAgICB2b2lkIGFwcGVuZFJ1bigpIHsgc3RhdGljX2Nhc3Q8RGVyaXZlZENsYXNz
Jj4oKnRoaXMpLmFwcGVuZFJ1bkludGVybmFsKCk7IH0KIAogICAgIEl0ZXJhdG9yIG1fY3VycmVu
dDsKICAgICAvLyBzb3IgYW5kIGVvciBhcmUgInN0YXJ0IG9mIHJ1biIgYW5kICJlbmQgb2YgcnVu
IiByZXNwZWN0aXZlbHkgYW5kIGNvcnJlcG9uZApAQCAtMjY5LDExICsyNTMsMTEgQEAgcHJvdGVj
dGVkOgogICAgIEl0ZXJhdG9yIG1fZW9yOyAvLyBQb2ludHMgdG8gdGhlIGxhc3QgY2hhcmFjdGVy
IGluIHRoZSBjdXJyZW50IHJ1bi4KICAgICBJdGVyYXRvciBtX2xhc3Q7CiAgICAgQmlkaVN0YXR1
cyBtX3N0YXR1czsKLSAgICBVQ2hhckRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKKyAgICBVQ2hhckRp
cmVjdGlvbiBtX2RpcmVjdGlvbiB7IFVfT1RIRVJfTkVVVFJBTCB9OwogICAgIEl0ZXJhdG9yIGVu
ZE9mTGluZTsKLSAgICBib29sIG1fcmVhY2hlZEVuZE9mTGluZTsKKyAgICBib29sIG1fcmVhY2hl
ZEVuZE9mTGluZSB7IGZhbHNlIH07CiAgICAgSXRlcmF0b3IgbV9sYXN0QmVmb3JlRVQ7IC8vIEJl
Zm9yZSBhIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1IKLSAgICBib29sIG1fZW1wdHlSdW47
CisgICAgYm9vbCBtX2VtcHR5UnVuIHsgdHJ1ZSB9OwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIG5vdCBiZWxvbmcgdG8gdGhlIHJlc29sdmVyLCBidXQgcmF0aGVyIGJlIHBhc3NlZAogICAg
IC8vIGludG8gY3JlYXRlQmlkaVJ1bnNGb3JMaW5lIGJ5IHRoZSBjYWxsZXIuCkBAIC0yODEsNyAr
MjY1LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTxJdGVy
YXRvcj4gbV93aGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlOwogCi0gICAgdW5zaWduZWQgbV9uZXN0
ZWRJc29sYXRlQ291bnQ7CisgICAgdW5zaWduZWQgbV9uZXN0ZWRJc29sYXRlQ291bnQgeyAwIH07
CiAgICAgSGFzaE1hcDxSdW4qLCB1bnNpZ25lZD4gbV93aGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5z
aXRpb25Gb3JJc29sYXRlZFJ1bjsKIAogcHJpdmF0ZToKQEAgLTI5NywxNiArMjgxLDE0IEBAIHBy
aXZhdGU6CiAgICAgVmVjdG9yPEJpZGlFbWJlZGRpbmcsIDg+IG1fY3VycmVudEV4cGxpY2l0RW1i
ZWRkaW5nU2VxdWVuY2U7CiB9OwogCi10ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3IsIGNsYXNzIFJ1
bj4KK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4+CiBjbGFzcyBCaWRp
UmVzb2x2ZXIgOiBwdWJsaWMgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBCaWRpUmVz
b2x2ZXI8SXRlcmF0b3IsIFJ1bj4+IHsKIH07CiAKLXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvciwg
Y2xhc3MgUnVuLCBjbGFzcyBJc29sYXRlUnVuPgordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3Is
IHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgSXNvbGF0ZVJ1bj4KIGNsYXNzIEJpZGlSZXNvbHZlcldp
dGhJc29sYXRlIDogcHVibGljIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgQmlkaVJl
c29sdmVyV2l0aElzb2xhdGU8SXRlcmF0b3IsIFJ1biwgSXNvbGF0ZVJ1bj4+IHsKIHB1YmxpYzoK
LSNpZm5kZWYgTkRFQlVHCiAgICAgfkJpZGlSZXNvbHZlcldpdGhJc29sYXRlKCk7Ci0jZW5kaWYK
IAogICAgIHZvaWQgaW5jcmVtZW50SW50ZXJuYWwoKTsKICAgICB2b2lkIGFwcGVuZFJ1bkludGVy
bmFsKCk7CkBAIC0zMTYsMTcgKzI5OCwxNSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxJc29sYXRl
UnVuPiBtX2lzb2xhdGVkUnVuczsKIH07CiAKLSNpZm5kZWYgTkRFQlVHCi10ZW1wbGF0ZSA8Y2xh
c3MgSXRlcmF0b3IsIGNsYXNzIFJ1biwgY2xhc3MgSXNvbGF0ZVJ1bj4KLUJpZGlSZXNvbHZlcldp
dGhJc29sYXRlPEl0ZXJhdG9yLCBSdW4sIElzb2xhdGVSdW4+Ojp+QmlkaVJlc29sdmVyV2l0aElz
b2xhdGUoKQordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5h
bWUgSXNvbGF0ZVJ1bj4KK2lubGluZSBCaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZTxJdGVyYXRvciwg
UnVuLCBJc29sYXRlUnVuPjo6fkJpZGlSZXNvbHZlcldpdGhJc29sYXRlKCkKIHsKICAgICAvLyBU
aGUgb3duZXIgb2YgdGhpcyByZXNvbHZlciBzaG91bGQgaGF2ZSBoYW5kbGVkIHRoZSBpc29sYXRl
ZCBydW5zLgogICAgIEFTU0VSVChtX2lzb2xhdGVkUnVucy5pc0VtcHR5KCkpOwogfQotI2VuZGlm
CiAKLXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvciwgY2xhc3MgUnVuLCBjbGFzcyBTdWJjbGFzcz4K
LXZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBTdWJjbGFzcz46OmFwcGVuZFJ1
bkludGVybmFsKCkKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5
cGVuYW1lIERlcml2ZWRDbGFzcz4KK3ZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVu
LCBEZXJpdmVkQ2xhc3M+OjphcHBlbmRSdW5JbnRlcm5hbCgpCiB7CiAgICAgaWYgKCFtX2VtcHR5
UnVuICYmICFtX2Vvci5hdEVuZCgpKSB7CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0g
bV9zb3Iub2Zmc2V0KCk7CkBAIC0zNDgsOCArMzI4LDggQEAgdm9pZCBCaWRpUmVzb2x2ZXJCYXNl
PEl0ZXJhdG9yLCBSdW4sIFN1YmNsYXNzPjo6YXBwZW5kUnVuSW50ZXJuYWwoKQogICAgIG1fc3Rh
dHVzLmVvciA9IFVfT1RIRVJfTkVVVFJBTDsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9y
LCBjbGFzcyBSdW4sIGNsYXNzIFN1YmNsYXNzPgotdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJh
dG9yLCBSdW4sIFN1YmNsYXNzPjo6ZW1iZWQoVUNoYXJEaXJlY3Rpb24gZGlyLCBCaWRpRW1iZWRk
aW5nU291cmNlIHNvdXJjZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBS
dW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KK3ZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRv
ciwgUnVuLCBEZXJpdmVkQ2xhc3M+OjplbWJlZChVQ2hhckRpcmVjdGlvbiBkaXIsIEJpZGlFbWJl
ZGRpbmdTb3VyY2Ugc291cmNlKQogewogICAgIC8vIElzb2xhdGVkIHNwYW5zIGNvbXB1dGUgYmFz
ZSBkaXJlY3Rpb25hbGl0eSBkdXJpbmcgdGhlaXIgb3duIFVCQSBydW4uCiAgICAgLy8gRG8gbm90
IGluc2VydCBmYWtlIGVtYmVkIGNoYXJhY3RlcnMgb25jZSB3ZSBlbnRlciBhbiBpc29sYXRlZCBz
cGFuLgpAQCAtMzU5LDggKzMzOSw4IEBAIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwg
UnVuLCBTdWJjbGFzcz46OmVtYmVkKFVDaGFyRGlyZWN0aW9uIGRpciwgQmlkaUVtCiAgICAgbV9j
dXJyZW50RXhwbGljaXRFbWJlZGRpbmdTZXF1ZW5jZS5hcHBlbmQoQmlkaUVtYmVkZGluZyhkaXIs
IHNvdXJjZSkpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3IsIGNsYXNzIFJ1biwgY2xh
c3MgU3ViY2xhc3M+Ci12b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgU3ViY2xh
c3M+OjpjaGVja0RpcmVjdGlvbkluTG93ZXJSYWlzZUVtYmVkZGluZ0xldmVsKCkKK3RlbXBsYXRl
PHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4K
K3ZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+OjpjaGVj
a0RpcmVjdGlvbkluTG93ZXJSYWlzZUVtYmVkZGluZ0xldmVsKCkKIHsKICAgICBBU1NFUlQobV9z
dGF0dXMuZW9yICE9IFVfT1RIRVJfTkVVVFJBTCB8fCBtX2Vvci5hdEVuZCgpKTsKICAgICBBU1NF
UlQobV9zdGF0dXMubGFzdCAhPSBVX0RJUl9OT05fU1BBQ0lOR19NQVJLCkBAIC0zNzQsOCArMzU0
LDggQEAgdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIFN1YmNsYXNzPjo6Y2hl
Y2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGQKICAgICAgICAgbV9kaXJlY3Rpb24gPSBtX3N0
YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVGVF9UT19SSUdIVCA6IFVf
UklHSFRfVE9fTEVGVDsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBSdW4s
IGNsYXNzIFN1YmNsYXNzPgotdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIFN1
YmNsYXNzPjo6bG93ZXJFeHBsaWNpdEVtYmVkZGluZ0xldmVsKFVDaGFyRGlyZWN0aW9uIGZyb20p
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJp
dmVkQ2xhc3M+Cit2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENs
YXNzPjo6bG93ZXJFeHBsaWNpdEVtYmVkZGluZ0xldmVsKFVDaGFyRGlyZWN0aW9uIGZyb20pCiB7
CiAgICAgaWYgKCFtX2VtcHR5UnVuICYmIG1fZW9yICE9IG1fbGFzdCkgewogICAgICAgICBjaGVj
a0RpcmVjdGlvbkluTG93ZXJSYWlzZUVtYmVkZGluZ0xldmVsKCk7CkBAIC00MTAsOCArMzkwLDgg
QEAgdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIFN1YmNsYXNzPjo6bG93ZXJF
eHBsaWNpdEVtYmVkZGluZ0xldmVsKFVDaGEKICAgICBtX2VvciA9IEl0ZXJhdG9yKCk7CiB9CiAK
LXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvciwgY2xhc3MgUnVuLCBjbGFzcyBTdWJjbGFzcz4KLXZv
aWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBTdWJjbGFzcz46OnJhaXNlRXhwbGlj
aXRFbWJlZGRpbmdMZXZlbChVQ2hhckRpcmVjdGlvbiBmcm9tLCBVQ2hhckRpcmVjdGlvbiB0bykK
K3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2
ZWRDbGFzcz4KK3ZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xh
c3M+OjpyYWlzZUV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwoVUNoYXJEaXJlY3Rpb24gZnJvbSwgVUNo
YXJEaXJlY3Rpb24gdG8pCiB7CiAgICAgaWYgKCFtX2VtcHR5UnVuICYmIG1fZW9yICE9IG1fbGFz
dCkgewogICAgICAgICBjaGVja0RpcmVjdGlvbkluTG93ZXJSYWlzZUVtYmVkZGluZ0xldmVsKCk7
CkBAIC00NDcsNTEgKzQyNyw1MCBAQCB2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1
biwgU3ViY2xhc3M+OjpyYWlzZUV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwoVUNoYQogICAgIG1fZW9y
ID0gSXRlcmF0b3IoKTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBSdW4s
IGNsYXNzIFN1YmNsYXNzPgotYm9vbCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIFN1
YmNsYXNzPjo6Y29tbWl0RXhwbGljaXRFbWJlZGRpbmcoKQordGVtcGxhdGU8dHlwZW5hbWUgSXRl
cmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgorYm9vbCBCaWRpUmVz
b2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OmNvbW1pdEV4cGxpY2l0RW1i
ZWRkaW5nKCkKIHsKICAgICAvLyBXaGVuIHdlJ3JlICJpbklzb2xhdGUoKSIgd2UncmUgcmVzb2x2
aW5nIHRoZSBwYXJlbnQgY29udGV4dCB3aGljaAogICAgIC8vIGlnbm9yZXMgKHNraXBzIG92ZXIp
IHRoZSBpc29sYXRlZCBjb250ZW50LCBpbmNsdWRpbmcgZW1iZWRkaW5nIGxldmVscy4KICAgICAv
LyBXZSBzaG91bGQgbmV2ZXIgYWNjcnVlIGVtYmVkZGluZyBsZXZlbHMgd2hpbGUgc2tpcHBpbmcg
b3ZlciBpc29sYXRlZCBjb250ZW50LgogICAgIEFTU0VSVCghaW5Jc29sYXRlKCkgfHwgbV9jdXJy
ZW50RXhwbGljaXRFbWJlZGRpbmdTZXF1ZW5jZS5pc0VtcHR5KCkpOwogCi0gICAgdW5zaWduZWQg
Y2hhciBmcm9tTGV2ZWwgPSBjb250ZXh0KCktPmxldmVsKCk7CisgICAgYXV0byBmcm9tTGV2ZWwg
PSBjb250ZXh0KCktPmxldmVsKCk7CiAgICAgUmVmUHRyPEJpZGlDb250ZXh0PiB0b0NvbnRleHQg
PSBjb250ZXh0KCk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudEV4cGxp
Y2l0RW1iZWRkaW5nU2VxdWVuY2Uuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQmlkaUVtYmVkZGlu
ZyBlbWJlZGRpbmcgPSBtX2N1cnJlbnRFeHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlW2ldOwotICAg
ICAgICBpZiAoZW1iZWRkaW5nLmRpcmVjdGlvbigpID09IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1B
VCkgewotICAgICAgICAgICAgaWYgKEJpZGlDb250ZXh0KiBwYXJlbnRDb250ZXh0ID0gdG9Db250
ZXh0LT5wYXJlbnQoKSkKKyAgICBmb3IgKGF1dG8mIGVtYmVkZGluZyA6IG1fY3VycmVudEV4cGxp
Y2l0RW1iZWRkaW5nU2VxdWVuY2UpIHsKKyAgICAgICAgaWYgKGVtYmVkZGluZy5kaXJlY3Rpb24g
PT0gVV9QT1BfRElSRUNUSU9OQUxfRk9STUFUKSB7CisgICAgICAgICAgICBpZiAoYXV0byogcGFy
ZW50Q29udGV4dCA9IHRvQ29udGV4dC0+cGFyZW50KCkpCiAgICAgICAgICAgICAgICAgdG9Db250
ZXh0ID0gcGFyZW50Q29udGV4dDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFVDaGFy
RGlyZWN0aW9uIGRpcmVjdGlvbiA9IChlbWJlZGRpbmcuZGlyZWN0aW9uKCkgPT0gVV9SSUdIVF9U
T19MRUZUX0VNQkVERElORyB8fCBlbWJlZGRpbmcuZGlyZWN0aW9uKCkgPT0gVV9SSUdIVF9UT19M
RUZUX09WRVJSSURFKSA/IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVDsKLSAgICAg
ICAgICAgIGJvb2wgb3ZlcnJpZGUgPSBlbWJlZGRpbmcuZGlyZWN0aW9uKCkgPT0gVV9MRUZUX1RP
X1JJR0hUX09WRVJSSURFIHx8IGVtYmVkZGluZy5kaXJlY3Rpb24oKSA9PSBVX1JJR0hUX1RPX0xF
RlRfT1ZFUlJJREU7CisgICAgICAgICAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24gPSAoZW1i
ZWRkaW5nLmRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HIHx8IGVtYmVkZGlu
Zy5kaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFKSA/IFVfUklHSFRfVE9fTEVG
VCA6IFVfTEVGVF9UT19SSUdIVDsKKyAgICAgICAgICAgIGJvb2wgb3ZlcnJpZGUgPSBlbWJlZGRp
bmcuZGlyZWN0aW9uID09IFVfTEVGVF9UT19SSUdIVF9PVkVSUklERSB8fCBlbWJlZGRpbmcuZGly
ZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERTsKICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgbGV2ZWwgPSB0b0NvbnRleHQtPmxldmVsKCk7CiAgICAgICAgICAgICBpZiAoZGlyZWN0
aW9uID09IFVfUklHSFRfVE9fTEVGVCkKICAgICAgICAgICAgICAgICBsZXZlbCA9IG5leHRHcmVh
dGVyT2RkTGV2ZWwobGV2ZWwpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGxl
dmVsID0gbmV4dEdyZWF0ZXJFdmVuTGV2ZWwobGV2ZWwpOwogICAgICAgICAgICAgaWYgKGxldmVs
IDwgNjEpCi0gICAgICAgICAgICAgICAgdG9Db250ZXh0ID0gQmlkaUNvbnRleHQ6OmNyZWF0ZShs
ZXZlbCwgZGlyZWN0aW9uLCBvdmVycmlkZSwgZW1iZWRkaW5nLnNvdXJjZSgpLCB0b0NvbnRleHQu
Z2V0KCkpOworICAgICAgICAgICAgICAgIHRvQ29udGV4dCA9IEJpZGlDb250ZXh0OjpjcmVhdGUo
bGV2ZWwsIGRpcmVjdGlvbiwgb3ZlcnJpZGUsIGVtYmVkZGluZy5zb3VyY2UsIHRvQ29udGV4dC5n
ZXQoKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB1bnNpZ25lZCBjaGFyIHRvTGV2ZWwgPSB0
b0NvbnRleHQtPmxldmVsKCk7CisgICAgYXV0byB0b0xldmVsID0gdG9Db250ZXh0LT5sZXZlbCgp
OwogCiAgICAgaWYgKHRvTGV2ZWwgPiBmcm9tTGV2ZWwpCiAgICAgICAgIHJhaXNlRXhwbGljaXRF
bWJlZGRpbmdMZXZlbChmcm9tTGV2ZWwgJSAyID8gVV9SSUdIVF9UT19MRUZUIDogVV9MRUZUX1RP
X1JJR0hULCB0b0xldmVsICUgMiA/IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVCk7
CiAgICAgZWxzZSBpZiAodG9MZXZlbCA8IGZyb21MZXZlbCkKICAgICAgICAgbG93ZXJFeHBsaWNp
dEVtYmVkZGluZ0xldmVsKGZyb21MZXZlbCAlIDIgPyBVX1JJR0hUX1RPX0xFRlQgOiBVX0xFRlRf
VE9fUklHSFQpOwogCi0gICAgc2V0Q29udGV4dCh0b0NvbnRleHQpOworICAgIHNldENvbnRleHQo
V1RGTW92ZSh0b0NvbnRleHQpKTsKIAogICAgIG1fY3VycmVudEV4cGxpY2l0RW1iZWRkaW5nU2Vx
dWVuY2UuY2xlYXIoKTsKIAogICAgIHJldHVybiBmcm9tTGV2ZWwgIT0gdG9MZXZlbDsKIH0KIAot
dGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBSdW4sIGNsYXNzIFN1YmNsYXNzPgotaW5s
aW5lIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBTdWJjbGFzcz46OnVwZGF0
ZVN0YXR1c0xhc3RGcm9tQ3VycmVudERpcmVjdGlvbihVQ2hhckRpcmVjdGlvbiBkaXJDdXJyZW50
KQordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVy
aXZlZENsYXNzPgoraW5saW5lIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBE
ZXJpdmVkQ2xhc3M+Ojp1cGRhdGVTdGF0dXNMYXN0RnJvbUN1cnJlbnREaXJlY3Rpb24oVUNoYXJE
aXJlY3Rpb24gZGlyQ3VycmVudCkKIHsKICAgICBzd2l0Y2ggKGRpckN1cnJlbnQpIHsKICAgICBj
YXNlIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6CkBAIC01MzEsOCArNTEwLDggQEAgaW5s
aW5lIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBTdWJjbGFzcz46OnVwZGF0
ZVN0YXR1c0xhc3RGcm9tQ3VycmUKICAgICB9CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRv
ciwgY2xhc3MgUnVuLCBjbGFzcyBTdWJjbGFzcz4KLWlubGluZSB2b2lkIEJpZGlSZXNvbHZlckJh
c2U8SXRlcmF0b3IsIFJ1biwgU3ViY2xhc3M+OjpyZW9yZGVyUnVuc0Zyb21MZXZlbHMoKQordGVt
cGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENs
YXNzPgoraW5saW5lIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVk
Q2xhc3M+OjpyZW9yZGVyUnVuc0Zyb21MZXZlbHMoKQogewogICAgIHVuc2lnbmVkIGNoYXIgbGV2
ZWxMb3cgPSAxMjg7CiAgICAgdW5zaWduZWQgY2hhciBsZXZlbEhpZ2ggPSAwOwpAQCAtNTY4LDgg
KzU0Nyw4IEBAIGlubGluZSB2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgU3Vi
Y2xhc3M+OjpyZW9yZGVyUnVuc0Zyb21MZXZlbHMoKQogICAgIH0KIH0KIAotdGVtcGxhdGUgPGNs
YXNzIEl0ZXJhdG9yLCBjbGFzcyBSdW4sIGNsYXNzIFN1YmNsYXNzPgotdm9pZCBCaWRpUmVzb2x2
ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIFN1YmNsYXNzPjo6Y3JlYXRlQmlkaVJ1bnNGb3JMaW5lKGNv
bnN0IEl0ZXJhdG9yJiBlbmQsIFZpc3VhbERpcmVjdGlvbk92ZXJyaWRlIG92ZXJyaWRlLCBib29s
IGhhcmRMaW5lQnJlYWspCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVu
LCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Cit2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3Is
IFJ1biwgRGVyaXZlZENsYXNzPjo6Y3JlYXRlQmlkaVJ1bnNGb3JMaW5lKGNvbnN0IEl0ZXJhdG9y
JiBlbmQsIFZpc3VhbERpcmVjdGlvbk92ZXJyaWRlIG92ZXJyaWRlLCBib29sIGhhcmRMaW5lQnJl
YWspCiB7CiAgICAgQVNTRVJUKG1fZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJBTCk7CiAKQEAg
LTU5NSw3ICs1NzQsNyBAQCB2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgU3Vi
Y2xhc3M+OjpjcmVhdGVCaWRpUnVuc0ZvckxpbmUoY29uc3QgSXRlcgogCiAgICAgbV9sYXN0ID0g
bV9jdXJyZW50OwogICAgIGJvb2wgcGFzdEVuZCA9IGZhbHNlOwotICAgIEJpZGlSZXNvbHZlckJh
c2U8SXRlcmF0b3IsIFJ1biwgU3ViY2xhc3M+IHN0YXRlQXRFbmQ7CisgICAgQmlkaVJlc29sdmVy
QmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+IHN0YXRlQXRFbmQ7CiAKICAgICB3aGls
ZSAodHJ1ZSkgewogICAgICAgICBVQ2hhckRpcmVjdGlvbiBkaXJDdXJyZW50OwpAQCAtOTc1LDE5
ICs5NTQsMTcgQEAgdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIFN1YmNsYXNz
Pjo6Y3JlYXRlQmlkaVJ1bnNGb3JMaW5lKGNvbnN0IEl0ZXIKICAgICBlbmRPZkxpbmUgPSBJdGVy
YXRvcigpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3IsIGNsYXNzIFJ1biwgY2xhc3Mg
U3ViY2xhc3M+Ci12b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgU3ViY2xhc3M+
OjpzZXRXaGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29sYXRlZFJ1bihSdW4mIHJ1
biwgc2l6ZV90IHRyYW5zaXRpb24pCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5h
bWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Cit2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRl
cmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6c2V0V2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0
aW9uRm9ySXNvbGF0ZWRSdW4oUnVuJiBydW4sIHNpemVfdCB0cmFuc2l0aW9uKQogewogICAgIEFT
U0VSVCghbV93aGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29sYXRlZFJ1bi5jb250
YWlucygmcnVuKSk7CiAgICAgbV93aGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29s
YXRlZFJ1bi5hZGQoJnJ1biwgdHJhbnNpdGlvbik7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJh
dG9yLCBjbGFzcyBSdW4sIGNsYXNzIFN1YmNsYXNzPgotdW5zaWduZWQgQmlkaVJlc29sdmVyQmFz
ZTxJdGVyYXRvciwgUnVuLCBTdWJjbGFzcz46OndoaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlv
bkZvcklzb2xhdGVkUnVuKFJ1biYgcnVuKQordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5
cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgordW5zaWduZWQgQmlkaVJlc29sdmVy
QmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+Ojp3aGl0ZXNwYWNlQ29sbGFwc2luZ1Ry
YW5zaXRpb25Gb3JJc29sYXRlZFJ1bihSdW4mIHJ1bikKIHsKICAgICByZXR1cm4gbV93aGl0ZXNw
YWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29sYXRlZFJ1bi50YWtlKCZydW4pOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBCaWRpUmVzb2x2ZXJfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q2hlY2tlckNsaWVudC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q2hlY2tlckNsaWVudC5oCmluZGV4IGVj
NDU4NzBjM2RhYTE3YmUwYTNlYjQyNzFjNDgxMDdlM2U4YzQxMmUuLjM5ZTMyMTFlODM5NDUxZTA0
YmM3NzA1YTQ5NGU3Y2E2NmE0ZTUxZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENoZWNrZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRDaGVja2VyQ2xpZW50LmgKQEAgLTI1LDIzICsyNSwxNyBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaWZuZGVmIFRleHRDaGVja2VyQ2xpZW50X2gKLSNkZWZpbmUgVGV4dENo
ZWNrZXJDbGllbnRfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJUZXh0Q2hlY2tpbmcuaCIK
IAotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIAogY2xh
c3MgVGV4dENoZWNrZXJDbGllbnQgewogcHVibGljOgotICAgIHZpcnR1YWwgflRleHRDaGVja2Vy
Q2xpZW50KCkge30KKyAgICB2aXJ0dWFsIH5UZXh0Q2hlY2tlckNsaWVudCgpIHsgfQogCiAgICAg
dmlydHVhbCBib29sIHNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFRleHRD
aGVja2luZ1R5cGUpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3Bl
bGxEb2N1bWVudChjb25zdCBTdHJpbmcmKSA9IDA7CkBAIC01OCw5ICs1Miw3IEBAIHB1YmxpYzoK
ICAgICAvLyBwcm92aWRlIG1vcmUgYWNjdXJhdGUgY29ycmVjdGlvbiBzdWdnZXN0aW9ucy4gQ2Fs
bGVyIGNhbiBwYXNzIGluIG1vcmUgdGV4dCBpbiAiY29udGV4dCIgdG8gYWlkIHN1Y2ggc3BlbGxj
aGVja2VycyBvbiBsYW5ndWFnZQogICAgIC8vIGlkZW50aWZpY2F0aW9uLiBOb3JhbWxseSBpdCdz
IHRoZSB0ZXh0IHN1cnJvdW5kaW5nIHRoZSAid29yZCIgZm9yIHdoaWNoIHdlIGFyZSBnZXR0aW5n
IGNvcnJlY3Rpb24gc3VnZ2VzdGlvbnMuCiAgICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JX
b3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uLCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlcykg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRy
PFRleHRDaGVja2luZ1JlcXVlc3Q+LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2Vs
ZWN0aW9uKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFRl
eHRDaGVja2luZ1JlcXVlc3QmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0
aW9uKSA9IDA7CiB9OwogCiB9Ci0KLSNlbmRpZiAvLyBUZXh0Q2hlY2tlckNsaWVudF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuaAppbmRleCA0YmZlOTMyMDlj
MjIxN2U5MmNkODJmNTUzYTQ4YzI0MzRhMTM2NDA0Li5hMzQ5YzM4MjhkN2JhOGY3YTFlNDM4ODRl
NjE0ZDg0NmEyODY0N2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nLmgKQEAgLTIzLDc3ICsyMyw1OSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lm
bmRlZiBUZXh0RW5jb2RpbmdfaAotI2RlZmluZSBUZXh0RW5jb2RpbmdfaAorI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBUZXh0RW5jb2RpbmcgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgVGV4dEVuY29kaW5nKCkgOiBtX25hbWUoMCkgeyB9Ci0gICAgICAgIFRleHRF
bmNvZGluZyhjb25zdCBjaGFyKiBuYW1lKTsKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgVGV4dEVu
Y29kaW5nKGNvbnN0IFN0cmluZyYgbmFtZSk7CitjbGFzcyBUZXh0RW5jb2RpbmcgeworcHVibGlj
OgorICAgIFRleHRFbmNvZGluZygpID0gZGVmYXVsdDsKKyAgICBUZXh0RW5jb2RpbmcoY29uc3Qg
Y2hhciogbmFtZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgVGV4dEVuY29kaW5nKGNvbnN0IFN0cmlu
ZyYgbmFtZSk7CiAKLSAgICAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9uYW1l
OyB9Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0K
LSAgICAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgY2hhciogZG9tTmFtZSgpIGNvbnN0OyAvLyBu
YW1lIGV4cG9zZWQgdmlhIERPTQotICAgICAgICBib29sIHVzZXNWaXN1YWxPcmRlcmluZygpIGNv
bnN0OwotICAgICAgICBib29sIGlzSmFwYW5lc2UoKSBjb25zdDsKLSAgICAgICAgCi0gICAgICAg
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gZGlzcGxheVN0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IHN0cikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fYmFja3NsYXNoQXND
dXJyZW5jeVN5bWJvbCA9PSAnXFwnIHx8ICFzdHIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0
cjsKLSAgICAgICAgICAgIHJldHVybiBzdHItPnJlcGxhY2UoJ1xcJywgbV9iYWNrc2xhc2hBc0N1
cnJlbmN5U3ltYm9sKTsKLSAgICAgICAgfQotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KLSAgICAgICAgdm9pZCBkaXNwbGF5QnVmZmVyKENoYXJhY3RlclR5cGUqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KG1fYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCA9PSAnXFwnKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgewot
ICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICdcXCcpCi0gICAgICAgICAgICAg
ICAgICAgIGNoYXJhY3RlcnNbaV0gPSBtX2JhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2w7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBt
X25hbWU7IH0KKyAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9
CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgY2hhciogZG9tTmFtZSgpIGNvbnN0OyAvLyBuYW1l
IGV4cG9zZWQgdmlhIERPTQorICAgIGJvb2wgdXNlc1Zpc3VhbE9yZGVyaW5nKCkgY29uc3Q7Cisg
ICAgYm9vbCBpc0phcGFuZXNlKCkgY29uc3Q7CiAKLSAgICAgICAgY29uc3QgVGV4dEVuY29kaW5n
JiBjbG9zZXN0Qnl0ZUJhc2VkRXF1aXZhbGVudCgpIGNvbnN0OwotICAgICAgICBjb25zdCBUZXh0
RW5jb2RpbmcmIGVuY29kaW5nRm9yRm9ybVN1Ym1pc3Npb24oKSBjb25zdDsKKyAgICBjb25zdCBU
ZXh0RW5jb2RpbmcmIGNsb3Nlc3RCeXRlQmFzZWRFcXVpdmFsZW50KCkgY29uc3Q7CisgICAgY29u
c3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZ0ZvckZvcm1TdWJtaXNzaW9uKCkgY29uc3Q7CiAKLSAg
ICAgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiBzdHIsIHNpemVfdCBsZW5ndGgpIGNvbnN0
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgaWdub3JlZDsKLSAgICAgICAgICAgIHJldHVy
biBkZWNvZGUoc3RyLCBsZW5ndGgsIGZhbHNlLCBpZ25vcmVkKTsKLSAgICAgICAgfQotICAgICAg
ICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3Ro
LCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikgY29uc3Q7Ci0gICAgICAgIENTdHJp
bmcgZW5jb2RlKFN0cmluZ1ZpZXcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJv
b2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKSBjb25zdDsKKyAgICBTdHJpbmcgZGVjb2Rl
KGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoKSBjb25zdDsKKyAgICBDU3RyaW5nIGVuY29kZShT
dHJpbmdWaWV3LCBVbmVuY29kYWJsZUhhbmRsaW5nKSBjb25zdDsKIAotICAgICAgICBVQ2hhciBi
YWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaXNCeXRlQmFz
ZWRFbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuICFpc05vbkJ5dGVCYXNlZEVuY29kaW5nKCk7IH0K
KyAgICBVQ2hhciBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkgY29uc3Q7CisgICAgYm9vbCBp
c0J5dGVCYXNlZEVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gIWlzTm9uQnl0ZUJhc2VkRW5jb2Rp
bmcoKTsgfQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgYm9vbCBpc05vbkJ5dGVCYXNlZEVuY29k
aW5nKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaXNVVEY3RW5jb2RpbmcoKSBjb25zdDsKK3ByaXZh
dGU6CisgICAgYm9vbCBpc05vbkJ5dGVCYXNlZEVuY29kaW5nKCkgY29uc3Q7CisgICAgYm9vbCBp
c1VURjdFbmNvZGluZygpIGNvbnN0OwogCi0gICAgICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKLSAg
ICAgICAgVUNoYXIgbV9iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sOwotICAgIH07CisgICAgY29u
c3QgY2hhciogbV9uYW1lIHsgbnVsbHB0ciB9OworICAgIFVDaGFyIG1fYmFja3NsYXNoQXNDdXJy
ZW5jeVN5bWJvbDsKK307CiAKLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRleHRF
bmNvZGluZyYgYSwgY29uc3QgVGV4dEVuY29kaW5nJiBiKSB7IHJldHVybiBhLm5hbWUoKSA9PSBi
Lm5hbWUoKTsgfQotICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVGV4dEVuY29kaW5n
JiBhLCBjb25zdCBUZXh0RW5jb2RpbmcmIGIpIHsgcmV0dXJuIGEubmFtZSgpICE9IGIubmFtZSgp
OyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRleHRFbmNvZGluZyYgYSwgY29uc3Qg
VGV4dEVuY29kaW5nJiBiKSB7IHJldHVybiBhLm5hbWUoKSA9PSBiLm5hbWUoKTsgfQoraW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBUZXh0RW5jb2RpbmcmIGEsIGNvbnN0IFRleHRFbmNvZGlu
ZyYgYikgeyByZXR1cm4gYS5uYW1lKCkgIT0gYi5uYW1lKCk7IH0KIAotICAgIGNvbnN0IFRleHRF
bmNvZGluZyYgQVNDSUlFbmNvZGluZygpOwotICAgIGNvbnN0IFRleHRFbmNvZGluZyYgTGF0aW4x
RW5jb2RpbmcoKTsKLSAgICBjb25zdCBUZXh0RW5jb2RpbmcmIFVURjE2QmlnRW5kaWFuRW5jb2Rp
bmcoKTsKLSAgICBjb25zdCBUZXh0RW5jb2RpbmcmIFVURjE2TGl0dGxlRW5kaWFuRW5jb2Rpbmco
KTsKLSAgICBjb25zdCBUZXh0RW5jb2RpbmcmIFVURjMyQmlnRW5kaWFuRW5jb2RpbmcoKTsKLSAg
ICBjb25zdCBUZXh0RW5jb2RpbmcmIFVURjMyTGl0dGxlRW5kaWFuRW5jb2RpbmcoKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBjb25zdCBUZXh0RW5jb2RpbmcmIFVURjhFbmNvZGluZygpOwotICAgIFdF
QkNPUkVfRVhQT1JUIGNvbnN0IFRleHRFbmNvZGluZyYgV2luZG93c0xhdGluMUVuY29kaW5nKCk7
Citjb25zdCBUZXh0RW5jb2RpbmcmIEFTQ0lJRW5jb2RpbmcoKTsKK2NvbnN0IFRleHRFbmNvZGlu
ZyYgTGF0aW4xRW5jb2RpbmcoKTsKK2NvbnN0IFRleHRFbmNvZGluZyYgVVRGMTZCaWdFbmRpYW5F
bmNvZGluZygpOworY29uc3QgVGV4dEVuY29kaW5nJiBVVEYxNkxpdHRsZUVuZGlhbkVuY29kaW5n
KCk7Citjb25zdCBUZXh0RW5jb2RpbmcmIFVURjMyQmlnRW5kaWFuRW5jb2RpbmcoKTsKK2NvbnN0
IFRleHRFbmNvZGluZyYgVVRGMzJMaXR0bGVFbmRpYW5FbmNvZGluZygpOworV0VCQ09SRV9FWFBP
UlQgY29uc3QgVGV4dEVuY29kaW5nJiBVVEY4RW5jb2RpbmcoKTsKK1dFQkNPUkVfRVhQT1JUIGNv
bnN0IFRleHRFbmNvZGluZyYgV2luZG93c0xhdGluMUVuY29kaW5nKCk7CiAKLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKK2lubGluZSBTdHJpbmcgVGV4dEVuY29kaW5nOjpkZWNvZGUoY29uc3QgY2hh
ciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgY29uc3QKK3sKKyAgICBib29sIGlnbm9yZWQ7
CisgICAgcmV0dXJuIGRlY29kZShjaGFyYWN0ZXJzLCBsZW5ndGgsIGZhbHNlLCBpZ25vcmVkKTsK
K30KIAotI2VuZGlmIC8vIFRleHRFbmNvZGluZ19oCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKaW5kZXggMDZkOTE0MjI0
MDc5YWZiYTcxNTEzYWMwZDIxODg1YzJkNTMxZGJjYS4uZDdkZWM3MzU4OThjMjMyOGQwNGNiYTc0
MjY3YWI0MjhiZmNiYzQyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jv
b3RJbmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5l
Qm94LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC01MCw3ICs1MCw3IEBAIHN0cnVjdCBTYW1lU2l6ZUFzUm9vdElubGluZUJveCA6IHB1
YmxpYyBJbmxpbmVGbG93Qm94IHsKIENPTVBJTEVfQVNTRVJUKHNpemVvZihSb290SW5saW5lQm94
KSA9PSBzaXplb2YoU2FtZVNpemVBc1Jvb3RJbmxpbmVCb3gpLCBSb290SW5saW5lQm94X3Nob3Vs
ZF9zdGF5X3NtYWxsKTsKIAogdHlwZWRlZiBXVEY6Okhhc2hNYXA8Y29uc3QgUm9vdElubGluZUJv
eCosIHN0ZDo6dW5pcXVlX3B0cjxFbGxpcHNpc0JveD4+IEVsbGlwc2lzQm94TWFwOwotc3RhdGlj
IEVsbGlwc2lzQm94TWFwKiBnRWxsaXBzaXNCb3hNYXAgPSAwOworc3RhdGljIEVsbGlwc2lzQm94
TWFwKiBnRWxsaXBzaXNCb3hNYXA7CiAKIHN0YXRpYyBDb250YWluaW5nUmVnaW9uTWFwJiBjb250
YWluaW5nUmVnaW9uTWFwKFJlbmRlckJsb2NrRmxvdyYgYmxvY2spCiB7CkBAIC0yMDgsMTAgKzIw
OCwxMCBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OmFkanVzdFBvc2l0aW9uKGZsb2F0IGR4LCBmbG9h
dCBkeSkKIHZvaWQgUm9vdElubGluZUJveDo6Y2hpbGRSZW1vdmVkKElubGluZUJveCogYm94KQog
ewogICAgIGlmICgmYm94LT5yZW5kZXJlcigpID09IG1fbGluZUJyZWFrT2JqKQotICAgICAgICBz
ZXRMaW5lQnJlYWtJbmZvKDAsIDAsIEJpZGlTdGF0dXMoKSk7CisgICAgICAgIHNldExpbmVCcmVh
a0luZm8obnVsbHB0ciwgMCwgQmlkaVN0YXR1cygpKTsKIAogICAgIGZvciAoUm9vdElubGluZUJv
eCogcHJldiA9IHByZXZSb290Qm94KCk7IHByZXYgJiYgcHJldi0+bGluZUJyZWFrT2JqKCkgPT0g
JmJveC0+cmVuZGVyZXIoKTsgcHJldiA9IHByZXYtPnByZXZSb290Qm94KCkpIHsKLSAgICAgICAg
cHJldi0+c2V0TGluZUJyZWFrSW5mbygwLCAwLCBCaWRpU3RhdHVzKCkpOworICAgICAgICBwcmV2
LT5zZXRMaW5lQnJlYWtJbmZvKG51bGxwdHIsIDAsIEJpZGlTdGF0dXMoKSk7CiAgICAgICAgIHBy
ZXYtPm1hcmtEaXJ0eSgpOwogICAgIH0KIH0KQEAgLTU2NiwyMiArNTY2LDIwIEBAIFJlbmRlck9i
amVjdDo6U2VsZWN0aW9uU3RhdGUgUm9vdElubGluZUJveDo6c2VsZWN0aW9uU3RhdGUoKQogCiBJ
bmxpbmVCb3gqIFJvb3RJbmxpbmVCb3g6OmZpcnN0U2VsZWN0ZWRCb3goKQogewotICAgIGZvciAo
SW5saW5lQm94KiBib3ggPSBmaXJzdExlYWZDaGlsZCgpOyBib3g7IGJveCA9IGJveC0+bmV4dExl
YWZDaGlsZCgpKSB7CisgICAgZm9yIChhdXRvKiBib3ggPSBmaXJzdExlYWZDaGlsZCgpOyBib3g7
IGJveCA9IGJveC0+bmV4dExlYWZDaGlsZCgpKSB7CiAgICAgICAgIGlmIChib3gtPnNlbGVjdGlv
blN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKQogICAgICAgICAgICAgcmV0
dXJuIGJveDsKICAgICB9Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAogSW5saW5lQm94KiBSb290SW5saW5lQm94OjpsYXN0U2VsZWN0ZWRCb3goKQogewotICAgIGZv
ciAoSW5saW5lQm94KiBib3ggPSBsYXN0TGVhZkNoaWxkKCk7IGJveDsgYm94ID0gYm94LT5wcmV2
TGVhZkNoaWxkKCkpIHsKKyAgICBmb3IgKGF1dG8qIGJveCA9IGxhc3RMZWFmQ2hpbGQoKTsgYm94
OyBib3ggPSBib3gtPnByZXZMZWFmQ2hpbGQoKSkgewogICAgICAgICBpZiAoYm94LT5zZWxlY3Rp
b25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkKICAgICAgICAgICAgIHJl
dHVybiBib3g7CiAgICAgfQotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKIExheW91dFVuaXQgUm9vdElubGluZUJveDo6c2VsZWN0aW9uVG9wKCkgY29uc3QKQEAgLTgw
NSw3ICs4MDMsNyBAQCBJbmxpbmVCb3gqIFJvb3RJbmxpbmVCb3g6OmNsb3Nlc3RMZWFmQ2hpbGRG
b3JMb2dpY2FsTGVmdFBvc2l0aW9uKGludCBsZWZ0UG9zaXRpbwogICAgICAgICAvLyBSZXR1cm4g
aXQuCiAgICAgICAgIHJldHVybiBsYXN0TGVhZjsKIAotICAgIElubGluZUJveCogY2xvc2VzdExl
YWYgPSAwOworICAgIElubGluZUJveCogY2xvc2VzdExlYWYgPSBudWxscHRyOwogICAgIGZvciAo
SW5saW5lQm94KiBsZWFmID0gZmlyc3RMZWFmOyBsZWFmOyBsZWFmID0gbGVhZi0+bmV4dExlYWZD
aGlsZElnbm9yaW5nTGluZUJyZWFrKCkpIHsKICAgICAgICAgaWYgKCFsZWFmLT5yZW5kZXJlcigp
LmlzTGlzdE1hcmtlcigpICYmICghb25seUVkaXRhYmxlTGVhdmVzIHx8IGlzRWRpdGFibGVMZWFm
KGxlYWYpKSkgewogICAgICAgICAgICAgY2xvc2VzdExlYWYgPSBsZWFmOwpAQCAtODIxLDEzICs4
MTksMTMgQEAgSW5saW5lQm94KiBSb290SW5saW5lQm94OjpjbG9zZXN0TGVhZkNoaWxkRm9yTG9n
aWNhbExlZnRQb3NpdGlvbihpbnQgbGVmdFBvc2l0aW8KIAogQmlkaVN0YXR1cyBSb290SW5saW5l
Qm94OjpsaW5lQnJlYWtCaWRpU3RhdHVzKCkgY29uc3QKIHsgCi0gICAgcmV0dXJuIEJpZGlTdGF0
dXMoc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KG1fbGluZUJyZWFrQmlkaVN0YXR1c0Vvciks
IHN0YXRpY19jYXN0PFVDaGFyRGlyZWN0aW9uPihtX2xpbmVCcmVha0JpZGlTdGF0dXNMYXN0U3Ry
b25nKSwgc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KG1fbGluZUJyZWFrQmlkaVN0YXR1c0xh
c3QpLCBtX2xpbmVCcmVha0NvbnRleHQpOworICAgIHJldHVybiB7IHN0YXRpY19jYXN0PFVDaGFy
RGlyZWN0aW9uPihtX2xpbmVCcmVha0JpZGlTdGF0dXNFb3IpLCBzdGF0aWNfY2FzdDxVQ2hhckRp
cmVjdGlvbj4obV9saW5lQnJlYWtCaWRpU3RhdHVzTGFzdFN0cm9uZyksIHN0YXRpY19jYXN0PFVD
aGFyRGlyZWN0aW9uPihtX2xpbmVCcmVha0JpZGlTdGF0dXNMYXN0KSwgbV9saW5lQnJlYWtDb250
ZXh0LmNvcHlSZWYoKSB9OwogfQogCi12b2lkIFJvb3RJbmxpbmVCb3g6OnNldExpbmVCcmVha0lu
Zm8oUmVuZGVyT2JqZWN0KiBvYmosIHVuc2lnbmVkIGJyZWFrUG9zLCBjb25zdCBCaWRpU3RhdHVz
JiBzdGF0dXMpCit2b2lkIFJvb3RJbmxpbmVCb3g6OnNldExpbmVCcmVha0luZm8oUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIHVuc2lnbmVkIGJyZWFrUG9zaXRpb24sIGNvbnN0IEJpZGlTdGF0dXMmIHN0
YXR1cykKIHsKLSAgICBtX2xpbmVCcmVha09iaiA9IG9iajsKLSAgICBtX2xpbmVCcmVha1BvcyA9
IGJyZWFrUG9zOworICAgIG1fbGluZUJyZWFrT2JqID0gb2JqZWN0OworICAgIG1fbGluZUJyZWFr
UG9zID0gYnJlYWtQb3NpdGlvbjsKICAgICBtX2xpbmVCcmVha0JpZGlTdGF0dXNFb3IgPSBzdGF0
dXMuZW9yOwogICAgIG1fbGluZUJyZWFrQmlkaVN0YXR1c0xhc3RTdHJvbmcgPSBzdGF0dXMubGFz
dFN0cm9uZzsKICAgICBtX2xpbmVCcmVha0JpZGlTdGF0dXNMYXN0ID0gc3RhdHVzLmxhc3Q7CkBA
IC04MzcsNyArODM1LDcgQEAgdm9pZCBSb290SW5saW5lQm94OjpzZXRMaW5lQnJlYWtJbmZvKFJl
bmRlck9iamVjdCogb2JqLCB1bnNpZ25lZCBicmVha1BvcywgY29uc3QKIEVsbGlwc2lzQm94KiBS
b290SW5saW5lQm94OjplbGxpcHNpc0JveCgpIGNvbnN0CiB7CiAgICAgaWYgKCFoYXNFbGxpcHNp
c0JveCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
cmV0dXJuIGdFbGxpcHNpc0JveE1hcC0+Z2V0KHRoaXMpOwogfQogCkBAIC05MzYsOCArOTM0LDgg
QEAgdm9pZCBSb290SW5saW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQm94KElubGluZUJveCYg
Ym94LCBHbHlwaE92ZXJmbG93QW5kRmFsbGIKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgYm94TGlu
ZVN0eWxlID0gYm94LmxpbmVTdHlsZSgpOwogICAgIGlmICh1c2VkRm9udHMgJiYgIXVzZWRGb250
cy0+aXNFbXB0eSgpICYmIChpbmNsdWRlRm9udCB8fCAoYm94TGluZVN0eWxlLmxpbmVIZWlnaHQo
KS5pc05lZ2F0aXZlKCkgJiYgaW5jbHVkZUxlYWRpbmcpKSkgewogICAgICAgICB1c2VkRm9udHMt
PmFwcGVuZCgmYm94TGluZVN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKSk7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXNlZEZvbnRzLT5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gdXNlZEZvbnRzLT5hdChp
KS0+Zm9udE1ldHJpY3MoKTsKKyAgICAgICAgZm9yIChhdXRvJiBmb250IDogKnVzZWRGb250cykg
eworICAgICAgICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBmb250LT5mb250TWV0cmljcygpOwog
ICAgICAgICAgICAgaW50IHVzZWRGb250QXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KGJhc2Vs
aW5lVHlwZSgpKTsKICAgICAgICAgICAgIGludCB1c2VkRm9udERlc2NlbnQgPSBmb250TWV0cmlj
cy5kZXNjZW50KGJhc2VsaW5lVHlwZSgpKTsKICAgICAgICAgICAgIGludCBoYWxmTGVhZGluZyA9
IChmb250TWV0cmljcy5saW5lU3BhY2luZygpIC0gZm9udE1ldHJpY3MuaGVpZ2h0KCkpIC8gMjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCmluZGV4IGIzNDFkNmMzMzAy
M2UwYWMyYTEzZjg2ODQ2Zjk3OWJiYWFhYTU2ZTEuLjE0MTE1YTFiOTZjMDMxNzcxNWNhMGMzMTQz
MTE0Mzg2ZDdkY2VlMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNw
cApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRE9N
V2luZG93LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFZGl0b3JD
bGllbnQuaCIKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtNTEsNiArNTIsNyBAQAogI2luY2x1
ZGUgIlNWR0ltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlNvY2tldFByb3ZpZGVyLmgiCiAjaW5jbHVkZSAi
VGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvSlNMb2NrLmg+CkBAIC00MTIsNyArNDE0LDcgQEAgYm9vbCBTVkdJbWFnZTo6ZGF0
YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgaWYgKGFsbERhdGFSZWNlaXZlZCkgewotICAgICAgICBQYWdlQ29uZmlndXJhdGlvbiBwYWdl
Q29uZmlndXJhdGlvbihtYWtlVW5pcXVlUmVmPEVtcHR5RWRpdG9yQ2xpZW50PigpLCBTb2NrZXRQ
cm92aWRlcjo6Y3JlYXRlKCkpOworICAgICAgICBQYWdlQ29uZmlndXJhdGlvbiBwYWdlQ29uZmln
dXJhdGlvbihjcmVhdGVFbXB0eUVkaXRvckNsaWVudCgpLCBTb2NrZXRQcm92aWRlcjo6Y3JlYXRl
KCkpOwogICAgICAgICBmaWxsV2l0aEVtcHR5Q2xpZW50cyhwYWdlQ29uZmlndXJhdGlvbik7CiAg
ICAgICAgIG1fY2hyb21lQ2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdJbWFnZUNocm9tZUNs
aWVudD4odGhpcyk7CiAgICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLmNocm9tZUNsaWVudCA9IG1f
Y2hyb21lQ2xpZW50LmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuaAppbmRleCAxMmVlZTJiMmJjNWZhMGE2YWYyNTFlYTU3NDYz
YjVmZWIyNDlmNzI3Li4zYjM1ZDRkMjExMGY0OWYxYzQ5M2ZlYWNjZDA4NDczOGI4MjM4YWY5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuaApAQCAtMTY2LDcgKzE2Niw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHdpbGxTZXRJbnB1
dE1ldGhvZFN0YXRlKCkgZmluYWw7CiAgICAgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wg
ZW5hYmxlZCkgZmluYWw7Ci0gICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVm
UHRyPFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+LCBjb25zdCBXZWJDb3JlOjpWaXNpYmxl
U2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKSBmaW5hbDsKKyAgICB2b2lkIHJlcXVlc3RDaGVj
a2luZ09mU3RyaW5nKFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3QmLCBjb25zdCBXZWJDb3Jl
OjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKSBmaW5hbDsKIAogI2lmIFBMQVRG
T1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAKICAg
ICB2b2lkIHJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlZpc2li
bGVTZWxlY3Rpb24mKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQppbmRleCBkODZmMzhjYzMxYWE1YzkwNzIyOTRlYTE4
OGM4YjI2NDg3YjFjYmFiLi43ZjlmNDE3YWQxYzQzYTg2YWEyNWQyMTQ4ZTU0Njk1ZTFkYjcwMjhl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50Lm1tCkBAIC0xMzIzLDExICsxMzIzLDExIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojpk
aWRDaGVja1N1Y2NlZWQoaW50IHNlcXVlbmNlLCBOU0FycmF5KiByZXN1bHRzKQogCiAjZW5kaWYK
IAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQ
dHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4gcmVxdWVzdCwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZyhXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQogewogI2lmICFQTEFURk9S
TShJT1MpCiAgICAgQVNTRVJUKCFtX3RleHRDaGVja2luZ1JlcXVlc3QpOwotICAgIG1fdGV4dENo
ZWNraW5nUmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgbV90ZXh0Q2hlY2tpbmdSZXF1ZXN0ID0gJnJl
cXVlc3Q7CiAKICAgICBpbnQgc2VxdWVuY2UgPSBtX3RleHRDaGVja2luZ1JlcXVlc3QtPmRhdGEo
KS5zZXF1ZW5jZSgpOwogICAgIE5TUmFuZ2UgcmFuZ2UgPSBOU01ha2VSYW5nZSgwLCBtX3RleHRD
aGVja2luZ1JlcXVlc3QtPmRhdGEoKS50ZXh0KCkubGVuZ3RoKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAppbmRleCA1OTRjNDhk
M2M1YTY0ODM4YzQ5NDk3ZjY2NGNkZTQyZTU4NDAyZmIxLi5iMTQ4YmU3MmFmZmFiMWJmMzQ1ZTAx
MTA3ZmJmNTI3NThiODYzZTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAtMTEzLDcgKzExMyw3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgd2lsbFNldElucHV0TWV0aG9kU3RhdGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHNl
dElucHV0TWV0aG9kU3RhdGUoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXF1ZXN0Q2hlY2tp
bmdPZlN0cmluZyhXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4s
IGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mKSBvdmVycmlkZSB7IH0KKyAgICB2b2lk
IHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3QmLCBj
b25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uJikgb3ZlcnJpZGUgeyB9CiAKICAgICBXZWJD
b3JlOjpUZXh0Q2hlY2tlckNsaWVudCogdGV4dENoZWNrZXIoKSBvdmVycmlkZSB7IHJldHVybiB0
aGlzOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAppbmRleCAyMjEyYWNkOTExNDNhMTQyMzQ3
ODA3MDY3YTUyZWEwOWY5ZDI0OGRjLi41NGIyN2I0NDA0ODUyNjllNWU4N2Y4MmQwZmI1MDJhMWYw
MjJhYzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC01MjYsMTQgKzUyNiwxMiBAQCB2
b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3Jk
LCBjb25zdCBTdHJpbmcmIGNvbnRleAogICAgIG1fcGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6R2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwgY29udGV4dCwgaW5zZXJ0aW9uUG9p
bnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50U2VsZWN0aW9uKSksIE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkdldEd1ZXNzZXNGb3JXb3JkOjpSZXBseShndWVzc2VzKSk7CiB9CiAKLXZvaWQg
V2ViRWRpdG9yQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXVEY6OlBhc3NSZWZQdHI8
VGV4dENoZWNraW5nUmVxdWVzdD4gcHJwUmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNl
bGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZyhUZXh0Q2hlY2tpbmdSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQogewotICAgIFJlZlB0cjxU
ZXh0Q2hlY2tpbmdSZXF1ZXN0PiByZXF1ZXN0ID0gcHJwUmVxdWVzdDsKLQogICAgIHVpbnQ2NF90
IHJlcXVlc3RJRCA9IGdlbmVyYXRlVGV4dENoZWNraW5nUmVxdWVzdElEKCk7Ci0gICAgbV9wYWdl
LT5hZGRUZXh0Q2hlY2tpbmdSZXF1ZXN0KHJlcXVlc3RJRCwgcmVxdWVzdCk7CisgICAgbV9wYWdl
LT5hZGRUZXh0Q2hlY2tpbmdSZXF1ZXN0KHJlcXVlc3RJRCwgJnJlcXVlc3QpOwogCi0gICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlcXVlc3RDaGVja2luZ09mU3RyaW5n
KHJlcXVlc3RJRCwgcmVxdWVzdC0+ZGF0YSgpLCBpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2Vs
ZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlJlcXVlc3RDaGVja2luZ09mU3RyaW5nKHJlcXVlc3RJRCwgcmVxdWVzdC5k
YXRhKCksIGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlv
bikpKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OndpbGxTZXRJbnB1dE1ldGhvZFN0YXRl
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5oCmluZGV4IDZiM2EyMGY1NDZjYTI1Y2RkMTIyYmJjZmY5MmRl
ZDBkNDYzYTY2MzIuLjhkODE3NGRjOTEzYWY1ZTJjYjMwMTgwNzQyMDVhZDk1ODE5NjRhNjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuaApAQCAtMTQ5LDcgKzE0OSw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29u
dGV4dCwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiwg
VmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpIGZpbmFsOwogICAgIHZvaWQgd2lsbFNldElucHV0TWV0
aG9kU3RhdGUoKSBmaW5hbDsKICAgICB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFi
bGVkKSBmaW5hbDsKLSAgICB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0PiwgY29uc3QgV2ViQ29yZTo6VmlzaWJs
ZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikgZmluYWw7CisgICAgdm9pZCByZXF1ZXN0Q2hl
Y2tpbmdPZlN0cmluZyhXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0JiwgY29uc3QgV2ViQ29y
ZTo6VmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikgZmluYWw7CiAKICNpZiBQTEFU
Rk9STShHVEspCiAgICAgYm9vbCBzaG91bGRTaG93VW5pY29kZU1lbnUoKSBmaW5hbDsK
</data>
<flag name="review"
          id="320483"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>